diff --git a/.github/workflows/fake-pr-tests.yml b/.github/workflows/fake-pr-tests.yml deleted file mode 100644 index 2274166..0000000 --- a/.github/workflows/fake-pr-tests.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: PR tests -on: - pull_request: - types: [auto_merge_enabled] - workflow_dispatch: - -jobs: - skip: - name: Report fake success for PR tests - runs-on: ubuntu-latest - permissions: - checks: write - steps: - - uses: LouisBrunner/checks-action@v2.0.0 - with: - name: Run PR tests (Plugins) (Plugins) - conclusion: success - token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore deleted file mode 100644 index bf7460d..0000000 --- a/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.DS_Store -.vscode -.idea diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..449691b --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +save-exact=true \ No newline at end of file diff --git a/adapter/0.1.25.json b/adapter/0.1.25.json index f92085c..6366160 100644 --- a/adapter/0.1.25.json +++ b/adapter/0.1.25.json @@ -2,10 +2,10 @@ * Copyright © 2016-2022 by IntegrIT S.A. dba Hackolade. All rights reserved. * * The copyright to the computer software herein is the property of IntegrIT S.A. - * The software may be used and/or copied only with the written permission of - * IntegrIT S.A. or in accordance with the terms and conditions stipulated in - * the agreement/contract under which the software has been supplied. - * + * The software may be used and/or copied only with the written permission of + * IntegrIT S.A. or in accordance with the terms and conditions stipulated in + * the agreement/contract under which the software has been supplied. + * * { * "add": { * "entity": [], @@ -39,10 +39,8 @@ * }, * } */ - { - "modify": { - "container": [ - ["validateContainer", "name", "code"] - ] - } -} \ No newline at end of file +{ + "modify": { + "container": [["validateContainer", "name", "code"]] + } +} diff --git a/central_pane/dtdAbbreviation.json b/central_pane/dtdAbbreviation.json index bfbd503..685b3b8 100644 --- a/central_pane/dtdAbbreviation.json +++ b/central_pane/dtdAbbreviation.json @@ -6,4 +6,4 @@ "bool": "{0/1}", "bytes": "{BYTES}", "null": "{null}" -} \ No newline at end of file +} diff --git a/central_pane/style.json b/central_pane/style.json index 1bc4cfc..87accda 100644 --- a/central_pane/style.json +++ b/central_pane/style.json @@ -1,14 +1,16 @@ { "field": { - "dtd": [{ - "value": { - "border-style": "solid" - }, - "dependency": { - "key": "dataTypeMode", - "value": "Required" + "dtd": [ + { + "value": { + "border-style": "solid" + }, + "dependency": { + "key": "dataTypeMode", + "value": "Required" + } } - }], + ], "erd": [ "keys", "type", diff --git a/forward_engineering/api.js b/forward_engineering/api.js index d1eab60..e428ec1 100644 --- a/forward_engineering/api.js +++ b/forward_engineering/api.js @@ -1,160 +1,901 @@ -'use strict'; - -const { convertJsonSchemaToBigQuerySchema } = require('./helpers/schemaHelper'); -const reApi = require('../reverse_engineering/api'); -const applyToInstanceHelper = require('./helpers/applyToInstanceHelper'); -const { DROP_STATEMENTS } = require('./helpers/constants'); -const { commentDropStatements } = require('./helpers/commentDropStatements'); - -module.exports = { - generateScript(data, logger, callback, app) { - try { - logger.log('info', { message: 'Start generating schema' }); - - if (data.isUpdateScript) { - return generateAlterScript(data, callback, app); - } - - const schema = convertJsonSchemaToBigQuerySchema(JSON.parse(data.jsonSchema)); - - logger.log('info', { message: 'Generating schema finished' }); - - callback(null, JSON.stringify(schema, null, 4)); - } catch (e) { - logger.log( - 'error', - { message: e.message, stack: e.stack }, - 'Error ocurred during generation schema on dataset level', - ); - callback({ - message: e.message, - stack: e.stack, - }); - } - }, - - generateViewScript(...args) { - return this.generateScript(...args); - }, - - generateContainerScript(data, logger, callback, app) { - try { - if (data.isUpdateScript) { - data.jsonSchema = data.collections[0]; - return generateAlterScript(data, callback, app); - } - - logger.log('info', { message: 'Start generating schema' }); - - const entities = data.entities.reduce((result, entityId) => { - const name = data.entityData[entityId]?.[0]?.collectionName; - - logger.log('info', { message: 'Generate "' + name + '" schema' }); - - return { - ...result, - [name]: convertJsonSchemaToBigQuerySchema(JSON.parse(data.jsonSchema[entityId])), - }; - }, {}); - - const views = (data.views || []).reduce((result, viewId) => { - const name = data.viewData[viewId]?.[0]?.name; - - logger.log('info', { message: 'Generate "' + name + '" schema' }); - - return { - ...result, - [name]: convertJsonSchemaToBigQuerySchema(JSON.parse(data.jsonSchema[viewId])), - }; - }, {}); - - logger.log('info', { message: 'Generating schema finished' }); - - callback( - null, - JSON.stringify( - { - ...entities, - ...(views || {}), - }, - null, - 4, - ), - ); - } catch (e) { - logger.log( - 'error', - { message: e.message, stack: e.stack }, - 'Error ocurred during generation schema on dataset level', - ); - callback({ - message: e.message, - stack: e.stack, - }); - } - }, - testConnection(connectionInfo, logger, callback, app) { - reApi.testConnection(connectionInfo, logger, callback, app).then(callback, callback); - }, - applyToInstance(connectionInfo, logger, callback, app) { - logger.clear(); - logger.log('info', connectionInfo, 'connectionInfo', connectionInfo.hiddenKeys); - - applyToInstanceHelper - .applyToInstance(connectionInfo, logger, app) - .then(result => { - callback(null, result); - }) - .catch(error => { - const err = { - message: error.message, - stack: error.stack, - }; - logger.log('error', err, 'Error when applying to instance'); - callback(err); - }); - }, - isDropInStatements(data, logger, callback, app) { - try { - const cb = (error, script = '') => - callback( - error, - DROP_STATEMENTS.some(statement => script.includes(statement)), - ); - - if (data.level === 'container') { - this.generateContainerScript(data, logger, cb, app); - } else { - this.generateScript(data, logger, cb, app); - } - } catch (e) { - callback({ message: e.message, stack: e.stack }); - } - }, -}; - -const generateAlterScript = (data, callback, app) => { - const { - getAlterContainersScripts, - getAlterCollectionsScripts, - getAlterViewScripts, - } = require('./helpers/alterScriptFromDeltaHelper'); - - const collection = JSON.parse(data.jsonSchema); - if (!collection) { - throw new Error( - '"comparisonModelCollection" is not found. Alter script can be generated only from Delta model', - ); - } - - const containersScripts = getAlterContainersScripts(collection, app, data.modelData); - const collectionsScripts = getAlterCollectionsScripts(collection, app, data.modelData); - const viewScripts = getAlterViewScripts(collection, app, data.modelData); - const script = [...containersScripts, ...collectionsScripts, ...viewScripts].join('\n\n'); - - const applyDropStatements = data.options?.additionalOptions?.some( - option => option.id === 'applyDropStatements' && option.value, - ); - - callback(null, applyDropStatements ? script : commentDropStatements(script)); -}; +"use strict";var uN=Object.create;var Zi=Object.defineProperty;var tN=Object.getOwnPropertyDescriptor;var rN=Object.getOwnPropertyNames;var iN=Object.getPrototypeOf,aN=Object.prototype.hasOwnProperty;var sN=(i,e,u)=>e in i?Zi(i,e,{enumerable:!0,configurable:!0,writable:!0,value:u}):i[e]=u;var c=(i,e)=>Zi(i,"name",{value:e,configurable:!0});var Ze=(i,e)=>()=>(i&&(e=i(i=0)),e);var v=(i,e)=>()=>(e||i((e={exports:{}}).exports,e),e.exports),nN=(i,e)=>{for(var u in e)Zi(i,u,{get:e[u],enumerable:!0})},L7=(i,e,u,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of rN(e))!aN.call(i,a)&&a!==u&&Zi(i,a,{get:()=>e[a],enumerable:!(r=tN(e,a))||r.enumerable});return i};var vp=(i,e,u)=>(u=i!=null?uN(iN(i)):{},L7(e||!i||!i.__esModule?Zi(u,"default",{value:i,enumerable:!0}):u,i)),Dp=i=>L7(Zi({},"__esModule",{value:!0}),i);var Yu=(i,e,u)=>(sN(i,typeof e!="symbol"?e+"":e,u),u);var B7=v((PK,m7)=>{"use strict";var E7=c(i=>String(i||"").toUpperCase(),"toUpper"),oN=c(i=>Object.fromEntries(Object.entries(i).filter(([e,u])=>u!=="")),"cleanUp"),lN=c(i=>i.type==="struct"?"record":i.type,"getType"),wp=c(({name:i,jsonSchema:e})=>{if(!e.isActivated)return[];let u=oN({name:i,type:E7(lN(e)),mode:E7(e.dataTypeMode||"Nullable"),description:e.refDescription||e.description});return e.properties?(u.fields=Object.keys(e.properties).flatMap(r=>wp({name:r,jsonSchema:e.properties[r]})),[u]):e.items?(Array.isArray(e.items)?e.items:[e.items]).flatMap(a=>wp({name:i,jsonSchema:{...a,dataTypeMode:"Repeated"}})):[u]},"convertItem"),cN=c(i=>{let e=[];return e=Object.keys(i.properties||{}).flatMap(u=>wp({name:u,jsonSchema:i.properties[u]})),e},"convertJsonSchemaToBigQuerySchema");m7.exports={convertJsonSchemaToBigQuerySchema:cN}});var rr=v(Ru=>{"use strict";Object.defineProperty(Ru,"__esModule",{value:!0});Ru.callbackifyAll=Ru.callbackify=Ru.promisifyAll=Ru.promisify=void 0;function dN(i,e){if(i.promisified_)return i;e=e||{};let u=Array.prototype.slice,r=c(function(){let a;for(a=arguments.length-1;a>=0;a--){let l=arguments[a];if(!(typeof l>"u")){if(typeof l!="function")break;return i.apply(this,arguments)}}let s=u.call(arguments,0,a+1),n=Promise;return this&&this.Promise&&(n=this.Promise),new n((l,d)=>{s.push((...p)=>{let h=u.call(p),f=h.shift();if(f)return d(f);e.singular&&h.length===1?l(h[0]):l(h)}),i.apply(this,s)})},"wrapper");return r.promisified_=!0,r}c(dN,"promisify");Ru.promisify=dN;function pN(i,e){let u=e&&e.exclude||[];Object.getOwnPropertyNames(i.prototype).filter(s=>!u.includes(s)&&typeof i.prototype[s]=="function"&&!/(^_|(Stream|_)|promise$)|^constructor$/.test(s)).forEach(s=>{let n=i.prototype[s];n.promisified_||(i.prototype[s]=Ru.promisify(n,e))})}c(pN,"promisifyAll");Ru.promisifyAll=pN;function hN(i){if(i.callbackified_)return i;let e=c(function(){if(typeof arguments[arguments.length-1]!="function")return i.apply(this,arguments);let u=Array.prototype.pop.call(arguments);i.apply(this,arguments).then(r=>{r=Array.isArray(r)?r:[r],u(null,...r)},r=>u(r))},"wrapper");return e.callbackified_=!0,e}c(hN,"callbackify");Ru.callbackify=hN;function fN(i,e){let u=e&&e.exclude||[];Object.getOwnPropertyNames(i.prototype).filter(s=>!u.includes(s)&&typeof i.prototype[s]=="function"&&!/^_|(Stream|_)|^constructor$/.test(s)).forEach(s=>{let n=i.prototype[s];n.callbackified_||(i.prototype[s]=Ru.callbackify(n))})}c(fN,"callbackifyAll");Ru.callbackifyAll=fN});var ir=v((VK,M7)=>{"use strict";var SN=c(i=>i==null?[]:Array.isArray(i)?i:typeof i=="string"?[i]:typeof i[Symbol.iterator]=="function"?[...i]:[i],"arrify");M7.exports=SN});var Eu=v((qK,N7)=>{"use strict";var Qo=Object.prototype.hasOwnProperty,y7=Object.prototype.toString,T7=Object.defineProperty,_7=Object.getOwnPropertyDescriptor,A7=c(function(e){return typeof Array.isArray=="function"?Array.isArray(e):y7.call(e)==="[object Array]"},"isArray"),Y7=c(function(e){if(!e||y7.call(e)!=="[object Object]")return!1;var u=Qo.call(e,"constructor"),r=e.constructor&&e.constructor.prototype&&Qo.call(e.constructor.prototype,"isPrototypeOf");if(e.constructor&&!u&&!r)return!1;var a;for(a in e);return typeof a>"u"||Qo.call(e,a)},"isPlainObject"),R7=c(function(e,u){T7&&u.name==="__proto__"?T7(e,u.name,{enumerable:!0,configurable:!0,value:u.newValue,writable:!0}):e[u.name]=u.newValue},"setProperty"),g7=c(function(e,u){if(u==="__proto__")if(Qo.call(e,u)){if(_7)return _7(e,u).value}else return;return e[u]},"getProperty");N7.exports=c(function i(){var e,u,r,a,s,n,l=arguments[0],d=1,p=arguments.length,h=!1;for(typeof l=="boolean"&&(h=l,l=arguments[1]||{},d=2),(l==null||typeof l!="object"&&typeof l!="function")&&(l={});d{"use strict";Object.defineProperty($o,"__esModule",{value:!0});var ON=require("stream");function Up(i,e){if(Array.isArray(i)&&(i=i.map(u=>Up(u,e))),i!==null&&typeof i=="object"&&!(i instanceof Buffer)&&!(i instanceof ON.Stream)&&typeof i.hasOwnProperty=="function")for(let u in i)i.hasOwnProperty(u)&&(i[u]=Up(i[u],e));if(typeof i=="string"&&i.indexOf("{{projectId}}")>-1){if(!e||e==="{{projectId}}")throw new Jo;i=i.replace(/{{projectId}}/g,e)}return i}c(Up,"replaceProjectIdToken");$o.replaceProjectIdToken=Up;var Pp=class Pp extends Error{constructor(){super(...arguments),this.message=`Sorry, we cannot connect to Cloud Services without a project + ID. You may specify one with an environment variable named + "GOOGLE_CLOUD_PROJECT".`.replace(/ +/g," ")}};c(Pp,"MissingProjectIdError");var Jo=Pp;$o.MissingProjectIdError=Jo});var I7=v((XK,LN)=>{LN.exports={"9":"Tab;","10":"NewLine;","33":"excl;","34":"quot;","35":"num;","36":"dollar;","37":"percnt;","38":"amp;","39":"apos;","40":"lpar;","41":"rpar;","42":"midast;","43":"plus;","44":"comma;","46":"period;","47":"sol;","58":"colon;","59":"semi;","60":"lt;","61":"equals;","62":"gt;","63":"quest;","64":"commat;","91":"lsqb;","92":"bsol;","93":"rsqb;","94":"Hat;","95":"UnderBar;","96":"grave;","123":"lcub;","124":"VerticalLine;","125":"rcub;","160":"NonBreakingSpace;","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":"strns;","176":"deg;","177":"pm;","178":"sup2;","179":"sup3;","180":"DiacriticalAcute;","181":"micro;","182":"para;","183":"middot;","184":"Cedilla;","185":"sup1;","186":"ordm;","187":"raquo;","188":"frac14;","189":"half;","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;","256":"Amacr;","257":"amacr;","258":"Abreve;","259":"abreve;","260":"Aogon;","261":"aogon;","262":"Cacute;","263":"cacute;","264":"Ccirc;","265":"ccirc;","266":"Cdot;","267":"cdot;","268":"Ccaron;","269":"ccaron;","270":"Dcaron;","271":"dcaron;","272":"Dstrok;","273":"dstrok;","274":"Emacr;","275":"emacr;","278":"Edot;","279":"edot;","280":"Eogon;","281":"eogon;","282":"Ecaron;","283":"ecaron;","284":"Gcirc;","285":"gcirc;","286":"Gbreve;","287":"gbreve;","288":"Gdot;","289":"gdot;","290":"Gcedil;","292":"Hcirc;","293":"hcirc;","294":"Hstrok;","295":"hstrok;","296":"Itilde;","297":"itilde;","298":"Imacr;","299":"imacr;","302":"Iogon;","303":"iogon;","304":"Idot;","305":"inodot;","306":"IJlig;","307":"ijlig;","308":"Jcirc;","309":"jcirc;","310":"Kcedil;","311":"kcedil;","312":"kgreen;","313":"Lacute;","314":"lacute;","315":"Lcedil;","316":"lcedil;","317":"Lcaron;","318":"lcaron;","319":"Lmidot;","320":"lmidot;","321":"Lstrok;","322":"lstrok;","323":"Nacute;","324":"nacute;","325":"Ncedil;","326":"ncedil;","327":"Ncaron;","328":"ncaron;","329":"napos;","330":"ENG;","331":"eng;","332":"Omacr;","333":"omacr;","336":"Odblac;","337":"odblac;","338":"OElig;","339":"oelig;","340":"Racute;","341":"racute;","342":"Rcedil;","343":"rcedil;","344":"Rcaron;","345":"rcaron;","346":"Sacute;","347":"sacute;","348":"Scirc;","349":"scirc;","350":"Scedil;","351":"scedil;","352":"Scaron;","353":"scaron;","354":"Tcedil;","355":"tcedil;","356":"Tcaron;","357":"tcaron;","358":"Tstrok;","359":"tstrok;","360":"Utilde;","361":"utilde;","362":"Umacr;","363":"umacr;","364":"Ubreve;","365":"ubreve;","366":"Uring;","367":"uring;","368":"Udblac;","369":"udblac;","370":"Uogon;","371":"uogon;","372":"Wcirc;","373":"wcirc;","374":"Ycirc;","375":"ycirc;","376":"Yuml;","377":"Zacute;","378":"zacute;","379":"Zdot;","380":"zdot;","381":"Zcaron;","382":"zcaron;","402":"fnof;","437":"imped;","501":"gacute;","567":"jmath;","710":"circ;","711":"Hacek;","728":"breve;","729":"dot;","730":"ring;","731":"ogon;","732":"tilde;","733":"DiacriticalDoubleAcute;","785":"DownBreve;","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":"varsigma;","963":"sigma;","964":"tau;","965":"upsilon;","966":"phi;","967":"chi;","968":"psi;","969":"omega;","977":"vartheta;","978":"upsih;","981":"varphi;","982":"varpi;","988":"Gammad;","989":"gammad;","1008":"varkappa;","1009":"varrho;","1013":"varepsilon;","1014":"bepsi;","1025":"IOcy;","1026":"DJcy;","1027":"GJcy;","1028":"Jukcy;","1029":"DScy;","1030":"Iukcy;","1031":"YIcy;","1032":"Jsercy;","1033":"LJcy;","1034":"NJcy;","1035":"TSHcy;","1036":"KJcy;","1038":"Ubrcy;","1039":"DZcy;","1040":"Acy;","1041":"Bcy;","1042":"Vcy;","1043":"Gcy;","1044":"Dcy;","1045":"IEcy;","1046":"ZHcy;","1047":"Zcy;","1048":"Icy;","1049":"Jcy;","1050":"Kcy;","1051":"Lcy;","1052":"Mcy;","1053":"Ncy;","1054":"Ocy;","1055":"Pcy;","1056":"Rcy;","1057":"Scy;","1058":"Tcy;","1059":"Ucy;","1060":"Fcy;","1061":"KHcy;","1062":"TScy;","1063":"CHcy;","1064":"SHcy;","1065":"SHCHcy;","1066":"HARDcy;","1067":"Ycy;","1068":"SOFTcy;","1069":"Ecy;","1070":"YUcy;","1071":"YAcy;","1072":"acy;","1073":"bcy;","1074":"vcy;","1075":"gcy;","1076":"dcy;","1077":"iecy;","1078":"zhcy;","1079":"zcy;","1080":"icy;","1081":"jcy;","1082":"kcy;","1083":"lcy;","1084":"mcy;","1085":"ncy;","1086":"ocy;","1087":"pcy;","1088":"rcy;","1089":"scy;","1090":"tcy;","1091":"ucy;","1092":"fcy;","1093":"khcy;","1094":"tscy;","1095":"chcy;","1096":"shcy;","1097":"shchcy;","1098":"hardcy;","1099":"ycy;","1100":"softcy;","1101":"ecy;","1102":"yucy;","1103":"yacy;","1105":"iocy;","1106":"djcy;","1107":"gjcy;","1108":"jukcy;","1109":"dscy;","1110":"iukcy;","1111":"yicy;","1112":"jsercy;","1113":"ljcy;","1114":"njcy;","1115":"tshcy;","1116":"kjcy;","1118":"ubrcy;","1119":"dzcy;","8194":"ensp;","8195":"emsp;","8196":"emsp13;","8197":"emsp14;","8199":"numsp;","8200":"puncsp;","8201":"ThinSpace;","8202":"VeryThinSpace;","8203":"ZeroWidthSpace;","8204":"zwnj;","8205":"zwj;","8206":"lrm;","8207":"rlm;","8208":"hyphen;","8211":"ndash;","8212":"mdash;","8213":"horbar;","8214":"Vert;","8216":"OpenCurlyQuote;","8217":"rsquor;","8218":"sbquo;","8220":"OpenCurlyDoubleQuote;","8221":"rdquor;","8222":"ldquor;","8224":"dagger;","8225":"ddagger;","8226":"bullet;","8229":"nldr;","8230":"mldr;","8240":"permil;","8241":"pertenk;","8242":"prime;","8243":"Prime;","8244":"tprime;","8245":"bprime;","8249":"lsaquo;","8250":"rsaquo;","8254":"OverBar;","8257":"caret;","8259":"hybull;","8260":"frasl;","8271":"bsemi;","8279":"qprime;","8287":"MediumSpace;","8288":"NoBreak;","8289":"ApplyFunction;","8290":"it;","8291":"InvisibleComma;","8364":"euro;","8411":"TripleDot;","8412":"DotDot;","8450":"Copf;","8453":"incare;","8458":"gscr;","8459":"Hscr;","8460":"Poincareplane;","8461":"quaternions;","8462":"planckh;","8463":"plankv;","8464":"Iscr;","8465":"imagpart;","8466":"Lscr;","8467":"ell;","8469":"Nopf;","8470":"numero;","8471":"copysr;","8472":"wp;","8473":"primes;","8474":"rationals;","8475":"Rscr;","8476":"Rfr;","8477":"Ropf;","8478":"rx;","8482":"trade;","8484":"Zopf;","8487":"mho;","8488":"Zfr;","8489":"iiota;","8492":"Bscr;","8493":"Cfr;","8495":"escr;","8496":"expectation;","8497":"Fscr;","8499":"phmmat;","8500":"oscr;","8501":"aleph;","8502":"beth;","8503":"gimel;","8504":"daleth;","8517":"DD;","8518":"DifferentialD;","8519":"exponentiale;","8520":"ImaginaryI;","8531":"frac13;","8532":"frac23;","8533":"frac15;","8534":"frac25;","8535":"frac35;","8536":"frac45;","8537":"frac16;","8538":"frac56;","8539":"frac18;","8540":"frac38;","8541":"frac58;","8542":"frac78;","8592":"slarr;","8593":"uparrow;","8594":"srarr;","8595":"ShortDownArrow;","8596":"leftrightarrow;","8597":"varr;","8598":"UpperLeftArrow;","8599":"UpperRightArrow;","8600":"searrow;","8601":"swarrow;","8602":"nleftarrow;","8603":"nrightarrow;","8605":"rightsquigarrow;","8606":"twoheadleftarrow;","8607":"Uarr;","8608":"twoheadrightarrow;","8609":"Darr;","8610":"leftarrowtail;","8611":"rightarrowtail;","8612":"mapstoleft;","8613":"UpTeeArrow;","8614":"RightTeeArrow;","8615":"mapstodown;","8617":"larrhk;","8618":"rarrhk;","8619":"looparrowleft;","8620":"rarrlp;","8621":"leftrightsquigarrow;","8622":"nleftrightarrow;","8624":"lsh;","8625":"rsh;","8626":"ldsh;","8627":"rdsh;","8629":"crarr;","8630":"curvearrowleft;","8631":"curvearrowright;","8634":"olarr;","8635":"orarr;","8636":"lharu;","8637":"lhard;","8638":"upharpoonright;","8639":"upharpoonleft;","8640":"RightVector;","8641":"rightharpoondown;","8642":"RightDownVector;","8643":"LeftDownVector;","8644":"rlarr;","8645":"UpArrowDownArrow;","8646":"lrarr;","8647":"llarr;","8648":"uuarr;","8649":"rrarr;","8650":"downdownarrows;","8651":"ReverseEquilibrium;","8652":"rlhar;","8653":"nLeftarrow;","8654":"nLeftrightarrow;","8655":"nRightarrow;","8656":"Leftarrow;","8657":"Uparrow;","8658":"Rightarrow;","8659":"Downarrow;","8660":"Leftrightarrow;","8661":"vArr;","8662":"nwArr;","8663":"neArr;","8664":"seArr;","8665":"swArr;","8666":"Lleftarrow;","8667":"Rrightarrow;","8669":"zigrarr;","8676":"LeftArrowBar;","8677":"RightArrowBar;","8693":"duarr;","8701":"loarr;","8702":"roarr;","8703":"hoarr;","8704":"forall;","8705":"complement;","8706":"PartialD;","8707":"Exists;","8708":"NotExists;","8709":"varnothing;","8711":"nabla;","8712":"isinv;","8713":"notinva;","8715":"SuchThat;","8716":"NotReverseElement;","8719":"Product;","8720":"Coproduct;","8721":"sum;","8722":"minus;","8723":"mp;","8724":"plusdo;","8726":"ssetmn;","8727":"lowast;","8728":"SmallCircle;","8730":"Sqrt;","8733":"vprop;","8734":"infin;","8735":"angrt;","8736":"angle;","8737":"measuredangle;","8738":"angsph;","8739":"VerticalBar;","8740":"nsmid;","8741":"spar;","8742":"nspar;","8743":"wedge;","8744":"vee;","8745":"cap;","8746":"cup;","8747":"Integral;","8748":"Int;","8749":"tint;","8750":"oint;","8751":"DoubleContourIntegral;","8752":"Cconint;","8753":"cwint;","8754":"cwconint;","8755":"CounterClockwiseContourIntegral;","8756":"therefore;","8757":"because;","8758":"ratio;","8759":"Proportion;","8760":"minusd;","8762":"mDDot;","8763":"homtht;","8764":"Tilde;","8765":"bsim;","8766":"mstpos;","8767":"acd;","8768":"wreath;","8769":"nsim;","8770":"esim;","8771":"TildeEqual;","8772":"nsimeq;","8773":"TildeFullEqual;","8774":"simne;","8775":"NotTildeFullEqual;","8776":"TildeTilde;","8777":"NotTildeTilde;","8778":"approxeq;","8779":"apid;","8780":"bcong;","8781":"CupCap;","8782":"HumpDownHump;","8783":"HumpEqual;","8784":"esdot;","8785":"eDot;","8786":"fallingdotseq;","8787":"risingdotseq;","8788":"coloneq;","8789":"eqcolon;","8790":"eqcirc;","8791":"cire;","8793":"wedgeq;","8794":"veeeq;","8796":"trie;","8799":"questeq;","8800":"NotEqual;","8801":"equiv;","8802":"NotCongruent;","8804":"leq;","8805":"GreaterEqual;","8806":"LessFullEqual;","8807":"GreaterFullEqual;","8808":"lneqq;","8809":"gneqq;","8810":"NestedLessLess;","8811":"NestedGreaterGreater;","8812":"twixt;","8813":"NotCupCap;","8814":"NotLess;","8815":"NotGreater;","8816":"NotLessEqual;","8817":"NotGreaterEqual;","8818":"lsim;","8819":"gtrsim;","8820":"NotLessTilde;","8821":"NotGreaterTilde;","8822":"lg;","8823":"gtrless;","8824":"ntlg;","8825":"ntgl;","8826":"Precedes;","8827":"Succeeds;","8828":"PrecedesSlantEqual;","8829":"SucceedsSlantEqual;","8830":"prsim;","8831":"succsim;","8832":"nprec;","8833":"nsucc;","8834":"subset;","8835":"supset;","8836":"nsub;","8837":"nsup;","8838":"SubsetEqual;","8839":"supseteq;","8840":"nsubseteq;","8841":"nsupseteq;","8842":"subsetneq;","8843":"supsetneq;","8845":"cupdot;","8846":"uplus;","8847":"SquareSubset;","8848":"SquareSuperset;","8849":"SquareSubsetEqual;","8850":"SquareSupersetEqual;","8851":"SquareIntersection;","8852":"SquareUnion;","8853":"oplus;","8854":"ominus;","8855":"otimes;","8856":"osol;","8857":"odot;","8858":"ocir;","8859":"oast;","8861":"odash;","8862":"plusb;","8863":"minusb;","8864":"timesb;","8865":"sdotb;","8866":"vdash;","8867":"LeftTee;","8868":"top;","8869":"UpTee;","8871":"models;","8872":"vDash;","8873":"Vdash;","8874":"Vvdash;","8875":"VDash;","8876":"nvdash;","8877":"nvDash;","8878":"nVdash;","8879":"nVDash;","8880":"prurel;","8882":"vltri;","8883":"vrtri;","8884":"trianglelefteq;","8885":"trianglerighteq;","8886":"origof;","8887":"imof;","8888":"mumap;","8889":"hercon;","8890":"intercal;","8891":"veebar;","8893":"barvee;","8894":"angrtvb;","8895":"lrtri;","8896":"xwedge;","8897":"xvee;","8898":"xcap;","8899":"xcup;","8900":"diamond;","8901":"sdot;","8902":"Star;","8903":"divonx;","8904":"bowtie;","8905":"ltimes;","8906":"rtimes;","8907":"lthree;","8908":"rthree;","8909":"bsime;","8910":"cuvee;","8911":"cuwed;","8912":"Subset;","8913":"Supset;","8914":"Cap;","8915":"Cup;","8916":"pitchfork;","8917":"epar;","8918":"ltdot;","8919":"gtrdot;","8920":"Ll;","8921":"ggg;","8922":"LessEqualGreater;","8923":"gtreqless;","8926":"curlyeqprec;","8927":"curlyeqsucc;","8928":"nprcue;","8929":"nsccue;","8930":"nsqsube;","8931":"nsqsupe;","8934":"lnsim;","8935":"gnsim;","8936":"prnsim;","8937":"succnsim;","8938":"ntriangleleft;","8939":"ntriangleright;","8940":"ntrianglelefteq;","8941":"ntrianglerighteq;","8942":"vellip;","8943":"ctdot;","8944":"utdot;","8945":"dtdot;","8946":"disin;","8947":"isinsv;","8948":"isins;","8949":"isindot;","8950":"notinvc;","8951":"notinvb;","8953":"isinE;","8954":"nisd;","8955":"xnis;","8956":"nis;","8957":"notnivc;","8958":"notnivb;","8965":"barwedge;","8966":"doublebarwedge;","8968":"LeftCeiling;","8969":"RightCeiling;","8970":"lfloor;","8971":"RightFloor;","8972":"drcrop;","8973":"dlcrop;","8974":"urcrop;","8975":"ulcrop;","8976":"bnot;","8978":"profline;","8979":"profsurf;","8981":"telrec;","8982":"target;","8988":"ulcorner;","8989":"urcorner;","8990":"llcorner;","8991":"lrcorner;","8994":"sfrown;","8995":"ssmile;","9005":"cylcty;","9006":"profalar;","9014":"topbot;","9021":"ovbar;","9023":"solbar;","9084":"angzarr;","9136":"lmoustache;","9137":"rmoustache;","9140":"tbrk;","9141":"UnderBracket;","9142":"bbrktbrk;","9180":"OverParenthesis;","9181":"UnderParenthesis;","9182":"OverBrace;","9183":"UnderBrace;","9186":"trpezium;","9191":"elinters;","9251":"blank;","9416":"oS;","9472":"HorizontalLine;","9474":"boxv;","9484":"boxdr;","9488":"boxdl;","9492":"boxur;","9496":"boxul;","9500":"boxvr;","9508":"boxvl;","9516":"boxhd;","9524":"boxhu;","9532":"boxvh;","9552":"boxH;","9553":"boxV;","9554":"boxdR;","9555":"boxDr;","9556":"boxDR;","9557":"boxdL;","9558":"boxDl;","9559":"boxDL;","9560":"boxuR;","9561":"boxUr;","9562":"boxUR;","9563":"boxuL;","9564":"boxUl;","9565":"boxUL;","9566":"boxvR;","9567":"boxVr;","9568":"boxVR;","9569":"boxvL;","9570":"boxVl;","9571":"boxVL;","9572":"boxHd;","9573":"boxhD;","9574":"boxHD;","9575":"boxHu;","9576":"boxhU;","9577":"boxHU;","9578":"boxvH;","9579":"boxVh;","9580":"boxVH;","9600":"uhblk;","9604":"lhblk;","9608":"block;","9617":"blk14;","9618":"blk12;","9619":"blk34;","9633":"square;","9642":"squf;","9643":"EmptyVerySmallSquare;","9645":"rect;","9646":"marker;","9649":"fltns;","9651":"xutri;","9652":"utrif;","9653":"utri;","9656":"rtrif;","9657":"triangleright;","9661":"xdtri;","9662":"dtrif;","9663":"triangledown;","9666":"ltrif;","9667":"triangleleft;","9674":"lozenge;","9675":"cir;","9708":"tridot;","9711":"xcirc;","9720":"ultri;","9721":"urtri;","9722":"lltri;","9723":"EmptySmallSquare;","9724":"FilledSmallSquare;","9733":"starf;","9734":"star;","9742":"phone;","9792":"female;","9794":"male;","9824":"spadesuit;","9827":"clubsuit;","9829":"heartsuit;","9830":"diams;","9834":"sung;","9837":"flat;","9838":"natural;","9839":"sharp;","10003":"checkmark;","10007":"cross;","10016":"maltese;","10038":"sext;","10072":"VerticalSeparator;","10098":"lbbrk;","10099":"rbbrk;","10184":"bsolhsub;","10185":"suphsol;","10214":"lobrk;","10215":"robrk;","10216":"LeftAngleBracket;","10217":"RightAngleBracket;","10218":"Lang;","10219":"Rang;","10220":"loang;","10221":"roang;","10229":"xlarr;","10230":"xrarr;","10231":"xharr;","10232":"xlArr;","10233":"xrArr;","10234":"xhArr;","10236":"xmap;","10239":"dzigrarr;","10498":"nvlArr;","10499":"nvrArr;","10500":"nvHarr;","10501":"Map;","10508":"lbarr;","10509":"rbarr;","10510":"lBarr;","10511":"rBarr;","10512":"RBarr;","10513":"DDotrahd;","10514":"UpArrowBar;","10515":"DownArrowBar;","10518":"Rarrtl;","10521":"latail;","10522":"ratail;","10523":"lAtail;","10524":"rAtail;","10525":"larrfs;","10526":"rarrfs;","10527":"larrbfs;","10528":"rarrbfs;","10531":"nwarhk;","10532":"nearhk;","10533":"searhk;","10534":"swarhk;","10535":"nwnear;","10536":"toea;","10537":"tosa;","10538":"swnwar;","10547":"rarrc;","10549":"cudarrr;","10550":"ldca;","10551":"rdca;","10552":"cudarrl;","10553":"larrpl;","10556":"curarrm;","10557":"cularrp;","10565":"rarrpl;","10568":"harrcir;","10569":"Uarrocir;","10570":"lurdshar;","10571":"ldrushar;","10574":"LeftRightVector;","10575":"RightUpDownVector;","10576":"DownLeftRightVector;","10577":"LeftUpDownVector;","10578":"LeftVectorBar;","10579":"RightVectorBar;","10580":"RightUpVectorBar;","10581":"RightDownVectorBar;","10582":"DownLeftVectorBar;","10583":"DownRightVectorBar;","10584":"LeftUpVectorBar;","10585":"LeftDownVectorBar;","10586":"LeftTeeVector;","10587":"RightTeeVector;","10588":"RightUpTeeVector;","10589":"RightDownTeeVector;","10590":"DownLeftTeeVector;","10591":"DownRightTeeVector;","10592":"LeftUpTeeVector;","10593":"LeftDownTeeVector;","10594":"lHar;","10595":"uHar;","10596":"rHar;","10597":"dHar;","10598":"luruhar;","10599":"ldrdhar;","10600":"ruluhar;","10601":"rdldhar;","10602":"lharul;","10603":"llhard;","10604":"rharul;","10605":"lrhard;","10606":"UpEquilibrium;","10607":"ReverseUpEquilibrium;","10608":"RoundImplies;","10609":"erarr;","10610":"simrarr;","10611":"larrsim;","10612":"rarrsim;","10613":"rarrap;","10614":"ltlarr;","10616":"gtrarr;","10617":"subrarr;","10619":"suplarr;","10620":"lfisht;","10621":"rfisht;","10622":"ufisht;","10623":"dfisht;","10629":"lopar;","10630":"ropar;","10635":"lbrke;","10636":"rbrke;","10637":"lbrkslu;","10638":"rbrksld;","10639":"lbrksld;","10640":"rbrkslu;","10641":"langd;","10642":"rangd;","10643":"lparlt;","10644":"rpargt;","10645":"gtlPar;","10646":"ltrPar;","10650":"vzigzag;","10652":"vangrt;","10653":"angrtvbd;","10660":"ange;","10661":"range;","10662":"dwangle;","10663":"uwangle;","10664":"angmsdaa;","10665":"angmsdab;","10666":"angmsdac;","10667":"angmsdad;","10668":"angmsdae;","10669":"angmsdaf;","10670":"angmsdag;","10671":"angmsdah;","10672":"bemptyv;","10673":"demptyv;","10674":"cemptyv;","10675":"raemptyv;","10676":"laemptyv;","10677":"ohbar;","10678":"omid;","10679":"opar;","10681":"operp;","10683":"olcross;","10684":"odsold;","10686":"olcir;","10687":"ofcir;","10688":"olt;","10689":"ogt;","10690":"cirscir;","10691":"cirE;","10692":"solb;","10693":"bsolb;","10697":"boxbox;","10701":"trisb;","10702":"rtriltri;","10703":"LeftTriangleBar;","10704":"RightTriangleBar;","10716":"iinfin;","10717":"infintie;","10718":"nvinfin;","10723":"eparsl;","10724":"smeparsl;","10725":"eqvparsl;","10731":"lozf;","10740":"RuleDelayed;","10742":"dsol;","10752":"xodot;","10753":"xoplus;","10754":"xotime;","10756":"xuplus;","10758":"xsqcup;","10764":"qint;","10765":"fpartint;","10768":"cirfnint;","10769":"awint;","10770":"rppolint;","10771":"scpolint;","10772":"npolint;","10773":"pointint;","10774":"quatint;","10775":"intlarhk;","10786":"pluscir;","10787":"plusacir;","10788":"simplus;","10789":"plusdu;","10790":"plussim;","10791":"plustwo;","10793":"mcomma;","10794":"minusdu;","10797":"loplus;","10798":"roplus;","10799":"Cross;","10800":"timesd;","10801":"timesbar;","10803":"smashp;","10804":"lotimes;","10805":"rotimes;","10806":"otimesas;","10807":"Otimes;","10808":"odiv;","10809":"triplus;","10810":"triminus;","10811":"tritime;","10812":"iprod;","10815":"amalg;","10816":"capdot;","10818":"ncup;","10819":"ncap;","10820":"capand;","10821":"cupor;","10822":"cupcap;","10823":"capcup;","10824":"cupbrcap;","10825":"capbrcup;","10826":"cupcup;","10827":"capcap;","10828":"ccups;","10829":"ccaps;","10832":"ccupssm;","10835":"And;","10836":"Or;","10837":"andand;","10838":"oror;","10839":"orslope;","10840":"andslope;","10842":"andv;","10843":"orv;","10844":"andd;","10845":"ord;","10847":"wedbar;","10854":"sdote;","10858":"simdot;","10861":"congdot;","10862":"easter;","10863":"apacir;","10864":"apE;","10865":"eplus;","10866":"pluse;","10867":"Esim;","10868":"Colone;","10869":"Equal;","10871":"eDDot;","10872":"equivDD;","10873":"ltcir;","10874":"gtcir;","10875":"ltquest;","10876":"gtquest;","10877":"LessSlantEqual;","10878":"GreaterSlantEqual;","10879":"lesdot;","10880":"gesdot;","10881":"lesdoto;","10882":"gesdoto;","10883":"lesdotor;","10884":"gesdotol;","10885":"lessapprox;","10886":"gtrapprox;","10887":"lneq;","10888":"gneq;","10889":"lnapprox;","10890":"gnapprox;","10891":"lesseqqgtr;","10892":"gtreqqless;","10893":"lsime;","10894":"gsime;","10895":"lsimg;","10896":"gsiml;","10897":"lgE;","10898":"glE;","10899":"lesges;","10900":"gesles;","10901":"eqslantless;","10902":"eqslantgtr;","10903":"elsdot;","10904":"egsdot;","10905":"el;","10906":"eg;","10909":"siml;","10910":"simg;","10911":"simlE;","10912":"simgE;","10913":"LessLess;","10914":"GreaterGreater;","10916":"glj;","10917":"gla;","10918":"ltcc;","10919":"gtcc;","10920":"lescc;","10921":"gescc;","10922":"smt;","10923":"lat;","10924":"smte;","10925":"late;","10926":"bumpE;","10927":"preceq;","10928":"succeq;","10931":"prE;","10932":"scE;","10933":"prnE;","10934":"succneqq;","10935":"precapprox;","10936":"succapprox;","10937":"prnap;","10938":"succnapprox;","10939":"Pr;","10940":"Sc;","10941":"subdot;","10942":"supdot;","10943":"subplus;","10944":"supplus;","10945":"submult;","10946":"supmult;","10947":"subedot;","10948":"supedot;","10949":"subseteqq;","10950":"supseteqq;","10951":"subsim;","10952":"supsim;","10955":"subsetneqq;","10956":"supsetneqq;","10959":"csub;","10960":"csup;","10961":"csube;","10962":"csupe;","10963":"subsup;","10964":"supsub;","10965":"subsub;","10966":"supsup;","10967":"suphsub;","10968":"supdsub;","10969":"forkv;","10970":"topfork;","10971":"mlcp;","10980":"DoubleLeftTee;","10982":"Vdashl;","10983":"Barv;","10984":"vBar;","10985":"vBarv;","10987":"Vbar;","10988":"Not;","10989":"bNot;","10990":"rnmid;","10991":"cirmid;","10992":"midcir;","10993":"topcir;","10994":"nhpar;","10995":"parsim;","11005":"parsl;","64256":"fflig;","64257":"filig;","64258":"fllig;","64259":"ffilig;","64260":"ffllig;"}});var v7=v((QK,x7)=>{var b7=require("punycode"),EN=I7();x7.exports=mN;function mN(i,e){if(typeof i!="string")throw new TypeError("Expected a String");e||(e={});var u=!0;e.named&&(u=!1),e.numeric!==void 0&&(u=e.numeric);for(var r=e.special||{'"':!0,"'":!0,"<":!0,">":!0,"&":!0},a=b7.ucs2.decode(i),s=[],n=0;n=127||r[d])&&!u?s.push("&"+(/;$/.test(p)?p:p+";")):l<32||l>=127||r[d]?s.push("&#"+l+";"):s.push(d)}return s.join("")}c(mN,"encode")});var D7=v(($K,BN)=>{BN.exports={"Aacute;":"\xC1",Aacute:"\xC1","aacute;":"\xE1",aacute:"\xE1","Abreve;":"\u0102","abreve;":"\u0103","ac;":"\u223E","acd;":"\u223F","acE;":"\u223E\u0333","Acirc;":"\xC2",Acirc:"\xC2","acirc;":"\xE2",acirc:"\xE2","acute;":"\xB4",acute:"\xB4","Acy;":"\u0410","acy;":"\u0430","AElig;":"\xC6",AElig:"\xC6","aelig;":"\xE6",aelig:"\xE6","af;":"\u2061","Afr;":"\u{1D504}","afr;":"\u{1D51E}","Agrave;":"\xC0",Agrave:"\xC0","agrave;":"\xE0",agrave:"\xE0","alefsym;":"\u2135","aleph;":"\u2135","Alpha;":"\u0391","alpha;":"\u03B1","Amacr;":"\u0100","amacr;":"\u0101","amalg;":"\u2A3F","AMP;":"&",AMP:"&","amp;":"&",amp:"&","And;":"\u2A53","and;":"\u2227","andand;":"\u2A55","andd;":"\u2A5C","andslope;":"\u2A58","andv;":"\u2A5A","ang;":"\u2220","ange;":"\u29A4","angle;":"\u2220","angmsd;":"\u2221","angmsdaa;":"\u29A8","angmsdab;":"\u29A9","angmsdac;":"\u29AA","angmsdad;":"\u29AB","angmsdae;":"\u29AC","angmsdaf;":"\u29AD","angmsdag;":"\u29AE","angmsdah;":"\u29AF","angrt;":"\u221F","angrtvb;":"\u22BE","angrtvbd;":"\u299D","angsph;":"\u2222","angst;":"\xC5","angzarr;":"\u237C","Aogon;":"\u0104","aogon;":"\u0105","Aopf;":"\u{1D538}","aopf;":"\u{1D552}","ap;":"\u2248","apacir;":"\u2A6F","apE;":"\u2A70","ape;":"\u224A","apid;":"\u224B","apos;":"'","ApplyFunction;":"\u2061","approx;":"\u2248","approxeq;":"\u224A","Aring;":"\xC5",Aring:"\xC5","aring;":"\xE5",aring:"\xE5","Ascr;":"\u{1D49C}","ascr;":"\u{1D4B6}","Assign;":"\u2254","ast;":"*","asymp;":"\u2248","asympeq;":"\u224D","Atilde;":"\xC3",Atilde:"\xC3","atilde;":"\xE3",atilde:"\xE3","Auml;":"\xC4",Auml:"\xC4","auml;":"\xE4",auml:"\xE4","awconint;":"\u2233","awint;":"\u2A11","backcong;":"\u224C","backepsilon;":"\u03F6","backprime;":"\u2035","backsim;":"\u223D","backsimeq;":"\u22CD","Backslash;":"\u2216","Barv;":"\u2AE7","barvee;":"\u22BD","Barwed;":"\u2306","barwed;":"\u2305","barwedge;":"\u2305","bbrk;":"\u23B5","bbrktbrk;":"\u23B6","bcong;":"\u224C","Bcy;":"\u0411","bcy;":"\u0431","bdquo;":"\u201E","becaus;":"\u2235","Because;":"\u2235","because;":"\u2235","bemptyv;":"\u29B0","bepsi;":"\u03F6","bernou;":"\u212C","Bernoullis;":"\u212C","Beta;":"\u0392","beta;":"\u03B2","beth;":"\u2136","between;":"\u226C","Bfr;":"\u{1D505}","bfr;":"\u{1D51F}","bigcap;":"\u22C2","bigcirc;":"\u25EF","bigcup;":"\u22C3","bigodot;":"\u2A00","bigoplus;":"\u2A01","bigotimes;":"\u2A02","bigsqcup;":"\u2A06","bigstar;":"\u2605","bigtriangledown;":"\u25BD","bigtriangleup;":"\u25B3","biguplus;":"\u2A04","bigvee;":"\u22C1","bigwedge;":"\u22C0","bkarow;":"\u290D","blacklozenge;":"\u29EB","blacksquare;":"\u25AA","blacktriangle;":"\u25B4","blacktriangledown;":"\u25BE","blacktriangleleft;":"\u25C2","blacktriangleright;":"\u25B8","blank;":"\u2423","blk12;":"\u2592","blk14;":"\u2591","blk34;":"\u2593","block;":"\u2588","bne;":"=\u20E5","bnequiv;":"\u2261\u20E5","bNot;":"\u2AED","bnot;":"\u2310","Bopf;":"\u{1D539}","bopf;":"\u{1D553}","bot;":"\u22A5","bottom;":"\u22A5","bowtie;":"\u22C8","boxbox;":"\u29C9","boxDL;":"\u2557","boxDl;":"\u2556","boxdL;":"\u2555","boxdl;":"\u2510","boxDR;":"\u2554","boxDr;":"\u2553","boxdR;":"\u2552","boxdr;":"\u250C","boxH;":"\u2550","boxh;":"\u2500","boxHD;":"\u2566","boxHd;":"\u2564","boxhD;":"\u2565","boxhd;":"\u252C","boxHU;":"\u2569","boxHu;":"\u2567","boxhU;":"\u2568","boxhu;":"\u2534","boxminus;":"\u229F","boxplus;":"\u229E","boxtimes;":"\u22A0","boxUL;":"\u255D","boxUl;":"\u255C","boxuL;":"\u255B","boxul;":"\u2518","boxUR;":"\u255A","boxUr;":"\u2559","boxuR;":"\u2558","boxur;":"\u2514","boxV;":"\u2551","boxv;":"\u2502","boxVH;":"\u256C","boxVh;":"\u256B","boxvH;":"\u256A","boxvh;":"\u253C","boxVL;":"\u2563","boxVl;":"\u2562","boxvL;":"\u2561","boxvl;":"\u2524","boxVR;":"\u2560","boxVr;":"\u255F","boxvR;":"\u255E","boxvr;":"\u251C","bprime;":"\u2035","Breve;":"\u02D8","breve;":"\u02D8","brvbar;":"\xA6",brvbar:"\xA6","Bscr;":"\u212C","bscr;":"\u{1D4B7}","bsemi;":"\u204F","bsim;":"\u223D","bsime;":"\u22CD","bsol;":"\\","bsolb;":"\u29C5","bsolhsub;":"\u27C8","bull;":"\u2022","bullet;":"\u2022","bump;":"\u224E","bumpE;":"\u2AAE","bumpe;":"\u224F","Bumpeq;":"\u224E","bumpeq;":"\u224F","Cacute;":"\u0106","cacute;":"\u0107","Cap;":"\u22D2","cap;":"\u2229","capand;":"\u2A44","capbrcup;":"\u2A49","capcap;":"\u2A4B","capcup;":"\u2A47","capdot;":"\u2A40","CapitalDifferentialD;":"\u2145","caps;":"\u2229\uFE00","caret;":"\u2041","caron;":"\u02C7","Cayleys;":"\u212D","ccaps;":"\u2A4D","Ccaron;":"\u010C","ccaron;":"\u010D","Ccedil;":"\xC7",Ccedil:"\xC7","ccedil;":"\xE7",ccedil:"\xE7","Ccirc;":"\u0108","ccirc;":"\u0109","Cconint;":"\u2230","ccups;":"\u2A4C","ccupssm;":"\u2A50","Cdot;":"\u010A","cdot;":"\u010B","cedil;":"\xB8",cedil:"\xB8","Cedilla;":"\xB8","cemptyv;":"\u29B2","cent;":"\xA2",cent:"\xA2","CenterDot;":"\xB7","centerdot;":"\xB7","Cfr;":"\u212D","cfr;":"\u{1D520}","CHcy;":"\u0427","chcy;":"\u0447","check;":"\u2713","checkmark;":"\u2713","Chi;":"\u03A7","chi;":"\u03C7","cir;":"\u25CB","circ;":"\u02C6","circeq;":"\u2257","circlearrowleft;":"\u21BA","circlearrowright;":"\u21BB","circledast;":"\u229B","circledcirc;":"\u229A","circleddash;":"\u229D","CircleDot;":"\u2299","circledR;":"\xAE","circledS;":"\u24C8","CircleMinus;":"\u2296","CirclePlus;":"\u2295","CircleTimes;":"\u2297","cirE;":"\u29C3","cire;":"\u2257","cirfnint;":"\u2A10","cirmid;":"\u2AEF","cirscir;":"\u29C2","ClockwiseContourIntegral;":"\u2232","CloseCurlyDoubleQuote;":"\u201D","CloseCurlyQuote;":"\u2019","clubs;":"\u2663","clubsuit;":"\u2663","Colon;":"\u2237","colon;":":","Colone;":"\u2A74","colone;":"\u2254","coloneq;":"\u2254","comma;":",","commat;":"@","comp;":"\u2201","compfn;":"\u2218","complement;":"\u2201","complexes;":"\u2102","cong;":"\u2245","congdot;":"\u2A6D","Congruent;":"\u2261","Conint;":"\u222F","conint;":"\u222E","ContourIntegral;":"\u222E","Copf;":"\u2102","copf;":"\u{1D554}","coprod;":"\u2210","Coproduct;":"\u2210","COPY;":"\xA9",COPY:"\xA9","copy;":"\xA9",copy:"\xA9","copysr;":"\u2117","CounterClockwiseContourIntegral;":"\u2233","crarr;":"\u21B5","Cross;":"\u2A2F","cross;":"\u2717","Cscr;":"\u{1D49E}","cscr;":"\u{1D4B8}","csub;":"\u2ACF","csube;":"\u2AD1","csup;":"\u2AD0","csupe;":"\u2AD2","ctdot;":"\u22EF","cudarrl;":"\u2938","cudarrr;":"\u2935","cuepr;":"\u22DE","cuesc;":"\u22DF","cularr;":"\u21B6","cularrp;":"\u293D","Cup;":"\u22D3","cup;":"\u222A","cupbrcap;":"\u2A48","CupCap;":"\u224D","cupcap;":"\u2A46","cupcup;":"\u2A4A","cupdot;":"\u228D","cupor;":"\u2A45","cups;":"\u222A\uFE00","curarr;":"\u21B7","curarrm;":"\u293C","curlyeqprec;":"\u22DE","curlyeqsucc;":"\u22DF","curlyvee;":"\u22CE","curlywedge;":"\u22CF","curren;":"\xA4",curren:"\xA4","curvearrowleft;":"\u21B6","curvearrowright;":"\u21B7","cuvee;":"\u22CE","cuwed;":"\u22CF","cwconint;":"\u2232","cwint;":"\u2231","cylcty;":"\u232D","Dagger;":"\u2021","dagger;":"\u2020","daleth;":"\u2138","Darr;":"\u21A1","dArr;":"\u21D3","darr;":"\u2193","dash;":"\u2010","Dashv;":"\u2AE4","dashv;":"\u22A3","dbkarow;":"\u290F","dblac;":"\u02DD","Dcaron;":"\u010E","dcaron;":"\u010F","Dcy;":"\u0414","dcy;":"\u0434","DD;":"\u2145","dd;":"\u2146","ddagger;":"\u2021","ddarr;":"\u21CA","DDotrahd;":"\u2911","ddotseq;":"\u2A77","deg;":"\xB0",deg:"\xB0","Del;":"\u2207","Delta;":"\u0394","delta;":"\u03B4","demptyv;":"\u29B1","dfisht;":"\u297F","Dfr;":"\u{1D507}","dfr;":"\u{1D521}","dHar;":"\u2965","dharl;":"\u21C3","dharr;":"\u21C2","DiacriticalAcute;":"\xB4","DiacriticalDot;":"\u02D9","DiacriticalDoubleAcute;":"\u02DD","DiacriticalGrave;":"`","DiacriticalTilde;":"\u02DC","diam;":"\u22C4","Diamond;":"\u22C4","diamond;":"\u22C4","diamondsuit;":"\u2666","diams;":"\u2666","die;":"\xA8","DifferentialD;":"\u2146","digamma;":"\u03DD","disin;":"\u22F2","div;":"\xF7","divide;":"\xF7",divide:"\xF7","divideontimes;":"\u22C7","divonx;":"\u22C7","DJcy;":"\u0402","djcy;":"\u0452","dlcorn;":"\u231E","dlcrop;":"\u230D","dollar;":"$","Dopf;":"\u{1D53B}","dopf;":"\u{1D555}","Dot;":"\xA8","dot;":"\u02D9","DotDot;":"\u20DC","doteq;":"\u2250","doteqdot;":"\u2251","DotEqual;":"\u2250","dotminus;":"\u2238","dotplus;":"\u2214","dotsquare;":"\u22A1","doublebarwedge;":"\u2306","DoubleContourIntegral;":"\u222F","DoubleDot;":"\xA8","DoubleDownArrow;":"\u21D3","DoubleLeftArrow;":"\u21D0","DoubleLeftRightArrow;":"\u21D4","DoubleLeftTee;":"\u2AE4","DoubleLongLeftArrow;":"\u27F8","DoubleLongLeftRightArrow;":"\u27FA","DoubleLongRightArrow;":"\u27F9","DoubleRightArrow;":"\u21D2","DoubleRightTee;":"\u22A8","DoubleUpArrow;":"\u21D1","DoubleUpDownArrow;":"\u21D5","DoubleVerticalBar;":"\u2225","DownArrow;":"\u2193","Downarrow;":"\u21D3","downarrow;":"\u2193","DownArrowBar;":"\u2913","DownArrowUpArrow;":"\u21F5","DownBreve;":"\u0311","downdownarrows;":"\u21CA","downharpoonleft;":"\u21C3","downharpoonright;":"\u21C2","DownLeftRightVector;":"\u2950","DownLeftTeeVector;":"\u295E","DownLeftVector;":"\u21BD","DownLeftVectorBar;":"\u2956","DownRightTeeVector;":"\u295F","DownRightVector;":"\u21C1","DownRightVectorBar;":"\u2957","DownTee;":"\u22A4","DownTeeArrow;":"\u21A7","drbkarow;":"\u2910","drcorn;":"\u231F","drcrop;":"\u230C","Dscr;":"\u{1D49F}","dscr;":"\u{1D4B9}","DScy;":"\u0405","dscy;":"\u0455","dsol;":"\u29F6","Dstrok;":"\u0110","dstrok;":"\u0111","dtdot;":"\u22F1","dtri;":"\u25BF","dtrif;":"\u25BE","duarr;":"\u21F5","duhar;":"\u296F","dwangle;":"\u29A6","DZcy;":"\u040F","dzcy;":"\u045F","dzigrarr;":"\u27FF","Eacute;":"\xC9",Eacute:"\xC9","eacute;":"\xE9",eacute:"\xE9","easter;":"\u2A6E","Ecaron;":"\u011A","ecaron;":"\u011B","ecir;":"\u2256","Ecirc;":"\xCA",Ecirc:"\xCA","ecirc;":"\xEA",ecirc:"\xEA","ecolon;":"\u2255","Ecy;":"\u042D","ecy;":"\u044D","eDDot;":"\u2A77","Edot;":"\u0116","eDot;":"\u2251","edot;":"\u0117","ee;":"\u2147","efDot;":"\u2252","Efr;":"\u{1D508}","efr;":"\u{1D522}","eg;":"\u2A9A","Egrave;":"\xC8",Egrave:"\xC8","egrave;":"\xE8",egrave:"\xE8","egs;":"\u2A96","egsdot;":"\u2A98","el;":"\u2A99","Element;":"\u2208","elinters;":"\u23E7","ell;":"\u2113","els;":"\u2A95","elsdot;":"\u2A97","Emacr;":"\u0112","emacr;":"\u0113","empty;":"\u2205","emptyset;":"\u2205","EmptySmallSquare;":"\u25FB","emptyv;":"\u2205","EmptyVerySmallSquare;":"\u25AB","emsp;":"\u2003","emsp13;":"\u2004","emsp14;":"\u2005","ENG;":"\u014A","eng;":"\u014B","ensp;":"\u2002","Eogon;":"\u0118","eogon;":"\u0119","Eopf;":"\u{1D53C}","eopf;":"\u{1D556}","epar;":"\u22D5","eparsl;":"\u29E3","eplus;":"\u2A71","epsi;":"\u03B5","Epsilon;":"\u0395","epsilon;":"\u03B5","epsiv;":"\u03F5","eqcirc;":"\u2256","eqcolon;":"\u2255","eqsim;":"\u2242","eqslantgtr;":"\u2A96","eqslantless;":"\u2A95","Equal;":"\u2A75","equals;":"=","EqualTilde;":"\u2242","equest;":"\u225F","Equilibrium;":"\u21CC","equiv;":"\u2261","equivDD;":"\u2A78","eqvparsl;":"\u29E5","erarr;":"\u2971","erDot;":"\u2253","Escr;":"\u2130","escr;":"\u212F","esdot;":"\u2250","Esim;":"\u2A73","esim;":"\u2242","Eta;":"\u0397","eta;":"\u03B7","ETH;":"\xD0",ETH:"\xD0","eth;":"\xF0",eth:"\xF0","Euml;":"\xCB",Euml:"\xCB","euml;":"\xEB",euml:"\xEB","euro;":"\u20AC","excl;":"!","exist;":"\u2203","Exists;":"\u2203","expectation;":"\u2130","ExponentialE;":"\u2147","exponentiale;":"\u2147","fallingdotseq;":"\u2252","Fcy;":"\u0424","fcy;":"\u0444","female;":"\u2640","ffilig;":"\uFB03","fflig;":"\uFB00","ffllig;":"\uFB04","Ffr;":"\u{1D509}","ffr;":"\u{1D523}","filig;":"\uFB01","FilledSmallSquare;":"\u25FC","FilledVerySmallSquare;":"\u25AA","fjlig;":"fj","flat;":"\u266D","fllig;":"\uFB02","fltns;":"\u25B1","fnof;":"\u0192","Fopf;":"\u{1D53D}","fopf;":"\u{1D557}","ForAll;":"\u2200","forall;":"\u2200","fork;":"\u22D4","forkv;":"\u2AD9","Fouriertrf;":"\u2131","fpartint;":"\u2A0D","frac12;":"\xBD",frac12:"\xBD","frac13;":"\u2153","frac14;":"\xBC",frac14:"\xBC","frac15;":"\u2155","frac16;":"\u2159","frac18;":"\u215B","frac23;":"\u2154","frac25;":"\u2156","frac34;":"\xBE",frac34:"\xBE","frac35;":"\u2157","frac38;":"\u215C","frac45;":"\u2158","frac56;":"\u215A","frac58;":"\u215D","frac78;":"\u215E","frasl;":"\u2044","frown;":"\u2322","Fscr;":"\u2131","fscr;":"\u{1D4BB}","gacute;":"\u01F5","Gamma;":"\u0393","gamma;":"\u03B3","Gammad;":"\u03DC","gammad;":"\u03DD","gap;":"\u2A86","Gbreve;":"\u011E","gbreve;":"\u011F","Gcedil;":"\u0122","Gcirc;":"\u011C","gcirc;":"\u011D","Gcy;":"\u0413","gcy;":"\u0433","Gdot;":"\u0120","gdot;":"\u0121","gE;":"\u2267","ge;":"\u2265","gEl;":"\u2A8C","gel;":"\u22DB","geq;":"\u2265","geqq;":"\u2267","geqslant;":"\u2A7E","ges;":"\u2A7E","gescc;":"\u2AA9","gesdot;":"\u2A80","gesdoto;":"\u2A82","gesdotol;":"\u2A84","gesl;":"\u22DB\uFE00","gesles;":"\u2A94","Gfr;":"\u{1D50A}","gfr;":"\u{1D524}","Gg;":"\u22D9","gg;":"\u226B","ggg;":"\u22D9","gimel;":"\u2137","GJcy;":"\u0403","gjcy;":"\u0453","gl;":"\u2277","gla;":"\u2AA5","glE;":"\u2A92","glj;":"\u2AA4","gnap;":"\u2A8A","gnapprox;":"\u2A8A","gnE;":"\u2269","gne;":"\u2A88","gneq;":"\u2A88","gneqq;":"\u2269","gnsim;":"\u22E7","Gopf;":"\u{1D53E}","gopf;":"\u{1D558}","grave;":"`","GreaterEqual;":"\u2265","GreaterEqualLess;":"\u22DB","GreaterFullEqual;":"\u2267","GreaterGreater;":"\u2AA2","GreaterLess;":"\u2277","GreaterSlantEqual;":"\u2A7E","GreaterTilde;":"\u2273","Gscr;":"\u{1D4A2}","gscr;":"\u210A","gsim;":"\u2273","gsime;":"\u2A8E","gsiml;":"\u2A90","GT;":">",GT:">","Gt;":"\u226B","gt;":">",gt:">","gtcc;":"\u2AA7","gtcir;":"\u2A7A","gtdot;":"\u22D7","gtlPar;":"\u2995","gtquest;":"\u2A7C","gtrapprox;":"\u2A86","gtrarr;":"\u2978","gtrdot;":"\u22D7","gtreqless;":"\u22DB","gtreqqless;":"\u2A8C","gtrless;":"\u2277","gtrsim;":"\u2273","gvertneqq;":"\u2269\uFE00","gvnE;":"\u2269\uFE00","Hacek;":"\u02C7","hairsp;":"\u200A","half;":"\xBD","hamilt;":"\u210B","HARDcy;":"\u042A","hardcy;":"\u044A","hArr;":"\u21D4","harr;":"\u2194","harrcir;":"\u2948","harrw;":"\u21AD","Hat;":"^","hbar;":"\u210F","Hcirc;":"\u0124","hcirc;":"\u0125","hearts;":"\u2665","heartsuit;":"\u2665","hellip;":"\u2026","hercon;":"\u22B9","Hfr;":"\u210C","hfr;":"\u{1D525}","HilbertSpace;":"\u210B","hksearow;":"\u2925","hkswarow;":"\u2926","hoarr;":"\u21FF","homtht;":"\u223B","hookleftarrow;":"\u21A9","hookrightarrow;":"\u21AA","Hopf;":"\u210D","hopf;":"\u{1D559}","horbar;":"\u2015","HorizontalLine;":"\u2500","Hscr;":"\u210B","hscr;":"\u{1D4BD}","hslash;":"\u210F","Hstrok;":"\u0126","hstrok;":"\u0127","HumpDownHump;":"\u224E","HumpEqual;":"\u224F","hybull;":"\u2043","hyphen;":"\u2010","Iacute;":"\xCD",Iacute:"\xCD","iacute;":"\xED",iacute:"\xED","ic;":"\u2063","Icirc;":"\xCE",Icirc:"\xCE","icirc;":"\xEE",icirc:"\xEE","Icy;":"\u0418","icy;":"\u0438","Idot;":"\u0130","IEcy;":"\u0415","iecy;":"\u0435","iexcl;":"\xA1",iexcl:"\xA1","iff;":"\u21D4","Ifr;":"\u2111","ifr;":"\u{1D526}","Igrave;":"\xCC",Igrave:"\xCC","igrave;":"\xEC",igrave:"\xEC","ii;":"\u2148","iiiint;":"\u2A0C","iiint;":"\u222D","iinfin;":"\u29DC","iiota;":"\u2129","IJlig;":"\u0132","ijlig;":"\u0133","Im;":"\u2111","Imacr;":"\u012A","imacr;":"\u012B","image;":"\u2111","ImaginaryI;":"\u2148","imagline;":"\u2110","imagpart;":"\u2111","imath;":"\u0131","imof;":"\u22B7","imped;":"\u01B5","Implies;":"\u21D2","in;":"\u2208","incare;":"\u2105","infin;":"\u221E","infintie;":"\u29DD","inodot;":"\u0131","Int;":"\u222C","int;":"\u222B","intcal;":"\u22BA","integers;":"\u2124","Integral;":"\u222B","intercal;":"\u22BA","Intersection;":"\u22C2","intlarhk;":"\u2A17","intprod;":"\u2A3C","InvisibleComma;":"\u2063","InvisibleTimes;":"\u2062","IOcy;":"\u0401","iocy;":"\u0451","Iogon;":"\u012E","iogon;":"\u012F","Iopf;":"\u{1D540}","iopf;":"\u{1D55A}","Iota;":"\u0399","iota;":"\u03B9","iprod;":"\u2A3C","iquest;":"\xBF",iquest:"\xBF","Iscr;":"\u2110","iscr;":"\u{1D4BE}","isin;":"\u2208","isindot;":"\u22F5","isinE;":"\u22F9","isins;":"\u22F4","isinsv;":"\u22F3","isinv;":"\u2208","it;":"\u2062","Itilde;":"\u0128","itilde;":"\u0129","Iukcy;":"\u0406","iukcy;":"\u0456","Iuml;":"\xCF",Iuml:"\xCF","iuml;":"\xEF",iuml:"\xEF","Jcirc;":"\u0134","jcirc;":"\u0135","Jcy;":"\u0419","jcy;":"\u0439","Jfr;":"\u{1D50D}","jfr;":"\u{1D527}","jmath;":"\u0237","Jopf;":"\u{1D541}","jopf;":"\u{1D55B}","Jscr;":"\u{1D4A5}","jscr;":"\u{1D4BF}","Jsercy;":"\u0408","jsercy;":"\u0458","Jukcy;":"\u0404","jukcy;":"\u0454","Kappa;":"\u039A","kappa;":"\u03BA","kappav;":"\u03F0","Kcedil;":"\u0136","kcedil;":"\u0137","Kcy;":"\u041A","kcy;":"\u043A","Kfr;":"\u{1D50E}","kfr;":"\u{1D528}","kgreen;":"\u0138","KHcy;":"\u0425","khcy;":"\u0445","KJcy;":"\u040C","kjcy;":"\u045C","Kopf;":"\u{1D542}","kopf;":"\u{1D55C}","Kscr;":"\u{1D4A6}","kscr;":"\u{1D4C0}","lAarr;":"\u21DA","Lacute;":"\u0139","lacute;":"\u013A","laemptyv;":"\u29B4","lagran;":"\u2112","Lambda;":"\u039B","lambda;":"\u03BB","Lang;":"\u27EA","lang;":"\u27E8","langd;":"\u2991","langle;":"\u27E8","lap;":"\u2A85","Laplacetrf;":"\u2112","laquo;":"\xAB",laquo:"\xAB","Larr;":"\u219E","lArr;":"\u21D0","larr;":"\u2190","larrb;":"\u21E4","larrbfs;":"\u291F","larrfs;":"\u291D","larrhk;":"\u21A9","larrlp;":"\u21AB","larrpl;":"\u2939","larrsim;":"\u2973","larrtl;":"\u21A2","lat;":"\u2AAB","lAtail;":"\u291B","latail;":"\u2919","late;":"\u2AAD","lates;":"\u2AAD\uFE00","lBarr;":"\u290E","lbarr;":"\u290C","lbbrk;":"\u2772","lbrace;":"{","lbrack;":"[","lbrke;":"\u298B","lbrksld;":"\u298F","lbrkslu;":"\u298D","Lcaron;":"\u013D","lcaron;":"\u013E","Lcedil;":"\u013B","lcedil;":"\u013C","lceil;":"\u2308","lcub;":"{","Lcy;":"\u041B","lcy;":"\u043B","ldca;":"\u2936","ldquo;":"\u201C","ldquor;":"\u201E","ldrdhar;":"\u2967","ldrushar;":"\u294B","ldsh;":"\u21B2","lE;":"\u2266","le;":"\u2264","LeftAngleBracket;":"\u27E8","LeftArrow;":"\u2190","Leftarrow;":"\u21D0","leftarrow;":"\u2190","LeftArrowBar;":"\u21E4","LeftArrowRightArrow;":"\u21C6","leftarrowtail;":"\u21A2","LeftCeiling;":"\u2308","LeftDoubleBracket;":"\u27E6","LeftDownTeeVector;":"\u2961","LeftDownVector;":"\u21C3","LeftDownVectorBar;":"\u2959","LeftFloor;":"\u230A","leftharpoondown;":"\u21BD","leftharpoonup;":"\u21BC","leftleftarrows;":"\u21C7","LeftRightArrow;":"\u2194","Leftrightarrow;":"\u21D4","leftrightarrow;":"\u2194","leftrightarrows;":"\u21C6","leftrightharpoons;":"\u21CB","leftrightsquigarrow;":"\u21AD","LeftRightVector;":"\u294E","LeftTee;":"\u22A3","LeftTeeArrow;":"\u21A4","LeftTeeVector;":"\u295A","leftthreetimes;":"\u22CB","LeftTriangle;":"\u22B2","LeftTriangleBar;":"\u29CF","LeftTriangleEqual;":"\u22B4","LeftUpDownVector;":"\u2951","LeftUpTeeVector;":"\u2960","LeftUpVector;":"\u21BF","LeftUpVectorBar;":"\u2958","LeftVector;":"\u21BC","LeftVectorBar;":"\u2952","lEg;":"\u2A8B","leg;":"\u22DA","leq;":"\u2264","leqq;":"\u2266","leqslant;":"\u2A7D","les;":"\u2A7D","lescc;":"\u2AA8","lesdot;":"\u2A7F","lesdoto;":"\u2A81","lesdotor;":"\u2A83","lesg;":"\u22DA\uFE00","lesges;":"\u2A93","lessapprox;":"\u2A85","lessdot;":"\u22D6","lesseqgtr;":"\u22DA","lesseqqgtr;":"\u2A8B","LessEqualGreater;":"\u22DA","LessFullEqual;":"\u2266","LessGreater;":"\u2276","lessgtr;":"\u2276","LessLess;":"\u2AA1","lesssim;":"\u2272","LessSlantEqual;":"\u2A7D","LessTilde;":"\u2272","lfisht;":"\u297C","lfloor;":"\u230A","Lfr;":"\u{1D50F}","lfr;":"\u{1D529}","lg;":"\u2276","lgE;":"\u2A91","lHar;":"\u2962","lhard;":"\u21BD","lharu;":"\u21BC","lharul;":"\u296A","lhblk;":"\u2584","LJcy;":"\u0409","ljcy;":"\u0459","Ll;":"\u22D8","ll;":"\u226A","llarr;":"\u21C7","llcorner;":"\u231E","Lleftarrow;":"\u21DA","llhard;":"\u296B","lltri;":"\u25FA","Lmidot;":"\u013F","lmidot;":"\u0140","lmoust;":"\u23B0","lmoustache;":"\u23B0","lnap;":"\u2A89","lnapprox;":"\u2A89","lnE;":"\u2268","lne;":"\u2A87","lneq;":"\u2A87","lneqq;":"\u2268","lnsim;":"\u22E6","loang;":"\u27EC","loarr;":"\u21FD","lobrk;":"\u27E6","LongLeftArrow;":"\u27F5","Longleftarrow;":"\u27F8","longleftarrow;":"\u27F5","LongLeftRightArrow;":"\u27F7","Longleftrightarrow;":"\u27FA","longleftrightarrow;":"\u27F7","longmapsto;":"\u27FC","LongRightArrow;":"\u27F6","Longrightarrow;":"\u27F9","longrightarrow;":"\u27F6","looparrowleft;":"\u21AB","looparrowright;":"\u21AC","lopar;":"\u2985","Lopf;":"\u{1D543}","lopf;":"\u{1D55D}","loplus;":"\u2A2D","lotimes;":"\u2A34","lowast;":"\u2217","lowbar;":"_","LowerLeftArrow;":"\u2199","LowerRightArrow;":"\u2198","loz;":"\u25CA","lozenge;":"\u25CA","lozf;":"\u29EB","lpar;":"(","lparlt;":"\u2993","lrarr;":"\u21C6","lrcorner;":"\u231F","lrhar;":"\u21CB","lrhard;":"\u296D","lrm;":"\u200E","lrtri;":"\u22BF","lsaquo;":"\u2039","Lscr;":"\u2112","lscr;":"\u{1D4C1}","Lsh;":"\u21B0","lsh;":"\u21B0","lsim;":"\u2272","lsime;":"\u2A8D","lsimg;":"\u2A8F","lsqb;":"[","lsquo;":"\u2018","lsquor;":"\u201A","Lstrok;":"\u0141","lstrok;":"\u0142","LT;":"<",LT:"<","Lt;":"\u226A","lt;":"<",lt:"<","ltcc;":"\u2AA6","ltcir;":"\u2A79","ltdot;":"\u22D6","lthree;":"\u22CB","ltimes;":"\u22C9","ltlarr;":"\u2976","ltquest;":"\u2A7B","ltri;":"\u25C3","ltrie;":"\u22B4","ltrif;":"\u25C2","ltrPar;":"\u2996","lurdshar;":"\u294A","luruhar;":"\u2966","lvertneqq;":"\u2268\uFE00","lvnE;":"\u2268\uFE00","macr;":"\xAF",macr:"\xAF","male;":"\u2642","malt;":"\u2720","maltese;":"\u2720","Map;":"\u2905","map;":"\u21A6","mapsto;":"\u21A6","mapstodown;":"\u21A7","mapstoleft;":"\u21A4","mapstoup;":"\u21A5","marker;":"\u25AE","mcomma;":"\u2A29","Mcy;":"\u041C","mcy;":"\u043C","mdash;":"\u2014","mDDot;":"\u223A","measuredangle;":"\u2221","MediumSpace;":"\u205F","Mellintrf;":"\u2133","Mfr;":"\u{1D510}","mfr;":"\u{1D52A}","mho;":"\u2127","micro;":"\xB5",micro:"\xB5","mid;":"\u2223","midast;":"*","midcir;":"\u2AF0","middot;":"\xB7",middot:"\xB7","minus;":"\u2212","minusb;":"\u229F","minusd;":"\u2238","minusdu;":"\u2A2A","MinusPlus;":"\u2213","mlcp;":"\u2ADB","mldr;":"\u2026","mnplus;":"\u2213","models;":"\u22A7","Mopf;":"\u{1D544}","mopf;":"\u{1D55E}","mp;":"\u2213","Mscr;":"\u2133","mscr;":"\u{1D4C2}","mstpos;":"\u223E","Mu;":"\u039C","mu;":"\u03BC","multimap;":"\u22B8","mumap;":"\u22B8","nabla;":"\u2207","Nacute;":"\u0143","nacute;":"\u0144","nang;":"\u2220\u20D2","nap;":"\u2249","napE;":"\u2A70\u0338","napid;":"\u224B\u0338","napos;":"\u0149","napprox;":"\u2249","natur;":"\u266E","natural;":"\u266E","naturals;":"\u2115","nbsp;":"\xA0",nbsp:"\xA0","nbump;":"\u224E\u0338","nbumpe;":"\u224F\u0338","ncap;":"\u2A43","Ncaron;":"\u0147","ncaron;":"\u0148","Ncedil;":"\u0145","ncedil;":"\u0146","ncong;":"\u2247","ncongdot;":"\u2A6D\u0338","ncup;":"\u2A42","Ncy;":"\u041D","ncy;":"\u043D","ndash;":"\u2013","ne;":"\u2260","nearhk;":"\u2924","neArr;":"\u21D7","nearr;":"\u2197","nearrow;":"\u2197","nedot;":"\u2250\u0338","NegativeMediumSpace;":"\u200B","NegativeThickSpace;":"\u200B","NegativeThinSpace;":"\u200B","NegativeVeryThinSpace;":"\u200B","nequiv;":"\u2262","nesear;":"\u2928","nesim;":"\u2242\u0338","NestedGreaterGreater;":"\u226B","NestedLessLess;":"\u226A","NewLine;":` +`,"nexist;":"\u2204","nexists;":"\u2204","Nfr;":"\u{1D511}","nfr;":"\u{1D52B}","ngE;":"\u2267\u0338","nge;":"\u2271","ngeq;":"\u2271","ngeqq;":"\u2267\u0338","ngeqslant;":"\u2A7E\u0338","nges;":"\u2A7E\u0338","nGg;":"\u22D9\u0338","ngsim;":"\u2275","nGt;":"\u226B\u20D2","ngt;":"\u226F","ngtr;":"\u226F","nGtv;":"\u226B\u0338","nhArr;":"\u21CE","nharr;":"\u21AE","nhpar;":"\u2AF2","ni;":"\u220B","nis;":"\u22FC","nisd;":"\u22FA","niv;":"\u220B","NJcy;":"\u040A","njcy;":"\u045A","nlArr;":"\u21CD","nlarr;":"\u219A","nldr;":"\u2025","nlE;":"\u2266\u0338","nle;":"\u2270","nLeftarrow;":"\u21CD","nleftarrow;":"\u219A","nLeftrightarrow;":"\u21CE","nleftrightarrow;":"\u21AE","nleq;":"\u2270","nleqq;":"\u2266\u0338","nleqslant;":"\u2A7D\u0338","nles;":"\u2A7D\u0338","nless;":"\u226E","nLl;":"\u22D8\u0338","nlsim;":"\u2274","nLt;":"\u226A\u20D2","nlt;":"\u226E","nltri;":"\u22EA","nltrie;":"\u22EC","nLtv;":"\u226A\u0338","nmid;":"\u2224","NoBreak;":"\u2060","NonBreakingSpace;":"\xA0","Nopf;":"\u2115","nopf;":"\u{1D55F}","Not;":"\u2AEC","not;":"\xAC",not:"\xAC","NotCongruent;":"\u2262","NotCupCap;":"\u226D","NotDoubleVerticalBar;":"\u2226","NotElement;":"\u2209","NotEqual;":"\u2260","NotEqualTilde;":"\u2242\u0338","NotExists;":"\u2204","NotGreater;":"\u226F","NotGreaterEqual;":"\u2271","NotGreaterFullEqual;":"\u2267\u0338","NotGreaterGreater;":"\u226B\u0338","NotGreaterLess;":"\u2279","NotGreaterSlantEqual;":"\u2A7E\u0338","NotGreaterTilde;":"\u2275","NotHumpDownHump;":"\u224E\u0338","NotHumpEqual;":"\u224F\u0338","notin;":"\u2209","notindot;":"\u22F5\u0338","notinE;":"\u22F9\u0338","notinva;":"\u2209","notinvb;":"\u22F7","notinvc;":"\u22F6","NotLeftTriangle;":"\u22EA","NotLeftTriangleBar;":"\u29CF\u0338","NotLeftTriangleEqual;":"\u22EC","NotLess;":"\u226E","NotLessEqual;":"\u2270","NotLessGreater;":"\u2278","NotLessLess;":"\u226A\u0338","NotLessSlantEqual;":"\u2A7D\u0338","NotLessTilde;":"\u2274","NotNestedGreaterGreater;":"\u2AA2\u0338","NotNestedLessLess;":"\u2AA1\u0338","notni;":"\u220C","notniva;":"\u220C","notnivb;":"\u22FE","notnivc;":"\u22FD","NotPrecedes;":"\u2280","NotPrecedesEqual;":"\u2AAF\u0338","NotPrecedesSlantEqual;":"\u22E0","NotReverseElement;":"\u220C","NotRightTriangle;":"\u22EB","NotRightTriangleBar;":"\u29D0\u0338","NotRightTriangleEqual;":"\u22ED","NotSquareSubset;":"\u228F\u0338","NotSquareSubsetEqual;":"\u22E2","NotSquareSuperset;":"\u2290\u0338","NotSquareSupersetEqual;":"\u22E3","NotSubset;":"\u2282\u20D2","NotSubsetEqual;":"\u2288","NotSucceeds;":"\u2281","NotSucceedsEqual;":"\u2AB0\u0338","NotSucceedsSlantEqual;":"\u22E1","NotSucceedsTilde;":"\u227F\u0338","NotSuperset;":"\u2283\u20D2","NotSupersetEqual;":"\u2289","NotTilde;":"\u2241","NotTildeEqual;":"\u2244","NotTildeFullEqual;":"\u2247","NotTildeTilde;":"\u2249","NotVerticalBar;":"\u2224","npar;":"\u2226","nparallel;":"\u2226","nparsl;":"\u2AFD\u20E5","npart;":"\u2202\u0338","npolint;":"\u2A14","npr;":"\u2280","nprcue;":"\u22E0","npre;":"\u2AAF\u0338","nprec;":"\u2280","npreceq;":"\u2AAF\u0338","nrArr;":"\u21CF","nrarr;":"\u219B","nrarrc;":"\u2933\u0338","nrarrw;":"\u219D\u0338","nRightarrow;":"\u21CF","nrightarrow;":"\u219B","nrtri;":"\u22EB","nrtrie;":"\u22ED","nsc;":"\u2281","nsccue;":"\u22E1","nsce;":"\u2AB0\u0338","Nscr;":"\u{1D4A9}","nscr;":"\u{1D4C3}","nshortmid;":"\u2224","nshortparallel;":"\u2226","nsim;":"\u2241","nsime;":"\u2244","nsimeq;":"\u2244","nsmid;":"\u2224","nspar;":"\u2226","nsqsube;":"\u22E2","nsqsupe;":"\u22E3","nsub;":"\u2284","nsubE;":"\u2AC5\u0338","nsube;":"\u2288","nsubset;":"\u2282\u20D2","nsubseteq;":"\u2288","nsubseteqq;":"\u2AC5\u0338","nsucc;":"\u2281","nsucceq;":"\u2AB0\u0338","nsup;":"\u2285","nsupE;":"\u2AC6\u0338","nsupe;":"\u2289","nsupset;":"\u2283\u20D2","nsupseteq;":"\u2289","nsupseteqq;":"\u2AC6\u0338","ntgl;":"\u2279","Ntilde;":"\xD1",Ntilde:"\xD1","ntilde;":"\xF1",ntilde:"\xF1","ntlg;":"\u2278","ntriangleleft;":"\u22EA","ntrianglelefteq;":"\u22EC","ntriangleright;":"\u22EB","ntrianglerighteq;":"\u22ED","Nu;":"\u039D","nu;":"\u03BD","num;":"#","numero;":"\u2116","numsp;":"\u2007","nvap;":"\u224D\u20D2","nVDash;":"\u22AF","nVdash;":"\u22AE","nvDash;":"\u22AD","nvdash;":"\u22AC","nvge;":"\u2265\u20D2","nvgt;":">\u20D2","nvHarr;":"\u2904","nvinfin;":"\u29DE","nvlArr;":"\u2902","nvle;":"\u2264\u20D2","nvlt;":"<\u20D2","nvltrie;":"\u22B4\u20D2","nvrArr;":"\u2903","nvrtrie;":"\u22B5\u20D2","nvsim;":"\u223C\u20D2","nwarhk;":"\u2923","nwArr;":"\u21D6","nwarr;":"\u2196","nwarrow;":"\u2196","nwnear;":"\u2927","Oacute;":"\xD3",Oacute:"\xD3","oacute;":"\xF3",oacute:"\xF3","oast;":"\u229B","ocir;":"\u229A","Ocirc;":"\xD4",Ocirc:"\xD4","ocirc;":"\xF4",ocirc:"\xF4","Ocy;":"\u041E","ocy;":"\u043E","odash;":"\u229D","Odblac;":"\u0150","odblac;":"\u0151","odiv;":"\u2A38","odot;":"\u2299","odsold;":"\u29BC","OElig;":"\u0152","oelig;":"\u0153","ofcir;":"\u29BF","Ofr;":"\u{1D512}","ofr;":"\u{1D52C}","ogon;":"\u02DB","Ograve;":"\xD2",Ograve:"\xD2","ograve;":"\xF2",ograve:"\xF2","ogt;":"\u29C1","ohbar;":"\u29B5","ohm;":"\u03A9","oint;":"\u222E","olarr;":"\u21BA","olcir;":"\u29BE","olcross;":"\u29BB","oline;":"\u203E","olt;":"\u29C0","Omacr;":"\u014C","omacr;":"\u014D","Omega;":"\u03A9","omega;":"\u03C9","Omicron;":"\u039F","omicron;":"\u03BF","omid;":"\u29B6","ominus;":"\u2296","Oopf;":"\u{1D546}","oopf;":"\u{1D560}","opar;":"\u29B7","OpenCurlyDoubleQuote;":"\u201C","OpenCurlyQuote;":"\u2018","operp;":"\u29B9","oplus;":"\u2295","Or;":"\u2A54","or;":"\u2228","orarr;":"\u21BB","ord;":"\u2A5D","order;":"\u2134","orderof;":"\u2134","ordf;":"\xAA",ordf:"\xAA","ordm;":"\xBA",ordm:"\xBA","origof;":"\u22B6","oror;":"\u2A56","orslope;":"\u2A57","orv;":"\u2A5B","oS;":"\u24C8","Oscr;":"\u{1D4AA}","oscr;":"\u2134","Oslash;":"\xD8",Oslash:"\xD8","oslash;":"\xF8",oslash:"\xF8","osol;":"\u2298","Otilde;":"\xD5",Otilde:"\xD5","otilde;":"\xF5",otilde:"\xF5","Otimes;":"\u2A37","otimes;":"\u2297","otimesas;":"\u2A36","Ouml;":"\xD6",Ouml:"\xD6","ouml;":"\xF6",ouml:"\xF6","ovbar;":"\u233D","OverBar;":"\u203E","OverBrace;":"\u23DE","OverBracket;":"\u23B4","OverParenthesis;":"\u23DC","par;":"\u2225","para;":"\xB6",para:"\xB6","parallel;":"\u2225","parsim;":"\u2AF3","parsl;":"\u2AFD","part;":"\u2202","PartialD;":"\u2202","Pcy;":"\u041F","pcy;":"\u043F","percnt;":"%","period;":".","permil;":"\u2030","perp;":"\u22A5","pertenk;":"\u2031","Pfr;":"\u{1D513}","pfr;":"\u{1D52D}","Phi;":"\u03A6","phi;":"\u03C6","phiv;":"\u03D5","phmmat;":"\u2133","phone;":"\u260E","Pi;":"\u03A0","pi;":"\u03C0","pitchfork;":"\u22D4","piv;":"\u03D6","planck;":"\u210F","planckh;":"\u210E","plankv;":"\u210F","plus;":"+","plusacir;":"\u2A23","plusb;":"\u229E","pluscir;":"\u2A22","plusdo;":"\u2214","plusdu;":"\u2A25","pluse;":"\u2A72","PlusMinus;":"\xB1","plusmn;":"\xB1",plusmn:"\xB1","plussim;":"\u2A26","plustwo;":"\u2A27","pm;":"\xB1","Poincareplane;":"\u210C","pointint;":"\u2A15","Popf;":"\u2119","popf;":"\u{1D561}","pound;":"\xA3",pound:"\xA3","Pr;":"\u2ABB","pr;":"\u227A","prap;":"\u2AB7","prcue;":"\u227C","prE;":"\u2AB3","pre;":"\u2AAF","prec;":"\u227A","precapprox;":"\u2AB7","preccurlyeq;":"\u227C","Precedes;":"\u227A","PrecedesEqual;":"\u2AAF","PrecedesSlantEqual;":"\u227C","PrecedesTilde;":"\u227E","preceq;":"\u2AAF","precnapprox;":"\u2AB9","precneqq;":"\u2AB5","precnsim;":"\u22E8","precsim;":"\u227E","Prime;":"\u2033","prime;":"\u2032","primes;":"\u2119","prnap;":"\u2AB9","prnE;":"\u2AB5","prnsim;":"\u22E8","prod;":"\u220F","Product;":"\u220F","profalar;":"\u232E","profline;":"\u2312","profsurf;":"\u2313","prop;":"\u221D","Proportion;":"\u2237","Proportional;":"\u221D","propto;":"\u221D","prsim;":"\u227E","prurel;":"\u22B0","Pscr;":"\u{1D4AB}","pscr;":"\u{1D4C5}","Psi;":"\u03A8","psi;":"\u03C8","puncsp;":"\u2008","Qfr;":"\u{1D514}","qfr;":"\u{1D52E}","qint;":"\u2A0C","Qopf;":"\u211A","qopf;":"\u{1D562}","qprime;":"\u2057","Qscr;":"\u{1D4AC}","qscr;":"\u{1D4C6}","quaternions;":"\u210D","quatint;":"\u2A16","quest;":"?","questeq;":"\u225F","QUOT;":'"',QUOT:'"',"quot;":'"',quot:'"',"rAarr;":"\u21DB","race;":"\u223D\u0331","Racute;":"\u0154","racute;":"\u0155","radic;":"\u221A","raemptyv;":"\u29B3","Rang;":"\u27EB","rang;":"\u27E9","rangd;":"\u2992","range;":"\u29A5","rangle;":"\u27E9","raquo;":"\xBB",raquo:"\xBB","Rarr;":"\u21A0","rArr;":"\u21D2","rarr;":"\u2192","rarrap;":"\u2975","rarrb;":"\u21E5","rarrbfs;":"\u2920","rarrc;":"\u2933","rarrfs;":"\u291E","rarrhk;":"\u21AA","rarrlp;":"\u21AC","rarrpl;":"\u2945","rarrsim;":"\u2974","Rarrtl;":"\u2916","rarrtl;":"\u21A3","rarrw;":"\u219D","rAtail;":"\u291C","ratail;":"\u291A","ratio;":"\u2236","rationals;":"\u211A","RBarr;":"\u2910","rBarr;":"\u290F","rbarr;":"\u290D","rbbrk;":"\u2773","rbrace;":"}","rbrack;":"]","rbrke;":"\u298C","rbrksld;":"\u298E","rbrkslu;":"\u2990","Rcaron;":"\u0158","rcaron;":"\u0159","Rcedil;":"\u0156","rcedil;":"\u0157","rceil;":"\u2309","rcub;":"}","Rcy;":"\u0420","rcy;":"\u0440","rdca;":"\u2937","rdldhar;":"\u2969","rdquo;":"\u201D","rdquor;":"\u201D","rdsh;":"\u21B3","Re;":"\u211C","real;":"\u211C","realine;":"\u211B","realpart;":"\u211C","reals;":"\u211D","rect;":"\u25AD","REG;":"\xAE",REG:"\xAE","reg;":"\xAE",reg:"\xAE","ReverseElement;":"\u220B","ReverseEquilibrium;":"\u21CB","ReverseUpEquilibrium;":"\u296F","rfisht;":"\u297D","rfloor;":"\u230B","Rfr;":"\u211C","rfr;":"\u{1D52F}","rHar;":"\u2964","rhard;":"\u21C1","rharu;":"\u21C0","rharul;":"\u296C","Rho;":"\u03A1","rho;":"\u03C1","rhov;":"\u03F1","RightAngleBracket;":"\u27E9","RightArrow;":"\u2192","Rightarrow;":"\u21D2","rightarrow;":"\u2192","RightArrowBar;":"\u21E5","RightArrowLeftArrow;":"\u21C4","rightarrowtail;":"\u21A3","RightCeiling;":"\u2309","RightDoubleBracket;":"\u27E7","RightDownTeeVector;":"\u295D","RightDownVector;":"\u21C2","RightDownVectorBar;":"\u2955","RightFloor;":"\u230B","rightharpoondown;":"\u21C1","rightharpoonup;":"\u21C0","rightleftarrows;":"\u21C4","rightleftharpoons;":"\u21CC","rightrightarrows;":"\u21C9","rightsquigarrow;":"\u219D","RightTee;":"\u22A2","RightTeeArrow;":"\u21A6","RightTeeVector;":"\u295B","rightthreetimes;":"\u22CC","RightTriangle;":"\u22B3","RightTriangleBar;":"\u29D0","RightTriangleEqual;":"\u22B5","RightUpDownVector;":"\u294F","RightUpTeeVector;":"\u295C","RightUpVector;":"\u21BE","RightUpVectorBar;":"\u2954","RightVector;":"\u21C0","RightVectorBar;":"\u2953","ring;":"\u02DA","risingdotseq;":"\u2253","rlarr;":"\u21C4","rlhar;":"\u21CC","rlm;":"\u200F","rmoust;":"\u23B1","rmoustache;":"\u23B1","rnmid;":"\u2AEE","roang;":"\u27ED","roarr;":"\u21FE","robrk;":"\u27E7","ropar;":"\u2986","Ropf;":"\u211D","ropf;":"\u{1D563}","roplus;":"\u2A2E","rotimes;":"\u2A35","RoundImplies;":"\u2970","rpar;":")","rpargt;":"\u2994","rppolint;":"\u2A12","rrarr;":"\u21C9","Rrightarrow;":"\u21DB","rsaquo;":"\u203A","Rscr;":"\u211B","rscr;":"\u{1D4C7}","Rsh;":"\u21B1","rsh;":"\u21B1","rsqb;":"]","rsquo;":"\u2019","rsquor;":"\u2019","rthree;":"\u22CC","rtimes;":"\u22CA","rtri;":"\u25B9","rtrie;":"\u22B5","rtrif;":"\u25B8","rtriltri;":"\u29CE","RuleDelayed;":"\u29F4","ruluhar;":"\u2968","rx;":"\u211E","Sacute;":"\u015A","sacute;":"\u015B","sbquo;":"\u201A","Sc;":"\u2ABC","sc;":"\u227B","scap;":"\u2AB8","Scaron;":"\u0160","scaron;":"\u0161","sccue;":"\u227D","scE;":"\u2AB4","sce;":"\u2AB0","Scedil;":"\u015E","scedil;":"\u015F","Scirc;":"\u015C","scirc;":"\u015D","scnap;":"\u2ABA","scnE;":"\u2AB6","scnsim;":"\u22E9","scpolint;":"\u2A13","scsim;":"\u227F","Scy;":"\u0421","scy;":"\u0441","sdot;":"\u22C5","sdotb;":"\u22A1","sdote;":"\u2A66","searhk;":"\u2925","seArr;":"\u21D8","searr;":"\u2198","searrow;":"\u2198","sect;":"\xA7",sect:"\xA7","semi;":";","seswar;":"\u2929","setminus;":"\u2216","setmn;":"\u2216","sext;":"\u2736","Sfr;":"\u{1D516}","sfr;":"\u{1D530}","sfrown;":"\u2322","sharp;":"\u266F","SHCHcy;":"\u0429","shchcy;":"\u0449","SHcy;":"\u0428","shcy;":"\u0448","ShortDownArrow;":"\u2193","ShortLeftArrow;":"\u2190","shortmid;":"\u2223","shortparallel;":"\u2225","ShortRightArrow;":"\u2192","ShortUpArrow;":"\u2191","shy;":"\xAD",shy:"\xAD","Sigma;":"\u03A3","sigma;":"\u03C3","sigmaf;":"\u03C2","sigmav;":"\u03C2","sim;":"\u223C","simdot;":"\u2A6A","sime;":"\u2243","simeq;":"\u2243","simg;":"\u2A9E","simgE;":"\u2AA0","siml;":"\u2A9D","simlE;":"\u2A9F","simne;":"\u2246","simplus;":"\u2A24","simrarr;":"\u2972","slarr;":"\u2190","SmallCircle;":"\u2218","smallsetminus;":"\u2216","smashp;":"\u2A33","smeparsl;":"\u29E4","smid;":"\u2223","smile;":"\u2323","smt;":"\u2AAA","smte;":"\u2AAC","smtes;":"\u2AAC\uFE00","SOFTcy;":"\u042C","softcy;":"\u044C","sol;":"/","solb;":"\u29C4","solbar;":"\u233F","Sopf;":"\u{1D54A}","sopf;":"\u{1D564}","spades;":"\u2660","spadesuit;":"\u2660","spar;":"\u2225","sqcap;":"\u2293","sqcaps;":"\u2293\uFE00","sqcup;":"\u2294","sqcups;":"\u2294\uFE00","Sqrt;":"\u221A","sqsub;":"\u228F","sqsube;":"\u2291","sqsubset;":"\u228F","sqsubseteq;":"\u2291","sqsup;":"\u2290","sqsupe;":"\u2292","sqsupset;":"\u2290","sqsupseteq;":"\u2292","squ;":"\u25A1","Square;":"\u25A1","square;":"\u25A1","SquareIntersection;":"\u2293","SquareSubset;":"\u228F","SquareSubsetEqual;":"\u2291","SquareSuperset;":"\u2290","SquareSupersetEqual;":"\u2292","SquareUnion;":"\u2294","squarf;":"\u25AA","squf;":"\u25AA","srarr;":"\u2192","Sscr;":"\u{1D4AE}","sscr;":"\u{1D4C8}","ssetmn;":"\u2216","ssmile;":"\u2323","sstarf;":"\u22C6","Star;":"\u22C6","star;":"\u2606","starf;":"\u2605","straightepsilon;":"\u03F5","straightphi;":"\u03D5","strns;":"\xAF","Sub;":"\u22D0","sub;":"\u2282","subdot;":"\u2ABD","subE;":"\u2AC5","sube;":"\u2286","subedot;":"\u2AC3","submult;":"\u2AC1","subnE;":"\u2ACB","subne;":"\u228A","subplus;":"\u2ABF","subrarr;":"\u2979","Subset;":"\u22D0","subset;":"\u2282","subseteq;":"\u2286","subseteqq;":"\u2AC5","SubsetEqual;":"\u2286","subsetneq;":"\u228A","subsetneqq;":"\u2ACB","subsim;":"\u2AC7","subsub;":"\u2AD5","subsup;":"\u2AD3","succ;":"\u227B","succapprox;":"\u2AB8","succcurlyeq;":"\u227D","Succeeds;":"\u227B","SucceedsEqual;":"\u2AB0","SucceedsSlantEqual;":"\u227D","SucceedsTilde;":"\u227F","succeq;":"\u2AB0","succnapprox;":"\u2ABA","succneqq;":"\u2AB6","succnsim;":"\u22E9","succsim;":"\u227F","SuchThat;":"\u220B","Sum;":"\u2211","sum;":"\u2211","sung;":"\u266A","Sup;":"\u22D1","sup;":"\u2283","sup1;":"\xB9",sup1:"\xB9","sup2;":"\xB2",sup2:"\xB2","sup3;":"\xB3",sup3:"\xB3","supdot;":"\u2ABE","supdsub;":"\u2AD8","supE;":"\u2AC6","supe;":"\u2287","supedot;":"\u2AC4","Superset;":"\u2283","SupersetEqual;":"\u2287","suphsol;":"\u27C9","suphsub;":"\u2AD7","suplarr;":"\u297B","supmult;":"\u2AC2","supnE;":"\u2ACC","supne;":"\u228B","supplus;":"\u2AC0","Supset;":"\u22D1","supset;":"\u2283","supseteq;":"\u2287","supseteqq;":"\u2AC6","supsetneq;":"\u228B","supsetneqq;":"\u2ACC","supsim;":"\u2AC8","supsub;":"\u2AD4","supsup;":"\u2AD6","swarhk;":"\u2926","swArr;":"\u21D9","swarr;":"\u2199","swarrow;":"\u2199","swnwar;":"\u292A","szlig;":"\xDF",szlig:"\xDF","Tab;":" ","target;":"\u2316","Tau;":"\u03A4","tau;":"\u03C4","tbrk;":"\u23B4","Tcaron;":"\u0164","tcaron;":"\u0165","Tcedil;":"\u0162","tcedil;":"\u0163","Tcy;":"\u0422","tcy;":"\u0442","tdot;":"\u20DB","telrec;":"\u2315","Tfr;":"\u{1D517}","tfr;":"\u{1D531}","there4;":"\u2234","Therefore;":"\u2234","therefore;":"\u2234","Theta;":"\u0398","theta;":"\u03B8","thetasym;":"\u03D1","thetav;":"\u03D1","thickapprox;":"\u2248","thicksim;":"\u223C","ThickSpace;":"\u205F\u200A","thinsp;":"\u2009","ThinSpace;":"\u2009","thkap;":"\u2248","thksim;":"\u223C","THORN;":"\xDE",THORN:"\xDE","thorn;":"\xFE",thorn:"\xFE","Tilde;":"\u223C","tilde;":"\u02DC","TildeEqual;":"\u2243","TildeFullEqual;":"\u2245","TildeTilde;":"\u2248","times;":"\xD7",times:"\xD7","timesb;":"\u22A0","timesbar;":"\u2A31","timesd;":"\u2A30","tint;":"\u222D","toea;":"\u2928","top;":"\u22A4","topbot;":"\u2336","topcir;":"\u2AF1","Topf;":"\u{1D54B}","topf;":"\u{1D565}","topfork;":"\u2ADA","tosa;":"\u2929","tprime;":"\u2034","TRADE;":"\u2122","trade;":"\u2122","triangle;":"\u25B5","triangledown;":"\u25BF","triangleleft;":"\u25C3","trianglelefteq;":"\u22B4","triangleq;":"\u225C","triangleright;":"\u25B9","trianglerighteq;":"\u22B5","tridot;":"\u25EC","trie;":"\u225C","triminus;":"\u2A3A","TripleDot;":"\u20DB","triplus;":"\u2A39","trisb;":"\u29CD","tritime;":"\u2A3B","trpezium;":"\u23E2","Tscr;":"\u{1D4AF}","tscr;":"\u{1D4C9}","TScy;":"\u0426","tscy;":"\u0446","TSHcy;":"\u040B","tshcy;":"\u045B","Tstrok;":"\u0166","tstrok;":"\u0167","twixt;":"\u226C","twoheadleftarrow;":"\u219E","twoheadrightarrow;":"\u21A0","Uacute;":"\xDA",Uacute:"\xDA","uacute;":"\xFA",uacute:"\xFA","Uarr;":"\u219F","uArr;":"\u21D1","uarr;":"\u2191","Uarrocir;":"\u2949","Ubrcy;":"\u040E","ubrcy;":"\u045E","Ubreve;":"\u016C","ubreve;":"\u016D","Ucirc;":"\xDB",Ucirc:"\xDB","ucirc;":"\xFB",ucirc:"\xFB","Ucy;":"\u0423","ucy;":"\u0443","udarr;":"\u21C5","Udblac;":"\u0170","udblac;":"\u0171","udhar;":"\u296E","ufisht;":"\u297E","Ufr;":"\u{1D518}","ufr;":"\u{1D532}","Ugrave;":"\xD9",Ugrave:"\xD9","ugrave;":"\xF9",ugrave:"\xF9","uHar;":"\u2963","uharl;":"\u21BF","uharr;":"\u21BE","uhblk;":"\u2580","ulcorn;":"\u231C","ulcorner;":"\u231C","ulcrop;":"\u230F","ultri;":"\u25F8","Umacr;":"\u016A","umacr;":"\u016B","uml;":"\xA8",uml:"\xA8","UnderBar;":"_","UnderBrace;":"\u23DF","UnderBracket;":"\u23B5","UnderParenthesis;":"\u23DD","Union;":"\u22C3","UnionPlus;":"\u228E","Uogon;":"\u0172","uogon;":"\u0173","Uopf;":"\u{1D54C}","uopf;":"\u{1D566}","UpArrow;":"\u2191","Uparrow;":"\u21D1","uparrow;":"\u2191","UpArrowBar;":"\u2912","UpArrowDownArrow;":"\u21C5","UpDownArrow;":"\u2195","Updownarrow;":"\u21D5","updownarrow;":"\u2195","UpEquilibrium;":"\u296E","upharpoonleft;":"\u21BF","upharpoonright;":"\u21BE","uplus;":"\u228E","UpperLeftArrow;":"\u2196","UpperRightArrow;":"\u2197","Upsi;":"\u03D2","upsi;":"\u03C5","upsih;":"\u03D2","Upsilon;":"\u03A5","upsilon;":"\u03C5","UpTee;":"\u22A5","UpTeeArrow;":"\u21A5","upuparrows;":"\u21C8","urcorn;":"\u231D","urcorner;":"\u231D","urcrop;":"\u230E","Uring;":"\u016E","uring;":"\u016F","urtri;":"\u25F9","Uscr;":"\u{1D4B0}","uscr;":"\u{1D4CA}","utdot;":"\u22F0","Utilde;":"\u0168","utilde;":"\u0169","utri;":"\u25B5","utrif;":"\u25B4","uuarr;":"\u21C8","Uuml;":"\xDC",Uuml:"\xDC","uuml;":"\xFC",uuml:"\xFC","uwangle;":"\u29A7","vangrt;":"\u299C","varepsilon;":"\u03F5","varkappa;":"\u03F0","varnothing;":"\u2205","varphi;":"\u03D5","varpi;":"\u03D6","varpropto;":"\u221D","vArr;":"\u21D5","varr;":"\u2195","varrho;":"\u03F1","varsigma;":"\u03C2","varsubsetneq;":"\u228A\uFE00","varsubsetneqq;":"\u2ACB\uFE00","varsupsetneq;":"\u228B\uFE00","varsupsetneqq;":"\u2ACC\uFE00","vartheta;":"\u03D1","vartriangleleft;":"\u22B2","vartriangleright;":"\u22B3","Vbar;":"\u2AEB","vBar;":"\u2AE8","vBarv;":"\u2AE9","Vcy;":"\u0412","vcy;":"\u0432","VDash;":"\u22AB","Vdash;":"\u22A9","vDash;":"\u22A8","vdash;":"\u22A2","Vdashl;":"\u2AE6","Vee;":"\u22C1","vee;":"\u2228","veebar;":"\u22BB","veeeq;":"\u225A","vellip;":"\u22EE","Verbar;":"\u2016","verbar;":"|","Vert;":"\u2016","vert;":"|","VerticalBar;":"\u2223","VerticalLine;":"|","VerticalSeparator;":"\u2758","VerticalTilde;":"\u2240","VeryThinSpace;":"\u200A","Vfr;":"\u{1D519}","vfr;":"\u{1D533}","vltri;":"\u22B2","vnsub;":"\u2282\u20D2","vnsup;":"\u2283\u20D2","Vopf;":"\u{1D54D}","vopf;":"\u{1D567}","vprop;":"\u221D","vrtri;":"\u22B3","Vscr;":"\u{1D4B1}","vscr;":"\u{1D4CB}","vsubnE;":"\u2ACB\uFE00","vsubne;":"\u228A\uFE00","vsupnE;":"\u2ACC\uFE00","vsupne;":"\u228B\uFE00","Vvdash;":"\u22AA","vzigzag;":"\u299A","Wcirc;":"\u0174","wcirc;":"\u0175","wedbar;":"\u2A5F","Wedge;":"\u22C0","wedge;":"\u2227","wedgeq;":"\u2259","weierp;":"\u2118","Wfr;":"\u{1D51A}","wfr;":"\u{1D534}","Wopf;":"\u{1D54E}","wopf;":"\u{1D568}","wp;":"\u2118","wr;":"\u2240","wreath;":"\u2240","Wscr;":"\u{1D4B2}","wscr;":"\u{1D4CC}","xcap;":"\u22C2","xcirc;":"\u25EF","xcup;":"\u22C3","xdtri;":"\u25BD","Xfr;":"\u{1D51B}","xfr;":"\u{1D535}","xhArr;":"\u27FA","xharr;":"\u27F7","Xi;":"\u039E","xi;":"\u03BE","xlArr;":"\u27F8","xlarr;":"\u27F5","xmap;":"\u27FC","xnis;":"\u22FB","xodot;":"\u2A00","Xopf;":"\u{1D54F}","xopf;":"\u{1D569}","xoplus;":"\u2A01","xotime;":"\u2A02","xrArr;":"\u27F9","xrarr;":"\u27F6","Xscr;":"\u{1D4B3}","xscr;":"\u{1D4CD}","xsqcup;":"\u2A06","xuplus;":"\u2A04","xutri;":"\u25B3","xvee;":"\u22C1","xwedge;":"\u22C0","Yacute;":"\xDD",Yacute:"\xDD","yacute;":"\xFD",yacute:"\xFD","YAcy;":"\u042F","yacy;":"\u044F","Ycirc;":"\u0176","ycirc;":"\u0177","Ycy;":"\u042B","ycy;":"\u044B","yen;":"\xA5",yen:"\xA5","Yfr;":"\u{1D51C}","yfr;":"\u{1D536}","YIcy;":"\u0407","yicy;":"\u0457","Yopf;":"\u{1D550}","yopf;":"\u{1D56A}","Yscr;":"\u{1D4B4}","yscr;":"\u{1D4CE}","YUcy;":"\u042E","yucy;":"\u044E","Yuml;":"\u0178","yuml;":"\xFF",yuml:"\xFF","Zacute;":"\u0179","zacute;":"\u017A","Zcaron;":"\u017D","zcaron;":"\u017E","Zcy;":"\u0417","zcy;":"\u0437","Zdot;":"\u017B","zdot;":"\u017C","zeetrf;":"\u2128","ZeroWidthSpace;":"\u200B","Zeta;":"\u0396","zeta;":"\u03B6","Zfr;":"\u2128","zfr;":"\u{1D537}","ZHcy;":"\u0416","zhcy;":"\u0436","zigrarr;":"\u21DD","Zopf;":"\u2124","zopf;":"\u{1D56B}","Zscr;":"\u{1D4B5}","zscr;":"\u{1D4CF}","zwj;":"\u200D","zwnj;":"\u200C"}});var P7=v((zK,U7)=>{var kp=require("punycode"),w7=D7();U7.exports=MN;function MN(i){if(typeof i!="string")throw new TypeError("Expected a String");return i.replace(/&(#?[^;\W]+;?)/g,function(e,u){var r;if(r=/^#(\d+);?$/.exec(u))return kp.ucs2.encode([parseInt(r[1],10)]);if(r=/^#[Xx]([A-Fa-f0-9]+);?/.exec(u))return kp.ucs2.encode([parseInt(r[1],16)]);var a=/;$/.test(u),s=a?u.replace(/;$/,""):u,n=w7[s]||a&&w7[u];return typeof n=="number"?kp.ucs2.encode([n]):typeof n=="string"?n:"&"+u})}c(MN,"decode")});var k7=v(Fp=>{Fp.encode=v7();Fp.decode=P7()});var V7=v((uW,H7)=>{"use strict";var fe={};H7.exports=fe;function F7(i){return i<0?-1:1}c(F7,"sign");function TN(i){return i%1===.5&&!(i&1)?Math.floor(i):Math.round(i)}c(TN,"evenRound");function ar(i,e){e.unsigned||--i;let u=e.unsigned?0:-Math.pow(2,i),r=Math.pow(2,i)-1,a=e.moduloBitLength?Math.pow(2,e.moduloBitLength):Math.pow(2,i),s=e.moduloBitLength?Math.pow(2,e.moduloBitLength-1):Math.pow(2,i-1);return function(n,l){l||(l={});let d=+n;if(l.enforceRange){if(!Number.isFinite(d))throw new TypeError("Argument is not a finite number");if(d=F7(d)*Math.floor(Math.abs(d)),dr)throw new TypeError("Argument is not in byte range");return d}if(!isNaN(d)&&l.clamp)return d=TN(d),dr&&(d=r),d;if(!Number.isFinite(d)||d===0)return 0;if(d=F7(d)*Math.floor(Math.abs(d)),d=d%a,!e.unsigned&&d>=s)return d-a;if(e.unsigned){if(d<0)d+=a;else if(d===-0)return 0}return d}}c(ar,"createNumberConversion");fe.void=function(){};fe.boolean=function(i){return!!i};fe.byte=ar(8,{unsigned:!1});fe.octet=ar(8,{unsigned:!0});fe.short=ar(16,{unsigned:!1});fe["unsigned short"]=ar(16,{unsigned:!0});fe.long=ar(32,{unsigned:!1});fe["unsigned long"]=ar(32,{unsigned:!0});fe["long long"]=ar(32,{unsigned:!1,moduloBitLength:64});fe["unsigned long long"]=ar(32,{unsigned:!0,moduloBitLength:64});fe.double=function(i){let e=+i;if(!Number.isFinite(e))throw new TypeError("Argument is not a finite floating-point value");return e};fe["unrestricted double"]=function(i){let e=+i;if(isNaN(e))throw new TypeError("Argument is NaN");return e};fe.float=fe.double;fe["unrestricted float"]=fe["unrestricted double"];fe.DOMString=function(i,e){return e||(e={}),e.treatNullAsEmptyString&&i===null?"":String(i)};fe.ByteString=function(i,e){let u=String(i),r;for(let a=0;(r=u.codePointAt(a))!==void 0;++a)if(r>255)throw new TypeError("Argument is not a valid bytestring");return u};fe.USVString=function(i){let e=String(i),u=e.length,r=[];for(let a=0;a57343)r.push(String.fromCodePoint(s));else if(56320<=s&&s<=57343)r.push(String.fromCodePoint(65533));else if(a===u-1)r.push(String.fromCodePoint(65533));else{let n=e.charCodeAt(a+1);if(56320<=n&&n<=57343){let l=s&1023,d=n&1023;r.push(String.fromCodePoint(65536+1024*l+d)),++a}else r.push(String.fromCodePoint(65533))}}return r.join("")};fe.Date=function(i,e){if(!(i instanceof Date))throw new TypeError("Argument is not a Date object");if(!isNaN(i))return i};fe.RegExp=function(i,e){return i instanceof RegExp||(i=new RegExp(i)),i}});var G7=v((rW,sr)=>{"use strict";sr.exports.mixin=c(function(e,u){let r=Object.getOwnPropertyNames(u);for(let a=0;a{_N.exports=[[[0,44],"disallowed_STD3_valid"],[[45,46],"valid"],[[47,47],"disallowed_STD3_valid"],[[48,57],"valid"],[[58,64],"disallowed_STD3_valid"],[[65,65],"mapped",[97]],[[66,66],"mapped",[98]],[[67,67],"mapped",[99]],[[68,68],"mapped",[100]],[[69,69],"mapped",[101]],[[70,70],"mapped",[102]],[[71,71],"mapped",[103]],[[72,72],"mapped",[104]],[[73,73],"mapped",[105]],[[74,74],"mapped",[106]],[[75,75],"mapped",[107]],[[76,76],"mapped",[108]],[[77,77],"mapped",[109]],[[78,78],"mapped",[110]],[[79,79],"mapped",[111]],[[80,80],"mapped",[112]],[[81,81],"mapped",[113]],[[82,82],"mapped",[114]],[[83,83],"mapped",[115]],[[84,84],"mapped",[116]],[[85,85],"mapped",[117]],[[86,86],"mapped",[118]],[[87,87],"mapped",[119]],[[88,88],"mapped",[120]],[[89,89],"mapped",[121]],[[90,90],"mapped",[122]],[[91,96],"disallowed_STD3_valid"],[[97,122],"valid"],[[123,127],"disallowed_STD3_valid"],[[128,159],"disallowed"],[[160,160],"disallowed_STD3_mapped",[32]],[[161,167],"valid",[],"NV8"],[[168,168],"disallowed_STD3_mapped",[32,776]],[[169,169],"valid",[],"NV8"],[[170,170],"mapped",[97]],[[171,172],"valid",[],"NV8"],[[173,173],"ignored"],[[174,174],"valid",[],"NV8"],[[175,175],"disallowed_STD3_mapped",[32,772]],[[176,177],"valid",[],"NV8"],[[178,178],"mapped",[50]],[[179,179],"mapped",[51]],[[180,180],"disallowed_STD3_mapped",[32,769]],[[181,181],"mapped",[956]],[[182,182],"valid",[],"NV8"],[[183,183],"valid"],[[184,184],"disallowed_STD3_mapped",[32,807]],[[185,185],"mapped",[49]],[[186,186],"mapped",[111]],[[187,187],"valid",[],"NV8"],[[188,188],"mapped",[49,8260,52]],[[189,189],"mapped",[49,8260,50]],[[190,190],"mapped",[51,8260,52]],[[191,191],"valid",[],"NV8"],[[192,192],"mapped",[224]],[[193,193],"mapped",[225]],[[194,194],"mapped",[226]],[[195,195],"mapped",[227]],[[196,196],"mapped",[228]],[[197,197],"mapped",[229]],[[198,198],"mapped",[230]],[[199,199],"mapped",[231]],[[200,200],"mapped",[232]],[[201,201],"mapped",[233]],[[202,202],"mapped",[234]],[[203,203],"mapped",[235]],[[204,204],"mapped",[236]],[[205,205],"mapped",[237]],[[206,206],"mapped",[238]],[[207,207],"mapped",[239]],[[208,208],"mapped",[240]],[[209,209],"mapped",[241]],[[210,210],"mapped",[242]],[[211,211],"mapped",[243]],[[212,212],"mapped",[244]],[[213,213],"mapped",[245]],[[214,214],"mapped",[246]],[[215,215],"valid",[],"NV8"],[[216,216],"mapped",[248]],[[217,217],"mapped",[249]],[[218,218],"mapped",[250]],[[219,219],"mapped",[251]],[[220,220],"mapped",[252]],[[221,221],"mapped",[253]],[[222,222],"mapped",[254]],[[223,223],"deviation",[115,115]],[[224,246],"valid"],[[247,247],"valid",[],"NV8"],[[248,255],"valid"],[[256,256],"mapped",[257]],[[257,257],"valid"],[[258,258],"mapped",[259]],[[259,259],"valid"],[[260,260],"mapped",[261]],[[261,261],"valid"],[[262,262],"mapped",[263]],[[263,263],"valid"],[[264,264],"mapped",[265]],[[265,265],"valid"],[[266,266],"mapped",[267]],[[267,267],"valid"],[[268,268],"mapped",[269]],[[269,269],"valid"],[[270,270],"mapped",[271]],[[271,271],"valid"],[[272,272],"mapped",[273]],[[273,273],"valid"],[[274,274],"mapped",[275]],[[275,275],"valid"],[[276,276],"mapped",[277]],[[277,277],"valid"],[[278,278],"mapped",[279]],[[279,279],"valid"],[[280,280],"mapped",[281]],[[281,281],"valid"],[[282,282],"mapped",[283]],[[283,283],"valid"],[[284,284],"mapped",[285]],[[285,285],"valid"],[[286,286],"mapped",[287]],[[287,287],"valid"],[[288,288],"mapped",[289]],[[289,289],"valid"],[[290,290],"mapped",[291]],[[291,291],"valid"],[[292,292],"mapped",[293]],[[293,293],"valid"],[[294,294],"mapped",[295]],[[295,295],"valid"],[[296,296],"mapped",[297]],[[297,297],"valid"],[[298,298],"mapped",[299]],[[299,299],"valid"],[[300,300],"mapped",[301]],[[301,301],"valid"],[[302,302],"mapped",[303]],[[303,303],"valid"],[[304,304],"mapped",[105,775]],[[305,305],"valid"],[[306,307],"mapped",[105,106]],[[308,308],"mapped",[309]],[[309,309],"valid"],[[310,310],"mapped",[311]],[[311,312],"valid"],[[313,313],"mapped",[314]],[[314,314],"valid"],[[315,315],"mapped",[316]],[[316,316],"valid"],[[317,317],"mapped",[318]],[[318,318],"valid"],[[319,320],"mapped",[108,183]],[[321,321],"mapped",[322]],[[322,322],"valid"],[[323,323],"mapped",[324]],[[324,324],"valid"],[[325,325],"mapped",[326]],[[326,326],"valid"],[[327,327],"mapped",[328]],[[328,328],"valid"],[[329,329],"mapped",[700,110]],[[330,330],"mapped",[331]],[[331,331],"valid"],[[332,332],"mapped",[333]],[[333,333],"valid"],[[334,334],"mapped",[335]],[[335,335],"valid"],[[336,336],"mapped",[337]],[[337,337],"valid"],[[338,338],"mapped",[339]],[[339,339],"valid"],[[340,340],"mapped",[341]],[[341,341],"valid"],[[342,342],"mapped",[343]],[[343,343],"valid"],[[344,344],"mapped",[345]],[[345,345],"valid"],[[346,346],"mapped",[347]],[[347,347],"valid"],[[348,348],"mapped",[349]],[[349,349],"valid"],[[350,350],"mapped",[351]],[[351,351],"valid"],[[352,352],"mapped",[353]],[[353,353],"valid"],[[354,354],"mapped",[355]],[[355,355],"valid"],[[356,356],"mapped",[357]],[[357,357],"valid"],[[358,358],"mapped",[359]],[[359,359],"valid"],[[360,360],"mapped",[361]],[[361,361],"valid"],[[362,362],"mapped",[363]],[[363,363],"valid"],[[364,364],"mapped",[365]],[[365,365],"valid"],[[366,366],"mapped",[367]],[[367,367],"valid"],[[368,368],"mapped",[369]],[[369,369],"valid"],[[370,370],"mapped",[371]],[[371,371],"valid"],[[372,372],"mapped",[373]],[[373,373],"valid"],[[374,374],"mapped",[375]],[[375,375],"valid"],[[376,376],"mapped",[255]],[[377,377],"mapped",[378]],[[378,378],"valid"],[[379,379],"mapped",[380]],[[380,380],"valid"],[[381,381],"mapped",[382]],[[382,382],"valid"],[[383,383],"mapped",[115]],[[384,384],"valid"],[[385,385],"mapped",[595]],[[386,386],"mapped",[387]],[[387,387],"valid"],[[388,388],"mapped",[389]],[[389,389],"valid"],[[390,390],"mapped",[596]],[[391,391],"mapped",[392]],[[392,392],"valid"],[[393,393],"mapped",[598]],[[394,394],"mapped",[599]],[[395,395],"mapped",[396]],[[396,397],"valid"],[[398,398],"mapped",[477]],[[399,399],"mapped",[601]],[[400,400],"mapped",[603]],[[401,401],"mapped",[402]],[[402,402],"valid"],[[403,403],"mapped",[608]],[[404,404],"mapped",[611]],[[405,405],"valid"],[[406,406],"mapped",[617]],[[407,407],"mapped",[616]],[[408,408],"mapped",[409]],[[409,411],"valid"],[[412,412],"mapped",[623]],[[413,413],"mapped",[626]],[[414,414],"valid"],[[415,415],"mapped",[629]],[[416,416],"mapped",[417]],[[417,417],"valid"],[[418,418],"mapped",[419]],[[419,419],"valid"],[[420,420],"mapped",[421]],[[421,421],"valid"],[[422,422],"mapped",[640]],[[423,423],"mapped",[424]],[[424,424],"valid"],[[425,425],"mapped",[643]],[[426,427],"valid"],[[428,428],"mapped",[429]],[[429,429],"valid"],[[430,430],"mapped",[648]],[[431,431],"mapped",[432]],[[432,432],"valid"],[[433,433],"mapped",[650]],[[434,434],"mapped",[651]],[[435,435],"mapped",[436]],[[436,436],"valid"],[[437,437],"mapped",[438]],[[438,438],"valid"],[[439,439],"mapped",[658]],[[440,440],"mapped",[441]],[[441,443],"valid"],[[444,444],"mapped",[445]],[[445,451],"valid"],[[452,454],"mapped",[100,382]],[[455,457],"mapped",[108,106]],[[458,460],"mapped",[110,106]],[[461,461],"mapped",[462]],[[462,462],"valid"],[[463,463],"mapped",[464]],[[464,464],"valid"],[[465,465],"mapped",[466]],[[466,466],"valid"],[[467,467],"mapped",[468]],[[468,468],"valid"],[[469,469],"mapped",[470]],[[470,470],"valid"],[[471,471],"mapped",[472]],[[472,472],"valid"],[[473,473],"mapped",[474]],[[474,474],"valid"],[[475,475],"mapped",[476]],[[476,477],"valid"],[[478,478],"mapped",[479]],[[479,479],"valid"],[[480,480],"mapped",[481]],[[481,481],"valid"],[[482,482],"mapped",[483]],[[483,483],"valid"],[[484,484],"mapped",[485]],[[485,485],"valid"],[[486,486],"mapped",[487]],[[487,487],"valid"],[[488,488],"mapped",[489]],[[489,489],"valid"],[[490,490],"mapped",[491]],[[491,491],"valid"],[[492,492],"mapped",[493]],[[493,493],"valid"],[[494,494],"mapped",[495]],[[495,496],"valid"],[[497,499],"mapped",[100,122]],[[500,500],"mapped",[501]],[[501,501],"valid"],[[502,502],"mapped",[405]],[[503,503],"mapped",[447]],[[504,504],"mapped",[505]],[[505,505],"valid"],[[506,506],"mapped",[507]],[[507,507],"valid"],[[508,508],"mapped",[509]],[[509,509],"valid"],[[510,510],"mapped",[511]],[[511,511],"valid"],[[512,512],"mapped",[513]],[[513,513],"valid"],[[514,514],"mapped",[515]],[[515,515],"valid"],[[516,516],"mapped",[517]],[[517,517],"valid"],[[518,518],"mapped",[519]],[[519,519],"valid"],[[520,520],"mapped",[521]],[[521,521],"valid"],[[522,522],"mapped",[523]],[[523,523],"valid"],[[524,524],"mapped",[525]],[[525,525],"valid"],[[526,526],"mapped",[527]],[[527,527],"valid"],[[528,528],"mapped",[529]],[[529,529],"valid"],[[530,530],"mapped",[531]],[[531,531],"valid"],[[532,532],"mapped",[533]],[[533,533],"valid"],[[534,534],"mapped",[535]],[[535,535],"valid"],[[536,536],"mapped",[537]],[[537,537],"valid"],[[538,538],"mapped",[539]],[[539,539],"valid"],[[540,540],"mapped",[541]],[[541,541],"valid"],[[542,542],"mapped",[543]],[[543,543],"valid"],[[544,544],"mapped",[414]],[[545,545],"valid"],[[546,546],"mapped",[547]],[[547,547],"valid"],[[548,548],"mapped",[549]],[[549,549],"valid"],[[550,550],"mapped",[551]],[[551,551],"valid"],[[552,552],"mapped",[553]],[[553,553],"valid"],[[554,554],"mapped",[555]],[[555,555],"valid"],[[556,556],"mapped",[557]],[[557,557],"valid"],[[558,558],"mapped",[559]],[[559,559],"valid"],[[560,560],"mapped",[561]],[[561,561],"valid"],[[562,562],"mapped",[563]],[[563,563],"valid"],[[564,566],"valid"],[[567,569],"valid"],[[570,570],"mapped",[11365]],[[571,571],"mapped",[572]],[[572,572],"valid"],[[573,573],"mapped",[410]],[[574,574],"mapped",[11366]],[[575,576],"valid"],[[577,577],"mapped",[578]],[[578,578],"valid"],[[579,579],"mapped",[384]],[[580,580],"mapped",[649]],[[581,581],"mapped",[652]],[[582,582],"mapped",[583]],[[583,583],"valid"],[[584,584],"mapped",[585]],[[585,585],"valid"],[[586,586],"mapped",[587]],[[587,587],"valid"],[[588,588],"mapped",[589]],[[589,589],"valid"],[[590,590],"mapped",[591]],[[591,591],"valid"],[[592,680],"valid"],[[681,685],"valid"],[[686,687],"valid"],[[688,688],"mapped",[104]],[[689,689],"mapped",[614]],[[690,690],"mapped",[106]],[[691,691],"mapped",[114]],[[692,692],"mapped",[633]],[[693,693],"mapped",[635]],[[694,694],"mapped",[641]],[[695,695],"mapped",[119]],[[696,696],"mapped",[121]],[[697,705],"valid"],[[706,709],"valid",[],"NV8"],[[710,721],"valid"],[[722,727],"valid",[],"NV8"],[[728,728],"disallowed_STD3_mapped",[32,774]],[[729,729],"disallowed_STD3_mapped",[32,775]],[[730,730],"disallowed_STD3_mapped",[32,778]],[[731,731],"disallowed_STD3_mapped",[32,808]],[[732,732],"disallowed_STD3_mapped",[32,771]],[[733,733],"disallowed_STD3_mapped",[32,779]],[[734,734],"valid",[],"NV8"],[[735,735],"valid",[],"NV8"],[[736,736],"mapped",[611]],[[737,737],"mapped",[108]],[[738,738],"mapped",[115]],[[739,739],"mapped",[120]],[[740,740],"mapped",[661]],[[741,745],"valid",[],"NV8"],[[746,747],"valid",[],"NV8"],[[748,748],"valid"],[[749,749],"valid",[],"NV8"],[[750,750],"valid"],[[751,767],"valid",[],"NV8"],[[768,831],"valid"],[[832,832],"mapped",[768]],[[833,833],"mapped",[769]],[[834,834],"valid"],[[835,835],"mapped",[787]],[[836,836],"mapped",[776,769]],[[837,837],"mapped",[953]],[[838,846],"valid"],[[847,847],"ignored"],[[848,855],"valid"],[[856,860],"valid"],[[861,863],"valid"],[[864,865],"valid"],[[866,866],"valid"],[[867,879],"valid"],[[880,880],"mapped",[881]],[[881,881],"valid"],[[882,882],"mapped",[883]],[[883,883],"valid"],[[884,884],"mapped",[697]],[[885,885],"valid"],[[886,886],"mapped",[887]],[[887,887],"valid"],[[888,889],"disallowed"],[[890,890],"disallowed_STD3_mapped",[32,953]],[[891,893],"valid"],[[894,894],"disallowed_STD3_mapped",[59]],[[895,895],"mapped",[1011]],[[896,899],"disallowed"],[[900,900],"disallowed_STD3_mapped",[32,769]],[[901,901],"disallowed_STD3_mapped",[32,776,769]],[[902,902],"mapped",[940]],[[903,903],"mapped",[183]],[[904,904],"mapped",[941]],[[905,905],"mapped",[942]],[[906,906],"mapped",[943]],[[907,907],"disallowed"],[[908,908],"mapped",[972]],[[909,909],"disallowed"],[[910,910],"mapped",[973]],[[911,911],"mapped",[974]],[[912,912],"valid"],[[913,913],"mapped",[945]],[[914,914],"mapped",[946]],[[915,915],"mapped",[947]],[[916,916],"mapped",[948]],[[917,917],"mapped",[949]],[[918,918],"mapped",[950]],[[919,919],"mapped",[951]],[[920,920],"mapped",[952]],[[921,921],"mapped",[953]],[[922,922],"mapped",[954]],[[923,923],"mapped",[955]],[[924,924],"mapped",[956]],[[925,925],"mapped",[957]],[[926,926],"mapped",[958]],[[927,927],"mapped",[959]],[[928,928],"mapped",[960]],[[929,929],"mapped",[961]],[[930,930],"disallowed"],[[931,931],"mapped",[963]],[[932,932],"mapped",[964]],[[933,933],"mapped",[965]],[[934,934],"mapped",[966]],[[935,935],"mapped",[967]],[[936,936],"mapped",[968]],[[937,937],"mapped",[969]],[[938,938],"mapped",[970]],[[939,939],"mapped",[971]],[[940,961],"valid"],[[962,962],"deviation",[963]],[[963,974],"valid"],[[975,975],"mapped",[983]],[[976,976],"mapped",[946]],[[977,977],"mapped",[952]],[[978,978],"mapped",[965]],[[979,979],"mapped",[973]],[[980,980],"mapped",[971]],[[981,981],"mapped",[966]],[[982,982],"mapped",[960]],[[983,983],"valid"],[[984,984],"mapped",[985]],[[985,985],"valid"],[[986,986],"mapped",[987]],[[987,987],"valid"],[[988,988],"mapped",[989]],[[989,989],"valid"],[[990,990],"mapped",[991]],[[991,991],"valid"],[[992,992],"mapped",[993]],[[993,993],"valid"],[[994,994],"mapped",[995]],[[995,995],"valid"],[[996,996],"mapped",[997]],[[997,997],"valid"],[[998,998],"mapped",[999]],[[999,999],"valid"],[[1e3,1e3],"mapped",[1001]],[[1001,1001],"valid"],[[1002,1002],"mapped",[1003]],[[1003,1003],"valid"],[[1004,1004],"mapped",[1005]],[[1005,1005],"valid"],[[1006,1006],"mapped",[1007]],[[1007,1007],"valid"],[[1008,1008],"mapped",[954]],[[1009,1009],"mapped",[961]],[[1010,1010],"mapped",[963]],[[1011,1011],"valid"],[[1012,1012],"mapped",[952]],[[1013,1013],"mapped",[949]],[[1014,1014],"valid",[],"NV8"],[[1015,1015],"mapped",[1016]],[[1016,1016],"valid"],[[1017,1017],"mapped",[963]],[[1018,1018],"mapped",[1019]],[[1019,1019],"valid"],[[1020,1020],"valid"],[[1021,1021],"mapped",[891]],[[1022,1022],"mapped",[892]],[[1023,1023],"mapped",[893]],[[1024,1024],"mapped",[1104]],[[1025,1025],"mapped",[1105]],[[1026,1026],"mapped",[1106]],[[1027,1027],"mapped",[1107]],[[1028,1028],"mapped",[1108]],[[1029,1029],"mapped",[1109]],[[1030,1030],"mapped",[1110]],[[1031,1031],"mapped",[1111]],[[1032,1032],"mapped",[1112]],[[1033,1033],"mapped",[1113]],[[1034,1034],"mapped",[1114]],[[1035,1035],"mapped",[1115]],[[1036,1036],"mapped",[1116]],[[1037,1037],"mapped",[1117]],[[1038,1038],"mapped",[1118]],[[1039,1039],"mapped",[1119]],[[1040,1040],"mapped",[1072]],[[1041,1041],"mapped",[1073]],[[1042,1042],"mapped",[1074]],[[1043,1043],"mapped",[1075]],[[1044,1044],"mapped",[1076]],[[1045,1045],"mapped",[1077]],[[1046,1046],"mapped",[1078]],[[1047,1047],"mapped",[1079]],[[1048,1048],"mapped",[1080]],[[1049,1049],"mapped",[1081]],[[1050,1050],"mapped",[1082]],[[1051,1051],"mapped",[1083]],[[1052,1052],"mapped",[1084]],[[1053,1053],"mapped",[1085]],[[1054,1054],"mapped",[1086]],[[1055,1055],"mapped",[1087]],[[1056,1056],"mapped",[1088]],[[1057,1057],"mapped",[1089]],[[1058,1058],"mapped",[1090]],[[1059,1059],"mapped",[1091]],[[1060,1060],"mapped",[1092]],[[1061,1061],"mapped",[1093]],[[1062,1062],"mapped",[1094]],[[1063,1063],"mapped",[1095]],[[1064,1064],"mapped",[1096]],[[1065,1065],"mapped",[1097]],[[1066,1066],"mapped",[1098]],[[1067,1067],"mapped",[1099]],[[1068,1068],"mapped",[1100]],[[1069,1069],"mapped",[1101]],[[1070,1070],"mapped",[1102]],[[1071,1071],"mapped",[1103]],[[1072,1103],"valid"],[[1104,1104],"valid"],[[1105,1116],"valid"],[[1117,1117],"valid"],[[1118,1119],"valid"],[[1120,1120],"mapped",[1121]],[[1121,1121],"valid"],[[1122,1122],"mapped",[1123]],[[1123,1123],"valid"],[[1124,1124],"mapped",[1125]],[[1125,1125],"valid"],[[1126,1126],"mapped",[1127]],[[1127,1127],"valid"],[[1128,1128],"mapped",[1129]],[[1129,1129],"valid"],[[1130,1130],"mapped",[1131]],[[1131,1131],"valid"],[[1132,1132],"mapped",[1133]],[[1133,1133],"valid"],[[1134,1134],"mapped",[1135]],[[1135,1135],"valid"],[[1136,1136],"mapped",[1137]],[[1137,1137],"valid"],[[1138,1138],"mapped",[1139]],[[1139,1139],"valid"],[[1140,1140],"mapped",[1141]],[[1141,1141],"valid"],[[1142,1142],"mapped",[1143]],[[1143,1143],"valid"],[[1144,1144],"mapped",[1145]],[[1145,1145],"valid"],[[1146,1146],"mapped",[1147]],[[1147,1147],"valid"],[[1148,1148],"mapped",[1149]],[[1149,1149],"valid"],[[1150,1150],"mapped",[1151]],[[1151,1151],"valid"],[[1152,1152],"mapped",[1153]],[[1153,1153],"valid"],[[1154,1154],"valid",[],"NV8"],[[1155,1158],"valid"],[[1159,1159],"valid"],[[1160,1161],"valid",[],"NV8"],[[1162,1162],"mapped",[1163]],[[1163,1163],"valid"],[[1164,1164],"mapped",[1165]],[[1165,1165],"valid"],[[1166,1166],"mapped",[1167]],[[1167,1167],"valid"],[[1168,1168],"mapped",[1169]],[[1169,1169],"valid"],[[1170,1170],"mapped",[1171]],[[1171,1171],"valid"],[[1172,1172],"mapped",[1173]],[[1173,1173],"valid"],[[1174,1174],"mapped",[1175]],[[1175,1175],"valid"],[[1176,1176],"mapped",[1177]],[[1177,1177],"valid"],[[1178,1178],"mapped",[1179]],[[1179,1179],"valid"],[[1180,1180],"mapped",[1181]],[[1181,1181],"valid"],[[1182,1182],"mapped",[1183]],[[1183,1183],"valid"],[[1184,1184],"mapped",[1185]],[[1185,1185],"valid"],[[1186,1186],"mapped",[1187]],[[1187,1187],"valid"],[[1188,1188],"mapped",[1189]],[[1189,1189],"valid"],[[1190,1190],"mapped",[1191]],[[1191,1191],"valid"],[[1192,1192],"mapped",[1193]],[[1193,1193],"valid"],[[1194,1194],"mapped",[1195]],[[1195,1195],"valid"],[[1196,1196],"mapped",[1197]],[[1197,1197],"valid"],[[1198,1198],"mapped",[1199]],[[1199,1199],"valid"],[[1200,1200],"mapped",[1201]],[[1201,1201],"valid"],[[1202,1202],"mapped",[1203]],[[1203,1203],"valid"],[[1204,1204],"mapped",[1205]],[[1205,1205],"valid"],[[1206,1206],"mapped",[1207]],[[1207,1207],"valid"],[[1208,1208],"mapped",[1209]],[[1209,1209],"valid"],[[1210,1210],"mapped",[1211]],[[1211,1211],"valid"],[[1212,1212],"mapped",[1213]],[[1213,1213],"valid"],[[1214,1214],"mapped",[1215]],[[1215,1215],"valid"],[[1216,1216],"disallowed"],[[1217,1217],"mapped",[1218]],[[1218,1218],"valid"],[[1219,1219],"mapped",[1220]],[[1220,1220],"valid"],[[1221,1221],"mapped",[1222]],[[1222,1222],"valid"],[[1223,1223],"mapped",[1224]],[[1224,1224],"valid"],[[1225,1225],"mapped",[1226]],[[1226,1226],"valid"],[[1227,1227],"mapped",[1228]],[[1228,1228],"valid"],[[1229,1229],"mapped",[1230]],[[1230,1230],"valid"],[[1231,1231],"valid"],[[1232,1232],"mapped",[1233]],[[1233,1233],"valid"],[[1234,1234],"mapped",[1235]],[[1235,1235],"valid"],[[1236,1236],"mapped",[1237]],[[1237,1237],"valid"],[[1238,1238],"mapped",[1239]],[[1239,1239],"valid"],[[1240,1240],"mapped",[1241]],[[1241,1241],"valid"],[[1242,1242],"mapped",[1243]],[[1243,1243],"valid"],[[1244,1244],"mapped",[1245]],[[1245,1245],"valid"],[[1246,1246],"mapped",[1247]],[[1247,1247],"valid"],[[1248,1248],"mapped",[1249]],[[1249,1249],"valid"],[[1250,1250],"mapped",[1251]],[[1251,1251],"valid"],[[1252,1252],"mapped",[1253]],[[1253,1253],"valid"],[[1254,1254],"mapped",[1255]],[[1255,1255],"valid"],[[1256,1256],"mapped",[1257]],[[1257,1257],"valid"],[[1258,1258],"mapped",[1259]],[[1259,1259],"valid"],[[1260,1260],"mapped",[1261]],[[1261,1261],"valid"],[[1262,1262],"mapped",[1263]],[[1263,1263],"valid"],[[1264,1264],"mapped",[1265]],[[1265,1265],"valid"],[[1266,1266],"mapped",[1267]],[[1267,1267],"valid"],[[1268,1268],"mapped",[1269]],[[1269,1269],"valid"],[[1270,1270],"mapped",[1271]],[[1271,1271],"valid"],[[1272,1272],"mapped",[1273]],[[1273,1273],"valid"],[[1274,1274],"mapped",[1275]],[[1275,1275],"valid"],[[1276,1276],"mapped",[1277]],[[1277,1277],"valid"],[[1278,1278],"mapped",[1279]],[[1279,1279],"valid"],[[1280,1280],"mapped",[1281]],[[1281,1281],"valid"],[[1282,1282],"mapped",[1283]],[[1283,1283],"valid"],[[1284,1284],"mapped",[1285]],[[1285,1285],"valid"],[[1286,1286],"mapped",[1287]],[[1287,1287],"valid"],[[1288,1288],"mapped",[1289]],[[1289,1289],"valid"],[[1290,1290],"mapped",[1291]],[[1291,1291],"valid"],[[1292,1292],"mapped",[1293]],[[1293,1293],"valid"],[[1294,1294],"mapped",[1295]],[[1295,1295],"valid"],[[1296,1296],"mapped",[1297]],[[1297,1297],"valid"],[[1298,1298],"mapped",[1299]],[[1299,1299],"valid"],[[1300,1300],"mapped",[1301]],[[1301,1301],"valid"],[[1302,1302],"mapped",[1303]],[[1303,1303],"valid"],[[1304,1304],"mapped",[1305]],[[1305,1305],"valid"],[[1306,1306],"mapped",[1307]],[[1307,1307],"valid"],[[1308,1308],"mapped",[1309]],[[1309,1309],"valid"],[[1310,1310],"mapped",[1311]],[[1311,1311],"valid"],[[1312,1312],"mapped",[1313]],[[1313,1313],"valid"],[[1314,1314],"mapped",[1315]],[[1315,1315],"valid"],[[1316,1316],"mapped",[1317]],[[1317,1317],"valid"],[[1318,1318],"mapped",[1319]],[[1319,1319],"valid"],[[1320,1320],"mapped",[1321]],[[1321,1321],"valid"],[[1322,1322],"mapped",[1323]],[[1323,1323],"valid"],[[1324,1324],"mapped",[1325]],[[1325,1325],"valid"],[[1326,1326],"mapped",[1327]],[[1327,1327],"valid"],[[1328,1328],"disallowed"],[[1329,1329],"mapped",[1377]],[[1330,1330],"mapped",[1378]],[[1331,1331],"mapped",[1379]],[[1332,1332],"mapped",[1380]],[[1333,1333],"mapped",[1381]],[[1334,1334],"mapped",[1382]],[[1335,1335],"mapped",[1383]],[[1336,1336],"mapped",[1384]],[[1337,1337],"mapped",[1385]],[[1338,1338],"mapped",[1386]],[[1339,1339],"mapped",[1387]],[[1340,1340],"mapped",[1388]],[[1341,1341],"mapped",[1389]],[[1342,1342],"mapped",[1390]],[[1343,1343],"mapped",[1391]],[[1344,1344],"mapped",[1392]],[[1345,1345],"mapped",[1393]],[[1346,1346],"mapped",[1394]],[[1347,1347],"mapped",[1395]],[[1348,1348],"mapped",[1396]],[[1349,1349],"mapped",[1397]],[[1350,1350],"mapped",[1398]],[[1351,1351],"mapped",[1399]],[[1352,1352],"mapped",[1400]],[[1353,1353],"mapped",[1401]],[[1354,1354],"mapped",[1402]],[[1355,1355],"mapped",[1403]],[[1356,1356],"mapped",[1404]],[[1357,1357],"mapped",[1405]],[[1358,1358],"mapped",[1406]],[[1359,1359],"mapped",[1407]],[[1360,1360],"mapped",[1408]],[[1361,1361],"mapped",[1409]],[[1362,1362],"mapped",[1410]],[[1363,1363],"mapped",[1411]],[[1364,1364],"mapped",[1412]],[[1365,1365],"mapped",[1413]],[[1366,1366],"mapped",[1414]],[[1367,1368],"disallowed"],[[1369,1369],"valid"],[[1370,1375],"valid",[],"NV8"],[[1376,1376],"disallowed"],[[1377,1414],"valid"],[[1415,1415],"mapped",[1381,1410]],[[1416,1416],"disallowed"],[[1417,1417],"valid",[],"NV8"],[[1418,1418],"valid",[],"NV8"],[[1419,1420],"disallowed"],[[1421,1422],"valid",[],"NV8"],[[1423,1423],"valid",[],"NV8"],[[1424,1424],"disallowed"],[[1425,1441],"valid"],[[1442,1442],"valid"],[[1443,1455],"valid"],[[1456,1465],"valid"],[[1466,1466],"valid"],[[1467,1469],"valid"],[[1470,1470],"valid",[],"NV8"],[[1471,1471],"valid"],[[1472,1472],"valid",[],"NV8"],[[1473,1474],"valid"],[[1475,1475],"valid",[],"NV8"],[[1476,1476],"valid"],[[1477,1477],"valid"],[[1478,1478],"valid",[],"NV8"],[[1479,1479],"valid"],[[1480,1487],"disallowed"],[[1488,1514],"valid"],[[1515,1519],"disallowed"],[[1520,1524],"valid"],[[1525,1535],"disallowed"],[[1536,1539],"disallowed"],[[1540,1540],"disallowed"],[[1541,1541],"disallowed"],[[1542,1546],"valid",[],"NV8"],[[1547,1547],"valid",[],"NV8"],[[1548,1548],"valid",[],"NV8"],[[1549,1551],"valid",[],"NV8"],[[1552,1557],"valid"],[[1558,1562],"valid"],[[1563,1563],"valid",[],"NV8"],[[1564,1564],"disallowed"],[[1565,1565],"disallowed"],[[1566,1566],"valid",[],"NV8"],[[1567,1567],"valid",[],"NV8"],[[1568,1568],"valid"],[[1569,1594],"valid"],[[1595,1599],"valid"],[[1600,1600],"valid",[],"NV8"],[[1601,1618],"valid"],[[1619,1621],"valid"],[[1622,1624],"valid"],[[1625,1630],"valid"],[[1631,1631],"valid"],[[1632,1641],"valid"],[[1642,1645],"valid",[],"NV8"],[[1646,1647],"valid"],[[1648,1652],"valid"],[[1653,1653],"mapped",[1575,1652]],[[1654,1654],"mapped",[1608,1652]],[[1655,1655],"mapped",[1735,1652]],[[1656,1656],"mapped",[1610,1652]],[[1657,1719],"valid"],[[1720,1721],"valid"],[[1722,1726],"valid"],[[1727,1727],"valid"],[[1728,1742],"valid"],[[1743,1743],"valid"],[[1744,1747],"valid"],[[1748,1748],"valid",[],"NV8"],[[1749,1756],"valid"],[[1757,1757],"disallowed"],[[1758,1758],"valid",[],"NV8"],[[1759,1768],"valid"],[[1769,1769],"valid",[],"NV8"],[[1770,1773],"valid"],[[1774,1775],"valid"],[[1776,1785],"valid"],[[1786,1790],"valid"],[[1791,1791],"valid"],[[1792,1805],"valid",[],"NV8"],[[1806,1806],"disallowed"],[[1807,1807],"disallowed"],[[1808,1836],"valid"],[[1837,1839],"valid"],[[1840,1866],"valid"],[[1867,1868],"disallowed"],[[1869,1871],"valid"],[[1872,1901],"valid"],[[1902,1919],"valid"],[[1920,1968],"valid"],[[1969,1969],"valid"],[[1970,1983],"disallowed"],[[1984,2037],"valid"],[[2038,2042],"valid",[],"NV8"],[[2043,2047],"disallowed"],[[2048,2093],"valid"],[[2094,2095],"disallowed"],[[2096,2110],"valid",[],"NV8"],[[2111,2111],"disallowed"],[[2112,2139],"valid"],[[2140,2141],"disallowed"],[[2142,2142],"valid",[],"NV8"],[[2143,2207],"disallowed"],[[2208,2208],"valid"],[[2209,2209],"valid"],[[2210,2220],"valid"],[[2221,2226],"valid"],[[2227,2228],"valid"],[[2229,2274],"disallowed"],[[2275,2275],"valid"],[[2276,2302],"valid"],[[2303,2303],"valid"],[[2304,2304],"valid"],[[2305,2307],"valid"],[[2308,2308],"valid"],[[2309,2361],"valid"],[[2362,2363],"valid"],[[2364,2381],"valid"],[[2382,2382],"valid"],[[2383,2383],"valid"],[[2384,2388],"valid"],[[2389,2389],"valid"],[[2390,2391],"valid"],[[2392,2392],"mapped",[2325,2364]],[[2393,2393],"mapped",[2326,2364]],[[2394,2394],"mapped",[2327,2364]],[[2395,2395],"mapped",[2332,2364]],[[2396,2396],"mapped",[2337,2364]],[[2397,2397],"mapped",[2338,2364]],[[2398,2398],"mapped",[2347,2364]],[[2399,2399],"mapped",[2351,2364]],[[2400,2403],"valid"],[[2404,2405],"valid",[],"NV8"],[[2406,2415],"valid"],[[2416,2416],"valid",[],"NV8"],[[2417,2418],"valid"],[[2419,2423],"valid"],[[2424,2424],"valid"],[[2425,2426],"valid"],[[2427,2428],"valid"],[[2429,2429],"valid"],[[2430,2431],"valid"],[[2432,2432],"valid"],[[2433,2435],"valid"],[[2436,2436],"disallowed"],[[2437,2444],"valid"],[[2445,2446],"disallowed"],[[2447,2448],"valid"],[[2449,2450],"disallowed"],[[2451,2472],"valid"],[[2473,2473],"disallowed"],[[2474,2480],"valid"],[[2481,2481],"disallowed"],[[2482,2482],"valid"],[[2483,2485],"disallowed"],[[2486,2489],"valid"],[[2490,2491],"disallowed"],[[2492,2492],"valid"],[[2493,2493],"valid"],[[2494,2500],"valid"],[[2501,2502],"disallowed"],[[2503,2504],"valid"],[[2505,2506],"disallowed"],[[2507,2509],"valid"],[[2510,2510],"valid"],[[2511,2518],"disallowed"],[[2519,2519],"valid"],[[2520,2523],"disallowed"],[[2524,2524],"mapped",[2465,2492]],[[2525,2525],"mapped",[2466,2492]],[[2526,2526],"disallowed"],[[2527,2527],"mapped",[2479,2492]],[[2528,2531],"valid"],[[2532,2533],"disallowed"],[[2534,2545],"valid"],[[2546,2554],"valid",[],"NV8"],[[2555,2555],"valid",[],"NV8"],[[2556,2560],"disallowed"],[[2561,2561],"valid"],[[2562,2562],"valid"],[[2563,2563],"valid"],[[2564,2564],"disallowed"],[[2565,2570],"valid"],[[2571,2574],"disallowed"],[[2575,2576],"valid"],[[2577,2578],"disallowed"],[[2579,2600],"valid"],[[2601,2601],"disallowed"],[[2602,2608],"valid"],[[2609,2609],"disallowed"],[[2610,2610],"valid"],[[2611,2611],"mapped",[2610,2620]],[[2612,2612],"disallowed"],[[2613,2613],"valid"],[[2614,2614],"mapped",[2616,2620]],[[2615,2615],"disallowed"],[[2616,2617],"valid"],[[2618,2619],"disallowed"],[[2620,2620],"valid"],[[2621,2621],"disallowed"],[[2622,2626],"valid"],[[2627,2630],"disallowed"],[[2631,2632],"valid"],[[2633,2634],"disallowed"],[[2635,2637],"valid"],[[2638,2640],"disallowed"],[[2641,2641],"valid"],[[2642,2648],"disallowed"],[[2649,2649],"mapped",[2582,2620]],[[2650,2650],"mapped",[2583,2620]],[[2651,2651],"mapped",[2588,2620]],[[2652,2652],"valid"],[[2653,2653],"disallowed"],[[2654,2654],"mapped",[2603,2620]],[[2655,2661],"disallowed"],[[2662,2676],"valid"],[[2677,2677],"valid"],[[2678,2688],"disallowed"],[[2689,2691],"valid"],[[2692,2692],"disallowed"],[[2693,2699],"valid"],[[2700,2700],"valid"],[[2701,2701],"valid"],[[2702,2702],"disallowed"],[[2703,2705],"valid"],[[2706,2706],"disallowed"],[[2707,2728],"valid"],[[2729,2729],"disallowed"],[[2730,2736],"valid"],[[2737,2737],"disallowed"],[[2738,2739],"valid"],[[2740,2740],"disallowed"],[[2741,2745],"valid"],[[2746,2747],"disallowed"],[[2748,2757],"valid"],[[2758,2758],"disallowed"],[[2759,2761],"valid"],[[2762,2762],"disallowed"],[[2763,2765],"valid"],[[2766,2767],"disallowed"],[[2768,2768],"valid"],[[2769,2783],"disallowed"],[[2784,2784],"valid"],[[2785,2787],"valid"],[[2788,2789],"disallowed"],[[2790,2799],"valid"],[[2800,2800],"valid",[],"NV8"],[[2801,2801],"valid",[],"NV8"],[[2802,2808],"disallowed"],[[2809,2809],"valid"],[[2810,2816],"disallowed"],[[2817,2819],"valid"],[[2820,2820],"disallowed"],[[2821,2828],"valid"],[[2829,2830],"disallowed"],[[2831,2832],"valid"],[[2833,2834],"disallowed"],[[2835,2856],"valid"],[[2857,2857],"disallowed"],[[2858,2864],"valid"],[[2865,2865],"disallowed"],[[2866,2867],"valid"],[[2868,2868],"disallowed"],[[2869,2869],"valid"],[[2870,2873],"valid"],[[2874,2875],"disallowed"],[[2876,2883],"valid"],[[2884,2884],"valid"],[[2885,2886],"disallowed"],[[2887,2888],"valid"],[[2889,2890],"disallowed"],[[2891,2893],"valid"],[[2894,2901],"disallowed"],[[2902,2903],"valid"],[[2904,2907],"disallowed"],[[2908,2908],"mapped",[2849,2876]],[[2909,2909],"mapped",[2850,2876]],[[2910,2910],"disallowed"],[[2911,2913],"valid"],[[2914,2915],"valid"],[[2916,2917],"disallowed"],[[2918,2927],"valid"],[[2928,2928],"valid",[],"NV8"],[[2929,2929],"valid"],[[2930,2935],"valid",[],"NV8"],[[2936,2945],"disallowed"],[[2946,2947],"valid"],[[2948,2948],"disallowed"],[[2949,2954],"valid"],[[2955,2957],"disallowed"],[[2958,2960],"valid"],[[2961,2961],"disallowed"],[[2962,2965],"valid"],[[2966,2968],"disallowed"],[[2969,2970],"valid"],[[2971,2971],"disallowed"],[[2972,2972],"valid"],[[2973,2973],"disallowed"],[[2974,2975],"valid"],[[2976,2978],"disallowed"],[[2979,2980],"valid"],[[2981,2983],"disallowed"],[[2984,2986],"valid"],[[2987,2989],"disallowed"],[[2990,2997],"valid"],[[2998,2998],"valid"],[[2999,3001],"valid"],[[3002,3005],"disallowed"],[[3006,3010],"valid"],[[3011,3013],"disallowed"],[[3014,3016],"valid"],[[3017,3017],"disallowed"],[[3018,3021],"valid"],[[3022,3023],"disallowed"],[[3024,3024],"valid"],[[3025,3030],"disallowed"],[[3031,3031],"valid"],[[3032,3045],"disallowed"],[[3046,3046],"valid"],[[3047,3055],"valid"],[[3056,3058],"valid",[],"NV8"],[[3059,3066],"valid",[],"NV8"],[[3067,3071],"disallowed"],[[3072,3072],"valid"],[[3073,3075],"valid"],[[3076,3076],"disallowed"],[[3077,3084],"valid"],[[3085,3085],"disallowed"],[[3086,3088],"valid"],[[3089,3089],"disallowed"],[[3090,3112],"valid"],[[3113,3113],"disallowed"],[[3114,3123],"valid"],[[3124,3124],"valid"],[[3125,3129],"valid"],[[3130,3132],"disallowed"],[[3133,3133],"valid"],[[3134,3140],"valid"],[[3141,3141],"disallowed"],[[3142,3144],"valid"],[[3145,3145],"disallowed"],[[3146,3149],"valid"],[[3150,3156],"disallowed"],[[3157,3158],"valid"],[[3159,3159],"disallowed"],[[3160,3161],"valid"],[[3162,3162],"valid"],[[3163,3167],"disallowed"],[[3168,3169],"valid"],[[3170,3171],"valid"],[[3172,3173],"disallowed"],[[3174,3183],"valid"],[[3184,3191],"disallowed"],[[3192,3199],"valid",[],"NV8"],[[3200,3200],"disallowed"],[[3201,3201],"valid"],[[3202,3203],"valid"],[[3204,3204],"disallowed"],[[3205,3212],"valid"],[[3213,3213],"disallowed"],[[3214,3216],"valid"],[[3217,3217],"disallowed"],[[3218,3240],"valid"],[[3241,3241],"disallowed"],[[3242,3251],"valid"],[[3252,3252],"disallowed"],[[3253,3257],"valid"],[[3258,3259],"disallowed"],[[3260,3261],"valid"],[[3262,3268],"valid"],[[3269,3269],"disallowed"],[[3270,3272],"valid"],[[3273,3273],"disallowed"],[[3274,3277],"valid"],[[3278,3284],"disallowed"],[[3285,3286],"valid"],[[3287,3293],"disallowed"],[[3294,3294],"valid"],[[3295,3295],"disallowed"],[[3296,3297],"valid"],[[3298,3299],"valid"],[[3300,3301],"disallowed"],[[3302,3311],"valid"],[[3312,3312],"disallowed"],[[3313,3314],"valid"],[[3315,3328],"disallowed"],[[3329,3329],"valid"],[[3330,3331],"valid"],[[3332,3332],"disallowed"],[[3333,3340],"valid"],[[3341,3341],"disallowed"],[[3342,3344],"valid"],[[3345,3345],"disallowed"],[[3346,3368],"valid"],[[3369,3369],"valid"],[[3370,3385],"valid"],[[3386,3386],"valid"],[[3387,3388],"disallowed"],[[3389,3389],"valid"],[[3390,3395],"valid"],[[3396,3396],"valid"],[[3397,3397],"disallowed"],[[3398,3400],"valid"],[[3401,3401],"disallowed"],[[3402,3405],"valid"],[[3406,3406],"valid"],[[3407,3414],"disallowed"],[[3415,3415],"valid"],[[3416,3422],"disallowed"],[[3423,3423],"valid"],[[3424,3425],"valid"],[[3426,3427],"valid"],[[3428,3429],"disallowed"],[[3430,3439],"valid"],[[3440,3445],"valid",[],"NV8"],[[3446,3448],"disallowed"],[[3449,3449],"valid",[],"NV8"],[[3450,3455],"valid"],[[3456,3457],"disallowed"],[[3458,3459],"valid"],[[3460,3460],"disallowed"],[[3461,3478],"valid"],[[3479,3481],"disallowed"],[[3482,3505],"valid"],[[3506,3506],"disallowed"],[[3507,3515],"valid"],[[3516,3516],"disallowed"],[[3517,3517],"valid"],[[3518,3519],"disallowed"],[[3520,3526],"valid"],[[3527,3529],"disallowed"],[[3530,3530],"valid"],[[3531,3534],"disallowed"],[[3535,3540],"valid"],[[3541,3541],"disallowed"],[[3542,3542],"valid"],[[3543,3543],"disallowed"],[[3544,3551],"valid"],[[3552,3557],"disallowed"],[[3558,3567],"valid"],[[3568,3569],"disallowed"],[[3570,3571],"valid"],[[3572,3572],"valid",[],"NV8"],[[3573,3584],"disallowed"],[[3585,3634],"valid"],[[3635,3635],"mapped",[3661,3634]],[[3636,3642],"valid"],[[3643,3646],"disallowed"],[[3647,3647],"valid",[],"NV8"],[[3648,3662],"valid"],[[3663,3663],"valid",[],"NV8"],[[3664,3673],"valid"],[[3674,3675],"valid",[],"NV8"],[[3676,3712],"disallowed"],[[3713,3714],"valid"],[[3715,3715],"disallowed"],[[3716,3716],"valid"],[[3717,3718],"disallowed"],[[3719,3720],"valid"],[[3721,3721],"disallowed"],[[3722,3722],"valid"],[[3723,3724],"disallowed"],[[3725,3725],"valid"],[[3726,3731],"disallowed"],[[3732,3735],"valid"],[[3736,3736],"disallowed"],[[3737,3743],"valid"],[[3744,3744],"disallowed"],[[3745,3747],"valid"],[[3748,3748],"disallowed"],[[3749,3749],"valid"],[[3750,3750],"disallowed"],[[3751,3751],"valid"],[[3752,3753],"disallowed"],[[3754,3755],"valid"],[[3756,3756],"disallowed"],[[3757,3762],"valid"],[[3763,3763],"mapped",[3789,3762]],[[3764,3769],"valid"],[[3770,3770],"disallowed"],[[3771,3773],"valid"],[[3774,3775],"disallowed"],[[3776,3780],"valid"],[[3781,3781],"disallowed"],[[3782,3782],"valid"],[[3783,3783],"disallowed"],[[3784,3789],"valid"],[[3790,3791],"disallowed"],[[3792,3801],"valid"],[[3802,3803],"disallowed"],[[3804,3804],"mapped",[3755,3737]],[[3805,3805],"mapped",[3755,3745]],[[3806,3807],"valid"],[[3808,3839],"disallowed"],[[3840,3840],"valid"],[[3841,3850],"valid",[],"NV8"],[[3851,3851],"valid"],[[3852,3852],"mapped",[3851]],[[3853,3863],"valid",[],"NV8"],[[3864,3865],"valid"],[[3866,3871],"valid",[],"NV8"],[[3872,3881],"valid"],[[3882,3892],"valid",[],"NV8"],[[3893,3893],"valid"],[[3894,3894],"valid",[],"NV8"],[[3895,3895],"valid"],[[3896,3896],"valid",[],"NV8"],[[3897,3897],"valid"],[[3898,3901],"valid",[],"NV8"],[[3902,3906],"valid"],[[3907,3907],"mapped",[3906,4023]],[[3908,3911],"valid"],[[3912,3912],"disallowed"],[[3913,3916],"valid"],[[3917,3917],"mapped",[3916,4023]],[[3918,3921],"valid"],[[3922,3922],"mapped",[3921,4023]],[[3923,3926],"valid"],[[3927,3927],"mapped",[3926,4023]],[[3928,3931],"valid"],[[3932,3932],"mapped",[3931,4023]],[[3933,3944],"valid"],[[3945,3945],"mapped",[3904,4021]],[[3946,3946],"valid"],[[3947,3948],"valid"],[[3949,3952],"disallowed"],[[3953,3954],"valid"],[[3955,3955],"mapped",[3953,3954]],[[3956,3956],"valid"],[[3957,3957],"mapped",[3953,3956]],[[3958,3958],"mapped",[4018,3968]],[[3959,3959],"mapped",[4018,3953,3968]],[[3960,3960],"mapped",[4019,3968]],[[3961,3961],"mapped",[4019,3953,3968]],[[3962,3968],"valid"],[[3969,3969],"mapped",[3953,3968]],[[3970,3972],"valid"],[[3973,3973],"valid",[],"NV8"],[[3974,3979],"valid"],[[3980,3983],"valid"],[[3984,3986],"valid"],[[3987,3987],"mapped",[3986,4023]],[[3988,3989],"valid"],[[3990,3990],"valid"],[[3991,3991],"valid"],[[3992,3992],"disallowed"],[[3993,3996],"valid"],[[3997,3997],"mapped",[3996,4023]],[[3998,4001],"valid"],[[4002,4002],"mapped",[4001,4023]],[[4003,4006],"valid"],[[4007,4007],"mapped",[4006,4023]],[[4008,4011],"valid"],[[4012,4012],"mapped",[4011,4023]],[[4013,4013],"valid"],[[4014,4016],"valid"],[[4017,4023],"valid"],[[4024,4024],"valid"],[[4025,4025],"mapped",[3984,4021]],[[4026,4028],"valid"],[[4029,4029],"disallowed"],[[4030,4037],"valid",[],"NV8"],[[4038,4038],"valid"],[[4039,4044],"valid",[],"NV8"],[[4045,4045],"disallowed"],[[4046,4046],"valid",[],"NV8"],[[4047,4047],"valid",[],"NV8"],[[4048,4049],"valid",[],"NV8"],[[4050,4052],"valid",[],"NV8"],[[4053,4056],"valid",[],"NV8"],[[4057,4058],"valid",[],"NV8"],[[4059,4095],"disallowed"],[[4096,4129],"valid"],[[4130,4130],"valid"],[[4131,4135],"valid"],[[4136,4136],"valid"],[[4137,4138],"valid"],[[4139,4139],"valid"],[[4140,4146],"valid"],[[4147,4149],"valid"],[[4150,4153],"valid"],[[4154,4159],"valid"],[[4160,4169],"valid"],[[4170,4175],"valid",[],"NV8"],[[4176,4185],"valid"],[[4186,4249],"valid"],[[4250,4253],"valid"],[[4254,4255],"valid",[],"NV8"],[[4256,4293],"disallowed"],[[4294,4294],"disallowed"],[[4295,4295],"mapped",[11559]],[[4296,4300],"disallowed"],[[4301,4301],"mapped",[11565]],[[4302,4303],"disallowed"],[[4304,4342],"valid"],[[4343,4344],"valid"],[[4345,4346],"valid"],[[4347,4347],"valid",[],"NV8"],[[4348,4348],"mapped",[4316]],[[4349,4351],"valid"],[[4352,4441],"valid",[],"NV8"],[[4442,4446],"valid",[],"NV8"],[[4447,4448],"disallowed"],[[4449,4514],"valid",[],"NV8"],[[4515,4519],"valid",[],"NV8"],[[4520,4601],"valid",[],"NV8"],[[4602,4607],"valid",[],"NV8"],[[4608,4614],"valid"],[[4615,4615],"valid"],[[4616,4678],"valid"],[[4679,4679],"valid"],[[4680,4680],"valid"],[[4681,4681],"disallowed"],[[4682,4685],"valid"],[[4686,4687],"disallowed"],[[4688,4694],"valid"],[[4695,4695],"disallowed"],[[4696,4696],"valid"],[[4697,4697],"disallowed"],[[4698,4701],"valid"],[[4702,4703],"disallowed"],[[4704,4742],"valid"],[[4743,4743],"valid"],[[4744,4744],"valid"],[[4745,4745],"disallowed"],[[4746,4749],"valid"],[[4750,4751],"disallowed"],[[4752,4782],"valid"],[[4783,4783],"valid"],[[4784,4784],"valid"],[[4785,4785],"disallowed"],[[4786,4789],"valid"],[[4790,4791],"disallowed"],[[4792,4798],"valid"],[[4799,4799],"disallowed"],[[4800,4800],"valid"],[[4801,4801],"disallowed"],[[4802,4805],"valid"],[[4806,4807],"disallowed"],[[4808,4814],"valid"],[[4815,4815],"valid"],[[4816,4822],"valid"],[[4823,4823],"disallowed"],[[4824,4846],"valid"],[[4847,4847],"valid"],[[4848,4878],"valid"],[[4879,4879],"valid"],[[4880,4880],"valid"],[[4881,4881],"disallowed"],[[4882,4885],"valid"],[[4886,4887],"disallowed"],[[4888,4894],"valid"],[[4895,4895],"valid"],[[4896,4934],"valid"],[[4935,4935],"valid"],[[4936,4954],"valid"],[[4955,4956],"disallowed"],[[4957,4958],"valid"],[[4959,4959],"valid"],[[4960,4960],"valid",[],"NV8"],[[4961,4988],"valid",[],"NV8"],[[4989,4991],"disallowed"],[[4992,5007],"valid"],[[5008,5017],"valid",[],"NV8"],[[5018,5023],"disallowed"],[[5024,5108],"valid"],[[5109,5109],"valid"],[[5110,5111],"disallowed"],[[5112,5112],"mapped",[5104]],[[5113,5113],"mapped",[5105]],[[5114,5114],"mapped",[5106]],[[5115,5115],"mapped",[5107]],[[5116,5116],"mapped",[5108]],[[5117,5117],"mapped",[5109]],[[5118,5119],"disallowed"],[[5120,5120],"valid",[],"NV8"],[[5121,5740],"valid"],[[5741,5742],"valid",[],"NV8"],[[5743,5750],"valid"],[[5751,5759],"valid"],[[5760,5760],"disallowed"],[[5761,5786],"valid"],[[5787,5788],"valid",[],"NV8"],[[5789,5791],"disallowed"],[[5792,5866],"valid"],[[5867,5872],"valid",[],"NV8"],[[5873,5880],"valid"],[[5881,5887],"disallowed"],[[5888,5900],"valid"],[[5901,5901],"disallowed"],[[5902,5908],"valid"],[[5909,5919],"disallowed"],[[5920,5940],"valid"],[[5941,5942],"valid",[],"NV8"],[[5943,5951],"disallowed"],[[5952,5971],"valid"],[[5972,5983],"disallowed"],[[5984,5996],"valid"],[[5997,5997],"disallowed"],[[5998,6e3],"valid"],[[6001,6001],"disallowed"],[[6002,6003],"valid"],[[6004,6015],"disallowed"],[[6016,6067],"valid"],[[6068,6069],"disallowed"],[[6070,6099],"valid"],[[6100,6102],"valid",[],"NV8"],[[6103,6103],"valid"],[[6104,6107],"valid",[],"NV8"],[[6108,6108],"valid"],[[6109,6109],"valid"],[[6110,6111],"disallowed"],[[6112,6121],"valid"],[[6122,6127],"disallowed"],[[6128,6137],"valid",[],"NV8"],[[6138,6143],"disallowed"],[[6144,6149],"valid",[],"NV8"],[[6150,6150],"disallowed"],[[6151,6154],"valid",[],"NV8"],[[6155,6157],"ignored"],[[6158,6158],"disallowed"],[[6159,6159],"disallowed"],[[6160,6169],"valid"],[[6170,6175],"disallowed"],[[6176,6263],"valid"],[[6264,6271],"disallowed"],[[6272,6313],"valid"],[[6314,6314],"valid"],[[6315,6319],"disallowed"],[[6320,6389],"valid"],[[6390,6399],"disallowed"],[[6400,6428],"valid"],[[6429,6430],"valid"],[[6431,6431],"disallowed"],[[6432,6443],"valid"],[[6444,6447],"disallowed"],[[6448,6459],"valid"],[[6460,6463],"disallowed"],[[6464,6464],"valid",[],"NV8"],[[6465,6467],"disallowed"],[[6468,6469],"valid",[],"NV8"],[[6470,6509],"valid"],[[6510,6511],"disallowed"],[[6512,6516],"valid"],[[6517,6527],"disallowed"],[[6528,6569],"valid"],[[6570,6571],"valid"],[[6572,6575],"disallowed"],[[6576,6601],"valid"],[[6602,6607],"disallowed"],[[6608,6617],"valid"],[[6618,6618],"valid",[],"XV8"],[[6619,6621],"disallowed"],[[6622,6623],"valid",[],"NV8"],[[6624,6655],"valid",[],"NV8"],[[6656,6683],"valid"],[[6684,6685],"disallowed"],[[6686,6687],"valid",[],"NV8"],[[6688,6750],"valid"],[[6751,6751],"disallowed"],[[6752,6780],"valid"],[[6781,6782],"disallowed"],[[6783,6793],"valid"],[[6794,6799],"disallowed"],[[6800,6809],"valid"],[[6810,6815],"disallowed"],[[6816,6822],"valid",[],"NV8"],[[6823,6823],"valid"],[[6824,6829],"valid",[],"NV8"],[[6830,6831],"disallowed"],[[6832,6845],"valid"],[[6846,6846],"valid",[],"NV8"],[[6847,6911],"disallowed"],[[6912,6987],"valid"],[[6988,6991],"disallowed"],[[6992,7001],"valid"],[[7002,7018],"valid",[],"NV8"],[[7019,7027],"valid"],[[7028,7036],"valid",[],"NV8"],[[7037,7039],"disallowed"],[[7040,7082],"valid"],[[7083,7085],"valid"],[[7086,7097],"valid"],[[7098,7103],"valid"],[[7104,7155],"valid"],[[7156,7163],"disallowed"],[[7164,7167],"valid",[],"NV8"],[[7168,7223],"valid"],[[7224,7226],"disallowed"],[[7227,7231],"valid",[],"NV8"],[[7232,7241],"valid"],[[7242,7244],"disallowed"],[[7245,7293],"valid"],[[7294,7295],"valid",[],"NV8"],[[7296,7359],"disallowed"],[[7360,7367],"valid",[],"NV8"],[[7368,7375],"disallowed"],[[7376,7378],"valid"],[[7379,7379],"valid",[],"NV8"],[[7380,7410],"valid"],[[7411,7414],"valid"],[[7415,7415],"disallowed"],[[7416,7417],"valid"],[[7418,7423],"disallowed"],[[7424,7467],"valid"],[[7468,7468],"mapped",[97]],[[7469,7469],"mapped",[230]],[[7470,7470],"mapped",[98]],[[7471,7471],"valid"],[[7472,7472],"mapped",[100]],[[7473,7473],"mapped",[101]],[[7474,7474],"mapped",[477]],[[7475,7475],"mapped",[103]],[[7476,7476],"mapped",[104]],[[7477,7477],"mapped",[105]],[[7478,7478],"mapped",[106]],[[7479,7479],"mapped",[107]],[[7480,7480],"mapped",[108]],[[7481,7481],"mapped",[109]],[[7482,7482],"mapped",[110]],[[7483,7483],"valid"],[[7484,7484],"mapped",[111]],[[7485,7485],"mapped",[547]],[[7486,7486],"mapped",[112]],[[7487,7487],"mapped",[114]],[[7488,7488],"mapped",[116]],[[7489,7489],"mapped",[117]],[[7490,7490],"mapped",[119]],[[7491,7491],"mapped",[97]],[[7492,7492],"mapped",[592]],[[7493,7493],"mapped",[593]],[[7494,7494],"mapped",[7426]],[[7495,7495],"mapped",[98]],[[7496,7496],"mapped",[100]],[[7497,7497],"mapped",[101]],[[7498,7498],"mapped",[601]],[[7499,7499],"mapped",[603]],[[7500,7500],"mapped",[604]],[[7501,7501],"mapped",[103]],[[7502,7502],"valid"],[[7503,7503],"mapped",[107]],[[7504,7504],"mapped",[109]],[[7505,7505],"mapped",[331]],[[7506,7506],"mapped",[111]],[[7507,7507],"mapped",[596]],[[7508,7508],"mapped",[7446]],[[7509,7509],"mapped",[7447]],[[7510,7510],"mapped",[112]],[[7511,7511],"mapped",[116]],[[7512,7512],"mapped",[117]],[[7513,7513],"mapped",[7453]],[[7514,7514],"mapped",[623]],[[7515,7515],"mapped",[118]],[[7516,7516],"mapped",[7461]],[[7517,7517],"mapped",[946]],[[7518,7518],"mapped",[947]],[[7519,7519],"mapped",[948]],[[7520,7520],"mapped",[966]],[[7521,7521],"mapped",[967]],[[7522,7522],"mapped",[105]],[[7523,7523],"mapped",[114]],[[7524,7524],"mapped",[117]],[[7525,7525],"mapped",[118]],[[7526,7526],"mapped",[946]],[[7527,7527],"mapped",[947]],[[7528,7528],"mapped",[961]],[[7529,7529],"mapped",[966]],[[7530,7530],"mapped",[967]],[[7531,7531],"valid"],[[7532,7543],"valid"],[[7544,7544],"mapped",[1085]],[[7545,7578],"valid"],[[7579,7579],"mapped",[594]],[[7580,7580],"mapped",[99]],[[7581,7581],"mapped",[597]],[[7582,7582],"mapped",[240]],[[7583,7583],"mapped",[604]],[[7584,7584],"mapped",[102]],[[7585,7585],"mapped",[607]],[[7586,7586],"mapped",[609]],[[7587,7587],"mapped",[613]],[[7588,7588],"mapped",[616]],[[7589,7589],"mapped",[617]],[[7590,7590],"mapped",[618]],[[7591,7591],"mapped",[7547]],[[7592,7592],"mapped",[669]],[[7593,7593],"mapped",[621]],[[7594,7594],"mapped",[7557]],[[7595,7595],"mapped",[671]],[[7596,7596],"mapped",[625]],[[7597,7597],"mapped",[624]],[[7598,7598],"mapped",[626]],[[7599,7599],"mapped",[627]],[[7600,7600],"mapped",[628]],[[7601,7601],"mapped",[629]],[[7602,7602],"mapped",[632]],[[7603,7603],"mapped",[642]],[[7604,7604],"mapped",[643]],[[7605,7605],"mapped",[427]],[[7606,7606],"mapped",[649]],[[7607,7607],"mapped",[650]],[[7608,7608],"mapped",[7452]],[[7609,7609],"mapped",[651]],[[7610,7610],"mapped",[652]],[[7611,7611],"mapped",[122]],[[7612,7612],"mapped",[656]],[[7613,7613],"mapped",[657]],[[7614,7614],"mapped",[658]],[[7615,7615],"mapped",[952]],[[7616,7619],"valid"],[[7620,7626],"valid"],[[7627,7654],"valid"],[[7655,7669],"valid"],[[7670,7675],"disallowed"],[[7676,7676],"valid"],[[7677,7677],"valid"],[[7678,7679],"valid"],[[7680,7680],"mapped",[7681]],[[7681,7681],"valid"],[[7682,7682],"mapped",[7683]],[[7683,7683],"valid"],[[7684,7684],"mapped",[7685]],[[7685,7685],"valid"],[[7686,7686],"mapped",[7687]],[[7687,7687],"valid"],[[7688,7688],"mapped",[7689]],[[7689,7689],"valid"],[[7690,7690],"mapped",[7691]],[[7691,7691],"valid"],[[7692,7692],"mapped",[7693]],[[7693,7693],"valid"],[[7694,7694],"mapped",[7695]],[[7695,7695],"valid"],[[7696,7696],"mapped",[7697]],[[7697,7697],"valid"],[[7698,7698],"mapped",[7699]],[[7699,7699],"valid"],[[7700,7700],"mapped",[7701]],[[7701,7701],"valid"],[[7702,7702],"mapped",[7703]],[[7703,7703],"valid"],[[7704,7704],"mapped",[7705]],[[7705,7705],"valid"],[[7706,7706],"mapped",[7707]],[[7707,7707],"valid"],[[7708,7708],"mapped",[7709]],[[7709,7709],"valid"],[[7710,7710],"mapped",[7711]],[[7711,7711],"valid"],[[7712,7712],"mapped",[7713]],[[7713,7713],"valid"],[[7714,7714],"mapped",[7715]],[[7715,7715],"valid"],[[7716,7716],"mapped",[7717]],[[7717,7717],"valid"],[[7718,7718],"mapped",[7719]],[[7719,7719],"valid"],[[7720,7720],"mapped",[7721]],[[7721,7721],"valid"],[[7722,7722],"mapped",[7723]],[[7723,7723],"valid"],[[7724,7724],"mapped",[7725]],[[7725,7725],"valid"],[[7726,7726],"mapped",[7727]],[[7727,7727],"valid"],[[7728,7728],"mapped",[7729]],[[7729,7729],"valid"],[[7730,7730],"mapped",[7731]],[[7731,7731],"valid"],[[7732,7732],"mapped",[7733]],[[7733,7733],"valid"],[[7734,7734],"mapped",[7735]],[[7735,7735],"valid"],[[7736,7736],"mapped",[7737]],[[7737,7737],"valid"],[[7738,7738],"mapped",[7739]],[[7739,7739],"valid"],[[7740,7740],"mapped",[7741]],[[7741,7741],"valid"],[[7742,7742],"mapped",[7743]],[[7743,7743],"valid"],[[7744,7744],"mapped",[7745]],[[7745,7745],"valid"],[[7746,7746],"mapped",[7747]],[[7747,7747],"valid"],[[7748,7748],"mapped",[7749]],[[7749,7749],"valid"],[[7750,7750],"mapped",[7751]],[[7751,7751],"valid"],[[7752,7752],"mapped",[7753]],[[7753,7753],"valid"],[[7754,7754],"mapped",[7755]],[[7755,7755],"valid"],[[7756,7756],"mapped",[7757]],[[7757,7757],"valid"],[[7758,7758],"mapped",[7759]],[[7759,7759],"valid"],[[7760,7760],"mapped",[7761]],[[7761,7761],"valid"],[[7762,7762],"mapped",[7763]],[[7763,7763],"valid"],[[7764,7764],"mapped",[7765]],[[7765,7765],"valid"],[[7766,7766],"mapped",[7767]],[[7767,7767],"valid"],[[7768,7768],"mapped",[7769]],[[7769,7769],"valid"],[[7770,7770],"mapped",[7771]],[[7771,7771],"valid"],[[7772,7772],"mapped",[7773]],[[7773,7773],"valid"],[[7774,7774],"mapped",[7775]],[[7775,7775],"valid"],[[7776,7776],"mapped",[7777]],[[7777,7777],"valid"],[[7778,7778],"mapped",[7779]],[[7779,7779],"valid"],[[7780,7780],"mapped",[7781]],[[7781,7781],"valid"],[[7782,7782],"mapped",[7783]],[[7783,7783],"valid"],[[7784,7784],"mapped",[7785]],[[7785,7785],"valid"],[[7786,7786],"mapped",[7787]],[[7787,7787],"valid"],[[7788,7788],"mapped",[7789]],[[7789,7789],"valid"],[[7790,7790],"mapped",[7791]],[[7791,7791],"valid"],[[7792,7792],"mapped",[7793]],[[7793,7793],"valid"],[[7794,7794],"mapped",[7795]],[[7795,7795],"valid"],[[7796,7796],"mapped",[7797]],[[7797,7797],"valid"],[[7798,7798],"mapped",[7799]],[[7799,7799],"valid"],[[7800,7800],"mapped",[7801]],[[7801,7801],"valid"],[[7802,7802],"mapped",[7803]],[[7803,7803],"valid"],[[7804,7804],"mapped",[7805]],[[7805,7805],"valid"],[[7806,7806],"mapped",[7807]],[[7807,7807],"valid"],[[7808,7808],"mapped",[7809]],[[7809,7809],"valid"],[[7810,7810],"mapped",[7811]],[[7811,7811],"valid"],[[7812,7812],"mapped",[7813]],[[7813,7813],"valid"],[[7814,7814],"mapped",[7815]],[[7815,7815],"valid"],[[7816,7816],"mapped",[7817]],[[7817,7817],"valid"],[[7818,7818],"mapped",[7819]],[[7819,7819],"valid"],[[7820,7820],"mapped",[7821]],[[7821,7821],"valid"],[[7822,7822],"mapped",[7823]],[[7823,7823],"valid"],[[7824,7824],"mapped",[7825]],[[7825,7825],"valid"],[[7826,7826],"mapped",[7827]],[[7827,7827],"valid"],[[7828,7828],"mapped",[7829]],[[7829,7833],"valid"],[[7834,7834],"mapped",[97,702]],[[7835,7835],"mapped",[7777]],[[7836,7837],"valid"],[[7838,7838],"mapped",[115,115]],[[7839,7839],"valid"],[[7840,7840],"mapped",[7841]],[[7841,7841],"valid"],[[7842,7842],"mapped",[7843]],[[7843,7843],"valid"],[[7844,7844],"mapped",[7845]],[[7845,7845],"valid"],[[7846,7846],"mapped",[7847]],[[7847,7847],"valid"],[[7848,7848],"mapped",[7849]],[[7849,7849],"valid"],[[7850,7850],"mapped",[7851]],[[7851,7851],"valid"],[[7852,7852],"mapped",[7853]],[[7853,7853],"valid"],[[7854,7854],"mapped",[7855]],[[7855,7855],"valid"],[[7856,7856],"mapped",[7857]],[[7857,7857],"valid"],[[7858,7858],"mapped",[7859]],[[7859,7859],"valid"],[[7860,7860],"mapped",[7861]],[[7861,7861],"valid"],[[7862,7862],"mapped",[7863]],[[7863,7863],"valid"],[[7864,7864],"mapped",[7865]],[[7865,7865],"valid"],[[7866,7866],"mapped",[7867]],[[7867,7867],"valid"],[[7868,7868],"mapped",[7869]],[[7869,7869],"valid"],[[7870,7870],"mapped",[7871]],[[7871,7871],"valid"],[[7872,7872],"mapped",[7873]],[[7873,7873],"valid"],[[7874,7874],"mapped",[7875]],[[7875,7875],"valid"],[[7876,7876],"mapped",[7877]],[[7877,7877],"valid"],[[7878,7878],"mapped",[7879]],[[7879,7879],"valid"],[[7880,7880],"mapped",[7881]],[[7881,7881],"valid"],[[7882,7882],"mapped",[7883]],[[7883,7883],"valid"],[[7884,7884],"mapped",[7885]],[[7885,7885],"valid"],[[7886,7886],"mapped",[7887]],[[7887,7887],"valid"],[[7888,7888],"mapped",[7889]],[[7889,7889],"valid"],[[7890,7890],"mapped",[7891]],[[7891,7891],"valid"],[[7892,7892],"mapped",[7893]],[[7893,7893],"valid"],[[7894,7894],"mapped",[7895]],[[7895,7895],"valid"],[[7896,7896],"mapped",[7897]],[[7897,7897],"valid"],[[7898,7898],"mapped",[7899]],[[7899,7899],"valid"],[[7900,7900],"mapped",[7901]],[[7901,7901],"valid"],[[7902,7902],"mapped",[7903]],[[7903,7903],"valid"],[[7904,7904],"mapped",[7905]],[[7905,7905],"valid"],[[7906,7906],"mapped",[7907]],[[7907,7907],"valid"],[[7908,7908],"mapped",[7909]],[[7909,7909],"valid"],[[7910,7910],"mapped",[7911]],[[7911,7911],"valid"],[[7912,7912],"mapped",[7913]],[[7913,7913],"valid"],[[7914,7914],"mapped",[7915]],[[7915,7915],"valid"],[[7916,7916],"mapped",[7917]],[[7917,7917],"valid"],[[7918,7918],"mapped",[7919]],[[7919,7919],"valid"],[[7920,7920],"mapped",[7921]],[[7921,7921],"valid"],[[7922,7922],"mapped",[7923]],[[7923,7923],"valid"],[[7924,7924],"mapped",[7925]],[[7925,7925],"valid"],[[7926,7926],"mapped",[7927]],[[7927,7927],"valid"],[[7928,7928],"mapped",[7929]],[[7929,7929],"valid"],[[7930,7930],"mapped",[7931]],[[7931,7931],"valid"],[[7932,7932],"mapped",[7933]],[[7933,7933],"valid"],[[7934,7934],"mapped",[7935]],[[7935,7935],"valid"],[[7936,7943],"valid"],[[7944,7944],"mapped",[7936]],[[7945,7945],"mapped",[7937]],[[7946,7946],"mapped",[7938]],[[7947,7947],"mapped",[7939]],[[7948,7948],"mapped",[7940]],[[7949,7949],"mapped",[7941]],[[7950,7950],"mapped",[7942]],[[7951,7951],"mapped",[7943]],[[7952,7957],"valid"],[[7958,7959],"disallowed"],[[7960,7960],"mapped",[7952]],[[7961,7961],"mapped",[7953]],[[7962,7962],"mapped",[7954]],[[7963,7963],"mapped",[7955]],[[7964,7964],"mapped",[7956]],[[7965,7965],"mapped",[7957]],[[7966,7967],"disallowed"],[[7968,7975],"valid"],[[7976,7976],"mapped",[7968]],[[7977,7977],"mapped",[7969]],[[7978,7978],"mapped",[7970]],[[7979,7979],"mapped",[7971]],[[7980,7980],"mapped",[7972]],[[7981,7981],"mapped",[7973]],[[7982,7982],"mapped",[7974]],[[7983,7983],"mapped",[7975]],[[7984,7991],"valid"],[[7992,7992],"mapped",[7984]],[[7993,7993],"mapped",[7985]],[[7994,7994],"mapped",[7986]],[[7995,7995],"mapped",[7987]],[[7996,7996],"mapped",[7988]],[[7997,7997],"mapped",[7989]],[[7998,7998],"mapped",[7990]],[[7999,7999],"mapped",[7991]],[[8e3,8005],"valid"],[[8006,8007],"disallowed"],[[8008,8008],"mapped",[8e3]],[[8009,8009],"mapped",[8001]],[[8010,8010],"mapped",[8002]],[[8011,8011],"mapped",[8003]],[[8012,8012],"mapped",[8004]],[[8013,8013],"mapped",[8005]],[[8014,8015],"disallowed"],[[8016,8023],"valid"],[[8024,8024],"disallowed"],[[8025,8025],"mapped",[8017]],[[8026,8026],"disallowed"],[[8027,8027],"mapped",[8019]],[[8028,8028],"disallowed"],[[8029,8029],"mapped",[8021]],[[8030,8030],"disallowed"],[[8031,8031],"mapped",[8023]],[[8032,8039],"valid"],[[8040,8040],"mapped",[8032]],[[8041,8041],"mapped",[8033]],[[8042,8042],"mapped",[8034]],[[8043,8043],"mapped",[8035]],[[8044,8044],"mapped",[8036]],[[8045,8045],"mapped",[8037]],[[8046,8046],"mapped",[8038]],[[8047,8047],"mapped",[8039]],[[8048,8048],"valid"],[[8049,8049],"mapped",[940]],[[8050,8050],"valid"],[[8051,8051],"mapped",[941]],[[8052,8052],"valid"],[[8053,8053],"mapped",[942]],[[8054,8054],"valid"],[[8055,8055],"mapped",[943]],[[8056,8056],"valid"],[[8057,8057],"mapped",[972]],[[8058,8058],"valid"],[[8059,8059],"mapped",[973]],[[8060,8060],"valid"],[[8061,8061],"mapped",[974]],[[8062,8063],"disallowed"],[[8064,8064],"mapped",[7936,953]],[[8065,8065],"mapped",[7937,953]],[[8066,8066],"mapped",[7938,953]],[[8067,8067],"mapped",[7939,953]],[[8068,8068],"mapped",[7940,953]],[[8069,8069],"mapped",[7941,953]],[[8070,8070],"mapped",[7942,953]],[[8071,8071],"mapped",[7943,953]],[[8072,8072],"mapped",[7936,953]],[[8073,8073],"mapped",[7937,953]],[[8074,8074],"mapped",[7938,953]],[[8075,8075],"mapped",[7939,953]],[[8076,8076],"mapped",[7940,953]],[[8077,8077],"mapped",[7941,953]],[[8078,8078],"mapped",[7942,953]],[[8079,8079],"mapped",[7943,953]],[[8080,8080],"mapped",[7968,953]],[[8081,8081],"mapped",[7969,953]],[[8082,8082],"mapped",[7970,953]],[[8083,8083],"mapped",[7971,953]],[[8084,8084],"mapped",[7972,953]],[[8085,8085],"mapped",[7973,953]],[[8086,8086],"mapped",[7974,953]],[[8087,8087],"mapped",[7975,953]],[[8088,8088],"mapped",[7968,953]],[[8089,8089],"mapped",[7969,953]],[[8090,8090],"mapped",[7970,953]],[[8091,8091],"mapped",[7971,953]],[[8092,8092],"mapped",[7972,953]],[[8093,8093],"mapped",[7973,953]],[[8094,8094],"mapped",[7974,953]],[[8095,8095],"mapped",[7975,953]],[[8096,8096],"mapped",[8032,953]],[[8097,8097],"mapped",[8033,953]],[[8098,8098],"mapped",[8034,953]],[[8099,8099],"mapped",[8035,953]],[[8100,8100],"mapped",[8036,953]],[[8101,8101],"mapped",[8037,953]],[[8102,8102],"mapped",[8038,953]],[[8103,8103],"mapped",[8039,953]],[[8104,8104],"mapped",[8032,953]],[[8105,8105],"mapped",[8033,953]],[[8106,8106],"mapped",[8034,953]],[[8107,8107],"mapped",[8035,953]],[[8108,8108],"mapped",[8036,953]],[[8109,8109],"mapped",[8037,953]],[[8110,8110],"mapped",[8038,953]],[[8111,8111],"mapped",[8039,953]],[[8112,8113],"valid"],[[8114,8114],"mapped",[8048,953]],[[8115,8115],"mapped",[945,953]],[[8116,8116],"mapped",[940,953]],[[8117,8117],"disallowed"],[[8118,8118],"valid"],[[8119,8119],"mapped",[8118,953]],[[8120,8120],"mapped",[8112]],[[8121,8121],"mapped",[8113]],[[8122,8122],"mapped",[8048]],[[8123,8123],"mapped",[940]],[[8124,8124],"mapped",[945,953]],[[8125,8125],"disallowed_STD3_mapped",[32,787]],[[8126,8126],"mapped",[953]],[[8127,8127],"disallowed_STD3_mapped",[32,787]],[[8128,8128],"disallowed_STD3_mapped",[32,834]],[[8129,8129],"disallowed_STD3_mapped",[32,776,834]],[[8130,8130],"mapped",[8052,953]],[[8131,8131],"mapped",[951,953]],[[8132,8132],"mapped",[942,953]],[[8133,8133],"disallowed"],[[8134,8134],"valid"],[[8135,8135],"mapped",[8134,953]],[[8136,8136],"mapped",[8050]],[[8137,8137],"mapped",[941]],[[8138,8138],"mapped",[8052]],[[8139,8139],"mapped",[942]],[[8140,8140],"mapped",[951,953]],[[8141,8141],"disallowed_STD3_mapped",[32,787,768]],[[8142,8142],"disallowed_STD3_mapped",[32,787,769]],[[8143,8143],"disallowed_STD3_mapped",[32,787,834]],[[8144,8146],"valid"],[[8147,8147],"mapped",[912]],[[8148,8149],"disallowed"],[[8150,8151],"valid"],[[8152,8152],"mapped",[8144]],[[8153,8153],"mapped",[8145]],[[8154,8154],"mapped",[8054]],[[8155,8155],"mapped",[943]],[[8156,8156],"disallowed"],[[8157,8157],"disallowed_STD3_mapped",[32,788,768]],[[8158,8158],"disallowed_STD3_mapped",[32,788,769]],[[8159,8159],"disallowed_STD3_mapped",[32,788,834]],[[8160,8162],"valid"],[[8163,8163],"mapped",[944]],[[8164,8167],"valid"],[[8168,8168],"mapped",[8160]],[[8169,8169],"mapped",[8161]],[[8170,8170],"mapped",[8058]],[[8171,8171],"mapped",[973]],[[8172,8172],"mapped",[8165]],[[8173,8173],"disallowed_STD3_mapped",[32,776,768]],[[8174,8174],"disallowed_STD3_mapped",[32,776,769]],[[8175,8175],"disallowed_STD3_mapped",[96]],[[8176,8177],"disallowed"],[[8178,8178],"mapped",[8060,953]],[[8179,8179],"mapped",[969,953]],[[8180,8180],"mapped",[974,953]],[[8181,8181],"disallowed"],[[8182,8182],"valid"],[[8183,8183],"mapped",[8182,953]],[[8184,8184],"mapped",[8056]],[[8185,8185],"mapped",[972]],[[8186,8186],"mapped",[8060]],[[8187,8187],"mapped",[974]],[[8188,8188],"mapped",[969,953]],[[8189,8189],"disallowed_STD3_mapped",[32,769]],[[8190,8190],"disallowed_STD3_mapped",[32,788]],[[8191,8191],"disallowed"],[[8192,8202],"disallowed_STD3_mapped",[32]],[[8203,8203],"ignored"],[[8204,8205],"deviation",[]],[[8206,8207],"disallowed"],[[8208,8208],"valid",[],"NV8"],[[8209,8209],"mapped",[8208]],[[8210,8214],"valid",[],"NV8"],[[8215,8215],"disallowed_STD3_mapped",[32,819]],[[8216,8227],"valid",[],"NV8"],[[8228,8230],"disallowed"],[[8231,8231],"valid",[],"NV8"],[[8232,8238],"disallowed"],[[8239,8239],"disallowed_STD3_mapped",[32]],[[8240,8242],"valid",[],"NV8"],[[8243,8243],"mapped",[8242,8242]],[[8244,8244],"mapped",[8242,8242,8242]],[[8245,8245],"valid",[],"NV8"],[[8246,8246],"mapped",[8245,8245]],[[8247,8247],"mapped",[8245,8245,8245]],[[8248,8251],"valid",[],"NV8"],[[8252,8252],"disallowed_STD3_mapped",[33,33]],[[8253,8253],"valid",[],"NV8"],[[8254,8254],"disallowed_STD3_mapped",[32,773]],[[8255,8262],"valid",[],"NV8"],[[8263,8263],"disallowed_STD3_mapped",[63,63]],[[8264,8264],"disallowed_STD3_mapped",[63,33]],[[8265,8265],"disallowed_STD3_mapped",[33,63]],[[8266,8269],"valid",[],"NV8"],[[8270,8274],"valid",[],"NV8"],[[8275,8276],"valid",[],"NV8"],[[8277,8278],"valid",[],"NV8"],[[8279,8279],"mapped",[8242,8242,8242,8242]],[[8280,8286],"valid",[],"NV8"],[[8287,8287],"disallowed_STD3_mapped",[32]],[[8288,8288],"ignored"],[[8289,8291],"disallowed"],[[8292,8292],"ignored"],[[8293,8293],"disallowed"],[[8294,8297],"disallowed"],[[8298,8303],"disallowed"],[[8304,8304],"mapped",[48]],[[8305,8305],"mapped",[105]],[[8306,8307],"disallowed"],[[8308,8308],"mapped",[52]],[[8309,8309],"mapped",[53]],[[8310,8310],"mapped",[54]],[[8311,8311],"mapped",[55]],[[8312,8312],"mapped",[56]],[[8313,8313],"mapped",[57]],[[8314,8314],"disallowed_STD3_mapped",[43]],[[8315,8315],"mapped",[8722]],[[8316,8316],"disallowed_STD3_mapped",[61]],[[8317,8317],"disallowed_STD3_mapped",[40]],[[8318,8318],"disallowed_STD3_mapped",[41]],[[8319,8319],"mapped",[110]],[[8320,8320],"mapped",[48]],[[8321,8321],"mapped",[49]],[[8322,8322],"mapped",[50]],[[8323,8323],"mapped",[51]],[[8324,8324],"mapped",[52]],[[8325,8325],"mapped",[53]],[[8326,8326],"mapped",[54]],[[8327,8327],"mapped",[55]],[[8328,8328],"mapped",[56]],[[8329,8329],"mapped",[57]],[[8330,8330],"disallowed_STD3_mapped",[43]],[[8331,8331],"mapped",[8722]],[[8332,8332],"disallowed_STD3_mapped",[61]],[[8333,8333],"disallowed_STD3_mapped",[40]],[[8334,8334],"disallowed_STD3_mapped",[41]],[[8335,8335],"disallowed"],[[8336,8336],"mapped",[97]],[[8337,8337],"mapped",[101]],[[8338,8338],"mapped",[111]],[[8339,8339],"mapped",[120]],[[8340,8340],"mapped",[601]],[[8341,8341],"mapped",[104]],[[8342,8342],"mapped",[107]],[[8343,8343],"mapped",[108]],[[8344,8344],"mapped",[109]],[[8345,8345],"mapped",[110]],[[8346,8346],"mapped",[112]],[[8347,8347],"mapped",[115]],[[8348,8348],"mapped",[116]],[[8349,8351],"disallowed"],[[8352,8359],"valid",[],"NV8"],[[8360,8360],"mapped",[114,115]],[[8361,8362],"valid",[],"NV8"],[[8363,8363],"valid",[],"NV8"],[[8364,8364],"valid",[],"NV8"],[[8365,8367],"valid",[],"NV8"],[[8368,8369],"valid",[],"NV8"],[[8370,8373],"valid",[],"NV8"],[[8374,8376],"valid",[],"NV8"],[[8377,8377],"valid",[],"NV8"],[[8378,8378],"valid",[],"NV8"],[[8379,8381],"valid",[],"NV8"],[[8382,8382],"valid",[],"NV8"],[[8383,8399],"disallowed"],[[8400,8417],"valid",[],"NV8"],[[8418,8419],"valid",[],"NV8"],[[8420,8426],"valid",[],"NV8"],[[8427,8427],"valid",[],"NV8"],[[8428,8431],"valid",[],"NV8"],[[8432,8432],"valid",[],"NV8"],[[8433,8447],"disallowed"],[[8448,8448],"disallowed_STD3_mapped",[97,47,99]],[[8449,8449],"disallowed_STD3_mapped",[97,47,115]],[[8450,8450],"mapped",[99]],[[8451,8451],"mapped",[176,99]],[[8452,8452],"valid",[],"NV8"],[[8453,8453],"disallowed_STD3_mapped",[99,47,111]],[[8454,8454],"disallowed_STD3_mapped",[99,47,117]],[[8455,8455],"mapped",[603]],[[8456,8456],"valid",[],"NV8"],[[8457,8457],"mapped",[176,102]],[[8458,8458],"mapped",[103]],[[8459,8462],"mapped",[104]],[[8463,8463],"mapped",[295]],[[8464,8465],"mapped",[105]],[[8466,8467],"mapped",[108]],[[8468,8468],"valid",[],"NV8"],[[8469,8469],"mapped",[110]],[[8470,8470],"mapped",[110,111]],[[8471,8472],"valid",[],"NV8"],[[8473,8473],"mapped",[112]],[[8474,8474],"mapped",[113]],[[8475,8477],"mapped",[114]],[[8478,8479],"valid",[],"NV8"],[[8480,8480],"mapped",[115,109]],[[8481,8481],"mapped",[116,101,108]],[[8482,8482],"mapped",[116,109]],[[8483,8483],"valid",[],"NV8"],[[8484,8484],"mapped",[122]],[[8485,8485],"valid",[],"NV8"],[[8486,8486],"mapped",[969]],[[8487,8487],"valid",[],"NV8"],[[8488,8488],"mapped",[122]],[[8489,8489],"valid",[],"NV8"],[[8490,8490],"mapped",[107]],[[8491,8491],"mapped",[229]],[[8492,8492],"mapped",[98]],[[8493,8493],"mapped",[99]],[[8494,8494],"valid",[],"NV8"],[[8495,8496],"mapped",[101]],[[8497,8497],"mapped",[102]],[[8498,8498],"disallowed"],[[8499,8499],"mapped",[109]],[[8500,8500],"mapped",[111]],[[8501,8501],"mapped",[1488]],[[8502,8502],"mapped",[1489]],[[8503,8503],"mapped",[1490]],[[8504,8504],"mapped",[1491]],[[8505,8505],"mapped",[105]],[[8506,8506],"valid",[],"NV8"],[[8507,8507],"mapped",[102,97,120]],[[8508,8508],"mapped",[960]],[[8509,8510],"mapped",[947]],[[8511,8511],"mapped",[960]],[[8512,8512],"mapped",[8721]],[[8513,8516],"valid",[],"NV8"],[[8517,8518],"mapped",[100]],[[8519,8519],"mapped",[101]],[[8520,8520],"mapped",[105]],[[8521,8521],"mapped",[106]],[[8522,8523],"valid",[],"NV8"],[[8524,8524],"valid",[],"NV8"],[[8525,8525],"valid",[],"NV8"],[[8526,8526],"valid"],[[8527,8527],"valid",[],"NV8"],[[8528,8528],"mapped",[49,8260,55]],[[8529,8529],"mapped",[49,8260,57]],[[8530,8530],"mapped",[49,8260,49,48]],[[8531,8531],"mapped",[49,8260,51]],[[8532,8532],"mapped",[50,8260,51]],[[8533,8533],"mapped",[49,8260,53]],[[8534,8534],"mapped",[50,8260,53]],[[8535,8535],"mapped",[51,8260,53]],[[8536,8536],"mapped",[52,8260,53]],[[8537,8537],"mapped",[49,8260,54]],[[8538,8538],"mapped",[53,8260,54]],[[8539,8539],"mapped",[49,8260,56]],[[8540,8540],"mapped",[51,8260,56]],[[8541,8541],"mapped",[53,8260,56]],[[8542,8542],"mapped",[55,8260,56]],[[8543,8543],"mapped",[49,8260]],[[8544,8544],"mapped",[105]],[[8545,8545],"mapped",[105,105]],[[8546,8546],"mapped",[105,105,105]],[[8547,8547],"mapped",[105,118]],[[8548,8548],"mapped",[118]],[[8549,8549],"mapped",[118,105]],[[8550,8550],"mapped",[118,105,105]],[[8551,8551],"mapped",[118,105,105,105]],[[8552,8552],"mapped",[105,120]],[[8553,8553],"mapped",[120]],[[8554,8554],"mapped",[120,105]],[[8555,8555],"mapped",[120,105,105]],[[8556,8556],"mapped",[108]],[[8557,8557],"mapped",[99]],[[8558,8558],"mapped",[100]],[[8559,8559],"mapped",[109]],[[8560,8560],"mapped",[105]],[[8561,8561],"mapped",[105,105]],[[8562,8562],"mapped",[105,105,105]],[[8563,8563],"mapped",[105,118]],[[8564,8564],"mapped",[118]],[[8565,8565],"mapped",[118,105]],[[8566,8566],"mapped",[118,105,105]],[[8567,8567],"mapped",[118,105,105,105]],[[8568,8568],"mapped",[105,120]],[[8569,8569],"mapped",[120]],[[8570,8570],"mapped",[120,105]],[[8571,8571],"mapped",[120,105,105]],[[8572,8572],"mapped",[108]],[[8573,8573],"mapped",[99]],[[8574,8574],"mapped",[100]],[[8575,8575],"mapped",[109]],[[8576,8578],"valid",[],"NV8"],[[8579,8579],"disallowed"],[[8580,8580],"valid"],[[8581,8584],"valid",[],"NV8"],[[8585,8585],"mapped",[48,8260,51]],[[8586,8587],"valid",[],"NV8"],[[8588,8591],"disallowed"],[[8592,8682],"valid",[],"NV8"],[[8683,8691],"valid",[],"NV8"],[[8692,8703],"valid",[],"NV8"],[[8704,8747],"valid",[],"NV8"],[[8748,8748],"mapped",[8747,8747]],[[8749,8749],"mapped",[8747,8747,8747]],[[8750,8750],"valid",[],"NV8"],[[8751,8751],"mapped",[8750,8750]],[[8752,8752],"mapped",[8750,8750,8750]],[[8753,8799],"valid",[],"NV8"],[[8800,8800],"disallowed_STD3_valid"],[[8801,8813],"valid",[],"NV8"],[[8814,8815],"disallowed_STD3_valid"],[[8816,8945],"valid",[],"NV8"],[[8946,8959],"valid",[],"NV8"],[[8960,8960],"valid",[],"NV8"],[[8961,8961],"valid",[],"NV8"],[[8962,9e3],"valid",[],"NV8"],[[9001,9001],"mapped",[12296]],[[9002,9002],"mapped",[12297]],[[9003,9082],"valid",[],"NV8"],[[9083,9083],"valid",[],"NV8"],[[9084,9084],"valid",[],"NV8"],[[9085,9114],"valid",[],"NV8"],[[9115,9166],"valid",[],"NV8"],[[9167,9168],"valid",[],"NV8"],[[9169,9179],"valid",[],"NV8"],[[9180,9191],"valid",[],"NV8"],[[9192,9192],"valid",[],"NV8"],[[9193,9203],"valid",[],"NV8"],[[9204,9210],"valid",[],"NV8"],[[9211,9215],"disallowed"],[[9216,9252],"valid",[],"NV8"],[[9253,9254],"valid",[],"NV8"],[[9255,9279],"disallowed"],[[9280,9290],"valid",[],"NV8"],[[9291,9311],"disallowed"],[[9312,9312],"mapped",[49]],[[9313,9313],"mapped",[50]],[[9314,9314],"mapped",[51]],[[9315,9315],"mapped",[52]],[[9316,9316],"mapped",[53]],[[9317,9317],"mapped",[54]],[[9318,9318],"mapped",[55]],[[9319,9319],"mapped",[56]],[[9320,9320],"mapped",[57]],[[9321,9321],"mapped",[49,48]],[[9322,9322],"mapped",[49,49]],[[9323,9323],"mapped",[49,50]],[[9324,9324],"mapped",[49,51]],[[9325,9325],"mapped",[49,52]],[[9326,9326],"mapped",[49,53]],[[9327,9327],"mapped",[49,54]],[[9328,9328],"mapped",[49,55]],[[9329,9329],"mapped",[49,56]],[[9330,9330],"mapped",[49,57]],[[9331,9331],"mapped",[50,48]],[[9332,9332],"disallowed_STD3_mapped",[40,49,41]],[[9333,9333],"disallowed_STD3_mapped",[40,50,41]],[[9334,9334],"disallowed_STD3_mapped",[40,51,41]],[[9335,9335],"disallowed_STD3_mapped",[40,52,41]],[[9336,9336],"disallowed_STD3_mapped",[40,53,41]],[[9337,9337],"disallowed_STD3_mapped",[40,54,41]],[[9338,9338],"disallowed_STD3_mapped",[40,55,41]],[[9339,9339],"disallowed_STD3_mapped",[40,56,41]],[[9340,9340],"disallowed_STD3_mapped",[40,57,41]],[[9341,9341],"disallowed_STD3_mapped",[40,49,48,41]],[[9342,9342],"disallowed_STD3_mapped",[40,49,49,41]],[[9343,9343],"disallowed_STD3_mapped",[40,49,50,41]],[[9344,9344],"disallowed_STD3_mapped",[40,49,51,41]],[[9345,9345],"disallowed_STD3_mapped",[40,49,52,41]],[[9346,9346],"disallowed_STD3_mapped",[40,49,53,41]],[[9347,9347],"disallowed_STD3_mapped",[40,49,54,41]],[[9348,9348],"disallowed_STD3_mapped",[40,49,55,41]],[[9349,9349],"disallowed_STD3_mapped",[40,49,56,41]],[[9350,9350],"disallowed_STD3_mapped",[40,49,57,41]],[[9351,9351],"disallowed_STD3_mapped",[40,50,48,41]],[[9352,9371],"disallowed"],[[9372,9372],"disallowed_STD3_mapped",[40,97,41]],[[9373,9373],"disallowed_STD3_mapped",[40,98,41]],[[9374,9374],"disallowed_STD3_mapped",[40,99,41]],[[9375,9375],"disallowed_STD3_mapped",[40,100,41]],[[9376,9376],"disallowed_STD3_mapped",[40,101,41]],[[9377,9377],"disallowed_STD3_mapped",[40,102,41]],[[9378,9378],"disallowed_STD3_mapped",[40,103,41]],[[9379,9379],"disallowed_STD3_mapped",[40,104,41]],[[9380,9380],"disallowed_STD3_mapped",[40,105,41]],[[9381,9381],"disallowed_STD3_mapped",[40,106,41]],[[9382,9382],"disallowed_STD3_mapped",[40,107,41]],[[9383,9383],"disallowed_STD3_mapped",[40,108,41]],[[9384,9384],"disallowed_STD3_mapped",[40,109,41]],[[9385,9385],"disallowed_STD3_mapped",[40,110,41]],[[9386,9386],"disallowed_STD3_mapped",[40,111,41]],[[9387,9387],"disallowed_STD3_mapped",[40,112,41]],[[9388,9388],"disallowed_STD3_mapped",[40,113,41]],[[9389,9389],"disallowed_STD3_mapped",[40,114,41]],[[9390,9390],"disallowed_STD3_mapped",[40,115,41]],[[9391,9391],"disallowed_STD3_mapped",[40,116,41]],[[9392,9392],"disallowed_STD3_mapped",[40,117,41]],[[9393,9393],"disallowed_STD3_mapped",[40,118,41]],[[9394,9394],"disallowed_STD3_mapped",[40,119,41]],[[9395,9395],"disallowed_STD3_mapped",[40,120,41]],[[9396,9396],"disallowed_STD3_mapped",[40,121,41]],[[9397,9397],"disallowed_STD3_mapped",[40,122,41]],[[9398,9398],"mapped",[97]],[[9399,9399],"mapped",[98]],[[9400,9400],"mapped",[99]],[[9401,9401],"mapped",[100]],[[9402,9402],"mapped",[101]],[[9403,9403],"mapped",[102]],[[9404,9404],"mapped",[103]],[[9405,9405],"mapped",[104]],[[9406,9406],"mapped",[105]],[[9407,9407],"mapped",[106]],[[9408,9408],"mapped",[107]],[[9409,9409],"mapped",[108]],[[9410,9410],"mapped",[109]],[[9411,9411],"mapped",[110]],[[9412,9412],"mapped",[111]],[[9413,9413],"mapped",[112]],[[9414,9414],"mapped",[113]],[[9415,9415],"mapped",[114]],[[9416,9416],"mapped",[115]],[[9417,9417],"mapped",[116]],[[9418,9418],"mapped",[117]],[[9419,9419],"mapped",[118]],[[9420,9420],"mapped",[119]],[[9421,9421],"mapped",[120]],[[9422,9422],"mapped",[121]],[[9423,9423],"mapped",[122]],[[9424,9424],"mapped",[97]],[[9425,9425],"mapped",[98]],[[9426,9426],"mapped",[99]],[[9427,9427],"mapped",[100]],[[9428,9428],"mapped",[101]],[[9429,9429],"mapped",[102]],[[9430,9430],"mapped",[103]],[[9431,9431],"mapped",[104]],[[9432,9432],"mapped",[105]],[[9433,9433],"mapped",[106]],[[9434,9434],"mapped",[107]],[[9435,9435],"mapped",[108]],[[9436,9436],"mapped",[109]],[[9437,9437],"mapped",[110]],[[9438,9438],"mapped",[111]],[[9439,9439],"mapped",[112]],[[9440,9440],"mapped",[113]],[[9441,9441],"mapped",[114]],[[9442,9442],"mapped",[115]],[[9443,9443],"mapped",[116]],[[9444,9444],"mapped",[117]],[[9445,9445],"mapped",[118]],[[9446,9446],"mapped",[119]],[[9447,9447],"mapped",[120]],[[9448,9448],"mapped",[121]],[[9449,9449],"mapped",[122]],[[9450,9450],"mapped",[48]],[[9451,9470],"valid",[],"NV8"],[[9471,9471],"valid",[],"NV8"],[[9472,9621],"valid",[],"NV8"],[[9622,9631],"valid",[],"NV8"],[[9632,9711],"valid",[],"NV8"],[[9712,9719],"valid",[],"NV8"],[[9720,9727],"valid",[],"NV8"],[[9728,9747],"valid",[],"NV8"],[[9748,9749],"valid",[],"NV8"],[[9750,9751],"valid",[],"NV8"],[[9752,9752],"valid",[],"NV8"],[[9753,9753],"valid",[],"NV8"],[[9754,9839],"valid",[],"NV8"],[[9840,9841],"valid",[],"NV8"],[[9842,9853],"valid",[],"NV8"],[[9854,9855],"valid",[],"NV8"],[[9856,9865],"valid",[],"NV8"],[[9866,9873],"valid",[],"NV8"],[[9874,9884],"valid",[],"NV8"],[[9885,9885],"valid",[],"NV8"],[[9886,9887],"valid",[],"NV8"],[[9888,9889],"valid",[],"NV8"],[[9890,9905],"valid",[],"NV8"],[[9906,9906],"valid",[],"NV8"],[[9907,9916],"valid",[],"NV8"],[[9917,9919],"valid",[],"NV8"],[[9920,9923],"valid",[],"NV8"],[[9924,9933],"valid",[],"NV8"],[[9934,9934],"valid",[],"NV8"],[[9935,9953],"valid",[],"NV8"],[[9954,9954],"valid",[],"NV8"],[[9955,9955],"valid",[],"NV8"],[[9956,9959],"valid",[],"NV8"],[[9960,9983],"valid",[],"NV8"],[[9984,9984],"valid",[],"NV8"],[[9985,9988],"valid",[],"NV8"],[[9989,9989],"valid",[],"NV8"],[[9990,9993],"valid",[],"NV8"],[[9994,9995],"valid",[],"NV8"],[[9996,10023],"valid",[],"NV8"],[[10024,10024],"valid",[],"NV8"],[[10025,10059],"valid",[],"NV8"],[[10060,10060],"valid",[],"NV8"],[[10061,10061],"valid",[],"NV8"],[[10062,10062],"valid",[],"NV8"],[[10063,10066],"valid",[],"NV8"],[[10067,10069],"valid",[],"NV8"],[[10070,10070],"valid",[],"NV8"],[[10071,10071],"valid",[],"NV8"],[[10072,10078],"valid",[],"NV8"],[[10079,10080],"valid",[],"NV8"],[[10081,10087],"valid",[],"NV8"],[[10088,10101],"valid",[],"NV8"],[[10102,10132],"valid",[],"NV8"],[[10133,10135],"valid",[],"NV8"],[[10136,10159],"valid",[],"NV8"],[[10160,10160],"valid",[],"NV8"],[[10161,10174],"valid",[],"NV8"],[[10175,10175],"valid",[],"NV8"],[[10176,10182],"valid",[],"NV8"],[[10183,10186],"valid",[],"NV8"],[[10187,10187],"valid",[],"NV8"],[[10188,10188],"valid",[],"NV8"],[[10189,10189],"valid",[],"NV8"],[[10190,10191],"valid",[],"NV8"],[[10192,10219],"valid",[],"NV8"],[[10220,10223],"valid",[],"NV8"],[[10224,10239],"valid",[],"NV8"],[[10240,10495],"valid",[],"NV8"],[[10496,10763],"valid",[],"NV8"],[[10764,10764],"mapped",[8747,8747,8747,8747]],[[10765,10867],"valid",[],"NV8"],[[10868,10868],"disallowed_STD3_mapped",[58,58,61]],[[10869,10869],"disallowed_STD3_mapped",[61,61]],[[10870,10870],"disallowed_STD3_mapped",[61,61,61]],[[10871,10971],"valid",[],"NV8"],[[10972,10972],"mapped",[10973,824]],[[10973,11007],"valid",[],"NV8"],[[11008,11021],"valid",[],"NV8"],[[11022,11027],"valid",[],"NV8"],[[11028,11034],"valid",[],"NV8"],[[11035,11039],"valid",[],"NV8"],[[11040,11043],"valid",[],"NV8"],[[11044,11084],"valid",[],"NV8"],[[11085,11087],"valid",[],"NV8"],[[11088,11092],"valid",[],"NV8"],[[11093,11097],"valid",[],"NV8"],[[11098,11123],"valid",[],"NV8"],[[11124,11125],"disallowed"],[[11126,11157],"valid",[],"NV8"],[[11158,11159],"disallowed"],[[11160,11193],"valid",[],"NV8"],[[11194,11196],"disallowed"],[[11197,11208],"valid",[],"NV8"],[[11209,11209],"disallowed"],[[11210,11217],"valid",[],"NV8"],[[11218,11243],"disallowed"],[[11244,11247],"valid",[],"NV8"],[[11248,11263],"disallowed"],[[11264,11264],"mapped",[11312]],[[11265,11265],"mapped",[11313]],[[11266,11266],"mapped",[11314]],[[11267,11267],"mapped",[11315]],[[11268,11268],"mapped",[11316]],[[11269,11269],"mapped",[11317]],[[11270,11270],"mapped",[11318]],[[11271,11271],"mapped",[11319]],[[11272,11272],"mapped",[11320]],[[11273,11273],"mapped",[11321]],[[11274,11274],"mapped",[11322]],[[11275,11275],"mapped",[11323]],[[11276,11276],"mapped",[11324]],[[11277,11277],"mapped",[11325]],[[11278,11278],"mapped",[11326]],[[11279,11279],"mapped",[11327]],[[11280,11280],"mapped",[11328]],[[11281,11281],"mapped",[11329]],[[11282,11282],"mapped",[11330]],[[11283,11283],"mapped",[11331]],[[11284,11284],"mapped",[11332]],[[11285,11285],"mapped",[11333]],[[11286,11286],"mapped",[11334]],[[11287,11287],"mapped",[11335]],[[11288,11288],"mapped",[11336]],[[11289,11289],"mapped",[11337]],[[11290,11290],"mapped",[11338]],[[11291,11291],"mapped",[11339]],[[11292,11292],"mapped",[11340]],[[11293,11293],"mapped",[11341]],[[11294,11294],"mapped",[11342]],[[11295,11295],"mapped",[11343]],[[11296,11296],"mapped",[11344]],[[11297,11297],"mapped",[11345]],[[11298,11298],"mapped",[11346]],[[11299,11299],"mapped",[11347]],[[11300,11300],"mapped",[11348]],[[11301,11301],"mapped",[11349]],[[11302,11302],"mapped",[11350]],[[11303,11303],"mapped",[11351]],[[11304,11304],"mapped",[11352]],[[11305,11305],"mapped",[11353]],[[11306,11306],"mapped",[11354]],[[11307,11307],"mapped",[11355]],[[11308,11308],"mapped",[11356]],[[11309,11309],"mapped",[11357]],[[11310,11310],"mapped",[11358]],[[11311,11311],"disallowed"],[[11312,11358],"valid"],[[11359,11359],"disallowed"],[[11360,11360],"mapped",[11361]],[[11361,11361],"valid"],[[11362,11362],"mapped",[619]],[[11363,11363],"mapped",[7549]],[[11364,11364],"mapped",[637]],[[11365,11366],"valid"],[[11367,11367],"mapped",[11368]],[[11368,11368],"valid"],[[11369,11369],"mapped",[11370]],[[11370,11370],"valid"],[[11371,11371],"mapped",[11372]],[[11372,11372],"valid"],[[11373,11373],"mapped",[593]],[[11374,11374],"mapped",[625]],[[11375,11375],"mapped",[592]],[[11376,11376],"mapped",[594]],[[11377,11377],"valid"],[[11378,11378],"mapped",[11379]],[[11379,11379],"valid"],[[11380,11380],"valid"],[[11381,11381],"mapped",[11382]],[[11382,11383],"valid"],[[11384,11387],"valid"],[[11388,11388],"mapped",[106]],[[11389,11389],"mapped",[118]],[[11390,11390],"mapped",[575]],[[11391,11391],"mapped",[576]],[[11392,11392],"mapped",[11393]],[[11393,11393],"valid"],[[11394,11394],"mapped",[11395]],[[11395,11395],"valid"],[[11396,11396],"mapped",[11397]],[[11397,11397],"valid"],[[11398,11398],"mapped",[11399]],[[11399,11399],"valid"],[[11400,11400],"mapped",[11401]],[[11401,11401],"valid"],[[11402,11402],"mapped",[11403]],[[11403,11403],"valid"],[[11404,11404],"mapped",[11405]],[[11405,11405],"valid"],[[11406,11406],"mapped",[11407]],[[11407,11407],"valid"],[[11408,11408],"mapped",[11409]],[[11409,11409],"valid"],[[11410,11410],"mapped",[11411]],[[11411,11411],"valid"],[[11412,11412],"mapped",[11413]],[[11413,11413],"valid"],[[11414,11414],"mapped",[11415]],[[11415,11415],"valid"],[[11416,11416],"mapped",[11417]],[[11417,11417],"valid"],[[11418,11418],"mapped",[11419]],[[11419,11419],"valid"],[[11420,11420],"mapped",[11421]],[[11421,11421],"valid"],[[11422,11422],"mapped",[11423]],[[11423,11423],"valid"],[[11424,11424],"mapped",[11425]],[[11425,11425],"valid"],[[11426,11426],"mapped",[11427]],[[11427,11427],"valid"],[[11428,11428],"mapped",[11429]],[[11429,11429],"valid"],[[11430,11430],"mapped",[11431]],[[11431,11431],"valid"],[[11432,11432],"mapped",[11433]],[[11433,11433],"valid"],[[11434,11434],"mapped",[11435]],[[11435,11435],"valid"],[[11436,11436],"mapped",[11437]],[[11437,11437],"valid"],[[11438,11438],"mapped",[11439]],[[11439,11439],"valid"],[[11440,11440],"mapped",[11441]],[[11441,11441],"valid"],[[11442,11442],"mapped",[11443]],[[11443,11443],"valid"],[[11444,11444],"mapped",[11445]],[[11445,11445],"valid"],[[11446,11446],"mapped",[11447]],[[11447,11447],"valid"],[[11448,11448],"mapped",[11449]],[[11449,11449],"valid"],[[11450,11450],"mapped",[11451]],[[11451,11451],"valid"],[[11452,11452],"mapped",[11453]],[[11453,11453],"valid"],[[11454,11454],"mapped",[11455]],[[11455,11455],"valid"],[[11456,11456],"mapped",[11457]],[[11457,11457],"valid"],[[11458,11458],"mapped",[11459]],[[11459,11459],"valid"],[[11460,11460],"mapped",[11461]],[[11461,11461],"valid"],[[11462,11462],"mapped",[11463]],[[11463,11463],"valid"],[[11464,11464],"mapped",[11465]],[[11465,11465],"valid"],[[11466,11466],"mapped",[11467]],[[11467,11467],"valid"],[[11468,11468],"mapped",[11469]],[[11469,11469],"valid"],[[11470,11470],"mapped",[11471]],[[11471,11471],"valid"],[[11472,11472],"mapped",[11473]],[[11473,11473],"valid"],[[11474,11474],"mapped",[11475]],[[11475,11475],"valid"],[[11476,11476],"mapped",[11477]],[[11477,11477],"valid"],[[11478,11478],"mapped",[11479]],[[11479,11479],"valid"],[[11480,11480],"mapped",[11481]],[[11481,11481],"valid"],[[11482,11482],"mapped",[11483]],[[11483,11483],"valid"],[[11484,11484],"mapped",[11485]],[[11485,11485],"valid"],[[11486,11486],"mapped",[11487]],[[11487,11487],"valid"],[[11488,11488],"mapped",[11489]],[[11489,11489],"valid"],[[11490,11490],"mapped",[11491]],[[11491,11492],"valid"],[[11493,11498],"valid",[],"NV8"],[[11499,11499],"mapped",[11500]],[[11500,11500],"valid"],[[11501,11501],"mapped",[11502]],[[11502,11505],"valid"],[[11506,11506],"mapped",[11507]],[[11507,11507],"valid"],[[11508,11512],"disallowed"],[[11513,11519],"valid",[],"NV8"],[[11520,11557],"valid"],[[11558,11558],"disallowed"],[[11559,11559],"valid"],[[11560,11564],"disallowed"],[[11565,11565],"valid"],[[11566,11567],"disallowed"],[[11568,11621],"valid"],[[11622,11623],"valid"],[[11624,11630],"disallowed"],[[11631,11631],"mapped",[11617]],[[11632,11632],"valid",[],"NV8"],[[11633,11646],"disallowed"],[[11647,11647],"valid"],[[11648,11670],"valid"],[[11671,11679],"disallowed"],[[11680,11686],"valid"],[[11687,11687],"disallowed"],[[11688,11694],"valid"],[[11695,11695],"disallowed"],[[11696,11702],"valid"],[[11703,11703],"disallowed"],[[11704,11710],"valid"],[[11711,11711],"disallowed"],[[11712,11718],"valid"],[[11719,11719],"disallowed"],[[11720,11726],"valid"],[[11727,11727],"disallowed"],[[11728,11734],"valid"],[[11735,11735],"disallowed"],[[11736,11742],"valid"],[[11743,11743],"disallowed"],[[11744,11775],"valid"],[[11776,11799],"valid",[],"NV8"],[[11800,11803],"valid",[],"NV8"],[[11804,11805],"valid",[],"NV8"],[[11806,11822],"valid",[],"NV8"],[[11823,11823],"valid"],[[11824,11824],"valid",[],"NV8"],[[11825,11825],"valid",[],"NV8"],[[11826,11835],"valid",[],"NV8"],[[11836,11842],"valid",[],"NV8"],[[11843,11903],"disallowed"],[[11904,11929],"valid",[],"NV8"],[[11930,11930],"disallowed"],[[11931,11934],"valid",[],"NV8"],[[11935,11935],"mapped",[27597]],[[11936,12018],"valid",[],"NV8"],[[12019,12019],"mapped",[40863]],[[12020,12031],"disallowed"],[[12032,12032],"mapped",[19968]],[[12033,12033],"mapped",[20008]],[[12034,12034],"mapped",[20022]],[[12035,12035],"mapped",[20031]],[[12036,12036],"mapped",[20057]],[[12037,12037],"mapped",[20101]],[[12038,12038],"mapped",[20108]],[[12039,12039],"mapped",[20128]],[[12040,12040],"mapped",[20154]],[[12041,12041],"mapped",[20799]],[[12042,12042],"mapped",[20837]],[[12043,12043],"mapped",[20843]],[[12044,12044],"mapped",[20866]],[[12045,12045],"mapped",[20886]],[[12046,12046],"mapped",[20907]],[[12047,12047],"mapped",[20960]],[[12048,12048],"mapped",[20981]],[[12049,12049],"mapped",[20992]],[[12050,12050],"mapped",[21147]],[[12051,12051],"mapped",[21241]],[[12052,12052],"mapped",[21269]],[[12053,12053],"mapped",[21274]],[[12054,12054],"mapped",[21304]],[[12055,12055],"mapped",[21313]],[[12056,12056],"mapped",[21340]],[[12057,12057],"mapped",[21353]],[[12058,12058],"mapped",[21378]],[[12059,12059],"mapped",[21430]],[[12060,12060],"mapped",[21448]],[[12061,12061],"mapped",[21475]],[[12062,12062],"mapped",[22231]],[[12063,12063],"mapped",[22303]],[[12064,12064],"mapped",[22763]],[[12065,12065],"mapped",[22786]],[[12066,12066],"mapped",[22794]],[[12067,12067],"mapped",[22805]],[[12068,12068],"mapped",[22823]],[[12069,12069],"mapped",[22899]],[[12070,12070],"mapped",[23376]],[[12071,12071],"mapped",[23424]],[[12072,12072],"mapped",[23544]],[[12073,12073],"mapped",[23567]],[[12074,12074],"mapped",[23586]],[[12075,12075],"mapped",[23608]],[[12076,12076],"mapped",[23662]],[[12077,12077],"mapped",[23665]],[[12078,12078],"mapped",[24027]],[[12079,12079],"mapped",[24037]],[[12080,12080],"mapped",[24049]],[[12081,12081],"mapped",[24062]],[[12082,12082],"mapped",[24178]],[[12083,12083],"mapped",[24186]],[[12084,12084],"mapped",[24191]],[[12085,12085],"mapped",[24308]],[[12086,12086],"mapped",[24318]],[[12087,12087],"mapped",[24331]],[[12088,12088],"mapped",[24339]],[[12089,12089],"mapped",[24400]],[[12090,12090],"mapped",[24417]],[[12091,12091],"mapped",[24435]],[[12092,12092],"mapped",[24515]],[[12093,12093],"mapped",[25096]],[[12094,12094],"mapped",[25142]],[[12095,12095],"mapped",[25163]],[[12096,12096],"mapped",[25903]],[[12097,12097],"mapped",[25908]],[[12098,12098],"mapped",[25991]],[[12099,12099],"mapped",[26007]],[[12100,12100],"mapped",[26020]],[[12101,12101],"mapped",[26041]],[[12102,12102],"mapped",[26080]],[[12103,12103],"mapped",[26085]],[[12104,12104],"mapped",[26352]],[[12105,12105],"mapped",[26376]],[[12106,12106],"mapped",[26408]],[[12107,12107],"mapped",[27424]],[[12108,12108],"mapped",[27490]],[[12109,12109],"mapped",[27513]],[[12110,12110],"mapped",[27571]],[[12111,12111],"mapped",[27595]],[[12112,12112],"mapped",[27604]],[[12113,12113],"mapped",[27611]],[[12114,12114],"mapped",[27663]],[[12115,12115],"mapped",[27668]],[[12116,12116],"mapped",[27700]],[[12117,12117],"mapped",[28779]],[[12118,12118],"mapped",[29226]],[[12119,12119],"mapped",[29238]],[[12120,12120],"mapped",[29243]],[[12121,12121],"mapped",[29247]],[[12122,12122],"mapped",[29255]],[[12123,12123],"mapped",[29273]],[[12124,12124],"mapped",[29275]],[[12125,12125],"mapped",[29356]],[[12126,12126],"mapped",[29572]],[[12127,12127],"mapped",[29577]],[[12128,12128],"mapped",[29916]],[[12129,12129],"mapped",[29926]],[[12130,12130],"mapped",[29976]],[[12131,12131],"mapped",[29983]],[[12132,12132],"mapped",[29992]],[[12133,12133],"mapped",[3e4]],[[12134,12134],"mapped",[30091]],[[12135,12135],"mapped",[30098]],[[12136,12136],"mapped",[30326]],[[12137,12137],"mapped",[30333]],[[12138,12138],"mapped",[30382]],[[12139,12139],"mapped",[30399]],[[12140,12140],"mapped",[30446]],[[12141,12141],"mapped",[30683]],[[12142,12142],"mapped",[30690]],[[12143,12143],"mapped",[30707]],[[12144,12144],"mapped",[31034]],[[12145,12145],"mapped",[31160]],[[12146,12146],"mapped",[31166]],[[12147,12147],"mapped",[31348]],[[12148,12148],"mapped",[31435]],[[12149,12149],"mapped",[31481]],[[12150,12150],"mapped",[31859]],[[12151,12151],"mapped",[31992]],[[12152,12152],"mapped",[32566]],[[12153,12153],"mapped",[32593]],[[12154,12154],"mapped",[32650]],[[12155,12155],"mapped",[32701]],[[12156,12156],"mapped",[32769]],[[12157,12157],"mapped",[32780]],[[12158,12158],"mapped",[32786]],[[12159,12159],"mapped",[32819]],[[12160,12160],"mapped",[32895]],[[12161,12161],"mapped",[32905]],[[12162,12162],"mapped",[33251]],[[12163,12163],"mapped",[33258]],[[12164,12164],"mapped",[33267]],[[12165,12165],"mapped",[33276]],[[12166,12166],"mapped",[33292]],[[12167,12167],"mapped",[33307]],[[12168,12168],"mapped",[33311]],[[12169,12169],"mapped",[33390]],[[12170,12170],"mapped",[33394]],[[12171,12171],"mapped",[33400]],[[12172,12172],"mapped",[34381]],[[12173,12173],"mapped",[34411]],[[12174,12174],"mapped",[34880]],[[12175,12175],"mapped",[34892]],[[12176,12176],"mapped",[34915]],[[12177,12177],"mapped",[35198]],[[12178,12178],"mapped",[35211]],[[12179,12179],"mapped",[35282]],[[12180,12180],"mapped",[35328]],[[12181,12181],"mapped",[35895]],[[12182,12182],"mapped",[35910]],[[12183,12183],"mapped",[35925]],[[12184,12184],"mapped",[35960]],[[12185,12185],"mapped",[35997]],[[12186,12186],"mapped",[36196]],[[12187,12187],"mapped",[36208]],[[12188,12188],"mapped",[36275]],[[12189,12189],"mapped",[36523]],[[12190,12190],"mapped",[36554]],[[12191,12191],"mapped",[36763]],[[12192,12192],"mapped",[36784]],[[12193,12193],"mapped",[36789]],[[12194,12194],"mapped",[37009]],[[12195,12195],"mapped",[37193]],[[12196,12196],"mapped",[37318]],[[12197,12197],"mapped",[37324]],[[12198,12198],"mapped",[37329]],[[12199,12199],"mapped",[38263]],[[12200,12200],"mapped",[38272]],[[12201,12201],"mapped",[38428]],[[12202,12202],"mapped",[38582]],[[12203,12203],"mapped",[38585]],[[12204,12204],"mapped",[38632]],[[12205,12205],"mapped",[38737]],[[12206,12206],"mapped",[38750]],[[12207,12207],"mapped",[38754]],[[12208,12208],"mapped",[38761]],[[12209,12209],"mapped",[38859]],[[12210,12210],"mapped",[38893]],[[12211,12211],"mapped",[38899]],[[12212,12212],"mapped",[38913]],[[12213,12213],"mapped",[39080]],[[12214,12214],"mapped",[39131]],[[12215,12215],"mapped",[39135]],[[12216,12216],"mapped",[39318]],[[12217,12217],"mapped",[39321]],[[12218,12218],"mapped",[39340]],[[12219,12219],"mapped",[39592]],[[12220,12220],"mapped",[39640]],[[12221,12221],"mapped",[39647]],[[12222,12222],"mapped",[39717]],[[12223,12223],"mapped",[39727]],[[12224,12224],"mapped",[39730]],[[12225,12225],"mapped",[39740]],[[12226,12226],"mapped",[39770]],[[12227,12227],"mapped",[40165]],[[12228,12228],"mapped",[40565]],[[12229,12229],"mapped",[40575]],[[12230,12230],"mapped",[40613]],[[12231,12231],"mapped",[40635]],[[12232,12232],"mapped",[40643]],[[12233,12233],"mapped",[40653]],[[12234,12234],"mapped",[40657]],[[12235,12235],"mapped",[40697]],[[12236,12236],"mapped",[40701]],[[12237,12237],"mapped",[40718]],[[12238,12238],"mapped",[40723]],[[12239,12239],"mapped",[40736]],[[12240,12240],"mapped",[40763]],[[12241,12241],"mapped",[40778]],[[12242,12242],"mapped",[40786]],[[12243,12243],"mapped",[40845]],[[12244,12244],"mapped",[40860]],[[12245,12245],"mapped",[40864]],[[12246,12271],"disallowed"],[[12272,12283],"disallowed"],[[12284,12287],"disallowed"],[[12288,12288],"disallowed_STD3_mapped",[32]],[[12289,12289],"valid",[],"NV8"],[[12290,12290],"mapped",[46]],[[12291,12292],"valid",[],"NV8"],[[12293,12295],"valid"],[[12296,12329],"valid",[],"NV8"],[[12330,12333],"valid"],[[12334,12341],"valid",[],"NV8"],[[12342,12342],"mapped",[12306]],[[12343,12343],"valid",[],"NV8"],[[12344,12344],"mapped",[21313]],[[12345,12345],"mapped",[21316]],[[12346,12346],"mapped",[21317]],[[12347,12347],"valid",[],"NV8"],[[12348,12348],"valid"],[[12349,12349],"valid",[],"NV8"],[[12350,12350],"valid",[],"NV8"],[[12351,12351],"valid",[],"NV8"],[[12352,12352],"disallowed"],[[12353,12436],"valid"],[[12437,12438],"valid"],[[12439,12440],"disallowed"],[[12441,12442],"valid"],[[12443,12443],"disallowed_STD3_mapped",[32,12441]],[[12444,12444],"disallowed_STD3_mapped",[32,12442]],[[12445,12446],"valid"],[[12447,12447],"mapped",[12424,12426]],[[12448,12448],"valid",[],"NV8"],[[12449,12542],"valid"],[[12543,12543],"mapped",[12467,12488]],[[12544,12548],"disallowed"],[[12549,12588],"valid"],[[12589,12589],"valid"],[[12590,12592],"disallowed"],[[12593,12593],"mapped",[4352]],[[12594,12594],"mapped",[4353]],[[12595,12595],"mapped",[4522]],[[12596,12596],"mapped",[4354]],[[12597,12597],"mapped",[4524]],[[12598,12598],"mapped",[4525]],[[12599,12599],"mapped",[4355]],[[12600,12600],"mapped",[4356]],[[12601,12601],"mapped",[4357]],[[12602,12602],"mapped",[4528]],[[12603,12603],"mapped",[4529]],[[12604,12604],"mapped",[4530]],[[12605,12605],"mapped",[4531]],[[12606,12606],"mapped",[4532]],[[12607,12607],"mapped",[4533]],[[12608,12608],"mapped",[4378]],[[12609,12609],"mapped",[4358]],[[12610,12610],"mapped",[4359]],[[12611,12611],"mapped",[4360]],[[12612,12612],"mapped",[4385]],[[12613,12613],"mapped",[4361]],[[12614,12614],"mapped",[4362]],[[12615,12615],"mapped",[4363]],[[12616,12616],"mapped",[4364]],[[12617,12617],"mapped",[4365]],[[12618,12618],"mapped",[4366]],[[12619,12619],"mapped",[4367]],[[12620,12620],"mapped",[4368]],[[12621,12621],"mapped",[4369]],[[12622,12622],"mapped",[4370]],[[12623,12623],"mapped",[4449]],[[12624,12624],"mapped",[4450]],[[12625,12625],"mapped",[4451]],[[12626,12626],"mapped",[4452]],[[12627,12627],"mapped",[4453]],[[12628,12628],"mapped",[4454]],[[12629,12629],"mapped",[4455]],[[12630,12630],"mapped",[4456]],[[12631,12631],"mapped",[4457]],[[12632,12632],"mapped",[4458]],[[12633,12633],"mapped",[4459]],[[12634,12634],"mapped",[4460]],[[12635,12635],"mapped",[4461]],[[12636,12636],"mapped",[4462]],[[12637,12637],"mapped",[4463]],[[12638,12638],"mapped",[4464]],[[12639,12639],"mapped",[4465]],[[12640,12640],"mapped",[4466]],[[12641,12641],"mapped",[4467]],[[12642,12642],"mapped",[4468]],[[12643,12643],"mapped",[4469]],[[12644,12644],"disallowed"],[[12645,12645],"mapped",[4372]],[[12646,12646],"mapped",[4373]],[[12647,12647],"mapped",[4551]],[[12648,12648],"mapped",[4552]],[[12649,12649],"mapped",[4556]],[[12650,12650],"mapped",[4558]],[[12651,12651],"mapped",[4563]],[[12652,12652],"mapped",[4567]],[[12653,12653],"mapped",[4569]],[[12654,12654],"mapped",[4380]],[[12655,12655],"mapped",[4573]],[[12656,12656],"mapped",[4575]],[[12657,12657],"mapped",[4381]],[[12658,12658],"mapped",[4382]],[[12659,12659],"mapped",[4384]],[[12660,12660],"mapped",[4386]],[[12661,12661],"mapped",[4387]],[[12662,12662],"mapped",[4391]],[[12663,12663],"mapped",[4393]],[[12664,12664],"mapped",[4395]],[[12665,12665],"mapped",[4396]],[[12666,12666],"mapped",[4397]],[[12667,12667],"mapped",[4398]],[[12668,12668],"mapped",[4399]],[[12669,12669],"mapped",[4402]],[[12670,12670],"mapped",[4406]],[[12671,12671],"mapped",[4416]],[[12672,12672],"mapped",[4423]],[[12673,12673],"mapped",[4428]],[[12674,12674],"mapped",[4593]],[[12675,12675],"mapped",[4594]],[[12676,12676],"mapped",[4439]],[[12677,12677],"mapped",[4440]],[[12678,12678],"mapped",[4441]],[[12679,12679],"mapped",[4484]],[[12680,12680],"mapped",[4485]],[[12681,12681],"mapped",[4488]],[[12682,12682],"mapped",[4497]],[[12683,12683],"mapped",[4498]],[[12684,12684],"mapped",[4500]],[[12685,12685],"mapped",[4510]],[[12686,12686],"mapped",[4513]],[[12687,12687],"disallowed"],[[12688,12689],"valid",[],"NV8"],[[12690,12690],"mapped",[19968]],[[12691,12691],"mapped",[20108]],[[12692,12692],"mapped",[19977]],[[12693,12693],"mapped",[22235]],[[12694,12694],"mapped",[19978]],[[12695,12695],"mapped",[20013]],[[12696,12696],"mapped",[19979]],[[12697,12697],"mapped",[30002]],[[12698,12698],"mapped",[20057]],[[12699,12699],"mapped",[19993]],[[12700,12700],"mapped",[19969]],[[12701,12701],"mapped",[22825]],[[12702,12702],"mapped",[22320]],[[12703,12703],"mapped",[20154]],[[12704,12727],"valid"],[[12728,12730],"valid"],[[12731,12735],"disallowed"],[[12736,12751],"valid",[],"NV8"],[[12752,12771],"valid",[],"NV8"],[[12772,12783],"disallowed"],[[12784,12799],"valid"],[[12800,12800],"disallowed_STD3_mapped",[40,4352,41]],[[12801,12801],"disallowed_STD3_mapped",[40,4354,41]],[[12802,12802],"disallowed_STD3_mapped",[40,4355,41]],[[12803,12803],"disallowed_STD3_mapped",[40,4357,41]],[[12804,12804],"disallowed_STD3_mapped",[40,4358,41]],[[12805,12805],"disallowed_STD3_mapped",[40,4359,41]],[[12806,12806],"disallowed_STD3_mapped",[40,4361,41]],[[12807,12807],"disallowed_STD3_mapped",[40,4363,41]],[[12808,12808],"disallowed_STD3_mapped",[40,4364,41]],[[12809,12809],"disallowed_STD3_mapped",[40,4366,41]],[[12810,12810],"disallowed_STD3_mapped",[40,4367,41]],[[12811,12811],"disallowed_STD3_mapped",[40,4368,41]],[[12812,12812],"disallowed_STD3_mapped",[40,4369,41]],[[12813,12813],"disallowed_STD3_mapped",[40,4370,41]],[[12814,12814],"disallowed_STD3_mapped",[40,44032,41]],[[12815,12815],"disallowed_STD3_mapped",[40,45208,41]],[[12816,12816],"disallowed_STD3_mapped",[40,45796,41]],[[12817,12817],"disallowed_STD3_mapped",[40,46972,41]],[[12818,12818],"disallowed_STD3_mapped",[40,47560,41]],[[12819,12819],"disallowed_STD3_mapped",[40,48148,41]],[[12820,12820],"disallowed_STD3_mapped",[40,49324,41]],[[12821,12821],"disallowed_STD3_mapped",[40,50500,41]],[[12822,12822],"disallowed_STD3_mapped",[40,51088,41]],[[12823,12823],"disallowed_STD3_mapped",[40,52264,41]],[[12824,12824],"disallowed_STD3_mapped",[40,52852,41]],[[12825,12825],"disallowed_STD3_mapped",[40,53440,41]],[[12826,12826],"disallowed_STD3_mapped",[40,54028,41]],[[12827,12827],"disallowed_STD3_mapped",[40,54616,41]],[[12828,12828],"disallowed_STD3_mapped",[40,51452,41]],[[12829,12829],"disallowed_STD3_mapped",[40,50724,51204,41]],[[12830,12830],"disallowed_STD3_mapped",[40,50724,54980,41]],[[12831,12831],"disallowed"],[[12832,12832],"disallowed_STD3_mapped",[40,19968,41]],[[12833,12833],"disallowed_STD3_mapped",[40,20108,41]],[[12834,12834],"disallowed_STD3_mapped",[40,19977,41]],[[12835,12835],"disallowed_STD3_mapped",[40,22235,41]],[[12836,12836],"disallowed_STD3_mapped",[40,20116,41]],[[12837,12837],"disallowed_STD3_mapped",[40,20845,41]],[[12838,12838],"disallowed_STD3_mapped",[40,19971,41]],[[12839,12839],"disallowed_STD3_mapped",[40,20843,41]],[[12840,12840],"disallowed_STD3_mapped",[40,20061,41]],[[12841,12841],"disallowed_STD3_mapped",[40,21313,41]],[[12842,12842],"disallowed_STD3_mapped",[40,26376,41]],[[12843,12843],"disallowed_STD3_mapped",[40,28779,41]],[[12844,12844],"disallowed_STD3_mapped",[40,27700,41]],[[12845,12845],"disallowed_STD3_mapped",[40,26408,41]],[[12846,12846],"disallowed_STD3_mapped",[40,37329,41]],[[12847,12847],"disallowed_STD3_mapped",[40,22303,41]],[[12848,12848],"disallowed_STD3_mapped",[40,26085,41]],[[12849,12849],"disallowed_STD3_mapped",[40,26666,41]],[[12850,12850],"disallowed_STD3_mapped",[40,26377,41]],[[12851,12851],"disallowed_STD3_mapped",[40,31038,41]],[[12852,12852],"disallowed_STD3_mapped",[40,21517,41]],[[12853,12853],"disallowed_STD3_mapped",[40,29305,41]],[[12854,12854],"disallowed_STD3_mapped",[40,36001,41]],[[12855,12855],"disallowed_STD3_mapped",[40,31069,41]],[[12856,12856],"disallowed_STD3_mapped",[40,21172,41]],[[12857,12857],"disallowed_STD3_mapped",[40,20195,41]],[[12858,12858],"disallowed_STD3_mapped",[40,21628,41]],[[12859,12859],"disallowed_STD3_mapped",[40,23398,41]],[[12860,12860],"disallowed_STD3_mapped",[40,30435,41]],[[12861,12861],"disallowed_STD3_mapped",[40,20225,41]],[[12862,12862],"disallowed_STD3_mapped",[40,36039,41]],[[12863,12863],"disallowed_STD3_mapped",[40,21332,41]],[[12864,12864],"disallowed_STD3_mapped",[40,31085,41]],[[12865,12865],"disallowed_STD3_mapped",[40,20241,41]],[[12866,12866],"disallowed_STD3_mapped",[40,33258,41]],[[12867,12867],"disallowed_STD3_mapped",[40,33267,41]],[[12868,12868],"mapped",[21839]],[[12869,12869],"mapped",[24188]],[[12870,12870],"mapped",[25991]],[[12871,12871],"mapped",[31631]],[[12872,12879],"valid",[],"NV8"],[[12880,12880],"mapped",[112,116,101]],[[12881,12881],"mapped",[50,49]],[[12882,12882],"mapped",[50,50]],[[12883,12883],"mapped",[50,51]],[[12884,12884],"mapped",[50,52]],[[12885,12885],"mapped",[50,53]],[[12886,12886],"mapped",[50,54]],[[12887,12887],"mapped",[50,55]],[[12888,12888],"mapped",[50,56]],[[12889,12889],"mapped",[50,57]],[[12890,12890],"mapped",[51,48]],[[12891,12891],"mapped",[51,49]],[[12892,12892],"mapped",[51,50]],[[12893,12893],"mapped",[51,51]],[[12894,12894],"mapped",[51,52]],[[12895,12895],"mapped",[51,53]],[[12896,12896],"mapped",[4352]],[[12897,12897],"mapped",[4354]],[[12898,12898],"mapped",[4355]],[[12899,12899],"mapped",[4357]],[[12900,12900],"mapped",[4358]],[[12901,12901],"mapped",[4359]],[[12902,12902],"mapped",[4361]],[[12903,12903],"mapped",[4363]],[[12904,12904],"mapped",[4364]],[[12905,12905],"mapped",[4366]],[[12906,12906],"mapped",[4367]],[[12907,12907],"mapped",[4368]],[[12908,12908],"mapped",[4369]],[[12909,12909],"mapped",[4370]],[[12910,12910],"mapped",[44032]],[[12911,12911],"mapped",[45208]],[[12912,12912],"mapped",[45796]],[[12913,12913],"mapped",[46972]],[[12914,12914],"mapped",[47560]],[[12915,12915],"mapped",[48148]],[[12916,12916],"mapped",[49324]],[[12917,12917],"mapped",[50500]],[[12918,12918],"mapped",[51088]],[[12919,12919],"mapped",[52264]],[[12920,12920],"mapped",[52852]],[[12921,12921],"mapped",[53440]],[[12922,12922],"mapped",[54028]],[[12923,12923],"mapped",[54616]],[[12924,12924],"mapped",[52280,44256]],[[12925,12925],"mapped",[51452,51032]],[[12926,12926],"mapped",[50864]],[[12927,12927],"valid",[],"NV8"],[[12928,12928],"mapped",[19968]],[[12929,12929],"mapped",[20108]],[[12930,12930],"mapped",[19977]],[[12931,12931],"mapped",[22235]],[[12932,12932],"mapped",[20116]],[[12933,12933],"mapped",[20845]],[[12934,12934],"mapped",[19971]],[[12935,12935],"mapped",[20843]],[[12936,12936],"mapped",[20061]],[[12937,12937],"mapped",[21313]],[[12938,12938],"mapped",[26376]],[[12939,12939],"mapped",[28779]],[[12940,12940],"mapped",[27700]],[[12941,12941],"mapped",[26408]],[[12942,12942],"mapped",[37329]],[[12943,12943],"mapped",[22303]],[[12944,12944],"mapped",[26085]],[[12945,12945],"mapped",[26666]],[[12946,12946],"mapped",[26377]],[[12947,12947],"mapped",[31038]],[[12948,12948],"mapped",[21517]],[[12949,12949],"mapped",[29305]],[[12950,12950],"mapped",[36001]],[[12951,12951],"mapped",[31069]],[[12952,12952],"mapped",[21172]],[[12953,12953],"mapped",[31192]],[[12954,12954],"mapped",[30007]],[[12955,12955],"mapped",[22899]],[[12956,12956],"mapped",[36969]],[[12957,12957],"mapped",[20778]],[[12958,12958],"mapped",[21360]],[[12959,12959],"mapped",[27880]],[[12960,12960],"mapped",[38917]],[[12961,12961],"mapped",[20241]],[[12962,12962],"mapped",[20889]],[[12963,12963],"mapped",[27491]],[[12964,12964],"mapped",[19978]],[[12965,12965],"mapped",[20013]],[[12966,12966],"mapped",[19979]],[[12967,12967],"mapped",[24038]],[[12968,12968],"mapped",[21491]],[[12969,12969],"mapped",[21307]],[[12970,12970],"mapped",[23447]],[[12971,12971],"mapped",[23398]],[[12972,12972],"mapped",[30435]],[[12973,12973],"mapped",[20225]],[[12974,12974],"mapped",[36039]],[[12975,12975],"mapped",[21332]],[[12976,12976],"mapped",[22812]],[[12977,12977],"mapped",[51,54]],[[12978,12978],"mapped",[51,55]],[[12979,12979],"mapped",[51,56]],[[12980,12980],"mapped",[51,57]],[[12981,12981],"mapped",[52,48]],[[12982,12982],"mapped",[52,49]],[[12983,12983],"mapped",[52,50]],[[12984,12984],"mapped",[52,51]],[[12985,12985],"mapped",[52,52]],[[12986,12986],"mapped",[52,53]],[[12987,12987],"mapped",[52,54]],[[12988,12988],"mapped",[52,55]],[[12989,12989],"mapped",[52,56]],[[12990,12990],"mapped",[52,57]],[[12991,12991],"mapped",[53,48]],[[12992,12992],"mapped",[49,26376]],[[12993,12993],"mapped",[50,26376]],[[12994,12994],"mapped",[51,26376]],[[12995,12995],"mapped",[52,26376]],[[12996,12996],"mapped",[53,26376]],[[12997,12997],"mapped",[54,26376]],[[12998,12998],"mapped",[55,26376]],[[12999,12999],"mapped",[56,26376]],[[13e3,13e3],"mapped",[57,26376]],[[13001,13001],"mapped",[49,48,26376]],[[13002,13002],"mapped",[49,49,26376]],[[13003,13003],"mapped",[49,50,26376]],[[13004,13004],"mapped",[104,103]],[[13005,13005],"mapped",[101,114,103]],[[13006,13006],"mapped",[101,118]],[[13007,13007],"mapped",[108,116,100]],[[13008,13008],"mapped",[12450]],[[13009,13009],"mapped",[12452]],[[13010,13010],"mapped",[12454]],[[13011,13011],"mapped",[12456]],[[13012,13012],"mapped",[12458]],[[13013,13013],"mapped",[12459]],[[13014,13014],"mapped",[12461]],[[13015,13015],"mapped",[12463]],[[13016,13016],"mapped",[12465]],[[13017,13017],"mapped",[12467]],[[13018,13018],"mapped",[12469]],[[13019,13019],"mapped",[12471]],[[13020,13020],"mapped",[12473]],[[13021,13021],"mapped",[12475]],[[13022,13022],"mapped",[12477]],[[13023,13023],"mapped",[12479]],[[13024,13024],"mapped",[12481]],[[13025,13025],"mapped",[12484]],[[13026,13026],"mapped",[12486]],[[13027,13027],"mapped",[12488]],[[13028,13028],"mapped",[12490]],[[13029,13029],"mapped",[12491]],[[13030,13030],"mapped",[12492]],[[13031,13031],"mapped",[12493]],[[13032,13032],"mapped",[12494]],[[13033,13033],"mapped",[12495]],[[13034,13034],"mapped",[12498]],[[13035,13035],"mapped",[12501]],[[13036,13036],"mapped",[12504]],[[13037,13037],"mapped",[12507]],[[13038,13038],"mapped",[12510]],[[13039,13039],"mapped",[12511]],[[13040,13040],"mapped",[12512]],[[13041,13041],"mapped",[12513]],[[13042,13042],"mapped",[12514]],[[13043,13043],"mapped",[12516]],[[13044,13044],"mapped",[12518]],[[13045,13045],"mapped",[12520]],[[13046,13046],"mapped",[12521]],[[13047,13047],"mapped",[12522]],[[13048,13048],"mapped",[12523]],[[13049,13049],"mapped",[12524]],[[13050,13050],"mapped",[12525]],[[13051,13051],"mapped",[12527]],[[13052,13052],"mapped",[12528]],[[13053,13053],"mapped",[12529]],[[13054,13054],"mapped",[12530]],[[13055,13055],"disallowed"],[[13056,13056],"mapped",[12450,12497,12540,12488]],[[13057,13057],"mapped",[12450,12523,12501,12449]],[[13058,13058],"mapped",[12450,12531,12506,12450]],[[13059,13059],"mapped",[12450,12540,12523]],[[13060,13060],"mapped",[12452,12491,12531,12464]],[[13061,13061],"mapped",[12452,12531,12481]],[[13062,13062],"mapped",[12454,12457,12531]],[[13063,13063],"mapped",[12456,12473,12463,12540,12489]],[[13064,13064],"mapped",[12456,12540,12459,12540]],[[13065,13065],"mapped",[12458,12531,12473]],[[13066,13066],"mapped",[12458,12540,12512]],[[13067,13067],"mapped",[12459,12452,12522]],[[13068,13068],"mapped",[12459,12521,12483,12488]],[[13069,13069],"mapped",[12459,12525,12522,12540]],[[13070,13070],"mapped",[12460,12525,12531]],[[13071,13071],"mapped",[12460,12531,12510]],[[13072,13072],"mapped",[12462,12460]],[[13073,13073],"mapped",[12462,12491,12540]],[[13074,13074],"mapped",[12461,12517,12522,12540]],[[13075,13075],"mapped",[12462,12523,12480,12540]],[[13076,13076],"mapped",[12461,12525]],[[13077,13077],"mapped",[12461,12525,12464,12521,12512]],[[13078,13078],"mapped",[12461,12525,12513,12540,12488,12523]],[[13079,13079],"mapped",[12461,12525,12527,12483,12488]],[[13080,13080],"mapped",[12464,12521,12512]],[[13081,13081],"mapped",[12464,12521,12512,12488,12531]],[[13082,13082],"mapped",[12463,12523,12476,12452,12525]],[[13083,13083],"mapped",[12463,12525,12540,12493]],[[13084,13084],"mapped",[12465,12540,12473]],[[13085,13085],"mapped",[12467,12523,12490]],[[13086,13086],"mapped",[12467,12540,12509]],[[13087,13087],"mapped",[12469,12452,12463,12523]],[[13088,13088],"mapped",[12469,12531,12481,12540,12512]],[[13089,13089],"mapped",[12471,12522,12531,12464]],[[13090,13090],"mapped",[12475,12531,12481]],[[13091,13091],"mapped",[12475,12531,12488]],[[13092,13092],"mapped",[12480,12540,12473]],[[13093,13093],"mapped",[12487,12471]],[[13094,13094],"mapped",[12489,12523]],[[13095,13095],"mapped",[12488,12531]],[[13096,13096],"mapped",[12490,12494]],[[13097,13097],"mapped",[12494,12483,12488]],[[13098,13098],"mapped",[12495,12452,12484]],[[13099,13099],"mapped",[12497,12540,12475,12531,12488]],[[13100,13100],"mapped",[12497,12540,12484]],[[13101,13101],"mapped",[12496,12540,12524,12523]],[[13102,13102],"mapped",[12500,12450,12473,12488,12523]],[[13103,13103],"mapped",[12500,12463,12523]],[[13104,13104],"mapped",[12500,12467]],[[13105,13105],"mapped",[12499,12523]],[[13106,13106],"mapped",[12501,12449,12521,12483,12489]],[[13107,13107],"mapped",[12501,12451,12540,12488]],[[13108,13108],"mapped",[12502,12483,12471,12455,12523]],[[13109,13109],"mapped",[12501,12521,12531]],[[13110,13110],"mapped",[12504,12463,12479,12540,12523]],[[13111,13111],"mapped",[12506,12477]],[[13112,13112],"mapped",[12506,12491,12498]],[[13113,13113],"mapped",[12504,12523,12484]],[[13114,13114],"mapped",[12506,12531,12473]],[[13115,13115],"mapped",[12506,12540,12472]],[[13116,13116],"mapped",[12505,12540,12479]],[[13117,13117],"mapped",[12509,12452,12531,12488]],[[13118,13118],"mapped",[12508,12523,12488]],[[13119,13119],"mapped",[12507,12531]],[[13120,13120],"mapped",[12509,12531,12489]],[[13121,13121],"mapped",[12507,12540,12523]],[[13122,13122],"mapped",[12507,12540,12531]],[[13123,13123],"mapped",[12510,12452,12463,12525]],[[13124,13124],"mapped",[12510,12452,12523]],[[13125,13125],"mapped",[12510,12483,12495]],[[13126,13126],"mapped",[12510,12523,12463]],[[13127,13127],"mapped",[12510,12531,12471,12519,12531]],[[13128,13128],"mapped",[12511,12463,12525,12531]],[[13129,13129],"mapped",[12511,12522]],[[13130,13130],"mapped",[12511,12522,12496,12540,12523]],[[13131,13131],"mapped",[12513,12460]],[[13132,13132],"mapped",[12513,12460,12488,12531]],[[13133,13133],"mapped",[12513,12540,12488,12523]],[[13134,13134],"mapped",[12516,12540,12489]],[[13135,13135],"mapped",[12516,12540,12523]],[[13136,13136],"mapped",[12518,12450,12531]],[[13137,13137],"mapped",[12522,12483,12488,12523]],[[13138,13138],"mapped",[12522,12521]],[[13139,13139],"mapped",[12523,12500,12540]],[[13140,13140],"mapped",[12523,12540,12502,12523]],[[13141,13141],"mapped",[12524,12512]],[[13142,13142],"mapped",[12524,12531,12488,12466,12531]],[[13143,13143],"mapped",[12527,12483,12488]],[[13144,13144],"mapped",[48,28857]],[[13145,13145],"mapped",[49,28857]],[[13146,13146],"mapped",[50,28857]],[[13147,13147],"mapped",[51,28857]],[[13148,13148],"mapped",[52,28857]],[[13149,13149],"mapped",[53,28857]],[[13150,13150],"mapped",[54,28857]],[[13151,13151],"mapped",[55,28857]],[[13152,13152],"mapped",[56,28857]],[[13153,13153],"mapped",[57,28857]],[[13154,13154],"mapped",[49,48,28857]],[[13155,13155],"mapped",[49,49,28857]],[[13156,13156],"mapped",[49,50,28857]],[[13157,13157],"mapped",[49,51,28857]],[[13158,13158],"mapped",[49,52,28857]],[[13159,13159],"mapped",[49,53,28857]],[[13160,13160],"mapped",[49,54,28857]],[[13161,13161],"mapped",[49,55,28857]],[[13162,13162],"mapped",[49,56,28857]],[[13163,13163],"mapped",[49,57,28857]],[[13164,13164],"mapped",[50,48,28857]],[[13165,13165],"mapped",[50,49,28857]],[[13166,13166],"mapped",[50,50,28857]],[[13167,13167],"mapped",[50,51,28857]],[[13168,13168],"mapped",[50,52,28857]],[[13169,13169],"mapped",[104,112,97]],[[13170,13170],"mapped",[100,97]],[[13171,13171],"mapped",[97,117]],[[13172,13172],"mapped",[98,97,114]],[[13173,13173],"mapped",[111,118]],[[13174,13174],"mapped",[112,99]],[[13175,13175],"mapped",[100,109]],[[13176,13176],"mapped",[100,109,50]],[[13177,13177],"mapped",[100,109,51]],[[13178,13178],"mapped",[105,117]],[[13179,13179],"mapped",[24179,25104]],[[13180,13180],"mapped",[26157,21644]],[[13181,13181],"mapped",[22823,27491]],[[13182,13182],"mapped",[26126,27835]],[[13183,13183],"mapped",[26666,24335,20250,31038]],[[13184,13184],"mapped",[112,97]],[[13185,13185],"mapped",[110,97]],[[13186,13186],"mapped",[956,97]],[[13187,13187],"mapped",[109,97]],[[13188,13188],"mapped",[107,97]],[[13189,13189],"mapped",[107,98]],[[13190,13190],"mapped",[109,98]],[[13191,13191],"mapped",[103,98]],[[13192,13192],"mapped",[99,97,108]],[[13193,13193],"mapped",[107,99,97,108]],[[13194,13194],"mapped",[112,102]],[[13195,13195],"mapped",[110,102]],[[13196,13196],"mapped",[956,102]],[[13197,13197],"mapped",[956,103]],[[13198,13198],"mapped",[109,103]],[[13199,13199],"mapped",[107,103]],[[13200,13200],"mapped",[104,122]],[[13201,13201],"mapped",[107,104,122]],[[13202,13202],"mapped",[109,104,122]],[[13203,13203],"mapped",[103,104,122]],[[13204,13204],"mapped",[116,104,122]],[[13205,13205],"mapped",[956,108]],[[13206,13206],"mapped",[109,108]],[[13207,13207],"mapped",[100,108]],[[13208,13208],"mapped",[107,108]],[[13209,13209],"mapped",[102,109]],[[13210,13210],"mapped",[110,109]],[[13211,13211],"mapped",[956,109]],[[13212,13212],"mapped",[109,109]],[[13213,13213],"mapped",[99,109]],[[13214,13214],"mapped",[107,109]],[[13215,13215],"mapped",[109,109,50]],[[13216,13216],"mapped",[99,109,50]],[[13217,13217],"mapped",[109,50]],[[13218,13218],"mapped",[107,109,50]],[[13219,13219],"mapped",[109,109,51]],[[13220,13220],"mapped",[99,109,51]],[[13221,13221],"mapped",[109,51]],[[13222,13222],"mapped",[107,109,51]],[[13223,13223],"mapped",[109,8725,115]],[[13224,13224],"mapped",[109,8725,115,50]],[[13225,13225],"mapped",[112,97]],[[13226,13226],"mapped",[107,112,97]],[[13227,13227],"mapped",[109,112,97]],[[13228,13228],"mapped",[103,112,97]],[[13229,13229],"mapped",[114,97,100]],[[13230,13230],"mapped",[114,97,100,8725,115]],[[13231,13231],"mapped",[114,97,100,8725,115,50]],[[13232,13232],"mapped",[112,115]],[[13233,13233],"mapped",[110,115]],[[13234,13234],"mapped",[956,115]],[[13235,13235],"mapped",[109,115]],[[13236,13236],"mapped",[112,118]],[[13237,13237],"mapped",[110,118]],[[13238,13238],"mapped",[956,118]],[[13239,13239],"mapped",[109,118]],[[13240,13240],"mapped",[107,118]],[[13241,13241],"mapped",[109,118]],[[13242,13242],"mapped",[112,119]],[[13243,13243],"mapped",[110,119]],[[13244,13244],"mapped",[956,119]],[[13245,13245],"mapped",[109,119]],[[13246,13246],"mapped",[107,119]],[[13247,13247],"mapped",[109,119]],[[13248,13248],"mapped",[107,969]],[[13249,13249],"mapped",[109,969]],[[13250,13250],"disallowed"],[[13251,13251],"mapped",[98,113]],[[13252,13252],"mapped",[99,99]],[[13253,13253],"mapped",[99,100]],[[13254,13254],"mapped",[99,8725,107,103]],[[13255,13255],"disallowed"],[[13256,13256],"mapped",[100,98]],[[13257,13257],"mapped",[103,121]],[[13258,13258],"mapped",[104,97]],[[13259,13259],"mapped",[104,112]],[[13260,13260],"mapped",[105,110]],[[13261,13261],"mapped",[107,107]],[[13262,13262],"mapped",[107,109]],[[13263,13263],"mapped",[107,116]],[[13264,13264],"mapped",[108,109]],[[13265,13265],"mapped",[108,110]],[[13266,13266],"mapped",[108,111,103]],[[13267,13267],"mapped",[108,120]],[[13268,13268],"mapped",[109,98]],[[13269,13269],"mapped",[109,105,108]],[[13270,13270],"mapped",[109,111,108]],[[13271,13271],"mapped",[112,104]],[[13272,13272],"disallowed"],[[13273,13273],"mapped",[112,112,109]],[[13274,13274],"mapped",[112,114]],[[13275,13275],"mapped",[115,114]],[[13276,13276],"mapped",[115,118]],[[13277,13277],"mapped",[119,98]],[[13278,13278],"mapped",[118,8725,109]],[[13279,13279],"mapped",[97,8725,109]],[[13280,13280],"mapped",[49,26085]],[[13281,13281],"mapped",[50,26085]],[[13282,13282],"mapped",[51,26085]],[[13283,13283],"mapped",[52,26085]],[[13284,13284],"mapped",[53,26085]],[[13285,13285],"mapped",[54,26085]],[[13286,13286],"mapped",[55,26085]],[[13287,13287],"mapped",[56,26085]],[[13288,13288],"mapped",[57,26085]],[[13289,13289],"mapped",[49,48,26085]],[[13290,13290],"mapped",[49,49,26085]],[[13291,13291],"mapped",[49,50,26085]],[[13292,13292],"mapped",[49,51,26085]],[[13293,13293],"mapped",[49,52,26085]],[[13294,13294],"mapped",[49,53,26085]],[[13295,13295],"mapped",[49,54,26085]],[[13296,13296],"mapped",[49,55,26085]],[[13297,13297],"mapped",[49,56,26085]],[[13298,13298],"mapped",[49,57,26085]],[[13299,13299],"mapped",[50,48,26085]],[[13300,13300],"mapped",[50,49,26085]],[[13301,13301],"mapped",[50,50,26085]],[[13302,13302],"mapped",[50,51,26085]],[[13303,13303],"mapped",[50,52,26085]],[[13304,13304],"mapped",[50,53,26085]],[[13305,13305],"mapped",[50,54,26085]],[[13306,13306],"mapped",[50,55,26085]],[[13307,13307],"mapped",[50,56,26085]],[[13308,13308],"mapped",[50,57,26085]],[[13309,13309],"mapped",[51,48,26085]],[[13310,13310],"mapped",[51,49,26085]],[[13311,13311],"mapped",[103,97,108]],[[13312,19893],"valid"],[[19894,19903],"disallowed"],[[19904,19967],"valid",[],"NV8"],[[19968,40869],"valid"],[[40870,40891],"valid"],[[40892,40899],"valid"],[[40900,40907],"valid"],[[40908,40908],"valid"],[[40909,40917],"valid"],[[40918,40959],"disallowed"],[[40960,42124],"valid"],[[42125,42127],"disallowed"],[[42128,42145],"valid",[],"NV8"],[[42146,42147],"valid",[],"NV8"],[[42148,42163],"valid",[],"NV8"],[[42164,42164],"valid",[],"NV8"],[[42165,42176],"valid",[],"NV8"],[[42177,42177],"valid",[],"NV8"],[[42178,42180],"valid",[],"NV8"],[[42181,42181],"valid",[],"NV8"],[[42182,42182],"valid",[],"NV8"],[[42183,42191],"disallowed"],[[42192,42237],"valid"],[[42238,42239],"valid",[],"NV8"],[[42240,42508],"valid"],[[42509,42511],"valid",[],"NV8"],[[42512,42539],"valid"],[[42540,42559],"disallowed"],[[42560,42560],"mapped",[42561]],[[42561,42561],"valid"],[[42562,42562],"mapped",[42563]],[[42563,42563],"valid"],[[42564,42564],"mapped",[42565]],[[42565,42565],"valid"],[[42566,42566],"mapped",[42567]],[[42567,42567],"valid"],[[42568,42568],"mapped",[42569]],[[42569,42569],"valid"],[[42570,42570],"mapped",[42571]],[[42571,42571],"valid"],[[42572,42572],"mapped",[42573]],[[42573,42573],"valid"],[[42574,42574],"mapped",[42575]],[[42575,42575],"valid"],[[42576,42576],"mapped",[42577]],[[42577,42577],"valid"],[[42578,42578],"mapped",[42579]],[[42579,42579],"valid"],[[42580,42580],"mapped",[42581]],[[42581,42581],"valid"],[[42582,42582],"mapped",[42583]],[[42583,42583],"valid"],[[42584,42584],"mapped",[42585]],[[42585,42585],"valid"],[[42586,42586],"mapped",[42587]],[[42587,42587],"valid"],[[42588,42588],"mapped",[42589]],[[42589,42589],"valid"],[[42590,42590],"mapped",[42591]],[[42591,42591],"valid"],[[42592,42592],"mapped",[42593]],[[42593,42593],"valid"],[[42594,42594],"mapped",[42595]],[[42595,42595],"valid"],[[42596,42596],"mapped",[42597]],[[42597,42597],"valid"],[[42598,42598],"mapped",[42599]],[[42599,42599],"valid"],[[42600,42600],"mapped",[42601]],[[42601,42601],"valid"],[[42602,42602],"mapped",[42603]],[[42603,42603],"valid"],[[42604,42604],"mapped",[42605]],[[42605,42607],"valid"],[[42608,42611],"valid",[],"NV8"],[[42612,42619],"valid"],[[42620,42621],"valid"],[[42622,42622],"valid",[],"NV8"],[[42623,42623],"valid"],[[42624,42624],"mapped",[42625]],[[42625,42625],"valid"],[[42626,42626],"mapped",[42627]],[[42627,42627],"valid"],[[42628,42628],"mapped",[42629]],[[42629,42629],"valid"],[[42630,42630],"mapped",[42631]],[[42631,42631],"valid"],[[42632,42632],"mapped",[42633]],[[42633,42633],"valid"],[[42634,42634],"mapped",[42635]],[[42635,42635],"valid"],[[42636,42636],"mapped",[42637]],[[42637,42637],"valid"],[[42638,42638],"mapped",[42639]],[[42639,42639],"valid"],[[42640,42640],"mapped",[42641]],[[42641,42641],"valid"],[[42642,42642],"mapped",[42643]],[[42643,42643],"valid"],[[42644,42644],"mapped",[42645]],[[42645,42645],"valid"],[[42646,42646],"mapped",[42647]],[[42647,42647],"valid"],[[42648,42648],"mapped",[42649]],[[42649,42649],"valid"],[[42650,42650],"mapped",[42651]],[[42651,42651],"valid"],[[42652,42652],"mapped",[1098]],[[42653,42653],"mapped",[1100]],[[42654,42654],"valid"],[[42655,42655],"valid"],[[42656,42725],"valid"],[[42726,42735],"valid",[],"NV8"],[[42736,42737],"valid"],[[42738,42743],"valid",[],"NV8"],[[42744,42751],"disallowed"],[[42752,42774],"valid",[],"NV8"],[[42775,42778],"valid"],[[42779,42783],"valid"],[[42784,42785],"valid",[],"NV8"],[[42786,42786],"mapped",[42787]],[[42787,42787],"valid"],[[42788,42788],"mapped",[42789]],[[42789,42789],"valid"],[[42790,42790],"mapped",[42791]],[[42791,42791],"valid"],[[42792,42792],"mapped",[42793]],[[42793,42793],"valid"],[[42794,42794],"mapped",[42795]],[[42795,42795],"valid"],[[42796,42796],"mapped",[42797]],[[42797,42797],"valid"],[[42798,42798],"mapped",[42799]],[[42799,42801],"valid"],[[42802,42802],"mapped",[42803]],[[42803,42803],"valid"],[[42804,42804],"mapped",[42805]],[[42805,42805],"valid"],[[42806,42806],"mapped",[42807]],[[42807,42807],"valid"],[[42808,42808],"mapped",[42809]],[[42809,42809],"valid"],[[42810,42810],"mapped",[42811]],[[42811,42811],"valid"],[[42812,42812],"mapped",[42813]],[[42813,42813],"valid"],[[42814,42814],"mapped",[42815]],[[42815,42815],"valid"],[[42816,42816],"mapped",[42817]],[[42817,42817],"valid"],[[42818,42818],"mapped",[42819]],[[42819,42819],"valid"],[[42820,42820],"mapped",[42821]],[[42821,42821],"valid"],[[42822,42822],"mapped",[42823]],[[42823,42823],"valid"],[[42824,42824],"mapped",[42825]],[[42825,42825],"valid"],[[42826,42826],"mapped",[42827]],[[42827,42827],"valid"],[[42828,42828],"mapped",[42829]],[[42829,42829],"valid"],[[42830,42830],"mapped",[42831]],[[42831,42831],"valid"],[[42832,42832],"mapped",[42833]],[[42833,42833],"valid"],[[42834,42834],"mapped",[42835]],[[42835,42835],"valid"],[[42836,42836],"mapped",[42837]],[[42837,42837],"valid"],[[42838,42838],"mapped",[42839]],[[42839,42839],"valid"],[[42840,42840],"mapped",[42841]],[[42841,42841],"valid"],[[42842,42842],"mapped",[42843]],[[42843,42843],"valid"],[[42844,42844],"mapped",[42845]],[[42845,42845],"valid"],[[42846,42846],"mapped",[42847]],[[42847,42847],"valid"],[[42848,42848],"mapped",[42849]],[[42849,42849],"valid"],[[42850,42850],"mapped",[42851]],[[42851,42851],"valid"],[[42852,42852],"mapped",[42853]],[[42853,42853],"valid"],[[42854,42854],"mapped",[42855]],[[42855,42855],"valid"],[[42856,42856],"mapped",[42857]],[[42857,42857],"valid"],[[42858,42858],"mapped",[42859]],[[42859,42859],"valid"],[[42860,42860],"mapped",[42861]],[[42861,42861],"valid"],[[42862,42862],"mapped",[42863]],[[42863,42863],"valid"],[[42864,42864],"mapped",[42863]],[[42865,42872],"valid"],[[42873,42873],"mapped",[42874]],[[42874,42874],"valid"],[[42875,42875],"mapped",[42876]],[[42876,42876],"valid"],[[42877,42877],"mapped",[7545]],[[42878,42878],"mapped",[42879]],[[42879,42879],"valid"],[[42880,42880],"mapped",[42881]],[[42881,42881],"valid"],[[42882,42882],"mapped",[42883]],[[42883,42883],"valid"],[[42884,42884],"mapped",[42885]],[[42885,42885],"valid"],[[42886,42886],"mapped",[42887]],[[42887,42888],"valid"],[[42889,42890],"valid",[],"NV8"],[[42891,42891],"mapped",[42892]],[[42892,42892],"valid"],[[42893,42893],"mapped",[613]],[[42894,42894],"valid"],[[42895,42895],"valid"],[[42896,42896],"mapped",[42897]],[[42897,42897],"valid"],[[42898,42898],"mapped",[42899]],[[42899,42899],"valid"],[[42900,42901],"valid"],[[42902,42902],"mapped",[42903]],[[42903,42903],"valid"],[[42904,42904],"mapped",[42905]],[[42905,42905],"valid"],[[42906,42906],"mapped",[42907]],[[42907,42907],"valid"],[[42908,42908],"mapped",[42909]],[[42909,42909],"valid"],[[42910,42910],"mapped",[42911]],[[42911,42911],"valid"],[[42912,42912],"mapped",[42913]],[[42913,42913],"valid"],[[42914,42914],"mapped",[42915]],[[42915,42915],"valid"],[[42916,42916],"mapped",[42917]],[[42917,42917],"valid"],[[42918,42918],"mapped",[42919]],[[42919,42919],"valid"],[[42920,42920],"mapped",[42921]],[[42921,42921],"valid"],[[42922,42922],"mapped",[614]],[[42923,42923],"mapped",[604]],[[42924,42924],"mapped",[609]],[[42925,42925],"mapped",[620]],[[42926,42927],"disallowed"],[[42928,42928],"mapped",[670]],[[42929,42929],"mapped",[647]],[[42930,42930],"mapped",[669]],[[42931,42931],"mapped",[43859]],[[42932,42932],"mapped",[42933]],[[42933,42933],"valid"],[[42934,42934],"mapped",[42935]],[[42935,42935],"valid"],[[42936,42998],"disallowed"],[[42999,42999],"valid"],[[43e3,43e3],"mapped",[295]],[[43001,43001],"mapped",[339]],[[43002,43002],"valid"],[[43003,43007],"valid"],[[43008,43047],"valid"],[[43048,43051],"valid",[],"NV8"],[[43052,43055],"disallowed"],[[43056,43065],"valid",[],"NV8"],[[43066,43071],"disallowed"],[[43072,43123],"valid"],[[43124,43127],"valid",[],"NV8"],[[43128,43135],"disallowed"],[[43136,43204],"valid"],[[43205,43213],"disallowed"],[[43214,43215],"valid",[],"NV8"],[[43216,43225],"valid"],[[43226,43231],"disallowed"],[[43232,43255],"valid"],[[43256,43258],"valid",[],"NV8"],[[43259,43259],"valid"],[[43260,43260],"valid",[],"NV8"],[[43261,43261],"valid"],[[43262,43263],"disallowed"],[[43264,43309],"valid"],[[43310,43311],"valid",[],"NV8"],[[43312,43347],"valid"],[[43348,43358],"disallowed"],[[43359,43359],"valid",[],"NV8"],[[43360,43388],"valid",[],"NV8"],[[43389,43391],"disallowed"],[[43392,43456],"valid"],[[43457,43469],"valid",[],"NV8"],[[43470,43470],"disallowed"],[[43471,43481],"valid"],[[43482,43485],"disallowed"],[[43486,43487],"valid",[],"NV8"],[[43488,43518],"valid"],[[43519,43519],"disallowed"],[[43520,43574],"valid"],[[43575,43583],"disallowed"],[[43584,43597],"valid"],[[43598,43599],"disallowed"],[[43600,43609],"valid"],[[43610,43611],"disallowed"],[[43612,43615],"valid",[],"NV8"],[[43616,43638],"valid"],[[43639,43641],"valid",[],"NV8"],[[43642,43643],"valid"],[[43644,43647],"valid"],[[43648,43714],"valid"],[[43715,43738],"disallowed"],[[43739,43741],"valid"],[[43742,43743],"valid",[],"NV8"],[[43744,43759],"valid"],[[43760,43761],"valid",[],"NV8"],[[43762,43766],"valid"],[[43767,43776],"disallowed"],[[43777,43782],"valid"],[[43783,43784],"disallowed"],[[43785,43790],"valid"],[[43791,43792],"disallowed"],[[43793,43798],"valid"],[[43799,43807],"disallowed"],[[43808,43814],"valid"],[[43815,43815],"disallowed"],[[43816,43822],"valid"],[[43823,43823],"disallowed"],[[43824,43866],"valid"],[[43867,43867],"valid",[],"NV8"],[[43868,43868],"mapped",[42791]],[[43869,43869],"mapped",[43831]],[[43870,43870],"mapped",[619]],[[43871,43871],"mapped",[43858]],[[43872,43875],"valid"],[[43876,43877],"valid"],[[43878,43887],"disallowed"],[[43888,43888],"mapped",[5024]],[[43889,43889],"mapped",[5025]],[[43890,43890],"mapped",[5026]],[[43891,43891],"mapped",[5027]],[[43892,43892],"mapped",[5028]],[[43893,43893],"mapped",[5029]],[[43894,43894],"mapped",[5030]],[[43895,43895],"mapped",[5031]],[[43896,43896],"mapped",[5032]],[[43897,43897],"mapped",[5033]],[[43898,43898],"mapped",[5034]],[[43899,43899],"mapped",[5035]],[[43900,43900],"mapped",[5036]],[[43901,43901],"mapped",[5037]],[[43902,43902],"mapped",[5038]],[[43903,43903],"mapped",[5039]],[[43904,43904],"mapped",[5040]],[[43905,43905],"mapped",[5041]],[[43906,43906],"mapped",[5042]],[[43907,43907],"mapped",[5043]],[[43908,43908],"mapped",[5044]],[[43909,43909],"mapped",[5045]],[[43910,43910],"mapped",[5046]],[[43911,43911],"mapped",[5047]],[[43912,43912],"mapped",[5048]],[[43913,43913],"mapped",[5049]],[[43914,43914],"mapped",[5050]],[[43915,43915],"mapped",[5051]],[[43916,43916],"mapped",[5052]],[[43917,43917],"mapped",[5053]],[[43918,43918],"mapped",[5054]],[[43919,43919],"mapped",[5055]],[[43920,43920],"mapped",[5056]],[[43921,43921],"mapped",[5057]],[[43922,43922],"mapped",[5058]],[[43923,43923],"mapped",[5059]],[[43924,43924],"mapped",[5060]],[[43925,43925],"mapped",[5061]],[[43926,43926],"mapped",[5062]],[[43927,43927],"mapped",[5063]],[[43928,43928],"mapped",[5064]],[[43929,43929],"mapped",[5065]],[[43930,43930],"mapped",[5066]],[[43931,43931],"mapped",[5067]],[[43932,43932],"mapped",[5068]],[[43933,43933],"mapped",[5069]],[[43934,43934],"mapped",[5070]],[[43935,43935],"mapped",[5071]],[[43936,43936],"mapped",[5072]],[[43937,43937],"mapped",[5073]],[[43938,43938],"mapped",[5074]],[[43939,43939],"mapped",[5075]],[[43940,43940],"mapped",[5076]],[[43941,43941],"mapped",[5077]],[[43942,43942],"mapped",[5078]],[[43943,43943],"mapped",[5079]],[[43944,43944],"mapped",[5080]],[[43945,43945],"mapped",[5081]],[[43946,43946],"mapped",[5082]],[[43947,43947],"mapped",[5083]],[[43948,43948],"mapped",[5084]],[[43949,43949],"mapped",[5085]],[[43950,43950],"mapped",[5086]],[[43951,43951],"mapped",[5087]],[[43952,43952],"mapped",[5088]],[[43953,43953],"mapped",[5089]],[[43954,43954],"mapped",[5090]],[[43955,43955],"mapped",[5091]],[[43956,43956],"mapped",[5092]],[[43957,43957],"mapped",[5093]],[[43958,43958],"mapped",[5094]],[[43959,43959],"mapped",[5095]],[[43960,43960],"mapped",[5096]],[[43961,43961],"mapped",[5097]],[[43962,43962],"mapped",[5098]],[[43963,43963],"mapped",[5099]],[[43964,43964],"mapped",[5100]],[[43965,43965],"mapped",[5101]],[[43966,43966],"mapped",[5102]],[[43967,43967],"mapped",[5103]],[[43968,44010],"valid"],[[44011,44011],"valid",[],"NV8"],[[44012,44013],"valid"],[[44014,44015],"disallowed"],[[44016,44025],"valid"],[[44026,44031],"disallowed"],[[44032,55203],"valid"],[[55204,55215],"disallowed"],[[55216,55238],"valid",[],"NV8"],[[55239,55242],"disallowed"],[[55243,55291],"valid",[],"NV8"],[[55292,55295],"disallowed"],[[55296,57343],"disallowed"],[[57344,63743],"disallowed"],[[63744,63744],"mapped",[35912]],[[63745,63745],"mapped",[26356]],[[63746,63746],"mapped",[36554]],[[63747,63747],"mapped",[36040]],[[63748,63748],"mapped",[28369]],[[63749,63749],"mapped",[20018]],[[63750,63750],"mapped",[21477]],[[63751,63752],"mapped",[40860]],[[63753,63753],"mapped",[22865]],[[63754,63754],"mapped",[37329]],[[63755,63755],"mapped",[21895]],[[63756,63756],"mapped",[22856]],[[63757,63757],"mapped",[25078]],[[63758,63758],"mapped",[30313]],[[63759,63759],"mapped",[32645]],[[63760,63760],"mapped",[34367]],[[63761,63761],"mapped",[34746]],[[63762,63762],"mapped",[35064]],[[63763,63763],"mapped",[37007]],[[63764,63764],"mapped",[27138]],[[63765,63765],"mapped",[27931]],[[63766,63766],"mapped",[28889]],[[63767,63767],"mapped",[29662]],[[63768,63768],"mapped",[33853]],[[63769,63769],"mapped",[37226]],[[63770,63770],"mapped",[39409]],[[63771,63771],"mapped",[20098]],[[63772,63772],"mapped",[21365]],[[63773,63773],"mapped",[27396]],[[63774,63774],"mapped",[29211]],[[63775,63775],"mapped",[34349]],[[63776,63776],"mapped",[40478]],[[63777,63777],"mapped",[23888]],[[63778,63778],"mapped",[28651]],[[63779,63779],"mapped",[34253]],[[63780,63780],"mapped",[35172]],[[63781,63781],"mapped",[25289]],[[63782,63782],"mapped",[33240]],[[63783,63783],"mapped",[34847]],[[63784,63784],"mapped",[24266]],[[63785,63785],"mapped",[26391]],[[63786,63786],"mapped",[28010]],[[63787,63787],"mapped",[29436]],[[63788,63788],"mapped",[37070]],[[63789,63789],"mapped",[20358]],[[63790,63790],"mapped",[20919]],[[63791,63791],"mapped",[21214]],[[63792,63792],"mapped",[25796]],[[63793,63793],"mapped",[27347]],[[63794,63794],"mapped",[29200]],[[63795,63795],"mapped",[30439]],[[63796,63796],"mapped",[32769]],[[63797,63797],"mapped",[34310]],[[63798,63798],"mapped",[34396]],[[63799,63799],"mapped",[36335]],[[63800,63800],"mapped",[38706]],[[63801,63801],"mapped",[39791]],[[63802,63802],"mapped",[40442]],[[63803,63803],"mapped",[30860]],[[63804,63804],"mapped",[31103]],[[63805,63805],"mapped",[32160]],[[63806,63806],"mapped",[33737]],[[63807,63807],"mapped",[37636]],[[63808,63808],"mapped",[40575]],[[63809,63809],"mapped",[35542]],[[63810,63810],"mapped",[22751]],[[63811,63811],"mapped",[24324]],[[63812,63812],"mapped",[31840]],[[63813,63813],"mapped",[32894]],[[63814,63814],"mapped",[29282]],[[63815,63815],"mapped",[30922]],[[63816,63816],"mapped",[36034]],[[63817,63817],"mapped",[38647]],[[63818,63818],"mapped",[22744]],[[63819,63819],"mapped",[23650]],[[63820,63820],"mapped",[27155]],[[63821,63821],"mapped",[28122]],[[63822,63822],"mapped",[28431]],[[63823,63823],"mapped",[32047]],[[63824,63824],"mapped",[32311]],[[63825,63825],"mapped",[38475]],[[63826,63826],"mapped",[21202]],[[63827,63827],"mapped",[32907]],[[63828,63828],"mapped",[20956]],[[63829,63829],"mapped",[20940]],[[63830,63830],"mapped",[31260]],[[63831,63831],"mapped",[32190]],[[63832,63832],"mapped",[33777]],[[63833,63833],"mapped",[38517]],[[63834,63834],"mapped",[35712]],[[63835,63835],"mapped",[25295]],[[63836,63836],"mapped",[27138]],[[63837,63837],"mapped",[35582]],[[63838,63838],"mapped",[20025]],[[63839,63839],"mapped",[23527]],[[63840,63840],"mapped",[24594]],[[63841,63841],"mapped",[29575]],[[63842,63842],"mapped",[30064]],[[63843,63843],"mapped",[21271]],[[63844,63844],"mapped",[30971]],[[63845,63845],"mapped",[20415]],[[63846,63846],"mapped",[24489]],[[63847,63847],"mapped",[19981]],[[63848,63848],"mapped",[27852]],[[63849,63849],"mapped",[25976]],[[63850,63850],"mapped",[32034]],[[63851,63851],"mapped",[21443]],[[63852,63852],"mapped",[22622]],[[63853,63853],"mapped",[30465]],[[63854,63854],"mapped",[33865]],[[63855,63855],"mapped",[35498]],[[63856,63856],"mapped",[27578]],[[63857,63857],"mapped",[36784]],[[63858,63858],"mapped",[27784]],[[63859,63859],"mapped",[25342]],[[63860,63860],"mapped",[33509]],[[63861,63861],"mapped",[25504]],[[63862,63862],"mapped",[30053]],[[63863,63863],"mapped",[20142]],[[63864,63864],"mapped",[20841]],[[63865,63865],"mapped",[20937]],[[63866,63866],"mapped",[26753]],[[63867,63867],"mapped",[31975]],[[63868,63868],"mapped",[33391]],[[63869,63869],"mapped",[35538]],[[63870,63870],"mapped",[37327]],[[63871,63871],"mapped",[21237]],[[63872,63872],"mapped",[21570]],[[63873,63873],"mapped",[22899]],[[63874,63874],"mapped",[24300]],[[63875,63875],"mapped",[26053]],[[63876,63876],"mapped",[28670]],[[63877,63877],"mapped",[31018]],[[63878,63878],"mapped",[38317]],[[63879,63879],"mapped",[39530]],[[63880,63880],"mapped",[40599]],[[63881,63881],"mapped",[40654]],[[63882,63882],"mapped",[21147]],[[63883,63883],"mapped",[26310]],[[63884,63884],"mapped",[27511]],[[63885,63885],"mapped",[36706]],[[63886,63886],"mapped",[24180]],[[63887,63887],"mapped",[24976]],[[63888,63888],"mapped",[25088]],[[63889,63889],"mapped",[25754]],[[63890,63890],"mapped",[28451]],[[63891,63891],"mapped",[29001]],[[63892,63892],"mapped",[29833]],[[63893,63893],"mapped",[31178]],[[63894,63894],"mapped",[32244]],[[63895,63895],"mapped",[32879]],[[63896,63896],"mapped",[36646]],[[63897,63897],"mapped",[34030]],[[63898,63898],"mapped",[36899]],[[63899,63899],"mapped",[37706]],[[63900,63900],"mapped",[21015]],[[63901,63901],"mapped",[21155]],[[63902,63902],"mapped",[21693]],[[63903,63903],"mapped",[28872]],[[63904,63904],"mapped",[35010]],[[63905,63905],"mapped",[35498]],[[63906,63906],"mapped",[24265]],[[63907,63907],"mapped",[24565]],[[63908,63908],"mapped",[25467]],[[63909,63909],"mapped",[27566]],[[63910,63910],"mapped",[31806]],[[63911,63911],"mapped",[29557]],[[63912,63912],"mapped",[20196]],[[63913,63913],"mapped",[22265]],[[63914,63914],"mapped",[23527]],[[63915,63915],"mapped",[23994]],[[63916,63916],"mapped",[24604]],[[63917,63917],"mapped",[29618]],[[63918,63918],"mapped",[29801]],[[63919,63919],"mapped",[32666]],[[63920,63920],"mapped",[32838]],[[63921,63921],"mapped",[37428]],[[63922,63922],"mapped",[38646]],[[63923,63923],"mapped",[38728]],[[63924,63924],"mapped",[38936]],[[63925,63925],"mapped",[20363]],[[63926,63926],"mapped",[31150]],[[63927,63927],"mapped",[37300]],[[63928,63928],"mapped",[38584]],[[63929,63929],"mapped",[24801]],[[63930,63930],"mapped",[20102]],[[63931,63931],"mapped",[20698]],[[63932,63932],"mapped",[23534]],[[63933,63933],"mapped",[23615]],[[63934,63934],"mapped",[26009]],[[63935,63935],"mapped",[27138]],[[63936,63936],"mapped",[29134]],[[63937,63937],"mapped",[30274]],[[63938,63938],"mapped",[34044]],[[63939,63939],"mapped",[36988]],[[63940,63940],"mapped",[40845]],[[63941,63941],"mapped",[26248]],[[63942,63942],"mapped",[38446]],[[63943,63943],"mapped",[21129]],[[63944,63944],"mapped",[26491]],[[63945,63945],"mapped",[26611]],[[63946,63946],"mapped",[27969]],[[63947,63947],"mapped",[28316]],[[63948,63948],"mapped",[29705]],[[63949,63949],"mapped",[30041]],[[63950,63950],"mapped",[30827]],[[63951,63951],"mapped",[32016]],[[63952,63952],"mapped",[39006]],[[63953,63953],"mapped",[20845]],[[63954,63954],"mapped",[25134]],[[63955,63955],"mapped",[38520]],[[63956,63956],"mapped",[20523]],[[63957,63957],"mapped",[23833]],[[63958,63958],"mapped",[28138]],[[63959,63959],"mapped",[36650]],[[63960,63960],"mapped",[24459]],[[63961,63961],"mapped",[24900]],[[63962,63962],"mapped",[26647]],[[63963,63963],"mapped",[29575]],[[63964,63964],"mapped",[38534]],[[63965,63965],"mapped",[21033]],[[63966,63966],"mapped",[21519]],[[63967,63967],"mapped",[23653]],[[63968,63968],"mapped",[26131]],[[63969,63969],"mapped",[26446]],[[63970,63970],"mapped",[26792]],[[63971,63971],"mapped",[27877]],[[63972,63972],"mapped",[29702]],[[63973,63973],"mapped",[30178]],[[63974,63974],"mapped",[32633]],[[63975,63975],"mapped",[35023]],[[63976,63976],"mapped",[35041]],[[63977,63977],"mapped",[37324]],[[63978,63978],"mapped",[38626]],[[63979,63979],"mapped",[21311]],[[63980,63980],"mapped",[28346]],[[63981,63981],"mapped",[21533]],[[63982,63982],"mapped",[29136]],[[63983,63983],"mapped",[29848]],[[63984,63984],"mapped",[34298]],[[63985,63985],"mapped",[38563]],[[63986,63986],"mapped",[40023]],[[63987,63987],"mapped",[40607]],[[63988,63988],"mapped",[26519]],[[63989,63989],"mapped",[28107]],[[63990,63990],"mapped",[33256]],[[63991,63991],"mapped",[31435]],[[63992,63992],"mapped",[31520]],[[63993,63993],"mapped",[31890]],[[63994,63994],"mapped",[29376]],[[63995,63995],"mapped",[28825]],[[63996,63996],"mapped",[35672]],[[63997,63997],"mapped",[20160]],[[63998,63998],"mapped",[33590]],[[63999,63999],"mapped",[21050]],[[64e3,64e3],"mapped",[20999]],[[64001,64001],"mapped",[24230]],[[64002,64002],"mapped",[25299]],[[64003,64003],"mapped",[31958]],[[64004,64004],"mapped",[23429]],[[64005,64005],"mapped",[27934]],[[64006,64006],"mapped",[26292]],[[64007,64007],"mapped",[36667]],[[64008,64008],"mapped",[34892]],[[64009,64009],"mapped",[38477]],[[64010,64010],"mapped",[35211]],[[64011,64011],"mapped",[24275]],[[64012,64012],"mapped",[20800]],[[64013,64013],"mapped",[21952]],[[64014,64015],"valid"],[[64016,64016],"mapped",[22618]],[[64017,64017],"valid"],[[64018,64018],"mapped",[26228]],[[64019,64020],"valid"],[[64021,64021],"mapped",[20958]],[[64022,64022],"mapped",[29482]],[[64023,64023],"mapped",[30410]],[[64024,64024],"mapped",[31036]],[[64025,64025],"mapped",[31070]],[[64026,64026],"mapped",[31077]],[[64027,64027],"mapped",[31119]],[[64028,64028],"mapped",[38742]],[[64029,64029],"mapped",[31934]],[[64030,64030],"mapped",[32701]],[[64031,64031],"valid"],[[64032,64032],"mapped",[34322]],[[64033,64033],"valid"],[[64034,64034],"mapped",[35576]],[[64035,64036],"valid"],[[64037,64037],"mapped",[36920]],[[64038,64038],"mapped",[37117]],[[64039,64041],"valid"],[[64042,64042],"mapped",[39151]],[[64043,64043],"mapped",[39164]],[[64044,64044],"mapped",[39208]],[[64045,64045],"mapped",[40372]],[[64046,64046],"mapped",[37086]],[[64047,64047],"mapped",[38583]],[[64048,64048],"mapped",[20398]],[[64049,64049],"mapped",[20711]],[[64050,64050],"mapped",[20813]],[[64051,64051],"mapped",[21193]],[[64052,64052],"mapped",[21220]],[[64053,64053],"mapped",[21329]],[[64054,64054],"mapped",[21917]],[[64055,64055],"mapped",[22022]],[[64056,64056],"mapped",[22120]],[[64057,64057],"mapped",[22592]],[[64058,64058],"mapped",[22696]],[[64059,64059],"mapped",[23652]],[[64060,64060],"mapped",[23662]],[[64061,64061],"mapped",[24724]],[[64062,64062],"mapped",[24936]],[[64063,64063],"mapped",[24974]],[[64064,64064],"mapped",[25074]],[[64065,64065],"mapped",[25935]],[[64066,64066],"mapped",[26082]],[[64067,64067],"mapped",[26257]],[[64068,64068],"mapped",[26757]],[[64069,64069],"mapped",[28023]],[[64070,64070],"mapped",[28186]],[[64071,64071],"mapped",[28450]],[[64072,64072],"mapped",[29038]],[[64073,64073],"mapped",[29227]],[[64074,64074],"mapped",[29730]],[[64075,64075],"mapped",[30865]],[[64076,64076],"mapped",[31038]],[[64077,64077],"mapped",[31049]],[[64078,64078],"mapped",[31048]],[[64079,64079],"mapped",[31056]],[[64080,64080],"mapped",[31062]],[[64081,64081],"mapped",[31069]],[[64082,64082],"mapped",[31117]],[[64083,64083],"mapped",[31118]],[[64084,64084],"mapped",[31296]],[[64085,64085],"mapped",[31361]],[[64086,64086],"mapped",[31680]],[[64087,64087],"mapped",[32244]],[[64088,64088],"mapped",[32265]],[[64089,64089],"mapped",[32321]],[[64090,64090],"mapped",[32626]],[[64091,64091],"mapped",[32773]],[[64092,64092],"mapped",[33261]],[[64093,64094],"mapped",[33401]],[[64095,64095],"mapped",[33879]],[[64096,64096],"mapped",[35088]],[[64097,64097],"mapped",[35222]],[[64098,64098],"mapped",[35585]],[[64099,64099],"mapped",[35641]],[[64100,64100],"mapped",[36051]],[[64101,64101],"mapped",[36104]],[[64102,64102],"mapped",[36790]],[[64103,64103],"mapped",[36920]],[[64104,64104],"mapped",[38627]],[[64105,64105],"mapped",[38911]],[[64106,64106],"mapped",[38971]],[[64107,64107],"mapped",[24693]],[[64108,64108],"mapped",[148206]],[[64109,64109],"mapped",[33304]],[[64110,64111],"disallowed"],[[64112,64112],"mapped",[20006]],[[64113,64113],"mapped",[20917]],[[64114,64114],"mapped",[20840]],[[64115,64115],"mapped",[20352]],[[64116,64116],"mapped",[20805]],[[64117,64117],"mapped",[20864]],[[64118,64118],"mapped",[21191]],[[64119,64119],"mapped",[21242]],[[64120,64120],"mapped",[21917]],[[64121,64121],"mapped",[21845]],[[64122,64122],"mapped",[21913]],[[64123,64123],"mapped",[21986]],[[64124,64124],"mapped",[22618]],[[64125,64125],"mapped",[22707]],[[64126,64126],"mapped",[22852]],[[64127,64127],"mapped",[22868]],[[64128,64128],"mapped",[23138]],[[64129,64129],"mapped",[23336]],[[64130,64130],"mapped",[24274]],[[64131,64131],"mapped",[24281]],[[64132,64132],"mapped",[24425]],[[64133,64133],"mapped",[24493]],[[64134,64134],"mapped",[24792]],[[64135,64135],"mapped",[24910]],[[64136,64136],"mapped",[24840]],[[64137,64137],"mapped",[24974]],[[64138,64138],"mapped",[24928]],[[64139,64139],"mapped",[25074]],[[64140,64140],"mapped",[25140]],[[64141,64141],"mapped",[25540]],[[64142,64142],"mapped",[25628]],[[64143,64143],"mapped",[25682]],[[64144,64144],"mapped",[25942]],[[64145,64145],"mapped",[26228]],[[64146,64146],"mapped",[26391]],[[64147,64147],"mapped",[26395]],[[64148,64148],"mapped",[26454]],[[64149,64149],"mapped",[27513]],[[64150,64150],"mapped",[27578]],[[64151,64151],"mapped",[27969]],[[64152,64152],"mapped",[28379]],[[64153,64153],"mapped",[28363]],[[64154,64154],"mapped",[28450]],[[64155,64155],"mapped",[28702]],[[64156,64156],"mapped",[29038]],[[64157,64157],"mapped",[30631]],[[64158,64158],"mapped",[29237]],[[64159,64159],"mapped",[29359]],[[64160,64160],"mapped",[29482]],[[64161,64161],"mapped",[29809]],[[64162,64162],"mapped",[29958]],[[64163,64163],"mapped",[30011]],[[64164,64164],"mapped",[30237]],[[64165,64165],"mapped",[30239]],[[64166,64166],"mapped",[30410]],[[64167,64167],"mapped",[30427]],[[64168,64168],"mapped",[30452]],[[64169,64169],"mapped",[30538]],[[64170,64170],"mapped",[30528]],[[64171,64171],"mapped",[30924]],[[64172,64172],"mapped",[31409]],[[64173,64173],"mapped",[31680]],[[64174,64174],"mapped",[31867]],[[64175,64175],"mapped",[32091]],[[64176,64176],"mapped",[32244]],[[64177,64177],"mapped",[32574]],[[64178,64178],"mapped",[32773]],[[64179,64179],"mapped",[33618]],[[64180,64180],"mapped",[33775]],[[64181,64181],"mapped",[34681]],[[64182,64182],"mapped",[35137]],[[64183,64183],"mapped",[35206]],[[64184,64184],"mapped",[35222]],[[64185,64185],"mapped",[35519]],[[64186,64186],"mapped",[35576]],[[64187,64187],"mapped",[35531]],[[64188,64188],"mapped",[35585]],[[64189,64189],"mapped",[35582]],[[64190,64190],"mapped",[35565]],[[64191,64191],"mapped",[35641]],[[64192,64192],"mapped",[35722]],[[64193,64193],"mapped",[36104]],[[64194,64194],"mapped",[36664]],[[64195,64195],"mapped",[36978]],[[64196,64196],"mapped",[37273]],[[64197,64197],"mapped",[37494]],[[64198,64198],"mapped",[38524]],[[64199,64199],"mapped",[38627]],[[64200,64200],"mapped",[38742]],[[64201,64201],"mapped",[38875]],[[64202,64202],"mapped",[38911]],[[64203,64203],"mapped",[38923]],[[64204,64204],"mapped",[38971]],[[64205,64205],"mapped",[39698]],[[64206,64206],"mapped",[40860]],[[64207,64207],"mapped",[141386]],[[64208,64208],"mapped",[141380]],[[64209,64209],"mapped",[144341]],[[64210,64210],"mapped",[15261]],[[64211,64211],"mapped",[16408]],[[64212,64212],"mapped",[16441]],[[64213,64213],"mapped",[152137]],[[64214,64214],"mapped",[154832]],[[64215,64215],"mapped",[163539]],[[64216,64216],"mapped",[40771]],[[64217,64217],"mapped",[40846]],[[64218,64255],"disallowed"],[[64256,64256],"mapped",[102,102]],[[64257,64257],"mapped",[102,105]],[[64258,64258],"mapped",[102,108]],[[64259,64259],"mapped",[102,102,105]],[[64260,64260],"mapped",[102,102,108]],[[64261,64262],"mapped",[115,116]],[[64263,64274],"disallowed"],[[64275,64275],"mapped",[1396,1398]],[[64276,64276],"mapped",[1396,1381]],[[64277,64277],"mapped",[1396,1387]],[[64278,64278],"mapped",[1406,1398]],[[64279,64279],"mapped",[1396,1389]],[[64280,64284],"disallowed"],[[64285,64285],"mapped",[1497,1460]],[[64286,64286],"valid"],[[64287,64287],"mapped",[1522,1463]],[[64288,64288],"mapped",[1506]],[[64289,64289],"mapped",[1488]],[[64290,64290],"mapped",[1491]],[[64291,64291],"mapped",[1492]],[[64292,64292],"mapped",[1499]],[[64293,64293],"mapped",[1500]],[[64294,64294],"mapped",[1501]],[[64295,64295],"mapped",[1512]],[[64296,64296],"mapped",[1514]],[[64297,64297],"disallowed_STD3_mapped",[43]],[[64298,64298],"mapped",[1513,1473]],[[64299,64299],"mapped",[1513,1474]],[[64300,64300],"mapped",[1513,1468,1473]],[[64301,64301],"mapped",[1513,1468,1474]],[[64302,64302],"mapped",[1488,1463]],[[64303,64303],"mapped",[1488,1464]],[[64304,64304],"mapped",[1488,1468]],[[64305,64305],"mapped",[1489,1468]],[[64306,64306],"mapped",[1490,1468]],[[64307,64307],"mapped",[1491,1468]],[[64308,64308],"mapped",[1492,1468]],[[64309,64309],"mapped",[1493,1468]],[[64310,64310],"mapped",[1494,1468]],[[64311,64311],"disallowed"],[[64312,64312],"mapped",[1496,1468]],[[64313,64313],"mapped",[1497,1468]],[[64314,64314],"mapped",[1498,1468]],[[64315,64315],"mapped",[1499,1468]],[[64316,64316],"mapped",[1500,1468]],[[64317,64317],"disallowed"],[[64318,64318],"mapped",[1502,1468]],[[64319,64319],"disallowed"],[[64320,64320],"mapped",[1504,1468]],[[64321,64321],"mapped",[1505,1468]],[[64322,64322],"disallowed"],[[64323,64323],"mapped",[1507,1468]],[[64324,64324],"mapped",[1508,1468]],[[64325,64325],"disallowed"],[[64326,64326],"mapped",[1510,1468]],[[64327,64327],"mapped",[1511,1468]],[[64328,64328],"mapped",[1512,1468]],[[64329,64329],"mapped",[1513,1468]],[[64330,64330],"mapped",[1514,1468]],[[64331,64331],"mapped",[1493,1465]],[[64332,64332],"mapped",[1489,1471]],[[64333,64333],"mapped",[1499,1471]],[[64334,64334],"mapped",[1508,1471]],[[64335,64335],"mapped",[1488,1500]],[[64336,64337],"mapped",[1649]],[[64338,64341],"mapped",[1659]],[[64342,64345],"mapped",[1662]],[[64346,64349],"mapped",[1664]],[[64350,64353],"mapped",[1658]],[[64354,64357],"mapped",[1663]],[[64358,64361],"mapped",[1657]],[[64362,64365],"mapped",[1700]],[[64366,64369],"mapped",[1702]],[[64370,64373],"mapped",[1668]],[[64374,64377],"mapped",[1667]],[[64378,64381],"mapped",[1670]],[[64382,64385],"mapped",[1671]],[[64386,64387],"mapped",[1677]],[[64388,64389],"mapped",[1676]],[[64390,64391],"mapped",[1678]],[[64392,64393],"mapped",[1672]],[[64394,64395],"mapped",[1688]],[[64396,64397],"mapped",[1681]],[[64398,64401],"mapped",[1705]],[[64402,64405],"mapped",[1711]],[[64406,64409],"mapped",[1715]],[[64410,64413],"mapped",[1713]],[[64414,64415],"mapped",[1722]],[[64416,64419],"mapped",[1723]],[[64420,64421],"mapped",[1728]],[[64422,64425],"mapped",[1729]],[[64426,64429],"mapped",[1726]],[[64430,64431],"mapped",[1746]],[[64432,64433],"mapped",[1747]],[[64434,64449],"valid",[],"NV8"],[[64450,64466],"disallowed"],[[64467,64470],"mapped",[1709]],[[64471,64472],"mapped",[1735]],[[64473,64474],"mapped",[1734]],[[64475,64476],"mapped",[1736]],[[64477,64477],"mapped",[1735,1652]],[[64478,64479],"mapped",[1739]],[[64480,64481],"mapped",[1733]],[[64482,64483],"mapped",[1737]],[[64484,64487],"mapped",[1744]],[[64488,64489],"mapped",[1609]],[[64490,64491],"mapped",[1574,1575]],[[64492,64493],"mapped",[1574,1749]],[[64494,64495],"mapped",[1574,1608]],[[64496,64497],"mapped",[1574,1735]],[[64498,64499],"mapped",[1574,1734]],[[64500,64501],"mapped",[1574,1736]],[[64502,64504],"mapped",[1574,1744]],[[64505,64507],"mapped",[1574,1609]],[[64508,64511],"mapped",[1740]],[[64512,64512],"mapped",[1574,1580]],[[64513,64513],"mapped",[1574,1581]],[[64514,64514],"mapped",[1574,1605]],[[64515,64515],"mapped",[1574,1609]],[[64516,64516],"mapped",[1574,1610]],[[64517,64517],"mapped",[1576,1580]],[[64518,64518],"mapped",[1576,1581]],[[64519,64519],"mapped",[1576,1582]],[[64520,64520],"mapped",[1576,1605]],[[64521,64521],"mapped",[1576,1609]],[[64522,64522],"mapped",[1576,1610]],[[64523,64523],"mapped",[1578,1580]],[[64524,64524],"mapped",[1578,1581]],[[64525,64525],"mapped",[1578,1582]],[[64526,64526],"mapped",[1578,1605]],[[64527,64527],"mapped",[1578,1609]],[[64528,64528],"mapped",[1578,1610]],[[64529,64529],"mapped",[1579,1580]],[[64530,64530],"mapped",[1579,1605]],[[64531,64531],"mapped",[1579,1609]],[[64532,64532],"mapped",[1579,1610]],[[64533,64533],"mapped",[1580,1581]],[[64534,64534],"mapped",[1580,1605]],[[64535,64535],"mapped",[1581,1580]],[[64536,64536],"mapped",[1581,1605]],[[64537,64537],"mapped",[1582,1580]],[[64538,64538],"mapped",[1582,1581]],[[64539,64539],"mapped",[1582,1605]],[[64540,64540],"mapped",[1587,1580]],[[64541,64541],"mapped",[1587,1581]],[[64542,64542],"mapped",[1587,1582]],[[64543,64543],"mapped",[1587,1605]],[[64544,64544],"mapped",[1589,1581]],[[64545,64545],"mapped",[1589,1605]],[[64546,64546],"mapped",[1590,1580]],[[64547,64547],"mapped",[1590,1581]],[[64548,64548],"mapped",[1590,1582]],[[64549,64549],"mapped",[1590,1605]],[[64550,64550],"mapped",[1591,1581]],[[64551,64551],"mapped",[1591,1605]],[[64552,64552],"mapped",[1592,1605]],[[64553,64553],"mapped",[1593,1580]],[[64554,64554],"mapped",[1593,1605]],[[64555,64555],"mapped",[1594,1580]],[[64556,64556],"mapped",[1594,1605]],[[64557,64557],"mapped",[1601,1580]],[[64558,64558],"mapped",[1601,1581]],[[64559,64559],"mapped",[1601,1582]],[[64560,64560],"mapped",[1601,1605]],[[64561,64561],"mapped",[1601,1609]],[[64562,64562],"mapped",[1601,1610]],[[64563,64563],"mapped",[1602,1581]],[[64564,64564],"mapped",[1602,1605]],[[64565,64565],"mapped",[1602,1609]],[[64566,64566],"mapped",[1602,1610]],[[64567,64567],"mapped",[1603,1575]],[[64568,64568],"mapped",[1603,1580]],[[64569,64569],"mapped",[1603,1581]],[[64570,64570],"mapped",[1603,1582]],[[64571,64571],"mapped",[1603,1604]],[[64572,64572],"mapped",[1603,1605]],[[64573,64573],"mapped",[1603,1609]],[[64574,64574],"mapped",[1603,1610]],[[64575,64575],"mapped",[1604,1580]],[[64576,64576],"mapped",[1604,1581]],[[64577,64577],"mapped",[1604,1582]],[[64578,64578],"mapped",[1604,1605]],[[64579,64579],"mapped",[1604,1609]],[[64580,64580],"mapped",[1604,1610]],[[64581,64581],"mapped",[1605,1580]],[[64582,64582],"mapped",[1605,1581]],[[64583,64583],"mapped",[1605,1582]],[[64584,64584],"mapped",[1605,1605]],[[64585,64585],"mapped",[1605,1609]],[[64586,64586],"mapped",[1605,1610]],[[64587,64587],"mapped",[1606,1580]],[[64588,64588],"mapped",[1606,1581]],[[64589,64589],"mapped",[1606,1582]],[[64590,64590],"mapped",[1606,1605]],[[64591,64591],"mapped",[1606,1609]],[[64592,64592],"mapped",[1606,1610]],[[64593,64593],"mapped",[1607,1580]],[[64594,64594],"mapped",[1607,1605]],[[64595,64595],"mapped",[1607,1609]],[[64596,64596],"mapped",[1607,1610]],[[64597,64597],"mapped",[1610,1580]],[[64598,64598],"mapped",[1610,1581]],[[64599,64599],"mapped",[1610,1582]],[[64600,64600],"mapped",[1610,1605]],[[64601,64601],"mapped",[1610,1609]],[[64602,64602],"mapped",[1610,1610]],[[64603,64603],"mapped",[1584,1648]],[[64604,64604],"mapped",[1585,1648]],[[64605,64605],"mapped",[1609,1648]],[[64606,64606],"disallowed_STD3_mapped",[32,1612,1617]],[[64607,64607],"disallowed_STD3_mapped",[32,1613,1617]],[[64608,64608],"disallowed_STD3_mapped",[32,1614,1617]],[[64609,64609],"disallowed_STD3_mapped",[32,1615,1617]],[[64610,64610],"disallowed_STD3_mapped",[32,1616,1617]],[[64611,64611],"disallowed_STD3_mapped",[32,1617,1648]],[[64612,64612],"mapped",[1574,1585]],[[64613,64613],"mapped",[1574,1586]],[[64614,64614],"mapped",[1574,1605]],[[64615,64615],"mapped",[1574,1606]],[[64616,64616],"mapped",[1574,1609]],[[64617,64617],"mapped",[1574,1610]],[[64618,64618],"mapped",[1576,1585]],[[64619,64619],"mapped",[1576,1586]],[[64620,64620],"mapped",[1576,1605]],[[64621,64621],"mapped",[1576,1606]],[[64622,64622],"mapped",[1576,1609]],[[64623,64623],"mapped",[1576,1610]],[[64624,64624],"mapped",[1578,1585]],[[64625,64625],"mapped",[1578,1586]],[[64626,64626],"mapped",[1578,1605]],[[64627,64627],"mapped",[1578,1606]],[[64628,64628],"mapped",[1578,1609]],[[64629,64629],"mapped",[1578,1610]],[[64630,64630],"mapped",[1579,1585]],[[64631,64631],"mapped",[1579,1586]],[[64632,64632],"mapped",[1579,1605]],[[64633,64633],"mapped",[1579,1606]],[[64634,64634],"mapped",[1579,1609]],[[64635,64635],"mapped",[1579,1610]],[[64636,64636],"mapped",[1601,1609]],[[64637,64637],"mapped",[1601,1610]],[[64638,64638],"mapped",[1602,1609]],[[64639,64639],"mapped",[1602,1610]],[[64640,64640],"mapped",[1603,1575]],[[64641,64641],"mapped",[1603,1604]],[[64642,64642],"mapped",[1603,1605]],[[64643,64643],"mapped",[1603,1609]],[[64644,64644],"mapped",[1603,1610]],[[64645,64645],"mapped",[1604,1605]],[[64646,64646],"mapped",[1604,1609]],[[64647,64647],"mapped",[1604,1610]],[[64648,64648],"mapped",[1605,1575]],[[64649,64649],"mapped",[1605,1605]],[[64650,64650],"mapped",[1606,1585]],[[64651,64651],"mapped",[1606,1586]],[[64652,64652],"mapped",[1606,1605]],[[64653,64653],"mapped",[1606,1606]],[[64654,64654],"mapped",[1606,1609]],[[64655,64655],"mapped",[1606,1610]],[[64656,64656],"mapped",[1609,1648]],[[64657,64657],"mapped",[1610,1585]],[[64658,64658],"mapped",[1610,1586]],[[64659,64659],"mapped",[1610,1605]],[[64660,64660],"mapped",[1610,1606]],[[64661,64661],"mapped",[1610,1609]],[[64662,64662],"mapped",[1610,1610]],[[64663,64663],"mapped",[1574,1580]],[[64664,64664],"mapped",[1574,1581]],[[64665,64665],"mapped",[1574,1582]],[[64666,64666],"mapped",[1574,1605]],[[64667,64667],"mapped",[1574,1607]],[[64668,64668],"mapped",[1576,1580]],[[64669,64669],"mapped",[1576,1581]],[[64670,64670],"mapped",[1576,1582]],[[64671,64671],"mapped",[1576,1605]],[[64672,64672],"mapped",[1576,1607]],[[64673,64673],"mapped",[1578,1580]],[[64674,64674],"mapped",[1578,1581]],[[64675,64675],"mapped",[1578,1582]],[[64676,64676],"mapped",[1578,1605]],[[64677,64677],"mapped",[1578,1607]],[[64678,64678],"mapped",[1579,1605]],[[64679,64679],"mapped",[1580,1581]],[[64680,64680],"mapped",[1580,1605]],[[64681,64681],"mapped",[1581,1580]],[[64682,64682],"mapped",[1581,1605]],[[64683,64683],"mapped",[1582,1580]],[[64684,64684],"mapped",[1582,1605]],[[64685,64685],"mapped",[1587,1580]],[[64686,64686],"mapped",[1587,1581]],[[64687,64687],"mapped",[1587,1582]],[[64688,64688],"mapped",[1587,1605]],[[64689,64689],"mapped",[1589,1581]],[[64690,64690],"mapped",[1589,1582]],[[64691,64691],"mapped",[1589,1605]],[[64692,64692],"mapped",[1590,1580]],[[64693,64693],"mapped",[1590,1581]],[[64694,64694],"mapped",[1590,1582]],[[64695,64695],"mapped",[1590,1605]],[[64696,64696],"mapped",[1591,1581]],[[64697,64697],"mapped",[1592,1605]],[[64698,64698],"mapped",[1593,1580]],[[64699,64699],"mapped",[1593,1605]],[[64700,64700],"mapped",[1594,1580]],[[64701,64701],"mapped",[1594,1605]],[[64702,64702],"mapped",[1601,1580]],[[64703,64703],"mapped",[1601,1581]],[[64704,64704],"mapped",[1601,1582]],[[64705,64705],"mapped",[1601,1605]],[[64706,64706],"mapped",[1602,1581]],[[64707,64707],"mapped",[1602,1605]],[[64708,64708],"mapped",[1603,1580]],[[64709,64709],"mapped",[1603,1581]],[[64710,64710],"mapped",[1603,1582]],[[64711,64711],"mapped",[1603,1604]],[[64712,64712],"mapped",[1603,1605]],[[64713,64713],"mapped",[1604,1580]],[[64714,64714],"mapped",[1604,1581]],[[64715,64715],"mapped",[1604,1582]],[[64716,64716],"mapped",[1604,1605]],[[64717,64717],"mapped",[1604,1607]],[[64718,64718],"mapped",[1605,1580]],[[64719,64719],"mapped",[1605,1581]],[[64720,64720],"mapped",[1605,1582]],[[64721,64721],"mapped",[1605,1605]],[[64722,64722],"mapped",[1606,1580]],[[64723,64723],"mapped",[1606,1581]],[[64724,64724],"mapped",[1606,1582]],[[64725,64725],"mapped",[1606,1605]],[[64726,64726],"mapped",[1606,1607]],[[64727,64727],"mapped",[1607,1580]],[[64728,64728],"mapped",[1607,1605]],[[64729,64729],"mapped",[1607,1648]],[[64730,64730],"mapped",[1610,1580]],[[64731,64731],"mapped",[1610,1581]],[[64732,64732],"mapped",[1610,1582]],[[64733,64733],"mapped",[1610,1605]],[[64734,64734],"mapped",[1610,1607]],[[64735,64735],"mapped",[1574,1605]],[[64736,64736],"mapped",[1574,1607]],[[64737,64737],"mapped",[1576,1605]],[[64738,64738],"mapped",[1576,1607]],[[64739,64739],"mapped",[1578,1605]],[[64740,64740],"mapped",[1578,1607]],[[64741,64741],"mapped",[1579,1605]],[[64742,64742],"mapped",[1579,1607]],[[64743,64743],"mapped",[1587,1605]],[[64744,64744],"mapped",[1587,1607]],[[64745,64745],"mapped",[1588,1605]],[[64746,64746],"mapped",[1588,1607]],[[64747,64747],"mapped",[1603,1604]],[[64748,64748],"mapped",[1603,1605]],[[64749,64749],"mapped",[1604,1605]],[[64750,64750],"mapped",[1606,1605]],[[64751,64751],"mapped",[1606,1607]],[[64752,64752],"mapped",[1610,1605]],[[64753,64753],"mapped",[1610,1607]],[[64754,64754],"mapped",[1600,1614,1617]],[[64755,64755],"mapped",[1600,1615,1617]],[[64756,64756],"mapped",[1600,1616,1617]],[[64757,64757],"mapped",[1591,1609]],[[64758,64758],"mapped",[1591,1610]],[[64759,64759],"mapped",[1593,1609]],[[64760,64760],"mapped",[1593,1610]],[[64761,64761],"mapped",[1594,1609]],[[64762,64762],"mapped",[1594,1610]],[[64763,64763],"mapped",[1587,1609]],[[64764,64764],"mapped",[1587,1610]],[[64765,64765],"mapped",[1588,1609]],[[64766,64766],"mapped",[1588,1610]],[[64767,64767],"mapped",[1581,1609]],[[64768,64768],"mapped",[1581,1610]],[[64769,64769],"mapped",[1580,1609]],[[64770,64770],"mapped",[1580,1610]],[[64771,64771],"mapped",[1582,1609]],[[64772,64772],"mapped",[1582,1610]],[[64773,64773],"mapped",[1589,1609]],[[64774,64774],"mapped",[1589,1610]],[[64775,64775],"mapped",[1590,1609]],[[64776,64776],"mapped",[1590,1610]],[[64777,64777],"mapped",[1588,1580]],[[64778,64778],"mapped",[1588,1581]],[[64779,64779],"mapped",[1588,1582]],[[64780,64780],"mapped",[1588,1605]],[[64781,64781],"mapped",[1588,1585]],[[64782,64782],"mapped",[1587,1585]],[[64783,64783],"mapped",[1589,1585]],[[64784,64784],"mapped",[1590,1585]],[[64785,64785],"mapped",[1591,1609]],[[64786,64786],"mapped",[1591,1610]],[[64787,64787],"mapped",[1593,1609]],[[64788,64788],"mapped",[1593,1610]],[[64789,64789],"mapped",[1594,1609]],[[64790,64790],"mapped",[1594,1610]],[[64791,64791],"mapped",[1587,1609]],[[64792,64792],"mapped",[1587,1610]],[[64793,64793],"mapped",[1588,1609]],[[64794,64794],"mapped",[1588,1610]],[[64795,64795],"mapped",[1581,1609]],[[64796,64796],"mapped",[1581,1610]],[[64797,64797],"mapped",[1580,1609]],[[64798,64798],"mapped",[1580,1610]],[[64799,64799],"mapped",[1582,1609]],[[64800,64800],"mapped",[1582,1610]],[[64801,64801],"mapped",[1589,1609]],[[64802,64802],"mapped",[1589,1610]],[[64803,64803],"mapped",[1590,1609]],[[64804,64804],"mapped",[1590,1610]],[[64805,64805],"mapped",[1588,1580]],[[64806,64806],"mapped",[1588,1581]],[[64807,64807],"mapped",[1588,1582]],[[64808,64808],"mapped",[1588,1605]],[[64809,64809],"mapped",[1588,1585]],[[64810,64810],"mapped",[1587,1585]],[[64811,64811],"mapped",[1589,1585]],[[64812,64812],"mapped",[1590,1585]],[[64813,64813],"mapped",[1588,1580]],[[64814,64814],"mapped",[1588,1581]],[[64815,64815],"mapped",[1588,1582]],[[64816,64816],"mapped",[1588,1605]],[[64817,64817],"mapped",[1587,1607]],[[64818,64818],"mapped",[1588,1607]],[[64819,64819],"mapped",[1591,1605]],[[64820,64820],"mapped",[1587,1580]],[[64821,64821],"mapped",[1587,1581]],[[64822,64822],"mapped",[1587,1582]],[[64823,64823],"mapped",[1588,1580]],[[64824,64824],"mapped",[1588,1581]],[[64825,64825],"mapped",[1588,1582]],[[64826,64826],"mapped",[1591,1605]],[[64827,64827],"mapped",[1592,1605]],[[64828,64829],"mapped",[1575,1611]],[[64830,64831],"valid",[],"NV8"],[[64832,64847],"disallowed"],[[64848,64848],"mapped",[1578,1580,1605]],[[64849,64850],"mapped",[1578,1581,1580]],[[64851,64851],"mapped",[1578,1581,1605]],[[64852,64852],"mapped",[1578,1582,1605]],[[64853,64853],"mapped",[1578,1605,1580]],[[64854,64854],"mapped",[1578,1605,1581]],[[64855,64855],"mapped",[1578,1605,1582]],[[64856,64857],"mapped",[1580,1605,1581]],[[64858,64858],"mapped",[1581,1605,1610]],[[64859,64859],"mapped",[1581,1605,1609]],[[64860,64860],"mapped",[1587,1581,1580]],[[64861,64861],"mapped",[1587,1580,1581]],[[64862,64862],"mapped",[1587,1580,1609]],[[64863,64864],"mapped",[1587,1605,1581]],[[64865,64865],"mapped",[1587,1605,1580]],[[64866,64867],"mapped",[1587,1605,1605]],[[64868,64869],"mapped",[1589,1581,1581]],[[64870,64870],"mapped",[1589,1605,1605]],[[64871,64872],"mapped",[1588,1581,1605]],[[64873,64873],"mapped",[1588,1580,1610]],[[64874,64875],"mapped",[1588,1605,1582]],[[64876,64877],"mapped",[1588,1605,1605]],[[64878,64878],"mapped",[1590,1581,1609]],[[64879,64880],"mapped",[1590,1582,1605]],[[64881,64882],"mapped",[1591,1605,1581]],[[64883,64883],"mapped",[1591,1605,1605]],[[64884,64884],"mapped",[1591,1605,1610]],[[64885,64885],"mapped",[1593,1580,1605]],[[64886,64887],"mapped",[1593,1605,1605]],[[64888,64888],"mapped",[1593,1605,1609]],[[64889,64889],"mapped",[1594,1605,1605]],[[64890,64890],"mapped",[1594,1605,1610]],[[64891,64891],"mapped",[1594,1605,1609]],[[64892,64893],"mapped",[1601,1582,1605]],[[64894,64894],"mapped",[1602,1605,1581]],[[64895,64895],"mapped",[1602,1605,1605]],[[64896,64896],"mapped",[1604,1581,1605]],[[64897,64897],"mapped",[1604,1581,1610]],[[64898,64898],"mapped",[1604,1581,1609]],[[64899,64900],"mapped",[1604,1580,1580]],[[64901,64902],"mapped",[1604,1582,1605]],[[64903,64904],"mapped",[1604,1605,1581]],[[64905,64905],"mapped",[1605,1581,1580]],[[64906,64906],"mapped",[1605,1581,1605]],[[64907,64907],"mapped",[1605,1581,1610]],[[64908,64908],"mapped",[1605,1580,1581]],[[64909,64909],"mapped",[1605,1580,1605]],[[64910,64910],"mapped",[1605,1582,1580]],[[64911,64911],"mapped",[1605,1582,1605]],[[64912,64913],"disallowed"],[[64914,64914],"mapped",[1605,1580,1582]],[[64915,64915],"mapped",[1607,1605,1580]],[[64916,64916],"mapped",[1607,1605,1605]],[[64917,64917],"mapped",[1606,1581,1605]],[[64918,64918],"mapped",[1606,1581,1609]],[[64919,64920],"mapped",[1606,1580,1605]],[[64921,64921],"mapped",[1606,1580,1609]],[[64922,64922],"mapped",[1606,1605,1610]],[[64923,64923],"mapped",[1606,1605,1609]],[[64924,64925],"mapped",[1610,1605,1605]],[[64926,64926],"mapped",[1576,1582,1610]],[[64927,64927],"mapped",[1578,1580,1610]],[[64928,64928],"mapped",[1578,1580,1609]],[[64929,64929],"mapped",[1578,1582,1610]],[[64930,64930],"mapped",[1578,1582,1609]],[[64931,64931],"mapped",[1578,1605,1610]],[[64932,64932],"mapped",[1578,1605,1609]],[[64933,64933],"mapped",[1580,1605,1610]],[[64934,64934],"mapped",[1580,1581,1609]],[[64935,64935],"mapped",[1580,1605,1609]],[[64936,64936],"mapped",[1587,1582,1609]],[[64937,64937],"mapped",[1589,1581,1610]],[[64938,64938],"mapped",[1588,1581,1610]],[[64939,64939],"mapped",[1590,1581,1610]],[[64940,64940],"mapped",[1604,1580,1610]],[[64941,64941],"mapped",[1604,1605,1610]],[[64942,64942],"mapped",[1610,1581,1610]],[[64943,64943],"mapped",[1610,1580,1610]],[[64944,64944],"mapped",[1610,1605,1610]],[[64945,64945],"mapped",[1605,1605,1610]],[[64946,64946],"mapped",[1602,1605,1610]],[[64947,64947],"mapped",[1606,1581,1610]],[[64948,64948],"mapped",[1602,1605,1581]],[[64949,64949],"mapped",[1604,1581,1605]],[[64950,64950],"mapped",[1593,1605,1610]],[[64951,64951],"mapped",[1603,1605,1610]],[[64952,64952],"mapped",[1606,1580,1581]],[[64953,64953],"mapped",[1605,1582,1610]],[[64954,64954],"mapped",[1604,1580,1605]],[[64955,64955],"mapped",[1603,1605,1605]],[[64956,64956],"mapped",[1604,1580,1605]],[[64957,64957],"mapped",[1606,1580,1581]],[[64958,64958],"mapped",[1580,1581,1610]],[[64959,64959],"mapped",[1581,1580,1610]],[[64960,64960],"mapped",[1605,1580,1610]],[[64961,64961],"mapped",[1601,1605,1610]],[[64962,64962],"mapped",[1576,1581,1610]],[[64963,64963],"mapped",[1603,1605,1605]],[[64964,64964],"mapped",[1593,1580,1605]],[[64965,64965],"mapped",[1589,1605,1605]],[[64966,64966],"mapped",[1587,1582,1610]],[[64967,64967],"mapped",[1606,1580,1610]],[[64968,64975],"disallowed"],[[64976,65007],"disallowed"],[[65008,65008],"mapped",[1589,1604,1746]],[[65009,65009],"mapped",[1602,1604,1746]],[[65010,65010],"mapped",[1575,1604,1604,1607]],[[65011,65011],"mapped",[1575,1603,1576,1585]],[[65012,65012],"mapped",[1605,1581,1605,1583]],[[65013,65013],"mapped",[1589,1604,1593,1605]],[[65014,65014],"mapped",[1585,1587,1608,1604]],[[65015,65015],"mapped",[1593,1604,1610,1607]],[[65016,65016],"mapped",[1608,1587,1604,1605]],[[65017,65017],"mapped",[1589,1604,1609]],[[65018,65018],"disallowed_STD3_mapped",[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605]],[[65019,65019],"disallowed_STD3_mapped",[1580,1604,32,1580,1604,1575,1604,1607]],[[65020,65020],"mapped",[1585,1740,1575,1604]],[[65021,65021],"valid",[],"NV8"],[[65022,65023],"disallowed"],[[65024,65039],"ignored"],[[65040,65040],"disallowed_STD3_mapped",[44]],[[65041,65041],"mapped",[12289]],[[65042,65042],"disallowed"],[[65043,65043],"disallowed_STD3_mapped",[58]],[[65044,65044],"disallowed_STD3_mapped",[59]],[[65045,65045],"disallowed_STD3_mapped",[33]],[[65046,65046],"disallowed_STD3_mapped",[63]],[[65047,65047],"mapped",[12310]],[[65048,65048],"mapped",[12311]],[[65049,65049],"disallowed"],[[65050,65055],"disallowed"],[[65056,65059],"valid"],[[65060,65062],"valid"],[[65063,65069],"valid"],[[65070,65071],"valid"],[[65072,65072],"disallowed"],[[65073,65073],"mapped",[8212]],[[65074,65074],"mapped",[8211]],[[65075,65076],"disallowed_STD3_mapped",[95]],[[65077,65077],"disallowed_STD3_mapped",[40]],[[65078,65078],"disallowed_STD3_mapped",[41]],[[65079,65079],"disallowed_STD3_mapped",[123]],[[65080,65080],"disallowed_STD3_mapped",[125]],[[65081,65081],"mapped",[12308]],[[65082,65082],"mapped",[12309]],[[65083,65083],"mapped",[12304]],[[65084,65084],"mapped",[12305]],[[65085,65085],"mapped",[12298]],[[65086,65086],"mapped",[12299]],[[65087,65087],"mapped",[12296]],[[65088,65088],"mapped",[12297]],[[65089,65089],"mapped",[12300]],[[65090,65090],"mapped",[12301]],[[65091,65091],"mapped",[12302]],[[65092,65092],"mapped",[12303]],[[65093,65094],"valid",[],"NV8"],[[65095,65095],"disallowed_STD3_mapped",[91]],[[65096,65096],"disallowed_STD3_mapped",[93]],[[65097,65100],"disallowed_STD3_mapped",[32,773]],[[65101,65103],"disallowed_STD3_mapped",[95]],[[65104,65104],"disallowed_STD3_mapped",[44]],[[65105,65105],"mapped",[12289]],[[65106,65106],"disallowed"],[[65107,65107],"disallowed"],[[65108,65108],"disallowed_STD3_mapped",[59]],[[65109,65109],"disallowed_STD3_mapped",[58]],[[65110,65110],"disallowed_STD3_mapped",[63]],[[65111,65111],"disallowed_STD3_mapped",[33]],[[65112,65112],"mapped",[8212]],[[65113,65113],"disallowed_STD3_mapped",[40]],[[65114,65114],"disallowed_STD3_mapped",[41]],[[65115,65115],"disallowed_STD3_mapped",[123]],[[65116,65116],"disallowed_STD3_mapped",[125]],[[65117,65117],"mapped",[12308]],[[65118,65118],"mapped",[12309]],[[65119,65119],"disallowed_STD3_mapped",[35]],[[65120,65120],"disallowed_STD3_mapped",[38]],[[65121,65121],"disallowed_STD3_mapped",[42]],[[65122,65122],"disallowed_STD3_mapped",[43]],[[65123,65123],"mapped",[45]],[[65124,65124],"disallowed_STD3_mapped",[60]],[[65125,65125],"disallowed_STD3_mapped",[62]],[[65126,65126],"disallowed_STD3_mapped",[61]],[[65127,65127],"disallowed"],[[65128,65128],"disallowed_STD3_mapped",[92]],[[65129,65129],"disallowed_STD3_mapped",[36]],[[65130,65130],"disallowed_STD3_mapped",[37]],[[65131,65131],"disallowed_STD3_mapped",[64]],[[65132,65135],"disallowed"],[[65136,65136],"disallowed_STD3_mapped",[32,1611]],[[65137,65137],"mapped",[1600,1611]],[[65138,65138],"disallowed_STD3_mapped",[32,1612]],[[65139,65139],"valid"],[[65140,65140],"disallowed_STD3_mapped",[32,1613]],[[65141,65141],"disallowed"],[[65142,65142],"disallowed_STD3_mapped",[32,1614]],[[65143,65143],"mapped",[1600,1614]],[[65144,65144],"disallowed_STD3_mapped",[32,1615]],[[65145,65145],"mapped",[1600,1615]],[[65146,65146],"disallowed_STD3_mapped",[32,1616]],[[65147,65147],"mapped",[1600,1616]],[[65148,65148],"disallowed_STD3_mapped",[32,1617]],[[65149,65149],"mapped",[1600,1617]],[[65150,65150],"disallowed_STD3_mapped",[32,1618]],[[65151,65151],"mapped",[1600,1618]],[[65152,65152],"mapped",[1569]],[[65153,65154],"mapped",[1570]],[[65155,65156],"mapped",[1571]],[[65157,65158],"mapped",[1572]],[[65159,65160],"mapped",[1573]],[[65161,65164],"mapped",[1574]],[[65165,65166],"mapped",[1575]],[[65167,65170],"mapped",[1576]],[[65171,65172],"mapped",[1577]],[[65173,65176],"mapped",[1578]],[[65177,65180],"mapped",[1579]],[[65181,65184],"mapped",[1580]],[[65185,65188],"mapped",[1581]],[[65189,65192],"mapped",[1582]],[[65193,65194],"mapped",[1583]],[[65195,65196],"mapped",[1584]],[[65197,65198],"mapped",[1585]],[[65199,65200],"mapped",[1586]],[[65201,65204],"mapped",[1587]],[[65205,65208],"mapped",[1588]],[[65209,65212],"mapped",[1589]],[[65213,65216],"mapped",[1590]],[[65217,65220],"mapped",[1591]],[[65221,65224],"mapped",[1592]],[[65225,65228],"mapped",[1593]],[[65229,65232],"mapped",[1594]],[[65233,65236],"mapped",[1601]],[[65237,65240],"mapped",[1602]],[[65241,65244],"mapped",[1603]],[[65245,65248],"mapped",[1604]],[[65249,65252],"mapped",[1605]],[[65253,65256],"mapped",[1606]],[[65257,65260],"mapped",[1607]],[[65261,65262],"mapped",[1608]],[[65263,65264],"mapped",[1609]],[[65265,65268],"mapped",[1610]],[[65269,65270],"mapped",[1604,1570]],[[65271,65272],"mapped",[1604,1571]],[[65273,65274],"mapped",[1604,1573]],[[65275,65276],"mapped",[1604,1575]],[[65277,65278],"disallowed"],[[65279,65279],"ignored"],[[65280,65280],"disallowed"],[[65281,65281],"disallowed_STD3_mapped",[33]],[[65282,65282],"disallowed_STD3_mapped",[34]],[[65283,65283],"disallowed_STD3_mapped",[35]],[[65284,65284],"disallowed_STD3_mapped",[36]],[[65285,65285],"disallowed_STD3_mapped",[37]],[[65286,65286],"disallowed_STD3_mapped",[38]],[[65287,65287],"disallowed_STD3_mapped",[39]],[[65288,65288],"disallowed_STD3_mapped",[40]],[[65289,65289],"disallowed_STD3_mapped",[41]],[[65290,65290],"disallowed_STD3_mapped",[42]],[[65291,65291],"disallowed_STD3_mapped",[43]],[[65292,65292],"disallowed_STD3_mapped",[44]],[[65293,65293],"mapped",[45]],[[65294,65294],"mapped",[46]],[[65295,65295],"disallowed_STD3_mapped",[47]],[[65296,65296],"mapped",[48]],[[65297,65297],"mapped",[49]],[[65298,65298],"mapped",[50]],[[65299,65299],"mapped",[51]],[[65300,65300],"mapped",[52]],[[65301,65301],"mapped",[53]],[[65302,65302],"mapped",[54]],[[65303,65303],"mapped",[55]],[[65304,65304],"mapped",[56]],[[65305,65305],"mapped",[57]],[[65306,65306],"disallowed_STD3_mapped",[58]],[[65307,65307],"disallowed_STD3_mapped",[59]],[[65308,65308],"disallowed_STD3_mapped",[60]],[[65309,65309],"disallowed_STD3_mapped",[61]],[[65310,65310],"disallowed_STD3_mapped",[62]],[[65311,65311],"disallowed_STD3_mapped",[63]],[[65312,65312],"disallowed_STD3_mapped",[64]],[[65313,65313],"mapped",[97]],[[65314,65314],"mapped",[98]],[[65315,65315],"mapped",[99]],[[65316,65316],"mapped",[100]],[[65317,65317],"mapped",[101]],[[65318,65318],"mapped",[102]],[[65319,65319],"mapped",[103]],[[65320,65320],"mapped",[104]],[[65321,65321],"mapped",[105]],[[65322,65322],"mapped",[106]],[[65323,65323],"mapped",[107]],[[65324,65324],"mapped",[108]],[[65325,65325],"mapped",[109]],[[65326,65326],"mapped",[110]],[[65327,65327],"mapped",[111]],[[65328,65328],"mapped",[112]],[[65329,65329],"mapped",[113]],[[65330,65330],"mapped",[114]],[[65331,65331],"mapped",[115]],[[65332,65332],"mapped",[116]],[[65333,65333],"mapped",[117]],[[65334,65334],"mapped",[118]],[[65335,65335],"mapped",[119]],[[65336,65336],"mapped",[120]],[[65337,65337],"mapped",[121]],[[65338,65338],"mapped",[122]],[[65339,65339],"disallowed_STD3_mapped",[91]],[[65340,65340],"disallowed_STD3_mapped",[92]],[[65341,65341],"disallowed_STD3_mapped",[93]],[[65342,65342],"disallowed_STD3_mapped",[94]],[[65343,65343],"disallowed_STD3_mapped",[95]],[[65344,65344],"disallowed_STD3_mapped",[96]],[[65345,65345],"mapped",[97]],[[65346,65346],"mapped",[98]],[[65347,65347],"mapped",[99]],[[65348,65348],"mapped",[100]],[[65349,65349],"mapped",[101]],[[65350,65350],"mapped",[102]],[[65351,65351],"mapped",[103]],[[65352,65352],"mapped",[104]],[[65353,65353],"mapped",[105]],[[65354,65354],"mapped",[106]],[[65355,65355],"mapped",[107]],[[65356,65356],"mapped",[108]],[[65357,65357],"mapped",[109]],[[65358,65358],"mapped",[110]],[[65359,65359],"mapped",[111]],[[65360,65360],"mapped",[112]],[[65361,65361],"mapped",[113]],[[65362,65362],"mapped",[114]],[[65363,65363],"mapped",[115]],[[65364,65364],"mapped",[116]],[[65365,65365],"mapped",[117]],[[65366,65366],"mapped",[118]],[[65367,65367],"mapped",[119]],[[65368,65368],"mapped",[120]],[[65369,65369],"mapped",[121]],[[65370,65370],"mapped",[122]],[[65371,65371],"disallowed_STD3_mapped",[123]],[[65372,65372],"disallowed_STD3_mapped",[124]],[[65373,65373],"disallowed_STD3_mapped",[125]],[[65374,65374],"disallowed_STD3_mapped",[126]],[[65375,65375],"mapped",[10629]],[[65376,65376],"mapped",[10630]],[[65377,65377],"mapped",[46]],[[65378,65378],"mapped",[12300]],[[65379,65379],"mapped",[12301]],[[65380,65380],"mapped",[12289]],[[65381,65381],"mapped",[12539]],[[65382,65382],"mapped",[12530]],[[65383,65383],"mapped",[12449]],[[65384,65384],"mapped",[12451]],[[65385,65385],"mapped",[12453]],[[65386,65386],"mapped",[12455]],[[65387,65387],"mapped",[12457]],[[65388,65388],"mapped",[12515]],[[65389,65389],"mapped",[12517]],[[65390,65390],"mapped",[12519]],[[65391,65391],"mapped",[12483]],[[65392,65392],"mapped",[12540]],[[65393,65393],"mapped",[12450]],[[65394,65394],"mapped",[12452]],[[65395,65395],"mapped",[12454]],[[65396,65396],"mapped",[12456]],[[65397,65397],"mapped",[12458]],[[65398,65398],"mapped",[12459]],[[65399,65399],"mapped",[12461]],[[65400,65400],"mapped",[12463]],[[65401,65401],"mapped",[12465]],[[65402,65402],"mapped",[12467]],[[65403,65403],"mapped",[12469]],[[65404,65404],"mapped",[12471]],[[65405,65405],"mapped",[12473]],[[65406,65406],"mapped",[12475]],[[65407,65407],"mapped",[12477]],[[65408,65408],"mapped",[12479]],[[65409,65409],"mapped",[12481]],[[65410,65410],"mapped",[12484]],[[65411,65411],"mapped",[12486]],[[65412,65412],"mapped",[12488]],[[65413,65413],"mapped",[12490]],[[65414,65414],"mapped",[12491]],[[65415,65415],"mapped",[12492]],[[65416,65416],"mapped",[12493]],[[65417,65417],"mapped",[12494]],[[65418,65418],"mapped",[12495]],[[65419,65419],"mapped",[12498]],[[65420,65420],"mapped",[12501]],[[65421,65421],"mapped",[12504]],[[65422,65422],"mapped",[12507]],[[65423,65423],"mapped",[12510]],[[65424,65424],"mapped",[12511]],[[65425,65425],"mapped",[12512]],[[65426,65426],"mapped",[12513]],[[65427,65427],"mapped",[12514]],[[65428,65428],"mapped",[12516]],[[65429,65429],"mapped",[12518]],[[65430,65430],"mapped",[12520]],[[65431,65431],"mapped",[12521]],[[65432,65432],"mapped",[12522]],[[65433,65433],"mapped",[12523]],[[65434,65434],"mapped",[12524]],[[65435,65435],"mapped",[12525]],[[65436,65436],"mapped",[12527]],[[65437,65437],"mapped",[12531]],[[65438,65438],"mapped",[12441]],[[65439,65439],"mapped",[12442]],[[65440,65440],"disallowed"],[[65441,65441],"mapped",[4352]],[[65442,65442],"mapped",[4353]],[[65443,65443],"mapped",[4522]],[[65444,65444],"mapped",[4354]],[[65445,65445],"mapped",[4524]],[[65446,65446],"mapped",[4525]],[[65447,65447],"mapped",[4355]],[[65448,65448],"mapped",[4356]],[[65449,65449],"mapped",[4357]],[[65450,65450],"mapped",[4528]],[[65451,65451],"mapped",[4529]],[[65452,65452],"mapped",[4530]],[[65453,65453],"mapped",[4531]],[[65454,65454],"mapped",[4532]],[[65455,65455],"mapped",[4533]],[[65456,65456],"mapped",[4378]],[[65457,65457],"mapped",[4358]],[[65458,65458],"mapped",[4359]],[[65459,65459],"mapped",[4360]],[[65460,65460],"mapped",[4385]],[[65461,65461],"mapped",[4361]],[[65462,65462],"mapped",[4362]],[[65463,65463],"mapped",[4363]],[[65464,65464],"mapped",[4364]],[[65465,65465],"mapped",[4365]],[[65466,65466],"mapped",[4366]],[[65467,65467],"mapped",[4367]],[[65468,65468],"mapped",[4368]],[[65469,65469],"mapped",[4369]],[[65470,65470],"mapped",[4370]],[[65471,65473],"disallowed"],[[65474,65474],"mapped",[4449]],[[65475,65475],"mapped",[4450]],[[65476,65476],"mapped",[4451]],[[65477,65477],"mapped",[4452]],[[65478,65478],"mapped",[4453]],[[65479,65479],"mapped",[4454]],[[65480,65481],"disallowed"],[[65482,65482],"mapped",[4455]],[[65483,65483],"mapped",[4456]],[[65484,65484],"mapped",[4457]],[[65485,65485],"mapped",[4458]],[[65486,65486],"mapped",[4459]],[[65487,65487],"mapped",[4460]],[[65488,65489],"disallowed"],[[65490,65490],"mapped",[4461]],[[65491,65491],"mapped",[4462]],[[65492,65492],"mapped",[4463]],[[65493,65493],"mapped",[4464]],[[65494,65494],"mapped",[4465]],[[65495,65495],"mapped",[4466]],[[65496,65497],"disallowed"],[[65498,65498],"mapped",[4467]],[[65499,65499],"mapped",[4468]],[[65500,65500],"mapped",[4469]],[[65501,65503],"disallowed"],[[65504,65504],"mapped",[162]],[[65505,65505],"mapped",[163]],[[65506,65506],"mapped",[172]],[[65507,65507],"disallowed_STD3_mapped",[32,772]],[[65508,65508],"mapped",[166]],[[65509,65509],"mapped",[165]],[[65510,65510],"mapped",[8361]],[[65511,65511],"disallowed"],[[65512,65512],"mapped",[9474]],[[65513,65513],"mapped",[8592]],[[65514,65514],"mapped",[8593]],[[65515,65515],"mapped",[8594]],[[65516,65516],"mapped",[8595]],[[65517,65517],"mapped",[9632]],[[65518,65518],"mapped",[9675]],[[65519,65528],"disallowed"],[[65529,65531],"disallowed"],[[65532,65532],"disallowed"],[[65533,65533],"disallowed"],[[65534,65535],"disallowed"],[[65536,65547],"valid"],[[65548,65548],"disallowed"],[[65549,65574],"valid"],[[65575,65575],"disallowed"],[[65576,65594],"valid"],[[65595,65595],"disallowed"],[[65596,65597],"valid"],[[65598,65598],"disallowed"],[[65599,65613],"valid"],[[65614,65615],"disallowed"],[[65616,65629],"valid"],[[65630,65663],"disallowed"],[[65664,65786],"valid"],[[65787,65791],"disallowed"],[[65792,65794],"valid",[],"NV8"],[[65795,65798],"disallowed"],[[65799,65843],"valid",[],"NV8"],[[65844,65846],"disallowed"],[[65847,65855],"valid",[],"NV8"],[[65856,65930],"valid",[],"NV8"],[[65931,65932],"valid",[],"NV8"],[[65933,65935],"disallowed"],[[65936,65947],"valid",[],"NV8"],[[65948,65951],"disallowed"],[[65952,65952],"valid",[],"NV8"],[[65953,65999],"disallowed"],[[66e3,66044],"valid",[],"NV8"],[[66045,66045],"valid"],[[66046,66175],"disallowed"],[[66176,66204],"valid"],[[66205,66207],"disallowed"],[[66208,66256],"valid"],[[66257,66271],"disallowed"],[[66272,66272],"valid"],[[66273,66299],"valid",[],"NV8"],[[66300,66303],"disallowed"],[[66304,66334],"valid"],[[66335,66335],"valid"],[[66336,66339],"valid",[],"NV8"],[[66340,66351],"disallowed"],[[66352,66368],"valid"],[[66369,66369],"valid",[],"NV8"],[[66370,66377],"valid"],[[66378,66378],"valid",[],"NV8"],[[66379,66383],"disallowed"],[[66384,66426],"valid"],[[66427,66431],"disallowed"],[[66432,66461],"valid"],[[66462,66462],"disallowed"],[[66463,66463],"valid",[],"NV8"],[[66464,66499],"valid"],[[66500,66503],"disallowed"],[[66504,66511],"valid"],[[66512,66517],"valid",[],"NV8"],[[66518,66559],"disallowed"],[[66560,66560],"mapped",[66600]],[[66561,66561],"mapped",[66601]],[[66562,66562],"mapped",[66602]],[[66563,66563],"mapped",[66603]],[[66564,66564],"mapped",[66604]],[[66565,66565],"mapped",[66605]],[[66566,66566],"mapped",[66606]],[[66567,66567],"mapped",[66607]],[[66568,66568],"mapped",[66608]],[[66569,66569],"mapped",[66609]],[[66570,66570],"mapped",[66610]],[[66571,66571],"mapped",[66611]],[[66572,66572],"mapped",[66612]],[[66573,66573],"mapped",[66613]],[[66574,66574],"mapped",[66614]],[[66575,66575],"mapped",[66615]],[[66576,66576],"mapped",[66616]],[[66577,66577],"mapped",[66617]],[[66578,66578],"mapped",[66618]],[[66579,66579],"mapped",[66619]],[[66580,66580],"mapped",[66620]],[[66581,66581],"mapped",[66621]],[[66582,66582],"mapped",[66622]],[[66583,66583],"mapped",[66623]],[[66584,66584],"mapped",[66624]],[[66585,66585],"mapped",[66625]],[[66586,66586],"mapped",[66626]],[[66587,66587],"mapped",[66627]],[[66588,66588],"mapped",[66628]],[[66589,66589],"mapped",[66629]],[[66590,66590],"mapped",[66630]],[[66591,66591],"mapped",[66631]],[[66592,66592],"mapped",[66632]],[[66593,66593],"mapped",[66633]],[[66594,66594],"mapped",[66634]],[[66595,66595],"mapped",[66635]],[[66596,66596],"mapped",[66636]],[[66597,66597],"mapped",[66637]],[[66598,66598],"mapped",[66638]],[[66599,66599],"mapped",[66639]],[[66600,66637],"valid"],[[66638,66717],"valid"],[[66718,66719],"disallowed"],[[66720,66729],"valid"],[[66730,66815],"disallowed"],[[66816,66855],"valid"],[[66856,66863],"disallowed"],[[66864,66915],"valid"],[[66916,66926],"disallowed"],[[66927,66927],"valid",[],"NV8"],[[66928,67071],"disallowed"],[[67072,67382],"valid"],[[67383,67391],"disallowed"],[[67392,67413],"valid"],[[67414,67423],"disallowed"],[[67424,67431],"valid"],[[67432,67583],"disallowed"],[[67584,67589],"valid"],[[67590,67591],"disallowed"],[[67592,67592],"valid"],[[67593,67593],"disallowed"],[[67594,67637],"valid"],[[67638,67638],"disallowed"],[[67639,67640],"valid"],[[67641,67643],"disallowed"],[[67644,67644],"valid"],[[67645,67646],"disallowed"],[[67647,67647],"valid"],[[67648,67669],"valid"],[[67670,67670],"disallowed"],[[67671,67679],"valid",[],"NV8"],[[67680,67702],"valid"],[[67703,67711],"valid",[],"NV8"],[[67712,67742],"valid"],[[67743,67750],"disallowed"],[[67751,67759],"valid",[],"NV8"],[[67760,67807],"disallowed"],[[67808,67826],"valid"],[[67827,67827],"disallowed"],[[67828,67829],"valid"],[[67830,67834],"disallowed"],[[67835,67839],"valid",[],"NV8"],[[67840,67861],"valid"],[[67862,67865],"valid",[],"NV8"],[[67866,67867],"valid",[],"NV8"],[[67868,67870],"disallowed"],[[67871,67871],"valid",[],"NV8"],[[67872,67897],"valid"],[[67898,67902],"disallowed"],[[67903,67903],"valid",[],"NV8"],[[67904,67967],"disallowed"],[[67968,68023],"valid"],[[68024,68027],"disallowed"],[[68028,68029],"valid",[],"NV8"],[[68030,68031],"valid"],[[68032,68047],"valid",[],"NV8"],[[68048,68049],"disallowed"],[[68050,68095],"valid",[],"NV8"],[[68096,68099],"valid"],[[68100,68100],"disallowed"],[[68101,68102],"valid"],[[68103,68107],"disallowed"],[[68108,68115],"valid"],[[68116,68116],"disallowed"],[[68117,68119],"valid"],[[68120,68120],"disallowed"],[[68121,68147],"valid"],[[68148,68151],"disallowed"],[[68152,68154],"valid"],[[68155,68158],"disallowed"],[[68159,68159],"valid"],[[68160,68167],"valid",[],"NV8"],[[68168,68175],"disallowed"],[[68176,68184],"valid",[],"NV8"],[[68185,68191],"disallowed"],[[68192,68220],"valid"],[[68221,68223],"valid",[],"NV8"],[[68224,68252],"valid"],[[68253,68255],"valid",[],"NV8"],[[68256,68287],"disallowed"],[[68288,68295],"valid"],[[68296,68296],"valid",[],"NV8"],[[68297,68326],"valid"],[[68327,68330],"disallowed"],[[68331,68342],"valid",[],"NV8"],[[68343,68351],"disallowed"],[[68352,68405],"valid"],[[68406,68408],"disallowed"],[[68409,68415],"valid",[],"NV8"],[[68416,68437],"valid"],[[68438,68439],"disallowed"],[[68440,68447],"valid",[],"NV8"],[[68448,68466],"valid"],[[68467,68471],"disallowed"],[[68472,68479],"valid",[],"NV8"],[[68480,68497],"valid"],[[68498,68504],"disallowed"],[[68505,68508],"valid",[],"NV8"],[[68509,68520],"disallowed"],[[68521,68527],"valid",[],"NV8"],[[68528,68607],"disallowed"],[[68608,68680],"valid"],[[68681,68735],"disallowed"],[[68736,68736],"mapped",[68800]],[[68737,68737],"mapped",[68801]],[[68738,68738],"mapped",[68802]],[[68739,68739],"mapped",[68803]],[[68740,68740],"mapped",[68804]],[[68741,68741],"mapped",[68805]],[[68742,68742],"mapped",[68806]],[[68743,68743],"mapped",[68807]],[[68744,68744],"mapped",[68808]],[[68745,68745],"mapped",[68809]],[[68746,68746],"mapped",[68810]],[[68747,68747],"mapped",[68811]],[[68748,68748],"mapped",[68812]],[[68749,68749],"mapped",[68813]],[[68750,68750],"mapped",[68814]],[[68751,68751],"mapped",[68815]],[[68752,68752],"mapped",[68816]],[[68753,68753],"mapped",[68817]],[[68754,68754],"mapped",[68818]],[[68755,68755],"mapped",[68819]],[[68756,68756],"mapped",[68820]],[[68757,68757],"mapped",[68821]],[[68758,68758],"mapped",[68822]],[[68759,68759],"mapped",[68823]],[[68760,68760],"mapped",[68824]],[[68761,68761],"mapped",[68825]],[[68762,68762],"mapped",[68826]],[[68763,68763],"mapped",[68827]],[[68764,68764],"mapped",[68828]],[[68765,68765],"mapped",[68829]],[[68766,68766],"mapped",[68830]],[[68767,68767],"mapped",[68831]],[[68768,68768],"mapped",[68832]],[[68769,68769],"mapped",[68833]],[[68770,68770],"mapped",[68834]],[[68771,68771],"mapped",[68835]],[[68772,68772],"mapped",[68836]],[[68773,68773],"mapped",[68837]],[[68774,68774],"mapped",[68838]],[[68775,68775],"mapped",[68839]],[[68776,68776],"mapped",[68840]],[[68777,68777],"mapped",[68841]],[[68778,68778],"mapped",[68842]],[[68779,68779],"mapped",[68843]],[[68780,68780],"mapped",[68844]],[[68781,68781],"mapped",[68845]],[[68782,68782],"mapped",[68846]],[[68783,68783],"mapped",[68847]],[[68784,68784],"mapped",[68848]],[[68785,68785],"mapped",[68849]],[[68786,68786],"mapped",[68850]],[[68787,68799],"disallowed"],[[68800,68850],"valid"],[[68851,68857],"disallowed"],[[68858,68863],"valid",[],"NV8"],[[68864,69215],"disallowed"],[[69216,69246],"valid",[],"NV8"],[[69247,69631],"disallowed"],[[69632,69702],"valid"],[[69703,69709],"valid",[],"NV8"],[[69710,69713],"disallowed"],[[69714,69733],"valid",[],"NV8"],[[69734,69743],"valid"],[[69744,69758],"disallowed"],[[69759,69759],"valid"],[[69760,69818],"valid"],[[69819,69820],"valid",[],"NV8"],[[69821,69821],"disallowed"],[[69822,69825],"valid",[],"NV8"],[[69826,69839],"disallowed"],[[69840,69864],"valid"],[[69865,69871],"disallowed"],[[69872,69881],"valid"],[[69882,69887],"disallowed"],[[69888,69940],"valid"],[[69941,69941],"disallowed"],[[69942,69951],"valid"],[[69952,69955],"valid",[],"NV8"],[[69956,69967],"disallowed"],[[69968,70003],"valid"],[[70004,70005],"valid",[],"NV8"],[[70006,70006],"valid"],[[70007,70015],"disallowed"],[[70016,70084],"valid"],[[70085,70088],"valid",[],"NV8"],[[70089,70089],"valid",[],"NV8"],[[70090,70092],"valid"],[[70093,70093],"valid",[],"NV8"],[[70094,70095],"disallowed"],[[70096,70105],"valid"],[[70106,70106],"valid"],[[70107,70107],"valid",[],"NV8"],[[70108,70108],"valid"],[[70109,70111],"valid",[],"NV8"],[[70112,70112],"disallowed"],[[70113,70132],"valid",[],"NV8"],[[70133,70143],"disallowed"],[[70144,70161],"valid"],[[70162,70162],"disallowed"],[[70163,70199],"valid"],[[70200,70205],"valid",[],"NV8"],[[70206,70271],"disallowed"],[[70272,70278],"valid"],[[70279,70279],"disallowed"],[[70280,70280],"valid"],[[70281,70281],"disallowed"],[[70282,70285],"valid"],[[70286,70286],"disallowed"],[[70287,70301],"valid"],[[70302,70302],"disallowed"],[[70303,70312],"valid"],[[70313,70313],"valid",[],"NV8"],[[70314,70319],"disallowed"],[[70320,70378],"valid"],[[70379,70383],"disallowed"],[[70384,70393],"valid"],[[70394,70399],"disallowed"],[[70400,70400],"valid"],[[70401,70403],"valid"],[[70404,70404],"disallowed"],[[70405,70412],"valid"],[[70413,70414],"disallowed"],[[70415,70416],"valid"],[[70417,70418],"disallowed"],[[70419,70440],"valid"],[[70441,70441],"disallowed"],[[70442,70448],"valid"],[[70449,70449],"disallowed"],[[70450,70451],"valid"],[[70452,70452],"disallowed"],[[70453,70457],"valid"],[[70458,70459],"disallowed"],[[70460,70468],"valid"],[[70469,70470],"disallowed"],[[70471,70472],"valid"],[[70473,70474],"disallowed"],[[70475,70477],"valid"],[[70478,70479],"disallowed"],[[70480,70480],"valid"],[[70481,70486],"disallowed"],[[70487,70487],"valid"],[[70488,70492],"disallowed"],[[70493,70499],"valid"],[[70500,70501],"disallowed"],[[70502,70508],"valid"],[[70509,70511],"disallowed"],[[70512,70516],"valid"],[[70517,70783],"disallowed"],[[70784,70853],"valid"],[[70854,70854],"valid",[],"NV8"],[[70855,70855],"valid"],[[70856,70863],"disallowed"],[[70864,70873],"valid"],[[70874,71039],"disallowed"],[[71040,71093],"valid"],[[71094,71095],"disallowed"],[[71096,71104],"valid"],[[71105,71113],"valid",[],"NV8"],[[71114,71127],"valid",[],"NV8"],[[71128,71133],"valid"],[[71134,71167],"disallowed"],[[71168,71232],"valid"],[[71233,71235],"valid",[],"NV8"],[[71236,71236],"valid"],[[71237,71247],"disallowed"],[[71248,71257],"valid"],[[71258,71295],"disallowed"],[[71296,71351],"valid"],[[71352,71359],"disallowed"],[[71360,71369],"valid"],[[71370,71423],"disallowed"],[[71424,71449],"valid"],[[71450,71452],"disallowed"],[[71453,71467],"valid"],[[71468,71471],"disallowed"],[[71472,71481],"valid"],[[71482,71487],"valid",[],"NV8"],[[71488,71839],"disallowed"],[[71840,71840],"mapped",[71872]],[[71841,71841],"mapped",[71873]],[[71842,71842],"mapped",[71874]],[[71843,71843],"mapped",[71875]],[[71844,71844],"mapped",[71876]],[[71845,71845],"mapped",[71877]],[[71846,71846],"mapped",[71878]],[[71847,71847],"mapped",[71879]],[[71848,71848],"mapped",[71880]],[[71849,71849],"mapped",[71881]],[[71850,71850],"mapped",[71882]],[[71851,71851],"mapped",[71883]],[[71852,71852],"mapped",[71884]],[[71853,71853],"mapped",[71885]],[[71854,71854],"mapped",[71886]],[[71855,71855],"mapped",[71887]],[[71856,71856],"mapped",[71888]],[[71857,71857],"mapped",[71889]],[[71858,71858],"mapped",[71890]],[[71859,71859],"mapped",[71891]],[[71860,71860],"mapped",[71892]],[[71861,71861],"mapped",[71893]],[[71862,71862],"mapped",[71894]],[[71863,71863],"mapped",[71895]],[[71864,71864],"mapped",[71896]],[[71865,71865],"mapped",[71897]],[[71866,71866],"mapped",[71898]],[[71867,71867],"mapped",[71899]],[[71868,71868],"mapped",[71900]],[[71869,71869],"mapped",[71901]],[[71870,71870],"mapped",[71902]],[[71871,71871],"mapped",[71903]],[[71872,71913],"valid"],[[71914,71922],"valid",[],"NV8"],[[71923,71934],"disallowed"],[[71935,71935],"valid"],[[71936,72383],"disallowed"],[[72384,72440],"valid"],[[72441,73727],"disallowed"],[[73728,74606],"valid"],[[74607,74648],"valid"],[[74649,74649],"valid"],[[74650,74751],"disallowed"],[[74752,74850],"valid",[],"NV8"],[[74851,74862],"valid",[],"NV8"],[[74863,74863],"disallowed"],[[74864,74867],"valid",[],"NV8"],[[74868,74868],"valid",[],"NV8"],[[74869,74879],"disallowed"],[[74880,75075],"valid"],[[75076,77823],"disallowed"],[[77824,78894],"valid"],[[78895,82943],"disallowed"],[[82944,83526],"valid"],[[83527,92159],"disallowed"],[[92160,92728],"valid"],[[92729,92735],"disallowed"],[[92736,92766],"valid"],[[92767,92767],"disallowed"],[[92768,92777],"valid"],[[92778,92781],"disallowed"],[[92782,92783],"valid",[],"NV8"],[[92784,92879],"disallowed"],[[92880,92909],"valid"],[[92910,92911],"disallowed"],[[92912,92916],"valid"],[[92917,92917],"valid",[],"NV8"],[[92918,92927],"disallowed"],[[92928,92982],"valid"],[[92983,92991],"valid",[],"NV8"],[[92992,92995],"valid"],[[92996,92997],"valid",[],"NV8"],[[92998,93007],"disallowed"],[[93008,93017],"valid"],[[93018,93018],"disallowed"],[[93019,93025],"valid",[],"NV8"],[[93026,93026],"disallowed"],[[93027,93047],"valid"],[[93048,93052],"disallowed"],[[93053,93071],"valid"],[[93072,93951],"disallowed"],[[93952,94020],"valid"],[[94021,94031],"disallowed"],[[94032,94078],"valid"],[[94079,94094],"disallowed"],[[94095,94111],"valid"],[[94112,110591],"disallowed"],[[110592,110593],"valid"],[[110594,113663],"disallowed"],[[113664,113770],"valid"],[[113771,113775],"disallowed"],[[113776,113788],"valid"],[[113789,113791],"disallowed"],[[113792,113800],"valid"],[[113801,113807],"disallowed"],[[113808,113817],"valid"],[[113818,113819],"disallowed"],[[113820,113820],"valid",[],"NV8"],[[113821,113822],"valid"],[[113823,113823],"valid",[],"NV8"],[[113824,113827],"ignored"],[[113828,118783],"disallowed"],[[118784,119029],"valid",[],"NV8"],[[119030,119039],"disallowed"],[[119040,119078],"valid",[],"NV8"],[[119079,119080],"disallowed"],[[119081,119081],"valid",[],"NV8"],[[119082,119133],"valid",[],"NV8"],[[119134,119134],"mapped",[119127,119141]],[[119135,119135],"mapped",[119128,119141]],[[119136,119136],"mapped",[119128,119141,119150]],[[119137,119137],"mapped",[119128,119141,119151]],[[119138,119138],"mapped",[119128,119141,119152]],[[119139,119139],"mapped",[119128,119141,119153]],[[119140,119140],"mapped",[119128,119141,119154]],[[119141,119154],"valid",[],"NV8"],[[119155,119162],"disallowed"],[[119163,119226],"valid",[],"NV8"],[[119227,119227],"mapped",[119225,119141]],[[119228,119228],"mapped",[119226,119141]],[[119229,119229],"mapped",[119225,119141,119150]],[[119230,119230],"mapped",[119226,119141,119150]],[[119231,119231],"mapped",[119225,119141,119151]],[[119232,119232],"mapped",[119226,119141,119151]],[[119233,119261],"valid",[],"NV8"],[[119262,119272],"valid",[],"NV8"],[[119273,119295],"disallowed"],[[119296,119365],"valid",[],"NV8"],[[119366,119551],"disallowed"],[[119552,119638],"valid",[],"NV8"],[[119639,119647],"disallowed"],[[119648,119665],"valid",[],"NV8"],[[119666,119807],"disallowed"],[[119808,119808],"mapped",[97]],[[119809,119809],"mapped",[98]],[[119810,119810],"mapped",[99]],[[119811,119811],"mapped",[100]],[[119812,119812],"mapped",[101]],[[119813,119813],"mapped",[102]],[[119814,119814],"mapped",[103]],[[119815,119815],"mapped",[104]],[[119816,119816],"mapped",[105]],[[119817,119817],"mapped",[106]],[[119818,119818],"mapped",[107]],[[119819,119819],"mapped",[108]],[[119820,119820],"mapped",[109]],[[119821,119821],"mapped",[110]],[[119822,119822],"mapped",[111]],[[119823,119823],"mapped",[112]],[[119824,119824],"mapped",[113]],[[119825,119825],"mapped",[114]],[[119826,119826],"mapped",[115]],[[119827,119827],"mapped",[116]],[[119828,119828],"mapped",[117]],[[119829,119829],"mapped",[118]],[[119830,119830],"mapped",[119]],[[119831,119831],"mapped",[120]],[[119832,119832],"mapped",[121]],[[119833,119833],"mapped",[122]],[[119834,119834],"mapped",[97]],[[119835,119835],"mapped",[98]],[[119836,119836],"mapped",[99]],[[119837,119837],"mapped",[100]],[[119838,119838],"mapped",[101]],[[119839,119839],"mapped",[102]],[[119840,119840],"mapped",[103]],[[119841,119841],"mapped",[104]],[[119842,119842],"mapped",[105]],[[119843,119843],"mapped",[106]],[[119844,119844],"mapped",[107]],[[119845,119845],"mapped",[108]],[[119846,119846],"mapped",[109]],[[119847,119847],"mapped",[110]],[[119848,119848],"mapped",[111]],[[119849,119849],"mapped",[112]],[[119850,119850],"mapped",[113]],[[119851,119851],"mapped",[114]],[[119852,119852],"mapped",[115]],[[119853,119853],"mapped",[116]],[[119854,119854],"mapped",[117]],[[119855,119855],"mapped",[118]],[[119856,119856],"mapped",[119]],[[119857,119857],"mapped",[120]],[[119858,119858],"mapped",[121]],[[119859,119859],"mapped",[122]],[[119860,119860],"mapped",[97]],[[119861,119861],"mapped",[98]],[[119862,119862],"mapped",[99]],[[119863,119863],"mapped",[100]],[[119864,119864],"mapped",[101]],[[119865,119865],"mapped",[102]],[[119866,119866],"mapped",[103]],[[119867,119867],"mapped",[104]],[[119868,119868],"mapped",[105]],[[119869,119869],"mapped",[106]],[[119870,119870],"mapped",[107]],[[119871,119871],"mapped",[108]],[[119872,119872],"mapped",[109]],[[119873,119873],"mapped",[110]],[[119874,119874],"mapped",[111]],[[119875,119875],"mapped",[112]],[[119876,119876],"mapped",[113]],[[119877,119877],"mapped",[114]],[[119878,119878],"mapped",[115]],[[119879,119879],"mapped",[116]],[[119880,119880],"mapped",[117]],[[119881,119881],"mapped",[118]],[[119882,119882],"mapped",[119]],[[119883,119883],"mapped",[120]],[[119884,119884],"mapped",[121]],[[119885,119885],"mapped",[122]],[[119886,119886],"mapped",[97]],[[119887,119887],"mapped",[98]],[[119888,119888],"mapped",[99]],[[119889,119889],"mapped",[100]],[[119890,119890],"mapped",[101]],[[119891,119891],"mapped",[102]],[[119892,119892],"mapped",[103]],[[119893,119893],"disallowed"],[[119894,119894],"mapped",[105]],[[119895,119895],"mapped",[106]],[[119896,119896],"mapped",[107]],[[119897,119897],"mapped",[108]],[[119898,119898],"mapped",[109]],[[119899,119899],"mapped",[110]],[[119900,119900],"mapped",[111]],[[119901,119901],"mapped",[112]],[[119902,119902],"mapped",[113]],[[119903,119903],"mapped",[114]],[[119904,119904],"mapped",[115]],[[119905,119905],"mapped",[116]],[[119906,119906],"mapped",[117]],[[119907,119907],"mapped",[118]],[[119908,119908],"mapped",[119]],[[119909,119909],"mapped",[120]],[[119910,119910],"mapped",[121]],[[119911,119911],"mapped",[122]],[[119912,119912],"mapped",[97]],[[119913,119913],"mapped",[98]],[[119914,119914],"mapped",[99]],[[119915,119915],"mapped",[100]],[[119916,119916],"mapped",[101]],[[119917,119917],"mapped",[102]],[[119918,119918],"mapped",[103]],[[119919,119919],"mapped",[104]],[[119920,119920],"mapped",[105]],[[119921,119921],"mapped",[106]],[[119922,119922],"mapped",[107]],[[119923,119923],"mapped",[108]],[[119924,119924],"mapped",[109]],[[119925,119925],"mapped",[110]],[[119926,119926],"mapped",[111]],[[119927,119927],"mapped",[112]],[[119928,119928],"mapped",[113]],[[119929,119929],"mapped",[114]],[[119930,119930],"mapped",[115]],[[119931,119931],"mapped",[116]],[[119932,119932],"mapped",[117]],[[119933,119933],"mapped",[118]],[[119934,119934],"mapped",[119]],[[119935,119935],"mapped",[120]],[[119936,119936],"mapped",[121]],[[119937,119937],"mapped",[122]],[[119938,119938],"mapped",[97]],[[119939,119939],"mapped",[98]],[[119940,119940],"mapped",[99]],[[119941,119941],"mapped",[100]],[[119942,119942],"mapped",[101]],[[119943,119943],"mapped",[102]],[[119944,119944],"mapped",[103]],[[119945,119945],"mapped",[104]],[[119946,119946],"mapped",[105]],[[119947,119947],"mapped",[106]],[[119948,119948],"mapped",[107]],[[119949,119949],"mapped",[108]],[[119950,119950],"mapped",[109]],[[119951,119951],"mapped",[110]],[[119952,119952],"mapped",[111]],[[119953,119953],"mapped",[112]],[[119954,119954],"mapped",[113]],[[119955,119955],"mapped",[114]],[[119956,119956],"mapped",[115]],[[119957,119957],"mapped",[116]],[[119958,119958],"mapped",[117]],[[119959,119959],"mapped",[118]],[[119960,119960],"mapped",[119]],[[119961,119961],"mapped",[120]],[[119962,119962],"mapped",[121]],[[119963,119963],"mapped",[122]],[[119964,119964],"mapped",[97]],[[119965,119965],"disallowed"],[[119966,119966],"mapped",[99]],[[119967,119967],"mapped",[100]],[[119968,119969],"disallowed"],[[119970,119970],"mapped",[103]],[[119971,119972],"disallowed"],[[119973,119973],"mapped",[106]],[[119974,119974],"mapped",[107]],[[119975,119976],"disallowed"],[[119977,119977],"mapped",[110]],[[119978,119978],"mapped",[111]],[[119979,119979],"mapped",[112]],[[119980,119980],"mapped",[113]],[[119981,119981],"disallowed"],[[119982,119982],"mapped",[115]],[[119983,119983],"mapped",[116]],[[119984,119984],"mapped",[117]],[[119985,119985],"mapped",[118]],[[119986,119986],"mapped",[119]],[[119987,119987],"mapped",[120]],[[119988,119988],"mapped",[121]],[[119989,119989],"mapped",[122]],[[119990,119990],"mapped",[97]],[[119991,119991],"mapped",[98]],[[119992,119992],"mapped",[99]],[[119993,119993],"mapped",[100]],[[119994,119994],"disallowed"],[[119995,119995],"mapped",[102]],[[119996,119996],"disallowed"],[[119997,119997],"mapped",[104]],[[119998,119998],"mapped",[105]],[[119999,119999],"mapped",[106]],[[12e4,12e4],"mapped",[107]],[[120001,120001],"mapped",[108]],[[120002,120002],"mapped",[109]],[[120003,120003],"mapped",[110]],[[120004,120004],"disallowed"],[[120005,120005],"mapped",[112]],[[120006,120006],"mapped",[113]],[[120007,120007],"mapped",[114]],[[120008,120008],"mapped",[115]],[[120009,120009],"mapped",[116]],[[120010,120010],"mapped",[117]],[[120011,120011],"mapped",[118]],[[120012,120012],"mapped",[119]],[[120013,120013],"mapped",[120]],[[120014,120014],"mapped",[121]],[[120015,120015],"mapped",[122]],[[120016,120016],"mapped",[97]],[[120017,120017],"mapped",[98]],[[120018,120018],"mapped",[99]],[[120019,120019],"mapped",[100]],[[120020,120020],"mapped",[101]],[[120021,120021],"mapped",[102]],[[120022,120022],"mapped",[103]],[[120023,120023],"mapped",[104]],[[120024,120024],"mapped",[105]],[[120025,120025],"mapped",[106]],[[120026,120026],"mapped",[107]],[[120027,120027],"mapped",[108]],[[120028,120028],"mapped",[109]],[[120029,120029],"mapped",[110]],[[120030,120030],"mapped",[111]],[[120031,120031],"mapped",[112]],[[120032,120032],"mapped",[113]],[[120033,120033],"mapped",[114]],[[120034,120034],"mapped",[115]],[[120035,120035],"mapped",[116]],[[120036,120036],"mapped",[117]],[[120037,120037],"mapped",[118]],[[120038,120038],"mapped",[119]],[[120039,120039],"mapped",[120]],[[120040,120040],"mapped",[121]],[[120041,120041],"mapped",[122]],[[120042,120042],"mapped",[97]],[[120043,120043],"mapped",[98]],[[120044,120044],"mapped",[99]],[[120045,120045],"mapped",[100]],[[120046,120046],"mapped",[101]],[[120047,120047],"mapped",[102]],[[120048,120048],"mapped",[103]],[[120049,120049],"mapped",[104]],[[120050,120050],"mapped",[105]],[[120051,120051],"mapped",[106]],[[120052,120052],"mapped",[107]],[[120053,120053],"mapped",[108]],[[120054,120054],"mapped",[109]],[[120055,120055],"mapped",[110]],[[120056,120056],"mapped",[111]],[[120057,120057],"mapped",[112]],[[120058,120058],"mapped",[113]],[[120059,120059],"mapped",[114]],[[120060,120060],"mapped",[115]],[[120061,120061],"mapped",[116]],[[120062,120062],"mapped",[117]],[[120063,120063],"mapped",[118]],[[120064,120064],"mapped",[119]],[[120065,120065],"mapped",[120]],[[120066,120066],"mapped",[121]],[[120067,120067],"mapped",[122]],[[120068,120068],"mapped",[97]],[[120069,120069],"mapped",[98]],[[120070,120070],"disallowed"],[[120071,120071],"mapped",[100]],[[120072,120072],"mapped",[101]],[[120073,120073],"mapped",[102]],[[120074,120074],"mapped",[103]],[[120075,120076],"disallowed"],[[120077,120077],"mapped",[106]],[[120078,120078],"mapped",[107]],[[120079,120079],"mapped",[108]],[[120080,120080],"mapped",[109]],[[120081,120081],"mapped",[110]],[[120082,120082],"mapped",[111]],[[120083,120083],"mapped",[112]],[[120084,120084],"mapped",[113]],[[120085,120085],"disallowed"],[[120086,120086],"mapped",[115]],[[120087,120087],"mapped",[116]],[[120088,120088],"mapped",[117]],[[120089,120089],"mapped",[118]],[[120090,120090],"mapped",[119]],[[120091,120091],"mapped",[120]],[[120092,120092],"mapped",[121]],[[120093,120093],"disallowed"],[[120094,120094],"mapped",[97]],[[120095,120095],"mapped",[98]],[[120096,120096],"mapped",[99]],[[120097,120097],"mapped",[100]],[[120098,120098],"mapped",[101]],[[120099,120099],"mapped",[102]],[[120100,120100],"mapped",[103]],[[120101,120101],"mapped",[104]],[[120102,120102],"mapped",[105]],[[120103,120103],"mapped",[106]],[[120104,120104],"mapped",[107]],[[120105,120105],"mapped",[108]],[[120106,120106],"mapped",[109]],[[120107,120107],"mapped",[110]],[[120108,120108],"mapped",[111]],[[120109,120109],"mapped",[112]],[[120110,120110],"mapped",[113]],[[120111,120111],"mapped",[114]],[[120112,120112],"mapped",[115]],[[120113,120113],"mapped",[116]],[[120114,120114],"mapped",[117]],[[120115,120115],"mapped",[118]],[[120116,120116],"mapped",[119]],[[120117,120117],"mapped",[120]],[[120118,120118],"mapped",[121]],[[120119,120119],"mapped",[122]],[[120120,120120],"mapped",[97]],[[120121,120121],"mapped",[98]],[[120122,120122],"disallowed"],[[120123,120123],"mapped",[100]],[[120124,120124],"mapped",[101]],[[120125,120125],"mapped",[102]],[[120126,120126],"mapped",[103]],[[120127,120127],"disallowed"],[[120128,120128],"mapped",[105]],[[120129,120129],"mapped",[106]],[[120130,120130],"mapped",[107]],[[120131,120131],"mapped",[108]],[[120132,120132],"mapped",[109]],[[120133,120133],"disallowed"],[[120134,120134],"mapped",[111]],[[120135,120137],"disallowed"],[[120138,120138],"mapped",[115]],[[120139,120139],"mapped",[116]],[[120140,120140],"mapped",[117]],[[120141,120141],"mapped",[118]],[[120142,120142],"mapped",[119]],[[120143,120143],"mapped",[120]],[[120144,120144],"mapped",[121]],[[120145,120145],"disallowed"],[[120146,120146],"mapped",[97]],[[120147,120147],"mapped",[98]],[[120148,120148],"mapped",[99]],[[120149,120149],"mapped",[100]],[[120150,120150],"mapped",[101]],[[120151,120151],"mapped",[102]],[[120152,120152],"mapped",[103]],[[120153,120153],"mapped",[104]],[[120154,120154],"mapped",[105]],[[120155,120155],"mapped",[106]],[[120156,120156],"mapped",[107]],[[120157,120157],"mapped",[108]],[[120158,120158],"mapped",[109]],[[120159,120159],"mapped",[110]],[[120160,120160],"mapped",[111]],[[120161,120161],"mapped",[112]],[[120162,120162],"mapped",[113]],[[120163,120163],"mapped",[114]],[[120164,120164],"mapped",[115]],[[120165,120165],"mapped",[116]],[[120166,120166],"mapped",[117]],[[120167,120167],"mapped",[118]],[[120168,120168],"mapped",[119]],[[120169,120169],"mapped",[120]],[[120170,120170],"mapped",[121]],[[120171,120171],"mapped",[122]],[[120172,120172],"mapped",[97]],[[120173,120173],"mapped",[98]],[[120174,120174],"mapped",[99]],[[120175,120175],"mapped",[100]],[[120176,120176],"mapped",[101]],[[120177,120177],"mapped",[102]],[[120178,120178],"mapped",[103]],[[120179,120179],"mapped",[104]],[[120180,120180],"mapped",[105]],[[120181,120181],"mapped",[106]],[[120182,120182],"mapped",[107]],[[120183,120183],"mapped",[108]],[[120184,120184],"mapped",[109]],[[120185,120185],"mapped",[110]],[[120186,120186],"mapped",[111]],[[120187,120187],"mapped",[112]],[[120188,120188],"mapped",[113]],[[120189,120189],"mapped",[114]],[[120190,120190],"mapped",[115]],[[120191,120191],"mapped",[116]],[[120192,120192],"mapped",[117]],[[120193,120193],"mapped",[118]],[[120194,120194],"mapped",[119]],[[120195,120195],"mapped",[120]],[[120196,120196],"mapped",[121]],[[120197,120197],"mapped",[122]],[[120198,120198],"mapped",[97]],[[120199,120199],"mapped",[98]],[[120200,120200],"mapped",[99]],[[120201,120201],"mapped",[100]],[[120202,120202],"mapped",[101]],[[120203,120203],"mapped",[102]],[[120204,120204],"mapped",[103]],[[120205,120205],"mapped",[104]],[[120206,120206],"mapped",[105]],[[120207,120207],"mapped",[106]],[[120208,120208],"mapped",[107]],[[120209,120209],"mapped",[108]],[[120210,120210],"mapped",[109]],[[120211,120211],"mapped",[110]],[[120212,120212],"mapped",[111]],[[120213,120213],"mapped",[112]],[[120214,120214],"mapped",[113]],[[120215,120215],"mapped",[114]],[[120216,120216],"mapped",[115]],[[120217,120217],"mapped",[116]],[[120218,120218],"mapped",[117]],[[120219,120219],"mapped",[118]],[[120220,120220],"mapped",[119]],[[120221,120221],"mapped",[120]],[[120222,120222],"mapped",[121]],[[120223,120223],"mapped",[122]],[[120224,120224],"mapped",[97]],[[120225,120225],"mapped",[98]],[[120226,120226],"mapped",[99]],[[120227,120227],"mapped",[100]],[[120228,120228],"mapped",[101]],[[120229,120229],"mapped",[102]],[[120230,120230],"mapped",[103]],[[120231,120231],"mapped",[104]],[[120232,120232],"mapped",[105]],[[120233,120233],"mapped",[106]],[[120234,120234],"mapped",[107]],[[120235,120235],"mapped",[108]],[[120236,120236],"mapped",[109]],[[120237,120237],"mapped",[110]],[[120238,120238],"mapped",[111]],[[120239,120239],"mapped",[112]],[[120240,120240],"mapped",[113]],[[120241,120241],"mapped",[114]],[[120242,120242],"mapped",[115]],[[120243,120243],"mapped",[116]],[[120244,120244],"mapped",[117]],[[120245,120245],"mapped",[118]],[[120246,120246],"mapped",[119]],[[120247,120247],"mapped",[120]],[[120248,120248],"mapped",[121]],[[120249,120249],"mapped",[122]],[[120250,120250],"mapped",[97]],[[120251,120251],"mapped",[98]],[[120252,120252],"mapped",[99]],[[120253,120253],"mapped",[100]],[[120254,120254],"mapped",[101]],[[120255,120255],"mapped",[102]],[[120256,120256],"mapped",[103]],[[120257,120257],"mapped",[104]],[[120258,120258],"mapped",[105]],[[120259,120259],"mapped",[106]],[[120260,120260],"mapped",[107]],[[120261,120261],"mapped",[108]],[[120262,120262],"mapped",[109]],[[120263,120263],"mapped",[110]],[[120264,120264],"mapped",[111]],[[120265,120265],"mapped",[112]],[[120266,120266],"mapped",[113]],[[120267,120267],"mapped",[114]],[[120268,120268],"mapped",[115]],[[120269,120269],"mapped",[116]],[[120270,120270],"mapped",[117]],[[120271,120271],"mapped",[118]],[[120272,120272],"mapped",[119]],[[120273,120273],"mapped",[120]],[[120274,120274],"mapped",[121]],[[120275,120275],"mapped",[122]],[[120276,120276],"mapped",[97]],[[120277,120277],"mapped",[98]],[[120278,120278],"mapped",[99]],[[120279,120279],"mapped",[100]],[[120280,120280],"mapped",[101]],[[120281,120281],"mapped",[102]],[[120282,120282],"mapped",[103]],[[120283,120283],"mapped",[104]],[[120284,120284],"mapped",[105]],[[120285,120285],"mapped",[106]],[[120286,120286],"mapped",[107]],[[120287,120287],"mapped",[108]],[[120288,120288],"mapped",[109]],[[120289,120289],"mapped",[110]],[[120290,120290],"mapped",[111]],[[120291,120291],"mapped",[112]],[[120292,120292],"mapped",[113]],[[120293,120293],"mapped",[114]],[[120294,120294],"mapped",[115]],[[120295,120295],"mapped",[116]],[[120296,120296],"mapped",[117]],[[120297,120297],"mapped",[118]],[[120298,120298],"mapped",[119]],[[120299,120299],"mapped",[120]],[[120300,120300],"mapped",[121]],[[120301,120301],"mapped",[122]],[[120302,120302],"mapped",[97]],[[120303,120303],"mapped",[98]],[[120304,120304],"mapped",[99]],[[120305,120305],"mapped",[100]],[[120306,120306],"mapped",[101]],[[120307,120307],"mapped",[102]],[[120308,120308],"mapped",[103]],[[120309,120309],"mapped",[104]],[[120310,120310],"mapped",[105]],[[120311,120311],"mapped",[106]],[[120312,120312],"mapped",[107]],[[120313,120313],"mapped",[108]],[[120314,120314],"mapped",[109]],[[120315,120315],"mapped",[110]],[[120316,120316],"mapped",[111]],[[120317,120317],"mapped",[112]],[[120318,120318],"mapped",[113]],[[120319,120319],"mapped",[114]],[[120320,120320],"mapped",[115]],[[120321,120321],"mapped",[116]],[[120322,120322],"mapped",[117]],[[120323,120323],"mapped",[118]],[[120324,120324],"mapped",[119]],[[120325,120325],"mapped",[120]],[[120326,120326],"mapped",[121]],[[120327,120327],"mapped",[122]],[[120328,120328],"mapped",[97]],[[120329,120329],"mapped",[98]],[[120330,120330],"mapped",[99]],[[120331,120331],"mapped",[100]],[[120332,120332],"mapped",[101]],[[120333,120333],"mapped",[102]],[[120334,120334],"mapped",[103]],[[120335,120335],"mapped",[104]],[[120336,120336],"mapped",[105]],[[120337,120337],"mapped",[106]],[[120338,120338],"mapped",[107]],[[120339,120339],"mapped",[108]],[[120340,120340],"mapped",[109]],[[120341,120341],"mapped",[110]],[[120342,120342],"mapped",[111]],[[120343,120343],"mapped",[112]],[[120344,120344],"mapped",[113]],[[120345,120345],"mapped",[114]],[[120346,120346],"mapped",[115]],[[120347,120347],"mapped",[116]],[[120348,120348],"mapped",[117]],[[120349,120349],"mapped",[118]],[[120350,120350],"mapped",[119]],[[120351,120351],"mapped",[120]],[[120352,120352],"mapped",[121]],[[120353,120353],"mapped",[122]],[[120354,120354],"mapped",[97]],[[120355,120355],"mapped",[98]],[[120356,120356],"mapped",[99]],[[120357,120357],"mapped",[100]],[[120358,120358],"mapped",[101]],[[120359,120359],"mapped",[102]],[[120360,120360],"mapped",[103]],[[120361,120361],"mapped",[104]],[[120362,120362],"mapped",[105]],[[120363,120363],"mapped",[106]],[[120364,120364],"mapped",[107]],[[120365,120365],"mapped",[108]],[[120366,120366],"mapped",[109]],[[120367,120367],"mapped",[110]],[[120368,120368],"mapped",[111]],[[120369,120369],"mapped",[112]],[[120370,120370],"mapped",[113]],[[120371,120371],"mapped",[114]],[[120372,120372],"mapped",[115]],[[120373,120373],"mapped",[116]],[[120374,120374],"mapped",[117]],[[120375,120375],"mapped",[118]],[[120376,120376],"mapped",[119]],[[120377,120377],"mapped",[120]],[[120378,120378],"mapped",[121]],[[120379,120379],"mapped",[122]],[[120380,120380],"mapped",[97]],[[120381,120381],"mapped",[98]],[[120382,120382],"mapped",[99]],[[120383,120383],"mapped",[100]],[[120384,120384],"mapped",[101]],[[120385,120385],"mapped",[102]],[[120386,120386],"mapped",[103]],[[120387,120387],"mapped",[104]],[[120388,120388],"mapped",[105]],[[120389,120389],"mapped",[106]],[[120390,120390],"mapped",[107]],[[120391,120391],"mapped",[108]],[[120392,120392],"mapped",[109]],[[120393,120393],"mapped",[110]],[[120394,120394],"mapped",[111]],[[120395,120395],"mapped",[112]],[[120396,120396],"mapped",[113]],[[120397,120397],"mapped",[114]],[[120398,120398],"mapped",[115]],[[120399,120399],"mapped",[116]],[[120400,120400],"mapped",[117]],[[120401,120401],"mapped",[118]],[[120402,120402],"mapped",[119]],[[120403,120403],"mapped",[120]],[[120404,120404],"mapped",[121]],[[120405,120405],"mapped",[122]],[[120406,120406],"mapped",[97]],[[120407,120407],"mapped",[98]],[[120408,120408],"mapped",[99]],[[120409,120409],"mapped",[100]],[[120410,120410],"mapped",[101]],[[120411,120411],"mapped",[102]],[[120412,120412],"mapped",[103]],[[120413,120413],"mapped",[104]],[[120414,120414],"mapped",[105]],[[120415,120415],"mapped",[106]],[[120416,120416],"mapped",[107]],[[120417,120417],"mapped",[108]],[[120418,120418],"mapped",[109]],[[120419,120419],"mapped",[110]],[[120420,120420],"mapped",[111]],[[120421,120421],"mapped",[112]],[[120422,120422],"mapped",[113]],[[120423,120423],"mapped",[114]],[[120424,120424],"mapped",[115]],[[120425,120425],"mapped",[116]],[[120426,120426],"mapped",[117]],[[120427,120427],"mapped",[118]],[[120428,120428],"mapped",[119]],[[120429,120429],"mapped",[120]],[[120430,120430],"mapped",[121]],[[120431,120431],"mapped",[122]],[[120432,120432],"mapped",[97]],[[120433,120433],"mapped",[98]],[[120434,120434],"mapped",[99]],[[120435,120435],"mapped",[100]],[[120436,120436],"mapped",[101]],[[120437,120437],"mapped",[102]],[[120438,120438],"mapped",[103]],[[120439,120439],"mapped",[104]],[[120440,120440],"mapped",[105]],[[120441,120441],"mapped",[106]],[[120442,120442],"mapped",[107]],[[120443,120443],"mapped",[108]],[[120444,120444],"mapped",[109]],[[120445,120445],"mapped",[110]],[[120446,120446],"mapped",[111]],[[120447,120447],"mapped",[112]],[[120448,120448],"mapped",[113]],[[120449,120449],"mapped",[114]],[[120450,120450],"mapped",[115]],[[120451,120451],"mapped",[116]],[[120452,120452],"mapped",[117]],[[120453,120453],"mapped",[118]],[[120454,120454],"mapped",[119]],[[120455,120455],"mapped",[120]],[[120456,120456],"mapped",[121]],[[120457,120457],"mapped",[122]],[[120458,120458],"mapped",[97]],[[120459,120459],"mapped",[98]],[[120460,120460],"mapped",[99]],[[120461,120461],"mapped",[100]],[[120462,120462],"mapped",[101]],[[120463,120463],"mapped",[102]],[[120464,120464],"mapped",[103]],[[120465,120465],"mapped",[104]],[[120466,120466],"mapped",[105]],[[120467,120467],"mapped",[106]],[[120468,120468],"mapped",[107]],[[120469,120469],"mapped",[108]],[[120470,120470],"mapped",[109]],[[120471,120471],"mapped",[110]],[[120472,120472],"mapped",[111]],[[120473,120473],"mapped",[112]],[[120474,120474],"mapped",[113]],[[120475,120475],"mapped",[114]],[[120476,120476],"mapped",[115]],[[120477,120477],"mapped",[116]],[[120478,120478],"mapped",[117]],[[120479,120479],"mapped",[118]],[[120480,120480],"mapped",[119]],[[120481,120481],"mapped",[120]],[[120482,120482],"mapped",[121]],[[120483,120483],"mapped",[122]],[[120484,120484],"mapped",[305]],[[120485,120485],"mapped",[567]],[[120486,120487],"disallowed"],[[120488,120488],"mapped",[945]],[[120489,120489],"mapped",[946]],[[120490,120490],"mapped",[947]],[[120491,120491],"mapped",[948]],[[120492,120492],"mapped",[949]],[[120493,120493],"mapped",[950]],[[120494,120494],"mapped",[951]],[[120495,120495],"mapped",[952]],[[120496,120496],"mapped",[953]],[[120497,120497],"mapped",[954]],[[120498,120498],"mapped",[955]],[[120499,120499],"mapped",[956]],[[120500,120500],"mapped",[957]],[[120501,120501],"mapped",[958]],[[120502,120502],"mapped",[959]],[[120503,120503],"mapped",[960]],[[120504,120504],"mapped",[961]],[[120505,120505],"mapped",[952]],[[120506,120506],"mapped",[963]],[[120507,120507],"mapped",[964]],[[120508,120508],"mapped",[965]],[[120509,120509],"mapped",[966]],[[120510,120510],"mapped",[967]],[[120511,120511],"mapped",[968]],[[120512,120512],"mapped",[969]],[[120513,120513],"mapped",[8711]],[[120514,120514],"mapped",[945]],[[120515,120515],"mapped",[946]],[[120516,120516],"mapped",[947]],[[120517,120517],"mapped",[948]],[[120518,120518],"mapped",[949]],[[120519,120519],"mapped",[950]],[[120520,120520],"mapped",[951]],[[120521,120521],"mapped",[952]],[[120522,120522],"mapped",[953]],[[120523,120523],"mapped",[954]],[[120524,120524],"mapped",[955]],[[120525,120525],"mapped",[956]],[[120526,120526],"mapped",[957]],[[120527,120527],"mapped",[958]],[[120528,120528],"mapped",[959]],[[120529,120529],"mapped",[960]],[[120530,120530],"mapped",[961]],[[120531,120532],"mapped",[963]],[[120533,120533],"mapped",[964]],[[120534,120534],"mapped",[965]],[[120535,120535],"mapped",[966]],[[120536,120536],"mapped",[967]],[[120537,120537],"mapped",[968]],[[120538,120538],"mapped",[969]],[[120539,120539],"mapped",[8706]],[[120540,120540],"mapped",[949]],[[120541,120541],"mapped",[952]],[[120542,120542],"mapped",[954]],[[120543,120543],"mapped",[966]],[[120544,120544],"mapped",[961]],[[120545,120545],"mapped",[960]],[[120546,120546],"mapped",[945]],[[120547,120547],"mapped",[946]],[[120548,120548],"mapped",[947]],[[120549,120549],"mapped",[948]],[[120550,120550],"mapped",[949]],[[120551,120551],"mapped",[950]],[[120552,120552],"mapped",[951]],[[120553,120553],"mapped",[952]],[[120554,120554],"mapped",[953]],[[120555,120555],"mapped",[954]],[[120556,120556],"mapped",[955]],[[120557,120557],"mapped",[956]],[[120558,120558],"mapped",[957]],[[120559,120559],"mapped",[958]],[[120560,120560],"mapped",[959]],[[120561,120561],"mapped",[960]],[[120562,120562],"mapped",[961]],[[120563,120563],"mapped",[952]],[[120564,120564],"mapped",[963]],[[120565,120565],"mapped",[964]],[[120566,120566],"mapped",[965]],[[120567,120567],"mapped",[966]],[[120568,120568],"mapped",[967]],[[120569,120569],"mapped",[968]],[[120570,120570],"mapped",[969]],[[120571,120571],"mapped",[8711]],[[120572,120572],"mapped",[945]],[[120573,120573],"mapped",[946]],[[120574,120574],"mapped",[947]],[[120575,120575],"mapped",[948]],[[120576,120576],"mapped",[949]],[[120577,120577],"mapped",[950]],[[120578,120578],"mapped",[951]],[[120579,120579],"mapped",[952]],[[120580,120580],"mapped",[953]],[[120581,120581],"mapped",[954]],[[120582,120582],"mapped",[955]],[[120583,120583],"mapped",[956]],[[120584,120584],"mapped",[957]],[[120585,120585],"mapped",[958]],[[120586,120586],"mapped",[959]],[[120587,120587],"mapped",[960]],[[120588,120588],"mapped",[961]],[[120589,120590],"mapped",[963]],[[120591,120591],"mapped",[964]],[[120592,120592],"mapped",[965]],[[120593,120593],"mapped",[966]],[[120594,120594],"mapped",[967]],[[120595,120595],"mapped",[968]],[[120596,120596],"mapped",[969]],[[120597,120597],"mapped",[8706]],[[120598,120598],"mapped",[949]],[[120599,120599],"mapped",[952]],[[120600,120600],"mapped",[954]],[[120601,120601],"mapped",[966]],[[120602,120602],"mapped",[961]],[[120603,120603],"mapped",[960]],[[120604,120604],"mapped",[945]],[[120605,120605],"mapped",[946]],[[120606,120606],"mapped",[947]],[[120607,120607],"mapped",[948]],[[120608,120608],"mapped",[949]],[[120609,120609],"mapped",[950]],[[120610,120610],"mapped",[951]],[[120611,120611],"mapped",[952]],[[120612,120612],"mapped",[953]],[[120613,120613],"mapped",[954]],[[120614,120614],"mapped",[955]],[[120615,120615],"mapped",[956]],[[120616,120616],"mapped",[957]],[[120617,120617],"mapped",[958]],[[120618,120618],"mapped",[959]],[[120619,120619],"mapped",[960]],[[120620,120620],"mapped",[961]],[[120621,120621],"mapped",[952]],[[120622,120622],"mapped",[963]],[[120623,120623],"mapped",[964]],[[120624,120624],"mapped",[965]],[[120625,120625],"mapped",[966]],[[120626,120626],"mapped",[967]],[[120627,120627],"mapped",[968]],[[120628,120628],"mapped",[969]],[[120629,120629],"mapped",[8711]],[[120630,120630],"mapped",[945]],[[120631,120631],"mapped",[946]],[[120632,120632],"mapped",[947]],[[120633,120633],"mapped",[948]],[[120634,120634],"mapped",[949]],[[120635,120635],"mapped",[950]],[[120636,120636],"mapped",[951]],[[120637,120637],"mapped",[952]],[[120638,120638],"mapped",[953]],[[120639,120639],"mapped",[954]],[[120640,120640],"mapped",[955]],[[120641,120641],"mapped",[956]],[[120642,120642],"mapped",[957]],[[120643,120643],"mapped",[958]],[[120644,120644],"mapped",[959]],[[120645,120645],"mapped",[960]],[[120646,120646],"mapped",[961]],[[120647,120648],"mapped",[963]],[[120649,120649],"mapped",[964]],[[120650,120650],"mapped",[965]],[[120651,120651],"mapped",[966]],[[120652,120652],"mapped",[967]],[[120653,120653],"mapped",[968]],[[120654,120654],"mapped",[969]],[[120655,120655],"mapped",[8706]],[[120656,120656],"mapped",[949]],[[120657,120657],"mapped",[952]],[[120658,120658],"mapped",[954]],[[120659,120659],"mapped",[966]],[[120660,120660],"mapped",[961]],[[120661,120661],"mapped",[960]],[[120662,120662],"mapped",[945]],[[120663,120663],"mapped",[946]],[[120664,120664],"mapped",[947]],[[120665,120665],"mapped",[948]],[[120666,120666],"mapped",[949]],[[120667,120667],"mapped",[950]],[[120668,120668],"mapped",[951]],[[120669,120669],"mapped",[952]],[[120670,120670],"mapped",[953]],[[120671,120671],"mapped",[954]],[[120672,120672],"mapped",[955]],[[120673,120673],"mapped",[956]],[[120674,120674],"mapped",[957]],[[120675,120675],"mapped",[958]],[[120676,120676],"mapped",[959]],[[120677,120677],"mapped",[960]],[[120678,120678],"mapped",[961]],[[120679,120679],"mapped",[952]],[[120680,120680],"mapped",[963]],[[120681,120681],"mapped",[964]],[[120682,120682],"mapped",[965]],[[120683,120683],"mapped",[966]],[[120684,120684],"mapped",[967]],[[120685,120685],"mapped",[968]],[[120686,120686],"mapped",[969]],[[120687,120687],"mapped",[8711]],[[120688,120688],"mapped",[945]],[[120689,120689],"mapped",[946]],[[120690,120690],"mapped",[947]],[[120691,120691],"mapped",[948]],[[120692,120692],"mapped",[949]],[[120693,120693],"mapped",[950]],[[120694,120694],"mapped",[951]],[[120695,120695],"mapped",[952]],[[120696,120696],"mapped",[953]],[[120697,120697],"mapped",[954]],[[120698,120698],"mapped",[955]],[[120699,120699],"mapped",[956]],[[120700,120700],"mapped",[957]],[[120701,120701],"mapped",[958]],[[120702,120702],"mapped",[959]],[[120703,120703],"mapped",[960]],[[120704,120704],"mapped",[961]],[[120705,120706],"mapped",[963]],[[120707,120707],"mapped",[964]],[[120708,120708],"mapped",[965]],[[120709,120709],"mapped",[966]],[[120710,120710],"mapped",[967]],[[120711,120711],"mapped",[968]],[[120712,120712],"mapped",[969]],[[120713,120713],"mapped",[8706]],[[120714,120714],"mapped",[949]],[[120715,120715],"mapped",[952]],[[120716,120716],"mapped",[954]],[[120717,120717],"mapped",[966]],[[120718,120718],"mapped",[961]],[[120719,120719],"mapped",[960]],[[120720,120720],"mapped",[945]],[[120721,120721],"mapped",[946]],[[120722,120722],"mapped",[947]],[[120723,120723],"mapped",[948]],[[120724,120724],"mapped",[949]],[[120725,120725],"mapped",[950]],[[120726,120726],"mapped",[951]],[[120727,120727],"mapped",[952]],[[120728,120728],"mapped",[953]],[[120729,120729],"mapped",[954]],[[120730,120730],"mapped",[955]],[[120731,120731],"mapped",[956]],[[120732,120732],"mapped",[957]],[[120733,120733],"mapped",[958]],[[120734,120734],"mapped",[959]],[[120735,120735],"mapped",[960]],[[120736,120736],"mapped",[961]],[[120737,120737],"mapped",[952]],[[120738,120738],"mapped",[963]],[[120739,120739],"mapped",[964]],[[120740,120740],"mapped",[965]],[[120741,120741],"mapped",[966]],[[120742,120742],"mapped",[967]],[[120743,120743],"mapped",[968]],[[120744,120744],"mapped",[969]],[[120745,120745],"mapped",[8711]],[[120746,120746],"mapped",[945]],[[120747,120747],"mapped",[946]],[[120748,120748],"mapped",[947]],[[120749,120749],"mapped",[948]],[[120750,120750],"mapped",[949]],[[120751,120751],"mapped",[950]],[[120752,120752],"mapped",[951]],[[120753,120753],"mapped",[952]],[[120754,120754],"mapped",[953]],[[120755,120755],"mapped",[954]],[[120756,120756],"mapped",[955]],[[120757,120757],"mapped",[956]],[[120758,120758],"mapped",[957]],[[120759,120759],"mapped",[958]],[[120760,120760],"mapped",[959]],[[120761,120761],"mapped",[960]],[[120762,120762],"mapped",[961]],[[120763,120764],"mapped",[963]],[[120765,120765],"mapped",[964]],[[120766,120766],"mapped",[965]],[[120767,120767],"mapped",[966]],[[120768,120768],"mapped",[967]],[[120769,120769],"mapped",[968]],[[120770,120770],"mapped",[969]],[[120771,120771],"mapped",[8706]],[[120772,120772],"mapped",[949]],[[120773,120773],"mapped",[952]],[[120774,120774],"mapped",[954]],[[120775,120775],"mapped",[966]],[[120776,120776],"mapped",[961]],[[120777,120777],"mapped",[960]],[[120778,120779],"mapped",[989]],[[120780,120781],"disallowed"],[[120782,120782],"mapped",[48]],[[120783,120783],"mapped",[49]],[[120784,120784],"mapped",[50]],[[120785,120785],"mapped",[51]],[[120786,120786],"mapped",[52]],[[120787,120787],"mapped",[53]],[[120788,120788],"mapped",[54]],[[120789,120789],"mapped",[55]],[[120790,120790],"mapped",[56]],[[120791,120791],"mapped",[57]],[[120792,120792],"mapped",[48]],[[120793,120793],"mapped",[49]],[[120794,120794],"mapped",[50]],[[120795,120795],"mapped",[51]],[[120796,120796],"mapped",[52]],[[120797,120797],"mapped",[53]],[[120798,120798],"mapped",[54]],[[120799,120799],"mapped",[55]],[[120800,120800],"mapped",[56]],[[120801,120801],"mapped",[57]],[[120802,120802],"mapped",[48]],[[120803,120803],"mapped",[49]],[[120804,120804],"mapped",[50]],[[120805,120805],"mapped",[51]],[[120806,120806],"mapped",[52]],[[120807,120807],"mapped",[53]],[[120808,120808],"mapped",[54]],[[120809,120809],"mapped",[55]],[[120810,120810],"mapped",[56]],[[120811,120811],"mapped",[57]],[[120812,120812],"mapped",[48]],[[120813,120813],"mapped",[49]],[[120814,120814],"mapped",[50]],[[120815,120815],"mapped",[51]],[[120816,120816],"mapped",[52]],[[120817,120817],"mapped",[53]],[[120818,120818],"mapped",[54]],[[120819,120819],"mapped",[55]],[[120820,120820],"mapped",[56]],[[120821,120821],"mapped",[57]],[[120822,120822],"mapped",[48]],[[120823,120823],"mapped",[49]],[[120824,120824],"mapped",[50]],[[120825,120825],"mapped",[51]],[[120826,120826],"mapped",[52]],[[120827,120827],"mapped",[53]],[[120828,120828],"mapped",[54]],[[120829,120829],"mapped",[55]],[[120830,120830],"mapped",[56]],[[120831,120831],"mapped",[57]],[[120832,121343],"valid",[],"NV8"],[[121344,121398],"valid"],[[121399,121402],"valid",[],"NV8"],[[121403,121452],"valid"],[[121453,121460],"valid",[],"NV8"],[[121461,121461],"valid"],[[121462,121475],"valid",[],"NV8"],[[121476,121476],"valid"],[[121477,121483],"valid",[],"NV8"],[[121484,121498],"disallowed"],[[121499,121503],"valid"],[[121504,121504],"disallowed"],[[121505,121519],"valid"],[[121520,124927],"disallowed"],[[124928,125124],"valid"],[[125125,125126],"disallowed"],[[125127,125135],"valid",[],"NV8"],[[125136,125142],"valid"],[[125143,126463],"disallowed"],[[126464,126464],"mapped",[1575]],[[126465,126465],"mapped",[1576]],[[126466,126466],"mapped",[1580]],[[126467,126467],"mapped",[1583]],[[126468,126468],"disallowed"],[[126469,126469],"mapped",[1608]],[[126470,126470],"mapped",[1586]],[[126471,126471],"mapped",[1581]],[[126472,126472],"mapped",[1591]],[[126473,126473],"mapped",[1610]],[[126474,126474],"mapped",[1603]],[[126475,126475],"mapped",[1604]],[[126476,126476],"mapped",[1605]],[[126477,126477],"mapped",[1606]],[[126478,126478],"mapped",[1587]],[[126479,126479],"mapped",[1593]],[[126480,126480],"mapped",[1601]],[[126481,126481],"mapped",[1589]],[[126482,126482],"mapped",[1602]],[[126483,126483],"mapped",[1585]],[[126484,126484],"mapped",[1588]],[[126485,126485],"mapped",[1578]],[[126486,126486],"mapped",[1579]],[[126487,126487],"mapped",[1582]],[[126488,126488],"mapped",[1584]],[[126489,126489],"mapped",[1590]],[[126490,126490],"mapped",[1592]],[[126491,126491],"mapped",[1594]],[[126492,126492],"mapped",[1646]],[[126493,126493],"mapped",[1722]],[[126494,126494],"mapped",[1697]],[[126495,126495],"mapped",[1647]],[[126496,126496],"disallowed"],[[126497,126497],"mapped",[1576]],[[126498,126498],"mapped",[1580]],[[126499,126499],"disallowed"],[[126500,126500],"mapped",[1607]],[[126501,126502],"disallowed"],[[126503,126503],"mapped",[1581]],[[126504,126504],"disallowed"],[[126505,126505],"mapped",[1610]],[[126506,126506],"mapped",[1603]],[[126507,126507],"mapped",[1604]],[[126508,126508],"mapped",[1605]],[[126509,126509],"mapped",[1606]],[[126510,126510],"mapped",[1587]],[[126511,126511],"mapped",[1593]],[[126512,126512],"mapped",[1601]],[[126513,126513],"mapped",[1589]],[[126514,126514],"mapped",[1602]],[[126515,126515],"disallowed"],[[126516,126516],"mapped",[1588]],[[126517,126517],"mapped",[1578]],[[126518,126518],"mapped",[1579]],[[126519,126519],"mapped",[1582]],[[126520,126520],"disallowed"],[[126521,126521],"mapped",[1590]],[[126522,126522],"disallowed"],[[126523,126523],"mapped",[1594]],[[126524,126529],"disallowed"],[[126530,126530],"mapped",[1580]],[[126531,126534],"disallowed"],[[126535,126535],"mapped",[1581]],[[126536,126536],"disallowed"],[[126537,126537],"mapped",[1610]],[[126538,126538],"disallowed"],[[126539,126539],"mapped",[1604]],[[126540,126540],"disallowed"],[[126541,126541],"mapped",[1606]],[[126542,126542],"mapped",[1587]],[[126543,126543],"mapped",[1593]],[[126544,126544],"disallowed"],[[126545,126545],"mapped",[1589]],[[126546,126546],"mapped",[1602]],[[126547,126547],"disallowed"],[[126548,126548],"mapped",[1588]],[[126549,126550],"disallowed"],[[126551,126551],"mapped",[1582]],[[126552,126552],"disallowed"],[[126553,126553],"mapped",[1590]],[[126554,126554],"disallowed"],[[126555,126555],"mapped",[1594]],[[126556,126556],"disallowed"],[[126557,126557],"mapped",[1722]],[[126558,126558],"disallowed"],[[126559,126559],"mapped",[1647]],[[126560,126560],"disallowed"],[[126561,126561],"mapped",[1576]],[[126562,126562],"mapped",[1580]],[[126563,126563],"disallowed"],[[126564,126564],"mapped",[1607]],[[126565,126566],"disallowed"],[[126567,126567],"mapped",[1581]],[[126568,126568],"mapped",[1591]],[[126569,126569],"mapped",[1610]],[[126570,126570],"mapped",[1603]],[[126571,126571],"disallowed"],[[126572,126572],"mapped",[1605]],[[126573,126573],"mapped",[1606]],[[126574,126574],"mapped",[1587]],[[126575,126575],"mapped",[1593]],[[126576,126576],"mapped",[1601]],[[126577,126577],"mapped",[1589]],[[126578,126578],"mapped",[1602]],[[126579,126579],"disallowed"],[[126580,126580],"mapped",[1588]],[[126581,126581],"mapped",[1578]],[[126582,126582],"mapped",[1579]],[[126583,126583],"mapped",[1582]],[[126584,126584],"disallowed"],[[126585,126585],"mapped",[1590]],[[126586,126586],"mapped",[1592]],[[126587,126587],"mapped",[1594]],[[126588,126588],"mapped",[1646]],[[126589,126589],"disallowed"],[[126590,126590],"mapped",[1697]],[[126591,126591],"disallowed"],[[126592,126592],"mapped",[1575]],[[126593,126593],"mapped",[1576]],[[126594,126594],"mapped",[1580]],[[126595,126595],"mapped",[1583]],[[126596,126596],"mapped",[1607]],[[126597,126597],"mapped",[1608]],[[126598,126598],"mapped",[1586]],[[126599,126599],"mapped",[1581]],[[126600,126600],"mapped",[1591]],[[126601,126601],"mapped",[1610]],[[126602,126602],"disallowed"],[[126603,126603],"mapped",[1604]],[[126604,126604],"mapped",[1605]],[[126605,126605],"mapped",[1606]],[[126606,126606],"mapped",[1587]],[[126607,126607],"mapped",[1593]],[[126608,126608],"mapped",[1601]],[[126609,126609],"mapped",[1589]],[[126610,126610],"mapped",[1602]],[[126611,126611],"mapped",[1585]],[[126612,126612],"mapped",[1588]],[[126613,126613],"mapped",[1578]],[[126614,126614],"mapped",[1579]],[[126615,126615],"mapped",[1582]],[[126616,126616],"mapped",[1584]],[[126617,126617],"mapped",[1590]],[[126618,126618],"mapped",[1592]],[[126619,126619],"mapped",[1594]],[[126620,126624],"disallowed"],[[126625,126625],"mapped",[1576]],[[126626,126626],"mapped",[1580]],[[126627,126627],"mapped",[1583]],[[126628,126628],"disallowed"],[[126629,126629],"mapped",[1608]],[[126630,126630],"mapped",[1586]],[[126631,126631],"mapped",[1581]],[[126632,126632],"mapped",[1591]],[[126633,126633],"mapped",[1610]],[[126634,126634],"disallowed"],[[126635,126635],"mapped",[1604]],[[126636,126636],"mapped",[1605]],[[126637,126637],"mapped",[1606]],[[126638,126638],"mapped",[1587]],[[126639,126639],"mapped",[1593]],[[126640,126640],"mapped",[1601]],[[126641,126641],"mapped",[1589]],[[126642,126642],"mapped",[1602]],[[126643,126643],"mapped",[1585]],[[126644,126644],"mapped",[1588]],[[126645,126645],"mapped",[1578]],[[126646,126646],"mapped",[1579]],[[126647,126647],"mapped",[1582]],[[126648,126648],"mapped",[1584]],[[126649,126649],"mapped",[1590]],[[126650,126650],"mapped",[1592]],[[126651,126651],"mapped",[1594]],[[126652,126703],"disallowed"],[[126704,126705],"valid",[],"NV8"],[[126706,126975],"disallowed"],[[126976,127019],"valid",[],"NV8"],[[127020,127023],"disallowed"],[[127024,127123],"valid",[],"NV8"],[[127124,127135],"disallowed"],[[127136,127150],"valid",[],"NV8"],[[127151,127152],"disallowed"],[[127153,127166],"valid",[],"NV8"],[[127167,127167],"valid",[],"NV8"],[[127168,127168],"disallowed"],[[127169,127183],"valid",[],"NV8"],[[127184,127184],"disallowed"],[[127185,127199],"valid",[],"NV8"],[[127200,127221],"valid",[],"NV8"],[[127222,127231],"disallowed"],[[127232,127232],"disallowed"],[[127233,127233],"disallowed_STD3_mapped",[48,44]],[[127234,127234],"disallowed_STD3_mapped",[49,44]],[[127235,127235],"disallowed_STD3_mapped",[50,44]],[[127236,127236],"disallowed_STD3_mapped",[51,44]],[[127237,127237],"disallowed_STD3_mapped",[52,44]],[[127238,127238],"disallowed_STD3_mapped",[53,44]],[[127239,127239],"disallowed_STD3_mapped",[54,44]],[[127240,127240],"disallowed_STD3_mapped",[55,44]],[[127241,127241],"disallowed_STD3_mapped",[56,44]],[[127242,127242],"disallowed_STD3_mapped",[57,44]],[[127243,127244],"valid",[],"NV8"],[[127245,127247],"disallowed"],[[127248,127248],"disallowed_STD3_mapped",[40,97,41]],[[127249,127249],"disallowed_STD3_mapped",[40,98,41]],[[127250,127250],"disallowed_STD3_mapped",[40,99,41]],[[127251,127251],"disallowed_STD3_mapped",[40,100,41]],[[127252,127252],"disallowed_STD3_mapped",[40,101,41]],[[127253,127253],"disallowed_STD3_mapped",[40,102,41]],[[127254,127254],"disallowed_STD3_mapped",[40,103,41]],[[127255,127255],"disallowed_STD3_mapped",[40,104,41]],[[127256,127256],"disallowed_STD3_mapped",[40,105,41]],[[127257,127257],"disallowed_STD3_mapped",[40,106,41]],[[127258,127258],"disallowed_STD3_mapped",[40,107,41]],[[127259,127259],"disallowed_STD3_mapped",[40,108,41]],[[127260,127260],"disallowed_STD3_mapped",[40,109,41]],[[127261,127261],"disallowed_STD3_mapped",[40,110,41]],[[127262,127262],"disallowed_STD3_mapped",[40,111,41]],[[127263,127263],"disallowed_STD3_mapped",[40,112,41]],[[127264,127264],"disallowed_STD3_mapped",[40,113,41]],[[127265,127265],"disallowed_STD3_mapped",[40,114,41]],[[127266,127266],"disallowed_STD3_mapped",[40,115,41]],[[127267,127267],"disallowed_STD3_mapped",[40,116,41]],[[127268,127268],"disallowed_STD3_mapped",[40,117,41]],[[127269,127269],"disallowed_STD3_mapped",[40,118,41]],[[127270,127270],"disallowed_STD3_mapped",[40,119,41]],[[127271,127271],"disallowed_STD3_mapped",[40,120,41]],[[127272,127272],"disallowed_STD3_mapped",[40,121,41]],[[127273,127273],"disallowed_STD3_mapped",[40,122,41]],[[127274,127274],"mapped",[12308,115,12309]],[[127275,127275],"mapped",[99]],[[127276,127276],"mapped",[114]],[[127277,127277],"mapped",[99,100]],[[127278,127278],"mapped",[119,122]],[[127279,127279],"disallowed"],[[127280,127280],"mapped",[97]],[[127281,127281],"mapped",[98]],[[127282,127282],"mapped",[99]],[[127283,127283],"mapped",[100]],[[127284,127284],"mapped",[101]],[[127285,127285],"mapped",[102]],[[127286,127286],"mapped",[103]],[[127287,127287],"mapped",[104]],[[127288,127288],"mapped",[105]],[[127289,127289],"mapped",[106]],[[127290,127290],"mapped",[107]],[[127291,127291],"mapped",[108]],[[127292,127292],"mapped",[109]],[[127293,127293],"mapped",[110]],[[127294,127294],"mapped",[111]],[[127295,127295],"mapped",[112]],[[127296,127296],"mapped",[113]],[[127297,127297],"mapped",[114]],[[127298,127298],"mapped",[115]],[[127299,127299],"mapped",[116]],[[127300,127300],"mapped",[117]],[[127301,127301],"mapped",[118]],[[127302,127302],"mapped",[119]],[[127303,127303],"mapped",[120]],[[127304,127304],"mapped",[121]],[[127305,127305],"mapped",[122]],[[127306,127306],"mapped",[104,118]],[[127307,127307],"mapped",[109,118]],[[127308,127308],"mapped",[115,100]],[[127309,127309],"mapped",[115,115]],[[127310,127310],"mapped",[112,112,118]],[[127311,127311],"mapped",[119,99]],[[127312,127318],"valid",[],"NV8"],[[127319,127319],"valid",[],"NV8"],[[127320,127326],"valid",[],"NV8"],[[127327,127327],"valid",[],"NV8"],[[127328,127337],"valid",[],"NV8"],[[127338,127338],"mapped",[109,99]],[[127339,127339],"mapped",[109,100]],[[127340,127343],"disallowed"],[[127344,127352],"valid",[],"NV8"],[[127353,127353],"valid",[],"NV8"],[[127354,127354],"valid",[],"NV8"],[[127355,127356],"valid",[],"NV8"],[[127357,127358],"valid",[],"NV8"],[[127359,127359],"valid",[],"NV8"],[[127360,127369],"valid",[],"NV8"],[[127370,127373],"valid",[],"NV8"],[[127374,127375],"valid",[],"NV8"],[[127376,127376],"mapped",[100,106]],[[127377,127386],"valid",[],"NV8"],[[127387,127461],"disallowed"],[[127462,127487],"valid",[],"NV8"],[[127488,127488],"mapped",[12411,12363]],[[127489,127489],"mapped",[12467,12467]],[[127490,127490],"mapped",[12469]],[[127491,127503],"disallowed"],[[127504,127504],"mapped",[25163]],[[127505,127505],"mapped",[23383]],[[127506,127506],"mapped",[21452]],[[127507,127507],"mapped",[12487]],[[127508,127508],"mapped",[20108]],[[127509,127509],"mapped",[22810]],[[127510,127510],"mapped",[35299]],[[127511,127511],"mapped",[22825]],[[127512,127512],"mapped",[20132]],[[127513,127513],"mapped",[26144]],[[127514,127514],"mapped",[28961]],[[127515,127515],"mapped",[26009]],[[127516,127516],"mapped",[21069]],[[127517,127517],"mapped",[24460]],[[127518,127518],"mapped",[20877]],[[127519,127519],"mapped",[26032]],[[127520,127520],"mapped",[21021]],[[127521,127521],"mapped",[32066]],[[127522,127522],"mapped",[29983]],[[127523,127523],"mapped",[36009]],[[127524,127524],"mapped",[22768]],[[127525,127525],"mapped",[21561]],[[127526,127526],"mapped",[28436]],[[127527,127527],"mapped",[25237]],[[127528,127528],"mapped",[25429]],[[127529,127529],"mapped",[19968]],[[127530,127530],"mapped",[19977]],[[127531,127531],"mapped",[36938]],[[127532,127532],"mapped",[24038]],[[127533,127533],"mapped",[20013]],[[127534,127534],"mapped",[21491]],[[127535,127535],"mapped",[25351]],[[127536,127536],"mapped",[36208]],[[127537,127537],"mapped",[25171]],[[127538,127538],"mapped",[31105]],[[127539,127539],"mapped",[31354]],[[127540,127540],"mapped",[21512]],[[127541,127541],"mapped",[28288]],[[127542,127542],"mapped",[26377]],[[127543,127543],"mapped",[26376]],[[127544,127544],"mapped",[30003]],[[127545,127545],"mapped",[21106]],[[127546,127546],"mapped",[21942]],[[127547,127551],"disallowed"],[[127552,127552],"mapped",[12308,26412,12309]],[[127553,127553],"mapped",[12308,19977,12309]],[[127554,127554],"mapped",[12308,20108,12309]],[[127555,127555],"mapped",[12308,23433,12309]],[[127556,127556],"mapped",[12308,28857,12309]],[[127557,127557],"mapped",[12308,25171,12309]],[[127558,127558],"mapped",[12308,30423,12309]],[[127559,127559],"mapped",[12308,21213,12309]],[[127560,127560],"mapped",[12308,25943,12309]],[[127561,127567],"disallowed"],[[127568,127568],"mapped",[24471]],[[127569,127569],"mapped",[21487]],[[127570,127743],"disallowed"],[[127744,127776],"valid",[],"NV8"],[[127777,127788],"valid",[],"NV8"],[[127789,127791],"valid",[],"NV8"],[[127792,127797],"valid",[],"NV8"],[[127798,127798],"valid",[],"NV8"],[[127799,127868],"valid",[],"NV8"],[[127869,127869],"valid",[],"NV8"],[[127870,127871],"valid",[],"NV8"],[[127872,127891],"valid",[],"NV8"],[[127892,127903],"valid",[],"NV8"],[[127904,127940],"valid",[],"NV8"],[[127941,127941],"valid",[],"NV8"],[[127942,127946],"valid",[],"NV8"],[[127947,127950],"valid",[],"NV8"],[[127951,127955],"valid",[],"NV8"],[[127956,127967],"valid",[],"NV8"],[[127968,127984],"valid",[],"NV8"],[[127985,127991],"valid",[],"NV8"],[[127992,127999],"valid",[],"NV8"],[[128e3,128062],"valid",[],"NV8"],[[128063,128063],"valid",[],"NV8"],[[128064,128064],"valid",[],"NV8"],[[128065,128065],"valid",[],"NV8"],[[128066,128247],"valid",[],"NV8"],[[128248,128248],"valid",[],"NV8"],[[128249,128252],"valid",[],"NV8"],[[128253,128254],"valid",[],"NV8"],[[128255,128255],"valid",[],"NV8"],[[128256,128317],"valid",[],"NV8"],[[128318,128319],"valid",[],"NV8"],[[128320,128323],"valid",[],"NV8"],[[128324,128330],"valid",[],"NV8"],[[128331,128335],"valid",[],"NV8"],[[128336,128359],"valid",[],"NV8"],[[128360,128377],"valid",[],"NV8"],[[128378,128378],"disallowed"],[[128379,128419],"valid",[],"NV8"],[[128420,128420],"disallowed"],[[128421,128506],"valid",[],"NV8"],[[128507,128511],"valid",[],"NV8"],[[128512,128512],"valid",[],"NV8"],[[128513,128528],"valid",[],"NV8"],[[128529,128529],"valid",[],"NV8"],[[128530,128532],"valid",[],"NV8"],[[128533,128533],"valid",[],"NV8"],[[128534,128534],"valid",[],"NV8"],[[128535,128535],"valid",[],"NV8"],[[128536,128536],"valid",[],"NV8"],[[128537,128537],"valid",[],"NV8"],[[128538,128538],"valid",[],"NV8"],[[128539,128539],"valid",[],"NV8"],[[128540,128542],"valid",[],"NV8"],[[128543,128543],"valid",[],"NV8"],[[128544,128549],"valid",[],"NV8"],[[128550,128551],"valid",[],"NV8"],[[128552,128555],"valid",[],"NV8"],[[128556,128556],"valid",[],"NV8"],[[128557,128557],"valid",[],"NV8"],[[128558,128559],"valid",[],"NV8"],[[128560,128563],"valid",[],"NV8"],[[128564,128564],"valid",[],"NV8"],[[128565,128576],"valid",[],"NV8"],[[128577,128578],"valid",[],"NV8"],[[128579,128580],"valid",[],"NV8"],[[128581,128591],"valid",[],"NV8"],[[128592,128639],"valid",[],"NV8"],[[128640,128709],"valid",[],"NV8"],[[128710,128719],"valid",[],"NV8"],[[128720,128720],"valid",[],"NV8"],[[128721,128735],"disallowed"],[[128736,128748],"valid",[],"NV8"],[[128749,128751],"disallowed"],[[128752,128755],"valid",[],"NV8"],[[128756,128767],"disallowed"],[[128768,128883],"valid",[],"NV8"],[[128884,128895],"disallowed"],[[128896,128980],"valid",[],"NV8"],[[128981,129023],"disallowed"],[[129024,129035],"valid",[],"NV8"],[[129036,129039],"disallowed"],[[129040,129095],"valid",[],"NV8"],[[129096,129103],"disallowed"],[[129104,129113],"valid",[],"NV8"],[[129114,129119],"disallowed"],[[129120,129159],"valid",[],"NV8"],[[129160,129167],"disallowed"],[[129168,129197],"valid",[],"NV8"],[[129198,129295],"disallowed"],[[129296,129304],"valid",[],"NV8"],[[129305,129407],"disallowed"],[[129408,129412],"valid",[],"NV8"],[[129413,129471],"disallowed"],[[129472,129472],"valid",[],"NV8"],[[129473,131069],"disallowed"],[[131070,131071],"disallowed"],[[131072,173782],"valid"],[[173783,173823],"disallowed"],[[173824,177972],"valid"],[[177973,177983],"disallowed"],[[177984,178205],"valid"],[[178206,178207],"disallowed"],[[178208,183969],"valid"],[[183970,194559],"disallowed"],[[194560,194560],"mapped",[20029]],[[194561,194561],"mapped",[20024]],[[194562,194562],"mapped",[20033]],[[194563,194563],"mapped",[131362]],[[194564,194564],"mapped",[20320]],[[194565,194565],"mapped",[20398]],[[194566,194566],"mapped",[20411]],[[194567,194567],"mapped",[20482]],[[194568,194568],"mapped",[20602]],[[194569,194569],"mapped",[20633]],[[194570,194570],"mapped",[20711]],[[194571,194571],"mapped",[20687]],[[194572,194572],"mapped",[13470]],[[194573,194573],"mapped",[132666]],[[194574,194574],"mapped",[20813]],[[194575,194575],"mapped",[20820]],[[194576,194576],"mapped",[20836]],[[194577,194577],"mapped",[20855]],[[194578,194578],"mapped",[132380]],[[194579,194579],"mapped",[13497]],[[194580,194580],"mapped",[20839]],[[194581,194581],"mapped",[20877]],[[194582,194582],"mapped",[132427]],[[194583,194583],"mapped",[20887]],[[194584,194584],"mapped",[20900]],[[194585,194585],"mapped",[20172]],[[194586,194586],"mapped",[20908]],[[194587,194587],"mapped",[20917]],[[194588,194588],"mapped",[168415]],[[194589,194589],"mapped",[20981]],[[194590,194590],"mapped",[20995]],[[194591,194591],"mapped",[13535]],[[194592,194592],"mapped",[21051]],[[194593,194593],"mapped",[21062]],[[194594,194594],"mapped",[21106]],[[194595,194595],"mapped",[21111]],[[194596,194596],"mapped",[13589]],[[194597,194597],"mapped",[21191]],[[194598,194598],"mapped",[21193]],[[194599,194599],"mapped",[21220]],[[194600,194600],"mapped",[21242]],[[194601,194601],"mapped",[21253]],[[194602,194602],"mapped",[21254]],[[194603,194603],"mapped",[21271]],[[194604,194604],"mapped",[21321]],[[194605,194605],"mapped",[21329]],[[194606,194606],"mapped",[21338]],[[194607,194607],"mapped",[21363]],[[194608,194608],"mapped",[21373]],[[194609,194611],"mapped",[21375]],[[194612,194612],"mapped",[133676]],[[194613,194613],"mapped",[28784]],[[194614,194614],"mapped",[21450]],[[194615,194615],"mapped",[21471]],[[194616,194616],"mapped",[133987]],[[194617,194617],"mapped",[21483]],[[194618,194618],"mapped",[21489]],[[194619,194619],"mapped",[21510]],[[194620,194620],"mapped",[21662]],[[194621,194621],"mapped",[21560]],[[194622,194622],"mapped",[21576]],[[194623,194623],"mapped",[21608]],[[194624,194624],"mapped",[21666]],[[194625,194625],"mapped",[21750]],[[194626,194626],"mapped",[21776]],[[194627,194627],"mapped",[21843]],[[194628,194628],"mapped",[21859]],[[194629,194630],"mapped",[21892]],[[194631,194631],"mapped",[21913]],[[194632,194632],"mapped",[21931]],[[194633,194633],"mapped",[21939]],[[194634,194634],"mapped",[21954]],[[194635,194635],"mapped",[22294]],[[194636,194636],"mapped",[22022]],[[194637,194637],"mapped",[22295]],[[194638,194638],"mapped",[22097]],[[194639,194639],"mapped",[22132]],[[194640,194640],"mapped",[20999]],[[194641,194641],"mapped",[22766]],[[194642,194642],"mapped",[22478]],[[194643,194643],"mapped",[22516]],[[194644,194644],"mapped",[22541]],[[194645,194645],"mapped",[22411]],[[194646,194646],"mapped",[22578]],[[194647,194647],"mapped",[22577]],[[194648,194648],"mapped",[22700]],[[194649,194649],"mapped",[136420]],[[194650,194650],"mapped",[22770]],[[194651,194651],"mapped",[22775]],[[194652,194652],"mapped",[22790]],[[194653,194653],"mapped",[22810]],[[194654,194654],"mapped",[22818]],[[194655,194655],"mapped",[22882]],[[194656,194656],"mapped",[136872]],[[194657,194657],"mapped",[136938]],[[194658,194658],"mapped",[23020]],[[194659,194659],"mapped",[23067]],[[194660,194660],"mapped",[23079]],[[194661,194661],"mapped",[23e3]],[[194662,194662],"mapped",[23142]],[[194663,194663],"mapped",[14062]],[[194664,194664],"disallowed"],[[194665,194665],"mapped",[23304]],[[194666,194667],"mapped",[23358]],[[194668,194668],"mapped",[137672]],[[194669,194669],"mapped",[23491]],[[194670,194670],"mapped",[23512]],[[194671,194671],"mapped",[23527]],[[194672,194672],"mapped",[23539]],[[194673,194673],"mapped",[138008]],[[194674,194674],"mapped",[23551]],[[194675,194675],"mapped",[23558]],[[194676,194676],"disallowed"],[[194677,194677],"mapped",[23586]],[[194678,194678],"mapped",[14209]],[[194679,194679],"mapped",[23648]],[[194680,194680],"mapped",[23662]],[[194681,194681],"mapped",[23744]],[[194682,194682],"mapped",[23693]],[[194683,194683],"mapped",[138724]],[[194684,194684],"mapped",[23875]],[[194685,194685],"mapped",[138726]],[[194686,194686],"mapped",[23918]],[[194687,194687],"mapped",[23915]],[[194688,194688],"mapped",[23932]],[[194689,194689],"mapped",[24033]],[[194690,194690],"mapped",[24034]],[[194691,194691],"mapped",[14383]],[[194692,194692],"mapped",[24061]],[[194693,194693],"mapped",[24104]],[[194694,194694],"mapped",[24125]],[[194695,194695],"mapped",[24169]],[[194696,194696],"mapped",[14434]],[[194697,194697],"mapped",[139651]],[[194698,194698],"mapped",[14460]],[[194699,194699],"mapped",[24240]],[[194700,194700],"mapped",[24243]],[[194701,194701],"mapped",[24246]],[[194702,194702],"mapped",[24266]],[[194703,194703],"mapped",[172946]],[[194704,194704],"mapped",[24318]],[[194705,194706],"mapped",[140081]],[[194707,194707],"mapped",[33281]],[[194708,194709],"mapped",[24354]],[[194710,194710],"mapped",[14535]],[[194711,194711],"mapped",[144056]],[[194712,194712],"mapped",[156122]],[[194713,194713],"mapped",[24418]],[[194714,194714],"mapped",[24427]],[[194715,194715],"mapped",[14563]],[[194716,194716],"mapped",[24474]],[[194717,194717],"mapped",[24525]],[[194718,194718],"mapped",[24535]],[[194719,194719],"mapped",[24569]],[[194720,194720],"mapped",[24705]],[[194721,194721],"mapped",[14650]],[[194722,194722],"mapped",[14620]],[[194723,194723],"mapped",[24724]],[[194724,194724],"mapped",[141012]],[[194725,194725],"mapped",[24775]],[[194726,194726],"mapped",[24904]],[[194727,194727],"mapped",[24908]],[[194728,194728],"mapped",[24910]],[[194729,194729],"mapped",[24908]],[[194730,194730],"mapped",[24954]],[[194731,194731],"mapped",[24974]],[[194732,194732],"mapped",[25010]],[[194733,194733],"mapped",[24996]],[[194734,194734],"mapped",[25007]],[[194735,194735],"mapped",[25054]],[[194736,194736],"mapped",[25074]],[[194737,194737],"mapped",[25078]],[[194738,194738],"mapped",[25104]],[[194739,194739],"mapped",[25115]],[[194740,194740],"mapped",[25181]],[[194741,194741],"mapped",[25265]],[[194742,194742],"mapped",[25300]],[[194743,194743],"mapped",[25424]],[[194744,194744],"mapped",[142092]],[[194745,194745],"mapped",[25405]],[[194746,194746],"mapped",[25340]],[[194747,194747],"mapped",[25448]],[[194748,194748],"mapped",[25475]],[[194749,194749],"mapped",[25572]],[[194750,194750],"mapped",[142321]],[[194751,194751],"mapped",[25634]],[[194752,194752],"mapped",[25541]],[[194753,194753],"mapped",[25513]],[[194754,194754],"mapped",[14894]],[[194755,194755],"mapped",[25705]],[[194756,194756],"mapped",[25726]],[[194757,194757],"mapped",[25757]],[[194758,194758],"mapped",[25719]],[[194759,194759],"mapped",[14956]],[[194760,194760],"mapped",[25935]],[[194761,194761],"mapped",[25964]],[[194762,194762],"mapped",[143370]],[[194763,194763],"mapped",[26083]],[[194764,194764],"mapped",[26360]],[[194765,194765],"mapped",[26185]],[[194766,194766],"mapped",[15129]],[[194767,194767],"mapped",[26257]],[[194768,194768],"mapped",[15112]],[[194769,194769],"mapped",[15076]],[[194770,194770],"mapped",[20882]],[[194771,194771],"mapped",[20885]],[[194772,194772],"mapped",[26368]],[[194773,194773],"mapped",[26268]],[[194774,194774],"mapped",[32941]],[[194775,194775],"mapped",[17369]],[[194776,194776],"mapped",[26391]],[[194777,194777],"mapped",[26395]],[[194778,194778],"mapped",[26401]],[[194779,194779],"mapped",[26462]],[[194780,194780],"mapped",[26451]],[[194781,194781],"mapped",[144323]],[[194782,194782],"mapped",[15177]],[[194783,194783],"mapped",[26618]],[[194784,194784],"mapped",[26501]],[[194785,194785],"mapped",[26706]],[[194786,194786],"mapped",[26757]],[[194787,194787],"mapped",[144493]],[[194788,194788],"mapped",[26766]],[[194789,194789],"mapped",[26655]],[[194790,194790],"mapped",[26900]],[[194791,194791],"mapped",[15261]],[[194792,194792],"mapped",[26946]],[[194793,194793],"mapped",[27043]],[[194794,194794],"mapped",[27114]],[[194795,194795],"mapped",[27304]],[[194796,194796],"mapped",[145059]],[[194797,194797],"mapped",[27355]],[[194798,194798],"mapped",[15384]],[[194799,194799],"mapped",[27425]],[[194800,194800],"mapped",[145575]],[[194801,194801],"mapped",[27476]],[[194802,194802],"mapped",[15438]],[[194803,194803],"mapped",[27506]],[[194804,194804],"mapped",[27551]],[[194805,194805],"mapped",[27578]],[[194806,194806],"mapped",[27579]],[[194807,194807],"mapped",[146061]],[[194808,194808],"mapped",[138507]],[[194809,194809],"mapped",[146170]],[[194810,194810],"mapped",[27726]],[[194811,194811],"mapped",[146620]],[[194812,194812],"mapped",[27839]],[[194813,194813],"mapped",[27853]],[[194814,194814],"mapped",[27751]],[[194815,194815],"mapped",[27926]],[[194816,194816],"mapped",[27966]],[[194817,194817],"mapped",[28023]],[[194818,194818],"mapped",[27969]],[[194819,194819],"mapped",[28009]],[[194820,194820],"mapped",[28024]],[[194821,194821],"mapped",[28037]],[[194822,194822],"mapped",[146718]],[[194823,194823],"mapped",[27956]],[[194824,194824],"mapped",[28207]],[[194825,194825],"mapped",[28270]],[[194826,194826],"mapped",[15667]],[[194827,194827],"mapped",[28363]],[[194828,194828],"mapped",[28359]],[[194829,194829],"mapped",[147153]],[[194830,194830],"mapped",[28153]],[[194831,194831],"mapped",[28526]],[[194832,194832],"mapped",[147294]],[[194833,194833],"mapped",[147342]],[[194834,194834],"mapped",[28614]],[[194835,194835],"mapped",[28729]],[[194836,194836],"mapped",[28702]],[[194837,194837],"mapped",[28699]],[[194838,194838],"mapped",[15766]],[[194839,194839],"mapped",[28746]],[[194840,194840],"mapped",[28797]],[[194841,194841],"mapped",[28791]],[[194842,194842],"mapped",[28845]],[[194843,194843],"mapped",[132389]],[[194844,194844],"mapped",[28997]],[[194845,194845],"mapped",[148067]],[[194846,194846],"mapped",[29084]],[[194847,194847],"disallowed"],[[194848,194848],"mapped",[29224]],[[194849,194849],"mapped",[29237]],[[194850,194850],"mapped",[29264]],[[194851,194851],"mapped",[149e3]],[[194852,194852],"mapped",[29312]],[[194853,194853],"mapped",[29333]],[[194854,194854],"mapped",[149301]],[[194855,194855],"mapped",[149524]],[[194856,194856],"mapped",[29562]],[[194857,194857],"mapped",[29579]],[[194858,194858],"mapped",[16044]],[[194859,194859],"mapped",[29605]],[[194860,194861],"mapped",[16056]],[[194862,194862],"mapped",[29767]],[[194863,194863],"mapped",[29788]],[[194864,194864],"mapped",[29809]],[[194865,194865],"mapped",[29829]],[[194866,194866],"mapped",[29898]],[[194867,194867],"mapped",[16155]],[[194868,194868],"mapped",[29988]],[[194869,194869],"mapped",[150582]],[[194870,194870],"mapped",[30014]],[[194871,194871],"mapped",[150674]],[[194872,194872],"mapped",[30064]],[[194873,194873],"mapped",[139679]],[[194874,194874],"mapped",[30224]],[[194875,194875],"mapped",[151457]],[[194876,194876],"mapped",[151480]],[[194877,194877],"mapped",[151620]],[[194878,194878],"mapped",[16380]],[[194879,194879],"mapped",[16392]],[[194880,194880],"mapped",[30452]],[[194881,194881],"mapped",[151795]],[[194882,194882],"mapped",[151794]],[[194883,194883],"mapped",[151833]],[[194884,194884],"mapped",[151859]],[[194885,194885],"mapped",[30494]],[[194886,194887],"mapped",[30495]],[[194888,194888],"mapped",[30538]],[[194889,194889],"mapped",[16441]],[[194890,194890],"mapped",[30603]],[[194891,194891],"mapped",[16454]],[[194892,194892],"mapped",[16534]],[[194893,194893],"mapped",[152605]],[[194894,194894],"mapped",[30798]],[[194895,194895],"mapped",[30860]],[[194896,194896],"mapped",[30924]],[[194897,194897],"mapped",[16611]],[[194898,194898],"mapped",[153126]],[[194899,194899],"mapped",[31062]],[[194900,194900],"mapped",[153242]],[[194901,194901],"mapped",[153285]],[[194902,194902],"mapped",[31119]],[[194903,194903],"mapped",[31211]],[[194904,194904],"mapped",[16687]],[[194905,194905],"mapped",[31296]],[[194906,194906],"mapped",[31306]],[[194907,194907],"mapped",[31311]],[[194908,194908],"mapped",[153980]],[[194909,194910],"mapped",[154279]],[[194911,194911],"disallowed"],[[194912,194912],"mapped",[16898]],[[194913,194913],"mapped",[154539]],[[194914,194914],"mapped",[31686]],[[194915,194915],"mapped",[31689]],[[194916,194916],"mapped",[16935]],[[194917,194917],"mapped",[154752]],[[194918,194918],"mapped",[31954]],[[194919,194919],"mapped",[17056]],[[194920,194920],"mapped",[31976]],[[194921,194921],"mapped",[31971]],[[194922,194922],"mapped",[32e3]],[[194923,194923],"mapped",[155526]],[[194924,194924],"mapped",[32099]],[[194925,194925],"mapped",[17153]],[[194926,194926],"mapped",[32199]],[[194927,194927],"mapped",[32258]],[[194928,194928],"mapped",[32325]],[[194929,194929],"mapped",[17204]],[[194930,194930],"mapped",[156200]],[[194931,194931],"mapped",[156231]],[[194932,194932],"mapped",[17241]],[[194933,194933],"mapped",[156377]],[[194934,194934],"mapped",[32634]],[[194935,194935],"mapped",[156478]],[[194936,194936],"mapped",[32661]],[[194937,194937],"mapped",[32762]],[[194938,194938],"mapped",[32773]],[[194939,194939],"mapped",[156890]],[[194940,194940],"mapped",[156963]],[[194941,194941],"mapped",[32864]],[[194942,194942],"mapped",[157096]],[[194943,194943],"mapped",[32880]],[[194944,194944],"mapped",[144223]],[[194945,194945],"mapped",[17365]],[[194946,194946],"mapped",[32946]],[[194947,194947],"mapped",[33027]],[[194948,194948],"mapped",[17419]],[[194949,194949],"mapped",[33086]],[[194950,194950],"mapped",[23221]],[[194951,194951],"mapped",[157607]],[[194952,194952],"mapped",[157621]],[[194953,194953],"mapped",[144275]],[[194954,194954],"mapped",[144284]],[[194955,194955],"mapped",[33281]],[[194956,194956],"mapped",[33284]],[[194957,194957],"mapped",[36766]],[[194958,194958],"mapped",[17515]],[[194959,194959],"mapped",[33425]],[[194960,194960],"mapped",[33419]],[[194961,194961],"mapped",[33437]],[[194962,194962],"mapped",[21171]],[[194963,194963],"mapped",[33457]],[[194964,194964],"mapped",[33459]],[[194965,194965],"mapped",[33469]],[[194966,194966],"mapped",[33510]],[[194967,194967],"mapped",[158524]],[[194968,194968],"mapped",[33509]],[[194969,194969],"mapped",[33565]],[[194970,194970],"mapped",[33635]],[[194971,194971],"mapped",[33709]],[[194972,194972],"mapped",[33571]],[[194973,194973],"mapped",[33725]],[[194974,194974],"mapped",[33767]],[[194975,194975],"mapped",[33879]],[[194976,194976],"mapped",[33619]],[[194977,194977],"mapped",[33738]],[[194978,194978],"mapped",[33740]],[[194979,194979],"mapped",[33756]],[[194980,194980],"mapped",[158774]],[[194981,194981],"mapped",[159083]],[[194982,194982],"mapped",[158933]],[[194983,194983],"mapped",[17707]],[[194984,194984],"mapped",[34033]],[[194985,194985],"mapped",[34035]],[[194986,194986],"mapped",[34070]],[[194987,194987],"mapped",[160714]],[[194988,194988],"mapped",[34148]],[[194989,194989],"mapped",[159532]],[[194990,194990],"mapped",[17757]],[[194991,194991],"mapped",[17761]],[[194992,194992],"mapped",[159665]],[[194993,194993],"mapped",[159954]],[[194994,194994],"mapped",[17771]],[[194995,194995],"mapped",[34384]],[[194996,194996],"mapped",[34396]],[[194997,194997],"mapped",[34407]],[[194998,194998],"mapped",[34409]],[[194999,194999],"mapped",[34473]],[[195e3,195e3],"mapped",[34440]],[[195001,195001],"mapped",[34574]],[[195002,195002],"mapped",[34530]],[[195003,195003],"mapped",[34681]],[[195004,195004],"mapped",[34600]],[[195005,195005],"mapped",[34667]],[[195006,195006],"mapped",[34694]],[[195007,195007],"disallowed"],[[195008,195008],"mapped",[34785]],[[195009,195009],"mapped",[34817]],[[195010,195010],"mapped",[17913]],[[195011,195011],"mapped",[34912]],[[195012,195012],"mapped",[34915]],[[195013,195013],"mapped",[161383]],[[195014,195014],"mapped",[35031]],[[195015,195015],"mapped",[35038]],[[195016,195016],"mapped",[17973]],[[195017,195017],"mapped",[35066]],[[195018,195018],"mapped",[13499]],[[195019,195019],"mapped",[161966]],[[195020,195020],"mapped",[162150]],[[195021,195021],"mapped",[18110]],[[195022,195022],"mapped",[18119]],[[195023,195023],"mapped",[35488]],[[195024,195024],"mapped",[35565]],[[195025,195025],"mapped",[35722]],[[195026,195026],"mapped",[35925]],[[195027,195027],"mapped",[162984]],[[195028,195028],"mapped",[36011]],[[195029,195029],"mapped",[36033]],[[195030,195030],"mapped",[36123]],[[195031,195031],"mapped",[36215]],[[195032,195032],"mapped",[163631]],[[195033,195033],"mapped",[133124]],[[195034,195034],"mapped",[36299]],[[195035,195035],"mapped",[36284]],[[195036,195036],"mapped",[36336]],[[195037,195037],"mapped",[133342]],[[195038,195038],"mapped",[36564]],[[195039,195039],"mapped",[36664]],[[195040,195040],"mapped",[165330]],[[195041,195041],"mapped",[165357]],[[195042,195042],"mapped",[37012]],[[195043,195043],"mapped",[37105]],[[195044,195044],"mapped",[37137]],[[195045,195045],"mapped",[165678]],[[195046,195046],"mapped",[37147]],[[195047,195047],"mapped",[37432]],[[195048,195048],"mapped",[37591]],[[195049,195049],"mapped",[37592]],[[195050,195050],"mapped",[37500]],[[195051,195051],"mapped",[37881]],[[195052,195052],"mapped",[37909]],[[195053,195053],"mapped",[166906]],[[195054,195054],"mapped",[38283]],[[195055,195055],"mapped",[18837]],[[195056,195056],"mapped",[38327]],[[195057,195057],"mapped",[167287]],[[195058,195058],"mapped",[18918]],[[195059,195059],"mapped",[38595]],[[195060,195060],"mapped",[23986]],[[195061,195061],"mapped",[38691]],[[195062,195062],"mapped",[168261]],[[195063,195063],"mapped",[168474]],[[195064,195064],"mapped",[19054]],[[195065,195065],"mapped",[19062]],[[195066,195066],"mapped",[38880]],[[195067,195067],"mapped",[168970]],[[195068,195068],"mapped",[19122]],[[195069,195069],"mapped",[169110]],[[195070,195071],"mapped",[38923]],[[195072,195072],"mapped",[38953]],[[195073,195073],"mapped",[169398]],[[195074,195074],"mapped",[39138]],[[195075,195075],"mapped",[19251]],[[195076,195076],"mapped",[39209]],[[195077,195077],"mapped",[39335]],[[195078,195078],"mapped",[39362]],[[195079,195079],"mapped",[39422]],[[195080,195080],"mapped",[19406]],[[195081,195081],"mapped",[170800]],[[195082,195082],"mapped",[39698]],[[195083,195083],"mapped",[4e4]],[[195084,195084],"mapped",[40189]],[[195085,195085],"mapped",[19662]],[[195086,195086],"mapped",[19693]],[[195087,195087],"mapped",[40295]],[[195088,195088],"mapped",[172238]],[[195089,195089],"mapped",[19704]],[[195090,195090],"mapped",[172293]],[[195091,195091],"mapped",[172558]],[[195092,195092],"mapped",[172689]],[[195093,195093],"mapped",[40635]],[[195094,195094],"mapped",[19798]],[[195095,195095],"mapped",[40697]],[[195096,195096],"mapped",[40702]],[[195097,195097],"mapped",[40709]],[[195098,195098],"mapped",[40719]],[[195099,195099],"mapped",[40726]],[[195100,195100],"mapped",[40763]],[[195101,195101],"mapped",[173568]],[[195102,196605],"disallowed"],[[196606,196607],"disallowed"],[[196608,262141],"disallowed"],[[262142,262143],"disallowed"],[[262144,327677],"disallowed"],[[327678,327679],"disallowed"],[[327680,393213],"disallowed"],[[393214,393215],"disallowed"],[[393216,458749],"disallowed"],[[458750,458751],"disallowed"],[[458752,524285],"disallowed"],[[524286,524287],"disallowed"],[[524288,589821],"disallowed"],[[589822,589823],"disallowed"],[[589824,655357],"disallowed"],[[655358,655359],"disallowed"],[[655360,720893],"disallowed"],[[720894,720895],"disallowed"],[[720896,786429],"disallowed"],[[786430,786431],"disallowed"],[[786432,851965],"disallowed"],[[851966,851967],"disallowed"],[[851968,917501],"disallowed"],[[917502,917503],"disallowed"],[[917504,917504],"disallowed"],[[917505,917505],"disallowed"],[[917506,917535],"disallowed"],[[917536,917631],"disallowed"],[[917632,917759],"disallowed"],[[917760,917999],"ignored"],[[918e3,983037],"disallowed"],[[983038,983039],"disallowed"],[[983040,1048573],"disallowed"],[[1048574,1048575],"disallowed"],[[1048576,1114109],"disallowed"],[[1114110,1114111],"disallowed"]]});var J7=v((sW,Zo)=>{"use strict";var W7=require("punycode"),K7=q7(),ea={TRANSITIONAL:0,NONTRANSITIONAL:1};function j7(i){return i.split("\0").map(function(e){return e.normalize("NFC")}).join("\0")}c(j7,"normalize");function X7(i){for(var e=0,u=K7.length-1;e<=u;){var r=Math.floor((e+u)/2),a=K7[r];if(a[0][0]<=i&&a[0][1]>=i)return a;a[0][0]>i?u=r-1:e=r+1}return null}c(X7,"findStatus");var AN=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;function Q7(i){return i.replace(AN,"_").length}c(Q7,"countSymbols");function YN(i,e,u){for(var r=!1,a="",s=Q7(i),n=0;n253||n.length===0)&&(a.error=!0);for(var l=0;l63||s.length===0){a.error=!0;break}}return a.error?null:s.join(".")};Zo.exports.toUnicode=function(i,e){var u=zo(i,e,ea.NONTRANSITIONAL);return{domain:u.string,error:u.error}};Zo.exports.PROCESSING_OPTIONS=ea});var nt=v((oW,mu)=>{"use strict";var ua=require("punycode"),$7=J7(),uE={ftp:21,file:null,gopher:70,http:80,https:443,ws:80,wss:443},I0=Symbol("failure");function z7(i){return ua.ucs2.decode(i).length}c(z7,"countSymbols");function Z7(i,e){let u=i[e];return isNaN(u)?void 0:String.fromCodePoint(u)}c(Z7,"at");function rn(i){return i>=48&&i<=57}c(rn,"isASCIIDigit");function an(i){return i>=65&&i<=90||i>=97&&i<=122}c(an,"isASCIIAlpha");function yN(i){return an(i)||rn(i)}c(yN,"isASCIIAlphanumeric");function Gu(i){return rn(i)||i>=65&&i<=70||i>=97&&i<=102}c(Gu,"isASCIIHex");function eE(i){return i==="."||i.toLowerCase()==="%2e"}c(eE,"isSingleDot");function NN(i){return i=i.toLowerCase(),i===".."||i==="%2e."||i===".%2e"||i==="%2e%2e"}c(NN,"isDoubleDot");function CN(i,e){return an(i)&&(e===58||e===124)}c(CN,"isWindowsDriveLetterCodePoints");function tE(i){return i.length===2&&an(i.codePointAt(0))&&(i[1]===":"||i[1]==="|")}c(tE,"isWindowsDriveLetterString");function IN(i){return i.length===2&&an(i.codePointAt(0))&&i[1]===":"}c(IN,"isNormalizedWindowsDriveLetterString");function bN(i){return i.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|%|\/|:|\?|@|\[|\\|\]/)!==-1}c(bN,"containsForbiddenHostCodePoint");function xN(i){return i.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|\/|:|\?|@|\[|\\|\]/)!==-1}c(xN,"containsForbiddenHostCodePointExcludingPercent");function Hp(i){return uE[i]!==void 0}c(Hp,"isSpecialScheme");function Ye(i){return Hp(i.scheme)}c(Ye,"isSpecial");function vN(i){return uE[i]}c(vN,"defaultPort");function rE(i){let e=i.toString(16).toUpperCase();return e.length===1&&(e="0"+e),"%"+e}c(rE,"percentEncode");function DN(i){let e=new Buffer(i),u="";for(let r=0;r126}c(el,"isC0ControlPercentEncode");var UN=new Set([32,34,35,60,62,63,96,123,125]);function iE(i){return el(i)||UN.has(i)}c(iE,"isPathPercentEncode");var PN=new Set([47,58,59,61,64,91,92,93,94,124]);function Gp(i){return iE(i)||PN.has(i)}c(Gp,"isUserinfoPercentEncode");function Jr(i,e){let u=String.fromCodePoint(i);return e(i)?DN(u):u}c(Jr,"percentEncodeChar");function kN(i){let e=10;return i.length>=2&&i.charAt(0)==="0"&&i.charAt(1).toLowerCase()==="x"?(i=i.substring(2),e=16):i.length>=2&&i.charAt(0)==="0"&&(i=i.substring(1),e=8),i===""?0:(e===10?/[^0-9]/:e===16?/[^0-9A-Fa-f]/:/[^0-7]/).test(i)?I0:parseInt(i,e)}c(kN,"parseIPv4Number");function FN(i){let e=i.split(".");if(e[e.length-1]===""&&e.length>1&&e.pop(),e.length>4)return i;let u=[];for(let s of e){if(s==="")return i;let n=kN(s);if(n===I0)return i;u.push(n)}for(let s=0;s255)return I0;if(u[u.length-1]>=Math.pow(256,5-u.length))return I0;let r=u.pop(),a=0;for(let s of u)r+=s*Math.pow(256,3-a),++a;return r}c(FN,"parseIPv4");function HN(i){let e="",u=i;for(let r=1;r<=4;++r)e=String(u%256)+e,r!==4&&(e="."+e),u=Math.floor(u/256);return e}c(HN,"serializeIPv4");function VN(i){let e=[0,0,0,0,0,0,0,0],u=0,r=null,a=0;if(i=ua.ucs2.decode(i),i[a]===58){if(i[a+1]!==58)return I0;a+=2,++u,r=u}for(;a6))return I0;let l=0;for(;i[a]!==void 0;){let d=null;if(l>0)if(i[a]===46&&l<4)++a;else return I0;if(!rn(i[a]))return I0;for(;rn(i[a]);){let p=parseInt(Z7(i,a));if(d===null)d=p;else{if(d===0)return I0;d=d*10+p}if(d>255)return I0;++a}e[u]=e[u]*256+d,++l,(l===2||l===4)&&++u}if(l!==4)return I0;break}else if(i[a]===58){if(++a,i[a]===void 0)return I0}else if(i[a]!==void 0)return I0;e[u]=s,++u}if(r!==null){let s=u-r;for(u=7;u!==0&&s>0;){let n=e[r+s-1];e[r+s-1]=e[u],e[u]=n,--u,--s}}else if(r===null&&u!==8)return I0;return e}c(VN,"parseIPv6");function GN(i){let e="",r=KN(i).idx,a=!1;for(let s=0;s<=7;++s)if(!(a&&i[s]===0)){if(a&&(a=!1),r===s){e+=s===0?"::":":",a=!0;continue}e+=i[s].toString(16),s!==7&&(e+=":")}return e}c(GN,"serializeIPv6");function Vp(i,e){if(i[0]==="[")return i[i.length-1]!=="]"?I0:VN(i.substring(1,i.length-1));if(!e)return qN(i);let u=wN(i),r=$7.toASCII(u,!1,$7.PROCESSING_OPTIONS.NONTRANSITIONAL,!1);if(r===null||bN(r))return I0;let a=FN(r);return typeof a=="number"||a===I0?a:r}c(Vp,"parseHost");function qN(i){if(xN(i))return I0;let e="",u=ua.ucs2.decode(i);for(let r=0;ru&&(e=r,u=a),r=null,a=0):(r===null&&(r=s),++a);return a>u&&(e=r,u=a),{idx:e,len:u}}c(KN,"findLongestZeroSequence");function qp(i){return typeof i=="number"?HN(i):i instanceof Array?"["+GN(i)+"]":i}c(qp,"serializeHost");function WN(i){return i.replace(/^[\u0000-\u001F\u0020]+|[\u0000-\u001F\u0020]+$/g,"")}c(WN,"trimControlChars");function jN(i){return i.replace(/\u0009|\u000A|\u000D/g,"")}c(jN,"trimTabAndNewline");function aE(i){let e=i.path;e.length!==0&&(i.scheme==="file"&&e.length===1&&QN(e[0])||e.pop())}c(aE,"shortenPath");function sE(i){return i.username!==""||i.password!==""}c(sE,"includesCredentials");function XN(i){return i.host===null||i.host===""||i.cannotBeABaseURL||i.scheme==="file"}c(XN,"cannotHaveAUsernamePasswordPort");function QN(i){return/^[A-Za-z]:$/.test(i)}c(QN,"isNormalizedWindowsDriveLetter");function Se(i,e,u,r,a){if(this.pointer=0,this.input=i,this.base=e||null,this.encodingOverride=u||"utf-8",this.stateOverride=a,this.url=r,this.failure=!1,this.parseError=!1,!this.url){this.url={scheme:"",username:"",password:"",host:null,port:null,path:[],query:null,fragment:null,cannotBeABaseURL:!1};let n=WN(this.input);n!==this.input&&(this.parseError=!0),this.input=n}let s=jN(this.input);for(s!==this.input&&(this.parseError=!0),this.input=s,this.state=a||"scheme start",this.buffer="",this.atFlag=!1,this.arrFlag=!1,this.passwordTokenSeenFlag=!1,this.input=ua.ucs2.decode(this.input);this.pointer<=this.input.length;++this.pointer){let n=this.input[this.pointer],l=isNaN(n)?void 0:String.fromCodePoint(n),d=this["parse "+this.state](n,l);if(d){if(d===I0){this.failure=!0;break}}else break}}c(Se,"URLStateMachine");Se.prototype["parse scheme start"]=c(function(e,u){if(an(e))this.buffer+=u.toLowerCase(),this.state="scheme";else if(!this.stateOverride)this.state="no scheme",--this.pointer;else return this.parseError=!0,I0;return!0},"parseSchemeStart");Se.prototype["parse scheme"]=c(function(e,u){if(yN(e)||e===43||e===45||e===46)this.buffer+=u.toLowerCase();else if(e===58){if(this.stateOverride&&(Ye(this.url)&&!Hp(this.buffer)||!Ye(this.url)&&Hp(this.buffer)||(sE(this.url)||this.url.port!==null)&&this.buffer==="file"||this.url.scheme==="file"&&(this.url.host===""||this.url.host===null))||(this.url.scheme=this.buffer,this.buffer="",this.stateOverride))return!1;this.url.scheme==="file"?((this.input[this.pointer+1]!==47||this.input[this.pointer+2]!==47)&&(this.parseError=!0),this.state="file"):Ye(this.url)&&this.base!==null&&this.base.scheme===this.url.scheme?this.state="special relative or authority":Ye(this.url)?this.state="special authority slashes":this.input[this.pointer+1]===47?(this.state="path or authority",++this.pointer):(this.url.cannotBeABaseURL=!0,this.url.path.push(""),this.state="cannot-be-a-base-URL path")}else if(!this.stateOverride)this.buffer="",this.state="no scheme",this.pointer=-1;else return this.parseError=!0,I0;return!0},"parseScheme");Se.prototype["parse no scheme"]=c(function(e){return this.base===null||this.base.cannotBeABaseURL&&e!==35?I0:(this.base.cannotBeABaseURL&&e===35?(this.url.scheme=this.base.scheme,this.url.path=this.base.path.slice(),this.url.query=this.base.query,this.url.fragment="",this.url.cannotBeABaseURL=!0,this.state="fragment"):this.base.scheme==="file"?(this.state="file",--this.pointer):(this.state="relative",--this.pointer),!0)},"parseNoScheme");Se.prototype["parse special relative or authority"]=c(function(e){return e===47&&this.input[this.pointer+1]===47?(this.state="special authority ignore slashes",++this.pointer):(this.parseError=!0,this.state="relative",--this.pointer),!0},"parseSpecialRelativeOrAuthority");Se.prototype["parse path or authority"]=c(function(e){return e===47?this.state="authority":(this.state="path",--this.pointer),!0},"parsePathOrAuthority");Se.prototype["parse relative"]=c(function(e){return this.url.scheme=this.base.scheme,isNaN(e)?(this.url.username=this.base.username,this.url.password=this.base.password,this.url.host=this.base.host,this.url.port=this.base.port,this.url.path=this.base.path.slice(),this.url.query=this.base.query):e===47?this.state="relative slash":e===63?(this.url.username=this.base.username,this.url.password=this.base.password,this.url.host=this.base.host,this.url.port=this.base.port,this.url.path=this.base.path.slice(),this.url.query="",this.state="query"):e===35?(this.url.username=this.base.username,this.url.password=this.base.password,this.url.host=this.base.host,this.url.port=this.base.port,this.url.path=this.base.path.slice(),this.url.query=this.base.query,this.url.fragment="",this.state="fragment"):Ye(this.url)&&e===92?(this.parseError=!0,this.state="relative slash"):(this.url.username=this.base.username,this.url.password=this.base.password,this.url.host=this.base.host,this.url.port=this.base.port,this.url.path=this.base.path.slice(0,this.base.path.length-1),this.state="path",--this.pointer),!0},"parseRelative");Se.prototype["parse relative slash"]=c(function(e){return Ye(this.url)&&(e===47||e===92)?(e===92&&(this.parseError=!0),this.state="special authority ignore slashes"):e===47?this.state="authority":(this.url.username=this.base.username,this.url.password=this.base.password,this.url.host=this.base.host,this.url.port=this.base.port,this.state="path",--this.pointer),!0},"parseRelativeSlash");Se.prototype["parse special authority slashes"]=c(function(e){return e===47&&this.input[this.pointer+1]===47?(this.state="special authority ignore slashes",++this.pointer):(this.parseError=!0,this.state="special authority ignore slashes",--this.pointer),!0},"parseSpecialAuthoritySlashes");Se.prototype["parse special authority ignore slashes"]=c(function(e){return e!==47&&e!==92?(this.state="authority",--this.pointer):this.parseError=!0,!0},"parseSpecialAuthorityIgnoreSlashes");Se.prototype["parse authority"]=c(function(e,u){if(e===64){this.parseError=!0,this.atFlag&&(this.buffer="%40"+this.buffer),this.atFlag=!0;let r=z7(this.buffer);for(let a=0;aMath.pow(2,16)-1)return this.parseError=!0,I0;this.url.port=r===vN(this.url.scheme)?null:r,this.buffer=""}if(this.stateOverride)return!1;this.state="path start",--this.pointer}else return this.parseError=!0,I0;return!0},"parsePort");var JN=new Set([47,92,63,35]);Se.prototype["parse file"]=c(function(e){return this.url.scheme="file",e===47||e===92?(e===92&&(this.parseError=!0),this.state="file slash"):this.base!==null&&this.base.scheme==="file"?isNaN(e)?(this.url.host=this.base.host,this.url.path=this.base.path.slice(),this.url.query=this.base.query):e===63?(this.url.host=this.base.host,this.url.path=this.base.path.slice(),this.url.query="",this.state="query"):e===35?(this.url.host=this.base.host,this.url.path=this.base.path.slice(),this.url.query=this.base.query,this.url.fragment="",this.state="fragment"):(this.input.length-this.pointer-1===0||!CN(e,this.input[this.pointer+1])||this.input.length-this.pointer-1>=2&&!JN.has(this.input[this.pointer+2])?(this.url.host=this.base.host,this.url.path=this.base.path.slice(),aE(this.url)):this.parseError=!0,this.state="path",--this.pointer):(this.state="path",--this.pointer),!0},"parseFile");Se.prototype["parse file slash"]=c(function(e){return e===47||e===92?(e===92&&(this.parseError=!0),this.state="file host"):(this.base!==null&&this.base.scheme==="file"&&(IN(this.base.path[0])?this.url.path.push(this.base.path[0]):this.url.host=this.base.host),this.state="path",--this.pointer),!0},"parseFileSlash");Se.prototype["parse file host"]=c(function(e,u){if(isNaN(e)||e===47||e===92||e===63||e===35)if(--this.pointer,!this.stateOverride&&tE(this.buffer))this.parseError=!0,this.state="path";else if(this.buffer===""){if(this.url.host="",this.stateOverride)return!1;this.state="path start"}else{let r=Vp(this.buffer,Ye(this.url));if(r===I0)return I0;if(r==="localhost"&&(r=""),this.url.host=r,this.stateOverride)return!1;this.buffer="",this.state="path start"}else this.buffer+=u;return!0},"parseFileHost");Se.prototype["parse path start"]=c(function(e){return Ye(this.url)?(e===92&&(this.parseError=!0),this.state="path",e!==47&&e!==92&&--this.pointer):!this.stateOverride&&e===63?(this.url.query="",this.state="query"):!this.stateOverride&&e===35?(this.url.fragment="",this.state="fragment"):e!==void 0&&(this.state="path",e!==47&&--this.pointer),!0},"parsePathStart");Se.prototype["parse path"]=c(function(e){if(isNaN(e)||e===47||Ye(this.url)&&e===92||!this.stateOverride&&(e===63||e===35)){if(Ye(this.url)&&e===92&&(this.parseError=!0),NN(this.buffer)?(aE(this.url),e!==47&&!(Ye(this.url)&&e===92)&&this.url.path.push("")):eE(this.buffer)&&e!==47&&!(Ye(this.url)&&e===92)?this.url.path.push(""):eE(this.buffer)||(this.url.scheme==="file"&&this.url.path.length===0&&tE(this.buffer)&&(this.url.host!==""&&this.url.host!==null&&(this.parseError=!0,this.url.host=""),this.buffer=this.buffer[0]+":"),this.url.path.push(this.buffer)),this.buffer="",this.url.scheme==="file"&&(e===void 0||e===63||e===35))for(;this.url.path.length>1&&this.url.path[0]==="";)this.parseError=!0,this.url.path.shift();e===63&&(this.url.query="",this.state="query"),e===35&&(this.url.fragment="",this.state="fragment")}else e===37&&(!Gu(this.input[this.pointer+1])||!Gu(this.input[this.pointer+2]))&&(this.parseError=!0),this.buffer+=Jr(e,iE);return!0},"parsePath");Se.prototype["parse cannot-be-a-base-URL path"]=c(function(e){return e===63?(this.url.query="",this.state="query"):e===35?(this.url.fragment="",this.state="fragment"):(!isNaN(e)&&e!==37&&(this.parseError=!0),e===37&&(!Gu(this.input[this.pointer+1])||!Gu(this.input[this.pointer+2]))&&(this.parseError=!0),isNaN(e)||(this.url.path[0]=this.url.path[0]+Jr(e,el))),!0},"parseCannotBeABaseURLPath");Se.prototype["parse query"]=c(function(e,u){if(isNaN(e)||!this.stateOverride&&e===35){(!Ye(this.url)||this.url.scheme==="ws"||this.url.scheme==="wss")&&(this.encodingOverride="utf-8");let r=new Buffer(this.buffer);for(let a=0;a126||r[a]===34||r[a]===35||r[a]===60||r[a]===62?this.url.query+=rE(r[a]):this.url.query+=String.fromCodePoint(r[a]);this.buffer="",e===35&&(this.url.fragment="",this.state="fragment")}else e===37&&(!Gu(this.input[this.pointer+1])||!Gu(this.input[this.pointer+2]))&&(this.parseError=!0),this.buffer+=u;return!0},"parseQuery");Se.prototype["parse fragment"]=c(function(e){return isNaN(e)||(e===0?this.parseError=!0:(e===37&&(!Gu(this.input[this.pointer+1])||!Gu(this.input[this.pointer+2]))&&(this.parseError=!0),this.url.fragment+=Jr(e,el))),!0},"parseFragment");function $N(i,e){let u=i.scheme+":";if(i.host!==null?(u+="//",(i.username!==""||i.password!=="")&&(u+=i.username,i.password!==""&&(u+=":"+i.password),u+="@"),u+=qp(i.host),i.port!==null&&(u+=":"+i.port)):i.host===null&&i.scheme==="file"&&(u+="//"),i.cannotBeABaseURL)u+=i.path[0];else for(let r of i.path)u+="/"+r;return i.query!==null&&(u+="?"+i.query),!e&&i.fragment!==null&&(u+="#"+i.fragment),u}c($N,"serializeURL");function zN(i){let e=i.scheme+"://";return e+=qp(i.host),i.port!==null&&(e+=":"+i.port),e}c(zN,"serializeOrigin");mu.exports.serializeURL=$N;mu.exports.serializeURLOrigin=function(i){switch(i.scheme){case"blob":try{return mu.exports.serializeURLOrigin(mu.exports.parseURL(i.path[0]))}catch{return"null"}case"ftp":case"gopher":case"http":case"https":case"ws":case"wss":return zN({scheme:i.scheme,host:i.host,port:i.port});case"file":return"file://";default:return"null"}};mu.exports.basicURLParse=function(i,e){e===void 0&&(e={});let u=new Se(i,e.baseURL,e.encodingOverride,e.url,e.stateOverride);return u.failure?"failure":u.url};mu.exports.setTheUsername=function(i,e){i.username="";let u=ua.ucs2.decode(e);for(let r=0;r{"use strict";var Oe=nt(),sn;nE.implementation=(sn=class{constructor(e){let u=e[0],r=e[1],a=null;if(r!==void 0&&(a=Oe.basicURLParse(r),a==="failure"))throw new TypeError("Invalid base URL");let s=Oe.basicURLParse(u,{baseURL:a});if(s==="failure")throw new TypeError("Invalid URL");this._url=s}get href(){return Oe.serializeURL(this._url)}set href(e){let u=Oe.basicURLParse(e);if(u==="failure")throw new TypeError("Invalid URL");this._url=u}get origin(){return Oe.serializeURLOrigin(this._url)}get protocol(){return this._url.scheme+":"}set protocol(e){Oe.basicURLParse(e+":",{url:this._url,stateOverride:"scheme start"})}get username(){return this._url.username}set username(e){Oe.cannotHaveAUsernamePasswordPort(this._url)||Oe.setTheUsername(this._url,e)}get password(){return this._url.password}set password(e){Oe.cannotHaveAUsernamePasswordPort(this._url)||Oe.setThePassword(this._url,e)}get host(){let e=this._url;return e.host===null?"":e.port===null?Oe.serializeHost(e.host):Oe.serializeHost(e.host)+":"+Oe.serializeInteger(e.port)}set host(e){this._url.cannotBeABaseURL||Oe.basicURLParse(e,{url:this._url,stateOverride:"host"})}get hostname(){return this._url.host===null?"":Oe.serializeHost(this._url.host)}set hostname(e){this._url.cannotBeABaseURL||Oe.basicURLParse(e,{url:this._url,stateOverride:"hostname"})}get port(){return this._url.port===null?"":Oe.serializeInteger(this._url.port)}set port(e){Oe.cannotHaveAUsernamePasswordPort(this._url)||(e===""?this._url.port=null:Oe.basicURLParse(e,{url:this._url,stateOverride:"port"}))}get pathname(){return this._url.cannotBeABaseURL?this._url.path[0]:this._url.path.length===0?"":"/"+this._url.path.join("/")}set pathname(e){this._url.cannotBeABaseURL||(this._url.path=[],Oe.basicURLParse(e,{url:this._url,stateOverride:"path start"}))}get search(){return this._url.query===null||this._url.query===""?"":"?"+this._url.query}set search(e){let u=this._url;if(e===""){u.query=null;return}let r=e[0]==="?"?e.substring(1):e;u.query="",Oe.basicURLParse(r,{url:u,stateOverride:"query"})}get hash(){return this._url.fragment===null||this._url.fragment===""?"":"#"+this._url.fragment}set hash(e){if(e===""){this._url.fragment=null;return}let u=e[0]==="#"?e.substring(1):e;this._url.fragment="",Oe.basicURLParse(u,{url:this._url,stateOverride:"fragment"})}toJSON(){return this.href}},c(sn,"URLImpl"),sn)});var dE=v((pW,nn)=>{"use strict";var gu=V7(),cE=G7(),lE=oE(),ue=cE.implSymbol;function ge(i){if(!this||this[ue]||!(this instanceof ge))throw new TypeError("Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function.");if(arguments.length<1)throw new TypeError("Failed to construct 'URL': 1 argument required, but only "+arguments.length+" present.");let e=[];for(let u=0;u{"use strict";ot.URL=dE().interface;ot.serializeURL=nt().serializeURL;ot.serializeURLOrigin=nt().serializeURLOrigin;ot.basicURLParse=nt().basicURLParse;ot.setTheUsername=nt().setTheUsername;ot.setThePassword=nt().setThePassword;ot.serializeHost=nt().serializeHost;ot.serializeInteger=nt().serializeInteger;ot.parseURL=nt().parseURL});var e3=v((Ku,_E)=>{"use strict";Object.defineProperty(Ku,"__esModule",{value:!0});function aa(i){return i&&typeof i=="object"&&"default"in i?i.default:i}c(aa,"_interopDefault");var qu=aa(require("stream")),OE=aa(require("http")),al=aa(require("url")),LE=aa(pE()),ZN=aa(require("https")),$r=aa(require("zlib")),eC=qu.Readable,xt=Symbol("buffer"),Kp=Symbol("type"),ln=class ln{constructor(){this[Kp]="";let e=arguments[0],u=arguments[1],r=[],a=0;if(e){let n=e,l=Number(n.length);for(let d=0;d1&&arguments[1]!==void 0?arguments[1]:{},r=u.size;let a=r===void 0?0:r;var s=u.timeout;let n=s===void 0?0:s;i==null?i=null:EE(i)?i=Buffer.from(i.toString()):pn(i)||Buffer.isBuffer(i)||(Object.prototype.toString.call(i)==="[object ArrayBuffer]"?i=Buffer.from(i):ArrayBuffer.isView(i)?i=Buffer.from(i.buffer,i.byteOffset,i.byteLength):i instanceof qu||(i=Buffer.from(String(i)))),this[Dt]={body:i,disturbed:!1,error:null},this.size=a,this.timeout=n,i instanceof qu&&i.on("error",function(l){let d=l.name==="AbortError"?l:new De(`Invalid response body while trying to fetch ${e.url}: ${l.message}`,"system",l);e[Dt].error=d})}c(ye,"Body");ye.prototype={get body(){return this[Dt].body},get bodyUsed(){return this[Dt].disturbed},arrayBuffer(){return ta.call(this).then(function(i){return i.buffer.slice(i.byteOffset,i.byteOffset+i.byteLength)})},blob(){let i=this.headers&&this.headers.get("content-type")||"";return ta.call(this).then(function(e){return Object.assign(new cn([],{type:i.toLowerCase()}),{[xt]:e})})},json(){var i=this;return ta.call(this).then(function(e){try{return JSON.parse(e.toString())}catch(u){return ye.Promise.reject(new De(`invalid json response body at ${i.url} reason: ${u.message}`,"invalid-json"))}})},text(){return ta.call(this).then(function(i){return i.toString()})},buffer(){return ta.call(this)},textConverted(){var i=this;return ta.call(this).then(function(e){return uC(e,i.headers)})}};Object.defineProperties(ye.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});ye.mixIn=function(i){for(let e of Object.getOwnPropertyNames(ye.prototype))if(!(e in i)){let u=Object.getOwnPropertyDescriptor(ye.prototype,e);Object.defineProperty(i,e,u)}};function ta(){var i=this;if(this[Dt].disturbed)return ye.Promise.reject(new TypeError(`body used already for: ${this.url}`));if(this[Dt].disturbed=!0,this[Dt].error)return ye.Promise.reject(this[Dt].error);let e=this.body;if(e===null)return ye.Promise.resolve(Buffer.alloc(0));if(pn(e)&&(e=e.stream()),Buffer.isBuffer(e))return ye.Promise.resolve(e);if(!(e instanceof qu))return ye.Promise.resolve(Buffer.alloc(0));let u=[],r=0,a=!1;return new ye.Promise(function(s,n){let l;i.timeout&&(l=setTimeout(function(){a=!0,n(new De(`Response timeout while trying to fetch ${i.url} (over ${i.timeout}ms)`,"body-timeout"))},i.timeout)),e.on("error",function(d){d.name==="AbortError"?(a=!0,n(d)):n(new De(`Invalid response body while trying to fetch ${i.url}: ${d.message}`,"system",d))}),e.on("data",function(d){if(!(a||d===null)){if(i.size&&r+d.length>i.size){a=!0,n(new De(`content size at ${i.url} over limit: ${i.size}`,"max-size"));return}r+=d.length,u.push(d)}}),e.on("end",function(){if(!a){clearTimeout(l);try{s(Buffer.concat(u,r))}catch(d){n(new De(`Could not create Buffer from response body for ${i.url}: ${d.message}`,"system",d))}}})})}c(ta,"consumeBody");function uC(i,e){if(typeof Qp!="function")throw new Error("The package `encoding` must be installed to use the textConverted() function");let u=e.get("content-type"),r="utf-8",a,s;return u&&(a=/charset=([^;]*)/i.exec(u)),s=i.slice(0,1024).toString(),!a&&s&&(a=/0&&arguments[0]!==void 0?arguments[0]:void 0;if(this[me]=Object.create(null),e instanceof tl){let u=e.raw(),r=Object.keys(u);for(let a of r)for(let s of u[a])this.append(a,s);return}if(e!=null)if(typeof e=="object"){let u=e[Symbol.iterator];if(u!=null){if(typeof u!="function")throw new TypeError("Header pairs must be iterable");let r=[];for(let a of e){if(typeof a!="object"||typeof a[Symbol.iterator]!="function")throw new TypeError("Each header pair must be iterable");r.push(Array.from(a))}for(let a of r){if(a.length!==2)throw new TypeError("Each header pair must be a name/value tuple");this.append(a[0],a[1])}}else for(let r of Object.keys(e)){let a=e[r];this.append(r,a)}}else throw new TypeError("Provided initializer must be an object")}get(e){e=`${e}`,on(e);let u=ra(this[me],e);return u===void 0?null:this[me][u].join(", ")}forEach(e){let u=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0,r=$p(this),a=0;for(;a1&&arguments[1]!==void 0?arguments[1]:"key+value";return Object.keys(i[me]).sort().map(e==="key"?function(r){return r.toLowerCase()}:e==="value"?function(r){return i[me][r].join(", ")}:function(r){return[r.toLowerCase(),i[me][r].join(", ")]})}c($p,"getHeaders");var zp=Symbol("internal");function Wp(i,e){let u=Object.create(Zp);return u[zp]={target:i,kind:e,index:0},u}c(Wp,"createHeadersIterator");var Zp=Object.setPrototypeOf({next(){if(!this||Object.getPrototypeOf(this)!==Zp)throw new TypeError("Value of `this` is not a HeadersIterator");var i=this[zp];let e=i.target,u=i.kind,r=i.index,a=$p(e,u),s=a.length;return r>=s?{value:void 0,done:!0}:(this[zp].index=r+1,{value:a[r],done:!1})}},Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));Object.defineProperty(Zp,Symbol.toStringTag,{value:"HeadersIterator",writable:!1,enumerable:!1,configurable:!0});function rC(i){let e=Object.assign({__proto__:null},i[me]),u=ra(i[me],"Host");return u!==void 0&&(e[u]=e[u][0]),e}c(rC,"exportNodeCompatibleHeaders");function iC(i){let e=new Nu;for(let u of Object.keys(i))if(!TE.test(u))if(Array.isArray(i[u]))for(let r of i[u])Jp.test(r)||(e[me][u]===void 0?e[me][u]=[r]:e[me][u].push(r));else Jp.test(i[u])||(e[me][u]=[i[u]]);return e}c(iC,"createHeadersLenient");var nr=Symbol("Response internals"),aC=OE.STATUS_CODES,rl=class rl{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null,u=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};ye.call(this,e,u);let r=u.status||200,a=new Nu(u.headers);if(e!=null&&!a.has("Content-Type")){let s=BE(e);s&&a.append("Content-Type",s)}this[nr]={url:u.url,status:r,statusText:u.statusText||aC[r],headers:a,counter:u.counter}}get url(){return this[nr].url||""}get status(){return this[nr].status}get ok(){return this[nr].status>=200&&this[nr].status<300}get redirected(){return this[nr].counter>0}get statusText(){return this[nr].statusText}get headers(){return this[nr].headers}clone(){return new rl(mE(this),{url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected})}};c(rl,"Response");var yu=rl;ye.mixIn(yu.prototype);Object.defineProperties(yu.prototype,{url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});Object.defineProperty(yu.prototype,Symbol.toStringTag,{value:"Response",writable:!1,enumerable:!1,configurable:!0});var vt=Symbol("Request internals"),sC=al.URL||LE.URL,nC=al.parse,oC=al.format;function jp(i){return/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(i)&&(i=new sC(i).toString()),nC(i)}c(jp,"parseURL");var lC="destroy"in qu.Readable.prototype;function ul(i){return typeof i=="object"&&typeof i[vt]=="object"}c(ul,"isRequest");function cC(i){let e=i&&typeof i=="object"&&Object.getPrototypeOf(i);return!!(e&&e.constructor.name==="AbortSignal")}c(cC,"isAbortSignal");var il=class il{constructor(e){let u=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r;ul(e)?r=jp(e.url):(e&&e.href?r=jp(e.href):r=jp(`${e}`),e={});let a=u.method||e.method||"GET";if(a=a.toUpperCase(),(u.body!=null||ul(e)&&e.body!==null)&&(a==="GET"||a==="HEAD"))throw new TypeError("Request with GET/HEAD method cannot have body");let s=u.body!=null?u.body:ul(e)&&e.body!==null?mE(e):null;ye.call(this,s,{timeout:u.timeout||e.timeout||0,size:u.size||e.size||0});let n=new Nu(u.headers||e.headers||{});if(s!=null&&!n.has("Content-Type")){let d=BE(s);d&&n.append("Content-Type",d)}let l=ul(e)?e.signal:null;if("signal"in u&&(l=u.signal),l!=null&&!cC(l))throw new TypeError("Expected signal to be an instanceof AbortSignal");this[vt]={method:a,redirect:u.redirect||e.redirect||"follow",headers:n,parsedURL:r,signal:l},this.follow=u.follow!==void 0?u.follow:e.follow!==void 0?e.follow:20,this.compress=u.compress!==void 0?u.compress:e.compress!==void 0?e.compress:!0,this.counter=u.counter||e.counter||0,this.agent=u.agent||e.agent}get method(){return this[vt].method}get url(){return oC(this[vt].parsedURL)}get headers(){return this[vt].headers}get redirect(){return this[vt].redirect}get signal(){return this[vt].signal}clone(){return new il(this)}};c(il,"Request");var lr=il;ye.mixIn(lr.prototype);Object.defineProperty(lr.prototype,Symbol.toStringTag,{value:"Request",writable:!1,enumerable:!1,configurable:!0});Object.defineProperties(lr.prototype,{method:{enumerable:!0},url:{enumerable:!0},headers:{enumerable:!0},redirect:{enumerable:!0},clone:{enumerable:!0},signal:{enumerable:!0}});function dC(i){let e=i[vt].parsedURL,u=new Nu(i[vt].headers);if(u.has("Accept")||u.set("Accept","*/*"),!e.protocol||!e.hostname)throw new TypeError("Only absolute URLs are supported");if(!/^https?:$/.test(e.protocol))throw new TypeError("Only HTTP(S) protocols are supported");if(i.signal&&i.body instanceof qu.Readable&&!lC)throw new Error("Cancellation of streamed requests with AbortSignal is not supported in node < 8");let r=null;if(i.body==null&&/^(POST|PUT)$/i.test(i.method)&&(r="0"),i.body!=null){let s=ME(i);typeof s=="number"&&(r=String(s))}r&&u.set("Content-Length",r),u.has("User-Agent")||u.set("User-Agent","node-fetch/1.0 (+https://github.com/bitinn/node-fetch)"),i.compress&&!u.has("Accept-Encoding")&&u.set("Accept-Encoding","gzip,deflate");let a=i.agent;return typeof a=="function"&&(a=a(e)),Object.assign({},e,{method:i.method,headers:rC(u),agent:a})}c(dC,"getNodeRequestOptions");function ia(i){Error.call(this,i),this.type="aborted",this.message=i,Error.captureStackTrace(this,this.constructor)}c(ia,"AbortError");ia.prototype=Object.create(Error.prototype);ia.prototype.constructor=ia;ia.prototype.name="AbortError";var dn=al.URL||LE.URL,SE=qu.PassThrough,pC=c(function(e,u){let r=new dn(u).hostname,a=new dn(e).hostname;return r===a||r[r.length-a.length-1]==="."&&r.endsWith(a)},"isDomainOrSubdomain"),hC=c(function(e,u){let r=new dn(u).protocol,a=new dn(e).protocol;return r===a},"isSameProtocol");function or(i,e){if(!or.Promise)throw new Error("native promise missing, set fetch.Promise to your favorite alternative");return ye.Promise=or.Promise,new or.Promise(function(u,r){let a=new lr(i,e),s=dC(a),n=(s.protocol==="https:"?ZN:OE).request,l=a.signal,d=null,p=c(function(){let M=new ia("The user aborted a request.");r(M),a.body&&a.body instanceof qu.Readable&&Xp(a.body,M),!(!d||!d.body)&&d.body.emit("error",M)},"abort");if(l&&l.aborted){p();return}let h=c(function(){p(),m()},"abortAndFinalize"),f=n(s),S;l&&l.addEventListener("abort",h);function m(){f.abort(),l&&l.removeEventListener("abort",h),clearTimeout(S)}c(m,"finalize"),a.timeout&&f.once("socket",function(O){S=setTimeout(function(){r(new De(`network timeout at: ${a.url}`,"request-timeout")),m()},a.timeout)}),f.on("error",function(O){r(new De(`request to ${a.url} failed, reason: ${O.message}`,"system",O)),d&&d.body&&Xp(d.body,O),m()}),fC(f,function(O){l&&l.aborted||d&&d.body&&Xp(d.body,O)}),parseInt(process.version.substring(1))<14&&f.on("socket",function(O){O.addListener("close",function(M){let T=O.listenerCount("data")>0;if(d&&T&&!M&&!(l&&l.aborted)){let L=new Error("Premature close");L.code="ERR_STREAM_PREMATURE_CLOSE",d.body.emit("error",L)}})}),f.on("response",function(O){clearTimeout(S);let M=iC(O.headers);if(or.isRedirect(O.statusCode)){let D=M.get("Location"),E=null;try{E=D===null?null:new dn(D,a.url).toString()}catch{if(a.redirect!=="manual"){r(new De(`uri requested responds with an invalid redirect URL: ${D}`,"invalid-redirect")),m();return}}switch(a.redirect){case"error":r(new De(`uri requested responds with a redirect, redirect mode is set to error: ${a.url}`,"no-redirect")),m();return;case"manual":if(E!==null)try{M.set("Location",E)}catch(x){r(x)}break;case"follow":if(E===null)break;if(a.counter>=a.follow){r(new De(`maximum redirect reached at: ${a.url}`,"max-redirect")),m();return}let R={headers:new Nu(a.headers),follow:a.follow,counter:a.counter+1,agent:a.agent,compress:a.compress,method:a.method,body:a.body,signal:a.signal,timeout:a.timeout,size:a.size};if(!pC(a.url,E)||!hC(a.url,E))for(let x of["authorization","www-authenticate","cookie","cookie2"])R.headers.delete(x);if(O.statusCode!==303&&a.body&&ME(a)===null){r(new De("Cannot follow redirect with body being a readable stream","unsupported-redirect")),m();return}(O.statusCode===303||(O.statusCode===301||O.statusCode===302)&&a.method==="POST")&&(R.method="GET",R.body=void 0,R.headers.delete("content-length")),u(or(new lr(E,R))),m();return}}O.once("end",function(){l&&l.removeEventListener("abort",h)});let T=O.pipe(new SE),L={url:a.url,status:O.statusCode,statusText:O.statusMessage,headers:M,size:a.size,timeout:a.timeout,counter:a.counter},I=M.get("Content-Encoding");if(!a.compress||a.method==="HEAD"||I===null||O.statusCode===204||O.statusCode===304){d=new yu(T,L),u(d);return}let N={flush:$r.Z_SYNC_FLUSH,finishFlush:$r.Z_SYNC_FLUSH};if(I=="gzip"||I=="x-gzip"){T=T.pipe($r.createGunzip(N)),d=new yu(T,L),u(d);return}if(I=="deflate"||I=="x-deflate"){let D=O.pipe(new SE);D.once("data",function(E){(E[0]&15)===8?T=T.pipe($r.createInflate()):T=T.pipe($r.createInflateRaw()),d=new yu(T,L),u(d)}),D.on("end",function(){d||(d=new yu(T,L),u(d))});return}if(I=="br"&&typeof $r.createBrotliDecompress=="function"){T=T.pipe($r.createBrotliDecompress()),d=new yu(T,L),u(d);return}d=new yu(T,L),u(d)}),tC(f,a)})}c(or,"fetch");function fC(i,e){let u;i.on("socket",function(r){u=r}),i.on("response",function(r){let a=r.headers;a["transfer-encoding"]==="chunked"&&!a["content-length"]&&r.once("close",function(s){if(u&&u.listenerCount("data")>0&&!s){let l=new Error("Premature close");l.code="ERR_STREAM_PREMATURE_CLOSE",e(l)}})})}c(fC,"fixResponseChunkedTransferBadEnding");function Xp(i,e){i.destroy?i.destroy(e):(i.emit("error",e),i.end())}c(Xp,"destroyStream");or.isRedirect=function(i){return i===301||i===302||i===303||i===307||i===308};or.Promise=global.Promise;_E.exports=Ku=or;Object.defineProperty(Ku,"__esModule",{value:!0});Ku.default=Ku;Ku.Headers=Nu;Ku.Request=lr;Ku.Response=yu;Ku.FetchError=De;Ku.AbortError=ia});var YE=v((OW,AE)=>{"use strict";var lt=c(i=>i!==null&&typeof i=="object"&&typeof i.pipe=="function","isStream");lt.writable=i=>lt(i)&&i.writable!==!1&&typeof i._write=="function"&&typeof i._writableState=="object";lt.readable=i=>lt(i)&&i.readable!==!1&&typeof i._read=="function"&&typeof i._readableState=="object";lt.duplex=i=>lt.writable(i)&<.readable(i);lt.transform=i=>lt.duplex(i)&&typeof i._transform=="function";AE.exports=lt});var r3=v(sl=>{"use strict";Object.defineProperty(sl,"__esModule",{value:!0});sl.GaxiosError=void 0;var t3=class t3 extends Error{constructor(e,u,r){super(e),this.response=r,this.config=u,this.code=r.status.toString()}};c(t3,"GaxiosError");var u3=t3;sl.GaxiosError=u3});var gE=v(nl=>{"use strict";Object.defineProperty(nl,"__esModule",{value:!0});nl.getRetryConfig=void 0;async function SC(i){var e;let u=RE(i);if(!i||!i.config||!u&&!i.config.retry)return{shouldRetry:!1};u=u||{},u.currentRetryAttempt=u.currentRetryAttempt||0,u.retry=u.retry===void 0||u.retry===null?3:u.retry,u.httpMethodsToRetry=u.httpMethodsToRetry||["GET","HEAD","PUT","OPTIONS","DELETE"],u.noResponseRetries=u.noResponseRetries===void 0||u.noResponseRetries===null?2:u.noResponseRetries;let r=[[100,199],[429,429],[500,599]];if(u.statusCodesToRetry=u.statusCodesToRetry||r,i.config.retryConfig=u,!await(u.shouldRetry||OC)(i))return{shouldRetry:!1,config:i.config};let n=(u.currentRetryAttempt?0:(e=u.retryDelay)!==null&&e!==void 0?e:100)+(Math.pow(2,u.currentRetryAttempt)-1)/2*1e3;i.config.retryConfig.currentRetryAttempt+=1;let l=new Promise(d=>{setTimeout(d,n)});return u.onRetryAttempt&&u.onRetryAttempt(i),await l,{shouldRetry:!0,config:i.config}}c(SC,"getRetryConfig");nl.getRetryConfig=SC;function OC(i){let e=RE(i);if(i.name==="AbortError"||!e||e.retry===0||!i.response&&(e.currentRetryAttempt||0)>=e.noResponseRetries||!i.config.method||e.httpMethodsToRetry.indexOf(i.config.method.toUpperCase())<0)return!1;if(i.response&&i.response.status){let u=!1;for(let[r,a]of e.statusCodesToRetry){let s=i.response.status;if(s>=r&&s<=a){u=!0;break}}if(!u)return!1}return e.currentRetryAttempt=e.currentRetryAttempt||0,!(e.currentRetryAttempt>=e.retry)}c(OC,"shouldRetryRequest");function RE(i){if(i&&i.config&&i.config.retryConfig)return i.config.retryConfig}c(RE,"getConfig")});var NE=v((TW,yE)=>{var sa=1e3,na=sa*60,oa=na*60,zr=oa*24,LC=zr*7,EC=zr*365.25;yE.exports=function(i,e){e=e||{};var u=typeof i;if(u==="string"&&i.length>0)return mC(i);if(u==="number"&&isFinite(i))return e.long?MC(i):BC(i);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(i))};function mC(i){if(i=String(i),!(i.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(i);if(e){var u=parseFloat(e[1]),r=(e[2]||"ms").toLowerCase();switch(r){case"years":case"year":case"yrs":case"yr":case"y":return u*EC;case"weeks":case"week":case"w":return u*LC;case"days":case"day":case"d":return u*zr;case"hours":case"hour":case"hrs":case"hr":case"h":return u*oa;case"minutes":case"minute":case"mins":case"min":case"m":return u*na;case"seconds":case"second":case"secs":case"sec":case"s":return u*sa;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return u;default:return}}}}c(mC,"parse");function BC(i){var e=Math.abs(i);return e>=zr?Math.round(i/zr)+"d":e>=oa?Math.round(i/oa)+"h":e>=na?Math.round(i/na)+"m":e>=sa?Math.round(i/sa)+"s":i+"ms"}c(BC,"fmtShort");function MC(i){var e=Math.abs(i);return e>=zr?ol(i,e,zr,"day"):e>=oa?ol(i,e,oa,"hour"):e>=na?ol(i,e,na,"minute"):e>=sa?ol(i,e,sa,"second"):i+" ms"}c(MC,"fmtLong");function ol(i,e,u,r){var a=e>=u*1.5;return Math.round(i/u)+" "+r+(a?"s":"")}c(ol,"plural")});var i3=v((AW,CE)=>{function TC(i){u.debug=u,u.default=u,u.coerce=d,u.disable=s,u.enable=a,u.enabled=n,u.humanize=NE(),u.destroy=p,Object.keys(i).forEach(h=>{u[h]=i[h]}),u.names=[],u.skips=[],u.formatters={};function e(h){let f=0;for(let S=0;S{if(R==="%%")return"%";D++;let k=u.formatters[x];if(typeof k=="function"){let w=T[D];R=k.call(L,w),T.splice(D,1),D--}return R}),u.formatArgs.call(L,T),(L.log||u.log).apply(L,T)}return c(M,"debug"),M.namespace=h,M.useColors=u.useColors(),M.color=u.selectColor(h),M.extend=r,M.destroy=u.destroy,Object.defineProperty(M,"enabled",{enumerable:!0,configurable:!1,get:()=>S!==null?S:(m!==u.namespaces&&(m=u.namespaces,O=u.enabled(h)),O),set:T=>{S=T}}),typeof u.init=="function"&&u.init(M),M}c(u,"createDebug");function r(h,f){let S=u(this.namespace+(typeof f>"u"?":":f)+h);return S.log=this.log,S}c(r,"extend");function a(h){u.save(h),u.namespaces=h,u.names=[],u.skips=[];let f,S=(typeof h=="string"?h:"").split(/[\s,]+/),m=S.length;for(f=0;f"-"+f)].join(",");return u.enable(""),h}c(s,"disable");function n(h){if(h[h.length-1]==="*")return!0;let f,S;for(f=0,S=u.skips.length;f{Bu.formatArgs=AC;Bu.save=YC;Bu.load=RC;Bu.useColors=_C;Bu.storage=gC();Bu.destroy=(()=>{let i=!1;return()=>{i||(i=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();Bu.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function _C(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)?!1:typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}c(_C,"useColors");function AC(i){if(i[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+i[0]+(this.useColors?"%c ":" ")+"+"+ll.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;i.splice(1,0,e,"color: inherit");let u=0,r=0;i[0].replace(/%[a-zA-Z%]/g,a=>{a!=="%%"&&(u++,a==="%c"&&(r=u))}),i.splice(r,0,e)}c(AC,"formatArgs");Bu.log=console.debug||console.log||(()=>{});function YC(i){try{i?Bu.storage.setItem("debug",i):Bu.storage.removeItem("debug")}catch{}}c(YC,"save");function RC(){let i;try{i=Bu.storage.getItem("debug")}catch{}return!i&&typeof process<"u"&&"env"in process&&(i=process.env.DEBUG),i}c(RC,"load");function gC(){try{return localStorage}catch{}}c(gC,"localstorage");ll.exports=i3()(Bu);var{formatters:yC}=ll.exports;yC.j=function(i){try{return JSON.stringify(i)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var xE=v((gW,bE)=>{"use strict";bE.exports=(i,e=process.argv)=>{let u=i.startsWith("-")?"":i.length===1?"-":"--",r=e.indexOf(u+i),a=e.indexOf("--");return r!==-1&&(a===-1||r{"use strict";var NC=require("os"),vE=require("tty"),Cu=xE(),{env:Ne}=process,cr;Cu("no-color")||Cu("no-colors")||Cu("color=false")||Cu("color=never")?cr=0:(Cu("color")||Cu("colors")||Cu("color=true")||Cu("color=always"))&&(cr=1);"FORCE_COLOR"in Ne&&(Ne.FORCE_COLOR==="true"?cr=1:Ne.FORCE_COLOR==="false"?cr=0:cr=Ne.FORCE_COLOR.length===0?1:Math.min(parseInt(Ne.FORCE_COLOR,10),3));function a3(i){return i===0?!1:{level:i,hasBasic:!0,has256:i>=2,has16m:i>=3}}c(a3,"translateLevel");function s3(i,e){if(cr===0)return 0;if(Cu("color=16m")||Cu("color=full")||Cu("color=truecolor"))return 3;if(Cu("color=256"))return 2;if(i&&!e&&cr===void 0)return 0;let u=cr||0;if(Ne.TERM==="dumb")return u;if(process.platform==="win32"){let r=NC.release().split(".");return Number(r[0])>=10&&Number(r[2])>=10586?Number(r[2])>=14931?3:2:1}if("CI"in Ne)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some(r=>r in Ne)||Ne.CI_NAME==="codeship"?1:u;if("TEAMCITY_VERSION"in Ne)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(Ne.TEAMCITY_VERSION)?1:0;if(Ne.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in Ne){let r=parseInt((Ne.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(Ne.TERM_PROGRAM){case"iTerm.app":return r>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(Ne.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(Ne.TERM)||"COLORTERM"in Ne?1:u}c(s3,"supportsColor");function CC(i){let e=s3(i,i&&i.isTTY);return a3(e)}c(CC,"getSupportLevel");DE.exports={supportsColor:CC,stdout:a3(s3(!0,vE.isatty(1))),stderr:a3(s3(!0,vE.isatty(2)))}});var PE=v((we,dl)=>{var IC=require("tty"),cl=require("util");we.init=PC;we.log=DC;we.formatArgs=xC;we.save=wC;we.load=UC;we.useColors=bC;we.destroy=cl.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");we.colors=[6,2,3,4,5,1];try{let i=wE();i&&(i.stderr||i).level>=2&&(we.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}we.inspectOpts=Object.keys(process.env).filter(i=>/^debug_/i.test(i)).reduce((i,e)=>{let u=e.substring(6).toLowerCase().replace(/_([a-z])/g,(a,s)=>s.toUpperCase()),r=process.env[e];return/^(yes|on|true|enabled)$/i.test(r)?r=!0:/^(no|off|false|disabled)$/i.test(r)?r=!1:r==="null"?r=null:r=Number(r),i[u]=r,i},{});function bC(){return"colors"in we.inspectOpts?!!we.inspectOpts.colors:IC.isatty(process.stderr.fd)}c(bC,"useColors");function xC(i){let{namespace:e,useColors:u}=this;if(u){let r=this.color,a="\x1B[3"+(r<8?r:"8;5;"+r),s=` ${a};1m${e} \x1B[0m`;i[0]=s+i[0].split(` +`).join(` +`+s),i.push(a+"m+"+dl.exports.humanize(this.diff)+"\x1B[0m")}else i[0]=vC()+e+" "+i[0]}c(xC,"formatArgs");function vC(){return we.inspectOpts.hideDate?"":new Date().toISOString()+" "}c(vC,"getDate");function DC(...i){return process.stderr.write(cl.format(...i)+` +`)}c(DC,"log");function wC(i){i?process.env.DEBUG=i:delete process.env.DEBUG}c(wC,"save");function UC(){return process.env.DEBUG}c(UC,"load");function PC(i){i.inspectOpts={};let e=Object.keys(we.inspectOpts);for(let u=0;ue.trim()).join(" ")};UE.O=function(i){return this.inspectOpts.colors=this.useColors,cl.inspect(i,this.inspectOpts)}});var la=v((IW,n3)=>{typeof process>"u"||process.type==="renderer"||process.browser===!0||process.__nwjs?n3.exports=IE():n3.exports=PE()});var kE=v(o3=>{"use strict";Object.defineProperty(o3,"__esModule",{value:!0});function kC(i){return function(e,u){return new Promise((r,a)=>{i.call(this,e,u,(s,n)=>{s?a(s):r(n)})})}}c(kC,"promisify");o3.default=kC});var d3=v((c3,HE)=>{"use strict";var FE=c3&&c3.__importDefault||function(i){return i&&i.__esModule?i:{default:i}},FC=require("events"),HC=FE(la()),VC=FE(kE()),hn=HC.default("agent-base");function GC(i){return!!i&&typeof i.addRequest=="function"}c(GC,"isAgent");function l3(){let{stack:i}=new Error;return typeof i!="string"?!1:i.split(` +`).some(e=>e.indexOf("(https.js:")!==-1||e.indexOf("node:https:")!==-1)}c(l3,"isSecureEndpoint");function pl(i,e){return new pl.Agent(i,e)}c(pl,"createAgent");(function(i){let u=class u extends FC.EventEmitter{constructor(a,s){super();let n=s;typeof a=="function"?this.callback=a:a&&(n=a),this.timeout=null,n&&typeof n.timeout=="number"&&(this.timeout=n.timeout),this.maxFreeSockets=1,this.maxSockets=1,this.maxTotalSockets=1/0,this.sockets={},this.freeSockets={},this.requests={},this.options={}}get defaultPort(){return typeof this.explicitDefaultPort=="number"?this.explicitDefaultPort:l3()?443:80}set defaultPort(a){this.explicitDefaultPort=a}get protocol(){return typeof this.explicitProtocol=="string"?this.explicitProtocol:l3()?"https:":"http:"}set protocol(a){this.explicitProtocol=a}callback(a,s,n){throw new Error('"agent-base" has no default implementation, you must subclass and override `callback()`')}addRequest(a,s){let n=Object.assign({},s);typeof n.secureEndpoint!="boolean"&&(n.secureEndpoint=l3()),n.host==null&&(n.host="localhost"),n.port==null&&(n.port=n.secureEndpoint?443:80),n.protocol==null&&(n.protocol=n.secureEndpoint?"https:":"http:"),n.host&&n.path&&delete n.path,delete n.agent,delete n.hostname,delete n._defaultAgent,delete n.defaultPort,delete n.createConnection,a._last=!0,a.shouldKeepAlive=!1;let l=!1,d=null,p=n.timeout||this.timeout,h=c(O=>{a._hadError||(a.emit("error",O),a._hadError=!0)},"onerror"),f=c(()=>{d=null,l=!0;let O=new Error(`A "socket" was not created for HTTP request before ${p}ms`);O.code="ETIMEOUT",h(O)},"ontimeout"),S=c(O=>{l||(d!==null&&(clearTimeout(d),d=null),h(O))},"callbackError"),m=c(O=>{if(l)return;if(d!=null&&(clearTimeout(d),d=null),GC(O)){hn("Callback returned another Agent instance %o",O.constructor.name),O.addRequest(a,n);return}if(O){O.once("free",()=>{this.freeSocket(O,n)}),a.onSocket(O);return}let M=new Error(`no Duplex stream was returned to agent-base for \`${a.method} ${a.path}\``);h(M)},"onsocket");if(typeof this.callback!="function"){h(new Error("`callback` is not defined"));return}this.promisifiedCallback||(this.callback.length>=3?(hn("Converting legacy callback function to promise"),this.promisifiedCallback=VC.default(this.callback)):this.promisifiedCallback=this.callback),typeof p=="number"&&p>0&&(d=setTimeout(f,p)),"port"in n&&typeof n.port!="number"&&(n.port=Number(n.port));try{hn("Resolving socket for %o request: %o",n.protocol,`${a.method} ${a.path}`),Promise.resolve(this.promisifiedCallback(a,n)).then(m,S)}catch(O){Promise.reject(O).catch(S)}}freeSocket(a,s){hn("Freeing socket %o %o",a.constructor.name,s),a.destroy()}destroy(){hn("Destroying agent %o",this.constructor.name)}};c(u,"Agent");let e=u;i.Agent=e,i.prototype=i.Agent.prototype})(pl||(pl={}));HE.exports=pl});var VE=v(Sn=>{"use strict";var qC=Sn&&Sn.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Sn,"__esModule",{value:!0});var KC=qC(la()),fn=KC.default("https-proxy-agent:parse-proxy-response");function WC(i){return new Promise((e,u)=>{let r=0,a=[];function s(){let f=i.read();f?h(f):i.once("readable",s)}c(s,"read");function n(){i.removeListener("end",d),i.removeListener("error",p),i.removeListener("close",l),i.removeListener("readable",s)}c(n,"cleanup");function l(f){fn("onclose had error %o",f)}c(l,"onclose");function d(){fn("onend")}c(d,"onend");function p(f){n(),fn("onerror %o",f),u(f)}c(p,"onerror");function h(f){a.push(f),r+=f.length;let S=Buffer.concat(a,r);if(S.indexOf(`\r +\r +`)===-1){fn("have not received end of HTTP headers yet..."),s();return}let O=S.toString("ascii",0,S.indexOf(`\r +`)),M=+O.split(" ")[1];fn("got proxy server response: %o",O),e({statusCode:M,buffered:S})}c(h,"ondata"),i.on("error",p),i.on("close",l),i.on("end",d),s()})}c(WC,"parseProxyResponse");Sn.default=WC});var KE=v(Zr=>{"use strict";var jC=Zr&&Zr.__awaiter||function(i,e,u,r){function a(s){return s instanceof u?s:new u(function(n){n(s)})}return c(a,"adopt"),new(u||(u=Promise))(function(s,n){function l(h){try{p(r.next(h))}catch(f){n(f)}}c(l,"fulfilled");function d(h){try{p(r.throw(h))}catch(f){n(f)}}c(d,"rejected");function p(h){h.done?s(h.value):a(h.value).then(l,d)}c(p,"step"),p((r=r.apply(i,e||[])).next())})},ca=Zr&&Zr.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Zr,"__esModule",{value:!0});var GE=ca(require("net")),qE=ca(require("tls")),XC=ca(require("url")),QC=ca(require("assert")),JC=ca(la()),$C=d3(),zC=ca(VE()),On=JC.default("https-proxy-agent:agent"),h3=class h3 extends $C.Agent{constructor(e){let u;if(typeof e=="string"?u=XC.default.parse(e):u=e,!u)throw new Error("an HTTP(S) proxy server `host` and `port` must be specified!");On("creating new HttpsProxyAgent instance: %o",u),super(u);let r=Object.assign({},u);this.secureProxy=u.secureProxy||uI(r.protocol),r.host=r.hostname||r.host,typeof r.port=="string"&&(r.port=parseInt(r.port,10)),!r.port&&r.host&&(r.port=this.secureProxy?443:80),this.secureProxy&&!("ALPNProtocols"in r)&&(r.ALPNProtocols=["http 1.1"]),r.host&&r.path&&(delete r.path,delete r.pathname),this.proxy=r}callback(e,u){return jC(this,void 0,void 0,function*(){let{proxy:r,secureProxy:a}=this,s;a?(On("Creating `tls.Socket`: %o",r),s=qE.default.connect(r)):(On("Creating `net.Socket`: %o",r),s=GE.default.connect(r));let n=Object.assign({},r.headers),d=`CONNECT ${`${u.host}:${u.port}`} HTTP/1.1\r +`;r.auth&&(n["Proxy-Authorization"]=`Basic ${Buffer.from(r.auth).toString("base64")}`);let{host:p,port:h,secureEndpoint:f}=u;eI(h,f)||(p+=`:${h}`),n.Host=p,n.Connection="close";for(let T of Object.keys(n))d+=`${T}: ${n[T]}\r +`;let S=zC.default(s);s.write(`${d}\r +`);let{statusCode:m,buffered:O}=yield S;if(m===200){if(e.once("socket",ZC),u.secureEndpoint){On("Upgrading socket connection to TLS");let T=u.servername||u.host;return qE.default.connect(Object.assign(Object.assign({},tI(u,"host","hostname","path","port")),{socket:s,servername:T}))}return s}s.destroy();let M=new GE.default.Socket({writable:!1});return M.readable=!0,e.once("socket",T=>{On("replaying proxy buffer for failed request"),QC.default(T.listenerCount("data")>0),T.push(O),T.push(null)}),M})}};c(h3,"HttpsProxyAgent");var p3=h3;Zr.default=p3;function ZC(i){i.resume()}c(ZC,"resume");function eI(i,e){return!!(!e&&i===80||e&&i===443)}c(eI,"isDefaultPort");function uI(i){return typeof i=="string"?/^https:?$/i.test(i):!1}c(uI,"isHTTPS");function tI(i,...e){let u={},r;for(r in i)e.includes(r)||(u[r]=i[r]);return u}c(tI,"omit")});var L3=v((O3,WE)=>{"use strict";var rI=O3&&O3.__importDefault||function(i){return i&&i.__esModule?i:{default:i}},f3=rI(KE());function S3(i){return new f3.default(i)}c(S3,"createHttpsProxyAgent");(function(i){i.HttpsProxyAgent=f3.default,i.prototype=f3.default.prototype})(S3||(S3={}));WE.exports=S3});var $E=v(da=>{"use strict";var hl=da&&da.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(da,"__esModule",{value:!0});da.Gaxios=void 0;var iI=hl(Eu()),aI=require("https"),sI=hl(e3()),nI=hl(require("querystring")),oI=hl(YE()),XE=require("url"),lI=r3(),cI=gE(),dI=hI()?window.fetch:sI.default;function pI(){return typeof window<"u"&&!!window}c(pI,"hasWindow");function hI(){return pI()&&!!window.fetch}c(hI,"hasFetch");function fI(){return typeof Buffer<"u"}c(fI,"hasBuffer");function jE(i,e){return!!QE(i,e)}c(jE,"hasHeader");function QE(i,e){e=e.toLowerCase();for(let u of Object.keys((i==null?void 0:i.headers)||{}))if(e===u.toLowerCase())return i.headers[u]}c(QE,"getHeader");var E3;function JE(){let i=process.env.HTTPS_PROXY||process.env.https_proxy||process.env.HTTP_PROXY||process.env.http_proxy;return i&&(E3=L3()),i}c(JE,"loadProxy");JE();function SI(i){var e;let u=(e=process.env.NO_PROXY)!==null&&e!==void 0?e:process.env.no_proxy;if(!u)return!1;let r=u.split(","),a=new XE.URL(i);return!!r.find(s=>s.startsWith("*.")||s.startsWith(".")?(s=s.replace(/^\*\./,"."),a.hostname.endsWith(s)):s===a.origin||s===a.hostname)}c(SI,"skipProxy");function OI(i){if(!SI(i))return JE()}c(OI,"getProxy");var B3=class B3{constructor(e){this.agentCache=new Map,this.defaults=e||{}}async request(e={}){return e=this.validateOpts(e),this._request(e)}async _defaultAdapter(e){let r=await(e.fetchImplementation||dI)(e.url,e),a=await this.getResponseData(e,r);return this.translateResponse(e,r,a)}async _request(e={}){try{let u;if(e.adapter?u=await e.adapter(e,this._defaultAdapter.bind(this)):u=await this._defaultAdapter(e),!e.validateStatus(u.status))throw new lI.GaxiosError(`Request failed with status code ${u.status}`,e,u);return u}catch(u){let r=u;r.config=e;let{shouldRetry:a,config:s}=await cI.getRetryConfig(u);if(a&&s)return r.config.retryConfig.currentRetryAttempt=s.retryConfig.currentRetryAttempt,this._request(r.config);throw r}}async getResponseData(e,u){switch(e.responseType){case"stream":return u.body;case"json":{let r=await u.text();try{r=JSON.parse(r)}catch{}return r}case"arraybuffer":return u.arrayBuffer();case"blob":return u.blob();default:return u.text()}}validateOpts(e){let u=iI.default(!0,{},this.defaults,e);if(!u.url)throw new Error("URL is required.");let r=u.baseUrl||u.baseURL;if(r&&(u.url=r+u.url),u.paramsSerializer=u.paramsSerializer||this.paramsSerializer,u.params&&Object.keys(u.params).length>0){let s=u.paramsSerializer(u.params);s.startsWith("?")&&(s=s.slice(1));let n=u.url.includes("?")?"&":"?";u.url=u.url+n+s}if(typeof e.maxContentLength=="number"&&(u.size=e.maxContentLength),typeof e.maxRedirects=="number"&&(u.follow=e.maxRedirects),u.headers=u.headers||{},u.data){let s=typeof FormData>"u"?!1:(u==null?void 0:u.data)instanceof FormData;oI.default.readable(u.data)?u.body=u.data:fI()&&Buffer.isBuffer(u.data)?(u.body=u.data,jE(u,"Content-Type")||(u.headers["Content-Type"]="application/json")):typeof u.data=="object"?s||(QE(u,"content-type")==="application/x-www-form-urlencoded"?u.body=u.paramsSerializer(u.data):(jE(u,"Content-Type")||(u.headers["Content-Type"]="application/json"),u.body=JSON.stringify(u.data))):u.body=u.data}u.validateStatus=u.validateStatus||this.validateStatus,u.responseType=u.responseType||"json",!u.headers.Accept&&u.responseType==="json"&&(u.headers.Accept="application/json"),u.method=u.method||"GET";let a=OI(u.url);if(a)if(this.agentCache.has(a))u.agent=this.agentCache.get(a);else{if(u.cert&&u.key){let s=new XE.URL(a);u.agent=new E3({port:s.port,host:s.host,protocol:s.protocol,cert:u.cert,key:u.key})}else u.agent=new E3(a);this.agentCache.set(a,u.agent)}else u.cert&&u.key&&(this.agentCache.has(u.key)?u.agent=this.agentCache.get(u.key):(u.agent=new aI.Agent({cert:u.cert,key:u.key}),this.agentCache.set(u.key,u.agent)));return u}validateStatus(e){return e>=200&&e<300}paramsSerializer(e){return nI.default.stringify(e)}translateResponse(e,u,r){let a={};return u.headers.forEach((s,n)=>{a[n]=s}),{config:e,data:r,headers:a,status:u.status,statusText:u.statusText,request:{responseURL:u.url}}}};c(B3,"Gaxios");var m3=B3;da.Gaxios=m3});var fl=v(ct=>{"use strict";Object.defineProperty(ct,"__esModule",{value:!0});ct.request=ct.instance=ct.Gaxios=void 0;var zE=$E();Object.defineProperty(ct,"Gaxios",{enumerable:!0,get:function(){return zE.Gaxios}});var LI=r3();Object.defineProperty(ct,"GaxiosError",{enumerable:!0,get:function(){return LI.GaxiosError}});ct.instance=new zE.Gaxios;async function EI(i){return ct.instance.request(i)}c(EI,"request");ct.request=EI});var M3=v((ZE,Sl)=>{(function(i){"use strict";var e,u=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,r=Math.ceil,a=Math.floor,s="[BigNumber Error] ",n=s+"Number primitive has more than 15 significant digits: ",l=1e14,d=14,p=9007199254740991,h=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],f=1e7,S=1e9;function m(E){var R,x,k,w=t0.prototype={constructor:t0,toString:null,valueOf:null},j=new t0(1),Z=20,J=4,s0=-7,u0=21,L0=-1e7,S0=1e7,n0=!1,U0=1,ce=0,T0={prefix:"",groupSize:3,secondaryGroupSize:0,groupSeparator:",",decimalSeparator:".",fractionGroupSize:0,fractionGroupSeparator:"\xA0",suffix:""},_0="0123456789abcdefghijklmnopqrstuvwxyz",j0=!0;function t0(C,b){var U,K,V,q,Q,G,W,z,$=this;if(!($ instanceof t0))return new t0(C,b);if(b==null){if(C&&C._isBigNumber===!0){$.s=C.s,!C.c||C.e>S0?$.c=$.e=null:C.e=10;Q/=10,q++);q>S0?$.c=$.e=null:($.e=q,$.c=[C]);return}z=String(C)}else{if(!u.test(z=String(C)))return k($,z,G);$.s=z.charCodeAt(0)==45?(z=z.slice(1),-1):1}(q=z.indexOf("."))>-1&&(z=z.replace(".","")),(Q=z.search(/e/i))>0?(q<0&&(q=Q),q+=+z.slice(Q+1),z=z.substring(0,Q)):q<0&&(q=z.length)}else{if(L(b,2,_0.length,"Base"),b==10&&j0)return $=new t0(C),Q0($,Z+$.e+1,J);if(z=String(C),G=typeof C=="number"){if(C*0!=0)return k($,z,G,b);if($.s=1/C<0?(z=z.slice(1),-1):1,t0.DEBUG&&z.replace(/^0\.0*|\./,"").length>15)throw Error(n+C)}else $.s=z.charCodeAt(0)===45?(z=z.slice(1),-1):1;for(U=_0.slice(0,b),q=Q=0,W=z.length;Qq){q=W;continue}}else if(!V&&(z==z.toUpperCase()&&(z=z.toLowerCase())||z==z.toLowerCase()&&(z=z.toUpperCase()))){V=!0,Q=-1,q=0;continue}return k($,String(C),G,b)}G=!1,z=x(z,b,10,$.s),(q=z.indexOf("."))>-1?z=z.replace(".",""):q=z.length}for(Q=0;z.charCodeAt(Q)===48;Q++);for(W=z.length;z.charCodeAt(--W)===48;);if(z=z.slice(Q,++W)){if(W-=Q,G&&t0.DEBUG&&W>15&&(C>p||C!==a(C)))throw Error(n+$.s*C);if((q=q-Q-1)>S0)$.c=$.e=null;else if(q=-S&&V<=S&&V===a(V)){if(K[0]===0){if(V===0&&K.length===1)return!0;break e}if(b=(V+1)%d,b<1&&(b+=d),String(K[0]).length==b){for(b=0;b=l||U!==a(U))break e;if(U!==0)return!0}}}else if(K===null&&V===null&&(q===null||q===1||q===-1))return!0;throw Error(s+"Invalid BigNumber: "+C)},t0.maximum=t0.max=function(){return ee(arguments,-1)},t0.minimum=t0.min=function(){return ee(arguments,1)},t0.random=function(){var C=9007199254740992,b=Math.random()*C&2097151?function(){return a(Math.random()*C)}:function(){return(Math.random()*1073741824|0)*8388608+(Math.random()*8388608|0)};return function(U){var K,V,q,Q,G,W=0,z=[],$=new t0(j);if(U==null?U=Z:L(U,0,S),Q=r(U/d),n0)if(crypto.getRandomValues){for(K=crypto.getRandomValues(new Uint32Array(Q*=2));W>>11),G>=9e15?(V=crypto.getRandomValues(new Uint32Array(2)),K[W]=V[0],K[W+1]=V[1]):(z.push(G%1e14),W+=2);W=Q/2}else if(crypto.randomBytes){for(K=crypto.randomBytes(Q*=7);W=9e15?crypto.randomBytes(7).copy(K,W):(z.push(G%1e14),W+=7);W=Q/7}else throw n0=!1,Error(s+"crypto unavailable");if(!n0)for(;W=10;G/=10,W++);WV-1&&(G[Q+1]==null&&(G[Q+1]=0),G[Q+1]+=G[Q]/V|0,G[Q]%=V)}return G.reverse()}return c(b,"toBaseOut"),function(U,K,V,q,Q){var G,W,z,$,r0,E0,O0,P0,pe=U.indexOf("."),Ae=Z,H0=J;for(pe>=0&&($=ce,ce=0,U=U.replace(".",""),P0=new t0(K),E0=P0.pow(U.length-pe),ce=$,P0.c=b(D(M(E0.c),E0.e,"0"),10,V,C),P0.e=P0.c.length),O0=b(U,K,V,Q?(G=_0,C):(G=C,_0)),z=$=O0.length;O0[--$]==0;O0.pop());if(!O0[0])return G.charAt(0);if(pe<0?--z:(E0.c=O0,E0.e=z,E0.s=q,E0=R(E0,P0,Ae,H0,V),O0=E0.c,r0=E0.r,z=E0.e),W=z+Ae+1,pe=O0[W],$=V/2,r0=r0||W<0||O0[W+1]!=null,r0=H0<4?(pe!=null||r0)&&(H0==0||H0==(E0.s<0?3:2)):pe>$||pe==$&&(H0==4||r0||H0==6&&O0[W-1]&1||H0==(E0.s<0?8:7)),W<1||!O0[0])U=r0?D(G.charAt(1),-Ae,G.charAt(0)):G.charAt(0);else{if(O0.length=W,r0)for(--V;++O0[--W]>V;)O0[W]=0,W||(++z,O0=[1].concat(O0));for($=O0.length;!O0[--$];);for(pe=0,U="";pe<=$;U+=G.charAt(O0[pe++]));U=D(U,z,G.charAt(0))}return U}}(),R=function(){function C(K,V,q){var Q,G,W,z,$=0,r0=K.length,E0=V%f,O0=V/f|0;for(K=K.slice();r0--;)W=K[r0]%f,z=K[r0]/f|0,Q=O0*W+z*E0,G=E0*W+Q%f*f+$,$=(G/q|0)+(Q/f|0)+O0*z,K[r0]=G%q;return $&&(K=[$].concat(K)),K}c(C,"multiply");function b(K,V,q,Q){var G,W;if(q!=Q)W=q>Q?1:-1;else for(G=W=0;GV[G]?1:-1;break}return W}c(b,"compare");function U(K,V,q,Q){for(var G=0;q--;)K[q]-=G,G=K[q]1;K.splice(0,1));}return c(U,"subtract"),function(K,V,q,Q,G){var W,z,$,r0,E0,O0,P0,pe,Ae,H0,z0,je,Xo,bp,xp,st,tn,Au=K.s==V.s?1:-1,ze=K.c,he=V.c;if(!ze||!ze[0]||!he||!he[0])return new t0(!K.s||!V.s||(ze?he&&ze[0]==he[0]:!he)?NaN:ze&&ze[0]==0||!he?Au*0:Au/0);for(pe=new t0(Au),Ae=pe.c=[],z=K.e-V.e,Au=q+z+1,G||(G=l,z=O(K.e/d)-O(V.e/d),Au=Au/d|0),$=0;he[$]==(ze[$]||0);$++);if(he[$]>(ze[$]||0)&&z--,Au<0)Ae.push(1),r0=!0;else{for(bp=ze.length,st=he.length,$=0,Au+=2,E0=a(G/(he[0]+1)),E0>1&&(he=C(he,E0,G),ze=C(ze,E0,G),st=he.length,bp=ze.length),Xo=st,H0=ze.slice(0,st),z0=H0.length;z0=G/2&&xp++;do{if(E0=0,W=b(he,H0,st,z0),W<0){if(je=H0[0],st!=z0&&(je=je*G+(H0[1]||0)),E0=a(je/xp),E0>1)for(E0>=G&&(E0=G-1),O0=C(he,E0,G),P0=O0.length,z0=H0.length;b(O0,H0,P0,z0)==1;)E0--,U(O0,st=10;Au/=10,$++);Q0(pe,q+(pe.e=$+z*d-1)+1,Q,r0)}else pe.e=z,pe.r=+r0;return pe}}();function re(C,b,U,K){var V,q,Q,G,W;if(U==null?U=J:L(U,0,8),!C.c)return C.toString();if(V=C.c[0],Q=C.e,b==null)W=M(C.c),W=K==1||K==2&&(Q<=s0||Q>=u0)?N(W,Q):D(W,Q,"0");else if(C=Q0(new t0(C),b,U),q=C.e,W=M(C.c),G=W.length,K==1||K==2&&(b<=q||q<=s0)){for(;GG){if(--b>0)for(W+=".";b--;W+="0");}else if(b+=q-G,b>0)for(q+1==G&&(W+=".");b--;W+="0");return C.s<0&&V?"-"+W:W}c(re,"format");function ee(C,b){for(var U,K,V=1,q=new t0(C[0]);V=10;V/=10,K++);return(U=K+U*d-1)>S0?C.c=C.e=null:U=10;G/=10,V++);if(q=b-V,q<0)q+=d,Q=b,W=r0[z=0],$=a(W/E0[V-Q-1]%10);else if(z=r((q+1)/d),z>=r0.length)if(K){for(;r0.length<=z;r0.push(0));W=$=0,V=1,q%=d,Q=q-d+1}else break e;else{for(W=G=r0[z],V=1;G>=10;G/=10,V++);q%=d,Q=q-d+V,$=Q<0?0:a(W/E0[V-Q-1]%10)}if(K=K||b<0||r0[z+1]!=null||(Q<0?W:W%E0[V-Q-1]),K=U<4?($||K)&&(U==0||U==(C.s<0?3:2)):$>5||$==5&&(U==4||K||U==6&&(q>0?Q>0?W/E0[V-Q]:0:r0[z-1])%10&1||U==(C.s<0?8:7)),b<1||!r0[0])return r0.length=0,K?(b-=C.e+1,r0[0]=E0[(d-b%d)%d],C.e=-b||0):r0[0]=C.e=0,C;if(q==0?(r0.length=z,G=1,z--):(r0.length=z+1,G=E0[d-q],r0[z]=Q>0?a(W/E0[V-Q]%E0[Q])*G:0),K)for(;;)if(z==0){for(q=1,Q=r0[0];Q>=10;Q/=10,q++);for(Q=r0[0]+=G,G=1;Q>=10;Q/=10,G++);q!=G&&(C.e++,r0[0]==l&&(r0[0]=1));break}else{if(r0[z]+=G,r0[z]!=l)break;r0[z--]=0,G=1}for(q=r0.length;r0[--q]===0;r0.pop());}C.e>S0?C.c=C.e=null:C.e=u0?N(b,U):D(b,U,"0"),C.s<0?"-"+b:b)}return c($0,"valueOf"),w.absoluteValue=w.abs=function(){var C=new t0(this);return C.s<0&&(C.s=1),C},w.comparedTo=function(C,b){return T(this,new t0(C,b))},w.decimalPlaces=w.dp=function(C,b){var U,K,V,q=this;if(C!=null)return L(C,0,S),b==null?b=J:L(b,0,8),Q0(new t0(q),C+q.e+1,b);if(!(U=q.c))return null;if(K=((V=U.length-1)-O(this.e/d))*d,V=U[V])for(;V%10==0;V/=10,K--);return K<0&&(K=0),K},w.dividedBy=w.div=function(C,b){return R(this,new t0(C,b),Z,J)},w.dividedToIntegerBy=w.idiv=function(C,b){return R(this,new t0(C,b),0,1)},w.exponentiatedBy=w.pow=function(C,b){var U,K,V,q,Q,G,W,z,$,r0=this;if(C=new t0(C),C.c&&!C.isInteger())throw Error(s+"Exponent not an integer: "+$0(C));if(b!=null&&(b=new t0(b)),G=C.e>14,!r0.c||!r0.c[0]||r0.c[0]==1&&!r0.e&&r0.c.length==1||!C.c||!C.c[0])return $=new t0(Math.pow(+$0(r0),G?C.s*(2-I(C)):+$0(C))),b?$.mod(b):$;if(W=C.s<0,b){if(b.c?!b.c[0]:!b.s)return new t0(NaN);K=!W&&r0.isInteger()&&b.isInteger(),K&&(r0=r0.mod(b))}else{if(C.e>9&&(r0.e>0||r0.e<-1||(r0.e==0?r0.c[0]>1||G&&r0.c[1]>=24e7:r0.c[0]<8e13||G&&r0.c[0]<=9999975e7)))return q=r0.s<0&&I(C)?-0:0,r0.e>-1&&(q=1/q),new t0(W?1/q:q);ce&&(q=r(ce/d+2))}for(G?(U=new t0(.5),W&&(C.s=1),z=I(C)):(V=Math.abs(+$0(C)),z=V%2),$=new t0(j);;){if(z){if($=$.times(r0),!$.c)break;q?$.c.length>q&&($.c.length=q):K&&($=$.mod(b))}if(V){if(V=a(V/2),V===0)break;z=V%2}else if(C=C.times(U),Q0(C,C.e+1,1),C.e>14)z=I(C);else{if(V=+$0(C),V===0)break;z=V%2}r0=r0.times(r0),q?r0.c&&r0.c.length>q&&(r0.c.length=q):K&&(r0=r0.mod(b))}return K?$:(W&&($=j.div($)),b?$.mod(b):q?Q0($,ce,J,Q):$)},w.integerValue=function(C){var b=new t0(this);return C==null?C=J:L(C,0,8),Q0(b,b.e+1,C)},w.isEqualTo=w.eq=function(C,b){return T(this,new t0(C,b))===0},w.isFinite=function(){return!!this.c},w.isGreaterThan=w.gt=function(C,b){return T(this,new t0(C,b))>0},w.isGreaterThanOrEqualTo=w.gte=function(C,b){return(b=T(this,new t0(C,b)))===1||b===0},w.isInteger=function(){return!!this.c&&O(this.e/d)>this.c.length-2},w.isLessThan=w.lt=function(C,b){return T(this,new t0(C,b))<0},w.isLessThanOrEqualTo=w.lte=function(C,b){return(b=T(this,new t0(C,b)))===-1||b===0},w.isNaN=function(){return!this.s},w.isNegative=function(){return this.s<0},w.isPositive=function(){return this.s>0},w.isZero=function(){return!!this.c&&this.c[0]==0},w.minus=function(C,b){var U,K,V,q,Q=this,G=Q.s;if(C=new t0(C,b),b=C.s,!G||!b)return new t0(NaN);if(G!=b)return C.s=-b,Q.plus(C);var W=Q.e/d,z=C.e/d,$=Q.c,r0=C.c;if(!W||!z){if(!$||!r0)return $?(C.s=-b,C):new t0(r0?Q:NaN);if(!$[0]||!r0[0])return r0[0]?(C.s=-b,C):new t0($[0]?Q:J==3?-0:0)}if(W=O(W),z=O(z),$=$.slice(),G=W-z){for((q=G<0)?(G=-G,V=$):(z=W,V=r0),V.reverse(),b=G;b--;V.push(0));V.reverse()}else for(K=(q=(G=$.length)<(b=r0.length))?G:b,G=b=0;b0)for(;b--;$[U++]=0);for(b=l-1;K>G;){if($[--K]=0;){for(U=0,E0=je[V]%Ae,O0=je[V]/Ae|0,Q=W,q=V+Q;q>V;)z=z0[--Q]%Ae,$=z0[Q]/Ae|0,G=O0*z+$*E0,z=E0*z+G%Ae*Ae+P0[q]+U,U=(z/pe|0)+(G/Ae|0)+O0*$,P0[q--]=z%pe;P0[q]=U}return U?++K:P0.splice(0,1),de(C,P0,K)},w.negated=function(){var C=new t0(this);return C.s=-C.s||null,C},w.plus=function(C,b){var U,K=this,V=K.s;if(C=new t0(C,b),b=C.s,!V||!b)return new t0(NaN);if(V!=b)return C.s=-b,K.minus(C);var q=K.e/d,Q=C.e/d,G=K.c,W=C.c;if(!q||!Q){if(!G||!W)return new t0(V/0);if(!G[0]||!W[0])return W[0]?C:new t0(G[0]?K:V*0)}if(q=O(q),Q=O(Q),G=G.slice(),V=q-Q){for(V>0?(Q=q,U=W):(V=-V,U=G),U.reverse();V--;U.push(0));U.reverse()}for(V=G.length,b=W.length,V-b<0&&(U=W,W=G,G=U,b=V),V=0;b;)V=(G[--b]=G[b]+W[b]+V)/l|0,G[b]=l===G[b]?0:G[b]%l;return V&&(G=[V].concat(G),++Q),de(C,G,Q)},w.precision=w.sd=function(C,b){var U,K,V,q=this;if(C!=null&&C!==!!C)return L(C,1,S),b==null?b=J:L(b,0,8),Q0(new t0(q),C,b);if(!(U=q.c))return null;if(V=U.length-1,K=V*d+1,V=U[V]){for(;V%10==0;V/=10,K--);for(V=U[0];V>=10;V/=10,K++);}return C&&q.e+1>K&&(K=q.e+1),K},w.shiftedBy=function(C){return L(C,-p,p),this.times("1e"+C)},w.squareRoot=w.sqrt=function(){var C,b,U,K,V,q=this,Q=q.c,G=q.s,W=q.e,z=Z+4,$=new t0("0.5");if(G!==1||!Q||!Q[0])return new t0(!G||G<0&&(!Q||Q[0])?NaN:Q?q:1/0);if(G=Math.sqrt(+$0(q)),G==0||G==1/0?(b=M(Q),(b.length+W)%2==0&&(b+="0"),G=Math.sqrt(+b),W=O((W+1)/2)-(W<0||W%2),G==1/0?b="5e"+W:(b=G.toExponential(),b=b.slice(0,b.indexOf("e")+1)+W),U=new t0(b)):U=new t0(G+""),U.c[0]){for(W=U.e,G=W+z,G<3&&(G=0);;)if(V=U,U=$.times(V.plus(R(q,V,z,1))),M(V.c).slice(0,G)===(b=M(U.c)).slice(0,G))if(U.e0&&P0>0){for(q=P0%G||G,$=O0.substr(0,q);q0&&($+=z+O0.slice(q)),E0&&($="-"+$)}K=r0?$+(U.decimalSeparator||"")+((W=+U.fractionGroupSize)?r0.replace(new RegExp("\\d{"+W+"}\\B","g"),"$&"+(U.fractionGroupSeparator||"")):r0):$}return(U.prefix||"")+K+(U.suffix||"")},w.toFraction=function(C){var b,U,K,V,q,Q,G,W,z,$,r0,E0,O0=this,P0=O0.c;if(C!=null&&(G=new t0(C),!G.isInteger()&&(G.c||G.s!==1)||G.lt(j)))throw Error(s+"Argument "+(G.isInteger()?"out of range: ":"not an integer: ")+$0(G));if(!P0)return new t0(O0);for(b=new t0(j),z=U=new t0(j),K=W=new t0(j),E0=M(P0),q=b.e=E0.length-O0.e-1,b.c[0]=h[(Q=q%d)<0?d+Q:Q],C=!C||G.comparedTo(b)>0?q>0?b:z:G,Q=S0,S0=1/0,G=new t0(E0),W.c[0]=0;$=R(G,b,0,1),V=U.plus($.times(K)),V.comparedTo(C)!=1;)U=K,K=V,z=W.plus($.times(V=z)),W=V,b=G.minus($.times(V=b)),G=V;return V=R(C.minus(U),K,0,1),W=W.plus(V.times(z)),U=U.plus(V.times(K)),W.s=z.s=O0.s,q=q*2,r0=R(z,K,q,J).minus(O0).abs().comparedTo(R(W,U,q,J).minus(O0).abs())<1?[z,K]:[W,U],S0=Q,r0},w.toNumber=function(){return+$0(this)},w.toPrecision=function(C,b){return C!=null&&L(C,1,S),re(this,C,b,2)},w.toString=function(C){var b,U=this,K=U.s,V=U.e;return V===null?K?(b="Infinity",K<0&&(b="-"+b)):b="NaN":(C==null?b=V<=s0||V>=u0?N(M(U.c),V):D(M(U.c),V,"0"):C===10&&j0?(U=Q0(new t0(U),Z+V+1,J),b=D(M(U.c),U.e,"0")):(L(C,2,_0.length,"Base"),b=x(D(M(U.c),V,"0"),10,C,K,!0)),K<0&&U.c[0]&&(b="-"+b)),b},w.valueOf=w.toJSON=function(){return $0(this)},w._isBigNumber=!0,E!=null&&t0.set(E),t0}c(m,"clone");function O(E){var R=E|0;return E>0||E===R?R:R-1}c(O,"bitFloor");function M(E){for(var R,x,k=1,w=E.length,j=E[0]+"";ku0^x?1:-1;for(J=(s0=w.length)<(u0=j.length)?s0:u0,Z=0;Zj[Z]^x?1:-1;return s0==u0?0:s0>u0^x?1:-1}c(T,"compare");function L(E,R,x,k){if(Ex||E!==a(E))throw Error(s+(k||"Argument")+(typeof E=="number"?Ex?" out of range: ":" not an integer: ":" not a primitive number: ")+String(E))}c(L,"intCheck");function I(E){var R=E.c.length-1;return O(E.e/d)==R&&E.c[R]%2!=0}c(I,"isOdd");function N(E,R){return(E.length>1?E.charAt(0)+"."+E.slice(1):E)+(R<0?"e":"e+")+R}c(N,"toExponential");function D(E,R,x){var k,w;if(R<0){for(w=x+".";++R;w+=x);E=w+E}else if(k=E.length,++R>k){for(w=x,R-=k;--R;w+=x);E+=w}else R{var em=M3(),um=tm.exports;(function(){"use strict";function i(p){return p<10?"0"+p:p}c(i,"f");var e=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,u=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,r,a,s={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},n;function l(p){return u.lastIndex=0,u.test(p)?'"'+p.replace(u,function(h){var f=s[h];return typeof f=="string"?f:"\\u"+("0000"+h.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+p+'"'}c(l,"quote");function d(p,h){var f,S,m,O,M=r,T,L=h[p],I=L!=null&&(L instanceof em||em.isBigNumber(L));switch(L&&typeof L=="object"&&typeof L.toJSON=="function"&&(L=L.toJSON(p)),typeof n=="function"&&(L=n.call(h,p,L)),typeof L){case"string":return I?L:l(L);case"number":return isFinite(L)?String(L):"null";case"boolean":case"null":case"bigint":return String(L);case"object":if(!L)return"null";if(r+=a,T=[],Object.prototype.toString.apply(L)==="[object Array]"){for(O=L.length,f=0;f{var Ol=null,mI=/(?:_|\\u005[Ff])(?:_|\\u005[Ff])(?:p|\\u0070)(?:r|\\u0072)(?:o|\\u006[Ff])(?:t|\\u0074)(?:o|\\u006[Ff])(?:_|\\u005[Ff])(?:_|\\u005[Ff])/,BI=/(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)/,MI=c(function(i){"use strict";var e={strict:!1,storeAsString:!1,alwaysParseAsBig:!1,useNativeBigInt:!1,protoAction:"error",constructorAction:"error"};if(i!=null){if(i.strict===!0&&(e.strict=!0),i.storeAsString===!0&&(e.storeAsString=!0),e.alwaysParseAsBig=i.alwaysParseAsBig===!0?i.alwaysParseAsBig:!1,e.useNativeBigInt=i.useNativeBigInt===!0?i.useNativeBigInt:!1,typeof i.constructorAction<"u")if(i.constructorAction==="error"||i.constructorAction==="ignore"||i.constructorAction==="preserve")e.constructorAction=i.constructorAction;else throw new Error(`Incorrect value for constructorAction option, must be "error", "ignore" or undefined but passed ${i.constructorAction}`);if(typeof i.protoAction<"u")if(i.protoAction==="error"||i.protoAction==="ignore"||i.protoAction==="preserve")e.protoAction=i.protoAction;else throw new Error(`Incorrect value for protoAction option, must be "error", "ignore" or undefined but passed ${i.protoAction}`)}var u,r,a={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:` +`,r:"\r",t:" "},s,n=c(function(M){throw{name:"SyntaxError",message:M,at:u,text:s}},"error"),l=c(function(M){return M&&M!==r&&n("Expected '"+M+"' instead of '"+r+"'"),r=s.charAt(u),u+=1,r},"next"),d=c(function(){var M,T="";for(r==="-"&&(T="-",l("-"));r>="0"&&r<="9";)T+=r,l();if(r===".")for(T+=".";l()&&r>="0"&&r<="9";)T+=r;if(r==="e"||r==="E")for(T+=r,l(),(r==="-"||r==="+")&&(T+=r,l());r>="0"&&r<="9";)T+=r,l();if(M=+T,!isFinite(M))n("Bad number");else return Ol==null&&(Ol=M3()),T.length>15?e.storeAsString?T:e.useNativeBigInt?BigInt(T):new Ol(T):e.alwaysParseAsBig?e.useNativeBigInt?BigInt(M):new Ol(M):M},"number"),p=c(function(){var M,T,L="",I;if(r==='"')for(var N=u;l();){if(r==='"')return u-1>N&&(L+=s.substring(N,u-1)),l(),L;if(r==="\\"){if(u-1>N&&(L+=s.substring(N,u-1)),l(),r==="u"){for(I=0,T=0;T<4&&(M=parseInt(l(),16),!!isFinite(M));T+=1)I=I*16+M;L+=String.fromCharCode(I)}else if(typeof a[r]=="string")L+=a[r];else break;N=u}}n("Bad string")},"string"),h=c(function(){for(;r&&r<=" ";)l()},"white"),f=c(function(){switch(r){case"t":return l("t"),l("r"),l("u"),l("e"),!0;case"f":return l("f"),l("a"),l("l"),l("s"),l("e"),!1;case"n":return l("n"),l("u"),l("l"),l("l"),null}n("Unexpected '"+r+"'")},"word"),S,m=c(function(){var M=[];if(r==="["){if(l("["),h(),r==="]")return l("]"),M;for(;r;){if(M.push(S()),h(),r==="]")return l("]"),M;l(","),h()}}n("Bad array")},"array"),O=c(function(){var M,T=Object.create(null);if(r==="{"){if(l("{"),h(),r==="}")return l("}"),T;for(;r;){if(M=p(),h(),l(":"),e.strict===!0&&Object.hasOwnProperty.call(T,M)&&n('Duplicate key "'+M+'"'),mI.test(M)===!0?e.protoAction==="error"?n("Object contains forbidden prototype property"):e.protoAction==="ignore"?S():T[M]=S():BI.test(M)===!0?e.constructorAction==="error"?n("Object contains forbidden constructor property"):e.constructorAction==="ignore"?S():T[M]=S():T[M]=S(),h(),r==="}")return l("}"),T;l(","),h()}}n("Bad object")},"object");return S=c(function(){switch(h(),r){case"{":return O();case"[":return m();case'"':return p();case"-":return d();default:return r>="0"&&r<="9"?d():f()}},"value"),function(M,T){var L;return s=M+"",u=0,r=" ",L=S(),h(),r&&n("Syntax error"),typeof T=="function"?c(function I(N,D){var E,R,x=N[D];return x&&typeof x=="object"&&Object.keys(x).forEach(function(k){R=I(x,k),R!==void 0?x[k]=R:delete x[k]}),T.call(N,D,x)},"walk")({"":L},""):L}},"json_parse");im.exports=MI});var om=v((QW,Ll)=>{var sm=rm().stringify,nm=am();Ll.exports=function(i){return{parse:nm(i),stringify:sm}};Ll.exports.parse=nm();Ll.exports.stringify=sm});var ml=v(V0=>{"use strict";Object.defineProperty(V0,"__esModule",{value:!0});V0.requestTimeout=V0.resetIsAvailableCache=V0.isAvailable=V0.project=V0.instance=V0.HEADERS=V0.HEADER_VALUE=V0.HEADER_NAME=V0.SECONDARY_HOST_ADDRESS=V0.HOST_ADDRESS=V0.BASE_PATH=void 0;var T3=fl(),TI=om();V0.BASE_PATH="/computeMetadata/v1";V0.HOST_ADDRESS="http://169.254.169.254";V0.SECONDARY_HOST_ADDRESS="http://metadata.google.internal.";V0.HEADER_NAME="Metadata-Flavor";V0.HEADER_VALUE="Google";V0.HEADERS=Object.freeze({[V0.HEADER_NAME]:V0.HEADER_VALUE});function _3(i){return i||(i=process.env.GCE_METADATA_IP||process.env.GCE_METADATA_HOST||V0.HOST_ADDRESS),/^https?:\/\//.test(i)||(i=`http://${i}`),new URL(V0.BASE_PATH,i).href}c(_3,"getBaseUrl");function _I(i){Object.keys(i).forEach(e=>{switch(e){case"params":case"property":case"headers":break;case"qs":throw new Error("'qs' is not a valid configuration option. Please use 'params' instead.");default:throw new Error(`'${e}' is not a valid configuration option.`)}})}c(_I,"validate");async function A3(i,e,u=3,r=!1){e=e||{},typeof e=="string"&&(e={property:e});let a="";typeof e=="object"&&e.property&&(a="/"+e.property),_I(e);try{let n=await(r?AI:T3.request)({url:`${_3()}/${i}${a}`,headers:Object.assign({},V0.HEADERS,e.headers),retryConfig:{noResponseRetries:u},params:e.params,responseType:"text",timeout:lm()});if(n.headers[V0.HEADER_NAME.toLowerCase()]!==V0.HEADER_VALUE)throw new Error(`Invalid response from metadata service: incorrect ${V0.HEADER_NAME} header.`);if(!n.data)throw new Error("Invalid response from the metadata service");if(typeof n.data=="string")try{return TI.parse(n.data)}catch{}return n.data}catch(s){throw s.response&&s.response.status!==200&&(s.message=`Unsuccessful response status code. ${s.message}`),s}}c(A3,"metadataAccessor");async function AI(i){let e={...i,url:i.url.replace(_3(),_3(V0.SECONDARY_HOST_ADDRESS))},u=!1,r=T3.request(i).then(s=>(u=!0,s)).catch(s=>{if(u)return a;throw u=!0,s}),a=T3.request(e).then(s=>(u=!0,s)).catch(s=>{if(u)return r;throw u=!0,s});return Promise.race([r,a])}c(AI,"fastFailMetadataRequest");function YI(i){return A3("instance",i)}c(YI,"instance");V0.instance=YI;function RI(i){return A3("project",i)}c(RI,"project");V0.project=RI;function gI(){return process.env.DETECT_GCP_RETRIES?Number(process.env.DETECT_GCP_RETRIES):0}c(gI,"detectGCPAvailableRetries");var El;async function yI(){try{return El===void 0&&(El=A3("instance",void 0,gI(),!(process.env.GCE_METADATA_IP||process.env.GCE_METADATA_HOST))),await El,!0}catch(i){if(process.env.DEBUG_AUTH&&console.info(i),i.type==="request-timeout"||i.response&&i.response.status===404)return!1;if(!(i.response&&i.response.status===404)&&(!i.code||!["EHOSTDOWN","EHOSTUNREACH","ENETUNREACH","ENOENT","ENOTFOUND","ECONNREFUSED"].includes(i.code))){let e="UNKNOWN";i.code&&(e=i.code),process.emitWarning(`received unexpected error = ${i.message} code = ${e}`,"MetadataLookupWarning")}return!1}}c(yI,"isAvailable");V0.isAvailable=yI;function NI(){El=void 0}c(NI,"resetIsAvailableCache");V0.resetIsAvailableCache=NI;function lm(){return process.env.K_SERVICE||process.env.FUNCTION_NAME?0:3e3}c(lm,"requestTimeout");V0.requestTimeout=lm});var pm=v(Bl=>{"use strict";Bl.byteLength=II;Bl.toByteArray=xI;Bl.fromByteArray=wI;var dt=[],Iu=[],CI=typeof Uint8Array<"u"?Uint8Array:Array,Y3="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(ei=0,cm=Y3.length;ei0)throw new Error("Invalid string. Length must be a multiple of 4");var u=i.indexOf("=");u===-1&&(u=e);var r=u===e?0:4-u%4;return[u,r]}c(dm,"getLens");function II(i){var e=dm(i),u=e[0],r=e[1];return(u+r)*3/4-r}c(II,"byteLength");function bI(i,e,u){return(e+u)*3/4-u}c(bI,"_byteLength");function xI(i){var e,u=dm(i),r=u[0],a=u[1],s=new CI(bI(i,r,a)),n=0,l=a>0?r-4:r,d;for(d=0;d>16&255,s[n++]=e>>8&255,s[n++]=e&255;return a===2&&(e=Iu[i.charCodeAt(d)]<<2|Iu[i.charCodeAt(d+1)]>>4,s[n++]=e&255),a===1&&(e=Iu[i.charCodeAt(d)]<<10|Iu[i.charCodeAt(d+1)]<<4|Iu[i.charCodeAt(d+2)]>>2,s[n++]=e>>8&255,s[n++]=e&255),s}c(xI,"toByteArray");function vI(i){return dt[i>>18&63]+dt[i>>12&63]+dt[i>>6&63]+dt[i&63]}c(vI,"tripletToBase64");function DI(i,e,u){for(var r,a=[],s=e;sl?l:n+s));return r===1?(e=i[u-1],a.push(dt[e>>2]+dt[e<<4&63]+"==")):r===2&&(e=(i[u-2]<<8)+i[u-1],a.push(dt[e>>10]+dt[e>>4&63]+dt[e<<2&63]+"=")),a.join("")}c(wI,"fromByteArray")});var fm=v(hm=>{(function(i){"use strict";function e(L,I){var N;return L instanceof Buffer?N=L:N=Buffer.from(L.buffer,L.byteOffset,L.byteLength),N.toString(I)}c(e,"B");var u=c(function(L){return Buffer.from(L)},"w");function r(L){for(var I=0,N=Math.min(256*256,L.length+1),D=new Uint16Array(N),E=[],R=0;;){var x=I=N-1){var k=D.subarray(0,R),w=k;if(E.push(String.fromCharCode.apply(null,w)),!x)return E.join("");L=L.subarray(I),I=0,R=0}var j=L[I++];if(!(j&128))D[R++]=j;else if((j&224)===192){var Z=L[I++]&63;D[R++]=(j&31)<<6|Z}else if((j&240)===224){var Z=L[I++]&63,J=L[I++]&63;D[R++]=(j&31)<<12|Z<<6|J}else if((j&248)===240){var Z=L[I++]&63,J=L[I++]&63,s0=L[I++]&63,u0=(j&7)<<18|Z<<12|J<<6|s0;u0>65535&&(u0-=65536,D[R++]=u0>>>10&1023|55296,u0=56320|u0&1023),D[R++]=u0}}}c(r,"h");function a(L){for(var I=0,N=L.length,D=0,E=Math.max(32,N+(N>>>1)+7),R=new Uint8Array(E>>>3<<3);I=55296&&x<=56319){if(I=55296&&x<=56319)continue}if(D+4>R.length){E+=8,E*=1+I/L.length*2,E=E>>>3<<3;var w=new Uint8Array(E);w.set(R),R=w}if(x&4294967168)if(!(x&4294965248))R[D++]=x>>>6&31|192;else if(!(x&4294901760))R[D++]=x>>>12&15|224,R[D++]=x>>>6&63|128;else if(!(x&4292870144))R[D++]=x>>>18&7|240,R[D++]=x>>>12&63|128,R[D++]=x>>>6&63|128;else continue;else{R[D++]=x;continue}R[D++]=x&63|128}return R.slice?R.slice(0,D):R.subarray(0,D)}c(a,"F");var s="Failed to ",n=c(function(L,I,N){if(L)throw new Error("".concat(s).concat(I,": the '").concat(N,"' option is unsupported."))},"p"),l=typeof Buffer=="function"&&Buffer.from,d=l?u:a;function p(){this.encoding="utf-8"}c(p,"v"),p.prototype.encode=function(L,I){return n(I&&I.stream,"encode","stream"),d(L)};function h(L){var I;try{var N=new Blob([L],{type:"text/plain;charset=UTF-8"});I=URL.createObjectURL(N);var D=new XMLHttpRequest;return D.open("GET",I,!1),D.send(),D.responseText}finally{I&&URL.revokeObjectURL(I)}}c(h,"U");var f=!l&&typeof Blob=="function"&&typeof URL=="function"&&typeof URL.createObjectURL=="function",S=["utf-8","utf8","unicode-1-1-utf-8"],m=r;l?m=e:f&&(m=c(function(L){try{return h(L)}catch{return r(L)}},"T"));var O="construct 'TextDecoder'",M="".concat(s," ").concat(O,": the ");function T(L,I){n(I&&I.fatal,O,"fatal"),L=L||"utf-8";var N;if(l?N=Buffer.isEncoding(L):N=S.indexOf(L.toLowerCase())!==-1,!N)throw new RangeError("".concat(M," encoding label provided ('").concat(L,"') is invalid."));this.encoding=L,this.fatal=!1,this.ignoreBOM=!1}c(T,"g"),T.prototype.decode=function(L,I){n(I&&I.stream,"decode","stream");var N;return L instanceof Uint8Array?N=L:L.buffer instanceof ArrayBuffer?N=new Uint8Array(L.buffer):N=new Uint8Array(L),m(N,this.encoding)},i.TextEncoder=i.TextEncoder||p,i.TextDecoder=i.TextDecoder||T})(typeof window<"u"?window:typeof global<"u"?global:hm)});var Sm=v(Ml=>{"use strict";Object.defineProperty(Ml,"__esModule",{value:!0});Ml.BrowserCrypto=void 0;var pa=pm();typeof process>"u"&&typeof TextEncoder>"u"&&fm();var UI=ha(),Ln=class Ln{constructor(){if(typeof window>"u"||window.crypto===void 0||window.crypto.subtle===void 0)throw new Error("SubtleCrypto not found. Make sure it's an https:// website.")}async sha256DigestBase64(e){let u=new TextEncoder().encode(e),r=await window.crypto.subtle.digest("SHA-256",u);return pa.fromByteArray(new Uint8Array(r))}randomBytesBase64(e){let u=new Uint8Array(e);return window.crypto.getRandomValues(u),pa.fromByteArray(u)}static padBase64(e){for(;e.length%4!==0;)e+="=";return e}async verify(e,u,r){let a={name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},s=new TextEncoder().encode(u),n=pa.toByteArray(Ln.padBase64(r)),l=await window.crypto.subtle.importKey("jwk",e,a,!0,["verify"]);return await window.crypto.subtle.verify(a,l,n,s)}async sign(e,u){let r={name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},a=new TextEncoder().encode(u),s=await window.crypto.subtle.importKey("jwk",e,r,!0,["sign"]),n=await window.crypto.subtle.sign(r,s,a);return pa.fromByteArray(new Uint8Array(n))}decodeBase64StringUtf8(e){let u=pa.toByteArray(Ln.padBase64(e));return new TextDecoder().decode(u)}encodeBase64StringUtf8(e){let u=new TextEncoder().encode(e);return pa.fromByteArray(u)}async sha256DigestHex(e){let u=new TextEncoder().encode(e),r=await window.crypto.subtle.digest("SHA-256",u);return UI.fromArrayBufferToHex(r)}async signWithHmacSha256(e,u){let r=typeof e=="string"?e:String.fromCharCode(...new Uint16Array(e)),a=new TextEncoder,s=await window.crypto.subtle.importKey("raw",a.encode(r),{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign"]);return window.crypto.subtle.sign("HMAC",s,a.encode(u))}};c(Ln,"BrowserCrypto");var R3=Ln;Ml.BrowserCrypto=R3});var Om=v(Tl=>{"use strict";Object.defineProperty(Tl,"__esModule",{value:!0});Tl.NodeCrypto=void 0;var fa=require("crypto"),y3=class y3{async sha256DigestBase64(e){return fa.createHash("sha256").update(e).digest("base64")}randomBytesBase64(e){return fa.randomBytes(e).toString("base64")}async verify(e,u,r){let a=fa.createVerify("sha256");return a.update(u),a.end(),a.verify(e,r,"base64")}async sign(e,u){let r=fa.createSign("RSA-SHA256");return r.update(u),r.end(),r.sign(e,"base64")}decodeBase64StringUtf8(e){return Buffer.from(e,"base64").toString("utf-8")}encodeBase64StringUtf8(e){return Buffer.from(e,"utf-8").toString("base64")}async sha256DigestHex(e){return fa.createHash("sha256").update(e).digest("hex")}async signWithHmacSha256(e,u){let r=typeof e=="string"?e:kI(e);return PI(fa.createHmac("sha256",r).update(u).digest())}};c(y3,"NodeCrypto");var g3=y3;Tl.NodeCrypto=g3;function PI(i){return i.buffer.slice(i.byteOffset,i.byteOffset+i.byteLength)}c(PI,"toArrayBuffer");function kI(i){return Buffer.from(i)}c(kI,"toBuffer")});var ha=v(dr=>{"use strict";Object.defineProperty(dr,"__esModule",{value:!0});dr.fromArrayBufferToHex=dr.hasBrowserCrypto=dr.createCrypto=void 0;var FI=Sm(),HI=Om();function VI(){return Lm()?new FI.BrowserCrypto:new HI.NodeCrypto}c(VI,"createCrypto");dr.createCrypto=VI;function Lm(){return typeof window<"u"&&typeof window.crypto<"u"&&typeof window.crypto.subtle<"u"}c(Lm,"hasBrowserCrypto");dr.hasBrowserCrypto=Lm;function GI(i){return Array.from(new Uint8Array(i)).map(u=>u.toString(16).padStart(2,"0")).join("")}c(GI,"fromArrayBufferToHex");dr.fromArrayBufferToHex=GI});var Em=v(_l=>{"use strict";Object.defineProperty(_l,"__esModule",{value:!0});_l.validate=void 0;function qI(i){let e=[{invalid:"uri",expected:"url"},{invalid:"json",expected:"data"},{invalid:"qs",expected:"params"}];for(let u of e)if(i[u.invalid]){let r=`'${u.invalid}' is not a valid configuration option. Please use '${u.expected}' instead. This library is using Axios for requests. Please see https://github.com/axios/axios to learn more about the valid request options.`;throw new Error(r)}}c(qI,"validate");_l.validate=qI});var mm=v((cj,KI)=>{KI.exports={name:"google-auth-library",version:"7.14.1",author:"Google Inc.",description:"Google APIs Authentication Client Library for Node.js",engines:{node:">=10"},main:"./build/src/index.js",types:"./build/src/index.d.ts",repository:"googleapis/google-auth-library-nodejs.git",keywords:["google","api","google apis","client","client library"],dependencies:{arrify:"^2.0.0","base64-js":"^1.3.0","ecdsa-sig-formatter":"^1.0.11","fast-text-encoding":"^1.0.0",gaxios:"^4.0.0","gcp-metadata":"^4.2.0",gtoken:"^5.0.4",jws:"^4.0.0","lru-cache":"^6.0.0"},devDependencies:{"@compodoc/compodoc":"^1.1.7","@types/base64-js":"^1.2.5","@types/chai":"^4.1.7","@types/jws":"^3.1.0","@types/lru-cache":"^5.0.0","@types/mocha":"^8.0.0","@types/mv":"^2.1.0","@types/ncp":"^2.0.1","@types/node":"^16.0.0","@types/sinon":"^10.0.0","@types/tmp":"^0.2.0","assert-rejects":"^1.0.0",c8:"^7.0.0",chai:"^4.2.0",codecov:"^3.0.2",execa:"^5.0.0",gts:"^2.0.0","is-docker":"^2.0.0",karma:"^6.0.0","karma-chrome-launcher":"^3.0.0","karma-coverage":"^2.0.0","karma-firefox-launcher":"^2.0.0","karma-mocha":"^2.0.0","karma-remap-coverage":"^0.1.5","karma-sourcemap-loader":"^0.3.7","karma-webpack":"^5.0.0",keypair:"^1.0.4",linkinator:"^2.0.0",mocha:"^8.0.0",mv:"^2.1.1",ncp:"^2.0.0",nock:"^13.0.0","null-loader":"^4.0.0",puppeteer:"^13.0.0",sinon:"^13.0.0",tmp:"^0.2.0","ts-loader":"^8.0.0",typescript:"^3.8.3",webpack:"^5.21.2","webpack-cli":"^4.0.0"},files:["build/src","!build/src/**/*.map"],scripts:{test:"c8 mocha build/test",clean:"gts clean",prepare:"npm run compile",lint:"gts check",compile:"tsc -p .",fix:"gts fix",pretest:"npm run compile",docs:"compodoc src/","samples-setup":"cd samples/ && npm link ../ && npm run setup && cd ../","samples-test":"cd samples/ && npm link ../ && npm test && cd ../","system-test":"mocha build/system-test --timeout 60000","presystem-test":"npm run compile",webpack:"webpack","browser-test":"karma start","docs-test":"linkinator docs","predocs-test":"npm run docs",prelint:"cd samples; npm link ../; npm install",precompile:"gts clean"},license:"Apache-2.0"}});var mn=v(Yl=>{"use strict";Object.defineProperty(Yl,"__esModule",{value:!0});Yl.DefaultTransporter=void 0;var Bm=fl(),WI=Em(),Mm=mm(),Tm="google-api-nodejs-client",En=class En{configure(e={}){if(e.headers=e.headers||{},typeof window>"u"){let u=e.headers["User-Agent"];u?u.includes(`${Tm}/`)||(e.headers["User-Agent"]=`${u} ${En.USER_AGENT}`):e.headers["User-Agent"]=En.USER_AGENT;let r=`auth/${Mm.version}`;if(e.headers["x-goog-api-client"]&&!e.headers["x-goog-api-client"].includes(r))e.headers["x-goog-api-client"]=`${e.headers["x-goog-api-client"]} ${r}`;else if(!e.headers["x-goog-api-client"]){let a=process.version.replace(/^v/,"");e.headers["x-goog-api-client"]=`gl-node/${a} ${r}`}}return e}request(e,u){e=this.configure(e);try{WI.validate(e)}catch(r){if(u)return u(r);throw r}if(u)Bm.request(e).then(r=>{u(null,r)},r=>{u(this.processError(r))});else return Bm.request(e).catch(r=>{throw this.processError(r)})}processError(e){let u=e.response,r=e,a=u?u.data:null;return u&&a&&a.error&&u.status!==200?typeof a.error=="string"?(r.message=a.error,r.code=u.status.toString()):Array.isArray(a.error.errors)?(r.message=a.error.errors.map(s=>s.message).join(` +`),r.code=a.error.code,r.errors=a.error.errors):(r.message=a.error.message,r.code=a.error.code||u.status):u&&u.status>=400&&(r.message=a,r.code=u.status.toString()),r}};c(En,"DefaultTransporter");var Al=En;Yl.DefaultTransporter=Al;Al.USER_AGENT=`${Tm}/${Mm.version}`});var ti=v((N3,Am)=>{var Rl=require("buffer"),pt=Rl.Buffer;function _m(i,e){for(var u in i)e[u]=i[u]}c(_m,"copyProps");pt.from&&pt.alloc&&pt.allocUnsafe&&pt.allocUnsafeSlow?Am.exports=Rl:(_m(Rl,N3),N3.Buffer=ui);function ui(i,e,u){return pt(i,e,u)}c(ui,"SafeBuffer");ui.prototype=Object.create(pt.prototype);_m(pt,ui);ui.from=function(i,e,u){if(typeof i=="number")throw new TypeError("Argument must not be a number");return pt(i,e,u)};ui.alloc=function(i,e,u){if(typeof i!="number")throw new TypeError("Argument must be a number");var r=pt(i);return e!==void 0?typeof u=="string"?r.fill(e,u):r.fill(e):r.fill(0),r};ui.allocUnsafe=function(i){if(typeof i!="number")throw new TypeError("Argument must be a number");return pt(i)};ui.allocUnsafeSlow=function(i){if(typeof i!="number")throw new TypeError("Argument must be a number");return Rl.SlowBuffer(i)}});var Rm=v((fj,Ym)=>{"use strict";function C3(i){var e=(i/8|0)+(i%8===0?0:1);return e}c(C3,"getParamSize");var jI={ES256:C3(256),ES384:C3(384),ES512:C3(521)};function XI(i){var e=jI[i];if(e)return e;throw new Error('Unknown algorithm "'+i+'"')}c(XI,"getParamBytesForAlg");Ym.exports=XI});var I3=v((Oj,bm)=>{"use strict";var gl=ti().Buffer,ym=Rm(),yl=128,Nm=0,QI=32,JI=16,$I=2,Cm=JI|QI|Nm<<6,Nl=$I|Nm<<6;function zI(i){return i.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}c(zI,"base64Url");function Im(i){if(gl.isBuffer(i))return i;if(typeof i=="string")return gl.from(i,"base64");throw new TypeError("ECDSA signature must be a Base64 string or a Buffer")}c(Im,"signatureAsBuffer");function ZI(i,e){i=Im(i);var u=ym(e),r=u+1,a=i.length,s=0;if(i[s++]!==Cm)throw new Error('Could not find expected "seq"');var n=i[s++];if(n===(yl|1)&&(n=i[s++]),a-s=yl;return a&&--r,r}c(gm,"countPadding");function eb(i,e){i=Im(i);var u=ym(e),r=i.length;if(r!==u*2)throw new TypeError('"'+e+'" signatures must be "'+u*2+'" bytes, saw "'+r+'"');var a=gm(i,0,u),s=gm(i,u,i.length),n=u-a,l=u-s,d=2+n+1+1+l,p=d{"use strict";Object.defineProperty(Cl,"__esModule",{value:!0});Cl.AuthClient=void 0;var ub=require("events"),tb=mn(),x3=class x3 extends ub.EventEmitter{constructor(){super(...arguments),this.transporter=new tb.DefaultTransporter,this.credentials={},this.eagerRefreshThresholdMillis=5*60*1e3,this.forceRefreshOnFailure=!1}setCredentials(e){this.credentials=e}addSharedMetadataHeaders(e){return!e["x-goog-user-project"]&&this.quotaProjectId&&(e["x-goog-user-project"]=this.quotaProjectId),e}};c(x3,"AuthClient");var b3=x3;Cl.AuthClient=b3});var w3=v(Il=>{"use strict";Object.defineProperty(Il,"__esModule",{value:!0});Il.LoginTicket=void 0;var D3=class D3{constructor(e,u){this.envelope=e,this.payload=u}getEnvelope(){return this.envelope}getPayload(){return this.payload}getUserId(){let e=this.getPayload();return e&&e.sub?e.sub:null}getAttributes(){return{envelope:this.getEnvelope(),payload:this.getPayload()}}};c(D3,"LoginTicket");var v3=D3;Il.LoginTicket=v3});var ri=v(ht=>{"use strict";Object.defineProperty(ht,"__esModule",{value:!0});ht.OAuth2Client=ht.CertificateFormat=ht.CodeChallengeMethod=void 0;var bl=require("querystring"),rb=require("stream"),ib=I3(),U3=ha(),ab=Bn(),sb=w3(),nb;(function(i){i.Plain="plain",i.S256="S256"})(nb=ht.CodeChallengeMethod||(ht.CodeChallengeMethod={}));var pr;(function(i){i.PEM="PEM",i.JWK="JWK"})(pr=ht.CertificateFormat||(ht.CertificateFormat={}));var Xe=class Xe extends ab.AuthClient{constructor(e,u,r){super(),this.certificateCache={},this.certificateExpiry=null,this.certificateCacheFormat=pr.PEM,this.refreshTokenPromises=new Map;let a=e&&typeof e=="object"?e:{clientId:e,clientSecret:u,redirectUri:r};this._clientId=a.clientId,this._clientSecret=a.clientSecret,this.redirectUri=a.redirectUri,this.eagerRefreshThresholdMillis=a.eagerRefreshThresholdMillis||5*60*1e3,this.forceRefreshOnFailure=!!a.forceRefreshOnFailure}generateAuthUrl(e={}){if(e.code_challenge_method&&!e.code_challenge)throw new Error("If a code_challenge_method is provided, code_challenge must be included.");return e.response_type=e.response_type||"code",e.client_id=e.client_id||this._clientId,e.redirect_uri=e.redirect_uri||this.redirectUri,e.scope instanceof Array&&(e.scope=e.scope.join(" ")),Xe.GOOGLE_OAUTH2_AUTH_BASE_URL_+"?"+bl.stringify(e)}generateCodeVerifier(){throw new Error("generateCodeVerifier is removed, please use generateCodeVerifierAsync instead.")}async generateCodeVerifierAsync(){let e=U3.createCrypto(),r=e.randomBytesBase64(96).replace(/\+/g,"~").replace(/=/g,"_").replace(/\//g,"-"),s=(await e.sha256DigestBase64(r)).split("=")[0].replace(/\+/g,"-").replace(/\//g,"_");return{codeVerifier:r,codeChallenge:s}}getToken(e,u){let r=typeof e=="string"?{code:e}:e;if(u)this.getTokenAsync(r).then(a=>u(null,a.tokens,a.res),a=>u(a,null,a.response));else return this.getTokenAsync(r)}async getTokenAsync(e){let u=Xe.GOOGLE_OAUTH2_TOKEN_URL_,r={code:e.code,client_id:e.client_id||this._clientId,client_secret:this._clientSecret,redirect_uri:e.redirect_uri||this.redirectUri,grant_type:"authorization_code",code_verifier:e.codeVerifier},a=await this.transporter.request({method:"POST",url:u,data:bl.stringify(r),headers:{"Content-Type":"application/x-www-form-urlencoded"}}),s=a.data;return a.data&&a.data.expires_in&&(s.expiry_date=new Date().getTime()+a.data.expires_in*1e3,delete s.expires_in),this.emit("tokens",s),{tokens:s,res:a}}async refreshToken(e){if(!e)return this.refreshTokenNoCache(e);if(this.refreshTokenPromises.has(e))return this.refreshTokenPromises.get(e);let u=this.refreshTokenNoCache(e).then(r=>(this.refreshTokenPromises.delete(e),r),r=>{throw this.refreshTokenPromises.delete(e),r});return this.refreshTokenPromises.set(e,u),u}async refreshTokenNoCache(e){if(!e)throw new Error("No refresh token is set.");let u=Xe.GOOGLE_OAUTH2_TOKEN_URL_,r={refresh_token:e,client_id:this._clientId,client_secret:this._clientSecret,grant_type:"refresh_token"},a=await this.transporter.request({method:"POST",url:u,data:bl.stringify(r),headers:{"Content-Type":"application/x-www-form-urlencoded"}}),s=a.data;return a.data&&a.data.expires_in&&(s.expiry_date=new Date().getTime()+a.data.expires_in*1e3,delete s.expires_in),this.emit("tokens",s),{tokens:s,res:a}}refreshAccessToken(e){if(e)this.refreshAccessTokenAsync().then(u=>e(null,u.credentials,u.res),e);else return this.refreshAccessTokenAsync()}async refreshAccessTokenAsync(){let e=await this.refreshToken(this.credentials.refresh_token),u=e.tokens;return u.refresh_token=this.credentials.refresh_token,this.credentials=u,{credentials:this.credentials,res:e.res}}getAccessToken(e){if(e)this.getAccessTokenAsync().then(u=>e(null,u.token,u.res),e);else return this.getAccessTokenAsync()}async getAccessTokenAsync(){if(!this.credentials.access_token||this.isTokenExpiring()){if(!this.credentials.refresh_token)if(this.refreshHandler){let r=await this.processAndValidateRefreshHandler();if(r!=null&&r.access_token)return this.setCredentials(r),{token:this.credentials.access_token}}else throw new Error("No refresh token or refresh handler callback is set.");let u=await this.refreshAccessTokenAsync();if(!u.credentials||u.credentials&&!u.credentials.access_token)throw new Error("Could not refresh access token.");return{token:u.credentials.access_token,res:u.res}}else return{token:this.credentials.access_token}}async getRequestHeaders(e){return(await this.getRequestMetadataAsync(e)).headers}async getRequestMetadataAsync(e){let u=this.credentials;if(!u.access_token&&!u.refresh_token&&!this.apiKey&&!this.refreshHandler)throw new Error("No access, refresh token, API key or refresh handler callback is set.");if(u.access_token&&!this.isTokenExpiring()){u.token_type=u.token_type||"Bearer";let l={Authorization:u.token_type+" "+u.access_token};return{headers:this.addSharedMetadataHeaders(l)}}if(this.refreshHandler){let l=await this.processAndValidateRefreshHandler();if(l!=null&&l.access_token){this.setCredentials(l);let d={Authorization:"Bearer "+this.credentials.access_token};return{headers:this.addSharedMetadataHeaders(d)}}}if(this.apiKey)return{headers:{"X-Goog-Api-Key":this.apiKey}};let r=null,a=null;try{r=await this.refreshToken(u.refresh_token),a=r.tokens}catch(l){let d=l;throw d.response&&(d.response.status===403||d.response.status===404)&&(d.message=`Could not refresh access token: ${d.message}`),d}let s=this.credentials;s.token_type=s.token_type||"Bearer",a.refresh_token=s.refresh_token,this.credentials=a;let n={Authorization:s.token_type+" "+a.access_token};return{headers:this.addSharedMetadataHeaders(n),res:r.res}}static getRevokeTokenUrl(e){let u=bl.stringify({token:e});return`${Xe.GOOGLE_OAUTH2_REVOKE_URL_}?${u}`}revokeToken(e,u){let r={url:Xe.getRevokeTokenUrl(e),method:"POST"};if(u)this.transporter.request(r).then(a=>u(null,a),u);else return this.transporter.request(r)}revokeCredentials(e){if(e)this.revokeCredentialsAsync().then(u=>e(null,u),e);else return this.revokeCredentialsAsync()}async revokeCredentialsAsync(){let e=this.credentials.access_token;if(this.credentials={},e)return this.revokeToken(e);throw new Error("No access token to revoke.")}request(e,u){if(u)this.requestAsync(e).then(r=>u(null,r),r=>u(r,r.response));else return this.requestAsync(e)}async requestAsync(e,u=!1){let r;try{let a=await this.getRequestMetadataAsync(e.url);e.headers=e.headers||{},a.headers&&a.headers["x-goog-user-project"]&&(e.headers["x-goog-user-project"]=a.headers["x-goog-user-project"]),a.headers&&a.headers.Authorization&&(e.headers.Authorization=a.headers.Authorization),this.apiKey&&(e.headers["X-Goog-Api-Key"]=this.apiKey),r=await this.transporter.request(e)}catch(a){let s=a.response;if(s){let n=s.status,l=this.credentials&&this.credentials.access_token&&this.credentials.refresh_token&&(!this.credentials.expiry_date||this.forceRefreshOnFailure),d=this.credentials&&this.credentials.access_token&&!this.credentials.refresh_token&&(!this.credentials.expiry_date||this.forceRefreshOnFailure)&&this.refreshHandler,p=s.config.data instanceof rb.Readable,h=n===401||n===403;if(!u&&h&&!p&&l)return await this.refreshAccessTokenAsync(),this.requestAsync(e,!0);if(!u&&h&&!p&&d){let f=await this.processAndValidateRefreshHandler();return f!=null&&f.access_token&&this.setCredentials(f),this.requestAsync(e,!0)}}throw a}return r}verifyIdToken(e,u){if(u&&typeof u!="function")throw new Error("This method accepts an options object as the first parameter, which includes the idToken, audience, and maxExpiry.");if(u)this.verifyIdTokenAsync(e).then(r=>u(null,r),u);else return this.verifyIdTokenAsync(e)}async verifyIdTokenAsync(e){if(!e.idToken)throw new Error("The verifyIdToken method requires an ID Token");let u=await this.getFederatedSignonCertsAsync();return await this.verifySignedJwtWithCertsAsync(e.idToken,u.certs,e.audience,Xe.ISSUERS_,e.maxExpiry)}async getTokenInfo(e){let{data:u}=await this.transporter.request({method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Authorization:`Bearer ${e}`},url:Xe.GOOGLE_TOKEN_INFO_URL}),r=Object.assign({expiry_date:new Date().getTime()+u.expires_in*1e3,scopes:u.scope.split(" ")},u);return delete r.expires_in,delete r.scope,r}getFederatedSignonCerts(e){if(e)this.getFederatedSignonCertsAsync().then(u=>e(null,u.certs,u.res),e);else return this.getFederatedSignonCertsAsync()}async getFederatedSignonCertsAsync(){let e=new Date().getTime(),u=U3.hasBrowserCrypto()?pr.JWK:pr.PEM;if(this.certificateExpiry&&ee(null,u.pubkeys,u.res),e);else return this.getIapPublicKeysAsync()}async getIapPublicKeysAsync(){let e,u=Xe.GOOGLE_OAUTH2_IAP_PUBLIC_KEY_URL_;try{e=await this.transporter.request({url:u})}catch(r){throw r.message=`Failed to retrieve verification certificates: ${r.message}`,r}return{pubkeys:e.data,res:e}}verifySignedJwtWithCerts(){throw new Error("verifySignedJwtWithCerts is removed, please use verifySignedJwtWithCertsAsync instead.")}async verifySignedJwtWithCertsAsync(e,u,r,a,s){let n=U3.createCrypto();s||(s=Xe.MAX_TOKEN_LIFETIME_SECS_);let l=e.split(".");if(l.length!==3)throw new Error("Wrong number of segments in token: "+e);let d=l[0]+"."+l[1],p=l[2],h,f;try{h=JSON.parse(n.decodeBase64StringUtf8(l[0]))}catch(N){throw N.message=`Can't parse token envelope: ${l[0]}': ${N.message}`,N}if(!h)throw new Error("Can't parse token envelope: "+l[0]);try{f=JSON.parse(n.decodeBase64StringUtf8(l[1]))}catch(N){throw N.message=`Can't parse token payload '${l[0]}`,N}if(!f)throw new Error("Can't parse token payload: "+l[1]);if(!Object.prototype.hasOwnProperty.call(u,h.kid))throw new Error("No pem found for envelope: "+JSON.stringify(h));let S=u[h.kid];if(h.alg==="ES256"&&(p=ib.joseToDer(p,"ES256").toString("base64")),!await n.verify(S,d,p))throw new Error("Invalid token signature: "+e);if(!f.iat)throw new Error("No issue time in token: "+JSON.stringify(f));if(!f.exp)throw new Error("No expiration time in token: "+JSON.stringify(f));let O=Number(f.iat);if(isNaN(O))throw new Error("iat field using invalid format");let M=Number(f.exp);if(isNaN(M))throw new Error("exp field using invalid format");let T=new Date().getTime()/1e3;if(M>=T+s)throw new Error("Expiration time too far in future: "+JSON.stringify(f));let L=O-Xe.CLOCK_SKEW_SECS_,I=M+Xe.CLOCK_SKEW_SECS_;if(TI)throw new Error("Token used too late, "+T+" > "+I+": "+JSON.stringify(f));if(a&&a.indexOf(f.iss)<0)throw new Error("Invalid issuer, expected one of ["+a+"], but got "+f.iss);if(typeof r<"u"&&r!==null){let N=f.aud,D=!1;if(r.constructor===Array?D=r.indexOf(N)>-1:D=N===r,!D)throw new Error("Wrong recipient, payload audience != requiredAudience")}return new sb.LoginTicket(h,f)}async processAndValidateRefreshHandler(){if(this.refreshHandler){let e=await this.refreshHandler();if(!e.access_token)throw new Error("No access token is returned by the refreshHandler callback.");return e}}isTokenExpiring(){let e=this.credentials.expiry_date;return e?e<=new Date().getTime()+this.eagerRefreshThresholdMillis:!1}};c(Xe,"OAuth2Client");var Mu=Xe;ht.OAuth2Client=Mu;Mu.GOOGLE_TOKEN_INFO_URL="https://oauth2.googleapis.com/tokeninfo";Mu.GOOGLE_OAUTH2_AUTH_BASE_URL_="https://accounts.google.com/o/oauth2/v2/auth";Mu.GOOGLE_OAUTH2_TOKEN_URL_="https://oauth2.googleapis.com/token";Mu.GOOGLE_OAUTH2_REVOKE_URL_="https://oauth2.googleapis.com/revoke";Mu.GOOGLE_OAUTH2_FEDERATED_SIGNON_PEM_CERTS_URL_="https://www.googleapis.com/oauth2/v1/certs";Mu.GOOGLE_OAUTH2_FEDERATED_SIGNON_JWK_CERTS_URL_="https://www.googleapis.com/oauth2/v3/certs";Mu.GOOGLE_OAUTH2_IAP_PUBLIC_KEY_URL_="https://www.gstatic.com/iap/verify/public_key";Mu.CLOCK_SKEW_SECS_=300;Mu.MAX_TOKEN_LIFETIME_SECS_=86400;Mu.ISSUERS_=["accounts.google.com","https://accounts.google.com"]});var F3=v(xl=>{"use strict";Object.defineProperty(xl,"__esModule",{value:!0});xl.Compute=void 0;var ob=ir(),xm=ml(),lb=ri(),k3=class k3 extends lb.OAuth2Client{constructor(e={}){super(e),this.credentials={expiry_date:1,refresh_token:"compute-placeholder"},this.serviceAccountEmail=e.serviceAccountEmail||"default",this.scopes=ob(e.scopes)}async refreshTokenNoCache(e){let u=`service-accounts/${this.serviceAccountEmail}/token`,r;try{let s={property:u};this.scopes.length>0&&(s.params={scopes:this.scopes.join(",")}),r=await xm.instance(s)}catch(s){throw s.message=`Could not refresh access token: ${s.message}`,this.wrapError(s),s}let a=r;return r&&r.expires_in&&(a.expiry_date=new Date().getTime()+r.expires_in*1e3,delete a.expires_in),this.emit("tokens",a),{tokens:a,res:null}}async fetchIdToken(e){let u=`service-accounts/${this.serviceAccountEmail}/identity?format=full&audience=${e}`,r;try{let a={property:u};r=await xm.instance(a)}catch(a){throw a.message=`Could not fetch ID token: ${a.message}`,a}return r}wrapError(e){let u=e.response;u&&u.status&&(e.code=u.status.toString(),u.status===403?e.message="A Forbidden error was returned while attempting to retrieve an access token for the Compute Engine built-in service account. This may be because the Compute Engine instance does not have the correct permission scopes specified: "+e.message:u.status===404&&(e.message="A Not Found error was returned while attempting to retrieve an accesstoken for the Compute Engine built-in service account. This may be because the Compute Engine instance does not have any permission scopes specified: "+e.message))}};c(k3,"Compute");var P3=k3;xl.Compute=P3});var G3=v(vl=>{"use strict";Object.defineProperty(vl,"__esModule",{value:!0});vl.IdTokenClient=void 0;var cb=ri(),V3=class V3 extends cb.OAuth2Client{constructor(e){super(),this.targetAudience=e.targetAudience,this.idTokenProvider=e.idTokenProvider}async getRequestMetadataAsync(e){if(!this.credentials.id_token||(this.credentials.expiry_date||0){"use strict";Object.defineProperty(wt,"__esModule",{value:!0});wt.getEnv=wt.clear=wt.GCPEnv=void 0;var vm=ml(),hr;(function(i){i.APP_ENGINE="APP_ENGINE",i.KUBERNETES_ENGINE="KUBERNETES_ENGINE",i.CLOUD_FUNCTIONS="CLOUD_FUNCTIONS",i.COMPUTE_ENGINE="COMPUTE_ENGINE",i.CLOUD_RUN="CLOUD_RUN",i.NONE="NONE"})(hr=wt.GCPEnv||(wt.GCPEnv={}));var Mn;function db(){Mn=void 0}c(db,"clear");wt.clear=db;async function pb(){return Mn||(Mn=hb(),Mn)}c(pb,"getEnv");wt.getEnv=pb;async function hb(){let i=hr.NONE;return fb()?i=hr.APP_ENGINE:Sb()?i=hr.CLOUD_FUNCTIONS:await Eb()?await Lb()?i=hr.KUBERNETES_ENGINE:Ob()?i=hr.CLOUD_RUN:i=hr.COMPUTE_ENGINE:i=hr.NONE,i}c(hb,"getEnvMemoized");function fb(){return!!(process.env.GAE_SERVICE||process.env.GAE_MODULE_NAME)}c(fb,"isAppEngine");function Sb(){return!!(process.env.FUNCTION_NAME||process.env.FUNCTION_TARGET)}c(Sb,"isCloudFunction");function Ob(){return!!process.env.K_CONFIGURATION}c(Ob,"isCloudRun");async function Lb(){try{return await vm.instance("attributes/cluster-name"),!0}catch{return!1}}c(Lb,"isKubernetesEngine");async function Eb(){return vm.isAvailable()}c(Eb,"isComputeEngine")});var K3=v((Cj,Dm)=>{var Dl=ti().Buffer,mb=require("stream"),Bb=require("util");function wl(i){if(this.buffer=null,this.writable=!0,this.readable=!0,!i)return this.buffer=Dl.alloc(0),this;if(typeof i.pipe=="function")return this.buffer=Dl.alloc(0),i.pipe(this),this;if(i.length||typeof i=="object")return this.buffer=i,this.writable=!1,process.nextTick(function(){this.emit("end",i),this.readable=!1,this.emit("close")}.bind(this)),this;throw new TypeError("Unexpected data type ("+typeof i+")")}c(wl,"DataStream");Bb.inherits(wl,mb);wl.prototype.write=c(function(e){this.buffer=Dl.concat([this.buffer,Dl.from(e)]),this.emit("data",e)},"write");wl.prototype.end=c(function(e){e&&this.write(e),this.emit("end",e),this.emit("close"),this.writable=!1,this.readable=!1},"end");Dm.exports=wl});var Um=v((bj,wm)=>{"use strict";var Tn=require("buffer").Buffer,W3=require("buffer").SlowBuffer;wm.exports=Ul;function Ul(i,e){if(!Tn.isBuffer(i)||!Tn.isBuffer(e)||i.length!==e.length)return!1;for(var u=0,r=0;r{var _b=Um(),Oa=ti().Buffer,ft=require("crypto"),km=I3(),Pm=require("util"),Ab=`"%s" is not a valid algorithm. + Supported algorithms are: + "HS256", "HS384", "HS512", "RS256", "RS384", "RS512", "PS256", "PS384", "PS512", "ES256", "ES384", "ES512" and "none".`,_n="secret must be a string or buffer",Sa="key must be a string or a buffer",Yb="key must be a string, a buffer or an object",j3=typeof ft.createPublicKey=="function";j3&&(Sa+=" or a KeyObject",_n+="or a KeyObject");function Fm(i){if(!Oa.isBuffer(i)&&typeof i!="string"&&(!j3||typeof i!="object"||typeof i.type!="string"||typeof i.asymmetricKeyType!="string"||typeof i.export!="function"))throw Wu(Sa)}c(Fm,"checkIsPublicKey");function Hm(i){if(!Oa.isBuffer(i)&&typeof i!="string"&&typeof i!="object")throw Wu(Yb)}c(Hm,"checkIsPrivateKey");function Rb(i){if(!Oa.isBuffer(i)){if(typeof i=="string")return i;if(!j3||typeof i!="object"||i.type!=="secret"||typeof i.export!="function")throw Wu(_n)}}c(Rb,"checkIsSecretKey");function X3(i){return i.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}c(X3,"fromBase64");function Vm(i){i=i.toString();var e=4-i.length%4;if(e!==4)for(var u=0;u{var Db=require("buffer").Buffer;jm.exports=c(function(e){return typeof e=="string"?e:typeof e=="number"||Db.isBuffer(e)?e.toString():JSON.stringify(e)},"toString")});var Zm=v((Pj,zm)=>{var wb=ti().Buffer,Xm=K3(),Ub=Q3(),Pb=require("stream"),Qm=J3(),$3=require("util");function Jm(i,e){return wb.from(i,e).toString("base64").replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}c(Jm,"base64url");function kb(i,e,u){u=u||"utf8";var r=Jm(Qm(i),"binary"),a=Jm(Qm(e),u);return $3.format("%s.%s",r,a)}c(kb,"jwsSecuredInput");function $m(i){var e=i.header,u=i.payload,r=i.secret||i.privateKey,a=i.encoding,s=Ub(e.alg),n=kb(e,u,a),l=s.sign(n,r);return $3.format("%s.%s",n,l)}c($m,"jwsSign");function Pl(i){var e=i.secret||i.privateKey||i.key,u=new Xm(e);this.readable=!0,this.header=i.header,this.encoding=i.encoding,this.secret=this.privateKey=this.key=u,this.payload=new Xm(i.payload),this.secret.once("close",function(){!this.payload.writable&&this.readable&&this.sign()}.bind(this)),this.payload.once("close",function(){!this.secret.writable&&this.readable&&this.sign()}.bind(this))}c(Pl,"SignStream");$3.inherits(Pl,Pb);Pl.prototype.sign=c(function(){try{var e=$m({header:this.header,payload:this.payload.buffer,secret:this.secret.buffer,encoding:this.encoding});return this.emit("done",e),this.emit("data",e),this.emit("end"),this.readable=!1,e}catch(u){this.readable=!1,this.emit("error",u),this.emit("close")}},"sign");Pl.sign=$m;zm.exports=Pl});var lB=v((Fj,oB)=>{var uB=ti().Buffer,eB=K3(),Fb=Q3(),Hb=require("stream"),tB=J3(),Vb=require("util"),Gb=/^[a-zA-Z0-9\-_]+?\.[a-zA-Z0-9\-_]+?\.([a-zA-Z0-9\-_]+)?$/;function qb(i){return Object.prototype.toString.call(i)==="[object Object]"}c(qb,"isObject");function Kb(i){if(qb(i))return i;try{return JSON.parse(i)}catch{return}}c(Kb,"safeJsonParse");function rB(i){var e=i.split(".",1)[0];return Kb(uB.from(e,"base64").toString("binary"))}c(rB,"headerFromJWS");function Wb(i){return i.split(".",2).join(".")}c(Wb,"securedInputFromJWS");function iB(i){return i.split(".")[2]}c(iB,"signatureFromJWS");function jb(i,e){e=e||"utf8";var u=i.split(".")[1];return uB.from(u,"base64").toString(e)}c(jb,"payloadFromJWS");function aB(i){return Gb.test(i)&&!!rB(i)}c(aB,"isValidJws");function sB(i,e,u){if(!e){var r=new Error("Missing algorithm parameter for jws.verify");throw r.code="MISSING_ALGORITHM",r}i=tB(i);var a=iB(i),s=Wb(i),n=Fb(e);return n.verify(s,a,u)}c(sB,"jwsVerify");function nB(i,e){if(e=e||{},i=tB(i),!aB(i))return null;var u=rB(i);if(!u)return null;var r=jb(i);return(u.typ==="JWT"||e.json)&&(r=JSON.parse(r,e.encoding)),{header:u,payload:r,signature:iB(i)}}c(nB,"jwsDecode");function La(i){i=i||{};var e=i.secret||i.publicKey||i.key,u=new eB(e);this.readable=!0,this.algorithm=i.algorithm,this.encoding=i.encoding,this.secret=this.publicKey=this.key=u,this.signature=new eB(i.signature),this.secret.once("close",function(){!this.signature.writable&&this.readable&&this.verify()}.bind(this)),this.signature.once("close",function(){!this.secret.writable&&this.readable&&this.verify()}.bind(this))}c(La,"VerifyStream");Vb.inherits(La,Hb);La.prototype.verify=c(function(){try{var e=sB(this.signature.buffer,this.algorithm,this.key.buffer),u=nB(this.signature.buffer,this.encoding);return this.emit("done",e,u),this.emit("data",e),this.emit("end"),this.readable=!1,e}catch(r){this.readable=!1,this.emit("error",r),this.emit("close")}},"verify");La.decode=nB;La.isValid=aB;La.verify=sB;oB.exports=La});var z3=v(fr=>{var cB=Zm(),kl=lB(),Xb=["HS256","HS384","HS512","RS256","RS384","RS512","PS256","PS384","PS512","ES256","ES384","ES512"];fr.ALGORITHMS=Xb;fr.sign=cB.sign;fr.verify=kl.verify;fr.decode=kl.decode;fr.isValid=kl.isValid;fr.createSign=c(function(e){return new cB(e)},"createSign");fr.createVerify=c(function(e){return new kl(e)},"createVerify")});var y0=v((qj,dB)=>{dB.exports={options:{usePureJavaScript:!1}}});var fB=v((Kj,hB)=>{var Z3={};hB.exports=Z3;var pB={};Z3.encode=function(i,e,u){if(typeof e!="string")throw new TypeError('"alphabet" must be a string.');if(u!==void 0&&typeof u!="number")throw new TypeError('"maxline" must be a number.');var r="";if(!(i instanceof Uint8Array))r=Qb(i,e);else{var a=0,s=e.length,n=e.charAt(0),l=[0];for(a=0;a0;)l.push(p%s),p=p/s|0}for(a=0;i[a]===0&&a=0;--a)r+=e[l[a]]}if(u){var h=new RegExp(".{1,"+u+"}","g");r=r.match(h).join(`\r +`)}return r};Z3.decode=function(i,e){if(typeof i!="string")throw new TypeError('"input" must be a string.');if(typeof e!="string")throw new TypeError('"alphabet" must be a string.');var u=pB[e];if(!u){u=pB[e]=[];for(var r=0;r>=8;for(;p>0;)n.push(p&255),p>>=8}for(var h=0;i[h]===s&&h0;)s.push(l%r),l=l/r|0}var d="";for(u=0;i.at(u)===0&&u=0;--u)d+=e[s[u]];return d}c(Qb,"_encodeWithByteBuffer")});var G0=v((jj,EB)=>{var SB=y0(),OB=fB(),H=EB.exports=SB.util=SB.util||{};(function(){if(typeof process<"u"&&process.nextTick&&!process.browser){H.nextTick=process.nextTick,typeof setImmediate=="function"?H.setImmediate=setImmediate:H.setImmediate=H.nextTick;return}if(typeof setImmediate=="function"){H.setImmediate=function(){return setImmediate.apply(void 0,arguments)},H.nextTick=function(l){return setImmediate(l)};return}if(H.setImmediate=function(l){setTimeout(l,0)},typeof window<"u"&&typeof window.postMessage=="function"){let l=function(d){if(d.source===window&&d.data===i){d.stopPropagation();var p=e.slice();e.length=0,p.forEach(function(h){h()})}};var n=l;c(l,"handler");var i="forge.setImmediate",e=[];H.setImmediate=function(d){e.push(d),e.length===1&&window.postMessage(i,"*")},window.addEventListener("message",l,!0)}if(typeof MutationObserver<"u"){var u=Date.now(),r=!0,a=document.createElement("div"),e=[];new MutationObserver(function(){var d=e.slice();e.length=0,d.forEach(function(p){p()})}).observe(a,{attributes:!0});var s=H.setImmediate;H.setImmediate=function(d){Date.now()-u>15?(u=Date.now(),s(d)):(e.push(d),e.length===1&&a.setAttribute("a",r=!r))}}H.nextTick=H.setImmediate})();H.isNodejs=typeof process<"u"&&process.versions&&process.versions.node;H.globalScope=function(){return H.isNodejs?global:typeof self>"u"?window:self}();H.isArray=Array.isArray||function(i){return Object.prototype.toString.call(i)==="[object Array]"};H.isArrayBuffer=function(i){return typeof ArrayBuffer<"u"&&i instanceof ArrayBuffer};H.isArrayBufferView=function(i){return i&&H.isArrayBuffer(i.buffer)&&i.byteLength!==void 0};function Yn(i){if(!(i===8||i===16||i===24||i===32))throw new Error("Only 8, 16, 24, or 32 bits supported: "+i)}c(Yn,"_checkBitsParam");H.ByteBuffer=eh;function eh(i){if(this.data="",this.read=0,typeof i=="string")this.data=i;else if(H.isArrayBuffer(i)||H.isArrayBufferView(i))if(typeof Buffer<"u"&&i instanceof Buffer)this.data=i.toString("binary");else{var e=new Uint8Array(i);try{this.data=String.fromCharCode.apply(null,e)}catch{for(var u=0;uJb&&(this.data.substr(0,1),this._constructedStringLength=0)};H.ByteStringBuffer.prototype.length=function(){return this.data.length-this.read};H.ByteStringBuffer.prototype.isEmpty=function(){return this.length()<=0};H.ByteStringBuffer.prototype.putByte=function(i){return this.putBytes(String.fromCharCode(i))};H.ByteStringBuffer.prototype.fillWithByte=function(i,e){i=String.fromCharCode(i);for(var u=this.data;e>0;)e&1&&(u+=i),e>>>=1,e>0&&(i+=i);return this.data=u,this._optimizeConstructedString(e),this};H.ByteStringBuffer.prototype.putBytes=function(i){return this.data+=i,this._optimizeConstructedString(i.length),this};H.ByteStringBuffer.prototype.putString=function(i){return this.putBytes(H.encodeUtf8(i))};H.ByteStringBuffer.prototype.putInt16=function(i){return this.putBytes(String.fromCharCode(i>>8&255)+String.fromCharCode(i&255))};H.ByteStringBuffer.prototype.putInt24=function(i){return this.putBytes(String.fromCharCode(i>>16&255)+String.fromCharCode(i>>8&255)+String.fromCharCode(i&255))};H.ByteStringBuffer.prototype.putInt32=function(i){return this.putBytes(String.fromCharCode(i>>24&255)+String.fromCharCode(i>>16&255)+String.fromCharCode(i>>8&255)+String.fromCharCode(i&255))};H.ByteStringBuffer.prototype.putInt16Le=function(i){return this.putBytes(String.fromCharCode(i&255)+String.fromCharCode(i>>8&255))};H.ByteStringBuffer.prototype.putInt24Le=function(i){return this.putBytes(String.fromCharCode(i&255)+String.fromCharCode(i>>8&255)+String.fromCharCode(i>>16&255))};H.ByteStringBuffer.prototype.putInt32Le=function(i){return this.putBytes(String.fromCharCode(i&255)+String.fromCharCode(i>>8&255)+String.fromCharCode(i>>16&255)+String.fromCharCode(i>>24&255))};H.ByteStringBuffer.prototype.putInt=function(i,e){Yn(e);var u="";do e-=8,u+=String.fromCharCode(i>>e&255);while(e>0);return this.putBytes(u)};H.ByteStringBuffer.prototype.putSignedInt=function(i,e){return i<0&&(i+=2<0);return e};H.ByteStringBuffer.prototype.getSignedInt=function(i){var e=this.getInt(i),u=2<=u&&(e-=u<<1),e};H.ByteStringBuffer.prototype.getBytes=function(i){var e;return i?(i=Math.min(this.length(),i),e=this.data.slice(this.read,this.read+i),this.read+=i):i===0?e="":(e=this.read===0?this.data:this.data.slice(this.read),this.clear()),e};H.ByteStringBuffer.prototype.bytes=function(i){return typeof i>"u"?this.data.slice(this.read):this.data.slice(this.read,this.read+i)};H.ByteStringBuffer.prototype.at=function(i){return this.data.charCodeAt(this.read+i)};H.ByteStringBuffer.prototype.setAt=function(i,e){return this.data=this.data.substr(0,this.read+i)+String.fromCharCode(e)+this.data.substr(this.read+i+1),this};H.ByteStringBuffer.prototype.last=function(){return this.data.charCodeAt(this.data.length-1)};H.ByteStringBuffer.prototype.copy=function(){var i=H.createBuffer(this.data);return i.read=this.read,i};H.ByteStringBuffer.prototype.compact=function(){return this.read>0&&(this.data=this.data.slice(this.read),this.read=0),this};H.ByteStringBuffer.prototype.clear=function(){return this.data="",this.read=0,this};H.ByteStringBuffer.prototype.truncate=function(i){var e=Math.max(0,this.length()-i);return this.data=this.data.substr(this.read,e),this.read=0,this};H.ByteStringBuffer.prototype.toHex=function(){for(var i="",e=this.read;e=i)return this;e=Math.max(e||this.growSize,i);var u=new Uint8Array(this.data.buffer,this.data.byteOffset,this.data.byteLength),r=new Uint8Array(this.length()+e);return r.set(u),this.data=new DataView(r.buffer),this};H.DataBuffer.prototype.putByte=function(i){return this.accommodate(1),this.data.setUint8(this.write++,i),this};H.DataBuffer.prototype.fillWithByte=function(i,e){this.accommodate(e);for(var u=0;u>8&65535),this.data.setInt8(this.write,i>>16&255),this.write+=3,this};H.DataBuffer.prototype.putInt32=function(i){return this.accommodate(4),this.data.setInt32(this.write,i),this.write+=4,this};H.DataBuffer.prototype.putInt16Le=function(i){return this.accommodate(2),this.data.setInt16(this.write,i,!0),this.write+=2,this};H.DataBuffer.prototype.putInt24Le=function(i){return this.accommodate(3),this.data.setInt8(this.write,i>>16&255),this.data.setInt16(this.write,i>>8&65535,!0),this.write+=3,this};H.DataBuffer.prototype.putInt32Le=function(i){return this.accommodate(4),this.data.setInt32(this.write,i,!0),this.write+=4,this};H.DataBuffer.prototype.putInt=function(i,e){Yn(e),this.accommodate(e/8);do e-=8,this.data.setInt8(this.write++,i>>e&255);while(e>0);return this};H.DataBuffer.prototype.putSignedInt=function(i,e){return Yn(e),this.accommodate(e/8),i<0&&(i+=2<0);return e};H.DataBuffer.prototype.getSignedInt=function(i){var e=this.getInt(i),u=2<=u&&(e-=u<<1),e};H.DataBuffer.prototype.getBytes=function(i){var e;return i?(i=Math.min(this.length(),i),e=this.data.slice(this.read,this.read+i),this.read+=i):i===0?e="":(e=this.read===0?this.data:this.data.slice(this.read),this.clear()),e};H.DataBuffer.prototype.bytes=function(i){return typeof i>"u"?this.data.slice(this.read):this.data.slice(this.read,this.read+i)};H.DataBuffer.prototype.at=function(i){return this.data.getUint8(this.read+i)};H.DataBuffer.prototype.setAt=function(i,e){return this.data.setUint8(i,e),this};H.DataBuffer.prototype.last=function(){return this.data.getUint8(this.write-1)};H.DataBuffer.prototype.copy=function(){return new H.DataBuffer(this)};H.DataBuffer.prototype.compact=function(){if(this.read>0){var i=new Uint8Array(this.data.buffer,this.read),e=new Uint8Array(i.byteLength);e.set(i),this.data=new DataView(e),this.write-=this.read,this.read=0}return this};H.DataBuffer.prototype.clear=function(){return this.data=new DataView(new ArrayBuffer(0)),this.read=this.write=0,this};H.DataBuffer.prototype.truncate=function(i){return this.write=Math.max(0,this.length()-i),this.read=Math.min(this.read,this.write),this};H.DataBuffer.prototype.toHex=function(){for(var i="",e=this.read;e0;)e&1&&(u+=i),e>>>=1,e>0&&(i+=i);return u};H.xorBytes=function(i,e,u){for(var r="",a="",s="",n=0,l=0;u>0;--u,++n)a=i.charCodeAt(n)^e.charCodeAt(n),l>=10&&(r+=s,s="",l=0),s+=String.fromCharCode(a),++l;return r+=s,r};H.hexToBytes=function(i){var e="",u=0;for(i.length&!0&&(u=1,e+=String.fromCharCode(parseInt(i[0],16)));u>24&255)+String.fromCharCode(i>>16&255)+String.fromCharCode(i>>8&255)+String.fromCharCode(i&255)};var Sr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",Or=[62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,64,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],LB="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";H.encode64=function(i,e){for(var u="",r="",a,s,n,l=0;l>2),u+=Sr.charAt((a&3)<<4|s>>4),isNaN(s)?u+="==":(u+=Sr.charAt((s&15)<<2|n>>6),u+=isNaN(n)?"=":Sr.charAt(n&63)),e&&u.length>e&&(r+=u.substr(0,e)+`\r +`,u=u.substr(e));return r+=u,r};H.decode64=function(i){i=i.replace(/[^A-Za-z0-9\+\/\=]/g,"");for(var e="",u,r,a,s,n=0;n>4),a!==64&&(e+=String.fromCharCode((r&15)<<4|a>>2),s!==64&&(e+=String.fromCharCode((a&3)<<6|s)));return e};H.encodeUtf8=function(i){return unescape(encodeURIComponent(i))};H.decodeUtf8=function(i){return decodeURIComponent(escape(i))};H.binary={raw:{},hex:{},base64:{},base58:{},baseN:{encode:OB.encode,decode:OB.decode}};H.binary.raw.encode=function(i){return String.fromCharCode.apply(null,i)};H.binary.raw.decode=function(i,e,u){var r=e;r||(r=new Uint8Array(i.length)),u=u||0;for(var a=u,s=0;s>2),u+=Sr.charAt((a&3)<<4|s>>4),isNaN(s)?u+="==":(u+=Sr.charAt((s&15)<<2|n>>6),u+=isNaN(n)?"=":Sr.charAt(n&63)),e&&u.length>e&&(r+=u.substr(0,e)+`\r +`,u=u.substr(e));return r+=u,r};H.binary.base64.decode=function(i,e,u){var r=e;r||(r=new Uint8Array(Math.ceil(i.length/4)*3)),i=i.replace(/[^A-Za-z0-9\+\/\=]/g,""),u=u||0;for(var a,s,n,l,d=0,p=u;d>4,n!==64&&(r[p++]=(s&15)<<4|n>>2,l!==64&&(r[p++]=(n&3)<<6|l));return e?p-u:r.subarray(0,p)};H.binary.base58.encode=function(i,e){return H.binary.baseN.encode(i,LB,e)};H.binary.base58.decode=function(i,e){return H.binary.baseN.decode(i,LB,e)};H.text={utf8:{},utf16:{}};H.text.utf8.encode=function(i,e,u){i=H.encodeUtf8(i);var r=e;r||(r=new Uint8Array(i.length)),u=u||0;for(var a=u,s=0;s"u"&&(u=["web","flash"]);var a,s=!1,n=null;for(var l in u){a=u[l];try{if(a==="flash"||a==="both"){if(e[0]===null)throw new Error("Flash local storage not available.");r=i.apply(this,e),s=a==="flash"}(a==="web"||a==="both")&&(e[0]=localStorage,r=i.apply(this,e),s=!0)}catch(d){n=d}if(s)break}if(!s)throw n;return r},"_callStorageFunction");H.setItem=function(i,e,u,r,a){Fl(zb,arguments,a)};H.getItem=function(i,e,u,r){return Fl(Zb,arguments,r)};H.removeItem=function(i,e,u,r){Fl(ex,arguments,r)};H.clearItems=function(i,e,u){Fl(ux,arguments,u)};H.isEmpty=function(i){for(var e in i)if(i.hasOwnProperty(e))return!1;return!0};H.format=function(i){for(var e=/%./g,u,r,a=0,s=[],n=0;u=e.exec(i);){r=i.substring(n,e.lastIndex-2),r.length>0&&s.push(r),n=e.lastIndex;var l=u[0][1];switch(l){case"s":case"o":a");break;case"%":s.push("%");break;default:s.push("<%"+l+"?>")}}return s.push(i.substring(n)),s.join("")};H.formatNumber=function(i,e,u,r){var a=i,s=isNaN(e=Math.abs(e))?2:e,n=u===void 0?",":u,l=r===void 0?".":r,d=a<0?"-":"",p=parseInt(a=Math.abs(+a||0).toFixed(s),10)+"",h=p.length>3?p.length%3:0;return d+(h?p.substr(0,h)+l:"")+p.substr(h).replace(/(\d{3})(?=\d)/g,"$1"+l)+(s?n+Math.abs(a-p).toFixed(s).slice(2):"")};H.formatSize=function(i){return i>=1073741824?i=H.formatNumber(i/1073741824,2,".","")+" GiB":i>=1048576?i=H.formatNumber(i/1048576,2,".","")+" MiB":i>=1024?i=H.formatNumber(i/1024,0)+" KiB":i=H.formatNumber(i,0)+" bytes",i};H.bytesFromIP=function(i){return i.indexOf(".")!==-1?H.bytesFromIPv4(i):i.indexOf(":")!==-1?H.bytesFromIPv6(i):null};H.bytesFromIPv4=function(i){if(i=i.split("."),i.length!==4)return null;for(var e=H.createBuffer(),u=0;uu[r].end-u[r].start&&(r=u.length-1))}e.push(s)}if(u.length>0){var d=u[r];d.end-d.start>0&&(e.splice(d.start,d.end-d.start+1,""),d.start===0&&e.unshift(""),d.end===7&&e.push(""))}return e.join(":")};H.estimateCores=function(i,e){if(typeof i=="function"&&(e=i,i={}),i=i||{},"cores"in H&&!i.update)return e(null,H.cores);if(typeof navigator<"u"&&"hardwareConcurrency"in navigator&&navigator.hardwareConcurrency>0)return H.cores=navigator.hardwareConcurrency,e(null,H.cores);if(typeof Worker>"u")return H.cores=1,e(null,H.cores);if(typeof Blob>"u")return H.cores=2,e(null,H.cores);var u=URL.createObjectURL(new Blob(["(",function(){self.addEventListener("message",function(n){for(var l=Date.now(),d=l+4;Date.now()m.st&&h.sth.st&&m.st{var Ce=y0();G0();mB.exports=Ce.cipher=Ce.cipher||{};Ce.cipher.algorithms=Ce.cipher.algorithms||{};Ce.cipher.createCipher=function(i,e){var u=i;if(typeof u=="string"&&(u=Ce.cipher.getAlgorithm(u),u&&(u=u())),!u)throw new Error("Unsupported algorithm: "+i);return new Ce.cipher.BlockCipher({algorithm:u,key:e,decrypt:!1})};Ce.cipher.createDecipher=function(i,e){var u=i;if(typeof u=="string"&&(u=Ce.cipher.getAlgorithm(u),u&&(u=u())),!u)throw new Error("Unsupported algorithm: "+i);return new Ce.cipher.BlockCipher({algorithm:u,key:e,decrypt:!0})};Ce.cipher.registerAlgorithm=function(i,e){i=i.toUpperCase(),Ce.cipher.algorithms[i]=e};Ce.cipher.getAlgorithm=function(i){return i=i.toUpperCase(),i in Ce.cipher.algorithms?Ce.cipher.algorithms[i]:null};var rh=Ce.cipher.BlockCipher=function(i){this.algorithm=i.algorithm,this.mode=this.algorithm.mode,this.blockSize=this.mode.blockSize,this._finish=!1,this._input=null,this.output=null,this._op=i.decrypt?this.mode.decrypt:this.mode.encrypt,this._decrypt=i.decrypt,this.algorithm.initialize(i)};rh.prototype.start=function(i){i=i||{};var e={};for(var u in i)e[u]=i[u];e.decrypt=this._decrypt,this._finish=!1,this._input=Ce.util.createBuffer(),this.output=i.output||Ce.util.createBuffer(),this.mode.start(e)};rh.prototype.update=function(i){for(i&&this._input.putBuffer(i);!this._op.call(this.mode,this._input,this.output,this._finish)&&!this._finish;);this._input.compact()};rh.prototype.finish=function(i){i&&(this.mode.name==="ECB"||this.mode.name==="CBC")&&(this.mode.pad=function(u){return i(this.blockSize,u,!1)},this.mode.unpad=function(u){return i(this.blockSize,u,!0)});var e={};return e.decrypt=this._decrypt,e.overflow=this._input.length()%this.blockSize,!(!this._decrypt&&this.mode.pad&&!this.mode.pad(this._input,e)||(this._finish=!0,this.update(),this._decrypt&&this.mode.unpad&&!this.mode.unpad(this.output,e))||this.mode.afterFinish&&!this.mode.afterFinish(this.output,e))}});var ah=v((Jj,BB)=>{var Ie=y0();G0();Ie.cipher=Ie.cipher||{};var b0=BB.exports=Ie.cipher.modes=Ie.cipher.modes||{};b0.ecb=function(i){i=i||{},this.name="ECB",this.cipher=i.cipher,this.blockSize=i.blockSize||16,this._ints=this.blockSize/4,this._inBlock=new Array(this._ints),this._outBlock=new Array(this._ints)};b0.ecb.prototype.start=function(i){};b0.ecb.prototype.encrypt=function(i,e,u){if(i.length()0))return!0;for(var r=0;r0))return!0;for(var r=0;r0)return!1;var u=i.length(),r=i.at(u-1);return r>this.blockSize<<2?!1:(i.truncate(r),!0)};b0.cbc=function(i){i=i||{},this.name="CBC",this.cipher=i.cipher,this.blockSize=i.blockSize||16,this._ints=this.blockSize/4,this._inBlock=new Array(this._ints),this._outBlock=new Array(this._ints)};b0.cbc.prototype.start=function(i){if(i.iv===null){if(!this._prev)throw new Error("Invalid IV parameter.");this._iv=this._prev.slice(0)}else if("iv"in i)this._iv=Vl(i.iv,this.blockSize),this._prev=this._iv.slice(0);else throw new Error("Invalid IV parameter.")};b0.cbc.prototype.encrypt=function(i,e,u){if(i.length()0))return!0;for(var r=0;r0))return!0;for(var r=0;r0)return!1;var u=i.length(),r=i.at(u-1);return r>this.blockSize<<2?!1:(i.truncate(r),!0)};b0.cfb=function(i){i=i||{},this.name="CFB",this.cipher=i.cipher,this.blockSize=i.blockSize||16,this._ints=this.blockSize/4,this._inBlock=null,this._outBlock=new Array(this._ints),this._partialBlock=new Array(this._ints),this._partialOutput=Ie.util.createBuffer(),this._partialBytes=0};b0.cfb.prototype.start=function(i){if(!("iv"in i))throw new Error("Invalid IV parameter.");this._iv=Vl(i.iv,this.blockSize),this._inBlock=this._iv.slice(0),this._partialBytes=0};b0.cfb.prototype.encrypt=function(i,e,u){var r=i.length();if(r===0)return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),this._partialBytes===0&&r>=this.blockSize){for(var a=0;a0&&(s=this.blockSize-s),this._partialOutput.clear();for(var a=0;a0)i.read-=this.blockSize;else for(var a=0;a0&&this._partialOutput.getBytes(this._partialBytes),s>0&&!u)return e.putBytes(this._partialOutput.getBytes(s-this._partialBytes)),this._partialBytes=s,!0;e.putBytes(this._partialOutput.getBytes(r-this._partialBytes)),this._partialBytes=0};b0.cfb.prototype.decrypt=function(i,e,u){var r=i.length();if(r===0)return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),this._partialBytes===0&&r>=this.blockSize){for(var a=0;a0&&(s=this.blockSize-s),this._partialOutput.clear();for(var a=0;a0)i.read-=this.blockSize;else for(var a=0;a0&&this._partialOutput.getBytes(this._partialBytes),s>0&&!u)return e.putBytes(this._partialOutput.getBytes(s-this._partialBytes)),this._partialBytes=s,!0;e.putBytes(this._partialOutput.getBytes(r-this._partialBytes)),this._partialBytes=0};b0.ofb=function(i){i=i||{},this.name="OFB",this.cipher=i.cipher,this.blockSize=i.blockSize||16,this._ints=this.blockSize/4,this._inBlock=null,this._outBlock=new Array(this._ints),this._partialOutput=Ie.util.createBuffer(),this._partialBytes=0};b0.ofb.prototype.start=function(i){if(!("iv"in i))throw new Error("Invalid IV parameter.");this._iv=Vl(i.iv,this.blockSize),this._inBlock=this._iv.slice(0),this._partialBytes=0};b0.ofb.prototype.encrypt=function(i,e,u){var r=i.length();if(i.length()===0)return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),this._partialBytes===0&&r>=this.blockSize){for(var a=0;a0&&(s=this.blockSize-s),this._partialOutput.clear();for(var a=0;a0)i.read-=this.blockSize;else for(var a=0;a0&&this._partialOutput.getBytes(this._partialBytes),s>0&&!u)return e.putBytes(this._partialOutput.getBytes(s-this._partialBytes)),this._partialBytes=s,!0;e.putBytes(this._partialOutput.getBytes(r-this._partialBytes)),this._partialBytes=0};b0.ofb.prototype.decrypt=b0.ofb.prototype.encrypt;b0.ctr=function(i){i=i||{},this.name="CTR",this.cipher=i.cipher,this.blockSize=i.blockSize||16,this._ints=this.blockSize/4,this._inBlock=null,this._outBlock=new Array(this._ints),this._partialOutput=Ie.util.createBuffer(),this._partialBytes=0};b0.ctr.prototype.start=function(i){if(!("iv"in i))throw new Error("Invalid IV parameter.");this._iv=Vl(i.iv,this.blockSize),this._inBlock=this._iv.slice(0),this._partialBytes=0};b0.ctr.prototype.encrypt=function(i,e,u){var r=i.length();if(r===0)return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),this._partialBytes===0&&r>=this.blockSize)for(var a=0;a0&&(s=this.blockSize-s),this._partialOutput.clear();for(var a=0;a0&&(i.read-=this.blockSize),this._partialBytes>0&&this._partialOutput.getBytes(this._partialBytes),s>0&&!u)return e.putBytes(this._partialOutput.getBytes(s-this._partialBytes)),this._partialBytes=s,!0;e.putBytes(this._partialOutput.getBytes(r-this._partialBytes)),this._partialBytes=0}Gl(this._inBlock)};b0.ctr.prototype.decrypt=b0.ctr.prototype.encrypt;b0.gcm=function(i){i=i||{},this.name="GCM",this.cipher=i.cipher,this.blockSize=i.blockSize||16,this._ints=this.blockSize/4,this._inBlock=new Array(this._ints),this._outBlock=new Array(this._ints),this._partialOutput=Ie.util.createBuffer(),this._partialBytes=0,this._R=3774873600};b0.gcm.prototype.start=function(i){if(!("iv"in i))throw new Error("Invalid IV parameter.");var e=Ie.util.createBuffer(i.iv);this._cipherLength=0;var u;if("additionalData"in i?u=Ie.util.createBuffer(i.additionalData):u=Ie.util.createBuffer(),"tagLength"in i?this._tagLength=i.tagLength:this._tagLength=128,this._tag=null,i.decrypt&&(this._tag=Ie.util.createBuffer(i.tag).getBytes(),this._tag.length!==this._tagLength/8))throw new Error("Authentication tag does not match tag length.");this._hashBlock=new Array(this._ints),this.tag=null,this._hashSubkey=new Array(this._ints),this.cipher.encrypt([0,0,0,0],this._hashSubkey),this.componentBits=4,this._m=this.generateHashTable(this._hashSubkey,this.componentBits);var r=e.length();if(r===12)this._j0=[e.getInt32(),e.getInt32(),e.getInt32(),1];else{for(this._j0=[0,0,0,0];e.length()>0;)this._j0=this.ghash(this._hashSubkey,this._j0,[e.getInt32(),e.getInt32(),e.getInt32(),e.getInt32()]);this._j0=this.ghash(this._hashSubkey,this._j0,[0,0].concat(ih(r*8)))}this._inBlock=this._j0.slice(0),Gl(this._inBlock),this._partialBytes=0,u=Ie.util.createBuffer(u),this._aDataLength=ih(u.length()*8);var a=u.length()%this.blockSize;for(a&&u.fillWithByte(0,this.blockSize-a),this._s=[0,0,0,0];u.length()>0;)this._s=this.ghash(this._hashSubkey,this._s,[u.getInt32(),u.getInt32(),u.getInt32(),u.getInt32()])};b0.gcm.prototype.encrypt=function(i,e,u){var r=i.length();if(r===0)return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),this._partialBytes===0&&r>=this.blockSize){for(var a=0;a0&&(s=this.blockSize-s),this._partialOutput.clear();for(var a=0;a0&&this._partialOutput.getBytes(this._partialBytes),s>0&&!u)return i.read-=this.blockSize,e.putBytes(this._partialOutput.getBytes(s-this._partialBytes)),this._partialBytes=s,!0;e.putBytes(this._partialOutput.getBytes(r-this._partialBytes)),this._partialBytes=0}this._s=this.ghash(this._hashSubkey,this._s,this._outBlock),Gl(this._inBlock)};b0.gcm.prototype.decrypt=function(i,e,u){var r=i.length();if(r0))return!0;this.cipher.encrypt(this._inBlock,this._outBlock),Gl(this._inBlock),this._hashBlock[0]=i.getInt32(),this._hashBlock[1]=i.getInt32(),this._hashBlock[2]=i.getInt32(),this._hashBlock[3]=i.getInt32(),this._s=this.ghash(this._hashSubkey,this._s,this._hashBlock);for(var a=0;a0;--r)e[r]=i[r]>>>1|(i[r-1]&1)<<31;e[0]=i[0]>>>1,u&&(e[0]^=this._R)};b0.gcm.prototype.tableMultiply=function(i){for(var e=[0,0,0,0],u=0;u<32;++u){var r=u/8|0,a=i[r]>>>(7-u%8)*4&15,s=this._m[u][a];e[0]^=s[0],e[1]^=s[1],e[2]^=s[2],e[3]^=s[3]}return e};b0.gcm.prototype.ghash=function(i,e,u){return e[0]^=u[0],e[1]^=u[1],e[2]^=u[2],e[3]^=u[3],this.tableMultiply(e)};b0.gcm.prototype.generateHashTable=function(i,e){for(var u=8/e,r=4*u,a=16*u,s=new Array(a),n=0;n>>1,a=new Array(u);a[r]=i.slice(0);for(var s=r>>>1;s>0;)this.pow(a[2*s],a[s]=[]),s>>=1;for(s=2;s4){var u=i;i=Ie.util.createBuffer();for(var r=0;r{var ie=y0();Hl();ah();G0();AB.exports=ie.aes=ie.aes||{};ie.aes.startEncrypting=function(i,e,u,r){var a=ql({key:i,output:u,decrypt:!1,mode:r});return a.start(e),a};ie.aes.createEncryptionCipher=function(i,e){return ql({key:i,output:null,decrypt:!1,mode:e})};ie.aes.startDecrypting=function(i,e,u,r){var a=ql({key:i,output:u,decrypt:!0,mode:r});return a.start(e),a};ie.aes.createDecryptionCipher=function(i,e){return ql({key:i,output:null,decrypt:!0,mode:e})};ie.aes.Algorithm=function(i,e){oh||TB();var u=this;u.name=i,u.mode=new e({blockSize:16,cipher:{encrypt:function(r,a){return nh(u._w,r,a,!1)},decrypt:function(r,a){return nh(u._w,r,a,!0)}}}),u._init=!1};ie.aes.Algorithm.prototype.initialize=function(i){if(!this._init){var e=i.key,u;if(typeof e=="string"&&(e.length===16||e.length===24||e.length===32))e=ie.util.createBuffer(e);else if(ie.util.isArray(e)&&(e.length===16||e.length===24||e.length===32)){u=e,e=ie.util.createBuffer();for(var r=0;r>>2;for(var r=0;r>8^l&255^99,eu[u]=l,sh[l]=u,d=i[l],a=i[u],s=i[a],n=i[s],p=d<<24^l<<16^l<<8^(l^d),h=(a^s^n)<<24^(u^n)<<16^(u^s^n)<<8^(u^a^n);for(var f=0;f<4;++f)ii[f][u]=p,ju[f][l]=h,p=p<<24|p>>>8,h=h<<24|h>>>8;u===0?u=r=1:(u=a^i[i[i[a^n]]],r^=i[i[r]])}}c(TB,"initialize");function _B(i,e){for(var u=i.slice(0),r,a=1,s=u.length,n=s+6+1,l=Ea*n,d=s;d>>16&255]<<24^eu[r>>>8&255]<<16^eu[r&255]<<8^eu[r>>>24]^MB[a]<<24,a++):s>6&&d%s===4&&(r=eu[r>>>24]<<24^eu[r>>>16&255]<<16^eu[r>>>8&255]<<8^eu[r&255]),u[d]=u[d-s]^r;if(e){var p,h=ju[0],f=ju[1],S=ju[2],m=ju[3],O=u.slice(0);l=u.length;for(var d=0,M=l-Ea;d>>24]]^f[eu[p>>>16&255]]^S[eu[p>>>8&255]]^m[eu[p&255]];u=O}return u}c(_B,"_expandKey");function nh(i,e,u,r){var a=i.length/4-1,s,n,l,d,p;r?(s=ju[0],n=ju[1],l=ju[2],d=ju[3],p=sh):(s=ii[0],n=ii[1],l=ii[2],d=ii[3],p=eu);var h,f,S,m,O,M,T;h=e[0]^i[0],f=e[r?3:1]^i[1],S=e[2]^i[2],m=e[r?1:3]^i[3];for(var L=3,I=1;I>>24]^n[f>>>16&255]^l[S>>>8&255]^d[m&255]^i[++L],M=s[f>>>24]^n[S>>>16&255]^l[m>>>8&255]^d[h&255]^i[++L],T=s[S>>>24]^n[m>>>16&255]^l[h>>>8&255]^d[f&255]^i[++L],m=s[m>>>24]^n[h>>>16&255]^l[f>>>8&255]^d[S&255]^i[++L],h=O,f=M,S=T;u[0]=p[h>>>24]<<24^p[f>>>16&255]<<16^p[S>>>8&255]<<8^p[m&255]^i[++L],u[r?3:1]=p[f>>>24]<<24^p[S>>>16&255]<<16^p[m>>>8&255]<<8^p[h&255]^i[++L],u[2]=p[S>>>24]<<24^p[m>>>16&255]<<16^p[h>>>8&255]<<8^p[f&255]^i[++L],u[r?1:3]=p[m>>>24]<<24^p[h>>>16&255]<<16^p[f>>>8&255]<<8^p[S&255]^i[++L]}c(nh,"_updateBlock");function ql(i){i=i||{};var e=(i.mode||"CBC").toUpperCase(),u="AES-"+e,r;i.decrypt?r=ie.cipher.createDecipher(u,i.key):r=ie.cipher.createCipher(u,i.key);var a=r.start;return r.start=function(s,n){var l=null;n instanceof ie.util.ByteBuffer&&(l=n,n={}),n=n||{},n.output=l,n.iv=s,a.call(r,n)},r}c(ql,"_createCipher")});var Er=v((eX,YB)=>{var Rn=y0();Rn.pki=Rn.pki||{};var lh=YB.exports=Rn.pki.oids=Rn.oids=Rn.oids||{};function l0(i,e){lh[i]=e,lh[e]=i}c(l0,"_IN");function J0(i,e){lh[i]=e}c(J0,"_I_");l0("1.2.840.113549.1.1.1","rsaEncryption");l0("1.2.840.113549.1.1.4","md5WithRSAEncryption");l0("1.2.840.113549.1.1.5","sha1WithRSAEncryption");l0("1.2.840.113549.1.1.7","RSAES-OAEP");l0("1.2.840.113549.1.1.8","mgf1");l0("1.2.840.113549.1.1.9","pSpecified");l0("1.2.840.113549.1.1.10","RSASSA-PSS");l0("1.2.840.113549.1.1.11","sha256WithRSAEncryption");l0("1.2.840.113549.1.1.12","sha384WithRSAEncryption");l0("1.2.840.113549.1.1.13","sha512WithRSAEncryption");l0("1.3.101.112","EdDSA25519");l0("1.2.840.10040.4.3","dsa-with-sha1");l0("1.3.14.3.2.7","desCBC");l0("1.3.14.3.2.26","sha1");l0("1.3.14.3.2.29","sha1WithRSASignature");l0("2.16.840.1.101.3.4.2.1","sha256");l0("2.16.840.1.101.3.4.2.2","sha384");l0("2.16.840.1.101.3.4.2.3","sha512");l0("2.16.840.1.101.3.4.2.4","sha224");l0("2.16.840.1.101.3.4.2.5","sha512-224");l0("2.16.840.1.101.3.4.2.6","sha512-256");l0("1.2.840.113549.2.2","md2");l0("1.2.840.113549.2.5","md5");l0("1.2.840.113549.1.7.1","data");l0("1.2.840.113549.1.7.2","signedData");l0("1.2.840.113549.1.7.3","envelopedData");l0("1.2.840.113549.1.7.4","signedAndEnvelopedData");l0("1.2.840.113549.1.7.5","digestedData");l0("1.2.840.113549.1.7.6","encryptedData");l0("1.2.840.113549.1.9.1","emailAddress");l0("1.2.840.113549.1.9.2","unstructuredName");l0("1.2.840.113549.1.9.3","contentType");l0("1.2.840.113549.1.9.4","messageDigest");l0("1.2.840.113549.1.9.5","signingTime");l0("1.2.840.113549.1.9.6","counterSignature");l0("1.2.840.113549.1.9.7","challengePassword");l0("1.2.840.113549.1.9.8","unstructuredAddress");l0("1.2.840.113549.1.9.14","extensionRequest");l0("1.2.840.113549.1.9.20","friendlyName");l0("1.2.840.113549.1.9.21","localKeyId");l0("1.2.840.113549.1.9.22.1","x509Certificate");l0("1.2.840.113549.1.12.10.1.1","keyBag");l0("1.2.840.113549.1.12.10.1.2","pkcs8ShroudedKeyBag");l0("1.2.840.113549.1.12.10.1.3","certBag");l0("1.2.840.113549.1.12.10.1.4","crlBag");l0("1.2.840.113549.1.12.10.1.5","secretBag");l0("1.2.840.113549.1.12.10.1.6","safeContentsBag");l0("1.2.840.113549.1.5.13","pkcs5PBES2");l0("1.2.840.113549.1.5.12","pkcs5PBKDF2");l0("1.2.840.113549.1.12.1.1","pbeWithSHAAnd128BitRC4");l0("1.2.840.113549.1.12.1.2","pbeWithSHAAnd40BitRC4");l0("1.2.840.113549.1.12.1.3","pbeWithSHAAnd3-KeyTripleDES-CBC");l0("1.2.840.113549.1.12.1.4","pbeWithSHAAnd2-KeyTripleDES-CBC");l0("1.2.840.113549.1.12.1.5","pbeWithSHAAnd128BitRC2-CBC");l0("1.2.840.113549.1.12.1.6","pbewithSHAAnd40BitRC2-CBC");l0("1.2.840.113549.2.7","hmacWithSHA1");l0("1.2.840.113549.2.8","hmacWithSHA224");l0("1.2.840.113549.2.9","hmacWithSHA256");l0("1.2.840.113549.2.10","hmacWithSHA384");l0("1.2.840.113549.2.11","hmacWithSHA512");l0("1.2.840.113549.3.7","des-EDE3-CBC");l0("2.16.840.1.101.3.4.1.2","aes128-CBC");l0("2.16.840.1.101.3.4.1.22","aes192-CBC");l0("2.16.840.1.101.3.4.1.42","aes256-CBC");l0("2.5.4.3","commonName");l0("2.5.4.4","surname");l0("2.5.4.5","serialNumber");l0("2.5.4.6","countryName");l0("2.5.4.7","localityName");l0("2.5.4.8","stateOrProvinceName");l0("2.5.4.9","streetAddress");l0("2.5.4.10","organizationName");l0("2.5.4.11","organizationalUnitName");l0("2.5.4.12","title");l0("2.5.4.13","description");l0("2.5.4.15","businessCategory");l0("2.5.4.17","postalCode");l0("2.5.4.42","givenName");l0("1.3.6.1.4.1.311.60.2.1.2","jurisdictionOfIncorporationStateOrProvinceName");l0("1.3.6.1.4.1.311.60.2.1.3","jurisdictionOfIncorporationCountryName");l0("2.16.840.1.113730.1.1","nsCertType");l0("2.16.840.1.113730.1.13","nsComment");J0("2.5.29.1","authorityKeyIdentifier");J0("2.5.29.2","keyAttributes");J0("2.5.29.3","certificatePolicies");J0("2.5.29.4","keyUsageRestriction");J0("2.5.29.5","policyMapping");J0("2.5.29.6","subtreesConstraint");J0("2.5.29.7","subjectAltName");J0("2.5.29.8","issuerAltName");J0("2.5.29.9","subjectDirectoryAttributes");J0("2.5.29.10","basicConstraints");J0("2.5.29.11","nameConstraints");J0("2.5.29.12","policyConstraints");J0("2.5.29.13","basicConstraints");l0("2.5.29.14","subjectKeyIdentifier");l0("2.5.29.15","keyUsage");J0("2.5.29.16","privateKeyUsagePeriod");l0("2.5.29.17","subjectAltName");l0("2.5.29.18","issuerAltName");l0("2.5.29.19","basicConstraints");J0("2.5.29.20","cRLNumber");J0("2.5.29.21","cRLReason");J0("2.5.29.22","expirationDate");J0("2.5.29.23","instructionCode");J0("2.5.29.24","invalidityDate");J0("2.5.29.25","cRLDistributionPoints");J0("2.5.29.26","issuingDistributionPoint");J0("2.5.29.27","deltaCRLIndicator");J0("2.5.29.28","issuingDistributionPoint");J0("2.5.29.29","certificateIssuer");J0("2.5.29.30","nameConstraints");l0("2.5.29.31","cRLDistributionPoints");l0("2.5.29.32","certificatePolicies");J0("2.5.29.33","policyMappings");J0("2.5.29.34","policyConstraints");l0("2.5.29.35","authorityKeyIdentifier");J0("2.5.29.36","policyConstraints");l0("2.5.29.37","extKeyUsage");J0("2.5.29.46","freshestCRL");J0("2.5.29.54","inhibitAnyPolicy");l0("1.3.6.1.4.1.11129.2.4.2","timestampList");l0("1.3.6.1.5.5.7.1.1","authorityInfoAccess");l0("1.3.6.1.5.5.7.3.1","serverAuth");l0("1.3.6.1.5.5.7.3.2","clientAuth");l0("1.3.6.1.5.5.7.3.3","codeSigning");l0("1.3.6.1.5.5.7.3.4","emailProtection");l0("1.3.6.1.5.5.7.3.8","timeStamping")});var Xu=v((tX,gB)=>{var se=y0();G0();Er();var p0=gB.exports=se.asn1=se.asn1||{};p0.Class={UNIVERSAL:0,APPLICATION:64,CONTEXT_SPECIFIC:128,PRIVATE:192};p0.Type={NONE:0,BOOLEAN:1,INTEGER:2,BITSTRING:3,OCTETSTRING:4,NULL:5,OID:6,ODESC:7,EXTERNAL:8,REAL:9,ENUMERATED:10,EMBEDDED:11,UTF8:12,ROID:13,SEQUENCE:16,SET:17,PRINTABLESTRING:19,IA5STRING:22,UTCTIME:23,GENERALIZEDTIME:24,BMPSTRING:30};p0.create=function(i,e,u,r,a){if(se.util.isArray(r)){for(var s=[],n=0;ne){var r=new Error("Too few bytes to parse DER.");throw r.available=i.length(),r.remaining=e,r.requested=u,r}}c(gn,"_checkBufferLength");var tx=c(function(i,e){var u=i.getByte();if(e--,u!==128){var r,a=u&128;if(!a)r=u;else{var s=u&127;gn(i,e,s),r=i.getInt(s<<3)}if(r<0)throw new Error("Negative length: "+r);return r}},"_getValueLength");p0.fromDer=function(i,e){e===void 0&&(e={strict:!0,parseAllBytes:!0,decodeBitStrings:!0}),typeof e=="boolean"&&(e={strict:e,parseAllBytes:!0,decodeBitStrings:!0}),"strict"in e||(e.strict=!0),"parseAllBytes"in e||(e.parseAllBytes=!0),"decodeBitStrings"in e||(e.decodeBitStrings=!0),typeof i=="string"&&(i=se.util.createBuffer(i));var u=i.length(),r=Kl(i,i.length(),0,e);if(e.parseAllBytes&&i.length()!==0){var a=new Error("Unparsed DER bytes remain after ASN.1 parsing.");throw a.byteCount=u,a.remaining=i.length(),a}return r};function Kl(i,e,u,r){var a;gn(i,e,2);var s=i.getByte();e--;var n=s&192,l=s&31;a=i.length();var d=tx(i,e);if(e-=a-i.length(),d!==void 0&&d>e){if(r.strict){var p=new Error("Too few bytes to read ASN.1 value.");throw p.available=i.length(),p.remaining=e,p.requested=d,p}d=e}var h,f,S=(s&32)===32;if(S)if(h=[],d===void 0)for(;;){if(gn(i,e,2),i.bytes(2)==="\0\0"){i.getBytes(2),e-=2;break}a=i.length(),h.push(Kl(i,e,u+1,r)),e-=a-i.length()}else for(;d>0;)a=i.length(),h.push(Kl(i,d,u+1,r)),e-=a-i.length(),d-=a-i.length();if(h===void 0&&n===p0.Class.UNIVERSAL&&l===p0.Type.BITSTRING&&(f=i.bytes(d)),h===void 0&&r.decodeBitStrings&&n===p0.Class.UNIVERSAL&&l===p0.Type.BITSTRING&&d>1){var m=i.read,O=e,M=0;if(l===p0.Type.BITSTRING&&(gn(i,e,1),M=i.getByte(),e--),M===0)try{a=i.length();var T={strict:!0,decodeBitStrings:!0},L=Kl(i,e,u+1,T),I=a-i.length();e-=I,l==p0.Type.BITSTRING&&I++;var N=L.tagClass;I===d&&(N===p0.Class.UNIVERSAL||N===p0.Class.CONTEXT_SPECIFIC)&&(h=[L])}catch{}h===void 0&&(i.read=m,e=O)}if(h===void 0){if(d===void 0){if(r.strict)throw new Error("Non-constructed ASN.1 object of indefinite length.");d=e}if(l===p0.Type.BMPSTRING)for(h="";d>0;d-=2)gn(i,e,2),h+=String.fromCharCode(i.getInt16()),e-=2;else h=i.getBytes(d),e-=d}var D=f===void 0?null:{bitStringContents:f};return p0.create(n,l,S,h,D)}c(Kl,"_fromDer");p0.toDer=function(i){var e=se.util.createBuffer(),u=i.tagClass|i.type,r=se.util.createBuffer(),a=!1;if("bitStringContents"in i&&(a=!0,i.original&&(a=p0.equals(i,i.original))),a)r.putBytes(i.bitStringContents);else if(i.composed){i.constructed?u|=32:r.putByte(0);for(var s=0;s1&&(i.value.charCodeAt(0)===0&&!(i.value.charCodeAt(1)&128)||i.value.charCodeAt(0)===255&&(i.value.charCodeAt(1)&128)===128)?r.putBytes(i.value.substr(1)):r.putBytes(i.value);if(e.putByte(u),r.length()<=127)e.putByte(r.length()&127);else{var n=r.length(),l="";do l+=String.fromCharCode(n&255),n=n>>>8;while(n>0);e.putByte(l.length|128);for(var s=l.length-1;s>=0;--s)e.putByte(l.charCodeAt(s))}return e.putBuffer(r),e};p0.oidToDer=function(i){var e=i.split("."),u=se.util.createBuffer();u.putByte(40*parseInt(e[0],10)+parseInt(e[1],10));for(var r,a,s,n,l=2;l>>7,r||(n|=128),a.push(n),r=!1;while(s>0);for(var d=a.length-1;d>=0;--d)u.putByte(a[d])}return u};p0.derToOid=function(i){var e;typeof i=="string"&&(i=se.util.createBuffer(i));var u=i.getByte();e=Math.floor(u/40)+"."+u%40;for(var r=0;i.length()>0;)u=i.getByte(),r=r<<7,u&128?r+=u&127:(e+="."+(r+u),r=0);return e};p0.utcTimeToDate=function(i){var e=new Date,u=parseInt(i.substr(0,2),10);u=u>=50?1900+u:2e3+u;var r=parseInt(i.substr(2,2),10)-1,a=parseInt(i.substr(4,2),10),s=parseInt(i.substr(6,2),10),n=parseInt(i.substr(8,2),10),l=0;if(i.length>11){var d=i.charAt(10),p=10;d!=="+"&&d!=="-"&&(l=parseInt(i.substr(10,2),10),p+=2)}if(e.setUTCFullYear(u,r,a),e.setUTCHours(s,n,l,0),p&&(d=i.charAt(p),d==="+"||d==="-")){var h=parseInt(i.substr(p+1,2),10),f=parseInt(i.substr(p+4,2),10),S=h*60+f;S*=6e4,d==="+"?e.setTime(+e-S):e.setTime(+e+S)}return e};p0.generalizedTimeToDate=function(i){var e=new Date,u=parseInt(i.substr(0,4),10),r=parseInt(i.substr(4,2),10)-1,a=parseInt(i.substr(6,2),10),s=parseInt(i.substr(8,2),10),n=parseInt(i.substr(10,2),10),l=parseInt(i.substr(12,2),10),d=0,p=0,h=!1;i.charAt(i.length-1)==="Z"&&(h=!0);var f=i.length-5,S=i.charAt(f);if(S==="+"||S==="-"){var m=parseInt(i.substr(f+1,2),10),O=parseInt(i.substr(f+4,2),10);p=m*60+O,p*=6e4,S==="+"&&(p*=-1),h=!0}return i.charAt(14)==="."&&(d=parseFloat(i.substr(14),10)*1e3),h?(e.setUTCFullYear(u,r,a),e.setUTCHours(s,n,l,d),e.setTime(+e+p)):(e.setFullYear(u,r,a),e.setHours(s,n,l,d)),e};p0.dateToUtcTime=function(i){if(typeof i=="string")return i;var e="",u=[];u.push((""+i.getUTCFullYear()).substr(2)),u.push(""+(i.getUTCMonth()+1)),u.push(""+i.getUTCDate()),u.push(""+i.getUTCHours()),u.push(""+i.getUTCMinutes()),u.push(""+i.getUTCSeconds());for(var r=0;r=-128&&i<128)return e.putSignedInt(i,8);if(i>=-32768&&i<32768)return e.putSignedInt(i,16);if(i>=-8388608&&i<8388608)return e.putSignedInt(i,24);if(i>=-2147483648&&i<2147483648)return e.putSignedInt(i,32);var u=new Error("Integer too large; max is 32-bits.");throw u.integer=i,u};p0.derToInteger=function(i){typeof i=="string"&&(i=se.util.createBuffer(i));var e=i.length()*8;if(e>32)throw new Error("Integer too large; max is 32-bits.");return i.getSignedInt(e)};p0.validate=function(i,e,u,r){var a=!1;if((i.tagClass===e.tagClass||typeof e.tagClass>"u")&&(i.type===e.type||typeof e.type>"u"))if(i.constructed===e.constructed||typeof e.constructed>"u"){if(a=!0,e.value&&se.util.isArray(e.value))for(var s=0,n=0;a&&n0&&(r+=` +`);for(var a="",s=0;s1?r+="0x"+se.util.bytesToHex(i.value.slice(1)):r+="(none)",i.value.length>0){var p=i.value.charCodeAt(0);p==1?r+=" (1 unused bit shown)":p>1&&(r+=" ("+p+" unused bits shown)")}}else if(i.type===p0.Type.OCTETSTRING)RB.test(i.value)||(r+="("+i.value+") "),r+="0x"+se.util.bytesToHex(i.value);else if(i.type===p0.Type.UTF8)try{r+=se.util.decodeUtf8(i.value)}catch(h){if(h.message==="URI malformed")r+="0x"+se.util.bytesToHex(i.value)+" (malformed UTF8)";else throw h}else i.type===p0.Type.PRINTABLESTRING||i.type===p0.Type.IA5String?r+=i.value:RB.test(i.value)?r+="0x"+se.util.bytesToHex(i.value):i.value.length===0?r+="[null]":r+=i.value}return r}});var St=v((iX,yB)=>{var Wl=y0();yB.exports=Wl.md=Wl.md||{};Wl.md.algorithms=Wl.md.algorithms||{}});var Ba=v((aX,NB)=>{var Ut=y0();St();G0();var rx=NB.exports=Ut.hmac=Ut.hmac||{};rx.create=function(){var i=null,e=null,u=null,r=null,a={};return a.start=function(s,n){if(s!==null)if(typeof s=="string")if(s=s.toLowerCase(),s in Ut.md.algorithms)e=Ut.md.algorithms[s].create();else throw new Error('Unknown hash algorithm "'+s+'"');else e=s;if(n===null)n=i;else{if(typeof n=="string")n=Ut.util.createBuffer(n);else if(Ut.util.isArray(n)){var l=n;n=Ut.util.createBuffer();for(var d=0;de.blockLength&&(e.start(),e.update(n.bytes()),n=e.digest()),u=Ut.util.createBuffer(),r=Ut.util.createBuffer(),p=n.length();for(var d=0;d{var Ot=y0();St();G0();var IB=xB.exports=Ot.md5=Ot.md5||{};Ot.md.md5=Ot.md.algorithms.md5=IB;IB.create=function(){bB||ix();var i=null,e=Ot.util.createBuffer(),u=new Array(16),r={algorithm:"md5",blockLength:64,digestLength:16,messageLength:0,fullMessageLength:null,messageLengthSize:8};return r.start=function(){r.messageLength=0,r.fullMessageLength=r.messageLength64=[];for(var a=r.messageLengthSize/4,s=0;s>>0,n>>>0];for(var l=r.fullMessageLength.length-1;l>=0;--l)r.fullMessageLength[l]+=n[1],n[1]=n[0]+(r.fullMessageLength[l]/4294967296>>>0),r.fullMessageLength[l]=r.fullMessageLength[l]>>>0,n[0]=n[1]/4294967296>>>0;return e.putBytes(a),CB(i,u,e),(e.read>2048||e.length()===0)&&e.compact(),r},r.digest=function(){var a=Ot.util.createBuffer();a.putBytes(e.bytes());var s=r.fullMessageLength[r.fullMessageLength.length-1]+r.messageLengthSize,n=s&r.blockLength-1;a.putBytes(ch.substr(0,r.blockLength-n));for(var l,d=0,p=r.fullMessageLength.length-1;p>=0;--p)l=r.fullMessageLength[p]*8+d,d=l/4294967296>>>0,a.putInt32Le(l>>>0);var h={h0:i.h0,h1:i.h1,h2:i.h2,h3:i.h3};CB(h,u,a);var f=Ot.util.createBuffer();return f.putInt32Le(h.h0),f.putInt32Le(h.h1),f.putInt32Le(h.h2),f.putInt32Le(h.h3),f},r};var ch=null,jl=null,yn=null,Ma=null,bB=!1;function ix(){ch="\x80",ch+=Ot.util.fillString("\0",64),jl=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,1,6,11,0,5,10,15,4,9,14,3,8,13,2,7,12,5,8,11,14,1,4,7,10,13,0,3,6,9,12,15,2,0,7,14,5,12,3,10,1,8,15,6,13,4,11,2,9],yn=[7,12,17,22,7,12,17,22,7,12,17,22,7,12,17,22,5,9,14,20,5,9,14,20,5,9,14,20,5,9,14,20,4,11,16,23,4,11,16,23,4,11,16,23,4,11,16,23,6,10,15,21,6,10,15,21,6,10,15,21,6,10,15,21],Ma=new Array(64);for(var i=0;i<64;++i)Ma[i]=Math.floor(Math.abs(Math.sin(i+1))*4294967296);bB=!0}c(ix,"_init");function CB(i,e,u){for(var r,a,s,n,l,d,p,h,f=u.length();f>=64;){for(a=i.h0,s=i.h1,n=i.h2,l=i.h3,h=0;h<16;++h)e[h]=u.getInt32Le(),d=l^s&(n^l),r=a+d+Ma[h]+e[h],p=yn[h],a=l,l=n,n=s,s+=r<>>32-p;for(;h<32;++h)d=n^l&(s^n),r=a+d+Ma[h]+e[jl[h]],p=yn[h],a=l,l=n,n=s,s+=r<>>32-p;for(;h<48;++h)d=s^n^l,r=a+d+Ma[h]+e[jl[h]],p=yn[h],a=l,l=n,n=s,s+=r<>>32-p;for(;h<64;++h)d=n^(s|~l),r=a+d+Ma[h]+e[jl[h]],p=yn[h],a=l,l=n,n=s,s+=r<>>32-p;i.h0=i.h0+a|0,i.h1=i.h1+s|0,i.h2=i.h2+n|0,i.h3=i.h3+l|0,f-=64}}c(CB,"_update")});var ai=v((oX,DB)=>{var Jl=y0();G0();var vB=DB.exports=Jl.pem=Jl.pem||{};vB.encode=function(i,e){e=e||{};var u="-----BEGIN "+i.type+`-----\r +`,r;if(i.procType&&(r={name:"Proc-Type",values:[String(i.procType.version),i.procType.type]},u+=Ql(r)),i.contentDomain&&(r={name:"Content-Domain",values:[i.contentDomain]},u+=Ql(r)),i.dekInfo&&(r={name:"DEK-Info",values:[i.dekInfo.algorithm]},i.dekInfo.parameters&&r.values.push(i.dekInfo.parameters),u+=Ql(r)),i.headers)for(var a=0;a65&&n!==-1){var l=e[n];l===","?(++n,e=e.substr(0,n)+`\r + `+e.substr(n)):e=e.substr(0,n)+`\r +`+l+e.substr(n+1),s=a-n-1,n=-1,++a}else(e[a]===" "||e[a]===" "||e[a]===",")&&(n=a);return e}c(Ql,"foldHeader");function ax(i){return i.replace(/^\s+/,"")}c(ax,"ltrim")});var Nn=v((cX,UB)=>{var oe=y0();Hl();ah();G0();UB.exports=oe.des=oe.des||{};oe.des.startEncrypting=function(i,e,u,r){var a=$l({key:i,output:u,decrypt:!1,mode:r||(e===null?"ECB":"CBC")});return a.start(e),a};oe.des.createEncryptionCipher=function(i,e){return $l({key:i,output:null,decrypt:!1,mode:e})};oe.des.startDecrypting=function(i,e,u,r){var a=$l({key:i,output:u,decrypt:!0,mode:r||(e===null?"ECB":"CBC")});return a.start(e),a};oe.des.createDecryptionCipher=function(i,e){return $l({key:i,output:null,decrypt:!0,mode:e})};oe.des.Algorithm=function(i,e){var u=this;u.name=i,u.mode=new e({blockSize:8,cipher:{encrypt:function(r,a){return wB(u._keys,r,a,!1)},decrypt:function(r,a){return wB(u._keys,r,a,!0)}}}),u._init=!1};oe.des.Algorithm.prototype.initialize=function(i){if(!this._init){var e=oe.util.createBuffer(i.key);if(this.name.indexOf("3DES")===0&&e.length()!==24)throw new Error("Invalid Triple-DES key size: "+e.length()*8);this._keys=fx(e),this._init=!0}};Lt("DES-ECB",oe.cipher.modes.ecb);Lt("DES-CBC",oe.cipher.modes.cbc);Lt("DES-CFB",oe.cipher.modes.cfb);Lt("DES-OFB",oe.cipher.modes.ofb);Lt("DES-CTR",oe.cipher.modes.ctr);Lt("3DES-ECB",oe.cipher.modes.ecb);Lt("3DES-CBC",oe.cipher.modes.cbc);Lt("3DES-CFB",oe.cipher.modes.cfb);Lt("3DES-OFB",oe.cipher.modes.ofb);Lt("3DES-CTR",oe.cipher.modes.ctr);function Lt(i,e){var u=c(function(){return new oe.des.Algorithm(i,e)},"factory");oe.cipher.registerAlgorithm(i,u)}c(Lt,"registerAlgorithm");var sx=[16843776,0,65536,16843780,16842756,66564,4,65536,1024,16843776,16843780,1024,16778244,16842756,16777216,4,1028,16778240,16778240,66560,66560,16842752,16842752,16778244,65540,16777220,16777220,65540,0,1028,66564,16777216,65536,16843780,4,16842752,16843776,16777216,16777216,1024,16842756,65536,66560,16777220,1024,4,16778244,66564,16843780,65540,16842752,16778244,16777220,1028,66564,16843776,1028,16778240,16778240,0,65540,66560,0,16842756],nx=[-2146402272,-2147450880,32768,1081376,1048576,32,-2146435040,-2147450848,-2147483616,-2146402272,-2146402304,-2147483648,-2147450880,1048576,32,-2146435040,1081344,1048608,-2147450848,0,-2147483648,32768,1081376,-2146435072,1048608,-2147483616,0,1081344,32800,-2146402304,-2146435072,32800,0,1081376,-2146435040,1048576,-2147450848,-2146435072,-2146402304,32768,-2146435072,-2147450880,32,-2146402272,1081376,32,32768,-2147483648,32800,-2146402304,1048576,-2147483616,1048608,-2147450848,-2147483616,1048608,1081344,0,-2147450880,32800,-2147483648,-2146435040,-2146402272,1081344],ox=[520,134349312,0,134348808,134218240,0,131592,134218240,131080,134217736,134217736,131072,134349320,131080,134348800,520,134217728,8,134349312,512,131584,134348800,134348808,131592,134218248,131584,131072,134218248,8,134349320,512,134217728,134349312,134217728,131080,520,131072,134349312,134218240,0,512,131080,134349320,134218240,134217736,512,0,134348808,134218248,131072,134217728,134349320,8,131592,131584,134217736,134348800,134218248,520,134348800,131592,8,134348808,131584],lx=[8396801,8321,8321,128,8396928,8388737,8388609,8193,0,8396800,8396800,8396929,129,0,8388736,8388609,1,8192,8388608,8396801,128,8388608,8193,8320,8388737,1,8320,8388736,8192,8396928,8396929,129,8388736,8388609,8396800,8396929,129,0,0,8396800,8320,8388736,8388737,1,8396801,8321,8321,128,8396929,129,1,8192,8388609,8193,8396928,8388737,8193,8320,8388608,8396801,128,8388608,8192,8396928],cx=[256,34078976,34078720,1107296512,524288,256,1073741824,34078720,1074266368,524288,33554688,1074266368,1107296512,1107820544,524544,1073741824,33554432,1074266112,1074266112,0,1073742080,1107820800,1107820800,33554688,1107820544,1073742080,0,1107296256,34078976,33554432,1107296256,524544,524288,1107296512,256,33554432,1073741824,34078720,1107296512,1074266368,33554688,1073741824,1107820544,34078976,1074266368,256,33554432,1107820544,1107820800,524544,1107296256,1107820800,34078720,0,1074266112,1107296256,524544,33554688,1073742080,524288,0,1074266112,34078976,1073742080],dx=[536870928,541065216,16384,541081616,541065216,16,541081616,4194304,536887296,4210704,4194304,536870928,4194320,536887296,536870912,16400,0,4194320,536887312,16384,4210688,536887312,16,541065232,541065232,0,4210704,541081600,16400,4210688,541081600,536870912,536887296,16,541065232,4210688,541081616,4194304,16400,536870928,4194304,536887296,536870912,16400,536870928,541081616,4210688,541065216,4210704,541081600,0,541065232,16,16384,541065216,4210704,16384,4194320,536887312,0,541081600,536870912,4194320,536887312],px=[2097152,69206018,67110914,0,2048,67110914,2099202,69208064,69208066,2097152,0,67108866,2,67108864,69206018,2050,67110912,2099202,2097154,67110912,67108866,69206016,69208064,2097154,69206016,2048,2050,69208066,2099200,2,67108864,2099200,67108864,2099200,2097152,67110914,67110914,69206018,69206018,2,2097154,67108864,67110912,2097152,69208064,2050,2099202,69208064,2050,67108866,69208066,69206016,2099200,0,2,69208066,0,2099202,69206016,2048,67108866,67110912,2048,2097154],hx=[268439616,4096,262144,268701760,268435456,268439616,64,268435456,262208,268697600,268701760,266240,268701696,266304,4096,64,268697600,268435520,268439552,4160,266240,262208,268697664,268701696,4160,0,0,268697664,268435520,268439552,266304,262144,266304,262144,268701696,4096,64,268697664,4096,266304,268439552,64,268435520,268697600,268697664,268435456,262144,268439616,0,268701760,262208,268435520,268697600,268439552,268439616,0,268701760,266240,266240,4160,4160,262208,268435456,268701696];function fx(i){for(var e=[0,4,536870912,536870916,65536,65540,536936448,536936452,512,516,536871424,536871428,66048,66052,536936960,536936964],u=[0,1,1048576,1048577,67108864,67108865,68157440,68157441,256,257,1048832,1048833,67109120,67109121,68157696,68157697],r=[0,8,2048,2056,16777216,16777224,16779264,16779272,0,8,2048,2056,16777216,16777224,16779264,16779272],a=[0,2097152,134217728,136314880,8192,2105344,134225920,136323072,131072,2228224,134348800,136445952,139264,2236416,134356992,136454144],s=[0,262144,16,262160,0,262144,16,262160,4096,266240,4112,266256,4096,266240,4112,266256],n=[0,1024,32,1056,0,1024,32,1056,33554432,33555456,33554464,33555488,33554432,33555456,33554464,33555488],l=[0,268435456,524288,268959744,2,268435458,524290,268959746,0,268435456,524288,268959744,2,268435458,524290,268959746],d=[0,65536,2048,67584,536870912,536936448,536872960,536938496,131072,196608,133120,198656,537001984,537067520,537004032,537069568],p=[0,262144,0,262144,2,262146,2,262146,33554432,33816576,33554432,33816576,33554434,33816578,33554434,33816578],h=[0,268435456,8,268435464,0,268435456,8,268435464,1024,268436480,1032,268436488,1024,268436480,1032,268436488],f=[0,32,0,32,1048576,1048608,1048576,1048608,8192,8224,8192,8224,1056768,1056800,1056768,1056800],S=[0,16777216,512,16777728,2097152,18874368,2097664,18874880,67108864,83886080,67109376,83886592,69206016,85983232,69206528,85983744],m=[0,4096,134217728,134221824,524288,528384,134742016,134746112,16,4112,134217744,134221840,524304,528400,134742032,134746128],O=[0,4,256,260,0,4,256,260,1,5,257,261,1,5,257,261],M=i.length()>8?3:1,T=[],L=[0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0],I=0,N,D=0;D>>4^R)&252645135,R^=N,E^=N<<4,N=(R>>>-16^E)&65535,E^=N,R^=N<<-16,N=(E>>>2^R)&858993459,R^=N,E^=N<<2,N=(R>>>-16^E)&65535,E^=N,R^=N<<-16,N=(E>>>1^R)&1431655765,R^=N,E^=N<<1,N=(R>>>8^E)&16711935,E^=N,R^=N<<8,N=(E>>>1^R)&1431655765,R^=N,E^=N<<1,N=E<<8|R>>>20&240,E=R<<24|R<<8&16711680|R>>>8&65280|R>>>24&240,R=N;for(var x=0;x>>26,R=R<<2|R>>>26):(E=E<<1|E>>>27,R=R<<1|R>>>27),E&=-15,R&=-15;var k=e[E>>>28]|u[E>>>24&15]|r[E>>>20&15]|a[E>>>16&15]|s[E>>>12&15]|n[E>>>8&15]|l[E>>>4&15],w=d[R>>>28]|p[R>>>24&15]|h[R>>>20&15]|f[R>>>16&15]|S[R>>>12&15]|m[R>>>8&15]|O[R>>>4&15];N=(w>>>16^k)&65535,T[I++]=k^N,T[I++]=w^N<<16}}return T}c(fx,"_createKeys");function wB(i,e,u,r){var a=i.length===32?3:9,s;a===3?s=r?[30,-2,-2]:[0,32,2]:s=r?[94,62,-2,32,64,2,30,-2,-2]:[0,32,2,62,30,-2,64,96,2];var n,l=e[0],d=e[1];n=(l>>>4^d)&252645135,d^=n,l^=n<<4,n=(l>>>16^d)&65535,d^=n,l^=n<<16,n=(d>>>2^l)&858993459,l^=n,d^=n<<2,n=(d>>>8^l)&16711935,l^=n,d^=n<<8,n=(l>>>1^d)&1431655765,d^=n,l^=n<<1,l=l<<1|l>>>31,d=d<<1|d>>>31;for(var p=0;p>>4|d<<28)^i[S+1];n=l,l=d,d=n^(nx[m>>>24&63]|lx[m>>>16&63]|dx[m>>>8&63]|hx[m&63]|sx[O>>>24&63]|ox[O>>>16&63]|cx[O>>>8&63]|px[O&63])}n=l,l=d,d=n}l=l>>>1|l<<31,d=d>>>1|d<<31,n=(l>>>1^d)&1431655765,d^=n,l^=n<<1,n=(d>>>8^l)&16711935,l^=n,d^=n<<8,n=(d>>>2^l)&858993459,l^=n,d^=n<<2,n=(l>>>16^d)&65535,d^=n,l^=n<<16,n=(l>>>4^d)&252645135,d^=n,l^=n<<4,u[0]=l,u[1]=d}c(wB,"_updateBlock");function $l(i){i=i||{};var e=(i.mode||"CBC").toUpperCase(),u="DES-"+e,r;i.decrypt?r=oe.cipher.createDecipher(u,i.key):r=oe.cipher.createCipher(u,i.key);var a=r.start;return r.start=function(s,n){var l=null;n instanceof oe.util.ByteBuffer&&(l=n,n={}),n=n||{},n.output=l,n.iv=s,a.call(r,n)},r}c($l,"_createCipher")});var zl=v((pX,PB)=>{var uu=y0();Ba();St();G0();var Sx=uu.pkcs5=uu.pkcs5||{},Pt;uu.util.isNodejs&&!uu.options.usePureJavaScript&&(Pt=require("crypto"));PB.exports=uu.pbkdf2=Sx.pbkdf2=function(i,e,u,r,a,s){if(typeof a=="function"&&(s=a,a=null),uu.util.isNodejs&&!uu.options.usePureJavaScript&&Pt.pbkdf2&&(a===null||typeof a!="object")&&(Pt.pbkdf2Sync.length>4||!a||a==="sha1"))return typeof a!="string"&&(a="sha1"),i=Buffer.from(i,"binary"),e=Buffer.from(e,"binary"),s?Pt.pbkdf2Sync.length===4?Pt.pbkdf2(i,e,u,r,function(N,D){if(N)return s(N);s(null,D.toString("binary"))}):Pt.pbkdf2(i,e,u,r,a,function(N,D){if(N)return s(N);s(null,D.toString("binary"))}):Pt.pbkdf2Sync.length===4?Pt.pbkdf2Sync(i,e,u,r).toString("binary"):Pt.pbkdf2Sync(i,e,u,r,a).toString("binary");if((typeof a>"u"||a===null)&&(a="sha1"),typeof a=="string"){if(!(a in uu.md.algorithms))throw new Error("Unknown hash algorithm: "+a);a=uu.md[a].create()}var n=a.digestLength;if(r>4294967295*n){var l=new Error("Derived key is too long.");if(s)return s(l);throw l}var d=Math.ceil(r/n),p=r-(d-1)*n,h=uu.hmac.create();h.start(a,i);var f="",S,m,O;if(!s){for(var M=1;M<=d;++M){h.start(null,null),h.update(e),h.update(uu.util.int32ToBytes(M)),S=O=h.digest().getBytes();for(var T=2;T<=u;++T)h.start(null,null),h.update(O),m=h.digest().getBytes(),S=uu.util.xorBytes(S,m,n),O=m;f+=Md)return s(null,f);h.start(null,null),h.update(e),h.update(uu.util.int32ToBytes(M)),S=O=h.digest().getBytes(),T=2,I()}c(L,"outer");function I(){if(T<=u)return h.start(null,null),h.update(O),m=h.digest().getBytes(),S=uu.util.xorBytes(S,m,n),O=m,++T,uu.util.setImmediate(I);f+=M{var Et=y0();St();G0();var FB=GB.exports=Et.sha256=Et.sha256||{};Et.md.sha256=Et.md.algorithms.sha256=FB;FB.create=function(){HB||Ox();var i=null,e=Et.util.createBuffer(),u=new Array(64),r={algorithm:"sha256",blockLength:64,digestLength:32,messageLength:0,fullMessageLength:null,messageLengthSize:8};return r.start=function(){r.messageLength=0,r.fullMessageLength=r.messageLength64=[];for(var a=r.messageLengthSize/4,s=0;s>>0,n>>>0];for(var l=r.fullMessageLength.length-1;l>=0;--l)r.fullMessageLength[l]+=n[1],n[1]=n[0]+(r.fullMessageLength[l]/4294967296>>>0),r.fullMessageLength[l]=r.fullMessageLength[l]>>>0,n[0]=n[1]/4294967296>>>0;return e.putBytes(a),kB(i,u,e),(e.read>2048||e.length()===0)&&e.compact(),r},r.digest=function(){var a=Et.util.createBuffer();a.putBytes(e.bytes());var s=r.fullMessageLength[r.fullMessageLength.length-1]+r.messageLengthSize,n=s&r.blockLength-1;a.putBytes(dh.substr(0,r.blockLength-n));for(var l,d,p=r.fullMessageLength[0]*8,h=0;h>>0,p+=d,a.putInt32(p>>>0),p=l>>>0;a.putInt32(p);var f={h0:i.h0,h1:i.h1,h2:i.h2,h3:i.h3,h4:i.h4,h5:i.h5,h6:i.h6,h7:i.h7};kB(f,u,a);var S=Et.util.createBuffer();return S.putInt32(f.h0),S.putInt32(f.h1),S.putInt32(f.h2),S.putInt32(f.h3),S.putInt32(f.h4),S.putInt32(f.h5),S.putInt32(f.h6),S.putInt32(f.h7),S},r};var dh=null,HB=!1,VB=null;function Ox(){dh="\x80",dh+=Et.util.fillString("\0",64),VB=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],HB=!0}c(Ox,"_init");function kB(i,e,u){for(var r,a,s,n,l,d,p,h,f,S,m,O,M,T,L,I=u.length();I>=64;){for(p=0;p<16;++p)e[p]=u.getInt32();for(;p<64;++p)r=e[p-2],r=(r>>>17|r<<15)^(r>>>19|r<<13)^r>>>10,a=e[p-15],a=(a>>>7|a<<25)^(a>>>18|a<<14)^a>>>3,e[p]=r+e[p-7]+a+e[p-16]|0;for(h=i.h0,f=i.h1,S=i.h2,m=i.h3,O=i.h4,M=i.h5,T=i.h6,L=i.h7,p=0;p<64;++p)n=(O>>>6|O<<26)^(O>>>11|O<<21)^(O>>>25|O<<7),l=T^O&(M^T),s=(h>>>2|h<<30)^(h>>>13|h<<19)^(h>>>22|h<<10),d=h&f|S&(h^f),r=L+n+l+VB[p]+e[p],a=s+d,L=T,T=M,M=O,O=m+r>>>0,m=S,S=f,f=h,h=r+a>>>0;i.h0=i.h0+h|0,i.h1=i.h1+f|0,i.h2=i.h2+S|0,i.h3=i.h3+m|0,i.h4=i.h4+O|0,i.h5=i.h5+M|0,i.h6=i.h6+T|0,i.h7=i.h7+L|0,I-=64}}c(kB,"_update")});var hh=v((OX,qB)=>{var mt=y0();G0();var Zl=null;mt.util.isNodejs&&!mt.options.usePureJavaScript&&!process.versions["node-webkit"]&&(Zl=require("crypto"));var Lx=qB.exports=mt.prng=mt.prng||{};Lx.create=function(i){for(var e={plugin:i,key:null,seed:null,time:null,reseeds:0,generated:0,keyBytes:""},u=i.md,r=new Array(32),a=0;a<32;++a)r[a]=u.create();e.pools=r,e.pool=0,e.generate=function(p,h){if(!h)return e.generateSync(p);var f=e.plugin.cipher,S=e.plugin.increment,m=e.plugin.formatKey,O=e.plugin.formatSeed,M=mt.util.createBuffer();e.key=null,T();function T(L){if(L)return h(L);if(M.length()>=p)return h(null,M.getBytes(p));if(e.generated>1048575&&(e.key=null),e.key===null)return mt.util.nextTick(function(){s(T)});var I=f(e.key,e.seed);e.generated+=I.length,M.putBytes(I),e.key=m(f(e.key,S(e.seed))),e.seed=O(f(e.key,e.seed)),mt.util.setImmediate(T)}c(T,"generate")},e.generateSync=function(p){var h=e.plugin.cipher,f=e.plugin.increment,S=e.plugin.formatKey,m=e.plugin.formatSeed;e.key=null;for(var O=mt.util.createBuffer();O.length()1048575&&(e.key=null),e.key===null&&n();var M=h(e.key,e.seed);e.generated+=M.length,O.putBytes(M),e.key=S(h(e.key,f(e.seed))),e.seed=m(h(e.key,e.seed))}return O.getBytes(p)};function s(p){if(e.pools[0].messageLength>=32)return l(),p();var h=32-e.pools[0].messageLength<<5;e.seedFile(h,function(f,S){if(f)return p(f);e.collect(S),l(),p()})}c(s,"_reseed");function n(){if(e.pools[0].messageLength>=32)return l();var p=32-e.pools[0].messageLength<<5;e.collect(e.seedFileSync(p)),l()}c(n,"_reseedSync");function l(){e.reseeds=e.reseeds===4294967295?0:e.reseeds+1;var p=e.plugin.md.create();p.update(e.keyBytes);for(var h=1,f=0;f<32;++f)e.reseeds%h===0&&(p.update(e.pools[f].digest().getBytes()),e.pools[f].start()),h=h<<1;e.keyBytes=p.digest().getBytes(),p.start(),p.update(e.keyBytes);var S=p.digest().getBytes();e.key=e.plugin.formatKey(e.keyBytes),e.seed=e.plugin.formatSeed(S),e.generated=0}c(l,"_seed");function d(p){var h=null,f=mt.util.globalScope,S=f.crypto||f.msCrypto;S&&S.getRandomValues&&(h=c(function(E){return S.getRandomValues(E)},"getRandomValues"));var m=mt.util.createBuffer();if(h)for(;m.length()>16),I+=(L&32767)<<16,I+=L>>15,I=(I&2147483647)+(I>>31),D=I&4294967295;for(var T=0;T<3;++T)N=D>>>(T<<3),N^=Math.floor(Math.random()*256),m.putByte(N&255)}return m.getBytes(p)}return c(d,"defaultSeedFile"),Zl?(e.seedFile=function(p,h){Zl.randomBytes(p,function(f,S){if(f)return h(f);h(null,S.toString())})},e.seedFileSync=function(p){return Zl.randomBytes(p).toString()}):(e.seedFile=function(p,h){try{h(null,d(p))}catch(f){h(f)}},e.seedFileSync=d),e.collect=function(p){for(var h=p.length,f=0;f>S&255);e.collect(f)},e.registerWorker=function(p){if(p===self)e.seedFile=function(f,S){function m(O){var M=O.data;M.forge&&M.forge.prng&&(self.removeEventListener("message",m),S(M.forge.prng.err,M.forge.prng.bytes))}c(m,"listener"),self.addEventListener("message",m),self.postMessage({forge:{prng:{needed:f}}})};else{var h=c(function(f){var S=f.data;S.forge&&S.forge.prng&&e.seedFile(S.forge.prng.needed,function(m,O){p.postMessage({forge:{prng:{err:m,bytes:O}}})})},"listener");p.addEventListener("message",h)}},e}});var bu=v((EX,fh)=>{var be=y0();Lr();ph();hh();G0();(function(){if(be.random&&be.random.getBytes){fh.exports=be.random;return}(function(i){var e={},u=new Array(4),r=be.util.createBuffer();e.formatKey=function(f){var S=be.util.createBuffer(f);return f=new Array(4),f[0]=S.getInt32(),f[1]=S.getInt32(),f[2]=S.getInt32(),f[3]=S.getInt32(),be.aes._expandKey(f,!1)},e.formatSeed=function(f){var S=be.util.createBuffer(f);return f=new Array(4),f[0]=S.getInt32(),f[1]=S.getInt32(),f[2]=S.getInt32(),f[3]=S.getInt32(),f},e.cipher=function(f,S){return be.aes._updateBlock(f,S,u,!1),r.putInt32(u[0]),r.putInt32(u[1]),r.putInt32(u[2]),r.putInt32(u[3]),r.getBytes()},e.increment=function(f){return++f[3],f},e.md=be.md.sha256;function a(){var f=be.prng.create(e);return f.getBytes=function(S,m){return f.generate(S,m)},f.getBytesSync=function(S){return f.generate(S)},f}c(a,"spawnPrng");var s=a(),n=null,l=be.util.globalScope,d=l.crypto||l.msCrypto;if(d&&d.getRandomValues&&(n=c(function(f){return d.getRandomValues(f)},"getRandomValues")),be.options.usePureJavaScript||!be.util.isNodejs&&!n){if(typeof window>"u"||window.document,s.collectInt(+new Date,32),typeof navigator<"u"){var p="";for(var h in navigator)try{typeof navigator[h]=="string"&&(p+=navigator[h])}catch{}s.collect(p),p=null}i&&(i().mousemove(function(f){s.collectInt(f.clientX,16),s.collectInt(f.clientY,16)}),i().keypress(function(f){s.collectInt(f.charCode,8)}))}if(!be.random)be.random=s;else for(var h in s)be.random[h]=s[h];be.random.createInstance=a,fh.exports=be.random})(typeof jQuery<"u"?jQuery:null)})()});var Oh=v((BX,jB)=>{var hu=y0();G0();var Sh=[217,120,249,196,25,221,181,237,40,233,253,121,74,160,216,157,198,126,55,131,43,118,83,142,98,76,100,136,68,139,251,162,23,154,89,245,135,179,79,19,97,69,109,141,9,129,125,50,189,143,64,235,134,183,123,11,240,149,33,34,92,107,78,130,84,214,101,147,206,96,178,28,115,86,192,20,167,140,241,220,18,117,202,31,59,190,228,209,66,61,212,48,163,60,182,38,111,191,14,218,70,105,7,87,39,242,29,155,188,148,67,3,248,17,199,246,144,239,62,231,6,195,213,47,200,102,30,215,8,232,234,222,128,82,238,247,132,170,114,172,53,77,106,42,150,26,210,113,90,21,73,116,75,159,208,94,4,24,164,236,194,224,65,110,15,81,203,204,36,145,175,80,161,244,112,57,153,124,58,133,35,184,180,122,252,2,54,91,37,85,151,49,45,93,250,152,227,138,146,174,5,223,41,16,103,108,186,201,211,0,230,207,225,158,168,44,99,22,1,63,88,226,137,169,13,56,52,27,171,51,255,176,187,72,12,95,185,177,205,46,197,243,219,71,229,165,156,119,10,166,32,104,254,127,193,173],KB=[1,2,3,5],Ex=c(function(i,e){return i<>16-e},"rol"),mx=c(function(i,e){return(i&65535)>>e|i<<16-e&65535},"ror");jB.exports=hu.rc2=hu.rc2||{};hu.rc2.expandKey=function(i,e){typeof i=="string"&&(i=hu.util.createBuffer(i)),e=e||128;var u=i,r=i.length(),a=e,s=Math.ceil(a/8),n=255>>(a&7),l;for(l=r;l<128;l++)u.putByte(Sh[u.at(l-1)+u.at(l-r)&255]);for(u.setAt(128-s,Sh[u.at(128-s)&n]),l=127-s;l>=0;l--)u.setAt(l,Sh[u.at(l+1)^u.at(l+s)]);return u};var WB=c(function(i,e,u){var r=!1,a=null,s=null,n=null,l,d,p,h,f=[];for(i=hu.rc2.expandKey(i,e),p=0;p<64;p++)f.push(i.getInt16Le());u?(l=c(function(O){for(p=0;p<4;p++)O[p]+=f[h]+(O[(p+3)%4]&O[(p+2)%4])+(~O[(p+3)%4]&O[(p+1)%4]),O[p]=Ex(O[p],KB[p]),h++},"mixRound"),d=c(function(O){for(p=0;p<4;p++)O[p]+=f[O[(p+3)%4]&63]},"mashRound")):(l=c(function(O){for(p=3;p>=0;p--)O[p]=mx(O[p],KB[p]),O[p]-=f[h]+(O[(p+3)%4]&O[(p+2)%4])+(~O[(p+3)%4]&O[(p+1)%4]),h--},"mixRound"),d=c(function(O){for(p=3;p>=0;p--)O[p]-=f[O[(p+3)%4]&63]},"mashRound"));var S=c(function(O){var M=[];for(p=0;p<4;p++){var T=a.getInt16Le();n!==null&&(u?T^=n.getInt16Le():n.putInt16Le(T)),M.push(T&65535)}h=u?0:63;for(var L=0;L=8;)S([[5,l],[1,d],[6,l],[1,d],[5,l]])},finish:function(O){var M=!0;if(u)if(O)M=O(8,a,!u);else{var T=a.length()===8?8:8-a.length();a.fillWithByte(T,T)}if(M&&(r=!0,m.update()),!u&&(M=a.length()===0,M))if(O)M=O(8,s,!u);else{var L=s.length(),I=s.at(L-1);I>L?M=!1:s.truncate(I)}return M}},m},"createCipher");hu.rc2.startEncrypting=function(i,e,u){var r=hu.rc2.createEncryptionCipher(i,128);return r.start(e,u),r};hu.rc2.createEncryptionCipher=function(i,e){return WB(i,e,!0)};hu.rc2.startDecrypting=function(i,e,u){var r=hu.rc2.createDecryptionCipher(i,128);return r.start(e,u),r};hu.rc2.createDecryptionCipher=function(i,e){return WB(i,e,!1)}});var In=v((TX,uM)=>{var Lh=y0();uM.exports=Lh.jsbn=Lh.jsbn||{};var kt,Bx=0xdeadbeefcafe,XB=(Bx&16777215)==15715070;function i0(i,e,u){this.data=[],i!=null&&(typeof i=="number"?this.fromNumber(i,e,u):e==null&&typeof i!="string"?this.fromString(i,256):this.fromString(i,e))}c(i0,"BigInteger");Lh.jsbn.BigInteger=i0;function q0(){return new i0(null)}c(q0,"nbi");function Mx(i,e,u,r,a,s){for(;--s>=0;){var n=e*this.data[i++]+u.data[r]+a;a=Math.floor(n/67108864),u.data[r++]=n&67108863}return a}c(Mx,"am1");function Tx(i,e,u,r,a,s){for(var n=e&32767,l=e>>15;--s>=0;){var d=this.data[i]&32767,p=this.data[i++]>>15,h=l*d+p*n;d=n*d+((h&32767)<<15)+u.data[r]+(a&1073741823),a=(d>>>30)+(h>>>15)+l*p+(a>>>30),u.data[r++]=d&1073741823}return a}c(Tx,"am2");function QB(i,e,u,r,a,s){for(var n=e&16383,l=e>>14;--s>=0;){var d=this.data[i]&16383,p=this.data[i++]>>14,h=l*d+p*n;d=n*d+((h&16383)<<14)+u.data[r]+a,a=(d>>28)+(h>>14)+l*p,u.data[r++]=d&268435455}return a}c(QB,"am3");typeof navigator>"u"?(i0.prototype.am=QB,kt=28):XB&&navigator.appName=="Microsoft Internet Explorer"?(i0.prototype.am=Tx,kt=30):XB&&navigator.appName!="Netscape"?(i0.prototype.am=Mx,kt=26):(i0.prototype.am=QB,kt=28);i0.prototype.DB=kt;i0.prototype.DM=(1<=0;--e)i.data[e]=this.data[e];i.t=this.t,i.s=this.s}c(Ax,"bnpCopyTo");function Yx(i){this.t=1,this.s=i<0?-1:0,i>0?this.data[0]=i:i<-1?this.data[0]=i+this.DV:this.t=0}c(Yx,"bnpFromInt");function mr(i){var e=q0();return e.fromInt(i),e}c(mr,"nbv");function Rx(i,e){var u;if(e==16)u=4;else if(e==8)u=3;else if(e==256)u=8;else if(e==2)u=1;else if(e==32)u=5;else if(e==4)u=2;else{this.fromRadix(i,e);return}this.t=0,this.s=0;for(var r=i.length,a=!1,s=0;--r>=0;){var n=u==8?i[r]&255:$B(i,r);if(n<0){i.charAt(r)=="-"&&(a=!0);continue}a=!1,s==0?this.data[this.t++]=n:s+u>this.DB?(this.data[this.t-1]|=(n&(1<>this.DB-s):this.data[this.t-1]|=n<=this.DB&&(s-=this.DB)}u==8&&i[0]&128&&(this.s=-1,s>0&&(this.data[this.t-1]|=(1<0&&this.data[this.t-1]==i;)--this.t}c(gx,"bnpClamp");function yx(i){if(this.s<0)return"-"+this.negate().toString(i);var e;if(i==16)e=4;else if(i==8)e=3;else if(i==2)e=1;else if(i==32)e=5;else if(i==4)e=2;else return this.toRadix(i);var u=(1<0)for(l>l)>0&&(a=!0,s=JB(r));n>=0;)l>(l+=this.DB-e)):(r=this.data[n]>>(l-=e)&u,l<=0&&(l+=this.DB,--n)),r>0&&(a=!0),a&&(s+=JB(r));return a?s:"0"}c(yx,"bnToString");function Nx(){var i=q0();return i0.ZERO.subTo(this,i),i}c(Nx,"bnNegate");function Cx(){return this.s<0?this.negate():this}c(Cx,"bnAbs");function Ix(i){var e=this.s-i.s;if(e!=0)return e;var u=this.t;if(e=u-i.t,e!=0)return this.s<0?-e:e;for(;--u>=0;)if((e=this.data[u]-i.data[u])!=0)return e;return 0}c(Ix,"bnCompareTo");function uc(i){var e=1,u;return(u=i>>>16)!=0&&(i=u,e+=16),(u=i>>8)!=0&&(i=u,e+=8),(u=i>>4)!=0&&(i=u,e+=4),(u=i>>2)!=0&&(i=u,e+=2),(u=i>>1)!=0&&(i=u,e+=1),e}c(uc,"nbits");function bx(){return this.t<=0?0:this.DB*(this.t-1)+uc(this.data[this.t-1]^this.s&this.DM)}c(bx,"bnBitLength");function xx(i,e){var u;for(u=this.t-1;u>=0;--u)e.data[u+i]=this.data[u];for(u=i-1;u>=0;--u)e.data[u]=0;e.t=this.t+i,e.s=this.s}c(xx,"bnpDLShiftTo");function vx(i,e){for(var u=i;u=0;--l)e.data[l+s+1]=this.data[l]>>r|n,n=(this.data[l]&a)<=0;--l)e.data[l]=0;e.data[s]=n,e.t=this.t+s+1,e.s=this.s,e.clamp()}c(Dx,"bnpLShiftTo");function wx(i,e){e.s=this.s;var u=Math.floor(i/this.DB);if(u>=this.t){e.t=0;return}var r=i%this.DB,a=this.DB-r,s=(1<>r;for(var n=u+1;n>r;r>0&&(e.data[this.t-u-1]|=(this.s&s)<>=this.DB;if(i.t>=this.DB;r+=this.s}else{for(r+=this.s;u>=this.DB;r-=i.s}e.s=r<0?-1:0,r<-1?e.data[u++]=this.DV+r:r>0&&(e.data[u++]=r),e.t=u,e.clamp()}c(Ux,"bnpSubTo");function Px(i,e){var u=this.abs(),r=i.abs(),a=u.t;for(e.t=a+r.t;--a>=0;)e.data[a]=0;for(a=0;a=0;)i.data[u]=0;for(u=0;u=e.DV&&(i.data[u+e.t]-=e.DV,i.data[u+e.t+1]=1)}i.t>0&&(i.data[i.t-1]+=e.am(u,e.data[u],i,2*u,0,1)),i.s=0,i.clamp()}c(kx,"bnpSquareTo");function Fx(i,e,u){var r=i.abs();if(!(r.t<=0)){var a=this.abs();if(a.t0?(r.lShiftTo(d,s),a.lShiftTo(d,u)):(r.copyTo(s),a.copyTo(u));var p=s.t,h=s.data[p-1];if(h!=0){var f=h*(1<1?s.data[p-2]>>this.F2:0),S=this.FV/f,m=(1<=0&&(u.data[u.t++]=1,u.subTo(L,u)),i0.ONE.dlShiftTo(p,L),L.subTo(s,s);s.t=0;){var I=u.data[--M]==h?this.DM:Math.floor(u.data[M]*S+(u.data[M-1]+O)*m);if((u.data[M]+=s.am(0,I,u,T,0,p))0&&u.rShiftTo(d,u),n<0&&i0.ZERO.subTo(u,u)}}}c(Fx,"bnpDivRemTo");function Hx(i){var e=q0();return this.abs().divRemTo(i,null,e),this.s<0&&e.compareTo(i0.ZERO)>0&&i.subTo(e,e),e}c(Hx,"bnMod");function si(i){this.m=i}c(si,"Classic");function Vx(i){return i.s<0||i.compareTo(this.m)>=0?i.mod(this.m):i}c(Vx,"cConvert");function Gx(i){return i}c(Gx,"cRevert");function qx(i){i.divRemTo(this.m,null,i)}c(qx,"cReduce");function Kx(i,e,u){i.multiplyTo(e,u),this.reduce(u)}c(Kx,"cMulTo");function Wx(i,e){i.squareTo(e),this.reduce(e)}c(Wx,"cSqrTo");si.prototype.convert=Vx;si.prototype.revert=Gx;si.prototype.reduce=qx;si.prototype.mulTo=Kx;si.prototype.sqrTo=Wx;function jx(){if(this.t<1)return 0;var i=this.data[0];if(!(i&1))return 0;var e=i&3;return e=e*(2-(i&15)*e)&15,e=e*(2-(i&255)*e)&255,e=e*(2-((i&65535)*e&65535))&65535,e=e*(2-i*e%this.DV)%this.DV,e>0?this.DV-e:-e}c(jx,"bnpInvDigit");function ni(i){this.m=i,this.mp=i.invDigit(),this.mpl=this.mp&32767,this.mph=this.mp>>15,this.um=(1<0&&this.m.subTo(e,e),e}c(Xx,"montConvert");function Qx(i){var e=q0();return i.copyTo(e),this.reduce(e),e}c(Qx,"montRevert");function Jx(i){for(;i.t<=this.mt2;)i.data[i.t++]=0;for(var e=0;e>15)*this.mpl&this.um)<<15)&i.DM;for(u=e+this.m.t,i.data[u]+=this.m.am(0,r,i,e,0,this.m.t);i.data[u]>=i.DV;)i.data[u]-=i.DV,i.data[++u]++}i.clamp(),i.drShiftTo(this.m.t,i),i.compareTo(this.m)>=0&&i.subTo(this.m,i)}c(Jx,"montReduce");function $x(i,e){i.squareTo(e),this.reduce(e)}c($x,"montSqrTo");function zx(i,e,u){i.multiplyTo(e,u),this.reduce(u)}c(zx,"montMulTo");ni.prototype.convert=Xx;ni.prototype.revert=Qx;ni.prototype.reduce=Jx;ni.prototype.mulTo=zx;ni.prototype.sqrTo=$x;function Zx(){return(this.t>0?this.data[0]&1:this.s)==0}c(Zx,"bnpIsEven");function ev(i,e){if(i>4294967295||i<1)return i0.ONE;var u=q0(),r=q0(),a=e.convert(this),s=uc(i)-1;for(a.copyTo(u);--s>=0;)if(e.sqrTo(u,r),(i&1<0)e.mulTo(r,a,u);else{var n=u;u=r,r=n}return e.revert(u)}c(ev,"bnpExp");function uv(i,e){var u;return i<256||e.isEven()?u=new si(e):u=new ni(e),this.exp(i,u)}c(uv,"bnModPowInt");i0.prototype.copyTo=Ax;i0.prototype.fromInt=Yx;i0.prototype.fromString=Rx;i0.prototype.clamp=gx;i0.prototype.dlShiftTo=xx;i0.prototype.drShiftTo=vx;i0.prototype.lShiftTo=Dx;i0.prototype.rShiftTo=wx;i0.prototype.subTo=Ux;i0.prototype.multiplyTo=Px;i0.prototype.squareTo=kx;i0.prototype.divRemTo=Fx;i0.prototype.invDigit=jx;i0.prototype.isEven=Zx;i0.prototype.exp=ev;i0.prototype.toString=yx;i0.prototype.negate=Nx;i0.prototype.abs=Cx;i0.prototype.compareTo=Ix;i0.prototype.bitLength=bx;i0.prototype.mod=Hx;i0.prototype.modPowInt=uv;i0.ZERO=mr(0);i0.ONE=mr(1);function tv(){var i=q0();return this.copyTo(i),i}c(tv,"bnClone");function rv(){if(this.s<0){if(this.t==1)return this.data[0]-this.DV;if(this.t==0)return-1}else{if(this.t==1)return this.data[0];if(this.t==0)return 0}return(this.data[1]&(1<<32-this.DB)-1)<>24}c(iv,"bnByteValue");function av(){return this.t==0?this.s:this.data[0]<<16>>16}c(av,"bnShortValue");function sv(i){return Math.floor(Math.LN2*this.DB/Math.log(i))}c(sv,"bnpChunkSize");function nv(){return this.s<0?-1:this.t<=0||this.t==1&&this.data[0]<=0?0:1}c(nv,"bnSigNum");function ov(i){if(i==null&&(i=10),this.signum()==0||i<2||i>36)return"0";var e=this.chunkSize(i),u=Math.pow(i,e),r=mr(u),a=q0(),s=q0(),n="";for(this.divRemTo(r,a,s);a.signum()>0;)n=(u+s.intValue()).toString(i).substr(1)+n,a.divRemTo(r,a,s);return s.intValue().toString(i)+n}c(ov,"bnpToRadix");function lv(i,e){this.fromInt(0),e==null&&(e=10);for(var u=this.chunkSize(e),r=Math.pow(e,u),a=!1,s=0,n=0,l=0;l=u&&(this.dMultiply(r),this.dAddOffset(n,0),s=0,n=0)}s>0&&(this.dMultiply(Math.pow(e,s)),this.dAddOffset(n,0)),a&&i0.ZERO.subTo(this,this)}c(lv,"bnpFromRadix");function cv(i,e,u){if(typeof e=="number")if(i<2)this.fromInt(1);else for(this.fromNumber(i,u),this.testBit(i-1)||this.bitwiseTo(i0.ONE.shiftLeft(i-1),mh,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(e);)this.dAddOffset(2,0),this.bitLength()>i&&this.subTo(i0.ONE.shiftLeft(i-1),this);else{var r=new Array,a=i&7;r.length=(i>>3)+1,e.nextBytes(r),a>0?r[0]&=(1<0)for(u>u)!=(this.s&this.DM)>>u&&(e[a++]=r|this.s<=0;)u<8?(r=(this.data[i]&(1<>(u+=this.DB-8)):(r=this.data[i]>>(u-=8)&255,u<=0&&(u+=this.DB,--i)),r&128&&(r|=-256),a==0&&(this.s&128)!=(r&128)&&++a,(a>0||r!=this.s)&&(e[a++]=r);return e}c(dv,"bnToByteArray");function pv(i){return this.compareTo(i)==0}c(pv,"bnEquals");function hv(i){return this.compareTo(i)<0?this:i}c(hv,"bnMin");function fv(i){return this.compareTo(i)>0?this:i}c(fv,"bnMax");function Sv(i,e,u){var r,a,s=Math.min(i.t,this.t);for(r=0;r>=16,e+=16),i&255||(i>>=8,e+=8),i&15||(i>>=4,e+=4),i&3||(i>>=2,e+=2),i&1||++e,e}c(Av,"lbit");function Yv(){for(var i=0;i=this.t?this.s!=0:(this.data[e]&1<>=this.DB;if(i.t>=this.DB;r+=this.s}else{for(r+=this.s;u>=this.DB;r+=i.s}e.s=r<0?-1:0,r>0?e.data[u++]=r:r<-1&&(e.data[u++]=this.DV+r),e.t=u,e.clamp()}c(xv,"bnpAddTo");function vv(i){var e=q0();return this.addTo(i,e),e}c(vv,"bnAdd");function Dv(i){var e=q0();return this.subTo(i,e),e}c(Dv,"bnSubtract");function wv(i){var e=q0();return this.multiplyTo(i,e),e}c(wv,"bnMultiply");function Uv(i){var e=q0();return this.divRemTo(i,e,null),e}c(Uv,"bnDivide");function Pv(i){var e=q0();return this.divRemTo(i,null,e),e}c(Pv,"bnRemainder");function kv(i){var e=q0(),u=q0();return this.divRemTo(i,e,u),new Array(e,u)}c(kv,"bnDivideAndRemainder");function Fv(i){this.data[this.t]=this.am(0,i-1,this,0,0,this.t),++this.t,this.clamp()}c(Fv,"bnpDMultiply");function Hv(i,e){if(i!=0){for(;this.t<=e;)this.data[this.t++]=0;for(this.data[e]+=i;this.data[e]>=this.DV;)this.data[e]-=this.DV,++e>=this.t&&(this.data[this.t++]=0),++this.data[e]}}c(Hv,"bnpDAddOffset");function Cn(){}c(Cn,"NullExp");function eM(i){return i}c(eM,"nNop");function Vv(i,e,u){i.multiplyTo(e,u)}c(Vv,"nMulTo");function Gv(i,e){i.squareTo(e)}c(Gv,"nSqrTo");Cn.prototype.convert=eM;Cn.prototype.revert=eM;Cn.prototype.mulTo=Vv;Cn.prototype.sqrTo=Gv;function qv(i){return this.exp(i,new Cn)}c(qv,"bnPow");function Kv(i,e,u){var r=Math.min(this.t+i.t,e);for(u.s=0,u.t=r;r>0;)u.data[--r]=0;var a;for(a=u.t-this.t;r=0;)u.data[r]=0;for(r=Math.max(e-this.t,0);r2*this.m.t)return i.mod(this.m);if(i.compareTo(this.m)<0)return i;var e=q0();return i.copyTo(e),this.reduce(e),e}c(jv,"barrettConvert");function Xv(i){return i}c(Xv,"barrettRevert");function Qv(i){for(i.drShiftTo(this.m.t-1,this.r2),i.t>this.m.t+1&&(i.t=this.m.t+1,i.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);i.compareTo(this.r2)<0;)i.dAddOffset(1,this.m.t+1);for(i.subTo(this.r2,i);i.compareTo(this.m)>=0;)i.subTo(this.m,i)}c(Qv,"barrettReduce");function Jv(i,e){i.squareTo(e),this.reduce(e)}c(Jv,"barrettSqrTo");function $v(i,e,u){i.multiplyTo(e,u),this.reduce(u)}c($v,"barrettMulTo");_a.prototype.convert=jv;_a.prototype.revert=Xv;_a.prototype.reduce=Qv;_a.prototype.mulTo=$v;_a.prototype.sqrTo=Jv;function zv(i,e){var u=i.bitLength(),r,a=mr(1),s;if(u<=0)return a;u<18?r=1:u<48?r=3:u<144?r=4:u<768?r=5:r=6,u<8?s=new si(e):e.isEven()?s=new _a(e):s=new ni(e);var n=new Array,l=3,d=r-1,p=(1<1){var h=q0();for(s.sqrTo(n[1],h);l<=p;)n[l]=q0(),s.mulTo(h,n[l-2],n[l]),l+=2}var f=i.t-1,S,m=!0,O=q0(),M;for(u=uc(i.data[f])-1;f>=0;){for(u>=d?S=i.data[f]>>u-d&p:(S=(i.data[f]&(1<0&&(S|=i.data[f-1]>>this.DB+u-d)),l=r;!(S&1);)S>>=1,--l;if((u-=l)<0&&(u+=this.DB,--f),m)n[S].copyTo(a),m=!1;else{for(;l>1;)s.sqrTo(a,O),s.sqrTo(O,a),l-=2;l>0?s.sqrTo(a,O):(M=a,a=O,O=M),s.mulTo(O,n[S],a)}for(;f>=0&&!(i.data[f]&1<0&&(e.rShiftTo(s,e),u.rShiftTo(s,u));e.signum()>0;)(a=e.getLowestSetBit())>0&&e.rShiftTo(a,e),(a=u.getLowestSetBit())>0&&u.rShiftTo(a,u),e.compareTo(u)>=0?(e.subTo(u,e),e.rShiftTo(1,e)):(u.subTo(e,u),u.rShiftTo(1,u));return s>0&&u.lShiftTo(s,u),u}c(Zv,"bnGCD");function eD(i){if(i<=0)return 0;var e=this.DV%i,u=this.s<0?i-1:0;if(this.t>0)if(e==0)u=this.data[0]%i;else for(var r=this.t-1;r>=0;--r)u=(e*u+this.data[r])%i;return u}c(eD,"bnpModInt");function uD(i){var e=i.isEven();if(this.isEven()&&e||i.signum()==0)return i0.ZERO;for(var u=i.clone(),r=this.clone(),a=mr(1),s=mr(0),n=mr(0),l=mr(1);u.signum()!=0;){for(;u.isEven();)u.rShiftTo(1,u),e?((!a.isEven()||!s.isEven())&&(a.addTo(this,a),s.subTo(i,s)),a.rShiftTo(1,a)):s.isEven()||s.subTo(i,s),s.rShiftTo(1,s);for(;r.isEven();)r.rShiftTo(1,r),e?((!n.isEven()||!l.isEven())&&(n.addTo(this,n),l.subTo(i,l)),n.rShiftTo(1,n)):l.isEven()||l.subTo(i,l),l.rShiftTo(1,l);u.compareTo(r)>=0?(u.subTo(r,u),e&&a.subTo(n,a),s.subTo(l,s)):(r.subTo(u,r),e&&n.subTo(a,n),l.subTo(s,l))}if(r.compareTo(i0.ONE)!=0)return i0.ZERO;if(l.compareTo(i)>=0)return l.subtract(i);if(l.signum()<0)l.addTo(i,l);else return l;return l.signum()<0?l.add(i):l}c(uD,"bnModInverse");var Qu=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509],tD=(1<<26)/Qu[Qu.length-1];function rD(i){var e,u=this.abs();if(u.t==1&&u.data[0]<=Qu[Qu.length-1]){for(e=0;e=0);var l=s.modPow(r,this);if(l.compareTo(i0.ONE)!=0&&l.compareTo(e)!=0){for(var d=1;d++{var Bt=y0();St();G0();var rM=aM.exports=Bt.sha1=Bt.sha1||{};Bt.md.sha1=Bt.md.algorithms.sha1=rM;rM.create=function(){iM||sD();var i=null,e=Bt.util.createBuffer(),u=new Array(80),r={algorithm:"sha1",blockLength:64,digestLength:20,messageLength:0,fullMessageLength:null,messageLengthSize:8};return r.start=function(){r.messageLength=0,r.fullMessageLength=r.messageLength64=[];for(var a=r.messageLengthSize/4,s=0;s>>0,n>>>0];for(var l=r.fullMessageLength.length-1;l>=0;--l)r.fullMessageLength[l]+=n[1],n[1]=n[0]+(r.fullMessageLength[l]/4294967296>>>0),r.fullMessageLength[l]=r.fullMessageLength[l]>>>0,n[0]=n[1]/4294967296>>>0;return e.putBytes(a),tM(i,u,e),(e.read>2048||e.length()===0)&&e.compact(),r},r.digest=function(){var a=Bt.util.createBuffer();a.putBytes(e.bytes());var s=r.fullMessageLength[r.fullMessageLength.length-1]+r.messageLengthSize,n=s&r.blockLength-1;a.putBytes(Bh.substr(0,r.blockLength-n));for(var l,d,p=r.fullMessageLength[0]*8,h=0;h>>0,p+=d,a.putInt32(p>>>0),p=l>>>0;a.putInt32(p);var f={h0:i.h0,h1:i.h1,h2:i.h2,h3:i.h3,h4:i.h4};tM(f,u,a);var S=Bt.util.createBuffer();return S.putInt32(f.h0),S.putInt32(f.h1),S.putInt32(f.h2),S.putInt32(f.h3),S.putInt32(f.h4),S},r};var Bh=null,iM=!1;function sD(){Bh="\x80",Bh+=Bt.util.fillString("\0",64),iM=!0}c(sD,"_init");function tM(i,e,u){for(var r,a,s,n,l,d,p,h,f=u.length();f>=64;){for(a=i.h0,s=i.h1,n=i.h2,l=i.h3,d=i.h4,h=0;h<16;++h)r=u.getInt32(),e[h]=r,p=l^s&(n^l),r=(a<<5|a>>>27)+p+d+1518500249+r,d=l,l=n,n=(s<<30|s>>>2)>>>0,s=a,a=r;for(;h<20;++h)r=e[h-3]^e[h-8]^e[h-14]^e[h-16],r=r<<1|r>>>31,e[h]=r,p=l^s&(n^l),r=(a<<5|a>>>27)+p+d+1518500249+r,d=l,l=n,n=(s<<30|s>>>2)>>>0,s=a,a=r;for(;h<32;++h)r=e[h-3]^e[h-8]^e[h-14]^e[h-16],r=r<<1|r>>>31,e[h]=r,p=s^n^l,r=(a<<5|a>>>27)+p+d+1859775393+r,d=l,l=n,n=(s<<30|s>>>2)>>>0,s=a,a=r;for(;h<40;++h)r=e[h-6]^e[h-16]^e[h-28]^e[h-32],r=r<<2|r>>>30,e[h]=r,p=s^n^l,r=(a<<5|a>>>27)+p+d+1859775393+r,d=l,l=n,n=(s<<30|s>>>2)>>>0,s=a,a=r;for(;h<60;++h)r=e[h-6]^e[h-16]^e[h-28]^e[h-32],r=r<<2|r>>>30,e[h]=r,p=s&n|l&(s^n),r=(a<<5|a>>>27)+p+d+2400959708+r,d=l,l=n,n=(s<<30|s>>>2)>>>0,s=a,a=r;for(;h<80;++h)r=e[h-6]^e[h-16]^e[h-28]^e[h-32],r=r<<2|r>>>30,e[h]=r,p=s^n^l,r=(a<<5|a>>>27)+p+d+3395469782+r,d=l,l=n,n=(s<<30|s>>>2)>>>0,s=a,a=r;i.h0=i.h0+a|0,i.h1=i.h1+s|0,i.h2=i.h2+n|0,i.h3=i.h3+l|0,i.h4=i.h4+d|0,f-=64}}c(tM,"_update")});var Mh=v((RX,nM)=>{var Mt=y0();G0();bu();Aa();var sM=nM.exports=Mt.pkcs1=Mt.pkcs1||{};sM.encode_rsa_oaep=function(i,e,u){var r,a,s,n;typeof u=="string"?(r=u,a=arguments[3]||void 0,s=arguments[4]||void 0):u&&(r=u.label||void 0,a=u.seed||void 0,s=u.md||void 0,u.mgf1&&u.mgf1.md&&(n=u.mgf1.md)),s?s.start():s=Mt.md.sha1.create(),n||(n=s);var l=Math.ceil(i.n.bitLength()/8),d=l-2*s.digestLength-2;if(e.length>d){var p=new Error("RSAES-OAEP input message length is too long.");throw p.length=e.length,p.maxLength=d,p}r||(r=""),s.update(r,"raw");for(var h=s.digest(),f="",S=d-e.length,m=0;m>24&255,s>>16&255,s>>8&255,s&255);u.start(),u.update(i+n),r+=u.digest().getBytes()}return r.substring(0,e)}c(tc,"rsa_mgf1")});var _h=v((yX,Th)=>{var Br=y0();G0();In();bu();(function(){if(Br.prime){Th.exports=Br.prime;return}var i=Th.exports=Br.prime=Br.prime||{},e=Br.jsbn.BigInteger,u=[6,4,2,4,2,4,6,2],r=new e(null);r.fromInt(30);var a=c(function(f,S){return f|S},"op_or");i.generateProbablePrime=function(f,S,m){typeof S=="function"&&(m=S,S={}),S=S||{};var O=S.algorithm||"PRIMEINC";typeof O=="string"&&(O={name:O}),O.options=O.options||{};var M=S.prng||Br.random,T={nextBytes:function(L){for(var I=M.getBytesSync(L.length),N=0;NS&&(f=p(S,m)),f.isProbablePrime(M))return L(null,f);f.dAddOffset(u[O++%8],0)}while(T<0||+new Date-I"u")return n(f,S,m,O);var M=p(f,S),T=m.workers,L=m.workLoad||100,I=L*30/8,N=m.workerScript||"forge/prime.worker.js";if(T===-1)return Br.util.estimateCores(function(E,R){E&&(R=2),T=R-1,D()});D();function D(){T=Math.max(1,T);for(var E=[],R=0;Rf&&(M=p(f,S));var s0=M.toString(16);j.target.postMessage({hex:s0,workLoad:L}),M.dAddOffset(I,0)}}c(w,"workerMessage")}c(D,"generate")}c(d,"primeincFindPrimeWithWorkers");function p(f,S){var m=new e(f,S),O=f-1;return m.testBit(O)||m.bitwiseTo(e.ONE.shiftLeft(O),a,m),m.dAddOffset(31-m.mod(r).byteValue(),0),m}c(p,"generateRandom");function h(f){return f<=100?27:f<=150?18:f<=200?15:f<=250?12:f<=300?9:f<=350?8:f<=400?7:f<=500?6:f<=600?5:f<=800?4:f<=1250?3:2}c(h,"getMillerRabinTests")})()});var bn=v((CX,fM)=>{var m0=y0();Xu();In();Er();Mh();_h();bu();G0();typeof k0>"u"&&(k0=m0.jsbn.BigInteger);var k0,Ah=m0.util.isNodejs?require("crypto"):null,X=m0.asn1,vu=m0.util;m0.pki=m0.pki||{};fM.exports=m0.pki.rsa=m0.rsa=m0.rsa||{};var A0=m0.pki,nD=[6,4,2,4,2,4,6,2],oD={name:"PrivateKeyInfo",tagClass:X.Class.UNIVERSAL,type:X.Type.SEQUENCE,constructed:!0,value:[{name:"PrivateKeyInfo.version",tagClass:X.Class.UNIVERSAL,type:X.Type.INTEGER,constructed:!1,capture:"privateKeyVersion"},{name:"PrivateKeyInfo.privateKeyAlgorithm",tagClass:X.Class.UNIVERSAL,type:X.Type.SEQUENCE,constructed:!0,value:[{name:"AlgorithmIdentifier.algorithm",tagClass:X.Class.UNIVERSAL,type:X.Type.OID,constructed:!1,capture:"privateKeyOid"}]},{name:"PrivateKeyInfo",tagClass:X.Class.UNIVERSAL,type:X.Type.OCTETSTRING,constructed:!1,capture:"privateKey"}]},lD={name:"RSAPrivateKey",tagClass:X.Class.UNIVERSAL,type:X.Type.SEQUENCE,constructed:!0,value:[{name:"RSAPrivateKey.version",tagClass:X.Class.UNIVERSAL,type:X.Type.INTEGER,constructed:!1,capture:"privateKeyVersion"},{name:"RSAPrivateKey.modulus",tagClass:X.Class.UNIVERSAL,type:X.Type.INTEGER,constructed:!1,capture:"privateKeyModulus"},{name:"RSAPrivateKey.publicExponent",tagClass:X.Class.UNIVERSAL,type:X.Type.INTEGER,constructed:!1,capture:"privateKeyPublicExponent"},{name:"RSAPrivateKey.privateExponent",tagClass:X.Class.UNIVERSAL,type:X.Type.INTEGER,constructed:!1,capture:"privateKeyPrivateExponent"},{name:"RSAPrivateKey.prime1",tagClass:X.Class.UNIVERSAL,type:X.Type.INTEGER,constructed:!1,capture:"privateKeyPrime1"},{name:"RSAPrivateKey.prime2",tagClass:X.Class.UNIVERSAL,type:X.Type.INTEGER,constructed:!1,capture:"privateKeyPrime2"},{name:"RSAPrivateKey.exponent1",tagClass:X.Class.UNIVERSAL,type:X.Type.INTEGER,constructed:!1,capture:"privateKeyExponent1"},{name:"RSAPrivateKey.exponent2",tagClass:X.Class.UNIVERSAL,type:X.Type.INTEGER,constructed:!1,capture:"privateKeyExponent2"},{name:"RSAPrivateKey.coefficient",tagClass:X.Class.UNIVERSAL,type:X.Type.INTEGER,constructed:!1,capture:"privateKeyCoefficient"}]},cD={name:"RSAPublicKey",tagClass:X.Class.UNIVERSAL,type:X.Type.SEQUENCE,constructed:!0,value:[{name:"RSAPublicKey.modulus",tagClass:X.Class.UNIVERSAL,type:X.Type.INTEGER,constructed:!1,capture:"publicKeyModulus"},{name:"RSAPublicKey.exponent",tagClass:X.Class.UNIVERSAL,type:X.Type.INTEGER,constructed:!1,capture:"publicKeyExponent"}]},dD=m0.pki.rsa.publicKeyValidator={name:"SubjectPublicKeyInfo",tagClass:X.Class.UNIVERSAL,type:X.Type.SEQUENCE,constructed:!0,captureAsn1:"subjectPublicKeyInfo",value:[{name:"SubjectPublicKeyInfo.AlgorithmIdentifier",tagClass:X.Class.UNIVERSAL,type:X.Type.SEQUENCE,constructed:!0,value:[{name:"AlgorithmIdentifier.algorithm",tagClass:X.Class.UNIVERSAL,type:X.Type.OID,constructed:!1,capture:"publicKeyOid"}]},{name:"SubjectPublicKeyInfo.subjectPublicKey",tagClass:X.Class.UNIVERSAL,type:X.Type.BITSTRING,constructed:!1,value:[{name:"SubjectPublicKeyInfo.subjectPublicKey.RSAPublicKey",tagClass:X.Class.UNIVERSAL,type:X.Type.SEQUENCE,constructed:!0,optional:!0,captureAsn1:"rsaPublicKey"}]}]},pD={name:"DigestInfo",tagClass:X.Class.UNIVERSAL,type:X.Type.SEQUENCE,constructed:!0,value:[{name:"DigestInfo.DigestAlgorithm",tagClass:X.Class.UNIVERSAL,type:X.Type.SEQUENCE,constructed:!0,value:[{name:"DigestInfo.DigestAlgorithm.algorithmIdentifier",tagClass:X.Class.UNIVERSAL,type:X.Type.OID,constructed:!1,capture:"algorithmIdentifier"},{name:"DigestInfo.DigestAlgorithm.parameters",tagClass:X.Class.UNIVERSAL,type:X.Type.NULL,capture:"parameters",optional:!0,constructed:!1}]},{name:"DigestInfo.digest",tagClass:X.Class.UNIVERSAL,type:X.Type.OCTETSTRING,constructed:!1,capture:"digest"}]},hD=c(function(i){var e;if(i.algorithm in A0.oids)e=A0.oids[i.algorithm];else{var u=new Error("Unknown message digest algorithm.");throw u.algorithm=i.algorithm,u}var r=X.oidToDer(e).getBytes(),a=X.create(X.Class.UNIVERSAL,X.Type.SEQUENCE,!0,[]),s=X.create(X.Class.UNIVERSAL,X.Type.SEQUENCE,!0,[]);s.value.push(X.create(X.Class.UNIVERSAL,X.Type.OID,!1,r)),s.value.push(X.create(X.Class.UNIVERSAL,X.Type.NULL,!1,""));var n=X.create(X.Class.UNIVERSAL,X.Type.OCTETSTRING,!1,i.digest().getBytes());return a.value.push(s),a.value.push(n),X.toDer(a).getBytes()},"emsaPkcs1v15encode"),pM=c(function(i,e,u){if(u)return i.modPow(e.e,e.n);if(!e.p||!e.q)return i.modPow(e.d,e.n);e.dP||(e.dP=e.d.mod(e.p.subtract(k0.ONE))),e.dQ||(e.dQ=e.d.mod(e.q.subtract(k0.ONE))),e.qInv||(e.qInv=e.q.modInverse(e.p));var r;do r=new k0(m0.util.bytesToHex(m0.random.getBytes(e.n.bitLength()/8)),16);while(r.compareTo(e.n)>=0||!r.gcd(e.n).equals(k0.ONE));i=i.multiply(r.modPow(e.e,e.n)).mod(e.n);for(var a=i.mod(e.p).modPow(e.dP,e.p),s=i.mod(e.q).modPow(e.dQ,e.q);a.compareTo(s)<0;)a=a.add(e.p);var n=a.subtract(s).multiply(e.qInv).mod(e.p).multiply(e.q).add(s);return n=n.multiply(r.modInverse(e.n)).mod(e.n),n},"_modPow");A0.rsa.encrypt=function(i,e,u){var r=u,a,s=Math.ceil(e.n.bitLength()/8);u!==!1&&u!==!0?(r=u===2,a=hM(i,e,u)):(a=m0.util.createBuffer(),a.putBytes(i));for(var n=new k0(a.toHex(),16),l=pM(n,e,r),d=l.toString(16),p=m0.util.createBuffer(),h=s-Math.ceil(d.length/2);h>0;)p.putByte(0),--h;return p.putBytes(m0.util.hexToBytes(d)),p.getBytes()};A0.rsa.decrypt=function(i,e,u,r){var a=Math.ceil(e.n.bitLength()/8);if(i.length!==a){var s=new Error("Encrypted message length is invalid.");throw s.length=i.length,s.expected=a,s}var n=new k0(m0.util.createBuffer(i).toHex(),16);if(n.compareTo(e.n)>=0)throw new Error("Encrypted message is invalid.");for(var l=pM(n,e,u),d=l.toString(16),p=m0.util.createBuffer(),h=a-Math.ceil(d.length/2);h>0;)p.putByte(0),--h;return p.putBytes(m0.util.hexToBytes(d)),r!==!1?rc(p.getBytes(),e,u):p.getBytes()};A0.rsa.createKeyPairGenerationState=function(i,e,u){typeof i=="string"&&(i=parseInt(i,10)),i=i||2048,u=u||{};var r=u.prng||m0.random,a={nextBytes:function(l){for(var d=r.getBytesSync(l.length),p=0;p>1,pBits:i-(i>>1),pqState:0,num:null,keys:null},n.e.fromInt(n.eInt);else throw new Error("Invalid key generation algorithm: "+s);return n};A0.rsa.stepKeyPairGenerationState=function(i,e){"algorithm"in i||(i.algorithm="PRIMEINC");var u=new k0(null);u.fromInt(30);for(var r=0,a=c(function(f,S){return f|S},"op_or"),s=+new Date,n,l=0;i.keys===null&&(e<=0||ld?i.pqState=0:i.num.isProbablePrime(SD(i.num.bitLength()))?++i.pqState:i.num.dAddOffset(nD[r++%8],0):i.pqState===2?i.pqState=i.num.subtract(k0.ONE).gcd(i.e).compareTo(k0.ONE)===0?3:0:i.pqState===3&&(i.pqState=0,i.p===null?i.p=i.num:i.q=i.num,i.p!==null&&i.q!==null&&++i.state,i.num=null)}else if(i.state===1)i.p.compareTo(i.q)<0&&(i.num=i.p,i.p=i.q,i.q=i.num),++i.state;else if(i.state===2)i.p1=i.p.subtract(k0.ONE),i.q1=i.q.subtract(k0.ONE),i.phi=i.p1.multiply(i.q1),++i.state;else if(i.state===3)i.phi.gcd(i.e).compareTo(k0.ONE)===0?++i.state:(i.p=null,i.q=null,i.state=0);else if(i.state===4)i.n=i.p.multiply(i.q),i.n.bitLength()===i.bits?++i.state:(i.q=null,i.state=0);else if(i.state===5){var h=i.e.modInverse(i.phi);i.keys={privateKey:A0.rsa.setPrivateKey(i.n,i.e,h,i.p,i.q,h.mod(i.p1),h.mod(i.q1),i.q.modInverse(i.p)),publicKey:A0.rsa.setPublicKey(i.n,i.e)}}n=+new Date,l+=n-s,s=n}return i.keys!==null};A0.rsa.generateKeyPair=function(i,e,u,r){if(arguments.length===1?typeof i=="object"?(u=i,i=void 0):typeof i=="function"&&(r=i,i=void 0):arguments.length===2?typeof i=="number"?typeof e=="function"?(r=e,e=void 0):typeof e!="number"&&(u=e,e=void 0):(u=i,r=e,i=void 0,e=void 0):arguments.length===3&&(typeof e=="number"?typeof u=="function"&&(r=u,u=void 0):(r=u,u=e,e=void 0)),u=u||{},i===void 0&&(i=u.bits||2048),e===void 0&&(e=u.e||65537),!m0.options.usePureJavaScript&&!u.prng&&i>=256&&i<=16384&&(e===65537||e===3)){if(r){if(oM("generateKeyPair"))return Ah.generateKeyPair("rsa",{modulusLength:i,publicExponent:e,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}},function(l,d,p){if(l)return r(l);r(null,{privateKey:A0.privateKeyFromPem(p),publicKey:A0.publicKeyFromPem(d)})});if(lM("generateKey")&&lM("exportKey"))return vu.globalScope.crypto.subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:i,publicExponent:dM(e),hash:{name:"SHA-256"}},!0,["sign","verify"]).then(function(l){return vu.globalScope.crypto.subtle.exportKey("pkcs8",l.privateKey)}).then(void 0,function(l){r(l)}).then(function(l){if(l){var d=A0.privateKeyFromAsn1(X.fromDer(m0.util.createBuffer(l)));r(null,{privateKey:d,publicKey:A0.setRsaPublicKey(d.n,d.e)})}});if(cM("generateKey")&&cM("exportKey")){var a=vu.globalScope.msCrypto.subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:i,publicExponent:dM(e),hash:{name:"SHA-256"}},!0,["sign","verify"]);a.oncomplete=function(l){var d=l.target.result,p=vu.globalScope.msCrypto.subtle.exportKey("pkcs8",d.privateKey);p.oncomplete=function(h){var f=h.target.result,S=A0.privateKeyFromAsn1(X.fromDer(m0.util.createBuffer(f)));r(null,{privateKey:S,publicKey:A0.setRsaPublicKey(S.n,S.e)})},p.onerror=function(h){r(h)}},a.onerror=function(l){r(l)};return}}else if(oM("generateKeyPairSync")){var s=Ah.generateKeyPairSync("rsa",{modulusLength:i,publicExponent:e,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{privateKey:A0.privateKeyFromPem(s.privateKey),publicKey:A0.publicKeyFromPem(s.publicKey)}}}var n=A0.rsa.createKeyPairGenerationState(i,e,u);if(!r)return A0.rsa.stepKeyPairGenerationState(n,0),n.keys;fD(n,u,r)};A0.setRsaPublicKey=A0.rsa.setPublicKey=function(i,e){var u={n:i,e};return u.encrypt=function(r,a,s){if(typeof a=="string"?a=a.toUpperCase():a===void 0&&(a="RSAES-PKCS1-V1_5"),a==="RSAES-PKCS1-V1_5")a={encode:function(l,d,p){return hM(l,d,2).getBytes()}};else if(a==="RSA-OAEP"||a==="RSAES-OAEP")a={encode:function(l,d){return m0.pkcs1.encode_rsa_oaep(d,l,s)}};else if(["RAW","NONE","NULL",null].indexOf(a)!==-1)a={encode:function(l){return l}};else if(typeof a=="string")throw new Error('Unsupported encryption scheme: "'+a+'".');var n=a.encode(r,u,!0);return A0.rsa.encrypt(n,u,!0)},u.verify=function(r,a,s,n){typeof s=="string"?s=s.toUpperCase():s===void 0&&(s="RSASSA-PKCS1-V1_5"),n===void 0&&(n={_parseAllDigestBytes:!0}),"_parseAllDigestBytes"in n||(n._parseAllDigestBytes=!0),s==="RSASSA-PKCS1-V1_5"?s={verify:function(d,p){p=rc(p,u,!0);var h=X.fromDer(p,{parseAllBytes:n._parseAllDigestBytes}),f={},S=[];if(!X.validate(h,pD,f,S)){var m=new Error("ASN.1 object does not contain a valid RSASSA-PKCS1-v1_5 DigestInfo value.");throw m.errors=S,m}var O=X.derToOid(f.algorithmIdentifier);if(!(O===m0.oids.md2||O===m0.oids.md5||O===m0.oids.sha1||O===m0.oids.sha224||O===m0.oids.sha256||O===m0.oids.sha384||O===m0.oids.sha512||O===m0.oids["sha512-224"]||O===m0.oids["sha512-256"])){var m=new Error("Unknown RSASSA-PKCS1-v1_5 DigestAlgorithm identifier.");throw m.oid=O,m}if((O===m0.oids.md2||O===m0.oids.md5)&&!("parameters"in f))throw new Error("ASN.1 object does not contain a valid RSASSA-PKCS1-v1_5 DigestInfo value. Missing algorithm identifer NULL parameters.");return d===f.digest}}:(s==="NONE"||s==="NULL"||s===null)&&(s={verify:function(d,p){return p=rc(p,u,!0),d===p}});var l=A0.rsa.decrypt(a,u,!0,!1);return s.verify(r,l,u.n.bitLength())},u};A0.setRsaPrivateKey=A0.rsa.setPrivateKey=function(i,e,u,r,a,s,n,l){var d={n:i,e,d:u,p:r,q:a,dP:s,dQ:n,qInv:l};return d.decrypt=function(p,h,f){typeof h=="string"?h=h.toUpperCase():h===void 0&&(h="RSAES-PKCS1-V1_5");var S=A0.rsa.decrypt(p,d,!1,!1);if(h==="RSAES-PKCS1-V1_5")h={decode:rc};else if(h==="RSA-OAEP"||h==="RSAES-OAEP")h={decode:function(m,O){return m0.pkcs1.decode_rsa_oaep(O,m,f)}};else if(["RAW","NONE","NULL",null].indexOf(h)!==-1)h={decode:function(m){return m}};else throw new Error('Unsupported encryption scheme: "'+h+'".');return h.decode(S,d,!1)},d.sign=function(p,h){var f=!1;typeof h=="string"&&(h=h.toUpperCase()),h===void 0||h==="RSASSA-PKCS1-V1_5"?(h={encode:hD},f=1):(h==="NONE"||h==="NULL"||h===null)&&(h={encode:function(){return p}},f=1);var S=h.encode(p,d.n.bitLength());return A0.rsa.encrypt(S,d,f)},d};A0.wrapRsaPrivateKey=function(i){return X.create(X.Class.UNIVERSAL,X.Type.SEQUENCE,!0,[X.create(X.Class.UNIVERSAL,X.Type.INTEGER,!1,X.integerToDer(0).getBytes()),X.create(X.Class.UNIVERSAL,X.Type.SEQUENCE,!0,[X.create(X.Class.UNIVERSAL,X.Type.OID,!1,X.oidToDer(A0.oids.rsaEncryption).getBytes()),X.create(X.Class.UNIVERSAL,X.Type.NULL,!1,"")]),X.create(X.Class.UNIVERSAL,X.Type.OCTETSTRING,!1,X.toDer(i).getBytes())])};A0.privateKeyFromAsn1=function(i){var e={},u=[];if(X.validate(i,oD,e,u)&&(i=X.fromDer(m0.util.createBuffer(e.privateKey))),e={},u=[],!X.validate(i,lD,e,u)){var r=new Error("Cannot read private key. ASN.1 object does not contain an RSAPrivateKey.");throw r.errors=u,r}var a,s,n,l,d,p,h,f;return a=m0.util.createBuffer(e.privateKeyModulus).toHex(),s=m0.util.createBuffer(e.privateKeyPublicExponent).toHex(),n=m0.util.createBuffer(e.privateKeyPrivateExponent).toHex(),l=m0.util.createBuffer(e.privateKeyPrime1).toHex(),d=m0.util.createBuffer(e.privateKeyPrime2).toHex(),p=m0.util.createBuffer(e.privateKeyExponent1).toHex(),h=m0.util.createBuffer(e.privateKeyExponent2).toHex(),f=m0.util.createBuffer(e.privateKeyCoefficient).toHex(),A0.setRsaPrivateKey(new k0(a,16),new k0(s,16),new k0(n,16),new k0(l,16),new k0(d,16),new k0(p,16),new k0(h,16),new k0(f,16))};A0.privateKeyToAsn1=A0.privateKeyToRSAPrivateKey=function(i){return X.create(X.Class.UNIVERSAL,X.Type.SEQUENCE,!0,[X.create(X.Class.UNIVERSAL,X.Type.INTEGER,!1,X.integerToDer(0).getBytes()),X.create(X.Class.UNIVERSAL,X.Type.INTEGER,!1,Tt(i.n)),X.create(X.Class.UNIVERSAL,X.Type.INTEGER,!1,Tt(i.e)),X.create(X.Class.UNIVERSAL,X.Type.INTEGER,!1,Tt(i.d)),X.create(X.Class.UNIVERSAL,X.Type.INTEGER,!1,Tt(i.p)),X.create(X.Class.UNIVERSAL,X.Type.INTEGER,!1,Tt(i.q)),X.create(X.Class.UNIVERSAL,X.Type.INTEGER,!1,Tt(i.dP)),X.create(X.Class.UNIVERSAL,X.Type.INTEGER,!1,Tt(i.dQ)),X.create(X.Class.UNIVERSAL,X.Type.INTEGER,!1,Tt(i.qInv))])};A0.publicKeyFromAsn1=function(i){var e={},u=[];if(X.validate(i,dD,e,u)){var r=X.derToOid(e.publicKeyOid);if(r!==A0.oids.rsaEncryption){var a=new Error("Cannot read public key. Unknown OID.");throw a.oid=r,a}i=e.rsaPublicKey}if(u=[],!X.validate(i,cD,e,u)){var a=new Error("Cannot read public key. ASN.1 object does not contain an RSAPublicKey.");throw a.errors=u,a}var s=m0.util.createBuffer(e.publicKeyModulus).toHex(),n=m0.util.createBuffer(e.publicKeyExponent).toHex();return A0.setRsaPublicKey(new k0(s,16),new k0(n,16))};A0.publicKeyToAsn1=A0.publicKeyToSubjectPublicKeyInfo=function(i){return X.create(X.Class.UNIVERSAL,X.Type.SEQUENCE,!0,[X.create(X.Class.UNIVERSAL,X.Type.SEQUENCE,!0,[X.create(X.Class.UNIVERSAL,X.Type.OID,!1,X.oidToDer(A0.oids.rsaEncryption).getBytes()),X.create(X.Class.UNIVERSAL,X.Type.NULL,!1,"")]),X.create(X.Class.UNIVERSAL,X.Type.BITSTRING,!1,[A0.publicKeyToRSAPublicKey(i)])])};A0.publicKeyToRSAPublicKey=function(i){return X.create(X.Class.UNIVERSAL,X.Type.SEQUENCE,!0,[X.create(X.Class.UNIVERSAL,X.Type.INTEGER,!1,Tt(i.n)),X.create(X.Class.UNIVERSAL,X.Type.INTEGER,!1,Tt(i.e))])};function hM(i,e,u){var r=m0.util.createBuffer(),a=Math.ceil(e.n.bitLength()/8);if(i.length>a-11){var s=new Error("Message is too long for PKCS#1 v1.5 padding.");throw s.length=i.length,s.max=a-11,s}r.putByte(0),r.putByte(u);var n=a-3-i.length,l;if(u===0||u===1){l=u===0?0:255;for(var d=0;d0;){for(var p=0,h=m0.random.getBytes(n),d=0;d"u")throw new Error("Encryption block is invalid.");var d=0;if(l===0){d=a-3-r;for(var p=0;p1;){if(s.getByte()!==255){--s.read;break}++d}else if(l===2)for(d=0;s.length()>1;){if(s.getByte()===0){--s.read;break}++d}var h=s.getByte();if(h!==0||d!==a-3-s.length())throw new Error("Encryption block is invalid.");return s.getBytes()}c(rc,"_decodePkcs1_v1_5");function fD(i,e,u){typeof e=="function"&&(u=e,e={}),e=e||{};var r={algorithm:{name:e.algorithm||"PRIMEINC",options:{workers:e.workers||2,workLoad:e.workLoad||100,workerScript:e.workerScript}}};"prng"in e&&(r.prng=e.prng),a();function a(){s(i.pBits,function(l,d){if(l)return u(l);if(i.p=d,i.q!==null)return n(l,i.q);s(i.qBits,n)})}c(a,"generate");function s(l,d){m0.prime.generateProbablePrime(l,r,d)}c(s,"getPrime");function n(l,d){if(l)return u(l);if(i.q=d,i.p.compareTo(i.q)<0){var p=i.p;i.p=i.q,i.q=p}if(i.p.subtract(k0.ONE).gcd(i.e).compareTo(k0.ONE)!==0){i.p=null,a();return}if(i.q.subtract(k0.ONE).gcd(i.e).compareTo(k0.ONE)!==0){i.q=null,s(i.qBits,n);return}if(i.p1=i.p.subtract(k0.ONE),i.q1=i.q.subtract(k0.ONE),i.phi=i.p1.multiply(i.q1),i.phi.gcd(i.e).compareTo(k0.ONE)!==0){i.p=i.q=null,a();return}if(i.n=i.p.multiply(i.q),i.n.bitLength()!==i.bits){i.q=null,s(i.qBits,n);return}var h=i.e.modInverse(i.phi);i.keys={privateKey:A0.rsa.setPrivateKey(i.n,i.e,h,i.p,i.q,h.mod(i.p1),h.mod(i.q1),i.q.modInverse(i.p)),publicKey:A0.rsa.setPublicKey(i.n,i.e)},u(null,i.keys)}c(n,"finish")}c(fD,"_generateKeyPair");function Tt(i){var e=i.toString(16);e[0]>="8"&&(e="00"+e);var u=m0.util.hexToBytes(e);return u.length>1&&(u.charCodeAt(0)===0&&!(u.charCodeAt(1)&128)||u.charCodeAt(0)===255&&(u.charCodeAt(1)&128)===128)?u.substr(1):u}c(Tt,"_bnToBytes");function SD(i){return i<=100?27:i<=150?18:i<=200?15:i<=250?12:i<=300?9:i<=350?8:i<=400?7:i<=500?6:i<=600?5:i<=800?4:i<=1250?3:2}c(SD,"_getMillerRabinTests");function oM(i){return m0.util.isNodejs&&typeof Ah[i]=="function"}c(oM,"_detectNodeCrypto");function lM(i){return typeof vu.globalScope<"u"&&typeof vu.globalScope.crypto=="object"&&typeof vu.globalScope.crypto.subtle=="object"&&typeof vu.globalScope.crypto.subtle[i]=="function"}c(lM,"_detectSubtleCrypto");function cM(i){return typeof vu.globalScope<"u"&&typeof vu.globalScope.msCrypto=="object"&&typeof vu.globalScope.msCrypto.subtle=="object"&&typeof vu.globalScope.msCrypto.subtle[i]=="function"}c(cM,"_detectSubtleMsCrypto");function dM(i){for(var e=m0.util.hexToBytes(i.toString(16)),u=new Uint8Array(e.length),r=0;r{var f0=y0();Lr();Xu();Nn();St();Er();zl();ai();bu();Oh();bn();G0();typeof SM>"u"&&(SM=f0.jsbn.BigInteger);var SM,e0=f0.asn1,g0=f0.pki=f0.pki||{};mM.exports=g0.pbe=f0.pbe=f0.pbe||{};var oi=g0.oids,OD={name:"EncryptedPrivateKeyInfo",tagClass:e0.Class.UNIVERSAL,type:e0.Type.SEQUENCE,constructed:!0,value:[{name:"EncryptedPrivateKeyInfo.encryptionAlgorithm",tagClass:e0.Class.UNIVERSAL,type:e0.Type.SEQUENCE,constructed:!0,value:[{name:"AlgorithmIdentifier.algorithm",tagClass:e0.Class.UNIVERSAL,type:e0.Type.OID,constructed:!1,capture:"encryptionOid"},{name:"AlgorithmIdentifier.parameters",tagClass:e0.Class.UNIVERSAL,type:e0.Type.SEQUENCE,constructed:!0,captureAsn1:"encryptionParams"}]},{name:"EncryptedPrivateKeyInfo.encryptedData",tagClass:e0.Class.UNIVERSAL,type:e0.Type.OCTETSTRING,constructed:!1,capture:"encryptedData"}]},LD={name:"PBES2Algorithms",tagClass:e0.Class.UNIVERSAL,type:e0.Type.SEQUENCE,constructed:!0,value:[{name:"PBES2Algorithms.keyDerivationFunc",tagClass:e0.Class.UNIVERSAL,type:e0.Type.SEQUENCE,constructed:!0,value:[{name:"PBES2Algorithms.keyDerivationFunc.oid",tagClass:e0.Class.UNIVERSAL,type:e0.Type.OID,constructed:!1,capture:"kdfOid"},{name:"PBES2Algorithms.params",tagClass:e0.Class.UNIVERSAL,type:e0.Type.SEQUENCE,constructed:!0,value:[{name:"PBES2Algorithms.params.salt",tagClass:e0.Class.UNIVERSAL,type:e0.Type.OCTETSTRING,constructed:!1,capture:"kdfSalt"},{name:"PBES2Algorithms.params.iterationCount",tagClass:e0.Class.UNIVERSAL,type:e0.Type.INTEGER,constructed:!1,capture:"kdfIterationCount"},{name:"PBES2Algorithms.params.keyLength",tagClass:e0.Class.UNIVERSAL,type:e0.Type.INTEGER,constructed:!1,optional:!0,capture:"keyLength"},{name:"PBES2Algorithms.params.prf",tagClass:e0.Class.UNIVERSAL,type:e0.Type.SEQUENCE,constructed:!0,optional:!0,value:[{name:"PBES2Algorithms.params.prf.algorithm",tagClass:e0.Class.UNIVERSAL,type:e0.Type.OID,constructed:!1,capture:"prfOid"}]}]}]},{name:"PBES2Algorithms.encryptionScheme",tagClass:e0.Class.UNIVERSAL,type:e0.Type.SEQUENCE,constructed:!0,value:[{name:"PBES2Algorithms.encryptionScheme.oid",tagClass:e0.Class.UNIVERSAL,type:e0.Type.OID,constructed:!1,capture:"encOid"},{name:"PBES2Algorithms.encryptionScheme.iv",tagClass:e0.Class.UNIVERSAL,type:e0.Type.OCTETSTRING,constructed:!1,capture:"encIv"}]}]},ED={name:"pkcs-12PbeParams",tagClass:e0.Class.UNIVERSAL,type:e0.Type.SEQUENCE,constructed:!0,value:[{name:"pkcs-12PbeParams.salt",tagClass:e0.Class.UNIVERSAL,type:e0.Type.OCTETSTRING,constructed:!1,capture:"salt"},{name:"pkcs-12PbeParams.iterations",tagClass:e0.Class.UNIVERSAL,type:e0.Type.INTEGER,constructed:!1,capture:"iterations"}]};g0.encryptPrivateKeyInfo=function(i,e,u){u=u||{},u.saltSize=u.saltSize||8,u.count=u.count||2048,u.algorithm=u.algorithm||"aes128",u.prfAlgorithm=u.prfAlgorithm||"sha1";var r=f0.random.getBytesSync(u.saltSize),a=u.count,s=e0.integerToDer(a),n,l,d;if(u.algorithm.indexOf("aes")===0||u.algorithm==="des"){var p,h,f;switch(u.algorithm){case"aes128":n=16,p=16,h=oi["aes128-CBC"],f=f0.aes.createEncryptionCipher;break;case"aes192":n=24,p=16,h=oi["aes192-CBC"],f=f0.aes.createEncryptionCipher;break;case"aes256":n=32,p=16,h=oi["aes256-CBC"],f=f0.aes.createEncryptionCipher;break;case"des":n=8,p=8,h=oi.desCBC,f=f0.des.createEncryptionCipher;break;default:var S=new Error("Cannot encrypt private key. Unknown encryption algorithm.");throw S.algorithm=u.algorithm,S}var m="hmacWith"+u.prfAlgorithm.toUpperCase(),O=EM(m),M=f0.pkcs5.pbkdf2(e,r,a,n,O),T=f0.random.getBytesSync(p),L=f(M);L.start(T),L.update(e0.toDer(i)),L.finish(),d=L.output.getBytes();var I=mD(r,s,n,m);l=e0.create(e0.Class.UNIVERSAL,e0.Type.SEQUENCE,!0,[e0.create(e0.Class.UNIVERSAL,e0.Type.OID,!1,e0.oidToDer(oi.pkcs5PBES2).getBytes()),e0.create(e0.Class.UNIVERSAL,e0.Type.SEQUENCE,!0,[e0.create(e0.Class.UNIVERSAL,e0.Type.SEQUENCE,!0,[e0.create(e0.Class.UNIVERSAL,e0.Type.OID,!1,e0.oidToDer(oi.pkcs5PBKDF2).getBytes()),I]),e0.create(e0.Class.UNIVERSAL,e0.Type.SEQUENCE,!0,[e0.create(e0.Class.UNIVERSAL,e0.Type.OID,!1,e0.oidToDer(h).getBytes()),e0.create(e0.Class.UNIVERSAL,e0.Type.OCTETSTRING,!1,T)])])])}else if(u.algorithm==="3des"){n=24;var N=new f0.util.ByteBuffer(r),M=g0.pbe.generatePkcs12Key(e,N,1,a,n),T=g0.pbe.generatePkcs12Key(e,N,2,a,n),L=f0.des.createEncryptionCipher(M);L.start(T),L.update(e0.toDer(i)),L.finish(),d=L.output.getBytes(),l=e0.create(e0.Class.UNIVERSAL,e0.Type.SEQUENCE,!0,[e0.create(e0.Class.UNIVERSAL,e0.Type.OID,!1,e0.oidToDer(oi["pbeWithSHAAnd3-KeyTripleDES-CBC"]).getBytes()),e0.create(e0.Class.UNIVERSAL,e0.Type.SEQUENCE,!0,[e0.create(e0.Class.UNIVERSAL,e0.Type.OCTETSTRING,!1,r),e0.create(e0.Class.UNIVERSAL,e0.Type.INTEGER,!1,s.getBytes())])])}else{var S=new Error("Cannot encrypt private key. Unknown encryption algorithm.");throw S.algorithm=u.algorithm,S}var D=e0.create(e0.Class.UNIVERSAL,e0.Type.SEQUENCE,!0,[l,e0.create(e0.Class.UNIVERSAL,e0.Type.OCTETSTRING,!1,d)]);return D};g0.decryptPrivateKeyInfo=function(i,e){var u=null,r={},a=[];if(!e0.validate(i,OD,r,a)){var s=new Error("Cannot read encrypted private key. ASN.1 object is not a supported EncryptedPrivateKeyInfo.");throw s.errors=a,s}var n=e0.derToOid(r.encryptionOid),l=g0.pbe.getCipher(n,r.encryptionParams,e),d=f0.util.createBuffer(r.encryptedData);return l.update(d),l.finish()&&(u=e0.fromDer(l.output)),u};g0.encryptedPrivateKeyToPem=function(i,e){var u={type:"ENCRYPTED PRIVATE KEY",body:e0.toDer(i).getBytes()};return f0.pem.encode(u,{maxline:e})};g0.encryptedPrivateKeyFromPem=function(i){var e=f0.pem.decode(i)[0];if(e.type!=="ENCRYPTED PRIVATE KEY"){var u=new Error('Could not convert encrypted private key from PEM; PEM header type is "ENCRYPTED PRIVATE KEY".');throw u.headerType=e.type,u}if(e.procType&&e.procType.type==="ENCRYPTED")throw new Error("Could not convert encrypted private key from PEM; PEM is encrypted.");return e0.fromDer(e.body)};g0.encryptRsaPrivateKey=function(i,e,u){if(u=u||{},!u.legacy){var r=g0.wrapRsaPrivateKey(g0.privateKeyToAsn1(i));return r=g0.encryptPrivateKeyInfo(r,e,u),g0.encryptedPrivateKeyToPem(r)}var a,s,n,l;switch(u.algorithm){case"aes128":a="AES-128-CBC",n=16,s=f0.random.getBytesSync(16),l=f0.aes.createEncryptionCipher;break;case"aes192":a="AES-192-CBC",n=24,s=f0.random.getBytesSync(16),l=f0.aes.createEncryptionCipher;break;case"aes256":a="AES-256-CBC",n=32,s=f0.random.getBytesSync(16),l=f0.aes.createEncryptionCipher;break;case"3des":a="DES-EDE3-CBC",n=24,s=f0.random.getBytesSync(8),l=f0.des.createEncryptionCipher;break;case"des":a="DES-CBC",n=8,s=f0.random.getBytesSync(8),l=f0.des.createEncryptionCipher;break;default:var d=new Error('Could not encrypt RSA private key; unsupported encryption algorithm "'+u.algorithm+'".');throw d.algorithm=u.algorithm,d}var p=f0.pbe.opensslDeriveBytes(e,s.substr(0,8),n),h=l(p);h.start(s),h.update(e0.toDer(g0.privateKeyToAsn1(i))),h.finish();var f={type:"RSA PRIVATE KEY",procType:{version:"4",type:"ENCRYPTED"},dekInfo:{algorithm:a,parameters:f0.util.bytesToHex(s).toUpperCase()},body:h.output.getBytes()};return f0.pem.encode(f)};g0.decryptRsaPrivateKey=function(i,e){var u=null,r=f0.pem.decode(i)[0];if(r.type!=="ENCRYPTED PRIVATE KEY"&&r.type!=="PRIVATE KEY"&&r.type!=="RSA PRIVATE KEY"){var a=new Error('Could not convert private key from PEM; PEM header type is not "ENCRYPTED PRIVATE KEY", "PRIVATE KEY", or "RSA PRIVATE KEY".');throw a.headerType=a,a}if(r.procType&&r.procType.type==="ENCRYPTED"){var s,n;switch(r.dekInfo.algorithm){case"DES-CBC":s=8,n=f0.des.createDecryptionCipher;break;case"DES-EDE3-CBC":s=24,n=f0.des.createDecryptionCipher;break;case"AES-128-CBC":s=16,n=f0.aes.createDecryptionCipher;break;case"AES-192-CBC":s=24,n=f0.aes.createDecryptionCipher;break;case"AES-256-CBC":s=32,n=f0.aes.createDecryptionCipher;break;case"RC2-40-CBC":s=5,n=c(function(f){return f0.rc2.createDecryptionCipher(f,40)},"cipherFn");break;case"RC2-64-CBC":s=8,n=c(function(f){return f0.rc2.createDecryptionCipher(f,64)},"cipherFn");break;case"RC2-128-CBC":s=16,n=c(function(f){return f0.rc2.createDecryptionCipher(f,128)},"cipherFn");break;default:var a=new Error('Could not decrypt private key; unsupported encryption algorithm "'+r.dekInfo.algorithm+'".');throw a.algorithm=r.dekInfo.algorithm,a}var l=f0.util.hexToBytes(r.dekInfo.parameters),d=f0.pbe.opensslDeriveBytes(e,l.substr(0,8),s),p=n(d);if(p.start(l),p.update(f0.util.createBuffer(r.body)),p.finish())u=p.output.getBytes();else return u}else u=r.body;return r.type==="ENCRYPTED PRIVATE KEY"?u=g0.decryptPrivateKeyInfo(e0.fromDer(u),e):u=e0.fromDer(u),u!==null&&(u=g0.privateKeyFromAsn1(u)),u};g0.pbe.generatePkcs12Key=function(i,e,u,r,a,s){var n,l;if(typeof s>"u"||s===null){if(!("sha1"in f0.md))throw new Error('"sha1" hash algorithm unavailable.');s=f0.md.sha1.create()}var d=s.digestLength,p=s.blockLength,h=new f0.util.ByteBuffer,f=new f0.util.ByteBuffer;if(i!=null){for(l=0;l=0;l--)J=J>>8,J+=k.at(l)+Z.at(l),Z.setAt(l,J&255);j.putBuffer(Z)}N=j,h.putBuffer(R)}return h.truncate(h.length()-a),h};g0.pbe.getCipher=function(i,e,u){switch(i){case g0.oids.pkcs5PBES2:return g0.pbe.getCipherForPBES2(i,e,u);case g0.oids["pbeWithSHAAnd3-KeyTripleDES-CBC"]:case g0.oids["pbewithSHAAnd40BitRC2-CBC"]:return g0.pbe.getCipherForPKCS12PBE(i,e,u);default:var r=new Error("Cannot read encrypted PBE data block. Unsupported OID.");throw r.oid=i,r.supportedOids=["pkcs5PBES2","pbeWithSHAAnd3-KeyTripleDES-CBC","pbewithSHAAnd40BitRC2-CBC"],r}};g0.pbe.getCipherForPBES2=function(i,e,u){var r={},a=[];if(!e0.validate(e,LD,r,a)){var s=new Error("Cannot read password-based-encryption algorithm parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.");throw s.errors=a,s}if(i=e0.derToOid(r.kdfOid),i!==g0.oids.pkcs5PBKDF2){var s=new Error("Cannot read encrypted private key. Unsupported key derivation function OID.");throw s.oid=i,s.supportedOids=["pkcs5PBKDF2"],s}if(i=e0.derToOid(r.encOid),i!==g0.oids["aes128-CBC"]&&i!==g0.oids["aes192-CBC"]&&i!==g0.oids["aes256-CBC"]&&i!==g0.oids["des-EDE3-CBC"]&&i!==g0.oids.desCBC){var s=new Error("Cannot read encrypted private key. Unsupported encryption scheme OID.");throw s.oid=i,s.supportedOids=["aes128-CBC","aes192-CBC","aes256-CBC","des-EDE3-CBC","desCBC"],s}var n=r.kdfSalt,l=f0.util.createBuffer(r.kdfIterationCount);l=l.getInt(l.length()<<3);var d,p;switch(g0.oids[i]){case"aes128-CBC":d=16,p=f0.aes.createDecryptionCipher;break;case"aes192-CBC":d=24,p=f0.aes.createDecryptionCipher;break;case"aes256-CBC":d=32,p=f0.aes.createDecryptionCipher;break;case"des-EDE3-CBC":d=24,p=f0.des.createDecryptionCipher;break;case"desCBC":d=8,p=f0.des.createDecryptionCipher;break}var h=LM(r.prfOid),f=f0.pkcs5.pbkdf2(u,n,l,d,h),S=r.encIv,m=p(f);return m.start(S),m};g0.pbe.getCipherForPKCS12PBE=function(i,e,u){var r={},a=[];if(!e0.validate(e,ED,r,a)){var s=new Error("Cannot read password-based-encryption algorithm parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.");throw s.errors=a,s}var n=f0.util.createBuffer(r.salt),l=f0.util.createBuffer(r.iterations);l=l.getInt(l.length()<<3);var d,p,h;switch(i){case g0.oids["pbeWithSHAAnd3-KeyTripleDES-CBC"]:d=24,p=8,h=f0.des.startDecrypting;break;case g0.oids["pbewithSHAAnd40BitRC2-CBC"]:d=5,p=8,h=c(function(M,T){var L=f0.rc2.createDecryptionCipher(M,40);return L.start(T,null),L},"cipherFn");break;default:var s=new Error("Cannot read PKCS #12 PBE data block. Unsupported OID.");throw s.oid=i,s}var f=LM(r.prfOid),S=g0.pbe.generatePkcs12Key(u,n,1,l,d,f);f.start();var m=g0.pbe.generatePkcs12Key(u,n,2,l,p,f);return h(S,m)};g0.pbe.opensslDeriveBytes=function(i,e,u,r){if(typeof r>"u"||r===null){if(!("md5"in f0.md))throw new Error('"md5" hash algorithm unavailable.');r=f0.md.md5.create()}e===null&&(e="");for(var a=[OM(r,i+e)],s=16,n=1;s{var Ya=y0();Xu();G0();var h0=Ya.asn1,Ra=TM.exports=Ya.pkcs7asn1=Ya.pkcs7asn1||{};Ya.pkcs7=Ya.pkcs7||{};Ya.pkcs7.asn1=Ra;var BM={name:"ContentInfo",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,value:[{name:"ContentInfo.ContentType",tagClass:h0.Class.UNIVERSAL,type:h0.Type.OID,constructed:!1,capture:"contentType"},{name:"ContentInfo.content",tagClass:h0.Class.CONTEXT_SPECIFIC,type:0,constructed:!0,optional:!0,captureAsn1:"content"}]};Ra.contentInfoValidator=BM;var MM={name:"EncryptedContentInfo",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,value:[{name:"EncryptedContentInfo.contentType",tagClass:h0.Class.UNIVERSAL,type:h0.Type.OID,constructed:!1,capture:"contentType"},{name:"EncryptedContentInfo.contentEncryptionAlgorithm",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,value:[{name:"EncryptedContentInfo.contentEncryptionAlgorithm.algorithm",tagClass:h0.Class.UNIVERSAL,type:h0.Type.OID,constructed:!1,capture:"encAlgorithm"},{name:"EncryptedContentInfo.contentEncryptionAlgorithm.parameter",tagClass:h0.Class.UNIVERSAL,captureAsn1:"encParameter"}]},{name:"EncryptedContentInfo.encryptedContent",tagClass:h0.Class.CONTEXT_SPECIFIC,type:0,capture:"encryptedContent",captureAsn1:"encryptedContentAsn1"}]};Ra.envelopedDataValidator={name:"EnvelopedData",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,value:[{name:"EnvelopedData.Version",tagClass:h0.Class.UNIVERSAL,type:h0.Type.INTEGER,constructed:!1,capture:"version"},{name:"EnvelopedData.RecipientInfos",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SET,constructed:!0,captureAsn1:"recipientInfos"}].concat(MM)};Ra.encryptedDataValidator={name:"EncryptedData",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,value:[{name:"EncryptedData.Version",tagClass:h0.Class.UNIVERSAL,type:h0.Type.INTEGER,constructed:!1,capture:"version"}].concat(MM)};var BD={name:"SignerInfo",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,value:[{name:"SignerInfo.version",tagClass:h0.Class.UNIVERSAL,type:h0.Type.INTEGER,constructed:!1},{name:"SignerInfo.issuerAndSerialNumber",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,value:[{name:"SignerInfo.issuerAndSerialNumber.issuer",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,captureAsn1:"issuer"},{name:"SignerInfo.issuerAndSerialNumber.serialNumber",tagClass:h0.Class.UNIVERSAL,type:h0.Type.INTEGER,constructed:!1,capture:"serial"}]},{name:"SignerInfo.digestAlgorithm",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,value:[{name:"SignerInfo.digestAlgorithm.algorithm",tagClass:h0.Class.UNIVERSAL,type:h0.Type.OID,constructed:!1,capture:"digestAlgorithm"},{name:"SignerInfo.digestAlgorithm.parameter",tagClass:h0.Class.UNIVERSAL,constructed:!1,captureAsn1:"digestParameter",optional:!0}]},{name:"SignerInfo.authenticatedAttributes",tagClass:h0.Class.CONTEXT_SPECIFIC,type:0,constructed:!0,optional:!0,capture:"authenticatedAttributes"},{name:"SignerInfo.digestEncryptionAlgorithm",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,capture:"signatureAlgorithm"},{name:"SignerInfo.encryptedDigest",tagClass:h0.Class.UNIVERSAL,type:h0.Type.OCTETSTRING,constructed:!1,capture:"signature"},{name:"SignerInfo.unauthenticatedAttributes",tagClass:h0.Class.CONTEXT_SPECIFIC,type:1,constructed:!0,optional:!0,capture:"unauthenticatedAttributes"}]};Ra.signedDataValidator={name:"SignedData",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,value:[{name:"SignedData.Version",tagClass:h0.Class.UNIVERSAL,type:h0.Type.INTEGER,constructed:!1,capture:"version"},{name:"SignedData.DigestAlgorithms",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SET,constructed:!0,captureAsn1:"digestAlgorithms"},BM,{name:"SignedData.Certificates",tagClass:h0.Class.CONTEXT_SPECIFIC,type:0,optional:!0,captureAsn1:"certificates"},{name:"SignedData.CertificateRevocationLists",tagClass:h0.Class.CONTEXT_SPECIFIC,type:1,optional:!0,captureAsn1:"crls"},{name:"SignedData.SignerInfos",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SET,capture:"signerInfos",optional:!0,value:[BD]}]};Ra.recipientInfoValidator={name:"RecipientInfo",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,value:[{name:"RecipientInfo.version",tagClass:h0.Class.UNIVERSAL,type:h0.Type.INTEGER,constructed:!1,capture:"version"},{name:"RecipientInfo.issuerAndSerial",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,value:[{name:"RecipientInfo.issuerAndSerial.issuer",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,captureAsn1:"issuer"},{name:"RecipientInfo.issuerAndSerial.serialNumber",tagClass:h0.Class.UNIVERSAL,type:h0.Type.INTEGER,constructed:!1,capture:"serial"}]},{name:"RecipientInfo.keyEncryptionAlgorithm",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,value:[{name:"RecipientInfo.keyEncryptionAlgorithm.algorithm",tagClass:h0.Class.UNIVERSAL,type:h0.Type.OID,constructed:!1,capture:"encAlgorithm"},{name:"RecipientInfo.keyEncryptionAlgorithm.parameter",tagClass:h0.Class.UNIVERSAL,constructed:!1,captureAsn1:"encParameter",optional:!0}]},{name:"RecipientInfo.encryptedKey",tagClass:h0.Class.UNIVERSAL,type:h0.Type.OCTETSTRING,constructed:!1,capture:"encKey"}]}});var gh=v((DX,_M)=>{var li=y0();G0();li.mgf=li.mgf||{};var MD=_M.exports=li.mgf.mgf1=li.mgf1=li.mgf1||{};MD.create=function(i){var e={generate:function(u,r){for(var a=new li.util.ByteBuffer,s=Math.ceil(r/i.digestLength),n=0;n{var ic=y0();gh();AM.exports=ic.mgf=ic.mgf||{};ic.mgf.mgf1=ic.mgf1});var ac=v((UX,RM)=>{var ci=y0();bu();G0();var TD=RM.exports=ci.pss=ci.pss||{};TD.create=function(i){arguments.length===3&&(i={md:arguments[0],mgf:arguments[1],saltLength:arguments[2]});var e=i.md,u=i.mgf,r=e.digestLength,a=i.salt||null;typeof a=="string"&&(a=ci.util.createBuffer(a));var s;if("saltLength"in i)s=i.saltLength;else if(a!==null)s=a.length();else throw new Error("Salt length not specified or specific salt not given.");if(a!==null&&a.length()!==s)throw new Error("Given salt length does not match length of given salt.");var n=i.prng||ci.random,l={};return l.encode=function(d,p){var h,f=p-1,S=Math.ceil(f/8),m=d.digest().getBytes();if(S>8*S-f&255;return E=String.fromCharCode(E.charCodeAt(0)&~R)+E.substr(1),E+T+"\xBC"},l.verify=function(d,p,h){var f,S=h-1,m=Math.ceil(S/8);if(p=p.substr(-m),m>8*m-S&255;if(M.charCodeAt(0)&L)throw new Error("Bits beyond keysize not zero as expected.");var I=u.generate(T,O),N="";for(f=0;f{var B0=y0();Lr();Xu();Nn();St();YM();Er();ai();ac();bn();G0();var _=B0.asn1,c0=IM.exports=B0.pki=B0.pki||{},F0=c0.oids,Le={};Le.CN=F0.commonName;Le.commonName="CN";Le.C=F0.countryName;Le.countryName="C";Le.L=F0.localityName;Le.localityName="L";Le.ST=F0.stateOrProvinceName;Le.stateOrProvinceName="ST";Le.O=F0.organizationName;Le.organizationName="O";Le.OU=F0.organizationalUnitName;Le.organizationalUnitName="OU";Le.E=F0.emailAddress;Le.emailAddress="E";var yM=B0.pki.rsa.publicKeyValidator,_D={name:"Certificate",tagClass:_.Class.UNIVERSAL,type:_.Type.SEQUENCE,constructed:!0,value:[{name:"Certificate.TBSCertificate",tagClass:_.Class.UNIVERSAL,type:_.Type.SEQUENCE,constructed:!0,captureAsn1:"tbsCertificate",value:[{name:"Certificate.TBSCertificate.version",tagClass:_.Class.CONTEXT_SPECIFIC,type:0,constructed:!0,optional:!0,value:[{name:"Certificate.TBSCertificate.version.integer",tagClass:_.Class.UNIVERSAL,type:_.Type.INTEGER,constructed:!1,capture:"certVersion"}]},{name:"Certificate.TBSCertificate.serialNumber",tagClass:_.Class.UNIVERSAL,type:_.Type.INTEGER,constructed:!1,capture:"certSerialNumber"},{name:"Certificate.TBSCertificate.signature",tagClass:_.Class.UNIVERSAL,type:_.Type.SEQUENCE,constructed:!0,value:[{name:"Certificate.TBSCertificate.signature.algorithm",tagClass:_.Class.UNIVERSAL,type:_.Type.OID,constructed:!1,capture:"certinfoSignatureOid"},{name:"Certificate.TBSCertificate.signature.parameters",tagClass:_.Class.UNIVERSAL,optional:!0,captureAsn1:"certinfoSignatureParams"}]},{name:"Certificate.TBSCertificate.issuer",tagClass:_.Class.UNIVERSAL,type:_.Type.SEQUENCE,constructed:!0,captureAsn1:"certIssuer"},{name:"Certificate.TBSCertificate.validity",tagClass:_.Class.UNIVERSAL,type:_.Type.SEQUENCE,constructed:!0,value:[{name:"Certificate.TBSCertificate.validity.notBefore (utc)",tagClass:_.Class.UNIVERSAL,type:_.Type.UTCTIME,constructed:!1,optional:!0,capture:"certValidity1UTCTime"},{name:"Certificate.TBSCertificate.validity.notBefore (generalized)",tagClass:_.Class.UNIVERSAL,type:_.Type.GENERALIZEDTIME,constructed:!1,optional:!0,capture:"certValidity2GeneralizedTime"},{name:"Certificate.TBSCertificate.validity.notAfter (utc)",tagClass:_.Class.UNIVERSAL,type:_.Type.UTCTIME,constructed:!1,optional:!0,capture:"certValidity3UTCTime"},{name:"Certificate.TBSCertificate.validity.notAfter (generalized)",tagClass:_.Class.UNIVERSAL,type:_.Type.GENERALIZEDTIME,constructed:!1,optional:!0,capture:"certValidity4GeneralizedTime"}]},{name:"Certificate.TBSCertificate.subject",tagClass:_.Class.UNIVERSAL,type:_.Type.SEQUENCE,constructed:!0,captureAsn1:"certSubject"},yM,{name:"Certificate.TBSCertificate.issuerUniqueID",tagClass:_.Class.CONTEXT_SPECIFIC,type:1,constructed:!0,optional:!0,value:[{name:"Certificate.TBSCertificate.issuerUniqueID.id",tagClass:_.Class.UNIVERSAL,type:_.Type.BITSTRING,constructed:!1,captureBitStringValue:"certIssuerUniqueId"}]},{name:"Certificate.TBSCertificate.subjectUniqueID",tagClass:_.Class.CONTEXT_SPECIFIC,type:2,constructed:!0,optional:!0,value:[{name:"Certificate.TBSCertificate.subjectUniqueID.id",tagClass:_.Class.UNIVERSAL,type:_.Type.BITSTRING,constructed:!1,captureBitStringValue:"certSubjectUniqueId"}]},{name:"Certificate.TBSCertificate.extensions",tagClass:_.Class.CONTEXT_SPECIFIC,type:3,constructed:!0,captureAsn1:"certExtensions",optional:!0}]},{name:"Certificate.signatureAlgorithm",tagClass:_.Class.UNIVERSAL,type:_.Type.SEQUENCE,constructed:!0,value:[{name:"Certificate.signatureAlgorithm.algorithm",tagClass:_.Class.UNIVERSAL,type:_.Type.OID,constructed:!1,capture:"certSignatureOid"},{name:"Certificate.TBSCertificate.signature.parameters",tagClass:_.Class.UNIVERSAL,optional:!0,captureAsn1:"certSignatureParams"}]},{name:"Certificate.signatureValue",tagClass:_.Class.UNIVERSAL,type:_.Type.BITSTRING,constructed:!1,captureBitStringValue:"certSignature"}]},AD={name:"rsapss",tagClass:_.Class.UNIVERSAL,type:_.Type.SEQUENCE,constructed:!0,value:[{name:"rsapss.hashAlgorithm",tagClass:_.Class.CONTEXT_SPECIFIC,type:0,constructed:!0,value:[{name:"rsapss.hashAlgorithm.AlgorithmIdentifier",tagClass:_.Class.UNIVERSAL,type:_.Class.SEQUENCE,constructed:!0,optional:!0,value:[{name:"rsapss.hashAlgorithm.AlgorithmIdentifier.algorithm",tagClass:_.Class.UNIVERSAL,type:_.Type.OID,constructed:!1,capture:"hashOid"}]}]},{name:"rsapss.maskGenAlgorithm",tagClass:_.Class.CONTEXT_SPECIFIC,type:1,constructed:!0,value:[{name:"rsapss.maskGenAlgorithm.AlgorithmIdentifier",tagClass:_.Class.UNIVERSAL,type:_.Class.SEQUENCE,constructed:!0,optional:!0,value:[{name:"rsapss.maskGenAlgorithm.AlgorithmIdentifier.algorithm",tagClass:_.Class.UNIVERSAL,type:_.Type.OID,constructed:!1,capture:"maskGenOid"},{name:"rsapss.maskGenAlgorithm.AlgorithmIdentifier.params",tagClass:_.Class.UNIVERSAL,type:_.Type.SEQUENCE,constructed:!0,value:[{name:"rsapss.maskGenAlgorithm.AlgorithmIdentifier.params.algorithm",tagClass:_.Class.UNIVERSAL,type:_.Type.OID,constructed:!1,capture:"maskGenHashOid"}]}]}]},{name:"rsapss.saltLength",tagClass:_.Class.CONTEXT_SPECIFIC,type:2,optional:!0,value:[{name:"rsapss.saltLength.saltLength",tagClass:_.Class.UNIVERSAL,type:_.Class.INTEGER,constructed:!1,capture:"saltLength"}]},{name:"rsapss.trailerField",tagClass:_.Class.CONTEXT_SPECIFIC,type:3,optional:!0,value:[{name:"rsapss.trailer.trailer",tagClass:_.Class.UNIVERSAL,type:_.Class.INTEGER,constructed:!1,capture:"trailer"}]}]},YD={name:"CertificationRequestInfo",tagClass:_.Class.UNIVERSAL,type:_.Type.SEQUENCE,constructed:!0,captureAsn1:"certificationRequestInfo",value:[{name:"CertificationRequestInfo.integer",tagClass:_.Class.UNIVERSAL,type:_.Type.INTEGER,constructed:!1,capture:"certificationRequestInfoVersion"},{name:"CertificationRequestInfo.subject",tagClass:_.Class.UNIVERSAL,type:_.Type.SEQUENCE,constructed:!0,captureAsn1:"certificationRequestInfoSubject"},yM,{name:"CertificationRequestInfo.attributes",tagClass:_.Class.CONTEXT_SPECIFIC,type:0,constructed:!0,optional:!0,capture:"certificationRequestInfoAttributes",value:[{name:"CertificationRequestInfo.attributes",tagClass:_.Class.UNIVERSAL,type:_.Type.SEQUENCE,constructed:!0,value:[{name:"CertificationRequestInfo.attributes.type",tagClass:_.Class.UNIVERSAL,type:_.Type.OID,constructed:!1},{name:"CertificationRequestInfo.attributes.value",tagClass:_.Class.UNIVERSAL,type:_.Type.SET,constructed:!0}]}]}]},RD={name:"CertificationRequest",tagClass:_.Class.UNIVERSAL,type:_.Type.SEQUENCE,constructed:!0,captureAsn1:"csr",value:[YD,{name:"CertificationRequest.signatureAlgorithm",tagClass:_.Class.UNIVERSAL,type:_.Type.SEQUENCE,constructed:!0,value:[{name:"CertificationRequest.signatureAlgorithm.algorithm",tagClass:_.Class.UNIVERSAL,type:_.Type.OID,constructed:!1,capture:"csrSignatureOid"},{name:"CertificationRequest.signatureAlgorithm.parameters",tagClass:_.Class.UNIVERSAL,optional:!0,captureAsn1:"csrSignatureParams"}]},{name:"CertificationRequest.signature",tagClass:_.Class.UNIVERSAL,type:_.Type.BITSTRING,constructed:!1,captureBitStringValue:"csrSignature"}]};c0.RDNAttributesAsArray=function(i,e){for(var u=[],r,a,s,n=0;n2)throw new Error("Cannot read notBefore/notAfter validity times; more than two times were provided in the certificate.");if(d.length<2)throw new Error("Cannot read notBefore/notAfter validity times; they were not provided as either UTCTime or GeneralizedTime.");if(n.validity.notBefore=d[0],n.validity.notAfter=d[1],n.tbsCertificate=u.tbsCertificate,e){n.md=nc({signatureOid:n.signatureOid,type:"certificate"});var p=_.toDer(n.tbsCertificate);n.md.update(p.getBytes())}var h=B0.md.sha1.create(),f=_.toDer(u.certIssuer);h.update(f.getBytes()),n.issuer.getField=function(O){return Mr(n.issuer,O)},n.issuer.addField=function(O){Du([O]),n.issuer.attributes.push(O)},n.issuer.attributes=c0.RDNAttributesAsArray(u.certIssuer),u.certIssuerUniqueId&&(n.issuer.uniqueId=u.certIssuerUniqueId),n.issuer.hash=h.digest().toHex();var S=B0.md.sha1.create(),m=_.toDer(u.certSubject);return S.update(m.getBytes()),n.subject.getField=function(O){return Mr(n.subject,O)},n.subject.addField=function(O){Du([O]),n.subject.attributes.push(O)},n.subject.attributes=c0.RDNAttributesAsArray(u.certSubject),u.certSubjectUniqueId&&(n.subject.uniqueId=u.certSubjectUniqueId),n.subject.hash=S.digest().toHex(),u.certExtensions?n.extensions=c0.certificateExtensionsFromAsn1(u.certExtensions):n.extensions=[],n.publicKey=c0.publicKeyFromAsn1(u.subjectPublicKeyInfo),n};c0.certificateExtensionsFromAsn1=function(i){for(var e=[],u=0;u1&&(r=u.value.charCodeAt(1),a=u.value.length>2?u.value.charCodeAt(2):0),e.digitalSignature=(r&128)===128,e.nonRepudiation=(r&64)===64,e.keyEncipherment=(r&32)===32,e.dataEncipherment=(r&16)===16,e.keyAgreement=(r&8)===8,e.keyCertSign=(r&4)===4,e.cRLSign=(r&2)===2,e.encipherOnly=(r&1)===1,e.decipherOnly=(a&128)===128}else if(e.name==="basicConstraints"){var u=_.fromDer(e.value);u.value.length>0&&u.value[0].type===_.Type.BOOLEAN?e.cA=u.value[0].value.charCodeAt(0)!==0:e.cA=!1;var s=null;u.value.length>0&&u.value[0].type===_.Type.INTEGER?s=u.value[0].value:u.value.length>1&&(s=u.value[1].value),s!==null&&(e.pathLenConstraint=_.derToInteger(s))}else if(e.name==="extKeyUsage")for(var u=_.fromDer(e.value),n=0;n1&&(r=u.value.charCodeAt(1)),e.client=(r&128)===128,e.server=(r&64)===64,e.email=(r&32)===32,e.objsign=(r&16)===16,e.reserved=(r&8)===8,e.sslCA=(r&4)===4,e.emailCA=(r&2)===2,e.objCA=(r&1)===1}else if(e.name==="subjectAltName"||e.name==="issuerAltName"){e.altNames=[];for(var d,u=_.fromDer(e.value),p=0;p"u"&&(e.type&&e.type in c0.oids?e.name=c0.oids[e.type]:e.shortName&&e.shortName in Le&&(e.name=c0.oids[Le[e.shortName]])),typeof e.type>"u")if(e.name&&e.name in c0.oids)e.type=c0.oids[e.name];else{var r=new Error("Attribute type not specified.");throw r.attribute=e,r}if(typeof e.shortName>"u"&&e.name&&e.name in Le&&(e.shortName=Le[e.name]),e.type===F0.extensionRequest&&(e.valueConstructed=!0,e.valueTagClass=_.Type.SEQUENCE,!e.value&&e.extensions)){e.value=[];for(var a=0;a"u"){var r=new Error("Attribute value not specified.");throw r.attribute=e,r}}}c(Du,"_fillMissingFields");function CM(i,e){if(e=e||{},typeof i.name>"u"&&i.id&&i.id in c0.oids&&(i.name=c0.oids[i.id]),typeof i.id>"u")if(i.name&&i.name in c0.oids)i.id=c0.oids[i.name];else{var u=new Error("Extension ID not specified.");throw u.extension=i,u}if(typeof i.value<"u")return i;if(i.name==="keyUsage"){var r=0,a=0,s=0;i.digitalSignature&&(a|=128,r=7),i.nonRepudiation&&(a|=64,r=6),i.keyEncipherment&&(a|=32,r=5),i.dataEncipherment&&(a|=16,r=4),i.keyAgreement&&(a|=8,r=3),i.keyCertSign&&(a|=4,r=2),i.cRLSign&&(a|=2,r=1),i.encipherOnly&&(a|=1,r=0),i.decipherOnly&&(s|=128,r=7);var n=String.fromCharCode(r);s!==0?n+=String.fromCharCode(a)+String.fromCharCode(s):a!==0&&(n+=String.fromCharCode(a)),i.value=_.create(_.Class.UNIVERSAL,_.Type.BITSTRING,!1,n)}else if(i.name==="basicConstraints")i.value=_.create(_.Class.UNIVERSAL,_.Type.SEQUENCE,!0,[]),i.cA&&i.value.value.push(_.create(_.Class.UNIVERSAL,_.Type.BOOLEAN,!1,"\xFF")),"pathLenConstraint"in i&&i.value.value.push(_.create(_.Class.UNIVERSAL,_.Type.INTEGER,!1,_.integerToDer(i.pathLenConstraint).getBytes()));else if(i.name==="extKeyUsage"){i.value=_.create(_.Class.UNIVERSAL,_.Type.SEQUENCE,!0,[]);var l=i.value.value;for(var d in i)i[d]===!0&&(d in F0?l.push(_.create(_.Class.UNIVERSAL,_.Type.OID,!1,_.oidToDer(F0[d]).getBytes())):d.indexOf(".")!==-1&&l.push(_.create(_.Class.UNIVERSAL,_.Type.OID,!1,_.oidToDer(d).getBytes())))}else if(i.name==="nsCertType"){var r=0,a=0;i.client&&(a|=128,r=7),i.server&&(a|=64,r=6),i.email&&(a|=32,r=5),i.objsign&&(a|=16,r=4),i.reserved&&(a|=8,r=3),i.sslCA&&(a|=4,r=2),i.emailCA&&(a|=2,r=1),i.objCA&&(a|=1,r=0);var n=String.fromCharCode(r);a!==0&&(n+=String.fromCharCode(a)),i.value=_.create(_.Class.UNIVERSAL,_.Type.BITSTRING,!1,n)}else if(i.name==="subjectAltName"||i.name==="issuerAltName"){i.value=_.create(_.Class.UNIVERSAL,_.Type.SEQUENCE,!0,[]);for(var p,h=0;h128)throw new Error('Invalid "nsComment" content.');i.value=_.create(_.Class.UNIVERSAL,_.Type.IA5STRING,!1,i.comment)}else if(i.name==="subjectKeyIdentifier"&&e.cert){var f=e.cert.generateSubjectKeyIdentifier();i.subjectKeyIdentifier=f.toHex(),i.value=_.create(_.Class.UNIVERSAL,_.Type.OCTETSTRING,!1,f.getBytes())}else if(i.name==="authorityKeyIdentifier"&&e.cert){i.value=_.create(_.Class.UNIVERSAL,_.Type.SEQUENCE,!0,[]);var l=i.value.value;if(i.keyIdentifier){var S=i.keyIdentifier===!0?e.cert.generateSubjectKeyIdentifier().getBytes():i.keyIdentifier;l.push(_.create(_.Class.CONTEXT_SPECIFIC,0,!1,S))}if(i.authorityCertIssuer){var m=[_.create(_.Class.CONTEXT_SPECIFIC,4,!0,[ga(i.authorityCertIssuer===!0?e.cert.issuer:i.authorityCertIssuer)])];l.push(_.create(_.Class.CONTEXT_SPECIFIC,1,!0,m))}if(i.serialNumber){var O=B0.util.hexToBytes(i.serialNumber===!0?e.cert.serialNumber:i.serialNumber);l.push(_.create(_.Class.CONTEXT_SPECIFIC,2,!1,O))}}else if(i.name==="cRLDistributionPoints"){i.value=_.create(_.Class.UNIVERSAL,_.Type.SEQUENCE,!0,[]);for(var l=i.value.value,M=_.create(_.Class.UNIVERSAL,_.Type.SEQUENCE,!0,[]),T=_.create(_.Class.CONTEXT_SPECIFIC,0,!0,[]),p,h=0;h"u"){var u=new Error("Extension value not specified.");throw u.extension=i,u}return i}c(CM,"_fillMissingExtensionFields");function yh(i,e){switch(i){case F0["RSASSA-PSS"]:var u=[];return e.hash.algorithmOid!==void 0&&u.push(_.create(_.Class.CONTEXT_SPECIFIC,0,!0,[_.create(_.Class.UNIVERSAL,_.Type.SEQUENCE,!0,[_.create(_.Class.UNIVERSAL,_.Type.OID,!1,_.oidToDer(e.hash.algorithmOid).getBytes()),_.create(_.Class.UNIVERSAL,_.Type.NULL,!1,"")])])),e.mgf.algorithmOid!==void 0&&u.push(_.create(_.Class.CONTEXT_SPECIFIC,1,!0,[_.create(_.Class.UNIVERSAL,_.Type.SEQUENCE,!0,[_.create(_.Class.UNIVERSAL,_.Type.OID,!1,_.oidToDer(e.mgf.algorithmOid).getBytes()),_.create(_.Class.UNIVERSAL,_.Type.SEQUENCE,!0,[_.create(_.Class.UNIVERSAL,_.Type.OID,!1,_.oidToDer(e.mgf.hash.algorithmOid).getBytes()),_.create(_.Class.UNIVERSAL,_.Type.NULL,!1,"")])])])),e.saltLength!==void 0&&u.push(_.create(_.Class.CONTEXT_SPECIFIC,2,!0,[_.create(_.Class.UNIVERSAL,_.Type.INTEGER,!1,_.integerToDer(e.saltLength).getBytes())])),_.create(_.Class.UNIVERSAL,_.Type.SEQUENCE,!0,u);default:return _.create(_.Class.UNIVERSAL,_.Type.NULL,!1,"")}}c(yh,"_signatureParametersToAsn1");function gD(i){var e=_.create(_.Class.CONTEXT_SPECIFIC,0,!0,[]);if(i.attributes.length===0)return e;for(var u=i.attributes,r=0;r=yD&&i0&&r.value.push(c0.certificateExtensionsToAsn1(i.extensions)),r};c0.getCertificationRequestInfo=function(i){var e=_.create(_.Class.UNIVERSAL,_.Type.SEQUENCE,!0,[_.create(_.Class.UNIVERSAL,_.Type.INTEGER,!1,_.integerToDer(i.version).getBytes()),ga(i.subject),c0.publicKeyToAsn1(i.publicKey),gD(i)]);return e};c0.distinguishedNameToAsn1=function(i){return ga(i)};c0.certificateToAsn1=function(i){var e=i.tbsCertificate||c0.getTBSCertificate(i);return _.create(_.Class.UNIVERSAL,_.Type.SEQUENCE,!0,[e,_.create(_.Class.UNIVERSAL,_.Type.SEQUENCE,!0,[_.create(_.Class.UNIVERSAL,_.Type.OID,!1,_.oidToDer(i.signatureOid).getBytes()),yh(i.signatureOid,i.signatureParameters)]),_.create(_.Class.UNIVERSAL,_.Type.BITSTRING,!1,"\0"+i.signature)])};c0.certificateExtensionsToAsn1=function(i){var e=_.create(_.Class.CONTEXT_SPECIFIC,3,!0,[]),u=_.create(_.Class.UNIVERSAL,_.Type.SEQUENCE,!0,[]);e.value.push(u);for(var r=0;r"u"&&(a=new Date);var s=!0,n=null,l=0;do{var d=e.shift(),p=null,h=!1;if(a&&(ad.validity.notAfter)&&(n={message:"Certificate is not valid yet or has expired.",error:c0.certificateError.certificate_expired,notBefore:d.validity.notBefore,notAfter:d.validity.notAfter,now:a}),n===null){if(p=e[0]||i.getIssuer(d),p===null&&d.isIssuer(d)&&(h=!0,p=d),p){var f=p;B0.util.isArray(f)||(f=[f]);for(var S=!1;!S&&f.length>0;){p=f.shift();try{S=p.verify(d)}catch{}}S||(n={message:"Certificate signature is invalid.",error:c0.certificateError.bad_certificate})}n===null&&(!p||h)&&!i.hasCertificate(d)&&(n={message:"Certificate is not trusted.",error:c0.certificateError.unknown_ca})}if(n===null&&p&&!d.isIssuer(p)&&(n={message:"Certificate issuer is invalid.",error:c0.certificateError.bad_certificate}),n===null)for(var m={keyUsage:!0,basicConstraints:!0},O=0;n===null&&OT.pathLenConstraint&&(n={message:"Certificate basicConstraints pathLenConstraint violated.",error:c0.certificateError.bad_certificate})}}var N=n===null?!0:n.error,D=u.verify?u.verify(N,l,r):N;if(D===!0)n=null;else throw N===!0&&(n={message:"The application rejected the certificate.",error:c0.certificateError.bad_certificate}),(D||D===0)&&(typeof D=="object"&&!B0.util.isArray(D)?(D.message&&(n.message=D.message),D.error&&(n.error=D.error)):typeof D=="string"&&(n.error=D)),n;s=!1,++l}while(e.length>0);return!0}});var Ch=v((FX,xM)=>{var ae=y0();Xu();Ba();Er();Rh();Yh();bu();bn();Aa();G0();oc();var P=ae.asn1,x0=ae.pki,vn=xM.exports=ae.pkcs12=ae.pkcs12||{},bM={name:"ContentInfo",tagClass:P.Class.UNIVERSAL,type:P.Type.SEQUENCE,constructed:!0,value:[{name:"ContentInfo.contentType",tagClass:P.Class.UNIVERSAL,type:P.Type.OID,constructed:!1,capture:"contentType"},{name:"ContentInfo.content",tagClass:P.Class.CONTEXT_SPECIFIC,constructed:!0,captureAsn1:"content"}]},CD={name:"PFX",tagClass:P.Class.UNIVERSAL,type:P.Type.SEQUENCE,constructed:!0,value:[{name:"PFX.version",tagClass:P.Class.UNIVERSAL,type:P.Type.INTEGER,constructed:!1,capture:"version"},bM,{name:"PFX.macData",tagClass:P.Class.UNIVERSAL,type:P.Type.SEQUENCE,constructed:!0,optional:!0,captureAsn1:"mac",value:[{name:"PFX.macData.mac",tagClass:P.Class.UNIVERSAL,type:P.Type.SEQUENCE,constructed:!0,value:[{name:"PFX.macData.mac.digestAlgorithm",tagClass:P.Class.UNIVERSAL,type:P.Type.SEQUENCE,constructed:!0,value:[{name:"PFX.macData.mac.digestAlgorithm.algorithm",tagClass:P.Class.UNIVERSAL,type:P.Type.OID,constructed:!1,capture:"macAlgorithm"},{name:"PFX.macData.mac.digestAlgorithm.parameters",tagClass:P.Class.UNIVERSAL,captureAsn1:"macAlgorithmParameters"}]},{name:"PFX.macData.mac.digest",tagClass:P.Class.UNIVERSAL,type:P.Type.OCTETSTRING,constructed:!1,capture:"macDigest"}]},{name:"PFX.macData.macSalt",tagClass:P.Class.UNIVERSAL,type:P.Type.OCTETSTRING,constructed:!1,capture:"macSalt"},{name:"PFX.macData.iterations",tagClass:P.Class.UNIVERSAL,type:P.Type.INTEGER,constructed:!1,optional:!0,capture:"macIterations"}]}]},ID={name:"SafeBag",tagClass:P.Class.UNIVERSAL,type:P.Type.SEQUENCE,constructed:!0,value:[{name:"SafeBag.bagId",tagClass:P.Class.UNIVERSAL,type:P.Type.OID,constructed:!1,capture:"bagId"},{name:"SafeBag.bagValue",tagClass:P.Class.CONTEXT_SPECIFIC,constructed:!0,captureAsn1:"bagValue"},{name:"SafeBag.bagAttributes",tagClass:P.Class.UNIVERSAL,type:P.Type.SET,constructed:!0,optional:!0,capture:"bagAttributes"}]},bD={name:"Attribute",tagClass:P.Class.UNIVERSAL,type:P.Type.SEQUENCE,constructed:!0,value:[{name:"Attribute.attrId",tagClass:P.Class.UNIVERSAL,type:P.Type.OID,constructed:!1,capture:"oid"},{name:"Attribute.attrValues",tagClass:P.Class.UNIVERSAL,type:P.Type.SET,constructed:!0,capture:"values"}]},xD={name:"CertBag",tagClass:P.Class.UNIVERSAL,type:P.Type.SEQUENCE,constructed:!0,value:[{name:"CertBag.certId",tagClass:P.Class.UNIVERSAL,type:P.Type.OID,constructed:!1,capture:"certId"},{name:"CertBag.certValue",tagClass:P.Class.CONTEXT_SPECIFIC,constructed:!0,value:[{name:"CertBag.certValue[0]",tagClass:P.Class.UNIVERSAL,type:P.Class.OCTETSTRING,constructed:!1,capture:"cert"}]}]};function xn(i,e,u,r){for(var a=[],s=0;s=0&&a.push(l)}}return a}c(xn,"_getBagsByAttribute");vn.pkcs12FromAsn1=function(i,e,u){typeof e=="string"?(u=e,e=!0):e===void 0&&(e=!0);var r={},a=[];if(!P.validate(i,CD,r,a)){var s=new Error("Cannot read PKCS#12 PFX. ASN.1 object is not an PKCS#12 PFX.");throw s.errors=s,s}var n={version:r.version.charCodeAt(0),safeContents:[],getBags:function(T){var L={},I;return"localKeyId"in T?I=T.localKeyId:"localKeyIdHex"in T&&(I=ae.util.hexToBytes(T.localKeyIdHex)),I===void 0&&!("friendlyName"in T)&&"bagType"in T&&(L[T.bagType]=xn(n.safeContents,null,null,T.bagType)),I!==void 0&&(L.localKeyId=xn(n.safeContents,"localKeyId",I,T.bagType)),"friendlyName"in T&&(L.friendlyName=xn(n.safeContents,"friendlyName",T.friendlyName,T.bagType)),L},getBagsByFriendlyName:function(T,L){return xn(n.safeContents,"friendlyName",T,L)},getBagsByLocalKeyId:function(T,L){return xn(n.safeContents,"localKeyId",T,L)}};if(r.version.charCodeAt(0)!==3){var s=new Error("PKCS#12 PFX of version other than 3 not supported.");throw s.version=r.version.charCodeAt(0),s}if(P.derToOid(r.contentType)!==x0.oids.data){var s=new Error("Only PKCS#12 PFX in password integrity mode supported.");throw s.oid=P.derToOid(r.contentType),s}var l=r.content.value[0];if(l.tagClass!==P.Class.UNIVERSAL||l.type!==P.Type.OCTETSTRING)throw new Error("PKCS#12 authSafe content data is not an OCTET STRING.");if(l=Nh(l),r.mac){var d=null,p=0,h=P.derToOid(r.macAlgorithm);switch(h){case x0.oids.sha1:d=ae.md.sha1.create(),p=20;break;case x0.oids.sha256:d=ae.md.sha256.create(),p=32;break;case x0.oids.sha384:d=ae.md.sha384.create(),p=48;break;case x0.oids.sha512:d=ae.md.sha512.create(),p=64;break;case x0.oids.md5:d=ae.md.md5.create(),p=16;break}if(d===null)throw new Error("PKCS#12 uses unsupported MAC algorithm: "+h);var f=new ae.util.ByteBuffer(r.macSalt),S="macIterations"in r?parseInt(ae.util.bytesToHex(r.macIterations),16):1,m=vn.generateKey(u,f,3,S,p,d),O=ae.hmac.create();O.start(d,m),O.update(l.value);var M=O.getMac();if(M.getBytes()!==r.macDigest)throw new Error("PKCS#12 MAC could not be verified. Invalid password?")}return vD(n,l.value,e,u),n};function Nh(i){if(i.composed||i.constructed){for(var e=ae.util.createBuffer(),u=0;u0&&(s=P.create(P.Class.UNIVERSAL,P.Type.SET,!0,d));var p=[],h=[];e!==null&&(ae.util.isArray(e)?h=e:h=[e]);for(var f=[],S=0;S0){var T=P.create(P.Class.UNIVERSAL,P.Type.SEQUENCE,!0,f),L=P.create(P.Class.UNIVERSAL,P.Type.SEQUENCE,!0,[P.create(P.Class.UNIVERSAL,P.Type.OID,!1,P.oidToDer(x0.oids.data).getBytes()),P.create(P.Class.CONTEXT_SPECIFIC,0,!0,[P.create(P.Class.UNIVERSAL,P.Type.OCTETSTRING,!1,P.toDer(T).getBytes())])]);p.push(L)}var I=null;if(i!==null){var N=x0.wrapRsaPrivateKey(x0.privateKeyToAsn1(i));u===null?I=P.create(P.Class.UNIVERSAL,P.Type.SEQUENCE,!0,[P.create(P.Class.UNIVERSAL,P.Type.OID,!1,P.oidToDer(x0.oids.keyBag).getBytes()),P.create(P.Class.CONTEXT_SPECIFIC,0,!0,[N]),s]):I=P.create(P.Class.UNIVERSAL,P.Type.SEQUENCE,!0,[P.create(P.Class.UNIVERSAL,P.Type.OID,!1,P.oidToDer(x0.oids.pkcs8ShroudedKeyBag).getBytes()),P.create(P.Class.CONTEXT_SPECIFIC,0,!0,[x0.encryptPrivateKeyInfo(N,u,r)]),s]);var D=P.create(P.Class.UNIVERSAL,P.Type.SEQUENCE,!0,[I]),E=P.create(P.Class.UNIVERSAL,P.Type.SEQUENCE,!0,[P.create(P.Class.UNIVERSAL,P.Type.OID,!1,P.oidToDer(x0.oids.data).getBytes()),P.create(P.Class.CONTEXT_SPECIFIC,0,!0,[P.create(P.Class.UNIVERSAL,P.Type.OCTETSTRING,!1,P.toDer(D).getBytes())])]);p.push(E)}var R=P.create(P.Class.UNIVERSAL,P.Type.SEQUENCE,!0,p),x;if(r.useMac){var l=ae.md.sha1.create(),k=new ae.util.ByteBuffer(ae.random.getBytes(r.saltSize)),w=r.count,i=vn.generateKey(u,k,3,w,20),j=ae.hmac.create();j.start(l,i),j.update(P.toDer(R).getBytes());var Z=j.getMac();x=P.create(P.Class.UNIVERSAL,P.Type.SEQUENCE,!0,[P.create(P.Class.UNIVERSAL,P.Type.SEQUENCE,!0,[P.create(P.Class.UNIVERSAL,P.Type.SEQUENCE,!0,[P.create(P.Class.UNIVERSAL,P.Type.OID,!1,P.oidToDer(x0.oids.sha1).getBytes()),P.create(P.Class.UNIVERSAL,P.Type.NULL,!1,"")]),P.create(P.Class.UNIVERSAL,P.Type.OCTETSTRING,!1,Z.getBytes())]),P.create(P.Class.UNIVERSAL,P.Type.OCTETSTRING,!1,k.getBytes()),P.create(P.Class.UNIVERSAL,P.Type.INTEGER,!1,P.integerToDer(w).getBytes())])}return P.create(P.Class.UNIVERSAL,P.Type.SEQUENCE,!0,[P.create(P.Class.UNIVERSAL,P.Type.INTEGER,!1,P.integerToDer(3).getBytes()),P.create(P.Class.UNIVERSAL,P.Type.SEQUENCE,!0,[P.create(P.Class.UNIVERSAL,P.Type.OID,!1,P.oidToDer(x0.oids.data).getBytes()),P.create(P.Class.CONTEXT_SPECIFIC,0,!0,[P.create(P.Class.UNIVERSAL,P.Type.OCTETSTRING,!1,P.toDer(R).getBytes())])]),x])};vn.generateKey=ae.pbe.generatePkcs12Key});var bh=v((VX,vM)=>{var Tr=y0();Xu();Er();Yh();ai();zl();Ch();ac();bn();G0();oc();var Ih=Tr.asn1,ya=vM.exports=Tr.pki=Tr.pki||{};ya.pemToDer=function(i){var e=Tr.pem.decode(i)[0];if(e.procType&&e.procType.type==="ENCRYPTED")throw new Error("Could not convert PEM to DER; PEM is encrypted.");return Tr.util.createBuffer(e.body)};ya.privateKeyFromPem=function(i){var e=Tr.pem.decode(i)[0];if(e.type!=="PRIVATE KEY"&&e.type!=="RSA PRIVATE KEY"){var u=new Error('Could not convert private key from PEM; PEM header type is not "PRIVATE KEY" or "RSA PRIVATE KEY".');throw u.headerType=e.type,u}if(e.procType&&e.procType.type==="ENCRYPTED")throw new Error("Could not convert private key from PEM; PEM is encrypted.");var r=Ih.fromDer(e.body);return ya.privateKeyFromAsn1(r)};ya.privateKeyToPem=function(i,e){var u={type:"RSA PRIVATE KEY",body:Ih.toDer(ya.privateKeyToAsn1(i)).getBytes()};return Tr.pem.encode(u,{maxline:e})};ya.privateKeyInfoToPem=function(i,e){var u={type:"PRIVATE KEY",body:Ih.toDer(i).getBytes()};return Tr.pem.encode(u,{maxline:e})}});var Ph=v((GX,VM)=>{var a0=y0();Xu();Ba();Xl();ai();bh();bu();Aa();G0();var pc=c(function(i,e,u,r){var a=a0.util.createBuffer(),s=i.length>>1,n=s+(i.length&1),l=i.substr(0,n),d=i.substr(s,n),p=a0.util.createBuffer(),h=a0.hmac.create();u=e+u;var f=Math.ceil(r/16),S=Math.ceil(r/20);h.start("MD5",l);var m=a0.util.createBuffer();p.putBytes(u);for(var O=0;O0&&(g.queue(i,g.createAlert(i,{level:g.Alert.Level.warning,description:g.Alert.Description.no_renegotiation})),g.flush(i)),i.process()};g.parseHelloMessage=function(i,e,u){var r=null,a=i.entity===g.ConnectionEnd.client;if(u<38)i.error(i,{message:a?"Invalid ServerHello message. Message too short.":"Invalid ClientHello message. Message too short.",send:!0,alert:{level:g.Alert.Level.fatal,description:g.Alert.Description.illegal_parameter}});else{var s=e.fragment,n=s.length();if(r={version:{major:s.getByte(),minor:s.getByte()},random:a0.util.createBuffer(s.getBytes(32)),session_id:Tu(s,1),extensions:[]},a?(r.cipher_suite=s.getBytes(2),r.compression_method=s.getByte()):(r.cipher_suites=Tu(s,2),r.compression_methods=Tu(s,1)),n=u-(n-s.length()),n>0){for(var l=Tu(s,2);l.length()>0;)r.extensions.push({type:[l.getByte(),l.getByte()],data:Tu(l,2)});if(!a)for(var d=0;d0;){var f=h.getByte();if(f!==0)break;i.session.extensions.server_name.serverNameList.push(Tu(h,2).getBytes())}}}if(i.session.version&&(r.version.major!==i.session.version.major||r.version.minor!==i.session.version.minor))return i.error(i,{message:"TLS version change is disallowed during renegotiation.",send:!0,alert:{level:g.Alert.Level.fatal,description:g.Alert.Description.protocol_version}});if(a)i.session.cipherSuite=g.getCipherSuite(r.cipher_suite);else for(var S=a0.util.createBuffer(r.cipher_suites.bytes());S.length()>0&&(i.session.cipherSuite=g.getCipherSuite(S.getBytes(2)),i.session.cipherSuite===null););if(i.session.cipherSuite===null)return i.error(i,{message:"No cipher suites in common.",send:!0,alert:{level:g.Alert.Level.fatal,description:g.Alert.Description.handshake_failure},cipherSuite:a0.util.bytesToHex(r.cipher_suite)});a?i.session.compressionMethod=r.compression_method:i.session.compressionMethod=g.CompressionMethod.none}return r};g.createSecurityParameters=function(i,e){var u=i.entity===g.ConnectionEnd.client,r=e.random.bytes(),a=u?i.session.sp.client_random:r,s=u?r:g.createRandom().getBytes();i.session.sp={entity:i.entity,prf_algorithm:g.PRFAlgorithm.tls_prf_sha256,bulk_cipher_algorithm:null,cipher_type:null,enc_key_length:null,block_length:null,fixed_iv_length:null,record_iv_length:null,mac_algorithm:null,mac_length:null,mac_key_length:null,compression_algorithm:i.session.compressionMethod,pre_master_secret:null,master_secret:null,client_random:a,server_random:s}};g.handleServerHello=function(i,e,u){var r=g.parseHelloMessage(i,e,u);if(!i.fail){if(r.version.minor<=i.version.minor)i.version.minor=r.version.minor;else return i.error(i,{message:"Incompatible TLS version.",send:!0,alert:{level:g.Alert.Level.fatal,description:g.Alert.Description.protocol_version}});i.session.version=i.version;var a=r.session_id.bytes();a.length>0&&a===i.session.id?(i.expect=UM,i.session.resuming=!0,i.session.sp.server_random=r.random.bytes()):(i.expect=VD,i.session.resuming=!1,g.createSecurityParameters(i,r)),i.session.id=a,i.process()}};g.handleClientHello=function(i,e,u){var r=g.parseHelloMessage(i,e,u);if(!i.fail){var a=r.session_id.bytes(),s=null;if(i.sessionCache&&(s=i.sessionCache.getSession(a),s===null?a="":(s.version.major!==r.version.major||s.version.minor>r.version.minor)&&(s=null,a="")),a.length===0&&(a=a0.random.getBytes(32)),i.session.id=a,i.session.clientHelloVersion=r.version,i.session.sp={},s)i.version=i.session.version=s.version,i.session.sp=s.sp;else{for(var n,l=1;l0;)s=Tu(a.certificate_list,3),n=a0.asn1.fromDer(s),s=a0.pki.certificateFromAsn1(n,!0),l.push(s)}catch(p){return i.error(i,{message:"Could not parse certificate list.",cause:p,send:!0,alert:{level:g.Alert.Level.fatal,description:g.Alert.Description.bad_certificate}})}var d=i.entity===g.ConnectionEnd.client;(d||i.verifyClient===!0)&&l.length===0?i.error(i,{message:d?"No server certificate provided.":"No client certificate provided.",send:!0,alert:{level:g.Alert.Level.fatal,description:g.Alert.Description.illegal_parameter}}):l.length===0?i.expect=d?DM:Dh:(d?i.session.serverCertificate=l[0]:i.session.clientCertificate=l[0],g.verifyCertificateChain(i,l)&&(i.expect=d?DM:Dh)),i.process()};g.handleServerKeyExchange=function(i,e,u){if(u>0)return i.error(i,{message:"Invalid key parameters. Only RSA is supported.",send:!0,alert:{level:g.Alert.Level.fatal,description:g.Alert.Description.unsupported_certificate}});i.expect=GD,i.process()};g.handleClientKeyExchange=function(i,e,u){if(u<48)return i.error(i,{message:"Invalid key parameters. Only RSA is supported.",send:!0,alert:{level:g.Alert.Level.fatal,description:g.Alert.Description.unsupported_certificate}});var r=e.fragment,a={enc_pre_master_secret:Tu(r,2).getBytes()},s=null;if(i.getPrivateKey)try{s=i.getPrivateKey(i,i.session.serverCertificate),s=a0.pki.privateKeyFromPem(s)}catch(d){i.error(i,{message:"Could not get private key.",cause:d,send:!0,alert:{level:g.Alert.Level.fatal,description:g.Alert.Description.internal_error}})}if(s===null)return i.error(i,{message:"No private key set.",send:!0,alert:{level:g.Alert.Level.fatal,description:g.Alert.Description.internal_error}});try{var n=i.session.sp;n.pre_master_secret=s.decrypt(a.enc_pre_master_secret);var l=i.session.clientHelloVersion;if(l.major!==n.pre_master_secret.charCodeAt(0)||l.minor!==n.pre_master_secret.charCodeAt(1))throw new Error("TLS version rollback attack detected.")}catch{n.pre_master_secret=a0.random.getBytes(48)}i.expect=wh,i.session.clientCertificate!==null&&(i.expect=JD),i.process()};g.handleCertificateRequest=function(i,e,u){if(u<3)return i.error(i,{message:"Invalid CertificateRequest. Message too short.",send:!0,alert:{level:g.Alert.Level.fatal,description:g.Alert.Description.illegal_parameter}});var r=e.fragment,a={certificate_types:Tu(r,1),certificate_authorities:Tu(r,2)};i.session.certificateRequest=a,i.expect=qD,i.process()};g.handleCertificateVerify=function(i,e,u){if(u<2)return i.error(i,{message:"Invalid CertificateVerify. Message too short.",send:!0,alert:{level:g.Alert.Level.fatal,description:g.Alert.Description.illegal_parameter}});var r=e.fragment;r.read-=4;var a=r.bytes();r.read+=4;var s={signature:Tu(r,2).getBytes()},n=a0.util.createBuffer();n.putBuffer(i.session.md5.digest()),n.putBuffer(i.session.sha1.digest()),n=n.getBytes();try{var l=i.session.clientCertificate;if(!l.publicKey.verify(n,s.signature,"NONE"))throw new Error("CertificateVerify signature does not match.");i.session.md5.update(a),i.session.sha1.update(a)}catch{return i.error(i,{message:"Bad signature in CertificateVerify.",send:!0,alert:{level:g.Alert.Level.fatal,description:g.Alert.Description.handshake_failure}})}i.expect=wh,i.process()};g.handleServerHelloDone=function(i,e,u){if(u>0)return i.error(i,{message:"Invalid ServerHelloDone message. Invalid length.",send:!0,alert:{level:g.Alert.Level.fatal,description:g.Alert.Description.record_overflow}});if(i.serverCertificate===null){var r={message:"No server certificate provided. Not enough security.",send:!0,alert:{level:g.Alert.Level.fatal,description:g.Alert.Description.insufficient_security}},a=0,s=i.verify(i,r.alert.description,a,[]);if(s!==!0)return(s||s===0)&&(typeof s=="object"&&!a0.util.isArray(s)?(s.message&&(r.message=s.message),s.alert&&(r.alert.description=s.alert)):typeof s=="number"&&(r.alert.description=s)),i.error(i,r)}i.session.certificateRequest!==null&&(e=g.createRecord(i,{type:g.ContentType.handshake,data:g.createCertificate(i)}),g.queue(i,e)),e=g.createRecord(i,{type:g.ContentType.handshake,data:g.createClientKeyExchange(i)}),g.queue(i,e),i.expect=jD;var n=c(function(l,d){l.session.certificateRequest!==null&&l.session.clientCertificate!==null&&g.queue(l,g.createRecord(l,{type:g.ContentType.handshake,data:g.createCertificateVerify(l,d)})),g.queue(l,g.createRecord(l,{type:g.ContentType.change_cipher_spec,data:g.createChangeCipherSpec()})),l.state.pending=g.createConnectionState(l),l.state.current.write=l.state.pending.write,g.queue(l,g.createRecord(l,{type:g.ContentType.handshake,data:g.createFinished(l)})),l.expect=UM,g.flush(l),l.process()},"callback");if(i.session.certificateRequest===null||i.session.clientCertificate===null)return n(i,null);g.getClientSignature(i,n)};g.handleChangeCipherSpec=function(i,e){if(e.fragment.getByte()!==1)return i.error(i,{message:"Invalid ChangeCipherSpec message received.",send:!0,alert:{level:g.Alert.Level.fatal,description:g.Alert.Description.illegal_parameter}});var u=i.entity===g.ConnectionEnd.client;(i.session.resuming&&u||!i.session.resuming&&!u)&&(i.state.pending=g.createConnectionState(i)),i.state.current.read=i.state.pending.read,(!i.session.resuming&&u||i.session.resuming&&!u)&&(i.state.pending=null),i.expect=u?KD:$D,i.process()};g.handleFinished=function(i,e,u){var r=e.fragment;r.read-=4;var a=r.bytes();r.read+=4;var s=e.fragment.getBytes();r=a0.util.createBuffer(),r.putBuffer(i.session.md5.digest()),r.putBuffer(i.session.sha1.digest());var n=i.entity===g.ConnectionEnd.client,l=n?"server finished":"client finished",d=i.session.sp,p=12,h=pc;if(r=h(d.master_secret,l,r.getBytes(),p),r.getBytes()!==s)return i.error(i,{message:"Invalid verify_data in Finished message.",send:!0,alert:{level:g.Alert.Level.fatal,description:g.Alert.Description.decrypt_error}});i.session.md5.update(a),i.session.sha1.update(a),(i.session.resuming&&n||!i.session.resuming&&!n)&&(g.queue(i,g.createRecord(i,{type:g.ContentType.change_cipher_spec,data:g.createChangeCipherSpec()})),i.state.current.write=i.state.pending.write,i.state.pending=null,g.queue(i,g.createRecord(i,{type:g.ContentType.handshake,data:g.createFinished(i)}))),i.expect=n?WD:zD,i.handshaking=!1,++i.handshakes,i.peerCertificate=n?i.session.serverCertificate:i.session.clientCertificate,g.flush(i),i.isConnected=!0,i.connected(i),i.process()};g.handleAlert=function(i,e){var u=e.fragment,r={level:u.getByte(),description:u.getByte()},a;switch(r.description){case g.Alert.Description.close_notify:a="Connection closed.";break;case g.Alert.Description.unexpected_message:a="Unexpected message.";break;case g.Alert.Description.bad_record_mac:a="Bad record MAC.";break;case g.Alert.Description.decryption_failed:a="Decryption failed.";break;case g.Alert.Description.record_overflow:a="Record overflow.";break;case g.Alert.Description.decompression_failure:a="Decompression failed.";break;case g.Alert.Description.handshake_failure:a="Handshake failure.";break;case g.Alert.Description.bad_certificate:a="Bad certificate.";break;case g.Alert.Description.unsupported_certificate:a="Unsupported certificate.";break;case g.Alert.Description.certificate_revoked:a="Certificate revoked.";break;case g.Alert.Description.certificate_expired:a="Certificate expired.";break;case g.Alert.Description.certificate_unknown:a="Certificate unknown.";break;case g.Alert.Description.illegal_parameter:a="Illegal parameter.";break;case g.Alert.Description.unknown_ca:a="Unknown certificate authority.";break;case g.Alert.Description.access_denied:a="Access denied.";break;case g.Alert.Description.decode_error:a="Decode error.";break;case g.Alert.Description.decrypt_error:a="Decrypt error.";break;case g.Alert.Description.export_restriction:a="Export restriction.";break;case g.Alert.Description.protocol_version:a="Unsupported protocol version.";break;case g.Alert.Description.insufficient_security:a="Insufficient security.";break;case g.Alert.Description.internal_error:a="Internal error.";break;case g.Alert.Description.user_canceled:a="User canceled.";break;case g.Alert.Description.no_renegotiation:a="Renegotiation not supported.";break;default:a="Unknown error.";break}if(r.description===g.Alert.Description.close_notify)return i.close();i.error(i,{message:a,send:!1,origin:i.entity===g.ConnectionEnd.client?"server":"client",alert:r}),i.process()};g.handleHandshake=function(i,e){var u=e.fragment,r=u.getByte(),a=u.getInt24();if(a>u.length())return i.fragmented=e,e.fragment=a0.util.createBuffer(),u.read-=4,i.process();i.fragmented=null,u.read-=4;var s=u.bytes(a+4);u.read+=4,r in dc[i.entity][i.expect]?(i.entity===g.ConnectionEnd.server&&!i.open&&!i.fail&&(i.handshaking=!0,i.session={version:null,extensions:{server_name:{serverNameList:[]}},cipherSuite:null,compressionMethod:null,serverCertificate:null,clientCertificate:null,md5:a0.md.md5.create(),sha1:a0.md.sha1.create()}),r!==g.HandshakeType.hello_request&&r!==g.HandshakeType.certificate_verify&&r!==g.HandshakeType.finished&&(i.session.md5.update(s),i.session.sha1.update(s)),dc[i.entity][i.expect][r](i,e,a)):g.handleUnexpected(i,e)};g.handleApplicationData=function(i,e){i.data.putBuffer(e.fragment),i.dataReady(i),i.process()};g.handleHeartbeat=function(i,e){var u=e.fragment,r=u.getByte(),a=u.getInt16(),s=u.getBytes(a);if(r===g.HeartbeatMessageType.heartbeat_request){if(i.handshaking||a>s.length)return i.process();g.queue(i,g.createRecord(i,{type:g.ContentType.heartbeat,data:g.createHeartbeat(g.HeartbeatMessageType.heartbeat_response,s)})),g.flush(i)}else if(r===g.HeartbeatMessageType.heartbeat_response){if(s!==i.expectedHeartbeatPayload)return i.process();i.heartbeatReceived&&i.heartbeatReceived(i,a0.util.createBuffer(s))}i.process()};var HD=0,VD=1,DM=2,GD=3,qD=4,UM=5,KD=6,WD=7,jD=8,XD=0,QD=1,Dh=2,JD=3,wh=4,$D=5,zD=6,Y=g.handleUnexpected,PM=g.handleChangeCipherSpec,Ue=g.handleAlert,tu=g.handleHandshake,kM=g.handleApplicationData,Pe=g.handleHeartbeat,Uh=[];Uh[g.ConnectionEnd.client]=[[Y,Ue,tu,Y,Pe],[Y,Ue,tu,Y,Pe],[Y,Ue,tu,Y,Pe],[Y,Ue,tu,Y,Pe],[Y,Ue,tu,Y,Pe],[PM,Ue,Y,Y,Pe],[Y,Ue,tu,Y,Pe],[Y,Ue,tu,kM,Pe],[Y,Ue,tu,Y,Pe]];Uh[g.ConnectionEnd.server]=[[Y,Ue,tu,Y,Pe],[Y,Ue,tu,Y,Pe],[Y,Ue,tu,Y,Pe],[Y,Ue,tu,Y,Pe],[PM,Ue,Y,Y,Pe],[Y,Ue,tu,Y,Pe],[Y,Ue,tu,kM,Pe],[Y,Ue,tu,Y,Pe]];var _r=g.handleHelloRequest,ZD=g.handleServerHello,FM=g.handleCertificate,wM=g.handleServerKeyExchange,xh=g.handleCertificateRequest,lc=g.handleServerHelloDone,HM=g.handleFinished,dc=[];dc[g.ConnectionEnd.client]=[[Y,Y,ZD,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y],[_r,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,FM,wM,xh,lc,Y,Y,Y,Y,Y,Y],[_r,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,wM,xh,lc,Y,Y,Y,Y,Y,Y],[_r,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,xh,lc,Y,Y,Y,Y,Y,Y],[_r,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,lc,Y,Y,Y,Y,Y,Y],[_r,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y],[_r,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,HM],[_r,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y],[_r,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y]];var ew=g.handleClientHello,uw=g.handleClientKeyExchange,tw=g.handleCertificateVerify;dc[g.ConnectionEnd.server]=[[Y,ew,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y],[Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,FM,Y,Y,Y,Y,Y,Y,Y,Y,Y],[Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,uw,Y,Y,Y,Y],[Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,tw,Y,Y,Y,Y,Y],[Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y],[Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,HM],[Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y],[Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y]];g.generateKeys=function(i,e){var u=pc,r=e.client_random+e.server_random;i.session.resuming||(e.master_secret=u(e.pre_master_secret,"master secret",r,48).bytes(),e.pre_master_secret=null),r=e.server_random+e.client_random;var a=2*e.mac_key_length+2*e.enc_key_length,s=i.version.major===g.Versions.TLS_1_0.major&&i.version.minor===g.Versions.TLS_1_0.minor;s&&(a+=2*e.fixed_iv_length);var n=u(e.master_secret,"key expansion",r,a),l={client_write_MAC_key:n.getBytes(e.mac_key_length),server_write_MAC_key:n.getBytes(e.mac_key_length),client_write_key:n.getBytes(e.enc_key_length),server_write_key:n.getBytes(e.enc_key_length)};return s&&(l.client_write_IV=n.getBytes(e.fixed_iv_length),l.server_write_IV=n.getBytes(e.fixed_iv_length)),l};g.createConnectionState=function(i){var e=i.entity===g.ConnectionEnd.client,u=c(function(){var s={sequenceNumber:[0,0],macKey:null,macLength:0,macFunction:null,cipherState:null,cipherFunction:function(n){return!0},compressionState:null,compressFunction:function(n){return!0},updateSequenceNumber:function(){s.sequenceNumber[1]===4294967295?(s.sequenceNumber[1]=0,++s.sequenceNumber[0]):++s.sequenceNumber[1]}};return s},"createMode"),r={read:u(),write:u()};if(r.read.update=function(s,n){return r.read.cipherFunction(n,r.read)?r.read.compressFunction(s,n,r.read)||s.error(s,{message:"Could not decompress record.",send:!0,alert:{level:g.Alert.Level.fatal,description:g.Alert.Description.decompression_failure}}):s.error(s,{message:"Could not decrypt record or bad MAC.",send:!0,alert:{level:g.Alert.Level.fatal,description:g.Alert.Description.bad_record_mac}}),!s.fail},r.write.update=function(s,n){return r.write.compressFunction(s,n,r.write)?r.write.cipherFunction(n,r.write)||s.error(s,{message:"Could not encrypt record.",send:!1,alert:{level:g.Alert.Level.fatal,description:g.Alert.Description.internal_error}}):s.error(s,{message:"Could not compress record.",send:!1,alert:{level:g.Alert.Level.fatal,description:g.Alert.Description.internal_error}}),!s.fail},i.session){var a=i.session.sp;switch(i.session.cipherSuite.initSecurityParameters(a),a.keys=g.generateKeys(i,a),r.read.macKey=e?a.keys.server_write_MAC_key:a.keys.client_write_MAC_key,r.write.macKey=e?a.keys.client_write_MAC_key:a.keys.server_write_MAC_key,i.session.cipherSuite.initConnectionState(r,i,a),a.compression_algorithm){case g.CompressionMethod.none:break;case g.CompressionMethod.deflate:r.read.compressFunction=FD,r.write.compressFunction=kD;break;default:throw new Error("Unsupported compression algorithm.")}}return r};g.createRandom=function(){var i=new Date,e=+i+i.getTimezoneOffset()*6e4,u=a0.util.createBuffer();return u.putInt32(e),u.putBytes(a0.random.getBytes(28)),u};g.createRecord=function(i,e){if(!e.data)return null;var u={type:e.type,version:{major:i.version.major,minor:i.version.minor},length:e.data.length(),fragment:e.data};return u};g.createAlert=function(i,e){var u=a0.util.createBuffer();return u.putByte(e.level),u.putByte(e.description),g.createRecord(i,{type:g.ContentType.alert,data:u})};g.createClientHello=function(i){i.session.clientHelloVersion={major:i.version.major,minor:i.version.minor};for(var e=a0.util.createBuffer(),u=0;u0&&(f+=2);var S=i.session.id,m=S.length+1+2+4+28+2+a+1+n+f,O=a0.util.createBuffer();return O.putByte(g.HandshakeType.client_hello),O.putInt24(m),O.putByte(i.version.major),O.putByte(i.version.minor),O.putBytes(i.session.sp.client_random),wu(O,1,a0.util.createBuffer(S)),wu(O,2,e),wu(O,1,s),f>0&&wu(O,2,l),O};g.createServerHello=function(i){var e=i.session.id,u=e.length+1+2+4+28+2+1,r=a0.util.createBuffer();return r.putByte(g.HandshakeType.server_hello),r.putInt24(u),r.putByte(i.version.major),r.putByte(i.version.minor),r.putBytes(i.session.sp.server_random),wu(r,1,a0.util.createBuffer(e)),r.putByte(i.session.cipherSuite.id[0]),r.putByte(i.session.cipherSuite.id[1]),r.putByte(i.session.compressionMethod),r};g.createCertificate=function(i){var e=i.entity===g.ConnectionEnd.client,u=null;if(i.getCertificate){var r;e?r=i.session.certificateRequest:r=i.session.extensions.server_name.serverNameList,u=i.getCertificate(i,r)}var a=a0.util.createBuffer();if(u!==null)try{a0.util.isArray(u)||(u=[u]);for(var s=null,n=0;n0&&(u.putByte(g.HandshakeType.server_key_exchange),u.putInt24(e)),u};g.getClientSignature=function(i,e){var u=a0.util.createBuffer();u.putBuffer(i.session.md5.digest()),u.putBuffer(i.session.sha1.digest()),u=u.getBytes(),i.getSignature=i.getSignature||function(r,a,s){var n=null;if(r.getPrivateKey)try{n=r.getPrivateKey(r,r.session.clientCertificate),n=a0.pki.privateKeyFromPem(n)}catch(l){r.error(r,{message:"Could not get private key.",cause:l,send:!0,alert:{level:g.Alert.Level.fatal,description:g.Alert.Description.internal_error}})}n===null?r.error(r,{message:"No private key set.",send:!0,alert:{level:g.Alert.Level.fatal,description:g.Alert.Description.internal_error}}):a=n.sign(a,null),s(r,a)},i.getSignature(i,u,e)};g.createCertificateVerify=function(i,e){var u=e.length+2,r=a0.util.createBuffer();return r.putByte(g.HandshakeType.certificate_verify),r.putInt24(u),r.putInt16(e.length),r.putBytes(e),r};g.createCertificateRequest=function(i){var e=a0.util.createBuffer();e.putByte(1);var u=a0.util.createBuffer();for(var r in i.caStore.certs){var a=i.caStore.certs[r],s=a0.pki.distinguishedNameToAsn1(a.subject),n=a0.asn1.toDer(s);u.putInt16(n.length()),u.putBuffer(n)}var l=1+e.length()+2+u.length(),d=a0.util.createBuffer();return d.putByte(g.HandshakeType.certificate_request),d.putInt24(l),wu(d,1,e),wu(d,2,u),d};g.createServerHelloDone=function(i){var e=a0.util.createBuffer();return e.putByte(g.HandshakeType.server_hello_done),e.putInt24(0),e};g.createChangeCipherSpec=function(){var i=a0.util.createBuffer();return i.putByte(1),i};g.createFinished=function(i){var e=a0.util.createBuffer();e.putBuffer(i.session.md5.digest()),e.putBuffer(i.session.sha1.digest());var u=i.entity===g.ConnectionEnd.client,r=i.session.sp,a=12,s=pc,n=u?"client finished":"server finished";e=s(r.master_secret,n,e.getBytes(),a);var l=a0.util.createBuffer();return l.putByte(g.HandshakeType.finished),l.putInt24(e.length()),l.putBuffer(e),l};g.createHeartbeat=function(i,e,u){typeof u>"u"&&(u=e.length);var r=a0.util.createBuffer();r.putByte(i),r.putInt16(u),r.putBytes(e);var a=r.length(),s=Math.max(16,a-u-3);return r.putBytes(a0.random.getBytes(s)),r};g.queue=function(i,e){if(e&&!(e.fragment.length()===0&&(e.type===g.ContentType.handshake||e.type===g.ContentType.alert||e.type===g.ContentType.change_cipher_spec))){if(e.type===g.ContentType.handshake){var u=e.fragment.bytes();i.session.md5.update(u),i.session.sha1.update(u),u=null}var r;if(e.fragment.length()<=g.MaxFragment)r=[e];else{r=[];for(var a=e.fragment.bytes();a.length>g.MaxFragment;)r.push(g.createRecord(i,{type:e.type,data:a0.util.createBuffer(a.slice(0,g.MaxFragment))})),a=a.slice(g.MaxFragment);a.length>0&&r.push(g.createRecord(i,{type:e.type,data:a0.util.createBuffer(a)}))}for(var s=0;s0&&(n=u.order[0]),n!==null&&n in u.cache){s=u.cache[n],delete u.cache[n];for(var l in u.order)if(u.order[l]===n){u.order.splice(l,1);break}}return s},u.setSession=function(a,s){if(u.order.length===u.capacity){var n=u.order.shift();delete u.cache[n]}var n=a0.util.bytesToHex(a);u.order.push(n),u.cache[n]=s}}return u};g.createConnection=function(i){var e=null;i.caStore?a0.util.isArray(i.caStore)?e=a0.pki.createCaStore(i.caStore):e=i.caStore:e=a0.pki.createCaStore();var u=i.cipherSuites||null;if(u===null){u=[];for(var r in g.CipherSuites)u.push(g.CipherSuites[r])}var a=i.server?g.ConnectionEnd.server:g.ConnectionEnd.client,s=i.sessionCache?g.createSessionCache(i.sessionCache):null,n={version:{major:g.Version.major,minor:g.Version.minor},entity:a,sessionId:i.sessionId,caStore:e,sessionCache:s,cipherSuites:u,connected:i.connected,virtualHost:i.virtualHost||null,verifyClient:i.verifyClient||!1,verify:i.verify||function(h,f,S,m){return f},verifyOptions:i.verifyOptions||{},getCertificate:i.getCertificate||null,getPrivateKey:i.getPrivateKey||null,getSignature:i.getSignature||null,input:a0.util.createBuffer(),tlsData:a0.util.createBuffer(),data:a0.util.createBuffer(),tlsDataReady:i.tlsDataReady,dataReady:i.dataReady,heartbeatReceived:i.heartbeatReceived,closed:i.closed,error:function(h,f){f.origin=f.origin||(h.entity===g.ConnectionEnd.client?"client":"server"),f.send&&(g.queue(h,g.createAlert(h,f.alert)),g.flush(h));var S=f.fatal!==!1;S&&(h.fail=!0),i.error(h,f),S&&h.close(!1)},deflate:i.deflate||null,inflate:i.inflate||null};n.reset=function(h){n.version={major:g.Version.major,minor:g.Version.minor},n.record=null,n.session=null,n.peerCertificate=null,n.state={pending:null,current:null},n.expect=n.entity===g.ConnectionEnd.client?HD:XD,n.fragmented=null,n.records=[],n.open=!1,n.handshakes=0,n.handshaking=!1,n.isConnected=!1,n.fail=!(h||typeof h>"u"),n.input.clear(),n.tlsData.clear(),n.data.clear(),n.state.current=g.createConnectionState(n)},n.reset();var l=c(function(h,f){var S=f.type-g.ContentType.change_cipher_spec,m=Uh[h.entity][h.expect];S in m?m[S](h,f):g.handleUnexpected(h,f)},"_update"),d=c(function(h){var f=0,S=h.input,m=S.length();if(m<5)f=5-m;else{h.record={type:S.getByte(),version:{major:S.getByte(),minor:S.getByte()},length:S.getInt16(),fragment:a0.util.createBuffer(),ready:!1};var O=h.record.version.major===h.version.major;O&&h.session&&h.session.version&&(O=h.record.version.minor===h.version.minor),O||h.error(h,{message:"Incompatible TLS version.",send:!0,alert:{level:g.Alert.Level.fatal,description:g.Alert.Description.protocol_version}})}return f},"_readRecordHeader"),p=c(function(h){var f=0,S=h.input,m=S.length();if(m0&&(n.sessionCache&&(f=n.sessionCache.getSession(h)),f===null&&(h="")),h.length===0&&n.sessionCache&&(f=n.sessionCache.getSession(),f!==null&&(h=f.id)),n.session={id:h,version:null,cipherSuite:null,compressionMethod:null,serverCertificate:null,certificateRequest:null,clientCertificate:null,sp:{},md5:a0.md.md5.create(),sha1:a0.md.sha1.create()},f&&(n.version=f.version,n.session.sp=f.sp),n.session.sp.client_random=g.createRandom().getBytes(),n.open=!0,g.queue(n,g.createRecord(n,{type:g.ContentType.handshake,data:g.createClientHello(n)})),g.flush(n)}},n.process=function(h){var f=0;return h&&n.input.putBytes(h),n.fail||(n.record!==null&&n.record.ready&&n.record.fragment.isEmpty()&&(n.record=null),n.record===null&&(f=d(n)),!n.fail&&n.record!==null&&!n.record.ready&&(f=p(n)),!n.fail&&n.record!==null&&n.record.ready&&l(n,n.record)),f},n.prepare=function(h){return g.queue(n,g.createRecord(n,{type:g.ContentType.application_data,data:a0.util.createBuffer(h)})),g.flush(n)},n.prepareHeartbeatRequest=function(h,f){return h instanceof a0.util.ByteBuffer&&(h=h.bytes()),typeof f>"u"&&(f=h.length),n.expectedHeartbeatPayload=h,g.queue(n,g.createRecord(n,{type:g.ContentType.heartbeat,data:g.createHeartbeat(g.HeartbeatMessageType.heartbeat_request,h,f)})),g.flush(n)},n.close=function(h){if(!n.fail&&n.sessionCache&&n.session){var f={id:n.session.id,version:n.session.version,sp:n.session.sp};f.sp.keys=null,n.sessionCache.setSession(f.id,f)}n.open&&(n.open=!1,n.input.clear(),(n.isConnected||n.handshaking)&&(n.isConnected=n.handshaking=!1,g.queue(n,g.createAlert(n,{level:g.Alert.Level.warning,description:g.Alert.Description.close_notify})),g.flush(n)),n.closed(n)),n.reset(h)},n};VM.exports=a0.tls=a0.tls||{};for(cc in g)typeof g[cc]!="function"&&(a0.tls[cc]=g[cc]);var cc;a0.tls.prf_tls1=pc;a0.tls.hmac_sha1=PD;a0.tls.createSessionCache=g.createSessionCache;a0.tls.createConnection=g.createConnection});var KM=v((KX,qM)=>{var Ar=y0();Lr();Ph();var Uu=qM.exports=Ar.tls;Uu.CipherSuites.TLS_RSA_WITH_AES_128_CBC_SHA={id:[0,47],name:"TLS_RSA_WITH_AES_128_CBC_SHA",initSecurityParameters:function(i){i.bulk_cipher_algorithm=Uu.BulkCipherAlgorithm.aes,i.cipher_type=Uu.CipherType.block,i.enc_key_length=16,i.block_length=16,i.fixed_iv_length=16,i.record_iv_length=16,i.mac_algorithm=Uu.MACAlgorithm.hmac_sha1,i.mac_length=20,i.mac_key_length=20},initConnectionState:GM};Uu.CipherSuites.TLS_RSA_WITH_AES_256_CBC_SHA={id:[0,53],name:"TLS_RSA_WITH_AES_256_CBC_SHA",initSecurityParameters:function(i){i.bulk_cipher_algorithm=Uu.BulkCipherAlgorithm.aes,i.cipher_type=Uu.CipherType.block,i.enc_key_length=32,i.block_length=16,i.fixed_iv_length=16,i.record_iv_length=16,i.mac_algorithm=Uu.MACAlgorithm.hmac_sha1,i.mac_length=20,i.mac_key_length=20},initConnectionState:GM};function GM(i,e,u){var r=e.entity===Ar.tls.ConnectionEnd.client;i.read.cipherState={init:!1,cipher:Ar.cipher.createDecipher("AES-CBC",r?u.keys.server_write_key:u.keys.client_write_key),iv:r?u.keys.server_write_IV:u.keys.client_write_IV},i.write.cipherState={init:!1,cipher:Ar.cipher.createCipher("AES-CBC",r?u.keys.client_write_key:u.keys.server_write_key),iv:r?u.keys.client_write_IV:u.keys.server_write_IV},i.read.cipherFunction=nw,i.write.cipherFunction=iw,i.read.macLength=i.write.macLength=u.mac_length,i.read.macFunction=i.write.macFunction=Uu.hmac_sha1}c(GM,"initConnectionState");function iw(i,e){var u=!1,r=e.macFunction(e.macKey,e.sequenceNumber,i);i.fragment.putBytes(r),e.updateSequenceNumber();var a;i.version.minor===Uu.Versions.TLS_1_0.minor?a=e.cipherState.init?null:e.cipherState.iv:a=Ar.random.getBytesSync(16),e.cipherState.init=!0;var s=e.cipherState.cipher;return s.start({iv:a}),i.version.minor>=Uu.Versions.TLS_1_1.minor&&s.output.putBytes(a),s.update(i.fragment),s.finish(aw)&&(i.fragment=s.output,i.length=i.fragment.length(),u=!0),u}c(iw,"encrypt_aes_cbc_sha1");function aw(i,e,u){if(!u){var r=i-e.length()%i;e.fillWithByte(r-1,r)}return!0}c(aw,"encrypt_aes_cbc_sha1_padding");function sw(i,e,u){var r=!0;if(u){for(var a=e.length(),s=e.last(),n=a-1-s;n=s?(i.fragment=a.output.getBytes(l-s),n=a.output.getBytes(s)):i.fragment=a.output.getBytes(),i.fragment=Ar.util.createBuffer(i.fragment),i.length=i.fragment.length();var d=e.macFunction(e.macKey,e.sequenceNumber,i);return e.updateSequenceNumber(),u=ow(e.macKey,n,d)&&u,u}c(nw,"decrypt_aes_cbc_sha1");function ow(i,e,u){var r=Ar.hmac.create();return r.start("SHA1",i),r.update(e),e=r.digest().getBytes(),r.start(null,null),r.update(u),u=r.digest().getBytes(),e===u}c(ow,"compareMacs")});var Hh=v((jX,QM)=>{var ne=y0();St();G0();var Dn=QM.exports=ne.sha512=ne.sha512||{};ne.md.sha512=ne.md.algorithms.sha512=Dn;var jM=ne.sha384=ne.sha512.sha384=ne.sha512.sha384||{};jM.create=function(){return Dn.create("SHA-384")};ne.md.sha384=ne.md.algorithms.sha384=jM;ne.sha512.sha256=ne.sha512.sha256||{create:function(){return Dn.create("SHA-512/256")}};ne.md["sha512/256"]=ne.md.algorithms["sha512/256"]=ne.sha512.sha256;ne.sha512.sha224=ne.sha512.sha224||{create:function(){return Dn.create("SHA-512/224")}};ne.md["sha512/224"]=ne.md.algorithms["sha512/224"]=ne.sha512.sha224;Dn.create=function(i){if(XM||lw(),typeof i>"u"&&(i="SHA-512"),!(i in di))throw new Error("Invalid SHA-512 algorithm: "+i);for(var e=di[i],u=null,r=ne.util.createBuffer(),a=new Array(80),s=0;s<80;++s)a[s]=new Array(2);var n=64;switch(i){case"SHA-384":n=48;break;case"SHA-512/256":n=32;break;case"SHA-512/224":n=28;break}var l={algorithm:i.replace("-","").toLowerCase(),blockLength:128,digestLength:n,messageLength:0,fullMessageLength:null,messageLengthSize:16};return l.start=function(){l.messageLength=0,l.fullMessageLength=l.messageLength128=[];for(var d=l.messageLengthSize/4,p=0;p>>0,h>>>0];for(var f=l.fullMessageLength.length-1;f>=0;--f)l.fullMessageLength[f]+=h[1],h[1]=h[0]+(l.fullMessageLength[f]/4294967296>>>0),l.fullMessageLength[f]=l.fullMessageLength[f]>>>0,h[0]=h[1]/4294967296>>>0;return r.putBytes(d),WM(u,a,r),(r.read>2048||r.length()===0)&&r.compact(),l},l.digest=function(){var d=ne.util.createBuffer();d.putBytes(r.bytes());var p=l.fullMessageLength[l.fullMessageLength.length-1]+l.messageLengthSize,h=p&l.blockLength-1;d.putBytes(kh.substr(0,l.blockLength-h));for(var f,S,m=l.fullMessageLength[0]*8,O=0;O>>0,m+=S,d.putInt32(m>>>0),m=f>>>0;d.putInt32(m);for(var M=new Array(u.length),O=0;O=128;){for(L0=0;L0<16;++L0)e[L0][0]=u.getInt32()>>>0,e[L0][1]=u.getInt32()>>>0;for(;L0<80;++L0)U0=e[L0-2],S0=U0[0],n0=U0[1],r=((S0>>>19|n0<<13)^(n0>>>29|S0<<3)^S0>>>6)>>>0,a=((S0<<13|n0>>>19)^(n0<<3|S0>>>29)^(S0<<26|n0>>>6))>>>0,T0=e[L0-15],S0=T0[0],n0=T0[1],s=((S0>>>1|n0<<31)^(S0>>>8|n0<<24)^S0>>>7)>>>0,n=((S0<<31|n0>>>1)^(S0<<24|n0>>>8)^(S0<<25|n0>>>7))>>>0,ce=e[L0-7],_0=e[L0-16],n0=a+ce[1]+n+_0[1],e[L0][0]=r+ce[0]+s+_0[0]+(n0/4294967296>>>0)>>>0,e[L0][1]=n0>>>0;for(M=i[0][0],T=i[0][1],L=i[1][0],I=i[1][1],N=i[2][0],D=i[2][1],E=i[3][0],R=i[3][1],x=i[4][0],k=i[4][1],w=i[5][0],j=i[5][1],Z=i[6][0],J=i[6][1],s0=i[7][0],u0=i[7][1],L0=0;L0<80;++L0)p=((x>>>14|k<<18)^(x>>>18|k<<14)^(k>>>9|x<<23))>>>0,h=((x<<18|k>>>14)^(x<<14|k>>>18)^(k<<23|x>>>9))>>>0,f=(Z^x&(w^Z))>>>0,S=(J^k&(j^J))>>>0,l=((M>>>28|T<<4)^(T>>>2|M<<30)^(T>>>7|M<<25))>>>0,d=((M<<4|T>>>28)^(T<<30|M>>>2)^(T<<25|M>>>7))>>>0,m=(M&L|N&(M^L))>>>0,O=(T&I|D&(T^I))>>>0,n0=u0+h+S+Fh[L0][1]+e[L0][1],r=s0+p+f+Fh[L0][0]+e[L0][0]+(n0/4294967296>>>0)>>>0,a=n0>>>0,n0=d+O,s=l+m+(n0/4294967296>>>0)>>>0,n=n0>>>0,s0=Z,u0=J,Z=w,J=j,w=x,j=k,n0=R+a,x=E+r+(n0/4294967296>>>0)>>>0,k=n0>>>0,E=N,R=D,N=L,D=I,L=M,I=T,n0=a+n,M=r+s+(n0/4294967296>>>0)>>>0,T=n0>>>0;n0=i[0][1]+T,i[0][0]=i[0][0]+M+(n0/4294967296>>>0)>>>0,i[0][1]=n0>>>0,n0=i[1][1]+I,i[1][0]=i[1][0]+L+(n0/4294967296>>>0)>>>0,i[1][1]=n0>>>0,n0=i[2][1]+D,i[2][0]=i[2][0]+N+(n0/4294967296>>>0)>>>0,i[2][1]=n0>>>0,n0=i[3][1]+R,i[3][0]=i[3][0]+E+(n0/4294967296>>>0)>>>0,i[3][1]=n0>>>0,n0=i[4][1]+k,i[4][0]=i[4][0]+x+(n0/4294967296>>>0)>>>0,i[4][1]=n0>>>0,n0=i[5][1]+j,i[5][0]=i[5][0]+w+(n0/4294967296>>>0)>>>0,i[5][1]=n0>>>0,n0=i[6][1]+J,i[6][0]=i[6][0]+Z+(n0/4294967296>>>0)>>>0,i[6][1]=n0>>>0,n0=i[7][1]+u0,i[7][0]=i[7][0]+s0+(n0/4294967296>>>0)>>>0,i[7][1]=n0>>>0,j0-=128}}c(WM,"_update")});var JM=v(Vh=>{var cw=y0();Xu();var xe=cw.asn1;Vh.privateKeyValidator={name:"PrivateKeyInfo",tagClass:xe.Class.UNIVERSAL,type:xe.Type.SEQUENCE,constructed:!0,value:[{name:"PrivateKeyInfo.version",tagClass:xe.Class.UNIVERSAL,type:xe.Type.INTEGER,constructed:!1,capture:"privateKeyVersion"},{name:"PrivateKeyInfo.privateKeyAlgorithm",tagClass:xe.Class.UNIVERSAL,type:xe.Type.SEQUENCE,constructed:!0,value:[{name:"AlgorithmIdentifier.algorithm",tagClass:xe.Class.UNIVERSAL,type:xe.Type.OID,constructed:!1,capture:"privateKeyOid"}]},{name:"PrivateKeyInfo",tagClass:xe.Class.UNIVERSAL,type:xe.Type.OCTETSTRING,constructed:!1,capture:"privateKey"}]};Vh.publicKeyValidator={name:"SubjectPublicKeyInfo",tagClass:xe.Class.UNIVERSAL,type:xe.Type.SEQUENCE,constructed:!0,captureAsn1:"subjectPublicKeyInfo",value:[{name:"SubjectPublicKeyInfo.AlgorithmIdentifier",tagClass:xe.Class.UNIVERSAL,type:xe.Type.SEQUENCE,constructed:!0,value:[{name:"AlgorithmIdentifier.algorithm",tagClass:xe.Class.UNIVERSAL,type:xe.Type.OID,constructed:!1,capture:"publicKeyOid"}]},{tagClass:xe.Class.UNIVERSAL,type:xe.Type.BITSTRING,constructed:!1,composed:!0,captureBitStringValue:"ed25519PublicKey"}]}});var lT=v((JX,oT)=>{var ke=y0();In();bu();Hh();G0();var tT=JM(),dw=tT.publicKeyValidator,pw=tT.privateKeyValidator;typeof $M>"u"&&($M=ke.jsbn.BigInteger);var $M,Kh=ke.util.ByteBuffer,fu=typeof Buffer>"u"?Uint8Array:Buffer;ke.pki=ke.pki||{};oT.exports=ke.pki.ed25519=ke.ed25519=ke.ed25519||{};var v0=ke.ed25519;v0.constants={};v0.constants.PUBLIC_KEY_BYTE_LENGTH=32;v0.constants.PRIVATE_KEY_BYTE_LENGTH=64;v0.constants.SEED_BYTE_LENGTH=32;v0.constants.SIGN_BYTE_LENGTH=64;v0.constants.HASH_BYTE_LENGTH=64;v0.generateKeyPair=function(i){i=i||{};var e=i.seed;if(e===void 0)e=ke.random.getBytesSync(v0.constants.SEED_BYTE_LENGTH);else if(typeof e=="string"){if(e.length!==v0.constants.SEED_BYTE_LENGTH)throw new TypeError('"seed" must be '+v0.constants.SEED_BYTE_LENGTH+" bytes in length.")}else if(!(e instanceof Uint8Array))throw new TypeError('"seed" must be a node.js Buffer, Uint8Array, or a binary string.');e=Ft({message:e,encoding:"binary"});for(var u=new fu(v0.constants.PUBLIC_KEY_BYTE_LENGTH),r=new fu(v0.constants.PRIVATE_KEY_BYTE_LENGTH),a=0;a<32;++a)r[a]=e[a];return Ow(u,r),{publicKey:u,privateKey:r}};v0.privateKeyFromAsn1=function(i){var e={},u=[],r=ke.asn1.validate(i,pw,e,u);if(!r){var a=new Error("Invalid Key.");throw a.errors=u,a}var s=ke.asn1.derToOid(e.privateKeyOid),n=ke.oids.EdDSA25519;if(s!==n)throw new Error('Invalid OID "'+s+'"; OID must be "'+n+'".');var l=e.privateKey,d=Ft({message:ke.asn1.fromDer(l).value,encoding:"binary"});return{privateKeyBytes:d}};v0.publicKeyFromAsn1=function(i){var e={},u=[],r=ke.asn1.validate(i,dw,e,u);if(!r){var a=new Error("Invalid Key.");throw a.errors=u,a}var s=ke.asn1.derToOid(e.publicKeyOid),n=ke.oids.EdDSA25519;if(s!==n)throw new Error('Invalid OID "'+s+'"; OID must be "'+n+'".');var l=e.ed25519PublicKey;if(l.length!==v0.constants.PUBLIC_KEY_BYTE_LENGTH)throw new Error("Key length is invalid.");return Ft({message:l,encoding:"binary"})};v0.publicKeyFromPrivateKey=function(i){i=i||{};var e=Ft({message:i.privateKey,encoding:"binary"});if(e.length!==v0.constants.PRIVATE_KEY_BYTE_LENGTH)throw new TypeError('"options.privateKey" must have a byte length of '+v0.constants.PRIVATE_KEY_BYTE_LENGTH);for(var u=new fu(v0.constants.PUBLIC_KEY_BYTE_LENGTH),r=0;r=0};function Ft(i){var e=i.message;if(e instanceof Uint8Array||e instanceof fu)return e;var u=i.encoding;if(e===void 0)if(i.md)e=i.md.digest().getBytes(),u="binary";else throw new TypeError('"options.message" or "options.md" not specified.');if(typeof e=="string"&&!u)throw new TypeError('"options.encoding" must be "binary" or "utf8".');if(typeof e=="string"){if(typeof Buffer<"u")return Buffer.from(e,u);e=new Kh(e,u)}else if(!(e instanceof Kh))throw new TypeError('"options.message" must be a node.js Buffer, a Uint8Array, a forge ByteBuffer, or a string with "options.encoding" specifying its encoding.');for(var r=new fu(e.length()),a=0;a=32;--r){for(u=0,a=r-32,s=r-12;a>8,e[a]-=u*256;e[a]+=u,e[r]=0}for(u=0,a=0;a<32;++a)e[a]+=u-(e[31]>>4)*Gh[a],u=e[a]>>8,e[a]&=255;for(a=0;a<32;++a)e[a]-=u*Gh[a];for(r=0;r<32;++r)e[r+1]+=e[r]>>8,i[r]=e[r]&255}c(rT,"modL");function jh(i){for(var e=new Float64Array(64),u=0;u<64;++u)e[u]=i[u],i[u]=0;rT(i,e)}c(jh,"reduce");function Xh(i,e){var u=M0(),r=M0(),a=M0(),s=M0(),n=M0(),l=M0(),d=M0(),p=M0(),h=M0();Ca(u,i[1],i[0]),Ca(h,e[1],e[0]),te(u,u,h),Na(r,i[0],i[1]),Na(h,e[0],e[1]),te(r,r,h),te(a,i[3],e[3]),te(a,a,fw),te(s,i[2],e[2]),Na(s,s,s),Ca(n,r,u),Ca(l,s,a),Na(d,s,a),Na(p,r,u),te(i[0],n,l),te(i[1],p,d),te(i[2],d,l),te(i[3],n,p)}c(Xh,"add");function eT(i,e,u){for(var r=0;r<4;++r)nT(i[r],e[r],u)}c(eT,"cswap");function Qh(i,e){var u=M0(),r=M0(),a=M0();_w(a,e[2]),te(u,e[0],a),te(r,e[1],a),fc(i,r),i[31]^=aT(u)<<7}c(Qh,"pack");function fc(i,e){var u,r,a,s=M0(),n=M0();for(u=0;u<16;++u)n[u]=e[u];for(qh(n),qh(n),qh(n),r=0;r<2;++r){for(s[0]=n[0]-65517,u=1;u<15;++u)s[u]=n[u]-65535-(s[u-1]>>16&1),s[u-1]&=65535;s[15]=n[15]-32767-(s[14]>>16&1),a=s[15]>>16&1,s[14]&=65535,nT(n,s,1-a)}for(u=0;u<16;u++)i[2*u]=n[u]&255,i[2*u+1]=n[u]>>8}c(fc,"pack25519");function mw(i,e){var u=M0(),r=M0(),a=M0(),s=M0(),n=M0(),l=M0(),d=M0();return Yr(i[2],hc),Bw(i[1],e),pi(a,i[1]),te(s,a,hw),Ca(a,a,i[2]),Na(s,i[2],s),pi(n,s),pi(l,n),te(d,l,n),te(u,d,a),te(u,u,s),Mw(u,u),te(u,u,a),te(u,u,s),te(u,u,s),te(i[0],u,s),pi(r,i[0]),te(r,r,s),uT(r,a)&&te(i[0],i[0],Sw),pi(r,i[0]),te(r,r,s),uT(r,a)?-1:(aT(i[0])===e[31]>>7&&Ca(i[0],Wh,i[0]),te(i[3],i[0],i[1]),0)}c(mw,"unpackneg");function Bw(i,e){var u;for(u=0;u<16;++u)i[u]=e[2*u]+(e[2*u+1]<<8);i[15]&=32767}c(Bw,"unpack25519");function Mw(i,e){var u=M0(),r;for(r=0;r<16;++r)u[r]=e[r];for(r=250;r>=0;--r)pi(u,u),r!==1&&te(u,u,e);for(r=0;r<16;++r)i[r]=u[r]}c(Mw,"pow2523");function uT(i,e){var u=new fu(32),r=new fu(32);return fc(u,i),fc(r,e),iT(u,0,r,0)}c(uT,"neq25519");function iT(i,e,u,r){return Tw(i,e,u,r,32)}c(iT,"crypto_verify_32");function Tw(i,e,u,r,a){var s,n=0;for(s=0;s>>8)-1}c(Tw,"vn");function aT(i){var e=new fu(32);return fc(e,i),e[0]&1}c(aT,"par25519");function sT(i,e,u){var r,a;for(Yr(i[0],Wh),Yr(i[1],hc),Yr(i[2],hc),Yr(i[3],Wh),a=255;a>=0;--a)r=u[a/8|0]>>(a&7)&1,eT(i,e,r),Xh(e,i),Xh(i,i),eT(i,e,r)}c(sT,"scalarmult");function Jh(i,e){var u=[M0(),M0(),M0(),M0()];Yr(u[0],zM),Yr(u[1],ZM),Yr(u[2],hc),te(u[3],zM,ZM),sT(i,u,e)}c(Jh,"scalarbase");function Yr(i,e){var u;for(u=0;u<16;u++)i[u]=e[u]|0}c(Yr,"set25519");function _w(i,e){var u=M0(),r;for(r=0;r<16;++r)u[r]=e[r];for(r=253;r>=0;--r)pi(u,u),r!==2&&r!==4&&te(u,u,e);for(r=0;r<16;++r)i[r]=u[r]}c(_w,"inv25519");function qh(i){var e,u,r=1;for(e=0;e<16;++e)u=i[e]+r+65535,r=Math.floor(u/65536),i[e]=u-r*65536;i[0]+=r-1+37*(r-1)}c(qh,"car25519");function nT(i,e,u){for(var r,a=~(u-1),s=0;s<16;++s)r=a&(i[s]^e[s]),i[s]^=r,e[s]^=r}c(nT,"sel25519");function M0(i){var e,u=new Float64Array(16);if(i)for(e=0;e{var _u=y0();G0();bu();In();pT.exports=_u.kem=_u.kem||{};var cT=_u.jsbn.BigInteger;_u.kem.rsa={};_u.kem.rsa.create=function(i,e){e=e||{};var u=e.prng||_u.random,r={};return r.encrypt=function(a,s){var n=Math.ceil(a.n.bitLength()/8),l;do l=new cT(_u.util.bytesToHex(u.getBytesSync(n)),16).mod(a.n);while(l.compareTo(cT.ONE)<=0);l=_u.util.hexToBytes(l.toString(16));var d=n-l.length;d>0&&(l=_u.util.fillString("\0",d)+l);var p=a.encrypt(l,"NONE"),h=i.generate(l,s);return{encapsulation:p,key:h}},r.decrypt=function(a,s,n){var l=a.decrypt(s,"NONE");return i.generate(l,n)},r};_u.kem.kdf1=function(i,e){dT(this,i,0,e||i.digestLength)};_u.kem.kdf2=function(i,e){dT(this,i,1,e||i.digestLength)};function dT(i,e,u,r){i.generate=function(a,s){for(var n=new _u.util.ByteBuffer,l=Math.ceil(s/r)+u,d=new _u.util.ByteBuffer,p=u;p{var w0=y0();G0();OT.exports=w0.log=w0.log||{};w0.log.levels=["none","error","warning","info","debug","verbose","max"];var Sc={},Zh=[],Pn=null;w0.log.LEVEL_LOCKED=2;w0.log.NO_LEVEL_CHECK=4;w0.log.INTERPOLATE=8;for(_t=0;_t"u"||e?i.flags|=w0.log.LEVEL_LOCKED:i.flags&=~w0.log.LEVEL_LOCKED};w0.log.addLogger=function(i){Zh.push(i)};typeof console<"u"&&"log"in console?(console.error&&console.warn&&console.info&&console.debug?(fT={error:console.error,warning:console.warn,info:console.info,debug:console.debug,verbose:console.debug},kn=c(function(i,e){w0.log.prepareStandard(e);var u=fT[e.level],r=[e.standard];r=r.concat(e.arguments.slice()),u.apply(console,r)},"f"),Ia=w0.log.makeLogger(kn)):(kn=c(function(e,u){w0.log.prepareStandardFull(u),console.log(u.standardFull)},"f"),Ia=w0.log.makeLogger(kn)),w0.log.setLevel(Ia,"debug"),w0.log.addLogger(Ia),Pn=Ia):console={log:function(){}};var Ia,fT,kn;Pn!==null&&typeof window<"u"&&window.location&&(Un=new URL(window.location.href).searchParams,Un.has("console.level")&&w0.log.setLevel(Pn,Un.get("console.level").slice(-1)[0]),Un.has("console.lock")&&(ST=Un.get("console.lock").slice(-1)[0],ST=="true"&&w0.log.lock(Pn)));var Un,ST;w0.log.consoleLogger=Pn});var mT=v((tQ,ET)=>{ET.exports=St();Xl();Aa();ph();Hh()});var TT=v((rQ,MT)=>{var d0=y0();Lr();Xu();Nn();Er();ai();Rh();bu();G0();oc();var F=d0.asn1,ru=MT.exports=d0.pkcs7=d0.pkcs7||{};ru.messageFromPem=function(i){var e=d0.pem.decode(i)[0];if(e.type!=="PKCS7"){var u=new Error('Could not convert PKCS#7 message from PEM; PEM header type is not "PKCS#7".');throw u.headerType=e.type,u}if(e.procType&&e.procType.type==="ENCRYPTED")throw new Error("Could not convert PKCS#7 message from PEM; PEM is encrypted.");var r=F.fromDer(e.body);return ru.messageFromAsn1(r)};ru.messageToPem=function(i,e){var u={type:"PKCS7",body:F.toDer(i.toAsn1()).getBytes()};return d0.pem.encode(u,{maxline:e})};ru.messageFromAsn1=function(i){var e={},u=[];if(!F.validate(i,ru.asn1.contentInfoValidator,e,u)){var r=new Error("Cannot read PKCS#7 message. ASN.1 object is not an PKCS#7 ContentInfo.");throw r.errors=u,r}var a=F.derToOid(e.contentType),s;switch(a){case d0.pki.oids.envelopedData:s=ru.createEnvelopedData();break;case d0.pki.oids.encryptedData:s=ru.createEncryptedData();break;case d0.pki.oids.signedData:s=ru.createSignedData();break;default:throw new Error("Cannot read PKCS#7 message. ContentType with OID "+a+" is not (yet) supported.")}return s.fromAsn1(e.content.value[0]),s};ru.createSignedData=function(){var i=null;return i={type:d0.pki.oids.signedData,version:1,certificates:[],crls:[],signers:[],digestAlgorithmIdentifiers:[],contentInfo:null,signerInfos:[],fromAsn1:function(r){if(uf(i,r,ru.asn1.signedDataValidator),i.certificates=[],i.crls=[],i.digestAlgorithmIdentifiers=[],i.contentInfo=null,i.signerInfos=[],i.rawCapture.certificates)for(var a=i.rawCapture.certificates.value,s=0;s0&&n.value[0].value.push(F.create(F.Class.CONTEXT_SPECIFIC,0,!0,r)),s.length>0&&n.value[0].value.push(F.create(F.Class.CONTEXT_SPECIFIC,1,!0,s)),n.value[0].value.push(F.create(F.Class.UNIVERSAL,F.Type.SET,!0,i.signerInfos)),F.create(F.Class.UNIVERSAL,F.Type.SEQUENCE,!0,[F.create(F.Class.UNIVERSAL,F.Type.OID,!1,F.oidToDer(i.type).getBytes()),n])},addSigner:function(r){var a=r.issuer,s=r.serialNumber;if(r.certificate){var n=r.certificate;typeof n=="string"&&(n=d0.pki.certificateFromPem(n)),a=n.issuer.attributes,s=n.serialNumber}var l=r.key;if(!l)throw new Error("Could not add PKCS#7 signer; no private key specified.");typeof l=="string"&&(l=d0.pki.privateKeyFromPem(l));var d=r.digestAlgorithm||d0.pki.oids.sha1;switch(d){case d0.pki.oids.sha1:case d0.pki.oids.sha256:case d0.pki.oids.sha384:case d0.pki.oids.sha512:case d0.pki.oids.md5:break;default:throw new Error("Could not add PKCS#7 signer; unknown message digest algorithm: "+d)}var p=r.authenticatedAttributes||[];if(p.length>0){for(var h=!1,f=!1,S=0;S0){for(var u=F.create(F.Class.CONTEXT_SPECIFIC,1,!0,[]),r=0;r=u&&a{var Me=y0();Lr();Ba();Xl();Aa();G0();var Lc=_T.exports=Me.ssh=Me.ssh||{};Lc.privateKeyToPutty=function(i,e,u){u=u||"",e=e||"";var r="ssh-rsa",a=e===""?"none":"aes256-cbc",s="PuTTY-User-Key-File-2: "+r+`\r +`;s+="Encryption: "+a+`\r +`,s+="Comment: "+u+`\r +`;var n=Me.util.createBuffer();ba(n,r),At(n,i.e),At(n,i.n);var l=Me.util.encode64(n.bytes(),64),d=Math.floor(l.length/66)+1;s+="Public-Lines: "+d+`\r +`,s+=l;var p=Me.util.createBuffer();At(p,i.d),At(p,i.p),At(p,i.q),At(p,i.qInv);var h;if(!e)h=Me.util.encode64(p.bytes(),64);else{var f=p.length()+16-1;f-=f%16;var S=Oc(p.bytes());S.truncate(S.length()-f+p.length()),p.putBuffer(S);var m=Me.util.createBuffer();m.putBuffer(Oc("\0\0\0\0",e)),m.putBuffer(Oc("\0\0\0",e));var O=Me.aes.createEncryptionCipher(m.truncate(8),"CBC");O.start(Me.util.createBuffer().fillWithByte(0,16)),O.update(p.copy()),O.finish();var M=O.output;M.truncate(16),h=Me.util.encode64(M.bytes(),64)}d=Math.floor(h.length/66)+1,s+=`\r +Private-Lines: `+d+`\r +`,s+=h;var T=Oc("putty-private-key-file-mac-key",e),L=Me.util.createBuffer();ba(L,r),ba(L,a),ba(L,u),L.putInt32(n.length()),L.putBuffer(n),L.putInt32(p.length()),L.putBuffer(p);var I=Me.hmac.create();return I.start("sha1",T),I.update(L.bytes()),s+=`\r +Private-MAC: `+I.digest().toHex()+`\r +`,s};Lc.publicKeyToOpenSSH=function(i,e){var u="ssh-rsa";e=e||"";var r=Me.util.createBuffer();return ba(r,u),At(r,i.e),At(r,i.n),u+" "+Me.util.encode64(r.bytes())+" "+e};Lc.privateKeyToOpenSSH=function(i,e){return e?Me.pki.encryptRsaPrivateKey(i,e,{legacy:!0,algorithm:"aes128"}):Me.pki.privateKeyToPem(i)};Lc.getPublicKeyFingerprint=function(i,e){e=e||{};var u=e.md||Me.md.md5.create(),r="ssh-rsa",a=Me.util.createBuffer();ba(a,r),At(a,i.e),At(a,i.n),u.start(),u.update(a.getBytes());var s=u.digest();if(e.encoding==="hex"){var n=s.toHex();return e.delimiter?n.match(/.{2}/g).join(e.delimiter):n}else{if(e.encoding==="binary")return s.getBytes();if(e.encoding)throw new Error('Unknown encoding "'+e.encoding+'".')}return s};function At(i,e){var u=e.toString(16);u[0]>="8"&&(u="00"+u);var r=Me.util.hexToBytes(u);i.putInt32(r.length),i.putBytes(r)}c(At,"_addBigIntegerToBuffer");function ba(i,e){i.putInt32(e.length),i.putString(e)}c(ba,"_addStringToBuffer");function Oc(){for(var i=Me.md.sha1.create(),e=arguments.length,u=0;u{YT.exports=y0();Lr();KM();Xu();Hl();Nn();lT();Ba();hT();LT();mT();gh();zl();ai();Mh();Ch();TT();bh();_h();hh();ac();bu();Oh();AT();Ph();G0()});var yT=v(mc=>{"use strict";Object.defineProperty(mc,"__esModule",{value:!0});mc.getPem=void 0;var Iw=require("fs"),Ec=RT(),bw=require("util"),xw=bw.promisify(Iw.readFile);function vw(i,e){if(e)gT(i).then(u=>e(null,u)).catch(u=>e(u,null));else return gT(i)}c(vw,"getPem");mc.getPem=vw;function gT(i){return xw(i,{encoding:"base64"}).then(e=>Dw(e))}c(gT,"getPemAsync");function Dw(i){let e=Ec.util.decode64(i),u=Ec.asn1.fromDer(e),a=Ec.pkcs12.pkcs12FromAsn1(u,"notasecret").getBags({friendlyName:"privatekey"});if(a.friendlyName){let s=a.friendlyName[0].key;return Ec.pki.privateKeyToPem(s).replace(/\r\n/g,` +`)}else throw new Error("Unable to get friendly name.")}c(Dw,"convertToPem")});var xT=v(Bc=>{"use strict";Object.defineProperty(Bc,"__esModule",{value:!0});Bc.GoogleToken=void 0;var NT=require("fs"),CT=fl(),ww=z3(),Uw=require("path"),Pw=require("util"),IT=NT.readFile?Pw.promisify(NT.readFile):async()=>{throw new xa("use key rather than keyFile.","MISSING_CREDENTIALS")},bT="https://www.googleapis.com/oauth2/v4/token",kw="https://accounts.google.com/o/oauth2/revoke?token=",af=class af extends Error{constructor(e,u){super(e),this.code=u}};c(af,"ErrorWithCode");var xa=af,tf,sf=class sf{constructor(e){this.configure(e)}get accessToken(){return this.rawToken?this.rawToken.access_token:void 0}get idToken(){return this.rawToken?this.rawToken.id_token:void 0}get tokenType(){return this.rawToken?this.rawToken.token_type:void 0}get refreshToken(){return this.rawToken?this.rawToken.refresh_token:void 0}hasExpired(){let e=new Date().getTime();return this.rawToken&&this.expiresAt?e>=this.expiresAt:!0}isTokenExpiring(){var e;let u=new Date().getTime(),r=(e=this.eagerRefreshThresholdMillis)!==null&&e!==void 0?e:0;return this.rawToken&&this.expiresAt?this.expiresAt<=u+r:!0}getToken(e,u={}){if(typeof e=="object"&&(u=e,e=void 0),u=Object.assign({forceRefresh:!1},u),e){let r=e;this.getTokenAsync(u).then(a=>r(null,a),e);return}return this.getTokenAsync(u)}async getCredentials(e){switch(Uw.extname(e)){case".json":{let r=await IT(e,"utf8"),a=JSON.parse(r),s=a.private_key,n=a.client_email;if(!s||!n)throw new xa("private_key and client_email are required.","MISSING_CREDENTIALS");return{privateKey:s,clientEmail:n}}case".der":case".crt":case".pem":return{privateKey:await IT(e,"utf8")};case".p12":case".pfx":return tf||(tf=(await Promise.resolve().then(()=>yT())).getPem),{privateKey:await tf(e)};default:throw new xa("Unknown certificate type. Type is determined based on file extension. Current supported extensions are *.json, *.pem, and *.p12.","UNKNOWN_CERTIFICATE_TYPE")}}async getTokenAsync(e){if(this.inFlightRequest&&!e.forceRefresh)return this.inFlightRequest;try{return await(this.inFlightRequest=this.getTokenAsyncInner(e))}finally{this.inFlightRequest=void 0}}async getTokenAsyncInner(e){if(this.isTokenExpiring()===!1&&e.forceRefresh===!1)return Promise.resolve(this.rawToken);if(!this.key&&!this.keyFile)throw new Error("No key or keyFile set.");if(!this.key&&this.keyFile){let u=await this.getCredentials(this.keyFile);this.key=u.privateKey,this.iss=u.clientEmail||this.iss,u.clientEmail||this.ensureEmail()}return this.requestToken()}ensureEmail(){if(!this.iss)throw new xa("email is required.","MISSING_CREDENTIALS")}revokeToken(e){if(e){this.revokeTokenAsync().then(()=>e(),e);return}return this.revokeTokenAsync()}async revokeTokenAsync(){if(!this.accessToken)throw new Error("No token to revoke.");let e=kw+this.accessToken;await CT.request({url:e}),this.configure({email:this.iss,sub:this.sub,key:this.key,keyFile:this.keyFile,scope:this.scope,additionalClaims:this.additionalClaims})}configure(e={}){this.keyFile=e.keyFile,this.key=e.key,this.rawToken=void 0,this.iss=e.email||e.iss,this.sub=e.sub,this.additionalClaims=e.additionalClaims,typeof e.scope=="object"?this.scope=e.scope.join(" "):this.scope=e.scope,this.eagerRefreshThresholdMillis=e.eagerRefreshThresholdMillis}async requestToken(){let e=Math.floor(new Date().getTime()/1e3),u=this.additionalClaims||{},r=Object.assign({iss:this.iss,scope:this.scope,aud:bT,exp:e+3600,iat:e,sub:this.sub},u),a=ww.sign({header:{alg:"RS256"},payload:r,secret:this.key});try{let s=await CT.request({method:"POST",url:bT,data:{grant_type:"urn:ietf:params:oauth:grant-type:jwt-bearer",assertion:a},headers:{"Content-Type":"application/x-www-form-urlencoded"},responseType:"json"});return this.rawToken=s.data,this.expiresAt=s.data.expires_in===null||s.data.expires_in===void 0?void 0:(e+s.data.expires_in)*1e3,this.rawToken}catch(s){this.rawToken=void 0,this.tokenExpires=void 0;let n=s.response&&s.response.data?s.response.data:{};if(n.error){let l=n.error_description?`: ${n.error_description}`:"";s.message=`${n.error}${l}`}throw s}}};c(sf,"GoogleToken");var rf=sf;Bc.GoogleToken=rf});var DT=v((pQ,vT)=>{"use strict";vT.exports=function(i){i.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var UT=v((hQ,wT)=>{"use strict";wT.exports=X0;X0.Node=hi;X0.create=X0;function X0(i){var e=this;if(e instanceof X0||(e=new X0),e.tail=null,e.head=null,e.length=0,i&&typeof i.forEach=="function")i.forEach(function(a){e.push(a)});else if(arguments.length>0)for(var u=0,r=arguments.length;u1)u=e;else if(this.head)r=this.head.next,u=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=0;r!==null;a++)u=i(u,r.value,a),r=r.next;return u};X0.prototype.reduceReverse=function(i,e){var u,r=this.tail;if(arguments.length>1)u=e;else if(this.tail)r=this.tail.prev,u=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=this.length-1;r!==null;a--)u=i(u,r.value,a),r=r.prev;return u};X0.prototype.toArray=function(){for(var i=new Array(this.length),e=0,u=this.head;u!==null;e++)i[e]=u.value,u=u.next;return i};X0.prototype.toArrayReverse=function(){for(var i=new Array(this.length),e=0,u=this.tail;u!==null;e++)i[e]=u.value,u=u.prev;return i};X0.prototype.slice=function(i,e){e=e||this.length,e<0&&(e+=this.length),i=i||0,i<0&&(i+=this.length);var u=new X0;if(ethis.length&&(e=this.length);for(var r=0,a=this.head;a!==null&&rthis.length&&(e=this.length);for(var r=this.length,a=this.tail;a!==null&&r>e;r--)a=a.prev;for(;a!==null&&r>i;r--,a=a.prev)u.push(a.value);return u};X0.prototype.splice=function(i,e,...u){i>this.length&&(i=this.length-1),i<0&&(i=this.length+i);for(var r=0,a=this.head;a!==null&&r{"use strict";var Gw=UT(),fi=Symbol("max"),Vt=Symbol("length"),va=Symbol("lengthCalculator"),Hn=Symbol("allowStale"),Si=Symbol("maxAge"),Ht=Symbol("dispose"),PT=Symbol("noDisposeOnSet"),ve=Symbol("lruList"),Ju=Symbol("cache"),FT=Symbol("updateAgeOnGet"),nf=c(()=>1,"naiveLength"),df=class df{constructor(e){if(typeof e=="number"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!="number"||e.max<0))throw new TypeError("max must be a non-negative number");let u=this[fi]=e.max||1/0,r=e.length||nf;if(this[va]=typeof r!="function"?nf:r,this[Hn]=e.stale||!1,e.maxAge&&typeof e.maxAge!="number")throw new TypeError("maxAge must be a number");this[Si]=e.maxAge||0,this[Ht]=e.dispose,this[PT]=e.noDisposeOnSet||!1,this[FT]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!="number"||e<0)throw new TypeError("max must be a non-negative number");this[fi]=e||1/0,Fn(this)}get max(){return this[fi]}set allowStale(e){this[Hn]=!!e}get allowStale(){return this[Hn]}set maxAge(e){if(typeof e!="number")throw new TypeError("maxAge must be a non-negative number");this[Si]=e,Fn(this)}get maxAge(){return this[Si]}set lengthCalculator(e){typeof e!="function"&&(e=nf),e!==this[va]&&(this[va]=e,this[Vt]=0,this[ve].forEach(u=>{u.length=this[va](u.value,u.key),this[Vt]+=u.length})),Fn(this)}get lengthCalculator(){return this[va]}get length(){return this[Vt]}get itemCount(){return this[ve].length}rforEach(e,u){u=u||this;for(let r=this[ve].tail;r!==null;){let a=r.prev;kT(this,e,r,u),r=a}}forEach(e,u){u=u||this;for(let r=this[ve].head;r!==null;){let a=r.next;kT(this,e,r,u),r=a}}keys(){return this[ve].toArray().map(e=>e.key)}values(){return this[ve].toArray().map(e=>e.value)}reset(){this[Ht]&&this[ve]&&this[ve].length&&this[ve].forEach(e=>this[Ht](e.key,e.value)),this[Ju]=new Map,this[ve]=new Gw,this[Vt]=0}dump(){return this[ve].map(e=>Mc(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[ve]}set(e,u,r){if(r=r||this[Si],r&&typeof r!="number")throw new TypeError("maxAge must be a number");let a=r?Date.now():0,s=this[va](u,e);if(this[Ju].has(e)){if(s>this[fi])return Da(this,this[Ju].get(e)),!1;let d=this[Ju].get(e).value;return this[Ht]&&(this[PT]||this[Ht](e,d.value)),d.now=a,d.maxAge=r,d.value=u,this[Vt]+=s-d.length,d.length=s,this.get(e),Fn(this),!0}let n=new cf(e,u,s,a,r);return n.length>this[fi]?(this[Ht]&&this[Ht](e,u),!1):(this[Vt]+=n.length,this[ve].unshift(n),this[Ju].set(e,this[ve].head),Fn(this),!0)}has(e){if(!this[Ju].has(e))return!1;let u=this[Ju].get(e).value;return!Mc(this,u)}get(e){return of(this,e,!0)}peek(e){return of(this,e,!1)}pop(){let e=this[ve].tail;return e?(Da(this,e),e.value):null}del(e){Da(this,this[Ju].get(e))}load(e){this.reset();let u=Date.now();for(let r=e.length-1;r>=0;r--){let a=e[r],s=a.e||0;if(s===0)this.set(a.k,a.v);else{let n=s-u;n>0&&this.set(a.k,a.v,n)}}}prune(){this[Ju].forEach((e,u)=>of(this,u,!1))}};c(df,"LRUCache");var lf=df,of=c((i,e,u)=>{let r=i[Ju].get(e);if(r){let a=r.value;if(Mc(i,a)){if(Da(i,r),!i[Hn])return}else u&&(i[FT]&&(r.value.now=Date.now()),i[ve].unshiftNode(r));return a.value}},"get"),Mc=c((i,e)=>{if(!e||!e.maxAge&&!i[Si])return!1;let u=Date.now()-e.now;return e.maxAge?u>e.maxAge:i[Si]&&u>i[Si]},"isStale"),Fn=c(i=>{if(i[Vt]>i[fi])for(let e=i[ve].tail;i[Vt]>i[fi]&&e!==null;){let u=e.prev;Da(i,e),e=u}},"trim"),Da=c((i,e)=>{if(e){let u=e.value;i[Ht]&&i[Ht](u.key,u.value),i[Vt]-=u.length,i[Ju].delete(u.key),i[ve].removeNode(e)}},"del"),pf=class pf{constructor(e,u,r,a,s){this.key=e,this.value=u,this.length=r,this.now=a,this.maxAge=s||0}};c(pf,"Entry");var cf=pf,kT=c((i,e,u,r)=>{let a=u.value;Mc(i,a)&&(Da(i,u),i[Hn]||(a=void 0)),a&&e.call(r,a.value,a.key,i)},"forEachStep");HT.exports=lf});var ff=v(_c=>{"use strict";Object.defineProperty(_c,"__esModule",{value:!0});_c.JWTAccess=void 0;var qw=z3(),Kw=VT(),GT={alg:"RS256",typ:"JWT"},Tc=class Tc{constructor(e,u,r,a){this.cache=new Kw({max:500,maxAge:60*60*1e3}),this.email=e,this.key=u,this.keyId=r,this.eagerRefreshThresholdMillis=a??5*60*1e3}getCachedKey(e,u){let r=e;if(u&&Array.isArray(u)&&u.length?r=e?`${e}_${u.join("_")}`:`${u.join("_")}`:typeof u=="string"&&(r=e?`${e}_${u}`:u),!r)throw Error("Scopes or url must be provided");return r}getRequestHeaders(e,u,r){let a=this.getCachedKey(e,r),s=this.cache.get(a),n=Date.now();if(s&&s.expiration-n>this.eagerRefreshThresholdMillis)return s.headers;let l=Math.floor(Date.now()/1e3),d=Tc.getExpirationTime(l),p;if(Array.isArray(r)&&(r=r.join(" ")),r?p={iss:this.email,sub:this.email,scope:r,exp:d,iat:l}:p={iss:this.email,sub:this.email,aud:e,exp:d,iat:l},u){for(let O in p)if(u[O])throw new Error(`The '${O}' property is not allowed when passing additionalClaims. This claim is included in the JWT by default.`)}let h=this.keyId?{...GT,kid:this.keyId}:GT,f=Object.assign(p,u),m={Authorization:`Bearer ${qw.sign({header:h,payload:f,secret:this.key})}`};return this.cache.set(a,{expiration:d*1e3,headers:m}),m}static getExpirationTime(e){return e+3600}fromJSON(e){if(!e)throw new Error("Must pass in a JSON object containing the service account auth settings.");if(!e.client_email)throw new Error("The incoming JSON object does not contain a client_email field");if(!e.private_key)throw new Error("The incoming JSON object does not contain a private_key field");this.email=e.client_email,this.key=e.private_key,this.keyId=e.private_key_id,this.projectId=e.project_id}fromStream(e,u){if(u)this.fromStreamAsync(e).then(()=>u(),u);else return this.fromStreamAsync(e)}fromStreamAsync(e){return new Promise((u,r)=>{e||r(new Error("Must pass in a stream containing the service account auth settings."));let a="";e.setEncoding("utf8").on("data",s=>a+=s).on("error",r).on("end",()=>{try{let s=JSON.parse(a);this.fromJSON(s),u()}catch(s){r(s)}})})}};c(Tc,"JWTAccess");var hf=Tc;_c.JWTAccess=hf});var Of=v(Yc=>{"use strict";Object.defineProperty(Yc,"__esModule",{value:!0});Yc.JWT=void 0;var qT=xT(),Ww=ff(),jw=ri(),Ac=class Ac extends jw.OAuth2Client{constructor(e,u,r,a,s,n){let l=e&&typeof e=="object"?e:{email:e,keyFile:u,key:r,keyId:n,scopes:a,subject:s};super({eagerRefreshThresholdMillis:l.eagerRefreshThresholdMillis,forceRefreshOnFailure:l.forceRefreshOnFailure}),this.email=l.email,this.keyFile=l.keyFile,this.key=l.key,this.keyId=l.keyId,this.scopes=l.scopes,this.subject=l.subject,this.additionalClaims=l.additionalClaims,this.credentials={refresh_token:"jwt-placeholder",expiry_date:1}}createScoped(e){return new Ac({email:this.email,keyFile:this.keyFile,key:this.key,keyId:this.keyId,scopes:e,subject:this.subject,additionalClaims:this.additionalClaims})}async getRequestMetadataAsync(e){e=this.defaultServicePath?`https://${this.defaultServicePath}/`:e;let u=!this.hasUserScopes()&&e||this.useJWTAccessWithScope&&this.hasAnyScopes();if(!this.apiKey&&u)if(this.additionalClaims&&this.additionalClaims.target_audience){let{tokens:r}=await this.refreshToken();return{headers:this.addSharedMetadataHeaders({Authorization:`Bearer ${r.id_token}`})}}else{this.access||(this.access=new Ww.JWTAccess(this.email,this.key,this.keyId,this.eagerRefreshThresholdMillis));let r;this.hasUserScopes()?r=this.scopes:e||(r=this.defaultScopes);let a=await this.access.getRequestHeaders(e??void 0,this.additionalClaims,this.useJWTAccessWithScope?r:void 0);return{headers:this.addSharedMetadataHeaders(a)}}else return this.hasAnyScopes()||this.apiKey?super.getRequestMetadataAsync(e):{headers:{}}}async fetchIdToken(e){let u=new qT.GoogleToken({iss:this.email,sub:this.subject,scope:this.scopes||this.defaultScopes,keyFile:this.keyFile,key:this.key,additionalClaims:{target_audience:e}});if(await u.getToken({forceRefresh:!0}),!u.idToken)throw new Error("Unknown error: Failed to fetch ID token");return u.idToken}hasUserScopes(){return this.scopes?this.scopes.length>0:!1}hasAnyScopes(){return!!(this.scopes&&this.scopes.length>0||this.defaultScopes&&this.defaultScopes.length>0)}authorize(e){if(e)this.authorizeAsync().then(u=>e(null,u),e);else return this.authorizeAsync()}async authorizeAsync(){let e=await this.refreshToken();if(!e)throw new Error("No result returned");return this.credentials=e.tokens,this.credentials.refresh_token="jwt-placeholder",this.key=this.gtoken.key,this.email=this.gtoken.iss,e.tokens}async refreshTokenNoCache(e){let u=this.createGToken(),a={access_token:(await u.getToken({forceRefresh:this.isTokenExpiring()})).access_token,token_type:"Bearer",expiry_date:u.expiresAt,id_token:u.idToken};return this.emit("tokens",a),{res:null,tokens:a}}createGToken(){return this.gtoken||(this.gtoken=new qT.GoogleToken({iss:this.email,sub:this.subject,scope:this.scopes||this.defaultScopes,keyFile:this.keyFile,key:this.key,additionalClaims:this.additionalClaims})),this.gtoken}fromJSON(e){if(!e)throw new Error("Must pass in a JSON object containing the service account auth settings.");if(!e.client_email)throw new Error("The incoming JSON object does not contain a client_email field");if(!e.private_key)throw new Error("The incoming JSON object does not contain a private_key field");this.email=e.client_email,this.key=e.private_key,this.keyId=e.private_key_id,this.projectId=e.project_id,this.quotaProjectId=e.quota_project_id}fromStream(e,u){if(u)this.fromStreamAsync(e).then(()=>u(),u);else return this.fromStreamAsync(e)}fromStreamAsync(e){return new Promise((u,r)=>{if(!e)throw new Error("Must pass in a stream containing the service account auth settings.");let a="";e.setEncoding("utf8").on("error",r).on("data",s=>a+=s).on("end",()=>{try{let s=JSON.parse(a);this.fromJSON(s),u()}catch(s){r(s)}})})}fromAPIKey(e){if(typeof e!="string")throw new Error("Must provide an API Key string.");this.apiKey=e}async getCredentials(){if(this.key)return{private_key:this.key,client_email:this.email};if(this.keyFile){let u=await this.createGToken().getCredentials(this.keyFile);return{private_key:u.privateKey,client_email:u.clientEmail}}throw new Error("A key or a keyFile must be provided to getCredentials.")}};c(Ac,"JWT");var Sf=Ac;Yc.JWT=Sf});var mf=v(Rc=>{"use strict";Object.defineProperty(Rc,"__esModule",{value:!0});Rc.UserRefreshClient=void 0;var Xw=ri(),Ef=class Ef extends Xw.OAuth2Client{constructor(e,u,r,a,s){let n=e&&typeof e=="object"?e:{clientId:e,clientSecret:u,refreshToken:r,eagerRefreshThresholdMillis:a,forceRefreshOnFailure:s};super({clientId:n.clientId,clientSecret:n.clientSecret,eagerRefreshThresholdMillis:n.eagerRefreshThresholdMillis,forceRefreshOnFailure:n.forceRefreshOnFailure}),this._refreshToken=n.refreshToken,this.credentials.refresh_token=n.refreshToken}async refreshTokenNoCache(e){return super.refreshTokenNoCache(this._refreshToken)}fromJSON(e){if(!e)throw new Error("Must pass in a JSON object containing the user refresh token");if(e.type!=="authorized_user")throw new Error('The incoming JSON object does not have the "authorized_user" type');if(!e.client_id)throw new Error("The incoming JSON object does not contain a client_id field");if(!e.client_secret)throw new Error("The incoming JSON object does not contain a client_secret field");if(!e.refresh_token)throw new Error("The incoming JSON object does not contain a refresh_token field");this._clientId=e.client_id,this._clientSecret=e.client_secret,this._refreshToken=e.refresh_token,this.credentials.refresh_token=e.refresh_token,this.quotaProjectId=e.quota_project_id}fromStream(e,u){if(u)this.fromStreamAsync(e).then(()=>u(),u);else return this.fromStreamAsync(e)}async fromStreamAsync(e){return new Promise((u,r)=>{if(!e)return r(new Error("Must pass in a stream containing the user refresh token."));let a="";e.setEncoding("utf8").on("error",r).on("data",s=>a+=s).on("end",()=>{try{let s=JSON.parse(a);return this.fromJSON(s),u()}catch(s){return r(s)}})})}};c(Ef,"UserRefreshClient");var Lf=Ef;Rc.UserRefreshClient=Lf});var WT=v(wa=>{"use strict";Object.defineProperty(wa,"__esModule",{value:!0});wa.getErrorFromOAuthErrorResponse=wa.OAuthClientAuthHandler=void 0;var KT=require("querystring"),Qw=ha(),Jw=["PUT","POST","PATCH"],Mf=class Mf{constructor(e){this.clientAuthentication=e,this.crypto=Qw.createCrypto()}applyClientAuthenticationOptions(e,u){this.injectAuthenticatedHeaders(e,u),u||this.injectAuthenticatedRequestBody(e)}injectAuthenticatedHeaders(e,u){var r;if(u)e.headers=e.headers||{},Object.assign(e.headers,{Authorization:`Bearer ${u}}`});else if(((r=this.clientAuthentication)===null||r===void 0?void 0:r.confidentialClientType)==="basic"){e.headers=e.headers||{};let a=this.clientAuthentication.clientId,s=this.clientAuthentication.clientSecret||"",n=this.crypto.encodeBase64StringUtf8(`${a}:${s}`);Object.assign(e.headers,{Authorization:`Basic ${n}`})}}injectAuthenticatedRequestBody(e){var u;if(((u=this.clientAuthentication)===null||u===void 0?void 0:u.confidentialClientType)==="request-body"){let r=(e.method||"GET").toUpperCase();if(Jw.indexOf(r)!==-1){let a,s=e.headers||{};for(let n in s)if(n.toLowerCase()==="content-type"&&s[n]){a=s[n].toLowerCase();break}if(a==="application/x-www-form-urlencoded"){e.data=e.data||"";let n=KT.parse(e.data);Object.assign(n,{client_id:this.clientAuthentication.clientId,client_secret:this.clientAuthentication.clientSecret||""}),e.data=KT.stringify(n)}else if(a==="application/json")e.data=e.data||{},Object.assign(e.data,{client_id:this.clientAuthentication.clientId,client_secret:this.clientAuthentication.clientSecret||""});else throw new Error(`${a} content-types are not supported with ${this.clientAuthentication.confidentialClientType} client authentication`)}else throw new Error(`${r} HTTP method does not support ${this.clientAuthentication.confidentialClientType} client authentication`)}}};c(Mf,"OAuthClientAuthHandler");var Bf=Mf;wa.OAuthClientAuthHandler=Bf;function $w(i,e){let u=i.error,r=i.error_description,a=i.error_uri,s=`Error code ${u}`;typeof r<"u"&&(s+=`: ${r}`),typeof a<"u"&&(s+=` - ${a}`);let n=new Error(s);if(e){let l=Object.keys(e);e.stack&&l.push("stack"),l.forEach(d=>{d!=="message"&&Object.defineProperty(n,d,{value:e[d],writable:!1,enumerable:!0})})}return n}c($w,"getErrorFromOAuthErrorResponse");wa.getErrorFromOAuthErrorResponse=$w});var Af=v(gc=>{"use strict";Object.defineProperty(gc,"__esModule",{value:!0});gc.StsCredentials=void 0;var zw=require("querystring"),Zw=mn(),jT=WT(),_f=class _f extends jT.OAuthClientAuthHandler{constructor(e,u){super(u),this.tokenExchangeEndpoint=e,this.transporter=new Zw.DefaultTransporter}async exchangeToken(e,u,r){var a,s,n;let l={grant_type:e.grantType,resource:e.resource,audience:e.audience,scope:(a=e.scope)===null||a===void 0?void 0:a.join(" "),requested_token_type:e.requestedTokenType,subject_token:e.subjectToken,subject_token_type:e.subjectTokenType,actor_token:(s=e.actingParty)===null||s===void 0?void 0:s.actorToken,actor_token_type:(n=e.actingParty)===null||n===void 0?void 0:n.actorTokenType,options:r&&JSON.stringify(r)};Object.keys(l).forEach(h=>{typeof l[h]>"u"&&delete l[h]});let d={"Content-Type":"application/x-www-form-urlencoded"};Object.assign(d,u||{});let p={url:this.tokenExchangeEndpoint,method:"POST",headers:d,data:zw.stringify(l),responseType:"json"};this.applyClientAuthenticationOptions(p);try{let h=await this.transporter.request(p),f=h.data;return f.res=h,f}catch(h){throw h.response?jT.getErrorFromOAuthErrorResponse(h.response.data,h):h}}};c(_f,"StsCredentials");var Tf=_f;gc.StsCredentials=Tf});var Ua=v(Su=>{"use strict";Object.defineProperty(Su,"__esModule",{value:!0});Su.BaseExternalAccountClient=Su.CLOUD_RESOURCE_MANAGER=Su.EXTERNAL_ACCOUNT_TYPE=Su.EXPIRATION_TIME_OFFSET=void 0;var eU=require("stream"),uU=Bn(),tU=Af(),rU="urn:ietf:params:oauth:grant-type:token-exchange",iU="urn:ietf:params:oauth:token-type:access_token",Yf="https://www.googleapis.com/auth/cloud-platform",yc="\\.googleapis\\.com$",Rf="[^\\.\\s\\/\\\\]+";Su.EXPIRATION_TIME_OFFSET=5*60*1e3;Su.EXTERNAL_ACCOUNT_TYPE="external_account";Su.CLOUD_RESOURCE_MANAGER="https://cloudresourcemanager.googleapis.com/v1/projects/";var aU="//iam.googleapis.com/locations/[^/]+/workforcePools/[^/]+/providers/.+",yf=class yf extends uU.AuthClient{constructor(e,u){if(super(),e.type!==Su.EXTERNAL_ACCOUNT_TYPE)throw new Error(`Expected "${Su.EXTERNAL_ACCOUNT_TYPE}" type but received "${e.type}"`);if(this.clientAuth=e.client_id?{confidentialClientType:"basic",clientId:e.client_id,clientSecret:e.client_secret}:void 0,!this.validateGoogleAPIsUrl("sts",e.token_url))throw new Error(`"${e.token_url}" is not a valid token url.`);this.stsCredential=new tU.StsCredentials(e.token_url,this.clientAuth),this.scopes=[Yf],this.cachedAccessToken=null,this.audience=e.audience,this.subjectTokenType=e.subject_token_type,this.quotaProjectId=e.quota_project_id,this.workforcePoolUserProject=e.workforce_pool_user_project;let r=new RegExp(aU);if(this.workforcePoolUserProject&&!this.audience.match(r))throw new Error("workforcePoolUserProject should not be set for non-workforce pool credentials.");if(typeof e.service_account_impersonation_url<"u"&&!this.validateGoogleAPIsUrl("iamcredentials",e.service_account_impersonation_url))throw new Error(`"${e.service_account_impersonation_url}" is not a valid service account impersonation url.`);this.serviceAccountImpersonationUrl=e.service_account_impersonation_url,typeof(u==null?void 0:u.eagerRefreshThresholdMillis)!="number"?this.eagerRefreshThresholdMillis=Su.EXPIRATION_TIME_OFFSET:this.eagerRefreshThresholdMillis=u.eagerRefreshThresholdMillis,this.forceRefreshOnFailure=!!(u!=null&&u.forceRefreshOnFailure),this.projectId=null,this.projectNumber=this.getProjectNumber(this.audience)}getServiceAccountEmail(){var e;if(this.serviceAccountImpersonationUrl){let r=/serviceAccounts\/(?[^:]+):generateAccessToken$/.exec(this.serviceAccountImpersonationUrl);return((e=r==null?void 0:r.groups)===null||e===void 0?void 0:e.email)||null}return null}setCredentials(e){super.setCredentials(e),this.cachedAccessToken=e}async getAccessToken(){return(!this.cachedAccessToken||this.isExpired(this.cachedAccessToken))&&await this.refreshAccessTokenAsync(),{token:this.cachedAccessToken.access_token,res:this.cachedAccessToken.res}}async getRequestHeaders(){let u={Authorization:`Bearer ${(await this.getAccessToken()).token}`};return this.addSharedMetadataHeaders(u)}request(e,u){if(u)this.requestAsync(e).then(r=>u(null,r),r=>u(r,r.response));else return this.requestAsync(e)}async getProjectId(){let e=this.projectNumber||this.workforcePoolUserProject;if(this.projectId)return this.projectId;if(e){let u=await this.getRequestHeaders(),r=await this.transporter.request({headers:u,url:`${Su.CLOUD_RESOURCE_MANAGER}${e}`,responseType:"json"});return this.projectId=r.data.projectId,this.projectId}return null}async requestAsync(e,u=!1){let r;try{let a=await this.getRequestHeaders();e.headers=e.headers||{},a&&a["x-goog-user-project"]&&(e.headers["x-goog-user-project"]=a["x-goog-user-project"]),a&&a.Authorization&&(e.headers.Authorization=a.Authorization),r=await this.transporter.request(e)}catch(a){let s=a.response;if(s){let n=s.status,l=s.config.data instanceof eU.Readable;if(!u&&(n===401||n===403)&&!l&&this.forceRefreshOnFailure)return await this.refreshAccessTokenAsync(),await this.requestAsync(e,!0)}throw a}return r}async refreshAccessTokenAsync(){let e=await this.retrieveSubjectToken(),u={grantType:rU,audience:this.audience,requestedTokenType:iU,subjectToken:e,subjectTokenType:this.subjectTokenType,scope:this.serviceAccountImpersonationUrl?[Yf]:this.getScopesArray()},r=!this.clientAuth&&this.workforcePoolUserProject?{userProject:this.workforcePoolUserProject}:void 0,a=await this.stsCredential.exchangeToken(u,void 0,r);return this.serviceAccountImpersonationUrl?this.cachedAccessToken=await this.getImpersonatedAccessToken(a.access_token):a.expires_in?this.cachedAccessToken={access_token:a.access_token,expiry_date:new Date().getTime()+a.expires_in*1e3,res:a.res}:this.cachedAccessToken={access_token:a.access_token,res:a.res},this.credentials={},Object.assign(this.credentials,this.cachedAccessToken),delete this.credentials.res,this.emit("tokens",{refresh_token:null,expiry_date:this.cachedAccessToken.expiry_date,access_token:this.cachedAccessToken.access_token,token_type:"Bearer",id_token:null}),this.cachedAccessToken}getProjectNumber(e){let u=e.match(/\/projects\/([^/]+)/);return u?u[1]:null}async getImpersonatedAccessToken(e){let u={url:this.serviceAccountImpersonationUrl,method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},data:{scope:this.getScopesArray()},responseType:"json"},r=await this.transporter.request(u),a=r.data;return{access_token:a.accessToken,expiry_date:new Date(a.expireTime).getTime(),res:r}}isExpired(e){let u=new Date().getTime();return e.expiry_date?u>=e.expiry_date-this.eagerRefreshThresholdMillis:!1}getScopesArray(){return typeof this.scopes=="string"?[this.scopes]:typeof this.scopes>"u"?[Yf]:this.scopes}validateGoogleAPIsUrl(e,u){let r;try{r=new URL(u)}catch{return!1}let a=r.hostname;if(r.protocol!=="https:")return!1;let s=[new RegExp("^"+Rf+"\\."+e+yc),new RegExp("^"+e+yc),new RegExp("^"+e+"\\."+Rf+yc),new RegExp("^"+Rf+"\\-"+e+yc)];for(let n of s)if(a.match(n))return!0;return!1}};c(yf,"BaseExternalAccountClient");var gf=yf;Su.BaseExternalAccountClient=gf});var wf=v(Nc=>{"use strict";var Nf,Cf,If;Object.defineProperty(Nc,"__esModule",{value:!0});Nc.IdentityPoolClient=void 0;var xf=require("fs"),vf=require("util"),sU=Ua(),nU=vf.promisify((Nf=xf.readFile)!==null&&Nf!==void 0?Nf:()=>{}),oU=vf.promisify((Cf=xf.realpath)!==null&&Cf!==void 0?Cf:()=>{}),lU=vf.promisify((If=xf.lstat)!==null&&If!==void 0?If:()=>{}),Df=class Df extends sU.BaseExternalAccountClient{constructor(e,u){var r,a;if(super(e,u),this.file=e.credential_source.file,this.url=e.credential_source.url,this.headers=e.credential_source.headers,!this.file&&!this.url)throw new Error('No valid Identity Pool "credential_source" provided');if(this.formatType=((r=e.credential_source.format)===null||r===void 0?void 0:r.type)||"text",this.formatSubjectTokenFieldName=(a=e.credential_source.format)===null||a===void 0?void 0:a.subject_token_field_name,this.formatType!=="json"&&this.formatType!=="text")throw new Error(`Invalid credential_source format "${this.formatType}"`);if(this.formatType==="json"&&!this.formatSubjectTokenFieldName)throw new Error("Missing subject_token_field_name for JSON credential_source format")}async retrieveSubjectToken(){return this.file?await this.getTokenFromFile(this.file,this.formatType,this.formatSubjectTokenFieldName):await this.getTokenFromUrl(this.url,this.formatType,this.formatSubjectTokenFieldName,this.headers)}async getTokenFromFile(e,u,r){try{if(e=await oU(e),!(await lU(e)).isFile())throw new Error}catch(n){throw n.message=`The file at ${e} does not exist, or it is not a file. ${n.message}`,n}let a,s=await nU(e,{encoding:"utf8"});if(u==="text"?a=s:u==="json"&&r&&(a=JSON.parse(s)[r]),!a)throw new Error("Unable to parse the subject_token from the credential_source file");return a}async getTokenFromUrl(e,u,r,a){let s={url:e,method:"GET",headers:a,responseType:u},n;if(u==="text"?n=(await this.transporter.request(s)).data:u==="json"&&r&&(n=(await this.transporter.request(s)).data[r]),!n)throw new Error("Unable to parse the subject_token from the credential_source URL");return n}};c(Df,"IdentityPoolClient");var bf=Df;Nc.IdentityPoolClient=bf});var JT=v(Cc=>{"use strict";Object.defineProperty(Cc,"__esModule",{value:!0});Cc.AwsRequestSigner=void 0;var QT=ha(),XT="AWS4-HMAC-SHA256",cU="aws4_request",Pf=class Pf{constructor(e,u){this.getCredentials=e,this.region=u,this.crypto=QT.createCrypto()}async getRequestOptions(e){if(!e.url)throw new Error('"url" is required in "amzOptions"');let u=typeof e.data=="object"?JSON.stringify(e.data):e.data,r=e.url,a=e.method||"GET",s=e.body||u,n=e.headers,l=await this.getCredentials(),d=new URL(r),p=await pU({crypto:this.crypto,host:d.host,canonicalUri:d.pathname,canonicalQuerystring:d.search.substr(1),method:a,region:this.region,securityCredentials:l,requestPayload:s,additionalAmzHeaders:n}),h=Object.assign(p.amzDate?{"x-amz-date":p.amzDate}:{},{Authorization:p.authorizationHeader,host:d.host},n||{});l.token&&Object.assign(h,{"x-amz-security-token":l.token});let f={url:r,method:a,headers:h};return typeof s<"u"&&(f.body=s),f}};c(Pf,"AwsRequestSigner");var Uf=Pf;Cc.AwsRequestSigner=Uf;async function Vn(i,e,u){return await i.signWithHmacSha256(e,u)}c(Vn,"sign");async function dU(i,e,u,r,a){let s=await Vn(i,`AWS4${e}`,u),n=await Vn(i,s,r),l=await Vn(i,n,a);return await Vn(i,l,"aws4_request")}c(dU,"getSigningKey");async function pU(i){let e=i.additionalAmzHeaders||{},u=i.requestPayload||"",r=i.host.split(".")[0],a=new Date,s=a.toISOString().replace(/[-:]/g,"").replace(/\.[0-9]+/,""),n=a.toISOString().replace(/[-]/g,"").replace(/T.*/,""),l={};Object.keys(e).forEach(N=>{l[N.toLowerCase()]=e[N]}),i.securityCredentials.token&&(l["x-amz-security-token"]=i.securityCredentials.token);let d=Object.assign({host:i.host},l.date?{}:{"x-amz-date":s},l),p="",h=Object.keys(d).sort();h.forEach(N=>{p+=`${N}:${d[N]} +`});let f=h.join(";"),S=await i.crypto.sha256DigestHex(u),m=`${i.method} +${i.canonicalUri} +${i.canonicalQuerystring} +${p} +${f} +${S}`,O=`${n}/${i.region}/${r}/${cU}`,M=`${XT} +${s} +${O} +`+await i.crypto.sha256DigestHex(m),T=await dU(i.crypto,i.securityCredentials.secretAccessKey,n,i.region,r),L=await Vn(i.crypto,T,M),I=`${XT} Credential=${i.securityCredentials.accessKeyId}/${O}, SignedHeaders=${f}, Signature=${QT.fromArrayBufferToHex(L)}`;return{amzDate:l.date?void 0:s,authorizationHeader:I,canonicalQuerystring:i.canonicalQuerystring}}c(pU,"generateAuthenticationHeaderMap")});var Hf=v(Ic=>{"use strict";Object.defineProperty(Ic,"__esModule",{value:!0});Ic.AwsClient=void 0;var hU=JT(),fU=Ua(),Ff=class Ff extends fU.BaseExternalAccountClient{constructor(e,u){var r;super(e,u),this.environmentId=e.credential_source.environment_id,this.regionUrl=e.credential_source.region_url,this.securityCredentialsUrl=e.credential_source.url,this.regionalCredVerificationUrl=e.credential_source.regional_cred_verification_url,this.imdsV2SessionTokenUrl=e.credential_source.imdsv2_session_token_url;let a=(r=this.environmentId)===null||r===void 0?void 0:r.match(/^(aws)(\d+)$/);if(!a||!this.regionalCredVerificationUrl)throw new Error('No valid AWS "credential_source" provided');if(parseInt(a[2],10)!==1)throw new Error(`aws version "${a[2]}" is not supported in the current build.`);this.awsRequestSigner=null,this.region=""}async retrieveSubjectToken(){if(!this.awsRequestSigner){let a={};this.imdsV2SessionTokenUrl&&(a["x-aws-ec2-metadata-token"]=await this.getImdsV2SessionToken()),this.region=await this.getAwsRegion(a),this.awsRequestSigner=new hU.AwsRequestSigner(async()=>{if(process.env.AWS_ACCESS_KEY_ID&&process.env.AWS_SECRET_ACCESS_KEY)return{accessKeyId:process.env.AWS_ACCESS_KEY_ID,secretAccessKey:process.env.AWS_SECRET_ACCESS_KEY,token:process.env.AWS_SESSION_TOKEN};let s=await this.getAwsRoleName(a),n=await this.getAwsSecurityCredentials(s,a);return{accessKeyId:n.AccessKeyId,secretAccessKey:n.SecretAccessKey,token:n.Token}},this.region)}let e=await this.awsRequestSigner.getRequestOptions({url:this.regionalCredVerificationUrl.replace("{region}",this.region),method:"POST"}),u=[],r=Object.assign({"x-goog-cloud-target-resource":this.audience},e.headers);for(let a in r)u.push({key:a,value:r[a]});return encodeURIComponent(JSON.stringify({url:e.url,method:e.method,headers:u}))}async getImdsV2SessionToken(){let e={url:this.imdsV2SessionTokenUrl,method:"PUT",responseType:"text",headers:{"x-aws-ec2-metadata-token-ttl-seconds":"300"}};return(await this.transporter.request(e)).data}async getAwsRegion(e){if(process.env.AWS_REGION||process.env.AWS_DEFAULT_REGION)return process.env.AWS_REGION||process.env.AWS_DEFAULT_REGION;if(!this.regionUrl)throw new Error('Unable to determine AWS region due to missing "options.credential_source.region_url"');let u={url:this.regionUrl,method:"GET",responseType:"text",headers:e},r=await this.transporter.request(u);return r.data.substr(0,r.data.length-1)}async getAwsRoleName(e){if(!this.securityCredentialsUrl)throw new Error('Unable to determine AWS role name due to missing "options.credential_source.url"');let u={url:this.securityCredentialsUrl,method:"GET",responseType:"text",headers:e};return(await this.transporter.request(u)).data}async getAwsSecurityCredentials(e,u){return(await this.transporter.request({url:`${this.securityCredentialsUrl}/${e}`,responseType:"json",headers:u})).data}};c(Ff,"AwsClient");var kf=Ff;Ic.AwsClient=kf});var qf=v(bc=>{"use strict";Object.defineProperty(bc,"__esModule",{value:!0});bc.ExternalAccountClient=void 0;var SU=Ua(),OU=wf(),LU=Hf(),Gf=class Gf{constructor(){throw new Error("ExternalAccountClients should be initialized via: ExternalAccountClient.fromJSON(), directly via explicit constructors, eg. new AwsClient(options), new IdentityPoolClient(options) or via new GoogleAuth(options).getClient()")}static fromJSON(e,u){var r;return e&&e.type===SU.EXTERNAL_ACCOUNT_TYPE?!((r=e.credential_source)===null||r===void 0)&&r.environment_id?new LU.AwsClient(e,u):new OU.IdentityPoolClient(e,u):null}};c(Gf,"ExternalAccountClient");var Vf=Gf;bc.ExternalAccountClient=Vf});var ZT=v(ka=>{"use strict";Object.defineProperty(ka,"__esModule",{value:!0});ka.GoogleAuth=ka.CLOUD_SDK_CLIENT_ID=void 0;var EU=require("child_process"),Gn=require("fs"),Kf=ml(),mU=require("os"),Wf=require("path"),BU=ha(),MU=mn(),TU=F3(),_U=G3(),AU=q3(),Oi=Of(),$T=mf(),zT=qf(),Pa=Ua();ka.CLOUD_SDK_CLIENT_ID="764086051850-6qr4p6gpi6hn506pt8ejuq83di341hur.apps.googleusercontent.com";var jf=class jf{constructor(e){this.checkIsGCE=void 0,this.jsonContent=null,this.cachedCredential=null,e=e||{},this._cachedProjectId=e.projectId||null,this.cachedCredential=e.authClient||null,this.keyFilename=e.keyFilename||e.keyFile,this.scopes=e.scopes,this.jsonContent=e.credentials||null,this.clientOptions=e.clientOptions}get isGCE(){return this.checkIsGCE}setGapicJWTValues(e){e.defaultServicePath=this.defaultServicePath,e.useJWTAccessWithScope=this.useJWTAccessWithScope,e.defaultScopes=this.defaultScopes}getProjectId(e){if(e)this.getProjectIdAsync().then(u=>e(null,u),e);else return this.getProjectIdAsync()}getProjectIdAsync(){return this._cachedProjectId?Promise.resolve(this._cachedProjectId):(this._getDefaultProjectIdPromise||(this._getDefaultProjectIdPromise=new Promise(async(e,u)=>{try{let r=this.getProductionProjectId()||await this.getFileProjectId()||await this.getDefaultServiceProjectId()||await this.getGCEProjectId()||await this.getExternalAccountClientProjectId();if(this._cachedProjectId=r,!r)throw new Error(`Unable to detect a Project Id in the current environment. +To learn more about authentication and Google APIs, visit: +https://cloud.google.com/docs/authentication/getting-started`);e(r)}catch(r){u(r)}})),this._getDefaultProjectIdPromise)}getAnyScopes(){return this.scopes||this.defaultScopes}getApplicationDefault(e={},u){let r;if(typeof e=="function"?u=e:r=e,u)this.getApplicationDefaultAsync(r).then(a=>u(null,a.credential,a.projectId),u);else return this.getApplicationDefaultAsync(r)}async getApplicationDefaultAsync(e={}){if(this.cachedCredential)return{credential:this.cachedCredential,projectId:await this.getProjectIdAsync()};let u,r;if(u=await this._tryGetApplicationCredentialsFromEnvironmentVariable(e),u)return u instanceof Oi.JWT?u.scopes=this.scopes:u instanceof Pa.BaseExternalAccountClient&&(u.scopes=this.getAnyScopes()),this.cachedCredential=u,r=await this.getProjectId(),{credential:u,projectId:r};if(u=await this._tryGetApplicationCredentialsFromWellKnownFile(e),u)return u instanceof Oi.JWT?u.scopes=this.scopes:u instanceof Pa.BaseExternalAccountClient&&(u.scopes=this.getAnyScopes()),this.cachedCredential=u,r=await this.getProjectId(),{credential:u,projectId:r};let a;try{a=await this._checkIsGCE()}catch(s){throw s instanceof Error&&(s.message=`Unexpected error determining execution environment: ${s.message}`),s}if(!a)throw new Error("Could not load the default credentials. Browse to https://cloud.google.com/docs/authentication/getting-started for more information.");return e.scopes=this.getAnyScopes(),this.cachedCredential=new TU.Compute(e),r=await this.getProjectId(),{projectId:r,credential:this.cachedCredential}}async _checkIsGCE(){return this.checkIsGCE===void 0&&(this.checkIsGCE=await Kf.isAvailable()),this.checkIsGCE}async _tryGetApplicationCredentialsFromEnvironmentVariable(e){let u=process.env.GOOGLE_APPLICATION_CREDENTIALS||process.env.google_application_credentials;if(!u||u.length===0)return null;try{return this._getApplicationCredentialsFromFilePath(u,e)}catch(r){throw r instanceof Error&&(r.message=`Unable to read the credential file specified by the GOOGLE_APPLICATION_CREDENTIALS environment variable: ${r.message}`),r}}async _tryGetApplicationCredentialsFromWellKnownFile(e){let u=null;if(this._isWindows())u=process.env.APPDATA;else{let a=process.env.HOME;a&&(u=Wf.join(a,".config"))}return u&&(u=Wf.join(u,"gcloud","application_default_credentials.json"),Gn.existsSync(u)||(u=null)),u?await this._getApplicationCredentialsFromFilePath(u,e):null}async _getApplicationCredentialsFromFilePath(e,u={}){if(!e||e.length===0)throw new Error("The file path is invalid.");try{if(e=Gn.realpathSync(e),!Gn.lstatSync(e).isFile())throw new Error}catch(a){throw a instanceof Error&&(a.message=`The file at ${e} does not exist, or it is not a file. ${a.message}`),a}let r=Gn.createReadStream(e);return this.fromStream(r,u)}fromJSON(e,u){let r;if(!e)throw new Error("Must pass in a JSON object containing the Google auth settings.");return u=u||{},e.type==="authorized_user"?(r=new $T.UserRefreshClient(u),r.fromJSON(e)):e.type===Pa.EXTERNAL_ACCOUNT_TYPE?(r=zT.ExternalAccountClient.fromJSON(e,u),r.scopes=this.getAnyScopes()):(u.scopes=this.scopes,r=new Oi.JWT(u),this.setGapicJWTValues(r),r.fromJSON(e)),r}_cacheClientFromJSON(e,u){let r;return u=u||{},e.type==="authorized_user"?(r=new $T.UserRefreshClient(u),r.fromJSON(e)):e.type===Pa.EXTERNAL_ACCOUNT_TYPE?(r=zT.ExternalAccountClient.fromJSON(e,u),r.scopes=this.getAnyScopes()):(u.scopes=this.scopes,r=new Oi.JWT(u),this.setGapicJWTValues(r),r.fromJSON(e)),this.jsonContent=e,this.cachedCredential=r,r}fromStream(e,u={},r){let a={};if(typeof u=="function"?r=u:a=u,r)this.fromStreamAsync(e,a).then(s=>r(null,s),r);else return this.fromStreamAsync(e,a)}fromStreamAsync(e,u){return new Promise((r,a)=>{if(!e)throw new Error("Must pass in a stream containing the Google auth settings.");let s="";e.setEncoding("utf8").on("error",a).on("data",n=>s+=n).on("end",()=>{try{try{let n=JSON.parse(s),l=this._cacheClientFromJSON(n,u);return r(l)}catch(n){if(!this.keyFilename)throw n;let l=new Oi.JWT({...this.clientOptions,keyFile:this.keyFilename});return this.cachedCredential=l,this.setGapicJWTValues(l),r(l)}}catch(n){return a(n)}})})}fromAPIKey(e,u){u=u||{};let r=new Oi.JWT(u);return r.fromAPIKey(e),r}_isWindows(){let e=mU.platform();return!!(e&&e.length>=3&&e.substring(0,3).toLowerCase()==="win")}async getDefaultServiceProjectId(){return new Promise(e=>{EU.exec("gcloud config config-helper --format json",(u,r)=>{if(!u&&r)try{let a=JSON.parse(r).configuration.properties.core.project;e(a);return}catch{}e(null)})})}getProductionProjectId(){return process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT||process.env.gcloud_project||process.env.google_cloud_project}async getFileProjectId(){if(this.cachedCredential)return this.cachedCredential.projectId;if(this.keyFilename){let u=await this.getClient();if(u&&u.projectId)return u.projectId}let e=await this._tryGetApplicationCredentialsFromEnvironmentVariable();return e?e.projectId:null}async getExternalAccountClientProjectId(){return!this.jsonContent||this.jsonContent.type!==Pa.EXTERNAL_ACCOUNT_TYPE?null:await(await this.getClient()).getProjectId()}async getGCEProjectId(){try{return await Kf.project("project-id")}catch{return null}}getCredentials(e){if(e)this.getCredentialsAsync().then(u=>e(null,u),e);else return this.getCredentialsAsync()}async getCredentialsAsync(){if(await this.getClient(),this.jsonContent)return{client_email:this.jsonContent.client_email,private_key:this.jsonContent.private_key};if(!await this._checkIsGCE())throw new Error("Unknown error.");let u=await Kf.instance({property:"service-accounts/",params:{recursive:"true"}});if(!u||!u.default||!u.default.email)throw new Error("Failure from metadata server.");return{client_email:u.default.email}}async getClient(e){if(e)throw new Error("Passing options to getClient is forbidden in v5.0.0. Use new GoogleAuth(opts) instead.");if(!this.cachedCredential)if(this.jsonContent)this._cacheClientFromJSON(this.jsonContent,this.clientOptions);else if(this.keyFilename){let u=Wf.resolve(this.keyFilename),r=Gn.createReadStream(u);await this.fromStreamAsync(r,this.clientOptions)}else await this.getApplicationDefaultAsync(this.clientOptions);return this.cachedCredential}async getIdTokenClient(e){let u=await this.getClient();if(!("fetchIdToken"in u))throw new Error("Cannot fetch ID token in this environment, use GCE or set the GOOGLE_APPLICATION_CREDENTIALS environment variable to a service account credentials JSON file.");return new _U.IdTokenClient({targetAudience:e,idTokenProvider:u})}async getAccessToken(){return(await(await this.getClient()).getAccessToken()).token}async getRequestHeaders(e){return(await this.getClient()).getRequestHeaders(e)}async authorizeRequest(e){e=e||{};let u=e.url||e.uri,a=await(await this.getClient()).getRequestHeaders(u);return e.headers=Object.assign(e.headers||{},a),e}async request(e){return(await this.getClient()).request(e)}getEnv(){return AU.getEnv()}async sign(e){let u=await this.getClient(),r=BU.createCrypto();if(u instanceof Oi.JWT&&u.key)return await r.sign(u.key,e);if(u instanceof Pa.BaseExternalAccountClient&&u.getServiceAccountEmail())return this.signBlob(r,u.getServiceAccountEmail(),e);if(!await this.getProjectId())throw new Error("Cannot sign data without a project ID.");let s=await this.getCredentials();if(!s.client_email)throw new Error("Cannot sign data without `client_email`.");return this.signBlob(r,s.client_email,e)}async signBlob(e,u,r){let a=`https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/${u}:signBlob`;return(await this.request({method:"POST",url:a,data:{payload:e.encodeBase64StringUtf8(r)}})).data.signedBlob}};c(jf,"GoogleAuth");var xc=jf;ka.GoogleAuth=xc;xc.DefaultTransporter=MU.DefaultTransporter});var e_=v(vc=>{"use strict";Object.defineProperty(vc,"__esModule",{value:!0});vc.IAMAuth=void 0;var Qf=class Qf{constructor(e,u){this.selector=e,this.token=u,this.selector=e,this.token=u}getRequestHeaders(){return{"x-goog-iam-authority-selector":this.selector,"x-goog-iam-authorization-token":this.token}}};c(Qf,"IAMAuth");var Xf=Qf;vc.IAMAuth=Xf});var t_=v(Dc=>{"use strict";Object.defineProperty(Dc,"__esModule",{value:!0});Dc.Impersonated=void 0;var u_=ri(),$f=class $f extends u_.OAuth2Client{constructor(e={}){var u,r,a,s,n,l;super(e),this.credentials={expiry_date:1,refresh_token:"impersonated-placeholder"},this.sourceClient=(u=e.sourceClient)!==null&&u!==void 0?u:new u_.OAuth2Client,this.targetPrincipal=(r=e.targetPrincipal)!==null&&r!==void 0?r:"",this.delegates=(a=e.delegates)!==null&&a!==void 0?a:[],this.targetScopes=(s=e.targetScopes)!==null&&s!==void 0?s:[],this.lifetime=(n=e.lifetime)!==null&&n!==void 0?n:3600,this.endpoint=(l=e.endpoint)!==null&&l!==void 0?l:"https://iamcredentials.googleapis.com"}async refreshToken(e){var u,r,a,s,n,l;try{await this.sourceClient.getAccessToken();let d="projects/-/serviceAccounts/"+this.targetPrincipal,p=`${this.endpoint}/v1/${d}:generateAccessToken`,h={delegates:this.delegates,scope:this.targetScopes,lifetime:this.lifetime+"s"},f=await this.sourceClient.request({url:p,data:h,method:"POST"}),S=f.data;return this.credentials.access_token=S.accessToken,this.credentials.expiry_date=Date.parse(S.expireTime),{tokens:this.credentials,res:f}}catch(d){let p=(a=(r=(u=d==null?void 0:d.response)===null||u===void 0?void 0:u.data)===null||r===void 0?void 0:r.error)===null||a===void 0?void 0:a.status,h=(l=(n=(s=d==null?void 0:d.response)===null||s===void 0?void 0:s.data)===null||n===void 0?void 0:n.error)===null||l===void 0?void 0:l.message;throw p&&h?(d.message=`${p}: unable to impersonate: ${h}`,d):(d.message=`unable to impersonate: ${d}`,d)}}};c($f,"Impersonated");var Jf=$f;Dc.Impersonated=Jf});var r_=v($u=>{"use strict";Object.defineProperty($u,"__esModule",{value:!0});$u.DownscopedClient=$u.EXPIRATION_TIME_OFFSET=$u.MAX_ACCESS_BOUNDARY_RULES_COUNT=void 0;var YU=require("stream"),RU=Bn(),gU=Af(),yU="urn:ietf:params:oauth:grant-type:token-exchange",NU="urn:ietf:params:oauth:token-type:access_token",CU="urn:ietf:params:oauth:token-type:access_token",IU="https://sts.googleapis.com/v1/token";$u.MAX_ACCESS_BOUNDARY_RULES_COUNT=10;$u.EXPIRATION_TIME_OFFSET=5*60*1e3;var Zf=class Zf extends RU.AuthClient{constructor(e,u,r,a){if(super(),this.authClient=e,this.credentialAccessBoundary=u,u.accessBoundary.accessBoundaryRules.length===0)throw new Error("At least one access boundary rule needs to be defined.");if(u.accessBoundary.accessBoundaryRules.length>$u.MAX_ACCESS_BOUNDARY_RULES_COUNT)throw new Error(`The provided access boundary has more than ${$u.MAX_ACCESS_BOUNDARY_RULES_COUNT} access boundary rules.`);for(let s of u.accessBoundary.accessBoundaryRules)if(s.availablePermissions.length===0)throw new Error("At least one permission should be defined in access boundary rules.");this.stsCredential=new gU.StsCredentials(IU),this.cachedDownscopedAccessToken=null,typeof(r==null?void 0:r.eagerRefreshThresholdMillis)!="number"?this.eagerRefreshThresholdMillis=$u.EXPIRATION_TIME_OFFSET:this.eagerRefreshThresholdMillis=r.eagerRefreshThresholdMillis,this.forceRefreshOnFailure=!!(r!=null&&r.forceRefreshOnFailure),this.quotaProjectId=a}setCredentials(e){if(!e.expiry_date)throw new Error("The access token expiry_date field is missing in the provided credentials.");super.setCredentials(e),this.cachedDownscopedAccessToken=e}async getAccessToken(){return(!this.cachedDownscopedAccessToken||this.isExpired(this.cachedDownscopedAccessToken))&&await this.refreshAccessTokenAsync(),{token:this.cachedDownscopedAccessToken.access_token,expirationTime:this.cachedDownscopedAccessToken.expiry_date,res:this.cachedDownscopedAccessToken.res}}async getRequestHeaders(){let u={Authorization:`Bearer ${(await this.getAccessToken()).token}`};return this.addSharedMetadataHeaders(u)}request(e,u){if(u)this.requestAsync(e).then(r=>u(null,r),r=>u(r,r.response));else return this.requestAsync(e)}async requestAsync(e,u=!1){let r;try{let a=await this.getRequestHeaders();e.headers=e.headers||{},a&&a["x-goog-user-project"]&&(e.headers["x-goog-user-project"]=a["x-goog-user-project"]),a&&a.Authorization&&(e.headers.Authorization=a.Authorization),r=await this.transporter.request(e)}catch(a){let s=a.response;if(s){let n=s.status,l=s.config.data instanceof YU.Readable;if(!u&&(n===401||n===403)&&!l&&this.forceRefreshOnFailure)return await this.refreshAccessTokenAsync(),await this.requestAsync(e,!0)}throw a}return r}async refreshAccessTokenAsync(){var e;let u=(await this.authClient.getAccessToken()).token,r={grantType:yU,requestedTokenType:NU,subjectToken:u,subjectTokenType:CU},a=await this.stsCredential.exchangeToken(r,void 0,this.credentialAccessBoundary),s=((e=this.authClient.credentials)===null||e===void 0?void 0:e.expiry_date)||null,n=a.expires_in?new Date().getTime()+a.expires_in*1e3:s;return this.cachedDownscopedAccessToken={access_token:a.access_token,expiry_date:n,res:a.res},this.credentials={},Object.assign(this.credentials,this.cachedDownscopedAccessToken),delete this.credentials.res,this.emit("tokens",{refresh_token:null,expiry_date:this.cachedDownscopedAccessToken.expiry_date,access_token:this.cachedDownscopedAccessToken.access_token,token_type:"Bearer",id_token:null}),this.cachedDownscopedAccessToken}isExpired(e){let u=new Date().getTime();return e.expiry_date?u>=e.expiry_date-this.eagerRefreshThresholdMillis:!1}};c(Zf,"DownscopedClient");var zf=Zf;$u.DownscopedClient=zf});var s_=v(le=>{"use strict";Object.defineProperty(le,"__esModule",{value:!0});le.GoogleAuth=le.auth=void 0;var i_=ZT();Object.defineProperty(le,"GoogleAuth",{enumerable:!0,get:function(){return i_.GoogleAuth}});var bU=Bn();Object.defineProperty(le,"AuthClient",{enumerable:!0,get:function(){return bU.AuthClient}});var xU=F3();Object.defineProperty(le,"Compute",{enumerable:!0,get:function(){return xU.Compute}});var vU=q3();Object.defineProperty(le,"GCPEnv",{enumerable:!0,get:function(){return vU.GCPEnv}});var DU=e_();Object.defineProperty(le,"IAMAuth",{enumerable:!0,get:function(){return DU.IAMAuth}});var wU=G3();Object.defineProperty(le,"IdTokenClient",{enumerable:!0,get:function(){return wU.IdTokenClient}});var UU=ff();Object.defineProperty(le,"JWTAccess",{enumerable:!0,get:function(){return UU.JWTAccess}});var PU=Of();Object.defineProperty(le,"JWT",{enumerable:!0,get:function(){return PU.JWT}});var kU=t_();Object.defineProperty(le,"Impersonated",{enumerable:!0,get:function(){return kU.Impersonated}});var a_=ri();Object.defineProperty(le,"CodeChallengeMethod",{enumerable:!0,get:function(){return a_.CodeChallengeMethod}});Object.defineProperty(le,"OAuth2Client",{enumerable:!0,get:function(){return a_.OAuth2Client}});var FU=w3();Object.defineProperty(le,"LoginTicket",{enumerable:!0,get:function(){return FU.LoginTicket}});var HU=mf();Object.defineProperty(le,"UserRefreshClient",{enumerable:!0,get:function(){return HU.UserRefreshClient}});var VU=Hf();Object.defineProperty(le,"AwsClient",{enumerable:!0,get:function(){return VU.AwsClient}});var GU=wf();Object.defineProperty(le,"IdentityPoolClient",{enumerable:!0,get:function(){return GU.IdentityPoolClient}});var qU=qf();Object.defineProperty(le,"ExternalAccountClient",{enumerable:!0,get:function(){return qU.ExternalAccountClient}});var KU=Ua();Object.defineProperty(le,"BaseExternalAccountClient",{enumerable:!0,get:function(){return KU.BaseExternalAccountClient}});var WU=r_();Object.defineProperty(le,"DownscopedClient",{enumerable:!0,get:function(){return WU.DownscopedClient}});var jU=mn();Object.defineProperty(le,"DefaultTransporter",{enumerable:!0,get:function(){return jU.DefaultTransporter}});var XU=new i_.GoogleAuth;le.auth=XU});var l_=v((WQ,u5)=>{"use strict";var{PassThrough:n_}=require("stream"),e5=la()("retry-request"),QU=Eu(),JU={objectMode:!1,retries:2,maxRetryDelay:64,retryDelayMultiplier:2,totalTimeout:600,noResponseRetries:2,currentRetryAttempt:0,shouldRetryFn:function(i){var e=[[100,199],[429,429],[500,599]],u=i.statusCode;e5(`Response status: ${u}`);for(var r;r=e.shift();)if(u>=r[0]&&u<=r[1])return!0}};function $U(i,e,u){var r=typeof arguments[arguments.length-1]!="function";typeof e=="function"&&(u=e);var a=e&&typeof e.currentRetryAttempt=="number";if(e=QU({},JU,e),typeof e.request>"u")try{e.request=require("request")}catch{throw new Error("A request library must be provided to retry-request.")}var s=e.currentRetryAttempt,n=0,l=!1,d,p,h,f,S={abort:function(){f&&f.abort&&f.abort()}};r&&(d=new n_({objectMode:e.objectMode}),d.abort=O);var m=Date.now();if(s>0?T(s):M(),r)return d;return S;function O(){h=null,p&&(p.abort&&p.abort(),p.cancel&&p.cancel(),p.destroy?p.destroy():p.end&&p.end())}function M(){s++,e5(`Current retry attempt: ${s}`),r?(l=!1,h=new n_({objectMode:e.objectMode}),p=e.request(i),setImmediate(function(){d.emit("request")}),p.on("error",function(I){l||(l=!0,L(I))}).on("response",function(I,N){l||(l=!0,L(null,I,N))}).on("complete",d.emit.bind(d,"complete")),p.pipe(h)):f=e.request(i,L)}function T(I){r&&O();var N=o_({maxRetryDelay:e.maxRetryDelay,retryDelayMultiplier:e.retryDelayMultiplier,retryNumber:I,timeOfFirstRequest:m,totalTimeout:e.totalTimeout});e5(`Next retry delay: ${N}`),setTimeout(M,N)}function L(I,N,D){if(I){n++,n<=e.noResponseRetries?T(n):r?(d.emit("error",I),d.end()):u(I,N,D);return}var E=a?s:s-1;if(EUc.length-16&&(c_.default.randomFillSync(Uc),wc=0),Uc.slice(wc,wc+=16)}var c_,Uc,wc,t5=Ze(()=>{c_=vp(require("crypto")),Uc=new Uint8Array(256),wc=Uc.length;c(qn,"rng")});var d_,p_=Ze(()=>{d_=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i});function zU(i){return typeof i=="string"&&d_.test(i)}var Rr,Kn=Ze(()=>{p_();c(zU,"validate");Rr=zU});function ZU(i,e=0){let u=(Fe[i[e+0]]+Fe[i[e+1]]+Fe[i[e+2]]+Fe[i[e+3]]+"-"+Fe[i[e+4]]+Fe[i[e+5]]+"-"+Fe[i[e+6]]+Fe[i[e+7]]+"-"+Fe[i[e+8]]+Fe[i[e+9]]+"-"+Fe[i[e+10]]+Fe[i[e+11]]+Fe[i[e+12]]+Fe[i[e+13]]+Fe[i[e+14]]+Fe[i[e+15]]).toLowerCase();if(!Rr(u))throw TypeError("Stringified UUID is invalid");return u}var Fe,gr,Wn=Ze(()=>{Kn();Fe=[];for(let i=0;i<256;++i)Fe.push((i+256).toString(16).substr(1));c(ZU,"stringify");gr=ZU});function eP(i,e,u){let r=e&&u||0,a=e||new Array(16);i=i||{};let s=i.node||h_,n=i.clockseq!==void 0?i.clockseq:r5;if(s==null||n==null){let S=i.random||(i.rng||qn)();s==null&&(s=h_=[S[0]|1,S[1],S[2],S[3],S[4],S[5]]),n==null&&(n=r5=(S[6]<<8|S[7])&16383)}let l=i.msecs!==void 0?i.msecs:Date.now(),d=i.nsecs!==void 0?i.nsecs:a5+1,p=l-i5+(d-a5)/1e4;if(p<0&&i.clockseq===void 0&&(n=n+1&16383),(p<0||l>i5)&&i.nsecs===void 0&&(d=0),d>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");i5=l,a5=d,r5=n,l+=122192928e5;let h=((l&268435455)*1e4+d)%4294967296;a[r++]=h>>>24&255,a[r++]=h>>>16&255,a[r++]=h>>>8&255,a[r++]=h&255;let f=l/4294967296*1e4&268435455;a[r++]=f>>>8&255,a[r++]=f&255,a[r++]=f>>>24&15|16,a[r++]=f>>>16&255,a[r++]=n>>>8|128,a[r++]=n&255;for(let S=0;S<6;++S)a[r+S]=s[S];return e||gr(a)}var h_,r5,i5,a5,f_,S_=Ze(()=>{t5();Wn();i5=0,a5=0;c(eP,"v1");f_=eP});function uP(i){if(!Rr(i))throw TypeError("Invalid UUID");let e,u=new Uint8Array(16);return u[0]=(e=parseInt(i.slice(0,8),16))>>>24,u[1]=e>>>16&255,u[2]=e>>>8&255,u[3]=e&255,u[4]=(e=parseInt(i.slice(9,13),16))>>>8,u[5]=e&255,u[6]=(e=parseInt(i.slice(14,18),16))>>>8,u[7]=e&255,u[8]=(e=parseInt(i.slice(19,23),16))>>>8,u[9]=e&255,u[10]=(e=parseInt(i.slice(24,36),16))/1099511627776&255,u[11]=e/4294967296&255,u[12]=e>>>24&255,u[13]=e>>>16&255,u[14]=e>>>8&255,u[15]=e&255,u}var Pc,s5=Ze(()=>{Kn();c(uP,"parse");Pc=uP});function tP(i){i=unescape(encodeURIComponent(i));let e=[];for(let u=0;u{Wn();s5();c(tP,"stringToBytes");rP="6ba7b810-9dad-11d1-80b4-00c04fd430c8",iP="6ba7b811-9dad-11d1-80b4-00c04fd430c8";c(jn,"default")});function aP(i){return Array.isArray(i)?i=Buffer.from(i):typeof i=="string"&&(i=Buffer.from(i,"utf8")),O_.default.createHash("md5").update(i).digest()}var O_,L_,E_=Ze(()=>{O_=vp(require("crypto"));c(aP,"md5");L_=aP});var sP,m_,B_=Ze(()=>{n5();E_();sP=jn("v3",48,L_),m_=sP});function nP(i,e,u){i=i||{};let r=i.random||(i.rng||qn)();if(r[6]=r[6]&15|64,r[8]=r[8]&63|128,e){u=u||0;for(let a=0;a<16;++a)e[u+a]=r[a];return e}return gr(r)}var M_,T_=Ze(()=>{t5();Wn();c(nP,"v4");M_=nP});function oP(i){return Array.isArray(i)?i=Buffer.from(i):typeof i=="string"&&(i=Buffer.from(i,"utf8")),__.default.createHash("sha1").update(i).digest()}var __,A_,Y_=Ze(()=>{__=vp(require("crypto"));c(oP,"sha1");A_=oP});var lP,R_,g_=Ze(()=>{n5();Y_();lP=jn("v5",80,A_),R_=lP});var y_,N_=Ze(()=>{y_="00000000-0000-0000-0000-000000000000"});function cP(i){if(!Rr(i))throw TypeError("Invalid UUID");return parseInt(i.substr(14,1),16)}var C_,I_=Ze(()=>{Kn();c(cP,"version");C_=cP});var kc={};nN(kc,{NIL:()=>y_,parse:()=>Pc,stringify:()=>gr,v1:()=>f_,v3:()=>m_,v4:()=>M_,v5:()=>R_,validate:()=>Rr,version:()=>C_});var Fc=Ze(()=>{S_();B_();T_();g_();N_();I_();Kn();Wn();s5()});var b_=v(o5=>{"use strict";Object.defineProperty(o5,"__esModule",{value:!0});function dP(i,e,{signal:u}={}){return new Promise((r,a)=>{function s(){u==null||u.removeEventListener("abort",s),i.removeListener(e,n),i.removeListener("error",l)}c(s,"cleanup");function n(...d){s(),r(d)}c(n,"onEvent");function l(d){s(),a(d)}c(l,"onError"),u==null||u.addEventListener("abort",s),i.on(e,n),i.on("error",l)})}c(dP,"once");o5.default=dP});var x_=v(Li=>{"use strict";var pP=Li&&Li.__awaiter||function(i,e,u,r){function a(s){return s instanceof u?s:new u(function(n){n(s)})}return c(a,"adopt"),new(u||(u=Promise))(function(s,n){function l(h){try{p(r.next(h))}catch(f){n(f)}}c(l,"fulfilled");function d(h){try{p(r.throw(h))}catch(f){n(f)}}c(d,"rejected");function p(h){h.done?s(h.value):a(h.value).then(l,d)}c(p,"step"),p((r=r.apply(i,e||[])).next())})},Xn=Li&&Li.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Li,"__esModule",{value:!0});var hP=Xn(require("net")),fP=Xn(require("tls")),l5=Xn(require("url")),SP=Xn(la()),OP=Xn(b_()),LP=d3(),yr=(0,SP.default)("http-proxy-agent");function EP(i){return typeof i=="string"?/^https:?$/i.test(i):!1}c(EP,"isHTTPS");var d5=class d5 extends LP.Agent{constructor(e){let u;if(typeof e=="string"?u=l5.default.parse(e):u=e,!u)throw new Error("an HTTP(S) proxy server `host` and `port` must be specified!");yr("Creating new HttpProxyAgent instance: %o",u),super(u);let r=Object.assign({},u);this.secureProxy=u.secureProxy||EP(r.protocol),r.host=r.hostname||r.host,typeof r.port=="string"&&(r.port=parseInt(r.port,10)),!r.port&&r.host&&(r.port=this.secureProxy?443:80),r.host&&r.path&&(delete r.path,delete r.pathname),this.proxy=r}callback(e,u){return pP(this,void 0,void 0,function*(){let{proxy:r,secureProxy:a}=this,s=l5.default.parse(e.path);s.protocol||(s.protocol="http:"),s.hostname||(s.hostname=u.hostname||u.host||null),s.port==null&&typeof u.port&&(s.port=String(u.port)),s.port==="80"&&(s.port=""),e.path=l5.default.format(s),r.auth&&e.setHeader("Proxy-Authorization",`Basic ${Buffer.from(r.auth).toString("base64")}`);let n;if(a?(yr("Creating `tls.Socket`: %o",r),n=fP.default.connect(r)):(yr("Creating `net.Socket`: %o",r),n=hP.default.connect(r)),e._header){let l,d;yr("Regenerating stored HTTP header string for request"),e._header=null,e._implicitHeader(),e.output&&e.output.length>0?(yr("Patching connection write() output buffer with updated header"),l=e.output[0],d=l.indexOf(`\r +\r +`)+4,e.output[0]=e._header+l.substring(d),yr("Output buffer: %o",e.output)):e.outputData&&e.outputData.length>0&&(yr("Patching connection write() output buffer with updated header"),l=e.outputData[0].data,d=l.indexOf(`\r +\r +`)+4,e.outputData[0].data=e._header+l.substring(d),yr("Output buffer: %o",e.outputData[0].data))}return yield(0,OP.default)(n,"connect"),n})}};c(d5,"HttpProxyAgent");var c5=d5;Li.default=c5});var D_=v((f5,v_)=>{"use strict";var mP=f5&&f5.__importDefault||function(i){return i&&i.__esModule?i:{default:i}},p5=mP(x_());function h5(i){return new p5.default(i)}c(h5,"createHttpProxyAgent");(function(i){i.HttpProxyAgent=p5.default,i.prototype=p5.default.prototype})(h5||(h5={}));v_.exports=h5});var w_=v(Gt=>{"use strict";Object.defineProperty(Gt,"__esModule",{value:!0});Gt.getAgent=Gt.pool=void 0;var BP=require("http"),MP=require("https"),TP=require("url");Gt.pool=new Map;function _P(i){let e=process.env.NO_PROXY||process.env.no_proxy;if(!e)return!0;let u=new URL(i);for(let r of e.split(",")){let a=r.trim();if(a===u.origin||a===u.hostname)return!1;if(a.startsWith("*.")||a.startsWith(".")){let s=a.replace(/^\*\./,".");if(u.hostname.endsWith(s))return!1}}return!0}c(_P,"shouldUseProxyForURI");function AP(i,e){let u=i.startsWith("http://"),r=e.proxy||process.env.HTTP_PROXY||process.env.http_proxy||process.env.HTTPS_PROXY||process.env.https_proxy,a=Object.assign({},e.pool),n=!!e.proxy||_P(i);if(r&&n){let d=u?D_():L3(),p={...TP.parse(r),...a};return new d(p)}let l=u?"http":"https";if(e.forever&&(l+=":forever",!Gt.pool.has(l))){let d=u?BP.Agent:MP.Agent;Gt.pool.set(l,new d({...a,keepAlive:!0}))}return Gt.pool.get(l)}c(AP,"getAgent");Gt.getAgent=AP});var U_=v(Ha=>{"use strict";Object.defineProperty(Ha,"__esModule",{value:!0});Ha.TeenyStatistics=Ha.TeenyStatisticsWarning=void 0;var S5=class S5 extends Error{constructor(e){super(e),this.threshold=0,this.type="",this.value=0,this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor)}};c(S5,"TeenyStatisticsWarning");var Fa=S5;Ha.TeenyStatisticsWarning=Fa;Fa.CONCURRENT_REQUESTS="ConcurrentRequestsExceededWarning";var Qn=class Qn{constructor(e){this._concurrentRequests=0,this._didConcurrentRequestWarn=!1,this._options=Qn._prepareOptions(e)}getOptions(){return Object.assign({},this._options)}setOptions(e){let u=this._options;return this._options=Qn._prepareOptions(e),u}get counters(){return{concurrentRequests:this._concurrentRequests}}requestStarting(){if(this._concurrentRequests++,this._options.concurrentRequests>0&&this._concurrentRequests>=this._options.concurrentRequests&&!this._didConcurrentRequestWarn){this._didConcurrentRequestWarn=!0;let e=new Fa("Possible excessive concurrent requests detected. "+this._concurrentRequests+" requests in-flight, which exceeds the configured threshold of "+this._options.concurrentRequests+". Use the TEENY_REQUEST_WARN_CONCURRENT_REQUESTS environment variable or the concurrentRequests option of teeny-request to increase or disable (0) this warning.");e.type=Fa.CONCURRENT_REQUESTS,e.value=this._concurrentRequests,e.threshold=this._options.concurrentRequests,process.emitWarning(e)}}requestFinished(){this._concurrentRequests--}static _prepareOptions({concurrentRequests:e}={}){let u=this.DEFAULT_WARN_CONCURRENT_REQUESTS,r=Number(process.env.TEENY_REQUEST_WARN_CONCURRENT_REQUESTS);return e!==void 0?u=e:Number.isNaN(r)||(u=r),{concurrentRequests:u}}};c(Qn,"TeenyStatistics");var Hc=Qn;Ha.TeenyStatistics=Hc;Hc.DEFAULT_WARN_CONCURRENT_REQUESTS=5e3});var k_=v((JJ,P_)=>{"use strict";P_.exports=c(function(e,u,r,a){if(!e||!u||!e[u])throw new Error("You must provide an object and a key for an existing method");a||(a=r,r={}),a=a||function(){},r.callthrough=r.callthrough||!1,r.calls=r.calls||0;var s=r.calls===0,n=e[u].bind(e);e[u]=function(){var l=[].slice.call(arguments),d;return r.callthrough&&(d=n.apply(e,l)),d=a.apply(e,l)||d,!s&&--r.calls===0&&(e[u]=n),d}},"stubs")});var O5=v((zJ,H_)=>{"use strict";var F_=k_();function YP(i){i=i||this;var e={callthrough:!0,calls:1};return F_(i,"_read",e,i.emit.bind(i,"reading")),F_(i,"_write",e,i.emit.bind(i,"writing")),i}c(YP,"StreamEvents");H_.exports=YP});var q_=v(Va=>{"use strict";Object.defineProperty(Va,"__esModule",{value:!0});Va.teenyRequest=Va.RequestError=void 0;var L5=e3(),V_=require("stream"),RP=(Fc(),Dp(kc)),gP=w_(),G_=U_(),yP=O5(),m5=class m5 extends Error{};c(m5,"RequestError");var E5=m5;Va.RequestError=E5;function NP(i){let e={method:i.method||"GET",...i.timeout&&{timeout:i.timeout},...typeof i.gzip=="boolean"&&{compress:i.gzip}};typeof i.json=="object"?(i.headers=i.headers||{},i.headers["Content-Type"]="application/json",e.body=JSON.stringify(i.json)):Buffer.isBuffer(i.body)?e.body=i.body:typeof i.body!="string"?e.body=JSON.stringify(i.body):e.body=i.body,e.headers=i.headers;let u=i.uri||i.url;if(!u)throw new Error("Missing uri or url in reqOpts.");if(i.useQuerystring===!0||typeof i.qs=="object"){let a=require("querystring").stringify(i.qs);u=u+"?"+a}return e.agent=gP.getAgent(u,i),{uri:u,options:e}}c(NP,"requestToFetchOptions");function Vc(i,e){let u={};u.agent=i.agent||!1,u.headers=i.headers||{},u.href=e.url;let r={};return e.headers.forEach((s,n)=>r[n]=s),Object.assign(e.body,{statusCode:e.status,statusMessage:e.statusText,request:u,body:e.body,headers:r,toJSON:()=>({headers:r})})}c(Vc,"fetchToRequestResponse");function CP(i,e){let u=`--${i}--`,r=new V_.PassThrough;for(let a of e){let s=`--${i}\r +Content-Type: ${a["Content-Type"]}\r +\r +`;r.write(s),typeof a.body=="string"?(r.write(a.body),r.write(`\r +`)):(a.body.pipe(r,{end:!1}),a.body.on("end",()=>{r.write(`\r +`),r.write(u),r.end()}))}return r}c(CP,"createMultipartStream");function He(i,e){let{uri:u,options:r}=NP(i),a=i.multipart;if(i.multipart&&a.length===2){if(!e)throw new Error("Multipart without callback is not implemented.");let s=RP.v4();r.headers["Content-Type"]=`multipart/related; boundary=${s}`,r.body=CP(s,a),He.stats.requestStarting(),L5.default(u,r).then(n=>{He.stats.requestFinished();let l=n.headers.get("content-type"),d=Vc(r,n),p=d.body;if(l==="application/json"||l==="application/json; charset=utf-8"){n.json().then(h=>{d.body=h,e(null,d,h)},h=>{e(h,d,p)});return}n.text().then(h=>{d.body=h,e(null,d,h)},h=>{e(h,d,p)})},n=>{He.stats.requestFinished(),e(n,null,null)});return}if(e===void 0){let s=yP(new V_.PassThrough),n;return s.once("reading",()=>{n?n.pipe(s):s.once("response",()=>{n.pipe(s)})}),r.compress=!1,He.stats.requestStarting(),L5.default(u,r).then(l=>{He.stats.requestFinished(),n=l.body,n.on("error",p=>{s.emit("error",p)});let d=Vc(r,l);s.emit("response",d)},l=>{He.stats.requestFinished(),s.emit("error",l)}),s}He.stats.requestStarting(),L5.default(u,r).then(s=>{He.stats.requestFinished();let n=s.headers.get("content-type"),l=Vc(r,s),d=l.body;if(n==="application/json"||n==="application/json; charset=utf-8"){if(l.statusCode===204){e(null,l,d);return}s.json().then(p=>{l.body=p,e(null,l,p)},p=>{e(p,l,d)});return}s.text().then(p=>{let h=Vc(r,s);h.body=p,e(null,h,p)},p=>{e(p,l,d)})},s=>{He.stats.requestFinished(),e(s,null,null)})}c(He,"teenyRequest");Va.teenyRequest=He;He.defaults=i=>(e,u)=>{let r={...i,...e};if(u===void 0)return He(r);He(r,u)};He.stats=new G_.TeenyStatistics;He.resetStats=()=>{He.stats=new G_.TeenyStatistics(He.stats.getOptions())}});var B5=v((t$,K_)=>{K_.exports=require("stream")});var $_=v((r$,J_)=>{"use strict";function W_(i,e){var u=Object.keys(i);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(i);e&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(i,a).enumerable})),u.push.apply(u,r)}return u}c(W_,"ownKeys");function j_(i){for(var e=1;e0?this.tail.next=r:this.head=r,this.tail=r,++this.length},"push")},{key:"unshift",value:c(function(u){var r={data:u,next:this.head};this.length===0&&(this.tail=r),this.head=r,++this.length},"unshift")},{key:"shift",value:c(function(){if(this.length!==0){var u=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,u}},"shift")},{key:"clear",value:c(function(){this.head=this.tail=null,this.length=0},"clear")},{key:"join",value:c(function(u){if(this.length===0)return"";for(var r=this.head,a=""+r.data;r=r.next;)a+=u+r.data;return a},"join")},{key:"concat",value:c(function(u){if(this.length===0)return Gc.alloc(0);for(var r=Gc.allocUnsafe(u>>>0),a=this.head,s=0;a;)PP(a.data,r,s),s+=a.data.length,a=a.next;return r},"concat")},{key:"consume",value:c(function(u,r){var a;return un.length?n.length:u;if(l===n.length?s+=n:s+=n.slice(0,u),u-=l,u===0){l===n.length?(++a,r.next?this.head=r.next:this.head=this.tail=null):(this.head=r,r.data=n.slice(l));break}++a}return this.length-=a,s},"_getString")},{key:"_getBuffer",value:c(function(u){var r=Gc.allocUnsafe(u),a=this.head,s=1;for(a.data.copy(r),u-=a.data.length;a=a.next;){var n=a.data,l=u>n.length?n.length:u;if(n.copy(r,r.length-u,0,l),u-=l,u===0){l===n.length?(++s,a.next?this.head=a.next:this.head=this.tail=null):(this.head=a,a.data=n.slice(l));break}++s}return this.length-=s,r},"_getBuffer")},{key:UP,value:c(function(u,r){return M5(this,j_(j_({},r),{},{depth:0,customInspect:!1}))},"value")}]),i}()});var _5=v((a$,Z_)=>{"use strict";function kP(i,e){var u=this,r=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return r||a?(e?e(i):i&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(T5,this,i)):process.nextTick(T5,this,i)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(i||null,function(s){!e&&s?u._writableState?u._writableState.errorEmitted?process.nextTick(qc,u):(u._writableState.errorEmitted=!0,process.nextTick(z_,u,s)):process.nextTick(z_,u,s):e?(process.nextTick(qc,u),e(s)):process.nextTick(qc,u)}),this)}c(kP,"destroy");function z_(i,e){T5(i,e),qc(i)}c(z_,"emitErrorAndCloseNT");function qc(i){i._writableState&&!i._writableState.emitClose||i._readableState&&!i._readableState.emitClose||i.emit("close")}c(qc,"emitCloseNT");function FP(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}c(FP,"undestroy");function T5(i,e){i.emit("error",e)}c(T5,"emitErrorNT");function HP(i,e){var u=i._readableState,r=i._writableState;u&&u.autoDestroy||r&&r.autoDestroy?i.destroy(e):i.emit("error",e)}c(HP,"errorOrDestroy");Z_.exports={destroy:kP,undestroy:FP,errorOrDestroy:HP}});var Nr=v((n$,tA)=>{"use strict";var uA={};function Pu(i,e,u){u||(u=Error);function r(n,l,d){return typeof e=="string"?e:e(n,l,d)}c(r,"getMessage");let s=class s extends u{constructor(l,d,p){super(r(l,d,p))}};c(s,"NodeError");let a=s;a.prototype.name=u.name,a.prototype.code=i,uA[i]=a}c(Pu,"createErrorType");function eA(i,e){if(Array.isArray(i)){let u=i.length;return i=i.map(r=>String(r)),u>2?`one of ${e} ${i.slice(0,u-1).join(", ")}, or `+i[u-1]:u===2?`one of ${e} ${i[0]} or ${i[1]}`:`of ${e} ${i[0]}`}else return`of ${e} ${String(i)}`}c(eA,"oneOf");function VP(i,e,u){return i.substr(!u||u<0?0:+u,e.length)===e}c(VP,"startsWith");function GP(i,e,u){return(u===void 0||u>i.length)&&(u=i.length),i.substring(u-e.length,u)===e}c(GP,"endsWith");function qP(i,e,u){return typeof u!="number"&&(u=0),u+e.length>i.length?!1:i.indexOf(e,u)!==-1}c(qP,"includes");Pu("ERR_INVALID_OPT_VALUE",function(i,e){return'The value "'+e+'" is invalid for option "'+i+'"'},TypeError);Pu("ERR_INVALID_ARG_TYPE",function(i,e,u){let r;typeof e=="string"&&VP(e,"not ")?(r="must not be",e=e.replace(/^not /,"")):r="must be";let a;if(GP(i," argument"))a=`The ${i} ${r} ${eA(e,"type")}`;else{let s=qP(i,".")?"property":"argument";a=`The "${i}" ${s} ${r} ${eA(e,"type")}`}return a+=`. Received type ${typeof u}`,a},TypeError);Pu("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF");Pu("ERR_METHOD_NOT_IMPLEMENTED",function(i){return"The "+i+" method is not implemented"});Pu("ERR_STREAM_PREMATURE_CLOSE","Premature close");Pu("ERR_STREAM_DESTROYED",function(i){return"Cannot call "+i+" after a stream was destroyed"});Pu("ERR_MULTIPLE_CALLBACK","Callback called multiple times");Pu("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable");Pu("ERR_STREAM_WRITE_AFTER_END","write after end");Pu("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError);Pu("ERR_UNKNOWN_ENCODING",function(i){return"Unknown encoding: "+i},TypeError);Pu("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event");tA.exports.codes=uA});var A5=v((l$,rA)=>{"use strict";var KP=Nr().codes.ERR_INVALID_OPT_VALUE;function WP(i,e,u){return i.highWaterMark!=null?i.highWaterMark:e?i[u]:null}c(WP,"highWaterMarkFrom");function jP(i,e,u,r){var a=WP(e,r,u);if(a!=null){if(!(isFinite(a)&&Math.floor(a)===a)||a<0){var s=r?u:"highWaterMark";throw new KP(s,a)}return Math.floor(a)}return i.objectMode?16:16*1024}c(jP,"getHighWaterMark");rA.exports={getHighWaterMark:jP}});var iA=v((d$,Y5)=>{typeof Object.create=="function"?Y5.exports=c(function(e,u){u&&(e.super_=u,e.prototype=Object.create(u.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))},"inherits"):Y5.exports=c(function(e,u){if(u){e.super_=u;var r=c(function(){},"TempCtor");r.prototype=u.prototype,e.prototype=new r,e.prototype.constructor=e}},"inherits")});var Ei=v((h$,g5)=>{try{if(R5=require("util"),typeof R5.inherits!="function")throw"";g5.exports=R5.inherits}catch{g5.exports=iA()}var R5});var sA=v((f$,aA)=>{aA.exports=require("util").deprecate});var C5=v((S$,pA)=>{"use strict";pA.exports=Ee;function oA(i){var e=this;this.next=null,this.entry=null,this.finish=function(){Bk(e,i)}}c(oA,"CorkedRequest");var Ga;Ee.WritableState=$n;var XP={deprecate:sA()},lA=B5(),Wc=require("buffer").Buffer,QP=(typeof global<"u"?global:typeof window<"u"?window:typeof self<"u"?self:{}).Uint8Array||function(){};function JP(i){return Wc.from(i)}c(JP,"_uint8ArrayToBuffer");function $P(i){return Wc.isBuffer(i)||i instanceof QP}c($P,"_isUint8Array");var N5=_5(),zP=A5(),ZP=zP.getHighWaterMark,Cr=Nr().codes,ek=Cr.ERR_INVALID_ARG_TYPE,uk=Cr.ERR_METHOD_NOT_IMPLEMENTED,tk=Cr.ERR_MULTIPLE_CALLBACK,rk=Cr.ERR_STREAM_CANNOT_PIPE,ik=Cr.ERR_STREAM_DESTROYED,ak=Cr.ERR_STREAM_NULL_VALUES,sk=Cr.ERR_STREAM_WRITE_AFTER_END,nk=Cr.ERR_UNKNOWN_ENCODING,qa=N5.errorOrDestroy;Ei()(Ee,lA);function ok(){}c(ok,"nop");function $n(i,e,u){Ga=Ga||mi(),i=i||{},typeof u!="boolean"&&(u=e instanceof Ga),this.objectMode=!!i.objectMode,u&&(this.objectMode=this.objectMode||!!i.writableObjectMode),this.highWaterMark=ZP(this,i,"writableHighWaterMark",u),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var r=i.decodeStrings===!1;this.decodeStrings=!r,this.defaultEncoding=i.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(a){Sk(e,a)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=i.emitClose!==!1,this.autoDestroy=!!i.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new oA(this)}c($n,"WritableState");$n.prototype.getBuffer=c(function(){for(var e=this.bufferedRequest,u=[];e;)u.push(e),e=e.next;return u},"getBuffer");(function(){try{Object.defineProperty($n.prototype,"buffer",{get:XP.deprecate(c(function(){return this.getBuffer()},"writableStateBufferGetter"),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}})();var Kc;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(Kc=Function.prototype[Symbol.hasInstance],Object.defineProperty(Ee,Symbol.hasInstance,{value:c(function(e){return Kc.call(this,e)?!0:this!==Ee?!1:e&&e._writableState instanceof $n},"value")})):Kc=c(function(e){return e instanceof this},"realHasInstance");function Ee(i){Ga=Ga||mi();var e=this instanceof Ga;if(!e&&!Kc.call(Ee,this))return new Ee(i);this._writableState=new $n(i,this,e),this.writable=!0,i&&(typeof i.write=="function"&&(this._write=i.write),typeof i.writev=="function"&&(this._writev=i.writev),typeof i.destroy=="function"&&(this._destroy=i.destroy),typeof i.final=="function"&&(this._final=i.final)),lA.call(this)}c(Ee,"Writable");Ee.prototype.pipe=function(){qa(this,new rk)};function lk(i,e){var u=new sk;qa(i,u),process.nextTick(e,u)}c(lk,"writeAfterEnd");function ck(i,e,u,r){var a;return u===null?a=new ak:typeof u!="string"&&!e.objectMode&&(a=new ek("chunk",["string","Buffer"],u)),a?(qa(i,a),process.nextTick(r,a),!1):!0}c(ck,"validChunk");Ee.prototype.write=function(i,e,u){var r=this._writableState,a=!1,s=!r.objectMode&&$P(i);return s&&!Wc.isBuffer(i)&&(i=JP(i)),typeof e=="function"&&(u=e,e=null),s?e="buffer":e||(e=r.defaultEncoding),typeof u!="function"&&(u=ok),r.ending?lk(this,u):(s||ck(this,r,i,u))&&(r.pendingcb++,a=pk(this,r,s,i,e,u)),a};Ee.prototype.cork=function(){this._writableState.corked++};Ee.prototype.uncork=function(){var i=this._writableState;i.corked&&(i.corked--,!i.writing&&!i.corked&&!i.bufferProcessing&&i.bufferedRequest&&cA(this,i))};Ee.prototype.setDefaultEncoding=c(function(e){if(typeof e=="string"&&(e=e.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new nk(e);return this._writableState.defaultEncoding=e,this},"setDefaultEncoding");Object.defineProperty(Ee.prototype,"writableBuffer",{enumerable:!1,get:c(function(){return this._writableState&&this._writableState.getBuffer()},"get")});function dk(i,e,u){return!i.objectMode&&i.decodeStrings!==!1&&typeof e=="string"&&(e=Wc.from(e,u)),e}c(dk,"decodeChunk");Object.defineProperty(Ee.prototype,"writableHighWaterMark",{enumerable:!1,get:c(function(){return this._writableState.highWaterMark},"get")});function pk(i,e,u,r,a,s){if(!u){var n=dk(e,r,a);r!==n&&(u=!0,a="buffer",r=n)}var l=e.objectMode?1:r.length;e.length+=l;var d=e.length{"use strict";var Mk=Object.keys||function(i){var e=[];for(var u in i)e.push(u);return e};fA.exports=Yt;var hA=x5(),b5=C5();Ei()(Yt,hA);for(I5=Mk(b5.prototype),jc=0;jc{"use strict";var D5=ti().Buffer,SA=D5.isEncoding||function(i){switch(i=""+i,i&&i.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function Ak(i){if(!i)return"utf8";for(var e;;)switch(i){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return i;default:if(e)return;i=(""+i).toLowerCase(),e=!0}}c(Ak,"_normalizeEncoding");function Yk(i){var e=Ak(i);if(typeof e!="string"&&(D5.isEncoding===SA||!SA(i)))throw new Error("Unknown encoding: "+i);return e||i}c(Yk,"normalizeEncoding");OA.StringDecoder=zn;function zn(i){this.encoding=Yk(i);var e;switch(this.encoding){case"utf16le":this.text=Ik,this.end=bk,e=4;break;case"utf8":this.fillLast=yk,e=4;break;case"base64":this.text=xk,this.end=vk,e=3;break;default:this.write=Dk,this.end=wk;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=D5.allocUnsafe(e)}c(zn,"StringDecoder");zn.prototype.write=function(i){if(i.length===0)return"";var e,u;if(this.lastNeed){if(e=this.fillLast(i),e===void 0)return"";u=this.lastNeed,this.lastNeed=0}else u=0;return u>5===6?2:i>>4===14?3:i>>3===30?4:i>>6===2?-1:-2}c(v5,"utf8CheckByte");function Rk(i,e,u){var r=e.length-1;if(r=0?(a>0&&(i.lastNeed=a-1),a):--r=0?(a>0&&(i.lastNeed=a-2),a):--r=0?(a>0&&(a===2?a=0:i.lastNeed=a-3),a):0))}c(Rk,"utf8CheckIncomplete");function gk(i,e,u){if((e[0]&192)!==128)return i.lastNeed=0,"\uFFFD";if(i.lastNeed>1&&e.length>1){if((e[1]&192)!==128)return i.lastNeed=1,"\uFFFD";if(i.lastNeed>2&&e.length>2&&(e[2]&192)!==128)return i.lastNeed=2,"\uFFFD"}}c(gk,"utf8CheckExtraBytes");function yk(i){var e=this.lastTotal-this.lastNeed,u=gk(this,i,e);if(u!==void 0)return u;if(this.lastNeed<=i.length)return i.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);i.copy(this.lastChar,e,0,i.length),this.lastNeed-=i.length}c(yk,"utf8FillLast");function Nk(i,e){var u=Rk(this,i,e);if(!this.lastNeed)return i.toString("utf8",e);this.lastTotal=u;var r=i.length-(u-this.lastNeed);return i.copy(this.lastChar,0,r),i.toString("utf8",e,r)}c(Nk,"utf8Text");function Ck(i){var e=i&&i.length?this.write(i):"";return this.lastNeed?e+"\uFFFD":e}c(Ck,"utf8End");function Ik(i,e){if((i.length-e)%2===0){var u=i.toString("utf16le",e);if(u){var r=u.charCodeAt(u.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=i[i.length-2],this.lastChar[1]=i[i.length-1],u.slice(0,-1)}return u}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=i[i.length-1],i.toString("utf16le",e,i.length-1)}c(Ik,"utf16Text");function bk(i){var e=i&&i.length?this.write(i):"";if(this.lastNeed){var u=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,u)}return e}c(bk,"utf16End");function xk(i,e){var u=(i.length-e)%3;return u===0?i.toString("base64",e):(this.lastNeed=3-u,this.lastTotal=3,u===1?this.lastChar[0]=i[i.length-1]:(this.lastChar[0]=i[i.length-2],this.lastChar[1]=i[i.length-1]),i.toString("base64",e,i.length-u))}c(xk,"base64Text");function vk(i){var e=i&&i.length?this.write(i):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}c(vk,"base64End");function Dk(i){return i.toString(this.encoding)}c(Dk,"simpleWrite");function wk(i){return i&&i.length?this.write(i):""}c(wk,"simpleEnd")});var Qc=v((M$,mA)=>{"use strict";var LA=Nr().codes.ERR_STREAM_PREMATURE_CLOSE;function Uk(i){var e=!1;return function(){if(!e){e=!0;for(var u=arguments.length,r=new Array(u),a=0;a{"use strict";var Jc;function Ir(i,e,u){return e=Fk(e),e in i?Object.defineProperty(i,e,{value:u,enumerable:!0,configurable:!0,writable:!0}):i[e]=u,i}c(Ir,"_defineProperty");function Fk(i){var e=Hk(i,"string");return typeof e=="symbol"?e:String(e)}c(Fk,"_toPropertyKey");function Hk(i,e){if(typeof i!="object"||i===null)return i;var u=i[Symbol.toPrimitive];if(u!==void 0){var r=u.call(i,e||"default");if(typeof r!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(i)}c(Hk,"_toPrimitive");var Vk=Qc(),br=Symbol("lastResolve"),Bi=Symbol("lastReject"),Zn=Symbol("error"),$c=Symbol("ended"),Mi=Symbol("lastPromise"),U5=Symbol("handlePromise"),Ti=Symbol("stream");function xr(i,e){return{value:i,done:e}}c(xr,"createIterResult");function Gk(i){var e=i[br];if(e!==null){var u=i[Ti].read();u!==null&&(i[Mi]=null,i[br]=null,i[Bi]=null,e(xr(u,!1)))}}c(Gk,"readAndResolve");function qk(i){process.nextTick(Gk,i)}c(qk,"onReadable");function Kk(i,e){return function(u,r){i.then(function(){if(e[$c]){u(xr(void 0,!0));return}e[U5](u,r)},r)}}c(Kk,"wrapForNext");var Wk=Object.getPrototypeOf(function(){}),jk=Object.setPrototypeOf((Jc={get stream(){return this[Ti]},next:c(function(){var e=this,u=this[Zn];if(u!==null)return Promise.reject(u);if(this[$c])return Promise.resolve(xr(void 0,!0));if(this[Ti].destroyed)return new Promise(function(n,l){process.nextTick(function(){e[Zn]?l(e[Zn]):n(xr(void 0,!0))})});var r=this[Mi],a;if(r)a=new Promise(Kk(r,this));else{var s=this[Ti].read();if(s!==null)return Promise.resolve(xr(s,!1));a=new Promise(this[U5])}return this[Mi]=a,a},"next")},Ir(Jc,Symbol.asyncIterator,function(){return this}),Ir(Jc,"return",c(function(){var e=this;return new Promise(function(u,r){e[Ti].destroy(null,function(a){if(a){r(a);return}u(xr(void 0,!0))})})},"_return")),Jc),Wk),Xk=c(function(e){var u,r=Object.create(jk,(u={},Ir(u,Ti,{value:e,writable:!0}),Ir(u,br,{value:null,writable:!0}),Ir(u,Bi,{value:null,writable:!0}),Ir(u,Zn,{value:null,writable:!0}),Ir(u,$c,{value:e._readableState.endEmitted,writable:!0}),Ir(u,U5,{value:c(function(s,n){var l=r[Ti].read();l?(r[Mi]=null,r[br]=null,r[Bi]=null,s(xr(l,!1))):(r[br]=s,r[Bi]=n)},"value"),writable:!0}),u));return r[Mi]=null,Vk(e,function(a){if(a&&a.code!=="ERR_STREAM_PREMATURE_CLOSE"){var s=r[Bi];s!==null&&(r[Mi]=null,r[br]=null,r[Bi]=null,s(a)),r[Zn]=a;return}var n=r[br];n!==null&&(r[Mi]=null,r[br]=null,r[Bi]=null,n(xr(void 0,!0))),r[$c]=!0}),e.on("readable",qk.bind(null,r)),r},"createReadableStreamAsyncIterator");BA.exports=Xk});var YA=v((Y$,AA)=>{"use strict";function TA(i,e,u,r,a,s,n){try{var l=i[s](n),d=l.value}catch(p){u(p);return}l.done?e(d):Promise.resolve(d).then(r,a)}c(TA,"asyncGeneratorStep");function Qk(i){return function(){var e=this,u=arguments;return new Promise(function(r,a){var s=i.apply(e,u);function n(d){TA(s,r,a,n,l,"next",d)}c(n,"_next");function l(d){TA(s,r,a,n,l,"throw",d)}c(l,"_throw"),n(void 0)})}}c(Qk,"_asyncToGenerator");function _A(i,e){var u=Object.keys(i);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(i);e&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(i,a).enumerable})),u.push.apply(u,r)}return u}c(_A,"ownKeys");function Jk(i){for(var e=1;e{"use strict";DA.exports=K0;var Ka;K0.ReadableState=NA;var g$=require("events").EventEmitter,yA=c(function(e,u){return e.listeners(u).length},"EElistenerCount"),u1=B5(),zc=require("buffer").Buffer,tF=(typeof global<"u"?global:typeof window<"u"?window:typeof self<"u"?self:{}).Uint8Array||function(){};function rF(i){return zc.from(i)}c(rF,"_uint8ArrayToBuffer");function iF(i){return zc.isBuffer(i)||i instanceof tF}c(iF,"_isUint8Array");var P5=require("util"),N0;P5&&P5.debuglog?N0=P5.debuglog("stream"):N0=c(function(){},"debug");var aF=$_(),K5=_5(),sF=A5(),nF=sF.getHighWaterMark,Zc=Nr().codes,oF=Zc.ERR_INVALID_ARG_TYPE,lF=Zc.ERR_STREAM_PUSH_AFTER_EOF,cF=Zc.ERR_METHOD_NOT_IMPLEMENTED,dF=Zc.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,Wa,k5,F5;Ei()(K0,u1);var e1=K5.errorOrDestroy,H5=["error","close","destroy","pause","resume"];function pF(i,e,u){if(typeof i.prependListener=="function")return i.prependListener(e,u);!i._events||!i._events[e]?i.on(e,u):Array.isArray(i._events[e])?i._events[e].unshift(u):i._events[e]=[u,i._events[e]]}c(pF,"prependListener");function NA(i,e,u){Ka=Ka||mi(),i=i||{},typeof u!="boolean"&&(u=e instanceof Ka),this.objectMode=!!i.objectMode,u&&(this.objectMode=this.objectMode||!!i.readableObjectMode),this.highWaterMark=nF(this,i,"readableHighWaterMark",u),this.buffer=new aF,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=i.emitClose!==!1,this.autoDestroy=!!i.autoDestroy,this.destroyed=!1,this.defaultEncoding=i.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,i.encoding&&(Wa||(Wa=w5().StringDecoder),this.decoder=new Wa(i.encoding),this.encoding=i.encoding)}c(NA,"ReadableState");function K0(i){if(Ka=Ka||mi(),!(this instanceof K0))return new K0(i);var e=this instanceof Ka;this._readableState=new NA(i,this,e),this.readable=!0,i&&(typeof i.read=="function"&&(this._read=i.read),typeof i.destroy=="function"&&(this._destroy=i.destroy)),u1.call(this)}c(K0,"Readable");Object.defineProperty(K0.prototype,"destroyed",{enumerable:!1,get:c(function(){return this._readableState===void 0?!1:this._readableState.destroyed},"get"),set:c(function(e){this._readableState&&(this._readableState.destroyed=e)},"set")});K0.prototype.destroy=K5.destroy;K0.prototype._undestroy=K5.undestroy;K0.prototype._destroy=function(i,e){e(i)};K0.prototype.push=function(i,e){var u=this._readableState,r;return u.objectMode?r=!0:typeof i=="string"&&(e=e||u.defaultEncoding,e!==u.encoding&&(i=zc.from(i,e),e=""),r=!0),CA(this,i,e,!1,r)};K0.prototype.unshift=function(i){return CA(this,i,null,!0,!1)};function CA(i,e,u,r,a){N0("readableAddChunk",e);var s=i._readableState;if(e===null)s.reading=!1,SF(i,s);else{var n;if(a||(n=hF(s,e)),n)e1(i,n);else if(s.objectMode||e&&e.length>0)if(typeof e!="string"&&!s.objectMode&&Object.getPrototypeOf(e)!==zc.prototype&&(e=rF(e)),r)s.endEmitted?e1(i,new dF):V5(i,s,e,!0);else if(s.ended)e1(i,new lF);else{if(s.destroyed)return!1;s.reading=!1,s.decoder&&!u?(e=s.decoder.write(e),s.objectMode||e.length!==0?V5(i,s,e,!1):q5(i,s)):V5(i,s,e,!1)}else r||(s.reading=!1,q5(i,s))}return!s.ended&&(s.length=RA?i=RA:(i--,i|=i>>>1,i|=i>>>2,i|=i>>>4,i|=i>>>8,i|=i>>>16,i++),i}c(fF,"computeNewHighWaterMark");function gA(i,e){return i<=0||e.length===0&&e.ended?0:e.objectMode?1:i!==i?e.flowing&&e.length?e.buffer.head.data.length:e.length:(i>e.highWaterMark&&(e.highWaterMark=fF(i)),i<=e.length?i:e.ended?e.length:(e.needReadable=!0,0))}c(gA,"howMuchToRead");K0.prototype.read=function(i){N0("read",i),i=parseInt(i,10);var e=this._readableState,u=i;if(i!==0&&(e.emittedReadable=!1),i===0&&e.needReadable&&((e.highWaterMark!==0?e.length>=e.highWaterMark:e.length>0)||e.ended))return N0("read: emitReadable",e.length,e.ended),e.length===0&&e.ended?G5(this):ed(this),null;if(i=gA(i,e),i===0&&e.ended)return e.length===0&&G5(this),null;var r=e.needReadable;N0("need readable",r),(e.length===0||e.length-i0?a=xA(i,e):a=null,a===null?(e.needReadable=e.length<=e.highWaterMark,i=0):(e.length-=i,e.awaitDrain=0),e.length===0&&(e.ended||(e.needReadable=!0),u!==i&&e.ended&&G5(this)),a!==null&&this.emit("data",a),a};function SF(i,e){if(N0("onEofChunk"),!e.ended){if(e.decoder){var u=e.decoder.end();u&&u.length&&(e.buffer.push(u),e.length+=e.objectMode?1:u.length)}e.ended=!0,e.sync?ed(i):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,IA(i)))}}c(SF,"onEofChunk");function ed(i){var e=i._readableState;N0("emitReadable",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(N0("emitReadable",e.flowing),e.emittedReadable=!0,process.nextTick(IA,i))}c(ed,"emitReadable");function IA(i){var e=i._readableState;N0("emitReadable_",e.destroyed,e.length,e.ended),!e.destroyed&&(e.length||e.ended)&&(i.emit("readable"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,W5(i)}c(IA,"emitReadable_");function q5(i,e){e.readingMore||(e.readingMore=!0,process.nextTick(OF,i,e))}c(q5,"maybeReadMore");function OF(i,e){for(;!e.reading&&!e.ended&&(e.length1&&vA(r.pipes,i)!==-1)&&!p&&(N0("false write response, pause",r.awaitDrain),r.awaitDrain++),u.pause())}c(f,"ondata");function S(T){N0("onerror",T),M(),i.removeListener("error",S),yA(i,"error")===0&&e1(i,T)}c(S,"onerror"),pF(i,"error",S);function m(){i.removeListener("finish",O),M()}c(m,"onclose"),i.once("close",m);function O(){N0("onfinish"),i.removeListener("close",m),M()}c(O,"onfinish"),i.once("finish",O);function M(){N0("unpipe"),u.unpipe(i)}return c(M,"unpipe"),i.emit("pipe",u),r.flowing||(N0("pipe resume"),u.resume()),i};function LF(i){return c(function(){var u=i._readableState;N0("pipeOnDrain",u.awaitDrain),u.awaitDrain&&u.awaitDrain--,u.awaitDrain===0&&yA(i,"data")&&(u.flowing=!0,W5(i))},"pipeOnDrainFunctionResult")}c(LF,"pipeOnDrain");K0.prototype.unpipe=function(i){var e=this._readableState,u={hasUnpiped:!1};if(e.pipesCount===0)return this;if(e.pipesCount===1)return i&&i!==e.pipes?this:(i||(i=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,i&&i.emit("unpipe",this,u),this);if(!i){var r=e.pipes,a=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var s=0;s0,r.flowing!==!1&&this.resume()):i==="readable"&&!r.endEmitted&&!r.readableListening&&(r.readableListening=r.needReadable=!0,r.flowing=!1,r.emittedReadable=!1,N0("on readable",r.length,r.reading),r.length?ed(this):r.reading||process.nextTick(EF,this)),u};K0.prototype.addListener=K0.prototype.on;K0.prototype.removeListener=function(i,e){var u=u1.prototype.removeListener.call(this,i,e);return i==="readable"&&process.nextTick(bA,this),u};K0.prototype.removeAllListeners=function(i){var e=u1.prototype.removeAllListeners.apply(this,arguments);return(i==="readable"||i===void 0)&&process.nextTick(bA,this),e};function bA(i){var e=i._readableState;e.readableListening=i.listenerCount("readable")>0,e.resumeScheduled&&!e.paused?e.flowing=!0:i.listenerCount("data")>0&&i.resume()}c(bA,"updateReadableListening");function EF(i){N0("readable nexttick read 0"),i.read(0)}c(EF,"nReadingNextTick");K0.prototype.resume=function(){var i=this._readableState;return i.flowing||(N0("resume"),i.flowing=!i.readableListening,mF(this,i)),i.paused=!1,this};function mF(i,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(BF,i,e))}c(mF,"resume");function BF(i,e){N0("resume",e.reading),e.reading||i.read(0),e.resumeScheduled=!1,i.emit("resume"),W5(i),e.flowing&&!e.reading&&i.read(0)}c(BF,"resume_");K0.prototype.pause=function(){return N0("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(N0("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this};function W5(i){var e=i._readableState;for(N0("flow",e.flowing);e.flowing&&i.read()!==null;);}c(W5,"flow");K0.prototype.wrap=function(i){var e=this,u=this._readableState,r=!1;i.on("end",function(){if(N0("wrapped end"),u.decoder&&!u.ended){var n=u.decoder.end();n&&n.length&&e.push(n)}e.push(null)}),i.on("data",function(n){if(N0("wrapped data"),u.decoder&&(n=u.decoder.write(n)),!(u.objectMode&&n==null)&&!(!u.objectMode&&(!n||!n.length))){var l=e.push(n);l||(r=!0,i.pause())}});for(var a in i)this[a]===void 0&&typeof i[a]=="function"&&(this[a]=c(function(l){return c(function(){return i[l].apply(i,arguments)},"methodWrapReturnFunction")},"methodWrap")(a));for(var s=0;s=e.length?(e.decoder?u=e.buffer.join(""):e.buffer.length===1?u=e.buffer.first():u=e.buffer.concat(e.length),e.buffer.clear()):u=e.buffer.consume(i,e.decoder),u}c(xA,"fromList");function G5(i){var e=i._readableState;N0("endReadable",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(MF,e,i))}c(G5,"endReadable");function MF(i,e){if(N0("endReadableNT",i.endEmitted,i.length),!i.endEmitted&&i.length===0&&(i.endEmitted=!0,e.readable=!1,e.emit("end"),i.autoDestroy)){var u=e._writableState;(!u||u.autoDestroy&&u.finished)&&e.destroy()}}c(MF,"endReadableNT");typeof Symbol=="function"&&(K0.from=function(i,e){return F5===void 0&&(F5=YA()),F5(K0,i,e)});function vA(i,e){for(var u=0,r=i.length;u{"use strict";UA.exports=qt;var ud=Nr().codes,TF=ud.ERR_METHOD_NOT_IMPLEMENTED,_F=ud.ERR_MULTIPLE_CALLBACK,AF=ud.ERR_TRANSFORM_ALREADY_TRANSFORMING,YF=ud.ERR_TRANSFORM_WITH_LENGTH_0,td=mi();Ei()(qt,td);function RF(i,e){var u=this._transformState;u.transforming=!1;var r=u.writecb;if(r===null)return this.emit("error",new _F);u.writechunk=null,u.writecb=null,e!=null&&this.push(e),r(i);var a=this._readableState;a.reading=!1,(a.needReadable||a.length{"use strict";kA.exports=t1;var PA=j5();Ei()(t1,PA);function t1(i){if(!(this instanceof t1))return new t1(i);PA.call(this,i)}c(t1,"PassThrough");t1.prototype._transform=function(i,e,u){u(null,i)}});var KA=v((v$,qA)=>{"use strict";var X5;function yF(i){var e=!1;return function(){e||(e=!0,i.apply(void 0,arguments))}}c(yF,"once");var GA=Nr().codes,NF=GA.ERR_MISSING_ARGS,CF=GA.ERR_STREAM_DESTROYED;function HA(i){if(i)throw i}c(HA,"noop");function IF(i){return i.setHeader&&typeof i.abort=="function"}c(IF,"isRequest");function bF(i,e,u,r){r=yF(r);var a=!1;i.on("close",function(){a=!0}),X5===void 0&&(X5=Qc()),X5(i,{readable:e,writable:u},function(n){if(n)return r(n);a=!0,r()});var s=!1;return function(n){if(!a&&!s){if(s=!0,IF(i))return i.abort();if(typeof i.destroy=="function")return i.destroy();r(n||new CF("pipe"))}}}c(bF,"destroyer");function VA(i){i()}c(VA,"call");function xF(i,e){return i.pipe(e)}c(xF,"pipe");function vF(i){return!i.length||typeof i[i.length-1]!="function"?HA:i.pop()}c(vF,"popCallback");function DF(){for(var i=arguments.length,e=new Array(i),u=0;u0;return bF(n,d,p,function(h){a||(a=h),h&&s.forEach(VA),!d&&(s.forEach(VA),r(a))})});return e.reduce(xF)}c(DF,"pipeline");qA.exports=DF});var WA=v((ku,i1)=>{var r1=require("stream");process.env.READABLE_STREAM==="disable"&&r1?(i1.exports=r1.Readable,Object.assign(i1.exports,r1),i1.exports.Stream=r1):(ku=i1.exports=x5(),ku.Stream=r1||ku,ku.Readable=ku,ku.Writable=C5(),ku.Duplex=mi(),ku.Transform=j5(),ku.PassThrough=FA(),ku.finished=Qc(),ku.pipeline=KA())});var QA=v((w$,XA)=>{XA.exports=jA;function jA(i,e){if(i&&e)return jA(i)(e);if(typeof i!="function")throw new TypeError("need wrapper function");return Object.keys(i).forEach(function(r){u[r]=i[r]}),u;function u(){for(var r=new Array(arguments.length),a=0;a{var JA=QA();Q5.exports=JA(rd);Q5.exports.strict=JA($A);rd.proto=rd(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return rd(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return $A(this)},configurable:!0})});function rd(i){var e=c(function(){return e.called?e.value:(e.called=!0,e.value=i.apply(this,arguments))},"f");return e.called=!1,e}c(rd,"once");function $A(i){var e=c(function(){if(e.called)throw new Error(e.onceError);return e.called=!0,e.value=i.apply(this,arguments)},"f"),u=i.name||"Function wrapped with `once`";return e.onceError=u+" shouldn't be called more than once",e.called=!1,e}c($A,"onceStrict")});var uY=v((F$,eY)=>{var wF=zA(),UF=c(function(){},"noop"),PF=c(function(i){return i.setHeader&&typeof i.abort=="function"},"isRequest"),kF=c(function(i){return i.stdio&&Array.isArray(i.stdio)&&i.stdio.length===3},"isChildProcess"),ZA=c(function(i,e,u){if(typeof e=="function")return ZA(i,null,e);e||(e={}),u=wF(u||UF);var r=i._writableState,a=i._readableState,s=e.readable||e.readable!==!1&&i.readable,n=e.writable||e.writable!==!1&&i.writable,l=!1,d=c(function(){i.writable||p()},"onlegacyfinish"),p=c(function(){n=!1,s||u.call(i)},"onfinish"),h=c(function(){s=!1,n||u.call(i)},"onend"),f=c(function(T){u.call(i,T?new Error("exited with error code: "+T):null)},"onexit"),S=c(function(T){u.call(i,T)},"onerror"),m=c(function(){process.nextTick(O)},"onclose"),O=c(function(){if(!l){if(s&&!(a&&a.ended&&!a.destroyed))return u.call(i,new Error("premature close"));if(n&&!(r&&r.ended&&!r.destroyed))return u.call(i,new Error("premature close"))}},"onclosenexttick"),M=c(function(){i.req.on("finish",p)},"onrequest");return PF(i)?(i.on("complete",p),i.on("abort",m),i.req?M():i.on("request",M)):n&&!r&&(i.on("end",d),i.on("close",d)),kF(i)&&i.on("exit",f),i.on("end",h),i.on("finish",p),e.error!==!1&&i.on("error",S),i.on("close",m),function(){l=!0,i.removeListener("complete",p),i.removeListener("abort",m),i.removeListener("request",M),i.req&&i.req.removeListener("finish",p),i.removeListener("end",d),i.removeListener("close",d),i.removeListener("finish",p),i.removeListener("exit",f),i.removeListener("end",h),i.removeListener("error",S),i.removeListener("close",m)}},"eos");eY.exports=ZA});var rY=v((V$,tY)=>{tY.exports=FF;function FF(i){var e=i._readableState;return e?e.objectMode||typeof i._duplexState=="number"?i.read():i.read(HF(e)):null}c(FF,"shift");function HF(i){if(i.buffer.length){var e=i.bufferIndex||0;if(i.buffer.head)return i.buffer.head.data.length;if(i.buffer.length-e>0&&i.buffer[e])return i.buffer[e].length}return i.length}c(HF,"getStateLength")});var $5=v((q$,nY)=>{var id=WA(),iY=uY(),VF=Ei(),GF=rY(),aY=Buffer.from&&Buffer.from!==Uint8Array.from?Buffer.from([0]):new Buffer([0]),J5=c(function(i,e){i._corked?i.once("uncork",e):e()},"onuncork"),qF=c(function(i,e){i._autoDestroy&&i.destroy(e)},"autoDestroy"),sY=c(function(i,e){return function(u){u?qF(i,u.message==="premature close"?null:u):e&&!i._ended&&i.end()}},"destroyer"),KF=c(function(i,e){if(!i||i._writableState&&i._writableState.finished)return e();if(i._writableState)return i.end(e);i.end(),e()},"end"),WF=c(function(){},"noop"),jF=c(function(i){return new id.Readable({objectMode:!0,highWaterMark:16}).wrap(i)},"toStreams2"),Ve=c(function(i,e,u){if(!(this instanceof Ve))return new Ve(i,e,u);id.Duplex.call(this,u),this._writable=null,this._readable=null,this._readable2=null,this._autoDestroy=!u||u.autoDestroy!==!1,this._forwardDestroy=!u||u.destroy!==!1,this._forwardEnd=!u||u.end!==!1,this._corked=1,this._ondrain=null,this._drained=!1,this._forwarding=!1,this._unwrite=null,this._unread=null,this._ended=!1,this.destroyed=!1,i&&this.setWritable(i),e&&this.setReadable(e)},"Duplexify");VF(Ve,id.Duplex);Ve.obj=function(i,e,u){return u||(u={}),u.objectMode=!0,u.highWaterMark=16,new Ve(i,e,u)};Ve.prototype.cork=function(){++this._corked===1&&this.emit("cork")};Ve.prototype.uncork=function(){this._corked&&--this._corked===0&&this.emit("uncork")};Ve.prototype.setWritable=function(i){if(this._unwrite&&this._unwrite(),this.destroyed){i&&i.destroy&&i.destroy();return}if(i===null||i===!1){this.end();return}var e=this,u=iY(i,{writable:!0,readable:!1},sY(this,this._forwardEnd)),r=c(function(){var s=e._ondrain;e._ondrain=null,s&&s()},"ondrain"),a=c(function(){e._writable.removeListener("drain",r),u()},"clear");this._unwrite&&process.nextTick(r),this._writable=i,this._writable.on("drain",r),this._unwrite=a,this.uncork()};Ve.prototype.setReadable=function(i){if(this._unread&&this._unread(),this.destroyed){i&&i.destroy&&i.destroy();return}if(i===null||i===!1){this.push(null),this.resume();return}var e=this,u=iY(i,{writable:!1,readable:!0},sY(this)),r=c(function(){e._forward()},"onreadable"),a=c(function(){e.push(null)},"onend"),s=c(function(){e._readable2.removeListener("readable",r),e._readable2.removeListener("end",a),u()},"clear");this._drained=!0,this._readable=i,this._readable2=i._readableState?i:jF(i),this._readable2.on("readable",r),this._readable2.on("end",a),this._unread=s,this._forward()};Ve.prototype._read=function(){this._drained=!0,this._forward()};Ve.prototype._forward=function(){if(!(this._forwarding||!this._readable2||!this._drained)){this._forwarding=!0;for(var i;this._drained&&(i=GF(this._readable2))!==null;)this.destroyed||(this._drained=this.push(i));this._forwarding=!1}};Ve.prototype.destroy=function(i,e){if(e||(e=WF),this.destroyed)return e(null);this.destroyed=!0;var u=this;process.nextTick(function(){u._destroy(i),e(null)})};Ve.prototype._destroy=function(i){if(i){var e=this._ondrain;this._ondrain=null,e?e(i):this.emit("error",i)}this._forwardDestroy&&(this._readable&&this._readable.destroy&&this._readable.destroy(),this._writable&&this._writable.destroy&&this._writable.destroy()),this.emit("close")};Ve.prototype._write=function(i,e,u){if(!this.destroyed){if(this._corked)return J5(this,this._write.bind(this,i,e,u));if(i===aY)return this._finish(u);if(!this._writable)return u();this._writable.write(i)===!1?this._ondrain=u:this.destroyed||u()}};Ve.prototype._finish=function(i){var e=this;this.emit("preend"),J5(this,function(){KF(e._forwardEnd&&e._writable,function(){e._writableState.prefinished===!1&&(e._writableState.prefinished=!0),e.emit("prefinish"),J5(e,i)})})};Ve.prototype.end=function(i,e,u){return typeof i=="function"?this.end(null,null,i):typeof e=="function"?this.end(i,null,e):(this._ended=!0,i&&this.write(i),!this._writableState.ending&&!this._writableState.destroyed&&this.write(aY),id.Writable.prototype.end.call(this,u))};nY.exports=Ve});var cd=v(ja=>{"use strict";Object.defineProperty(ja,"__esModule",{value:!0});var ad=C7(),XF=k7(),sd=Eu(),oY=s_(),lY=l_(),QF=require("stream"),cY=q_(),JF=$5(),dY={timeout:6e4,gzip:!0,forever:!0,pool:{maxSockets:1/0}},$F=!0,zF=3,ld=class ld extends Error{constructor(e){if(super(),typeof e!="object"){this.message=e||"";return}let u=e;this.code=u.code,this.errors=u.errors,this.response=u.response;try{this.errors=JSON.parse(this.response.body).error.errors}catch{this.errors=u.errors}this.message=ld.createMultiErrorMessage(u,this.errors),Error.captureStackTrace(this)}static createMultiErrorMessage(e,u){let r=new Set;e.message&&r.add(e.message),u&&u.length?u.forEach(({message:s})=>r.add(s)):e.response&&e.response.body?r.add(XF.decode(e.response.body.toString())):e.message||r.add("A failure occurred during this request.");let a=Array.from(r);return a.length>1&&(a=a.map((s,n)=>` ${n+1}. ${s}`),a.unshift("Multiple errors occurred during the request. Please see the `errors` array for complete details.\n"),a.push(` +`)),a.join(` +`)}};c(ld,"ApiError");var Kt=ld;ja.ApiError=Kt;var Z5=class Z5 extends Error{constructor(e){super();let u=e;this.errors=u.errors,this.name="PartialFailureError",this.response=u.response,this.message=Kt.createMultiErrorMessage(u,this.errors)}};c(Z5,"PartialFailureError");var nd=Z5;ja.PartialFailureError=nd;var e4=class e4{constructor(){this.ApiError=Kt,this.PartialFailureError=nd}noop(){}handleResp(e,u,r,a){a=a||zu.noop;let s=sd(!0,{err:e||null},u&&zu.parseHttpRespMessage(u),r&&zu.parseHttpRespBody(r));!s.err&&u&&typeof s.body=="object"&&(s.resp.body=s.body),s.err&&u&&(s.err.response=u),a(s.err,s.body,s.resp)}parseHttpRespMessage(e){let u={resp:e};return(e.statusCode<200||e.statusCode>299)&&(u.err=new Kt({errors:new Array,code:e.statusCode,message:e.statusMessage,response:e})),u}parseHttpRespBody(e){let u={body:e};if(typeof e=="string")try{u.body=JSON.parse(e)}catch{u.body=e}return u.body&&u.body.error&&(u.err=new Kt(u.body.error)),u}makeWritableStream(e,u,r){r=r||zu.noop;let a=new z5;a.on("progress",d=>e.emit("progress",d)),e.setWritable(a);let s={method:"POST",qs:{uploadType:"multipart"},timeout:0,maxRetries:0},n=u.metadata||{},l=sd(!0,s,u.request,{multipart:[{"Content-Type":"application/json",body:JSON.stringify(n)},{"Content-Type":n.contentType||"application/octet-stream",body:a}]});u.makeAuthenticatedRequest(l,{onAuthenticated(d,p){if(d){e.destroy(d);return}cY.teenyRequest.defaults(dY)(p,(f,S,m)=>{zu.handleResp(f,S,m,(O,M)=>{if(O){e.destroy(O);return}e.emit("response",S),r(M)})})}})}shouldRetryRequest(e){if(e){if([408,429,500,502,503,504].indexOf(e.code)!==-1)return!0;if(e.errors)for(let u of e.errors){let r=u.reason;if(r==="rateLimitExceeded"||r==="userRateLimitExceeded"||r&&r.includes("EAI_AGAIN"))return!0}}return!1}makeAuthenticatedRequestFactory(e){let u=sd({},e);u.projectId==="{{projectId}}"&&delete u.projectId;let r;if(u.authClient instanceof oY.GoogleAuth)r=u.authClient;else{let n={...u,authClient:u.authClient};r=new oY.GoogleAuth(n)}function a(n,l){let d,p,h=sd({},e),f;l||(d=JF(),h.stream=d);let S=typeof l=="object"?l:void 0,m=typeof l=="function"?l:void 0,O=c((M,T)=>{let L=M,I=M&&M.message.indexOf("Could not load the default credentials")>-1;if(I&&(T=n),!M||I)try{T=zu.decorateRequest(T,p),M=null}catch(N){M=M||N}if(M){d?d.destroy(M):(S&&S.onAuthenticated?S.onAuthenticated:m)(M);return}S&&S.onAuthenticated?S.onAuthenticated(null,T):f=zu.makeRequest(T,h,(N,...D)=>{N&&N.code===401&&L&&(N=L),m(N,...D)})},"onAuthenticated");return Promise.all([e.projectId&&e.projectId!=="{{projectId}}"?new Promise(M=>M(e.projectId)):r.getProjectId(),h.customEndpoint&&h.useAuthWithCustomEndpoint!==!0?new Promise(M=>M(n)):r.authorizeRequest(n)]).then(([M,T])=>{p=M,O(null,T)}).catch(O),d||{abort(){setImmediate(()=>{f&&(f.abort(),f=null)})}}}c(a,"makeAuthenticatedRequest");let s=a;return s.getCredentials=r.getCredentials.bind(r),s.authClient=r,s}makeRequest(e,u,r){var a,s,n,l,d,p,h;let f=$F;if(u.autoRetry!==void 0&&((a=u.retryOptions)===null||a===void 0?void 0:a.autoRetry)!==void 0)throw new Kt("autoRetry is deprecated. Use retryOptions.autoRetry instead.");u.autoRetry!==void 0?f=u.autoRetry:((s=u.retryOptions)===null||s===void 0?void 0:s.autoRetry)!==void 0&&(f=u.retryOptions.autoRetry);let S=zF;if(u.maxRetries&&(!((n=u.retryOptions)===null||n===void 0)&&n.maxRetries))throw new Kt("maxRetries is deprecated. Use retryOptions.maxRetries instead.");u.maxRetries?S=u.maxRetries:!((l=u.retryOptions)===null||l===void 0)&&l.maxRetries&&(S=u.retryOptions.maxRetries);let m={request:cY.teenyRequest.defaults(dY),retries:f!==!1?S:0,noResponseRetries:f!==!1?S:0,shouldRetryFn(L){var I,N;let D=zu.parseHttpRespMessage(L).err;return!((I=u.retryOptions)===null||I===void 0)&&I.retryableErrorFn?D&&((N=u.retryOptions)===null||N===void 0?void 0:N.retryableErrorFn(D)):D&&zu.shouldRetryRequest(D)},maxRetryDelay:(d=u.retryOptions)===null||d===void 0?void 0:d.maxRetryDelay,retryDelayMultiplier:(p=u.retryOptions)===null||p===void 0?void 0:p.retryDelayMultiplier,totalTimeout:(h=u.retryOptions)===null||h===void 0?void 0:h.totalTimeout};if(typeof e.maxRetries=="number"&&(m.retries=e.maxRetries),!u.stream)return lY(e,m,(L,I,N)=>{zu.handleResp(L,I,N,r)});let O=u.stream,M;return(e.method||"GET").toUpperCase()==="GET"?(M=lY(e,m),O.setReadable(M)):(M=m.request(e),O.setWritable(M)),M.on("error",O.destroy.bind(O)).on("response",O.emit.bind(O,"response")).on("complete",O.emit.bind(O,"complete")),O.abort=M.abort,O}decorateRequest(e,u){return delete e.autoPaginate,delete e.autoPaginateVal,delete e.objectMode,e.qs!==null&&typeof e.qs=="object"&&(delete e.qs.autoPaginate,delete e.qs.autoPaginateVal,e.qs=ad.replaceProjectIdToken(e.qs,u)),Array.isArray(e.multipart)&&(e.multipart=e.multipart.map(r=>ad.replaceProjectIdToken(r,u))),e.json!==null&&typeof e.json=="object"&&(delete e.json.autoPaginate,delete e.json.autoPaginateVal,e.json=ad.replaceProjectIdToken(e.json,u)),e.uri=ad.replaceProjectIdToken(e.uri,u),e}isCustomType(e,u){function r(d){return d.constructor&&d.constructor.name.toLowerCase()}c(r,"getConstructorName");let a=u.split("/"),s=a[0]&&a[0].toLowerCase(),n=a[1]&&a[1].toLowerCase();if(n&&r(e)!==n)return!1;let l=e;for(;;){if(r(l)===s)return!0;if(l=l.parent,!l)return!1}}getUserAgentFromPackageJson(e){return e.name.replace("@google-cloud","gcloud-node").replace("/","-")+"/"+e.version}maybeOptionsOrCallback(e,u){return typeof e=="function"?[{},e]:[e,u]}};c(e4,"Util");var od=e4;ja.Util=od;var u4=class u4 extends QF.Transform{constructor(){super(...arguments),this.bytesRead=0}_transform(e,u,r){this.bytesRead+=e.length,this.emit("progress",{bytesWritten:this.bytesRead,contentLength:"*"}),this.push(e),r()}};c(u4,"ProgressStream");var z5=u4,zu=new od;ja.util=zu});var r4=v(t4=>{"use strict";Object.defineProperty(t4,"__esModule",{value:!0});var ZF=rr(),eH=ir(),uH=require("events"),a1=Eu(),s1=cd(),vr=class vr extends uH.EventEmitter{constructor(e){super(),this.metadata={},this.baseUrl=e.baseUrl,this.parent=e.parent,this.id=e.id,this.createMethod=e.createMethod,this.methods=e.methods||{},this.interceptors=[],this.pollIntervalMs=e.pollIntervalMs,this.projectId=e.projectId,e.methods&&Object.getOwnPropertyNames(vr.prototype).filter(u=>!/^request/.test(u)&&!/^getRequestInterceptors/.test(u)&&this[u]===vr.prototype[u]&&!e.methods[u]).forEach(u=>{this[u]=void 0})}create(e,u){let r=this,a=[this.id];typeof e=="function"&&(u=e),typeof e=="object"&&a.push(e);function s(...n){let[l,d]=n;l||(r.metadata=d.metadata,n[1]=r),u(...n)}c(s,"onCreate"),a.push(s),this.createMethod.apply(null,a)}delete(e,u){let[r,a]=s1.util.maybeOptionsOrCallback(e,u),s=r.ignoreNotFound;delete r.ignoreNotFound;let n=typeof this.methods.delete=="object"&&this.methods.delete||{},l=a1(!0,{method:"DELETE",uri:""},n.reqOpts,{qs:r});vr.prototype.request.call(this,l,(d,...p)=>{d&&d.code===404&&s&&(d=null),a(d,...p)})}exists(e,u){let[r,a]=s1.util.maybeOptionsOrCallback(e,u);this.get(r,s=>{if(s){s.code===404?a(null,!1):a(s);return}a(null,!0)})}get(e,u){let r=this,[a,s]=s1.util.maybeOptionsOrCallback(e,u),n=Object.assign({},a),l=n.autoCreate&&typeof this.create=="function";delete n.autoCreate;function d(p,h,f){if(p){if(p.code===409){r.get(n,s);return}s(p,null,f);return}s(null,h,f)}c(d,"onCreate"),this.getMetadata(n,(p,h)=>{if(p){if(p.code===404&&l){let f=[];Object.keys(n).length>0&&f.push(n),f.push(d),r.create(...f);return}s(p,null,h);return}s(null,r,h)})}getMetadata(e,u){let[r,a]=s1.util.maybeOptionsOrCallback(e,u),s=typeof this.methods.getMetadata=="object"&&this.methods.getMetadata||{},n=a1(!0,{uri:""},s.reqOpts,{qs:r});vr.prototype.request.call(this,n,(l,d,p)=>{this.metadata=d,a(l,this.metadata,p)})}getRequestInterceptors(){let e=this.interceptors.filter(u=>typeof u.request=="function").map(u=>u.request);return this.parent.getRequestInterceptors().concat(e)}setMetadata(e,u,r){let[a,s]=s1.util.maybeOptionsOrCallback(u,r),n=typeof this.methods.setMetadata=="object"&&this.methods.setMetadata||{},l=a1(!0,{},{method:"PATCH",uri:""},n.reqOpts,{json:e,qs:a});vr.prototype.request.call(this,l,(d,p,h)=>{this.metadata=p,s(d,this.metadata,h)})}request_(e,u){e=a1(!0,{},e),this.projectId&&(e.projectId=this.projectId);let r=e.uri.indexOf("http")===0,a=[this.baseUrl,this.id||"",e.uri];r&&a.splice(0,a.indexOf(e.uri)),e.uri=a.filter(l=>l.trim()).map(l=>{let d=/^\/*|\/*$/g;return l.replace(d,"")}).join("/");let s=eH(e.interceptors_),n=[].slice.call(this.interceptors);if(e.interceptors_=s.concat(n),e.shouldReturnStream)return this.parent.requestStream(e);this.parent.request(e,u)}request(e,u){this.request_(e,u)}requestStream(e){let u=a1(!0,e,{shouldReturnStream:!0});return this.request_(u)}};c(vr,"ServiceObject");var dd=vr;t4.ServiceObject=dd;ZF.promisifyAll(dd,{exclude:["getRequestInterceptors"]})});var pY=v(a4=>{"use strict";Object.defineProperty(a4,"__esModule",{value:!0});var tH=r4(),rH=require("util"),s4=class s4 extends tH.ServiceObject{constructor(e){let u={exists:!0,get:!0,getMetadata:{reqOpts:{name:e.id}}};e=Object.assign({baseUrl:""},e),e.methods=e.methods||u,super(e),this.completeListeners=0,this.hasActiveListeners=!1,this.listenForEvents_()}promise(){return new Promise((e,u)=>{this.on("error",u).on("complete",r=>{e([r])})})}listenForEvents_(){this.on("newListener",e=>{e==="complete"&&(this.completeListeners++,this.hasActiveListeners||(this.hasActiveListeners=!0,this.startPolling_()))}),this.on("removeListener",e=>{e==="complete"&&--this.completeListeners===0&&(this.hasActiveListeners=!1)})}poll_(e){this.getMetadata((u,r)=>{if(u||r.error){e(u||r.error);return}if(!r.done){e(null);return}e(null,r)})}async startPolling_(){if(this.hasActiveListeners)try{let e=await rH.promisify(this.poll_.bind(this))();if(!e){setTimeout(this.startPolling_.bind(this),this.pollIntervalMs||500);return}this.emit("complete",e)}catch(e){this.emit("error",e)}}};c(s4,"Operation");var i4=s4;a4.Operation=i4});var OY=v(o4=>{"use strict";Object.defineProperty(o4,"__esModule",{value:!0});var hY=ir(),pd=Eu(),fY=cd(),SY="{{projectId}}",n1=class n1{constructor(e,u={}){this.baseUrl=e.baseUrl,this.apiEndpoint=e.apiEndpoint,this.timeout=u.timeout,this.globalInterceptors=hY(u.interceptors_),this.interceptors=[],this.packageJson=e.packageJson,this.projectId=u.projectId||SY,this.projectIdRequired=e.projectIdRequired!==!1,this.providedUserAgent=u.userAgent;let r=pd({},e,{projectIdRequired:this.projectIdRequired,projectId:this.projectId,authClient:u.authClient,credentials:u.credentials,keyFile:u.keyFilename,email:u.email,token:u.token});this.makeAuthenticatedRequest=fY.util.makeAuthenticatedRequestFactory(r),this.authClient=this.makeAuthenticatedRequest.authClient,this.getCredentials=this.makeAuthenticatedRequest.getCredentials,!!process.env.FUNCTION_NAME&&this.interceptors.push({request(s){return s.forever=!1,s}})}getRequestInterceptors(){return[].slice.call(this.globalInterceptors).concat(this.interceptors).filter(e=>typeof e.request=="function").map(e=>e.request)}getProjectId(e){if(!e)return this.getProjectIdAsync();this.getProjectIdAsync().then(u=>e(null,u),e)}async getProjectIdAsync(){let e=await this.authClient.getProjectId();return this.projectId===SY&&e&&(this.projectId=e),this.projectId}request_(e,u){e=pd(!0,{},e,{timeout:this.timeout});let r=e.uri.indexOf("http")===0,a=[this.baseUrl];this.projectIdRequired&&(e.projectId?(a.push("projects"),a.push(e.projectId)):(a.push("projects"),a.push(this.projectId))),a.push(e.uri),r&&a.splice(0,a.indexOf(e.uri)),e.uri=a.map(d=>{let p=/^\/*|\/*$/g;return d.replace(p,"")}).join("/").replace(/\/:/g,":");let s=this.getRequestInterceptors();hY(e.interceptors_).forEach(d=>{typeof d.request=="function"&&s.push(d.request)}),s.forEach(d=>{e=d(e)}),delete e.interceptors_;let n=this.packageJson,l=fY.util.getUserAgentFromPackageJson(n);if(this.providedUserAgent&&(l=`${this.providedUserAgent} ${l}`),e.headers=pd({},e.headers,{"User-Agent":l,"x-goog-api-client":`gl-node/${process.versions.node} gccl/${n.version}`}),e.shouldReturnStream)return this.makeAuthenticatedRequest(e);this.makeAuthenticatedRequest(e,u)}request(e,u){n1.prototype.request_.call(this,e,u)}requestStream(e){let u=pd(!0,e,{shouldReturnStream:!0});return n1.prototype.request_.call(this,u)}};c(n1,"Service");var n4=n1;o4.Service=n4});var Ai=v(_i=>{"use strict";Object.defineProperty(_i,"__esModule",{value:!0});var iH=pY();_i.Operation=iH.Operation;var aH=OY();_i.Service=aH.Service;var sH=r4();_i.ServiceObject=sH.ServiceObject;var LY=cd();_i.ApiError=LY.ApiError;_i.util=LY.util});var EY=v(hd=>{"use strict";Object.defineProperty(hd,"__esModule",{value:!0});hd.ResourceStream=void 0;var nH=require("stream"),c4=class c4 extends nH.Transform{constructor(e,u){let r=Object.assign({objectMode:!0},e.streamOptions);super(r),this._ended=!1,this._maxApiCalls=e.maxApiCalls===-1?1/0:e.maxApiCalls,this._nextQuery=e.query,this._reading=!1,this._requestFn=u,this._requestsMade=0,this._resultsToSend=e.maxResults===-1?1/0:e.maxResults}end(...e){return this._ended=!0,super.end(...e)}_read(){if(!this._reading){this._reading=!0;try{this._requestFn(this._nextQuery,(e,u,r)=>{if(e){this.destroy(e);return}this._nextQuery=r,this._resultsToSend!==1/0&&(u=u.splice(0,this._resultsToSend),this._resultsToSend-=u.length);let a=!0;for(let l of u){if(this._ended)break;a=this.push(l)}let s=!this._nextQuery||this._resultsToSend<1,n=++this._requestsMade>=this._maxApiCalls;(s||n)&&this.end(),a&&!this._ended&&setImmediate(()=>this._read()),this._reading=!1})}catch(e){this.destroy(e)}}}};c(c4,"ResourceStream");var l4=c4;hd.ResourceStream=l4});var o1=v(Dr=>{"use strict";Object.defineProperty(Dr,"__esModule",{value:!0});Dr.ResourceStream=Dr.paginator=Dr.Paginator=void 0;var oH=ir(),mY=Eu(),BY=EY();Object.defineProperty(Dr,"ResourceStream",{enumerable:!0,get:function(){return BY.ResourceStream}});var d4=class d4{extend(e,u){u=oH(u),u.forEach(r=>{let a=e.prototype[r];e.prototype[r+"_"]=a,e.prototype[r]=function(...s){let n=Xa.parseArguments_(s);return Xa.run_(n,a.bind(this))}})}streamify(e){return function(...u){let r=Xa.parseArguments_(u),a=this[e+"_"]||this[e];return Xa.runAsStream_(r,a.bind(this))}}parseArguments_(e){let u,r=!0,a=-1,s=-1,n,l=e[0],d=e[e.length-1];typeof l=="function"?n=l:u=l,typeof d=="function"&&(n=d),typeof u=="object"&&(u=mY(!0,{},u),u.maxResults&&typeof u.maxResults=="number"?s=u.maxResults:typeof u.pageSize=="number"&&(s=u.pageSize),u.maxApiCalls&&typeof u.maxApiCalls=="number"&&(a=u.maxApiCalls,delete u.maxApiCalls),(s!==-1||u.autoPaginate===!1)&&(r=!1));let p={query:u||{},autoPaginate:r,maxApiCalls:a,maxResults:s,callback:n};return p.streamOptions=mY(!0,{},p.query),delete p.streamOptions.autoPaginate,delete p.streamOptions.maxResults,delete p.streamOptions.pageSize,p}run_(e,u){let r=e.query,a=e.callback;if(!e.autoPaginate)return u(r,a);let s=new Array,n=new Promise((l,d)=>{Xa.runAsStream_(e,u).on("error",d).on("data",p=>s.push(p)).on("end",()=>l(s))});if(!a)return n.then(l=>[l]);n.then(l=>a(null,l),l=>a(l))}runAsStream_(e,u){return new BY.ResourceStream(e,u)}};c(d4,"Paginator");var fd=d4;Dr.Paginator=fd;var Xa=new fd;Dr.paginator=Xa});var Od=v((MY,Sd)=>{(function(i){"use strict";var e,u=20,r=1,a=1e6,s=1e6,n=-7,l=21,d=!1,p="[big.js] ",h=p+"Invalid ",f=h+"decimal places",S=h+"rounding mode",m=p+"Division by zero",O={},M=void 0,T=/^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i;function L(){function E(R){var x=this;if(!(x instanceof E))return R===M?L():new E(R);if(R instanceof E)x.s=R.s,x.e=R.e,x.c=R.c.slice();else{if(typeof R!="string"){if(E.strict===!0&&typeof R!="bigint")throw TypeError(h+"value");R=R===0&&1/R<0?"-0":String(R)}I(x,R)}x.constructor=E}return c(E,"Big"),E.prototype=O,E.DP=u,E.RM=r,E.NE=n,E.PE=l,E.strict=d,E.roundDown=0,E.roundHalfUp=1,E.roundHalfEven=2,E.roundUp=3,E}c(L,"_Big_");function I(E,R){var x,k,w;if(!T.test(R))throw Error(h+"number");for(E.s=R.charAt(0)=="-"?(R=R.slice(1),-1):1,(x=R.indexOf("."))>-1&&(R=R.replace(".","")),(k=R.search(/e/i))>0?(x<0&&(x=k),x+=+R.slice(k+1),R=R.substring(0,k)):x<0&&(x=R.length),w=R.length,k=0;k0&&R.charAt(--w)=="0";);for(E.e=x-k-1,E.c=[],x=0;k<=w;)E.c[x++]=+R.charAt(k++)}return E}c(I,"parse");function N(E,R,x,k){var w=E.c;if(x===M&&(x=E.constructor.RM),x!==0&&x!==1&&x!==2&&x!==3)throw Error(S);if(R<1)k=x===3&&(k||!!w[0])||R===0&&(x===1&&w[0]>=5||x===2&&(w[0]>5||w[0]===5&&(k||w[1]!==M))),w.length=1,k?(E.e=E.e-R+1,w[0]=1):w[0]=E.e=0;else if(R=5||x===2&&(w[R]>5||w[R]===5&&(k||w[R+1]!==M||w[R-1]&1))||x===3&&(k||!!w[0]),w.length=R,k){for(;++w[--R]>9;)if(w[R]=0,R===0){++E.e,w.unshift(1);break}}for(R=w.length;!w[--R];)w.pop()}return E}c(N,"round");function D(E,R,x){var k=E.e,w=E.c.join(""),j=w.length;if(R)w=w.charAt(0)+(j>1?"."+w.slice(1):"")+(k<0?"e":"e+")+k;else if(k<0){for(;++k;)w="0"+w;w="0."+w}else if(k>0)if(++k>j)for(k-=j;k--;)w+="0";else k1&&(w=w.charAt(0)+"."+w.slice(1));return E.s<0&&x?"-"+w:w}c(D,"stringify"),O.abs=function(){var E=new this.constructor(this);return E.s=1,E},O.cmp=function(E){var R,x=this,k=x.c,w=(E=new x.constructor(E)).c,j=x.s,Z=E.s,J=x.e,s0=E.e;if(!k[0]||!w[0])return k[0]?j:w[0]?-Z:0;if(j!=Z)return j;if(R=j<0,J!=s0)return J>s0^R?1:-1;for(Z=(J=k.length)<(s0=w.length)?J:s0,j=-1;++jw[j]^R?1:-1;return J==s0?0:J>s0^R?1:-1},O.div=function(E){var R=this,x=R.constructor,k=R.c,w=(E=new x(E)).c,j=R.s==E.s?1:-1,Z=x.DP;if(Z!==~~Z||Z<0||Z>a)throw Error(f);if(!w[0])throw Error(m);if(!k[0])return E.s=j,E.c=[E.e=0],E;var J,s0,u0,L0,S0,n0=w.slice(),U0=J=w.length,ce=k.length,T0=k.slice(0,J),_0=T0.length,j0=E,t0=j0.c=[],re=0,ee=Z+(j0.e=R.e-E.e)+1;for(j0.s=j,j=ee<0?0:ee,n0.unshift(0);_0++_0?1:-1;else for(S0=-1,L0=0;++S0T0[S0]?1:-1;break}if(L0<0){for(s0=_0==J?w:n0;_0;){if(T0[--_0]ee&&N(j0,ee,x.RM,T0[0]!==M),j0},O.eq=function(E){return this.cmp(E)===0},O.gt=function(E){return this.cmp(E)>0},O.gte=function(E){return this.cmp(E)>-1},O.lt=function(E){return this.cmp(E)<0},O.lte=function(E){return this.cmp(E)<1},O.minus=O.sub=function(E){var R,x,k,w,j=this,Z=j.constructor,J=j.s,s0=(E=new Z(E)).s;if(J!=s0)return E.s=-s0,j.plus(E);var u0=j.c.slice(),L0=j.e,S0=E.c,n0=E.e;if(!u0[0]||!S0[0])return S0[0]?E.s=-s0:u0[0]?E=new Z(j):E.s=1,E;if(J=L0-n0){for((w=J<0)?(J=-J,k=u0):(n0=L0,k=S0),k.reverse(),s0=J;s0--;)k.push(0);k.reverse()}else for(x=((w=u0.length0)for(;s0--;)u0[R++]=0;for(s0=R;x>J;){if(u0[--x]0?(s0=Z,k=u0):(R=-R,k=J),k.reverse();R--;)k.push(0);k.reverse()}for(J.length-u0.length<0&&(k=u0,u0=J,J=k),R=u0.length,x=0;R;J[R]%=10)x=(J[--R]=J[R]+u0[R]+x)/10|0;for(x&&(J.unshift(x),++s0),R=J.length;J[--R]===0;)J.pop();return E.c=J,E.e=s0,E},O.pow=function(E){var R=this,x=new R.constructor("1"),k=x,w=E<0;if(E!==~~E||E<-s||E>s)throw Error(h+"exponent");for(w&&(E=-E);E&1&&(k=k.times(R)),E>>=1,!!E;)R=R.times(R);return w?x.div(k):k},O.prec=function(E,R){if(E!==~~E||E<1||E>a)throw Error(h+"precision");return N(new this.constructor(this),E,R)},O.round=function(E,R){if(E===M)E=0;else if(E!==~~E||E<-a||E>a)throw Error(f);return N(new this.constructor(this),E+this.e+1,R)},O.sqrt=function(){var E,R,x,k=this,w=k.constructor,j=k.s,Z=k.e,J=new w("0.5");if(!k.c[0])return new w(k);if(j<0)throw Error(p+"No square root");j=Math.sqrt(k+""),j===0||j===1/0?(R=k.c.join(""),R.length+Z&1||(R+="0"),j=Math.sqrt(R),Z=((Z+1)/2|0)-(Z<0||Z&1),E=new w((j==1/0?"5e":(j=j.toExponential()).slice(0,j.indexOf("e")+1))+Z)):E=new w(j+""),Z=E.e+(w.DP+=4);do x=E,E=J.times(x.plus(k.div(x)));while(x.c.slice(0,Z).join("")!==E.c.slice(0,Z).join(""));return N(E,(w.DP-=4)+E.e+1,w.RM)},O.times=O.mul=function(E){var R,x=this,k=x.constructor,w=x.c,j=(E=new k(E)).c,Z=w.length,J=j.length,s0=x.e,u0=E.e;if(E.s=x.s==E.s?1:-1,!w[0]||!j[0])return E.c=[E.e=0],E;for(E.e=s0+u0,Zs0;)J=R[u0]+j[s0]*w[u0-s0-1]+J,R[u0--]=J%10,J=J/10|0;R[u0]=J}for(J?++E.e:R.shift(),s0=R.length;!R[--s0];)R.pop();return E.c=R,E},O.toExponential=function(E,R){var x=this,k=x.c[0];if(E!==M){if(E!==~~E||E<0||E>a)throw Error(f);for(x=N(new x.constructor(x),++E,R);x.c.lengtha)throw Error(f);for(x=N(new x.constructor(x),E+x.e+1,R),E=E+x.e+1;x.c.length=R.PE,!!E.c[0])},O.toNumber=function(){var E=Number(D(this,!0,!0));if(this.constructor.strict===!0&&!this.eq(E.toString()))throw Error(p+"Imprecise conversion");return E},O.toPrecision=function(E,R){var x=this,k=x.constructor,w=x.c[0];if(E!==M){if(E!==~~E||E<1||E>a)throw Error(h+"precision");for(x=N(new k(x),E,R);x.c.length=k.PE,!!w)},O.valueOf=function(){var E=this,R=E.constructor;if(R.strict===!0)throw Error(p+"valueOf disallowed");return D(E,E.e<=R.NE||E.e>=R.PE,!0)},e=L(),e.default=e.Big=e,typeof define=="function"&&define.amd?define(function(){return e}):typeof Sd<"u"&&Sd.exports?Sd.exports=e:i.Big=e})(MY)});var p4=v((sz,RY)=>{"use strict";var TY=Object.prototype,_Y=TY.hasOwnProperty,iu=TY.toString,AY;typeof Symbol=="function"&&(AY=Symbol.prototype.valueOf);var YY;typeof BigInt=="function"&&(YY=BigInt.prototype.valueOf);var Ge=c(function(i){return i!==i},"isActualNaN"),lH={boolean:1,number:1,string:1,undefined:1},cH=/^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$/,dH=/^[A-Fa-f0-9]+$/,o0={};o0.a=o0.type=function(i,e){return typeof i===e};o0.defined=function(i){return typeof i<"u"};o0.empty=function(i){var e=iu.call(i),u;if(e==="[object Array]"||e==="[object Arguments]"||e==="[object String]")return i.length===0;if(e==="[object Object]"){for(u in i)if(_Y.call(i,u))return!1;return!0}return!i};o0.equal=c(function(e,u){if(e===u)return!0;var r=iu.call(e),a;if(r!==iu.call(u))return!1;if(r==="[object Object]"){for(a in e)if(!o0.equal(e[a],u[a])||!(a in u))return!1;for(a in u)if(!o0.equal(e[a],u[a])||!(a in e))return!1;return!0}if(r==="[object Array]"){if(a=e.length,a!==u.length)return!1;for(;a--;)if(!o0.equal(e[a],u[a]))return!1;return!0}return r==="[object Function]"?e.prototype===u.prototype:r==="[object Date]"?e.getTime()===u.getTime():!1},"equal");o0.hosted=function(i,e){var u=typeof e[i];return u==="object"?!!e[i]:!lH[u]};o0.instance=o0.instanceof=function(i,e){return i instanceof e};o0.nil=o0.null=function(i){return i===null};o0.undef=o0.undefined=function(i){return typeof i>"u"};o0.args=o0.arguments=function(i){var e=iu.call(i)==="[object Arguments]",u=!o0.array(i)&&o0.arraylike(i)&&o0.object(i)&&o0.fn(i.callee);return e||u};o0.array=Array.isArray||function(i){return iu.call(i)==="[object Array]"};o0.args.empty=function(i){return o0.args(i)&&i.length===0};o0.array.empty=function(i){return o0.array(i)&&i.length===0};o0.arraylike=function(i){return!!i&&!o0.bool(i)&&_Y.call(i,"length")&&isFinite(i.length)&&o0.number(i.length)&&i.length>=0};o0.bool=o0.boolean=function(i){return iu.call(i)==="[object Boolean]"};o0.false=function(i){return o0.bool(i)&&!Number(i)};o0.true=function(i){return o0.bool(i)&&!!Number(i)};o0.date=function(i){return iu.call(i)==="[object Date]"};o0.date.valid=function(i){return o0.date(i)&&!isNaN(Number(i))};o0.element=function(i){return i!==void 0&&typeof HTMLElement<"u"&&i instanceof HTMLElement&&i.nodeType===1};o0.error=function(i){return iu.call(i)==="[object Error]"};o0.fn=o0.function=function(i){var e=typeof window<"u"&&i===window.alert;if(e)return!0;var u=iu.call(i);return u==="[object Function]"||u==="[object GeneratorFunction]"||u==="[object AsyncFunction]"};o0.number=function(i){return iu.call(i)==="[object Number]"};o0.infinite=function(i){return i===1/0||i===-1/0};o0.decimal=function(i){return o0.number(i)&&!Ge(i)&&!o0.infinite(i)&&i%1!==0};o0.divisibleBy=function(i,e){var u=o0.infinite(i),r=o0.infinite(e),a=o0.number(i)&&!Ge(i)&&o0.number(e)&&!Ge(e)&&e!==0;return u||r||a&&i%e===0};o0.integer=o0.int=function(i){return o0.number(i)&&!Ge(i)&&i%1===0};o0.maximum=function(i,e){if(Ge(i))throw new TypeError("NaN is not a valid value");if(!o0.arraylike(e))throw new TypeError("second argument must be array-like");for(var u=e.length;--u>=0;)if(i=0;)if(i>e[u])return!1;return!0};o0.nan=function(i){return!o0.number(i)||i!==i};o0.even=function(i){return o0.infinite(i)||o0.number(i)&&i===i&&i%2===0};o0.odd=function(i){return o0.infinite(i)||o0.number(i)&&i===i&&i%2!==0};o0.ge=function(i,e){if(Ge(i)||Ge(e))throw new TypeError("NaN is not a valid value");return!o0.infinite(i)&&!o0.infinite(e)&&i>=e};o0.gt=function(i,e){if(Ge(i)||Ge(e))throw new TypeError("NaN is not a valid value");return!o0.infinite(i)&&!o0.infinite(e)&&i>e};o0.le=function(i,e){if(Ge(i)||Ge(e))throw new TypeError("NaN is not a valid value");return!o0.infinite(i)&&!o0.infinite(e)&&i<=e};o0.lt=function(i,e){if(Ge(i)||Ge(e))throw new TypeError("NaN is not a valid value");return!o0.infinite(i)&&!o0.infinite(e)&&i=e&&i<=u};o0.object=function(i){return iu.call(i)==="[object Object]"};o0.primitive=c(function(e){return e?!(typeof e=="object"||o0.object(e)||o0.fn(e)||o0.array(e)):!0},"isPrimitive");o0.hash=function(i){return o0.object(i)&&i.constructor===Object&&!i.nodeType&&!i.setInterval};o0.regexp=function(i){return iu.call(i)==="[object RegExp]"};o0.string=function(i){return iu.call(i)==="[object String]"};o0.base64=function(i){return o0.string(i)&&(!i.length||cH.test(i))};o0.hex=function(i){return o0.string(i)&&(!i.length||dH.test(i))};o0.symbol=function(i){return typeof Symbol=="function"&&iu.call(i)==="[object Symbol]"&&typeof AY.call(i)=="symbol"};o0.bigint=function(i){return typeof BigInt=="function"&&iu.call(i)==="[object BigInt]"&&typeof YY.call(i)=="bigint"};RY.exports=o0});var yY=v((oz,gY)=>{"use strict";gY.exports=(i,e)=>(e=e||(()=>{}),i.then(u=>new Promise(r=>{r(e())}).then(()=>u),u=>new Promise(r=>{r(e())}).then(()=>{throw u})))});var CY=v((lz,Ed)=>{"use strict";var pH=yY(),h4=class h4 extends Error{constructor(e){super(e),this.name="TimeoutError"}};c(h4,"TimeoutError");var Ld=h4,NY=c((i,e,u)=>new Promise((r,a)=>{if(typeof e!="number"||e<0)throw new TypeError("Expected `milliseconds` to be a positive number");if(e===1/0){r(i);return}let s=setTimeout(()=>{if(typeof u=="function"){try{r(u())}catch(d){a(d)}return}let n=typeof u=="string"?u:`Promise timed out after ${e} milliseconds`,l=u instanceof Error?u:new Ld(n);typeof i.cancel=="function"&&i.cancel(),a(l)},e);pH(i.then(r,a),()=>{clearTimeout(s)})}),"pTimeout");Ed.exports=NY;Ed.exports.default=NY;Ed.exports.TimeoutError=Ld});var wY=v((dz,Qa)=>{"use strict";var IY=CY(),hH=Symbol.asyncIterator||"@@asyncIterator",bY=c(i=>{let e=i.on||i.addListener||i.addEventListener,u=i.off||i.removeListener||i.removeEventListener;if(!e||!u)throw new TypeError("Emitter is not compatible");return{addListener:e.bind(i),removeListener:u.bind(i)}},"normalizeEmitter"),xY=c(i=>Array.isArray(i)?i:[i],"toArray"),vY=c((i,e,u)=>{let r,a=new Promise((s,n)=>{if(u={rejectionEvents:["error"],multiArgs:!1,resolveImmediately:!1,...u},!(u.count>=0&&(u.count===1/0||Number.isInteger(u.count))))throw new TypeError("The `count` option should be at least 0 or more");let l=xY(e),d=[],{addListener:p,removeListener:h}=bY(i),f=c((...m)=>{let O=u.multiArgs?m:m[0];u.filter&&!u.filter(O)||(d.push(O),u.count===d.length&&(r(),s(d)))},"onItem"),S=c(m=>{r(),n(m)},"rejectHandler");r=c(()=>{for(let m of l)h(m,f);for(let m of u.rejectionEvents)h(m,S)},"cancel");for(let m of l)p(m,f);for(let m of u.rejectionEvents)p(m,S);u.resolveImmediately&&s(d)});if(a.cancel=r,typeof u.timeout=="number"){let s=IY(a,u.timeout);return s.cancel=r,s}return a},"multiple"),DY=c((i,e,u)=>{typeof u=="function"&&(u={filter:u}),u={...u,count:1,resolveImmediately:!1};let r=vY(i,e,u),a=r.then(s=>s[0]);return a.cancel=r.cancel,a},"pEvent");Qa.exports=DY;Qa.exports.default=DY;Qa.exports.multiple=vY;Qa.exports.iterator=(i,e,u)=>{typeof u=="function"&&(u={filter:u});let r=xY(e);u={rejectionEvents:["error"],resolutionEvents:[],limit:1/0,multiArgs:!1,...u};let{limit:a}=u;if(!(a>=0&&(a===1/0||Number.isInteger(a))))throw new TypeError("The `limit` option should be a non-negative integer or Infinity");if(a===0)return{[Symbol.asyncIterator](){return this},async next(){return{done:!0,value:void 0}}};let{addListener:n,removeListener:l}=bY(i),d=!1,p,h=!1,f=[],S=[],m=0,O=!1,M=c((...N)=>{m++,O=m===a;let D=u.multiArgs?N:N[0];if(f.length>0){let{resolve:E}=f.shift();E({done:!1,value:D}),O&&T();return}S.push(D),O&&T()},"valueHandler"),T=c(()=>{d=!0;for(let N of r)l(N,M);for(let N of u.rejectionEvents)l(N,L);for(let N of u.resolutionEvents)l(N,I);for(;f.length>0;){let{resolve:N}=f.shift();N({done:!0,value:void 0})}},"cancel"),L=c((...N)=>{if(p=u.multiArgs?N:N[0],f.length>0){let{reject:D}=f.shift();D(p)}else h=!0;T()},"rejectHandler"),I=c((...N)=>{let D=u.multiArgs?N:N[0];if(!(u.filter&&!u.filter(D))){if(f.length>0){let{resolve:E}=f.shift();E({done:!0,value:D})}else S.push(D);T()}},"resolveHandler");for(let N of r)n(N,M);for(let N of u.rejectionEvents)n(N,L);for(let N of u.resolutionEvents)n(N,I);return{[hH](){return this},async next(){if(S.length>0){let N=S.shift();return{done:d&&S.length===0&&!O,value:N}}if(h)throw h=!1,p;return d?{done:!0,value:void 0}:new Promise((N,D)=>f.push({resolve:N,reject:D}))},async return(N){return T(),{done:d,value:N}}}};Qa.exports.TimeoutError=IY.TimeoutError});var Bd=v(md=>{"use strict";Object.defineProperty(md,"__esModule",{value:!0});md.Table=void 0;var l1=Ai(),PY=o1(),fH=rr(),c1=ir(),SH=Od(),Zu=Eu(),OH=wY(),LH=require("fs"),Ja=p4(),f4=require("path"),EH=O5(),UY=(Fc(),Dp(kc)),mH=Md(),BH=$5(),wr={avro:"AVRO",csv:"CSV",json:"NEWLINE_DELIMITED_JSON",orc:"ORC",parquet:"PARQUET"},et=class et extends l1.ServiceObject{constructor(e,u,r){let a={create:!0,delete:!0,exists:!0,get:!0,getMetadata:!0};super({parent:e,baseUrl:"/tables",id:u,createMethod:e.createTable.bind(e),methods:a}),r&&r.location&&(this.location=r.location),this.bigQuery=e.bigQuery,this.dataset=e,this.interceptors.push({request:s=>(s.method==="PATCH"&&s.json.etag&&(s.headers=s.headers||{},s.headers["If-Match"]=s.json.etag),s)}),this.createReadStream=PY.paginator.streamify("getRows")}static createSchemaFromString_(e){return e.split(/\s*,\s*/).reduce((u,r)=>(u.fields.push({name:r.split(":")[0].trim(),type:(r.split(":")[1]||"STRING").toUpperCase().trim()}),u),{fields:[]})}static encodeValue_(e){if(typeof e>"u"||e===null)return null;if(e instanceof Buffer)return e.toString("base64");if(e instanceof SH.default)return e.toFixed();let u=["BigQueryDate","BigQueryDatetime","BigQueryInt","BigQueryTime","BigQueryTimestamp","Geography"],r=e.constructor.name;return u.indexOf(r)>-1?e.value:Ja.date(e)?e.toJSON():Ja.array(e)?e.map(et.encodeValue_):typeof e=="object"?Object.keys(e).reduce((s,n)=>(s[n]=et.encodeValue_(e[n]),s),{}):e}static formatMetadata_(e){let u=Zu(!0,{},e);return e.name&&(u.friendlyName=e.name,delete u.name),Ja.string(e.schema)&&(u.schema=et.createSchemaFromString_(e.schema)),Ja.array(e.schema)&&(u.schema={fields:e.schema}),u.schema&&u.schema.fields&&(u.schema.fields=u.schema.fields.map(r=>(r.fields&&(r.type="RECORD"),r))),Ja.string(e.partitioning)&&(u.timePartitioning={type:e.partitioning.toUpperCase()},delete u.partitioning),Ja.string(e.view)&&(u.view={query:e.view,useLegacySql:!1}),u}copy(e,u,r){let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r;this.createCopyJob(e,a,(n,l,d)=>{if(n){s(n,d);return}l.on("error",s).on("complete",p=>{s(null,p)})})}copyFrom(e,u,r){let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r;this.createCopyFromJob(e,a,(n,l,d)=>{if(n){s(n,d);return}l.on("error",s).on("complete",p=>{s(null,p)})})}createCopyJob(e,u,r){if(!(e instanceof et))throw new Error("Destination must be a Table object.");let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r,n={configuration:{copy:Zu(!0,a,{destinationTable:{datasetId:e.dataset.id,projectId:e.bigQuery.projectId,tableId:e.id},sourceTable:{datasetId:this.dataset.id,projectId:this.bigQuery.projectId,tableId:this.id}})}};a.jobPrefix&&(n.jobPrefix=a.jobPrefix,delete a.jobPrefix),this.location&&(n.location=this.location),a.jobId&&(n.jobId=a.jobId,delete a.jobId),this.bigQuery.createJob(n,s)}createCopyFromJob(e,u,r){let a=c1(e);a.forEach(d=>{if(!(d instanceof et))throw new Error("Source must be a Table object.")});let s=typeof u=="object"?u:{},n=typeof u=="function"?u:r,l={configuration:{copy:Zu(!0,s,{destinationTable:{datasetId:this.dataset.id,projectId:this.bigQuery.projectId,tableId:this.id},sourceTables:a.map(d=>({datasetId:d.dataset.id,projectId:d.bigQuery.projectId,tableId:d.id}))})}};s.jobPrefix&&(l.jobPrefix=s.jobPrefix,delete s.jobPrefix),this.location&&(l.location=this.location),s.jobId&&(l.jobId=s.jobId,delete s.jobId),this.bigQuery.createJob(l,n)}createExtractJob(e,u,r){let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r;if(a=Zu(!0,a,{destinationUris:c1(e).map(l=>{if(!l1.util.isCustomType(l,"storage/file"))throw new Error("Destination must be a File object.");let d=f4.extname(l.name).substr(1).toLowerCase();return!a.destinationFormat&&!a.format&&wr[d]&&(a.destinationFormat=wr[d]),"gs://"+l.bucket.name+"/"+l.name})}),a.format)if(a.format=a.format.toLowerCase(),wr[a.format])a.destinationFormat=wr[a.format],delete a.format;else throw new Error("Destination format not recognized: "+a.format);a.gzip&&(a.compression="GZIP",delete a.gzip);let n={configuration:{extract:Zu(!0,a,{sourceTable:{datasetId:this.dataset.id,projectId:this.bigQuery.projectId,tableId:this.id}})}};a.jobPrefix&&(n.jobPrefix=a.jobPrefix,delete a.jobPrefix),this.location&&(n.location=this.location),a.jobId&&(n.jobId=a.jobId,delete a.jobId),this.bigQuery.createJob(n,s)}createLoadJob(e,u,r){let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r;this._createLoadJob(e,a).then(([n])=>s(null,n,n.metadata),n=>s(n))}async _createLoadJob(e,u){if(u.format&&(u.sourceFormat=wr[u.format.toLowerCase()],delete u.format),this.location&&(u.location=this.location),typeof e=="string"){let a=wr[f4.extname(e).substr(1).toLowerCase()];!u.sourceFormat&&a&&(u.sourceFormat=a);let s=LH.createReadStream(e).pipe(this.createWriteStream_(u)),n=await OH.default(s,"job");return[n,n.metadata]}let r={configuration:{load:{destinationTable:{projectId:this.bigQuery.projectId,datasetId:this.dataset.id,tableId:this.id}}}};return u.jobPrefix&&(r.jobPrefix=u.jobPrefix,delete u.jobPrefix),u.location&&(r.location=u.location,delete u.location),u.jobId&&(r.jobId=u.jobId,delete u.jobId),Zu(!0,r.configuration.load,u,{sourceUris:c1(e).map(a=>{if(!l1.util.isCustomType(a,"storage/file"))throw new Error("Source must be a File object.");let s=wr[f4.extname(a.name).substr(1).toLowerCase()];return!u.sourceFormat&&s&&(r.configuration.load.sourceFormat=s),"gs://"+a.bucket.name+"/"+a.name})}),this.bigQuery.createJob(r)}createQueryJob(e,u){return this.dataset.createQueryJob(e,u)}createQueryStream(e){return this.dataset.createQueryStream(e)}createWriteStream_(e){e=e||{},typeof e=="string"&&(e={sourceFormat:wr[e.toLowerCase()]}),typeof e.schema=="string"&&(e.schema=et.createSchemaFromString_(e.schema)),e=Zu(!0,{destinationTable:{projectId:this.bigQuery.projectId,datasetId:this.dataset.id,tableId:this.id}},e);let u=e.jobId||UY.v4();e.jobId&&delete e.jobId,e.jobPrefix&&(u=e.jobPrefix+u,delete e.jobPrefix);let r=EH(BH());return r.once("writing",()=>{l1.util.makeWritableStream(r,{makeAuthenticatedRequest:this.bigQuery.makeAuthenticatedRequest,metadata:{configuration:{load:e},jobReference:{jobId:u,projectId:this.bigQuery.projectId,location:this.location}},request:{uri:`${this.bigQuery.apiEndpoint}/upload/bigquery/v2/projects/${this.bigQuery.projectId}/jobs`}},a=>{let s=this.bigQuery.job(a.jobReference.jobId,{location:a.jobReference.location});s.metadata=a,r.emit("job",s)})}),r}createWriteStream(e){let u=this.createWriteStream_(e);return u.on("prefinish",()=>{u.cork()}),u.on("job",r=>{r.on("error",a=>{u.destroy(a)}).on("complete",()=>{u.emit("complete",r),u.uncork()})}),u}extract(e,u,r){let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r;this.createExtractJob(e,a,(n,l,d)=>{if(n){s(n,d);return}l.on("error",s).on("complete",p=>{s(null,p)})})}getRows(e,u){let r=typeof e=="object"?e:{},a=typeof e=="function"?e:u,s=r.wrapIntegers?r.wrapIntegers:!1;delete r.wrapIntegers;let n=c((l,d,p,h)=>{if(l){a(l,null,null,h);return}d=mH.BigQuery.mergeSchemaWithRows_(this.metadata.schema,d||[],s,r.selectedFields?r.selectedFields.split(","):[]),a(null,d,p,h)},"onComplete");this.request({uri:"/data",qs:r},(l,d)=>{if(l){n(l,null,null,d);return}let p=null;if(d.pageToken&&(p=Object.assign({},r,{pageToken:d.pageToken})),d.rows&&d.rows.length>0&&!this.metadata.schema){this.getMetadata((h,f,S)=>{if(h){n(h,null,null,S);return}n(null,d.rows,p,d)});return}n(null,d.rows,p,d)})}insert(e,u,r){let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r,n=this._insertAndCreateTable(e,a);if(s)n.then(l=>s(null,l),l=>s(l,null));else return n.then(l=>[l])}async _insertAndCreateTable(e,u){let{schema:r}=u,a=6e4;try{return await this._insertWithRetry(e,u)}catch(s){if(s.code!==404||!r)throw s}try{await this.create({schema:r})}catch(s){if(s.code!==409)throw s}return await new Promise(s=>setTimeout(s,a)),this._insertAndCreateTable(e,u)}async _insertWithRetry(e,u){let{partialRetries:r=3}=u,a,s=Math.max(r,0)+1;for(let n=0;n!!d.row).map(d=>d.row),!e.length)break}throw a}async _insert(e,u){if(e=c1(e),!e.length)throw new Error("You must provide at least 1 row to be inserted.");let r=Zu(!0,{},u,{rows:e});u.raw||(r.rows=e.map(n=>{let l={json:et.encodeValue_(n)};return u.createInsertId!==!1&&(l.insertId=UY.v4()),l})),delete r.createInsertId,delete r.partialRetries,delete r.raw,delete r.schema;let[a]=await this.request({method:"POST",uri:"/insertAll",json:r}),s=(a.insertErrors||[]).map(n=>({errors:n.errors.map(l=>({message:l.message,reason:l.reason})),row:e[n.index]}));if(s.length>0)throw new l1.util.PartialFailureError({errors:s,response:a});return a}load(e,u,r){let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r;this.createLoadJob(e,a,(n,l,d)=>{if(n){s(n,d);return}l.on("error",s).on("complete",p=>{s(null,p)})})}query(e,u){this.dataset.query(e,u)}setMetadata(e,u){let r=et.formatMetadata_(e);super.setMetadata(r,u)}getIamPolicy(e,u){let r=typeof e=="object"?e:{},a=typeof e=="function"?e:u;if(typeof r.requestedPolicyVersion=="number"&&r.requestedPolicyVersion!==1)throw new Error("Only IAM policy version 1 is supported.");let s=Zu(!0,{},{options:r});this.request({method:"POST",uri:"/:getIamPolicy",json:s},(n,l)=>{if(n){a(n,null);return}a(null,l)})}setIamPolicy(e,u,r){let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r;if(e.version&&e.version!==1)throw new Error("Only IAM policy version 1 is supported.");let n=Zu(!0,{},a,{policy:e});this.request({method:"POST",uri:"/:setIamPolicy",json:n},(l,d)=>{if(l){s(l,null);return}s(null,d)})}testIamPermissions(e,u){e=c1(e);let r=Zu(!0,{},{permissions:e});this.request({method:"POST",uri:"/:testIamPermissions",json:r},(a,s)=>{if(a){u(a,null);return}u(null,s)})}};c(et,"Table");var d1=et;md.Table=d1;PY.paginator.extend(d1,["getRows"]);fH.promisifyAll(d1)});var O4=v(_d=>{"use strict";Object.defineProperty(_d,"__esModule",{value:!0});_d.Model=void 0;var kY=Ai(),MH=rr(),TH=ir(),FY=Eu(),_H=["ML_TF_SAVED_MODEL","ML_XGBOOST_BOOSTER"],S4=class S4 extends kY.ServiceObject{constructor(e,u){let r={delete:!0,exists:!0,get:!0,getMetadata:!0,setMetadata:!0};super({parent:e,baseUrl:"/models",id:u,methods:r}),this.dataset=e,this.bigQuery=e.bigQuery}createExtractJob(e,u,r){let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r;if(a=FY(!0,a,{destinationUris:TH(e).map(l=>{if(kY.util.isCustomType(l,"storage/file"))return"gs://"+l.bucket.name+"/"+l.name;if(typeof l=="string")return l;throw new Error("Destination must be a string or a File object.")})}),a.format)if(a.format=a.format.toUpperCase(),_H.includes(a.format))a.destinationFormat=a.format,delete a.format;else throw new Error("Destination format not recognized: "+a.format);let n={configuration:{extract:FY(!0,a,{sourceModel:{datasetId:this.dataset.id,projectId:this.bigQuery.projectId,modelId:this.id}})}};a.jobPrefix&&(n.jobPrefix=a.jobPrefix,delete a.jobPrefix),a.jobId&&(n.jobId=a.jobId,delete a.jobId),this.bigQuery.createJob(n,s)}extract(e,u,r){let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r;this.createExtractJob(e,a,(n,l,d)=>{if(n){s(n,d);return}l.on("error",s).on("complete",p=>{s(null,p)})})}};c(S4,"Model");var Td=S4;_d.Model=Td;MH.promisifyAll(Td)});var E4=v(Yd=>{"use strict";Object.defineProperty(Yd,"__esModule",{value:!0});Yd.Routine=void 0;var AH=Ai(),YH=rr(),RH=Eu(),L4=class L4 extends AH.ServiceObject{constructor(e,u){let r={create:!0,delete:!0,exists:!0,get:!0,getMetadata:!0,setMetadata:{reqOpts:{method:"PUT"}}};super({parent:e,baseUrl:"/routines",id:u,methods:r,createMethod:e.createRoutine.bind(e)})}setMetadata(e,u){this.getMetadata((r,a)=>{if(r){u(r);return}let s=RH(!0,{},a,e);super.setMetadata(s,u)})}};c(L4,"Routine");var Ad=L4;Yd.Routine=Ad;YH.promisifyAll(Ad)});var B4=v(gd=>{"use strict";Object.defineProperty(gd,"__esModule",{value:!0});gd.Dataset=void 0;var gH=Ai(),Rd=o1(),yH=rr(),p1=Eu(),HY=Bd(),NH=O4(),CH=E4(),m4=class m4 extends gH.ServiceObject{constructor(e,u,r){let a={create:!0,exists:!0,get:!0,getMetadata:!0,setMetadata:!0};super({parent:e,baseUrl:"/datasets",id:u,methods:a,createMethod:(s,n,l)=>{let d=typeof n=="object"?n:{},p=typeof n=="function"?n:l;return d=p1({},d,{location:this.location}),e.createDataset(s,d,p)}}),r&&r.location&&(this.location=r.location),this.bigQuery=e,this.interceptors.push({request:s=>(s.method==="PATCH"&&s.json.etag&&(s.headers=s.headers||{},s.headers["If-Match"]=s.json.etag),s)}),this.getModelsStream=Rd.paginator.streamify("getModels"),this.getRoutinesStream=Rd.paginator.streamify("getRoutines"),this.getTablesStream=Rd.paginator.streamify("getTables")}createQueryJob(e,u){return typeof e=="string"&&(e={query:e}),e=p1(!0,{},e,{defaultDataset:{datasetId:this.id},location:this.location}),this.bigQuery.createQueryJob(e,u)}createQueryStream(e){return typeof e=="string"&&(e={query:e}),e=p1(!0,{},e,{defaultDataset:{datasetId:this.id},location:this.location}),this.bigQuery.createQueryStream(e)}createRoutine(e,u,r){let a=Object.assign({},u,{routineReference:{routineId:e,datasetId:this.id,projectId:this.bigQuery.projectId}});this.request({method:"POST",uri:"/routines",json:a},(s,n)=>{if(s){r(s,null,n);return}let l=this.routine(n.routineReference.routineId);l.metadata=n,r(null,l,n)})}createTable(e,u,r){let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r,n=HY.Table.formatMetadata_(a);n.tableReference={datasetId:this.id,projectId:this.bigQuery.projectId,tableId:e},this.request({method:"POST",uri:"/tables",json:n},(l,d)=>{if(l){s(l,null,d);return}let p=this.table(d.tableReference.tableId,{location:d.location});p.metadata=d,s(null,p,d)})}delete(e,u){let r=typeof e=="object"?e:{};u=typeof e=="function"?e:u;let a={deleteContents:!!r.force};this.request({method:"DELETE",uri:"",qs:a},u)}getModels(e,u){let r=typeof e=="object"?e:{},a=typeof e=="function"?e:u;this.request({uri:"/models",qs:r},(s,n)=>{if(s){a(s,null,null,n);return}let l=null;n.nextPageToken&&(l=Object.assign({},r,{pageToken:n.nextPageToken}));let d=(n.models||[]).map(p=>{let h=this.model(p.modelReference.modelId);return h.metadata=p,h});a(null,d,l,n)})}getRoutines(e,u){let r=typeof e=="object"?e:{},a=typeof e=="function"?e:u;this.request({uri:"/routines",qs:r},(s,n)=>{if(s){a(s,null,null,n);return}let l=null;n.nextPageToken&&(l=Object.assign({},r,{pageToken:n.nextPageToken}));let d=(n.routines||[]).map(p=>{let h=this.routine(p.routineReference.routineId);return h.metadata=p,h});a(null,d,l,n)})}getTables(e,u){let r=typeof e=="object"?e:{},a=typeof e=="function"?e:u;this.request({uri:"/tables",qs:r},(s,n)=>{if(s){a(s,null,null,n);return}let l=null;n.nextPageToken&&(l=Object.assign({},r,{pageToken:n.nextPageToken}));let d=(n.tables||[]).map(p=>{let h=this.table(p.tableReference.tableId,{location:p.location});return h.metadata=p,h});a(null,d,l,n)})}model(e){if(typeof e!="string")throw new TypeError("A model ID is required.");return new NH.Model(this,e)}query(e,u){return typeof e=="string"&&(e={query:e}),e=p1(!0,{},e,{defaultDataset:{datasetId:this.id},location:this.location}),this.bigQuery.query(e,u)}routine(e){if(typeof e!="string")throw new TypeError("A routine ID is required.");return new CH.Routine(this,e)}table(e,u){if(typeof e!="string")throw new TypeError("A table ID is required.");return u=p1({location:this.location},u),new HY.Table(this,e,u)}};c(m4,"Dataset");var h1=m4;gd.Dataset=h1;Rd.paginator.extend(h1,["getModels","getRoutines","getTables"]);yH.promisifyAll(h1,{exclude:["model","routine","table"]})});var T4=v(yd=>{"use strict";Object.defineProperty(yd,"__esModule",{value:!0});yd.Job=void 0;var VY=Ai(),qY=o1(),IH=rr(),GY=Eu(),bH=_4(),M4=class M4 extends VY.Operation{constructor(e,u,r){let a,s={exists:!0,get:!0,getMetadata:{reqOpts:{qs:{get location(){return a}}}}};super({parent:e,baseUrl:"/jobs",id:u,methods:s}),Object.defineProperty(this,"location",{get(){return a},set(n){a=n}}),this.bigQuery=e,r&&r.location&&(this.location=r.location),this.getQueryResultsStream=qY.paginator.streamify("getQueryResultsAsStream_")}cancel(e){let u;this.location&&(u={location:this.location}),this.request({method:"POST",uri:"/cancel",qs:u},e)}getQueryResults(e,u){let r=typeof e=="object"?e:{},a=typeof e=="function"?e:u,s=GY({location:this.location},r),n=s.wrapIntegers?s.wrapIntegers:!1;delete s.wrapIntegers,delete s.job;let l=typeof s.timeoutMs=="number"?s.timeoutMs:!1;this.bigQuery.request({uri:"/queries/"+this.id,qs:s},(d,p)=>{if(d){a(d,null,null,p);return}let h=[];p.schema&&p.rows&&(h=bH.BigQuery.mergeSchemaWithRows_(p.schema,p.rows,n));let f=null;if(p.jobComplete===!1){if(f=Object.assign({},r),l){let S=new Error(`The query did not complete before ${l}ms`);a(S,null,f,p);return}}else p.pageToken&&(f=Object.assign({},r,{pageToken:p.pageToken}));a(null,h,f,p)})}getQueryResultsAsStream_(e,u){e=GY({autoPaginate:!1},e),this.getQueryResults(e,u)}poll_(e){this.getMetadata((u,r)=>{if(!u&&r.status&&r.status.errorResult&&(u=new VY.util.ApiError(r.status)),u){e(u);return}if(r.status.state!=="DONE"){e(null);return}e(null,r)})}};c(M4,"Job");var f1=M4;yd.Job=f1;qY.paginator.extend(f1,["getQueryResults"]);IH.promisifyAll(f1)});var KY=v((_z,xH)=>{xH.exports={name:"@google-cloud/bigquery",description:"Google BigQuery Client Library for Node.js",version:"5.7.1",license:"Apache-2.0",author:"Google LLC",engines:{node:">=10"},repository:"googleapis/nodejs-bigquery",main:"./build/src/index.js",types:"./build/src/index.d.ts",files:["build/src","!build/src/**/*.map"],keywords:["google apis client","google api client","google apis","google api","google","google cloud platform","google cloud","cloud","google bigquery","bigquery"],scripts:{prebenchmark:"npm run compile",benchmark:"node build/benchmark/bench.js benchmark/queries.json",docs:"jsdoc -c .jsdoc.js",lint:"gts check","samples-test":"cd samples/ && npm link ../ && npm test && cd ../",test:"c8 mocha build/test","system-test":"mocha build/system-test --timeout 600000","presystem-test":"npm run compile",clean:"gts clean",compile:"tsc -p . && cp src/types.d.ts build/src/",fix:"gts fix",predocs:"npm run compile",prepare:"npm run compile",pretest:"npm run compile","docs-test":"linkinator docs","predocs-test":"npm run docs",types:"dtsd bigquery v2 > ./src/types.d.ts",prelint:"cd samples; npm link ../; npm install",precompile:"gts clean"},dependencies:{"@google-cloud/common":"^3.1.0","@google-cloud/paginator":"^3.0.0","@google-cloud/promisify":"^2.0.0",arrify:"^2.0.1","big.js":"^6.0.0",duplexify:"^4.0.0",extend:"^3.0.2",is:"^3.3.0","p-event":"^4.1.0","stream-events":"^1.0.5",uuid:"^8.0.0"},devDependencies:{"@google-cloud/storage":"^5.0.0","@types/big.js":"^6.0.0","@types/execa":"^0.9.0","@types/extend":"^3.0.1","@types/is":"0.0.21","@types/mocha":"^8.0.0","@types/mv":"^2.1.0","@types/ncp":"^2.0.1","@types/node":"^14.0.0","@types/proxyquire":"^1.3.28","@types/sinon":"^10.0.0","@types/tmp":"0.2.1","@types/uuid":"^8.0.0",c8:"^7.0.0",codecov:"^3.5.0","discovery-tsd":"^0.2.0",execa:"^5.0.0",gts:"^2.0.0",jsdoc:"^3.6.3","jsdoc-fresh":"^1.0.1","jsdoc-region-tag":"^1.0.2",linkinator:"^2.0.0",mocha:"^8.0.0",mv:"^2.1.1",ncp:"^2.0.0",proxyquire:"^2.1.0",sinon:"^11.0.0",tmp:"0.2.1",typescript:"^3.8.3"}}});var _4=v(Re=>{"use strict";Object.defineProperty(Re,"__esModule",{value:!0});Re.BigQueryInt=Re.BigQueryTime=Re.BigQueryDatetime=Re.BigQueryTimestamp=Re.Geography=Re.BigQueryDate=Re.BigQuery=Re.PROTOCOL_REGEX=void 0;var WY=Ai(),Nd=o1(),vH=rr(),jY=ir(),A4=Od(),Ur=Eu(),au=p4(),DH=(Fc(),Dp(kc)),wH=B4(),UH=T4(),PH=Bd();Re.PROTOCOL_REGEX=/^(\w*):\/\//;var C0=class C0 extends WY.Service{constructor(e={}){let u="https://bigquery.googleapis.com",r=process.env.BIGQUERY_EMULATOR_HOST;typeof r=="string"&&(u=C0.sanitizeEndpoint(r)),e.apiEndpoint&&(u=C0.sanitizeEndpoint(e.apiEndpoint)),e=Object.assign({},e,{apiEndpoint:u});let a=r||`${e.apiEndpoint}/bigquery/v2`,s={apiEndpoint:e.apiEndpoint,baseUrl:a,scopes:["https://www.googleapis.com/auth/bigquery"],packageJson:KY()};e.scopes&&(s.scopes=s.scopes.concat(e.scopes)),super(s,e),this.location=e.location,this.createQueryStream=Nd.paginator.streamify("queryAsStream_"),this.getDatasetsStream=Nd.paginator.streamify("getDatasets"),this.getJobsStream=Nd.paginator.streamify("getJobs"),this.interceptors.push({request:n=>Ur(!0,{},n,{qs:{prettyPrint:!1}})})}static sanitizeEndpoint(e){return Re.PROTOCOL_REGEX.test(e)||(e=`https://${e}`),e.replace(/\/+$/,"")}static mergeSchemaWithRows_(e,u,r,a){var s;if(a&&a.length>0){let p=a.map(f=>f.split(".")),h=p.map(f=>f.shift());e.fields=(s=e.fields)===null||s===void 0?void 0:s.filter(f=>h.map(S=>S.toLowerCase()).indexOf(f.name.toLowerCase())>=0),a=p.filter(f=>f.length>0).map(f=>f.join("."))}return jY(u).map(n).map(d);function n(p){return p.f.map((h,f)=>{let S=e.fields[f],m=h.v;S.mode==="REPEATED"?m=m.map(M=>l(S,M.v,r,a)):m=l(S,m,r,a);let O={};return O[S.name]=m,O})}function l(p,h,f,S){if(au.null(h))return h;switch(p.type){case"BOOLEAN":case"BOOL":{h=h.toLowerCase()==="true";break}case"BYTES":{h=Buffer.from(h,"base64");break}case"FLOAT":case"FLOAT64":{h=Number(h);break}case"INTEGER":case"INT64":{h=f?typeof f=="object"?C0.int({integerValue:h,schemaFieldName:p.name},f).valueOf():C0.int(h):Number(h);break}case"NUMERIC":{h=new A4.Big(h);break}case"BIGNUMERIC":{h=new A4.Big(h);break}case"RECORD":{h=C0.mergeSchemaWithRows_(p,h,f,S).pop();break}case"DATE":{h=C0.date(h);break}case"DATETIME":{h=C0.datetime(h);break}case"TIME":{h=C0.time(h);break}case"TIMESTAMP":{h=C0.timestamp(new Date(h*1e3));break}case"GEOGRAPHY":{h=C0.geography(h);break}default:break}return h}function d(p){return p.reduce((h,f)=>{let S=Object.keys(f)[0];return h[S]=f[S],h},{})}}static date(e){return new S1(e)}date(e){return C0.date(e)}static datetime(e){return new E1(e)}datetime(e){return C0.datetime(e)}static time(e){return new m1(e)}time(e){return C0.time(e)}static timestamp(e){return new L1(e)}timestamp(e){return C0.timestamp(e)}static int(e,u){return new B1(e,u)}int(e,u){return C0.int(e,u)}static geography(e){return new O1(e)}geography(e){return C0.geography(e)}static decodeIntegerValue_(e){let u=Number(e.integerValue);if(!Number.isSafeInteger(u))throw new Error("We attempted to return all of the numeric values, but "+(e.schemaFieldName?e.schemaFieldName+" ":"")+"value "+e.integerValue+` is out of bounds of 'Number.MAX_SAFE_INTEGER'. +To prevent this error, please consider passing 'options.wrapNumbers' as +{ + integerTypeCastFunction: provide + fields: optionally specify field name(s) to be custom casted +} +`);return u}static getTypeDescriptorFromProvidedType_(e){let u=["DATE","DATETIME","TIME","TIMESTAMP","BYTES","NUMERIC","BIGNUMERIC","BOOL","INT64","FLOAT64","STRING","GEOGRAPHY","ARRAY","STRUCT"];if(au.array(e))return e=e,{type:"ARRAY",arrayType:C0.getTypeDescriptorFromProvidedType_(e[0])};if(au.object(e))return{type:"STRUCT",structTypes:Object.keys(e).map(r=>({name:r,type:C0.getTypeDescriptorFromProvidedType_(e[r])}))};if(e=e.toUpperCase(),!u.includes(e))throw new Error(`Invalid type provided: "${e}"`);return{type:e.toUpperCase()}}static getTypeDescriptorFromValue_(e){let u;if(e===null)throw new Error("Parameter types must be provided for null values via the 'types' field in query options.");if(e instanceof S1)u="DATE";else if(e instanceof E1)u="DATETIME";else if(e instanceof m1)u="TIME";else if(e instanceof L1)u="TIMESTAMP";else if(e instanceof Buffer)u="BYTES";else if(e instanceof A4.Big)e.c.length-e.e>=10?u="BIGNUMERIC":u="NUMERIC";else if(e instanceof B1)u="INT64";else if(e instanceof O1)u="GEOGRAPHY";else if(Array.isArray(e)){if(e.length===0)throw new Error("Parameter types must be provided for empty arrays via the 'types' field in query options.");return{type:"ARRAY",arrayType:C0.getTypeDescriptorFromValue_(e[0])}}else if(au.boolean(e))u="BOOL";else if(au.number(e))u=e%1===0?"INT64":"FLOAT64";else{if(au.object(e))return{type:"STRUCT",structTypes:Object.keys(e).map(r=>({name:r,type:C0.getTypeDescriptorFromValue_(e[r])}))};au.string(e)&&(u="STRING")}if(!u)throw new Error(["This value could not be translated to a BigQuery data type.",e].join(` +`));return{type:u}}static valueToQueryParameter_(e,u){au.date(e)&&(e=C0.timestamp(e));let r;u?r=C0.getTypeDescriptorFromProvidedType_(u):r=C0.getTypeDescriptorFromValue_(e);let a={parameterType:r,parameterValue:{}},s=a.parameterType.type;return s==="ARRAY"?a.parameterValue.arrayValues=e.map(n=>{let l=C0._getValue(n,r.arrayType);return au.object(l)||au.array(l)?au.array(u)?(u=u,C0.valueToQueryParameter_(l,u[0]).parameterValue):C0.valueToQueryParameter_(l).parameterValue:{value:l}}):s==="STRUCT"?a.parameterValue.structValues=Object.keys(e).reduce((n,l)=>{let d;return u?d=C0.valueToQueryParameter_(e[l],u[l]):d=C0.valueToQueryParameter_(e[l]),n[l]=d.parameterValue,n},{}):a.parameterValue.value=C0._getValue(e,r),a}static _getValue(e,u){return e===null?null:(e.type&&(u=e),C0._isCustomType(u)?e.value:e)}static _isCustomType({type:e}){return e.indexOf("TIME")>-1||e.indexOf("DATE")>-1||e.indexOf("GEOGRAPHY")>-1||e.indexOf("BigQueryInt")>-1}createDataset(e,u,r){let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r;this.request({method:"POST",uri:"/datasets",json:Ur(!0,{location:this.location},a,{datasetReference:{datasetId:e}})},(n,l)=>{if(n){s(n,null,l);return}let d=this.dataset(e);d.metadata=l,s(null,d,l)})}createQueryJob(e,u){let r=typeof e=="object"?e:{query:e};if((!r||!r.query)&&!r.pageToken)throw new Error("A SQL query string is required.");let a=Ur(!0,{useLegacySql:!1},r);if(r.destination){if(!(r.destination instanceof PH.Table))throw new Error("Destination must be a Table object.");a.destinationTable={datasetId:r.destination.dataset.id,projectId:r.destination.dataset.bigQuery.projectId,tableId:r.destination.id},delete a.destination}if(a.params){if(a.parameterMode=au.array(a.params)?"positional":"named",a.parameterMode==="named"){a.queryParameters=[];for(let n in a.params){let l=a.params[n],d;if(a.types){if(!au.object(a.types))throw new Error("Provided types must match the value type passed to `params`");a.types[n]?d=C0.valueToQueryParameter_(l,a.types[n]):d=C0.valueToQueryParameter_(l)}else d=C0.valueToQueryParameter_(l);d.name=n,a.queryParameters.push(d)}}else if(a.queryParameters=[],a.types){if(!au.array(a.types))throw new Error("Provided types must match the value type passed to `params`");if(a.params.length!==a.types.length)throw new Error("Incorrect number of parameter types provided.");a.params.forEach((n,l)=>{let d=C0.valueToQueryParameter_(n,a.types[l]);a.queryParameters.push(d)})}else a.params.forEach(n=>{let l=C0.valueToQueryParameter_(n);a.queryParameters.push(l)});delete a.params}let s={configuration:{query:a}};typeof a.jobTimeoutMs=="number"&&(s.configuration.jobTimeoutMs=a.jobTimeoutMs,delete a.jobTimeoutMs),a.dryRun&&(s.configuration.dryRun=a.dryRun,delete a.dryRun),a.labels&&(s.configuration.labels=a.labels,delete a.labels),a.jobPrefix&&(s.jobPrefix=a.jobPrefix,delete a.jobPrefix),a.location&&(s.location=a.location,delete a.location),a.jobId&&(s.jobId=a.jobId,delete a.jobId),this.createJob(s,u)}createJob(e,u){let r=typeof e.jobId<"u",a=Object.assign({},e),s=r?a.jobId:DH.v4();a.jobId&&delete a.jobId,a.jobPrefix&&(s=a.jobPrefix+s,delete a.jobPrefix),a.jobReference={projectId:this.projectId,jobId:s,location:this.location},e.location&&(a.jobReference.location=e.location,delete a.location);let n=this.job(s,{location:a.jobReference.location});this.request({method:"POST",uri:"/jobs",json:a},async(l,d)=>{if(l)if(l.code===409&&!r)l=null,[d]=await n.getMetadata();else{u(l,null,d);return}d.status.errors&&(l=new WY.util.ApiError({errors:d.status.errors,response:d})),n.location=d.jobReference.location,n.metadata=d,u(l,n,d)})}dataset(e,u){if(typeof e!="string")throw new TypeError("A dataset ID is required.");return this.location&&(u=Ur({location:this.location},u)),new wH.Dataset(this,e,u)}getDatasets(e,u){let r=typeof e=="object"?e:{},a=typeof e=="function"?e:u;this.request({uri:"/datasets",qs:r},(s,n)=>{if(s){a(s,null,null,n);return}let l=null;n.nextPageToken&&(l=Object.assign({},r,{pageToken:n.nextPageToken}));let d=(n.datasets||[]).map(p=>{let h=this.dataset(p.datasetReference.datasetId,{location:p.location});return h.metadata=p,h});a(null,d,l,n)})}getJobs(e,u){let r=typeof e=="object"?e:{},a=typeof e=="function"?e:u;this.request({uri:"/jobs",qs:r,useQuerystring:!0},(s,n)=>{if(s){a(s,null,null,n);return}let l=null;n.nextPageToken&&(l=Object.assign({},r,{pageToken:n.nextPageToken}));let d=(n.jobs||[]).map(p=>{let h=this.job(p.jobReference.jobId,{location:p.jobReference.location});return h.metadata=p,h});a(null,d,l,n)})}job(e,u){return this.location&&(u=Ur({location:this.location},u)),new UH.Job(this,e,u)}query(e,u,r){let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r;this.createQueryJob(e,(n,l,d)=>{if(n){s(n,null,d);return}if(typeof e=="object"&&e.dryRun){s(null,[],d);return}a=Ur({job:l},a),l.getQueryResults(a,s)})}queryAsStream_(e,u,r){let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r;if(a=e.job?Ur(e,a):Ur(a,{autoPaginate:!1}),e.job){e.job.getQueryResults(a,s);return}this.query(e,a,s)}};c(C0,"BigQuery");var Pr=C0;Re.BigQuery=Pr;Nd.paginator.extend(Pr,["getDatasets","getJobs"]);vH.promisifyAll(Pr,{exclude:["dataset","date","datetime","geography","int","job","time","timestamp"]});var Y4=class Y4{constructor(e){typeof e=="object"&&(e=Pr.datetime(e).value),this.value=e}};c(Y4,"BigQueryDate");var S1=Y4;Re.BigQueryDate=S1;var R4=class R4{constructor(e){this.value=e}};c(R4,"Geography");var O1=R4;Re.Geography=O1;var g4=class g4{constructor(e){this.value=new Date(e).toJSON()}};c(g4,"BigQueryTimestamp");var L1=g4;Re.BigQueryTimestamp=L1;var y4=class y4{constructor(e){if(typeof e=="object"){let u;e.hours&&(u=Pr.time(e).value);let r=e.year,a=e.month,s=e.day;u=u?" "+u:"",e=`${r}-${a}-${s}${u}`}else e=e.replace(/^(.*)T(.*)Z$/,"$1 $2");this.value=e}};c(y4,"BigQueryDatetime");var E1=y4;Re.BigQueryDatetime=E1;var N4=class N4{constructor(e){if(typeof e=="object"){let u=e.hours,r=e.minutes||0,a=e.seconds||0,s=au.defined(e.fractional)?"."+e.fractional:"";e=`${u}:${r}:${a}${s}`}this.value=e}};c(N4,"BigQueryTime");var m1=N4;Re.BigQueryTime=m1;var C4=class C4 extends Number{constructor(e,u){if(super(typeof e=="object"?e.integerValue:e),this._schemaFieldName=typeof e=="object"?e.schemaFieldName:void 0,this.value=typeof e=="object"?e.integerValue.toString():e.toString(),this.type="BigQueryInt",u){if(typeof u.integerTypeCastFunction!="function")throw new Error("integerTypeCastFunction is not a function or was not provided.");let r=u.fields?jY(u.fields):void 0,a=!0;r&&(a=this._schemaFieldName?!!r.includes(this._schemaFieldName):!1),a&&(this.typeCastFunction=u.integerTypeCastFunction)}}valueOf(){if(!!this.typeCastFunction)try{return this.typeCastFunction(this.value)}catch(u){throw u.message=`integerTypeCastFunction threw an error: + + - ${u.message}`,u}else return Pr.decodeIntegerValue_({integerValue:this.value,schemaFieldName:this._schemaFieldName})}toJSON(){return{type:this.type,value:this.value}}};c(C4,"BigQueryInt");var B1=C4;Re.BigQueryInt=B1});var Md=v(su=>{"use strict";Object.defineProperty(su,"__esModule",{value:!0});var kr=_4();Object.defineProperty(su,"BigQuery",{enumerable:!0,get:function(){return kr.BigQuery}});Object.defineProperty(su,"BigQueryDate",{enumerable:!0,get:function(){return kr.BigQueryDate}});Object.defineProperty(su,"BigQueryDatetime",{enumerable:!0,get:function(){return kr.BigQueryDatetime}});Object.defineProperty(su,"BigQueryInt",{enumerable:!0,get:function(){return kr.BigQueryInt}});Object.defineProperty(su,"BigQueryTime",{enumerable:!0,get:function(){return kr.BigQueryTime}});Object.defineProperty(su,"BigQueryTimestamp",{enumerable:!0,get:function(){return kr.BigQueryTimestamp}});Object.defineProperty(su,"Geography",{enumerable:!0,get:function(){return kr.Geography}});Object.defineProperty(su,"PROTOCOL_REGEX",{enumerable:!0,get:function(){return kr.PROTOCOL_REGEX}});var kH=B4();Object.defineProperty(su,"Dataset",{enumerable:!0,get:function(){return kH.Dataset}});var FH=T4();Object.defineProperty(su,"Job",{enumerable:!0,get:function(){return FH.Job}});var HH=O4();Object.defineProperty(su,"Model",{enumerable:!0,get:function(){return HH.Model}});var VH=E4();Object.defineProperty(su,"Routine",{enumerable:!0,get:function(){return VH.Routine}});var GH=Bd();Object.defineProperty(su,"Table",{enumerable:!0,get:function(){return GH.Table}})});var I4=v((gz,XY)=>{"use strict";var{BigQuery:qH}=Md(),M1=null,KH=c(i=>{if(M1)return M1;let e=i.projectId,u=i.keyFilename,r=i.location;return M1=new qH({keyFilename:u,location:r,projectId:e,scopes:["https://www.googleapis.com/auth/bigquery","https://www.googleapis.com/auth/drive"]}),M1},"connect"),WH=c(()=>{M1=null},"disconnect");XY.exports={connect:KH,disconnect:WH}});var JY=v((Nz,QY)=>{"use strict";var jH=c((i,e)=>{let u=c(async()=>{let[M]=await i.getDatasets();return M},"getDatasets"),r=c(async(M,T)=>{try{return await i.query({query:`SELECT * + FROM ${M}.${T}.INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU + INNER JOIN ${M}.${T}.INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC + USING(constraint_name) + WHERE TC.constraint_type = "PRIMARY KEY";`})}catch(L){return e.warn("Error while getting table constraints",L),[]}},"getPrimaryKeyConstraintsData"),a=c(async(M,T)=>{try{return await i.query({query:`SELECT + CCU.column_name as \`parent_column\`, + KCU.column_name as \`child_column\`, + TC.constraint_catalog, + TC.constraint_name, + TC.constraint_schema, + TC.constraint_type, + TC.table_catalog, + CCU.table_schema as \`parent_schema\`, + KCU.table_schema as \`child_schema\`, + CCU.table_name as \`parent_table\`, + KCU.table_name as \`child_table\` + FROM (${M}.${T}.INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS CCU + INNER JOIN ${M}.${T}.INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU + USING(constraint_name)) + INNER JOIN ${M}.${T}.INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC + USING(constraint_name) + WHERE TC.constraint_type = "FOREIGN KEY";`})}catch(L){return e.warn("Error while getting table constraints",L),[]}},"getForeignKeyConstraintsData"),s=c(async(M,T)=>{let L=(await r(M,T)).flat(),I=(await a(M,T)).flat();return{primaryKeyConstraintsData:L,foreignKeyConstraintsData:I}},"getConstraintsData"),n=c(async M=>{let[T]=await i.dataset(M).getTables();return T||[]},"getTables"),l=c(()=>new Promise((M,T)=>{i.request({uri:"https://bigquery.googleapis.com/bigquery/v2/projects"},(L,I)=>{if(L)return T(L);M(I.projects||[])})}),"getProjectList"),d=c(async()=>{let M=await i.getProjectId(),L=(await l()).find(I=>I.id===M);return L||{id:M}},"getProjectInfo"),p=c(async M=>{let[T]=await i.dataset(M).get();return T},"getDataset"),h=c(async(M,T,L)=>{let I=await f(T,M,L),N={integerTypeCastFunction(D){return Number(D)}};if(T.metadata.type!=="EXTERNAL")return T.getRows({wrapIntegers:N,maxResults:I});try{return await T.query({query:`SELECT * FROM ${M} LIMIT ${I};`,wrapIntegers:N})}catch(D){return e.warn(`There is an issue during getting data from external table ${M}. Error: ${D.message}`,D),[[]]}},"getRows"),f=c(async(M,T,L)=>{if(L.active==="absolute")return Number(L.absolute.value);let I=await m(M,T);return S(I,L)},"getLimit"),S=c((M,T)=>{let L=Math.ceil(M*T.relative.value/100);return Math.min(L,T.maxValue)},"getSampleDocSize"),m=c(async(M,T)=>{var L;try{let[I]=await M.query({query:`SELECT COUNT(*) AS rows_count FROM ${T}`});return((L=I[0])==null?void 0:L.rows_count)||1e3}catch(I){return e.warn("Error while getting rows count, using default value: 1000",I),1e3}},"getTableRowsCount");return{getDatasets:u,getTables:n,getProjectInfo:d,getDataset:p,getRows:h,getTableRowsCount:m,getConstraintsData:s,getViewName:c(M=>`${M} (v)`,"getViewName")}},"createBigQueryHelper");QY.exports=jH});var uR=v((Iz,eR)=>{"use strict";var XH=c((i,e)=>({properties:$Y(i.fields||[],e)}),"createJsonSchema"),$Y=c((i,e)=>i.reduce((u,r)=>({...u,[r.name]:ZY(r,zY(r.name,e))}),{}),"getProperties"),zY=c((i,e=[])=>e.map(u=>u[i]).filter(Boolean),"getValues"),ZY=c((i,e)=>{let u=JH(i.type),r=QH(i.mode),a=$H(u,e),s=i.description,n=i.precision,l=i.scale,d=i.maxLength;if(i.mode==="REPEATED")return{type:"array",items:ZY({...i,mode:"REQUIRED"},zY(0,e))};if(Array.isArray(i.fields)){let p=$Y(i.fields,e);return{type:u,description:s,properties:p,dataTypeMode:r,subtype:a}}return{type:u,description:s,dataTypeMode:r,precision:n,scale:l,length:d,subtype:a}},"convertField"),QH=c(i=>{switch(i){case"REQUIRED":return"Required";case"REPEATED":return"Repeated";default:return"Nullable"}},"getTypeMode"),JH=c(i=>{switch(i){case"RECORD":return"struct";case"GEOGRAPHY":return"geography";case"TIME":return"time";case"DATETIME":return"datetime";case"DATE":return"date";case"TIMESTAMP":return"timestamp";case"BOOLEAN":return"bool";case"BIGNUMERIC":return"bignumeric";case"NUMERIC":return"numeric";case"FLOAT":return"float64";case"INTEGER":return"int64";case"BYTES":return"bytes";case"JSON":return"json";case"STRING":default:return"string"}},"getType"),$H=c((i,e)=>{if(i!=="json")return;let u=zH(e)||e[0];return eV(ZH(u))},"getSubtype"),zH=c(i=>i.find(e=>{if(typeof e!="string")return!1;try{return JSON.parse(e)}catch{return!1}}),"findJsonValue"),ZH=c(i=>{try{return JSON.parse(i)}catch{return i}},"safeParse"),eV=c(i=>{if(Array.isArray(i))return"array";let e=typeof i;return e==="undefined"?"object":e},"getParsedJsonValueType");eR.exports={createJsonSchema:XH}});var rR=v((xz,tR)=>{"use strict";var uV=c((i,e)=>({isConstraintComposed:u,constraintType:r})=>r!=="PRIMARY KEY"?i:u?{...i,compositePrimaryKey:!0,primaryKey:!0}:{...i,primaryKey:!0},"primaryKeyConstraintIntoPropertyInjector"),tV=[uV],rV=c(({datasetId:i,tableName:e,properties:u,constraintsData:r})=>{let a=[];return{propertiesWithInjectedConstraints:Object.fromEntries(Object.entries(u).map(([n,l])=>{let d=r.find(({table_schema:O,table_name:M,column_name:T})=>O===i&&M===e&&T===n);if(!d)return[n,l];let p=iV(r),h=d.constraint_name,f=d.constraint_type,S=p[h].length>1;f==="PRIMARY KEY"&&S&&(a=aV({primaryKey:a,constraintName:h,propertyName:n}));let m=tV.reduce((O,M)=>M(O,d)({isConstraintComposed:S,constraintType:f}),l);return[n,m]})),primaryKey:a.map(n=>({compositePrimaryKey:n.compositePrimaryKey}))}},"injectPrimaryKeyConstraintsIntoTable"),iV=c(i=>{let e=Array.from(new Set(i.map(({constraint_name:r})=>r))),u={};return e.forEach(r=>{u={...u,[r]:i.filter(({constraint_name:a})=>a===r)}}),u},"groupPropertiesByConstraints"),aV=c(({primaryKey:i,constraintName:e,propertyName:u})=>{let r=i.find(({name:a})=>a===e);if(r){let a=i.filter(({name:n})=>n!==e),s={...r,compositePrimaryKey:[...r.compositePrimaryKey,u]};return[...a,s]}else return[...i,{name:e,compositePrimaryKey:[{name:u}]}]},"getCompositePrimaryKeyFieldModelData"),sV=c(i=>{let[e,u]=i.split(".");return u},"getConstraintBusinessName"),nV=c(i=>i.reduce((e,u)=>{let r=sV(u.constraint_name),a=e.find(({relationshipName:l})=>l===r),{parent_column:s,child_column:n}=u;if(a){let l=a.parentField.includes(s),d=a.childField.includes(n),p={...a,childField:d?a.childField:[...a.childField,n],parentField:l?a.parentField:[...a.parentField,s]};return[...e.filter(({relationshipName:h})=>h!==r),p]}else{let l={relationshipName:r,relationshipType:"Foreign Key",childDbName:u.child_schema,childCollection:u.child_table,childField:[u.child_column],dbName:u.parent_schema,parentCollection:u.parent_table,parentField:[u.parent_column],relationshipInfo:{}};return[...e,l]}},[]),"reverseForeignKeys");tR.exports={injectPrimaryKeyConstraintsIntoTable:rV,reverseForeignKeys:nV}});var nu=v((Dz,nR)=>{function iR(i){return Array.isArray(i)?"["+i.join(", ")+"]":"null"}c(iR,"arrayToString");String.prototype.seed=String.prototype.seed||Math.round(Math.random()*Math.pow(2,32));String.prototype.hashCode=function(){let i=this.toString(),e,u,r=i.length&3,a=i.length-r,s=String.prototype.seed,n=3432918353,l=461845907,d=0;for(;d>>16)*n&65535)<<16)&4294967295,u=u<<15|u>>>17,u=(u&65535)*l+(((u>>>16)*l&65535)<<16)&4294967295,s^=u,s=s<<13|s>>>19,e=(s&65535)*5+(((s>>>16)*5&65535)<<16)&4294967295,s=(e&65535)+27492+(((e>>>16)+58964&65535)<<16);switch(u=0,r){case 3:u^=(i.charCodeAt(d+2)&255)<<16;case 2:u^=(i.charCodeAt(d+1)&255)<<8;case 1:u^=i.charCodeAt(d)&255,u=(u&65535)*n+(((u>>>16)*n&65535)<<16)&4294967295,u=u<<15|u>>>17,u=(u&65535)*l+(((u>>>16)*l&65535)<<16)&4294967295,s^=u}return s^=i.length,s^=s>>>16,s=(s&65535)*2246822507+(((s>>>16)*2246822507&65535)<<16)&4294967295,s^=s>>>13,s=(s&65535)*3266489909+(((s>>>16)*3266489909&65535)<<16)&4294967295,s^=s>>>16,s>>>0};function aR(i,e){return i?i.equals(e):i==e}c(aR,"standardEqualsFunction");function sR(i){return i?i.hashCode():-1}c(sR,"standardHashCodeFunction");var w4=class w4{constructor(e,u){this.data={},this.hashFunction=e||sR,this.equalsFunction=u||aR}add(e){let r="hash_"+this.hashFunction(e);if(r in this.data){let a=this.data[r];for(let s=0;s>>17,r=r*461845907,this.count=this.count+1;let a=this.hash^r;a=a<<13|a>>>19,a=a*5+3864292196,this.hash=a}}}finish(){let e=this.hash^this.count*4;return e=e^e>>>16,e=e*2246822507,e=e^e>>>13,e=e*3266489909,e=e^e>>>16,e}};c(F4,"Hash");var T1=F4;function oV(){let i=new T1;return i.update.apply(i,arguments),i.finish()}c(oV,"hashStuff");function lV(i,e){return i=i.replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r"),e&&(i=i.replace(/ /g,"\xB7")),i}c(lV,"escapeWhitespace");function cV(i){return i.replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1)})}c(cV,"titleCase");function dV(i,e){if(!Array.isArray(i)||!Array.isArray(e))return!1;if(i===e)return!0;if(i.length!==e.length)return!1;for(let u=0;u{var H4=class H4{constructor(){this.source=null,this.type=null,this.channel=null,this.start=null,this.stop=null,this.tokenIndex=null,this.line=null,this.column=null,this._text=null}getTokenSource(){return this.source[0]}getInputStream(){return this.source[1]}get text(){return this._text}set text(e){this._text=e}};c(H4,"Token");var ut=H4;ut.INVALID_TYPE=0;ut.EPSILON=-2;ut.MIN_USER_TOKEN_TYPE=1;ut.EOF=-1;ut.DEFAULT_CHANNEL=0;ut.HIDDEN_CHANNEL=1;var _1=class _1 extends ut{constructor(e,u,r,a,s){super(),this.source=e!==void 0?e:_1.EMPTY_SOURCE,this.type=u!==void 0?u:null,this.channel=r!==void 0?r:ut.DEFAULT_CHANNEL,this.start=a!==void 0?a:-1,this.stop=s!==void 0?s:-1,this.tokenIndex=-1,this.source[0]!==null?(this.line=e[0].line,this.column=e[0].column):this.column=-1}clone(){let e=new _1(this.source,this.type,this.channel,this.start,this.stop);return e.tokenIndex=this.tokenIndex,e.line=this.line,e.column=this.column,e.text=this.text,e}toString(){let e=this.text;return e!==null?e=e.replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t"):e="","[@"+this.tokenIndex+","+this.start+":"+this.stop+"='"+e+"',<"+this.type+">"+(this.channel>0?",channel="+this.channel:"")+","+this.line+":"+this.column+"]"}get text(){if(this._text!==null)return this._text;let e=this.getInputStream();if(e===null)return null;let u=e.size;return this.start"}set text(e){this._text=e}};c(_1,"CommonToken");var bd=_1;bd.EMPTY_SOURCE=[null,null];oR.exports={Token:ut,CommonToken:bd}});var Wt=v((kz,lR)=>{var A1=class A1{constructor(){this.atn=null,this.stateNumber=A1.INVALID_STATE_NUMBER,this.stateType=null,this.ruleIndex=0,this.epsilonOnlyTransitions=!1,this.transitions=[],this.nextTokenWithinRule=null}toString(){return this.stateNumber}equals(e){return e instanceof A1?this.stateNumber===e.stateNumber:!1}isNonGreedyExitState(){return!1}addTransition(e,u){u===void 0&&(u=-1),this.transitions.length===0?this.epsilonOnlyTransitions=e.isEpsilon:this.epsilonOnlyTransitions!==e.isEpsilon&&(this.epsilonOnlyTransitions=!1),u===-1?this.transitions.push(e):this.transitions.splice(u,1,e)}};c(A1,"ATNState");var D0=A1;D0.INVALID_TYPE=0;D0.BASIC=1;D0.RULE_START=2;D0.BLOCK_START=3;D0.PLUS_BLOCK_START=4;D0.STAR_BLOCK_START=5;D0.TOKEN_START=6;D0.RULE_STOP=7;D0.BLOCK_END=8;D0.STAR_LOOP_BACK=9;D0.STAR_LOOP_ENTRY=10;D0.PLUS_LOOP_BACK=11;D0.LOOP_END=12;D0.serializationNames=["INVALID","BASIC","RULE_START","BLOCK_START","PLUS_BLOCK_START","STAR_BLOCK_START","TOKEN_START","RULE_STOP","BLOCK_END","STAR_LOOP_BACK","STAR_LOOP_ENTRY","PLUS_LOOP_BACK","LOOP_END"];D0.INVALID_STATE_NUMBER=-1;var e6=class e6 extends D0{constructor(){super(),this.stateType=D0.BASIC}};c(e6,"BasicState");var V4=e6,u6=class u6 extends D0{constructor(){return super(),this.decision=-1,this.nonGreedy=!1,this}};c(u6,"DecisionState");var Yi=u6,t6=class t6 extends Yi{constructor(){return super(),this.endState=null,this}};c(t6,"BlockStartState");var $a=t6,r6=class r6 extends $a{constructor(){return super(),this.stateType=D0.BLOCK_START,this}};c(r6,"BasicBlockStartState");var G4=r6,i6=class i6 extends D0{constructor(){return super(),this.stateType=D0.BLOCK_END,this.startState=null,this}};c(i6,"BlockEndState");var q4=i6,a6=class a6 extends D0{constructor(){return super(),this.stateType=D0.RULE_STOP,this}};c(a6,"RuleStopState");var K4=a6,s6=class s6 extends D0{constructor(){return super(),this.stateType=D0.RULE_START,this.stopState=null,this.isPrecedenceRule=!1,this}};c(s6,"RuleStartState");var W4=s6,n6=class n6 extends Yi{constructor(){return super(),this.stateType=D0.PLUS_LOOP_BACK,this}};c(n6,"PlusLoopbackState");var j4=n6,o6=class o6 extends $a{constructor(){return super(),this.stateType=D0.PLUS_BLOCK_START,this.loopBackState=null,this}};c(o6,"PlusBlockStartState");var X4=o6,l6=class l6 extends $a{constructor(){return super(),this.stateType=D0.STAR_BLOCK_START,this}};c(l6,"StarBlockStartState");var Q4=l6,c6=class c6 extends D0{constructor(){return super(),this.stateType=D0.STAR_LOOP_BACK,this}};c(c6,"StarLoopbackState");var J4=c6,d6=class d6 extends Yi{constructor(){return super(),this.stateType=D0.STAR_LOOP_ENTRY,this.loopBackState=null,this.isPrecedenceDecision=null,this}};c(d6,"StarLoopEntryState");var $4=d6,p6=class p6 extends D0{constructor(){return super(),this.stateType=D0.LOOP_END,this.loopBackState=null,this}};c(p6,"LoopEndState");var z4=p6,h6=class h6 extends Yi{constructor(){return super(),this.stateType=D0.TOKEN_START,this}};c(h6,"TokensStartState");var Z4=h6;lR.exports={ATNState:D0,BasicState:V4,DecisionState:Yi,BlockStartState:$a,BlockEndState:q4,LoopEndState:z4,RuleStartState:W4,RuleStopState:K4,TokensStartState:Z4,PlusLoopbackState:j4,StarLoopbackState:J4,StarLoopEntryState:$4,PlusBlockStartState:X4,StarBlockStartState:Q4,BasicBlockStartState:G4}});var es=v((Hz,pR)=>{var{Set:cR,Hash:pV,equalArrays:dR}=nu(),Fr=class Fr{hashCode(){let e=new pV;return this.updateHashCode(e),e.finish()}evaluate(e,u){}evalPrecedence(e,u){return this}static andContext(e,u){if(e===null||e===Fr.NONE)return u;if(u===null||u===Fr.NONE)return e;let r=new f6(e,u);return r.opnds.length===1?r.opnds[0]:r}static orContext(e,u){if(e===null)return u;if(u===null)return e;if(e===Fr.NONE||u===Fr.NONE)return Fr.NONE;let r=new S6(e,u);return r.opnds.length===1?r.opnds[0]:r}};c(Fr,"SemanticContext");var ou=Fr,vd=class vd extends ou{constructor(e,u,r){super(),this.ruleIndex=e===void 0?-1:e,this.predIndex=u===void 0?-1:u,this.isCtxDependent=r===void 0?!1:r}evaluate(e,u){let r=this.isCtxDependent?u:null;return e.sempred(r,this.ruleIndex,this.predIndex)}updateHashCode(e){e.update(this.ruleIndex,this.predIndex,this.isCtxDependent)}equals(e){return this===e?!0:e instanceof vd?this.ruleIndex===e.ruleIndex&&this.predIndex===e.predIndex&&this.isCtxDependent===e.isCtxDependent:!1}toString(){return"{"+this.ruleIndex+":"+this.predIndex+"}?"}};c(vd,"Predicate");var xd=vd;ou.NONE=new xd;var Y1=class Y1 extends ou{constructor(e){super(),this.precedence=e===void 0?0:e}evaluate(e,u){return e.precpred(u,this.precedence)}evalPrecedence(e,u){return e.precpred(u,this.precedence)?ou.NONE:null}compareTo(e){return this.precedence-e.precedence}updateHashCode(e){e.update(this.precedence)}equals(e){return this===e?!0:e instanceof Y1?this.precedence===e.precedence:!1}toString(){return"{"+this.precedence+">=prec}?"}static filterPrecedencePredicates(e){let u=[];return e.values().map(function(r){r instanceof Y1&&u.push(r)}),u}};c(Y1,"PrecedencePredicate");var R1=Y1,za=class za extends ou{constructor(e,u){super();let r=new cR;e instanceof za?e.opnds.map(function(s){r.add(s)}):r.add(e),u instanceof za?u.opnds.map(function(s){r.add(s)}):r.add(u);let a=R1.filterPrecedencePredicates(r);if(a.length>0){let s=null;a.map(function(n){(s===null||n.precedenceu.toString());return(e.length>3?e.slice(3):e).join("&&")}};c(za,"AND");var f6=za,Za=class Za extends ou{constructor(e,u){super();let r=new cR;e instanceof Za?e.opnds.map(function(s){r.add(s)}):r.add(e),u instanceof Za?u.opnds.map(function(s){r.add(s)}):r.add(u);let a=R1.filterPrecedencePredicates(r);if(a.length>0){let s=a.sort(function(l,d){return l.compareTo(d)}),n=s[s.length-1];r.add(n)}this.opnds=Array.from(r.values())}equals(e){return this===e?!0:e instanceof Za?dR(this.opnds,e.opnds):!1}updateHashCode(e){e.update(this.opnds,"OR")}evaluate(e,u){for(let r=0;ru.toString());return(e.length>3?e.slice(3):e).join("||")}};c(Za,"OR");var S6=Za;pR.exports={SemanticContext:ou,PrecedencePredicate:R1,Predicate:xd}});var y1=v((Gz,L6)=>{var{DecisionState:hV}=Wt(),{SemanticContext:hR}=es(),{Hash:fR}=nu();function SR(i,e){if(i===null){let u={state:null,alt:null,context:null,semanticContext:null};return e&&(u.reachesIntoOuterContext=0),u}else{let u={};return u.state=i.state||null,u.alt=i.alt===void 0?null:i.alt,u.context=i.context||null,u.semanticContext=i.semanticContext||null,e&&(u.reachesIntoOuterContext=i.reachesIntoOuterContext||0,u.precedenceFilterSuppressed=i.precedenceFilterSuppressed||!1),u}}c(SR,"checkParams");var g1=class g1{constructor(e,u){this.checkContext(e,u),e=SR(e),u=SR(u,!0),this.state=e.state!==null?e.state:u.state,this.alt=e.alt!==null?e.alt:u.alt,this.context=e.context!==null?e.context:u.context,this.semanticContext=e.semanticContext!==null?e.semanticContext:u.semanticContext!==null?u.semanticContext:hR.NONE,this.reachesIntoOuterContext=u.reachesIntoOuterContext,this.precedenceFilterSuppressed=u.precedenceFilterSuppressed}checkContext(e,u){(e.context===null||e.context===void 0)&&(u===null||u.context===null||u.context===void 0)&&(this.context=null)}hashCode(){let e=new fR;return this.updateHashCode(e),e.finish()}updateHashCode(e){e.update(this.state.stateNumber,this.alt,this.context,this.semanticContext)}equals(e){return this===e?!0:e instanceof g1?this.state.stateNumber===e.state.stateNumber&&this.alt===e.alt&&(this.context===null?e.context===null:this.context.equals(e.context))&&this.semanticContext.equals(e.semanticContext)&&this.precedenceFilterSuppressed===e.precedenceFilterSuppressed:!1}hashCodeForConfigSet(){let e=new fR;return e.update(this.state.stateNumber,this.alt,this.semanticContext),e.finish()}equalsForConfigSet(e){return this===e?!0:e instanceof g1?this.state.stateNumber===e.state.stateNumber&&this.alt===e.alt&&this.semanticContext.equals(e.semanticContext):!1}toString(){return"("+this.state+","+this.alt+(this.context!==null?",["+this.context.toString()+"]":"")+(this.semanticContext!==hR.NONE?","+this.semanticContext.toString():"")+(this.reachesIntoOuterContext>0?",up="+this.reachesIntoOuterContext:"")+")"}};c(g1,"ATNConfig");var Dd=g1,us=class us extends Dd{constructor(e,u){super(e,u);let r=e.lexerActionExecutor||null;return this.lexerActionExecutor=r||(u!==null?u.lexerActionExecutor:null),this.passedThroughNonGreedyDecision=u!==null?this.checkNonGreedyDecision(u,this.state):!1,this.hashCodeForConfigSet=us.prototype.hashCode,this.equalsForConfigSet=us.prototype.equals,this}updateHashCode(e){e.update(this.state.stateNumber,this.alt,this.context,this.semanticContext,this.passedThroughNonGreedyDecision,this.lexerActionExecutor)}equals(e){return this===e||e instanceof us&&this.passedThroughNonGreedyDecision===e.passedThroughNonGreedyDecision&&(this.lexerActionExecutor?this.lexerActionExecutor.equals(e.lexerActionExecutor):!e.lexerActionExecutor)&&super.equals(e)}checkNonGreedyDecision(e,u){return e.passedThroughNonGreedyDecision||u instanceof hV&&u.nonGreedy}};c(us,"LexerATNConfig");var O6=us;L6.exports.ATNConfig=Dd;L6.exports.LexerATNConfig=O6});var Ou=v((Kz,OR)=>{var{Token:N1}=Te(),m6=class m6{constructor(e,u){this.start=e,this.stop=u}contains(e){return e>=this.start&&ethis.addInterval(u),this),this}reduce(e){if(e=r.stop?(this.intervals.splice(e+1,1),this.reduce(e)):u.stop>=r.start&&(this.intervals[e]=new lu(u.start,r.stop),this.intervals.splice(e+1,1))}}complement(e,u){let r=new wd;return r.addInterval(new lu(e,u+1)),this.intervals!==null&&this.intervals.forEach(a=>r.removeRange(a)),r}contains(e){if(this.intervals===null)return!1;for(let u=0;ua.start&&e.stop=a.stop?(this.intervals.splice(u,1),u=u-1):e.start"):e.push("'"+String.fromCharCode(r.start)+"'"):e.push("'"+String.fromCharCode(r.start)+"'..'"+String.fromCharCode(r.stop-1)+"'")}return e.length>1?"{"+e.join(", ")+"}":e[0]}toIndexString(){let e=[];for(let u=0;u"):e.push(r.start.toString()):e.push(r.start.toString()+".."+(r.stop-1).toString())}return e.length>1?"{"+e.join(", ")+"}":e[0]}toTokenString(e,u){let r=[];for(let a=0;a1?"{"+r.join(", ")+"}":r[0]}elementName(e,u,r){return r===N1.EOF?"":r===N1.EPSILON?"":e[r]||u[r]}get length(){return this.intervals.map(e=>e.length).reduce((e,u)=>e+u)}};c(wd,"IntervalSet");var E6=wd;OR.exports={Interval:lu,IntervalSet:E6}});var ts=v((jz,LR)=>{var{Token:fV}=Te(),{IntervalSet:N6}=Ou(),{Predicate:SV,PrecedencePredicate:OV}=es(),C6=class C6{constructor(e){if(e==null)throw"target cannot be null.";this.target=e,this.isEpsilon=!1,this.label=null}};c(C6,"Transition");var Y0=C6;Y0.EPSILON=1;Y0.RANGE=2;Y0.RULE=3;Y0.PREDICATE=4;Y0.ATOM=5;Y0.ACTION=6;Y0.SET=7;Y0.NOT_SET=8;Y0.WILDCARD=9;Y0.PRECEDENCE=10;Y0.serializationNames=["INVALID","EPSILON","RANGE","RULE","PREDICATE","ATOM","ACTION","SET","NOT_SET","WILDCARD","PRECEDENCE"];Y0.serializationTypes={EpsilonTransition:Y0.EPSILON,RangeTransition:Y0.RANGE,RuleTransition:Y0.RULE,PredicateTransition:Y0.PREDICATE,AtomTransition:Y0.ATOM,ActionTransition:Y0.ACTION,SetTransition:Y0.SET,NotSetTransition:Y0.NOT_SET,WildcardTransition:Y0.WILDCARD,PrecedencePredicateTransition:Y0.PRECEDENCE};var I6=class I6 extends Y0{constructor(e,u){super(e),this.label_=u,this.label=this.makeLabel(),this.serializationType=Y0.ATOM}makeLabel(){let e=new N6;return e.addOne(this.label_),e}matches(e,u,r){return this.label_===e}toString(){return this.label_}};c(I6,"AtomTransition");var B6=I6,b6=class b6 extends Y0{constructor(e,u,r,a){super(e),this.ruleIndex=u,this.precedence=r,this.followState=a,this.serializationType=Y0.RULE,this.isEpsilon=!0}matches(e,u,r){return!1}};c(b6,"RuleTransition");var M6=b6,x6=class x6 extends Y0{constructor(e,u){super(e),this.serializationType=Y0.EPSILON,this.isEpsilon=!0,this.outermostPrecedenceReturn=u}matches(e,u,r){return!1}toString(){return"epsilon"}};c(x6,"EpsilonTransition");var T6=x6,v6=class v6 extends Y0{constructor(e,u,r){super(e),this.serializationType=Y0.RANGE,this.start=u,this.stop=r,this.label=this.makeLabel()}makeLabel(){let e=new N6;return e.addRange(this.start,this.stop),e}matches(e,u,r){return e>=this.start&&e<=this.stop}toString(){return"'"+String.fromCharCode(this.start)+"'..'"+String.fromCharCode(this.stop)+"'"}};c(v6,"RangeTransition");var _6=v6,D6=class D6 extends Y0{constructor(e){super(e)}};c(D6,"AbstractPredicateTransition");var C1=D6,w6=class w6 extends C1{constructor(e,u,r,a){super(e),this.serializationType=Y0.PREDICATE,this.ruleIndex=u,this.predIndex=r,this.isCtxDependent=a,this.isEpsilon=!0}matches(e,u,r){return!1}getPredicate(){return new SV(this.ruleIndex,this.predIndex,this.isCtxDependent)}toString(){return"pred_"+this.ruleIndex+":"+this.predIndex}};c(w6,"PredicateTransition");var A6=w6,U6=class U6 extends Y0{constructor(e,u,r,a){super(e),this.serializationType=Y0.ACTION,this.ruleIndex=u,this.actionIndex=r===void 0?-1:r,this.isCtxDependent=a===void 0?!1:a,this.isEpsilon=!0}matches(e,u,r){return!1}toString(){return"action_"+this.ruleIndex+":"+this.actionIndex}};c(U6,"ActionTransition");var Y6=U6,P6=class P6 extends Y0{constructor(e,u){super(e),this.serializationType=Y0.SET,u!=null?this.label=u:(this.label=new N6,this.label.addOne(fV.INVALID_TYPE))}matches(e,u,r){return this.label.contains(e)}toString(){return this.label.toString()}};c(P6,"SetTransition");var Ud=P6,k6=class k6 extends Ud{constructor(e,u){super(e,u),this.serializationType=Y0.NOT_SET}matches(e,u,r){return e>=u&&e<=r&&!super.matches(e,u,r)}toString(){return"~"+super.toString()}};c(k6,"NotSetTransition");var R6=k6,F6=class F6 extends Y0{constructor(e){super(e),this.serializationType=Y0.WILDCARD}matches(e,u,r){return e>=u&&e<=r}toString(){return"."}};c(F6,"WildcardTransition");var g6=F6,H6=class H6 extends C1{constructor(e,u){super(e),this.serializationType=Y0.PRECEDENCE,this.precedence=u,this.isEpsilon=!0}matches(e,u,r){return!1}getPredicate(){return new OV(this.precedence)}toString(){return this.precedence+" >= _p"}};c(H6,"PrecedencePredicateTransition");var y6=H6;LR.exports={Transition:Y0,AtomTransition:B6,SetTransition:Ud,NotSetTransition:R6,RuleTransition:M6,ActionTransition:Y6,EpsilonTransition:T6,RangeTransition:_6,WildcardTransition:g6,PredicateTransition:A6,PrecedencePredicateTransition:y6,AbstractPredicateTransition:C1}});var Ri=v((Qz,BR)=>{var{Token:LV}=Te(),{Interval:ER}=Ou(),mR=new ER(-1,-2),X6=class X6{};c(X6,"Tree");var V6=X6,Q6=class Q6 extends V6{constructor(){super()}};c(Q6,"SyntaxTree");var G6=Q6,J6=class J6 extends G6{constructor(){super()}};c(J6,"ParseTree");var Pd=J6,$6=class $6 extends Pd{constructor(){super()}getRuleContext(){throw new Error("missing interface implementation")}};c($6,"RuleNode");var q6=$6,z6=class z6 extends Pd{constructor(){super()}};c(z6,"TerminalNode");var rs=z6,Z6=class Z6 extends rs{constructor(){super()}};c(Z6,"ErrorNode");var kd=Z6,eS=class eS{visit(e){return Array.isArray(e)?e.map(function(u){return u.accept(this)},this):e.accept(this)}visitChildren(e){return e.children?this.visit(e.children):null}visitTerminal(e){}visitErrorNode(e){}};c(eS,"ParseTreeVisitor");var K6=eS,uS=class uS{visitTerminal(e){}visitErrorNode(e){}enterEveryRule(e){}exitEveryRule(e){}};c(uS,"ParseTreeListener");var W6=uS,tS=class tS extends rs{constructor(e){super(),this.parentCtx=null,this.symbol=e}getChild(e){return null}getSymbol(){return this.symbol}getParent(){return this.parentCtx}getPayload(){return this.symbol}getSourceInterval(){if(this.symbol===null)return mR;let e=this.symbol.tokenIndex;return new ER(e,e)}getChildCount(){return 0}accept(e){return e.visitTerminal(this)}getText(){return this.symbol.text}toString(){return this.symbol.type===LV.EOF?"":this.symbol.text}};c(tS,"TerminalNodeImpl");var Fd=tS,rS=class rS extends Fd{constructor(e){super(e)}isErrorNode(){return!0}accept(e){return e.visitErrorNode(this)}};c(rS,"ErrorNodeImpl");var j6=rS,iS=class iS{walk(e,u){if(u instanceof kd||u.isErrorNode!==void 0&&u.isErrorNode())e.visitErrorNode(u);else if(u instanceof rs)e.visitTerminal(u);else{this.enterRule(e,u);for(let a=0;a{var EV=nu(),{Token:mV}=Te(),{ErrorNode:BV,TerminalNode:MR,RuleNode:TR}=Ri(),jt={toStringTree:function(i,e,u){e=e||null,u=u||null,u!==null&&(e=u.ruleNames);let r=jt.getNodeText(i,e);r=EV.escapeWhitespace(r,!1);let a=i.getChildCount();if(a===0)return r;let s="("+r+" ";a>0&&(r=jt.toStringTree(i.getChild(0),e),s=s.concat(r));for(let n=1;n{var{RuleNode:MV}=Ri(),{INVALID_INTERVAL:TV}=Ri(),_V=aS(),nS=class nS extends MV{constructor(e,u){super(),this.parentCtx=e||null,this.invokingState=u||-1}depth(){let e=0,u=this;for(;u!==null;)u=u.parentCtx,e+=1;return e}isEmpty(){return this.invokingState===-1}getSourceInterval(){return TV}getRuleContext(){return this}getPayload(){return this}getText(){return this.getChildCount()===0?"":this.children.map(function(e){return e.getText()}).join("")}getAltNumber(){return 0}setAltNumber(e){}getChild(e){return null}getChildCount(){return 0}accept(e){return e.visitChildren(this)}toStringTree(e,u){return _V.toStringTree(this,e,u)}toString(e,u){e=e||null,u=u||null;let r=this,a="[";for(;r!==null&&r!==u;){if(e===null)r.isEmpty()||(a+=r.invokingState);else{let s=r.ruleIndex,n=s>=0&&s{var YR=Hd(),{Hash:gR,Map:yR,equalArrays:RR}=nu(),b1=class b1{constructor(e){this.cachedHashCode=e}isEmpty(){return this===b1.EMPTY}hasEmptyPath(){return this.getReturnState(this.length-1)===b1.EMPTY_RETURN_STATE}hashCode(){return this.cachedHashCode}updateHashCode(e){e.update(this.cachedHashCode)}};c(b1,"PredictionContext");var W0=b1;W0.EMPTY=null;W0.EMPTY_RETURN_STATE=2147483647;W0.globalNodeCount=1;W0.id=W0.globalNodeCount;var cS=class cS{constructor(){this.cache=new yR}add(e){if(e===W0.EMPTY)return W0.EMPTY;let u=this.cache.get(e)||null;return u!==null?u:(this.cache.put(e,e),e)}get(e){return this.cache.get(e)||null}get length(){return this.cache.length}};c(cS,"PredictionContextCache");var oS=cS,x1=class x1 extends W0{constructor(e,u){let r=0,a=new gR;e!==null?a.update(e,u):a.update(1),r=a.finish(),super(r),this.parentCtx=e,this.returnState=u}getParent(e){return this.parentCtx}getReturnState(e){return this.returnState}equals(e){return this===e?!0:e instanceof x1?this.hashCode()!==e.hashCode()||this.returnState!==e.returnState?!1:this.parentCtx==null?e.parentCtx==null:this.parentCtx.equals(e.parentCtx):!1}toString(){let e=this.parentCtx===null?"":this.parentCtx.toString();return e.length===0?this.returnState===W0.EMPTY_RETURN_STATE?"$":""+this.returnState:""+this.returnState+" "+e}get length(){return 1}static create(e,u){return u===W0.EMPTY_RETURN_STATE&&e===null?W0.EMPTY:new x1(e,u)}};c(x1,"SingletonPredictionContext");var Fu=x1,dS=class dS extends Fu{constructor(){super(null,W0.EMPTY_RETURN_STATE)}isEmpty(){return!0}getParent(e){return null}getReturnState(e){return this.returnState}equals(e){return this===e}toString(){return"$"}};c(dS,"EmptyPredictionContext");var v1=dS;W0.EMPTY=new v1;var Vd=class Vd extends W0{constructor(e,u){let r=new gR;r.update(e,u);let a=r.finish();return super(a),this.parents=e,this.returnStates=u,this}isEmpty(){return this.returnStates[0]===W0.EMPTY_RETURN_STATE}getParent(e){return this.parents[e]}getReturnState(e){return this.returnStates[e]}equals(e){return this===e?!0:e instanceof Vd?this.hashCode()!==e.hashCode()?!1:RR(this.returnStates,e.returnStates)&&RR(this.parents,e.parents):!1}toString(){if(this.isEmpty())return"[]";{let e="[";for(let u=0;u0&&(e=e+", "),this.returnStates[u]===W0.EMPTY_RETURN_STATE){e=e+"$";continue}e=e+this.returnStates[u],this.parents[u]!==null?e=e+" "+this.parents[u]:e=e+"null"}return e+"]"}}get length(){return this.returnStates.length}};c(Vd,"ArrayPredictionContext");var Rt=Vd;function NR(i,e){if(e==null&&(e=YR.EMPTY),e.parentCtx===null||e===YR.EMPTY)return W0.EMPTY;let u=NR(i,e.parentCtx),a=i.states[e.invokingState].transitions[0];return Fu.create(u,a.followState.stateNumber)}c(NR,"predictionContextFromRuleContext");function lS(i,e,u,r){if(i===e)return i;if(i instanceof Fu&&e instanceof Fu)return AV(i,e,u,r);if(u){if(i instanceof v1)return i;if(e instanceof v1)return e}return i instanceof Fu&&(i=new Rt([i.getParent()],[i.returnState])),e instanceof Fu&&(e=new Rt([e.getParent()],[e.returnState])),RV(i,e,u,r)}c(lS,"merge");function AV(i,e,u,r){if(r!==null){let s=r.get(i,e);if(s!==null||(s=r.get(e,i),s!==null))return s}let a=YV(i,e,u);if(a!==null)return r!==null&&r.set(i,e,a),a;if(i.returnState===e.returnState){let s=lS(i.parentCtx,e.parentCtx,u,r);if(s===i.parentCtx)return i;if(s===e.parentCtx)return e;let n=Fu.create(s,i.returnState);return r!==null&&r.set(i,e,n),n}else{let s=null;if((i===e||i.parentCtx!==null&&i.parentCtx===e.parentCtx)&&(s=i.parentCtx),s!==null){let p=[i.returnState,e.returnState];i.returnState>e.returnState&&(p[0]=e.returnState,p[1]=i.returnState);let h=[s,s],f=new Rt(h,p);return r!==null&&r.set(i,e,f),f}let n=[i.returnState,e.returnState],l=[i.parentCtx,e.parentCtx];i.returnState>e.returnState&&(n[0]=e.returnState,n[1]=i.returnState,l=[e.parentCtx,i.parentCtx]);let d=new Rt(l,n);return r!==null&&r.set(i,e,d),d}}c(AV,"mergeSingletons");function YV(i,e,u){if(u){if(i===W0.EMPTY||e===W0.EMPTY)return W0.EMPTY}else{if(i===W0.EMPTY&&e===W0.EMPTY)return W0.EMPTY;if(i===W0.EMPTY){let r=[e.returnState,W0.EMPTY_RETURN_STATE],a=[e.parentCtx,null];return new Rt(a,r)}else if(e===W0.EMPTY){let r=[i.returnState,W0.EMPTY_RETURN_STATE],a=[i.parentCtx,null];return new Rt(a,r)}}return null}c(YV,"mergeRoot");function RV(i,e,u,r){if(r!==null){let h=r.get(i,e);if(h!==null||(h=r.get(e,i),h!==null))return h}let a=0,s=0,n=0,l=[],d=[];for(;a{var{Set:bR,BitSet:xR}=nu(),{Token:gi}=Te(),{ATNConfig:yV}=y1(),{IntervalSet:vR}=Ou(),{RuleStopState:NV}=Wt(),{RuleTransition:CV,NotSetTransition:IV,WildcardTransition:bV,AbstractPredicateTransition:xV}=ts(),{predictionContextFromRuleContext:vV,PredictionContext:DR,SingletonPredictionContext:DV}=Xt(),D1=class D1{constructor(e){this.atn=e}getDecisionLookahead(e){if(e===null)return null;let u=e.transitions.length,r=[];for(let a=0;a{var wV=pS(),{IntervalSet:UV}=Ou(),{Token:is}=Te(),hS=class hS{constructor(e,u){this.grammarType=e,this.maxTokenType=u,this.states=[],this.decisionToState=[],this.ruleToStartState=[],this.ruleToStopState=null,this.modeNameToStartState={},this.ruleToTokenType=null,this.lexerActions=null,this.modeToStartState=[]}nextTokensInContext(e,u){return new wV(this).LOOK(e,null,u)}nextTokensNoContext(e){return e.nextTokenWithinRule!==null||(e.nextTokenWithinRule=this.nextTokensInContext(e,null),e.nextTokenWithinRule.readOnly=!0),e.nextTokenWithinRule}nextTokens(e,u){return u===void 0?this.nextTokensNoContext(e):this.nextTokensInContext(e,u)}addState(e){e!==null&&(e.atn=this,e.stateNumber=this.states.length),this.states.push(e)}removeState(e){this.states[e.stateNumber]=null}defineDecisionState(e){return this.decisionToState.push(e),e.decision=this.decisionToState.length-1,e.decision}getDecisionState(e){return this.decisionToState.length===0?null:this.decisionToState[e]}getExpectedTokens(e,u){if(e<0||e>=this.states.length)throw"Invalid state number.";let r=this.states[e],a=this.nextTokens(r);if(!a.contains(is.EPSILON))return a;let s=new UV;for(s.addSet(a),s.removeOne(is.EPSILON);u!==null&&u.invokingState>=0&&a.contains(is.EPSILON);){let l=this.states[u.invokingState].transitions[0];a=this.nextTokens(l.followState),s.addSet(a),s.removeOne(is.EPSILON),u=u.parentCtx}return a.contains(is.EPSILON)&&s.addOne(is.EOF),s}};c(hS,"ATN");var qd=hS;qd.INVALID_ALT_NUMBER=0;UR.exports=qd});var kR=v((sZ,PR)=>{PR.exports={LEXER:0,PARSER:1}});var SS=v((nZ,FR)=>{var fS=class fS{constructor(e){e===void 0&&(e=null),this.readOnly=!1,this.verifyATN=e===null?!0:e.verifyATN,this.generateRuleBypassTransitions=e===null?!1:e.generateRuleBypassTransitions}};c(fS,"ATNDeserializationOptions");var as=fS;as.defaultOptions=new as;as.defaultOptions.readOnly=!0;FR.exports=as});var RS=v((lZ,HR)=>{var Qt={CHANNEL:0,CUSTOM:1,MODE:2,MORE:3,POP_MODE:4,PUSH_MODE:5,SKIP:6,TYPE:7},TS=class TS{constructor(e){this.actionType=e,this.isPositionDependent=!1}hashCode(){let e=new Hash;return this.updateHashCode(e),e.finish()}updateHashCode(e){e.update(this.actionType)}equals(e){return this===e}};c(TS,"LexerAction");var tt=TS,_S=class _S extends tt{constructor(){super(Qt.SKIP)}execute(e){e.skip()}toString(){return"skip"}};c(_S,"LexerSkipAction");var w1=_S;w1.INSTANCE=new w1;var Kd=class Kd extends tt{constructor(e){super(Qt.TYPE),this.type=e}execute(e){e.type=this.type}updateHashCode(e){e.update(this.actionType,this.type)}equals(e){return this===e?!0:e instanceof Kd?this.type===e.type:!1}toString(){return"type("+this.type+")"}};c(Kd,"LexerTypeAction");var OS=Kd,Wd=class Wd extends tt{constructor(e){super(Qt.PUSH_MODE),this.mode=e}execute(e){e.pushMode(this.mode)}updateHashCode(e){e.update(this.actionType,this.mode)}equals(e){return this===e?!0:e instanceof Wd?this.mode===e.mode:!1}toString(){return"pushMode("+this.mode+")"}};c(Wd,"LexerPushModeAction");var LS=Wd,AS=class AS extends tt{constructor(){super(Qt.POP_MODE)}execute(e){e.popMode()}toString(){return"popMode"}};c(AS,"LexerPopModeAction");var U1=AS;U1.INSTANCE=new U1;var YS=class YS extends tt{constructor(){super(Qt.MORE)}execute(e){e.more()}toString(){return"more"}};c(YS,"LexerMoreAction");var P1=YS;P1.INSTANCE=new P1;var jd=class jd extends tt{constructor(e){super(Qt.MODE),this.mode=e}execute(e){e.mode(this.mode)}updateHashCode(e){e.update(this.actionType,this.mode)}equals(e){return this===e?!0:e instanceof jd?this.mode===e.mode:!1}toString(){return"mode("+this.mode+")"}};c(jd,"LexerModeAction");var ES=jd,Xd=class Xd extends tt{constructor(e,u){super(Qt.CUSTOM),this.ruleIndex=e,this.actionIndex=u,this.isPositionDependent=!0}execute(e){e.action(null,this.ruleIndex,this.actionIndex)}updateHashCode(e){e.update(this.actionType,this.ruleIndex,this.actionIndex)}equals(e){return this===e?!0:e instanceof Xd?this.ruleIndex===e.ruleIndex&&this.actionIndex===e.actionIndex:!1}};c(Xd,"LexerCustomAction");var mS=Xd,Qd=class Qd extends tt{constructor(e){super(Qt.CHANNEL),this.channel=e}execute(e){e._channel=this.channel}updateHashCode(e){e.update(this.actionType,this.channel)}equals(e){return this===e?!0:e instanceof Qd?this.channel===e.channel:!1}toString(){return"channel("+this.channel+")"}};c(Qd,"LexerChannelAction");var BS=Qd,Jd=class Jd extends tt{constructor(e,u){super(u.actionType),this.offset=e,this.action=u,this.isPositionDependent=!0}execute(e){this.action.execute(e)}updateHashCode(e){e.update(this.actionType,this.offset,this.action)}equals(e){return this===e?!0:e instanceof Jd?this.offset===e.offset&&this.action===e.action:!1}};c(Jd,"LexerIndexedCustomAction");var MS=Jd;HR.exports={LexerActionType:Qt,LexerSkipAction:w1,LexerChannelAction:BS,LexerCustomAction:mS,LexerIndexedCustomAction:MS,LexerMoreAction:P1,LexerTypeAction:OS,LexerPushModeAction:LS,LexerPopModeAction:U1,LexerModeAction:ES}});var PS=v((dZ,JR)=>{var{Token:gS}=Te(),PV=yi(),$d=kR(),{ATNState:cu,BasicState:VR,DecisionState:kV,BlockStartState:yS,BlockEndState:NS,LoopEndState:ss,RuleStartState:GR,RuleStopState:k1,TokensStartState:FV,PlusLoopbackState:qR,StarLoopbackState:CS,StarLoopEntryState:ns,PlusBlockStartState:IS,StarBlockStartState:bS,BasicBlockStartState:KR}=Wt(),{Transition:gt,AtomTransition:xS,SetTransition:HV,NotSetTransition:VV,RuleTransition:WR,RangeTransition:jR,ActionTransition:GV,EpsilonTransition:F1,WildcardTransition:qV,PredicateTransition:KV,PrecedencePredicateTransition:WV}=ts(),{IntervalSet:jV}=Ou(),XV=SS(),{LexerActionType:Hr,LexerSkipAction:QV,LexerChannelAction:JV,LexerCustomAction:$V,LexerMoreAction:zV,LexerTypeAction:ZV,LexerPushModeAction:eG,LexerPopModeAction:uG,LexerModeAction:tG}=RS(),rG="AADB8D7E-AEEF-4415-AD2B-8204D6CF042E",wS="59627784-3BE5-417A-B9EB-8131A7286089",vS=[rG,wS],XR=3,QR=wS;function zd(i,e){let u=[];return u[i-1]=e,u.map(function(r){return e})}c(zd,"initArray");var US=class US{constructor(e){e==null&&(e=XV.defaultOptions),this.deserializationOptions=e,this.stateFactories=null,this.actionFactories=null}isFeatureSupported(e,u){let r=vS.indexOf(e);return r<0?!1:vS.indexOf(u)>=r}deserialize(e){this.reset(e),this.checkVersion(),this.checkUUID();let u=this.readATN();this.readStates(u),this.readRules(u),this.readModes(u);let r=[];return this.readSets(u,r,this.readInt.bind(this)),this.isFeatureSupported(wS,this.uuid)&&this.readSets(u,r,this.readInt32.bind(this)),this.readEdges(u,r),this.readDecisions(u),this.readLexerActions(u),this.markPrecedenceDecisions(u),this.verifyATN(u),this.deserializationOptions.generateRuleBypassTransitions&&u.grammarType===$d.PARSER&&(this.generateRuleBypassTransitions(u),this.verifyATN(u)),u}reset(e){let u=c(function(a){let s=a.charCodeAt(0);return s>1?s-2:s+65534},"adjust"),r=e.split("").map(u);r[0]=e.charCodeAt(0),this.data=r,this.pos=0}checkVersion(){let e=this.readInt();if(e!==XR)throw"Could not deserialize ATN with version "+e+" (expected "+XR+")."}checkUUID(){let e=this.readUUID();if(vS.indexOf(e)<0)throw""+e+QR,QR;this.uuid=e}readATN(){let e=this.readInt(),u=this.readInt();return new PV(e,u)}readStates(e){let u,r,a,s=[],n=[],l=this.readInt();for(let h=0;h0;)s.addTransition(p.transitions[h-1]),p.transitions=p.transitions.slice(-1);e.ruleToStartState[u].addTransition(new F1(s)),n.addTransition(new F1(d));let f=new VR;e.addState(f),f.addTransition(new xS(n,e.ruleToTokenType[u])),s.addTransition(new F1(f))}stateIsEndStateFor(e,u){if(e.ruleIndex!==u||!(e instanceof ns))return null;let r=e.transitions[e.transitions.length-1].target;return r instanceof ss&&r.epsilonOnlyTransitions&&r.transitions[0].target instanceof k1?e:null}markPrecedenceDecisions(e){for(let u=0;u=0):this.checkCondition(r.transitions.length<=1||r instanceof k1)}}checkCondition(e,u){if(!e)throw u==null&&(u="IllegalState"),u}readInt(){return this.data[this.pos++]}readInt32(){let e=this.readInt(),u=this.readInt();return e|u<<16}readLong(){let e=this.readInt32(),u=this.readInt32();return e&4294967295|u<<32}readUUID(){let e=[];for(let u=7;u>=0;u--){let r=this.readInt();e[2*u+1]=r&255,e[2*u]=r>>8&255}return Qe[e[0]]+Qe[e[1]]+Qe[e[2]]+Qe[e[3]]+"-"+Qe[e[4]]+Qe[e[5]]+"-"+Qe[e[6]]+Qe[e[7]]+"-"+Qe[e[8]]+Qe[e[9]]+"-"+Qe[e[10]]+Qe[e[11]]+Qe[e[12]]+Qe[e[13]]+Qe[e[14]]+Qe[e[15]]}edgeFactory(e,u,r,a,s,n,l,d){let p=e.states[a];switch(u){case gt.EPSILON:return new F1(p);case gt.RANGE:return l!==0?new jR(p,gS.EOF,n):new jR(p,s,n);case gt.RULE:return new WR(e.states[s],n,l,p);case gt.PREDICATE:return new KV(p,s,n,l!==0);case gt.PRECEDENCE:return new WV(p,s);case gt.ATOM:return l!==0?new xS(p,gS.EOF):new xS(p,s);case gt.ACTION:return new GV(p,s,n,l!==0);case gt.SET:return new HV(p,d[s]);case gt.NOT_SET:return new VV(p,d[s]);case gt.WILDCARD:return new qV(p);default:throw"The specified transition type: "+u+" is not valid."}}stateFactory(e,u){if(this.stateFactories===null){let r=[];r[cu.INVALID_TYPE]=null,r[cu.BASIC]=()=>new VR,r[cu.RULE_START]=()=>new GR,r[cu.BLOCK_START]=()=>new KR,r[cu.PLUS_BLOCK_START]=()=>new IS,r[cu.STAR_BLOCK_START]=()=>new bS,r[cu.TOKEN_START]=()=>new FV,r[cu.RULE_STOP]=()=>new k1,r[cu.BLOCK_END]=()=>new NS,r[cu.STAR_LOOP_BACK]=()=>new CS,r[cu.STAR_LOOP_ENTRY]=()=>new ns,r[cu.PLUS_LOOP_BACK]=()=>new qR,r[cu.LOOP_END]=()=>new ss,this.stateFactories=r}if(e>this.stateFactories.length||this.stateFactories[e]===null)throw"The specified state type "+e+" is not valid.";{let r=this.stateFactories[e]();if(r!==null)return r.ruleIndex=u,r}}lexerActionFactory(e,u,r){if(this.actionFactories===null){let a=[];a[Hr.CHANNEL]=(s,n)=>new JV(s),a[Hr.CUSTOM]=(s,n)=>new $V(s,n),a[Hr.MODE]=(s,n)=>new tG(s),a[Hr.MORE]=(s,n)=>zV.INSTANCE,a[Hr.POP_MODE]=(s,n)=>uG.INSTANCE,a[Hr.PUSH_MODE]=(s,n)=>new eG(s),a[Hr.SKIP]=(s,n)=>QV.INSTANCE,a[Hr.TYPE]=(s,n)=>new ZV(s),this.actionFactories=a}if(e>this.actionFactories.length||this.actionFactories[e]===null)throw"The specified lexer action type "+e+" is not valid.";return this.actionFactories[e](u,r)}};c(US,"ATNDeserializer");var DS=US;function iG(){let i=[];for(let e=0;e<256;e++)i[e]=(e+256).toString(16).substr(1).toUpperCase();return i}c(iG,"createByteToHex");var Qe=iG();JR.exports=DS});var G1=v((hZ,$R)=>{var FS=class FS{syntaxError(e,u,r,a,s,n){}reportAmbiguity(e,u,r,a,s,n,l){}reportAttemptingFullContext(e,u,r,a,s,n){}reportContextSensitivity(e,u,r,a,s,n){}};c(FS,"ErrorListener");var H1=FS,HS=class HS extends H1{constructor(){super()}syntaxError(e,u,r,a,s,n){console.error("line "+r+":"+a+" "+s)}};c(HS,"ConsoleErrorListener");var V1=HS;V1.INSTANCE=new V1;var VS=class VS extends H1{constructor(e){if(super(),e===null)throw"delegates";return this.delegates=e,this}syntaxError(e,u,r,a,s,n){this.delegates.map(l=>l.syntaxError(e,u,r,a,s,n))}reportAmbiguity(e,u,r,a,s,n,l){this.delegates.map(d=>d.reportAmbiguity(e,u,r,a,s,n,l))}reportAttemptingFullContext(e,u,r,a,s,n){this.delegates.map(l=>l.reportAttemptingFullContext(e,u,r,a,s,n))}reportContextSensitivity(e,u,r,a,s,n){this.delegates.map(l=>l.reportContextSensitivity(e,u,r,a,s,n))}};c(VS,"ProxyErrorListener");var kS=VS;$R.exports={ErrorListener:H1,ConsoleErrorListener:V1,ProxyErrorListener:kS}});var KS=v((SZ,zR)=>{var{Token:GS}=Te(),{ConsoleErrorListener:aG}=G1(),{ProxyErrorListener:sG}=G1(),qS=class qS{constructor(){this._listeners=[aG.INSTANCE],this._interp=null,this._stateNumber=-1}checkVersion(e){let u="4.9.2";u!==e&&console.log("ANTLR runtime and generated code versions disagree: "+u+"!="+e)}addErrorListener(e){this._listeners.push(e)}removeErrorListeners(){this._listeners=[]}getTokenTypeMap(){let e=this.getTokenNames();if(e===null)throw"The current recognizer does not provide a list of token names.";let u=this.tokenTypeMapCache[e];return u===void 0&&(u=e.reduce(function(r,a,s){r[a]=s}),u.EOF=GS.EOF,this.tokenTypeMapCache[e]=u),u}getRuleIndexMap(){let e=this.ruleNames;if(e===null)throw"The current recognizer does not provide a list of rule names.";let u=this.ruleIndexMapCache[e];return u===void 0&&(u=e.reduce(function(r,a,s){r[a]=s}),this.ruleIndexMapCache[e]=u),u}getTokenType(e){let u=this.getTokenTypeMap()[e];return u!==void 0?u:GS.INVALID_TYPE}getErrorHeader(e){let u=e.getOffendingToken().line,r=e.getOffendingToken().column;return"line "+u+":"+r}getTokenErrorDisplay(e){if(e===null)return"";let u=e.text;return u===null&&(e.type===GS.EOF?u="":u="<"+e.type+">"),u=u.replace(` +`,"\\n").replace("\r","\\r").replace(" ","\\t"),"'"+u+"'"}getErrorListenerDispatch(){return new sG(this._listeners)}sempred(e,u,r){return!0}precpred(e,u){return!0}get state(){return this._stateNumber}set state(e){this._stateNumber=e}};c(qS,"Recognizer");var q1=qS;q1.tokenTypeMapCache={};q1.ruleIndexMapCache={};zR.exports=q1});var ug=v((LZ,eg)=>{var ZR=Te().CommonToken,jS=class jS{};c(jS,"TokenFactory");var WS=jS,XS=class XS extends WS{constructor(e){super(),this.copyText=e===void 0?!1:e}create(e,u,r,a,s,n,l,d){let p=new ZR(e,u,a,s,n);return p.line=l,p.column=d,r!==null?p.text=r:this.copyText&&e[1]!==null&&(p.text=e[1].getText(s,n)),p}createThin(e,u){let r=new ZR(null,e);return r.text=u,r}};c(XS,"CommonTokenFactory");var K1=XS;K1.DEFAULT=new K1;eg.exports=K1});var rt=v((mZ,tg)=>{var{PredicateTransition:nG}=ts(),{Interval:oG}=Ou().Interval,Zd=class Zd extends Error{constructor(e){if(super(e.message),Error.captureStackTrace)Error.captureStackTrace(this,Zd);else var u=new Error().stack;this.message=e.message,this.recognizer=e.recognizer,this.input=e.input,this.ctx=e.ctx,this.offendingToken=null,this.offendingState=-1,this.recognizer!==null&&(this.offendingState=this.recognizer.state)}getExpectedTokens(){return this.recognizer!==null?this.recognizer.atn.getExpectedTokens(this.offendingState,this.ctx):null}toString(){return this.message}};c(Zd,"RecognitionException");var Ni=Zd,eO=class eO extends Ni{constructor(e,u,r,a){super({message:"",recognizer:e,input:u,ctx:null}),this.startIndex=r,this.deadEndConfigs=a}toString(){let e="";return this.startIndex>=0&&this.startIndex{var{Token:du}=Te(),cG=KS(),dG=ug(),{RecognitionException:pG}=rt(),{LexerNoViableAltException:hG}=rt(),yt=class yt extends cG{constructor(e){super(),this._input=e,this._factory=dG.DEFAULT,this._tokenFactorySourcePair=[this,e],this._interp=null,this._token=null,this._tokenStartCharIndex=-1,this._tokenStartLine=-1,this._tokenStartColumn=-1,this._hitEOF=!1,this._channel=du.DEFAULT_CHANNEL,this._type=du.INVALID_TYPE,this._modeStack=[],this._mode=yt.DEFAULT_MODE,this._text=null}reset(){this._input!==null&&this._input.seek(0),this._token=null,this._type=du.INVALID_TYPE,this._channel=du.DEFAULT_CHANNEL,this._tokenStartCharIndex=-1,this._tokenStartColumn=-1,this._tokenStartLine=-1,this._text=null,this._hitEOF=!1,this._mode=yt.DEFAULT_MODE,this._modeStack=[],this._interp.reset()}nextToken(){if(this._input===null)throw"nextToken requires a non-null input stream.";let e=this._input.mark();try{for(;;){if(this._hitEOF)return this.emitEOF(),this._token;this._token=null,this._channel=du.DEFAULT_CHANNEL,this._tokenStartCharIndex=this._input.index,this._tokenStartColumn=this._interp.column,this._tokenStartLine=this._interp.line,this._text=null;let u=!1;for(;;){this._type=du.INVALID_TYPE;let r=yt.SKIP;try{r=this._interp.match(this._input,this._mode)}catch(a){if(a instanceof pG)this.notifyListeners(a),this.recover(a);else throw console.log(a.stack),a}if(this._input.LA(1)===du.EOF&&(this._hitEOF=!0),this._type===du.INVALID_TYPE&&(this._type=r),this._type===yt.SKIP){u=!0;break}if(this._type!==yt.MORE)break}if(!u)return this._token===null&&this.emit(),this._token}}finally{this._input.release(e)}}skip(){this._type=yt.SKIP}more(){this._type=yt.MORE}mode(e){this._mode=e}pushMode(e){this._interp.debug&&console.log("pushMode "+e),this._modeStack.push(this._mode),this.mode(e)}popMode(){if(this._modeStack.length===0)throw"Empty Stack";return this._interp.debug&&console.log("popMode back to "+this._modeStack.slice(0,-1)),this.mode(this._modeStack.pop()),this._mode}emitToken(e){this._token=e}emit(){let e=this._factory.create(this._tokenFactorySourcePair,this._type,this._text,this._channel,this._tokenStartCharIndex,this.getCharIndex()-1,this._tokenStartLine,this._tokenStartColumn);return this.emitToken(e),e}emitEOF(){let e=this.column,u=this.line,r=this._factory.create(this._tokenFactorySourcePair,du.EOF,null,du.DEFAULT_CHANNEL,this._input.index,this._input.index-1,u,e);return this.emitToken(r),r}getCharIndex(){return this._input.index}getAllTokens(){let e=[],u=this.nextToken();for(;u.type!==du.EOF;)e.push(u),u=this.nextToken();return e}notifyListeners(e){let u=this._tokenStartCharIndex,r=this._input.index,a=this._input.getText(u,r),s="token recognition error at: '"+this.getErrorDisplay(a)+"'";this.getErrorListenerDispatch().syntaxError(this,null,this._tokenStartLine,this._tokenStartColumn,s,e)}getErrorDisplay(e){let u=[];for(let r=0;r":e===` +`?"\\n":e===" "?"\\t":e==="\r"?"\\r":e}getCharErrorDisplay(e){return"'"+this.getErrorDisplayForChar(e)+"'"}recover(e){this._input.LA(1)!==du.EOF&&(e instanceof hG?this._interp.consume(this._input):this._input.consume())}get inputStream(){return this._input}set inputStream(e){this._input=null,this._tokenFactorySourcePair=[this,this._input],this.reset(),this._input=e,this._tokenFactorySourcePair=[this,this._input]}get sourceName(){return this._input.sourceName}get type(){return this.type}set type(e){this._type=e}get line(){return this._interp.line}set line(e){this._interp.line=e}get column(){return this._interp.column}set column(e){this._interp.column=e}get text(){return this._text!==null?this._text:this._interp.getText(this._input)}set text(e){this._text=e}};c(yt,"Lexer");var Nt=yt;Nt.DEFAULT_MODE=0;Nt.MORE=-2;Nt.SKIP=-3;Nt.DEFAULT_TOKEN_CHANNEL=du.DEFAULT_CHANNEL;Nt.HIDDEN=du.HIDDEN_CHANNEL;Nt.MIN_CHAR_VALUE=0;Nt.MAX_CHAR_VALUE=1114111;rg.exports=Nt});var Ii=v((_Z,ag)=>{var fG=yi(),Ci=nu(),{SemanticContext:ig}=es(),{merge:SG}=Xt();function OG(i){return i.hashCodeForConfigSet()}c(OG,"hashATNConfig");function LG(i,e){return i===e?!0:i===null||e===null?!1:i.equalsForConfigSet(e)}c(LG,"equalATNConfigs");var tp=class tp{constructor(e){this.configLookup=new Ci.Set(OG,LG),this.fullCtx=e===void 0?!0:e,this.readOnly=!1,this.configs=[],this.uniqueAlt=0,this.conflictingAlts=null,this.hasSemanticContext=!1,this.dipsIntoOuterContext=!1,this.cachedHashCode=-1}add(e,u){if(u===void 0&&(u=null),this.readOnly)throw"This set is readonly";e.semanticContext!==ig.NONE&&(this.hasSemanticContext=!0),e.reachesIntoOuterContext>0&&(this.dipsIntoOuterContext=!0);let r=this.configLookup.add(e);if(r===e)return this.cachedHashCode=-1,this.configs.push(e),!0;let a=!this.fullCtx,s=SG(r.context,e.context,a,u);return r.reachesIntoOuterContext=Math.max(r.reachesIntoOuterContext,e.reachesIntoOuterContext),e.precedenceFilterSuppressed&&(r.precedenceFilterSuppressed=!0),r.context=s,!0}getStates(){let e=new Ci.Set;for(let u=0;u{var{ATNConfigSet:EG}=Ii(),{Hash:mG,Set:BG}=nu(),oO=class oO{constructor(e,u){this.alt=u,this.pred=e}toString(){return"("+this.pred+", "+this.alt+")"}};c(oO,"PredPrediction");var sO=oO,rp=class rp{constructor(e,u){return e===null&&(e=-1),u===null&&(u=new EG),this.stateNumber=e,this.configs=u,this.edges=null,this.isAcceptState=!1,this.prediction=0,this.lexerActionExecutor=null,this.requiresFullContext=!1,this.predicates=null,this}getAltSet(){let e=new BG;if(this.configs!==null)for(let u=0;u",this.predicates!==null?e=e+this.predicates:e=e+this.prediction),e}hashCode(){let e=new mG;return e.update(this.configs),e.finish()}};c(rp,"DFAState");var nO=rp;sg.exports={DFAState:nO,PredPrediction:sO}});var cO=v((gZ,ng)=>{var{DFAState:MG}=os(),{ATNConfigSet:TG}=Ii(),{getCachedPredictionContext:_G}=Xt(),{Map:AG}=nu(),lO=class lO{constructor(e,u){return this.atn=e,this.sharedContextCache=u,this}getCachedContext(e){if(this.sharedContextCache===null)return e;let u=new AG;return _G(e,this.sharedContextCache,u)}};c(lO,"ATNSimulator");var ip=lO;ip.ERROR=new MG(2147483647,new TG);ng.exports=ip});var lg=v((NZ,og)=>{var{hashStuff:YG}=nu(),{LexerIndexedCustomAction:dO}=RS(),bi=class bi{constructor(e){return this.lexerActions=e===null?[]:e,this.cachedHashCode=YG(e),this}fixOffsetBeforeMatch(e){let u=null;for(let r=0;r{var{Token:ls}=Te(),ap=W1(),RG=yi(),sp=cO(),{DFAState:gG}=os(),{OrderedATNConfigSet:cg}=Ii(),{PredictionContext:hO}=Xt(),{SingletonPredictionContext:yG}=Xt(),{RuleStopState:dg}=Wt(),{LexerATNConfig:Ct}=y1(),{Transition:Vr}=ts(),NG=lg(),{LexerNoViableAltException:CG}=rt();function pg(i){i.index=-1,i.line=0,i.column=-1,i.dfaState=null}c(pg,"resetSimState");var SO=class SO{constructor(){pg(this)}reset(){pg(this)}};c(SO,"SimState");var fO=SO,_e=class _e extends sp{constructor(e,u,r,a){super(u,a),this.decisionToDFA=r,this.recog=e,this.startIndex=-1,this.line=1,this.column=0,this.mode=ap.DEFAULT_MODE,this.prevAccept=new fO}copyState(e){this.column=e.column,this.line=e.line,this.mode=e.mode,this.startIndex=e.startIndex}match(e,u){this.match_calls+=1,this.mode=u;let r=e.mark();try{this.startIndex=e.index,this.prevAccept.reset();let a=this.decisionToDFA[u];return a.s0===null?this.matchATN(e):this.execATN(e,a.s0)}finally{e.release(r)}}reset(){this.prevAccept.reset(),this.startIndex=-1,this.line=1,this.column=0,this.mode=ap.DEFAULT_MODE}matchATN(e){let u=this.atn.modeToStartState[this.mode];_e.debug&&console.log("matchATN mode "+this.mode+" start: "+u);let r=this.mode,a=this.computeStartState(e,u),s=a.hasSemanticContext;a.hasSemanticContext=!1;let n=this.addDFAState(a);s||(this.decisionToDFA[this.mode].s0=n);let l=this.execATN(e,n);return _e.debug&&console.log("DFA after matchATN: "+this.decisionToDFA[r].toLexerString()),l}execATN(e,u){_e.debug&&console.log("start state closure="+u.configs),u.isAcceptState&&this.captureSimState(this.prevAccept,e,u);let r=e.LA(1),a=u;for(;;){_e.debug&&console.log("execATN loop starting closure: "+a.configs);let s=this.getExistingTargetState(a,r);if(s===null&&(s=this.computeTargetState(e,a,r)),s===sp.ERROR||(r!==ls.EOF&&this.consume(e),s.isAcceptState&&(this.captureSimState(this.prevAccept,e,s),r===ls.EOF)))break;r=e.LA(1),a=s}return this.failOrAccept(this.prevAccept,e,a.configs,r)}getExistingTargetState(e,u){if(e.edges===null||u<_e.MIN_DFA_EDGE||u>_e.MAX_DFA_EDGE)return null;let r=e.edges[u-_e.MIN_DFA_EDGE];return r===void 0&&(r=null),_e.debug&&r!==null&&console.log("reuse state "+e.stateNumber+" edge to "+r.stateNumber),r}computeTargetState(e,u,r){let a=new cg;return this.getReachableConfigSet(e,u.configs,a,r),a.items.length===0?(a.hasSemanticContext||this.addDFAEdge(u,r,sp.ERROR),sp.ERROR):this.addDFAEdge(u,r,null,a)}failOrAccept(e,u,r,a){if(this.prevAccept.dfaState!==null){let s=e.dfaState.lexerActionExecutor;return this.accept(u,s,this.startIndex,e.index,e.line,e.column),e.dfaState.prediction}else{if(a===ls.EOF&&u.index===this.startIndex)return ls.EOF;throw new CG(this.recog,u,this.startIndex,r)}}getReachableConfigSet(e,u,r,a){let s=RG.INVALID_ALT_NUMBER;for(let n=0;n_e.MAX_DFA_EDGE||(_e.debug&&console.log("EDGE "+e+" -> "+r+" upon "+u),e.edges===null&&(e.edges=[]),e.edges[u-_e.MIN_DFA_EDGE]=r),r}addDFAState(e){let u=new gG(null,e),r=null;for(let l=0;l{var{Map:IG,BitSet:OO,AltDict:bG,hashStuff:xG}=nu(),Sg=yi(),{RuleStopState:Og}=Wt(),{ATNConfigSet:vG}=Ii(),{ATNConfig:DG}=y1(),{SemanticContext:wG}=es(),It={SLL:0,LL:1,LL_EXACT_AMBIG_DETECTION:2,hasSLLConflictTerminatingPrediction:function(i,e){if(It.allConfigsInRuleStopStates(e))return!0;if(i===It.SLL&&e.hasSemanticContext){let r=new vG;for(let a=0;a1)return!0;return!1},allSubsetsEqual:function(i){let e=null;for(let u=0;u{var Bg=Hd(),op=Ri(),UG=op.INVALID_INTERVAL,Eg=op.TerminalNode,PG=op.TerminalNodeImpl,mg=op.ErrorNodeImpl,kG=Ou().Interval,EO=class EO extends Bg{constructor(e,u){e=e||null,u=u||null,super(e,u),this.ruleIndex=-1,this.children=null,this.start=null,this.stop=null,this.exception=null}copyFrom(e){this.parentCtx=e.parentCtx,this.invokingState=e.invokingState,this.children=null,this.start=e.start,this.stop=e.stop,e.children&&(this.children=[],e.children.map(function(u){u instanceof mg&&(this.children.push(u),u.parentCtx=this)},this))}enterRule(e){}exitRule(e){}addChild(e){return this.children===null&&(this.children=[]),this.children.push(e),e}removeLastChild(){this.children!==null&&this.children.pop()}addTokenNode(e){let u=new PG(e);return this.addChild(u),u.parentCtx=this,u}addErrorNode(e){let u=new mg(e);return this.addChild(u),u.parentCtx=this,u}getChild(e,u){if(u=u||null,this.children===null||e<0||e>=this.children.length)return null;if(u===null)return this.children[e];for(let r=0;r=this.children.length)return null;for(let r=0;r{var Q1=nu(),{Set:Tg,BitSet:_g,DoubleDict:FG}=Q1,qe=yi(),{ATNState:lp,RuleStopState:j1}=Wt(),{ATNConfig:Je}=y1(),{ATNConfigSet:xi}=Ii(),{Token:Jt}=Te(),{DFAState:BO,PredPrediction:HG}=os(),X1=cO(),Ke=LO(),Ag=Hd(),wZ=mO(),{SemanticContext:qr}=es(),{PredictionContext:Yg}=Xt(),{Interval:MO}=Ou(),{Transition:Kr,SetTransition:VG,NotSetTransition:GG,RuleTransition:qG,ActionTransition:KG}=ts(),{NoViableAltException:WG}=rt(),{SingletonPredictionContext:jG,predictionContextFromRuleContext:XG}=Xt(),_O=class _O extends X1{constructor(e,u,r,a){super(u,a),this.parser=e,this.decisionToDFA=r,this.predictionMode=Ke.LL,this._input=null,this._startIndex=0,this._outerContext=null,this._dfa=null,this.mergeCache=null,this.debug=!1,this.debug_closure=!1,this.debug_add=!1,this.debug_list_atn_decisions=!1,this.dfa_debug=!1,this.retry_debug=!1}reset(){}adaptivePredict(e,u,r){(this.debug||this.debug_list_atn_decisions)&&console.log("adaptivePredict decision "+u+" exec LA(1)=="+this.getLookaheadName(e)+" line "+e.LT(1).line+":"+e.LT(1).column),this._input=e,this._startIndex=e.index,this._outerContext=r;let a=this.decisionToDFA[u];this._dfa=a;let s=e.mark(),n=e.index;try{let l;if(a.precedenceDfa?l=a.getPrecedenceStartState(this.parser.getPrecedence()):l=a.s0,l===null){r===null&&(r=Ag.EMPTY),(this.debug||this.debug_list_atn_decisions)&&console.log("predictATN decision "+a.decision+" exec LA(1)=="+this.getLookaheadName(e)+", outerContext="+r.toString(this.parser.ruleNames));let h=this.computeStartState(a.atnStartState,Ag.EMPTY,!1);a.precedenceDfa?(a.s0.configs=h,h=this.applyPrecedenceFilter(h),l=this.addDFAState(a,new BO(null,h)),a.setPrecedenceStartState(this.parser.getPrecedence(),l)):(l=this.addDFAState(a,new BO(null,h)),a.s0=l)}let d=this.execATN(a,l,e,n,r);return this.debug&&console.log("DFA after predictATN: "+a.toString(this.parser.literalNames)),d}finally{this._dfa=null,this.mergeCache=null,e.seek(n),e.release(s)}}execATN(e,u,r,a,s){(this.debug||this.debug_list_atn_decisions)&&console.log("execATN decision "+e.decision+" exec LA(1)=="+this.getLookaheadName(r)+" line "+r.LT(1).line+":"+r.LT(1).column);let n,l=u;this.debug&&console.log("s0 = "+u);let d=r.LA(1);for(;;){let p=this.getExistingTargetState(l,d);if(p===null&&(p=this.computeTargetState(e,l,d)),p===X1.ERROR){let h=this.noViableAlt(r,s,l.configs,a);if(r.seek(a),n=this.getSynValidOrSemInvalidAltThatFinishedDecisionEntryRule(l.configs,s),n!==qe.INVALID_ALT_NUMBER)return n;throw h}if(p.requiresFullContext&&this.predictionMode!==Ke.SLL){let h=null;if(p.predicates!==null){this.debug&&console.log("DFA state has preds in DFA sim LL failover");let m=r.index;if(m!==a&&r.seek(a),h=this.evalSemanticContext(p.predicates,s,!0),h.length===1)return this.debug&&console.log("Full LL avoided"),h.minValue();m!==a&&r.seek(m)}this.dfa_debug&&console.log("ctx sensitive state "+s+" in "+p);let S=this.computeStartState(e.atnStartState,s,!0);return this.reportAttemptingFullContext(e,h,p.configs,a,r.index),n=this.execATNWithFullContext(e,p,S,r,a,s),n}if(p.isAcceptState){if(p.predicates===null)return p.prediction;let h=r.index;r.seek(a);let f=this.evalSemanticContext(p.predicates,s,!0);if(f.length===0)throw this.noViableAlt(r,s,p.configs,a);return f.length===1||this.reportAmbiguity(e,p,a,h,!1,f,p.configs),f.minValue()}l=p,d!==Jt.EOF&&(r.consume(),d=r.LA(1))}}getExistingTargetState(e,u){let r=e.edges;return r===null?null:r[u+1]||null}computeTargetState(e,u,r){let a=this.computeReachSet(u.configs,r,!1);if(a===null)return this.addDFAEdge(e,u,r,X1.ERROR),X1.ERROR;let s=new BO(null,a),n=this.getUniqueAlt(a);if(this.debug){let l=Ke.getConflictingAltSubsets(a);console.log("SLL altSubSets="+Q1.arrayToString(l)+", previous="+u.configs+", configs="+a+", predict="+n+", allSubsetsConflict="+Ke.allSubsetsConflict(l)+", conflictingAlts="+this.getConflictingAlts(a))}return n!==qe.INVALID_ALT_NUMBER?(s.isAcceptState=!0,s.configs.uniqueAlt=n,s.prediction=n):Ke.hasSLLConflictTerminatingPrediction(this.predictionMode,a)&&(s.configs.conflictingAlts=this.getConflictingAlts(a),s.requiresFullContext=!0,s.isAcceptState=!0,s.prediction=s.configs.conflictingAlts.minValue()),s.isAcceptState&&s.configs.hasSemanticContext&&(this.predicateDFAState(s,this.atn.getDecisionState(e.decision)),s.predicates!==null&&(s.prediction=qe.INVALID_ALT_NUMBER)),s=this.addDFAEdge(e,u,r,s),s}predicateDFAState(e,u){let r=u.transitions.length,a=this.getConflictingAltsOrUniqueAlt(e.configs),s=this.getPredsForAmbigAlts(a,e.configs,r);s!==null?(e.predicates=this.getPredicatePredictions(a,s),e.prediction=qe.INVALID_ALT_NUMBER):e.prediction=a.minValue()}execATNWithFullContext(e,u,r,a,s,n){(this.debug||this.debug_list_atn_decisions)&&console.log("execATNWithFullContext "+r);let l=!0,d=!1,p,h=r;a.seek(s);let f=a.LA(1),S=-1;for(;;){if(p=this.computeReachSet(h,f,l),p===null){let O=this.noViableAlt(a,n,h,s);a.seek(s);let M=this.getSynValidOrSemInvalidAltThatFinishedDecisionEntryRule(h,n);if(M!==qe.INVALID_ALT_NUMBER)return M;throw O}let m=Ke.getConflictingAltSubsets(p);if(this.debug&&console.log("LL altSubSets="+m+", predict="+Ke.getUniqueAlt(m)+", resolvesToJustOneViableAlt="+Ke.resolvesToJustOneViableAlt(m)),p.uniqueAlt=this.getUniqueAlt(p),p.uniqueAlt!==qe.INVALID_ALT_NUMBER){S=p.uniqueAlt;break}else if(this.predictionMode!==Ke.LL_EXACT_AMBIG_DETECTION){if(S=Ke.resolvesToJustOneViableAlt(m),S!==qe.INVALID_ALT_NUMBER)break}else if(Ke.allSubsetsConflict(m)&&Ke.allSubsetsEqual(m)){d=!0,S=Ke.getSingleViableAlt(m);break}h=p,f!==Jt.EOF&&(a.consume(),f=a.LA(1))}return p.uniqueAlt!==qe.INVALID_ALT_NUMBER?(this.reportContextSensitivity(e,S,p,s,a.index),S):(this.reportAmbiguity(e,u,s,a.index,d,null,p),S)}computeReachSet(e,u,r){this.debug&&console.log("in computeReachSet, starting closure: "+e),this.mergeCache===null&&(this.mergeCache=new FG);let a=new xi(r),s=null;for(let l=0;l0&&(n=this.getAltThatFinishedDecisionEntryRule(s),n!==qe.INVALID_ALT_NUMBER)?n:qe.INVALID_ALT_NUMBER}getAltThatFinishedDecisionEntryRule(e){let u=[];for(let r=0;r0||a.state instanceof j1&&a.context.hasEmptyPath())&&u.indexOf(a.alt)<0&&u.push(a.alt)}return u.length===0?qe.INVALID_ALT_NUMBER:Math.min.apply(null,u)}splitAccordingToSemanticValidity(e,u){let r=new xi(e.fullCtx),a=new xi(e.fullCtx);for(let s=0;s50))throw"problem";if(e.state instanceof j1)if(e.context.isEmpty())if(s){u.add(e,this.mergeCache);return}else this.debug&&console.log("FALLING off rule "+this.getRuleName(e.state.ruleIndex));else{for(let d=0;d=0&&(m+=1)}this.closureCheckingStopState(S,u,r,f,s,m,l)}}}canDropLoopEntryEdgeInLeftRecursiveRule(e){let u=e.state;if(u.stateType!==lp.STAR_LOOP_ENTRY||u.stateType!==lp.STAR_LOOP_ENTRY||!u.isPrecedenceDecision||e.context.isEmpty()||e.context.hasEmptyPath())return!1;let r=e.context.length;for(let l=0;l=0?this.parser.ruleNames[e]:""}getEpsilonTarget(e,u,r,a,s,n){switch(u.serializationType){case Kr.RULE:return this.ruleTransition(e,u);case Kr.PRECEDENCE:return this.precedenceTransition(e,u,r,a,s);case Kr.PREDICATE:return this.predTransition(e,u,r,a,s);case Kr.ACTION:return this.actionTransition(e,u);case Kr.EPSILON:return new Je({state:u.target},e);case Kr.ATOM:case Kr.RANGE:case Kr.SET:return n&&u.matches(Jt.EOF,0,1)?new Je({state:u.target},e):null;default:return null}}actionTransition(e,u){if(this.debug){let r=u.actionIndex===-1?65535:u.actionIndex;console.log("ACTION edge "+u.ruleIndex+":"+r)}return new Je({state:u.target},e)}precedenceTransition(e,u,r,a,s){this.debug&&(console.log("PRED (collectPredicates="+r+") "+u.precedence+">=_p, ctx dependent=true"),this.parser!==null&&console.log("context surrounding pred is "+Q1.arrayToString(this.parser.getRuleInvocationStack())));let n=null;if(r&&a)if(s){let l=this._input.index;this._input.seek(this._startIndex);let d=u.getPredicate().evaluate(this.parser,this._outerContext);this._input.seek(l),d&&(n=new Je({state:u.target},e))}else{let l=qr.andContext(e.semanticContext,u.getPredicate());n=new Je({state:u.target,semanticContext:l},e)}else n=new Je({state:u.target},e);return this.debug&&console.log("config from pred transition="+n),n}predTransition(e,u,r,a,s){this.debug&&(console.log("PRED (collectPredicates="+r+") "+u.ruleIndex+":"+u.predIndex+", ctx dependent="+u.isCtxDependent),this.parser!==null&&console.log("context surrounding pred is "+Q1.arrayToString(this.parser.getRuleInvocationStack())));let n=null;if(r&&(u.isCtxDependent&&a||!u.isCtxDependent))if(s){let l=this._input.index;this._input.seek(this._startIndex);let d=u.getPredicate().evaluate(this.parser,this._outerContext);this._input.seek(l),d&&(n=new Je({state:u.target},e))}else{let l=qr.andContext(e.semanticContext,u.getPredicate());n=new Je({state:u.target,semanticContext:l},e)}else n=new Je({state:u.target},e);return this.debug&&console.log("config from pred transition="+n),n}ruleTransition(e,u){this.debug&&console.log("CALL rule "+this.getRuleName(u.target.ruleIndex)+", ctx="+e.context);let r=u.followState,a=jG.create(e.context,r.stateNumber);return new Je({state:u.target,context:a},e)}getConflictingAlts(e){let u=Ke.getConflictingAltSubsets(e);return Ke.getAlts(u)}getConflictingAltsOrUniqueAlt(e){let u=null;return e.uniqueAlt!==qe.INVALID_ALT_NUMBER?(u=new _g,u.add(e.uniqueAlt)):u=e.conflictingAlts,u}getTokenName(e){if(e===Jt.EOF)return"EOF";if(this.parser!==null&&this.parser.literalNames!==null)if(e>=this.parser.literalNames.length&&e>=this.parser.symbolicNames.length)console.log(""+e+" ttype out of range: "+this.parser.literalNames),console.log(""+this.parser.getInputStream().getTokens());else return(this.parser.literalNames[e]||this.parser.symbolicNames[e])+"<"+e+">";return""+e}getLookaheadName(e){return this.getTokenName(e.LA(1))}dumpDeadEndConfigs(e){console.log("dead end configs: ");let u=e.getDeadEndConfigs();for(let r=0;r0){let n=a.state.transitions[0];n instanceof AtomTransition?s="Atom "+this.getTokenName(n.label):n instanceof VG&&(s=(n instanceof GG?"~":"")+"Set "+n.set)}console.error(a.toString(this.parser,!0)+":"+s)}}noViableAlt(e,u,r,a){return new WG(this.parser,e,e.get(a),e.LT(1),r,u)}getUniqueAlt(e){let u=qe.INVALID_ALT_NUMBER;for(let r=0;r "+a+" upon "+this.getTokenName(r)),a===null)return null;if(a=this.addDFAState(e,a),u===null||r<-1||r>this.atn.maxTokenType)return a;if(u.edges===null&&(u.edges=[]),u.edges[r+1]=a,this.debug){let s=this.parser===null?null:this.parser.literalNames,n=this.parser===null?null:this.parser.symbolicNames;console.log(`DFA= +`+e.toString(s,n))}return a}addDFAState(e,u){if(u===X1.ERROR)return u;let r=e.states.get(u);return r!==null?r:(u.stateNumber=e.states.length,u.configs.readOnly||(u.configs.optimizeConfigs(this),u.configs.setReadonly(!0)),e.states.add(u),this.debug&&console.log("adding new DFA state: "+u),u)}reportAttemptingFullContext(e,u,r,a,s){if(this.debug||this.retry_debug){let n=new MO(a,s+1);console.log("reportAttemptingFullContext decision="+e.decision+":"+r+", input="+this.parser.getTokenStream().getText(n))}this.parser!==null&&this.parser.getErrorListenerDispatch().reportAttemptingFullContext(this.parser,e,a,s,u,r)}reportContextSensitivity(e,u,r,a,s){if(this.debug||this.retry_debug){let n=new MO(a,s+1);console.log("reportContextSensitivity decision="+e.decision+":"+r+", input="+this.parser.getTokenStream().getText(n))}this.parser!==null&&this.parser.getErrorListenerDispatch().reportContextSensitivity(this.parser,e,a,s,u,r)}reportAmbiguity(e,u,r,a,s,n,l){if(this.debug||this.retry_debug){let d=new MO(r,a+1);console.log("reportAmbiguity "+n+":"+l+", input="+this.parser.getTokenStream().getText(d))}this.parser!==null&&this.parser.getErrorListenerDispatch().reportAmbiguity(this.parser,e,r,a,s,n,l)}};c(_O,"ParserATNSimulator");var TO=_O;Rg.exports=TO});var yg=v(cs=>{cs.ATN=yi();cs.ATNDeserializer=PS();cs.LexerATNSimulator=fg();cs.ParserATNSimulator=gg();cs.PredictionMode=LO()});var AO=v(()=>{String.prototype.codePointAt||function(){"use strict";var i=function(){let u;try{let r={},a=Object.defineProperty;u=a(r,r,r)&&a}catch{}return u}();let e=c(function(u){if(this==null)throw TypeError();let r=String(this),a=r.length,s=u?Number(u):0;if(s!==s&&(s=0),s<0||s>=a)return;let n=r.charCodeAt(s),l;return n>=55296&&n<=56319&&a>s+1&&(l=r.charCodeAt(s+1),l>=56320&&l<=57343)?(n-55296)*1024+l-56320+65536:n},"codePointAt");i?i(String.prototype,"codePointAt",{value:e,configurable:!0,writable:!0}):String.prototype.codePointAt=e}()});var J1=v((GZ,Ng)=>{var RO=class RO{constructor(e,u,r){this.dfa=e,this.literalNames=u||[],this.symbolicNames=r||[]}toString(){if(this.dfa.s0===null)return null;let e="",u=this.dfa.sortedStates();for(let r=0;r"),e=e.concat(this.getStateString(l)),e=e.concat(` +`))}}}return e.length===0?null:e}getEdgeLabel(e){return e===0?"EOF":this.literalNames!==null||this.symbolicNames!==null?this.literalNames[e-1]||this.symbolicNames[e-1]:String.fromCharCode(e-1)}getStateString(e){let u=(e.isAcceptState?":":"")+"s"+e.stateNumber+(e.requiresFullContext?"^":"");return e.isAcceptState?e.predicates!==null?u+"=>"+e.predicates.toString():u+"=>"+e.prediction.toString():u}};c(RO,"DFASerializer");var cp=RO,gO=class gO extends cp{constructor(e){super(e,null)}getEdgeLabel(e){return"'"+String.fromCharCode(e)+"'"}};c(gO,"LexerDFASerializer");var YO=gO;Ng.exports={DFASerializer:cp,LexerDFASerializer:YO}});var vg=v((KZ,xg)=>{var{Set:Cg}=nu(),{DFAState:Ig}=os(),{StarLoopEntryState:QG}=Wt(),{ATNConfigSet:bg}=Ii(),{DFASerializer:JG}=J1(),{LexerDFASerializer:$G}=J1(),NO=class NO{constructor(e,u){if(u===void 0&&(u=0),this.atnStartState=e,this.decision=u,this._states=new Cg,this.s0=null,this.precedenceDfa=!1,e instanceof QG&&e.isPrecedenceDecision){this.precedenceDfa=!0;let r=new Ig(null,new bg);r.edges=[],r.isAcceptState=!1,r.requiresFullContext=!1,this.s0=r}}getPrecedenceStartState(e){if(!this.precedenceDfa)throw"Only precedence DFAs may contain a precedence start state.";return e<0||e>=this.s0.edges.length?null:this.s0.edges[e]||null}setPrecedenceStartState(e,u){if(!this.precedenceDfa)throw"Only precedence DFAs may contain a precedence start state.";e<0||(this.s0.edges[e]=u)}setPrecedenceDfa(e){if(this.precedenceDfa!==e){if(this._states=new Cg,e){let u=new Ig(null,new bg);u.edges=[],u.isAcceptState=!1,u.requiresFullContext=!1,this.s0=u}else this.s0=null;this.precedenceDfa=e}}sortedStates(){return this._states.values().sort(function(u,r){return u.stateNumber-r.stateNumber})}toString(e,u){return e=e||null,u=u||null,this.s0===null?"":new JG(this,e,u).toString()}toLexerString(){return this.s0===null?"":new $G(this).toString()}get states(){return this._states}};c(NO,"DFA");var yO=NO;xg.exports=yO});var Dg=v($1=>{$1.DFA=vg();$1.DFASerializer=J1().DFASerializer;$1.LexerDFASerializer=J1().LexerDFASerializer;$1.PredPrediction=os().PredPrediction});var CO=v(()=>{String.fromCodePoint||function(){let i=function(){let a;try{let s={},n=Object.defineProperty;a=n(s,s,s)&&n}catch{}return a}(),e=String.fromCharCode,u=Math.floor,r=c(function(a){let n=[],l,d,p=-1,h=arguments.length;if(!h)return"";let f="";for(;++p1114111||u(S)!==S)throw RangeError("Invalid code point: "+S);S<=65535?n.push(S):(S-=65536,l=(S>>10)+55296,d=S%1024+56320,n.push(l,d)),(p+1===h||n.length>16384)&&(f+=e.apply(null,n),n.length=0)}return f},"fromCodePoint");i?i(String,"fromCodePoint",{value:r,configurable:!0,writable:!0}):String.fromCodePoint=r}()});var Ug=v(($Z,wg)=>{var zG=Ri(),ZG=aS();wg.exports={...zG,Trees:ZG}});var kg=v((zZ,Pg)=>{var{BitSet:eq}=nu(),{ErrorListener:uq}=G1(),{Interval:IO}=Ou(),xO=class xO extends uq{constructor(e){super(),e=e||!0,this.exactOnly=e}reportAmbiguity(e,u,r,a,s,n,l){if(this.exactOnly&&!s)return;let d="reportAmbiguity d="+this.getDecisionDescription(e,u)+": ambigAlts="+this.getConflictingAlts(n,l)+", input='"+e.getTokenStream().getText(new IO(r,a))+"'";e.notifyErrorListeners(d)}reportAttemptingFullContext(e,u,r,a,s,n){let l="reportAttemptingFullContext d="+this.getDecisionDescription(e,u)+", input='"+e.getTokenStream().getText(new IO(r,a))+"'";e.notifyErrorListeners(l)}reportContextSensitivity(e,u,r,a,s,n){let l="reportContextSensitivity d="+this.getDecisionDescription(e,u)+", input='"+e.getTokenStream().getText(new IO(r,a))+"'";e.notifyErrorListeners(l)}getDecisionDescription(e,u){let r=u.decision,a=u.atnStartState.ruleIndex,s=e.ruleNames;if(a<0||a>=s.length)return""+r;let n=s[a]||null;return n===null||n.length===0?""+r:`${r} (${n})`}getConflictingAlts(e,u){if(e!==null)return e;let r=new eq;for(let a=0;a{var{Token:Wr}=Te(),{NoViableAltException:tq,InputMismatchException:dp,FailedPredicateException:rq,ParseCancellationException:iq}=rt(),{ATNState:vi}=Wt(),{Interval:aq,IntervalSet:Fg}=Ou(),wO=class wO{reset(e){}recoverInline(e){}recover(e,u){}sync(e){}inErrorRecoveryMode(e){}reportError(e){}};c(wO,"ErrorStrategy");var vO=wO,UO=class UO extends vO{constructor(){super(),this.errorRecoveryMode=!1,this.lastErrorIndex=-1,this.lastErrorStates=null,this.nextTokensContext=null,this.nextTokenState=0}reset(e){this.endErrorCondition(e)}beginErrorCondition(e){this.errorRecoveryMode=!0}inErrorRecoveryMode(e){return this.errorRecoveryMode}endErrorCondition(e){this.errorRecoveryMode=!1,this.lastErrorStates=null,this.lastErrorIndex=-1}reportMatch(e){this.endErrorCondition(e)}reportError(e,u){this.inErrorRecoveryMode(e)||(this.beginErrorCondition(e),u instanceof tq?this.reportNoViableAlternative(e,u):u instanceof dp?this.reportInputMismatch(e,u):u instanceof rq?this.reportFailedPredicate(e,u):(console.log("unknown recognition error type: "+u.constructor.name),console.log(u.stack),e.notifyErrorListeners(u.getOffendingToken(),u.getMessage(),u)))}recover(e,u){this.lastErrorIndex===e.getInputStream().index&&this.lastErrorStates!==null&&this.lastErrorStates.indexOf(e.state)>=0&&e.consume(),this.lastErrorIndex=e._input.index,this.lastErrorStates===null&&(this.lastErrorStates=[]),this.lastErrorStates.push(e.state);let r=this.getErrorRecoverySet(e);this.consumeUntil(e,r)}sync(e){if(this.inErrorRecoveryMode(e))return;let u=e._interp.atn.states[e.state],r=e.getTokenStream().LA(1),a=e.atn.nextTokens(u);if(a.contains(r)){this.nextTokensContext=null,this.nextTokenState=vi.INVALID_STATE_NUMBER;return}else if(a.contains(Wr.EPSILON)){this.nextTokensContext===null&&(this.nextTokensContext=e._ctx,this.nextTokensState=e._stateNumber);return}switch(u.stateType){case vi.BLOCK_START:case vi.STAR_BLOCK_START:case vi.PLUS_BLOCK_START:case vi.STAR_LOOP_ENTRY:if(this.singleTokenDeletion(e)!==null)return;throw new dp(e);case vi.PLUS_LOOP_BACK:case vi.STAR_LOOP_BACK:this.reportUnwantedToken(e);let s=new Fg;s.addSet(e.getExpectedTokens());let n=s.addSet(this.getErrorRecoverySet(e));this.consumeUntil(e,n);break;default:}}reportNoViableAlternative(e,u){let r=e.getTokenStream(),a;r!==null?u.startToken.type===Wr.EOF?a="":a=r.getText(new aq(u.startToken.tokenIndex,u.offendingToken.tokenIndex)):a="";let s="no viable alternative at input "+this.escapeWSAndQuote(a);e.notifyErrorListeners(s,u.offendingToken,u)}reportInputMismatch(e,u){let r="mismatched input "+this.getTokenErrorDisplay(u.offendingToken)+" expecting "+u.getExpectedTokens().toString(e.literalNames,e.symbolicNames);e.notifyErrorListeners(r,u.offendingToken,u)}reportFailedPredicate(e,u){let a="rule "+e.ruleNames[e._ctx.ruleIndex]+" "+u.message;e.notifyErrorListeners(a,u.offendingToken,u)}reportUnwantedToken(e){if(this.inErrorRecoveryMode(e))return;this.beginErrorCondition(e);let u=e.getCurrentToken(),r=this.getTokenErrorDisplay(u),a=this.getExpectedTokens(e),s="extraneous input "+r+" expecting "+a.toString(e.literalNames,e.symbolicNames);e.notifyErrorListeners(s,u,null)}reportMissingToken(e){if(this.inErrorRecoveryMode(e))return;this.beginErrorCondition(e);let u=e.getCurrentToken(),a="missing "+this.getExpectedTokens(e).toString(e.literalNames,e.symbolicNames)+" at "+this.getTokenErrorDisplay(u);e.notifyErrorListeners(a,u,null)}recoverInline(e){let u=this.singleTokenDeletion(e);if(u!==null)return e.consume(),u;if(this.singleTokenInsertion(e))return this.getMissingSymbol(e);throw new dp(e)}singleTokenInsertion(e){let u=e.getTokenStream().LA(1),r=e._interp.atn,s=r.states[e.state].transitions[0].target;return r.nextTokens(s,e._ctx).contains(u)?(this.reportMissingToken(e),!0):!1}singleTokenDeletion(e){let u=e.getTokenStream().LA(2);if(this.getExpectedTokens(e).contains(u)){this.reportUnwantedToken(e),e.consume();let a=e.getCurrentToken();return this.reportMatch(e),a}else return null}getMissingSymbol(e){let u=e.getCurrentToken(),a=this.getExpectedTokens(e).first(),s;a===Wr.EOF?s="":s="";let n=u,l=e.getTokenStream().LT(-1);return n.type===Wr.EOF&&l!==null&&(n=l),e.getTokenFactory().create(n.source,a,s,Wr.DEFAULT_CHANNEL,-1,-1,n.line,n.column)}getExpectedTokens(e){return e.getExpectedTokens()}getTokenErrorDisplay(e){if(e===null)return"";let u=e.text;return u===null&&(e.type===Wr.EOF?u="":u="<"+e.type+">"),this.escapeWSAndQuote(u)}escapeWSAndQuote(e){return e=e.replace(/\n/g,"\\n"),e=e.replace(/\r/g,"\\r"),e=e.replace(/\t/g,"\\t"),"'"+e+"'"}getErrorRecoverySet(e){let u=e._interp.atn,r=e._ctx,a=new Fg;for(;r!==null&&r.invokingState>=0;){let n=u.states[r.invokingState].transitions[0],l=u.nextTokens(n.followState);a.addSet(l),r=r.parentCtx}return a.removeOne(Wr.EPSILON),a}consumeUntil(e,u){let r=e.getTokenStream().LA(1);for(;r!==Wr.EOF&&!u.contains(r);)e.consume(),r=e.getTokenStream().LA(1)}};c(UO,"DefaultErrorStrategy");var pp=UO,PO=class PO extends pp{constructor(){super()}recover(e,u){let r=e._ctx;for(;r!==null;)r.exception=u,r=r.parentCtx;throw new iq(u)}recoverInline(e){this.recover(e,new dp(e))}sync(e){}};c(PO,"BailErrorStrategy");var DO=PO;Hg.exports={BailErrorStrategy:DO,DefaultErrorStrategy:pp}});var Vg=v((t00,bt)=>{bt.exports.RecognitionException=rt().RecognitionException;bt.exports.NoViableAltException=rt().NoViableAltException;bt.exports.LexerNoViableAltException=rt().LexerNoViableAltException;bt.exports.InputMismatchException=rt().InputMismatchException;bt.exports.FailedPredicateException=rt().FailedPredicateException;bt.exports.DiagnosticErrorListener=kg();bt.exports.BailErrorStrategy=hp().BailErrorStrategy;bt.exports.DefaultErrorStrategy=hp().DefaultErrorStrategy;bt.exports.ErrorListener=G1().ErrorListener});var fp=v((r00,Gg)=>{var{Token:sq}=Te();AO();CO();var FO=class FO{constructor(e,u){if(this.name="",this.strdata=e,this.decodeToUnicodeCodePoints=u||!1,this._index=0,this.data=[],this.decodeToUnicodeCodePoints)for(let r=0;r=this._size)throw"cannot consume EOF";this._index+=1}LA(e){if(e===0)return 0;e<0&&(e+=1);let u=this._index+e-1;return u<0||u>=this._size?sq.EOF:this.data[u]}LT(e){return this.LA(e)}mark(){return-1}release(e){}seek(e){if(e<=this._index){this._index=e;return}this._index=Math.min(e,this._size)}getText(e,u){if(u>=this._size&&(u=this._size-1),e>=this._size)return"";if(this.decodeToUnicodeCodePoints){let r="";for(let a=e;a<=u;a++)r+=String.fromCodePoint(this.data[a]);return r}else return this.strdata.slice(e,u+1)}toString(){return this.strdata}get index(){return this._index}get size(){return this._size}};c(FO,"InputStream");var kO=FO;Gg.exports=kO});var Wg=v((a00,Kg)=>{var z1=fp(),qg=require("fs"),nq={fromString:function(i){return new z1(i,!0)},fromBlob:function(i,e,u,r){let a=new window.FileReader;a.onload=function(s){let n=new z1(s.target.result,!0);u(n)},a.onerror=r,a.readAsText(i,e)},fromBuffer:function(i,e){return new z1(i.toString(e),!0)},fromPath:function(i,e,u){qg.readFile(i,e,function(r,a){let s=null;a!==null&&(s=new z1(a,!0)),u(r,s)})},fromPathSync:function(i,e){let u=qg.readFileSync(i,e);return new z1(u,!0)}};Kg.exports=nq});var Xg=v((s00,jg)=>{var oq=fp(),lq=require("fs"),VO=class VO extends oq{constructor(e,u){let r=lq.readFileSync(e,"utf8");super(r,u),this.fileName=e}};c(VO,"FileStream");var HO=VO;jg.exports=HO});var Jg=v((o00,Qg)=>{var{Token:Di}=Te(),GO=W1(),{Interval:cq}=Ou(),WO=class WO{};c(WO,"TokenStream");var qO=WO,jO=class jO extends qO{constructor(e){super(),this.tokenSource=e,this.tokens=[],this.index=-1,this.fetchedEOF=!1}mark(){return 0}release(e){}reset(){this.seek(0)}seek(e){this.lazyInit(),this.index=this.adjustSeekIndex(e)}get(e){return this.lazyInit(),this.tokens[e]}consume(){let e=!1;if(this.index>=0?this.fetchedEOF?e=this.index0?this.fetch(u)>=u:!0}fetch(e){if(this.fetchedEOF)return 0;for(let u=0;u=this.tokens.length&&(u=this.tokens.length-1);for(let s=e;s=this.tokens.length?this.tokens[this.tokens.length-1]:this.tokens[u]}adjustSeekIndex(e){return e}lazyInit(){this.index===-1&&this.setup()}setup(){this.sync(0),this.index=this.adjustSeekIndex(0)}setTokenSource(e){this.tokenSource=e,this.tokens=[],this.index=-1,this.fetchedEOF=!1}nextTokenOnChannel(e,u){if(this.sync(e),e>=this.tokens.length)return-1;let r=this.tokens[e];for(;r.channel!==this.channel;){if(r.type===Di.EOF)return-1;e+=1,this.sync(e),r=this.tokens[e]}return e}previousTokenOnChannel(e,u){for(;e>=0&&this.tokens[e].channel!==u;)e-=1;return e}getHiddenTokensToRight(e,u){if(u===void 0&&(u=-1),this.lazyInit(),e<0||e>=this.tokens.length)throw""+e+" not in 0.."+this.tokens.length-1;let r=this.nextTokenOnChannel(e+1,GO.DEFAULT_TOKEN_CHANNEL),a=e+1,s=r===-1?this.tokens.length-1:r;return this.filterForChannel(a,s,u)}getHiddenTokensToLeft(e,u){if(u===void 0&&(u=-1),this.lazyInit(),e<0||e>=this.tokens.length)throw""+e+" not in 0.."+this.tokens.length-1;let r=this.previousTokenOnChannel(e-1,GO.DEFAULT_TOKEN_CHANNEL);if(r===e-1)return null;let a=r+1,s=e-1;return this.filterForChannel(a,s,u)}filterForChannel(e,u,r){let a=[];for(let s=e;s=this.tokens.length&&(r=this.tokens.length-1);let a="";for(let s=u;s{var $g=Te().Token,dq=Jg(),QO=class QO extends dq{constructor(e,u){super(e),this.channel=u===void 0?$g.DEFAULT_CHANNEL:u}adjustSeekIndex(e){return this.nextTokenOnChannel(e,this.channel)}LB(e){if(e===0||this.index-e<0)return null;let u=this.index,r=1;for(;r<=e;)u=this.previousTokenOnChannel(u-1,this.channel),r+=1;return u<0?null:this.tokens[u]}LT(e){if(this.lazyInit(),e===0)return null;if(e<0)return this.LB(-e);let u=this.index,r=1;for(;r{var{Token:Z1}=Te(),{ParseTreeListener:pq,TerminalNode:hq,ErrorNode:fq}=Ri(),Sq=KS(),{DefaultErrorStrategy:Oq}=hp(),Lq=PS(),Eq=SS(),mq=W1(),$O=class $O extends pq{constructor(e){super(),this.parser=e}enterEveryRule(e){console.log("enter "+this.parser.ruleNames[e.ruleIndex]+", LT(1)="+this.parser._input.LT(1).text)}visitTerminal(e){console.log("consume "+e.symbol+" rule "+this.parser.ruleNames[this.parser._ctx.ruleIndex])}exitEveryRule(e){console.log("exit "+this.parser.ruleNames[e.ruleIndex]+", LT(1)="+this.parser._input.LT(1).text)}};c($O,"TraceListener");var JO=$O,zO=class zO extends Sq{constructor(e){super(),this._input=null,this._errHandler=new Oq,this._precedenceStack=[],this._precedenceStack.push(0),this._ctx=null,this.buildParseTrees=!0,this._tracer=null,this._parseListeners=null,this._syntaxErrors=0,this.setInputStream(e)}reset(){this._input!==null&&this._input.seek(0),this._errHandler.reset(this),this._ctx=null,this._syntaxErrors=0,this.setTrace(!1),this._precedenceStack=[],this._precedenceStack.push(0),this._interp!==null&&this._interp.reset()}match(e){let u=this.getCurrentToken();return u.type===e?(this._errHandler.reportMatch(this),this.consume()):(u=this._errHandler.recoverInline(this),this.buildParseTrees&&u.tokenIndex===-1&&this._ctx.addErrorNode(u)),u}matchWildcard(){let e=this.getCurrentToken();return e.type>0?(this._errHandler.reportMatch(this),this.consume()):(e=this._errHandler.recoverInline(this),this._buildParseTrees&&e.tokenIndex===-1&&this._ctx.addErrorNode(e)),e}getParseListeners(){return this._parseListeners||[]}addParseListener(e){if(e===null)throw"listener";this._parseListeners===null&&(this._parseListeners=[]),this._parseListeners.push(e)}removeParseListener(e){if(this._parseListeners!==null){let u=this._parseListeners.indexOf(e);u>=0&&this._parseListeners.splice(u,1),this._parseListeners.length===0&&(this._parseListeners=null)}}removeParseListeners(){this._parseListeners=null}triggerEnterRuleEvent(){if(this._parseListeners!==null){let e=this._ctx;this._parseListeners.map(function(u){u.enterEveryRule(e),e.enterRule(u)})}}triggerExitRuleEvent(){if(this._parseListeners!==null){let e=this._ctx;this._parseListeners.slice(0).reverse().map(function(u){e.exitRule(u),u.exitEveryRule(e)})}}getTokenFactory(){return this._input.tokenSource._factory}setTokenFactory(e){this._input.tokenSource._factory=e}getATNWithBypassAlts(){let e=this.getSerializedATN();if(e===null)throw"The current parser does not support an ATN with bypass alternatives.";let u=this.bypassAltsAtnCache[e];if(u===null){let r=new Eq;r.generateRuleBypassTransitions=!0,u=new Lq(r).deserialize(e),this.bypassAltsAtnCache[e]=u}return u}compileParseTreePattern(e,u,r){if(r=r||null,r===null&&this.getTokenStream()!==null){let s=this.getTokenStream().tokenSource;s instanceof mq&&(r=s)}if(r===null)throw"Parser can't discover a lexer to use";return new ParseTreePatternMatcher(r,this).compile(e,u)}getInputStream(){return this.getTokenStream()}setInputStream(e){this.setTokenStream(e)}getTokenStream(){return this._input}setTokenStream(e){this._input=null,this.reset(),this._input=e}getCurrentToken(){return this._input.LT(1)}notifyErrorListeners(e,u,r){u=u||null,r=r||null,u===null&&(u=this.getCurrentToken()),this._syntaxErrors+=1;let a=u.line,s=u.column;this.getErrorListenerDispatch().syntaxError(this,u,a,s,e,r)}consume(){let e=this.getCurrentToken();e.type!==Z1.EOF&&this.getInputStream().consume();let u=this._parseListeners!==null&&this._parseListeners.length>0;if(this.buildParseTrees||u){let r;this._errHandler.inErrorRecoveryMode(this)?r=this._ctx.addErrorNode(e):r=this._ctx.addTokenNode(e),r.invokingState=this.state,u&&this._parseListeners.map(function(a){r instanceof fq||r.isErrorNode!==void 0&&r.isErrorNode()?a.visitErrorNode(r):r instanceof hq&&a.visitTerminal(r)})}return e}addContextToParseTree(){this._ctx.parentCtx!==null&&this._ctx.parentCtx.addChild(this._ctx)}enterRule(e,u,r){this.state=u,this._ctx=e,this._ctx.start=this._input.LT(1),this.buildParseTrees&&this.addContextToParseTree(),this._parseListeners!==null&&this.triggerEnterRuleEvent()}exitRule(){this._ctx.stop=this._input.LT(-1),this._parseListeners!==null&&this.triggerExitRuleEvent(),this.state=this._ctx.invokingState,this._ctx=this._ctx.parentCtx}enterOuterAlt(e,u){e.setAltNumber(u),this.buildParseTrees&&this._ctx!==e&&this._ctx.parentCtx!==null&&(this._ctx.parentCtx.removeLastChild(),this._ctx.parentCtx.addChild(e)),this._ctx=e}getPrecedence(){return this._precedenceStack.length===0?-1:this._precedenceStack[this._precedenceStack.length-1]}enterRecursionRule(e,u,r,a){this.state=u,this._precedenceStack.push(a),this._ctx=e,this._ctx.start=this._input.LT(1),this._parseListeners!==null&&this.triggerEnterRuleEvent()}pushNewRecursionContext(e,u,r){let a=this._ctx;a.parentCtx=e,a.invokingState=u,a.stop=this._input.LT(-1),this._ctx=e,this._ctx.start=a.start,this.buildParseTrees&&this._ctx.addChild(a),this._parseListeners!==null&&this.triggerEnterRuleEvent()}unrollRecursionContexts(e){this._precedenceStack.pop(),this._ctx.stop=this._input.LT(-1);let u=this._ctx;if(this._parseListeners!==null)for(;this._ctx!==e;)this.triggerExitRuleEvent(),this._ctx=this._ctx.parentCtx;else this._ctx=e;u.parentCtx=e,this.buildParseTrees&&e!==null&&e.addChild(u)}getInvokingContext(e){let u=this._ctx;for(;u!==null;){if(u.ruleIndex===e)return u;u=u.parentCtx}return null}precpred(e,u){return u>=this._precedenceStack[this._precedenceStack.length-1]}inContext(e){return!1}isExpectedToken(e){let u=this._interp.atn,r=this._ctx,a=u.states[this.state],s=u.nextTokens(a);if(s.contains(e))return!0;if(!s.contains(Z1.EPSILON))return!1;for(;r!==null&&r.invokingState>=0&&s.contains(Z1.EPSILON);){let l=u.states[r.invokingState].transitions[0];if(s=u.nextTokens(l.followState),s.contains(e))return!0;r=r.parentCtx}return!!(s.contains(Z1.EPSILON)&&e===Z1.EOF)}getExpectedTokens(){return this._interp.atn.getExpectedTokens(this.state,this._ctx)}getExpectedTokensWithinCurrentRule(){let e=this._interp.atn,u=e.states[this.state];return e.nextTokens(u)}getRuleIndex(e){let u=this.getRuleIndexMap()[e];return u!==null?u:-1}getRuleInvocationStack(e){e=e||null,e===null&&(e=this._ctx);let u=[];for(;e!==null;){let r=e.ruleIndex;r<0?u.push("n/a"):u.push(this.ruleNames[r]),e=e.parentCtx}return u}getDFAStrings(){return this._interp.decisionToDFA.toString()}dumpDFA(){let e=!1;for(let u=0;u0&&(e&&console.log(),this.printer.println("Decision "+r.decision+":"),this.printer.print(r.toString(this.literalNames,this.symbolicNames)),e=!0)}}getSourceName(){return this._input.sourceName}setTrace(e){e?(this._tracer!==null&&this.removeParseListener(this._tracer),this._tracer=new JO(this),this.addParseListener(this._tracer)):(this.removeParseListener(this._tracer),this._tracer=null)}};c(zO,"Parser");var Sp=zO;Sp.bypassAltsAtnCache={};ey.exports=Sp});var e2=v(Be=>{Be.atn=yg();Be.codepointat=AO();Be.dfa=Dg();Be.fromcodepoint=CO();Be.tree=Ug();Be.error=Vg();Be.Token=Te().Token;Be.CharStreams=Wg();Be.CommonToken=Te().CommonToken;Be.InputStream=fp();Be.FileStream=Xg();Be.CommonTokenStream=Zg();Be.Lexer=W1();Be.Parser=uy();var Bq=Xt();Be.PredictionContextCache=Bq.PredictionContextCache;Be.ParserRuleContext=mO();Be.Interval=Ou().Interval;Be.IntervalSet=Ou().IntervalSet;Be.Utils=nu();Be.LL1Analyzer=pS().LL1Analyzer});var ry=v((S00,ty)=>{var ds=e2(),Mq=["\u608B\uA72A\u8133\uB9ED\u417C\u3BE7\u7786","\u5964\u016D\u0F01\b  ","   \x07",` \x07\b \b  + +\v \v`,"\f \f\r \r  ","    ","   ","    ","\x1B \x1B  ",'   ! !" "#'," #$ $% %& &' '( () )","* *+ +, ,- -. ./ /0 0","1 12 23 34 45 56 67 7","8 89 9: :; ;< <= => >","? ?@ @A AB BC CD DE E","F FG GH HI IJ JK KL L","M MN NO OP PQ QR RS S","T TU UV VW WX XY YZ Z","[ [\\ \\] ]^ ^_ _` `a a","b bc cd de ef fg gh h","i ij jk kl lm mn no o","p pq qr rs st tu uv v","w wx xy yz z{ {| |} }","~ ~\x7F \x7F\x80 \x80\x81 \x81","\x82 \x82\x83 \x83\x84 \x84\x85 ","\x85\x86 \x86\x87 \x87\x88 \x88","\x89 \x89\x8A \x8A\x8B \x8B\x8C ","\x8C\x8D \x8D\x8E \x8E\x8F \x8F","\x90 \x90\x91 \x91\x92 \x92\x93 ","\x93\x94 \x94\x95 \x95\x96 \x96","\x97 \x97\x98 \x98\x99 \x99\x9A ","\x9A\x9B \x9B\x9C \x9C\x9D \x9D","\x9E \x9E\x9F \x9F\xA0 \xA0\xA1 ","\xA1\xA2 \xA2\xA3 \xA3\xA4 \xA4","\xA5 \xA5\xA6 \xA6\xA7 \xA7\xA8 ","\xA8\xA9 \xA9\xAA \xAA\xAB \xAB","\xAC \xAC\xAD \xAD\xAE \xAE\xAF ","\xAF\xB0 \xB0\xB1 \xB1\xB2 \xB2","\xB3 \xB3\xB4 \xB4\xB5 \xB5\xB6 ","\xB6\xB7 \xB7\xB8 \xB8\xB9 \xB9","\xBA \xBA\xBB \xBB\xBC \xBC\xBD ","\xBD\xBE \xBE\xBF \xBF\xC0 \xC0","\xC1 \xC1\xC2 \xC2\xC3 \xC3\xC4 ","\xC4\xC5 \xC5\xC6 \xC6\xC7 \xC7","\xC8 \xC8\xC9 \xC9\xCA \xCA\xCB ","\xCB\xCC \xCC\xCD \xCD\xCE \xCE","\xCF \xCF\xD0 \xD0\xD1 \xD1\xD2 ","\xD2\xD3 \xD3\xD4 \xD4\xD5 \xD5","\xD6 \xD6\xD7 \xD7\xD8 \xD8\xD9 ","\xD9\xDA \xDA\xDB \xDB\xDC \xDC","\xDD \xDD\xDE \xDE\xDF \xDF\xE0 ","\xE0\xE1 \xE1\xE2 \xE2\xE3 \xE3","\xE4 \xE4\xE5 \xE5\xE6 \xE6\xE7 ","\xE7\xE8 \xE8\xE9 \xE9\xEA \xEA","\xEB \xEB\xEC \xEC\xED \xED\xEE ","\xEE\xEF \xEF\xF0 \xF0\xF1 \xF1","\xF2 \xF2\xF3 \xF3\xF4 \xF4\xF5 ","\xF5\xF6 \xF6\xF7 \xF7\xF8 \xF8","\xF9 \xF9\xFA \xFA\xFB \xFB\xFC ","\xFC\xFD \xFD\xFE \xFE\xFF \xFF","\u0100 \u0100\u0101 \u0101\u0102 \u0102\u0103 ","\u0103\u0104 \u0104\u0105 \u0105\u0106 \u0106","\u0107 \u0107\u0108 \u0108\u0109 \u0109\u010A ","\u010A\u010B \u010B\u010C \u010C\u010D \u010D","\u010E \u010E\u010F \u010F\u0110 \u0110\u0111 ","\u0111\u0112 \u0112\u0113 \u0113\u0114 \u0114","\u0115 \u0115\u0116 \u0116\u0117 \u0117\u0118 ","\u0118\u0119 \u0119\u011A \u011A\u011B \u011B","\u011C \u011C\u011D \u011D\u011E \u011E\u011F ","\u011F\u0120 \u0120\u0121 \u0121\u0122 \u0122","\u0123 \u0123\u0124 \u0124\u0125 \u0125\u0126 ","\u0126\u0127 \u0127\u0128 \u0128\u0129 \u0129","\u012A \u012A\u012B \u012B\u012C \u012C\u012D ","\u012D\u012E \u012E\u012F \u012F\u0130 \u0130","\u0131 \u0131\u0132 \u0132\u0133 \u0133\u0134 ","\u0134\u0135 \u0135\u0136 \u0136\u0137 \u0137","\u0138 \u0138\u0139 \u0139\u013A \u013A\u013B ","\u013B\u013C \u013C\u013D \u013D\u013E \u013E","\u013F \u013F\u0140 \u0140\u0141 \u0141\u0142 ","\u0142\u0143 \u0143\u0144 \u0144\u0145 \u0145","\u0146 \u0146\u0147 \u0147\u0148 \u0148\u0149 ","\u0149\u014A \u014A\u014B \u014B\u014C \u014C","\u014D \u014D\u014E \u014E\u014F \u014F\u0150 ","\u0150\u0151 \u0151\u0152 \u0152\u0153 \u0153","\u0154 \u0154\u0155 \u0155\u0156 \u0156\u0157 ","\u0157\u0158 \u0158\u0159 \u0159\u015A \u015A","\u015B \u015B\u015C \u015C\u015D \u015D\u015E ","\u015E\u015F \u015F\u0160 \u0160\u0161 \u0161","\u0162 \u0162\u0163 \u0163\u0164 \u0164\u0165 ","\u0165\u0166 \u0166\u0167 \u0167\u0168 \u0168","\u0169 \u0169\u016A \u016A\u016B \u016B\u016C ","\u016C\u016D \u016D\u016E \u016E\u016F \u016F","\u0170 \u0170\u0171 \u0171\u0172 \u0172\u0173 ","\u0173\u0174 \u0174\u0175 \u0175\u0176 \u0176","\u0177 \u0177\u0178 \u0178\u0179 \u0179\u017A ","\u017A\u017B \u017B\u017C \u017C\u017D \u017D","\u017E \u017E\u017F \u017F\u0180 \u0180\u0181 ","\u0181\u0182 \u0182\u0183 \u0183\u0184 \u0184","\u0185 \u0185\u0186 \u0186\u0187 \u0187\u0188 ","\u0188\u0189 \u0189\u018A \u018A\u018B \u018B","\u018C \u018C\u018D \u018D\u018E \u018E\u018F ","\u018F\u0190 \u0190\u0191 \u0191\u0192 \u0192","\u0193 \u0193\u0194 \u0194\u0195 \u0195\u0196 ","\u0196\u0197 \u0197\u0198 \u0198\u0199 \u0199","\u019A \u019A\u019B \u019B\u019C \u019C\u019D ","\u019D\u019E \u019E\u019F \u019F\u01A0 \u01A0","\u01A1 \u01A1","","\x07\x07","\x07\b\b     \u035B",` +  + +\v\v\f\f\r`,"\r","","","","","\x1B\x1B"," ",' !!""###$',"$$%%%&&&&'","'((()))***","++,,,--../","/001122334","4556677889","9::;;<<==>",">??@@AABBC","CDDEEFFGGH",`H\u03E7 +H\rHH\u03E8IIJJJ`,`JJ\u03F1 +J\rJJ\u03F2JJJJ`,`J\u03F9 +J\rJJ\u03FAJJJ\u03FF +JK`,`KKKK\u0405 +K\rKK\u0406KK`,`KKK\u040D +K\rKK\u040EKK\u0412 +K`,`LLMM\u0417 +MMMMNN\u041D`,` +NNN\u0420 +NNNNNN\u0426`,` +NNNOOOOOOO`,"OPPPPPPPPP","QQQQQQQQQQ","RRRRRRRRSS","SSSSSSSSSS",`S\u0459 +STTTTTTTU`,"UUUUUUVVVV","VVVWWWWWXX","XXYYYYYZZZ","ZZZ[[[[[[[","[\\\\\\\\\\]]]","]]]]]^^^^^","^_______``","``aaaaaaaa","abbbbbbbbb","bbbbbccccc","cccccccccd","dddddddddd","ddddddeeee","eeeeeeeeee","efffffffff","fffffffffg","gggggggggg","gggggggggh","hhhhhiiiii","iijjjjjkkk","kkkkklllll","llllmmmmmm","mmmmnnnnnn","nnooooooop","ppppppqqqr","rrrrrrrrrs","sstttttuuu","uuuvvvvvvv","wwwwwwwwww","xxxxxxxxxx","yyyyyyyyyz","zzzzzzz{{{","{||||||||}","}}}~~~~~~~","~~~\x7F\x7F\x7F\x7F","\x7F\x7F\x7F\x7F\x80\x80","\x80\x80\x80\x80\x81\x81","\x81\x81\x81\x82\x82\x82","\x83\x83\x83\x83\x83\x83","\x83\x84\x84\x84\x84\x84","\x85\x85\x85\x85\x85\x85","\x85\x85\x86\x86\x86\x86","\x86\x86\x86\x86\x86\x86","\x87\x87\x87\x87\x87\x87","\x87\x88\x88\x88\x88\x88","\x89\x89\x89\x89\x89\x89","\x8A\x8A\x8A\x8A\x8B\x8B","\x8B\x8B\x8B\x8C\x8C\x8C","\x8C\x8C\x8D\x8D\x8D\x8D","\x8D\x8E\x8E\x8E\x8E\x8E","\x8E\x8E\x8F\x8F\x8F\x8F","\x8F\x8F\x90\x90\x90\x90","\x90\x90\x90\x90\x90\x90","\x90\x90\x90\x91\x91\x91","\x91\x91\x91\x91\x91\x91","\x91\x92\x92\x92\x92\x92","\x92\x92\x92\x92\x92\x92","\x92\x92\x92\x92\x92\x92","\x92\x92\x93\x93\x93\x93","\x94\x94\x94\x95\x95\x95","\x95\x95\x96\x96\x96\x97","\x97\x97\x97\x97\x97\x98","\x98\x98\x98\x98\x99\x99","\x99\x99\x99\x99\x99\x9A","\x9A\x9A\x9A\x9A\x9B\x9B","\x9B\x9B\x9B\x9B\x9B\x9C","\x9C\x9C\x9C\x9C\x9C\x9C","\x9D\x9D\x9D\x9D\x9D\x9D","\x9E\x9E\x9E\x9E\x9E\x9E","\x9E\x9E\x9F\x9F\x9F\xA0","\xA0\xA0\xA1\xA1\xA1\xA1","\xA1\xA1\xA2\xA2\xA2\xA2","\xA2\xA2\xA2\xA2\xA3\xA3","\xA3\xA3\xA3\xA3\xA4\xA4","\xA4\xA4\xA4\xA5\xA5\xA5","\xA5\xA5\xA6\xA6\xA6\xA6","\xA6\xA6\xA7\xA7\xA7\xA7","\xA7\xA7\xA8\xA8\xA8\xA8","\xA8\xA8\xA9\xA9\xA9\xA9","\xA9\xA9\xA9\xA9\xAA\xAA","\xAA\xAA\xAA\xAA\xAA\xAA","\xAA\xAA\xAA\xAB\xAB\xAB","\xAB\xAB\xAB\xAB\xAB\xAC","\xAC\xAC\xAC\xAC\xAC\xAC","\xAC\xAC\xAC\xAC\xAD\xAD","\xAD\xAD\xAD\xAD\xAD\xAE","\xAE\xAE\xAE\xAE\xAF\xAF","\xAF\xAF\xAF\xAF\xAF\xB0","\xB0\xB0\xB0\xB0\xB0\xB1","\xB1\xB1\xB1\xB1\xB1\xB2","\xB2\xB2\xB2\xB2\xB3\xB3","\xB3\xB3\xB4\xB4\xB4\xB4","\xB4\xB4\xB5\xB5\xB5\xB5","\xB5\xB5\xB5\xB6\xB6\xB6","\xB6\xB7\xB7\xB7\xB7\xB7","\xB7\xB8\xB8\xB8\xB8\xB8","\xB8\xB8\xB8\xB9\xB9\xB9","\xBA\xBA\xBA\xBA\xBA\xBB","\xBB\xBB\xBB\xBB\xBB\xBC","\xBC\xBC\xBC\xBC\xBC\xBC","\xBC\xBD\xBD\xBD\xBD\xBE","\xBE\xBE\xBE\xBF\xBF\xBF","\xC0\xC0\xC0\xC0\xC1\xC1","\xC1\xC1\xC1\xC1\xC1\xC2","\xC2\xC2\xC2\xC2\xC2\xC2","\xC3\xC3\xC3\xC3\xC3\xC4","\xC4\xC4\xC4\xC4\xC4\xC4","\xC5\xC5\xC5\xC5\xC5\xC5","\xC5\xC6\xC6\xC6\xC6\xC7","\xC7\xC7\xC7\xC8\xC8\xC8","\xC8\xC8\xC8\xC9\xC9\xC9","\xC9\xC9\xC9\xC9\xC9\xCA","\xCA\xCA\xCA\xCA\xCA\xCA","\xCB\xCB\xCB\xCB\xCB\xCC","\xCC\xCC\xCC\xCC\xCC\xCD","\xCD\xCD\xCD\xCD\xCE\xCE","\xCE\xCE\xCF\xCF\xCF\xCF","\xCF\xCF\xCF\xCF\xD0\xD0","\xD0\xD0\xD0\xD0\xD0\xD0","\xD1\xD1\xD1\xD1\xD2\xD2","\xD2\xD2\xD2\xD2\xD2\xD2","\xD3\xD3\xD3\xD3\xD3\xD3","\xD3\xD4\xD4\xD4\xD4\xD4","\xD4\xD4\xD4\xD5\xD5\xD5","\xD5\xD5\xD5\xD6\xD6\xD6","\xD6\xD7\xD7\xD7\xD7\xD8","\xD8\xD8\xD8\xD9\xD9\xD9","\xD9\xD9\xD9\xD9\xD9\xD9","\xDA\xDA\xDA\xDA\xDA\xDA","\xDA\xDA\xDA\xDA\xDA\xDA","\xDB\xDB\xDB\xDB\xDB\xDB","\xDB\xDB\xDB\xDC\xDC\xDC","\xDC\xDD\xDD\xDD\xDD\xDD","\xDD\xDD\xDD\xDD\xDD\xDD","\xDD\xDD\xDE\xDE\xDE\xDE","\xDE\xDE\xDE\xDE\xDE\xDE","\xDF\xDF\xDF\xDF\xDF\xDF","\xDF\xDF\xDF\xE0\xE0\xE0","\xE0\xE0\xE0\xE0\xE0\xE0","\xE0\xE0\xE1\xE1\xE1\xE1","\xE1\xE2\xE2\xE2\xE2\xE2","\xE2\xE2\xE2\xE2\xE2\xE2","\xE3\xE3\xE3\xE3\xE3\xE3","\xE3\xE3\xE3\xE3\xE4\xE4","\xE4\xE4\xE4\xE4\xE4\xE4","\xE4\xE4\xE4\xE4\xE4\xE5","\xE5\xE5\xE5\xE5\xE5\xE6","\xE6\xE6\xE6\xE6\xE7\xE7","\xE7\xE7\xE8\xE8\xE8\xE8","\xE8\xE8\xE8\xE8\xE8\xE8","\xE8\xE8\xE9\xE9\xE9\xE9","\xE9\xE9\xE9\xE9\xE9\xE9","\xE9\xEA\xEA\xEA\xEA\xEA","\xEA\xEA\xEA\xEA\xEA\xEB","\xEB\xEB\xEB\xEB\xEB\xEC","\xEC\xEC\xEC\xEC\xED\xED","\xED\xED\xED\xEE\xEE\xEE","\xEE\xEE\xEE\xEE\xEE\xEF","\xEF\xEF\xEF\xEF\xEF\xF0","\xF0\xF0\xF0\xF0\xF0\xF0","\xF0\xF0\xF0\xF0\xF0\xF0","\xF0\xF1\xF1\xF1\xF1\xF1","\xF1\xF1\xF1\xF1\xF1\xF1","\xF1\xF1\xF1\xF1\xF2\xF2","\xF2\xF2\xF2\xF2\xF2\xF2","\xF3\xF3\xF3\xF3\xF3\xF3","\xF3\xF3\xF3\xF4\xF4\xF4","\xF4\xF4\xF4\xF5\xF5\xF5","\xF5\xF5\xF5\xF5\xF5\xF5","\xF5\xF6\xF6\xF6\xF6\xF6","\xF6\xF6\xF6\xF6\xF6\xF6",`\xF6\xF6\xF6\xF6\xF6\u08F1 +\xF6`,"\xF7\xF7\xF7\xF7\xF7\xF7","\xF7\xF7\xF7\xF7\xF7\xF7","\xF7\xF8\xF8\xF8\xF8\xF8","\xF9\xF9\xF9\xF9\xF9\xF9","\xF9\xFA\xFA\xFA\xFA\xFA","\xFB\xFB\xFB\xFB\xFB\xFB","\xFB\xFB\xFB\xFB\xFC\xFC","\xFC\xFC\xFC\xFC\xFC\xFC","\xFC\xFC\xFC\xFC\xFC\xFC","\xFC\xFC\xFC\xFC\xFC\xFC","\xFC\xFC\xFC\xFC\xFC\xFC",`\xFC\xFC\u0936 +\xFC\xFD\xFD`,"\xFD\xFD\xFD\xFD\xFD\xFD","\xFD\xFD\xFD\xFD\xFD\xFD","\xFD\xFD\xFD\xFD\xFD\xFD","\xFD\xFD\xFD\xFD\xFD\xFD",`\xFD\xFD\u0953 +\xFD\xFE\xFE\xFE`,"\xFE\xFE\xFF\xFF\xFF\xFF","\xFF\u0100\u0100\u0100\u0100\u0100","\u0100\u0100\u0100\u0101\u0101\u0101","\u0101\u0101\u0101\u0101\u0101\u0102","\u0102\u0102\u0102\u0102\u0102\u0102","\u0102\u0103\u0103\u0103\u0103\u0103","\u0103\u0103\u0103\u0104\u0104\u0104","\u0104\u0104\u0104\u0104\u0104\u0104","\u0105\u0105\u0105\u0105\u0105\u0105","\u0105\u0105\u0105\u0106\u0106\u0106","\u0106\u0106\u0106\u0106\u0106\u0107","\u0107\u0107\u0107\u0107\u0107\u0107","\u0107\u0107\u0107\u0107\u0108\u0108","\u0108\u0108\u0109\u0109\u0109\u0109","\u0109\u0109\u0109\u0109\u0109\u010A","\u010A\u010A\u010A\u010A\u010A\u010A","\u010A\u010B\u010B\u010B\u010B\u010B","\u010B\u010B\u010B\u010B\u010B\u010B","\u010B\u010B\u010B\u010C\u010C\u010C","\u010C\u010C\u010C\u010C\u010C\u010C","\u010C\u010C\u010C\u010C\u010C\u010C","\u010D\u010D\u010D\u010D\u010D\u010D","\u010D\u010D\u010D\u010E\u010E\u010E","\u010E\u010E\u010E\u010E\u010E\u010E","\u010F\u010F\u010F\u010F\u010F\u010F","\u010F\u010F\u010F\u010F\u010F\u010F","\u010F\u010F\u0110\u0110\u0110\u0110","\u0110\u0110\u0111\u0111\u0111\u0111","\u0111\u0111\u0111\u0111\u0112\u0112","\u0112\u0112\u0112\u0112\u0112\u0112","\u0112\u0113\u0113\u0113\u0113\u0113","\u0113\u0113\u0113\u0113\u0113\u0114","\u0114\u0114\u0114\u0114\u0114\u0114","\u0114\u0114\u0115\u0115\u0115\u0116","\u0116\u0116\u0116\u0116\u0116\u0116","\u0117\u0117\u0117\u0117\u0117\u0117","\u0117\u0117\u0117\u0117\u0117\u0117","\u0118\u0118\u0118\u0118\u0118\u0118","\u0118\u0118\u0118\u0118\u0118\u0118","\u0118\u0119\u0119\u0119\u0119\u0119","\u0119\u0119\u0119\u0119\u011A\u011A","\u011A\u011A\u011A\u011A\u011A\u011B","\u011B\u011B\u011B\u011B\u011B\u011B","\u011B\u011C\u011C\u011C\u011C\u011C","\u011C\u011C\u011C\u011D\u011D\u011D","\u011D\u011D\u011D\u011D\u011D\u011D","\u011D\u011E\u011E\u011E\u011E\u011E","\u011E\u011E\u011E\u011E\u011F\u011F","\u011F\u011F\u011F\u011F\u011F\u011F","\u011F\u011F\u011F\u011F\u011F\u011F","\u0120\u0120\u0120\u0120\u0120\u0120","\u0120\u0120\u0120\u0121\u0121\u0121","\u0121\u0121\u0121\u0121\u0121\u0121","\u0121\u0121\u0121\u0121\u0121\u0121","\u0121\u0121\u0121\u0121\u0122\u0122","\u0122\u0122\u0122\u0122\u0122\u0122","\u0122\u0122\u0122\u0123\u0123\u0123","\u0123\u0123\u0123\u0123\u0123\u0123","\u0123\u0123\u0123\u0123\u0123\u0123","\u0123\u0124\u0124\u0124\u0124\u0124","\u0124\u0124\u0124\u0124\u0124\u0124","\u0125\u0125\u0125\u0125\u0125\u0125","\u0125\u0125\u0125\u0125\u0125\u0125","\u0125\u0126\u0126\u0126\u0126\u0126","\u0126\u0127\u0127\u0127\u0127\u0127","\u0127\u0127\u0127\u0128\u0128\u0128","\u0128\u0128\u0128\u0129\u0129\u0129","\u0129\u0129\u0129\u0129\u0129\u0129","\u012A\u012A\u012A\u012A\u012A\u012B","\u012B\u012B\u012B\u012B\u012B\u012B","\u012B\u012C\u012C\u012C\u012C\u012C","\u012C\u012C\u012C\u012C\u012D\u012D","\u012D\u012D\u012D\u012E\u012E\u012E","\u012E\u012E\u012E\u012E\u012F\u012F","\u012F\u012F\u012F\u012F\u012F\u012F","\u012F\u012F\u0130\u0130\u0130\u0130","\u0130\u0131\u0131\u0131\u0131\u0131","\u0132\u0132\u0132\u0132\u0132\u0133","\u0133\u0133\u0133\u0133\u0133\u0133","\u0134\u0134\u0134\u0134\u0134\u0134","\u0134\u0134\u0134\u0135\u0135\u0135","\u0135\u0135\u0135\u0135\u0135\u0135",`\u0135\u0135\u0135\u0135\u0B47 +\u0135`,"\u0136\u0136\u0136\u0136\u0136\u0137","\u0137\u0137\u0137\u0137\u0137\u0138","\u0138\u0138\u0138\u0138\u0138\u0138","\u0139\u0139\u0139\u0139\u0139\u0139","\u0139\u013A\u013A\u013A\u013A\u013B","\u013B\u013B\u013B\u013B\u013B\u013B","\u013B\u013B\u013B\u013B\u013B\u013B","\u013B\u013B\u013B\u013B\u013B\u013B","\u013C\u013C\u013C\u013C\u013C\u013C","\u013C\u013C\u013C\u013C\u013C\u013C","\u013C\u013C\u013C\u013C\u013C\u013C","\u013C\u013D\u013D\u013D\u013D\u013D","\u013D\u013D\u013D\u013D\u013D\u013D","\u013D\u013D\u013D\u013E\u013E\u013E","\u013E\u013E\u013E\u013E\u013E\u013E","\u013E\u013E\u013E\u013E\u013E\u013E","\u013E\u013E\u013F\u013F\u013F\u013F","\u013F\u013F\u013F\u013F\u013F\u013F","\u013F\u013F\u0140\u0140\u0140\u0140","\u0140\u0140\u0140\u0140\u0140\u0140","\u0140\u0140\u0141\u0141\u0141\u0141","\u0141\u0141\u0141\u0141\u0141\u0141","\u0141\u0141\u0141\u0141\u0141\u0141","\u0142\u0142\u0142\u0142\u0142\u0142","\u0142\u0142\u0142\u0142\u0142\u0143","\u0143\u0143\u0143\u0143\u0143\u0143","\u0143\u0143\u0143\u0143\u0144\u0144","\u0144\u0144\u0144\u0144\u0144\u0144","\u0144\u0145\u0145\u0145\u0145\u0145","\u0145\u0145\u0145\u0145\u0145\u0145","\u0146\u0146\u0146\u0146\u0146\u0146","\u0147\u0147\u0147\u0147\u0147\u0147","\u0148\u0148\u0148\u0148\u0148\u0149","\u0149\u0149\u0149\u0149\u014A\u014A","\u014A\u014A\u014A\u014A\u014A\u014B","\u014B\u014B\u014B\u014B\u014B\u014B","\u014B\u014B\u014B\u014C\u014C\u014C","\u014C\u014C\u014C\u014C\u014C\u014D","\u014D\u014D\u014D\u014D\u014D\u014D","\u014E\u014E\u014E\u014E\u014E\u014E","\u014F\u014F\u014F\u014F\u0150\u0150","\u0150\u0150\u0150\u0151\u0151\u0151","\u0151\u0151\u0151\u0151\u0151\u0152","\u0152\u0152\u0152\u0152\u0152\u0152","\u0152\u0153\u0153\u0153\u0153\u0153","\u0153\u0153\u0153\u0153\u0154\u0154","\u0154\u0154\u0154\u0154\u0154\u0154","\u0154\u0155\u0155\u0155\u0155\u0155","\u0155\u0155\u0155\u0155\u0156\u0156","\u0156\u0156\u0156\u0156\u0156\u0156","\u0156\u0156\u0157\u0157\u0157\u0157","\u0157\u0157\u0158\u0158\u0158\u0158","\u0158\u0158\u0158\u0158\u0158\u0158","\u0159\u0159\u0159\u0159\u0159\u0159","\u0159\u0159\u0159\u015A\u015A\u015A","\u015A\u015A\u015B\u015B\u015B\u015B","\u015B\u015C\u015C\u015C\u015C\u015C","\u015C\u015D\u015D\u015D\u015D\u015E","\u015E\u015E\u015E\u015E\u015E\u015E","\u015E\u015E\u015E\u015E\u015F\u015F","\u015F\u015F\u015F\u015F\u015F\u015F","\u015F\u0160\u0160\u0160\u0160\u0160","\u0161\u0161\u0161\u0161\u0161\u0161","\u0161\u0161\u0161\u0162\u0162\u0162","\u0162\u0162\u0163\u0163\u0163\u0163","\u0163\u0163\u0163\u0163\u0163\u0163","\u0163\u0164\u0164\u0164\u0164\u0164","\u0164\u0164\u0164\u0164\u0165\u0165","\u0165\u0165\u0165\u0166\u0166\u0166","\u0166\u0166\u0166\u0166\u0167\u0167","\u0167\u0167\u0167\u0167\u0167\u0167","\u0167\u0168\u0168\u0168\u0168\u0168","\u0168\u0168\u0168\u0168\u0169\u0169","\u0169\u0169\u0169\u016A\u016A\u016A","\u016A\u016A\u016A\u016A\u016A\u016B","\u016B\u016B\u016B\u016B\u016B\u016B","\u016B\u016B\u016B\u016B\u016C\u016C","\u016C\u016C\u016C\u016C\u016C\u016C","\u016C\u016C\u016C\u016D\u016D\u016D","\u016D\u016D\u016D\u016D\u016D\u016D","\u016E\u016E\u016E\u016E\u016E\u016E","\u016E\u016E\u016F\u016F\u016F\u016F","\u016F\u016F\u0170\u0170\u0170\u0170","\u0170\u0170\u0170\u0170\u0170\u0171","\u0171\u0171\u0171\u0171\u0171\u0171","\u0172\u0172\u0172\u0172\u0172\u0172","\u0173\u0173\u0173\u0173\u0173\u0173","\u0173\u0173\u0174\u0174\u0174\u0174","\u0174\u0174\u0174\u0174\u0175\u0175","\u0175\u0175\u0175\u0175\u0175\u0176","\u0176\u0176\u0176\u0176\u0176\u0176","\u0176\u0176\u0176\u0177\u0177\u0177","\u0177\u0177\u0177\u0177\u0177\u0178","\u0178\u0178\u0178\u0178\u0178\u0178","\u0179\u0179\u0179\u0179\u0179\u0179","\u0179\u017A\u017A\u017A\u017A\u017A","\u017A\u017A\u017B\u017B\u017B\u017B","\u017B\u017B\u017B\u017C\u017C\u017C","\u017C\u017C\u017C\u017C\u017D\u017D","\u017D\u017D\u017D\u017D\u017D\u017D","\u017D\u017D\u017D\u017D\u017D\u017D","\u017D\u017D\u017D\u017E\u017E\u017E","\u017E\u017E\u017E\u017E\u017E\u017E","\u017E\u017E\u017E\u017E\u017E\u017E","\u017E\u017E\u017F\u017F\u017F\u017F","\u017F\u017F\u017F\u017F\u017F\u017F","\u017F\u017F\u017F\u017F\u017F\u0180","\u0180\u0180\u0180\u0180\u0180\u0180","\u0180\u0180\u0180\u0180\u0180\u0180","\u0180\u0181\u0181\u0181\u0181\u0181","\u0181\u0181\u0181\u0181\u0181\u0181","\u0181\u0181\u0181\u0181\u0182\u0182","\u0182\u0182\u0182\u0182\u0182\u0182","\u0182\u0182\u0182\u0182\u0182\u0182","\u0182\u0182\u0183\u0183\u0183\u0183","\u0183\u0183\u0183\u0183\u0183\u0183","\u0183\u0183\u0183\u0183\u0183\u0183","\u0183\u0183\u0184\u0184\u0184\u0184","\u0184\u0184\u0184\u0184\u0184\u0184","\u0184\u0184\u0184\u0184\u0184\u0185",`\u0185\u0185\u0185\u0186\u0186\u0E1D +\u0186`,`\u0187\u0187\u0187\u0E21 +\u0187\r\u0187\u0187`,`\u0E22\u0188\u0188\u0E26 +\u0188\r\u0188\u0188\u0E27`,`\u0188\u0188\u0188\x07\u0188\u0E2D +\u0188\f\u0188`,`\u0188\u0E30\v\u0188\u0188\u0E32 +\u0188\u0188`,`\u0188\u0E35 +\u0188\r\u0188\u0188\u0E36\u0188`,`\u0188\x07\u0188\u0E3B +\u0188\f\u0188\u0188\u0E3E\v\u0188`,`\u0188\u0188\x07\u0188\u0E42 +\u0188\f\u0188\u0188`,`\u0E45\v\u0188\u0188\u0E47 +\u0188\u0189\u0189`,"\u0189\u018A\u018A\u018B\u018B\u018C",`\u018C\u018D\u018D\x07\u018D\u0E54 +\u018D\f\u018D`,"\u018D\u0E57\v\u018D\u018D\u018D\u018E",`\u018E\x07\u018E\u0E5D +\u018E\f\u018E\u018E\u0E60\v\u018E`,`\u018E\u018E\u018E\u0E64 +\u018E\r\u018E\u018E`,`\u0E65\u018F\u018F\x07\u018F\u0E6A +\u018F\f\u018F`,`\u018F\u0E6D\v\u018F\u018F\u018F\u018F\u0E71 +`,"\u018F\r\u018F\u018F\u0E72\u0190\u0190\x07\u0190",`\u0E77 +\u0190\f\u0190\u0190\u0E7A\v\u0190\u0190`,`\u0190\u0190\u0E7E +\u0190\r\u0190\u0190\u0E7F\u0191`,`\u0191\u0191\u0191\u0191\u0E86 +\u0191\r\u0191`,`\u0191\u0E87\u0192\u0192\x07\u0192\u0E8C +\u0192`,"\f\u0192\u0192\u0E8F\v\u0192\u0192\u0192",`\u0192\u0E93 +\u0192\r\u0192\u0192\u0E94\u0193\u0193`,"\u0193\u0193\u0193\u0193\u0193\x07\u0193",`\u0E9E +\u0193\f\u0193\u0193\u0EA1\v\u0193\u0193`,"\u0193\u0193\u0193\u0193\u0194\u0194","\u0194\u0194\u0194\u0194\u0195\u0195",`\u0195\u0195\x07\u0195\u0EB2 +\u0195\f\u0195\u0195\u0EB5`,"\v\u0195\u0195\u0195\u0196\u0196\u0196","\u0196\u0196\u0197\u0197\u0197\u0197","\u0197\u0197\u0197\u0197\u0197\x07\u0197",`\u0EC7 +\u0197\f\u0197\u0197\u0ECA\v\u0197\u0197`,`\u0197\u0197\u0ECE +\u0197\u0197\u0197\u0198`,`\u0198\x07\u0198\u0ED4 +\u0198\f\u0198\u0198\u0ED7\v`,"\u0198\u0198\u0198\u0199\u0199\x07\u0199\u0EDD",` +\u0199\f\u0199\u0199\u0EE0\v\u0199\u0199\u0199`,`\u0199\u0EE4 +\u0199\u0199\u0199\u019A`,"\u019A\u019A\u019B\u019B\u019C\u019C",`\u019C\u019C\u0EF0 +\u019C\r\u019C\u019C\u0EF1\u019D`,"\u019D\u019D\u019E\u019E\u019E\u019F",`\u019F\u019F\u0EFC +\u019F\u01A0\u01A0`,"\u01A1\u01A1 \u0E55\u0E5E\u0E6B\u0E78\u0E8D\u0E9F\u0EC8","\u01A2\x07 \v\x07\r\b",`  +\v\f\r\x1B`,"!#%')+-",`/13\x1B579;= ?!A"C#E$G%I&K'`,"M(O)Q*S+U,W-Y[]_aceg","ikmoqsuwy{","}\x7F\x81\x83\x85\x87","\x89\x8B\x8D\x8F\x91\x93.","\x95/\x970\x991\x9B2\x9D3\x9F4\xA15\xA36\xA57\xA7","8\xA99\xAB:\xAD;\xAF<\xB1=\xB3>\xB5?\xB7@\xB9A\xBB","B\xBDC\xBFD\xC1E\xC3F\xC5G\xC7H\xC9I\xCBJ\xCDK\xCF","L\xD1M\xD3N\xD5O\xD7P\xD9Q\xDBR\xDDS\xDFT\xE1U\xE3","V\xE5W\xE7X\xE9Y\xEBZ\xED[\xEF\\\xF1]\xF3^\xF5_\xF7","`\xF9a\xFBb\xFDc\xFFd\u0101e\u0103f\u0105g\u0107h\u0109i\u010B","j\u010Dk\u010Fl\u0111m\u0113n\u0115o\u0117p\u0119q\u011Br\u011Ds\u011F","t\u0121u\u0123v\u0125w\u0127x\u0129y\u012Bz\u012D{\u012F|\u0131}\u0133","~\u0135\x7F\u0137\x80\u0139\x81\u013B\x82\u013D\x83\u013F","\x84\u0141\x85\u0143\x86\u0145\x87\u0147\x88\u0149\x89\u014B","\x8A\u014D\x8B\u014F\x8C\u0151\x8D\u0153\x8E\u0155\x8F\u0157","\x90\u0159\x91\u015B\x92\u015D\x93\u015F\x94\u0161\x95\u0163","\x96\u0165\x97\u0167\x98\u0169\x99\u016B\x9A\u016D\x9B\u016F","\x9C\u0171\x9D\u0173\x9E\u0175\x9F\u0177\xA0\u0179\xA1\u017B","\xA2\u017D\xA3\u017F\xA4\u0181\xA5\u0183\xA6\u0185\xA7\u0187","\xA8\u0189\xA9\u018B\xAA\u018D\xAB\u018F\xAC\u0191\xAD\u0193","\xAE\u0195\xAF\u0197\xB0\u0199\xB1\u019B\xB2\u019D\xB3\u019F","\xB4\u01A1\xB5\u01A3\xB6\u01A5\xB7\u01A7\xB8\u01A9\xB9\u01AB","\xBA\u01AD\xBB\u01AF\xBC\u01B1\xBD\u01B3\xBE\u01B5\xBF\u01B7","\xC0\u01B9\xC1\u01BB\xC2\u01BD\xC3\u01BF\xC4\u01C1\xC5\u01C3","\xC6\u01C5\xC7\u01C7\xC8\u01C9\xC9\u01CB\xCA\u01CD\xCB\u01CF","\xCC\u01D1\xCD\u01D3\xCE\u01D5\xCF\u01D7\xD0\u01D9\xD1\u01DB","\xD2\u01DD\xD3\u01DF\xD4\u01E1\xD5\u01E3\xD6\u01E5\xD7\u01E7","\xD8\u01E9\xD9\u01EB\xDA\u01ED\xDB\u01EF\xDC\u01F1\xDD\u01F3","\xDE\u01F5\xDF\u01F7\xE0\u01F9\xE1\u01FB\xE2\u01FD\xE3\u01FF","\xE4\u0201\xE5\u0203\xE6\u0205\xE7\u0207\xE8\u0209\xE9\u020B","\xEA\u020D\xEB\u020F\xEC\u0211\xED\u0213\xEE\u0215\xEF\u0217","\xF0\u0219\xF1\u021B\xF2\u021D\xF3\u021F\xF4\u0221\xF5\u0223","\xF6\u0225\xF7\u0227\xF8\u0229\xF9\u022B\xFA\u022D\xFB\u022F","\xFC\u0231\xFD\u0233\xFE\u0235\xFF\u0237\u0100\u0239\u0101\u023B","\u0102\u023D\u0103\u023F\u0104\u0241\u0105\u0243\u0106\u0245\u0107\u0247","\u0108\u0249\u0109\u024B\u010A\u024D\u010B\u024F\u010C\u0251\u010D\u0253","\u010E\u0255\u010F\u0257\u0110\u0259\u0111\u025B\u0112\u025D\u0113\u025F","\u0114\u0261\u0115\u0263\u0116\u0265\u0117\u0267\u0118\u0269\u0119\u026B","\u011A\u026D\u011B\u026F\u011C\u0271\u011D\u0273\u011E\u0275\u011F\u0277","\u0120\u0279\u0121\u027B\u0122\u027D\u0123\u027F\u0124\u0281\u0125\u0283","\u0126\u0285\u0127\u0287\u0128\u0289\u0129\u028B\u012A\u028D\u012B\u028F","\u012C\u0291\u012D\u0293\u012E\u0295\u012F\u0297\u0130\u0299\u0131\u029B","\u0132\u029D\u0133\u029F\u0134\u02A1\u0135\u02A3\u0136\u02A5\u0137\u02A7","\u0138\u02A9\u0139\u02AB\u013A\u02AD\u013B\u02AF\u013C\u02B1\u013D\u02B3","\u013E\u02B5\u013F\u02B7\u0140\u02B9\u0141\u02BB\u0142\u02BD\u0143\u02BF","\u0144\u02C1\u0145\u02C3\u0146\u02C5\u0147\u02C7\u0148\u02C9\u0149\u02CB","\u014A\u02CD\u014B\u02CF\u014C\u02D1\u014D\u02D3\u014E\u02D5\u014F\u02D7","\u0150\u02D9\u0151\u02DB\u0152\u02DD\u0153\u02DF\u0154\u02E1\u0155\u02E3","\u0156\u02E5\u0157\u02E7\u0158\u02E9\u0159\u02EB\u015A\u02ED\u015B\u02EF","\u02F1\u02F3\u02F5\u02F7\u02F9\u02FB","\u02FD\u02FF\u0301\u0303\u0305\u0307","\u0309\u015C\u030B\u015D\u030D\u015E\u030F\u015F\u0311\u0160\u0313","\u0315\u0317\u0319\u0161\u031B\u0162\u031D\u0163\u031F","\u0164\u0321\u0165\u0323\u0166\u0325\u0167\u0327\u0168\u0329\u0169\u032B","\u016A\u032D\u016B\u032F\u016C\u0331\u016D\u0333\u0335\u0337","\u0339\u033B\u033D\u033F\u0341","'CCccDDddEEee","FFffGGggHHhhIIiiJJj","jKKkkLLllMMmmNNnn","OOooPPppQQqqRRrr","SSssTTttUUuuVVvvWWw","wXXxxYYyyZZzz[[{{","\\\\||2;2;CHch23",`\v\f"" +\r!`,"2;c|\f\f##&&C\\aac|","\x07&&C\\aac|\x82 &&CFH\\aacfh|\x82","\u0F09","\x07 ","\v\r","","","","\x1B","!","#%","')","+-/","13","57","9;","=?","ACE","GI","KM","OQ","SU","W\x93","\x95\x97","\x99\x9B","\x9D\x9F","\xA1\xA3","\xA5\xA7","\xA9\xAB","\xAD\xAF","\xB1\xB3","\xB5\xB7","\xB9\xBB","\xBD\xBF","\xC1\xC3","\xC5\xC7","\xC9\xCB","\xCD\xCF","\xD1\xD3","\xD5\xD7","\xD9\xDB","\xDD\xDF","\xE1\xE3","\xE5\xE7","\xE9\xEB","\xED\xEF","\xF1\xF3","\xF5\xF7","\xF9\xFB","\xFD\xFF","\u0101\u0103","\u0105\u0107","\u0109\u010B","\u010D\u010F","\u0111\u0113","\u0115\u0117","\u0119\u011B","\u011D\u011F","\u0121\u0123","\u0125\u0127","\u0129\u012B","\u012D\u012F","\u0131\u0133","\u0135\u0137","\u0139\u013B","\u013D\u013F","\u0141\u0143","\u0145\u0147","\u0149\u014B","\u014D\u014F","\u0151\u0153","\u0155\u0157","\u0159\u015B","\u015D\u015F","\u0161\u0163","\u0165\u0167","\u0169\u016B","\u016D\u016F","\u0171\u0173","\u0175\u0177","\u0179\u017B","\u017D\u017F","\u0181\u0183","\u0185\u0187","\u0189\u018B","\u018D\u018F","\u0191\u0193","\u0195\u0197","\u0199\u019B","\u019D\u019F","\u01A1\u01A3","\u01A5\u01A7","\u01A9\u01AB","\u01AD\u01AF","\u01B1\u01B3","\u01B5\u01B7","\u01B9\u01BB","\u01BD\u01BF","\u01C1\u01C3","\u01C5\u01C7","\u01C9\u01CB","\u01CD\u01CF","\u01D1\u01D3","\u01D5\u01D7","\u01D9\u01DB","\u01DD\u01DF","\u01E1\u01E3","\u01E5\u01E7","\u01E9\u01EB","\u01ED\u01EF","\u01F1\u01F3","\u01F5\u01F7","\u01F9\u01FB","\u01FD\u01FF","\u0201\u0203","\u0205\u0207","\u0209\u020B","\u020D\u020F","\u0211\u0213","\u0215\u0217","\u0219\u021B","\u021D\u021F","\u0221\u0223","\u0225\u0227","\u0229\u022B","\u022D\u022F","\u0231\u0233","\u0235\u0237","\u0239\u023B","\u023D\u023F","\u0241\u0243","\u0245\u0247","\u0249\u024B","\u024D\u024F","\u0251\u0253","\u0255\u0257","\u0259\u025B","\u025D\u025F","\u0261\u0263","\u0265\u0267","\u0269\u026B","\u026D\u026F","\u0271\u0273","\u0275\u0277","\u0279\u027B","\u027D\u027F","\u0281\u0283","\u0285\u0287","\u0289\u028B","\u028D\u028F","\u0291\u0293","\u0295\u0297","\u0299\u029B","\u029D\u029F","\u02A1\u02A3","\u02A5\u02A7","\u02A9\u02AB","\u02AD\u02AF","\u02B1\u02B3","\u02B5\u02B7","\u02B9\u02BB","\u02BD\u02BF","\u02C1\u02C3","\u02C5\u02C7","\u02C9\u02CB","\u02CD\u02CF","\u02D1\u02D3","\u02D5\u02D7","\u02D9\u02DB","\u02DD\u02DF","\u02E1\u02E3","\u02E5\u02E7","\u02E9\u02EB","\u02ED\u02EF","\u02F1\u02F3","\u02F5\u02F7","\u02F9\u02FB","\u02FD\u02FF","\u0301\u0303","\u0305\u0307","\u0309\u030B","\u030D\u030F","\u0311\u0319","\u031B\u031D","\u031F\u0321","\u0323\u0325","\u0327\u0329","\u032B\u032D","\u032F\u0331","\u0343\u0345\x07","\u0348 \u034C\v","\u034F\r\u0351","\u0354\u035A","\u035C\u035E","\u0360\u0362\x1B","\u0364\u0366","\u0368!\u036A#\u036D","%\u0370'\u0373",")\u0375+\u0377","-\u037A/\u037C","1\u037E3\u0380","5\u03827\u03849\u0386",";\u0388=\u038A","?\u038CA\u038E","C\u0390E\u0392","G\u0395I\u0398","K\u039BM\u039FO\u03A1","Q\u03A4S\u03A7","U\u03AAW\u03AC","Y\u03AF[\u03B1","]\u03B3_\u03B5","a\u03B7c\u03B9e\u03BB","g\u03BDi\u03BF","k\u03C1m\u03C3","o\u03C5q\u03C7","s\u03C9u\u03CB","w\u03CDy\u03CF{\u03D1","}\u03D3\x7F\u03D5","\x81\u03D7\x83\u03D9","\x85\u03DB\x87\u03DD","\x89\u03DF\x8B\u03E1","\x8D\u03E3\x8F\u03E6","\x91\u03EA\x93\u03FE","\x95\u0411\x97\u0413","\x99\u0416\x9B\u041F","\x9D\u0429\x9F\u0431","\xA1\u043A\xA3\u0444","\xA5\u0458\xA7\u045A","\xA9\u0461\xAB\u0468","\xAD\u046F\xAF\u0474","\xB1\u0478\xB3\u047D","\xB5\u0483\xB7\u048B","\xB9\u0490\xBB\u0498","\xBD\u049E\xBF\u04A5","\xC1\u04A9\xC3\u04B2","\xC5\u04C0\xC7\u04CE","\xC9\u04DF\xCB\u04EE","\xCD\u0500\xCF\u0514","\xD1\u051A\xD3\u0521","\xD5\u0526\xD7\u052E","\xD9\u0537\xDB\u0541","\xDD\u0549\xDF\u0550","\xE1\u0557\xE3\u055A","\xE5\u0564\xE7\u0567","\xE9\u056C\xEB\u0572","\xED\u0579\xEF\u0583","\xF1\u058D\xF3\u0596","\xF5\u059E\xF7\u05A2","\xF9\u05AA\xFB\u05AE","\xFD\u05B8\xFF\u05C0","\u0101\u05C6\u0103\u05CB","\u0105\u05CE\u0107\u05D5","\u0109\u05DA\u010B\u05E2","\u010D\u05EC\u010F\u05F3","\u0111\u05F8\u0113\u05FE","\u0115\u0602\u0117\u0607","\u0119\u060C\u011B\u0611","\u011D\u0618\u011F\u061E","\u0121\u062B\u0123\u0635","\u0125\u0648\u0127\u064C","\u0129\u064F\u012B\u0654","\u012D\u0657\u012F\u065D","\u0131\u0662\u0133\u0669","\u0135\u066E\u0137\u0675","\u0139\u067C\u013B\u0682","\u013D\u068A\u013F\u068D","\u0141\u0690\u0143\u0696","\u0145\u069E\u0147\u06A4","\u0149\u06A9\u014B\u06AE","\u014D\u06B4\u014F\u06BA","\u0151\u06C0\u0153\u06C8","\u0155\u06D3\u0157\u06DB","\u0159\u06E6\u015B\u06ED","\u015D\u06F2\u015F\u06F9","\u0161\u06FF\u0163\u0705","\u0165\u070A\u0167\u070E","\u0169\u0714\u016B\u071B","\u016D\u071F\u016F\u0725","\u0171\u072D\u0173\u0730","\u0175\u0735\u0177\u073B","\u0179\u0743\u017B\u0747","\u017D\u074B\u017F\u074E","\u0181\u0752\u0183\u0759","\u0185\u0760\u0187\u0765","\u0189\u076C\u018B\u0773","\u018D\u0777\u018F\u077B","\u0191\u0781\u0193\u0789","\u0195\u0790\u0197\u0795","\u0199\u079B\u019B\u07A0","\u019D\u07A4\u019F\u07AC","\u01A1\u07B4\u01A3\u07B8","\u01A5\u07C0\u01A7\u07C7","\u01A9\u07CF\u01AB\u07D5","\u01AD\u07D9\u01AF\u07DD","\u01B1\u07E1\u01B3\u07EA","\u01B5\u07F6\u01B7\u07FF","\u01B9\u0803\u01BB\u0810","\u01BD\u081A\u01BF\u0823","\u01C1\u082E\u01C3\u0833","\u01C5\u083E\u01C7\u0848","\u01C9\u0855\u01CB\u085B","\u01CD\u0860\u01CF\u0864","\u01D1\u0870\u01D3\u087B","\u01D5\u0885\u01D7\u088B","\u01D9\u0890\u01DB\u0895","\u01DD\u089D\u01DF\u08A3","\u01E1\u08B1\u01E3\u08C0","\u01E5\u08C8\u01E7\u08D1","\u01E9\u08D7\u01EB\u08F0","\u01ED\u08F2\u01EF\u08FF","\u01F1\u0904\u01F3\u090B","\u01F5\u0910\u01F7\u0935","\u01F9\u0952\u01FB\u0954","\u01FD\u0959\u01FF\u095E","\u0201\u0966\u0203\u096E","\u0205\u0976\u0207\u097E","\u0209\u0987\u020B\u0990","\u020D\u0998\u020F\u09A3","\u0211\u09A7\u0213\u09B0","\u0215\u09B8\u0217\u09C6","\u0219\u09D5\u021B\u09DE","\u021D\u09E7\u021F\u09F5","\u0221\u09FB\u0223\u0A03","\u0225\u0A0C\u0227\u0A16","\u0229\u0A1F\u022B\u0A22","\u022D\u0A29\u022F\u0A35","\u0231\u0A42\u0233\u0A4B","\u0235\u0A52\u0237\u0A5A","\u0239\u0A62\u023B\u0A6C","\u023D\u0A75\u023F\u0A83","\u0241\u0A8C\u0243\u0A9F","\u0245\u0AAA\u0247\u0ABA","\u0249\u0AC5\u024B\u0AD2","\u024D\u0AD8\u024F\u0AE0","\u0251\u0AE6\u0253\u0AEF","\u0255\u0AF4\u0257\u0AFC","\u0259\u0B05\u025B\u0B0A","\u025D\u0B11\u025F\u0B1B","\u0261\u0B20\u0263\u0B25","\u0265\u0B2A\u0267\u0B31","\u0269\u0B46\u026B\u0B48","\u026D\u0B4D\u026F\u0B53","\u0271\u0B5A\u0273\u0B61","\u0275\u0B65\u0277\u0B78","\u0279\u0B8B\u027B\u0B99","\u027D\u0BAA\u027F\u0BB6","\u0281\u0BC2\u0283\u0BD2","\u0285\u0BDD\u0287\u0BE8","\u0289\u0BF1\u028B\u0BFC","\u028D\u0C02\u028F\u0C08","\u0291\u0C0D\u0293\u0C12","\u0295\u0C19\u0297\u0C23","\u0299\u0C2B\u029B\u0C32","\u029D\u0C38\u029F\u0C3C","\u02A1\u0C41\u02A3\u0C49","\u02A5\u0C51\u02A7\u0C5A","\u02A9\u0C63\u02AB\u0C6C","\u02AD\u0C76\u02AF\u0C7C","\u02B1\u0C86\u02B3\u0C8F","\u02B5\u0C94\u02B7\u0C99","\u02B9\u0C9F\u02BB\u0CA3","\u02BD\u0CAE\u02BF\u0CB7","\u02C1\u0CBC\u02C3\u0CC5","\u02C5\u0CCA\u02C7\u0CD5","\u02C9\u0CDE\u02CB\u0CE3","\u02CD\u0CEA\u02CF\u0CF3","\u02D1\u0CFC\u02D3\u0D01","\u02D5\u0D09\u02D7\u0D14","\u02D9\u0D1F\u02DB\u0D28","\u02DD\u0D30\u02DF\u0D36","\u02E1\u0D3F\u02E3\u0D46","\u02E5\u0D4C\u02E7\u0D54","\u02E9\u0D5C\u02EB\u0D63","\u02ED\u0D6D\u02EF\u0D75","\u02F1\u0D7C\u02F3\u0D83","\u02F5\u0D8A\u02F7\u0D91","\u02F9\u0D98\u02FB\u0DA9","\u02FD\u0DBA\u02FF\u0DC9","\u0301\u0DD7\u0303\u0DE6","\u0305\u0DF6\u0307\u0E08","\u0309\u0E17\u030B\u0E1C","\u030D\u0E1E\u030F\u0E46","\u0311\u0E48\u0313\u0E4B","\u0315\u0E4D\u0317\u0E4F","\u0319\u0E51\u031B\u0E63","\u031D\u0E70\u031F\u0E7D","\u0321\u0E85\u0323\u0E92","\u0325\u0E96\u0327\u0EA7","\u0329\u0EAD\u032B\u0EB8","\u032D\u0ECD\u032F\u0ED1","\u0331\u0EDA\u0333\u0EE7","\u0335\u0EEA\u0337\u0EEF","\u0339\u0EF3\u033B\u0EF6","\u033D\u0EFB\u033F\u0EFD","\u0341\u0EFF\u0343\u0344","\x07?\u0344\u0345\u0346","\x07<\u0346\u0347\x07?\u0347","\u0348\u0349\x07>\u0349\u034A\x07","?\u034A\u034B\x07@\u034B\b","\u034C\u034D\x07@\u034D\u034E\x07?",`\u034E +\u034F\u0350\x07@\u0350`,"\f\u0351\u0352\x07>\u0352\u0353","\x07?\u0353\u0354\u0355","\x07>\u0355\u0356\u0357","\x07#\u0357\u035B\x07?\u0358\u0359\x07",">\u0359\u035B\x07@\u035A\u0356","\u035A\u0358\u035B","\u035C\u035D\x07-\u035D","\u035E\u035F\x07/\u035F","\u0360\u0361\x07,\u0361","\u0362\u0363\x071\u0363","\u0364\u0365\x07'\u0365","\u0366\u0367\x07#\u0367","\u0368\u0369\x07\x80\u0369 ","\u036A\u036B\x07>\u036B\u036C\x07>",'\u036C"\u036D\u036E\x07@',"\u036E\u036F\x07@\u036F$\u0370","\u0371\x07(\u0371\u0372\x07(\u0372&","\u0373\u0374\x07(\u0374(","\u0375\u0376\x07`\u0376*","\u0377\u0378\x07~\u0378\u0379\x07~","\u0379,\u037A\u037B\x07~\u037B",".\u037C\u037D\x070\u037D0","\u037E\u037F\x07.\u037F2","\u0380\u0381\x07=\u03814","\u0382\u0383\x07<\u03836","\u0384\u0385\x07*\u03858\u0386","\u0387\x07+\u0387:\u0388\u0389","\x07}\u0389<\u038A\u038B\x07","\x7F\u038B>\u038C\u038D\x07","a\u038D@\u038E\u038F\x07]","\u038FB\u0390\u0391\x07_","\u0391D\u0392\u0393\x07}\u0393","\u0394\x07}\u0394F\u0395\u0396","\x07\x7F\u0396\u0397\x07\x7F\u0397H","\u0398\u0399\x07/\u0399\u039A","\x07@\u039AJ\u039B\u039C\x07","/\u039C\u039D\x07@\u039D\u039E\x07@","\u039EL\u039F\u03A0\x07B","\u03A0N\u03A1\u03A2\x07B\u03A2","\u03A3\u0337\u019C\u03A3P\u03A4","\u03A5\x07B\u03A5\u03A6\x07B\u03A6R","\u03A7\u03A8\x07^\u03A8\u03A9\x07","P\u03A9T\u03AA\u03AB\x07A","\u03ABV\u03AC\u03AD\x07<","\u03AD\u03AE\x07<\u03AEX\u03AF","\u03B0 \u03B0Z\u03B1\u03B2"," \u03B2\\\u03B3\u03B4 ","\u03B4^\u03B5\u03B6 ","\u03B6`\u03B7\u03B8 ","\u03B8b\u03B9\u03BA \x07\u03BA","d\u03BB\u03BC \b\u03BCf","\u03BD\u03BE \u03BEh",`\u03BF\u03C0 +\u03C0j\u03C1\u03C2`," \v\u03C2l\u03C3\u03C4 \f","\u03C4n\u03C5\u03C6 \r","\u03C6p\u03C7\u03C8 \u03C8","r\u03C9\u03CA \u03CAt","\u03CB\u03CC \u03CCv","\u03CD\u03CE \u03CEx","\u03CF\u03D0 \u03D0z","\u03D1\u03D2 \u03D2|\u03D3","\u03D4 \u03D4~\u03D5\u03D6"," \u03D6\x80\u03D7\u03D8"," \u03D8\x82\u03D9\u03DA"," \u03DA\x84\u03DB\u03DC"," \u03DC\x86\u03DD\u03DE"," \u03DE\x88\u03DF\u03E0"," \u03E0\x8A\u03E1\u03E2"," \x1B\u03E2\x8C\u03E3\u03E4"," \u03E4\x8E\u03E5\u03E7","\x8DG\u03E6\u03E5\u03E7\u03E8","\u03E8\u03E6\u03E8\u03E9","\u03E9\x90\u03EA\u03EB"," \u03EB\x92\u03EC\u03ED","\x072\u03ED\u03EE\x07z\u03EE\u03F0","\u03EF\u03F1\x91I\u03F0\u03EF","\u03F1\u03F2\u03F2\u03F0","\u03F2\u03F3\u03F3\u03FF","\u03F4\u03F5\x07z\u03F5\u03F6\x07",")\u03F6\u03F8\u03F7\u03F9","\x91I\u03F8\u03F7\u03F9\u03FA","\u03FA\u03F8\u03FA\u03FB","\u03FB\u03FC\u03FC\u03FD\x07",")\u03FD\u03FF\u03FE\u03EC","\u03FE\u03F4\u03FF\x94","\u0400\u0401\x072\u0401\u0402\x07","d\u0402\u0404\u0403\u0405 ","\u0404\u0403\u0405\u0406","\u0406\u0404\u0406\u0407","\u0407\u0412\u0408\u0409\x07d","\u0409\u040A\x07)\u040A\u040C","\u040B\u040D \u040C\u040B","\u040D\u040E\u040E\u040C","\u040E\u040F\u040F\u0410","\u0410\u0412\x07)\u0411\u0400","\u0411\u0408\u0412\x96","\u0413\u0414\x8FH\u0414\x98","\u0415\u0417\x8FH\u0416\u0415","\u0416\u0417\u0417\u0418","\u0418\u0419/\u0419\u041A\x8F","H\u041A\x9A\u041B\u041D\x8F","H\u041C\u041B\u041C\u041D","\u041D\u041E\u041E\u0420/","\u041F\u041C\u041F\u0420","\u0420\u0421\u0421\u0422\x8F","H\u0422\u0425 \u0423\u0426\v",`\u0424\u0426 +\u0425\u0423`,"\u0425\u0424\u0425\u0426","\u0426\u0427\u0427\u0428\x8FH","\u0428\x9C\u0429\u042A\x7F@","\u042A\u042Bi5\u042B\u042Cs:\u042C\u042D","\x89E\u042D\u042Ei5\u042E\u042Fs:","\u042F\u0430\x7F@\u0430\x9E","\u0431\u0432}?\u0432\u0433q9\u0433\u0434","Y-\u0434\u0435o8\u0435\u0436o8\u0436\u0437","i5\u0437\u0438s:\u0438\u0439\x7F@","\u0439\xA0\u043A\u043Bq9\u043B","\u043Ca1\u043C\u043D_0\u043D\u043Ei5","\u043E\u043F\x81A\u043F\u0440q9\u0440\u0441","i5\u0441\u0442s:\u0442\u0443\x7F@","\u0443\xA2\u0444\u0445[.\u0445","\u0446\x89E\u0446\u0447\x7F@\u0447\u0448","a1\u0448\u0449i5\u0449\u044As:\u044A","\u044B\x7F@\u044B\xA4\u044C","\u044Di5\u044D\u044Es:\u044E\u044F\x7F","@\u044F\u0450a1\u0450\u0451e3\u0451\u0452","a1\u0452\u0453{>\u0453\u0459","\u0454\u0455i5\u0455\u0456s:\u0456\u0457","\x7F@\u0457\u0459\u0458\u044C","\u0458\u0454\u0459\xA6","\u045A\u045B[.\u045B\u045C","i5\u045C\u045De3\u045D\u045Ei5\u045E\u045F","s:\u045F\u0460\x7F@\u0460\xA8","\u0461\u0462}?\u0462\u0463a1\u0463","\u0464]/\u0464\u0465u;\u0465\u0466s:","\u0466\u0467_0\u0467\xAA\u0468","\u0469q9\u0469\u046Ai5\u046A\u046Bs:","\u046B\u046C\x81A\u046C\u046D\x7F@\u046D","\u046Ea1\u046E\xAC\u046F\u0470","g4\u0470\u0471u;\u0471\u0472\x81A","\u0472\u0473{>\u0473\xAE\u0474","\u0475_0\u0475\u0476Y-\u0476\u0477\x89","E\u0477\xB0\u0478\u0479\x85","C\u0479\u047Aa1\u047A\u047Ba1\u047B\u047C","m7\u047C\xB2\u047D\u047E","q9\u047E\u047Fu;\u047F\u0480s:\u0480\u0481","\x7F@\u0481\u0482g4\u0482\xB4","\u0483\u0484y=\u0484\u0485\x81A","\u0485\u0486Y-\u0486\u0487{>\u0487\u0488","\x7F@\u0488\u0489a1\u0489\u048A{>\u048A","\xB6\u048B\u048C\x89E\u048C","\u048Da1\u048D\u048EY-\u048E\u048F{>","\u048F\xB8\u0490\u0491_0\u0491","\u0492a1\u0492\u0493c2\u0493\u0494Y-","\u0494\u0495\x81A\u0495\u0496o8\u0496\u0497","\x7F@\u0497\xBA\u0498\u0499","\x81A\u0499\u049As:\u049A\u049Bi5","\u049B\u049Cu;\u049C\u049Ds:\u049D\xBC","\u049E\u049F}?\u049F\u04A0a1","\u04A0\u04A1o8\u04A1\u04A2a1\u04A2\u04A3","]/\u04A3\u04A4\x7F@\u04A4\xBE","\u04A5\u04A6Y-\u04A6\u04A7o8\u04A7\u04A8","o8\u04A8\xC0\u04A9\u04AA","_0\u04AA\u04ABi5\u04AB\u04AC}?\u04AC\u04AD","\x7F@\u04AD\u04AEi5\u04AE\u04AFs:","\u04AF\u04B0]/\u04B0\u04B1\x7F@\u04B1\xC2","\u04B2\u04B3}?\u04B3\u04B4","\x7F@\u04B4\u04B5{>\u04B5\u04B6Y-\u04B6","\u04B7i5\u04B7\u04B8e3\u04B8\u04B9g4","\u04B9\u04BA\x7F@\u04BA\u04BB\x07a\u04BB","\u04BCk6\u04BC\u04BDu;\u04BD\u04BEi5","\u04BE\u04BFs:\u04BF\xC4\u04C0","\u04C1g4\u04C1\u04C2i5\u04C2\u04C3e3","\u04C3\u04C4g4\u04C4\u04C5\x07a\u04C5\u04C6","w<\u04C6\u04C7{>\u04C7\u04C8i5\u04C8","\u04C9u;\u04C9\u04CA{>\u04CA\u04CBi5","\u04CB\u04CC\x7F@\u04CC\u04CD\x89E\u04CD","\xC6\u04CE\u04CF}?\u04CF\u04D0","y=\u04D0\u04D1o8\u04D1\u04D2\x07a","\u04D2\u04D3}?\u04D3\u04D4q9\u04D4\u04D5","Y-\u04D5\u04D6o8\u04D6\u04D7o8\u04D7\u04D8","\x07a\u04D8\u04D9{>\u04D9\u04DAa1","\u04DA\u04DB}?\u04DB\u04DC\x81A\u04DC\u04DD","o8\u04DD\u04DE\x7F@\u04DE\xC8","\u04DF\u04E0}?\u04E0\u04E1y=\u04E1","\u04E2o8\u04E2\u04E3\x07a\u04E3\u04E4","[.\u04E4\u04E5i5\u04E5\u04E6e3\u04E6\u04E7","\x07a\u04E7\u04E8{>\u04E8\u04E9a1","\u04E9\u04EA}?\u04EA\u04EB\x81A\u04EB\u04EC","o8\u04EC\u04ED\x7F@\u04ED\xCA","\u04EE\u04EF}?\u04EF\u04F0y=\u04F0","\u04F1o8\u04F1\u04F2\x07a\u04F2\u04F3","[.\u04F3\u04F4\x81A\u04F4\u04F5c2\u04F5","\u04F6c2\u04F6\u04F7a1\u04F7\u04F8{>","\u04F8\u04F9\x07a\u04F9\u04FA{>\u04FA\u04FB","a1\u04FB\u04FC}?\u04FC\u04FD\x81A","\u04FD\u04FEo8\u04FE\u04FF\x7F@\u04FF\xCC","\u0500\u0501}?\u0501\u0502","y=\u0502\u0503o8\u0503\u0504\x07a\u0504","\u0505]/\u0505\u0506Y-\u0506\u0507o8","\u0507\u0508]/\u0508\u0509\x07a\u0509\u050A","c2\u050A\u050Bu;\u050B\u050C\x81A","\u050C\u050Ds:\u050D\u050E_0\u050E\u050F\x07","a\u050F\u0510{>\u0510\u0511u;\u0511","\u0512\x85C\u0512\u0513}?\u0513\xCE","\u0514\u0515o8\u0515\u0516i5","\u0516\u0517q9\u0517\u0518i5\u0518\u0519","\x7F@\u0519\xD0\u051A\u051B","u;\u051B\u051Cc2\u051C\u051Dc2\u051D\u051E","}?\u051E\u051Fa1\u051F\u0520\x7F@","\u0520\xD2\u0521\u0522i5\u0522","\u0523s:\u0523\u0524\x7F@\u0524\u0525","u;\u0525\xD4\u0526\u0527u;","\u0527\u0528\x81A\u0528\u0529\x7F@\u0529","\u052Ac2\u052A\u052Bi5\u052B\u052Co8","\u052C\u052Da1\u052D\xD6\u052E","\u052F_0\u052F\u0530\x81A\u0530\u0531","q9\u0531\u0532w<\u0532\u0533c2\u0533\u0534","i5\u0534\u0535o8\u0535\u0536a1\u0536","\xD8\u0537\u0538w<\u0538\u0539","{>\u0539\u053Au;\u053A\u053B]/\u053B","\u053Ca1\u053C\u053D_0\u053D\u053E\x81","A\u053E\u053F{>\u053F\u0540a1\u0540\xDA","\u0541\u0542Y-\u0542\u0543","s:\u0543\u0544Y-\u0544\u0545o8\u0545\u0546","\x89E\u0546\u0547}?\u0547\u0548a1","\u0548\xDC\u0549\u054Ag4\u054A","\u054BY-\u054B\u054C\x83B\u054C\u054D","i5\u054D\u054Es:\u054E\u054Fe3\u054F\xDE","\u0550\u0551\x85C\u0551\u0552","i5\u0552\u0553s:\u0553\u0554_0\u0554","\u0555u;\u0555\u0556\x85C\u0556\xE0","\u0557\u0558Y-\u0558\u0559}?","\u0559\xE2\u055A\u055Bw<\u055B","\u055CY-\u055C\u055D{>\u055D\u055E\x7F","@\u055E\u055Fi5\u055F\u0560\x7F@\u0560","\u0561i5\u0561\u0562u;\u0562\u0563s:","\u0563\xE4\u0564\u0565[.\u0565","\u0566\x89E\u0566\xE6\u0567","\u0568{>\u0568\u0569u;\u0569\u056A\x85","C\u056A\u056B}?\u056B\xE8","\u056C\u056D{>\u056D\u056EY-\u056E\u056F","s:\u056F\u0570e3\u0570\u0571a1\u0571\xEA","\u0572\u0573e3\u0573\u0574","{>\u0574\u0575u;\u0575\u0576\x81A\u0576","\u0577w<\u0577\u0578}?\u0578\xEC","\u0579\u057A\x81A\u057A\u057Bs:","\u057B\u057C[.\u057C\u057Du;\u057D\u057E","\x81A\u057E\u057Fs:\u057F\u0580_0\u0580","\u0581a1\u0581\u0582_0\u0582\xEE","\u0583\u0584w<\u0584\u0585{>\u0585","\u0586a1\u0586\u0587]/\u0587\u0588a1","\u0588\u0589_0\u0589\u058Ai5\u058A\u058B","s:\u058B\u058Ce3\u058C\xF0","\u058D\u058Ei5\u058E\u058Fs:\u058F\u0590","\x7F@\u0590\u0591a1\u0591\u0592{>\u0592","\u0593\x83B\u0593\u0594Y-\u0594\u0595","o8\u0595\xF2\u0596\u0597]/","\u0597\u0598\x81A\u0598\u0599{>\u0599\u059A","{>\u059A\u059Ba1\u059B\u059Cs:\u059C","\u059D\x7F@\u059D\xF4\u059E","\u059F{>\u059F\u05A0u;\u05A0\u05A1\x85","C\u05A1\xF6\u05A2\u05A3[.","\u05A3\u05A4a1\u05A4\u05A5\x7F@\u05A5\u05A6","\x85C\u05A6\u05A7a1\u05A7\u05A8a1","\u05A8\u05A9s:\u05A9\xF8\u05AA","\u05ABY-\u05AB\u05ACs:\u05AC\u05AD_0","\u05AD\xFA\u05AE\u05AFc2\u05AF","\u05B0u;\u05B0\u05B1o8\u05B1\u05B2o8","\u05B2\u05B3u;\u05B3\u05B4\x85C\u05B4\u05B5","i5\u05B5\u05B6s:\u05B6\u05B7e3\u05B7","\xFC\u05B8\u05B9a1\u05B9\u05BA","\x87D\u05BA\u05BB]/\u05BB\u05BCo8","\u05BC\u05BD\x81A\u05BD\u05BE_0\u05BE\u05BF","a1\u05BF\xFE\u05C0\u05C1","e3\u05C1\u05C2{>\u05C2\u05C3u;\u05C3\u05C4","\x81A\u05C4\u05C5w<\u05C5\u0100","\u05C6\u05C7\x7F@\u05C7\u05C8i5","\u05C8\u05C9a1\u05C9\u05CA}?\u05CA\u0102","\u05CB\u05CCs:\u05CC\u05CDu;","\u05CD\u0104\u05CE\u05CFu;\u05CF","\u05D0\x7F@\u05D0\u05D1g4\u05D1\u05D2","a1\u05D2\u05D3{>\u05D3\u05D4}?\u05D4\u0106","\u05D5\u05D6\x85C\u05D6\u05D7","i5\u05D7\u05D8\x7F@\u05D8\u05D9g4","\u05D9\u0108\u05DA\u05DB\x85C","\u05DB\u05DCi5\u05DC\u05DD\x7F@\u05DD\u05DE","g4\u05DE\u05DFu;\u05DF\u05E0\x81A","\u05E0\u05E1\x7F@\u05E1\u010A","\u05E2\u05E3{>\u05E3\u05E4a1\u05E4\u05E5","]/\u05E5\u05E6\x81A\u05E6\u05E7{>\u05E7","\u05E8}?\u05E8\u05E9i5\u05E9\u05EA\x83","B\u05EA\u05EBa1\u05EB\u010C","\u05EC\u05ED{>\u05ED\u05EEu;\u05EE\u05EF","o8\u05EF\u05F0o8\u05F0\u05F1\x81A\u05F1","\u05F2w<\u05F2\u010E\u05F3\u05F4","]/\u05F4\u05F5\x81A\u05F5\u05F6[.","\u05F6\u05F7a1\u05F7\u0110\u05F8","\u05F9u;\u05F9\u05FA{>\u05FA\u05FB_0","\u05FB\u05FCa1\u05FC\u05FD{>\u05FD\u0112","\u05FE\u05FFY-\u05FF\u0600}?","\u0600\u0601]/\u0601\u0114\u0602","\u0603_0\u0603\u0604a1\u0604\u0605}?","\u0605\u0606]/\u0606\u0116\u0607","\u0608c2\u0608\u0609{>\u0609\u060Au;","\u060A\u060Bq9\u060B\u0118\u060C","\u060D_0\u060D\u060E\x81A\u060E\u060F","Y-\u060F\u0610o8\u0610\u011A","\u0611\u0612\x83B\u0612\u0613Y-\u0613\u0614","o8\u0614\u0615\x81A\u0615\u0616a1","\u0616\u0617}?\u0617\u011C\u0618","\u0619\x7F@\u0619\u061AY-\u061A\u061B","[.\u061B\u061Co8\u061C\u061Da1\u061D\u011E","\u061E\u061F}?\u061F\u0620","y=\u0620\u0621o8\u0621\u0622\x07a\u0622","\u0623s:\u0623\u0624u;\u0624\u0625\x07a","\u0625\u0626]/\u0626\u0627Y-\u0627\u0628","]/\u0628\u0629g4\u0629\u062Aa1\u062A","\u0120\u062B\u062C}?\u062C\u062D","y=\u062D\u062Eo8\u062E\u062F\x07a","\u062F\u0630]/\u0630\u0631Y-\u0631\u0632","]/\u0632\u0633g4\u0633\u0634a1\u0634\u0122","\u0635\u0636q9\u0636\u0637","Y-\u0637\u0638\x87D\u0638\u0639\x07a","\u0639\u063A}?\u063A\u063B\x7F@\u063B\u063C","Y-\u063C\u063D\x7F@\u063D\u063Ea1","\u063E\u063Fq9\u063F\u0640a1\u0640\u0641","s:\u0641\u0642\x7F@\u0642\u0643\x07a","\u0643\u0644\x7F@\u0644\u0645i5\u0645\u0646","q9\u0646\u0647a1\u0647\u0124","\u0648\u0649c2\u0649\u064Au;\u064A\u064B","{>\u064B\u0126\u064C\u064D","u;\u064D\u064Ec2\u064E\u0128","\u064F\u0650o8\u0650\u0651u;\u0651\u0652","]/\u0652\u0653m7\u0653\u012A","\u0654\u0655i5\u0655\u0656s:\u0656\u012C","\u0657\u0658}?\u0658\u0659g4","\u0659\u065AY-\u065A\u065B{>\u065B\u065C","a1\u065C\u012E\u065D\u065Eq9","\u065E\u065Fu;\u065F\u0660_0\u0660\u0661","a1\u0661\u0130\u0662\u0663\x81","A\u0663\u0664w<\u0664\u0665_0\u0665\u0666","Y-\u0666\u0667\x7F@\u0667\u0668a1","\u0668\u0132\u0669\u066A}?\u066A","\u066Bm7\u066B\u066Ci5\u066C\u066Dw<","\u066D\u0134\u066E\u066Fo8\u066F","\u0670u;\u0670\u0671]/\u0671\u0672m7","\u0672\u0673a1\u0673\u0674_0\u0674\u0136","\u0675\u0676s:\u0676\u0677u;","\u0677\u0678\x85C\u0678\u0679Y-\u0679\u067A","i5\u067A\u067B\x7F@\u067B\u0138","\u067C\u067D\x85C\u067D\u067Eg4","\u067E\u067Fa1\u067F\u0680{>\u0680\u0681","a1\u0681\u013A\u0682\u0683y=","\u0683\u0684\x81A\u0684\u0685Y-\u0685\u0686","o8\u0686\u0687i5\u0687\u0688c2\u0688","\u0689\x89E\u0689\u013C\u068A","\u068Bu;\u068B\u068Ck6\u068C\u013E","\u068D\u068Eu;\u068E\u068Fs:\u068F","\u0140\u0690\u0691\x81A\u0691","\u0692}?\u0692\u0693i5\u0693\u0694s:","\u0694\u0695e3\u0695\u0142\u0696","\u0697s:\u0697\u0698Y-\u0698\u0699\x7F","@\u0699\u069A\x81A\u069A\u069B{>\u069B","\u069CY-\u069C\u069Do8\u069D\u0144","\u069E\u069Fi5\u069F\u06A0s:\u06A0","\u06A1s:\u06A1\u06A2a1\u06A2\u06A3{>","\u06A3\u0146\u06A4\u06A5k6\u06A5","\u06A6u;\u06A6\u06A7i5\u06A7\u06A8s:","\u06A8\u0148\u06A9\u06AAo8\u06AA","\u06ABa1\u06AB\u06ACc2\u06AC\u06AD\x7F","@\u06AD\u014A\u06AE\u06AF{>","\u06AF\u06B0i5\u06B0\u06B1e3\u06B1\u06B2","g4\u06B2\u06B3\x7F@\u06B3\u014C","\u06B4\u06B5u;\u06B5\u06B6\x81A\u06B6","\u06B7\x7F@\u06B7\u06B8a1\u06B8\u06B9","{>\u06B9\u014E\u06BA\u06BB]/","\u06BB\u06BC{>\u06BC\u06BDu;\u06BD\u06BE","}?\u06BE\u06BF}?\u06BF\u0150","\u06C0\u06C1o8\u06C1\u06C2Y-\u06C2\u06C3","\x7F@\u06C3\u06C4a1\u06C4\u06C5{>\u06C5","\u06C6Y-\u06C6\u06C7o8\u06C7\u0152","\u06C8\u06C9k6\u06C9\u06CA}?\u06CA","\u06CBu;\u06CB\u06CCs:\u06CC\u06CD\x07a","\u06CD\u06CE\x7F@\u06CE\u06CFY-\u06CF","\u06D0[.\u06D0\u06D1o8\u06D1\u06D2a1","\u06D2\u0154\u06D3\u06D4]/\u06D4","\u06D5u;\u06D5\u06D6o8\u06D6\u06D7\x81","A\u06D7\u06D8q9\u06D8\u06D9s:\u06D9\u06DA","}?\u06DA\u0156\u06DB\u06DC","u;\u06DC\u06DD{>\u06DD\u06DE_0\u06DE\u06DF","i5\u06DF\u06E0s:\u06E0\u06E1Y-\u06E1","\u06E2o8\u06E2\u06E3i5\u06E3\u06E4\x7F","@\u06E4\u06E5\x89E\u06E5\u0158","\u06E6\u06E7a1\u06E7\u06E8\x87D\u06E8","\u06E9i5\u06E9\u06EA}?\u06EA\u06EB\x7F","@\u06EB\u06EC}?\u06EC\u015A","\u06ED\u06EEw<\u06EE\u06EFY-\u06EF\u06F0","\x7F@\u06F0\u06F1g4\u06F1\u015C","\u06F2\u06F3s:\u06F3\u06F4a1\u06F4\u06F5","}?\u06F5\u06F6\x7F@\u06F6\u06F7a1","\u06F7\u06F8_0\u06F8\u015E\u06F9","\u06FAa1\u06FA\u06FBq9\u06FB\u06FCw<","\u06FC\u06FD\x7F@\u06FD\u06FE\x89E\u06FE","\u0160\u06FF\u0700a1\u0700\u0701","{>\u0701\u0702{>\u0702\u0703u;\u0703","\u0704{>\u0704\u0162\u0705\u0706","s:\u0706\u0707\x81A\u0707\u0708o8","\u0708\u0709o8\u0709\u0164\u070A","\u070B\x81A\u070B\u070C}?\u070C\u070D","a1\u070D\u0166\u070E\u070Fc2","\u070F\u0710u;\u0710\u0711{>\u0711\u0712","]/\u0712\u0713a1\u0713\u0168","\u0714\u0715i5\u0715\u0716e3\u0716\u0717","s:\u0717\u0718u;\u0718\u0719{>\u0719\u071A","a1\u071A\u016A\u071B\u071C","m7\u071C\u071Da1\u071D\u071E\x89E\u071E","\u016C\u071F\u0720i5\u0720\u0721","s:\u0721\u0722_0\u0722\u0723a1\u0723","\u0724\x87D\u0724\u016E\u0725","\u0726w<\u0726\u0727{>\u0727\u0728i5","\u0728\u0729q9\u0729\u072AY-\u072A\u072B","{>\u072B\u072C\x89E\u072C\u0170","\u072D\u072Ei5\u072E\u072F}?\u072F\u0172","\u0730\u0731\x7F@\u0731\u0732","{>\u0732\u0733\x81A\u0733\u0734a1","\u0734\u0174\u0735\u0736c2\u0736","\u0737Y-\u0737\u0738o8\u0738\u0739}?","\u0739\u073Aa1\u073A\u0176\u073B","\u073C\x81A\u073C\u073Ds:\u073D\u073E","m7\u073E\u073Fs:\u073F\u0740u;\u0740\u0741","\x85C\u0741\u0742s:\u0742\u0178","\u0743\u0744s:\u0744\u0745u;\u0745","\u0746\x7F@\u0746\u017A\u0747","\u0748\x87D\u0748\u0749u;\u0749\u074A","{>\u074A\u017C\u074B\u074Cu;","\u074C\u074D{>\u074D\u017E\u074E","\u074FY-\u074F\u0750s:\u0750\u0751\x89","E\u0751\u0180\u0752\u0753q9","\u0753\u0754a1\u0754\u0755q9\u0755\u0756","[.\u0756\u0757a1\u0757\u0758{>\u0758\u0182","\u0759\u075A}?\u075A\u075B","u;\u075B\u075C\x81A\u075C\u075Ds:\u075D","\u075E_0\u075E\u075F}?\u075F\u0184","\u0760\u0761o8\u0761\u0762i5\u0762","\u0763m7\u0763\u0764a1\u0764\u0186","\u0765\u0766a1\u0766\u0767}?\u0767","\u0768]/\u0768\u0769Y-\u0769\u076Aw<","\u076A\u076Ba1\u076B\u0188\u076C","\u076D{>\u076D\u076Ea1\u076E\u076Fe3","\u076F\u0770a1\u0770\u0771\x87D\u0771\u0772","w<\u0772\u018A\u0773\u0774","_0\u0774\u0775i5\u0775\u0776\x83B\u0776","\u018C\u0777\u0778q9\u0778\u0779","u;\u0779\u077A_0\u077A\u018E","\u077B\u077Cq9\u077C\u077DY-\u077D\u077E","\x7F@\u077E\u077F]/\u077F\u0780g4","\u0780\u0190\u0781\u0782Y-\u0782","\u0783e3\u0783\u0784Y-\u0784\u0785i5","\u0785\u0786s:\u0786\u0787}?\u0787\u0788","\x7F@\u0788\u0192\u0789\u078A","[.\u078A\u078Bi5\u078B\u078Cs:\u078C\u078D","Y-\u078D\u078E{>\u078E\u078F\x89E","\u078F\u0194\u0790\u0791]/\u0791","\u0792Y-\u0792\u0793}?\u0793\u0794\x7F","@\u0794\u0196\u0795\u0796Y-","\u0796\u0797{>\u0797\u0798{>\u0798\u0799","Y-\u0799\u079A\x89E\u079A\u0198","\u079B\u079C]/\u079C\u079DY-\u079D\u079E","}?\u079E\u079Fa1\u079F\u019A","\u07A0\u07A1a1\u07A1\u07A2s:\u07A2\u07A3","_0\u07A3\u019C\u07A4\u07A5","]/\u07A5\u07A6u;\u07A6\u07A7s:\u07A7\u07A8","\x83B\u07A8\u07A9a1\u07A9\u07AA{>","\u07AA\u07AB\x7F@\u07AB\u019E","\u07AC\u07AD]/\u07AD\u07AEu;\u07AE\u07AF","o8\u07AF\u07B0o8\u07B0\u07B1Y-\u07B1\u07B2","\x7F@\u07B2\u07B3a1\u07B3\u01A0","\u07B4\u07B5Y-\u07B5\u07B6\x83B","\u07B6\u07B7e3\u07B7\u01A2\u07B8","\u07B9[.\u07B9\u07BAi5\u07BA\u07BB\x7F","@\u07BB\u07BC\x07a\u07BC\u07BDY-\u07BD","\u07BEs:\u07BE\u07BF_0\u07BF\u01A4","\u07C0\u07C1[.\u07C1\u07C2i5\u07C2","\u07C3\x7F@\u07C3\u07C4\x07a\u07C4\u07C5","u;\u07C5\u07C6{>\u07C6\u01A6","\u07C7\u07C8[.\u07C8\u07C9i5\u07C9\u07CA","\x7F@\u07CA\u07CB\x07a\u07CB\u07CC","\x87D\u07CC\u07CDu;\u07CD\u07CE{>\u07CE","\u01A8\u07CF\u07D0]/\u07D0\u07D1","u;\u07D1\u07D2\x81A\u07D2\u07D3s:","\u07D3\u07D4\x7F@\u07D4\u01AA","\u07D5\u07D6q9\u07D6\u07D7i5\u07D7\u07D8","s:\u07D8\u01AC\u07D9\u07DAq9","\u07DA\u07DBY-\u07DB\u07DC\x87D\u07DC\u01AE","\u07DD\u07DE}?\u07DE\u07DF","\x7F@\u07DF\u07E0_0\u07E0\u01B0","\u07E1\u07E2\x83B\u07E2\u07E3Y-\u07E3","\u07E4{>\u07E4\u07E5i5\u07E5\u07E6Y-","\u07E6\u07E7s:\u07E7\u07E8]/\u07E8\u07E9","a1\u07E9\u01B2\u07EA\u07EB}?","\u07EB\u07EC\x7F@\u07EC\u07ED_0\u07ED\u07EE","_0\u07EE\u07EFa1\u07EF\u07F0\x83B","\u07F0\u07F1\x07a\u07F1\u07F2}?\u07F2\u07F3","Y-\u07F3\u07F4q9\u07F4\u07F5w<\u07F5","\u01B4\u07F6\u07F7\x83B\u07F7","\u07F8Y-\u07F8\u07F9{>\u07F9\u07FA\x07a","\u07FA\u07FB}?\u07FB\u07FCY-\u07FC\u07FD","q9\u07FD\u07FEw<\u07FE\u01B6","\u07FF\u0800}?\u0800\u0801\x81A\u0801","\u0802q9\u0802\u01B8\u0803\u0804","e3\u0804\u0805{>\u0805\u0806u;\u0806","\u0807\x81A\u0807\u0808w<\u0808\u0809\x07","a\u0809\u080A]/\u080A\u080Bu;\u080B","\u080Cs:\u080C\u080D]/\u080D\u080EY-","\u080E\u080F\x7F@\u080F\u01BA","\u0810\u0811}?\u0811\u0812a1\u0812\u0813","w<\u0813\u0814Y-\u0814\u0815{>\u0815\u0816","Y-\u0816\u0817\x7F@\u0817\u0818u;","\u0818\u0819{>\u0819\u01BC\u081A","\u081Be3\u081B\u081C{>\u081C\u081Du;","\u081D\u081E\x81A\u081E\u081Fw<\u081F\u0820","i5\u0820\u0821s:\u0821\u0822e3\u0822","\u01BE\u0823\u0824{>\u0824\u0825","u;\u0825\u0826\x85C\u0826\u0827\x07a","\u0827\u0828s:\u0828\u0829\x81A\u0829","\u082Aq9\u082A\u082B[.\u082B\u082Ca1","\u082C\u082D{>\u082D\u01C0\u082E","\u082F{>\u082F\u0830Y-\u0830\u0831s:","\u0831\u0832m7\u0832\u01C2\u0833","\u0834_0\u0834\u0835a1\u0835\u0836s:","\u0836\u0837}?\u0837\u0838a1\u0838\u0839\x07","a\u0839\u083A{>\u083A\u083BY-\u083B","\u083Cs:\u083C\u083Dm7\u083D\u01C4","\u083E\u083F]/\u083F\u0840\x81A","\u0840\u0841q9\u0841\u0842a1\u0842\u0843\x07","a\u0843\u0844_0\u0844\u0845i5\u0845","\u0846}?\u0846\u0847\x7F@\u0847\u01C6","\u0848\u0849w<\u0849\u084Aa1","\u084A\u084B{>\u084B\u084C]/\u084C\u084D","a1\u084D\u084Es:\u084E\u084F\x7F@\u084F","\u0850\x07a\u0850\u0851{>\u0851\u0852","Y-\u0852\u0853s:\u0853\u0854m7\u0854\u01C8","\u0855\u0856s:\u0856\u0857","\x7F@\u0857\u0858i5\u0858\u0859o8\u0859","\u085Aa1\u085A\u01CA\u085B\u085C","o8\u085C\u085Da1\u085D\u085EY-\u085E","\u085F_0\u085F\u01CC\u0860\u0861","o8\u0861\u0862Y-\u0862\u0863e3\u0863","\u01CE\u0864\u0865c2\u0865\u0866","i5\u0866\u0867{>\u0867\u0868}?\u0868","\u0869\x7F@\u0869\u086A\x07a\u086A\u086B","\x83B\u086B\u086CY-\u086C\u086Do8","\u086D\u086E\x81A\u086E\u086Fa1\u086F\u01D0","\u0870\u0871o8\u0871\u0872","Y-\u0872\u0873}?\u0873\u0874\x7F@\u0874","\u0875\x07a\u0875\u0876\x83B\u0876\u0877","Y-\u0877\u0878o8\u0878\u0879\x81A","\u0879\u087Aa1\u087A\u01D2\u087B","\u087Cs:\u087C\u087D\x7F@\u087D\u087E","g4\u087E\u087F\x07a\u087F\u0880\x83B","\u0880\u0881Y-\u0881\u0882o8\u0882\u0883","\x81A\u0883\u0884a1\u0884\u01D4","\u0885\u0886c2\u0886\u0887i5\u0887\u0888","{>\u0888\u0889}?\u0889\u088A\x7F@","\u088A\u01D6\u088B\u088Co8\u088C","\u088DY-\u088D\u088E}?\u088E\u088F\x7F","@\u088F\u01D8\u0890\u0891u;","\u0891\u0892\x83B\u0892\u0893a1\u0893\u0894","{>\u0894\u01DA\u0895\u0896","{>\u0896\u0897a1\u0897\u0898}?\u0898\u0899","w<\u0899\u089Aa1\u089A\u089B]/\u089B","\u089C\x7F@\u089C\u01DC\u089D","\u089Es:\u089E\u089F\x81A\u089F\u08A0","o8\u08A0\u08A1o8\u08A1\u08A2}?\u08A2\u01DE","\u08A3\u08A4k6\u08A4\u08A5","}?\u08A5\u08A6u;\u08A6\u08A7s:\u08A7\u08A8","\x07a\u08A8\u08A9Y-\u08A9\u08AA{>","\u08AA\u08AB{>\u08AB\u08ACY-\u08AC\u08AD","\x89E\u08AD\u08AEY-\u08AE\u08AFe3\u08AF","\u08B0e3\u08B0\u01E0\u08B1\u08B2","k6\u08B2\u08B3}?\u08B3\u08B4u;\u08B4","\u08B5s:\u08B5\u08B6\x07a\u08B6\u08B7","u;\u08B7\u08B8[.\u08B8\u08B9k6\u08B9\u08BA","a1\u08BA\u08BB]/\u08BB\u08BC\x7F@","\u08BC\u08BDY-\u08BD\u08BEe3\u08BE\u08BF","e3\u08BF\u01E2\u08C0\u08C1[.","\u08C1\u08C2u;\u08C2\u08C3u;\u08C3\u08C4","o8\u08C4\u08C5a1\u08C5\u08C6Y-\u08C6\u08C7","s:\u08C7\u01E4\u08C8\u08C9","o8\u08C9\u08CAY-\u08CA\u08CBs:\u08CB\u08CC","e3\u08CC\u08CD\x81A\u08CD\u08CEY-","\u08CE\u08CFe3\u08CF\u08D0a1\u08D0\u01E6","\u08D1\u08D2y=\u08D2\u08D3\x81","A\u08D3\u08D4a1\u08D4\u08D5{>\u08D5\u08D6","\x89E\u08D6\u01E8\u08D7\u08D8","a1\u08D8\u08D9\x87D\u08D9\u08DAw<","\u08DA\u08DBY-\u08DB\u08DCs:\u08DC\u08DD","}?\u08DD\u08DEi5\u08DE\u08DFu;\u08DF\u08E0","s:\u08E0\u01EA\u08E1\u08E2","]/\u08E2\u08E3g4\u08E3\u08E4Y-\u08E4\u08E5","{>\u08E5\u08E6Y-\u08E6\u08E7]/\u08E7","\u08E8\x7F@\u08E8\u08E9a1\u08E9\u08EA","{>\u08EA\u08F1\u08EB\u08EC]/","\u08EC\u08EDg4\u08ED\u08EEY-\u08EE\u08EF","{>\u08EF\u08F1\u08F0\u08E1","\u08F0\u08EB\u08F1\u01EC","\u08F2\u08F3]/\u08F3\u08F4\x81A","\u08F4\u08F5{>\u08F5\u08F6{>\u08F6\u08F7","a1\u08F7\u08F8s:\u08F8\u08F9\x7F@\u08F9","\u08FA\x07a\u08FA\u08FB\x81A\u08FB\u08FC","}?\u08FC\u08FDa1\u08FD\u08FE{>\u08FE","\u01EE\u08FF\u0900_0\u0900\u0901","Y-\u0901\u0902\x7F@\u0902\u0903a1","\u0903\u01F0\u0904\u0905i5\u0905","\u0906s:\u0906\u0907}?\u0907\u0908a1","\u0908\u0909{>\u0909\u090A\x7F@\u090A\u01F2","\u090B\u090C\x7F@\u090C\u090D","i5\u090D\u090Eq9\u090E\u090Fa1\u090F","\u01F4\u0910\u0911\x7F@\u0911","\u0912i5\u0912\u0913q9\u0913\u0914a1","\u0914\u0915}?\u0915\u0916\x7F@\u0916\u0917","Y-\u0917\u0918q9\u0918\u0919w<\u0919","\u01F6\u091A\u091B\x7F@\u091B","\u091Ci5\u091C\u091Dq9\u091D\u091Ea1","\u091E\u091F}?\u091F\u0920\x7F@\u0920\u0921","Y-\u0921\u0922q9\u0922\u0923w<\u0923","\u0924o8\u0924\u0925\x7F@\u0925\u0926","\x8BF\u0926\u0936\u0927\u0928","\x7F@\u0928\u0929i5\u0929\u092Aq9\u092A","\u092Ba1\u092B\u092C}?\u092C\u092D\x7F","@\u092D\u092EY-\u092E\u092Fq9\u092F\u0930","w<\u0930\u0931\x07a\u0931\u0932o8","\u0932\u0933\x7F@\u0933\u0934\x8BF\u0934","\u0936\u0935\u091A\u0935","\u0927\u0936\u01F8\u0937","\u0938\x7F@\u0938\u0939i5\u0939\u093A","q9\u093A\u093Ba1\u093B\u093C}?\u093C\u093D","\x7F@\u093D\u093EY-\u093E\u093Fq9","\u093F\u0940w<\u0940\u0941s:\u0941\u0942","\x7F@\u0942\u0943\x8BF\u0943\u0953","\u0944\u0945\x7F@\u0945\u0946i5","\u0946\u0947q9\u0947\u0948a1\u0948\u0949","}?\u0949\u094A\x7F@\u094A\u094BY-\u094B","\u094Cq9\u094C\u094Dw<\u094D\u094E\x07a","\u094E\u094Fs:\u094F\u0950\x7F@\u0950","\u0951\x8BF\u0951\u0953\u0952","\u0937\u0952\u0944\u0953","\u01FA\u0954\u0955\x8BF\u0955","\u0956u;\u0956\u0957s:\u0957\u0958a1","\u0958\u01FC\u0959\u095A\x81A","\u095A\u095B}?\u095B\u095Ca1\u095C\u095D","{>\u095D\u01FE\u095E\u095FY-","\u095F\u0960_0\u0960\u0961_0\u0961\u0962","_0\u0962\u0963Y-\u0963\u0964\x7F@\u0964","\u0965a1\u0965\u0200\u0966\u0967","}?\u0967\u0968\x81A\u0968\u0969[.","\u0969\u096A_0\u096A\u096BY-\u096B\u096C","\x7F@\u096C\u096Da1\u096D\u0202","\u096E\u096F]/\u096F\u0970\x81A\u0970","\u0971{>\u0971\u0972_0\u0972\u0973Y-","\u0973\u0974\x7F@\u0974\u0975a1\u0975\u0204","\u0976\u0977]/\u0977\u0978","\x81A\u0978\u0979{>\u0979\u097A\x7F@","\u097A\u097Bi5\u097B\u097Cq9\u097C\u097D","a1\u097D\u0206\u097E\u097F_0","\u097F\u0980Y-\u0980\u0981\x7F@\u0981\u0982","a1\u0982\u0983\x07a\u0983\u0984Y-","\u0984\u0985_0\u0985\u0986_0\u0986\u0208","\u0987\u0988_0\u0988\u0989Y-","\u0989\u098A\x7F@\u098A\u098Ba1\u098B\u098C","\x07a\u098C\u098D}?\u098D\u098E\x81","A\u098E\u098F[.\u098F\u020A","\u0990\u0991a1\u0991\u0992\x87D\u0992\u0993","\x7F@\u0993\u0994{>\u0994\u0995Y-","\u0995\u0996]/\u0996\u0997\x7F@\u0997\u020C","\u0998\u0999e3\u0999\u099A","a1\u099A\u099B\x7F@\u099B\u099C\x07a","\u099C\u099Dc2\u099D\u099Eu;\u099E\u099F","{>\u099F\u09A0q9\u09A0\u09A1Y-\u09A1\u09A2","\x7F@\u09A2\u020E\u09A3\u09A4","s:\u09A4\u09A5u;\u09A5\u09A6\x85C","\u09A6\u0210\u09A7\u09A8w<\u09A8","\u09A9u;\u09A9\u09AA}?\u09AA\u09ABi5","\u09AB\u09AC\x7F@\u09AC\u09ADi5\u09AD\u09AE","u;\u09AE\u09AFs:\u09AF\u0212","\u09B0\u09B1}?\u09B1\u09B2\x89E\u09B2","\u09B3}?\u09B3\u09B4_0\u09B4\u09B5Y-","\u09B5\u09B6\x7F@\u09B6\u09B7a1\u09B7\u0214","\u09B8\u09B9\x7F@\u09B9\u09BA","i5\u09BA\u09BBq9\u09BB\u09BCa1\u09BC","\u09BD}?\u09BD\u09BE\x7F@\u09BE\u09BF","Y-\u09BF\u09C0q9\u09C0\u09C1w<\u09C1\u09C2","\x07a\u09C2\u09C3Y-\u09C3\u09C4_0","\u09C4\u09C5_0\u09C5\u0216\u09C6","\u09C7\x7F@\u09C7\u09C8i5\u09C8\u09C9","q9\u09C9\u09CAa1\u09CA\u09CB}?\u09CB\u09CC","\x7F@\u09CC\u09CDY-\u09CD\u09CEq9","\u09CE\u09CFw<\u09CF\u09D0\x07a\u09D0\u09D1","_0\u09D1\u09D2i5\u09D2\u09D3c2\u09D3","\u09D4c2\u09D4\u0218\u09D5\u09D6","\x81A\u09D6\u09D7\x7F@\u09D7\u09D8","]/\u09D8\u09D9\x07a\u09D9\u09DA_0\u09DA","\u09DBY-\u09DB\u09DC\x7F@\u09DC\u09DD","a1\u09DD\u021A\u09DE\u09DF\x81","A\u09DF\u09E0\x7F@\u09E0\u09E1]/\u09E1","\u09E2\x07a\u09E2\u09E3\x7F@\u09E3\u09E4","i5\u09E4\u09E5q9\u09E5\u09E6a1\u09E6","\u021C\u09E7\u09E8\x81A\u09E8","\u09E9\x7F@\u09E9\u09EA]/\u09EA\u09EB\x07","a\u09EB\u09EC\x7F@\u09EC\u09EDi5","\u09ED\u09EEq9\u09EE\u09EFa1\u09EF\u09F0","}?\u09F0\u09F1\x7F@\u09F1\u09F2Y-\u09F2","\u09F3q9\u09F3\u09F4w<\u09F4\u021E","\u09F5\u09F6Y-\u09F6\u09F7}?\u09F7","\u09F8]/\u09F8\u09F9i5\u09F9\u09FAi5","\u09FA\u0220\u09FB\u09FC]/\u09FC","\u09FDg4\u09FD\u09FEY-\u09FE\u09FF{>","\u09FF\u0A00}?\u0A00\u0A01a1\u0A01\u0A02","\x7F@\u0A02\u0222\u0A03\u0A04","]/\u0A04\u0A05u;\u0A05\u0A06Y-\u0A06\u0A07","o8\u0A07\u0A08a1\u0A08\u0A09}?\u0A09","\u0A0A]/\u0A0A\u0A0Ba1\u0A0B\u0224","\u0A0C\u0A0D]/\u0A0D\u0A0Eu;\u0A0E","\u0A0Fo8\u0A0F\u0A10o8\u0A10\u0A11Y-","\u0A11\u0A12\x7F@\u0A12\u0A13i5\u0A13\u0A14","u;\u0A14\u0A15s:\u0A15\u0226","\u0A16\u0A17_0\u0A17\u0A18Y-\u0A18\u0A19","\x7F@\u0A19\u0A1AY-\u0A1A\u0A1B[.","\u0A1B\u0A1CY-\u0A1C\u0A1D}?\u0A1D\u0A1E","a1\u0A1E\u0228\u0A1F\u0A20i5","\u0A20\u0A21c2\u0A21\u022A\u0A22","\u0A23c2\u0A23\u0A24u;\u0A24\u0A25{>","\u0A25\u0A26q9\u0A26\u0A27Y-\u0A27\u0A28","\x7F@\u0A28\u022C\u0A29\u0A2A","q9\u0A2A\u0A2Bi5\u0A2B\u0A2C]/\u0A2C\u0A2D","{>\u0A2D\u0A2Eu;\u0A2E\u0A2F}?\u0A2F","\u0A30a1\u0A30\u0A31]/\u0A31\u0A32u;","\u0A32\u0A33s:\u0A33\u0A34_0\u0A34\u022E","\u0A35\u0A36u;\u0A36\u0A37o8","\u0A37\u0A38_0\u0A38\u0A39\x07a\u0A39\u0A3A","w<\u0A3A\u0A3BY-\u0A3B\u0A3C}?\u0A3C","\u0A3D}?\u0A3D\u0A3E\x85C\u0A3E\u0A3F","u;\u0A3F\u0A40{>\u0A40\u0A41_0\u0A41\u0230","\u0A42\u0A43w<\u0A43\u0A44","Y-\u0A44\u0A45}?\u0A45\u0A46}?\u0A46\u0A47","\x85C\u0A47\u0A48u;\u0A48\u0A49{>","\u0A49\u0A4A_0\u0A4A\u0232\u0A4B","\u0A4C{>\u0A4C\u0A4Da1\u0A4D\u0A4Ew<","\u0A4E\u0A4Fa1\u0A4F\u0A50Y-\u0A50\u0A51","\x7F@\u0A51\u0234\u0A52\u0A53","{>\u0A53\u0A54a1\u0A54\u0A55w<\u0A55\u0A56","o8\u0A56\u0A57Y-\u0A57\u0A58]/\u0A58","\u0A59a1\u0A59\u0236\u0A5A\u0A5B","{>\u0A5B\u0A5Ca1\u0A5C\u0A5D\x83B","\u0A5D\u0A5Ea1\u0A5E\u0A5F{>\u0A5F\u0A60","}?\u0A60\u0A61a1\u0A61\u0238","\u0A62\u0A63{>\u0A63\u0A64u;\u0A64\u0A65","\x85C\u0A65\u0A66\x07a\u0A66\u0A67]/","\u0A67\u0A68u;\u0A68\u0A69\x81A\u0A69\u0A6A","s:\u0A6A\u0A6B\x7F@\u0A6B\u023A","\u0A6C\u0A6D\x7F@\u0A6D\u0A6E{>","\u0A6E\u0A6F\x81A\u0A6F\u0A70s:\u0A70\u0A71","]/\u0A71\u0A72Y-\u0A72\u0A73\x7F@","\u0A73\u0A74a1\u0A74\u023C\u0A75","\u0A76\x85C\u0A76\u0A77a1\u0A77\u0A78","i5\u0A78\u0A79e3\u0A79\u0A7Ag4\u0A7A\u0A7B","\x7F@\u0A7B\u0A7C\x07a\u0A7C\u0A7D","}?\u0A7D\u0A7E\x7F@\u0A7E\u0A7F{>\u0A7F","\u0A80i5\u0A80\u0A81s:\u0A81\u0A82e3","\u0A82\u023E\u0A83\u0A84]/\u0A84","\u0A85u;\u0A85\u0A86s:\u0A86\u0A87\x7F","@\u0A87\u0A88Y-\u0A88\u0A89i5\u0A89\u0A8A","s:\u0A8A\u0A8B}?\u0A8B\u0240","\u0A8C\u0A8De3\u0A8D\u0A8Ea1\u0A8E\u0A8F","u;\u0A8F\u0A90q9\u0A90\u0A91a1\u0A91","\u0A92\x7F@\u0A92\u0A93{>\u0A93\u0A94","\x89E\u0A94\u0A95]/\u0A95\u0A96u;\u0A96","\u0A97o8\u0A97\u0A98o8\u0A98\u0A99a1","\u0A99\u0A9A]/\u0A9A\u0A9B\x7F@\u0A9B\u0A9C","i5\u0A9C\u0A9Du;\u0A9D\u0A9Es:\u0A9E","\u0242\u0A9F\u0AA0o8\u0AA0\u0AA1","i5\u0AA1\u0AA2s:\u0AA2\u0AA3a1\u0AA3","\u0AA4}?\u0AA4\u0AA5\x7F@\u0AA5\u0AA6","{>\u0AA6\u0AA7i5\u0AA7\u0AA8s:\u0AA8\u0AA9","e3\u0AA9\u0244\u0AAA\u0AAB","q9\u0AAB\u0AAC\x81A\u0AAC\u0AADo8\u0AAD","\u0AAE\x7F@\u0AAE\u0AAFi5\u0AAF\u0AB0","o8\u0AB0\u0AB1i5\u0AB1\u0AB2s:\u0AB2\u0AB3","a1\u0AB3\u0AB4}?\u0AB4\u0AB5\x7F@","\u0AB5\u0AB6{>\u0AB6\u0AB7i5\u0AB7\u0AB8","s:\u0AB8\u0AB9e3\u0AB9\u0246","\u0ABA\u0ABBq9\u0ABB\u0ABC\x81A\u0ABC\u0ABD","o8\u0ABD\u0ABE\x7F@\u0ABE\u0ABFi5","\u0ABF\u0AC0w<\u0AC0\u0AC1u;\u0AC1\u0AC2","i5\u0AC2\u0AC3s:\u0AC3\u0AC4\x7F@\u0AC4","\u0248\u0AC5\u0AC6q9\u0AC6\u0AC7","\x81A\u0AC7\u0AC8o8\u0AC8\u0AC9\x7F","@\u0AC9\u0ACAi5\u0ACA\u0ACBw<\u0ACB\u0ACC","u;\u0ACC\u0ACDo8\u0ACD\u0ACE\x89E","\u0ACE\u0ACFe3\u0ACF\u0AD0u;\u0AD0\u0AD1","s:\u0AD1\u024A\u0AD2\u0AD3w<","\u0AD3\u0AD4u;\u0AD4\u0AD5i5\u0AD5\u0AD6","s:\u0AD6\u0AD7\x7F@\u0AD7\u024C","\u0AD8\u0AD9w<\u0AD9\u0ADAu;\u0ADA\u0ADB","o8\u0ADB\u0ADC\x89E\u0ADC\u0ADDe3","\u0ADD\u0ADEu;\u0ADE\u0ADFs:\u0ADF\u024E","\u0AE0\u0AE1o8\u0AE1\u0AE2a1","\u0AE2\u0AE3\x83B\u0AE3\u0AE4a1\u0AE4\u0AE5","o8\u0AE5\u0250\u0AE6\u0AE7","_0\u0AE7\u0AE8Y-\u0AE8\u0AE9\x7F@\u0AE9","\u0AEAa1\u0AEA\u0AEB\x7F@\u0AEB\u0AEC","i5\u0AEC\u0AEDq9\u0AED\u0AEEa1\u0AEE\u0252","\u0AEF\u0AF0\x7F@\u0AF0\u0AF1","{>\u0AF1\u0AF2i5\u0AF2\u0AF3q9\u0AF3","\u0254\u0AF4\u0AF5o8\u0AF5\u0AF6","a1\u0AF6\u0AF7Y-\u0AF7\u0AF8_0\u0AF8","\u0AF9i5\u0AF9\u0AFAs:\u0AFA\u0AFBe3","\u0AFB\u0256\u0AFC\u0AFD\x7F@","\u0AFD\u0AFE{>\u0AFE\u0AFFY-\u0AFF\u0B00","i5\u0B00\u0B01o8\u0B01\u0B02i5\u0B02\u0B03","s:\u0B03\u0B04e3\u0B04\u0258","\u0B05\u0B06[.\u0B06\u0B07u;\u0B07\u0B08","\x7F@\u0B08\u0B09g4\u0B09\u025A","\u0B0A\u0B0B}?\u0B0B\u0B0C\x7F@","\u0B0C\u0B0D{>\u0B0D\u0B0Ei5\u0B0E\u0B0F","s:\u0B0F\u0B10e3\u0B10\u025C","\u0B11\u0B12}?\u0B12\u0B13\x81A\u0B13\u0B14","[.\u0B14\u0B15}?\u0B15\u0B16\x7F@","\u0B16\u0B17{>\u0B17\u0B18i5\u0B18\u0B19","s:\u0B19\u0B1Ae3\u0B1A\u025E","\u0B1B\u0B1C\x85C\u0B1C\u0B1Dg4\u0B1D\u0B1E","a1\u0B1E\u0B1Fs:\u0B1F\u0260","\u0B20\u0B21\x7F@\u0B21\u0B22g4\u0B22","\u0B23a1\u0B23\u0B24s:\u0B24\u0262","\u0B25\u0B26a1\u0B26\u0B27o8\u0B27","\u0B28}?\u0B28\u0B29a1\u0B29\u0264","\u0B2A\u0B2B}?\u0B2B\u0B2Ci5\u0B2C","\u0B2De3\u0B2D\u0B2Es:\u0B2E\u0B2Fa1","\u0B2F\u0B30_0\u0B30\u0266\u0B31","\u0B32\x81A\u0B32\u0B33s:\u0B33\u0B34","}?\u0B34\u0B35i5\u0B35\u0B36e3\u0B36\u0B37","s:\u0B37\u0B38a1\u0B38\u0B39_0\u0B39","\u0268\u0B3A\u0B3B_0\u0B3B\u0B3C","a1\u0B3C\u0B3D]/\u0B3D\u0B3Ei5\u0B3E","\u0B3Fq9\u0B3F\u0B40Y-\u0B40\u0B41o8","\u0B41\u0B47\u0B42\u0B43_0\u0B43","\u0B44a1\u0B44\u0B45]/\u0B45\u0B47","\u0B46\u0B3A\u0B46\u0B42","\u0B47\u026A\u0B48\u0B49k","6\u0B49\u0B4A}?\u0B4A\u0B4Bu;\u0B4B\u0B4C","s:\u0B4C\u026C\u0B4D\u0B4E","c2\u0B4E\u0B4Fo8\u0B4F\u0B50u;\u0B50\u0B51","Y-\u0B51\u0B52\x7F@\u0B52\u026E","\u0B53\u0B54c2\u0B54\u0B55o8\u0B55","\u0B56u;\u0B56\u0B57Y-\u0B57\u0B58\x7F","@\u0B58\u0B59\x076\u0B59\u0270","\u0B5A\u0B5Bc2\u0B5B\u0B5Co8\u0B5C\u0B5D","u;\u0B5D\u0B5EY-\u0B5E\u0B5F\x7F@","\u0B5F\u0B60\x07:\u0B60\u0272","\u0B61\u0B62}?\u0B62\u0B63a1\u0B63\u0B64","\x7F@\u0B64\u0274\u0B65\u0B66","}?\u0B66\u0B67a1\u0B67\u0B68]/\u0B68\u0B69","u;\u0B69\u0B6As:\u0B6A\u0B6B_0\u0B6B","\u0B6C\x07a\u0B6C\u0B6Dq9\u0B6D\u0B6E","i5\u0B6E\u0B6F]/\u0B6F\u0B70{>\u0B70\u0B71","u;\u0B71\u0B72}?\u0B72\u0B73a1\u0B73","\u0B74]/\u0B74\u0B75u;\u0B75\u0B76s:","\u0B76\u0B77_0\u0B77\u0276\u0B78","\u0B79q9\u0B79\u0B7Ai5\u0B7A\u0B7Bs:","\u0B7B\u0B7C\x81A\u0B7C\u0B7D\x7F@\u0B7D","\u0B7Ea1\u0B7E\u0B7F\x07a\u0B7F\u0B80","q9\u0B80\u0B81i5\u0B81\u0B82]/\u0B82\u0B83","{>\u0B83\u0B84u;\u0B84\u0B85}?\u0B85","\u0B86a1\u0B86\u0B87]/\u0B87\u0B88u;","\u0B88\u0B89s:\u0B89\u0B8A_0\u0B8A\u0278","\u0B8B\u0B8Cq9\u0B8C\u0B8Di5","\u0B8D\u0B8Es:\u0B8E\u0B8F\x81A\u0B8F\u0B90","\x7F@\u0B90\u0B91a1\u0B91\u0B92\x07a","\u0B92\u0B93}?\u0B93\u0B94a1\u0B94\u0B95","]/\u0B95\u0B96u;\u0B96\u0B97s:\u0B97","\u0B98_0\u0B98\u027A\u0B99\u0B9A","g4\u0B9A\u0B9Bu;\u0B9B\u0B9C\x81A","\u0B9C\u0B9D{>\u0B9D\u0B9E\x07a\u0B9E\u0B9F","q9\u0B9F\u0BA0i5\u0BA0\u0BA1]/\u0BA1","\u0BA2{>\u0BA2\u0BA3u;\u0BA3\u0BA4}?","\u0BA4\u0BA5a1\u0BA5\u0BA6]/\u0BA6\u0BA7","u;\u0BA7\u0BA8s:\u0BA8\u0BA9_0\u0BA9\u027C","\u0BAA\u0BABg4\u0BAB\u0BAC","u;\u0BAC\u0BAD\x81A\u0BAD\u0BAE{>\u0BAE","\u0BAF\x07a\u0BAF\u0BB0}?\u0BB0\u0BB1","a1\u0BB1\u0BB2]/\u0BB2\u0BB3u;\u0BB3\u0BB4","s:\u0BB4\u0BB5_0\u0BB5\u027E","\u0BB6\u0BB7g4\u0BB7\u0BB8u;\u0BB8\u0BB9","\x81A\u0BB9\u0BBA{>\u0BBA\u0BBB\x07a","\u0BBB\u0BBCq9\u0BBC\u0BBDi5\u0BBD\u0BBE","s:\u0BBE\u0BBF\x81A\u0BBF\u0BC0\x7F","@\u0BC0\u0BC1a1\u0BC1\u0280","\u0BC2\u0BC3_0\u0BC3\u0BC4Y-\u0BC4\u0BC5","\x89E\u0BC5\u0BC6\x07a\u0BC6\u0BC7q9","\u0BC7\u0BC8i5\u0BC8\u0BC9]/\u0BC9\u0BCA","{>\u0BCA\u0BCBu;\u0BCB\u0BCC}?\u0BCC\u0BCD","a1\u0BCD\u0BCE]/\u0BCE\u0BCFu;\u0BCF","\u0BD0s:\u0BD0\u0BD1_0\u0BD1\u0282","\u0BD2\u0BD3_0\u0BD3\u0BD4Y-\u0BD4","\u0BD5\x89E\u0BD5\u0BD6\x07a\u0BD6\u0BD7","}?\u0BD7\u0BD8a1\u0BD8\u0BD9]/\u0BD9","\u0BDAu;\u0BDA\u0BDBs:\u0BDB\u0BDC_0","\u0BDC\u0284\u0BDD\u0BDE_0\u0BDE","\u0BDFY-\u0BDF\u0BE0\x89E\u0BE0\u0BE1\x07","a\u0BE1\u0BE2q9\u0BE2\u0BE3i5\u0BE3","\u0BE4s:\u0BE4\u0BE5\x81A\u0BE5\u0BE6","\x7F@\u0BE6\u0BE7a1\u0BE7\u0286","\u0BE8\u0BE9_0\u0BE9\u0BEAY-\u0BEA\u0BEB","\x89E\u0BEB\u0BEC\x07a\u0BEC\u0BED","g4\u0BED\u0BEEu;\u0BEE\u0BEF\x81A\u0BEF","\u0BF0{>\u0BF0\u0288\u0BF1\u0BF2","\x89E\u0BF2\u0BF3a1\u0BF3\u0BF4Y-","\u0BF4\u0BF5{>\u0BF5\u0BF6\x07a\u0BF6\u0BF7","q9\u0BF7\u0BF8u;\u0BF8\u0BF9s:\u0BF9","\u0BFA\x7F@\u0BFA\u0BFBg4\u0BFB\u028A","\u0BFC\u0BFD[.\u0BFD\u0BFE\x7F","@\u0BFE\u0BFF{>\u0BFF\u0C00a1\u0C00\u0C01","a1\u0C01\u028C\u0C02\u0C03","{>\u0C03\u0C04\x7F@\u0C04\u0C05{>\u0C05","\u0C06a1\u0C06\u0C07a1\u0C07\u028E","\u0C08\u0C09g4\u0C09\u0C0AY-\u0C0A","\u0C0B}?\u0C0B\u0C0Cg4\u0C0C\u0290","\u0C0D\u0C0E{>\u0C0E\u0C0Fa1\u0C0F","\u0C10Y-\u0C10\u0C11o8\u0C11\u0292","\u0C12\u0C13_0\u0C13\u0C14u;\u0C14","\u0C15\x81A\u0C15\u0C16[.\u0C16\u0C17","o8\u0C17\u0C18a1\u0C18\u0294","\u0C19\u0C1Aw<\u0C1A\u0C1B{>\u0C1B\u0C1C","a1\u0C1C\u0C1D]/\u0C1D\u0C1Ei5\u0C1E\u0C1F","}?\u0C1F\u0C20i5\u0C20\u0C21u;\u0C21","\u0C22s:\u0C22\u0296\u0C23\u0C24","s:\u0C24\u0C25\x81A\u0C25\u0C26q9","\u0C26\u0C27a1\u0C27\u0C28{>\u0C28\u0C29","i5\u0C29\u0C2A]/\u0C2A\u0298","\u0C2B\u0C2Cs:\u0C2C\u0C2D\x81A\u0C2D\u0C2E","q9\u0C2E\u0C2F[.\u0C2F\u0C30a1\u0C30","\u0C31{>\u0C31\u029A\u0C32\u0C33","c2\u0C33\u0C34i5\u0C34\u0C35\x87D","\u0C35\u0C36a1\u0C36\u0C37_0\u0C37\u029C","\u0C38\u0C39[.\u0C39\u0C3Ai5","\u0C3A\u0C3B\x7F@\u0C3B\u029E","\u0C3C\u0C3D[.\u0C3D\u0C3Eu;\u0C3E\u0C3F","u;\u0C3F\u0C40o8\u0C40\u02A0","\u0C41\u0C42\x83B\u0C42\u0C43Y-\u0C43\u0C44","{>\u0C44\u0C45\x89E\u0C45\u0C46i5","\u0C46\u0C47s:\u0C47\u0C48e3\u0C48\u02A2","\u0C49\u0C4A\x83B\u0C4A\u0C4B","Y-\u0C4B\u0C4C{>\u0C4C\u0C4D]/\u0C4D\u0C4E","g4\u0C4E\u0C4FY-\u0C4F\u0C50{>\u0C50","\u02A4\u0C51\u0C52\x83B\u0C52","\u0C53Y-\u0C53\u0C54{>\u0C54\u0C55]/","\u0C55\u0C56g4\u0C56\u0C57Y-\u0C57\u0C58","{>\u0C58\u0C59\x074\u0C59\u02A6","\u0C5A\u0C5Bs:\u0C5B\u0C5CY-\u0C5C\u0C5D","\x7F@\u0C5D\u0C5Ei5\u0C5E\u0C5Fu;","\u0C5F\u0C60s:\u0C60\u0C61Y-\u0C61\u0C62","o8\u0C62\u02A8\u0C63\u0C64s:","\u0C64\u0C65\x83B\u0C65\u0C66Y-\u0C66\u0C67","{>\u0C67\u0C68]/\u0C68\u0C69g4\u0C69","\u0C6AY-\u0C6A\u0C6B{>\u0C6B\u02AA","\u0C6C\u0C6Ds:\u0C6D\u0C6E\x83B","\u0C6E\u0C6FY-\u0C6F\u0C70{>\u0C70\u0C71","]/\u0C71\u0C72g4\u0C72\u0C73Y-\u0C73\u0C74","{>\u0C74\u0C75\x074\u0C75\u02AC","\u0C76\u0C77s:\u0C77\u0C78]/\u0C78","\u0C79g4\u0C79\u0C7AY-\u0C7A\u0C7B{>","\u0C7B\u02AE\u0C7C\u0C7D\x83B","\u0C7D\u0C7EY-\u0C7E\u0C7F{>\u0C7F\u0C80","[.\u0C80\u0C81i5\u0C81\u0C82s:\u0C82\u0C83","Y-\u0C83\u0C84{>\u0C84\u0C85\x89E","\u0C85\u02B0\u0C86\u0C87\x7F@","\u0C87\u0C88i5\u0C88\u0C89s:\u0C89\u0C8A","\x89E\u0C8A\u0C8B[.\u0C8B\u0C8Co8\u0C8C","\u0C8Du;\u0C8D\u0C8E[.\u0C8E\u02B2","\u0C8F\u0C90[.\u0C90\u0C91o8\u0C91","\u0C92u;\u0C92\u0C93[.\u0C93\u02B4","\u0C94\u0C95]/\u0C95\u0C96o8\u0C96","\u0C97u;\u0C97\u0C98[.\u0C98\u02B6","\u0C99\u0C9A[.\u0C9A\u0C9Bc2\u0C9B","\u0C9Ci5\u0C9C\u0C9Do8\u0C9D\u0C9Ea1","\u0C9E\u02B8\u0C9F\u0CA0{>\u0CA0","\u0CA1Y-\u0CA1\u0CA2\x85C\u0CA2\u02BA","\u0CA3\u0CA4q9\u0CA4\u0CA5a1","\u0CA5\u0CA6_0\u0CA6\u0CA7i5\u0CA7\u0CA8","\x81A\u0CA8\u0CA9q9\u0CA9\u0CAA[.\u0CAA","\u0CABo8\u0CAB\u0CACu;\u0CAC\u0CAD[.","\u0CAD\u02BC\u0CAE\u0CAFo8\u0CAF","\u0CB0u;\u0CB0\u0CB1s:\u0CB1\u0CB2e3","\u0CB2\u0CB3[.\u0CB3\u0CB4o8\u0CB4\u0CB5","u;\u0CB5\u0CB6[.\u0CB6\u02BE","\u0CB7\u0CB8o8\u0CB8\u0CB9u;\u0CB9\u0CBA","s:\u0CBA\u0CBBe3\u0CBB\u02C0","\u0CBC\u0CBD\x7F@\u0CBD\u0CBEi5\u0CBE\u0CBF","s:\u0CBF\u0CC0\x89E\u0CC0\u0CC1\x7F","@\u0CC1\u0CC2a1\u0CC2\u0CC3\x87D\u0CC3","\u0CC4\x7F@\u0CC4\u02C2\u0CC5","\u0CC6\x7F@\u0CC6\u0CC7a1\u0CC7\u0CC8","\x87D\u0CC8\u0CC9\x7F@\u0CC9\u02C4","\u0CCA\u0CCBq9\u0CCB\u0CCCa1\u0CCC","\u0CCD_0\u0CCD\u0CCEi5\u0CCE\u0CCF\x81","A\u0CCF\u0CD0q9\u0CD0\u0CD1\x7F@\u0CD1","\u0CD2a1\u0CD2\u0CD3\x87D\u0CD3\u0CD4","\x7F@\u0CD4\u02C6\u0CD5\u0CD6","o8\u0CD6\u0CD7u;\u0CD7\u0CD8s:\u0CD8\u0CD9","e3\u0CD9\u0CDA\x7F@\u0CDA\u0CDBa1","\u0CDB\u0CDC\x87D\u0CDC\u0CDD\x7F@\u0CDD","\u02C8\u0CDE\u0CDFa1\u0CDF\u0CE0","s:\u0CE0\u0CE1\x81A\u0CE1\u0CE2q9","\u0CE2\u02CA\u0CE3\u0CE4}?\u0CE4","\u0CE5a1\u0CE5\u0CE6{>\u0CE6\u0CE7i5","\u0CE7\u0CE8Y-\u0CE8\u0CE9o8\u0CE9\u02CC","\u0CEA\u0CEBe3\u0CEB\u0CECa1","\u0CEC\u0CEDu;\u0CED\u0CEEq9\u0CEE\u0CEF","a1\u0CEF\u0CF0\x7F@\u0CF0\u0CF1{>\u0CF1","\u0CF2\x89E\u0CF2\u02CE\u0CF3","\u0CF4\x8BF\u0CF4\u0CF5a1\u0CF5\u0CF6","{>\u0CF6\u0CF7u;\u0CF7\u0CF8c2\u0CF8\u0CF9","i5\u0CF9\u0CFAo8\u0CFA\u0CFBo8\u0CFB","\u02D0\u0CFC\u0CFD[.\u0CFD\u0CFE","\x89E\u0CFE\u0CFF\x7F@\u0CFF\u0D00","a1\u0D00\u02D2\u0D01\u0D02\x81","A\u0D02\u0D03s:\u0D03\u0D04i5\u0D04\u0D05","]/\u0D05\u0D06u;\u0D06\u0D07_0\u0D07","\u0D08a1\u0D08\u02D4\u0D09\u0D0A","\x7F@\u0D0A\u0D0Ba1\u0D0B\u0D0C{>","\u0D0C\u0D0Dq9\u0D0D\u0D0Ei5\u0D0E\u0D0F","s:\u0D0F\u0D10Y-\u0D10\u0D11\x7F@\u0D11","\u0D12a1\u0D12\u0D13_0\u0D13\u02D6","\u0D14\u0D15u;\u0D15\u0D16w<\u0D16","\u0D17\x7F@\u0D17\u0D18i5\u0D18\u0D19","u;\u0D19\u0D1As:\u0D1A\u0D1BY-\u0D1B\u0D1C","o8\u0D1C\u0D1Do8\u0D1D\u0D1E\x89E","\u0D1E\u02D8\u0D1F\u0D20a1\u0D20","\u0D21s:\u0D21\u0D22]/\u0D22\u0D23o8","\u0D23\u0D24u;\u0D24\u0D25}?\u0D25\u0D26","a1\u0D26\u0D27_0\u0D27\u02DA","\u0D28\u0D29a1\u0D29\u0D2A}?\u0D2A\u0D2B","]/\u0D2B\u0D2CY-\u0D2C\u0D2Dw<\u0D2D\u0D2E","a1\u0D2E\u0D2F_0\u0D2F\u02DC","\u0D30\u0D31o8\u0D31\u0D32i5\u0D32\u0D33","s:\u0D33\u0D34a1\u0D34\u0D35}?\u0D35","\u02DE\u0D36\u0D37}?\u0D37\u0D38","\x7F@\u0D38\u0D39Y-\u0D39\u0D3A{>","\u0D3A\u0D3B\x7F@\u0D3B\u0D3Ci5\u0D3C\u0D3D","s:\u0D3D\u0D3Ee3\u0D3E\u02E0","\u0D3F\u0D40e3\u0D40\u0D41o8\u0D41\u0D42","u;\u0D42\u0D43[.\u0D43\u0D44Y-\u0D44","\u0D45o8\u0D45\u02E2\u0D46\u0D47","o8\u0D47\u0D48u;\u0D48\u0D49]/\u0D49","\u0D4AY-\u0D4A\u0D4Bo8\u0D4B\u02E4","\u0D4C\u0D4D}?\u0D4D\u0D4Ea1\u0D4E","\u0D4F}?\u0D4F\u0D50}?\u0D50\u0D51i5","\u0D51\u0D52u;\u0D52\u0D53s:\u0D53\u02E6","\u0D54\u0D55\x83B\u0D55\u0D56","Y-\u0D56\u0D57{>\u0D57\u0D58i5\u0D58\u0D59","Y-\u0D59\u0D5As:\u0D5A\u0D5B\x7F@","\u0D5B\u02E8\u0D5C\u0D5Du;\u0D5D","\u0D5E[.\u0D5E\u0D5Fk6\u0D5F\u0D60a1","\u0D60\u0D61]/\u0D61\u0D62\x7F@\u0D62\u02EA","\u0D63\u0D64e3\u0D64\u0D65","a1\u0D65\u0D66u;\u0D66\u0D67e3\u0D67\u0D68","{>\u0D68\u0D69Y-\u0D69\u0D6Aw<\u0D6A","\u0D6Bg4\u0D6B\u0D6C\x89E\u0D6C\u02EC","\u0D6D\u0D6E\x81A\u0D6E\u0D6F","s:\u0D6F\u0D70w<\u0D70\u0D71i5\u0D71\u0D72","\x83B\u0D72\u0D73u;\u0D73\u0D74\x7F","@\u0D74\u02EE\u0D75\u0D76i5","\u0D76\u0D77s:\u0D77\u0D78\x7F@\u0D78\u0D79","\x073\u0D79\u0D7A\u0D7A\u0D7B","\b\u0178\u0D7B\u02F0\u0D7C\u0D7D","i5\u0D7D\u0D7Es:\u0D7E\u0D7F\x7F@","\u0D7F\u0D80\x074\u0D80\u0D81","\u0D81\u0D82\b\u0179\u0D82\u02F2","\u0D83\u0D84i5\u0D84\u0D85s:\u0D85\u0D86","\x7F@\u0D86\u0D87\x075\u0D87\u0D88","\u0D88\u0D89\b\u017A\u0D89\u02F4","\u0D8A\u0D8Bi5\u0D8B\u0D8Cs:\u0D8C","\u0D8D\x7F@\u0D8D\u0D8E\x076\u0D8E\u0D8F","\u0D8F\u0D90\b\u017B\u0D90\u02F6","\u0D91\u0D92i5\u0D92\u0D93","s:\u0D93\u0D94\x7F@\u0D94\u0D95\x07:","\u0D95\u0D96\u0D96\u0D97\b\u017C","\u0D97\u02F8\u0D98\u0D99}?\u0D99","\u0D9Ay=\u0D9A\u0D9Bo8\u0D9B\u0D9C\x07a","\u0D9C\u0D9D\x7F@\u0D9D\u0D9E}?\u0D9E","\u0D9Fi5\u0D9F\u0DA0\x07a\u0DA0\u0DA1","}?\u0DA1\u0DA2a1\u0DA2\u0DA3]/\u0DA3\u0DA4","u;\u0DA4\u0DA5s:\u0DA5\u0DA6_0\u0DA6","\u0DA7\u0DA7\u0DA8\b\u017D\x07\u0DA8","\u02FA\u0DA9\u0DAA}?\u0DAA\u0DAB","y=\u0DAB\u0DACo8\u0DAC\u0DAD\x07a","\u0DAD\u0DAE\x7F@\u0DAE\u0DAF}?\u0DAF\u0DB0","i5\u0DB0\u0DB1\x07a\u0DB1\u0DB2q9","\u0DB2\u0DB3i5\u0DB3\u0DB4s:\u0DB4\u0DB5","\x81A\u0DB5\u0DB6\x7F@\u0DB6\u0DB7a1","\u0DB7\u0DB8\u0DB8\u0DB9\b\u017E\b\u0DB9","\u02FC\u0DBA\u0DBB}?\u0DBB\u0DBC","y=\u0DBC\u0DBDo8\u0DBD\u0DBE\x07a","\u0DBE\u0DBF\x7F@\u0DBF\u0DC0}?\u0DC0\u0DC1","i5\u0DC1\u0DC2\x07a\u0DC2\u0DC3g4","\u0DC3\u0DC4u;\u0DC4\u0DC5\x81A\u0DC5\u0DC6","{>\u0DC6\u0DC7\u0DC7\u0DC8\b\u017F"," \u0DC8\u02FE\u0DC9\u0DCA}?","\u0DCA\u0DCBy=\u0DCB\u0DCCo8\u0DCC\u0DCD\x07","a\u0DCD\u0DCE\x7F@\u0DCE\u0DCF}?","\u0DCF\u0DD0i5\u0DD0\u0DD1\x07a\u0DD1\u0DD2","_0\u0DD2\u0DD3Y-\u0DD3\u0DD4\x89E",`\u0DD4\u0DD5\u0DD5\u0DD6\b\u0180 +\u0DD6`,"\u0300\u0DD7\u0DD8}?\u0DD8\u0DD9","y=\u0DD9\u0DDAo8\u0DDA\u0DDB\x07a","\u0DDB\u0DDC\x7F@\u0DDC\u0DDD}?\u0DDD\u0DDE","i5\u0DDE\u0DDF\x07a\u0DDF\u0DE0\x85","C\u0DE0\u0DE1a1\u0DE1\u0DE2a1\u0DE2\u0DE3","m7\u0DE3\u0DE4\u0DE4\u0DE5\b\u0181","\v\u0DE5\u0302\u0DE6\u0DE7}","?\u0DE7\u0DE8y=\u0DE8\u0DE9o8\u0DE9\u0DEA","\x07a\u0DEA\u0DEB\x7F@\u0DEB\u0DEC","}?\u0DEC\u0DEDi5\u0DED\u0DEE\x07a\u0DEE","\u0DEFq9\u0DEF\u0DF0u;\u0DF0\u0DF1s:","\u0DF1\u0DF2\x7F@\u0DF2\u0DF3g4\u0DF3\u0DF4","\u0DF4\u0DF5\b\u0182\f\u0DF5\u0304","\u0DF6\u0DF7}?\u0DF7\u0DF8y=","\u0DF8\u0DF9o8\u0DF9\u0DFA\x07a\u0DFA\u0DFB","\x7F@\u0DFB\u0DFC}?\u0DFC\u0DFDi5","\u0DFD\u0DFE\x07a\u0DFE\u0DFFy=\u0DFF\u0E00","\x81A\u0E00\u0E01Y-\u0E01\u0E02{>","\u0E02\u0E03\x7F@\u0E03\u0E04a1\u0E04\u0E05","{>\u0E05\u0E06\u0E06\u0E07\b\u0183","\r\u0E07\u0306\u0E08\u0E09}?","\u0E09\u0E0Ay=\u0E0A\u0E0Bo8\u0E0B\u0E0C\x07","a\u0E0C\u0E0D\x7F@\u0E0D\u0E0E}?","\u0E0E\u0E0Fi5\u0E0F\u0E10\x07a\u0E10\u0E11","\x89E\u0E11\u0E12a1\u0E12\u0E13Y-","\u0E13\u0E14{>\u0E14\u0E15\u0E15","\u0E16\b\u0184\u0E16\u0308\u0E17","\u0E18 \u0E18\u0E19\u0E19","\u0E1A\b\u0185\u0E1A\u030A\u0E1B","\u0E1D \u0E1C\u0E1B\u0E1D\u030C","\u0E1E\u0E20? \u0E1F\u0E21 !","\u0E20\u0E1F\u0E21\u0E22","\u0E22\u0E20\u0E22\u0E23","\u0E23\u030E\u0E24\u0E26\x8FH","\u0E25\u0E24\u0E26\u0E27","\u0E27\u0E25\u0E27\u0E28","\u0E28\u0E29\u0E29\u0E31 ","\u0E2A\u0E2E\u033F\u01A0\u0E2B\u0E2D\u033D\u019F","\u0E2C\u0E2B\u0E2D\u0E30","\u0E2E\u0E2C\u0E2E\u0E2F","\u0E2F\u0E32\u0E30\u0E2E","\u0E31\u0E2A\u0E31\u0E32","\u0E32\u0E47\u0E33\u0E35\x8FH","\u0E34\u0E33\u0E35\u0E36","\u0E36\u0E34\u0E36\u0E37","\u0E37\u0E38\u0E38\u0E3C\u0341\u01A1","\u0E39\u0E3B\u033D\u019F\u0E3A\u0E39","\u0E3B\u0E3E\u0E3C\u0E3A","\u0E3C\u0E3D\u0E3D\u0E47","\u0E3E\u0E3C\u0E3F\u0E43\u033F\u01A0","\u0E40\u0E42\u033D\u019F\u0E41\u0E40","\u0E42\u0E45\u0E43\u0E41","\u0E43\u0E44\u0E44\u0E47","\u0E45\u0E43\u0E46\u0E25","\u0E46\u0E34\u0E46\u0E3F","\u0E47\u0310\u0E48\u0E49 ","\u0E49\u0E4A\u031D\u018F\u0E4A\u0312","\u0E4B\u0E4C\x07b\u0E4C\u0314","\u0E4D\u0E4E\x07)\u0E4E\u0316","\u0E4F\u0E50\x07$\u0E50\u0318","\u0E51\u0E55\u0313\u018A\u0E52\u0E54\v","\u0E53\u0E52\u0E54\u0E57","\u0E55\u0E56\u0E55\u0E53","\u0E56\u0E58\u0E57\u0E55","\u0E58\u0E59\u0313\u018A\u0E59\u031A","\u0E5A\u0E5E\u0317\u018C\u0E5B\u0E5D\v","\u0E5C\u0E5B\u0E5D\u0E60","\u0E5E\u0E5F\u0E5E\u0E5C","\u0E5F\u0E61\u0E60\u0E5E","\u0E61\u0E62\u0317\u018C\u0E62\u0E64","\u0E63\u0E5A\u0E64\u0E65","\u0E65\u0E63\u0E65\u0E66","\u0E66\u031C\u0E67\u0E6B\u0315\u018B","\u0E68\u0E6A\v\u0E69\u0E68","\u0E6A\u0E6D\u0E6B\u0E6C","\u0E6B\u0E69\u0E6C\u0E6E","\u0E6D\u0E6B\u0E6E\u0E6F\u0315\u018B","\u0E6F\u0E71\u0E70\u0E67","\u0E71\u0E72\u0E72\u0E70","\u0E72\u0E73\u0E73\u031E","\u0E74\u0E78A!\u0E75\u0E77\v","\u0E76\u0E75\u0E77\u0E7A","\u0E78\u0E79\u0E78\u0E76","\u0E79\u0E7B\u0E7A\u0E78",'\u0E7B\u0E7CC"\u0E7C\u0E7E\u0E7D',"\u0E74\u0E7E\u0E7F\u0E7F","\u0E7D\u0E7F\u0E80\u0E80","\u0320\u0E81\u0E82A!\u0E82\u0E83",'\x97L\u0E83\u0E84C"\u0E84\u0E86',"\u0E85\u0E81\u0E86\u0E87","\u0E87\u0E85\u0E87\u0E88","\u0E88\u0322\u0E89\u0E8DE","#\u0E8A\u0E8C\v\u0E8B\u0E8A","\u0E8C\u0E8F\u0E8D\u0E8E","\u0E8D\u0E8B\u0E8E\u0E90","\u0E8F\u0E8D\u0E90\u0E91G","$\u0E91\u0E93\u0E92\u0E89","\u0E93\u0E94\u0E94\u0E92","\u0E94\u0E95\u0E95\u0324","\u0E96\u0E97\x071\u0E97\u0E98\x07,","\u0E98\u0E99\x07#\u0E99\u0E9A","\u0E9A\u0E9B\x8FH\u0E9B\u0E9F","\u0E9C\u0E9E\v\u0E9D\u0E9C","\u0E9E\u0EA1\u0E9F\u0EA0","\u0E9F\u0E9D\u0EA0\u0EA2","\u0EA1\u0E9F\u0EA2\u0EA3\x07,","\u0EA3\u0EA4\x071\u0EA4\u0EA5","\u0EA5\u0EA6\b\u0193\u0EA6\u0326","\u0EA7\u0EA8\x071\u0EA8\u0EA9\x07,","\u0EA9\u0EAA\x07#\u0EAA\u0EAB","\u0EAB\u0EAC\b\u0194\u0EAC\u0328","\u0EAD\u0EAE\x071\u0EAE\u0EAF\x071\u0EAF",`\u0EB3\u0EB0\u0EB2 +"\u0EB1\u0EB0`,"\u0EB2\u0EB5\u0EB3\u0EB1","\u0EB3\u0EB4\u0EB4\u0EB6","\u0EB5\u0EB3\u0EB6\u0EB7","\b\u0195\u0EB7\u032A\u0EB8\u0EB9","\x07,\u0EB9\u0EBA\x071\u0EBA\u0EBB","\u0EBB\u0EBC\b\u0196\u0EBC\u032C","\u0EBD\u0EBE\x071\u0EBE\u0EBF\x07",",\u0EBF\u0EC0\x07,\u0EC0\u0ECE\x071","\u0EC1\u0EC2\x071\u0EC2\u0EC3\x07,",`\u0EC3\u0EC4\u0EC4\u0EC8 +#\u0EC5`,"\u0EC7\v\u0EC6\u0EC5\u0EC7","\u0ECA\u0EC8\u0EC9\u0EC8","\u0EC6\u0EC9\u0ECB\u0ECA","\u0EC8\u0ECB\u0ECC\x07,\u0ECC","\u0ECE\x071\u0ECD\u0EBD\u0ECD","\u0EC1\u0ECE\u0ECF\u0ECF","\u0ED0\b\u0197\u0ED0\u032E\u0ED1",`\u0ED5\x07%\u0ED2\u0ED4 +"\u0ED3\u0ED2`,"\u0ED4\u0ED7\u0ED5\u0ED3","\u0ED5\u0ED6\u0ED6\u0ED8","\u0ED7\u0ED5\u0ED8\u0ED9\b","\u0198\u0ED9\u0330\u0EDA\u0EE3",`\u0333\u019A\u0EDB\u0EDD +"\u0EDC\u0EDB`,"\u0EDD\u0EE0\u0EDE\u0EDC","\u0EDE\u0EDF\u0EDF\u0EE4","\u0EE0\u0EDE\u0EE1\u0EE4\u0335","\u019B\u0EE2\u0EE4\x07\u0EE3\u0EDE","\u0EE3\u0EE1\u0EE3\u0EE2","\u0EE4\u0EE5\u0EE5\u0EE6\b\u0199","\u0EE6\u0332\u0EE7\u0EE8\x07/","\u0EE8\u0EE9\x07/\u0EE9\u0334",'\u0EEA\u0EEB "\u0EEB\u0336',"\u0EEC\u0EF0\x8DG\u0EED\u0EF0 $\u0EEE","\u0EF0/\u0EEF\u0EEC\u0EEF","\u0EED\u0EEF\u0EEE\u0EF0","\u0EF1\u0EF1\u0EEF\u0EF1","\u0EF2\u0EF2\u0338\u0EF3","\u0EF4\x071\u0EF4\u0EF5\x07,\u0EF5\u033A","\u0EF6\u0EF7\x07,\u0EF7\u0EF8","\x071\u0EF8\u033C\u0EF9\u0EFC","\x8DG\u0EFA\u0EFC\u033F\u01A0\u0EFB\u0EF9","\u0EFB\u0EFA\u0EFC\u033E","\u0EFD\u0EFE %\u0EFE\u0340","\u0EFF\u0F00 &\u0F00\u0342","1\u035A\u03E8\u03F2\u03FA\u03FE\u0406\u040E\u0411","\u0416\u041C\u041F\u0425\u0458\u08F0\u0935\u0952\u0B46\u0E1C\u0E22\u0E27","\u0E2E\u0E31\u0E36\u0E3C\u0E43\u0E46\u0E55\u0E5E\u0E65\u0E6B\u0E72\u0E78","\u0E7F\u0E87\u0E8D\u0E94\u0E9F\u0EB3\u0EC8\u0ECD\u0ED5\u0EDE\u0EE3\u0EEF","\u0EF1\u0EFB 3 4 5 7 8 9"," : ; < = > ? @",""].join(""),ZO=new ds.atn.ATNDeserializer().deserialize(Mq),Tq=ZO.decisionToState.map((i,e)=>new ds.dfa.DFA(i,e)),$t=class $t extends ds.Lexer{constructor(e){super(e),this._interp=new ds.atn.LexerATNSimulator(this,ZO,Tq,new ds.PredictionContextCache)}get atn(){return ZO}};c($t,"SQLSelectLexer"),Yu($t,"grammarFileName","SQLSelectLexer.g4"),Yu($t,"channelNames",["DEFAULT_TOKEN_CHANNEL","HIDDEN"]),Yu($t,"modeNames",["DEFAULT_MODE"]),Yu($t,"literalNames",[null,"'='","':='","'<=>'","'>='","'>'","'<='","'<'",null,"'+'","'-'","'*'","'/'","'%'","'!'","'~'","'<<'","'>>'","'&&'","'&'","'^'","'||'","'|'","'.'","','","';'","':'","'('","')'","'{'","'}'","'_'","'['","']'","'{{'","'}}'","'->'","'->>'","'@'",null,"'@@'","'\\N'","'?'","'::'",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"'/*!'",null,"'*/'"]),Yu($t,"symbolicNames",[null,"EQUAL_OPERATOR","ASSIGN_OPERATOR","NULL_SAFE_EQUAL_OPERATOR","GREATER_OR_EQUAL_OPERATOR","GREATER_THAN_OPERATOR","LESS_OR_EQUAL_OPERATOR","LESS_THAN_OPERATOR","NOT_EQUAL_OPERATOR","PLUS_OPERATOR","MINUS_OPERATOR","MULT_OPERATOR","DIV_OPERATOR","MOD_OPERATOR","LOGICAL_NOT_OPERATOR","BITWISE_NOT_OPERATOR","SHIFT_LEFT_OPERATOR","SHIFT_RIGHT_OPERATOR","LOGICAL_AND_OPERATOR","BITWISE_AND_OPERATOR","BITWISE_XOR_OPERATOR","LOGICAL_OR_OPERATOR","BITWISE_OR_OPERATOR","DOT_SYMBOL","COMMA_SYMBOL","SEMICOLON_SYMBOL","COLON_SYMBOL","OPEN_PAR_SYMBOL","CLOSE_PAR_SYMBOL","OPEN_CURLY_SYMBOL","CLOSE_CURLY_SYMBOL","UNDERLINE_SYMBOL","OPEN_BRACKET_SYMBOL","CLOSE_BRACKET_SYMBOL","OPEN_DOUBLE_CURLY_SYMBOL","CLOSE_DOUBLE_CURLY_SYMBOL","JSON_SEPARATOR_SYMBOL","JSON_UNQUOTED_SEPARATOR_SYMBOL","AT_SIGN_SYMBOL","AT_TEXT_SUFFIX","AT_AT_SIGN_SYMBOL","NULL2_SYMBOL","PARAM_MARKER","CAST_COLON_SYMBOL","HEX_NUMBER","BIN_NUMBER","INT_NUMBER","DECIMAL_NUMBER","FLOAT_NUMBER","TINYINT_SYMBOL","SMALLINT_SYMBOL","MEDIUMINT_SYMBOL","BYTE_INT_SYMBOL","INT_SYMBOL","BIGINT_SYMBOL","SECOND_SYMBOL","MINUTE_SYMBOL","HOUR_SYMBOL","DAY_SYMBOL","WEEK_SYMBOL","MONTH_SYMBOL","QUARTER_SYMBOL","YEAR_SYMBOL","DEFAULT_SYMBOL","UNION_SYMBOL","SELECT_SYMBOL","ALL_SYMBOL","DISTINCT_SYMBOL","STRAIGHT_JOIN_SYMBOL","HIGH_PRIORITY_SYMBOL","SQL_SMALL_RESULT_SYMBOL","SQL_BIG_RESULT_SYMBOL","SQL_BUFFER_RESULT_SYMBOL","SQL_CALC_FOUND_ROWS_SYMBOL","LIMIT_SYMBOL","OFFSET_SYMBOL","INTO_SYMBOL","OUTFILE_SYMBOL","DUMPFILE_SYMBOL","PROCEDURE_SYMBOL","ANALYSE_SYMBOL","HAVING_SYMBOL","WINDOW_SYMBOL","AS_SYMBOL","PARTITION_SYMBOL","BY_SYMBOL","ROWS_SYMBOL","RANGE_SYMBOL","GROUPS_SYMBOL","UNBOUNDED_SYMBOL","PRECEDING_SYMBOL","INTERVAL_SYMBOL","CURRENT_SYMBOL","ROW_SYMBOL","BETWEEN_SYMBOL","AND_SYMBOL","FOLLOWING_SYMBOL","EXCLUDE_SYMBOL","GROUP_SYMBOL","TIES_SYMBOL","NO_SYMBOL","OTHERS_SYMBOL","WITH_SYMBOL","WITHOUT_SYMBOL","RECURSIVE_SYMBOL","ROLLUP_SYMBOL","CUBE_SYMBOL","ORDER_SYMBOL","ASC_SYMBOL","DESC_SYMBOL","FROM_SYMBOL","DUAL_SYMBOL","VALUES_SYMBOL","TABLE_SYMBOL","SQL_NO_CACHE_SYMBOL","SQL_CACHE_SYMBOL","MAX_STATEMENT_TIME_SYMBOL","FOR_SYMBOL","OF_SYMBOL","LOCK_SYMBOL","IN_SYMBOL","SHARE_SYMBOL","MODE_SYMBOL","UPDATE_SYMBOL","SKIP_SYMBOL","LOCKED_SYMBOL","NOWAIT_SYMBOL","WHERE_SYMBOL","QUALIFY_SYMBOL","OJ_SYMBOL","ON_SYMBOL","USING_SYMBOL","NATURAL_SYMBOL","INNER_SYMBOL","JOIN_SYMBOL","LEFT_SYMBOL","RIGHT_SYMBOL","OUTER_SYMBOL","CROSS_SYMBOL","LATERAL_SYMBOL","JSON_TABLE_SYMBOL","COLUMNS_SYMBOL","ORDINALITY_SYMBOL","EXISTS_SYMBOL","PATH_SYMBOL","NESTED_SYMBOL","EMPTY_SYMBOL","ERROR_SYMBOL","NULL_SYMBOL","USE_SYMBOL","FORCE_SYMBOL","IGNORE_SYMBOL","KEY_SYMBOL","INDEX_SYMBOL","PRIMARY_SYMBOL","IS_SYMBOL","TRUE_SYMBOL","FALSE_SYMBOL","UNKNOWN_SYMBOL","NOT_SYMBOL","XOR_SYMBOL","OR_SYMBOL","ANY_SYMBOL","MEMBER_SYMBOL","SOUNDS_SYMBOL","LIKE_SYMBOL","ESCAPE_SYMBOL","REGEXP_SYMBOL","DIV_SYMBOL","MOD_SYMBOL","MATCH_SYMBOL","AGAINST_SYMBOL","BINARY_SYMBOL","CAST_SYMBOL","ARRAY_SYMBOL","CASE_SYMBOL","END_SYMBOL","CONVERT_SYMBOL","COLLATE_SYMBOL","AVG_SYMBOL","BIT_AND_SYMBOL","BIT_OR_SYMBOL","BIT_XOR_SYMBOL","COUNT_SYMBOL","MIN_SYMBOL","MAX_SYMBOL","STD_SYMBOL","VARIANCE_SYMBOL","STDDEV_SAMP_SYMBOL","VAR_SAMP_SYMBOL","SUM_SYMBOL","GROUP_CONCAT_SYMBOL","SEPARATOR_SYMBOL","GROUPING_SYMBOL","ROW_NUMBER_SYMBOL","RANK_SYMBOL","DENSE_RANK_SYMBOL","CUME_DIST_SYMBOL","PERCENT_RANK_SYMBOL","NTILE_SYMBOL","LEAD_SYMBOL","LAG_SYMBOL","FIRST_VALUE_SYMBOL","LAST_VALUE_SYMBOL","NTH_VALUE_SYMBOL","FIRST_SYMBOL","LAST_SYMBOL","OVER_SYMBOL","RESPECT_SYMBOL","NULLS_SYMBOL","JSON_ARRAYAGG_SYMBOL","JSON_OBJECTAGG_SYMBOL","BOOLEAN_SYMBOL","LANGUAGE_SYMBOL","QUERY_SYMBOL","EXPANSION_SYMBOL","CHAR_SYMBOL","CURRENT_USER_SYMBOL","DATE_SYMBOL","INSERT_SYMBOL","TIME_SYMBOL","TIMESTAMP_SYMBOL","TIMESTAMP_LTZ_SYMBOL","TIMESTAMP_NTZ_SYMBOL","ZONE_SYMBOL","USER_SYMBOL","ADDDATE_SYMBOL","SUBDATE_SYMBOL","CURDATE_SYMBOL","CURTIME_SYMBOL","DATE_ADD_SYMBOL","DATE_SUB_SYMBOL","EXTRACT_SYMBOL","GET_FORMAT_SYMBOL","NOW_SYMBOL","POSITION_SYMBOL","SYSDATE_SYMBOL","TIMESTAMP_ADD_SYMBOL","TIMESTAMP_DIFF_SYMBOL","UTC_DATE_SYMBOL","UTC_TIME_SYMBOL","UTC_TIMESTAMP_SYMBOL","ASCII_SYMBOL","CHARSET_SYMBOL","COALESCE_SYMBOL","COLLATION_SYMBOL","DATABASE_SYMBOL","IF_SYMBOL","FORMAT_SYMBOL","MICROSECOND_SYMBOL","OLD_PASSWORD_SYMBOL","PASSWORD_SYMBOL","REPEAT_SYMBOL","REPLACE_SYMBOL","REVERSE_SYMBOL","ROW_COUNT_SYMBOL","TRUNCATE_SYMBOL","WEIGHT_STRING_SYMBOL","CONTAINS_SYMBOL","GEOMETRYCOLLECTION_SYMBOL","LINESTRING_SYMBOL","MULTILINESTRING_SYMBOL","MULTIPOINT_SYMBOL","MULTIPOLYGON_SYMBOL","POINT_SYMBOL","POLYGON_SYMBOL","LEVEL_SYMBOL","DATETIME_SYMBOL","TRIM_SYMBOL","LEADING_SYMBOL","TRAILING_SYMBOL","BOTH_SYMBOL","STRING_SYMBOL","SUBSTRING_SYMBOL","WHEN_SYMBOL","THEN_SYMBOL","ELSE_SYMBOL","SIGNED_SYMBOL","UNSIGNED_SYMBOL","DECIMAL_SYMBOL","JSON_SYMBOL","FLOAT_SYMBOL","FLOAT_SYMBOL_4","FLOAT_SYMBOL_8","SET_SYMBOL","SECOND_MICROSECOND_SYMBOL","MINUTE_MICROSECOND_SYMBOL","MINUTE_SECOND_SYMBOL","HOUR_MICROSECOND_SYMBOL","HOUR_SECOND_SYMBOL","HOUR_MINUTE_SYMBOL","DAY_MICROSECOND_SYMBOL","DAY_SECOND_SYMBOL","DAY_MINUTE_SYMBOL","DAY_HOUR_SYMBOL","YEAR_MONTH_SYMBOL","BTREE_SYMBOL","RTREE_SYMBOL","HASH_SYMBOL","REAL_SYMBOL","DOUBLE_SYMBOL","PRECISION_SYMBOL","NUMERIC_SYMBOL","NUMBER_SYMBOL","FIXED_SYMBOL","BIT_SYMBOL","BOOL_SYMBOL","VARYING_SYMBOL","VARCHAR_SYMBOL","VARCHAR2_SYMBOL","NATIONAL_SYMBOL","NVARCHAR_SYMBOL","NVARCHAR2_SYMBOL","NCHAR_SYMBOL","VARBINARY_SYMBOL","TINYBLOB_SYMBOL","BLOB_SYMBOL","CLOB_SYMBOL","BFILE_SYMBOL","RAW_SYMBOL","MEDIUMBLOB_SYMBOL","LONGBLOB_SYMBOL","LONG_SYMBOL","TINYTEXT_SYMBOL","TEXT_SYMBOL","MEDIUMTEXT_SYMBOL","LONGTEXT_SYMBOL","ENUM_SYMBOL","SERIAL_SYMBOL","GEOMETRY_SYMBOL","ZEROFILL_SYMBOL","BYTE_SYMBOL","UNICODE_SYMBOL","TERMINATED_SYMBOL","OPTIONALLY_SYMBOL","ENCLOSED_SYMBOL","ESCAPED_SYMBOL","LINES_SYMBOL","STARTING_SYMBOL","GLOBAL_SYMBOL","LOCAL_SYMBOL","SESSION_SYMBOL","VARIANT_SYMBOL","OBJECT_SYMBOL","GEOGRAPHY_SYMBOL","UNPIVOT_SYMBOL","WHITESPACE","INVALID_INPUT","UNDERSCORE_CHARSET","IDENTIFIER","NCHAR_TEXT","BACK_TICK_QUOTED_ID","DOUBLE_QUOTED_TEXT","SINGLE_QUOTED_TEXT","BRACKET_QUOTED_TEXT","BRACKET_QUOTED_NUMBER","CURLY_BRACES_QUOTED_TEXT","VERSION_COMMENT_START","MYSQL_COMMENT_START","SNOWFLAKE_COMMENT","VERSION_COMMENT_END","BLOCK_COMMENT","POUND_COMMENT","DASHDASH_COMMENT"]),Yu($t,"ruleNames",["EQUAL_OPERATOR","ASSIGN_OPERATOR","NULL_SAFE_EQUAL_OPERATOR","GREATER_OR_EQUAL_OPERATOR","GREATER_THAN_OPERATOR","LESS_OR_EQUAL_OPERATOR","LESS_THAN_OPERATOR","NOT_EQUAL_OPERATOR","PLUS_OPERATOR","MINUS_OPERATOR","MULT_OPERATOR","DIV_OPERATOR","MOD_OPERATOR","LOGICAL_NOT_OPERATOR","BITWISE_NOT_OPERATOR","SHIFT_LEFT_OPERATOR","SHIFT_RIGHT_OPERATOR","LOGICAL_AND_OPERATOR","BITWISE_AND_OPERATOR","BITWISE_XOR_OPERATOR","LOGICAL_OR_OPERATOR","BITWISE_OR_OPERATOR","DOT_SYMBOL","COMMA_SYMBOL","SEMICOLON_SYMBOL","COLON_SYMBOL","OPEN_PAR_SYMBOL","CLOSE_PAR_SYMBOL","OPEN_CURLY_SYMBOL","CLOSE_CURLY_SYMBOL","UNDERLINE_SYMBOL","OPEN_BRACKET_SYMBOL","CLOSE_BRACKET_SYMBOL","OPEN_DOUBLE_CURLY_SYMBOL","CLOSE_DOUBLE_CURLY_SYMBOL","JSON_SEPARATOR_SYMBOL","JSON_UNQUOTED_SEPARATOR_SYMBOL","AT_SIGN_SYMBOL","AT_TEXT_SUFFIX","AT_AT_SIGN_SYMBOL","NULL2_SYMBOL","PARAM_MARKER","CAST_COLON_SYMBOL","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","DIGIT","DIGITS","HEXDIGIT","HEX_NUMBER","BIN_NUMBER","INT_NUMBER","DECIMAL_NUMBER","FLOAT_NUMBER","TINYINT_SYMBOL","SMALLINT_SYMBOL","MEDIUMINT_SYMBOL","BYTE_INT_SYMBOL","INT_SYMBOL","BIGINT_SYMBOL","SECOND_SYMBOL","MINUTE_SYMBOL","HOUR_SYMBOL","DAY_SYMBOL","WEEK_SYMBOL","MONTH_SYMBOL","QUARTER_SYMBOL","YEAR_SYMBOL","DEFAULT_SYMBOL","UNION_SYMBOL","SELECT_SYMBOL","ALL_SYMBOL","DISTINCT_SYMBOL","STRAIGHT_JOIN_SYMBOL","HIGH_PRIORITY_SYMBOL","SQL_SMALL_RESULT_SYMBOL","SQL_BIG_RESULT_SYMBOL","SQL_BUFFER_RESULT_SYMBOL","SQL_CALC_FOUND_ROWS_SYMBOL","LIMIT_SYMBOL","OFFSET_SYMBOL","INTO_SYMBOL","OUTFILE_SYMBOL","DUMPFILE_SYMBOL","PROCEDURE_SYMBOL","ANALYSE_SYMBOL","HAVING_SYMBOL","WINDOW_SYMBOL","AS_SYMBOL","PARTITION_SYMBOL","BY_SYMBOL","ROWS_SYMBOL","RANGE_SYMBOL","GROUPS_SYMBOL","UNBOUNDED_SYMBOL","PRECEDING_SYMBOL","INTERVAL_SYMBOL","CURRENT_SYMBOL","ROW_SYMBOL","BETWEEN_SYMBOL","AND_SYMBOL","FOLLOWING_SYMBOL","EXCLUDE_SYMBOL","GROUP_SYMBOL","TIES_SYMBOL","NO_SYMBOL","OTHERS_SYMBOL","WITH_SYMBOL","WITHOUT_SYMBOL","RECURSIVE_SYMBOL","ROLLUP_SYMBOL","CUBE_SYMBOL","ORDER_SYMBOL","ASC_SYMBOL","DESC_SYMBOL","FROM_SYMBOL","DUAL_SYMBOL","VALUES_SYMBOL","TABLE_SYMBOL","SQL_NO_CACHE_SYMBOL","SQL_CACHE_SYMBOL","MAX_STATEMENT_TIME_SYMBOL","FOR_SYMBOL","OF_SYMBOL","LOCK_SYMBOL","IN_SYMBOL","SHARE_SYMBOL","MODE_SYMBOL","UPDATE_SYMBOL","SKIP_SYMBOL","LOCKED_SYMBOL","NOWAIT_SYMBOL","WHERE_SYMBOL","QUALIFY_SYMBOL","OJ_SYMBOL","ON_SYMBOL","USING_SYMBOL","NATURAL_SYMBOL","INNER_SYMBOL","JOIN_SYMBOL","LEFT_SYMBOL","RIGHT_SYMBOL","OUTER_SYMBOL","CROSS_SYMBOL","LATERAL_SYMBOL","JSON_TABLE_SYMBOL","COLUMNS_SYMBOL","ORDINALITY_SYMBOL","EXISTS_SYMBOL","PATH_SYMBOL","NESTED_SYMBOL","EMPTY_SYMBOL","ERROR_SYMBOL","NULL_SYMBOL","USE_SYMBOL","FORCE_SYMBOL","IGNORE_SYMBOL","KEY_SYMBOL","INDEX_SYMBOL","PRIMARY_SYMBOL","IS_SYMBOL","TRUE_SYMBOL","FALSE_SYMBOL","UNKNOWN_SYMBOL","NOT_SYMBOL","XOR_SYMBOL","OR_SYMBOL","ANY_SYMBOL","MEMBER_SYMBOL","SOUNDS_SYMBOL","LIKE_SYMBOL","ESCAPE_SYMBOL","REGEXP_SYMBOL","DIV_SYMBOL","MOD_SYMBOL","MATCH_SYMBOL","AGAINST_SYMBOL","BINARY_SYMBOL","CAST_SYMBOL","ARRAY_SYMBOL","CASE_SYMBOL","END_SYMBOL","CONVERT_SYMBOL","COLLATE_SYMBOL","AVG_SYMBOL","BIT_AND_SYMBOL","BIT_OR_SYMBOL","BIT_XOR_SYMBOL","COUNT_SYMBOL","MIN_SYMBOL","MAX_SYMBOL","STD_SYMBOL","VARIANCE_SYMBOL","STDDEV_SAMP_SYMBOL","VAR_SAMP_SYMBOL","SUM_SYMBOL","GROUP_CONCAT_SYMBOL","SEPARATOR_SYMBOL","GROUPING_SYMBOL","ROW_NUMBER_SYMBOL","RANK_SYMBOL","DENSE_RANK_SYMBOL","CUME_DIST_SYMBOL","PERCENT_RANK_SYMBOL","NTILE_SYMBOL","LEAD_SYMBOL","LAG_SYMBOL","FIRST_VALUE_SYMBOL","LAST_VALUE_SYMBOL","NTH_VALUE_SYMBOL","FIRST_SYMBOL","LAST_SYMBOL","OVER_SYMBOL","RESPECT_SYMBOL","NULLS_SYMBOL","JSON_ARRAYAGG_SYMBOL","JSON_OBJECTAGG_SYMBOL","BOOLEAN_SYMBOL","LANGUAGE_SYMBOL","QUERY_SYMBOL","EXPANSION_SYMBOL","CHAR_SYMBOL","CURRENT_USER_SYMBOL","DATE_SYMBOL","INSERT_SYMBOL","TIME_SYMBOL","TIMESTAMP_SYMBOL","TIMESTAMP_LTZ_SYMBOL","TIMESTAMP_NTZ_SYMBOL","ZONE_SYMBOL","USER_SYMBOL","ADDDATE_SYMBOL","SUBDATE_SYMBOL","CURDATE_SYMBOL","CURTIME_SYMBOL","DATE_ADD_SYMBOL","DATE_SUB_SYMBOL","EXTRACT_SYMBOL","GET_FORMAT_SYMBOL","NOW_SYMBOL","POSITION_SYMBOL","SYSDATE_SYMBOL","TIMESTAMP_ADD_SYMBOL","TIMESTAMP_DIFF_SYMBOL","UTC_DATE_SYMBOL","UTC_TIME_SYMBOL","UTC_TIMESTAMP_SYMBOL","ASCII_SYMBOL","CHARSET_SYMBOL","COALESCE_SYMBOL","COLLATION_SYMBOL","DATABASE_SYMBOL","IF_SYMBOL","FORMAT_SYMBOL","MICROSECOND_SYMBOL","OLD_PASSWORD_SYMBOL","PASSWORD_SYMBOL","REPEAT_SYMBOL","REPLACE_SYMBOL","REVERSE_SYMBOL","ROW_COUNT_SYMBOL","TRUNCATE_SYMBOL","WEIGHT_STRING_SYMBOL","CONTAINS_SYMBOL","GEOMETRYCOLLECTION_SYMBOL","LINESTRING_SYMBOL","MULTILINESTRING_SYMBOL","MULTIPOINT_SYMBOL","MULTIPOLYGON_SYMBOL","POINT_SYMBOL","POLYGON_SYMBOL","LEVEL_SYMBOL","DATETIME_SYMBOL","TRIM_SYMBOL","LEADING_SYMBOL","TRAILING_SYMBOL","BOTH_SYMBOL","STRING_SYMBOL","SUBSTRING_SYMBOL","WHEN_SYMBOL","THEN_SYMBOL","ELSE_SYMBOL","SIGNED_SYMBOL","UNSIGNED_SYMBOL","DECIMAL_SYMBOL","JSON_SYMBOL","FLOAT_SYMBOL","FLOAT_SYMBOL_4","FLOAT_SYMBOL_8","SET_SYMBOL","SECOND_MICROSECOND_SYMBOL","MINUTE_MICROSECOND_SYMBOL","MINUTE_SECOND_SYMBOL","HOUR_MICROSECOND_SYMBOL","HOUR_SECOND_SYMBOL","HOUR_MINUTE_SYMBOL","DAY_MICROSECOND_SYMBOL","DAY_SECOND_SYMBOL","DAY_MINUTE_SYMBOL","DAY_HOUR_SYMBOL","YEAR_MONTH_SYMBOL","BTREE_SYMBOL","RTREE_SYMBOL","HASH_SYMBOL","REAL_SYMBOL","DOUBLE_SYMBOL","PRECISION_SYMBOL","NUMERIC_SYMBOL","NUMBER_SYMBOL","FIXED_SYMBOL","BIT_SYMBOL","BOOL_SYMBOL","VARYING_SYMBOL","VARCHAR_SYMBOL","VARCHAR2_SYMBOL","NATIONAL_SYMBOL","NVARCHAR_SYMBOL","NVARCHAR2_SYMBOL","NCHAR_SYMBOL","VARBINARY_SYMBOL","TINYBLOB_SYMBOL","BLOB_SYMBOL","CLOB_SYMBOL","BFILE_SYMBOL","RAW_SYMBOL","MEDIUMBLOB_SYMBOL","LONGBLOB_SYMBOL","LONG_SYMBOL","TINYTEXT_SYMBOL","TEXT_SYMBOL","MEDIUMTEXT_SYMBOL","LONGTEXT_SYMBOL","ENUM_SYMBOL","SERIAL_SYMBOL","GEOMETRY_SYMBOL","ZEROFILL_SYMBOL","BYTE_SYMBOL","UNICODE_SYMBOL","TERMINATED_SYMBOL","OPTIONALLY_SYMBOL","ENCLOSED_SYMBOL","ESCAPED_SYMBOL","LINES_SYMBOL","STARTING_SYMBOL","GLOBAL_SYMBOL","LOCAL_SYMBOL","SESSION_SYMBOL","VARIANT_SYMBOL","OBJECT_SYMBOL","GEOGRAPHY_SYMBOL","UNPIVOT_SYMBOL","INT1_SYMBOL","INT2_SYMBOL","INT3_SYMBOL","INT4_SYMBOL","INT8_SYMBOL","SQL_TSI_SECOND_SYMBOL","SQL_TSI_MINUTE_SYMBOL","SQL_TSI_HOUR_SYMBOL","SQL_TSI_DAY_SYMBOL","SQL_TSI_WEEK_SYMBOL","SQL_TSI_MONTH_SYMBOL","SQL_TSI_QUARTER_SYMBOL","SQL_TSI_YEAR_SYMBOL","WHITESPACE","INVALID_INPUT","UNDERSCORE_CHARSET","IDENTIFIER","NCHAR_TEXT","BACK_TICK","SINGLE_QUOTE","DOUBLE_QUOTE","BACK_TICK_QUOTED_ID","DOUBLE_QUOTED_TEXT","SINGLE_QUOTED_TEXT","BRACKET_QUOTED_TEXT","BRACKET_QUOTED_NUMBER","CURLY_BRACES_QUOTED_TEXT","VERSION_COMMENT_START","MYSQL_COMMENT_START","SNOWFLAKE_COMMENT","VERSION_COMMENT_END","BLOCK_COMMENT","POUND_COMMENT","DASHDASH_COMMENT","DOUBLE_DASH","LINEBREAK","SIMPLE_IDENTIFIER","ML_COMMENT_HEAD","ML_COMMENT_END","LETTER_WHEN_UNQUOTED","LETTER_WHEN_UNQUOTED_NO_DIGIT","LETTER_WITHOUT_FLOAT_PART"]);var A=$t;A.EOF=ds.Token.EOF;A.EQUAL_OPERATOR=1;A.ASSIGN_OPERATOR=2;A.NULL_SAFE_EQUAL_OPERATOR=3;A.GREATER_OR_EQUAL_OPERATOR=4;A.GREATER_THAN_OPERATOR=5;A.LESS_OR_EQUAL_OPERATOR=6;A.LESS_THAN_OPERATOR=7;A.NOT_EQUAL_OPERATOR=8;A.PLUS_OPERATOR=9;A.MINUS_OPERATOR=10;A.MULT_OPERATOR=11;A.DIV_OPERATOR=12;A.MOD_OPERATOR=13;A.LOGICAL_NOT_OPERATOR=14;A.BITWISE_NOT_OPERATOR=15;A.SHIFT_LEFT_OPERATOR=16;A.SHIFT_RIGHT_OPERATOR=17;A.LOGICAL_AND_OPERATOR=18;A.BITWISE_AND_OPERATOR=19;A.BITWISE_XOR_OPERATOR=20;A.LOGICAL_OR_OPERATOR=21;A.BITWISE_OR_OPERATOR=22;A.DOT_SYMBOL=23;A.COMMA_SYMBOL=24;A.SEMICOLON_SYMBOL=25;A.COLON_SYMBOL=26;A.OPEN_PAR_SYMBOL=27;A.CLOSE_PAR_SYMBOL=28;A.OPEN_CURLY_SYMBOL=29;A.CLOSE_CURLY_SYMBOL=30;A.UNDERLINE_SYMBOL=31;A.OPEN_BRACKET_SYMBOL=32;A.CLOSE_BRACKET_SYMBOL=33;A.OPEN_DOUBLE_CURLY_SYMBOL=34;A.CLOSE_DOUBLE_CURLY_SYMBOL=35;A.JSON_SEPARATOR_SYMBOL=36;A.JSON_UNQUOTED_SEPARATOR_SYMBOL=37;A.AT_SIGN_SYMBOL=38;A.AT_TEXT_SUFFIX=39;A.AT_AT_SIGN_SYMBOL=40;A.NULL2_SYMBOL=41;A.PARAM_MARKER=42;A.CAST_COLON_SYMBOL=43;A.HEX_NUMBER=44;A.BIN_NUMBER=45;A.INT_NUMBER=46;A.DECIMAL_NUMBER=47;A.FLOAT_NUMBER=48;A.TINYINT_SYMBOL=49;A.SMALLINT_SYMBOL=50;A.MEDIUMINT_SYMBOL=51;A.BYTE_INT_SYMBOL=52;A.INT_SYMBOL=53;A.BIGINT_SYMBOL=54;A.SECOND_SYMBOL=55;A.MINUTE_SYMBOL=56;A.HOUR_SYMBOL=57;A.DAY_SYMBOL=58;A.WEEK_SYMBOL=59;A.MONTH_SYMBOL=60;A.QUARTER_SYMBOL=61;A.YEAR_SYMBOL=62;A.DEFAULT_SYMBOL=63;A.UNION_SYMBOL=64;A.SELECT_SYMBOL=65;A.ALL_SYMBOL=66;A.DISTINCT_SYMBOL=67;A.STRAIGHT_JOIN_SYMBOL=68;A.HIGH_PRIORITY_SYMBOL=69;A.SQL_SMALL_RESULT_SYMBOL=70;A.SQL_BIG_RESULT_SYMBOL=71;A.SQL_BUFFER_RESULT_SYMBOL=72;A.SQL_CALC_FOUND_ROWS_SYMBOL=73;A.LIMIT_SYMBOL=74;A.OFFSET_SYMBOL=75;A.INTO_SYMBOL=76;A.OUTFILE_SYMBOL=77;A.DUMPFILE_SYMBOL=78;A.PROCEDURE_SYMBOL=79;A.ANALYSE_SYMBOL=80;A.HAVING_SYMBOL=81;A.WINDOW_SYMBOL=82;A.AS_SYMBOL=83;A.PARTITION_SYMBOL=84;A.BY_SYMBOL=85;A.ROWS_SYMBOL=86;A.RANGE_SYMBOL=87;A.GROUPS_SYMBOL=88;A.UNBOUNDED_SYMBOL=89;A.PRECEDING_SYMBOL=90;A.INTERVAL_SYMBOL=91;A.CURRENT_SYMBOL=92;A.ROW_SYMBOL=93;A.BETWEEN_SYMBOL=94;A.AND_SYMBOL=95;A.FOLLOWING_SYMBOL=96;A.EXCLUDE_SYMBOL=97;A.GROUP_SYMBOL=98;A.TIES_SYMBOL=99;A.NO_SYMBOL=100;A.OTHERS_SYMBOL=101;A.WITH_SYMBOL=102;A.WITHOUT_SYMBOL=103;A.RECURSIVE_SYMBOL=104;A.ROLLUP_SYMBOL=105;A.CUBE_SYMBOL=106;A.ORDER_SYMBOL=107;A.ASC_SYMBOL=108;A.DESC_SYMBOL=109;A.FROM_SYMBOL=110;A.DUAL_SYMBOL=111;A.VALUES_SYMBOL=112;A.TABLE_SYMBOL=113;A.SQL_NO_CACHE_SYMBOL=114;A.SQL_CACHE_SYMBOL=115;A.MAX_STATEMENT_TIME_SYMBOL=116;A.FOR_SYMBOL=117;A.OF_SYMBOL=118;A.LOCK_SYMBOL=119;A.IN_SYMBOL=120;A.SHARE_SYMBOL=121;A.MODE_SYMBOL=122;A.UPDATE_SYMBOL=123;A.SKIP_SYMBOL=124;A.LOCKED_SYMBOL=125;A.NOWAIT_SYMBOL=126;A.WHERE_SYMBOL=127;A.QUALIFY_SYMBOL=128;A.OJ_SYMBOL=129;A.ON_SYMBOL=130;A.USING_SYMBOL=131;A.NATURAL_SYMBOL=132;A.INNER_SYMBOL=133;A.JOIN_SYMBOL=134;A.LEFT_SYMBOL=135;A.RIGHT_SYMBOL=136;A.OUTER_SYMBOL=137;A.CROSS_SYMBOL=138;A.LATERAL_SYMBOL=139;A.JSON_TABLE_SYMBOL=140;A.COLUMNS_SYMBOL=141;A.ORDINALITY_SYMBOL=142;A.EXISTS_SYMBOL=143;A.PATH_SYMBOL=144;A.NESTED_SYMBOL=145;A.EMPTY_SYMBOL=146;A.ERROR_SYMBOL=147;A.NULL_SYMBOL=148;A.USE_SYMBOL=149;A.FORCE_SYMBOL=150;A.IGNORE_SYMBOL=151;A.KEY_SYMBOL=152;A.INDEX_SYMBOL=153;A.PRIMARY_SYMBOL=154;A.IS_SYMBOL=155;A.TRUE_SYMBOL=156;A.FALSE_SYMBOL=157;A.UNKNOWN_SYMBOL=158;A.NOT_SYMBOL=159;A.XOR_SYMBOL=160;A.OR_SYMBOL=161;A.ANY_SYMBOL=162;A.MEMBER_SYMBOL=163;A.SOUNDS_SYMBOL=164;A.LIKE_SYMBOL=165;A.ESCAPE_SYMBOL=166;A.REGEXP_SYMBOL=167;A.DIV_SYMBOL=168;A.MOD_SYMBOL=169;A.MATCH_SYMBOL=170;A.AGAINST_SYMBOL=171;A.BINARY_SYMBOL=172;A.CAST_SYMBOL=173;A.ARRAY_SYMBOL=174;A.CASE_SYMBOL=175;A.END_SYMBOL=176;A.CONVERT_SYMBOL=177;A.COLLATE_SYMBOL=178;A.AVG_SYMBOL=179;A.BIT_AND_SYMBOL=180;A.BIT_OR_SYMBOL=181;A.BIT_XOR_SYMBOL=182;A.COUNT_SYMBOL=183;A.MIN_SYMBOL=184;A.MAX_SYMBOL=185;A.STD_SYMBOL=186;A.VARIANCE_SYMBOL=187;A.STDDEV_SAMP_SYMBOL=188;A.VAR_SAMP_SYMBOL=189;A.SUM_SYMBOL=190;A.GROUP_CONCAT_SYMBOL=191;A.SEPARATOR_SYMBOL=192;A.GROUPING_SYMBOL=193;A.ROW_NUMBER_SYMBOL=194;A.RANK_SYMBOL=195;A.DENSE_RANK_SYMBOL=196;A.CUME_DIST_SYMBOL=197;A.PERCENT_RANK_SYMBOL=198;A.NTILE_SYMBOL=199;A.LEAD_SYMBOL=200;A.LAG_SYMBOL=201;A.FIRST_VALUE_SYMBOL=202;A.LAST_VALUE_SYMBOL=203;A.NTH_VALUE_SYMBOL=204;A.FIRST_SYMBOL=205;A.LAST_SYMBOL=206;A.OVER_SYMBOL=207;A.RESPECT_SYMBOL=208;A.NULLS_SYMBOL=209;A.JSON_ARRAYAGG_SYMBOL=210;A.JSON_OBJECTAGG_SYMBOL=211;A.BOOLEAN_SYMBOL=212;A.LANGUAGE_SYMBOL=213;A.QUERY_SYMBOL=214;A.EXPANSION_SYMBOL=215;A.CHAR_SYMBOL=216;A.CURRENT_USER_SYMBOL=217;A.DATE_SYMBOL=218;A.INSERT_SYMBOL=219;A.TIME_SYMBOL=220;A.TIMESTAMP_SYMBOL=221;A.TIMESTAMP_LTZ_SYMBOL=222;A.TIMESTAMP_NTZ_SYMBOL=223;A.ZONE_SYMBOL=224;A.USER_SYMBOL=225;A.ADDDATE_SYMBOL=226;A.SUBDATE_SYMBOL=227;A.CURDATE_SYMBOL=228;A.CURTIME_SYMBOL=229;A.DATE_ADD_SYMBOL=230;A.DATE_SUB_SYMBOL=231;A.EXTRACT_SYMBOL=232;A.GET_FORMAT_SYMBOL=233;A.NOW_SYMBOL=234;A.POSITION_SYMBOL=235;A.SYSDATE_SYMBOL=236;A.TIMESTAMP_ADD_SYMBOL=237;A.TIMESTAMP_DIFF_SYMBOL=238;A.UTC_DATE_SYMBOL=239;A.UTC_TIME_SYMBOL=240;A.UTC_TIMESTAMP_SYMBOL=241;A.ASCII_SYMBOL=242;A.CHARSET_SYMBOL=243;A.COALESCE_SYMBOL=244;A.COLLATION_SYMBOL=245;A.DATABASE_SYMBOL=246;A.IF_SYMBOL=247;A.FORMAT_SYMBOL=248;A.MICROSECOND_SYMBOL=249;A.OLD_PASSWORD_SYMBOL=250;A.PASSWORD_SYMBOL=251;A.REPEAT_SYMBOL=252;A.REPLACE_SYMBOL=253;A.REVERSE_SYMBOL=254;A.ROW_COUNT_SYMBOL=255;A.TRUNCATE_SYMBOL=256;A.WEIGHT_STRING_SYMBOL=257;A.CONTAINS_SYMBOL=258;A.GEOMETRYCOLLECTION_SYMBOL=259;A.LINESTRING_SYMBOL=260;A.MULTILINESTRING_SYMBOL=261;A.MULTIPOINT_SYMBOL=262;A.MULTIPOLYGON_SYMBOL=263;A.POINT_SYMBOL=264;A.POLYGON_SYMBOL=265;A.LEVEL_SYMBOL=266;A.DATETIME_SYMBOL=267;A.TRIM_SYMBOL=268;A.LEADING_SYMBOL=269;A.TRAILING_SYMBOL=270;A.BOTH_SYMBOL=271;A.STRING_SYMBOL=272;A.SUBSTRING_SYMBOL=273;A.WHEN_SYMBOL=274;A.THEN_SYMBOL=275;A.ELSE_SYMBOL=276;A.SIGNED_SYMBOL=277;A.UNSIGNED_SYMBOL=278;A.DECIMAL_SYMBOL=279;A.JSON_SYMBOL=280;A.FLOAT_SYMBOL=281;A.FLOAT_SYMBOL_4=282;A.FLOAT_SYMBOL_8=283;A.SET_SYMBOL=284;A.SECOND_MICROSECOND_SYMBOL=285;A.MINUTE_MICROSECOND_SYMBOL=286;A.MINUTE_SECOND_SYMBOL=287;A.HOUR_MICROSECOND_SYMBOL=288;A.HOUR_SECOND_SYMBOL=289;A.HOUR_MINUTE_SYMBOL=290;A.DAY_MICROSECOND_SYMBOL=291;A.DAY_SECOND_SYMBOL=292;A.DAY_MINUTE_SYMBOL=293;A.DAY_HOUR_SYMBOL=294;A.YEAR_MONTH_SYMBOL=295;A.BTREE_SYMBOL=296;A.RTREE_SYMBOL=297;A.HASH_SYMBOL=298;A.REAL_SYMBOL=299;A.DOUBLE_SYMBOL=300;A.PRECISION_SYMBOL=301;A.NUMERIC_SYMBOL=302;A.NUMBER_SYMBOL=303;A.FIXED_SYMBOL=304;A.BIT_SYMBOL=305;A.BOOL_SYMBOL=306;A.VARYING_SYMBOL=307;A.VARCHAR_SYMBOL=308;A.VARCHAR2_SYMBOL=309;A.NATIONAL_SYMBOL=310;A.NVARCHAR_SYMBOL=311;A.NVARCHAR2_SYMBOL=312;A.NCHAR_SYMBOL=313;A.VARBINARY_SYMBOL=314;A.TINYBLOB_SYMBOL=315;A.BLOB_SYMBOL=316;A.CLOB_SYMBOL=317;A.BFILE_SYMBOL=318;A.RAW_SYMBOL=319;A.MEDIUMBLOB_SYMBOL=320;A.LONGBLOB_SYMBOL=321;A.LONG_SYMBOL=322;A.TINYTEXT_SYMBOL=323;A.TEXT_SYMBOL=324;A.MEDIUMTEXT_SYMBOL=325;A.LONGTEXT_SYMBOL=326;A.ENUM_SYMBOL=327;A.SERIAL_SYMBOL=328;A.GEOMETRY_SYMBOL=329;A.ZEROFILL_SYMBOL=330;A.BYTE_SYMBOL=331;A.UNICODE_SYMBOL=332;A.TERMINATED_SYMBOL=333;A.OPTIONALLY_SYMBOL=334;A.ENCLOSED_SYMBOL=335;A.ESCAPED_SYMBOL=336;A.LINES_SYMBOL=337;A.STARTING_SYMBOL=338;A.GLOBAL_SYMBOL=339;A.LOCAL_SYMBOL=340;A.SESSION_SYMBOL=341;A.VARIANT_SYMBOL=342;A.OBJECT_SYMBOL=343;A.GEOGRAPHY_SYMBOL=344;A.UNPIVOT_SYMBOL=345;A.WHITESPACE=346;A.INVALID_INPUT=347;A.UNDERSCORE_CHARSET=348;A.IDENTIFIER=349;A.NCHAR_TEXT=350;A.BACK_TICK_QUOTED_ID=351;A.DOUBLE_QUOTED_TEXT=352;A.SINGLE_QUOTED_TEXT=353;A.BRACKET_QUOTED_TEXT=354;A.BRACKET_QUOTED_NUMBER=355;A.CURLY_BRACES_QUOTED_TEXT=356;A.VERSION_COMMENT_START=357;A.MYSQL_COMMENT_START=358;A.SNOWFLAKE_COMMENT=359;A.VERSION_COMMENT_END=360;A.BLOCK_COMMENT=361;A.POUND_COMMENT=362;A.DASHDASH_COMMENT=363;ty.exports=A});var t8=v((L00,iy)=>{var _q=e2(),u8=class u8 extends _q.tree.ParseTreeListener{enterQuery(e){}exitQuery(e){}enterValues(e){}exitValues(e){}enterSelectStatement(e){}exitSelectStatement(e){}enterSelectStatementWithInto(e){}exitSelectStatementWithInto(e){}enterQueryExpression(e){}exitQueryExpression(e){}enterQueryExpressionBody(e){}exitQueryExpressionBody(e){}enterQueryExpressionParens(e){}exitQueryExpressionParens(e){}enterQueryPrimary(e){}exitQueryPrimary(e){}enterQuerySpecification(e){}exitQuerySpecification(e){}enterSubquery(e){}exitSubquery(e){}enterQuerySpecOption(e){}exitQuerySpecOption(e){}enterLimitClause(e){}exitLimitClause(e){}enterLimitOptions(e){}exitLimitOptions(e){}enterLimitOption(e){}exitLimitOption(e){}enterIntoClause(e){}exitIntoClause(e){}enterProcedureAnalyseClause(e){}exitProcedureAnalyseClause(e){}enterHavingClause(e){}exitHavingClause(e){}enterWindowClause(e){}exitWindowClause(e){}enterWindowDefinition(e){}exitWindowDefinition(e){}enterWindowSpec(e){}exitWindowSpec(e){}enterWindowSpecDetails(e){}exitWindowSpecDetails(e){}enterWindowFrameClause(e){}exitWindowFrameClause(e){}enterWindowFrameUnits(e){}exitWindowFrameUnits(e){}enterWindowFrameExtent(e){}exitWindowFrameExtent(e){}enterWindowFrameStart(e){}exitWindowFrameStart(e){}enterWindowFrameBetween(e){}exitWindowFrameBetween(e){}enterWindowFrameBound(e){}exitWindowFrameBound(e){}enterWindowFrameExclusion(e){}exitWindowFrameExclusion(e){}enterWithClause(e){}exitWithClause(e){}enterCommonTableExpression(e){}exitCommonTableExpression(e){}enterGroupByClause(e){}exitGroupByClause(e){}enterOlapOption(e){}exitOlapOption(e){}enterOrderClause(e){}exitOrderClause(e){}enterDirection(e){}exitDirection(e){}enterFromClause(e){}exitFromClause(e){}enterTableReferenceList(e){}exitTableReferenceList(e){}enterTableValueConstructor(e){}exitTableValueConstructor(e){}enterExplicitTable(e){}exitExplicitTable(e){}enterRowValueExplicit(e){}exitRowValueExplicit(e){}enterSelectOption(e){}exitSelectOption(e){}enterLockingClauseList(e){}exitLockingClauseList(e){}enterLockingClause(e){}exitLockingClause(e){}enterLockStrengh(e){}exitLockStrengh(e){}enterLockedRowAction(e){}exitLockedRowAction(e){}enterSelectItemList(e){}exitSelectItemList(e){}enterSelectItem(e){}exitSelectItem(e){}enterSelectAlias(e){}exitSelectAlias(e){}enterWhereClause(e){}exitWhereClause(e){}enterQualifyClause(e){}exitQualifyClause(e){}enterTableReference(e){}exitTableReference(e){}enterEscapedTableReference(e){}exitEscapedTableReference(e){}enterJoinedTable(e){}exitJoinedTable(e){}enterNaturalJoinType(e){}exitNaturalJoinType(e){}enterInnerJoinType(e){}exitInnerJoinType(e){}enterOuterJoinType(e){}exitOuterJoinType(e){}enterTableFactor(e){}exitTableFactor(e){}enterSingleTable(e){}exitSingleTable(e){}enterSingleTableParens(e){}exitSingleTableParens(e){}enterDerivedTable(e){}exitDerivedTable(e){}enterTableReferenceListParens(e){}exitTableReferenceListParens(e){}enterTableFunction(e){}exitTableFunction(e){}enterColumnsClause(e){}exitColumnsClause(e){}enterJtColumn(e){}exitJtColumn(e){}enterOnEmptyOrError(e){}exitOnEmptyOrError(e){}enterOnEmpty(e){}exitOnEmpty(e){}enterOnError(e){}exitOnError(e){}enterJtOnResponse(e){}exitJtOnResponse(e){}enterUnionOption(e){}exitUnionOption(e){}enterTableAlias(e){}exitTableAlias(e){}enterIndexHintList(e){}exitIndexHintList(e){}enterIndexHint(e){}exitIndexHint(e){}enterIndexHintType(e){}exitIndexHintType(e){}enterKeyOrIndex(e){}exitKeyOrIndex(e){}enterIndexHintClause(e){}exitIndexHintClause(e){}enterIndexList(e){}exitIndexList(e){}enterIndexListElement(e){}exitIndexListElement(e){}enterExpr(e){}exitExpr(e){}enterBoolPri(e){}exitBoolPri(e){}enterCompOp(e){}exitCompOp(e){}enterPredicate(e){}exitPredicate(e){}enterPredicateOperations(e){}exitPredicateOperations(e){}enterBitExpr(e){}exitBitExpr(e){}enterSimpleExpr(e){}exitSimpleExpr(e){}enterJsonOperator(e){}exitJsonOperator(e){}enterSumExpr(e){}exitSumExpr(e){}enterGroupingOperation(e){}exitGroupingOperation(e){}enterWindowFunctionCall(e){}exitWindowFunctionCall(e){}enterWindowingClause(e){}exitWindowingClause(e){}enterLeadLagInfo(e){}exitLeadLagInfo(e){}enterNullTreatment(e){}exitNullTreatment(e){}enterJsonFunction(e){}exitJsonFunction(e){}enterInSumExpr(e){}exitInSumExpr(e){}enterIdentListArg(e){}exitIdentListArg(e){}enterIdentList(e){}exitIdentList(e){}enterFulltextOptions(e){}exitFulltextOptions(e){}enterRuntimeFunctionCall(e){}exitRuntimeFunctionCall(e){}enterGeometryFunction(e){}exitGeometryFunction(e){}enterTimeFunctionParameters(e){}exitTimeFunctionParameters(e){}enterFractionalPrecision(e){}exitFractionalPrecision(e){}enterWeightStringLevels(e){}exitWeightStringLevels(e){}enterWeightStringLevelListItem(e){}exitWeightStringLevelListItem(e){}enterDateTimeTtype(e){}exitDateTimeTtype(e){}enterTrimFunction(e){}exitTrimFunction(e){}enterSubstringFunction(e){}exitSubstringFunction(e){}enterFunctionCall(e){}exitFunctionCall(e){}enterUdfExprList(e){}exitUdfExprList(e){}enterUdfExpr(e){}exitUdfExpr(e){}enterUnpivotClause(e){}exitUnpivotClause(e){}enterVariable(e){}exitVariable(e){}enterUserVariable(e){}exitUserVariable(e){}enterSystemVariable(e){}exitSystemVariable(e){}enterWhenExpression(e){}exitWhenExpression(e){}enterThenExpression(e){}exitThenExpression(e){}enterElseExpression(e){}exitElseExpression(e){}enterExprList(e){}exitExprList(e){}enterCharset(e){}exitCharset(e){}enterNotRule(e){}exitNotRule(e){}enterNot2Rule(e){}exitNot2Rule(e){}enterInterval(e){}exitInterval(e){}enterIntervalTimeStamp(e){}exitIntervalTimeStamp(e){}enterExprListWithParentheses(e){}exitExprListWithParentheses(e){}enterExprWithParentheses(e){}exitExprWithParentheses(e){}enterSimpleExprWithParentheses(e){}exitSimpleExprWithParentheses(e){}enterOrderList(e){}exitOrderList(e){}enterOrderExpression(e){}exitOrderExpression(e){}enterIndexType(e){}exitIndexType(e){}enterDataType(e){}exitDataType(e){}enterNchar(e){}exitNchar(e){}enterFieldLength(e){}exitFieldLength(e){}enterFieldOptions(e){}exitFieldOptions(e){}enterCharsetWithOptBinary(e){}exitCharsetWithOptBinary(e){}enterAscii(e){}exitAscii(e){}enterUnicode(e){}exitUnicode(e){}enterWsNumCodepoints(e){}exitWsNumCodepoints(e){}enterTypeDatetimePrecision(e){}exitTypeDatetimePrecision(e){}enterCharsetName(e){}exitCharsetName(e){}enterCollationName(e){}exitCollationName(e){}enterCollate(e){}exitCollate(e){}enterCharsetClause(e){}exitCharsetClause(e){}enterFieldsClause(e){}exitFieldsClause(e){}enterFieldTerm(e){}exitFieldTerm(e){}enterLinesClause(e){}exitLinesClause(e){}enterLineTerm(e){}exitLineTerm(e){}enterUsePartition(e){}exitUsePartition(e){}enterColumnInternalRefList(e){}exitColumnInternalRefList(e){}enterTableAliasRefList(e){}exitTableAliasRefList(e){}enterPureIdentifier(e){}exitPureIdentifier(e){}enterIdentifier(e){}exitIdentifier(e){}enterIdentifierList(e){}exitIdentifierList(e){}enterIdentifierListWithParentheses(e){}exitIdentifierListWithParentheses(e){}enterQualifiedIdentifier(e){}exitQualifiedIdentifier(e){}enterJsonPathIdentifier(e){}exitJsonPathIdentifier(e){}enterDotIdentifier(e){}exitDotIdentifier(e){}enterUlong_number(e){}exitUlong_number(e){}enterReal_ulong_number(e){}exitReal_ulong_number(e){}enterUlonglong_number(e){}exitUlonglong_number(e){}enterReal_ulonglong_number(e){}exitReal_ulonglong_number(e){}enterLiteral(e){}exitLiteral(e){}enterStringList(e){}exitStringList(e){}enterTextStringLiteral(e){}exitTextStringLiteral(e){}enterTextString(e){}exitTextString(e){}enterTextLiteral(e){}exitTextLiteral(e){}enterNumLiteral(e){}exitNumLiteral(e){}enterBoolLiteral(e){}exitBoolLiteral(e){}enterNullLiteral(e){}exitNullLiteral(e){}enterTemporalLiteral(e){}exitTemporalLiteral(e){}enterFloatOptions(e){}exitFloatOptions(e){}enterPrecision(e){}exitPrecision(e){}enterTextOrIdentifier(e){}exitTextOrIdentifier(e){}enterParentheses(e){}exitParentheses(e){}enterEqual(e){}exitEqual(e){}enterVarIdentType(e){}exitVarIdentType(e){}enterIdentifierKeyword(e){}exitIdentifierKeyword(e){}};c(u8,"SQLSelectParserListener");var e8=u8;iy.exports=e8});var sy=v((m00,ay)=>{var B=e2(),y=t8(),Aq=["\u608B\uA72A\u8133\uB9ED\u417C\u3BE7\u7786","\u5964\u016D\u09EB  ","   \x07 ",`\x07\b \b  + +\v \v`,"\f \f\r \r  ","    ","   ","    ","\x1B \x1B  ",'   ! !" "#'," #$ $% %& &' '( () )","* *+ +, ,- -. ./ /0 0","1 12 23 34 45 56 67 7","8 89 9: :; ;< <= => >","? ?@ @A AB BC CD DE E","F FG GH HI IJ JK KL L","M MN NO OP PQ QR RS S","T TU UV VW WX XY YZ Z","[ [\\ \\] ]^ ^_ _` `a a","b bc cd de ef fg gh h","i ij jk kl lm mn no o","p pq qr rs st tu uv v","w wx xy yz z{ {| |} }","~ ~\x7F \x7F\x80 \x80\x81 \x81","\x82 \x82\x83 \x83\x84 \x84\x85 ","\x85\x86 \x86\x87 \x87\x88 \x88","\x89 \x89\x8A \x8A\x8B \x8B\x8C ","\x8C\x8D \x8D\x8E \x8E\x8F \x8F","\x90 \x90\x91 \x91\x92 \x92\x93 ","\x93\x94 \x94\x95 \x95\x96 \x96","\x97 \x97\x98 \x98\x99 \x99\x9A ","\x9A\x9B \x9B\x9C \x9C\x9D \x9D","\x9E \x9E\x9F \x9F\xA0 \xA0\xA1 ","\xA1\xA2 \xA2\xA3 \xA3\xA4 \xA4","\xA5 \xA5\xA6 \xA6\xA7 \xA7\xA8 ","\xA8\xA9 \xA9\xAA \xAA\xAB \xAB","\xAC \xAC\xAD \xAD\xAE \xAE",`\u015E +`,`\u0163 +\u0166 +`,`\u016A +`,`\u016F +\x07\u0171 +\f`,`\u0174\v\u0178 +`,`\u017C +`,"",`\u0185 +`,`\u018A +\u018D +`,`\u0191 +\u0194 +`,`\u0198 +`,`\u019B +\u019D +`,`\u01A0 +\x07\x07\x07\x07`,`\x07\u01A6 +\x07\x07\x07\x07\u01AA +\x07`,`\x07\u01AC +\x07\x07\x07\x07\u01B0`,` +\x07\x07\x07\x07\u01B4 +\x07\x07\x07`,`\u01B6 +\x07\f\x07\x07\u01B9\v\x07\b\b`,`\b\b\b\u01BF +\b\b\u01C1 +\b\b\b`,`    \u01C8 +  + +\x07 +\u01CC`,` + +\f + +\u01CF\v + + + +\u01D3 + +`,` + +\u01D6 + + + +\u01D9 + + +\x07 +\u01DC`,` + +\f + +\u01DF\v + + +\u01E2 + + +`,` +\u01E5 + + + +\u01E8 + + + +\u01EB + +`,`\v\v\v\u01EF +\v\f\f\f`,"\f\f\f\f\f\f\f\f",`\f\f\f\f\u01FF +\f\r\r\r`,`\u0207 +`,`\u020B +`,`\u0211 +\u0214`,` +\u0217 +`,`\u021D +`,`\u0222 +\x07\u0224 +`,`\f\u0227\v\u0229 +`,"",`\u0231 +\u0233 +`,"",`\x07\u023E +\f\u0241\v`,"",`\u024C +`,`\u0251 +`,`\u0254 +\u0257 +`,`\u025C +`,`\u0262 +`,"","",`\u0272 +\x1B`,"\x1B\x1B\x1B\x1B","","\u0286",` +`,`\u028F +`,`\u0293 +`,`\x07\u0298 +\f\u029B\v`,`\u029F +`,`     \u02A8 + !`,`!!!!\u02AE +!""""`,`##$$$$\u02B9 +$%%%\x07`,`%\u02BE +%\f%%\u02C1\v%&&&&\x07`,`&\u02C7 +&\f&&\u02CA\v&'''(`,`(((\u02D2 +((())))`,`)))\u02DC +)**\u02DF +*\r**\u02E0`,`+++++\u02E7 ++++\u02EA ++`,`+++++\u02F0 ++,,--`,`--\u02F7 +-...\u02FB +...\x07`,`.\u02FF +.\f..\u0302\v.///\u0306 +/`,`//\u0309 +////\u030D +//\u030F +/`,`00\u0312 +0000\u0316 +011`,`122233333\u0322 +3`,`3333\u0327 +33\x073\u032A +3\f33\u032D`,`\v344\x074\u0331 +4\f44\u0334\v45`,`555555\u033C +555`,`55555\u0344 +55555\u0349`,` +5666\u034D +66666`,`6\u0353 +666\u0356 +677\u0359 +77`,`77\u035D +7888\u0361 +888`,`999999\u036A +9:::\u036E`,` +:::\u0371 +:::\u0374 +:;;`,`;;\u0379 +;;;<<<\u037F +<`,`<<\u0382 +<<<<<\u0387 +<<`,`<\u038A +<<\u038C +<====\u0391 +=`,"==>>>>>>>>",`>\u039D +>?????\x07?\u03A4 +?\f?`,"?\u03A7\v???@@@@@",`@@@\u03B2 +@@@\u03B5 +@@@`,`@@\u03BA +@@@@@@@\u03C1 +`,`@AAA\u03C5 +AAAA\u03C9 +A`,`A\u03CB +ABBBBCCCC`,`DDDDD\u03D9 +DEEFF\u03DE`,` +FFFGGG\x07G\u03E5 +G\fGG\u03E8`,`\vGHHHH\u03ED +HHHH`,`HHHHH\u03F6 +HHHH\u03FA +`,`HHHH\u03FE +HIIJJK`,`KKKKKK\u040A +KLLL\x07`,`L\u040F +L\fLL\u0412\vLMMM\u0416 +M`,`NNNNN\u041C +NNN\u041F +N`,`NNN\u0423 +NNNNNNN`,`NNN\x07N\u042E +N\fNN\u0431\vNO`,`OOOOOO\u0439 +OOOO`,`OOOOOOO\x07O\u0445 +O\fO`,`O\u0448\vOPPQQQ\u044E +QQ`,`QQQ\u0453 +QQQQQQQ\u045A`,` +QRRRRRRR\u0462 +R`,"RRRRRRRRRR\u046D",` +RRRR\u0471 +RSSSS`,"SSSSSSSSSS","SSSSSSSSSS",`SS\u048C +S\x07S\u048E +S\fSS\u0491\vST`,`TTTTT\u0498 +TTTT\u049C +`,"TTTTTTTTTT",`TTTTT\u04AB +TTTTT`,`TT\u04B2 +TTTTTTTT`,`TTTTTT\u04C0 +TTTT`,`TTTTTTTT\u04CC +TT`,`TTTT\u04D2 +TTTTT\u04D7 +`,`T\rTT\u04D8TT\u04DC +TTTT`,"TTTTTTTTTT","TTTTTTTTTT","TTTTTTTTTT",`T\u04FF +TTTTTTTTT`,`T\x07T\u050A +T\fTT\u050D\vTUUU`,`U\u0512 +UVVVV\u0517 +VVV`,`VV\u051C +VVVVVVV\u0523 +`,`VVVVVV\u0529 +VVVV`,`V\u052E +VVVVV\u0533 +VVV`,`VVV\u0539 +VVVV\u053D +VV`,`VVV\u0542 +VVVVV\u0547 +V`,`VVVV\u054C +VVVVV\u0551 +`,`VVVVVVV\u0558 +VVV`,`VVVV\u055F +VVVVVV`,`V\u0566 +VVVVVVV\u056D +V`,`VVVV\u0572 +VVVVV\u0577 +`,`VVVVV\u057C +VVVV\u0580 +`,`VVVV\u0584 +VVVV\u0588 +V`,`V\u058A +VWWWWWXXX`,"XXXXXXXXXX\u059D",` +XXXX\u05A1 +XXXXX`,`XX\u05A8 +XXXXXXXX`,`XXXX\u05B4 +XXX\u05B7 +XX`,`XX\u05BB +XYYYY\u05C0 +YZ`,`ZZZ\u05C5 +ZZZZ\u05C9 +Z[`,`[[\\\\\\\\\\\\\u05D3 +\\`,`\\\\\\\\\\\\\\\\\u05DC +\\`,`\\\u05DE +\\]]\u05E1 +]]]^`,`^^^^^\u05EA +^___\x07_\u05EF`,"\n_\f__\u05F2\v_`````","``````\u05FE\n````","`\u0603\n`aaaaaa\u060A\na",`aaaaa\u0610 +aaaaa`,"aaaaaaaaaa",`aaaaaaaaa\u0628 +a\r`,"aa\u0629aaaaaaa","aaaaaaaaaa","aaaaaaaaaa",`aaa\u0649 +aaaaaaa`,"aaaaaaaaaa",`aaa\u065D +aaaaaa\u0663 +`,`aaaa\u0667 +aaaaaa`,"aaaaaaaaaa","aaaaaaaaaa",`a\u0682 +aaaaaaaaa`,`aaa\u068E +aaaaaaa`,`aaaaaa\u069B +aaaa\u069F`,` +aaaa\u06A3 +aaaaa`,"aaaaaaaaaa","aaaaaaaaaa",`aaa\u06BF +aaaaaaa`,"aaaaaaaaaa","aaaaaaaaaa","aaaaaaaaaa","aaaaaaaaaa",`aaaaaaa\u06F5 +aaa`,`aaaaaaa\u06FF +aaa\u0702`,` +aaaaaaaaaa`,`aa\u070E +aaaaa\u0713 +ab`,"bbbbbbbbbb\u071F",` +bbbbbbbbbb`,"bbbbbbbbbb\u0733",` +bccc\u0737 +cccdd`,`eeeeeeee\x07e\u0745 +e\f`,`ee\u0748\vee\u074A +effff\u074F`,` +fff\u0752 +fgghhh`,`hhh\u075B +hhhh\u075F +hh`,`hhhh\u0765 +hhhhhh\u076B`,` +hhhh\u076F +hhhii`,`iiiiii\u077A +iiii`,`ii\u0780 +ii\u0782 +iiijj`,`jj\u0789 +jjjjjjj\u0790 +`,`jjj\u0793 +jj\u0795 +jjjj\u0799`,` +jkkk\x07k\u079E +k\fkk\u07A1\vk`,`lll\u07A5 +lll\u07A8 +lmm`,`mmmm\u07AF +mmmmm\x07m\u07B5`,` +m\fmm\u07B8\vmnnn\u07BC +no`,`ooo\u07C1 +oppp\u07C5 +pp`,`pp\u07C9 +pqqqrrrs`,`ssttt\x07t\u07D7 +t\ftt\u07DA\v`,`tuuuu\u07DF +uvvww`,`xxx\u07E7 +xyyzzzz`,"{{{{||||}}",`}\x07}\u07FA +}\f}}\u07FD\v}~~~\u0801`,` +~\x7F\x7F\x80\x80\x80\u0807`,` +\x80\x80\x80\u080A +\x80\x80\x80`,`\x80\x80\u080F +\x80\x80\u0811 +\x80`,`\x80\x80\u0814 +\x80\x80\x80\u0817 +\x80`,`\x80\x80\x80\u081B +\x80\x80`,`\x80\u081E +\x80\x80\x80\x80\u0822 +\x80`,`\x80\x80\x80\x80\u0827 +\x80`,`\x80\x80\u082A +\x80\x80\x80\x80`,`\u082E +\x80\x80\x80\x80\x80`,`\x80\x80\u0835 +\x80\x80\x80\x80`,"\x80\x80\x80\x80\x80\x80",`\x80\x80\x80\x80\x80\u0844 +`,`\x80\x80\x80\x80\u0848 +\x80\x80`,`\x80\x80\x80\x80\u084E +\x80`,`\x80\x80\u0851 +\x80\x80\x80\x80`,`\x80\u0856 +\x80\x80\x80\x80\u085A`,` +\x80\x80\x80\x80\u085E +\x80\x80`,`\x80\x80\u0862 +\x80\x80\x80`,`\x80\x80\x80\x80\x80\u086A +\x80`,"\x80\x80\x80\x80\x80\x80",`\x80\u0872 +\x80\x80\x80\x80`,`\x80\x80\x80\u0879 +\x80\x80\x80`,`\x80\u087D +\x80\x80\x80\x80`,`\x80\x80\x80\x80\x80\u0886 +\x80`,`\x80\x80\u0889 +\x80\x80\x80`,"\x80\x80\x80\x80\x80\x80",`\x80\u0893 +\x80\x80\x80\u0896 +\x80\x80`,`\x80\x80\u089A +\x80\x80\x80`,`\x80\u089E +\x80\x80\x80\u08A1 +\x80\x80`,`\x80\x80\u08A5 +\x80\x80\x80`,`\x80\u08A9 +\x80\x80\x80\x80\x80`,`\u08AE +\x80\x80\x80\x80\x80\u08B3`,` +\x80\x80\x80\x80\x80\x80`,"\x80\x80\x80\x80\x80\x80",`\x07\x80\u08C0 +\x80\f\x80\x80\u08C3\v\x80`,`\x80\u08C5 +\x80\x80\x80\x80\x80`,`\x07\x80\u08CB +\x80\f\x80\x80\u08CE\v\x80`,`\x80\u08D0 +\x80\x80\x80\x80\u08D4 +\x80`,`\x80\u08D6 +\x80\x81\x81\x81`,`\x81\u08DB +\x81\x82\x82\x82\x82`,`\u08E0 +\x82\x82\x82\u08E3 +\x82\x82`,`\x82\x83\x83\u08E8 +\x83\r\x83\x83\u08E9`,"\x84\x84\x84\x84\x84\x84",`\x84\u08F2 +\x84\x84\x84\x84`,`\x84\x84\u08F8 +\x84\x84\u08FA +\x84\x85`,`\x85\x85\u08FE +\x85\x85\x85`,`\x85\u0902 +\x85\x86\x86\x86\u0906 +\x86`,`\x86\x86\x86\u090A +\x86\x87`,"\x87\x87\x87\x88\x88\x88",`\x88\x89\x89\x89\x89\u0917 +\x89`,`\x8A\x8A\x8A\x8A\u091C +\x8A`,"\x8B\x8B\x8B\x8C\x8C\x8C",`\x8D\x8D\x8D\u0926 +\x8D\r\x8D\x8D\u0927`,`\x8E\x8E\x8E\x8E\x8E\u092E +`,"\x8E\x8E\x8E\x8E\x8E\x8E",`\x8E\x8E\u0936 +\x8E\x8F\x8F\x8F`,`\u093A +\x8F\r\x8F\x8F\u093B\x90\x90`,"\x90\x90\x91\x91\x91\x92",`\x92\x92\x92\x07\x92\u0949 +\x92\f\x92`,"\x92\u094C\v\x92\x92\x92\x93\x93",`\x93\x07\x93\u0953 +\x93\f\x93\x93\u0956\v`,"\x93\x94\x94\x95\x95\x95\u095C",` +\x95\x96\x96\x96\x07\x96\u0961 +\x96`,"\f\x96\x96\u0964\v\x96\x97\x97","\x97\x97\x98\x98\x98\x07\x98\u096D",` +\x98\f\x98\x98\u0970\v\x98\x98\x98`,`\x98\u0974 +\x98\x99\x99\x99`,`\x99\x99\x99\x07\x99\u097C +\x99\f\x99`,`\x99\u097F\v\x99\x99\x99\x99\u0983 +`,`\x99\x99\x99\x99\u0987 +\x99\x99`,`\u0989 +\x99\x9A\x9A\x9A\x9B`,"\x9B\x9C\x9C\x9D\x9D\x9E","\x9E\x9F\x9F\x9F\x9F\x9F",`\x9F\x9F\u099C +\x9F\x9F\x9F\u099F +\x9F`,`\xA0\xA0\xA0\xA0\x07\xA0\u09A5 +`,"\xA0\f\xA0\xA0\u09A8\v\xA0\xA0\xA0","\xA1\xA1\xA2\xA2\xA2\xA2",`\u09B1 +\xA2\xA3\xA3\u09B4 +\xA3\xA3`,`\xA3\xA3\u09B8 +\xA3\xA3\x07\xA3\u09BB +\xA3`,"\f\xA3\xA3\u09BE\v\xA3\xA4\xA4","\xA5\xA5\xA6\xA6\xA7\xA7",`\xA7\xA7\xA7\xA7\xA7\u09CC +\xA7`,`\xA8\xA8\xA8\u09D0 +\xA8\xA9`,"\xA9\xA9\xA9\xA9\xA9\xAA",`\xAA\xAA\u09DA +\xAA\xAB\xAB\xAB`,"\xAC\xAC\xAD\xAD\xAD\xAD",`\xAD\xAD\xAD\u09E7 +\xAD\xAE`,"\xAE\xAE\x9A\x9C\xA4\xA6\xAF",`\b +\f `,'"$&(*,.02468:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~\x80\x82\x84',"\x86\x88\x8A\x8C\x8E\x90\x92\x94\x96\x98\x9A\x9C","\x9E\xA0\xA2\xA4\xA6\xA8\xAA\xAC\xAE\xB0\xB2\xB4","\xB6\xB8\xBA\xBC\xBE\xC0\xC2\xC4\xC6\xC8\xCA\xCC","\xCE\xD0\xD2\xD4\xD6\xD8\xDA\xDC\xDE\xE0\xE2\xE4","\xE6\xE8\xEA\xEC\xEE\xF0\xF2\xF4\xF6\xF8\xFA\xFC","\xFE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114","\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C","\u012E\u0130\u0132\u0134\u0136\u0138\u013A\u013C\u013E\u0140\u0142\u0144","\u0146\u0148\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A","7MM,,00XZ","no{{}}\x89\x8A\x87\x87\x8C","\x8CDEUU\x98\x99","\x9A\x9B\x9E\xA0","aa\xA3\xA3DD\xA4\xA4",` +\v\xAA\xAB`,"\v\f\v\f","&'\xB6\xB8\xC4\xC8","\xCA\xCB\xCC\xCD\xCF\xD0","\x99\x99\xD2\xD2\xE4\xE5\xE8","\xE9\xEF\xF0\xDC\xDC\xDE\xDF\u010D","\u010D\u011F\u01299@\xFB\xFB","\u012A\u012C38\u0119\u0119\u0130\u0131\u0119","\u0119\u011B\u011D\u0130\u0130\u0132\u0132\xD6\xD6\u0134","\u0134\xDA\xDA\u0112\u0112\u0136\u0137\u0146\u0146","\u0142\u0143\u0105\u010B\u014B\u014B\u0117","\u0118\u014C\u014C\u014F\u014F\u0154\u0154\u015E","\u015F\u0161\u0164\u0166\u0166","..02..0002./\u0162","\u0163\x9E\x9F++\x96\x96","3\x81\x83\u015A\u0B4E\u015D","\u0169\u017B",`\b\u0189 +\u018C`,"\f\u01AB\u01BA","\u01C7\u01C9","\u01EE\u01FE","\u0200\u0203","\u020A\u020C",' \u022A"\u0236',"$\u0239&\u0242","(\u0246*\u024B",",\u0258.\u025D0\u0261","2\u02714\u0273","6\u02858\u0287",":\u0290<\u029C",">\u02A3@\u02AD","B\u02AFD\u02B3F\u02B5","H\u02BAJ\u02C2","L\u02CBN\u02CE","P\u02DBR\u02DE","T\u02EFV\u02F1","X\u02F6Z\u02FA\\\u030E","^\u0311`\u0317","b\u031Ad\u0326","f\u032Eh\u0348","j\u0355l\u035C","n\u035Ep\u0369r\u036B","t\u0375v\u038B","x\u038Dz\u0394","|\u039E~\u03C0","\x80\u03CA\x82\u03CC","\x84\u03D0\x86\u03D8","\x88\u03DA\x8A\u03DD","\x8C\u03E1\x8E\u03FD","\x90\u03FF\x92\u0401","\x94\u0403\x96\u040B","\x98\u0415\x9A\u0422","\x9C\u0432\x9E\u0449","\xA0\u044B\xA2\u0470","\xA4\u0472\xA6\u04FE","\xA8\u050E\xAA\u0589","\xAC\u058B\xAE\u05BA","\xB0\u05BC\xB2\u05C1","\xB4\u05CA\xB6\u05DD","\xB8\u05E0\xBA\u05E9","\xBC\u05EB\xBE\u0602","\xC0\u0712\xC2\u0732","\xC4\u0734\xC6\u073A","\xC8\u073C\xCA\u074B","\xCC\u0753\xCE\u0755","\xD0\u0772\xD2\u0798","\xD4\u079A\xD6\u07A2","\xD8\u07A9\xDA\u07BB","\xDC\u07C0\xDE\u07C2","\xE0\u07CA\xE2\u07CD","\xE4\u07D0\xE6\u07D3","\xE8\u07DE\xEA\u07E0","\xEC\u07E2\xEE\u07E6","\xF0\u07E8\xF2\u07EA","\xF4\u07EE\xF6\u07F2","\xF8\u07F6\xFA\u07FE","\xFC\u0802\xFE\u08D5","\u0100\u08DA\u0102\u08DC","\u0104\u08E7\u0106\u08F9","\u0108\u0901\u010A\u0909","\u010C\u090B\u010E\u090F","\u0110\u0916\u0112\u091B","\u0114\u091D\u0116\u0920","\u0118\u0923\u011A\u0935","\u011C\u0937\u011E\u093D","\u0120\u0941\u0122\u0944","\u0124\u094F\u0126\u0957","\u0128\u095B\u012A\u095D","\u012C\u0965\u012E\u0969","\u0130\u0975\u0132\u098A","\u0134\u098D\u0136\u098F","\u0138\u0991\u013A\u0993","\u013C\u099E\u013E\u09A0","\u0140\u09AB\u0142\u09B0","\u0144\u09B7\u0146\u09BF","\u0148\u09C1\u014A\u09C3","\u014C\u09CB\u014E\u09CF","\u0150\u09D1\u0152\u09D9","\u0154\u09DB\u0156\u09DE","\u0158\u09E6\u015A\u09E8","\u015C\u015E:\u015D\u015C","\u015D\u015E\u015E\u015F","\u015F\u0165\u0160\u0162\x07\x1B","\u0161\u0163\x07\u0162\u0161","\u0162\u0163\u0163\u0166","\u0164\u0166\x07\u0165\u0160","\u0165\u0164\u0166","\u0167\u016A\x9AN\u0168\u016A\x07A","\u0169\u0167\u0169\u0168","\u016A\u0172\u016B\u016E\x07","\u016C\u016F\x9AN\u016D\u016F\x07A\u016E","\u016C\u016E\u016D\u016F","\u0171\u0170\u016B\u0171","\u0174\u0172\u0170\u0172","\u0173\u0173\u0174",`\u0172\u0175\u0177 +\u0176`,"\u0178R*\u0177\u0176\u0177\u0178","\u0178\u017C\u0179\u017C","\b\u017A\u017C\b\u017B\u0175","\u017B\u0179\u017B\u017A","\u017C\x07\u017D\u017E\x07","\u017E\u017F\b\u017F\u0180\x07","\u0180\u018A\u0181\u0182",` +\u0182\u0184\u0183\u0185`,"R*\u0184\u0183\u0184\u0185","\u0185\u018A\u0186\u0187R","*\u0187\u0188\u0188\u018A","\u0189\u017D\u0189\u0181","\u0189\u0186\u018A ","\u018B\u018D:\u018C\u018B","\u018C\u018D\u018D\u019C",'\u018E\u0190\f\x07\u018F\u0191B"',"\u0190\u018F\u0190\u0191","\u0191\u0193\u0192\u0194\r","\u0193\u0192\u0193\u0194","\u0194\u019D\u0195\u0197\b",'\u0196\u0198B"\u0197\u0196\u0197',"\u0198\u0198\u019A\u0199","\u019B\r\u019A\u0199\u019A","\u019B\u019B\u019D\u019C","\u018E\u019C\u0195\u019D","\u019F\u019E\u01A0 \u019F","\u019E\u019F\u01A0\u01A0","\v\u01A1\u01AC \u01A2","\u01A3\b\u01A3\u01A5\x07B\u01A4\u01A6","\x88E\u01A5\u01A4\u01A5\u01A6","\u01A6\u01A9\u01A7\u01AA"," \u01A8\u01AA\b\u01A9\u01A7","\u01A9\u01A8\u01AA\u01AC","\u01AB\u01A1\u01AB\u01A2","\u01AC\u01B7\u01AD\u01AF\x07","B\u01AE\u01B0\x88E\u01AF\u01AE","\u01AF\u01B0\u01B0\u01B3","\u01B1\u01B4 \u01B2\u01B4","\b\u01B3\u01B1\u01B3\u01B2","\u01B4\u01B6\u01B5\u01AD","\u01B6\u01B9\u01B7\u01B5","\u01B7\u01B8\u01B8\r","\u01B9\u01B7\u01BA\u01C0\x07",`\u01BB\u01C1\b\u01BC\u01BE +`,"\u01BD\u01BFR*\u01BE\u01BD","\u01BE\u01BF\u01BF\u01C1","\u01C0\u01BB\u01C0\u01BC","\u01C1\u01C2\u01C2\u01C3\x07",`\u01C3\u01C4\u01C8 +`,"\u01C5\u01C8J&\u01C6\u01C8L'\u01C7\u01C4","\u01C7\u01C5\u01C7\u01C6","\u01C8\u01C9\u01CD\x07","C\u01CA\u01CCP)\u01CB\u01CA","\u01CC\u01CF\u01CD\u01CB","\u01CD\u01CE\u01CE\u01D0","\u01CF\u01CD\u01D0\u01D2Z.","\u01D1\u01D3\u01D2\u01D1","\u01D2\u01D3\u01D3\u01D5","\u01D4\u01D6F$\u01D5\u01D4\u01D5","\u01D6\u01D6\u01D8\u01D7","\u01D9`1\u01D8\u01D7\u01D8\u01D9","\u01D9\u01DD\u01DA\u01DC","\xD8m\u01DB\u01DA\u01DC\u01DF","\u01DD\u01DB\u01DD\u01DE","\u01DE\u01E1\u01DF\u01DD","\u01E0\u01E2b2\u01E1\u01E0","\u01E1\u01E2\u01E2\u01E4","\u01E3\u01E5> \u01E4\u01E3","\u01E4\u01E5\u01E5\u01E7",'\u01E6\u01E8"\u01E7\u01E6',"\u01E7\u01E8\u01E8\u01EA","\u01E9\u01EB$\u01EA\u01E9","\u01EA\u01EB\u01EB","\u01EC\u01EF\u01ED\u01EF","\b\u01EE\u01EC\u01EE\u01ED","\u01EF\u01F0\u01FF\x07D","\u01F1\u01F2\x07E\u01F2\u01F3\x07\x84","\u01F3\u01F4\x07\u01F4\u01F5\u012E","\x98\u01F5\u01F6\x07\u01F6\u01FF","\u01F7\u01FF\x07E\u01F8\u01FF\x07F","\u01F9\u01FF\x07G\u01FA\u01FF\x07H","\u01FB\u01FF\x07I\u01FC\u01FF\x07J\u01FD","\u01FF\x07K\u01FE\u01F0\u01FE","\u01F1\u01FE\u01F7\u01FE","\u01F8\u01FE\u01F9\u01FE","\u01FA\u01FE\u01FB\u01FE","\u01FC\u01FE\u01FD\u01FF","\u0200\u0201\x07L\u0201","\u0202\u0202\u0203","\u0206\u0204\u0205 \u0205","\u0207\u0206\u0204\u0206","\u0207\u0207\x1B\u0208","\u020B\u0128\x95\u0209\u020B \u020A","\u0208\u020A\u0209\u020B","\u020C\u0228\x07N\u020D","\u020E\x07O\u020E\u0210\u0140\xA1\u020F","\u0211\u0116\x8C\u0210\u020F\u0210","\u0211\u0211\u0213\u0212","\u0214\u0118\x8D\u0213\u0212\u0213","\u0214\u0214\u0216\u0215","\u0217\u011C\x8F\u0216\u0215\u0216","\u0217\u0217\u0229\u0218","\u0219\x07P\u0219\u0229\u0140\xA1\u021A","\u021D\u0152\xAA\u021B\u021D\xDCo\u021C","\u021A\u021C\u021B\u021D","\u0225\u021E\u0221\x07\u021F","\u0222\u0152\xAA\u0220\u0222\xDCo\u0221","\u021F\u0221\u0220\u0222","\u0224\u0223\u021E\u0224","\u0227\u0225\u0223\u0225","\u0226\u0226\u0229\u0227","\u0225\u0228\u020D\u0228","\u0218\u0228\u021C\u0229","\u022A\u022B\x07Q\u022B","\u022C\x07R\u022C\u0232\x07\u022D","\u0230\x070\u022E\u022F\x07\u022F","\u0231\x070\u0230\u022E\u0230","\u0231\u0231\u0233\u0232","\u022D\u0232\u0233\u0233","\u0234\u0234\u0235\x07\u0235","!\u0236\u0237\x07S\u0237\u0238","\x9AN\u0238#\u0239\u023A\x07","T\u023A\u023F&\u023B\u023C\x07","\u023C\u023E&\u023D\u023B","\u023E\u0241\u023F\u023D","\u023F\u0240\u0240%","\u0241\u023F\u0242\u0243\u0128","\x95\u0243\u0244\x07U\u0244\u0245(","\u0245'\u0246\u0247\x07","\u0247\u0248*\u0248\u0249\x07","\u0249)\u024A\u024C\u0128\x95","\u024B\u024A\u024B\u024C","\u024C\u0250\u024D\u024E\x07V","\u024E\u024F\x07W\u024F\u0251\xF8}","\u0250\u024D\u0250\u0251",'\u0251\u0253\u0252\u0254B"\u0253',"\u0252\u0253\u0254\u0254","\u0256\u0255\u0257,\u0256","\u0255\u0256\u0257\u0257","+\u0258\u0259.\u0259\u025B","0\u025A\u025C8\u025B\u025A","\u025B\u025C\u025C-","\u025D\u025E \u025E/","\u025F\u02622\u0260\u02624\x1B","\u0261\u025F\u0261\u0260","\u02621\u0263\u0264\x07[","\u0264\u0272\x07\\\u0265\u0266\u0138\x9D","\u0266\u0267\x07\\\u0267\u0272","\u0268\u0269\x07,\u0269\u0272\x07\\\u026A","\u026B\x07]\u026B\u026C\x9AN\u026C\u026D","\xEEx\u026D\u026E\x07\\\u026E\u0272","\u026F\u0270\x07^\u0270\u0272\x07","_\u0271\u0263\u0271\u0265","\u0271\u0268\u0271\u026A","\u0271\u026F\u02723","\u0273\u0274\x07`\u0274\u0275","6\u0275\u0276\x07a\u0276\u02776","\u02775\u0278\u02862","\u0279\u027A\x07[\u027A\u0286\x07b\u027B","\u027C\u0138\x9D\u027C\u027D\x07b\u027D","\u0286\u027E\u027F\x07,\u027F","\u0286\x07b\u0280\u0281\x07]\u0281\u0282","\x9AN\u0282\u0283\xEEx\u0283\u0284\x07","b\u0284\u0286\u0285\u0278","\u0285\u0279\u0285\u027B","\u0285\u027E\u0285\u0280","\u02867\u0287\u028E\x07","c\u0288\u0289\x07^\u0289\u028F\x07_","\u028A\u028F\x07d\u028B\u028F\x07e","\u028C\u028D\x07f\u028D\u028F\x07g\u028E","\u0288\u028E\u028A\u028E","\u028B\u028E\u028C\u028F","9\u0290\u0292\x07h\u0291\u0293","\x07j\u0292\u0291\u0292\u0293","\u0293\u0294\u0294\u0299","<\u0295\u0296\x07\u0296\u0298","<\u0297\u0295\u0298\u029B","\u0299\u0297\u0299\u029A","\u029A;\u029B\u0299","\u029C\u029E\u0128\x95\u029D\u029F","\u0122\x92\u029E\u029D\u029E\u029F","\u029F\u02A0\u02A0\u02A1","\x07U\u02A1\u02A2\v\u02A2=","\u02A3\u02A4\x07d\u02A4\u02A5\x07","W\u02A5\u02A7\xF8}\u02A6\u02A8@!","\u02A7\u02A6\u02A7\u02A8","\u02A8?\u02A9\u02AA\x07h\u02AA","\u02AE\x07k\u02AB\u02AC\x07h\u02AC\u02AE","\x07l\u02AD\u02A9\u02AD\u02AB","\u02AEA\u02AF\u02B0","\x07m\u02B0\u02B1\x07W\u02B1\u02B2","\xF8}\u02B2C\u02B3\u02B4 ","\u02B4E\u02B5\u02B8\x07p","\u02B6\u02B9\x07q\u02B7\u02B9H%\u02B8\u02B6","\u02B8\u02B7\u02B9G","\u02BA\u02BFd3\u02BB\u02BC\x07","\u02BC\u02BEd3\u02BD\u02BB","\u02BE\u02C1\u02BF\u02BD","\u02BF\u02C0\u02C0I","\u02C1\u02BF\u02C2\u02C3\x07r","\u02C3\u02C8N(\u02C4\u02C5\x07","\u02C5\u02C7N(\u02C6\u02C4","\u02C7\u02CA\u02C8\u02C6","\u02C8\u02C9\u02C9K","\u02CA\u02C8\u02CB\u02CC\x07s","\u02CC\u02CD\u012E\x98\u02CDM","\u02CE\u02CF\x07_\u02CF\u02D1\x07","\u02D0\u02D2\u02D1\u02D0","\u02D1\u02D2\u02D2\u02D3","\u02D3\u02D4\x07\u02D4O","\u02D5\u02DC\f\u02D6\u02DC\x07t\u02D7","\u02DC\x07u\u02D8\u02D9\x07v\u02D9\u02DA","\x07\u02DA\u02DC\u0136\x9C\u02DB\u02D5","\u02DB\u02D6\u02DB\u02D7","\u02DB\u02D8\u02DCQ","\u02DD\u02DFT+\u02DE\u02DD","\u02DF\u02E0\u02E0\u02DE","\u02E0\u02E1\u02E1S","\u02E2\u02E3\x07w\u02E3\u02E6","V,\u02E4\u02E5\x07x\u02E5\u02E7\u0124\x93","\u02E6\u02E4\u02E6\u02E7","\u02E7\u02E9\u02E8\u02EAX-","\u02E9\u02E8\u02E9\u02EA","\u02EA\u02F0\u02EB\u02EC\x07y","\u02EC\u02ED\x07z\u02ED\u02EE\x07{\u02EE","\u02F0\x07|\u02EF\u02E2\u02EF","\u02EB\u02F0U\u02F1","\u02F2 \u02F2W\u02F3\u02F4","\x07~\u02F4\u02F7\x07\x7F\u02F5\u02F7","\x07\x80\u02F6\u02F3\u02F6\u02F5","\u02F7Y\u02F8\u02FB","\\/\u02F9\u02FB\x07\r\u02FA\u02F8","\u02FA\u02F9\u02FB\u0300","\u02FC\u02FD\x07\u02FD\u02FF\\","/\u02FE\u02FC\u02FF\u0302","\u0300\u02FE\u0300\u0301","\u0301[\u0302\u0300","\u0303\u0306\u012E\x98\u0304\u0306\u0130","\x99\u0305\u0303\u0305\u0304","\u0306\u0308\u0307\u0309^","0\u0308\u0307\u0308\u0309","\u0309\u030F\u030A\u030C\x9A","N\u030B\u030D^0\u030C\u030B","\u030C\u030D\u030D\u030F","\u030E\u0305\u030E\u030A","\u030F]\u0310\u0312\x07U\u0311","\u0310\u0311\u0312\u0312","\u0315\u0313\u0316\u0128\x95\u0314","\u0316\u0140\xA1\u0315\u0313\u0315","\u0314\u0316_\u0317","\u0318\x07\x81\u0318\u0319\x9AN\u0319","a\u031A\u031B\x07\x82\u031B","\u031C\x9AN\u031Cc\u031D\u0327","p9\u031E\u0321\x07\u031F\u0322","\u0128\x95\u0320\u0322\x07\x83\u0321\u031F","\u0321\u0320\u0322\u0323","\u0323\u0324f4\u0324\u0325\x07 ","\u0325\u0327\u0326\u031D","\u0326\u031E\u0327\u032B","\u0328\u032Ah5\u0329\u0328","\u032A\u032D\u032B\u0329","\u032B\u032C\u032Ce","\u032D\u032B\u032E\u0332p9\u032F","\u0331h5\u0330\u032F\u0331\u0334","\u0332\u0330\u0332\u0333","\u0333g\u0334\u0332","\u0335\u0336l7\u0336\u033B","d3\u0337\u0338\x07\x84\u0338\u033C\x9A","N\u0339\u033A\x07\x85\u033A\u033C\u012C","\x97\u033B\u0337\u033B\u0339","\u033B\u033C\u033C\u0349","\u033D\u033En8\u033E\u0343d3\u033F","\u0340\x07\x84\u0340\u0344\x9AN\u0341","\u0342\x07\x85\u0342\u0344\u012C\x97\u0343","\u033F\u0343\u0341\u0344","\u0349\u0345\u0346j6\u0346\u0347","p9\u0347\u0349\u0348\u0335","\u0348\u033D\u0348\u0345","\u0349i\u034A\u034C\x07","\x86\u034B\u034D\x07\x87\u034C\u034B","\u034C\u034D\u034D\u034E","\u034E\u0356\x07\x88\u034F\u0350\x07","\x86\u0350\u0352 \x07\u0351\u0353\x07","\x8B\u0352\u0351\u0352\u0353","\u0353\u0354\u0354\u0356\x07","\x88\u0355\u034A\u0355\u034F","\u0356k\u0357\u0359 \b","\u0358\u0357\u0358\u0359","\u0359\u035A\u035A\u035D\x07\x88","\u035B\u035D\x07F\u035C\u0358","\u035C\u035B\u035Dm","\u035E\u0360 \x07\u035F\u0361\x07\x8B","\u0360\u035F\u0360\u0361","\u0361\u0362\u0362\u0363\x07\x88","\u0363o\u0364\u036Ar:\u0365","\u036At;\u0366\u036Av<\u0367\u036Ax=","\u0368\u036Az>\u0369\u0364\u0369","\u0365\u0369\u0366\u0369","\u0367\u0369\u0368\u036A","q\u036B\u036D\u012E\x98\u036C","\u036E\u0120\x91\u036D\u036C\u036D","\u036E\u036E\u0370\u036F","\u0371\x8AF\u0370\u036F\u0370","\u0371\u0371\u0373\u0372","\u0374\x8CG\u0373\u0372\u0373","\u0374\u0374s\u0375","\u0378\x07\u0376\u0379r:\u0377\u0379","t;\u0378\u0376\u0378\u0377","\u0379\u037A\u037A\u037B\x07","\u037Bu\u037C\u037E","\v\u037D\u037F\x8AF\u037E\u037D","\u037E\u037F\u037F\u0381","\u0380\u0382\u0122\x92\u0381\u0380","\u0381\u0382\u0382\u038C","\u0383\u0384\x07\x8D\u0384\u0386","\v\u0385\u0387\x8AF\u0386\u0385","\u0386\u0387\u0387\u0389","\u0388\u038A\u0122\x92\u0389\u0388","\u0389\u038A\u038A\u038C","\u038B\u037C\u038B\u0383","\u038Cw\u038D\u0390\x07","\u038E\u0391H%\u038F\u0391x=","\u0390\u038E\u0390\u038F","\u0391\u0392\u0392\u0393\x07","\u0393y\u0394\u0395\x07\x8E","\u0395\u0396\x07\u0396\u0397\x9AN","\u0397\u0398\x07\u0398\u0399\u0140\xA1","\u0399\u039A|?\u039A\u039C\x07\u039B","\u039D\x8AF\u039C\u039B\u039C","\u039D\u039D{\u039E","\u039F\x07\x8F\u039F\u03A0\x07\u03A0","\u03A5~@\u03A1\u03A2\x07\u03A2\u03A4","~@\u03A3\u03A1\u03A4\u03A7","\u03A5\u03A3\u03A5\u03A6","\u03A6\u03A8\u03A7\u03A5","\u03A8\u03A9\x07\u03A9}","\u03AA\u03AB\u0128\x95\u03AB\u03AC\x07","w\u03AC\u03AD\x07\x90\u03AD\u03C1","\u03AE\u03AF\u0128\x95\u03AF\u03B1","\xFE\x80\u03B0\u03B2\u0114\x8B\u03B1\u03B0","\u03B1\u03B2\u03B2\u03B4","\u03B3\u03B5\x07\x91\u03B4\u03B3","\u03B4\u03B5\u03B5\u03B6","\u03B6\u03B7\x07\x92\u03B7\u03B9","\u0140\xA1\u03B8\u03BA\x80A\u03B9\u03B8","\u03B9\u03BA\u03BA\u03C1","\u03BB\u03BC\x07\x93\u03BC\u03BD\x07","\x92\u03BD\u03BE\u0140\xA1\u03BE\u03BF","|?\u03BF\u03C1\u03C0\u03AA","\u03C0\u03AE\u03C0\u03BB","\u03C1\x7F\u03C2\u03C4\x82","B\u03C3\u03C5\x84C\u03C4\u03C3","\u03C4\u03C5\u03C5\u03CB","\u03C6\u03C8\x84C\u03C7\u03C9\x82B","\u03C8\u03C7\u03C8\u03C9","\u03C9\u03CB\u03CA\u03C2","\u03CA\u03C6\u03CB\x81","\u03CC\u03CD\x86D\u03CD\u03CE\x07\x84","\u03CE\u03CF\x07\x94\u03CF\x83","\u03D0\u03D1\x86D\u03D1\u03D2\x07\x84","\u03D2\u03D3\x07\x95\u03D3\x85","\u03D4\u03D9\x07\x95\u03D5\u03D9\x07\x96","\u03D6\u03D7\x07A\u03D7\u03D9\u0140\xA1","\u03D8\u03D4\u03D8\u03D5","\u03D8\u03D6\u03D9\x87","\u03DA\u03DB \u03DB\x89\u03DC",`\u03DE +\u03DD\u03DC\u03DD\u03DE`,"\u03DE\u03DF\u03DF\u03E0","\u0128\x95\u03E0\x8B\u03E1\u03E6","\x8EH\u03E2\u03E3\x07\u03E3\u03E5","\x8EH\u03E4\u03E2\u03E5\u03E8","\u03E6\u03E4\u03E6\u03E7","\u03E7\x8D\u03E8\u03E6","\u03E9\u03EA\x90I\u03EA\u03EC","\x92J\u03EB\u03ED\x94K\u03EC\u03EB","\u03EC\u03ED\u03ED\u03EE","\u03EE\u03EF\x07\u03EF\u03F0","\x96L\u03F0\u03F1\x07\u03F1\u03FE","\u03F2\u03F3\x07\x97\u03F3\u03F5","\x92J\u03F4\u03F6\x94K\u03F5\u03F4","\u03F5\u03F6\u03F6\u03F7","\u03F7\u03F9\x07\u03F8\u03FA\x96","L\u03F9\u03F8\u03F9\u03FA","\u03FA\u03FB\u03FB\u03FC\x07","\u03FC\u03FE\u03FD\u03E9","\u03FD\u03F2\u03FE\x8F","\u03FF\u0400 \v\u0400\x91","\u0401\u0402 \f\u0402\x93","\u0403\u0409\x07w\u0404\u040A\x07\x88","\u0405\u0406\x07m\u0406\u040A\x07W","\u0407\u0408\x07d\u0408\u040A\x07W\u0409","\u0404\u0409\u0405\u0409","\u0407\u040A\x95\u040B","\u0410\x98M\u040C\u040D\x07\u040D","\u040F\x98M\u040E\u040C\u040F","\u0412\u0410\u040E\u0410","\u0411\u0411\x97\u0412","\u0410\u0413\u0416\u0128\x95\u0414","\u0416\x07\x9C\u0415\u0413\u0415","\u0414\u0416\x99\u0417","\u0418\bN\u0418\u041E\x9CO\u0419\u041B\x07","\x9D\u041A\u041C\xEAv\u041B\u041A","\u041B\u041C\u041C\u041D","\u041D\u041F \r\u041E\u0419","\u041E\u041F\u041F\u0423","\u0420\u0421\x07\xA1\u0421\u0423\x9A","N\u0422\u0417\u0422\u0420","\u0423\u042F\u0424\u0425\f","\u0425\u0426 \u0426\u042E\x9A","N\u0427\u0428\f\u0428\u0429\x07\xA2","\u0429\u042E\x9AN\u042A\u042B\f","\u042B\u042C \u042C\u042E\x9AN\u042D","\u0424\u042D\u0427\u042D","\u042A\u042E\u0431\u042F","\u042D\u042F\u0430\u0430","\x9B\u0431\u042F\u0432","\u0433\bO\u0433\u0434\xA0Q\u0434\u0446","\u0435\u0436\f\u0436\u0438\x07","\x9D\u0437\u0439\xEAv\u0438\u0437","\u0438\u0439\u0439\u043A","\u043A\u0445\x07\x96\u043B\u043C\f","\u043C\u043D\x9EP\u043D\u043E","\xA0Q\u043E\u0445\u043F\u0440\f","\u0440\u0441\x9EP\u0441\u0442 ","\u0442\u0443\v\u0443\u0445","\u0444\u0435\u0444\u043B","\u0444\u043F\u0445\u0448","\u0446\u0444\u0446\u0447","\u0447\x9D\u0448\u0446","\u0449\u044A \u044A\x9F","\u044B\u0459\xA4S\u044C\u044E\xEAv","\u044D\u044C\u044D\u044E","\u044E\u044F\u044F\u045A\xA2R","\u0450\u0452\x07\xA5\u0451\u0453\x07x","\u0452\u0451\u0452\u0453","\u0453\u0454\u0454\u045A\xF6|","\u0455\u0456\x07\xA6\u0456\u0457\x07\xA7","\u0457\u045A\xA4S\u0458\u045A\xB4[\u0459","\u044D\u0459\u0450\u0459","\u0455\u0459\u0458\u0459","\u045A\u045A\xA1\u045B","\u0461\x07z\u045C\u0462\v\u045D","\u045E\x07\u045E\u045F\xE6t\u045F","\u0460\x07\u0460\u0462\u0461","\u045C\u0461\u045D\u0462","\u0471\u0463\u0464\x07`\u0464","\u0465\xA4S\u0465\u0466\x07a\u0466\u0467","\xA0Q\u0467\u0471\u0468\u0469","\x07\xA7\u0469\u046C\xA6T\u046A\u046B","\x07\xA8\u046B\u046D\xA6T\u046C\u046A","\u046C\u046D\u046D\u0471","\u046E\u046F\x07\xA9\u046F\u0471","\xA4S\u0470\u045B\u0470\u0463","\u0470\u0468\u0470\u046E","\u0471\xA3\u0472\u0473","\bS\u0473\u0474\xA6T\u0474\u048F","\u0475\u0476\f \u0476\u0477\x07",`\u0477\u048E\xA4S +\u0478\u0479\f\b\u0479`,"\u047A \u047A\u048E\xA4S \u047B\u047C\f","\u047C\u047D \u047D\u048E","\xA4S\x07\u047E\u047F\f\u047F\u0480\x07","\u0480\u048E\xA4S\u0481\u0482\f","\u0482\u0483\x07\u0483\u048E\xA4S","\u0484\u0485\f\x07\u0485\u0486 ","\u0486\u048B\x07]\u0487\u0488\x9AN\u0488","\u0489\xEEx\u0489\u048C\u048A","\u048C\x07\u0163\u048B\u0487\u048B","\u048A\u048C\u048E\u048D","\u0475\u048D\u0478\u048D","\u047B\u048D\u047E\u048D","\u0481\u048D\u0484\u048E","\u0491\u048F\u048D\u048F","\u0490\u0490\xA5\u0491","\u048F\u0492\u0493\bT\u0493\u0497","\xDAn\u0494\u0495\u0156\xAC\u0495\u0496","\x9AN\u0496\u0498\u0497\u0494","\u0497\u0498\u0498\u04FF","\u0499\u049B\u012E\x98\u049A\u049C","\xA8U\u049B\u049A\u049B\u049C","\u049C\u04FF\u049D\u04FF","\xC0a\u049E\u04FF\xD2j\u049F\u04FF","\u013C\x9F\u04A0\u04FF\x07,\u04A1\u04FF","\xAAV\u04A2\u04FF\xACW\u04A3\u04FF\xAE","X\u04A4\u04A5 \u04A5\u04FF\xA6T","\u04A6\u04A7\xECw\u04A7\u04A8\xA6T\u04A8","\u04FF\u04A9\u04AB\x07_\u04AA","\u04A9\u04AA\u04AB\u04AB","\u04AC\u04AC\u04AD\x07\u04AD","\u04AE\xE6t\u04AE\u04AF\x07\u04AF","\u04FF\u04B0\u04B2\x07\x91\u04B1","\u04B0\u04B1\u04B2\u04B2","\u04B3\u04B3\u04FF\v\u04B4","\u04B5\x07\u04B5\u04B6\u0128\x95\u04B6","\u04B7\x9AN\u04B7\u04B8\x07 \u04B8\u04FF","\u04B9\u04BA\x07\xAC\u04BA\u04BB","\xBA^\u04BB\u04BC\x07\xAD\u04BC\u04BD","\x07\u04BD\u04BF\xA4S\u04BE\u04C0","\xBE`\u04BF\u04BE\u04BF\u04C0","\u04C0\u04C1\u04C1\u04C2","\x07\u04C2\u04FF\u04C3\u04C4","\x07\xAE\u04C4\u04FF\xA6T\f\u04C5\u04C6\x07","\xAF\u04C6\u04C7\x07\u04C7\u04C8","\x9AN\u04C8\u04C9\x07U\u04C9\u04CB\xFE","\x80\u04CA\u04CC\x07\xB0\u04CB\u04CA","\u04CB\u04CC\u04CC\u04CD","\u04CD\u04CE\x07\u04CE\u04FF","\u04CF\u04D1\x07\xB1\u04D0\u04D2\x9A","N\u04D1\u04D0\u04D1\u04D2","\u04D2\u04D6\u04D3\u04D4\xE0","q\u04D4\u04D5\xE2r\u04D5\u04D7","\u04D6\u04D3\u04D7\u04D8","\u04D8\u04D6\u04D8\u04D9","\u04D9\u04DB\u04DA\u04DC\xE4s","\u04DB\u04DA\u04DB\u04DC","\u04DC\u04DD\u04DD\u04DE\x07\xB2","\u04DE\u04FF\u04DF\u04E0\x07\xB3","\u04E0\u04E1\x07\u04E1\u04E2\x9AN","\u04E2\u04E3\x07\u04E3\u04E4\xFE\x80","\u04E4\u04E5\x07\u04E5\u04FF","\u04E6\u04E7\x07\xB3\u04E7\u04E8\x07","\u04E8\u04E9\x9AN\u04E9\u04EA\x07\x85","\u04EA\u04EB\u0110\x89\u04EB\u04EC\x07","\u04EC\u04FF\u04ED\u04EE\x07A","\u04EE\u04EF\x07\u04EF\u04F0\u012E\x98","\u04F0\u04F1\x07\u04F1\u04FF","\u04F2\u04F3\x07r\u04F3\u04F4\x07","\u04F4\u04F5\u012E\x98\u04F5\u04F6\x07","\u04F6\u04FF\u04F7\u04F8\x07]","\u04F8\u04F9\x9AN\u04F9\u04FA\xEEx","\u04FA\u04FB\x07\v\u04FB\u04FC\x9AN","\u04FC\u04FF\u04FD\u04FF\u0130\x99","\u04FE\u0492\u04FE\u0499","\u04FE\u049D\u04FE\u049E","\u04FE\u049F\u04FE\u04A0","\u04FE\u04A1\u04FE\u04A2","\u04FE\u04A3\u04FE\u04A4","\u04FE\u04A6\u04FE\u04AA","\u04FE\u04B1\u04FE\u04B4","\u04FE\u04B9\u04FE\u04C3","\u04FE\u04C5\u04FE\u04CF","\u04FE\u04DF\u04FE\u04E6","\u04FE\u04ED\u04FE\u04F2","\u04FE\u04F7\u04FE\u04FD","\u04FF\u050B\u0500\u0501\f","\u0501\u0502\x07\u0502\u050A\xA6T","\u0503\u0504\f\u0504\u0505\x07\xB4",`\u0505\u050A\u0152\xAA\u0506\u0507\f +\u0507`,"\u0508\x07-\u0508\u050A\xFE\x80\u0509","\u0500\u0509\u0503\u0509","\u0506\u050A\u050D\u050B","\u0509\u050B\u050C\u050C","\xA7\u050D\u050B\u050E","\u0511 \u050F\u0512\u0140\xA1\u0510","\u0512\x9AN\u0511\u050F\u0511","\u0510\u0512\xA9\u0513","\u0514\x07\xB5\u0514\u0516\x07\u0515","\u0517\x07E\u0516\u0515\u0516","\u0517\u0517\u0518\u0518","\u0519\xB8]\u0519\u051B\x07\u051A","\u051C\xB0Y\u051B\u051A\u051B","\u051C\u051C\u058A\u051D","\u051E \u051E\u051F\x07\u051F","\u0520\xB8]\u0520\u0522\x07\u0521","\u0523\xB0Y\u0522\u0521\u0522","\u0523\u0523\u058A\u0524","\u058A\xB6\\\u0525\u0526\x07\xB9\u0526","\u0528\x07\u0527\u0529\x07D\u0528","\u0527\u0528\u0529\u0529","\u052A\u052A\u052B\x07\r\u052B","\u052D\x07\u052C\u052E\xB0Y\u052D","\u052C\u052D\u052E\u052E","\u058A\u052F\u0530\x07\xB9\u0530","\u0538\x07\u0531\u0533\x07D\u0532","\u0531\u0532\u0533\u0533","\u0534\u0534\u0539\x07\r\u0535","\u0539\xB8]\u0536\u0537\x07E\u0537\u0539","\xE6t\u0538\u0532\u0538\u0535","\u0538\u0536\u0539\u053A","\u053A\u053C\x07\u053B\u053D","\xB0Y\u053C\u053B\u053C\u053D","\u053D\u058A\u053E\u053F","\x07\xBA\u053F\u0541\x07\u0540\u0542","\x07E\u0541\u0540\u0541\u0542","\u0542\u0543\u0543\u0544","\xB8]\u0544\u0546\x07\u0545\u0547","\xB0Y\u0546\u0545\u0546\u0547","\u0547\u058A\u0548\u0549","\x07\xBB\u0549\u054B\x07\u054A\u054C","\x07E\u054B\u054A\u054B\u054C","\u054C\u054D\u054D\u054E","\xB8]\u054E\u0550\x07\u054F\u0551","\xB0Y\u0550\u054F\u0550\u0551","\u0551\u058A\u0552\u0553","\x07\xBC\u0553\u0554\x07\u0554\u0555","\xB8]\u0555\u0557\x07\u0556\u0558","\xB0Y\u0557\u0556\u0557\u0558","\u0558\u058A\u0559\u055A","\x07\xBD\u055A\u055B\x07\u055B\u055C","\xB8]\u055C\u055E\x07\u055D\u055F","\xB0Y\u055E\u055D\u055E\u055F","\u055F\u058A\u0560\u0561","\x07\xBE\u0561\u0562\x07\u0562\u0563","\xB8]\u0563\u0565\x07\u0564\u0566","\xB0Y\u0565\u0564\u0565\u0566","\u0566\u058A\u0567\u0568","\x07\xBF\u0568\u0569\x07\u0569\u056A","\xB8]\u056A\u056C\x07\u056B\u056D","\xB0Y\u056C\u056B\u056C\u056D","\u056D\u058A\u056E\u056F","\x07\xC0\u056F\u0571\x07\u0570\u0572","\x07E\u0571\u0570\u0571\u0572","\u0572\u0573\u0573\u0574","\xB8]\u0574\u0576\x07\u0575\u0577","\xB0Y\u0576\u0575\u0576\u0577","\u0577\u058A\u0578\u0579","\x07\xC1\u0579\u057B\x07\u057A\u057C","\x07E\u057B\u057A\u057B\u057C","\u057C\u057D\u057D\u057F",'\xE6t\u057E\u0580B"\u057F\u057E',"\u057F\u0580\u0580\u0583","\u0581\u0582\x07\xC2\u0582\u0584\u0142","\xA2\u0583\u0581\u0583\u0584","\u0584\u0585\u0585\u0587\x07","\u0586\u0588\xB0Y\u0587\u0586","\u0587\u0588\u0588\u058A","\u0589\u0513\u0589\u051D","\u0589\u0524\u0589\u0525","\u0589\u052F\u0589\u053E","\u0589\u0548\u0589\u0552","\u0589\u0559\u0589\u0560","\u0589\u0567\u0589\u056E","\u0589\u0578\u058A\xAB","\u058B\u058C\x07\xC3\u058C\u058D\x07","\u058D\u058E\xE6t\u058E\u058F\x07","\u058F\xAD\u0590\u0591 ","\u0591\u0592\u0154\xAB\u0592\u0593\xB0","Y\u0593\u05BB\u0594\u0595\x07\xC9","\u0595\u0596\xF6|\u0596\u0597\xB0","Y\u0597\u05BB\u0598\u0599 ","\u0599\u059A\x07\u059A\u059C\x9AN","\u059B\u059D\xB2Z\u059C\u059B","\u059C\u059D\u059D\u059E","\u059E\u05A0\x07\u059F\u05A1\xB4[","\u05A0\u059F\u05A0\u05A1","\u05A1\u05A2\u05A2\u05A3\xB0Y","\u05A3\u05BB\u05A4\u05A5 ","\u05A5\u05A7\xF4{\u05A6\u05A8\xB4[","\u05A7\u05A6\u05A7\u05A8","\u05A8\u05A9\u05A9\u05AA\xB0Y","\u05AA\u05BB\u05AB\u05AC\x07\xCE","\u05AC\u05AD\x07\u05AD\u05AE\x9AN","\u05AE\u05AF\x07\u05AF\u05B0\xA6T","\u05B0\u05B3\x07\u05B1\u05B2\x07p","\u05B2\u05B4 \x1B\u05B3\u05B1","\u05B3\u05B4\u05B4\u05B6","\u05B5\u05B7\xB4[\u05B6\u05B5","\u05B6\u05B7\u05B7\u05B8","\u05B8\u05B9\xB0Y\u05B9\u05BB","\u05BA\u0590\u05BA\u0594","\u05BA\u0598\u05BA\u05A4","\u05BA\u05AB\u05BB\xAF","\u05BC\u05BF\x07\xD1\u05BD\u05C0\u0128\x95","\u05BE\u05C0(\u05BF\u05BD","\u05BF\u05BE\u05C0\xB1","\u05C1\u05C4\x07\u05C2\u05C5\u0138\x9D","\u05C3\u05C5\x07,\u05C4\u05C2","\u05C4\u05C3\u05C5\u05C8","\u05C6\u05C7\x07\u05C7\u05C9\x9AN","\u05C8\u05C6\u05C8\u05C9","\u05C9\xB3\u05CA\u05CB ","\u05CB\u05CC\x07\xD3\u05CC\xB5","\u05CD\u05CE\x07\xD4\u05CE\u05CF\x07","\u05CF\u05D0\xB8]\u05D0\u05D2\x07","\u05D1\u05D3\xB0Y\u05D2\u05D1","\u05D2\u05D3\u05D3\u05DE","\u05D4\u05D5\x07\xD5\u05D5\u05D6\x07","\u05D6\u05D7\xB8]\u05D7\u05D8\x07","\u05D8\u05D9\xB8]\u05D9\u05DB\x07","\u05DA\u05DC\xB0Y\u05DB\u05DA","\u05DB\u05DC\u05DC\u05DE","\u05DD\u05CD\u05DD\u05D4","\u05DE\xB7\u05DF\u05E1\x07D","\u05E0\u05DF\u05E0\u05E1","\u05E1\u05E2\u05E2\u05E3\x9AN","\u05E3\xB9\u05E4\u05EA\xBC_","\u05E5\u05E6\x07\u05E6\u05E7\xBC_","\u05E7\u05E8\x07\u05E8\u05EA","\u05E9\u05E4\u05E9\u05E5","\u05EA\xBB\u05EB\u05F0\u012E\x98","\u05EC\u05ED\x07\u05ED\u05EF\u012E\x98","\u05EE\u05EC\u05EF\u05F2","\u05F0\u05EE\u05F0\u05F1","\u05F1\xBD\u05F2\u05F0","\u05F3\u05F4\x07z\u05F4\u05F5\x07\xD6","\u05F5\u0603\x07|\u05F6\u05F7\x07z\u05F7","\u05F8\x07\x86\u05F8\u05F9\x07\xD7\u05F9","\u05FD\x07|\u05FA\u05FB\x07h\u05FB\u05FC","\x07\xD8\u05FC\u05FE\x07\xD9\u05FD\u05FA","\u05FD\u05FE\u05FE\u0603","\u05FF\u0600\x07h\u0600\u0601","\x07\xD8\u0601\u0603\x07\xD9\u0602\u05F3","\u0602\u05F6\u0602\u05FF","\u0603\xBF\u0604\u0605","\x07\xDA\u0605\u0606\x07\u0606\u0609","\xE6t\u0607\u0608\x07\x85\u0608\u060A","\u0110\x89\u0609\u0607\u0609\u060A","\u060A\u060B\u060B\u060C","\x07\u060C\u0713\u060D\u060F","\x07\xDB\u060E\u0610\u0154\xAB\u060F\u060E","\u060F\u0610\u0610\u0713","\u0611\u0612\x07\xDC\u0612\u0713","\xF4{\u0613\u0614\x07<\u0614\u0713","\xF4{\u0615\u0616\x07;\u0616\u0713\xF4","{\u0617\u0618\x07\xDD\u0618\u0619\x07","\u0619\u061A\x9AN\u061A\u061B\x07","\u061B\u061C\x9AN\u061C\u061D\x07","\u061D\u061E\x9AN\u061E\u061F\x07","\u061F\u0620\x9AN\u0620\u0621\x07","\u0621\u0713\u0622\u0623\x07]","\u0623\u0624\x07\u0624\u0627\x9A","N\u0625\u0626\x07\u0626\u0628\x9A","N\u0627\u0625\u0628\u0629","\u0629\u0627\u0629\u062A","\u062A\u062B\u062B\u062C\x07","\u062C\u0713\u062D\u062E\x07\x89","\u062E\u062F\x07\u062F\u0630\x9A","N\u0630\u0631\x07\u0631\u0632\x9A","N\u0632\u0633\x07\u0633\u0713","\u0634\u0635\x07:\u0635\u0713\xF4","{\u0636\u0637\x07>\u0637\u0713\xF4{","\u0638\u0639\x07\x8A\u0639\u063A\x07","\u063A\u063B\x9AN\u063B\u063C\x07","\u063C\u063D\x9AN\u063D\u063E\x07","\u063E\u0713\u063F\u0640\x079","\u0640\u0713\xF4{\u0641\u0642\x07\xDE","\u0642\u0713\xF4{\u0643\u0644\x07\xDF","\u0644\u0645\x07\u0645\u0648\x9AN","\u0646\u0647\x07\u0647\u0649\x9AN","\u0648\u0646\u0648\u0649","\u0649\u064A\u064A\u064B\x07","\u064B\u0713\u064C\u0713\xCEh","\u064D\u064E\x07\xE3\u064E\u0713\u0154\xAB","\u064F\u0650\x07r\u0650\u0713\xF4{\u0651","\u0652\x07@\u0652\u0713\xF4{\u0653\u0654"," \u0654\u0655\x07\u0655\u0656","\x9AN\u0656\u065C\x07\u0657\u065D","\x9AN\u0658\u0659\x07]\u0659\u065A","\x9AN\u065A\u065B\xEEx\u065B\u065D","\u065C\u0657\u065C\u0658","\u065D\u065E\u065E\u065F\x07","\u065F\u0713\u0660\u0662\x07\xE6","\u0661\u0663\u0154\xAB\u0662\u0661","\u0662\u0663\u0663\u0713","\u0664\u0666\x07\xE7\u0665\u0667\xC4","c\u0666\u0665\u0666\u0667","\u0667\u0713\u0668\u0669 ","\u0669\u066A\x07\u066A\u066B\x9A","N\u066B\u066C\x07\u066C\u066D\x07]","\u066D\u066E\x9AN\u066E\u066F\xEEx","\u066F\u0670\x07\u0670\u0713","\u0671\u0672\x07\xEA\u0672\u0673\x07","\u0673\u0674\xEEx\u0674\u0675\x07p\u0675","\u0676\x9AN\u0676\u0677\x07\u0677","\u0713\u0678\u0679\x07\xEB\u0679","\u067A\x07\u067A\u067B\xCCg\u067B","\u067C\x07\u067C\u067D\x9AN\u067D","\u067E\x07\u067E\u0713\u067F","\u0681\x07\xEC\u0680\u0682\xC4c\u0681","\u0680\u0681\u0682\u0682","\u0713\u0683\u0684\x07\xED\u0684","\u0685\x07\u0685\u0686\xA4S\u0686","\u0687\x07z\u0687\u0688\x9AN\u0688\u0689","\x07\u0689\u0713\u068A\u0713","\xD0i\u068B\u068D\x07\xEE\u068C\u068E","\xC4c\u068D\u068C\u068D\u068E","\u068E\u0713\u068F\u0690"," \u0690\u0691\x07\u0691\u0692","\xF0y\u0692\u0693\x07\u0693\u0694","\x9AN\u0694\u0695\x07\u0695\u0696","\x9AN\u0696\u0697\x07\u0697\u0713","\u0698\u069A\x07\xF1\u0699\u069B","\u0154\xAB\u069A\u0699\u069A\u069B","\u069B\u0713\u069C\u069E","\x07\xF2\u069D\u069F\xC4c\u069E\u069D","\u069E\u069F\u069F\u0713","\u06A0\u06A2\x07\xF3\u06A1\u06A3","\xC4c\u06A2\u06A1\u06A2\u06A3","\u06A3\u0713\u06A4\u06A5","\x07\xF4\u06A5\u0713\xF4{\u06A6\u06A7","\x07\xF5\u06A7\u0713\xF4{\u06A8\u06A9","\x07\xF6\u06A9\u0713\xF2z\u06AA\u06AB","\x07\xF7\u06AB\u0713\xF4{\u06AC\u06AD","\x07\xF8\u06AD\u0713\u0154\xAB\u06AE\u06AF","\x07\xF9\u06AF\u06B0\x07\u06B0\u06B1","\x9AN\u06B1\u06B2\x07\u06B2\u06B3","\x9AN\u06B3\u06B4\x07\u06B4\u06B5","\x9AN\u06B5\u06B6\x07\u06B6\u0713","\u06B7\u06B8\x07\xFA\u06B8\u06B9","\x07\u06B9\u06BA\x9AN\u06BA\u06BB","\x07\u06BB\u06BE\x9AN\u06BC\u06BD","\x07\u06BD\u06BF\x9AN\u06BE\u06BC","\u06BE\u06BF\u06BF\u06C0","\u06C0\u06C1\x07\u06C1\u0713","\u06C2\u06C3\x07\xFB\u06C3\u0713","\xF4{\u06C4\u06C5\x07\xAB\u06C5\u06C6","\x07\u06C6\u06C7\x9AN\u06C7\u06C8","\x07\u06C8\u06C9\x9AN\u06C9\u06CA","\x07\u06CA\u0713\u06CB\u06CC","\x07\xFC\u06CC\u06CD\x07\u06CD\u06CE","\u0144\xA3\u06CE\u06CF\x07\u06CF\u0713","\u06D0\u06D1\x07\xFD\u06D1\u0713","\xF4{\u06D2\u06D3\x07?\u06D3\u0713","\xF4{\u06D4\u06D5\x07\xFE\u06D5\u06D6\x07","\u06D6\u06D7\x9AN\u06D7\u06D8\x07","\u06D8\u06D9\x9AN\u06D9\u06DA\x07","\u06DA\u0713\u06DB\u06DC\x07","\xFF\u06DC\u06DD\x07\u06DD\u06DE","\x9AN\u06DE\u06DF\x07\u06DF\u06E0","\x9AN\u06E0\u06E1\x07\u06E1\u06E2","\x9AN\u06E2\u06E3\x07\u06E3\u0713","\u06E4\u06E5\x07\u0100\u06E5\u0713","\xF4{\u06E6\u06E7\x07\u0101\u06E7\u0713","\u0154\xAB\u06E8\u06E9\x07\u0102\u06E9\u06EA\x07","\u06EA\u06EB\x9AN\u06EB\u06EC\x07","\u06EC\u06ED\x9AN\u06ED\u06EE\x07","\u06EE\u0713\u06EF\u06F0\x07","=\u06F0\u06F1\x07\u06F1\u06F4","\x9AN\u06F2\u06F3\x07\u06F3\u06F5","\x9AN\u06F4\u06F2\u06F4\u06F5","\u06F5\u06F6\u06F6\u06F7\x07","\u06F7\u0713\u06F8\u06F9\x07","\u0103\u06F9\u06FA\x07\u06FA\u070D","\x9AN\u06FB\u06FC\x07U\u06FC\u06FD\x07\xDA","\u06FD\u06FF\u010C\x87\u06FE\u06FB","\u06FE\u06FF\u06FF\u0701","\u0700\u0702\xC8e\u0701\u0700","\u0701\u0702\u0702\u070E","\u0703\u0704\x07U\u0704\u0705\x07\xAE","\u0705\u070E\u010C\x87\u0706\u0707\x07","\u0707\u0708\u0134\x9B\u0708\u0709\x07","\u0709\u070A\u0134\x9B\u070A\u070B\x07","\u070B\u070C\u0134\x9B\u070C\u070E","\u070D\u06FE\u070D\u0703","\u070D\u0706\u070E\u070F","\u070F\u0710\x07\u0710\u0713","\u0711\u0713\xC2b\u0712\u0604","\u0712\u060D\u0712\u0611","\u0712\u0613\u0712\u0615","\u0712\u0617\u0712\u0622","\u0712\u062D\u0712\u0634","\u0712\u0636\u0712\u0638","\u0712\u063F\u0712\u0641","\u0712\u0643\u0712\u064C","\u0712\u064D\u0712\u064F","\u0712\u0651\u0712\u0653","\u0712\u0660\u0712\u0664","\u0712\u0668\u0712\u0671","\u0712\u0678\u0712\u067F","\u0712\u0683\u0712\u068A","\u0712\u068B\u0712\u068F","\u0712\u0698\u0712\u069C","\u0712\u06A0\u0712\u06A4","\u0712\u06A6\u0712\u06A8","\u0712\u06AA\u0712\u06AC","\u0712\u06AE\u0712\u06B7","\u0712\u06C2\u0712\u06C4","\u0712\u06CB\u0712\u06D0","\u0712\u06D2\u0712\u06D4","\u0712\u06DB\u0712\u06E4","\u0712\u06E6\u0712\u06E8","\u0712\u06EF\u0712\u06F8","\u0712\u0711\u0713\xC1","\u0714\u0715\x07\u0104\u0715\u0716\x07","\u0716\u0717\x9AN\u0717\u0718\x07","\u0718\u0719\x9AN\u0719\u071A\x07","\u071A\u0733\u071B\u071C\x07\u0105","\u071C\u071E\x07\u071D\u071F\xE6","t\u071E\u071D\u071E\u071F","\u071F\u0720\u0720\u0733\x07","\u0721\u0722\x07\u0106\u0722\u0733\xF2","z\u0723\u0724\x07\u0107\u0724\u0733\xF2","z\u0725\u0726\x07\u0108\u0726\u0733\xF2","z\u0727\u0728\x07\u0109\u0728\u0733\xF2","z\u0729\u072A\x07\u010A\u072A\u072B\x07","\u072B\u072C\x9AN\u072C\u072D\x07","\u072D\u072E\x9AN\u072E\u072F\x07","\u072F\u0733\u0730\u0731\x07\u010B","\u0731\u0733\xF2z\u0732\u0714","\u0732\u071B\u0732\u0721","\u0732\u0723\u0732\u0725","\u0732\u0727\u0732\u0729","\u0732\u0730\u0733\xC3","\u0734\u0736\x07\u0735\u0737\xC6","d\u0736\u0735\u0736\u0737","\u0737\u0738\u0738\u0739\x07","\u0739\xC5\u073A\u073B\x070","\u073B\xC7\u073C\u0749\x07\u010C","\u073D\u073E\u0136\x9C\u073E\u073F\x07\f","\u073F\u0740\u0136\x9C\u0740\u074A","\u0741\u0746\xCAf\u0742\u0743\x07","\u0743\u0745\xCAf\u0744\u0742","\u0745\u0748\u0746\u0744","\u0746\u0747\u0747\u074A","\u0748\u0746\u0749\u073D","\u0749\u0741\u074A\xC9","\u074B\u0751\u0136\x9C\u074C\u074E ","\u074D\u074F\x07\u0100\u074E\u074D","\u074E\u074F\u074F\u0752","\u0750\u0752\x07\u0100\u0751\u074C","\u0751\u0750\u0751\u0752","\u0752\xCB\u0753\u0754 ","\u0754\xCD\u0755\u0756\x07\u010E","\u0756\u076E\x07\u0757\u075A\x9AN","\u0758\u0759\x07p\u0759\u075B\x9AN","\u075A\u0758\u075A\u075B","\u075B\u076F\u075C\u075E\x07\u010F","\u075D\u075F\x9AN\u075E\u075D","\u075E\u075F\u075F\u0760","\u0760\u0761\x07p\u0761\u076F\x9AN\u0762","\u0764\x07\u0110\u0763\u0765\x9AN\u0764","\u0763\u0764\u0765\u0765","\u0766\u0766\u0767\x07p\u0767","\u076F\x9AN\u0768\u076A\x07\u0111\u0769","\u076B\x9AN\u076A\u0769\u076A","\u076B\u076B\u076C\u076C","\u076D\x07p\u076D\u076F\x9AN\u076E\u0757","\u076E\u075C\u076E\u0762","\u076E\u0768\u076F\u0770","\u0770\u0771\x07\u0771\xCF","\u0772\u0773\x07\u0113\u0773\u0774","\x07\u0774\u0781\x9AN\u0775\u0776","\x07\u0776\u0779\x9AN\u0777\u0778","\x07\u0778\u077A\x9AN\u0779\u0777","\u0779\u077A\u077A\u0782","\u077B\u077C\x07p\u077C\u077F","\x9AN\u077D\u077E\x07w\u077E\u0780","\x9AN\u077F\u077D\u077F\u0780","\u0780\u0782\u0781\u0775","\u0781\u077B\u0782\u0783","\u0783\u0784\x07\u0784\xD1","\u0785\u0786\u0126\x94\u0786\u0788\x07","\u0787\u0789\xD4k\u0788\u0787","\u0788\u0789\u0789\u078A","\u078A\u078B\x07\u078B\u0799","\u078C\u078D\u012E\x98\u078D\u0794\x07","\u078E\u0790\xE6t\u078F\u078E","\u078F\u0790\u0790\u0795","\u0791\u0793\\/\u0792\u0791","\u0792\u0793\u0793\u0795","\u0794\u078F\u0794\u0792","\u0795\u0796\u0796\u0797\x07","\u0797\u0799\u0798\u0785","\u0798\u078C\u0799\xD3","\u079A\u079F\xD6l\u079B\u079C\x07","\u079C\u079E\xD6l\u079D\u079B","\u079E\u07A1\u079F\u079D","\u079F\u07A0\u07A0\xD5","\u07A1\u079F\u07A2\u07A4\x9A","N\u07A3\u07A5\u012E\x98\u07A4\u07A3","\u07A4\u07A5\u07A5\u07A7","\u07A6\u07A8^0\u07A7\u07A6","\u07A7\u07A8\u07A8\xD7","\u07A9\u07AA\x07\u015B\u07AA\u07AB\x07","\u07AB\u07AE\u0128\x95\u07AC\u07AD\x07w","\u07AD\u07AF\u0128\x95\u07AE\u07AC","\u07AE\u07AF\u07AF\u07B0","\u07B0\u07B1\x07z\u07B1\u07B2\u012C\x97","\u07B2\u07B6\x07\u07B3\u07B5`1","\u07B4\u07B3\u07B5\u07B8","\u07B6\u07B4\u07B6\u07B7","\u07B7\xD9\u07B8\u07B6","\u07B9\u07BC\xDCo\u07BA\u07BC\xDEp\u07BB","\u07B9\u07BB\u07BA\u07BC","\xDB\u07BD\u07BE\x07(\u07BE","\u07C1\u0152\xAA\u07BF\u07C1\x07)\u07C0","\u07BD\u07C0\u07BF\u07C1","\xDD\u07C2\u07C4\x07*\u07C3","\u07C5\u0158\xAD\u07C4\u07C3\u07C4","\u07C5\u07C5\u07C6\u07C6","\u07C8\u0152\xAA\u07C7\u07C9\u0132\x9A\u07C8","\u07C7\u07C8\u07C9\u07C9","\xDF\u07CA\u07CB\x07\u0114\u07CB","\u07CC\x9AN\u07CC\xE1\u07CD","\u07CE\x07\u0115\u07CE\u07CF\x9AN\u07CF","\xE3\u07D0\u07D1\x07\u0116\u07D1","\u07D2\x9AN\u07D2\xE5\u07D3","\u07D8\x9AN\u07D4\u07D5\x07\u07D5","\u07D7\x9AN\u07D6\u07D4\u07D7","\u07DA\u07D8\u07D6\u07D8","\u07D9\u07D9\xE7\u07DA","\u07D8\u07DB\u07DC\x07\xDA\u07DC","\u07DF\x07\u011E\u07DD\u07DF\x07\xF5\u07DE","\u07DB\u07DE\u07DD\u07DF","\xE9\u07E0\u07E1\x07\xA1\u07E1","\xEB\u07E2\u07E3\x07\u07E3","\xED\u07E4\u07E7\xF0y\u07E5","\u07E7 !\u07E6\u07E4\u07E6\u07E5","\u07E7\xEF\u07E8\u07E9",' "\u07E9\xF1\u07EA\u07EB\x07',"\u07EB\u07EC\xE6t\u07EC\u07ED\x07","\u07ED\xF3\u07EE\u07EF\x07","\u07EF\u07F0\x9AN\u07F0\u07F1\x07","\u07F1\xF5\u07F2\u07F3\x07","\u07F3\u07F4\xA6T\u07F4\u07F5\x07","\u07F5\xF7\u07F6\u07FB","\xFA~\u07F7\u07F8\x07\u07F8\u07FA","\xFA~\u07F9\u07F7\u07FA\u07FD","\u07FB\u07F9\u07FB\u07FC","\u07FC\xF9\u07FD\u07FB","\u07FE\u0800\x9AN\u07FF\u0801","D#\u0800\u07FF\u0800\u0801","\u0801\xFB\u0802\u0803 #","\u0803\xFD\u0804\u0806 $","\u0805\u0807\u0102\x82\u0806\u0805","\u0806\u0807\u0807\u0809","\u0808\u080A\u0104\x83\u0809\u0808","\u0809\u080A\u080A\u08D6","\u080B\u0811\x07\u012D\u080C\u080E\x07\u012E","\u080D\u080F\x07\u012F\u080E\u080D","\u080E\u080F\u080F\u0811","\u0810\u080B\u0810\u080C","\u0811\u0813\u0812\u0814\u0150\xA9","\u0813\u0812\u0813\u0814","\u0814\u0816\u0815\u0817\u0104\x83","\u0816\u0815\u0816\u0817","\u0817\u08D6\u0818\u081A %\u0819","\u081B\u014E\xA8\u081A\u0819\u081A","\u081B\u081B\u081D\u081C","\u081E\u0104\x83\u081D\u081C\u081D","\u081E\u081E\u08D6\u081F","\u0821\x07\u0133\u0820\u0822\u0102\x82\u0821","\u0820\u0821\u0822\u0822","\u08D6\u0823\u08D6 &\u0824\u0826","\u0100\x81\u0825\u0827\u0102\x82\u0826\u0825","\u0826\u0827\u0827\u0829","\u0828\u082A\x07\xAE\u0829\u0828","\u0829\u082A\u082A\u08D6","\u082B\u082D\x07\xAE\u082C\u082E","\u0102\x82\u082D\u082C\u082D\u082E","\u082E\u08D6\u082F\u0830","\x07\xDA\u0830\u08D6\x07\u0135\u0831\u0832"," '\u0832\u0834\u0102\x82\u0833\u0835","\u0106\x84\u0834\u0833\u0834\u0835","\u0835\u08D6\u0836\u0837\x07","\u0138\u0837\u0844\x07\u0136\u0838\u0844\x07","\u013A\u0839\u0844\x07\u0139\u083A\u083B\x07","\u013B\u083B\u0844\x07\u0137\u083C\u083D\x07","\u013B\u083D\u0844\x07\u0136\u083E\u083F\x07","\u0138\u083F\u0840\x07\xDA\u0840\u0844\x07","\u0135\u0841\u0842\x07\u013B\u0842\u0844\x07","\u0135\u0843\u0836\u0843\u0838","\u0843\u0839\u0843\u083A","\u0843\u083C\u0843\u083E","\u0843\u0841\u0844\u0845","\u0845\u0847\u0102\x82\u0846\u0848\x07","\xAE\u0847\u0846\u0847\u0848","\u0848\u08D6\u0849\u084A\x07","\u013C\u084A\u08D6\u0102\x82\u084B\u084D\x07","@\u084C\u084E\u0102\x82\u084D\u084C","\u084D\u084E\u084E\u0850","\u084F\u0851\u0104\x83\u0850\u084F","\u0850\u0851\u0851\u08D6","\u0852\u08D6\x07\xDC\u0853\u0855\x07","\xDE\u0854\u0856\u010E\x88\u0855\u0854","\u0855\u0856\u0856\u08D6","\u0857\u0859\x07\xDF\u0858\u085A","\u010E\x88\u0859\u0858\u0859\u085A","\u085A\u08D6\u085B\u085D\x07","\xE1\u085C\u085E\u010E\x88\u085D\u085C","\u085D\u085E\u085E\u08D6","\u085F\u0861\x07\xE0\u0860\u0862","\u010E\x88\u0861\u0860\u0861\u0862","\u0862\u08D6\u0863\u0864\x07","\xDF\u0864\u0865\x07h\u0865\u0866\x07","\u0156\u0866\u0867\x07\xDE\u0867\u0869\x07","\xE2\u0868\u086A\u010E\x88\u0869\u0868","\u0869\u086A\u086A\u08D6","\u086B\u086C\x07\xDF\u086C\u086D\x07","i\u086D\u086E\x07\u0156\u086E\u086F\x07","\xDE\u086F\u0871\x07\xE2\u0870\u0872","\u010E\x88\u0871\u0870\u0871\u0872","\u0872\u08D6\u0873\u0874\x07","\xDF\u0874\u0875\x07h\u0875\u0876\x07","\xDE\u0876\u0878\x07\xE2\u0877\u0879","\u010E\x88\u0878\u0877\u0878\u0879","\u0879\u08D6\u087A\u087C\x07","\u010D\u087B\u087D\u010E\x88\u087C\u087B","\u087C\u087D\u087D\u08D6","\u087E\u08D6\x07\u013D\u087F\u0886\x07","\u013E\u0880\u0886\x07\u013F\u0881\u0886\x07","\u0140\u0882\u0883\x07\u0144\u0883\u0886\x07","\u0141\u0884\u0886\x07\u0141\u0885\u087F","\u0885\u0880\u0885\u0881","\u0885\u0882\u0885\u0884","\u0886\u0888\u0887\u0889","\u0102\x82\u0888\u0887\u0888\u0889","\u0889\u08D6\u088A\u08D6 ","(\u088B\u088C\x07\u0144\u088C\u08D6\x07","\u013C\u088D\u0892\x07\u0144\u088E\u088F\x07","\xDA\u088F\u0893\x07\u0135\u0890\u0893\x07","\u0136\u0891\u0893\x07\u0137\u0892\u088E","\u0892\u0890\u0892\u0891","\u0892\u0893\u0893\u0895","\u0894\u0896\u0106\x84\u0895\u0894","\u0895\u0896\u0896\u08D6","\u0897\u0899\x07\u0145\u0898\u089A","\u0106\x84\u0899\u0898\u0899\u089A","\u089A\u08D6\u089B\u089D\x07","\u0146\u089C\u089E\u0102\x82\u089D\u089C","\u089D\u089E\u089E\u08A0","\u089F\u08A1\u0106\x84\u08A0\u089F","\u08A0\u08A1\u08A1\u08D6","\u08A2\u08A4\x07\u0147\u08A3\u08A5","\u0106\x84\u08A4\u08A3\u08A4\u08A5","\u08A5\u08D6\u08A6\u08A8\x07","\u0148\u08A7\u08A9\u0106\x84\u08A8\u08A7","\u08A8\u08A9\u08A9\u08D6","\u08AA\u08AB\x07\u0149\u08AB\u08AD","\u013E\xA0\u08AC\u08AE\u0106\x84\u08AD\u08AC","\u08AD\u08AE\u08AE\u08D6","\u08AF\u08B0\x07\u011E\u08B0\u08B2","\u013E\xA0\u08B1\u08B3\u0106\x84\u08B2\u08B1","\u08B2\u08B3\u08B3\u08D6","\u08B4\u08D6\x07\u014A\u08B5\u08D6\x07","\u011A\u08B6\u08D6 )\u08B7\u08D6\x07\u015A","\u08B8\u08D6\x07\u0158\u08B9\u08D6\x07\u0159","\u08BA\u08D6\x07\xB0\u08BB\u08C4\x07\u0149","\u08BC\u08C1\x9AN\u08BD\u08BE\x07","\u08BE\u08C0\x9AN\u08BF\u08BD","\u08C0\u08C3\u08C1\u08BF","\u08C1\u08C2\u08C2\u08C5","\u08C3\u08C1\u08C4\u08BC","\u08C4\u08C5\u08C5\u08D6","\u08C6\u08CF\x07\u011E\u08C7\u08CC\x9A","N\u08C8\u08C9\x07\u08C9\u08CB\x9A","N\u08CA\u08C8\u08CB\u08CE","\u08CC\u08CA\u08CC\u08CD","\u08CD\u08D0\u08CE\u08CC","\u08CF\u08C7\u08CF\u08D0","\u08D0\u08D6\u08D1\u08D3\u0128","\x95\u08D2\u08D4\u0150\xA9\u08D3\u08D2","\u08D3\u08D4\u08D4\u08D6","\u08D5\u0804\u08D5\u0810","\u08D5\u0818\u08D5\u081F","\u08D5\u0823\u08D5\u0824","\u08D5\u082B\u08D5\u082F","\u08D5\u0831\u08D5\u0843","\u08D5\u0849\u08D5\u084B","\u08D5\u0852\u08D5\u0853","\u08D5\u0857\u08D5\u085B","\u08D5\u085F\u08D5\u0863","\u08D5\u086B\u08D5\u0873","\u08D5\u087A\u08D5\u087E","\u08D5\u0885\u08D5\u088A","\u08D5\u088B\u08D5\u088D","\u08D5\u0897\u08D5\u089B","\u08D5\u08A2\u08D5\u08A6","\u08D5\u08AA\u08D5\u08AF","\u08D5\u08B4\u08D5\u08B5","\u08D5\u08B6\u08D5\u08B7","\u08D5\u08B8\u08D5\u08B9","\u08D5\u08BA\u08D5\u08BB","\u08D5\u08C6\u08D5\u08D1","\u08D6\xFF\u08D7\u08DB\x07\u013B","\u08D8\u08D9\x07\u0138\u08D9\u08DB\x07\xDA","\u08DA\u08D7\u08DA\u08D8","\u08DB\u0101\u08DC\u08DF\x07","\u08DD\u08E0\u013A\x9E\u08DE\u08E0\x071","\u08DF\u08DD\u08DF\u08DE","\u08E0\u08E2\u08E1\u08E3\x07\xDA","\u08E2\u08E1\u08E2\u08E3","\u08E3\u08E4\u08E4\u08E5\x07","\u08E5\u0103\u08E6\u08E8 *","\u08E7\u08E6\u08E8\u08E9","\u08E9\u08E7\u08E9\u08EA","\u08EA\u0105\u08EB\u08FA\u0108\x85","\u08EC\u08FA\u010A\x86\u08ED\u08FA\x07\u014D","\u08EE\u08EF\xE8u\u08EF\u08F1\u0110\x89","\u08F0\u08F2\x07\xAE\u08F1\u08F0","\u08F1\u08F2\u08F2\u08FA","\u08F3\u08F7\x07\xAE\u08F4\u08F5\xE8u","\u08F5\u08F6\u0110\x89\u08F6\u08F8","\u08F7\u08F4\u08F7\u08F8","\u08F8\u08FA\u08F9\u08EB","\u08F9\u08EC\u08F9\u08ED","\u08F9\u08EE\u08F9\u08F3","\u08FA\u0107\u08FB\u08FD\x07\xF4","\u08FC\u08FE\x07\xAE\u08FD\u08FC","\u08FD\u08FE\u08FE\u0902","\u08FF\u0900\x07\xAE\u0900\u0902\x07\xF4","\u0901\u08FB\u0901\u08FF","\u0902\u0109\u0903\u0905\x07\u014E","\u0904\u0906\x07\xAE\u0905\u0904","\u0905\u0906\u0906\u090A","\u0907\u0908\x07\xAE\u0908\u090A\x07\u014E","\u0909\u0903\u0909\u0907","\u090A\u010B\u090B\u090C\x07","\u090C\u090D\u0136\x9C\u090D\u090E\x07","\u090E\u010D\u090F\u0910\x07","\u0910\u0911\x070\u0911\u0912\x07","\u0912\u010F\u0913\u0917\u0152\xAA","\u0914\u0917\x07\xAE\u0915\u0917\x07A","\u0916\u0913\u0916\u0914","\u0916\u0915\u0917\u0111","\u0918\u091C\u0152\xAA\u0919\u091C\x07A","\u091A\u091C\x07\xAE\u091B\u0918","\u091B\u0919\u091B\u091A","\u091C\u0113\u091D\u091E\x07\xB4","\u091E\u091F\u0112\x8A\u091F\u0115","\u0920\u0921\xE8u\u0921\u0922\u0110\x89","\u0922\u0117\u0923\u0925\x07\x8F","\u0924\u0926\u011A\x8E\u0925\u0924","\u0926\u0927\u0927\u0925","\u0927\u0928\u0928\u0119","\u0929\u092A\x07\u014F\u092A\u092B\x07W","\u092B\u0936\u0142\xA2\u092C\u092E\x07\u0150","\u092D\u092C\u092D\u092E","\u092E\u092F\u092F\u0930\x07\u0151","\u0930\u0931\x07W\u0931\u0936\u0142\xA2","\u0932\u0933\x07\u0152\u0933\u0934\x07W","\u0934\u0936\u0142\xA2\u0935\u0929","\u0935\u092D\u0935\u0932","\u0936\u011B\u0937\u0939\x07\u0153","\u0938\u093A\u011E\x90\u0939\u0938","\u093A\u093B\u093B\u0939","\u093B\u093C\u093C\u011D","\u093D\u093E +\u093E\u093F\x07W\u093F","\u0940\u0142\xA2\u0940\u011F\u0941","\u0942\x07V\u0942\u0943\u012C\x97\u0943","\u0121\u0944\u0945\x07\u0945","\u094A\u0128\x95\u0946\u0947\x07\u0947","\u0949\u0128\x95\u0948\u0946\u0949","\u094C\u094A\u0948\u094A","\u094B\u094B\u094D\u094C","\u094A\u094D\u094E\x07\u094E","\u0123\u094F\u0954\u012E\x98\u0950","\u0951\x07\u0951\u0953\u012E\x98\u0952","\u0950\u0953\u0956\u0954","\u0952\u0954\u0955\u0955","\u0125\u0956\u0954\u0957","\u0958 ,\u0958\u0127\u0959\u095C","\u0126\x94\u095A\u095C\u015A\xAE\u095B\u0959","\u095B\u095A\u095C\u0129","\u095D\u0962\u0128\x95\u095E\u095F","\x07\u095F\u0961\u0128\x95\u0960\u095E","\u0961\u0964\u0962\u0960","\u0962\u0963\u0963\u012B","\u0964\u0962\u0965\u0966","\x07\u0966\u0967\u012A\x96\u0967\u0968","\x07\u0968\u012D\u0969\u096E","\u0128\x95\u096A\u096B\x07\u096B\u096D","\u0128\x95\u096C\u096A\u096D\u0970","\u096E\u096C\u096E\u096F","\u096F\u0973\u0970\u096E","\u0971\u0972\x07\u0972\u0974","\x07\r\u0973\u0971\u0973\u0974","\u0974\u012F\u0975\u0976","\u012E\x98\u0976\u0977\x07\u0977\u097D","\u0128\x95\u0978\u0979 -\u0979\u097C","\u0128\x95\u097A\u097C\x07\u0164\u097B\u0978","\u097B\u097A\u097C\u097F","\u097D\u097B\u097D\u097E","\u097E\u0982\u097F\u097D","\u0980\u0981\x07-\u0981\u0983","\xFE\x80\u0982\u0980\u0982\u0983","\u0983\u0988\u0984\u0986\x07","\xB4\u0985\u0987\u0128\x95\u0986\u0985","\u0986\u0987\u0987\u0989","\u0988\u0984\u0988\u0989","\u0989\u0131\u098A\u098B\x07","\u098B\u098C\u0128\x95\u098C\u0133","\u098D\u098E .\u098E\u0135","\u098F\u0990 /\u0990\u0137","\u0991\u0992 0\u0992\u0139","\u0993\u0994 /\u0994\u013B\u0995","\u099F\u0144\xA3\u0996\u099F\u0146\xA4\u0997","\u099F\u014C\xA7\u0998\u099F\u014A\xA6\u0999","\u099F\u0148\xA5\u099A\u099C\x07\u015E\u099B","\u099A\u099B\u099C\u099C","\u099D\u099D\u099F 1\u099E\u0995","\u099E\u0996\u099E\u0997","\u099E\u0998\u099E\u0999","\u099E\u099B\u099F\u013D","\u09A0\u09A1\x07\u09A1\u09A6","\u0142\xA2\u09A2\u09A3\x07\u09A3\u09A5","\u0142\xA2\u09A4\u09A2\u09A5\u09A8","\u09A6\u09A4\u09A6\u09A7","\u09A7\u09A9\u09A8\u09A6","\u09A9\u09AA\x07\u09AA\u013F","\u09AB\u09AC 2\u09AC\u0141","\u09AD\u09B1\u0140\xA1\u09AE\u09B1\x07",".\u09AF\u09B1\x07/\u09B0\u09AD","\u09B0\u09AE\u09B0\u09AF","\u09B1\u0143\u09B2\u09B4\x07\u015E","\u09B3\u09B2\u09B3\u09B4","\u09B4\u09B5\u09B5\u09B8\u0140","\xA1\u09B6\u09B8\x07\u0160\u09B7\u09B3","\u09B7\u09B6\u09B8\u09BC","\u09B9\u09BB\u0140\xA1\u09BA\u09B9","\u09BB\u09BE\u09BC\u09BA","\u09BC\u09BD\u09BD\u0145","\u09BE\u09BC\u09BF\u09C0 0","\u09C0\u0147\u09C1\u09C2 3","\u09C2\u0149\u09C3\u09C4 4\u09C4","\u014B\u09C5\u09C6\x07\xDC\u09C6","\u09CC\x07\u0163\u09C7\u09C8\x07\xDE\u09C8","\u09CC\x07\u0163\u09C9\u09CA\x07\xDF\u09CA","\u09CC\x07\u0163\u09CB\u09C5\u09CB","\u09C7\u09CB\u09C9\u09CC","\u014D\u09CD\u09D0\u0102\x82\u09CE","\u09D0\u0150\xA9\u09CF\u09CD\u09CF","\u09CE\u09D0\u014F\u09D1","\u09D2\x07\u09D2\u09D3\x070\u09D3","\u09D4\x07\u09D4\u09D5\x070\u09D5","\u09D6\x07\u09D6\u0151\u09D7","\u09DA\u0128\x95\u09D8\u09DA\u0140\xA1\u09D9","\u09D7\u09D9\u09D8\u09DA","\u0153\u09DB\u09DC\x07\u09DC","\u09DD\x07\u09DD\u0155\u09DE","\u09DF 5\u09DF\u0157\u09E0\u09E1","\x07\u0155\u09E1\u09E7\x07\u09E2\u09E3","\x07\u0156\u09E3\u09E7\x07\u09E4\u09E5","\x07\u0157\u09E5\u09E7\x07\u09E6\u09E0","\u09E6\u09E2\u09E6\u09E4","\u09E7\u0159\u09E8\u09E9"," 6\u09E9\u015B\u0149\u015D\u0162","\u0165\u0169\u016E\u0172\u0177\u017B\u0184\u0189\u018C\u0190\u0193\u0197","\u019A\u019C\u019F\u01A5\u01A9\u01AB\u01AF\u01B3\u01B7\u01BE\u01C0\u01C7","\u01CD\u01D2\u01D5\u01D8\u01DD\u01E1\u01E4\u01E7\u01EA\u01EE\u01FE\u0206","\u020A\u0210\u0213\u0216\u021C\u0221\u0225\u0228\u0230\u0232\u023F\u024B","\u0250\u0253\u0256\u025B\u0261\u0271\u0285\u028E\u0292\u0299\u029E\u02A7","\u02AD\u02B8\u02BF\u02C8\u02D1\u02DB\u02E0\u02E6\u02E9\u02EF\u02F6\u02FA","\u0300\u0305\u0308\u030C\u030E\u0311\u0315\u0321\u0326\u032B\u0332\u033B","\u0343\u0348\u034C\u0352\u0355\u0358\u035C\u0360\u0369\u036D\u0370\u0373","\u0378\u037E\u0381\u0386\u0389\u038B\u0390\u039C\u03A5\u03B1\u03B4\u03B9","\u03C0\u03C4\u03C8\u03CA\u03D8\u03DD\u03E6\u03EC\u03F5\u03F9\u03FD\u0409","\u0410\u0415\u041B\u041E\u0422\u042D\u042F\u0438\u0444\u0446\u044D\u0452","\u0459\u0461\u046C\u0470\u048B\u048D\u048F\u0497\u049B\u04AA\u04B1\u04BF","\u04CB\u04D1\u04D8\u04DB\u04FE\u0509\u050B\u0511\u0516\u051B\u0522\u0528","\u052D\u0532\u0538\u053C\u0541\u0546\u054B\u0550\u0557\u055E\u0565\u056C","\u0571\u0576\u057B\u057F\u0583\u0587\u0589\u059C\u05A0\u05A7\u05B3\u05B6","\u05BA\u05BF\u05C4\u05C8\u05D2\u05DB\u05DD\u05E0\u05E9\u05F0\u05FD\u0602","\u0609\u060F\u0629\u0648\u065C\u0662\u0666\u0681\u068D\u069A\u069E\u06A2","\u06BE\u06F4\u06FE\u0701\u070D\u0712\u071E\u0732\u0736\u0746\u0749\u074E","\u0751\u075A\u075E\u0764\u076A\u076E\u0779\u077F\u0781\u0788\u078F\u0792","\u0794\u0798\u079F\u07A4\u07A7\u07AE\u07B6\u07BB\u07C0\u07C4\u07C8\u07D8","\u07DE\u07E6\u07FB\u0800\u0806\u0809\u080E\u0810\u0813\u0816\u081A\u081D","\u0821\u0826\u0829\u082D\u0834\u0843\u0847\u084D\u0850\u0855\u0859\u085D","\u0861\u0869\u0871\u0878\u087C\u0885\u0888\u0892\u0895\u0899\u089D\u08A0","\u08A4\u08A8\u08AD\u08B2\u08C1\u08C4\u08CC\u08CF\u08D3\u08D5\u08DA\u08DF","\u08E2\u08E9\u08F1\u08F7\u08F9\u08FD\u0901\u0905\u0909\u0916\u091B\u0927","\u092D\u0935\u093B\u094A\u0954\u095B\u0962\u096E\u0973\u097B\u097D\u0982","\u0986\u0988\u099B\u099E\u09A6\u09B0\u09B3\u09B7\u09BC\u09CB\u09CF\u09D9","\u09E6"].join(""),r8=new B.atn.ATNDeserializer().deserialize(Aq),Yq=r8.decisionToState.map((i,e)=>new B.dfa.DFA(i,e)),Rq=new B.PredictionContextCache,t=class t extends B.Parser{constructor(e){super(e),this._interp=new B.atn.ParserATNSimulator(this,r8,Yq,Rq),this.ruleNames=t.ruleNames,this.literalNames=t.literalNames,this.symbolicNames=t.symbolicNames}get atn(){return r8}sempred(e,u,r){switch(u){case 76:return this.expr_sempred(e,r);case 77:return this.boolPri_sempred(e,r);case 81:return this.bitExpr_sempred(e,r);case 82:return this.simpleExpr_sempred(e,r);default:throw"No predicate with index:"+u}}expr_sempred(e,u){switch(u){case 0:return this.precpred(this._ctx,3);case 1:return this.precpred(this._ctx,2);case 2:return this.precpred(this._ctx,1);default:throw"No predicate with index:"+u}}boolPri_sempred(e,u){switch(u){case 3:return this.precpred(this._ctx,3);case 4:return this.precpred(this._ctx,2);case 5:return this.precpred(this._ctx,1);default:throw"No predicate with index:"+u}}bitExpr_sempred(e,u){switch(u){case 6:return this.precpred(this._ctx,7);case 7:return this.precpred(this._ctx,6);case 8:return this.precpred(this._ctx,4);case 9:return this.precpred(this._ctx,3);case 10:return this.precpred(this._ctx,2);case 11:return this.precpred(this._ctx,5);default:throw"No predicate with index:"+u}}simpleExpr_sempred(e,u){switch(u){case 12:return this.precpred(this._ctx,17);case 13:return this.precpred(this._ctx,23);case 14:return this.precpred(this._ctx,8);default:throw"No predicate with index:"+u}}query(){let e=new i2(this,this._ctx,this.state);this.enterRule(e,0,t.RULE_query);try{this.enterOuterAlt(e,1),this.state=347,this._errHandler.sync(this);var u=this._interp.adaptivePredict(this._input,0,this._ctx);switch(u===1&&(this.state=346,this.withClause()),this.state=349,this.selectStatement(),this.state=355,this._errHandler.sync(this),this._input.LA(1)){case t.SEMICOLON_SYMBOL:this.state=350,this.match(t.SEMICOLON_SYMBOL),this.state=352,this._errHandler.sync(this);var u=this._interp.adaptivePredict(this._input,1,this._ctx);u===1&&(this.state=351,this.match(t.EOF));break;case t.EOF:this.state=354,this.match(t.EOF);break;default:throw new B.error.NoViableAltException(this)}}catch(r){if(r instanceof B.error.RecognitionException)e.exception=r,this._errHandler.reportError(this,r),this._errHandler.recover(this,r);else throw r}finally{this.exitRule()}return e}values(){let e=new a2(this,this._ctx,this.state);this.enterRule(e,2,t.RULE_values);var u=0;try{this.enterOuterAlt(e,1),this.state=359,this._errHandler.sync(this);var r=this._interp.adaptivePredict(this._input,3,this._ctx);switch(r){case 1:this.state=357,this.expr(0);break;case 2:this.state=358,this.match(t.DEFAULT_SYMBOL);break}for(this.state=368,this._errHandler.sync(this),u=this._input.LA(1);u===t.COMMA_SYMBOL;){this.state=361,this.match(t.COMMA_SYMBOL),this.state=364,this._errHandler.sync(this);var r=this._interp.adaptivePredict(this._input,4,this._ctx);switch(r){case 1:this.state=362,this.expr(0);break;case 2:this.state=363,this.match(t.DEFAULT_SYMBOL);break}this.state=370,this._errHandler.sync(this),u=this._input.LA(1)}}catch(a){if(a instanceof B.error.RecognitionException)e.exception=a,this._errHandler.reportError(this,a),this._errHandler.recover(this,a);else throw a}finally{this.exitRule()}return e}selectStatement(){let e=new s2(this,this._ctx,this.state);this.enterRule(e,4,t.RULE_selectStatement);var u=0;try{this.state=377,this._errHandler.sync(this);var r=this._interp.adaptivePredict(this._input,7,this._ctx);switch(r){case 1:this.enterOuterAlt(e,1),this.state=371,this.queryExpression(),this.state=373,this._errHandler.sync(this),u=this._input.LA(1),(u===t.FOR_SYMBOL||u===t.LOCK_SYMBOL)&&(this.state=372,this.lockingClauseList());break;case 2:this.enterOuterAlt(e,2),this.state=375,this.queryExpressionParens();break;case 3:this.enterOuterAlt(e,3),this.state=376,this.selectStatementWithInto();break}}catch(a){if(a instanceof B.error.RecognitionException)e.exception=a,this._errHandler.reportError(this,a),this._errHandler.recover(this,a);else throw a}finally{this.exitRule()}return e}selectStatementWithInto(){let e=new n2(this,this._ctx,this.state);this.enterRule(e,6,t.RULE_selectStatementWithInto);var u=0;try{this.state=391,this._errHandler.sync(this);var r=this._interp.adaptivePredict(this._input,9,this._ctx);switch(r){case 1:this.enterOuterAlt(e,1),this.state=379,this.match(t.OPEN_PAR_SYMBOL),this.state=380,this.selectStatementWithInto(),this.state=381,this.match(t.CLOSE_PAR_SYMBOL);break;case 2:this.enterOuterAlt(e,2),this.state=383,this.queryExpression(),this.state=384,this.intoClause(),this.state=386,this._errHandler.sync(this),u=this._input.LA(1),(u===t.FOR_SYMBOL||u===t.LOCK_SYMBOL)&&(this.state=385,this.lockingClauseList());break;case 3:this.enterOuterAlt(e,3),this.state=388,this.lockingClauseList(),this.state=389,this.intoClause();break}}catch(a){if(a instanceof B.error.RecognitionException)e.exception=a,this._errHandler.reportError(this,a),this._errHandler.recover(this,a);else throw a}finally{this.exitRule()}return e}queryExpression(){let e=new wi(this,this._ctx,this.state);this.enterRule(e,8,t.RULE_queryExpression);var u=0;try{this.enterOuterAlt(e,1),this.state=394,this._errHandler.sync(this),u=this._input.LA(1),u===t.WITH_SYMBOL&&(this.state=393,this.withClause()),this.state=410,this._errHandler.sync(this);var r=this._interp.adaptivePredict(this._input,15,this._ctx);switch(r){case 1:this.state=396,this.queryExpressionBody(),this.state=398,this._errHandler.sync(this),u=this._input.LA(1),u===t.ORDER_SYMBOL&&(this.state=397,this.orderClause()),this.state=401,this._errHandler.sync(this),u=this._input.LA(1),u===t.LIMIT_SYMBOL&&(this.state=400,this.limitClause());break;case 2:this.state=403,this.queryExpressionParens(),this.state=405,this._errHandler.sync(this),u=this._input.LA(1),u===t.ORDER_SYMBOL&&(this.state=404,this.orderClause()),this.state=408,this._errHandler.sync(this),u=this._input.LA(1),u===t.LIMIT_SYMBOL&&(this.state=407,this.limitClause());break}this.state=413,this._errHandler.sync(this),u=this._input.LA(1),u===t.PROCEDURE_SYMBOL&&(this.state=412,this.procedureAnalyseClause())}catch(a){if(a instanceof B.error.RecognitionException)e.exception=a,this._errHandler.reportError(this,a),this._errHandler.recover(this,a);else throw a}finally{this.exitRule()}return e}queryExpressionBody(){let e=new o2(this,this._ctx,this.state);this.enterRule(e,10,t.RULE_queryExpressionBody);var u=0;try{switch(this.enterOuterAlt(e,1),this.state=425,this._errHandler.sync(this),this._input.LA(1)){case t.SELECT_SYMBOL:case t.VALUES_SYMBOL:case t.TABLE_SYMBOL:this.state=415,this.queryPrimary();break;case t.OPEN_PAR_SYMBOL:switch(this.state=416,this.queryExpressionParens(),this.state=417,this.match(t.UNION_SYMBOL),this.state=419,this._errHandler.sync(this),u=this._input.LA(1),(u===t.ALL_SYMBOL||u===t.DISTINCT_SYMBOL)&&(this.state=418,this.unionOption()),this.state=423,this._errHandler.sync(this),this._input.LA(1)){case t.SELECT_SYMBOL:case t.VALUES_SYMBOL:case t.TABLE_SYMBOL:this.state=421,this.queryPrimary();break;case t.OPEN_PAR_SYMBOL:this.state=422,this.queryExpressionParens();break;default:throw new B.error.NoViableAltException(this)}break;default:throw new B.error.NoViableAltException(this)}for(this.state=437,this._errHandler.sync(this),u=this._input.LA(1);u===t.UNION_SYMBOL;){switch(this.state=427,this.match(t.UNION_SYMBOL),this.state=429,this._errHandler.sync(this),u=this._input.LA(1),(u===t.ALL_SYMBOL||u===t.DISTINCT_SYMBOL)&&(this.state=428,this.unionOption()),this.state=433,this._errHandler.sync(this),this._input.LA(1)){case t.SELECT_SYMBOL:case t.VALUES_SYMBOL:case t.TABLE_SYMBOL:this.state=431,this.queryPrimary();break;case t.OPEN_PAR_SYMBOL:this.state=432,this.queryExpressionParens();break;default:throw new B.error.NoViableAltException(this)}this.state=439,this._errHandler.sync(this),u=this._input.LA(1)}}catch(r){if(r instanceof B.error.RecognitionException)e.exception=r,this._errHandler.reportError(this,r),this._errHandler.recover(this,r);else throw r}finally{this.exitRule()}return e}queryExpressionParens(){let e=new zt(this,this._ctx,this.state);this.enterRule(e,12,t.RULE_queryExpressionParens);var u=0;try{this.enterOuterAlt(e,1),this.state=440,this.match(t.OPEN_PAR_SYMBOL),this.state=446,this._errHandler.sync(this);var r=this._interp.adaptivePredict(this._input,24,this._ctx);switch(r){case 1:this.state=441,this.queryExpressionParens();break;case 2:this.state=442,this.queryExpression(),this.state=444,this._errHandler.sync(this),u=this._input.LA(1),(u===t.FOR_SYMBOL||u===t.LOCK_SYMBOL)&&(this.state=443,this.lockingClauseList());break}this.state=448,this.match(t.CLOSE_PAR_SYMBOL)}catch(a){if(a instanceof B.error.RecognitionException)e.exception=a,this._errHandler.reportError(this,a),this._errHandler.recover(this,a);else throw a}finally{this.exitRule()}return e}queryPrimary(){let e=new ps(this,this._ctx,this.state);this.enterRule(e,14,t.RULE_queryPrimary);try{switch(this.state=453,this._errHandler.sync(this),this._input.LA(1)){case t.SELECT_SYMBOL:this.enterOuterAlt(e,1),this.state=450,this.querySpecification();break;case t.VALUES_SYMBOL:this.enterOuterAlt(e,2),this.state=451,this.tableValueConstructor();break;case t.TABLE_SYMBOL:this.enterOuterAlt(e,3),this.state=452,this.explicitTable();break;default:throw new B.error.NoViableAltException(this)}}catch(u){if(u instanceof B.error.RecognitionException)e.exception=u,this._errHandler.reportError(this,u),this._errHandler.recover(this,u);else throw u}finally{this.exitRule()}return e}querySpecification(){let e=new l2(this,this._ctx,this.state);this.enterRule(e,16,t.RULE_querySpecification);var u=0;try{this.enterOuterAlt(e,1),this.state=455,this.match(t.SELECT_SYMBOL),this.state=459,this._errHandler.sync(this);for(var r=this._interp.adaptivePredict(this._input,26,this._ctx);r!=2&&r!=B.atn.ATN.INVALID_ALT_NUMBER;)r===1&&(this.state=456,this.selectOption()),this.state=461,this._errHandler.sync(this),r=this._interp.adaptivePredict(this._input,26,this._ctx);this.state=462,this.selectItemList(),this.state=464,this._errHandler.sync(this);var a=this._interp.adaptivePredict(this._input,27,this._ctx);for(a===1&&(this.state=463,this.intoClause()),this.state=467,this._errHandler.sync(this),u=this._input.LA(1),u===t.FROM_SYMBOL&&(this.state=466,this.fromClause()),this.state=470,this._errHandler.sync(this),u=this._input.LA(1),u===t.WHERE_SYMBOL&&(this.state=469,this.whereClause()),this.state=475,this._errHandler.sync(this),u=this._input.LA(1);u===t.UNPIVOT_SYMBOL;)this.state=472,this.unpivotClause(),this.state=477,this._errHandler.sync(this),u=this._input.LA(1);this.state=479,this._errHandler.sync(this),u=this._input.LA(1),u===t.QUALIFY_SYMBOL&&(this.state=478,this.qualifyClause()),this.state=482,this._errHandler.sync(this),u=this._input.LA(1),u===t.GROUP_SYMBOL&&(this.state=481,this.groupByClause()),this.state=485,this._errHandler.sync(this),u=this._input.LA(1),u===t.HAVING_SYMBOL&&(this.state=484,this.havingClause()),this.state=488,this._errHandler.sync(this),u=this._input.LA(1),u===t.WINDOW_SYMBOL&&(this.state=487,this.windowClause())}catch(s){if(s instanceof B.error.RecognitionException)e.exception=s,this._errHandler.reportError(this,s),this._errHandler.recover(this,s);else throw s}finally{this.exitRule()}return e}subquery(){let e=new Zt(this,this._ctx,this.state);this.enterRule(e,18,t.RULE_subquery);try{this.state=492,this._errHandler.sync(this);var u=this._interp.adaptivePredict(this._input,35,this._ctx);switch(u){case 1:this.enterOuterAlt(e,1),this.state=490,this.query();break;case 2:this.enterOuterAlt(e,2),this.state=491,this.queryExpressionParens();break}}catch(r){if(r instanceof B.error.RecognitionException)e.exception=r,this._errHandler.reportError(this,r),this._errHandler.recover(this,r);else throw r}finally{this.exitRule()}return e}querySpecOption(){let e=new c2(this,this._ctx,this.state);this.enterRule(e,20,t.RULE_querySpecOption);try{this.state=508,this._errHandler.sync(this);var u=this._interp.adaptivePredict(this._input,36,this._ctx);switch(u){case 1:this.enterOuterAlt(e,1),this.state=494,this.match(t.ALL_SYMBOL);break;case 2:this.enterOuterAlt(e,2),this.state=495,this.match(t.DISTINCT_SYMBOL),this.state=496,this.match(t.ON_SYMBOL),this.state=497,this.match(t.OPEN_PAR_SYMBOL),this.state=498,this.qualifiedIdentifier(),this.state=499,this.match(t.CLOSE_PAR_SYMBOL);break;case 3:this.enterOuterAlt(e,3),this.state=501,this.match(t.DISTINCT_SYMBOL);break;case 4:this.enterOuterAlt(e,4),this.state=502,this.match(t.STRAIGHT_JOIN_SYMBOL);break;case 5:this.enterOuterAlt(e,5),this.state=503,this.match(t.HIGH_PRIORITY_SYMBOL);break;case 6:this.enterOuterAlt(e,6),this.state=504,this.match(t.SQL_SMALL_RESULT_SYMBOL);break;case 7:this.enterOuterAlt(e,7),this.state=505,this.match(t.SQL_BIG_RESULT_SYMBOL);break;case 8:this.enterOuterAlt(e,8),this.state=506,this.match(t.SQL_BUFFER_RESULT_SYMBOL);break;case 9:this.enterOuterAlt(e,9),this.state=507,this.match(t.SQL_CALC_FOUND_ROWS_SYMBOL);break}}catch(r){if(r instanceof B.error.RecognitionException)e.exception=r,this._errHandler.reportError(this,r),this._errHandler.recover(this,r);else throw r}finally{this.exitRule()}return e}limitClause(){let e=new d2(this,this._ctx,this.state);this.enterRule(e,22,t.RULE_limitClause);try{this.enterOuterAlt(e,1),this.state=510,this.match(t.LIMIT_SYMBOL),this.state=511,this.limitOptions()}catch(u){if(u instanceof B.error.RecognitionException)e.exception=u,this._errHandler.reportError(this,u),this._errHandler.recover(this,u);else throw u}finally{this.exitRule()}return e}limitOptions(){let e=new p2(this,this._ctx,this.state);this.enterRule(e,24,t.RULE_limitOptions);var u=0;try{this.enterOuterAlt(e,1),this.state=513,this.limitOption(),this.state=516,this._errHandler.sync(this),u=this._input.LA(1),(u===t.COMMA_SYMBOL||u===t.OFFSET_SYMBOL)&&(this.state=514,u=this._input.LA(1),u===t.COMMA_SYMBOL||u===t.OFFSET_SYMBOL?(this._errHandler.reportMatch(this),this.consume()):this._errHandler.recoverInline(this),this.state=515,this.limitOption())}catch(r){if(r instanceof B.error.RecognitionException)e.exception=r,this._errHandler.reportError(this,r),this._errHandler.recover(this,r);else throw r}finally{this.exitRule()}return e}limitOption(){let e=new hs(this,this._ctx,this.state);this.enterRule(e,26,t.RULE_limitOption);var u=0;try{switch(this.state=520,this._errHandler.sync(this),this._input.LA(1)){case t.TINYINT_SYMBOL:case t.SMALLINT_SYMBOL:case t.MEDIUMINT_SYMBOL:case t.BYTE_INT_SYMBOL:case t.INT_SYMBOL:case t.BIGINT_SYMBOL:case t.SECOND_SYMBOL:case t.MINUTE_SYMBOL:case t.HOUR_SYMBOL:case t.DAY_SYMBOL:case t.WEEK_SYMBOL:case t.MONTH_SYMBOL:case t.QUARTER_SYMBOL:case t.YEAR_SYMBOL:case t.DEFAULT_SYMBOL:case t.UNION_SYMBOL:case t.SELECT_SYMBOL:case t.ALL_SYMBOL:case t.DISTINCT_SYMBOL:case t.STRAIGHT_JOIN_SYMBOL:case t.HIGH_PRIORITY_SYMBOL:case t.SQL_SMALL_RESULT_SYMBOL:case t.SQL_BIG_RESULT_SYMBOL:case t.SQL_BUFFER_RESULT_SYMBOL:case t.SQL_CALC_FOUND_ROWS_SYMBOL:case t.LIMIT_SYMBOL:case t.OFFSET_SYMBOL:case t.INTO_SYMBOL:case t.OUTFILE_SYMBOL:case t.DUMPFILE_SYMBOL:case t.PROCEDURE_SYMBOL:case t.ANALYSE_SYMBOL:case t.HAVING_SYMBOL:case t.WINDOW_SYMBOL:case t.AS_SYMBOL:case t.PARTITION_SYMBOL:case t.BY_SYMBOL:case t.ROWS_SYMBOL:case t.RANGE_SYMBOL:case t.GROUPS_SYMBOL:case t.UNBOUNDED_SYMBOL:case t.PRECEDING_SYMBOL:case t.INTERVAL_SYMBOL:case t.CURRENT_SYMBOL:case t.ROW_SYMBOL:case t.BETWEEN_SYMBOL:case t.AND_SYMBOL:case t.FOLLOWING_SYMBOL:case t.EXCLUDE_SYMBOL:case t.GROUP_SYMBOL:case t.TIES_SYMBOL:case t.NO_SYMBOL:case t.OTHERS_SYMBOL:case t.WITH_SYMBOL:case t.WITHOUT_SYMBOL:case t.RECURSIVE_SYMBOL:case t.ROLLUP_SYMBOL:case t.CUBE_SYMBOL:case t.ORDER_SYMBOL:case t.ASC_SYMBOL:case t.DESC_SYMBOL:case t.FROM_SYMBOL:case t.DUAL_SYMBOL:case t.VALUES_SYMBOL:case t.TABLE_SYMBOL:case t.SQL_NO_CACHE_SYMBOL:case t.SQL_CACHE_SYMBOL:case t.MAX_STATEMENT_TIME_SYMBOL:case t.FOR_SYMBOL:case t.OF_SYMBOL:case t.LOCK_SYMBOL:case t.IN_SYMBOL:case t.SHARE_SYMBOL:case t.MODE_SYMBOL:case t.UPDATE_SYMBOL:case t.SKIP_SYMBOL:case t.LOCKED_SYMBOL:case t.NOWAIT_SYMBOL:case t.WHERE_SYMBOL:case t.OJ_SYMBOL:case t.ON_SYMBOL:case t.USING_SYMBOL:case t.NATURAL_SYMBOL:case t.INNER_SYMBOL:case t.JOIN_SYMBOL:case t.LEFT_SYMBOL:case t.RIGHT_SYMBOL:case t.OUTER_SYMBOL:case t.CROSS_SYMBOL:case t.LATERAL_SYMBOL:case t.JSON_TABLE_SYMBOL:case t.COLUMNS_SYMBOL:case t.ORDINALITY_SYMBOL:case t.EXISTS_SYMBOL:case t.PATH_SYMBOL:case t.NESTED_SYMBOL:case t.EMPTY_SYMBOL:case t.ERROR_SYMBOL:case t.NULL_SYMBOL:case t.USE_SYMBOL:case t.FORCE_SYMBOL:case t.IGNORE_SYMBOL:case t.KEY_SYMBOL:case t.INDEX_SYMBOL:case t.PRIMARY_SYMBOL:case t.IS_SYMBOL:case t.TRUE_SYMBOL:case t.FALSE_SYMBOL:case t.UNKNOWN_SYMBOL:case t.NOT_SYMBOL:case t.XOR_SYMBOL:case t.OR_SYMBOL:case t.ANY_SYMBOL:case t.MEMBER_SYMBOL:case t.SOUNDS_SYMBOL:case t.LIKE_SYMBOL:case t.ESCAPE_SYMBOL:case t.REGEXP_SYMBOL:case t.DIV_SYMBOL:case t.MOD_SYMBOL:case t.MATCH_SYMBOL:case t.AGAINST_SYMBOL:case t.BINARY_SYMBOL:case t.CAST_SYMBOL:case t.ARRAY_SYMBOL:case t.CASE_SYMBOL:case t.END_SYMBOL:case t.CONVERT_SYMBOL:case t.COLLATE_SYMBOL:case t.AVG_SYMBOL:case t.BIT_AND_SYMBOL:case t.BIT_OR_SYMBOL:case t.BIT_XOR_SYMBOL:case t.COUNT_SYMBOL:case t.MIN_SYMBOL:case t.MAX_SYMBOL:case t.STD_SYMBOL:case t.VARIANCE_SYMBOL:case t.STDDEV_SAMP_SYMBOL:case t.VAR_SAMP_SYMBOL:case t.SUM_SYMBOL:case t.GROUP_CONCAT_SYMBOL:case t.SEPARATOR_SYMBOL:case t.GROUPING_SYMBOL:case t.ROW_NUMBER_SYMBOL:case t.RANK_SYMBOL:case t.DENSE_RANK_SYMBOL:case t.CUME_DIST_SYMBOL:case t.PERCENT_RANK_SYMBOL:case t.NTILE_SYMBOL:case t.LEAD_SYMBOL:case t.LAG_SYMBOL:case t.FIRST_VALUE_SYMBOL:case t.LAST_VALUE_SYMBOL:case t.NTH_VALUE_SYMBOL:case t.FIRST_SYMBOL:case t.LAST_SYMBOL:case t.OVER_SYMBOL:case t.RESPECT_SYMBOL:case t.NULLS_SYMBOL:case t.JSON_ARRAYAGG_SYMBOL:case t.JSON_OBJECTAGG_SYMBOL:case t.BOOLEAN_SYMBOL:case t.LANGUAGE_SYMBOL:case t.QUERY_SYMBOL:case t.EXPANSION_SYMBOL:case t.CHAR_SYMBOL:case t.CURRENT_USER_SYMBOL:case t.DATE_SYMBOL:case t.INSERT_SYMBOL:case t.TIME_SYMBOL:case t.TIMESTAMP_SYMBOL:case t.TIMESTAMP_LTZ_SYMBOL:case t.TIMESTAMP_NTZ_SYMBOL:case t.ZONE_SYMBOL:case t.USER_SYMBOL:case t.ADDDATE_SYMBOL:case t.SUBDATE_SYMBOL:case t.CURDATE_SYMBOL:case t.CURTIME_SYMBOL:case t.DATE_ADD_SYMBOL:case t.DATE_SUB_SYMBOL:case t.EXTRACT_SYMBOL:case t.GET_FORMAT_SYMBOL:case t.NOW_SYMBOL:case t.POSITION_SYMBOL:case t.SYSDATE_SYMBOL:case t.TIMESTAMP_ADD_SYMBOL:case t.TIMESTAMP_DIFF_SYMBOL:case t.UTC_DATE_SYMBOL:case t.UTC_TIME_SYMBOL:case t.UTC_TIMESTAMP_SYMBOL:case t.ASCII_SYMBOL:case t.CHARSET_SYMBOL:case t.COALESCE_SYMBOL:case t.COLLATION_SYMBOL:case t.DATABASE_SYMBOL:case t.IF_SYMBOL:case t.FORMAT_SYMBOL:case t.MICROSECOND_SYMBOL:case t.OLD_PASSWORD_SYMBOL:case t.PASSWORD_SYMBOL:case t.REPEAT_SYMBOL:case t.REPLACE_SYMBOL:case t.REVERSE_SYMBOL:case t.ROW_COUNT_SYMBOL:case t.TRUNCATE_SYMBOL:case t.WEIGHT_STRING_SYMBOL:case t.CONTAINS_SYMBOL:case t.GEOMETRYCOLLECTION_SYMBOL:case t.LINESTRING_SYMBOL:case t.MULTILINESTRING_SYMBOL:case t.MULTIPOINT_SYMBOL:case t.MULTIPOLYGON_SYMBOL:case t.POINT_SYMBOL:case t.POLYGON_SYMBOL:case t.LEVEL_SYMBOL:case t.DATETIME_SYMBOL:case t.TRIM_SYMBOL:case t.LEADING_SYMBOL:case t.TRAILING_SYMBOL:case t.BOTH_SYMBOL:case t.STRING_SYMBOL:case t.SUBSTRING_SYMBOL:case t.WHEN_SYMBOL:case t.THEN_SYMBOL:case t.ELSE_SYMBOL:case t.SIGNED_SYMBOL:case t.UNSIGNED_SYMBOL:case t.DECIMAL_SYMBOL:case t.JSON_SYMBOL:case t.FLOAT_SYMBOL:case t.FLOAT_SYMBOL_4:case t.FLOAT_SYMBOL_8:case t.SET_SYMBOL:case t.SECOND_MICROSECOND_SYMBOL:case t.MINUTE_MICROSECOND_SYMBOL:case t.MINUTE_SECOND_SYMBOL:case t.HOUR_MICROSECOND_SYMBOL:case t.HOUR_SECOND_SYMBOL:case t.HOUR_MINUTE_SYMBOL:case t.DAY_MICROSECOND_SYMBOL:case t.DAY_SECOND_SYMBOL:case t.DAY_MINUTE_SYMBOL:case t.DAY_HOUR_SYMBOL:case t.YEAR_MONTH_SYMBOL:case t.BTREE_SYMBOL:case t.RTREE_SYMBOL:case t.HASH_SYMBOL:case t.REAL_SYMBOL:case t.DOUBLE_SYMBOL:case t.PRECISION_SYMBOL:case t.NUMERIC_SYMBOL:case t.NUMBER_SYMBOL:case t.FIXED_SYMBOL:case t.BIT_SYMBOL:case t.BOOL_SYMBOL:case t.VARYING_SYMBOL:case t.VARCHAR_SYMBOL:case t.VARCHAR2_SYMBOL:case t.NATIONAL_SYMBOL:case t.NVARCHAR_SYMBOL:case t.NVARCHAR2_SYMBOL:case t.NCHAR_SYMBOL:case t.VARBINARY_SYMBOL:case t.TINYBLOB_SYMBOL:case t.BLOB_SYMBOL:case t.CLOB_SYMBOL:case t.BFILE_SYMBOL:case t.RAW_SYMBOL:case t.MEDIUMBLOB_SYMBOL:case t.LONGBLOB_SYMBOL:case t.LONG_SYMBOL:case t.TINYTEXT_SYMBOL:case t.TEXT_SYMBOL:case t.MEDIUMTEXT_SYMBOL:case t.LONGTEXT_SYMBOL:case t.ENUM_SYMBOL:case t.SERIAL_SYMBOL:case t.GEOMETRY_SYMBOL:case t.ZEROFILL_SYMBOL:case t.BYTE_SYMBOL:case t.UNICODE_SYMBOL:case t.TERMINATED_SYMBOL:case t.OPTIONALLY_SYMBOL:case t.ENCLOSED_SYMBOL:case t.ESCAPED_SYMBOL:case t.LINES_SYMBOL:case t.STARTING_SYMBOL:case t.GLOBAL_SYMBOL:case t.LOCAL_SYMBOL:case t.SESSION_SYMBOL:case t.VARIANT_SYMBOL:case t.OBJECT_SYMBOL:case t.GEOGRAPHY_SYMBOL:case t.UNDERSCORE_CHARSET:case t.IDENTIFIER:case t.BACK_TICK_QUOTED_ID:case t.DOUBLE_QUOTED_TEXT:case t.SINGLE_QUOTED_TEXT:case t.BRACKET_QUOTED_TEXT:case t.CURLY_BRACES_QUOTED_TEXT:this.enterOuterAlt(e,1),this.state=518,this.identifier();break;case t.PARAM_MARKER:case t.INT_NUMBER:this.enterOuterAlt(e,2),this.state=519,u=this._input.LA(1),u===t.PARAM_MARKER||u===t.INT_NUMBER?(this._errHandler.reportMatch(this),this.consume()):this._errHandler.recoverInline(this);break;default:throw new B.error.NoViableAltException(this)}}catch(r){if(r instanceof B.error.RecognitionException)e.exception=r,this._errHandler.reportError(this,r),this._errHandler.recover(this,r);else throw r}finally{this.exitRule()}return e}intoClause(){let e=new fs(this,this._ctx,this.state);this.enterRule(e,28,t.RULE_intoClause);var u=0;try{this.enterOuterAlt(e,1),this.state=522,this.match(t.INTO_SYMBOL),this.state=550,this._errHandler.sync(this);var r=this._interp.adaptivePredict(this._input,45,this._ctx);switch(r){case 1:this.state=523,this.match(t.OUTFILE_SYMBOL),this.state=524,this.textStringLiteral(),this.state=526,this._errHandler.sync(this),u=this._input.LA(1),(u===t.CHAR_SYMBOL||u===t.CHARSET_SYMBOL)&&(this.state=525,this.charsetClause()),this.state=529,this._errHandler.sync(this),u=this._input.LA(1),u===t.COLUMNS_SYMBOL&&(this.state=528,this.fieldsClause()),this.state=532,this._errHandler.sync(this),u=this._input.LA(1),u===t.LINES_SYMBOL&&(this.state=531,this.linesClause());break;case 2:this.state=534,this.match(t.DUMPFILE_SYMBOL),this.state=535,this.textStringLiteral();break;case 3:switch(this.state=538,this._errHandler.sync(this),this._input.LA(1)){case t.TINYINT_SYMBOL:case t.SMALLINT_SYMBOL:case t.MEDIUMINT_SYMBOL:case t.BYTE_INT_SYMBOL:case t.INT_SYMBOL:case t.BIGINT_SYMBOL:case t.SECOND_SYMBOL:case t.MINUTE_SYMBOL:case t.HOUR_SYMBOL:case t.DAY_SYMBOL:case t.WEEK_SYMBOL:case t.MONTH_SYMBOL:case t.QUARTER_SYMBOL:case t.YEAR_SYMBOL:case t.DEFAULT_SYMBOL:case t.UNION_SYMBOL:case t.SELECT_SYMBOL:case t.ALL_SYMBOL:case t.DISTINCT_SYMBOL:case t.STRAIGHT_JOIN_SYMBOL:case t.HIGH_PRIORITY_SYMBOL:case t.SQL_SMALL_RESULT_SYMBOL:case t.SQL_BIG_RESULT_SYMBOL:case t.SQL_BUFFER_RESULT_SYMBOL:case t.SQL_CALC_FOUND_ROWS_SYMBOL:case t.LIMIT_SYMBOL:case t.OFFSET_SYMBOL:case t.INTO_SYMBOL:case t.OUTFILE_SYMBOL:case t.DUMPFILE_SYMBOL:case t.PROCEDURE_SYMBOL:case t.ANALYSE_SYMBOL:case t.HAVING_SYMBOL:case t.WINDOW_SYMBOL:case t.AS_SYMBOL:case t.PARTITION_SYMBOL:case t.BY_SYMBOL:case t.ROWS_SYMBOL:case t.RANGE_SYMBOL:case t.GROUPS_SYMBOL:case t.UNBOUNDED_SYMBOL:case t.PRECEDING_SYMBOL:case t.INTERVAL_SYMBOL:case t.CURRENT_SYMBOL:case t.ROW_SYMBOL:case t.BETWEEN_SYMBOL:case t.AND_SYMBOL:case t.FOLLOWING_SYMBOL:case t.EXCLUDE_SYMBOL:case t.GROUP_SYMBOL:case t.TIES_SYMBOL:case t.NO_SYMBOL:case t.OTHERS_SYMBOL:case t.WITH_SYMBOL:case t.WITHOUT_SYMBOL:case t.RECURSIVE_SYMBOL:case t.ROLLUP_SYMBOL:case t.CUBE_SYMBOL:case t.ORDER_SYMBOL:case t.ASC_SYMBOL:case t.DESC_SYMBOL:case t.FROM_SYMBOL:case t.DUAL_SYMBOL:case t.VALUES_SYMBOL:case t.TABLE_SYMBOL:case t.SQL_NO_CACHE_SYMBOL:case t.SQL_CACHE_SYMBOL:case t.MAX_STATEMENT_TIME_SYMBOL:case t.FOR_SYMBOL:case t.OF_SYMBOL:case t.LOCK_SYMBOL:case t.IN_SYMBOL:case t.SHARE_SYMBOL:case t.MODE_SYMBOL:case t.UPDATE_SYMBOL:case t.SKIP_SYMBOL:case t.LOCKED_SYMBOL:case t.NOWAIT_SYMBOL:case t.WHERE_SYMBOL:case t.OJ_SYMBOL:case t.ON_SYMBOL:case t.USING_SYMBOL:case t.NATURAL_SYMBOL:case t.INNER_SYMBOL:case t.JOIN_SYMBOL:case t.LEFT_SYMBOL:case t.RIGHT_SYMBOL:case t.OUTER_SYMBOL:case t.CROSS_SYMBOL:case t.LATERAL_SYMBOL:case t.JSON_TABLE_SYMBOL:case t.COLUMNS_SYMBOL:case t.ORDINALITY_SYMBOL:case t.EXISTS_SYMBOL:case t.PATH_SYMBOL:case t.NESTED_SYMBOL:case t.EMPTY_SYMBOL:case t.ERROR_SYMBOL:case t.NULL_SYMBOL:case t.USE_SYMBOL:case t.FORCE_SYMBOL:case t.IGNORE_SYMBOL:case t.KEY_SYMBOL:case t.INDEX_SYMBOL:case t.PRIMARY_SYMBOL:case t.IS_SYMBOL:case t.TRUE_SYMBOL:case t.FALSE_SYMBOL:case t.UNKNOWN_SYMBOL:case t.NOT_SYMBOL:case t.XOR_SYMBOL:case t.OR_SYMBOL:case t.ANY_SYMBOL:case t.MEMBER_SYMBOL:case t.SOUNDS_SYMBOL:case t.LIKE_SYMBOL:case t.ESCAPE_SYMBOL:case t.REGEXP_SYMBOL:case t.DIV_SYMBOL:case t.MOD_SYMBOL:case t.MATCH_SYMBOL:case t.AGAINST_SYMBOL:case t.BINARY_SYMBOL:case t.CAST_SYMBOL:case t.ARRAY_SYMBOL:case t.CASE_SYMBOL:case t.END_SYMBOL:case t.CONVERT_SYMBOL:case t.COLLATE_SYMBOL:case t.AVG_SYMBOL:case t.BIT_AND_SYMBOL:case t.BIT_OR_SYMBOL:case t.BIT_XOR_SYMBOL:case t.COUNT_SYMBOL:case t.MIN_SYMBOL:case t.MAX_SYMBOL:case t.STD_SYMBOL:case t.VARIANCE_SYMBOL:case t.STDDEV_SAMP_SYMBOL:case t.VAR_SAMP_SYMBOL:case t.SUM_SYMBOL:case t.GROUP_CONCAT_SYMBOL:case t.SEPARATOR_SYMBOL:case t.GROUPING_SYMBOL:case t.ROW_NUMBER_SYMBOL:case t.RANK_SYMBOL:case t.DENSE_RANK_SYMBOL:case t.CUME_DIST_SYMBOL:case t.PERCENT_RANK_SYMBOL:case t.NTILE_SYMBOL:case t.LEAD_SYMBOL:case t.LAG_SYMBOL:case t.FIRST_VALUE_SYMBOL:case t.LAST_VALUE_SYMBOL:case t.NTH_VALUE_SYMBOL:case t.FIRST_SYMBOL:case t.LAST_SYMBOL:case t.OVER_SYMBOL:case t.RESPECT_SYMBOL:case t.NULLS_SYMBOL:case t.JSON_ARRAYAGG_SYMBOL:case t.JSON_OBJECTAGG_SYMBOL:case t.BOOLEAN_SYMBOL:case t.LANGUAGE_SYMBOL:case t.QUERY_SYMBOL:case t.EXPANSION_SYMBOL:case t.CHAR_SYMBOL:case t.CURRENT_USER_SYMBOL:case t.DATE_SYMBOL:case t.INSERT_SYMBOL:case t.TIME_SYMBOL:case t.TIMESTAMP_SYMBOL:case t.TIMESTAMP_LTZ_SYMBOL:case t.TIMESTAMP_NTZ_SYMBOL:case t.ZONE_SYMBOL:case t.USER_SYMBOL:case t.ADDDATE_SYMBOL:case t.SUBDATE_SYMBOL:case t.CURDATE_SYMBOL:case t.CURTIME_SYMBOL:case t.DATE_ADD_SYMBOL:case t.DATE_SUB_SYMBOL:case t.EXTRACT_SYMBOL:case t.GET_FORMAT_SYMBOL:case t.NOW_SYMBOL:case t.POSITION_SYMBOL:case t.SYSDATE_SYMBOL:case t.TIMESTAMP_ADD_SYMBOL:case t.TIMESTAMP_DIFF_SYMBOL:case t.UTC_DATE_SYMBOL:case t.UTC_TIME_SYMBOL:case t.UTC_TIMESTAMP_SYMBOL:case t.ASCII_SYMBOL:case t.CHARSET_SYMBOL:case t.COALESCE_SYMBOL:case t.COLLATION_SYMBOL:case t.DATABASE_SYMBOL:case t.IF_SYMBOL:case t.FORMAT_SYMBOL:case t.MICROSECOND_SYMBOL:case t.OLD_PASSWORD_SYMBOL:case t.PASSWORD_SYMBOL:case t.REPEAT_SYMBOL:case t.REPLACE_SYMBOL:case t.REVERSE_SYMBOL:case t.ROW_COUNT_SYMBOL:case t.TRUNCATE_SYMBOL:case t.WEIGHT_STRING_SYMBOL:case t.CONTAINS_SYMBOL:case t.GEOMETRYCOLLECTION_SYMBOL:case t.LINESTRING_SYMBOL:case t.MULTILINESTRING_SYMBOL:case t.MULTIPOINT_SYMBOL:case t.MULTIPOLYGON_SYMBOL:case t.POINT_SYMBOL:case t.POLYGON_SYMBOL:case t.LEVEL_SYMBOL:case t.DATETIME_SYMBOL:case t.TRIM_SYMBOL:case t.LEADING_SYMBOL:case t.TRAILING_SYMBOL:case t.BOTH_SYMBOL:case t.STRING_SYMBOL:case t.SUBSTRING_SYMBOL:case t.WHEN_SYMBOL:case t.THEN_SYMBOL:case t.ELSE_SYMBOL:case t.SIGNED_SYMBOL:case t.UNSIGNED_SYMBOL:case t.DECIMAL_SYMBOL:case t.JSON_SYMBOL:case t.FLOAT_SYMBOL:case t.FLOAT_SYMBOL_4:case t.FLOAT_SYMBOL_8:case t.SET_SYMBOL:case t.SECOND_MICROSECOND_SYMBOL:case t.MINUTE_MICROSECOND_SYMBOL:case t.MINUTE_SECOND_SYMBOL:case t.HOUR_MICROSECOND_SYMBOL:case t.HOUR_SECOND_SYMBOL:case t.HOUR_MINUTE_SYMBOL:case t.DAY_MICROSECOND_SYMBOL:case t.DAY_SECOND_SYMBOL:case t.DAY_MINUTE_SYMBOL:case t.DAY_HOUR_SYMBOL:case t.YEAR_MONTH_SYMBOL:case t.BTREE_SYMBOL:case t.RTREE_SYMBOL:case t.HASH_SYMBOL:case t.REAL_SYMBOL:case t.DOUBLE_SYMBOL:case t.PRECISION_SYMBOL:case t.NUMERIC_SYMBOL:case t.NUMBER_SYMBOL:case t.FIXED_SYMBOL:case t.BIT_SYMBOL:case t.BOOL_SYMBOL:case t.VARYING_SYMBOL:case t.VARCHAR_SYMBOL:case t.VARCHAR2_SYMBOL:case t.NATIONAL_SYMBOL:case t.NVARCHAR_SYMBOL:case t.NVARCHAR2_SYMBOL:case t.NCHAR_SYMBOL:case t.VARBINARY_SYMBOL:case t.TINYBLOB_SYMBOL:case t.BLOB_SYMBOL:case t.CLOB_SYMBOL:case t.BFILE_SYMBOL:case t.RAW_SYMBOL:case t.MEDIUMBLOB_SYMBOL:case t.LONGBLOB_SYMBOL:case t.LONG_SYMBOL:case t.TINYTEXT_SYMBOL:case t.TEXT_SYMBOL:case t.MEDIUMTEXT_SYMBOL:case t.LONGTEXT_SYMBOL:case t.ENUM_SYMBOL:case t.SERIAL_SYMBOL:case t.GEOMETRY_SYMBOL:case t.ZEROFILL_SYMBOL:case t.BYTE_SYMBOL:case t.UNICODE_SYMBOL:case t.TERMINATED_SYMBOL:case t.OPTIONALLY_SYMBOL:case t.ENCLOSED_SYMBOL:case t.ESCAPED_SYMBOL:case t.LINES_SYMBOL:case t.STARTING_SYMBOL:case t.GLOBAL_SYMBOL:case t.LOCAL_SYMBOL:case t.SESSION_SYMBOL:case t.VARIANT_SYMBOL:case t.OBJECT_SYMBOL:case t.GEOGRAPHY_SYMBOL:case t.UNDERSCORE_CHARSET:case t.IDENTIFIER:case t.BACK_TICK_QUOTED_ID:case t.DOUBLE_QUOTED_TEXT:case t.SINGLE_QUOTED_TEXT:case t.BRACKET_QUOTED_TEXT:case t.CURLY_BRACES_QUOTED_TEXT:this.state=536,this.textOrIdentifier();break;case t.AT_SIGN_SYMBOL:case t.AT_TEXT_SUFFIX:this.state=537,this.userVariable();break;default:throw new B.error.NoViableAltException(this)}for(this.state=547,this._errHandler.sync(this),u=this._input.LA(1);u===t.COMMA_SYMBOL;){switch(this.state=540,this.match(t.COMMA_SYMBOL),this.state=543,this._errHandler.sync(this),this._input.LA(1)){case t.TINYINT_SYMBOL:case t.SMALLINT_SYMBOL:case t.MEDIUMINT_SYMBOL:case t.BYTE_INT_SYMBOL:case t.INT_SYMBOL:case t.BIGINT_SYMBOL:case t.SECOND_SYMBOL:case t.MINUTE_SYMBOL:case t.HOUR_SYMBOL:case t.DAY_SYMBOL:case t.WEEK_SYMBOL:case t.MONTH_SYMBOL:case t.QUARTER_SYMBOL:case t.YEAR_SYMBOL:case t.DEFAULT_SYMBOL:case t.UNION_SYMBOL:case t.SELECT_SYMBOL:case t.ALL_SYMBOL:case t.DISTINCT_SYMBOL:case t.STRAIGHT_JOIN_SYMBOL:case t.HIGH_PRIORITY_SYMBOL:case t.SQL_SMALL_RESULT_SYMBOL:case t.SQL_BIG_RESULT_SYMBOL:case t.SQL_BUFFER_RESULT_SYMBOL:case t.SQL_CALC_FOUND_ROWS_SYMBOL:case t.LIMIT_SYMBOL:case t.OFFSET_SYMBOL:case t.INTO_SYMBOL:case t.OUTFILE_SYMBOL:case t.DUMPFILE_SYMBOL:case t.PROCEDURE_SYMBOL:case t.ANALYSE_SYMBOL:case t.HAVING_SYMBOL:case t.WINDOW_SYMBOL:case t.AS_SYMBOL:case t.PARTITION_SYMBOL:case t.BY_SYMBOL:case t.ROWS_SYMBOL:case t.RANGE_SYMBOL:case t.GROUPS_SYMBOL:case t.UNBOUNDED_SYMBOL:case t.PRECEDING_SYMBOL:case t.INTERVAL_SYMBOL:case t.CURRENT_SYMBOL:case t.ROW_SYMBOL:case t.BETWEEN_SYMBOL:case t.AND_SYMBOL:case t.FOLLOWING_SYMBOL:case t.EXCLUDE_SYMBOL:case t.GROUP_SYMBOL:case t.TIES_SYMBOL:case t.NO_SYMBOL:case t.OTHERS_SYMBOL:case t.WITH_SYMBOL:case t.WITHOUT_SYMBOL:case t.RECURSIVE_SYMBOL:case t.ROLLUP_SYMBOL:case t.CUBE_SYMBOL:case t.ORDER_SYMBOL:case t.ASC_SYMBOL:case t.DESC_SYMBOL:case t.FROM_SYMBOL:case t.DUAL_SYMBOL:case t.VALUES_SYMBOL:case t.TABLE_SYMBOL:case t.SQL_NO_CACHE_SYMBOL:case t.SQL_CACHE_SYMBOL:case t.MAX_STATEMENT_TIME_SYMBOL:case t.FOR_SYMBOL:case t.OF_SYMBOL:case t.LOCK_SYMBOL:case t.IN_SYMBOL:case t.SHARE_SYMBOL:case t.MODE_SYMBOL:case t.UPDATE_SYMBOL:case t.SKIP_SYMBOL:case t.LOCKED_SYMBOL:case t.NOWAIT_SYMBOL:case t.WHERE_SYMBOL:case t.OJ_SYMBOL:case t.ON_SYMBOL:case t.USING_SYMBOL:case t.NATURAL_SYMBOL:case t.INNER_SYMBOL:case t.JOIN_SYMBOL:case t.LEFT_SYMBOL:case t.RIGHT_SYMBOL:case t.OUTER_SYMBOL:case t.CROSS_SYMBOL:case t.LATERAL_SYMBOL:case t.JSON_TABLE_SYMBOL:case t.COLUMNS_SYMBOL:case t.ORDINALITY_SYMBOL:case t.EXISTS_SYMBOL:case t.PATH_SYMBOL:case t.NESTED_SYMBOL:case t.EMPTY_SYMBOL:case t.ERROR_SYMBOL:case t.NULL_SYMBOL:case t.USE_SYMBOL:case t.FORCE_SYMBOL:case t.IGNORE_SYMBOL:case t.KEY_SYMBOL:case t.INDEX_SYMBOL:case t.PRIMARY_SYMBOL:case t.IS_SYMBOL:case t.TRUE_SYMBOL:case t.FALSE_SYMBOL:case t.UNKNOWN_SYMBOL:case t.NOT_SYMBOL:case t.XOR_SYMBOL:case t.OR_SYMBOL:case t.ANY_SYMBOL:case t.MEMBER_SYMBOL:case t.SOUNDS_SYMBOL:case t.LIKE_SYMBOL:case t.ESCAPE_SYMBOL:case t.REGEXP_SYMBOL:case t.DIV_SYMBOL:case t.MOD_SYMBOL:case t.MATCH_SYMBOL:case t.AGAINST_SYMBOL:case t.BINARY_SYMBOL:case t.CAST_SYMBOL:case t.ARRAY_SYMBOL:case t.CASE_SYMBOL:case t.END_SYMBOL:case t.CONVERT_SYMBOL:case t.COLLATE_SYMBOL:case t.AVG_SYMBOL:case t.BIT_AND_SYMBOL:case t.BIT_OR_SYMBOL:case t.BIT_XOR_SYMBOL:case t.COUNT_SYMBOL:case t.MIN_SYMBOL:case t.MAX_SYMBOL:case t.STD_SYMBOL:case t.VARIANCE_SYMBOL:case t.STDDEV_SAMP_SYMBOL:case t.VAR_SAMP_SYMBOL:case t.SUM_SYMBOL:case t.GROUP_CONCAT_SYMBOL:case t.SEPARATOR_SYMBOL:case t.GROUPING_SYMBOL:case t.ROW_NUMBER_SYMBOL:case t.RANK_SYMBOL:case t.DENSE_RANK_SYMBOL:case t.CUME_DIST_SYMBOL:case t.PERCENT_RANK_SYMBOL:case t.NTILE_SYMBOL:case t.LEAD_SYMBOL:case t.LAG_SYMBOL:case t.FIRST_VALUE_SYMBOL:case t.LAST_VALUE_SYMBOL:case t.NTH_VALUE_SYMBOL:case t.FIRST_SYMBOL:case t.LAST_SYMBOL:case t.OVER_SYMBOL:case t.RESPECT_SYMBOL:case t.NULLS_SYMBOL:case t.JSON_ARRAYAGG_SYMBOL:case t.JSON_OBJECTAGG_SYMBOL:case t.BOOLEAN_SYMBOL:case t.LANGUAGE_SYMBOL:case t.QUERY_SYMBOL:case t.EXPANSION_SYMBOL:case t.CHAR_SYMBOL:case t.CURRENT_USER_SYMBOL:case t.DATE_SYMBOL:case t.INSERT_SYMBOL:case t.TIME_SYMBOL:case t.TIMESTAMP_SYMBOL:case t.TIMESTAMP_LTZ_SYMBOL:case t.TIMESTAMP_NTZ_SYMBOL:case t.ZONE_SYMBOL:case t.USER_SYMBOL:case t.ADDDATE_SYMBOL:case t.SUBDATE_SYMBOL:case t.CURDATE_SYMBOL:case t.CURTIME_SYMBOL:case t.DATE_ADD_SYMBOL:case t.DATE_SUB_SYMBOL:case t.EXTRACT_SYMBOL:case t.GET_FORMAT_SYMBOL:case t.NOW_SYMBOL:case t.POSITION_SYMBOL:case t.SYSDATE_SYMBOL:case t.TIMESTAMP_ADD_SYMBOL:case t.TIMESTAMP_DIFF_SYMBOL:case t.UTC_DATE_SYMBOL:case t.UTC_TIME_SYMBOL:case t.UTC_TIMESTAMP_SYMBOL:case t.ASCII_SYMBOL:case t.CHARSET_SYMBOL:case t.COALESCE_SYMBOL:case t.COLLATION_SYMBOL:case t.DATABASE_SYMBOL:case t.IF_SYMBOL:case t.FORMAT_SYMBOL:case t.MICROSECOND_SYMBOL:case t.OLD_PASSWORD_SYMBOL:case t.PASSWORD_SYMBOL:case t.REPEAT_SYMBOL:case t.REPLACE_SYMBOL:case t.REVERSE_SYMBOL:case t.ROW_COUNT_SYMBOL:case t.TRUNCATE_SYMBOL:case t.WEIGHT_STRING_SYMBOL:case t.CONTAINS_SYMBOL:case t.GEOMETRYCOLLECTION_SYMBOL:case t.LINESTRING_SYMBOL:case t.MULTILINESTRING_SYMBOL:case t.MULTIPOINT_SYMBOL:case t.MULTIPOLYGON_SYMBOL:case t.POINT_SYMBOL:case t.POLYGON_SYMBOL:case t.LEVEL_SYMBOL:case t.DATETIME_SYMBOL:case t.TRIM_SYMBOL:case t.LEADING_SYMBOL:case t.TRAILING_SYMBOL:case t.BOTH_SYMBOL:case t.STRING_SYMBOL:case t.SUBSTRING_SYMBOL:case t.WHEN_SYMBOL:case t.THEN_SYMBOL:case t.ELSE_SYMBOL:case t.SIGNED_SYMBOL:case t.UNSIGNED_SYMBOL:case t.DECIMAL_SYMBOL:case t.JSON_SYMBOL:case t.FLOAT_SYMBOL:case t.FLOAT_SYMBOL_4:case t.FLOAT_SYMBOL_8:case t.SET_SYMBOL:case t.SECOND_MICROSECOND_SYMBOL:case t.MINUTE_MICROSECOND_SYMBOL:case t.MINUTE_SECOND_SYMBOL:case t.HOUR_MICROSECOND_SYMBOL:case t.HOUR_SECOND_SYMBOL:case t.HOUR_MINUTE_SYMBOL:case t.DAY_MICROSECOND_SYMBOL:case t.DAY_SECOND_SYMBOL:case t.DAY_MINUTE_SYMBOL:case t.DAY_HOUR_SYMBOL:case t.YEAR_MONTH_SYMBOL:case t.BTREE_SYMBOL:case t.RTREE_SYMBOL:case t.HASH_SYMBOL:case t.REAL_SYMBOL:case t.DOUBLE_SYMBOL:case t.PRECISION_SYMBOL:case t.NUMERIC_SYMBOL:case t.NUMBER_SYMBOL:case t.FIXED_SYMBOL:case t.BIT_SYMBOL:case t.BOOL_SYMBOL:case t.VARYING_SYMBOL:case t.VARCHAR_SYMBOL:case t.VARCHAR2_SYMBOL:case t.NATIONAL_SYMBOL:case t.NVARCHAR_SYMBOL:case t.NVARCHAR2_SYMBOL:case t.NCHAR_SYMBOL:case t.VARBINARY_SYMBOL:case t.TINYBLOB_SYMBOL:case t.BLOB_SYMBOL:case t.CLOB_SYMBOL:case t.BFILE_SYMBOL:case t.RAW_SYMBOL:case t.MEDIUMBLOB_SYMBOL:case t.LONGBLOB_SYMBOL:case t.LONG_SYMBOL:case t.TINYTEXT_SYMBOL:case t.TEXT_SYMBOL:case t.MEDIUMTEXT_SYMBOL:case t.LONGTEXT_SYMBOL:case t.ENUM_SYMBOL:case t.SERIAL_SYMBOL:case t.GEOMETRY_SYMBOL:case t.ZEROFILL_SYMBOL:case t.BYTE_SYMBOL:case t.UNICODE_SYMBOL:case t.TERMINATED_SYMBOL:case t.OPTIONALLY_SYMBOL:case t.ENCLOSED_SYMBOL:case t.ESCAPED_SYMBOL:case t.LINES_SYMBOL:case t.STARTING_SYMBOL:case t.GLOBAL_SYMBOL:case t.LOCAL_SYMBOL:case t.SESSION_SYMBOL:case t.VARIANT_SYMBOL:case t.OBJECT_SYMBOL:case t.GEOGRAPHY_SYMBOL:case t.UNDERSCORE_CHARSET:case t.IDENTIFIER:case t.BACK_TICK_QUOTED_ID:case t.DOUBLE_QUOTED_TEXT:case t.SINGLE_QUOTED_TEXT:case t.BRACKET_QUOTED_TEXT:case t.CURLY_BRACES_QUOTED_TEXT:this.state=541,this.textOrIdentifier();break;case t.AT_SIGN_SYMBOL:case t.AT_TEXT_SUFFIX:this.state=542,this.userVariable();break;default:throw new B.error.NoViableAltException(this)}this.state=549,this._errHandler.sync(this),u=this._input.LA(1)}break}}catch(a){if(a instanceof B.error.RecognitionException)e.exception=a,this._errHandler.reportError(this,a),this._errHandler.recover(this,a);else throw a}finally{this.exitRule()}return e}procedureAnalyseClause(){let e=new h2(this,this._ctx,this.state);this.enterRule(e,30,t.RULE_procedureAnalyseClause);var u=0;try{this.enterOuterAlt(e,1),this.state=552,this.match(t.PROCEDURE_SYMBOL),this.state=553,this.match(t.ANALYSE_SYMBOL),this.state=554,this.match(t.OPEN_PAR_SYMBOL),this.state=560,this._errHandler.sync(this),u=this._input.LA(1),u===t.INT_NUMBER&&(this.state=555,this.match(t.INT_NUMBER),this.state=558,this._errHandler.sync(this),u=this._input.LA(1),u===t.COMMA_SYMBOL&&(this.state=556,this.match(t.COMMA_SYMBOL),this.state=557,this.match(t.INT_NUMBER))),this.state=562,this.match(t.CLOSE_PAR_SYMBOL)}catch(r){if(r instanceof B.error.RecognitionException)e.exception=r,this._errHandler.reportError(this,r),this._errHandler.recover(this,r);else throw r}finally{this.exitRule()}return e}havingClause(){let e=new f2(this,this._ctx,this.state);this.enterRule(e,32,t.RULE_havingClause);try{this.enterOuterAlt(e,1),this.state=564,this.match(t.HAVING_SYMBOL),this.state=565,this.expr(0)}catch(u){if(u instanceof B.error.RecognitionException)e.exception=u,this._errHandler.reportError(this,u),this._errHandler.recover(this,u);else throw u}finally{this.exitRule()}return e}windowClause(){let e=new S2(this,this._ctx,this.state);this.enterRule(e,34,t.RULE_windowClause);var u=0;try{for(this.enterOuterAlt(e,1),this.state=567,this.match(t.WINDOW_SYMBOL),this.state=568,this.windowDefinition(),this.state=573,this._errHandler.sync(this),u=this._input.LA(1);u===t.COMMA_SYMBOL;)this.state=569,this.match(t.COMMA_SYMBOL),this.state=570,this.windowDefinition(),this.state=575,this._errHandler.sync(this),u=this._input.LA(1)}catch(r){if(r instanceof B.error.RecognitionException)e.exception=r,this._errHandler.reportError(this,r),this._errHandler.recover(this,r);else throw r}finally{this.exitRule()}return e}windowDefinition(){let e=new Ss(this,this._ctx,this.state);this.enterRule(e,36,t.RULE_windowDefinition);try{this.enterOuterAlt(e,1),this.state=576,this.identifier(),this.state=577,this.match(t.AS_SYMBOL),this.state=578,this.windowSpec()}catch(u){if(u instanceof B.error.RecognitionException)e.exception=u,this._errHandler.reportError(this,u),this._errHandler.recover(this,u);else throw u}finally{this.exitRule()}return e}windowSpec(){let e=new Os(this,this._ctx,this.state);this.enterRule(e,38,t.RULE_windowSpec);try{this.enterOuterAlt(e,1),this.state=580,this.match(t.OPEN_PAR_SYMBOL),this.state=581,this.windowSpecDetails(),this.state=582,this.match(t.CLOSE_PAR_SYMBOL)}catch(u){if(u instanceof B.error.RecognitionException)e.exception=u,this._errHandler.reportError(this,u),this._errHandler.recover(this,u);else throw u}finally{this.exitRule()}return e}windowSpecDetails(){let e=new O2(this,this._ctx,this.state);this.enterRule(e,40,t.RULE_windowSpecDetails);var u=0;try{this.enterOuterAlt(e,1),this.state=585,this._errHandler.sync(this);var r=this._interp.adaptivePredict(this._input,49,this._ctx);r===1&&(this.state=584,this.identifier()),this.state=590,this._errHandler.sync(this),u=this._input.LA(1),u===t.PARTITION_SYMBOL&&(this.state=587,this.match(t.PARTITION_SYMBOL),this.state=588,this.match(t.BY_SYMBOL),this.state=589,this.orderList()),this.state=593,this._errHandler.sync(this),u=this._input.LA(1),u===t.ORDER_SYMBOL&&(this.state=592,this.orderClause()),this.state=596,this._errHandler.sync(this),u=this._input.LA(1),!(u-86&-32)&&1<'","'>='","'>'","'<='","'<'",null,"'+'","'-'","'*'","'/'","'%'","'!'","'~'","'<<'","'>>'","'&&'","'&'","'^'","'||'","'|'","'.'","','","';'","':'","'('","')'","'{'","'}'","'_'","'['","']'","'{{'","'}}'","'->'","'->>'","'@'",null,"'@@'","'\\N'","'?'","'::'",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"'/*!'",null,"'*/'"]),Yu(t,"symbolicNames",[null,"EQUAL_OPERATOR","ASSIGN_OPERATOR","NULL_SAFE_EQUAL_OPERATOR","GREATER_OR_EQUAL_OPERATOR","GREATER_THAN_OPERATOR","LESS_OR_EQUAL_OPERATOR","LESS_THAN_OPERATOR","NOT_EQUAL_OPERATOR","PLUS_OPERATOR","MINUS_OPERATOR","MULT_OPERATOR","DIV_OPERATOR","MOD_OPERATOR","LOGICAL_NOT_OPERATOR","BITWISE_NOT_OPERATOR","SHIFT_LEFT_OPERATOR","SHIFT_RIGHT_OPERATOR","LOGICAL_AND_OPERATOR","BITWISE_AND_OPERATOR","BITWISE_XOR_OPERATOR","LOGICAL_OR_OPERATOR","BITWISE_OR_OPERATOR","DOT_SYMBOL","COMMA_SYMBOL","SEMICOLON_SYMBOL","COLON_SYMBOL","OPEN_PAR_SYMBOL","CLOSE_PAR_SYMBOL","OPEN_CURLY_SYMBOL","CLOSE_CURLY_SYMBOL","UNDERLINE_SYMBOL","OPEN_BRACKET_SYMBOL","CLOSE_BRACKET_SYMBOL","OPEN_DOUBLE_CURLY_SYMBOL","CLOSE_DOUBLE_CURLY_SYMBOL","JSON_SEPARATOR_SYMBOL","JSON_UNQUOTED_SEPARATOR_SYMBOL","AT_SIGN_SYMBOL","AT_TEXT_SUFFIX","AT_AT_SIGN_SYMBOL","NULL2_SYMBOL","PARAM_MARKER","CAST_COLON_SYMBOL","HEX_NUMBER","BIN_NUMBER","INT_NUMBER","DECIMAL_NUMBER","FLOAT_NUMBER","TINYINT_SYMBOL","SMALLINT_SYMBOL","MEDIUMINT_SYMBOL","BYTE_INT_SYMBOL","INT_SYMBOL","BIGINT_SYMBOL","SECOND_SYMBOL","MINUTE_SYMBOL","HOUR_SYMBOL","DAY_SYMBOL","WEEK_SYMBOL","MONTH_SYMBOL","QUARTER_SYMBOL","YEAR_SYMBOL","DEFAULT_SYMBOL","UNION_SYMBOL","SELECT_SYMBOL","ALL_SYMBOL","DISTINCT_SYMBOL","STRAIGHT_JOIN_SYMBOL","HIGH_PRIORITY_SYMBOL","SQL_SMALL_RESULT_SYMBOL","SQL_BIG_RESULT_SYMBOL","SQL_BUFFER_RESULT_SYMBOL","SQL_CALC_FOUND_ROWS_SYMBOL","LIMIT_SYMBOL","OFFSET_SYMBOL","INTO_SYMBOL","OUTFILE_SYMBOL","DUMPFILE_SYMBOL","PROCEDURE_SYMBOL","ANALYSE_SYMBOL","HAVING_SYMBOL","WINDOW_SYMBOL","AS_SYMBOL","PARTITION_SYMBOL","BY_SYMBOL","ROWS_SYMBOL","RANGE_SYMBOL","GROUPS_SYMBOL","UNBOUNDED_SYMBOL","PRECEDING_SYMBOL","INTERVAL_SYMBOL","CURRENT_SYMBOL","ROW_SYMBOL","BETWEEN_SYMBOL","AND_SYMBOL","FOLLOWING_SYMBOL","EXCLUDE_SYMBOL","GROUP_SYMBOL","TIES_SYMBOL","NO_SYMBOL","OTHERS_SYMBOL","WITH_SYMBOL","WITHOUT_SYMBOL","RECURSIVE_SYMBOL","ROLLUP_SYMBOL","CUBE_SYMBOL","ORDER_SYMBOL","ASC_SYMBOL","DESC_SYMBOL","FROM_SYMBOL","DUAL_SYMBOL","VALUES_SYMBOL","TABLE_SYMBOL","SQL_NO_CACHE_SYMBOL","SQL_CACHE_SYMBOL","MAX_STATEMENT_TIME_SYMBOL","FOR_SYMBOL","OF_SYMBOL","LOCK_SYMBOL","IN_SYMBOL","SHARE_SYMBOL","MODE_SYMBOL","UPDATE_SYMBOL","SKIP_SYMBOL","LOCKED_SYMBOL","NOWAIT_SYMBOL","WHERE_SYMBOL","QUALIFY_SYMBOL","OJ_SYMBOL","ON_SYMBOL","USING_SYMBOL","NATURAL_SYMBOL","INNER_SYMBOL","JOIN_SYMBOL","LEFT_SYMBOL","RIGHT_SYMBOL","OUTER_SYMBOL","CROSS_SYMBOL","LATERAL_SYMBOL","JSON_TABLE_SYMBOL","COLUMNS_SYMBOL","ORDINALITY_SYMBOL","EXISTS_SYMBOL","PATH_SYMBOL","NESTED_SYMBOL","EMPTY_SYMBOL","ERROR_SYMBOL","NULL_SYMBOL","USE_SYMBOL","FORCE_SYMBOL","IGNORE_SYMBOL","KEY_SYMBOL","INDEX_SYMBOL","PRIMARY_SYMBOL","IS_SYMBOL","TRUE_SYMBOL","FALSE_SYMBOL","UNKNOWN_SYMBOL","NOT_SYMBOL","XOR_SYMBOL","OR_SYMBOL","ANY_SYMBOL","MEMBER_SYMBOL","SOUNDS_SYMBOL","LIKE_SYMBOL","ESCAPE_SYMBOL","REGEXP_SYMBOL","DIV_SYMBOL","MOD_SYMBOL","MATCH_SYMBOL","AGAINST_SYMBOL","BINARY_SYMBOL","CAST_SYMBOL","ARRAY_SYMBOL","CASE_SYMBOL","END_SYMBOL","CONVERT_SYMBOL","COLLATE_SYMBOL","AVG_SYMBOL","BIT_AND_SYMBOL","BIT_OR_SYMBOL","BIT_XOR_SYMBOL","COUNT_SYMBOL","MIN_SYMBOL","MAX_SYMBOL","STD_SYMBOL","VARIANCE_SYMBOL","STDDEV_SAMP_SYMBOL","VAR_SAMP_SYMBOL","SUM_SYMBOL","GROUP_CONCAT_SYMBOL","SEPARATOR_SYMBOL","GROUPING_SYMBOL","ROW_NUMBER_SYMBOL","RANK_SYMBOL","DENSE_RANK_SYMBOL","CUME_DIST_SYMBOL","PERCENT_RANK_SYMBOL","NTILE_SYMBOL","LEAD_SYMBOL","LAG_SYMBOL","FIRST_VALUE_SYMBOL","LAST_VALUE_SYMBOL","NTH_VALUE_SYMBOL","FIRST_SYMBOL","LAST_SYMBOL","OVER_SYMBOL","RESPECT_SYMBOL","NULLS_SYMBOL","JSON_ARRAYAGG_SYMBOL","JSON_OBJECTAGG_SYMBOL","BOOLEAN_SYMBOL","LANGUAGE_SYMBOL","QUERY_SYMBOL","EXPANSION_SYMBOL","CHAR_SYMBOL","CURRENT_USER_SYMBOL","DATE_SYMBOL","INSERT_SYMBOL","TIME_SYMBOL","TIMESTAMP_SYMBOL","TIMESTAMP_LTZ_SYMBOL","TIMESTAMP_NTZ_SYMBOL","ZONE_SYMBOL","USER_SYMBOL","ADDDATE_SYMBOL","SUBDATE_SYMBOL","CURDATE_SYMBOL","CURTIME_SYMBOL","DATE_ADD_SYMBOL","DATE_SUB_SYMBOL","EXTRACT_SYMBOL","GET_FORMAT_SYMBOL","NOW_SYMBOL","POSITION_SYMBOL","SYSDATE_SYMBOL","TIMESTAMP_ADD_SYMBOL","TIMESTAMP_DIFF_SYMBOL","UTC_DATE_SYMBOL","UTC_TIME_SYMBOL","UTC_TIMESTAMP_SYMBOL","ASCII_SYMBOL","CHARSET_SYMBOL","COALESCE_SYMBOL","COLLATION_SYMBOL","DATABASE_SYMBOL","IF_SYMBOL","FORMAT_SYMBOL","MICROSECOND_SYMBOL","OLD_PASSWORD_SYMBOL","PASSWORD_SYMBOL","REPEAT_SYMBOL","REPLACE_SYMBOL","REVERSE_SYMBOL","ROW_COUNT_SYMBOL","TRUNCATE_SYMBOL","WEIGHT_STRING_SYMBOL","CONTAINS_SYMBOL","GEOMETRYCOLLECTION_SYMBOL","LINESTRING_SYMBOL","MULTILINESTRING_SYMBOL","MULTIPOINT_SYMBOL","MULTIPOLYGON_SYMBOL","POINT_SYMBOL","POLYGON_SYMBOL","LEVEL_SYMBOL","DATETIME_SYMBOL","TRIM_SYMBOL","LEADING_SYMBOL","TRAILING_SYMBOL","BOTH_SYMBOL","STRING_SYMBOL","SUBSTRING_SYMBOL","WHEN_SYMBOL","THEN_SYMBOL","ELSE_SYMBOL","SIGNED_SYMBOL","UNSIGNED_SYMBOL","DECIMAL_SYMBOL","JSON_SYMBOL","FLOAT_SYMBOL","FLOAT_SYMBOL_4","FLOAT_SYMBOL_8","SET_SYMBOL","SECOND_MICROSECOND_SYMBOL","MINUTE_MICROSECOND_SYMBOL","MINUTE_SECOND_SYMBOL","HOUR_MICROSECOND_SYMBOL","HOUR_SECOND_SYMBOL","HOUR_MINUTE_SYMBOL","DAY_MICROSECOND_SYMBOL","DAY_SECOND_SYMBOL","DAY_MINUTE_SYMBOL","DAY_HOUR_SYMBOL","YEAR_MONTH_SYMBOL","BTREE_SYMBOL","RTREE_SYMBOL","HASH_SYMBOL","REAL_SYMBOL","DOUBLE_SYMBOL","PRECISION_SYMBOL","NUMERIC_SYMBOL","NUMBER_SYMBOL","FIXED_SYMBOL","BIT_SYMBOL","BOOL_SYMBOL","VARYING_SYMBOL","VARCHAR_SYMBOL","VARCHAR2_SYMBOL","NATIONAL_SYMBOL","NVARCHAR_SYMBOL","NVARCHAR2_SYMBOL","NCHAR_SYMBOL","VARBINARY_SYMBOL","TINYBLOB_SYMBOL","BLOB_SYMBOL","CLOB_SYMBOL","BFILE_SYMBOL","RAW_SYMBOL","MEDIUMBLOB_SYMBOL","LONGBLOB_SYMBOL","LONG_SYMBOL","TINYTEXT_SYMBOL","TEXT_SYMBOL","MEDIUMTEXT_SYMBOL","LONGTEXT_SYMBOL","ENUM_SYMBOL","SERIAL_SYMBOL","GEOMETRY_SYMBOL","ZEROFILL_SYMBOL","BYTE_SYMBOL","UNICODE_SYMBOL","TERMINATED_SYMBOL","OPTIONALLY_SYMBOL","ENCLOSED_SYMBOL","ESCAPED_SYMBOL","LINES_SYMBOL","STARTING_SYMBOL","GLOBAL_SYMBOL","LOCAL_SYMBOL","SESSION_SYMBOL","VARIANT_SYMBOL","OBJECT_SYMBOL","GEOGRAPHY_SYMBOL","UNPIVOT_SYMBOL","WHITESPACE","INVALID_INPUT","UNDERSCORE_CHARSET","IDENTIFIER","NCHAR_TEXT","BACK_TICK_QUOTED_ID","DOUBLE_QUOTED_TEXT","SINGLE_QUOTED_TEXT","BRACKET_QUOTED_TEXT","BRACKET_QUOTED_NUMBER","CURLY_BRACES_QUOTED_TEXT","VERSION_COMMENT_START","MYSQL_COMMENT_START","SNOWFLAKE_COMMENT","VERSION_COMMENT_END","BLOCK_COMMENT","POUND_COMMENT","DASHDASH_COMMENT"]),Yu(t,"ruleNames",["query","values","selectStatement","selectStatementWithInto","queryExpression","queryExpressionBody","queryExpressionParens","queryPrimary","querySpecification","subquery","querySpecOption","limitClause","limitOptions","limitOption","intoClause","procedureAnalyseClause","havingClause","windowClause","windowDefinition","windowSpec","windowSpecDetails","windowFrameClause","windowFrameUnits","windowFrameExtent","windowFrameStart","windowFrameBetween","windowFrameBound","windowFrameExclusion","withClause","commonTableExpression","groupByClause","olapOption","orderClause","direction","fromClause","tableReferenceList","tableValueConstructor","explicitTable","rowValueExplicit","selectOption","lockingClauseList","lockingClause","lockStrengh","lockedRowAction","selectItemList","selectItem","selectAlias","whereClause","qualifyClause","tableReference","escapedTableReference","joinedTable","naturalJoinType","innerJoinType","outerJoinType","tableFactor","singleTable","singleTableParens","derivedTable","tableReferenceListParens","tableFunction","columnsClause","jtColumn","onEmptyOrError","onEmpty","onError","jtOnResponse","unionOption","tableAlias","indexHintList","indexHint","indexHintType","keyOrIndex","indexHintClause","indexList","indexListElement","expr","boolPri","compOp","predicate","predicateOperations","bitExpr","simpleExpr","jsonOperator","sumExpr","groupingOperation","windowFunctionCall","windowingClause","leadLagInfo","nullTreatment","jsonFunction","inSumExpr","identListArg","identList","fulltextOptions","runtimeFunctionCall","geometryFunction","timeFunctionParameters","fractionalPrecision","weightStringLevels","weightStringLevelListItem","dateTimeTtype","trimFunction","substringFunction","functionCall","udfExprList","udfExpr","unpivotClause","variable","userVariable","systemVariable","whenExpression","thenExpression","elseExpression","exprList","charset","notRule","not2Rule","interval","intervalTimeStamp","exprListWithParentheses","exprWithParentheses","simpleExprWithParentheses","orderList","orderExpression","indexType","dataType","nchar","fieldLength","fieldOptions","charsetWithOptBinary","ascii","unicode","wsNumCodepoints","typeDatetimePrecision","charsetName","collationName","collate","charsetClause","fieldsClause","fieldTerm","linesClause","lineTerm","usePartition","columnInternalRefList","tableAliasRefList","pureIdentifier","identifier","identifierList","identifierListWithParentheses","qualifiedIdentifier","jsonPathIdentifier","dotIdentifier","ulong_number","real_ulong_number","ulonglong_number","real_ulonglong_number","literal","stringList","textStringLiteral","textString","textLiteral","numLiteral","boolLiteral","nullLiteral","temporalLiteral","floatOptions","precision","textOrIdentifier","parentheses","equal","varIdentType","identifierKeyword"]);var o=t;o.EOF=B.Token.EOF;o.EQUAL_OPERATOR=1;o.ASSIGN_OPERATOR=2;o.NULL_SAFE_EQUAL_OPERATOR=3;o.GREATER_OR_EQUAL_OPERATOR=4;o.GREATER_THAN_OPERATOR=5;o.LESS_OR_EQUAL_OPERATOR=6;o.LESS_THAN_OPERATOR=7;o.NOT_EQUAL_OPERATOR=8;o.PLUS_OPERATOR=9;o.MINUS_OPERATOR=10;o.MULT_OPERATOR=11;o.DIV_OPERATOR=12;o.MOD_OPERATOR=13;o.LOGICAL_NOT_OPERATOR=14;o.BITWISE_NOT_OPERATOR=15;o.SHIFT_LEFT_OPERATOR=16;o.SHIFT_RIGHT_OPERATOR=17;o.LOGICAL_AND_OPERATOR=18;o.BITWISE_AND_OPERATOR=19;o.BITWISE_XOR_OPERATOR=20;o.LOGICAL_OR_OPERATOR=21;o.BITWISE_OR_OPERATOR=22;o.DOT_SYMBOL=23;o.COMMA_SYMBOL=24;o.SEMICOLON_SYMBOL=25;o.COLON_SYMBOL=26;o.OPEN_PAR_SYMBOL=27;o.CLOSE_PAR_SYMBOL=28;o.OPEN_CURLY_SYMBOL=29;o.CLOSE_CURLY_SYMBOL=30;o.UNDERLINE_SYMBOL=31;o.OPEN_BRACKET_SYMBOL=32;o.CLOSE_BRACKET_SYMBOL=33;o.OPEN_DOUBLE_CURLY_SYMBOL=34;o.CLOSE_DOUBLE_CURLY_SYMBOL=35;o.JSON_SEPARATOR_SYMBOL=36;o.JSON_UNQUOTED_SEPARATOR_SYMBOL=37;o.AT_SIGN_SYMBOL=38;o.AT_TEXT_SUFFIX=39;o.AT_AT_SIGN_SYMBOL=40;o.NULL2_SYMBOL=41;o.PARAM_MARKER=42;o.CAST_COLON_SYMBOL=43;o.HEX_NUMBER=44;o.BIN_NUMBER=45;o.INT_NUMBER=46;o.DECIMAL_NUMBER=47;o.FLOAT_NUMBER=48;o.TINYINT_SYMBOL=49;o.SMALLINT_SYMBOL=50;o.MEDIUMINT_SYMBOL=51;o.BYTE_INT_SYMBOL=52;o.INT_SYMBOL=53;o.BIGINT_SYMBOL=54;o.SECOND_SYMBOL=55;o.MINUTE_SYMBOL=56;o.HOUR_SYMBOL=57;o.DAY_SYMBOL=58;o.WEEK_SYMBOL=59;o.MONTH_SYMBOL=60;o.QUARTER_SYMBOL=61;o.YEAR_SYMBOL=62;o.DEFAULT_SYMBOL=63;o.UNION_SYMBOL=64;o.SELECT_SYMBOL=65;o.ALL_SYMBOL=66;o.DISTINCT_SYMBOL=67;o.STRAIGHT_JOIN_SYMBOL=68;o.HIGH_PRIORITY_SYMBOL=69;o.SQL_SMALL_RESULT_SYMBOL=70;o.SQL_BIG_RESULT_SYMBOL=71;o.SQL_BUFFER_RESULT_SYMBOL=72;o.SQL_CALC_FOUND_ROWS_SYMBOL=73;o.LIMIT_SYMBOL=74;o.OFFSET_SYMBOL=75;o.INTO_SYMBOL=76;o.OUTFILE_SYMBOL=77;o.DUMPFILE_SYMBOL=78;o.PROCEDURE_SYMBOL=79;o.ANALYSE_SYMBOL=80;o.HAVING_SYMBOL=81;o.WINDOW_SYMBOL=82;o.AS_SYMBOL=83;o.PARTITION_SYMBOL=84;o.BY_SYMBOL=85;o.ROWS_SYMBOL=86;o.RANGE_SYMBOL=87;o.GROUPS_SYMBOL=88;o.UNBOUNDED_SYMBOL=89;o.PRECEDING_SYMBOL=90;o.INTERVAL_SYMBOL=91;o.CURRENT_SYMBOL=92;o.ROW_SYMBOL=93;o.BETWEEN_SYMBOL=94;o.AND_SYMBOL=95;o.FOLLOWING_SYMBOL=96;o.EXCLUDE_SYMBOL=97;o.GROUP_SYMBOL=98;o.TIES_SYMBOL=99;o.NO_SYMBOL=100;o.OTHERS_SYMBOL=101;o.WITH_SYMBOL=102;o.WITHOUT_SYMBOL=103;o.RECURSIVE_SYMBOL=104;o.ROLLUP_SYMBOL=105;o.CUBE_SYMBOL=106;o.ORDER_SYMBOL=107;o.ASC_SYMBOL=108;o.DESC_SYMBOL=109;o.FROM_SYMBOL=110;o.DUAL_SYMBOL=111;o.VALUES_SYMBOL=112;o.TABLE_SYMBOL=113;o.SQL_NO_CACHE_SYMBOL=114;o.SQL_CACHE_SYMBOL=115;o.MAX_STATEMENT_TIME_SYMBOL=116;o.FOR_SYMBOL=117;o.OF_SYMBOL=118;o.LOCK_SYMBOL=119;o.IN_SYMBOL=120;o.SHARE_SYMBOL=121;o.MODE_SYMBOL=122;o.UPDATE_SYMBOL=123;o.SKIP_SYMBOL=124;o.LOCKED_SYMBOL=125;o.NOWAIT_SYMBOL=126;o.WHERE_SYMBOL=127;o.QUALIFY_SYMBOL=128;o.OJ_SYMBOL=129;o.ON_SYMBOL=130;o.USING_SYMBOL=131;o.NATURAL_SYMBOL=132;o.INNER_SYMBOL=133;o.JOIN_SYMBOL=134;o.LEFT_SYMBOL=135;o.RIGHT_SYMBOL=136;o.OUTER_SYMBOL=137;o.CROSS_SYMBOL=138;o.LATERAL_SYMBOL=139;o.JSON_TABLE_SYMBOL=140;o.COLUMNS_SYMBOL=141;o.ORDINALITY_SYMBOL=142;o.EXISTS_SYMBOL=143;o.PATH_SYMBOL=144;o.NESTED_SYMBOL=145;o.EMPTY_SYMBOL=146;o.ERROR_SYMBOL=147;o.NULL_SYMBOL=148;o.USE_SYMBOL=149;o.FORCE_SYMBOL=150;o.IGNORE_SYMBOL=151;o.KEY_SYMBOL=152;o.INDEX_SYMBOL=153;o.PRIMARY_SYMBOL=154;o.IS_SYMBOL=155;o.TRUE_SYMBOL=156;o.FALSE_SYMBOL=157;o.UNKNOWN_SYMBOL=158;o.NOT_SYMBOL=159;o.XOR_SYMBOL=160;o.OR_SYMBOL=161;o.ANY_SYMBOL=162;o.MEMBER_SYMBOL=163;o.SOUNDS_SYMBOL=164;o.LIKE_SYMBOL=165;o.ESCAPE_SYMBOL=166;o.REGEXP_SYMBOL=167;o.DIV_SYMBOL=168;o.MOD_SYMBOL=169;o.MATCH_SYMBOL=170;o.AGAINST_SYMBOL=171;o.BINARY_SYMBOL=172;o.CAST_SYMBOL=173;o.ARRAY_SYMBOL=174;o.CASE_SYMBOL=175;o.END_SYMBOL=176;o.CONVERT_SYMBOL=177;o.COLLATE_SYMBOL=178;o.AVG_SYMBOL=179;o.BIT_AND_SYMBOL=180;o.BIT_OR_SYMBOL=181;o.BIT_XOR_SYMBOL=182;o.COUNT_SYMBOL=183;o.MIN_SYMBOL=184;o.MAX_SYMBOL=185;o.STD_SYMBOL=186;o.VARIANCE_SYMBOL=187;o.STDDEV_SAMP_SYMBOL=188;o.VAR_SAMP_SYMBOL=189;o.SUM_SYMBOL=190;o.GROUP_CONCAT_SYMBOL=191;o.SEPARATOR_SYMBOL=192;o.GROUPING_SYMBOL=193;o.ROW_NUMBER_SYMBOL=194;o.RANK_SYMBOL=195;o.DENSE_RANK_SYMBOL=196;o.CUME_DIST_SYMBOL=197;o.PERCENT_RANK_SYMBOL=198;o.NTILE_SYMBOL=199;o.LEAD_SYMBOL=200;o.LAG_SYMBOL=201;o.FIRST_VALUE_SYMBOL=202;o.LAST_VALUE_SYMBOL=203;o.NTH_VALUE_SYMBOL=204;o.FIRST_SYMBOL=205;o.LAST_SYMBOL=206;o.OVER_SYMBOL=207;o.RESPECT_SYMBOL=208;o.NULLS_SYMBOL=209;o.JSON_ARRAYAGG_SYMBOL=210;o.JSON_OBJECTAGG_SYMBOL=211;o.BOOLEAN_SYMBOL=212;o.LANGUAGE_SYMBOL=213;o.QUERY_SYMBOL=214;o.EXPANSION_SYMBOL=215;o.CHAR_SYMBOL=216;o.CURRENT_USER_SYMBOL=217;o.DATE_SYMBOL=218;o.INSERT_SYMBOL=219;o.TIME_SYMBOL=220;o.TIMESTAMP_SYMBOL=221;o.TIMESTAMP_LTZ_SYMBOL=222;o.TIMESTAMP_NTZ_SYMBOL=223;o.ZONE_SYMBOL=224;o.USER_SYMBOL=225;o.ADDDATE_SYMBOL=226;o.SUBDATE_SYMBOL=227;o.CURDATE_SYMBOL=228;o.CURTIME_SYMBOL=229;o.DATE_ADD_SYMBOL=230;o.DATE_SUB_SYMBOL=231;o.EXTRACT_SYMBOL=232;o.GET_FORMAT_SYMBOL=233;o.NOW_SYMBOL=234;o.POSITION_SYMBOL=235;o.SYSDATE_SYMBOL=236;o.TIMESTAMP_ADD_SYMBOL=237;o.TIMESTAMP_DIFF_SYMBOL=238;o.UTC_DATE_SYMBOL=239;o.UTC_TIME_SYMBOL=240;o.UTC_TIMESTAMP_SYMBOL=241;o.ASCII_SYMBOL=242;o.CHARSET_SYMBOL=243;o.COALESCE_SYMBOL=244;o.COLLATION_SYMBOL=245;o.DATABASE_SYMBOL=246;o.IF_SYMBOL=247;o.FORMAT_SYMBOL=248;o.MICROSECOND_SYMBOL=249;o.OLD_PASSWORD_SYMBOL=250;o.PASSWORD_SYMBOL=251;o.REPEAT_SYMBOL=252;o.REPLACE_SYMBOL=253;o.REVERSE_SYMBOL=254;o.ROW_COUNT_SYMBOL=255;o.TRUNCATE_SYMBOL=256;o.WEIGHT_STRING_SYMBOL=257;o.CONTAINS_SYMBOL=258;o.GEOMETRYCOLLECTION_SYMBOL=259;o.LINESTRING_SYMBOL=260;o.MULTILINESTRING_SYMBOL=261;o.MULTIPOINT_SYMBOL=262;o.MULTIPOLYGON_SYMBOL=263;o.POINT_SYMBOL=264;o.POLYGON_SYMBOL=265;o.LEVEL_SYMBOL=266;o.DATETIME_SYMBOL=267;o.TRIM_SYMBOL=268;o.LEADING_SYMBOL=269;o.TRAILING_SYMBOL=270;o.BOTH_SYMBOL=271;o.STRING_SYMBOL=272;o.SUBSTRING_SYMBOL=273;o.WHEN_SYMBOL=274;o.THEN_SYMBOL=275;o.ELSE_SYMBOL=276;o.SIGNED_SYMBOL=277;o.UNSIGNED_SYMBOL=278;o.DECIMAL_SYMBOL=279;o.JSON_SYMBOL=280;o.FLOAT_SYMBOL=281;o.FLOAT_SYMBOL_4=282;o.FLOAT_SYMBOL_8=283;o.SET_SYMBOL=284;o.SECOND_MICROSECOND_SYMBOL=285;o.MINUTE_MICROSECOND_SYMBOL=286;o.MINUTE_SECOND_SYMBOL=287;o.HOUR_MICROSECOND_SYMBOL=288;o.HOUR_SECOND_SYMBOL=289;o.HOUR_MINUTE_SYMBOL=290;o.DAY_MICROSECOND_SYMBOL=291;o.DAY_SECOND_SYMBOL=292;o.DAY_MINUTE_SYMBOL=293;o.DAY_HOUR_SYMBOL=294;o.YEAR_MONTH_SYMBOL=295;o.BTREE_SYMBOL=296;o.RTREE_SYMBOL=297;o.HASH_SYMBOL=298;o.REAL_SYMBOL=299;o.DOUBLE_SYMBOL=300;o.PRECISION_SYMBOL=301;o.NUMERIC_SYMBOL=302;o.NUMBER_SYMBOL=303;o.FIXED_SYMBOL=304;o.BIT_SYMBOL=305;o.BOOL_SYMBOL=306;o.VARYING_SYMBOL=307;o.VARCHAR_SYMBOL=308;o.VARCHAR2_SYMBOL=309;o.NATIONAL_SYMBOL=310;o.NVARCHAR_SYMBOL=311;o.NVARCHAR2_SYMBOL=312;o.NCHAR_SYMBOL=313;o.VARBINARY_SYMBOL=314;o.TINYBLOB_SYMBOL=315;o.BLOB_SYMBOL=316;o.CLOB_SYMBOL=317;o.BFILE_SYMBOL=318;o.RAW_SYMBOL=319;o.MEDIUMBLOB_SYMBOL=320;o.LONGBLOB_SYMBOL=321;o.LONG_SYMBOL=322;o.TINYTEXT_SYMBOL=323;o.TEXT_SYMBOL=324;o.MEDIUMTEXT_SYMBOL=325;o.LONGTEXT_SYMBOL=326;o.ENUM_SYMBOL=327;o.SERIAL_SYMBOL=328;o.GEOMETRY_SYMBOL=329;o.ZEROFILL_SYMBOL=330;o.BYTE_SYMBOL=331;o.UNICODE_SYMBOL=332;o.TERMINATED_SYMBOL=333;o.OPTIONALLY_SYMBOL=334;o.ENCLOSED_SYMBOL=335;o.ESCAPED_SYMBOL=336;o.LINES_SYMBOL=337;o.STARTING_SYMBOL=338;o.GLOBAL_SYMBOL=339;o.LOCAL_SYMBOL=340;o.SESSION_SYMBOL=341;o.VARIANT_SYMBOL=342;o.OBJECT_SYMBOL=343;o.GEOGRAPHY_SYMBOL=344;o.UNPIVOT_SYMBOL=345;o.WHITESPACE=346;o.INVALID_INPUT=347;o.UNDERSCORE_CHARSET=348;o.IDENTIFIER=349;o.NCHAR_TEXT=350;o.BACK_TICK_QUOTED_ID=351;o.DOUBLE_QUOTED_TEXT=352;o.SINGLE_QUOTED_TEXT=353;o.BRACKET_QUOTED_TEXT=354;o.BRACKET_QUOTED_NUMBER=355;o.CURLY_BRACES_QUOTED_TEXT=356;o.VERSION_COMMENT_START=357;o.MYSQL_COMMENT_START=358;o.SNOWFLAKE_COMMENT=359;o.VERSION_COMMENT_END=360;o.BLOCK_COMMENT=361;o.POUND_COMMENT=362;o.DASHDASH_COMMENT=363;o.RULE_query=0;o.RULE_values=1;o.RULE_selectStatement=2;o.RULE_selectStatementWithInto=3;o.RULE_queryExpression=4;o.RULE_queryExpressionBody=5;o.RULE_queryExpressionParens=6;o.RULE_queryPrimary=7;o.RULE_querySpecification=8;o.RULE_subquery=9;o.RULE_querySpecOption=10;o.RULE_limitClause=11;o.RULE_limitOptions=12;o.RULE_limitOption=13;o.RULE_intoClause=14;o.RULE_procedureAnalyseClause=15;o.RULE_havingClause=16;o.RULE_windowClause=17;o.RULE_windowDefinition=18;o.RULE_windowSpec=19;o.RULE_windowSpecDetails=20;o.RULE_windowFrameClause=21;o.RULE_windowFrameUnits=22;o.RULE_windowFrameExtent=23;o.RULE_windowFrameStart=24;o.RULE_windowFrameBetween=25;o.RULE_windowFrameBound=26;o.RULE_windowFrameExclusion=27;o.RULE_withClause=28;o.RULE_commonTableExpression=29;o.RULE_groupByClause=30;o.RULE_olapOption=31;o.RULE_orderClause=32;o.RULE_direction=33;o.RULE_fromClause=34;o.RULE_tableReferenceList=35;o.RULE_tableValueConstructor=36;o.RULE_explicitTable=37;o.RULE_rowValueExplicit=38;o.RULE_selectOption=39;o.RULE_lockingClauseList=40;o.RULE_lockingClause=41;o.RULE_lockStrengh=42;o.RULE_lockedRowAction=43;o.RULE_selectItemList=44;o.RULE_selectItem=45;o.RULE_selectAlias=46;o.RULE_whereClause=47;o.RULE_qualifyClause=48;o.RULE_tableReference=49;o.RULE_escapedTableReference=50;o.RULE_joinedTable=51;o.RULE_naturalJoinType=52;o.RULE_innerJoinType=53;o.RULE_outerJoinType=54;o.RULE_tableFactor=55;o.RULE_singleTable=56;o.RULE_singleTableParens=57;o.RULE_derivedTable=58;o.RULE_tableReferenceListParens=59;o.RULE_tableFunction=60;o.RULE_columnsClause=61;o.RULE_jtColumn=62;o.RULE_onEmptyOrError=63;o.RULE_onEmpty=64;o.RULE_onError=65;o.RULE_jtOnResponse=66;o.RULE_unionOption=67;o.RULE_tableAlias=68;o.RULE_indexHintList=69;o.RULE_indexHint=70;o.RULE_indexHintType=71;o.RULE_keyOrIndex=72;o.RULE_indexHintClause=73;o.RULE_indexList=74;o.RULE_indexListElement=75;o.RULE_expr=76;o.RULE_boolPri=77;o.RULE_compOp=78;o.RULE_predicate=79;o.RULE_predicateOperations=80;o.RULE_bitExpr=81;o.RULE_simpleExpr=82;o.RULE_jsonOperator=83;o.RULE_sumExpr=84;o.RULE_groupingOperation=85;o.RULE_windowFunctionCall=86;o.RULE_windowingClause=87;o.RULE_leadLagInfo=88;o.RULE_nullTreatment=89;o.RULE_jsonFunction=90;o.RULE_inSumExpr=91;o.RULE_identListArg=92;o.RULE_identList=93;o.RULE_fulltextOptions=94;o.RULE_runtimeFunctionCall=95;o.RULE_geometryFunction=96;o.RULE_timeFunctionParameters=97;o.RULE_fractionalPrecision=98;o.RULE_weightStringLevels=99;o.RULE_weightStringLevelListItem=100;o.RULE_dateTimeTtype=101;o.RULE_trimFunction=102;o.RULE_substringFunction=103;o.RULE_functionCall=104;o.RULE_udfExprList=105;o.RULE_udfExpr=106;o.RULE_unpivotClause=107;o.RULE_variable=108;o.RULE_userVariable=109;o.RULE_systemVariable=110;o.RULE_whenExpression=111;o.RULE_thenExpression=112;o.RULE_elseExpression=113;o.RULE_exprList=114;o.RULE_charset=115;o.RULE_notRule=116;o.RULE_not2Rule=117;o.RULE_interval=118;o.RULE_intervalTimeStamp=119;o.RULE_exprListWithParentheses=120;o.RULE_exprWithParentheses=121;o.RULE_simpleExprWithParentheses=122;o.RULE_orderList=123;o.RULE_orderExpression=124;o.RULE_indexType=125;o.RULE_dataType=126;o.RULE_nchar=127;o.RULE_fieldLength=128;o.RULE_fieldOptions=129;o.RULE_charsetWithOptBinary=130;o.RULE_ascii=131;o.RULE_unicode=132;o.RULE_wsNumCodepoints=133;o.RULE_typeDatetimePrecision=134;o.RULE_charsetName=135;o.RULE_collationName=136;o.RULE_collate=137;o.RULE_charsetClause=138;o.RULE_fieldsClause=139;o.RULE_fieldTerm=140;o.RULE_linesClause=141;o.RULE_lineTerm=142;o.RULE_usePartition=143;o.RULE_columnInternalRefList=144;o.RULE_tableAliasRefList=145;o.RULE_pureIdentifier=146;o.RULE_identifier=147;o.RULE_identifierList=148;o.RULE_identifierListWithParentheses=149;o.RULE_qualifiedIdentifier=150;o.RULE_jsonPathIdentifier=151;o.RULE_dotIdentifier=152;o.RULE_ulong_number=153;o.RULE_real_ulong_number=154;o.RULE_ulonglong_number=155;o.RULE_real_ulonglong_number=156;o.RULE_literal=157;o.RULE_stringList=158;o.RULE_textStringLiteral=159;o.RULE_textString=160;o.RULE_textLiteral=161;o.RULE_numLiteral=162;o.RULE_boolLiteral=163;o.RULE_nullLiteral=164;o.RULE_temporalLiteral=165;o.RULE_floatOptions=166;o.RULE_precision=167;o.RULE_textOrIdentifier=168;o.RULE_parentheses=169;o.RULE_equal=170;o.RULE_varIdentType=171;o.RULE_identifierKeyword=172;var i8=class i8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_query}selectStatement(){return this.getTypedRuleContext(s2,0)}SEMICOLON_SYMBOL(){return this.getToken(o.SEMICOLON_SYMBOL,0)}EOF(){return this.getToken(o.EOF,0)}withClause(){return this.getTypedRuleContext(ms,0)}enterRule(e){e instanceof y&&e.enterQuery(this)}exitRule(e){e instanceof y&&e.exitQuery(this)}};c(i8,"QueryContext");var i2=i8,a8=class a8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_values}expr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(R0):this.getTypedRuleContext(R0,e)};DEFAULT_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.DEFAULT_SYMBOL):this.getToken(o.DEFAULT_SYMBOL,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof y&&e.enterValues(this)}exitRule(e){e instanceof y&&e.exitValues(this)}};c(a8,"ValuesContext");var a2=a8,s8=class s8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_selectStatement}queryExpression(){return this.getTypedRuleContext(wi,0)}lockingClauseList(){return this.getTypedRuleContext(Pi,0)}queryExpressionParens(){return this.getTypedRuleContext(zt,0)}selectStatementWithInto(){return this.getTypedRuleContext(n2,0)}enterRule(e){e instanceof y&&e.enterSelectStatement(this)}exitRule(e){e instanceof y&&e.exitSelectStatement(this)}};c(s8,"SelectStatementContext");var s2=s8,Lp=class Lp extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_selectStatementWithInto}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}selectStatementWithInto(){return this.getTypedRuleContext(Lp,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}queryExpression(){return this.getTypedRuleContext(wi,0)}intoClause(){return this.getTypedRuleContext(fs,0)}lockingClauseList(){return this.getTypedRuleContext(Pi,0)}enterRule(e){e instanceof y&&e.enterSelectStatementWithInto(this)}exitRule(e){e instanceof y&&e.exitSelectStatementWithInto(this)}};c(Lp,"SelectStatementWithIntoContext");var n2=Lp,n8=class n8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_queryExpression}queryExpressionBody(){return this.getTypedRuleContext(o2,0)}queryExpressionParens(){return this.getTypedRuleContext(zt,0)}withClause(){return this.getTypedRuleContext(ms,0)}procedureAnalyseClause(){return this.getTypedRuleContext(h2,0)}orderClause(){return this.getTypedRuleContext(Ui,0)}limitClause(){return this.getTypedRuleContext(d2,0)}enterRule(e){e instanceof y&&e.enterQueryExpression(this)}exitRule(e){e instanceof y&&e.exitQueryExpression(this)}};c(n8,"QueryExpressionContext");var wi=n8,o8=class o8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_queryExpressionBody}queryPrimary=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(ps):this.getTypedRuleContext(ps,e)};queryExpressionParens=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(zt):this.getTypedRuleContext(zt,e)};UNION_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.UNION_SYMBOL):this.getToken(o.UNION_SYMBOL,e)};unionOption=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Cs):this.getTypedRuleContext(Cs,e)};enterRule(e){e instanceof y&&e.enterQueryExpressionBody(this)}exitRule(e){e instanceof y&&e.exitQueryExpressionBody(this)}};c(o8,"QueryExpressionBodyContext");var o2=o8,Ep=class Ep extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_queryExpressionParens}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}queryExpressionParens(){return this.getTypedRuleContext(Ep,0)}queryExpression(){return this.getTypedRuleContext(wi,0)}lockingClauseList(){return this.getTypedRuleContext(Pi,0)}enterRule(e){e instanceof y&&e.enterQueryExpressionParens(this)}exitRule(e){e instanceof y&&e.exitQueryExpressionParens(this)}};c(Ep,"QueryExpressionParensContext");var zt=Ep,l8=class l8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_queryPrimary}querySpecification(){return this.getTypedRuleContext(l2,0)}tableValueConstructor(){return this.getTypedRuleContext(R2,0)}explicitTable(){return this.getTypedRuleContext(g2,0)}enterRule(e){e instanceof y&&e.enterQueryPrimary(this)}exitRule(e){e instanceof y&&e.exitQueryPrimary(this)}};c(l8,"QueryPrimaryContext");var ps=l8,c8=class c8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_querySpecification}SELECT_SYMBOL(){return this.getToken(o.SELECT_SYMBOL,0)}selectItemList(){return this.getTypedRuleContext(C2,0)}selectOption=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(_s):this.getTypedRuleContext(_s,e)};intoClause(){return this.getTypedRuleContext(fs,0)}fromClause(){return this.getTypedRuleContext(Y2,0)}whereClause(){return this.getTypedRuleContext(Fi,0)}unpivotClause=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Us):this.getTypedRuleContext(Us,e)};qualifyClause(){return this.getTypedRuleContext(I2,0)}groupByClause(){return this.getTypedRuleContext(T2,0)}havingClause(){return this.getTypedRuleContext(f2,0)}windowClause(){return this.getTypedRuleContext(S2,0)}enterRule(e){e instanceof y&&e.enterQuerySpecification(this)}exitRule(e){e instanceof y&&e.exitQuerySpecification(this)}};c(c8,"QuerySpecificationContext");var l2=c8,d8=class d8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_subquery}query(){return this.getTypedRuleContext(i2,0)}queryExpressionParens(){return this.getTypedRuleContext(zt,0)}enterRule(e){e instanceof y&&e.enterSubquery(this)}exitRule(e){e instanceof y&&e.exitSubquery(this)}};c(d8,"SubqueryContext");var Zt=d8,p8=class p8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_querySpecOption}ALL_SYMBOL(){return this.getToken(o.ALL_SYMBOL,0)}DISTINCT_SYMBOL(){return this.getToken(o.DISTINCT_SYMBOL,0)}ON_SYMBOL(){return this.getToken(o.ON_SYMBOL,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}qualifiedIdentifier(){return this.getTypedRuleContext($e,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}STRAIGHT_JOIN_SYMBOL(){return this.getToken(o.STRAIGHT_JOIN_SYMBOL,0)}HIGH_PRIORITY_SYMBOL(){return this.getToken(o.HIGH_PRIORITY_SYMBOL,0)}SQL_SMALL_RESULT_SYMBOL(){return this.getToken(o.SQL_SMALL_RESULT_SYMBOL,0)}SQL_BIG_RESULT_SYMBOL(){return this.getToken(o.SQL_BIG_RESULT_SYMBOL,0)}SQL_BUFFER_RESULT_SYMBOL(){return this.getToken(o.SQL_BUFFER_RESULT_SYMBOL,0)}SQL_CALC_FOUND_ROWS_SYMBOL(){return this.getToken(o.SQL_CALC_FOUND_ROWS_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterQuerySpecOption(this)}exitRule(e){e instanceof y&&e.exitQuerySpecOption(this)}};c(p8,"QuerySpecOptionContext");var c2=p8,h8=class h8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_limitClause}LIMIT_SYMBOL(){return this.getToken(o.LIMIT_SYMBOL,0)}limitOptions(){return this.getTypedRuleContext(p2,0)}enterRule(e){e instanceof y&&e.enterLimitClause(this)}exitRule(e){e instanceof y&&e.exitLimitClause(this)}};c(h8,"LimitClauseContext");var d2=h8,f8=class f8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_limitOptions}limitOption=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(hs):this.getTypedRuleContext(hs,e)};COMMA_SYMBOL(){return this.getToken(o.COMMA_SYMBOL,0)}OFFSET_SYMBOL(){return this.getToken(o.OFFSET_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterLimitOptions(this)}exitRule(e){e instanceof y&&e.exitLimitOptions(this)}};c(f8,"LimitOptionsContext");var p2=f8,S8=class S8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_limitOption}identifier(){return this.getTypedRuleContext(Z0,0)}PARAM_MARKER(){return this.getToken(o.PARAM_MARKER,0)}INT_NUMBER(){return this.getToken(o.INT_NUMBER,0)}enterRule(e){e instanceof y&&e.enterLimitOption(this)}exitRule(e){e instanceof y&&e.exitLimitOption(this)}};c(S8,"LimitOptionContext");var hs=S8,O8=class O8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_intoClause}INTO_SYMBOL(){return this.getToken(o.INTO_SYMBOL,0)}OUTFILE_SYMBOL(){return this.getToken(o.OUTFILE_SYMBOL,0)}textStringLiteral(){return this.getTypedRuleContext(Lu,0)}DUMPFILE_SYMBOL(){return this.getToken(o.DUMPFILE_SYMBOL,0)}textOrIdentifier=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(it):this.getTypedRuleContext(it,e)};userVariable=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Wi):this.getTypedRuleContext(Wi,e)};charsetClause(){return this.getTypedRuleContext(No,0)}fieldsClause(){return this.getTypedRuleContext(Co,0)}linesClause(){return this.getTypedRuleContext(Io,0)}COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof y&&e.enterIntoClause(this)}exitRule(e){e instanceof y&&e.exitIntoClause(this)}};c(O8,"IntoClauseContext");var fs=O8,L8=class L8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_procedureAnalyseClause}PROCEDURE_SYMBOL(){return this.getToken(o.PROCEDURE_SYMBOL,0)}ANALYSE_SYMBOL(){return this.getToken(o.ANALYSE_SYMBOL,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}INT_NUMBER=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.INT_NUMBER):this.getToken(o.INT_NUMBER,e)};COMMA_SYMBOL(){return this.getToken(o.COMMA_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterProcedureAnalyseClause(this)}exitRule(e){e instanceof y&&e.exitProcedureAnalyseClause(this)}};c(L8,"ProcedureAnalyseClauseContext");var h2=L8,E8=class E8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_havingClause}HAVING_SYMBOL(){return this.getToken(o.HAVING_SYMBOL,0)}expr(){return this.getTypedRuleContext(R0,0)}enterRule(e){e instanceof y&&e.enterHavingClause(this)}exitRule(e){e instanceof y&&e.exitHavingClause(this)}};c(E8,"HavingClauseContext");var f2=E8,m8=class m8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_windowClause}WINDOW_SYMBOL(){return this.getToken(o.WINDOW_SYMBOL,0)}windowDefinition=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Ss):this.getTypedRuleContext(Ss,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof y&&e.enterWindowClause(this)}exitRule(e){e instanceof y&&e.exitWindowClause(this)}};c(m8,"WindowClauseContext");var S2=m8,B8=class B8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_windowDefinition}identifier(){return this.getTypedRuleContext(Z0,0)}AS_SYMBOL(){return this.getToken(o.AS_SYMBOL,0)}windowSpec(){return this.getTypedRuleContext(Os,0)}enterRule(e){e instanceof y&&e.enterWindowDefinition(this)}exitRule(e){e instanceof y&&e.exitWindowDefinition(this)}};c(B8,"WindowDefinitionContext");var Ss=B8,M8=class M8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_windowSpec}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}windowSpecDetails(){return this.getTypedRuleContext(O2,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterWindowSpec(this)}exitRule(e){e instanceof y&&e.exitWindowSpec(this)}};c(M8,"WindowSpecContext");var Os=M8,T8=class T8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_windowSpecDetails}identifier(){return this.getTypedRuleContext(Z0,0)}PARTITION_SYMBOL(){return this.getToken(o.PARTITION_SYMBOL,0)}BY_SYMBOL(){return this.getToken(o.BY_SYMBOL,0)}orderList(){return this.getTypedRuleContext(Xi,0)}orderClause(){return this.getTypedRuleContext(Ui,0)}windowFrameClause(){return this.getTypedRuleContext(L2,0)}enterRule(e){e instanceof y&&e.enterWindowSpecDetails(this)}exitRule(e){e instanceof y&&e.exitWindowSpecDetails(this)}};c(T8,"WindowSpecDetailsContext");var O2=T8,_8=class _8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_windowFrameClause}windowFrameUnits(){return this.getTypedRuleContext(E2,0)}windowFrameExtent(){return this.getTypedRuleContext(m2,0)}windowFrameExclusion(){return this.getTypedRuleContext(M2,0)}enterRule(e){e instanceof y&&e.enterWindowFrameClause(this)}exitRule(e){e instanceof y&&e.exitWindowFrameClause(this)}};c(_8,"WindowFrameClauseContext");var L2=_8,A8=class A8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_windowFrameUnits}ROWS_SYMBOL(){return this.getToken(o.ROWS_SYMBOL,0)}RANGE_SYMBOL(){return this.getToken(o.RANGE_SYMBOL,0)}GROUPS_SYMBOL(){return this.getToken(o.GROUPS_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterWindowFrameUnits(this)}exitRule(e){e instanceof y&&e.exitWindowFrameUnits(this)}};c(A8,"WindowFrameUnitsContext");var E2=A8,Y8=class Y8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_windowFrameExtent}windowFrameStart(){return this.getTypedRuleContext(Ls,0)}windowFrameBetween(){return this.getTypedRuleContext(B2,0)}enterRule(e){e instanceof y&&e.enterWindowFrameExtent(this)}exitRule(e){e instanceof y&&e.exitWindowFrameExtent(this)}};c(Y8,"WindowFrameExtentContext");var m2=Y8,R8=class R8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_windowFrameStart}UNBOUNDED_SYMBOL(){return this.getToken(o.UNBOUNDED_SYMBOL,0)}PRECEDING_SYMBOL(){return this.getToken(o.PRECEDING_SYMBOL,0)}ulonglong_number(){return this.getTypedRuleContext($i,0)}PARAM_MARKER(){return this.getToken(o.PARAM_MARKER,0)}INTERVAL_SYMBOL(){return this.getToken(o.INTERVAL_SYMBOL,0)}expr(){return this.getTypedRuleContext(R0,0)}interval(){return this.getTypedRuleContext(er,0)}CURRENT_SYMBOL(){return this.getToken(o.CURRENT_SYMBOL,0)}ROW_SYMBOL(){return this.getToken(o.ROW_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterWindowFrameStart(this)}exitRule(e){e instanceof y&&e.exitWindowFrameStart(this)}};c(R8,"WindowFrameStartContext");var Ls=R8,g8=class g8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_windowFrameBetween}BETWEEN_SYMBOL(){return this.getToken(o.BETWEEN_SYMBOL,0)}windowFrameBound=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Es):this.getTypedRuleContext(Es,e)};AND_SYMBOL(){return this.getToken(o.AND_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterWindowFrameBetween(this)}exitRule(e){e instanceof y&&e.exitWindowFrameBetween(this)}};c(g8,"WindowFrameBetweenContext");var B2=g8,y8=class y8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_windowFrameBound}windowFrameStart(){return this.getTypedRuleContext(Ls,0)}UNBOUNDED_SYMBOL(){return this.getToken(o.UNBOUNDED_SYMBOL,0)}FOLLOWING_SYMBOL(){return this.getToken(o.FOLLOWING_SYMBOL,0)}ulonglong_number(){return this.getTypedRuleContext($i,0)}PARAM_MARKER(){return this.getToken(o.PARAM_MARKER,0)}INTERVAL_SYMBOL(){return this.getToken(o.INTERVAL_SYMBOL,0)}expr(){return this.getTypedRuleContext(R0,0)}interval(){return this.getTypedRuleContext(er,0)}enterRule(e){e instanceof y&&e.enterWindowFrameBound(this)}exitRule(e){e instanceof y&&e.exitWindowFrameBound(this)}};c(y8,"WindowFrameBoundContext");var Es=y8,N8=class N8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_windowFrameExclusion}EXCLUDE_SYMBOL(){return this.getToken(o.EXCLUDE_SYMBOL,0)}CURRENT_SYMBOL(){return this.getToken(o.CURRENT_SYMBOL,0)}ROW_SYMBOL(){return this.getToken(o.ROW_SYMBOL,0)}GROUP_SYMBOL(){return this.getToken(o.GROUP_SYMBOL,0)}TIES_SYMBOL(){return this.getToken(o.TIES_SYMBOL,0)}NO_SYMBOL(){return this.getToken(o.NO_SYMBOL,0)}OTHERS_SYMBOL(){return this.getToken(o.OTHERS_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterWindowFrameExclusion(this)}exitRule(e){e instanceof y&&e.exitWindowFrameExclusion(this)}};c(N8,"WindowFrameExclusionContext");var M2=N8,C8=class C8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_withClause}WITH_SYMBOL(){return this.getToken(o.WITH_SYMBOL,0)}commonTableExpression=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Bs):this.getTypedRuleContext(Bs,e)};RECURSIVE_SYMBOL(){return this.getToken(o.RECURSIVE_SYMBOL,0)}COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof y&&e.enterWithClause(this)}exitRule(e){e instanceof y&&e.exitWithClause(this)}};c(C8,"WithClauseContext");var ms=C8,I8=class I8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_commonTableExpression}identifier(){return this.getTypedRuleContext(Z0,0)}AS_SYMBOL(){return this.getToken(o.AS_SYMBOL,0)}subquery(){return this.getTypedRuleContext(Zt,0)}columnInternalRefList(){return this.getTypedRuleContext(Qs,0)}enterRule(e){e instanceof y&&e.enterCommonTableExpression(this)}exitRule(e){e instanceof y&&e.exitCommonTableExpression(this)}};c(I8,"CommonTableExpressionContext");var Bs=I8,b8=class b8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_groupByClause}GROUP_SYMBOL(){return this.getToken(o.GROUP_SYMBOL,0)}BY_SYMBOL(){return this.getToken(o.BY_SYMBOL,0)}orderList(){return this.getTypedRuleContext(Xi,0)}olapOption(){return this.getTypedRuleContext(_2,0)}enterRule(e){e instanceof y&&e.enterGroupByClause(this)}exitRule(e){e instanceof y&&e.exitGroupByClause(this)}};c(b8,"GroupByClauseContext");var T2=b8,x8=class x8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_olapOption}WITH_SYMBOL(){return this.getToken(o.WITH_SYMBOL,0)}ROLLUP_SYMBOL(){return this.getToken(o.ROLLUP_SYMBOL,0)}CUBE_SYMBOL(){return this.getToken(o.CUBE_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterOlapOption(this)}exitRule(e){e instanceof y&&e.exitOlapOption(this)}};c(x8,"OlapOptionContext");var _2=x8,v8=class v8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_orderClause}ORDER_SYMBOL(){return this.getToken(o.ORDER_SYMBOL,0)}BY_SYMBOL(){return this.getToken(o.BY_SYMBOL,0)}orderList(){return this.getTypedRuleContext(Xi,0)}enterRule(e){e instanceof y&&e.enterOrderClause(this)}exitRule(e){e instanceof y&&e.exitOrderClause(this)}};c(v8,"OrderClauseContext");var Ui=v8,D8=class D8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_direction}ASC_SYMBOL(){return this.getToken(o.ASC_SYMBOL,0)}DESC_SYMBOL(){return this.getToken(o.DESC_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterDirection(this)}exitRule(e){e instanceof y&&e.exitDirection(this)}};c(D8,"DirectionContext");var A2=D8,w8=class w8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_fromClause}FROM_SYMBOL(){return this.getToken(o.FROM_SYMBOL,0)}DUAL_SYMBOL(){return this.getToken(o.DUAL_SYMBOL,0)}tableReferenceList(){return this.getTypedRuleContext(Ms,0)}enterRule(e){e instanceof y&&e.enterFromClause(this)}exitRule(e){e instanceof y&&e.exitFromClause(this)}};c(w8,"FromClauseContext");var Y2=w8,U8=class U8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_tableReferenceList}tableReference=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Hi):this.getTypedRuleContext(Hi,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof y&&e.enterTableReferenceList(this)}exitRule(e){e instanceof y&&e.exitTableReferenceList(this)}};c(U8,"TableReferenceListContext");var Ms=U8,P8=class P8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_tableValueConstructor}VALUES_SYMBOL(){return this.getToken(o.VALUES_SYMBOL,0)}rowValueExplicit=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Ts):this.getTypedRuleContext(Ts,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof y&&e.enterTableValueConstructor(this)}exitRule(e){e instanceof y&&e.exitTableValueConstructor(this)}};c(P8,"TableValueConstructorContext");var R2=P8,k8=class k8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_explicitTable}TABLE_SYMBOL(){return this.getToken(o.TABLE_SYMBOL,0)}qualifiedIdentifier(){return this.getTypedRuleContext($e,0)}enterRule(e){e instanceof y&&e.enterExplicitTable(this)}exitRule(e){e instanceof y&&e.exitExplicitTable(this)}};c(k8,"ExplicitTableContext");var g2=k8,F8=class F8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_rowValueExplicit}ROW_SYMBOL(){return this.getToken(o.ROW_SYMBOL,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}values(){return this.getTypedRuleContext(a2,0)}enterRule(e){e instanceof y&&e.enterRowValueExplicit(this)}exitRule(e){e instanceof y&&e.exitRowValueExplicit(this)}};c(F8,"RowValueExplicitContext");var Ts=F8,H8=class H8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_selectOption}querySpecOption(){return this.getTypedRuleContext(c2,0)}SQL_NO_CACHE_SYMBOL(){return this.getToken(o.SQL_NO_CACHE_SYMBOL,0)}SQL_CACHE_SYMBOL(){return this.getToken(o.SQL_CACHE_SYMBOL,0)}MAX_STATEMENT_TIME_SYMBOL(){return this.getToken(o.MAX_STATEMENT_TIME_SYMBOL,0)}EQUAL_OPERATOR(){return this.getToken(o.EQUAL_OPERATOR,0)}real_ulong_number(){return this.getTypedRuleContext(ur,0)}enterRule(e){e instanceof y&&e.enterSelectOption(this)}exitRule(e){e instanceof y&&e.exitSelectOption(this)}};c(H8,"SelectOptionContext");var _s=H8,V8=class V8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_lockingClauseList}lockingClause=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(As):this.getTypedRuleContext(As,e)};enterRule(e){e instanceof y&&e.enterLockingClauseList(this)}exitRule(e){e instanceof y&&e.exitLockingClauseList(this)}};c(V8,"LockingClauseListContext");var Pi=V8,G8=class G8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_lockingClause}FOR_SYMBOL(){return this.getToken(o.FOR_SYMBOL,0)}lockStrengh(){return this.getTypedRuleContext(y2,0)}OF_SYMBOL(){return this.getToken(o.OF_SYMBOL,0)}tableAliasRefList(){return this.getTypedRuleContext(xo,0)}lockedRowAction(){return this.getTypedRuleContext(N2,0)}LOCK_SYMBOL(){return this.getToken(o.LOCK_SYMBOL,0)}IN_SYMBOL(){return this.getToken(o.IN_SYMBOL,0)}SHARE_SYMBOL(){return this.getToken(o.SHARE_SYMBOL,0)}MODE_SYMBOL(){return this.getToken(o.MODE_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterLockingClause(this)}exitRule(e){e instanceof y&&e.exitLockingClause(this)}};c(G8,"LockingClauseContext");var As=G8,q8=class q8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_lockStrengh}UPDATE_SYMBOL(){return this.getToken(o.UPDATE_SYMBOL,0)}SHARE_SYMBOL(){return this.getToken(o.SHARE_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterLockStrengh(this)}exitRule(e){e instanceof y&&e.exitLockStrengh(this)}};c(q8,"LockStrenghContext");var y2=q8,K8=class K8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_lockedRowAction}SKIP_SYMBOL(){return this.getToken(o.SKIP_SYMBOL,0)}LOCKED_SYMBOL(){return this.getToken(o.LOCKED_SYMBOL,0)}NOWAIT_SYMBOL(){return this.getToken(o.NOWAIT_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterLockedRowAction(this)}exitRule(e){e instanceof y&&e.exitLockedRowAction(this)}};c(K8,"LockedRowActionContext");var N2=K8,W8=class W8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_selectItemList}selectItem=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(ki):this.getTypedRuleContext(ki,e)};MULT_OPERATOR(){return this.getToken(o.MULT_OPERATOR,0)}COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof y&&e.enterSelectItemList(this)}exitRule(e){e instanceof y&&e.exitSelectItemList(this)}};c(W8,"SelectItemListContext");var C2=W8,j8=class j8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_selectItem}qualifiedIdentifier(){return this.getTypedRuleContext($e,0)}jsonPathIdentifier(){return this.getTypedRuleContext($s,0)}selectAlias(){return this.getTypedRuleContext(Ys,0)}expr(){return this.getTypedRuleContext(R0,0)}enterRule(e){e instanceof y&&e.enterSelectItem(this)}exitRule(e){e instanceof y&&e.exitSelectItem(this)}};c(j8,"SelectItemContext");var ki=j8,X8=class X8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_selectAlias}identifier(){return this.getTypedRuleContext(Z0,0)}textStringLiteral(){return this.getTypedRuleContext(Lu,0)}AS_SYMBOL(){return this.getToken(o.AS_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterSelectAlias(this)}exitRule(e){e instanceof y&&e.exitSelectAlias(this)}};c(X8,"SelectAliasContext");var Ys=X8,Q8=class Q8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_whereClause}WHERE_SYMBOL(){return this.getToken(o.WHERE_SYMBOL,0)}expr(){return this.getTypedRuleContext(R0,0)}enterRule(e){e instanceof y&&e.enterWhereClause(this)}exitRule(e){e instanceof y&&e.exitWhereClause(this)}};c(Q8,"WhereClauseContext");var Fi=Q8,J8=class J8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_qualifyClause}QUALIFY_SYMBOL(){return this.getToken(o.QUALIFY_SYMBOL,0)}expr(){return this.getTypedRuleContext(R0,0)}enterRule(e){e instanceof y&&e.enterQualifyClause(this)}exitRule(e){e instanceof y&&e.exitQualifyClause(this)}};c(J8,"QualifyClauseContext");var I2=J8,$8=class $8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_tableReference}tableFactor(){return this.getTypedRuleContext(Vi,0)}OPEN_CURLY_SYMBOL(){return this.getToken(o.OPEN_CURLY_SYMBOL,0)}escapedTableReference(){return this.getTypedRuleContext(b2,0)}CLOSE_CURLY_SYMBOL(){return this.getToken(o.CLOSE_CURLY_SYMBOL,0)}joinedTable=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Xr):this.getTypedRuleContext(Xr,e)};identifier(){return this.getTypedRuleContext(Z0,0)}OJ_SYMBOL(){return this.getToken(o.OJ_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterTableReference(this)}exitRule(e){e instanceof y&&e.exitTableReference(this)}};c($8,"TableReferenceContext");var Hi=$8,z8=class z8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_escapedTableReference}tableFactor(){return this.getTypedRuleContext(Vi,0)}joinedTable=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Xr):this.getTypedRuleContext(Xr,e)};enterRule(e){e instanceof y&&e.enterEscapedTableReference(this)}exitRule(e){e instanceof y&&e.exitEscapedTableReference(this)}};c(z8,"EscapedTableReferenceContext");var b2=z8,Z8=class Z8 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_joinedTable}innerJoinType(){return this.getTypedRuleContext(v2,0)}tableReference(){return this.getTypedRuleContext(Hi,0)}ON_SYMBOL(){return this.getToken(o.ON_SYMBOL,0)}expr(){return this.getTypedRuleContext(R0,0)}USING_SYMBOL(){return this.getToken(o.USING_SYMBOL,0)}identifierListWithParentheses(){return this.getTypedRuleContext(Ji,0)}outerJoinType(){return this.getTypedRuleContext(D2,0)}naturalJoinType(){return this.getTypedRuleContext(x2,0)}tableFactor(){return this.getTypedRuleContext(Vi,0)}enterRule(e){e instanceof y&&e.enterJoinedTable(this)}exitRule(e){e instanceof y&&e.exitJoinedTable(this)}};c(Z8,"JoinedTableContext");var Xr=Z8,eL=class eL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_naturalJoinType}NATURAL_SYMBOL(){return this.getToken(o.NATURAL_SYMBOL,0)}JOIN_SYMBOL(){return this.getToken(o.JOIN_SYMBOL,0)}INNER_SYMBOL(){return this.getToken(o.INNER_SYMBOL,0)}LEFT_SYMBOL(){return this.getToken(o.LEFT_SYMBOL,0)}RIGHT_SYMBOL(){return this.getToken(o.RIGHT_SYMBOL,0)}OUTER_SYMBOL(){return this.getToken(o.OUTER_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterNaturalJoinType(this)}exitRule(e){e instanceof y&&e.exitNaturalJoinType(this)}};c(eL,"NaturalJoinTypeContext");var x2=eL,uL=class uL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_innerJoinType}JOIN_SYMBOL(){return this.getToken(o.JOIN_SYMBOL,0)}INNER_SYMBOL(){return this.getToken(o.INNER_SYMBOL,0)}CROSS_SYMBOL(){return this.getToken(o.CROSS_SYMBOL,0)}STRAIGHT_JOIN_SYMBOL(){return this.getToken(o.STRAIGHT_JOIN_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterInnerJoinType(this)}exitRule(e){e instanceof y&&e.exitInnerJoinType(this)}};c(uL,"InnerJoinTypeContext");var v2=uL,tL=class tL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_outerJoinType}JOIN_SYMBOL(){return this.getToken(o.JOIN_SYMBOL,0)}LEFT_SYMBOL(){return this.getToken(o.LEFT_SYMBOL,0)}RIGHT_SYMBOL(){return this.getToken(o.RIGHT_SYMBOL,0)}OUTER_SYMBOL(){return this.getToken(o.OUTER_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterOuterJoinType(this)}exitRule(e){e instanceof y&&e.exitOuterJoinType(this)}};c(tL,"OuterJoinTypeContext");var D2=tL,rL=class rL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_tableFactor}singleTable(){return this.getTypedRuleContext(Rs,0)}singleTableParens(){return this.getTypedRuleContext(w2,0)}derivedTable(){return this.getTypedRuleContext(U2,0)}tableReferenceListParens(){return this.getTypedRuleContext(P2,0)}tableFunction(){return this.getTypedRuleContext(k2,0)}enterRule(e){e instanceof y&&e.enterTableFactor(this)}exitRule(e){e instanceof y&&e.exitTableFactor(this)}};c(rL,"TableFactorContext");var Vi=rL,iL=class iL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_singleTable}qualifiedIdentifier(){return this.getTypedRuleContext($e,0)}usePartition(){return this.getTypedRuleContext(bo,0)}tableAlias(){return this.getTypedRuleContext(Gi,0)}indexHintList(){return this.getTypedRuleContext(G2,0)}enterRule(e){e instanceof y&&e.enterSingleTable(this)}exitRule(e){e instanceof y&&e.exitSingleTable(this)}};c(iL,"SingleTableContext");var Rs=iL,mp=class mp extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_singleTableParens}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}singleTable(){return this.getTypedRuleContext(Rs,0)}singleTableParens(){return this.getTypedRuleContext(mp,0)}enterRule(e){e instanceof y&&e.enterSingleTableParens(this)}exitRule(e){e instanceof y&&e.exitSingleTableParens(this)}};c(mp,"SingleTableParensContext");var w2=mp,aL=class aL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_derivedTable}subquery(){return this.getTypedRuleContext(Zt,0)}tableAlias(){return this.getTypedRuleContext(Gi,0)}columnInternalRefList(){return this.getTypedRuleContext(Qs,0)}LATERAL_SYMBOL(){return this.getToken(o.LATERAL_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterDerivedTable(this)}exitRule(e){e instanceof y&&e.exitDerivedTable(this)}};c(aL,"DerivedTableContext");var U2=aL,Bp=class Bp extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_tableReferenceListParens}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}tableReferenceList(){return this.getTypedRuleContext(Ms,0)}tableReferenceListParens(){return this.getTypedRuleContext(Bp,0)}enterRule(e){e instanceof y&&e.enterTableReferenceListParens(this)}exitRule(e){e instanceof y&&e.exitTableReferenceListParens(this)}};c(Bp,"TableReferenceListParensContext");var P2=Bp,sL=class sL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_tableFunction}JSON_TABLE_SYMBOL(){return this.getToken(o.JSON_TABLE_SYMBOL,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}expr(){return this.getTypedRuleContext(R0,0)}COMMA_SYMBOL(){return this.getToken(o.COMMA_SYMBOL,0)}textStringLiteral(){return this.getTypedRuleContext(Lu,0)}columnsClause(){return this.getTypedRuleContext(gs,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}tableAlias(){return this.getTypedRuleContext(Gi,0)}enterRule(e){e instanceof y&&e.enterTableFunction(this)}exitRule(e){e instanceof y&&e.exitTableFunction(this)}};c(sL,"TableFunctionContext");var k2=sL,nL=class nL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_columnsClause}COLUMNS_SYMBOL(){return this.getToken(o.COLUMNS_SYMBOL,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}jtColumn=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(ys):this.getTypedRuleContext(ys,e)};CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof y&&e.enterColumnsClause(this)}exitRule(e){e instanceof y&&e.exitColumnsClause(this)}};c(nL,"ColumnsClauseContext");var gs=nL,oL=class oL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_jtColumn}identifier(){return this.getTypedRuleContext(Z0,0)}FOR_SYMBOL(){return this.getToken(o.FOR_SYMBOL,0)}ORDINALITY_SYMBOL(){return this.getToken(o.ORDINALITY_SYMBOL,0)}dataType(){return this.getTypedRuleContext(Qi,0)}PATH_SYMBOL(){return this.getToken(o.PATH_SYMBOL,0)}textStringLiteral(){return this.getTypedRuleContext(Lu,0)}collate(){return this.getTypedRuleContext(yo,0)}EXISTS_SYMBOL(){return this.getToken(o.EXISTS_SYMBOL,0)}onEmptyOrError(){return this.getTypedRuleContext(F2,0)}NESTED_SYMBOL(){return this.getToken(o.NESTED_SYMBOL,0)}columnsClause(){return this.getTypedRuleContext(gs,0)}enterRule(e){e instanceof y&&e.enterJtColumn(this)}exitRule(e){e instanceof y&&e.exitJtColumn(this)}};c(oL,"JtColumnContext");var ys=oL,lL=class lL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_onEmptyOrError}onEmpty(){return this.getTypedRuleContext(H2,0)}onError(){return this.getTypedRuleContext(V2,0)}enterRule(e){e instanceof y&&e.enterOnEmptyOrError(this)}exitRule(e){e instanceof y&&e.exitOnEmptyOrError(this)}};c(lL,"OnEmptyOrErrorContext");var F2=lL,cL=class cL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_onEmpty}jtOnResponse(){return this.getTypedRuleContext(Ns,0)}ON_SYMBOL(){return this.getToken(o.ON_SYMBOL,0)}EMPTY_SYMBOL(){return this.getToken(o.EMPTY_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterOnEmpty(this)}exitRule(e){e instanceof y&&e.exitOnEmpty(this)}};c(cL,"OnEmptyContext");var H2=cL,dL=class dL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_onError}jtOnResponse(){return this.getTypedRuleContext(Ns,0)}ON_SYMBOL(){return this.getToken(o.ON_SYMBOL,0)}ERROR_SYMBOL(){return this.getToken(o.ERROR_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterOnError(this)}exitRule(e){e instanceof y&&e.exitOnError(this)}};c(dL,"OnErrorContext");var V2=dL,pL=class pL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_jtOnResponse}ERROR_SYMBOL(){return this.getToken(o.ERROR_SYMBOL,0)}NULL_SYMBOL(){return this.getToken(o.NULL_SYMBOL,0)}DEFAULT_SYMBOL(){return this.getToken(o.DEFAULT_SYMBOL,0)}textStringLiteral(){return this.getTypedRuleContext(Lu,0)}enterRule(e){e instanceof y&&e.enterJtOnResponse(this)}exitRule(e){e instanceof y&&e.exitJtOnResponse(this)}};c(pL,"JtOnResponseContext");var Ns=pL,hL=class hL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_unionOption}DISTINCT_SYMBOL(){return this.getToken(o.DISTINCT_SYMBOL,0)}ALL_SYMBOL(){return this.getToken(o.ALL_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterUnionOption(this)}exitRule(e){e instanceof y&&e.exitUnionOption(this)}};c(hL,"UnionOptionContext");var Cs=hL,fL=class fL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_tableAlias}identifier(){return this.getTypedRuleContext(Z0,0)}AS_SYMBOL(){return this.getToken(o.AS_SYMBOL,0)}EQUAL_OPERATOR(){return this.getToken(o.EQUAL_OPERATOR,0)}enterRule(e){e instanceof y&&e.enterTableAlias(this)}exitRule(e){e instanceof y&&e.exitTableAlias(this)}};c(fL,"TableAliasContext");var Gi=fL,SL=class SL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_indexHintList}indexHint=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Is):this.getTypedRuleContext(Is,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof y&&e.enterIndexHintList(this)}exitRule(e){e instanceof y&&e.exitIndexHintList(this)}};c(SL,"IndexHintListContext");var G2=SL,OL=class OL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_indexHint}indexHintType(){return this.getTypedRuleContext(q2,0)}keyOrIndex(){return this.getTypedRuleContext(K2,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}indexList(){return this.getTypedRuleContext(j2,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}indexHintClause(){return this.getTypedRuleContext(W2,0)}USE_SYMBOL(){return this.getToken(o.USE_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterIndexHint(this)}exitRule(e){e instanceof y&&e.exitIndexHint(this)}};c(OL,"IndexHintContext");var Is=OL,LL=class LL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_indexHintType}FORCE_SYMBOL(){return this.getToken(o.FORCE_SYMBOL,0)}IGNORE_SYMBOL(){return this.getToken(o.IGNORE_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterIndexHintType(this)}exitRule(e){e instanceof y&&e.exitIndexHintType(this)}};c(LL,"IndexHintTypeContext");var q2=LL,EL=class EL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_keyOrIndex}KEY_SYMBOL(){return this.getToken(o.KEY_SYMBOL,0)}INDEX_SYMBOL(){return this.getToken(o.INDEX_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterKeyOrIndex(this)}exitRule(e){e instanceof y&&e.exitKeyOrIndex(this)}};c(EL,"KeyOrIndexContext");var K2=EL,mL=class mL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_indexHintClause}FOR_SYMBOL(){return this.getToken(o.FOR_SYMBOL,0)}JOIN_SYMBOL(){return this.getToken(o.JOIN_SYMBOL,0)}ORDER_SYMBOL(){return this.getToken(o.ORDER_SYMBOL,0)}BY_SYMBOL(){return this.getToken(o.BY_SYMBOL,0)}GROUP_SYMBOL(){return this.getToken(o.GROUP_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterIndexHintClause(this)}exitRule(e){e instanceof y&&e.exitIndexHintClause(this)}};c(mL,"IndexHintClauseContext");var W2=mL,BL=class BL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_indexList}indexListElement=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(bs):this.getTypedRuleContext(bs,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof y&&e.enterIndexList(this)}exitRule(e){e instanceof y&&e.exitIndexList(this)}};c(BL,"IndexListContext");var j2=BL,ML=class ML extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_indexListElement}identifier(){return this.getTypedRuleContext(Z0,0)}PRIMARY_SYMBOL(){return this.getToken(o.PRIMARY_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterIndexListElement(this)}exitRule(e){e instanceof y&&e.exitIndexListElement(this)}};c(ML,"IndexListElementContext");var bs=ML,u2=class u2 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_expr}boolPri(){return this.getTypedRuleContext(jr,0)}IS_SYMBOL(){return this.getToken(o.IS_SYMBOL,0)}TRUE_SYMBOL(){return this.getToken(o.TRUE_SYMBOL,0)}FALSE_SYMBOL(){return this.getToken(o.FALSE_SYMBOL,0)}UNKNOWN_SYMBOL(){return this.getToken(o.UNKNOWN_SYMBOL,0)}notRule(){return this.getTypedRuleContext(ji,0)}NOT_SYMBOL(){return this.getToken(o.NOT_SYMBOL,0)}expr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(u2):this.getTypedRuleContext(u2,e)};AND_SYMBOL(){return this.getToken(o.AND_SYMBOL,0)}LOGICAL_AND_OPERATOR(){return this.getToken(o.LOGICAL_AND_OPERATOR,0)}XOR_SYMBOL(){return this.getToken(o.XOR_SYMBOL,0)}OR_SYMBOL(){return this.getToken(o.OR_SYMBOL,0)}LOGICAL_OR_OPERATOR(){return this.getToken(o.LOGICAL_OR_OPERATOR,0)}enterRule(e){e instanceof y&&e.enterExpr(this)}exitRule(e){e instanceof y&&e.exitExpr(this)}};c(u2,"ExprContext");var R0=u2,Mp=class Mp extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_boolPri}predicate(){return this.getTypedRuleContext(xs,0)}boolPri(){return this.getTypedRuleContext(Mp,0)}IS_SYMBOL(){return this.getToken(o.IS_SYMBOL,0)}NULL_SYMBOL(){return this.getToken(o.NULL_SYMBOL,0)}notRule(){return this.getTypedRuleContext(ji,0)}compOp(){return this.getTypedRuleContext(X2,0)}subquery(){return this.getTypedRuleContext(Zt,0)}ALL_SYMBOL(){return this.getToken(o.ALL_SYMBOL,0)}ANY_SYMBOL(){return this.getToken(o.ANY_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterBoolPri(this)}exitRule(e){e instanceof y&&e.exitBoolPri(this)}};c(Mp,"BoolPriContext");var jr=Mp,TL=class TL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_compOp}EQUAL_OPERATOR(){return this.getToken(o.EQUAL_OPERATOR,0)}NULL_SAFE_EQUAL_OPERATOR(){return this.getToken(o.NULL_SAFE_EQUAL_OPERATOR,0)}GREATER_OR_EQUAL_OPERATOR(){return this.getToken(o.GREATER_OR_EQUAL_OPERATOR,0)}GREATER_THAN_OPERATOR(){return this.getToken(o.GREATER_THAN_OPERATOR,0)}LESS_OR_EQUAL_OPERATOR(){return this.getToken(o.LESS_OR_EQUAL_OPERATOR,0)}LESS_THAN_OPERATOR(){return this.getToken(o.LESS_THAN_OPERATOR,0)}NOT_EQUAL_OPERATOR(){return this.getToken(o.NOT_EQUAL_OPERATOR,0)}enterRule(e){e instanceof y&&e.enterCompOp(this)}exitRule(e){e instanceof y&&e.exitCompOp(this)}};c(TL,"CompOpContext");var X2=TL,_L=class _L extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_predicate}bitExpr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(pu):this.getTypedRuleContext(pu,e)};predicateOperations(){return this.getTypedRuleContext(Q2,0)}MEMBER_SYMBOL(){return this.getToken(o.MEMBER_SYMBOL,0)}simpleExprWithParentheses(){return this.getTypedRuleContext(qs,0)}SOUNDS_SYMBOL(){return this.getToken(o.SOUNDS_SYMBOL,0)}LIKE_SYMBOL(){return this.getToken(o.LIKE_SYMBOL,0)}nullTreatment(){return this.getTypedRuleContext(vs,0)}notRule(){return this.getTypedRuleContext(ji,0)}OF_SYMBOL(){return this.getToken(o.OF_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterPredicate(this)}exitRule(e){e instanceof y&&e.exitPredicate(this)}};c(_L,"PredicateContext");var xs=_L,AL=class AL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_predicateOperations}IN_SYMBOL(){return this.getToken(o.IN_SYMBOL,0)}subquery(){return this.getTypedRuleContext(Zt,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}exprList(){return this.getTypedRuleContext(Vu,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}BETWEEN_SYMBOL(){return this.getToken(o.BETWEEN_SYMBOL,0)}bitExpr(){return this.getTypedRuleContext(pu,0)}AND_SYMBOL(){return this.getToken(o.AND_SYMBOL,0)}predicate(){return this.getTypedRuleContext(xs,0)}LIKE_SYMBOL(){return this.getToken(o.LIKE_SYMBOL,0)}simpleExpr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Hu):this.getTypedRuleContext(Hu,e)};ESCAPE_SYMBOL(){return this.getToken(o.ESCAPE_SYMBOL,0)}REGEXP_SYMBOL(){return this.getToken(o.REGEXP_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterPredicateOperations(this)}exitRule(e){e instanceof y&&e.exitPredicateOperations(this)}};c(AL,"PredicateOperationsContext");var Q2=AL,t2=class t2 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_bitExpr}simpleExpr(){return this.getTypedRuleContext(Hu,0)}bitExpr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(t2):this.getTypedRuleContext(t2,e)};BITWISE_XOR_OPERATOR(){return this.getToken(o.BITWISE_XOR_OPERATOR,0)}MULT_OPERATOR(){return this.getToken(o.MULT_OPERATOR,0)}DIV_OPERATOR(){return this.getToken(o.DIV_OPERATOR,0)}MOD_OPERATOR(){return this.getToken(o.MOD_OPERATOR,0)}DIV_SYMBOL(){return this.getToken(o.DIV_SYMBOL,0)}MOD_SYMBOL(){return this.getToken(o.MOD_SYMBOL,0)}PLUS_OPERATOR(){return this.getToken(o.PLUS_OPERATOR,0)}MINUS_OPERATOR(){return this.getToken(o.MINUS_OPERATOR,0)}SHIFT_LEFT_OPERATOR(){return this.getToken(o.SHIFT_LEFT_OPERATOR,0)}SHIFT_RIGHT_OPERATOR(){return this.getToken(o.SHIFT_RIGHT_OPERATOR,0)}BITWISE_AND_OPERATOR(){return this.getToken(o.BITWISE_AND_OPERATOR,0)}BITWISE_OR_OPERATOR(){return this.getToken(o.BITWISE_OR_OPERATOR,0)}INTERVAL_SYMBOL(){return this.getToken(o.INTERVAL_SYMBOL,0)}SINGLE_QUOTED_TEXT(){return this.getToken(o.SINGLE_QUOTED_TEXT,0)}expr(){return this.getTypedRuleContext(R0,0)}interval(){return this.getTypedRuleContext(er,0)}enterRule(e){e instanceof y&&e.enterBitExpr(this)}exitRule(e){e instanceof y&&e.exitBitExpr(this)}};c(t2,"BitExprContext");var pu=t2,r2=class r2 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_simpleExpr}variable(){return this.getTypedRuleContext(Oo,0)}equal(){return this.getTypedRuleContext(qo,0)}expr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(R0):this.getTypedRuleContext(R0,e)};qualifiedIdentifier(){return this.getTypedRuleContext($e,0)}jsonOperator(){return this.getTypedRuleContext(J2,0)}runtimeFunctionCall(){return this.getTypedRuleContext(ao,0)}functionCall(){return this.getTypedRuleContext(fo,0)}literal(){return this.getTypedRuleContext(Uo,0)}PARAM_MARKER(){return this.getToken(o.PARAM_MARKER,0)}sumExpr(){return this.getTypedRuleContext($2,0)}groupingOperation(){return this.getTypedRuleContext(z2,0)}windowFunctionCall(){return this.getTypedRuleContext(Z2,0)}simpleExpr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(r2):this.getTypedRuleContext(r2,e)};PLUS_OPERATOR(){return this.getToken(o.PLUS_OPERATOR,0)}MINUS_OPERATOR(){return this.getToken(o.MINUS_OPERATOR,0)}BITWISE_NOT_OPERATOR(){return this.getToken(o.BITWISE_NOT_OPERATOR,0)}not2Rule(){return this.getTypedRuleContext(mo,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}exprList(){return this.getTypedRuleContext(Vu,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}ROW_SYMBOL(){return this.getToken(o.ROW_SYMBOL,0)}subquery(){return this.getTypedRuleContext(Zt,0)}EXISTS_SYMBOL(){return this.getToken(o.EXISTS_SYMBOL,0)}OPEN_CURLY_SYMBOL(){return this.getToken(o.OPEN_CURLY_SYMBOL,0)}identifier(){return this.getTypedRuleContext(Z0,0)}CLOSE_CURLY_SYMBOL(){return this.getToken(o.CLOSE_CURLY_SYMBOL,0)}MATCH_SYMBOL(){return this.getToken(o.MATCH_SYMBOL,0)}identListArg(){return this.getTypedRuleContext(to,0)}AGAINST_SYMBOL(){return this.getToken(o.AGAINST_SYMBOL,0)}bitExpr(){return this.getTypedRuleContext(pu,0)}fulltextOptions(){return this.getTypedRuleContext(io,0)}BINARY_SYMBOL(){return this.getToken(o.BINARY_SYMBOL,0)}CAST_SYMBOL(){return this.getToken(o.CAST_SYMBOL,0)}AS_SYMBOL(){return this.getToken(o.AS_SYMBOL,0)}dataType(){return this.getTypedRuleContext(Qi,0)}ARRAY_SYMBOL(){return this.getToken(o.ARRAY_SYMBOL,0)}CASE_SYMBOL(){return this.getToken(o.CASE_SYMBOL,0)}END_SYMBOL(){return this.getToken(o.END_SYMBOL,0)}whenExpression=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Ps):this.getTypedRuleContext(Ps,e)};thenExpression=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(ks):this.getTypedRuleContext(ks,e)};elseExpression(){return this.getTypedRuleContext(Eo,0)}CONVERT_SYMBOL(){return this.getToken(o.CONVERT_SYMBOL,0)}COMMA_SYMBOL(){return this.getToken(o.COMMA_SYMBOL,0)}USING_SYMBOL(){return this.getToken(o.USING_SYMBOL,0)}charsetName(){return this.getTypedRuleContext(Qr,0)}DEFAULT_SYMBOL(){return this.getToken(o.DEFAULT_SYMBOL,0)}VALUES_SYMBOL(){return this.getToken(o.VALUES_SYMBOL,0)}INTERVAL_SYMBOL(){return this.getToken(o.INTERVAL_SYMBOL,0)}interval(){return this.getTypedRuleContext(er,0)}jsonPathIdentifier(){return this.getTypedRuleContext($s,0)}LOGICAL_OR_OPERATOR(){return this.getToken(o.LOGICAL_OR_OPERATOR,0)}COLLATE_SYMBOL(){return this.getToken(o.COLLATE_SYMBOL,0)}textOrIdentifier(){return this.getTypedRuleContext(it,0)}CAST_COLON_SYMBOL(){return this.getToken(o.CAST_COLON_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterSimpleExpr(this)}exitRule(e){e instanceof y&&e.exitSimpleExpr(this)}};c(r2,"SimpleExprContext");var Hu=r2,YL=class YL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_jsonOperator}JSON_SEPARATOR_SYMBOL(){return this.getToken(o.JSON_SEPARATOR_SYMBOL,0)}JSON_UNQUOTED_SEPARATOR_SYMBOL(){return this.getToken(o.JSON_UNQUOTED_SEPARATOR_SYMBOL,0)}textStringLiteral(){return this.getTypedRuleContext(Lu,0)}expr(){return this.getTypedRuleContext(R0,0)}enterRule(e){e instanceof y&&e.enterJsonOperator(this)}exitRule(e){e instanceof y&&e.exitJsonOperator(this)}};c(YL,"JsonOperatorContext");var J2=YL,RL=class RL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_sumExpr}AVG_SYMBOL(){return this.getToken(o.AVG_SYMBOL,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}inSumExpr(){return this.getTypedRuleContext(Ki,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}DISTINCT_SYMBOL(){return this.getToken(o.DISTINCT_SYMBOL,0)}windowingClause(){return this.getTypedRuleContext(qi,0)}BIT_AND_SYMBOL(){return this.getToken(o.BIT_AND_SYMBOL,0)}BIT_OR_SYMBOL(){return this.getToken(o.BIT_OR_SYMBOL,0)}BIT_XOR_SYMBOL(){return this.getToken(o.BIT_XOR_SYMBOL,0)}jsonFunction(){return this.getTypedRuleContext(uo,0)}COUNT_SYMBOL(){return this.getToken(o.COUNT_SYMBOL,0)}MULT_OPERATOR(){return this.getToken(o.MULT_OPERATOR,0)}ALL_SYMBOL(){return this.getToken(o.ALL_SYMBOL,0)}exprList(){return this.getTypedRuleContext(Vu,0)}MIN_SYMBOL(){return this.getToken(o.MIN_SYMBOL,0)}MAX_SYMBOL(){return this.getToken(o.MAX_SYMBOL,0)}STD_SYMBOL(){return this.getToken(o.STD_SYMBOL,0)}VARIANCE_SYMBOL(){return this.getToken(o.VARIANCE_SYMBOL,0)}STDDEV_SAMP_SYMBOL(){return this.getToken(o.STDDEV_SAMP_SYMBOL,0)}VAR_SAMP_SYMBOL(){return this.getToken(o.VAR_SAMP_SYMBOL,0)}SUM_SYMBOL(){return this.getToken(o.SUM_SYMBOL,0)}GROUP_CONCAT_SYMBOL(){return this.getToken(o.GROUP_CONCAT_SYMBOL,0)}orderClause(){return this.getTypedRuleContext(Ui,0)}SEPARATOR_SYMBOL(){return this.getToken(o.SEPARATOR_SYMBOL,0)}textString(){return this.getTypedRuleContext(tr,0)}enterRule(e){e instanceof y&&e.enterSumExpr(this)}exitRule(e){e instanceof y&&e.exitSumExpr(this)}};c(RL,"SumExprContext");var $2=RL,gL=class gL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_groupingOperation}GROUPING_SYMBOL(){return this.getToken(o.GROUPING_SYMBOL,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}exprList(){return this.getTypedRuleContext(Vu,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterGroupingOperation(this)}exitRule(e){e instanceof y&&e.exitGroupingOperation(this)}};c(gL,"GroupingOperationContext");var z2=gL,yL=class yL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_windowFunctionCall}parentheses(){return this.getTypedRuleContext(un,0)}windowingClause(){return this.getTypedRuleContext(qi,0)}ROW_NUMBER_SYMBOL(){return this.getToken(o.ROW_NUMBER_SYMBOL,0)}RANK_SYMBOL(){return this.getToken(o.RANK_SYMBOL,0)}DENSE_RANK_SYMBOL(){return this.getToken(o.DENSE_RANK_SYMBOL,0)}CUME_DIST_SYMBOL(){return this.getToken(o.CUME_DIST_SYMBOL,0)}PERCENT_RANK_SYMBOL(){return this.getToken(o.PERCENT_RANK_SYMBOL,0)}NTILE_SYMBOL(){return this.getToken(o.NTILE_SYMBOL,0)}simpleExprWithParentheses(){return this.getTypedRuleContext(qs,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}expr(){return this.getTypedRuleContext(R0,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}LEAD_SYMBOL(){return this.getToken(o.LEAD_SYMBOL,0)}LAG_SYMBOL(){return this.getToken(o.LAG_SYMBOL,0)}leadLagInfo(){return this.getTypedRuleContext(eo,0)}nullTreatment(){return this.getTypedRuleContext(vs,0)}exprWithParentheses(){return this.getTypedRuleContext(Gs,0)}FIRST_VALUE_SYMBOL(){return this.getToken(o.FIRST_VALUE_SYMBOL,0)}LAST_VALUE_SYMBOL(){return this.getToken(o.LAST_VALUE_SYMBOL,0)}NTH_VALUE_SYMBOL(){return this.getToken(o.NTH_VALUE_SYMBOL,0)}COMMA_SYMBOL(){return this.getToken(o.COMMA_SYMBOL,0)}simpleExpr(){return this.getTypedRuleContext(Hu,0)}FROM_SYMBOL(){return this.getToken(o.FROM_SYMBOL,0)}FIRST_SYMBOL(){return this.getToken(o.FIRST_SYMBOL,0)}LAST_SYMBOL(){return this.getToken(o.LAST_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterWindowFunctionCall(this)}exitRule(e){e instanceof y&&e.exitWindowFunctionCall(this)}};c(yL,"WindowFunctionCallContext");var Z2=yL,NL=class NL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_windowingClause}OVER_SYMBOL(){return this.getToken(o.OVER_SYMBOL,0)}identifier(){return this.getTypedRuleContext(Z0,0)}windowSpec(){return this.getTypedRuleContext(Os,0)}enterRule(e){e instanceof y&&e.enterWindowingClause(this)}exitRule(e){e instanceof y&&e.exitWindowingClause(this)}};c(NL,"WindowingClauseContext");var qi=NL,CL=class CL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_leadLagInfo}COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};ulonglong_number(){return this.getTypedRuleContext($i,0)}PARAM_MARKER(){return this.getToken(o.PARAM_MARKER,0)}expr(){return this.getTypedRuleContext(R0,0)}enterRule(e){e instanceof y&&e.enterLeadLagInfo(this)}exitRule(e){e instanceof y&&e.exitLeadLagInfo(this)}};c(CL,"LeadLagInfoContext");var eo=CL,IL=class IL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_nullTreatment}NULLS_SYMBOL(){return this.getToken(o.NULLS_SYMBOL,0)}RESPECT_SYMBOL(){return this.getToken(o.RESPECT_SYMBOL,0)}IGNORE_SYMBOL(){return this.getToken(o.IGNORE_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterNullTreatment(this)}exitRule(e){e instanceof y&&e.exitNullTreatment(this)}};c(IL,"NullTreatmentContext");var vs=IL,bL=class bL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_jsonFunction}JSON_ARRAYAGG_SYMBOL(){return this.getToken(o.JSON_ARRAYAGG_SYMBOL,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}inSumExpr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Ki):this.getTypedRuleContext(Ki,e)};CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}windowingClause(){return this.getTypedRuleContext(qi,0)}JSON_OBJECTAGG_SYMBOL(){return this.getToken(o.JSON_OBJECTAGG_SYMBOL,0)}COMMA_SYMBOL(){return this.getToken(o.COMMA_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterJsonFunction(this)}exitRule(e){e instanceof y&&e.exitJsonFunction(this)}};c(bL,"JsonFunctionContext");var uo=bL,xL=class xL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_inSumExpr}expr(){return this.getTypedRuleContext(R0,0)}ALL_SYMBOL(){return this.getToken(o.ALL_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterInSumExpr(this)}exitRule(e){e instanceof y&&e.exitInSumExpr(this)}};c(xL,"InSumExprContext");var Ki=xL,vL=class vL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_identListArg}identList(){return this.getTypedRuleContext(ro,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterIdentListArg(this)}exitRule(e){e instanceof y&&e.exitIdentListArg(this)}};c(vL,"IdentListArgContext");var to=vL,DL=class DL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_identList}qualifiedIdentifier=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts($e):this.getTypedRuleContext($e,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof y&&e.enterIdentList(this)}exitRule(e){e instanceof y&&e.exitIdentList(this)}};c(DL,"IdentListContext");var ro=DL,wL=class wL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_fulltextOptions}IN_SYMBOL(){return this.getToken(o.IN_SYMBOL,0)}BOOLEAN_SYMBOL(){return this.getToken(o.BOOLEAN_SYMBOL,0)}MODE_SYMBOL(){return this.getToken(o.MODE_SYMBOL,0)}NATURAL_SYMBOL(){return this.getToken(o.NATURAL_SYMBOL,0)}LANGUAGE_SYMBOL(){return this.getToken(o.LANGUAGE_SYMBOL,0)}WITH_SYMBOL(){return this.getToken(o.WITH_SYMBOL,0)}QUERY_SYMBOL(){return this.getToken(o.QUERY_SYMBOL,0)}EXPANSION_SYMBOL(){return this.getToken(o.EXPANSION_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterFulltextOptions(this)}exitRule(e){e instanceof y&&e.exitFulltextOptions(this)}};c(wL,"FulltextOptionsContext");var io=wL,UL=class UL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_runtimeFunctionCall}CHAR_SYMBOL(){return this.getToken(o.CHAR_SYMBOL,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}exprList(){return this.getTypedRuleContext(Vu,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}USING_SYMBOL(){return this.getToken(o.USING_SYMBOL,0)}charsetName(){return this.getTypedRuleContext(Qr,0)}CURRENT_USER_SYMBOL(){return this.getToken(o.CURRENT_USER_SYMBOL,0)}parentheses(){return this.getTypedRuleContext(un,0)}DATE_SYMBOL(){return this.getToken(o.DATE_SYMBOL,0)}exprWithParentheses(){return this.getTypedRuleContext(Gs,0)}DAY_SYMBOL(){return this.getToken(o.DAY_SYMBOL,0)}HOUR_SYMBOL(){return this.getToken(o.HOUR_SYMBOL,0)}INSERT_SYMBOL(){return this.getToken(o.INSERT_SYMBOL,0)}expr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(R0):this.getTypedRuleContext(R0,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};INTERVAL_SYMBOL(){return this.getToken(o.INTERVAL_SYMBOL,0)}LEFT_SYMBOL(){return this.getToken(o.LEFT_SYMBOL,0)}MINUTE_SYMBOL(){return this.getToken(o.MINUTE_SYMBOL,0)}MONTH_SYMBOL(){return this.getToken(o.MONTH_SYMBOL,0)}RIGHT_SYMBOL(){return this.getToken(o.RIGHT_SYMBOL,0)}SECOND_SYMBOL(){return this.getToken(o.SECOND_SYMBOL,0)}TIME_SYMBOL(){return this.getToken(o.TIME_SYMBOL,0)}TIMESTAMP_SYMBOL(){return this.getToken(o.TIMESTAMP_SYMBOL,0)}trimFunction(){return this.getTypedRuleContext(po,0)}USER_SYMBOL(){return this.getToken(o.USER_SYMBOL,0)}VALUES_SYMBOL(){return this.getToken(o.VALUES_SYMBOL,0)}YEAR_SYMBOL(){return this.getToken(o.YEAR_SYMBOL,0)}ADDDATE_SYMBOL(){return this.getToken(o.ADDDATE_SYMBOL,0)}SUBDATE_SYMBOL(){return this.getToken(o.SUBDATE_SYMBOL,0)}interval(){return this.getTypedRuleContext(er,0)}CURDATE_SYMBOL(){return this.getToken(o.CURDATE_SYMBOL,0)}CURTIME_SYMBOL(){return this.getToken(o.CURTIME_SYMBOL,0)}timeFunctionParameters(){return this.getTypedRuleContext(no,0)}DATE_ADD_SYMBOL(){return this.getToken(o.DATE_ADD_SYMBOL,0)}DATE_SUB_SYMBOL(){return this.getToken(o.DATE_SUB_SYMBOL,0)}EXTRACT_SYMBOL(){return this.getToken(o.EXTRACT_SYMBOL,0)}FROM_SYMBOL(){return this.getToken(o.FROM_SYMBOL,0)}GET_FORMAT_SYMBOL(){return this.getToken(o.GET_FORMAT_SYMBOL,0)}dateTimeTtype(){return this.getTypedRuleContext(co,0)}NOW_SYMBOL(){return this.getToken(o.NOW_SYMBOL,0)}POSITION_SYMBOL(){return this.getToken(o.POSITION_SYMBOL,0)}bitExpr(){return this.getTypedRuleContext(pu,0)}IN_SYMBOL(){return this.getToken(o.IN_SYMBOL,0)}substringFunction(){return this.getTypedRuleContext(ho,0)}SYSDATE_SYMBOL(){return this.getToken(o.SYSDATE_SYMBOL,0)}intervalTimeStamp(){return this.getTypedRuleContext(Hs,0)}TIMESTAMP_ADD_SYMBOL(){return this.getToken(o.TIMESTAMP_ADD_SYMBOL,0)}TIMESTAMP_DIFF_SYMBOL(){return this.getToken(o.TIMESTAMP_DIFF_SYMBOL,0)}UTC_DATE_SYMBOL(){return this.getToken(o.UTC_DATE_SYMBOL,0)}UTC_TIME_SYMBOL(){return this.getToken(o.UTC_TIME_SYMBOL,0)}UTC_TIMESTAMP_SYMBOL(){return this.getToken(o.UTC_TIMESTAMP_SYMBOL,0)}ASCII_SYMBOL(){return this.getToken(o.ASCII_SYMBOL,0)}CHARSET_SYMBOL(){return this.getToken(o.CHARSET_SYMBOL,0)}COALESCE_SYMBOL(){return this.getToken(o.COALESCE_SYMBOL,0)}exprListWithParentheses(){return this.getTypedRuleContext(Vs,0)}COLLATION_SYMBOL(){return this.getToken(o.COLLATION_SYMBOL,0)}DATABASE_SYMBOL(){return this.getToken(o.DATABASE_SYMBOL,0)}IF_SYMBOL(){return this.getToken(o.IF_SYMBOL,0)}FORMAT_SYMBOL(){return this.getToken(o.FORMAT_SYMBOL,0)}MICROSECOND_SYMBOL(){return this.getToken(o.MICROSECOND_SYMBOL,0)}MOD_SYMBOL(){return this.getToken(o.MOD_SYMBOL,0)}OLD_PASSWORD_SYMBOL(){return this.getToken(o.OLD_PASSWORD_SYMBOL,0)}textLiteral(){return this.getTypedRuleContext(Zs,0)}PASSWORD_SYMBOL(){return this.getToken(o.PASSWORD_SYMBOL,0)}QUARTER_SYMBOL(){return this.getToken(o.QUARTER_SYMBOL,0)}REPEAT_SYMBOL(){return this.getToken(o.REPEAT_SYMBOL,0)}REPLACE_SYMBOL(){return this.getToken(o.REPLACE_SYMBOL,0)}REVERSE_SYMBOL(){return this.getToken(o.REVERSE_SYMBOL,0)}ROW_COUNT_SYMBOL(){return this.getToken(o.ROW_COUNT_SYMBOL,0)}TRUNCATE_SYMBOL(){return this.getToken(o.TRUNCATE_SYMBOL,0)}WEEK_SYMBOL(){return this.getToken(o.WEEK_SYMBOL,0)}WEIGHT_STRING_SYMBOL(){return this.getToken(o.WEIGHT_STRING_SYMBOL,0)}AS_SYMBOL(){return this.getToken(o.AS_SYMBOL,0)}BINARY_SYMBOL(){return this.getToken(o.BINARY_SYMBOL,0)}wsNumCodepoints(){return this.getTypedRuleContext(Yo,0)}ulong_number=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(zs):this.getTypedRuleContext(zs,e)};weightStringLevels(){return this.getTypedRuleContext(lo,0)}geometryFunction(){return this.getTypedRuleContext(so,0)}enterRule(e){e instanceof y&&e.enterRuntimeFunctionCall(this)}exitRule(e){e instanceof y&&e.exitRuntimeFunctionCall(this)}};c(UL,"RuntimeFunctionCallContext");var ao=UL,PL=class PL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_geometryFunction}CONTAINS_SYMBOL(){return this.getToken(o.CONTAINS_SYMBOL,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}expr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(R0):this.getTypedRuleContext(R0,e)};COMMA_SYMBOL(){return this.getToken(o.COMMA_SYMBOL,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}GEOMETRYCOLLECTION_SYMBOL(){return this.getToken(o.GEOMETRYCOLLECTION_SYMBOL,0)}exprList(){return this.getTypedRuleContext(Vu,0)}LINESTRING_SYMBOL(){return this.getToken(o.LINESTRING_SYMBOL,0)}exprListWithParentheses(){return this.getTypedRuleContext(Vs,0)}MULTILINESTRING_SYMBOL(){return this.getToken(o.MULTILINESTRING_SYMBOL,0)}MULTIPOINT_SYMBOL(){return this.getToken(o.MULTIPOINT_SYMBOL,0)}MULTIPOLYGON_SYMBOL(){return this.getToken(o.MULTIPOLYGON_SYMBOL,0)}POINT_SYMBOL(){return this.getToken(o.POINT_SYMBOL,0)}POLYGON_SYMBOL(){return this.getToken(o.POLYGON_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterGeometryFunction(this)}exitRule(e){e instanceof y&&e.exitGeometryFunction(this)}};c(PL,"GeometryFunctionContext");var so=PL,kL=class kL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_timeFunctionParameters}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}fractionalPrecision(){return this.getTypedRuleContext(oo,0)}enterRule(e){e instanceof y&&e.enterTimeFunctionParameters(this)}exitRule(e){e instanceof y&&e.exitTimeFunctionParameters(this)}};c(kL,"TimeFunctionParametersContext");var no=kL,FL=class FL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_fractionalPrecision}INT_NUMBER(){return this.getToken(o.INT_NUMBER,0)}enterRule(e){e instanceof y&&e.enterFractionalPrecision(this)}exitRule(e){e instanceof y&&e.exitFractionalPrecision(this)}};c(FL,"FractionalPrecisionContext");var oo=FL,HL=class HL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_weightStringLevels}LEVEL_SYMBOL(){return this.getToken(o.LEVEL_SYMBOL,0)}real_ulong_number=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(ur):this.getTypedRuleContext(ur,e)};MINUS_OPERATOR(){return this.getToken(o.MINUS_OPERATOR,0)}weightStringLevelListItem=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Ds):this.getTypedRuleContext(Ds,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof y&&e.enterWeightStringLevels(this)}exitRule(e){e instanceof y&&e.exitWeightStringLevels(this)}};c(HL,"WeightStringLevelsContext");var lo=HL,VL=class VL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_weightStringLevelListItem}real_ulong_number(){return this.getTypedRuleContext(ur,0)}REVERSE_SYMBOL(){return this.getToken(o.REVERSE_SYMBOL,0)}ASC_SYMBOL(){return this.getToken(o.ASC_SYMBOL,0)}DESC_SYMBOL(){return this.getToken(o.DESC_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterWeightStringLevelListItem(this)}exitRule(e){e instanceof y&&e.exitWeightStringLevelListItem(this)}};c(VL,"WeightStringLevelListItemContext");var Ds=VL,GL=class GL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_dateTimeTtype}DATE_SYMBOL(){return this.getToken(o.DATE_SYMBOL,0)}TIME_SYMBOL(){return this.getToken(o.TIME_SYMBOL,0)}DATETIME_SYMBOL(){return this.getToken(o.DATETIME_SYMBOL,0)}TIMESTAMP_SYMBOL(){return this.getToken(o.TIMESTAMP_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterDateTimeTtype(this)}exitRule(e){e instanceof y&&e.exitDateTimeTtype(this)}};c(GL,"DateTimeTtypeContext");var co=GL,qL=class qL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_trimFunction}TRIM_SYMBOL(){return this.getToken(o.TRIM_SYMBOL,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}expr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(R0):this.getTypedRuleContext(R0,e)};LEADING_SYMBOL(){return this.getToken(o.LEADING_SYMBOL,0)}FROM_SYMBOL(){return this.getToken(o.FROM_SYMBOL,0)}TRAILING_SYMBOL(){return this.getToken(o.TRAILING_SYMBOL,0)}BOTH_SYMBOL(){return this.getToken(o.BOTH_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterTrimFunction(this)}exitRule(e){e instanceof y&&e.exitTrimFunction(this)}};c(qL,"TrimFunctionContext");var po=qL,KL=class KL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_substringFunction}SUBSTRING_SYMBOL(){return this.getToken(o.SUBSTRING_SYMBOL,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}expr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(R0):this.getTypedRuleContext(R0,e)};CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};FROM_SYMBOL(){return this.getToken(o.FROM_SYMBOL,0)}FOR_SYMBOL(){return this.getToken(o.FOR_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterSubstringFunction(this)}exitRule(e){e instanceof y&&e.exitSubstringFunction(this)}};c(KL,"SubstringFunctionContext");var ho=KL,WL=class WL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_functionCall}pureIdentifier(){return this.getTypedRuleContext(Js,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}udfExprList(){return this.getTypedRuleContext(So,0)}qualifiedIdentifier(){return this.getTypedRuleContext($e,0)}exprList(){return this.getTypedRuleContext(Vu,0)}selectItem(){return this.getTypedRuleContext(ki,0)}enterRule(e){e instanceof y&&e.enterFunctionCall(this)}exitRule(e){e instanceof y&&e.exitFunctionCall(this)}};c(WL,"FunctionCallContext");var fo=WL,jL=class jL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_udfExprList}udfExpr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(ws):this.getTypedRuleContext(ws,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof y&&e.enterUdfExprList(this)}exitRule(e){e instanceof y&&e.exitUdfExprList(this)}};c(jL,"UdfExprListContext");var So=jL,XL=class XL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_udfExpr}expr(){return this.getTypedRuleContext(R0,0)}qualifiedIdentifier(){return this.getTypedRuleContext($e,0)}selectAlias(){return this.getTypedRuleContext(Ys,0)}enterRule(e){e instanceof y&&e.enterUdfExpr(this)}exitRule(e){e instanceof y&&e.exitUdfExpr(this)}};c(XL,"UdfExprContext");var ws=XL,QL=class QL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_unpivotClause}UNPIVOT_SYMBOL(){return this.getToken(o.UNPIVOT_SYMBOL,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}identifier=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Z0):this.getTypedRuleContext(Z0,e)};IN_SYMBOL(){return this.getToken(o.IN_SYMBOL,0)}identifierListWithParentheses(){return this.getTypedRuleContext(Ji,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}FOR_SYMBOL(){return this.getToken(o.FOR_SYMBOL,0)}whereClause=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Fi):this.getTypedRuleContext(Fi,e)};enterRule(e){e instanceof y&&e.enterUnpivotClause(this)}exitRule(e){e instanceof y&&e.exitUnpivotClause(this)}};c(QL,"UnpivotClauseContext");var Us=QL,JL=class JL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_variable}userVariable(){return this.getTypedRuleContext(Wi,0)}systemVariable(){return this.getTypedRuleContext(Lo,0)}enterRule(e){e instanceof y&&e.enterVariable(this)}exitRule(e){e instanceof y&&e.exitVariable(this)}};c(JL,"VariableContext");var Oo=JL,$L=class $L extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_userVariable}AT_SIGN_SYMBOL(){return this.getToken(o.AT_SIGN_SYMBOL,0)}textOrIdentifier(){return this.getTypedRuleContext(it,0)}AT_TEXT_SUFFIX(){return this.getToken(o.AT_TEXT_SUFFIX,0)}enterRule(e){e instanceof y&&e.enterUserVariable(this)}exitRule(e){e instanceof y&&e.exitUserVariable(this)}};c($L,"UserVariableContext");var Wi=$L,zL=class zL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_systemVariable}AT_AT_SIGN_SYMBOL(){return this.getToken(o.AT_AT_SIGN_SYMBOL,0)}textOrIdentifier(){return this.getTypedRuleContext(it,0)}varIdentType(){return this.getTypedRuleContext(Ko,0)}dotIdentifier(){return this.getTypedRuleContext(Do,0)}enterRule(e){e instanceof y&&e.enterSystemVariable(this)}exitRule(e){e instanceof y&&e.exitSystemVariable(this)}};c(zL,"SystemVariableContext");var Lo=zL,ZL=class ZL extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_whenExpression}WHEN_SYMBOL(){return this.getToken(o.WHEN_SYMBOL,0)}expr(){return this.getTypedRuleContext(R0,0)}enterRule(e){e instanceof y&&e.enterWhenExpression(this)}exitRule(e){e instanceof y&&e.exitWhenExpression(this)}};c(ZL,"WhenExpressionContext");var Ps=ZL,e9=class e9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_thenExpression}THEN_SYMBOL(){return this.getToken(o.THEN_SYMBOL,0)}expr(){return this.getTypedRuleContext(R0,0)}enterRule(e){e instanceof y&&e.enterThenExpression(this)}exitRule(e){e instanceof y&&e.exitThenExpression(this)}};c(e9,"ThenExpressionContext");var ks=e9,u9=class u9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_elseExpression}ELSE_SYMBOL(){return this.getToken(o.ELSE_SYMBOL,0)}expr(){return this.getTypedRuleContext(R0,0)}enterRule(e){e instanceof y&&e.enterElseExpression(this)}exitRule(e){e instanceof y&&e.exitElseExpression(this)}};c(u9,"ElseExpressionContext");var Eo=u9,t9=class t9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_exprList}expr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(R0):this.getTypedRuleContext(R0,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof y&&e.enterExprList(this)}exitRule(e){e instanceof y&&e.exitExprList(this)}};c(t9,"ExprListContext");var Vu=t9,r9=class r9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_charset}CHAR_SYMBOL(){return this.getToken(o.CHAR_SYMBOL,0)}SET_SYMBOL(){return this.getToken(o.SET_SYMBOL,0)}CHARSET_SYMBOL(){return this.getToken(o.CHARSET_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterCharset(this)}exitRule(e){e instanceof y&&e.exitCharset(this)}};c(r9,"CharsetContext");var Fs=r9,i9=class i9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_notRule}NOT_SYMBOL(){return this.getToken(o.NOT_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterNotRule(this)}exitRule(e){e instanceof y&&e.exitNotRule(this)}};c(i9,"NotRuleContext");var ji=i9,a9=class a9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_not2Rule}LOGICAL_NOT_OPERATOR(){return this.getToken(o.LOGICAL_NOT_OPERATOR,0)}enterRule(e){e instanceof y&&e.enterNot2Rule(this)}exitRule(e){e instanceof y&&e.exitNot2Rule(this)}};c(a9,"Not2RuleContext");var mo=a9,s9=class s9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_interval}intervalTimeStamp(){return this.getTypedRuleContext(Hs,0)}SECOND_MICROSECOND_SYMBOL(){return this.getToken(o.SECOND_MICROSECOND_SYMBOL,0)}MINUTE_MICROSECOND_SYMBOL(){return this.getToken(o.MINUTE_MICROSECOND_SYMBOL,0)}MINUTE_SECOND_SYMBOL(){return this.getToken(o.MINUTE_SECOND_SYMBOL,0)}HOUR_MICROSECOND_SYMBOL(){return this.getToken(o.HOUR_MICROSECOND_SYMBOL,0)}HOUR_SECOND_SYMBOL(){return this.getToken(o.HOUR_SECOND_SYMBOL,0)}HOUR_MINUTE_SYMBOL(){return this.getToken(o.HOUR_MINUTE_SYMBOL,0)}DAY_MICROSECOND_SYMBOL(){return this.getToken(o.DAY_MICROSECOND_SYMBOL,0)}DAY_SECOND_SYMBOL(){return this.getToken(o.DAY_SECOND_SYMBOL,0)}DAY_MINUTE_SYMBOL(){return this.getToken(o.DAY_MINUTE_SYMBOL,0)}DAY_HOUR_SYMBOL(){return this.getToken(o.DAY_HOUR_SYMBOL,0)}YEAR_MONTH_SYMBOL(){return this.getToken(o.YEAR_MONTH_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterInterval(this)}exitRule(e){e instanceof y&&e.exitInterval(this)}};c(s9,"IntervalContext");var er=s9,n9=class n9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_intervalTimeStamp}MICROSECOND_SYMBOL(){return this.getToken(o.MICROSECOND_SYMBOL,0)}SECOND_SYMBOL(){return this.getToken(o.SECOND_SYMBOL,0)}MINUTE_SYMBOL(){return this.getToken(o.MINUTE_SYMBOL,0)}HOUR_SYMBOL(){return this.getToken(o.HOUR_SYMBOL,0)}DAY_SYMBOL(){return this.getToken(o.DAY_SYMBOL,0)}WEEK_SYMBOL(){return this.getToken(o.WEEK_SYMBOL,0)}MONTH_SYMBOL(){return this.getToken(o.MONTH_SYMBOL,0)}QUARTER_SYMBOL(){return this.getToken(o.QUARTER_SYMBOL,0)}YEAR_SYMBOL(){return this.getToken(o.YEAR_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterIntervalTimeStamp(this)}exitRule(e){e instanceof y&&e.exitIntervalTimeStamp(this)}};c(n9,"IntervalTimeStampContext");var Hs=n9,o9=class o9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_exprListWithParentheses}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}exprList(){return this.getTypedRuleContext(Vu,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterExprListWithParentheses(this)}exitRule(e){e instanceof y&&e.exitExprListWithParentheses(this)}};c(o9,"ExprListWithParenthesesContext");var Vs=o9,l9=class l9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_exprWithParentheses}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}expr(){return this.getTypedRuleContext(R0,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterExprWithParentheses(this)}exitRule(e){e instanceof y&&e.exitExprWithParentheses(this)}};c(l9,"ExprWithParenthesesContext");var Gs=l9,c9=class c9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_simpleExprWithParentheses}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}simpleExpr(){return this.getTypedRuleContext(Hu,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterSimpleExprWithParentheses(this)}exitRule(e){e instanceof y&&e.exitSimpleExprWithParentheses(this)}};c(c9,"SimpleExprWithParenthesesContext");var qs=c9,d9=class d9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_orderList}orderExpression=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Ks):this.getTypedRuleContext(Ks,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof y&&e.enterOrderList(this)}exitRule(e){e instanceof y&&e.exitOrderList(this)}};c(d9,"OrderListContext");var Xi=d9,p9=class p9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_orderExpression}expr(){return this.getTypedRuleContext(R0,0)}direction(){return this.getTypedRuleContext(A2,0)}enterRule(e){e instanceof y&&e.enterOrderExpression(this)}exitRule(e){e instanceof y&&e.exitOrderExpression(this)}};c(p9,"OrderExpressionContext");var Ks=p9,h9=class h9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_indexType}BTREE_SYMBOL(){return this.getToken(o.BTREE_SYMBOL,0)}RTREE_SYMBOL(){return this.getToken(o.RTREE_SYMBOL,0)}HASH_SYMBOL(){return this.getToken(o.HASH_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterIndexType(this)}exitRule(e){e instanceof y&&e.exitIndexType(this)}};c(h9,"IndexTypeContext");var Op=h9,f9=class f9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_dataType}INT_SYMBOL(){return this.getToken(o.INT_SYMBOL,0)}BYTE_INT_SYMBOL(){return this.getToken(o.BYTE_INT_SYMBOL,0)}TINYINT_SYMBOL(){return this.getToken(o.TINYINT_SYMBOL,0)}SMALLINT_SYMBOL(){return this.getToken(o.SMALLINT_SYMBOL,0)}MEDIUMINT_SYMBOL(){return this.getToken(o.MEDIUMINT_SYMBOL,0)}BIGINT_SYMBOL(){return this.getToken(o.BIGINT_SYMBOL,0)}DECIMAL_SYMBOL(){return this.getToken(o.DECIMAL_SYMBOL,0)}NUMERIC_SYMBOL(){return this.getToken(o.NUMERIC_SYMBOL,0)}NUMBER_SYMBOL(){return this.getToken(o.NUMBER_SYMBOL,0)}fieldLength(){return this.getTypedRuleContext(Ws,0)}fieldOptions(){return this.getTypedRuleContext(Mo,0)}REAL_SYMBOL(){return this.getToken(o.REAL_SYMBOL,0)}DOUBLE_SYMBOL(){return this.getToken(o.DOUBLE_SYMBOL,0)}precision(){return this.getTypedRuleContext(en,0)}PRECISION_SYMBOL(){return this.getToken(o.PRECISION_SYMBOL,0)}FLOAT_SYMBOL_4(){return this.getToken(o.FLOAT_SYMBOL_4,0)}FLOAT_SYMBOL_8(){return this.getToken(o.FLOAT_SYMBOL_8,0)}FLOAT_SYMBOL(){return this.getToken(o.FLOAT_SYMBOL,0)}FIXED_SYMBOL(){return this.getToken(o.FIXED_SYMBOL,0)}floatOptions(){return this.getTypedRuleContext(Go,0)}BIT_SYMBOL(){return this.getToken(o.BIT_SYMBOL,0)}BOOL_SYMBOL(){return this.getToken(o.BOOL_SYMBOL,0)}BOOLEAN_SYMBOL(){return this.getToken(o.BOOLEAN_SYMBOL,0)}nchar(){return this.getTypedRuleContext(Bo,0)}BINARY_SYMBOL(){return this.getToken(o.BINARY_SYMBOL,0)}CHAR_SYMBOL(){return this.getToken(o.CHAR_SYMBOL,0)}VARYING_SYMBOL(){return this.getToken(o.VARYING_SYMBOL,0)}VARCHAR_SYMBOL(){return this.getToken(o.VARCHAR_SYMBOL,0)}VARCHAR2_SYMBOL(){return this.getToken(o.VARCHAR2_SYMBOL,0)}STRING_SYMBOL(){return this.getToken(o.STRING_SYMBOL,0)}TEXT_SYMBOL(){return this.getToken(o.TEXT_SYMBOL,0)}charsetWithOptBinary(){return this.getTypedRuleContext(To,0)}NATIONAL_SYMBOL(){return this.getToken(o.NATIONAL_SYMBOL,0)}NVARCHAR2_SYMBOL(){return this.getToken(o.NVARCHAR2_SYMBOL,0)}NVARCHAR_SYMBOL(){return this.getToken(o.NVARCHAR_SYMBOL,0)}NCHAR_SYMBOL(){return this.getToken(o.NCHAR_SYMBOL,0)}VARBINARY_SYMBOL(){return this.getToken(o.VARBINARY_SYMBOL,0)}YEAR_SYMBOL(){return this.getToken(o.YEAR_SYMBOL,0)}DATE_SYMBOL(){return this.getToken(o.DATE_SYMBOL,0)}TIME_SYMBOL(){return this.getToken(o.TIME_SYMBOL,0)}typeDatetimePrecision(){return this.getTypedRuleContext(Ro,0)}TIMESTAMP_SYMBOL(){return this.getToken(o.TIMESTAMP_SYMBOL,0)}TIMESTAMP_NTZ_SYMBOL(){return this.getToken(o.TIMESTAMP_NTZ_SYMBOL,0)}TIMESTAMP_LTZ_SYMBOL(){return this.getToken(o.TIMESTAMP_LTZ_SYMBOL,0)}WITH_SYMBOL(){return this.getToken(o.WITH_SYMBOL,0)}LOCAL_SYMBOL(){return this.getToken(o.LOCAL_SYMBOL,0)}ZONE_SYMBOL(){return this.getToken(o.ZONE_SYMBOL,0)}WITHOUT_SYMBOL(){return this.getToken(o.WITHOUT_SYMBOL,0)}DATETIME_SYMBOL(){return this.getToken(o.DATETIME_SYMBOL,0)}TINYBLOB_SYMBOL(){return this.getToken(o.TINYBLOB_SYMBOL,0)}BLOB_SYMBOL(){return this.getToken(o.BLOB_SYMBOL,0)}CLOB_SYMBOL(){return this.getToken(o.CLOB_SYMBOL,0)}BFILE_SYMBOL(){return this.getToken(o.BFILE_SYMBOL,0)}LONG_SYMBOL(){return this.getToken(o.LONG_SYMBOL,0)}RAW_SYMBOL(){return this.getToken(o.RAW_SYMBOL,0)}MEDIUMBLOB_SYMBOL(){return this.getToken(o.MEDIUMBLOB_SYMBOL,0)}LONGBLOB_SYMBOL(){return this.getToken(o.LONGBLOB_SYMBOL,0)}TINYTEXT_SYMBOL(){return this.getToken(o.TINYTEXT_SYMBOL,0)}MEDIUMTEXT_SYMBOL(){return this.getToken(o.MEDIUMTEXT_SYMBOL,0)}LONGTEXT_SYMBOL(){return this.getToken(o.LONGTEXT_SYMBOL,0)}ENUM_SYMBOL(){return this.getToken(o.ENUM_SYMBOL,0)}stringList(){return this.getTypedRuleContext(Po,0)}SET_SYMBOL(){return this.getToken(o.SET_SYMBOL,0)}SERIAL_SYMBOL(){return this.getToken(o.SERIAL_SYMBOL,0)}JSON_SYMBOL(){return this.getToken(o.JSON_SYMBOL,0)}GEOMETRY_SYMBOL(){return this.getToken(o.GEOMETRY_SYMBOL,0)}GEOMETRYCOLLECTION_SYMBOL(){return this.getToken(o.GEOMETRYCOLLECTION_SYMBOL,0)}POINT_SYMBOL(){return this.getToken(o.POINT_SYMBOL,0)}MULTIPOINT_SYMBOL(){return this.getToken(o.MULTIPOINT_SYMBOL,0)}LINESTRING_SYMBOL(){return this.getToken(o.LINESTRING_SYMBOL,0)}MULTILINESTRING_SYMBOL(){return this.getToken(o.MULTILINESTRING_SYMBOL,0)}POLYGON_SYMBOL(){return this.getToken(o.POLYGON_SYMBOL,0)}MULTIPOLYGON_SYMBOL(){return this.getToken(o.MULTIPOLYGON_SYMBOL,0)}GEOGRAPHY_SYMBOL(){return this.getToken(o.GEOGRAPHY_SYMBOL,0)}VARIANT_SYMBOL(){return this.getToken(o.VARIANT_SYMBOL,0)}OBJECT_SYMBOL(){return this.getToken(o.OBJECT_SYMBOL,0)}ARRAY_SYMBOL(){return this.getToken(o.ARRAY_SYMBOL,0)}expr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(R0):this.getTypedRuleContext(R0,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};identifier(){return this.getTypedRuleContext(Z0,0)}enterRule(e){e instanceof y&&e.enterDataType(this)}exitRule(e){e instanceof y&&e.exitDataType(this)}};c(f9,"DataTypeContext");var Qi=f9,S9=class S9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_nchar}NCHAR_SYMBOL(){return this.getToken(o.NCHAR_SYMBOL,0)}NATIONAL_SYMBOL(){return this.getToken(o.NATIONAL_SYMBOL,0)}CHAR_SYMBOL(){return this.getToken(o.CHAR_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterNchar(this)}exitRule(e){e instanceof y&&e.exitNchar(this)}};c(S9,"NcharContext");var Bo=S9,O9=class O9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_fieldLength}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}real_ulonglong_number(){return this.getTypedRuleContext(wo,0)}DECIMAL_NUMBER(){return this.getToken(o.DECIMAL_NUMBER,0)}CHAR_SYMBOL(){return this.getToken(o.CHAR_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterFieldLength(this)}exitRule(e){e instanceof y&&e.exitFieldLength(this)}};c(O9,"FieldLengthContext");var Ws=O9,L9=class L9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_fieldOptions}SIGNED_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.SIGNED_SYMBOL):this.getToken(o.SIGNED_SYMBOL,e)};UNSIGNED_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.UNSIGNED_SYMBOL):this.getToken(o.UNSIGNED_SYMBOL,e)};ZEROFILL_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.ZEROFILL_SYMBOL):this.getToken(o.ZEROFILL_SYMBOL,e)};enterRule(e){e instanceof y&&e.enterFieldOptions(this)}exitRule(e){e instanceof y&&e.exitFieldOptions(this)}};c(L9,"FieldOptionsContext");var Mo=L9,E9=class E9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_charsetWithOptBinary}ascii(){return this.getTypedRuleContext(_o,0)}unicode(){return this.getTypedRuleContext(Ao,0)}BYTE_SYMBOL(){return this.getToken(o.BYTE_SYMBOL,0)}charset(){return this.getTypedRuleContext(Fs,0)}charsetName(){return this.getTypedRuleContext(Qr,0)}BINARY_SYMBOL(){return this.getToken(o.BINARY_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterCharsetWithOptBinary(this)}exitRule(e){e instanceof y&&e.exitCharsetWithOptBinary(this)}};c(E9,"CharsetWithOptBinaryContext");var To=E9,m9=class m9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_ascii}ASCII_SYMBOL(){return this.getToken(o.ASCII_SYMBOL,0)}BINARY_SYMBOL(){return this.getToken(o.BINARY_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterAscii(this)}exitRule(e){e instanceof y&&e.exitAscii(this)}};c(m9,"AsciiContext");var _o=m9,B9=class B9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_unicode}UNICODE_SYMBOL(){return this.getToken(o.UNICODE_SYMBOL,0)}BINARY_SYMBOL(){return this.getToken(o.BINARY_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterUnicode(this)}exitRule(e){e instanceof y&&e.exitUnicode(this)}};c(B9,"UnicodeContext");var Ao=B9,M9=class M9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_wsNumCodepoints}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}real_ulong_number(){return this.getTypedRuleContext(ur,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterWsNumCodepoints(this)}exitRule(e){e instanceof y&&e.exitWsNumCodepoints(this)}};c(M9,"WsNumCodepointsContext");var Yo=M9,T9=class T9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_typeDatetimePrecision}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}INT_NUMBER(){return this.getToken(o.INT_NUMBER,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterTypeDatetimePrecision(this)}exitRule(e){e instanceof y&&e.exitTypeDatetimePrecision(this)}};c(T9,"TypeDatetimePrecisionContext");var Ro=T9,_9=class _9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_charsetName}textOrIdentifier(){return this.getTypedRuleContext(it,0)}BINARY_SYMBOL(){return this.getToken(o.BINARY_SYMBOL,0)}DEFAULT_SYMBOL(){return this.getToken(o.DEFAULT_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterCharsetName(this)}exitRule(e){e instanceof y&&e.exitCharsetName(this)}};c(_9,"CharsetNameContext");var Qr=_9,A9=class A9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_collationName}textOrIdentifier(){return this.getTypedRuleContext(it,0)}DEFAULT_SYMBOL(){return this.getToken(o.DEFAULT_SYMBOL,0)}BINARY_SYMBOL(){return this.getToken(o.BINARY_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterCollationName(this)}exitRule(e){e instanceof y&&e.exitCollationName(this)}};c(A9,"CollationNameContext");var go=A9,Y9=class Y9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_collate}COLLATE_SYMBOL(){return this.getToken(o.COLLATE_SYMBOL,0)}collationName(){return this.getTypedRuleContext(go,0)}enterRule(e){e instanceof y&&e.enterCollate(this)}exitRule(e){e instanceof y&&e.exitCollate(this)}};c(Y9,"CollateContext");var yo=Y9,R9=class R9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_charsetClause}charset(){return this.getTypedRuleContext(Fs,0)}charsetName(){return this.getTypedRuleContext(Qr,0)}enterRule(e){e instanceof y&&e.enterCharsetClause(this)}exitRule(e){e instanceof y&&e.exitCharsetClause(this)}};c(R9,"CharsetClauseContext");var No=R9,g9=class g9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_fieldsClause}COLUMNS_SYMBOL(){return this.getToken(o.COLUMNS_SYMBOL,0)}fieldTerm=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(js):this.getTypedRuleContext(js,e)};enterRule(e){e instanceof y&&e.enterFieldsClause(this)}exitRule(e){e instanceof y&&e.exitFieldsClause(this)}};c(g9,"FieldsClauseContext");var Co=g9,y9=class y9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_fieldTerm}TERMINATED_SYMBOL(){return this.getToken(o.TERMINATED_SYMBOL,0)}BY_SYMBOL(){return this.getToken(o.BY_SYMBOL,0)}textString(){return this.getTypedRuleContext(tr,0)}ENCLOSED_SYMBOL(){return this.getToken(o.ENCLOSED_SYMBOL,0)}OPTIONALLY_SYMBOL(){return this.getToken(o.OPTIONALLY_SYMBOL,0)}ESCAPED_SYMBOL(){return this.getToken(o.ESCAPED_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterFieldTerm(this)}exitRule(e){e instanceof y&&e.exitFieldTerm(this)}};c(y9,"FieldTermContext");var js=y9,N9=class N9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_linesClause}LINES_SYMBOL(){return this.getToken(o.LINES_SYMBOL,0)}lineTerm=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Xs):this.getTypedRuleContext(Xs,e)};enterRule(e){e instanceof y&&e.enterLinesClause(this)}exitRule(e){e instanceof y&&e.exitLinesClause(this)}};c(N9,"LinesClauseContext");var Io=N9,C9=class C9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_lineTerm}BY_SYMBOL(){return this.getToken(o.BY_SYMBOL,0)}textString(){return this.getTypedRuleContext(tr,0)}TERMINATED_SYMBOL(){return this.getToken(o.TERMINATED_SYMBOL,0)}STARTING_SYMBOL(){return this.getToken(o.STARTING_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterLineTerm(this)}exitRule(e){e instanceof y&&e.exitLineTerm(this)}};c(C9,"LineTermContext");var Xs=C9,I9=class I9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_usePartition}PARTITION_SYMBOL(){return this.getToken(o.PARTITION_SYMBOL,0)}identifierListWithParentheses(){return this.getTypedRuleContext(Ji,0)}enterRule(e){e instanceof y&&e.enterUsePartition(this)}exitRule(e){e instanceof y&&e.exitUsePartition(this)}};c(I9,"UsePartitionContext");var bo=I9,b9=class b9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_columnInternalRefList}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}identifier=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Z0):this.getTypedRuleContext(Z0,e)};CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof y&&e.enterColumnInternalRefList(this)}exitRule(e){e instanceof y&&e.exitColumnInternalRefList(this)}};c(b9,"ColumnInternalRefListContext");var Qs=b9,x9=class x9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_tableAliasRefList}qualifiedIdentifier=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts($e):this.getTypedRuleContext($e,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof y&&e.enterTableAliasRefList(this)}exitRule(e){e instanceof y&&e.exitTableAliasRefList(this)}};c(x9,"TableAliasRefListContext");var xo=x9,v9=class v9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_pureIdentifier}IDENTIFIER(){return this.getToken(o.IDENTIFIER,0)}BACK_TICK_QUOTED_ID(){return this.getToken(o.BACK_TICK_QUOTED_ID,0)}SINGLE_QUOTED_TEXT(){return this.getToken(o.SINGLE_QUOTED_TEXT,0)}DOUBLE_QUOTED_TEXT(){return this.getToken(o.DOUBLE_QUOTED_TEXT,0)}BRACKET_QUOTED_TEXT(){return this.getToken(o.BRACKET_QUOTED_TEXT,0)}CURLY_BRACES_QUOTED_TEXT(){return this.getToken(o.CURLY_BRACES_QUOTED_TEXT,0)}UNDERSCORE_CHARSET(){return this.getToken(o.UNDERSCORE_CHARSET,0)}enterRule(e){e instanceof y&&e.enterPureIdentifier(this)}exitRule(e){e instanceof y&&e.exitPureIdentifier(this)}};c(v9,"PureIdentifierContext");var Js=v9,D9=class D9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_identifier}pureIdentifier(){return this.getTypedRuleContext(Js,0)}identifierKeyword(){return this.getTypedRuleContext(Wo,0)}enterRule(e){e instanceof y&&e.enterIdentifier(this)}exitRule(e){e instanceof y&&e.exitIdentifier(this)}};c(D9,"IdentifierContext");var Z0=D9,w9=class w9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_identifierList}identifier=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Z0):this.getTypedRuleContext(Z0,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof y&&e.enterIdentifierList(this)}exitRule(e){e instanceof y&&e.exitIdentifierList(this)}};c(w9,"IdentifierListContext");var vo=w9,U9=class U9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_identifierListWithParentheses}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}identifierList(){return this.getTypedRuleContext(vo,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterIdentifierListWithParentheses(this)}exitRule(e){e instanceof y&&e.exitIdentifierListWithParentheses(this)}};c(U9,"IdentifierListWithParenthesesContext");var Ji=U9,P9=class P9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_qualifiedIdentifier}identifier=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Z0):this.getTypedRuleContext(Z0,e)};DOT_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.DOT_SYMBOL):this.getToken(o.DOT_SYMBOL,e)};MULT_OPERATOR(){return this.getToken(o.MULT_OPERATOR,0)}enterRule(e){e instanceof y&&e.enterQualifiedIdentifier(this)}exitRule(e){e instanceof y&&e.exitQualifiedIdentifier(this)}};c(P9,"QualifiedIdentifierContext");var $e=P9,k9=class k9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_jsonPathIdentifier}qualifiedIdentifier(){return this.getTypedRuleContext($e,0)}COLON_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COLON_SYMBOL):this.getToken(o.COLON_SYMBOL,e)};identifier=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Z0):this.getTypedRuleContext(Z0,e)};BRACKET_QUOTED_TEXT=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.BRACKET_QUOTED_TEXT):this.getToken(o.BRACKET_QUOTED_TEXT,e)};CAST_COLON_SYMBOL(){return this.getToken(o.CAST_COLON_SYMBOL,0)}dataType(){return this.getTypedRuleContext(Qi,0)}COLLATE_SYMBOL(){return this.getToken(o.COLLATE_SYMBOL,0)}DOT_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.DOT_SYMBOL):this.getToken(o.DOT_SYMBOL,e)};enterRule(e){e instanceof y&&e.enterJsonPathIdentifier(this)}exitRule(e){e instanceof y&&e.exitJsonPathIdentifier(this)}};c(k9,"JsonPathIdentifierContext");var $s=k9,F9=class F9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_dotIdentifier}DOT_SYMBOL(){return this.getToken(o.DOT_SYMBOL,0)}identifier(){return this.getTypedRuleContext(Z0,0)}enterRule(e){e instanceof y&&e.enterDotIdentifier(this)}exitRule(e){e instanceof y&&e.exitDotIdentifier(this)}};c(F9,"DotIdentifierContext");var Do=F9,H9=class H9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_ulong_number}INT_NUMBER(){return this.getToken(o.INT_NUMBER,0)}HEX_NUMBER(){return this.getToken(o.HEX_NUMBER,0)}DECIMAL_NUMBER(){return this.getToken(o.DECIMAL_NUMBER,0)}FLOAT_NUMBER(){return this.getToken(o.FLOAT_NUMBER,0)}enterRule(e){e instanceof y&&e.enterUlong_number(this)}exitRule(e){e instanceof y&&e.exitUlong_number(this)}};c(H9,"Ulong_numberContext");var zs=H9,V9=class V9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_real_ulong_number}INT_NUMBER(){return this.getToken(o.INT_NUMBER,0)}HEX_NUMBER(){return this.getToken(o.HEX_NUMBER,0)}enterRule(e){e instanceof y&&e.enterReal_ulong_number(this)}exitRule(e){e instanceof y&&e.exitReal_ulong_number(this)}};c(V9,"Real_ulong_numberContext");var ur=V9,G9=class G9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_ulonglong_number}INT_NUMBER(){return this.getToken(o.INT_NUMBER,0)}DECIMAL_NUMBER(){return this.getToken(o.DECIMAL_NUMBER,0)}FLOAT_NUMBER(){return this.getToken(o.FLOAT_NUMBER,0)}enterRule(e){e instanceof y&&e.enterUlonglong_number(this)}exitRule(e){e instanceof y&&e.exitUlonglong_number(this)}};c(G9,"Ulonglong_numberContext");var $i=G9,q9=class q9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_real_ulonglong_number}INT_NUMBER(){return this.getToken(o.INT_NUMBER,0)}HEX_NUMBER(){return this.getToken(o.HEX_NUMBER,0)}enterRule(e){e instanceof y&&e.enterReal_ulonglong_number(this)}exitRule(e){e instanceof y&&e.exitReal_ulonglong_number(this)}};c(q9,"Real_ulonglong_numberContext");var wo=q9,K9=class K9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_literal}textLiteral(){return this.getTypedRuleContext(Zs,0)}numLiteral(){return this.getTypedRuleContext(ko,0)}temporalLiteral(){return this.getTypedRuleContext(Vo,0)}nullLiteral(){return this.getTypedRuleContext(Ho,0)}boolLiteral(){return this.getTypedRuleContext(Fo,0)}HEX_NUMBER(){return this.getToken(o.HEX_NUMBER,0)}BIN_NUMBER(){return this.getToken(o.BIN_NUMBER,0)}UNDERSCORE_CHARSET(){return this.getToken(o.UNDERSCORE_CHARSET,0)}enterRule(e){e instanceof y&&e.enterLiteral(this)}exitRule(e){e instanceof y&&e.exitLiteral(this)}};c(K9,"LiteralContext");var Uo=K9,W9=class W9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_stringList}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}textString=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(tr):this.getTypedRuleContext(tr,e)};CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof y&&e.enterStringList(this)}exitRule(e){e instanceof y&&e.exitStringList(this)}};c(W9,"StringListContext");var Po=W9,j9=class j9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_textStringLiteral}SINGLE_QUOTED_TEXT(){return this.getToken(o.SINGLE_QUOTED_TEXT,0)}DOUBLE_QUOTED_TEXT(){return this.getToken(o.DOUBLE_QUOTED_TEXT,0)}enterRule(e){e instanceof y&&e.enterTextStringLiteral(this)}exitRule(e){e instanceof y&&e.exitTextStringLiteral(this)}};c(j9,"TextStringLiteralContext");var Lu=j9,X9=class X9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_textString}textStringLiteral(){return this.getTypedRuleContext(Lu,0)}HEX_NUMBER(){return this.getToken(o.HEX_NUMBER,0)}BIN_NUMBER(){return this.getToken(o.BIN_NUMBER,0)}enterRule(e){e instanceof y&&e.enterTextString(this)}exitRule(e){e instanceof y&&e.exitTextString(this)}};c(X9,"TextStringContext");var tr=X9,Q9=class Q9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_textLiteral}textStringLiteral=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Lu):this.getTypedRuleContext(Lu,e)};NCHAR_TEXT(){return this.getToken(o.NCHAR_TEXT,0)}UNDERSCORE_CHARSET(){return this.getToken(o.UNDERSCORE_CHARSET,0)}enterRule(e){e instanceof y&&e.enterTextLiteral(this)}exitRule(e){e instanceof y&&e.exitTextLiteral(this)}};c(Q9,"TextLiteralContext");var Zs=Q9,J9=class J9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_numLiteral}INT_NUMBER(){return this.getToken(o.INT_NUMBER,0)}DECIMAL_NUMBER(){return this.getToken(o.DECIMAL_NUMBER,0)}FLOAT_NUMBER(){return this.getToken(o.FLOAT_NUMBER,0)}enterRule(e){e instanceof y&&e.enterNumLiteral(this)}exitRule(e){e instanceof y&&e.exitNumLiteral(this)}};c(J9,"NumLiteralContext");var ko=J9,$9=class $9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_boolLiteral}TRUE_SYMBOL(){return this.getToken(o.TRUE_SYMBOL,0)}FALSE_SYMBOL(){return this.getToken(o.FALSE_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterBoolLiteral(this)}exitRule(e){e instanceof y&&e.exitBoolLiteral(this)}};c($9,"BoolLiteralContext");var Fo=$9,z9=class z9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_nullLiteral}NULL_SYMBOL(){return this.getToken(o.NULL_SYMBOL,0)}NULL2_SYMBOL(){return this.getToken(o.NULL2_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterNullLiteral(this)}exitRule(e){e instanceof y&&e.exitNullLiteral(this)}};c(z9,"NullLiteralContext");var Ho=z9,Z9=class Z9 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_temporalLiteral}DATE_SYMBOL(){return this.getToken(o.DATE_SYMBOL,0)}SINGLE_QUOTED_TEXT(){return this.getToken(o.SINGLE_QUOTED_TEXT,0)}TIME_SYMBOL(){return this.getToken(o.TIME_SYMBOL,0)}TIMESTAMP_SYMBOL(){return this.getToken(o.TIMESTAMP_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterTemporalLiteral(this)}exitRule(e){e instanceof y&&e.exitTemporalLiteral(this)}};c(Z9,"TemporalLiteralContext");var Vo=Z9,e7=class e7 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_floatOptions}fieldLength(){return this.getTypedRuleContext(Ws,0)}precision(){return this.getTypedRuleContext(en,0)}enterRule(e){e instanceof y&&e.enterFloatOptions(this)}exitRule(e){e instanceof y&&e.exitFloatOptions(this)}};c(e7,"FloatOptionsContext");var Go=e7,u7=class u7 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_precision}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}INT_NUMBER=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.INT_NUMBER):this.getToken(o.INT_NUMBER,e)};COMMA_SYMBOL(){return this.getToken(o.COMMA_SYMBOL,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterPrecision(this)}exitRule(e){e instanceof y&&e.exitPrecision(this)}};c(u7,"PrecisionContext");var en=u7,t7=class t7 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_textOrIdentifier}identifier(){return this.getTypedRuleContext(Z0,0)}textStringLiteral(){return this.getTypedRuleContext(Lu,0)}enterRule(e){e instanceof y&&e.enterTextOrIdentifier(this)}exitRule(e){e instanceof y&&e.exitTextOrIdentifier(this)}};c(t7,"TextOrIdentifierContext");var it=t7,r7=class r7 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_parentheses}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterParentheses(this)}exitRule(e){e instanceof y&&e.exitParentheses(this)}};c(r7,"ParenthesesContext");var un=r7,i7=class i7 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_equal}EQUAL_OPERATOR(){return this.getToken(o.EQUAL_OPERATOR,0)}ASSIGN_OPERATOR(){return this.getToken(o.ASSIGN_OPERATOR,0)}enterRule(e){e instanceof y&&e.enterEqual(this)}exitRule(e){e instanceof y&&e.exitEqual(this)}};c(i7,"EqualContext");var qo=i7,a7=class a7 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_varIdentType}GLOBAL_SYMBOL(){return this.getToken(o.GLOBAL_SYMBOL,0)}DOT_SYMBOL(){return this.getToken(o.DOT_SYMBOL,0)}LOCAL_SYMBOL(){return this.getToken(o.LOCAL_SYMBOL,0)}SESSION_SYMBOL(){return this.getToken(o.SESSION_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterVarIdentType(this)}exitRule(e){e instanceof y&&e.exitVarIdentType(this)}};c(a7,"VarIdentTypeContext");var Ko=a7,s7=class s7 extends B.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_identifierKeyword}TINYINT_SYMBOL(){return this.getToken(o.TINYINT_SYMBOL,0)}SMALLINT_SYMBOL(){return this.getToken(o.SMALLINT_SYMBOL,0)}MEDIUMINT_SYMBOL(){return this.getToken(o.MEDIUMINT_SYMBOL,0)}INT_SYMBOL(){return this.getToken(o.INT_SYMBOL,0)}BIGINT_SYMBOL(){return this.getToken(o.BIGINT_SYMBOL,0)}SECOND_SYMBOL(){return this.getToken(o.SECOND_SYMBOL,0)}MINUTE_SYMBOL(){return this.getToken(o.MINUTE_SYMBOL,0)}HOUR_SYMBOL(){return this.getToken(o.HOUR_SYMBOL,0)}DAY_SYMBOL(){return this.getToken(o.DAY_SYMBOL,0)}WEEK_SYMBOL(){return this.getToken(o.WEEK_SYMBOL,0)}MONTH_SYMBOL(){return this.getToken(o.MONTH_SYMBOL,0)}QUARTER_SYMBOL(){return this.getToken(o.QUARTER_SYMBOL,0)}YEAR_SYMBOL(){return this.getToken(o.YEAR_SYMBOL,0)}DEFAULT_SYMBOL(){return this.getToken(o.DEFAULT_SYMBOL,0)}UNION_SYMBOL(){return this.getToken(o.UNION_SYMBOL,0)}SELECT_SYMBOL(){return this.getToken(o.SELECT_SYMBOL,0)}ALL_SYMBOL(){return this.getToken(o.ALL_SYMBOL,0)}DISTINCT_SYMBOL(){return this.getToken(o.DISTINCT_SYMBOL,0)}STRAIGHT_JOIN_SYMBOL(){return this.getToken(o.STRAIGHT_JOIN_SYMBOL,0)}HIGH_PRIORITY_SYMBOL(){return this.getToken(o.HIGH_PRIORITY_SYMBOL,0)}SQL_SMALL_RESULT_SYMBOL(){return this.getToken(o.SQL_SMALL_RESULT_SYMBOL,0)}SQL_BIG_RESULT_SYMBOL(){return this.getToken(o.SQL_BIG_RESULT_SYMBOL,0)}SQL_BUFFER_RESULT_SYMBOL(){return this.getToken(o.SQL_BUFFER_RESULT_SYMBOL,0)}SQL_CALC_FOUND_ROWS_SYMBOL(){return this.getToken(o.SQL_CALC_FOUND_ROWS_SYMBOL,0)}LIMIT_SYMBOL(){return this.getToken(o.LIMIT_SYMBOL,0)}OFFSET_SYMBOL(){return this.getToken(o.OFFSET_SYMBOL,0)}INTO_SYMBOL(){return this.getToken(o.INTO_SYMBOL,0)}OUTFILE_SYMBOL(){return this.getToken(o.OUTFILE_SYMBOL,0)}DUMPFILE_SYMBOL(){return this.getToken(o.DUMPFILE_SYMBOL,0)}PROCEDURE_SYMBOL(){return this.getToken(o.PROCEDURE_SYMBOL,0)}ANALYSE_SYMBOL(){return this.getToken(o.ANALYSE_SYMBOL,0)}HAVING_SYMBOL(){return this.getToken(o.HAVING_SYMBOL,0)}WINDOW_SYMBOL(){return this.getToken(o.WINDOW_SYMBOL,0)}AS_SYMBOL(){return this.getToken(o.AS_SYMBOL,0)}PARTITION_SYMBOL(){return this.getToken(o.PARTITION_SYMBOL,0)}BY_SYMBOL(){return this.getToken(o.BY_SYMBOL,0)}ROWS_SYMBOL(){return this.getToken(o.ROWS_SYMBOL,0)}RANGE_SYMBOL(){return this.getToken(o.RANGE_SYMBOL,0)}GROUPS_SYMBOL(){return this.getToken(o.GROUPS_SYMBOL,0)}UNBOUNDED_SYMBOL(){return this.getToken(o.UNBOUNDED_SYMBOL,0)}PRECEDING_SYMBOL(){return this.getToken(o.PRECEDING_SYMBOL,0)}INTERVAL_SYMBOL(){return this.getToken(o.INTERVAL_SYMBOL,0)}CURRENT_SYMBOL(){return this.getToken(o.CURRENT_SYMBOL,0)}ROW_SYMBOL(){return this.getToken(o.ROW_SYMBOL,0)}BETWEEN_SYMBOL(){return this.getToken(o.BETWEEN_SYMBOL,0)}AND_SYMBOL(){return this.getToken(o.AND_SYMBOL,0)}FOLLOWING_SYMBOL(){return this.getToken(o.FOLLOWING_SYMBOL,0)}EXCLUDE_SYMBOL(){return this.getToken(o.EXCLUDE_SYMBOL,0)}GROUP_SYMBOL(){return this.getToken(o.GROUP_SYMBOL,0)}TIES_SYMBOL(){return this.getToken(o.TIES_SYMBOL,0)}NO_SYMBOL(){return this.getToken(o.NO_SYMBOL,0)}OTHERS_SYMBOL(){return this.getToken(o.OTHERS_SYMBOL,0)}WITH_SYMBOL(){return this.getToken(o.WITH_SYMBOL,0)}RECURSIVE_SYMBOL(){return this.getToken(o.RECURSIVE_SYMBOL,0)}ROLLUP_SYMBOL(){return this.getToken(o.ROLLUP_SYMBOL,0)}CUBE_SYMBOL(){return this.getToken(o.CUBE_SYMBOL,0)}ORDER_SYMBOL(){return this.getToken(o.ORDER_SYMBOL,0)}ASC_SYMBOL(){return this.getToken(o.ASC_SYMBOL,0)}DESC_SYMBOL(){return this.getToken(o.DESC_SYMBOL,0)}FROM_SYMBOL(){return this.getToken(o.FROM_SYMBOL,0)}DUAL_SYMBOL(){return this.getToken(o.DUAL_SYMBOL,0)}VALUES_SYMBOL(){return this.getToken(o.VALUES_SYMBOL,0)}TABLE_SYMBOL(){return this.getToken(o.TABLE_SYMBOL,0)}SQL_NO_CACHE_SYMBOL(){return this.getToken(o.SQL_NO_CACHE_SYMBOL,0)}SQL_CACHE_SYMBOL(){return this.getToken(o.SQL_CACHE_SYMBOL,0)}MAX_STATEMENT_TIME_SYMBOL(){return this.getToken(o.MAX_STATEMENT_TIME_SYMBOL,0)}FOR_SYMBOL(){return this.getToken(o.FOR_SYMBOL,0)}OF_SYMBOL(){return this.getToken(o.OF_SYMBOL,0)}LOCK_SYMBOL(){return this.getToken(o.LOCK_SYMBOL,0)}IN_SYMBOL(){return this.getToken(o.IN_SYMBOL,0)}SHARE_SYMBOL(){return this.getToken(o.SHARE_SYMBOL,0)}MODE_SYMBOL(){return this.getToken(o.MODE_SYMBOL,0)}UPDATE_SYMBOL(){return this.getToken(o.UPDATE_SYMBOL,0)}SKIP_SYMBOL(){return this.getToken(o.SKIP_SYMBOL,0)}LOCKED_SYMBOL(){return this.getToken(o.LOCKED_SYMBOL,0)}NOWAIT_SYMBOL(){return this.getToken(o.NOWAIT_SYMBOL,0)}WHERE_SYMBOL(){return this.getToken(o.WHERE_SYMBOL,0)}OJ_SYMBOL(){return this.getToken(o.OJ_SYMBOL,0)}ON_SYMBOL(){return this.getToken(o.ON_SYMBOL,0)}USING_SYMBOL(){return this.getToken(o.USING_SYMBOL,0)}NATURAL_SYMBOL(){return this.getToken(o.NATURAL_SYMBOL,0)}INNER_SYMBOL(){return this.getToken(o.INNER_SYMBOL,0)}JOIN_SYMBOL(){return this.getToken(o.JOIN_SYMBOL,0)}LEFT_SYMBOL(){return this.getToken(o.LEFT_SYMBOL,0)}RIGHT_SYMBOL(){return this.getToken(o.RIGHT_SYMBOL,0)}OUTER_SYMBOL(){return this.getToken(o.OUTER_SYMBOL,0)}CROSS_SYMBOL(){return this.getToken(o.CROSS_SYMBOL,0)}LATERAL_SYMBOL(){return this.getToken(o.LATERAL_SYMBOL,0)}JSON_TABLE_SYMBOL(){return this.getToken(o.JSON_TABLE_SYMBOL,0)}COLUMNS_SYMBOL(){return this.getToken(o.COLUMNS_SYMBOL,0)}ORDINALITY_SYMBOL(){return this.getToken(o.ORDINALITY_SYMBOL,0)}EXISTS_SYMBOL(){return this.getToken(o.EXISTS_SYMBOL,0)}PATH_SYMBOL(){return this.getToken(o.PATH_SYMBOL,0)}NESTED_SYMBOL(){return this.getToken(o.NESTED_SYMBOL,0)}EMPTY_SYMBOL(){return this.getToken(o.EMPTY_SYMBOL,0)}ERROR_SYMBOL(){return this.getToken(o.ERROR_SYMBOL,0)}NULL_SYMBOL(){return this.getToken(o.NULL_SYMBOL,0)}USE_SYMBOL(){return this.getToken(o.USE_SYMBOL,0)}FORCE_SYMBOL(){return this.getToken(o.FORCE_SYMBOL,0)}IGNORE_SYMBOL(){return this.getToken(o.IGNORE_SYMBOL,0)}KEY_SYMBOL(){return this.getToken(o.KEY_SYMBOL,0)}INDEX_SYMBOL(){return this.getToken(o.INDEX_SYMBOL,0)}PRIMARY_SYMBOL(){return this.getToken(o.PRIMARY_SYMBOL,0)}IS_SYMBOL(){return this.getToken(o.IS_SYMBOL,0)}TRUE_SYMBOL(){return this.getToken(o.TRUE_SYMBOL,0)}FALSE_SYMBOL(){return this.getToken(o.FALSE_SYMBOL,0)}UNKNOWN_SYMBOL(){return this.getToken(o.UNKNOWN_SYMBOL,0)}NOT_SYMBOL(){return this.getToken(o.NOT_SYMBOL,0)}XOR_SYMBOL(){return this.getToken(o.XOR_SYMBOL,0)}OR_SYMBOL(){return this.getToken(o.OR_SYMBOL,0)}ANY_SYMBOL(){return this.getToken(o.ANY_SYMBOL,0)}MEMBER_SYMBOL(){return this.getToken(o.MEMBER_SYMBOL,0)}SOUNDS_SYMBOL(){return this.getToken(o.SOUNDS_SYMBOL,0)}LIKE_SYMBOL(){return this.getToken(o.LIKE_SYMBOL,0)}ESCAPE_SYMBOL(){return this.getToken(o.ESCAPE_SYMBOL,0)}REGEXP_SYMBOL(){return this.getToken(o.REGEXP_SYMBOL,0)}DIV_SYMBOL(){return this.getToken(o.DIV_SYMBOL,0)}MOD_SYMBOL(){return this.getToken(o.MOD_SYMBOL,0)}MATCH_SYMBOL(){return this.getToken(o.MATCH_SYMBOL,0)}AGAINST_SYMBOL(){return this.getToken(o.AGAINST_SYMBOL,0)}BINARY_SYMBOL(){return this.getToken(o.BINARY_SYMBOL,0)}CAST_SYMBOL(){return this.getToken(o.CAST_SYMBOL,0)}ARRAY_SYMBOL(){return this.getToken(o.ARRAY_SYMBOL,0)}CASE_SYMBOL(){return this.getToken(o.CASE_SYMBOL,0)}END_SYMBOL(){return this.getToken(o.END_SYMBOL,0)}CONVERT_SYMBOL(){return this.getToken(o.CONVERT_SYMBOL,0)}COLLATE_SYMBOL(){return this.getToken(o.COLLATE_SYMBOL,0)}AVG_SYMBOL(){return this.getToken(o.AVG_SYMBOL,0)}BIT_AND_SYMBOL(){return this.getToken(o.BIT_AND_SYMBOL,0)}BIT_OR_SYMBOL(){return this.getToken(o.BIT_OR_SYMBOL,0)}BIT_XOR_SYMBOL(){return this.getToken(o.BIT_XOR_SYMBOL,0)}COUNT_SYMBOL(){return this.getToken(o.COUNT_SYMBOL,0)}MIN_SYMBOL(){return this.getToken(o.MIN_SYMBOL,0)}MAX_SYMBOL(){return this.getToken(o.MAX_SYMBOL,0)}STD_SYMBOL(){return this.getToken(o.STD_SYMBOL,0)}VARIANCE_SYMBOL(){return this.getToken(o.VARIANCE_SYMBOL,0)}STDDEV_SAMP_SYMBOL(){return this.getToken(o.STDDEV_SAMP_SYMBOL,0)}VAR_SAMP_SYMBOL(){return this.getToken(o.VAR_SAMP_SYMBOL,0)}SUM_SYMBOL(){return this.getToken(o.SUM_SYMBOL,0)}GROUP_CONCAT_SYMBOL(){return this.getToken(o.GROUP_CONCAT_SYMBOL,0)}SEPARATOR_SYMBOL(){return this.getToken(o.SEPARATOR_SYMBOL,0)}GROUPING_SYMBOL(){return this.getToken(o.GROUPING_SYMBOL,0)}ROW_NUMBER_SYMBOL(){return this.getToken(o.ROW_NUMBER_SYMBOL,0)}RANK_SYMBOL(){return this.getToken(o.RANK_SYMBOL,0)}DENSE_RANK_SYMBOL(){return this.getToken(o.DENSE_RANK_SYMBOL,0)}CUME_DIST_SYMBOL(){return this.getToken(o.CUME_DIST_SYMBOL,0)}PERCENT_RANK_SYMBOL(){return this.getToken(o.PERCENT_RANK_SYMBOL,0)}NTILE_SYMBOL(){return this.getToken(o.NTILE_SYMBOL,0)}LEAD_SYMBOL(){return this.getToken(o.LEAD_SYMBOL,0)}LAG_SYMBOL(){return this.getToken(o.LAG_SYMBOL,0)}FIRST_VALUE_SYMBOL(){return this.getToken(o.FIRST_VALUE_SYMBOL,0)}LAST_VALUE_SYMBOL(){return this.getToken(o.LAST_VALUE_SYMBOL,0)}NTH_VALUE_SYMBOL(){return this.getToken(o.NTH_VALUE_SYMBOL,0)}FIRST_SYMBOL(){return this.getToken(o.FIRST_SYMBOL,0)}LAST_SYMBOL(){return this.getToken(o.LAST_SYMBOL,0)}OVER_SYMBOL(){return this.getToken(o.OVER_SYMBOL,0)}RESPECT_SYMBOL(){return this.getToken(o.RESPECT_SYMBOL,0)}NULLS_SYMBOL(){return this.getToken(o.NULLS_SYMBOL,0)}JSON_ARRAYAGG_SYMBOL(){return this.getToken(o.JSON_ARRAYAGG_SYMBOL,0)}JSON_OBJECTAGG_SYMBOL(){return this.getToken(o.JSON_OBJECTAGG_SYMBOL,0)}BOOLEAN_SYMBOL(){return this.getToken(o.BOOLEAN_SYMBOL,0)}LANGUAGE_SYMBOL(){return this.getToken(o.LANGUAGE_SYMBOL,0)}QUERY_SYMBOL(){return this.getToken(o.QUERY_SYMBOL,0)}EXPANSION_SYMBOL(){return this.getToken(o.EXPANSION_SYMBOL,0)}CHAR_SYMBOL(){return this.getToken(o.CHAR_SYMBOL,0)}CURRENT_USER_SYMBOL(){return this.getToken(o.CURRENT_USER_SYMBOL,0)}DATE_SYMBOL(){return this.getToken(o.DATE_SYMBOL,0)}INSERT_SYMBOL(){return this.getToken(o.INSERT_SYMBOL,0)}TIME_SYMBOL(){return this.getToken(o.TIME_SYMBOL,0)}TIMESTAMP_SYMBOL(){return this.getToken(o.TIMESTAMP_SYMBOL,0)}USER_SYMBOL(){return this.getToken(o.USER_SYMBOL,0)}ADDDATE_SYMBOL(){return this.getToken(o.ADDDATE_SYMBOL,0)}SUBDATE_SYMBOL(){return this.getToken(o.SUBDATE_SYMBOL,0)}CURDATE_SYMBOL(){return this.getToken(o.CURDATE_SYMBOL,0)}CURTIME_SYMBOL(){return this.getToken(o.CURTIME_SYMBOL,0)}DATE_ADD_SYMBOL(){return this.getToken(o.DATE_ADD_SYMBOL,0)}DATE_SUB_SYMBOL(){return this.getToken(o.DATE_SUB_SYMBOL,0)}EXTRACT_SYMBOL(){return this.getToken(o.EXTRACT_SYMBOL,0)}GET_FORMAT_SYMBOL(){return this.getToken(o.GET_FORMAT_SYMBOL,0)}NOW_SYMBOL(){return this.getToken(o.NOW_SYMBOL,0)}POSITION_SYMBOL(){return this.getToken(o.POSITION_SYMBOL,0)}SYSDATE_SYMBOL(){return this.getToken(o.SYSDATE_SYMBOL,0)}TIMESTAMP_ADD_SYMBOL(){return this.getToken(o.TIMESTAMP_ADD_SYMBOL,0)}TIMESTAMP_DIFF_SYMBOL(){return this.getToken(o.TIMESTAMP_DIFF_SYMBOL,0)}UTC_DATE_SYMBOL(){return this.getToken(o.UTC_DATE_SYMBOL,0)}UTC_TIME_SYMBOL(){return this.getToken(o.UTC_TIME_SYMBOL,0)}UTC_TIMESTAMP_SYMBOL(){return this.getToken(o.UTC_TIMESTAMP_SYMBOL,0)}ASCII_SYMBOL(){return this.getToken(o.ASCII_SYMBOL,0)}CHARSET_SYMBOL(){return this.getToken(o.CHARSET_SYMBOL,0)}COALESCE_SYMBOL(){return this.getToken(o.COALESCE_SYMBOL,0)}COLLATION_SYMBOL(){return this.getToken(o.COLLATION_SYMBOL,0)}DATABASE_SYMBOL(){return this.getToken(o.DATABASE_SYMBOL,0)}IF_SYMBOL(){return this.getToken(o.IF_SYMBOL,0)}FORMAT_SYMBOL(){return this.getToken(o.FORMAT_SYMBOL,0)}MICROSECOND_SYMBOL(){return this.getToken(o.MICROSECOND_SYMBOL,0)}OLD_PASSWORD_SYMBOL(){return this.getToken(o.OLD_PASSWORD_SYMBOL,0)}PASSWORD_SYMBOL(){return this.getToken(o.PASSWORD_SYMBOL,0)}REPEAT_SYMBOL(){return this.getToken(o.REPEAT_SYMBOL,0)}REPLACE_SYMBOL(){return this.getToken(o.REPLACE_SYMBOL,0)}REVERSE_SYMBOL(){return this.getToken(o.REVERSE_SYMBOL,0)}ROW_COUNT_SYMBOL(){return this.getToken(o.ROW_COUNT_SYMBOL,0)}TRUNCATE_SYMBOL(){return this.getToken(o.TRUNCATE_SYMBOL,0)}WEIGHT_STRING_SYMBOL(){return this.getToken(o.WEIGHT_STRING_SYMBOL,0)}CONTAINS_SYMBOL(){return this.getToken(o.CONTAINS_SYMBOL,0)}GEOMETRYCOLLECTION_SYMBOL(){return this.getToken(o.GEOMETRYCOLLECTION_SYMBOL,0)}LINESTRING_SYMBOL(){return this.getToken(o.LINESTRING_SYMBOL,0)}MULTILINESTRING_SYMBOL(){return this.getToken(o.MULTILINESTRING_SYMBOL,0)}MULTIPOINT_SYMBOL(){return this.getToken(o.MULTIPOINT_SYMBOL,0)}MULTIPOLYGON_SYMBOL(){return this.getToken(o.MULTIPOLYGON_SYMBOL,0)}POINT_SYMBOL(){return this.getToken(o.POINT_SYMBOL,0)}POLYGON_SYMBOL(){return this.getToken(o.POLYGON_SYMBOL,0)}LEVEL_SYMBOL(){return this.getToken(o.LEVEL_SYMBOL,0)}DATETIME_SYMBOL(){return this.getToken(o.DATETIME_SYMBOL,0)}TRIM_SYMBOL(){return this.getToken(o.TRIM_SYMBOL,0)}LEADING_SYMBOL(){return this.getToken(o.LEADING_SYMBOL,0)}TRAILING_SYMBOL(){return this.getToken(o.TRAILING_SYMBOL,0)}BOTH_SYMBOL(){return this.getToken(o.BOTH_SYMBOL,0)}SUBSTRING_SYMBOL(){return this.getToken(o.SUBSTRING_SYMBOL,0)}WHEN_SYMBOL(){return this.getToken(o.WHEN_SYMBOL,0)}THEN_SYMBOL(){return this.getToken(o.THEN_SYMBOL,0)}ELSE_SYMBOL(){return this.getToken(o.ELSE_SYMBOL,0)}SIGNED_SYMBOL(){return this.getToken(o.SIGNED_SYMBOL,0)}UNSIGNED_SYMBOL(){return this.getToken(o.UNSIGNED_SYMBOL,0)}DECIMAL_SYMBOL(){return this.getToken(o.DECIMAL_SYMBOL,0)}JSON_SYMBOL(){return this.getToken(o.JSON_SYMBOL,0)}FLOAT_SYMBOL(){return this.getToken(o.FLOAT_SYMBOL,0)}SET_SYMBOL(){return this.getToken(o.SET_SYMBOL,0)}SECOND_MICROSECOND_SYMBOL(){return this.getToken(o.SECOND_MICROSECOND_SYMBOL,0)}MINUTE_MICROSECOND_SYMBOL(){return this.getToken(o.MINUTE_MICROSECOND_SYMBOL,0)}MINUTE_SECOND_SYMBOL(){return this.getToken(o.MINUTE_SECOND_SYMBOL,0)}HOUR_MICROSECOND_SYMBOL(){return this.getToken(o.HOUR_MICROSECOND_SYMBOL,0)}HOUR_SECOND_SYMBOL(){return this.getToken(o.HOUR_SECOND_SYMBOL,0)}HOUR_MINUTE_SYMBOL(){return this.getToken(o.HOUR_MINUTE_SYMBOL,0)}DAY_MICROSECOND_SYMBOL(){return this.getToken(o.DAY_MICROSECOND_SYMBOL,0)}DAY_SECOND_SYMBOL(){return this.getToken(o.DAY_SECOND_SYMBOL,0)}DAY_MINUTE_SYMBOL(){return this.getToken(o.DAY_MINUTE_SYMBOL,0)}DAY_HOUR_SYMBOL(){return this.getToken(o.DAY_HOUR_SYMBOL,0)}YEAR_MONTH_SYMBOL(){return this.getToken(o.YEAR_MONTH_SYMBOL,0)}BTREE_SYMBOL(){return this.getToken(o.BTREE_SYMBOL,0)}RTREE_SYMBOL(){return this.getToken(o.RTREE_SYMBOL,0)}HASH_SYMBOL(){return this.getToken(o.HASH_SYMBOL,0)}REAL_SYMBOL(){return this.getToken(o.REAL_SYMBOL,0)}DOUBLE_SYMBOL(){return this.getToken(o.DOUBLE_SYMBOL,0)}PRECISION_SYMBOL(){return this.getToken(o.PRECISION_SYMBOL,0)}NUMERIC_SYMBOL(){return this.getToken(o.NUMERIC_SYMBOL,0)}FIXED_SYMBOL(){return this.getToken(o.FIXED_SYMBOL,0)}BIT_SYMBOL(){return this.getToken(o.BIT_SYMBOL,0)}BOOL_SYMBOL(){return this.getToken(o.BOOL_SYMBOL,0)}VARYING_SYMBOL(){return this.getToken(o.VARYING_SYMBOL,0)}VARCHAR_SYMBOL(){return this.getToken(o.VARCHAR_SYMBOL,0)}VARCHAR2_SYMBOL(){return this.getToken(o.VARCHAR2_SYMBOL,0)}NATIONAL_SYMBOL(){return this.getToken(o.NATIONAL_SYMBOL,0)}NVARCHAR_SYMBOL(){return this.getToken(o.NVARCHAR_SYMBOL,0)}NVARCHAR2_SYMBOL(){return this.getToken(o.NVARCHAR2_SYMBOL,0)}NCHAR_SYMBOL(){return this.getToken(o.NCHAR_SYMBOL,0)}VARBINARY_SYMBOL(){return this.getToken(o.VARBINARY_SYMBOL,0)}TINYBLOB_SYMBOL(){return this.getToken(o.TINYBLOB_SYMBOL,0)}BLOB_SYMBOL(){return this.getToken(o.BLOB_SYMBOL,0)}CLOB_SYMBOL(){return this.getToken(o.CLOB_SYMBOL,0)}BFILE_SYMBOL(){return this.getToken(o.BFILE_SYMBOL,0)}RAW_SYMBOL(){return this.getToken(o.RAW_SYMBOL,0)}MEDIUMBLOB_SYMBOL(){return this.getToken(o.MEDIUMBLOB_SYMBOL,0)}LONGBLOB_SYMBOL(){return this.getToken(o.LONGBLOB_SYMBOL,0)}LONG_SYMBOL(){return this.getToken(o.LONG_SYMBOL,0)}TINYTEXT_SYMBOL(){return this.getToken(o.TINYTEXT_SYMBOL,0)}TEXT_SYMBOL(){return this.getToken(o.TEXT_SYMBOL,0)}MEDIUMTEXT_SYMBOL(){return this.getToken(o.MEDIUMTEXT_SYMBOL,0)}LONGTEXT_SYMBOL(){return this.getToken(o.LONGTEXT_SYMBOL,0)}ENUM_SYMBOL(){return this.getToken(o.ENUM_SYMBOL,0)}SERIAL_SYMBOL(){return this.getToken(o.SERIAL_SYMBOL,0)}GEOMETRY_SYMBOL(){return this.getToken(o.GEOMETRY_SYMBOL,0)}ZEROFILL_SYMBOL(){return this.getToken(o.ZEROFILL_SYMBOL,0)}BYTE_SYMBOL(){return this.getToken(o.BYTE_SYMBOL,0)}UNICODE_SYMBOL(){return this.getToken(o.UNICODE_SYMBOL,0)}TERMINATED_SYMBOL(){return this.getToken(o.TERMINATED_SYMBOL,0)}OPTIONALLY_SYMBOL(){return this.getToken(o.OPTIONALLY_SYMBOL,0)}ENCLOSED_SYMBOL(){return this.getToken(o.ENCLOSED_SYMBOL,0)}ESCAPED_SYMBOL(){return this.getToken(o.ESCAPED_SYMBOL,0)}LINES_SYMBOL(){return this.getToken(o.LINES_SYMBOL,0)}STARTING_SYMBOL(){return this.getToken(o.STARTING_SYMBOL,0)}GLOBAL_SYMBOL(){return this.getToken(o.GLOBAL_SYMBOL,0)}LOCAL_SYMBOL(){return this.getToken(o.LOCAL_SYMBOL,0)}SESSION_SYMBOL(){return this.getToken(o.SESSION_SYMBOL,0)}BYTE_INT_SYMBOL(){return this.getToken(o.BYTE_INT_SYMBOL,0)}WITHOUT_SYMBOL(){return this.getToken(o.WITHOUT_SYMBOL,0)}TIMESTAMP_LTZ_SYMBOL(){return this.getToken(o.TIMESTAMP_LTZ_SYMBOL,0)}TIMESTAMP_NTZ_SYMBOL(){return this.getToken(o.TIMESTAMP_NTZ_SYMBOL,0)}ZONE_SYMBOL(){return this.getToken(o.ZONE_SYMBOL,0)}STRING_SYMBOL(){return this.getToken(o.STRING_SYMBOL,0)}FLOAT_SYMBOL_4(){return this.getToken(o.FLOAT_SYMBOL_4,0)}FLOAT_SYMBOL_8(){return this.getToken(o.FLOAT_SYMBOL_8,0)}NUMBER_SYMBOL(){return this.getToken(o.NUMBER_SYMBOL,0)}VARIANT_SYMBOL(){return this.getToken(o.VARIANT_SYMBOL,0)}OBJECT_SYMBOL(){return this.getToken(o.OBJECT_SYMBOL,0)}GEOGRAPHY_SYMBOL(){return this.getToken(o.GEOGRAPHY_SYMBOL,0)}enterRule(e){e instanceof y&&e.enterIdentifierKeyword(this)}exitRule(e){e instanceof y&&e.exitIdentifierKeyword(this)}};c(s7,"IdentifierKeywordContext");var Wo=s7;o.QueryContext=i2;o.ValuesContext=a2;o.SelectStatementContext=s2;o.SelectStatementWithIntoContext=n2;o.QueryExpressionContext=wi;o.QueryExpressionBodyContext=o2;o.QueryExpressionParensContext=zt;o.QueryPrimaryContext=ps;o.QuerySpecificationContext=l2;o.SubqueryContext=Zt;o.QuerySpecOptionContext=c2;o.LimitClauseContext=d2;o.LimitOptionsContext=p2;o.LimitOptionContext=hs;o.IntoClauseContext=fs;o.ProcedureAnalyseClauseContext=h2;o.HavingClauseContext=f2;o.WindowClauseContext=S2;o.WindowDefinitionContext=Ss;o.WindowSpecContext=Os;o.WindowSpecDetailsContext=O2;o.WindowFrameClauseContext=L2;o.WindowFrameUnitsContext=E2;o.WindowFrameExtentContext=m2;o.WindowFrameStartContext=Ls;o.WindowFrameBetweenContext=B2;o.WindowFrameBoundContext=Es;o.WindowFrameExclusionContext=M2;o.WithClauseContext=ms;o.CommonTableExpressionContext=Bs;o.GroupByClauseContext=T2;o.OlapOptionContext=_2;o.OrderClauseContext=Ui;o.DirectionContext=A2;o.FromClauseContext=Y2;o.TableReferenceListContext=Ms;o.TableValueConstructorContext=R2;o.ExplicitTableContext=g2;o.RowValueExplicitContext=Ts;o.SelectOptionContext=_s;o.LockingClauseListContext=Pi;o.LockingClauseContext=As;o.LockStrenghContext=y2;o.LockedRowActionContext=N2;o.SelectItemListContext=C2;o.SelectItemContext=ki;o.SelectAliasContext=Ys;o.WhereClauseContext=Fi;o.QualifyClauseContext=I2;o.TableReferenceContext=Hi;o.EscapedTableReferenceContext=b2;o.JoinedTableContext=Xr;o.NaturalJoinTypeContext=x2;o.InnerJoinTypeContext=v2;o.OuterJoinTypeContext=D2;o.TableFactorContext=Vi;o.SingleTableContext=Rs;o.SingleTableParensContext=w2;o.DerivedTableContext=U2;o.TableReferenceListParensContext=P2;o.TableFunctionContext=k2;o.ColumnsClauseContext=gs;o.JtColumnContext=ys;o.OnEmptyOrErrorContext=F2;o.OnEmptyContext=H2;o.OnErrorContext=V2;o.JtOnResponseContext=Ns;o.UnionOptionContext=Cs;o.TableAliasContext=Gi;o.IndexHintListContext=G2;o.IndexHintContext=Is;o.IndexHintTypeContext=q2;o.KeyOrIndexContext=K2;o.IndexHintClauseContext=W2;o.IndexListContext=j2;o.IndexListElementContext=bs;o.ExprContext=R0;o.BoolPriContext=jr;o.CompOpContext=X2;o.PredicateContext=xs;o.PredicateOperationsContext=Q2;o.BitExprContext=pu;o.SimpleExprContext=Hu;o.JsonOperatorContext=J2;o.SumExprContext=$2;o.GroupingOperationContext=z2;o.WindowFunctionCallContext=Z2;o.WindowingClauseContext=qi;o.LeadLagInfoContext=eo;o.NullTreatmentContext=vs;o.JsonFunctionContext=uo;o.InSumExprContext=Ki;o.IdentListArgContext=to;o.IdentListContext=ro;o.FulltextOptionsContext=io;o.RuntimeFunctionCallContext=ao;o.GeometryFunctionContext=so;o.TimeFunctionParametersContext=no;o.FractionalPrecisionContext=oo;o.WeightStringLevelsContext=lo;o.WeightStringLevelListItemContext=Ds;o.DateTimeTtypeContext=co;o.TrimFunctionContext=po;o.SubstringFunctionContext=ho;o.FunctionCallContext=fo;o.UdfExprListContext=So;o.UdfExprContext=ws;o.UnpivotClauseContext=Us;o.VariableContext=Oo;o.UserVariableContext=Wi;o.SystemVariableContext=Lo;o.WhenExpressionContext=Ps;o.ThenExpressionContext=ks;o.ElseExpressionContext=Eo;o.ExprListContext=Vu;o.CharsetContext=Fs;o.NotRuleContext=ji;o.Not2RuleContext=mo;o.IntervalContext=er;o.IntervalTimeStampContext=Hs;o.ExprListWithParenthesesContext=Vs;o.ExprWithParenthesesContext=Gs;o.SimpleExprWithParenthesesContext=qs;o.OrderListContext=Xi;o.OrderExpressionContext=Ks;o.IndexTypeContext=Op;o.DataTypeContext=Qi;o.NcharContext=Bo;o.FieldLengthContext=Ws;o.FieldOptionsContext=Mo;o.CharsetWithOptBinaryContext=To;o.AsciiContext=_o;o.UnicodeContext=Ao;o.WsNumCodepointsContext=Yo;o.TypeDatetimePrecisionContext=Ro;o.CharsetNameContext=Qr;o.CollationNameContext=go;o.CollateContext=yo;o.CharsetClauseContext=No;o.FieldsClauseContext=Co;o.FieldTermContext=js;o.LinesClauseContext=Io;o.LineTermContext=Xs;o.UsePartitionContext=bo;o.ColumnInternalRefListContext=Qs;o.TableAliasRefListContext=xo;o.PureIdentifierContext=Js;o.IdentifierContext=Z0;o.IdentifierListContext=vo;o.IdentifierListWithParenthesesContext=Ji;o.QualifiedIdentifierContext=$e;o.JsonPathIdentifierContext=$s;o.DotIdentifierContext=Do;o.Ulong_numberContext=zs;o.Real_ulong_numberContext=ur;o.Ulonglong_numberContext=$i;o.Real_ulonglong_numberContext=wo;o.LiteralContext=Uo;o.StringListContext=Po;o.TextStringLiteralContext=Lu;o.TextStringContext=tr;o.TextLiteralContext=Zs;o.NumLiteralContext=ko;o.BoolLiteralContext=Fo;o.NullLiteralContext=Ho;o.TemporalLiteralContext=Vo;o.FloatOptionsContext=Go;o.PrecisionContext=en;o.TextOrIdentifierContext=it;o.ParenthesesContext=un;o.EqualContext=qo;o.VarIdentTypeContext=Ko;o.IdentifierKeywordContext=Wo;ay.exports=o});var ly=v((M00,oy)=>{var gq=t8(),o7=class o7 extends gq{constructor(e){super(),this.parser=e,this.result=null,this.fieldReferences=[],this.expressionState=null}getResult(){return this.result}setResult(e){this.result=e}isAllSelected(e){var u;return((u=e==null?void 0:e[0])==null?void 0:u.name)==="*"}findParentContextsToSkip(e){let u=[this.parser.ruleNames.findIndex(r=>r==="joinedTable"),this.parser.ruleNames.findIndex(r=>r==="withClause")];return this.findParent(e,u)}findParent(e,u){return e.parentCtx?u.includes(e.parentCtx.ruleIndex)?e.parentCtx:this.findParent(e.parentCtx,u):null}exitQuerySpecification(e){let u=e.selectItemList().fields||[];this.findParentContextsToSkip(e)||this.result&&this.isAllSelected(u)||this.setResult({selectItems:e.selectItemList().fields||[],from:(e.fromClause()||{}).tableList||[]})}exitSelectItemList(e){let u=e.MULT_OPERATOR(),r=e.selectItem()||[];e.fields=r.map(a=>{let{name:s,tableName:n,schemaName:l,databaseName:d}=ny(a.identifier);return{name:s,tableName:n,schemaName:l,databaseName:d,originalName:a.originalName,alias:a.alias,fieldReferences:yq(a.fieldReferences)}}).filter(Boolean),u&&(e.fields=[{name:"*"},...e.fields])}exitSelectItem(e){let u=e.qualifiedIdentifier()||e.jsonPathIdentifier();if(e.alias=(e.selectAlias()||{}).alias,u){e.identifier=u.identifier,e.originalName=u.originalName;return}e.fieldReferences=e.expr().fieldReferences}exitJsonPathIdentifier(e){let u=e.identifier(),r=e.qualifiedIdentifier().identifier,a=u.map(s=>s.getText())||[];e.originalName=a.join("."),e.identifier=[...r,a[a.length-1]].map(Tp),!u.some(s=>{var n,l,d,p;return((l=(n=s.identifierKeyword)==null?void 0:n.call(s))==null?void 0:l.NULL_SYMBOL())||((p=(d=s.identifierKeyword)==null?void 0:d.call(s))==null?void 0:p.DISTINCT_SYMBOL())})&&this.fieldReferences.push(e.identifier[e.identifier.length-1])}enterExpr(e){this.expressionState||(this.fieldReferences=[],this.expressionState=e.invokingState)}exitExpr(e){this.expressionState===e.invokingState&&(e.fieldReferences=this.fieldReferences,this.fieldReferences=[],this.expressionState=null)}exitSelectAlias(e){e.alias=Tp((e.identifier()||e.textStringLiteral()).getText())}exitTableWild(e){let{identifier:u,originalName:r}=e.qualifiedIdentifier();e.identifier=u,e.originalName=r}exitQualifiedIdentifier(e){let u=e.identifier(),r=u.map(a=>a.getText())||[];e.MULT_OPERATOR()&&r.push("*"),e.originalName=r[r.length-1],e.identifier=r.map(Tp),!u.some(a=>{var s,n,l,d;return((n=(s=a.identifierKeyword)==null?void 0:s.call(a))==null?void 0:n.NULL_SYMBOL())||((d=(l=a.identifierKeyword)==null?void 0:l.call(a))==null?void 0:d.DISTINCT_SYMBOL())})&&this.fieldReferences.push(e.identifier[e.identifier.length-1])}exitFromClause(e){e.tableList=(e.tableReferenceList()||{}).tableList||[]}exitTableReferenceList(e){e.tableList=e.tableReference().flatMap(u=>u.tables)}exitTableReference(e){e.tables=(e.tableFactor()||e.escapedTableReference()).tables;let u=e.joinedTable()||[];e.tables=[...e.tables,...u.flatMap(r=>r.tables)]}exitJoinedTable(e){e.tables=(e.tableReference()||e.tableFactor()).tables}exitEscapedTableReference(e){e.tables=e.tableFactor().tables;let u=e.joinedTable()||[];e.tables=[...e.tables,...u.flatMap(r=>r.tables)]}exitTableFactor(e){let u=e.singleTable()||e.singleTableParens();if(u){e.tables=[{table:u.table,schemaName:u.schemaName,databaseName:u.databaseName,originalName:u.originalName,alias:u.alias}];return}let r=e.tableReferenceListParens();if(!r){e.tables=[];return}e.tables=r.tableList}exitSingleTable(e){let{originalName:u,identifier:r}=e.qualifiedIdentifier(),{tableName:a,schemaName:s,databaseName:n}=ny([...r||[],"column"]);e.table=a,e.schemaName=s,e.databaseName=n,e.originalName=u,e.alias=(e.tableAlias()||{}).alias}exitSingleTableParens(e){let u=e.singleTable()||e.singleTableParens();e.table=u.table,e.schemaName=u.schemaName,e.databaseName=u.databaseName,e.originalName=u.originalName,e.alias=u.alias,e.originalName=u.originalName}exitTableReferenceListParens(e){let u=e.tableReferenceList()||e.tableReferenceListParens();e.tableList=u.tableList}exitTableAlias(e){e.alias=Tp(e.identifier().getText())}};c(o7,"Listener");var n7=o7,Tp=c(i=>i?/^\[.*\]$|^(`|'|").*\1$/.test(i)?i.slice(1,-1):i:"","removeQuotes"),ny=c(i=>{if(!Array.isArray(i))return"";let e=["name","tableName","schemaName","databaseName"];return i.reverse().reduce((u,r,a)=>({...u,[e[a]]:r}),{})},"getNameObject"),yq=c(i=>{if((i==null?void 0:i.length)>0)return i},"getFieldReferences");oy.exports=n7});var dy=v((_00,cy)=>{var _p=e2(),Nq=ry(),Cq=sy(),Iq=ly(),bq=c((i,e)=>{let u=new _p.InputStream(i),r=new Nq(u),a=new _p.CommonTokenStream(r),s=new Cq(a);s.removeErrorListeners();let p=class p extends _p.error.ErrorListener{syntaxError(f,S,m,O,M){let T=`line ${m}:${O} ${M}`;e?e(T):console.log(new Error(T))}};c(p,"ExprErrorListener");let n=p;s.addErrorListener(new n);let l=s.query(),d=new Iq(s);return _p.tree.ParseTreeWalker.DEFAULT.walk(d,l),d.getResult()},"parseSelectStatement");cy.exports=bq});var Ey=v((Y00,Ly)=>{"use strict";var fy=I4(),Yp=JY(),{createJsonSchema:py}=uR(),{injectPrimaryKeyConstraintsIntoTable:xq,reverseForeignKeys:vq}=rR(),{BigQueryDate:Dq,BigQueryDatetime:wq,BigQueryTime:Uq,BigQueryTimestamp:Pq,Geography:kq}=Md(),{Big:Fq}=Od(),Hq=dy(),Vq=c(async(i,e,u,r)=>{try{let a=gp({title:"Reverse-engineering process",hiddenKeys:i.hiddenKeys,logger:e}),s=Rp(i,e),n=Yp(s,a),d=(i.datasetId?[{id:i.datasetId}]:await n.getDatasets()).map(p=>p.id);u(null,d)}catch(a){u(yp(e,a))}},"getDatabases"),Rp=c((i,e)=>(e.clear(),e.log("info",i,"connectionInfo",i.hiddenKeys),fy.connect(i)),"connect"),Gq=c(async(i,e,u)=>{try{let r=gp({title:"Reverse-engineering process",hiddenKeys:i.hiddenKeys,logger:e}),a=Rp(i,e);await Yp(a,r).getDatasets(),u()}catch(r){u(yp(e,r))}},"testConnection"),qq=c(async(i,e,u)=>{fy.disconnect(),u()},"disconnect"),Kq=c(async(i,e,u,r)=>{var a;try{let s=r.require("async"),n=gp({title:"Reverse-engineering process",hiddenKeys:i.hiddenKeys,logger:e}),l=Rp(i,e),d=Yp(l,n),p=i.datasetId||((a=i.data)==null?void 0:a.databaseName),h=p?[{id:p}]:await d.getDatasets(),f=await s.mapSeries(h,async S=>{let m=await d.getTables(S.id),O=["MATERIALIZED_VIEW","VIEW"],M=m.filter(L=>!O.includes(L.metadata.type)).map(L=>L.id),T=m.filter(L=>O.includes(L.metadata.type)).map(L=>d.getViewName(L.id));return{isEmpty:m.length===0,dbName:S.id,dbCollections:M,views:T}});u(null,f)}catch(s){u(yp(e,s))}},"getDbCollectionsNames"),Wq=c(async(i,e,u,r)=>{try{let a=r.require("lodash"),s=r.require("async"),n=Rp(i,e),l=gp({title:"Reverse-engineering process",hiddenKeys:i.hiddenKeys,logger:e}),d=Yp(n,l),p=await d.getProjectInfo(),h=i.recordSamplingSettings,f={projectID:p.id,projectName:p.friendlyName},S=[],m=await s.reduce(i.collectionData.dataBaseNames,[],async(O,M)=>{var w;l.info(`Process dataset "${M}"`),l.progress(`Process dataset "${M}"`,M);let T=await d.getDataset(M),L=Qq({metadata:T.metadata,datasetName:M,_:a}),{tables:I,views:N}=(w=i.collectionData.collections[M])!=null&&w.length?jq(i,M):await Xq(T),{primaryKeyConstraintsData:D,foreignKeyConstraintsData:E}=await d.getConstraintsData(p.id,M),R=E?vq(E):[];S=[...S,...R],l.info(`Getting dataset constraints "${M}"`),l.progress(`Getting dataset constraints "${M}"`,M);let x=await s.mapSeries(I,async j=>{l.info(`Get table metadata: "${j}"`),l.progress("Get table metadata",M,j);let[Z]=await T.table(j).get(),J=Z.metadata.friendlyName;l.info(`Get table rows: "${j}"`),l.progress("Get table rows",M,j);let[s0]=await d.getRows(j,Z,h);l.info(`Convert rows: "${j}"`),l.progress("Convert rows",M,j);let u0=py(Z.metadata.schema??{},s0),{propertiesWithInjectedConstraints:L0,primaryKey:S0}=xq({datasetId:T.id,properties:u0.properties,tableName:j,constraintsData:D}),n0={...u0,properties:L0},U0=l7(s0);return{dbName:L.name,collectionName:J||j,entityLevel:{...Jq({_:a,table:Z,tableName:j}),primaryKey:S0},documents:U0,standardDoc:U0[0],views:[],emptyBucket:!1,validation:{jsonSchema:n0},bucketInfo:L}}),k=await s.mapSeries(N,async j=>{var L0,S0,n0;l.info(`Get view metadata: "${j}"`),l.progress("Get view metadata",M,j);let[Z]=await T.table(j).get(),J=Z.metadata.materializedView||Z.metadata.view;l.info(`Process view: "${j}"`),l.progress("Process view",M,j);let s0=Z.metadata.friendlyName,u0=py(Z.metadata.schema??{});return{dbName:L.name,name:s0||j,jsonSchema:tK({viewQuery:J.query,tablePackages:x,viewJsonSchema:u0,log:l}),data:{name:s0||j,code:s0?j:"",materialized:Z.metadata.type==="MATERIALIZED_VIEW",description:Z.metadata.description,selectStatement:J.query,labels:c7(a,Z.metadata.labels),expiration:Z.metadata.expirationTime?Number(Z.metadata.expirationTime):void 0,clusteringKey:((L0=Z.metadata.clustering)==null?void 0:L0.fields)||[],...Oy(Z.metadata),enableRefresh:!!(J!=null&&J.enableRefresh),refreshInterval:isNaN(J==null?void 0:J.refreshIntervalMs)?"":Number(J==null?void 0:J.refreshIntervalMs)/(60*1e3),maxStaleness:Z.metadata.maxStaleness,allowNonIncrementalDefinition:(n0=(S0=Z.metadata)==null?void 0:S0.materializedView)==null?void 0:n0.allowNonIncrementalDefinition}}});return O=O.concat(x),k.length&&(O=O.concat({dbName:L.name,views:k,emptyBucket:!1})),O});u(null,m,f,S)}catch(a){u(yp(e,a))}},"getDbCollectionsData"),jq=c((i,e)=>{let u=i.collectionData.collections[e].filter(a=>!hy(a)),r=i.collectionData.collections[e].map(hy).filter(Boolean);return{tables:u,views:r}},"getSpecificTablesAndViews"),Xq=c(async i=>{let e=(await i.getTables()).flat(),u=e.filter(({metadata:a})=>a.type==="TABLE").map(({id:a})=>a),r=e.filter(({metadata:a})=>a.type==="VIEW"||a.type==="MATERIALIZED_VIEW").map(({id:a})=>a);return{tables:u,views:r}},"getTablesAndViews"),gp=c(({title:i,logger:e,hiddenKeys:u})=>({info(r){e.log("info",{message:r},i,u)},warn(r,a){e.log("info",{message:"[warning] "+r,context:a},i,u)},progress(r,a="",s=""){e.progress({message:r,containerName:a,entityName:s})},error(r){e.log("error",{message:r.message,stack:r.stack},i)}}),"createLogger"),Qq=c(({_:i,metadata:e,datasetName:u})=>{var s;let r=(s=e==null?void 0:e.datasetReference)==null?void 0:s.datasetId,a=e.friendlyName;return{name:a||r,code:a&&r,datasetID:e.id,dataLocation:(e.location||"").toLowerCase(),description:e.description||"",labels:c7(i,e.labels),enableTableExpiration:!!e.defaultTableExpirationMs,defaultExpiration:isNaN(e.defaultTableExpirationMs)?void 0:e.defaultTableExpirationMs/(1e3*60*60*24),...Sy(e.defaultEncryptionConfiguration)}},"getBucketInfo"),c7=c((i,e)=>i.keys(e).map(u=>({labelKey:u,labelValue:e[u]})),"getLabels"),hy=c(i=>{let e=/ \(v\)$/i;return e.test(i)?i.replace(e,""):""},"getViewName"),Jq=c(({_:i,table:e,tableName:u})=>{var s;let r=e.metadata||{},a=r.friendlyName||u;return{...Oy(r),collectionName:a,code:r.friendlyName?u:"",tableType:r.tableType==="EXTERNAL"||r.type==="EXTERNAL"?"External":"Native",description:r.description,expiration:r.expirationTime?Number(r.expirationTime):void 0,clusteringKey:((s=r.clustering)==null?void 0:s.fields)||[],...Sy(r.encryptionConfiguration),labels:c7(i,r.labels),tableOptions:$q(r)}},"getTableInfo"),$q=c(i=>{var r,a,s,n,l,d,p,h,f,S,m,O,M,T,L,I;let e=i.externalDataConfiguration||{},u={CSV:"CSV",GOOGLE_SHEETS:"GOOGLE_SHEETS",NEWLINE_DELIMITED_JSON:"JSON",AVRO:"AVRO",DATASTORE_BACKUP:"DATASTORE_BACKUP",ORC:"ORC",PARQUET:"PARQUET",BIGTABLE:"CLOUD_BIGTABLE",JSON:"JSON",CLOUD_BIGTABLE:"CLOUD_BIGTABLE"}[(e.sourceFormat||"").toUpperCase()]||"";return{format:u,uris:(e.sourceUris||[]).map(N=>({uri:N})),bigtableUri:u==="CLOUD_BIGTABLE"&&((r=e.sourceUris)==null?void 0:r[0])||"",autodetect:e.autodetect,max_staleness:i.maxStaleness,metadata_cache_mode:{AUTOMATIC:"AUTOMATIC",MANUAL:"MANUAL"}[(e.metadataCacheMode||"").toUpperCase()]||"",object_metadata:e.objectMetadata||"",decimal_target_types:(e.decimalTargetTypes||[]).map(N=>({value:N})),allow_quoted_newlines:(a=e.csvOptions)==null?void 0:a.allowQuotedNewlines,allow_jagged_rows:(s=e.csvOptions)==null?void 0:s.allowJaggedRows,quote:(n=e.csvOptions)==null?void 0:n.quote,skip_leading_rows:((l=e.csvOptions)==null?void 0:l.skipLeadingRows)||((d=e.googleSheetsOptions)==null?void 0:d.skipLeadingRows),preserve_ascii_control_characters:(p=e.csvOptions)==null?void 0:p.preserveAsciiControlCharacters,null_marker:(h=e.csvOptions)==null?void 0:h.nullMarker,field_delimiter:(f=e.csvOptions)==null?void 0:f.fieldDelimiter,encoding:(S=e.csvOptions)==null?void 0:S.encoding,ignore_unknown_values:e.ignoreUnknownValues,compression:e.compression,max_bad_records:e.maxBadRecords,require_hive_partition_filter:(m=e.hivePartitioningOptions)==null?void 0:m.requirePartitionFilter,hive_partition_uri_prefix:(O=e.hivePartitioningOptions)==null?void 0:O.sourceUriPrefix,sheet_range:(M=e.googleSheetsOptions)==null?void 0:M.range,reference_file_schema_uri:e.referenceFileSchemaUri,enable_list_inference:(T=e.parquetOptions)==null?void 0:T.enableListInference,enum_as_string:(L=e.parquetOptions)==null?void 0:L.enumAsString,enable_logical_types:(I=e.avroOptions)==null?void 0:I.useAvroLogicalTypes,bigtable_options:JSON.stringify(e.bigtableOptions,null,4),json_extension:e.jsonExtension}},"getExternalOptions"),Sy=c(i=>({encryption:i?"Customer-managed":"Google-managed",customerEncryptionKey:i==null?void 0:i.kmsKeyName}),"getEncryption"),Oy=c(i=>{var u;return{partitioning:zq(i),partitioningFilterRequired:i.requirePartitionFilter,partitioningType:Zq(i.timePartitioning||{}),timeUnitpartitionKey:[(u=i.timePartitioning)==null?void 0:u.field],rangeOptions:eK(i.rangePartitioning)}},"getPartitioning"),zq=c(i=>i.timePartitioning?i.timePartitioning.field?"By time-unit column":"By ingestion time":i.rangePartitioning?"By integer-range":"No partitioning","getPartitioningCategory"),Zq=c(i=>i.type==="HOUR"?"By hour":i.type==="MONTH"?"By month":i.type==="YEAR"?"By year":"By day","getPartitioningType"),eK=c(i=>{var e,u,r;return i?[{rangePartitionKey:[i.field],rangeStart:(e=i.range)==null?void 0:e.start,rangeEnd:(u=i.range)==null?void 0:u.end,rangeinterval:(r=i.range)==null?void 0:r.interval}]:[]},"getPartitioningRange"),yp=c((i,e)=>{let u={message:e.message,stack:e.stack};return i.log("error",u,"Reverse Engineering error"),u},"prepareError"),l7=c(i=>i instanceof Dq||i instanceof wq||i instanceof Uq||i instanceof Pq?i.value:i instanceof Buffer?i.toString("base64"):i instanceof Fq?i.toNumber():(i instanceof kq&&(i=i.value),Array.isArray(i)?i.map(l7):i&&typeof i=="object"?Object.keys(i).reduce((e,u)=>({...e,[u]:l7(i[u])}),{}):i),"convertValue"),Ap=c((i,e)=>!i||!e||i.type!==e.type||i.properties&&!e.properties||!i.properties&&e.properties||!i.items&&e.items||i.items&&!e.items?!1:i.properties&&e.properties?Object.keys(i.properties).every(u=>Ap(i.properties[u],e.properties[u])):Array.isArray(i.items)&&Array.isArray(e.items)?i.items.every((u,r)=>Ap(u,e.item[r])):i.items&&e.items?Ap(i.items,e.items):!0,"equalByStructure"),uK=c((i,e)=>i.properties[e.alias]?e.alias:Object.keys(i.properties).find(u=>Ap(i.properties[u],e)),"findViewPropertyByTableProperty"),tK=c(({viewQuery:i,tablePackages:e,viewJsonSchema:u,log:r})=>{try{let a=Hq(i),s=a.selectItems.map(l=>({alias:l.alias,name:l.name||l.fieldReferences[l.fieldReferences.length-1]||l.alias,table:l.tableName||""}));return a.from.reduce((l,d)=>{let p=d.table.split("."),h=p.length>1?p[p.length-1]:p[0],f=p.length>1?p[p.length-2]:d.schemaName,S=e.find(T=>(T.dbName===f||!f)&&T.collectionName===h);if(!S)return l;let m=s.filter(T=>T.table===h||T.table===d.alias||!T.table),O=S.validation.jsonSchema,M=m.map(T=>{if(O.properties[T.name])return{...O.properties[T.name],table:h,name:T.name,alias:T.alias}}).filter(Boolean);return l.concat(M)},[]).reduce((l,d,p)=>{let h=uK(l,d);return h?{...l,properties:{...l.properties,[h]:{$ref:`#collection/definitions/${d.table}/${d.name}`}}}:l},u)}catch(a){return r.info("Error with processing view select statement: "+i),r.error(a),u}},"createViewSchema");Ly.exports={disconnect:qq,testConnection:Gq,getDbCollectionsNames:Kq,getDbCollectionsData:Wq,getDatabases:Vq}});var By=v((g00,my)=>{"use strict";var rK=I4(),iK=c(async(i,e,u)=>{let a=(await i.createJob({configuration:{query:{query:e,useLegacySql:!1}},location:u}))[0];return await a.getQueryResults(a)},"execute"),aK=c(async(i,e,u)=>{var p,h;let r=u.require("lodash"),a=u.require("async"),s=rK.connect(i),n=(h=(p=i.containerData)==null?void 0:p[0])==null?void 0:h.dataLocation,l=n==="default"?"":n,d=i.script.split(` + +`).map(f=>r.trim(f)).filter(Boolean);await a.mapSeries(d,async f=>{let S="Query: "+f.split(` +`).shift().substr(0,150);e.progress({message:S}),await iK(s,f,l)})},"applyToInstance");my.exports={applyToInstance:aK}});var d7=v((N00,My)=>{"use strict";var sK=["DROP SCHEMA","DROP TABLE","DROP COLUMN","DROP VIEW"];My.exports={DROP_STATEMENTS:sK}});var _y=v((C00,Ty)=>{"use strict";var{DROP_STATEMENTS:nK}=d7(),oK=c((i="")=>i.split(` +`).map(e=>nK.some(u=>e.includes(u))?`-- ${e}`:e).join(` +`),"commentDropStatements");Ty.exports={commentDropStatements:oK}});var Yy=v((b00,Ay)=>{"use strict";Ay.exports={number:"BIGNUMERIC",string:"STRING",date:"DATE",timestamp:"TIMESTAMP",binary:"BYTES",boolean:"BOOL",document:"STRUCT",array:"ARRAY",objectId:"STRING",default:"STRING"}});var gy=v((x00,Ry)=>{"use strict";Ry.exports={ARRAY:{mode:"array"},BIGNUMERIC:{capacity:16,mode:"decimal"},BOOL:{mode:"boolean"},BYTES:{mode:"binary"},DATE:{format:"YYYY-MM-DD"},DATETIME:{format:"YYYY-MM-DD hh:mm:ss"},FLOAT64:{capacity:8,mode:"floating"},GEOGRAPHY:{format:"euclidian",mode:"geospatial"},INT64:{capacity:8},NUMERIC:{capacity:8,mode:"decimal"},STRING:{mode:"varying"},STRUCT:{mode:"object"},TIME:{format:"hh:mm:ss.nnnnnn"},TIMESTAMP:{format:"YYYY-MM-DD hh:mm:ss.nnnnnnZ"},JSON:{format:"semi-structured"}}});var Ny=v((v00,yy)=>{"use strict";yy.exports={createDatabase:"CREATE SCHEMA${ifNotExist} ${name}${dbOptions};\n",createTable:"CREATE ${orReplace}${temporary}${external}TABLE ${ifNotExist}${name} ${column_definitions}${partitions}${clustering}${options};\n",columnDefinition:"${name}${type}${primaryKey}${notNull}${options}",createForeignKeyConstraint:"${constraintName}FOREIGN KEY (${foreignKeys}) REFERENCES ${primaryTableName}(${primaryKeys}) NOT ENFORCED",createView:"CREATE ${orReplace}${materialized}VIEW ${ifNotExist}${name}${columns}${partitions}${clustering}${options} AS ${selectStatement};\n",dropDatabase:"DROP SCHEMA IF EXISTS ${name};",alterDatabase:"ALTER SCHEMA IF EXISTS ${name} SET ${dbOptions};",dropTable:"DROP TABLE IF EXISTS ${name};",alterTable:"ALTER TABLE IF EXISTS ${name} SET ${options};",alterColumnOptions:'ALTER TABLE IF EXISTS ${tableName} ALTER COLUMN IF EXISTS ${columnName} SET OPTIONS( description="${description}" );',alterColumnType:"ALTER TABLE IF EXISTS ${tableName} ALTER COLUMN IF EXISTS ${columnName} SET DATA TYPE ${type};",alterColumnDropNotNull:"ALTER TABLE IF EXISTS ${tableName} ALTER COLUMN IF EXISTS ${columnName} DROP NOT NULL;",alterTableAddColumn:"ALTER TABLE ${tableName} ADD COLUMN IF NOT EXISTS ${column};",alterTableDropColumn:"ALTER TABLE ${tableName} DROP COLUMN IF EXISTS ${columnName};",dropView:"DROP VIEW IF EXISTS ${name};",alterViewOptions:"ALTER ${materialized}VIEW ${name} SET ${options};"}});var p7=v((D00,Iy)=>{"use strict";var Np=c((i="")=>i.replace(/(")/gi,"\\$1").replace(/\n/gi,"\\n"),"escapeQuotes"),zi=c((i="")=>`\`${i}\``,"wrapByBackticks"),lK=c(i=>i?`TIMESTAMP_TRUNC(_PARTITIONTIME, ${{"By day":"DAY","By hour":"HOUR","By month":"MONTH","By year":"YEAR"}[i]||"DAY"})`:"_PARTITIONDATE","getPartitioningByIngestionTime"),cK=c((i={})=>{var s,n;let e=(n=(s=i.rangePartitionKey)==null?void 0:s[0])==null?void 0:n.name,u=Number(i.rangeStart),r=Number(i.rangeEnd),a=Number(i.rangeinterval);return e?`RANGE_BUCKET(${e}, GENERATE_ARRAY(${u}, ${r}${isNaN(a)?"":`, ${a}`}))`:""},"getPartitioningByIntegerRange"),dK=c(({partitioning:i,timeUnitPartitionKey:e,rangeOptions:u})=>{var r,a,s,n;return i==="By time-unit column"?(r=e==null?void 0:e[0])==null?void 0:r.isActivated:i==="By integer-range"?(n=(s=(a=u==null?void 0:u[0])==null?void 0:a.rangePartitionKey)==null?void 0:s[0])==null?void 0:n.isActivated:!0},"isActivatedPartition"),pK=c(({partitioning:i,partitioningType:e,timeUnitPartitionKey:u,rangeOptions:r})=>{var s;let a=(s=u==null?void 0:u[0])==null?void 0:s.name;if(i==="No partitioning")return"";if(i==="By ingestion time")return"PARTITION BY "+lK(e);if(i==="By time-unit column"&&a)return`PARTITION BY DATE(${zi(a)})`;if(i==="By integer-range"){let n=cK(r==null?void 0:r[0]);return n?"PARTITION BY "+n:""}return""},"getTablePartitioning"),hK=c((i,e)=>{if(!Array.isArray(i)||i.length===0)return"";let u=i.filter(a=>a.isActivated).map(a=>zi(a.name)).join(", "),r=i.filter(a=>!a.isActivated).map(a=>zi(a.name)).join(", ");return e?u.length===0?` +-- CLUSTER BY `+r:r.length===0?` +CLUSTER BY `+u:` +CLUSTER BY `+u+" /*"+r+"*/":` +CLUSTER BY `+i.map(a=>zi(a.name)).join(", ")},"getClusteringKey"),fK=c((i,e)=>({expiration:u,partitioningFilterRequired:r,partitioning:a,customerEncryptionKey:s,description:n,labels:l,friendlyName:d,externalTableOptions:p})=>{let h=[];if(d&&h.push(`friendly_name="${d}"`),n&&h.push(`description="${Np(n)}"`),u&&h.push(`expiration_timestamp=TIMESTAMP "${Cy(u)}"`),a==="By ingestion time"&&r&&h.push("require_partition_filter=true"),s&&h.push(`kms_key_name="${s}"`),Array.isArray(l)&&l.length&&h.push(`labels=[ +${i(e(l))} +]`),p){let f=["format","bigtableUri","quote","null_marker","field_delimiter","encoding","compression","sheet_range","reference_file_schema_uri","hive_partition_uri_prefix","projection_fields","json_extension"];Object.entries(p).forEach(([S,m])=>{f.includes(S)&&(m=`"${Np(m)}"`),typeof m=="boolean"&&(m=m===!0?"true":"false"),Array.isArray(m)&&(m=`[ +`+m.map(O=>i(`"${O}"`)).join(`, +`)+` +]`),h.push(`${S}=${m}`)})}return h.length?` +OPTIONS ( +${i(h.join(`, +`))} +)`:""},"getTableOptions"),Cy=c(i=>{let e=c(p=>(p+"").padStart(2,"0"),"fill"),u=new Date(Number(i)),r=e(u.getUTCDate()),a=e(u.getUTCMonth()+1),s=u.getUTCFullYear(),n=e(u.getUTCHours()),l=e(u.getUTCMinutes()),d=e(u.getUTCSeconds());return`${s}-${a}-${r} ${n}:${l}:${d} UTC`},"getTimestamp"),SK=c(i=>e=>(Array.isArray(e)||(e=[e]),e.map(u=>Cp(i)({type:u.type,description:u.description,dataTypeMode:u.dataTypeMode,jsonSchema:u},!0))),"convertItemsToType"),OK=c(i=>e=>Object.keys(e).map(u=>{let r=e[u];return Cp(i)({name:u,type:r.type,description:r.description,dataTypeMode:r.dataTypeMode,jsonSchema:r})}),"convertPropertiesToType"),LK=c((i,e)=>{let u=[];return["bignumeric","numeric"].includes((i||"").toLowerCase())&&(e.precision&&u.push(e.precision),e.scale&&u.push(e.scale)),["string","bytes"].includes((i||"").toLowerCase())&&e.length&&u.push(e.length),u.length?`(${u.join(", ")})`:""},"addParameters"),Cp=c(i=>({type:e,description:u,dataTypeMode:r,name:a,jsonSchema:s},n)=>{let{assignTemplates:l,tab:d,templates:p}=i,h=e,f=s.primaryKey&&!s.compositePrimaryKey?" PRIMARY KEY NOT ENFORCED":"",S="",m="";if(e==="array")h=` ARRAY< +${d(SK(i)(s.items).join(`, +`))} +>`;else if(r==="Repeated"){let{dataTypeMode:O,...M}=s;h=Cp(i)({type:"array",description:u,jsonSchema:{items:[M]}})}else e==="struct"?h=` STRUCT< +${d(OK(i)(s.properties||{}).join(`, +`))} +>`:h=(" "+e).toUpperCase()+LK(e,s);return u&&(S+=` OPTIONS( description="${Np(u)}" )`),r==="Required"&&!n&&(m=" NOT NULL"),l(p.columnDefinition,{name:a&&zi(a),type:h,primaryKey:f,notNull:m,options:S})},"getColumnSchema"),EK=c((i,e)=>({columns:u,projectId:r,datasetName:a})=>{let s=u.reduce((n,l)=>{let d=zi(l.name);return l.alias&&(d=`${d} as ${l.alias}`),n[l.tableName]||(n[l.tableName]={activated:[],deactivated:[]}),e&&!l.isActivated?n[l.tableName].deactivated.push(d):n[l.tableName].activated.push(d),n},{});return Object.keys(s).map(n=>{let{deactivated:l,activated:d}=s[n];return`SELECT ${d.join(", ")+(l.length?`/*, ${l.join(", ")}*/`:"")||"*"} FROM ${i(r,a,n)}`}).join(` +UNION ALL +`)},"generateViewSelectStatement"),mK=c(i=>i.filter(e=>!!e),"clearEmptyStatements"),BK=c(i=>{let e=/[^A-Za-z0-9_]/g,u=/^[0-9]/;return(i||"").replace(e,"_").replace(u,"_")},"prepareConstraintName");Iy.exports={isActivatedPartition:dK,getTablePartitioning:pK,getClusteringKey:hK,getTableOptions:fK,getColumnSchema:Cp,generateViewSelectStatement:EK,getTimestamp:Cy,escapeQuotes:Np,clearEmptyStatements:mK,prepareConstraintName:BK,wrapByBackticks:zi}});var f7=v((U00,xy)=>{"use strict";var{escapeQuotes:by,getTimestamp:MK,wrapByBackticks:h7}=p7();xy.exports=i=>{let e=i.require("lodash"),{commentIfDeactivated:u,tab:r}=i.require("@hackolade/ddl-fe-utils").general,a=c((S,m,O)=>{let M=[];return S&&M.push(S),m&&M.push(m),O&&M.push(O),"`"+M.join(".")+"`"},"getFullName"),s=c(S=>S.map(({labelKey:m,labelValue:O})=>`("${m}", "${O}")`).join(`, +`),"getLabels"),n=c(({friendlyName:S,description:m,defaultExpiration:O,customerEncryptionKey:M,labels:T})=>{let L=[];return S&&L.push(`friendly_name="${S}"`),m&&L.push(`description="${by(m)}"`),M&&L.push(`default_kms_key_name="${M}"`),O&&L.push(`default_table_expiration_days=${O}`),T.length&&L.push(`labels=[ +${r(s(T))} +]`),L.length?` +OPTIONS( +${r(L.join(`, +`))} +)`:""},"getContainerOptions"),l=c(S=>{if(!S.materialized)return[];let m=[];return S.enableRefresh&&(m.push("enable_refresh=true"),S.refreshInterval&&m.push(`refresh_interval_minutes=${S.refreshInterval}`)),S.maxStaleness&&m.push(`max_staleness=${S.maxStaleness}`),S.allowNonIncrementalDefinition&&m.push(`allow_non_incremental_definition=${S.allowNonIncrementalDefinition}`),m},"getMaterializedViewOptions");return{getLabels:s,getFullName:a,getContainerOptions:n,getViewOptions:c(S=>{let m=[];return S.friendlyName&&m.push(`friendly_name="${S.friendlyName}"`),S.description&&m.push(`description="${by(S.description)}"`),S.expiration&&m.push(`expiration_timestamp=TIMESTAMP "${MK(S.expiration)}"`),Array.isArray(S.labels)&&S.labels.length&&m.push(`labels=[ +${r(s(S.labels))} +]`),m=[...m,...l(S)],m.length?` + OPTIONS( +${r(m.join(`, +`))} +)`:""},"getViewOptions"),cleanObject:c(S=>Object.entries(S).filter(([m,O])=>O).reduce((m,[O,M])=>({...m,[O]:M}),{}),"cleanObject"),foreignKeysToString:c(S=>{if(Array.isArray(S)){let m=S.filter(T=>e.get(T,"isActivated",!0)).map(T=>h7(T.name.trim())),O=S.filter(T=>!e.get(T,"isActivated",!0)).map(T=>h7(T.name.trim())),M=O.length?u(O,{isActivated:!1},!0):"";return m.join(", ")+M}return S},"foreignKeysToString"),foreignActiveKeysToString:c(S=>S.map(m=>h7(m.name.trim())).join(", "),"foreignActiveKeysToString")}}});var Dy=v((k00,vy)=>{"use strict";var TK=c(({index:i,amountOfStatements:e,lastIndexOfActivatedStatement:u,delimiter:r,delimiterForLastActivatedStatement:a})=>i===e-1?"":u===-1?r:i===u?a:r,"getDelimiterForJoiningStatementsBasedOnActivation"),_K=c(({statementDtos:i})=>{for(let e=i.length-1;e>=0;e--)if((i[e]||{}).isActivated)return e;return-1},"getLastIndexOfActivatedStatement"),AK=c(({statementDtos:i,delimiter:e=`, +`,delimiterForLastActivatedStatement:u=` +`})=>{let r=_K({statementDtos:i});return i.map((a,s)=>{let{statement:n}=a,l=TK({index:s,amountOfStatements:i.length,lastIndexOfActivatedStatement:r,delimiter:e,delimiterForLastActivatedStatement:u});return n+l}).join("")},"joinActivatedAndDeactivatedStatements");vy.exports={joinActivatedAndDeactivatedStatements:AK}});var Ip=v((V00,Vy)=>{"use strict";var YK=Yy(),wy=gy(),We=Ny(),{isActivatedPartition:Uy,getTablePartitioning:Py,getClusteringKey:ky,getTableOptions:Fy,getColumnSchema:Hy,generateViewSelectStatement:RK,escapeQuotes:gK,clearEmptyStatements:H00,prepareConstraintName:yK,wrapByBackticks:at}=p7();Vy.exports=(i,e,u)=>{let{tab:r,commentIfDeactivated:a,hasType:s,checkAllKeysDeactivated:n}=u.require("@hackolade/ddl-fe-utils").general;u.require("@hackolade/ddl-fe-utils").general;let l=u.require("@hackolade/ddl-fe-utils").assignTemplates,d=u.require("lodash"),{getLabels:p,getFullName:h,getContainerOptions:f,getViewOptions:S,cleanObject:m,foreignKeysToString:O,foreignActiveKeysToString:M}=f7()(u),{joinActivatedAndDeactivatedStatements:T}=Dy();return{createDatabase({databaseName:L,friendlyName:I,description:N,ifNotExist:D,projectId:E,defaultExpiration:R,customerEncryptionKey:x,labels:k}){return l(We.createDatabase,{name:h(E,L),ifNotExist:D?" IF NOT EXISTS":"",dbOptions:f({friendlyName:I,description:N,defaultExpiration:R,customerEncryptionKey:x,labels:k})})},createTable({name:L,columns:I,dbData:N,description:D,orReplace:E,ifNotExist:R,partitioning:x,partitioningType:k,timeUnitPartitionKey:w,partitioningFilterRequired:j,rangeOptions:Z,temporary:J,expiration:s0,tableType:u0,clusteringKey:L0,customerEncryptionKey:S0,labels:n0,friendlyName:U0,externalTableOptions:ce,foreignKeyConstraints:T0,primaryKey:_0},j0){let t0=h(N.projectId,N.databaseName,L),re=E?"OR REPLACE ":"",ee=J?"TEMPORARY ":"",de=R?"IF NOT EXISTS ":"",Q0=Uy({partitioning:x,timeUnitPartitionKey:w,rangeOptions:Z}),$0=Py({partitioning:x,partitioningType:k,timeUnitPartitionKey:w,rangeOptions:Z}),C=ky(L0,j0),b=u0==="External",U=Fy(r,p)({externalTableOptions:b?d.omit(ce,"autodetect"):null,partitioningFilterRequired:b?!1:j,customerEncryptionKey:S0,partitioning:x,friendlyName:U0,description:D,expiration:s0,labels:n0}),K=b?"EXTERNAL ":"",V=(I||[]).map(O0=>({statement:O0.column,isActivated:O0.isActivated})),q=a($0,{isActivated:Q0}),Q=_0.flatMap(O0=>O0==null?void 0:O0.compositePrimaryKey.map(P0=>at(P0.name))),W={statement:Q.length?`PRIMARY KEY (${Q.join(", ")}) NOT ENFORCED`:"",isActivated:!0},z=(T0||[]).map(O0=>({statement:a(O0.statement,{isActivated:O0.isActivated}),isActivated:O0.isActivated})),$=[...V,W,...z].filter(O0=>!!O0.statement),r0=T({statementDtos:$,delimiter:`, +`,delimiterForLastActivatedStatement:` +`});return l(We.createTable,{name:t0,column_definitions:ce!=null&&ce.autodetect?"":`( +`+r(r0)+` +)`,orReplace:re,temporary:ee,ifNotExist:de,partitions:q&&!b?` +`+q:"",clustering:b?"":C,external:K,options:U})},convertColumnDefinition(L){return{column:a(Hy({assignTemplates:l,tab:r,templates:We})(L),{isActivated:L.isActivated}),isActivated:L.isActivated}},createView(L,I,N){let D=h(I.projectId,I.databaseName,L.name),E="",R=L.keys.length&&L.keys.every(J=>!J.isActivated);if(!L.materialized)if(N&&!R){let J=L.keys.filter(u0=>u0.isActivated).map(u0=>u0.alias||u0.name).filter(Boolean).map(at),s0=L.keys.filter(u0=>!u0.isActivated).map(u0=>u0.alias||u0.name).filter(Boolean).map(at);E=J.join(", ")+(s0.length?`/* ${s0.join(", ")} */`:"")}else E=L.keys.map(J=>at(J.alias||J.name)).filter(Boolean).join(", ");let x=Uy({partitioning:L.partitioning,timeUnitPartitionKey:L.partitioningType,rangeOptions:L.rangeOptions}),k=Py({partitioning:L.partitioning,partitioningType:L.partitioningType,timeUnitPartitionKey:L.timeUnitPartitionKey,rangeOptions:L.rangeOptions}),w=ky(L.clusteringKey,N),j=a(k,{isActivated:x}),Z=l(We.createView,{name:D,materialized:L.materialized?"MATERIALIZED ":"",orReplace:L.orReplace&&!L.materialized?"OR REPLACE ":"",ifNotExist:L.ifNotExist?"IF NOT EXISTS ":"",columns:E.length?` + (${E})`:"",selectStatement:` + ${d.trim(L.selectStatement?L.selectStatement:RK(h,N&&!R)({columns:L.keys,datasetName:I.databaseName,projectId:I.projectId}))}`,options:S(L),partitions:j?` +`+j:"",clustering:w});return N&&R?a(Z,{isActivated:!1}):Z},createForeignKeyConstraint({name:L,isActivated:I,foreignKey:N,primaryTable:D,primaryKey:E,primaryTableActivated:R,foreignTableActivated:x,primarySchemaName:k},w,j){let Z=n(E),J=n(N),s0=I&&!Z&&!J&&R&&x;return{statement:l(We.createForeignKeyConstraint,{constraintName:L?`CONSTRAINT ${yK(L)} `:"",foreignKeys:s0?O(N):M(N),primaryTableName:h(null,k,D),primaryKeys:s0?O(E):M(E)}),isActivated:s0}},getDefaultType(L){return YK[L]},getTypesDescriptors(){return wy},hasType(L){return s(wy,L)},hydrateColumn({columnDefinition:L,jsonSchema:I,dbData:N}){return{name:L.name,type:L.type,isActivated:L.isActivated,description:I.refDescription||I.description,dataTypeMode:I.dataTypeMode,jsonSchema:I}},hydrateDatabase(L,I){var D;let N=I==null?void 0:I.modelData;return{databaseName:L.name,friendlyName:L.businessName,description:L.description,isActivated:L.isActivated,ifNotExist:L.ifNotExist,projectId:(D=N==null?void 0:N[0])==null?void 0:D.projectID,defaultExpiration:L.enableTableExpiration?L.defaultExpiration:"",customerEncryptionKey:L.encryption==="Customer-managed"?L.customerEncryptionKey:"",labels:Array.isArray(L.labels)?L.labels:[]}},hydrateTable({tableData:L,entityData:I,jsonSchema:N}){var j;let D=I[0],E=((j=I[1])==null?void 0:j.primaryKey)??[],R=D.tableOptions||{},x=(R.uris||[]).map(Z=>Z.uri).filter(Boolean),k=(R.decimal_target_types||[]).map(({value:Z})=>Z),w={format:R.format,uris:d.isEmpty(x)?void 0:x,decimal_target_types:d.isEmpty(k)?void 0:k,autodetect:R.autodetect};return{...L,name:D.code||D.collectionName,friendlyName:N.title&&N.title!==D.collectionName?N.title:"",description:D.description,orReplace:D.orReplace,ifNotExist:D.ifNotExist,partitioning:D.partitioning,partitioningType:D.partitioningType,timeUnitPartitionKey:D.timeUnitpartitionKey,partitioningFilterRequired:D.partitioningFilterRequired,rangeOptions:D.rangeOptions,temporary:D.temporary,expiration:D.expiration,tableType:D.tableType,clusteringKey:D.clusteringKey,customerEncryptionKey:D.encryption?D.customerEncryptionKey:"",labels:D.labels,primaryKey:E,externalTableOptions:m({AVRO:{...w,...d.pick(R,["require_hive_partition_filter","hive_partition_uri_prefix","reference_file_schema_uri","enable_logical_types"])},CSV:{...w,...d.pick(R,["allow_quoted_newlines","allow_jagged_rows","quote","skip_leading_rows","preserve_ascii_control_characters","null_marker","field_delimiter","encoding","ignore_unknown_values","compression","max_bad_records","require_hive_partition_filter","hive_partition_uri_prefix"])},DATASTORE_BACKUP:{...w,...d.pick(R,["projection_fields"])},GOOGLE_SHEETS:{...w,...d.pick(R,["max_bad_records","sheet_range"])},JSON:{...w,...d.pick(R,["ignore_unknown_values","compression","max_bad_records","require_hive_partition_filter","hive_partition_uri_prefix","json_extension"])},ORC:{...w,...d.pick(R,["require_hive_partition_filter","hive_partition_uri_prefix","reference_file_schema_uri"])},PARQUET:{...w,...d.pick(R,["require_hive_partition_filter","hive_partition_uri_prefix","reference_file_schema_uri","enable_list_inference","enum_as_string"])},CLOUD_BIGTABLE:{...w,uris:[R.bigtableUri],bigtable_options:R.bigtable_options}}[R.format]||{})}},hydrateViewColumn(L){return{name:L.name,tableName:L.entityName,alias:L.alias,isActivated:L.isActivated}},hydrateView({viewData:L,entityData:I}){let N=I[0];return{name:L.name,tableName:L.tableName,keys:L.keys,materialized:N.materialized,orReplace:N.orReplace,ifNotExist:N.ifNotExist,selectStatement:N.selectStatement,labels:N.labels,description:N.description,expiration:N.expiration,friendlyName:N.businessName,partitioning:N.partitioning,partitioningType:N.partitioningType,timeUnitPartitionKey:N.timeUnitpartitionKey,clusteringKey:N.clusteringKey,rangeOptions:N.rangeOptions,refreshInterval:N.refreshInterval,enableRefresh:N.enableRefresh,maxStaleness:N.maxStaleness,allowNonIncrementalDefinition:N.allowNonIncrementalDefinition}},commentIfDeactivated(L,I,N){return a(L,I,N)},dropDatabase(L){return l(We.dropDatabase,{name:L})},alterDatabase({databaseName:L,friendlyName:I,description:N,projectId:D,defaultExpiration:E,customerEncryptionKey:R,labels:x}){return l(We.alterDatabase,{name:h(D,L),dbOptions:f({friendlyName:I,description:N,defaultExpiration:E,customerEncryptionKey:R,labels:x})})},dropTable(L,I,N){return l(We.dropTable,{name:h(N,I,L)})},alterTableOptions({name:L,dbData:I,description:N,partitioning:D,partitioningFilterRequired:E,expiration:R,tableType:x,customerEncryptionKey:k,labels:w,friendlyName:j}){let Z=h(I.projectId,I.databaseName,L),J=x==="External",s0=Fy(r,p)({partitioningFilterRequired:J?!1:E,customerEncryptionKey:k,partitioning:D,friendlyName:j,description:N,expiration:R,labels:w});return l(We.alterTable,{name:Z,options:s0})},alterColumnOptions(L,I,N){return l(We.alterColumnOptions,{description:gK(N),tableName:at(L),columnName:at(I)})},alterColumnType(L,I){let N=Hy({assignTemplates:l,tab:r,templates:We})(d.pick(I,"type","dataTypeMode","jsonSchema"));return l(We.alterColumnType,{columnName:at(I.name),type:N,tableName:at(I.name)})},alterColumnDropNotNull(L,I){return l(We.alterColumnDropNotNull,{columnName:at(I),tableName:at(I)})},addColumn({column:L},I,N){let D=h(N.projectId,N.databaseName,I);return l(We.alterTableAddColumn,{tableName:D,column:L})},dropColumn(L,I,N){let D=h(N.projectId,N.databaseName,I);return l(We.alterTableDropColumn,{tableName:D,columnName:at(L)})},dropView(L,I,N){return l(We.dropView,{name:h(N,I,L)})},alterView(L,I){let N=h(I.projectId,I.databaseName,L.name);return l(We.alterViewOptions,{materialized:L.materialized?"MATERIALIZED ":"",name:N,options:S(L)})}}}});var jo=v((G00,Gy)=>{"use strict";Gy.exports=i=>{let e=i.require("lodash");return{checkFieldPropertiesChanged:c((n,l)=>l.some(d=>(n==null?void 0:n.oldField[d])!==(n==null?void 0:n.newField[d])),"checkFieldPropertiesChanged"),getCompMod:c(n=>{var l;return((l=n.role)==null?void 0:l.compMod)??{}},"getCompMod"),checkCompModEqual:c(({new:n,old:l}={})=>e.isEqual(n,l),"checkCompModEqual"),setEntityKeys:c(({idToNameHashTable:n,idToActivatedHashTable:l,entity:d})=>{var p,h,f,S;return{...d,clusteringKey:((p=d.clusteringKey)==null?void 0:p.map(m=>({...m,name:n[m.keyId],isActivated:l[m.keyId]})))||[],timeUnitpartitionKey:((h=d.timeUnitpartitionKey)==null?void 0:h.map(m=>({...m,name:n[m.keyId],isActivated:l[m.keyId]})))||[],rangeOptions:[{...d.rangeOptions??{},rangePartitionKey:((S=(f=d.rangeOptions)==null?void 0:f.rangePartitionKey)==null?void 0:S.map(m=>({...m,name:n[m.keyId],isActivated:l[m.keyId]})))||[]}]}},"setEntityKeys")}}});var Ky=v((K00,qy)=>{"use strict";qy.exports=(i,e)=>{let u=i.require("lodash"),r=Ip()(null,e,i),{getDbData:a}=i.require("@hackolade/ddl-fe-utils").general,{getFullName:s}=f7()(i),{checkCompModEqual:n,getCompMod:l}=jo()(i);return{getAddContainerScript:c(f=>S=>{let m=a([S]),O=r.hydrateDatabase(m,{modelData:f});return u.trim(r.createDatabase(O))},"getAddContainerScript"),getDeleteContainerScript:c(f=>S=>{var T;let{name:m}=a([S]),O=(T=f==null?void 0:f[0])==null?void 0:T.projectID,M=s(O,m);return r.dropDatabase(M)},"getDeleteContainerScript"),getModifiedContainer:c(f=>S=>{let m=l(S),O=["businessName","description","customerEncryptionKey","defaultExpiration","labels"];if(!u.some(O,I=>n(m[I]??{})))return"";let T=a([S]),L=r.hydrateDatabase(T,{modelData:f});return r.alterDatabase(L)},"getModifiedContainer")}}});var jy=v((j00,Wy)=>{"use strict";Wy.exports=i=>{let e=c(h=>Object.assign({name:"",type:"",nullable:!0,primaryKey:!1,default:"",length:"",scale:"",precision:"",hasMaxLength:!1},h),"createColumnDefinition"),u=c((h,f)=>Array.isArray(h.required)?!h.required.includes(f):!0,"isNullable"),r=c(h=>{let f=h.default;return i.isBoolean(f)?f:h.default===null?"NULL":f},"getDefault"),a=c(h=>i.isNumber(h.length)?h.length:i.isNumber(h.maxLength)?h.maxLength:"","getLength"),s=c(h=>i.isNumber(h.scale)?h.scale:"","getScale"),n=c(h=>i.isNumber(h.precision)?h.precision:i.isNumber(h.fractSecPrecision)?h.fractSecPrecision:"","getPrecision"),l=c(h=>h.hasMaxLength?h.hasMaxLength:"","hasMaxLength"),d=c(h=>h.$ref?h.$ref.split("/").pop():h.mode||h.childType||h.type,"getType");return{createColumnDefinitionBySchema:c(({name:h,jsonSchema:f,parentJsonSchema:S,ddlProvider:m,schemaData:O})=>{let M=e({name:h,type:d(f),nullable:u(S,h),default:r(f),primaryKey:f.primaryKey,length:a(f),scale:s(f),precision:n(f),hasMaxLength:l(f),isActivated:f.isActivated});return m.hydrateColumn({columnDefinition:M,jsonSchema:f,schemaData:O})},"createColumnDefinitionBySchema")}}});var Qy=v((Q00,Xy)=>{"use strict";Xy.exports=(i,e)=>{let u=i.require("lodash"),{getEntityName:r}=i.require("@hackolade/ddl-fe-utils").general,{createColumnDefinitionBySchema:a}=jy()(u),s=Ip()(null,e,i),{generateIdToNameHashTable:n,generateIdToActivatedHashTable:l}=i.require("@hackolade/ddl-fe-utils"),{checkFieldPropertiesChanged:d,getCompMod:p,checkCompModEqual:h,setEntityKeys:f}=jo()(i),S=c(N=>D=>{var L0;let R={databaseName:D.compMod.keyspaceName,projectId:(L0=u.first(N))==null?void 0:L0.projectId},x={...u.omit(D,"timeUnitpartitionKey","clusteringKey","rangePartitionKey"),...(D==null?void 0:D.role)||{}},k=n(x),w=l(x),j=f({idToActivatedHashTable:w,idToNameHashTable:k,entity:x}),Z=r(j),J=u.toPairs(j.properties).map(([S0,n0])=>a({jsonSchema:n0,parentJsonSchema:j,name:S0,ddlProvider:s,dbData:R})),s0={name:Z,columns:J.map(s.convertColumnDefinition),foreignKeyConstraints:[],dbData:R,columnDefinitions:J},u0=s.hydrateTable({entityData:[j],tableData:s0,jsonSchema:j});return s.createTable(u0,j.isActivated)},"getAddCollectionScript"),m=c(N=>D=>{var w;let E={...D,...(D==null?void 0:D.role)||{}},R=r(E),x=D.compMod.keyspaceName,k=(w=u.first(N))==null?void 0:w.projectId;return s.dropTable(R,x,k)},"getDeleteCollectionScript"),O=c(N=>D=>{var L0;let E={...u.omit(D,"timeUnitpartitionKey","clusteringKey","rangePartitionKey"),...(D==null?void 0:D.role)||{}},x={databaseName:E.compMod.keyspaceName,projectId:(L0=u.first(N))==null?void 0:L0.projectId},k=n(E),w=l(E),j=f({idToActivatedHashTable:w,idToNameHashTable:k,entity:E}),J={name:r(j),columns:[],foreignKeyConstraints:[],columnDefinitions:[],dbData:x},s0=M({jsonSchema:j,tableData:J}),u0=I({tableData:J,dbData:x,collection:D});return[].concat(s0).concat(u0).filter(Boolean).join(` + +`)},"getModifyCollectionScript"),M=c(({jsonSchema:N,tableData:D})=>{let E=p(N),R=["description","partitioning","partitioningFilterRequired","expiration","tableType","customerEncryptionKey","encryption","labels","title"];if(!u.some(R,w=>!h(E[w])))return"";let k=s.hydrateTable({entityData:[N],tableData:D,jsonSchema:N});return s.alterTableOptions(k)},"getModifyTableOptions"),T=c(N=>D=>{var w,j;let E={...D,...u.omit(D==null?void 0:D.role,"properties")||{}},R=(E==null?void 0:E.code)||(E==null?void 0:E.collectionName)||(E==null?void 0:E.name),k={databaseName:(w=E.compMod)==null?void 0:w.keyspaceName,projectId:(j=u.first(N))==null?void 0:j.projectId};return u.toPairs(D.properties).filter(([Z,J])=>!J.compMod).map(([Z,J])=>a({name:Z,jsonSchema:J,parentJsonSchema:E,ddlProvider:s,dbData:k})).map(s.convertColumnDefinition).map(Z=>s.addColumn(Z,R,k))},"getAddColumnScript"),L=c(N=>D=>{var w,j;let E={...D,...u.omit(D==null?void 0:D.role,"properties")||{}},R=(E==null?void 0:E.code)||(E==null?void 0:E.collectionName)||(E==null?void 0:E.name),k={databaseName:(w=E.compMod)==null?void 0:w.keyspaceName,projectId:(j=u.first(N))==null?void 0:j.projectId};return u.toPairs(D.properties).filter(([Z,J])=>!J.compMod).map(([Z])=>s.dropColumn(Z,R,k))},"getDeleteColumnScript"),I=c(({tableData:N,dbData:D,collection:E})=>{let R={...E,...u.omit(E==null?void 0:E.role,"properties")||{}};return u.toPairs(E.properties).filter(([x,k])=>d(k.compMod,["type","mode"])).map(([x,k])=>{let w=a({name:x,jsonSchema:k,parentJsonSchema:R,ddlProvider:s,dbData:D});return s.alterColumnType(N.name,w)})},"getModifyColumnScripts");return{getAddCollectionScript:S,getDeleteCollectionScript:m,getModifyCollectionScript:O,getAddColumnScript:T,getDeleteColumnScript:L}}});var $y=v(($00,Jy)=>{"use strict";Jy.exports=(i,e)=>{let u=i.require("lodash"),{mapProperties:r}=i.require("@hackolade/ddl-fe-utils"),{setEntityKeys:a}=jo()(i),{generateIdToNameHashTable:s,generateIdToActivatedHashTable:n}=i.require("@hackolade/ddl-fe-utils"),l=Ip()(null,e,i),{checkCompModEqual:d,getCompMod:p}=jo()(i),h=c(O=>M=>{var x,k,w;let T=u.omit(M,"timeUnitpartitionKey","clusteringKey","rangePartitionKey"),L=s(T),I=n(T),N=a({idToActivatedHashTable:I,idToNameHashTable:L,entity:T}),D={databaseName:N.compMod.keyspaceName,projectId:(x=u.first(O))==null?void 0:x.projectId},E={name:N.code||N.name,keys:m(N,((w=(k=N.compMod)==null?void 0:k.collectionData)==null?void 0:w.collectionRefsDefinitionsMap)??{}),dbData:D},R=l.hydrateView({viewData:E,entityData:[T]});return l.createView(R,D,T.isActivated)},"getAddViewScript"),f=c(O=>M=>{var T,L,I;return l.dropView(M.code||M.name,(L=(T=M==null?void 0:M.role)==null?void 0:T.compMod)==null?void 0:L.keyspaceName,(I=u.first(O))==null?void 0:I.projectId)},"getDeleteViewScript"),S=c(O=>M=>{var j,Z,J;let T=u.omit(M,"timeUnitpartitionKey","clusteringKey","rangePartitionKey"),L=s(T),I=n(T),N=a({idToActivatedHashTable:I,idToNameHashTable:L,entity:T}),D={databaseName:N.compMod.keyspaceName,projectId:(j=u.first(O))==null?void 0:j.projectId},E={name:N.code||N.name,keys:m(N,((J=(Z=N.compMod)==null?void 0:Z.collectionData)==null?void 0:J.collectionRefsDefinitionsMap)??{}),dbData:D},R=N.materialized?["enableRefresh","refreshInterval","expiration","businessName","description","labels"]:["expiration","businessName","description","labels"],x=p(T);if(!u.some(R,s0=>!d(x[s0])))return"";let w=l.hydrateView({viewData:E,entityData:[N]});return l.alterView(w,D)},"getModifiedViewScript"),m=c((O,M)=>r(O,(T,L)=>{let I=M[L.refId];if(!I)return l.hydrateViewColumn({name:T,isActivated:L.isActivated});let N=u.get(I.collection,"[0].code","")||u.get(I.collection,"[0].collectionName","")||"",D=u.get(I.bucket,"[0].code")||u.get(I.bucket,"[0].name",""),E=I.name;return E===T?l.hydrateViewColumn({containerData:I.bucket,entityData:I.collection,isActivated:L.isActivated,definition:I.definition,entityName:N,name:E,dbName:D}):l.hydrateViewColumn({containerData:I.bucket,entityData:I.collection,isActivated:L.isActivated,definition:I.definition,alias:T,entityName:N,name:E,dbName:D})}),"getKeys");return{getAddViewScript:h,getDeleteViewScript:f,getModifiedViewScript:S}}});var Zy=v((Z00,zy)=>{"use strict";var NK=c(i=>i.map(e=>JSON.parse(e)).find(e=>e.collectionName==="comparisonModelCollection"),"getComparisonModelCollection"),S7=c((i,e,u)=>{var a,s,n,l;let r=(l=(n=(s=(a=i.properties)==null?void 0:a.containers)==null?void 0:s.properties)==null?void 0:n[e])==null?void 0:l.items;return[].concat(r).filter(Boolean).map(d=>{var p;return{...Object.values(d.properties)[0],...((p=Object.values(d.properties)[0])==null?void 0:p.role)??{},name:Object.keys(d.properties)[0]}}).map(u)},"getContainersScripts"),CK=c((i,e,u)=>{let{getAddContainerScript:r,getDeleteContainerScript:a,getModifiedContainer:s}=Ky()(e),n=S7(i,"added",r(u)),l=S7(i,"deleted",a(u)),d=S7(i,"modified",s(u));return[].concat(n).concat(l).concat(d)},"getAlterContainersScripts"),IK=c((i,e,u)=>{var m,O,M,T,L,I,N,D,E,R,x,k,w,j,Z,J,s0,u0,L0,S0;let{getAddCollectionScript:r,getDeleteCollectionScript:a,getAddColumnScript:s,getDeleteColumnScript:n,getModifyCollectionScript:l}=Qy()(e),d=[].concat((T=(M=(O=(m=i.properties)==null?void 0:m.entities)==null?void 0:O.properties)==null?void 0:M.added)==null?void 0:T.items).filter(Boolean).map(n0=>Object.values(n0.properties)[0]).filter(n0=>{var U0;return(U0=n0.compMod)==null?void 0:U0.created}).map(r(u)),p=[].concat((D=(N=(I=(L=i.properties)==null?void 0:L.entities)==null?void 0:I.properties)==null?void 0:N.deleted)==null?void 0:D.items).filter(Boolean).map(n0=>Object.values(n0.properties)[0]).filter(n0=>{var U0;return(U0=n0.compMod)==null?void 0:U0.deleted}).map(a(u)),h=[].concat((k=(x=(R=(E=i.properties)==null?void 0:E.entities)==null?void 0:R.properties)==null?void 0:x.modified)==null?void 0:k.items).filter(Boolean).map(n0=>Object.values(n0.properties)[0]).map(l(u)),f=[].concat((J=(Z=(j=(w=i.properties)==null?void 0:w.entities)==null?void 0:j.properties)==null?void 0:Z.added)==null?void 0:J.items).filter(Boolean).map(n0=>Object.values(n0.properties)[0]).filter(n0=>{var U0;return!((U0=n0.compMod)!=null&&U0.created)}).flatMap(s(u)),S=[].concat((S0=(L0=(u0=(s0=i.properties)==null?void 0:s0.entities)==null?void 0:u0.properties)==null?void 0:L0.deleted)==null?void 0:S0.items).filter(Boolean).map(n0=>Object.values(n0.properties)[0]).filter(n0=>{var U0;return!((U0=n0.compMod)!=null&&U0.deleted)}).flatMap(n(u));return[...d,...p,...h,...f,...S].map(n0=>n0.trim())},"getAlterCollectionsScripts"),bK=c((i,e,u)=>{var p,h,f,S,m,O,M,T,L,I,N,D;let{getAddViewScript:r,getDeleteViewScript:a,getModifiedViewScript:s}=$y()(e),n=[].concat((S=(f=(h=(p=i.properties)==null?void 0:p.views)==null?void 0:h.properties)==null?void 0:f.added)==null?void 0:S.items).filter(Boolean).map(E=>Object.values(E.properties)[0]).map(E=>({...E,...E.role||{}})).filter(E=>{var R;return(R=E.compMod)==null?void 0:R.created}).map(r(u)),l=[].concat((T=(M=(O=(m=i.properties)==null?void 0:m.views)==null?void 0:O.properties)==null?void 0:M.deleted)==null?void 0:T.items).filter(Boolean).map(E=>Object.values(E.properties)[0]).map(E=>({...E,...E.role||{}})).filter(E=>{var R;return(R=E.compMod)==null?void 0:R.deleted}).map(a(u)),d=[].concat((D=(N=(I=(L=i.properties)==null?void 0:L.views)==null?void 0:I.properties)==null?void 0:N.modified)==null?void 0:D.items).filter(Boolean).map(E=>Object.values(E.properties)[0]).map(E=>({...E,...E.role||{}})).map(s(u));return[...l,...n,...d].map(E=>E.trim())},"getAlterViewScripts");zy.exports={getComparisonModelCollection:NK,getAlterContainersScripts:CK,getAlterCollectionsScripts:IK,getAlterViewScripts:bK}});var{convertJsonSchemaToBigQuerySchema:O7}=B7(),xK=Ey(),vK=By(),{DROP_STATEMENTS:DK}=d7(),{commentDropStatements:wK}=_y();module.exports={generateScript(i,e,u,r){try{if(e.log("info",{message:"Start generating schema"}),i.isUpdateScript)return eN(i,u,r);let a=O7(JSON.parse(i.jsonSchema));e.log("info",{message:"Generating schema finished"}),u(null,JSON.stringify(a,null,4))}catch(a){e.log("error",{message:a.message,stack:a.stack},"Error ocurred during generation schema on dataset level"),u({message:a.message,stack:a.stack})}},generateViewScript(...i){return this.generateScript(...i)},generateContainerScript(i,e,u,r){try{if(i.isUpdateScript)return i.jsonSchema=i.collections[0],eN(i,u,r);e.log("info",{message:"Start generating schema"});let a=i.entities.reduce((n,l)=>{var p,h;let d=(h=(p=i.entityData[l])==null?void 0:p[0])==null?void 0:h.collectionName;return e.log("info",{message:'Generate "'+d+'" schema'}),{...n,[d]:O7(JSON.parse(i.jsonSchema[l]))}},{}),s=(i.views||[]).reduce((n,l)=>{var p,h;let d=(h=(p=i.viewData[l])==null?void 0:p[0])==null?void 0:h.name;return e.log("info",{message:'Generate "'+d+'" schema'}),{...n,[d]:O7(JSON.parse(i.jsonSchema[l]))}},{});e.log("info",{message:"Generating schema finished"}),u(null,JSON.stringify({...a,...s||{}},null,4))}catch(a){e.log("error",{message:a.message,stack:a.stack},"Error ocurred during generation schema on dataset level"),u({message:a.message,stack:a.stack})}},testConnection(i,e,u,r){xK.testConnection(i,e,u,r).then(u,u)},applyToInstance(i,e,u,r){e.clear(),e.log("info",i,"connectionInfo",i.hiddenKeys),vK.applyToInstance(i,e,r).then(a=>{u(null,a)}).catch(a=>{let s={message:a.message,stack:a.stack};e.log("error",s,"Error when applying to instance"),u(s)})},isDropInStatements(i,e,u,r){try{let a=c((s,n="")=>u(s,DK.some(l=>n.includes(l))),"cb");i.level==="container"?this.generateContainerScript(i,e,a,r):this.generateScript(i,e,a,r)}catch(a){u({message:a.message,stack:a.stack})}}};var eN=c((i,e,u)=>{var S,m;let{getAlterContainersScripts:r,getAlterCollectionsScripts:a,getAlterViewScripts:s}=Zy(),n=JSON.parse(i.jsonSchema);if(!n)throw new Error('"comparisonModelCollection" is not found. Alter script can be generated only from Delta model');let l=r(n,u,i.modelData),d=a(n,u,i.modelData),p=s(n,u,i.modelData),h=[...l,...d,...p].join(` + +`),f=(m=(S=i.options)==null?void 0:S.additionalOptions)==null?void 0:m.some(O=>O.id==="applyDropStatements"&&O.value);e(null,f?h:wK(h))},"generateAlterScript"); +/*! Bundled license information: + +safe-buffer/index.js: + (*! safe-buffer. MIT License. Feross Aboukhadijeh *) + +teeny-request/build/src/agents.js: + (** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *) + +teeny-request/build/src/TeenyStatistics.js: + (** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *) + +teeny-request/build/src/index.js: + (** + * @license + * Copyright 2018 Google LLC + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *) + +@google-cloud/common/build/src/util.js: + (*! + * @module common/util + *) + +@google-cloud/common/build/src/service-object.js: + (*! + * @module common/service-object + *) + +@google-cloud/common/build/src/operation.js: + (*! + * @module common/operation + *) + +@google-cloud/common/build/src/service.js: + (*! + * @module common/service + *) + +@google-cloud/paginator/build/src/resource-stream.js: + (*! + * Copyright 2019 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *) + +@google-cloud/paginator/build/src/index.js: + (*! + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *) + (*! + * @module common/paginator + *) + (*! Developer Documentation + * + * paginator is used to auto-paginate `nextQuery` methods as well as + * streamifying them. + * + * Before: + * + * search.query('done=true', function(err, results, nextQuery) { + * search.query(nextQuery, function(err, results, nextQuery) {}); + * }); + * + * After: + * + * search.query('done=true', function(err, results) {}); + * + * Methods to extend should be written to accept callbacks and return a + * `nextQuery`. + *) + +is/index.js: + (**! + * is + * the definitive JavaScript type testing library + * + * @copyright 2013-2014 Enrico Marino / Jordan Harband + * @license MIT + *) + +@google-cloud/bigquery/build/src/table.js: + (*! + * Copyright 2014 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *) + (*! Developer Documentation + * + * These methods can be auto-paginated. + *) + (*! Developer Documentation + * + * All async methods (except for streams) will return a Promise in the event + * that a callback is omitted. + *) + +@google-cloud/bigquery/build/src/model.js: + (*! + * Copyright 2019 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *) + (*! Developer Documentation + * + * All async methods (except for streams) will return a Promise in the event + * that a callback is omitted. + *) + +@google-cloud/bigquery/build/src/routine.js: + (*! + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *) + (*! Developer Documentation + * + * All async methods (except for streams) will return a Promise in the event + * that a callback is omitted. + *) + +@google-cloud/bigquery/build/src/dataset.js: + (*! + * Copyright 2014 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *) + (*! Developer Documentation + * + * These methods can be auto-paginated. + *) + (*! Developer Documentation + * + * All async methods (except for streams) will return a Promise in the event + * that a callback is omitted. + *) + +@google-cloud/bigquery/build/src/job.js: + (*! + * Copyright 2014 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *) + (*! + * @module bigquery/job + *) + (*! Developer Documentation + * + * These methods can be auto-paginated. + *) + (*! Developer Documentation + * + * All async methods (except for streams) will return a Promise in the event + * that a callback is omitted. + *) + +@google-cloud/bigquery/build/src/bigquery.js: + (*! + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *) + (*! Developer Documentation + * + * These methods can be auto-paginated. + *) + (*! Developer Documentation + * + * All async methods (except for streams) will return a Promise in the event + * that a callback is omitted. + *) + +@google-cloud/bigquery/build/src/index.js: + (*! + * Copyright 2019 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *) + +antlr4/src/antlr4/polyfills/codepointat.js: + (*! https://mths.be/codepointat v0.2.0 by @mathias *) + +antlr4/src/antlr4/polyfills/fromcodepoint.js: + (*! https://mths.be/fromcodepoint v0.2.1 by @mathias *) +*/ diff --git a/forward_engineering/config.json b/forward_engineering/config.json index 51668cb..1a8f6bf 100644 --- a/forward_engineering/config.json +++ b/forward_engineering/config.json @@ -48,4 +48,4 @@ "isDropInStatements": true } ] -} \ No newline at end of file +} diff --git a/forward_engineering/configs/defaultTypes.js b/forward_engineering/configs/defaultTypes.js deleted file mode 100644 index 0e0ea3c..0000000 --- a/forward_engineering/configs/defaultTypes.js +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = { - number: 'BIGNUMERIC', - string: 'STRING', - date: 'DATE', - timestamp: 'TIMESTAMP', - binary: 'BYTES', - boolean: 'BOOL', - document: 'STRUCT', - array: 'ARRAY', - objectId: 'STRING', - default: 'STRING', -}; diff --git a/forward_engineering/configs/templates.js b/forward_engineering/configs/templates.js deleted file mode 100644 index 6d0ca9a..0000000 --- a/forward_engineering/configs/templates.js +++ /dev/null @@ -1,37 +0,0 @@ -module.exports = { - createDatabase: 'CREATE SCHEMA${ifNotExist} ${name}${dbOptions};\n', - - createTable: - 'CREATE ${orReplace}${temporary}${external}TABLE ${ifNotExist}${name} ${column_definitions}${partitions}${clustering}${options};\n', - - columnDefinition: '${name}${type}${primaryKey}${notNull}${options}', - - createForeignKeyConstraint: - '${constraintName}FOREIGN KEY (${foreignKeys}) REFERENCES ${primaryTableName}(${primaryKeys}) NOT ENFORCED', - - createView: - 'CREATE ${orReplace}${materialized}VIEW ${ifNotExist}${name}${columns}${partitions}${clustering}${options} AS ${selectStatement};\n', - - dropDatabase: 'DROP SCHEMA IF EXISTS ${name};', - - alterDatabase: 'ALTER SCHEMA IF EXISTS ${name} SET ${dbOptions};', - - dropTable: 'DROP TABLE IF EXISTS ${name};', - - alterTable: 'ALTER TABLE IF EXISTS ${name} SET ${options};', - - alterColumnOptions: - 'ALTER TABLE IF EXISTS ${tableName} ALTER COLUMN IF EXISTS ${columnName} SET OPTIONS( description="${description}" );', - - alterColumnType: 'ALTER TABLE IF EXISTS ${tableName} ALTER COLUMN IF EXISTS ${columnName} SET DATA TYPE ${type};', - - alterColumnDropNotNull: 'ALTER TABLE IF EXISTS ${tableName} ALTER COLUMN IF EXISTS ${columnName} DROP NOT NULL;', - - alterTableAddColumn: 'ALTER TABLE ${tableName} ADD COLUMN IF NOT EXISTS ${column};', - - alterTableDropColumn: 'ALTER TABLE ${tableName} DROP COLUMN IF EXISTS ${columnName};', - - dropView: 'DROP VIEW IF EXISTS ${name};', - - alterViewOptions: 'ALTER ${materialized}VIEW ${name} SET ${options};', -}; diff --git a/forward_engineering/configs/types.js b/forward_engineering/configs/types.js deleted file mode 100644 index dcce547..0000000 --- a/forward_engineering/configs/types.js +++ /dev/null @@ -1,51 +0,0 @@ -module.exports = { - ARRAY: { - mode: 'array', - }, - BIGNUMERIC: { - capacity: 16, - mode: 'decimal', - }, - BOOL: { - mode: 'boolean', - }, - BYTES: { - mode: 'binary', - }, - DATE: { - format: 'YYYY-MM-DD', - }, - DATETIME: { - format: 'YYYY-MM-DD hh:mm:ss', - }, - FLOAT64: { - capacity: 8, - mode: 'floating', - }, - GEOGRAPHY: { - format: 'euclidian', - mode: 'geospatial', - }, - INT64: { - capacity: 8, - }, - NUMERIC: { - capacity: 8, - mode: 'decimal', - }, - STRING: { - mode: 'varying', - }, - STRUCT: { - mode: 'object', - }, - TIME: { - format: 'hh:mm:ss.nnnnnn', - }, - TIMESTAMP: { - format: 'YYYY-MM-DD hh:mm:ss.nnnnnnZ', - }, - JSON: { - format: 'semi-structured', - }, -}; diff --git a/forward_engineering/ddlProvider.js b/forward_engineering/ddlProvider.js index f9c39f0..6224d8f 100644 --- a/forward_engineering/ddlProvider.js +++ b/forward_engineering/ddlProvider.js @@ -1,574 +1,45 @@ -const defaultTypes = require('./configs/defaultTypes'); -const types = require('./configs/types'); -const templates = require('./configs/templates'); -const { - isActivatedPartition, - getTablePartitioning, - getClusteringKey, - getTableOptions, - getColumnSchema, - generateViewSelectStatement, - escapeQuotes, - clearEmptyStatements, - prepareConstraintName, - wrapByBackticks -} = require('./helpers/utils'); - -module.exports = (baseProvider, options, app) => { - const { tab, commentIfDeactivated, hasType, checkAllKeysDeactivated} = app.require('@hackolade/ddl-fe-utils').general; - app.require('@hackolade/ddl-fe-utils').general - const assignTemplates = app.require('@hackolade/ddl-fe-utils').assignTemplates; - const _ = app.require('lodash'); - const { getLabels, getFullName, getContainerOptions, getViewOptions, cleanObject, foreignKeysToString, foreignActiveKeysToString } = require('./helpers/general')(app); - - const { joinActivatedAndDeactivatedStatements } = require('./utils/statementJoiner'); - - return { - createDatabase({ - databaseName, - friendlyName, - description, - ifNotExist, - projectId, - defaultExpiration, - customerEncryptionKey, - labels, - }) { - return assignTemplates(templates.createDatabase, { - name: getFullName(projectId, databaseName), - ifNotExist: ifNotExist ? ' IF NOT EXISTS' : '', - dbOptions: getContainerOptions({ - friendlyName, - description, - defaultExpiration, - customerEncryptionKey, - labels, - }), - }); - }, - - createTable( - { - name, - columns, - dbData, - description, - orReplace, - ifNotExist, - partitioning, - partitioningType, - timeUnitPartitionKey, - partitioningFilterRequired, - rangeOptions, - temporary, - expiration, - tableType, - clusteringKey, - customerEncryptionKey, - labels, - friendlyName, - externalTableOptions, - foreignKeyConstraints, - primaryKey - }, - isActivated, - ) { - const tableName = getFullName(dbData.projectId, dbData.databaseName, name); - const orReplaceTable = orReplace ? 'OR REPLACE ' : ''; - const temporaryTable = temporary ? 'TEMPORARY ' : ''; - const ifNotExistTable = ifNotExist ? 'IF NOT EXISTS ' : ''; - const isPartitionActivated = isActivatedPartition({ - partitioning, - timeUnitPartitionKey, - rangeOptions, - }); - const partitions = getTablePartitioning({ - partitioning, - partitioningType, - timeUnitPartitionKey, - rangeOptions, - }); - const clustering = getClusteringKey(clusteringKey, isActivated); - const isExternal = tableType === 'External'; - const options = getTableOptions( - tab, - getLabels, - )({ - externalTableOptions: isExternal ? _.omit(externalTableOptions, 'autodetect') : null, - partitioningFilterRequired: isExternal ? false : partitioningFilterRequired, - customerEncryptionKey, - partitioning, - friendlyName, - description, - expiration, - labels, - }); - const external = isExternal ? 'EXTERNAL ' : ''; - const columnStatementDtos = (columns || []).map(columnDto => ({ - statement: columnDto.column, - isActivated: columnDto.isActivated, - })); - const partitionsStatement = commentIfDeactivated(partitions, { isActivated: isPartitionActivated }); - const compositePkFieldsNamesList = primaryKey.flatMap(compositePK => compositePK?.compositePrimaryKey.map(key => wrapByBackticks(key.name))) - const compositePrimaryKeyOutlineConstraint = compositePkFieldsNamesList.length ? `PRIMARY KEY (${compositePkFieldsNamesList.join(', ')}) NOT ENFORCED`: '' - const compositePrimaryKeyOutlineConstraintStatementDto = { - statement: compositePrimaryKeyOutlineConstraint, - isActivated: true, - }; - const foreignKeyConstraintStatementDtos = (foreignKeyConstraints || []) - .map(constraintDto => ({ - statement: commentIfDeactivated(constraintDto.statement, { isActivated: constraintDto.isActivated }), - isActivated: constraintDto.isActivated, - })); - - const statementDtosToAddInsideTable = [ - ...columnStatementDtos, - compositePrimaryKeyOutlineConstraintStatementDto, - ...foreignKeyConstraintStatementDtos, - ] - .filter(statementDto => Boolean(statementDto.statement)); - const joinedStatementsToAddInsideTable = joinActivatedAndDeactivatedStatements({ - statementDtos: statementDtosToAddInsideTable, - delimiter: ',\n', - delimiterForLastActivatedStatement: '\n', - }); - - const tableStatement = assignTemplates(templates.createTable, { - name: tableName, - column_definitions: externalTableOptions?.autodetect - ? '' - : '(\n' + tab(joinedStatementsToAddInsideTable) + '\n)', - orReplace: orReplaceTable, - temporary: temporaryTable, - ifNotExist: ifNotExistTable, - partitions: partitionsStatement && !isExternal ? '\n' + partitionsStatement : '', - clustering: isExternal ? '' : clustering, - external, - options, - }); - - return tableStatement; - }, - - convertColumnDefinition(columnDefinition) { - return { - column: commentIfDeactivated(getColumnSchema({ assignTemplates, tab, templates })(columnDefinition), { - isActivated: columnDefinition.isActivated, - }), - isActivated: columnDefinition.isActivated, - }; - }, - - createView(viewData, dbData, isActivated) { - const viewName = getFullName(dbData.projectId, dbData.databaseName, viewData.name); - let columns = ''; - const allDeactivated = viewData.keys.length && viewData.keys.every(key => !key.isActivated); - - if (!viewData.materialized) { - if (isActivated && !allDeactivated) { - const activated = viewData.keys - .filter(key => key.isActivated) - .map(key => (key.alias || key.name)) - .filter(Boolean) - .map(wrapByBackticks); - const deActivated = viewData.keys - .filter(key => !key.isActivated) - .map(key => (key.alias || key.name)) - .filter(Boolean) - .map(wrapByBackticks); - - columns = activated.join(', ') + (deActivated.length ? `/* ${deActivated.join(', ')} */` : ''); - } else { - columns = viewData.keys.map(key => wrapByBackticks(key.alias || key.name)).filter(Boolean).join(', '); - } - } - const isPartitionActivated = isActivatedPartition({ - partitioning: viewData.partitioning, - timeUnitPartitionKey: viewData.partitioningType, - rangeOptions: viewData.rangeOptions, - }); - const partitions = getTablePartitioning({ - partitioning: viewData.partitioning, - partitioningType: viewData.partitioningType, - timeUnitPartitionKey: viewData.timeUnitPartitionKey, - rangeOptions: viewData.rangeOptions, - }); - const clustering = getClusteringKey(viewData.clusteringKey, isActivated); - const partitionsStatement = commentIfDeactivated(partitions, { isActivated: isPartitionActivated }); - - const statement = assignTemplates(templates.createView, { - name: viewName, - materialized: viewData.materialized ? 'MATERIALIZED ' : '', - orReplace: viewData.orReplace && !viewData.materialized ? 'OR REPLACE ' : '', - ifNotExist: viewData.ifNotExist ? 'IF NOT EXISTS ' : '', - columns: columns.length ? `\n (${columns})` : '', - selectStatement: `\n ${_.trim( - viewData.selectStatement - ? viewData.selectStatement - : generateViewSelectStatement(getFullName, isActivated && !allDeactivated)({ - columns: viewData.keys, - datasetName: dbData.databaseName, - projectId: dbData.projectId, - }), - )}`, - options: getViewOptions(viewData), - partitions: partitionsStatement ? '\n' + partitionsStatement : '', - clustering, - }); - - if (isActivated && allDeactivated) { - return commentIfDeactivated(statement, { isActivated: false }); - } else { - return statement; - } - }, - - createForeignKeyConstraint({ - name, - isActivated, - foreignKey, - primaryTable, - primaryKey, - primaryTableActivated, - foreignTableActivated, - primarySchemaName, - }, dbData, schemaData) { - const isAllPrimaryKeysDeactivated = checkAllKeysDeactivated(primaryKey); - const isAllForeignKeysDeactivated = checkAllKeysDeactivated(foreignKey); - const isActivatedBasedOnTableData = - isActivated && - !isAllPrimaryKeysDeactivated && - !isAllForeignKeysDeactivated && - primaryTableActivated && - foreignTableActivated; - - return { - statement: assignTemplates(templates.createForeignKeyConstraint, { - constraintName: name ? `CONSTRAINT ${prepareConstraintName(name)} ` : '', - foreignKeys: isActivatedBasedOnTableData ? foreignKeysToString(foreignKey) : foreignActiveKeysToString(foreignKey), - primaryTableName: getFullName(null, primarySchemaName, primaryTable), - primaryKeys: isActivatedBasedOnTableData ? foreignKeysToString(primaryKey) : foreignActiveKeysToString(primaryKey), - }), - isActivated: isActivatedBasedOnTableData, - }; - }, - - getDefaultType(type) { - return defaultTypes[type]; - }, - - getTypesDescriptors() { - return types; - }, - - hasType(type) { - return hasType(types, type); - }, - - hydrateColumn({ columnDefinition, jsonSchema, dbData }) { - return { - name: columnDefinition.name, - type: columnDefinition.type, - isActivated: columnDefinition.isActivated, - description: jsonSchema.refDescription || jsonSchema.description, - dataTypeMode: jsonSchema.dataTypeMode, - jsonSchema, - }; - }, - - hydrateDatabase(containerData, data) { - const modelData = data?.modelData; - - return { - databaseName: containerData.name, - friendlyName: containerData.businessName, - description: containerData.description, - isActivated: containerData.isActivated, - ifNotExist: containerData.ifNotExist, - projectId: modelData?.[0]?.projectID, - defaultExpiration: containerData.enableTableExpiration ? containerData.defaultExpiration : '', - customerEncryptionKey: - containerData.encryption === 'Customer-managed' ? containerData.customerEncryptionKey : '', - labels: Array.isArray(containerData.labels) ? containerData.labels : [], - }; - }, - - hydrateTable({ tableData, entityData, jsonSchema }) { - const data = entityData[0]; - const primaryKey = entityData[1]?.primaryKey ?? [] - const tableOptions = data.tableOptions || {}; - const uris = (tableOptions.uris || []).map(uri => uri.uri).filter(Boolean); - const decimal_target_types = (tableOptions.decimal_target_types || []).map(({ value }) => value); - const commonOptions = { - format: tableOptions.format, - uris: !_.isEmpty(uris) ? uris : undefined, - decimal_target_types: !_.isEmpty(decimal_target_types) ? decimal_target_types : undefined, - autodetect: tableOptions.autodetect, - }; - - return { - ...tableData, - name: data.code || data.collectionName, - friendlyName: jsonSchema.title && jsonSchema.title !== data.collectionName ? jsonSchema.title : '', - description: data.description, - orReplace: data.orReplace, - ifNotExist: data.ifNotExist, - partitioning: data.partitioning, - partitioningType: data.partitioningType, - timeUnitPartitionKey: data.timeUnitpartitionKey, - partitioningFilterRequired: data.partitioningFilterRequired, - rangeOptions: data.rangeOptions, - temporary: data.temporary, - expiration: data.expiration, - tableType: data.tableType, - clusteringKey: data.clusteringKey, - customerEncryptionKey: data.encryption ? data.customerEncryptionKey : '', - labels: data.labels, - primaryKey, - externalTableOptions: cleanObject(({ - AVRO: { - ...commonOptions, - ..._.pick(tableOptions, [ - 'require_hive_partition_filter', - 'hive_partition_uri_prefix', - 'reference_file_schema_uri', - 'enable_logical_types', - ]), - }, - CSV: { - ...commonOptions, - ..._.pick(tableOptions, [ - 'allow_quoted_newlines', - 'allow_jagged_rows', - 'quote', - 'skip_leading_rows', - 'preserve_ascii_control_characters', - 'null_marker', - 'field_delimiter', - 'encoding', - 'ignore_unknown_values', - 'compression', - 'max_bad_records', - 'require_hive_partition_filter', - 'hive_partition_uri_prefix', - ]), - }, - DATASTORE_BACKUP: { - ...commonOptions, - ..._.pick(tableOptions, [ - 'projection_fields', - ]), - }, - GOOGLE_SHEETS: { - ...commonOptions, - ..._.pick(tableOptions, [ - 'max_bad_records', - 'sheet_range', - ]), - }, - JSON: { - ...commonOptions, - ..._.pick(tableOptions, [ - 'ignore_unknown_values', - 'compression', - 'max_bad_records', - 'require_hive_partition_filter', - 'hive_partition_uri_prefix', - 'json_extension', - ]), - }, - ORC: { - ...commonOptions, - ..._.pick(tableOptions, [ - 'require_hive_partition_filter', - 'hive_partition_uri_prefix', - 'reference_file_schema_uri', - ]), - }, - PARQUET: { - ...commonOptions, - ..._.pick(tableOptions, [ - 'require_hive_partition_filter', - 'hive_partition_uri_prefix', - 'reference_file_schema_uri', - 'enable_list_inference', - 'enum_as_string', - ]), - }, - CLOUD_BIGTABLE: { - ...commonOptions, - uris: [tableOptions.bigtableUri], - bigtable_options: tableOptions.bigtable_options, - }, - })[tableOptions.format] || {}), - }; - }, - - hydrateViewColumn(data) { - return { - name: data.name, - tableName: data.entityName, - alias: data.alias, - isActivated: data.isActivated, - }; - }, - - hydrateView({ viewData, entityData }) { - const detailsTab = entityData[0]; - - return { - name: viewData.name, - tableName: viewData.tableName, - keys: viewData.keys, - materialized: detailsTab.materialized, - orReplace: detailsTab.orReplace, - ifNotExist: detailsTab.ifNotExist, - selectStatement: detailsTab.selectStatement, - labels: detailsTab.labels, - description: detailsTab.description, - expiration: detailsTab.expiration, - friendlyName: detailsTab.businessName, - partitioning: detailsTab.partitioning, - partitioningType: detailsTab.partitioningType, - timeUnitPartitionKey: detailsTab.timeUnitpartitionKey, - clusteringKey: detailsTab.clusteringKey, - rangeOptions: detailsTab.rangeOptions, - refreshInterval: detailsTab.refreshInterval, - enableRefresh: detailsTab.enableRefresh, - maxStaleness: detailsTab.maxStaleness, - allowNonIncrementalDefinition: detailsTab.allowNonIncrementalDefinition, - }; - }, - - commentIfDeactivated(statement, data, isPartOfLine) { - return commentIfDeactivated(statement, data, isPartOfLine); - }, - - // * statements for alter script from delta model - dropDatabase(name) { - return assignTemplates(templates.dropDatabase, { name }); - }, - - alterDatabase({ - databaseName, - friendlyName, - description, - projectId, - defaultExpiration, - customerEncryptionKey, - labels, - }) { - return assignTemplates(templates.alterDatabase, { - name: getFullName(projectId, databaseName), - dbOptions: getContainerOptions({ - friendlyName, - description, - defaultExpiration, - customerEncryptionKey, - labels, - }), - }); - }, - - dropTable(tableName, databaseName, projectId) { - return assignTemplates(templates.dropTable, { - name: getFullName(projectId, databaseName, tableName), - }); - }, - - alterTableOptions({ - name, - dbData, - description, - partitioning, - partitioningFilterRequired, - expiration, - tableType, - customerEncryptionKey, - labels, - friendlyName, - }) { - const tableName = getFullName(dbData.projectId, dbData.databaseName, name); - const isExternal = tableType === 'External'; - - const options = getTableOptions( - tab, - getLabels, - )({ - partitioningFilterRequired: isExternal ? false : partitioningFilterRequired, - customerEncryptionKey, - partitioning, - friendlyName, - description, - expiration, - labels, - }); - - return assignTemplates(templates.alterTable, { - name: tableName, - options, - }); - }, - - alterColumnOptions(tableName, columnName, description) { - return assignTemplates(templates.alterColumnOptions, { - description: escapeQuotes(description), - tableName: wrapByBackticks(tableName), - columnName: wrapByBackticks(columnName), - }); - }, - - alterColumnType(tableName, columnDefinition) { - const columnSchema = getColumnSchema({ assignTemplates, tab, templates })( - _.pick(columnDefinition, 'type', 'dataTypeMode', 'jsonSchema'), - ); - - return assignTemplates(templates.alterColumnType, { - columnName: wrapByBackticks(columnDefinition.name), - type: columnSchema, - tableName: wrapByBackticks(columnDefinition.name), - }); - }, - - alterColumnDropNotNull(tableName, columnName) { - return assignTemplates(templates.alterColumnDropNotNull, { - columnName: wrapByBackticks(columnName), - tableName: wrapByBackticks(columnName), - }); - }, - - addColumn({ column }, tableName, dbData) { - const fullTableName = getFullName(dbData.projectId, dbData.databaseName, tableName); - - return assignTemplates(templates.alterTableAddColumn, { - tableName: fullTableName, - column: column, - }); - }, - - dropColumn(columnName, tableName, dbData) { - const fullTableName = getFullName(dbData.projectId, dbData.databaseName, tableName); - - return assignTemplates(templates.alterTableDropColumn, { - tableName: fullTableName, - columnName: wrapByBackticks(columnName), - }); - }, - - dropView(viewName, databaseName, projectId) { - return assignTemplates(templates.dropView, { - name: getFullName(projectId, databaseName, viewName), - }); - }, - - alterView(viewData, dbData) { - const viewName = getFullName(dbData.projectId, dbData.databaseName, viewData.name); - - return assignTemplates(templates.alterViewOptions, { - materialized: viewData.materialized ? 'MATERIALIZED ' : '', - name: viewName, - options: getViewOptions(viewData), - }); - }, - }; -}; +"use strict";var xe=Object.defineProperty;var T=(t,n)=>xe(t,"name",{value:n,configurable:!0});var F=(t,n)=>()=>(n||t((n={exports:{}}).exports,n),n.exports);var z=F((nt,G)=>{"use strict";G.exports={number:"BIGNUMERIC",string:"STRING",date:"DATE",timestamp:"TIMESTAMP",binary:"BYTES",boolean:"BOOL",document:"STRUCT",array:"ARRAY",objectId:"STRING",default:"STRING"}});var D=F((it,H)=>{"use strict";H.exports={ARRAY:{mode:"array"},BIGNUMERIC:{capacity:16,mode:"decimal"},BOOL:{mode:"boolean"},BYTES:{mode:"binary"},DATE:{format:"YYYY-MM-DD"},DATETIME:{format:"YYYY-MM-DD hh:mm:ss"},FLOAT64:{capacity:8,mode:"floating"},GEOGRAPHY:{format:"euclidian",mode:"geospatial"},INT64:{capacity:8},NUMERIC:{capacity:8,mode:"decimal"},STRING:{mode:"varying"},STRUCT:{mode:"object"},TIME:{format:"hh:mm:ss.nnnnnn"},TIMESTAMP:{format:"YYYY-MM-DD hh:mm:ss.nnnnnnZ"},JSON:{format:"semi-structured"}}});var Z=F((rt,Q)=>{"use strict";Q.exports={createDatabase:"CREATE SCHEMA${ifNotExist} ${name}${dbOptions};\n",createTable:"CREATE ${orReplace}${temporary}${external}TABLE ${ifNotExist}${name} ${column_definitions}${partitions}${clustering}${options};\n",columnDefinition:"${name}${type}${primaryKey}${notNull}${options}",createForeignKeyConstraint:"${constraintName}FOREIGN KEY (${foreignKeys}) REFERENCES ${primaryTableName}(${primaryKeys}) NOT ENFORCED",createView:"CREATE ${orReplace}${materialized}VIEW ${ifNotExist}${name}${columns}${partitions}${clustering}${options} AS ${selectStatement};\n",dropDatabase:"DROP SCHEMA IF EXISTS ${name};",alterDatabase:"ALTER SCHEMA IF EXISTS ${name} SET ${dbOptions};",dropTable:"DROP TABLE IF EXISTS ${name};",alterTable:"ALTER TABLE IF EXISTS ${name} SET ${options};",alterColumnOptions:'ALTER TABLE IF EXISTS ${tableName} ALTER COLUMN IF EXISTS ${columnName} SET OPTIONS( description="${description}" );',alterColumnType:"ALTER TABLE IF EXISTS ${tableName} ALTER COLUMN IF EXISTS ${columnName} SET DATA TYPE ${type};",alterColumnDropNotNull:"ALTER TABLE IF EXISTS ${tableName} ALTER COLUMN IF EXISTS ${columnName} DROP NOT NULL;",alterTableAddColumn:"ALTER TABLE ${tableName} ADD COLUMN IF NOT EXISTS ${column};",alterTableDropColumn:"ALTER TABLE ${tableName} DROP COLUMN IF EXISTS ${columnName};",dropView:"DROP VIEW IF EXISTS ${name};",alterViewOptions:"ALTER ${materialized}VIEW ${name} SET ${options};"}});var q=F((at,W)=>{"use strict";var U=T((t="")=>t.replace(/(")/gi,"\\$1").replace(/\n/gi,"\\n"),"escapeQuotes"),P=T((t="")=>`\`${t}\``,"wrapByBackticks"),Me=T(t=>t?`TIMESTAMP_TRUNC(_PARTITIONTIME, ${{"By day":"DAY","By hour":"HOUR","By month":"MONTH","By year":"YEAR"}[t]||"DAY"})`:"_PARTITIONDATE","getPartitioningByIngestionTime"),ve=T((t={})=>{var u,d;let n=(d=(u=t.rangePartitionKey)==null?void 0:u[0])==null?void 0:d.name,r=Number(t.rangeStart),l=Number(t.rangeEnd),m=Number(t.rangeinterval);return n?`RANGE_BUCKET(${n}, GENERATE_ARRAY(${r}, ${l}${isNaN(m)?"":`, ${m}`}))`:""},"getPartitioningByIntegerRange"),Pe=T(({partitioning:t,timeUnitPartitionKey:n,rangeOptions:r})=>{var l,m,u,d;return t==="By time-unit column"?(l=n==null?void 0:n[0])==null?void 0:l.isActivated:t==="By integer-range"?(d=(u=(m=r==null?void 0:r[0])==null?void 0:m.rangePartitionKey)==null?void 0:u[0])==null?void 0:d.isActivated:!0},"isActivatedPartition"),Fe=T(({partitioning:t,partitioningType:n,timeUnitPartitionKey:r,rangeOptions:l})=>{var u;let m=(u=r==null?void 0:r[0])==null?void 0:u.name;if(t==="No partitioning")return"";if(t==="By ingestion time")return"PARTITION BY "+Me(n);if(t==="By time-unit column"&&m)return`PARTITION BY DATE(${P(m)})`;if(t==="By integer-range"){let d=ve(l==null?void 0:l[0]);return d?"PARTITION BY "+d:""}return""},"getTablePartitioning"),je=T((t,n)=>{if(!Array.isArray(t)||t.length===0)return"";let r=t.filter(m=>m.isActivated).map(m=>P(m.name)).join(", "),l=t.filter(m=>!m.isActivated).map(m=>P(m.name)).join(", ");return n?r.length===0?` +-- CLUSTER BY `+l:l.length===0?` +CLUSTER BY `+r:` +CLUSTER BY `+r+" /*"+l+"*/":` +CLUSTER BY `+t.map(m=>P(m.name)).join(", ")},"getClusteringKey"),Ye=T((t,n)=>({expiration:r,partitioningFilterRequired:l,partitioning:m,customerEncryptionKey:u,description:d,labels:c,friendlyName:y,externalTableOptions:C})=>{let f=[];if(y&&f.push(`friendly_name="${y}"`),d&&f.push(`description="${U(d)}"`),r&&f.push(`expiration_timestamp=TIMESTAMP "${J(r)}"`),m==="By ingestion time"&&l&&f.push("require_partition_filter=true"),u&&f.push(`kms_key_name="${u}"`),Array.isArray(c)&&c.length&&f.push(`labels=[ +${t(n(c))} +]`),C){let v=["format","bigtableUri","quote","null_marker","field_delimiter","encoding","compression","sheet_range","reference_file_schema_uri","hive_partition_uri_prefix","projection_fields","json_extension"];Object.entries(C).forEach(([s,o])=>{v.includes(s)&&(o=`"${U(o)}"`),typeof o=="boolean"&&(o=o===!0?"true":"false"),Array.isArray(o)&&(o=`[ +`+o.map(E=>t(`"${E}"`)).join(`, +`)+` +]`),f.push(`${s}=${o}`)})}return f.length?` +OPTIONS ( +${t(f.join(`, +`))} +)`:""},"getTableOptions"),J=T(t=>{let n=T(C=>(C+"").padStart(2,"0"),"fill"),r=new Date(Number(t)),l=n(r.getUTCDate()),m=n(r.getUTCMonth()+1),u=r.getUTCFullYear(),d=n(r.getUTCHours()),c=n(r.getUTCMinutes()),y=n(r.getUTCSeconds());return`${u}-${m}-${l} ${d}:${c}:${y} UTC`},"getTimestamp"),Ue=T(t=>n=>(Array.isArray(n)||(n=[n]),n.map(r=>K(t)({type:r.type,description:r.description,dataTypeMode:r.dataTypeMode,jsonSchema:r},!0))),"convertItemsToType"),Ke=T(t=>n=>Object.keys(n).map(r=>{let l=n[r];return K(t)({name:r,type:l.type,description:l.description,dataTypeMode:l.dataTypeMode,jsonSchema:l})}),"convertPropertiesToType"),qe=T((t,n)=>{let r=[];return["bignumeric","numeric"].includes((t||"").toLowerCase())&&(n.precision&&r.push(n.precision),n.scale&&r.push(n.scale)),["string","bytes"].includes((t||"").toLowerCase())&&n.length&&r.push(n.length),r.length?`(${r.join(", ")})`:""},"addParameters"),K=T(t=>({type:n,description:r,dataTypeMode:l,name:m,jsonSchema:u},d)=>{let{assignTemplates:c,tab:y,templates:C}=t,f=n,v=u.primaryKey&&!u.compositePrimaryKey?" PRIMARY KEY NOT ENFORCED":"",s="",o="";if(n==="array")f=` ARRAY< +${y(Ue(t)(u.items).join(`, +`))} +>`;else if(l==="Repeated"){let{dataTypeMode:E,..._}=u;f=K(t)({type:"array",description:r,jsonSchema:{items:[_]}})}else n==="struct"?f=` STRUCT< +${y(Ke(t)(u.properties||{}).join(`, +`))} +>`:f=(" "+n).toUpperCase()+qe(n,u);return r&&(s+=` OPTIONS( description="${U(r)}" )`),l==="Required"&&!d&&(o=" NOT NULL"),c(C.columnDefinition,{name:m&&P(m),type:f,primaryKey:v,notNull:o,options:s})},"getColumnSchema"),ke=T((t,n)=>({columns:r,projectId:l,datasetName:m})=>{let u=r.reduce((d,c)=>{let y=P(c.name);return c.alias&&(y=`${y} as ${c.alias}`),d[c.tableName]||(d[c.tableName]={activated:[],deactivated:[]}),n&&!c.isActivated?d[c.tableName].deactivated.push(y):d[c.tableName].activated.push(y),d},{});return Object.keys(u).map(d=>{let{deactivated:c,activated:y}=u[d];return`SELECT ${y.join(", ")+(c.length?`/*, ${c.join(", ")}*/`:"")||"*"} FROM ${t(l,m,d)}`}).join(` +UNION ALL +`)},"generateViewSelectStatement"),Ve=T(t=>t.filter(n=>!!n),"clearEmptyStatements"),Xe=T(t=>{let n=/[^A-Za-z0-9_]/g,r=/^[0-9]/;return(t||"").replace(n,"_").replace(r,"_")},"prepareConstraintName");W.exports={isActivatedPartition:Pe,getTablePartitioning:Fe,getClusteringKey:je,getTableOptions:Ye,getColumnSchema:K,generateViewSelectStatement:ke,getTimestamp:J,escapeQuotes:U,clearEmptyStatements:Ve,prepareConstraintName:Xe,wrapByBackticks:P}});var te=F((ot,ee)=>{"use strict";var{escapeQuotes:w,getTimestamp:Ge,wrapByBackticks:k}=q();ee.exports=t=>{let n=t.require("lodash"),{commentIfDeactivated:r,tab:l}=t.require("@hackolade/ddl-fe-utils").general,m=T((s,o,E)=>{let _=[];return s&&_.push(s),o&&_.push(o),E&&_.push(E),"`"+_.join(".")+"`"},"getFullName"),u=T(s=>s.map(({labelKey:o,labelValue:E})=>`("${o}", "${E}")`).join(`, +`),"getLabels"),d=T(({friendlyName:s,description:o,defaultExpiration:E,customerEncryptionKey:_,labels:S})=>{let e=[];return s&&e.push(`friendly_name="${s}"`),o&&e.push(`description="${w(o)}"`),_&&e.push(`default_kms_key_name="${_}"`),E&&e.push(`default_table_expiration_days=${E}`),S.length&&e.push(`labels=[ +${l(u(S))} +]`),e.length?` +OPTIONS( +${l(e.join(`, +`))} +)`:""},"getContainerOptions"),c=T(s=>{if(!s.materialized)return[];let o=[];return s.enableRefresh&&(o.push("enable_refresh=true"),s.refreshInterval&&o.push(`refresh_interval_minutes=${s.refreshInterval}`)),s.maxStaleness&&o.push(`max_staleness=${s.maxStaleness}`),s.allowNonIncrementalDefinition&&o.push(`allow_non_incremental_definition=${s.allowNonIncrementalDefinition}`),o},"getMaterializedViewOptions");return{getLabels:u,getFullName:m,getContainerOptions:d,getViewOptions:T(s=>{let o=[];return s.friendlyName&&o.push(`friendly_name="${s.friendlyName}"`),s.description&&o.push(`description="${w(s.description)}"`),s.expiration&&o.push(`expiration_timestamp=TIMESTAMP "${Ge(s.expiration)}"`),Array.isArray(s.labels)&&s.labels.length&&o.push(`labels=[ +${l(u(s.labels))} +]`),o=[...o,...c(s)],o.length?` + OPTIONS( +${l(o.join(`, +`))} +)`:""},"getViewOptions"),cleanObject:T(s=>Object.entries(s).filter(([o,E])=>E).reduce((o,[E,_])=>({...o,[E]:_}),{}),"cleanObject"),foreignKeysToString:T(s=>{if(Array.isArray(s)){let o=s.filter(S=>n.get(S,"isActivated",!0)).map(S=>k(S.name.trim())),E=s.filter(S=>!n.get(S,"isActivated",!0)).map(S=>k(S.name.trim())),_=E.length?r(E,{isActivated:!1},!0):"";return o.join(", ")+_}return s},"foreignKeysToString"),foreignActiveKeysToString:T(s=>s.map(o=>k(o.name.trim())).join(", "),"foreignActiveKeysToString")}}});var ie=F((ct,ne)=>{"use strict";var ze=T(({index:t,amountOfStatements:n,lastIndexOfActivatedStatement:r,delimiter:l,delimiterForLastActivatedStatement:m})=>t===n-1?"":r===-1?l:t===r?m:l,"getDelimiterForJoiningStatementsBasedOnActivation"),He=T(({statementDtos:t})=>{for(let n=t.length-1;n>=0;n--)if((t[n]||{}).isActivated)return n;return-1},"getLastIndexOfActivatedStatement"),De=T(({statementDtos:t,delimiter:n=`, +`,delimiterForLastActivatedStatement:r=` +`})=>{let l=He({statementDtos:t});return t.map((m,u)=>{let{statement:d}=m,c=ze({index:u,amountOfStatements:t.length,lastIndexOfActivatedStatement:l,delimiter:n,delimiterForLastActivatedStatement:r});return d+c}).join("")},"joinActivatedAndDeactivatedStatements");ne.exports={joinActivatedAndDeactivatedStatements:De}});var Qe=z(),re=D(),N=Z(),{isActivatedPartition:ae,getTablePartitioning:se,getClusteringKey:oe,getTableOptions:le,getColumnSchema:ce,generateViewSelectStatement:Ze,escapeQuotes:Je,clearEmptyStatements:pt,prepareConstraintName:We,wrapByBackticks:B}=q();module.exports=(t,n,r)=>{let{tab:l,commentIfDeactivated:m,hasType:u,checkAllKeysDeactivated:d}=r.require("@hackolade/ddl-fe-utils").general;r.require("@hackolade/ddl-fe-utils").general;let c=r.require("@hackolade/ddl-fe-utils").assignTemplates,y=r.require("lodash"),{getLabels:C,getFullName:f,getContainerOptions:v,getViewOptions:s,cleanObject:o,foreignKeysToString:E,foreignActiveKeysToString:_}=te()(r),{joinActivatedAndDeactivatedStatements:S}=ie();return{createDatabase({databaseName:e,friendlyName:a,description:i,ifNotExist:p,projectId:g,defaultExpiration:A,customerEncryptionKey:b,labels:R}){return c(N.createDatabase,{name:f(g,e),ifNotExist:p?" IF NOT EXISTS":"",dbOptions:v({friendlyName:a,description:i,defaultExpiration:A,customerEncryptionKey:b,labels:R})})},createTable({name:e,columns:a,dbData:i,description:p,orReplace:g,ifNotExist:A,partitioning:b,partitioningType:R,timeUnitPartitionKey:I,partitioningFilterRequired:x,rangeOptions:$,temporary:h,expiration:M,tableType:L,clusteringKey:me,customerEncryptionKey:pe,labels:ue,friendlyName:de,externalTableOptions:Y,foreignKeyConstraints:Te,primaryKey:fe},ye){let Ae=f(i.projectId,i.databaseName,e),Ee=g?"OR REPLACE ":"",ge=h?"TEMPORARY ":"",Ne=A?"IF NOT EXISTS ":"",_e=ae({partitioning:b,timeUnitPartitionKey:I,rangeOptions:$}),be=se({partitioning:b,partitioningType:R,timeUnitPartitionKey:I,rangeOptions:$}),Ie=oe(me,ye),j=L==="External",$e=le(l,C)({externalTableOptions:j?y.omit(Y,"autodetect"):null,partitioningFilterRequired:j?!1:x,customerEncryptionKey:pe,partitioning:b,friendlyName:de,description:p,expiration:M,labels:ue}),Se=j?"EXTERNAL ":"",Re=(a||[]).map(O=>({statement:O.column,isActivated:O.isActivated})),V=m(be,{isActivated:_e}),X=fe.flatMap(O=>O==null?void 0:O.compositePrimaryKey.map(Be=>B(Be.name))),he={statement:X.length?`PRIMARY KEY (${X.join(", ")}) NOT ENFORCED`:"",isActivated:!0},Oe=(Te||[]).map(O=>({statement:m(O.statement,{isActivated:O.isActivated}),isActivated:O.isActivated})),Ce=[...Re,he,...Oe].filter(O=>!!O.statement),Le=S({statementDtos:Ce,delimiter:`, +`,delimiterForLastActivatedStatement:` +`});return c(N.createTable,{name:Ae,column_definitions:Y!=null&&Y.autodetect?"":`( +`+l(Le)+` +)`,orReplace:Ee,temporary:ge,ifNotExist:Ne,partitions:V&&!j?` +`+V:"",clustering:j?"":Ie,external:Se,options:$e})},convertColumnDefinition(e){return{column:m(ce({assignTemplates:c,tab:l,templates:N})(e),{isActivated:e.isActivated}),isActivated:e.isActivated}},createView(e,a,i){let p=f(a.projectId,a.databaseName,e.name),g="",A=e.keys.length&&e.keys.every(h=>!h.isActivated);if(!e.materialized)if(i&&!A){let h=e.keys.filter(L=>L.isActivated).map(L=>L.alias||L.name).filter(Boolean).map(B),M=e.keys.filter(L=>!L.isActivated).map(L=>L.alias||L.name).filter(Boolean).map(B);g=h.join(", ")+(M.length?`/* ${M.join(", ")} */`:"")}else g=e.keys.map(h=>B(h.alias||h.name)).filter(Boolean).join(", ");let b=ae({partitioning:e.partitioning,timeUnitPartitionKey:e.partitioningType,rangeOptions:e.rangeOptions}),R=se({partitioning:e.partitioning,partitioningType:e.partitioningType,timeUnitPartitionKey:e.timeUnitPartitionKey,rangeOptions:e.rangeOptions}),I=oe(e.clusteringKey,i),x=m(R,{isActivated:b}),$=c(N.createView,{name:p,materialized:e.materialized?"MATERIALIZED ":"",orReplace:e.orReplace&&!e.materialized?"OR REPLACE ":"",ifNotExist:e.ifNotExist?"IF NOT EXISTS ":"",columns:g.length?` + (${g})`:"",selectStatement:` + ${y.trim(e.selectStatement?e.selectStatement:Ze(f,i&&!A)({columns:e.keys,datasetName:a.databaseName,projectId:a.projectId}))}`,options:s(e),partitions:x?` +`+x:"",clustering:I});return i&&A?m($,{isActivated:!1}):$},createForeignKeyConstraint({name:e,isActivated:a,foreignKey:i,primaryTable:p,primaryKey:g,primaryTableActivated:A,foreignTableActivated:b,primarySchemaName:R},I,x){let $=d(g),h=d(i),M=a&&!$&&!h&&A&&b;return{statement:c(N.createForeignKeyConstraint,{constraintName:e?`CONSTRAINT ${We(e)} `:"",foreignKeys:M?E(i):_(i),primaryTableName:f(null,R,p),primaryKeys:M?E(g):_(g)}),isActivated:M}},getDefaultType(e){return Qe[e]},getTypesDescriptors(){return re},hasType(e){return u(re,e)},hydrateColumn({columnDefinition:e,jsonSchema:a,dbData:i}){return{name:e.name,type:e.type,isActivated:e.isActivated,description:a.refDescription||a.description,dataTypeMode:a.dataTypeMode,jsonSchema:a}},hydrateDatabase(e,a){var p;let i=a==null?void 0:a.modelData;return{databaseName:e.name,friendlyName:e.businessName,description:e.description,isActivated:e.isActivated,ifNotExist:e.ifNotExist,projectId:(p=i==null?void 0:i[0])==null?void 0:p.projectID,defaultExpiration:e.enableTableExpiration?e.defaultExpiration:"",customerEncryptionKey:e.encryption==="Customer-managed"?e.customerEncryptionKey:"",labels:Array.isArray(e.labels)?e.labels:[]}},hydrateTable({tableData:e,entityData:a,jsonSchema:i}){var x;let p=a[0],g=((x=a[1])==null?void 0:x.primaryKey)??[],A=p.tableOptions||{},b=(A.uris||[]).map($=>$.uri).filter(Boolean),R=(A.decimal_target_types||[]).map(({value:$})=>$),I={format:A.format,uris:y.isEmpty(b)?void 0:b,decimal_target_types:y.isEmpty(R)?void 0:R,autodetect:A.autodetect};return{...e,name:p.code||p.collectionName,friendlyName:i.title&&i.title!==p.collectionName?i.title:"",description:p.description,orReplace:p.orReplace,ifNotExist:p.ifNotExist,partitioning:p.partitioning,partitioningType:p.partitioningType,timeUnitPartitionKey:p.timeUnitpartitionKey,partitioningFilterRequired:p.partitioningFilterRequired,rangeOptions:p.rangeOptions,temporary:p.temporary,expiration:p.expiration,tableType:p.tableType,clusteringKey:p.clusteringKey,customerEncryptionKey:p.encryption?p.customerEncryptionKey:"",labels:p.labels,primaryKey:g,externalTableOptions:o({AVRO:{...I,...y.pick(A,["require_hive_partition_filter","hive_partition_uri_prefix","reference_file_schema_uri","enable_logical_types"])},CSV:{...I,...y.pick(A,["allow_quoted_newlines","allow_jagged_rows","quote","skip_leading_rows","preserve_ascii_control_characters","null_marker","field_delimiter","encoding","ignore_unknown_values","compression","max_bad_records","require_hive_partition_filter","hive_partition_uri_prefix"])},DATASTORE_BACKUP:{...I,...y.pick(A,["projection_fields"])},GOOGLE_SHEETS:{...I,...y.pick(A,["max_bad_records","sheet_range"])},JSON:{...I,...y.pick(A,["ignore_unknown_values","compression","max_bad_records","require_hive_partition_filter","hive_partition_uri_prefix","json_extension"])},ORC:{...I,...y.pick(A,["require_hive_partition_filter","hive_partition_uri_prefix","reference_file_schema_uri"])},PARQUET:{...I,...y.pick(A,["require_hive_partition_filter","hive_partition_uri_prefix","reference_file_schema_uri","enable_list_inference","enum_as_string"])},CLOUD_BIGTABLE:{...I,uris:[A.bigtableUri],bigtable_options:A.bigtable_options}}[A.format]||{})}},hydrateViewColumn(e){return{name:e.name,tableName:e.entityName,alias:e.alias,isActivated:e.isActivated}},hydrateView({viewData:e,entityData:a}){let i=a[0];return{name:e.name,tableName:e.tableName,keys:e.keys,materialized:i.materialized,orReplace:i.orReplace,ifNotExist:i.ifNotExist,selectStatement:i.selectStatement,labels:i.labels,description:i.description,expiration:i.expiration,friendlyName:i.businessName,partitioning:i.partitioning,partitioningType:i.partitioningType,timeUnitPartitionKey:i.timeUnitpartitionKey,clusteringKey:i.clusteringKey,rangeOptions:i.rangeOptions,refreshInterval:i.refreshInterval,enableRefresh:i.enableRefresh,maxStaleness:i.maxStaleness,allowNonIncrementalDefinition:i.allowNonIncrementalDefinition}},commentIfDeactivated(e,a,i){return m(e,a,i)},dropDatabase(e){return c(N.dropDatabase,{name:e})},alterDatabase({databaseName:e,friendlyName:a,description:i,projectId:p,defaultExpiration:g,customerEncryptionKey:A,labels:b}){return c(N.alterDatabase,{name:f(p,e),dbOptions:v({friendlyName:a,description:i,defaultExpiration:g,customerEncryptionKey:A,labels:b})})},dropTable(e,a,i){return c(N.dropTable,{name:f(i,a,e)})},alterTableOptions({name:e,dbData:a,description:i,partitioning:p,partitioningFilterRequired:g,expiration:A,tableType:b,customerEncryptionKey:R,labels:I,friendlyName:x}){let $=f(a.projectId,a.databaseName,e),h=b==="External",M=le(l,C)({partitioningFilterRequired:h?!1:g,customerEncryptionKey:R,partitioning:p,friendlyName:x,description:i,expiration:A,labels:I});return c(N.alterTable,{name:$,options:M})},alterColumnOptions(e,a,i){return c(N.alterColumnOptions,{description:Je(i),tableName:B(e),columnName:B(a)})},alterColumnType(e,a){let i=ce({assignTemplates:c,tab:l,templates:N})(y.pick(a,"type","dataTypeMode","jsonSchema"));return c(N.alterColumnType,{columnName:B(a.name),type:i,tableName:B(a.name)})},alterColumnDropNotNull(e,a){return c(N.alterColumnDropNotNull,{columnName:B(a),tableName:B(a)})},addColumn({column:e},a,i){let p=f(i.projectId,i.databaseName,a);return c(N.alterTableAddColumn,{tableName:p,column:e})},dropColumn(e,a,i){let p=f(i.projectId,i.databaseName,a);return c(N.alterTableDropColumn,{tableName:p,columnName:B(e)})},dropView(e,a,i){return c(N.dropView,{name:f(i,a,e)})},alterView(e,a){let i=f(a.projectId,a.databaseName,e.name);return c(N.alterViewOptions,{materialized:e.materialized?"MATERIALIZED ":"",name:i,options:s(e)})}}}; diff --git a/forward_engineering/helpers/alterScriptFromDeltaHelper.js b/forward_engineering/helpers/alterScriptFromDeltaHelper.js deleted file mode 100644 index ad8e5b0..0000000 --- a/forward_engineering/helpers/alterScriptFromDeltaHelper.js +++ /dev/null @@ -1,115 +0,0 @@ -const getComparisonModelCollection = collections => { - return collections - .map(collection => JSON.parse(collection)) - .find(collection => collection.collectionName === 'comparisonModelCollection'); -}; - -const getContainersScripts = (collection, mode, getScript) => { - const containers = collection.properties?.containers?.properties?.[mode]?.items; - - return [] - .concat(containers) - .filter(Boolean) - .map(container => ({ - ...Object.values(container.properties)[0], - ...(Object.values(container.properties)[0]?.role ?? {}), - name: Object.keys(container.properties)[0], - })) - .map(getScript); -}; - -const getAlterContainersScripts = (collection, app, modelData) => { - const { getAddContainerScript, getDeleteContainerScript, getModifiedContainer } = - require('./alterScriptHelpers/alterContainerHelper')(app); - - const addContainersScripts = getContainersScripts(collection, 'added', getAddContainerScript(modelData)); - const deleteContainersScripts = getContainersScripts(collection, 'deleted', getDeleteContainerScript(modelData)); - const modifiedContainersScripts = getContainersScripts(collection, 'modified', getModifiedContainer(modelData)); - - return [].concat(addContainersScripts).concat(deleteContainersScripts).concat(modifiedContainersScripts); -}; - -const getAlterCollectionsScripts = (collection, app, modelData) => { - const { - getAddCollectionScript, - getDeleteCollectionScript, - getAddColumnScript, - getDeleteColumnScript, - getModifyCollectionScript, - } = require('./alterScriptHelpers/alterEntityHelper')(app); - - const createCollectionsScripts = [] - .concat(collection.properties?.entities?.properties?.added?.items) - .filter(Boolean) - .map(item => Object.values(item.properties)[0]) - .filter(collection => collection.compMod?.created) - .map(getAddCollectionScript(modelData)); - const deleteCollectionScripts = [] - .concat(collection.properties?.entities?.properties?.deleted?.items) - .filter(Boolean) - .map(item => Object.values(item.properties)[0]) - .filter(collection => collection.compMod?.deleted) - .map(getDeleteCollectionScript(modelData)); - const modifyCollectionScripts = [] - .concat(collection.properties?.entities?.properties?.modified?.items) - .filter(Boolean) - .map(item => Object.values(item.properties)[0]) - .map(getModifyCollectionScript(modelData)); - const addColumnScripts = [] - .concat(collection.properties?.entities?.properties?.added?.items) - .filter(Boolean) - .map(item => Object.values(item.properties)[0]) - .filter(collection => !collection.compMod?.created) - .flatMap(getAddColumnScript(modelData)); - const deleteColumnScripts = [] - .concat(collection.properties?.entities?.properties?.deleted?.items) - .filter(Boolean) - .map(item => Object.values(item.properties)[0]) - .filter(collection => !collection.compMod?.deleted) - .flatMap(getDeleteColumnScript(modelData)); - - return [ - ...createCollectionsScripts, - ...deleteCollectionScripts, - ...modifyCollectionScripts, - ...addColumnScripts, - ...deleteColumnScripts, - ].map(script => script.trim()); -}; - -const getAlterViewScripts = (collection, app, modelData) => { - const { getAddViewScript, getDeleteViewScript, getModifiedViewScript } = - require('./alterScriptHelpers/alterViewHelper')(app); - - const createViewsScripts = [] - .concat(collection.properties?.views?.properties?.added?.items) - .filter(Boolean) - .map(item => Object.values(item.properties)[0]) - .map(view => ({ ...view, ...(view.role || {}) })) - .filter(view => view.compMod?.created) - .map(getAddViewScript(modelData)); - - const deleteViewsScripts = [] - .concat(collection.properties?.views?.properties?.deleted?.items) - .filter(Boolean) - .map(item => Object.values(item.properties)[0]) - .map(view => ({ ...view, ...(view.role || {}) })) - .filter(view => view.compMod?.deleted) - .map(getDeleteViewScript(modelData)); - - const modifiedViewsScripts = [] - .concat(collection.properties?.views?.properties?.modified?.items) - .filter(Boolean) - .map(item => Object.values(item.properties)[0]) - .map(view => ({ ...view, ...(view.role || {}) })) - .map(getModifiedViewScript(modelData)); - - return [...deleteViewsScripts, ...createViewsScripts, ...modifiedViewsScripts].map(script => script.trim()); -}; - -module.exports = { - getComparisonModelCollection, - getAlterContainersScripts, - getAlterCollectionsScripts, - getAlterViewScripts, -}; diff --git a/forward_engineering/helpers/alterScriptHelpers/alterContainerHelper.js b/forward_engineering/helpers/alterScriptHelpers/alterContainerHelper.js deleted file mode 100644 index 68178e5..0000000 --- a/forward_engineering/helpers/alterScriptHelpers/alterContainerHelper.js +++ /dev/null @@ -1,49 +0,0 @@ -module.exports = (app, options) => { - const _ = app.require('lodash'); - const ddlProvider = require('../../ddlProvider')(null, options, app); - const { getDbData } = app.require('@hackolade/ddl-fe-utils').general; - const { getFullName } = require('../general')(app); - const { checkCompModEqual, getCompMod } = require('./common')(app); - - const getAddContainerScript = modelData => containerData => { - const constructedDbData = getDbData([containerData]); - const dbData = ddlProvider.hydrateDatabase(constructedDbData, { modelData }); - - return _.trim(ddlProvider.createDatabase(dbData)); - }; - - const getDeleteContainerScript = modelData => containerData => { - const { name } = getDbData([containerData]); - const projectId = modelData?.[0]?.projectID; - const fullName = getFullName(projectId, name); - return ddlProvider.dropDatabase(fullName); - }; - - const getModifiedContainer = modelData => containerData => { - const compMod = getCompMod(containerData); - const optionsProperties = [ - 'businessName', - 'description', - 'customerEncryptionKey', - 'defaultExpiration', - 'labels', - ]; - - const isAnyOptionChanged = _.some(optionsProperties, property => checkCompModEqual(compMod[property] ?? {})); - - if (!isAnyOptionChanged) { - return ''; - } - - const constructedDbData = getDbData([containerData]); - const dbData = ddlProvider.hydrateDatabase(constructedDbData, { modelData }); - - return ddlProvider.alterDatabase(dbData); - }; - - return { - getAddContainerScript, - getDeleteContainerScript, - getModifiedContainer, - }; -}; diff --git a/forward_engineering/helpers/alterScriptHelpers/alterEntityHelper.js b/forward_engineering/helpers/alterScriptHelpers/alterEntityHelper.js deleted file mode 100644 index 96ca2f9..0000000 --- a/forward_engineering/helpers/alterScriptHelpers/alterEntityHelper.js +++ /dev/null @@ -1,167 +0,0 @@ -module.exports = (app, options) => { - const _ = app.require('lodash'); - const { getEntityName } = app.require('@hackolade/ddl-fe-utils').general; - const { createColumnDefinitionBySchema } = require('./createColumnDefinition')(_); - const ddlProvider = require('../../ddlProvider')(null, options, app); - const { generateIdToNameHashTable, generateIdToActivatedHashTable } = app.require('@hackolade/ddl-fe-utils'); - const { checkFieldPropertiesChanged, getCompMod, checkCompModEqual, setEntityKeys } = require('./common')(app); - - const getAddCollectionScript = modelData => collection => { - const databaseName = collection.compMod.keyspaceName; - const dbData = { databaseName, projectId: _.first(modelData)?.projectId }; - const table = { - ..._.omit(collection, 'timeUnitpartitionKey', 'clusteringKey', 'rangePartitionKey'), - ...(collection?.role || {}), - }; - const idToNameHashTable = generateIdToNameHashTable(table); - const idToActivatedHashTable = generateIdToActivatedHashTable(table); - const jsonSchema = setEntityKeys({ idToActivatedHashTable, idToNameHashTable, entity: table }); - const tableName = getEntityName(jsonSchema); - const columnDefinitions = _.toPairs(jsonSchema.properties).map(([name, column]) => - createColumnDefinitionBySchema({ - jsonSchema: column, - parentJsonSchema: jsonSchema, - name, - ddlProvider, - dbData, - }), - ); - - const tableData = { - name: tableName, - columns: columnDefinitions.map(ddlProvider.convertColumnDefinition), - foreignKeyConstraints: [], - dbData, - columnDefinitions, - }; - - const hydratedTable = ddlProvider.hydrateTable({ - entityData: [jsonSchema], - tableData, - jsonSchema, - }); - - return ddlProvider.createTable(hydratedTable, jsonSchema.isActivated); - }; - - const getDeleteCollectionScript = modelData => collection => { - const jsonSchema = { ...collection, ...(collection?.role || {}) }; - const tableName = getEntityName(jsonSchema); - const databaseName = collection.compMod.keyspaceName; - const projectId = _.first(modelData)?.projectId; - - return ddlProvider.dropTable(tableName, databaseName, projectId); - }; - - const getModifyCollectionScript = modelData => collection => { - const table = { - ..._.omit(collection, 'timeUnitpartitionKey', 'clusteringKey', 'rangePartitionKey'), - ...(collection?.role || {}), - }; - const databaseName = table.compMod.keyspaceName; - const dbData = { databaseName, projectId: _.first(modelData)?.projectId }; - const idToNameHashTable = generateIdToNameHashTable(table); - const idToActivatedHashTable = generateIdToActivatedHashTable(table); - const jsonSchema = setEntityKeys({ idToActivatedHashTable, idToNameHashTable, entity: table }); - const tableName = getEntityName(jsonSchema); - const tableData = { - name: tableName, - columns: [], - foreignKeyConstraints: [], - columnDefinitions: [], - dbData, - }; - - const modifyTableOptionsScript = getModifyTableOptions({ jsonSchema, tableData }); - const modifyColumnScripts = getModifyColumnScripts({ tableData, dbData, collection }); - - return [].concat(modifyTableOptionsScript).concat(modifyColumnScripts).filter(Boolean).join('\n\n'); - }; - - const getModifyTableOptions = ({ jsonSchema, tableData }) => { - const compMod = getCompMod(jsonSchema); - const optionsProperties = [ - 'description', - 'partitioning', - 'partitioningFilterRequired', - 'expiration', - 'tableType', - 'customerEncryptionKey', - 'encryption', - 'labels', - 'title', - ]; - - const isAnyOptionChanged = _.some(optionsProperties, property => !checkCompModEqual(compMod[property])); - - if (!isAnyOptionChanged) { - return ''; - } - - const hydratedTable = ddlProvider.hydrateTable({ - entityData: [jsonSchema], - tableData, - jsonSchema, - }); - - return ddlProvider.alterTableOptions(hydratedTable); - }; - - const getAddColumnScript = modelData => collection => { - const collectionSchema = { ...collection, ...(_.omit(collection?.role, 'properties') || {}) }; - const tableName = collectionSchema?.code || collectionSchema?.collectionName || collectionSchema?.name; - const databaseName = collectionSchema.compMod?.keyspaceName; - const dbData = { databaseName, projectId: _.first(modelData)?.projectId }; - - return _.toPairs(collection.properties) - .filter(([name, jsonSchema]) => !jsonSchema.compMod) - .map(([name, jsonSchema]) => - createColumnDefinitionBySchema({ - name, - jsonSchema, - parentJsonSchema: collectionSchema, - ddlProvider, - dbData, - }), - ) - .map(ddlProvider.convertColumnDefinition) - .map(column => ddlProvider.addColumn(column, tableName, dbData)); - }; - - const getDeleteColumnScript = modelData => collection => { - const collectionSchema = { ...collection, ...(_.omit(collection?.role, 'properties') || {}) }; - const tableName = collectionSchema?.code || collectionSchema?.collectionName || collectionSchema?.name; - const databaseName = collectionSchema.compMod?.keyspaceName; - const dbData = { databaseName, projectId: _.first(modelData)?.projectId }; - - return _.toPairs(collection.properties) - .filter(([name, jsonSchema]) => !jsonSchema.compMod) - .map(([name]) => ddlProvider.dropColumn(name, tableName, dbData)); - }; - - const getModifyColumnScripts = ({ tableData, dbData, collection }) => { - const collectionSchema = { ...collection, ...(_.omit(collection?.role, 'properties') || {}) }; - - return _.toPairs(collection.properties) - .filter(([name, jsonSchema]) => checkFieldPropertiesChanged(jsonSchema.compMod, ['type', 'mode'])) - .map(([name, jsonSchema]) => { - const columnDefinition = createColumnDefinitionBySchema({ - name, - jsonSchema, - parentJsonSchema: collectionSchema, - ddlProvider, - dbData, - }); - - return ddlProvider.alterColumnType(tableData.name, columnDefinition); - }); - }; - - return { - getAddCollectionScript, - getDeleteCollectionScript, - getModifyCollectionScript, - getAddColumnScript, - getDeleteColumnScript, - }; -}; diff --git a/forward_engineering/helpers/alterScriptHelpers/alterViewHelper.js b/forward_engineering/helpers/alterScriptHelpers/alterViewHelper.js deleted file mode 100644 index 1a1da32..0000000 --- a/forward_engineering/helpers/alterScriptHelpers/alterViewHelper.js +++ /dev/null @@ -1,110 +0,0 @@ -module.exports = (app, options) => { - const _ = app.require('lodash'); - const { mapProperties } = app.require('@hackolade/ddl-fe-utils'); - const { setEntityKeys } = require('./common')(app); - const { generateIdToNameHashTable, generateIdToActivatedHashTable } = app.require('@hackolade/ddl-fe-utils'); - const ddlProvider = require('../../ddlProvider')(null, options, app); - const { checkCompModEqual, getCompMod } = require('./common')(app); - - const getAddViewScript = modelData => jsonSchema => { - const view = _.omit(jsonSchema, 'timeUnitpartitionKey', 'clusteringKey', 'rangePartitionKey'); - const idToNameHashTable = generateIdToNameHashTable(view); - const idToActivatedHashTable = generateIdToActivatedHashTable(view); - const viewSchema = setEntityKeys({ idToActivatedHashTable, idToNameHashTable, entity: view }); - const dbData = { databaseName: viewSchema.compMod.keyspaceName, projectId: _.first(modelData)?.projectId }; - - const viewData = { - name: viewSchema.code || viewSchema.name, - keys: getKeys(viewSchema, viewSchema.compMod?.collectionData?.collectionRefsDefinitionsMap ?? {}), - dbData, - }; - const hydratedView = ddlProvider.hydrateView({ viewData, entityData: [view] }); - - return ddlProvider.createView(hydratedView, dbData, view.isActivated); - }; - - const getDeleteViewScript = modelData => view => { - return ddlProvider.dropView( - view.code || view.name, - view?.role?.compMod?.keyspaceName, - _.first(modelData)?.projectId, - ); - }; - - const getModifiedViewScript = modelData => jsonSchema => { - const view = _.omit(jsonSchema, 'timeUnitpartitionKey', 'clusteringKey', 'rangePartitionKey'); - const idToNameHashTable = generateIdToNameHashTable(view); - const idToActivatedHashTable = generateIdToActivatedHashTable(view); - const viewSchema = setEntityKeys({ idToActivatedHashTable, idToNameHashTable, entity: view }); - const dbData = { databaseName: viewSchema.compMod.keyspaceName, projectId: _.first(modelData)?.projectId }; - const viewData = { - name: viewSchema.code || viewSchema.name, - keys: getKeys(viewSchema, viewSchema.compMod?.collectionData?.collectionRefsDefinitionsMap ?? {}), - dbData, - }; - - const optionsProperties = viewSchema.materialized - ? ['enableRefresh', 'refreshInterval', 'expiration', 'businessName', 'description', 'labels'] - : ['expiration', 'businessName', 'description', 'labels']; - - const compMod = getCompMod(view); - const isAnyOptionChanged = _.some(optionsProperties, property => !checkCompModEqual(compMod[property])); - - if (!isAnyOptionChanged) { - return ''; - } - - const hydratedView = ddlProvider.hydrateView({ viewData, entityData: [viewSchema] }); - - return ddlProvider.alterView(hydratedView, dbData); - }; - - const getKeys = (viewSchema, collectionRefsDefinitionsMap) => { - return mapProperties(viewSchema, (propertyName, schema) => { - const definition = collectionRefsDefinitionsMap[schema.refId]; - - if (!definition) { - return ddlProvider.hydrateViewColumn({ - name: propertyName, - isActivated: schema.isActivated, - }); - } - - const entityName = - _.get(definition.collection, '[0].code', '') || - _.get(definition.collection, '[0].collectionName', '') || - ''; - const dbName = _.get(definition.bucket, '[0].code') || _.get(definition.bucket, '[0].name', ''); - const name = definition.name; - - if (name === propertyName) { - return ddlProvider.hydrateViewColumn({ - containerData: definition.bucket, - entityData: definition.collection, - isActivated: schema.isActivated, - definition: definition.definition, - entityName, - name, - dbName, - }); - } - - return ddlProvider.hydrateViewColumn({ - containerData: definition.bucket, - entityData: definition.collection, - isActivated: schema.isActivated, - definition: definition.definition, - alias: propertyName, - entityName, - name, - dbName, - }); - }); - }; - - return { - getAddViewScript, - getDeleteViewScript, - getModifiedViewScript, - }; -}; diff --git a/forward_engineering/helpers/alterScriptHelpers/common.js b/forward_engineering/helpers/alterScriptHelpers/common.js deleted file mode 100644 index 812123b..0000000 --- a/forward_engineering/helpers/alterScriptHelpers/common.js +++ /dev/null @@ -1,47 +0,0 @@ -module.exports = app => { - const _ = app.require('lodash'); - - const checkFieldPropertiesChanged = (compMod, propertiesToCheck) => { - return propertiesToCheck.some(prop => compMod?.oldField[prop] !== compMod?.newField[prop]); - }; - - const getCompMod = containerData => containerData.role?.compMod ?? {}; - - const checkCompModEqual = ({ new: newItem, old: oldItem } = {}) => _.isEqual(newItem, oldItem); - - const setEntityKeys = ({ idToNameHashTable, idToActivatedHashTable, entity }) => { - return { - ...entity, - clusteringKey: - entity.clusteringKey?.map(key => ({ - ...key, - name: idToNameHashTable[key.keyId], - isActivated: idToActivatedHashTable[key.keyId], - })) || [], - timeUnitpartitionKey: - entity.timeUnitpartitionKey?.map(key => ({ - ...key, - name: idToNameHashTable[key.keyId], - isActivated: idToActivatedHashTable[key.keyId], - })) || [], - rangeOptions: [ - { - ...(entity.rangeOptions ?? {}), - rangePartitionKey: - entity.rangeOptions?.rangePartitionKey?.map(key => ({ - ...key, - name: idToNameHashTable[key.keyId], - isActivated: idToActivatedHashTable[key.keyId], - })) || [], - }, - ], - }; - }; - - return { - checkFieldPropertiesChanged, - getCompMod, - checkCompModEqual, - setEntityKeys, - }; -}; diff --git a/forward_engineering/helpers/alterScriptHelpers/createColumnDefinition.js b/forward_engineering/helpers/alterScriptHelpers/createColumnDefinition.js deleted file mode 100644 index ff206e4..0000000 --- a/forward_engineering/helpers/alterScriptHelpers/createColumnDefinition.js +++ /dev/null @@ -1,107 +0,0 @@ -module.exports = _ => { - const createColumnDefinition = data => { - return Object.assign( - { - name: '', - type: '', - nullable: true, - primaryKey: false, - default: '', - length: '', - scale: '', - precision: '', - hasMaxLength: false, - }, - data, - ); - }; - - const isNullable = (parentSchema, propertyName) => { - if (!Array.isArray(parentSchema.required)) { - return true; - } - - return !parentSchema.required.includes(propertyName); - }; - - const getDefault = jsonSchema => { - const defaultValue = jsonSchema.default; - - if (_.isBoolean(defaultValue)) { - return defaultValue; - } else if (jsonSchema.default === null) { - return 'NULL'; - } else { - return defaultValue; - } - }; - - const getLength = jsonSchema => { - if (_.isNumber(jsonSchema.length)) { - return jsonSchema.length; - } else if (_.isNumber(jsonSchema.maxLength)) { - return jsonSchema.maxLength; - } else { - return ''; - } - }; - - const getScale = jsonSchema => { - if (_.isNumber(jsonSchema.scale)) { - return jsonSchema.scale; - } else { - return ''; - } - }; - - const getPrecision = jsonSchema => { - if (_.isNumber(jsonSchema.precision)) { - return jsonSchema.precision; - } else if (_.isNumber(jsonSchema.fractSecPrecision)) { - return jsonSchema.fractSecPrecision; - } else { - return ''; - } - }; - - const hasMaxLength = jsonSchema => { - if (jsonSchema.hasMaxLength) { - return jsonSchema.hasMaxLength; - } else { - return ''; - } - }; - - const getType = jsonSchema => { - if (jsonSchema.$ref) { - return jsonSchema.$ref.split('/').pop(); - } - - return jsonSchema.mode || jsonSchema.childType || jsonSchema.type; - }; - - const createColumnDefinitionBySchema = ({ name, jsonSchema, parentJsonSchema, ddlProvider, schemaData }) => { - const columnDefinition = createColumnDefinition({ - name: name, - type: getType(jsonSchema), - nullable: isNullable(parentJsonSchema, name), - default: getDefault(jsonSchema), - primaryKey: jsonSchema.primaryKey, - length: getLength(jsonSchema), - scale: getScale(jsonSchema), - precision: getPrecision(jsonSchema), - hasMaxLength: hasMaxLength(jsonSchema), - isActivated: jsonSchema.isActivated, - }); - - return ddlProvider.hydrateColumn({ - columnDefinition, - jsonSchema, - schemaData, - }); - }; - - return { - createColumnDefinitionBySchema, - }; -}; diff --git a/forward_engineering/helpers/applyToInstanceHelper.js b/forward_engineering/helpers/applyToInstanceHelper.js deleted file mode 100644 index 65164e6..0000000 --- a/forward_engineering/helpers/applyToInstanceHelper.js +++ /dev/null @@ -1,37 +0,0 @@ -const connectionHelper = require('../../reverse_engineering/helpers/connectionHelper'); - -const execute = async (bigquery, query, location) => { - const response = await bigquery.createJob({ - configuration: { - query: { - query: query, - useLegacySql: false, - }, - }, - location, - }); - const job = response[0]; - const result = await job.getQueryResults(job); - - return result; -}; - -const applyToInstance = async (connectionInfo, logger, app) => { - const _ = app.require('lodash'); - const async = app.require('async'); - const connection = connectionHelper.connect(connectionInfo); - const dataLocation = connectionInfo.containerData?.[0]?.dataLocation; - const location = dataLocation === 'default' ? '' : dataLocation; - - const queries = connectionInfo.script.split('\n\n').map((query) => { - return _.trim(query); - }).filter(Boolean); - - await async.mapSeries(queries, async query => { - const message = 'Query: ' + query.split('\n').shift().substr(0, 150); - logger.progress({ message }); - await execute(connection, query, location); - }); -}; - -module.exports = { applyToInstance }; diff --git a/forward_engineering/helpers/commentDropStatements.js b/forward_engineering/helpers/commentDropStatements.js deleted file mode 100644 index 2c0c109..0000000 --- a/forward_engineering/helpers/commentDropStatements.js +++ /dev/null @@ -1,17 +0,0 @@ -const { DROP_STATEMENTS } = require('./constants'); - -const commentDropStatements = (script = '') => - script - .split('\n') - .map(line => { - if (DROP_STATEMENTS.some(statement => line.includes(statement))) { - return `-- ${line}`; - } else { - return line; - } - }) - .join('\n'); - -module.exports = { - commentDropStatements, -}; diff --git a/forward_engineering/helpers/constants.js b/forward_engineering/helpers/constants.js deleted file mode 100644 index e3f681f..0000000 --- a/forward_engineering/helpers/constants.js +++ /dev/null @@ -1,5 +0,0 @@ -const DROP_STATEMENTS = ['DROP SCHEMA', 'DROP TABLE', 'DROP COLUMN', 'DROP VIEW']; - -module.exports = { - DROP_STATEMENTS, -}; diff --git a/forward_engineering/helpers/general.js b/forward_engineering/helpers/general.js deleted file mode 100644 index 244ef1c..0000000 --- a/forward_engineering/helpers/general.js +++ /dev/null @@ -1,145 +0,0 @@ -const { escapeQuotes, getTimestamp, wrapByBackticks} = require('./utils'); - -module.exports = app => { - const _ = app.require('lodash'); - const { tab } = app.require('@hackolade/ddl-fe-utils').general; - - const getFullName = (projectId, datasetName, tableName) => { - let name = []; - - if (projectId) { - name.push(projectId); - } - - if (datasetName) { - name.push(datasetName); - } - - if (tableName) { - name.push(tableName); - } - - return '`' + name.join('.') + '`'; - }; - - const getLabels = labels => { - return labels - .map(({ labelKey, labelValue }) => { - return `("${labelKey}", "${labelValue}")`; - }) - .join(',\n'); - }; - - const getContainerOptions = ({ friendlyName, description, defaultExpiration, customerEncryptionKey, labels }) => { - let dbOptions = []; - - if (friendlyName) { - dbOptions.push(`friendly_name="${friendlyName}"`); - } - - if (description) { - dbOptions.push(`description="${escapeQuotes(description)}"`); - } - - if (customerEncryptionKey) { - dbOptions.push(`default_kms_key_name="${customerEncryptionKey}"`); - } - - if (defaultExpiration) { - dbOptions.push(`default_table_expiration_days=${defaultExpiration}`); - } - - if (labels.length) { - dbOptions.push(`labels=[\n${tab(getLabels(labels))}\n]`); - } - - return dbOptions.length ? `\nOPTIONS(\n${tab(dbOptions.join(',\n'))}\n)` : ''; - }; - - const getMaterializedViewOptions = viewData => { - if (!viewData.materialized) { - return [] - } - - let options = [] - - if (viewData.enableRefresh) { - options.push(`enable_refresh=true`); - - if (viewData.refreshInterval) { - options.push(`refresh_interval_minutes=${viewData.refreshInterval}`); - } - } - - if (viewData.maxStaleness) { - options.push(`max_staleness=${viewData.maxStaleness}`); - } - - if (viewData.allowNonIncrementalDefinition) { - options.push(`allow_non_incremental_definition=${viewData.allowNonIncrementalDefinition}`); - } - - return options - } - - const getViewOptions = viewData => { - let options = []; - - if (viewData.friendlyName) { - options.push(`friendly_name="${viewData.friendlyName}"`); - } - - if (viewData.description) { - options.push(`description="${escapeQuotes(viewData.description)}"`); - } - - if (viewData.expiration) { - options.push(`expiration_timestamp=TIMESTAMP "${getTimestamp(viewData.expiration)}"`); - } - - if (Array.isArray(viewData.labels) && viewData.labels.length) { - options.push(`labels=[\n${tab(getLabels(viewData.labels))}\n]`); - } - - options = [...options, ...getMaterializedViewOptions(viewData)] - - return options.length ? `\n OPTIONS(\n${tab(options.join(',\n'))}\n)` : ''; - }; - - const cleanObject = (obj) => Object.entries(obj) - .filter(([name, value]) => value) - .reduce( - (result, [name, value]) => ({ - ...result, - [name]: value, - }), - {}, - ); - - const foreignKeysToString = keys => { - if (Array.isArray(keys)) { - const activatedKeys = keys.filter(key => _.get(key, 'isActivated', true)).map(key => wrapByBackticks(key.name.trim())); - const deactivatedKeys = keys.filter(key => !_.get(key, 'isActivated', true)).map(key => wrapByBackticks(key.name.trim())); - const deactivatedKeysAsString = deactivatedKeys.length - ? commentIfDeactivated(deactivatedKeys, { isActivated: false }, true) - : ''; - - return activatedKeys.join(', ') + deactivatedKeysAsString; - } - return keys; - }; - - const foreignActiveKeysToString = keys => { - return keys.map(key => wrapByBackticks(key.name.trim())).join(', '); - }; - - return { - getLabels, - getFullName, - getContainerOptions, - getViewOptions, - cleanObject, - foreignKeysToString, - foreignActiveKeysToString, - }; -}; diff --git a/forward_engineering/helpers/schemaHelper.js b/forward_engineering/helpers/schemaHelper.js deleted file mode 100644 index 1081f45..0000000 --- a/forward_engineering/helpers/schemaHelper.js +++ /dev/null @@ -1,63 +0,0 @@ - -const toUpper = (s) => String(s || '').toUpperCase(); - -const cleanUp = (obj) => Object.fromEntries( - Object.entries(obj).filter(([key, value]) => value !== '') -); - -const getType = (jsonSchema) => { - if (jsonSchema.type === 'struct') { - return 'record'; - } - - return jsonSchema.type; -}; - -const convertItem = ({ name, jsonSchema }) => { - if (!jsonSchema.isActivated) { - return []; - } - const schema = cleanUp({ - name, - type: toUpper(getType(jsonSchema)), - mode: toUpper(jsonSchema.dataTypeMode || 'Nullable'), - description: jsonSchema.refDescription || jsonSchema.description, - }); - - if (jsonSchema.properties) { - schema.fields = Object.keys(jsonSchema.properties) - .flatMap( - (name) => convertItem({ - name, - jsonSchema: jsonSchema.properties[name], - }) - ); - - return [schema]; - } else if (jsonSchema.items) { - const items = Array.isArray(jsonSchema.items) ? jsonSchema.items : [jsonSchema.items]; - - return items.flatMap(schema => { - return convertItem({ - name, - jsonSchema: { ...schema, dataTypeMode: 'Repeated' }, - }); - }); - } - - return [schema]; -}; - -const convertJsonSchemaToBigQuerySchema = (jsonSchema) => { - let result = []; - - result = Object.keys(jsonSchema.properties || {}).flatMap(name => { - return convertItem({ name, jsonSchema: jsonSchema.properties[name] }); - }); - - return result; -}; - -module.exports = { - convertJsonSchemaToBigQuerySchema, -}; diff --git a/forward_engineering/helpers/utils.js b/forward_engineering/helpers/utils.js deleted file mode 100644 index 6e4816f..0000000 --- a/forward_engineering/helpers/utils.js +++ /dev/null @@ -1,361 +0,0 @@ -const escapeQuotes = (str = '') => { - return str.replace(/(")/gi, '\\$1').replace(/\n/gi, '\\n'); -}; - -const wrapByBackticks = (str = '') => { - return `\`${str}\``; -} - -const getPartitioningByIngestionTime = (partitioningType) => { - if (!partitioningType) { - return '_PARTITIONDATE'; - } - - const type = { - 'By day': 'DAY', - 'By hour': 'HOUR', - 'By month': 'MONTH', - 'By year': 'YEAR', - }[partitioningType] || 'DAY'; - - return `TIMESTAMP_TRUNC(_PARTITIONTIME, ${type})`; -}; - -const getPartitioningByIntegerRange = (rangeOptions = {}) => { - const name = rangeOptions.rangePartitionKey?.[0]?.name; - const start = Number(rangeOptions.rangeStart); - const end = Number(rangeOptions.rangeEnd); - const interval = Number(rangeOptions.rangeinterval); - - if (!name) { - return ''; - } - - return `RANGE_BUCKET(${name}, GENERATE_ARRAY(${start}, ${end}${isNaN(interval) ? '' : `, ${interval}`}))`; -}; - -const isActivatedPartition = ({ - partitioning, - timeUnitPartitionKey, - rangeOptions, -}) => { - if (partitioning === 'By time-unit column') { - return timeUnitPartitionKey?.[0]?.isActivated; - } - - if (partitioning === 'By integer-range') { - return rangeOptions?.[0]?.rangePartitionKey?.[0]?.isActivated; - } - - return true; -}; - -const getTablePartitioning = ({ - partitioning, - partitioningType, - timeUnitPartitionKey, - rangeOptions, -}) => { - const partitionTimeColumn = timeUnitPartitionKey?.[0]?.name; - - if (partitioning === 'No partitioning') { - return ''; - } - - if (partitioning === 'By ingestion time') { - return 'PARTITION BY ' + getPartitioningByIngestionTime(partitioningType); - } - - if (partitioning === 'By time-unit column' && partitionTimeColumn) { - return `PARTITION BY DATE(${wrapByBackticks(partitionTimeColumn)})`; - } - - if (partitioning === 'By integer-range') { - const partitionByIntegerRanger = getPartitioningByIntegerRange(rangeOptions?.[0]); - - if (!partitionByIntegerRanger) { - return ''; - } - - return 'PARTITION BY ' + partitionByIntegerRanger; - } - - return ''; -}; - -const getClusteringKey = (clusteringKey, isParentActivated) => { - if (!Array.isArray(clusteringKey) || clusteringKey.length === 0) { - return ''; - } - - const activated = clusteringKey.filter(key => key.isActivated).map(key => wrapByBackticks(key.name)).join(', '); - const deActivated = clusteringKey.filter(key => !key.isActivated).map(key => wrapByBackticks(key.name)).join(', '); - - if (!isParentActivated) { - return '\nCLUSTER BY ' + clusteringKey.map(key => wrapByBackticks(key.name)).join(', '); - } - - if (activated.length === 0) { - return '\n-- CLUSTER BY ' + deActivated; - } - - if (deActivated.length === 0) { - return '\nCLUSTER BY ' + activated; - } - - return '\nCLUSTER BY ' + activated + ' /*' + deActivated + '*/'; -}; - -const getTableOptions = (tab, getLabels) => ({ - expiration, - partitioningFilterRequired, - partitioning, - customerEncryptionKey, - description, - labels, - friendlyName, - externalTableOptions, -}) => { - const options = []; - - if (friendlyName) { - options.push(`friendly_name="${friendlyName}"`); - } - - if (description) { - options.push(`description="${escapeQuotes(description)}"`); - } - - if (expiration) { - options.push(`expiration_timestamp=TIMESTAMP "${getTimestamp(expiration)}"`); - } - - if (partitioning === 'By ingestion time' && partitioningFilterRequired) { - options.push(`require_partition_filter=true`); - } - - if (customerEncryptionKey) { - options.push(`kms_key_name="${customerEncryptionKey}"`); - } - - if (Array.isArray(labels) && labels.length) { - options.push(`labels=[\n${tab(getLabels(labels))}\n]`); - } - - if (externalTableOptions) { - const stringValues = [ - 'format', - 'bigtableUri', - 'quote', - 'null_marker', - 'field_delimiter', - 'encoding', - 'compression', - 'sheet_range', - 'reference_file_schema_uri', - 'hive_partition_uri_prefix', - 'projection_fields', - 'json_extension', - ]; - Object.entries(externalTableOptions).forEach(([ key, value ]) => { - if (stringValues.includes(key)) { - value = `"${escapeQuotes(value)}"`; - } - if (typeof value === 'boolean') { - value = value === true ? 'true' : 'false'; - } - if (Array.isArray(value)) { - value = '[\n' + value.map(v => tab(`"${v}"`)).join(',\n') + '\n]'; - } - options.push(`${key}=${value}`); - }); - } - - if (!options.length) { - return ''; - } - - return `\nOPTIONS (\n${ - tab(options.join(',\n')) - }\n)`; -}; - -const getTimestamp = (unixTs) => { - const fill = (n) => (n + '').padStart(2, '0'); - - const date = new Date(Number(unixTs)); - - const day = fill(date.getUTCDate()); - const month = fill(date.getUTCMonth() + 1); - const year = date.getUTCFullYear(); - const hours = fill(date.getUTCHours()); - const minutes = fill(date.getUTCMinutes()); - const seconds = fill(date.getUTCSeconds()); - - return `${year}-${month}-${day} ${hours}:${minutes}:${seconds} UTC` -}; - -const convertItemsToType = (deps) => (items) => { - if (!Array.isArray(items)) { - items = [items]; - } - - return items.map(item => { - return getColumnSchema(deps)({ - type: item.type, - description: item.description, - dataTypeMode: item.dataTypeMode, - jsonSchema: item, - }, true); - }); -}; - -const convertPropertiesToType = (deps) => (properties) => { - return Object.keys(properties).map(name => { - const item = properties[name]; - - return getColumnSchema(deps)({ - name, - type: item.type, - description: item.description, - dataTypeMode: item.dataTypeMode, - jsonSchema: item, - }); - }); -}; - -const addParameters = (type, jsonSchema) => { - const params = []; - - if (['bignumeric', 'numeric'].includes((type || '').toLowerCase())) { - if (jsonSchema.precision) { - params.push(jsonSchema.precision); - } - - if (jsonSchema.scale) { - params.push(jsonSchema.scale); - } - } - - if (['string', 'bytes'].includes((type || '').toLowerCase())) { - if (jsonSchema.length) { - params.push(jsonSchema.length); - } - } - - if (params.length) { - return `(${params.join(', ')})`; - } - - return ''; -}; - -const getColumnSchema = (deps) => ({ type, description, dataTypeMode, name, jsonSchema }, isArrayItem) => { - const { assignTemplates, tab, templates } = deps; - let dataType = type; - let primaryKey = jsonSchema.primaryKey && !jsonSchema.compositePrimaryKey ? ' PRIMARY KEY NOT ENFORCED' : ''; - let options = ''; - let notNull = ''; - - if (type === 'array') { - dataType = ` ARRAY<\n${ - tab( - convertItemsToType(deps)(jsonSchema.items).join(',\n') - ) - }\n>`; - } else if (dataTypeMode === 'Repeated') { - const {dataTypeMode, ...item} = jsonSchema; - - dataType = getColumnSchema(deps)({ - type: 'array', - description, - jsonSchema: { - items: [item], - }, - }); - } else if (type === 'struct') { - dataType = ` STRUCT<\n${ - tab( - convertPropertiesToType(deps)(jsonSchema.properties || {}).join(',\n'), - ) - }\n>`; - } else { - dataType = (' ' + type).toUpperCase() + addParameters(type, jsonSchema); - } - - if (description) { - options += ` OPTIONS( description="${escapeQuotes(description)}" )`; - } - - if (dataTypeMode === 'Required' && !isArrayItem) { - notNull = ' NOT NULL'; - } - - return assignTemplates(templates.columnDefinition, { - name: name && wrapByBackticks(name), - type: dataType, - primaryKey, - notNull, - options, - }); -}; - -const generateViewSelectStatement = (getFullName, isActivated) => ({ columns, projectId, datasetName }) => { - const keys = columns.reduce((tables, key) => { - let column = wrapByBackticks(key.name); - - if (key.alias) { - column = `${column} as ${key.alias}`; - } - - if (!tables[key.tableName]) { - tables[key.tableName] = { - activated: [], - deactivated: [], - }; - } - - if (isActivated && !key.isActivated) { - tables[key.tableName].deactivated.push(column); - } else { - tables[key.tableName].activated.push(column); - } - - return tables; - }, {}); - - return Object.keys(keys).map(tableName => { - const { deactivated, activated } = keys[tableName]; - const columns = activated.join(', ') + (deactivated.length ? `/*, ${deactivated.join(', ')}*/` : ''); - - return `SELECT ${ - columns || '*' - } FROM ${ - getFullName(projectId, datasetName, tableName) - }`; - }).join('\nUNION ALL\n'); -}; - -const clearEmptyStatements = (statements) => statements.filter(statementComponent => Boolean(statementComponent)) - -const prepareConstraintName = name => { - const VALID_FULL_NAME_REGEX = /[^A-Za-z0-9_]/g; - const VALID_FIRST_NAME_LETTER_REGEX = /^[0-9]/; - return (name || '') - .replace(VALID_FULL_NAME_REGEX, '_') - .replace(VALID_FIRST_NAME_LETTER_REGEX, '_'); -}; - -module.exports = { - isActivatedPartition, - getTablePartitioning, - getClusteringKey, - getTableOptions, - getColumnSchema, - generateViewSelectStatement, - getTimestamp, - escapeQuotes, - clearEmptyStatements, - prepareConstraintName, - wrapByBackticks, -}; diff --git a/forward_engineering/package.json b/forward_engineering/package.json deleted file mode 100644 index 2beb011..0000000 --- a/forward_engineering/package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "Snowflake", - "version": "1.0.0", - "description": "", - "author": "Hackolade", - "installed": true -} diff --git a/forward_engineering/utils/statementJoiner.js b/forward_engineering/utils/statementJoiner.js deleted file mode 100644 index 7dfbad6..0000000 --- a/forward_engineering/utils/statementJoiner.js +++ /dev/null @@ -1,78 +0,0 @@ -/** - * @param index {number} - * @param amountOfStatements {number} - * @param lastIndexOfActivatedStatement {number} - * @param delimiter {string} - * @param delimiterForLastActivatedStatement {string} - * @return {string} - * */ -const getDelimiterForJoiningStatementsBasedOnActivation = ({ - index, - amountOfStatements, - lastIndexOfActivatedStatement, - delimiter, - delimiterForLastActivatedStatement, - }) => { - if (index === amountOfStatements - 1) { - return ''; - } - if (lastIndexOfActivatedStatement === -1) { - return delimiter; - } - if (index === lastIndexOfActivatedStatement) { - return delimiterForLastActivatedStatement; - } - return delimiter; -} - -/** - * @param statementDtos {Array<{ - * statement: string, - * isActivated: boolean, - * }>} - * @return {number} - */ -const getLastIndexOfActivatedStatement = ({statementDtos}) => { - for (let i = statementDtos.length - 1; i >= 0; i--) { - const statementDto = statementDtos[i] || {}; - if (statementDto.isActivated) { - return i; - } - } - return -1; -} - - -/** - * @param statementDtos {Array<{ - * statement: string, - * isActivated: boolean, - * }>} - * @param delimiter {string | undefined} - * @param delimiterForLastActivatedStatement {string | undefined} - * @return {string} - * */ -const joinActivatedAndDeactivatedStatements = ({ - statementDtos, - delimiter = ',\n', - delimiterForLastActivatedStatement = '\n', - }) => { - const lastIndexOfActivatedStatement = getLastIndexOfActivatedStatement({statementDtos}); - - return statementDtos - .map((statementDto, i) => { - const {statement} = statementDto; - const currentDelimiter = getDelimiterForJoiningStatementsBasedOnActivation({ - index: i, - amountOfStatements: statementDtos.length, - lastIndexOfActivatedStatement, - delimiter, - delimiterForLastActivatedStatement, - }); - return statement + currentDelimiter; - }).join(''); -} - -module.exports = { - joinActivatedAndDeactivatedStatements, -} diff --git a/jsonSchemaProperties.json b/jsonSchemaProperties.json index 32a8e13..560355b 100644 --- a/jsonSchemaProperties.json +++ b/jsonSchemaProperties.json @@ -1,4 +1,15 @@ { - "unneededFieldProps": ["collectionName", "name", "users", "indexes", "collectionUsers", "additionalPropertieserties", "compositeClusteringKey", "compositePartitionKey", "SecIDxs", "compositeKey"], + "unneededFieldProps": [ + "collectionName", + "name", + "users", + "indexes", + "collectionUsers", + "additionalPropertieserties", + "compositeClusteringKey", + "compositePartitionKey", + "SecIDxs", + "compositeKey" + ], "removeIfPropsNegative": ["partitionKey", "sortKey"] -} \ No newline at end of file +} diff --git a/localization/en.json b/localization/en.json index 538f818..8b7caed 100644 --- a/localization/en.json +++ b/localization/en.json @@ -155,4 +155,4 @@ "MAIN_MENU___FORWARD_DB_BUCKETS": "BigQuery DDL...", "MODAL_WINDOW___FE_SCRIPT_OPTION_CREATE": "Create", "MODAL_WINDOW___FE_SCRIPT_OPTION_UPDATE": "Alter" -} \ No newline at end of file +} diff --git a/package.json b/package.json index b410a34..82bc545 100644 --- a/package.json +++ b/package.json @@ -1,36 +1,35 @@ { - "name": "BigQuery", - "version": "0.1.25", - "versionDate": "2024-04-12", - "author": "hackolade", - "engines": { - "hackolade": "6.8.4", - "hackoladePlugin": "1.2.0" - }, - "contributes": { - "target": { - "applicationTarget": "BigQuery", - "title": "BigQuery Standard SQL", - "versions": [ - "Standard SQL" - ] - }, - "features": { - "views": { - "enabled": true, - "viewLevel": "model", - "disablePipelines": true - }, - "nestedCollections": false, - "disablePatternField": true, - "enableForwardEngineering": true, - "enableReverseEngineering": true, - "disableChoices": true, - "enableJsonType": true, - "useJsonTypesWithComplexTypes": true, - "reverseSchemaIntoOneColumn": true, - "disableDenormalization": false, - "relationships": { + "name": "BigQuery", + "version": "0.2.1", + "author": "hackolade", + "engines": { + "hackolade": "6.8.4", + "hackoladePlugin": "1.2.0" + }, + "contributes": { + "target": { + "applicationTarget": "BigQuery", + "title": "BigQuery Standard SQL", + "versions": [ + "Standard SQL" + ] + }, + "features": { + "views": { + "enabled": true, + "viewLevel": "model", + "disablePipelines": true + }, + "nestedCollections": false, + "disablePatternField": true, + "enableForwardEngineering": true, + "enableReverseEngineering": true, + "disableChoices": true, + "enableJsonType": true, + "useJsonTypesWithComplexTypes": true, + "reverseSchemaIntoOneColumn": true, + "disableDenormalization": false, + "relationships": { "compositeRelationships": { "allowRelationshipsByProperties": [ "primaryKey", @@ -38,12 +37,45 @@ ] } }, - "FEScriptCommentsSupported": true, - "discoverRelationships": true, - "disableJsonDataMaxLength": true, - "disableMultipleTypes": true - } - }, - "description": "Hackolade plugin for Google BigQuery Standard SQL", - "disabled": false -} + "FEScriptCommentsSupported": true, + "discoverRelationships": true, + "disableJsonDataMaxLength": true, + "disableMultipleTypes": true + } + }, + "description": "Hackolade plugin for Google BigQuery Standard SQL", + "disabled": false, + "dependencies": { + "@google-cloud/bigquery": "5.7.1", + "@hackolade/sql-select-statement-parser": "0.0.20", + "lodash": "4.17.21" + }, + "lint-staged": { + "*.{js,json}": "prettier --write" + }, + "simple-git-hooks": { + "pre-commit": "npx lint-staged", + "pre-push": "npx eslint ." + }, + "scripts": { + "lint": "eslint . --max-warnings=0", + "package": "node esbuild.package.js" + }, + "devDependencies": { + "@hackolade/hck-esbuild-plugins-pack": "0.0.1", + "@typescript-eslint/eslint-plugin": "7.11.0", + "@typescript-eslint/parser": "7.11.0", + "esbuild": "0.20.2", + "esbuild-plugin-clean": "1.0.1", + "eslint": "8.57.0", + "eslint-config-prettier": "9.1.0", + "eslint-formatter-teamcity": "^1.0.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-prettier": "5.1.3", + "eslint-plugin-unused-imports": "3.2.0", + "lint-staged": "14.0.1", + "prettier": "3.2.5", + "simple-git-hooks": "2.11.1" + }, + "release": true +} \ No newline at end of file diff --git a/polyglot/adapter.json b/polyglot/adapter.json index 11f9d68..7fa2ae0 100644 --- a/polyglot/adapter.json +++ b/polyglot/adapter.json @@ -1,72 +1,72 @@ -/** - * Copyright © 2016-2022 by IntegrIT S.A. dba Hackolade. All rights reserved. - * - * The copyright to the computer software herein is the property of IntegrIT S.A. - * The software may be used and/or copied only with the written permission of - * IntegrIT S.A. or in accordance with the terms and conditions stipulated in - * the agreement/contract under which the software has been supplied. - * - * { - * "add": { - * "entity": [], - * "container": [], - * "model": [], - * "view": [], - * "field": { - * "": [] - * } - * }, - * "delete": { - * "entity": [], - * "container": [], - * "model": [], - * "view": [], - * "field": { - * "": [] - * } - * }, - * "modify": { - * "entity": [ - * { - * "from": { }, - * "to": { } - * } - * ], - * "container": [], - * "model": [], - * "view": [], - * "field": [] - * }, - * } - */ - { - "modify": { - "field": [ - { - "from": { - "type": "integer" - }, - "to": { - "type": "integer", - "mode": "int64" - } - }, - { - "from": { - "required": true - }, - "to": { - "dataTypeMode": "Required" - } - }, - { - "from": { - "required": false - }, - "to": { - "dataTypeMode": "Nullable" - } - } - ] - } -} +/** + * Copyright © 2016-2022 by IntegrIT S.A. dba Hackolade. All rights reserved. + * + * The copyright to the computer software herein is the property of IntegrIT S.A. + * The software may be used and/or copied only with the written permission of + * IntegrIT S.A. or in accordance with the terms and conditions stipulated in + * the agreement/contract under which the software has been supplied. + * + * { + * "add": { + * "entity": [], + * "container": [], + * "model": [], + * "view": [], + * "field": { + * "": [] + * } + * }, + * "delete": { + * "entity": [], + * "container": [], + * "model": [], + * "view": [], + * "field": { + * "": [] + * } + * }, + * "modify": { + * "entity": [ + * { + * "from": { }, + * "to": { } + * } + * ], + * "container": [], + * "model": [], + * "view": [], + * "field": [] + * }, + * } + */ +{ + "modify": { + "field": [ + { + "from": { + "type": "integer" + }, + "to": { + "type": "integer", + "mode": "int64" + } + }, + { + "from": { + "required": true + }, + "to": { + "dataTypeMode": "Required" + } + }, + { + "from": { + "required": false + }, + "to": { + "dataTypeMode": "Nullable" + } + } + ] + } +} diff --git a/polyglot/convertAdapter.json b/polyglot/convertAdapter.json index ddb3cb3..f94bc22 100644 --- a/polyglot/convertAdapter.json +++ b/polyglot/convertAdapter.json @@ -2,10 +2,10 @@ * Copyright © 2016-2023 by IntegrIT S.A. dba Hackolade. All rights reserved. * * The copyright to the computer software herein is the property of IntegrIT S.A. - * The software may be used and/or copied only with the written permission of - * IntegrIT S.A. or in accordance with the terms and conditions stipulated in - * the agreement/contract under which the software has been supplied. - * + * The software may be used and/or copied only with the written permission of + * IntegrIT S.A. or in accordance with the terms and conditions stipulated in + * the agreement/contract under which the software has been supplied. + * * { * "add": { * "entity": [], @@ -39,10 +39,10 @@ * }, * } */ - { - "modify": { - "field": [ - { +{ + "modify": { + "field": [ + { "from": { "dataTypeMode": "Required" }, @@ -58,6 +58,6 @@ "required": false } } - ] - } -} \ No newline at end of file + ] + } +} diff --git a/properties_pane/container_level/containerLevelConfig.json b/properties_pane/container_level/containerLevelConfig.json index 7a40714..451a7d3 100644 --- a/properties_pane/container_level/containerLevelConfig.json +++ b/properties_pane/container_level/containerLevelConfig.json @@ -156,32 +156,32 @@ making sure that you maintain a proper JSON format. "options": [ { "name": "Default", "value": "default" }, { "name": "United States (us)", "value": "us" }, - { "name": "European Union (eu)", "value": "eu"}, - { "name": "South Carolina (us-east1)", "value": "us-east1"}, - { "name": "Northern Virginia (us-east4)", "value": "us-east4"}, - { "name": "Iowa (us-central1)", "value": "us-central1"}, - { "name": "Oregon (us-west1)", "value": "us-west1"}, - { "name": "Los Angeles (us-west2)", "value": "us-west2"}, - { "name": "Salt Lake City (us-west3)", "value": "us-west3"}, - { "name": "Las Vegas (us-west4)", "value": "us-west4"}, - { "name": "Taiwan (asia-east1)", "value": "asia-east1"}, - { "name": "Tokyo (asia-northeast1)", "value": "asia-northeast1"}, - { "name": "Singapore (asia-southeast1)", "value": "asia-southeast1"}, - { "name": "Mumbai (asia-south1)", "value": "asia-south1"}, - { "name": "Hong Kong (asia-east2)", "value": "asia-east2"}, - { "name": "Osaka (asia-northeast2)", "value": "asia-northeast2"}, - { "name": "Seoul (asia-northeast3)", "value": "asia-northeast3"}, - { "name": "Jakarta (asia-southeast2)", "value": "asia-southeast2"}, - { "name": "Delhi (asia-south2)", "value": "asia-south2"}, - { "name": "Finland (europe-north1)", "value": "europe-north1"}, - { "name": "Belgium (europe-west1)", "value": "europe-west1"}, - { "name": "London (europe-west2)", "value": "europe-west2"}, - { "name": "Frankfurt (europe-west3)", "value": "europe-west3"}, - { "name": "Netherlands (europe-west4)", "value": "europe-west4"}, - { "name": "Zurich (europe-west6)", "value": "europe-west6"}, - { "name": "Warsaw (europe-central2)", "value": "europe-central2"}, - { "name": "Montréal (northamerica-northeast1)", "value": "northamerica-northeast1"}, - { "name": "São Paulo (southamerica-east1)", "value": "southamerica-east1"}, + { "name": "European Union (eu)", "value": "eu" }, + { "name": "South Carolina (us-east1)", "value": "us-east1" }, + { "name": "Northern Virginia (us-east4)", "value": "us-east4" }, + { "name": "Iowa (us-central1)", "value": "us-central1" }, + { "name": "Oregon (us-west1)", "value": "us-west1" }, + { "name": "Los Angeles (us-west2)", "value": "us-west2" }, + { "name": "Salt Lake City (us-west3)", "value": "us-west3" }, + { "name": "Las Vegas (us-west4)", "value": "us-west4" }, + { "name": "Taiwan (asia-east1)", "value": "asia-east1" }, + { "name": "Tokyo (asia-northeast1)", "value": "asia-northeast1" }, + { "name": "Singapore (asia-southeast1)", "value": "asia-southeast1" }, + { "name": "Mumbai (asia-south1)", "value": "asia-south1" }, + { "name": "Hong Kong (asia-east2)", "value": "asia-east2" }, + { "name": "Osaka (asia-northeast2)", "value": "asia-northeast2" }, + { "name": "Seoul (asia-northeast3)", "value": "asia-northeast3" }, + { "name": "Jakarta (asia-southeast2)", "value": "asia-southeast2" }, + { "name": "Delhi (asia-south2)", "value": "asia-south2" }, + { "name": "Finland (europe-north1)", "value": "europe-north1" }, + { "name": "Belgium (europe-west1)", "value": "europe-west1" }, + { "name": "London (europe-west2)", "value": "europe-west2" }, + { "name": "Frankfurt (europe-west3)", "value": "europe-west3" }, + { "name": "Netherlands (europe-west4)", "value": "europe-west4" }, + { "name": "Zurich (europe-west6)", "value": "europe-west6" }, + { "name": "Warsaw (europe-central2)", "value": "europe-central2" }, + { "name": "Montréal (northamerica-northeast1)", "value": "northamerica-northeast1" }, + { "name": "São Paulo (southamerica-east1)", "value": "southamerica-east1" }, { "name": "Sydney (australia-southeast1)", "value": "australia-southeast1" }, { "name": "Melbourne (australia-southeast2)", "value": "australia-southeast2" } ] @@ -211,10 +211,7 @@ making sure that you maintain a proper JSON format. "propertyTooltip": "Data is encrypted automatically. Select an encryption key management solution.", "defaultValue": "Google-managed", "propertyType": "select", - "options": [ - "Google-managed", - "Customer-managed" - ] + "options": ["Google-managed", "Customer-managed"] }, { "propertyName": "Encryption key", @@ -255,4 +252,3 @@ making sure that you maintain a proper JSON format. "containerLevelKeys": [] } ] - diff --git a/properties_pane/defaultData.json b/properties_pane/defaultData.json index 275a8dd..3bf27e6 100644 --- a/properties_pane/defaultData.json +++ b/properties_pane/defaultData.json @@ -21,8 +21,7 @@ "name": "^[a-zA-Z0-9_.-]+$", "dataTypeMode": "Nullable" }, - "multipleField": { - }, + "multipleField": {}, "subschema": {}, "arrayItem": {}, "choice": {}, @@ -34,4 +33,4 @@ "pipeline": "", "autoSortKey": false } -} \ No newline at end of file +} diff --git a/properties_pane/entity_level/entityLevelConfig.json b/properties_pane/entity_level/entityLevelConfig.json index bc8720b..57f9a08 100644 --- a/properties_pane/entity_level/entityLevelConfig.json +++ b/properties_pane/entity_level/entityLevelConfig.json @@ -131,22 +131,14 @@ making sure that you maintain a proper JSON format. "propertyTooltip": "Select from list of options", "defaultValue": "Native", "propertyType": "select", - "options": [ - "Native", - "External" - ] + "options": ["Native", "External"] }, { "propertyName": "Table role", "propertyKeyword": "tableRole", "propertyTooltip": "Select from list of options", "propertyType": "select", - "options": [ - "Dimension", - "Fact", - "Outrigger", - "Staging" - ], + "options": ["Dimension", "Fact", "Outrigger", "Staging"], "dependency": { "level": "model", "key": "modelingMethodology", @@ -158,14 +150,7 @@ making sure that you maintain a proper JSON format. "propertyKeyword": "vaultComponent", "propertyTooltip": "Select from list of options", "propertyType": "select", - "options": [ - "Hub", - "Link", - "Satellite", - "Bridge", - "Point in Time", - "Reference" - ], + "options": ["Hub", "Link", "Satellite", "Bridge", "Point in Time", "Reference"], "dependency": { "level": "model", "key": "modelingMethodology", @@ -179,13 +164,16 @@ making sure that you maintain a proper JSON format. "propertyType": "checkbox", "dependency": { "type": "or", - "values": [{ - "key": "ifNotExist", - "value": false - }, { - "key": "ifNotExist", - "exists": false - }] + "values": [ + { + "key": "ifNotExist", + "value": false + }, + { + "key": "ifNotExist", + "exists": false + } + ] } }, { @@ -195,13 +183,16 @@ making sure that you maintain a proper JSON format. "propertyType": "checkbox", "dependency": { "type": "or", - "values": [{ - "key": "orReplace", - "value": false - }, { - "key": "orReplace", - "exists": false - }] + "values": [ + { + "key": "orReplace", + "value": false + }, + { + "key": "orReplace", + "exists": false + } + ] } }, { @@ -224,12 +215,7 @@ making sure that you maintain a proper JSON format. "propertyTooltip": "Select from list of options", "defaultValue": "No partitioning", "propertyType": "select", - "options": [ - "No partitioning", - "By ingestion time", - "By time-unit column", - "By integer-range" - ], + "options": ["No partitioning", "By ingestion time", "By time-unit column", "By integer-range"], "dependency": { "type": "not", "values": { @@ -264,13 +250,7 @@ making sure that you maintain a proper JSON format. "propertyKeyword": "partitioningType", "defaultValue": "", "propertyType": "select", - "options": [ - "", - "By day", - "By hour", - "By month", - "By year" - ], + "options": ["", "By day", "By hour", "By month", "By year"], "dependency": { "type": "and", "values": [ @@ -397,10 +377,7 @@ making sure that you maintain a proper JSON format. "propertyTooltip": "Data is encrypted automatically. Select an encryption key management solution.", "defaultValue": "Google-managed", "propertyType": "select", - "options": [ - "Google-managed", - "Customer-managed" - ] + "options": ["Google-managed", "Customer-managed"] }, { "propertyName": "Encryption key", @@ -633,13 +610,7 @@ making sure that you maintain a proper JSON format. "propertyType": "checkbox", "dependency": { "key": "format", - "value": [ - "AVRO", - "CSV", - "JSON", - "ORC", - "PARQUET" - ] + "value": ["AVRO", "CSV", "JSON", "ORC", "PARQUET"] } }, { @@ -669,11 +640,7 @@ making sure that you maintain a proper JSON format. "propertyType": "text", "dependency": { "key": "format", - "value": [ - "AVRO", - "ORC", - "PARQUET" - ] + "value": ["AVRO", "ORC", "PARQUET"] } }, { @@ -782,7 +749,7 @@ making sure that you maintain a proper JSON format. } ] } - }, + }, { "tooltip": "Remove or update the existing composite primary key definition prior to unlock the possibility to create a new composite primary key definition for this table", "dependency": { diff --git a/properties_pane/field_level/fieldLevelConfig.json b/properties_pane/field_level/fieldLevelConfig.json index 8d83fdf..3533a1e 100644 --- a/properties_pane/field_level/fieldLevelConfig.json +++ b/properties_pane/field_level/fieldLevelConfig.json @@ -126,16 +126,20 @@ making sure that you maintain a proper JSON format. }, { "type": "and", - "values": [{ - "level": "siblings", - "value": { - "type": "and", - "values": [{ - "key": "primaryKey", - "value": true - }] + "values": [ + { + "level": "siblings", + "value": { + "type": "and", + "values": [ + { + "key": "primaryKey", + "value": true + } + ] + } } - }] + ] }, { "type": "not", @@ -163,7 +167,7 @@ making sure that you maintain a proper JSON format. "tooltip": "This column is part of the table composite primary key definition. Please refer to this definition if you want more information or to update the Primary Key definition", "dependency": { "key": "compositePrimaryKey", - "value": true + "value": true } } ] @@ -246,16 +250,20 @@ making sure that you maintain a proper JSON format. }, { "type": "and", - "values": [{ - "level": "siblings", - "value": { - "type": "and", - "values": [{ - "key": "primaryKey", - "value": true - }] + "values": [ + { + "level": "siblings", + "value": { + "type": "and", + "values": [ + { + "key": "primaryKey", + "value": true + } + ] + } } - }] + ] }, { "type": "not", @@ -283,7 +291,7 @@ making sure that you maintain a proper JSON format. "tooltip": "This column is part of the table composite primary key definition. Please refer to this definition if you want more information or to update the Primary Key definition", "dependency": { "key": "compositePrimaryKey", - "value": true + "value": true } } ] @@ -358,16 +366,20 @@ making sure that you maintain a proper JSON format. }, { "type": "and", - "values": [{ - "level": "siblings", - "value": { - "type": "and", - "values": [{ - "key": "primaryKey", - "value": true - }] + "values": [ + { + "level": "siblings", + "value": { + "type": "and", + "values": [ + { + "key": "primaryKey", + "value": true + } + ] + } } - }] + ] }, { "type": "not", @@ -395,7 +407,7 @@ making sure that you maintain a proper JSON format. "tooltip": "This column is part of the table composite primary key definition. Please refer to this definition if you want more information or to update the Primary Key definition", "dependency": { "key": "compositePrimaryKey", - "value": true + "value": true } } ] @@ -470,16 +482,20 @@ making sure that you maintain a proper JSON format. }, { "type": "and", - "values": [{ - "level": "siblings", - "value": { - "type": "and", - "values": [{ - "key": "primaryKey", - "value": true - }] + "values": [ + { + "level": "siblings", + "value": { + "type": "and", + "values": [ + { + "key": "primaryKey", + "value": true + } + ] + } } - }] + ] }, { "type": "not", @@ -507,7 +523,7 @@ making sure that you maintain a proper JSON format. "tooltip": "This column is part of the table composite primary key definition. Please refer to this definition if you want more information or to update the Primary Key definition", "dependency": { "key": "compositePrimaryKey", - "value": true + "value": true } } ] @@ -597,16 +613,20 @@ making sure that you maintain a proper JSON format. }, { "type": "and", - "values": [{ - "level": "siblings", - "value": { - "type": "and", - "values": [{ - "key": "primaryKey", - "value": true - }] + "values": [ + { + "level": "siblings", + "value": { + "type": "and", + "values": [ + { + "key": "primaryKey", + "value": true + } + ] + } } - }] + ] }, { "type": "not", @@ -634,7 +654,7 @@ making sure that you maintain a proper JSON format. "tooltip": "This column is part of the table composite primary key definition. Please refer to this definition if you want more information or to update the Primary Key definition", "dependency": { "key": "compositePrimaryKey", - "value": true + "value": true } } ] @@ -682,16 +702,20 @@ making sure that you maintain a proper JSON format. }, { "type": "and", - "values": [{ - "level": "siblings", - "value": { - "type": "and", - "values": [{ - "key": "primaryKey", - "value": true - }] + "values": [ + { + "level": "siblings", + "value": { + "type": "and", + "values": [ + { + "key": "primaryKey", + "value": true + } + ] + } } - }] + ] }, { "type": "not", @@ -719,7 +743,7 @@ making sure that you maintain a proper JSON format. "tooltip": "This column is part of the table composite primary key definition. Please refer to this definition if you want more information or to update the Primary Key definition", "dependency": { "key": "compositePrimaryKey", - "value": true + "value": true } } ] @@ -792,16 +816,20 @@ making sure that you maintain a proper JSON format. }, { "type": "and", - "values": [{ - "level": "siblings", - "value": { - "type": "and", - "values": [{ - "key": "primaryKey", - "value": true - }] + "values": [ + { + "level": "siblings", + "value": { + "type": "and", + "values": [ + { + "key": "primaryKey", + "value": true + } + ] + } } - }] + ] }, { "type": "not", @@ -829,7 +857,7 @@ making sure that you maintain a proper JSON format. "tooltip": "This column is part of the table composite primary key definition. Please refer to this definition if you want more information or to update the Primary Key definition", "dependency": { "key": "compositePrimaryKey", - "value": true + "value": true } } ] @@ -880,16 +908,20 @@ making sure that you maintain a proper JSON format. }, { "type": "and", - "values": [{ - "level": "siblings", - "value": { - "type": "and", - "values": [{ - "key": "primaryKey", - "value": true - }] + "values": [ + { + "level": "siblings", + "value": { + "type": "and", + "values": [ + { + "key": "primaryKey", + "value": true + } + ] + } } - }] + ] }, { "type": "not", @@ -917,7 +949,7 @@ making sure that you maintain a proper JSON format. "tooltip": "This column is part of the table composite primary key definition. Please refer to this definition if you want more information or to update the Primary Key definition", "dependency": { "key": "compositePrimaryKey", - "value": true + "value": true } } ] diff --git a/properties_pane/model_level/modelLevelConfig.json b/properties_pane/model_level/modelLevelConfig.json index 2ec5eee..c49b815 100644 --- a/properties_pane/model_level/modelLevelConfig.json +++ b/properties_pane/model_level/modelLevelConfig.json @@ -123,9 +123,7 @@ making sure that you maintain a proper JSON format. "shouldValidate": false, "propertyTooltip": "DB vendor", "propertyType": "select", - "options": [ - "BigQuery" - ], + "options": ["BigQuery"], "disabledOption": true }, { @@ -134,9 +132,7 @@ making sure that you maintain a proper JSON format. "propertyTooltip": "DB version", "defaultValue": "v2", "propertyType": "select", - "options": [ - "v2" - ], + "options": ["v2"], "disabledOption": true }, { @@ -144,11 +140,7 @@ making sure that you maintain a proper JSON format. "propertyKeyword": "modelingMethodology", "propertyTooltip": "Select from list of options", "propertyType": "select", - "options": [ - "Relational", - "Dimensional", - "Vault" - ] + "options": ["Relational", "Dimensional", "Vault"] }, { "propertyName": "Project Name", diff --git a/properties_pane/samples.json b/properties_pane/samples.json index 36b057a..923d91d 100644 --- a/properties_pane/samples.json +++ b/properties_pane/samples.json @@ -10,4 +10,4 @@ "value": "number" } } -] \ No newline at end of file +] diff --git a/properties_pane/view_level/viewLevelConfig.json b/properties_pane/view_level/viewLevelConfig.json index 48dd26c..b90c88d 100644 --- a/properties_pane/view_level/viewLevelConfig.json +++ b/properties_pane/view_level/viewLevelConfig.json @@ -1,11 +1,11 @@ /* -* Copyright © 2016-2017 by IntegrIT S.A. dba Hackolade. All rights reserved. -* -* The copyright to the computer software herein is the property of IntegrIT S.A. -* The software may be used and/or copied only with the written permission of -* IntegrIT S.A. or in accordance with the terms and conditions stipulated in -* the agreement/contract under which the software has been supplied. -*/ + * Copyright © 2016-2017 by IntegrIT S.A. dba Hackolade. All rights reserved. + * + * The copyright to the computer software herein is the property of IntegrIT S.A. + * The software may be used and/or copied only with the written permission of + * IntegrIT S.A. or in accordance with the terms and conditions stipulated in + * the agreement/contract under which the software has been supplied. + */ [ { @@ -32,13 +32,16 @@ "propertyTooltip": "remarks", "dependency": { "type": "or", - "values": [{ - "key": "ifNotExist", - "value": false - }, { - "key": "ifNotExist", - "exists": false - }] + "values": [ + { + "key": "ifNotExist", + "value": false + }, + { + "key": "ifNotExist", + "exists": false + } + ] } }, { @@ -48,13 +51,16 @@ "propertyType": "checkbox", "dependency": { "type": "or", - "values": [{ - "key": "orReplace", - "value": false - }, { - "key": "orReplace", - "exists": false - }] + "values": [ + { + "key": "orReplace", + "value": false + }, + { + "key": "orReplace", + "exists": false + } + ] } }, { @@ -83,11 +89,7 @@ "propertyKeyword": "partitioning", "propertyTooltip": "Select from list of options", "propertyType": "select", - "options": [ - "No partitioning", - "By time-unit column", - "By integer-range" - ], + "options": ["No partitioning", "By time-unit column", "By integer-range"], "dependency": { "key": "materialized", "value": true @@ -103,13 +105,16 @@ }, "dependency": { "type": "and", - "values": [{ - "key": "materialized", - "value": true - }, { - "key": "partitioning", - "value": "By time-unit column" - }] + "values": [ + { + "key": "materialized", + "value": true + }, + { + "key": "partitioning", + "value": "By time-unit column" + } + ] } }, { @@ -156,13 +161,16 @@ ], "dependency": { "type": "and", - "values": [{ - "key": "materialized", - "value": true - }, { - "key": "partitioning", - "value": "By integer-range" - }] + "values": [ + { + "key": "materialized", + "value": true + }, + { + "key": "partitioning", + "value": "By integer-range" + } + ] } }, { @@ -200,13 +208,16 @@ "allowNegative": false, "dependency": { "type": "and", - "values": [{ - "key": "materialized", - "value": true - }, { - "key": "enableRefresh", - "value": true - }] + "values": [ + { + "key": "materialized", + "value": true + }, + { + "key": "enableRefresh", + "value": true + } + ] } }, { @@ -255,4 +266,4 @@ } ] } -] \ No newline at end of file +] diff --git a/reverse_engineering/api.js b/reverse_engineering/api.js index 94efe36..f90b60a 100644 --- a/reverse_engineering/api.js +++ b/reverse_engineering/api.js @@ -1,619 +1,848 @@ -'use strict'; - -const connectionHelper = require('./helpers/connectionHelper'); -const createBigQueryHelper = require('./helpers/bigQueryHelper'); -const { createJsonSchema } = require('./helpers/jsonSchemaHelper'); -const { injectPrimaryKeyConstraintsIntoTable, reverseForeignKeys } = require('./helpers/constraintsHelper') -const { - BigQueryDate, - BigQueryDatetime, - BigQueryTime, - BigQueryTimestamp, - Geography, -} = require('@google-cloud/bigquery'); -const { Big } = require('big.js'); -const parseSelectStatement = require('@hackolade/sql-select-statement-parser'); - -const getDatabases = async (connectionInfo, logger, callback, app) => { - try { - const log = createLogger({ - title: 'Reverse-engineering process', - hiddenKeys: connectionInfo.hiddenKeys, - logger, - }); - const client = connect(connectionInfo, logger); - const bigQueryHelper = createBigQueryHelper(client, log); - const rawDatasets = connectionInfo.datasetId ? [{id: connectionInfo.datasetId}] : await bigQueryHelper.getDatasets() - const datasets = rawDatasets.map((dataset) => dataset.id) - callback(null, datasets); - } catch (err) { - callback(prepareError(logger, err)); - } -}; - -const connect = (connectionInfo, logger) => { - logger.clear(); - logger.log('info', connectionInfo, 'connectionInfo', connectionInfo.hiddenKeys); - - return connectionHelper.connect(connectionInfo); -}; - -const testConnection = async (connectionInfo, logger, cb) => { - try { - const log = createLogger({ - title: 'Reverse-engineering process', - hiddenKeys: connectionInfo.hiddenKeys, - logger, - }); - const client = connect(connectionInfo, logger); - const bigQueryHelper = createBigQueryHelper(client, log); - await bigQueryHelper.getDatasets(); - - cb(); - } catch (err) { - cb(prepareError(logger, err)); - } -}; - -const disconnect = async (connectionInfo, logger, cb) => { - connectionHelper.disconnect(); - cb(); -}; - -const getDbCollectionsNames = async (connectionInfo, logger, cb, app) => { - try { - const async = app.require('async'); - const log = createLogger({ - title: 'Reverse-engineering process', - hiddenKeys: connectionInfo.hiddenKeys, - logger, - }); - const client = connect(connectionInfo, logger); - const bigQueryHelper = createBigQueryHelper(client, log); - const datasetName = connectionInfo.datasetId || connectionInfo.data?.databaseName - const datasets = datasetName ? [{id: datasetName}] : await bigQueryHelper.getDatasets() - const tablesByDataset = await async.mapSeries(datasets, async dataset => { - const tables = await bigQueryHelper.getTables(dataset.id); - const viewTypes = ['MATERIALIZED_VIEW', 'VIEW']; - const dbCollections = tables.filter(t => !viewTypes.includes(t.metadata.type)).map(table => table.id); - const views = tables.filter(t => viewTypes.includes(t.metadata.type)).map(table => bigQueryHelper.getViewName(table.id)); - - return { - isEmpty: tables.length === 0, - dbName: dataset.id, - dbCollections, - views, - }; - }); - - cb(null, tablesByDataset); - } catch (err) { - cb(prepareError(logger, err)); - } -}; - -const getDbCollectionsData = async (data, logger, cb, app) => { - try { - const _ = app.require('lodash'); - const async = app.require('async'); - const client = connect(data, logger); - const log = createLogger({ - title: 'Reverse-engineering process', - hiddenKeys: data.hiddenKeys, - logger, - }); - const bigQueryHelper = createBigQueryHelper(client, log); - const project = await bigQueryHelper.getProjectInfo(); - const recordSamplingSettings = data.recordSamplingSettings; - - const modelInfo = { - projectID: project.id, - projectName: project.friendlyName, - }; - let relationships = [] - const packages = await async.reduce(data.collectionData.dataBaseNames, [], async (result, datasetName) => { - log.info(`Process dataset "${datasetName}"`); - log.progress(`Process dataset "${datasetName}"`, datasetName); - - const dataset = await bigQueryHelper.getDataset(datasetName); - const bucketInfo = getBucketInfo({ - metadata: dataset.metadata, - datasetName, - _, - }); - const { tables, views } = data.collectionData.collections[datasetName]?.length ? getSpecificTablesAndViews(data, datasetName) : await getTablesAndViews(dataset) - - const { - primaryKeyConstraintsData, foreignKeyConstraintsData - } = await bigQueryHelper.getConstraintsData(project.id, datasetName) - const newRelationships = foreignKeyConstraintsData ? reverseForeignKeys(foreignKeyConstraintsData) : [] - relationships = [...relationships, ...newRelationships] - - log.info(`Getting dataset constraints "${datasetName}"`); - log.progress(`Getting dataset constraints "${datasetName}"`, datasetName); - - const collectionPackages = await async.mapSeries(tables, async tableName => { - log.info(`Get table metadata: "${tableName}"`); - log.progress(`Get table metadata`, datasetName, tableName); - - const [table] = await dataset.table(tableName).get(); - const friendlyName = table.metadata.friendlyName; - - log.info(`Get table rows: "${tableName}"`); - log.progress(`Get table rows`, datasetName, tableName); - - const [rows] = await bigQueryHelper.getRows(tableName, table, recordSamplingSettings); - log.info(`Convert rows: "${tableName}"`); - log.progress(`Convert rows`, datasetName, tableName); - const rawJsonSchema = createJsonSchema(table.metadata.schema ?? {}, rows); - const { propertiesWithInjectedConstraints, primaryKey } = - injectPrimaryKeyConstraintsIntoTable( - { - datasetId: dataset.id, - properties: rawJsonSchema.properties, - tableName, - constraintsData: primaryKeyConstraintsData - } - ) - const jsonSchema = { - ...rawJsonSchema, - properties: propertiesWithInjectedConstraints, - } - const documents = convertValue(rows); - - return { - dbName: bucketInfo.name, - collectionName: friendlyName || tableName, - entityLevel: {...getTableInfo({ _, table, tableName }), primaryKey}, - documents: documents, - standardDoc: documents[0], - views: [], - emptyBucket: false, - validation: { - jsonSchema, - }, - bucketInfo, - }; - }); - const viewsPackages = await async.mapSeries(views, async viewName => { - log.info(`Get view metadata: "${viewName}"`); - log.progress(`Get view metadata`, datasetName, viewName); - - const [view] = await dataset.table(viewName).get(); - const viewData = view.metadata.materializedView || view.metadata.view; - - log.info(`Process view: "${viewName}"`); - log.progress(`Process view`, datasetName, viewName); - - const friendlyName = view.metadata.friendlyName; - - const viewJsonSchema = createJsonSchema(view.metadata.schema ?? {}); - - return { - dbName: bucketInfo.name, - name: friendlyName || viewName, - jsonSchema: createViewSchema({ - viewQuery: viewData.query, - tablePackages: collectionPackages, - viewJsonSchema, - log, - }), - data: { - name: friendlyName || viewName, - code: friendlyName ? viewName : '', - materialized: view.metadata.type === 'MATERIALIZED_VIEW', - description: view.metadata.description, - selectStatement: viewData.query, - labels: getLabels(_, view.metadata.labels), - expiration: view.metadata.expirationTime ? Number(view.metadata.expirationTime) : undefined, - clusteringKey: view.metadata.clustering?.fields || [], - ...getPartitioning(view.metadata), - enableRefresh: Boolean(viewData?.enableRefresh), - refreshInterval: isNaN(viewData?.refreshIntervalMs) - ? '' - : Number(viewData?.refreshIntervalMs) / (60 * 1000), - maxStaleness: view.metadata.maxStaleness, - allowNonIncrementalDefinition: view.metadata?.materializedView?.allowNonIncrementalDefinition, - }, - }; - }); - - result = result.concat(collectionPackages); - - if (viewsPackages.length) { - result = result.concat({ - dbName: bucketInfo.name, - views: viewsPackages, - emptyBucket: false, - }); - } - - return result; - }); - - cb(null, packages, modelInfo, relationships); - } catch (err) { - cb(prepareError(logger, err)); - } -}; - -const getSpecificTablesAndViews = (data, datasetName) => { - const tables = data.collectionData.collections[datasetName].filter(item => !getViewName(item)); - const views = data.collectionData.collections[datasetName].map(getViewName).filter(Boolean); - - return { tables, views } +"use strict";var ey=Object.create;var Ji=Object.defineProperty;var uy=Object.getOwnPropertyDescriptor;var ty=Object.getOwnPropertyNames;var ry=Object.getPrototypeOf,iy=Object.prototype.hasOwnProperty;var ay=(i,e,u)=>e in i?Ji(i,e,{enumerable:!0,configurable:!0,writable:!0,value:u}):i[e]=u;var c=(i,e)=>Ji(i,"name",{value:e,configurable:!0});var $e=(i,e)=>()=>(i&&(e=i(i=0)),e);var b=(i,e)=>()=>(e||i((e={exports:{}}).exports,e),e.exports),sy=(i,e)=>{for(var u in e)Ji(i,u,{get:e[u],enumerable:!0})},t7=(i,e,u,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of ty(e))!iy.call(i,a)&&a!==u&&Ji(i,a,{get:()=>e[a],enumerable:!(r=uy(e,a))||r.enumerable});return i};var g3=(i,e,u)=>(u=i!=null?ey(ry(i)):{},t7(e||!i||!i.__esModule?Ji(u,"default",{value:i,enumerable:!0}):u,i)),y3=i=>t7(Ji({},"__esModule",{value:!0}),i);var Yu=(i,e,u)=>(ay(i,typeof e!="symbol"?e+"":e,u),u);var ur=b(Au=>{"use strict";Object.defineProperty(Au,"__esModule",{value:!0});Au.callbackifyAll=Au.callbackify=Au.promisifyAll=Au.promisify=void 0;function ny(i,e){if(i.promisified_)return i;e=e||{};let u=Array.prototype.slice,r=c(function(){let a;for(a=arguments.length-1;a>=0;a--){let l=arguments[a];if(!(typeof l>"u")){if(typeof l!="function")break;return i.apply(this,arguments)}}let s=u.call(arguments,0,a+1),n=Promise;return this&&this.Promise&&(n=this.Promise),new n((l,d)=>{s.push((...p)=>{let h=u.call(p),f=h.shift();if(f)return d(f);e.singular&&h.length===1?l(h[0]):l(h)}),i.apply(this,s)})},"wrapper");return r.promisified_=!0,r}c(ny,"promisify");Au.promisify=ny;function oy(i,e){let u=e&&e.exclude||[];Object.getOwnPropertyNames(i.prototype).filter(s=>!u.includes(s)&&typeof i.prototype[s]=="function"&&!/(^_|(Stream|_)|promise$)|^constructor$/.test(s)).forEach(s=>{let n=i.prototype[s];n.promisified_||(i.prototype[s]=Au.promisify(n,e))})}c(oy,"promisifyAll");Au.promisifyAll=oy;function ly(i){if(i.callbackified_)return i;let e=c(function(){if(typeof arguments[arguments.length-1]!="function")return i.apply(this,arguments);let u=Array.prototype.pop.call(arguments);i.apply(this,arguments).then(r=>{r=Array.isArray(r)?r:[r],u(null,...r)},r=>u(r))},"wrapper");return e.callbackified_=!0,e}c(ly,"callbackify");Au.callbackify=ly;function cy(i,e){let u=e&&e.exclude||[];Object.getOwnPropertyNames(i.prototype).filter(s=>!u.includes(s)&&typeof i.prototype[s]=="function"&&!/^_|(Stream|_)|^constructor$/.test(s)).forEach(s=>{let n=i.prototype[s];n.callbackified_||(i.prototype[s]=Au.callbackify(n))})}c(cy,"callbackifyAll");Au.callbackifyAll=cy});var tr=b((tq,r7)=>{"use strict";var dy=c(i=>i==null?[]:Array.isArray(i)?i:typeof i=="string"?[i]:typeof i[Symbol.iterator]=="function"?[...i]:[i],"arrify");r7.exports=dy});var Lu=b((iq,d7)=>{"use strict";var Ko=Object.prototype.hasOwnProperty,c7=Object.prototype.toString,i7=Object.defineProperty,a7=Object.getOwnPropertyDescriptor,s7=c(function(e){return typeof Array.isArray=="function"?Array.isArray(e):c7.call(e)==="[object Array]"},"isArray"),n7=c(function(e){if(!e||c7.call(e)!=="[object Object]")return!1;var u=Ko.call(e,"constructor"),r=e.constructor&&e.constructor.prototype&&Ko.call(e.constructor.prototype,"isPrototypeOf");if(e.constructor&&!u&&!r)return!1;var a;for(a in e);return typeof a>"u"||Ko.call(e,a)},"isPlainObject"),o7=c(function(e,u){i7&&u.name==="__proto__"?i7(e,u.name,{enumerable:!0,configurable:!0,value:u.newValue,writable:!0}):e[u.name]=u.newValue},"setProperty"),l7=c(function(e,u){if(u==="__proto__")if(Ko.call(e,u)){if(a7)return a7(e,u).value}else return;return e[u]},"getProperty");d7.exports=c(function i(){var e,u,r,a,s,n,l=arguments[0],d=1,p=arguments.length,h=!1;for(typeof l=="boolean"&&(h=l,l=arguments[1]||{},d=2),(l==null||typeof l!="object"&&typeof l!="function")&&(l={});d{"use strict";Object.defineProperty(jo,"__esModule",{value:!0});var py=require("stream");function N3(i,e){if(Array.isArray(i)&&(i=i.map(u=>N3(u,e))),i!==null&&typeof i=="object"&&!(i instanceof Buffer)&&!(i instanceof py.Stream)&&typeof i.hasOwnProperty=="function")for(let u in i)i.hasOwnProperty(u)&&(i[u]=N3(i[u],e));if(typeof i=="string"&&i.indexOf("{{projectId}}")>-1){if(!e||e==="{{projectId}}")throw new Wo;i=i.replace(/{{projectId}}/g,e)}return i}c(N3,"replaceProjectIdToken");jo.replaceProjectIdToken=N3;var C3=class C3 extends Error{constructor(){super(...arguments),this.message=`Sorry, we cannot connect to Cloud Services without a project + ID. You may specify one with an environment variable named + "GOOGLE_CLOUD_PROJECT".`.replace(/ +/g," ")}};c(C3,"MissingProjectIdError");var Wo=C3;jo.MissingProjectIdError=Wo});var h7=b((oq,hy)=>{hy.exports={"9":"Tab;","10":"NewLine;","33":"excl;","34":"quot;","35":"num;","36":"dollar;","37":"percnt;","38":"amp;","39":"apos;","40":"lpar;","41":"rpar;","42":"midast;","43":"plus;","44":"comma;","46":"period;","47":"sol;","58":"colon;","59":"semi;","60":"lt;","61":"equals;","62":"gt;","63":"quest;","64":"commat;","91":"lsqb;","92":"bsol;","93":"rsqb;","94":"Hat;","95":"UnderBar;","96":"grave;","123":"lcub;","124":"VerticalLine;","125":"rcub;","160":"NonBreakingSpace;","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":"strns;","176":"deg;","177":"pm;","178":"sup2;","179":"sup3;","180":"DiacriticalAcute;","181":"micro;","182":"para;","183":"middot;","184":"Cedilla;","185":"sup1;","186":"ordm;","187":"raquo;","188":"frac14;","189":"half;","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;","256":"Amacr;","257":"amacr;","258":"Abreve;","259":"abreve;","260":"Aogon;","261":"aogon;","262":"Cacute;","263":"cacute;","264":"Ccirc;","265":"ccirc;","266":"Cdot;","267":"cdot;","268":"Ccaron;","269":"ccaron;","270":"Dcaron;","271":"dcaron;","272":"Dstrok;","273":"dstrok;","274":"Emacr;","275":"emacr;","278":"Edot;","279":"edot;","280":"Eogon;","281":"eogon;","282":"Ecaron;","283":"ecaron;","284":"Gcirc;","285":"gcirc;","286":"Gbreve;","287":"gbreve;","288":"Gdot;","289":"gdot;","290":"Gcedil;","292":"Hcirc;","293":"hcirc;","294":"Hstrok;","295":"hstrok;","296":"Itilde;","297":"itilde;","298":"Imacr;","299":"imacr;","302":"Iogon;","303":"iogon;","304":"Idot;","305":"inodot;","306":"IJlig;","307":"ijlig;","308":"Jcirc;","309":"jcirc;","310":"Kcedil;","311":"kcedil;","312":"kgreen;","313":"Lacute;","314":"lacute;","315":"Lcedil;","316":"lcedil;","317":"Lcaron;","318":"lcaron;","319":"Lmidot;","320":"lmidot;","321":"Lstrok;","322":"lstrok;","323":"Nacute;","324":"nacute;","325":"Ncedil;","326":"ncedil;","327":"Ncaron;","328":"ncaron;","329":"napos;","330":"ENG;","331":"eng;","332":"Omacr;","333":"omacr;","336":"Odblac;","337":"odblac;","338":"OElig;","339":"oelig;","340":"Racute;","341":"racute;","342":"Rcedil;","343":"rcedil;","344":"Rcaron;","345":"rcaron;","346":"Sacute;","347":"sacute;","348":"Scirc;","349":"scirc;","350":"Scedil;","351":"scedil;","352":"Scaron;","353":"scaron;","354":"Tcedil;","355":"tcedil;","356":"Tcaron;","357":"tcaron;","358":"Tstrok;","359":"tstrok;","360":"Utilde;","361":"utilde;","362":"Umacr;","363":"umacr;","364":"Ubreve;","365":"ubreve;","366":"Uring;","367":"uring;","368":"Udblac;","369":"udblac;","370":"Uogon;","371":"uogon;","372":"Wcirc;","373":"wcirc;","374":"Ycirc;","375":"ycirc;","376":"Yuml;","377":"Zacute;","378":"zacute;","379":"Zdot;","380":"zdot;","381":"Zcaron;","382":"zcaron;","402":"fnof;","437":"imped;","501":"gacute;","567":"jmath;","710":"circ;","711":"Hacek;","728":"breve;","729":"dot;","730":"ring;","731":"ogon;","732":"tilde;","733":"DiacriticalDoubleAcute;","785":"DownBreve;","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":"varsigma;","963":"sigma;","964":"tau;","965":"upsilon;","966":"phi;","967":"chi;","968":"psi;","969":"omega;","977":"vartheta;","978":"upsih;","981":"varphi;","982":"varpi;","988":"Gammad;","989":"gammad;","1008":"varkappa;","1009":"varrho;","1013":"varepsilon;","1014":"bepsi;","1025":"IOcy;","1026":"DJcy;","1027":"GJcy;","1028":"Jukcy;","1029":"DScy;","1030":"Iukcy;","1031":"YIcy;","1032":"Jsercy;","1033":"LJcy;","1034":"NJcy;","1035":"TSHcy;","1036":"KJcy;","1038":"Ubrcy;","1039":"DZcy;","1040":"Acy;","1041":"Bcy;","1042":"Vcy;","1043":"Gcy;","1044":"Dcy;","1045":"IEcy;","1046":"ZHcy;","1047":"Zcy;","1048":"Icy;","1049":"Jcy;","1050":"Kcy;","1051":"Lcy;","1052":"Mcy;","1053":"Ncy;","1054":"Ocy;","1055":"Pcy;","1056":"Rcy;","1057":"Scy;","1058":"Tcy;","1059":"Ucy;","1060":"Fcy;","1061":"KHcy;","1062":"TScy;","1063":"CHcy;","1064":"SHcy;","1065":"SHCHcy;","1066":"HARDcy;","1067":"Ycy;","1068":"SOFTcy;","1069":"Ecy;","1070":"YUcy;","1071":"YAcy;","1072":"acy;","1073":"bcy;","1074":"vcy;","1075":"gcy;","1076":"dcy;","1077":"iecy;","1078":"zhcy;","1079":"zcy;","1080":"icy;","1081":"jcy;","1082":"kcy;","1083":"lcy;","1084":"mcy;","1085":"ncy;","1086":"ocy;","1087":"pcy;","1088":"rcy;","1089":"scy;","1090":"tcy;","1091":"ucy;","1092":"fcy;","1093":"khcy;","1094":"tscy;","1095":"chcy;","1096":"shcy;","1097":"shchcy;","1098":"hardcy;","1099":"ycy;","1100":"softcy;","1101":"ecy;","1102":"yucy;","1103":"yacy;","1105":"iocy;","1106":"djcy;","1107":"gjcy;","1108":"jukcy;","1109":"dscy;","1110":"iukcy;","1111":"yicy;","1112":"jsercy;","1113":"ljcy;","1114":"njcy;","1115":"tshcy;","1116":"kjcy;","1118":"ubrcy;","1119":"dzcy;","8194":"ensp;","8195":"emsp;","8196":"emsp13;","8197":"emsp14;","8199":"numsp;","8200":"puncsp;","8201":"ThinSpace;","8202":"VeryThinSpace;","8203":"ZeroWidthSpace;","8204":"zwnj;","8205":"zwj;","8206":"lrm;","8207":"rlm;","8208":"hyphen;","8211":"ndash;","8212":"mdash;","8213":"horbar;","8214":"Vert;","8216":"OpenCurlyQuote;","8217":"rsquor;","8218":"sbquo;","8220":"OpenCurlyDoubleQuote;","8221":"rdquor;","8222":"ldquor;","8224":"dagger;","8225":"ddagger;","8226":"bullet;","8229":"nldr;","8230":"mldr;","8240":"permil;","8241":"pertenk;","8242":"prime;","8243":"Prime;","8244":"tprime;","8245":"bprime;","8249":"lsaquo;","8250":"rsaquo;","8254":"OverBar;","8257":"caret;","8259":"hybull;","8260":"frasl;","8271":"bsemi;","8279":"qprime;","8287":"MediumSpace;","8288":"NoBreak;","8289":"ApplyFunction;","8290":"it;","8291":"InvisibleComma;","8364":"euro;","8411":"TripleDot;","8412":"DotDot;","8450":"Copf;","8453":"incare;","8458":"gscr;","8459":"Hscr;","8460":"Poincareplane;","8461":"quaternions;","8462":"planckh;","8463":"plankv;","8464":"Iscr;","8465":"imagpart;","8466":"Lscr;","8467":"ell;","8469":"Nopf;","8470":"numero;","8471":"copysr;","8472":"wp;","8473":"primes;","8474":"rationals;","8475":"Rscr;","8476":"Rfr;","8477":"Ropf;","8478":"rx;","8482":"trade;","8484":"Zopf;","8487":"mho;","8488":"Zfr;","8489":"iiota;","8492":"Bscr;","8493":"Cfr;","8495":"escr;","8496":"expectation;","8497":"Fscr;","8499":"phmmat;","8500":"oscr;","8501":"aleph;","8502":"beth;","8503":"gimel;","8504":"daleth;","8517":"DD;","8518":"DifferentialD;","8519":"exponentiale;","8520":"ImaginaryI;","8531":"frac13;","8532":"frac23;","8533":"frac15;","8534":"frac25;","8535":"frac35;","8536":"frac45;","8537":"frac16;","8538":"frac56;","8539":"frac18;","8540":"frac38;","8541":"frac58;","8542":"frac78;","8592":"slarr;","8593":"uparrow;","8594":"srarr;","8595":"ShortDownArrow;","8596":"leftrightarrow;","8597":"varr;","8598":"UpperLeftArrow;","8599":"UpperRightArrow;","8600":"searrow;","8601":"swarrow;","8602":"nleftarrow;","8603":"nrightarrow;","8605":"rightsquigarrow;","8606":"twoheadleftarrow;","8607":"Uarr;","8608":"twoheadrightarrow;","8609":"Darr;","8610":"leftarrowtail;","8611":"rightarrowtail;","8612":"mapstoleft;","8613":"UpTeeArrow;","8614":"RightTeeArrow;","8615":"mapstodown;","8617":"larrhk;","8618":"rarrhk;","8619":"looparrowleft;","8620":"rarrlp;","8621":"leftrightsquigarrow;","8622":"nleftrightarrow;","8624":"lsh;","8625":"rsh;","8626":"ldsh;","8627":"rdsh;","8629":"crarr;","8630":"curvearrowleft;","8631":"curvearrowright;","8634":"olarr;","8635":"orarr;","8636":"lharu;","8637":"lhard;","8638":"upharpoonright;","8639":"upharpoonleft;","8640":"RightVector;","8641":"rightharpoondown;","8642":"RightDownVector;","8643":"LeftDownVector;","8644":"rlarr;","8645":"UpArrowDownArrow;","8646":"lrarr;","8647":"llarr;","8648":"uuarr;","8649":"rrarr;","8650":"downdownarrows;","8651":"ReverseEquilibrium;","8652":"rlhar;","8653":"nLeftarrow;","8654":"nLeftrightarrow;","8655":"nRightarrow;","8656":"Leftarrow;","8657":"Uparrow;","8658":"Rightarrow;","8659":"Downarrow;","8660":"Leftrightarrow;","8661":"vArr;","8662":"nwArr;","8663":"neArr;","8664":"seArr;","8665":"swArr;","8666":"Lleftarrow;","8667":"Rrightarrow;","8669":"zigrarr;","8676":"LeftArrowBar;","8677":"RightArrowBar;","8693":"duarr;","8701":"loarr;","8702":"roarr;","8703":"hoarr;","8704":"forall;","8705":"complement;","8706":"PartialD;","8707":"Exists;","8708":"NotExists;","8709":"varnothing;","8711":"nabla;","8712":"isinv;","8713":"notinva;","8715":"SuchThat;","8716":"NotReverseElement;","8719":"Product;","8720":"Coproduct;","8721":"sum;","8722":"minus;","8723":"mp;","8724":"plusdo;","8726":"ssetmn;","8727":"lowast;","8728":"SmallCircle;","8730":"Sqrt;","8733":"vprop;","8734":"infin;","8735":"angrt;","8736":"angle;","8737":"measuredangle;","8738":"angsph;","8739":"VerticalBar;","8740":"nsmid;","8741":"spar;","8742":"nspar;","8743":"wedge;","8744":"vee;","8745":"cap;","8746":"cup;","8747":"Integral;","8748":"Int;","8749":"tint;","8750":"oint;","8751":"DoubleContourIntegral;","8752":"Cconint;","8753":"cwint;","8754":"cwconint;","8755":"CounterClockwiseContourIntegral;","8756":"therefore;","8757":"because;","8758":"ratio;","8759":"Proportion;","8760":"minusd;","8762":"mDDot;","8763":"homtht;","8764":"Tilde;","8765":"bsim;","8766":"mstpos;","8767":"acd;","8768":"wreath;","8769":"nsim;","8770":"esim;","8771":"TildeEqual;","8772":"nsimeq;","8773":"TildeFullEqual;","8774":"simne;","8775":"NotTildeFullEqual;","8776":"TildeTilde;","8777":"NotTildeTilde;","8778":"approxeq;","8779":"apid;","8780":"bcong;","8781":"CupCap;","8782":"HumpDownHump;","8783":"HumpEqual;","8784":"esdot;","8785":"eDot;","8786":"fallingdotseq;","8787":"risingdotseq;","8788":"coloneq;","8789":"eqcolon;","8790":"eqcirc;","8791":"cire;","8793":"wedgeq;","8794":"veeeq;","8796":"trie;","8799":"questeq;","8800":"NotEqual;","8801":"equiv;","8802":"NotCongruent;","8804":"leq;","8805":"GreaterEqual;","8806":"LessFullEqual;","8807":"GreaterFullEqual;","8808":"lneqq;","8809":"gneqq;","8810":"NestedLessLess;","8811":"NestedGreaterGreater;","8812":"twixt;","8813":"NotCupCap;","8814":"NotLess;","8815":"NotGreater;","8816":"NotLessEqual;","8817":"NotGreaterEqual;","8818":"lsim;","8819":"gtrsim;","8820":"NotLessTilde;","8821":"NotGreaterTilde;","8822":"lg;","8823":"gtrless;","8824":"ntlg;","8825":"ntgl;","8826":"Precedes;","8827":"Succeeds;","8828":"PrecedesSlantEqual;","8829":"SucceedsSlantEqual;","8830":"prsim;","8831":"succsim;","8832":"nprec;","8833":"nsucc;","8834":"subset;","8835":"supset;","8836":"nsub;","8837":"nsup;","8838":"SubsetEqual;","8839":"supseteq;","8840":"nsubseteq;","8841":"nsupseteq;","8842":"subsetneq;","8843":"supsetneq;","8845":"cupdot;","8846":"uplus;","8847":"SquareSubset;","8848":"SquareSuperset;","8849":"SquareSubsetEqual;","8850":"SquareSupersetEqual;","8851":"SquareIntersection;","8852":"SquareUnion;","8853":"oplus;","8854":"ominus;","8855":"otimes;","8856":"osol;","8857":"odot;","8858":"ocir;","8859":"oast;","8861":"odash;","8862":"plusb;","8863":"minusb;","8864":"timesb;","8865":"sdotb;","8866":"vdash;","8867":"LeftTee;","8868":"top;","8869":"UpTee;","8871":"models;","8872":"vDash;","8873":"Vdash;","8874":"Vvdash;","8875":"VDash;","8876":"nvdash;","8877":"nvDash;","8878":"nVdash;","8879":"nVDash;","8880":"prurel;","8882":"vltri;","8883":"vrtri;","8884":"trianglelefteq;","8885":"trianglerighteq;","8886":"origof;","8887":"imof;","8888":"mumap;","8889":"hercon;","8890":"intercal;","8891":"veebar;","8893":"barvee;","8894":"angrtvb;","8895":"lrtri;","8896":"xwedge;","8897":"xvee;","8898":"xcap;","8899":"xcup;","8900":"diamond;","8901":"sdot;","8902":"Star;","8903":"divonx;","8904":"bowtie;","8905":"ltimes;","8906":"rtimes;","8907":"lthree;","8908":"rthree;","8909":"bsime;","8910":"cuvee;","8911":"cuwed;","8912":"Subset;","8913":"Supset;","8914":"Cap;","8915":"Cup;","8916":"pitchfork;","8917":"epar;","8918":"ltdot;","8919":"gtrdot;","8920":"Ll;","8921":"ggg;","8922":"LessEqualGreater;","8923":"gtreqless;","8926":"curlyeqprec;","8927":"curlyeqsucc;","8928":"nprcue;","8929":"nsccue;","8930":"nsqsube;","8931":"nsqsupe;","8934":"lnsim;","8935":"gnsim;","8936":"prnsim;","8937":"succnsim;","8938":"ntriangleleft;","8939":"ntriangleright;","8940":"ntrianglelefteq;","8941":"ntrianglerighteq;","8942":"vellip;","8943":"ctdot;","8944":"utdot;","8945":"dtdot;","8946":"disin;","8947":"isinsv;","8948":"isins;","8949":"isindot;","8950":"notinvc;","8951":"notinvb;","8953":"isinE;","8954":"nisd;","8955":"xnis;","8956":"nis;","8957":"notnivc;","8958":"notnivb;","8965":"barwedge;","8966":"doublebarwedge;","8968":"LeftCeiling;","8969":"RightCeiling;","8970":"lfloor;","8971":"RightFloor;","8972":"drcrop;","8973":"dlcrop;","8974":"urcrop;","8975":"ulcrop;","8976":"bnot;","8978":"profline;","8979":"profsurf;","8981":"telrec;","8982":"target;","8988":"ulcorner;","8989":"urcorner;","8990":"llcorner;","8991":"lrcorner;","8994":"sfrown;","8995":"ssmile;","9005":"cylcty;","9006":"profalar;","9014":"topbot;","9021":"ovbar;","9023":"solbar;","9084":"angzarr;","9136":"lmoustache;","9137":"rmoustache;","9140":"tbrk;","9141":"UnderBracket;","9142":"bbrktbrk;","9180":"OverParenthesis;","9181":"UnderParenthesis;","9182":"OverBrace;","9183":"UnderBrace;","9186":"trpezium;","9191":"elinters;","9251":"blank;","9416":"oS;","9472":"HorizontalLine;","9474":"boxv;","9484":"boxdr;","9488":"boxdl;","9492":"boxur;","9496":"boxul;","9500":"boxvr;","9508":"boxvl;","9516":"boxhd;","9524":"boxhu;","9532":"boxvh;","9552":"boxH;","9553":"boxV;","9554":"boxdR;","9555":"boxDr;","9556":"boxDR;","9557":"boxdL;","9558":"boxDl;","9559":"boxDL;","9560":"boxuR;","9561":"boxUr;","9562":"boxUR;","9563":"boxuL;","9564":"boxUl;","9565":"boxUL;","9566":"boxvR;","9567":"boxVr;","9568":"boxVR;","9569":"boxvL;","9570":"boxVl;","9571":"boxVL;","9572":"boxHd;","9573":"boxhD;","9574":"boxHD;","9575":"boxHu;","9576":"boxhU;","9577":"boxHU;","9578":"boxvH;","9579":"boxVh;","9580":"boxVH;","9600":"uhblk;","9604":"lhblk;","9608":"block;","9617":"blk14;","9618":"blk12;","9619":"blk34;","9633":"square;","9642":"squf;","9643":"EmptyVerySmallSquare;","9645":"rect;","9646":"marker;","9649":"fltns;","9651":"xutri;","9652":"utrif;","9653":"utri;","9656":"rtrif;","9657":"triangleright;","9661":"xdtri;","9662":"dtrif;","9663":"triangledown;","9666":"ltrif;","9667":"triangleleft;","9674":"lozenge;","9675":"cir;","9708":"tridot;","9711":"xcirc;","9720":"ultri;","9721":"urtri;","9722":"lltri;","9723":"EmptySmallSquare;","9724":"FilledSmallSquare;","9733":"starf;","9734":"star;","9742":"phone;","9792":"female;","9794":"male;","9824":"spadesuit;","9827":"clubsuit;","9829":"heartsuit;","9830":"diams;","9834":"sung;","9837":"flat;","9838":"natural;","9839":"sharp;","10003":"checkmark;","10007":"cross;","10016":"maltese;","10038":"sext;","10072":"VerticalSeparator;","10098":"lbbrk;","10099":"rbbrk;","10184":"bsolhsub;","10185":"suphsol;","10214":"lobrk;","10215":"robrk;","10216":"LeftAngleBracket;","10217":"RightAngleBracket;","10218":"Lang;","10219":"Rang;","10220":"loang;","10221":"roang;","10229":"xlarr;","10230":"xrarr;","10231":"xharr;","10232":"xlArr;","10233":"xrArr;","10234":"xhArr;","10236":"xmap;","10239":"dzigrarr;","10498":"nvlArr;","10499":"nvrArr;","10500":"nvHarr;","10501":"Map;","10508":"lbarr;","10509":"rbarr;","10510":"lBarr;","10511":"rBarr;","10512":"RBarr;","10513":"DDotrahd;","10514":"UpArrowBar;","10515":"DownArrowBar;","10518":"Rarrtl;","10521":"latail;","10522":"ratail;","10523":"lAtail;","10524":"rAtail;","10525":"larrfs;","10526":"rarrfs;","10527":"larrbfs;","10528":"rarrbfs;","10531":"nwarhk;","10532":"nearhk;","10533":"searhk;","10534":"swarhk;","10535":"nwnear;","10536":"toea;","10537":"tosa;","10538":"swnwar;","10547":"rarrc;","10549":"cudarrr;","10550":"ldca;","10551":"rdca;","10552":"cudarrl;","10553":"larrpl;","10556":"curarrm;","10557":"cularrp;","10565":"rarrpl;","10568":"harrcir;","10569":"Uarrocir;","10570":"lurdshar;","10571":"ldrushar;","10574":"LeftRightVector;","10575":"RightUpDownVector;","10576":"DownLeftRightVector;","10577":"LeftUpDownVector;","10578":"LeftVectorBar;","10579":"RightVectorBar;","10580":"RightUpVectorBar;","10581":"RightDownVectorBar;","10582":"DownLeftVectorBar;","10583":"DownRightVectorBar;","10584":"LeftUpVectorBar;","10585":"LeftDownVectorBar;","10586":"LeftTeeVector;","10587":"RightTeeVector;","10588":"RightUpTeeVector;","10589":"RightDownTeeVector;","10590":"DownLeftTeeVector;","10591":"DownRightTeeVector;","10592":"LeftUpTeeVector;","10593":"LeftDownTeeVector;","10594":"lHar;","10595":"uHar;","10596":"rHar;","10597":"dHar;","10598":"luruhar;","10599":"ldrdhar;","10600":"ruluhar;","10601":"rdldhar;","10602":"lharul;","10603":"llhard;","10604":"rharul;","10605":"lrhard;","10606":"UpEquilibrium;","10607":"ReverseUpEquilibrium;","10608":"RoundImplies;","10609":"erarr;","10610":"simrarr;","10611":"larrsim;","10612":"rarrsim;","10613":"rarrap;","10614":"ltlarr;","10616":"gtrarr;","10617":"subrarr;","10619":"suplarr;","10620":"lfisht;","10621":"rfisht;","10622":"ufisht;","10623":"dfisht;","10629":"lopar;","10630":"ropar;","10635":"lbrke;","10636":"rbrke;","10637":"lbrkslu;","10638":"rbrksld;","10639":"lbrksld;","10640":"rbrkslu;","10641":"langd;","10642":"rangd;","10643":"lparlt;","10644":"rpargt;","10645":"gtlPar;","10646":"ltrPar;","10650":"vzigzag;","10652":"vangrt;","10653":"angrtvbd;","10660":"ange;","10661":"range;","10662":"dwangle;","10663":"uwangle;","10664":"angmsdaa;","10665":"angmsdab;","10666":"angmsdac;","10667":"angmsdad;","10668":"angmsdae;","10669":"angmsdaf;","10670":"angmsdag;","10671":"angmsdah;","10672":"bemptyv;","10673":"demptyv;","10674":"cemptyv;","10675":"raemptyv;","10676":"laemptyv;","10677":"ohbar;","10678":"omid;","10679":"opar;","10681":"operp;","10683":"olcross;","10684":"odsold;","10686":"olcir;","10687":"ofcir;","10688":"olt;","10689":"ogt;","10690":"cirscir;","10691":"cirE;","10692":"solb;","10693":"bsolb;","10697":"boxbox;","10701":"trisb;","10702":"rtriltri;","10703":"LeftTriangleBar;","10704":"RightTriangleBar;","10716":"iinfin;","10717":"infintie;","10718":"nvinfin;","10723":"eparsl;","10724":"smeparsl;","10725":"eqvparsl;","10731":"lozf;","10740":"RuleDelayed;","10742":"dsol;","10752":"xodot;","10753":"xoplus;","10754":"xotime;","10756":"xuplus;","10758":"xsqcup;","10764":"qint;","10765":"fpartint;","10768":"cirfnint;","10769":"awint;","10770":"rppolint;","10771":"scpolint;","10772":"npolint;","10773":"pointint;","10774":"quatint;","10775":"intlarhk;","10786":"pluscir;","10787":"plusacir;","10788":"simplus;","10789":"plusdu;","10790":"plussim;","10791":"plustwo;","10793":"mcomma;","10794":"minusdu;","10797":"loplus;","10798":"roplus;","10799":"Cross;","10800":"timesd;","10801":"timesbar;","10803":"smashp;","10804":"lotimes;","10805":"rotimes;","10806":"otimesas;","10807":"Otimes;","10808":"odiv;","10809":"triplus;","10810":"triminus;","10811":"tritime;","10812":"iprod;","10815":"amalg;","10816":"capdot;","10818":"ncup;","10819":"ncap;","10820":"capand;","10821":"cupor;","10822":"cupcap;","10823":"capcup;","10824":"cupbrcap;","10825":"capbrcup;","10826":"cupcup;","10827":"capcap;","10828":"ccups;","10829":"ccaps;","10832":"ccupssm;","10835":"And;","10836":"Or;","10837":"andand;","10838":"oror;","10839":"orslope;","10840":"andslope;","10842":"andv;","10843":"orv;","10844":"andd;","10845":"ord;","10847":"wedbar;","10854":"sdote;","10858":"simdot;","10861":"congdot;","10862":"easter;","10863":"apacir;","10864":"apE;","10865":"eplus;","10866":"pluse;","10867":"Esim;","10868":"Colone;","10869":"Equal;","10871":"eDDot;","10872":"equivDD;","10873":"ltcir;","10874":"gtcir;","10875":"ltquest;","10876":"gtquest;","10877":"LessSlantEqual;","10878":"GreaterSlantEqual;","10879":"lesdot;","10880":"gesdot;","10881":"lesdoto;","10882":"gesdoto;","10883":"lesdotor;","10884":"gesdotol;","10885":"lessapprox;","10886":"gtrapprox;","10887":"lneq;","10888":"gneq;","10889":"lnapprox;","10890":"gnapprox;","10891":"lesseqqgtr;","10892":"gtreqqless;","10893":"lsime;","10894":"gsime;","10895":"lsimg;","10896":"gsiml;","10897":"lgE;","10898":"glE;","10899":"lesges;","10900":"gesles;","10901":"eqslantless;","10902":"eqslantgtr;","10903":"elsdot;","10904":"egsdot;","10905":"el;","10906":"eg;","10909":"siml;","10910":"simg;","10911":"simlE;","10912":"simgE;","10913":"LessLess;","10914":"GreaterGreater;","10916":"glj;","10917":"gla;","10918":"ltcc;","10919":"gtcc;","10920":"lescc;","10921":"gescc;","10922":"smt;","10923":"lat;","10924":"smte;","10925":"late;","10926":"bumpE;","10927":"preceq;","10928":"succeq;","10931":"prE;","10932":"scE;","10933":"prnE;","10934":"succneqq;","10935":"precapprox;","10936":"succapprox;","10937":"prnap;","10938":"succnapprox;","10939":"Pr;","10940":"Sc;","10941":"subdot;","10942":"supdot;","10943":"subplus;","10944":"supplus;","10945":"submult;","10946":"supmult;","10947":"subedot;","10948":"supedot;","10949":"subseteqq;","10950":"supseteqq;","10951":"subsim;","10952":"supsim;","10955":"subsetneqq;","10956":"supsetneqq;","10959":"csub;","10960":"csup;","10961":"csube;","10962":"csupe;","10963":"subsup;","10964":"supsub;","10965":"subsub;","10966":"supsup;","10967":"suphsub;","10968":"supdsub;","10969":"forkv;","10970":"topfork;","10971":"mlcp;","10980":"DoubleLeftTee;","10982":"Vdashl;","10983":"Barv;","10984":"vBar;","10985":"vBarv;","10987":"Vbar;","10988":"Not;","10989":"bNot;","10990":"rnmid;","10991":"cirmid;","10992":"midcir;","10993":"topcir;","10994":"nhpar;","10995":"parsim;","11005":"parsl;","64256":"fflig;","64257":"filig;","64258":"fllig;","64259":"ffilig;","64260":"ffllig;"}});var O7=b((lq,S7)=>{var f7=require("punycode"),fy=h7();S7.exports=Sy;function Sy(i,e){if(typeof i!="string")throw new TypeError("Expected a String");e||(e={});var u=!0;e.named&&(u=!1),e.numeric!==void 0&&(u=e.numeric);for(var r=e.special||{'"':!0,"'":!0,"<":!0,">":!0,"&":!0},a=f7.ucs2.decode(i),s=[],n=0;n=127||r[d])&&!u?s.push("&"+(/;$/.test(p)?p:p+";")):l<32||l>=127||r[d]?s.push("&#"+l+";"):s.push(d)}return s.join("")}c(Sy,"encode")});var L7=b((dq,Oy)=>{Oy.exports={"Aacute;":"\xC1",Aacute:"\xC1","aacute;":"\xE1",aacute:"\xE1","Abreve;":"\u0102","abreve;":"\u0103","ac;":"\u223E","acd;":"\u223F","acE;":"\u223E\u0333","Acirc;":"\xC2",Acirc:"\xC2","acirc;":"\xE2",acirc:"\xE2","acute;":"\xB4",acute:"\xB4","Acy;":"\u0410","acy;":"\u0430","AElig;":"\xC6",AElig:"\xC6","aelig;":"\xE6",aelig:"\xE6","af;":"\u2061","Afr;":"\u{1D504}","afr;":"\u{1D51E}","Agrave;":"\xC0",Agrave:"\xC0","agrave;":"\xE0",agrave:"\xE0","alefsym;":"\u2135","aleph;":"\u2135","Alpha;":"\u0391","alpha;":"\u03B1","Amacr;":"\u0100","amacr;":"\u0101","amalg;":"\u2A3F","AMP;":"&",AMP:"&","amp;":"&",amp:"&","And;":"\u2A53","and;":"\u2227","andand;":"\u2A55","andd;":"\u2A5C","andslope;":"\u2A58","andv;":"\u2A5A","ang;":"\u2220","ange;":"\u29A4","angle;":"\u2220","angmsd;":"\u2221","angmsdaa;":"\u29A8","angmsdab;":"\u29A9","angmsdac;":"\u29AA","angmsdad;":"\u29AB","angmsdae;":"\u29AC","angmsdaf;":"\u29AD","angmsdag;":"\u29AE","angmsdah;":"\u29AF","angrt;":"\u221F","angrtvb;":"\u22BE","angrtvbd;":"\u299D","angsph;":"\u2222","angst;":"\xC5","angzarr;":"\u237C","Aogon;":"\u0104","aogon;":"\u0105","Aopf;":"\u{1D538}","aopf;":"\u{1D552}","ap;":"\u2248","apacir;":"\u2A6F","apE;":"\u2A70","ape;":"\u224A","apid;":"\u224B","apos;":"'","ApplyFunction;":"\u2061","approx;":"\u2248","approxeq;":"\u224A","Aring;":"\xC5",Aring:"\xC5","aring;":"\xE5",aring:"\xE5","Ascr;":"\u{1D49C}","ascr;":"\u{1D4B6}","Assign;":"\u2254","ast;":"*","asymp;":"\u2248","asympeq;":"\u224D","Atilde;":"\xC3",Atilde:"\xC3","atilde;":"\xE3",atilde:"\xE3","Auml;":"\xC4",Auml:"\xC4","auml;":"\xE4",auml:"\xE4","awconint;":"\u2233","awint;":"\u2A11","backcong;":"\u224C","backepsilon;":"\u03F6","backprime;":"\u2035","backsim;":"\u223D","backsimeq;":"\u22CD","Backslash;":"\u2216","Barv;":"\u2AE7","barvee;":"\u22BD","Barwed;":"\u2306","barwed;":"\u2305","barwedge;":"\u2305","bbrk;":"\u23B5","bbrktbrk;":"\u23B6","bcong;":"\u224C","Bcy;":"\u0411","bcy;":"\u0431","bdquo;":"\u201E","becaus;":"\u2235","Because;":"\u2235","because;":"\u2235","bemptyv;":"\u29B0","bepsi;":"\u03F6","bernou;":"\u212C","Bernoullis;":"\u212C","Beta;":"\u0392","beta;":"\u03B2","beth;":"\u2136","between;":"\u226C","Bfr;":"\u{1D505}","bfr;":"\u{1D51F}","bigcap;":"\u22C2","bigcirc;":"\u25EF","bigcup;":"\u22C3","bigodot;":"\u2A00","bigoplus;":"\u2A01","bigotimes;":"\u2A02","bigsqcup;":"\u2A06","bigstar;":"\u2605","bigtriangledown;":"\u25BD","bigtriangleup;":"\u25B3","biguplus;":"\u2A04","bigvee;":"\u22C1","bigwedge;":"\u22C0","bkarow;":"\u290D","blacklozenge;":"\u29EB","blacksquare;":"\u25AA","blacktriangle;":"\u25B4","blacktriangledown;":"\u25BE","blacktriangleleft;":"\u25C2","blacktriangleright;":"\u25B8","blank;":"\u2423","blk12;":"\u2592","blk14;":"\u2591","blk34;":"\u2593","block;":"\u2588","bne;":"=\u20E5","bnequiv;":"\u2261\u20E5","bNot;":"\u2AED","bnot;":"\u2310","Bopf;":"\u{1D539}","bopf;":"\u{1D553}","bot;":"\u22A5","bottom;":"\u22A5","bowtie;":"\u22C8","boxbox;":"\u29C9","boxDL;":"\u2557","boxDl;":"\u2556","boxdL;":"\u2555","boxdl;":"\u2510","boxDR;":"\u2554","boxDr;":"\u2553","boxdR;":"\u2552","boxdr;":"\u250C","boxH;":"\u2550","boxh;":"\u2500","boxHD;":"\u2566","boxHd;":"\u2564","boxhD;":"\u2565","boxhd;":"\u252C","boxHU;":"\u2569","boxHu;":"\u2567","boxhU;":"\u2568","boxhu;":"\u2534","boxminus;":"\u229F","boxplus;":"\u229E","boxtimes;":"\u22A0","boxUL;":"\u255D","boxUl;":"\u255C","boxuL;":"\u255B","boxul;":"\u2518","boxUR;":"\u255A","boxUr;":"\u2559","boxuR;":"\u2558","boxur;":"\u2514","boxV;":"\u2551","boxv;":"\u2502","boxVH;":"\u256C","boxVh;":"\u256B","boxvH;":"\u256A","boxvh;":"\u253C","boxVL;":"\u2563","boxVl;":"\u2562","boxvL;":"\u2561","boxvl;":"\u2524","boxVR;":"\u2560","boxVr;":"\u255F","boxvR;":"\u255E","boxvr;":"\u251C","bprime;":"\u2035","Breve;":"\u02D8","breve;":"\u02D8","brvbar;":"\xA6",brvbar:"\xA6","Bscr;":"\u212C","bscr;":"\u{1D4B7}","bsemi;":"\u204F","bsim;":"\u223D","bsime;":"\u22CD","bsol;":"\\","bsolb;":"\u29C5","bsolhsub;":"\u27C8","bull;":"\u2022","bullet;":"\u2022","bump;":"\u224E","bumpE;":"\u2AAE","bumpe;":"\u224F","Bumpeq;":"\u224E","bumpeq;":"\u224F","Cacute;":"\u0106","cacute;":"\u0107","Cap;":"\u22D2","cap;":"\u2229","capand;":"\u2A44","capbrcup;":"\u2A49","capcap;":"\u2A4B","capcup;":"\u2A47","capdot;":"\u2A40","CapitalDifferentialD;":"\u2145","caps;":"\u2229\uFE00","caret;":"\u2041","caron;":"\u02C7","Cayleys;":"\u212D","ccaps;":"\u2A4D","Ccaron;":"\u010C","ccaron;":"\u010D","Ccedil;":"\xC7",Ccedil:"\xC7","ccedil;":"\xE7",ccedil:"\xE7","Ccirc;":"\u0108","ccirc;":"\u0109","Cconint;":"\u2230","ccups;":"\u2A4C","ccupssm;":"\u2A50","Cdot;":"\u010A","cdot;":"\u010B","cedil;":"\xB8",cedil:"\xB8","Cedilla;":"\xB8","cemptyv;":"\u29B2","cent;":"\xA2",cent:"\xA2","CenterDot;":"\xB7","centerdot;":"\xB7","Cfr;":"\u212D","cfr;":"\u{1D520}","CHcy;":"\u0427","chcy;":"\u0447","check;":"\u2713","checkmark;":"\u2713","Chi;":"\u03A7","chi;":"\u03C7","cir;":"\u25CB","circ;":"\u02C6","circeq;":"\u2257","circlearrowleft;":"\u21BA","circlearrowright;":"\u21BB","circledast;":"\u229B","circledcirc;":"\u229A","circleddash;":"\u229D","CircleDot;":"\u2299","circledR;":"\xAE","circledS;":"\u24C8","CircleMinus;":"\u2296","CirclePlus;":"\u2295","CircleTimes;":"\u2297","cirE;":"\u29C3","cire;":"\u2257","cirfnint;":"\u2A10","cirmid;":"\u2AEF","cirscir;":"\u29C2","ClockwiseContourIntegral;":"\u2232","CloseCurlyDoubleQuote;":"\u201D","CloseCurlyQuote;":"\u2019","clubs;":"\u2663","clubsuit;":"\u2663","Colon;":"\u2237","colon;":":","Colone;":"\u2A74","colone;":"\u2254","coloneq;":"\u2254","comma;":",","commat;":"@","comp;":"\u2201","compfn;":"\u2218","complement;":"\u2201","complexes;":"\u2102","cong;":"\u2245","congdot;":"\u2A6D","Congruent;":"\u2261","Conint;":"\u222F","conint;":"\u222E","ContourIntegral;":"\u222E","Copf;":"\u2102","copf;":"\u{1D554}","coprod;":"\u2210","Coproduct;":"\u2210","COPY;":"\xA9",COPY:"\xA9","copy;":"\xA9",copy:"\xA9","copysr;":"\u2117","CounterClockwiseContourIntegral;":"\u2233","crarr;":"\u21B5","Cross;":"\u2A2F","cross;":"\u2717","Cscr;":"\u{1D49E}","cscr;":"\u{1D4B8}","csub;":"\u2ACF","csube;":"\u2AD1","csup;":"\u2AD0","csupe;":"\u2AD2","ctdot;":"\u22EF","cudarrl;":"\u2938","cudarrr;":"\u2935","cuepr;":"\u22DE","cuesc;":"\u22DF","cularr;":"\u21B6","cularrp;":"\u293D","Cup;":"\u22D3","cup;":"\u222A","cupbrcap;":"\u2A48","CupCap;":"\u224D","cupcap;":"\u2A46","cupcup;":"\u2A4A","cupdot;":"\u228D","cupor;":"\u2A45","cups;":"\u222A\uFE00","curarr;":"\u21B7","curarrm;":"\u293C","curlyeqprec;":"\u22DE","curlyeqsucc;":"\u22DF","curlyvee;":"\u22CE","curlywedge;":"\u22CF","curren;":"\xA4",curren:"\xA4","curvearrowleft;":"\u21B6","curvearrowright;":"\u21B7","cuvee;":"\u22CE","cuwed;":"\u22CF","cwconint;":"\u2232","cwint;":"\u2231","cylcty;":"\u232D","Dagger;":"\u2021","dagger;":"\u2020","daleth;":"\u2138","Darr;":"\u21A1","dArr;":"\u21D3","darr;":"\u2193","dash;":"\u2010","Dashv;":"\u2AE4","dashv;":"\u22A3","dbkarow;":"\u290F","dblac;":"\u02DD","Dcaron;":"\u010E","dcaron;":"\u010F","Dcy;":"\u0414","dcy;":"\u0434","DD;":"\u2145","dd;":"\u2146","ddagger;":"\u2021","ddarr;":"\u21CA","DDotrahd;":"\u2911","ddotseq;":"\u2A77","deg;":"\xB0",deg:"\xB0","Del;":"\u2207","Delta;":"\u0394","delta;":"\u03B4","demptyv;":"\u29B1","dfisht;":"\u297F","Dfr;":"\u{1D507}","dfr;":"\u{1D521}","dHar;":"\u2965","dharl;":"\u21C3","dharr;":"\u21C2","DiacriticalAcute;":"\xB4","DiacriticalDot;":"\u02D9","DiacriticalDoubleAcute;":"\u02DD","DiacriticalGrave;":"`","DiacriticalTilde;":"\u02DC","diam;":"\u22C4","Diamond;":"\u22C4","diamond;":"\u22C4","diamondsuit;":"\u2666","diams;":"\u2666","die;":"\xA8","DifferentialD;":"\u2146","digamma;":"\u03DD","disin;":"\u22F2","div;":"\xF7","divide;":"\xF7",divide:"\xF7","divideontimes;":"\u22C7","divonx;":"\u22C7","DJcy;":"\u0402","djcy;":"\u0452","dlcorn;":"\u231E","dlcrop;":"\u230D","dollar;":"$","Dopf;":"\u{1D53B}","dopf;":"\u{1D555}","Dot;":"\xA8","dot;":"\u02D9","DotDot;":"\u20DC","doteq;":"\u2250","doteqdot;":"\u2251","DotEqual;":"\u2250","dotminus;":"\u2238","dotplus;":"\u2214","dotsquare;":"\u22A1","doublebarwedge;":"\u2306","DoubleContourIntegral;":"\u222F","DoubleDot;":"\xA8","DoubleDownArrow;":"\u21D3","DoubleLeftArrow;":"\u21D0","DoubleLeftRightArrow;":"\u21D4","DoubleLeftTee;":"\u2AE4","DoubleLongLeftArrow;":"\u27F8","DoubleLongLeftRightArrow;":"\u27FA","DoubleLongRightArrow;":"\u27F9","DoubleRightArrow;":"\u21D2","DoubleRightTee;":"\u22A8","DoubleUpArrow;":"\u21D1","DoubleUpDownArrow;":"\u21D5","DoubleVerticalBar;":"\u2225","DownArrow;":"\u2193","Downarrow;":"\u21D3","downarrow;":"\u2193","DownArrowBar;":"\u2913","DownArrowUpArrow;":"\u21F5","DownBreve;":"\u0311","downdownarrows;":"\u21CA","downharpoonleft;":"\u21C3","downharpoonright;":"\u21C2","DownLeftRightVector;":"\u2950","DownLeftTeeVector;":"\u295E","DownLeftVector;":"\u21BD","DownLeftVectorBar;":"\u2956","DownRightTeeVector;":"\u295F","DownRightVector;":"\u21C1","DownRightVectorBar;":"\u2957","DownTee;":"\u22A4","DownTeeArrow;":"\u21A7","drbkarow;":"\u2910","drcorn;":"\u231F","drcrop;":"\u230C","Dscr;":"\u{1D49F}","dscr;":"\u{1D4B9}","DScy;":"\u0405","dscy;":"\u0455","dsol;":"\u29F6","Dstrok;":"\u0110","dstrok;":"\u0111","dtdot;":"\u22F1","dtri;":"\u25BF","dtrif;":"\u25BE","duarr;":"\u21F5","duhar;":"\u296F","dwangle;":"\u29A6","DZcy;":"\u040F","dzcy;":"\u045F","dzigrarr;":"\u27FF","Eacute;":"\xC9",Eacute:"\xC9","eacute;":"\xE9",eacute:"\xE9","easter;":"\u2A6E","Ecaron;":"\u011A","ecaron;":"\u011B","ecir;":"\u2256","Ecirc;":"\xCA",Ecirc:"\xCA","ecirc;":"\xEA",ecirc:"\xEA","ecolon;":"\u2255","Ecy;":"\u042D","ecy;":"\u044D","eDDot;":"\u2A77","Edot;":"\u0116","eDot;":"\u2251","edot;":"\u0117","ee;":"\u2147","efDot;":"\u2252","Efr;":"\u{1D508}","efr;":"\u{1D522}","eg;":"\u2A9A","Egrave;":"\xC8",Egrave:"\xC8","egrave;":"\xE8",egrave:"\xE8","egs;":"\u2A96","egsdot;":"\u2A98","el;":"\u2A99","Element;":"\u2208","elinters;":"\u23E7","ell;":"\u2113","els;":"\u2A95","elsdot;":"\u2A97","Emacr;":"\u0112","emacr;":"\u0113","empty;":"\u2205","emptyset;":"\u2205","EmptySmallSquare;":"\u25FB","emptyv;":"\u2205","EmptyVerySmallSquare;":"\u25AB","emsp;":"\u2003","emsp13;":"\u2004","emsp14;":"\u2005","ENG;":"\u014A","eng;":"\u014B","ensp;":"\u2002","Eogon;":"\u0118","eogon;":"\u0119","Eopf;":"\u{1D53C}","eopf;":"\u{1D556}","epar;":"\u22D5","eparsl;":"\u29E3","eplus;":"\u2A71","epsi;":"\u03B5","Epsilon;":"\u0395","epsilon;":"\u03B5","epsiv;":"\u03F5","eqcirc;":"\u2256","eqcolon;":"\u2255","eqsim;":"\u2242","eqslantgtr;":"\u2A96","eqslantless;":"\u2A95","Equal;":"\u2A75","equals;":"=","EqualTilde;":"\u2242","equest;":"\u225F","Equilibrium;":"\u21CC","equiv;":"\u2261","equivDD;":"\u2A78","eqvparsl;":"\u29E5","erarr;":"\u2971","erDot;":"\u2253","Escr;":"\u2130","escr;":"\u212F","esdot;":"\u2250","Esim;":"\u2A73","esim;":"\u2242","Eta;":"\u0397","eta;":"\u03B7","ETH;":"\xD0",ETH:"\xD0","eth;":"\xF0",eth:"\xF0","Euml;":"\xCB",Euml:"\xCB","euml;":"\xEB",euml:"\xEB","euro;":"\u20AC","excl;":"!","exist;":"\u2203","Exists;":"\u2203","expectation;":"\u2130","ExponentialE;":"\u2147","exponentiale;":"\u2147","fallingdotseq;":"\u2252","Fcy;":"\u0424","fcy;":"\u0444","female;":"\u2640","ffilig;":"\uFB03","fflig;":"\uFB00","ffllig;":"\uFB04","Ffr;":"\u{1D509}","ffr;":"\u{1D523}","filig;":"\uFB01","FilledSmallSquare;":"\u25FC","FilledVerySmallSquare;":"\u25AA","fjlig;":"fj","flat;":"\u266D","fllig;":"\uFB02","fltns;":"\u25B1","fnof;":"\u0192","Fopf;":"\u{1D53D}","fopf;":"\u{1D557}","ForAll;":"\u2200","forall;":"\u2200","fork;":"\u22D4","forkv;":"\u2AD9","Fouriertrf;":"\u2131","fpartint;":"\u2A0D","frac12;":"\xBD",frac12:"\xBD","frac13;":"\u2153","frac14;":"\xBC",frac14:"\xBC","frac15;":"\u2155","frac16;":"\u2159","frac18;":"\u215B","frac23;":"\u2154","frac25;":"\u2156","frac34;":"\xBE",frac34:"\xBE","frac35;":"\u2157","frac38;":"\u215C","frac45;":"\u2158","frac56;":"\u215A","frac58;":"\u215D","frac78;":"\u215E","frasl;":"\u2044","frown;":"\u2322","Fscr;":"\u2131","fscr;":"\u{1D4BB}","gacute;":"\u01F5","Gamma;":"\u0393","gamma;":"\u03B3","Gammad;":"\u03DC","gammad;":"\u03DD","gap;":"\u2A86","Gbreve;":"\u011E","gbreve;":"\u011F","Gcedil;":"\u0122","Gcirc;":"\u011C","gcirc;":"\u011D","Gcy;":"\u0413","gcy;":"\u0433","Gdot;":"\u0120","gdot;":"\u0121","gE;":"\u2267","ge;":"\u2265","gEl;":"\u2A8C","gel;":"\u22DB","geq;":"\u2265","geqq;":"\u2267","geqslant;":"\u2A7E","ges;":"\u2A7E","gescc;":"\u2AA9","gesdot;":"\u2A80","gesdoto;":"\u2A82","gesdotol;":"\u2A84","gesl;":"\u22DB\uFE00","gesles;":"\u2A94","Gfr;":"\u{1D50A}","gfr;":"\u{1D524}","Gg;":"\u22D9","gg;":"\u226B","ggg;":"\u22D9","gimel;":"\u2137","GJcy;":"\u0403","gjcy;":"\u0453","gl;":"\u2277","gla;":"\u2AA5","glE;":"\u2A92","glj;":"\u2AA4","gnap;":"\u2A8A","gnapprox;":"\u2A8A","gnE;":"\u2269","gne;":"\u2A88","gneq;":"\u2A88","gneqq;":"\u2269","gnsim;":"\u22E7","Gopf;":"\u{1D53E}","gopf;":"\u{1D558}","grave;":"`","GreaterEqual;":"\u2265","GreaterEqualLess;":"\u22DB","GreaterFullEqual;":"\u2267","GreaterGreater;":"\u2AA2","GreaterLess;":"\u2277","GreaterSlantEqual;":"\u2A7E","GreaterTilde;":"\u2273","Gscr;":"\u{1D4A2}","gscr;":"\u210A","gsim;":"\u2273","gsime;":"\u2A8E","gsiml;":"\u2A90","GT;":">",GT:">","Gt;":"\u226B","gt;":">",gt:">","gtcc;":"\u2AA7","gtcir;":"\u2A7A","gtdot;":"\u22D7","gtlPar;":"\u2995","gtquest;":"\u2A7C","gtrapprox;":"\u2A86","gtrarr;":"\u2978","gtrdot;":"\u22D7","gtreqless;":"\u22DB","gtreqqless;":"\u2A8C","gtrless;":"\u2277","gtrsim;":"\u2273","gvertneqq;":"\u2269\uFE00","gvnE;":"\u2269\uFE00","Hacek;":"\u02C7","hairsp;":"\u200A","half;":"\xBD","hamilt;":"\u210B","HARDcy;":"\u042A","hardcy;":"\u044A","hArr;":"\u21D4","harr;":"\u2194","harrcir;":"\u2948","harrw;":"\u21AD","Hat;":"^","hbar;":"\u210F","Hcirc;":"\u0124","hcirc;":"\u0125","hearts;":"\u2665","heartsuit;":"\u2665","hellip;":"\u2026","hercon;":"\u22B9","Hfr;":"\u210C","hfr;":"\u{1D525}","HilbertSpace;":"\u210B","hksearow;":"\u2925","hkswarow;":"\u2926","hoarr;":"\u21FF","homtht;":"\u223B","hookleftarrow;":"\u21A9","hookrightarrow;":"\u21AA","Hopf;":"\u210D","hopf;":"\u{1D559}","horbar;":"\u2015","HorizontalLine;":"\u2500","Hscr;":"\u210B","hscr;":"\u{1D4BD}","hslash;":"\u210F","Hstrok;":"\u0126","hstrok;":"\u0127","HumpDownHump;":"\u224E","HumpEqual;":"\u224F","hybull;":"\u2043","hyphen;":"\u2010","Iacute;":"\xCD",Iacute:"\xCD","iacute;":"\xED",iacute:"\xED","ic;":"\u2063","Icirc;":"\xCE",Icirc:"\xCE","icirc;":"\xEE",icirc:"\xEE","Icy;":"\u0418","icy;":"\u0438","Idot;":"\u0130","IEcy;":"\u0415","iecy;":"\u0435","iexcl;":"\xA1",iexcl:"\xA1","iff;":"\u21D4","Ifr;":"\u2111","ifr;":"\u{1D526}","Igrave;":"\xCC",Igrave:"\xCC","igrave;":"\xEC",igrave:"\xEC","ii;":"\u2148","iiiint;":"\u2A0C","iiint;":"\u222D","iinfin;":"\u29DC","iiota;":"\u2129","IJlig;":"\u0132","ijlig;":"\u0133","Im;":"\u2111","Imacr;":"\u012A","imacr;":"\u012B","image;":"\u2111","ImaginaryI;":"\u2148","imagline;":"\u2110","imagpart;":"\u2111","imath;":"\u0131","imof;":"\u22B7","imped;":"\u01B5","Implies;":"\u21D2","in;":"\u2208","incare;":"\u2105","infin;":"\u221E","infintie;":"\u29DD","inodot;":"\u0131","Int;":"\u222C","int;":"\u222B","intcal;":"\u22BA","integers;":"\u2124","Integral;":"\u222B","intercal;":"\u22BA","Intersection;":"\u22C2","intlarhk;":"\u2A17","intprod;":"\u2A3C","InvisibleComma;":"\u2063","InvisibleTimes;":"\u2062","IOcy;":"\u0401","iocy;":"\u0451","Iogon;":"\u012E","iogon;":"\u012F","Iopf;":"\u{1D540}","iopf;":"\u{1D55A}","Iota;":"\u0399","iota;":"\u03B9","iprod;":"\u2A3C","iquest;":"\xBF",iquest:"\xBF","Iscr;":"\u2110","iscr;":"\u{1D4BE}","isin;":"\u2208","isindot;":"\u22F5","isinE;":"\u22F9","isins;":"\u22F4","isinsv;":"\u22F3","isinv;":"\u2208","it;":"\u2062","Itilde;":"\u0128","itilde;":"\u0129","Iukcy;":"\u0406","iukcy;":"\u0456","Iuml;":"\xCF",Iuml:"\xCF","iuml;":"\xEF",iuml:"\xEF","Jcirc;":"\u0134","jcirc;":"\u0135","Jcy;":"\u0419","jcy;":"\u0439","Jfr;":"\u{1D50D}","jfr;":"\u{1D527}","jmath;":"\u0237","Jopf;":"\u{1D541}","jopf;":"\u{1D55B}","Jscr;":"\u{1D4A5}","jscr;":"\u{1D4BF}","Jsercy;":"\u0408","jsercy;":"\u0458","Jukcy;":"\u0404","jukcy;":"\u0454","Kappa;":"\u039A","kappa;":"\u03BA","kappav;":"\u03F0","Kcedil;":"\u0136","kcedil;":"\u0137","Kcy;":"\u041A","kcy;":"\u043A","Kfr;":"\u{1D50E}","kfr;":"\u{1D528}","kgreen;":"\u0138","KHcy;":"\u0425","khcy;":"\u0445","KJcy;":"\u040C","kjcy;":"\u045C","Kopf;":"\u{1D542}","kopf;":"\u{1D55C}","Kscr;":"\u{1D4A6}","kscr;":"\u{1D4C0}","lAarr;":"\u21DA","Lacute;":"\u0139","lacute;":"\u013A","laemptyv;":"\u29B4","lagran;":"\u2112","Lambda;":"\u039B","lambda;":"\u03BB","Lang;":"\u27EA","lang;":"\u27E8","langd;":"\u2991","langle;":"\u27E8","lap;":"\u2A85","Laplacetrf;":"\u2112","laquo;":"\xAB",laquo:"\xAB","Larr;":"\u219E","lArr;":"\u21D0","larr;":"\u2190","larrb;":"\u21E4","larrbfs;":"\u291F","larrfs;":"\u291D","larrhk;":"\u21A9","larrlp;":"\u21AB","larrpl;":"\u2939","larrsim;":"\u2973","larrtl;":"\u21A2","lat;":"\u2AAB","lAtail;":"\u291B","latail;":"\u2919","late;":"\u2AAD","lates;":"\u2AAD\uFE00","lBarr;":"\u290E","lbarr;":"\u290C","lbbrk;":"\u2772","lbrace;":"{","lbrack;":"[","lbrke;":"\u298B","lbrksld;":"\u298F","lbrkslu;":"\u298D","Lcaron;":"\u013D","lcaron;":"\u013E","Lcedil;":"\u013B","lcedil;":"\u013C","lceil;":"\u2308","lcub;":"{","Lcy;":"\u041B","lcy;":"\u043B","ldca;":"\u2936","ldquo;":"\u201C","ldquor;":"\u201E","ldrdhar;":"\u2967","ldrushar;":"\u294B","ldsh;":"\u21B2","lE;":"\u2266","le;":"\u2264","LeftAngleBracket;":"\u27E8","LeftArrow;":"\u2190","Leftarrow;":"\u21D0","leftarrow;":"\u2190","LeftArrowBar;":"\u21E4","LeftArrowRightArrow;":"\u21C6","leftarrowtail;":"\u21A2","LeftCeiling;":"\u2308","LeftDoubleBracket;":"\u27E6","LeftDownTeeVector;":"\u2961","LeftDownVector;":"\u21C3","LeftDownVectorBar;":"\u2959","LeftFloor;":"\u230A","leftharpoondown;":"\u21BD","leftharpoonup;":"\u21BC","leftleftarrows;":"\u21C7","LeftRightArrow;":"\u2194","Leftrightarrow;":"\u21D4","leftrightarrow;":"\u2194","leftrightarrows;":"\u21C6","leftrightharpoons;":"\u21CB","leftrightsquigarrow;":"\u21AD","LeftRightVector;":"\u294E","LeftTee;":"\u22A3","LeftTeeArrow;":"\u21A4","LeftTeeVector;":"\u295A","leftthreetimes;":"\u22CB","LeftTriangle;":"\u22B2","LeftTriangleBar;":"\u29CF","LeftTriangleEqual;":"\u22B4","LeftUpDownVector;":"\u2951","LeftUpTeeVector;":"\u2960","LeftUpVector;":"\u21BF","LeftUpVectorBar;":"\u2958","LeftVector;":"\u21BC","LeftVectorBar;":"\u2952","lEg;":"\u2A8B","leg;":"\u22DA","leq;":"\u2264","leqq;":"\u2266","leqslant;":"\u2A7D","les;":"\u2A7D","lescc;":"\u2AA8","lesdot;":"\u2A7F","lesdoto;":"\u2A81","lesdotor;":"\u2A83","lesg;":"\u22DA\uFE00","lesges;":"\u2A93","lessapprox;":"\u2A85","lessdot;":"\u22D6","lesseqgtr;":"\u22DA","lesseqqgtr;":"\u2A8B","LessEqualGreater;":"\u22DA","LessFullEqual;":"\u2266","LessGreater;":"\u2276","lessgtr;":"\u2276","LessLess;":"\u2AA1","lesssim;":"\u2272","LessSlantEqual;":"\u2A7D","LessTilde;":"\u2272","lfisht;":"\u297C","lfloor;":"\u230A","Lfr;":"\u{1D50F}","lfr;":"\u{1D529}","lg;":"\u2276","lgE;":"\u2A91","lHar;":"\u2962","lhard;":"\u21BD","lharu;":"\u21BC","lharul;":"\u296A","lhblk;":"\u2584","LJcy;":"\u0409","ljcy;":"\u0459","Ll;":"\u22D8","ll;":"\u226A","llarr;":"\u21C7","llcorner;":"\u231E","Lleftarrow;":"\u21DA","llhard;":"\u296B","lltri;":"\u25FA","Lmidot;":"\u013F","lmidot;":"\u0140","lmoust;":"\u23B0","lmoustache;":"\u23B0","lnap;":"\u2A89","lnapprox;":"\u2A89","lnE;":"\u2268","lne;":"\u2A87","lneq;":"\u2A87","lneqq;":"\u2268","lnsim;":"\u22E6","loang;":"\u27EC","loarr;":"\u21FD","lobrk;":"\u27E6","LongLeftArrow;":"\u27F5","Longleftarrow;":"\u27F8","longleftarrow;":"\u27F5","LongLeftRightArrow;":"\u27F7","Longleftrightarrow;":"\u27FA","longleftrightarrow;":"\u27F7","longmapsto;":"\u27FC","LongRightArrow;":"\u27F6","Longrightarrow;":"\u27F9","longrightarrow;":"\u27F6","looparrowleft;":"\u21AB","looparrowright;":"\u21AC","lopar;":"\u2985","Lopf;":"\u{1D543}","lopf;":"\u{1D55D}","loplus;":"\u2A2D","lotimes;":"\u2A34","lowast;":"\u2217","lowbar;":"_","LowerLeftArrow;":"\u2199","LowerRightArrow;":"\u2198","loz;":"\u25CA","lozenge;":"\u25CA","lozf;":"\u29EB","lpar;":"(","lparlt;":"\u2993","lrarr;":"\u21C6","lrcorner;":"\u231F","lrhar;":"\u21CB","lrhard;":"\u296D","lrm;":"\u200E","lrtri;":"\u22BF","lsaquo;":"\u2039","Lscr;":"\u2112","lscr;":"\u{1D4C1}","Lsh;":"\u21B0","lsh;":"\u21B0","lsim;":"\u2272","lsime;":"\u2A8D","lsimg;":"\u2A8F","lsqb;":"[","lsquo;":"\u2018","lsquor;":"\u201A","Lstrok;":"\u0141","lstrok;":"\u0142","LT;":"<",LT:"<","Lt;":"\u226A","lt;":"<",lt:"<","ltcc;":"\u2AA6","ltcir;":"\u2A79","ltdot;":"\u22D6","lthree;":"\u22CB","ltimes;":"\u22C9","ltlarr;":"\u2976","ltquest;":"\u2A7B","ltri;":"\u25C3","ltrie;":"\u22B4","ltrif;":"\u25C2","ltrPar;":"\u2996","lurdshar;":"\u294A","luruhar;":"\u2966","lvertneqq;":"\u2268\uFE00","lvnE;":"\u2268\uFE00","macr;":"\xAF",macr:"\xAF","male;":"\u2642","malt;":"\u2720","maltese;":"\u2720","Map;":"\u2905","map;":"\u21A6","mapsto;":"\u21A6","mapstodown;":"\u21A7","mapstoleft;":"\u21A4","mapstoup;":"\u21A5","marker;":"\u25AE","mcomma;":"\u2A29","Mcy;":"\u041C","mcy;":"\u043C","mdash;":"\u2014","mDDot;":"\u223A","measuredangle;":"\u2221","MediumSpace;":"\u205F","Mellintrf;":"\u2133","Mfr;":"\u{1D510}","mfr;":"\u{1D52A}","mho;":"\u2127","micro;":"\xB5",micro:"\xB5","mid;":"\u2223","midast;":"*","midcir;":"\u2AF0","middot;":"\xB7",middot:"\xB7","minus;":"\u2212","minusb;":"\u229F","minusd;":"\u2238","minusdu;":"\u2A2A","MinusPlus;":"\u2213","mlcp;":"\u2ADB","mldr;":"\u2026","mnplus;":"\u2213","models;":"\u22A7","Mopf;":"\u{1D544}","mopf;":"\u{1D55E}","mp;":"\u2213","Mscr;":"\u2133","mscr;":"\u{1D4C2}","mstpos;":"\u223E","Mu;":"\u039C","mu;":"\u03BC","multimap;":"\u22B8","mumap;":"\u22B8","nabla;":"\u2207","Nacute;":"\u0143","nacute;":"\u0144","nang;":"\u2220\u20D2","nap;":"\u2249","napE;":"\u2A70\u0338","napid;":"\u224B\u0338","napos;":"\u0149","napprox;":"\u2249","natur;":"\u266E","natural;":"\u266E","naturals;":"\u2115","nbsp;":"\xA0",nbsp:"\xA0","nbump;":"\u224E\u0338","nbumpe;":"\u224F\u0338","ncap;":"\u2A43","Ncaron;":"\u0147","ncaron;":"\u0148","Ncedil;":"\u0145","ncedil;":"\u0146","ncong;":"\u2247","ncongdot;":"\u2A6D\u0338","ncup;":"\u2A42","Ncy;":"\u041D","ncy;":"\u043D","ndash;":"\u2013","ne;":"\u2260","nearhk;":"\u2924","neArr;":"\u21D7","nearr;":"\u2197","nearrow;":"\u2197","nedot;":"\u2250\u0338","NegativeMediumSpace;":"\u200B","NegativeThickSpace;":"\u200B","NegativeThinSpace;":"\u200B","NegativeVeryThinSpace;":"\u200B","nequiv;":"\u2262","nesear;":"\u2928","nesim;":"\u2242\u0338","NestedGreaterGreater;":"\u226B","NestedLessLess;":"\u226A","NewLine;":` +`,"nexist;":"\u2204","nexists;":"\u2204","Nfr;":"\u{1D511}","nfr;":"\u{1D52B}","ngE;":"\u2267\u0338","nge;":"\u2271","ngeq;":"\u2271","ngeqq;":"\u2267\u0338","ngeqslant;":"\u2A7E\u0338","nges;":"\u2A7E\u0338","nGg;":"\u22D9\u0338","ngsim;":"\u2275","nGt;":"\u226B\u20D2","ngt;":"\u226F","ngtr;":"\u226F","nGtv;":"\u226B\u0338","nhArr;":"\u21CE","nharr;":"\u21AE","nhpar;":"\u2AF2","ni;":"\u220B","nis;":"\u22FC","nisd;":"\u22FA","niv;":"\u220B","NJcy;":"\u040A","njcy;":"\u045A","nlArr;":"\u21CD","nlarr;":"\u219A","nldr;":"\u2025","nlE;":"\u2266\u0338","nle;":"\u2270","nLeftarrow;":"\u21CD","nleftarrow;":"\u219A","nLeftrightarrow;":"\u21CE","nleftrightarrow;":"\u21AE","nleq;":"\u2270","nleqq;":"\u2266\u0338","nleqslant;":"\u2A7D\u0338","nles;":"\u2A7D\u0338","nless;":"\u226E","nLl;":"\u22D8\u0338","nlsim;":"\u2274","nLt;":"\u226A\u20D2","nlt;":"\u226E","nltri;":"\u22EA","nltrie;":"\u22EC","nLtv;":"\u226A\u0338","nmid;":"\u2224","NoBreak;":"\u2060","NonBreakingSpace;":"\xA0","Nopf;":"\u2115","nopf;":"\u{1D55F}","Not;":"\u2AEC","not;":"\xAC",not:"\xAC","NotCongruent;":"\u2262","NotCupCap;":"\u226D","NotDoubleVerticalBar;":"\u2226","NotElement;":"\u2209","NotEqual;":"\u2260","NotEqualTilde;":"\u2242\u0338","NotExists;":"\u2204","NotGreater;":"\u226F","NotGreaterEqual;":"\u2271","NotGreaterFullEqual;":"\u2267\u0338","NotGreaterGreater;":"\u226B\u0338","NotGreaterLess;":"\u2279","NotGreaterSlantEqual;":"\u2A7E\u0338","NotGreaterTilde;":"\u2275","NotHumpDownHump;":"\u224E\u0338","NotHumpEqual;":"\u224F\u0338","notin;":"\u2209","notindot;":"\u22F5\u0338","notinE;":"\u22F9\u0338","notinva;":"\u2209","notinvb;":"\u22F7","notinvc;":"\u22F6","NotLeftTriangle;":"\u22EA","NotLeftTriangleBar;":"\u29CF\u0338","NotLeftTriangleEqual;":"\u22EC","NotLess;":"\u226E","NotLessEqual;":"\u2270","NotLessGreater;":"\u2278","NotLessLess;":"\u226A\u0338","NotLessSlantEqual;":"\u2A7D\u0338","NotLessTilde;":"\u2274","NotNestedGreaterGreater;":"\u2AA2\u0338","NotNestedLessLess;":"\u2AA1\u0338","notni;":"\u220C","notniva;":"\u220C","notnivb;":"\u22FE","notnivc;":"\u22FD","NotPrecedes;":"\u2280","NotPrecedesEqual;":"\u2AAF\u0338","NotPrecedesSlantEqual;":"\u22E0","NotReverseElement;":"\u220C","NotRightTriangle;":"\u22EB","NotRightTriangleBar;":"\u29D0\u0338","NotRightTriangleEqual;":"\u22ED","NotSquareSubset;":"\u228F\u0338","NotSquareSubsetEqual;":"\u22E2","NotSquareSuperset;":"\u2290\u0338","NotSquareSupersetEqual;":"\u22E3","NotSubset;":"\u2282\u20D2","NotSubsetEqual;":"\u2288","NotSucceeds;":"\u2281","NotSucceedsEqual;":"\u2AB0\u0338","NotSucceedsSlantEqual;":"\u22E1","NotSucceedsTilde;":"\u227F\u0338","NotSuperset;":"\u2283\u20D2","NotSupersetEqual;":"\u2289","NotTilde;":"\u2241","NotTildeEqual;":"\u2244","NotTildeFullEqual;":"\u2247","NotTildeTilde;":"\u2249","NotVerticalBar;":"\u2224","npar;":"\u2226","nparallel;":"\u2226","nparsl;":"\u2AFD\u20E5","npart;":"\u2202\u0338","npolint;":"\u2A14","npr;":"\u2280","nprcue;":"\u22E0","npre;":"\u2AAF\u0338","nprec;":"\u2280","npreceq;":"\u2AAF\u0338","nrArr;":"\u21CF","nrarr;":"\u219B","nrarrc;":"\u2933\u0338","nrarrw;":"\u219D\u0338","nRightarrow;":"\u21CF","nrightarrow;":"\u219B","nrtri;":"\u22EB","nrtrie;":"\u22ED","nsc;":"\u2281","nsccue;":"\u22E1","nsce;":"\u2AB0\u0338","Nscr;":"\u{1D4A9}","nscr;":"\u{1D4C3}","nshortmid;":"\u2224","nshortparallel;":"\u2226","nsim;":"\u2241","nsime;":"\u2244","nsimeq;":"\u2244","nsmid;":"\u2224","nspar;":"\u2226","nsqsube;":"\u22E2","nsqsupe;":"\u22E3","nsub;":"\u2284","nsubE;":"\u2AC5\u0338","nsube;":"\u2288","nsubset;":"\u2282\u20D2","nsubseteq;":"\u2288","nsubseteqq;":"\u2AC5\u0338","nsucc;":"\u2281","nsucceq;":"\u2AB0\u0338","nsup;":"\u2285","nsupE;":"\u2AC6\u0338","nsupe;":"\u2289","nsupset;":"\u2283\u20D2","nsupseteq;":"\u2289","nsupseteqq;":"\u2AC6\u0338","ntgl;":"\u2279","Ntilde;":"\xD1",Ntilde:"\xD1","ntilde;":"\xF1",ntilde:"\xF1","ntlg;":"\u2278","ntriangleleft;":"\u22EA","ntrianglelefteq;":"\u22EC","ntriangleright;":"\u22EB","ntrianglerighteq;":"\u22ED","Nu;":"\u039D","nu;":"\u03BD","num;":"#","numero;":"\u2116","numsp;":"\u2007","nvap;":"\u224D\u20D2","nVDash;":"\u22AF","nVdash;":"\u22AE","nvDash;":"\u22AD","nvdash;":"\u22AC","nvge;":"\u2265\u20D2","nvgt;":">\u20D2","nvHarr;":"\u2904","nvinfin;":"\u29DE","nvlArr;":"\u2902","nvle;":"\u2264\u20D2","nvlt;":"<\u20D2","nvltrie;":"\u22B4\u20D2","nvrArr;":"\u2903","nvrtrie;":"\u22B5\u20D2","nvsim;":"\u223C\u20D2","nwarhk;":"\u2923","nwArr;":"\u21D6","nwarr;":"\u2196","nwarrow;":"\u2196","nwnear;":"\u2927","Oacute;":"\xD3",Oacute:"\xD3","oacute;":"\xF3",oacute:"\xF3","oast;":"\u229B","ocir;":"\u229A","Ocirc;":"\xD4",Ocirc:"\xD4","ocirc;":"\xF4",ocirc:"\xF4","Ocy;":"\u041E","ocy;":"\u043E","odash;":"\u229D","Odblac;":"\u0150","odblac;":"\u0151","odiv;":"\u2A38","odot;":"\u2299","odsold;":"\u29BC","OElig;":"\u0152","oelig;":"\u0153","ofcir;":"\u29BF","Ofr;":"\u{1D512}","ofr;":"\u{1D52C}","ogon;":"\u02DB","Ograve;":"\xD2",Ograve:"\xD2","ograve;":"\xF2",ograve:"\xF2","ogt;":"\u29C1","ohbar;":"\u29B5","ohm;":"\u03A9","oint;":"\u222E","olarr;":"\u21BA","olcir;":"\u29BE","olcross;":"\u29BB","oline;":"\u203E","olt;":"\u29C0","Omacr;":"\u014C","omacr;":"\u014D","Omega;":"\u03A9","omega;":"\u03C9","Omicron;":"\u039F","omicron;":"\u03BF","omid;":"\u29B6","ominus;":"\u2296","Oopf;":"\u{1D546}","oopf;":"\u{1D560}","opar;":"\u29B7","OpenCurlyDoubleQuote;":"\u201C","OpenCurlyQuote;":"\u2018","operp;":"\u29B9","oplus;":"\u2295","Or;":"\u2A54","or;":"\u2228","orarr;":"\u21BB","ord;":"\u2A5D","order;":"\u2134","orderof;":"\u2134","ordf;":"\xAA",ordf:"\xAA","ordm;":"\xBA",ordm:"\xBA","origof;":"\u22B6","oror;":"\u2A56","orslope;":"\u2A57","orv;":"\u2A5B","oS;":"\u24C8","Oscr;":"\u{1D4AA}","oscr;":"\u2134","Oslash;":"\xD8",Oslash:"\xD8","oslash;":"\xF8",oslash:"\xF8","osol;":"\u2298","Otilde;":"\xD5",Otilde:"\xD5","otilde;":"\xF5",otilde:"\xF5","Otimes;":"\u2A37","otimes;":"\u2297","otimesas;":"\u2A36","Ouml;":"\xD6",Ouml:"\xD6","ouml;":"\xF6",ouml:"\xF6","ovbar;":"\u233D","OverBar;":"\u203E","OverBrace;":"\u23DE","OverBracket;":"\u23B4","OverParenthesis;":"\u23DC","par;":"\u2225","para;":"\xB6",para:"\xB6","parallel;":"\u2225","parsim;":"\u2AF3","parsl;":"\u2AFD","part;":"\u2202","PartialD;":"\u2202","Pcy;":"\u041F","pcy;":"\u043F","percnt;":"%","period;":".","permil;":"\u2030","perp;":"\u22A5","pertenk;":"\u2031","Pfr;":"\u{1D513}","pfr;":"\u{1D52D}","Phi;":"\u03A6","phi;":"\u03C6","phiv;":"\u03D5","phmmat;":"\u2133","phone;":"\u260E","Pi;":"\u03A0","pi;":"\u03C0","pitchfork;":"\u22D4","piv;":"\u03D6","planck;":"\u210F","planckh;":"\u210E","plankv;":"\u210F","plus;":"+","plusacir;":"\u2A23","plusb;":"\u229E","pluscir;":"\u2A22","plusdo;":"\u2214","plusdu;":"\u2A25","pluse;":"\u2A72","PlusMinus;":"\xB1","plusmn;":"\xB1",plusmn:"\xB1","plussim;":"\u2A26","plustwo;":"\u2A27","pm;":"\xB1","Poincareplane;":"\u210C","pointint;":"\u2A15","Popf;":"\u2119","popf;":"\u{1D561}","pound;":"\xA3",pound:"\xA3","Pr;":"\u2ABB","pr;":"\u227A","prap;":"\u2AB7","prcue;":"\u227C","prE;":"\u2AB3","pre;":"\u2AAF","prec;":"\u227A","precapprox;":"\u2AB7","preccurlyeq;":"\u227C","Precedes;":"\u227A","PrecedesEqual;":"\u2AAF","PrecedesSlantEqual;":"\u227C","PrecedesTilde;":"\u227E","preceq;":"\u2AAF","precnapprox;":"\u2AB9","precneqq;":"\u2AB5","precnsim;":"\u22E8","precsim;":"\u227E","Prime;":"\u2033","prime;":"\u2032","primes;":"\u2119","prnap;":"\u2AB9","prnE;":"\u2AB5","prnsim;":"\u22E8","prod;":"\u220F","Product;":"\u220F","profalar;":"\u232E","profline;":"\u2312","profsurf;":"\u2313","prop;":"\u221D","Proportion;":"\u2237","Proportional;":"\u221D","propto;":"\u221D","prsim;":"\u227E","prurel;":"\u22B0","Pscr;":"\u{1D4AB}","pscr;":"\u{1D4C5}","Psi;":"\u03A8","psi;":"\u03C8","puncsp;":"\u2008","Qfr;":"\u{1D514}","qfr;":"\u{1D52E}","qint;":"\u2A0C","Qopf;":"\u211A","qopf;":"\u{1D562}","qprime;":"\u2057","Qscr;":"\u{1D4AC}","qscr;":"\u{1D4C6}","quaternions;":"\u210D","quatint;":"\u2A16","quest;":"?","questeq;":"\u225F","QUOT;":'"',QUOT:'"',"quot;":'"',quot:'"',"rAarr;":"\u21DB","race;":"\u223D\u0331","Racute;":"\u0154","racute;":"\u0155","radic;":"\u221A","raemptyv;":"\u29B3","Rang;":"\u27EB","rang;":"\u27E9","rangd;":"\u2992","range;":"\u29A5","rangle;":"\u27E9","raquo;":"\xBB",raquo:"\xBB","Rarr;":"\u21A0","rArr;":"\u21D2","rarr;":"\u2192","rarrap;":"\u2975","rarrb;":"\u21E5","rarrbfs;":"\u2920","rarrc;":"\u2933","rarrfs;":"\u291E","rarrhk;":"\u21AA","rarrlp;":"\u21AC","rarrpl;":"\u2945","rarrsim;":"\u2974","Rarrtl;":"\u2916","rarrtl;":"\u21A3","rarrw;":"\u219D","rAtail;":"\u291C","ratail;":"\u291A","ratio;":"\u2236","rationals;":"\u211A","RBarr;":"\u2910","rBarr;":"\u290F","rbarr;":"\u290D","rbbrk;":"\u2773","rbrace;":"}","rbrack;":"]","rbrke;":"\u298C","rbrksld;":"\u298E","rbrkslu;":"\u2990","Rcaron;":"\u0158","rcaron;":"\u0159","Rcedil;":"\u0156","rcedil;":"\u0157","rceil;":"\u2309","rcub;":"}","Rcy;":"\u0420","rcy;":"\u0440","rdca;":"\u2937","rdldhar;":"\u2969","rdquo;":"\u201D","rdquor;":"\u201D","rdsh;":"\u21B3","Re;":"\u211C","real;":"\u211C","realine;":"\u211B","realpart;":"\u211C","reals;":"\u211D","rect;":"\u25AD","REG;":"\xAE",REG:"\xAE","reg;":"\xAE",reg:"\xAE","ReverseElement;":"\u220B","ReverseEquilibrium;":"\u21CB","ReverseUpEquilibrium;":"\u296F","rfisht;":"\u297D","rfloor;":"\u230B","Rfr;":"\u211C","rfr;":"\u{1D52F}","rHar;":"\u2964","rhard;":"\u21C1","rharu;":"\u21C0","rharul;":"\u296C","Rho;":"\u03A1","rho;":"\u03C1","rhov;":"\u03F1","RightAngleBracket;":"\u27E9","RightArrow;":"\u2192","Rightarrow;":"\u21D2","rightarrow;":"\u2192","RightArrowBar;":"\u21E5","RightArrowLeftArrow;":"\u21C4","rightarrowtail;":"\u21A3","RightCeiling;":"\u2309","RightDoubleBracket;":"\u27E7","RightDownTeeVector;":"\u295D","RightDownVector;":"\u21C2","RightDownVectorBar;":"\u2955","RightFloor;":"\u230B","rightharpoondown;":"\u21C1","rightharpoonup;":"\u21C0","rightleftarrows;":"\u21C4","rightleftharpoons;":"\u21CC","rightrightarrows;":"\u21C9","rightsquigarrow;":"\u219D","RightTee;":"\u22A2","RightTeeArrow;":"\u21A6","RightTeeVector;":"\u295B","rightthreetimes;":"\u22CC","RightTriangle;":"\u22B3","RightTriangleBar;":"\u29D0","RightTriangleEqual;":"\u22B5","RightUpDownVector;":"\u294F","RightUpTeeVector;":"\u295C","RightUpVector;":"\u21BE","RightUpVectorBar;":"\u2954","RightVector;":"\u21C0","RightVectorBar;":"\u2953","ring;":"\u02DA","risingdotseq;":"\u2253","rlarr;":"\u21C4","rlhar;":"\u21CC","rlm;":"\u200F","rmoust;":"\u23B1","rmoustache;":"\u23B1","rnmid;":"\u2AEE","roang;":"\u27ED","roarr;":"\u21FE","robrk;":"\u27E7","ropar;":"\u2986","Ropf;":"\u211D","ropf;":"\u{1D563}","roplus;":"\u2A2E","rotimes;":"\u2A35","RoundImplies;":"\u2970","rpar;":")","rpargt;":"\u2994","rppolint;":"\u2A12","rrarr;":"\u21C9","Rrightarrow;":"\u21DB","rsaquo;":"\u203A","Rscr;":"\u211B","rscr;":"\u{1D4C7}","Rsh;":"\u21B1","rsh;":"\u21B1","rsqb;":"]","rsquo;":"\u2019","rsquor;":"\u2019","rthree;":"\u22CC","rtimes;":"\u22CA","rtri;":"\u25B9","rtrie;":"\u22B5","rtrif;":"\u25B8","rtriltri;":"\u29CE","RuleDelayed;":"\u29F4","ruluhar;":"\u2968","rx;":"\u211E","Sacute;":"\u015A","sacute;":"\u015B","sbquo;":"\u201A","Sc;":"\u2ABC","sc;":"\u227B","scap;":"\u2AB8","Scaron;":"\u0160","scaron;":"\u0161","sccue;":"\u227D","scE;":"\u2AB4","sce;":"\u2AB0","Scedil;":"\u015E","scedil;":"\u015F","Scirc;":"\u015C","scirc;":"\u015D","scnap;":"\u2ABA","scnE;":"\u2AB6","scnsim;":"\u22E9","scpolint;":"\u2A13","scsim;":"\u227F","Scy;":"\u0421","scy;":"\u0441","sdot;":"\u22C5","sdotb;":"\u22A1","sdote;":"\u2A66","searhk;":"\u2925","seArr;":"\u21D8","searr;":"\u2198","searrow;":"\u2198","sect;":"\xA7",sect:"\xA7","semi;":";","seswar;":"\u2929","setminus;":"\u2216","setmn;":"\u2216","sext;":"\u2736","Sfr;":"\u{1D516}","sfr;":"\u{1D530}","sfrown;":"\u2322","sharp;":"\u266F","SHCHcy;":"\u0429","shchcy;":"\u0449","SHcy;":"\u0428","shcy;":"\u0448","ShortDownArrow;":"\u2193","ShortLeftArrow;":"\u2190","shortmid;":"\u2223","shortparallel;":"\u2225","ShortRightArrow;":"\u2192","ShortUpArrow;":"\u2191","shy;":"\xAD",shy:"\xAD","Sigma;":"\u03A3","sigma;":"\u03C3","sigmaf;":"\u03C2","sigmav;":"\u03C2","sim;":"\u223C","simdot;":"\u2A6A","sime;":"\u2243","simeq;":"\u2243","simg;":"\u2A9E","simgE;":"\u2AA0","siml;":"\u2A9D","simlE;":"\u2A9F","simne;":"\u2246","simplus;":"\u2A24","simrarr;":"\u2972","slarr;":"\u2190","SmallCircle;":"\u2218","smallsetminus;":"\u2216","smashp;":"\u2A33","smeparsl;":"\u29E4","smid;":"\u2223","smile;":"\u2323","smt;":"\u2AAA","smte;":"\u2AAC","smtes;":"\u2AAC\uFE00","SOFTcy;":"\u042C","softcy;":"\u044C","sol;":"/","solb;":"\u29C4","solbar;":"\u233F","Sopf;":"\u{1D54A}","sopf;":"\u{1D564}","spades;":"\u2660","spadesuit;":"\u2660","spar;":"\u2225","sqcap;":"\u2293","sqcaps;":"\u2293\uFE00","sqcup;":"\u2294","sqcups;":"\u2294\uFE00","Sqrt;":"\u221A","sqsub;":"\u228F","sqsube;":"\u2291","sqsubset;":"\u228F","sqsubseteq;":"\u2291","sqsup;":"\u2290","sqsupe;":"\u2292","sqsupset;":"\u2290","sqsupseteq;":"\u2292","squ;":"\u25A1","Square;":"\u25A1","square;":"\u25A1","SquareIntersection;":"\u2293","SquareSubset;":"\u228F","SquareSubsetEqual;":"\u2291","SquareSuperset;":"\u2290","SquareSupersetEqual;":"\u2292","SquareUnion;":"\u2294","squarf;":"\u25AA","squf;":"\u25AA","srarr;":"\u2192","Sscr;":"\u{1D4AE}","sscr;":"\u{1D4C8}","ssetmn;":"\u2216","ssmile;":"\u2323","sstarf;":"\u22C6","Star;":"\u22C6","star;":"\u2606","starf;":"\u2605","straightepsilon;":"\u03F5","straightphi;":"\u03D5","strns;":"\xAF","Sub;":"\u22D0","sub;":"\u2282","subdot;":"\u2ABD","subE;":"\u2AC5","sube;":"\u2286","subedot;":"\u2AC3","submult;":"\u2AC1","subnE;":"\u2ACB","subne;":"\u228A","subplus;":"\u2ABF","subrarr;":"\u2979","Subset;":"\u22D0","subset;":"\u2282","subseteq;":"\u2286","subseteqq;":"\u2AC5","SubsetEqual;":"\u2286","subsetneq;":"\u228A","subsetneqq;":"\u2ACB","subsim;":"\u2AC7","subsub;":"\u2AD5","subsup;":"\u2AD3","succ;":"\u227B","succapprox;":"\u2AB8","succcurlyeq;":"\u227D","Succeeds;":"\u227B","SucceedsEqual;":"\u2AB0","SucceedsSlantEqual;":"\u227D","SucceedsTilde;":"\u227F","succeq;":"\u2AB0","succnapprox;":"\u2ABA","succneqq;":"\u2AB6","succnsim;":"\u22E9","succsim;":"\u227F","SuchThat;":"\u220B","Sum;":"\u2211","sum;":"\u2211","sung;":"\u266A","Sup;":"\u22D1","sup;":"\u2283","sup1;":"\xB9",sup1:"\xB9","sup2;":"\xB2",sup2:"\xB2","sup3;":"\xB3",sup3:"\xB3","supdot;":"\u2ABE","supdsub;":"\u2AD8","supE;":"\u2AC6","supe;":"\u2287","supedot;":"\u2AC4","Superset;":"\u2283","SupersetEqual;":"\u2287","suphsol;":"\u27C9","suphsub;":"\u2AD7","suplarr;":"\u297B","supmult;":"\u2AC2","supnE;":"\u2ACC","supne;":"\u228B","supplus;":"\u2AC0","Supset;":"\u22D1","supset;":"\u2283","supseteq;":"\u2287","supseteqq;":"\u2AC6","supsetneq;":"\u228B","supsetneqq;":"\u2ACC","supsim;":"\u2AC8","supsub;":"\u2AD4","supsup;":"\u2AD6","swarhk;":"\u2926","swArr;":"\u21D9","swarr;":"\u2199","swarrow;":"\u2199","swnwar;":"\u292A","szlig;":"\xDF",szlig:"\xDF","Tab;":" ","target;":"\u2316","Tau;":"\u03A4","tau;":"\u03C4","tbrk;":"\u23B4","Tcaron;":"\u0164","tcaron;":"\u0165","Tcedil;":"\u0162","tcedil;":"\u0163","Tcy;":"\u0422","tcy;":"\u0442","tdot;":"\u20DB","telrec;":"\u2315","Tfr;":"\u{1D517}","tfr;":"\u{1D531}","there4;":"\u2234","Therefore;":"\u2234","therefore;":"\u2234","Theta;":"\u0398","theta;":"\u03B8","thetasym;":"\u03D1","thetav;":"\u03D1","thickapprox;":"\u2248","thicksim;":"\u223C","ThickSpace;":"\u205F\u200A","thinsp;":"\u2009","ThinSpace;":"\u2009","thkap;":"\u2248","thksim;":"\u223C","THORN;":"\xDE",THORN:"\xDE","thorn;":"\xFE",thorn:"\xFE","Tilde;":"\u223C","tilde;":"\u02DC","TildeEqual;":"\u2243","TildeFullEqual;":"\u2245","TildeTilde;":"\u2248","times;":"\xD7",times:"\xD7","timesb;":"\u22A0","timesbar;":"\u2A31","timesd;":"\u2A30","tint;":"\u222D","toea;":"\u2928","top;":"\u22A4","topbot;":"\u2336","topcir;":"\u2AF1","Topf;":"\u{1D54B}","topf;":"\u{1D565}","topfork;":"\u2ADA","tosa;":"\u2929","tprime;":"\u2034","TRADE;":"\u2122","trade;":"\u2122","triangle;":"\u25B5","triangledown;":"\u25BF","triangleleft;":"\u25C3","trianglelefteq;":"\u22B4","triangleq;":"\u225C","triangleright;":"\u25B9","trianglerighteq;":"\u22B5","tridot;":"\u25EC","trie;":"\u225C","triminus;":"\u2A3A","TripleDot;":"\u20DB","triplus;":"\u2A39","trisb;":"\u29CD","tritime;":"\u2A3B","trpezium;":"\u23E2","Tscr;":"\u{1D4AF}","tscr;":"\u{1D4C9}","TScy;":"\u0426","tscy;":"\u0446","TSHcy;":"\u040B","tshcy;":"\u045B","Tstrok;":"\u0166","tstrok;":"\u0167","twixt;":"\u226C","twoheadleftarrow;":"\u219E","twoheadrightarrow;":"\u21A0","Uacute;":"\xDA",Uacute:"\xDA","uacute;":"\xFA",uacute:"\xFA","Uarr;":"\u219F","uArr;":"\u21D1","uarr;":"\u2191","Uarrocir;":"\u2949","Ubrcy;":"\u040E","ubrcy;":"\u045E","Ubreve;":"\u016C","ubreve;":"\u016D","Ucirc;":"\xDB",Ucirc:"\xDB","ucirc;":"\xFB",ucirc:"\xFB","Ucy;":"\u0423","ucy;":"\u0443","udarr;":"\u21C5","Udblac;":"\u0170","udblac;":"\u0171","udhar;":"\u296E","ufisht;":"\u297E","Ufr;":"\u{1D518}","ufr;":"\u{1D532}","Ugrave;":"\xD9",Ugrave:"\xD9","ugrave;":"\xF9",ugrave:"\xF9","uHar;":"\u2963","uharl;":"\u21BF","uharr;":"\u21BE","uhblk;":"\u2580","ulcorn;":"\u231C","ulcorner;":"\u231C","ulcrop;":"\u230F","ultri;":"\u25F8","Umacr;":"\u016A","umacr;":"\u016B","uml;":"\xA8",uml:"\xA8","UnderBar;":"_","UnderBrace;":"\u23DF","UnderBracket;":"\u23B5","UnderParenthesis;":"\u23DD","Union;":"\u22C3","UnionPlus;":"\u228E","Uogon;":"\u0172","uogon;":"\u0173","Uopf;":"\u{1D54C}","uopf;":"\u{1D566}","UpArrow;":"\u2191","Uparrow;":"\u21D1","uparrow;":"\u2191","UpArrowBar;":"\u2912","UpArrowDownArrow;":"\u21C5","UpDownArrow;":"\u2195","Updownarrow;":"\u21D5","updownarrow;":"\u2195","UpEquilibrium;":"\u296E","upharpoonleft;":"\u21BF","upharpoonright;":"\u21BE","uplus;":"\u228E","UpperLeftArrow;":"\u2196","UpperRightArrow;":"\u2197","Upsi;":"\u03D2","upsi;":"\u03C5","upsih;":"\u03D2","Upsilon;":"\u03A5","upsilon;":"\u03C5","UpTee;":"\u22A5","UpTeeArrow;":"\u21A5","upuparrows;":"\u21C8","urcorn;":"\u231D","urcorner;":"\u231D","urcrop;":"\u230E","Uring;":"\u016E","uring;":"\u016F","urtri;":"\u25F9","Uscr;":"\u{1D4B0}","uscr;":"\u{1D4CA}","utdot;":"\u22F0","Utilde;":"\u0168","utilde;":"\u0169","utri;":"\u25B5","utrif;":"\u25B4","uuarr;":"\u21C8","Uuml;":"\xDC",Uuml:"\xDC","uuml;":"\xFC",uuml:"\xFC","uwangle;":"\u29A7","vangrt;":"\u299C","varepsilon;":"\u03F5","varkappa;":"\u03F0","varnothing;":"\u2205","varphi;":"\u03D5","varpi;":"\u03D6","varpropto;":"\u221D","vArr;":"\u21D5","varr;":"\u2195","varrho;":"\u03F1","varsigma;":"\u03C2","varsubsetneq;":"\u228A\uFE00","varsubsetneqq;":"\u2ACB\uFE00","varsupsetneq;":"\u228B\uFE00","varsupsetneqq;":"\u2ACC\uFE00","vartheta;":"\u03D1","vartriangleleft;":"\u22B2","vartriangleright;":"\u22B3","Vbar;":"\u2AEB","vBar;":"\u2AE8","vBarv;":"\u2AE9","Vcy;":"\u0412","vcy;":"\u0432","VDash;":"\u22AB","Vdash;":"\u22A9","vDash;":"\u22A8","vdash;":"\u22A2","Vdashl;":"\u2AE6","Vee;":"\u22C1","vee;":"\u2228","veebar;":"\u22BB","veeeq;":"\u225A","vellip;":"\u22EE","Verbar;":"\u2016","verbar;":"|","Vert;":"\u2016","vert;":"|","VerticalBar;":"\u2223","VerticalLine;":"|","VerticalSeparator;":"\u2758","VerticalTilde;":"\u2240","VeryThinSpace;":"\u200A","Vfr;":"\u{1D519}","vfr;":"\u{1D533}","vltri;":"\u22B2","vnsub;":"\u2282\u20D2","vnsup;":"\u2283\u20D2","Vopf;":"\u{1D54D}","vopf;":"\u{1D567}","vprop;":"\u221D","vrtri;":"\u22B3","Vscr;":"\u{1D4B1}","vscr;":"\u{1D4CB}","vsubnE;":"\u2ACB\uFE00","vsubne;":"\u228A\uFE00","vsupnE;":"\u2ACC\uFE00","vsupne;":"\u228B\uFE00","Vvdash;":"\u22AA","vzigzag;":"\u299A","Wcirc;":"\u0174","wcirc;":"\u0175","wedbar;":"\u2A5F","Wedge;":"\u22C0","wedge;":"\u2227","wedgeq;":"\u2259","weierp;":"\u2118","Wfr;":"\u{1D51A}","wfr;":"\u{1D534}","Wopf;":"\u{1D54E}","wopf;":"\u{1D568}","wp;":"\u2118","wr;":"\u2240","wreath;":"\u2240","Wscr;":"\u{1D4B2}","wscr;":"\u{1D4CC}","xcap;":"\u22C2","xcirc;":"\u25EF","xcup;":"\u22C3","xdtri;":"\u25BD","Xfr;":"\u{1D51B}","xfr;":"\u{1D535}","xhArr;":"\u27FA","xharr;":"\u27F7","Xi;":"\u039E","xi;":"\u03BE","xlArr;":"\u27F8","xlarr;":"\u27F5","xmap;":"\u27FC","xnis;":"\u22FB","xodot;":"\u2A00","Xopf;":"\u{1D54F}","xopf;":"\u{1D569}","xoplus;":"\u2A01","xotime;":"\u2A02","xrArr;":"\u27F9","xrarr;":"\u27F6","Xscr;":"\u{1D4B3}","xscr;":"\u{1D4CD}","xsqcup;":"\u2A06","xuplus;":"\u2A04","xutri;":"\u25B3","xvee;":"\u22C1","xwedge;":"\u22C0","Yacute;":"\xDD",Yacute:"\xDD","yacute;":"\xFD",yacute:"\xFD","YAcy;":"\u042F","yacy;":"\u044F","Ycirc;":"\u0176","ycirc;":"\u0177","Ycy;":"\u042B","ycy;":"\u044B","yen;":"\xA5",yen:"\xA5","Yfr;":"\u{1D51C}","yfr;":"\u{1D536}","YIcy;":"\u0407","yicy;":"\u0457","Yopf;":"\u{1D550}","yopf;":"\u{1D56A}","Yscr;":"\u{1D4B4}","yscr;":"\u{1D4CE}","YUcy;":"\u042E","yucy;":"\u044E","Yuml;":"\u0178","yuml;":"\xFF",yuml:"\xFF","Zacute;":"\u0179","zacute;":"\u017A","Zcaron;":"\u017D","zcaron;":"\u017E","Zcy;":"\u0417","zcy;":"\u0437","Zdot;":"\u017B","zdot;":"\u017C","zeetrf;":"\u2128","ZeroWidthSpace;":"\u200B","Zeta;":"\u0396","zeta;":"\u03B6","Zfr;":"\u2128","zfr;":"\u{1D537}","ZHcy;":"\u0416","zhcy;":"\u0436","zigrarr;":"\u21DD","Zopf;":"\u2124","zopf;":"\u{1D56B}","Zscr;":"\u{1D4B5}","zscr;":"\u{1D4CF}","zwj;":"\u200D","zwnj;":"\u200C"}});var M7=b((pq,B7)=>{var I3=require("punycode"),E7=L7();B7.exports=Ly;function Ly(i){if(typeof i!="string")throw new TypeError("Expected a String");return i.replace(/&(#?[^;\W]+;?)/g,function(e,u){var r;if(r=/^#(\d+);?$/.exec(u))return I3.ucs2.encode([parseInt(r[1],10)]);if(r=/^#[Xx]([A-Fa-f0-9]+);?/.exec(u))return I3.ucs2.encode([parseInt(r[1],16)]);var a=/;$/.test(u),s=a?u.replace(/;$/,""):u,n=E7[s]||a&&E7[u];return typeof n=="number"?I3.ucs2.encode([n]):typeof n=="string"?n:"&"+u})}c(Ly,"decode")});var m7=b(b3=>{b3.encode=O7();b3.decode=M7()});var Y7=b((Sq,T7)=>{"use strict";var de={};T7.exports=de;function _7(i){return i<0?-1:1}c(_7,"sign");function Ey(i){return i%1===.5&&!(i&1)?Math.floor(i):Math.round(i)}c(Ey,"evenRound");function rr(i,e){e.unsigned||--i;let u=e.unsigned?0:-Math.pow(2,i),r=Math.pow(2,i)-1,a=e.moduloBitLength?Math.pow(2,e.moduloBitLength):Math.pow(2,i),s=e.moduloBitLength?Math.pow(2,e.moduloBitLength-1):Math.pow(2,i-1);return function(n,l){l||(l={});let d=+n;if(l.enforceRange){if(!Number.isFinite(d))throw new TypeError("Argument is not a finite number");if(d=_7(d)*Math.floor(Math.abs(d)),dr)throw new TypeError("Argument is not in byte range");return d}if(!isNaN(d)&&l.clamp)return d=Ey(d),dr&&(d=r),d;if(!Number.isFinite(d)||d===0)return 0;if(d=_7(d)*Math.floor(Math.abs(d)),d=d%a,!e.unsigned&&d>=s)return d-a;if(e.unsigned){if(d<0)d+=a;else if(d===-0)return 0}return d}}c(rr,"createNumberConversion");de.void=function(){};de.boolean=function(i){return!!i};de.byte=rr(8,{unsigned:!1});de.octet=rr(8,{unsigned:!0});de.short=rr(16,{unsigned:!1});de["unsigned short"]=rr(16,{unsigned:!0});de.long=rr(32,{unsigned:!1});de["unsigned long"]=rr(32,{unsigned:!0});de["long long"]=rr(32,{unsigned:!1,moduloBitLength:64});de["unsigned long long"]=rr(32,{unsigned:!0,moduloBitLength:64});de.double=function(i){let e=+i;if(!Number.isFinite(e))throw new TypeError("Argument is not a finite floating-point value");return e};de["unrestricted double"]=function(i){let e=+i;if(isNaN(e))throw new TypeError("Argument is NaN");return e};de.float=de.double;de["unrestricted float"]=de["unrestricted double"];de.DOMString=function(i,e){return e||(e={}),e.treatNullAsEmptyString&&i===null?"":String(i)};de.ByteString=function(i,e){let u=String(i),r;for(let a=0;(r=u.codePointAt(a))!==void 0;++a)if(r>255)throw new TypeError("Argument is not a valid bytestring");return u};de.USVString=function(i){let e=String(i),u=e.length,r=[];for(let a=0;a57343)r.push(String.fromCodePoint(s));else if(56320<=s&&s<=57343)r.push(String.fromCodePoint(65533));else if(a===u-1)r.push(String.fromCodePoint(65533));else{let n=e.charCodeAt(a+1);if(56320<=n&&n<=57343){let l=s&1023,d=n&1023;r.push(String.fromCodePoint(65536+1024*l+d)),++a}else r.push(String.fromCodePoint(65533))}}return r.join("")};de.Date=function(i,e){if(!(i instanceof Date))throw new TypeError("Argument is not a Date object");if(!isNaN(i))return i};de.RegExp=function(i,e){return i instanceof RegExp||(i=new RegExp(i)),i}});var A7=b((Lq,ir)=>{"use strict";ir.exports.mixin=c(function(e,u){let r=Object.getOwnPropertyNames(u);for(let a=0;a{By.exports=[[[0,44],"disallowed_STD3_valid"],[[45,46],"valid"],[[47,47],"disallowed_STD3_valid"],[[48,57],"valid"],[[58,64],"disallowed_STD3_valid"],[[65,65],"mapped",[97]],[[66,66],"mapped",[98]],[[67,67],"mapped",[99]],[[68,68],"mapped",[100]],[[69,69],"mapped",[101]],[[70,70],"mapped",[102]],[[71,71],"mapped",[103]],[[72,72],"mapped",[104]],[[73,73],"mapped",[105]],[[74,74],"mapped",[106]],[[75,75],"mapped",[107]],[[76,76],"mapped",[108]],[[77,77],"mapped",[109]],[[78,78],"mapped",[110]],[[79,79],"mapped",[111]],[[80,80],"mapped",[112]],[[81,81],"mapped",[113]],[[82,82],"mapped",[114]],[[83,83],"mapped",[115]],[[84,84],"mapped",[116]],[[85,85],"mapped",[117]],[[86,86],"mapped",[118]],[[87,87],"mapped",[119]],[[88,88],"mapped",[120]],[[89,89],"mapped",[121]],[[90,90],"mapped",[122]],[[91,96],"disallowed_STD3_valid"],[[97,122],"valid"],[[123,127],"disallowed_STD3_valid"],[[128,159],"disallowed"],[[160,160],"disallowed_STD3_mapped",[32]],[[161,167],"valid",[],"NV8"],[[168,168],"disallowed_STD3_mapped",[32,776]],[[169,169],"valid",[],"NV8"],[[170,170],"mapped",[97]],[[171,172],"valid",[],"NV8"],[[173,173],"ignored"],[[174,174],"valid",[],"NV8"],[[175,175],"disallowed_STD3_mapped",[32,772]],[[176,177],"valid",[],"NV8"],[[178,178],"mapped",[50]],[[179,179],"mapped",[51]],[[180,180],"disallowed_STD3_mapped",[32,769]],[[181,181],"mapped",[956]],[[182,182],"valid",[],"NV8"],[[183,183],"valid"],[[184,184],"disallowed_STD3_mapped",[32,807]],[[185,185],"mapped",[49]],[[186,186],"mapped",[111]],[[187,187],"valid",[],"NV8"],[[188,188],"mapped",[49,8260,52]],[[189,189],"mapped",[49,8260,50]],[[190,190],"mapped",[51,8260,52]],[[191,191],"valid",[],"NV8"],[[192,192],"mapped",[224]],[[193,193],"mapped",[225]],[[194,194],"mapped",[226]],[[195,195],"mapped",[227]],[[196,196],"mapped",[228]],[[197,197],"mapped",[229]],[[198,198],"mapped",[230]],[[199,199],"mapped",[231]],[[200,200],"mapped",[232]],[[201,201],"mapped",[233]],[[202,202],"mapped",[234]],[[203,203],"mapped",[235]],[[204,204],"mapped",[236]],[[205,205],"mapped",[237]],[[206,206],"mapped",[238]],[[207,207],"mapped",[239]],[[208,208],"mapped",[240]],[[209,209],"mapped",[241]],[[210,210],"mapped",[242]],[[211,211],"mapped",[243]],[[212,212],"mapped",[244]],[[213,213],"mapped",[245]],[[214,214],"mapped",[246]],[[215,215],"valid",[],"NV8"],[[216,216],"mapped",[248]],[[217,217],"mapped",[249]],[[218,218],"mapped",[250]],[[219,219],"mapped",[251]],[[220,220],"mapped",[252]],[[221,221],"mapped",[253]],[[222,222],"mapped",[254]],[[223,223],"deviation",[115,115]],[[224,246],"valid"],[[247,247],"valid",[],"NV8"],[[248,255],"valid"],[[256,256],"mapped",[257]],[[257,257],"valid"],[[258,258],"mapped",[259]],[[259,259],"valid"],[[260,260],"mapped",[261]],[[261,261],"valid"],[[262,262],"mapped",[263]],[[263,263],"valid"],[[264,264],"mapped",[265]],[[265,265],"valid"],[[266,266],"mapped",[267]],[[267,267],"valid"],[[268,268],"mapped",[269]],[[269,269],"valid"],[[270,270],"mapped",[271]],[[271,271],"valid"],[[272,272],"mapped",[273]],[[273,273],"valid"],[[274,274],"mapped",[275]],[[275,275],"valid"],[[276,276],"mapped",[277]],[[277,277],"valid"],[[278,278],"mapped",[279]],[[279,279],"valid"],[[280,280],"mapped",[281]],[[281,281],"valid"],[[282,282],"mapped",[283]],[[283,283],"valid"],[[284,284],"mapped",[285]],[[285,285],"valid"],[[286,286],"mapped",[287]],[[287,287],"valid"],[[288,288],"mapped",[289]],[[289,289],"valid"],[[290,290],"mapped",[291]],[[291,291],"valid"],[[292,292],"mapped",[293]],[[293,293],"valid"],[[294,294],"mapped",[295]],[[295,295],"valid"],[[296,296],"mapped",[297]],[[297,297],"valid"],[[298,298],"mapped",[299]],[[299,299],"valid"],[[300,300],"mapped",[301]],[[301,301],"valid"],[[302,302],"mapped",[303]],[[303,303],"valid"],[[304,304],"mapped",[105,775]],[[305,305],"valid"],[[306,307],"mapped",[105,106]],[[308,308],"mapped",[309]],[[309,309],"valid"],[[310,310],"mapped",[311]],[[311,312],"valid"],[[313,313],"mapped",[314]],[[314,314],"valid"],[[315,315],"mapped",[316]],[[316,316],"valid"],[[317,317],"mapped",[318]],[[318,318],"valid"],[[319,320],"mapped",[108,183]],[[321,321],"mapped",[322]],[[322,322],"valid"],[[323,323],"mapped",[324]],[[324,324],"valid"],[[325,325],"mapped",[326]],[[326,326],"valid"],[[327,327],"mapped",[328]],[[328,328],"valid"],[[329,329],"mapped",[700,110]],[[330,330],"mapped",[331]],[[331,331],"valid"],[[332,332],"mapped",[333]],[[333,333],"valid"],[[334,334],"mapped",[335]],[[335,335],"valid"],[[336,336],"mapped",[337]],[[337,337],"valid"],[[338,338],"mapped",[339]],[[339,339],"valid"],[[340,340],"mapped",[341]],[[341,341],"valid"],[[342,342],"mapped",[343]],[[343,343],"valid"],[[344,344],"mapped",[345]],[[345,345],"valid"],[[346,346],"mapped",[347]],[[347,347],"valid"],[[348,348],"mapped",[349]],[[349,349],"valid"],[[350,350],"mapped",[351]],[[351,351],"valid"],[[352,352],"mapped",[353]],[[353,353],"valid"],[[354,354],"mapped",[355]],[[355,355],"valid"],[[356,356],"mapped",[357]],[[357,357],"valid"],[[358,358],"mapped",[359]],[[359,359],"valid"],[[360,360],"mapped",[361]],[[361,361],"valid"],[[362,362],"mapped",[363]],[[363,363],"valid"],[[364,364],"mapped",[365]],[[365,365],"valid"],[[366,366],"mapped",[367]],[[367,367],"valid"],[[368,368],"mapped",[369]],[[369,369],"valid"],[[370,370],"mapped",[371]],[[371,371],"valid"],[[372,372],"mapped",[373]],[[373,373],"valid"],[[374,374],"mapped",[375]],[[375,375],"valid"],[[376,376],"mapped",[255]],[[377,377],"mapped",[378]],[[378,378],"valid"],[[379,379],"mapped",[380]],[[380,380],"valid"],[[381,381],"mapped",[382]],[[382,382],"valid"],[[383,383],"mapped",[115]],[[384,384],"valid"],[[385,385],"mapped",[595]],[[386,386],"mapped",[387]],[[387,387],"valid"],[[388,388],"mapped",[389]],[[389,389],"valid"],[[390,390],"mapped",[596]],[[391,391],"mapped",[392]],[[392,392],"valid"],[[393,393],"mapped",[598]],[[394,394],"mapped",[599]],[[395,395],"mapped",[396]],[[396,397],"valid"],[[398,398],"mapped",[477]],[[399,399],"mapped",[601]],[[400,400],"mapped",[603]],[[401,401],"mapped",[402]],[[402,402],"valid"],[[403,403],"mapped",[608]],[[404,404],"mapped",[611]],[[405,405],"valid"],[[406,406],"mapped",[617]],[[407,407],"mapped",[616]],[[408,408],"mapped",[409]],[[409,411],"valid"],[[412,412],"mapped",[623]],[[413,413],"mapped",[626]],[[414,414],"valid"],[[415,415],"mapped",[629]],[[416,416],"mapped",[417]],[[417,417],"valid"],[[418,418],"mapped",[419]],[[419,419],"valid"],[[420,420],"mapped",[421]],[[421,421],"valid"],[[422,422],"mapped",[640]],[[423,423],"mapped",[424]],[[424,424],"valid"],[[425,425],"mapped",[643]],[[426,427],"valid"],[[428,428],"mapped",[429]],[[429,429],"valid"],[[430,430],"mapped",[648]],[[431,431],"mapped",[432]],[[432,432],"valid"],[[433,433],"mapped",[650]],[[434,434],"mapped",[651]],[[435,435],"mapped",[436]],[[436,436],"valid"],[[437,437],"mapped",[438]],[[438,438],"valid"],[[439,439],"mapped",[658]],[[440,440],"mapped",[441]],[[441,443],"valid"],[[444,444],"mapped",[445]],[[445,451],"valid"],[[452,454],"mapped",[100,382]],[[455,457],"mapped",[108,106]],[[458,460],"mapped",[110,106]],[[461,461],"mapped",[462]],[[462,462],"valid"],[[463,463],"mapped",[464]],[[464,464],"valid"],[[465,465],"mapped",[466]],[[466,466],"valid"],[[467,467],"mapped",[468]],[[468,468],"valid"],[[469,469],"mapped",[470]],[[470,470],"valid"],[[471,471],"mapped",[472]],[[472,472],"valid"],[[473,473],"mapped",[474]],[[474,474],"valid"],[[475,475],"mapped",[476]],[[476,477],"valid"],[[478,478],"mapped",[479]],[[479,479],"valid"],[[480,480],"mapped",[481]],[[481,481],"valid"],[[482,482],"mapped",[483]],[[483,483],"valid"],[[484,484],"mapped",[485]],[[485,485],"valid"],[[486,486],"mapped",[487]],[[487,487],"valid"],[[488,488],"mapped",[489]],[[489,489],"valid"],[[490,490],"mapped",[491]],[[491,491],"valid"],[[492,492],"mapped",[493]],[[493,493],"valid"],[[494,494],"mapped",[495]],[[495,496],"valid"],[[497,499],"mapped",[100,122]],[[500,500],"mapped",[501]],[[501,501],"valid"],[[502,502],"mapped",[405]],[[503,503],"mapped",[447]],[[504,504],"mapped",[505]],[[505,505],"valid"],[[506,506],"mapped",[507]],[[507,507],"valid"],[[508,508],"mapped",[509]],[[509,509],"valid"],[[510,510],"mapped",[511]],[[511,511],"valid"],[[512,512],"mapped",[513]],[[513,513],"valid"],[[514,514],"mapped",[515]],[[515,515],"valid"],[[516,516],"mapped",[517]],[[517,517],"valid"],[[518,518],"mapped",[519]],[[519,519],"valid"],[[520,520],"mapped",[521]],[[521,521],"valid"],[[522,522],"mapped",[523]],[[523,523],"valid"],[[524,524],"mapped",[525]],[[525,525],"valid"],[[526,526],"mapped",[527]],[[527,527],"valid"],[[528,528],"mapped",[529]],[[529,529],"valid"],[[530,530],"mapped",[531]],[[531,531],"valid"],[[532,532],"mapped",[533]],[[533,533],"valid"],[[534,534],"mapped",[535]],[[535,535],"valid"],[[536,536],"mapped",[537]],[[537,537],"valid"],[[538,538],"mapped",[539]],[[539,539],"valid"],[[540,540],"mapped",[541]],[[541,541],"valid"],[[542,542],"mapped",[543]],[[543,543],"valid"],[[544,544],"mapped",[414]],[[545,545],"valid"],[[546,546],"mapped",[547]],[[547,547],"valid"],[[548,548],"mapped",[549]],[[549,549],"valid"],[[550,550],"mapped",[551]],[[551,551],"valid"],[[552,552],"mapped",[553]],[[553,553],"valid"],[[554,554],"mapped",[555]],[[555,555],"valid"],[[556,556],"mapped",[557]],[[557,557],"valid"],[[558,558],"mapped",[559]],[[559,559],"valid"],[[560,560],"mapped",[561]],[[561,561],"valid"],[[562,562],"mapped",[563]],[[563,563],"valid"],[[564,566],"valid"],[[567,569],"valid"],[[570,570],"mapped",[11365]],[[571,571],"mapped",[572]],[[572,572],"valid"],[[573,573],"mapped",[410]],[[574,574],"mapped",[11366]],[[575,576],"valid"],[[577,577],"mapped",[578]],[[578,578],"valid"],[[579,579],"mapped",[384]],[[580,580],"mapped",[649]],[[581,581],"mapped",[652]],[[582,582],"mapped",[583]],[[583,583],"valid"],[[584,584],"mapped",[585]],[[585,585],"valid"],[[586,586],"mapped",[587]],[[587,587],"valid"],[[588,588],"mapped",[589]],[[589,589],"valid"],[[590,590],"mapped",[591]],[[591,591],"valid"],[[592,680],"valid"],[[681,685],"valid"],[[686,687],"valid"],[[688,688],"mapped",[104]],[[689,689],"mapped",[614]],[[690,690],"mapped",[106]],[[691,691],"mapped",[114]],[[692,692],"mapped",[633]],[[693,693],"mapped",[635]],[[694,694],"mapped",[641]],[[695,695],"mapped",[119]],[[696,696],"mapped",[121]],[[697,705],"valid"],[[706,709],"valid",[],"NV8"],[[710,721],"valid"],[[722,727],"valid",[],"NV8"],[[728,728],"disallowed_STD3_mapped",[32,774]],[[729,729],"disallowed_STD3_mapped",[32,775]],[[730,730],"disallowed_STD3_mapped",[32,778]],[[731,731],"disallowed_STD3_mapped",[32,808]],[[732,732],"disallowed_STD3_mapped",[32,771]],[[733,733],"disallowed_STD3_mapped",[32,779]],[[734,734],"valid",[],"NV8"],[[735,735],"valid",[],"NV8"],[[736,736],"mapped",[611]],[[737,737],"mapped",[108]],[[738,738],"mapped",[115]],[[739,739],"mapped",[120]],[[740,740],"mapped",[661]],[[741,745],"valid",[],"NV8"],[[746,747],"valid",[],"NV8"],[[748,748],"valid"],[[749,749],"valid",[],"NV8"],[[750,750],"valid"],[[751,767],"valid",[],"NV8"],[[768,831],"valid"],[[832,832],"mapped",[768]],[[833,833],"mapped",[769]],[[834,834],"valid"],[[835,835],"mapped",[787]],[[836,836],"mapped",[776,769]],[[837,837],"mapped",[953]],[[838,846],"valid"],[[847,847],"ignored"],[[848,855],"valid"],[[856,860],"valid"],[[861,863],"valid"],[[864,865],"valid"],[[866,866],"valid"],[[867,879],"valid"],[[880,880],"mapped",[881]],[[881,881],"valid"],[[882,882],"mapped",[883]],[[883,883],"valid"],[[884,884],"mapped",[697]],[[885,885],"valid"],[[886,886],"mapped",[887]],[[887,887],"valid"],[[888,889],"disallowed"],[[890,890],"disallowed_STD3_mapped",[32,953]],[[891,893],"valid"],[[894,894],"disallowed_STD3_mapped",[59]],[[895,895],"mapped",[1011]],[[896,899],"disallowed"],[[900,900],"disallowed_STD3_mapped",[32,769]],[[901,901],"disallowed_STD3_mapped",[32,776,769]],[[902,902],"mapped",[940]],[[903,903],"mapped",[183]],[[904,904],"mapped",[941]],[[905,905],"mapped",[942]],[[906,906],"mapped",[943]],[[907,907],"disallowed"],[[908,908],"mapped",[972]],[[909,909],"disallowed"],[[910,910],"mapped",[973]],[[911,911],"mapped",[974]],[[912,912],"valid"],[[913,913],"mapped",[945]],[[914,914],"mapped",[946]],[[915,915],"mapped",[947]],[[916,916],"mapped",[948]],[[917,917],"mapped",[949]],[[918,918],"mapped",[950]],[[919,919],"mapped",[951]],[[920,920],"mapped",[952]],[[921,921],"mapped",[953]],[[922,922],"mapped",[954]],[[923,923],"mapped",[955]],[[924,924],"mapped",[956]],[[925,925],"mapped",[957]],[[926,926],"mapped",[958]],[[927,927],"mapped",[959]],[[928,928],"mapped",[960]],[[929,929],"mapped",[961]],[[930,930],"disallowed"],[[931,931],"mapped",[963]],[[932,932],"mapped",[964]],[[933,933],"mapped",[965]],[[934,934],"mapped",[966]],[[935,935],"mapped",[967]],[[936,936],"mapped",[968]],[[937,937],"mapped",[969]],[[938,938],"mapped",[970]],[[939,939],"mapped",[971]],[[940,961],"valid"],[[962,962],"deviation",[963]],[[963,974],"valid"],[[975,975],"mapped",[983]],[[976,976],"mapped",[946]],[[977,977],"mapped",[952]],[[978,978],"mapped",[965]],[[979,979],"mapped",[973]],[[980,980],"mapped",[971]],[[981,981],"mapped",[966]],[[982,982],"mapped",[960]],[[983,983],"valid"],[[984,984],"mapped",[985]],[[985,985],"valid"],[[986,986],"mapped",[987]],[[987,987],"valid"],[[988,988],"mapped",[989]],[[989,989],"valid"],[[990,990],"mapped",[991]],[[991,991],"valid"],[[992,992],"mapped",[993]],[[993,993],"valid"],[[994,994],"mapped",[995]],[[995,995],"valid"],[[996,996],"mapped",[997]],[[997,997],"valid"],[[998,998],"mapped",[999]],[[999,999],"valid"],[[1e3,1e3],"mapped",[1001]],[[1001,1001],"valid"],[[1002,1002],"mapped",[1003]],[[1003,1003],"valid"],[[1004,1004],"mapped",[1005]],[[1005,1005],"valid"],[[1006,1006],"mapped",[1007]],[[1007,1007],"valid"],[[1008,1008],"mapped",[954]],[[1009,1009],"mapped",[961]],[[1010,1010],"mapped",[963]],[[1011,1011],"valid"],[[1012,1012],"mapped",[952]],[[1013,1013],"mapped",[949]],[[1014,1014],"valid",[],"NV8"],[[1015,1015],"mapped",[1016]],[[1016,1016],"valid"],[[1017,1017],"mapped",[963]],[[1018,1018],"mapped",[1019]],[[1019,1019],"valid"],[[1020,1020],"valid"],[[1021,1021],"mapped",[891]],[[1022,1022],"mapped",[892]],[[1023,1023],"mapped",[893]],[[1024,1024],"mapped",[1104]],[[1025,1025],"mapped",[1105]],[[1026,1026],"mapped",[1106]],[[1027,1027],"mapped",[1107]],[[1028,1028],"mapped",[1108]],[[1029,1029],"mapped",[1109]],[[1030,1030],"mapped",[1110]],[[1031,1031],"mapped",[1111]],[[1032,1032],"mapped",[1112]],[[1033,1033],"mapped",[1113]],[[1034,1034],"mapped",[1114]],[[1035,1035],"mapped",[1115]],[[1036,1036],"mapped",[1116]],[[1037,1037],"mapped",[1117]],[[1038,1038],"mapped",[1118]],[[1039,1039],"mapped",[1119]],[[1040,1040],"mapped",[1072]],[[1041,1041],"mapped",[1073]],[[1042,1042],"mapped",[1074]],[[1043,1043],"mapped",[1075]],[[1044,1044],"mapped",[1076]],[[1045,1045],"mapped",[1077]],[[1046,1046],"mapped",[1078]],[[1047,1047],"mapped",[1079]],[[1048,1048],"mapped",[1080]],[[1049,1049],"mapped",[1081]],[[1050,1050],"mapped",[1082]],[[1051,1051],"mapped",[1083]],[[1052,1052],"mapped",[1084]],[[1053,1053],"mapped",[1085]],[[1054,1054],"mapped",[1086]],[[1055,1055],"mapped",[1087]],[[1056,1056],"mapped",[1088]],[[1057,1057],"mapped",[1089]],[[1058,1058],"mapped",[1090]],[[1059,1059],"mapped",[1091]],[[1060,1060],"mapped",[1092]],[[1061,1061],"mapped",[1093]],[[1062,1062],"mapped",[1094]],[[1063,1063],"mapped",[1095]],[[1064,1064],"mapped",[1096]],[[1065,1065],"mapped",[1097]],[[1066,1066],"mapped",[1098]],[[1067,1067],"mapped",[1099]],[[1068,1068],"mapped",[1100]],[[1069,1069],"mapped",[1101]],[[1070,1070],"mapped",[1102]],[[1071,1071],"mapped",[1103]],[[1072,1103],"valid"],[[1104,1104],"valid"],[[1105,1116],"valid"],[[1117,1117],"valid"],[[1118,1119],"valid"],[[1120,1120],"mapped",[1121]],[[1121,1121],"valid"],[[1122,1122],"mapped",[1123]],[[1123,1123],"valid"],[[1124,1124],"mapped",[1125]],[[1125,1125],"valid"],[[1126,1126],"mapped",[1127]],[[1127,1127],"valid"],[[1128,1128],"mapped",[1129]],[[1129,1129],"valid"],[[1130,1130],"mapped",[1131]],[[1131,1131],"valid"],[[1132,1132],"mapped",[1133]],[[1133,1133],"valid"],[[1134,1134],"mapped",[1135]],[[1135,1135],"valid"],[[1136,1136],"mapped",[1137]],[[1137,1137],"valid"],[[1138,1138],"mapped",[1139]],[[1139,1139],"valid"],[[1140,1140],"mapped",[1141]],[[1141,1141],"valid"],[[1142,1142],"mapped",[1143]],[[1143,1143],"valid"],[[1144,1144],"mapped",[1145]],[[1145,1145],"valid"],[[1146,1146],"mapped",[1147]],[[1147,1147],"valid"],[[1148,1148],"mapped",[1149]],[[1149,1149],"valid"],[[1150,1150],"mapped",[1151]],[[1151,1151],"valid"],[[1152,1152],"mapped",[1153]],[[1153,1153],"valid"],[[1154,1154],"valid",[],"NV8"],[[1155,1158],"valid"],[[1159,1159],"valid"],[[1160,1161],"valid",[],"NV8"],[[1162,1162],"mapped",[1163]],[[1163,1163],"valid"],[[1164,1164],"mapped",[1165]],[[1165,1165],"valid"],[[1166,1166],"mapped",[1167]],[[1167,1167],"valid"],[[1168,1168],"mapped",[1169]],[[1169,1169],"valid"],[[1170,1170],"mapped",[1171]],[[1171,1171],"valid"],[[1172,1172],"mapped",[1173]],[[1173,1173],"valid"],[[1174,1174],"mapped",[1175]],[[1175,1175],"valid"],[[1176,1176],"mapped",[1177]],[[1177,1177],"valid"],[[1178,1178],"mapped",[1179]],[[1179,1179],"valid"],[[1180,1180],"mapped",[1181]],[[1181,1181],"valid"],[[1182,1182],"mapped",[1183]],[[1183,1183],"valid"],[[1184,1184],"mapped",[1185]],[[1185,1185],"valid"],[[1186,1186],"mapped",[1187]],[[1187,1187],"valid"],[[1188,1188],"mapped",[1189]],[[1189,1189],"valid"],[[1190,1190],"mapped",[1191]],[[1191,1191],"valid"],[[1192,1192],"mapped",[1193]],[[1193,1193],"valid"],[[1194,1194],"mapped",[1195]],[[1195,1195],"valid"],[[1196,1196],"mapped",[1197]],[[1197,1197],"valid"],[[1198,1198],"mapped",[1199]],[[1199,1199],"valid"],[[1200,1200],"mapped",[1201]],[[1201,1201],"valid"],[[1202,1202],"mapped",[1203]],[[1203,1203],"valid"],[[1204,1204],"mapped",[1205]],[[1205,1205],"valid"],[[1206,1206],"mapped",[1207]],[[1207,1207],"valid"],[[1208,1208],"mapped",[1209]],[[1209,1209],"valid"],[[1210,1210],"mapped",[1211]],[[1211,1211],"valid"],[[1212,1212],"mapped",[1213]],[[1213,1213],"valid"],[[1214,1214],"mapped",[1215]],[[1215,1215],"valid"],[[1216,1216],"disallowed"],[[1217,1217],"mapped",[1218]],[[1218,1218],"valid"],[[1219,1219],"mapped",[1220]],[[1220,1220],"valid"],[[1221,1221],"mapped",[1222]],[[1222,1222],"valid"],[[1223,1223],"mapped",[1224]],[[1224,1224],"valid"],[[1225,1225],"mapped",[1226]],[[1226,1226],"valid"],[[1227,1227],"mapped",[1228]],[[1228,1228],"valid"],[[1229,1229],"mapped",[1230]],[[1230,1230],"valid"],[[1231,1231],"valid"],[[1232,1232],"mapped",[1233]],[[1233,1233],"valid"],[[1234,1234],"mapped",[1235]],[[1235,1235],"valid"],[[1236,1236],"mapped",[1237]],[[1237,1237],"valid"],[[1238,1238],"mapped",[1239]],[[1239,1239],"valid"],[[1240,1240],"mapped",[1241]],[[1241,1241],"valid"],[[1242,1242],"mapped",[1243]],[[1243,1243],"valid"],[[1244,1244],"mapped",[1245]],[[1245,1245],"valid"],[[1246,1246],"mapped",[1247]],[[1247,1247],"valid"],[[1248,1248],"mapped",[1249]],[[1249,1249],"valid"],[[1250,1250],"mapped",[1251]],[[1251,1251],"valid"],[[1252,1252],"mapped",[1253]],[[1253,1253],"valid"],[[1254,1254],"mapped",[1255]],[[1255,1255],"valid"],[[1256,1256],"mapped",[1257]],[[1257,1257],"valid"],[[1258,1258],"mapped",[1259]],[[1259,1259],"valid"],[[1260,1260],"mapped",[1261]],[[1261,1261],"valid"],[[1262,1262],"mapped",[1263]],[[1263,1263],"valid"],[[1264,1264],"mapped",[1265]],[[1265,1265],"valid"],[[1266,1266],"mapped",[1267]],[[1267,1267],"valid"],[[1268,1268],"mapped",[1269]],[[1269,1269],"valid"],[[1270,1270],"mapped",[1271]],[[1271,1271],"valid"],[[1272,1272],"mapped",[1273]],[[1273,1273],"valid"],[[1274,1274],"mapped",[1275]],[[1275,1275],"valid"],[[1276,1276],"mapped",[1277]],[[1277,1277],"valid"],[[1278,1278],"mapped",[1279]],[[1279,1279],"valid"],[[1280,1280],"mapped",[1281]],[[1281,1281],"valid"],[[1282,1282],"mapped",[1283]],[[1283,1283],"valid"],[[1284,1284],"mapped",[1285]],[[1285,1285],"valid"],[[1286,1286],"mapped",[1287]],[[1287,1287],"valid"],[[1288,1288],"mapped",[1289]],[[1289,1289],"valid"],[[1290,1290],"mapped",[1291]],[[1291,1291],"valid"],[[1292,1292],"mapped",[1293]],[[1293,1293],"valid"],[[1294,1294],"mapped",[1295]],[[1295,1295],"valid"],[[1296,1296],"mapped",[1297]],[[1297,1297],"valid"],[[1298,1298],"mapped",[1299]],[[1299,1299],"valid"],[[1300,1300],"mapped",[1301]],[[1301,1301],"valid"],[[1302,1302],"mapped",[1303]],[[1303,1303],"valid"],[[1304,1304],"mapped",[1305]],[[1305,1305],"valid"],[[1306,1306],"mapped",[1307]],[[1307,1307],"valid"],[[1308,1308],"mapped",[1309]],[[1309,1309],"valid"],[[1310,1310],"mapped",[1311]],[[1311,1311],"valid"],[[1312,1312],"mapped",[1313]],[[1313,1313],"valid"],[[1314,1314],"mapped",[1315]],[[1315,1315],"valid"],[[1316,1316],"mapped",[1317]],[[1317,1317],"valid"],[[1318,1318],"mapped",[1319]],[[1319,1319],"valid"],[[1320,1320],"mapped",[1321]],[[1321,1321],"valid"],[[1322,1322],"mapped",[1323]],[[1323,1323],"valid"],[[1324,1324],"mapped",[1325]],[[1325,1325],"valid"],[[1326,1326],"mapped",[1327]],[[1327,1327],"valid"],[[1328,1328],"disallowed"],[[1329,1329],"mapped",[1377]],[[1330,1330],"mapped",[1378]],[[1331,1331],"mapped",[1379]],[[1332,1332],"mapped",[1380]],[[1333,1333],"mapped",[1381]],[[1334,1334],"mapped",[1382]],[[1335,1335],"mapped",[1383]],[[1336,1336],"mapped",[1384]],[[1337,1337],"mapped",[1385]],[[1338,1338],"mapped",[1386]],[[1339,1339],"mapped",[1387]],[[1340,1340],"mapped",[1388]],[[1341,1341],"mapped",[1389]],[[1342,1342],"mapped",[1390]],[[1343,1343],"mapped",[1391]],[[1344,1344],"mapped",[1392]],[[1345,1345],"mapped",[1393]],[[1346,1346],"mapped",[1394]],[[1347,1347],"mapped",[1395]],[[1348,1348],"mapped",[1396]],[[1349,1349],"mapped",[1397]],[[1350,1350],"mapped",[1398]],[[1351,1351],"mapped",[1399]],[[1352,1352],"mapped",[1400]],[[1353,1353],"mapped",[1401]],[[1354,1354],"mapped",[1402]],[[1355,1355],"mapped",[1403]],[[1356,1356],"mapped",[1404]],[[1357,1357],"mapped",[1405]],[[1358,1358],"mapped",[1406]],[[1359,1359],"mapped",[1407]],[[1360,1360],"mapped",[1408]],[[1361,1361],"mapped",[1409]],[[1362,1362],"mapped",[1410]],[[1363,1363],"mapped",[1411]],[[1364,1364],"mapped",[1412]],[[1365,1365],"mapped",[1413]],[[1366,1366],"mapped",[1414]],[[1367,1368],"disallowed"],[[1369,1369],"valid"],[[1370,1375],"valid",[],"NV8"],[[1376,1376],"disallowed"],[[1377,1414],"valid"],[[1415,1415],"mapped",[1381,1410]],[[1416,1416],"disallowed"],[[1417,1417],"valid",[],"NV8"],[[1418,1418],"valid",[],"NV8"],[[1419,1420],"disallowed"],[[1421,1422],"valid",[],"NV8"],[[1423,1423],"valid",[],"NV8"],[[1424,1424],"disallowed"],[[1425,1441],"valid"],[[1442,1442],"valid"],[[1443,1455],"valid"],[[1456,1465],"valid"],[[1466,1466],"valid"],[[1467,1469],"valid"],[[1470,1470],"valid",[],"NV8"],[[1471,1471],"valid"],[[1472,1472],"valid",[],"NV8"],[[1473,1474],"valid"],[[1475,1475],"valid",[],"NV8"],[[1476,1476],"valid"],[[1477,1477],"valid"],[[1478,1478],"valid",[],"NV8"],[[1479,1479],"valid"],[[1480,1487],"disallowed"],[[1488,1514],"valid"],[[1515,1519],"disallowed"],[[1520,1524],"valid"],[[1525,1535],"disallowed"],[[1536,1539],"disallowed"],[[1540,1540],"disallowed"],[[1541,1541],"disallowed"],[[1542,1546],"valid",[],"NV8"],[[1547,1547],"valid",[],"NV8"],[[1548,1548],"valid",[],"NV8"],[[1549,1551],"valid",[],"NV8"],[[1552,1557],"valid"],[[1558,1562],"valid"],[[1563,1563],"valid",[],"NV8"],[[1564,1564],"disallowed"],[[1565,1565],"disallowed"],[[1566,1566],"valid",[],"NV8"],[[1567,1567],"valid",[],"NV8"],[[1568,1568],"valid"],[[1569,1594],"valid"],[[1595,1599],"valid"],[[1600,1600],"valid",[],"NV8"],[[1601,1618],"valid"],[[1619,1621],"valid"],[[1622,1624],"valid"],[[1625,1630],"valid"],[[1631,1631],"valid"],[[1632,1641],"valid"],[[1642,1645],"valid",[],"NV8"],[[1646,1647],"valid"],[[1648,1652],"valid"],[[1653,1653],"mapped",[1575,1652]],[[1654,1654],"mapped",[1608,1652]],[[1655,1655],"mapped",[1735,1652]],[[1656,1656],"mapped",[1610,1652]],[[1657,1719],"valid"],[[1720,1721],"valid"],[[1722,1726],"valid"],[[1727,1727],"valid"],[[1728,1742],"valid"],[[1743,1743],"valid"],[[1744,1747],"valid"],[[1748,1748],"valid",[],"NV8"],[[1749,1756],"valid"],[[1757,1757],"disallowed"],[[1758,1758],"valid",[],"NV8"],[[1759,1768],"valid"],[[1769,1769],"valid",[],"NV8"],[[1770,1773],"valid"],[[1774,1775],"valid"],[[1776,1785],"valid"],[[1786,1790],"valid"],[[1791,1791],"valid"],[[1792,1805],"valid",[],"NV8"],[[1806,1806],"disallowed"],[[1807,1807],"disallowed"],[[1808,1836],"valid"],[[1837,1839],"valid"],[[1840,1866],"valid"],[[1867,1868],"disallowed"],[[1869,1871],"valid"],[[1872,1901],"valid"],[[1902,1919],"valid"],[[1920,1968],"valid"],[[1969,1969],"valid"],[[1970,1983],"disallowed"],[[1984,2037],"valid"],[[2038,2042],"valid",[],"NV8"],[[2043,2047],"disallowed"],[[2048,2093],"valid"],[[2094,2095],"disallowed"],[[2096,2110],"valid",[],"NV8"],[[2111,2111],"disallowed"],[[2112,2139],"valid"],[[2140,2141],"disallowed"],[[2142,2142],"valid",[],"NV8"],[[2143,2207],"disallowed"],[[2208,2208],"valid"],[[2209,2209],"valid"],[[2210,2220],"valid"],[[2221,2226],"valid"],[[2227,2228],"valid"],[[2229,2274],"disallowed"],[[2275,2275],"valid"],[[2276,2302],"valid"],[[2303,2303],"valid"],[[2304,2304],"valid"],[[2305,2307],"valid"],[[2308,2308],"valid"],[[2309,2361],"valid"],[[2362,2363],"valid"],[[2364,2381],"valid"],[[2382,2382],"valid"],[[2383,2383],"valid"],[[2384,2388],"valid"],[[2389,2389],"valid"],[[2390,2391],"valid"],[[2392,2392],"mapped",[2325,2364]],[[2393,2393],"mapped",[2326,2364]],[[2394,2394],"mapped",[2327,2364]],[[2395,2395],"mapped",[2332,2364]],[[2396,2396],"mapped",[2337,2364]],[[2397,2397],"mapped",[2338,2364]],[[2398,2398],"mapped",[2347,2364]],[[2399,2399],"mapped",[2351,2364]],[[2400,2403],"valid"],[[2404,2405],"valid",[],"NV8"],[[2406,2415],"valid"],[[2416,2416],"valid",[],"NV8"],[[2417,2418],"valid"],[[2419,2423],"valid"],[[2424,2424],"valid"],[[2425,2426],"valid"],[[2427,2428],"valid"],[[2429,2429],"valid"],[[2430,2431],"valid"],[[2432,2432],"valid"],[[2433,2435],"valid"],[[2436,2436],"disallowed"],[[2437,2444],"valid"],[[2445,2446],"disallowed"],[[2447,2448],"valid"],[[2449,2450],"disallowed"],[[2451,2472],"valid"],[[2473,2473],"disallowed"],[[2474,2480],"valid"],[[2481,2481],"disallowed"],[[2482,2482],"valid"],[[2483,2485],"disallowed"],[[2486,2489],"valid"],[[2490,2491],"disallowed"],[[2492,2492],"valid"],[[2493,2493],"valid"],[[2494,2500],"valid"],[[2501,2502],"disallowed"],[[2503,2504],"valid"],[[2505,2506],"disallowed"],[[2507,2509],"valid"],[[2510,2510],"valid"],[[2511,2518],"disallowed"],[[2519,2519],"valid"],[[2520,2523],"disallowed"],[[2524,2524],"mapped",[2465,2492]],[[2525,2525],"mapped",[2466,2492]],[[2526,2526],"disallowed"],[[2527,2527],"mapped",[2479,2492]],[[2528,2531],"valid"],[[2532,2533],"disallowed"],[[2534,2545],"valid"],[[2546,2554],"valid",[],"NV8"],[[2555,2555],"valid",[],"NV8"],[[2556,2560],"disallowed"],[[2561,2561],"valid"],[[2562,2562],"valid"],[[2563,2563],"valid"],[[2564,2564],"disallowed"],[[2565,2570],"valid"],[[2571,2574],"disallowed"],[[2575,2576],"valid"],[[2577,2578],"disallowed"],[[2579,2600],"valid"],[[2601,2601],"disallowed"],[[2602,2608],"valid"],[[2609,2609],"disallowed"],[[2610,2610],"valid"],[[2611,2611],"mapped",[2610,2620]],[[2612,2612],"disallowed"],[[2613,2613],"valid"],[[2614,2614],"mapped",[2616,2620]],[[2615,2615],"disallowed"],[[2616,2617],"valid"],[[2618,2619],"disallowed"],[[2620,2620],"valid"],[[2621,2621],"disallowed"],[[2622,2626],"valid"],[[2627,2630],"disallowed"],[[2631,2632],"valid"],[[2633,2634],"disallowed"],[[2635,2637],"valid"],[[2638,2640],"disallowed"],[[2641,2641],"valid"],[[2642,2648],"disallowed"],[[2649,2649],"mapped",[2582,2620]],[[2650,2650],"mapped",[2583,2620]],[[2651,2651],"mapped",[2588,2620]],[[2652,2652],"valid"],[[2653,2653],"disallowed"],[[2654,2654],"mapped",[2603,2620]],[[2655,2661],"disallowed"],[[2662,2676],"valid"],[[2677,2677],"valid"],[[2678,2688],"disallowed"],[[2689,2691],"valid"],[[2692,2692],"disallowed"],[[2693,2699],"valid"],[[2700,2700],"valid"],[[2701,2701],"valid"],[[2702,2702],"disallowed"],[[2703,2705],"valid"],[[2706,2706],"disallowed"],[[2707,2728],"valid"],[[2729,2729],"disallowed"],[[2730,2736],"valid"],[[2737,2737],"disallowed"],[[2738,2739],"valid"],[[2740,2740],"disallowed"],[[2741,2745],"valid"],[[2746,2747],"disallowed"],[[2748,2757],"valid"],[[2758,2758],"disallowed"],[[2759,2761],"valid"],[[2762,2762],"disallowed"],[[2763,2765],"valid"],[[2766,2767],"disallowed"],[[2768,2768],"valid"],[[2769,2783],"disallowed"],[[2784,2784],"valid"],[[2785,2787],"valid"],[[2788,2789],"disallowed"],[[2790,2799],"valid"],[[2800,2800],"valid",[],"NV8"],[[2801,2801],"valid",[],"NV8"],[[2802,2808],"disallowed"],[[2809,2809],"valid"],[[2810,2816],"disallowed"],[[2817,2819],"valid"],[[2820,2820],"disallowed"],[[2821,2828],"valid"],[[2829,2830],"disallowed"],[[2831,2832],"valid"],[[2833,2834],"disallowed"],[[2835,2856],"valid"],[[2857,2857],"disallowed"],[[2858,2864],"valid"],[[2865,2865],"disallowed"],[[2866,2867],"valid"],[[2868,2868],"disallowed"],[[2869,2869],"valid"],[[2870,2873],"valid"],[[2874,2875],"disallowed"],[[2876,2883],"valid"],[[2884,2884],"valid"],[[2885,2886],"disallowed"],[[2887,2888],"valid"],[[2889,2890],"disallowed"],[[2891,2893],"valid"],[[2894,2901],"disallowed"],[[2902,2903],"valid"],[[2904,2907],"disallowed"],[[2908,2908],"mapped",[2849,2876]],[[2909,2909],"mapped",[2850,2876]],[[2910,2910],"disallowed"],[[2911,2913],"valid"],[[2914,2915],"valid"],[[2916,2917],"disallowed"],[[2918,2927],"valid"],[[2928,2928],"valid",[],"NV8"],[[2929,2929],"valid"],[[2930,2935],"valid",[],"NV8"],[[2936,2945],"disallowed"],[[2946,2947],"valid"],[[2948,2948],"disallowed"],[[2949,2954],"valid"],[[2955,2957],"disallowed"],[[2958,2960],"valid"],[[2961,2961],"disallowed"],[[2962,2965],"valid"],[[2966,2968],"disallowed"],[[2969,2970],"valid"],[[2971,2971],"disallowed"],[[2972,2972],"valid"],[[2973,2973],"disallowed"],[[2974,2975],"valid"],[[2976,2978],"disallowed"],[[2979,2980],"valid"],[[2981,2983],"disallowed"],[[2984,2986],"valid"],[[2987,2989],"disallowed"],[[2990,2997],"valid"],[[2998,2998],"valid"],[[2999,3001],"valid"],[[3002,3005],"disallowed"],[[3006,3010],"valid"],[[3011,3013],"disallowed"],[[3014,3016],"valid"],[[3017,3017],"disallowed"],[[3018,3021],"valid"],[[3022,3023],"disallowed"],[[3024,3024],"valid"],[[3025,3030],"disallowed"],[[3031,3031],"valid"],[[3032,3045],"disallowed"],[[3046,3046],"valid"],[[3047,3055],"valid"],[[3056,3058],"valid",[],"NV8"],[[3059,3066],"valid",[],"NV8"],[[3067,3071],"disallowed"],[[3072,3072],"valid"],[[3073,3075],"valid"],[[3076,3076],"disallowed"],[[3077,3084],"valid"],[[3085,3085],"disallowed"],[[3086,3088],"valid"],[[3089,3089],"disallowed"],[[3090,3112],"valid"],[[3113,3113],"disallowed"],[[3114,3123],"valid"],[[3124,3124],"valid"],[[3125,3129],"valid"],[[3130,3132],"disallowed"],[[3133,3133],"valid"],[[3134,3140],"valid"],[[3141,3141],"disallowed"],[[3142,3144],"valid"],[[3145,3145],"disallowed"],[[3146,3149],"valid"],[[3150,3156],"disallowed"],[[3157,3158],"valid"],[[3159,3159],"disallowed"],[[3160,3161],"valid"],[[3162,3162],"valid"],[[3163,3167],"disallowed"],[[3168,3169],"valid"],[[3170,3171],"valid"],[[3172,3173],"disallowed"],[[3174,3183],"valid"],[[3184,3191],"disallowed"],[[3192,3199],"valid",[],"NV8"],[[3200,3200],"disallowed"],[[3201,3201],"valid"],[[3202,3203],"valid"],[[3204,3204],"disallowed"],[[3205,3212],"valid"],[[3213,3213],"disallowed"],[[3214,3216],"valid"],[[3217,3217],"disallowed"],[[3218,3240],"valid"],[[3241,3241],"disallowed"],[[3242,3251],"valid"],[[3252,3252],"disallowed"],[[3253,3257],"valid"],[[3258,3259],"disallowed"],[[3260,3261],"valid"],[[3262,3268],"valid"],[[3269,3269],"disallowed"],[[3270,3272],"valid"],[[3273,3273],"disallowed"],[[3274,3277],"valid"],[[3278,3284],"disallowed"],[[3285,3286],"valid"],[[3287,3293],"disallowed"],[[3294,3294],"valid"],[[3295,3295],"disallowed"],[[3296,3297],"valid"],[[3298,3299],"valid"],[[3300,3301],"disallowed"],[[3302,3311],"valid"],[[3312,3312],"disallowed"],[[3313,3314],"valid"],[[3315,3328],"disallowed"],[[3329,3329],"valid"],[[3330,3331],"valid"],[[3332,3332],"disallowed"],[[3333,3340],"valid"],[[3341,3341],"disallowed"],[[3342,3344],"valid"],[[3345,3345],"disallowed"],[[3346,3368],"valid"],[[3369,3369],"valid"],[[3370,3385],"valid"],[[3386,3386],"valid"],[[3387,3388],"disallowed"],[[3389,3389],"valid"],[[3390,3395],"valid"],[[3396,3396],"valid"],[[3397,3397],"disallowed"],[[3398,3400],"valid"],[[3401,3401],"disallowed"],[[3402,3405],"valid"],[[3406,3406],"valid"],[[3407,3414],"disallowed"],[[3415,3415],"valid"],[[3416,3422],"disallowed"],[[3423,3423],"valid"],[[3424,3425],"valid"],[[3426,3427],"valid"],[[3428,3429],"disallowed"],[[3430,3439],"valid"],[[3440,3445],"valid",[],"NV8"],[[3446,3448],"disallowed"],[[3449,3449],"valid",[],"NV8"],[[3450,3455],"valid"],[[3456,3457],"disallowed"],[[3458,3459],"valid"],[[3460,3460],"disallowed"],[[3461,3478],"valid"],[[3479,3481],"disallowed"],[[3482,3505],"valid"],[[3506,3506],"disallowed"],[[3507,3515],"valid"],[[3516,3516],"disallowed"],[[3517,3517],"valid"],[[3518,3519],"disallowed"],[[3520,3526],"valid"],[[3527,3529],"disallowed"],[[3530,3530],"valid"],[[3531,3534],"disallowed"],[[3535,3540],"valid"],[[3541,3541],"disallowed"],[[3542,3542],"valid"],[[3543,3543],"disallowed"],[[3544,3551],"valid"],[[3552,3557],"disallowed"],[[3558,3567],"valid"],[[3568,3569],"disallowed"],[[3570,3571],"valid"],[[3572,3572],"valid",[],"NV8"],[[3573,3584],"disallowed"],[[3585,3634],"valid"],[[3635,3635],"mapped",[3661,3634]],[[3636,3642],"valid"],[[3643,3646],"disallowed"],[[3647,3647],"valid",[],"NV8"],[[3648,3662],"valid"],[[3663,3663],"valid",[],"NV8"],[[3664,3673],"valid"],[[3674,3675],"valid",[],"NV8"],[[3676,3712],"disallowed"],[[3713,3714],"valid"],[[3715,3715],"disallowed"],[[3716,3716],"valid"],[[3717,3718],"disallowed"],[[3719,3720],"valid"],[[3721,3721],"disallowed"],[[3722,3722],"valid"],[[3723,3724],"disallowed"],[[3725,3725],"valid"],[[3726,3731],"disallowed"],[[3732,3735],"valid"],[[3736,3736],"disallowed"],[[3737,3743],"valid"],[[3744,3744],"disallowed"],[[3745,3747],"valid"],[[3748,3748],"disallowed"],[[3749,3749],"valid"],[[3750,3750],"disallowed"],[[3751,3751],"valid"],[[3752,3753],"disallowed"],[[3754,3755],"valid"],[[3756,3756],"disallowed"],[[3757,3762],"valid"],[[3763,3763],"mapped",[3789,3762]],[[3764,3769],"valid"],[[3770,3770],"disallowed"],[[3771,3773],"valid"],[[3774,3775],"disallowed"],[[3776,3780],"valid"],[[3781,3781],"disallowed"],[[3782,3782],"valid"],[[3783,3783],"disallowed"],[[3784,3789],"valid"],[[3790,3791],"disallowed"],[[3792,3801],"valid"],[[3802,3803],"disallowed"],[[3804,3804],"mapped",[3755,3737]],[[3805,3805],"mapped",[3755,3745]],[[3806,3807],"valid"],[[3808,3839],"disallowed"],[[3840,3840],"valid"],[[3841,3850],"valid",[],"NV8"],[[3851,3851],"valid"],[[3852,3852],"mapped",[3851]],[[3853,3863],"valid",[],"NV8"],[[3864,3865],"valid"],[[3866,3871],"valid",[],"NV8"],[[3872,3881],"valid"],[[3882,3892],"valid",[],"NV8"],[[3893,3893],"valid"],[[3894,3894],"valid",[],"NV8"],[[3895,3895],"valid"],[[3896,3896],"valid",[],"NV8"],[[3897,3897],"valid"],[[3898,3901],"valid",[],"NV8"],[[3902,3906],"valid"],[[3907,3907],"mapped",[3906,4023]],[[3908,3911],"valid"],[[3912,3912],"disallowed"],[[3913,3916],"valid"],[[3917,3917],"mapped",[3916,4023]],[[3918,3921],"valid"],[[3922,3922],"mapped",[3921,4023]],[[3923,3926],"valid"],[[3927,3927],"mapped",[3926,4023]],[[3928,3931],"valid"],[[3932,3932],"mapped",[3931,4023]],[[3933,3944],"valid"],[[3945,3945],"mapped",[3904,4021]],[[3946,3946],"valid"],[[3947,3948],"valid"],[[3949,3952],"disallowed"],[[3953,3954],"valid"],[[3955,3955],"mapped",[3953,3954]],[[3956,3956],"valid"],[[3957,3957],"mapped",[3953,3956]],[[3958,3958],"mapped",[4018,3968]],[[3959,3959],"mapped",[4018,3953,3968]],[[3960,3960],"mapped",[4019,3968]],[[3961,3961],"mapped",[4019,3953,3968]],[[3962,3968],"valid"],[[3969,3969],"mapped",[3953,3968]],[[3970,3972],"valid"],[[3973,3973],"valid",[],"NV8"],[[3974,3979],"valid"],[[3980,3983],"valid"],[[3984,3986],"valid"],[[3987,3987],"mapped",[3986,4023]],[[3988,3989],"valid"],[[3990,3990],"valid"],[[3991,3991],"valid"],[[3992,3992],"disallowed"],[[3993,3996],"valid"],[[3997,3997],"mapped",[3996,4023]],[[3998,4001],"valid"],[[4002,4002],"mapped",[4001,4023]],[[4003,4006],"valid"],[[4007,4007],"mapped",[4006,4023]],[[4008,4011],"valid"],[[4012,4012],"mapped",[4011,4023]],[[4013,4013],"valid"],[[4014,4016],"valid"],[[4017,4023],"valid"],[[4024,4024],"valid"],[[4025,4025],"mapped",[3984,4021]],[[4026,4028],"valid"],[[4029,4029],"disallowed"],[[4030,4037],"valid",[],"NV8"],[[4038,4038],"valid"],[[4039,4044],"valid",[],"NV8"],[[4045,4045],"disallowed"],[[4046,4046],"valid",[],"NV8"],[[4047,4047],"valid",[],"NV8"],[[4048,4049],"valid",[],"NV8"],[[4050,4052],"valid",[],"NV8"],[[4053,4056],"valid",[],"NV8"],[[4057,4058],"valid",[],"NV8"],[[4059,4095],"disallowed"],[[4096,4129],"valid"],[[4130,4130],"valid"],[[4131,4135],"valid"],[[4136,4136],"valid"],[[4137,4138],"valid"],[[4139,4139],"valid"],[[4140,4146],"valid"],[[4147,4149],"valid"],[[4150,4153],"valid"],[[4154,4159],"valid"],[[4160,4169],"valid"],[[4170,4175],"valid",[],"NV8"],[[4176,4185],"valid"],[[4186,4249],"valid"],[[4250,4253],"valid"],[[4254,4255],"valid",[],"NV8"],[[4256,4293],"disallowed"],[[4294,4294],"disallowed"],[[4295,4295],"mapped",[11559]],[[4296,4300],"disallowed"],[[4301,4301],"mapped",[11565]],[[4302,4303],"disallowed"],[[4304,4342],"valid"],[[4343,4344],"valid"],[[4345,4346],"valid"],[[4347,4347],"valid",[],"NV8"],[[4348,4348],"mapped",[4316]],[[4349,4351],"valid"],[[4352,4441],"valid",[],"NV8"],[[4442,4446],"valid",[],"NV8"],[[4447,4448],"disallowed"],[[4449,4514],"valid",[],"NV8"],[[4515,4519],"valid",[],"NV8"],[[4520,4601],"valid",[],"NV8"],[[4602,4607],"valid",[],"NV8"],[[4608,4614],"valid"],[[4615,4615],"valid"],[[4616,4678],"valid"],[[4679,4679],"valid"],[[4680,4680],"valid"],[[4681,4681],"disallowed"],[[4682,4685],"valid"],[[4686,4687],"disallowed"],[[4688,4694],"valid"],[[4695,4695],"disallowed"],[[4696,4696],"valid"],[[4697,4697],"disallowed"],[[4698,4701],"valid"],[[4702,4703],"disallowed"],[[4704,4742],"valid"],[[4743,4743],"valid"],[[4744,4744],"valid"],[[4745,4745],"disallowed"],[[4746,4749],"valid"],[[4750,4751],"disallowed"],[[4752,4782],"valid"],[[4783,4783],"valid"],[[4784,4784],"valid"],[[4785,4785],"disallowed"],[[4786,4789],"valid"],[[4790,4791],"disallowed"],[[4792,4798],"valid"],[[4799,4799],"disallowed"],[[4800,4800],"valid"],[[4801,4801],"disallowed"],[[4802,4805],"valid"],[[4806,4807],"disallowed"],[[4808,4814],"valid"],[[4815,4815],"valid"],[[4816,4822],"valid"],[[4823,4823],"disallowed"],[[4824,4846],"valid"],[[4847,4847],"valid"],[[4848,4878],"valid"],[[4879,4879],"valid"],[[4880,4880],"valid"],[[4881,4881],"disallowed"],[[4882,4885],"valid"],[[4886,4887],"disallowed"],[[4888,4894],"valid"],[[4895,4895],"valid"],[[4896,4934],"valid"],[[4935,4935],"valid"],[[4936,4954],"valid"],[[4955,4956],"disallowed"],[[4957,4958],"valid"],[[4959,4959],"valid"],[[4960,4960],"valid",[],"NV8"],[[4961,4988],"valid",[],"NV8"],[[4989,4991],"disallowed"],[[4992,5007],"valid"],[[5008,5017],"valid",[],"NV8"],[[5018,5023],"disallowed"],[[5024,5108],"valid"],[[5109,5109],"valid"],[[5110,5111],"disallowed"],[[5112,5112],"mapped",[5104]],[[5113,5113],"mapped",[5105]],[[5114,5114],"mapped",[5106]],[[5115,5115],"mapped",[5107]],[[5116,5116],"mapped",[5108]],[[5117,5117],"mapped",[5109]],[[5118,5119],"disallowed"],[[5120,5120],"valid",[],"NV8"],[[5121,5740],"valid"],[[5741,5742],"valid",[],"NV8"],[[5743,5750],"valid"],[[5751,5759],"valid"],[[5760,5760],"disallowed"],[[5761,5786],"valid"],[[5787,5788],"valid",[],"NV8"],[[5789,5791],"disallowed"],[[5792,5866],"valid"],[[5867,5872],"valid",[],"NV8"],[[5873,5880],"valid"],[[5881,5887],"disallowed"],[[5888,5900],"valid"],[[5901,5901],"disallowed"],[[5902,5908],"valid"],[[5909,5919],"disallowed"],[[5920,5940],"valid"],[[5941,5942],"valid",[],"NV8"],[[5943,5951],"disallowed"],[[5952,5971],"valid"],[[5972,5983],"disallowed"],[[5984,5996],"valid"],[[5997,5997],"disallowed"],[[5998,6e3],"valid"],[[6001,6001],"disallowed"],[[6002,6003],"valid"],[[6004,6015],"disallowed"],[[6016,6067],"valid"],[[6068,6069],"disallowed"],[[6070,6099],"valid"],[[6100,6102],"valid",[],"NV8"],[[6103,6103],"valid"],[[6104,6107],"valid",[],"NV8"],[[6108,6108],"valid"],[[6109,6109],"valid"],[[6110,6111],"disallowed"],[[6112,6121],"valid"],[[6122,6127],"disallowed"],[[6128,6137],"valid",[],"NV8"],[[6138,6143],"disallowed"],[[6144,6149],"valid",[],"NV8"],[[6150,6150],"disallowed"],[[6151,6154],"valid",[],"NV8"],[[6155,6157],"ignored"],[[6158,6158],"disallowed"],[[6159,6159],"disallowed"],[[6160,6169],"valid"],[[6170,6175],"disallowed"],[[6176,6263],"valid"],[[6264,6271],"disallowed"],[[6272,6313],"valid"],[[6314,6314],"valid"],[[6315,6319],"disallowed"],[[6320,6389],"valid"],[[6390,6399],"disallowed"],[[6400,6428],"valid"],[[6429,6430],"valid"],[[6431,6431],"disallowed"],[[6432,6443],"valid"],[[6444,6447],"disallowed"],[[6448,6459],"valid"],[[6460,6463],"disallowed"],[[6464,6464],"valid",[],"NV8"],[[6465,6467],"disallowed"],[[6468,6469],"valid",[],"NV8"],[[6470,6509],"valid"],[[6510,6511],"disallowed"],[[6512,6516],"valid"],[[6517,6527],"disallowed"],[[6528,6569],"valid"],[[6570,6571],"valid"],[[6572,6575],"disallowed"],[[6576,6601],"valid"],[[6602,6607],"disallowed"],[[6608,6617],"valid"],[[6618,6618],"valid",[],"XV8"],[[6619,6621],"disallowed"],[[6622,6623],"valid",[],"NV8"],[[6624,6655],"valid",[],"NV8"],[[6656,6683],"valid"],[[6684,6685],"disallowed"],[[6686,6687],"valid",[],"NV8"],[[6688,6750],"valid"],[[6751,6751],"disallowed"],[[6752,6780],"valid"],[[6781,6782],"disallowed"],[[6783,6793],"valid"],[[6794,6799],"disallowed"],[[6800,6809],"valid"],[[6810,6815],"disallowed"],[[6816,6822],"valid",[],"NV8"],[[6823,6823],"valid"],[[6824,6829],"valid",[],"NV8"],[[6830,6831],"disallowed"],[[6832,6845],"valid"],[[6846,6846],"valid",[],"NV8"],[[6847,6911],"disallowed"],[[6912,6987],"valid"],[[6988,6991],"disallowed"],[[6992,7001],"valid"],[[7002,7018],"valid",[],"NV8"],[[7019,7027],"valid"],[[7028,7036],"valid",[],"NV8"],[[7037,7039],"disallowed"],[[7040,7082],"valid"],[[7083,7085],"valid"],[[7086,7097],"valid"],[[7098,7103],"valid"],[[7104,7155],"valid"],[[7156,7163],"disallowed"],[[7164,7167],"valid",[],"NV8"],[[7168,7223],"valid"],[[7224,7226],"disallowed"],[[7227,7231],"valid",[],"NV8"],[[7232,7241],"valid"],[[7242,7244],"disallowed"],[[7245,7293],"valid"],[[7294,7295],"valid",[],"NV8"],[[7296,7359],"disallowed"],[[7360,7367],"valid",[],"NV8"],[[7368,7375],"disallowed"],[[7376,7378],"valid"],[[7379,7379],"valid",[],"NV8"],[[7380,7410],"valid"],[[7411,7414],"valid"],[[7415,7415],"disallowed"],[[7416,7417],"valid"],[[7418,7423],"disallowed"],[[7424,7467],"valid"],[[7468,7468],"mapped",[97]],[[7469,7469],"mapped",[230]],[[7470,7470],"mapped",[98]],[[7471,7471],"valid"],[[7472,7472],"mapped",[100]],[[7473,7473],"mapped",[101]],[[7474,7474],"mapped",[477]],[[7475,7475],"mapped",[103]],[[7476,7476],"mapped",[104]],[[7477,7477],"mapped",[105]],[[7478,7478],"mapped",[106]],[[7479,7479],"mapped",[107]],[[7480,7480],"mapped",[108]],[[7481,7481],"mapped",[109]],[[7482,7482],"mapped",[110]],[[7483,7483],"valid"],[[7484,7484],"mapped",[111]],[[7485,7485],"mapped",[547]],[[7486,7486],"mapped",[112]],[[7487,7487],"mapped",[114]],[[7488,7488],"mapped",[116]],[[7489,7489],"mapped",[117]],[[7490,7490],"mapped",[119]],[[7491,7491],"mapped",[97]],[[7492,7492],"mapped",[592]],[[7493,7493],"mapped",[593]],[[7494,7494],"mapped",[7426]],[[7495,7495],"mapped",[98]],[[7496,7496],"mapped",[100]],[[7497,7497],"mapped",[101]],[[7498,7498],"mapped",[601]],[[7499,7499],"mapped",[603]],[[7500,7500],"mapped",[604]],[[7501,7501],"mapped",[103]],[[7502,7502],"valid"],[[7503,7503],"mapped",[107]],[[7504,7504],"mapped",[109]],[[7505,7505],"mapped",[331]],[[7506,7506],"mapped",[111]],[[7507,7507],"mapped",[596]],[[7508,7508],"mapped",[7446]],[[7509,7509],"mapped",[7447]],[[7510,7510],"mapped",[112]],[[7511,7511],"mapped",[116]],[[7512,7512],"mapped",[117]],[[7513,7513],"mapped",[7453]],[[7514,7514],"mapped",[623]],[[7515,7515],"mapped",[118]],[[7516,7516],"mapped",[7461]],[[7517,7517],"mapped",[946]],[[7518,7518],"mapped",[947]],[[7519,7519],"mapped",[948]],[[7520,7520],"mapped",[966]],[[7521,7521],"mapped",[967]],[[7522,7522],"mapped",[105]],[[7523,7523],"mapped",[114]],[[7524,7524],"mapped",[117]],[[7525,7525],"mapped",[118]],[[7526,7526],"mapped",[946]],[[7527,7527],"mapped",[947]],[[7528,7528],"mapped",[961]],[[7529,7529],"mapped",[966]],[[7530,7530],"mapped",[967]],[[7531,7531],"valid"],[[7532,7543],"valid"],[[7544,7544],"mapped",[1085]],[[7545,7578],"valid"],[[7579,7579],"mapped",[594]],[[7580,7580],"mapped",[99]],[[7581,7581],"mapped",[597]],[[7582,7582],"mapped",[240]],[[7583,7583],"mapped",[604]],[[7584,7584],"mapped",[102]],[[7585,7585],"mapped",[607]],[[7586,7586],"mapped",[609]],[[7587,7587],"mapped",[613]],[[7588,7588],"mapped",[616]],[[7589,7589],"mapped",[617]],[[7590,7590],"mapped",[618]],[[7591,7591],"mapped",[7547]],[[7592,7592],"mapped",[669]],[[7593,7593],"mapped",[621]],[[7594,7594],"mapped",[7557]],[[7595,7595],"mapped",[671]],[[7596,7596],"mapped",[625]],[[7597,7597],"mapped",[624]],[[7598,7598],"mapped",[626]],[[7599,7599],"mapped",[627]],[[7600,7600],"mapped",[628]],[[7601,7601],"mapped",[629]],[[7602,7602],"mapped",[632]],[[7603,7603],"mapped",[642]],[[7604,7604],"mapped",[643]],[[7605,7605],"mapped",[427]],[[7606,7606],"mapped",[649]],[[7607,7607],"mapped",[650]],[[7608,7608],"mapped",[7452]],[[7609,7609],"mapped",[651]],[[7610,7610],"mapped",[652]],[[7611,7611],"mapped",[122]],[[7612,7612],"mapped",[656]],[[7613,7613],"mapped",[657]],[[7614,7614],"mapped",[658]],[[7615,7615],"mapped",[952]],[[7616,7619],"valid"],[[7620,7626],"valid"],[[7627,7654],"valid"],[[7655,7669],"valid"],[[7670,7675],"disallowed"],[[7676,7676],"valid"],[[7677,7677],"valid"],[[7678,7679],"valid"],[[7680,7680],"mapped",[7681]],[[7681,7681],"valid"],[[7682,7682],"mapped",[7683]],[[7683,7683],"valid"],[[7684,7684],"mapped",[7685]],[[7685,7685],"valid"],[[7686,7686],"mapped",[7687]],[[7687,7687],"valid"],[[7688,7688],"mapped",[7689]],[[7689,7689],"valid"],[[7690,7690],"mapped",[7691]],[[7691,7691],"valid"],[[7692,7692],"mapped",[7693]],[[7693,7693],"valid"],[[7694,7694],"mapped",[7695]],[[7695,7695],"valid"],[[7696,7696],"mapped",[7697]],[[7697,7697],"valid"],[[7698,7698],"mapped",[7699]],[[7699,7699],"valid"],[[7700,7700],"mapped",[7701]],[[7701,7701],"valid"],[[7702,7702],"mapped",[7703]],[[7703,7703],"valid"],[[7704,7704],"mapped",[7705]],[[7705,7705],"valid"],[[7706,7706],"mapped",[7707]],[[7707,7707],"valid"],[[7708,7708],"mapped",[7709]],[[7709,7709],"valid"],[[7710,7710],"mapped",[7711]],[[7711,7711],"valid"],[[7712,7712],"mapped",[7713]],[[7713,7713],"valid"],[[7714,7714],"mapped",[7715]],[[7715,7715],"valid"],[[7716,7716],"mapped",[7717]],[[7717,7717],"valid"],[[7718,7718],"mapped",[7719]],[[7719,7719],"valid"],[[7720,7720],"mapped",[7721]],[[7721,7721],"valid"],[[7722,7722],"mapped",[7723]],[[7723,7723],"valid"],[[7724,7724],"mapped",[7725]],[[7725,7725],"valid"],[[7726,7726],"mapped",[7727]],[[7727,7727],"valid"],[[7728,7728],"mapped",[7729]],[[7729,7729],"valid"],[[7730,7730],"mapped",[7731]],[[7731,7731],"valid"],[[7732,7732],"mapped",[7733]],[[7733,7733],"valid"],[[7734,7734],"mapped",[7735]],[[7735,7735],"valid"],[[7736,7736],"mapped",[7737]],[[7737,7737],"valid"],[[7738,7738],"mapped",[7739]],[[7739,7739],"valid"],[[7740,7740],"mapped",[7741]],[[7741,7741],"valid"],[[7742,7742],"mapped",[7743]],[[7743,7743],"valid"],[[7744,7744],"mapped",[7745]],[[7745,7745],"valid"],[[7746,7746],"mapped",[7747]],[[7747,7747],"valid"],[[7748,7748],"mapped",[7749]],[[7749,7749],"valid"],[[7750,7750],"mapped",[7751]],[[7751,7751],"valid"],[[7752,7752],"mapped",[7753]],[[7753,7753],"valid"],[[7754,7754],"mapped",[7755]],[[7755,7755],"valid"],[[7756,7756],"mapped",[7757]],[[7757,7757],"valid"],[[7758,7758],"mapped",[7759]],[[7759,7759],"valid"],[[7760,7760],"mapped",[7761]],[[7761,7761],"valid"],[[7762,7762],"mapped",[7763]],[[7763,7763],"valid"],[[7764,7764],"mapped",[7765]],[[7765,7765],"valid"],[[7766,7766],"mapped",[7767]],[[7767,7767],"valid"],[[7768,7768],"mapped",[7769]],[[7769,7769],"valid"],[[7770,7770],"mapped",[7771]],[[7771,7771],"valid"],[[7772,7772],"mapped",[7773]],[[7773,7773],"valid"],[[7774,7774],"mapped",[7775]],[[7775,7775],"valid"],[[7776,7776],"mapped",[7777]],[[7777,7777],"valid"],[[7778,7778],"mapped",[7779]],[[7779,7779],"valid"],[[7780,7780],"mapped",[7781]],[[7781,7781],"valid"],[[7782,7782],"mapped",[7783]],[[7783,7783],"valid"],[[7784,7784],"mapped",[7785]],[[7785,7785],"valid"],[[7786,7786],"mapped",[7787]],[[7787,7787],"valid"],[[7788,7788],"mapped",[7789]],[[7789,7789],"valid"],[[7790,7790],"mapped",[7791]],[[7791,7791],"valid"],[[7792,7792],"mapped",[7793]],[[7793,7793],"valid"],[[7794,7794],"mapped",[7795]],[[7795,7795],"valid"],[[7796,7796],"mapped",[7797]],[[7797,7797],"valid"],[[7798,7798],"mapped",[7799]],[[7799,7799],"valid"],[[7800,7800],"mapped",[7801]],[[7801,7801],"valid"],[[7802,7802],"mapped",[7803]],[[7803,7803],"valid"],[[7804,7804],"mapped",[7805]],[[7805,7805],"valid"],[[7806,7806],"mapped",[7807]],[[7807,7807],"valid"],[[7808,7808],"mapped",[7809]],[[7809,7809],"valid"],[[7810,7810],"mapped",[7811]],[[7811,7811],"valid"],[[7812,7812],"mapped",[7813]],[[7813,7813],"valid"],[[7814,7814],"mapped",[7815]],[[7815,7815],"valid"],[[7816,7816],"mapped",[7817]],[[7817,7817],"valid"],[[7818,7818],"mapped",[7819]],[[7819,7819],"valid"],[[7820,7820],"mapped",[7821]],[[7821,7821],"valid"],[[7822,7822],"mapped",[7823]],[[7823,7823],"valid"],[[7824,7824],"mapped",[7825]],[[7825,7825],"valid"],[[7826,7826],"mapped",[7827]],[[7827,7827],"valid"],[[7828,7828],"mapped",[7829]],[[7829,7833],"valid"],[[7834,7834],"mapped",[97,702]],[[7835,7835],"mapped",[7777]],[[7836,7837],"valid"],[[7838,7838],"mapped",[115,115]],[[7839,7839],"valid"],[[7840,7840],"mapped",[7841]],[[7841,7841],"valid"],[[7842,7842],"mapped",[7843]],[[7843,7843],"valid"],[[7844,7844],"mapped",[7845]],[[7845,7845],"valid"],[[7846,7846],"mapped",[7847]],[[7847,7847],"valid"],[[7848,7848],"mapped",[7849]],[[7849,7849],"valid"],[[7850,7850],"mapped",[7851]],[[7851,7851],"valid"],[[7852,7852],"mapped",[7853]],[[7853,7853],"valid"],[[7854,7854],"mapped",[7855]],[[7855,7855],"valid"],[[7856,7856],"mapped",[7857]],[[7857,7857],"valid"],[[7858,7858],"mapped",[7859]],[[7859,7859],"valid"],[[7860,7860],"mapped",[7861]],[[7861,7861],"valid"],[[7862,7862],"mapped",[7863]],[[7863,7863],"valid"],[[7864,7864],"mapped",[7865]],[[7865,7865],"valid"],[[7866,7866],"mapped",[7867]],[[7867,7867],"valid"],[[7868,7868],"mapped",[7869]],[[7869,7869],"valid"],[[7870,7870],"mapped",[7871]],[[7871,7871],"valid"],[[7872,7872],"mapped",[7873]],[[7873,7873],"valid"],[[7874,7874],"mapped",[7875]],[[7875,7875],"valid"],[[7876,7876],"mapped",[7877]],[[7877,7877],"valid"],[[7878,7878],"mapped",[7879]],[[7879,7879],"valid"],[[7880,7880],"mapped",[7881]],[[7881,7881],"valid"],[[7882,7882],"mapped",[7883]],[[7883,7883],"valid"],[[7884,7884],"mapped",[7885]],[[7885,7885],"valid"],[[7886,7886],"mapped",[7887]],[[7887,7887],"valid"],[[7888,7888],"mapped",[7889]],[[7889,7889],"valid"],[[7890,7890],"mapped",[7891]],[[7891,7891],"valid"],[[7892,7892],"mapped",[7893]],[[7893,7893],"valid"],[[7894,7894],"mapped",[7895]],[[7895,7895],"valid"],[[7896,7896],"mapped",[7897]],[[7897,7897],"valid"],[[7898,7898],"mapped",[7899]],[[7899,7899],"valid"],[[7900,7900],"mapped",[7901]],[[7901,7901],"valid"],[[7902,7902],"mapped",[7903]],[[7903,7903],"valid"],[[7904,7904],"mapped",[7905]],[[7905,7905],"valid"],[[7906,7906],"mapped",[7907]],[[7907,7907],"valid"],[[7908,7908],"mapped",[7909]],[[7909,7909],"valid"],[[7910,7910],"mapped",[7911]],[[7911,7911],"valid"],[[7912,7912],"mapped",[7913]],[[7913,7913],"valid"],[[7914,7914],"mapped",[7915]],[[7915,7915],"valid"],[[7916,7916],"mapped",[7917]],[[7917,7917],"valid"],[[7918,7918],"mapped",[7919]],[[7919,7919],"valid"],[[7920,7920],"mapped",[7921]],[[7921,7921],"valid"],[[7922,7922],"mapped",[7923]],[[7923,7923],"valid"],[[7924,7924],"mapped",[7925]],[[7925,7925],"valid"],[[7926,7926],"mapped",[7927]],[[7927,7927],"valid"],[[7928,7928],"mapped",[7929]],[[7929,7929],"valid"],[[7930,7930],"mapped",[7931]],[[7931,7931],"valid"],[[7932,7932],"mapped",[7933]],[[7933,7933],"valid"],[[7934,7934],"mapped",[7935]],[[7935,7935],"valid"],[[7936,7943],"valid"],[[7944,7944],"mapped",[7936]],[[7945,7945],"mapped",[7937]],[[7946,7946],"mapped",[7938]],[[7947,7947],"mapped",[7939]],[[7948,7948],"mapped",[7940]],[[7949,7949],"mapped",[7941]],[[7950,7950],"mapped",[7942]],[[7951,7951],"mapped",[7943]],[[7952,7957],"valid"],[[7958,7959],"disallowed"],[[7960,7960],"mapped",[7952]],[[7961,7961],"mapped",[7953]],[[7962,7962],"mapped",[7954]],[[7963,7963],"mapped",[7955]],[[7964,7964],"mapped",[7956]],[[7965,7965],"mapped",[7957]],[[7966,7967],"disallowed"],[[7968,7975],"valid"],[[7976,7976],"mapped",[7968]],[[7977,7977],"mapped",[7969]],[[7978,7978],"mapped",[7970]],[[7979,7979],"mapped",[7971]],[[7980,7980],"mapped",[7972]],[[7981,7981],"mapped",[7973]],[[7982,7982],"mapped",[7974]],[[7983,7983],"mapped",[7975]],[[7984,7991],"valid"],[[7992,7992],"mapped",[7984]],[[7993,7993],"mapped",[7985]],[[7994,7994],"mapped",[7986]],[[7995,7995],"mapped",[7987]],[[7996,7996],"mapped",[7988]],[[7997,7997],"mapped",[7989]],[[7998,7998],"mapped",[7990]],[[7999,7999],"mapped",[7991]],[[8e3,8005],"valid"],[[8006,8007],"disallowed"],[[8008,8008],"mapped",[8e3]],[[8009,8009],"mapped",[8001]],[[8010,8010],"mapped",[8002]],[[8011,8011],"mapped",[8003]],[[8012,8012],"mapped",[8004]],[[8013,8013],"mapped",[8005]],[[8014,8015],"disallowed"],[[8016,8023],"valid"],[[8024,8024],"disallowed"],[[8025,8025],"mapped",[8017]],[[8026,8026],"disallowed"],[[8027,8027],"mapped",[8019]],[[8028,8028],"disallowed"],[[8029,8029],"mapped",[8021]],[[8030,8030],"disallowed"],[[8031,8031],"mapped",[8023]],[[8032,8039],"valid"],[[8040,8040],"mapped",[8032]],[[8041,8041],"mapped",[8033]],[[8042,8042],"mapped",[8034]],[[8043,8043],"mapped",[8035]],[[8044,8044],"mapped",[8036]],[[8045,8045],"mapped",[8037]],[[8046,8046],"mapped",[8038]],[[8047,8047],"mapped",[8039]],[[8048,8048],"valid"],[[8049,8049],"mapped",[940]],[[8050,8050],"valid"],[[8051,8051],"mapped",[941]],[[8052,8052],"valid"],[[8053,8053],"mapped",[942]],[[8054,8054],"valid"],[[8055,8055],"mapped",[943]],[[8056,8056],"valid"],[[8057,8057],"mapped",[972]],[[8058,8058],"valid"],[[8059,8059],"mapped",[973]],[[8060,8060],"valid"],[[8061,8061],"mapped",[974]],[[8062,8063],"disallowed"],[[8064,8064],"mapped",[7936,953]],[[8065,8065],"mapped",[7937,953]],[[8066,8066],"mapped",[7938,953]],[[8067,8067],"mapped",[7939,953]],[[8068,8068],"mapped",[7940,953]],[[8069,8069],"mapped",[7941,953]],[[8070,8070],"mapped",[7942,953]],[[8071,8071],"mapped",[7943,953]],[[8072,8072],"mapped",[7936,953]],[[8073,8073],"mapped",[7937,953]],[[8074,8074],"mapped",[7938,953]],[[8075,8075],"mapped",[7939,953]],[[8076,8076],"mapped",[7940,953]],[[8077,8077],"mapped",[7941,953]],[[8078,8078],"mapped",[7942,953]],[[8079,8079],"mapped",[7943,953]],[[8080,8080],"mapped",[7968,953]],[[8081,8081],"mapped",[7969,953]],[[8082,8082],"mapped",[7970,953]],[[8083,8083],"mapped",[7971,953]],[[8084,8084],"mapped",[7972,953]],[[8085,8085],"mapped",[7973,953]],[[8086,8086],"mapped",[7974,953]],[[8087,8087],"mapped",[7975,953]],[[8088,8088],"mapped",[7968,953]],[[8089,8089],"mapped",[7969,953]],[[8090,8090],"mapped",[7970,953]],[[8091,8091],"mapped",[7971,953]],[[8092,8092],"mapped",[7972,953]],[[8093,8093],"mapped",[7973,953]],[[8094,8094],"mapped",[7974,953]],[[8095,8095],"mapped",[7975,953]],[[8096,8096],"mapped",[8032,953]],[[8097,8097],"mapped",[8033,953]],[[8098,8098],"mapped",[8034,953]],[[8099,8099],"mapped",[8035,953]],[[8100,8100],"mapped",[8036,953]],[[8101,8101],"mapped",[8037,953]],[[8102,8102],"mapped",[8038,953]],[[8103,8103],"mapped",[8039,953]],[[8104,8104],"mapped",[8032,953]],[[8105,8105],"mapped",[8033,953]],[[8106,8106],"mapped",[8034,953]],[[8107,8107],"mapped",[8035,953]],[[8108,8108],"mapped",[8036,953]],[[8109,8109],"mapped",[8037,953]],[[8110,8110],"mapped",[8038,953]],[[8111,8111],"mapped",[8039,953]],[[8112,8113],"valid"],[[8114,8114],"mapped",[8048,953]],[[8115,8115],"mapped",[945,953]],[[8116,8116],"mapped",[940,953]],[[8117,8117],"disallowed"],[[8118,8118],"valid"],[[8119,8119],"mapped",[8118,953]],[[8120,8120],"mapped",[8112]],[[8121,8121],"mapped",[8113]],[[8122,8122],"mapped",[8048]],[[8123,8123],"mapped",[940]],[[8124,8124],"mapped",[945,953]],[[8125,8125],"disallowed_STD3_mapped",[32,787]],[[8126,8126],"mapped",[953]],[[8127,8127],"disallowed_STD3_mapped",[32,787]],[[8128,8128],"disallowed_STD3_mapped",[32,834]],[[8129,8129],"disallowed_STD3_mapped",[32,776,834]],[[8130,8130],"mapped",[8052,953]],[[8131,8131],"mapped",[951,953]],[[8132,8132],"mapped",[942,953]],[[8133,8133],"disallowed"],[[8134,8134],"valid"],[[8135,8135],"mapped",[8134,953]],[[8136,8136],"mapped",[8050]],[[8137,8137],"mapped",[941]],[[8138,8138],"mapped",[8052]],[[8139,8139],"mapped",[942]],[[8140,8140],"mapped",[951,953]],[[8141,8141],"disallowed_STD3_mapped",[32,787,768]],[[8142,8142],"disallowed_STD3_mapped",[32,787,769]],[[8143,8143],"disallowed_STD3_mapped",[32,787,834]],[[8144,8146],"valid"],[[8147,8147],"mapped",[912]],[[8148,8149],"disallowed"],[[8150,8151],"valid"],[[8152,8152],"mapped",[8144]],[[8153,8153],"mapped",[8145]],[[8154,8154],"mapped",[8054]],[[8155,8155],"mapped",[943]],[[8156,8156],"disallowed"],[[8157,8157],"disallowed_STD3_mapped",[32,788,768]],[[8158,8158],"disallowed_STD3_mapped",[32,788,769]],[[8159,8159],"disallowed_STD3_mapped",[32,788,834]],[[8160,8162],"valid"],[[8163,8163],"mapped",[944]],[[8164,8167],"valid"],[[8168,8168],"mapped",[8160]],[[8169,8169],"mapped",[8161]],[[8170,8170],"mapped",[8058]],[[8171,8171],"mapped",[973]],[[8172,8172],"mapped",[8165]],[[8173,8173],"disallowed_STD3_mapped",[32,776,768]],[[8174,8174],"disallowed_STD3_mapped",[32,776,769]],[[8175,8175],"disallowed_STD3_mapped",[96]],[[8176,8177],"disallowed"],[[8178,8178],"mapped",[8060,953]],[[8179,8179],"mapped",[969,953]],[[8180,8180],"mapped",[974,953]],[[8181,8181],"disallowed"],[[8182,8182],"valid"],[[8183,8183],"mapped",[8182,953]],[[8184,8184],"mapped",[8056]],[[8185,8185],"mapped",[972]],[[8186,8186],"mapped",[8060]],[[8187,8187],"mapped",[974]],[[8188,8188],"mapped",[969,953]],[[8189,8189],"disallowed_STD3_mapped",[32,769]],[[8190,8190],"disallowed_STD3_mapped",[32,788]],[[8191,8191],"disallowed"],[[8192,8202],"disallowed_STD3_mapped",[32]],[[8203,8203],"ignored"],[[8204,8205],"deviation",[]],[[8206,8207],"disallowed"],[[8208,8208],"valid",[],"NV8"],[[8209,8209],"mapped",[8208]],[[8210,8214],"valid",[],"NV8"],[[8215,8215],"disallowed_STD3_mapped",[32,819]],[[8216,8227],"valid",[],"NV8"],[[8228,8230],"disallowed"],[[8231,8231],"valid",[],"NV8"],[[8232,8238],"disallowed"],[[8239,8239],"disallowed_STD3_mapped",[32]],[[8240,8242],"valid",[],"NV8"],[[8243,8243],"mapped",[8242,8242]],[[8244,8244],"mapped",[8242,8242,8242]],[[8245,8245],"valid",[],"NV8"],[[8246,8246],"mapped",[8245,8245]],[[8247,8247],"mapped",[8245,8245,8245]],[[8248,8251],"valid",[],"NV8"],[[8252,8252],"disallowed_STD3_mapped",[33,33]],[[8253,8253],"valid",[],"NV8"],[[8254,8254],"disallowed_STD3_mapped",[32,773]],[[8255,8262],"valid",[],"NV8"],[[8263,8263],"disallowed_STD3_mapped",[63,63]],[[8264,8264],"disallowed_STD3_mapped",[63,33]],[[8265,8265],"disallowed_STD3_mapped",[33,63]],[[8266,8269],"valid",[],"NV8"],[[8270,8274],"valid",[],"NV8"],[[8275,8276],"valid",[],"NV8"],[[8277,8278],"valid",[],"NV8"],[[8279,8279],"mapped",[8242,8242,8242,8242]],[[8280,8286],"valid",[],"NV8"],[[8287,8287],"disallowed_STD3_mapped",[32]],[[8288,8288],"ignored"],[[8289,8291],"disallowed"],[[8292,8292],"ignored"],[[8293,8293],"disallowed"],[[8294,8297],"disallowed"],[[8298,8303],"disallowed"],[[8304,8304],"mapped",[48]],[[8305,8305],"mapped",[105]],[[8306,8307],"disallowed"],[[8308,8308],"mapped",[52]],[[8309,8309],"mapped",[53]],[[8310,8310],"mapped",[54]],[[8311,8311],"mapped",[55]],[[8312,8312],"mapped",[56]],[[8313,8313],"mapped",[57]],[[8314,8314],"disallowed_STD3_mapped",[43]],[[8315,8315],"mapped",[8722]],[[8316,8316],"disallowed_STD3_mapped",[61]],[[8317,8317],"disallowed_STD3_mapped",[40]],[[8318,8318],"disallowed_STD3_mapped",[41]],[[8319,8319],"mapped",[110]],[[8320,8320],"mapped",[48]],[[8321,8321],"mapped",[49]],[[8322,8322],"mapped",[50]],[[8323,8323],"mapped",[51]],[[8324,8324],"mapped",[52]],[[8325,8325],"mapped",[53]],[[8326,8326],"mapped",[54]],[[8327,8327],"mapped",[55]],[[8328,8328],"mapped",[56]],[[8329,8329],"mapped",[57]],[[8330,8330],"disallowed_STD3_mapped",[43]],[[8331,8331],"mapped",[8722]],[[8332,8332],"disallowed_STD3_mapped",[61]],[[8333,8333],"disallowed_STD3_mapped",[40]],[[8334,8334],"disallowed_STD3_mapped",[41]],[[8335,8335],"disallowed"],[[8336,8336],"mapped",[97]],[[8337,8337],"mapped",[101]],[[8338,8338],"mapped",[111]],[[8339,8339],"mapped",[120]],[[8340,8340],"mapped",[601]],[[8341,8341],"mapped",[104]],[[8342,8342],"mapped",[107]],[[8343,8343],"mapped",[108]],[[8344,8344],"mapped",[109]],[[8345,8345],"mapped",[110]],[[8346,8346],"mapped",[112]],[[8347,8347],"mapped",[115]],[[8348,8348],"mapped",[116]],[[8349,8351],"disallowed"],[[8352,8359],"valid",[],"NV8"],[[8360,8360],"mapped",[114,115]],[[8361,8362],"valid",[],"NV8"],[[8363,8363],"valid",[],"NV8"],[[8364,8364],"valid",[],"NV8"],[[8365,8367],"valid",[],"NV8"],[[8368,8369],"valid",[],"NV8"],[[8370,8373],"valid",[],"NV8"],[[8374,8376],"valid",[],"NV8"],[[8377,8377],"valid",[],"NV8"],[[8378,8378],"valid",[],"NV8"],[[8379,8381],"valid",[],"NV8"],[[8382,8382],"valid",[],"NV8"],[[8383,8399],"disallowed"],[[8400,8417],"valid",[],"NV8"],[[8418,8419],"valid",[],"NV8"],[[8420,8426],"valid",[],"NV8"],[[8427,8427],"valid",[],"NV8"],[[8428,8431],"valid",[],"NV8"],[[8432,8432],"valid",[],"NV8"],[[8433,8447],"disallowed"],[[8448,8448],"disallowed_STD3_mapped",[97,47,99]],[[8449,8449],"disallowed_STD3_mapped",[97,47,115]],[[8450,8450],"mapped",[99]],[[8451,8451],"mapped",[176,99]],[[8452,8452],"valid",[],"NV8"],[[8453,8453],"disallowed_STD3_mapped",[99,47,111]],[[8454,8454],"disallowed_STD3_mapped",[99,47,117]],[[8455,8455],"mapped",[603]],[[8456,8456],"valid",[],"NV8"],[[8457,8457],"mapped",[176,102]],[[8458,8458],"mapped",[103]],[[8459,8462],"mapped",[104]],[[8463,8463],"mapped",[295]],[[8464,8465],"mapped",[105]],[[8466,8467],"mapped",[108]],[[8468,8468],"valid",[],"NV8"],[[8469,8469],"mapped",[110]],[[8470,8470],"mapped",[110,111]],[[8471,8472],"valid",[],"NV8"],[[8473,8473],"mapped",[112]],[[8474,8474],"mapped",[113]],[[8475,8477],"mapped",[114]],[[8478,8479],"valid",[],"NV8"],[[8480,8480],"mapped",[115,109]],[[8481,8481],"mapped",[116,101,108]],[[8482,8482],"mapped",[116,109]],[[8483,8483],"valid",[],"NV8"],[[8484,8484],"mapped",[122]],[[8485,8485],"valid",[],"NV8"],[[8486,8486],"mapped",[969]],[[8487,8487],"valid",[],"NV8"],[[8488,8488],"mapped",[122]],[[8489,8489],"valid",[],"NV8"],[[8490,8490],"mapped",[107]],[[8491,8491],"mapped",[229]],[[8492,8492],"mapped",[98]],[[8493,8493],"mapped",[99]],[[8494,8494],"valid",[],"NV8"],[[8495,8496],"mapped",[101]],[[8497,8497],"mapped",[102]],[[8498,8498],"disallowed"],[[8499,8499],"mapped",[109]],[[8500,8500],"mapped",[111]],[[8501,8501],"mapped",[1488]],[[8502,8502],"mapped",[1489]],[[8503,8503],"mapped",[1490]],[[8504,8504],"mapped",[1491]],[[8505,8505],"mapped",[105]],[[8506,8506],"valid",[],"NV8"],[[8507,8507],"mapped",[102,97,120]],[[8508,8508],"mapped",[960]],[[8509,8510],"mapped",[947]],[[8511,8511],"mapped",[960]],[[8512,8512],"mapped",[8721]],[[8513,8516],"valid",[],"NV8"],[[8517,8518],"mapped",[100]],[[8519,8519],"mapped",[101]],[[8520,8520],"mapped",[105]],[[8521,8521],"mapped",[106]],[[8522,8523],"valid",[],"NV8"],[[8524,8524],"valid",[],"NV8"],[[8525,8525],"valid",[],"NV8"],[[8526,8526],"valid"],[[8527,8527],"valid",[],"NV8"],[[8528,8528],"mapped",[49,8260,55]],[[8529,8529],"mapped",[49,8260,57]],[[8530,8530],"mapped",[49,8260,49,48]],[[8531,8531],"mapped",[49,8260,51]],[[8532,8532],"mapped",[50,8260,51]],[[8533,8533],"mapped",[49,8260,53]],[[8534,8534],"mapped",[50,8260,53]],[[8535,8535],"mapped",[51,8260,53]],[[8536,8536],"mapped",[52,8260,53]],[[8537,8537],"mapped",[49,8260,54]],[[8538,8538],"mapped",[53,8260,54]],[[8539,8539],"mapped",[49,8260,56]],[[8540,8540],"mapped",[51,8260,56]],[[8541,8541],"mapped",[53,8260,56]],[[8542,8542],"mapped",[55,8260,56]],[[8543,8543],"mapped",[49,8260]],[[8544,8544],"mapped",[105]],[[8545,8545],"mapped",[105,105]],[[8546,8546],"mapped",[105,105,105]],[[8547,8547],"mapped",[105,118]],[[8548,8548],"mapped",[118]],[[8549,8549],"mapped",[118,105]],[[8550,8550],"mapped",[118,105,105]],[[8551,8551],"mapped",[118,105,105,105]],[[8552,8552],"mapped",[105,120]],[[8553,8553],"mapped",[120]],[[8554,8554],"mapped",[120,105]],[[8555,8555],"mapped",[120,105,105]],[[8556,8556],"mapped",[108]],[[8557,8557],"mapped",[99]],[[8558,8558],"mapped",[100]],[[8559,8559],"mapped",[109]],[[8560,8560],"mapped",[105]],[[8561,8561],"mapped",[105,105]],[[8562,8562],"mapped",[105,105,105]],[[8563,8563],"mapped",[105,118]],[[8564,8564],"mapped",[118]],[[8565,8565],"mapped",[118,105]],[[8566,8566],"mapped",[118,105,105]],[[8567,8567],"mapped",[118,105,105,105]],[[8568,8568],"mapped",[105,120]],[[8569,8569],"mapped",[120]],[[8570,8570],"mapped",[120,105]],[[8571,8571],"mapped",[120,105,105]],[[8572,8572],"mapped",[108]],[[8573,8573],"mapped",[99]],[[8574,8574],"mapped",[100]],[[8575,8575],"mapped",[109]],[[8576,8578],"valid",[],"NV8"],[[8579,8579],"disallowed"],[[8580,8580],"valid"],[[8581,8584],"valid",[],"NV8"],[[8585,8585],"mapped",[48,8260,51]],[[8586,8587],"valid",[],"NV8"],[[8588,8591],"disallowed"],[[8592,8682],"valid",[],"NV8"],[[8683,8691],"valid",[],"NV8"],[[8692,8703],"valid",[],"NV8"],[[8704,8747],"valid",[],"NV8"],[[8748,8748],"mapped",[8747,8747]],[[8749,8749],"mapped",[8747,8747,8747]],[[8750,8750],"valid",[],"NV8"],[[8751,8751],"mapped",[8750,8750]],[[8752,8752],"mapped",[8750,8750,8750]],[[8753,8799],"valid",[],"NV8"],[[8800,8800],"disallowed_STD3_valid"],[[8801,8813],"valid",[],"NV8"],[[8814,8815],"disallowed_STD3_valid"],[[8816,8945],"valid",[],"NV8"],[[8946,8959],"valid",[],"NV8"],[[8960,8960],"valid",[],"NV8"],[[8961,8961],"valid",[],"NV8"],[[8962,9e3],"valid",[],"NV8"],[[9001,9001],"mapped",[12296]],[[9002,9002],"mapped",[12297]],[[9003,9082],"valid",[],"NV8"],[[9083,9083],"valid",[],"NV8"],[[9084,9084],"valid",[],"NV8"],[[9085,9114],"valid",[],"NV8"],[[9115,9166],"valid",[],"NV8"],[[9167,9168],"valid",[],"NV8"],[[9169,9179],"valid",[],"NV8"],[[9180,9191],"valid",[],"NV8"],[[9192,9192],"valid",[],"NV8"],[[9193,9203],"valid",[],"NV8"],[[9204,9210],"valid",[],"NV8"],[[9211,9215],"disallowed"],[[9216,9252],"valid",[],"NV8"],[[9253,9254],"valid",[],"NV8"],[[9255,9279],"disallowed"],[[9280,9290],"valid",[],"NV8"],[[9291,9311],"disallowed"],[[9312,9312],"mapped",[49]],[[9313,9313],"mapped",[50]],[[9314,9314],"mapped",[51]],[[9315,9315],"mapped",[52]],[[9316,9316],"mapped",[53]],[[9317,9317],"mapped",[54]],[[9318,9318],"mapped",[55]],[[9319,9319],"mapped",[56]],[[9320,9320],"mapped",[57]],[[9321,9321],"mapped",[49,48]],[[9322,9322],"mapped",[49,49]],[[9323,9323],"mapped",[49,50]],[[9324,9324],"mapped",[49,51]],[[9325,9325],"mapped",[49,52]],[[9326,9326],"mapped",[49,53]],[[9327,9327],"mapped",[49,54]],[[9328,9328],"mapped",[49,55]],[[9329,9329],"mapped",[49,56]],[[9330,9330],"mapped",[49,57]],[[9331,9331],"mapped",[50,48]],[[9332,9332],"disallowed_STD3_mapped",[40,49,41]],[[9333,9333],"disallowed_STD3_mapped",[40,50,41]],[[9334,9334],"disallowed_STD3_mapped",[40,51,41]],[[9335,9335],"disallowed_STD3_mapped",[40,52,41]],[[9336,9336],"disallowed_STD3_mapped",[40,53,41]],[[9337,9337],"disallowed_STD3_mapped",[40,54,41]],[[9338,9338],"disallowed_STD3_mapped",[40,55,41]],[[9339,9339],"disallowed_STD3_mapped",[40,56,41]],[[9340,9340],"disallowed_STD3_mapped",[40,57,41]],[[9341,9341],"disallowed_STD3_mapped",[40,49,48,41]],[[9342,9342],"disallowed_STD3_mapped",[40,49,49,41]],[[9343,9343],"disallowed_STD3_mapped",[40,49,50,41]],[[9344,9344],"disallowed_STD3_mapped",[40,49,51,41]],[[9345,9345],"disallowed_STD3_mapped",[40,49,52,41]],[[9346,9346],"disallowed_STD3_mapped",[40,49,53,41]],[[9347,9347],"disallowed_STD3_mapped",[40,49,54,41]],[[9348,9348],"disallowed_STD3_mapped",[40,49,55,41]],[[9349,9349],"disallowed_STD3_mapped",[40,49,56,41]],[[9350,9350],"disallowed_STD3_mapped",[40,49,57,41]],[[9351,9351],"disallowed_STD3_mapped",[40,50,48,41]],[[9352,9371],"disallowed"],[[9372,9372],"disallowed_STD3_mapped",[40,97,41]],[[9373,9373],"disallowed_STD3_mapped",[40,98,41]],[[9374,9374],"disallowed_STD3_mapped",[40,99,41]],[[9375,9375],"disallowed_STD3_mapped",[40,100,41]],[[9376,9376],"disallowed_STD3_mapped",[40,101,41]],[[9377,9377],"disallowed_STD3_mapped",[40,102,41]],[[9378,9378],"disallowed_STD3_mapped",[40,103,41]],[[9379,9379],"disallowed_STD3_mapped",[40,104,41]],[[9380,9380],"disallowed_STD3_mapped",[40,105,41]],[[9381,9381],"disallowed_STD3_mapped",[40,106,41]],[[9382,9382],"disallowed_STD3_mapped",[40,107,41]],[[9383,9383],"disallowed_STD3_mapped",[40,108,41]],[[9384,9384],"disallowed_STD3_mapped",[40,109,41]],[[9385,9385],"disallowed_STD3_mapped",[40,110,41]],[[9386,9386],"disallowed_STD3_mapped",[40,111,41]],[[9387,9387],"disallowed_STD3_mapped",[40,112,41]],[[9388,9388],"disallowed_STD3_mapped",[40,113,41]],[[9389,9389],"disallowed_STD3_mapped",[40,114,41]],[[9390,9390],"disallowed_STD3_mapped",[40,115,41]],[[9391,9391],"disallowed_STD3_mapped",[40,116,41]],[[9392,9392],"disallowed_STD3_mapped",[40,117,41]],[[9393,9393],"disallowed_STD3_mapped",[40,118,41]],[[9394,9394],"disallowed_STD3_mapped",[40,119,41]],[[9395,9395],"disallowed_STD3_mapped",[40,120,41]],[[9396,9396],"disallowed_STD3_mapped",[40,121,41]],[[9397,9397],"disallowed_STD3_mapped",[40,122,41]],[[9398,9398],"mapped",[97]],[[9399,9399],"mapped",[98]],[[9400,9400],"mapped",[99]],[[9401,9401],"mapped",[100]],[[9402,9402],"mapped",[101]],[[9403,9403],"mapped",[102]],[[9404,9404],"mapped",[103]],[[9405,9405],"mapped",[104]],[[9406,9406],"mapped",[105]],[[9407,9407],"mapped",[106]],[[9408,9408],"mapped",[107]],[[9409,9409],"mapped",[108]],[[9410,9410],"mapped",[109]],[[9411,9411],"mapped",[110]],[[9412,9412],"mapped",[111]],[[9413,9413],"mapped",[112]],[[9414,9414],"mapped",[113]],[[9415,9415],"mapped",[114]],[[9416,9416],"mapped",[115]],[[9417,9417],"mapped",[116]],[[9418,9418],"mapped",[117]],[[9419,9419],"mapped",[118]],[[9420,9420],"mapped",[119]],[[9421,9421],"mapped",[120]],[[9422,9422],"mapped",[121]],[[9423,9423],"mapped",[122]],[[9424,9424],"mapped",[97]],[[9425,9425],"mapped",[98]],[[9426,9426],"mapped",[99]],[[9427,9427],"mapped",[100]],[[9428,9428],"mapped",[101]],[[9429,9429],"mapped",[102]],[[9430,9430],"mapped",[103]],[[9431,9431],"mapped",[104]],[[9432,9432],"mapped",[105]],[[9433,9433],"mapped",[106]],[[9434,9434],"mapped",[107]],[[9435,9435],"mapped",[108]],[[9436,9436],"mapped",[109]],[[9437,9437],"mapped",[110]],[[9438,9438],"mapped",[111]],[[9439,9439],"mapped",[112]],[[9440,9440],"mapped",[113]],[[9441,9441],"mapped",[114]],[[9442,9442],"mapped",[115]],[[9443,9443],"mapped",[116]],[[9444,9444],"mapped",[117]],[[9445,9445],"mapped",[118]],[[9446,9446],"mapped",[119]],[[9447,9447],"mapped",[120]],[[9448,9448],"mapped",[121]],[[9449,9449],"mapped",[122]],[[9450,9450],"mapped",[48]],[[9451,9470],"valid",[],"NV8"],[[9471,9471],"valid",[],"NV8"],[[9472,9621],"valid",[],"NV8"],[[9622,9631],"valid",[],"NV8"],[[9632,9711],"valid",[],"NV8"],[[9712,9719],"valid",[],"NV8"],[[9720,9727],"valid",[],"NV8"],[[9728,9747],"valid",[],"NV8"],[[9748,9749],"valid",[],"NV8"],[[9750,9751],"valid",[],"NV8"],[[9752,9752],"valid",[],"NV8"],[[9753,9753],"valid",[],"NV8"],[[9754,9839],"valid",[],"NV8"],[[9840,9841],"valid",[],"NV8"],[[9842,9853],"valid",[],"NV8"],[[9854,9855],"valid",[],"NV8"],[[9856,9865],"valid",[],"NV8"],[[9866,9873],"valid",[],"NV8"],[[9874,9884],"valid",[],"NV8"],[[9885,9885],"valid",[],"NV8"],[[9886,9887],"valid",[],"NV8"],[[9888,9889],"valid",[],"NV8"],[[9890,9905],"valid",[],"NV8"],[[9906,9906],"valid",[],"NV8"],[[9907,9916],"valid",[],"NV8"],[[9917,9919],"valid",[],"NV8"],[[9920,9923],"valid",[],"NV8"],[[9924,9933],"valid",[],"NV8"],[[9934,9934],"valid",[],"NV8"],[[9935,9953],"valid",[],"NV8"],[[9954,9954],"valid",[],"NV8"],[[9955,9955],"valid",[],"NV8"],[[9956,9959],"valid",[],"NV8"],[[9960,9983],"valid",[],"NV8"],[[9984,9984],"valid",[],"NV8"],[[9985,9988],"valid",[],"NV8"],[[9989,9989],"valid",[],"NV8"],[[9990,9993],"valid",[],"NV8"],[[9994,9995],"valid",[],"NV8"],[[9996,10023],"valid",[],"NV8"],[[10024,10024],"valid",[],"NV8"],[[10025,10059],"valid",[],"NV8"],[[10060,10060],"valid",[],"NV8"],[[10061,10061],"valid",[],"NV8"],[[10062,10062],"valid",[],"NV8"],[[10063,10066],"valid",[],"NV8"],[[10067,10069],"valid",[],"NV8"],[[10070,10070],"valid",[],"NV8"],[[10071,10071],"valid",[],"NV8"],[[10072,10078],"valid",[],"NV8"],[[10079,10080],"valid",[],"NV8"],[[10081,10087],"valid",[],"NV8"],[[10088,10101],"valid",[],"NV8"],[[10102,10132],"valid",[],"NV8"],[[10133,10135],"valid",[],"NV8"],[[10136,10159],"valid",[],"NV8"],[[10160,10160],"valid",[],"NV8"],[[10161,10174],"valid",[],"NV8"],[[10175,10175],"valid",[],"NV8"],[[10176,10182],"valid",[],"NV8"],[[10183,10186],"valid",[],"NV8"],[[10187,10187],"valid",[],"NV8"],[[10188,10188],"valid",[],"NV8"],[[10189,10189],"valid",[],"NV8"],[[10190,10191],"valid",[],"NV8"],[[10192,10219],"valid",[],"NV8"],[[10220,10223],"valid",[],"NV8"],[[10224,10239],"valid",[],"NV8"],[[10240,10495],"valid",[],"NV8"],[[10496,10763],"valid",[],"NV8"],[[10764,10764],"mapped",[8747,8747,8747,8747]],[[10765,10867],"valid",[],"NV8"],[[10868,10868],"disallowed_STD3_mapped",[58,58,61]],[[10869,10869],"disallowed_STD3_mapped",[61,61]],[[10870,10870],"disallowed_STD3_mapped",[61,61,61]],[[10871,10971],"valid",[],"NV8"],[[10972,10972],"mapped",[10973,824]],[[10973,11007],"valid",[],"NV8"],[[11008,11021],"valid",[],"NV8"],[[11022,11027],"valid",[],"NV8"],[[11028,11034],"valid",[],"NV8"],[[11035,11039],"valid",[],"NV8"],[[11040,11043],"valid",[],"NV8"],[[11044,11084],"valid",[],"NV8"],[[11085,11087],"valid",[],"NV8"],[[11088,11092],"valid",[],"NV8"],[[11093,11097],"valid",[],"NV8"],[[11098,11123],"valid",[],"NV8"],[[11124,11125],"disallowed"],[[11126,11157],"valid",[],"NV8"],[[11158,11159],"disallowed"],[[11160,11193],"valid",[],"NV8"],[[11194,11196],"disallowed"],[[11197,11208],"valid",[],"NV8"],[[11209,11209],"disallowed"],[[11210,11217],"valid",[],"NV8"],[[11218,11243],"disallowed"],[[11244,11247],"valid",[],"NV8"],[[11248,11263],"disallowed"],[[11264,11264],"mapped",[11312]],[[11265,11265],"mapped",[11313]],[[11266,11266],"mapped",[11314]],[[11267,11267],"mapped",[11315]],[[11268,11268],"mapped",[11316]],[[11269,11269],"mapped",[11317]],[[11270,11270],"mapped",[11318]],[[11271,11271],"mapped",[11319]],[[11272,11272],"mapped",[11320]],[[11273,11273],"mapped",[11321]],[[11274,11274],"mapped",[11322]],[[11275,11275],"mapped",[11323]],[[11276,11276],"mapped",[11324]],[[11277,11277],"mapped",[11325]],[[11278,11278],"mapped",[11326]],[[11279,11279],"mapped",[11327]],[[11280,11280],"mapped",[11328]],[[11281,11281],"mapped",[11329]],[[11282,11282],"mapped",[11330]],[[11283,11283],"mapped",[11331]],[[11284,11284],"mapped",[11332]],[[11285,11285],"mapped",[11333]],[[11286,11286],"mapped",[11334]],[[11287,11287],"mapped",[11335]],[[11288,11288],"mapped",[11336]],[[11289,11289],"mapped",[11337]],[[11290,11290],"mapped",[11338]],[[11291,11291],"mapped",[11339]],[[11292,11292],"mapped",[11340]],[[11293,11293],"mapped",[11341]],[[11294,11294],"mapped",[11342]],[[11295,11295],"mapped",[11343]],[[11296,11296],"mapped",[11344]],[[11297,11297],"mapped",[11345]],[[11298,11298],"mapped",[11346]],[[11299,11299],"mapped",[11347]],[[11300,11300],"mapped",[11348]],[[11301,11301],"mapped",[11349]],[[11302,11302],"mapped",[11350]],[[11303,11303],"mapped",[11351]],[[11304,11304],"mapped",[11352]],[[11305,11305],"mapped",[11353]],[[11306,11306],"mapped",[11354]],[[11307,11307],"mapped",[11355]],[[11308,11308],"mapped",[11356]],[[11309,11309],"mapped",[11357]],[[11310,11310],"mapped",[11358]],[[11311,11311],"disallowed"],[[11312,11358],"valid"],[[11359,11359],"disallowed"],[[11360,11360],"mapped",[11361]],[[11361,11361],"valid"],[[11362,11362],"mapped",[619]],[[11363,11363],"mapped",[7549]],[[11364,11364],"mapped",[637]],[[11365,11366],"valid"],[[11367,11367],"mapped",[11368]],[[11368,11368],"valid"],[[11369,11369],"mapped",[11370]],[[11370,11370],"valid"],[[11371,11371],"mapped",[11372]],[[11372,11372],"valid"],[[11373,11373],"mapped",[593]],[[11374,11374],"mapped",[625]],[[11375,11375],"mapped",[592]],[[11376,11376],"mapped",[594]],[[11377,11377],"valid"],[[11378,11378],"mapped",[11379]],[[11379,11379],"valid"],[[11380,11380],"valid"],[[11381,11381],"mapped",[11382]],[[11382,11383],"valid"],[[11384,11387],"valid"],[[11388,11388],"mapped",[106]],[[11389,11389],"mapped",[118]],[[11390,11390],"mapped",[575]],[[11391,11391],"mapped",[576]],[[11392,11392],"mapped",[11393]],[[11393,11393],"valid"],[[11394,11394],"mapped",[11395]],[[11395,11395],"valid"],[[11396,11396],"mapped",[11397]],[[11397,11397],"valid"],[[11398,11398],"mapped",[11399]],[[11399,11399],"valid"],[[11400,11400],"mapped",[11401]],[[11401,11401],"valid"],[[11402,11402],"mapped",[11403]],[[11403,11403],"valid"],[[11404,11404],"mapped",[11405]],[[11405,11405],"valid"],[[11406,11406],"mapped",[11407]],[[11407,11407],"valid"],[[11408,11408],"mapped",[11409]],[[11409,11409],"valid"],[[11410,11410],"mapped",[11411]],[[11411,11411],"valid"],[[11412,11412],"mapped",[11413]],[[11413,11413],"valid"],[[11414,11414],"mapped",[11415]],[[11415,11415],"valid"],[[11416,11416],"mapped",[11417]],[[11417,11417],"valid"],[[11418,11418],"mapped",[11419]],[[11419,11419],"valid"],[[11420,11420],"mapped",[11421]],[[11421,11421],"valid"],[[11422,11422],"mapped",[11423]],[[11423,11423],"valid"],[[11424,11424],"mapped",[11425]],[[11425,11425],"valid"],[[11426,11426],"mapped",[11427]],[[11427,11427],"valid"],[[11428,11428],"mapped",[11429]],[[11429,11429],"valid"],[[11430,11430],"mapped",[11431]],[[11431,11431],"valid"],[[11432,11432],"mapped",[11433]],[[11433,11433],"valid"],[[11434,11434],"mapped",[11435]],[[11435,11435],"valid"],[[11436,11436],"mapped",[11437]],[[11437,11437],"valid"],[[11438,11438],"mapped",[11439]],[[11439,11439],"valid"],[[11440,11440],"mapped",[11441]],[[11441,11441],"valid"],[[11442,11442],"mapped",[11443]],[[11443,11443],"valid"],[[11444,11444],"mapped",[11445]],[[11445,11445],"valid"],[[11446,11446],"mapped",[11447]],[[11447,11447],"valid"],[[11448,11448],"mapped",[11449]],[[11449,11449],"valid"],[[11450,11450],"mapped",[11451]],[[11451,11451],"valid"],[[11452,11452],"mapped",[11453]],[[11453,11453],"valid"],[[11454,11454],"mapped",[11455]],[[11455,11455],"valid"],[[11456,11456],"mapped",[11457]],[[11457,11457],"valid"],[[11458,11458],"mapped",[11459]],[[11459,11459],"valid"],[[11460,11460],"mapped",[11461]],[[11461,11461],"valid"],[[11462,11462],"mapped",[11463]],[[11463,11463],"valid"],[[11464,11464],"mapped",[11465]],[[11465,11465],"valid"],[[11466,11466],"mapped",[11467]],[[11467,11467],"valid"],[[11468,11468],"mapped",[11469]],[[11469,11469],"valid"],[[11470,11470],"mapped",[11471]],[[11471,11471],"valid"],[[11472,11472],"mapped",[11473]],[[11473,11473],"valid"],[[11474,11474],"mapped",[11475]],[[11475,11475],"valid"],[[11476,11476],"mapped",[11477]],[[11477,11477],"valid"],[[11478,11478],"mapped",[11479]],[[11479,11479],"valid"],[[11480,11480],"mapped",[11481]],[[11481,11481],"valid"],[[11482,11482],"mapped",[11483]],[[11483,11483],"valid"],[[11484,11484],"mapped",[11485]],[[11485,11485],"valid"],[[11486,11486],"mapped",[11487]],[[11487,11487],"valid"],[[11488,11488],"mapped",[11489]],[[11489,11489],"valid"],[[11490,11490],"mapped",[11491]],[[11491,11492],"valid"],[[11493,11498],"valid",[],"NV8"],[[11499,11499],"mapped",[11500]],[[11500,11500],"valid"],[[11501,11501],"mapped",[11502]],[[11502,11505],"valid"],[[11506,11506],"mapped",[11507]],[[11507,11507],"valid"],[[11508,11512],"disallowed"],[[11513,11519],"valid",[],"NV8"],[[11520,11557],"valid"],[[11558,11558],"disallowed"],[[11559,11559],"valid"],[[11560,11564],"disallowed"],[[11565,11565],"valid"],[[11566,11567],"disallowed"],[[11568,11621],"valid"],[[11622,11623],"valid"],[[11624,11630],"disallowed"],[[11631,11631],"mapped",[11617]],[[11632,11632],"valid",[],"NV8"],[[11633,11646],"disallowed"],[[11647,11647],"valid"],[[11648,11670],"valid"],[[11671,11679],"disallowed"],[[11680,11686],"valid"],[[11687,11687],"disallowed"],[[11688,11694],"valid"],[[11695,11695],"disallowed"],[[11696,11702],"valid"],[[11703,11703],"disallowed"],[[11704,11710],"valid"],[[11711,11711],"disallowed"],[[11712,11718],"valid"],[[11719,11719],"disallowed"],[[11720,11726],"valid"],[[11727,11727],"disallowed"],[[11728,11734],"valid"],[[11735,11735],"disallowed"],[[11736,11742],"valid"],[[11743,11743],"disallowed"],[[11744,11775],"valid"],[[11776,11799],"valid",[],"NV8"],[[11800,11803],"valid",[],"NV8"],[[11804,11805],"valid",[],"NV8"],[[11806,11822],"valid",[],"NV8"],[[11823,11823],"valid"],[[11824,11824],"valid",[],"NV8"],[[11825,11825],"valid",[],"NV8"],[[11826,11835],"valid",[],"NV8"],[[11836,11842],"valid",[],"NV8"],[[11843,11903],"disallowed"],[[11904,11929],"valid",[],"NV8"],[[11930,11930],"disallowed"],[[11931,11934],"valid",[],"NV8"],[[11935,11935],"mapped",[27597]],[[11936,12018],"valid",[],"NV8"],[[12019,12019],"mapped",[40863]],[[12020,12031],"disallowed"],[[12032,12032],"mapped",[19968]],[[12033,12033],"mapped",[20008]],[[12034,12034],"mapped",[20022]],[[12035,12035],"mapped",[20031]],[[12036,12036],"mapped",[20057]],[[12037,12037],"mapped",[20101]],[[12038,12038],"mapped",[20108]],[[12039,12039],"mapped",[20128]],[[12040,12040],"mapped",[20154]],[[12041,12041],"mapped",[20799]],[[12042,12042],"mapped",[20837]],[[12043,12043],"mapped",[20843]],[[12044,12044],"mapped",[20866]],[[12045,12045],"mapped",[20886]],[[12046,12046],"mapped",[20907]],[[12047,12047],"mapped",[20960]],[[12048,12048],"mapped",[20981]],[[12049,12049],"mapped",[20992]],[[12050,12050],"mapped",[21147]],[[12051,12051],"mapped",[21241]],[[12052,12052],"mapped",[21269]],[[12053,12053],"mapped",[21274]],[[12054,12054],"mapped",[21304]],[[12055,12055],"mapped",[21313]],[[12056,12056],"mapped",[21340]],[[12057,12057],"mapped",[21353]],[[12058,12058],"mapped",[21378]],[[12059,12059],"mapped",[21430]],[[12060,12060],"mapped",[21448]],[[12061,12061],"mapped",[21475]],[[12062,12062],"mapped",[22231]],[[12063,12063],"mapped",[22303]],[[12064,12064],"mapped",[22763]],[[12065,12065],"mapped",[22786]],[[12066,12066],"mapped",[22794]],[[12067,12067],"mapped",[22805]],[[12068,12068],"mapped",[22823]],[[12069,12069],"mapped",[22899]],[[12070,12070],"mapped",[23376]],[[12071,12071],"mapped",[23424]],[[12072,12072],"mapped",[23544]],[[12073,12073],"mapped",[23567]],[[12074,12074],"mapped",[23586]],[[12075,12075],"mapped",[23608]],[[12076,12076],"mapped",[23662]],[[12077,12077],"mapped",[23665]],[[12078,12078],"mapped",[24027]],[[12079,12079],"mapped",[24037]],[[12080,12080],"mapped",[24049]],[[12081,12081],"mapped",[24062]],[[12082,12082],"mapped",[24178]],[[12083,12083],"mapped",[24186]],[[12084,12084],"mapped",[24191]],[[12085,12085],"mapped",[24308]],[[12086,12086],"mapped",[24318]],[[12087,12087],"mapped",[24331]],[[12088,12088],"mapped",[24339]],[[12089,12089],"mapped",[24400]],[[12090,12090],"mapped",[24417]],[[12091,12091],"mapped",[24435]],[[12092,12092],"mapped",[24515]],[[12093,12093],"mapped",[25096]],[[12094,12094],"mapped",[25142]],[[12095,12095],"mapped",[25163]],[[12096,12096],"mapped",[25903]],[[12097,12097],"mapped",[25908]],[[12098,12098],"mapped",[25991]],[[12099,12099],"mapped",[26007]],[[12100,12100],"mapped",[26020]],[[12101,12101],"mapped",[26041]],[[12102,12102],"mapped",[26080]],[[12103,12103],"mapped",[26085]],[[12104,12104],"mapped",[26352]],[[12105,12105],"mapped",[26376]],[[12106,12106],"mapped",[26408]],[[12107,12107],"mapped",[27424]],[[12108,12108],"mapped",[27490]],[[12109,12109],"mapped",[27513]],[[12110,12110],"mapped",[27571]],[[12111,12111],"mapped",[27595]],[[12112,12112],"mapped",[27604]],[[12113,12113],"mapped",[27611]],[[12114,12114],"mapped",[27663]],[[12115,12115],"mapped",[27668]],[[12116,12116],"mapped",[27700]],[[12117,12117],"mapped",[28779]],[[12118,12118],"mapped",[29226]],[[12119,12119],"mapped",[29238]],[[12120,12120],"mapped",[29243]],[[12121,12121],"mapped",[29247]],[[12122,12122],"mapped",[29255]],[[12123,12123],"mapped",[29273]],[[12124,12124],"mapped",[29275]],[[12125,12125],"mapped",[29356]],[[12126,12126],"mapped",[29572]],[[12127,12127],"mapped",[29577]],[[12128,12128],"mapped",[29916]],[[12129,12129],"mapped",[29926]],[[12130,12130],"mapped",[29976]],[[12131,12131],"mapped",[29983]],[[12132,12132],"mapped",[29992]],[[12133,12133],"mapped",[3e4]],[[12134,12134],"mapped",[30091]],[[12135,12135],"mapped",[30098]],[[12136,12136],"mapped",[30326]],[[12137,12137],"mapped",[30333]],[[12138,12138],"mapped",[30382]],[[12139,12139],"mapped",[30399]],[[12140,12140],"mapped",[30446]],[[12141,12141],"mapped",[30683]],[[12142,12142],"mapped",[30690]],[[12143,12143],"mapped",[30707]],[[12144,12144],"mapped",[31034]],[[12145,12145],"mapped",[31160]],[[12146,12146],"mapped",[31166]],[[12147,12147],"mapped",[31348]],[[12148,12148],"mapped",[31435]],[[12149,12149],"mapped",[31481]],[[12150,12150],"mapped",[31859]],[[12151,12151],"mapped",[31992]],[[12152,12152],"mapped",[32566]],[[12153,12153],"mapped",[32593]],[[12154,12154],"mapped",[32650]],[[12155,12155],"mapped",[32701]],[[12156,12156],"mapped",[32769]],[[12157,12157],"mapped",[32780]],[[12158,12158],"mapped",[32786]],[[12159,12159],"mapped",[32819]],[[12160,12160],"mapped",[32895]],[[12161,12161],"mapped",[32905]],[[12162,12162],"mapped",[33251]],[[12163,12163],"mapped",[33258]],[[12164,12164],"mapped",[33267]],[[12165,12165],"mapped",[33276]],[[12166,12166],"mapped",[33292]],[[12167,12167],"mapped",[33307]],[[12168,12168],"mapped",[33311]],[[12169,12169],"mapped",[33390]],[[12170,12170],"mapped",[33394]],[[12171,12171],"mapped",[33400]],[[12172,12172],"mapped",[34381]],[[12173,12173],"mapped",[34411]],[[12174,12174],"mapped",[34880]],[[12175,12175],"mapped",[34892]],[[12176,12176],"mapped",[34915]],[[12177,12177],"mapped",[35198]],[[12178,12178],"mapped",[35211]],[[12179,12179],"mapped",[35282]],[[12180,12180],"mapped",[35328]],[[12181,12181],"mapped",[35895]],[[12182,12182],"mapped",[35910]],[[12183,12183],"mapped",[35925]],[[12184,12184],"mapped",[35960]],[[12185,12185],"mapped",[35997]],[[12186,12186],"mapped",[36196]],[[12187,12187],"mapped",[36208]],[[12188,12188],"mapped",[36275]],[[12189,12189],"mapped",[36523]],[[12190,12190],"mapped",[36554]],[[12191,12191],"mapped",[36763]],[[12192,12192],"mapped",[36784]],[[12193,12193],"mapped",[36789]],[[12194,12194],"mapped",[37009]],[[12195,12195],"mapped",[37193]],[[12196,12196],"mapped",[37318]],[[12197,12197],"mapped",[37324]],[[12198,12198],"mapped",[37329]],[[12199,12199],"mapped",[38263]],[[12200,12200],"mapped",[38272]],[[12201,12201],"mapped",[38428]],[[12202,12202],"mapped",[38582]],[[12203,12203],"mapped",[38585]],[[12204,12204],"mapped",[38632]],[[12205,12205],"mapped",[38737]],[[12206,12206],"mapped",[38750]],[[12207,12207],"mapped",[38754]],[[12208,12208],"mapped",[38761]],[[12209,12209],"mapped",[38859]],[[12210,12210],"mapped",[38893]],[[12211,12211],"mapped",[38899]],[[12212,12212],"mapped",[38913]],[[12213,12213],"mapped",[39080]],[[12214,12214],"mapped",[39131]],[[12215,12215],"mapped",[39135]],[[12216,12216],"mapped",[39318]],[[12217,12217],"mapped",[39321]],[[12218,12218],"mapped",[39340]],[[12219,12219],"mapped",[39592]],[[12220,12220],"mapped",[39640]],[[12221,12221],"mapped",[39647]],[[12222,12222],"mapped",[39717]],[[12223,12223],"mapped",[39727]],[[12224,12224],"mapped",[39730]],[[12225,12225],"mapped",[39740]],[[12226,12226],"mapped",[39770]],[[12227,12227],"mapped",[40165]],[[12228,12228],"mapped",[40565]],[[12229,12229],"mapped",[40575]],[[12230,12230],"mapped",[40613]],[[12231,12231],"mapped",[40635]],[[12232,12232],"mapped",[40643]],[[12233,12233],"mapped",[40653]],[[12234,12234],"mapped",[40657]],[[12235,12235],"mapped",[40697]],[[12236,12236],"mapped",[40701]],[[12237,12237],"mapped",[40718]],[[12238,12238],"mapped",[40723]],[[12239,12239],"mapped",[40736]],[[12240,12240],"mapped",[40763]],[[12241,12241],"mapped",[40778]],[[12242,12242],"mapped",[40786]],[[12243,12243],"mapped",[40845]],[[12244,12244],"mapped",[40860]],[[12245,12245],"mapped",[40864]],[[12246,12271],"disallowed"],[[12272,12283],"disallowed"],[[12284,12287],"disallowed"],[[12288,12288],"disallowed_STD3_mapped",[32]],[[12289,12289],"valid",[],"NV8"],[[12290,12290],"mapped",[46]],[[12291,12292],"valid",[],"NV8"],[[12293,12295],"valid"],[[12296,12329],"valid",[],"NV8"],[[12330,12333],"valid"],[[12334,12341],"valid",[],"NV8"],[[12342,12342],"mapped",[12306]],[[12343,12343],"valid",[],"NV8"],[[12344,12344],"mapped",[21313]],[[12345,12345],"mapped",[21316]],[[12346,12346],"mapped",[21317]],[[12347,12347],"valid",[],"NV8"],[[12348,12348],"valid"],[[12349,12349],"valid",[],"NV8"],[[12350,12350],"valid",[],"NV8"],[[12351,12351],"valid",[],"NV8"],[[12352,12352],"disallowed"],[[12353,12436],"valid"],[[12437,12438],"valid"],[[12439,12440],"disallowed"],[[12441,12442],"valid"],[[12443,12443],"disallowed_STD3_mapped",[32,12441]],[[12444,12444],"disallowed_STD3_mapped",[32,12442]],[[12445,12446],"valid"],[[12447,12447],"mapped",[12424,12426]],[[12448,12448],"valid",[],"NV8"],[[12449,12542],"valid"],[[12543,12543],"mapped",[12467,12488]],[[12544,12548],"disallowed"],[[12549,12588],"valid"],[[12589,12589],"valid"],[[12590,12592],"disallowed"],[[12593,12593],"mapped",[4352]],[[12594,12594],"mapped",[4353]],[[12595,12595],"mapped",[4522]],[[12596,12596],"mapped",[4354]],[[12597,12597],"mapped",[4524]],[[12598,12598],"mapped",[4525]],[[12599,12599],"mapped",[4355]],[[12600,12600],"mapped",[4356]],[[12601,12601],"mapped",[4357]],[[12602,12602],"mapped",[4528]],[[12603,12603],"mapped",[4529]],[[12604,12604],"mapped",[4530]],[[12605,12605],"mapped",[4531]],[[12606,12606],"mapped",[4532]],[[12607,12607],"mapped",[4533]],[[12608,12608],"mapped",[4378]],[[12609,12609],"mapped",[4358]],[[12610,12610],"mapped",[4359]],[[12611,12611],"mapped",[4360]],[[12612,12612],"mapped",[4385]],[[12613,12613],"mapped",[4361]],[[12614,12614],"mapped",[4362]],[[12615,12615],"mapped",[4363]],[[12616,12616],"mapped",[4364]],[[12617,12617],"mapped",[4365]],[[12618,12618],"mapped",[4366]],[[12619,12619],"mapped",[4367]],[[12620,12620],"mapped",[4368]],[[12621,12621],"mapped",[4369]],[[12622,12622],"mapped",[4370]],[[12623,12623],"mapped",[4449]],[[12624,12624],"mapped",[4450]],[[12625,12625],"mapped",[4451]],[[12626,12626],"mapped",[4452]],[[12627,12627],"mapped",[4453]],[[12628,12628],"mapped",[4454]],[[12629,12629],"mapped",[4455]],[[12630,12630],"mapped",[4456]],[[12631,12631],"mapped",[4457]],[[12632,12632],"mapped",[4458]],[[12633,12633],"mapped",[4459]],[[12634,12634],"mapped",[4460]],[[12635,12635],"mapped",[4461]],[[12636,12636],"mapped",[4462]],[[12637,12637],"mapped",[4463]],[[12638,12638],"mapped",[4464]],[[12639,12639],"mapped",[4465]],[[12640,12640],"mapped",[4466]],[[12641,12641],"mapped",[4467]],[[12642,12642],"mapped",[4468]],[[12643,12643],"mapped",[4469]],[[12644,12644],"disallowed"],[[12645,12645],"mapped",[4372]],[[12646,12646],"mapped",[4373]],[[12647,12647],"mapped",[4551]],[[12648,12648],"mapped",[4552]],[[12649,12649],"mapped",[4556]],[[12650,12650],"mapped",[4558]],[[12651,12651],"mapped",[4563]],[[12652,12652],"mapped",[4567]],[[12653,12653],"mapped",[4569]],[[12654,12654],"mapped",[4380]],[[12655,12655],"mapped",[4573]],[[12656,12656],"mapped",[4575]],[[12657,12657],"mapped",[4381]],[[12658,12658],"mapped",[4382]],[[12659,12659],"mapped",[4384]],[[12660,12660],"mapped",[4386]],[[12661,12661],"mapped",[4387]],[[12662,12662],"mapped",[4391]],[[12663,12663],"mapped",[4393]],[[12664,12664],"mapped",[4395]],[[12665,12665],"mapped",[4396]],[[12666,12666],"mapped",[4397]],[[12667,12667],"mapped",[4398]],[[12668,12668],"mapped",[4399]],[[12669,12669],"mapped",[4402]],[[12670,12670],"mapped",[4406]],[[12671,12671],"mapped",[4416]],[[12672,12672],"mapped",[4423]],[[12673,12673],"mapped",[4428]],[[12674,12674],"mapped",[4593]],[[12675,12675],"mapped",[4594]],[[12676,12676],"mapped",[4439]],[[12677,12677],"mapped",[4440]],[[12678,12678],"mapped",[4441]],[[12679,12679],"mapped",[4484]],[[12680,12680],"mapped",[4485]],[[12681,12681],"mapped",[4488]],[[12682,12682],"mapped",[4497]],[[12683,12683],"mapped",[4498]],[[12684,12684],"mapped",[4500]],[[12685,12685],"mapped",[4510]],[[12686,12686],"mapped",[4513]],[[12687,12687],"disallowed"],[[12688,12689],"valid",[],"NV8"],[[12690,12690],"mapped",[19968]],[[12691,12691],"mapped",[20108]],[[12692,12692],"mapped",[19977]],[[12693,12693],"mapped",[22235]],[[12694,12694],"mapped",[19978]],[[12695,12695],"mapped",[20013]],[[12696,12696],"mapped",[19979]],[[12697,12697],"mapped",[30002]],[[12698,12698],"mapped",[20057]],[[12699,12699],"mapped",[19993]],[[12700,12700],"mapped",[19969]],[[12701,12701],"mapped",[22825]],[[12702,12702],"mapped",[22320]],[[12703,12703],"mapped",[20154]],[[12704,12727],"valid"],[[12728,12730],"valid"],[[12731,12735],"disallowed"],[[12736,12751],"valid",[],"NV8"],[[12752,12771],"valid",[],"NV8"],[[12772,12783],"disallowed"],[[12784,12799],"valid"],[[12800,12800],"disallowed_STD3_mapped",[40,4352,41]],[[12801,12801],"disallowed_STD3_mapped",[40,4354,41]],[[12802,12802],"disallowed_STD3_mapped",[40,4355,41]],[[12803,12803],"disallowed_STD3_mapped",[40,4357,41]],[[12804,12804],"disallowed_STD3_mapped",[40,4358,41]],[[12805,12805],"disallowed_STD3_mapped",[40,4359,41]],[[12806,12806],"disallowed_STD3_mapped",[40,4361,41]],[[12807,12807],"disallowed_STD3_mapped",[40,4363,41]],[[12808,12808],"disallowed_STD3_mapped",[40,4364,41]],[[12809,12809],"disallowed_STD3_mapped",[40,4366,41]],[[12810,12810],"disallowed_STD3_mapped",[40,4367,41]],[[12811,12811],"disallowed_STD3_mapped",[40,4368,41]],[[12812,12812],"disallowed_STD3_mapped",[40,4369,41]],[[12813,12813],"disallowed_STD3_mapped",[40,4370,41]],[[12814,12814],"disallowed_STD3_mapped",[40,44032,41]],[[12815,12815],"disallowed_STD3_mapped",[40,45208,41]],[[12816,12816],"disallowed_STD3_mapped",[40,45796,41]],[[12817,12817],"disallowed_STD3_mapped",[40,46972,41]],[[12818,12818],"disallowed_STD3_mapped",[40,47560,41]],[[12819,12819],"disallowed_STD3_mapped",[40,48148,41]],[[12820,12820],"disallowed_STD3_mapped",[40,49324,41]],[[12821,12821],"disallowed_STD3_mapped",[40,50500,41]],[[12822,12822],"disallowed_STD3_mapped",[40,51088,41]],[[12823,12823],"disallowed_STD3_mapped",[40,52264,41]],[[12824,12824],"disallowed_STD3_mapped",[40,52852,41]],[[12825,12825],"disallowed_STD3_mapped",[40,53440,41]],[[12826,12826],"disallowed_STD3_mapped",[40,54028,41]],[[12827,12827],"disallowed_STD3_mapped",[40,54616,41]],[[12828,12828],"disallowed_STD3_mapped",[40,51452,41]],[[12829,12829],"disallowed_STD3_mapped",[40,50724,51204,41]],[[12830,12830],"disallowed_STD3_mapped",[40,50724,54980,41]],[[12831,12831],"disallowed"],[[12832,12832],"disallowed_STD3_mapped",[40,19968,41]],[[12833,12833],"disallowed_STD3_mapped",[40,20108,41]],[[12834,12834],"disallowed_STD3_mapped",[40,19977,41]],[[12835,12835],"disallowed_STD3_mapped",[40,22235,41]],[[12836,12836],"disallowed_STD3_mapped",[40,20116,41]],[[12837,12837],"disallowed_STD3_mapped",[40,20845,41]],[[12838,12838],"disallowed_STD3_mapped",[40,19971,41]],[[12839,12839],"disallowed_STD3_mapped",[40,20843,41]],[[12840,12840],"disallowed_STD3_mapped",[40,20061,41]],[[12841,12841],"disallowed_STD3_mapped",[40,21313,41]],[[12842,12842],"disallowed_STD3_mapped",[40,26376,41]],[[12843,12843],"disallowed_STD3_mapped",[40,28779,41]],[[12844,12844],"disallowed_STD3_mapped",[40,27700,41]],[[12845,12845],"disallowed_STD3_mapped",[40,26408,41]],[[12846,12846],"disallowed_STD3_mapped",[40,37329,41]],[[12847,12847],"disallowed_STD3_mapped",[40,22303,41]],[[12848,12848],"disallowed_STD3_mapped",[40,26085,41]],[[12849,12849],"disallowed_STD3_mapped",[40,26666,41]],[[12850,12850],"disallowed_STD3_mapped",[40,26377,41]],[[12851,12851],"disallowed_STD3_mapped",[40,31038,41]],[[12852,12852],"disallowed_STD3_mapped",[40,21517,41]],[[12853,12853],"disallowed_STD3_mapped",[40,29305,41]],[[12854,12854],"disallowed_STD3_mapped",[40,36001,41]],[[12855,12855],"disallowed_STD3_mapped",[40,31069,41]],[[12856,12856],"disallowed_STD3_mapped",[40,21172,41]],[[12857,12857],"disallowed_STD3_mapped",[40,20195,41]],[[12858,12858],"disallowed_STD3_mapped",[40,21628,41]],[[12859,12859],"disallowed_STD3_mapped",[40,23398,41]],[[12860,12860],"disallowed_STD3_mapped",[40,30435,41]],[[12861,12861],"disallowed_STD3_mapped",[40,20225,41]],[[12862,12862],"disallowed_STD3_mapped",[40,36039,41]],[[12863,12863],"disallowed_STD3_mapped",[40,21332,41]],[[12864,12864],"disallowed_STD3_mapped",[40,31085,41]],[[12865,12865],"disallowed_STD3_mapped",[40,20241,41]],[[12866,12866],"disallowed_STD3_mapped",[40,33258,41]],[[12867,12867],"disallowed_STD3_mapped",[40,33267,41]],[[12868,12868],"mapped",[21839]],[[12869,12869],"mapped",[24188]],[[12870,12870],"mapped",[25991]],[[12871,12871],"mapped",[31631]],[[12872,12879],"valid",[],"NV8"],[[12880,12880],"mapped",[112,116,101]],[[12881,12881],"mapped",[50,49]],[[12882,12882],"mapped",[50,50]],[[12883,12883],"mapped",[50,51]],[[12884,12884],"mapped",[50,52]],[[12885,12885],"mapped",[50,53]],[[12886,12886],"mapped",[50,54]],[[12887,12887],"mapped",[50,55]],[[12888,12888],"mapped",[50,56]],[[12889,12889],"mapped",[50,57]],[[12890,12890],"mapped",[51,48]],[[12891,12891],"mapped",[51,49]],[[12892,12892],"mapped",[51,50]],[[12893,12893],"mapped",[51,51]],[[12894,12894],"mapped",[51,52]],[[12895,12895],"mapped",[51,53]],[[12896,12896],"mapped",[4352]],[[12897,12897],"mapped",[4354]],[[12898,12898],"mapped",[4355]],[[12899,12899],"mapped",[4357]],[[12900,12900],"mapped",[4358]],[[12901,12901],"mapped",[4359]],[[12902,12902],"mapped",[4361]],[[12903,12903],"mapped",[4363]],[[12904,12904],"mapped",[4364]],[[12905,12905],"mapped",[4366]],[[12906,12906],"mapped",[4367]],[[12907,12907],"mapped",[4368]],[[12908,12908],"mapped",[4369]],[[12909,12909],"mapped",[4370]],[[12910,12910],"mapped",[44032]],[[12911,12911],"mapped",[45208]],[[12912,12912],"mapped",[45796]],[[12913,12913],"mapped",[46972]],[[12914,12914],"mapped",[47560]],[[12915,12915],"mapped",[48148]],[[12916,12916],"mapped",[49324]],[[12917,12917],"mapped",[50500]],[[12918,12918],"mapped",[51088]],[[12919,12919],"mapped",[52264]],[[12920,12920],"mapped",[52852]],[[12921,12921],"mapped",[53440]],[[12922,12922],"mapped",[54028]],[[12923,12923],"mapped",[54616]],[[12924,12924],"mapped",[52280,44256]],[[12925,12925],"mapped",[51452,51032]],[[12926,12926],"mapped",[50864]],[[12927,12927],"valid",[],"NV8"],[[12928,12928],"mapped",[19968]],[[12929,12929],"mapped",[20108]],[[12930,12930],"mapped",[19977]],[[12931,12931],"mapped",[22235]],[[12932,12932],"mapped",[20116]],[[12933,12933],"mapped",[20845]],[[12934,12934],"mapped",[19971]],[[12935,12935],"mapped",[20843]],[[12936,12936],"mapped",[20061]],[[12937,12937],"mapped",[21313]],[[12938,12938],"mapped",[26376]],[[12939,12939],"mapped",[28779]],[[12940,12940],"mapped",[27700]],[[12941,12941],"mapped",[26408]],[[12942,12942],"mapped",[37329]],[[12943,12943],"mapped",[22303]],[[12944,12944],"mapped",[26085]],[[12945,12945],"mapped",[26666]],[[12946,12946],"mapped",[26377]],[[12947,12947],"mapped",[31038]],[[12948,12948],"mapped",[21517]],[[12949,12949],"mapped",[29305]],[[12950,12950],"mapped",[36001]],[[12951,12951],"mapped",[31069]],[[12952,12952],"mapped",[21172]],[[12953,12953],"mapped",[31192]],[[12954,12954],"mapped",[30007]],[[12955,12955],"mapped",[22899]],[[12956,12956],"mapped",[36969]],[[12957,12957],"mapped",[20778]],[[12958,12958],"mapped",[21360]],[[12959,12959],"mapped",[27880]],[[12960,12960],"mapped",[38917]],[[12961,12961],"mapped",[20241]],[[12962,12962],"mapped",[20889]],[[12963,12963],"mapped",[27491]],[[12964,12964],"mapped",[19978]],[[12965,12965],"mapped",[20013]],[[12966,12966],"mapped",[19979]],[[12967,12967],"mapped",[24038]],[[12968,12968],"mapped",[21491]],[[12969,12969],"mapped",[21307]],[[12970,12970],"mapped",[23447]],[[12971,12971],"mapped",[23398]],[[12972,12972],"mapped",[30435]],[[12973,12973],"mapped",[20225]],[[12974,12974],"mapped",[36039]],[[12975,12975],"mapped",[21332]],[[12976,12976],"mapped",[22812]],[[12977,12977],"mapped",[51,54]],[[12978,12978],"mapped",[51,55]],[[12979,12979],"mapped",[51,56]],[[12980,12980],"mapped",[51,57]],[[12981,12981],"mapped",[52,48]],[[12982,12982],"mapped",[52,49]],[[12983,12983],"mapped",[52,50]],[[12984,12984],"mapped",[52,51]],[[12985,12985],"mapped",[52,52]],[[12986,12986],"mapped",[52,53]],[[12987,12987],"mapped",[52,54]],[[12988,12988],"mapped",[52,55]],[[12989,12989],"mapped",[52,56]],[[12990,12990],"mapped",[52,57]],[[12991,12991],"mapped",[53,48]],[[12992,12992],"mapped",[49,26376]],[[12993,12993],"mapped",[50,26376]],[[12994,12994],"mapped",[51,26376]],[[12995,12995],"mapped",[52,26376]],[[12996,12996],"mapped",[53,26376]],[[12997,12997],"mapped",[54,26376]],[[12998,12998],"mapped",[55,26376]],[[12999,12999],"mapped",[56,26376]],[[13e3,13e3],"mapped",[57,26376]],[[13001,13001],"mapped",[49,48,26376]],[[13002,13002],"mapped",[49,49,26376]],[[13003,13003],"mapped",[49,50,26376]],[[13004,13004],"mapped",[104,103]],[[13005,13005],"mapped",[101,114,103]],[[13006,13006],"mapped",[101,118]],[[13007,13007],"mapped",[108,116,100]],[[13008,13008],"mapped",[12450]],[[13009,13009],"mapped",[12452]],[[13010,13010],"mapped",[12454]],[[13011,13011],"mapped",[12456]],[[13012,13012],"mapped",[12458]],[[13013,13013],"mapped",[12459]],[[13014,13014],"mapped",[12461]],[[13015,13015],"mapped",[12463]],[[13016,13016],"mapped",[12465]],[[13017,13017],"mapped",[12467]],[[13018,13018],"mapped",[12469]],[[13019,13019],"mapped",[12471]],[[13020,13020],"mapped",[12473]],[[13021,13021],"mapped",[12475]],[[13022,13022],"mapped",[12477]],[[13023,13023],"mapped",[12479]],[[13024,13024],"mapped",[12481]],[[13025,13025],"mapped",[12484]],[[13026,13026],"mapped",[12486]],[[13027,13027],"mapped",[12488]],[[13028,13028],"mapped",[12490]],[[13029,13029],"mapped",[12491]],[[13030,13030],"mapped",[12492]],[[13031,13031],"mapped",[12493]],[[13032,13032],"mapped",[12494]],[[13033,13033],"mapped",[12495]],[[13034,13034],"mapped",[12498]],[[13035,13035],"mapped",[12501]],[[13036,13036],"mapped",[12504]],[[13037,13037],"mapped",[12507]],[[13038,13038],"mapped",[12510]],[[13039,13039],"mapped",[12511]],[[13040,13040],"mapped",[12512]],[[13041,13041],"mapped",[12513]],[[13042,13042],"mapped",[12514]],[[13043,13043],"mapped",[12516]],[[13044,13044],"mapped",[12518]],[[13045,13045],"mapped",[12520]],[[13046,13046],"mapped",[12521]],[[13047,13047],"mapped",[12522]],[[13048,13048],"mapped",[12523]],[[13049,13049],"mapped",[12524]],[[13050,13050],"mapped",[12525]],[[13051,13051],"mapped",[12527]],[[13052,13052],"mapped",[12528]],[[13053,13053],"mapped",[12529]],[[13054,13054],"mapped",[12530]],[[13055,13055],"disallowed"],[[13056,13056],"mapped",[12450,12497,12540,12488]],[[13057,13057],"mapped",[12450,12523,12501,12449]],[[13058,13058],"mapped",[12450,12531,12506,12450]],[[13059,13059],"mapped",[12450,12540,12523]],[[13060,13060],"mapped",[12452,12491,12531,12464]],[[13061,13061],"mapped",[12452,12531,12481]],[[13062,13062],"mapped",[12454,12457,12531]],[[13063,13063],"mapped",[12456,12473,12463,12540,12489]],[[13064,13064],"mapped",[12456,12540,12459,12540]],[[13065,13065],"mapped",[12458,12531,12473]],[[13066,13066],"mapped",[12458,12540,12512]],[[13067,13067],"mapped",[12459,12452,12522]],[[13068,13068],"mapped",[12459,12521,12483,12488]],[[13069,13069],"mapped",[12459,12525,12522,12540]],[[13070,13070],"mapped",[12460,12525,12531]],[[13071,13071],"mapped",[12460,12531,12510]],[[13072,13072],"mapped",[12462,12460]],[[13073,13073],"mapped",[12462,12491,12540]],[[13074,13074],"mapped",[12461,12517,12522,12540]],[[13075,13075],"mapped",[12462,12523,12480,12540]],[[13076,13076],"mapped",[12461,12525]],[[13077,13077],"mapped",[12461,12525,12464,12521,12512]],[[13078,13078],"mapped",[12461,12525,12513,12540,12488,12523]],[[13079,13079],"mapped",[12461,12525,12527,12483,12488]],[[13080,13080],"mapped",[12464,12521,12512]],[[13081,13081],"mapped",[12464,12521,12512,12488,12531]],[[13082,13082],"mapped",[12463,12523,12476,12452,12525]],[[13083,13083],"mapped",[12463,12525,12540,12493]],[[13084,13084],"mapped",[12465,12540,12473]],[[13085,13085],"mapped",[12467,12523,12490]],[[13086,13086],"mapped",[12467,12540,12509]],[[13087,13087],"mapped",[12469,12452,12463,12523]],[[13088,13088],"mapped",[12469,12531,12481,12540,12512]],[[13089,13089],"mapped",[12471,12522,12531,12464]],[[13090,13090],"mapped",[12475,12531,12481]],[[13091,13091],"mapped",[12475,12531,12488]],[[13092,13092],"mapped",[12480,12540,12473]],[[13093,13093],"mapped",[12487,12471]],[[13094,13094],"mapped",[12489,12523]],[[13095,13095],"mapped",[12488,12531]],[[13096,13096],"mapped",[12490,12494]],[[13097,13097],"mapped",[12494,12483,12488]],[[13098,13098],"mapped",[12495,12452,12484]],[[13099,13099],"mapped",[12497,12540,12475,12531,12488]],[[13100,13100],"mapped",[12497,12540,12484]],[[13101,13101],"mapped",[12496,12540,12524,12523]],[[13102,13102],"mapped",[12500,12450,12473,12488,12523]],[[13103,13103],"mapped",[12500,12463,12523]],[[13104,13104],"mapped",[12500,12467]],[[13105,13105],"mapped",[12499,12523]],[[13106,13106],"mapped",[12501,12449,12521,12483,12489]],[[13107,13107],"mapped",[12501,12451,12540,12488]],[[13108,13108],"mapped",[12502,12483,12471,12455,12523]],[[13109,13109],"mapped",[12501,12521,12531]],[[13110,13110],"mapped",[12504,12463,12479,12540,12523]],[[13111,13111],"mapped",[12506,12477]],[[13112,13112],"mapped",[12506,12491,12498]],[[13113,13113],"mapped",[12504,12523,12484]],[[13114,13114],"mapped",[12506,12531,12473]],[[13115,13115],"mapped",[12506,12540,12472]],[[13116,13116],"mapped",[12505,12540,12479]],[[13117,13117],"mapped",[12509,12452,12531,12488]],[[13118,13118],"mapped",[12508,12523,12488]],[[13119,13119],"mapped",[12507,12531]],[[13120,13120],"mapped",[12509,12531,12489]],[[13121,13121],"mapped",[12507,12540,12523]],[[13122,13122],"mapped",[12507,12540,12531]],[[13123,13123],"mapped",[12510,12452,12463,12525]],[[13124,13124],"mapped",[12510,12452,12523]],[[13125,13125],"mapped",[12510,12483,12495]],[[13126,13126],"mapped",[12510,12523,12463]],[[13127,13127],"mapped",[12510,12531,12471,12519,12531]],[[13128,13128],"mapped",[12511,12463,12525,12531]],[[13129,13129],"mapped",[12511,12522]],[[13130,13130],"mapped",[12511,12522,12496,12540,12523]],[[13131,13131],"mapped",[12513,12460]],[[13132,13132],"mapped",[12513,12460,12488,12531]],[[13133,13133],"mapped",[12513,12540,12488,12523]],[[13134,13134],"mapped",[12516,12540,12489]],[[13135,13135],"mapped",[12516,12540,12523]],[[13136,13136],"mapped",[12518,12450,12531]],[[13137,13137],"mapped",[12522,12483,12488,12523]],[[13138,13138],"mapped",[12522,12521]],[[13139,13139],"mapped",[12523,12500,12540]],[[13140,13140],"mapped",[12523,12540,12502,12523]],[[13141,13141],"mapped",[12524,12512]],[[13142,13142],"mapped",[12524,12531,12488,12466,12531]],[[13143,13143],"mapped",[12527,12483,12488]],[[13144,13144],"mapped",[48,28857]],[[13145,13145],"mapped",[49,28857]],[[13146,13146],"mapped",[50,28857]],[[13147,13147],"mapped",[51,28857]],[[13148,13148],"mapped",[52,28857]],[[13149,13149],"mapped",[53,28857]],[[13150,13150],"mapped",[54,28857]],[[13151,13151],"mapped",[55,28857]],[[13152,13152],"mapped",[56,28857]],[[13153,13153],"mapped",[57,28857]],[[13154,13154],"mapped",[49,48,28857]],[[13155,13155],"mapped",[49,49,28857]],[[13156,13156],"mapped",[49,50,28857]],[[13157,13157],"mapped",[49,51,28857]],[[13158,13158],"mapped",[49,52,28857]],[[13159,13159],"mapped",[49,53,28857]],[[13160,13160],"mapped",[49,54,28857]],[[13161,13161],"mapped",[49,55,28857]],[[13162,13162],"mapped",[49,56,28857]],[[13163,13163],"mapped",[49,57,28857]],[[13164,13164],"mapped",[50,48,28857]],[[13165,13165],"mapped",[50,49,28857]],[[13166,13166],"mapped",[50,50,28857]],[[13167,13167],"mapped",[50,51,28857]],[[13168,13168],"mapped",[50,52,28857]],[[13169,13169],"mapped",[104,112,97]],[[13170,13170],"mapped",[100,97]],[[13171,13171],"mapped",[97,117]],[[13172,13172],"mapped",[98,97,114]],[[13173,13173],"mapped",[111,118]],[[13174,13174],"mapped",[112,99]],[[13175,13175],"mapped",[100,109]],[[13176,13176],"mapped",[100,109,50]],[[13177,13177],"mapped",[100,109,51]],[[13178,13178],"mapped",[105,117]],[[13179,13179],"mapped",[24179,25104]],[[13180,13180],"mapped",[26157,21644]],[[13181,13181],"mapped",[22823,27491]],[[13182,13182],"mapped",[26126,27835]],[[13183,13183],"mapped",[26666,24335,20250,31038]],[[13184,13184],"mapped",[112,97]],[[13185,13185],"mapped",[110,97]],[[13186,13186],"mapped",[956,97]],[[13187,13187],"mapped",[109,97]],[[13188,13188],"mapped",[107,97]],[[13189,13189],"mapped",[107,98]],[[13190,13190],"mapped",[109,98]],[[13191,13191],"mapped",[103,98]],[[13192,13192],"mapped",[99,97,108]],[[13193,13193],"mapped",[107,99,97,108]],[[13194,13194],"mapped",[112,102]],[[13195,13195],"mapped",[110,102]],[[13196,13196],"mapped",[956,102]],[[13197,13197],"mapped",[956,103]],[[13198,13198],"mapped",[109,103]],[[13199,13199],"mapped",[107,103]],[[13200,13200],"mapped",[104,122]],[[13201,13201],"mapped",[107,104,122]],[[13202,13202],"mapped",[109,104,122]],[[13203,13203],"mapped",[103,104,122]],[[13204,13204],"mapped",[116,104,122]],[[13205,13205],"mapped",[956,108]],[[13206,13206],"mapped",[109,108]],[[13207,13207],"mapped",[100,108]],[[13208,13208],"mapped",[107,108]],[[13209,13209],"mapped",[102,109]],[[13210,13210],"mapped",[110,109]],[[13211,13211],"mapped",[956,109]],[[13212,13212],"mapped",[109,109]],[[13213,13213],"mapped",[99,109]],[[13214,13214],"mapped",[107,109]],[[13215,13215],"mapped",[109,109,50]],[[13216,13216],"mapped",[99,109,50]],[[13217,13217],"mapped",[109,50]],[[13218,13218],"mapped",[107,109,50]],[[13219,13219],"mapped",[109,109,51]],[[13220,13220],"mapped",[99,109,51]],[[13221,13221],"mapped",[109,51]],[[13222,13222],"mapped",[107,109,51]],[[13223,13223],"mapped",[109,8725,115]],[[13224,13224],"mapped",[109,8725,115,50]],[[13225,13225],"mapped",[112,97]],[[13226,13226],"mapped",[107,112,97]],[[13227,13227],"mapped",[109,112,97]],[[13228,13228],"mapped",[103,112,97]],[[13229,13229],"mapped",[114,97,100]],[[13230,13230],"mapped",[114,97,100,8725,115]],[[13231,13231],"mapped",[114,97,100,8725,115,50]],[[13232,13232],"mapped",[112,115]],[[13233,13233],"mapped",[110,115]],[[13234,13234],"mapped",[956,115]],[[13235,13235],"mapped",[109,115]],[[13236,13236],"mapped",[112,118]],[[13237,13237],"mapped",[110,118]],[[13238,13238],"mapped",[956,118]],[[13239,13239],"mapped",[109,118]],[[13240,13240],"mapped",[107,118]],[[13241,13241],"mapped",[109,118]],[[13242,13242],"mapped",[112,119]],[[13243,13243],"mapped",[110,119]],[[13244,13244],"mapped",[956,119]],[[13245,13245],"mapped",[109,119]],[[13246,13246],"mapped",[107,119]],[[13247,13247],"mapped",[109,119]],[[13248,13248],"mapped",[107,969]],[[13249,13249],"mapped",[109,969]],[[13250,13250],"disallowed"],[[13251,13251],"mapped",[98,113]],[[13252,13252],"mapped",[99,99]],[[13253,13253],"mapped",[99,100]],[[13254,13254],"mapped",[99,8725,107,103]],[[13255,13255],"disallowed"],[[13256,13256],"mapped",[100,98]],[[13257,13257],"mapped",[103,121]],[[13258,13258],"mapped",[104,97]],[[13259,13259],"mapped",[104,112]],[[13260,13260],"mapped",[105,110]],[[13261,13261],"mapped",[107,107]],[[13262,13262],"mapped",[107,109]],[[13263,13263],"mapped",[107,116]],[[13264,13264],"mapped",[108,109]],[[13265,13265],"mapped",[108,110]],[[13266,13266],"mapped",[108,111,103]],[[13267,13267],"mapped",[108,120]],[[13268,13268],"mapped",[109,98]],[[13269,13269],"mapped",[109,105,108]],[[13270,13270],"mapped",[109,111,108]],[[13271,13271],"mapped",[112,104]],[[13272,13272],"disallowed"],[[13273,13273],"mapped",[112,112,109]],[[13274,13274],"mapped",[112,114]],[[13275,13275],"mapped",[115,114]],[[13276,13276],"mapped",[115,118]],[[13277,13277],"mapped",[119,98]],[[13278,13278],"mapped",[118,8725,109]],[[13279,13279],"mapped",[97,8725,109]],[[13280,13280],"mapped",[49,26085]],[[13281,13281],"mapped",[50,26085]],[[13282,13282],"mapped",[51,26085]],[[13283,13283],"mapped",[52,26085]],[[13284,13284],"mapped",[53,26085]],[[13285,13285],"mapped",[54,26085]],[[13286,13286],"mapped",[55,26085]],[[13287,13287],"mapped",[56,26085]],[[13288,13288],"mapped",[57,26085]],[[13289,13289],"mapped",[49,48,26085]],[[13290,13290],"mapped",[49,49,26085]],[[13291,13291],"mapped",[49,50,26085]],[[13292,13292],"mapped",[49,51,26085]],[[13293,13293],"mapped",[49,52,26085]],[[13294,13294],"mapped",[49,53,26085]],[[13295,13295],"mapped",[49,54,26085]],[[13296,13296],"mapped",[49,55,26085]],[[13297,13297],"mapped",[49,56,26085]],[[13298,13298],"mapped",[49,57,26085]],[[13299,13299],"mapped",[50,48,26085]],[[13300,13300],"mapped",[50,49,26085]],[[13301,13301],"mapped",[50,50,26085]],[[13302,13302],"mapped",[50,51,26085]],[[13303,13303],"mapped",[50,52,26085]],[[13304,13304],"mapped",[50,53,26085]],[[13305,13305],"mapped",[50,54,26085]],[[13306,13306],"mapped",[50,55,26085]],[[13307,13307],"mapped",[50,56,26085]],[[13308,13308],"mapped",[50,57,26085]],[[13309,13309],"mapped",[51,48,26085]],[[13310,13310],"mapped",[51,49,26085]],[[13311,13311],"mapped",[103,97,108]],[[13312,19893],"valid"],[[19894,19903],"disallowed"],[[19904,19967],"valid",[],"NV8"],[[19968,40869],"valid"],[[40870,40891],"valid"],[[40892,40899],"valid"],[[40900,40907],"valid"],[[40908,40908],"valid"],[[40909,40917],"valid"],[[40918,40959],"disallowed"],[[40960,42124],"valid"],[[42125,42127],"disallowed"],[[42128,42145],"valid",[],"NV8"],[[42146,42147],"valid",[],"NV8"],[[42148,42163],"valid",[],"NV8"],[[42164,42164],"valid",[],"NV8"],[[42165,42176],"valid",[],"NV8"],[[42177,42177],"valid",[],"NV8"],[[42178,42180],"valid",[],"NV8"],[[42181,42181],"valid",[],"NV8"],[[42182,42182],"valid",[],"NV8"],[[42183,42191],"disallowed"],[[42192,42237],"valid"],[[42238,42239],"valid",[],"NV8"],[[42240,42508],"valid"],[[42509,42511],"valid",[],"NV8"],[[42512,42539],"valid"],[[42540,42559],"disallowed"],[[42560,42560],"mapped",[42561]],[[42561,42561],"valid"],[[42562,42562],"mapped",[42563]],[[42563,42563],"valid"],[[42564,42564],"mapped",[42565]],[[42565,42565],"valid"],[[42566,42566],"mapped",[42567]],[[42567,42567],"valid"],[[42568,42568],"mapped",[42569]],[[42569,42569],"valid"],[[42570,42570],"mapped",[42571]],[[42571,42571],"valid"],[[42572,42572],"mapped",[42573]],[[42573,42573],"valid"],[[42574,42574],"mapped",[42575]],[[42575,42575],"valid"],[[42576,42576],"mapped",[42577]],[[42577,42577],"valid"],[[42578,42578],"mapped",[42579]],[[42579,42579],"valid"],[[42580,42580],"mapped",[42581]],[[42581,42581],"valid"],[[42582,42582],"mapped",[42583]],[[42583,42583],"valid"],[[42584,42584],"mapped",[42585]],[[42585,42585],"valid"],[[42586,42586],"mapped",[42587]],[[42587,42587],"valid"],[[42588,42588],"mapped",[42589]],[[42589,42589],"valid"],[[42590,42590],"mapped",[42591]],[[42591,42591],"valid"],[[42592,42592],"mapped",[42593]],[[42593,42593],"valid"],[[42594,42594],"mapped",[42595]],[[42595,42595],"valid"],[[42596,42596],"mapped",[42597]],[[42597,42597],"valid"],[[42598,42598],"mapped",[42599]],[[42599,42599],"valid"],[[42600,42600],"mapped",[42601]],[[42601,42601],"valid"],[[42602,42602],"mapped",[42603]],[[42603,42603],"valid"],[[42604,42604],"mapped",[42605]],[[42605,42607],"valid"],[[42608,42611],"valid",[],"NV8"],[[42612,42619],"valid"],[[42620,42621],"valid"],[[42622,42622],"valid",[],"NV8"],[[42623,42623],"valid"],[[42624,42624],"mapped",[42625]],[[42625,42625],"valid"],[[42626,42626],"mapped",[42627]],[[42627,42627],"valid"],[[42628,42628],"mapped",[42629]],[[42629,42629],"valid"],[[42630,42630],"mapped",[42631]],[[42631,42631],"valid"],[[42632,42632],"mapped",[42633]],[[42633,42633],"valid"],[[42634,42634],"mapped",[42635]],[[42635,42635],"valid"],[[42636,42636],"mapped",[42637]],[[42637,42637],"valid"],[[42638,42638],"mapped",[42639]],[[42639,42639],"valid"],[[42640,42640],"mapped",[42641]],[[42641,42641],"valid"],[[42642,42642],"mapped",[42643]],[[42643,42643],"valid"],[[42644,42644],"mapped",[42645]],[[42645,42645],"valid"],[[42646,42646],"mapped",[42647]],[[42647,42647],"valid"],[[42648,42648],"mapped",[42649]],[[42649,42649],"valid"],[[42650,42650],"mapped",[42651]],[[42651,42651],"valid"],[[42652,42652],"mapped",[1098]],[[42653,42653],"mapped",[1100]],[[42654,42654],"valid"],[[42655,42655],"valid"],[[42656,42725],"valid"],[[42726,42735],"valid",[],"NV8"],[[42736,42737],"valid"],[[42738,42743],"valid",[],"NV8"],[[42744,42751],"disallowed"],[[42752,42774],"valid",[],"NV8"],[[42775,42778],"valid"],[[42779,42783],"valid"],[[42784,42785],"valid",[],"NV8"],[[42786,42786],"mapped",[42787]],[[42787,42787],"valid"],[[42788,42788],"mapped",[42789]],[[42789,42789],"valid"],[[42790,42790],"mapped",[42791]],[[42791,42791],"valid"],[[42792,42792],"mapped",[42793]],[[42793,42793],"valid"],[[42794,42794],"mapped",[42795]],[[42795,42795],"valid"],[[42796,42796],"mapped",[42797]],[[42797,42797],"valid"],[[42798,42798],"mapped",[42799]],[[42799,42801],"valid"],[[42802,42802],"mapped",[42803]],[[42803,42803],"valid"],[[42804,42804],"mapped",[42805]],[[42805,42805],"valid"],[[42806,42806],"mapped",[42807]],[[42807,42807],"valid"],[[42808,42808],"mapped",[42809]],[[42809,42809],"valid"],[[42810,42810],"mapped",[42811]],[[42811,42811],"valid"],[[42812,42812],"mapped",[42813]],[[42813,42813],"valid"],[[42814,42814],"mapped",[42815]],[[42815,42815],"valid"],[[42816,42816],"mapped",[42817]],[[42817,42817],"valid"],[[42818,42818],"mapped",[42819]],[[42819,42819],"valid"],[[42820,42820],"mapped",[42821]],[[42821,42821],"valid"],[[42822,42822],"mapped",[42823]],[[42823,42823],"valid"],[[42824,42824],"mapped",[42825]],[[42825,42825],"valid"],[[42826,42826],"mapped",[42827]],[[42827,42827],"valid"],[[42828,42828],"mapped",[42829]],[[42829,42829],"valid"],[[42830,42830],"mapped",[42831]],[[42831,42831],"valid"],[[42832,42832],"mapped",[42833]],[[42833,42833],"valid"],[[42834,42834],"mapped",[42835]],[[42835,42835],"valid"],[[42836,42836],"mapped",[42837]],[[42837,42837],"valid"],[[42838,42838],"mapped",[42839]],[[42839,42839],"valid"],[[42840,42840],"mapped",[42841]],[[42841,42841],"valid"],[[42842,42842],"mapped",[42843]],[[42843,42843],"valid"],[[42844,42844],"mapped",[42845]],[[42845,42845],"valid"],[[42846,42846],"mapped",[42847]],[[42847,42847],"valid"],[[42848,42848],"mapped",[42849]],[[42849,42849],"valid"],[[42850,42850],"mapped",[42851]],[[42851,42851],"valid"],[[42852,42852],"mapped",[42853]],[[42853,42853],"valid"],[[42854,42854],"mapped",[42855]],[[42855,42855],"valid"],[[42856,42856],"mapped",[42857]],[[42857,42857],"valid"],[[42858,42858],"mapped",[42859]],[[42859,42859],"valid"],[[42860,42860],"mapped",[42861]],[[42861,42861],"valid"],[[42862,42862],"mapped",[42863]],[[42863,42863],"valid"],[[42864,42864],"mapped",[42863]],[[42865,42872],"valid"],[[42873,42873],"mapped",[42874]],[[42874,42874],"valid"],[[42875,42875],"mapped",[42876]],[[42876,42876],"valid"],[[42877,42877],"mapped",[7545]],[[42878,42878],"mapped",[42879]],[[42879,42879],"valid"],[[42880,42880],"mapped",[42881]],[[42881,42881],"valid"],[[42882,42882],"mapped",[42883]],[[42883,42883],"valid"],[[42884,42884],"mapped",[42885]],[[42885,42885],"valid"],[[42886,42886],"mapped",[42887]],[[42887,42888],"valid"],[[42889,42890],"valid",[],"NV8"],[[42891,42891],"mapped",[42892]],[[42892,42892],"valid"],[[42893,42893],"mapped",[613]],[[42894,42894],"valid"],[[42895,42895],"valid"],[[42896,42896],"mapped",[42897]],[[42897,42897],"valid"],[[42898,42898],"mapped",[42899]],[[42899,42899],"valid"],[[42900,42901],"valid"],[[42902,42902],"mapped",[42903]],[[42903,42903],"valid"],[[42904,42904],"mapped",[42905]],[[42905,42905],"valid"],[[42906,42906],"mapped",[42907]],[[42907,42907],"valid"],[[42908,42908],"mapped",[42909]],[[42909,42909],"valid"],[[42910,42910],"mapped",[42911]],[[42911,42911],"valid"],[[42912,42912],"mapped",[42913]],[[42913,42913],"valid"],[[42914,42914],"mapped",[42915]],[[42915,42915],"valid"],[[42916,42916],"mapped",[42917]],[[42917,42917],"valid"],[[42918,42918],"mapped",[42919]],[[42919,42919],"valid"],[[42920,42920],"mapped",[42921]],[[42921,42921],"valid"],[[42922,42922],"mapped",[614]],[[42923,42923],"mapped",[604]],[[42924,42924],"mapped",[609]],[[42925,42925],"mapped",[620]],[[42926,42927],"disallowed"],[[42928,42928],"mapped",[670]],[[42929,42929],"mapped",[647]],[[42930,42930],"mapped",[669]],[[42931,42931],"mapped",[43859]],[[42932,42932],"mapped",[42933]],[[42933,42933],"valid"],[[42934,42934],"mapped",[42935]],[[42935,42935],"valid"],[[42936,42998],"disallowed"],[[42999,42999],"valid"],[[43e3,43e3],"mapped",[295]],[[43001,43001],"mapped",[339]],[[43002,43002],"valid"],[[43003,43007],"valid"],[[43008,43047],"valid"],[[43048,43051],"valid",[],"NV8"],[[43052,43055],"disallowed"],[[43056,43065],"valid",[],"NV8"],[[43066,43071],"disallowed"],[[43072,43123],"valid"],[[43124,43127],"valid",[],"NV8"],[[43128,43135],"disallowed"],[[43136,43204],"valid"],[[43205,43213],"disallowed"],[[43214,43215],"valid",[],"NV8"],[[43216,43225],"valid"],[[43226,43231],"disallowed"],[[43232,43255],"valid"],[[43256,43258],"valid",[],"NV8"],[[43259,43259],"valid"],[[43260,43260],"valid",[],"NV8"],[[43261,43261],"valid"],[[43262,43263],"disallowed"],[[43264,43309],"valid"],[[43310,43311],"valid",[],"NV8"],[[43312,43347],"valid"],[[43348,43358],"disallowed"],[[43359,43359],"valid",[],"NV8"],[[43360,43388],"valid",[],"NV8"],[[43389,43391],"disallowed"],[[43392,43456],"valid"],[[43457,43469],"valid",[],"NV8"],[[43470,43470],"disallowed"],[[43471,43481],"valid"],[[43482,43485],"disallowed"],[[43486,43487],"valid",[],"NV8"],[[43488,43518],"valid"],[[43519,43519],"disallowed"],[[43520,43574],"valid"],[[43575,43583],"disallowed"],[[43584,43597],"valid"],[[43598,43599],"disallowed"],[[43600,43609],"valid"],[[43610,43611],"disallowed"],[[43612,43615],"valid",[],"NV8"],[[43616,43638],"valid"],[[43639,43641],"valid",[],"NV8"],[[43642,43643],"valid"],[[43644,43647],"valid"],[[43648,43714],"valid"],[[43715,43738],"disallowed"],[[43739,43741],"valid"],[[43742,43743],"valid",[],"NV8"],[[43744,43759],"valid"],[[43760,43761],"valid",[],"NV8"],[[43762,43766],"valid"],[[43767,43776],"disallowed"],[[43777,43782],"valid"],[[43783,43784],"disallowed"],[[43785,43790],"valid"],[[43791,43792],"disallowed"],[[43793,43798],"valid"],[[43799,43807],"disallowed"],[[43808,43814],"valid"],[[43815,43815],"disallowed"],[[43816,43822],"valid"],[[43823,43823],"disallowed"],[[43824,43866],"valid"],[[43867,43867],"valid",[],"NV8"],[[43868,43868],"mapped",[42791]],[[43869,43869],"mapped",[43831]],[[43870,43870],"mapped",[619]],[[43871,43871],"mapped",[43858]],[[43872,43875],"valid"],[[43876,43877],"valid"],[[43878,43887],"disallowed"],[[43888,43888],"mapped",[5024]],[[43889,43889],"mapped",[5025]],[[43890,43890],"mapped",[5026]],[[43891,43891],"mapped",[5027]],[[43892,43892],"mapped",[5028]],[[43893,43893],"mapped",[5029]],[[43894,43894],"mapped",[5030]],[[43895,43895],"mapped",[5031]],[[43896,43896],"mapped",[5032]],[[43897,43897],"mapped",[5033]],[[43898,43898],"mapped",[5034]],[[43899,43899],"mapped",[5035]],[[43900,43900],"mapped",[5036]],[[43901,43901],"mapped",[5037]],[[43902,43902],"mapped",[5038]],[[43903,43903],"mapped",[5039]],[[43904,43904],"mapped",[5040]],[[43905,43905],"mapped",[5041]],[[43906,43906],"mapped",[5042]],[[43907,43907],"mapped",[5043]],[[43908,43908],"mapped",[5044]],[[43909,43909],"mapped",[5045]],[[43910,43910],"mapped",[5046]],[[43911,43911],"mapped",[5047]],[[43912,43912],"mapped",[5048]],[[43913,43913],"mapped",[5049]],[[43914,43914],"mapped",[5050]],[[43915,43915],"mapped",[5051]],[[43916,43916],"mapped",[5052]],[[43917,43917],"mapped",[5053]],[[43918,43918],"mapped",[5054]],[[43919,43919],"mapped",[5055]],[[43920,43920],"mapped",[5056]],[[43921,43921],"mapped",[5057]],[[43922,43922],"mapped",[5058]],[[43923,43923],"mapped",[5059]],[[43924,43924],"mapped",[5060]],[[43925,43925],"mapped",[5061]],[[43926,43926],"mapped",[5062]],[[43927,43927],"mapped",[5063]],[[43928,43928],"mapped",[5064]],[[43929,43929],"mapped",[5065]],[[43930,43930],"mapped",[5066]],[[43931,43931],"mapped",[5067]],[[43932,43932],"mapped",[5068]],[[43933,43933],"mapped",[5069]],[[43934,43934],"mapped",[5070]],[[43935,43935],"mapped",[5071]],[[43936,43936],"mapped",[5072]],[[43937,43937],"mapped",[5073]],[[43938,43938],"mapped",[5074]],[[43939,43939],"mapped",[5075]],[[43940,43940],"mapped",[5076]],[[43941,43941],"mapped",[5077]],[[43942,43942],"mapped",[5078]],[[43943,43943],"mapped",[5079]],[[43944,43944],"mapped",[5080]],[[43945,43945],"mapped",[5081]],[[43946,43946],"mapped",[5082]],[[43947,43947],"mapped",[5083]],[[43948,43948],"mapped",[5084]],[[43949,43949],"mapped",[5085]],[[43950,43950],"mapped",[5086]],[[43951,43951],"mapped",[5087]],[[43952,43952],"mapped",[5088]],[[43953,43953],"mapped",[5089]],[[43954,43954],"mapped",[5090]],[[43955,43955],"mapped",[5091]],[[43956,43956],"mapped",[5092]],[[43957,43957],"mapped",[5093]],[[43958,43958],"mapped",[5094]],[[43959,43959],"mapped",[5095]],[[43960,43960],"mapped",[5096]],[[43961,43961],"mapped",[5097]],[[43962,43962],"mapped",[5098]],[[43963,43963],"mapped",[5099]],[[43964,43964],"mapped",[5100]],[[43965,43965],"mapped",[5101]],[[43966,43966],"mapped",[5102]],[[43967,43967],"mapped",[5103]],[[43968,44010],"valid"],[[44011,44011],"valid",[],"NV8"],[[44012,44013],"valid"],[[44014,44015],"disallowed"],[[44016,44025],"valid"],[[44026,44031],"disallowed"],[[44032,55203],"valid"],[[55204,55215],"disallowed"],[[55216,55238],"valid",[],"NV8"],[[55239,55242],"disallowed"],[[55243,55291],"valid",[],"NV8"],[[55292,55295],"disallowed"],[[55296,57343],"disallowed"],[[57344,63743],"disallowed"],[[63744,63744],"mapped",[35912]],[[63745,63745],"mapped",[26356]],[[63746,63746],"mapped",[36554]],[[63747,63747],"mapped",[36040]],[[63748,63748],"mapped",[28369]],[[63749,63749],"mapped",[20018]],[[63750,63750],"mapped",[21477]],[[63751,63752],"mapped",[40860]],[[63753,63753],"mapped",[22865]],[[63754,63754],"mapped",[37329]],[[63755,63755],"mapped",[21895]],[[63756,63756],"mapped",[22856]],[[63757,63757],"mapped",[25078]],[[63758,63758],"mapped",[30313]],[[63759,63759],"mapped",[32645]],[[63760,63760],"mapped",[34367]],[[63761,63761],"mapped",[34746]],[[63762,63762],"mapped",[35064]],[[63763,63763],"mapped",[37007]],[[63764,63764],"mapped",[27138]],[[63765,63765],"mapped",[27931]],[[63766,63766],"mapped",[28889]],[[63767,63767],"mapped",[29662]],[[63768,63768],"mapped",[33853]],[[63769,63769],"mapped",[37226]],[[63770,63770],"mapped",[39409]],[[63771,63771],"mapped",[20098]],[[63772,63772],"mapped",[21365]],[[63773,63773],"mapped",[27396]],[[63774,63774],"mapped",[29211]],[[63775,63775],"mapped",[34349]],[[63776,63776],"mapped",[40478]],[[63777,63777],"mapped",[23888]],[[63778,63778],"mapped",[28651]],[[63779,63779],"mapped",[34253]],[[63780,63780],"mapped",[35172]],[[63781,63781],"mapped",[25289]],[[63782,63782],"mapped",[33240]],[[63783,63783],"mapped",[34847]],[[63784,63784],"mapped",[24266]],[[63785,63785],"mapped",[26391]],[[63786,63786],"mapped",[28010]],[[63787,63787],"mapped",[29436]],[[63788,63788],"mapped",[37070]],[[63789,63789],"mapped",[20358]],[[63790,63790],"mapped",[20919]],[[63791,63791],"mapped",[21214]],[[63792,63792],"mapped",[25796]],[[63793,63793],"mapped",[27347]],[[63794,63794],"mapped",[29200]],[[63795,63795],"mapped",[30439]],[[63796,63796],"mapped",[32769]],[[63797,63797],"mapped",[34310]],[[63798,63798],"mapped",[34396]],[[63799,63799],"mapped",[36335]],[[63800,63800],"mapped",[38706]],[[63801,63801],"mapped",[39791]],[[63802,63802],"mapped",[40442]],[[63803,63803],"mapped",[30860]],[[63804,63804],"mapped",[31103]],[[63805,63805],"mapped",[32160]],[[63806,63806],"mapped",[33737]],[[63807,63807],"mapped",[37636]],[[63808,63808],"mapped",[40575]],[[63809,63809],"mapped",[35542]],[[63810,63810],"mapped",[22751]],[[63811,63811],"mapped",[24324]],[[63812,63812],"mapped",[31840]],[[63813,63813],"mapped",[32894]],[[63814,63814],"mapped",[29282]],[[63815,63815],"mapped",[30922]],[[63816,63816],"mapped",[36034]],[[63817,63817],"mapped",[38647]],[[63818,63818],"mapped",[22744]],[[63819,63819],"mapped",[23650]],[[63820,63820],"mapped",[27155]],[[63821,63821],"mapped",[28122]],[[63822,63822],"mapped",[28431]],[[63823,63823],"mapped",[32047]],[[63824,63824],"mapped",[32311]],[[63825,63825],"mapped",[38475]],[[63826,63826],"mapped",[21202]],[[63827,63827],"mapped",[32907]],[[63828,63828],"mapped",[20956]],[[63829,63829],"mapped",[20940]],[[63830,63830],"mapped",[31260]],[[63831,63831],"mapped",[32190]],[[63832,63832],"mapped",[33777]],[[63833,63833],"mapped",[38517]],[[63834,63834],"mapped",[35712]],[[63835,63835],"mapped",[25295]],[[63836,63836],"mapped",[27138]],[[63837,63837],"mapped",[35582]],[[63838,63838],"mapped",[20025]],[[63839,63839],"mapped",[23527]],[[63840,63840],"mapped",[24594]],[[63841,63841],"mapped",[29575]],[[63842,63842],"mapped",[30064]],[[63843,63843],"mapped",[21271]],[[63844,63844],"mapped",[30971]],[[63845,63845],"mapped",[20415]],[[63846,63846],"mapped",[24489]],[[63847,63847],"mapped",[19981]],[[63848,63848],"mapped",[27852]],[[63849,63849],"mapped",[25976]],[[63850,63850],"mapped",[32034]],[[63851,63851],"mapped",[21443]],[[63852,63852],"mapped",[22622]],[[63853,63853],"mapped",[30465]],[[63854,63854],"mapped",[33865]],[[63855,63855],"mapped",[35498]],[[63856,63856],"mapped",[27578]],[[63857,63857],"mapped",[36784]],[[63858,63858],"mapped",[27784]],[[63859,63859],"mapped",[25342]],[[63860,63860],"mapped",[33509]],[[63861,63861],"mapped",[25504]],[[63862,63862],"mapped",[30053]],[[63863,63863],"mapped",[20142]],[[63864,63864],"mapped",[20841]],[[63865,63865],"mapped",[20937]],[[63866,63866],"mapped",[26753]],[[63867,63867],"mapped",[31975]],[[63868,63868],"mapped",[33391]],[[63869,63869],"mapped",[35538]],[[63870,63870],"mapped",[37327]],[[63871,63871],"mapped",[21237]],[[63872,63872],"mapped",[21570]],[[63873,63873],"mapped",[22899]],[[63874,63874],"mapped",[24300]],[[63875,63875],"mapped",[26053]],[[63876,63876],"mapped",[28670]],[[63877,63877],"mapped",[31018]],[[63878,63878],"mapped",[38317]],[[63879,63879],"mapped",[39530]],[[63880,63880],"mapped",[40599]],[[63881,63881],"mapped",[40654]],[[63882,63882],"mapped",[21147]],[[63883,63883],"mapped",[26310]],[[63884,63884],"mapped",[27511]],[[63885,63885],"mapped",[36706]],[[63886,63886],"mapped",[24180]],[[63887,63887],"mapped",[24976]],[[63888,63888],"mapped",[25088]],[[63889,63889],"mapped",[25754]],[[63890,63890],"mapped",[28451]],[[63891,63891],"mapped",[29001]],[[63892,63892],"mapped",[29833]],[[63893,63893],"mapped",[31178]],[[63894,63894],"mapped",[32244]],[[63895,63895],"mapped",[32879]],[[63896,63896],"mapped",[36646]],[[63897,63897],"mapped",[34030]],[[63898,63898],"mapped",[36899]],[[63899,63899],"mapped",[37706]],[[63900,63900],"mapped",[21015]],[[63901,63901],"mapped",[21155]],[[63902,63902],"mapped",[21693]],[[63903,63903],"mapped",[28872]],[[63904,63904],"mapped",[35010]],[[63905,63905],"mapped",[35498]],[[63906,63906],"mapped",[24265]],[[63907,63907],"mapped",[24565]],[[63908,63908],"mapped",[25467]],[[63909,63909],"mapped",[27566]],[[63910,63910],"mapped",[31806]],[[63911,63911],"mapped",[29557]],[[63912,63912],"mapped",[20196]],[[63913,63913],"mapped",[22265]],[[63914,63914],"mapped",[23527]],[[63915,63915],"mapped",[23994]],[[63916,63916],"mapped",[24604]],[[63917,63917],"mapped",[29618]],[[63918,63918],"mapped",[29801]],[[63919,63919],"mapped",[32666]],[[63920,63920],"mapped",[32838]],[[63921,63921],"mapped",[37428]],[[63922,63922],"mapped",[38646]],[[63923,63923],"mapped",[38728]],[[63924,63924],"mapped",[38936]],[[63925,63925],"mapped",[20363]],[[63926,63926],"mapped",[31150]],[[63927,63927],"mapped",[37300]],[[63928,63928],"mapped",[38584]],[[63929,63929],"mapped",[24801]],[[63930,63930],"mapped",[20102]],[[63931,63931],"mapped",[20698]],[[63932,63932],"mapped",[23534]],[[63933,63933],"mapped",[23615]],[[63934,63934],"mapped",[26009]],[[63935,63935],"mapped",[27138]],[[63936,63936],"mapped",[29134]],[[63937,63937],"mapped",[30274]],[[63938,63938],"mapped",[34044]],[[63939,63939],"mapped",[36988]],[[63940,63940],"mapped",[40845]],[[63941,63941],"mapped",[26248]],[[63942,63942],"mapped",[38446]],[[63943,63943],"mapped",[21129]],[[63944,63944],"mapped",[26491]],[[63945,63945],"mapped",[26611]],[[63946,63946],"mapped",[27969]],[[63947,63947],"mapped",[28316]],[[63948,63948],"mapped",[29705]],[[63949,63949],"mapped",[30041]],[[63950,63950],"mapped",[30827]],[[63951,63951],"mapped",[32016]],[[63952,63952],"mapped",[39006]],[[63953,63953],"mapped",[20845]],[[63954,63954],"mapped",[25134]],[[63955,63955],"mapped",[38520]],[[63956,63956],"mapped",[20523]],[[63957,63957],"mapped",[23833]],[[63958,63958],"mapped",[28138]],[[63959,63959],"mapped",[36650]],[[63960,63960],"mapped",[24459]],[[63961,63961],"mapped",[24900]],[[63962,63962],"mapped",[26647]],[[63963,63963],"mapped",[29575]],[[63964,63964],"mapped",[38534]],[[63965,63965],"mapped",[21033]],[[63966,63966],"mapped",[21519]],[[63967,63967],"mapped",[23653]],[[63968,63968],"mapped",[26131]],[[63969,63969],"mapped",[26446]],[[63970,63970],"mapped",[26792]],[[63971,63971],"mapped",[27877]],[[63972,63972],"mapped",[29702]],[[63973,63973],"mapped",[30178]],[[63974,63974],"mapped",[32633]],[[63975,63975],"mapped",[35023]],[[63976,63976],"mapped",[35041]],[[63977,63977],"mapped",[37324]],[[63978,63978],"mapped",[38626]],[[63979,63979],"mapped",[21311]],[[63980,63980],"mapped",[28346]],[[63981,63981],"mapped",[21533]],[[63982,63982],"mapped",[29136]],[[63983,63983],"mapped",[29848]],[[63984,63984],"mapped",[34298]],[[63985,63985],"mapped",[38563]],[[63986,63986],"mapped",[40023]],[[63987,63987],"mapped",[40607]],[[63988,63988],"mapped",[26519]],[[63989,63989],"mapped",[28107]],[[63990,63990],"mapped",[33256]],[[63991,63991],"mapped",[31435]],[[63992,63992],"mapped",[31520]],[[63993,63993],"mapped",[31890]],[[63994,63994],"mapped",[29376]],[[63995,63995],"mapped",[28825]],[[63996,63996],"mapped",[35672]],[[63997,63997],"mapped",[20160]],[[63998,63998],"mapped",[33590]],[[63999,63999],"mapped",[21050]],[[64e3,64e3],"mapped",[20999]],[[64001,64001],"mapped",[24230]],[[64002,64002],"mapped",[25299]],[[64003,64003],"mapped",[31958]],[[64004,64004],"mapped",[23429]],[[64005,64005],"mapped",[27934]],[[64006,64006],"mapped",[26292]],[[64007,64007],"mapped",[36667]],[[64008,64008],"mapped",[34892]],[[64009,64009],"mapped",[38477]],[[64010,64010],"mapped",[35211]],[[64011,64011],"mapped",[24275]],[[64012,64012],"mapped",[20800]],[[64013,64013],"mapped",[21952]],[[64014,64015],"valid"],[[64016,64016],"mapped",[22618]],[[64017,64017],"valid"],[[64018,64018],"mapped",[26228]],[[64019,64020],"valid"],[[64021,64021],"mapped",[20958]],[[64022,64022],"mapped",[29482]],[[64023,64023],"mapped",[30410]],[[64024,64024],"mapped",[31036]],[[64025,64025],"mapped",[31070]],[[64026,64026],"mapped",[31077]],[[64027,64027],"mapped",[31119]],[[64028,64028],"mapped",[38742]],[[64029,64029],"mapped",[31934]],[[64030,64030],"mapped",[32701]],[[64031,64031],"valid"],[[64032,64032],"mapped",[34322]],[[64033,64033],"valid"],[[64034,64034],"mapped",[35576]],[[64035,64036],"valid"],[[64037,64037],"mapped",[36920]],[[64038,64038],"mapped",[37117]],[[64039,64041],"valid"],[[64042,64042],"mapped",[39151]],[[64043,64043],"mapped",[39164]],[[64044,64044],"mapped",[39208]],[[64045,64045],"mapped",[40372]],[[64046,64046],"mapped",[37086]],[[64047,64047],"mapped",[38583]],[[64048,64048],"mapped",[20398]],[[64049,64049],"mapped",[20711]],[[64050,64050],"mapped",[20813]],[[64051,64051],"mapped",[21193]],[[64052,64052],"mapped",[21220]],[[64053,64053],"mapped",[21329]],[[64054,64054],"mapped",[21917]],[[64055,64055],"mapped",[22022]],[[64056,64056],"mapped",[22120]],[[64057,64057],"mapped",[22592]],[[64058,64058],"mapped",[22696]],[[64059,64059],"mapped",[23652]],[[64060,64060],"mapped",[23662]],[[64061,64061],"mapped",[24724]],[[64062,64062],"mapped",[24936]],[[64063,64063],"mapped",[24974]],[[64064,64064],"mapped",[25074]],[[64065,64065],"mapped",[25935]],[[64066,64066],"mapped",[26082]],[[64067,64067],"mapped",[26257]],[[64068,64068],"mapped",[26757]],[[64069,64069],"mapped",[28023]],[[64070,64070],"mapped",[28186]],[[64071,64071],"mapped",[28450]],[[64072,64072],"mapped",[29038]],[[64073,64073],"mapped",[29227]],[[64074,64074],"mapped",[29730]],[[64075,64075],"mapped",[30865]],[[64076,64076],"mapped",[31038]],[[64077,64077],"mapped",[31049]],[[64078,64078],"mapped",[31048]],[[64079,64079],"mapped",[31056]],[[64080,64080],"mapped",[31062]],[[64081,64081],"mapped",[31069]],[[64082,64082],"mapped",[31117]],[[64083,64083],"mapped",[31118]],[[64084,64084],"mapped",[31296]],[[64085,64085],"mapped",[31361]],[[64086,64086],"mapped",[31680]],[[64087,64087],"mapped",[32244]],[[64088,64088],"mapped",[32265]],[[64089,64089],"mapped",[32321]],[[64090,64090],"mapped",[32626]],[[64091,64091],"mapped",[32773]],[[64092,64092],"mapped",[33261]],[[64093,64094],"mapped",[33401]],[[64095,64095],"mapped",[33879]],[[64096,64096],"mapped",[35088]],[[64097,64097],"mapped",[35222]],[[64098,64098],"mapped",[35585]],[[64099,64099],"mapped",[35641]],[[64100,64100],"mapped",[36051]],[[64101,64101],"mapped",[36104]],[[64102,64102],"mapped",[36790]],[[64103,64103],"mapped",[36920]],[[64104,64104],"mapped",[38627]],[[64105,64105],"mapped",[38911]],[[64106,64106],"mapped",[38971]],[[64107,64107],"mapped",[24693]],[[64108,64108],"mapped",[148206]],[[64109,64109],"mapped",[33304]],[[64110,64111],"disallowed"],[[64112,64112],"mapped",[20006]],[[64113,64113],"mapped",[20917]],[[64114,64114],"mapped",[20840]],[[64115,64115],"mapped",[20352]],[[64116,64116],"mapped",[20805]],[[64117,64117],"mapped",[20864]],[[64118,64118],"mapped",[21191]],[[64119,64119],"mapped",[21242]],[[64120,64120],"mapped",[21917]],[[64121,64121],"mapped",[21845]],[[64122,64122],"mapped",[21913]],[[64123,64123],"mapped",[21986]],[[64124,64124],"mapped",[22618]],[[64125,64125],"mapped",[22707]],[[64126,64126],"mapped",[22852]],[[64127,64127],"mapped",[22868]],[[64128,64128],"mapped",[23138]],[[64129,64129],"mapped",[23336]],[[64130,64130],"mapped",[24274]],[[64131,64131],"mapped",[24281]],[[64132,64132],"mapped",[24425]],[[64133,64133],"mapped",[24493]],[[64134,64134],"mapped",[24792]],[[64135,64135],"mapped",[24910]],[[64136,64136],"mapped",[24840]],[[64137,64137],"mapped",[24974]],[[64138,64138],"mapped",[24928]],[[64139,64139],"mapped",[25074]],[[64140,64140],"mapped",[25140]],[[64141,64141],"mapped",[25540]],[[64142,64142],"mapped",[25628]],[[64143,64143],"mapped",[25682]],[[64144,64144],"mapped",[25942]],[[64145,64145],"mapped",[26228]],[[64146,64146],"mapped",[26391]],[[64147,64147],"mapped",[26395]],[[64148,64148],"mapped",[26454]],[[64149,64149],"mapped",[27513]],[[64150,64150],"mapped",[27578]],[[64151,64151],"mapped",[27969]],[[64152,64152],"mapped",[28379]],[[64153,64153],"mapped",[28363]],[[64154,64154],"mapped",[28450]],[[64155,64155],"mapped",[28702]],[[64156,64156],"mapped",[29038]],[[64157,64157],"mapped",[30631]],[[64158,64158],"mapped",[29237]],[[64159,64159],"mapped",[29359]],[[64160,64160],"mapped",[29482]],[[64161,64161],"mapped",[29809]],[[64162,64162],"mapped",[29958]],[[64163,64163],"mapped",[30011]],[[64164,64164],"mapped",[30237]],[[64165,64165],"mapped",[30239]],[[64166,64166],"mapped",[30410]],[[64167,64167],"mapped",[30427]],[[64168,64168],"mapped",[30452]],[[64169,64169],"mapped",[30538]],[[64170,64170],"mapped",[30528]],[[64171,64171],"mapped",[30924]],[[64172,64172],"mapped",[31409]],[[64173,64173],"mapped",[31680]],[[64174,64174],"mapped",[31867]],[[64175,64175],"mapped",[32091]],[[64176,64176],"mapped",[32244]],[[64177,64177],"mapped",[32574]],[[64178,64178],"mapped",[32773]],[[64179,64179],"mapped",[33618]],[[64180,64180],"mapped",[33775]],[[64181,64181],"mapped",[34681]],[[64182,64182],"mapped",[35137]],[[64183,64183],"mapped",[35206]],[[64184,64184],"mapped",[35222]],[[64185,64185],"mapped",[35519]],[[64186,64186],"mapped",[35576]],[[64187,64187],"mapped",[35531]],[[64188,64188],"mapped",[35585]],[[64189,64189],"mapped",[35582]],[[64190,64190],"mapped",[35565]],[[64191,64191],"mapped",[35641]],[[64192,64192],"mapped",[35722]],[[64193,64193],"mapped",[36104]],[[64194,64194],"mapped",[36664]],[[64195,64195],"mapped",[36978]],[[64196,64196],"mapped",[37273]],[[64197,64197],"mapped",[37494]],[[64198,64198],"mapped",[38524]],[[64199,64199],"mapped",[38627]],[[64200,64200],"mapped",[38742]],[[64201,64201],"mapped",[38875]],[[64202,64202],"mapped",[38911]],[[64203,64203],"mapped",[38923]],[[64204,64204],"mapped",[38971]],[[64205,64205],"mapped",[39698]],[[64206,64206],"mapped",[40860]],[[64207,64207],"mapped",[141386]],[[64208,64208],"mapped",[141380]],[[64209,64209],"mapped",[144341]],[[64210,64210],"mapped",[15261]],[[64211,64211],"mapped",[16408]],[[64212,64212],"mapped",[16441]],[[64213,64213],"mapped",[152137]],[[64214,64214],"mapped",[154832]],[[64215,64215],"mapped",[163539]],[[64216,64216],"mapped",[40771]],[[64217,64217],"mapped",[40846]],[[64218,64255],"disallowed"],[[64256,64256],"mapped",[102,102]],[[64257,64257],"mapped",[102,105]],[[64258,64258],"mapped",[102,108]],[[64259,64259],"mapped",[102,102,105]],[[64260,64260],"mapped",[102,102,108]],[[64261,64262],"mapped",[115,116]],[[64263,64274],"disallowed"],[[64275,64275],"mapped",[1396,1398]],[[64276,64276],"mapped",[1396,1381]],[[64277,64277],"mapped",[1396,1387]],[[64278,64278],"mapped",[1406,1398]],[[64279,64279],"mapped",[1396,1389]],[[64280,64284],"disallowed"],[[64285,64285],"mapped",[1497,1460]],[[64286,64286],"valid"],[[64287,64287],"mapped",[1522,1463]],[[64288,64288],"mapped",[1506]],[[64289,64289],"mapped",[1488]],[[64290,64290],"mapped",[1491]],[[64291,64291],"mapped",[1492]],[[64292,64292],"mapped",[1499]],[[64293,64293],"mapped",[1500]],[[64294,64294],"mapped",[1501]],[[64295,64295],"mapped",[1512]],[[64296,64296],"mapped",[1514]],[[64297,64297],"disallowed_STD3_mapped",[43]],[[64298,64298],"mapped",[1513,1473]],[[64299,64299],"mapped",[1513,1474]],[[64300,64300],"mapped",[1513,1468,1473]],[[64301,64301],"mapped",[1513,1468,1474]],[[64302,64302],"mapped",[1488,1463]],[[64303,64303],"mapped",[1488,1464]],[[64304,64304],"mapped",[1488,1468]],[[64305,64305],"mapped",[1489,1468]],[[64306,64306],"mapped",[1490,1468]],[[64307,64307],"mapped",[1491,1468]],[[64308,64308],"mapped",[1492,1468]],[[64309,64309],"mapped",[1493,1468]],[[64310,64310],"mapped",[1494,1468]],[[64311,64311],"disallowed"],[[64312,64312],"mapped",[1496,1468]],[[64313,64313],"mapped",[1497,1468]],[[64314,64314],"mapped",[1498,1468]],[[64315,64315],"mapped",[1499,1468]],[[64316,64316],"mapped",[1500,1468]],[[64317,64317],"disallowed"],[[64318,64318],"mapped",[1502,1468]],[[64319,64319],"disallowed"],[[64320,64320],"mapped",[1504,1468]],[[64321,64321],"mapped",[1505,1468]],[[64322,64322],"disallowed"],[[64323,64323],"mapped",[1507,1468]],[[64324,64324],"mapped",[1508,1468]],[[64325,64325],"disallowed"],[[64326,64326],"mapped",[1510,1468]],[[64327,64327],"mapped",[1511,1468]],[[64328,64328],"mapped",[1512,1468]],[[64329,64329],"mapped",[1513,1468]],[[64330,64330],"mapped",[1514,1468]],[[64331,64331],"mapped",[1493,1465]],[[64332,64332],"mapped",[1489,1471]],[[64333,64333],"mapped",[1499,1471]],[[64334,64334],"mapped",[1508,1471]],[[64335,64335],"mapped",[1488,1500]],[[64336,64337],"mapped",[1649]],[[64338,64341],"mapped",[1659]],[[64342,64345],"mapped",[1662]],[[64346,64349],"mapped",[1664]],[[64350,64353],"mapped",[1658]],[[64354,64357],"mapped",[1663]],[[64358,64361],"mapped",[1657]],[[64362,64365],"mapped",[1700]],[[64366,64369],"mapped",[1702]],[[64370,64373],"mapped",[1668]],[[64374,64377],"mapped",[1667]],[[64378,64381],"mapped",[1670]],[[64382,64385],"mapped",[1671]],[[64386,64387],"mapped",[1677]],[[64388,64389],"mapped",[1676]],[[64390,64391],"mapped",[1678]],[[64392,64393],"mapped",[1672]],[[64394,64395],"mapped",[1688]],[[64396,64397],"mapped",[1681]],[[64398,64401],"mapped",[1705]],[[64402,64405],"mapped",[1711]],[[64406,64409],"mapped",[1715]],[[64410,64413],"mapped",[1713]],[[64414,64415],"mapped",[1722]],[[64416,64419],"mapped",[1723]],[[64420,64421],"mapped",[1728]],[[64422,64425],"mapped",[1729]],[[64426,64429],"mapped",[1726]],[[64430,64431],"mapped",[1746]],[[64432,64433],"mapped",[1747]],[[64434,64449],"valid",[],"NV8"],[[64450,64466],"disallowed"],[[64467,64470],"mapped",[1709]],[[64471,64472],"mapped",[1735]],[[64473,64474],"mapped",[1734]],[[64475,64476],"mapped",[1736]],[[64477,64477],"mapped",[1735,1652]],[[64478,64479],"mapped",[1739]],[[64480,64481],"mapped",[1733]],[[64482,64483],"mapped",[1737]],[[64484,64487],"mapped",[1744]],[[64488,64489],"mapped",[1609]],[[64490,64491],"mapped",[1574,1575]],[[64492,64493],"mapped",[1574,1749]],[[64494,64495],"mapped",[1574,1608]],[[64496,64497],"mapped",[1574,1735]],[[64498,64499],"mapped",[1574,1734]],[[64500,64501],"mapped",[1574,1736]],[[64502,64504],"mapped",[1574,1744]],[[64505,64507],"mapped",[1574,1609]],[[64508,64511],"mapped",[1740]],[[64512,64512],"mapped",[1574,1580]],[[64513,64513],"mapped",[1574,1581]],[[64514,64514],"mapped",[1574,1605]],[[64515,64515],"mapped",[1574,1609]],[[64516,64516],"mapped",[1574,1610]],[[64517,64517],"mapped",[1576,1580]],[[64518,64518],"mapped",[1576,1581]],[[64519,64519],"mapped",[1576,1582]],[[64520,64520],"mapped",[1576,1605]],[[64521,64521],"mapped",[1576,1609]],[[64522,64522],"mapped",[1576,1610]],[[64523,64523],"mapped",[1578,1580]],[[64524,64524],"mapped",[1578,1581]],[[64525,64525],"mapped",[1578,1582]],[[64526,64526],"mapped",[1578,1605]],[[64527,64527],"mapped",[1578,1609]],[[64528,64528],"mapped",[1578,1610]],[[64529,64529],"mapped",[1579,1580]],[[64530,64530],"mapped",[1579,1605]],[[64531,64531],"mapped",[1579,1609]],[[64532,64532],"mapped",[1579,1610]],[[64533,64533],"mapped",[1580,1581]],[[64534,64534],"mapped",[1580,1605]],[[64535,64535],"mapped",[1581,1580]],[[64536,64536],"mapped",[1581,1605]],[[64537,64537],"mapped",[1582,1580]],[[64538,64538],"mapped",[1582,1581]],[[64539,64539],"mapped",[1582,1605]],[[64540,64540],"mapped",[1587,1580]],[[64541,64541],"mapped",[1587,1581]],[[64542,64542],"mapped",[1587,1582]],[[64543,64543],"mapped",[1587,1605]],[[64544,64544],"mapped",[1589,1581]],[[64545,64545],"mapped",[1589,1605]],[[64546,64546],"mapped",[1590,1580]],[[64547,64547],"mapped",[1590,1581]],[[64548,64548],"mapped",[1590,1582]],[[64549,64549],"mapped",[1590,1605]],[[64550,64550],"mapped",[1591,1581]],[[64551,64551],"mapped",[1591,1605]],[[64552,64552],"mapped",[1592,1605]],[[64553,64553],"mapped",[1593,1580]],[[64554,64554],"mapped",[1593,1605]],[[64555,64555],"mapped",[1594,1580]],[[64556,64556],"mapped",[1594,1605]],[[64557,64557],"mapped",[1601,1580]],[[64558,64558],"mapped",[1601,1581]],[[64559,64559],"mapped",[1601,1582]],[[64560,64560],"mapped",[1601,1605]],[[64561,64561],"mapped",[1601,1609]],[[64562,64562],"mapped",[1601,1610]],[[64563,64563],"mapped",[1602,1581]],[[64564,64564],"mapped",[1602,1605]],[[64565,64565],"mapped",[1602,1609]],[[64566,64566],"mapped",[1602,1610]],[[64567,64567],"mapped",[1603,1575]],[[64568,64568],"mapped",[1603,1580]],[[64569,64569],"mapped",[1603,1581]],[[64570,64570],"mapped",[1603,1582]],[[64571,64571],"mapped",[1603,1604]],[[64572,64572],"mapped",[1603,1605]],[[64573,64573],"mapped",[1603,1609]],[[64574,64574],"mapped",[1603,1610]],[[64575,64575],"mapped",[1604,1580]],[[64576,64576],"mapped",[1604,1581]],[[64577,64577],"mapped",[1604,1582]],[[64578,64578],"mapped",[1604,1605]],[[64579,64579],"mapped",[1604,1609]],[[64580,64580],"mapped",[1604,1610]],[[64581,64581],"mapped",[1605,1580]],[[64582,64582],"mapped",[1605,1581]],[[64583,64583],"mapped",[1605,1582]],[[64584,64584],"mapped",[1605,1605]],[[64585,64585],"mapped",[1605,1609]],[[64586,64586],"mapped",[1605,1610]],[[64587,64587],"mapped",[1606,1580]],[[64588,64588],"mapped",[1606,1581]],[[64589,64589],"mapped",[1606,1582]],[[64590,64590],"mapped",[1606,1605]],[[64591,64591],"mapped",[1606,1609]],[[64592,64592],"mapped",[1606,1610]],[[64593,64593],"mapped",[1607,1580]],[[64594,64594],"mapped",[1607,1605]],[[64595,64595],"mapped",[1607,1609]],[[64596,64596],"mapped",[1607,1610]],[[64597,64597],"mapped",[1610,1580]],[[64598,64598],"mapped",[1610,1581]],[[64599,64599],"mapped",[1610,1582]],[[64600,64600],"mapped",[1610,1605]],[[64601,64601],"mapped",[1610,1609]],[[64602,64602],"mapped",[1610,1610]],[[64603,64603],"mapped",[1584,1648]],[[64604,64604],"mapped",[1585,1648]],[[64605,64605],"mapped",[1609,1648]],[[64606,64606],"disallowed_STD3_mapped",[32,1612,1617]],[[64607,64607],"disallowed_STD3_mapped",[32,1613,1617]],[[64608,64608],"disallowed_STD3_mapped",[32,1614,1617]],[[64609,64609],"disallowed_STD3_mapped",[32,1615,1617]],[[64610,64610],"disallowed_STD3_mapped",[32,1616,1617]],[[64611,64611],"disallowed_STD3_mapped",[32,1617,1648]],[[64612,64612],"mapped",[1574,1585]],[[64613,64613],"mapped",[1574,1586]],[[64614,64614],"mapped",[1574,1605]],[[64615,64615],"mapped",[1574,1606]],[[64616,64616],"mapped",[1574,1609]],[[64617,64617],"mapped",[1574,1610]],[[64618,64618],"mapped",[1576,1585]],[[64619,64619],"mapped",[1576,1586]],[[64620,64620],"mapped",[1576,1605]],[[64621,64621],"mapped",[1576,1606]],[[64622,64622],"mapped",[1576,1609]],[[64623,64623],"mapped",[1576,1610]],[[64624,64624],"mapped",[1578,1585]],[[64625,64625],"mapped",[1578,1586]],[[64626,64626],"mapped",[1578,1605]],[[64627,64627],"mapped",[1578,1606]],[[64628,64628],"mapped",[1578,1609]],[[64629,64629],"mapped",[1578,1610]],[[64630,64630],"mapped",[1579,1585]],[[64631,64631],"mapped",[1579,1586]],[[64632,64632],"mapped",[1579,1605]],[[64633,64633],"mapped",[1579,1606]],[[64634,64634],"mapped",[1579,1609]],[[64635,64635],"mapped",[1579,1610]],[[64636,64636],"mapped",[1601,1609]],[[64637,64637],"mapped",[1601,1610]],[[64638,64638],"mapped",[1602,1609]],[[64639,64639],"mapped",[1602,1610]],[[64640,64640],"mapped",[1603,1575]],[[64641,64641],"mapped",[1603,1604]],[[64642,64642],"mapped",[1603,1605]],[[64643,64643],"mapped",[1603,1609]],[[64644,64644],"mapped",[1603,1610]],[[64645,64645],"mapped",[1604,1605]],[[64646,64646],"mapped",[1604,1609]],[[64647,64647],"mapped",[1604,1610]],[[64648,64648],"mapped",[1605,1575]],[[64649,64649],"mapped",[1605,1605]],[[64650,64650],"mapped",[1606,1585]],[[64651,64651],"mapped",[1606,1586]],[[64652,64652],"mapped",[1606,1605]],[[64653,64653],"mapped",[1606,1606]],[[64654,64654],"mapped",[1606,1609]],[[64655,64655],"mapped",[1606,1610]],[[64656,64656],"mapped",[1609,1648]],[[64657,64657],"mapped",[1610,1585]],[[64658,64658],"mapped",[1610,1586]],[[64659,64659],"mapped",[1610,1605]],[[64660,64660],"mapped",[1610,1606]],[[64661,64661],"mapped",[1610,1609]],[[64662,64662],"mapped",[1610,1610]],[[64663,64663],"mapped",[1574,1580]],[[64664,64664],"mapped",[1574,1581]],[[64665,64665],"mapped",[1574,1582]],[[64666,64666],"mapped",[1574,1605]],[[64667,64667],"mapped",[1574,1607]],[[64668,64668],"mapped",[1576,1580]],[[64669,64669],"mapped",[1576,1581]],[[64670,64670],"mapped",[1576,1582]],[[64671,64671],"mapped",[1576,1605]],[[64672,64672],"mapped",[1576,1607]],[[64673,64673],"mapped",[1578,1580]],[[64674,64674],"mapped",[1578,1581]],[[64675,64675],"mapped",[1578,1582]],[[64676,64676],"mapped",[1578,1605]],[[64677,64677],"mapped",[1578,1607]],[[64678,64678],"mapped",[1579,1605]],[[64679,64679],"mapped",[1580,1581]],[[64680,64680],"mapped",[1580,1605]],[[64681,64681],"mapped",[1581,1580]],[[64682,64682],"mapped",[1581,1605]],[[64683,64683],"mapped",[1582,1580]],[[64684,64684],"mapped",[1582,1605]],[[64685,64685],"mapped",[1587,1580]],[[64686,64686],"mapped",[1587,1581]],[[64687,64687],"mapped",[1587,1582]],[[64688,64688],"mapped",[1587,1605]],[[64689,64689],"mapped",[1589,1581]],[[64690,64690],"mapped",[1589,1582]],[[64691,64691],"mapped",[1589,1605]],[[64692,64692],"mapped",[1590,1580]],[[64693,64693],"mapped",[1590,1581]],[[64694,64694],"mapped",[1590,1582]],[[64695,64695],"mapped",[1590,1605]],[[64696,64696],"mapped",[1591,1581]],[[64697,64697],"mapped",[1592,1605]],[[64698,64698],"mapped",[1593,1580]],[[64699,64699],"mapped",[1593,1605]],[[64700,64700],"mapped",[1594,1580]],[[64701,64701],"mapped",[1594,1605]],[[64702,64702],"mapped",[1601,1580]],[[64703,64703],"mapped",[1601,1581]],[[64704,64704],"mapped",[1601,1582]],[[64705,64705],"mapped",[1601,1605]],[[64706,64706],"mapped",[1602,1581]],[[64707,64707],"mapped",[1602,1605]],[[64708,64708],"mapped",[1603,1580]],[[64709,64709],"mapped",[1603,1581]],[[64710,64710],"mapped",[1603,1582]],[[64711,64711],"mapped",[1603,1604]],[[64712,64712],"mapped",[1603,1605]],[[64713,64713],"mapped",[1604,1580]],[[64714,64714],"mapped",[1604,1581]],[[64715,64715],"mapped",[1604,1582]],[[64716,64716],"mapped",[1604,1605]],[[64717,64717],"mapped",[1604,1607]],[[64718,64718],"mapped",[1605,1580]],[[64719,64719],"mapped",[1605,1581]],[[64720,64720],"mapped",[1605,1582]],[[64721,64721],"mapped",[1605,1605]],[[64722,64722],"mapped",[1606,1580]],[[64723,64723],"mapped",[1606,1581]],[[64724,64724],"mapped",[1606,1582]],[[64725,64725],"mapped",[1606,1605]],[[64726,64726],"mapped",[1606,1607]],[[64727,64727],"mapped",[1607,1580]],[[64728,64728],"mapped",[1607,1605]],[[64729,64729],"mapped",[1607,1648]],[[64730,64730],"mapped",[1610,1580]],[[64731,64731],"mapped",[1610,1581]],[[64732,64732],"mapped",[1610,1582]],[[64733,64733],"mapped",[1610,1605]],[[64734,64734],"mapped",[1610,1607]],[[64735,64735],"mapped",[1574,1605]],[[64736,64736],"mapped",[1574,1607]],[[64737,64737],"mapped",[1576,1605]],[[64738,64738],"mapped",[1576,1607]],[[64739,64739],"mapped",[1578,1605]],[[64740,64740],"mapped",[1578,1607]],[[64741,64741],"mapped",[1579,1605]],[[64742,64742],"mapped",[1579,1607]],[[64743,64743],"mapped",[1587,1605]],[[64744,64744],"mapped",[1587,1607]],[[64745,64745],"mapped",[1588,1605]],[[64746,64746],"mapped",[1588,1607]],[[64747,64747],"mapped",[1603,1604]],[[64748,64748],"mapped",[1603,1605]],[[64749,64749],"mapped",[1604,1605]],[[64750,64750],"mapped",[1606,1605]],[[64751,64751],"mapped",[1606,1607]],[[64752,64752],"mapped",[1610,1605]],[[64753,64753],"mapped",[1610,1607]],[[64754,64754],"mapped",[1600,1614,1617]],[[64755,64755],"mapped",[1600,1615,1617]],[[64756,64756],"mapped",[1600,1616,1617]],[[64757,64757],"mapped",[1591,1609]],[[64758,64758],"mapped",[1591,1610]],[[64759,64759],"mapped",[1593,1609]],[[64760,64760],"mapped",[1593,1610]],[[64761,64761],"mapped",[1594,1609]],[[64762,64762],"mapped",[1594,1610]],[[64763,64763],"mapped",[1587,1609]],[[64764,64764],"mapped",[1587,1610]],[[64765,64765],"mapped",[1588,1609]],[[64766,64766],"mapped",[1588,1610]],[[64767,64767],"mapped",[1581,1609]],[[64768,64768],"mapped",[1581,1610]],[[64769,64769],"mapped",[1580,1609]],[[64770,64770],"mapped",[1580,1610]],[[64771,64771],"mapped",[1582,1609]],[[64772,64772],"mapped",[1582,1610]],[[64773,64773],"mapped",[1589,1609]],[[64774,64774],"mapped",[1589,1610]],[[64775,64775],"mapped",[1590,1609]],[[64776,64776],"mapped",[1590,1610]],[[64777,64777],"mapped",[1588,1580]],[[64778,64778],"mapped",[1588,1581]],[[64779,64779],"mapped",[1588,1582]],[[64780,64780],"mapped",[1588,1605]],[[64781,64781],"mapped",[1588,1585]],[[64782,64782],"mapped",[1587,1585]],[[64783,64783],"mapped",[1589,1585]],[[64784,64784],"mapped",[1590,1585]],[[64785,64785],"mapped",[1591,1609]],[[64786,64786],"mapped",[1591,1610]],[[64787,64787],"mapped",[1593,1609]],[[64788,64788],"mapped",[1593,1610]],[[64789,64789],"mapped",[1594,1609]],[[64790,64790],"mapped",[1594,1610]],[[64791,64791],"mapped",[1587,1609]],[[64792,64792],"mapped",[1587,1610]],[[64793,64793],"mapped",[1588,1609]],[[64794,64794],"mapped",[1588,1610]],[[64795,64795],"mapped",[1581,1609]],[[64796,64796],"mapped",[1581,1610]],[[64797,64797],"mapped",[1580,1609]],[[64798,64798],"mapped",[1580,1610]],[[64799,64799],"mapped",[1582,1609]],[[64800,64800],"mapped",[1582,1610]],[[64801,64801],"mapped",[1589,1609]],[[64802,64802],"mapped",[1589,1610]],[[64803,64803],"mapped",[1590,1609]],[[64804,64804],"mapped",[1590,1610]],[[64805,64805],"mapped",[1588,1580]],[[64806,64806],"mapped",[1588,1581]],[[64807,64807],"mapped",[1588,1582]],[[64808,64808],"mapped",[1588,1605]],[[64809,64809],"mapped",[1588,1585]],[[64810,64810],"mapped",[1587,1585]],[[64811,64811],"mapped",[1589,1585]],[[64812,64812],"mapped",[1590,1585]],[[64813,64813],"mapped",[1588,1580]],[[64814,64814],"mapped",[1588,1581]],[[64815,64815],"mapped",[1588,1582]],[[64816,64816],"mapped",[1588,1605]],[[64817,64817],"mapped",[1587,1607]],[[64818,64818],"mapped",[1588,1607]],[[64819,64819],"mapped",[1591,1605]],[[64820,64820],"mapped",[1587,1580]],[[64821,64821],"mapped",[1587,1581]],[[64822,64822],"mapped",[1587,1582]],[[64823,64823],"mapped",[1588,1580]],[[64824,64824],"mapped",[1588,1581]],[[64825,64825],"mapped",[1588,1582]],[[64826,64826],"mapped",[1591,1605]],[[64827,64827],"mapped",[1592,1605]],[[64828,64829],"mapped",[1575,1611]],[[64830,64831],"valid",[],"NV8"],[[64832,64847],"disallowed"],[[64848,64848],"mapped",[1578,1580,1605]],[[64849,64850],"mapped",[1578,1581,1580]],[[64851,64851],"mapped",[1578,1581,1605]],[[64852,64852],"mapped",[1578,1582,1605]],[[64853,64853],"mapped",[1578,1605,1580]],[[64854,64854],"mapped",[1578,1605,1581]],[[64855,64855],"mapped",[1578,1605,1582]],[[64856,64857],"mapped",[1580,1605,1581]],[[64858,64858],"mapped",[1581,1605,1610]],[[64859,64859],"mapped",[1581,1605,1609]],[[64860,64860],"mapped",[1587,1581,1580]],[[64861,64861],"mapped",[1587,1580,1581]],[[64862,64862],"mapped",[1587,1580,1609]],[[64863,64864],"mapped",[1587,1605,1581]],[[64865,64865],"mapped",[1587,1605,1580]],[[64866,64867],"mapped",[1587,1605,1605]],[[64868,64869],"mapped",[1589,1581,1581]],[[64870,64870],"mapped",[1589,1605,1605]],[[64871,64872],"mapped",[1588,1581,1605]],[[64873,64873],"mapped",[1588,1580,1610]],[[64874,64875],"mapped",[1588,1605,1582]],[[64876,64877],"mapped",[1588,1605,1605]],[[64878,64878],"mapped",[1590,1581,1609]],[[64879,64880],"mapped",[1590,1582,1605]],[[64881,64882],"mapped",[1591,1605,1581]],[[64883,64883],"mapped",[1591,1605,1605]],[[64884,64884],"mapped",[1591,1605,1610]],[[64885,64885],"mapped",[1593,1580,1605]],[[64886,64887],"mapped",[1593,1605,1605]],[[64888,64888],"mapped",[1593,1605,1609]],[[64889,64889],"mapped",[1594,1605,1605]],[[64890,64890],"mapped",[1594,1605,1610]],[[64891,64891],"mapped",[1594,1605,1609]],[[64892,64893],"mapped",[1601,1582,1605]],[[64894,64894],"mapped",[1602,1605,1581]],[[64895,64895],"mapped",[1602,1605,1605]],[[64896,64896],"mapped",[1604,1581,1605]],[[64897,64897],"mapped",[1604,1581,1610]],[[64898,64898],"mapped",[1604,1581,1609]],[[64899,64900],"mapped",[1604,1580,1580]],[[64901,64902],"mapped",[1604,1582,1605]],[[64903,64904],"mapped",[1604,1605,1581]],[[64905,64905],"mapped",[1605,1581,1580]],[[64906,64906],"mapped",[1605,1581,1605]],[[64907,64907],"mapped",[1605,1581,1610]],[[64908,64908],"mapped",[1605,1580,1581]],[[64909,64909],"mapped",[1605,1580,1605]],[[64910,64910],"mapped",[1605,1582,1580]],[[64911,64911],"mapped",[1605,1582,1605]],[[64912,64913],"disallowed"],[[64914,64914],"mapped",[1605,1580,1582]],[[64915,64915],"mapped",[1607,1605,1580]],[[64916,64916],"mapped",[1607,1605,1605]],[[64917,64917],"mapped",[1606,1581,1605]],[[64918,64918],"mapped",[1606,1581,1609]],[[64919,64920],"mapped",[1606,1580,1605]],[[64921,64921],"mapped",[1606,1580,1609]],[[64922,64922],"mapped",[1606,1605,1610]],[[64923,64923],"mapped",[1606,1605,1609]],[[64924,64925],"mapped",[1610,1605,1605]],[[64926,64926],"mapped",[1576,1582,1610]],[[64927,64927],"mapped",[1578,1580,1610]],[[64928,64928],"mapped",[1578,1580,1609]],[[64929,64929],"mapped",[1578,1582,1610]],[[64930,64930],"mapped",[1578,1582,1609]],[[64931,64931],"mapped",[1578,1605,1610]],[[64932,64932],"mapped",[1578,1605,1609]],[[64933,64933],"mapped",[1580,1605,1610]],[[64934,64934],"mapped",[1580,1581,1609]],[[64935,64935],"mapped",[1580,1605,1609]],[[64936,64936],"mapped",[1587,1582,1609]],[[64937,64937],"mapped",[1589,1581,1610]],[[64938,64938],"mapped",[1588,1581,1610]],[[64939,64939],"mapped",[1590,1581,1610]],[[64940,64940],"mapped",[1604,1580,1610]],[[64941,64941],"mapped",[1604,1605,1610]],[[64942,64942],"mapped",[1610,1581,1610]],[[64943,64943],"mapped",[1610,1580,1610]],[[64944,64944],"mapped",[1610,1605,1610]],[[64945,64945],"mapped",[1605,1605,1610]],[[64946,64946],"mapped",[1602,1605,1610]],[[64947,64947],"mapped",[1606,1581,1610]],[[64948,64948],"mapped",[1602,1605,1581]],[[64949,64949],"mapped",[1604,1581,1605]],[[64950,64950],"mapped",[1593,1605,1610]],[[64951,64951],"mapped",[1603,1605,1610]],[[64952,64952],"mapped",[1606,1580,1581]],[[64953,64953],"mapped",[1605,1582,1610]],[[64954,64954],"mapped",[1604,1580,1605]],[[64955,64955],"mapped",[1603,1605,1605]],[[64956,64956],"mapped",[1604,1580,1605]],[[64957,64957],"mapped",[1606,1580,1581]],[[64958,64958],"mapped",[1580,1581,1610]],[[64959,64959],"mapped",[1581,1580,1610]],[[64960,64960],"mapped",[1605,1580,1610]],[[64961,64961],"mapped",[1601,1605,1610]],[[64962,64962],"mapped",[1576,1581,1610]],[[64963,64963],"mapped",[1603,1605,1605]],[[64964,64964],"mapped",[1593,1580,1605]],[[64965,64965],"mapped",[1589,1605,1605]],[[64966,64966],"mapped",[1587,1582,1610]],[[64967,64967],"mapped",[1606,1580,1610]],[[64968,64975],"disallowed"],[[64976,65007],"disallowed"],[[65008,65008],"mapped",[1589,1604,1746]],[[65009,65009],"mapped",[1602,1604,1746]],[[65010,65010],"mapped",[1575,1604,1604,1607]],[[65011,65011],"mapped",[1575,1603,1576,1585]],[[65012,65012],"mapped",[1605,1581,1605,1583]],[[65013,65013],"mapped",[1589,1604,1593,1605]],[[65014,65014],"mapped",[1585,1587,1608,1604]],[[65015,65015],"mapped",[1593,1604,1610,1607]],[[65016,65016],"mapped",[1608,1587,1604,1605]],[[65017,65017],"mapped",[1589,1604,1609]],[[65018,65018],"disallowed_STD3_mapped",[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605]],[[65019,65019],"disallowed_STD3_mapped",[1580,1604,32,1580,1604,1575,1604,1607]],[[65020,65020],"mapped",[1585,1740,1575,1604]],[[65021,65021],"valid",[],"NV8"],[[65022,65023],"disallowed"],[[65024,65039],"ignored"],[[65040,65040],"disallowed_STD3_mapped",[44]],[[65041,65041],"mapped",[12289]],[[65042,65042],"disallowed"],[[65043,65043],"disallowed_STD3_mapped",[58]],[[65044,65044],"disallowed_STD3_mapped",[59]],[[65045,65045],"disallowed_STD3_mapped",[33]],[[65046,65046],"disallowed_STD3_mapped",[63]],[[65047,65047],"mapped",[12310]],[[65048,65048],"mapped",[12311]],[[65049,65049],"disallowed"],[[65050,65055],"disallowed"],[[65056,65059],"valid"],[[65060,65062],"valid"],[[65063,65069],"valid"],[[65070,65071],"valid"],[[65072,65072],"disallowed"],[[65073,65073],"mapped",[8212]],[[65074,65074],"mapped",[8211]],[[65075,65076],"disallowed_STD3_mapped",[95]],[[65077,65077],"disallowed_STD3_mapped",[40]],[[65078,65078],"disallowed_STD3_mapped",[41]],[[65079,65079],"disallowed_STD3_mapped",[123]],[[65080,65080],"disallowed_STD3_mapped",[125]],[[65081,65081],"mapped",[12308]],[[65082,65082],"mapped",[12309]],[[65083,65083],"mapped",[12304]],[[65084,65084],"mapped",[12305]],[[65085,65085],"mapped",[12298]],[[65086,65086],"mapped",[12299]],[[65087,65087],"mapped",[12296]],[[65088,65088],"mapped",[12297]],[[65089,65089],"mapped",[12300]],[[65090,65090],"mapped",[12301]],[[65091,65091],"mapped",[12302]],[[65092,65092],"mapped",[12303]],[[65093,65094],"valid",[],"NV8"],[[65095,65095],"disallowed_STD3_mapped",[91]],[[65096,65096],"disallowed_STD3_mapped",[93]],[[65097,65100],"disallowed_STD3_mapped",[32,773]],[[65101,65103],"disallowed_STD3_mapped",[95]],[[65104,65104],"disallowed_STD3_mapped",[44]],[[65105,65105],"mapped",[12289]],[[65106,65106],"disallowed"],[[65107,65107],"disallowed"],[[65108,65108],"disallowed_STD3_mapped",[59]],[[65109,65109],"disallowed_STD3_mapped",[58]],[[65110,65110],"disallowed_STD3_mapped",[63]],[[65111,65111],"disallowed_STD3_mapped",[33]],[[65112,65112],"mapped",[8212]],[[65113,65113],"disallowed_STD3_mapped",[40]],[[65114,65114],"disallowed_STD3_mapped",[41]],[[65115,65115],"disallowed_STD3_mapped",[123]],[[65116,65116],"disallowed_STD3_mapped",[125]],[[65117,65117],"mapped",[12308]],[[65118,65118],"mapped",[12309]],[[65119,65119],"disallowed_STD3_mapped",[35]],[[65120,65120],"disallowed_STD3_mapped",[38]],[[65121,65121],"disallowed_STD3_mapped",[42]],[[65122,65122],"disallowed_STD3_mapped",[43]],[[65123,65123],"mapped",[45]],[[65124,65124],"disallowed_STD3_mapped",[60]],[[65125,65125],"disallowed_STD3_mapped",[62]],[[65126,65126],"disallowed_STD3_mapped",[61]],[[65127,65127],"disallowed"],[[65128,65128],"disallowed_STD3_mapped",[92]],[[65129,65129],"disallowed_STD3_mapped",[36]],[[65130,65130],"disallowed_STD3_mapped",[37]],[[65131,65131],"disallowed_STD3_mapped",[64]],[[65132,65135],"disallowed"],[[65136,65136],"disallowed_STD3_mapped",[32,1611]],[[65137,65137],"mapped",[1600,1611]],[[65138,65138],"disallowed_STD3_mapped",[32,1612]],[[65139,65139],"valid"],[[65140,65140],"disallowed_STD3_mapped",[32,1613]],[[65141,65141],"disallowed"],[[65142,65142],"disallowed_STD3_mapped",[32,1614]],[[65143,65143],"mapped",[1600,1614]],[[65144,65144],"disallowed_STD3_mapped",[32,1615]],[[65145,65145],"mapped",[1600,1615]],[[65146,65146],"disallowed_STD3_mapped",[32,1616]],[[65147,65147],"mapped",[1600,1616]],[[65148,65148],"disallowed_STD3_mapped",[32,1617]],[[65149,65149],"mapped",[1600,1617]],[[65150,65150],"disallowed_STD3_mapped",[32,1618]],[[65151,65151],"mapped",[1600,1618]],[[65152,65152],"mapped",[1569]],[[65153,65154],"mapped",[1570]],[[65155,65156],"mapped",[1571]],[[65157,65158],"mapped",[1572]],[[65159,65160],"mapped",[1573]],[[65161,65164],"mapped",[1574]],[[65165,65166],"mapped",[1575]],[[65167,65170],"mapped",[1576]],[[65171,65172],"mapped",[1577]],[[65173,65176],"mapped",[1578]],[[65177,65180],"mapped",[1579]],[[65181,65184],"mapped",[1580]],[[65185,65188],"mapped",[1581]],[[65189,65192],"mapped",[1582]],[[65193,65194],"mapped",[1583]],[[65195,65196],"mapped",[1584]],[[65197,65198],"mapped",[1585]],[[65199,65200],"mapped",[1586]],[[65201,65204],"mapped",[1587]],[[65205,65208],"mapped",[1588]],[[65209,65212],"mapped",[1589]],[[65213,65216],"mapped",[1590]],[[65217,65220],"mapped",[1591]],[[65221,65224],"mapped",[1592]],[[65225,65228],"mapped",[1593]],[[65229,65232],"mapped",[1594]],[[65233,65236],"mapped",[1601]],[[65237,65240],"mapped",[1602]],[[65241,65244],"mapped",[1603]],[[65245,65248],"mapped",[1604]],[[65249,65252],"mapped",[1605]],[[65253,65256],"mapped",[1606]],[[65257,65260],"mapped",[1607]],[[65261,65262],"mapped",[1608]],[[65263,65264],"mapped",[1609]],[[65265,65268],"mapped",[1610]],[[65269,65270],"mapped",[1604,1570]],[[65271,65272],"mapped",[1604,1571]],[[65273,65274],"mapped",[1604,1573]],[[65275,65276],"mapped",[1604,1575]],[[65277,65278],"disallowed"],[[65279,65279],"ignored"],[[65280,65280],"disallowed"],[[65281,65281],"disallowed_STD3_mapped",[33]],[[65282,65282],"disallowed_STD3_mapped",[34]],[[65283,65283],"disallowed_STD3_mapped",[35]],[[65284,65284],"disallowed_STD3_mapped",[36]],[[65285,65285],"disallowed_STD3_mapped",[37]],[[65286,65286],"disallowed_STD3_mapped",[38]],[[65287,65287],"disallowed_STD3_mapped",[39]],[[65288,65288],"disallowed_STD3_mapped",[40]],[[65289,65289],"disallowed_STD3_mapped",[41]],[[65290,65290],"disallowed_STD3_mapped",[42]],[[65291,65291],"disallowed_STD3_mapped",[43]],[[65292,65292],"disallowed_STD3_mapped",[44]],[[65293,65293],"mapped",[45]],[[65294,65294],"mapped",[46]],[[65295,65295],"disallowed_STD3_mapped",[47]],[[65296,65296],"mapped",[48]],[[65297,65297],"mapped",[49]],[[65298,65298],"mapped",[50]],[[65299,65299],"mapped",[51]],[[65300,65300],"mapped",[52]],[[65301,65301],"mapped",[53]],[[65302,65302],"mapped",[54]],[[65303,65303],"mapped",[55]],[[65304,65304],"mapped",[56]],[[65305,65305],"mapped",[57]],[[65306,65306],"disallowed_STD3_mapped",[58]],[[65307,65307],"disallowed_STD3_mapped",[59]],[[65308,65308],"disallowed_STD3_mapped",[60]],[[65309,65309],"disallowed_STD3_mapped",[61]],[[65310,65310],"disallowed_STD3_mapped",[62]],[[65311,65311],"disallowed_STD3_mapped",[63]],[[65312,65312],"disallowed_STD3_mapped",[64]],[[65313,65313],"mapped",[97]],[[65314,65314],"mapped",[98]],[[65315,65315],"mapped",[99]],[[65316,65316],"mapped",[100]],[[65317,65317],"mapped",[101]],[[65318,65318],"mapped",[102]],[[65319,65319],"mapped",[103]],[[65320,65320],"mapped",[104]],[[65321,65321],"mapped",[105]],[[65322,65322],"mapped",[106]],[[65323,65323],"mapped",[107]],[[65324,65324],"mapped",[108]],[[65325,65325],"mapped",[109]],[[65326,65326],"mapped",[110]],[[65327,65327],"mapped",[111]],[[65328,65328],"mapped",[112]],[[65329,65329],"mapped",[113]],[[65330,65330],"mapped",[114]],[[65331,65331],"mapped",[115]],[[65332,65332],"mapped",[116]],[[65333,65333],"mapped",[117]],[[65334,65334],"mapped",[118]],[[65335,65335],"mapped",[119]],[[65336,65336],"mapped",[120]],[[65337,65337],"mapped",[121]],[[65338,65338],"mapped",[122]],[[65339,65339],"disallowed_STD3_mapped",[91]],[[65340,65340],"disallowed_STD3_mapped",[92]],[[65341,65341],"disallowed_STD3_mapped",[93]],[[65342,65342],"disallowed_STD3_mapped",[94]],[[65343,65343],"disallowed_STD3_mapped",[95]],[[65344,65344],"disallowed_STD3_mapped",[96]],[[65345,65345],"mapped",[97]],[[65346,65346],"mapped",[98]],[[65347,65347],"mapped",[99]],[[65348,65348],"mapped",[100]],[[65349,65349],"mapped",[101]],[[65350,65350],"mapped",[102]],[[65351,65351],"mapped",[103]],[[65352,65352],"mapped",[104]],[[65353,65353],"mapped",[105]],[[65354,65354],"mapped",[106]],[[65355,65355],"mapped",[107]],[[65356,65356],"mapped",[108]],[[65357,65357],"mapped",[109]],[[65358,65358],"mapped",[110]],[[65359,65359],"mapped",[111]],[[65360,65360],"mapped",[112]],[[65361,65361],"mapped",[113]],[[65362,65362],"mapped",[114]],[[65363,65363],"mapped",[115]],[[65364,65364],"mapped",[116]],[[65365,65365],"mapped",[117]],[[65366,65366],"mapped",[118]],[[65367,65367],"mapped",[119]],[[65368,65368],"mapped",[120]],[[65369,65369],"mapped",[121]],[[65370,65370],"mapped",[122]],[[65371,65371],"disallowed_STD3_mapped",[123]],[[65372,65372],"disallowed_STD3_mapped",[124]],[[65373,65373],"disallowed_STD3_mapped",[125]],[[65374,65374],"disallowed_STD3_mapped",[126]],[[65375,65375],"mapped",[10629]],[[65376,65376],"mapped",[10630]],[[65377,65377],"mapped",[46]],[[65378,65378],"mapped",[12300]],[[65379,65379],"mapped",[12301]],[[65380,65380],"mapped",[12289]],[[65381,65381],"mapped",[12539]],[[65382,65382],"mapped",[12530]],[[65383,65383],"mapped",[12449]],[[65384,65384],"mapped",[12451]],[[65385,65385],"mapped",[12453]],[[65386,65386],"mapped",[12455]],[[65387,65387],"mapped",[12457]],[[65388,65388],"mapped",[12515]],[[65389,65389],"mapped",[12517]],[[65390,65390],"mapped",[12519]],[[65391,65391],"mapped",[12483]],[[65392,65392],"mapped",[12540]],[[65393,65393],"mapped",[12450]],[[65394,65394],"mapped",[12452]],[[65395,65395],"mapped",[12454]],[[65396,65396],"mapped",[12456]],[[65397,65397],"mapped",[12458]],[[65398,65398],"mapped",[12459]],[[65399,65399],"mapped",[12461]],[[65400,65400],"mapped",[12463]],[[65401,65401],"mapped",[12465]],[[65402,65402],"mapped",[12467]],[[65403,65403],"mapped",[12469]],[[65404,65404],"mapped",[12471]],[[65405,65405],"mapped",[12473]],[[65406,65406],"mapped",[12475]],[[65407,65407],"mapped",[12477]],[[65408,65408],"mapped",[12479]],[[65409,65409],"mapped",[12481]],[[65410,65410],"mapped",[12484]],[[65411,65411],"mapped",[12486]],[[65412,65412],"mapped",[12488]],[[65413,65413],"mapped",[12490]],[[65414,65414],"mapped",[12491]],[[65415,65415],"mapped",[12492]],[[65416,65416],"mapped",[12493]],[[65417,65417],"mapped",[12494]],[[65418,65418],"mapped",[12495]],[[65419,65419],"mapped",[12498]],[[65420,65420],"mapped",[12501]],[[65421,65421],"mapped",[12504]],[[65422,65422],"mapped",[12507]],[[65423,65423],"mapped",[12510]],[[65424,65424],"mapped",[12511]],[[65425,65425],"mapped",[12512]],[[65426,65426],"mapped",[12513]],[[65427,65427],"mapped",[12514]],[[65428,65428],"mapped",[12516]],[[65429,65429],"mapped",[12518]],[[65430,65430],"mapped",[12520]],[[65431,65431],"mapped",[12521]],[[65432,65432],"mapped",[12522]],[[65433,65433],"mapped",[12523]],[[65434,65434],"mapped",[12524]],[[65435,65435],"mapped",[12525]],[[65436,65436],"mapped",[12527]],[[65437,65437],"mapped",[12531]],[[65438,65438],"mapped",[12441]],[[65439,65439],"mapped",[12442]],[[65440,65440],"disallowed"],[[65441,65441],"mapped",[4352]],[[65442,65442],"mapped",[4353]],[[65443,65443],"mapped",[4522]],[[65444,65444],"mapped",[4354]],[[65445,65445],"mapped",[4524]],[[65446,65446],"mapped",[4525]],[[65447,65447],"mapped",[4355]],[[65448,65448],"mapped",[4356]],[[65449,65449],"mapped",[4357]],[[65450,65450],"mapped",[4528]],[[65451,65451],"mapped",[4529]],[[65452,65452],"mapped",[4530]],[[65453,65453],"mapped",[4531]],[[65454,65454],"mapped",[4532]],[[65455,65455],"mapped",[4533]],[[65456,65456],"mapped",[4378]],[[65457,65457],"mapped",[4358]],[[65458,65458],"mapped",[4359]],[[65459,65459],"mapped",[4360]],[[65460,65460],"mapped",[4385]],[[65461,65461],"mapped",[4361]],[[65462,65462],"mapped",[4362]],[[65463,65463],"mapped",[4363]],[[65464,65464],"mapped",[4364]],[[65465,65465],"mapped",[4365]],[[65466,65466],"mapped",[4366]],[[65467,65467],"mapped",[4367]],[[65468,65468],"mapped",[4368]],[[65469,65469],"mapped",[4369]],[[65470,65470],"mapped",[4370]],[[65471,65473],"disallowed"],[[65474,65474],"mapped",[4449]],[[65475,65475],"mapped",[4450]],[[65476,65476],"mapped",[4451]],[[65477,65477],"mapped",[4452]],[[65478,65478],"mapped",[4453]],[[65479,65479],"mapped",[4454]],[[65480,65481],"disallowed"],[[65482,65482],"mapped",[4455]],[[65483,65483],"mapped",[4456]],[[65484,65484],"mapped",[4457]],[[65485,65485],"mapped",[4458]],[[65486,65486],"mapped",[4459]],[[65487,65487],"mapped",[4460]],[[65488,65489],"disallowed"],[[65490,65490],"mapped",[4461]],[[65491,65491],"mapped",[4462]],[[65492,65492],"mapped",[4463]],[[65493,65493],"mapped",[4464]],[[65494,65494],"mapped",[4465]],[[65495,65495],"mapped",[4466]],[[65496,65497],"disallowed"],[[65498,65498],"mapped",[4467]],[[65499,65499],"mapped",[4468]],[[65500,65500],"mapped",[4469]],[[65501,65503],"disallowed"],[[65504,65504],"mapped",[162]],[[65505,65505],"mapped",[163]],[[65506,65506],"mapped",[172]],[[65507,65507],"disallowed_STD3_mapped",[32,772]],[[65508,65508],"mapped",[166]],[[65509,65509],"mapped",[165]],[[65510,65510],"mapped",[8361]],[[65511,65511],"disallowed"],[[65512,65512],"mapped",[9474]],[[65513,65513],"mapped",[8592]],[[65514,65514],"mapped",[8593]],[[65515,65515],"mapped",[8594]],[[65516,65516],"mapped",[8595]],[[65517,65517],"mapped",[9632]],[[65518,65518],"mapped",[9675]],[[65519,65528],"disallowed"],[[65529,65531],"disallowed"],[[65532,65532],"disallowed"],[[65533,65533],"disallowed"],[[65534,65535],"disallowed"],[[65536,65547],"valid"],[[65548,65548],"disallowed"],[[65549,65574],"valid"],[[65575,65575],"disallowed"],[[65576,65594],"valid"],[[65595,65595],"disallowed"],[[65596,65597],"valid"],[[65598,65598],"disallowed"],[[65599,65613],"valid"],[[65614,65615],"disallowed"],[[65616,65629],"valid"],[[65630,65663],"disallowed"],[[65664,65786],"valid"],[[65787,65791],"disallowed"],[[65792,65794],"valid",[],"NV8"],[[65795,65798],"disallowed"],[[65799,65843],"valid",[],"NV8"],[[65844,65846],"disallowed"],[[65847,65855],"valid",[],"NV8"],[[65856,65930],"valid",[],"NV8"],[[65931,65932],"valid",[],"NV8"],[[65933,65935],"disallowed"],[[65936,65947],"valid",[],"NV8"],[[65948,65951],"disallowed"],[[65952,65952],"valid",[],"NV8"],[[65953,65999],"disallowed"],[[66e3,66044],"valid",[],"NV8"],[[66045,66045],"valid"],[[66046,66175],"disallowed"],[[66176,66204],"valid"],[[66205,66207],"disallowed"],[[66208,66256],"valid"],[[66257,66271],"disallowed"],[[66272,66272],"valid"],[[66273,66299],"valid",[],"NV8"],[[66300,66303],"disallowed"],[[66304,66334],"valid"],[[66335,66335],"valid"],[[66336,66339],"valid",[],"NV8"],[[66340,66351],"disallowed"],[[66352,66368],"valid"],[[66369,66369],"valid",[],"NV8"],[[66370,66377],"valid"],[[66378,66378],"valid",[],"NV8"],[[66379,66383],"disallowed"],[[66384,66426],"valid"],[[66427,66431],"disallowed"],[[66432,66461],"valid"],[[66462,66462],"disallowed"],[[66463,66463],"valid",[],"NV8"],[[66464,66499],"valid"],[[66500,66503],"disallowed"],[[66504,66511],"valid"],[[66512,66517],"valid",[],"NV8"],[[66518,66559],"disallowed"],[[66560,66560],"mapped",[66600]],[[66561,66561],"mapped",[66601]],[[66562,66562],"mapped",[66602]],[[66563,66563],"mapped",[66603]],[[66564,66564],"mapped",[66604]],[[66565,66565],"mapped",[66605]],[[66566,66566],"mapped",[66606]],[[66567,66567],"mapped",[66607]],[[66568,66568],"mapped",[66608]],[[66569,66569],"mapped",[66609]],[[66570,66570],"mapped",[66610]],[[66571,66571],"mapped",[66611]],[[66572,66572],"mapped",[66612]],[[66573,66573],"mapped",[66613]],[[66574,66574],"mapped",[66614]],[[66575,66575],"mapped",[66615]],[[66576,66576],"mapped",[66616]],[[66577,66577],"mapped",[66617]],[[66578,66578],"mapped",[66618]],[[66579,66579],"mapped",[66619]],[[66580,66580],"mapped",[66620]],[[66581,66581],"mapped",[66621]],[[66582,66582],"mapped",[66622]],[[66583,66583],"mapped",[66623]],[[66584,66584],"mapped",[66624]],[[66585,66585],"mapped",[66625]],[[66586,66586],"mapped",[66626]],[[66587,66587],"mapped",[66627]],[[66588,66588],"mapped",[66628]],[[66589,66589],"mapped",[66629]],[[66590,66590],"mapped",[66630]],[[66591,66591],"mapped",[66631]],[[66592,66592],"mapped",[66632]],[[66593,66593],"mapped",[66633]],[[66594,66594],"mapped",[66634]],[[66595,66595],"mapped",[66635]],[[66596,66596],"mapped",[66636]],[[66597,66597],"mapped",[66637]],[[66598,66598],"mapped",[66638]],[[66599,66599],"mapped",[66639]],[[66600,66637],"valid"],[[66638,66717],"valid"],[[66718,66719],"disallowed"],[[66720,66729],"valid"],[[66730,66815],"disallowed"],[[66816,66855],"valid"],[[66856,66863],"disallowed"],[[66864,66915],"valid"],[[66916,66926],"disallowed"],[[66927,66927],"valid",[],"NV8"],[[66928,67071],"disallowed"],[[67072,67382],"valid"],[[67383,67391],"disallowed"],[[67392,67413],"valid"],[[67414,67423],"disallowed"],[[67424,67431],"valid"],[[67432,67583],"disallowed"],[[67584,67589],"valid"],[[67590,67591],"disallowed"],[[67592,67592],"valid"],[[67593,67593],"disallowed"],[[67594,67637],"valid"],[[67638,67638],"disallowed"],[[67639,67640],"valid"],[[67641,67643],"disallowed"],[[67644,67644],"valid"],[[67645,67646],"disallowed"],[[67647,67647],"valid"],[[67648,67669],"valid"],[[67670,67670],"disallowed"],[[67671,67679],"valid",[],"NV8"],[[67680,67702],"valid"],[[67703,67711],"valid",[],"NV8"],[[67712,67742],"valid"],[[67743,67750],"disallowed"],[[67751,67759],"valid",[],"NV8"],[[67760,67807],"disallowed"],[[67808,67826],"valid"],[[67827,67827],"disallowed"],[[67828,67829],"valid"],[[67830,67834],"disallowed"],[[67835,67839],"valid",[],"NV8"],[[67840,67861],"valid"],[[67862,67865],"valid",[],"NV8"],[[67866,67867],"valid",[],"NV8"],[[67868,67870],"disallowed"],[[67871,67871],"valid",[],"NV8"],[[67872,67897],"valid"],[[67898,67902],"disallowed"],[[67903,67903],"valid",[],"NV8"],[[67904,67967],"disallowed"],[[67968,68023],"valid"],[[68024,68027],"disallowed"],[[68028,68029],"valid",[],"NV8"],[[68030,68031],"valid"],[[68032,68047],"valid",[],"NV8"],[[68048,68049],"disallowed"],[[68050,68095],"valid",[],"NV8"],[[68096,68099],"valid"],[[68100,68100],"disallowed"],[[68101,68102],"valid"],[[68103,68107],"disallowed"],[[68108,68115],"valid"],[[68116,68116],"disallowed"],[[68117,68119],"valid"],[[68120,68120],"disallowed"],[[68121,68147],"valid"],[[68148,68151],"disallowed"],[[68152,68154],"valid"],[[68155,68158],"disallowed"],[[68159,68159],"valid"],[[68160,68167],"valid",[],"NV8"],[[68168,68175],"disallowed"],[[68176,68184],"valid",[],"NV8"],[[68185,68191],"disallowed"],[[68192,68220],"valid"],[[68221,68223],"valid",[],"NV8"],[[68224,68252],"valid"],[[68253,68255],"valid",[],"NV8"],[[68256,68287],"disallowed"],[[68288,68295],"valid"],[[68296,68296],"valid",[],"NV8"],[[68297,68326],"valid"],[[68327,68330],"disallowed"],[[68331,68342],"valid",[],"NV8"],[[68343,68351],"disallowed"],[[68352,68405],"valid"],[[68406,68408],"disallowed"],[[68409,68415],"valid",[],"NV8"],[[68416,68437],"valid"],[[68438,68439],"disallowed"],[[68440,68447],"valid",[],"NV8"],[[68448,68466],"valid"],[[68467,68471],"disallowed"],[[68472,68479],"valid",[],"NV8"],[[68480,68497],"valid"],[[68498,68504],"disallowed"],[[68505,68508],"valid",[],"NV8"],[[68509,68520],"disallowed"],[[68521,68527],"valid",[],"NV8"],[[68528,68607],"disallowed"],[[68608,68680],"valid"],[[68681,68735],"disallowed"],[[68736,68736],"mapped",[68800]],[[68737,68737],"mapped",[68801]],[[68738,68738],"mapped",[68802]],[[68739,68739],"mapped",[68803]],[[68740,68740],"mapped",[68804]],[[68741,68741],"mapped",[68805]],[[68742,68742],"mapped",[68806]],[[68743,68743],"mapped",[68807]],[[68744,68744],"mapped",[68808]],[[68745,68745],"mapped",[68809]],[[68746,68746],"mapped",[68810]],[[68747,68747],"mapped",[68811]],[[68748,68748],"mapped",[68812]],[[68749,68749],"mapped",[68813]],[[68750,68750],"mapped",[68814]],[[68751,68751],"mapped",[68815]],[[68752,68752],"mapped",[68816]],[[68753,68753],"mapped",[68817]],[[68754,68754],"mapped",[68818]],[[68755,68755],"mapped",[68819]],[[68756,68756],"mapped",[68820]],[[68757,68757],"mapped",[68821]],[[68758,68758],"mapped",[68822]],[[68759,68759],"mapped",[68823]],[[68760,68760],"mapped",[68824]],[[68761,68761],"mapped",[68825]],[[68762,68762],"mapped",[68826]],[[68763,68763],"mapped",[68827]],[[68764,68764],"mapped",[68828]],[[68765,68765],"mapped",[68829]],[[68766,68766],"mapped",[68830]],[[68767,68767],"mapped",[68831]],[[68768,68768],"mapped",[68832]],[[68769,68769],"mapped",[68833]],[[68770,68770],"mapped",[68834]],[[68771,68771],"mapped",[68835]],[[68772,68772],"mapped",[68836]],[[68773,68773],"mapped",[68837]],[[68774,68774],"mapped",[68838]],[[68775,68775],"mapped",[68839]],[[68776,68776],"mapped",[68840]],[[68777,68777],"mapped",[68841]],[[68778,68778],"mapped",[68842]],[[68779,68779],"mapped",[68843]],[[68780,68780],"mapped",[68844]],[[68781,68781],"mapped",[68845]],[[68782,68782],"mapped",[68846]],[[68783,68783],"mapped",[68847]],[[68784,68784],"mapped",[68848]],[[68785,68785],"mapped",[68849]],[[68786,68786],"mapped",[68850]],[[68787,68799],"disallowed"],[[68800,68850],"valid"],[[68851,68857],"disallowed"],[[68858,68863],"valid",[],"NV8"],[[68864,69215],"disallowed"],[[69216,69246],"valid",[],"NV8"],[[69247,69631],"disallowed"],[[69632,69702],"valid"],[[69703,69709],"valid",[],"NV8"],[[69710,69713],"disallowed"],[[69714,69733],"valid",[],"NV8"],[[69734,69743],"valid"],[[69744,69758],"disallowed"],[[69759,69759],"valid"],[[69760,69818],"valid"],[[69819,69820],"valid",[],"NV8"],[[69821,69821],"disallowed"],[[69822,69825],"valid",[],"NV8"],[[69826,69839],"disallowed"],[[69840,69864],"valid"],[[69865,69871],"disallowed"],[[69872,69881],"valid"],[[69882,69887],"disallowed"],[[69888,69940],"valid"],[[69941,69941],"disallowed"],[[69942,69951],"valid"],[[69952,69955],"valid",[],"NV8"],[[69956,69967],"disallowed"],[[69968,70003],"valid"],[[70004,70005],"valid",[],"NV8"],[[70006,70006],"valid"],[[70007,70015],"disallowed"],[[70016,70084],"valid"],[[70085,70088],"valid",[],"NV8"],[[70089,70089],"valid",[],"NV8"],[[70090,70092],"valid"],[[70093,70093],"valid",[],"NV8"],[[70094,70095],"disallowed"],[[70096,70105],"valid"],[[70106,70106],"valid"],[[70107,70107],"valid",[],"NV8"],[[70108,70108],"valid"],[[70109,70111],"valid",[],"NV8"],[[70112,70112],"disallowed"],[[70113,70132],"valid",[],"NV8"],[[70133,70143],"disallowed"],[[70144,70161],"valid"],[[70162,70162],"disallowed"],[[70163,70199],"valid"],[[70200,70205],"valid",[],"NV8"],[[70206,70271],"disallowed"],[[70272,70278],"valid"],[[70279,70279],"disallowed"],[[70280,70280],"valid"],[[70281,70281],"disallowed"],[[70282,70285],"valid"],[[70286,70286],"disallowed"],[[70287,70301],"valid"],[[70302,70302],"disallowed"],[[70303,70312],"valid"],[[70313,70313],"valid",[],"NV8"],[[70314,70319],"disallowed"],[[70320,70378],"valid"],[[70379,70383],"disallowed"],[[70384,70393],"valid"],[[70394,70399],"disallowed"],[[70400,70400],"valid"],[[70401,70403],"valid"],[[70404,70404],"disallowed"],[[70405,70412],"valid"],[[70413,70414],"disallowed"],[[70415,70416],"valid"],[[70417,70418],"disallowed"],[[70419,70440],"valid"],[[70441,70441],"disallowed"],[[70442,70448],"valid"],[[70449,70449],"disallowed"],[[70450,70451],"valid"],[[70452,70452],"disallowed"],[[70453,70457],"valid"],[[70458,70459],"disallowed"],[[70460,70468],"valid"],[[70469,70470],"disallowed"],[[70471,70472],"valid"],[[70473,70474],"disallowed"],[[70475,70477],"valid"],[[70478,70479],"disallowed"],[[70480,70480],"valid"],[[70481,70486],"disallowed"],[[70487,70487],"valid"],[[70488,70492],"disallowed"],[[70493,70499],"valid"],[[70500,70501],"disallowed"],[[70502,70508],"valid"],[[70509,70511],"disallowed"],[[70512,70516],"valid"],[[70517,70783],"disallowed"],[[70784,70853],"valid"],[[70854,70854],"valid",[],"NV8"],[[70855,70855],"valid"],[[70856,70863],"disallowed"],[[70864,70873],"valid"],[[70874,71039],"disallowed"],[[71040,71093],"valid"],[[71094,71095],"disallowed"],[[71096,71104],"valid"],[[71105,71113],"valid",[],"NV8"],[[71114,71127],"valid",[],"NV8"],[[71128,71133],"valid"],[[71134,71167],"disallowed"],[[71168,71232],"valid"],[[71233,71235],"valid",[],"NV8"],[[71236,71236],"valid"],[[71237,71247],"disallowed"],[[71248,71257],"valid"],[[71258,71295],"disallowed"],[[71296,71351],"valid"],[[71352,71359],"disallowed"],[[71360,71369],"valid"],[[71370,71423],"disallowed"],[[71424,71449],"valid"],[[71450,71452],"disallowed"],[[71453,71467],"valid"],[[71468,71471],"disallowed"],[[71472,71481],"valid"],[[71482,71487],"valid",[],"NV8"],[[71488,71839],"disallowed"],[[71840,71840],"mapped",[71872]],[[71841,71841],"mapped",[71873]],[[71842,71842],"mapped",[71874]],[[71843,71843],"mapped",[71875]],[[71844,71844],"mapped",[71876]],[[71845,71845],"mapped",[71877]],[[71846,71846],"mapped",[71878]],[[71847,71847],"mapped",[71879]],[[71848,71848],"mapped",[71880]],[[71849,71849],"mapped",[71881]],[[71850,71850],"mapped",[71882]],[[71851,71851],"mapped",[71883]],[[71852,71852],"mapped",[71884]],[[71853,71853],"mapped",[71885]],[[71854,71854],"mapped",[71886]],[[71855,71855],"mapped",[71887]],[[71856,71856],"mapped",[71888]],[[71857,71857],"mapped",[71889]],[[71858,71858],"mapped",[71890]],[[71859,71859],"mapped",[71891]],[[71860,71860],"mapped",[71892]],[[71861,71861],"mapped",[71893]],[[71862,71862],"mapped",[71894]],[[71863,71863],"mapped",[71895]],[[71864,71864],"mapped",[71896]],[[71865,71865],"mapped",[71897]],[[71866,71866],"mapped",[71898]],[[71867,71867],"mapped",[71899]],[[71868,71868],"mapped",[71900]],[[71869,71869],"mapped",[71901]],[[71870,71870],"mapped",[71902]],[[71871,71871],"mapped",[71903]],[[71872,71913],"valid"],[[71914,71922],"valid",[],"NV8"],[[71923,71934],"disallowed"],[[71935,71935],"valid"],[[71936,72383],"disallowed"],[[72384,72440],"valid"],[[72441,73727],"disallowed"],[[73728,74606],"valid"],[[74607,74648],"valid"],[[74649,74649],"valid"],[[74650,74751],"disallowed"],[[74752,74850],"valid",[],"NV8"],[[74851,74862],"valid",[],"NV8"],[[74863,74863],"disallowed"],[[74864,74867],"valid",[],"NV8"],[[74868,74868],"valid",[],"NV8"],[[74869,74879],"disallowed"],[[74880,75075],"valid"],[[75076,77823],"disallowed"],[[77824,78894],"valid"],[[78895,82943],"disallowed"],[[82944,83526],"valid"],[[83527,92159],"disallowed"],[[92160,92728],"valid"],[[92729,92735],"disallowed"],[[92736,92766],"valid"],[[92767,92767],"disallowed"],[[92768,92777],"valid"],[[92778,92781],"disallowed"],[[92782,92783],"valid",[],"NV8"],[[92784,92879],"disallowed"],[[92880,92909],"valid"],[[92910,92911],"disallowed"],[[92912,92916],"valid"],[[92917,92917],"valid",[],"NV8"],[[92918,92927],"disallowed"],[[92928,92982],"valid"],[[92983,92991],"valid",[],"NV8"],[[92992,92995],"valid"],[[92996,92997],"valid",[],"NV8"],[[92998,93007],"disallowed"],[[93008,93017],"valid"],[[93018,93018],"disallowed"],[[93019,93025],"valid",[],"NV8"],[[93026,93026],"disallowed"],[[93027,93047],"valid"],[[93048,93052],"disallowed"],[[93053,93071],"valid"],[[93072,93951],"disallowed"],[[93952,94020],"valid"],[[94021,94031],"disallowed"],[[94032,94078],"valid"],[[94079,94094],"disallowed"],[[94095,94111],"valid"],[[94112,110591],"disallowed"],[[110592,110593],"valid"],[[110594,113663],"disallowed"],[[113664,113770],"valid"],[[113771,113775],"disallowed"],[[113776,113788],"valid"],[[113789,113791],"disallowed"],[[113792,113800],"valid"],[[113801,113807],"disallowed"],[[113808,113817],"valid"],[[113818,113819],"disallowed"],[[113820,113820],"valid",[],"NV8"],[[113821,113822],"valid"],[[113823,113823],"valid",[],"NV8"],[[113824,113827],"ignored"],[[113828,118783],"disallowed"],[[118784,119029],"valid",[],"NV8"],[[119030,119039],"disallowed"],[[119040,119078],"valid",[],"NV8"],[[119079,119080],"disallowed"],[[119081,119081],"valid",[],"NV8"],[[119082,119133],"valid",[],"NV8"],[[119134,119134],"mapped",[119127,119141]],[[119135,119135],"mapped",[119128,119141]],[[119136,119136],"mapped",[119128,119141,119150]],[[119137,119137],"mapped",[119128,119141,119151]],[[119138,119138],"mapped",[119128,119141,119152]],[[119139,119139],"mapped",[119128,119141,119153]],[[119140,119140],"mapped",[119128,119141,119154]],[[119141,119154],"valid",[],"NV8"],[[119155,119162],"disallowed"],[[119163,119226],"valid",[],"NV8"],[[119227,119227],"mapped",[119225,119141]],[[119228,119228],"mapped",[119226,119141]],[[119229,119229],"mapped",[119225,119141,119150]],[[119230,119230],"mapped",[119226,119141,119150]],[[119231,119231],"mapped",[119225,119141,119151]],[[119232,119232],"mapped",[119226,119141,119151]],[[119233,119261],"valid",[],"NV8"],[[119262,119272],"valid",[],"NV8"],[[119273,119295],"disallowed"],[[119296,119365],"valid",[],"NV8"],[[119366,119551],"disallowed"],[[119552,119638],"valid",[],"NV8"],[[119639,119647],"disallowed"],[[119648,119665],"valid",[],"NV8"],[[119666,119807],"disallowed"],[[119808,119808],"mapped",[97]],[[119809,119809],"mapped",[98]],[[119810,119810],"mapped",[99]],[[119811,119811],"mapped",[100]],[[119812,119812],"mapped",[101]],[[119813,119813],"mapped",[102]],[[119814,119814],"mapped",[103]],[[119815,119815],"mapped",[104]],[[119816,119816],"mapped",[105]],[[119817,119817],"mapped",[106]],[[119818,119818],"mapped",[107]],[[119819,119819],"mapped",[108]],[[119820,119820],"mapped",[109]],[[119821,119821],"mapped",[110]],[[119822,119822],"mapped",[111]],[[119823,119823],"mapped",[112]],[[119824,119824],"mapped",[113]],[[119825,119825],"mapped",[114]],[[119826,119826],"mapped",[115]],[[119827,119827],"mapped",[116]],[[119828,119828],"mapped",[117]],[[119829,119829],"mapped",[118]],[[119830,119830],"mapped",[119]],[[119831,119831],"mapped",[120]],[[119832,119832],"mapped",[121]],[[119833,119833],"mapped",[122]],[[119834,119834],"mapped",[97]],[[119835,119835],"mapped",[98]],[[119836,119836],"mapped",[99]],[[119837,119837],"mapped",[100]],[[119838,119838],"mapped",[101]],[[119839,119839],"mapped",[102]],[[119840,119840],"mapped",[103]],[[119841,119841],"mapped",[104]],[[119842,119842],"mapped",[105]],[[119843,119843],"mapped",[106]],[[119844,119844],"mapped",[107]],[[119845,119845],"mapped",[108]],[[119846,119846],"mapped",[109]],[[119847,119847],"mapped",[110]],[[119848,119848],"mapped",[111]],[[119849,119849],"mapped",[112]],[[119850,119850],"mapped",[113]],[[119851,119851],"mapped",[114]],[[119852,119852],"mapped",[115]],[[119853,119853],"mapped",[116]],[[119854,119854],"mapped",[117]],[[119855,119855],"mapped",[118]],[[119856,119856],"mapped",[119]],[[119857,119857],"mapped",[120]],[[119858,119858],"mapped",[121]],[[119859,119859],"mapped",[122]],[[119860,119860],"mapped",[97]],[[119861,119861],"mapped",[98]],[[119862,119862],"mapped",[99]],[[119863,119863],"mapped",[100]],[[119864,119864],"mapped",[101]],[[119865,119865],"mapped",[102]],[[119866,119866],"mapped",[103]],[[119867,119867],"mapped",[104]],[[119868,119868],"mapped",[105]],[[119869,119869],"mapped",[106]],[[119870,119870],"mapped",[107]],[[119871,119871],"mapped",[108]],[[119872,119872],"mapped",[109]],[[119873,119873],"mapped",[110]],[[119874,119874],"mapped",[111]],[[119875,119875],"mapped",[112]],[[119876,119876],"mapped",[113]],[[119877,119877],"mapped",[114]],[[119878,119878],"mapped",[115]],[[119879,119879],"mapped",[116]],[[119880,119880],"mapped",[117]],[[119881,119881],"mapped",[118]],[[119882,119882],"mapped",[119]],[[119883,119883],"mapped",[120]],[[119884,119884],"mapped",[121]],[[119885,119885],"mapped",[122]],[[119886,119886],"mapped",[97]],[[119887,119887],"mapped",[98]],[[119888,119888],"mapped",[99]],[[119889,119889],"mapped",[100]],[[119890,119890],"mapped",[101]],[[119891,119891],"mapped",[102]],[[119892,119892],"mapped",[103]],[[119893,119893],"disallowed"],[[119894,119894],"mapped",[105]],[[119895,119895],"mapped",[106]],[[119896,119896],"mapped",[107]],[[119897,119897],"mapped",[108]],[[119898,119898],"mapped",[109]],[[119899,119899],"mapped",[110]],[[119900,119900],"mapped",[111]],[[119901,119901],"mapped",[112]],[[119902,119902],"mapped",[113]],[[119903,119903],"mapped",[114]],[[119904,119904],"mapped",[115]],[[119905,119905],"mapped",[116]],[[119906,119906],"mapped",[117]],[[119907,119907],"mapped",[118]],[[119908,119908],"mapped",[119]],[[119909,119909],"mapped",[120]],[[119910,119910],"mapped",[121]],[[119911,119911],"mapped",[122]],[[119912,119912],"mapped",[97]],[[119913,119913],"mapped",[98]],[[119914,119914],"mapped",[99]],[[119915,119915],"mapped",[100]],[[119916,119916],"mapped",[101]],[[119917,119917],"mapped",[102]],[[119918,119918],"mapped",[103]],[[119919,119919],"mapped",[104]],[[119920,119920],"mapped",[105]],[[119921,119921],"mapped",[106]],[[119922,119922],"mapped",[107]],[[119923,119923],"mapped",[108]],[[119924,119924],"mapped",[109]],[[119925,119925],"mapped",[110]],[[119926,119926],"mapped",[111]],[[119927,119927],"mapped",[112]],[[119928,119928],"mapped",[113]],[[119929,119929],"mapped",[114]],[[119930,119930],"mapped",[115]],[[119931,119931],"mapped",[116]],[[119932,119932],"mapped",[117]],[[119933,119933],"mapped",[118]],[[119934,119934],"mapped",[119]],[[119935,119935],"mapped",[120]],[[119936,119936],"mapped",[121]],[[119937,119937],"mapped",[122]],[[119938,119938],"mapped",[97]],[[119939,119939],"mapped",[98]],[[119940,119940],"mapped",[99]],[[119941,119941],"mapped",[100]],[[119942,119942],"mapped",[101]],[[119943,119943],"mapped",[102]],[[119944,119944],"mapped",[103]],[[119945,119945],"mapped",[104]],[[119946,119946],"mapped",[105]],[[119947,119947],"mapped",[106]],[[119948,119948],"mapped",[107]],[[119949,119949],"mapped",[108]],[[119950,119950],"mapped",[109]],[[119951,119951],"mapped",[110]],[[119952,119952],"mapped",[111]],[[119953,119953],"mapped",[112]],[[119954,119954],"mapped",[113]],[[119955,119955],"mapped",[114]],[[119956,119956],"mapped",[115]],[[119957,119957],"mapped",[116]],[[119958,119958],"mapped",[117]],[[119959,119959],"mapped",[118]],[[119960,119960],"mapped",[119]],[[119961,119961],"mapped",[120]],[[119962,119962],"mapped",[121]],[[119963,119963],"mapped",[122]],[[119964,119964],"mapped",[97]],[[119965,119965],"disallowed"],[[119966,119966],"mapped",[99]],[[119967,119967],"mapped",[100]],[[119968,119969],"disallowed"],[[119970,119970],"mapped",[103]],[[119971,119972],"disallowed"],[[119973,119973],"mapped",[106]],[[119974,119974],"mapped",[107]],[[119975,119976],"disallowed"],[[119977,119977],"mapped",[110]],[[119978,119978],"mapped",[111]],[[119979,119979],"mapped",[112]],[[119980,119980],"mapped",[113]],[[119981,119981],"disallowed"],[[119982,119982],"mapped",[115]],[[119983,119983],"mapped",[116]],[[119984,119984],"mapped",[117]],[[119985,119985],"mapped",[118]],[[119986,119986],"mapped",[119]],[[119987,119987],"mapped",[120]],[[119988,119988],"mapped",[121]],[[119989,119989],"mapped",[122]],[[119990,119990],"mapped",[97]],[[119991,119991],"mapped",[98]],[[119992,119992],"mapped",[99]],[[119993,119993],"mapped",[100]],[[119994,119994],"disallowed"],[[119995,119995],"mapped",[102]],[[119996,119996],"disallowed"],[[119997,119997],"mapped",[104]],[[119998,119998],"mapped",[105]],[[119999,119999],"mapped",[106]],[[12e4,12e4],"mapped",[107]],[[120001,120001],"mapped",[108]],[[120002,120002],"mapped",[109]],[[120003,120003],"mapped",[110]],[[120004,120004],"disallowed"],[[120005,120005],"mapped",[112]],[[120006,120006],"mapped",[113]],[[120007,120007],"mapped",[114]],[[120008,120008],"mapped",[115]],[[120009,120009],"mapped",[116]],[[120010,120010],"mapped",[117]],[[120011,120011],"mapped",[118]],[[120012,120012],"mapped",[119]],[[120013,120013],"mapped",[120]],[[120014,120014],"mapped",[121]],[[120015,120015],"mapped",[122]],[[120016,120016],"mapped",[97]],[[120017,120017],"mapped",[98]],[[120018,120018],"mapped",[99]],[[120019,120019],"mapped",[100]],[[120020,120020],"mapped",[101]],[[120021,120021],"mapped",[102]],[[120022,120022],"mapped",[103]],[[120023,120023],"mapped",[104]],[[120024,120024],"mapped",[105]],[[120025,120025],"mapped",[106]],[[120026,120026],"mapped",[107]],[[120027,120027],"mapped",[108]],[[120028,120028],"mapped",[109]],[[120029,120029],"mapped",[110]],[[120030,120030],"mapped",[111]],[[120031,120031],"mapped",[112]],[[120032,120032],"mapped",[113]],[[120033,120033],"mapped",[114]],[[120034,120034],"mapped",[115]],[[120035,120035],"mapped",[116]],[[120036,120036],"mapped",[117]],[[120037,120037],"mapped",[118]],[[120038,120038],"mapped",[119]],[[120039,120039],"mapped",[120]],[[120040,120040],"mapped",[121]],[[120041,120041],"mapped",[122]],[[120042,120042],"mapped",[97]],[[120043,120043],"mapped",[98]],[[120044,120044],"mapped",[99]],[[120045,120045],"mapped",[100]],[[120046,120046],"mapped",[101]],[[120047,120047],"mapped",[102]],[[120048,120048],"mapped",[103]],[[120049,120049],"mapped",[104]],[[120050,120050],"mapped",[105]],[[120051,120051],"mapped",[106]],[[120052,120052],"mapped",[107]],[[120053,120053],"mapped",[108]],[[120054,120054],"mapped",[109]],[[120055,120055],"mapped",[110]],[[120056,120056],"mapped",[111]],[[120057,120057],"mapped",[112]],[[120058,120058],"mapped",[113]],[[120059,120059],"mapped",[114]],[[120060,120060],"mapped",[115]],[[120061,120061],"mapped",[116]],[[120062,120062],"mapped",[117]],[[120063,120063],"mapped",[118]],[[120064,120064],"mapped",[119]],[[120065,120065],"mapped",[120]],[[120066,120066],"mapped",[121]],[[120067,120067],"mapped",[122]],[[120068,120068],"mapped",[97]],[[120069,120069],"mapped",[98]],[[120070,120070],"disallowed"],[[120071,120071],"mapped",[100]],[[120072,120072],"mapped",[101]],[[120073,120073],"mapped",[102]],[[120074,120074],"mapped",[103]],[[120075,120076],"disallowed"],[[120077,120077],"mapped",[106]],[[120078,120078],"mapped",[107]],[[120079,120079],"mapped",[108]],[[120080,120080],"mapped",[109]],[[120081,120081],"mapped",[110]],[[120082,120082],"mapped",[111]],[[120083,120083],"mapped",[112]],[[120084,120084],"mapped",[113]],[[120085,120085],"disallowed"],[[120086,120086],"mapped",[115]],[[120087,120087],"mapped",[116]],[[120088,120088],"mapped",[117]],[[120089,120089],"mapped",[118]],[[120090,120090],"mapped",[119]],[[120091,120091],"mapped",[120]],[[120092,120092],"mapped",[121]],[[120093,120093],"disallowed"],[[120094,120094],"mapped",[97]],[[120095,120095],"mapped",[98]],[[120096,120096],"mapped",[99]],[[120097,120097],"mapped",[100]],[[120098,120098],"mapped",[101]],[[120099,120099],"mapped",[102]],[[120100,120100],"mapped",[103]],[[120101,120101],"mapped",[104]],[[120102,120102],"mapped",[105]],[[120103,120103],"mapped",[106]],[[120104,120104],"mapped",[107]],[[120105,120105],"mapped",[108]],[[120106,120106],"mapped",[109]],[[120107,120107],"mapped",[110]],[[120108,120108],"mapped",[111]],[[120109,120109],"mapped",[112]],[[120110,120110],"mapped",[113]],[[120111,120111],"mapped",[114]],[[120112,120112],"mapped",[115]],[[120113,120113],"mapped",[116]],[[120114,120114],"mapped",[117]],[[120115,120115],"mapped",[118]],[[120116,120116],"mapped",[119]],[[120117,120117],"mapped",[120]],[[120118,120118],"mapped",[121]],[[120119,120119],"mapped",[122]],[[120120,120120],"mapped",[97]],[[120121,120121],"mapped",[98]],[[120122,120122],"disallowed"],[[120123,120123],"mapped",[100]],[[120124,120124],"mapped",[101]],[[120125,120125],"mapped",[102]],[[120126,120126],"mapped",[103]],[[120127,120127],"disallowed"],[[120128,120128],"mapped",[105]],[[120129,120129],"mapped",[106]],[[120130,120130],"mapped",[107]],[[120131,120131],"mapped",[108]],[[120132,120132],"mapped",[109]],[[120133,120133],"disallowed"],[[120134,120134],"mapped",[111]],[[120135,120137],"disallowed"],[[120138,120138],"mapped",[115]],[[120139,120139],"mapped",[116]],[[120140,120140],"mapped",[117]],[[120141,120141],"mapped",[118]],[[120142,120142],"mapped",[119]],[[120143,120143],"mapped",[120]],[[120144,120144],"mapped",[121]],[[120145,120145],"disallowed"],[[120146,120146],"mapped",[97]],[[120147,120147],"mapped",[98]],[[120148,120148],"mapped",[99]],[[120149,120149],"mapped",[100]],[[120150,120150],"mapped",[101]],[[120151,120151],"mapped",[102]],[[120152,120152],"mapped",[103]],[[120153,120153],"mapped",[104]],[[120154,120154],"mapped",[105]],[[120155,120155],"mapped",[106]],[[120156,120156],"mapped",[107]],[[120157,120157],"mapped",[108]],[[120158,120158],"mapped",[109]],[[120159,120159],"mapped",[110]],[[120160,120160],"mapped",[111]],[[120161,120161],"mapped",[112]],[[120162,120162],"mapped",[113]],[[120163,120163],"mapped",[114]],[[120164,120164],"mapped",[115]],[[120165,120165],"mapped",[116]],[[120166,120166],"mapped",[117]],[[120167,120167],"mapped",[118]],[[120168,120168],"mapped",[119]],[[120169,120169],"mapped",[120]],[[120170,120170],"mapped",[121]],[[120171,120171],"mapped",[122]],[[120172,120172],"mapped",[97]],[[120173,120173],"mapped",[98]],[[120174,120174],"mapped",[99]],[[120175,120175],"mapped",[100]],[[120176,120176],"mapped",[101]],[[120177,120177],"mapped",[102]],[[120178,120178],"mapped",[103]],[[120179,120179],"mapped",[104]],[[120180,120180],"mapped",[105]],[[120181,120181],"mapped",[106]],[[120182,120182],"mapped",[107]],[[120183,120183],"mapped",[108]],[[120184,120184],"mapped",[109]],[[120185,120185],"mapped",[110]],[[120186,120186],"mapped",[111]],[[120187,120187],"mapped",[112]],[[120188,120188],"mapped",[113]],[[120189,120189],"mapped",[114]],[[120190,120190],"mapped",[115]],[[120191,120191],"mapped",[116]],[[120192,120192],"mapped",[117]],[[120193,120193],"mapped",[118]],[[120194,120194],"mapped",[119]],[[120195,120195],"mapped",[120]],[[120196,120196],"mapped",[121]],[[120197,120197],"mapped",[122]],[[120198,120198],"mapped",[97]],[[120199,120199],"mapped",[98]],[[120200,120200],"mapped",[99]],[[120201,120201],"mapped",[100]],[[120202,120202],"mapped",[101]],[[120203,120203],"mapped",[102]],[[120204,120204],"mapped",[103]],[[120205,120205],"mapped",[104]],[[120206,120206],"mapped",[105]],[[120207,120207],"mapped",[106]],[[120208,120208],"mapped",[107]],[[120209,120209],"mapped",[108]],[[120210,120210],"mapped",[109]],[[120211,120211],"mapped",[110]],[[120212,120212],"mapped",[111]],[[120213,120213],"mapped",[112]],[[120214,120214],"mapped",[113]],[[120215,120215],"mapped",[114]],[[120216,120216],"mapped",[115]],[[120217,120217],"mapped",[116]],[[120218,120218],"mapped",[117]],[[120219,120219],"mapped",[118]],[[120220,120220],"mapped",[119]],[[120221,120221],"mapped",[120]],[[120222,120222],"mapped",[121]],[[120223,120223],"mapped",[122]],[[120224,120224],"mapped",[97]],[[120225,120225],"mapped",[98]],[[120226,120226],"mapped",[99]],[[120227,120227],"mapped",[100]],[[120228,120228],"mapped",[101]],[[120229,120229],"mapped",[102]],[[120230,120230],"mapped",[103]],[[120231,120231],"mapped",[104]],[[120232,120232],"mapped",[105]],[[120233,120233],"mapped",[106]],[[120234,120234],"mapped",[107]],[[120235,120235],"mapped",[108]],[[120236,120236],"mapped",[109]],[[120237,120237],"mapped",[110]],[[120238,120238],"mapped",[111]],[[120239,120239],"mapped",[112]],[[120240,120240],"mapped",[113]],[[120241,120241],"mapped",[114]],[[120242,120242],"mapped",[115]],[[120243,120243],"mapped",[116]],[[120244,120244],"mapped",[117]],[[120245,120245],"mapped",[118]],[[120246,120246],"mapped",[119]],[[120247,120247],"mapped",[120]],[[120248,120248],"mapped",[121]],[[120249,120249],"mapped",[122]],[[120250,120250],"mapped",[97]],[[120251,120251],"mapped",[98]],[[120252,120252],"mapped",[99]],[[120253,120253],"mapped",[100]],[[120254,120254],"mapped",[101]],[[120255,120255],"mapped",[102]],[[120256,120256],"mapped",[103]],[[120257,120257],"mapped",[104]],[[120258,120258],"mapped",[105]],[[120259,120259],"mapped",[106]],[[120260,120260],"mapped",[107]],[[120261,120261],"mapped",[108]],[[120262,120262],"mapped",[109]],[[120263,120263],"mapped",[110]],[[120264,120264],"mapped",[111]],[[120265,120265],"mapped",[112]],[[120266,120266],"mapped",[113]],[[120267,120267],"mapped",[114]],[[120268,120268],"mapped",[115]],[[120269,120269],"mapped",[116]],[[120270,120270],"mapped",[117]],[[120271,120271],"mapped",[118]],[[120272,120272],"mapped",[119]],[[120273,120273],"mapped",[120]],[[120274,120274],"mapped",[121]],[[120275,120275],"mapped",[122]],[[120276,120276],"mapped",[97]],[[120277,120277],"mapped",[98]],[[120278,120278],"mapped",[99]],[[120279,120279],"mapped",[100]],[[120280,120280],"mapped",[101]],[[120281,120281],"mapped",[102]],[[120282,120282],"mapped",[103]],[[120283,120283],"mapped",[104]],[[120284,120284],"mapped",[105]],[[120285,120285],"mapped",[106]],[[120286,120286],"mapped",[107]],[[120287,120287],"mapped",[108]],[[120288,120288],"mapped",[109]],[[120289,120289],"mapped",[110]],[[120290,120290],"mapped",[111]],[[120291,120291],"mapped",[112]],[[120292,120292],"mapped",[113]],[[120293,120293],"mapped",[114]],[[120294,120294],"mapped",[115]],[[120295,120295],"mapped",[116]],[[120296,120296],"mapped",[117]],[[120297,120297],"mapped",[118]],[[120298,120298],"mapped",[119]],[[120299,120299],"mapped",[120]],[[120300,120300],"mapped",[121]],[[120301,120301],"mapped",[122]],[[120302,120302],"mapped",[97]],[[120303,120303],"mapped",[98]],[[120304,120304],"mapped",[99]],[[120305,120305],"mapped",[100]],[[120306,120306],"mapped",[101]],[[120307,120307],"mapped",[102]],[[120308,120308],"mapped",[103]],[[120309,120309],"mapped",[104]],[[120310,120310],"mapped",[105]],[[120311,120311],"mapped",[106]],[[120312,120312],"mapped",[107]],[[120313,120313],"mapped",[108]],[[120314,120314],"mapped",[109]],[[120315,120315],"mapped",[110]],[[120316,120316],"mapped",[111]],[[120317,120317],"mapped",[112]],[[120318,120318],"mapped",[113]],[[120319,120319],"mapped",[114]],[[120320,120320],"mapped",[115]],[[120321,120321],"mapped",[116]],[[120322,120322],"mapped",[117]],[[120323,120323],"mapped",[118]],[[120324,120324],"mapped",[119]],[[120325,120325],"mapped",[120]],[[120326,120326],"mapped",[121]],[[120327,120327],"mapped",[122]],[[120328,120328],"mapped",[97]],[[120329,120329],"mapped",[98]],[[120330,120330],"mapped",[99]],[[120331,120331],"mapped",[100]],[[120332,120332],"mapped",[101]],[[120333,120333],"mapped",[102]],[[120334,120334],"mapped",[103]],[[120335,120335],"mapped",[104]],[[120336,120336],"mapped",[105]],[[120337,120337],"mapped",[106]],[[120338,120338],"mapped",[107]],[[120339,120339],"mapped",[108]],[[120340,120340],"mapped",[109]],[[120341,120341],"mapped",[110]],[[120342,120342],"mapped",[111]],[[120343,120343],"mapped",[112]],[[120344,120344],"mapped",[113]],[[120345,120345],"mapped",[114]],[[120346,120346],"mapped",[115]],[[120347,120347],"mapped",[116]],[[120348,120348],"mapped",[117]],[[120349,120349],"mapped",[118]],[[120350,120350],"mapped",[119]],[[120351,120351],"mapped",[120]],[[120352,120352],"mapped",[121]],[[120353,120353],"mapped",[122]],[[120354,120354],"mapped",[97]],[[120355,120355],"mapped",[98]],[[120356,120356],"mapped",[99]],[[120357,120357],"mapped",[100]],[[120358,120358],"mapped",[101]],[[120359,120359],"mapped",[102]],[[120360,120360],"mapped",[103]],[[120361,120361],"mapped",[104]],[[120362,120362],"mapped",[105]],[[120363,120363],"mapped",[106]],[[120364,120364],"mapped",[107]],[[120365,120365],"mapped",[108]],[[120366,120366],"mapped",[109]],[[120367,120367],"mapped",[110]],[[120368,120368],"mapped",[111]],[[120369,120369],"mapped",[112]],[[120370,120370],"mapped",[113]],[[120371,120371],"mapped",[114]],[[120372,120372],"mapped",[115]],[[120373,120373],"mapped",[116]],[[120374,120374],"mapped",[117]],[[120375,120375],"mapped",[118]],[[120376,120376],"mapped",[119]],[[120377,120377],"mapped",[120]],[[120378,120378],"mapped",[121]],[[120379,120379],"mapped",[122]],[[120380,120380],"mapped",[97]],[[120381,120381],"mapped",[98]],[[120382,120382],"mapped",[99]],[[120383,120383],"mapped",[100]],[[120384,120384],"mapped",[101]],[[120385,120385],"mapped",[102]],[[120386,120386],"mapped",[103]],[[120387,120387],"mapped",[104]],[[120388,120388],"mapped",[105]],[[120389,120389],"mapped",[106]],[[120390,120390],"mapped",[107]],[[120391,120391],"mapped",[108]],[[120392,120392],"mapped",[109]],[[120393,120393],"mapped",[110]],[[120394,120394],"mapped",[111]],[[120395,120395],"mapped",[112]],[[120396,120396],"mapped",[113]],[[120397,120397],"mapped",[114]],[[120398,120398],"mapped",[115]],[[120399,120399],"mapped",[116]],[[120400,120400],"mapped",[117]],[[120401,120401],"mapped",[118]],[[120402,120402],"mapped",[119]],[[120403,120403],"mapped",[120]],[[120404,120404],"mapped",[121]],[[120405,120405],"mapped",[122]],[[120406,120406],"mapped",[97]],[[120407,120407],"mapped",[98]],[[120408,120408],"mapped",[99]],[[120409,120409],"mapped",[100]],[[120410,120410],"mapped",[101]],[[120411,120411],"mapped",[102]],[[120412,120412],"mapped",[103]],[[120413,120413],"mapped",[104]],[[120414,120414],"mapped",[105]],[[120415,120415],"mapped",[106]],[[120416,120416],"mapped",[107]],[[120417,120417],"mapped",[108]],[[120418,120418],"mapped",[109]],[[120419,120419],"mapped",[110]],[[120420,120420],"mapped",[111]],[[120421,120421],"mapped",[112]],[[120422,120422],"mapped",[113]],[[120423,120423],"mapped",[114]],[[120424,120424],"mapped",[115]],[[120425,120425],"mapped",[116]],[[120426,120426],"mapped",[117]],[[120427,120427],"mapped",[118]],[[120428,120428],"mapped",[119]],[[120429,120429],"mapped",[120]],[[120430,120430],"mapped",[121]],[[120431,120431],"mapped",[122]],[[120432,120432],"mapped",[97]],[[120433,120433],"mapped",[98]],[[120434,120434],"mapped",[99]],[[120435,120435],"mapped",[100]],[[120436,120436],"mapped",[101]],[[120437,120437],"mapped",[102]],[[120438,120438],"mapped",[103]],[[120439,120439],"mapped",[104]],[[120440,120440],"mapped",[105]],[[120441,120441],"mapped",[106]],[[120442,120442],"mapped",[107]],[[120443,120443],"mapped",[108]],[[120444,120444],"mapped",[109]],[[120445,120445],"mapped",[110]],[[120446,120446],"mapped",[111]],[[120447,120447],"mapped",[112]],[[120448,120448],"mapped",[113]],[[120449,120449],"mapped",[114]],[[120450,120450],"mapped",[115]],[[120451,120451],"mapped",[116]],[[120452,120452],"mapped",[117]],[[120453,120453],"mapped",[118]],[[120454,120454],"mapped",[119]],[[120455,120455],"mapped",[120]],[[120456,120456],"mapped",[121]],[[120457,120457],"mapped",[122]],[[120458,120458],"mapped",[97]],[[120459,120459],"mapped",[98]],[[120460,120460],"mapped",[99]],[[120461,120461],"mapped",[100]],[[120462,120462],"mapped",[101]],[[120463,120463],"mapped",[102]],[[120464,120464],"mapped",[103]],[[120465,120465],"mapped",[104]],[[120466,120466],"mapped",[105]],[[120467,120467],"mapped",[106]],[[120468,120468],"mapped",[107]],[[120469,120469],"mapped",[108]],[[120470,120470],"mapped",[109]],[[120471,120471],"mapped",[110]],[[120472,120472],"mapped",[111]],[[120473,120473],"mapped",[112]],[[120474,120474],"mapped",[113]],[[120475,120475],"mapped",[114]],[[120476,120476],"mapped",[115]],[[120477,120477],"mapped",[116]],[[120478,120478],"mapped",[117]],[[120479,120479],"mapped",[118]],[[120480,120480],"mapped",[119]],[[120481,120481],"mapped",[120]],[[120482,120482],"mapped",[121]],[[120483,120483],"mapped",[122]],[[120484,120484],"mapped",[305]],[[120485,120485],"mapped",[567]],[[120486,120487],"disallowed"],[[120488,120488],"mapped",[945]],[[120489,120489],"mapped",[946]],[[120490,120490],"mapped",[947]],[[120491,120491],"mapped",[948]],[[120492,120492],"mapped",[949]],[[120493,120493],"mapped",[950]],[[120494,120494],"mapped",[951]],[[120495,120495],"mapped",[952]],[[120496,120496],"mapped",[953]],[[120497,120497],"mapped",[954]],[[120498,120498],"mapped",[955]],[[120499,120499],"mapped",[956]],[[120500,120500],"mapped",[957]],[[120501,120501],"mapped",[958]],[[120502,120502],"mapped",[959]],[[120503,120503],"mapped",[960]],[[120504,120504],"mapped",[961]],[[120505,120505],"mapped",[952]],[[120506,120506],"mapped",[963]],[[120507,120507],"mapped",[964]],[[120508,120508],"mapped",[965]],[[120509,120509],"mapped",[966]],[[120510,120510],"mapped",[967]],[[120511,120511],"mapped",[968]],[[120512,120512],"mapped",[969]],[[120513,120513],"mapped",[8711]],[[120514,120514],"mapped",[945]],[[120515,120515],"mapped",[946]],[[120516,120516],"mapped",[947]],[[120517,120517],"mapped",[948]],[[120518,120518],"mapped",[949]],[[120519,120519],"mapped",[950]],[[120520,120520],"mapped",[951]],[[120521,120521],"mapped",[952]],[[120522,120522],"mapped",[953]],[[120523,120523],"mapped",[954]],[[120524,120524],"mapped",[955]],[[120525,120525],"mapped",[956]],[[120526,120526],"mapped",[957]],[[120527,120527],"mapped",[958]],[[120528,120528],"mapped",[959]],[[120529,120529],"mapped",[960]],[[120530,120530],"mapped",[961]],[[120531,120532],"mapped",[963]],[[120533,120533],"mapped",[964]],[[120534,120534],"mapped",[965]],[[120535,120535],"mapped",[966]],[[120536,120536],"mapped",[967]],[[120537,120537],"mapped",[968]],[[120538,120538],"mapped",[969]],[[120539,120539],"mapped",[8706]],[[120540,120540],"mapped",[949]],[[120541,120541],"mapped",[952]],[[120542,120542],"mapped",[954]],[[120543,120543],"mapped",[966]],[[120544,120544],"mapped",[961]],[[120545,120545],"mapped",[960]],[[120546,120546],"mapped",[945]],[[120547,120547],"mapped",[946]],[[120548,120548],"mapped",[947]],[[120549,120549],"mapped",[948]],[[120550,120550],"mapped",[949]],[[120551,120551],"mapped",[950]],[[120552,120552],"mapped",[951]],[[120553,120553],"mapped",[952]],[[120554,120554],"mapped",[953]],[[120555,120555],"mapped",[954]],[[120556,120556],"mapped",[955]],[[120557,120557],"mapped",[956]],[[120558,120558],"mapped",[957]],[[120559,120559],"mapped",[958]],[[120560,120560],"mapped",[959]],[[120561,120561],"mapped",[960]],[[120562,120562],"mapped",[961]],[[120563,120563],"mapped",[952]],[[120564,120564],"mapped",[963]],[[120565,120565],"mapped",[964]],[[120566,120566],"mapped",[965]],[[120567,120567],"mapped",[966]],[[120568,120568],"mapped",[967]],[[120569,120569],"mapped",[968]],[[120570,120570],"mapped",[969]],[[120571,120571],"mapped",[8711]],[[120572,120572],"mapped",[945]],[[120573,120573],"mapped",[946]],[[120574,120574],"mapped",[947]],[[120575,120575],"mapped",[948]],[[120576,120576],"mapped",[949]],[[120577,120577],"mapped",[950]],[[120578,120578],"mapped",[951]],[[120579,120579],"mapped",[952]],[[120580,120580],"mapped",[953]],[[120581,120581],"mapped",[954]],[[120582,120582],"mapped",[955]],[[120583,120583],"mapped",[956]],[[120584,120584],"mapped",[957]],[[120585,120585],"mapped",[958]],[[120586,120586],"mapped",[959]],[[120587,120587],"mapped",[960]],[[120588,120588],"mapped",[961]],[[120589,120590],"mapped",[963]],[[120591,120591],"mapped",[964]],[[120592,120592],"mapped",[965]],[[120593,120593],"mapped",[966]],[[120594,120594],"mapped",[967]],[[120595,120595],"mapped",[968]],[[120596,120596],"mapped",[969]],[[120597,120597],"mapped",[8706]],[[120598,120598],"mapped",[949]],[[120599,120599],"mapped",[952]],[[120600,120600],"mapped",[954]],[[120601,120601],"mapped",[966]],[[120602,120602],"mapped",[961]],[[120603,120603],"mapped",[960]],[[120604,120604],"mapped",[945]],[[120605,120605],"mapped",[946]],[[120606,120606],"mapped",[947]],[[120607,120607],"mapped",[948]],[[120608,120608],"mapped",[949]],[[120609,120609],"mapped",[950]],[[120610,120610],"mapped",[951]],[[120611,120611],"mapped",[952]],[[120612,120612],"mapped",[953]],[[120613,120613],"mapped",[954]],[[120614,120614],"mapped",[955]],[[120615,120615],"mapped",[956]],[[120616,120616],"mapped",[957]],[[120617,120617],"mapped",[958]],[[120618,120618],"mapped",[959]],[[120619,120619],"mapped",[960]],[[120620,120620],"mapped",[961]],[[120621,120621],"mapped",[952]],[[120622,120622],"mapped",[963]],[[120623,120623],"mapped",[964]],[[120624,120624],"mapped",[965]],[[120625,120625],"mapped",[966]],[[120626,120626],"mapped",[967]],[[120627,120627],"mapped",[968]],[[120628,120628],"mapped",[969]],[[120629,120629],"mapped",[8711]],[[120630,120630],"mapped",[945]],[[120631,120631],"mapped",[946]],[[120632,120632],"mapped",[947]],[[120633,120633],"mapped",[948]],[[120634,120634],"mapped",[949]],[[120635,120635],"mapped",[950]],[[120636,120636],"mapped",[951]],[[120637,120637],"mapped",[952]],[[120638,120638],"mapped",[953]],[[120639,120639],"mapped",[954]],[[120640,120640],"mapped",[955]],[[120641,120641],"mapped",[956]],[[120642,120642],"mapped",[957]],[[120643,120643],"mapped",[958]],[[120644,120644],"mapped",[959]],[[120645,120645],"mapped",[960]],[[120646,120646],"mapped",[961]],[[120647,120648],"mapped",[963]],[[120649,120649],"mapped",[964]],[[120650,120650],"mapped",[965]],[[120651,120651],"mapped",[966]],[[120652,120652],"mapped",[967]],[[120653,120653],"mapped",[968]],[[120654,120654],"mapped",[969]],[[120655,120655],"mapped",[8706]],[[120656,120656],"mapped",[949]],[[120657,120657],"mapped",[952]],[[120658,120658],"mapped",[954]],[[120659,120659],"mapped",[966]],[[120660,120660],"mapped",[961]],[[120661,120661],"mapped",[960]],[[120662,120662],"mapped",[945]],[[120663,120663],"mapped",[946]],[[120664,120664],"mapped",[947]],[[120665,120665],"mapped",[948]],[[120666,120666],"mapped",[949]],[[120667,120667],"mapped",[950]],[[120668,120668],"mapped",[951]],[[120669,120669],"mapped",[952]],[[120670,120670],"mapped",[953]],[[120671,120671],"mapped",[954]],[[120672,120672],"mapped",[955]],[[120673,120673],"mapped",[956]],[[120674,120674],"mapped",[957]],[[120675,120675],"mapped",[958]],[[120676,120676],"mapped",[959]],[[120677,120677],"mapped",[960]],[[120678,120678],"mapped",[961]],[[120679,120679],"mapped",[952]],[[120680,120680],"mapped",[963]],[[120681,120681],"mapped",[964]],[[120682,120682],"mapped",[965]],[[120683,120683],"mapped",[966]],[[120684,120684],"mapped",[967]],[[120685,120685],"mapped",[968]],[[120686,120686],"mapped",[969]],[[120687,120687],"mapped",[8711]],[[120688,120688],"mapped",[945]],[[120689,120689],"mapped",[946]],[[120690,120690],"mapped",[947]],[[120691,120691],"mapped",[948]],[[120692,120692],"mapped",[949]],[[120693,120693],"mapped",[950]],[[120694,120694],"mapped",[951]],[[120695,120695],"mapped",[952]],[[120696,120696],"mapped",[953]],[[120697,120697],"mapped",[954]],[[120698,120698],"mapped",[955]],[[120699,120699],"mapped",[956]],[[120700,120700],"mapped",[957]],[[120701,120701],"mapped",[958]],[[120702,120702],"mapped",[959]],[[120703,120703],"mapped",[960]],[[120704,120704],"mapped",[961]],[[120705,120706],"mapped",[963]],[[120707,120707],"mapped",[964]],[[120708,120708],"mapped",[965]],[[120709,120709],"mapped",[966]],[[120710,120710],"mapped",[967]],[[120711,120711],"mapped",[968]],[[120712,120712],"mapped",[969]],[[120713,120713],"mapped",[8706]],[[120714,120714],"mapped",[949]],[[120715,120715],"mapped",[952]],[[120716,120716],"mapped",[954]],[[120717,120717],"mapped",[966]],[[120718,120718],"mapped",[961]],[[120719,120719],"mapped",[960]],[[120720,120720],"mapped",[945]],[[120721,120721],"mapped",[946]],[[120722,120722],"mapped",[947]],[[120723,120723],"mapped",[948]],[[120724,120724],"mapped",[949]],[[120725,120725],"mapped",[950]],[[120726,120726],"mapped",[951]],[[120727,120727],"mapped",[952]],[[120728,120728],"mapped",[953]],[[120729,120729],"mapped",[954]],[[120730,120730],"mapped",[955]],[[120731,120731],"mapped",[956]],[[120732,120732],"mapped",[957]],[[120733,120733],"mapped",[958]],[[120734,120734],"mapped",[959]],[[120735,120735],"mapped",[960]],[[120736,120736],"mapped",[961]],[[120737,120737],"mapped",[952]],[[120738,120738],"mapped",[963]],[[120739,120739],"mapped",[964]],[[120740,120740],"mapped",[965]],[[120741,120741],"mapped",[966]],[[120742,120742],"mapped",[967]],[[120743,120743],"mapped",[968]],[[120744,120744],"mapped",[969]],[[120745,120745],"mapped",[8711]],[[120746,120746],"mapped",[945]],[[120747,120747],"mapped",[946]],[[120748,120748],"mapped",[947]],[[120749,120749],"mapped",[948]],[[120750,120750],"mapped",[949]],[[120751,120751],"mapped",[950]],[[120752,120752],"mapped",[951]],[[120753,120753],"mapped",[952]],[[120754,120754],"mapped",[953]],[[120755,120755],"mapped",[954]],[[120756,120756],"mapped",[955]],[[120757,120757],"mapped",[956]],[[120758,120758],"mapped",[957]],[[120759,120759],"mapped",[958]],[[120760,120760],"mapped",[959]],[[120761,120761],"mapped",[960]],[[120762,120762],"mapped",[961]],[[120763,120764],"mapped",[963]],[[120765,120765],"mapped",[964]],[[120766,120766],"mapped",[965]],[[120767,120767],"mapped",[966]],[[120768,120768],"mapped",[967]],[[120769,120769],"mapped",[968]],[[120770,120770],"mapped",[969]],[[120771,120771],"mapped",[8706]],[[120772,120772],"mapped",[949]],[[120773,120773],"mapped",[952]],[[120774,120774],"mapped",[954]],[[120775,120775],"mapped",[966]],[[120776,120776],"mapped",[961]],[[120777,120777],"mapped",[960]],[[120778,120779],"mapped",[989]],[[120780,120781],"disallowed"],[[120782,120782],"mapped",[48]],[[120783,120783],"mapped",[49]],[[120784,120784],"mapped",[50]],[[120785,120785],"mapped",[51]],[[120786,120786],"mapped",[52]],[[120787,120787],"mapped",[53]],[[120788,120788],"mapped",[54]],[[120789,120789],"mapped",[55]],[[120790,120790],"mapped",[56]],[[120791,120791],"mapped",[57]],[[120792,120792],"mapped",[48]],[[120793,120793],"mapped",[49]],[[120794,120794],"mapped",[50]],[[120795,120795],"mapped",[51]],[[120796,120796],"mapped",[52]],[[120797,120797],"mapped",[53]],[[120798,120798],"mapped",[54]],[[120799,120799],"mapped",[55]],[[120800,120800],"mapped",[56]],[[120801,120801],"mapped",[57]],[[120802,120802],"mapped",[48]],[[120803,120803],"mapped",[49]],[[120804,120804],"mapped",[50]],[[120805,120805],"mapped",[51]],[[120806,120806],"mapped",[52]],[[120807,120807],"mapped",[53]],[[120808,120808],"mapped",[54]],[[120809,120809],"mapped",[55]],[[120810,120810],"mapped",[56]],[[120811,120811],"mapped",[57]],[[120812,120812],"mapped",[48]],[[120813,120813],"mapped",[49]],[[120814,120814],"mapped",[50]],[[120815,120815],"mapped",[51]],[[120816,120816],"mapped",[52]],[[120817,120817],"mapped",[53]],[[120818,120818],"mapped",[54]],[[120819,120819],"mapped",[55]],[[120820,120820],"mapped",[56]],[[120821,120821],"mapped",[57]],[[120822,120822],"mapped",[48]],[[120823,120823],"mapped",[49]],[[120824,120824],"mapped",[50]],[[120825,120825],"mapped",[51]],[[120826,120826],"mapped",[52]],[[120827,120827],"mapped",[53]],[[120828,120828],"mapped",[54]],[[120829,120829],"mapped",[55]],[[120830,120830],"mapped",[56]],[[120831,120831],"mapped",[57]],[[120832,121343],"valid",[],"NV8"],[[121344,121398],"valid"],[[121399,121402],"valid",[],"NV8"],[[121403,121452],"valid"],[[121453,121460],"valid",[],"NV8"],[[121461,121461],"valid"],[[121462,121475],"valid",[],"NV8"],[[121476,121476],"valid"],[[121477,121483],"valid",[],"NV8"],[[121484,121498],"disallowed"],[[121499,121503],"valid"],[[121504,121504],"disallowed"],[[121505,121519],"valid"],[[121520,124927],"disallowed"],[[124928,125124],"valid"],[[125125,125126],"disallowed"],[[125127,125135],"valid",[],"NV8"],[[125136,125142],"valid"],[[125143,126463],"disallowed"],[[126464,126464],"mapped",[1575]],[[126465,126465],"mapped",[1576]],[[126466,126466],"mapped",[1580]],[[126467,126467],"mapped",[1583]],[[126468,126468],"disallowed"],[[126469,126469],"mapped",[1608]],[[126470,126470],"mapped",[1586]],[[126471,126471],"mapped",[1581]],[[126472,126472],"mapped",[1591]],[[126473,126473],"mapped",[1610]],[[126474,126474],"mapped",[1603]],[[126475,126475],"mapped",[1604]],[[126476,126476],"mapped",[1605]],[[126477,126477],"mapped",[1606]],[[126478,126478],"mapped",[1587]],[[126479,126479],"mapped",[1593]],[[126480,126480],"mapped",[1601]],[[126481,126481],"mapped",[1589]],[[126482,126482],"mapped",[1602]],[[126483,126483],"mapped",[1585]],[[126484,126484],"mapped",[1588]],[[126485,126485],"mapped",[1578]],[[126486,126486],"mapped",[1579]],[[126487,126487],"mapped",[1582]],[[126488,126488],"mapped",[1584]],[[126489,126489],"mapped",[1590]],[[126490,126490],"mapped",[1592]],[[126491,126491],"mapped",[1594]],[[126492,126492],"mapped",[1646]],[[126493,126493],"mapped",[1722]],[[126494,126494],"mapped",[1697]],[[126495,126495],"mapped",[1647]],[[126496,126496],"disallowed"],[[126497,126497],"mapped",[1576]],[[126498,126498],"mapped",[1580]],[[126499,126499],"disallowed"],[[126500,126500],"mapped",[1607]],[[126501,126502],"disallowed"],[[126503,126503],"mapped",[1581]],[[126504,126504],"disallowed"],[[126505,126505],"mapped",[1610]],[[126506,126506],"mapped",[1603]],[[126507,126507],"mapped",[1604]],[[126508,126508],"mapped",[1605]],[[126509,126509],"mapped",[1606]],[[126510,126510],"mapped",[1587]],[[126511,126511],"mapped",[1593]],[[126512,126512],"mapped",[1601]],[[126513,126513],"mapped",[1589]],[[126514,126514],"mapped",[1602]],[[126515,126515],"disallowed"],[[126516,126516],"mapped",[1588]],[[126517,126517],"mapped",[1578]],[[126518,126518],"mapped",[1579]],[[126519,126519],"mapped",[1582]],[[126520,126520],"disallowed"],[[126521,126521],"mapped",[1590]],[[126522,126522],"disallowed"],[[126523,126523],"mapped",[1594]],[[126524,126529],"disallowed"],[[126530,126530],"mapped",[1580]],[[126531,126534],"disallowed"],[[126535,126535],"mapped",[1581]],[[126536,126536],"disallowed"],[[126537,126537],"mapped",[1610]],[[126538,126538],"disallowed"],[[126539,126539],"mapped",[1604]],[[126540,126540],"disallowed"],[[126541,126541],"mapped",[1606]],[[126542,126542],"mapped",[1587]],[[126543,126543],"mapped",[1593]],[[126544,126544],"disallowed"],[[126545,126545],"mapped",[1589]],[[126546,126546],"mapped",[1602]],[[126547,126547],"disallowed"],[[126548,126548],"mapped",[1588]],[[126549,126550],"disallowed"],[[126551,126551],"mapped",[1582]],[[126552,126552],"disallowed"],[[126553,126553],"mapped",[1590]],[[126554,126554],"disallowed"],[[126555,126555],"mapped",[1594]],[[126556,126556],"disallowed"],[[126557,126557],"mapped",[1722]],[[126558,126558],"disallowed"],[[126559,126559],"mapped",[1647]],[[126560,126560],"disallowed"],[[126561,126561],"mapped",[1576]],[[126562,126562],"mapped",[1580]],[[126563,126563],"disallowed"],[[126564,126564],"mapped",[1607]],[[126565,126566],"disallowed"],[[126567,126567],"mapped",[1581]],[[126568,126568],"mapped",[1591]],[[126569,126569],"mapped",[1610]],[[126570,126570],"mapped",[1603]],[[126571,126571],"disallowed"],[[126572,126572],"mapped",[1605]],[[126573,126573],"mapped",[1606]],[[126574,126574],"mapped",[1587]],[[126575,126575],"mapped",[1593]],[[126576,126576],"mapped",[1601]],[[126577,126577],"mapped",[1589]],[[126578,126578],"mapped",[1602]],[[126579,126579],"disallowed"],[[126580,126580],"mapped",[1588]],[[126581,126581],"mapped",[1578]],[[126582,126582],"mapped",[1579]],[[126583,126583],"mapped",[1582]],[[126584,126584],"disallowed"],[[126585,126585],"mapped",[1590]],[[126586,126586],"mapped",[1592]],[[126587,126587],"mapped",[1594]],[[126588,126588],"mapped",[1646]],[[126589,126589],"disallowed"],[[126590,126590],"mapped",[1697]],[[126591,126591],"disallowed"],[[126592,126592],"mapped",[1575]],[[126593,126593],"mapped",[1576]],[[126594,126594],"mapped",[1580]],[[126595,126595],"mapped",[1583]],[[126596,126596],"mapped",[1607]],[[126597,126597],"mapped",[1608]],[[126598,126598],"mapped",[1586]],[[126599,126599],"mapped",[1581]],[[126600,126600],"mapped",[1591]],[[126601,126601],"mapped",[1610]],[[126602,126602],"disallowed"],[[126603,126603],"mapped",[1604]],[[126604,126604],"mapped",[1605]],[[126605,126605],"mapped",[1606]],[[126606,126606],"mapped",[1587]],[[126607,126607],"mapped",[1593]],[[126608,126608],"mapped",[1601]],[[126609,126609],"mapped",[1589]],[[126610,126610],"mapped",[1602]],[[126611,126611],"mapped",[1585]],[[126612,126612],"mapped",[1588]],[[126613,126613],"mapped",[1578]],[[126614,126614],"mapped",[1579]],[[126615,126615],"mapped",[1582]],[[126616,126616],"mapped",[1584]],[[126617,126617],"mapped",[1590]],[[126618,126618],"mapped",[1592]],[[126619,126619],"mapped",[1594]],[[126620,126624],"disallowed"],[[126625,126625],"mapped",[1576]],[[126626,126626],"mapped",[1580]],[[126627,126627],"mapped",[1583]],[[126628,126628],"disallowed"],[[126629,126629],"mapped",[1608]],[[126630,126630],"mapped",[1586]],[[126631,126631],"mapped",[1581]],[[126632,126632],"mapped",[1591]],[[126633,126633],"mapped",[1610]],[[126634,126634],"disallowed"],[[126635,126635],"mapped",[1604]],[[126636,126636],"mapped",[1605]],[[126637,126637],"mapped",[1606]],[[126638,126638],"mapped",[1587]],[[126639,126639],"mapped",[1593]],[[126640,126640],"mapped",[1601]],[[126641,126641],"mapped",[1589]],[[126642,126642],"mapped",[1602]],[[126643,126643],"mapped",[1585]],[[126644,126644],"mapped",[1588]],[[126645,126645],"mapped",[1578]],[[126646,126646],"mapped",[1579]],[[126647,126647],"mapped",[1582]],[[126648,126648],"mapped",[1584]],[[126649,126649],"mapped",[1590]],[[126650,126650],"mapped",[1592]],[[126651,126651],"mapped",[1594]],[[126652,126703],"disallowed"],[[126704,126705],"valid",[],"NV8"],[[126706,126975],"disallowed"],[[126976,127019],"valid",[],"NV8"],[[127020,127023],"disallowed"],[[127024,127123],"valid",[],"NV8"],[[127124,127135],"disallowed"],[[127136,127150],"valid",[],"NV8"],[[127151,127152],"disallowed"],[[127153,127166],"valid",[],"NV8"],[[127167,127167],"valid",[],"NV8"],[[127168,127168],"disallowed"],[[127169,127183],"valid",[],"NV8"],[[127184,127184],"disallowed"],[[127185,127199],"valid",[],"NV8"],[[127200,127221],"valid",[],"NV8"],[[127222,127231],"disallowed"],[[127232,127232],"disallowed"],[[127233,127233],"disallowed_STD3_mapped",[48,44]],[[127234,127234],"disallowed_STD3_mapped",[49,44]],[[127235,127235],"disallowed_STD3_mapped",[50,44]],[[127236,127236],"disallowed_STD3_mapped",[51,44]],[[127237,127237],"disallowed_STD3_mapped",[52,44]],[[127238,127238],"disallowed_STD3_mapped",[53,44]],[[127239,127239],"disallowed_STD3_mapped",[54,44]],[[127240,127240],"disallowed_STD3_mapped",[55,44]],[[127241,127241],"disallowed_STD3_mapped",[56,44]],[[127242,127242],"disallowed_STD3_mapped",[57,44]],[[127243,127244],"valid",[],"NV8"],[[127245,127247],"disallowed"],[[127248,127248],"disallowed_STD3_mapped",[40,97,41]],[[127249,127249],"disallowed_STD3_mapped",[40,98,41]],[[127250,127250],"disallowed_STD3_mapped",[40,99,41]],[[127251,127251],"disallowed_STD3_mapped",[40,100,41]],[[127252,127252],"disallowed_STD3_mapped",[40,101,41]],[[127253,127253],"disallowed_STD3_mapped",[40,102,41]],[[127254,127254],"disallowed_STD3_mapped",[40,103,41]],[[127255,127255],"disallowed_STD3_mapped",[40,104,41]],[[127256,127256],"disallowed_STD3_mapped",[40,105,41]],[[127257,127257],"disallowed_STD3_mapped",[40,106,41]],[[127258,127258],"disallowed_STD3_mapped",[40,107,41]],[[127259,127259],"disallowed_STD3_mapped",[40,108,41]],[[127260,127260],"disallowed_STD3_mapped",[40,109,41]],[[127261,127261],"disallowed_STD3_mapped",[40,110,41]],[[127262,127262],"disallowed_STD3_mapped",[40,111,41]],[[127263,127263],"disallowed_STD3_mapped",[40,112,41]],[[127264,127264],"disallowed_STD3_mapped",[40,113,41]],[[127265,127265],"disallowed_STD3_mapped",[40,114,41]],[[127266,127266],"disallowed_STD3_mapped",[40,115,41]],[[127267,127267],"disallowed_STD3_mapped",[40,116,41]],[[127268,127268],"disallowed_STD3_mapped",[40,117,41]],[[127269,127269],"disallowed_STD3_mapped",[40,118,41]],[[127270,127270],"disallowed_STD3_mapped",[40,119,41]],[[127271,127271],"disallowed_STD3_mapped",[40,120,41]],[[127272,127272],"disallowed_STD3_mapped",[40,121,41]],[[127273,127273],"disallowed_STD3_mapped",[40,122,41]],[[127274,127274],"mapped",[12308,115,12309]],[[127275,127275],"mapped",[99]],[[127276,127276],"mapped",[114]],[[127277,127277],"mapped",[99,100]],[[127278,127278],"mapped",[119,122]],[[127279,127279],"disallowed"],[[127280,127280],"mapped",[97]],[[127281,127281],"mapped",[98]],[[127282,127282],"mapped",[99]],[[127283,127283],"mapped",[100]],[[127284,127284],"mapped",[101]],[[127285,127285],"mapped",[102]],[[127286,127286],"mapped",[103]],[[127287,127287],"mapped",[104]],[[127288,127288],"mapped",[105]],[[127289,127289],"mapped",[106]],[[127290,127290],"mapped",[107]],[[127291,127291],"mapped",[108]],[[127292,127292],"mapped",[109]],[[127293,127293],"mapped",[110]],[[127294,127294],"mapped",[111]],[[127295,127295],"mapped",[112]],[[127296,127296],"mapped",[113]],[[127297,127297],"mapped",[114]],[[127298,127298],"mapped",[115]],[[127299,127299],"mapped",[116]],[[127300,127300],"mapped",[117]],[[127301,127301],"mapped",[118]],[[127302,127302],"mapped",[119]],[[127303,127303],"mapped",[120]],[[127304,127304],"mapped",[121]],[[127305,127305],"mapped",[122]],[[127306,127306],"mapped",[104,118]],[[127307,127307],"mapped",[109,118]],[[127308,127308],"mapped",[115,100]],[[127309,127309],"mapped",[115,115]],[[127310,127310],"mapped",[112,112,118]],[[127311,127311],"mapped",[119,99]],[[127312,127318],"valid",[],"NV8"],[[127319,127319],"valid",[],"NV8"],[[127320,127326],"valid",[],"NV8"],[[127327,127327],"valid",[],"NV8"],[[127328,127337],"valid",[],"NV8"],[[127338,127338],"mapped",[109,99]],[[127339,127339],"mapped",[109,100]],[[127340,127343],"disallowed"],[[127344,127352],"valid",[],"NV8"],[[127353,127353],"valid",[],"NV8"],[[127354,127354],"valid",[],"NV8"],[[127355,127356],"valid",[],"NV8"],[[127357,127358],"valid",[],"NV8"],[[127359,127359],"valid",[],"NV8"],[[127360,127369],"valid",[],"NV8"],[[127370,127373],"valid",[],"NV8"],[[127374,127375],"valid",[],"NV8"],[[127376,127376],"mapped",[100,106]],[[127377,127386],"valid",[],"NV8"],[[127387,127461],"disallowed"],[[127462,127487],"valid",[],"NV8"],[[127488,127488],"mapped",[12411,12363]],[[127489,127489],"mapped",[12467,12467]],[[127490,127490],"mapped",[12469]],[[127491,127503],"disallowed"],[[127504,127504],"mapped",[25163]],[[127505,127505],"mapped",[23383]],[[127506,127506],"mapped",[21452]],[[127507,127507],"mapped",[12487]],[[127508,127508],"mapped",[20108]],[[127509,127509],"mapped",[22810]],[[127510,127510],"mapped",[35299]],[[127511,127511],"mapped",[22825]],[[127512,127512],"mapped",[20132]],[[127513,127513],"mapped",[26144]],[[127514,127514],"mapped",[28961]],[[127515,127515],"mapped",[26009]],[[127516,127516],"mapped",[21069]],[[127517,127517],"mapped",[24460]],[[127518,127518],"mapped",[20877]],[[127519,127519],"mapped",[26032]],[[127520,127520],"mapped",[21021]],[[127521,127521],"mapped",[32066]],[[127522,127522],"mapped",[29983]],[[127523,127523],"mapped",[36009]],[[127524,127524],"mapped",[22768]],[[127525,127525],"mapped",[21561]],[[127526,127526],"mapped",[28436]],[[127527,127527],"mapped",[25237]],[[127528,127528],"mapped",[25429]],[[127529,127529],"mapped",[19968]],[[127530,127530],"mapped",[19977]],[[127531,127531],"mapped",[36938]],[[127532,127532],"mapped",[24038]],[[127533,127533],"mapped",[20013]],[[127534,127534],"mapped",[21491]],[[127535,127535],"mapped",[25351]],[[127536,127536],"mapped",[36208]],[[127537,127537],"mapped",[25171]],[[127538,127538],"mapped",[31105]],[[127539,127539],"mapped",[31354]],[[127540,127540],"mapped",[21512]],[[127541,127541],"mapped",[28288]],[[127542,127542],"mapped",[26377]],[[127543,127543],"mapped",[26376]],[[127544,127544],"mapped",[30003]],[[127545,127545],"mapped",[21106]],[[127546,127546],"mapped",[21942]],[[127547,127551],"disallowed"],[[127552,127552],"mapped",[12308,26412,12309]],[[127553,127553],"mapped",[12308,19977,12309]],[[127554,127554],"mapped",[12308,20108,12309]],[[127555,127555],"mapped",[12308,23433,12309]],[[127556,127556],"mapped",[12308,28857,12309]],[[127557,127557],"mapped",[12308,25171,12309]],[[127558,127558],"mapped",[12308,30423,12309]],[[127559,127559],"mapped",[12308,21213,12309]],[[127560,127560],"mapped",[12308,25943,12309]],[[127561,127567],"disallowed"],[[127568,127568],"mapped",[24471]],[[127569,127569],"mapped",[21487]],[[127570,127743],"disallowed"],[[127744,127776],"valid",[],"NV8"],[[127777,127788],"valid",[],"NV8"],[[127789,127791],"valid",[],"NV8"],[[127792,127797],"valid",[],"NV8"],[[127798,127798],"valid",[],"NV8"],[[127799,127868],"valid",[],"NV8"],[[127869,127869],"valid",[],"NV8"],[[127870,127871],"valid",[],"NV8"],[[127872,127891],"valid",[],"NV8"],[[127892,127903],"valid",[],"NV8"],[[127904,127940],"valid",[],"NV8"],[[127941,127941],"valid",[],"NV8"],[[127942,127946],"valid",[],"NV8"],[[127947,127950],"valid",[],"NV8"],[[127951,127955],"valid",[],"NV8"],[[127956,127967],"valid",[],"NV8"],[[127968,127984],"valid",[],"NV8"],[[127985,127991],"valid",[],"NV8"],[[127992,127999],"valid",[],"NV8"],[[128e3,128062],"valid",[],"NV8"],[[128063,128063],"valid",[],"NV8"],[[128064,128064],"valid",[],"NV8"],[[128065,128065],"valid",[],"NV8"],[[128066,128247],"valid",[],"NV8"],[[128248,128248],"valid",[],"NV8"],[[128249,128252],"valid",[],"NV8"],[[128253,128254],"valid",[],"NV8"],[[128255,128255],"valid",[],"NV8"],[[128256,128317],"valid",[],"NV8"],[[128318,128319],"valid",[],"NV8"],[[128320,128323],"valid",[],"NV8"],[[128324,128330],"valid",[],"NV8"],[[128331,128335],"valid",[],"NV8"],[[128336,128359],"valid",[],"NV8"],[[128360,128377],"valid",[],"NV8"],[[128378,128378],"disallowed"],[[128379,128419],"valid",[],"NV8"],[[128420,128420],"disallowed"],[[128421,128506],"valid",[],"NV8"],[[128507,128511],"valid",[],"NV8"],[[128512,128512],"valid",[],"NV8"],[[128513,128528],"valid",[],"NV8"],[[128529,128529],"valid",[],"NV8"],[[128530,128532],"valid",[],"NV8"],[[128533,128533],"valid",[],"NV8"],[[128534,128534],"valid",[],"NV8"],[[128535,128535],"valid",[],"NV8"],[[128536,128536],"valid",[],"NV8"],[[128537,128537],"valid",[],"NV8"],[[128538,128538],"valid",[],"NV8"],[[128539,128539],"valid",[],"NV8"],[[128540,128542],"valid",[],"NV8"],[[128543,128543],"valid",[],"NV8"],[[128544,128549],"valid",[],"NV8"],[[128550,128551],"valid",[],"NV8"],[[128552,128555],"valid",[],"NV8"],[[128556,128556],"valid",[],"NV8"],[[128557,128557],"valid",[],"NV8"],[[128558,128559],"valid",[],"NV8"],[[128560,128563],"valid",[],"NV8"],[[128564,128564],"valid",[],"NV8"],[[128565,128576],"valid",[],"NV8"],[[128577,128578],"valid",[],"NV8"],[[128579,128580],"valid",[],"NV8"],[[128581,128591],"valid",[],"NV8"],[[128592,128639],"valid",[],"NV8"],[[128640,128709],"valid",[],"NV8"],[[128710,128719],"valid",[],"NV8"],[[128720,128720],"valid",[],"NV8"],[[128721,128735],"disallowed"],[[128736,128748],"valid",[],"NV8"],[[128749,128751],"disallowed"],[[128752,128755],"valid",[],"NV8"],[[128756,128767],"disallowed"],[[128768,128883],"valid",[],"NV8"],[[128884,128895],"disallowed"],[[128896,128980],"valid",[],"NV8"],[[128981,129023],"disallowed"],[[129024,129035],"valid",[],"NV8"],[[129036,129039],"disallowed"],[[129040,129095],"valid",[],"NV8"],[[129096,129103],"disallowed"],[[129104,129113],"valid",[],"NV8"],[[129114,129119],"disallowed"],[[129120,129159],"valid",[],"NV8"],[[129160,129167],"disallowed"],[[129168,129197],"valid",[],"NV8"],[[129198,129295],"disallowed"],[[129296,129304],"valid",[],"NV8"],[[129305,129407],"disallowed"],[[129408,129412],"valid",[],"NV8"],[[129413,129471],"disallowed"],[[129472,129472],"valid",[],"NV8"],[[129473,131069],"disallowed"],[[131070,131071],"disallowed"],[[131072,173782],"valid"],[[173783,173823],"disallowed"],[[173824,177972],"valid"],[[177973,177983],"disallowed"],[[177984,178205],"valid"],[[178206,178207],"disallowed"],[[178208,183969],"valid"],[[183970,194559],"disallowed"],[[194560,194560],"mapped",[20029]],[[194561,194561],"mapped",[20024]],[[194562,194562],"mapped",[20033]],[[194563,194563],"mapped",[131362]],[[194564,194564],"mapped",[20320]],[[194565,194565],"mapped",[20398]],[[194566,194566],"mapped",[20411]],[[194567,194567],"mapped",[20482]],[[194568,194568],"mapped",[20602]],[[194569,194569],"mapped",[20633]],[[194570,194570],"mapped",[20711]],[[194571,194571],"mapped",[20687]],[[194572,194572],"mapped",[13470]],[[194573,194573],"mapped",[132666]],[[194574,194574],"mapped",[20813]],[[194575,194575],"mapped",[20820]],[[194576,194576],"mapped",[20836]],[[194577,194577],"mapped",[20855]],[[194578,194578],"mapped",[132380]],[[194579,194579],"mapped",[13497]],[[194580,194580],"mapped",[20839]],[[194581,194581],"mapped",[20877]],[[194582,194582],"mapped",[132427]],[[194583,194583],"mapped",[20887]],[[194584,194584],"mapped",[20900]],[[194585,194585],"mapped",[20172]],[[194586,194586],"mapped",[20908]],[[194587,194587],"mapped",[20917]],[[194588,194588],"mapped",[168415]],[[194589,194589],"mapped",[20981]],[[194590,194590],"mapped",[20995]],[[194591,194591],"mapped",[13535]],[[194592,194592],"mapped",[21051]],[[194593,194593],"mapped",[21062]],[[194594,194594],"mapped",[21106]],[[194595,194595],"mapped",[21111]],[[194596,194596],"mapped",[13589]],[[194597,194597],"mapped",[21191]],[[194598,194598],"mapped",[21193]],[[194599,194599],"mapped",[21220]],[[194600,194600],"mapped",[21242]],[[194601,194601],"mapped",[21253]],[[194602,194602],"mapped",[21254]],[[194603,194603],"mapped",[21271]],[[194604,194604],"mapped",[21321]],[[194605,194605],"mapped",[21329]],[[194606,194606],"mapped",[21338]],[[194607,194607],"mapped",[21363]],[[194608,194608],"mapped",[21373]],[[194609,194611],"mapped",[21375]],[[194612,194612],"mapped",[133676]],[[194613,194613],"mapped",[28784]],[[194614,194614],"mapped",[21450]],[[194615,194615],"mapped",[21471]],[[194616,194616],"mapped",[133987]],[[194617,194617],"mapped",[21483]],[[194618,194618],"mapped",[21489]],[[194619,194619],"mapped",[21510]],[[194620,194620],"mapped",[21662]],[[194621,194621],"mapped",[21560]],[[194622,194622],"mapped",[21576]],[[194623,194623],"mapped",[21608]],[[194624,194624],"mapped",[21666]],[[194625,194625],"mapped",[21750]],[[194626,194626],"mapped",[21776]],[[194627,194627],"mapped",[21843]],[[194628,194628],"mapped",[21859]],[[194629,194630],"mapped",[21892]],[[194631,194631],"mapped",[21913]],[[194632,194632],"mapped",[21931]],[[194633,194633],"mapped",[21939]],[[194634,194634],"mapped",[21954]],[[194635,194635],"mapped",[22294]],[[194636,194636],"mapped",[22022]],[[194637,194637],"mapped",[22295]],[[194638,194638],"mapped",[22097]],[[194639,194639],"mapped",[22132]],[[194640,194640],"mapped",[20999]],[[194641,194641],"mapped",[22766]],[[194642,194642],"mapped",[22478]],[[194643,194643],"mapped",[22516]],[[194644,194644],"mapped",[22541]],[[194645,194645],"mapped",[22411]],[[194646,194646],"mapped",[22578]],[[194647,194647],"mapped",[22577]],[[194648,194648],"mapped",[22700]],[[194649,194649],"mapped",[136420]],[[194650,194650],"mapped",[22770]],[[194651,194651],"mapped",[22775]],[[194652,194652],"mapped",[22790]],[[194653,194653],"mapped",[22810]],[[194654,194654],"mapped",[22818]],[[194655,194655],"mapped",[22882]],[[194656,194656],"mapped",[136872]],[[194657,194657],"mapped",[136938]],[[194658,194658],"mapped",[23020]],[[194659,194659],"mapped",[23067]],[[194660,194660],"mapped",[23079]],[[194661,194661],"mapped",[23e3]],[[194662,194662],"mapped",[23142]],[[194663,194663],"mapped",[14062]],[[194664,194664],"disallowed"],[[194665,194665],"mapped",[23304]],[[194666,194667],"mapped",[23358]],[[194668,194668],"mapped",[137672]],[[194669,194669],"mapped",[23491]],[[194670,194670],"mapped",[23512]],[[194671,194671],"mapped",[23527]],[[194672,194672],"mapped",[23539]],[[194673,194673],"mapped",[138008]],[[194674,194674],"mapped",[23551]],[[194675,194675],"mapped",[23558]],[[194676,194676],"disallowed"],[[194677,194677],"mapped",[23586]],[[194678,194678],"mapped",[14209]],[[194679,194679],"mapped",[23648]],[[194680,194680],"mapped",[23662]],[[194681,194681],"mapped",[23744]],[[194682,194682],"mapped",[23693]],[[194683,194683],"mapped",[138724]],[[194684,194684],"mapped",[23875]],[[194685,194685],"mapped",[138726]],[[194686,194686],"mapped",[23918]],[[194687,194687],"mapped",[23915]],[[194688,194688],"mapped",[23932]],[[194689,194689],"mapped",[24033]],[[194690,194690],"mapped",[24034]],[[194691,194691],"mapped",[14383]],[[194692,194692],"mapped",[24061]],[[194693,194693],"mapped",[24104]],[[194694,194694],"mapped",[24125]],[[194695,194695],"mapped",[24169]],[[194696,194696],"mapped",[14434]],[[194697,194697],"mapped",[139651]],[[194698,194698],"mapped",[14460]],[[194699,194699],"mapped",[24240]],[[194700,194700],"mapped",[24243]],[[194701,194701],"mapped",[24246]],[[194702,194702],"mapped",[24266]],[[194703,194703],"mapped",[172946]],[[194704,194704],"mapped",[24318]],[[194705,194706],"mapped",[140081]],[[194707,194707],"mapped",[33281]],[[194708,194709],"mapped",[24354]],[[194710,194710],"mapped",[14535]],[[194711,194711],"mapped",[144056]],[[194712,194712],"mapped",[156122]],[[194713,194713],"mapped",[24418]],[[194714,194714],"mapped",[24427]],[[194715,194715],"mapped",[14563]],[[194716,194716],"mapped",[24474]],[[194717,194717],"mapped",[24525]],[[194718,194718],"mapped",[24535]],[[194719,194719],"mapped",[24569]],[[194720,194720],"mapped",[24705]],[[194721,194721],"mapped",[14650]],[[194722,194722],"mapped",[14620]],[[194723,194723],"mapped",[24724]],[[194724,194724],"mapped",[141012]],[[194725,194725],"mapped",[24775]],[[194726,194726],"mapped",[24904]],[[194727,194727],"mapped",[24908]],[[194728,194728],"mapped",[24910]],[[194729,194729],"mapped",[24908]],[[194730,194730],"mapped",[24954]],[[194731,194731],"mapped",[24974]],[[194732,194732],"mapped",[25010]],[[194733,194733],"mapped",[24996]],[[194734,194734],"mapped",[25007]],[[194735,194735],"mapped",[25054]],[[194736,194736],"mapped",[25074]],[[194737,194737],"mapped",[25078]],[[194738,194738],"mapped",[25104]],[[194739,194739],"mapped",[25115]],[[194740,194740],"mapped",[25181]],[[194741,194741],"mapped",[25265]],[[194742,194742],"mapped",[25300]],[[194743,194743],"mapped",[25424]],[[194744,194744],"mapped",[142092]],[[194745,194745],"mapped",[25405]],[[194746,194746],"mapped",[25340]],[[194747,194747],"mapped",[25448]],[[194748,194748],"mapped",[25475]],[[194749,194749],"mapped",[25572]],[[194750,194750],"mapped",[142321]],[[194751,194751],"mapped",[25634]],[[194752,194752],"mapped",[25541]],[[194753,194753],"mapped",[25513]],[[194754,194754],"mapped",[14894]],[[194755,194755],"mapped",[25705]],[[194756,194756],"mapped",[25726]],[[194757,194757],"mapped",[25757]],[[194758,194758],"mapped",[25719]],[[194759,194759],"mapped",[14956]],[[194760,194760],"mapped",[25935]],[[194761,194761],"mapped",[25964]],[[194762,194762],"mapped",[143370]],[[194763,194763],"mapped",[26083]],[[194764,194764],"mapped",[26360]],[[194765,194765],"mapped",[26185]],[[194766,194766],"mapped",[15129]],[[194767,194767],"mapped",[26257]],[[194768,194768],"mapped",[15112]],[[194769,194769],"mapped",[15076]],[[194770,194770],"mapped",[20882]],[[194771,194771],"mapped",[20885]],[[194772,194772],"mapped",[26368]],[[194773,194773],"mapped",[26268]],[[194774,194774],"mapped",[32941]],[[194775,194775],"mapped",[17369]],[[194776,194776],"mapped",[26391]],[[194777,194777],"mapped",[26395]],[[194778,194778],"mapped",[26401]],[[194779,194779],"mapped",[26462]],[[194780,194780],"mapped",[26451]],[[194781,194781],"mapped",[144323]],[[194782,194782],"mapped",[15177]],[[194783,194783],"mapped",[26618]],[[194784,194784],"mapped",[26501]],[[194785,194785],"mapped",[26706]],[[194786,194786],"mapped",[26757]],[[194787,194787],"mapped",[144493]],[[194788,194788],"mapped",[26766]],[[194789,194789],"mapped",[26655]],[[194790,194790],"mapped",[26900]],[[194791,194791],"mapped",[15261]],[[194792,194792],"mapped",[26946]],[[194793,194793],"mapped",[27043]],[[194794,194794],"mapped",[27114]],[[194795,194795],"mapped",[27304]],[[194796,194796],"mapped",[145059]],[[194797,194797],"mapped",[27355]],[[194798,194798],"mapped",[15384]],[[194799,194799],"mapped",[27425]],[[194800,194800],"mapped",[145575]],[[194801,194801],"mapped",[27476]],[[194802,194802],"mapped",[15438]],[[194803,194803],"mapped",[27506]],[[194804,194804],"mapped",[27551]],[[194805,194805],"mapped",[27578]],[[194806,194806],"mapped",[27579]],[[194807,194807],"mapped",[146061]],[[194808,194808],"mapped",[138507]],[[194809,194809],"mapped",[146170]],[[194810,194810],"mapped",[27726]],[[194811,194811],"mapped",[146620]],[[194812,194812],"mapped",[27839]],[[194813,194813],"mapped",[27853]],[[194814,194814],"mapped",[27751]],[[194815,194815],"mapped",[27926]],[[194816,194816],"mapped",[27966]],[[194817,194817],"mapped",[28023]],[[194818,194818],"mapped",[27969]],[[194819,194819],"mapped",[28009]],[[194820,194820],"mapped",[28024]],[[194821,194821],"mapped",[28037]],[[194822,194822],"mapped",[146718]],[[194823,194823],"mapped",[27956]],[[194824,194824],"mapped",[28207]],[[194825,194825],"mapped",[28270]],[[194826,194826],"mapped",[15667]],[[194827,194827],"mapped",[28363]],[[194828,194828],"mapped",[28359]],[[194829,194829],"mapped",[147153]],[[194830,194830],"mapped",[28153]],[[194831,194831],"mapped",[28526]],[[194832,194832],"mapped",[147294]],[[194833,194833],"mapped",[147342]],[[194834,194834],"mapped",[28614]],[[194835,194835],"mapped",[28729]],[[194836,194836],"mapped",[28702]],[[194837,194837],"mapped",[28699]],[[194838,194838],"mapped",[15766]],[[194839,194839],"mapped",[28746]],[[194840,194840],"mapped",[28797]],[[194841,194841],"mapped",[28791]],[[194842,194842],"mapped",[28845]],[[194843,194843],"mapped",[132389]],[[194844,194844],"mapped",[28997]],[[194845,194845],"mapped",[148067]],[[194846,194846],"mapped",[29084]],[[194847,194847],"disallowed"],[[194848,194848],"mapped",[29224]],[[194849,194849],"mapped",[29237]],[[194850,194850],"mapped",[29264]],[[194851,194851],"mapped",[149e3]],[[194852,194852],"mapped",[29312]],[[194853,194853],"mapped",[29333]],[[194854,194854],"mapped",[149301]],[[194855,194855],"mapped",[149524]],[[194856,194856],"mapped",[29562]],[[194857,194857],"mapped",[29579]],[[194858,194858],"mapped",[16044]],[[194859,194859],"mapped",[29605]],[[194860,194861],"mapped",[16056]],[[194862,194862],"mapped",[29767]],[[194863,194863],"mapped",[29788]],[[194864,194864],"mapped",[29809]],[[194865,194865],"mapped",[29829]],[[194866,194866],"mapped",[29898]],[[194867,194867],"mapped",[16155]],[[194868,194868],"mapped",[29988]],[[194869,194869],"mapped",[150582]],[[194870,194870],"mapped",[30014]],[[194871,194871],"mapped",[150674]],[[194872,194872],"mapped",[30064]],[[194873,194873],"mapped",[139679]],[[194874,194874],"mapped",[30224]],[[194875,194875],"mapped",[151457]],[[194876,194876],"mapped",[151480]],[[194877,194877],"mapped",[151620]],[[194878,194878],"mapped",[16380]],[[194879,194879],"mapped",[16392]],[[194880,194880],"mapped",[30452]],[[194881,194881],"mapped",[151795]],[[194882,194882],"mapped",[151794]],[[194883,194883],"mapped",[151833]],[[194884,194884],"mapped",[151859]],[[194885,194885],"mapped",[30494]],[[194886,194887],"mapped",[30495]],[[194888,194888],"mapped",[30538]],[[194889,194889],"mapped",[16441]],[[194890,194890],"mapped",[30603]],[[194891,194891],"mapped",[16454]],[[194892,194892],"mapped",[16534]],[[194893,194893],"mapped",[152605]],[[194894,194894],"mapped",[30798]],[[194895,194895],"mapped",[30860]],[[194896,194896],"mapped",[30924]],[[194897,194897],"mapped",[16611]],[[194898,194898],"mapped",[153126]],[[194899,194899],"mapped",[31062]],[[194900,194900],"mapped",[153242]],[[194901,194901],"mapped",[153285]],[[194902,194902],"mapped",[31119]],[[194903,194903],"mapped",[31211]],[[194904,194904],"mapped",[16687]],[[194905,194905],"mapped",[31296]],[[194906,194906],"mapped",[31306]],[[194907,194907],"mapped",[31311]],[[194908,194908],"mapped",[153980]],[[194909,194910],"mapped",[154279]],[[194911,194911],"disallowed"],[[194912,194912],"mapped",[16898]],[[194913,194913],"mapped",[154539]],[[194914,194914],"mapped",[31686]],[[194915,194915],"mapped",[31689]],[[194916,194916],"mapped",[16935]],[[194917,194917],"mapped",[154752]],[[194918,194918],"mapped",[31954]],[[194919,194919],"mapped",[17056]],[[194920,194920],"mapped",[31976]],[[194921,194921],"mapped",[31971]],[[194922,194922],"mapped",[32e3]],[[194923,194923],"mapped",[155526]],[[194924,194924],"mapped",[32099]],[[194925,194925],"mapped",[17153]],[[194926,194926],"mapped",[32199]],[[194927,194927],"mapped",[32258]],[[194928,194928],"mapped",[32325]],[[194929,194929],"mapped",[17204]],[[194930,194930],"mapped",[156200]],[[194931,194931],"mapped",[156231]],[[194932,194932],"mapped",[17241]],[[194933,194933],"mapped",[156377]],[[194934,194934],"mapped",[32634]],[[194935,194935],"mapped",[156478]],[[194936,194936],"mapped",[32661]],[[194937,194937],"mapped",[32762]],[[194938,194938],"mapped",[32773]],[[194939,194939],"mapped",[156890]],[[194940,194940],"mapped",[156963]],[[194941,194941],"mapped",[32864]],[[194942,194942],"mapped",[157096]],[[194943,194943],"mapped",[32880]],[[194944,194944],"mapped",[144223]],[[194945,194945],"mapped",[17365]],[[194946,194946],"mapped",[32946]],[[194947,194947],"mapped",[33027]],[[194948,194948],"mapped",[17419]],[[194949,194949],"mapped",[33086]],[[194950,194950],"mapped",[23221]],[[194951,194951],"mapped",[157607]],[[194952,194952],"mapped",[157621]],[[194953,194953],"mapped",[144275]],[[194954,194954],"mapped",[144284]],[[194955,194955],"mapped",[33281]],[[194956,194956],"mapped",[33284]],[[194957,194957],"mapped",[36766]],[[194958,194958],"mapped",[17515]],[[194959,194959],"mapped",[33425]],[[194960,194960],"mapped",[33419]],[[194961,194961],"mapped",[33437]],[[194962,194962],"mapped",[21171]],[[194963,194963],"mapped",[33457]],[[194964,194964],"mapped",[33459]],[[194965,194965],"mapped",[33469]],[[194966,194966],"mapped",[33510]],[[194967,194967],"mapped",[158524]],[[194968,194968],"mapped",[33509]],[[194969,194969],"mapped",[33565]],[[194970,194970],"mapped",[33635]],[[194971,194971],"mapped",[33709]],[[194972,194972],"mapped",[33571]],[[194973,194973],"mapped",[33725]],[[194974,194974],"mapped",[33767]],[[194975,194975],"mapped",[33879]],[[194976,194976],"mapped",[33619]],[[194977,194977],"mapped",[33738]],[[194978,194978],"mapped",[33740]],[[194979,194979],"mapped",[33756]],[[194980,194980],"mapped",[158774]],[[194981,194981],"mapped",[159083]],[[194982,194982],"mapped",[158933]],[[194983,194983],"mapped",[17707]],[[194984,194984],"mapped",[34033]],[[194985,194985],"mapped",[34035]],[[194986,194986],"mapped",[34070]],[[194987,194987],"mapped",[160714]],[[194988,194988],"mapped",[34148]],[[194989,194989],"mapped",[159532]],[[194990,194990],"mapped",[17757]],[[194991,194991],"mapped",[17761]],[[194992,194992],"mapped",[159665]],[[194993,194993],"mapped",[159954]],[[194994,194994],"mapped",[17771]],[[194995,194995],"mapped",[34384]],[[194996,194996],"mapped",[34396]],[[194997,194997],"mapped",[34407]],[[194998,194998],"mapped",[34409]],[[194999,194999],"mapped",[34473]],[[195e3,195e3],"mapped",[34440]],[[195001,195001],"mapped",[34574]],[[195002,195002],"mapped",[34530]],[[195003,195003],"mapped",[34681]],[[195004,195004],"mapped",[34600]],[[195005,195005],"mapped",[34667]],[[195006,195006],"mapped",[34694]],[[195007,195007],"disallowed"],[[195008,195008],"mapped",[34785]],[[195009,195009],"mapped",[34817]],[[195010,195010],"mapped",[17913]],[[195011,195011],"mapped",[34912]],[[195012,195012],"mapped",[34915]],[[195013,195013],"mapped",[161383]],[[195014,195014],"mapped",[35031]],[[195015,195015],"mapped",[35038]],[[195016,195016],"mapped",[17973]],[[195017,195017],"mapped",[35066]],[[195018,195018],"mapped",[13499]],[[195019,195019],"mapped",[161966]],[[195020,195020],"mapped",[162150]],[[195021,195021],"mapped",[18110]],[[195022,195022],"mapped",[18119]],[[195023,195023],"mapped",[35488]],[[195024,195024],"mapped",[35565]],[[195025,195025],"mapped",[35722]],[[195026,195026],"mapped",[35925]],[[195027,195027],"mapped",[162984]],[[195028,195028],"mapped",[36011]],[[195029,195029],"mapped",[36033]],[[195030,195030],"mapped",[36123]],[[195031,195031],"mapped",[36215]],[[195032,195032],"mapped",[163631]],[[195033,195033],"mapped",[133124]],[[195034,195034],"mapped",[36299]],[[195035,195035],"mapped",[36284]],[[195036,195036],"mapped",[36336]],[[195037,195037],"mapped",[133342]],[[195038,195038],"mapped",[36564]],[[195039,195039],"mapped",[36664]],[[195040,195040],"mapped",[165330]],[[195041,195041],"mapped",[165357]],[[195042,195042],"mapped",[37012]],[[195043,195043],"mapped",[37105]],[[195044,195044],"mapped",[37137]],[[195045,195045],"mapped",[165678]],[[195046,195046],"mapped",[37147]],[[195047,195047],"mapped",[37432]],[[195048,195048],"mapped",[37591]],[[195049,195049],"mapped",[37592]],[[195050,195050],"mapped",[37500]],[[195051,195051],"mapped",[37881]],[[195052,195052],"mapped",[37909]],[[195053,195053],"mapped",[166906]],[[195054,195054],"mapped",[38283]],[[195055,195055],"mapped",[18837]],[[195056,195056],"mapped",[38327]],[[195057,195057],"mapped",[167287]],[[195058,195058],"mapped",[18918]],[[195059,195059],"mapped",[38595]],[[195060,195060],"mapped",[23986]],[[195061,195061],"mapped",[38691]],[[195062,195062],"mapped",[168261]],[[195063,195063],"mapped",[168474]],[[195064,195064],"mapped",[19054]],[[195065,195065],"mapped",[19062]],[[195066,195066],"mapped",[38880]],[[195067,195067],"mapped",[168970]],[[195068,195068],"mapped",[19122]],[[195069,195069],"mapped",[169110]],[[195070,195071],"mapped",[38923]],[[195072,195072],"mapped",[38953]],[[195073,195073],"mapped",[169398]],[[195074,195074],"mapped",[39138]],[[195075,195075],"mapped",[19251]],[[195076,195076],"mapped",[39209]],[[195077,195077],"mapped",[39335]],[[195078,195078],"mapped",[39362]],[[195079,195079],"mapped",[39422]],[[195080,195080],"mapped",[19406]],[[195081,195081],"mapped",[170800]],[[195082,195082],"mapped",[39698]],[[195083,195083],"mapped",[4e4]],[[195084,195084],"mapped",[40189]],[[195085,195085],"mapped",[19662]],[[195086,195086],"mapped",[19693]],[[195087,195087],"mapped",[40295]],[[195088,195088],"mapped",[172238]],[[195089,195089],"mapped",[19704]],[[195090,195090],"mapped",[172293]],[[195091,195091],"mapped",[172558]],[[195092,195092],"mapped",[172689]],[[195093,195093],"mapped",[40635]],[[195094,195094],"mapped",[19798]],[[195095,195095],"mapped",[40697]],[[195096,195096],"mapped",[40702]],[[195097,195097],"mapped",[40709]],[[195098,195098],"mapped",[40719]],[[195099,195099],"mapped",[40726]],[[195100,195100],"mapped",[40763]],[[195101,195101],"mapped",[173568]],[[195102,196605],"disallowed"],[[196606,196607],"disallowed"],[[196608,262141],"disallowed"],[[262142,262143],"disallowed"],[[262144,327677],"disallowed"],[[327678,327679],"disallowed"],[[327680,393213],"disallowed"],[[393214,393215],"disallowed"],[[393216,458749],"disallowed"],[[458750,458751],"disallowed"],[[458752,524285],"disallowed"],[[524286,524287],"disallowed"],[[524288,589821],"disallowed"],[[589822,589823],"disallowed"],[[589824,655357],"disallowed"],[[655358,655359],"disallowed"],[[655360,720893],"disallowed"],[[720894,720895],"disallowed"],[[720896,786429],"disallowed"],[[786430,786431],"disallowed"],[[786432,851965],"disallowed"],[[851966,851967],"disallowed"],[[851968,917501],"disallowed"],[[917502,917503],"disallowed"],[[917504,917504],"disallowed"],[[917505,917505],"disallowed"],[[917506,917535],"disallowed"],[[917536,917631],"disallowed"],[[917632,917759],"disallowed"],[[917760,917999],"ignored"],[[918e3,983037],"disallowed"],[[983038,983039],"disallowed"],[[983040,1048573],"disallowed"],[[1048574,1048575],"disallowed"],[[1048576,1114109],"disallowed"],[[1114110,1114111],"disallowed"]]});var b7=b((Mq,Qo)=>{"use strict";var y7=require("punycode"),g7=R7(),zi={TRANSITIONAL:0,NONTRANSITIONAL:1};function N7(i){return i.split("\0").map(function(e){return e.normalize("NFC")}).join("\0")}c(N7,"normalize");function C7(i){for(var e=0,u=g7.length-1;e<=u;){var r=Math.floor((e+u)/2),a=g7[r];if(a[0][0]<=i&&a[0][1]>=i)return a;a[0][0]>i?u=r-1:e=r+1}return null}c(C7,"findStatus");var My=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;function I7(i){return i.replace(My,"_").length}c(I7,"countSymbols");function my(i,e,u){for(var r=!1,a="",s=I7(i),n=0;n253||n.length===0)&&(a.error=!0);for(var l=0;l63||s.length===0){a.error=!0;break}}return a.error?null:s.join(".")};Qo.exports.toUnicode=function(i,e){var u=Xo(i,e,zi.NONTRANSITIONAL);return{domain:u.string,error:u.error}};Qo.exports.PROCESSING_OPTIONS=zi});var at=b((_q,Eu)=>{"use strict";var $i=require("punycode"),x7=b7(),U7={ftp:21,file:null,gopher:70,http:80,https:443,ws:80,wss:443},I0=Symbol("failure");function v7(i){return $i.ucs2.decode(i).length}c(v7,"countSymbols");function D7(i,e){let u=i[e];return isNaN(u)?void 0:String.fromCodePoint(u)}c(D7,"at");function en(i){return i>=48&&i<=57}c(en,"isASCIIDigit");function un(i){return i>=65&&i<=90||i>=97&&i<=122}c(un,"isASCIIAlpha");function Yy(i){return un(i)||en(i)}c(Yy,"isASCIIAlphanumeric");function Vu(i){return en(i)||i>=65&&i<=70||i>=97&&i<=102}c(Vu,"isASCIIHex");function w7(i){return i==="."||i.toLowerCase()==="%2e"}c(w7,"isSingleDot");function Ay(i){return i=i.toLowerCase(),i===".."||i==="%2e."||i===".%2e"||i==="%2e%2e"}c(Ay,"isDoubleDot");function Ry(i,e){return un(i)&&(e===58||e===124)}c(Ry,"isWindowsDriveLetterCodePoints");function P7(i){return i.length===2&&un(i.codePointAt(0))&&(i[1]===":"||i[1]==="|")}c(P7,"isWindowsDriveLetterString");function gy(i){return i.length===2&&un(i.codePointAt(0))&&i[1]===":"}c(gy,"isNormalizedWindowsDriveLetterString");function yy(i){return i.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|%|\/|:|\?|@|\[|\\|\]/)!==-1}c(yy,"containsForbiddenHostCodePoint");function Ny(i){return i.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|\/|:|\?|@|\[|\\|\]/)!==-1}c(Ny,"containsForbiddenHostCodePointExcludingPercent");function x3(i){return U7[i]!==void 0}c(x3,"isSpecialScheme");function Ye(i){return x3(i.scheme)}c(Ye,"isSpecial");function Cy(i){return U7[i]}c(Cy,"defaultPort");function k7(i){let e=i.toString(16).toUpperCase();return e.length===1&&(e="0"+e),"%"+e}c(k7,"percentEncode");function Iy(i){let e=new Buffer(i),u="";for(let r=0;r126}c(Jo,"isC0ControlPercentEncode");var xy=new Set([32,34,35,60,62,63,96,123,125]);function F7(i){return Jo(i)||xy.has(i)}c(F7,"isPathPercentEncode");var vy=new Set([47,58,59,61,64,91,92,93,94,124]);function D3(i){return F7(i)||vy.has(i)}c(D3,"isUserinfoPercentEncode");function Xr(i,e){let u=String.fromCodePoint(i);return e(i)?Iy(u):u}c(Xr,"percentEncodeChar");function Dy(i){let e=10;return i.length>=2&&i.charAt(0)==="0"&&i.charAt(1).toLowerCase()==="x"?(i=i.substring(2),e=16):i.length>=2&&i.charAt(0)==="0"&&(i=i.substring(1),e=8),i===""?0:(e===10?/[^0-9]/:e===16?/[^0-9A-Fa-f]/:/[^0-7]/).test(i)?I0:parseInt(i,e)}c(Dy,"parseIPv4Number");function wy(i){let e=i.split(".");if(e[e.length-1]===""&&e.length>1&&e.pop(),e.length>4)return i;let u=[];for(let s of e){if(s==="")return i;let n=Dy(s);if(n===I0)return i;u.push(n)}for(let s=0;s255)return I0;if(u[u.length-1]>=Math.pow(256,5-u.length))return I0;let r=u.pop(),a=0;for(let s of u)r+=s*Math.pow(256,3-a),++a;return r}c(wy,"parseIPv4");function Uy(i){let e="",u=i;for(let r=1;r<=4;++r)e=String(u%256)+e,r!==4&&(e="."+e),u=Math.floor(u/256);return e}c(Uy,"serializeIPv4");function Py(i){let e=[0,0,0,0,0,0,0,0],u=0,r=null,a=0;if(i=$i.ucs2.decode(i),i[a]===58){if(i[a+1]!==58)return I0;a+=2,++u,r=u}for(;a6))return I0;let l=0;for(;i[a]!==void 0;){let d=null;if(l>0)if(i[a]===46&&l<4)++a;else return I0;if(!en(i[a]))return I0;for(;en(i[a]);){let p=parseInt(D7(i,a));if(d===null)d=p;else{if(d===0)return I0;d=d*10+p}if(d>255)return I0;++a}e[u]=e[u]*256+d,++l,(l===2||l===4)&&++u}if(l!==4)return I0;break}else if(i[a]===58){if(++a,i[a]===void 0)return I0}else if(i[a]!==void 0)return I0;e[u]=s,++u}if(r!==null){let s=u-r;for(u=7;u!==0&&s>0;){let n=e[r+s-1];e[r+s-1]=e[u],e[u]=n,--u,--s}}else if(r===null&&u!==8)return I0;return e}c(Py,"parseIPv6");function ky(i){let e="",r=Hy(i).idx,a=!1;for(let s=0;s<=7;++s)if(!(a&&i[s]===0)){if(a&&(a=!1),r===s){e+=s===0?"::":":",a=!0;continue}e+=i[s].toString(16),s!==7&&(e+=":")}return e}c(ky,"serializeIPv6");function v3(i,e){if(i[0]==="[")return i[i.length-1]!=="]"?I0:Py(i.substring(1,i.length-1));if(!e)return Fy(i);let u=by(i),r=x7.toASCII(u,!1,x7.PROCESSING_OPTIONS.NONTRANSITIONAL,!1);if(r===null||yy(r))return I0;let a=wy(r);return typeof a=="number"||a===I0?a:r}c(v3,"parseHost");function Fy(i){if(Ny(i))return I0;let e="",u=$i.ucs2.decode(i);for(let r=0;ru&&(e=r,u=a),r=null,a=0):(r===null&&(r=s),++a);return a>u&&(e=r,u=a),{idx:e,len:u}}c(Hy,"findLongestZeroSequence");function w3(i){return typeof i=="number"?Uy(i):i instanceof Array?"["+ky(i)+"]":i}c(w3,"serializeHost");function Vy(i){return i.replace(/^[\u0000-\u001F\u0020]+|[\u0000-\u001F\u0020]+$/g,"")}c(Vy,"trimControlChars");function Gy(i){return i.replace(/\u0009|\u000A|\u000D/g,"")}c(Gy,"trimTabAndNewline");function H7(i){let e=i.path;e.length!==0&&(i.scheme==="file"&&e.length===1&&Ky(e[0])||e.pop())}c(H7,"shortenPath");function V7(i){return i.username!==""||i.password!==""}c(V7,"includesCredentials");function qy(i){return i.host===null||i.host===""||i.cannotBeABaseURL||i.scheme==="file"}c(qy,"cannotHaveAUsernamePasswordPort");function Ky(i){return/^[A-Za-z]:$/.test(i)}c(Ky,"isNormalizedWindowsDriveLetter");function pe(i,e,u,r,a){if(this.pointer=0,this.input=i,this.base=e||null,this.encodingOverride=u||"utf-8",this.stateOverride=a,this.url=r,this.failure=!1,this.parseError=!1,!this.url){this.url={scheme:"",username:"",password:"",host:null,port:null,path:[],query:null,fragment:null,cannotBeABaseURL:!1};let n=Vy(this.input);n!==this.input&&(this.parseError=!0),this.input=n}let s=Gy(this.input);for(s!==this.input&&(this.parseError=!0),this.input=s,this.state=a||"scheme start",this.buffer="",this.atFlag=!1,this.arrFlag=!1,this.passwordTokenSeenFlag=!1,this.input=$i.ucs2.decode(this.input);this.pointer<=this.input.length;++this.pointer){let n=this.input[this.pointer],l=isNaN(n)?void 0:String.fromCodePoint(n),d=this["parse "+this.state](n,l);if(d){if(d===I0){this.failure=!0;break}}else break}}c(pe,"URLStateMachine");pe.prototype["parse scheme start"]=c(function(e,u){if(un(e))this.buffer+=u.toLowerCase(),this.state="scheme";else if(!this.stateOverride)this.state="no scheme",--this.pointer;else return this.parseError=!0,I0;return!0},"parseSchemeStart");pe.prototype["parse scheme"]=c(function(e,u){if(Yy(e)||e===43||e===45||e===46)this.buffer+=u.toLowerCase();else if(e===58){if(this.stateOverride&&(Ye(this.url)&&!x3(this.buffer)||!Ye(this.url)&&x3(this.buffer)||(V7(this.url)||this.url.port!==null)&&this.buffer==="file"||this.url.scheme==="file"&&(this.url.host===""||this.url.host===null))||(this.url.scheme=this.buffer,this.buffer="",this.stateOverride))return!1;this.url.scheme==="file"?((this.input[this.pointer+1]!==47||this.input[this.pointer+2]!==47)&&(this.parseError=!0),this.state="file"):Ye(this.url)&&this.base!==null&&this.base.scheme===this.url.scheme?this.state="special relative or authority":Ye(this.url)?this.state="special authority slashes":this.input[this.pointer+1]===47?(this.state="path or authority",++this.pointer):(this.url.cannotBeABaseURL=!0,this.url.path.push(""),this.state="cannot-be-a-base-URL path")}else if(!this.stateOverride)this.buffer="",this.state="no scheme",this.pointer=-1;else return this.parseError=!0,I0;return!0},"parseScheme");pe.prototype["parse no scheme"]=c(function(e){return this.base===null||this.base.cannotBeABaseURL&&e!==35?I0:(this.base.cannotBeABaseURL&&e===35?(this.url.scheme=this.base.scheme,this.url.path=this.base.path.slice(),this.url.query=this.base.query,this.url.fragment="",this.url.cannotBeABaseURL=!0,this.state="fragment"):this.base.scheme==="file"?(this.state="file",--this.pointer):(this.state="relative",--this.pointer),!0)},"parseNoScheme");pe.prototype["parse special relative or authority"]=c(function(e){return e===47&&this.input[this.pointer+1]===47?(this.state="special authority ignore slashes",++this.pointer):(this.parseError=!0,this.state="relative",--this.pointer),!0},"parseSpecialRelativeOrAuthority");pe.prototype["parse path or authority"]=c(function(e){return e===47?this.state="authority":(this.state="path",--this.pointer),!0},"parsePathOrAuthority");pe.prototype["parse relative"]=c(function(e){return this.url.scheme=this.base.scheme,isNaN(e)?(this.url.username=this.base.username,this.url.password=this.base.password,this.url.host=this.base.host,this.url.port=this.base.port,this.url.path=this.base.path.slice(),this.url.query=this.base.query):e===47?this.state="relative slash":e===63?(this.url.username=this.base.username,this.url.password=this.base.password,this.url.host=this.base.host,this.url.port=this.base.port,this.url.path=this.base.path.slice(),this.url.query="",this.state="query"):e===35?(this.url.username=this.base.username,this.url.password=this.base.password,this.url.host=this.base.host,this.url.port=this.base.port,this.url.path=this.base.path.slice(),this.url.query=this.base.query,this.url.fragment="",this.state="fragment"):Ye(this.url)&&e===92?(this.parseError=!0,this.state="relative slash"):(this.url.username=this.base.username,this.url.password=this.base.password,this.url.host=this.base.host,this.url.port=this.base.port,this.url.path=this.base.path.slice(0,this.base.path.length-1),this.state="path",--this.pointer),!0},"parseRelative");pe.prototype["parse relative slash"]=c(function(e){return Ye(this.url)&&(e===47||e===92)?(e===92&&(this.parseError=!0),this.state="special authority ignore slashes"):e===47?this.state="authority":(this.url.username=this.base.username,this.url.password=this.base.password,this.url.host=this.base.host,this.url.port=this.base.port,this.state="path",--this.pointer),!0},"parseRelativeSlash");pe.prototype["parse special authority slashes"]=c(function(e){return e===47&&this.input[this.pointer+1]===47?(this.state="special authority ignore slashes",++this.pointer):(this.parseError=!0,this.state="special authority ignore slashes",--this.pointer),!0},"parseSpecialAuthoritySlashes");pe.prototype["parse special authority ignore slashes"]=c(function(e){return e!==47&&e!==92?(this.state="authority",--this.pointer):this.parseError=!0,!0},"parseSpecialAuthorityIgnoreSlashes");pe.prototype["parse authority"]=c(function(e,u){if(e===64){this.parseError=!0,this.atFlag&&(this.buffer="%40"+this.buffer),this.atFlag=!0;let r=v7(this.buffer);for(let a=0;aMath.pow(2,16)-1)return this.parseError=!0,I0;this.url.port=r===Cy(this.url.scheme)?null:r,this.buffer=""}if(this.stateOverride)return!1;this.state="path start",--this.pointer}else return this.parseError=!0,I0;return!0},"parsePort");var Wy=new Set([47,92,63,35]);pe.prototype["parse file"]=c(function(e){return this.url.scheme="file",e===47||e===92?(e===92&&(this.parseError=!0),this.state="file slash"):this.base!==null&&this.base.scheme==="file"?isNaN(e)?(this.url.host=this.base.host,this.url.path=this.base.path.slice(),this.url.query=this.base.query):e===63?(this.url.host=this.base.host,this.url.path=this.base.path.slice(),this.url.query="",this.state="query"):e===35?(this.url.host=this.base.host,this.url.path=this.base.path.slice(),this.url.query=this.base.query,this.url.fragment="",this.state="fragment"):(this.input.length-this.pointer-1===0||!Ry(e,this.input[this.pointer+1])||this.input.length-this.pointer-1>=2&&!Wy.has(this.input[this.pointer+2])?(this.url.host=this.base.host,this.url.path=this.base.path.slice(),H7(this.url)):this.parseError=!0,this.state="path",--this.pointer):(this.state="path",--this.pointer),!0},"parseFile");pe.prototype["parse file slash"]=c(function(e){return e===47||e===92?(e===92&&(this.parseError=!0),this.state="file host"):(this.base!==null&&this.base.scheme==="file"&&(gy(this.base.path[0])?this.url.path.push(this.base.path[0]):this.url.host=this.base.host),this.state="path",--this.pointer),!0},"parseFileSlash");pe.prototype["parse file host"]=c(function(e,u){if(isNaN(e)||e===47||e===92||e===63||e===35)if(--this.pointer,!this.stateOverride&&P7(this.buffer))this.parseError=!0,this.state="path";else if(this.buffer===""){if(this.url.host="",this.stateOverride)return!1;this.state="path start"}else{let r=v3(this.buffer,Ye(this.url));if(r===I0)return I0;if(r==="localhost"&&(r=""),this.url.host=r,this.stateOverride)return!1;this.buffer="",this.state="path start"}else this.buffer+=u;return!0},"parseFileHost");pe.prototype["parse path start"]=c(function(e){return Ye(this.url)?(e===92&&(this.parseError=!0),this.state="path",e!==47&&e!==92&&--this.pointer):!this.stateOverride&&e===63?(this.url.query="",this.state="query"):!this.stateOverride&&e===35?(this.url.fragment="",this.state="fragment"):e!==void 0&&(this.state="path",e!==47&&--this.pointer),!0},"parsePathStart");pe.prototype["parse path"]=c(function(e){if(isNaN(e)||e===47||Ye(this.url)&&e===92||!this.stateOverride&&(e===63||e===35)){if(Ye(this.url)&&e===92&&(this.parseError=!0),Ay(this.buffer)?(H7(this.url),e!==47&&!(Ye(this.url)&&e===92)&&this.url.path.push("")):w7(this.buffer)&&e!==47&&!(Ye(this.url)&&e===92)?this.url.path.push(""):w7(this.buffer)||(this.url.scheme==="file"&&this.url.path.length===0&&P7(this.buffer)&&(this.url.host!==""&&this.url.host!==null&&(this.parseError=!0,this.url.host=""),this.buffer=this.buffer[0]+":"),this.url.path.push(this.buffer)),this.buffer="",this.url.scheme==="file"&&(e===void 0||e===63||e===35))for(;this.url.path.length>1&&this.url.path[0]==="";)this.parseError=!0,this.url.path.shift();e===63&&(this.url.query="",this.state="query"),e===35&&(this.url.fragment="",this.state="fragment")}else e===37&&(!Vu(this.input[this.pointer+1])||!Vu(this.input[this.pointer+2]))&&(this.parseError=!0),this.buffer+=Xr(e,F7);return!0},"parsePath");pe.prototype["parse cannot-be-a-base-URL path"]=c(function(e){return e===63?(this.url.query="",this.state="query"):e===35?(this.url.fragment="",this.state="fragment"):(!isNaN(e)&&e!==37&&(this.parseError=!0),e===37&&(!Vu(this.input[this.pointer+1])||!Vu(this.input[this.pointer+2]))&&(this.parseError=!0),isNaN(e)||(this.url.path[0]=this.url.path[0]+Xr(e,Jo))),!0},"parseCannotBeABaseURLPath");pe.prototype["parse query"]=c(function(e,u){if(isNaN(e)||!this.stateOverride&&e===35){(!Ye(this.url)||this.url.scheme==="ws"||this.url.scheme==="wss")&&(this.encodingOverride="utf-8");let r=new Buffer(this.buffer);for(let a=0;a126||r[a]===34||r[a]===35||r[a]===60||r[a]===62?this.url.query+=k7(r[a]):this.url.query+=String.fromCodePoint(r[a]);this.buffer="",e===35&&(this.url.fragment="",this.state="fragment")}else e===37&&(!Vu(this.input[this.pointer+1])||!Vu(this.input[this.pointer+2]))&&(this.parseError=!0),this.buffer+=u;return!0},"parseQuery");pe.prototype["parse fragment"]=c(function(e){return isNaN(e)||(e===0?this.parseError=!0:(e===37&&(!Vu(this.input[this.pointer+1])||!Vu(this.input[this.pointer+2]))&&(this.parseError=!0),this.url.fragment+=Xr(e,Jo))),!0},"parseFragment");function jy(i,e){let u=i.scheme+":";if(i.host!==null?(u+="//",(i.username!==""||i.password!=="")&&(u+=i.username,i.password!==""&&(u+=":"+i.password),u+="@"),u+=w3(i.host),i.port!==null&&(u+=":"+i.port)):i.host===null&&i.scheme==="file"&&(u+="//"),i.cannotBeABaseURL)u+=i.path[0];else for(let r of i.path)u+="/"+r;return i.query!==null&&(u+="?"+i.query),!e&&i.fragment!==null&&(u+="#"+i.fragment),u}c(jy,"serializeURL");function Xy(i){let e=i.scheme+"://";return e+=w3(i.host),i.port!==null&&(e+=":"+i.port),e}c(Xy,"serializeOrigin");Eu.exports.serializeURL=jy;Eu.exports.serializeURLOrigin=function(i){switch(i.scheme){case"blob":try{return Eu.exports.serializeURLOrigin(Eu.exports.parseURL(i.path[0]))}catch{return"null"}case"ftp":case"gopher":case"http":case"https":case"ws":case"wss":return Xy({scheme:i.scheme,host:i.host,port:i.port});case"file":return"file://";default:return"null"}};Eu.exports.basicURLParse=function(i,e){e===void 0&&(e={});let u=new pe(i,e.baseURL,e.encodingOverride,e.url,e.stateOverride);return u.failure?"failure":u.url};Eu.exports.setTheUsername=function(i,e){i.username="";let u=$i.ucs2.decode(e);for(let r=0;r{"use strict";var he=at(),tn;G7.implementation=(tn=class{constructor(e){let u=e[0],r=e[1],a=null;if(r!==void 0&&(a=he.basicURLParse(r),a==="failure"))throw new TypeError("Invalid base URL");let s=he.basicURLParse(u,{baseURL:a});if(s==="failure")throw new TypeError("Invalid URL");this._url=s}get href(){return he.serializeURL(this._url)}set href(e){let u=he.basicURLParse(e);if(u==="failure")throw new TypeError("Invalid URL");this._url=u}get origin(){return he.serializeURLOrigin(this._url)}get protocol(){return this._url.scheme+":"}set protocol(e){he.basicURLParse(e+":",{url:this._url,stateOverride:"scheme start"})}get username(){return this._url.username}set username(e){he.cannotHaveAUsernamePasswordPort(this._url)||he.setTheUsername(this._url,e)}get password(){return this._url.password}set password(e){he.cannotHaveAUsernamePasswordPort(this._url)||he.setThePassword(this._url,e)}get host(){let e=this._url;return e.host===null?"":e.port===null?he.serializeHost(e.host):he.serializeHost(e.host)+":"+he.serializeInteger(e.port)}set host(e){this._url.cannotBeABaseURL||he.basicURLParse(e,{url:this._url,stateOverride:"host"})}get hostname(){return this._url.host===null?"":he.serializeHost(this._url.host)}set hostname(e){this._url.cannotBeABaseURL||he.basicURLParse(e,{url:this._url,stateOverride:"hostname"})}get port(){return this._url.port===null?"":he.serializeInteger(this._url.port)}set port(e){he.cannotHaveAUsernamePasswordPort(this._url)||(e===""?this._url.port=null:he.basicURLParse(e,{url:this._url,stateOverride:"port"}))}get pathname(){return this._url.cannotBeABaseURL?this._url.path[0]:this._url.path.length===0?"":"/"+this._url.path.join("/")}set pathname(e){this._url.cannotBeABaseURL||(this._url.path=[],he.basicURLParse(e,{url:this._url,stateOverride:"path start"}))}get search(){return this._url.query===null||this._url.query===""?"":"?"+this._url.query}set search(e){let u=this._url;if(e===""){u.query=null;return}let r=e[0]==="?"?e.substring(1):e;u.query="",he.basicURLParse(r,{url:u,stateOverride:"query"})}get hash(){return this._url.fragment===null||this._url.fragment===""?"":"#"+this._url.fragment}set hash(e){if(e===""){this._url.fragment=null;return}let u=e[0]==="#"?e.substring(1):e;this._url.fragment="",he.basicURLParse(u,{url:this._url,stateOverride:"fragment"})}toJSON(){return this.href}},c(tn,"URLImpl"),tn)});var j7=b((Rq,rn)=>{"use strict";var Ru=Y7(),W7=A7(),K7=q7(),$0=W7.implSymbol;function Re(i){if(!this||this[$0]||!(this instanceof Re))throw new TypeError("Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function.");if(arguments.length<1)throw new TypeError("Failed to construct 'URL': 1 argument required, but only "+arguments.length+" present.");let e=[];for(let u=0;u{"use strict";st.URL=j7().interface;st.serializeURL=at().serializeURL;st.serializeURLOrigin=at().serializeURLOrigin;st.basicURLParse=at().basicURLParse;st.setTheUsername=at().setTheUsername;st.setThePassword=at().setThePassword;st.serializeHost=at().serializeHost;st.serializeInteger=at().serializeInteger;st.parseURL=at().parseURL});var W3=b((qu,aE)=>{"use strict";Object.defineProperty(qu,"__esModule",{value:!0});function ta(i){return i&&typeof i=="object"&&"default"in i?i.default:i}c(ta,"_interopDefault");var Gu=ta(require("stream")),$7=ta(require("http")),ul=ta(require("url")),Z7=ta(X7()),Qy=ta(require("https")),Qr=ta(require("zlib")),Jy=Gu.Readable,It=Symbol("buffer"),U3=Symbol("type"),sn=class sn{constructor(){this[U3]="";let e=arguments[0],u=arguments[1],r=[],a=0;if(e){let n=e,l=Number(n.length);for(let d=0;d1&&arguments[1]!==void 0?arguments[1]:{},r=u.size;let a=r===void 0?0:r;var s=u.timeout;let n=s===void 0?0:s;i==null?i=null:eE(i)?i=Buffer.from(i.toString()):ln(i)||Buffer.isBuffer(i)||(Object.prototype.toString.call(i)==="[object ArrayBuffer]"?i=Buffer.from(i):ArrayBuffer.isView(i)?i=Buffer.from(i.buffer,i.byteOffset,i.byteLength):i instanceof Gu||(i=Buffer.from(String(i)))),this[xt]={body:i,disturbed:!1,error:null},this.size=a,this.timeout=n,i instanceof Gu&&i.on("error",function(l){let d=l.name==="AbortError"?l:new De(`Invalid response body while trying to fetch ${e.url}: ${l.message}`,"system",l);e[xt].error=d})}c(ge,"Body");ge.prototype={get body(){return this[xt].body},get bodyUsed(){return this[xt].disturbed},arrayBuffer(){return Zi.call(this).then(function(i){return i.buffer.slice(i.byteOffset,i.byteOffset+i.byteLength)})},blob(){let i=this.headers&&this.headers.get("content-type")||"";return Zi.call(this).then(function(e){return Object.assign(new nn([],{type:i.toLowerCase()}),{[It]:e})})},json(){var i=this;return Zi.call(this).then(function(e){try{return JSON.parse(e.toString())}catch(u){return ge.Promise.reject(new De(`invalid json response body at ${i.url} reason: ${u.message}`,"invalid-json"))}})},text(){return Zi.call(this).then(function(i){return i.toString()})},buffer(){return Zi.call(this)},textConverted(){var i=this;return Zi.call(this).then(function(e){return zy(e,i.headers)})}};Object.defineProperties(ge.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});ge.mixIn=function(i){for(let e of Object.getOwnPropertyNames(ge.prototype))if(!(e in i)){let u=Object.getOwnPropertyDescriptor(ge.prototype,e);Object.defineProperty(i,e,u)}};function Zi(){var i=this;if(this[xt].disturbed)return ge.Promise.reject(new TypeError(`body used already for: ${this.url}`));if(this[xt].disturbed=!0,this[xt].error)return ge.Promise.reject(this[xt].error);let e=this.body;if(e===null)return ge.Promise.resolve(Buffer.alloc(0));if(ln(e)&&(e=e.stream()),Buffer.isBuffer(e))return ge.Promise.resolve(e);if(!(e instanceof Gu))return ge.Promise.resolve(Buffer.alloc(0));let u=[],r=0,a=!1;return new ge.Promise(function(s,n){let l;i.timeout&&(l=setTimeout(function(){a=!0,n(new De(`Response timeout while trying to fetch ${i.url} (over ${i.timeout}ms)`,"body-timeout"))},i.timeout)),e.on("error",function(d){d.name==="AbortError"?(a=!0,n(d)):n(new De(`Invalid response body while trying to fetch ${i.url}: ${d.message}`,"system",d))}),e.on("data",function(d){if(!(a||d===null)){if(i.size&&r+d.length>i.size){a=!0,n(new De(`content size at ${i.url} over limit: ${i.size}`,"max-size"));return}r+=d.length,u.push(d)}}),e.on("end",function(){if(!a){clearTimeout(l);try{s(Buffer.concat(u,r))}catch(d){n(new De(`Could not create Buffer from response body for ${i.url}: ${d.message}`,"system",d))}}})})}c(Zi,"consumeBody");function zy(i,e){if(typeof H3!="function")throw new Error("The package `encoding` must be installed to use the textConverted() function");let u=e.get("content-type"),r="utf-8",a,s;return u&&(a=/charset=([^;]*)/i.exec(u)),s=i.slice(0,1024).toString(),!a&&s&&(a=/0&&arguments[0]!==void 0?arguments[0]:void 0;if(this[Oe]=Object.create(null),e instanceof $o){let u=e.raw(),r=Object.keys(u);for(let a of r)for(let s of u[a])this.append(a,s);return}if(e!=null)if(typeof e=="object"){let u=e[Symbol.iterator];if(u!=null){if(typeof u!="function")throw new TypeError("Header pairs must be iterable");let r=[];for(let a of e){if(typeof a!="object"||typeof a[Symbol.iterator]!="function")throw new TypeError("Each header pair must be iterable");r.push(Array.from(a))}for(let a of r){if(a.length!==2)throw new TypeError("Each header pair must be a name/value tuple");this.append(a[0],a[1])}}else for(let r of Object.keys(e)){let a=e[r];this.append(r,a)}}else throw new TypeError("Provided initializer must be an object")}get(e){e=`${e}`,an(e);let u=ea(this[Oe],e);return u===void 0?null:this[Oe][u].join(", ")}forEach(e){let u=arguments.length>1&&arguments[1]!==void 0?arguments[1]:void 0,r=G3(this),a=0;for(;a1&&arguments[1]!==void 0?arguments[1]:"key+value";return Object.keys(i[Oe]).sort().map(e==="key"?function(r){return r.toLowerCase()}:e==="value"?function(r){return i[Oe][r].join(", ")}:function(r){return[r.toLowerCase(),i[Oe][r].join(", ")]})}c(G3,"getHeaders");var q3=Symbol("internal");function P3(i,e){let u=Object.create(K3);return u[q3]={target:i,kind:e,index:0},u}c(P3,"createHeadersIterator");var K3=Object.setPrototypeOf({next(){if(!this||Object.getPrototypeOf(this)!==K3)throw new TypeError("Value of `this` is not a HeadersIterator");var i=this[q3];let e=i.target,u=i.kind,r=i.index,a=G3(e,u),s=a.length;return r>=s?{value:void 0,done:!0}:(this[q3].index=r+1,{value:a[r],done:!1})}},Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));Object.defineProperty(K3,Symbol.toStringTag,{value:"HeadersIterator",writable:!1,enumerable:!1,configurable:!0});function Zy(i){let e=Object.assign({__proto__:null},i[Oe]),u=ea(i[Oe],"Host");return u!==void 0&&(e[u]=e[u][0]),e}c(Zy,"exportNodeCompatibleHeaders");function eN(i){let e=new yu;for(let u of Object.keys(i))if(!iE.test(u))if(Array.isArray(i[u]))for(let r of i[u])V3.test(r)||(e[Oe][u]===void 0?e[Oe][u]=[r]:e[Oe][u].push(r));else V3.test(i[u])||(e[Oe][u]=[i[u]]);return e}c(eN,"createHeadersLenient");var ar=Symbol("Response internals"),uN=$7.STATUS_CODES,Zo=class Zo{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null,u=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};ge.call(this,e,u);let r=u.status||200,a=new yu(u.headers);if(e!=null&&!a.has("Content-Type")){let s=tE(e);s&&a.append("Content-Type",s)}this[ar]={url:u.url,status:r,statusText:u.statusText||uN[r],headers:a,counter:u.counter}}get url(){return this[ar].url||""}get status(){return this[ar].status}get ok(){return this[ar].status>=200&&this[ar].status<300}get redirected(){return this[ar].counter>0}get statusText(){return this[ar].statusText}get headers(){return this[ar].headers}clone(){return new Zo(uE(this),{url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected})}};c(Zo,"Response");var gu=Zo;ge.mixIn(gu.prototype);Object.defineProperties(gu.prototype,{url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});Object.defineProperty(gu.prototype,Symbol.toStringTag,{value:"Response",writable:!1,enumerable:!1,configurable:!0});var bt=Symbol("Request internals"),tN=ul.URL||Z7.URL,rN=ul.parse,iN=ul.format;function k3(i){return/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(i)&&(i=new tN(i).toString()),rN(i)}c(k3,"parseURL");var aN="destroy"in Gu.Readable.prototype;function zo(i){return typeof i=="object"&&typeof i[bt]=="object"}c(zo,"isRequest");function sN(i){let e=i&&typeof i=="object"&&Object.getPrototypeOf(i);return!!(e&&e.constructor.name==="AbortSignal")}c(sN,"isAbortSignal");var el=class el{constructor(e){let u=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r;zo(e)?r=k3(e.url):(e&&e.href?r=k3(e.href):r=k3(`${e}`),e={});let a=u.method||e.method||"GET";if(a=a.toUpperCase(),(u.body!=null||zo(e)&&e.body!==null)&&(a==="GET"||a==="HEAD"))throw new TypeError("Request with GET/HEAD method cannot have body");let s=u.body!=null?u.body:zo(e)&&e.body!==null?uE(e):null;ge.call(this,s,{timeout:u.timeout||e.timeout||0,size:u.size||e.size||0});let n=new yu(u.headers||e.headers||{});if(s!=null&&!n.has("Content-Type")){let d=tE(s);d&&n.append("Content-Type",d)}let l=zo(e)?e.signal:null;if("signal"in u&&(l=u.signal),l!=null&&!sN(l))throw new TypeError("Expected signal to be an instanceof AbortSignal");this[bt]={method:a,redirect:u.redirect||e.redirect||"follow",headers:n,parsedURL:r,signal:l},this.follow=u.follow!==void 0?u.follow:e.follow!==void 0?e.follow:20,this.compress=u.compress!==void 0?u.compress:e.compress!==void 0?e.compress:!0,this.counter=u.counter||e.counter||0,this.agent=u.agent||e.agent}get method(){return this[bt].method}get url(){return iN(this[bt].parsedURL)}get headers(){return this[bt].headers}get redirect(){return this[bt].redirect}get signal(){return this[bt].signal}clone(){return new el(this)}};c(el,"Request");var nr=el;ge.mixIn(nr.prototype);Object.defineProperty(nr.prototype,Symbol.toStringTag,{value:"Request",writable:!1,enumerable:!1,configurable:!0});Object.defineProperties(nr.prototype,{method:{enumerable:!0},url:{enumerable:!0},headers:{enumerable:!0},redirect:{enumerable:!0},clone:{enumerable:!0},signal:{enumerable:!0}});function nN(i){let e=i[bt].parsedURL,u=new yu(i[bt].headers);if(u.has("Accept")||u.set("Accept","*/*"),!e.protocol||!e.hostname)throw new TypeError("Only absolute URLs are supported");if(!/^https?:$/.test(e.protocol))throw new TypeError("Only HTTP(S) protocols are supported");if(i.signal&&i.body instanceof Gu.Readable&&!aN)throw new Error("Cancellation of streamed requests with AbortSignal is not supported in node < 8");let r=null;if(i.body==null&&/^(POST|PUT)$/i.test(i.method)&&(r="0"),i.body!=null){let s=rE(i);typeof s=="number"&&(r=String(s))}r&&u.set("Content-Length",r),u.has("User-Agent")||u.set("User-Agent","node-fetch/1.0 (+https://github.com/bitinn/node-fetch)"),i.compress&&!u.has("Accept-Encoding")&&u.set("Accept-Encoding","gzip,deflate");let a=i.agent;return typeof a=="function"&&(a=a(e)),Object.assign({},e,{method:i.method,headers:Zy(u),agent:a})}c(nN,"getNodeRequestOptions");function ua(i){Error.call(this,i),this.type="aborted",this.message=i,Error.captureStackTrace(this,this.constructor)}c(ua,"AbortError");ua.prototype=Object.create(Error.prototype);ua.prototype.constructor=ua;ua.prototype.name="AbortError";var on=ul.URL||Z7.URL,z7=Gu.PassThrough,oN=c(function(e,u){let r=new on(u).hostname,a=new on(e).hostname;return r===a||r[r.length-a.length-1]==="."&&r.endsWith(a)},"isDomainOrSubdomain"),lN=c(function(e,u){let r=new on(u).protocol,a=new on(e).protocol;return r===a},"isSameProtocol");function sr(i,e){if(!sr.Promise)throw new Error("native promise missing, set fetch.Promise to your favorite alternative");return ge.Promise=sr.Promise,new sr.Promise(function(u,r){let a=new nr(i,e),s=nN(a),n=(s.protocol==="https:"?Qy:$7).request,l=a.signal,d=null,p=c(function(){let E=new ua("The user aborted a request.");r(E),a.body&&a.body instanceof Gu.Readable&&F3(a.body,E),!(!d||!d.body)&&d.body.emit("error",E)},"abort");if(l&&l.aborted){p();return}let h=c(function(){p(),_()},"abortAndFinalize"),f=n(s),S;l&&l.addEventListener("abort",h);function _(){f.abort(),l&&l.removeEventListener("abort",h),clearTimeout(S)}c(_,"finalize"),a.timeout&&f.once("socket",function(O){S=setTimeout(function(){r(new De(`network timeout at: ${a.url}`,"request-timeout")),_()},a.timeout)}),f.on("error",function(O){r(new De(`request to ${a.url} failed, reason: ${O.message}`,"system",O)),d&&d.body&&F3(d.body,O),_()}),cN(f,function(O){l&&l.aborted||d&&d.body&&F3(d.body,O)}),parseInt(process.version.substring(1))<14&&f.on("socket",function(O){O.addListener("close",function(E){let A=O.listenerCount("data")>0;if(d&&A&&!E&&!(l&&l.aborted)){let g=new Error("Premature close");g.code="ERR_STREAM_PREMATURE_CLOSE",d.body.emit("error",g)}})}),f.on("response",function(O){clearTimeout(S);let E=eN(O.headers);if(sr.isRedirect(O.statusCode)){let W=E.get("Location"),Y=null;try{Y=W===null?null:new on(W,a.url).toString()}catch{if(a.redirect!=="manual"){r(new De(`uri requested responds with an invalid redirect URL: ${W}`,"invalid-redirect")),_();return}}switch(a.redirect){case"error":r(new De(`uri requested responds with a redirect, redirect mode is set to error: ${a.url}`,"no-redirect")),_();return;case"manual":if(Y!==null)try{E.set("Location",Y)}catch(w){r(w)}break;case"follow":if(Y===null)break;if(a.counter>=a.follow){r(new De(`maximum redirect reached at: ${a.url}`,"max-redirect")),_();return}let N={headers:new yu(a.headers),follow:a.follow,counter:a.counter+1,agent:a.agent,compress:a.compress,method:a.method,body:a.body,signal:a.signal,timeout:a.timeout,size:a.size};if(!oN(a.url,Y)||!lN(a.url,Y))for(let w of["authorization","www-authenticate","cookie","cookie2"])N.headers.delete(w);if(O.statusCode!==303&&a.body&&rE(a)===null){r(new De("Cannot follow redirect with body being a readable stream","unsupported-redirect")),_();return}(O.statusCode===303||(O.statusCode===301||O.statusCode===302)&&a.method==="POST")&&(N.method="GET",N.body=void 0,N.headers.delete("content-length")),u(sr(new nr(Y,N))),_();return}}O.once("end",function(){l&&l.removeEventListener("abort",h)});let A=O.pipe(new z7),g={url:a.url,status:O.statusCode,statusText:O.statusMessage,headers:E,size:a.size,timeout:a.timeout,counter:a.counter},D=E.get("Content-Encoding");if(!a.compress||a.method==="HEAD"||D===null||O.statusCode===204||O.statusCode===304){d=new gu(A,g),u(d);return}let I={flush:Qr.Z_SYNC_FLUSH,finishFlush:Qr.Z_SYNC_FLUSH};if(D=="gzip"||D=="x-gzip"){A=A.pipe(Qr.createGunzip(I)),d=new gu(A,g),u(d);return}if(D=="deflate"||D=="x-deflate"){let W=O.pipe(new z7);W.once("data",function(Y){(Y[0]&15)===8?A=A.pipe(Qr.createInflate()):A=A.pipe(Qr.createInflateRaw()),d=new gu(A,g),u(d)}),W.on("end",function(){d||(d=new gu(A,g),u(d))});return}if(D=="br"&&typeof Qr.createBrotliDecompress=="function"){A=A.pipe(Qr.createBrotliDecompress()),d=new gu(A,g),u(d);return}d=new gu(A,g),u(d)}),$y(f,a)})}c(sr,"fetch");function cN(i,e){let u;i.on("socket",function(r){u=r}),i.on("response",function(r){let a=r.headers;a["transfer-encoding"]==="chunked"&&!a["content-length"]&&r.once("close",function(s){if(u&&u.listenerCount("data")>0&&!s){let l=new Error("Premature close");l.code="ERR_STREAM_PREMATURE_CLOSE",e(l)}})})}c(cN,"fixResponseChunkedTransferBadEnding");function F3(i,e){i.destroy?i.destroy(e):(i.emit("error",e),i.end())}c(F3,"destroyStream");sr.isRedirect=function(i){return i===301||i===302||i===303||i===307||i===308};sr.Promise=global.Promise;aE.exports=qu=sr;Object.defineProperty(qu,"__esModule",{value:!0});qu.default=qu;qu.Headers=yu;qu.Request=nr;qu.Response=gu;qu.FetchError=De;qu.AbortError=ua});var nE=b((Cq,sE)=>{"use strict";var nt=c(i=>i!==null&&typeof i=="object"&&typeof i.pipe=="function","isStream");nt.writable=i=>nt(i)&&i.writable!==!1&&typeof i._write=="function"&&typeof i._writableState=="object";nt.readable=i=>nt(i)&&i.readable!==!1&&typeof i._read=="function"&&typeof i._readableState=="object";nt.duplex=i=>nt.writable(i)&&nt.readable(i);nt.transform=i=>nt.duplex(i)&&typeof i._transform=="function";sE.exports=nt});var Q3=b(tl=>{"use strict";Object.defineProperty(tl,"__esModule",{value:!0});tl.GaxiosError=void 0;var X3=class X3 extends Error{constructor(e,u,r){super(e),this.response=r,this.config=u,this.code=r.status.toString()}};c(X3,"GaxiosError");var j3=X3;tl.GaxiosError=j3});var lE=b(rl=>{"use strict";Object.defineProperty(rl,"__esModule",{value:!0});rl.getRetryConfig=void 0;async function dN(i){var e;let u=oE(i);if(!i||!i.config||!u&&!i.config.retry)return{shouldRetry:!1};u=u||{},u.currentRetryAttempt=u.currentRetryAttempt||0,u.retry=u.retry===void 0||u.retry===null?3:u.retry,u.httpMethodsToRetry=u.httpMethodsToRetry||["GET","HEAD","PUT","OPTIONS","DELETE"],u.noResponseRetries=u.noResponseRetries===void 0||u.noResponseRetries===null?2:u.noResponseRetries;let r=[[100,199],[429,429],[500,599]];if(u.statusCodesToRetry=u.statusCodesToRetry||r,i.config.retryConfig=u,!await(u.shouldRetry||pN)(i))return{shouldRetry:!1,config:i.config};let n=(u.currentRetryAttempt?0:(e=u.retryDelay)!==null&&e!==void 0?e:100)+(Math.pow(2,u.currentRetryAttempt)-1)/2*1e3;i.config.retryConfig.currentRetryAttempt+=1;let l=new Promise(d=>{setTimeout(d,n)});return u.onRetryAttempt&&u.onRetryAttempt(i),await l,{shouldRetry:!0,config:i.config}}c(dN,"getRetryConfig");rl.getRetryConfig=dN;function pN(i){let e=oE(i);if(i.name==="AbortError"||!e||e.retry===0||!i.response&&(e.currentRetryAttempt||0)>=e.noResponseRetries||!i.config.method||e.httpMethodsToRetry.indexOf(i.config.method.toUpperCase())<0)return!1;if(i.response&&i.response.status){let u=!1;for(let[r,a]of e.statusCodesToRetry){let s=i.response.status;if(s>=r&&s<=a){u=!0;break}}if(!u)return!1}return e.currentRetryAttempt=e.currentRetryAttempt||0,!(e.currentRetryAttempt>=e.retry)}c(pN,"shouldRetryRequest");function oE(i){if(i&&i.config&&i.config.retryConfig)return i.config.retryConfig}c(oE,"getConfig")});var dE=b((wq,cE)=>{var ra=1e3,ia=ra*60,aa=ia*60,Jr=aa*24,hN=Jr*7,fN=Jr*365.25;cE.exports=function(i,e){e=e||{};var u=typeof i;if(u==="string"&&i.length>0)return SN(i);if(u==="number"&&isFinite(i))return e.long?LN(i):ON(i);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(i))};function SN(i){if(i=String(i),!(i.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(i);if(e){var u=parseFloat(e[1]),r=(e[2]||"ms").toLowerCase();switch(r){case"years":case"year":case"yrs":case"yr":case"y":return u*fN;case"weeks":case"week":case"w":return u*hN;case"days":case"day":case"d":return u*Jr;case"hours":case"hour":case"hrs":case"hr":case"h":return u*aa;case"minutes":case"minute":case"mins":case"min":case"m":return u*ia;case"seconds":case"second":case"secs":case"sec":case"s":return u*ra;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return u;default:return}}}}c(SN,"parse");function ON(i){var e=Math.abs(i);return e>=Jr?Math.round(i/Jr)+"d":e>=aa?Math.round(i/aa)+"h":e>=ia?Math.round(i/ia)+"m":e>=ra?Math.round(i/ra)+"s":i+"ms"}c(ON,"fmtShort");function LN(i){var e=Math.abs(i);return e>=Jr?il(i,e,Jr,"day"):e>=aa?il(i,e,aa,"hour"):e>=ia?il(i,e,ia,"minute"):e>=ra?il(i,e,ra,"second"):i+" ms"}c(LN,"fmtLong");function il(i,e,u,r){var a=e>=u*1.5;return Math.round(i/u)+" "+r+(a?"s":"")}c(il,"plural")});var J3=b((Pq,pE)=>{function EN(i){u.debug=u,u.default=u,u.coerce=d,u.disable=s,u.enable=a,u.enabled=n,u.humanize=dE(),u.destroy=p,Object.keys(i).forEach(h=>{u[h]=i[h]}),u.names=[],u.skips=[],u.formatters={};function e(h){let f=0;for(let S=0;S{if(N==="%%")return"%";W++;let G=u.formatters[w];if(typeof G=="function"){let U=A[W];N=G.call(g,U),A.splice(W,1),W--}return N}),u.formatArgs.call(g,A),(g.log||u.log).apply(g,A)}return c(E,"debug"),E.namespace=h,E.useColors=u.useColors(),E.color=u.selectColor(h),E.extend=r,E.destroy=u.destroy,Object.defineProperty(E,"enabled",{enumerable:!0,configurable:!1,get:()=>S!==null?S:(_!==u.namespaces&&(_=u.namespaces,O=u.enabled(h)),O),set:A=>{S=A}}),typeof u.init=="function"&&u.init(E),E}c(u,"createDebug");function r(h,f){let S=u(this.namespace+(typeof f>"u"?":":f)+h);return S.log=this.log,S}c(r,"extend");function a(h){u.save(h),u.namespaces=h,u.names=[],u.skips=[];let f,S=(typeof h=="string"?h:"").split(/[\s,]+/),_=S.length;for(f=0;f<_;f++)S[f]&&(h=S[f].replace(/\*/g,".*?"),h[0]==="-"?u.skips.push(new RegExp("^"+h.slice(1)+"$")):u.names.push(new RegExp("^"+h+"$")))}c(a,"enable");function s(){let h=[...u.names.map(l),...u.skips.map(l).map(f=>"-"+f)].join(",");return u.enable(""),h}c(s,"disable");function n(h){if(h[h.length-1]==="*")return!0;let f,S;for(f=0,S=u.skips.length;f{Bu.formatArgs=MN;Bu.save=mN;Bu.load=_N;Bu.useColors=BN;Bu.storage=TN();Bu.destroy=(()=>{let i=!1;return()=>{i||(i=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();Bu.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function BN(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)?!1:typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}c(BN,"useColors");function MN(i){if(i[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+i[0]+(this.useColors?"%c ":" ")+"+"+al.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;i.splice(1,0,e,"color: inherit");let u=0,r=0;i[0].replace(/%[a-zA-Z%]/g,a=>{a!=="%%"&&(u++,a==="%c"&&(r=u))}),i.splice(r,0,e)}c(MN,"formatArgs");Bu.log=console.debug||console.log||(()=>{});function mN(i){try{i?Bu.storage.setItem("debug",i):Bu.storage.removeItem("debug")}catch{}}c(mN,"save");function _N(){let i;try{i=Bu.storage.getItem("debug")}catch{}return!i&&typeof process<"u"&&"env"in process&&(i=process.env.DEBUG),i}c(_N,"load");function TN(){try{return localStorage}catch{}}c(TN,"localstorage");al.exports=J3()(Bu);var{formatters:YN}=al.exports;YN.j=function(i){try{return JSON.stringify(i)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var SE=b((Hq,fE)=>{"use strict";fE.exports=(i,e=process.argv)=>{let u=i.startsWith("-")?"":i.length===1?"-":"--",r=e.indexOf(u+i),a=e.indexOf("--");return r!==-1&&(a===-1||r{"use strict";var AN=require("os"),OE=require("tty"),Nu=SE(),{env:ye}=process,or;Nu("no-color")||Nu("no-colors")||Nu("color=false")||Nu("color=never")?or=0:(Nu("color")||Nu("colors")||Nu("color=true")||Nu("color=always"))&&(or=1);"FORCE_COLOR"in ye&&(ye.FORCE_COLOR==="true"?or=1:ye.FORCE_COLOR==="false"?or=0:or=ye.FORCE_COLOR.length===0?1:Math.min(parseInt(ye.FORCE_COLOR,10),3));function z3(i){return i===0?!1:{level:i,hasBasic:!0,has256:i>=2,has16m:i>=3}}c(z3,"translateLevel");function $3(i,e){if(or===0)return 0;if(Nu("color=16m")||Nu("color=full")||Nu("color=truecolor"))return 3;if(Nu("color=256"))return 2;if(i&&!e&&or===void 0)return 0;let u=or||0;if(ye.TERM==="dumb")return u;if(process.platform==="win32"){let r=AN.release().split(".");return Number(r[0])>=10&&Number(r[2])>=10586?Number(r[2])>=14931?3:2:1}if("CI"in ye)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some(r=>r in ye)||ye.CI_NAME==="codeship"?1:u;if("TEAMCITY_VERSION"in ye)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(ye.TEAMCITY_VERSION)?1:0;if(ye.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in ye){let r=parseInt((ye.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(ye.TERM_PROGRAM){case"iTerm.app":return r>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(ye.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ye.TERM)||"COLORTERM"in ye?1:u}c($3,"supportsColor");function RN(i){let e=$3(i,i&&i.isTTY);return z3(e)}c(RN,"getSupportLevel");LE.exports={supportsColor:RN,stdout:z3($3(!0,OE.isatty(1))),stderr:z3($3(!0,OE.isatty(2)))}});var ME=b((we,nl)=>{var gN=require("tty"),sl=require("util");we.init=vN;we.log=IN;we.formatArgs=NN;we.save=bN;we.load=xN;we.useColors=yN;we.destroy=sl.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");we.colors=[6,2,3,4,5,1];try{let i=EE();i&&(i.stderr||i).level>=2&&(we.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}we.inspectOpts=Object.keys(process.env).filter(i=>/^debug_/i.test(i)).reduce((i,e)=>{let u=e.substring(6).toLowerCase().replace(/_([a-z])/g,(a,s)=>s.toUpperCase()),r=process.env[e];return/^(yes|on|true|enabled)$/i.test(r)?r=!0:/^(no|off|false|disabled)$/i.test(r)?r=!1:r==="null"?r=null:r=Number(r),i[u]=r,i},{});function yN(){return"colors"in we.inspectOpts?!!we.inspectOpts.colors:gN.isatty(process.stderr.fd)}c(yN,"useColors");function NN(i){let{namespace:e,useColors:u}=this;if(u){let r=this.color,a="\x1B[3"+(r<8?r:"8;5;"+r),s=` ${a};1m${e} \x1B[0m`;i[0]=s+i[0].split(` +`).join(` +`+s),i.push(a+"m+"+nl.exports.humanize(this.diff)+"\x1B[0m")}else i[0]=CN()+e+" "+i[0]}c(NN,"formatArgs");function CN(){return we.inspectOpts.hideDate?"":new Date().toISOString()+" "}c(CN,"getDate");function IN(...i){return process.stderr.write(sl.format(...i)+` +`)}c(IN,"log");function bN(i){i?process.env.DEBUG=i:delete process.env.DEBUG}c(bN,"save");function xN(){return process.env.DEBUG}c(xN,"load");function vN(i){i.inspectOpts={};let e=Object.keys(we.inspectOpts);for(let u=0;ue.trim()).join(" ")};BE.O=function(i){return this.inspectOpts.colors=this.useColors,sl.inspect(i,this.inspectOpts)}});var sa=b((Kq,Z3)=>{typeof process>"u"||process.type==="renderer"||process.browser===!0||process.__nwjs?Z3.exports=hE():Z3.exports=ME()});var mE=b(ep=>{"use strict";Object.defineProperty(ep,"__esModule",{value:!0});function DN(i){return function(e,u){return new Promise((r,a)=>{i.call(this,e,u,(s,n)=>{s?a(s):r(n)})})}}c(DN,"promisify");ep.default=DN});var rp=b((tp,TE)=>{"use strict";var _E=tp&&tp.__importDefault||function(i){return i&&i.__esModule?i:{default:i}},wN=require("events"),UN=_E(sa()),PN=_E(mE()),cn=UN.default("agent-base");function kN(i){return!!i&&typeof i.addRequest=="function"}c(kN,"isAgent");function up(){let{stack:i}=new Error;return typeof i!="string"?!1:i.split(` +`).some(e=>e.indexOf("(https.js:")!==-1||e.indexOf("node:https:")!==-1)}c(up,"isSecureEndpoint");function ol(i,e){return new ol.Agent(i,e)}c(ol,"createAgent");(function(i){let u=class u extends wN.EventEmitter{constructor(a,s){super();let n=s;typeof a=="function"?this.callback=a:a&&(n=a),this.timeout=null,n&&typeof n.timeout=="number"&&(this.timeout=n.timeout),this.maxFreeSockets=1,this.maxSockets=1,this.maxTotalSockets=1/0,this.sockets={},this.freeSockets={},this.requests={},this.options={}}get defaultPort(){return typeof this.explicitDefaultPort=="number"?this.explicitDefaultPort:up()?443:80}set defaultPort(a){this.explicitDefaultPort=a}get protocol(){return typeof this.explicitProtocol=="string"?this.explicitProtocol:up()?"https:":"http:"}set protocol(a){this.explicitProtocol=a}callback(a,s,n){throw new Error('"agent-base" has no default implementation, you must subclass and override `callback()`')}addRequest(a,s){let n=Object.assign({},s);typeof n.secureEndpoint!="boolean"&&(n.secureEndpoint=up()),n.host==null&&(n.host="localhost"),n.port==null&&(n.port=n.secureEndpoint?443:80),n.protocol==null&&(n.protocol=n.secureEndpoint?"https:":"http:"),n.host&&n.path&&delete n.path,delete n.agent,delete n.hostname,delete n._defaultAgent,delete n.defaultPort,delete n.createConnection,a._last=!0,a.shouldKeepAlive=!1;let l=!1,d=null,p=n.timeout||this.timeout,h=c(O=>{a._hadError||(a.emit("error",O),a._hadError=!0)},"onerror"),f=c(()=>{d=null,l=!0;let O=new Error(`A "socket" was not created for HTTP request before ${p}ms`);O.code="ETIMEOUT",h(O)},"ontimeout"),S=c(O=>{l||(d!==null&&(clearTimeout(d),d=null),h(O))},"callbackError"),_=c(O=>{if(l)return;if(d!=null&&(clearTimeout(d),d=null),kN(O)){cn("Callback returned another Agent instance %o",O.constructor.name),O.addRequest(a,n);return}if(O){O.once("free",()=>{this.freeSocket(O,n)}),a.onSocket(O);return}let E=new Error(`no Duplex stream was returned to agent-base for \`${a.method} ${a.path}\``);h(E)},"onsocket");if(typeof this.callback!="function"){h(new Error("`callback` is not defined"));return}this.promisifiedCallback||(this.callback.length>=3?(cn("Converting legacy callback function to promise"),this.promisifiedCallback=PN.default(this.callback)):this.promisifiedCallback=this.callback),typeof p=="number"&&p>0&&(d=setTimeout(f,p)),"port"in n&&typeof n.port!="number"&&(n.port=Number(n.port));try{cn("Resolving socket for %o request: %o",n.protocol,`${a.method} ${a.path}`),Promise.resolve(this.promisifiedCallback(a,n)).then(_,S)}catch(O){Promise.reject(O).catch(S)}}freeSocket(a,s){cn("Freeing socket %o %o",a.constructor.name,s),a.destroy()}destroy(){cn("Destroying agent %o",this.constructor.name)}};c(u,"Agent");let e=u;i.Agent=e,i.prototype=i.Agent.prototype})(ol||(ol={}));TE.exports=ol});var YE=b(pn=>{"use strict";var FN=pn&&pn.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(pn,"__esModule",{value:!0});var HN=FN(sa()),dn=HN.default("https-proxy-agent:parse-proxy-response");function VN(i){return new Promise((e,u)=>{let r=0,a=[];function s(){let f=i.read();f?h(f):i.once("readable",s)}c(s,"read");function n(){i.removeListener("end",d),i.removeListener("error",p),i.removeListener("close",l),i.removeListener("readable",s)}c(n,"cleanup");function l(f){dn("onclose had error %o",f)}c(l,"onclose");function d(){dn("onend")}c(d,"onend");function p(f){n(),dn("onerror %o",f),u(f)}c(p,"onerror");function h(f){a.push(f),r+=f.length;let S=Buffer.concat(a,r);if(S.indexOf(`\r +\r +`)===-1){dn("have not received end of HTTP headers yet..."),s();return}let O=S.toString("ascii",0,S.indexOf(`\r +`)),E=+O.split(" ")[1];dn("got proxy server response: %o",O),e({statusCode:E,buffered:S})}c(h,"ondata"),i.on("error",p),i.on("close",l),i.on("end",d),s()})}c(VN,"parseProxyResponse");pn.default=VN});var gE=b(zr=>{"use strict";var GN=zr&&zr.__awaiter||function(i,e,u,r){function a(s){return s instanceof u?s:new u(function(n){n(s)})}return c(a,"adopt"),new(u||(u=Promise))(function(s,n){function l(h){try{p(r.next(h))}catch(f){n(f)}}c(l,"fulfilled");function d(h){try{p(r.throw(h))}catch(f){n(f)}}c(d,"rejected");function p(h){h.done?s(h.value):a(h.value).then(l,d)}c(p,"step"),p((r=r.apply(i,e||[])).next())})},na=zr&&zr.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(zr,"__esModule",{value:!0});var AE=na(require("net")),RE=na(require("tls")),qN=na(require("url")),KN=na(require("assert")),WN=na(sa()),jN=rp(),XN=na(YE()),hn=WN.default("https-proxy-agent:agent"),ap=class ap extends jN.Agent{constructor(e){let u;if(typeof e=="string"?u=qN.default.parse(e):u=e,!u)throw new Error("an HTTP(S) proxy server `host` and `port` must be specified!");hn("creating new HttpsProxyAgent instance: %o",u),super(u);let r=Object.assign({},u);this.secureProxy=u.secureProxy||zN(r.protocol),r.host=r.hostname||r.host,typeof r.port=="string"&&(r.port=parseInt(r.port,10)),!r.port&&r.host&&(r.port=this.secureProxy?443:80),this.secureProxy&&!("ALPNProtocols"in r)&&(r.ALPNProtocols=["http 1.1"]),r.host&&r.path&&(delete r.path,delete r.pathname),this.proxy=r}callback(e,u){return GN(this,void 0,void 0,function*(){let{proxy:r,secureProxy:a}=this,s;a?(hn("Creating `tls.Socket`: %o",r),s=RE.default.connect(r)):(hn("Creating `net.Socket`: %o",r),s=AE.default.connect(r));let n=Object.assign({},r.headers),d=`CONNECT ${`${u.host}:${u.port}`} HTTP/1.1\r +`;r.auth&&(n["Proxy-Authorization"]=`Basic ${Buffer.from(r.auth).toString("base64")}`);let{host:p,port:h,secureEndpoint:f}=u;JN(h,f)||(p+=`:${h}`),n.Host=p,n.Connection="close";for(let A of Object.keys(n))d+=`${A}: ${n[A]}\r +`;let S=XN.default(s);s.write(`${d}\r +`);let{statusCode:_,buffered:O}=yield S;if(_===200){if(e.once("socket",QN),u.secureEndpoint){hn("Upgrading socket connection to TLS");let A=u.servername||u.host;return RE.default.connect(Object.assign(Object.assign({},$N(u,"host","hostname","path","port")),{socket:s,servername:A}))}return s}s.destroy();let E=new AE.default.Socket({writable:!1});return E.readable=!0,e.once("socket",A=>{hn("replaying proxy buffer for failed request"),KN.default(A.listenerCount("data")>0),A.push(O),A.push(null)}),E})}};c(ap,"HttpsProxyAgent");var ip=ap;zr.default=ip;function QN(i){i.resume()}c(QN,"resume");function JN(i,e){return!!(!e&&i===80||e&&i===443)}c(JN,"isDefaultPort");function zN(i){return typeof i=="string"?/^https:?$/i.test(i):!1}c(zN,"isHTTPS");function $N(i,...e){let u={},r;for(r in i)e.includes(r)||(u[r]=i[r]);return u}c($N,"omit")});var lp=b((op,yE)=>{"use strict";var ZN=op&&op.__importDefault||function(i){return i&&i.__esModule?i:{default:i}},sp=ZN(gE());function np(i){return new sp.default(i)}c(np,"createHttpsProxyAgent");(function(i){i.HttpsProxyAgent=sp.default,i.prototype=sp.default.prototype})(np||(np={}));yE.exports=np});var xE=b(oa=>{"use strict";var ll=oa&&oa.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(oa,"__esModule",{value:!0});oa.Gaxios=void 0;var eC=ll(Lu()),uC=require("https"),tC=ll(W3()),rC=ll(require("querystring")),iC=ll(nE()),CE=require("url"),aC=Q3(),sC=lE(),nC=lC()?window.fetch:tC.default;function oC(){return typeof window<"u"&&!!window}c(oC,"hasWindow");function lC(){return oC()&&!!window.fetch}c(lC,"hasFetch");function cC(){return typeof Buffer<"u"}c(cC,"hasBuffer");function NE(i,e){return!!IE(i,e)}c(NE,"hasHeader");function IE(i,e){e=e.toLowerCase();for(let u of Object.keys((i==null?void 0:i.headers)||{}))if(e===u.toLowerCase())return i.headers[u]}c(IE,"getHeader");var cp;function bE(){let i=process.env.HTTPS_PROXY||process.env.https_proxy||process.env.HTTP_PROXY||process.env.http_proxy;return i&&(cp=lp()),i}c(bE,"loadProxy");bE();function dC(i){var e;let u=(e=process.env.NO_PROXY)!==null&&e!==void 0?e:process.env.no_proxy;if(!u)return!1;let r=u.split(","),a=new CE.URL(i);return!!r.find(s=>s.startsWith("*.")||s.startsWith(".")?(s=s.replace(/^\*\./,"."),a.hostname.endsWith(s)):s===a.origin||s===a.hostname)}c(dC,"skipProxy");function pC(i){if(!dC(i))return bE()}c(pC,"getProxy");var pp=class pp{constructor(e){this.agentCache=new Map,this.defaults=e||{}}async request(e={}){return e=this.validateOpts(e),this._request(e)}async _defaultAdapter(e){let r=await(e.fetchImplementation||nC)(e.url,e),a=await this.getResponseData(e,r);return this.translateResponse(e,r,a)}async _request(e={}){try{let u;if(e.adapter?u=await e.adapter(e,this._defaultAdapter.bind(this)):u=await this._defaultAdapter(e),!e.validateStatus(u.status))throw new aC.GaxiosError(`Request failed with status code ${u.status}`,e,u);return u}catch(u){let r=u;r.config=e;let{shouldRetry:a,config:s}=await sC.getRetryConfig(u);if(a&&s)return r.config.retryConfig.currentRetryAttempt=s.retryConfig.currentRetryAttempt,this._request(r.config);throw r}}async getResponseData(e,u){switch(e.responseType){case"stream":return u.body;case"json":{let r=await u.text();try{r=JSON.parse(r)}catch{}return r}case"arraybuffer":return u.arrayBuffer();case"blob":return u.blob();default:return u.text()}}validateOpts(e){let u=eC.default(!0,{},this.defaults,e);if(!u.url)throw new Error("URL is required.");let r=u.baseUrl||u.baseURL;if(r&&(u.url=r+u.url),u.paramsSerializer=u.paramsSerializer||this.paramsSerializer,u.params&&Object.keys(u.params).length>0){let s=u.paramsSerializer(u.params);s.startsWith("?")&&(s=s.slice(1));let n=u.url.includes("?")?"&":"?";u.url=u.url+n+s}if(typeof e.maxContentLength=="number"&&(u.size=e.maxContentLength),typeof e.maxRedirects=="number"&&(u.follow=e.maxRedirects),u.headers=u.headers||{},u.data){let s=typeof FormData>"u"?!1:(u==null?void 0:u.data)instanceof FormData;iC.default.readable(u.data)?u.body=u.data:cC()&&Buffer.isBuffer(u.data)?(u.body=u.data,NE(u,"Content-Type")||(u.headers["Content-Type"]="application/json")):typeof u.data=="object"?s||(IE(u,"content-type")==="application/x-www-form-urlencoded"?u.body=u.paramsSerializer(u.data):(NE(u,"Content-Type")||(u.headers["Content-Type"]="application/json"),u.body=JSON.stringify(u.data))):u.body=u.data}u.validateStatus=u.validateStatus||this.validateStatus,u.responseType=u.responseType||"json",!u.headers.Accept&&u.responseType==="json"&&(u.headers.Accept="application/json"),u.method=u.method||"GET";let a=pC(u.url);if(a)if(this.agentCache.has(a))u.agent=this.agentCache.get(a);else{if(u.cert&&u.key){let s=new CE.URL(a);u.agent=new cp({port:s.port,host:s.host,protocol:s.protocol,cert:u.cert,key:u.key})}else u.agent=new cp(a);this.agentCache.set(a,u.agent)}else u.cert&&u.key&&(this.agentCache.has(u.key)?u.agent=this.agentCache.get(u.key):(u.agent=new uC.Agent({cert:u.cert,key:u.key}),this.agentCache.set(u.key,u.agent)));return u}validateStatus(e){return e>=200&&e<300}paramsSerializer(e){return rC.default.stringify(e)}translateResponse(e,u,r){let a={};return u.headers.forEach((s,n)=>{a[n]=s}),{config:e,data:r,headers:a,status:u.status,statusText:u.statusText,request:{responseURL:u.url}}}};c(pp,"Gaxios");var dp=pp;oa.Gaxios=dp});var cl=b(ot=>{"use strict";Object.defineProperty(ot,"__esModule",{value:!0});ot.request=ot.instance=ot.Gaxios=void 0;var vE=xE();Object.defineProperty(ot,"Gaxios",{enumerable:!0,get:function(){return vE.Gaxios}});var hC=Q3();Object.defineProperty(ot,"GaxiosError",{enumerable:!0,get:function(){return hC.GaxiosError}});ot.instance=new vE.Gaxios;async function fC(i){return ot.instance.request(i)}c(fC,"request");ot.request=fC});var hp=b((DE,dl)=>{(function(i){"use strict";var e,u=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,r=Math.ceil,a=Math.floor,s="[BigNumber Error] ",n=s+"Number primitive has more than 15 significant digits: ",l=1e14,d=14,p=9007199254740991,h=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],f=1e7,S=1e9;function _(Y){var N,w,G,U=u0.prototype={constructor:u0,toString:null,valueOf:null},z=new u0(1),e0=20,Z=4,l0=-7,n0=21,M0=-1e7,S0=1e7,c0=!1,Ee=1,ve=0,_0={prefix:"",groupSize:3,secondaryGroupSize:0,groupSeparator:",",decimalSeparator:".",fractionGroupSize:0,fractionGroupSeparator:"\xA0",suffix:""},R0="0123456789abcdefghijklmnopqrstuvwxyz",j0=!0;function u0(y,C){var x,q,F,V,X,H,K,J,Q=this;if(!(Q instanceof u0))return new u0(y,C);if(C==null){if(y&&y._isBigNumber===!0){Q.s=y.s,!y.c||y.e>S0?Q.c=Q.e=null:y.e=10;X/=10,V++);V>S0?Q.c=Q.e=null:(Q.e=V,Q.c=[y]);return}J=String(y)}else{if(!u.test(J=String(y)))return G(Q,J,H);Q.s=J.charCodeAt(0)==45?(J=J.slice(1),-1):1}(V=J.indexOf("."))>-1&&(J=J.replace(".","")),(X=J.search(/e/i))>0?(V<0&&(V=X),V+=+J.slice(X+1),J=J.substring(0,X)):V<0&&(V=J.length)}else{if(g(C,2,R0.length,"Base"),C==10&&j0)return Q=new u0(y),Q0(Q,e0+Q.e+1,Z);if(J=String(y),H=typeof y=="number"){if(y*0!=0)return G(Q,J,H,C);if(Q.s=1/y<0?(J=J.slice(1),-1):1,u0.DEBUG&&J.replace(/^0\.0*|\./,"").length>15)throw Error(n+y)}else Q.s=J.charCodeAt(0)===45?(J=J.slice(1),-1):1;for(x=R0.slice(0,C),V=X=0,K=J.length;XV){V=K;continue}}else if(!F&&(J==J.toUpperCase()&&(J=J.toLowerCase())||J==J.toLowerCase()&&(J=J.toUpperCase()))){F=!0,X=-1,V=0;continue}return G(Q,String(y),H,C)}H=!1,J=w(J,C,10,Q.s),(V=J.indexOf("."))>-1?J=J.replace(".",""):V=J.length}for(X=0;J.charCodeAt(X)===48;X++);for(K=J.length;J.charCodeAt(--K)===48;);if(J=J.slice(X,++K)){if(K-=X,H&&u0.DEBUG&&K>15&&(y>p||y!==a(y)))throw Error(n+Q.s*y);if((V=V-X-1)>S0)Q.c=Q.e=null;else if(V=-S&&F<=S&&F===a(F)){if(q[0]===0){if(F===0&&q.length===1)return!0;break e}if(C=(F+1)%d,C<1&&(C+=d),String(q[0]).length==C){for(C=0;C=l||x!==a(x))break e;if(x!==0)return!0}}}else if(q===null&&F===null&&(V===null||V===1||V===-1))return!0;throw Error(s+"Invalid BigNumber: "+y)},u0.maximum=u0.max=function(){return re(arguments,-1)},u0.minimum=u0.min=function(){return re(arguments,1)},u0.random=function(){var y=9007199254740992,C=Math.random()*y&2097151?function(){return a(Math.random()*y)}:function(){return(Math.random()*1073741824|0)*8388608+(Math.random()*8388608|0)};return function(x){var q,F,V,X,H,K=0,J=[],Q=new u0(z);if(x==null?x=e0:g(x,0,S),X=r(x/d),c0)if(crypto.getRandomValues){for(q=crypto.getRandomValues(new Uint32Array(X*=2));K>>11),H>=9e15?(F=crypto.getRandomValues(new Uint32Array(2)),q[K]=F[0],q[K+1]=F[1]):(J.push(H%1e14),K+=2);K=X/2}else if(crypto.randomBytes){for(q=crypto.randomBytes(X*=7);K=9e15?crypto.randomBytes(7).copy(q,K):(J.push(H%1e14),K+=7);K=X/7}else throw c0=!1,Error(s+"crypto unavailable");if(!c0)for(;K=10;H/=10,K++);KF-1&&(H[X+1]==null&&(H[X+1]=0),H[X+1]+=H[X]/F|0,H[X]%=F)}return H.reverse()}return c(C,"toBaseOut"),function(x,q,F,V,X){var H,K,J,Q,i0,O0,B0,K0,le=x.indexOf("."),Te=e0,k0=Z;for(le>=0&&(Q=ve,ve=0,x=x.replace(".",""),K0=new u0(q),O0=K0.pow(x.length-le),ve=Q,K0.c=C(W(E(O0.c),O0.e,"0"),10,F,y),K0.e=K0.c.length),B0=C(x,q,F,X?(H=R0,y):(H=y,R0)),J=Q=B0.length;B0[--Q]==0;B0.pop());if(!B0[0])return H.charAt(0);if(le<0?--J:(O0.c=B0,O0.e=J,O0.s=V,O0=N(O0,K0,Te,k0,F),B0=O0.c,i0=O0.r,J=O0.e),K=J+Te+1,le=B0[K],Q=F/2,i0=i0||K<0||B0[K+1]!=null,i0=k0<4?(le!=null||i0)&&(k0==0||k0==(O0.s<0?3:2)):le>Q||le==Q&&(k0==4||i0||k0==6&&B0[K-1]&1||k0==(O0.s<0?8:7)),K<1||!B0[0])x=i0?W(H.charAt(1),-Te,H.charAt(0)):H.charAt(0);else{if(B0.length=K,i0)for(--F;++B0[--K]>F;)B0[K]=0,K||(++J,B0=[1].concat(B0));for(Q=B0.length;!B0[--Q];);for(le=0,x="";le<=Q;x+=H.charAt(B0[le++]));x=W(x,J,H.charAt(0))}return x}}(),N=function(){function y(q,F,V){var X,H,K,J,Q=0,i0=q.length,O0=F%f,B0=F/f|0;for(q=q.slice();i0--;)K=q[i0]%f,J=q[i0]/f|0,X=B0*K+J*O0,H=O0*K+X%f*f+Q,Q=(H/V|0)+(X/f|0)+B0*J,q[i0]=H%V;return Q&&(q=[Q].concat(q)),q}c(y,"multiply");function C(q,F,V,X){var H,K;if(V!=X)K=V>X?1:-1;else for(H=K=0;HF[H]?1:-1;break}return K}c(C,"compare");function x(q,F,V,X){for(var H=0;V--;)q[V]-=H,H=q[V]1;q.splice(0,1));}return c(x,"subtract"),function(q,F,V,X,H){var K,J,Q,i0,O0,B0,K0,le,Te,k0,J0,We,qo,A3,R3,it,Zs,Tu=q.s==F.s?1:-1,ze=q.c,ce=F.c;if(!ze||!ze[0]||!ce||!ce[0])return new u0(!q.s||!F.s||(ze?ce&&ze[0]==ce[0]:!ce)?NaN:ze&&ze[0]==0||!ce?Tu*0:Tu/0);for(le=new u0(Tu),Te=le.c=[],J=q.e-F.e,Tu=V+J+1,H||(H=l,J=O(q.e/d)-O(F.e/d),Tu=Tu/d|0),Q=0;ce[Q]==(ze[Q]||0);Q++);if(ce[Q]>(ze[Q]||0)&&J--,Tu<0)Te.push(1),i0=!0;else{for(A3=ze.length,it=ce.length,Q=0,Tu+=2,O0=a(H/(ce[0]+1)),O0>1&&(ce=y(ce,O0,H),ze=y(ze,O0,H),it=ce.length,A3=ze.length),qo=it,k0=ze.slice(0,it),J0=k0.length;J0=H/2&&R3++;do{if(O0=0,K=C(ce,k0,it,J0),K<0){if(We=k0[0],it!=J0&&(We=We*H+(k0[1]||0)),O0=a(We/R3),O0>1)for(O0>=H&&(O0=H-1),B0=y(ce,O0,H),K0=B0.length,J0=k0.length;C(B0,k0,K0,J0)==1;)O0--,x(B0,it=10;Tu/=10,Q++);Q0(le,V+(le.e=Q+J*d-1)+1,X,i0)}else le.e=J,le.r=+i0;return le}}();function se(y,C,x,q){var F,V,X,H,K;if(x==null?x=Z:g(x,0,8),!y.c)return y.toString();if(F=y.c[0],X=y.e,C==null)K=E(y.c),K=q==1||q==2&&(X<=l0||X>=n0)?I(K,X):W(K,X,"0");else if(y=Q0(new u0(y),C,x),V=y.e,K=E(y.c),H=K.length,q==1||q==2&&(C<=V||V<=l0)){for(;HH){if(--C>0)for(K+=".";C--;K+="0");}else if(C+=V-H,C>0)for(V+1==H&&(K+=".");C--;K+="0");return y.s<0&&F?"-"+K:K}c(se,"format");function re(y,C){for(var x,q,F=1,V=new u0(y[0]);F=10;F/=10,q++);return(x=q+x*d-1)>S0?y.c=y.e=null:x=10;H/=10,F++);if(V=C-F,V<0)V+=d,X=C,K=i0[J=0],Q=a(K/O0[F-X-1]%10);else if(J=r((V+1)/d),J>=i0.length)if(q){for(;i0.length<=J;i0.push(0));K=Q=0,F=1,V%=d,X=V-d+1}else break e;else{for(K=H=i0[J],F=1;H>=10;H/=10,F++);V%=d,X=V-d+F,Q=X<0?0:a(K/O0[F-X-1]%10)}if(q=q||C<0||i0[J+1]!=null||(X<0?K:K%O0[F-X-1]),q=x<4?(Q||q)&&(x==0||x==(y.s<0?3:2)):Q>5||Q==5&&(x==4||q||x==6&&(V>0?X>0?K/O0[F-X]:0:i0[J-1])%10&1||x==(y.s<0?8:7)),C<1||!i0[0])return i0.length=0,q?(C-=y.e+1,i0[0]=O0[(d-C%d)%d],y.e=-C||0):i0[0]=y.e=0,y;if(V==0?(i0.length=J,H=1,J--):(i0.length=J+1,H=O0[d-V],i0[J]=X>0?a(K/O0[F-X]%O0[X])*H:0),q)for(;;)if(J==0){for(V=1,X=i0[0];X>=10;X/=10,V++);for(X=i0[0]+=H,H=1;X>=10;X/=10,H++);V!=H&&(y.e++,i0[0]==l&&(i0[0]=1));break}else{if(i0[J]+=H,i0[J]!=l)break;i0[J--]=0,H=1}for(V=i0.length;i0[--V]===0;i0.pop());}y.e>S0?y.c=y.e=null:y.e=n0?I(C,x):W(C,x,"0"),y.s<0?"-"+C:C)}return c(ee,"valueOf"),U.absoluteValue=U.abs=function(){var y=new u0(this);return y.s<0&&(y.s=1),y},U.comparedTo=function(y,C){return A(this,new u0(y,C))},U.decimalPlaces=U.dp=function(y,C){var x,q,F,V=this;if(y!=null)return g(y,0,S),C==null?C=Z:g(C,0,8),Q0(new u0(V),y+V.e+1,C);if(!(x=V.c))return null;if(q=((F=x.length-1)-O(this.e/d))*d,F=x[F])for(;F%10==0;F/=10,q--);return q<0&&(q=0),q},U.dividedBy=U.div=function(y,C){return N(this,new u0(y,C),e0,Z)},U.dividedToIntegerBy=U.idiv=function(y,C){return N(this,new u0(y,C),0,1)},U.exponentiatedBy=U.pow=function(y,C){var x,q,F,V,X,H,K,J,Q,i0=this;if(y=new u0(y),y.c&&!y.isInteger())throw Error(s+"Exponent not an integer: "+ee(y));if(C!=null&&(C=new u0(C)),H=y.e>14,!i0.c||!i0.c[0]||i0.c[0]==1&&!i0.e&&i0.c.length==1||!y.c||!y.c[0])return Q=new u0(Math.pow(+ee(i0),H?y.s*(2-D(y)):+ee(y))),C?Q.mod(C):Q;if(K=y.s<0,C){if(C.c?!C.c[0]:!C.s)return new u0(NaN);q=!K&&i0.isInteger()&&C.isInteger(),q&&(i0=i0.mod(C))}else{if(y.e>9&&(i0.e>0||i0.e<-1||(i0.e==0?i0.c[0]>1||H&&i0.c[1]>=24e7:i0.c[0]<8e13||H&&i0.c[0]<=9999975e7)))return V=i0.s<0&&D(y)?-0:0,i0.e>-1&&(V=1/V),new u0(K?1/V:V);ve&&(V=r(ve/d+2))}for(H?(x=new u0(.5),K&&(y.s=1),J=D(y)):(F=Math.abs(+ee(y)),J=F%2),Q=new u0(z);;){if(J){if(Q=Q.times(i0),!Q.c)break;V?Q.c.length>V&&(Q.c.length=V):q&&(Q=Q.mod(C))}if(F){if(F=a(F/2),F===0)break;J=F%2}else if(y=y.times(x),Q0(y,y.e+1,1),y.e>14)J=D(y);else{if(F=+ee(y),F===0)break;J=F%2}i0=i0.times(i0),V?i0.c&&i0.c.length>V&&(i0.c.length=V):q&&(i0=i0.mod(C))}return q?Q:(K&&(Q=z.div(Q)),C?Q.mod(C):V?Q0(Q,ve,Z,X):Q)},U.integerValue=function(y){var C=new u0(this);return y==null?y=Z:g(y,0,8),Q0(C,C.e+1,y)},U.isEqualTo=U.eq=function(y,C){return A(this,new u0(y,C))===0},U.isFinite=function(){return!!this.c},U.isGreaterThan=U.gt=function(y,C){return A(this,new u0(y,C))>0},U.isGreaterThanOrEqualTo=U.gte=function(y,C){return(C=A(this,new u0(y,C)))===1||C===0},U.isInteger=function(){return!!this.c&&O(this.e/d)>this.c.length-2},U.isLessThan=U.lt=function(y,C){return A(this,new u0(y,C))<0},U.isLessThanOrEqualTo=U.lte=function(y,C){return(C=A(this,new u0(y,C)))===-1||C===0},U.isNaN=function(){return!this.s},U.isNegative=function(){return this.s<0},U.isPositive=function(){return this.s>0},U.isZero=function(){return!!this.c&&this.c[0]==0},U.minus=function(y,C){var x,q,F,V,X=this,H=X.s;if(y=new u0(y,C),C=y.s,!H||!C)return new u0(NaN);if(H!=C)return y.s=-C,X.plus(y);var K=X.e/d,J=y.e/d,Q=X.c,i0=y.c;if(!K||!J){if(!Q||!i0)return Q?(y.s=-C,y):new u0(i0?X:NaN);if(!Q[0]||!i0[0])return i0[0]?(y.s=-C,y):new u0(Q[0]?X:Z==3?-0:0)}if(K=O(K),J=O(J),Q=Q.slice(),H=K-J){for((V=H<0)?(H=-H,F=Q):(J=K,F=i0),F.reverse(),C=H;C--;F.push(0));F.reverse()}else for(q=(V=(H=Q.length)<(C=i0.length))?H:C,H=C=0;C0)for(;C--;Q[x++]=0);for(C=l-1;q>H;){if(Q[--q]=0;){for(x=0,O0=We[F]%Te,B0=We[F]/Te|0,X=K,V=F+X;V>F;)J=J0[--X]%Te,Q=J0[X]/Te|0,H=B0*J+Q*O0,J=O0*J+H%Te*Te+K0[V]+x,x=(J/le|0)+(H/Te|0)+B0*Q,K0[V--]=J%le;K0[V]=x}return x?++q:K0.splice(0,1),Be(y,K0,q)},U.negated=function(){var y=new u0(this);return y.s=-y.s||null,y},U.plus=function(y,C){var x,q=this,F=q.s;if(y=new u0(y,C),C=y.s,!F||!C)return new u0(NaN);if(F!=C)return y.s=-C,q.minus(y);var V=q.e/d,X=y.e/d,H=q.c,K=y.c;if(!V||!X){if(!H||!K)return new u0(F/0);if(!H[0]||!K[0])return K[0]?y:new u0(H[0]?q:F*0)}if(V=O(V),X=O(X),H=H.slice(),F=V-X){for(F>0?(X=V,x=K):(F=-F,x=H),x.reverse();F--;x.push(0));x.reverse()}for(F=H.length,C=K.length,F-C<0&&(x=K,K=H,H=x,C=F),F=0;C;)F=(H[--C]=H[C]+K[C]+F)/l|0,H[C]=l===H[C]?0:H[C]%l;return F&&(H=[F].concat(H),++X),Be(y,H,X)},U.precision=U.sd=function(y,C){var x,q,F,V=this;if(y!=null&&y!==!!y)return g(y,1,S),C==null?C=Z:g(C,0,8),Q0(new u0(V),y,C);if(!(x=V.c))return null;if(F=x.length-1,q=F*d+1,F=x[F]){for(;F%10==0;F/=10,q--);for(F=x[0];F>=10;F/=10,q++);}return y&&V.e+1>q&&(q=V.e+1),q},U.shiftedBy=function(y){return g(y,-p,p),this.times("1e"+y)},U.squareRoot=U.sqrt=function(){var y,C,x,q,F,V=this,X=V.c,H=V.s,K=V.e,J=e0+4,Q=new u0("0.5");if(H!==1||!X||!X[0])return new u0(!H||H<0&&(!X||X[0])?NaN:X?V:1/0);if(H=Math.sqrt(+ee(V)),H==0||H==1/0?(C=E(X),(C.length+K)%2==0&&(C+="0"),H=Math.sqrt(+C),K=O((K+1)/2)-(K<0||K%2),H==1/0?C="5e"+K:(C=H.toExponential(),C=C.slice(0,C.indexOf("e")+1)+K),x=new u0(C)):x=new u0(H+""),x.c[0]){for(K=x.e,H=K+J,H<3&&(H=0);;)if(F=x,x=Q.times(F.plus(N(V,F,J,1))),E(F.c).slice(0,H)===(C=E(x.c)).slice(0,H))if(x.e0&&K0>0){for(V=K0%H||H,Q=B0.substr(0,V);V0&&(Q+=J+B0.slice(V)),O0&&(Q="-"+Q)}q=i0?Q+(x.decimalSeparator||"")+((K=+x.fractionGroupSize)?i0.replace(new RegExp("\\d{"+K+"}\\B","g"),"$&"+(x.fractionGroupSeparator||"")):i0):Q}return(x.prefix||"")+q+(x.suffix||"")},U.toFraction=function(y){var C,x,q,F,V,X,H,K,J,Q,i0,O0,B0=this,K0=B0.c;if(y!=null&&(H=new u0(y),!H.isInteger()&&(H.c||H.s!==1)||H.lt(z)))throw Error(s+"Argument "+(H.isInteger()?"out of range: ":"not an integer: ")+ee(H));if(!K0)return new u0(B0);for(C=new u0(z),J=x=new u0(z),q=K=new u0(z),O0=E(K0),V=C.e=O0.length-B0.e-1,C.c[0]=h[(X=V%d)<0?d+X:X],y=!y||H.comparedTo(C)>0?V>0?C:J:H,X=S0,S0=1/0,H=new u0(O0),K.c[0]=0;Q=N(H,C,0,1),F=x.plus(Q.times(q)),F.comparedTo(y)!=1;)x=q,q=F,J=K.plus(Q.times(F=J)),K=F,C=H.minus(Q.times(F=C)),H=F;return F=N(y.minus(x),q,0,1),K=K.plus(F.times(J)),x=x.plus(F.times(q)),K.s=J.s=B0.s,V=V*2,i0=N(J,q,V,Z).minus(B0).abs().comparedTo(N(K,x,V,Z).minus(B0).abs())<1?[J,q]:[K,x],S0=X,i0},U.toNumber=function(){return+ee(this)},U.toPrecision=function(y,C){return y!=null&&g(y,1,S),se(this,y,C,2)},U.toString=function(y){var C,x=this,q=x.s,F=x.e;return F===null?q?(C="Infinity",q<0&&(C="-"+C)):C="NaN":(y==null?C=F<=l0||F>=n0?I(E(x.c),F):W(E(x.c),F,"0"):y===10&&j0?(x=Q0(new u0(x),e0+F+1,Z),C=W(E(x.c),x.e,"0")):(g(y,2,R0.length,"Base"),C=w(W(E(x.c),F,"0"),10,y,q,!0)),q<0&&x.c[0]&&(C="-"+C)),C},U.valueOf=U.toJSON=function(){return ee(this)},U._isBigNumber=!0,Y!=null&&u0.set(Y),u0}c(_,"clone");function O(Y){var N=Y|0;return Y>0||Y===N?N:N-1}c(O,"bitFloor");function E(Y){for(var N,w,G=1,U=Y.length,z=Y[0]+"";Gn0^w?1:-1;for(Z=(l0=U.length)<(n0=z.length)?l0:n0,e0=0;e0z[e0]^w?1:-1;return l0==n0?0:l0>n0^w?1:-1}c(A,"compare");function g(Y,N,w,G){if(Yw||Y!==a(Y))throw Error(s+(G||"Argument")+(typeof Y=="number"?Yw?" out of range: ":" not an integer: ":" not a primitive number: ")+String(Y))}c(g,"intCheck");function D(Y){var N=Y.c.length-1;return O(Y.e/d)==N&&Y.c[N]%2!=0}c(D,"isOdd");function I(Y,N){return(Y.length>1?Y.charAt(0)+"."+Y.slice(1):Y)+(N<0?"e":"e+")+N}c(I,"toExponential");function W(Y,N,w){var G,U;if(N<0){for(U=w+".";++N;U+=w);Y=U+Y}else if(G=Y.length,++N>G){for(U=w,N-=G;--N;U+=w);Y+=U}else N{var wE=hp(),UE=PE.exports;(function(){"use strict";function i(p){return p<10?"0"+p:p}c(i,"f");var e=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,u=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,r,a,s={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},n;function l(p){return u.lastIndex=0,u.test(p)?'"'+p.replace(u,function(h){var f=s[h];return typeof f=="string"?f:"\\u"+("0000"+h.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+p+'"'}c(l,"quote");function d(p,h){var f,S,_,O,E=r,A,g=h[p],D=g!=null&&(g instanceof wE||wE.isBigNumber(g));switch(g&&typeof g=="object"&&typeof g.toJSON=="function"&&(g=g.toJSON(p)),typeof n=="function"&&(g=n.call(h,p,g)),typeof g){case"string":return D?g:l(g);case"number":return isFinite(g)?String(g):"null";case"boolean":case"null":case"bigint":return String(g);case"object":if(!g)return"null";if(r+=a,A=[],Object.prototype.toString.apply(g)==="[object Array]"){for(O=g.length,f=0;f{var pl=null,SC=/(?:_|\\u005[Ff])(?:_|\\u005[Ff])(?:p|\\u0070)(?:r|\\u0072)(?:o|\\u006[Ff])(?:t|\\u0074)(?:o|\\u006[Ff])(?:_|\\u005[Ff])(?:_|\\u005[Ff])/,OC=/(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)/,LC=c(function(i){"use strict";var e={strict:!1,storeAsString:!1,alwaysParseAsBig:!1,useNativeBigInt:!1,protoAction:"error",constructorAction:"error"};if(i!=null){if(i.strict===!0&&(e.strict=!0),i.storeAsString===!0&&(e.storeAsString=!0),e.alwaysParseAsBig=i.alwaysParseAsBig===!0?i.alwaysParseAsBig:!1,e.useNativeBigInt=i.useNativeBigInt===!0?i.useNativeBigInt:!1,typeof i.constructorAction<"u")if(i.constructorAction==="error"||i.constructorAction==="ignore"||i.constructorAction==="preserve")e.constructorAction=i.constructorAction;else throw new Error(`Incorrect value for constructorAction option, must be "error", "ignore" or undefined but passed ${i.constructorAction}`);if(typeof i.protoAction<"u")if(i.protoAction==="error"||i.protoAction==="ignore"||i.protoAction==="preserve")e.protoAction=i.protoAction;else throw new Error(`Incorrect value for protoAction option, must be "error", "ignore" or undefined but passed ${i.protoAction}`)}var u,r,a={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:` +`,r:"\r",t:" "},s,n=c(function(E){throw{name:"SyntaxError",message:E,at:u,text:s}},"error"),l=c(function(E){return E&&E!==r&&n("Expected '"+E+"' instead of '"+r+"'"),r=s.charAt(u),u+=1,r},"next"),d=c(function(){var E,A="";for(r==="-"&&(A="-",l("-"));r>="0"&&r<="9";)A+=r,l();if(r===".")for(A+=".";l()&&r>="0"&&r<="9";)A+=r;if(r==="e"||r==="E")for(A+=r,l(),(r==="-"||r==="+")&&(A+=r,l());r>="0"&&r<="9";)A+=r,l();if(E=+A,!isFinite(E))n("Bad number");else return pl==null&&(pl=hp()),A.length>15?e.storeAsString?A:e.useNativeBigInt?BigInt(A):new pl(A):e.alwaysParseAsBig?e.useNativeBigInt?BigInt(E):new pl(E):E},"number"),p=c(function(){var E,A,g="",D;if(r==='"')for(var I=u;l();){if(r==='"')return u-1>I&&(g+=s.substring(I,u-1)),l(),g;if(r==="\\"){if(u-1>I&&(g+=s.substring(I,u-1)),l(),r==="u"){for(D=0,A=0;A<4&&(E=parseInt(l(),16),!!isFinite(E));A+=1)D=D*16+E;g+=String.fromCharCode(D)}else if(typeof a[r]=="string")g+=a[r];else break;I=u}}n("Bad string")},"string"),h=c(function(){for(;r&&r<=" ";)l()},"white"),f=c(function(){switch(r){case"t":return l("t"),l("r"),l("u"),l("e"),!0;case"f":return l("f"),l("a"),l("l"),l("s"),l("e"),!1;case"n":return l("n"),l("u"),l("l"),l("l"),null}n("Unexpected '"+r+"'")},"word"),S,_=c(function(){var E=[];if(r==="["){if(l("["),h(),r==="]")return l("]"),E;for(;r;){if(E.push(S()),h(),r==="]")return l("]"),E;l(","),h()}}n("Bad array")},"array"),O=c(function(){var E,A=Object.create(null);if(r==="{"){if(l("{"),h(),r==="}")return l("}"),A;for(;r;){if(E=p(),h(),l(":"),e.strict===!0&&Object.hasOwnProperty.call(A,E)&&n('Duplicate key "'+E+'"'),SC.test(E)===!0?e.protoAction==="error"?n("Object contains forbidden prototype property"):e.protoAction==="ignore"?S():A[E]=S():OC.test(E)===!0?e.constructorAction==="error"?n("Object contains forbidden constructor property"):e.constructorAction==="ignore"?S():A[E]=S():A[E]=S(),h(),r==="}")return l("}"),A;l(","),h()}}n("Bad object")},"object");return S=c(function(){switch(h(),r){case"{":return O();case"[":return _();case'"':return p();case"-":return d();default:return r>="0"&&r<="9"?d():f()}},"value"),function(E,A){var g;return s=E+"",u=0,r=" ",g=S(),h(),r&&n("Syntax error"),typeof A=="function"?c(function D(I,W){var Y,N,w=I[W];return w&&typeof w=="object"&&Object.keys(w).forEach(function(G){N=D(w,G),N!==void 0?w[G]=N:delete w[G]}),A.call(I,W,w)},"walk")({"":g},""):g}},"json_parse");FE.exports=LC});var qE=b((lK,hl)=>{var VE=kE().stringify,GE=HE();hl.exports=function(i){return{parse:GE(i),stringify:VE}};hl.exports.parse=GE();hl.exports.stringify=VE});var Sl=b(F0=>{"use strict";Object.defineProperty(F0,"__esModule",{value:!0});F0.requestTimeout=F0.resetIsAvailableCache=F0.isAvailable=F0.project=F0.instance=F0.HEADERS=F0.HEADER_VALUE=F0.HEADER_NAME=F0.SECONDARY_HOST_ADDRESS=F0.HOST_ADDRESS=F0.BASE_PATH=void 0;var fp=cl(),EC=qE();F0.BASE_PATH="/computeMetadata/v1";F0.HOST_ADDRESS="http://169.254.169.254";F0.SECONDARY_HOST_ADDRESS="http://metadata.google.internal.";F0.HEADER_NAME="Metadata-Flavor";F0.HEADER_VALUE="Google";F0.HEADERS=Object.freeze({[F0.HEADER_NAME]:F0.HEADER_VALUE});function Sp(i){return i||(i=process.env.GCE_METADATA_IP||process.env.GCE_METADATA_HOST||F0.HOST_ADDRESS),/^https?:\/\//.test(i)||(i=`http://${i}`),new URL(F0.BASE_PATH,i).href}c(Sp,"getBaseUrl");function BC(i){Object.keys(i).forEach(e=>{switch(e){case"params":case"property":case"headers":break;case"qs":throw new Error("'qs' is not a valid configuration option. Please use 'params' instead.");default:throw new Error(`'${e}' is not a valid configuration option.`)}})}c(BC,"validate");async function Op(i,e,u=3,r=!1){e=e||{},typeof e=="string"&&(e={property:e});let a="";typeof e=="object"&&e.property&&(a="/"+e.property),BC(e);try{let n=await(r?MC:fp.request)({url:`${Sp()}/${i}${a}`,headers:Object.assign({},F0.HEADERS,e.headers),retryConfig:{noResponseRetries:u},params:e.params,responseType:"text",timeout:KE()});if(n.headers[F0.HEADER_NAME.toLowerCase()]!==F0.HEADER_VALUE)throw new Error(`Invalid response from metadata service: incorrect ${F0.HEADER_NAME} header.`);if(!n.data)throw new Error("Invalid response from the metadata service");if(typeof n.data=="string")try{return EC.parse(n.data)}catch{}return n.data}catch(s){throw s.response&&s.response.status!==200&&(s.message=`Unsuccessful response status code. ${s.message}`),s}}c(Op,"metadataAccessor");async function MC(i){let e={...i,url:i.url.replace(Sp(),Sp(F0.SECONDARY_HOST_ADDRESS))},u=!1,r=fp.request(i).then(s=>(u=!0,s)).catch(s=>{if(u)return a;throw u=!0,s}),a=fp.request(e).then(s=>(u=!0,s)).catch(s=>{if(u)return r;throw u=!0,s});return Promise.race([r,a])}c(MC,"fastFailMetadataRequest");function mC(i){return Op("instance",i)}c(mC,"instance");F0.instance=mC;function _C(i){return Op("project",i)}c(_C,"project");F0.project=_C;function TC(){return process.env.DETECT_GCP_RETRIES?Number(process.env.DETECT_GCP_RETRIES):0}c(TC,"detectGCPAvailableRetries");var fl;async function YC(){try{return fl===void 0&&(fl=Op("instance",void 0,TC(),!(process.env.GCE_METADATA_IP||process.env.GCE_METADATA_HOST))),await fl,!0}catch(i){if(process.env.DEBUG_AUTH&&console.info(i),i.type==="request-timeout"||i.response&&i.response.status===404)return!1;if(!(i.response&&i.response.status===404)&&(!i.code||!["EHOSTDOWN","EHOSTUNREACH","ENETUNREACH","ENOENT","ENOTFOUND","ECONNREFUSED"].includes(i.code))){let e="UNKNOWN";i.code&&(e=i.code),process.emitWarning(`received unexpected error = ${i.message} code = ${e}`,"MetadataLookupWarning")}return!1}}c(YC,"isAvailable");F0.isAvailable=YC;function AC(){fl=void 0}c(AC,"resetIsAvailableCache");F0.resetIsAvailableCache=AC;function KE(){return process.env.K_SERVICE||process.env.FUNCTION_NAME?0:3e3}c(KE,"requestTimeout");F0.requestTimeout=KE});var XE=b(Ol=>{"use strict";Ol.byteLength=gC;Ol.toByteArray=NC;Ol.fromByteArray=bC;var lt=[],Cu=[],RC=typeof Uint8Array<"u"?Uint8Array:Array,Lp="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for($r=0,WE=Lp.length;$r0)throw new Error("Invalid string. Length must be a multiple of 4");var u=i.indexOf("=");u===-1&&(u=e);var r=u===e?0:4-u%4;return[u,r]}c(jE,"getLens");function gC(i){var e=jE(i),u=e[0],r=e[1];return(u+r)*3/4-r}c(gC,"byteLength");function yC(i,e,u){return(e+u)*3/4-u}c(yC,"_byteLength");function NC(i){var e,u=jE(i),r=u[0],a=u[1],s=new RC(yC(i,r,a)),n=0,l=a>0?r-4:r,d;for(d=0;d>16&255,s[n++]=e>>8&255,s[n++]=e&255;return a===2&&(e=Cu[i.charCodeAt(d)]<<2|Cu[i.charCodeAt(d+1)]>>4,s[n++]=e&255),a===1&&(e=Cu[i.charCodeAt(d)]<<10|Cu[i.charCodeAt(d+1)]<<4|Cu[i.charCodeAt(d+2)]>>2,s[n++]=e>>8&255,s[n++]=e&255),s}c(NC,"toByteArray");function CC(i){return lt[i>>18&63]+lt[i>>12&63]+lt[i>>6&63]+lt[i&63]}c(CC,"tripletToBase64");function IC(i,e,u){for(var r,a=[],s=e;sl?l:n+s));return r===1?(e=i[u-1],a.push(lt[e>>2]+lt[e<<4&63]+"==")):r===2&&(e=(i[u-2]<<8)+i[u-1],a.push(lt[e>>10]+lt[e>>4&63]+lt[e<<2&63]+"=")),a.join("")}c(bC,"fromByteArray")});var JE=b(QE=>{(function(i){"use strict";function e(g,D){var I;return g instanceof Buffer?I=g:I=Buffer.from(g.buffer,g.byteOffset,g.byteLength),I.toString(D)}c(e,"B");var u=c(function(g){return Buffer.from(g)},"w");function r(g){for(var D=0,I=Math.min(256*256,g.length+1),W=new Uint16Array(I),Y=[],N=0;;){var w=D=I-1){var G=W.subarray(0,N),U=G;if(Y.push(String.fromCharCode.apply(null,U)),!w)return Y.join("");g=g.subarray(D),D=0,N=0}var z=g[D++];if(!(z&128))W[N++]=z;else if((z&224)===192){var e0=g[D++]&63;W[N++]=(z&31)<<6|e0}else if((z&240)===224){var e0=g[D++]&63,Z=g[D++]&63;W[N++]=(z&31)<<12|e0<<6|Z}else if((z&248)===240){var e0=g[D++]&63,Z=g[D++]&63,l0=g[D++]&63,n0=(z&7)<<18|e0<<12|Z<<6|l0;n0>65535&&(n0-=65536,W[N++]=n0>>>10&1023|55296,n0=56320|n0&1023),W[N++]=n0}}}c(r,"h");function a(g){for(var D=0,I=g.length,W=0,Y=Math.max(32,I+(I>>>1)+7),N=new Uint8Array(Y>>>3<<3);D=55296&&w<=56319){if(D=55296&&w<=56319)continue}if(W+4>N.length){Y+=8,Y*=1+D/g.length*2,Y=Y>>>3<<3;var U=new Uint8Array(Y);U.set(N),N=U}if(w&4294967168)if(!(w&4294965248))N[W++]=w>>>6&31|192;else if(!(w&4294901760))N[W++]=w>>>12&15|224,N[W++]=w>>>6&63|128;else if(!(w&4292870144))N[W++]=w>>>18&7|240,N[W++]=w>>>12&63|128,N[W++]=w>>>6&63|128;else continue;else{N[W++]=w;continue}N[W++]=w&63|128}return N.slice?N.slice(0,W):N.subarray(0,W)}c(a,"F");var s="Failed to ",n=c(function(g,D,I){if(g)throw new Error("".concat(s).concat(D,": the '").concat(I,"' option is unsupported."))},"p"),l=typeof Buffer=="function"&&Buffer.from,d=l?u:a;function p(){this.encoding="utf-8"}c(p,"v"),p.prototype.encode=function(g,D){return n(D&&D.stream,"encode","stream"),d(g)};function h(g){var D;try{var I=new Blob([g],{type:"text/plain;charset=UTF-8"});D=URL.createObjectURL(I);var W=new XMLHttpRequest;return W.open("GET",D,!1),W.send(),W.responseText}finally{D&&URL.revokeObjectURL(D)}}c(h,"U");var f=!l&&typeof Blob=="function"&&typeof URL=="function"&&typeof URL.createObjectURL=="function",S=["utf-8","utf8","unicode-1-1-utf-8"],_=r;l?_=e:f&&(_=c(function(g){try{return h(g)}catch{return r(g)}},"T"));var O="construct 'TextDecoder'",E="".concat(s," ").concat(O,": the ");function A(g,D){n(D&&D.fatal,O,"fatal"),g=g||"utf-8";var I;if(l?I=Buffer.isEncoding(g):I=S.indexOf(g.toLowerCase())!==-1,!I)throw new RangeError("".concat(E," encoding label provided ('").concat(g,"') is invalid."));this.encoding=g,this.fatal=!1,this.ignoreBOM=!1}c(A,"g"),A.prototype.decode=function(g,D){n(D&&D.stream,"decode","stream");var I;return g instanceof Uint8Array?I=g:g.buffer instanceof ArrayBuffer?I=new Uint8Array(g.buffer):I=new Uint8Array(g),_(I,this.encoding)},i.TextEncoder=i.TextEncoder||p,i.TextDecoder=i.TextDecoder||A})(typeof window<"u"?window:typeof global<"u"?global:QE)});var zE=b(Ll=>{"use strict";Object.defineProperty(Ll,"__esModule",{value:!0});Ll.BrowserCrypto=void 0;var la=XE();typeof process>"u"&&typeof TextEncoder>"u"&&JE();var xC=ca(),fn=class fn{constructor(){if(typeof window>"u"||window.crypto===void 0||window.crypto.subtle===void 0)throw new Error("SubtleCrypto not found. Make sure it's an https:// website.")}async sha256DigestBase64(e){let u=new TextEncoder().encode(e),r=await window.crypto.subtle.digest("SHA-256",u);return la.fromByteArray(new Uint8Array(r))}randomBytesBase64(e){let u=new Uint8Array(e);return window.crypto.getRandomValues(u),la.fromByteArray(u)}static padBase64(e){for(;e.length%4!==0;)e+="=";return e}async verify(e,u,r){let a={name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},s=new TextEncoder().encode(u),n=la.toByteArray(fn.padBase64(r)),l=await window.crypto.subtle.importKey("jwk",e,a,!0,["verify"]);return await window.crypto.subtle.verify(a,l,n,s)}async sign(e,u){let r={name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},a=new TextEncoder().encode(u),s=await window.crypto.subtle.importKey("jwk",e,r,!0,["sign"]),n=await window.crypto.subtle.sign(r,s,a);return la.fromByteArray(new Uint8Array(n))}decodeBase64StringUtf8(e){let u=la.toByteArray(fn.padBase64(e));return new TextDecoder().decode(u)}encodeBase64StringUtf8(e){let u=new TextEncoder().encode(e);return la.fromByteArray(u)}async sha256DigestHex(e){let u=new TextEncoder().encode(e),r=await window.crypto.subtle.digest("SHA-256",u);return xC.fromArrayBufferToHex(r)}async signWithHmacSha256(e,u){let r=typeof e=="string"?e:String.fromCharCode(...new Uint16Array(e)),a=new TextEncoder,s=await window.crypto.subtle.importKey("raw",a.encode(r),{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign"]);return window.crypto.subtle.sign("HMAC",s,a.encode(u))}};c(fn,"BrowserCrypto");var Ep=fn;Ll.BrowserCrypto=Ep});var $E=b(El=>{"use strict";Object.defineProperty(El,"__esModule",{value:!0});El.NodeCrypto=void 0;var da=require("crypto"),Mp=class Mp{async sha256DigestBase64(e){return da.createHash("sha256").update(e).digest("base64")}randomBytesBase64(e){return da.randomBytes(e).toString("base64")}async verify(e,u,r){let a=da.createVerify("sha256");return a.update(u),a.end(),a.verify(e,r,"base64")}async sign(e,u){let r=da.createSign("RSA-SHA256");return r.update(u),r.end(),r.sign(e,"base64")}decodeBase64StringUtf8(e){return Buffer.from(e,"base64").toString("utf-8")}encodeBase64StringUtf8(e){return Buffer.from(e,"utf-8").toString("base64")}async sha256DigestHex(e){return da.createHash("sha256").update(e).digest("hex")}async signWithHmacSha256(e,u){let r=typeof e=="string"?e:DC(e);return vC(da.createHmac("sha256",r).update(u).digest())}};c(Mp,"NodeCrypto");var Bp=Mp;El.NodeCrypto=Bp;function vC(i){return i.buffer.slice(i.byteOffset,i.byteOffset+i.byteLength)}c(vC,"toArrayBuffer");function DC(i){return Buffer.from(i)}c(DC,"toBuffer")});var ca=b(lr=>{"use strict";Object.defineProperty(lr,"__esModule",{value:!0});lr.fromArrayBufferToHex=lr.hasBrowserCrypto=lr.createCrypto=void 0;var wC=zE(),UC=$E();function PC(){return ZE()?new wC.BrowserCrypto:new UC.NodeCrypto}c(PC,"createCrypto");lr.createCrypto=PC;function ZE(){return typeof window<"u"&&typeof window.crypto<"u"&&typeof window.crypto.subtle<"u"}c(ZE,"hasBrowserCrypto");lr.hasBrowserCrypto=ZE;function kC(i){return Array.from(new Uint8Array(i)).map(u=>u.toString(16).padStart(2,"0")).join("")}c(kC,"fromArrayBufferToHex");lr.fromArrayBufferToHex=kC});var eB=b(Bl=>{"use strict";Object.defineProperty(Bl,"__esModule",{value:!0});Bl.validate=void 0;function FC(i){let e=[{invalid:"uri",expected:"url"},{invalid:"json",expected:"data"},{invalid:"qs",expected:"params"}];for(let u of e)if(i[u.invalid]){let r=`'${u.invalid}' is not a valid configuration option. Please use '${u.expected}' instead. This library is using Axios for requests. Please see https://github.com/axios/axios to learn more about the valid request options.`;throw new Error(r)}}c(FC,"validate");Bl.validate=FC});var uB=b((YK,HC)=>{HC.exports={name:"google-auth-library",version:"7.14.1",author:"Google Inc.",description:"Google APIs Authentication Client Library for Node.js",engines:{node:">=10"},main:"./build/src/index.js",types:"./build/src/index.d.ts",repository:"googleapis/google-auth-library-nodejs.git",keywords:["google","api","google apis","client","client library"],dependencies:{arrify:"^2.0.0","base64-js":"^1.3.0","ecdsa-sig-formatter":"^1.0.11","fast-text-encoding":"^1.0.0",gaxios:"^4.0.0","gcp-metadata":"^4.2.0",gtoken:"^5.0.4",jws:"^4.0.0","lru-cache":"^6.0.0"},devDependencies:{"@compodoc/compodoc":"^1.1.7","@types/base64-js":"^1.2.5","@types/chai":"^4.1.7","@types/jws":"^3.1.0","@types/lru-cache":"^5.0.0","@types/mocha":"^8.0.0","@types/mv":"^2.1.0","@types/ncp":"^2.0.1","@types/node":"^16.0.0","@types/sinon":"^10.0.0","@types/tmp":"^0.2.0","assert-rejects":"^1.0.0",c8:"^7.0.0",chai:"^4.2.0",codecov:"^3.0.2",execa:"^5.0.0",gts:"^2.0.0","is-docker":"^2.0.0",karma:"^6.0.0","karma-chrome-launcher":"^3.0.0","karma-coverage":"^2.0.0","karma-firefox-launcher":"^2.0.0","karma-mocha":"^2.0.0","karma-remap-coverage":"^0.1.5","karma-sourcemap-loader":"^0.3.7","karma-webpack":"^5.0.0",keypair:"^1.0.4",linkinator:"^2.0.0",mocha:"^8.0.0",mv:"^2.1.1",ncp:"^2.0.0",nock:"^13.0.0","null-loader":"^4.0.0",puppeteer:"^13.0.0",sinon:"^13.0.0",tmp:"^0.2.0","ts-loader":"^8.0.0",typescript:"^3.8.3",webpack:"^5.21.2","webpack-cli":"^4.0.0"},files:["build/src","!build/src/**/*.map"],scripts:{test:"c8 mocha build/test",clean:"gts clean",prepare:"npm run compile",lint:"gts check",compile:"tsc -p .",fix:"gts fix",pretest:"npm run compile",docs:"compodoc src/","samples-setup":"cd samples/ && npm link ../ && npm run setup && cd ../","samples-test":"cd samples/ && npm link ../ && npm test && cd ../","system-test":"mocha build/system-test --timeout 60000","presystem-test":"npm run compile",webpack:"webpack","browser-test":"karma start","docs-test":"linkinator docs","predocs-test":"npm run docs",prelint:"cd samples; npm link ../; npm install",precompile:"gts clean"},license:"Apache-2.0"}});var On=b(ml=>{"use strict";Object.defineProperty(ml,"__esModule",{value:!0});ml.DefaultTransporter=void 0;var tB=cl(),VC=eB(),rB=uB(),iB="google-api-nodejs-client",Sn=class Sn{configure(e={}){if(e.headers=e.headers||{},typeof window>"u"){let u=e.headers["User-Agent"];u?u.includes(`${iB}/`)||(e.headers["User-Agent"]=`${u} ${Sn.USER_AGENT}`):e.headers["User-Agent"]=Sn.USER_AGENT;let r=`auth/${rB.version}`;if(e.headers["x-goog-api-client"]&&!e.headers["x-goog-api-client"].includes(r))e.headers["x-goog-api-client"]=`${e.headers["x-goog-api-client"]} ${r}`;else if(!e.headers["x-goog-api-client"]){let a=process.version.replace(/^v/,"");e.headers["x-goog-api-client"]=`gl-node/${a} ${r}`}}return e}request(e,u){e=this.configure(e);try{VC.validate(e)}catch(r){if(u)return u(r);throw r}if(u)tB.request(e).then(r=>{u(null,r)},r=>{u(this.processError(r))});else return tB.request(e).catch(r=>{throw this.processError(r)})}processError(e){let u=e.response,r=e,a=u?u.data:null;return u&&a&&a.error&&u.status!==200?typeof a.error=="string"?(r.message=a.error,r.code=u.status.toString()):Array.isArray(a.error.errors)?(r.message=a.error.errors.map(s=>s.message).join(` +`),r.code=a.error.code,r.errors=a.error.errors):(r.message=a.error.message,r.code=a.error.code||u.status):u&&u.status>=400&&(r.message=a,r.code=u.status.toString()),r}};c(Sn,"DefaultTransporter");var Ml=Sn;ml.DefaultTransporter=Ml;Ml.USER_AGENT=`${iB}/${rB.version}`});var ei=b((mp,sB)=>{var _l=require("buffer"),ct=_l.Buffer;function aB(i,e){for(var u in i)e[u]=i[u]}c(aB,"copyProps");ct.from&&ct.alloc&&ct.allocUnsafe&&ct.allocUnsafeSlow?sB.exports=_l:(aB(_l,mp),mp.Buffer=Zr);function Zr(i,e,u){return ct(i,e,u)}c(Zr,"SafeBuffer");Zr.prototype=Object.create(ct.prototype);aB(ct,Zr);Zr.from=function(i,e,u){if(typeof i=="number")throw new TypeError("Argument must not be a number");return ct(i,e,u)};Zr.alloc=function(i,e,u){if(typeof i!="number")throw new TypeError("Argument must be a number");var r=ct(i);return e!==void 0?typeof u=="string"?r.fill(e,u):r.fill(e):r.fill(0),r};Zr.allocUnsafe=function(i){if(typeof i!="number")throw new TypeError("Argument must be a number");return ct(i)};Zr.allocUnsafeSlow=function(i){if(typeof i!="number")throw new TypeError("Argument must be a number");return _l.SlowBuffer(i)}});var oB=b((yK,nB)=>{"use strict";function _p(i){var e=(i/8|0)+(i%8===0?0:1);return e}c(_p,"getParamSize");var GC={ES256:_p(256),ES384:_p(384),ES512:_p(521)};function qC(i){var e=GC[i];if(e)return e;throw new Error('Unknown algorithm "'+i+'"')}c(qC,"getParamBytesForAlg");nB.exports=qC});var Tp=b((CK,fB)=>{"use strict";var Tl=ei().Buffer,cB=oB(),Yl=128,dB=0,KC=32,WC=16,jC=2,pB=WC|KC|dB<<6,Al=jC|dB<<6;function XC(i){return i.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}c(XC,"base64Url");function hB(i){if(Tl.isBuffer(i))return i;if(typeof i=="string")return Tl.from(i,"base64");throw new TypeError("ECDSA signature must be a Base64 string or a Buffer")}c(hB,"signatureAsBuffer");function QC(i,e){i=hB(i);var u=cB(e),r=u+1,a=i.length,s=0;if(i[s++]!==pB)throw new Error('Could not find expected "seq"');var n=i[s++];if(n===(Yl|1)&&(n=i[s++]),a-s=Yl;return a&&--r,r}c(lB,"countPadding");function JC(i,e){i=hB(i);var u=cB(e),r=i.length;if(r!==u*2)throw new TypeError('"'+e+'" signatures must be "'+u*2+'" bytes, saw "'+r+'"');var a=lB(i,0,u),s=lB(i,u,i.length),n=u-a,l=u-s,d=2+n+1+1+l,p=d{"use strict";Object.defineProperty(Rl,"__esModule",{value:!0});Rl.AuthClient=void 0;var zC=require("events"),$C=On(),Ap=class Ap extends zC.EventEmitter{constructor(){super(...arguments),this.transporter=new $C.DefaultTransporter,this.credentials={},this.eagerRefreshThresholdMillis=5*60*1e3,this.forceRefreshOnFailure=!1}setCredentials(e){this.credentials=e}addSharedMetadataHeaders(e){return!e["x-goog-user-project"]&&this.quotaProjectId&&(e["x-goog-user-project"]=this.quotaProjectId),e}};c(Ap,"AuthClient");var Yp=Ap;Rl.AuthClient=Yp});var yp=b(gl=>{"use strict";Object.defineProperty(gl,"__esModule",{value:!0});gl.LoginTicket=void 0;var gp=class gp{constructor(e,u){this.envelope=e,this.payload=u}getEnvelope(){return this.envelope}getPayload(){return this.payload}getUserId(){let e=this.getPayload();return e&&e.sub?e.sub:null}getAttributes(){return{envelope:this.getEnvelope(),payload:this.getPayload()}}};c(gp,"LoginTicket");var Rp=gp;gl.LoginTicket=Rp});var ui=b(dt=>{"use strict";Object.defineProperty(dt,"__esModule",{value:!0});dt.OAuth2Client=dt.CertificateFormat=dt.CodeChallengeMethod=void 0;var yl=require("querystring"),ZC=require("stream"),eI=Tp(),Np=ca(),uI=Ln(),tI=yp(),rI;(function(i){i.Plain="plain",i.S256="S256"})(rI=dt.CodeChallengeMethod||(dt.CodeChallengeMethod={}));var cr;(function(i){i.PEM="PEM",i.JWK="JWK"})(cr=dt.CertificateFormat||(dt.CertificateFormat={}));var je=class je extends uI.AuthClient{constructor(e,u,r){super(),this.certificateCache={},this.certificateExpiry=null,this.certificateCacheFormat=cr.PEM,this.refreshTokenPromises=new Map;let a=e&&typeof e=="object"?e:{clientId:e,clientSecret:u,redirectUri:r};this._clientId=a.clientId,this._clientSecret=a.clientSecret,this.redirectUri=a.redirectUri,this.eagerRefreshThresholdMillis=a.eagerRefreshThresholdMillis||5*60*1e3,this.forceRefreshOnFailure=!!a.forceRefreshOnFailure}generateAuthUrl(e={}){if(e.code_challenge_method&&!e.code_challenge)throw new Error("If a code_challenge_method is provided, code_challenge must be included.");return e.response_type=e.response_type||"code",e.client_id=e.client_id||this._clientId,e.redirect_uri=e.redirect_uri||this.redirectUri,e.scope instanceof Array&&(e.scope=e.scope.join(" ")),je.GOOGLE_OAUTH2_AUTH_BASE_URL_+"?"+yl.stringify(e)}generateCodeVerifier(){throw new Error("generateCodeVerifier is removed, please use generateCodeVerifierAsync instead.")}async generateCodeVerifierAsync(){let e=Np.createCrypto(),r=e.randomBytesBase64(96).replace(/\+/g,"~").replace(/=/g,"_").replace(/\//g,"-"),s=(await e.sha256DigestBase64(r)).split("=")[0].replace(/\+/g,"-").replace(/\//g,"_");return{codeVerifier:r,codeChallenge:s}}getToken(e,u){let r=typeof e=="string"?{code:e}:e;if(u)this.getTokenAsync(r).then(a=>u(null,a.tokens,a.res),a=>u(a,null,a.response));else return this.getTokenAsync(r)}async getTokenAsync(e){let u=je.GOOGLE_OAUTH2_TOKEN_URL_,r={code:e.code,client_id:e.client_id||this._clientId,client_secret:this._clientSecret,redirect_uri:e.redirect_uri||this.redirectUri,grant_type:"authorization_code",code_verifier:e.codeVerifier},a=await this.transporter.request({method:"POST",url:u,data:yl.stringify(r),headers:{"Content-Type":"application/x-www-form-urlencoded"}}),s=a.data;return a.data&&a.data.expires_in&&(s.expiry_date=new Date().getTime()+a.data.expires_in*1e3,delete s.expires_in),this.emit("tokens",s),{tokens:s,res:a}}async refreshToken(e){if(!e)return this.refreshTokenNoCache(e);if(this.refreshTokenPromises.has(e))return this.refreshTokenPromises.get(e);let u=this.refreshTokenNoCache(e).then(r=>(this.refreshTokenPromises.delete(e),r),r=>{throw this.refreshTokenPromises.delete(e),r});return this.refreshTokenPromises.set(e,u),u}async refreshTokenNoCache(e){if(!e)throw new Error("No refresh token is set.");let u=je.GOOGLE_OAUTH2_TOKEN_URL_,r={refresh_token:e,client_id:this._clientId,client_secret:this._clientSecret,grant_type:"refresh_token"},a=await this.transporter.request({method:"POST",url:u,data:yl.stringify(r),headers:{"Content-Type":"application/x-www-form-urlencoded"}}),s=a.data;return a.data&&a.data.expires_in&&(s.expiry_date=new Date().getTime()+a.data.expires_in*1e3,delete s.expires_in),this.emit("tokens",s),{tokens:s,res:a}}refreshAccessToken(e){if(e)this.refreshAccessTokenAsync().then(u=>e(null,u.credentials,u.res),e);else return this.refreshAccessTokenAsync()}async refreshAccessTokenAsync(){let e=await this.refreshToken(this.credentials.refresh_token),u=e.tokens;return u.refresh_token=this.credentials.refresh_token,this.credentials=u,{credentials:this.credentials,res:e.res}}getAccessToken(e){if(e)this.getAccessTokenAsync().then(u=>e(null,u.token,u.res),e);else return this.getAccessTokenAsync()}async getAccessTokenAsync(){if(!this.credentials.access_token||this.isTokenExpiring()){if(!this.credentials.refresh_token)if(this.refreshHandler){let r=await this.processAndValidateRefreshHandler();if(r!=null&&r.access_token)return this.setCredentials(r),{token:this.credentials.access_token}}else throw new Error("No refresh token or refresh handler callback is set.");let u=await this.refreshAccessTokenAsync();if(!u.credentials||u.credentials&&!u.credentials.access_token)throw new Error("Could not refresh access token.");return{token:u.credentials.access_token,res:u.res}}else return{token:this.credentials.access_token}}async getRequestHeaders(e){return(await this.getRequestMetadataAsync(e)).headers}async getRequestMetadataAsync(e){let u=this.credentials;if(!u.access_token&&!u.refresh_token&&!this.apiKey&&!this.refreshHandler)throw new Error("No access, refresh token, API key or refresh handler callback is set.");if(u.access_token&&!this.isTokenExpiring()){u.token_type=u.token_type||"Bearer";let l={Authorization:u.token_type+" "+u.access_token};return{headers:this.addSharedMetadataHeaders(l)}}if(this.refreshHandler){let l=await this.processAndValidateRefreshHandler();if(l!=null&&l.access_token){this.setCredentials(l);let d={Authorization:"Bearer "+this.credentials.access_token};return{headers:this.addSharedMetadataHeaders(d)}}}if(this.apiKey)return{headers:{"X-Goog-Api-Key":this.apiKey}};let r=null,a=null;try{r=await this.refreshToken(u.refresh_token),a=r.tokens}catch(l){let d=l;throw d.response&&(d.response.status===403||d.response.status===404)&&(d.message=`Could not refresh access token: ${d.message}`),d}let s=this.credentials;s.token_type=s.token_type||"Bearer",a.refresh_token=s.refresh_token,this.credentials=a;let n={Authorization:s.token_type+" "+a.access_token};return{headers:this.addSharedMetadataHeaders(n),res:r.res}}static getRevokeTokenUrl(e){let u=yl.stringify({token:e});return`${je.GOOGLE_OAUTH2_REVOKE_URL_}?${u}`}revokeToken(e,u){let r={url:je.getRevokeTokenUrl(e),method:"POST"};if(u)this.transporter.request(r).then(a=>u(null,a),u);else return this.transporter.request(r)}revokeCredentials(e){if(e)this.revokeCredentialsAsync().then(u=>e(null,u),e);else return this.revokeCredentialsAsync()}async revokeCredentialsAsync(){let e=this.credentials.access_token;if(this.credentials={},e)return this.revokeToken(e);throw new Error("No access token to revoke.")}request(e,u){if(u)this.requestAsync(e).then(r=>u(null,r),r=>u(r,r.response));else return this.requestAsync(e)}async requestAsync(e,u=!1){let r;try{let a=await this.getRequestMetadataAsync(e.url);e.headers=e.headers||{},a.headers&&a.headers["x-goog-user-project"]&&(e.headers["x-goog-user-project"]=a.headers["x-goog-user-project"]),a.headers&&a.headers.Authorization&&(e.headers.Authorization=a.headers.Authorization),this.apiKey&&(e.headers["X-Goog-Api-Key"]=this.apiKey),r=await this.transporter.request(e)}catch(a){let s=a.response;if(s){let n=s.status,l=this.credentials&&this.credentials.access_token&&this.credentials.refresh_token&&(!this.credentials.expiry_date||this.forceRefreshOnFailure),d=this.credentials&&this.credentials.access_token&&!this.credentials.refresh_token&&(!this.credentials.expiry_date||this.forceRefreshOnFailure)&&this.refreshHandler,p=s.config.data instanceof ZC.Readable,h=n===401||n===403;if(!u&&h&&!p&&l)return await this.refreshAccessTokenAsync(),this.requestAsync(e,!0);if(!u&&h&&!p&&d){let f=await this.processAndValidateRefreshHandler();return f!=null&&f.access_token&&this.setCredentials(f),this.requestAsync(e,!0)}}throw a}return r}verifyIdToken(e,u){if(u&&typeof u!="function")throw new Error("This method accepts an options object as the first parameter, which includes the idToken, audience, and maxExpiry.");if(u)this.verifyIdTokenAsync(e).then(r=>u(null,r),u);else return this.verifyIdTokenAsync(e)}async verifyIdTokenAsync(e){if(!e.idToken)throw new Error("The verifyIdToken method requires an ID Token");let u=await this.getFederatedSignonCertsAsync();return await this.verifySignedJwtWithCertsAsync(e.idToken,u.certs,e.audience,je.ISSUERS_,e.maxExpiry)}async getTokenInfo(e){let{data:u}=await this.transporter.request({method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Authorization:`Bearer ${e}`},url:je.GOOGLE_TOKEN_INFO_URL}),r=Object.assign({expiry_date:new Date().getTime()+u.expires_in*1e3,scopes:u.scope.split(" ")},u);return delete r.expires_in,delete r.scope,r}getFederatedSignonCerts(e){if(e)this.getFederatedSignonCertsAsync().then(u=>e(null,u.certs,u.res),e);else return this.getFederatedSignonCertsAsync()}async getFederatedSignonCertsAsync(){let e=new Date().getTime(),u=Np.hasBrowserCrypto()?cr.JWK:cr.PEM;if(this.certificateExpiry&&ee(null,u.pubkeys,u.res),e);else return this.getIapPublicKeysAsync()}async getIapPublicKeysAsync(){let e,u=je.GOOGLE_OAUTH2_IAP_PUBLIC_KEY_URL_;try{e=await this.transporter.request({url:u})}catch(r){throw r.message=`Failed to retrieve verification certificates: ${r.message}`,r}return{pubkeys:e.data,res:e}}verifySignedJwtWithCerts(){throw new Error("verifySignedJwtWithCerts is removed, please use verifySignedJwtWithCertsAsync instead.")}async verifySignedJwtWithCertsAsync(e,u,r,a,s){let n=Np.createCrypto();s||(s=je.MAX_TOKEN_LIFETIME_SECS_);let l=e.split(".");if(l.length!==3)throw new Error("Wrong number of segments in token: "+e);let d=l[0]+"."+l[1],p=l[2],h,f;try{h=JSON.parse(n.decodeBase64StringUtf8(l[0]))}catch(I){throw I.message=`Can't parse token envelope: ${l[0]}': ${I.message}`,I}if(!h)throw new Error("Can't parse token envelope: "+l[0]);try{f=JSON.parse(n.decodeBase64StringUtf8(l[1]))}catch(I){throw I.message=`Can't parse token payload '${l[0]}`,I}if(!f)throw new Error("Can't parse token payload: "+l[1]);if(!Object.prototype.hasOwnProperty.call(u,h.kid))throw new Error("No pem found for envelope: "+JSON.stringify(h));let S=u[h.kid];if(h.alg==="ES256"&&(p=eI.joseToDer(p,"ES256").toString("base64")),!await n.verify(S,d,p))throw new Error("Invalid token signature: "+e);if(!f.iat)throw new Error("No issue time in token: "+JSON.stringify(f));if(!f.exp)throw new Error("No expiration time in token: "+JSON.stringify(f));let O=Number(f.iat);if(isNaN(O))throw new Error("iat field using invalid format");let E=Number(f.exp);if(isNaN(E))throw new Error("exp field using invalid format");let A=new Date().getTime()/1e3;if(E>=A+s)throw new Error("Expiration time too far in future: "+JSON.stringify(f));let g=O-je.CLOCK_SKEW_SECS_,D=E+je.CLOCK_SKEW_SECS_;if(AD)throw new Error("Token used too late, "+A+" > "+D+": "+JSON.stringify(f));if(a&&a.indexOf(f.iss)<0)throw new Error("Invalid issuer, expected one of ["+a+"], but got "+f.iss);if(typeof r<"u"&&r!==null){let I=f.aud,W=!1;if(r.constructor===Array?W=r.indexOf(I)>-1:W=I===r,!W)throw new Error("Wrong recipient, payload audience != requiredAudience")}return new tI.LoginTicket(h,f)}async processAndValidateRefreshHandler(){if(this.refreshHandler){let e=await this.refreshHandler();if(!e.access_token)throw new Error("No access token is returned by the refreshHandler callback.");return e}}isTokenExpiring(){let e=this.credentials.expiry_date;return e?e<=new Date().getTime()+this.eagerRefreshThresholdMillis:!1}};c(je,"OAuth2Client");var Mu=je;dt.OAuth2Client=Mu;Mu.GOOGLE_TOKEN_INFO_URL="https://oauth2.googleapis.com/tokeninfo";Mu.GOOGLE_OAUTH2_AUTH_BASE_URL_="https://accounts.google.com/o/oauth2/v2/auth";Mu.GOOGLE_OAUTH2_TOKEN_URL_="https://oauth2.googleapis.com/token";Mu.GOOGLE_OAUTH2_REVOKE_URL_="https://oauth2.googleapis.com/revoke";Mu.GOOGLE_OAUTH2_FEDERATED_SIGNON_PEM_CERTS_URL_="https://www.googleapis.com/oauth2/v1/certs";Mu.GOOGLE_OAUTH2_FEDERATED_SIGNON_JWK_CERTS_URL_="https://www.googleapis.com/oauth2/v3/certs";Mu.GOOGLE_OAUTH2_IAP_PUBLIC_KEY_URL_="https://www.gstatic.com/iap/verify/public_key";Mu.CLOCK_SKEW_SECS_=300;Mu.MAX_TOKEN_LIFETIME_SECS_=86400;Mu.ISSUERS_=["accounts.google.com","https://accounts.google.com"]});var bp=b(Nl=>{"use strict";Object.defineProperty(Nl,"__esModule",{value:!0});Nl.Compute=void 0;var iI=tr(),SB=Sl(),aI=ui(),Ip=class Ip extends aI.OAuth2Client{constructor(e={}){super(e),this.credentials={expiry_date:1,refresh_token:"compute-placeholder"},this.serviceAccountEmail=e.serviceAccountEmail||"default",this.scopes=iI(e.scopes)}async refreshTokenNoCache(e){let u=`service-accounts/${this.serviceAccountEmail}/token`,r;try{let s={property:u};this.scopes.length>0&&(s.params={scopes:this.scopes.join(",")}),r=await SB.instance(s)}catch(s){throw s.message=`Could not refresh access token: ${s.message}`,this.wrapError(s),s}let a=r;return r&&r.expires_in&&(a.expiry_date=new Date().getTime()+r.expires_in*1e3,delete a.expires_in),this.emit("tokens",a),{tokens:a,res:null}}async fetchIdToken(e){let u=`service-accounts/${this.serviceAccountEmail}/identity?format=full&audience=${e}`,r;try{let a={property:u};r=await SB.instance(a)}catch(a){throw a.message=`Could not fetch ID token: ${a.message}`,a}return r}wrapError(e){let u=e.response;u&&u.status&&(e.code=u.status.toString(),u.status===403?e.message="A Forbidden error was returned while attempting to retrieve an access token for the Compute Engine built-in service account. This may be because the Compute Engine instance does not have the correct permission scopes specified: "+e.message:u.status===404&&(e.message="A Not Found error was returned while attempting to retrieve an accesstoken for the Compute Engine built-in service account. This may be because the Compute Engine instance does not have any permission scopes specified: "+e.message))}};c(Ip,"Compute");var Cp=Ip;Nl.Compute=Cp});var Dp=b(Cl=>{"use strict";Object.defineProperty(Cl,"__esModule",{value:!0});Cl.IdTokenClient=void 0;var sI=ui(),vp=class vp extends sI.OAuth2Client{constructor(e){super(),this.targetAudience=e.targetAudience,this.idTokenProvider=e.idTokenProvider}async getRequestMetadataAsync(e){if(!this.credentials.id_token||(this.credentials.expiry_date||0){"use strict";Object.defineProperty(vt,"__esModule",{value:!0});vt.getEnv=vt.clear=vt.GCPEnv=void 0;var OB=Sl(),dr;(function(i){i.APP_ENGINE="APP_ENGINE",i.KUBERNETES_ENGINE="KUBERNETES_ENGINE",i.CLOUD_FUNCTIONS="CLOUD_FUNCTIONS",i.COMPUTE_ENGINE="COMPUTE_ENGINE",i.CLOUD_RUN="CLOUD_RUN",i.NONE="NONE"})(dr=vt.GCPEnv||(vt.GCPEnv={}));var En;function nI(){En=void 0}c(nI,"clear");vt.clear=nI;async function oI(){return En||(En=lI(),En)}c(oI,"getEnv");vt.getEnv=oI;async function lI(){let i=dr.NONE;return cI()?i=dr.APP_ENGINE:dI()?i=dr.CLOUD_FUNCTIONS:await fI()?await hI()?i=dr.KUBERNETES_ENGINE:pI()?i=dr.CLOUD_RUN:i=dr.COMPUTE_ENGINE:i=dr.NONE,i}c(lI,"getEnvMemoized");function cI(){return!!(process.env.GAE_SERVICE||process.env.GAE_MODULE_NAME)}c(cI,"isAppEngine");function dI(){return!!(process.env.FUNCTION_NAME||process.env.FUNCTION_TARGET)}c(dI,"isCloudFunction");function pI(){return!!process.env.K_CONFIGURATION}c(pI,"isCloudRun");async function hI(){try{return await OB.instance("attributes/cluster-name"),!0}catch{return!1}}c(hI,"isKubernetesEngine");async function fI(){return OB.isAvailable()}c(fI,"isComputeEngine")});var Up=b((qK,LB)=>{var Il=ei().Buffer,SI=require("stream"),OI=require("util");function bl(i){if(this.buffer=null,this.writable=!0,this.readable=!0,!i)return this.buffer=Il.alloc(0),this;if(typeof i.pipe=="function")return this.buffer=Il.alloc(0),i.pipe(this),this;if(i.length||typeof i=="object")return this.buffer=i,this.writable=!1,process.nextTick(function(){this.emit("end",i),this.readable=!1,this.emit("close")}.bind(this)),this;throw new TypeError("Unexpected data type ("+typeof i+")")}c(bl,"DataStream");OI.inherits(bl,SI);bl.prototype.write=c(function(e){this.buffer=Il.concat([this.buffer,Il.from(e)]),this.emit("data",e)},"write");bl.prototype.end=c(function(e){e&&this.write(e),this.emit("end",e),this.emit("close"),this.writable=!1,this.readable=!1},"end");LB.exports=bl});var BB=b((WK,EB)=>{"use strict";var Bn=require("buffer").Buffer,Pp=require("buffer").SlowBuffer;EB.exports=xl;function xl(i,e){if(!Bn.isBuffer(i)||!Bn.isBuffer(e)||i.length!==e.length)return!1;for(var u=0,r=0;r{var BI=BB(),ha=ei().Buffer,pt=require("crypto"),mB=Tp(),MB=require("util"),MI=`"%s" is not a valid algorithm. + Supported algorithms are: + "HS256", "HS384", "HS512", "RS256", "RS384", "RS512", "PS256", "PS384", "PS512", "ES256", "ES384", "ES512" and "none".`,Mn="secret must be a string or buffer",pa="key must be a string or a buffer",mI="key must be a string, a buffer or an object",kp=typeof pt.createPublicKey=="function";kp&&(pa+=" or a KeyObject",Mn+="or a KeyObject");function _B(i){if(!ha.isBuffer(i)&&typeof i!="string"&&(!kp||typeof i!="object"||typeof i.type!="string"||typeof i.asymmetricKeyType!="string"||typeof i.export!="function"))throw Ku(pa)}c(_B,"checkIsPublicKey");function TB(i){if(!ha.isBuffer(i)&&typeof i!="string"&&typeof i!="object")throw Ku(mI)}c(TB,"checkIsPrivateKey");function _I(i){if(!ha.isBuffer(i)){if(typeof i=="string")return i;if(!kp||typeof i!="object"||i.type!=="secret"||typeof i.export!="function")throw Ku(Mn)}}c(_I,"checkIsSecretKey");function Fp(i){return i.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}c(Fp,"fromBase64");function YB(i){i=i.toString();var e=4-i.length%4;if(e!==4)for(var u=0;u{var II=require("buffer").Buffer;NB.exports=c(function(e){return typeof e=="string"?e:typeof e=="number"||II.isBuffer(e)?e.toString():JSON.stringify(e)},"toString")});var DB=b(($K,vB)=>{var bI=ei().Buffer,CB=Up(),xI=Hp(),vI=require("stream"),IB=Vp(),Gp=require("util");function bB(i,e){return bI.from(i,e).toString("base64").replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}c(bB,"base64url");function DI(i,e,u){u=u||"utf8";var r=bB(IB(i),"binary"),a=bB(IB(e),u);return Gp.format("%s.%s",r,a)}c(DI,"jwsSecuredInput");function xB(i){var e=i.header,u=i.payload,r=i.secret||i.privateKey,a=i.encoding,s=xI(e.alg),n=DI(e,u,a),l=s.sign(n,r);return Gp.format("%s.%s",n,l)}c(xB,"jwsSign");function vl(i){var e=i.secret||i.privateKey||i.key,u=new CB(e);this.readable=!0,this.header=i.header,this.encoding=i.encoding,this.secret=this.privateKey=this.key=u,this.payload=new CB(i.payload),this.secret.once("close",function(){!this.payload.writable&&this.readable&&this.sign()}.bind(this)),this.payload.once("close",function(){!this.secret.writable&&this.readable&&this.sign()}.bind(this))}c(vl,"SignStream");Gp.inherits(vl,vI);vl.prototype.sign=c(function(){try{var e=xB({header:this.header,payload:this.payload.buffer,secret:this.secret.buffer,encoding:this.encoding});return this.emit("done",e),this.emit("data",e),this.emit("end"),this.readable=!1,e}catch(u){this.readable=!1,this.emit("error",u),this.emit("close")}},"sign");vl.sign=xB;vB.exports=vl});var KB=b((eW,qB)=>{var UB=ei().Buffer,wB=Up(),wI=Hp(),UI=require("stream"),PB=Vp(),PI=require("util"),kI=/^[a-zA-Z0-9\-_]+?\.[a-zA-Z0-9\-_]+?\.([a-zA-Z0-9\-_]+)?$/;function FI(i){return Object.prototype.toString.call(i)==="[object Object]"}c(FI,"isObject");function HI(i){if(FI(i))return i;try{return JSON.parse(i)}catch{return}}c(HI,"safeJsonParse");function kB(i){var e=i.split(".",1)[0];return HI(UB.from(e,"base64").toString("binary"))}c(kB,"headerFromJWS");function VI(i){return i.split(".",2).join(".")}c(VI,"securedInputFromJWS");function FB(i){return i.split(".")[2]}c(FB,"signatureFromJWS");function GI(i,e){e=e||"utf8";var u=i.split(".")[1];return UB.from(u,"base64").toString(e)}c(GI,"payloadFromJWS");function HB(i){return kI.test(i)&&!!kB(i)}c(HB,"isValidJws");function VB(i,e,u){if(!e){var r=new Error("Missing algorithm parameter for jws.verify");throw r.code="MISSING_ALGORITHM",r}i=PB(i);var a=FB(i),s=VI(i),n=wI(e);return n.verify(s,a,u)}c(VB,"jwsVerify");function GB(i,e){if(e=e||{},i=PB(i),!HB(i))return null;var u=kB(i);if(!u)return null;var r=GI(i);return(u.typ==="JWT"||e.json)&&(r=JSON.parse(r,e.encoding)),{header:u,payload:r,signature:FB(i)}}c(GB,"jwsDecode");function fa(i){i=i||{};var e=i.secret||i.publicKey||i.key,u=new wB(e);this.readable=!0,this.algorithm=i.algorithm,this.encoding=i.encoding,this.secret=this.publicKey=this.key=u,this.signature=new wB(i.signature),this.secret.once("close",function(){!this.signature.writable&&this.readable&&this.verify()}.bind(this)),this.signature.once("close",function(){!this.secret.writable&&this.readable&&this.verify()}.bind(this))}c(fa,"VerifyStream");PI.inherits(fa,UI);fa.prototype.verify=c(function(){try{var e=VB(this.signature.buffer,this.algorithm,this.key.buffer),u=GB(this.signature.buffer,this.encoding);return this.emit("done",e,u),this.emit("data",e),this.emit("end"),this.readable=!1,e}catch(r){this.readable=!1,this.emit("error",r),this.emit("close")}},"verify");fa.decode=GB;fa.isValid=HB;fa.verify=VB;qB.exports=fa});var qp=b(pr=>{var WB=DB(),Dl=KB(),qI=["HS256","HS384","HS512","RS256","RS384","RS512","PS256","PS384","PS512","ES256","ES384","ES512"];pr.ALGORITHMS=qI;pr.sign=WB.sign;pr.verify=Dl.verify;pr.decode=Dl.decode;pr.isValid=Dl.isValid;pr.createSign=c(function(e){return new WB(e)},"createSign");pr.createVerify=c(function(e){return new Dl(e)},"createVerify")});var y0=b((iW,jB)=>{jB.exports={options:{usePureJavaScript:!1}}});var JB=b((aW,QB)=>{var Kp={};QB.exports=Kp;var XB={};Kp.encode=function(i,e,u){if(typeof e!="string")throw new TypeError('"alphabet" must be a string.');if(u!==void 0&&typeof u!="number")throw new TypeError('"maxline" must be a number.');var r="";if(!(i instanceof Uint8Array))r=KI(i,e);else{var a=0,s=e.length,n=e.charAt(0),l=[0];for(a=0;a0;)l.push(p%s),p=p/s|0}for(a=0;i[a]===0&&a=0;--a)r+=e[l[a]]}if(u){var h=new RegExp(".{1,"+u+"}","g");r=r.match(h).join(`\r +`)}return r};Kp.decode=function(i,e){if(typeof i!="string")throw new TypeError('"input" must be a string.');if(typeof e!="string")throw new TypeError('"alphabet" must be a string.');var u=XB[e];if(!u){u=XB[e]=[];for(var r=0;r>=8;for(;p>0;)n.push(p&255),p>>=8}for(var h=0;i[h]===s&&h0;)s.push(l%r),l=l/r|0}var d="";for(u=0;i.at(u)===0&&u=0;--u)d+=e[s[u]];return d}c(KI,"_encodeWithByteBuffer")});var H0=b((nW,eM)=>{var zB=y0(),$B=JB(),k=eM.exports=zB.util=zB.util||{};(function(){if(typeof process<"u"&&process.nextTick&&!process.browser){k.nextTick=process.nextTick,typeof setImmediate=="function"?k.setImmediate=setImmediate:k.setImmediate=k.nextTick;return}if(typeof setImmediate=="function"){k.setImmediate=function(){return setImmediate.apply(void 0,arguments)},k.nextTick=function(l){return setImmediate(l)};return}if(k.setImmediate=function(l){setTimeout(l,0)},typeof window<"u"&&typeof window.postMessage=="function"){let l=function(d){if(d.source===window&&d.data===i){d.stopPropagation();var p=e.slice();e.length=0,p.forEach(function(h){h()})}};var n=l;c(l,"handler");var i="forge.setImmediate",e=[];k.setImmediate=function(d){e.push(d),e.length===1&&window.postMessage(i,"*")},window.addEventListener("message",l,!0)}if(typeof MutationObserver<"u"){var u=Date.now(),r=!0,a=document.createElement("div"),e=[];new MutationObserver(function(){var d=e.slice();e.length=0,d.forEach(function(p){p()})}).observe(a,{attributes:!0});var s=k.setImmediate;k.setImmediate=function(d){Date.now()-u>15?(u=Date.now(),s(d)):(e.push(d),e.length===1&&a.setAttribute("a",r=!r))}}k.nextTick=k.setImmediate})();k.isNodejs=typeof process<"u"&&process.versions&&process.versions.node;k.globalScope=function(){return k.isNodejs?global:typeof self>"u"?window:self}();k.isArray=Array.isArray||function(i){return Object.prototype.toString.call(i)==="[object Array]"};k.isArrayBuffer=function(i){return typeof ArrayBuffer<"u"&&i instanceof ArrayBuffer};k.isArrayBufferView=function(i){return i&&k.isArrayBuffer(i.buffer)&&i.byteLength!==void 0};function _n(i){if(!(i===8||i===16||i===24||i===32))throw new Error("Only 8, 16, 24, or 32 bits supported: "+i)}c(_n,"_checkBitsParam");k.ByteBuffer=Wp;function Wp(i){if(this.data="",this.read=0,typeof i=="string")this.data=i;else if(k.isArrayBuffer(i)||k.isArrayBufferView(i))if(typeof Buffer<"u"&&i instanceof Buffer)this.data=i.toString("binary");else{var e=new Uint8Array(i);try{this.data=String.fromCharCode.apply(null,e)}catch{for(var u=0;uWI&&(this.data.substr(0,1),this._constructedStringLength=0)};k.ByteStringBuffer.prototype.length=function(){return this.data.length-this.read};k.ByteStringBuffer.prototype.isEmpty=function(){return this.length()<=0};k.ByteStringBuffer.prototype.putByte=function(i){return this.putBytes(String.fromCharCode(i))};k.ByteStringBuffer.prototype.fillWithByte=function(i,e){i=String.fromCharCode(i);for(var u=this.data;e>0;)e&1&&(u+=i),e>>>=1,e>0&&(i+=i);return this.data=u,this._optimizeConstructedString(e),this};k.ByteStringBuffer.prototype.putBytes=function(i){return this.data+=i,this._optimizeConstructedString(i.length),this};k.ByteStringBuffer.prototype.putString=function(i){return this.putBytes(k.encodeUtf8(i))};k.ByteStringBuffer.prototype.putInt16=function(i){return this.putBytes(String.fromCharCode(i>>8&255)+String.fromCharCode(i&255))};k.ByteStringBuffer.prototype.putInt24=function(i){return this.putBytes(String.fromCharCode(i>>16&255)+String.fromCharCode(i>>8&255)+String.fromCharCode(i&255))};k.ByteStringBuffer.prototype.putInt32=function(i){return this.putBytes(String.fromCharCode(i>>24&255)+String.fromCharCode(i>>16&255)+String.fromCharCode(i>>8&255)+String.fromCharCode(i&255))};k.ByteStringBuffer.prototype.putInt16Le=function(i){return this.putBytes(String.fromCharCode(i&255)+String.fromCharCode(i>>8&255))};k.ByteStringBuffer.prototype.putInt24Le=function(i){return this.putBytes(String.fromCharCode(i&255)+String.fromCharCode(i>>8&255)+String.fromCharCode(i>>16&255))};k.ByteStringBuffer.prototype.putInt32Le=function(i){return this.putBytes(String.fromCharCode(i&255)+String.fromCharCode(i>>8&255)+String.fromCharCode(i>>16&255)+String.fromCharCode(i>>24&255))};k.ByteStringBuffer.prototype.putInt=function(i,e){_n(e);var u="";do e-=8,u+=String.fromCharCode(i>>e&255);while(e>0);return this.putBytes(u)};k.ByteStringBuffer.prototype.putSignedInt=function(i,e){return i<0&&(i+=2<0);return e};k.ByteStringBuffer.prototype.getSignedInt=function(i){var e=this.getInt(i),u=2<=u&&(e-=u<<1),e};k.ByteStringBuffer.prototype.getBytes=function(i){var e;return i?(i=Math.min(this.length(),i),e=this.data.slice(this.read,this.read+i),this.read+=i):i===0?e="":(e=this.read===0?this.data:this.data.slice(this.read),this.clear()),e};k.ByteStringBuffer.prototype.bytes=function(i){return typeof i>"u"?this.data.slice(this.read):this.data.slice(this.read,this.read+i)};k.ByteStringBuffer.prototype.at=function(i){return this.data.charCodeAt(this.read+i)};k.ByteStringBuffer.prototype.setAt=function(i,e){return this.data=this.data.substr(0,this.read+i)+String.fromCharCode(e)+this.data.substr(this.read+i+1),this};k.ByteStringBuffer.prototype.last=function(){return this.data.charCodeAt(this.data.length-1)};k.ByteStringBuffer.prototype.copy=function(){var i=k.createBuffer(this.data);return i.read=this.read,i};k.ByteStringBuffer.prototype.compact=function(){return this.read>0&&(this.data=this.data.slice(this.read),this.read=0),this};k.ByteStringBuffer.prototype.clear=function(){return this.data="",this.read=0,this};k.ByteStringBuffer.prototype.truncate=function(i){var e=Math.max(0,this.length()-i);return this.data=this.data.substr(this.read,e),this.read=0,this};k.ByteStringBuffer.prototype.toHex=function(){for(var i="",e=this.read;e=i)return this;e=Math.max(e||this.growSize,i);var u=new Uint8Array(this.data.buffer,this.data.byteOffset,this.data.byteLength),r=new Uint8Array(this.length()+e);return r.set(u),this.data=new DataView(r.buffer),this};k.DataBuffer.prototype.putByte=function(i){return this.accommodate(1),this.data.setUint8(this.write++,i),this};k.DataBuffer.prototype.fillWithByte=function(i,e){this.accommodate(e);for(var u=0;u>8&65535),this.data.setInt8(this.write,i>>16&255),this.write+=3,this};k.DataBuffer.prototype.putInt32=function(i){return this.accommodate(4),this.data.setInt32(this.write,i),this.write+=4,this};k.DataBuffer.prototype.putInt16Le=function(i){return this.accommodate(2),this.data.setInt16(this.write,i,!0),this.write+=2,this};k.DataBuffer.prototype.putInt24Le=function(i){return this.accommodate(3),this.data.setInt8(this.write,i>>16&255),this.data.setInt16(this.write,i>>8&65535,!0),this.write+=3,this};k.DataBuffer.prototype.putInt32Le=function(i){return this.accommodate(4),this.data.setInt32(this.write,i,!0),this.write+=4,this};k.DataBuffer.prototype.putInt=function(i,e){_n(e),this.accommodate(e/8);do e-=8,this.data.setInt8(this.write++,i>>e&255);while(e>0);return this};k.DataBuffer.prototype.putSignedInt=function(i,e){return _n(e),this.accommodate(e/8),i<0&&(i+=2<0);return e};k.DataBuffer.prototype.getSignedInt=function(i){var e=this.getInt(i),u=2<=u&&(e-=u<<1),e};k.DataBuffer.prototype.getBytes=function(i){var e;return i?(i=Math.min(this.length(),i),e=this.data.slice(this.read,this.read+i),this.read+=i):i===0?e="":(e=this.read===0?this.data:this.data.slice(this.read),this.clear()),e};k.DataBuffer.prototype.bytes=function(i){return typeof i>"u"?this.data.slice(this.read):this.data.slice(this.read,this.read+i)};k.DataBuffer.prototype.at=function(i){return this.data.getUint8(this.read+i)};k.DataBuffer.prototype.setAt=function(i,e){return this.data.setUint8(i,e),this};k.DataBuffer.prototype.last=function(){return this.data.getUint8(this.write-1)};k.DataBuffer.prototype.copy=function(){return new k.DataBuffer(this)};k.DataBuffer.prototype.compact=function(){if(this.read>0){var i=new Uint8Array(this.data.buffer,this.read),e=new Uint8Array(i.byteLength);e.set(i),this.data=new DataView(e),this.write-=this.read,this.read=0}return this};k.DataBuffer.prototype.clear=function(){return this.data=new DataView(new ArrayBuffer(0)),this.read=this.write=0,this};k.DataBuffer.prototype.truncate=function(i){return this.write=Math.max(0,this.length()-i),this.read=Math.min(this.read,this.write),this};k.DataBuffer.prototype.toHex=function(){for(var i="",e=this.read;e0;)e&1&&(u+=i),e>>>=1,e>0&&(i+=i);return u};k.xorBytes=function(i,e,u){for(var r="",a="",s="",n=0,l=0;u>0;--u,++n)a=i.charCodeAt(n)^e.charCodeAt(n),l>=10&&(r+=s,s="",l=0),s+=String.fromCharCode(a),++l;return r+=s,r};k.hexToBytes=function(i){var e="",u=0;for(i.length&!0&&(u=1,e+=String.fromCharCode(parseInt(i[0],16)));u>24&255)+String.fromCharCode(i>>16&255)+String.fromCharCode(i>>8&255)+String.fromCharCode(i&255)};var hr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",fr=[62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,64,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],ZB="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";k.encode64=function(i,e){for(var u="",r="",a,s,n,l=0;l>2),u+=hr.charAt((a&3)<<4|s>>4),isNaN(s)?u+="==":(u+=hr.charAt((s&15)<<2|n>>6),u+=isNaN(n)?"=":hr.charAt(n&63)),e&&u.length>e&&(r+=u.substr(0,e)+`\r +`,u=u.substr(e));return r+=u,r};k.decode64=function(i){i=i.replace(/[^A-Za-z0-9\+\/\=]/g,"");for(var e="",u,r,a,s,n=0;n>4),a!==64&&(e+=String.fromCharCode((r&15)<<4|a>>2),s!==64&&(e+=String.fromCharCode((a&3)<<6|s)));return e};k.encodeUtf8=function(i){return unescape(encodeURIComponent(i))};k.decodeUtf8=function(i){return decodeURIComponent(escape(i))};k.binary={raw:{},hex:{},base64:{},base58:{},baseN:{encode:$B.encode,decode:$B.decode}};k.binary.raw.encode=function(i){return String.fromCharCode.apply(null,i)};k.binary.raw.decode=function(i,e,u){var r=e;r||(r=new Uint8Array(i.length)),u=u||0;for(var a=u,s=0;s>2),u+=hr.charAt((a&3)<<4|s>>4),isNaN(s)?u+="==":(u+=hr.charAt((s&15)<<2|n>>6),u+=isNaN(n)?"=":hr.charAt(n&63)),e&&u.length>e&&(r+=u.substr(0,e)+`\r +`,u=u.substr(e));return r+=u,r};k.binary.base64.decode=function(i,e,u){var r=e;r||(r=new Uint8Array(Math.ceil(i.length/4)*3)),i=i.replace(/[^A-Za-z0-9\+\/\=]/g,""),u=u||0;for(var a,s,n,l,d=0,p=u;d>4,n!==64&&(r[p++]=(s&15)<<4|n>>2,l!==64&&(r[p++]=(n&3)<<6|l));return e?p-u:r.subarray(0,p)};k.binary.base58.encode=function(i,e){return k.binary.baseN.encode(i,ZB,e)};k.binary.base58.decode=function(i,e){return k.binary.baseN.decode(i,ZB,e)};k.text={utf8:{},utf16:{}};k.text.utf8.encode=function(i,e,u){i=k.encodeUtf8(i);var r=e;r||(r=new Uint8Array(i.length)),u=u||0;for(var a=u,s=0;s"u"&&(u=["web","flash"]);var a,s=!1,n=null;for(var l in u){a=u[l];try{if(a==="flash"||a==="both"){if(e[0]===null)throw new Error("Flash local storage not available.");r=i.apply(this,e),s=a==="flash"}(a==="web"||a==="both")&&(e[0]=localStorage,r=i.apply(this,e),s=!0)}catch(d){n=d}if(s)break}if(!s)throw n;return r},"_callStorageFunction");k.setItem=function(i,e,u,r,a){wl(XI,arguments,a)};k.getItem=function(i,e,u,r){return wl(QI,arguments,r)};k.removeItem=function(i,e,u,r){wl(JI,arguments,r)};k.clearItems=function(i,e,u){wl(zI,arguments,u)};k.isEmpty=function(i){for(var e in i)if(i.hasOwnProperty(e))return!1;return!0};k.format=function(i){for(var e=/%./g,u,r,a=0,s=[],n=0;u=e.exec(i);){r=i.substring(n,e.lastIndex-2),r.length>0&&s.push(r),n=e.lastIndex;var l=u[0][1];switch(l){case"s":case"o":a");break;case"%":s.push("%");break;default:s.push("<%"+l+"?>")}}return s.push(i.substring(n)),s.join("")};k.formatNumber=function(i,e,u,r){var a=i,s=isNaN(e=Math.abs(e))?2:e,n=u===void 0?",":u,l=r===void 0?".":r,d=a<0?"-":"",p=parseInt(a=Math.abs(+a||0).toFixed(s),10)+"",h=p.length>3?p.length%3:0;return d+(h?p.substr(0,h)+l:"")+p.substr(h).replace(/(\d{3})(?=\d)/g,"$1"+l)+(s?n+Math.abs(a-p).toFixed(s).slice(2):"")};k.formatSize=function(i){return i>=1073741824?i=k.formatNumber(i/1073741824,2,".","")+" GiB":i>=1048576?i=k.formatNumber(i/1048576,2,".","")+" MiB":i>=1024?i=k.formatNumber(i/1024,0)+" KiB":i=k.formatNumber(i,0)+" bytes",i};k.bytesFromIP=function(i){return i.indexOf(".")!==-1?k.bytesFromIPv4(i):i.indexOf(":")!==-1?k.bytesFromIPv6(i):null};k.bytesFromIPv4=function(i){if(i=i.split("."),i.length!==4)return null;for(var e=k.createBuffer(),u=0;uu[r].end-u[r].start&&(r=u.length-1))}e.push(s)}if(u.length>0){var d=u[r];d.end-d.start>0&&(e.splice(d.start,d.end-d.start+1,""),d.start===0&&e.unshift(""),d.end===7&&e.push(""))}return e.join(":")};k.estimateCores=function(i,e){if(typeof i=="function"&&(e=i,i={}),i=i||{},"cores"in k&&!i.update)return e(null,k.cores);if(typeof navigator<"u"&&"hardwareConcurrency"in navigator&&navigator.hardwareConcurrency>0)return k.cores=navigator.hardwareConcurrency,e(null,k.cores);if(typeof Worker>"u")return k.cores=1,e(null,k.cores);if(typeof Blob>"u")return k.cores=2,e(null,k.cores);var u=URL.createObjectURL(new Blob(["(",function(){self.addEventListener("message",function(n){for(var l=Date.now(),d=l+4;Date.now()_.st&&h.st<_.et||_.st>h.st&&_.st{var Ne=y0();H0();uM.exports=Ne.cipher=Ne.cipher||{};Ne.cipher.algorithms=Ne.cipher.algorithms||{};Ne.cipher.createCipher=function(i,e){var u=i;if(typeof u=="string"&&(u=Ne.cipher.getAlgorithm(u),u&&(u=u())),!u)throw new Error("Unsupported algorithm: "+i);return new Ne.cipher.BlockCipher({algorithm:u,key:e,decrypt:!1})};Ne.cipher.createDecipher=function(i,e){var u=i;if(typeof u=="string"&&(u=Ne.cipher.getAlgorithm(u),u&&(u=u())),!u)throw new Error("Unsupported algorithm: "+i);return new Ne.cipher.BlockCipher({algorithm:u,key:e,decrypt:!0})};Ne.cipher.registerAlgorithm=function(i,e){i=i.toUpperCase(),Ne.cipher.algorithms[i]=e};Ne.cipher.getAlgorithm=function(i){return i=i.toUpperCase(),i in Ne.cipher.algorithms?Ne.cipher.algorithms[i]:null};var Qp=Ne.cipher.BlockCipher=function(i){this.algorithm=i.algorithm,this.mode=this.algorithm.mode,this.blockSize=this.mode.blockSize,this._finish=!1,this._input=null,this.output=null,this._op=i.decrypt?this.mode.decrypt:this.mode.encrypt,this._decrypt=i.decrypt,this.algorithm.initialize(i)};Qp.prototype.start=function(i){i=i||{};var e={};for(var u in i)e[u]=i[u];e.decrypt=this._decrypt,this._finish=!1,this._input=Ne.util.createBuffer(),this.output=i.output||Ne.util.createBuffer(),this.mode.start(e)};Qp.prototype.update=function(i){for(i&&this._input.putBuffer(i);!this._op.call(this.mode,this._input,this.output,this._finish)&&!this._finish;);this._input.compact()};Qp.prototype.finish=function(i){i&&(this.mode.name==="ECB"||this.mode.name==="CBC")&&(this.mode.pad=function(u){return i(this.blockSize,u,!1)},this.mode.unpad=function(u){return i(this.blockSize,u,!0)});var e={};return e.decrypt=this._decrypt,e.overflow=this._input.length()%this.blockSize,!(!this._decrypt&&this.mode.pad&&!this.mode.pad(this._input,e)||(this._finish=!0,this.update(),this._decrypt&&this.mode.unpad&&!this.mode.unpad(this.output,e))||this.mode.afterFinish&&!this.mode.afterFinish(this.output,e))}});var zp=b((cW,tM)=>{var Ce=y0();H0();Ce.cipher=Ce.cipher||{};var b0=tM.exports=Ce.cipher.modes=Ce.cipher.modes||{};b0.ecb=function(i){i=i||{},this.name="ECB",this.cipher=i.cipher,this.blockSize=i.blockSize||16,this._ints=this.blockSize/4,this._inBlock=new Array(this._ints),this._outBlock=new Array(this._ints)};b0.ecb.prototype.start=function(i){};b0.ecb.prototype.encrypt=function(i,e,u){if(i.length()0))return!0;for(var r=0;r0))return!0;for(var r=0;r0)return!1;var u=i.length(),r=i.at(u-1);return r>this.blockSize<<2?!1:(i.truncate(r),!0)};b0.cbc=function(i){i=i||{},this.name="CBC",this.cipher=i.cipher,this.blockSize=i.blockSize||16,this._ints=this.blockSize/4,this._inBlock=new Array(this._ints),this._outBlock=new Array(this._ints)};b0.cbc.prototype.start=function(i){if(i.iv===null){if(!this._prev)throw new Error("Invalid IV parameter.");this._iv=this._prev.slice(0)}else if("iv"in i)this._iv=Pl(i.iv,this.blockSize),this._prev=this._iv.slice(0);else throw new Error("Invalid IV parameter.")};b0.cbc.prototype.encrypt=function(i,e,u){if(i.length()0))return!0;for(var r=0;r0))return!0;for(var r=0;r0)return!1;var u=i.length(),r=i.at(u-1);return r>this.blockSize<<2?!1:(i.truncate(r),!0)};b0.cfb=function(i){i=i||{},this.name="CFB",this.cipher=i.cipher,this.blockSize=i.blockSize||16,this._ints=this.blockSize/4,this._inBlock=null,this._outBlock=new Array(this._ints),this._partialBlock=new Array(this._ints),this._partialOutput=Ce.util.createBuffer(),this._partialBytes=0};b0.cfb.prototype.start=function(i){if(!("iv"in i))throw new Error("Invalid IV parameter.");this._iv=Pl(i.iv,this.blockSize),this._inBlock=this._iv.slice(0),this._partialBytes=0};b0.cfb.prototype.encrypt=function(i,e,u){var r=i.length();if(r===0)return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),this._partialBytes===0&&r>=this.blockSize){for(var a=0;a0&&(s=this.blockSize-s),this._partialOutput.clear();for(var a=0;a0)i.read-=this.blockSize;else for(var a=0;a0&&this._partialOutput.getBytes(this._partialBytes),s>0&&!u)return e.putBytes(this._partialOutput.getBytes(s-this._partialBytes)),this._partialBytes=s,!0;e.putBytes(this._partialOutput.getBytes(r-this._partialBytes)),this._partialBytes=0};b0.cfb.prototype.decrypt=function(i,e,u){var r=i.length();if(r===0)return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),this._partialBytes===0&&r>=this.blockSize){for(var a=0;a0&&(s=this.blockSize-s),this._partialOutput.clear();for(var a=0;a0)i.read-=this.blockSize;else for(var a=0;a0&&this._partialOutput.getBytes(this._partialBytes),s>0&&!u)return e.putBytes(this._partialOutput.getBytes(s-this._partialBytes)),this._partialBytes=s,!0;e.putBytes(this._partialOutput.getBytes(r-this._partialBytes)),this._partialBytes=0};b0.ofb=function(i){i=i||{},this.name="OFB",this.cipher=i.cipher,this.blockSize=i.blockSize||16,this._ints=this.blockSize/4,this._inBlock=null,this._outBlock=new Array(this._ints),this._partialOutput=Ce.util.createBuffer(),this._partialBytes=0};b0.ofb.prototype.start=function(i){if(!("iv"in i))throw new Error("Invalid IV parameter.");this._iv=Pl(i.iv,this.blockSize),this._inBlock=this._iv.slice(0),this._partialBytes=0};b0.ofb.prototype.encrypt=function(i,e,u){var r=i.length();if(i.length()===0)return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),this._partialBytes===0&&r>=this.blockSize){for(var a=0;a0&&(s=this.blockSize-s),this._partialOutput.clear();for(var a=0;a0)i.read-=this.blockSize;else for(var a=0;a0&&this._partialOutput.getBytes(this._partialBytes),s>0&&!u)return e.putBytes(this._partialOutput.getBytes(s-this._partialBytes)),this._partialBytes=s,!0;e.putBytes(this._partialOutput.getBytes(r-this._partialBytes)),this._partialBytes=0};b0.ofb.prototype.decrypt=b0.ofb.prototype.encrypt;b0.ctr=function(i){i=i||{},this.name="CTR",this.cipher=i.cipher,this.blockSize=i.blockSize||16,this._ints=this.blockSize/4,this._inBlock=null,this._outBlock=new Array(this._ints),this._partialOutput=Ce.util.createBuffer(),this._partialBytes=0};b0.ctr.prototype.start=function(i){if(!("iv"in i))throw new Error("Invalid IV parameter.");this._iv=Pl(i.iv,this.blockSize),this._inBlock=this._iv.slice(0),this._partialBytes=0};b0.ctr.prototype.encrypt=function(i,e,u){var r=i.length();if(r===0)return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),this._partialBytes===0&&r>=this.blockSize)for(var a=0;a0&&(s=this.blockSize-s),this._partialOutput.clear();for(var a=0;a0&&(i.read-=this.blockSize),this._partialBytes>0&&this._partialOutput.getBytes(this._partialBytes),s>0&&!u)return e.putBytes(this._partialOutput.getBytes(s-this._partialBytes)),this._partialBytes=s,!0;e.putBytes(this._partialOutput.getBytes(r-this._partialBytes)),this._partialBytes=0}kl(this._inBlock)};b0.ctr.prototype.decrypt=b0.ctr.prototype.encrypt;b0.gcm=function(i){i=i||{},this.name="GCM",this.cipher=i.cipher,this.blockSize=i.blockSize||16,this._ints=this.blockSize/4,this._inBlock=new Array(this._ints),this._outBlock=new Array(this._ints),this._partialOutput=Ce.util.createBuffer(),this._partialBytes=0,this._R=3774873600};b0.gcm.prototype.start=function(i){if(!("iv"in i))throw new Error("Invalid IV parameter.");var e=Ce.util.createBuffer(i.iv);this._cipherLength=0;var u;if("additionalData"in i?u=Ce.util.createBuffer(i.additionalData):u=Ce.util.createBuffer(),"tagLength"in i?this._tagLength=i.tagLength:this._tagLength=128,this._tag=null,i.decrypt&&(this._tag=Ce.util.createBuffer(i.tag).getBytes(),this._tag.length!==this._tagLength/8))throw new Error("Authentication tag does not match tag length.");this._hashBlock=new Array(this._ints),this.tag=null,this._hashSubkey=new Array(this._ints),this.cipher.encrypt([0,0,0,0],this._hashSubkey),this.componentBits=4,this._m=this.generateHashTable(this._hashSubkey,this.componentBits);var r=e.length();if(r===12)this._j0=[e.getInt32(),e.getInt32(),e.getInt32(),1];else{for(this._j0=[0,0,0,0];e.length()>0;)this._j0=this.ghash(this._hashSubkey,this._j0,[e.getInt32(),e.getInt32(),e.getInt32(),e.getInt32()]);this._j0=this.ghash(this._hashSubkey,this._j0,[0,0].concat(Jp(r*8)))}this._inBlock=this._j0.slice(0),kl(this._inBlock),this._partialBytes=0,u=Ce.util.createBuffer(u),this._aDataLength=Jp(u.length()*8);var a=u.length()%this.blockSize;for(a&&u.fillWithByte(0,this.blockSize-a),this._s=[0,0,0,0];u.length()>0;)this._s=this.ghash(this._hashSubkey,this._s,[u.getInt32(),u.getInt32(),u.getInt32(),u.getInt32()])};b0.gcm.prototype.encrypt=function(i,e,u){var r=i.length();if(r===0)return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),this._partialBytes===0&&r>=this.blockSize){for(var a=0;a0&&(s=this.blockSize-s),this._partialOutput.clear();for(var a=0;a0&&this._partialOutput.getBytes(this._partialBytes),s>0&&!u)return i.read-=this.blockSize,e.putBytes(this._partialOutput.getBytes(s-this._partialBytes)),this._partialBytes=s,!0;e.putBytes(this._partialOutput.getBytes(r-this._partialBytes)),this._partialBytes=0}this._s=this.ghash(this._hashSubkey,this._s,this._outBlock),kl(this._inBlock)};b0.gcm.prototype.decrypt=function(i,e,u){var r=i.length();if(r0))return!0;this.cipher.encrypt(this._inBlock,this._outBlock),kl(this._inBlock),this._hashBlock[0]=i.getInt32(),this._hashBlock[1]=i.getInt32(),this._hashBlock[2]=i.getInt32(),this._hashBlock[3]=i.getInt32(),this._s=this.ghash(this._hashSubkey,this._s,this._hashBlock);for(var a=0;a0;--r)e[r]=i[r]>>>1|(i[r-1]&1)<<31;e[0]=i[0]>>>1,u&&(e[0]^=this._R)};b0.gcm.prototype.tableMultiply=function(i){for(var e=[0,0,0,0],u=0;u<32;++u){var r=u/8|0,a=i[r]>>>(7-u%8)*4&15,s=this._m[u][a];e[0]^=s[0],e[1]^=s[1],e[2]^=s[2],e[3]^=s[3]}return e};b0.gcm.prototype.ghash=function(i,e,u){return e[0]^=u[0],e[1]^=u[1],e[2]^=u[2],e[3]^=u[3],this.tableMultiply(e)};b0.gcm.prototype.generateHashTable=function(i,e){for(var u=8/e,r=4*u,a=16*u,s=new Array(a),n=0;n>>1,a=new Array(u);a[r]=i.slice(0);for(var s=r>>>1;s>0;)this.pow(a[2*s],a[s]=[]),s>>=1;for(s=2;s4){var u=i;i=Ce.util.createBuffer();for(var r=0;r{var ue=y0();Ul();zp();H0();sM.exports=ue.aes=ue.aes||{};ue.aes.startEncrypting=function(i,e,u,r){var a=Fl({key:i,output:u,decrypt:!1,mode:r});return a.start(e),a};ue.aes.createEncryptionCipher=function(i,e){return Fl({key:i,output:null,decrypt:!1,mode:e})};ue.aes.startDecrypting=function(i,e,u,r){var a=Fl({key:i,output:u,decrypt:!0,mode:r});return a.start(e),a};ue.aes.createDecryptionCipher=function(i,e){return Fl({key:i,output:null,decrypt:!0,mode:e})};ue.aes.Algorithm=function(i,e){eh||iM();var u=this;u.name=i,u.mode=new e({blockSize:16,cipher:{encrypt:function(r,a){return Zp(u._w,r,a,!1)},decrypt:function(r,a){return Zp(u._w,r,a,!0)}}}),u._init=!1};ue.aes.Algorithm.prototype.initialize=function(i){if(!this._init){var e=i.key,u;if(typeof e=="string"&&(e.length===16||e.length===24||e.length===32))e=ue.util.createBuffer(e);else if(ue.util.isArray(e)&&(e.length===16||e.length===24||e.length===32)){u=e,e=ue.util.createBuffer();for(var r=0;r>>2;for(var r=0;r>8^l&255^99,Ze[u]=l,$p[l]=u,d=i[l],a=i[u],s=i[a],n=i[s],p=d<<24^l<<16^l<<8^(l^d),h=(a^s^n)<<24^(u^n)<<16^(u^s^n)<<8^(u^a^n);for(var f=0;f<4;++f)ti[f][u]=p,Wu[f][l]=h,p=p<<24|p>>>8,h=h<<24|h>>>8;u===0?u=r=1:(u=a^i[i[i[a^n]]],r^=i[i[r]])}}c(iM,"initialize");function aM(i,e){for(var u=i.slice(0),r,a=1,s=u.length,n=s+6+1,l=Sa*n,d=s;d>>16&255]<<24^Ze[r>>>8&255]<<16^Ze[r&255]<<8^Ze[r>>>24]^rM[a]<<24,a++):s>6&&d%s===4&&(r=Ze[r>>>24]<<24^Ze[r>>>16&255]<<16^Ze[r>>>8&255]<<8^Ze[r&255]),u[d]=u[d-s]^r;if(e){var p,h=Wu[0],f=Wu[1],S=Wu[2],_=Wu[3],O=u.slice(0);l=u.length;for(var d=0,E=l-Sa;d>>24]]^f[Ze[p>>>16&255]]^S[Ze[p>>>8&255]]^_[Ze[p&255]];u=O}return u}c(aM,"_expandKey");function Zp(i,e,u,r){var a=i.length/4-1,s,n,l,d,p;r?(s=Wu[0],n=Wu[1],l=Wu[2],d=Wu[3],p=$p):(s=ti[0],n=ti[1],l=ti[2],d=ti[3],p=Ze);var h,f,S,_,O,E,A;h=e[0]^i[0],f=e[r?3:1]^i[1],S=e[2]^i[2],_=e[r?1:3]^i[3];for(var g=3,D=1;D>>24]^n[f>>>16&255]^l[S>>>8&255]^d[_&255]^i[++g],E=s[f>>>24]^n[S>>>16&255]^l[_>>>8&255]^d[h&255]^i[++g],A=s[S>>>24]^n[_>>>16&255]^l[h>>>8&255]^d[f&255]^i[++g],_=s[_>>>24]^n[h>>>16&255]^l[f>>>8&255]^d[S&255]^i[++g],h=O,f=E,S=A;u[0]=p[h>>>24]<<24^p[f>>>16&255]<<16^p[S>>>8&255]<<8^p[_&255]^i[++g],u[r?3:1]=p[f>>>24]<<24^p[S>>>16&255]<<16^p[_>>>8&255]<<8^p[h&255]^i[++g],u[2]=p[S>>>24]<<24^p[_>>>16&255]<<16^p[h>>>8&255]<<8^p[f&255]^i[++g],u[r?1:3]=p[_>>>24]<<24^p[h>>>16&255]<<16^p[f>>>8&255]<<8^p[S&255]^i[++g]}c(Zp,"_updateBlock");function Fl(i){i=i||{};var e=(i.mode||"CBC").toUpperCase(),u="AES-"+e,r;i.decrypt?r=ue.cipher.createDecipher(u,i.key):r=ue.cipher.createCipher(u,i.key);var a=r.start;return r.start=function(s,n){var l=null;n instanceof ue.util.ByteBuffer&&(l=n,n={}),n=n||{},n.output=l,n.iv=s,a.call(r,n)},r}c(Fl,"_createCipher")});var Or=b((fW,nM)=>{var Tn=y0();Tn.pki=Tn.pki||{};var uh=nM.exports=Tn.pki.oids=Tn.oids=Tn.oids||{};function s0(i,e){uh[i]=e,uh[e]=i}c(s0,"_IN");function X0(i,e){uh[i]=e}c(X0,"_I_");s0("1.2.840.113549.1.1.1","rsaEncryption");s0("1.2.840.113549.1.1.4","md5WithRSAEncryption");s0("1.2.840.113549.1.1.5","sha1WithRSAEncryption");s0("1.2.840.113549.1.1.7","RSAES-OAEP");s0("1.2.840.113549.1.1.8","mgf1");s0("1.2.840.113549.1.1.9","pSpecified");s0("1.2.840.113549.1.1.10","RSASSA-PSS");s0("1.2.840.113549.1.1.11","sha256WithRSAEncryption");s0("1.2.840.113549.1.1.12","sha384WithRSAEncryption");s0("1.2.840.113549.1.1.13","sha512WithRSAEncryption");s0("1.3.101.112","EdDSA25519");s0("1.2.840.10040.4.3","dsa-with-sha1");s0("1.3.14.3.2.7","desCBC");s0("1.3.14.3.2.26","sha1");s0("1.3.14.3.2.29","sha1WithRSASignature");s0("2.16.840.1.101.3.4.2.1","sha256");s0("2.16.840.1.101.3.4.2.2","sha384");s0("2.16.840.1.101.3.4.2.3","sha512");s0("2.16.840.1.101.3.4.2.4","sha224");s0("2.16.840.1.101.3.4.2.5","sha512-224");s0("2.16.840.1.101.3.4.2.6","sha512-256");s0("1.2.840.113549.2.2","md2");s0("1.2.840.113549.2.5","md5");s0("1.2.840.113549.1.7.1","data");s0("1.2.840.113549.1.7.2","signedData");s0("1.2.840.113549.1.7.3","envelopedData");s0("1.2.840.113549.1.7.4","signedAndEnvelopedData");s0("1.2.840.113549.1.7.5","digestedData");s0("1.2.840.113549.1.7.6","encryptedData");s0("1.2.840.113549.1.9.1","emailAddress");s0("1.2.840.113549.1.9.2","unstructuredName");s0("1.2.840.113549.1.9.3","contentType");s0("1.2.840.113549.1.9.4","messageDigest");s0("1.2.840.113549.1.9.5","signingTime");s0("1.2.840.113549.1.9.6","counterSignature");s0("1.2.840.113549.1.9.7","challengePassword");s0("1.2.840.113549.1.9.8","unstructuredAddress");s0("1.2.840.113549.1.9.14","extensionRequest");s0("1.2.840.113549.1.9.20","friendlyName");s0("1.2.840.113549.1.9.21","localKeyId");s0("1.2.840.113549.1.9.22.1","x509Certificate");s0("1.2.840.113549.1.12.10.1.1","keyBag");s0("1.2.840.113549.1.12.10.1.2","pkcs8ShroudedKeyBag");s0("1.2.840.113549.1.12.10.1.3","certBag");s0("1.2.840.113549.1.12.10.1.4","crlBag");s0("1.2.840.113549.1.12.10.1.5","secretBag");s0("1.2.840.113549.1.12.10.1.6","safeContentsBag");s0("1.2.840.113549.1.5.13","pkcs5PBES2");s0("1.2.840.113549.1.5.12","pkcs5PBKDF2");s0("1.2.840.113549.1.12.1.1","pbeWithSHAAnd128BitRC4");s0("1.2.840.113549.1.12.1.2","pbeWithSHAAnd40BitRC4");s0("1.2.840.113549.1.12.1.3","pbeWithSHAAnd3-KeyTripleDES-CBC");s0("1.2.840.113549.1.12.1.4","pbeWithSHAAnd2-KeyTripleDES-CBC");s0("1.2.840.113549.1.12.1.5","pbeWithSHAAnd128BitRC2-CBC");s0("1.2.840.113549.1.12.1.6","pbewithSHAAnd40BitRC2-CBC");s0("1.2.840.113549.2.7","hmacWithSHA1");s0("1.2.840.113549.2.8","hmacWithSHA224");s0("1.2.840.113549.2.9","hmacWithSHA256");s0("1.2.840.113549.2.10","hmacWithSHA384");s0("1.2.840.113549.2.11","hmacWithSHA512");s0("1.2.840.113549.3.7","des-EDE3-CBC");s0("2.16.840.1.101.3.4.1.2","aes128-CBC");s0("2.16.840.1.101.3.4.1.22","aes192-CBC");s0("2.16.840.1.101.3.4.1.42","aes256-CBC");s0("2.5.4.3","commonName");s0("2.5.4.4","surname");s0("2.5.4.5","serialNumber");s0("2.5.4.6","countryName");s0("2.5.4.7","localityName");s0("2.5.4.8","stateOrProvinceName");s0("2.5.4.9","streetAddress");s0("2.5.4.10","organizationName");s0("2.5.4.11","organizationalUnitName");s0("2.5.4.12","title");s0("2.5.4.13","description");s0("2.5.4.15","businessCategory");s0("2.5.4.17","postalCode");s0("2.5.4.42","givenName");s0("1.3.6.1.4.1.311.60.2.1.2","jurisdictionOfIncorporationStateOrProvinceName");s0("1.3.6.1.4.1.311.60.2.1.3","jurisdictionOfIncorporationCountryName");s0("2.16.840.1.113730.1.1","nsCertType");s0("2.16.840.1.113730.1.13","nsComment");X0("2.5.29.1","authorityKeyIdentifier");X0("2.5.29.2","keyAttributes");X0("2.5.29.3","certificatePolicies");X0("2.5.29.4","keyUsageRestriction");X0("2.5.29.5","policyMapping");X0("2.5.29.6","subtreesConstraint");X0("2.5.29.7","subjectAltName");X0("2.5.29.8","issuerAltName");X0("2.5.29.9","subjectDirectoryAttributes");X0("2.5.29.10","basicConstraints");X0("2.5.29.11","nameConstraints");X0("2.5.29.12","policyConstraints");X0("2.5.29.13","basicConstraints");s0("2.5.29.14","subjectKeyIdentifier");s0("2.5.29.15","keyUsage");X0("2.5.29.16","privateKeyUsagePeriod");s0("2.5.29.17","subjectAltName");s0("2.5.29.18","issuerAltName");s0("2.5.29.19","basicConstraints");X0("2.5.29.20","cRLNumber");X0("2.5.29.21","cRLReason");X0("2.5.29.22","expirationDate");X0("2.5.29.23","instructionCode");X0("2.5.29.24","invalidityDate");X0("2.5.29.25","cRLDistributionPoints");X0("2.5.29.26","issuingDistributionPoint");X0("2.5.29.27","deltaCRLIndicator");X0("2.5.29.28","issuingDistributionPoint");X0("2.5.29.29","certificateIssuer");X0("2.5.29.30","nameConstraints");s0("2.5.29.31","cRLDistributionPoints");s0("2.5.29.32","certificatePolicies");X0("2.5.29.33","policyMappings");X0("2.5.29.34","policyConstraints");s0("2.5.29.35","authorityKeyIdentifier");X0("2.5.29.36","policyConstraints");s0("2.5.29.37","extKeyUsage");X0("2.5.29.46","freshestCRL");X0("2.5.29.54","inhibitAnyPolicy");s0("1.3.6.1.4.1.11129.2.4.2","timestampList");s0("1.3.6.1.5.5.7.1.1","authorityInfoAccess");s0("1.3.6.1.5.5.7.3.1","serverAuth");s0("1.3.6.1.5.5.7.3.2","clientAuth");s0("1.3.6.1.5.5.7.3.3","codeSigning");s0("1.3.6.1.5.5.7.3.4","emailProtection");s0("1.3.6.1.5.5.7.3.8","timeStamping")});var ju=b((OW,lM)=>{var ie=y0();H0();Or();var p0=lM.exports=ie.asn1=ie.asn1||{};p0.Class={UNIVERSAL:0,APPLICATION:64,CONTEXT_SPECIFIC:128,PRIVATE:192};p0.Type={NONE:0,BOOLEAN:1,INTEGER:2,BITSTRING:3,OCTETSTRING:4,NULL:5,OID:6,ODESC:7,EXTERNAL:8,REAL:9,ENUMERATED:10,EMBEDDED:11,UTF8:12,ROID:13,SEQUENCE:16,SET:17,PRINTABLESTRING:19,IA5STRING:22,UTCTIME:23,GENERALIZEDTIME:24,BMPSTRING:30};p0.create=function(i,e,u,r,a){if(ie.util.isArray(r)){for(var s=[],n=0;ne){var r=new Error("Too few bytes to parse DER.");throw r.available=i.length(),r.remaining=e,r.requested=u,r}}c(Yn,"_checkBufferLength");var $I=c(function(i,e){var u=i.getByte();if(e--,u!==128){var r,a=u&128;if(!a)r=u;else{var s=u&127;Yn(i,e,s),r=i.getInt(s<<3)}if(r<0)throw new Error("Negative length: "+r);return r}},"_getValueLength");p0.fromDer=function(i,e){e===void 0&&(e={strict:!0,parseAllBytes:!0,decodeBitStrings:!0}),typeof e=="boolean"&&(e={strict:e,parseAllBytes:!0,decodeBitStrings:!0}),"strict"in e||(e.strict=!0),"parseAllBytes"in e||(e.parseAllBytes=!0),"decodeBitStrings"in e||(e.decodeBitStrings=!0),typeof i=="string"&&(i=ie.util.createBuffer(i));var u=i.length(),r=Hl(i,i.length(),0,e);if(e.parseAllBytes&&i.length()!==0){var a=new Error("Unparsed DER bytes remain after ASN.1 parsing.");throw a.byteCount=u,a.remaining=i.length(),a}return r};function Hl(i,e,u,r){var a;Yn(i,e,2);var s=i.getByte();e--;var n=s&192,l=s&31;a=i.length();var d=$I(i,e);if(e-=a-i.length(),d!==void 0&&d>e){if(r.strict){var p=new Error("Too few bytes to read ASN.1 value.");throw p.available=i.length(),p.remaining=e,p.requested=d,p}d=e}var h,f,S=(s&32)===32;if(S)if(h=[],d===void 0)for(;;){if(Yn(i,e,2),i.bytes(2)==="\0\0"){i.getBytes(2),e-=2;break}a=i.length(),h.push(Hl(i,e,u+1,r)),e-=a-i.length()}else for(;d>0;)a=i.length(),h.push(Hl(i,d,u+1,r)),e-=a-i.length(),d-=a-i.length();if(h===void 0&&n===p0.Class.UNIVERSAL&&l===p0.Type.BITSTRING&&(f=i.bytes(d)),h===void 0&&r.decodeBitStrings&&n===p0.Class.UNIVERSAL&&l===p0.Type.BITSTRING&&d>1){var _=i.read,O=e,E=0;if(l===p0.Type.BITSTRING&&(Yn(i,e,1),E=i.getByte(),e--),E===0)try{a=i.length();var A={strict:!0,decodeBitStrings:!0},g=Hl(i,e,u+1,A),D=a-i.length();e-=D,l==p0.Type.BITSTRING&&D++;var I=g.tagClass;D===d&&(I===p0.Class.UNIVERSAL||I===p0.Class.CONTEXT_SPECIFIC)&&(h=[g])}catch{}h===void 0&&(i.read=_,e=O)}if(h===void 0){if(d===void 0){if(r.strict)throw new Error("Non-constructed ASN.1 object of indefinite length.");d=e}if(l===p0.Type.BMPSTRING)for(h="";d>0;d-=2)Yn(i,e,2),h+=String.fromCharCode(i.getInt16()),e-=2;else h=i.getBytes(d),e-=d}var W=f===void 0?null:{bitStringContents:f};return p0.create(n,l,S,h,W)}c(Hl,"_fromDer");p0.toDer=function(i){var e=ie.util.createBuffer(),u=i.tagClass|i.type,r=ie.util.createBuffer(),a=!1;if("bitStringContents"in i&&(a=!0,i.original&&(a=p0.equals(i,i.original))),a)r.putBytes(i.bitStringContents);else if(i.composed){i.constructed?u|=32:r.putByte(0);for(var s=0;s1&&(i.value.charCodeAt(0)===0&&!(i.value.charCodeAt(1)&128)||i.value.charCodeAt(0)===255&&(i.value.charCodeAt(1)&128)===128)?r.putBytes(i.value.substr(1)):r.putBytes(i.value);if(e.putByte(u),r.length()<=127)e.putByte(r.length()&127);else{var n=r.length(),l="";do l+=String.fromCharCode(n&255),n=n>>>8;while(n>0);e.putByte(l.length|128);for(var s=l.length-1;s>=0;--s)e.putByte(l.charCodeAt(s))}return e.putBuffer(r),e};p0.oidToDer=function(i){var e=i.split("."),u=ie.util.createBuffer();u.putByte(40*parseInt(e[0],10)+parseInt(e[1],10));for(var r,a,s,n,l=2;l>>7,r||(n|=128),a.push(n),r=!1;while(s>0);for(var d=a.length-1;d>=0;--d)u.putByte(a[d])}return u};p0.derToOid=function(i){var e;typeof i=="string"&&(i=ie.util.createBuffer(i));var u=i.getByte();e=Math.floor(u/40)+"."+u%40;for(var r=0;i.length()>0;)u=i.getByte(),r=r<<7,u&128?r+=u&127:(e+="."+(r+u),r=0);return e};p0.utcTimeToDate=function(i){var e=new Date,u=parseInt(i.substr(0,2),10);u=u>=50?1900+u:2e3+u;var r=parseInt(i.substr(2,2),10)-1,a=parseInt(i.substr(4,2),10),s=parseInt(i.substr(6,2),10),n=parseInt(i.substr(8,2),10),l=0;if(i.length>11){var d=i.charAt(10),p=10;d!=="+"&&d!=="-"&&(l=parseInt(i.substr(10,2),10),p+=2)}if(e.setUTCFullYear(u,r,a),e.setUTCHours(s,n,l,0),p&&(d=i.charAt(p),d==="+"||d==="-")){var h=parseInt(i.substr(p+1,2),10),f=parseInt(i.substr(p+4,2),10),S=h*60+f;S*=6e4,d==="+"?e.setTime(+e-S):e.setTime(+e+S)}return e};p0.generalizedTimeToDate=function(i){var e=new Date,u=parseInt(i.substr(0,4),10),r=parseInt(i.substr(4,2),10)-1,a=parseInt(i.substr(6,2),10),s=parseInt(i.substr(8,2),10),n=parseInt(i.substr(10,2),10),l=parseInt(i.substr(12,2),10),d=0,p=0,h=!1;i.charAt(i.length-1)==="Z"&&(h=!0);var f=i.length-5,S=i.charAt(f);if(S==="+"||S==="-"){var _=parseInt(i.substr(f+1,2),10),O=parseInt(i.substr(f+4,2),10);p=_*60+O,p*=6e4,S==="+"&&(p*=-1),h=!0}return i.charAt(14)==="."&&(d=parseFloat(i.substr(14),10)*1e3),h?(e.setUTCFullYear(u,r,a),e.setUTCHours(s,n,l,d),e.setTime(+e+p)):(e.setFullYear(u,r,a),e.setHours(s,n,l,d)),e};p0.dateToUtcTime=function(i){if(typeof i=="string")return i;var e="",u=[];u.push((""+i.getUTCFullYear()).substr(2)),u.push(""+(i.getUTCMonth()+1)),u.push(""+i.getUTCDate()),u.push(""+i.getUTCHours()),u.push(""+i.getUTCMinutes()),u.push(""+i.getUTCSeconds());for(var r=0;r=-128&&i<128)return e.putSignedInt(i,8);if(i>=-32768&&i<32768)return e.putSignedInt(i,16);if(i>=-8388608&&i<8388608)return e.putSignedInt(i,24);if(i>=-2147483648&&i<2147483648)return e.putSignedInt(i,32);var u=new Error("Integer too large; max is 32-bits.");throw u.integer=i,u};p0.derToInteger=function(i){typeof i=="string"&&(i=ie.util.createBuffer(i));var e=i.length()*8;if(e>32)throw new Error("Integer too large; max is 32-bits.");return i.getSignedInt(e)};p0.validate=function(i,e,u,r){var a=!1;if((i.tagClass===e.tagClass||typeof e.tagClass>"u")&&(i.type===e.type||typeof e.type>"u"))if(i.constructed===e.constructed||typeof e.constructed>"u"){if(a=!0,e.value&&ie.util.isArray(e.value))for(var s=0,n=0;a&&n0&&(r+=` +`);for(var a="",s=0;s1?r+="0x"+ie.util.bytesToHex(i.value.slice(1)):r+="(none)",i.value.length>0){var p=i.value.charCodeAt(0);p==1?r+=" (1 unused bit shown)":p>1&&(r+=" ("+p+" unused bits shown)")}}else if(i.type===p0.Type.OCTETSTRING)oM.test(i.value)||(r+="("+i.value+") "),r+="0x"+ie.util.bytesToHex(i.value);else if(i.type===p0.Type.UTF8)try{r+=ie.util.decodeUtf8(i.value)}catch(h){if(h.message==="URI malformed")r+="0x"+ie.util.bytesToHex(i.value)+" (malformed UTF8)";else throw h}else i.type===p0.Type.PRINTABLESTRING||i.type===p0.Type.IA5String?r+=i.value:oM.test(i.value)?r+="0x"+ie.util.bytesToHex(i.value):i.value.length===0?r+="[null]":r+=i.value}return r}});var ht=b((EW,cM)=>{var Vl=y0();cM.exports=Vl.md=Vl.md||{};Vl.md.algorithms=Vl.md.algorithms||{}});var La=b((BW,dM)=>{var Dt=y0();ht();H0();var ZI=dM.exports=Dt.hmac=Dt.hmac||{};ZI.create=function(){var i=null,e=null,u=null,r=null,a={};return a.start=function(s,n){if(s!==null)if(typeof s=="string")if(s=s.toLowerCase(),s in Dt.md.algorithms)e=Dt.md.algorithms[s].create();else throw new Error('Unknown hash algorithm "'+s+'"');else e=s;if(n===null)n=i;else{if(typeof n=="string")n=Dt.util.createBuffer(n);else if(Dt.util.isArray(n)){var l=n;n=Dt.util.createBuffer();for(var d=0;de.blockLength&&(e.start(),e.update(n.bytes()),n=e.digest()),u=Dt.util.createBuffer(),r=Dt.util.createBuffer(),p=n.length();for(var d=0;d{var ft=y0();ht();H0();var hM=SM.exports=ft.md5=ft.md5||{};ft.md.md5=ft.md.algorithms.md5=hM;hM.create=function(){fM||eb();var i=null,e=ft.util.createBuffer(),u=new Array(16),r={algorithm:"md5",blockLength:64,digestLength:16,messageLength:0,fullMessageLength:null,messageLengthSize:8};return r.start=function(){r.messageLength=0,r.fullMessageLength=r.messageLength64=[];for(var a=r.messageLengthSize/4,s=0;s>>0,n>>>0];for(var l=r.fullMessageLength.length-1;l>=0;--l)r.fullMessageLength[l]+=n[1],n[1]=n[0]+(r.fullMessageLength[l]/4294967296>>>0),r.fullMessageLength[l]=r.fullMessageLength[l]>>>0,n[0]=n[1]/4294967296>>>0;return e.putBytes(a),pM(i,u,e),(e.read>2048||e.length()===0)&&e.compact(),r},r.digest=function(){var a=ft.util.createBuffer();a.putBytes(e.bytes());var s=r.fullMessageLength[r.fullMessageLength.length-1]+r.messageLengthSize,n=s&r.blockLength-1;a.putBytes(th.substr(0,r.blockLength-n));for(var l,d=0,p=r.fullMessageLength.length-1;p>=0;--p)l=r.fullMessageLength[p]*8+d,d=l/4294967296>>>0,a.putInt32Le(l>>>0);var h={h0:i.h0,h1:i.h1,h2:i.h2,h3:i.h3};pM(h,u,a);var f=ft.util.createBuffer();return f.putInt32Le(h.h0),f.putInt32Le(h.h1),f.putInt32Le(h.h2),f.putInt32Le(h.h3),f},r};var th=null,Gl=null,An=null,Ea=null,fM=!1;function eb(){th="\x80",th+=ft.util.fillString("\0",64),Gl=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,1,6,11,0,5,10,15,4,9,14,3,8,13,2,7,12,5,8,11,14,1,4,7,10,13,0,3,6,9,12,15,2,0,7,14,5,12,3,10,1,8,15,6,13,4,11,2,9],An=[7,12,17,22,7,12,17,22,7,12,17,22,7,12,17,22,5,9,14,20,5,9,14,20,5,9,14,20,5,9,14,20,4,11,16,23,4,11,16,23,4,11,16,23,4,11,16,23,6,10,15,21,6,10,15,21,6,10,15,21,6,10,15,21],Ea=new Array(64);for(var i=0;i<64;++i)Ea[i]=Math.floor(Math.abs(Math.sin(i+1))*4294967296);fM=!0}c(eb,"_init");function pM(i,e,u){for(var r,a,s,n,l,d,p,h,f=u.length();f>=64;){for(a=i.h0,s=i.h1,n=i.h2,l=i.h3,h=0;h<16;++h)e[h]=u.getInt32Le(),d=l^s&(n^l),r=a+d+Ea[h]+e[h],p=An[h],a=l,l=n,n=s,s+=r<>>32-p;for(;h<32;++h)d=n^l&(s^n),r=a+d+Ea[h]+e[Gl[h]],p=An[h],a=l,l=n,n=s,s+=r<>>32-p;for(;h<48;++h)d=s^n^l,r=a+d+Ea[h]+e[Gl[h]],p=An[h],a=l,l=n,n=s,s+=r<>>32-p;for(;h<64;++h)d=n^(s|~l),r=a+d+Ea[h]+e[Gl[h]],p=An[h],a=l,l=n,n=s,s+=r<>>32-p;i.h0=i.h0+a|0,i.h1=i.h1+s|0,i.h2=i.h2+n|0,i.h3=i.h3+l|0,f-=64}}c(pM,"_update")});var ri=b((_W,LM)=>{var Wl=y0();H0();var OM=LM.exports=Wl.pem=Wl.pem||{};OM.encode=function(i,e){e=e||{};var u="-----BEGIN "+i.type+`-----\r +`,r;if(i.procType&&(r={name:"Proc-Type",values:[String(i.procType.version),i.procType.type]},u+=Kl(r)),i.contentDomain&&(r={name:"Content-Domain",values:[i.contentDomain]},u+=Kl(r)),i.dekInfo&&(r={name:"DEK-Info",values:[i.dekInfo.algorithm]},i.dekInfo.parameters&&r.values.push(i.dekInfo.parameters),u+=Kl(r)),i.headers)for(var a=0;a65&&n!==-1){var l=e[n];l===","?(++n,e=e.substr(0,n)+`\r + `+e.substr(n)):e=e.substr(0,n)+`\r +`+l+e.substr(n+1),s=a-n-1,n=-1,++a}else(e[a]===" "||e[a]===" "||e[a]===",")&&(n=a);return e}c(Kl,"foldHeader");function ub(i){return i.replace(/^\s+/,"")}c(ub,"ltrim")});var Rn=b((YW,BM)=>{var ne=y0();Ul();zp();H0();BM.exports=ne.des=ne.des||{};ne.des.startEncrypting=function(i,e,u,r){var a=jl({key:i,output:u,decrypt:!1,mode:r||(e===null?"ECB":"CBC")});return a.start(e),a};ne.des.createEncryptionCipher=function(i,e){return jl({key:i,output:null,decrypt:!1,mode:e})};ne.des.startDecrypting=function(i,e,u,r){var a=jl({key:i,output:u,decrypt:!0,mode:r||(e===null?"ECB":"CBC")});return a.start(e),a};ne.des.createDecryptionCipher=function(i,e){return jl({key:i,output:null,decrypt:!0,mode:e})};ne.des.Algorithm=function(i,e){var u=this;u.name=i,u.mode=new e({blockSize:8,cipher:{encrypt:function(r,a){return EM(u._keys,r,a,!1)},decrypt:function(r,a){return EM(u._keys,r,a,!0)}}}),u._init=!1};ne.des.Algorithm.prototype.initialize=function(i){if(!this._init){var e=ne.util.createBuffer(i.key);if(this.name.indexOf("3DES")===0&&e.length()!==24)throw new Error("Invalid Triple-DES key size: "+e.length()*8);this._keys=cb(e),this._init=!0}};St("DES-ECB",ne.cipher.modes.ecb);St("DES-CBC",ne.cipher.modes.cbc);St("DES-CFB",ne.cipher.modes.cfb);St("DES-OFB",ne.cipher.modes.ofb);St("DES-CTR",ne.cipher.modes.ctr);St("3DES-ECB",ne.cipher.modes.ecb);St("3DES-CBC",ne.cipher.modes.cbc);St("3DES-CFB",ne.cipher.modes.cfb);St("3DES-OFB",ne.cipher.modes.ofb);St("3DES-CTR",ne.cipher.modes.ctr);function St(i,e){var u=c(function(){return new ne.des.Algorithm(i,e)},"factory");ne.cipher.registerAlgorithm(i,u)}c(St,"registerAlgorithm");var tb=[16843776,0,65536,16843780,16842756,66564,4,65536,1024,16843776,16843780,1024,16778244,16842756,16777216,4,1028,16778240,16778240,66560,66560,16842752,16842752,16778244,65540,16777220,16777220,65540,0,1028,66564,16777216,65536,16843780,4,16842752,16843776,16777216,16777216,1024,16842756,65536,66560,16777220,1024,4,16778244,66564,16843780,65540,16842752,16778244,16777220,1028,66564,16843776,1028,16778240,16778240,0,65540,66560,0,16842756],rb=[-2146402272,-2147450880,32768,1081376,1048576,32,-2146435040,-2147450848,-2147483616,-2146402272,-2146402304,-2147483648,-2147450880,1048576,32,-2146435040,1081344,1048608,-2147450848,0,-2147483648,32768,1081376,-2146435072,1048608,-2147483616,0,1081344,32800,-2146402304,-2146435072,32800,0,1081376,-2146435040,1048576,-2147450848,-2146435072,-2146402304,32768,-2146435072,-2147450880,32,-2146402272,1081376,32,32768,-2147483648,32800,-2146402304,1048576,-2147483616,1048608,-2147450848,-2147483616,1048608,1081344,0,-2147450880,32800,-2147483648,-2146435040,-2146402272,1081344],ib=[520,134349312,0,134348808,134218240,0,131592,134218240,131080,134217736,134217736,131072,134349320,131080,134348800,520,134217728,8,134349312,512,131584,134348800,134348808,131592,134218248,131584,131072,134218248,8,134349320,512,134217728,134349312,134217728,131080,520,131072,134349312,134218240,0,512,131080,134349320,134218240,134217736,512,0,134348808,134218248,131072,134217728,134349320,8,131592,131584,134217736,134348800,134218248,520,134348800,131592,8,134348808,131584],ab=[8396801,8321,8321,128,8396928,8388737,8388609,8193,0,8396800,8396800,8396929,129,0,8388736,8388609,1,8192,8388608,8396801,128,8388608,8193,8320,8388737,1,8320,8388736,8192,8396928,8396929,129,8388736,8388609,8396800,8396929,129,0,0,8396800,8320,8388736,8388737,1,8396801,8321,8321,128,8396929,129,1,8192,8388609,8193,8396928,8388737,8193,8320,8388608,8396801,128,8388608,8192,8396928],sb=[256,34078976,34078720,1107296512,524288,256,1073741824,34078720,1074266368,524288,33554688,1074266368,1107296512,1107820544,524544,1073741824,33554432,1074266112,1074266112,0,1073742080,1107820800,1107820800,33554688,1107820544,1073742080,0,1107296256,34078976,33554432,1107296256,524544,524288,1107296512,256,33554432,1073741824,34078720,1107296512,1074266368,33554688,1073741824,1107820544,34078976,1074266368,256,33554432,1107820544,1107820800,524544,1107296256,1107820800,34078720,0,1074266112,1107296256,524544,33554688,1073742080,524288,0,1074266112,34078976,1073742080],nb=[536870928,541065216,16384,541081616,541065216,16,541081616,4194304,536887296,4210704,4194304,536870928,4194320,536887296,536870912,16400,0,4194320,536887312,16384,4210688,536887312,16,541065232,541065232,0,4210704,541081600,16400,4210688,541081600,536870912,536887296,16,541065232,4210688,541081616,4194304,16400,536870928,4194304,536887296,536870912,16400,536870928,541081616,4210688,541065216,4210704,541081600,0,541065232,16,16384,541065216,4210704,16384,4194320,536887312,0,541081600,536870912,4194320,536887312],ob=[2097152,69206018,67110914,0,2048,67110914,2099202,69208064,69208066,2097152,0,67108866,2,67108864,69206018,2050,67110912,2099202,2097154,67110912,67108866,69206016,69208064,2097154,69206016,2048,2050,69208066,2099200,2,67108864,2099200,67108864,2099200,2097152,67110914,67110914,69206018,69206018,2,2097154,67108864,67110912,2097152,69208064,2050,2099202,69208064,2050,67108866,69208066,69206016,2099200,0,2,69208066,0,2099202,69206016,2048,67108866,67110912,2048,2097154],lb=[268439616,4096,262144,268701760,268435456,268439616,64,268435456,262208,268697600,268701760,266240,268701696,266304,4096,64,268697600,268435520,268439552,4160,266240,262208,268697664,268701696,4160,0,0,268697664,268435520,268439552,266304,262144,266304,262144,268701696,4096,64,268697664,4096,266304,268439552,64,268435520,268697600,268697664,268435456,262144,268439616,0,268701760,262208,268435520,268697600,268439552,268439616,0,268701760,266240,266240,4160,4160,262208,268435456,268701696];function cb(i){for(var e=[0,4,536870912,536870916,65536,65540,536936448,536936452,512,516,536871424,536871428,66048,66052,536936960,536936964],u=[0,1,1048576,1048577,67108864,67108865,68157440,68157441,256,257,1048832,1048833,67109120,67109121,68157696,68157697],r=[0,8,2048,2056,16777216,16777224,16779264,16779272,0,8,2048,2056,16777216,16777224,16779264,16779272],a=[0,2097152,134217728,136314880,8192,2105344,134225920,136323072,131072,2228224,134348800,136445952,139264,2236416,134356992,136454144],s=[0,262144,16,262160,0,262144,16,262160,4096,266240,4112,266256,4096,266240,4112,266256],n=[0,1024,32,1056,0,1024,32,1056,33554432,33555456,33554464,33555488,33554432,33555456,33554464,33555488],l=[0,268435456,524288,268959744,2,268435458,524290,268959746,0,268435456,524288,268959744,2,268435458,524290,268959746],d=[0,65536,2048,67584,536870912,536936448,536872960,536938496,131072,196608,133120,198656,537001984,537067520,537004032,537069568],p=[0,262144,0,262144,2,262146,2,262146,33554432,33816576,33554432,33816576,33554434,33816578,33554434,33816578],h=[0,268435456,8,268435464,0,268435456,8,268435464,1024,268436480,1032,268436488,1024,268436480,1032,268436488],f=[0,32,0,32,1048576,1048608,1048576,1048608,8192,8224,8192,8224,1056768,1056800,1056768,1056800],S=[0,16777216,512,16777728,2097152,18874368,2097664,18874880,67108864,83886080,67109376,83886592,69206016,85983232,69206528,85983744],_=[0,4096,134217728,134221824,524288,528384,134742016,134746112,16,4112,134217744,134221840,524304,528400,134742032,134746128],O=[0,4,256,260,0,4,256,260,1,5,257,261,1,5,257,261],E=i.length()>8?3:1,A=[],g=[0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0],D=0,I,W=0;W>>4^N)&252645135,N^=I,Y^=I<<4,I=(N>>>-16^Y)&65535,Y^=I,N^=I<<-16,I=(Y>>>2^N)&858993459,N^=I,Y^=I<<2,I=(N>>>-16^Y)&65535,Y^=I,N^=I<<-16,I=(Y>>>1^N)&1431655765,N^=I,Y^=I<<1,I=(N>>>8^Y)&16711935,Y^=I,N^=I<<8,I=(Y>>>1^N)&1431655765,N^=I,Y^=I<<1,I=Y<<8|N>>>20&240,Y=N<<24|N<<8&16711680|N>>>8&65280|N>>>24&240,N=I;for(var w=0;w>>26,N=N<<2|N>>>26):(Y=Y<<1|Y>>>27,N=N<<1|N>>>27),Y&=-15,N&=-15;var G=e[Y>>>28]|u[Y>>>24&15]|r[Y>>>20&15]|a[Y>>>16&15]|s[Y>>>12&15]|n[Y>>>8&15]|l[Y>>>4&15],U=d[N>>>28]|p[N>>>24&15]|h[N>>>20&15]|f[N>>>16&15]|S[N>>>12&15]|_[N>>>8&15]|O[N>>>4&15];I=(U>>>16^G)&65535,A[D++]=G^I,A[D++]=U^I<<16}}return A}c(cb,"_createKeys");function EM(i,e,u,r){var a=i.length===32?3:9,s;a===3?s=r?[30,-2,-2]:[0,32,2]:s=r?[94,62,-2,32,64,2,30,-2,-2]:[0,32,2,62,30,-2,64,96,2];var n,l=e[0],d=e[1];n=(l>>>4^d)&252645135,d^=n,l^=n<<4,n=(l>>>16^d)&65535,d^=n,l^=n<<16,n=(d>>>2^l)&858993459,l^=n,d^=n<<2,n=(d>>>8^l)&16711935,l^=n,d^=n<<8,n=(l>>>1^d)&1431655765,d^=n,l^=n<<1,l=l<<1|l>>>31,d=d<<1|d>>>31;for(var p=0;p>>4|d<<28)^i[S+1];n=l,l=d,d=n^(rb[_>>>24&63]|ab[_>>>16&63]|nb[_>>>8&63]|lb[_&63]|tb[O>>>24&63]|ib[O>>>16&63]|sb[O>>>8&63]|ob[O&63])}n=l,l=d,d=n}l=l>>>1|l<<31,d=d>>>1|d<<31,n=(l>>>1^d)&1431655765,d^=n,l^=n<<1,n=(d>>>8^l)&16711935,l^=n,d^=n<<8,n=(d>>>2^l)&858993459,l^=n,d^=n<<2,n=(l>>>16^d)&65535,d^=n,l^=n<<16,n=(l>>>4^d)&252645135,d^=n,l^=n<<4,u[0]=l,u[1]=d}c(EM,"_updateBlock");function jl(i){i=i||{};var e=(i.mode||"CBC").toUpperCase(),u="DES-"+e,r;i.decrypt?r=ne.cipher.createDecipher(u,i.key):r=ne.cipher.createCipher(u,i.key);var a=r.start;return r.start=function(s,n){var l=null;n instanceof ne.util.ByteBuffer&&(l=n,n={}),n=n||{},n.output=l,n.iv=s,a.call(r,n)},r}c(jl,"_createCipher")});var Xl=b((RW,MM)=>{var eu=y0();La();ht();H0();var db=eu.pkcs5=eu.pkcs5||{},wt;eu.util.isNodejs&&!eu.options.usePureJavaScript&&(wt=require("crypto"));MM.exports=eu.pbkdf2=db.pbkdf2=function(i,e,u,r,a,s){if(typeof a=="function"&&(s=a,a=null),eu.util.isNodejs&&!eu.options.usePureJavaScript&&wt.pbkdf2&&(a===null||typeof a!="object")&&(wt.pbkdf2Sync.length>4||!a||a==="sha1"))return typeof a!="string"&&(a="sha1"),i=Buffer.from(i,"binary"),e=Buffer.from(e,"binary"),s?wt.pbkdf2Sync.length===4?wt.pbkdf2(i,e,u,r,function(I,W){if(I)return s(I);s(null,W.toString("binary"))}):wt.pbkdf2(i,e,u,r,a,function(I,W){if(I)return s(I);s(null,W.toString("binary"))}):wt.pbkdf2Sync.length===4?wt.pbkdf2Sync(i,e,u,r).toString("binary"):wt.pbkdf2Sync(i,e,u,r,a).toString("binary");if((typeof a>"u"||a===null)&&(a="sha1"),typeof a=="string"){if(!(a in eu.md.algorithms))throw new Error("Unknown hash algorithm: "+a);a=eu.md[a].create()}var n=a.digestLength;if(r>4294967295*n){var l=new Error("Derived key is too long.");if(s)return s(l);throw l}var d=Math.ceil(r/n),p=r-(d-1)*n,h=eu.hmac.create();h.start(a,i);var f="",S,_,O;if(!s){for(var E=1;E<=d;++E){h.start(null,null),h.update(e),h.update(eu.util.int32ToBytes(E)),S=O=h.digest().getBytes();for(var A=2;A<=u;++A)h.start(null,null),h.update(O),_=h.digest().getBytes(),S=eu.util.xorBytes(S,_,n),O=_;f+=Ed)return s(null,f);h.start(null,null),h.update(e),h.update(eu.util.int32ToBytes(E)),S=O=h.digest().getBytes(),A=2,D()}c(g,"outer");function D(){if(A<=u)return h.start(null,null),h.update(O),_=h.digest().getBytes(),S=eu.util.xorBytes(S,_,n),O=_,++A,eu.util.setImmediate(D);f+=E{var Ot=y0();ht();H0();var _M=AM.exports=Ot.sha256=Ot.sha256||{};Ot.md.sha256=Ot.md.algorithms.sha256=_M;_M.create=function(){TM||pb();var i=null,e=Ot.util.createBuffer(),u=new Array(64),r={algorithm:"sha256",blockLength:64,digestLength:32,messageLength:0,fullMessageLength:null,messageLengthSize:8};return r.start=function(){r.messageLength=0,r.fullMessageLength=r.messageLength64=[];for(var a=r.messageLengthSize/4,s=0;s>>0,n>>>0];for(var l=r.fullMessageLength.length-1;l>=0;--l)r.fullMessageLength[l]+=n[1],n[1]=n[0]+(r.fullMessageLength[l]/4294967296>>>0),r.fullMessageLength[l]=r.fullMessageLength[l]>>>0,n[0]=n[1]/4294967296>>>0;return e.putBytes(a),mM(i,u,e),(e.read>2048||e.length()===0)&&e.compact(),r},r.digest=function(){var a=Ot.util.createBuffer();a.putBytes(e.bytes());var s=r.fullMessageLength[r.fullMessageLength.length-1]+r.messageLengthSize,n=s&r.blockLength-1;a.putBytes(rh.substr(0,r.blockLength-n));for(var l,d,p=r.fullMessageLength[0]*8,h=0;h>>0,p+=d,a.putInt32(p>>>0),p=l>>>0;a.putInt32(p);var f={h0:i.h0,h1:i.h1,h2:i.h2,h3:i.h3,h4:i.h4,h5:i.h5,h6:i.h6,h7:i.h7};mM(f,u,a);var S=Ot.util.createBuffer();return S.putInt32(f.h0),S.putInt32(f.h1),S.putInt32(f.h2),S.putInt32(f.h3),S.putInt32(f.h4),S.putInt32(f.h5),S.putInt32(f.h6),S.putInt32(f.h7),S},r};var rh=null,TM=!1,YM=null;function pb(){rh="\x80",rh+=Ot.util.fillString("\0",64),YM=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],TM=!0}c(pb,"_init");function mM(i,e,u){for(var r,a,s,n,l,d,p,h,f,S,_,O,E,A,g,D=u.length();D>=64;){for(p=0;p<16;++p)e[p]=u.getInt32();for(;p<64;++p)r=e[p-2],r=(r>>>17|r<<15)^(r>>>19|r<<13)^r>>>10,a=e[p-15],a=(a>>>7|a<<25)^(a>>>18|a<<14)^a>>>3,e[p]=r+e[p-7]+a+e[p-16]|0;for(h=i.h0,f=i.h1,S=i.h2,_=i.h3,O=i.h4,E=i.h5,A=i.h6,g=i.h7,p=0;p<64;++p)n=(O>>>6|O<<26)^(O>>>11|O<<21)^(O>>>25|O<<7),l=A^O&(E^A),s=(h>>>2|h<<30)^(h>>>13|h<<19)^(h>>>22|h<<10),d=h&f|S&(h^f),r=g+n+l+YM[p]+e[p],a=s+d,g=A,A=E,E=O,O=_+r>>>0,_=S,S=f,f=h,h=r+a>>>0;i.h0=i.h0+h|0,i.h1=i.h1+f|0,i.h2=i.h2+S|0,i.h3=i.h3+_|0,i.h4=i.h4+O|0,i.h5=i.h5+E|0,i.h6=i.h6+A|0,i.h7=i.h7+g|0,D-=64}}c(mM,"_update")});var ah=b((CW,RM)=>{var Lt=y0();H0();var Ql=null;Lt.util.isNodejs&&!Lt.options.usePureJavaScript&&!process.versions["node-webkit"]&&(Ql=require("crypto"));var hb=RM.exports=Lt.prng=Lt.prng||{};hb.create=function(i){for(var e={plugin:i,key:null,seed:null,time:null,reseeds:0,generated:0,keyBytes:""},u=i.md,r=new Array(32),a=0;a<32;++a)r[a]=u.create();e.pools=r,e.pool=0,e.generate=function(p,h){if(!h)return e.generateSync(p);var f=e.plugin.cipher,S=e.plugin.increment,_=e.plugin.formatKey,O=e.plugin.formatSeed,E=Lt.util.createBuffer();e.key=null,A();function A(g){if(g)return h(g);if(E.length()>=p)return h(null,E.getBytes(p));if(e.generated>1048575&&(e.key=null),e.key===null)return Lt.util.nextTick(function(){s(A)});var D=f(e.key,e.seed);e.generated+=D.length,E.putBytes(D),e.key=_(f(e.key,S(e.seed))),e.seed=O(f(e.key,e.seed)),Lt.util.setImmediate(A)}c(A,"generate")},e.generateSync=function(p){var h=e.plugin.cipher,f=e.plugin.increment,S=e.plugin.formatKey,_=e.plugin.formatSeed;e.key=null;for(var O=Lt.util.createBuffer();O.length()1048575&&(e.key=null),e.key===null&&n();var E=h(e.key,e.seed);e.generated+=E.length,O.putBytes(E),e.key=S(h(e.key,f(e.seed))),e.seed=_(h(e.key,e.seed))}return O.getBytes(p)};function s(p){if(e.pools[0].messageLength>=32)return l(),p();var h=32-e.pools[0].messageLength<<5;e.seedFile(h,function(f,S){if(f)return p(f);e.collect(S),l(),p()})}c(s,"_reseed");function n(){if(e.pools[0].messageLength>=32)return l();var p=32-e.pools[0].messageLength<<5;e.collect(e.seedFileSync(p)),l()}c(n,"_reseedSync");function l(){e.reseeds=e.reseeds===4294967295?0:e.reseeds+1;var p=e.plugin.md.create();p.update(e.keyBytes);for(var h=1,f=0;f<32;++f)e.reseeds%h===0&&(p.update(e.pools[f].digest().getBytes()),e.pools[f].start()),h=h<<1;e.keyBytes=p.digest().getBytes(),p.start(),p.update(e.keyBytes);var S=p.digest().getBytes();e.key=e.plugin.formatKey(e.keyBytes),e.seed=e.plugin.formatSeed(S),e.generated=0}c(l,"_seed");function d(p){var h=null,f=Lt.util.globalScope,S=f.crypto||f.msCrypto;S&&S.getRandomValues&&(h=c(function(Y){return S.getRandomValues(Y)},"getRandomValues"));var _=Lt.util.createBuffer();if(h)for(;_.length()>16),D+=(g&32767)<<16,D+=g>>15,D=(D&2147483647)+(D>>31),W=D&4294967295;for(var A=0;A<3;++A)I=W>>>(A<<3),I^=Math.floor(Math.random()*256),_.putByte(I&255)}return _.getBytes(p)}return c(d,"defaultSeedFile"),Ql?(e.seedFile=function(p,h){Ql.randomBytes(p,function(f,S){if(f)return h(f);h(null,S.toString())})},e.seedFileSync=function(p){return Ql.randomBytes(p).toString()}):(e.seedFile=function(p,h){try{h(null,d(p))}catch(f){h(f)}},e.seedFileSync=d),e.collect=function(p){for(var h=p.length,f=0;f>S&255);e.collect(f)},e.registerWorker=function(p){if(p===self)e.seedFile=function(f,S){function _(O){var E=O.data;E.forge&&E.forge.prng&&(self.removeEventListener("message",_),S(E.forge.prng.err,E.forge.prng.bytes))}c(_,"listener"),self.addEventListener("message",_),self.postMessage({forge:{prng:{needed:f}}})};else{var h=c(function(f){var S=f.data;S.forge&&S.forge.prng&&e.seedFile(S.forge.prng.needed,function(_,O){p.postMessage({forge:{prng:{err:_,bytes:O}}})})},"listener");p.addEventListener("message",h)}},e}});var Iu=b((bW,sh)=>{var Ie=y0();Sr();ih();ah();H0();(function(){if(Ie.random&&Ie.random.getBytes){sh.exports=Ie.random;return}(function(i){var e={},u=new Array(4),r=Ie.util.createBuffer();e.formatKey=function(f){var S=Ie.util.createBuffer(f);return f=new Array(4),f[0]=S.getInt32(),f[1]=S.getInt32(),f[2]=S.getInt32(),f[3]=S.getInt32(),Ie.aes._expandKey(f,!1)},e.formatSeed=function(f){var S=Ie.util.createBuffer(f);return f=new Array(4),f[0]=S.getInt32(),f[1]=S.getInt32(),f[2]=S.getInt32(),f[3]=S.getInt32(),f},e.cipher=function(f,S){return Ie.aes._updateBlock(f,S,u,!1),r.putInt32(u[0]),r.putInt32(u[1]),r.putInt32(u[2]),r.putInt32(u[3]),r.getBytes()},e.increment=function(f){return++f[3],f},e.md=Ie.md.sha256;function a(){var f=Ie.prng.create(e);return f.getBytes=function(S,_){return f.generate(S,_)},f.getBytesSync=function(S){return f.generate(S)},f}c(a,"spawnPrng");var s=a(),n=null,l=Ie.util.globalScope,d=l.crypto||l.msCrypto;if(d&&d.getRandomValues&&(n=c(function(f){return d.getRandomValues(f)},"getRandomValues")),Ie.options.usePureJavaScript||!Ie.util.isNodejs&&!n){if(typeof window>"u"||window.document,s.collectInt(+new Date,32),typeof navigator<"u"){var p="";for(var h in navigator)try{typeof navigator[h]=="string"&&(p+=navigator[h])}catch{}s.collect(p),p=null}i&&(i().mousemove(function(f){s.collectInt(f.clientX,16),s.collectInt(f.clientY,16)}),i().keypress(function(f){s.collectInt(f.charCode,8)}))}if(!Ie.random)Ie.random=s;else for(var h in s)Ie.random[h]=s[h];Ie.random.createInstance=a,sh.exports=Ie.random})(typeof jQuery<"u"?jQuery:null)})()});var oh=b((vW,NM)=>{var pu=y0();H0();var nh=[217,120,249,196,25,221,181,237,40,233,253,121,74,160,216,157,198,126,55,131,43,118,83,142,98,76,100,136,68,139,251,162,23,154,89,245,135,179,79,19,97,69,109,141,9,129,125,50,189,143,64,235,134,183,123,11,240,149,33,34,92,107,78,130,84,214,101,147,206,96,178,28,115,86,192,20,167,140,241,220,18,117,202,31,59,190,228,209,66,61,212,48,163,60,182,38,111,191,14,218,70,105,7,87,39,242,29,155,188,148,67,3,248,17,199,246,144,239,62,231,6,195,213,47,200,102,30,215,8,232,234,222,128,82,238,247,132,170,114,172,53,77,106,42,150,26,210,113,90,21,73,116,75,159,208,94,4,24,164,236,194,224,65,110,15,81,203,204,36,145,175,80,161,244,112,57,153,124,58,133,35,184,180,122,252,2,54,91,37,85,151,49,45,93,250,152,227,138,146,174,5,223,41,16,103,108,186,201,211,0,230,207,225,158,168,44,99,22,1,63,88,226,137,169,13,56,52,27,171,51,255,176,187,72,12,95,185,177,205,46,197,243,219,71,229,165,156,119,10,166,32,104,254,127,193,173],gM=[1,2,3,5],fb=c(function(i,e){return i<>16-e},"rol"),Sb=c(function(i,e){return(i&65535)>>e|i<<16-e&65535},"ror");NM.exports=pu.rc2=pu.rc2||{};pu.rc2.expandKey=function(i,e){typeof i=="string"&&(i=pu.util.createBuffer(i)),e=e||128;var u=i,r=i.length(),a=e,s=Math.ceil(a/8),n=255>>(a&7),l;for(l=r;l<128;l++)u.putByte(nh[u.at(l-1)+u.at(l-r)&255]);for(u.setAt(128-s,nh[u.at(128-s)&n]),l=127-s;l>=0;l--)u.setAt(l,nh[u.at(l+1)^u.at(l+s)]);return u};var yM=c(function(i,e,u){var r=!1,a=null,s=null,n=null,l,d,p,h,f=[];for(i=pu.rc2.expandKey(i,e),p=0;p<64;p++)f.push(i.getInt16Le());u?(l=c(function(O){for(p=0;p<4;p++)O[p]+=f[h]+(O[(p+3)%4]&O[(p+2)%4])+(~O[(p+3)%4]&O[(p+1)%4]),O[p]=fb(O[p],gM[p]),h++},"mixRound"),d=c(function(O){for(p=0;p<4;p++)O[p]+=f[O[(p+3)%4]&63]},"mashRound")):(l=c(function(O){for(p=3;p>=0;p--)O[p]=Sb(O[p],gM[p]),O[p]-=f[h]+(O[(p+3)%4]&O[(p+2)%4])+(~O[(p+3)%4]&O[(p+1)%4]),h--},"mixRound"),d=c(function(O){for(p=3;p>=0;p--)O[p]-=f[O[(p+3)%4]&63]},"mashRound"));var S=c(function(O){var E=[];for(p=0;p<4;p++){var A=a.getInt16Le();n!==null&&(u?A^=n.getInt16Le():n.putInt16Le(A)),E.push(A&65535)}h=u?0:63;for(var g=0;g=8;)S([[5,l],[1,d],[6,l],[1,d],[5,l]])},finish:function(O){var E=!0;if(u)if(O)E=O(8,a,!u);else{var A=a.length()===8?8:8-a.length();a.fillWithByte(A,A)}if(E&&(r=!0,_.update()),!u&&(E=a.length()===0,E))if(O)E=O(8,s,!u);else{var g=s.length(),D=s.at(g-1);D>g?E=!1:s.truncate(D)}return E}},_},"createCipher");pu.rc2.startEncrypting=function(i,e,u){var r=pu.rc2.createEncryptionCipher(i,128);return r.start(e,u),r};pu.rc2.createEncryptionCipher=function(i,e){return yM(i,e,!0)};pu.rc2.startDecrypting=function(i,e,u){var r=pu.rc2.createDecryptionCipher(i,128);return r.start(e,u),r};pu.rc2.createDecryptionCipher=function(i,e){return yM(i,e,!1)}});var yn=b((wW,UM)=>{var lh=y0();UM.exports=lh.jsbn=lh.jsbn||{};var Ut,Ob=0xdeadbeefcafe,CM=(Ob&16777215)==15715070;function t0(i,e,u){this.data=[],i!=null&&(typeof i=="number"?this.fromNumber(i,e,u):e==null&&typeof i!="string"?this.fromString(i,256):this.fromString(i,e))}c(t0,"BigInteger");lh.jsbn.BigInteger=t0;function V0(){return new t0(null)}c(V0,"nbi");function Lb(i,e,u,r,a,s){for(;--s>=0;){var n=e*this.data[i++]+u.data[r]+a;a=Math.floor(n/67108864),u.data[r++]=n&67108863}return a}c(Lb,"am1");function Eb(i,e,u,r,a,s){for(var n=e&32767,l=e>>15;--s>=0;){var d=this.data[i]&32767,p=this.data[i++]>>15,h=l*d+p*n;d=n*d+((h&32767)<<15)+u.data[r]+(a&1073741823),a=(d>>>30)+(h>>>15)+l*p+(a>>>30),u.data[r++]=d&1073741823}return a}c(Eb,"am2");function IM(i,e,u,r,a,s){for(var n=e&16383,l=e>>14;--s>=0;){var d=this.data[i]&16383,p=this.data[i++]>>14,h=l*d+p*n;d=n*d+((h&16383)<<14)+u.data[r]+a,a=(d>>28)+(h>>14)+l*p,u.data[r++]=d&268435455}return a}c(IM,"am3");typeof navigator>"u"?(t0.prototype.am=IM,Ut=28):CM&&navigator.appName=="Microsoft Internet Explorer"?(t0.prototype.am=Eb,Ut=30):CM&&navigator.appName!="Netscape"?(t0.prototype.am=Lb,Ut=26):(t0.prototype.am=IM,Ut=28);t0.prototype.DB=Ut;t0.prototype.DM=(1<=0;--e)i.data[e]=this.data[e];i.t=this.t,i.s=this.s}c(Mb,"bnpCopyTo");function mb(i){this.t=1,this.s=i<0?-1:0,i>0?this.data[0]=i:i<-1?this.data[0]=i+this.DV:this.t=0}c(mb,"bnpFromInt");function Lr(i){var e=V0();return e.fromInt(i),e}c(Lr,"nbv");function _b(i,e){var u;if(e==16)u=4;else if(e==8)u=3;else if(e==256)u=8;else if(e==2)u=1;else if(e==32)u=5;else if(e==4)u=2;else{this.fromRadix(i,e);return}this.t=0,this.s=0;for(var r=i.length,a=!1,s=0;--r>=0;){var n=u==8?i[r]&255:xM(i,r);if(n<0){i.charAt(r)=="-"&&(a=!0);continue}a=!1,s==0?this.data[this.t++]=n:s+u>this.DB?(this.data[this.t-1]|=(n&(1<>this.DB-s):this.data[this.t-1]|=n<=this.DB&&(s-=this.DB)}u==8&&i[0]&128&&(this.s=-1,s>0&&(this.data[this.t-1]|=(1<0&&this.data[this.t-1]==i;)--this.t}c(Tb,"bnpClamp");function Yb(i){if(this.s<0)return"-"+this.negate().toString(i);var e;if(i==16)e=4;else if(i==8)e=3;else if(i==2)e=1;else if(i==32)e=5;else if(i==4)e=2;else return this.toRadix(i);var u=(1<0)for(l>l)>0&&(a=!0,s=bM(r));n>=0;)l>(l+=this.DB-e)):(r=this.data[n]>>(l-=e)&u,l<=0&&(l+=this.DB,--n)),r>0&&(a=!0),a&&(s+=bM(r));return a?s:"0"}c(Yb,"bnToString");function Ab(){var i=V0();return t0.ZERO.subTo(this,i),i}c(Ab,"bnNegate");function Rb(){return this.s<0?this.negate():this}c(Rb,"bnAbs");function gb(i){var e=this.s-i.s;if(e!=0)return e;var u=this.t;if(e=u-i.t,e!=0)return this.s<0?-e:e;for(;--u>=0;)if((e=this.data[u]-i.data[u])!=0)return e;return 0}c(gb,"bnCompareTo");function zl(i){var e=1,u;return(u=i>>>16)!=0&&(i=u,e+=16),(u=i>>8)!=0&&(i=u,e+=8),(u=i>>4)!=0&&(i=u,e+=4),(u=i>>2)!=0&&(i=u,e+=2),(u=i>>1)!=0&&(i=u,e+=1),e}c(zl,"nbits");function yb(){return this.t<=0?0:this.DB*(this.t-1)+zl(this.data[this.t-1]^this.s&this.DM)}c(yb,"bnBitLength");function Nb(i,e){var u;for(u=this.t-1;u>=0;--u)e.data[u+i]=this.data[u];for(u=i-1;u>=0;--u)e.data[u]=0;e.t=this.t+i,e.s=this.s}c(Nb,"bnpDLShiftTo");function Cb(i,e){for(var u=i;u=0;--l)e.data[l+s+1]=this.data[l]>>r|n,n=(this.data[l]&a)<=0;--l)e.data[l]=0;e.data[s]=n,e.t=this.t+s+1,e.s=this.s,e.clamp()}c(Ib,"bnpLShiftTo");function bb(i,e){e.s=this.s;var u=Math.floor(i/this.DB);if(u>=this.t){e.t=0;return}var r=i%this.DB,a=this.DB-r,s=(1<>r;for(var n=u+1;n>r;r>0&&(e.data[this.t-u-1]|=(this.s&s)<>=this.DB;if(i.t>=this.DB;r+=this.s}else{for(r+=this.s;u>=this.DB;r-=i.s}e.s=r<0?-1:0,r<-1?e.data[u++]=this.DV+r:r>0&&(e.data[u++]=r),e.t=u,e.clamp()}c(xb,"bnpSubTo");function vb(i,e){var u=this.abs(),r=i.abs(),a=u.t;for(e.t=a+r.t;--a>=0;)e.data[a]=0;for(a=0;a=0;)i.data[u]=0;for(u=0;u=e.DV&&(i.data[u+e.t]-=e.DV,i.data[u+e.t+1]=1)}i.t>0&&(i.data[i.t-1]+=e.am(u,e.data[u],i,2*u,0,1)),i.s=0,i.clamp()}c(Db,"bnpSquareTo");function wb(i,e,u){var r=i.abs();if(!(r.t<=0)){var a=this.abs();if(a.t0?(r.lShiftTo(d,s),a.lShiftTo(d,u)):(r.copyTo(s),a.copyTo(u));var p=s.t,h=s.data[p-1];if(h!=0){var f=h*(1<1?s.data[p-2]>>this.F2:0),S=this.FV/f,_=(1<=0&&(u.data[u.t++]=1,u.subTo(g,u)),t0.ONE.dlShiftTo(p,g),g.subTo(s,s);s.t=0;){var D=u.data[--E]==h?this.DM:Math.floor(u.data[E]*S+(u.data[E-1]+O)*_);if((u.data[E]+=s.am(0,D,u,A,0,p))0&&u.rShiftTo(d,u),n<0&&t0.ZERO.subTo(u,u)}}}c(wb,"bnpDivRemTo");function Ub(i){var e=V0();return this.abs().divRemTo(i,null,e),this.s<0&&e.compareTo(t0.ZERO)>0&&i.subTo(e,e),e}c(Ub,"bnMod");function ii(i){this.m=i}c(ii,"Classic");function Pb(i){return i.s<0||i.compareTo(this.m)>=0?i.mod(this.m):i}c(Pb,"cConvert");function kb(i){return i}c(kb,"cRevert");function Fb(i){i.divRemTo(this.m,null,i)}c(Fb,"cReduce");function Hb(i,e,u){i.multiplyTo(e,u),this.reduce(u)}c(Hb,"cMulTo");function Vb(i,e){i.squareTo(e),this.reduce(e)}c(Vb,"cSqrTo");ii.prototype.convert=Pb;ii.prototype.revert=kb;ii.prototype.reduce=Fb;ii.prototype.mulTo=Hb;ii.prototype.sqrTo=Vb;function Gb(){if(this.t<1)return 0;var i=this.data[0];if(!(i&1))return 0;var e=i&3;return e=e*(2-(i&15)*e)&15,e=e*(2-(i&255)*e)&255,e=e*(2-((i&65535)*e&65535))&65535,e=e*(2-i*e%this.DV)%this.DV,e>0?this.DV-e:-e}c(Gb,"bnpInvDigit");function ai(i){this.m=i,this.mp=i.invDigit(),this.mpl=this.mp&32767,this.mph=this.mp>>15,this.um=(1<0&&this.m.subTo(e,e),e}c(qb,"montConvert");function Kb(i){var e=V0();return i.copyTo(e),this.reduce(e),e}c(Kb,"montRevert");function Wb(i){for(;i.t<=this.mt2;)i.data[i.t++]=0;for(var e=0;e>15)*this.mpl&this.um)<<15)&i.DM;for(u=e+this.m.t,i.data[u]+=this.m.am(0,r,i,e,0,this.m.t);i.data[u]>=i.DV;)i.data[u]-=i.DV,i.data[++u]++}i.clamp(),i.drShiftTo(this.m.t,i),i.compareTo(this.m)>=0&&i.subTo(this.m,i)}c(Wb,"montReduce");function jb(i,e){i.squareTo(e),this.reduce(e)}c(jb,"montSqrTo");function Xb(i,e,u){i.multiplyTo(e,u),this.reduce(u)}c(Xb,"montMulTo");ai.prototype.convert=qb;ai.prototype.revert=Kb;ai.prototype.reduce=Wb;ai.prototype.mulTo=Xb;ai.prototype.sqrTo=jb;function Qb(){return(this.t>0?this.data[0]&1:this.s)==0}c(Qb,"bnpIsEven");function Jb(i,e){if(i>4294967295||i<1)return t0.ONE;var u=V0(),r=V0(),a=e.convert(this),s=zl(i)-1;for(a.copyTo(u);--s>=0;)if(e.sqrTo(u,r),(i&1<0)e.mulTo(r,a,u);else{var n=u;u=r,r=n}return e.revert(u)}c(Jb,"bnpExp");function zb(i,e){var u;return i<256||e.isEven()?u=new ii(e):u=new ai(e),this.exp(i,u)}c(zb,"bnModPowInt");t0.prototype.copyTo=Mb;t0.prototype.fromInt=mb;t0.prototype.fromString=_b;t0.prototype.clamp=Tb;t0.prototype.dlShiftTo=Nb;t0.prototype.drShiftTo=Cb;t0.prototype.lShiftTo=Ib;t0.prototype.rShiftTo=bb;t0.prototype.subTo=xb;t0.prototype.multiplyTo=vb;t0.prototype.squareTo=Db;t0.prototype.divRemTo=wb;t0.prototype.invDigit=Gb;t0.prototype.isEven=Qb;t0.prototype.exp=Jb;t0.prototype.toString=Yb;t0.prototype.negate=Ab;t0.prototype.abs=Rb;t0.prototype.compareTo=gb;t0.prototype.bitLength=yb;t0.prototype.mod=Ub;t0.prototype.modPowInt=zb;t0.ZERO=Lr(0);t0.ONE=Lr(1);function $b(){var i=V0();return this.copyTo(i),i}c($b,"bnClone");function Zb(){if(this.s<0){if(this.t==1)return this.data[0]-this.DV;if(this.t==0)return-1}else{if(this.t==1)return this.data[0];if(this.t==0)return 0}return(this.data[1]&(1<<32-this.DB)-1)<>24}c(ex,"bnByteValue");function ux(){return this.t==0?this.s:this.data[0]<<16>>16}c(ux,"bnShortValue");function tx(i){return Math.floor(Math.LN2*this.DB/Math.log(i))}c(tx,"bnpChunkSize");function rx(){return this.s<0?-1:this.t<=0||this.t==1&&this.data[0]<=0?0:1}c(rx,"bnSigNum");function ix(i){if(i==null&&(i=10),this.signum()==0||i<2||i>36)return"0";var e=this.chunkSize(i),u=Math.pow(i,e),r=Lr(u),a=V0(),s=V0(),n="";for(this.divRemTo(r,a,s);a.signum()>0;)n=(u+s.intValue()).toString(i).substr(1)+n,a.divRemTo(r,a,s);return s.intValue().toString(i)+n}c(ix,"bnpToRadix");function ax(i,e){this.fromInt(0),e==null&&(e=10);for(var u=this.chunkSize(e),r=Math.pow(e,u),a=!1,s=0,n=0,l=0;l=u&&(this.dMultiply(r),this.dAddOffset(n,0),s=0,n=0)}s>0&&(this.dMultiply(Math.pow(e,s)),this.dAddOffset(n,0)),a&&t0.ZERO.subTo(this,this)}c(ax,"bnpFromRadix");function sx(i,e,u){if(typeof e=="number")if(i<2)this.fromInt(1);else for(this.fromNumber(i,u),this.testBit(i-1)||this.bitwiseTo(t0.ONE.shiftLeft(i-1),dh,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(e);)this.dAddOffset(2,0),this.bitLength()>i&&this.subTo(t0.ONE.shiftLeft(i-1),this);else{var r=new Array,a=i&7;r.length=(i>>3)+1,e.nextBytes(r),a>0?r[0]&=(1<0)for(u>u)!=(this.s&this.DM)>>u&&(e[a++]=r|this.s<=0;)u<8?(r=(this.data[i]&(1<>(u+=this.DB-8)):(r=this.data[i]>>(u-=8)&255,u<=0&&(u+=this.DB,--i)),r&128&&(r|=-256),a==0&&(this.s&128)!=(r&128)&&++a,(a>0||r!=this.s)&&(e[a++]=r);return e}c(nx,"bnToByteArray");function ox(i){return this.compareTo(i)==0}c(ox,"bnEquals");function lx(i){return this.compareTo(i)<0?this:i}c(lx,"bnMin");function cx(i){return this.compareTo(i)>0?this:i}c(cx,"bnMax");function dx(i,e,u){var r,a,s=Math.min(i.t,this.t);for(r=0;r>=16,e+=16),i&255||(i>>=8,e+=8),i&15||(i>>=4,e+=4),i&3||(i>>=2,e+=2),i&1||++e,e}c(Mx,"lbit");function mx(){for(var i=0;i=this.t?this.s!=0:(this.data[e]&1<>=this.DB;if(i.t>=this.DB;r+=this.s}else{for(r+=this.s;u>=this.DB;r+=i.s}e.s=r<0?-1:0,r>0?e.data[u++]=r:r<-1&&(e.data[u++]=this.DV+r),e.t=u,e.clamp()}c(Nx,"bnpAddTo");function Cx(i){var e=V0();return this.addTo(i,e),e}c(Cx,"bnAdd");function Ix(i){var e=V0();return this.subTo(i,e),e}c(Ix,"bnSubtract");function bx(i){var e=V0();return this.multiplyTo(i,e),e}c(bx,"bnMultiply");function xx(i){var e=V0();return this.divRemTo(i,e,null),e}c(xx,"bnDivide");function vx(i){var e=V0();return this.divRemTo(i,null,e),e}c(vx,"bnRemainder");function Dx(i){var e=V0(),u=V0();return this.divRemTo(i,e,u),new Array(e,u)}c(Dx,"bnDivideAndRemainder");function wx(i){this.data[this.t]=this.am(0,i-1,this,0,0,this.t),++this.t,this.clamp()}c(wx,"bnpDMultiply");function Ux(i,e){if(i!=0){for(;this.t<=e;)this.data[this.t++]=0;for(this.data[e]+=i;this.data[e]>=this.DV;)this.data[e]-=this.DV,++e>=this.t&&(this.data[this.t++]=0),++this.data[e]}}c(Ux,"bnpDAddOffset");function gn(){}c(gn,"NullExp");function wM(i){return i}c(wM,"nNop");function Px(i,e,u){i.multiplyTo(e,u)}c(Px,"nMulTo");function kx(i,e){i.squareTo(e)}c(kx,"nSqrTo");gn.prototype.convert=wM;gn.prototype.revert=wM;gn.prototype.mulTo=Px;gn.prototype.sqrTo=kx;function Fx(i){return this.exp(i,new gn)}c(Fx,"bnPow");function Hx(i,e,u){var r=Math.min(this.t+i.t,e);for(u.s=0,u.t=r;r>0;)u.data[--r]=0;var a;for(a=u.t-this.t;r=0;)u.data[r]=0;for(r=Math.max(e-this.t,0);r2*this.m.t)return i.mod(this.m);if(i.compareTo(this.m)<0)return i;var e=V0();return i.copyTo(e),this.reduce(e),e}c(Gx,"barrettConvert");function qx(i){return i}c(qx,"barrettRevert");function Kx(i){for(i.drShiftTo(this.m.t-1,this.r2),i.t>this.m.t+1&&(i.t=this.m.t+1,i.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);i.compareTo(this.r2)<0;)i.dAddOffset(1,this.m.t+1);for(i.subTo(this.r2,i);i.compareTo(this.m)>=0;)i.subTo(this.m,i)}c(Kx,"barrettReduce");function Wx(i,e){i.squareTo(e),this.reduce(e)}c(Wx,"barrettSqrTo");function jx(i,e,u){i.multiplyTo(e,u),this.reduce(u)}c(jx,"barrettMulTo");Ma.prototype.convert=Gx;Ma.prototype.revert=qx;Ma.prototype.reduce=Kx;Ma.prototype.mulTo=jx;Ma.prototype.sqrTo=Wx;function Xx(i,e){var u=i.bitLength(),r,a=Lr(1),s;if(u<=0)return a;u<18?r=1:u<48?r=3:u<144?r=4:u<768?r=5:r=6,u<8?s=new ii(e):e.isEven()?s=new Ma(e):s=new ai(e);var n=new Array,l=3,d=r-1,p=(1<1){var h=V0();for(s.sqrTo(n[1],h);l<=p;)n[l]=V0(),s.mulTo(h,n[l-2],n[l]),l+=2}var f=i.t-1,S,_=!0,O=V0(),E;for(u=zl(i.data[f])-1;f>=0;){for(u>=d?S=i.data[f]>>u-d&p:(S=(i.data[f]&(1<0&&(S|=i.data[f-1]>>this.DB+u-d)),l=r;!(S&1);)S>>=1,--l;if((u-=l)<0&&(u+=this.DB,--f),_)n[S].copyTo(a),_=!1;else{for(;l>1;)s.sqrTo(a,O),s.sqrTo(O,a),l-=2;l>0?s.sqrTo(a,O):(E=a,a=O,O=E),s.mulTo(O,n[S],a)}for(;f>=0&&!(i.data[f]&1<0&&(e.rShiftTo(s,e),u.rShiftTo(s,u));e.signum()>0;)(a=e.getLowestSetBit())>0&&e.rShiftTo(a,e),(a=u.getLowestSetBit())>0&&u.rShiftTo(a,u),e.compareTo(u)>=0?(e.subTo(u,e),e.rShiftTo(1,e)):(u.subTo(e,u),u.rShiftTo(1,u));return s>0&&u.lShiftTo(s,u),u}c(Qx,"bnGCD");function Jx(i){if(i<=0)return 0;var e=this.DV%i,u=this.s<0?i-1:0;if(this.t>0)if(e==0)u=this.data[0]%i;else for(var r=this.t-1;r>=0;--r)u=(e*u+this.data[r])%i;return u}c(Jx,"bnpModInt");function zx(i){var e=i.isEven();if(this.isEven()&&e||i.signum()==0)return t0.ZERO;for(var u=i.clone(),r=this.clone(),a=Lr(1),s=Lr(0),n=Lr(0),l=Lr(1);u.signum()!=0;){for(;u.isEven();)u.rShiftTo(1,u),e?((!a.isEven()||!s.isEven())&&(a.addTo(this,a),s.subTo(i,s)),a.rShiftTo(1,a)):s.isEven()||s.subTo(i,s),s.rShiftTo(1,s);for(;r.isEven();)r.rShiftTo(1,r),e?((!n.isEven()||!l.isEven())&&(n.addTo(this,n),l.subTo(i,l)),n.rShiftTo(1,n)):l.isEven()||l.subTo(i,l),l.rShiftTo(1,l);u.compareTo(r)>=0?(u.subTo(r,u),e&&a.subTo(n,a),s.subTo(l,s)):(r.subTo(u,r),e&&n.subTo(a,n),l.subTo(s,l))}if(r.compareTo(t0.ONE)!=0)return t0.ZERO;if(l.compareTo(i)>=0)return l.subtract(i);if(l.signum()<0)l.addTo(i,l);else return l;return l.signum()<0?l.add(i):l}c(zx,"bnModInverse");var Xu=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509],$x=(1<<26)/Xu[Xu.length-1];function Zx(i){var e,u=this.abs();if(u.t==1&&u.data[0]<=Xu[Xu.length-1]){for(e=0;e=0);var l=s.modPow(r,this);if(l.compareTo(t0.ONE)!=0&&l.compareTo(e)!=0){for(var d=1;d++{var Et=y0();ht();H0();var kM=HM.exports=Et.sha1=Et.sha1||{};Et.md.sha1=Et.md.algorithms.sha1=kM;kM.create=function(){FM||tv();var i=null,e=Et.util.createBuffer(),u=new Array(80),r={algorithm:"sha1",blockLength:64,digestLength:20,messageLength:0,fullMessageLength:null,messageLengthSize:8};return r.start=function(){r.messageLength=0,r.fullMessageLength=r.messageLength64=[];for(var a=r.messageLengthSize/4,s=0;s>>0,n>>>0];for(var l=r.fullMessageLength.length-1;l>=0;--l)r.fullMessageLength[l]+=n[1],n[1]=n[0]+(r.fullMessageLength[l]/4294967296>>>0),r.fullMessageLength[l]=r.fullMessageLength[l]>>>0,n[0]=n[1]/4294967296>>>0;return e.putBytes(a),PM(i,u,e),(e.read>2048||e.length()===0)&&e.compact(),r},r.digest=function(){var a=Et.util.createBuffer();a.putBytes(e.bytes());var s=r.fullMessageLength[r.fullMessageLength.length-1]+r.messageLengthSize,n=s&r.blockLength-1;a.putBytes(ph.substr(0,r.blockLength-n));for(var l,d,p=r.fullMessageLength[0]*8,h=0;h>>0,p+=d,a.putInt32(p>>>0),p=l>>>0;a.putInt32(p);var f={h0:i.h0,h1:i.h1,h2:i.h2,h3:i.h3,h4:i.h4};PM(f,u,a);var S=Et.util.createBuffer();return S.putInt32(f.h0),S.putInt32(f.h1),S.putInt32(f.h2),S.putInt32(f.h3),S.putInt32(f.h4),S},r};var ph=null,FM=!1;function tv(){ph="\x80",ph+=Et.util.fillString("\0",64),FM=!0}c(tv,"_init");function PM(i,e,u){for(var r,a,s,n,l,d,p,h,f=u.length();f>=64;){for(a=i.h0,s=i.h1,n=i.h2,l=i.h3,d=i.h4,h=0;h<16;++h)r=u.getInt32(),e[h]=r,p=l^s&(n^l),r=(a<<5|a>>>27)+p+d+1518500249+r,d=l,l=n,n=(s<<30|s>>>2)>>>0,s=a,a=r;for(;h<20;++h)r=e[h-3]^e[h-8]^e[h-14]^e[h-16],r=r<<1|r>>>31,e[h]=r,p=l^s&(n^l),r=(a<<5|a>>>27)+p+d+1518500249+r,d=l,l=n,n=(s<<30|s>>>2)>>>0,s=a,a=r;for(;h<32;++h)r=e[h-3]^e[h-8]^e[h-14]^e[h-16],r=r<<1|r>>>31,e[h]=r,p=s^n^l,r=(a<<5|a>>>27)+p+d+1859775393+r,d=l,l=n,n=(s<<30|s>>>2)>>>0,s=a,a=r;for(;h<40;++h)r=e[h-6]^e[h-16]^e[h-28]^e[h-32],r=r<<2|r>>>30,e[h]=r,p=s^n^l,r=(a<<5|a>>>27)+p+d+1859775393+r,d=l,l=n,n=(s<<30|s>>>2)>>>0,s=a,a=r;for(;h<60;++h)r=e[h-6]^e[h-16]^e[h-28]^e[h-32],r=r<<2|r>>>30,e[h]=r,p=s&n|l&(s^n),r=(a<<5|a>>>27)+p+d+2400959708+r,d=l,l=n,n=(s<<30|s>>>2)>>>0,s=a,a=r;for(;h<80;++h)r=e[h-6]^e[h-16]^e[h-28]^e[h-32],r=r<<2|r>>>30,e[h]=r,p=s^n^l,r=(a<<5|a>>>27)+p+d+3395469782+r,d=l,l=n,n=(s<<30|s>>>2)>>>0,s=a,a=r;i.h0=i.h0+a|0,i.h1=i.h1+s|0,i.h2=i.h2+n|0,i.h3=i.h3+l|0,i.h4=i.h4+d|0,f-=64}}c(PM,"_update")});var hh=b((FW,GM)=>{var Bt=y0();H0();Iu();ma();var VM=GM.exports=Bt.pkcs1=Bt.pkcs1||{};VM.encode_rsa_oaep=function(i,e,u){var r,a,s,n;typeof u=="string"?(r=u,a=arguments[3]||void 0,s=arguments[4]||void 0):u&&(r=u.label||void 0,a=u.seed||void 0,s=u.md||void 0,u.mgf1&&u.mgf1.md&&(n=u.mgf1.md)),s?s.start():s=Bt.md.sha1.create(),n||(n=s);var l=Math.ceil(i.n.bitLength()/8),d=l-2*s.digestLength-2;if(e.length>d){var p=new Error("RSAES-OAEP input message length is too long.");throw p.length=e.length,p.maxLength=d,p}r||(r=""),s.update(r,"raw");for(var h=s.digest(),f="",S=d-e.length,_=0;_>24&255,s>>16&255,s>>8&255,s&255);u.start(),u.update(i+n),r+=u.digest().getBytes()}return r.substring(0,e)}c($l,"rsa_mgf1")});var Sh=b((VW,fh)=>{var Er=y0();H0();yn();Iu();(function(){if(Er.prime){fh.exports=Er.prime;return}var i=fh.exports=Er.prime=Er.prime||{},e=Er.jsbn.BigInteger,u=[6,4,2,4,2,4,6,2],r=new e(null);r.fromInt(30);var a=c(function(f,S){return f|S},"op_or");i.generateProbablePrime=function(f,S,_){typeof S=="function"&&(_=S,S={}),S=S||{};var O=S.algorithm||"PRIMEINC";typeof O=="string"&&(O={name:O}),O.options=O.options||{};var E=S.prng||Er.random,A={nextBytes:function(g){for(var D=E.getBytesSync(g.length),I=0;IS&&(f=p(S,_)),f.isProbablePrime(E))return g(null,f);f.dAddOffset(u[O++%8],0)}while(A<0||+new Date-D"u")return n(f,S,_,O);var E=p(f,S),A=_.workers,g=_.workLoad||100,D=g*30/8,I=_.workerScript||"forge/prime.worker.js";if(A===-1)return Er.util.estimateCores(function(Y,N){Y&&(N=2),A=N-1,W()});W();function W(){A=Math.max(1,A);for(var Y=[],N=0;Nf&&(E=p(f,S));var l0=E.toString(16);z.target.postMessage({hex:l0,workLoad:g}),E.dAddOffset(D,0)}}c(U,"workerMessage")}c(W,"generate")}c(d,"primeincFindPrimeWithWorkers");function p(f,S){var _=new e(f,S),O=f-1;return _.testBit(O)||_.bitwiseTo(e.ONE.shiftLeft(O),a,_),_.dAddOffset(31-_.mod(r).byteValue(),0),_}c(p,"generateRandom");function h(f){return f<=100?27:f<=150?18:f<=200?15:f<=250?12:f<=300?9:f<=350?8:f<=400?7:f<=500?6:f<=600?5:f<=800?4:f<=1250?3:2}c(h,"getMillerRabinTests")})()});var Nn=b((qW,JM)=>{var L0=y0();ju();yn();Or();hh();Sh();Iu();H0();typeof U0>"u"&&(U0=L0.jsbn.BigInteger);var U0,Oh=L0.util.isNodejs?require("crypto"):null,j=L0.asn1,xu=L0.util;L0.pki=L0.pki||{};JM.exports=L0.pki.rsa=L0.rsa=L0.rsa||{};var T0=L0.pki,rv=[6,4,2,4,2,4,6,2],iv={name:"PrivateKeyInfo",tagClass:j.Class.UNIVERSAL,type:j.Type.SEQUENCE,constructed:!0,value:[{name:"PrivateKeyInfo.version",tagClass:j.Class.UNIVERSAL,type:j.Type.INTEGER,constructed:!1,capture:"privateKeyVersion"},{name:"PrivateKeyInfo.privateKeyAlgorithm",tagClass:j.Class.UNIVERSAL,type:j.Type.SEQUENCE,constructed:!0,value:[{name:"AlgorithmIdentifier.algorithm",tagClass:j.Class.UNIVERSAL,type:j.Type.OID,constructed:!1,capture:"privateKeyOid"}]},{name:"PrivateKeyInfo",tagClass:j.Class.UNIVERSAL,type:j.Type.OCTETSTRING,constructed:!1,capture:"privateKey"}]},av={name:"RSAPrivateKey",tagClass:j.Class.UNIVERSAL,type:j.Type.SEQUENCE,constructed:!0,value:[{name:"RSAPrivateKey.version",tagClass:j.Class.UNIVERSAL,type:j.Type.INTEGER,constructed:!1,capture:"privateKeyVersion"},{name:"RSAPrivateKey.modulus",tagClass:j.Class.UNIVERSAL,type:j.Type.INTEGER,constructed:!1,capture:"privateKeyModulus"},{name:"RSAPrivateKey.publicExponent",tagClass:j.Class.UNIVERSAL,type:j.Type.INTEGER,constructed:!1,capture:"privateKeyPublicExponent"},{name:"RSAPrivateKey.privateExponent",tagClass:j.Class.UNIVERSAL,type:j.Type.INTEGER,constructed:!1,capture:"privateKeyPrivateExponent"},{name:"RSAPrivateKey.prime1",tagClass:j.Class.UNIVERSAL,type:j.Type.INTEGER,constructed:!1,capture:"privateKeyPrime1"},{name:"RSAPrivateKey.prime2",tagClass:j.Class.UNIVERSAL,type:j.Type.INTEGER,constructed:!1,capture:"privateKeyPrime2"},{name:"RSAPrivateKey.exponent1",tagClass:j.Class.UNIVERSAL,type:j.Type.INTEGER,constructed:!1,capture:"privateKeyExponent1"},{name:"RSAPrivateKey.exponent2",tagClass:j.Class.UNIVERSAL,type:j.Type.INTEGER,constructed:!1,capture:"privateKeyExponent2"},{name:"RSAPrivateKey.coefficient",tagClass:j.Class.UNIVERSAL,type:j.Type.INTEGER,constructed:!1,capture:"privateKeyCoefficient"}]},sv={name:"RSAPublicKey",tagClass:j.Class.UNIVERSAL,type:j.Type.SEQUENCE,constructed:!0,value:[{name:"RSAPublicKey.modulus",tagClass:j.Class.UNIVERSAL,type:j.Type.INTEGER,constructed:!1,capture:"publicKeyModulus"},{name:"RSAPublicKey.exponent",tagClass:j.Class.UNIVERSAL,type:j.Type.INTEGER,constructed:!1,capture:"publicKeyExponent"}]},nv=L0.pki.rsa.publicKeyValidator={name:"SubjectPublicKeyInfo",tagClass:j.Class.UNIVERSAL,type:j.Type.SEQUENCE,constructed:!0,captureAsn1:"subjectPublicKeyInfo",value:[{name:"SubjectPublicKeyInfo.AlgorithmIdentifier",tagClass:j.Class.UNIVERSAL,type:j.Type.SEQUENCE,constructed:!0,value:[{name:"AlgorithmIdentifier.algorithm",tagClass:j.Class.UNIVERSAL,type:j.Type.OID,constructed:!1,capture:"publicKeyOid"}]},{name:"SubjectPublicKeyInfo.subjectPublicKey",tagClass:j.Class.UNIVERSAL,type:j.Type.BITSTRING,constructed:!1,value:[{name:"SubjectPublicKeyInfo.subjectPublicKey.RSAPublicKey",tagClass:j.Class.UNIVERSAL,type:j.Type.SEQUENCE,constructed:!0,optional:!0,captureAsn1:"rsaPublicKey"}]}]},ov={name:"DigestInfo",tagClass:j.Class.UNIVERSAL,type:j.Type.SEQUENCE,constructed:!0,value:[{name:"DigestInfo.DigestAlgorithm",tagClass:j.Class.UNIVERSAL,type:j.Type.SEQUENCE,constructed:!0,value:[{name:"DigestInfo.DigestAlgorithm.algorithmIdentifier",tagClass:j.Class.UNIVERSAL,type:j.Type.OID,constructed:!1,capture:"algorithmIdentifier"},{name:"DigestInfo.DigestAlgorithm.parameters",tagClass:j.Class.UNIVERSAL,type:j.Type.NULL,capture:"parameters",optional:!0,constructed:!1}]},{name:"DigestInfo.digest",tagClass:j.Class.UNIVERSAL,type:j.Type.OCTETSTRING,constructed:!1,capture:"digest"}]},lv=c(function(i){var e;if(i.algorithm in T0.oids)e=T0.oids[i.algorithm];else{var u=new Error("Unknown message digest algorithm.");throw u.algorithm=i.algorithm,u}var r=j.oidToDer(e).getBytes(),a=j.create(j.Class.UNIVERSAL,j.Type.SEQUENCE,!0,[]),s=j.create(j.Class.UNIVERSAL,j.Type.SEQUENCE,!0,[]);s.value.push(j.create(j.Class.UNIVERSAL,j.Type.OID,!1,r)),s.value.push(j.create(j.Class.UNIVERSAL,j.Type.NULL,!1,""));var n=j.create(j.Class.UNIVERSAL,j.Type.OCTETSTRING,!1,i.digest().getBytes());return a.value.push(s),a.value.push(n),j.toDer(a).getBytes()},"emsaPkcs1v15encode"),XM=c(function(i,e,u){if(u)return i.modPow(e.e,e.n);if(!e.p||!e.q)return i.modPow(e.d,e.n);e.dP||(e.dP=e.d.mod(e.p.subtract(U0.ONE))),e.dQ||(e.dQ=e.d.mod(e.q.subtract(U0.ONE))),e.qInv||(e.qInv=e.q.modInverse(e.p));var r;do r=new U0(L0.util.bytesToHex(L0.random.getBytes(e.n.bitLength()/8)),16);while(r.compareTo(e.n)>=0||!r.gcd(e.n).equals(U0.ONE));i=i.multiply(r.modPow(e.e,e.n)).mod(e.n);for(var a=i.mod(e.p).modPow(e.dP,e.p),s=i.mod(e.q).modPow(e.dQ,e.q);a.compareTo(s)<0;)a=a.add(e.p);var n=a.subtract(s).multiply(e.qInv).mod(e.p).multiply(e.q).add(s);return n=n.multiply(r.modInverse(e.n)).mod(e.n),n},"_modPow");T0.rsa.encrypt=function(i,e,u){var r=u,a,s=Math.ceil(e.n.bitLength()/8);u!==!1&&u!==!0?(r=u===2,a=QM(i,e,u)):(a=L0.util.createBuffer(),a.putBytes(i));for(var n=new U0(a.toHex(),16),l=XM(n,e,r),d=l.toString(16),p=L0.util.createBuffer(),h=s-Math.ceil(d.length/2);h>0;)p.putByte(0),--h;return p.putBytes(L0.util.hexToBytes(d)),p.getBytes()};T0.rsa.decrypt=function(i,e,u,r){var a=Math.ceil(e.n.bitLength()/8);if(i.length!==a){var s=new Error("Encrypted message length is invalid.");throw s.length=i.length,s.expected=a,s}var n=new U0(L0.util.createBuffer(i).toHex(),16);if(n.compareTo(e.n)>=0)throw new Error("Encrypted message is invalid.");for(var l=XM(n,e,u),d=l.toString(16),p=L0.util.createBuffer(),h=a-Math.ceil(d.length/2);h>0;)p.putByte(0),--h;return p.putBytes(L0.util.hexToBytes(d)),r!==!1?Zl(p.getBytes(),e,u):p.getBytes()};T0.rsa.createKeyPairGenerationState=function(i,e,u){typeof i=="string"&&(i=parseInt(i,10)),i=i||2048,u=u||{};var r=u.prng||L0.random,a={nextBytes:function(l){for(var d=r.getBytesSync(l.length),p=0;p>1,pBits:i-(i>>1),pqState:0,num:null,keys:null},n.e.fromInt(n.eInt);else throw new Error("Invalid key generation algorithm: "+s);return n};T0.rsa.stepKeyPairGenerationState=function(i,e){"algorithm"in i||(i.algorithm="PRIMEINC");var u=new U0(null);u.fromInt(30);for(var r=0,a=c(function(f,S){return f|S},"op_or"),s=+new Date,n,l=0;i.keys===null&&(e<=0||ld?i.pqState=0:i.num.isProbablePrime(dv(i.num.bitLength()))?++i.pqState:i.num.dAddOffset(rv[r++%8],0):i.pqState===2?i.pqState=i.num.subtract(U0.ONE).gcd(i.e).compareTo(U0.ONE)===0?3:0:i.pqState===3&&(i.pqState=0,i.p===null?i.p=i.num:i.q=i.num,i.p!==null&&i.q!==null&&++i.state,i.num=null)}else if(i.state===1)i.p.compareTo(i.q)<0&&(i.num=i.p,i.p=i.q,i.q=i.num),++i.state;else if(i.state===2)i.p1=i.p.subtract(U0.ONE),i.q1=i.q.subtract(U0.ONE),i.phi=i.p1.multiply(i.q1),++i.state;else if(i.state===3)i.phi.gcd(i.e).compareTo(U0.ONE)===0?++i.state:(i.p=null,i.q=null,i.state=0);else if(i.state===4)i.n=i.p.multiply(i.q),i.n.bitLength()===i.bits?++i.state:(i.q=null,i.state=0);else if(i.state===5){var h=i.e.modInverse(i.phi);i.keys={privateKey:T0.rsa.setPrivateKey(i.n,i.e,h,i.p,i.q,h.mod(i.p1),h.mod(i.q1),i.q.modInverse(i.p)),publicKey:T0.rsa.setPublicKey(i.n,i.e)}}n=+new Date,l+=n-s,s=n}return i.keys!==null};T0.rsa.generateKeyPair=function(i,e,u,r){if(arguments.length===1?typeof i=="object"?(u=i,i=void 0):typeof i=="function"&&(r=i,i=void 0):arguments.length===2?typeof i=="number"?typeof e=="function"?(r=e,e=void 0):typeof e!="number"&&(u=e,e=void 0):(u=i,r=e,i=void 0,e=void 0):arguments.length===3&&(typeof e=="number"?typeof u=="function"&&(r=u,u=void 0):(r=u,u=e,e=void 0)),u=u||{},i===void 0&&(i=u.bits||2048),e===void 0&&(e=u.e||65537),!L0.options.usePureJavaScript&&!u.prng&&i>=256&&i<=16384&&(e===65537||e===3)){if(r){if(qM("generateKeyPair"))return Oh.generateKeyPair("rsa",{modulusLength:i,publicExponent:e,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}},function(l,d,p){if(l)return r(l);r(null,{privateKey:T0.privateKeyFromPem(p),publicKey:T0.publicKeyFromPem(d)})});if(KM("generateKey")&&KM("exportKey"))return xu.globalScope.crypto.subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:i,publicExponent:jM(e),hash:{name:"SHA-256"}},!0,["sign","verify"]).then(function(l){return xu.globalScope.crypto.subtle.exportKey("pkcs8",l.privateKey)}).then(void 0,function(l){r(l)}).then(function(l){if(l){var d=T0.privateKeyFromAsn1(j.fromDer(L0.util.createBuffer(l)));r(null,{privateKey:d,publicKey:T0.setRsaPublicKey(d.n,d.e)})}});if(WM("generateKey")&&WM("exportKey")){var a=xu.globalScope.msCrypto.subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:i,publicExponent:jM(e),hash:{name:"SHA-256"}},!0,["sign","verify"]);a.oncomplete=function(l){var d=l.target.result,p=xu.globalScope.msCrypto.subtle.exportKey("pkcs8",d.privateKey);p.oncomplete=function(h){var f=h.target.result,S=T0.privateKeyFromAsn1(j.fromDer(L0.util.createBuffer(f)));r(null,{privateKey:S,publicKey:T0.setRsaPublicKey(S.n,S.e)})},p.onerror=function(h){r(h)}},a.onerror=function(l){r(l)};return}}else if(qM("generateKeyPairSync")){var s=Oh.generateKeyPairSync("rsa",{modulusLength:i,publicExponent:e,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{privateKey:T0.privateKeyFromPem(s.privateKey),publicKey:T0.publicKeyFromPem(s.publicKey)}}}var n=T0.rsa.createKeyPairGenerationState(i,e,u);if(!r)return T0.rsa.stepKeyPairGenerationState(n,0),n.keys;cv(n,u,r)};T0.setRsaPublicKey=T0.rsa.setPublicKey=function(i,e){var u={n:i,e};return u.encrypt=function(r,a,s){if(typeof a=="string"?a=a.toUpperCase():a===void 0&&(a="RSAES-PKCS1-V1_5"),a==="RSAES-PKCS1-V1_5")a={encode:function(l,d,p){return QM(l,d,2).getBytes()}};else if(a==="RSA-OAEP"||a==="RSAES-OAEP")a={encode:function(l,d){return L0.pkcs1.encode_rsa_oaep(d,l,s)}};else if(["RAW","NONE","NULL",null].indexOf(a)!==-1)a={encode:function(l){return l}};else if(typeof a=="string")throw new Error('Unsupported encryption scheme: "'+a+'".');var n=a.encode(r,u,!0);return T0.rsa.encrypt(n,u,!0)},u.verify=function(r,a,s,n){typeof s=="string"?s=s.toUpperCase():s===void 0&&(s="RSASSA-PKCS1-V1_5"),n===void 0&&(n={_parseAllDigestBytes:!0}),"_parseAllDigestBytes"in n||(n._parseAllDigestBytes=!0),s==="RSASSA-PKCS1-V1_5"?s={verify:function(d,p){p=Zl(p,u,!0);var h=j.fromDer(p,{parseAllBytes:n._parseAllDigestBytes}),f={},S=[];if(!j.validate(h,ov,f,S)){var _=new Error("ASN.1 object does not contain a valid RSASSA-PKCS1-v1_5 DigestInfo value.");throw _.errors=S,_}var O=j.derToOid(f.algorithmIdentifier);if(!(O===L0.oids.md2||O===L0.oids.md5||O===L0.oids.sha1||O===L0.oids.sha224||O===L0.oids.sha256||O===L0.oids.sha384||O===L0.oids.sha512||O===L0.oids["sha512-224"]||O===L0.oids["sha512-256"])){var _=new Error("Unknown RSASSA-PKCS1-v1_5 DigestAlgorithm identifier.");throw _.oid=O,_}if((O===L0.oids.md2||O===L0.oids.md5)&&!("parameters"in f))throw new Error("ASN.1 object does not contain a valid RSASSA-PKCS1-v1_5 DigestInfo value. Missing algorithm identifer NULL parameters.");return d===f.digest}}:(s==="NONE"||s==="NULL"||s===null)&&(s={verify:function(d,p){return p=Zl(p,u,!0),d===p}});var l=T0.rsa.decrypt(a,u,!0,!1);return s.verify(r,l,u.n.bitLength())},u};T0.setRsaPrivateKey=T0.rsa.setPrivateKey=function(i,e,u,r,a,s,n,l){var d={n:i,e,d:u,p:r,q:a,dP:s,dQ:n,qInv:l};return d.decrypt=function(p,h,f){typeof h=="string"?h=h.toUpperCase():h===void 0&&(h="RSAES-PKCS1-V1_5");var S=T0.rsa.decrypt(p,d,!1,!1);if(h==="RSAES-PKCS1-V1_5")h={decode:Zl};else if(h==="RSA-OAEP"||h==="RSAES-OAEP")h={decode:function(_,O){return L0.pkcs1.decode_rsa_oaep(O,_,f)}};else if(["RAW","NONE","NULL",null].indexOf(h)!==-1)h={decode:function(_){return _}};else throw new Error('Unsupported encryption scheme: "'+h+'".');return h.decode(S,d,!1)},d.sign=function(p,h){var f=!1;typeof h=="string"&&(h=h.toUpperCase()),h===void 0||h==="RSASSA-PKCS1-V1_5"?(h={encode:lv},f=1):(h==="NONE"||h==="NULL"||h===null)&&(h={encode:function(){return p}},f=1);var S=h.encode(p,d.n.bitLength());return T0.rsa.encrypt(S,d,f)},d};T0.wrapRsaPrivateKey=function(i){return j.create(j.Class.UNIVERSAL,j.Type.SEQUENCE,!0,[j.create(j.Class.UNIVERSAL,j.Type.INTEGER,!1,j.integerToDer(0).getBytes()),j.create(j.Class.UNIVERSAL,j.Type.SEQUENCE,!0,[j.create(j.Class.UNIVERSAL,j.Type.OID,!1,j.oidToDer(T0.oids.rsaEncryption).getBytes()),j.create(j.Class.UNIVERSAL,j.Type.NULL,!1,"")]),j.create(j.Class.UNIVERSAL,j.Type.OCTETSTRING,!1,j.toDer(i).getBytes())])};T0.privateKeyFromAsn1=function(i){var e={},u=[];if(j.validate(i,iv,e,u)&&(i=j.fromDer(L0.util.createBuffer(e.privateKey))),e={},u=[],!j.validate(i,av,e,u)){var r=new Error("Cannot read private key. ASN.1 object does not contain an RSAPrivateKey.");throw r.errors=u,r}var a,s,n,l,d,p,h,f;return a=L0.util.createBuffer(e.privateKeyModulus).toHex(),s=L0.util.createBuffer(e.privateKeyPublicExponent).toHex(),n=L0.util.createBuffer(e.privateKeyPrivateExponent).toHex(),l=L0.util.createBuffer(e.privateKeyPrime1).toHex(),d=L0.util.createBuffer(e.privateKeyPrime2).toHex(),p=L0.util.createBuffer(e.privateKeyExponent1).toHex(),h=L0.util.createBuffer(e.privateKeyExponent2).toHex(),f=L0.util.createBuffer(e.privateKeyCoefficient).toHex(),T0.setRsaPrivateKey(new U0(a,16),new U0(s,16),new U0(n,16),new U0(l,16),new U0(d,16),new U0(p,16),new U0(h,16),new U0(f,16))};T0.privateKeyToAsn1=T0.privateKeyToRSAPrivateKey=function(i){return j.create(j.Class.UNIVERSAL,j.Type.SEQUENCE,!0,[j.create(j.Class.UNIVERSAL,j.Type.INTEGER,!1,j.integerToDer(0).getBytes()),j.create(j.Class.UNIVERSAL,j.Type.INTEGER,!1,Mt(i.n)),j.create(j.Class.UNIVERSAL,j.Type.INTEGER,!1,Mt(i.e)),j.create(j.Class.UNIVERSAL,j.Type.INTEGER,!1,Mt(i.d)),j.create(j.Class.UNIVERSAL,j.Type.INTEGER,!1,Mt(i.p)),j.create(j.Class.UNIVERSAL,j.Type.INTEGER,!1,Mt(i.q)),j.create(j.Class.UNIVERSAL,j.Type.INTEGER,!1,Mt(i.dP)),j.create(j.Class.UNIVERSAL,j.Type.INTEGER,!1,Mt(i.dQ)),j.create(j.Class.UNIVERSAL,j.Type.INTEGER,!1,Mt(i.qInv))])};T0.publicKeyFromAsn1=function(i){var e={},u=[];if(j.validate(i,nv,e,u)){var r=j.derToOid(e.publicKeyOid);if(r!==T0.oids.rsaEncryption){var a=new Error("Cannot read public key. Unknown OID.");throw a.oid=r,a}i=e.rsaPublicKey}if(u=[],!j.validate(i,sv,e,u)){var a=new Error("Cannot read public key. ASN.1 object does not contain an RSAPublicKey.");throw a.errors=u,a}var s=L0.util.createBuffer(e.publicKeyModulus).toHex(),n=L0.util.createBuffer(e.publicKeyExponent).toHex();return T0.setRsaPublicKey(new U0(s,16),new U0(n,16))};T0.publicKeyToAsn1=T0.publicKeyToSubjectPublicKeyInfo=function(i){return j.create(j.Class.UNIVERSAL,j.Type.SEQUENCE,!0,[j.create(j.Class.UNIVERSAL,j.Type.SEQUENCE,!0,[j.create(j.Class.UNIVERSAL,j.Type.OID,!1,j.oidToDer(T0.oids.rsaEncryption).getBytes()),j.create(j.Class.UNIVERSAL,j.Type.NULL,!1,"")]),j.create(j.Class.UNIVERSAL,j.Type.BITSTRING,!1,[T0.publicKeyToRSAPublicKey(i)])])};T0.publicKeyToRSAPublicKey=function(i){return j.create(j.Class.UNIVERSAL,j.Type.SEQUENCE,!0,[j.create(j.Class.UNIVERSAL,j.Type.INTEGER,!1,Mt(i.n)),j.create(j.Class.UNIVERSAL,j.Type.INTEGER,!1,Mt(i.e))])};function QM(i,e,u){var r=L0.util.createBuffer(),a=Math.ceil(e.n.bitLength()/8);if(i.length>a-11){var s=new Error("Message is too long for PKCS#1 v1.5 padding.");throw s.length=i.length,s.max=a-11,s}r.putByte(0),r.putByte(u);var n=a-3-i.length,l;if(u===0||u===1){l=u===0?0:255;for(var d=0;d0;){for(var p=0,h=L0.random.getBytes(n),d=0;d"u")throw new Error("Encryption block is invalid.");var d=0;if(l===0){d=a-3-r;for(var p=0;p1;){if(s.getByte()!==255){--s.read;break}++d}else if(l===2)for(d=0;s.length()>1;){if(s.getByte()===0){--s.read;break}++d}var h=s.getByte();if(h!==0||d!==a-3-s.length())throw new Error("Encryption block is invalid.");return s.getBytes()}c(Zl,"_decodePkcs1_v1_5");function cv(i,e,u){typeof e=="function"&&(u=e,e={}),e=e||{};var r={algorithm:{name:e.algorithm||"PRIMEINC",options:{workers:e.workers||2,workLoad:e.workLoad||100,workerScript:e.workerScript}}};"prng"in e&&(r.prng=e.prng),a();function a(){s(i.pBits,function(l,d){if(l)return u(l);if(i.p=d,i.q!==null)return n(l,i.q);s(i.qBits,n)})}c(a,"generate");function s(l,d){L0.prime.generateProbablePrime(l,r,d)}c(s,"getPrime");function n(l,d){if(l)return u(l);if(i.q=d,i.p.compareTo(i.q)<0){var p=i.p;i.p=i.q,i.q=p}if(i.p.subtract(U0.ONE).gcd(i.e).compareTo(U0.ONE)!==0){i.p=null,a();return}if(i.q.subtract(U0.ONE).gcd(i.e).compareTo(U0.ONE)!==0){i.q=null,s(i.qBits,n);return}if(i.p1=i.p.subtract(U0.ONE),i.q1=i.q.subtract(U0.ONE),i.phi=i.p1.multiply(i.q1),i.phi.gcd(i.e).compareTo(U0.ONE)!==0){i.p=i.q=null,a();return}if(i.n=i.p.multiply(i.q),i.n.bitLength()!==i.bits){i.q=null,s(i.qBits,n);return}var h=i.e.modInverse(i.phi);i.keys={privateKey:T0.rsa.setPrivateKey(i.n,i.e,h,i.p,i.q,h.mod(i.p1),h.mod(i.q1),i.q.modInverse(i.p)),publicKey:T0.rsa.setPublicKey(i.n,i.e)},u(null,i.keys)}c(n,"finish")}c(cv,"_generateKeyPair");function Mt(i){var e=i.toString(16);e[0]>="8"&&(e="00"+e);var u=L0.util.hexToBytes(e);return u.length>1&&(u.charCodeAt(0)===0&&!(u.charCodeAt(1)&128)||u.charCodeAt(0)===255&&(u.charCodeAt(1)&128)===128)?u.substr(1):u}c(Mt,"_bnToBytes");function dv(i){return i<=100?27:i<=150?18:i<=200?15:i<=250?12:i<=300?9:i<=350?8:i<=400?7:i<=500?6:i<=600?5:i<=800?4:i<=1250?3:2}c(dv,"_getMillerRabinTests");function qM(i){return L0.util.isNodejs&&typeof Oh[i]=="function"}c(qM,"_detectNodeCrypto");function KM(i){return typeof xu.globalScope<"u"&&typeof xu.globalScope.crypto=="object"&&typeof xu.globalScope.crypto.subtle=="object"&&typeof xu.globalScope.crypto.subtle[i]=="function"}c(KM,"_detectSubtleCrypto");function WM(i){return typeof xu.globalScope<"u"&&typeof xu.globalScope.msCrypto=="object"&&typeof xu.globalScope.msCrypto.subtle=="object"&&typeof xu.globalScope.msCrypto.subtle[i]=="function"}c(WM,"_detectSubtleMsCrypto");function jM(i){for(var e=L0.util.hexToBytes(i.toString(16)),u=new Uint8Array(e.length),r=0;r{var f0=y0();Sr();ju();Rn();ht();Or();Xl();ri();Iu();oh();Nn();H0();typeof zM>"u"&&(zM=f0.jsbn.BigInteger);var zM,$=f0.asn1,g0=f0.pki=f0.pki||{};um.exports=g0.pbe=f0.pbe=f0.pbe||{};var si=g0.oids,pv={name:"EncryptedPrivateKeyInfo",tagClass:$.Class.UNIVERSAL,type:$.Type.SEQUENCE,constructed:!0,value:[{name:"EncryptedPrivateKeyInfo.encryptionAlgorithm",tagClass:$.Class.UNIVERSAL,type:$.Type.SEQUENCE,constructed:!0,value:[{name:"AlgorithmIdentifier.algorithm",tagClass:$.Class.UNIVERSAL,type:$.Type.OID,constructed:!1,capture:"encryptionOid"},{name:"AlgorithmIdentifier.parameters",tagClass:$.Class.UNIVERSAL,type:$.Type.SEQUENCE,constructed:!0,captureAsn1:"encryptionParams"}]},{name:"EncryptedPrivateKeyInfo.encryptedData",tagClass:$.Class.UNIVERSAL,type:$.Type.OCTETSTRING,constructed:!1,capture:"encryptedData"}]},hv={name:"PBES2Algorithms",tagClass:$.Class.UNIVERSAL,type:$.Type.SEQUENCE,constructed:!0,value:[{name:"PBES2Algorithms.keyDerivationFunc",tagClass:$.Class.UNIVERSAL,type:$.Type.SEQUENCE,constructed:!0,value:[{name:"PBES2Algorithms.keyDerivationFunc.oid",tagClass:$.Class.UNIVERSAL,type:$.Type.OID,constructed:!1,capture:"kdfOid"},{name:"PBES2Algorithms.params",tagClass:$.Class.UNIVERSAL,type:$.Type.SEQUENCE,constructed:!0,value:[{name:"PBES2Algorithms.params.salt",tagClass:$.Class.UNIVERSAL,type:$.Type.OCTETSTRING,constructed:!1,capture:"kdfSalt"},{name:"PBES2Algorithms.params.iterationCount",tagClass:$.Class.UNIVERSAL,type:$.Type.INTEGER,constructed:!1,capture:"kdfIterationCount"},{name:"PBES2Algorithms.params.keyLength",tagClass:$.Class.UNIVERSAL,type:$.Type.INTEGER,constructed:!1,optional:!0,capture:"keyLength"},{name:"PBES2Algorithms.params.prf",tagClass:$.Class.UNIVERSAL,type:$.Type.SEQUENCE,constructed:!0,optional:!0,value:[{name:"PBES2Algorithms.params.prf.algorithm",tagClass:$.Class.UNIVERSAL,type:$.Type.OID,constructed:!1,capture:"prfOid"}]}]}]},{name:"PBES2Algorithms.encryptionScheme",tagClass:$.Class.UNIVERSAL,type:$.Type.SEQUENCE,constructed:!0,value:[{name:"PBES2Algorithms.encryptionScheme.oid",tagClass:$.Class.UNIVERSAL,type:$.Type.OID,constructed:!1,capture:"encOid"},{name:"PBES2Algorithms.encryptionScheme.iv",tagClass:$.Class.UNIVERSAL,type:$.Type.OCTETSTRING,constructed:!1,capture:"encIv"}]}]},fv={name:"pkcs-12PbeParams",tagClass:$.Class.UNIVERSAL,type:$.Type.SEQUENCE,constructed:!0,value:[{name:"pkcs-12PbeParams.salt",tagClass:$.Class.UNIVERSAL,type:$.Type.OCTETSTRING,constructed:!1,capture:"salt"},{name:"pkcs-12PbeParams.iterations",tagClass:$.Class.UNIVERSAL,type:$.Type.INTEGER,constructed:!1,capture:"iterations"}]};g0.encryptPrivateKeyInfo=function(i,e,u){u=u||{},u.saltSize=u.saltSize||8,u.count=u.count||2048,u.algorithm=u.algorithm||"aes128",u.prfAlgorithm=u.prfAlgorithm||"sha1";var r=f0.random.getBytesSync(u.saltSize),a=u.count,s=$.integerToDer(a),n,l,d;if(u.algorithm.indexOf("aes")===0||u.algorithm==="des"){var p,h,f;switch(u.algorithm){case"aes128":n=16,p=16,h=si["aes128-CBC"],f=f0.aes.createEncryptionCipher;break;case"aes192":n=24,p=16,h=si["aes192-CBC"],f=f0.aes.createEncryptionCipher;break;case"aes256":n=32,p=16,h=si["aes256-CBC"],f=f0.aes.createEncryptionCipher;break;case"des":n=8,p=8,h=si.desCBC,f=f0.des.createEncryptionCipher;break;default:var S=new Error("Cannot encrypt private key. Unknown encryption algorithm.");throw S.algorithm=u.algorithm,S}var _="hmacWith"+u.prfAlgorithm.toUpperCase(),O=em(_),E=f0.pkcs5.pbkdf2(e,r,a,n,O),A=f0.random.getBytesSync(p),g=f(E);g.start(A),g.update($.toDer(i)),g.finish(),d=g.output.getBytes();var D=Sv(r,s,n,_);l=$.create($.Class.UNIVERSAL,$.Type.SEQUENCE,!0,[$.create($.Class.UNIVERSAL,$.Type.OID,!1,$.oidToDer(si.pkcs5PBES2).getBytes()),$.create($.Class.UNIVERSAL,$.Type.SEQUENCE,!0,[$.create($.Class.UNIVERSAL,$.Type.SEQUENCE,!0,[$.create($.Class.UNIVERSAL,$.Type.OID,!1,$.oidToDer(si.pkcs5PBKDF2).getBytes()),D]),$.create($.Class.UNIVERSAL,$.Type.SEQUENCE,!0,[$.create($.Class.UNIVERSAL,$.Type.OID,!1,$.oidToDer(h).getBytes()),$.create($.Class.UNIVERSAL,$.Type.OCTETSTRING,!1,A)])])])}else if(u.algorithm==="3des"){n=24;var I=new f0.util.ByteBuffer(r),E=g0.pbe.generatePkcs12Key(e,I,1,a,n),A=g0.pbe.generatePkcs12Key(e,I,2,a,n),g=f0.des.createEncryptionCipher(E);g.start(A),g.update($.toDer(i)),g.finish(),d=g.output.getBytes(),l=$.create($.Class.UNIVERSAL,$.Type.SEQUENCE,!0,[$.create($.Class.UNIVERSAL,$.Type.OID,!1,$.oidToDer(si["pbeWithSHAAnd3-KeyTripleDES-CBC"]).getBytes()),$.create($.Class.UNIVERSAL,$.Type.SEQUENCE,!0,[$.create($.Class.UNIVERSAL,$.Type.OCTETSTRING,!1,r),$.create($.Class.UNIVERSAL,$.Type.INTEGER,!1,s.getBytes())])])}else{var S=new Error("Cannot encrypt private key. Unknown encryption algorithm.");throw S.algorithm=u.algorithm,S}var W=$.create($.Class.UNIVERSAL,$.Type.SEQUENCE,!0,[l,$.create($.Class.UNIVERSAL,$.Type.OCTETSTRING,!1,d)]);return W};g0.decryptPrivateKeyInfo=function(i,e){var u=null,r={},a=[];if(!$.validate(i,pv,r,a)){var s=new Error("Cannot read encrypted private key. ASN.1 object is not a supported EncryptedPrivateKeyInfo.");throw s.errors=a,s}var n=$.derToOid(r.encryptionOid),l=g0.pbe.getCipher(n,r.encryptionParams,e),d=f0.util.createBuffer(r.encryptedData);return l.update(d),l.finish()&&(u=$.fromDer(l.output)),u};g0.encryptedPrivateKeyToPem=function(i,e){var u={type:"ENCRYPTED PRIVATE KEY",body:$.toDer(i).getBytes()};return f0.pem.encode(u,{maxline:e})};g0.encryptedPrivateKeyFromPem=function(i){var e=f0.pem.decode(i)[0];if(e.type!=="ENCRYPTED PRIVATE KEY"){var u=new Error('Could not convert encrypted private key from PEM; PEM header type is "ENCRYPTED PRIVATE KEY".');throw u.headerType=e.type,u}if(e.procType&&e.procType.type==="ENCRYPTED")throw new Error("Could not convert encrypted private key from PEM; PEM is encrypted.");return $.fromDer(e.body)};g0.encryptRsaPrivateKey=function(i,e,u){if(u=u||{},!u.legacy){var r=g0.wrapRsaPrivateKey(g0.privateKeyToAsn1(i));return r=g0.encryptPrivateKeyInfo(r,e,u),g0.encryptedPrivateKeyToPem(r)}var a,s,n,l;switch(u.algorithm){case"aes128":a="AES-128-CBC",n=16,s=f0.random.getBytesSync(16),l=f0.aes.createEncryptionCipher;break;case"aes192":a="AES-192-CBC",n=24,s=f0.random.getBytesSync(16),l=f0.aes.createEncryptionCipher;break;case"aes256":a="AES-256-CBC",n=32,s=f0.random.getBytesSync(16),l=f0.aes.createEncryptionCipher;break;case"3des":a="DES-EDE3-CBC",n=24,s=f0.random.getBytesSync(8),l=f0.des.createEncryptionCipher;break;case"des":a="DES-CBC",n=8,s=f0.random.getBytesSync(8),l=f0.des.createEncryptionCipher;break;default:var d=new Error('Could not encrypt RSA private key; unsupported encryption algorithm "'+u.algorithm+'".');throw d.algorithm=u.algorithm,d}var p=f0.pbe.opensslDeriveBytes(e,s.substr(0,8),n),h=l(p);h.start(s),h.update($.toDer(g0.privateKeyToAsn1(i))),h.finish();var f={type:"RSA PRIVATE KEY",procType:{version:"4",type:"ENCRYPTED"},dekInfo:{algorithm:a,parameters:f0.util.bytesToHex(s).toUpperCase()},body:h.output.getBytes()};return f0.pem.encode(f)};g0.decryptRsaPrivateKey=function(i,e){var u=null,r=f0.pem.decode(i)[0];if(r.type!=="ENCRYPTED PRIVATE KEY"&&r.type!=="PRIVATE KEY"&&r.type!=="RSA PRIVATE KEY"){var a=new Error('Could not convert private key from PEM; PEM header type is not "ENCRYPTED PRIVATE KEY", "PRIVATE KEY", or "RSA PRIVATE KEY".');throw a.headerType=a,a}if(r.procType&&r.procType.type==="ENCRYPTED"){var s,n;switch(r.dekInfo.algorithm){case"DES-CBC":s=8,n=f0.des.createDecryptionCipher;break;case"DES-EDE3-CBC":s=24,n=f0.des.createDecryptionCipher;break;case"AES-128-CBC":s=16,n=f0.aes.createDecryptionCipher;break;case"AES-192-CBC":s=24,n=f0.aes.createDecryptionCipher;break;case"AES-256-CBC":s=32,n=f0.aes.createDecryptionCipher;break;case"RC2-40-CBC":s=5,n=c(function(f){return f0.rc2.createDecryptionCipher(f,40)},"cipherFn");break;case"RC2-64-CBC":s=8,n=c(function(f){return f0.rc2.createDecryptionCipher(f,64)},"cipherFn");break;case"RC2-128-CBC":s=16,n=c(function(f){return f0.rc2.createDecryptionCipher(f,128)},"cipherFn");break;default:var a=new Error('Could not decrypt private key; unsupported encryption algorithm "'+r.dekInfo.algorithm+'".');throw a.algorithm=r.dekInfo.algorithm,a}var l=f0.util.hexToBytes(r.dekInfo.parameters),d=f0.pbe.opensslDeriveBytes(e,l.substr(0,8),s),p=n(d);if(p.start(l),p.update(f0.util.createBuffer(r.body)),p.finish())u=p.output.getBytes();else return u}else u=r.body;return r.type==="ENCRYPTED PRIVATE KEY"?u=g0.decryptPrivateKeyInfo($.fromDer(u),e):u=$.fromDer(u),u!==null&&(u=g0.privateKeyFromAsn1(u)),u};g0.pbe.generatePkcs12Key=function(i,e,u,r,a,s){var n,l;if(typeof s>"u"||s===null){if(!("sha1"in f0.md))throw new Error('"sha1" hash algorithm unavailable.');s=f0.md.sha1.create()}var d=s.digestLength,p=s.blockLength,h=new f0.util.ByteBuffer,f=new f0.util.ByteBuffer;if(i!=null){for(l=0;l=0;l--)Z=Z>>8,Z+=G.at(l)+e0.at(l),e0.setAt(l,Z&255);z.putBuffer(e0)}I=z,h.putBuffer(N)}return h.truncate(h.length()-a),h};g0.pbe.getCipher=function(i,e,u){switch(i){case g0.oids.pkcs5PBES2:return g0.pbe.getCipherForPBES2(i,e,u);case g0.oids["pbeWithSHAAnd3-KeyTripleDES-CBC"]:case g0.oids["pbewithSHAAnd40BitRC2-CBC"]:return g0.pbe.getCipherForPKCS12PBE(i,e,u);default:var r=new Error("Cannot read encrypted PBE data block. Unsupported OID.");throw r.oid=i,r.supportedOids=["pkcs5PBES2","pbeWithSHAAnd3-KeyTripleDES-CBC","pbewithSHAAnd40BitRC2-CBC"],r}};g0.pbe.getCipherForPBES2=function(i,e,u){var r={},a=[];if(!$.validate(e,hv,r,a)){var s=new Error("Cannot read password-based-encryption algorithm parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.");throw s.errors=a,s}if(i=$.derToOid(r.kdfOid),i!==g0.oids.pkcs5PBKDF2){var s=new Error("Cannot read encrypted private key. Unsupported key derivation function OID.");throw s.oid=i,s.supportedOids=["pkcs5PBKDF2"],s}if(i=$.derToOid(r.encOid),i!==g0.oids["aes128-CBC"]&&i!==g0.oids["aes192-CBC"]&&i!==g0.oids["aes256-CBC"]&&i!==g0.oids["des-EDE3-CBC"]&&i!==g0.oids.desCBC){var s=new Error("Cannot read encrypted private key. Unsupported encryption scheme OID.");throw s.oid=i,s.supportedOids=["aes128-CBC","aes192-CBC","aes256-CBC","des-EDE3-CBC","desCBC"],s}var n=r.kdfSalt,l=f0.util.createBuffer(r.kdfIterationCount);l=l.getInt(l.length()<<3);var d,p;switch(g0.oids[i]){case"aes128-CBC":d=16,p=f0.aes.createDecryptionCipher;break;case"aes192-CBC":d=24,p=f0.aes.createDecryptionCipher;break;case"aes256-CBC":d=32,p=f0.aes.createDecryptionCipher;break;case"des-EDE3-CBC":d=24,p=f0.des.createDecryptionCipher;break;case"desCBC":d=8,p=f0.des.createDecryptionCipher;break}var h=ZM(r.prfOid),f=f0.pkcs5.pbkdf2(u,n,l,d,h),S=r.encIv,_=p(f);return _.start(S),_};g0.pbe.getCipherForPKCS12PBE=function(i,e,u){var r={},a=[];if(!$.validate(e,fv,r,a)){var s=new Error("Cannot read password-based-encryption algorithm parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.");throw s.errors=a,s}var n=f0.util.createBuffer(r.salt),l=f0.util.createBuffer(r.iterations);l=l.getInt(l.length()<<3);var d,p,h;switch(i){case g0.oids["pbeWithSHAAnd3-KeyTripleDES-CBC"]:d=24,p=8,h=f0.des.startDecrypting;break;case g0.oids["pbewithSHAAnd40BitRC2-CBC"]:d=5,p=8,h=c(function(E,A){var g=f0.rc2.createDecryptionCipher(E,40);return g.start(A,null),g},"cipherFn");break;default:var s=new Error("Cannot read PKCS #12 PBE data block. Unsupported OID.");throw s.oid=i,s}var f=ZM(r.prfOid),S=g0.pbe.generatePkcs12Key(u,n,1,l,d,f);f.start();var _=g0.pbe.generatePkcs12Key(u,n,2,l,p,f);return h(S,_)};g0.pbe.opensslDeriveBytes=function(i,e,u,r){if(typeof r>"u"||r===null){if(!("md5"in f0.md))throw new Error('"md5" hash algorithm unavailable.');r=f0.md.md5.create()}e===null&&(e="");for(var a=[$M(r,i+e)],s=16,n=1;s{var _a=y0();ju();H0();var h0=_a.asn1,Ta=im.exports=_a.pkcs7asn1=_a.pkcs7asn1||{};_a.pkcs7=_a.pkcs7||{};_a.pkcs7.asn1=Ta;var tm={name:"ContentInfo",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,value:[{name:"ContentInfo.ContentType",tagClass:h0.Class.UNIVERSAL,type:h0.Type.OID,constructed:!1,capture:"contentType"},{name:"ContentInfo.content",tagClass:h0.Class.CONTEXT_SPECIFIC,type:0,constructed:!0,optional:!0,captureAsn1:"content"}]};Ta.contentInfoValidator=tm;var rm={name:"EncryptedContentInfo",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,value:[{name:"EncryptedContentInfo.contentType",tagClass:h0.Class.UNIVERSAL,type:h0.Type.OID,constructed:!1,capture:"contentType"},{name:"EncryptedContentInfo.contentEncryptionAlgorithm",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,value:[{name:"EncryptedContentInfo.contentEncryptionAlgorithm.algorithm",tagClass:h0.Class.UNIVERSAL,type:h0.Type.OID,constructed:!1,capture:"encAlgorithm"},{name:"EncryptedContentInfo.contentEncryptionAlgorithm.parameter",tagClass:h0.Class.UNIVERSAL,captureAsn1:"encParameter"}]},{name:"EncryptedContentInfo.encryptedContent",tagClass:h0.Class.CONTEXT_SPECIFIC,type:0,capture:"encryptedContent",captureAsn1:"encryptedContentAsn1"}]};Ta.envelopedDataValidator={name:"EnvelopedData",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,value:[{name:"EnvelopedData.Version",tagClass:h0.Class.UNIVERSAL,type:h0.Type.INTEGER,constructed:!1,capture:"version"},{name:"EnvelopedData.RecipientInfos",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SET,constructed:!0,captureAsn1:"recipientInfos"}].concat(rm)};Ta.encryptedDataValidator={name:"EncryptedData",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,value:[{name:"EncryptedData.Version",tagClass:h0.Class.UNIVERSAL,type:h0.Type.INTEGER,constructed:!1,capture:"version"}].concat(rm)};var Ov={name:"SignerInfo",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,value:[{name:"SignerInfo.version",tagClass:h0.Class.UNIVERSAL,type:h0.Type.INTEGER,constructed:!1},{name:"SignerInfo.issuerAndSerialNumber",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,value:[{name:"SignerInfo.issuerAndSerialNumber.issuer",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,captureAsn1:"issuer"},{name:"SignerInfo.issuerAndSerialNumber.serialNumber",tagClass:h0.Class.UNIVERSAL,type:h0.Type.INTEGER,constructed:!1,capture:"serial"}]},{name:"SignerInfo.digestAlgorithm",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,value:[{name:"SignerInfo.digestAlgorithm.algorithm",tagClass:h0.Class.UNIVERSAL,type:h0.Type.OID,constructed:!1,capture:"digestAlgorithm"},{name:"SignerInfo.digestAlgorithm.parameter",tagClass:h0.Class.UNIVERSAL,constructed:!1,captureAsn1:"digestParameter",optional:!0}]},{name:"SignerInfo.authenticatedAttributes",tagClass:h0.Class.CONTEXT_SPECIFIC,type:0,constructed:!0,optional:!0,capture:"authenticatedAttributes"},{name:"SignerInfo.digestEncryptionAlgorithm",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,capture:"signatureAlgorithm"},{name:"SignerInfo.encryptedDigest",tagClass:h0.Class.UNIVERSAL,type:h0.Type.OCTETSTRING,constructed:!1,capture:"signature"},{name:"SignerInfo.unauthenticatedAttributes",tagClass:h0.Class.CONTEXT_SPECIFIC,type:1,constructed:!0,optional:!0,capture:"unauthenticatedAttributes"}]};Ta.signedDataValidator={name:"SignedData",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,value:[{name:"SignedData.Version",tagClass:h0.Class.UNIVERSAL,type:h0.Type.INTEGER,constructed:!1,capture:"version"},{name:"SignedData.DigestAlgorithms",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SET,constructed:!0,captureAsn1:"digestAlgorithms"},tm,{name:"SignedData.Certificates",tagClass:h0.Class.CONTEXT_SPECIFIC,type:0,optional:!0,captureAsn1:"certificates"},{name:"SignedData.CertificateRevocationLists",tagClass:h0.Class.CONTEXT_SPECIFIC,type:1,optional:!0,captureAsn1:"crls"},{name:"SignedData.SignerInfos",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SET,capture:"signerInfos",optional:!0,value:[Ov]}]};Ta.recipientInfoValidator={name:"RecipientInfo",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,value:[{name:"RecipientInfo.version",tagClass:h0.Class.UNIVERSAL,type:h0.Type.INTEGER,constructed:!1,capture:"version"},{name:"RecipientInfo.issuerAndSerial",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,value:[{name:"RecipientInfo.issuerAndSerial.issuer",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,captureAsn1:"issuer"},{name:"RecipientInfo.issuerAndSerial.serialNumber",tagClass:h0.Class.UNIVERSAL,type:h0.Type.INTEGER,constructed:!1,capture:"serial"}]},{name:"RecipientInfo.keyEncryptionAlgorithm",tagClass:h0.Class.UNIVERSAL,type:h0.Type.SEQUENCE,constructed:!0,value:[{name:"RecipientInfo.keyEncryptionAlgorithm.algorithm",tagClass:h0.Class.UNIVERSAL,type:h0.Type.OID,constructed:!1,capture:"encAlgorithm"},{name:"RecipientInfo.keyEncryptionAlgorithm.parameter",tagClass:h0.Class.UNIVERSAL,constructed:!1,captureAsn1:"encParameter",optional:!0}]},{name:"RecipientInfo.encryptedKey",tagClass:h0.Class.UNIVERSAL,type:h0.Type.OCTETSTRING,constructed:!1,capture:"encKey"}]}});var Bh=b((QW,am)=>{var ni=y0();H0();ni.mgf=ni.mgf||{};var Lv=am.exports=ni.mgf.mgf1=ni.mgf1=ni.mgf1||{};Lv.create=function(i){var e={generate:function(u,r){for(var a=new ni.util.ByteBuffer,s=Math.ceil(r/i.digestLength),n=0;n{var ec=y0();Bh();sm.exports=ec.mgf=ec.mgf||{};ec.mgf.mgf1=ec.mgf1});var uc=b((zW,om)=>{var oi=y0();Iu();H0();var Ev=om.exports=oi.pss=oi.pss||{};Ev.create=function(i){arguments.length===3&&(i={md:arguments[0],mgf:arguments[1],saltLength:arguments[2]});var e=i.md,u=i.mgf,r=e.digestLength,a=i.salt||null;typeof a=="string"&&(a=oi.util.createBuffer(a));var s;if("saltLength"in i)s=i.saltLength;else if(a!==null)s=a.length();else throw new Error("Salt length not specified or specific salt not given.");if(a!==null&&a.length()!==s)throw new Error("Given salt length does not match length of given salt.");var n=i.prng||oi.random,l={};return l.encode=function(d,p){var h,f=p-1,S=Math.ceil(f/8),_=d.digest().getBytes();if(S>8*S-f&255;return Y=String.fromCharCode(Y.charCodeAt(0)&~N)+Y.substr(1),Y+A+"\xBC"},l.verify=function(d,p,h){var f,S=h-1,_=Math.ceil(S/8);if(p=p.substr(-_),_>8*_-S&255;if(E.charCodeAt(0)&g)throw new Error("Bits beyond keysize not zero as expected.");var D=u.generate(A,O),I="";for(f=0;f{var E0=y0();Sr();ju();Rn();ht();nm();Or();ri();uc();Nn();H0();var B=E0.asn1,o0=hm.exports=E0.pki=E0.pki||{},P0=o0.oids,fe={};fe.CN=P0.commonName;fe.commonName="CN";fe.C=P0.countryName;fe.countryName="C";fe.L=P0.localityName;fe.localityName="L";fe.ST=P0.stateOrProvinceName;fe.stateOrProvinceName="ST";fe.O=P0.organizationName;fe.organizationName="O";fe.OU=P0.organizationalUnitName;fe.organizationalUnitName="OU";fe.E=P0.emailAddress;fe.emailAddress="E";var cm=E0.pki.rsa.publicKeyValidator,Bv={name:"Certificate",tagClass:B.Class.UNIVERSAL,type:B.Type.SEQUENCE,constructed:!0,value:[{name:"Certificate.TBSCertificate",tagClass:B.Class.UNIVERSAL,type:B.Type.SEQUENCE,constructed:!0,captureAsn1:"tbsCertificate",value:[{name:"Certificate.TBSCertificate.version",tagClass:B.Class.CONTEXT_SPECIFIC,type:0,constructed:!0,optional:!0,value:[{name:"Certificate.TBSCertificate.version.integer",tagClass:B.Class.UNIVERSAL,type:B.Type.INTEGER,constructed:!1,capture:"certVersion"}]},{name:"Certificate.TBSCertificate.serialNumber",tagClass:B.Class.UNIVERSAL,type:B.Type.INTEGER,constructed:!1,capture:"certSerialNumber"},{name:"Certificate.TBSCertificate.signature",tagClass:B.Class.UNIVERSAL,type:B.Type.SEQUENCE,constructed:!0,value:[{name:"Certificate.TBSCertificate.signature.algorithm",tagClass:B.Class.UNIVERSAL,type:B.Type.OID,constructed:!1,capture:"certinfoSignatureOid"},{name:"Certificate.TBSCertificate.signature.parameters",tagClass:B.Class.UNIVERSAL,optional:!0,captureAsn1:"certinfoSignatureParams"}]},{name:"Certificate.TBSCertificate.issuer",tagClass:B.Class.UNIVERSAL,type:B.Type.SEQUENCE,constructed:!0,captureAsn1:"certIssuer"},{name:"Certificate.TBSCertificate.validity",tagClass:B.Class.UNIVERSAL,type:B.Type.SEQUENCE,constructed:!0,value:[{name:"Certificate.TBSCertificate.validity.notBefore (utc)",tagClass:B.Class.UNIVERSAL,type:B.Type.UTCTIME,constructed:!1,optional:!0,capture:"certValidity1UTCTime"},{name:"Certificate.TBSCertificate.validity.notBefore (generalized)",tagClass:B.Class.UNIVERSAL,type:B.Type.GENERALIZEDTIME,constructed:!1,optional:!0,capture:"certValidity2GeneralizedTime"},{name:"Certificate.TBSCertificate.validity.notAfter (utc)",tagClass:B.Class.UNIVERSAL,type:B.Type.UTCTIME,constructed:!1,optional:!0,capture:"certValidity3UTCTime"},{name:"Certificate.TBSCertificate.validity.notAfter (generalized)",tagClass:B.Class.UNIVERSAL,type:B.Type.GENERALIZEDTIME,constructed:!1,optional:!0,capture:"certValidity4GeneralizedTime"}]},{name:"Certificate.TBSCertificate.subject",tagClass:B.Class.UNIVERSAL,type:B.Type.SEQUENCE,constructed:!0,captureAsn1:"certSubject"},cm,{name:"Certificate.TBSCertificate.issuerUniqueID",tagClass:B.Class.CONTEXT_SPECIFIC,type:1,constructed:!0,optional:!0,value:[{name:"Certificate.TBSCertificate.issuerUniqueID.id",tagClass:B.Class.UNIVERSAL,type:B.Type.BITSTRING,constructed:!1,captureBitStringValue:"certIssuerUniqueId"}]},{name:"Certificate.TBSCertificate.subjectUniqueID",tagClass:B.Class.CONTEXT_SPECIFIC,type:2,constructed:!0,optional:!0,value:[{name:"Certificate.TBSCertificate.subjectUniqueID.id",tagClass:B.Class.UNIVERSAL,type:B.Type.BITSTRING,constructed:!1,captureBitStringValue:"certSubjectUniqueId"}]},{name:"Certificate.TBSCertificate.extensions",tagClass:B.Class.CONTEXT_SPECIFIC,type:3,constructed:!0,captureAsn1:"certExtensions",optional:!0}]},{name:"Certificate.signatureAlgorithm",tagClass:B.Class.UNIVERSAL,type:B.Type.SEQUENCE,constructed:!0,value:[{name:"Certificate.signatureAlgorithm.algorithm",tagClass:B.Class.UNIVERSAL,type:B.Type.OID,constructed:!1,capture:"certSignatureOid"},{name:"Certificate.TBSCertificate.signature.parameters",tagClass:B.Class.UNIVERSAL,optional:!0,captureAsn1:"certSignatureParams"}]},{name:"Certificate.signatureValue",tagClass:B.Class.UNIVERSAL,type:B.Type.BITSTRING,constructed:!1,captureBitStringValue:"certSignature"}]},Mv={name:"rsapss",tagClass:B.Class.UNIVERSAL,type:B.Type.SEQUENCE,constructed:!0,value:[{name:"rsapss.hashAlgorithm",tagClass:B.Class.CONTEXT_SPECIFIC,type:0,constructed:!0,value:[{name:"rsapss.hashAlgorithm.AlgorithmIdentifier",tagClass:B.Class.UNIVERSAL,type:B.Class.SEQUENCE,constructed:!0,optional:!0,value:[{name:"rsapss.hashAlgorithm.AlgorithmIdentifier.algorithm",tagClass:B.Class.UNIVERSAL,type:B.Type.OID,constructed:!1,capture:"hashOid"}]}]},{name:"rsapss.maskGenAlgorithm",tagClass:B.Class.CONTEXT_SPECIFIC,type:1,constructed:!0,value:[{name:"rsapss.maskGenAlgorithm.AlgorithmIdentifier",tagClass:B.Class.UNIVERSAL,type:B.Class.SEQUENCE,constructed:!0,optional:!0,value:[{name:"rsapss.maskGenAlgorithm.AlgorithmIdentifier.algorithm",tagClass:B.Class.UNIVERSAL,type:B.Type.OID,constructed:!1,capture:"maskGenOid"},{name:"rsapss.maskGenAlgorithm.AlgorithmIdentifier.params",tagClass:B.Class.UNIVERSAL,type:B.Type.SEQUENCE,constructed:!0,value:[{name:"rsapss.maskGenAlgorithm.AlgorithmIdentifier.params.algorithm",tagClass:B.Class.UNIVERSAL,type:B.Type.OID,constructed:!1,capture:"maskGenHashOid"}]}]}]},{name:"rsapss.saltLength",tagClass:B.Class.CONTEXT_SPECIFIC,type:2,optional:!0,value:[{name:"rsapss.saltLength.saltLength",tagClass:B.Class.UNIVERSAL,type:B.Class.INTEGER,constructed:!1,capture:"saltLength"}]},{name:"rsapss.trailerField",tagClass:B.Class.CONTEXT_SPECIFIC,type:3,optional:!0,value:[{name:"rsapss.trailer.trailer",tagClass:B.Class.UNIVERSAL,type:B.Class.INTEGER,constructed:!1,capture:"trailer"}]}]},mv={name:"CertificationRequestInfo",tagClass:B.Class.UNIVERSAL,type:B.Type.SEQUENCE,constructed:!0,captureAsn1:"certificationRequestInfo",value:[{name:"CertificationRequestInfo.integer",tagClass:B.Class.UNIVERSAL,type:B.Type.INTEGER,constructed:!1,capture:"certificationRequestInfoVersion"},{name:"CertificationRequestInfo.subject",tagClass:B.Class.UNIVERSAL,type:B.Type.SEQUENCE,constructed:!0,captureAsn1:"certificationRequestInfoSubject"},cm,{name:"CertificationRequestInfo.attributes",tagClass:B.Class.CONTEXT_SPECIFIC,type:0,constructed:!0,optional:!0,capture:"certificationRequestInfoAttributes",value:[{name:"CertificationRequestInfo.attributes",tagClass:B.Class.UNIVERSAL,type:B.Type.SEQUENCE,constructed:!0,value:[{name:"CertificationRequestInfo.attributes.type",tagClass:B.Class.UNIVERSAL,type:B.Type.OID,constructed:!1},{name:"CertificationRequestInfo.attributes.value",tagClass:B.Class.UNIVERSAL,type:B.Type.SET,constructed:!0}]}]}]},_v={name:"CertificationRequest",tagClass:B.Class.UNIVERSAL,type:B.Type.SEQUENCE,constructed:!0,captureAsn1:"csr",value:[mv,{name:"CertificationRequest.signatureAlgorithm",tagClass:B.Class.UNIVERSAL,type:B.Type.SEQUENCE,constructed:!0,value:[{name:"CertificationRequest.signatureAlgorithm.algorithm",tagClass:B.Class.UNIVERSAL,type:B.Type.OID,constructed:!1,capture:"csrSignatureOid"},{name:"CertificationRequest.signatureAlgorithm.parameters",tagClass:B.Class.UNIVERSAL,optional:!0,captureAsn1:"csrSignatureParams"}]},{name:"CertificationRequest.signature",tagClass:B.Class.UNIVERSAL,type:B.Type.BITSTRING,constructed:!1,captureBitStringValue:"csrSignature"}]};o0.RDNAttributesAsArray=function(i,e){for(var u=[],r,a,s,n=0;n2)throw new Error("Cannot read notBefore/notAfter validity times; more than two times were provided in the certificate.");if(d.length<2)throw new Error("Cannot read notBefore/notAfter validity times; they were not provided as either UTCTime or GeneralizedTime.");if(n.validity.notBefore=d[0],n.validity.notAfter=d[1],n.tbsCertificate=u.tbsCertificate,e){n.md=rc({signatureOid:n.signatureOid,type:"certificate"});var p=B.toDer(n.tbsCertificate);n.md.update(p.getBytes())}var h=E0.md.sha1.create(),f=B.toDer(u.certIssuer);h.update(f.getBytes()),n.issuer.getField=function(O){return Br(n.issuer,O)},n.issuer.addField=function(O){vu([O]),n.issuer.attributes.push(O)},n.issuer.attributes=o0.RDNAttributesAsArray(u.certIssuer),u.certIssuerUniqueId&&(n.issuer.uniqueId=u.certIssuerUniqueId),n.issuer.hash=h.digest().toHex();var S=E0.md.sha1.create(),_=B.toDer(u.certSubject);return S.update(_.getBytes()),n.subject.getField=function(O){return Br(n.subject,O)},n.subject.addField=function(O){vu([O]),n.subject.attributes.push(O)},n.subject.attributes=o0.RDNAttributesAsArray(u.certSubject),u.certSubjectUniqueId&&(n.subject.uniqueId=u.certSubjectUniqueId),n.subject.hash=S.digest().toHex(),u.certExtensions?n.extensions=o0.certificateExtensionsFromAsn1(u.certExtensions):n.extensions=[],n.publicKey=o0.publicKeyFromAsn1(u.subjectPublicKeyInfo),n};o0.certificateExtensionsFromAsn1=function(i){for(var e=[],u=0;u1&&(r=u.value.charCodeAt(1),a=u.value.length>2?u.value.charCodeAt(2):0),e.digitalSignature=(r&128)===128,e.nonRepudiation=(r&64)===64,e.keyEncipherment=(r&32)===32,e.dataEncipherment=(r&16)===16,e.keyAgreement=(r&8)===8,e.keyCertSign=(r&4)===4,e.cRLSign=(r&2)===2,e.encipherOnly=(r&1)===1,e.decipherOnly=(a&128)===128}else if(e.name==="basicConstraints"){var u=B.fromDer(e.value);u.value.length>0&&u.value[0].type===B.Type.BOOLEAN?e.cA=u.value[0].value.charCodeAt(0)!==0:e.cA=!1;var s=null;u.value.length>0&&u.value[0].type===B.Type.INTEGER?s=u.value[0].value:u.value.length>1&&(s=u.value[1].value),s!==null&&(e.pathLenConstraint=B.derToInteger(s))}else if(e.name==="extKeyUsage")for(var u=B.fromDer(e.value),n=0;n1&&(r=u.value.charCodeAt(1)),e.client=(r&128)===128,e.server=(r&64)===64,e.email=(r&32)===32,e.objsign=(r&16)===16,e.reserved=(r&8)===8,e.sslCA=(r&4)===4,e.emailCA=(r&2)===2,e.objCA=(r&1)===1}else if(e.name==="subjectAltName"||e.name==="issuerAltName"){e.altNames=[];for(var d,u=B.fromDer(e.value),p=0;p"u"&&(e.type&&e.type in o0.oids?e.name=o0.oids[e.type]:e.shortName&&e.shortName in fe&&(e.name=o0.oids[fe[e.shortName]])),typeof e.type>"u")if(e.name&&e.name in o0.oids)e.type=o0.oids[e.name];else{var r=new Error("Attribute type not specified.");throw r.attribute=e,r}if(typeof e.shortName>"u"&&e.name&&e.name in fe&&(e.shortName=fe[e.name]),e.type===P0.extensionRequest&&(e.valueConstructed=!0,e.valueTagClass=B.Type.SEQUENCE,!e.value&&e.extensions)){e.value=[];for(var a=0;a"u"){var r=new Error("Attribute value not specified.");throw r.attribute=e,r}}}c(vu,"_fillMissingFields");function pm(i,e){if(e=e||{},typeof i.name>"u"&&i.id&&i.id in o0.oids&&(i.name=o0.oids[i.id]),typeof i.id>"u")if(i.name&&i.name in o0.oids)i.id=o0.oids[i.name];else{var u=new Error("Extension ID not specified.");throw u.extension=i,u}if(typeof i.value<"u")return i;if(i.name==="keyUsage"){var r=0,a=0,s=0;i.digitalSignature&&(a|=128,r=7),i.nonRepudiation&&(a|=64,r=6),i.keyEncipherment&&(a|=32,r=5),i.dataEncipherment&&(a|=16,r=4),i.keyAgreement&&(a|=8,r=3),i.keyCertSign&&(a|=4,r=2),i.cRLSign&&(a|=2,r=1),i.encipherOnly&&(a|=1,r=0),i.decipherOnly&&(s|=128,r=7);var n=String.fromCharCode(r);s!==0?n+=String.fromCharCode(a)+String.fromCharCode(s):a!==0&&(n+=String.fromCharCode(a)),i.value=B.create(B.Class.UNIVERSAL,B.Type.BITSTRING,!1,n)}else if(i.name==="basicConstraints")i.value=B.create(B.Class.UNIVERSAL,B.Type.SEQUENCE,!0,[]),i.cA&&i.value.value.push(B.create(B.Class.UNIVERSAL,B.Type.BOOLEAN,!1,"\xFF")),"pathLenConstraint"in i&&i.value.value.push(B.create(B.Class.UNIVERSAL,B.Type.INTEGER,!1,B.integerToDer(i.pathLenConstraint).getBytes()));else if(i.name==="extKeyUsage"){i.value=B.create(B.Class.UNIVERSAL,B.Type.SEQUENCE,!0,[]);var l=i.value.value;for(var d in i)i[d]===!0&&(d in P0?l.push(B.create(B.Class.UNIVERSAL,B.Type.OID,!1,B.oidToDer(P0[d]).getBytes())):d.indexOf(".")!==-1&&l.push(B.create(B.Class.UNIVERSAL,B.Type.OID,!1,B.oidToDer(d).getBytes())))}else if(i.name==="nsCertType"){var r=0,a=0;i.client&&(a|=128,r=7),i.server&&(a|=64,r=6),i.email&&(a|=32,r=5),i.objsign&&(a|=16,r=4),i.reserved&&(a|=8,r=3),i.sslCA&&(a|=4,r=2),i.emailCA&&(a|=2,r=1),i.objCA&&(a|=1,r=0);var n=String.fromCharCode(r);a!==0&&(n+=String.fromCharCode(a)),i.value=B.create(B.Class.UNIVERSAL,B.Type.BITSTRING,!1,n)}else if(i.name==="subjectAltName"||i.name==="issuerAltName"){i.value=B.create(B.Class.UNIVERSAL,B.Type.SEQUENCE,!0,[]);for(var p,h=0;h128)throw new Error('Invalid "nsComment" content.');i.value=B.create(B.Class.UNIVERSAL,B.Type.IA5STRING,!1,i.comment)}else if(i.name==="subjectKeyIdentifier"&&e.cert){var f=e.cert.generateSubjectKeyIdentifier();i.subjectKeyIdentifier=f.toHex(),i.value=B.create(B.Class.UNIVERSAL,B.Type.OCTETSTRING,!1,f.getBytes())}else if(i.name==="authorityKeyIdentifier"&&e.cert){i.value=B.create(B.Class.UNIVERSAL,B.Type.SEQUENCE,!0,[]);var l=i.value.value;if(i.keyIdentifier){var S=i.keyIdentifier===!0?e.cert.generateSubjectKeyIdentifier().getBytes():i.keyIdentifier;l.push(B.create(B.Class.CONTEXT_SPECIFIC,0,!1,S))}if(i.authorityCertIssuer){var _=[B.create(B.Class.CONTEXT_SPECIFIC,4,!0,[Ya(i.authorityCertIssuer===!0?e.cert.issuer:i.authorityCertIssuer)])];l.push(B.create(B.Class.CONTEXT_SPECIFIC,1,!0,_))}if(i.serialNumber){var O=E0.util.hexToBytes(i.serialNumber===!0?e.cert.serialNumber:i.serialNumber);l.push(B.create(B.Class.CONTEXT_SPECIFIC,2,!1,O))}}else if(i.name==="cRLDistributionPoints"){i.value=B.create(B.Class.UNIVERSAL,B.Type.SEQUENCE,!0,[]);for(var l=i.value.value,E=B.create(B.Class.UNIVERSAL,B.Type.SEQUENCE,!0,[]),A=B.create(B.Class.CONTEXT_SPECIFIC,0,!0,[]),p,h=0;h"u"){var u=new Error("Extension value not specified.");throw u.extension=i,u}return i}c(pm,"_fillMissingExtensionFields");function Mh(i,e){switch(i){case P0["RSASSA-PSS"]:var u=[];return e.hash.algorithmOid!==void 0&&u.push(B.create(B.Class.CONTEXT_SPECIFIC,0,!0,[B.create(B.Class.UNIVERSAL,B.Type.SEQUENCE,!0,[B.create(B.Class.UNIVERSAL,B.Type.OID,!1,B.oidToDer(e.hash.algorithmOid).getBytes()),B.create(B.Class.UNIVERSAL,B.Type.NULL,!1,"")])])),e.mgf.algorithmOid!==void 0&&u.push(B.create(B.Class.CONTEXT_SPECIFIC,1,!0,[B.create(B.Class.UNIVERSAL,B.Type.SEQUENCE,!0,[B.create(B.Class.UNIVERSAL,B.Type.OID,!1,B.oidToDer(e.mgf.algorithmOid).getBytes()),B.create(B.Class.UNIVERSAL,B.Type.SEQUENCE,!0,[B.create(B.Class.UNIVERSAL,B.Type.OID,!1,B.oidToDer(e.mgf.hash.algorithmOid).getBytes()),B.create(B.Class.UNIVERSAL,B.Type.NULL,!1,"")])])])),e.saltLength!==void 0&&u.push(B.create(B.Class.CONTEXT_SPECIFIC,2,!0,[B.create(B.Class.UNIVERSAL,B.Type.INTEGER,!1,B.integerToDer(e.saltLength).getBytes())])),B.create(B.Class.UNIVERSAL,B.Type.SEQUENCE,!0,u);default:return B.create(B.Class.UNIVERSAL,B.Type.NULL,!1,"")}}c(Mh,"_signatureParametersToAsn1");function Tv(i){var e=B.create(B.Class.CONTEXT_SPECIFIC,0,!0,[]);if(i.attributes.length===0)return e;for(var u=i.attributes,r=0;r=Yv&&i0&&r.value.push(o0.certificateExtensionsToAsn1(i.extensions)),r};o0.getCertificationRequestInfo=function(i){var e=B.create(B.Class.UNIVERSAL,B.Type.SEQUENCE,!0,[B.create(B.Class.UNIVERSAL,B.Type.INTEGER,!1,B.integerToDer(i.version).getBytes()),Ya(i.subject),o0.publicKeyToAsn1(i.publicKey),Tv(i)]);return e};o0.distinguishedNameToAsn1=function(i){return Ya(i)};o0.certificateToAsn1=function(i){var e=i.tbsCertificate||o0.getTBSCertificate(i);return B.create(B.Class.UNIVERSAL,B.Type.SEQUENCE,!0,[e,B.create(B.Class.UNIVERSAL,B.Type.SEQUENCE,!0,[B.create(B.Class.UNIVERSAL,B.Type.OID,!1,B.oidToDer(i.signatureOid).getBytes()),Mh(i.signatureOid,i.signatureParameters)]),B.create(B.Class.UNIVERSAL,B.Type.BITSTRING,!1,"\0"+i.signature)])};o0.certificateExtensionsToAsn1=function(i){var e=B.create(B.Class.CONTEXT_SPECIFIC,3,!0,[]),u=B.create(B.Class.UNIVERSAL,B.Type.SEQUENCE,!0,[]);e.value.push(u);for(var r=0;r"u"&&(a=new Date);var s=!0,n=null,l=0;do{var d=e.shift(),p=null,h=!1;if(a&&(ad.validity.notAfter)&&(n={message:"Certificate is not valid yet or has expired.",error:o0.certificateError.certificate_expired,notBefore:d.validity.notBefore,notAfter:d.validity.notAfter,now:a}),n===null){if(p=e[0]||i.getIssuer(d),p===null&&d.isIssuer(d)&&(h=!0,p=d),p){var f=p;E0.util.isArray(f)||(f=[f]);for(var S=!1;!S&&f.length>0;){p=f.shift();try{S=p.verify(d)}catch{}}S||(n={message:"Certificate signature is invalid.",error:o0.certificateError.bad_certificate})}n===null&&(!p||h)&&!i.hasCertificate(d)&&(n={message:"Certificate is not trusted.",error:o0.certificateError.unknown_ca})}if(n===null&&p&&!d.isIssuer(p)&&(n={message:"Certificate issuer is invalid.",error:o0.certificateError.bad_certificate}),n===null)for(var _={keyUsage:!0,basicConstraints:!0},O=0;n===null&&OA.pathLenConstraint&&(n={message:"Certificate basicConstraints pathLenConstraint violated.",error:o0.certificateError.bad_certificate})}}var I=n===null?!0:n.error,W=u.verify?u.verify(I,l,r):I;if(W===!0)n=null;else throw I===!0&&(n={message:"The application rejected the certificate.",error:o0.certificateError.bad_certificate}),(W||W===0)&&(typeof W=="object"&&!E0.util.isArray(W)?(W.message&&(n.message=W.message),W.error&&(n.error=W.error)):typeof W=="string"&&(n.error=W)),n;s=!1,++l}while(e.length>0);return!0}});var _h=b((ej,Sm)=>{var te=y0();ju();La();Or();Eh();Lh();Iu();Nn();ma();H0();ic();var v=te.asn1,x0=te.pki,In=Sm.exports=te.pkcs12=te.pkcs12||{},fm={name:"ContentInfo",tagClass:v.Class.UNIVERSAL,type:v.Type.SEQUENCE,constructed:!0,value:[{name:"ContentInfo.contentType",tagClass:v.Class.UNIVERSAL,type:v.Type.OID,constructed:!1,capture:"contentType"},{name:"ContentInfo.content",tagClass:v.Class.CONTEXT_SPECIFIC,constructed:!0,captureAsn1:"content"}]},Rv={name:"PFX",tagClass:v.Class.UNIVERSAL,type:v.Type.SEQUENCE,constructed:!0,value:[{name:"PFX.version",tagClass:v.Class.UNIVERSAL,type:v.Type.INTEGER,constructed:!1,capture:"version"},fm,{name:"PFX.macData",tagClass:v.Class.UNIVERSAL,type:v.Type.SEQUENCE,constructed:!0,optional:!0,captureAsn1:"mac",value:[{name:"PFX.macData.mac",tagClass:v.Class.UNIVERSAL,type:v.Type.SEQUENCE,constructed:!0,value:[{name:"PFX.macData.mac.digestAlgorithm",tagClass:v.Class.UNIVERSAL,type:v.Type.SEQUENCE,constructed:!0,value:[{name:"PFX.macData.mac.digestAlgorithm.algorithm",tagClass:v.Class.UNIVERSAL,type:v.Type.OID,constructed:!1,capture:"macAlgorithm"},{name:"PFX.macData.mac.digestAlgorithm.parameters",tagClass:v.Class.UNIVERSAL,captureAsn1:"macAlgorithmParameters"}]},{name:"PFX.macData.mac.digest",tagClass:v.Class.UNIVERSAL,type:v.Type.OCTETSTRING,constructed:!1,capture:"macDigest"}]},{name:"PFX.macData.macSalt",tagClass:v.Class.UNIVERSAL,type:v.Type.OCTETSTRING,constructed:!1,capture:"macSalt"},{name:"PFX.macData.iterations",tagClass:v.Class.UNIVERSAL,type:v.Type.INTEGER,constructed:!1,optional:!0,capture:"macIterations"}]}]},gv={name:"SafeBag",tagClass:v.Class.UNIVERSAL,type:v.Type.SEQUENCE,constructed:!0,value:[{name:"SafeBag.bagId",tagClass:v.Class.UNIVERSAL,type:v.Type.OID,constructed:!1,capture:"bagId"},{name:"SafeBag.bagValue",tagClass:v.Class.CONTEXT_SPECIFIC,constructed:!0,captureAsn1:"bagValue"},{name:"SafeBag.bagAttributes",tagClass:v.Class.UNIVERSAL,type:v.Type.SET,constructed:!0,optional:!0,capture:"bagAttributes"}]},yv={name:"Attribute",tagClass:v.Class.UNIVERSAL,type:v.Type.SEQUENCE,constructed:!0,value:[{name:"Attribute.attrId",tagClass:v.Class.UNIVERSAL,type:v.Type.OID,constructed:!1,capture:"oid"},{name:"Attribute.attrValues",tagClass:v.Class.UNIVERSAL,type:v.Type.SET,constructed:!0,capture:"values"}]},Nv={name:"CertBag",tagClass:v.Class.UNIVERSAL,type:v.Type.SEQUENCE,constructed:!0,value:[{name:"CertBag.certId",tagClass:v.Class.UNIVERSAL,type:v.Type.OID,constructed:!1,capture:"certId"},{name:"CertBag.certValue",tagClass:v.Class.CONTEXT_SPECIFIC,constructed:!0,value:[{name:"CertBag.certValue[0]",tagClass:v.Class.UNIVERSAL,type:v.Class.OCTETSTRING,constructed:!1,capture:"cert"}]}]};function Cn(i,e,u,r){for(var a=[],s=0;s=0&&a.push(l)}}return a}c(Cn,"_getBagsByAttribute");In.pkcs12FromAsn1=function(i,e,u){typeof e=="string"?(u=e,e=!0):e===void 0&&(e=!0);var r={},a=[];if(!v.validate(i,Rv,r,a)){var s=new Error("Cannot read PKCS#12 PFX. ASN.1 object is not an PKCS#12 PFX.");throw s.errors=s,s}var n={version:r.version.charCodeAt(0),safeContents:[],getBags:function(A){var g={},D;return"localKeyId"in A?D=A.localKeyId:"localKeyIdHex"in A&&(D=te.util.hexToBytes(A.localKeyIdHex)),D===void 0&&!("friendlyName"in A)&&"bagType"in A&&(g[A.bagType]=Cn(n.safeContents,null,null,A.bagType)),D!==void 0&&(g.localKeyId=Cn(n.safeContents,"localKeyId",D,A.bagType)),"friendlyName"in A&&(g.friendlyName=Cn(n.safeContents,"friendlyName",A.friendlyName,A.bagType)),g},getBagsByFriendlyName:function(A,g){return Cn(n.safeContents,"friendlyName",A,g)},getBagsByLocalKeyId:function(A,g){return Cn(n.safeContents,"localKeyId",A,g)}};if(r.version.charCodeAt(0)!==3){var s=new Error("PKCS#12 PFX of version other than 3 not supported.");throw s.version=r.version.charCodeAt(0),s}if(v.derToOid(r.contentType)!==x0.oids.data){var s=new Error("Only PKCS#12 PFX in password integrity mode supported.");throw s.oid=v.derToOid(r.contentType),s}var l=r.content.value[0];if(l.tagClass!==v.Class.UNIVERSAL||l.type!==v.Type.OCTETSTRING)throw new Error("PKCS#12 authSafe content data is not an OCTET STRING.");if(l=mh(l),r.mac){var d=null,p=0,h=v.derToOid(r.macAlgorithm);switch(h){case x0.oids.sha1:d=te.md.sha1.create(),p=20;break;case x0.oids.sha256:d=te.md.sha256.create(),p=32;break;case x0.oids.sha384:d=te.md.sha384.create(),p=48;break;case x0.oids.sha512:d=te.md.sha512.create(),p=64;break;case x0.oids.md5:d=te.md.md5.create(),p=16;break}if(d===null)throw new Error("PKCS#12 uses unsupported MAC algorithm: "+h);var f=new te.util.ByteBuffer(r.macSalt),S="macIterations"in r?parseInt(te.util.bytesToHex(r.macIterations),16):1,_=In.generateKey(u,f,3,S,p,d),O=te.hmac.create();O.start(d,_),O.update(l.value);var E=O.getMac();if(E.getBytes()!==r.macDigest)throw new Error("PKCS#12 MAC could not be verified. Invalid password?")}return Cv(n,l.value,e,u),n};function mh(i){if(i.composed||i.constructed){for(var e=te.util.createBuffer(),u=0;u0&&(s=v.create(v.Class.UNIVERSAL,v.Type.SET,!0,d));var p=[],h=[];e!==null&&(te.util.isArray(e)?h=e:h=[e]);for(var f=[],S=0;S0){var A=v.create(v.Class.UNIVERSAL,v.Type.SEQUENCE,!0,f),g=v.create(v.Class.UNIVERSAL,v.Type.SEQUENCE,!0,[v.create(v.Class.UNIVERSAL,v.Type.OID,!1,v.oidToDer(x0.oids.data).getBytes()),v.create(v.Class.CONTEXT_SPECIFIC,0,!0,[v.create(v.Class.UNIVERSAL,v.Type.OCTETSTRING,!1,v.toDer(A).getBytes())])]);p.push(g)}var D=null;if(i!==null){var I=x0.wrapRsaPrivateKey(x0.privateKeyToAsn1(i));u===null?D=v.create(v.Class.UNIVERSAL,v.Type.SEQUENCE,!0,[v.create(v.Class.UNIVERSAL,v.Type.OID,!1,v.oidToDer(x0.oids.keyBag).getBytes()),v.create(v.Class.CONTEXT_SPECIFIC,0,!0,[I]),s]):D=v.create(v.Class.UNIVERSAL,v.Type.SEQUENCE,!0,[v.create(v.Class.UNIVERSAL,v.Type.OID,!1,v.oidToDer(x0.oids.pkcs8ShroudedKeyBag).getBytes()),v.create(v.Class.CONTEXT_SPECIFIC,0,!0,[x0.encryptPrivateKeyInfo(I,u,r)]),s]);var W=v.create(v.Class.UNIVERSAL,v.Type.SEQUENCE,!0,[D]),Y=v.create(v.Class.UNIVERSAL,v.Type.SEQUENCE,!0,[v.create(v.Class.UNIVERSAL,v.Type.OID,!1,v.oidToDer(x0.oids.data).getBytes()),v.create(v.Class.CONTEXT_SPECIFIC,0,!0,[v.create(v.Class.UNIVERSAL,v.Type.OCTETSTRING,!1,v.toDer(W).getBytes())])]);p.push(Y)}var N=v.create(v.Class.UNIVERSAL,v.Type.SEQUENCE,!0,p),w;if(r.useMac){var l=te.md.sha1.create(),G=new te.util.ByteBuffer(te.random.getBytes(r.saltSize)),U=r.count,i=In.generateKey(u,G,3,U,20),z=te.hmac.create();z.start(l,i),z.update(v.toDer(N).getBytes());var e0=z.getMac();w=v.create(v.Class.UNIVERSAL,v.Type.SEQUENCE,!0,[v.create(v.Class.UNIVERSAL,v.Type.SEQUENCE,!0,[v.create(v.Class.UNIVERSAL,v.Type.SEQUENCE,!0,[v.create(v.Class.UNIVERSAL,v.Type.OID,!1,v.oidToDer(x0.oids.sha1).getBytes()),v.create(v.Class.UNIVERSAL,v.Type.NULL,!1,"")]),v.create(v.Class.UNIVERSAL,v.Type.OCTETSTRING,!1,e0.getBytes())]),v.create(v.Class.UNIVERSAL,v.Type.OCTETSTRING,!1,G.getBytes()),v.create(v.Class.UNIVERSAL,v.Type.INTEGER,!1,v.integerToDer(U).getBytes())])}return v.create(v.Class.UNIVERSAL,v.Type.SEQUENCE,!0,[v.create(v.Class.UNIVERSAL,v.Type.INTEGER,!1,v.integerToDer(3).getBytes()),v.create(v.Class.UNIVERSAL,v.Type.SEQUENCE,!0,[v.create(v.Class.UNIVERSAL,v.Type.OID,!1,v.oidToDer(x0.oids.data).getBytes()),v.create(v.Class.CONTEXT_SPECIFIC,0,!0,[v.create(v.Class.UNIVERSAL,v.Type.OCTETSTRING,!1,v.toDer(N).getBytes())])]),w])};In.generateKey=te.pbe.generatePkcs12Key});var Yh=b((tj,Om)=>{var Mr=y0();ju();Or();Lh();ri();Xl();_h();uc();Nn();H0();ic();var Th=Mr.asn1,Aa=Om.exports=Mr.pki=Mr.pki||{};Aa.pemToDer=function(i){var e=Mr.pem.decode(i)[0];if(e.procType&&e.procType.type==="ENCRYPTED")throw new Error("Could not convert PEM to DER; PEM is encrypted.");return Mr.util.createBuffer(e.body)};Aa.privateKeyFromPem=function(i){var e=Mr.pem.decode(i)[0];if(e.type!=="PRIVATE KEY"&&e.type!=="RSA PRIVATE KEY"){var u=new Error('Could not convert private key from PEM; PEM header type is not "PRIVATE KEY" or "RSA PRIVATE KEY".');throw u.headerType=e.type,u}if(e.procType&&e.procType.type==="ENCRYPTED")throw new Error("Could not convert private key from PEM; PEM is encrypted.");var r=Th.fromDer(e.body);return Aa.privateKeyFromAsn1(r)};Aa.privateKeyToPem=function(i,e){var u={type:"RSA PRIVATE KEY",body:Th.toDer(Aa.privateKeyToAsn1(i)).getBytes()};return Mr.pem.encode(u,{maxline:e})};Aa.privateKeyInfoToPem=function(i,e){var u={type:"PRIVATE KEY",body:Th.toDer(i).getBytes()};return Mr.pem.encode(u,{maxline:e})}});var Ch=b((rj,Ym)=>{var r0=y0();ju();La();ql();ri();Yh();Iu();ma();H0();var oc=c(function(i,e,u,r){var a=r0.util.createBuffer(),s=i.length>>1,n=s+(i.length&1),l=i.substr(0,n),d=i.substr(s,n),p=r0.util.createBuffer(),h=r0.hmac.create();u=e+u;var f=Math.ceil(r/16),S=Math.ceil(r/20);h.start("MD5",l);var _=r0.util.createBuffer();p.putBytes(u);for(var O=0;O0&&(T.queue(i,T.createAlert(i,{level:T.Alert.Level.warning,description:T.Alert.Description.no_renegotiation})),T.flush(i)),i.process()};T.parseHelloMessage=function(i,e,u){var r=null,a=i.entity===T.ConnectionEnd.client;if(u<38)i.error(i,{message:a?"Invalid ServerHello message. Message too short.":"Invalid ClientHello message. Message too short.",send:!0,alert:{level:T.Alert.Level.fatal,description:T.Alert.Description.illegal_parameter}});else{var s=e.fragment,n=s.length();if(r={version:{major:s.getByte(),minor:s.getByte()},random:r0.util.createBuffer(s.getBytes(32)),session_id:mu(s,1),extensions:[]},a?(r.cipher_suite=s.getBytes(2),r.compression_method=s.getByte()):(r.cipher_suites=mu(s,2),r.compression_methods=mu(s,1)),n=u-(n-s.length()),n>0){for(var l=mu(s,2);l.length()>0;)r.extensions.push({type:[l.getByte(),l.getByte()],data:mu(l,2)});if(!a)for(var d=0;d0;){var f=h.getByte();if(f!==0)break;i.session.extensions.server_name.serverNameList.push(mu(h,2).getBytes())}}}if(i.session.version&&(r.version.major!==i.session.version.major||r.version.minor!==i.session.version.minor))return i.error(i,{message:"TLS version change is disallowed during renegotiation.",send:!0,alert:{level:T.Alert.Level.fatal,description:T.Alert.Description.protocol_version}});if(a)i.session.cipherSuite=T.getCipherSuite(r.cipher_suite);else for(var S=r0.util.createBuffer(r.cipher_suites.bytes());S.length()>0&&(i.session.cipherSuite=T.getCipherSuite(S.getBytes(2)),i.session.cipherSuite===null););if(i.session.cipherSuite===null)return i.error(i,{message:"No cipher suites in common.",send:!0,alert:{level:T.Alert.Level.fatal,description:T.Alert.Description.handshake_failure},cipherSuite:r0.util.bytesToHex(r.cipher_suite)});a?i.session.compressionMethod=r.compression_method:i.session.compressionMethod=T.CompressionMethod.none}return r};T.createSecurityParameters=function(i,e){var u=i.entity===T.ConnectionEnd.client,r=e.random.bytes(),a=u?i.session.sp.client_random:r,s=u?r:T.createRandom().getBytes();i.session.sp={entity:i.entity,prf_algorithm:T.PRFAlgorithm.tls_prf_sha256,bulk_cipher_algorithm:null,cipher_type:null,enc_key_length:null,block_length:null,fixed_iv_length:null,record_iv_length:null,mac_algorithm:null,mac_length:null,mac_key_length:null,compression_algorithm:i.session.compressionMethod,pre_master_secret:null,master_secret:null,client_random:a,server_random:s}};T.handleServerHello=function(i,e,u){var r=T.parseHelloMessage(i,e,u);if(!i.fail){if(r.version.minor<=i.version.minor)i.version.minor=r.version.minor;else return i.error(i,{message:"Incompatible TLS version.",send:!0,alert:{level:T.Alert.Level.fatal,description:T.Alert.Description.protocol_version}});i.session.version=i.version;var a=r.session_id.bytes();a.length>0&&a===i.session.id?(i.expect=Bm,i.session.resuming=!0,i.session.sp.server_random=r.random.bytes()):(i.expect=Pv,i.session.resuming=!1,T.createSecurityParameters(i,r)),i.session.id=a,i.process()}};T.handleClientHello=function(i,e,u){var r=T.parseHelloMessage(i,e,u);if(!i.fail){var a=r.session_id.bytes(),s=null;if(i.sessionCache&&(s=i.sessionCache.getSession(a),s===null?a="":(s.version.major!==r.version.major||s.version.minor>r.version.minor)&&(s=null,a="")),a.length===0&&(a=r0.random.getBytes(32)),i.session.id=a,i.session.clientHelloVersion=r.version,i.session.sp={},s)i.version=i.session.version=s.version,i.session.sp=s.sp;else{for(var n,l=1;l0;)s=mu(a.certificate_list,3),n=r0.asn1.fromDer(s),s=r0.pki.certificateFromAsn1(n,!0),l.push(s)}catch(p){return i.error(i,{message:"Could not parse certificate list.",cause:p,send:!0,alert:{level:T.Alert.Level.fatal,description:T.Alert.Description.bad_certificate}})}var d=i.entity===T.ConnectionEnd.client;(d||i.verifyClient===!0)&&l.length===0?i.error(i,{message:d?"No server certificate provided.":"No client certificate provided.",send:!0,alert:{level:T.Alert.Level.fatal,description:T.Alert.Description.illegal_parameter}}):l.length===0?i.expect=d?Lm:gh:(d?i.session.serverCertificate=l[0]:i.session.clientCertificate=l[0],T.verifyCertificateChain(i,l)&&(i.expect=d?Lm:gh)),i.process()};T.handleServerKeyExchange=function(i,e,u){if(u>0)return i.error(i,{message:"Invalid key parameters. Only RSA is supported.",send:!0,alert:{level:T.Alert.Level.fatal,description:T.Alert.Description.unsupported_certificate}});i.expect=kv,i.process()};T.handleClientKeyExchange=function(i,e,u){if(u<48)return i.error(i,{message:"Invalid key parameters. Only RSA is supported.",send:!0,alert:{level:T.Alert.Level.fatal,description:T.Alert.Description.unsupported_certificate}});var r=e.fragment,a={enc_pre_master_secret:mu(r,2).getBytes()},s=null;if(i.getPrivateKey)try{s=i.getPrivateKey(i,i.session.serverCertificate),s=r0.pki.privateKeyFromPem(s)}catch(d){i.error(i,{message:"Could not get private key.",cause:d,send:!0,alert:{level:T.Alert.Level.fatal,description:T.Alert.Description.internal_error}})}if(s===null)return i.error(i,{message:"No private key set.",send:!0,alert:{level:T.Alert.Level.fatal,description:T.Alert.Description.internal_error}});try{var n=i.session.sp;n.pre_master_secret=s.decrypt(a.enc_pre_master_secret);var l=i.session.clientHelloVersion;if(l.major!==n.pre_master_secret.charCodeAt(0)||l.minor!==n.pre_master_secret.charCodeAt(1))throw new Error("TLS version rollback attack detected.")}catch{n.pre_master_secret=r0.random.getBytes(48)}i.expect=yh,i.session.clientCertificate!==null&&(i.expect=Wv),i.process()};T.handleCertificateRequest=function(i,e,u){if(u<3)return i.error(i,{message:"Invalid CertificateRequest. Message too short.",send:!0,alert:{level:T.Alert.Level.fatal,description:T.Alert.Description.illegal_parameter}});var r=e.fragment,a={certificate_types:mu(r,1),certificate_authorities:mu(r,2)};i.session.certificateRequest=a,i.expect=Fv,i.process()};T.handleCertificateVerify=function(i,e,u){if(u<2)return i.error(i,{message:"Invalid CertificateVerify. Message too short.",send:!0,alert:{level:T.Alert.Level.fatal,description:T.Alert.Description.illegal_parameter}});var r=e.fragment;r.read-=4;var a=r.bytes();r.read+=4;var s={signature:mu(r,2).getBytes()},n=r0.util.createBuffer();n.putBuffer(i.session.md5.digest()),n.putBuffer(i.session.sha1.digest()),n=n.getBytes();try{var l=i.session.clientCertificate;if(!l.publicKey.verify(n,s.signature,"NONE"))throw new Error("CertificateVerify signature does not match.");i.session.md5.update(a),i.session.sha1.update(a)}catch{return i.error(i,{message:"Bad signature in CertificateVerify.",send:!0,alert:{level:T.Alert.Level.fatal,description:T.Alert.Description.handshake_failure}})}i.expect=yh,i.process()};T.handleServerHelloDone=function(i,e,u){if(u>0)return i.error(i,{message:"Invalid ServerHelloDone message. Invalid length.",send:!0,alert:{level:T.Alert.Level.fatal,description:T.Alert.Description.record_overflow}});if(i.serverCertificate===null){var r={message:"No server certificate provided. Not enough security.",send:!0,alert:{level:T.Alert.Level.fatal,description:T.Alert.Description.insufficient_security}},a=0,s=i.verify(i,r.alert.description,a,[]);if(s!==!0)return(s||s===0)&&(typeof s=="object"&&!r0.util.isArray(s)?(s.message&&(r.message=s.message),s.alert&&(r.alert.description=s.alert)):typeof s=="number"&&(r.alert.description=s)),i.error(i,r)}i.session.certificateRequest!==null&&(e=T.createRecord(i,{type:T.ContentType.handshake,data:T.createCertificate(i)}),T.queue(i,e)),e=T.createRecord(i,{type:T.ContentType.handshake,data:T.createClientKeyExchange(i)}),T.queue(i,e),i.expect=Gv;var n=c(function(l,d){l.session.certificateRequest!==null&&l.session.clientCertificate!==null&&T.queue(l,T.createRecord(l,{type:T.ContentType.handshake,data:T.createCertificateVerify(l,d)})),T.queue(l,T.createRecord(l,{type:T.ContentType.change_cipher_spec,data:T.createChangeCipherSpec()})),l.state.pending=T.createConnectionState(l),l.state.current.write=l.state.pending.write,T.queue(l,T.createRecord(l,{type:T.ContentType.handshake,data:T.createFinished(l)})),l.expect=Bm,T.flush(l),l.process()},"callback");if(i.session.certificateRequest===null||i.session.clientCertificate===null)return n(i,null);T.getClientSignature(i,n)};T.handleChangeCipherSpec=function(i,e){if(e.fragment.getByte()!==1)return i.error(i,{message:"Invalid ChangeCipherSpec message received.",send:!0,alert:{level:T.Alert.Level.fatal,description:T.Alert.Description.illegal_parameter}});var u=i.entity===T.ConnectionEnd.client;(i.session.resuming&&u||!i.session.resuming&&!u)&&(i.state.pending=T.createConnectionState(i)),i.state.current.read=i.state.pending.read,(!i.session.resuming&&u||i.session.resuming&&!u)&&(i.state.pending=null),i.expect=u?Hv:jv,i.process()};T.handleFinished=function(i,e,u){var r=e.fragment;r.read-=4;var a=r.bytes();r.read+=4;var s=e.fragment.getBytes();r=r0.util.createBuffer(),r.putBuffer(i.session.md5.digest()),r.putBuffer(i.session.sha1.digest());var n=i.entity===T.ConnectionEnd.client,l=n?"server finished":"client finished",d=i.session.sp,p=12,h=oc;if(r=h(d.master_secret,l,r.getBytes(),p),r.getBytes()!==s)return i.error(i,{message:"Invalid verify_data in Finished message.",send:!0,alert:{level:T.Alert.Level.fatal,description:T.Alert.Description.decrypt_error}});i.session.md5.update(a),i.session.sha1.update(a),(i.session.resuming&&n||!i.session.resuming&&!n)&&(T.queue(i,T.createRecord(i,{type:T.ContentType.change_cipher_spec,data:T.createChangeCipherSpec()})),i.state.current.write=i.state.pending.write,i.state.pending=null,T.queue(i,T.createRecord(i,{type:T.ContentType.handshake,data:T.createFinished(i)}))),i.expect=n?Vv:Xv,i.handshaking=!1,++i.handshakes,i.peerCertificate=n?i.session.serverCertificate:i.session.clientCertificate,T.flush(i),i.isConnected=!0,i.connected(i),i.process()};T.handleAlert=function(i,e){var u=e.fragment,r={level:u.getByte(),description:u.getByte()},a;switch(r.description){case T.Alert.Description.close_notify:a="Connection closed.";break;case T.Alert.Description.unexpected_message:a="Unexpected message.";break;case T.Alert.Description.bad_record_mac:a="Bad record MAC.";break;case T.Alert.Description.decryption_failed:a="Decryption failed.";break;case T.Alert.Description.record_overflow:a="Record overflow.";break;case T.Alert.Description.decompression_failure:a="Decompression failed.";break;case T.Alert.Description.handshake_failure:a="Handshake failure.";break;case T.Alert.Description.bad_certificate:a="Bad certificate.";break;case T.Alert.Description.unsupported_certificate:a="Unsupported certificate.";break;case T.Alert.Description.certificate_revoked:a="Certificate revoked.";break;case T.Alert.Description.certificate_expired:a="Certificate expired.";break;case T.Alert.Description.certificate_unknown:a="Certificate unknown.";break;case T.Alert.Description.illegal_parameter:a="Illegal parameter.";break;case T.Alert.Description.unknown_ca:a="Unknown certificate authority.";break;case T.Alert.Description.access_denied:a="Access denied.";break;case T.Alert.Description.decode_error:a="Decode error.";break;case T.Alert.Description.decrypt_error:a="Decrypt error.";break;case T.Alert.Description.export_restriction:a="Export restriction.";break;case T.Alert.Description.protocol_version:a="Unsupported protocol version.";break;case T.Alert.Description.insufficient_security:a="Insufficient security.";break;case T.Alert.Description.internal_error:a="Internal error.";break;case T.Alert.Description.user_canceled:a="User canceled.";break;case T.Alert.Description.no_renegotiation:a="Renegotiation not supported.";break;default:a="Unknown error.";break}if(r.description===T.Alert.Description.close_notify)return i.close();i.error(i,{message:a,send:!1,origin:i.entity===T.ConnectionEnd.client?"server":"client",alert:r}),i.process()};T.handleHandshake=function(i,e){var u=e.fragment,r=u.getByte(),a=u.getInt24();if(a>u.length())return i.fragmented=e,e.fragment=r0.util.createBuffer(),u.read-=4,i.process();i.fragmented=null,u.read-=4;var s=u.bytes(a+4);u.read+=4,r in nc[i.entity][i.expect]?(i.entity===T.ConnectionEnd.server&&!i.open&&!i.fail&&(i.handshaking=!0,i.session={version:null,extensions:{server_name:{serverNameList:[]}},cipherSuite:null,compressionMethod:null,serverCertificate:null,clientCertificate:null,md5:r0.md.md5.create(),sha1:r0.md.sha1.create()}),r!==T.HandshakeType.hello_request&&r!==T.HandshakeType.certificate_verify&&r!==T.HandshakeType.finished&&(i.session.md5.update(s),i.session.sha1.update(s)),nc[i.entity][i.expect][r](i,e,a)):T.handleUnexpected(i,e)};T.handleApplicationData=function(i,e){i.data.putBuffer(e.fragment),i.dataReady(i),i.process()};T.handleHeartbeat=function(i,e){var u=e.fragment,r=u.getByte(),a=u.getInt16(),s=u.getBytes(a);if(r===T.HeartbeatMessageType.heartbeat_request){if(i.handshaking||a>s.length)return i.process();T.queue(i,T.createRecord(i,{type:T.ContentType.heartbeat,data:T.createHeartbeat(T.HeartbeatMessageType.heartbeat_response,s)})),T.flush(i)}else if(r===T.HeartbeatMessageType.heartbeat_response){if(s!==i.expectedHeartbeatPayload)return i.process();i.heartbeatReceived&&i.heartbeatReceived(i,r0.util.createBuffer(s))}i.process()};var Uv=0,Pv=1,Lm=2,kv=3,Fv=4,Bm=5,Hv=6,Vv=7,Gv=8,qv=0,Kv=1,gh=2,Wv=3,yh=4,jv=5,Xv=6,m=T.handleUnexpected,Mm=T.handleChangeCipherSpec,Ue=T.handleAlert,uu=T.handleHandshake,mm=T.handleApplicationData,Pe=T.handleHeartbeat,Nh=[];Nh[T.ConnectionEnd.client]=[[m,Ue,uu,m,Pe],[m,Ue,uu,m,Pe],[m,Ue,uu,m,Pe],[m,Ue,uu,m,Pe],[m,Ue,uu,m,Pe],[Mm,Ue,m,m,Pe],[m,Ue,uu,m,Pe],[m,Ue,uu,mm,Pe],[m,Ue,uu,m,Pe]];Nh[T.ConnectionEnd.server]=[[m,Ue,uu,m,Pe],[m,Ue,uu,m,Pe],[m,Ue,uu,m,Pe],[m,Ue,uu,m,Pe],[Mm,Ue,m,m,Pe],[m,Ue,uu,m,Pe],[m,Ue,uu,mm,Pe],[m,Ue,uu,m,Pe]];var mr=T.handleHelloRequest,Qv=T.handleServerHello,_m=T.handleCertificate,Em=T.handleServerKeyExchange,Ah=T.handleCertificateRequest,ac=T.handleServerHelloDone,Tm=T.handleFinished,nc=[];nc[T.ConnectionEnd.client]=[[m,m,Qv,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m],[mr,m,m,m,m,m,m,m,m,m,m,_m,Em,Ah,ac,m,m,m,m,m,m],[mr,m,m,m,m,m,m,m,m,m,m,m,Em,Ah,ac,m,m,m,m,m,m],[mr,m,m,m,m,m,m,m,m,m,m,m,m,Ah,ac,m,m,m,m,m,m],[mr,m,m,m,m,m,m,m,m,m,m,m,m,m,ac,m,m,m,m,m,m],[mr,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m],[mr,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,Tm],[mr,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m],[mr,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m]];var Jv=T.handleClientHello,zv=T.handleClientKeyExchange,$v=T.handleCertificateVerify;nc[T.ConnectionEnd.server]=[[m,Jv,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m],[m,m,m,m,m,m,m,m,m,m,m,_m,m,m,m,m,m,m,m,m,m],[m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,zv,m,m,m,m],[m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,$v,m,m,m,m,m],[m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m],[m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,Tm],[m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m],[m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m]];T.generateKeys=function(i,e){var u=oc,r=e.client_random+e.server_random;i.session.resuming||(e.master_secret=u(e.pre_master_secret,"master secret",r,48).bytes(),e.pre_master_secret=null),r=e.server_random+e.client_random;var a=2*e.mac_key_length+2*e.enc_key_length,s=i.version.major===T.Versions.TLS_1_0.major&&i.version.minor===T.Versions.TLS_1_0.minor;s&&(a+=2*e.fixed_iv_length);var n=u(e.master_secret,"key expansion",r,a),l={client_write_MAC_key:n.getBytes(e.mac_key_length),server_write_MAC_key:n.getBytes(e.mac_key_length),client_write_key:n.getBytes(e.enc_key_length),server_write_key:n.getBytes(e.enc_key_length)};return s&&(l.client_write_IV=n.getBytes(e.fixed_iv_length),l.server_write_IV=n.getBytes(e.fixed_iv_length)),l};T.createConnectionState=function(i){var e=i.entity===T.ConnectionEnd.client,u=c(function(){var s={sequenceNumber:[0,0],macKey:null,macLength:0,macFunction:null,cipherState:null,cipherFunction:function(n){return!0},compressionState:null,compressFunction:function(n){return!0},updateSequenceNumber:function(){s.sequenceNumber[1]===4294967295?(s.sequenceNumber[1]=0,++s.sequenceNumber[0]):++s.sequenceNumber[1]}};return s},"createMode"),r={read:u(),write:u()};if(r.read.update=function(s,n){return r.read.cipherFunction(n,r.read)?r.read.compressFunction(s,n,r.read)||s.error(s,{message:"Could not decompress record.",send:!0,alert:{level:T.Alert.Level.fatal,description:T.Alert.Description.decompression_failure}}):s.error(s,{message:"Could not decrypt record or bad MAC.",send:!0,alert:{level:T.Alert.Level.fatal,description:T.Alert.Description.bad_record_mac}}),!s.fail},r.write.update=function(s,n){return r.write.compressFunction(s,n,r.write)?r.write.cipherFunction(n,r.write)||s.error(s,{message:"Could not encrypt record.",send:!1,alert:{level:T.Alert.Level.fatal,description:T.Alert.Description.internal_error}}):s.error(s,{message:"Could not compress record.",send:!1,alert:{level:T.Alert.Level.fatal,description:T.Alert.Description.internal_error}}),!s.fail},i.session){var a=i.session.sp;switch(i.session.cipherSuite.initSecurityParameters(a),a.keys=T.generateKeys(i,a),r.read.macKey=e?a.keys.server_write_MAC_key:a.keys.client_write_MAC_key,r.write.macKey=e?a.keys.client_write_MAC_key:a.keys.server_write_MAC_key,i.session.cipherSuite.initConnectionState(r,i,a),a.compression_algorithm){case T.CompressionMethod.none:break;case T.CompressionMethod.deflate:r.read.compressFunction=wv,r.write.compressFunction=Dv;break;default:throw new Error("Unsupported compression algorithm.")}}return r};T.createRandom=function(){var i=new Date,e=+i+i.getTimezoneOffset()*6e4,u=r0.util.createBuffer();return u.putInt32(e),u.putBytes(r0.random.getBytes(28)),u};T.createRecord=function(i,e){if(!e.data)return null;var u={type:e.type,version:{major:i.version.major,minor:i.version.minor},length:e.data.length(),fragment:e.data};return u};T.createAlert=function(i,e){var u=r0.util.createBuffer();return u.putByte(e.level),u.putByte(e.description),T.createRecord(i,{type:T.ContentType.alert,data:u})};T.createClientHello=function(i){i.session.clientHelloVersion={major:i.version.major,minor:i.version.minor};for(var e=r0.util.createBuffer(),u=0;u0&&(f+=2);var S=i.session.id,_=S.length+1+2+4+28+2+a+1+n+f,O=r0.util.createBuffer();return O.putByte(T.HandshakeType.client_hello),O.putInt24(_),O.putByte(i.version.major),O.putByte(i.version.minor),O.putBytes(i.session.sp.client_random),Du(O,1,r0.util.createBuffer(S)),Du(O,2,e),Du(O,1,s),f>0&&Du(O,2,l),O};T.createServerHello=function(i){var e=i.session.id,u=e.length+1+2+4+28+2+1,r=r0.util.createBuffer();return r.putByte(T.HandshakeType.server_hello),r.putInt24(u),r.putByte(i.version.major),r.putByte(i.version.minor),r.putBytes(i.session.sp.server_random),Du(r,1,r0.util.createBuffer(e)),r.putByte(i.session.cipherSuite.id[0]),r.putByte(i.session.cipherSuite.id[1]),r.putByte(i.session.compressionMethod),r};T.createCertificate=function(i){var e=i.entity===T.ConnectionEnd.client,u=null;if(i.getCertificate){var r;e?r=i.session.certificateRequest:r=i.session.extensions.server_name.serverNameList,u=i.getCertificate(i,r)}var a=r0.util.createBuffer();if(u!==null)try{r0.util.isArray(u)||(u=[u]);for(var s=null,n=0;n0&&(u.putByte(T.HandshakeType.server_key_exchange),u.putInt24(e)),u};T.getClientSignature=function(i,e){var u=r0.util.createBuffer();u.putBuffer(i.session.md5.digest()),u.putBuffer(i.session.sha1.digest()),u=u.getBytes(),i.getSignature=i.getSignature||function(r,a,s){var n=null;if(r.getPrivateKey)try{n=r.getPrivateKey(r,r.session.clientCertificate),n=r0.pki.privateKeyFromPem(n)}catch(l){r.error(r,{message:"Could not get private key.",cause:l,send:!0,alert:{level:T.Alert.Level.fatal,description:T.Alert.Description.internal_error}})}n===null?r.error(r,{message:"No private key set.",send:!0,alert:{level:T.Alert.Level.fatal,description:T.Alert.Description.internal_error}}):a=n.sign(a,null),s(r,a)},i.getSignature(i,u,e)};T.createCertificateVerify=function(i,e){var u=e.length+2,r=r0.util.createBuffer();return r.putByte(T.HandshakeType.certificate_verify),r.putInt24(u),r.putInt16(e.length),r.putBytes(e),r};T.createCertificateRequest=function(i){var e=r0.util.createBuffer();e.putByte(1);var u=r0.util.createBuffer();for(var r in i.caStore.certs){var a=i.caStore.certs[r],s=r0.pki.distinguishedNameToAsn1(a.subject),n=r0.asn1.toDer(s);u.putInt16(n.length()),u.putBuffer(n)}var l=1+e.length()+2+u.length(),d=r0.util.createBuffer();return d.putByte(T.HandshakeType.certificate_request),d.putInt24(l),Du(d,1,e),Du(d,2,u),d};T.createServerHelloDone=function(i){var e=r0.util.createBuffer();return e.putByte(T.HandshakeType.server_hello_done),e.putInt24(0),e};T.createChangeCipherSpec=function(){var i=r0.util.createBuffer();return i.putByte(1),i};T.createFinished=function(i){var e=r0.util.createBuffer();e.putBuffer(i.session.md5.digest()),e.putBuffer(i.session.sha1.digest());var u=i.entity===T.ConnectionEnd.client,r=i.session.sp,a=12,s=oc,n=u?"client finished":"server finished";e=s(r.master_secret,n,e.getBytes(),a);var l=r0.util.createBuffer();return l.putByte(T.HandshakeType.finished),l.putInt24(e.length()),l.putBuffer(e),l};T.createHeartbeat=function(i,e,u){typeof u>"u"&&(u=e.length);var r=r0.util.createBuffer();r.putByte(i),r.putInt16(u),r.putBytes(e);var a=r.length(),s=Math.max(16,a-u-3);return r.putBytes(r0.random.getBytes(s)),r};T.queue=function(i,e){if(e&&!(e.fragment.length()===0&&(e.type===T.ContentType.handshake||e.type===T.ContentType.alert||e.type===T.ContentType.change_cipher_spec))){if(e.type===T.ContentType.handshake){var u=e.fragment.bytes();i.session.md5.update(u),i.session.sha1.update(u),u=null}var r;if(e.fragment.length()<=T.MaxFragment)r=[e];else{r=[];for(var a=e.fragment.bytes();a.length>T.MaxFragment;)r.push(T.createRecord(i,{type:e.type,data:r0.util.createBuffer(a.slice(0,T.MaxFragment))})),a=a.slice(T.MaxFragment);a.length>0&&r.push(T.createRecord(i,{type:e.type,data:r0.util.createBuffer(a)}))}for(var s=0;s0&&(n=u.order[0]),n!==null&&n in u.cache){s=u.cache[n],delete u.cache[n];for(var l in u.order)if(u.order[l]===n){u.order.splice(l,1);break}}return s},u.setSession=function(a,s){if(u.order.length===u.capacity){var n=u.order.shift();delete u.cache[n]}var n=r0.util.bytesToHex(a);u.order.push(n),u.cache[n]=s}}return u};T.createConnection=function(i){var e=null;i.caStore?r0.util.isArray(i.caStore)?e=r0.pki.createCaStore(i.caStore):e=i.caStore:e=r0.pki.createCaStore();var u=i.cipherSuites||null;if(u===null){u=[];for(var r in T.CipherSuites)u.push(T.CipherSuites[r])}var a=i.server?T.ConnectionEnd.server:T.ConnectionEnd.client,s=i.sessionCache?T.createSessionCache(i.sessionCache):null,n={version:{major:T.Version.major,minor:T.Version.minor},entity:a,sessionId:i.sessionId,caStore:e,sessionCache:s,cipherSuites:u,connected:i.connected,virtualHost:i.virtualHost||null,verifyClient:i.verifyClient||!1,verify:i.verify||function(h,f,S,_){return f},verifyOptions:i.verifyOptions||{},getCertificate:i.getCertificate||null,getPrivateKey:i.getPrivateKey||null,getSignature:i.getSignature||null,input:r0.util.createBuffer(),tlsData:r0.util.createBuffer(),data:r0.util.createBuffer(),tlsDataReady:i.tlsDataReady,dataReady:i.dataReady,heartbeatReceived:i.heartbeatReceived,closed:i.closed,error:function(h,f){f.origin=f.origin||(h.entity===T.ConnectionEnd.client?"client":"server"),f.send&&(T.queue(h,T.createAlert(h,f.alert)),T.flush(h));var S=f.fatal!==!1;S&&(h.fail=!0),i.error(h,f),S&&h.close(!1)},deflate:i.deflate||null,inflate:i.inflate||null};n.reset=function(h){n.version={major:T.Version.major,minor:T.Version.minor},n.record=null,n.session=null,n.peerCertificate=null,n.state={pending:null,current:null},n.expect=n.entity===T.ConnectionEnd.client?Uv:qv,n.fragmented=null,n.records=[],n.open=!1,n.handshakes=0,n.handshaking=!1,n.isConnected=!1,n.fail=!(h||typeof h>"u"),n.input.clear(),n.tlsData.clear(),n.data.clear(),n.state.current=T.createConnectionState(n)},n.reset();var l=c(function(h,f){var S=f.type-T.ContentType.change_cipher_spec,_=Nh[h.entity][h.expect];S in _?_[S](h,f):T.handleUnexpected(h,f)},"_update"),d=c(function(h){var f=0,S=h.input,_=S.length();if(_<5)f=5-_;else{h.record={type:S.getByte(),version:{major:S.getByte(),minor:S.getByte()},length:S.getInt16(),fragment:r0.util.createBuffer(),ready:!1};var O=h.record.version.major===h.version.major;O&&h.session&&h.session.version&&(O=h.record.version.minor===h.version.minor),O||h.error(h,{message:"Incompatible TLS version.",send:!0,alert:{level:T.Alert.Level.fatal,description:T.Alert.Description.protocol_version}})}return f},"_readRecordHeader"),p=c(function(h){var f=0,S=h.input,_=S.length();if(_0&&(n.sessionCache&&(f=n.sessionCache.getSession(h)),f===null&&(h="")),h.length===0&&n.sessionCache&&(f=n.sessionCache.getSession(),f!==null&&(h=f.id)),n.session={id:h,version:null,cipherSuite:null,compressionMethod:null,serverCertificate:null,certificateRequest:null,clientCertificate:null,sp:{},md5:r0.md.md5.create(),sha1:r0.md.sha1.create()},f&&(n.version=f.version,n.session.sp=f.sp),n.session.sp.client_random=T.createRandom().getBytes(),n.open=!0,T.queue(n,T.createRecord(n,{type:T.ContentType.handshake,data:T.createClientHello(n)})),T.flush(n)}},n.process=function(h){var f=0;return h&&n.input.putBytes(h),n.fail||(n.record!==null&&n.record.ready&&n.record.fragment.isEmpty()&&(n.record=null),n.record===null&&(f=d(n)),!n.fail&&n.record!==null&&!n.record.ready&&(f=p(n)),!n.fail&&n.record!==null&&n.record.ready&&l(n,n.record)),f},n.prepare=function(h){return T.queue(n,T.createRecord(n,{type:T.ContentType.application_data,data:r0.util.createBuffer(h)})),T.flush(n)},n.prepareHeartbeatRequest=function(h,f){return h instanceof r0.util.ByteBuffer&&(h=h.bytes()),typeof f>"u"&&(f=h.length),n.expectedHeartbeatPayload=h,T.queue(n,T.createRecord(n,{type:T.ContentType.heartbeat,data:T.createHeartbeat(T.HeartbeatMessageType.heartbeat_request,h,f)})),T.flush(n)},n.close=function(h){if(!n.fail&&n.sessionCache&&n.session){var f={id:n.session.id,version:n.session.version,sp:n.session.sp};f.sp.keys=null,n.sessionCache.setSession(f.id,f)}n.open&&(n.open=!1,n.input.clear(),(n.isConnected||n.handshaking)&&(n.isConnected=n.handshaking=!1,T.queue(n,T.createAlert(n,{level:T.Alert.Level.warning,description:T.Alert.Description.close_notify})),T.flush(n)),n.closed(n)),n.reset(h)},n};Ym.exports=r0.tls=r0.tls||{};for(sc in T)typeof T[sc]!="function"&&(r0.tls[sc]=T[sc]);var sc;r0.tls.prf_tls1=oc;r0.tls.hmac_sha1=vv;r0.tls.createSessionCache=T.createSessionCache;r0.tls.createConnection=T.createConnection});var gm=b((aj,Rm)=>{var _r=y0();Sr();Ch();var wu=Rm.exports=_r.tls;wu.CipherSuites.TLS_RSA_WITH_AES_128_CBC_SHA={id:[0,47],name:"TLS_RSA_WITH_AES_128_CBC_SHA",initSecurityParameters:function(i){i.bulk_cipher_algorithm=wu.BulkCipherAlgorithm.aes,i.cipher_type=wu.CipherType.block,i.enc_key_length=16,i.block_length=16,i.fixed_iv_length=16,i.record_iv_length=16,i.mac_algorithm=wu.MACAlgorithm.hmac_sha1,i.mac_length=20,i.mac_key_length=20},initConnectionState:Am};wu.CipherSuites.TLS_RSA_WITH_AES_256_CBC_SHA={id:[0,53],name:"TLS_RSA_WITH_AES_256_CBC_SHA",initSecurityParameters:function(i){i.bulk_cipher_algorithm=wu.BulkCipherAlgorithm.aes,i.cipher_type=wu.CipherType.block,i.enc_key_length=32,i.block_length=16,i.fixed_iv_length=16,i.record_iv_length=16,i.mac_algorithm=wu.MACAlgorithm.hmac_sha1,i.mac_length=20,i.mac_key_length=20},initConnectionState:Am};function Am(i,e,u){var r=e.entity===_r.tls.ConnectionEnd.client;i.read.cipherState={init:!1,cipher:_r.cipher.createDecipher("AES-CBC",r?u.keys.server_write_key:u.keys.client_write_key),iv:r?u.keys.server_write_IV:u.keys.client_write_IV},i.write.cipherState={init:!1,cipher:_r.cipher.createCipher("AES-CBC",r?u.keys.client_write_key:u.keys.server_write_key),iv:r?u.keys.client_write_IV:u.keys.server_write_IV},i.read.cipherFunction=rD,i.write.cipherFunction=eD,i.read.macLength=i.write.macLength=u.mac_length,i.read.macFunction=i.write.macFunction=wu.hmac_sha1}c(Am,"initConnectionState");function eD(i,e){var u=!1,r=e.macFunction(e.macKey,e.sequenceNumber,i);i.fragment.putBytes(r),e.updateSequenceNumber();var a;i.version.minor===wu.Versions.TLS_1_0.minor?a=e.cipherState.init?null:e.cipherState.iv:a=_r.random.getBytesSync(16),e.cipherState.init=!0;var s=e.cipherState.cipher;return s.start({iv:a}),i.version.minor>=wu.Versions.TLS_1_1.minor&&s.output.putBytes(a),s.update(i.fragment),s.finish(uD)&&(i.fragment=s.output,i.length=i.fragment.length(),u=!0),u}c(eD,"encrypt_aes_cbc_sha1");function uD(i,e,u){if(!u){var r=i-e.length()%i;e.fillWithByte(r-1,r)}return!0}c(uD,"encrypt_aes_cbc_sha1_padding");function tD(i,e,u){var r=!0;if(u){for(var a=e.length(),s=e.last(),n=a-1-s;n=s?(i.fragment=a.output.getBytes(l-s),n=a.output.getBytes(s)):i.fragment=a.output.getBytes(),i.fragment=_r.util.createBuffer(i.fragment),i.length=i.fragment.length();var d=e.macFunction(e.macKey,e.sequenceNumber,i);return e.updateSequenceNumber(),u=iD(e.macKey,n,d)&&u,u}c(rD,"decrypt_aes_cbc_sha1");function iD(i,e,u){var r=_r.hmac.create();return r.start("SHA1",i),r.update(e),e=r.digest().getBytes(),r.start(null,null),r.update(u),u=r.digest().getBytes(),e===u}c(iD,"compareMacs")});var xh=b((nj,Im)=>{var ae=y0();ht();H0();var bn=Im.exports=ae.sha512=ae.sha512||{};ae.md.sha512=ae.md.algorithms.sha512=bn;var Nm=ae.sha384=ae.sha512.sha384=ae.sha512.sha384||{};Nm.create=function(){return bn.create("SHA-384")};ae.md.sha384=ae.md.algorithms.sha384=Nm;ae.sha512.sha256=ae.sha512.sha256||{create:function(){return bn.create("SHA-512/256")}};ae.md["sha512/256"]=ae.md.algorithms["sha512/256"]=ae.sha512.sha256;ae.sha512.sha224=ae.sha512.sha224||{create:function(){return bn.create("SHA-512/224")}};ae.md["sha512/224"]=ae.md.algorithms["sha512/224"]=ae.sha512.sha224;bn.create=function(i){if(Cm||aD(),typeof i>"u"&&(i="SHA-512"),!(i in li))throw new Error("Invalid SHA-512 algorithm: "+i);for(var e=li[i],u=null,r=ae.util.createBuffer(),a=new Array(80),s=0;s<80;++s)a[s]=new Array(2);var n=64;switch(i){case"SHA-384":n=48;break;case"SHA-512/256":n=32;break;case"SHA-512/224":n=28;break}var l={algorithm:i.replace("-","").toLowerCase(),blockLength:128,digestLength:n,messageLength:0,fullMessageLength:null,messageLengthSize:16};return l.start=function(){l.messageLength=0,l.fullMessageLength=l.messageLength128=[];for(var d=l.messageLengthSize/4,p=0;p>>0,h>>>0];for(var f=l.fullMessageLength.length-1;f>=0;--f)l.fullMessageLength[f]+=h[1],h[1]=h[0]+(l.fullMessageLength[f]/4294967296>>>0),l.fullMessageLength[f]=l.fullMessageLength[f]>>>0,h[0]=h[1]/4294967296>>>0;return r.putBytes(d),ym(u,a,r),(r.read>2048||r.length()===0)&&r.compact(),l},l.digest=function(){var d=ae.util.createBuffer();d.putBytes(r.bytes());var p=l.fullMessageLength[l.fullMessageLength.length-1]+l.messageLengthSize,h=p&l.blockLength-1;d.putBytes(Ih.substr(0,l.blockLength-h));for(var f,S,_=l.fullMessageLength[0]*8,O=0;O>>0,_+=S,d.putInt32(_>>>0),_=f>>>0;d.putInt32(_);for(var E=new Array(u.length),O=0;O=128;){for(M0=0;M0<16;++M0)e[M0][0]=u.getInt32()>>>0,e[M0][1]=u.getInt32()>>>0;for(;M0<80;++M0)Ee=e[M0-2],S0=Ee[0],c0=Ee[1],r=((S0>>>19|c0<<13)^(c0>>>29|S0<<3)^S0>>>6)>>>0,a=((S0<<13|c0>>>19)^(c0<<3|S0>>>29)^(S0<<26|c0>>>6))>>>0,_0=e[M0-15],S0=_0[0],c0=_0[1],s=((S0>>>1|c0<<31)^(S0>>>8|c0<<24)^S0>>>7)>>>0,n=((S0<<31|c0>>>1)^(S0<<24|c0>>>8)^(S0<<25|c0>>>7))>>>0,ve=e[M0-7],R0=e[M0-16],c0=a+ve[1]+n+R0[1],e[M0][0]=r+ve[0]+s+R0[0]+(c0/4294967296>>>0)>>>0,e[M0][1]=c0>>>0;for(E=i[0][0],A=i[0][1],g=i[1][0],D=i[1][1],I=i[2][0],W=i[2][1],Y=i[3][0],N=i[3][1],w=i[4][0],G=i[4][1],U=i[5][0],z=i[5][1],e0=i[6][0],Z=i[6][1],l0=i[7][0],n0=i[7][1],M0=0;M0<80;++M0)p=((w>>>14|G<<18)^(w>>>18|G<<14)^(G>>>9|w<<23))>>>0,h=((w<<18|G>>>14)^(w<<14|G>>>18)^(G<<23|w>>>9))>>>0,f=(e0^w&(U^e0))>>>0,S=(Z^G&(z^Z))>>>0,l=((E>>>28|A<<4)^(A>>>2|E<<30)^(A>>>7|E<<25))>>>0,d=((E<<4|A>>>28)^(A<<30|E>>>2)^(A<<25|E>>>7))>>>0,_=(E&g|I&(E^g))>>>0,O=(A&D|W&(A^D))>>>0,c0=n0+h+S+bh[M0][1]+e[M0][1],r=l0+p+f+bh[M0][0]+e[M0][0]+(c0/4294967296>>>0)>>>0,a=c0>>>0,c0=d+O,s=l+_+(c0/4294967296>>>0)>>>0,n=c0>>>0,l0=e0,n0=Z,e0=U,Z=z,U=w,z=G,c0=N+a,w=Y+r+(c0/4294967296>>>0)>>>0,G=c0>>>0,Y=I,N=W,I=g,W=D,g=E,D=A,c0=a+n,E=r+s+(c0/4294967296>>>0)>>>0,A=c0>>>0;c0=i[0][1]+A,i[0][0]=i[0][0]+E+(c0/4294967296>>>0)>>>0,i[0][1]=c0>>>0,c0=i[1][1]+D,i[1][0]=i[1][0]+g+(c0/4294967296>>>0)>>>0,i[1][1]=c0>>>0,c0=i[2][1]+W,i[2][0]=i[2][0]+I+(c0/4294967296>>>0)>>>0,i[2][1]=c0>>>0,c0=i[3][1]+N,i[3][0]=i[3][0]+Y+(c0/4294967296>>>0)>>>0,i[3][1]=c0>>>0,c0=i[4][1]+G,i[4][0]=i[4][0]+w+(c0/4294967296>>>0)>>>0,i[4][1]=c0>>>0,c0=i[5][1]+z,i[5][0]=i[5][0]+U+(c0/4294967296>>>0)>>>0,i[5][1]=c0>>>0,c0=i[6][1]+Z,i[6][0]=i[6][0]+e0+(c0/4294967296>>>0)>>>0,i[6][1]=c0>>>0,c0=i[7][1]+n0,i[7][0]=i[7][0]+l0+(c0/4294967296>>>0)>>>0,i[7][1]=c0>>>0,j0-=128}}c(ym,"_update")});var bm=b(vh=>{var sD=y0();ju();var be=sD.asn1;vh.privateKeyValidator={name:"PrivateKeyInfo",tagClass:be.Class.UNIVERSAL,type:be.Type.SEQUENCE,constructed:!0,value:[{name:"PrivateKeyInfo.version",tagClass:be.Class.UNIVERSAL,type:be.Type.INTEGER,constructed:!1,capture:"privateKeyVersion"},{name:"PrivateKeyInfo.privateKeyAlgorithm",tagClass:be.Class.UNIVERSAL,type:be.Type.SEQUENCE,constructed:!0,value:[{name:"AlgorithmIdentifier.algorithm",tagClass:be.Class.UNIVERSAL,type:be.Type.OID,constructed:!1,capture:"privateKeyOid"}]},{name:"PrivateKeyInfo",tagClass:be.Class.UNIVERSAL,type:be.Type.OCTETSTRING,constructed:!1,capture:"privateKey"}]};vh.publicKeyValidator={name:"SubjectPublicKeyInfo",tagClass:be.Class.UNIVERSAL,type:be.Type.SEQUENCE,constructed:!0,captureAsn1:"subjectPublicKeyInfo",value:[{name:"SubjectPublicKeyInfo.AlgorithmIdentifier",tagClass:be.Class.UNIVERSAL,type:be.Type.SEQUENCE,constructed:!0,value:[{name:"AlgorithmIdentifier.algorithm",tagClass:be.Class.UNIVERSAL,type:be.Type.OID,constructed:!1,capture:"publicKeyOid"}]},{tagClass:be.Class.UNIVERSAL,type:be.Type.BITSTRING,constructed:!1,composed:!0,captureBitStringValue:"ed25519PublicKey"}]}});var Km=b((cj,qm)=>{var ke=y0();yn();Iu();xh();H0();var Pm=bm(),nD=Pm.publicKeyValidator,oD=Pm.privateKeyValidator;typeof xm>"u"&&(xm=ke.jsbn.BigInteger);var xm,Uh=ke.util.ByteBuffer,hu=typeof Buffer>"u"?Uint8Array:Buffer;ke.pki=ke.pki||{};qm.exports=ke.pki.ed25519=ke.ed25519=ke.ed25519||{};var v0=ke.ed25519;v0.constants={};v0.constants.PUBLIC_KEY_BYTE_LENGTH=32;v0.constants.PRIVATE_KEY_BYTE_LENGTH=64;v0.constants.SEED_BYTE_LENGTH=32;v0.constants.SIGN_BYTE_LENGTH=64;v0.constants.HASH_BYTE_LENGTH=64;v0.generateKeyPair=function(i){i=i||{};var e=i.seed;if(e===void 0)e=ke.random.getBytesSync(v0.constants.SEED_BYTE_LENGTH);else if(typeof e=="string"){if(e.length!==v0.constants.SEED_BYTE_LENGTH)throw new TypeError('"seed" must be '+v0.constants.SEED_BYTE_LENGTH+" bytes in length.")}else if(!(e instanceof Uint8Array))throw new TypeError('"seed" must be a node.js Buffer, Uint8Array, or a binary string.');e=Pt({message:e,encoding:"binary"});for(var u=new hu(v0.constants.PUBLIC_KEY_BYTE_LENGTH),r=new hu(v0.constants.PRIVATE_KEY_BYTE_LENGTH),a=0;a<32;++a)r[a]=e[a];return pD(u,r),{publicKey:u,privateKey:r}};v0.privateKeyFromAsn1=function(i){var e={},u=[],r=ke.asn1.validate(i,oD,e,u);if(!r){var a=new Error("Invalid Key.");throw a.errors=u,a}var s=ke.asn1.derToOid(e.privateKeyOid),n=ke.oids.EdDSA25519;if(s!==n)throw new Error('Invalid OID "'+s+'"; OID must be "'+n+'".');var l=e.privateKey,d=Pt({message:ke.asn1.fromDer(l).value,encoding:"binary"});return{privateKeyBytes:d}};v0.publicKeyFromAsn1=function(i){var e={},u=[],r=ke.asn1.validate(i,nD,e,u);if(!r){var a=new Error("Invalid Key.");throw a.errors=u,a}var s=ke.asn1.derToOid(e.publicKeyOid),n=ke.oids.EdDSA25519;if(s!==n)throw new Error('Invalid OID "'+s+'"; OID must be "'+n+'".');var l=e.ed25519PublicKey;if(l.length!==v0.constants.PUBLIC_KEY_BYTE_LENGTH)throw new Error("Key length is invalid.");return Pt({message:l,encoding:"binary"})};v0.publicKeyFromPrivateKey=function(i){i=i||{};var e=Pt({message:i.privateKey,encoding:"binary"});if(e.length!==v0.constants.PRIVATE_KEY_BYTE_LENGTH)throw new TypeError('"options.privateKey" must have a byte length of '+v0.constants.PRIVATE_KEY_BYTE_LENGTH);for(var u=new hu(v0.constants.PUBLIC_KEY_BYTE_LENGTH),r=0;r=0};function Pt(i){var e=i.message;if(e instanceof Uint8Array||e instanceof hu)return e;var u=i.encoding;if(e===void 0)if(i.md)e=i.md.digest().getBytes(),u="binary";else throw new TypeError('"options.message" or "options.md" not specified.');if(typeof e=="string"&&!u)throw new TypeError('"options.encoding" must be "binary" or "utf8".');if(typeof e=="string"){if(typeof Buffer<"u")return Buffer.from(e,u);e=new Uh(e,u)}else if(!(e instanceof Uh))throw new TypeError('"options.message" must be a node.js Buffer, a Uint8Array, a forge ByteBuffer, or a string with "options.encoding" specifying its encoding.');for(var r=new hu(e.length()),a=0;a=32;--r){for(u=0,a=r-32,s=r-12;a>8,e[a]-=u*256;e[a]+=u,e[r]=0}for(u=0,a=0;a<32;++a)e[a]+=u-(e[31]>>4)*Dh[a],u=e[a]>>8,e[a]&=255;for(a=0;a<32;++a)e[a]-=u*Dh[a];for(r=0;r<32;++r)e[r+1]+=e[r]>>8,i[r]=e[r]&255}c(km,"modL");function kh(i){for(var e=new Float64Array(64),u=0;u<64;++u)e[u]=i[u],i[u]=0;km(i,e)}c(kh,"reduce");function Fh(i,e){var u=m0(),r=m0(),a=m0(),s=m0(),n=m0(),l=m0(),d=m0(),p=m0(),h=m0();ga(u,i[1],i[0]),ga(h,e[1],e[0]),Z0(u,u,h),Ra(r,i[0],i[1]),Ra(h,e[0],e[1]),Z0(r,r,h),Z0(a,i[3],e[3]),Z0(a,a,cD),Z0(s,i[2],e[2]),Ra(s,s,s),ga(n,r,u),ga(l,s,a),Ra(d,s,a),Ra(p,r,u),Z0(i[0],n,l),Z0(i[1],p,d),Z0(i[2],d,l),Z0(i[3],n,p)}c(Fh,"add");function wm(i,e,u){for(var r=0;r<4;++r)Gm(i[r],e[r],u)}c(wm,"cswap");function Hh(i,e){var u=m0(),r=m0(),a=m0();BD(a,e[2]),Z0(u,e[0],a),Z0(r,e[1],a),cc(i,r),i[31]^=Hm(u)<<7}c(Hh,"pack");function cc(i,e){var u,r,a,s=m0(),n=m0();for(u=0;u<16;++u)n[u]=e[u];for(wh(n),wh(n),wh(n),r=0;r<2;++r){for(s[0]=n[0]-65517,u=1;u<15;++u)s[u]=n[u]-65535-(s[u-1]>>16&1),s[u-1]&=65535;s[15]=n[15]-32767-(s[14]>>16&1),a=s[15]>>16&1,s[14]&=65535,Gm(n,s,1-a)}for(u=0;u<16;u++)i[2*u]=n[u]&255,i[2*u+1]=n[u]>>8}c(cc,"pack25519");function SD(i,e){var u=m0(),r=m0(),a=m0(),s=m0(),n=m0(),l=m0(),d=m0();return Tr(i[2],lc),OD(i[1],e),ci(a,i[1]),Z0(s,a,lD),ga(a,a,i[2]),Ra(s,i[2],s),ci(n,s),ci(l,n),Z0(d,l,n),Z0(u,d,a),Z0(u,u,s),LD(u,u),Z0(u,u,a),Z0(u,u,s),Z0(u,u,s),Z0(i[0],u,s),ci(r,i[0]),Z0(r,r,s),Um(r,a)&&Z0(i[0],i[0],dD),ci(r,i[0]),Z0(r,r,s),Um(r,a)?-1:(Hm(i[0])===e[31]>>7&&ga(i[0],Ph,i[0]),Z0(i[3],i[0],i[1]),0)}c(SD,"unpackneg");function OD(i,e){var u;for(u=0;u<16;++u)i[u]=e[2*u]+(e[2*u+1]<<8);i[15]&=32767}c(OD,"unpack25519");function LD(i,e){var u=m0(),r;for(r=0;r<16;++r)u[r]=e[r];for(r=250;r>=0;--r)ci(u,u),r!==1&&Z0(u,u,e);for(r=0;r<16;++r)i[r]=u[r]}c(LD,"pow2523");function Um(i,e){var u=new hu(32),r=new hu(32);return cc(u,i),cc(r,e),Fm(u,0,r,0)}c(Um,"neq25519");function Fm(i,e,u,r){return ED(i,e,u,r,32)}c(Fm,"crypto_verify_32");function ED(i,e,u,r,a){var s,n=0;for(s=0;s>>8)-1}c(ED,"vn");function Hm(i){var e=new hu(32);return cc(e,i),e[0]&1}c(Hm,"par25519");function Vm(i,e,u){var r,a;for(Tr(i[0],Ph),Tr(i[1],lc),Tr(i[2],lc),Tr(i[3],Ph),a=255;a>=0;--a)r=u[a/8|0]>>(a&7)&1,wm(i,e,r),Fh(e,i),Fh(i,i),wm(i,e,r)}c(Vm,"scalarmult");function Vh(i,e){var u=[m0(),m0(),m0(),m0()];Tr(u[0],vm),Tr(u[1],Dm),Tr(u[2],lc),Z0(u[3],vm,Dm),Vm(i,u,e)}c(Vh,"scalarbase");function Tr(i,e){var u;for(u=0;u<16;u++)i[u]=e[u]|0}c(Tr,"set25519");function BD(i,e){var u=m0(),r;for(r=0;r<16;++r)u[r]=e[r];for(r=253;r>=0;--r)ci(u,u),r!==2&&r!==4&&Z0(u,u,e);for(r=0;r<16;++r)i[r]=u[r]}c(BD,"inv25519");function wh(i){var e,u,r=1;for(e=0;e<16;++e)u=i[e]+r+65535,r=Math.floor(u/65536),i[e]=u-r*65536;i[0]+=r-1+37*(r-1)}c(wh,"car25519");function Gm(i,e,u){for(var r,a=~(u-1),s=0;s<16;++s)r=a&(i[s]^e[s]),i[s]^=r,e[s]^=r}c(Gm,"sel25519");function m0(i){var e,u=new Float64Array(16);if(i)for(e=0;e{var _u=y0();H0();Iu();yn();Xm.exports=_u.kem=_u.kem||{};var Wm=_u.jsbn.BigInteger;_u.kem.rsa={};_u.kem.rsa.create=function(i,e){e=e||{};var u=e.prng||_u.random,r={};return r.encrypt=function(a,s){var n=Math.ceil(a.n.bitLength()/8),l;do l=new Wm(_u.util.bytesToHex(u.getBytesSync(n)),16).mod(a.n);while(l.compareTo(Wm.ONE)<=0);l=_u.util.hexToBytes(l.toString(16));var d=n-l.length;d>0&&(l=_u.util.fillString("\0",d)+l);var p=a.encrypt(l,"NONE"),h=i.generate(l,s);return{encapsulation:p,key:h}},r.decrypt=function(a,s,n){var l=a.decrypt(s,"NONE");return i.generate(l,n)},r};_u.kem.kdf1=function(i,e){jm(this,i,0,e||i.digestLength)};_u.kem.kdf2=function(i,e){jm(this,i,1,e||i.digestLength)};function jm(i,e,u,r){i.generate=function(a,s){for(var n=new _u.util.ByteBuffer,l=Math.ceil(s/r)+u,d=new _u.util.ByteBuffer,p=u;p{var w0=y0();H0();$m.exports=w0.log=w0.log||{};w0.log.levels=["none","error","warning","info","debug","verbose","max"];var dc={},Kh=[],Dn=null;w0.log.LEVEL_LOCKED=2;w0.log.NO_LEVEL_CHECK=4;w0.log.INTERPOLATE=8;for(mt=0;mt"u"||e?i.flags|=w0.log.LEVEL_LOCKED:i.flags&=~w0.log.LEVEL_LOCKED};w0.log.addLogger=function(i){Kh.push(i)};typeof console<"u"&&"log"in console?(console.error&&console.warn&&console.info&&console.debug?(Jm={error:console.error,warning:console.warn,info:console.info,debug:console.debug,verbose:console.debug},wn=c(function(i,e){w0.log.prepareStandard(e);var u=Jm[e.level],r=[e.standard];r=r.concat(e.arguments.slice()),u.apply(console,r)},"f"),ya=w0.log.makeLogger(wn)):(wn=c(function(e,u){w0.log.prepareStandardFull(u),console.log(u.standardFull)},"f"),ya=w0.log.makeLogger(wn)),w0.log.setLevel(ya,"debug"),w0.log.addLogger(ya),Dn=ya):console={log:function(){}};var ya,Jm,wn;Dn!==null&&typeof window<"u"&&window.location&&(vn=new URL(window.location.href).searchParams,vn.has("console.level")&&w0.log.setLevel(Dn,vn.get("console.level").slice(-1)[0]),vn.has("console.lock")&&(zm=vn.get("console.lock").slice(-1)[0],zm=="true"&&w0.log.lock(Dn)));var vn,zm;w0.log.consoleLogger=Dn});var u_=b((Oj,e_)=>{e_.exports=ht();ql();ma();ih();xh()});var i_=b((Lj,r_)=>{var d0=y0();Sr();ju();Rn();Or();ri();Eh();Iu();H0();ic();var P=d0.asn1,tu=r_.exports=d0.pkcs7=d0.pkcs7||{};tu.messageFromPem=function(i){var e=d0.pem.decode(i)[0];if(e.type!=="PKCS7"){var u=new Error('Could not convert PKCS#7 message from PEM; PEM header type is not "PKCS#7".');throw u.headerType=e.type,u}if(e.procType&&e.procType.type==="ENCRYPTED")throw new Error("Could not convert PKCS#7 message from PEM; PEM is encrypted.");var r=P.fromDer(e.body);return tu.messageFromAsn1(r)};tu.messageToPem=function(i,e){var u={type:"PKCS7",body:P.toDer(i.toAsn1()).getBytes()};return d0.pem.encode(u,{maxline:e})};tu.messageFromAsn1=function(i){var e={},u=[];if(!P.validate(i,tu.asn1.contentInfoValidator,e,u)){var r=new Error("Cannot read PKCS#7 message. ASN.1 object is not an PKCS#7 ContentInfo.");throw r.errors=u,r}var a=P.derToOid(e.contentType),s;switch(a){case d0.pki.oids.envelopedData:s=tu.createEnvelopedData();break;case d0.pki.oids.encryptedData:s=tu.createEncryptedData();break;case d0.pki.oids.signedData:s=tu.createSignedData();break;default:throw new Error("Cannot read PKCS#7 message. ContentType with OID "+a+" is not (yet) supported.")}return s.fromAsn1(e.content.value[0]),s};tu.createSignedData=function(){var i=null;return i={type:d0.pki.oids.signedData,version:1,certificates:[],crls:[],signers:[],digestAlgorithmIdentifiers:[],contentInfo:null,signerInfos:[],fromAsn1:function(r){if(jh(i,r,tu.asn1.signedDataValidator),i.certificates=[],i.crls=[],i.digestAlgorithmIdentifiers=[],i.contentInfo=null,i.signerInfos=[],i.rawCapture.certificates)for(var a=i.rawCapture.certificates.value,s=0;s0&&n.value[0].value.push(P.create(P.Class.CONTEXT_SPECIFIC,0,!0,r)),s.length>0&&n.value[0].value.push(P.create(P.Class.CONTEXT_SPECIFIC,1,!0,s)),n.value[0].value.push(P.create(P.Class.UNIVERSAL,P.Type.SET,!0,i.signerInfos)),P.create(P.Class.UNIVERSAL,P.Type.SEQUENCE,!0,[P.create(P.Class.UNIVERSAL,P.Type.OID,!1,P.oidToDer(i.type).getBytes()),n])},addSigner:function(r){var a=r.issuer,s=r.serialNumber;if(r.certificate){var n=r.certificate;typeof n=="string"&&(n=d0.pki.certificateFromPem(n)),a=n.issuer.attributes,s=n.serialNumber}var l=r.key;if(!l)throw new Error("Could not add PKCS#7 signer; no private key specified.");typeof l=="string"&&(l=d0.pki.privateKeyFromPem(l));var d=r.digestAlgorithm||d0.pki.oids.sha1;switch(d){case d0.pki.oids.sha1:case d0.pki.oids.sha256:case d0.pki.oids.sha384:case d0.pki.oids.sha512:case d0.pki.oids.md5:break;default:throw new Error("Could not add PKCS#7 signer; unknown message digest algorithm: "+d)}var p=r.authenticatedAttributes||[];if(p.length>0){for(var h=!1,f=!1,S=0;S0){for(var u=P.create(P.Class.CONTEXT_SPECIFIC,1,!0,[]),r=0;r=u&&a{var Me=y0();Sr();La();ql();ma();H0();var hc=a_.exports=Me.ssh=Me.ssh||{};hc.privateKeyToPutty=function(i,e,u){u=u||"",e=e||"";var r="ssh-rsa",a=e===""?"none":"aes256-cbc",s="PuTTY-User-Key-File-2: "+r+`\r +`;s+="Encryption: "+a+`\r +`,s+="Comment: "+u+`\r +`;var n=Me.util.createBuffer();Na(n,r),_t(n,i.e),_t(n,i.n);var l=Me.util.encode64(n.bytes(),64),d=Math.floor(l.length/66)+1;s+="Public-Lines: "+d+`\r +`,s+=l;var p=Me.util.createBuffer();_t(p,i.d),_t(p,i.p),_t(p,i.q),_t(p,i.qInv);var h;if(!e)h=Me.util.encode64(p.bytes(),64);else{var f=p.length()+16-1;f-=f%16;var S=pc(p.bytes());S.truncate(S.length()-f+p.length()),p.putBuffer(S);var _=Me.util.createBuffer();_.putBuffer(pc("\0\0\0\0",e)),_.putBuffer(pc("\0\0\0",e));var O=Me.aes.createEncryptionCipher(_.truncate(8),"CBC");O.start(Me.util.createBuffer().fillWithByte(0,16)),O.update(p.copy()),O.finish();var E=O.output;E.truncate(16),h=Me.util.encode64(E.bytes(),64)}d=Math.floor(h.length/66)+1,s+=`\r +Private-Lines: `+d+`\r +`,s+=h;var A=pc("putty-private-key-file-mac-key",e),g=Me.util.createBuffer();Na(g,r),Na(g,a),Na(g,u),g.putInt32(n.length()),g.putBuffer(n),g.putInt32(p.length()),g.putBuffer(p);var D=Me.hmac.create();return D.start("sha1",A),D.update(g.bytes()),s+=`\r +Private-MAC: `+D.digest().toHex()+`\r +`,s};hc.publicKeyToOpenSSH=function(i,e){var u="ssh-rsa";e=e||"";var r=Me.util.createBuffer();return Na(r,u),_t(r,i.e),_t(r,i.n),u+" "+Me.util.encode64(r.bytes())+" "+e};hc.privateKeyToOpenSSH=function(i,e){return e?Me.pki.encryptRsaPrivateKey(i,e,{legacy:!0,algorithm:"aes128"}):Me.pki.privateKeyToPem(i)};hc.getPublicKeyFingerprint=function(i,e){e=e||{};var u=e.md||Me.md.md5.create(),r="ssh-rsa",a=Me.util.createBuffer();Na(a,r),_t(a,i.e),_t(a,i.n),u.start(),u.update(a.getBytes());var s=u.digest();if(e.encoding==="hex"){var n=s.toHex();return e.delimiter?n.match(/.{2}/g).join(e.delimiter):n}else{if(e.encoding==="binary")return s.getBytes();if(e.encoding)throw new Error('Unknown encoding "'+e.encoding+'".')}return s};function _t(i,e){var u=e.toString(16);u[0]>="8"&&(u="00"+u);var r=Me.util.hexToBytes(u);i.putInt32(r.length),i.putBytes(r)}c(_t,"_addBigIntegerToBuffer");function Na(i,e){i.putInt32(e.length),i.putString(e)}c(Na,"_addStringToBuffer");function pc(){for(var i=Me.md.sha1.create(),e=arguments.length,u=0;u{n_.exports=y0();Sr();gm();ju();Ul();Rn();Km();La();Qm();Zm();u_();Bh();Xl();ri();hh();_h();i_();Yh();Sh();ah();uc();Iu();oh();s_();Ch();H0()});var c_=b(Sc=>{"use strict";Object.defineProperty(Sc,"__esModule",{value:!0});Sc.getPem=void 0;var gD=require("fs"),fc=o_(),yD=require("util"),ND=yD.promisify(gD.readFile);function CD(i,e){if(e)l_(i).then(u=>e(null,u)).catch(u=>e(u,null));else return l_(i)}c(CD,"getPem");Sc.getPem=CD;function l_(i){return ND(i,{encoding:"base64"}).then(e=>ID(e))}c(l_,"getPemAsync");function ID(i){let e=fc.util.decode64(i),u=fc.asn1.fromDer(e),a=fc.pkcs12.pkcs12FromAsn1(u,"notasecret").getBags({friendlyName:"privatekey"});if(a.friendlyName){let s=a.friendlyName[0].key;return fc.pki.privateKeyToPem(s).replace(/\r\n/g,` +`)}else throw new Error("Unable to get friendly name.")}c(ID,"convertToPem")});var S_=b(Oc=>{"use strict";Object.defineProperty(Oc,"__esModule",{value:!0});Oc.GoogleToken=void 0;var d_=require("fs"),p_=cl(),bD=qp(),xD=require("path"),vD=require("util"),h_=d_.readFile?vD.promisify(d_.readFile):async()=>{throw new Ca("use key rather than keyFile.","MISSING_CREDENTIALS")},f_="https://www.googleapis.com/oauth2/v4/token",DD="https://accounts.google.com/o/oauth2/revoke?token=",Jh=class Jh extends Error{constructor(e,u){super(e),this.code=u}};c(Jh,"ErrorWithCode");var Ca=Jh,Xh,zh=class zh{constructor(e){this.configure(e)}get accessToken(){return this.rawToken?this.rawToken.access_token:void 0}get idToken(){return this.rawToken?this.rawToken.id_token:void 0}get tokenType(){return this.rawToken?this.rawToken.token_type:void 0}get refreshToken(){return this.rawToken?this.rawToken.refresh_token:void 0}hasExpired(){let e=new Date().getTime();return this.rawToken&&this.expiresAt?e>=this.expiresAt:!0}isTokenExpiring(){var e;let u=new Date().getTime(),r=(e=this.eagerRefreshThresholdMillis)!==null&&e!==void 0?e:0;return this.rawToken&&this.expiresAt?this.expiresAt<=u+r:!0}getToken(e,u={}){if(typeof e=="object"&&(u=e,e=void 0),u=Object.assign({forceRefresh:!1},u),e){let r=e;this.getTokenAsync(u).then(a=>r(null,a),e);return}return this.getTokenAsync(u)}async getCredentials(e){switch(xD.extname(e)){case".json":{let r=await h_(e,"utf8"),a=JSON.parse(r),s=a.private_key,n=a.client_email;if(!s||!n)throw new Ca("private_key and client_email are required.","MISSING_CREDENTIALS");return{privateKey:s,clientEmail:n}}case".der":case".crt":case".pem":return{privateKey:await h_(e,"utf8")};case".p12":case".pfx":return Xh||(Xh=(await Promise.resolve().then(()=>c_())).getPem),{privateKey:await Xh(e)};default:throw new Ca("Unknown certificate type. Type is determined based on file extension. Current supported extensions are *.json, *.pem, and *.p12.","UNKNOWN_CERTIFICATE_TYPE")}}async getTokenAsync(e){if(this.inFlightRequest&&!e.forceRefresh)return this.inFlightRequest;try{return await(this.inFlightRequest=this.getTokenAsyncInner(e))}finally{this.inFlightRequest=void 0}}async getTokenAsyncInner(e){if(this.isTokenExpiring()===!1&&e.forceRefresh===!1)return Promise.resolve(this.rawToken);if(!this.key&&!this.keyFile)throw new Error("No key or keyFile set.");if(!this.key&&this.keyFile){let u=await this.getCredentials(this.keyFile);this.key=u.privateKey,this.iss=u.clientEmail||this.iss,u.clientEmail||this.ensureEmail()}return this.requestToken()}ensureEmail(){if(!this.iss)throw new Ca("email is required.","MISSING_CREDENTIALS")}revokeToken(e){if(e){this.revokeTokenAsync().then(()=>e(),e);return}return this.revokeTokenAsync()}async revokeTokenAsync(){if(!this.accessToken)throw new Error("No token to revoke.");let e=DD+this.accessToken;await p_.request({url:e}),this.configure({email:this.iss,sub:this.sub,key:this.key,keyFile:this.keyFile,scope:this.scope,additionalClaims:this.additionalClaims})}configure(e={}){this.keyFile=e.keyFile,this.key=e.key,this.rawToken=void 0,this.iss=e.email||e.iss,this.sub=e.sub,this.additionalClaims=e.additionalClaims,typeof e.scope=="object"?this.scope=e.scope.join(" "):this.scope=e.scope,this.eagerRefreshThresholdMillis=e.eagerRefreshThresholdMillis}async requestToken(){let e=Math.floor(new Date().getTime()/1e3),u=this.additionalClaims||{},r=Object.assign({iss:this.iss,scope:this.scope,aud:f_,exp:e+3600,iat:e,sub:this.sub},u),a=bD.sign({header:{alg:"RS256"},payload:r,secret:this.key});try{let s=await p_.request({method:"POST",url:f_,data:{grant_type:"urn:ietf:params:oauth:grant-type:jwt-bearer",assertion:a},headers:{"Content-Type":"application/x-www-form-urlencoded"},responseType:"json"});return this.rawToken=s.data,this.expiresAt=s.data.expires_in===null||s.data.expires_in===void 0?void 0:(e+s.data.expires_in)*1e3,this.rawToken}catch(s){this.rawToken=void 0,this.tokenExpires=void 0;let n=s.response&&s.response.data?s.response.data:{};if(n.error){let l=n.error_description?`: ${n.error_description}`:"";s.message=`${n.error}${l}`}throw s}}};c(zh,"GoogleToken");var Qh=zh;Oc.GoogleToken=Qh});var L_=b((Rj,O_)=>{"use strict";O_.exports=function(i){i.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var B_=b((gj,E_)=>{"use strict";E_.exports=W0;W0.Node=di;W0.create=W0;function W0(i){var e=this;if(e instanceof W0||(e=new W0),e.tail=null,e.head=null,e.length=0,i&&typeof i.forEach=="function")i.forEach(function(a){e.push(a)});else if(arguments.length>0)for(var u=0,r=arguments.length;u1)u=e;else if(this.head)r=this.head.next,u=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=0;r!==null;a++)u=i(u,r.value,a),r=r.next;return u};W0.prototype.reduceReverse=function(i,e){var u,r=this.tail;if(arguments.length>1)u=e;else if(this.tail)r=this.tail.prev,u=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=this.length-1;r!==null;a--)u=i(u,r.value,a),r=r.prev;return u};W0.prototype.toArray=function(){for(var i=new Array(this.length),e=0,u=this.head;u!==null;e++)i[e]=u.value,u=u.next;return i};W0.prototype.toArrayReverse=function(){for(var i=new Array(this.length),e=0,u=this.tail;u!==null;e++)i[e]=u.value,u=u.prev;return i};W0.prototype.slice=function(i,e){e=e||this.length,e<0&&(e+=this.length),i=i||0,i<0&&(i+=this.length);var u=new W0;if(ethis.length&&(e=this.length);for(var r=0,a=this.head;a!==null&&rthis.length&&(e=this.length);for(var r=this.length,a=this.tail;a!==null&&r>e;r--)a=a.prev;for(;a!==null&&r>i;r--,a=a.prev)u.push(a.value);return u};W0.prototype.splice=function(i,e,...u){i>this.length&&(i=this.length-1),i<0&&(i=this.length+i);for(var r=0,a=this.head;a!==null&&r{"use strict";var kD=B_(),pi=Symbol("max"),Ft=Symbol("length"),Ia=Symbol("lengthCalculator"),Pn=Symbol("allowStale"),hi=Symbol("maxAge"),kt=Symbol("dispose"),M_=Symbol("noDisposeOnSet"),xe=Symbol("lruList"),Qu=Symbol("cache"),__=Symbol("updateAgeOnGet"),$h=c(()=>1,"naiveLength"),tf=class tf{constructor(e){if(typeof e=="number"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!="number"||e.max<0))throw new TypeError("max must be a non-negative number");let u=this[pi]=e.max||1/0,r=e.length||$h;if(this[Ia]=typeof r!="function"?$h:r,this[Pn]=e.stale||!1,e.maxAge&&typeof e.maxAge!="number")throw new TypeError("maxAge must be a number");this[hi]=e.maxAge||0,this[kt]=e.dispose,this[M_]=e.noDisposeOnSet||!1,this[__]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!="number"||e<0)throw new TypeError("max must be a non-negative number");this[pi]=e||1/0,Un(this)}get max(){return this[pi]}set allowStale(e){this[Pn]=!!e}get allowStale(){return this[Pn]}set maxAge(e){if(typeof e!="number")throw new TypeError("maxAge must be a non-negative number");this[hi]=e,Un(this)}get maxAge(){return this[hi]}set lengthCalculator(e){typeof e!="function"&&(e=$h),e!==this[Ia]&&(this[Ia]=e,this[Ft]=0,this[xe].forEach(u=>{u.length=this[Ia](u.value,u.key),this[Ft]+=u.length})),Un(this)}get lengthCalculator(){return this[Ia]}get length(){return this[Ft]}get itemCount(){return this[xe].length}rforEach(e,u){u=u||this;for(let r=this[xe].tail;r!==null;){let a=r.prev;m_(this,e,r,u),r=a}}forEach(e,u){u=u||this;for(let r=this[xe].head;r!==null;){let a=r.next;m_(this,e,r,u),r=a}}keys(){return this[xe].toArray().map(e=>e.key)}values(){return this[xe].toArray().map(e=>e.value)}reset(){this[kt]&&this[xe]&&this[xe].length&&this[xe].forEach(e=>this[kt](e.key,e.value)),this[Qu]=new Map,this[xe]=new kD,this[Ft]=0}dump(){return this[xe].map(e=>Lc(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[xe]}set(e,u,r){if(r=r||this[hi],r&&typeof r!="number")throw new TypeError("maxAge must be a number");let a=r?Date.now():0,s=this[Ia](u,e);if(this[Qu].has(e)){if(s>this[pi])return ba(this,this[Qu].get(e)),!1;let d=this[Qu].get(e).value;return this[kt]&&(this[M_]||this[kt](e,d.value)),d.now=a,d.maxAge=r,d.value=u,this[Ft]+=s-d.length,d.length=s,this.get(e),Un(this),!0}let n=new uf(e,u,s,a,r);return n.length>this[pi]?(this[kt]&&this[kt](e,u),!1):(this[Ft]+=n.length,this[xe].unshift(n),this[Qu].set(e,this[xe].head),Un(this),!0)}has(e){if(!this[Qu].has(e))return!1;let u=this[Qu].get(e).value;return!Lc(this,u)}get(e){return Zh(this,e,!0)}peek(e){return Zh(this,e,!1)}pop(){let e=this[xe].tail;return e?(ba(this,e),e.value):null}del(e){ba(this,this[Qu].get(e))}load(e){this.reset();let u=Date.now();for(let r=e.length-1;r>=0;r--){let a=e[r],s=a.e||0;if(s===0)this.set(a.k,a.v);else{let n=s-u;n>0&&this.set(a.k,a.v,n)}}}prune(){this[Qu].forEach((e,u)=>Zh(this,u,!1))}};c(tf,"LRUCache");var ef=tf,Zh=c((i,e,u)=>{let r=i[Qu].get(e);if(r){let a=r.value;if(Lc(i,a)){if(ba(i,r),!i[Pn])return}else u&&(i[__]&&(r.value.now=Date.now()),i[xe].unshiftNode(r));return a.value}},"get"),Lc=c((i,e)=>{if(!e||!e.maxAge&&!i[hi])return!1;let u=Date.now()-e.now;return e.maxAge?u>e.maxAge:i[hi]&&u>i[hi]},"isStale"),Un=c(i=>{if(i[Ft]>i[pi])for(let e=i[xe].tail;i[Ft]>i[pi]&&e!==null;){let u=e.prev;ba(i,e),e=u}},"trim"),ba=c((i,e)=>{if(e){let u=e.value;i[kt]&&i[kt](u.key,u.value),i[Ft]-=u.length,i[Qu].delete(u.key),i[xe].removeNode(e)}},"del"),rf=class rf{constructor(e,u,r,a,s){this.key=e,this.value=u,this.length=r,this.now=a,this.maxAge=s||0}};c(rf,"Entry");var uf=rf,m_=c((i,e,u,r)=>{let a=u.value;Lc(i,a)&&(ba(i,u),i[Pn]||(a=void 0)),a&&e.call(r,a.value,a.key,i)},"forEachStep");T_.exports=ef});var sf=b(Bc=>{"use strict";Object.defineProperty(Bc,"__esModule",{value:!0});Bc.JWTAccess=void 0;var FD=qp(),HD=Y_(),A_={alg:"RS256",typ:"JWT"},Ec=class Ec{constructor(e,u,r,a){this.cache=new HD({max:500,maxAge:60*60*1e3}),this.email=e,this.key=u,this.keyId=r,this.eagerRefreshThresholdMillis=a??5*60*1e3}getCachedKey(e,u){let r=e;if(u&&Array.isArray(u)&&u.length?r=e?`${e}_${u.join("_")}`:`${u.join("_")}`:typeof u=="string"&&(r=e?`${e}_${u}`:u),!r)throw Error("Scopes or url must be provided");return r}getRequestHeaders(e,u,r){let a=this.getCachedKey(e,r),s=this.cache.get(a),n=Date.now();if(s&&s.expiration-n>this.eagerRefreshThresholdMillis)return s.headers;let l=Math.floor(Date.now()/1e3),d=Ec.getExpirationTime(l),p;if(Array.isArray(r)&&(r=r.join(" ")),r?p={iss:this.email,sub:this.email,scope:r,exp:d,iat:l}:p={iss:this.email,sub:this.email,aud:e,exp:d,iat:l},u){for(let O in p)if(u[O])throw new Error(`The '${O}' property is not allowed when passing additionalClaims. This claim is included in the JWT by default.`)}let h=this.keyId?{...A_,kid:this.keyId}:A_,f=Object.assign(p,u),_={Authorization:`Bearer ${FD.sign({header:h,payload:f,secret:this.key})}`};return this.cache.set(a,{expiration:d*1e3,headers:_}),_}static getExpirationTime(e){return e+3600}fromJSON(e){if(!e)throw new Error("Must pass in a JSON object containing the service account auth settings.");if(!e.client_email)throw new Error("The incoming JSON object does not contain a client_email field");if(!e.private_key)throw new Error("The incoming JSON object does not contain a private_key field");this.email=e.client_email,this.key=e.private_key,this.keyId=e.private_key_id,this.projectId=e.project_id}fromStream(e,u){if(u)this.fromStreamAsync(e).then(()=>u(),u);else return this.fromStreamAsync(e)}fromStreamAsync(e){return new Promise((u,r)=>{e||r(new Error("Must pass in a stream containing the service account auth settings."));let a="";e.setEncoding("utf8").on("data",s=>a+=s).on("error",r).on("end",()=>{try{let s=JSON.parse(a);this.fromJSON(s),u()}catch(s){r(s)}})})}};c(Ec,"JWTAccess");var af=Ec;Bc.JWTAccess=af});var of=b(mc=>{"use strict";Object.defineProperty(mc,"__esModule",{value:!0});mc.JWT=void 0;var R_=S_(),VD=sf(),GD=ui(),Mc=class Mc extends GD.OAuth2Client{constructor(e,u,r,a,s,n){let l=e&&typeof e=="object"?e:{email:e,keyFile:u,key:r,keyId:n,scopes:a,subject:s};super({eagerRefreshThresholdMillis:l.eagerRefreshThresholdMillis,forceRefreshOnFailure:l.forceRefreshOnFailure}),this.email=l.email,this.keyFile=l.keyFile,this.key=l.key,this.keyId=l.keyId,this.scopes=l.scopes,this.subject=l.subject,this.additionalClaims=l.additionalClaims,this.credentials={refresh_token:"jwt-placeholder",expiry_date:1}}createScoped(e){return new Mc({email:this.email,keyFile:this.keyFile,key:this.key,keyId:this.keyId,scopes:e,subject:this.subject,additionalClaims:this.additionalClaims})}async getRequestMetadataAsync(e){e=this.defaultServicePath?`https://${this.defaultServicePath}/`:e;let u=!this.hasUserScopes()&&e||this.useJWTAccessWithScope&&this.hasAnyScopes();if(!this.apiKey&&u)if(this.additionalClaims&&this.additionalClaims.target_audience){let{tokens:r}=await this.refreshToken();return{headers:this.addSharedMetadataHeaders({Authorization:`Bearer ${r.id_token}`})}}else{this.access||(this.access=new VD.JWTAccess(this.email,this.key,this.keyId,this.eagerRefreshThresholdMillis));let r;this.hasUserScopes()?r=this.scopes:e||(r=this.defaultScopes);let a=await this.access.getRequestHeaders(e??void 0,this.additionalClaims,this.useJWTAccessWithScope?r:void 0);return{headers:this.addSharedMetadataHeaders(a)}}else return this.hasAnyScopes()||this.apiKey?super.getRequestMetadataAsync(e):{headers:{}}}async fetchIdToken(e){let u=new R_.GoogleToken({iss:this.email,sub:this.subject,scope:this.scopes||this.defaultScopes,keyFile:this.keyFile,key:this.key,additionalClaims:{target_audience:e}});if(await u.getToken({forceRefresh:!0}),!u.idToken)throw new Error("Unknown error: Failed to fetch ID token");return u.idToken}hasUserScopes(){return this.scopes?this.scopes.length>0:!1}hasAnyScopes(){return!!(this.scopes&&this.scopes.length>0||this.defaultScopes&&this.defaultScopes.length>0)}authorize(e){if(e)this.authorizeAsync().then(u=>e(null,u),e);else return this.authorizeAsync()}async authorizeAsync(){let e=await this.refreshToken();if(!e)throw new Error("No result returned");return this.credentials=e.tokens,this.credentials.refresh_token="jwt-placeholder",this.key=this.gtoken.key,this.email=this.gtoken.iss,e.tokens}async refreshTokenNoCache(e){let u=this.createGToken(),a={access_token:(await u.getToken({forceRefresh:this.isTokenExpiring()})).access_token,token_type:"Bearer",expiry_date:u.expiresAt,id_token:u.idToken};return this.emit("tokens",a),{res:null,tokens:a}}createGToken(){return this.gtoken||(this.gtoken=new R_.GoogleToken({iss:this.email,sub:this.subject,scope:this.scopes||this.defaultScopes,keyFile:this.keyFile,key:this.key,additionalClaims:this.additionalClaims})),this.gtoken}fromJSON(e){if(!e)throw new Error("Must pass in a JSON object containing the service account auth settings.");if(!e.client_email)throw new Error("The incoming JSON object does not contain a client_email field");if(!e.private_key)throw new Error("The incoming JSON object does not contain a private_key field");this.email=e.client_email,this.key=e.private_key,this.keyId=e.private_key_id,this.projectId=e.project_id,this.quotaProjectId=e.quota_project_id}fromStream(e,u){if(u)this.fromStreamAsync(e).then(()=>u(),u);else return this.fromStreamAsync(e)}fromStreamAsync(e){return new Promise((u,r)=>{if(!e)throw new Error("Must pass in a stream containing the service account auth settings.");let a="";e.setEncoding("utf8").on("error",r).on("data",s=>a+=s).on("end",()=>{try{let s=JSON.parse(a);this.fromJSON(s),u()}catch(s){r(s)}})})}fromAPIKey(e){if(typeof e!="string")throw new Error("Must provide an API Key string.");this.apiKey=e}async getCredentials(){if(this.key)return{private_key:this.key,client_email:this.email};if(this.keyFile){let u=await this.createGToken().getCredentials(this.keyFile);return{private_key:u.privateKey,client_email:u.clientEmail}}throw new Error("A key or a keyFile must be provided to getCredentials.")}};c(Mc,"JWT");var nf=Mc;mc.JWT=nf});var df=b(_c=>{"use strict";Object.defineProperty(_c,"__esModule",{value:!0});_c.UserRefreshClient=void 0;var qD=ui(),cf=class cf extends qD.OAuth2Client{constructor(e,u,r,a,s){let n=e&&typeof e=="object"?e:{clientId:e,clientSecret:u,refreshToken:r,eagerRefreshThresholdMillis:a,forceRefreshOnFailure:s};super({clientId:n.clientId,clientSecret:n.clientSecret,eagerRefreshThresholdMillis:n.eagerRefreshThresholdMillis,forceRefreshOnFailure:n.forceRefreshOnFailure}),this._refreshToken=n.refreshToken,this.credentials.refresh_token=n.refreshToken}async refreshTokenNoCache(e){return super.refreshTokenNoCache(this._refreshToken)}fromJSON(e){if(!e)throw new Error("Must pass in a JSON object containing the user refresh token");if(e.type!=="authorized_user")throw new Error('The incoming JSON object does not have the "authorized_user" type');if(!e.client_id)throw new Error("The incoming JSON object does not contain a client_id field");if(!e.client_secret)throw new Error("The incoming JSON object does not contain a client_secret field");if(!e.refresh_token)throw new Error("The incoming JSON object does not contain a refresh_token field");this._clientId=e.client_id,this._clientSecret=e.client_secret,this._refreshToken=e.refresh_token,this.credentials.refresh_token=e.refresh_token,this.quotaProjectId=e.quota_project_id}fromStream(e,u){if(u)this.fromStreamAsync(e).then(()=>u(),u);else return this.fromStreamAsync(e)}async fromStreamAsync(e){return new Promise((u,r)=>{if(!e)return r(new Error("Must pass in a stream containing the user refresh token."));let a="";e.setEncoding("utf8").on("error",r).on("data",s=>a+=s).on("end",()=>{try{let s=JSON.parse(a);return this.fromJSON(s),u()}catch(s){return r(s)}})})}};c(cf,"UserRefreshClient");var lf=cf;_c.UserRefreshClient=lf});var y_=b(xa=>{"use strict";Object.defineProperty(xa,"__esModule",{value:!0});xa.getErrorFromOAuthErrorResponse=xa.OAuthClientAuthHandler=void 0;var g_=require("querystring"),KD=ca(),WD=["PUT","POST","PATCH"],hf=class hf{constructor(e){this.clientAuthentication=e,this.crypto=KD.createCrypto()}applyClientAuthenticationOptions(e,u){this.injectAuthenticatedHeaders(e,u),u||this.injectAuthenticatedRequestBody(e)}injectAuthenticatedHeaders(e,u){var r;if(u)e.headers=e.headers||{},Object.assign(e.headers,{Authorization:`Bearer ${u}}`});else if(((r=this.clientAuthentication)===null||r===void 0?void 0:r.confidentialClientType)==="basic"){e.headers=e.headers||{};let a=this.clientAuthentication.clientId,s=this.clientAuthentication.clientSecret||"",n=this.crypto.encodeBase64StringUtf8(`${a}:${s}`);Object.assign(e.headers,{Authorization:`Basic ${n}`})}}injectAuthenticatedRequestBody(e){var u;if(((u=this.clientAuthentication)===null||u===void 0?void 0:u.confidentialClientType)==="request-body"){let r=(e.method||"GET").toUpperCase();if(WD.indexOf(r)!==-1){let a,s=e.headers||{};for(let n in s)if(n.toLowerCase()==="content-type"&&s[n]){a=s[n].toLowerCase();break}if(a==="application/x-www-form-urlencoded"){e.data=e.data||"";let n=g_.parse(e.data);Object.assign(n,{client_id:this.clientAuthentication.clientId,client_secret:this.clientAuthentication.clientSecret||""}),e.data=g_.stringify(n)}else if(a==="application/json")e.data=e.data||{},Object.assign(e.data,{client_id:this.clientAuthentication.clientId,client_secret:this.clientAuthentication.clientSecret||""});else throw new Error(`${a} content-types are not supported with ${this.clientAuthentication.confidentialClientType} client authentication`)}else throw new Error(`${r} HTTP method does not support ${this.clientAuthentication.confidentialClientType} client authentication`)}}};c(hf,"OAuthClientAuthHandler");var pf=hf;xa.OAuthClientAuthHandler=pf;function jD(i,e){let u=i.error,r=i.error_description,a=i.error_uri,s=`Error code ${u}`;typeof r<"u"&&(s+=`: ${r}`),typeof a<"u"&&(s+=` - ${a}`);let n=new Error(s);if(e){let l=Object.keys(e);e.stack&&l.push("stack"),l.forEach(d=>{d!=="message"&&Object.defineProperty(n,d,{value:e[d],writable:!1,enumerable:!0})})}return n}c(jD,"getErrorFromOAuthErrorResponse");xa.getErrorFromOAuthErrorResponse=jD});var Of=b(Tc=>{"use strict";Object.defineProperty(Tc,"__esModule",{value:!0});Tc.StsCredentials=void 0;var XD=require("querystring"),QD=On(),N_=y_(),Sf=class Sf extends N_.OAuthClientAuthHandler{constructor(e,u){super(u),this.tokenExchangeEndpoint=e,this.transporter=new QD.DefaultTransporter}async exchangeToken(e,u,r){var a,s,n;let l={grant_type:e.grantType,resource:e.resource,audience:e.audience,scope:(a=e.scope)===null||a===void 0?void 0:a.join(" "),requested_token_type:e.requestedTokenType,subject_token:e.subjectToken,subject_token_type:e.subjectTokenType,actor_token:(s=e.actingParty)===null||s===void 0?void 0:s.actorToken,actor_token_type:(n=e.actingParty)===null||n===void 0?void 0:n.actorTokenType,options:r&&JSON.stringify(r)};Object.keys(l).forEach(h=>{typeof l[h]>"u"&&delete l[h]});let d={"Content-Type":"application/x-www-form-urlencoded"};Object.assign(d,u||{});let p={url:this.tokenExchangeEndpoint,method:"POST",headers:d,data:XD.stringify(l),responseType:"json"};this.applyClientAuthenticationOptions(p);try{let h=await this.transporter.request(p),f=h.data;return f.res=h,f}catch(h){throw h.response?N_.getErrorFromOAuthErrorResponse(h.response.data,h):h}}};c(Sf,"StsCredentials");var ff=Sf;Tc.StsCredentials=ff});var va=b(fu=>{"use strict";Object.defineProperty(fu,"__esModule",{value:!0});fu.BaseExternalAccountClient=fu.CLOUD_RESOURCE_MANAGER=fu.EXTERNAL_ACCOUNT_TYPE=fu.EXPIRATION_TIME_OFFSET=void 0;var JD=require("stream"),zD=Ln(),$D=Of(),ZD="urn:ietf:params:oauth:grant-type:token-exchange",ew="urn:ietf:params:oauth:token-type:access_token",Lf="https://www.googleapis.com/auth/cloud-platform",Yc="\\.googleapis\\.com$",Ef="[^\\.\\s\\/\\\\]+";fu.EXPIRATION_TIME_OFFSET=5*60*1e3;fu.EXTERNAL_ACCOUNT_TYPE="external_account";fu.CLOUD_RESOURCE_MANAGER="https://cloudresourcemanager.googleapis.com/v1/projects/";var uw="//iam.googleapis.com/locations/[^/]+/workforcePools/[^/]+/providers/.+",Mf=class Mf extends zD.AuthClient{constructor(e,u){if(super(),e.type!==fu.EXTERNAL_ACCOUNT_TYPE)throw new Error(`Expected "${fu.EXTERNAL_ACCOUNT_TYPE}" type but received "${e.type}"`);if(this.clientAuth=e.client_id?{confidentialClientType:"basic",clientId:e.client_id,clientSecret:e.client_secret}:void 0,!this.validateGoogleAPIsUrl("sts",e.token_url))throw new Error(`"${e.token_url}" is not a valid token url.`);this.stsCredential=new $D.StsCredentials(e.token_url,this.clientAuth),this.scopes=[Lf],this.cachedAccessToken=null,this.audience=e.audience,this.subjectTokenType=e.subject_token_type,this.quotaProjectId=e.quota_project_id,this.workforcePoolUserProject=e.workforce_pool_user_project;let r=new RegExp(uw);if(this.workforcePoolUserProject&&!this.audience.match(r))throw new Error("workforcePoolUserProject should not be set for non-workforce pool credentials.");if(typeof e.service_account_impersonation_url<"u"&&!this.validateGoogleAPIsUrl("iamcredentials",e.service_account_impersonation_url))throw new Error(`"${e.service_account_impersonation_url}" is not a valid service account impersonation url.`);this.serviceAccountImpersonationUrl=e.service_account_impersonation_url,typeof(u==null?void 0:u.eagerRefreshThresholdMillis)!="number"?this.eagerRefreshThresholdMillis=fu.EXPIRATION_TIME_OFFSET:this.eagerRefreshThresholdMillis=u.eagerRefreshThresholdMillis,this.forceRefreshOnFailure=!!(u!=null&&u.forceRefreshOnFailure),this.projectId=null,this.projectNumber=this.getProjectNumber(this.audience)}getServiceAccountEmail(){var e;if(this.serviceAccountImpersonationUrl){let r=/serviceAccounts\/(?[^:]+):generateAccessToken$/.exec(this.serviceAccountImpersonationUrl);return((e=r==null?void 0:r.groups)===null||e===void 0?void 0:e.email)||null}return null}setCredentials(e){super.setCredentials(e),this.cachedAccessToken=e}async getAccessToken(){return(!this.cachedAccessToken||this.isExpired(this.cachedAccessToken))&&await this.refreshAccessTokenAsync(),{token:this.cachedAccessToken.access_token,res:this.cachedAccessToken.res}}async getRequestHeaders(){let u={Authorization:`Bearer ${(await this.getAccessToken()).token}`};return this.addSharedMetadataHeaders(u)}request(e,u){if(u)this.requestAsync(e).then(r=>u(null,r),r=>u(r,r.response));else return this.requestAsync(e)}async getProjectId(){let e=this.projectNumber||this.workforcePoolUserProject;if(this.projectId)return this.projectId;if(e){let u=await this.getRequestHeaders(),r=await this.transporter.request({headers:u,url:`${fu.CLOUD_RESOURCE_MANAGER}${e}`,responseType:"json"});return this.projectId=r.data.projectId,this.projectId}return null}async requestAsync(e,u=!1){let r;try{let a=await this.getRequestHeaders();e.headers=e.headers||{},a&&a["x-goog-user-project"]&&(e.headers["x-goog-user-project"]=a["x-goog-user-project"]),a&&a.Authorization&&(e.headers.Authorization=a.Authorization),r=await this.transporter.request(e)}catch(a){let s=a.response;if(s){let n=s.status,l=s.config.data instanceof JD.Readable;if(!u&&(n===401||n===403)&&!l&&this.forceRefreshOnFailure)return await this.refreshAccessTokenAsync(),await this.requestAsync(e,!0)}throw a}return r}async refreshAccessTokenAsync(){let e=await this.retrieveSubjectToken(),u={grantType:ZD,audience:this.audience,requestedTokenType:ew,subjectToken:e,subjectTokenType:this.subjectTokenType,scope:this.serviceAccountImpersonationUrl?[Lf]:this.getScopesArray()},r=!this.clientAuth&&this.workforcePoolUserProject?{userProject:this.workforcePoolUserProject}:void 0,a=await this.stsCredential.exchangeToken(u,void 0,r);return this.serviceAccountImpersonationUrl?this.cachedAccessToken=await this.getImpersonatedAccessToken(a.access_token):a.expires_in?this.cachedAccessToken={access_token:a.access_token,expiry_date:new Date().getTime()+a.expires_in*1e3,res:a.res}:this.cachedAccessToken={access_token:a.access_token,res:a.res},this.credentials={},Object.assign(this.credentials,this.cachedAccessToken),delete this.credentials.res,this.emit("tokens",{refresh_token:null,expiry_date:this.cachedAccessToken.expiry_date,access_token:this.cachedAccessToken.access_token,token_type:"Bearer",id_token:null}),this.cachedAccessToken}getProjectNumber(e){let u=e.match(/\/projects\/([^/]+)/);return u?u[1]:null}async getImpersonatedAccessToken(e){let u={url:this.serviceAccountImpersonationUrl,method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},data:{scope:this.getScopesArray()},responseType:"json"},r=await this.transporter.request(u),a=r.data;return{access_token:a.accessToken,expiry_date:new Date(a.expireTime).getTime(),res:r}}isExpired(e){let u=new Date().getTime();return e.expiry_date?u>=e.expiry_date-this.eagerRefreshThresholdMillis:!1}getScopesArray(){return typeof this.scopes=="string"?[this.scopes]:typeof this.scopes>"u"?[Lf]:this.scopes}validateGoogleAPIsUrl(e,u){let r;try{r=new URL(u)}catch{return!1}let a=r.hostname;if(r.protocol!=="https:")return!1;let s=[new RegExp("^"+Ef+"\\."+e+Yc),new RegExp("^"+e+Yc),new RegExp("^"+e+"\\."+Ef+Yc),new RegExp("^"+Ef+"\\-"+e+Yc)];for(let n of s)if(a.match(n))return!0;return!1}};c(Mf,"BaseExternalAccountClient");var Bf=Mf;fu.BaseExternalAccountClient=Bf});var yf=b(Ac=>{"use strict";var mf,_f,Tf;Object.defineProperty(Ac,"__esModule",{value:!0});Ac.IdentityPoolClient=void 0;var Af=require("fs"),Rf=require("util"),tw=va(),rw=Rf.promisify((mf=Af.readFile)!==null&&mf!==void 0?mf:()=>{}),iw=Rf.promisify((_f=Af.realpath)!==null&&_f!==void 0?_f:()=>{}),aw=Rf.promisify((Tf=Af.lstat)!==null&&Tf!==void 0?Tf:()=>{}),gf=class gf extends tw.BaseExternalAccountClient{constructor(e,u){var r,a;if(super(e,u),this.file=e.credential_source.file,this.url=e.credential_source.url,this.headers=e.credential_source.headers,!this.file&&!this.url)throw new Error('No valid Identity Pool "credential_source" provided');if(this.formatType=((r=e.credential_source.format)===null||r===void 0?void 0:r.type)||"text",this.formatSubjectTokenFieldName=(a=e.credential_source.format)===null||a===void 0?void 0:a.subject_token_field_name,this.formatType!=="json"&&this.formatType!=="text")throw new Error(`Invalid credential_source format "${this.formatType}"`);if(this.formatType==="json"&&!this.formatSubjectTokenFieldName)throw new Error("Missing subject_token_field_name for JSON credential_source format")}async retrieveSubjectToken(){return this.file?await this.getTokenFromFile(this.file,this.formatType,this.formatSubjectTokenFieldName):await this.getTokenFromUrl(this.url,this.formatType,this.formatSubjectTokenFieldName,this.headers)}async getTokenFromFile(e,u,r){try{if(e=await iw(e),!(await aw(e)).isFile())throw new Error}catch(n){throw n.message=`The file at ${e} does not exist, or it is not a file. ${n.message}`,n}let a,s=await rw(e,{encoding:"utf8"});if(u==="text"?a=s:u==="json"&&r&&(a=JSON.parse(s)[r]),!a)throw new Error("Unable to parse the subject_token from the credential_source file");return a}async getTokenFromUrl(e,u,r,a){let s={url:e,method:"GET",headers:a,responseType:u},n;if(u==="text"?n=(await this.transporter.request(s)).data:u==="json"&&r&&(n=(await this.transporter.request(s)).data[r]),!n)throw new Error("Unable to parse the subject_token from the credential_source URL");return n}};c(gf,"IdentityPoolClient");var Yf=gf;Ac.IdentityPoolClient=Yf});var b_=b(Rc=>{"use strict";Object.defineProperty(Rc,"__esModule",{value:!0});Rc.AwsRequestSigner=void 0;var I_=ca(),C_="AWS4-HMAC-SHA256",sw="aws4_request",Cf=class Cf{constructor(e,u){this.getCredentials=e,this.region=u,this.crypto=I_.createCrypto()}async getRequestOptions(e){if(!e.url)throw new Error('"url" is required in "amzOptions"');let u=typeof e.data=="object"?JSON.stringify(e.data):e.data,r=e.url,a=e.method||"GET",s=e.body||u,n=e.headers,l=await this.getCredentials(),d=new URL(r),p=await ow({crypto:this.crypto,host:d.host,canonicalUri:d.pathname,canonicalQuerystring:d.search.substr(1),method:a,region:this.region,securityCredentials:l,requestPayload:s,additionalAmzHeaders:n}),h=Object.assign(p.amzDate?{"x-amz-date":p.amzDate}:{},{Authorization:p.authorizationHeader,host:d.host},n||{});l.token&&Object.assign(h,{"x-amz-security-token":l.token});let f={url:r,method:a,headers:h};return typeof s<"u"&&(f.body=s),f}};c(Cf,"AwsRequestSigner");var Nf=Cf;Rc.AwsRequestSigner=Nf;async function kn(i,e,u){return await i.signWithHmacSha256(e,u)}c(kn,"sign");async function nw(i,e,u,r,a){let s=await kn(i,`AWS4${e}`,u),n=await kn(i,s,r),l=await kn(i,n,a);return await kn(i,l,"aws4_request")}c(nw,"getSigningKey");async function ow(i){let e=i.additionalAmzHeaders||{},u=i.requestPayload||"",r=i.host.split(".")[0],a=new Date,s=a.toISOString().replace(/[-:]/g,"").replace(/\.[0-9]+/,""),n=a.toISOString().replace(/[-]/g,"").replace(/T.*/,""),l={};Object.keys(e).forEach(I=>{l[I.toLowerCase()]=e[I]}),i.securityCredentials.token&&(l["x-amz-security-token"]=i.securityCredentials.token);let d=Object.assign({host:i.host},l.date?{}:{"x-amz-date":s},l),p="",h=Object.keys(d).sort();h.forEach(I=>{p+=`${I}:${d[I]} +`});let f=h.join(";"),S=await i.crypto.sha256DigestHex(u),_=`${i.method} +${i.canonicalUri} +${i.canonicalQuerystring} +${p} +${f} +${S}`,O=`${n}/${i.region}/${r}/${sw}`,E=`${C_} +${s} +${O} +`+await i.crypto.sha256DigestHex(_),A=await nw(i.crypto,i.securityCredentials.secretAccessKey,n,i.region,r),g=await kn(i.crypto,A,E),D=`${C_} Credential=${i.securityCredentials.accessKeyId}/${O}, SignedHeaders=${f}, Signature=${I_.fromArrayBufferToHex(g)}`;return{amzDate:l.date?void 0:s,authorizationHeader:D,canonicalQuerystring:i.canonicalQuerystring}}c(ow,"generateAuthenticationHeaderMap")});var xf=b(gc=>{"use strict";Object.defineProperty(gc,"__esModule",{value:!0});gc.AwsClient=void 0;var lw=b_(),cw=va(),bf=class bf extends cw.BaseExternalAccountClient{constructor(e,u){var r;super(e,u),this.environmentId=e.credential_source.environment_id,this.regionUrl=e.credential_source.region_url,this.securityCredentialsUrl=e.credential_source.url,this.regionalCredVerificationUrl=e.credential_source.regional_cred_verification_url,this.imdsV2SessionTokenUrl=e.credential_source.imdsv2_session_token_url;let a=(r=this.environmentId)===null||r===void 0?void 0:r.match(/^(aws)(\d+)$/);if(!a||!this.regionalCredVerificationUrl)throw new Error('No valid AWS "credential_source" provided');if(parseInt(a[2],10)!==1)throw new Error(`aws version "${a[2]}" is not supported in the current build.`);this.awsRequestSigner=null,this.region=""}async retrieveSubjectToken(){if(!this.awsRequestSigner){let a={};this.imdsV2SessionTokenUrl&&(a["x-aws-ec2-metadata-token"]=await this.getImdsV2SessionToken()),this.region=await this.getAwsRegion(a),this.awsRequestSigner=new lw.AwsRequestSigner(async()=>{if(process.env.AWS_ACCESS_KEY_ID&&process.env.AWS_SECRET_ACCESS_KEY)return{accessKeyId:process.env.AWS_ACCESS_KEY_ID,secretAccessKey:process.env.AWS_SECRET_ACCESS_KEY,token:process.env.AWS_SESSION_TOKEN};let s=await this.getAwsRoleName(a),n=await this.getAwsSecurityCredentials(s,a);return{accessKeyId:n.AccessKeyId,secretAccessKey:n.SecretAccessKey,token:n.Token}},this.region)}let e=await this.awsRequestSigner.getRequestOptions({url:this.regionalCredVerificationUrl.replace("{region}",this.region),method:"POST"}),u=[],r=Object.assign({"x-goog-cloud-target-resource":this.audience},e.headers);for(let a in r)u.push({key:a,value:r[a]});return encodeURIComponent(JSON.stringify({url:e.url,method:e.method,headers:u}))}async getImdsV2SessionToken(){let e={url:this.imdsV2SessionTokenUrl,method:"PUT",responseType:"text",headers:{"x-aws-ec2-metadata-token-ttl-seconds":"300"}};return(await this.transporter.request(e)).data}async getAwsRegion(e){if(process.env.AWS_REGION||process.env.AWS_DEFAULT_REGION)return process.env.AWS_REGION||process.env.AWS_DEFAULT_REGION;if(!this.regionUrl)throw new Error('Unable to determine AWS region due to missing "options.credential_source.region_url"');let u={url:this.regionUrl,method:"GET",responseType:"text",headers:e},r=await this.transporter.request(u);return r.data.substr(0,r.data.length-1)}async getAwsRoleName(e){if(!this.securityCredentialsUrl)throw new Error('Unable to determine AWS role name due to missing "options.credential_source.url"');let u={url:this.securityCredentialsUrl,method:"GET",responseType:"text",headers:e};return(await this.transporter.request(u)).data}async getAwsSecurityCredentials(e,u){return(await this.transporter.request({url:`${this.securityCredentialsUrl}/${e}`,responseType:"json",headers:u})).data}};c(bf,"AwsClient");var If=bf;gc.AwsClient=If});var wf=b(yc=>{"use strict";Object.defineProperty(yc,"__esModule",{value:!0});yc.ExternalAccountClient=void 0;var dw=va(),pw=yf(),hw=xf(),Df=class Df{constructor(){throw new Error("ExternalAccountClients should be initialized via: ExternalAccountClient.fromJSON(), directly via explicit constructors, eg. new AwsClient(options), new IdentityPoolClient(options) or via new GoogleAuth(options).getClient()")}static fromJSON(e,u){var r;return e&&e.type===dw.EXTERNAL_ACCOUNT_TYPE?!((r=e.credential_source)===null||r===void 0)&&r.environment_id?new hw.AwsClient(e,u):new pw.IdentityPoolClient(e,u):null}};c(Df,"ExternalAccountClient");var vf=Df;yc.ExternalAccountClient=vf});var D_=b(wa=>{"use strict";Object.defineProperty(wa,"__esModule",{value:!0});wa.GoogleAuth=wa.CLOUD_SDK_CLIENT_ID=void 0;var fw=require("child_process"),Fn=require("fs"),Uf=Sl(),Sw=require("os"),Pf=require("path"),Ow=ca(),Lw=On(),Ew=bp(),Bw=Dp(),Mw=wp(),fi=of(),x_=df(),v_=wf(),Da=va();wa.CLOUD_SDK_CLIENT_ID="764086051850-6qr4p6gpi6hn506pt8ejuq83di341hur.apps.googleusercontent.com";var kf=class kf{constructor(e){this.checkIsGCE=void 0,this.jsonContent=null,this.cachedCredential=null,e=e||{},this._cachedProjectId=e.projectId||null,this.cachedCredential=e.authClient||null,this.keyFilename=e.keyFilename||e.keyFile,this.scopes=e.scopes,this.jsonContent=e.credentials||null,this.clientOptions=e.clientOptions}get isGCE(){return this.checkIsGCE}setGapicJWTValues(e){e.defaultServicePath=this.defaultServicePath,e.useJWTAccessWithScope=this.useJWTAccessWithScope,e.defaultScopes=this.defaultScopes}getProjectId(e){if(e)this.getProjectIdAsync().then(u=>e(null,u),e);else return this.getProjectIdAsync()}getProjectIdAsync(){return this._cachedProjectId?Promise.resolve(this._cachedProjectId):(this._getDefaultProjectIdPromise||(this._getDefaultProjectIdPromise=new Promise(async(e,u)=>{try{let r=this.getProductionProjectId()||await this.getFileProjectId()||await this.getDefaultServiceProjectId()||await this.getGCEProjectId()||await this.getExternalAccountClientProjectId();if(this._cachedProjectId=r,!r)throw new Error(`Unable to detect a Project Id in the current environment. +To learn more about authentication and Google APIs, visit: +https://cloud.google.com/docs/authentication/getting-started`);e(r)}catch(r){u(r)}})),this._getDefaultProjectIdPromise)}getAnyScopes(){return this.scopes||this.defaultScopes}getApplicationDefault(e={},u){let r;if(typeof e=="function"?u=e:r=e,u)this.getApplicationDefaultAsync(r).then(a=>u(null,a.credential,a.projectId),u);else return this.getApplicationDefaultAsync(r)}async getApplicationDefaultAsync(e={}){if(this.cachedCredential)return{credential:this.cachedCredential,projectId:await this.getProjectIdAsync()};let u,r;if(u=await this._tryGetApplicationCredentialsFromEnvironmentVariable(e),u)return u instanceof fi.JWT?u.scopes=this.scopes:u instanceof Da.BaseExternalAccountClient&&(u.scopes=this.getAnyScopes()),this.cachedCredential=u,r=await this.getProjectId(),{credential:u,projectId:r};if(u=await this._tryGetApplicationCredentialsFromWellKnownFile(e),u)return u instanceof fi.JWT?u.scopes=this.scopes:u instanceof Da.BaseExternalAccountClient&&(u.scopes=this.getAnyScopes()),this.cachedCredential=u,r=await this.getProjectId(),{credential:u,projectId:r};let a;try{a=await this._checkIsGCE()}catch(s){throw s instanceof Error&&(s.message=`Unexpected error determining execution environment: ${s.message}`),s}if(!a)throw new Error("Could not load the default credentials. Browse to https://cloud.google.com/docs/authentication/getting-started for more information.");return e.scopes=this.getAnyScopes(),this.cachedCredential=new Ew.Compute(e),r=await this.getProjectId(),{projectId:r,credential:this.cachedCredential}}async _checkIsGCE(){return this.checkIsGCE===void 0&&(this.checkIsGCE=await Uf.isAvailable()),this.checkIsGCE}async _tryGetApplicationCredentialsFromEnvironmentVariable(e){let u=process.env.GOOGLE_APPLICATION_CREDENTIALS||process.env.google_application_credentials;if(!u||u.length===0)return null;try{return this._getApplicationCredentialsFromFilePath(u,e)}catch(r){throw r instanceof Error&&(r.message=`Unable to read the credential file specified by the GOOGLE_APPLICATION_CREDENTIALS environment variable: ${r.message}`),r}}async _tryGetApplicationCredentialsFromWellKnownFile(e){let u=null;if(this._isWindows())u=process.env.APPDATA;else{let a=process.env.HOME;a&&(u=Pf.join(a,".config"))}return u&&(u=Pf.join(u,"gcloud","application_default_credentials.json"),Fn.existsSync(u)||(u=null)),u?await this._getApplicationCredentialsFromFilePath(u,e):null}async _getApplicationCredentialsFromFilePath(e,u={}){if(!e||e.length===0)throw new Error("The file path is invalid.");try{if(e=Fn.realpathSync(e),!Fn.lstatSync(e).isFile())throw new Error}catch(a){throw a instanceof Error&&(a.message=`The file at ${e} does not exist, or it is not a file. ${a.message}`),a}let r=Fn.createReadStream(e);return this.fromStream(r,u)}fromJSON(e,u){let r;if(!e)throw new Error("Must pass in a JSON object containing the Google auth settings.");return u=u||{},e.type==="authorized_user"?(r=new x_.UserRefreshClient(u),r.fromJSON(e)):e.type===Da.EXTERNAL_ACCOUNT_TYPE?(r=v_.ExternalAccountClient.fromJSON(e,u),r.scopes=this.getAnyScopes()):(u.scopes=this.scopes,r=new fi.JWT(u),this.setGapicJWTValues(r),r.fromJSON(e)),r}_cacheClientFromJSON(e,u){let r;return u=u||{},e.type==="authorized_user"?(r=new x_.UserRefreshClient(u),r.fromJSON(e)):e.type===Da.EXTERNAL_ACCOUNT_TYPE?(r=v_.ExternalAccountClient.fromJSON(e,u),r.scopes=this.getAnyScopes()):(u.scopes=this.scopes,r=new fi.JWT(u),this.setGapicJWTValues(r),r.fromJSON(e)),this.jsonContent=e,this.cachedCredential=r,r}fromStream(e,u={},r){let a={};if(typeof u=="function"?r=u:a=u,r)this.fromStreamAsync(e,a).then(s=>r(null,s),r);else return this.fromStreamAsync(e,a)}fromStreamAsync(e,u){return new Promise((r,a)=>{if(!e)throw new Error("Must pass in a stream containing the Google auth settings.");let s="";e.setEncoding("utf8").on("error",a).on("data",n=>s+=n).on("end",()=>{try{try{let n=JSON.parse(s),l=this._cacheClientFromJSON(n,u);return r(l)}catch(n){if(!this.keyFilename)throw n;let l=new fi.JWT({...this.clientOptions,keyFile:this.keyFilename});return this.cachedCredential=l,this.setGapicJWTValues(l),r(l)}}catch(n){return a(n)}})})}fromAPIKey(e,u){u=u||{};let r=new fi.JWT(u);return r.fromAPIKey(e),r}_isWindows(){let e=Sw.platform();return!!(e&&e.length>=3&&e.substring(0,3).toLowerCase()==="win")}async getDefaultServiceProjectId(){return new Promise(e=>{fw.exec("gcloud config config-helper --format json",(u,r)=>{if(!u&&r)try{let a=JSON.parse(r).configuration.properties.core.project;e(a);return}catch{}e(null)})})}getProductionProjectId(){return process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT||process.env.gcloud_project||process.env.google_cloud_project}async getFileProjectId(){if(this.cachedCredential)return this.cachedCredential.projectId;if(this.keyFilename){let u=await this.getClient();if(u&&u.projectId)return u.projectId}let e=await this._tryGetApplicationCredentialsFromEnvironmentVariable();return e?e.projectId:null}async getExternalAccountClientProjectId(){return!this.jsonContent||this.jsonContent.type!==Da.EXTERNAL_ACCOUNT_TYPE?null:await(await this.getClient()).getProjectId()}async getGCEProjectId(){try{return await Uf.project("project-id")}catch{return null}}getCredentials(e){if(e)this.getCredentialsAsync().then(u=>e(null,u),e);else return this.getCredentialsAsync()}async getCredentialsAsync(){if(await this.getClient(),this.jsonContent)return{client_email:this.jsonContent.client_email,private_key:this.jsonContent.private_key};if(!await this._checkIsGCE())throw new Error("Unknown error.");let u=await Uf.instance({property:"service-accounts/",params:{recursive:"true"}});if(!u||!u.default||!u.default.email)throw new Error("Failure from metadata server.");return{client_email:u.default.email}}async getClient(e){if(e)throw new Error("Passing options to getClient is forbidden in v5.0.0. Use new GoogleAuth(opts) instead.");if(!this.cachedCredential)if(this.jsonContent)this._cacheClientFromJSON(this.jsonContent,this.clientOptions);else if(this.keyFilename){let u=Pf.resolve(this.keyFilename),r=Fn.createReadStream(u);await this.fromStreamAsync(r,this.clientOptions)}else await this.getApplicationDefaultAsync(this.clientOptions);return this.cachedCredential}async getIdTokenClient(e){let u=await this.getClient();if(!("fetchIdToken"in u))throw new Error("Cannot fetch ID token in this environment, use GCE or set the GOOGLE_APPLICATION_CREDENTIALS environment variable to a service account credentials JSON file.");return new Bw.IdTokenClient({targetAudience:e,idTokenProvider:u})}async getAccessToken(){return(await(await this.getClient()).getAccessToken()).token}async getRequestHeaders(e){return(await this.getClient()).getRequestHeaders(e)}async authorizeRequest(e){e=e||{};let u=e.url||e.uri,a=await(await this.getClient()).getRequestHeaders(u);return e.headers=Object.assign(e.headers||{},a),e}async request(e){return(await this.getClient()).request(e)}getEnv(){return Mw.getEnv()}async sign(e){let u=await this.getClient(),r=Ow.createCrypto();if(u instanceof fi.JWT&&u.key)return await r.sign(u.key,e);if(u instanceof Da.BaseExternalAccountClient&&u.getServiceAccountEmail())return this.signBlob(r,u.getServiceAccountEmail(),e);if(!await this.getProjectId())throw new Error("Cannot sign data without a project ID.");let s=await this.getCredentials();if(!s.client_email)throw new Error("Cannot sign data without `client_email`.");return this.signBlob(r,s.client_email,e)}async signBlob(e,u,r){let a=`https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/${u}:signBlob`;return(await this.request({method:"POST",url:a,data:{payload:e.encodeBase64StringUtf8(r)}})).data.signedBlob}};c(kf,"GoogleAuth");var Nc=kf;wa.GoogleAuth=Nc;Nc.DefaultTransporter=Lw.DefaultTransporter});var w_=b(Cc=>{"use strict";Object.defineProperty(Cc,"__esModule",{value:!0});Cc.IAMAuth=void 0;var Hf=class Hf{constructor(e,u){this.selector=e,this.token=u,this.selector=e,this.token=u}getRequestHeaders(){return{"x-goog-iam-authority-selector":this.selector,"x-goog-iam-authorization-token":this.token}}};c(Hf,"IAMAuth");var Ff=Hf;Cc.IAMAuth=Ff});var P_=b(Ic=>{"use strict";Object.defineProperty(Ic,"__esModule",{value:!0});Ic.Impersonated=void 0;var U_=ui(),Gf=class Gf extends U_.OAuth2Client{constructor(e={}){var u,r,a,s,n,l;super(e),this.credentials={expiry_date:1,refresh_token:"impersonated-placeholder"},this.sourceClient=(u=e.sourceClient)!==null&&u!==void 0?u:new U_.OAuth2Client,this.targetPrincipal=(r=e.targetPrincipal)!==null&&r!==void 0?r:"",this.delegates=(a=e.delegates)!==null&&a!==void 0?a:[],this.targetScopes=(s=e.targetScopes)!==null&&s!==void 0?s:[],this.lifetime=(n=e.lifetime)!==null&&n!==void 0?n:3600,this.endpoint=(l=e.endpoint)!==null&&l!==void 0?l:"https://iamcredentials.googleapis.com"}async refreshToken(e){var u,r,a,s,n,l;try{await this.sourceClient.getAccessToken();let d="projects/-/serviceAccounts/"+this.targetPrincipal,p=`${this.endpoint}/v1/${d}:generateAccessToken`,h={delegates:this.delegates,scope:this.targetScopes,lifetime:this.lifetime+"s"},f=await this.sourceClient.request({url:p,data:h,method:"POST"}),S=f.data;return this.credentials.access_token=S.accessToken,this.credentials.expiry_date=Date.parse(S.expireTime),{tokens:this.credentials,res:f}}catch(d){let p=(a=(r=(u=d==null?void 0:d.response)===null||u===void 0?void 0:u.data)===null||r===void 0?void 0:r.error)===null||a===void 0?void 0:a.status,h=(l=(n=(s=d==null?void 0:d.response)===null||s===void 0?void 0:s.data)===null||n===void 0?void 0:n.error)===null||l===void 0?void 0:l.message;throw p&&h?(d.message=`${p}: unable to impersonate: ${h}`,d):(d.message=`unable to impersonate: ${d}`,d)}}};c(Gf,"Impersonated");var Vf=Gf;Ic.Impersonated=Vf});var k_=b(Ju=>{"use strict";Object.defineProperty(Ju,"__esModule",{value:!0});Ju.DownscopedClient=Ju.EXPIRATION_TIME_OFFSET=Ju.MAX_ACCESS_BOUNDARY_RULES_COUNT=void 0;var mw=require("stream"),_w=Ln(),Tw=Of(),Yw="urn:ietf:params:oauth:grant-type:token-exchange",Aw="urn:ietf:params:oauth:token-type:access_token",Rw="urn:ietf:params:oauth:token-type:access_token",gw="https://sts.googleapis.com/v1/token";Ju.MAX_ACCESS_BOUNDARY_RULES_COUNT=10;Ju.EXPIRATION_TIME_OFFSET=5*60*1e3;var Kf=class Kf extends _w.AuthClient{constructor(e,u,r,a){if(super(),this.authClient=e,this.credentialAccessBoundary=u,u.accessBoundary.accessBoundaryRules.length===0)throw new Error("At least one access boundary rule needs to be defined.");if(u.accessBoundary.accessBoundaryRules.length>Ju.MAX_ACCESS_BOUNDARY_RULES_COUNT)throw new Error(`The provided access boundary has more than ${Ju.MAX_ACCESS_BOUNDARY_RULES_COUNT} access boundary rules.`);for(let s of u.accessBoundary.accessBoundaryRules)if(s.availablePermissions.length===0)throw new Error("At least one permission should be defined in access boundary rules.");this.stsCredential=new Tw.StsCredentials(gw),this.cachedDownscopedAccessToken=null,typeof(r==null?void 0:r.eagerRefreshThresholdMillis)!="number"?this.eagerRefreshThresholdMillis=Ju.EXPIRATION_TIME_OFFSET:this.eagerRefreshThresholdMillis=r.eagerRefreshThresholdMillis,this.forceRefreshOnFailure=!!(r!=null&&r.forceRefreshOnFailure),this.quotaProjectId=a}setCredentials(e){if(!e.expiry_date)throw new Error("The access token expiry_date field is missing in the provided credentials.");super.setCredentials(e),this.cachedDownscopedAccessToken=e}async getAccessToken(){return(!this.cachedDownscopedAccessToken||this.isExpired(this.cachedDownscopedAccessToken))&&await this.refreshAccessTokenAsync(),{token:this.cachedDownscopedAccessToken.access_token,expirationTime:this.cachedDownscopedAccessToken.expiry_date,res:this.cachedDownscopedAccessToken.res}}async getRequestHeaders(){let u={Authorization:`Bearer ${(await this.getAccessToken()).token}`};return this.addSharedMetadataHeaders(u)}request(e,u){if(u)this.requestAsync(e).then(r=>u(null,r),r=>u(r,r.response));else return this.requestAsync(e)}async requestAsync(e,u=!1){let r;try{let a=await this.getRequestHeaders();e.headers=e.headers||{},a&&a["x-goog-user-project"]&&(e.headers["x-goog-user-project"]=a["x-goog-user-project"]),a&&a.Authorization&&(e.headers.Authorization=a.Authorization),r=await this.transporter.request(e)}catch(a){let s=a.response;if(s){let n=s.status,l=s.config.data instanceof mw.Readable;if(!u&&(n===401||n===403)&&!l&&this.forceRefreshOnFailure)return await this.refreshAccessTokenAsync(),await this.requestAsync(e,!0)}throw a}return r}async refreshAccessTokenAsync(){var e;let u=(await this.authClient.getAccessToken()).token,r={grantType:Yw,requestedTokenType:Aw,subjectToken:u,subjectTokenType:Rw},a=await this.stsCredential.exchangeToken(r,void 0,this.credentialAccessBoundary),s=((e=this.authClient.credentials)===null||e===void 0?void 0:e.expiry_date)||null,n=a.expires_in?new Date().getTime()+a.expires_in*1e3:s;return this.cachedDownscopedAccessToken={access_token:a.access_token,expiry_date:n,res:a.res},this.credentials={},Object.assign(this.credentials,this.cachedDownscopedAccessToken),delete this.credentials.res,this.emit("tokens",{refresh_token:null,expiry_date:this.cachedDownscopedAccessToken.expiry_date,access_token:this.cachedDownscopedAccessToken.access_token,token_type:"Bearer",id_token:null}),this.cachedDownscopedAccessToken}isExpired(e){let u=new Date().getTime();return e.expiry_date?u>=e.expiry_date-this.eagerRefreshThresholdMillis:!1}};c(Kf,"DownscopedClient");var qf=Kf;Ju.DownscopedClient=qf});var V_=b(oe=>{"use strict";Object.defineProperty(oe,"__esModule",{value:!0});oe.GoogleAuth=oe.auth=void 0;var F_=D_();Object.defineProperty(oe,"GoogleAuth",{enumerable:!0,get:function(){return F_.GoogleAuth}});var yw=Ln();Object.defineProperty(oe,"AuthClient",{enumerable:!0,get:function(){return yw.AuthClient}});var Nw=bp();Object.defineProperty(oe,"Compute",{enumerable:!0,get:function(){return Nw.Compute}});var Cw=wp();Object.defineProperty(oe,"GCPEnv",{enumerable:!0,get:function(){return Cw.GCPEnv}});var Iw=w_();Object.defineProperty(oe,"IAMAuth",{enumerable:!0,get:function(){return Iw.IAMAuth}});var bw=Dp();Object.defineProperty(oe,"IdTokenClient",{enumerable:!0,get:function(){return bw.IdTokenClient}});var xw=sf();Object.defineProperty(oe,"JWTAccess",{enumerable:!0,get:function(){return xw.JWTAccess}});var vw=of();Object.defineProperty(oe,"JWT",{enumerable:!0,get:function(){return vw.JWT}});var Dw=P_();Object.defineProperty(oe,"Impersonated",{enumerable:!0,get:function(){return Dw.Impersonated}});var H_=ui();Object.defineProperty(oe,"CodeChallengeMethod",{enumerable:!0,get:function(){return H_.CodeChallengeMethod}});Object.defineProperty(oe,"OAuth2Client",{enumerable:!0,get:function(){return H_.OAuth2Client}});var ww=yp();Object.defineProperty(oe,"LoginTicket",{enumerable:!0,get:function(){return ww.LoginTicket}});var Uw=df();Object.defineProperty(oe,"UserRefreshClient",{enumerable:!0,get:function(){return Uw.UserRefreshClient}});var Pw=xf();Object.defineProperty(oe,"AwsClient",{enumerable:!0,get:function(){return Pw.AwsClient}});var kw=yf();Object.defineProperty(oe,"IdentityPoolClient",{enumerable:!0,get:function(){return kw.IdentityPoolClient}});var Fw=wf();Object.defineProperty(oe,"ExternalAccountClient",{enumerable:!0,get:function(){return Fw.ExternalAccountClient}});var Hw=va();Object.defineProperty(oe,"BaseExternalAccountClient",{enumerable:!0,get:function(){return Hw.BaseExternalAccountClient}});var Vw=k_();Object.defineProperty(oe,"DownscopedClient",{enumerable:!0,get:function(){return Vw.DownscopedClient}});var Gw=On();Object.defineProperty(oe,"DefaultTransporter",{enumerable:!0,get:function(){return Gw.DefaultTransporter}});var qw=new F_.GoogleAuth;oe.auth=qw});var K_=b((sX,jf)=>{"use strict";var{PassThrough:G_}=require("stream"),Wf=sa()("retry-request"),Kw=Lu(),Ww={objectMode:!1,retries:2,maxRetryDelay:64,retryDelayMultiplier:2,totalTimeout:600,noResponseRetries:2,currentRetryAttempt:0,shouldRetryFn:function(i){var e=[[100,199],[429,429],[500,599]],u=i.statusCode;Wf(`Response status: ${u}`);for(var r;r=e.shift();)if(u>=r[0]&&u<=r[1])return!0}};function jw(i,e,u){var r=typeof arguments[arguments.length-1]!="function";typeof e=="function"&&(u=e);var a=e&&typeof e.currentRetryAttempt=="number";if(e=Kw({},Ww,e),typeof e.request>"u")try{e.request=require("request")}catch{throw new Error("A request library must be provided to retry-request.")}var s=e.currentRetryAttempt,n=0,l=!1,d,p,h,f,S={abort:function(){f&&f.abort&&f.abort()}};r&&(d=new G_({objectMode:e.objectMode}),d.abort=O);var _=Date.now();if(s>0?A(s):E(),r)return d;return S;function O(){h=null,p&&(p.abort&&p.abort(),p.cancel&&p.cancel(),p.destroy?p.destroy():p.end&&p.end())}function E(){s++,Wf(`Current retry attempt: ${s}`),r?(l=!1,h=new G_({objectMode:e.objectMode}),p=e.request(i),setImmediate(function(){d.emit("request")}),p.on("error",function(D){l||(l=!0,g(D))}).on("response",function(D,I){l||(l=!0,g(null,D,I))}).on("complete",d.emit.bind(d,"complete")),p.pipe(h)):f=e.request(i,g)}function A(D){r&&O();var I=q_({maxRetryDelay:e.maxRetryDelay,retryDelayMultiplier:e.retryDelayMultiplier,retryNumber:D,timeOfFirstRequest:_,totalTimeout:e.totalTimeout});Wf(`Next retry delay: ${I}`),setTimeout(E,I)}function g(D,I,W){if(D){n++,n<=e.noResponseRetries?A(n):r?(d.emit("error",D),d.end()):u(D,I,W);return}var Y=a?s:s-1;if(Yxc.length-16&&(W_.default.randomFillSync(xc),bc=0),xc.slice(bc,bc+=16)}var W_,xc,bc,Xf=$e(()=>{W_=g3(require("crypto")),xc=new Uint8Array(256),bc=xc.length;c(Hn,"rng")});var j_,X_=$e(()=>{j_=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i});function Xw(i){return typeof i=="string"&&j_.test(i)}var Yr,Vn=$e(()=>{X_();c(Xw,"validate");Yr=Xw});function Qw(i,e=0){let u=(Fe[i[e+0]]+Fe[i[e+1]]+Fe[i[e+2]]+Fe[i[e+3]]+"-"+Fe[i[e+4]]+Fe[i[e+5]]+"-"+Fe[i[e+6]]+Fe[i[e+7]]+"-"+Fe[i[e+8]]+Fe[i[e+9]]+"-"+Fe[i[e+10]]+Fe[i[e+11]]+Fe[i[e+12]]+Fe[i[e+13]]+Fe[i[e+14]]+Fe[i[e+15]]).toLowerCase();if(!Yr(u))throw TypeError("Stringified UUID is invalid");return u}var Fe,Ar,Gn=$e(()=>{Vn();Fe=[];for(let i=0;i<256;++i)Fe.push((i+256).toString(16).substr(1));c(Qw,"stringify");Ar=Qw});function Jw(i,e,u){let r=e&&u||0,a=e||new Array(16);i=i||{};let s=i.node||Q_,n=i.clockseq!==void 0?i.clockseq:Qf;if(s==null||n==null){let S=i.random||(i.rng||Hn)();s==null&&(s=Q_=[S[0]|1,S[1],S[2],S[3],S[4],S[5]]),n==null&&(n=Qf=(S[6]<<8|S[7])&16383)}let l=i.msecs!==void 0?i.msecs:Date.now(),d=i.nsecs!==void 0?i.nsecs:zf+1,p=l-Jf+(d-zf)/1e4;if(p<0&&i.clockseq===void 0&&(n=n+1&16383),(p<0||l>Jf)&&i.nsecs===void 0&&(d=0),d>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");Jf=l,zf=d,Qf=n,l+=122192928e5;let h=((l&268435455)*1e4+d)%4294967296;a[r++]=h>>>24&255,a[r++]=h>>>16&255,a[r++]=h>>>8&255,a[r++]=h&255;let f=l/4294967296*1e4&268435455;a[r++]=f>>>8&255,a[r++]=f&255,a[r++]=f>>>24&15|16,a[r++]=f>>>16&255,a[r++]=n>>>8|128,a[r++]=n&255;for(let S=0;S<6;++S)a[r+S]=s[S];return e||Ar(a)}var Q_,Qf,Jf,zf,J_,z_=$e(()=>{Xf();Gn();Jf=0,zf=0;c(Jw,"v1");J_=Jw});function zw(i){if(!Yr(i))throw TypeError("Invalid UUID");let e,u=new Uint8Array(16);return u[0]=(e=parseInt(i.slice(0,8),16))>>>24,u[1]=e>>>16&255,u[2]=e>>>8&255,u[3]=e&255,u[4]=(e=parseInt(i.slice(9,13),16))>>>8,u[5]=e&255,u[6]=(e=parseInt(i.slice(14,18),16))>>>8,u[7]=e&255,u[8]=(e=parseInt(i.slice(19,23),16))>>>8,u[9]=e&255,u[10]=(e=parseInt(i.slice(24,36),16))/1099511627776&255,u[11]=e/4294967296&255,u[12]=e>>>24&255,u[13]=e>>>16&255,u[14]=e>>>8&255,u[15]=e&255,u}var vc,$f=$e(()=>{Vn();c(zw,"parse");vc=zw});function $w(i){i=unescape(encodeURIComponent(i));let e=[];for(let u=0;u{Gn();$f();c($w,"stringToBytes");Zw="6ba7b810-9dad-11d1-80b4-00c04fd430c8",eU="6ba7b811-9dad-11d1-80b4-00c04fd430c8";c(qn,"default")});function uU(i){return Array.isArray(i)?i=Buffer.from(i):typeof i=="string"&&(i=Buffer.from(i,"utf8")),$_.default.createHash("md5").update(i).digest()}var $_,Z_,eT=$e(()=>{$_=g3(require("crypto"));c(uU,"md5");Z_=uU});var tU,uT,tT=$e(()=>{Zf();eT();tU=qn("v3",48,Z_),uT=tU});function rU(i,e,u){i=i||{};let r=i.random||(i.rng||Hn)();if(r[6]=r[6]&15|64,r[8]=r[8]&63|128,e){u=u||0;for(let a=0;a<16;++a)e[u+a]=r[a];return e}return Ar(r)}var rT,iT=$e(()=>{Xf();Gn();c(rU,"v4");rT=rU});function iU(i){return Array.isArray(i)?i=Buffer.from(i):typeof i=="string"&&(i=Buffer.from(i,"utf8")),aT.default.createHash("sha1").update(i).digest()}var aT,sT,nT=$e(()=>{aT=g3(require("crypto"));c(iU,"sha1");sT=iU});var aU,oT,lT=$e(()=>{Zf();nT();aU=qn("v5",80,sT),oT=aU});var cT,dT=$e(()=>{cT="00000000-0000-0000-0000-000000000000"});function sU(i){if(!Yr(i))throw TypeError("Invalid UUID");return parseInt(i.substr(14,1),16)}var pT,hT=$e(()=>{Vn();c(sU,"version");pT=sU});var Dc={};sy(Dc,{NIL:()=>cT,parse:()=>vc,stringify:()=>Ar,v1:()=>J_,v3:()=>uT,v4:()=>rT,v5:()=>oT,validate:()=>Yr,version:()=>pT});var wc=$e(()=>{z_();tT();iT();lT();dT();hT();Vn();Gn();$f()});var fT=b(e5=>{"use strict";Object.defineProperty(e5,"__esModule",{value:!0});function nU(i,e,{signal:u}={}){return new Promise((r,a)=>{function s(){u==null||u.removeEventListener("abort",s),i.removeListener(e,n),i.removeListener("error",l)}c(s,"cleanup");function n(...d){s(),r(d)}c(n,"onEvent");function l(d){s(),a(d)}c(l,"onError"),u==null||u.addEventListener("abort",s),i.on(e,n),i.on("error",l)})}c(nU,"once");e5.default=nU});var ST=b(Si=>{"use strict";var oU=Si&&Si.__awaiter||function(i,e,u,r){function a(s){return s instanceof u?s:new u(function(n){n(s)})}return c(a,"adopt"),new(u||(u=Promise))(function(s,n){function l(h){try{p(r.next(h))}catch(f){n(f)}}c(l,"fulfilled");function d(h){try{p(r.throw(h))}catch(f){n(f)}}c(d,"rejected");function p(h){h.done?s(h.value):a(h.value).then(l,d)}c(p,"step"),p((r=r.apply(i,e||[])).next())})},Kn=Si&&Si.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Si,"__esModule",{value:!0});var lU=Kn(require("net")),cU=Kn(require("tls")),u5=Kn(require("url")),dU=Kn(sa()),pU=Kn(fT()),hU=rp(),Rr=(0,dU.default)("http-proxy-agent");function fU(i){return typeof i=="string"?/^https:?$/i.test(i):!1}c(fU,"isHTTPS");var r5=class r5 extends hU.Agent{constructor(e){let u;if(typeof e=="string"?u=u5.default.parse(e):u=e,!u)throw new Error("an HTTP(S) proxy server `host` and `port` must be specified!");Rr("Creating new HttpProxyAgent instance: %o",u),super(u);let r=Object.assign({},u);this.secureProxy=u.secureProxy||fU(r.protocol),r.host=r.hostname||r.host,typeof r.port=="string"&&(r.port=parseInt(r.port,10)),!r.port&&r.host&&(r.port=this.secureProxy?443:80),r.host&&r.path&&(delete r.path,delete r.pathname),this.proxy=r}callback(e,u){return oU(this,void 0,void 0,function*(){let{proxy:r,secureProxy:a}=this,s=u5.default.parse(e.path);s.protocol||(s.protocol="http:"),s.hostname||(s.hostname=u.hostname||u.host||null),s.port==null&&typeof u.port&&(s.port=String(u.port)),s.port==="80"&&(s.port=""),e.path=u5.default.format(s),r.auth&&e.setHeader("Proxy-Authorization",`Basic ${Buffer.from(r.auth).toString("base64")}`);let n;if(a?(Rr("Creating `tls.Socket`: %o",r),n=cU.default.connect(r)):(Rr("Creating `net.Socket`: %o",r),n=lU.default.connect(r)),e._header){let l,d;Rr("Regenerating stored HTTP header string for request"),e._header=null,e._implicitHeader(),e.output&&e.output.length>0?(Rr("Patching connection write() output buffer with updated header"),l=e.output[0],d=l.indexOf(`\r +\r +`)+4,e.output[0]=e._header+l.substring(d),Rr("Output buffer: %o",e.output)):e.outputData&&e.outputData.length>0&&(Rr("Patching connection write() output buffer with updated header"),l=e.outputData[0].data,d=l.indexOf(`\r +\r +`)+4,e.outputData[0].data=e._header+l.substring(d),Rr("Output buffer: %o",e.outputData[0].data))}return yield(0,pU.default)(n,"connect"),n})}};c(r5,"HttpProxyAgent");var t5=r5;Si.default=t5});var LT=b((s5,OT)=>{"use strict";var SU=s5&&s5.__importDefault||function(i){return i&&i.__esModule?i:{default:i}},i5=SU(ST());function a5(i){return new i5.default(i)}c(a5,"createHttpProxyAgent");(function(i){i.HttpProxyAgent=i5.default,i.prototype=i5.default.prototype})(a5||(a5={}));OT.exports=a5});var ET=b(Ht=>{"use strict";Object.defineProperty(Ht,"__esModule",{value:!0});Ht.getAgent=Ht.pool=void 0;var OU=require("http"),LU=require("https"),EU=require("url");Ht.pool=new Map;function BU(i){let e=process.env.NO_PROXY||process.env.no_proxy;if(!e)return!0;let u=new URL(i);for(let r of e.split(",")){let a=r.trim();if(a===u.origin||a===u.hostname)return!1;if(a.startsWith("*.")||a.startsWith(".")){let s=a.replace(/^\*\./,".");if(u.hostname.endsWith(s))return!1}}return!0}c(BU,"shouldUseProxyForURI");function MU(i,e){let u=i.startsWith("http://"),r=e.proxy||process.env.HTTP_PROXY||process.env.http_proxy||process.env.HTTPS_PROXY||process.env.https_proxy,a=Object.assign({},e.pool),n=!!e.proxy||BU(i);if(r&&n){let d=u?LT():lp(),p={...EU.parse(r),...a};return new d(p)}let l=u?"http":"https";if(e.forever&&(l+=":forever",!Ht.pool.has(l))){let d=u?OU.Agent:LU.Agent;Ht.pool.set(l,new d({...a,keepAlive:!0}))}return Ht.pool.get(l)}c(MU,"getAgent");Ht.getAgent=MU});var BT=b(Pa=>{"use strict";Object.defineProperty(Pa,"__esModule",{value:!0});Pa.TeenyStatistics=Pa.TeenyStatisticsWarning=void 0;var n5=class n5 extends Error{constructor(e){super(e),this.threshold=0,this.type="",this.value=0,this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor)}};c(n5,"TeenyStatisticsWarning");var Ua=n5;Pa.TeenyStatisticsWarning=Ua;Ua.CONCURRENT_REQUESTS="ConcurrentRequestsExceededWarning";var Wn=class Wn{constructor(e){this._concurrentRequests=0,this._didConcurrentRequestWarn=!1,this._options=Wn._prepareOptions(e)}getOptions(){return Object.assign({},this._options)}setOptions(e){let u=this._options;return this._options=Wn._prepareOptions(e),u}get counters(){return{concurrentRequests:this._concurrentRequests}}requestStarting(){if(this._concurrentRequests++,this._options.concurrentRequests>0&&this._concurrentRequests>=this._options.concurrentRequests&&!this._didConcurrentRequestWarn){this._didConcurrentRequestWarn=!0;let e=new Ua("Possible excessive concurrent requests detected. "+this._concurrentRequests+" requests in-flight, which exceeds the configured threshold of "+this._options.concurrentRequests+". Use the TEENY_REQUEST_WARN_CONCURRENT_REQUESTS environment variable or the concurrentRequests option of teeny-request to increase or disable (0) this warning.");e.type=Ua.CONCURRENT_REQUESTS,e.value=this._concurrentRequests,e.threshold=this._options.concurrentRequests,process.emitWarning(e)}}requestFinished(){this._concurrentRequests--}static _prepareOptions({concurrentRequests:e}={}){let u=this.DEFAULT_WARN_CONCURRENT_REQUESTS,r=Number(process.env.TEENY_REQUEST_WARN_CONCURRENT_REQUESTS);return e!==void 0?u=e:Number.isNaN(r)||(u=r),{concurrentRequests:u}}};c(Wn,"TeenyStatistics");var Uc=Wn;Pa.TeenyStatistics=Uc;Uc.DEFAULT_WARN_CONCURRENT_REQUESTS=5e3});var mT=b((cQ,MT)=>{"use strict";MT.exports=c(function(e,u,r,a){if(!e||!u||!e[u])throw new Error("You must provide an object and a key for an existing method");a||(a=r,r={}),a=a||function(){},r.callthrough=r.callthrough||!1,r.calls=r.calls||0;var s=r.calls===0,n=e[u].bind(e);e[u]=function(){var l=[].slice.call(arguments),d;return r.callthrough&&(d=n.apply(e,l)),d=a.apply(e,l)||d,!s&&--r.calls===0&&(e[u]=n),d}},"stubs")});var o5=b((pQ,TT)=>{"use strict";var _T=mT();function mU(i){i=i||this;var e={callthrough:!0,calls:1};return _T(i,"_read",e,i.emit.bind(i,"reading")),_T(i,"_write",e,i.emit.bind(i,"writing")),i}c(mU,"StreamEvents");TT.exports=mU});var RT=b(ka=>{"use strict";Object.defineProperty(ka,"__esModule",{value:!0});ka.teenyRequest=ka.RequestError=void 0;var l5=W3(),YT=require("stream"),_U=(wc(),y3(Dc)),TU=ET(),AT=BT(),YU=o5(),d5=class d5 extends Error{};c(d5,"RequestError");var c5=d5;ka.RequestError=c5;function AU(i){let e={method:i.method||"GET",...i.timeout&&{timeout:i.timeout},...typeof i.gzip=="boolean"&&{compress:i.gzip}};typeof i.json=="object"?(i.headers=i.headers||{},i.headers["Content-Type"]="application/json",e.body=JSON.stringify(i.json)):Buffer.isBuffer(i.body)?e.body=i.body:typeof i.body!="string"?e.body=JSON.stringify(i.body):e.body=i.body,e.headers=i.headers;let u=i.uri||i.url;if(!u)throw new Error("Missing uri or url in reqOpts.");if(i.useQuerystring===!0||typeof i.qs=="object"){let a=require("querystring").stringify(i.qs);u=u+"?"+a}return e.agent=TU.getAgent(u,i),{uri:u,options:e}}c(AU,"requestToFetchOptions");function Pc(i,e){let u={};u.agent=i.agent||!1,u.headers=i.headers||{},u.href=e.url;let r={};return e.headers.forEach((s,n)=>r[n]=s),Object.assign(e.body,{statusCode:e.status,statusMessage:e.statusText,request:u,body:e.body,headers:r,toJSON:()=>({headers:r})})}c(Pc,"fetchToRequestResponse");function RU(i,e){let u=`--${i}--`,r=new YT.PassThrough;for(let a of e){let s=`--${i}\r +Content-Type: ${a["Content-Type"]}\r +\r +`;r.write(s),typeof a.body=="string"?(r.write(a.body),r.write(`\r +`)):(a.body.pipe(r,{end:!1}),a.body.on("end",()=>{r.write(`\r +`),r.write(u),r.end()}))}return r}c(RU,"createMultipartStream");function He(i,e){let{uri:u,options:r}=AU(i),a=i.multipart;if(i.multipart&&a.length===2){if(!e)throw new Error("Multipart without callback is not implemented.");let s=_U.v4();r.headers["Content-Type"]=`multipart/related; boundary=${s}`,r.body=RU(s,a),He.stats.requestStarting(),l5.default(u,r).then(n=>{He.stats.requestFinished();let l=n.headers.get("content-type"),d=Pc(r,n),p=d.body;if(l==="application/json"||l==="application/json; charset=utf-8"){n.json().then(h=>{d.body=h,e(null,d,h)},h=>{e(h,d,p)});return}n.text().then(h=>{d.body=h,e(null,d,h)},h=>{e(h,d,p)})},n=>{He.stats.requestFinished(),e(n,null,null)});return}if(e===void 0){let s=YU(new YT.PassThrough),n;return s.once("reading",()=>{n?n.pipe(s):s.once("response",()=>{n.pipe(s)})}),r.compress=!1,He.stats.requestStarting(),l5.default(u,r).then(l=>{He.stats.requestFinished(),n=l.body,n.on("error",p=>{s.emit("error",p)});let d=Pc(r,l);s.emit("response",d)},l=>{He.stats.requestFinished(),s.emit("error",l)}),s}He.stats.requestStarting(),l5.default(u,r).then(s=>{He.stats.requestFinished();let n=s.headers.get("content-type"),l=Pc(r,s),d=l.body;if(n==="application/json"||n==="application/json; charset=utf-8"){if(l.statusCode===204){e(null,l,d);return}s.json().then(p=>{l.body=p,e(null,l,p)},p=>{e(p,l,d)});return}s.text().then(p=>{let h=Pc(r,s);h.body=p,e(null,h,p)},p=>{e(p,l,d)})},s=>{He.stats.requestFinished(),e(s,null,null)})}c(He,"teenyRequest");ka.teenyRequest=He;He.defaults=i=>(e,u)=>{let r={...i,...e};if(u===void 0)return He(r);He(r,u)};He.stats=new AT.TeenyStatistics;He.resetStats=()=>{He.stats=new AT.TeenyStatistics(He.stats.getOptions())}});var p5=b((OQ,gT)=>{gT.exports=require("stream")});var xT=b((LQ,bT)=>{"use strict";function yT(i,e){var u=Object.keys(i);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(i);e&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(i,a).enumerable})),u.push.apply(u,r)}return u}c(yT,"ownKeys");function NT(i){for(var e=1;e0?this.tail.next=r:this.head=r,this.tail=r,++this.length},"push")},{key:"unshift",value:c(function(u){var r={data:u,next:this.head};this.length===0&&(this.tail=r),this.head=r,++this.length},"unshift")},{key:"shift",value:c(function(){if(this.length!==0){var u=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,u}},"shift")},{key:"clear",value:c(function(){this.head=this.tail=null,this.length=0},"clear")},{key:"join",value:c(function(u){if(this.length===0)return"";for(var r=this.head,a=""+r.data;r=r.next;)a+=u+r.data;return a},"join")},{key:"concat",value:c(function(u){if(this.length===0)return kc.alloc(0);for(var r=kc.allocUnsafe(u>>>0),a=this.head,s=0;a;)vU(a.data,r,s),s+=a.data.length,a=a.next;return r},"concat")},{key:"consume",value:c(function(u,r){var a;return un.length?n.length:u;if(l===n.length?s+=n:s+=n.slice(0,u),u-=l,u===0){l===n.length?(++a,r.next?this.head=r.next:this.head=this.tail=null):(this.head=r,r.data=n.slice(l));break}++a}return this.length-=a,s},"_getString")},{key:"_getBuffer",value:c(function(u){var r=kc.allocUnsafe(u),a=this.head,s=1;for(a.data.copy(r),u-=a.data.length;a=a.next;){var n=a.data,l=u>n.length?n.length:u;if(n.copy(r,r.length-u,0,l),u-=l,u===0){l===n.length?(++s,a.next?this.head=a.next:this.head=this.tail=null):(this.head=a,a.data=n.slice(l));break}++s}return this.length-=s,r},"_getBuffer")},{key:xU,value:c(function(u,r){return h5(this,NT(NT({},r),{},{depth:0,customInspect:!1}))},"value")}]),i}()});var S5=b((BQ,DT)=>{"use strict";function DU(i,e){var u=this,r=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return r||a?(e?e(i):i&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(f5,this,i)):process.nextTick(f5,this,i)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(i||null,function(s){!e&&s?u._writableState?u._writableState.errorEmitted?process.nextTick(Fc,u):(u._writableState.errorEmitted=!0,process.nextTick(vT,u,s)):process.nextTick(vT,u,s):e?(process.nextTick(Fc,u),e(s)):process.nextTick(Fc,u)}),this)}c(DU,"destroy");function vT(i,e){f5(i,e),Fc(i)}c(vT,"emitErrorAndCloseNT");function Fc(i){i._writableState&&!i._writableState.emitClose||i._readableState&&!i._readableState.emitClose||i.emit("close")}c(Fc,"emitCloseNT");function wU(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}c(wU,"undestroy");function f5(i,e){i.emit("error",e)}c(f5,"emitErrorNT");function UU(i,e){var u=i._readableState,r=i._writableState;u&&u.autoDestroy||r&&r.autoDestroy?i.destroy(e):i.emit("error",e)}c(UU,"errorOrDestroy");DT.exports={destroy:DU,undestroy:wU,errorOrDestroy:UU}});var gr=b((mQ,PT)=>{"use strict";var UT={};function Uu(i,e,u){u||(u=Error);function r(n,l,d){return typeof e=="string"?e:e(n,l,d)}c(r,"getMessage");let s=class s extends u{constructor(l,d,p){super(r(l,d,p))}};c(s,"NodeError");let a=s;a.prototype.name=u.name,a.prototype.code=i,UT[i]=a}c(Uu,"createErrorType");function wT(i,e){if(Array.isArray(i)){let u=i.length;return i=i.map(r=>String(r)),u>2?`one of ${e} ${i.slice(0,u-1).join(", ")}, or `+i[u-1]:u===2?`one of ${e} ${i[0]} or ${i[1]}`:`of ${e} ${i[0]}`}else return`of ${e} ${String(i)}`}c(wT,"oneOf");function PU(i,e,u){return i.substr(!u||u<0?0:+u,e.length)===e}c(PU,"startsWith");function kU(i,e,u){return(u===void 0||u>i.length)&&(u=i.length),i.substring(u-e.length,u)===e}c(kU,"endsWith");function FU(i,e,u){return typeof u!="number"&&(u=0),u+e.length>i.length?!1:i.indexOf(e,u)!==-1}c(FU,"includes");Uu("ERR_INVALID_OPT_VALUE",function(i,e){return'The value "'+e+'" is invalid for option "'+i+'"'},TypeError);Uu("ERR_INVALID_ARG_TYPE",function(i,e,u){let r;typeof e=="string"&&PU(e,"not ")?(r="must not be",e=e.replace(/^not /,"")):r="must be";let a;if(kU(i," argument"))a=`The ${i} ${r} ${wT(e,"type")}`;else{let s=FU(i,".")?"property":"argument";a=`The "${i}" ${s} ${r} ${wT(e,"type")}`}return a+=`. Received type ${typeof u}`,a},TypeError);Uu("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF");Uu("ERR_METHOD_NOT_IMPLEMENTED",function(i){return"The "+i+" method is not implemented"});Uu("ERR_STREAM_PREMATURE_CLOSE","Premature close");Uu("ERR_STREAM_DESTROYED",function(i){return"Cannot call "+i+" after a stream was destroyed"});Uu("ERR_MULTIPLE_CALLBACK","Callback called multiple times");Uu("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable");Uu("ERR_STREAM_WRITE_AFTER_END","write after end");Uu("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError);Uu("ERR_UNKNOWN_ENCODING",function(i){return"Unknown encoding: "+i},TypeError);Uu("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event");PT.exports.codes=UT});var O5=b((TQ,kT)=>{"use strict";var HU=gr().codes.ERR_INVALID_OPT_VALUE;function VU(i,e,u){return i.highWaterMark!=null?i.highWaterMark:e?i[u]:null}c(VU,"highWaterMarkFrom");function GU(i,e,u,r){var a=VU(e,r,u);if(a!=null){if(!(isFinite(a)&&Math.floor(a)===a)||a<0){var s=r?u:"highWaterMark";throw new HU(s,a)}return Math.floor(a)}return i.objectMode?16:16*1024}c(GU,"getHighWaterMark");kT.exports={getHighWaterMark:GU}});var FT=b((AQ,L5)=>{typeof Object.create=="function"?L5.exports=c(function(e,u){u&&(e.super_=u,e.prototype=Object.create(u.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))},"inherits"):L5.exports=c(function(e,u){if(u){e.super_=u;var r=c(function(){},"TempCtor");r.prototype=u.prototype,e.prototype=new r,e.prototype.constructor=e}},"inherits")});var Oi=b((gQ,B5)=>{try{if(E5=require("util"),typeof E5.inherits!="function")throw"";B5.exports=E5.inherits}catch{B5.exports=FT()}var E5});var VT=b((yQ,HT)=>{HT.exports=require("util").deprecate});var _5=b((NQ,XT)=>{"use strict";XT.exports=Se;function qT(i){var e=this;this.next=null,this.entry=null,this.finish=function(){OP(e,i)}}c(qT,"CorkedRequest");var Fa;Se.WritableState=Xn;var qU={deprecate:VT()},KT=p5(),Vc=require("buffer").Buffer,KU=(typeof global<"u"?global:typeof window<"u"?window:typeof self<"u"?self:{}).Uint8Array||function(){};function WU(i){return Vc.from(i)}c(WU,"_uint8ArrayToBuffer");function jU(i){return Vc.isBuffer(i)||i instanceof KU}c(jU,"_isUint8Array");var m5=S5(),XU=O5(),QU=XU.getHighWaterMark,yr=gr().codes,JU=yr.ERR_INVALID_ARG_TYPE,zU=yr.ERR_METHOD_NOT_IMPLEMENTED,$U=yr.ERR_MULTIPLE_CALLBACK,ZU=yr.ERR_STREAM_CANNOT_PIPE,eP=yr.ERR_STREAM_DESTROYED,uP=yr.ERR_STREAM_NULL_VALUES,tP=yr.ERR_STREAM_WRITE_AFTER_END,rP=yr.ERR_UNKNOWN_ENCODING,Ha=m5.errorOrDestroy;Oi()(Se,KT);function iP(){}c(iP,"nop");function Xn(i,e,u){Fa=Fa||Li(),i=i||{},typeof u!="boolean"&&(u=e instanceof Fa),this.objectMode=!!i.objectMode,u&&(this.objectMode=this.objectMode||!!i.writableObjectMode),this.highWaterMark=QU(this,i,"writableHighWaterMark",u),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var r=i.decodeStrings===!1;this.decodeStrings=!r,this.defaultEncoding=i.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(a){dP(e,a)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=i.emitClose!==!1,this.autoDestroy=!!i.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new qT(this)}c(Xn,"WritableState");Xn.prototype.getBuffer=c(function(){for(var e=this.bufferedRequest,u=[];e;)u.push(e),e=e.next;return u},"getBuffer");(function(){try{Object.defineProperty(Xn.prototype,"buffer",{get:qU.deprecate(c(function(){return this.getBuffer()},"writableStateBufferGetter"),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}})();var Hc;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(Hc=Function.prototype[Symbol.hasInstance],Object.defineProperty(Se,Symbol.hasInstance,{value:c(function(e){return Hc.call(this,e)?!0:this!==Se?!1:e&&e._writableState instanceof Xn},"value")})):Hc=c(function(e){return e instanceof this},"realHasInstance");function Se(i){Fa=Fa||Li();var e=this instanceof Fa;if(!e&&!Hc.call(Se,this))return new Se(i);this._writableState=new Xn(i,this,e),this.writable=!0,i&&(typeof i.write=="function"&&(this._write=i.write),typeof i.writev=="function"&&(this._writev=i.writev),typeof i.destroy=="function"&&(this._destroy=i.destroy),typeof i.final=="function"&&(this._final=i.final)),KT.call(this)}c(Se,"Writable");Se.prototype.pipe=function(){Ha(this,new ZU)};function aP(i,e){var u=new tP;Ha(i,u),process.nextTick(e,u)}c(aP,"writeAfterEnd");function sP(i,e,u,r){var a;return u===null?a=new uP:typeof u!="string"&&!e.objectMode&&(a=new JU("chunk",["string","Buffer"],u)),a?(Ha(i,a),process.nextTick(r,a),!1):!0}c(sP,"validChunk");Se.prototype.write=function(i,e,u){var r=this._writableState,a=!1,s=!r.objectMode&&jU(i);return s&&!Vc.isBuffer(i)&&(i=WU(i)),typeof e=="function"&&(u=e,e=null),s?e="buffer":e||(e=r.defaultEncoding),typeof u!="function"&&(u=iP),r.ending?aP(this,u):(s||sP(this,r,i,u))&&(r.pendingcb++,a=oP(this,r,s,i,e,u)),a};Se.prototype.cork=function(){this._writableState.corked++};Se.prototype.uncork=function(){var i=this._writableState;i.corked&&(i.corked--,!i.writing&&!i.corked&&!i.bufferProcessing&&i.bufferedRequest&&WT(this,i))};Se.prototype.setDefaultEncoding=c(function(e){if(typeof e=="string"&&(e=e.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new rP(e);return this._writableState.defaultEncoding=e,this},"setDefaultEncoding");Object.defineProperty(Se.prototype,"writableBuffer",{enumerable:!1,get:c(function(){return this._writableState&&this._writableState.getBuffer()},"get")});function nP(i,e,u){return!i.objectMode&&i.decodeStrings!==!1&&typeof e=="string"&&(e=Vc.from(e,u)),e}c(nP,"decodeChunk");Object.defineProperty(Se.prototype,"writableHighWaterMark",{enumerable:!1,get:c(function(){return this._writableState.highWaterMark},"get")});function oP(i,e,u,r,a,s){if(!u){var n=nP(e,r,a);r!==n&&(u=!0,a="buffer",r=n)}var l=e.objectMode?1:r.length;e.length+=l;var d=e.length{"use strict";var LP=Object.keys||function(i){var e=[];for(var u in i)e.push(u);return e};JT.exports=Tt;var QT=A5(),Y5=_5();Oi()(Tt,QT);for(T5=LP(Y5.prototype),Gc=0;Gc{"use strict";var g5=ei().Buffer,zT=g5.isEncoding||function(i){switch(i=""+i,i&&i.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function MP(i){if(!i)return"utf8";for(var e;;)switch(i){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return i;default:if(e)return;i=(""+i).toLowerCase(),e=!0}}c(MP,"_normalizeEncoding");function mP(i){var e=MP(i);if(typeof e!="string"&&(g5.isEncoding===zT||!zT(i)))throw new Error("Unknown encoding: "+i);return e||i}c(mP,"normalizeEncoding");$T.StringDecoder=Qn;function Qn(i){this.encoding=mP(i);var e;switch(this.encoding){case"utf16le":this.text=gP,this.end=yP,e=4;break;case"utf8":this.fillLast=YP,e=4;break;case"base64":this.text=NP,this.end=CP,e=3;break;default:this.write=IP,this.end=bP;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=g5.allocUnsafe(e)}c(Qn,"StringDecoder");Qn.prototype.write=function(i){if(i.length===0)return"";var e,u;if(this.lastNeed){if(e=this.fillLast(i),e===void 0)return"";u=this.lastNeed,this.lastNeed=0}else u=0;return u>5===6?2:i>>4===14?3:i>>3===30?4:i>>6===2?-1:-2}c(R5,"utf8CheckByte");function _P(i,e,u){var r=e.length-1;if(r=0?(a>0&&(i.lastNeed=a-1),a):--r=0?(a>0&&(i.lastNeed=a-2),a):--r=0?(a>0&&(a===2?a=0:i.lastNeed=a-3),a):0))}c(_P,"utf8CheckIncomplete");function TP(i,e,u){if((e[0]&192)!==128)return i.lastNeed=0,"\uFFFD";if(i.lastNeed>1&&e.length>1){if((e[1]&192)!==128)return i.lastNeed=1,"\uFFFD";if(i.lastNeed>2&&e.length>2&&(e[2]&192)!==128)return i.lastNeed=2,"\uFFFD"}}c(TP,"utf8CheckExtraBytes");function YP(i){var e=this.lastTotal-this.lastNeed,u=TP(this,i,e);if(u!==void 0)return u;if(this.lastNeed<=i.length)return i.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);i.copy(this.lastChar,e,0,i.length),this.lastNeed-=i.length}c(YP,"utf8FillLast");function AP(i,e){var u=_P(this,i,e);if(!this.lastNeed)return i.toString("utf8",e);this.lastTotal=u;var r=i.length-(u-this.lastNeed);return i.copy(this.lastChar,0,r),i.toString("utf8",e,r)}c(AP,"utf8Text");function RP(i){var e=i&&i.length?this.write(i):"";return this.lastNeed?e+"\uFFFD":e}c(RP,"utf8End");function gP(i,e){if((i.length-e)%2===0){var u=i.toString("utf16le",e);if(u){var r=u.charCodeAt(u.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=i[i.length-2],this.lastChar[1]=i[i.length-1],u.slice(0,-1)}return u}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=i[i.length-1],i.toString("utf16le",e,i.length-1)}c(gP,"utf16Text");function yP(i){var e=i&&i.length?this.write(i):"";if(this.lastNeed){var u=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,u)}return e}c(yP,"utf16End");function NP(i,e){var u=(i.length-e)%3;return u===0?i.toString("base64",e):(this.lastNeed=3-u,this.lastTotal=3,u===1?this.lastChar[0]=i[i.length-1]:(this.lastChar[0]=i[i.length-2],this.lastChar[1]=i[i.length-1]),i.toString("base64",e,i.length-u))}c(NP,"base64Text");function CP(i){var e=i&&i.length?this.write(i):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}c(CP,"base64End");function IP(i){return i.toString(this.encoding)}c(IP,"simpleWrite");function bP(i){return i&&i.length?this.write(i):""}c(bP,"simpleEnd")});var Kc=b((DQ,uY)=>{"use strict";var ZT=gr().codes.ERR_STREAM_PREMATURE_CLOSE;function xP(i){var e=!1;return function(){if(!e){e=!0;for(var u=arguments.length,r=new Array(u),a=0;a{"use strict";var Wc;function Nr(i,e,u){return e=wP(e),e in i?Object.defineProperty(i,e,{value:u,enumerable:!0,configurable:!0,writable:!0}):i[e]=u,i}c(Nr,"_defineProperty");function wP(i){var e=UP(i,"string");return typeof e=="symbol"?e:String(e)}c(wP,"_toPropertyKey");function UP(i,e){if(typeof i!="object"||i===null)return i;var u=i[Symbol.toPrimitive];if(u!==void 0){var r=u.call(i,e||"default");if(typeof r!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(i)}c(UP,"_toPrimitive");var PP=Kc(),Cr=Symbol("lastResolve"),Ei=Symbol("lastReject"),Jn=Symbol("error"),jc=Symbol("ended"),Bi=Symbol("lastPromise"),N5=Symbol("handlePromise"),Mi=Symbol("stream");function Ir(i,e){return{value:i,done:e}}c(Ir,"createIterResult");function kP(i){var e=i[Cr];if(e!==null){var u=i[Mi].read();u!==null&&(i[Bi]=null,i[Cr]=null,i[Ei]=null,e(Ir(u,!1)))}}c(kP,"readAndResolve");function FP(i){process.nextTick(kP,i)}c(FP,"onReadable");function HP(i,e){return function(u,r){i.then(function(){if(e[jc]){u(Ir(void 0,!0));return}e[N5](u,r)},r)}}c(HP,"wrapForNext");var VP=Object.getPrototypeOf(function(){}),GP=Object.setPrototypeOf((Wc={get stream(){return this[Mi]},next:c(function(){var e=this,u=this[Jn];if(u!==null)return Promise.reject(u);if(this[jc])return Promise.resolve(Ir(void 0,!0));if(this[Mi].destroyed)return new Promise(function(n,l){process.nextTick(function(){e[Jn]?l(e[Jn]):n(Ir(void 0,!0))})});var r=this[Bi],a;if(r)a=new Promise(HP(r,this));else{var s=this[Mi].read();if(s!==null)return Promise.resolve(Ir(s,!1));a=new Promise(this[N5])}return this[Bi]=a,a},"next")},Nr(Wc,Symbol.asyncIterator,function(){return this}),Nr(Wc,"return",c(function(){var e=this;return new Promise(function(u,r){e[Mi].destroy(null,function(a){if(a){r(a);return}u(Ir(void 0,!0))})})},"_return")),Wc),VP),qP=c(function(e){var u,r=Object.create(GP,(u={},Nr(u,Mi,{value:e,writable:!0}),Nr(u,Cr,{value:null,writable:!0}),Nr(u,Ei,{value:null,writable:!0}),Nr(u,Jn,{value:null,writable:!0}),Nr(u,jc,{value:e._readableState.endEmitted,writable:!0}),Nr(u,N5,{value:c(function(s,n){var l=r[Mi].read();l?(r[Bi]=null,r[Cr]=null,r[Ei]=null,s(Ir(l,!1))):(r[Cr]=s,r[Ei]=n)},"value"),writable:!0}),u));return r[Bi]=null,PP(e,function(a){if(a&&a.code!=="ERR_STREAM_PREMATURE_CLOSE"){var s=r[Ei];s!==null&&(r[Bi]=null,r[Cr]=null,r[Ei]=null,s(a)),r[Jn]=a;return}var n=r[Cr];n!==null&&(r[Bi]=null,r[Cr]=null,r[Ei]=null,n(Ir(void 0,!0))),r[jc]=!0}),e.on("readable",FP.bind(null,r)),r},"createReadableStreamAsyncIterator");tY.exports=qP});var nY=b((kQ,sY)=>{"use strict";function iY(i,e,u,r,a,s,n){try{var l=i[s](n),d=l.value}catch(p){u(p);return}l.done?e(d):Promise.resolve(d).then(r,a)}c(iY,"asyncGeneratorStep");function KP(i){return function(){var e=this,u=arguments;return new Promise(function(r,a){var s=i.apply(e,u);function n(d){iY(s,r,a,n,l,"next",d)}c(n,"_next");function l(d){iY(s,r,a,n,l,"throw",d)}c(l,"_throw"),n(void 0)})}}c(KP,"_asyncToGenerator");function aY(i,e){var u=Object.keys(i);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(i);e&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(i,a).enumerable})),u.push.apply(u,r)}return u}c(aY,"ownKeys");function WP(i){for(var e=1;e{"use strict";LY.exports=G0;var Va;G0.ReadableState=dY;var HQ=require("events").EventEmitter,cY=c(function(e,u){return e.listeners(u).length},"EElistenerCount"),$n=p5(),Xc=require("buffer").Buffer,$P=(typeof global<"u"?global:typeof window<"u"?window:typeof self<"u"?self:{}).Uint8Array||function(){};function ZP(i){return Xc.from(i)}c(ZP,"_uint8ArrayToBuffer");function ek(i){return Xc.isBuffer(i)||i instanceof $P}c(ek,"_isUint8Array");var C5=require("util"),N0;C5&&C5.debuglog?N0=C5.debuglog("stream"):N0=c(function(){},"debug");var uk=xT(),U5=S5(),tk=O5(),rk=tk.getHighWaterMark,Qc=gr().codes,ik=Qc.ERR_INVALID_ARG_TYPE,ak=Qc.ERR_STREAM_PUSH_AFTER_EOF,sk=Qc.ERR_METHOD_NOT_IMPLEMENTED,nk=Qc.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,Ga,I5,b5;Oi()(G0,$n);var zn=U5.errorOrDestroy,x5=["error","close","destroy","pause","resume"];function ok(i,e,u){if(typeof i.prependListener=="function")return i.prependListener(e,u);!i._events||!i._events[e]?i.on(e,u):Array.isArray(i._events[e])?i._events[e].unshift(u):i._events[e]=[u,i._events[e]]}c(ok,"prependListener");function dY(i,e,u){Va=Va||Li(),i=i||{},typeof u!="boolean"&&(u=e instanceof Va),this.objectMode=!!i.objectMode,u&&(this.objectMode=this.objectMode||!!i.readableObjectMode),this.highWaterMark=rk(this,i,"readableHighWaterMark",u),this.buffer=new uk,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=i.emitClose!==!1,this.autoDestroy=!!i.autoDestroy,this.destroyed=!1,this.defaultEncoding=i.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,i.encoding&&(Ga||(Ga=y5().StringDecoder),this.decoder=new Ga(i.encoding),this.encoding=i.encoding)}c(dY,"ReadableState");function G0(i){if(Va=Va||Li(),!(this instanceof G0))return new G0(i);var e=this instanceof Va;this._readableState=new dY(i,this,e),this.readable=!0,i&&(typeof i.read=="function"&&(this._read=i.read),typeof i.destroy=="function"&&(this._destroy=i.destroy)),$n.call(this)}c(G0,"Readable");Object.defineProperty(G0.prototype,"destroyed",{enumerable:!1,get:c(function(){return this._readableState===void 0?!1:this._readableState.destroyed},"get"),set:c(function(e){this._readableState&&(this._readableState.destroyed=e)},"set")});G0.prototype.destroy=U5.destroy;G0.prototype._undestroy=U5.undestroy;G0.prototype._destroy=function(i,e){e(i)};G0.prototype.push=function(i,e){var u=this._readableState,r;return u.objectMode?r=!0:typeof i=="string"&&(e=e||u.defaultEncoding,e!==u.encoding&&(i=Xc.from(i,e),e=""),r=!0),pY(this,i,e,!1,r)};G0.prototype.unshift=function(i){return pY(this,i,null,!0,!1)};function pY(i,e,u,r,a){N0("readableAddChunk",e);var s=i._readableState;if(e===null)s.reading=!1,dk(i,s);else{var n;if(a||(n=lk(s,e)),n)zn(i,n);else if(s.objectMode||e&&e.length>0)if(typeof e!="string"&&!s.objectMode&&Object.getPrototypeOf(e)!==Xc.prototype&&(e=ZP(e)),r)s.endEmitted?zn(i,new nk):v5(i,s,e,!0);else if(s.ended)zn(i,new ak);else{if(s.destroyed)return!1;s.reading=!1,s.decoder&&!u?(e=s.decoder.write(e),s.objectMode||e.length!==0?v5(i,s,e,!1):w5(i,s)):v5(i,s,e,!1)}else r||(s.reading=!1,w5(i,s))}return!s.ended&&(s.length=oY?i=oY:(i--,i|=i>>>1,i|=i>>>2,i|=i>>>4,i|=i>>>8,i|=i>>>16,i++),i}c(ck,"computeNewHighWaterMark");function lY(i,e){return i<=0||e.length===0&&e.ended?0:e.objectMode?1:i!==i?e.flowing&&e.length?e.buffer.head.data.length:e.length:(i>e.highWaterMark&&(e.highWaterMark=ck(i)),i<=e.length?i:e.ended?e.length:(e.needReadable=!0,0))}c(lY,"howMuchToRead");G0.prototype.read=function(i){N0("read",i),i=parseInt(i,10);var e=this._readableState,u=i;if(i!==0&&(e.emittedReadable=!1),i===0&&e.needReadable&&((e.highWaterMark!==0?e.length>=e.highWaterMark:e.length>0)||e.ended))return N0("read: emitReadable",e.length,e.ended),e.length===0&&e.ended?D5(this):Jc(this),null;if(i=lY(i,e),i===0&&e.ended)return e.length===0&&D5(this),null;var r=e.needReadable;N0("need readable",r),(e.length===0||e.length-i0?a=SY(i,e):a=null,a===null?(e.needReadable=e.length<=e.highWaterMark,i=0):(e.length-=i,e.awaitDrain=0),e.length===0&&(e.ended||(e.needReadable=!0),u!==i&&e.ended&&D5(this)),a!==null&&this.emit("data",a),a};function dk(i,e){if(N0("onEofChunk"),!e.ended){if(e.decoder){var u=e.decoder.end();u&&u.length&&(e.buffer.push(u),e.length+=e.objectMode?1:u.length)}e.ended=!0,e.sync?Jc(i):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,hY(i)))}}c(dk,"onEofChunk");function Jc(i){var e=i._readableState;N0("emitReadable",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(N0("emitReadable",e.flowing),e.emittedReadable=!0,process.nextTick(hY,i))}c(Jc,"emitReadable");function hY(i){var e=i._readableState;N0("emitReadable_",e.destroyed,e.length,e.ended),!e.destroyed&&(e.length||e.ended)&&(i.emit("readable"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,P5(i)}c(hY,"emitReadable_");function w5(i,e){e.readingMore||(e.readingMore=!0,process.nextTick(pk,i,e))}c(w5,"maybeReadMore");function pk(i,e){for(;!e.reading&&!e.ended&&(e.length1&&OY(r.pipes,i)!==-1)&&!p&&(N0("false write response, pause",r.awaitDrain),r.awaitDrain++),u.pause())}c(f,"ondata");function S(A){N0("onerror",A),E(),i.removeListener("error",S),cY(i,"error")===0&&zn(i,A)}c(S,"onerror"),ok(i,"error",S);function _(){i.removeListener("finish",O),E()}c(_,"onclose"),i.once("close",_);function O(){N0("onfinish"),i.removeListener("close",_),E()}c(O,"onfinish"),i.once("finish",O);function E(){N0("unpipe"),u.unpipe(i)}return c(E,"unpipe"),i.emit("pipe",u),r.flowing||(N0("pipe resume"),u.resume()),i};function hk(i){return c(function(){var u=i._readableState;N0("pipeOnDrain",u.awaitDrain),u.awaitDrain&&u.awaitDrain--,u.awaitDrain===0&&cY(i,"data")&&(u.flowing=!0,P5(i))},"pipeOnDrainFunctionResult")}c(hk,"pipeOnDrain");G0.prototype.unpipe=function(i){var e=this._readableState,u={hasUnpiped:!1};if(e.pipesCount===0)return this;if(e.pipesCount===1)return i&&i!==e.pipes?this:(i||(i=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,i&&i.emit("unpipe",this,u),this);if(!i){var r=e.pipes,a=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var s=0;s0,r.flowing!==!1&&this.resume()):i==="readable"&&!r.endEmitted&&!r.readableListening&&(r.readableListening=r.needReadable=!0,r.flowing=!1,r.emittedReadable=!1,N0("on readable",r.length,r.reading),r.length?Jc(this):r.reading||process.nextTick(fk,this)),u};G0.prototype.addListener=G0.prototype.on;G0.prototype.removeListener=function(i,e){var u=$n.prototype.removeListener.call(this,i,e);return i==="readable"&&process.nextTick(fY,this),u};G0.prototype.removeAllListeners=function(i){var e=$n.prototype.removeAllListeners.apply(this,arguments);return(i==="readable"||i===void 0)&&process.nextTick(fY,this),e};function fY(i){var e=i._readableState;e.readableListening=i.listenerCount("readable")>0,e.resumeScheduled&&!e.paused?e.flowing=!0:i.listenerCount("data")>0&&i.resume()}c(fY,"updateReadableListening");function fk(i){N0("readable nexttick read 0"),i.read(0)}c(fk,"nReadingNextTick");G0.prototype.resume=function(){var i=this._readableState;return i.flowing||(N0("resume"),i.flowing=!i.readableListening,Sk(this,i)),i.paused=!1,this};function Sk(i,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(Ok,i,e))}c(Sk,"resume");function Ok(i,e){N0("resume",e.reading),e.reading||i.read(0),e.resumeScheduled=!1,i.emit("resume"),P5(i),e.flowing&&!e.reading&&i.read(0)}c(Ok,"resume_");G0.prototype.pause=function(){return N0("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(N0("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this};function P5(i){var e=i._readableState;for(N0("flow",e.flowing);e.flowing&&i.read()!==null;);}c(P5,"flow");G0.prototype.wrap=function(i){var e=this,u=this._readableState,r=!1;i.on("end",function(){if(N0("wrapped end"),u.decoder&&!u.ended){var n=u.decoder.end();n&&n.length&&e.push(n)}e.push(null)}),i.on("data",function(n){if(N0("wrapped data"),u.decoder&&(n=u.decoder.write(n)),!(u.objectMode&&n==null)&&!(!u.objectMode&&(!n||!n.length))){var l=e.push(n);l||(r=!0,i.pause())}});for(var a in i)this[a]===void 0&&typeof i[a]=="function"&&(this[a]=c(function(l){return c(function(){return i[l].apply(i,arguments)},"methodWrapReturnFunction")},"methodWrap")(a));for(var s=0;s=e.length?(e.decoder?u=e.buffer.join(""):e.buffer.length===1?u=e.buffer.first():u=e.buffer.concat(e.length),e.buffer.clear()):u=e.buffer.consume(i,e.decoder),u}c(SY,"fromList");function D5(i){var e=i._readableState;N0("endReadable",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(Lk,e,i))}c(D5,"endReadable");function Lk(i,e){if(N0("endReadableNT",i.endEmitted,i.length),!i.endEmitted&&i.length===0&&(i.endEmitted=!0,e.readable=!1,e.emit("end"),i.autoDestroy)){var u=e._writableState;(!u||u.autoDestroy&&u.finished)&&e.destroy()}}c(Lk,"endReadableNT");typeof Symbol=="function"&&(G0.from=function(i,e){return b5===void 0&&(b5=nY()),b5(G0,i,e)});function OY(i,e){for(var u=0,r=i.length;u{"use strict";BY.exports=Vt;var zc=gr().codes,Ek=zc.ERR_METHOD_NOT_IMPLEMENTED,Bk=zc.ERR_MULTIPLE_CALLBACK,Mk=zc.ERR_TRANSFORM_ALREADY_TRANSFORMING,mk=zc.ERR_TRANSFORM_WITH_LENGTH_0,$c=Li();Oi()(Vt,$c);function _k(i,e){var u=this._transformState;u.transforming=!1;var r=u.writecb;if(r===null)return this.emit("error",new Bk);u.writechunk=null,u.writecb=null,e!=null&&this.push(e),r(i);var a=this._readableState;a.reading=!1,(a.needReadable||a.length{"use strict";mY.exports=Zn;var MY=k5();Oi()(Zn,MY);function Zn(i){if(!(this instanceof Zn))return new Zn(i);MY.call(this,i)}c(Zn,"PassThrough");Zn.prototype._transform=function(i,e,u){u(null,i)}});var gY=b((XQ,RY)=>{"use strict";var F5;function Yk(i){var e=!1;return function(){e||(e=!0,i.apply(void 0,arguments))}}c(Yk,"once");var AY=gr().codes,Ak=AY.ERR_MISSING_ARGS,Rk=AY.ERR_STREAM_DESTROYED;function TY(i){if(i)throw i}c(TY,"noop");function gk(i){return i.setHeader&&typeof i.abort=="function"}c(gk,"isRequest");function yk(i,e,u,r){r=Yk(r);var a=!1;i.on("close",function(){a=!0}),F5===void 0&&(F5=Kc()),F5(i,{readable:e,writable:u},function(n){if(n)return r(n);a=!0,r()});var s=!1;return function(n){if(!a&&!s){if(s=!0,gk(i))return i.abort();if(typeof i.destroy=="function")return i.destroy();r(n||new Rk("pipe"))}}}c(yk,"destroyer");function YY(i){i()}c(YY,"call");function Nk(i,e){return i.pipe(e)}c(Nk,"pipe");function Ck(i){return!i.length||typeof i[i.length-1]!="function"?TY:i.pop()}c(Ck,"popCallback");function Ik(){for(var i=arguments.length,e=new Array(i),u=0;u0;return yk(n,d,p,function(h){a||(a=h),h&&s.forEach(YY),!d&&(s.forEach(YY),r(a))})});return e.reduce(Nk)}c(Ik,"pipeline");RY.exports=Ik});var yY=b((Pu,u1)=>{var e1=require("stream");process.env.READABLE_STREAM==="disable"&&e1?(u1.exports=e1.Readable,Object.assign(u1.exports,e1),u1.exports.Stream=e1):(Pu=u1.exports=A5(),Pu.Stream=e1||Pu,Pu.Readable=Pu,Pu.Writable=_5(),Pu.Duplex=Li(),Pu.Transform=k5(),Pu.PassThrough=_Y(),Pu.finished=Kc(),Pu.pipeline=gY())});var IY=b((JQ,CY)=>{CY.exports=NY;function NY(i,e){if(i&&e)return NY(i)(e);if(typeof i!="function")throw new TypeError("need wrapper function");return Object.keys(i).forEach(function(r){u[r]=i[r]}),u;function u(){for(var r=new Array(arguments.length),a=0;a{var bY=IY();H5.exports=bY(Zc);H5.exports.strict=bY(xY);Zc.proto=Zc(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return Zc(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return xY(this)},configurable:!0})});function Zc(i){var e=c(function(){return e.called?e.value:(e.called=!0,e.value=i.apply(this,arguments))},"f");return e.called=!1,e}c(Zc,"once");function xY(i){var e=c(function(){if(e.called)throw new Error(e.onceError);return e.called=!0,e.value=i.apply(this,arguments)},"f"),u=i.name||"Function wrapped with `once`";return e.onceError=u+" shouldn't be called more than once",e.called=!1,e}c(xY,"onceStrict")});var UY=b((eJ,wY)=>{var bk=vY(),xk=c(function(){},"noop"),vk=c(function(i){return i.setHeader&&typeof i.abort=="function"},"isRequest"),Dk=c(function(i){return i.stdio&&Array.isArray(i.stdio)&&i.stdio.length===3},"isChildProcess"),DY=c(function(i,e,u){if(typeof e=="function")return DY(i,null,e);e||(e={}),u=bk(u||xk);var r=i._writableState,a=i._readableState,s=e.readable||e.readable!==!1&&i.readable,n=e.writable||e.writable!==!1&&i.writable,l=!1,d=c(function(){i.writable||p()},"onlegacyfinish"),p=c(function(){n=!1,s||u.call(i)},"onfinish"),h=c(function(){s=!1,n||u.call(i)},"onend"),f=c(function(A){u.call(i,A?new Error("exited with error code: "+A):null)},"onexit"),S=c(function(A){u.call(i,A)},"onerror"),_=c(function(){process.nextTick(O)},"onclose"),O=c(function(){if(!l){if(s&&!(a&&a.ended&&!a.destroyed))return u.call(i,new Error("premature close"));if(n&&!(r&&r.ended&&!r.destroyed))return u.call(i,new Error("premature close"))}},"onclosenexttick"),E=c(function(){i.req.on("finish",p)},"onrequest");return vk(i)?(i.on("complete",p),i.on("abort",_),i.req?E():i.on("request",E)):n&&!r&&(i.on("end",d),i.on("close",d)),Dk(i)&&i.on("exit",f),i.on("end",h),i.on("finish",p),e.error!==!1&&i.on("error",S),i.on("close",_),function(){l=!0,i.removeListener("complete",p),i.removeListener("abort",_),i.removeListener("request",E),i.req&&i.req.removeListener("finish",p),i.removeListener("end",d),i.removeListener("close",d),i.removeListener("finish",p),i.removeListener("exit",f),i.removeListener("end",h),i.removeListener("error",S),i.removeListener("close",_)}},"eos");wY.exports=DY});var kY=b((tJ,PY)=>{PY.exports=wk;function wk(i){var e=i._readableState;return e?e.objectMode||typeof i._duplexState=="number"?i.read():i.read(Uk(e)):null}c(wk,"shift");function Uk(i){if(i.buffer.length){var e=i.bufferIndex||0;if(i.buffer.head)return i.buffer.head.data.length;if(i.buffer.length-e>0&&i.buffer[e])return i.buffer[e].length}return i.length}c(Uk,"getStateLength")});var G5=b((iJ,GY)=>{var ed=yY(),FY=UY(),Pk=Oi(),kk=kY(),HY=Buffer.from&&Buffer.from!==Uint8Array.from?Buffer.from([0]):new Buffer([0]),V5=c(function(i,e){i._corked?i.once("uncork",e):e()},"onuncork"),Fk=c(function(i,e){i._autoDestroy&&i.destroy(e)},"autoDestroy"),VY=c(function(i,e){return function(u){u?Fk(i,u.message==="premature close"?null:u):e&&!i._ended&&i.end()}},"destroyer"),Hk=c(function(i,e){if(!i||i._writableState&&i._writableState.finished)return e();if(i._writableState)return i.end(e);i.end(),e()},"end"),Vk=c(function(){},"noop"),Gk=c(function(i){return new ed.Readable({objectMode:!0,highWaterMark:16}).wrap(i)},"toStreams2"),Ve=c(function(i,e,u){if(!(this instanceof Ve))return new Ve(i,e,u);ed.Duplex.call(this,u),this._writable=null,this._readable=null,this._readable2=null,this._autoDestroy=!u||u.autoDestroy!==!1,this._forwardDestroy=!u||u.destroy!==!1,this._forwardEnd=!u||u.end!==!1,this._corked=1,this._ondrain=null,this._drained=!1,this._forwarding=!1,this._unwrite=null,this._unread=null,this._ended=!1,this.destroyed=!1,i&&this.setWritable(i),e&&this.setReadable(e)},"Duplexify");Pk(Ve,ed.Duplex);Ve.obj=function(i,e,u){return u||(u={}),u.objectMode=!0,u.highWaterMark=16,new Ve(i,e,u)};Ve.prototype.cork=function(){++this._corked===1&&this.emit("cork")};Ve.prototype.uncork=function(){this._corked&&--this._corked===0&&this.emit("uncork")};Ve.prototype.setWritable=function(i){if(this._unwrite&&this._unwrite(),this.destroyed){i&&i.destroy&&i.destroy();return}if(i===null||i===!1){this.end();return}var e=this,u=FY(i,{writable:!0,readable:!1},VY(this,this._forwardEnd)),r=c(function(){var s=e._ondrain;e._ondrain=null,s&&s()},"ondrain"),a=c(function(){e._writable.removeListener("drain",r),u()},"clear");this._unwrite&&process.nextTick(r),this._writable=i,this._writable.on("drain",r),this._unwrite=a,this.uncork()};Ve.prototype.setReadable=function(i){if(this._unread&&this._unread(),this.destroyed){i&&i.destroy&&i.destroy();return}if(i===null||i===!1){this.push(null),this.resume();return}var e=this,u=FY(i,{writable:!1,readable:!0},VY(this)),r=c(function(){e._forward()},"onreadable"),a=c(function(){e.push(null)},"onend"),s=c(function(){e._readable2.removeListener("readable",r),e._readable2.removeListener("end",a),u()},"clear");this._drained=!0,this._readable=i,this._readable2=i._readableState?i:Gk(i),this._readable2.on("readable",r),this._readable2.on("end",a),this._unread=s,this._forward()};Ve.prototype._read=function(){this._drained=!0,this._forward()};Ve.prototype._forward=function(){if(!(this._forwarding||!this._readable2||!this._drained)){this._forwarding=!0;for(var i;this._drained&&(i=kk(this._readable2))!==null;)this.destroyed||(this._drained=this.push(i));this._forwarding=!1}};Ve.prototype.destroy=function(i,e){if(e||(e=Vk),this.destroyed)return e(null);this.destroyed=!0;var u=this;process.nextTick(function(){u._destroy(i),e(null)})};Ve.prototype._destroy=function(i){if(i){var e=this._ondrain;this._ondrain=null,e?e(i):this.emit("error",i)}this._forwardDestroy&&(this._readable&&this._readable.destroy&&this._readable.destroy(),this._writable&&this._writable.destroy&&this._writable.destroy()),this.emit("close")};Ve.prototype._write=function(i,e,u){if(!this.destroyed){if(this._corked)return V5(this,this._write.bind(this,i,e,u));if(i===HY)return this._finish(u);if(!this._writable)return u();this._writable.write(i)===!1?this._ondrain=u:this.destroyed||u()}};Ve.prototype._finish=function(i){var e=this;this.emit("preend"),V5(this,function(){Hk(e._forwardEnd&&e._writable,function(){e._writableState.prefinished===!1&&(e._writableState.prefinished=!0),e.emit("prefinish"),V5(e,i)})})};Ve.prototype.end=function(i,e,u){return typeof i=="function"?this.end(null,null,i):typeof e=="function"?this.end(i,null,e):(this._ended=!0,i&&this.write(i),!this._writableState.ending&&!this._writableState.destroyed&&this.write(HY),ed.Writable.prototype.end.call(this,u))};GY.exports=Ve});var sd=b(qa=>{"use strict";Object.defineProperty(qa,"__esModule",{value:!0});var ud=p7(),qk=m7(),td=Lu(),qY=V_(),KY=K_(),Kk=require("stream"),WY=RT(),Wk=G5(),jY={timeout:6e4,gzip:!0,forever:!0,pool:{maxSockets:1/0}},jk=!0,Xk=3,ad=class ad extends Error{constructor(e){if(super(),typeof e!="object"){this.message=e||"";return}let u=e;this.code=u.code,this.errors=u.errors,this.response=u.response;try{this.errors=JSON.parse(this.response.body).error.errors}catch{this.errors=u.errors}this.message=ad.createMultiErrorMessage(u,this.errors),Error.captureStackTrace(this)}static createMultiErrorMessage(e,u){let r=new Set;e.message&&r.add(e.message),u&&u.length?u.forEach(({message:s})=>r.add(s)):e.response&&e.response.body?r.add(qk.decode(e.response.body.toString())):e.message||r.add("A failure occurred during this request.");let a=Array.from(r);return a.length>1&&(a=a.map((s,n)=>` ${n+1}. ${s}`),a.unshift("Multiple errors occurred during the request. Please see the `errors` array for complete details.\n"),a.push(` +`)),a.join(` +`)}};c(ad,"ApiError");var Gt=ad;qa.ApiError=Gt;var K5=class K5 extends Error{constructor(e){super();let u=e;this.errors=u.errors,this.name="PartialFailureError",this.response=u.response,this.message=Gt.createMultiErrorMessage(u,this.errors)}};c(K5,"PartialFailureError");var rd=K5;qa.PartialFailureError=rd;var W5=class W5{constructor(){this.ApiError=Gt,this.PartialFailureError=rd}noop(){}handleResp(e,u,r,a){a=a||zu.noop;let s=td(!0,{err:e||null},u&&zu.parseHttpRespMessage(u),r&&zu.parseHttpRespBody(r));!s.err&&u&&typeof s.body=="object"&&(s.resp.body=s.body),s.err&&u&&(s.err.response=u),a(s.err,s.body,s.resp)}parseHttpRespMessage(e){let u={resp:e};return(e.statusCode<200||e.statusCode>299)&&(u.err=new Gt({errors:new Array,code:e.statusCode,message:e.statusMessage,response:e})),u}parseHttpRespBody(e){let u={body:e};if(typeof e=="string")try{u.body=JSON.parse(e)}catch{u.body=e}return u.body&&u.body.error&&(u.err=new Gt(u.body.error)),u}makeWritableStream(e,u,r){r=r||zu.noop;let a=new q5;a.on("progress",d=>e.emit("progress",d)),e.setWritable(a);let s={method:"POST",qs:{uploadType:"multipart"},timeout:0,maxRetries:0},n=u.metadata||{},l=td(!0,s,u.request,{multipart:[{"Content-Type":"application/json",body:JSON.stringify(n)},{"Content-Type":n.contentType||"application/octet-stream",body:a}]});u.makeAuthenticatedRequest(l,{onAuthenticated(d,p){if(d){e.destroy(d);return}WY.teenyRequest.defaults(jY)(p,(f,S,_)=>{zu.handleResp(f,S,_,(O,E)=>{if(O){e.destroy(O);return}e.emit("response",S),r(E)})})}})}shouldRetryRequest(e){if(e){if([408,429,500,502,503,504].indexOf(e.code)!==-1)return!0;if(e.errors)for(let u of e.errors){let r=u.reason;if(r==="rateLimitExceeded"||r==="userRateLimitExceeded"||r&&r.includes("EAI_AGAIN"))return!0}}return!1}makeAuthenticatedRequestFactory(e){let u=td({},e);u.projectId==="{{projectId}}"&&delete u.projectId;let r;if(u.authClient instanceof qY.GoogleAuth)r=u.authClient;else{let n={...u,authClient:u.authClient};r=new qY.GoogleAuth(n)}function a(n,l){let d,p,h=td({},e),f;l||(d=Wk(),h.stream=d);let S=typeof l=="object"?l:void 0,_=typeof l=="function"?l:void 0,O=c((E,A)=>{let g=E,D=E&&E.message.indexOf("Could not load the default credentials")>-1;if(D&&(A=n),!E||D)try{A=zu.decorateRequest(A,p),E=null}catch(I){E=E||I}if(E){d?d.destroy(E):(S&&S.onAuthenticated?S.onAuthenticated:_)(E);return}S&&S.onAuthenticated?S.onAuthenticated(null,A):f=zu.makeRequest(A,h,(I,...W)=>{I&&I.code===401&&g&&(I=g),_(I,...W)})},"onAuthenticated");return Promise.all([e.projectId&&e.projectId!=="{{projectId}}"?new Promise(E=>E(e.projectId)):r.getProjectId(),h.customEndpoint&&h.useAuthWithCustomEndpoint!==!0?new Promise(E=>E(n)):r.authorizeRequest(n)]).then(([E,A])=>{p=E,O(null,A)}).catch(O),d||{abort(){setImmediate(()=>{f&&(f.abort(),f=null)})}}}c(a,"makeAuthenticatedRequest");let s=a;return s.getCredentials=r.getCredentials.bind(r),s.authClient=r,s}makeRequest(e,u,r){var a,s,n,l,d,p,h;let f=jk;if(u.autoRetry!==void 0&&((a=u.retryOptions)===null||a===void 0?void 0:a.autoRetry)!==void 0)throw new Gt("autoRetry is deprecated. Use retryOptions.autoRetry instead.");u.autoRetry!==void 0?f=u.autoRetry:((s=u.retryOptions)===null||s===void 0?void 0:s.autoRetry)!==void 0&&(f=u.retryOptions.autoRetry);let S=Xk;if(u.maxRetries&&(!((n=u.retryOptions)===null||n===void 0)&&n.maxRetries))throw new Gt("maxRetries is deprecated. Use retryOptions.maxRetries instead.");u.maxRetries?S=u.maxRetries:!((l=u.retryOptions)===null||l===void 0)&&l.maxRetries&&(S=u.retryOptions.maxRetries);let _={request:WY.teenyRequest.defaults(jY),retries:f!==!1?S:0,noResponseRetries:f!==!1?S:0,shouldRetryFn(g){var D,I;let W=zu.parseHttpRespMessage(g).err;return!((D=u.retryOptions)===null||D===void 0)&&D.retryableErrorFn?W&&((I=u.retryOptions)===null||I===void 0?void 0:I.retryableErrorFn(W)):W&&zu.shouldRetryRequest(W)},maxRetryDelay:(d=u.retryOptions)===null||d===void 0?void 0:d.maxRetryDelay,retryDelayMultiplier:(p=u.retryOptions)===null||p===void 0?void 0:p.retryDelayMultiplier,totalTimeout:(h=u.retryOptions)===null||h===void 0?void 0:h.totalTimeout};if(typeof e.maxRetries=="number"&&(_.retries=e.maxRetries),!u.stream)return KY(e,_,(g,D,I)=>{zu.handleResp(g,D,I,r)});let O=u.stream,E;return(e.method||"GET").toUpperCase()==="GET"?(E=KY(e,_),O.setReadable(E)):(E=_.request(e),O.setWritable(E)),E.on("error",O.destroy.bind(O)).on("response",O.emit.bind(O,"response")).on("complete",O.emit.bind(O,"complete")),O.abort=E.abort,O}decorateRequest(e,u){return delete e.autoPaginate,delete e.autoPaginateVal,delete e.objectMode,e.qs!==null&&typeof e.qs=="object"&&(delete e.qs.autoPaginate,delete e.qs.autoPaginateVal,e.qs=ud.replaceProjectIdToken(e.qs,u)),Array.isArray(e.multipart)&&(e.multipart=e.multipart.map(r=>ud.replaceProjectIdToken(r,u))),e.json!==null&&typeof e.json=="object"&&(delete e.json.autoPaginate,delete e.json.autoPaginateVal,e.json=ud.replaceProjectIdToken(e.json,u)),e.uri=ud.replaceProjectIdToken(e.uri,u),e}isCustomType(e,u){function r(d){return d.constructor&&d.constructor.name.toLowerCase()}c(r,"getConstructorName");let a=u.split("/"),s=a[0]&&a[0].toLowerCase(),n=a[1]&&a[1].toLowerCase();if(n&&r(e)!==n)return!1;let l=e;for(;;){if(r(l)===s)return!0;if(l=l.parent,!l)return!1}}getUserAgentFromPackageJson(e){return e.name.replace("@google-cloud","gcloud-node").replace("/","-")+"/"+e.version}maybeOptionsOrCallback(e,u){return typeof e=="function"?[{},e]:[e,u]}};c(W5,"Util");var id=W5;qa.Util=id;var j5=class j5 extends Kk.Transform{constructor(){super(...arguments),this.bytesRead=0}_transform(e,u,r){this.bytesRead+=e.length,this.emit("progress",{bytesWritten:this.bytesRead,contentLength:"*"}),this.push(e),r()}};c(j5,"ProgressStream");var q5=j5,zu=new id;qa.util=zu});var Q5=b(X5=>{"use strict";Object.defineProperty(X5,"__esModule",{value:!0});var Qk=ur(),Jk=tr(),zk=require("events"),t1=Lu(),r1=sd(),br=class br extends zk.EventEmitter{constructor(e){super(),this.metadata={},this.baseUrl=e.baseUrl,this.parent=e.parent,this.id=e.id,this.createMethod=e.createMethod,this.methods=e.methods||{},this.interceptors=[],this.pollIntervalMs=e.pollIntervalMs,this.projectId=e.projectId,e.methods&&Object.getOwnPropertyNames(br.prototype).filter(u=>!/^request/.test(u)&&!/^getRequestInterceptors/.test(u)&&this[u]===br.prototype[u]&&!e.methods[u]).forEach(u=>{this[u]=void 0})}create(e,u){let r=this,a=[this.id];typeof e=="function"&&(u=e),typeof e=="object"&&a.push(e);function s(...n){let[l,d]=n;l||(r.metadata=d.metadata,n[1]=r),u(...n)}c(s,"onCreate"),a.push(s),this.createMethod.apply(null,a)}delete(e,u){let[r,a]=r1.util.maybeOptionsOrCallback(e,u),s=r.ignoreNotFound;delete r.ignoreNotFound;let n=typeof this.methods.delete=="object"&&this.methods.delete||{},l=t1(!0,{method:"DELETE",uri:""},n.reqOpts,{qs:r});br.prototype.request.call(this,l,(d,...p)=>{d&&d.code===404&&s&&(d=null),a(d,...p)})}exists(e,u){let[r,a]=r1.util.maybeOptionsOrCallback(e,u);this.get(r,s=>{if(s){s.code===404?a(null,!1):a(s);return}a(null,!0)})}get(e,u){let r=this,[a,s]=r1.util.maybeOptionsOrCallback(e,u),n=Object.assign({},a),l=n.autoCreate&&typeof this.create=="function";delete n.autoCreate;function d(p,h,f){if(p){if(p.code===409){r.get(n,s);return}s(p,null,f);return}s(null,h,f)}c(d,"onCreate"),this.getMetadata(n,(p,h)=>{if(p){if(p.code===404&&l){let f=[];Object.keys(n).length>0&&f.push(n),f.push(d),r.create(...f);return}s(p,null,h);return}s(null,r,h)})}getMetadata(e,u){let[r,a]=r1.util.maybeOptionsOrCallback(e,u),s=typeof this.methods.getMetadata=="object"&&this.methods.getMetadata||{},n=t1(!0,{uri:""},s.reqOpts,{qs:r});br.prototype.request.call(this,n,(l,d,p)=>{this.metadata=d,a(l,this.metadata,p)})}getRequestInterceptors(){let e=this.interceptors.filter(u=>typeof u.request=="function").map(u=>u.request);return this.parent.getRequestInterceptors().concat(e)}setMetadata(e,u,r){let[a,s]=r1.util.maybeOptionsOrCallback(u,r),n=typeof this.methods.setMetadata=="object"&&this.methods.setMetadata||{},l=t1(!0,{},{method:"PATCH",uri:""},n.reqOpts,{json:e,qs:a});br.prototype.request.call(this,l,(d,p,h)=>{this.metadata=p,s(d,this.metadata,h)})}request_(e,u){e=t1(!0,{},e),this.projectId&&(e.projectId=this.projectId);let r=e.uri.indexOf("http")===0,a=[this.baseUrl,this.id||"",e.uri];r&&a.splice(0,a.indexOf(e.uri)),e.uri=a.filter(l=>l.trim()).map(l=>{let d=/^\/*|\/*$/g;return l.replace(d,"")}).join("/");let s=Jk(e.interceptors_),n=[].slice.call(this.interceptors);if(e.interceptors_=s.concat(n),e.shouldReturnStream)return this.parent.requestStream(e);this.parent.request(e,u)}request(e,u){this.request_(e,u)}requestStream(e){let u=t1(!0,e,{shouldReturnStream:!0});return this.request_(u)}};c(br,"ServiceObject");var nd=br;X5.ServiceObject=nd;Qk.promisifyAll(nd,{exclude:["getRequestInterceptors"]})});var XY=b(z5=>{"use strict";Object.defineProperty(z5,"__esModule",{value:!0});var $k=Q5(),Zk=require("util"),$5=class $5 extends $k.ServiceObject{constructor(e){let u={exists:!0,get:!0,getMetadata:{reqOpts:{name:e.id}}};e=Object.assign({baseUrl:""},e),e.methods=e.methods||u,super(e),this.completeListeners=0,this.hasActiveListeners=!1,this.listenForEvents_()}promise(){return new Promise((e,u)=>{this.on("error",u).on("complete",r=>{e([r])})})}listenForEvents_(){this.on("newListener",e=>{e==="complete"&&(this.completeListeners++,this.hasActiveListeners||(this.hasActiveListeners=!0,this.startPolling_()))}),this.on("removeListener",e=>{e==="complete"&&--this.completeListeners===0&&(this.hasActiveListeners=!1)})}poll_(e){this.getMetadata((u,r)=>{if(u||r.error){e(u||r.error);return}if(!r.done){e(null);return}e(null,r)})}async startPolling_(){if(this.hasActiveListeners)try{let e=await Zk.promisify(this.poll_.bind(this))();if(!e){setTimeout(this.startPolling_.bind(this),this.pollIntervalMs||500);return}this.emit("complete",e)}catch(e){this.emit("error",e)}}};c($5,"Operation");var J5=$5;z5.Operation=J5});var $Y=b(e4=>{"use strict";Object.defineProperty(e4,"__esModule",{value:!0});var QY=tr(),od=Lu(),JY=sd(),zY="{{projectId}}",i1=class i1{constructor(e,u={}){this.baseUrl=e.baseUrl,this.apiEndpoint=e.apiEndpoint,this.timeout=u.timeout,this.globalInterceptors=QY(u.interceptors_),this.interceptors=[],this.packageJson=e.packageJson,this.projectId=u.projectId||zY,this.projectIdRequired=e.projectIdRequired!==!1,this.providedUserAgent=u.userAgent;let r=od({},e,{projectIdRequired:this.projectIdRequired,projectId:this.projectId,authClient:u.authClient,credentials:u.credentials,keyFile:u.keyFilename,email:u.email,token:u.token});this.makeAuthenticatedRequest=JY.util.makeAuthenticatedRequestFactory(r),this.authClient=this.makeAuthenticatedRequest.authClient,this.getCredentials=this.makeAuthenticatedRequest.getCredentials,!!process.env.FUNCTION_NAME&&this.interceptors.push({request(s){return s.forever=!1,s}})}getRequestInterceptors(){return[].slice.call(this.globalInterceptors).concat(this.interceptors).filter(e=>typeof e.request=="function").map(e=>e.request)}getProjectId(e){if(!e)return this.getProjectIdAsync();this.getProjectIdAsync().then(u=>e(null,u),e)}async getProjectIdAsync(){let e=await this.authClient.getProjectId();return this.projectId===zY&&e&&(this.projectId=e),this.projectId}request_(e,u){e=od(!0,{},e,{timeout:this.timeout});let r=e.uri.indexOf("http")===0,a=[this.baseUrl];this.projectIdRequired&&(e.projectId?(a.push("projects"),a.push(e.projectId)):(a.push("projects"),a.push(this.projectId))),a.push(e.uri),r&&a.splice(0,a.indexOf(e.uri)),e.uri=a.map(d=>{let p=/^\/*|\/*$/g;return d.replace(p,"")}).join("/").replace(/\/:/g,":");let s=this.getRequestInterceptors();QY(e.interceptors_).forEach(d=>{typeof d.request=="function"&&s.push(d.request)}),s.forEach(d=>{e=d(e)}),delete e.interceptors_;let n=this.packageJson,l=JY.util.getUserAgentFromPackageJson(n);if(this.providedUserAgent&&(l=`${this.providedUserAgent} ${l}`),e.headers=od({},e.headers,{"User-Agent":l,"x-goog-api-client":`gl-node/${process.versions.node} gccl/${n.version}`}),e.shouldReturnStream)return this.makeAuthenticatedRequest(e);this.makeAuthenticatedRequest(e,u)}request(e,u){i1.prototype.request_.call(this,e,u)}requestStream(e){let u=od(!0,e,{shouldReturnStream:!0});return i1.prototype.request_.call(this,u)}};c(i1,"Service");var Z5=i1;e4.Service=Z5});var _i=b(mi=>{"use strict";Object.defineProperty(mi,"__esModule",{value:!0});var eF=XY();mi.Operation=eF.Operation;var uF=$Y();mi.Service=uF.Service;var tF=Q5();mi.ServiceObject=tF.ServiceObject;var ZY=sd();mi.ApiError=ZY.ApiError;mi.util=ZY.util});var eA=b(ld=>{"use strict";Object.defineProperty(ld,"__esModule",{value:!0});ld.ResourceStream=void 0;var rF=require("stream"),t4=class t4 extends rF.Transform{constructor(e,u){let r=Object.assign({objectMode:!0},e.streamOptions);super(r),this._ended=!1,this._maxApiCalls=e.maxApiCalls===-1?1/0:e.maxApiCalls,this._nextQuery=e.query,this._reading=!1,this._requestFn=u,this._requestsMade=0,this._resultsToSend=e.maxResults===-1?1/0:e.maxResults}end(...e){return this._ended=!0,super.end(...e)}_read(){if(!this._reading){this._reading=!0;try{this._requestFn(this._nextQuery,(e,u,r)=>{if(e){this.destroy(e);return}this._nextQuery=r,this._resultsToSend!==1/0&&(u=u.splice(0,this._resultsToSend),this._resultsToSend-=u.length);let a=!0;for(let l of u){if(this._ended)break;a=this.push(l)}let s=!this._nextQuery||this._resultsToSend<1,n=++this._requestsMade>=this._maxApiCalls;(s||n)&&this.end(),a&&!this._ended&&setImmediate(()=>this._read()),this._reading=!1})}catch(e){this.destroy(e)}}}};c(t4,"ResourceStream");var u4=t4;ld.ResourceStream=u4});var a1=b(xr=>{"use strict";Object.defineProperty(xr,"__esModule",{value:!0});xr.ResourceStream=xr.paginator=xr.Paginator=void 0;var iF=tr(),uA=Lu(),tA=eA();Object.defineProperty(xr,"ResourceStream",{enumerable:!0,get:function(){return tA.ResourceStream}});var r4=class r4{extend(e,u){u=iF(u),u.forEach(r=>{let a=e.prototype[r];e.prototype[r+"_"]=a,e.prototype[r]=function(...s){let n=Ka.parseArguments_(s);return Ka.run_(n,a.bind(this))}})}streamify(e){return function(...u){let r=Ka.parseArguments_(u),a=this[e+"_"]||this[e];return Ka.runAsStream_(r,a.bind(this))}}parseArguments_(e){let u,r=!0,a=-1,s=-1,n,l=e[0],d=e[e.length-1];typeof l=="function"?n=l:u=l,typeof d=="function"&&(n=d),typeof u=="object"&&(u=uA(!0,{},u),u.maxResults&&typeof u.maxResults=="number"?s=u.maxResults:typeof u.pageSize=="number"&&(s=u.pageSize),u.maxApiCalls&&typeof u.maxApiCalls=="number"&&(a=u.maxApiCalls,delete u.maxApiCalls),(s!==-1||u.autoPaginate===!1)&&(r=!1));let p={query:u||{},autoPaginate:r,maxApiCalls:a,maxResults:s,callback:n};return p.streamOptions=uA(!0,{},p.query),delete p.streamOptions.autoPaginate,delete p.streamOptions.maxResults,delete p.streamOptions.pageSize,p}run_(e,u){let r=e.query,a=e.callback;if(!e.autoPaginate)return u(r,a);let s=new Array,n=new Promise((l,d)=>{Ka.runAsStream_(e,u).on("error",d).on("data",p=>s.push(p)).on("end",()=>l(s))});if(!a)return n.then(l=>[l]);n.then(l=>a(null,l),l=>a(l))}runAsStream_(e,u){return new tA.ResourceStream(e,u)}};c(r4,"Paginator");var cd=r4;xr.Paginator=cd;var Ka=new cd;xr.paginator=Ka});var pd=b((rA,dd)=>{(function(i){"use strict";var e,u=20,r=1,a=1e6,s=1e6,n=-7,l=21,d=!1,p="[big.js] ",h=p+"Invalid ",f=h+"decimal places",S=h+"rounding mode",_=p+"Division by zero",O={},E=void 0,A=/^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i;function g(){function Y(N){var w=this;if(!(w instanceof Y))return N===E?g():new Y(N);if(N instanceof Y)w.s=N.s,w.e=N.e,w.c=N.c.slice();else{if(typeof N!="string"){if(Y.strict===!0&&typeof N!="bigint")throw TypeError(h+"value");N=N===0&&1/N<0?"-0":String(N)}D(w,N)}w.constructor=Y}return c(Y,"Big"),Y.prototype=O,Y.DP=u,Y.RM=r,Y.NE=n,Y.PE=l,Y.strict=d,Y.roundDown=0,Y.roundHalfUp=1,Y.roundHalfEven=2,Y.roundUp=3,Y}c(g,"_Big_");function D(Y,N){var w,G,U;if(!A.test(N))throw Error(h+"number");for(Y.s=N.charAt(0)=="-"?(N=N.slice(1),-1):1,(w=N.indexOf("."))>-1&&(N=N.replace(".","")),(G=N.search(/e/i))>0?(w<0&&(w=G),w+=+N.slice(G+1),N=N.substring(0,G)):w<0&&(w=N.length),U=N.length,G=0;G0&&N.charAt(--U)=="0";);for(Y.e=w-G-1,Y.c=[],w=0;G<=U;)Y.c[w++]=+N.charAt(G++)}return Y}c(D,"parse");function I(Y,N,w,G){var U=Y.c;if(w===E&&(w=Y.constructor.RM),w!==0&&w!==1&&w!==2&&w!==3)throw Error(S);if(N<1)G=w===3&&(G||!!U[0])||N===0&&(w===1&&U[0]>=5||w===2&&(U[0]>5||U[0]===5&&(G||U[1]!==E))),U.length=1,G?(Y.e=Y.e-N+1,U[0]=1):U[0]=Y.e=0;else if(N=5||w===2&&(U[N]>5||U[N]===5&&(G||U[N+1]!==E||U[N-1]&1))||w===3&&(G||!!U[0]),U.length=N,G){for(;++U[--N]>9;)if(U[N]=0,N===0){++Y.e,U.unshift(1);break}}for(N=U.length;!U[--N];)U.pop()}return Y}c(I,"round");function W(Y,N,w){var G=Y.e,U=Y.c.join(""),z=U.length;if(N)U=U.charAt(0)+(z>1?"."+U.slice(1):"")+(G<0?"e":"e+")+G;else if(G<0){for(;++G;)U="0"+U;U="0."+U}else if(G>0)if(++G>z)for(G-=z;G--;)U+="0";else G1&&(U=U.charAt(0)+"."+U.slice(1));return Y.s<0&&w?"-"+U:U}c(W,"stringify"),O.abs=function(){var Y=new this.constructor(this);return Y.s=1,Y},O.cmp=function(Y){var N,w=this,G=w.c,U=(Y=new w.constructor(Y)).c,z=w.s,e0=Y.s,Z=w.e,l0=Y.e;if(!G[0]||!U[0])return G[0]?z:U[0]?-e0:0;if(z!=e0)return z;if(N=z<0,Z!=l0)return Z>l0^N?1:-1;for(e0=(Z=G.length)<(l0=U.length)?Z:l0,z=-1;++zU[z]^N?1:-1;return Z==l0?0:Z>l0^N?1:-1},O.div=function(Y){var N=this,w=N.constructor,G=N.c,U=(Y=new w(Y)).c,z=N.s==Y.s?1:-1,e0=w.DP;if(e0!==~~e0||e0<0||e0>a)throw Error(f);if(!U[0])throw Error(_);if(!G[0])return Y.s=z,Y.c=[Y.e=0],Y;var Z,l0,n0,M0,S0,c0=U.slice(),Ee=Z=U.length,ve=G.length,_0=G.slice(0,Z),R0=_0.length,j0=Y,u0=j0.c=[],se=0,re=e0+(j0.e=N.e-Y.e)+1;for(j0.s=z,z=re<0?0:re,c0.unshift(0);R0++R0?1:-1;else for(S0=-1,M0=0;++S0_0[S0]?1:-1;break}if(M0<0){for(l0=R0==Z?U:c0;R0;){if(_0[--R0]re&&I(j0,re,w.RM,_0[0]!==E),j0},O.eq=function(Y){return this.cmp(Y)===0},O.gt=function(Y){return this.cmp(Y)>0},O.gte=function(Y){return this.cmp(Y)>-1},O.lt=function(Y){return this.cmp(Y)<0},O.lte=function(Y){return this.cmp(Y)<1},O.minus=O.sub=function(Y){var N,w,G,U,z=this,e0=z.constructor,Z=z.s,l0=(Y=new e0(Y)).s;if(Z!=l0)return Y.s=-l0,z.plus(Y);var n0=z.c.slice(),M0=z.e,S0=Y.c,c0=Y.e;if(!n0[0]||!S0[0])return S0[0]?Y.s=-l0:n0[0]?Y=new e0(z):Y.s=1,Y;if(Z=M0-c0){for((U=Z<0)?(Z=-Z,G=n0):(c0=M0,G=S0),G.reverse(),l0=Z;l0--;)G.push(0);G.reverse()}else for(w=((U=n0.length0)for(;l0--;)n0[N++]=0;for(l0=N;w>Z;){if(n0[--w]0?(l0=e0,G=n0):(N=-N,G=Z),G.reverse();N--;)G.push(0);G.reverse()}for(Z.length-n0.length<0&&(G=n0,n0=Z,Z=G),N=n0.length,w=0;N;Z[N]%=10)w=(Z[--N]=Z[N]+n0[N]+w)/10|0;for(w&&(Z.unshift(w),++l0),N=Z.length;Z[--N]===0;)Z.pop();return Y.c=Z,Y.e=l0,Y},O.pow=function(Y){var N=this,w=new N.constructor("1"),G=w,U=Y<0;if(Y!==~~Y||Y<-s||Y>s)throw Error(h+"exponent");for(U&&(Y=-Y);Y&1&&(G=G.times(N)),Y>>=1,!!Y;)N=N.times(N);return U?w.div(G):G},O.prec=function(Y,N){if(Y!==~~Y||Y<1||Y>a)throw Error(h+"precision");return I(new this.constructor(this),Y,N)},O.round=function(Y,N){if(Y===E)Y=0;else if(Y!==~~Y||Y<-a||Y>a)throw Error(f);return I(new this.constructor(this),Y+this.e+1,N)},O.sqrt=function(){var Y,N,w,G=this,U=G.constructor,z=G.s,e0=G.e,Z=new U("0.5");if(!G.c[0])return new U(G);if(z<0)throw Error(p+"No square root");z=Math.sqrt(G+""),z===0||z===1/0?(N=G.c.join(""),N.length+e0&1||(N+="0"),z=Math.sqrt(N),e0=((e0+1)/2|0)-(e0<0||e0&1),Y=new U((z==1/0?"5e":(z=z.toExponential()).slice(0,z.indexOf("e")+1))+e0)):Y=new U(z+""),e0=Y.e+(U.DP+=4);do w=Y,Y=Z.times(w.plus(G.div(w)));while(w.c.slice(0,e0).join("")!==Y.c.slice(0,e0).join(""));return I(Y,(U.DP-=4)+Y.e+1,U.RM)},O.times=O.mul=function(Y){var N,w=this,G=w.constructor,U=w.c,z=(Y=new G(Y)).c,e0=U.length,Z=z.length,l0=w.e,n0=Y.e;if(Y.s=w.s==Y.s?1:-1,!U[0]||!z[0])return Y.c=[Y.e=0],Y;for(Y.e=l0+n0,e0l0;)Z=N[n0]+z[l0]*U[n0-l0-1]+Z,N[n0--]=Z%10,Z=Z/10|0;N[n0]=Z}for(Z?++Y.e:N.shift(),l0=N.length;!N[--l0];)N.pop();return Y.c=N,Y},O.toExponential=function(Y,N){var w=this,G=w.c[0];if(Y!==E){if(Y!==~~Y||Y<0||Y>a)throw Error(f);for(w=I(new w.constructor(w),++Y,N);w.c.lengtha)throw Error(f);for(w=I(new w.constructor(w),Y+w.e+1,N),Y=Y+w.e+1;w.c.length=N.PE,!!Y.c[0])},O.toNumber=function(){var Y=Number(W(this,!0,!0));if(this.constructor.strict===!0&&!this.eq(Y.toString()))throw Error(p+"Imprecise conversion");return Y},O.toPrecision=function(Y,N){var w=this,G=w.constructor,U=w.c[0];if(Y!==E){if(Y!==~~Y||Y<1||Y>a)throw Error(h+"precision");for(w=I(new G(w),Y,N);w.c.length=G.PE,!!U)},O.valueOf=function(){var Y=this,N=Y.constructor;if(N.strict===!0)throw Error(p+"valueOf disallowed");return W(Y,Y.e<=N.NE||Y.e>=N.PE,!0)},e=g(),e.default=e.Big=e,typeof define=="function"&&define.amd?define(function(){return e}):typeof dd<"u"&&dd.exports?dd.exports=e:i.Big=e})(rA)});var i4=b((MJ,oA)=>{"use strict";var iA=Object.prototype,aA=iA.hasOwnProperty,ru=iA.toString,sA;typeof Symbol=="function"&&(sA=Symbol.prototype.valueOf);var nA;typeof BigInt=="function"&&(nA=BigInt.prototype.valueOf);var Ge=c(function(i){return i!==i},"isActualNaN"),aF={boolean:1,number:1,string:1,undefined:1},sF=/^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$/,nF=/^[A-Fa-f0-9]+$/,a0={};a0.a=a0.type=function(i,e){return typeof i===e};a0.defined=function(i){return typeof i<"u"};a0.empty=function(i){var e=ru.call(i),u;if(e==="[object Array]"||e==="[object Arguments]"||e==="[object String]")return i.length===0;if(e==="[object Object]"){for(u in i)if(aA.call(i,u))return!1;return!0}return!i};a0.equal=c(function(e,u){if(e===u)return!0;var r=ru.call(e),a;if(r!==ru.call(u))return!1;if(r==="[object Object]"){for(a in e)if(!a0.equal(e[a],u[a])||!(a in u))return!1;for(a in u)if(!a0.equal(e[a],u[a])||!(a in e))return!1;return!0}if(r==="[object Array]"){if(a=e.length,a!==u.length)return!1;for(;a--;)if(!a0.equal(e[a],u[a]))return!1;return!0}return r==="[object Function]"?e.prototype===u.prototype:r==="[object Date]"?e.getTime()===u.getTime():!1},"equal");a0.hosted=function(i,e){var u=typeof e[i];return u==="object"?!!e[i]:!aF[u]};a0.instance=a0.instanceof=function(i,e){return i instanceof e};a0.nil=a0.null=function(i){return i===null};a0.undef=a0.undefined=function(i){return typeof i>"u"};a0.args=a0.arguments=function(i){var e=ru.call(i)==="[object Arguments]",u=!a0.array(i)&&a0.arraylike(i)&&a0.object(i)&&a0.fn(i.callee);return e||u};a0.array=Array.isArray||function(i){return ru.call(i)==="[object Array]"};a0.args.empty=function(i){return a0.args(i)&&i.length===0};a0.array.empty=function(i){return a0.array(i)&&i.length===0};a0.arraylike=function(i){return!!i&&!a0.bool(i)&&aA.call(i,"length")&&isFinite(i.length)&&a0.number(i.length)&&i.length>=0};a0.bool=a0.boolean=function(i){return ru.call(i)==="[object Boolean]"};a0.false=function(i){return a0.bool(i)&&!Number(i)};a0.true=function(i){return a0.bool(i)&&!!Number(i)};a0.date=function(i){return ru.call(i)==="[object Date]"};a0.date.valid=function(i){return a0.date(i)&&!isNaN(Number(i))};a0.element=function(i){return i!==void 0&&typeof HTMLElement<"u"&&i instanceof HTMLElement&&i.nodeType===1};a0.error=function(i){return ru.call(i)==="[object Error]"};a0.fn=a0.function=function(i){var e=typeof window<"u"&&i===window.alert;if(e)return!0;var u=ru.call(i);return u==="[object Function]"||u==="[object GeneratorFunction]"||u==="[object AsyncFunction]"};a0.number=function(i){return ru.call(i)==="[object Number]"};a0.infinite=function(i){return i===1/0||i===-1/0};a0.decimal=function(i){return a0.number(i)&&!Ge(i)&&!a0.infinite(i)&&i%1!==0};a0.divisibleBy=function(i,e){var u=a0.infinite(i),r=a0.infinite(e),a=a0.number(i)&&!Ge(i)&&a0.number(e)&&!Ge(e)&&e!==0;return u||r||a&&i%e===0};a0.integer=a0.int=function(i){return a0.number(i)&&!Ge(i)&&i%1===0};a0.maximum=function(i,e){if(Ge(i))throw new TypeError("NaN is not a valid value");if(!a0.arraylike(e))throw new TypeError("second argument must be array-like");for(var u=e.length;--u>=0;)if(i=0;)if(i>e[u])return!1;return!0};a0.nan=function(i){return!a0.number(i)||i!==i};a0.even=function(i){return a0.infinite(i)||a0.number(i)&&i===i&&i%2===0};a0.odd=function(i){return a0.infinite(i)||a0.number(i)&&i===i&&i%2!==0};a0.ge=function(i,e){if(Ge(i)||Ge(e))throw new TypeError("NaN is not a valid value");return!a0.infinite(i)&&!a0.infinite(e)&&i>=e};a0.gt=function(i,e){if(Ge(i)||Ge(e))throw new TypeError("NaN is not a valid value");return!a0.infinite(i)&&!a0.infinite(e)&&i>e};a0.le=function(i,e){if(Ge(i)||Ge(e))throw new TypeError("NaN is not a valid value");return!a0.infinite(i)&&!a0.infinite(e)&&i<=e};a0.lt=function(i,e){if(Ge(i)||Ge(e))throw new TypeError("NaN is not a valid value");return!a0.infinite(i)&&!a0.infinite(e)&&i=e&&i<=u};a0.object=function(i){return ru.call(i)==="[object Object]"};a0.primitive=c(function(e){return e?!(typeof e=="object"||a0.object(e)||a0.fn(e)||a0.array(e)):!0},"isPrimitive");a0.hash=function(i){return a0.object(i)&&i.constructor===Object&&!i.nodeType&&!i.setInterval};a0.regexp=function(i){return ru.call(i)==="[object RegExp]"};a0.string=function(i){return ru.call(i)==="[object String]"};a0.base64=function(i){return a0.string(i)&&(!i.length||sF.test(i))};a0.hex=function(i){return a0.string(i)&&(!i.length||nF.test(i))};a0.symbol=function(i){return typeof Symbol=="function"&&ru.call(i)==="[object Symbol]"&&typeof sA.call(i)=="symbol"};a0.bigint=function(i){return typeof BigInt=="function"&&ru.call(i)==="[object BigInt]"&&typeof nA.call(i)=="bigint"};oA.exports=a0});var cA=b((_J,lA)=>{"use strict";lA.exports=(i,e)=>(e=e||(()=>{}),i.then(u=>new Promise(r=>{r(e())}).then(()=>u),u=>new Promise(r=>{r(e())}).then(()=>{throw u})))});var pA=b((TJ,fd)=>{"use strict";var oF=cA(),a4=class a4 extends Error{constructor(e){super(e),this.name="TimeoutError"}};c(a4,"TimeoutError");var hd=a4,dA=c((i,e,u)=>new Promise((r,a)=>{if(typeof e!="number"||e<0)throw new TypeError("Expected `milliseconds` to be a positive number");if(e===1/0){r(i);return}let s=setTimeout(()=>{if(typeof u=="function"){try{r(u())}catch(d){a(d)}return}let n=typeof u=="string"?u:`Promise timed out after ${e} milliseconds`,l=u instanceof Error?u:new hd(n);typeof i.cancel=="function"&&i.cancel(),a(l)},e);oF(i.then(r,a),()=>{clearTimeout(s)})}),"pTimeout");fd.exports=dA;fd.exports.default=dA;fd.exports.TimeoutError=hd});var EA=b((AJ,Wa)=>{"use strict";var hA=pA(),lF=Symbol.asyncIterator||"@@asyncIterator",fA=c(i=>{let e=i.on||i.addListener||i.addEventListener,u=i.off||i.removeListener||i.removeEventListener;if(!e||!u)throw new TypeError("Emitter is not compatible");return{addListener:e.bind(i),removeListener:u.bind(i)}},"normalizeEmitter"),SA=c(i=>Array.isArray(i)?i:[i],"toArray"),OA=c((i,e,u)=>{let r,a=new Promise((s,n)=>{if(u={rejectionEvents:["error"],multiArgs:!1,resolveImmediately:!1,...u},!(u.count>=0&&(u.count===1/0||Number.isInteger(u.count))))throw new TypeError("The `count` option should be at least 0 or more");let l=SA(e),d=[],{addListener:p,removeListener:h}=fA(i),f=c((..._)=>{let O=u.multiArgs?_:_[0];u.filter&&!u.filter(O)||(d.push(O),u.count===d.length&&(r(),s(d)))},"onItem"),S=c(_=>{r(),n(_)},"rejectHandler");r=c(()=>{for(let _ of l)h(_,f);for(let _ of u.rejectionEvents)h(_,S)},"cancel");for(let _ of l)p(_,f);for(let _ of u.rejectionEvents)p(_,S);u.resolveImmediately&&s(d)});if(a.cancel=r,typeof u.timeout=="number"){let s=hA(a,u.timeout);return s.cancel=r,s}return a},"multiple"),LA=c((i,e,u)=>{typeof u=="function"&&(u={filter:u}),u={...u,count:1,resolveImmediately:!1};let r=OA(i,e,u),a=r.then(s=>s[0]);return a.cancel=r.cancel,a},"pEvent");Wa.exports=LA;Wa.exports.default=LA;Wa.exports.multiple=OA;Wa.exports.iterator=(i,e,u)=>{typeof u=="function"&&(u={filter:u});let r=SA(e);u={rejectionEvents:["error"],resolutionEvents:[],limit:1/0,multiArgs:!1,...u};let{limit:a}=u;if(!(a>=0&&(a===1/0||Number.isInteger(a))))throw new TypeError("The `limit` option should be a non-negative integer or Infinity");if(a===0)return{[Symbol.asyncIterator](){return this},async next(){return{done:!0,value:void 0}}};let{addListener:n,removeListener:l}=fA(i),d=!1,p,h=!1,f=[],S=[],_=0,O=!1,E=c((...I)=>{_++,O=_===a;let W=u.multiArgs?I:I[0];if(f.length>0){let{resolve:Y}=f.shift();Y({done:!1,value:W}),O&&A();return}S.push(W),O&&A()},"valueHandler"),A=c(()=>{d=!0;for(let I of r)l(I,E);for(let I of u.rejectionEvents)l(I,g);for(let I of u.resolutionEvents)l(I,D);for(;f.length>0;){let{resolve:I}=f.shift();I({done:!0,value:void 0})}},"cancel"),g=c((...I)=>{if(p=u.multiArgs?I:I[0],f.length>0){let{reject:W}=f.shift();W(p)}else h=!0;A()},"rejectHandler"),D=c((...I)=>{let W=u.multiArgs?I:I[0];if(!(u.filter&&!u.filter(W))){if(f.length>0){let{resolve:Y}=f.shift();Y({done:!0,value:W})}else S.push(W);A()}},"resolveHandler");for(let I of r)n(I,E);for(let I of u.rejectionEvents)n(I,g);for(let I of u.resolutionEvents)n(I,D);return{[lF](){return this},async next(){if(S.length>0){let I=S.shift();return{done:d&&S.length===0&&!O,value:I}}if(h)throw h=!1,p;return d?{done:!0,value:void 0}:new Promise((I,W)=>f.push({resolve:I,reject:W}))},async return(I){return A(),{done:d,value:I}}}};Wa.exports.TimeoutError=hA.TimeoutError});var Od=b(Sd=>{"use strict";Object.defineProperty(Sd,"__esModule",{value:!0});Sd.Table=void 0;var s1=_i(),MA=a1(),cF=ur(),n1=tr(),dF=pd(),$u=Lu(),pF=EA(),hF=require("fs"),ja=i4(),s4=require("path"),fF=o5(),BA=(wc(),y3(Dc)),SF=Ld(),OF=G5(),vr={avro:"AVRO",csv:"CSV",json:"NEWLINE_DELIMITED_JSON",orc:"ORC",parquet:"PARQUET"},Zu=class Zu extends s1.ServiceObject{constructor(e,u,r){let a={create:!0,delete:!0,exists:!0,get:!0,getMetadata:!0};super({parent:e,baseUrl:"/tables",id:u,createMethod:e.createTable.bind(e),methods:a}),r&&r.location&&(this.location=r.location),this.bigQuery=e.bigQuery,this.dataset=e,this.interceptors.push({request:s=>(s.method==="PATCH"&&s.json.etag&&(s.headers=s.headers||{},s.headers["If-Match"]=s.json.etag),s)}),this.createReadStream=MA.paginator.streamify("getRows")}static createSchemaFromString_(e){return e.split(/\s*,\s*/).reduce((u,r)=>(u.fields.push({name:r.split(":")[0].trim(),type:(r.split(":")[1]||"STRING").toUpperCase().trim()}),u),{fields:[]})}static encodeValue_(e){if(typeof e>"u"||e===null)return null;if(e instanceof Buffer)return e.toString("base64");if(e instanceof dF.default)return e.toFixed();let u=["BigQueryDate","BigQueryDatetime","BigQueryInt","BigQueryTime","BigQueryTimestamp","Geography"],r=e.constructor.name;return u.indexOf(r)>-1?e.value:ja.date(e)?e.toJSON():ja.array(e)?e.map(Zu.encodeValue_):typeof e=="object"?Object.keys(e).reduce((s,n)=>(s[n]=Zu.encodeValue_(e[n]),s),{}):e}static formatMetadata_(e){let u=$u(!0,{},e);return e.name&&(u.friendlyName=e.name,delete u.name),ja.string(e.schema)&&(u.schema=Zu.createSchemaFromString_(e.schema)),ja.array(e.schema)&&(u.schema={fields:e.schema}),u.schema&&u.schema.fields&&(u.schema.fields=u.schema.fields.map(r=>(r.fields&&(r.type="RECORD"),r))),ja.string(e.partitioning)&&(u.timePartitioning={type:e.partitioning.toUpperCase()},delete u.partitioning),ja.string(e.view)&&(u.view={query:e.view,useLegacySql:!1}),u}copy(e,u,r){let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r;this.createCopyJob(e,a,(n,l,d)=>{if(n){s(n,d);return}l.on("error",s).on("complete",p=>{s(null,p)})})}copyFrom(e,u,r){let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r;this.createCopyFromJob(e,a,(n,l,d)=>{if(n){s(n,d);return}l.on("error",s).on("complete",p=>{s(null,p)})})}createCopyJob(e,u,r){if(!(e instanceof Zu))throw new Error("Destination must be a Table object.");let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r,n={configuration:{copy:$u(!0,a,{destinationTable:{datasetId:e.dataset.id,projectId:e.bigQuery.projectId,tableId:e.id},sourceTable:{datasetId:this.dataset.id,projectId:this.bigQuery.projectId,tableId:this.id}})}};a.jobPrefix&&(n.jobPrefix=a.jobPrefix,delete a.jobPrefix),this.location&&(n.location=this.location),a.jobId&&(n.jobId=a.jobId,delete a.jobId),this.bigQuery.createJob(n,s)}createCopyFromJob(e,u,r){let a=n1(e);a.forEach(d=>{if(!(d instanceof Zu))throw new Error("Source must be a Table object.")});let s=typeof u=="object"?u:{},n=typeof u=="function"?u:r,l={configuration:{copy:$u(!0,s,{destinationTable:{datasetId:this.dataset.id,projectId:this.bigQuery.projectId,tableId:this.id},sourceTables:a.map(d=>({datasetId:d.dataset.id,projectId:d.bigQuery.projectId,tableId:d.id}))})}};s.jobPrefix&&(l.jobPrefix=s.jobPrefix,delete s.jobPrefix),this.location&&(l.location=this.location),s.jobId&&(l.jobId=s.jobId,delete s.jobId),this.bigQuery.createJob(l,n)}createExtractJob(e,u,r){let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r;if(a=$u(!0,a,{destinationUris:n1(e).map(l=>{if(!s1.util.isCustomType(l,"storage/file"))throw new Error("Destination must be a File object.");let d=s4.extname(l.name).substr(1).toLowerCase();return!a.destinationFormat&&!a.format&&vr[d]&&(a.destinationFormat=vr[d]),"gs://"+l.bucket.name+"/"+l.name})}),a.format)if(a.format=a.format.toLowerCase(),vr[a.format])a.destinationFormat=vr[a.format],delete a.format;else throw new Error("Destination format not recognized: "+a.format);a.gzip&&(a.compression="GZIP",delete a.gzip);let n={configuration:{extract:$u(!0,a,{sourceTable:{datasetId:this.dataset.id,projectId:this.bigQuery.projectId,tableId:this.id}})}};a.jobPrefix&&(n.jobPrefix=a.jobPrefix,delete a.jobPrefix),this.location&&(n.location=this.location),a.jobId&&(n.jobId=a.jobId,delete a.jobId),this.bigQuery.createJob(n,s)}createLoadJob(e,u,r){let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r;this._createLoadJob(e,a).then(([n])=>s(null,n,n.metadata),n=>s(n))}async _createLoadJob(e,u){if(u.format&&(u.sourceFormat=vr[u.format.toLowerCase()],delete u.format),this.location&&(u.location=this.location),typeof e=="string"){let a=vr[s4.extname(e).substr(1).toLowerCase()];!u.sourceFormat&&a&&(u.sourceFormat=a);let s=hF.createReadStream(e).pipe(this.createWriteStream_(u)),n=await pF.default(s,"job");return[n,n.metadata]}let r={configuration:{load:{destinationTable:{projectId:this.bigQuery.projectId,datasetId:this.dataset.id,tableId:this.id}}}};return u.jobPrefix&&(r.jobPrefix=u.jobPrefix,delete u.jobPrefix),u.location&&(r.location=u.location,delete u.location),u.jobId&&(r.jobId=u.jobId,delete u.jobId),$u(!0,r.configuration.load,u,{sourceUris:n1(e).map(a=>{if(!s1.util.isCustomType(a,"storage/file"))throw new Error("Source must be a File object.");let s=vr[s4.extname(a.name).substr(1).toLowerCase()];return!u.sourceFormat&&s&&(r.configuration.load.sourceFormat=s),"gs://"+a.bucket.name+"/"+a.name})}),this.bigQuery.createJob(r)}createQueryJob(e,u){return this.dataset.createQueryJob(e,u)}createQueryStream(e){return this.dataset.createQueryStream(e)}createWriteStream_(e){e=e||{},typeof e=="string"&&(e={sourceFormat:vr[e.toLowerCase()]}),typeof e.schema=="string"&&(e.schema=Zu.createSchemaFromString_(e.schema)),e=$u(!0,{destinationTable:{projectId:this.bigQuery.projectId,datasetId:this.dataset.id,tableId:this.id}},e);let u=e.jobId||BA.v4();e.jobId&&delete e.jobId,e.jobPrefix&&(u=e.jobPrefix+u,delete e.jobPrefix);let r=fF(OF());return r.once("writing",()=>{s1.util.makeWritableStream(r,{makeAuthenticatedRequest:this.bigQuery.makeAuthenticatedRequest,metadata:{configuration:{load:e},jobReference:{jobId:u,projectId:this.bigQuery.projectId,location:this.location}},request:{uri:`${this.bigQuery.apiEndpoint}/upload/bigquery/v2/projects/${this.bigQuery.projectId}/jobs`}},a=>{let s=this.bigQuery.job(a.jobReference.jobId,{location:a.jobReference.location});s.metadata=a,r.emit("job",s)})}),r}createWriteStream(e){let u=this.createWriteStream_(e);return u.on("prefinish",()=>{u.cork()}),u.on("job",r=>{r.on("error",a=>{u.destroy(a)}).on("complete",()=>{u.emit("complete",r),u.uncork()})}),u}extract(e,u,r){let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r;this.createExtractJob(e,a,(n,l,d)=>{if(n){s(n,d);return}l.on("error",s).on("complete",p=>{s(null,p)})})}getRows(e,u){let r=typeof e=="object"?e:{},a=typeof e=="function"?e:u,s=r.wrapIntegers?r.wrapIntegers:!1;delete r.wrapIntegers;let n=c((l,d,p,h)=>{if(l){a(l,null,null,h);return}d=SF.BigQuery.mergeSchemaWithRows_(this.metadata.schema,d||[],s,r.selectedFields?r.selectedFields.split(","):[]),a(null,d,p,h)},"onComplete");this.request({uri:"/data",qs:r},(l,d)=>{if(l){n(l,null,null,d);return}let p=null;if(d.pageToken&&(p=Object.assign({},r,{pageToken:d.pageToken})),d.rows&&d.rows.length>0&&!this.metadata.schema){this.getMetadata((h,f,S)=>{if(h){n(h,null,null,S);return}n(null,d.rows,p,d)});return}n(null,d.rows,p,d)})}insert(e,u,r){let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r,n=this._insertAndCreateTable(e,a);if(s)n.then(l=>s(null,l),l=>s(l,null));else return n.then(l=>[l])}async _insertAndCreateTable(e,u){let{schema:r}=u,a=6e4;try{return await this._insertWithRetry(e,u)}catch(s){if(s.code!==404||!r)throw s}try{await this.create({schema:r})}catch(s){if(s.code!==409)throw s}return await new Promise(s=>setTimeout(s,a)),this._insertAndCreateTable(e,u)}async _insertWithRetry(e,u){let{partialRetries:r=3}=u,a,s=Math.max(r,0)+1;for(let n=0;n!!d.row).map(d=>d.row),!e.length)break}throw a}async _insert(e,u){if(e=n1(e),!e.length)throw new Error("You must provide at least 1 row to be inserted.");let r=$u(!0,{},u,{rows:e});u.raw||(r.rows=e.map(n=>{let l={json:Zu.encodeValue_(n)};return u.createInsertId!==!1&&(l.insertId=BA.v4()),l})),delete r.createInsertId,delete r.partialRetries,delete r.raw,delete r.schema;let[a]=await this.request({method:"POST",uri:"/insertAll",json:r}),s=(a.insertErrors||[]).map(n=>({errors:n.errors.map(l=>({message:l.message,reason:l.reason})),row:e[n.index]}));if(s.length>0)throw new s1.util.PartialFailureError({errors:s,response:a});return a}load(e,u,r){let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r;this.createLoadJob(e,a,(n,l,d)=>{if(n){s(n,d);return}l.on("error",s).on("complete",p=>{s(null,p)})})}query(e,u){this.dataset.query(e,u)}setMetadata(e,u){let r=Zu.formatMetadata_(e);super.setMetadata(r,u)}getIamPolicy(e,u){let r=typeof e=="object"?e:{},a=typeof e=="function"?e:u;if(typeof r.requestedPolicyVersion=="number"&&r.requestedPolicyVersion!==1)throw new Error("Only IAM policy version 1 is supported.");let s=$u(!0,{},{options:r});this.request({method:"POST",uri:"/:getIamPolicy",json:s},(n,l)=>{if(n){a(n,null);return}a(null,l)})}setIamPolicy(e,u,r){let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r;if(e.version&&e.version!==1)throw new Error("Only IAM policy version 1 is supported.");let n=$u(!0,{},a,{policy:e});this.request({method:"POST",uri:"/:setIamPolicy",json:n},(l,d)=>{if(l){s(l,null);return}s(null,d)})}testIamPermissions(e,u){e=n1(e);let r=$u(!0,{},{permissions:e});this.request({method:"POST",uri:"/:testIamPermissions",json:r},(a,s)=>{if(a){u(a,null);return}u(null,s)})}};c(Zu,"Table");var o1=Zu;Sd.Table=o1;MA.paginator.extend(o1,["getRows"]);cF.promisifyAll(o1)});var o4=b(Bd=>{"use strict";Object.defineProperty(Bd,"__esModule",{value:!0});Bd.Model=void 0;var mA=_i(),LF=ur(),EF=tr(),_A=Lu(),BF=["ML_TF_SAVED_MODEL","ML_XGBOOST_BOOSTER"],n4=class n4 extends mA.ServiceObject{constructor(e,u){let r={delete:!0,exists:!0,get:!0,getMetadata:!0,setMetadata:!0};super({parent:e,baseUrl:"/models",id:u,methods:r}),this.dataset=e,this.bigQuery=e.bigQuery}createExtractJob(e,u,r){let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r;if(a=_A(!0,a,{destinationUris:EF(e).map(l=>{if(mA.util.isCustomType(l,"storage/file"))return"gs://"+l.bucket.name+"/"+l.name;if(typeof l=="string")return l;throw new Error("Destination must be a string or a File object.")})}),a.format)if(a.format=a.format.toUpperCase(),BF.includes(a.format))a.destinationFormat=a.format,delete a.format;else throw new Error("Destination format not recognized: "+a.format);let n={configuration:{extract:_A(!0,a,{sourceModel:{datasetId:this.dataset.id,projectId:this.bigQuery.projectId,modelId:this.id}})}};a.jobPrefix&&(n.jobPrefix=a.jobPrefix,delete a.jobPrefix),a.jobId&&(n.jobId=a.jobId,delete a.jobId),this.bigQuery.createJob(n,s)}extract(e,u,r){let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r;this.createExtractJob(e,a,(n,l,d)=>{if(n){s(n,d);return}l.on("error",s).on("complete",p=>{s(null,p)})})}};c(n4,"Model");var Ed=n4;Bd.Model=Ed;LF.promisifyAll(Ed)});var c4=b(md=>{"use strict";Object.defineProperty(md,"__esModule",{value:!0});md.Routine=void 0;var MF=_i(),mF=ur(),_F=Lu(),l4=class l4 extends MF.ServiceObject{constructor(e,u){let r={create:!0,delete:!0,exists:!0,get:!0,getMetadata:!0,setMetadata:{reqOpts:{method:"PUT"}}};super({parent:e,baseUrl:"/routines",id:u,methods:r,createMethod:e.createRoutine.bind(e)})}setMetadata(e,u){this.getMetadata((r,a)=>{if(r){u(r);return}let s=_F(!0,{},a,e);super.setMetadata(s,u)})}};c(l4,"Routine");var Md=l4;md.Routine=Md;mF.promisifyAll(Md)});var p4=b(Td=>{"use strict";Object.defineProperty(Td,"__esModule",{value:!0});Td.Dataset=void 0;var TF=_i(),_d=a1(),YF=ur(),l1=Lu(),TA=Od(),AF=o4(),RF=c4(),d4=class d4 extends TF.ServiceObject{constructor(e,u,r){let a={create:!0,exists:!0,get:!0,getMetadata:!0,setMetadata:!0};super({parent:e,baseUrl:"/datasets",id:u,methods:a,createMethod:(s,n,l)=>{let d=typeof n=="object"?n:{},p=typeof n=="function"?n:l;return d=l1({},d,{location:this.location}),e.createDataset(s,d,p)}}),r&&r.location&&(this.location=r.location),this.bigQuery=e,this.interceptors.push({request:s=>(s.method==="PATCH"&&s.json.etag&&(s.headers=s.headers||{},s.headers["If-Match"]=s.json.etag),s)}),this.getModelsStream=_d.paginator.streamify("getModels"),this.getRoutinesStream=_d.paginator.streamify("getRoutines"),this.getTablesStream=_d.paginator.streamify("getTables")}createQueryJob(e,u){return typeof e=="string"&&(e={query:e}),e=l1(!0,{},e,{defaultDataset:{datasetId:this.id},location:this.location}),this.bigQuery.createQueryJob(e,u)}createQueryStream(e){return typeof e=="string"&&(e={query:e}),e=l1(!0,{},e,{defaultDataset:{datasetId:this.id},location:this.location}),this.bigQuery.createQueryStream(e)}createRoutine(e,u,r){let a=Object.assign({},u,{routineReference:{routineId:e,datasetId:this.id,projectId:this.bigQuery.projectId}});this.request({method:"POST",uri:"/routines",json:a},(s,n)=>{if(s){r(s,null,n);return}let l=this.routine(n.routineReference.routineId);l.metadata=n,r(null,l,n)})}createTable(e,u,r){let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r,n=TA.Table.formatMetadata_(a);n.tableReference={datasetId:this.id,projectId:this.bigQuery.projectId,tableId:e},this.request({method:"POST",uri:"/tables",json:n},(l,d)=>{if(l){s(l,null,d);return}let p=this.table(d.tableReference.tableId,{location:d.location});p.metadata=d,s(null,p,d)})}delete(e,u){let r=typeof e=="object"?e:{};u=typeof e=="function"?e:u;let a={deleteContents:!!r.force};this.request({method:"DELETE",uri:"",qs:a},u)}getModels(e,u){let r=typeof e=="object"?e:{},a=typeof e=="function"?e:u;this.request({uri:"/models",qs:r},(s,n)=>{if(s){a(s,null,null,n);return}let l=null;n.nextPageToken&&(l=Object.assign({},r,{pageToken:n.nextPageToken}));let d=(n.models||[]).map(p=>{let h=this.model(p.modelReference.modelId);return h.metadata=p,h});a(null,d,l,n)})}getRoutines(e,u){let r=typeof e=="object"?e:{},a=typeof e=="function"?e:u;this.request({uri:"/routines",qs:r},(s,n)=>{if(s){a(s,null,null,n);return}let l=null;n.nextPageToken&&(l=Object.assign({},r,{pageToken:n.nextPageToken}));let d=(n.routines||[]).map(p=>{let h=this.routine(p.routineReference.routineId);return h.metadata=p,h});a(null,d,l,n)})}getTables(e,u){let r=typeof e=="object"?e:{},a=typeof e=="function"?e:u;this.request({uri:"/tables",qs:r},(s,n)=>{if(s){a(s,null,null,n);return}let l=null;n.nextPageToken&&(l=Object.assign({},r,{pageToken:n.nextPageToken}));let d=(n.tables||[]).map(p=>{let h=this.table(p.tableReference.tableId,{location:p.location});return h.metadata=p,h});a(null,d,l,n)})}model(e){if(typeof e!="string")throw new TypeError("A model ID is required.");return new AF.Model(this,e)}query(e,u){return typeof e=="string"&&(e={query:e}),e=l1(!0,{},e,{defaultDataset:{datasetId:this.id},location:this.location}),this.bigQuery.query(e,u)}routine(e){if(typeof e!="string")throw new TypeError("A routine ID is required.");return new RF.Routine(this,e)}table(e,u){if(typeof e!="string")throw new TypeError("A table ID is required.");return u=l1({location:this.location},u),new TA.Table(this,e,u)}};c(d4,"Dataset");var c1=d4;Td.Dataset=c1;_d.paginator.extend(c1,["getModels","getRoutines","getTables"]);YF.promisifyAll(c1,{exclude:["model","routine","table"]})});var f4=b(Yd=>{"use strict";Object.defineProperty(Yd,"__esModule",{value:!0});Yd.Job=void 0;var YA=_i(),RA=a1(),gF=ur(),AA=Lu(),yF=S4(),h4=class h4 extends YA.Operation{constructor(e,u,r){let a,s={exists:!0,get:!0,getMetadata:{reqOpts:{qs:{get location(){return a}}}}};super({parent:e,baseUrl:"/jobs",id:u,methods:s}),Object.defineProperty(this,"location",{get(){return a},set(n){a=n}}),this.bigQuery=e,r&&r.location&&(this.location=r.location),this.getQueryResultsStream=RA.paginator.streamify("getQueryResultsAsStream_")}cancel(e){let u;this.location&&(u={location:this.location}),this.request({method:"POST",uri:"/cancel",qs:u},e)}getQueryResults(e,u){let r=typeof e=="object"?e:{},a=typeof e=="function"?e:u,s=AA({location:this.location},r),n=s.wrapIntegers?s.wrapIntegers:!1;delete s.wrapIntegers,delete s.job;let l=typeof s.timeoutMs=="number"?s.timeoutMs:!1;this.bigQuery.request({uri:"/queries/"+this.id,qs:s},(d,p)=>{if(d){a(d,null,null,p);return}let h=[];p.schema&&p.rows&&(h=yF.BigQuery.mergeSchemaWithRows_(p.schema,p.rows,n));let f=null;if(p.jobComplete===!1){if(f=Object.assign({},r),l){let S=new Error(`The query did not complete before ${l}ms`);a(S,null,f,p);return}}else p.pageToken&&(f=Object.assign({},r,{pageToken:p.pageToken}));a(null,h,f,p)})}getQueryResultsAsStream_(e,u){e=AA({autoPaginate:!1},e),this.getQueryResults(e,u)}poll_(e){this.getMetadata((u,r)=>{if(!u&&r.status&&r.status.errorResult&&(u=new YA.util.ApiError(r.status)),u){e(u);return}if(r.status.state!=="DONE"){e(null);return}e(null,r)})}};c(h4,"Job");var d1=h4;Yd.Job=d1;RA.paginator.extend(d1,["getQueryResults"]);gF.promisifyAll(d1)});var gA=b((UJ,NF)=>{NF.exports={name:"@google-cloud/bigquery",description:"Google BigQuery Client Library for Node.js",version:"5.7.1",license:"Apache-2.0",author:"Google LLC",engines:{node:">=10"},repository:"googleapis/nodejs-bigquery",main:"./build/src/index.js",types:"./build/src/index.d.ts",files:["build/src","!build/src/**/*.map"],keywords:["google apis client","google api client","google apis","google api","google","google cloud platform","google cloud","cloud","google bigquery","bigquery"],scripts:{prebenchmark:"npm run compile",benchmark:"node build/benchmark/bench.js benchmark/queries.json",docs:"jsdoc -c .jsdoc.js",lint:"gts check","samples-test":"cd samples/ && npm link ../ && npm test && cd ../",test:"c8 mocha build/test","system-test":"mocha build/system-test --timeout 600000","presystem-test":"npm run compile",clean:"gts clean",compile:"tsc -p . && cp src/types.d.ts build/src/",fix:"gts fix",predocs:"npm run compile",prepare:"npm run compile",pretest:"npm run compile","docs-test":"linkinator docs","predocs-test":"npm run docs",types:"dtsd bigquery v2 > ./src/types.d.ts",prelint:"cd samples; npm link ../; npm install",precompile:"gts clean"},dependencies:{"@google-cloud/common":"^3.1.0","@google-cloud/paginator":"^3.0.0","@google-cloud/promisify":"^2.0.0",arrify:"^2.0.1","big.js":"^6.0.0",duplexify:"^4.0.0",extend:"^3.0.2",is:"^3.3.0","p-event":"^4.1.0","stream-events":"^1.0.5",uuid:"^8.0.0"},devDependencies:{"@google-cloud/storage":"^5.0.0","@types/big.js":"^6.0.0","@types/execa":"^0.9.0","@types/extend":"^3.0.1","@types/is":"0.0.21","@types/mocha":"^8.0.0","@types/mv":"^2.1.0","@types/ncp":"^2.0.1","@types/node":"^14.0.0","@types/proxyquire":"^1.3.28","@types/sinon":"^10.0.0","@types/tmp":"0.2.1","@types/uuid":"^8.0.0",c8:"^7.0.0",codecov:"^3.5.0","discovery-tsd":"^0.2.0",execa:"^5.0.0",gts:"^2.0.0",jsdoc:"^3.6.3","jsdoc-fresh":"^1.0.1","jsdoc-region-tag":"^1.0.2",linkinator:"^2.0.0",mocha:"^8.0.0",mv:"^2.1.1",ncp:"^2.0.0",proxyquire:"^2.1.0",sinon:"^11.0.0",tmp:"0.2.1",typescript:"^3.8.3"}}});var S4=b(Ae=>{"use strict";Object.defineProperty(Ae,"__esModule",{value:!0});Ae.BigQueryInt=Ae.BigQueryTime=Ae.BigQueryDatetime=Ae.BigQueryTimestamp=Ae.Geography=Ae.BigQueryDate=Ae.BigQuery=Ae.PROTOCOL_REGEX=void 0;var yA=_i(),Ad=a1(),CF=ur(),NA=tr(),O4=pd(),Dr=Lu(),iu=i4(),IF=(wc(),y3(Dc)),bF=p4(),xF=f4(),vF=Od();Ae.PROTOCOL_REGEX=/^(\w*):\/\//;var C0=class C0 extends yA.Service{constructor(e={}){let u="https://bigquery.googleapis.com",r=process.env.BIGQUERY_EMULATOR_HOST;typeof r=="string"&&(u=C0.sanitizeEndpoint(r)),e.apiEndpoint&&(u=C0.sanitizeEndpoint(e.apiEndpoint)),e=Object.assign({},e,{apiEndpoint:u});let a=r||`${e.apiEndpoint}/bigquery/v2`,s={apiEndpoint:e.apiEndpoint,baseUrl:a,scopes:["https://www.googleapis.com/auth/bigquery"],packageJson:gA()};e.scopes&&(s.scopes=s.scopes.concat(e.scopes)),super(s,e),this.location=e.location,this.createQueryStream=Ad.paginator.streamify("queryAsStream_"),this.getDatasetsStream=Ad.paginator.streamify("getDatasets"),this.getJobsStream=Ad.paginator.streamify("getJobs"),this.interceptors.push({request:n=>Dr(!0,{},n,{qs:{prettyPrint:!1}})})}static sanitizeEndpoint(e){return Ae.PROTOCOL_REGEX.test(e)||(e=`https://${e}`),e.replace(/\/+$/,"")}static mergeSchemaWithRows_(e,u,r,a){var s;if(a&&a.length>0){let p=a.map(f=>f.split(".")),h=p.map(f=>f.shift());e.fields=(s=e.fields)===null||s===void 0?void 0:s.filter(f=>h.map(S=>S.toLowerCase()).indexOf(f.name.toLowerCase())>=0),a=p.filter(f=>f.length>0).map(f=>f.join("."))}return NA(u).map(n).map(d);function n(p){return p.f.map((h,f)=>{let S=e.fields[f],_=h.v;S.mode==="REPEATED"?_=_.map(E=>l(S,E.v,r,a)):_=l(S,_,r,a);let O={};return O[S.name]=_,O})}function l(p,h,f,S){if(iu.null(h))return h;switch(p.type){case"BOOLEAN":case"BOOL":{h=h.toLowerCase()==="true";break}case"BYTES":{h=Buffer.from(h,"base64");break}case"FLOAT":case"FLOAT64":{h=Number(h);break}case"INTEGER":case"INT64":{h=f?typeof f=="object"?C0.int({integerValue:h,schemaFieldName:p.name},f).valueOf():C0.int(h):Number(h);break}case"NUMERIC":{h=new O4.Big(h);break}case"BIGNUMERIC":{h=new O4.Big(h);break}case"RECORD":{h=C0.mergeSchemaWithRows_(p,h,f,S).pop();break}case"DATE":{h=C0.date(h);break}case"DATETIME":{h=C0.datetime(h);break}case"TIME":{h=C0.time(h);break}case"TIMESTAMP":{h=C0.timestamp(new Date(h*1e3));break}case"GEOGRAPHY":{h=C0.geography(h);break}default:break}return h}function d(p){return p.reduce((h,f)=>{let S=Object.keys(f)[0];return h[S]=f[S],h},{})}}static date(e){return new p1(e)}date(e){return C0.date(e)}static datetime(e){return new S1(e)}datetime(e){return C0.datetime(e)}static time(e){return new O1(e)}time(e){return C0.time(e)}static timestamp(e){return new f1(e)}timestamp(e){return C0.timestamp(e)}static int(e,u){return new L1(e,u)}int(e,u){return C0.int(e,u)}static geography(e){return new h1(e)}geography(e){return C0.geography(e)}static decodeIntegerValue_(e){let u=Number(e.integerValue);if(!Number.isSafeInteger(u))throw new Error("We attempted to return all of the numeric values, but "+(e.schemaFieldName?e.schemaFieldName+" ":"")+"value "+e.integerValue+` is out of bounds of 'Number.MAX_SAFE_INTEGER'. +To prevent this error, please consider passing 'options.wrapNumbers' as +{ + integerTypeCastFunction: provide + fields: optionally specify field name(s) to be custom casted } - -const getTablesAndViews = async (dataset) => { - const collectionsInContainer = (await dataset.getTables()).flat() - - const tables = collectionsInContainer.filter(({metadata}) => metadata.type === 'TABLE').map(({id}) => id) - const views = collectionsInContainer.filter(({metadata}) => metadata.type === 'VIEW' || metadata.type === 'MATERIALIZED_VIEW').map(({id}) => id) - - return { tables, views } -} - -const createLogger = ({ title, logger, hiddenKeys }) => { - return { - info(message) { - logger.log('info', { message }, title, hiddenKeys); - }, - - warn(message, context) { - logger.log('info', { message: '[warning] ' + message, context }, title, hiddenKeys); - }, - - progress(message, dbName = '', tableName = '') { - logger.progress({ message, containerName: dbName, entityName: tableName }); - }, - - error(error) { - logger.log( - 'error', - { - message: error.message, - stack: error.stack, - }, - title, - ); - }, - }; -}; - -const getBucketInfo = ({ _, metadata, datasetName }) => { - const name = metadata?.datasetReference?.datasetId; - const friendlyName = metadata.friendlyName; - - return { - name: friendlyName || name, - code: friendlyName ? name : friendlyName, - datasetID: metadata.id, - dataLocation: (metadata.location || '').toLowerCase(), - description: metadata.description || '', - labels: getLabels(_, metadata.labels), - enableTableExpiration: Boolean(metadata.defaultTableExpirationMs), - defaultExpiration: !isNaN(metadata.defaultTableExpirationMs) - ? metadata.defaultTableExpirationMs / (1000 * 60 * 60 * 24) - : undefined, - ...getEncryption(metadata.defaultEncryptionConfiguration), - }; -}; - -const getLabels = (_, labels) => { - return _.keys(labels).map(labelKey => ({ labelKey, labelValue: labels[labelKey] })); -}; - -const getViewName = viewName => { - const regExp = / \(v\)$/i; - - if (regExp.test(viewName)) { - return viewName.replace(regExp, ''); - } - - return ''; -}; - -const getTableInfo = ({ _, table, tableName }) => { - const metadata = table.metadata || {}; - const collectionName = metadata.friendlyName || tableName; - - return { - ...getPartitioning(metadata), - collectionName, - code: metadata.friendlyName ? tableName : '', - tableType: metadata.tableType === 'EXTERNAL' || metadata.type === 'EXTERNAL' ? 'External' : 'Native', - description: metadata.description, - expiration: metadata.expirationTime ? Number(metadata.expirationTime) : undefined, - clusteringKey: metadata.clustering?.fields || [], - ...getEncryption(metadata.encryptionConfiguration), - labels: getLabels(_, metadata.labels), - tableOptions: getExternalOptions(metadata), - }; -}; - -const getExternalOptions = metadata => { - const options = metadata.externalDataConfiguration || {}; - const format = - { - CSV: 'CSV', - GOOGLE_SHEETS: 'GOOGLE_SHEETS', - NEWLINE_DELIMITED_JSON: 'JSON', - AVRO: 'AVRO', - DATASTORE_BACKUP: 'DATASTORE_BACKUP', - ORC: 'ORC', - PARQUET: 'PARQUET', - BIGTABLE: 'CLOUD_BIGTABLE', - JSON: 'JSON', - CLOUD_BIGTABLE: 'CLOUD_BIGTABLE', - }[(options.sourceFormat || '').toUpperCase()] || ''; - return { - format: format, - uris: (options.sourceUris || []).map(uri => ({ uri })), - bigtableUri: format === 'CLOUD_BIGTABLE' ? options.sourceUris?.[0] || '' : '', - autodetect: options.autodetect, - max_staleness: metadata.maxStaleness, - metadata_cache_mode: - { - AUTOMATIC: 'AUTOMATIC', - MANUAL: 'MANUAL', - }[(options.metadataCacheMode || '').toUpperCase()] || '', - object_metadata: options.objectMetadata || '', - decimal_target_types: (options.decimalTargetTypes || []).map(value => ({ value })), - allow_quoted_newlines: options.csvOptions?.allowQuotedNewlines, - allow_jagged_rows: options.csvOptions?.allowJaggedRows, - quote: options.csvOptions?.quote, - skip_leading_rows: options.csvOptions?.skipLeadingRows || options.googleSheetsOptions?.skipLeadingRows, - preserve_ascii_control_characters: options.csvOptions?.preserveAsciiControlCharacters, - null_marker: options.csvOptions?.nullMarker, - field_delimiter: options.csvOptions?.fieldDelimiter, - encoding: options.csvOptions?.encoding, - ignore_unknown_values: options.ignoreUnknownValues, - compression: options.compression, - max_bad_records: options.maxBadRecords, - require_hive_partition_filter: options.hivePartitioningOptions?.requirePartitionFilter, - hive_partition_uri_prefix: options.hivePartitioningOptions?.sourceUriPrefix, - sheet_range: options.googleSheetsOptions?.range, - reference_file_schema_uri: options.referenceFileSchemaUri, - enable_list_inference: options.parquetOptions?.enableListInference, - enum_as_string: options.parquetOptions?.enumAsString, - enable_logical_types: options.avroOptions?.useAvroLogicalTypes, - bigtable_options: JSON.stringify(options.bigtableOptions, null, 4), - json_extension: options.jsonExtension, - }; -}; - -const getEncryption = encryptionConfiguration => { - return { - encryption: encryptionConfiguration ? 'Customer-managed' : 'Google-managed', - customerEncryptionKey: encryptionConfiguration?.kmsKeyName, - }; -}; - -const getPartitioning = metadata => { - const partitioning = getPartitioningCategory(metadata); - - return { - partitioning, - partitioningFilterRequired: metadata.requirePartitionFilter, - partitioningType: getPartitioningType(metadata.timePartitioning || {}), - timeUnitpartitionKey: [metadata.timePartitioning?.field], - rangeOptions: getPartitioningRange(metadata.rangePartitioning), - }; -}; - -const getPartitioningCategory = metadata => { - if (metadata.timePartitioning) { - if (metadata.timePartitioning.field) { - return 'By time-unit column'; - } else { - return 'By ingestion time'; - } - } - - if (metadata.rangePartitioning) { - return 'By integer-range'; - } - - return 'No partitioning'; -}; - -const getPartitioningType = timePartitioning => { - if (timePartitioning.type === 'HOUR') { - return 'By hour'; - } - - if (timePartitioning.type === 'MONTH') { - return 'By month'; - } - - if (timePartitioning.type === 'YEAR') { - return 'By year'; - } - - return 'By day'; -}; - -const getPartitioningRange = rangePartitioning => { - if (!rangePartitioning) { - return []; - } - - return [ - { - rangePartitionKey: [rangePartitioning.field], - rangeStart: rangePartitioning.range?.start, - rangeEnd: rangePartitioning.range?.end, - rangeinterval: rangePartitioning.range?.interval, - }, - ]; -}; - -const prepareError = (logger, error) => { - const err = { - message: error.message, - stack: error.stack, - }; - - logger.log('error', err, 'Reverse Engineering error'); - - return err; -}; - -const convertValue = value => { - if ( - value instanceof BigQueryDate || - value instanceof BigQueryDatetime || - value instanceof BigQueryTime || - value instanceof BigQueryTimestamp - ) { - return value.value; - } - - if (value instanceof Buffer) { - return value.toString('base64'); - } - - if (value instanceof Big) { - return value.toNumber(); - } - - if (value instanceof Geography) { - value = value.value; - } - - if (Array.isArray(value)) { - return value.map(convertValue); - } - - if (value && typeof value === 'object') { - return Object.keys(value).reduce( - (result, key) => ({ - ...result, - [key]: convertValue(value[key]), - }), - {}, - ); - } - - return value; -}; - -const equalByStructure = (a, b) => { - if (!a || !b) { - return false; - } - - if (a.type !== b.type) { - return false; - } - - if ( - (a.properties && !b.properties) || - (!a.properties && b.properties) || - (!a.items && b.items) || - (a.items && !b.items) - ) { - return false; - } - - if (a.properties && b.properties) { - return Object.keys(a.properties).every(key => equalByStructure(a.properties[key], b.properties[key])); - } - - if (Array.isArray(a.items) && Array.isArray(b.items)) { - return a.items.every((item, i) => equalByStructure(item, b.item[i])); - } - - if (a.items && b.items) { - return equalByStructure(a.items, b.items); - } - - return true; -}; - -const findViewPropertyByTableProperty = (viewSchema, tableProperty) => { - if (viewSchema.properties[tableProperty.alias]) { - return tableProperty.alias; - } - - return Object.keys(viewSchema.properties).find(key => equalByStructure(viewSchema.properties[key], tableProperty)); -}; - -const createViewSchema = ({ viewQuery, tablePackages, viewJsonSchema, log }) => { - try { - const result = parseSelectStatement(viewQuery); - const columns = result.selectItems.map(column => { - return { - alias: column.alias, - name: column.name || column.fieldReferences[column.fieldReferences.length - 1] || column.alias, - table: column.tableName || '', - }; - }); - - const tablesProperties = result.from.reduce((result, fromItem) => { - const nameArray = fromItem.table.split('.'); - const tableName = nameArray.length > 1 ? nameArray[nameArray.length - 1] : nameArray[0]; - const schemaName = nameArray.length > 1 ? nameArray[nameArray.length - 2] : fromItem.schemaName; - - const pack = tablePackages.find( - pack => (pack.dbName === schemaName || !schemaName) && pack.collectionName === tableName, - ); - - if (!pack) { - return result; - } - - const tableColumns = columns.filter( - column => column.table === tableName || column.table === fromItem.alias || !column.table, - ); - const tableSchema = pack.validation.jsonSchema; - const tableProperties = tableColumns - .map(column => { - if (!tableSchema.properties[column.name]) { - return; - } - - return { - ...tableSchema.properties[column.name], - table: tableName, - name: column.name, - alias: column.alias, - }; - }) - .filter(Boolean); - - return result.concat(tableProperties); - }, []); - - return tablesProperties.reduce((resultSchema, property, i) => { - const viewProperty = findViewPropertyByTableProperty(resultSchema, property); - - if (!viewProperty) { - return resultSchema; - } - - return { - ...resultSchema, - properties: { - ...resultSchema.properties, - [viewProperty]: { - $ref: `#collection/definitions/${property.table}/${property.name}`, - }, - }, - }; - }, viewJsonSchema); - } catch (e) { - log.info('Error with processing view select statement: ' + viewQuery); - log.error(e); - - return viewJsonSchema; - } -}; - -module.exports = { - disconnect, - testConnection, - getDbCollectionsNames, - getDbCollectionsData, - getDatabases -}; +`);return u}static getTypeDescriptorFromProvidedType_(e){let u=["DATE","DATETIME","TIME","TIMESTAMP","BYTES","NUMERIC","BIGNUMERIC","BOOL","INT64","FLOAT64","STRING","GEOGRAPHY","ARRAY","STRUCT"];if(iu.array(e))return e=e,{type:"ARRAY",arrayType:C0.getTypeDescriptorFromProvidedType_(e[0])};if(iu.object(e))return{type:"STRUCT",structTypes:Object.keys(e).map(r=>({name:r,type:C0.getTypeDescriptorFromProvidedType_(e[r])}))};if(e=e.toUpperCase(),!u.includes(e))throw new Error(`Invalid type provided: "${e}"`);return{type:e.toUpperCase()}}static getTypeDescriptorFromValue_(e){let u;if(e===null)throw new Error("Parameter types must be provided for null values via the 'types' field in query options.");if(e instanceof p1)u="DATE";else if(e instanceof S1)u="DATETIME";else if(e instanceof O1)u="TIME";else if(e instanceof f1)u="TIMESTAMP";else if(e instanceof Buffer)u="BYTES";else if(e instanceof O4.Big)e.c.length-e.e>=10?u="BIGNUMERIC":u="NUMERIC";else if(e instanceof L1)u="INT64";else if(e instanceof h1)u="GEOGRAPHY";else if(Array.isArray(e)){if(e.length===0)throw new Error("Parameter types must be provided for empty arrays via the 'types' field in query options.");return{type:"ARRAY",arrayType:C0.getTypeDescriptorFromValue_(e[0])}}else if(iu.boolean(e))u="BOOL";else if(iu.number(e))u=e%1===0?"INT64":"FLOAT64";else{if(iu.object(e))return{type:"STRUCT",structTypes:Object.keys(e).map(r=>({name:r,type:C0.getTypeDescriptorFromValue_(e[r])}))};iu.string(e)&&(u="STRING")}if(!u)throw new Error(["This value could not be translated to a BigQuery data type.",e].join(` +`));return{type:u}}static valueToQueryParameter_(e,u){iu.date(e)&&(e=C0.timestamp(e));let r;u?r=C0.getTypeDescriptorFromProvidedType_(u):r=C0.getTypeDescriptorFromValue_(e);let a={parameterType:r,parameterValue:{}},s=a.parameterType.type;return s==="ARRAY"?a.parameterValue.arrayValues=e.map(n=>{let l=C0._getValue(n,r.arrayType);return iu.object(l)||iu.array(l)?iu.array(u)?(u=u,C0.valueToQueryParameter_(l,u[0]).parameterValue):C0.valueToQueryParameter_(l).parameterValue:{value:l}}):s==="STRUCT"?a.parameterValue.structValues=Object.keys(e).reduce((n,l)=>{let d;return u?d=C0.valueToQueryParameter_(e[l],u[l]):d=C0.valueToQueryParameter_(e[l]),n[l]=d.parameterValue,n},{}):a.parameterValue.value=C0._getValue(e,r),a}static _getValue(e,u){return e===null?null:(e.type&&(u=e),C0._isCustomType(u)?e.value:e)}static _isCustomType({type:e}){return e.indexOf("TIME")>-1||e.indexOf("DATE")>-1||e.indexOf("GEOGRAPHY")>-1||e.indexOf("BigQueryInt")>-1}createDataset(e,u,r){let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r;this.request({method:"POST",uri:"/datasets",json:Dr(!0,{location:this.location},a,{datasetReference:{datasetId:e}})},(n,l)=>{if(n){s(n,null,l);return}let d=this.dataset(e);d.metadata=l,s(null,d,l)})}createQueryJob(e,u){let r=typeof e=="object"?e:{query:e};if((!r||!r.query)&&!r.pageToken)throw new Error("A SQL query string is required.");let a=Dr(!0,{useLegacySql:!1},r);if(r.destination){if(!(r.destination instanceof vF.Table))throw new Error("Destination must be a Table object.");a.destinationTable={datasetId:r.destination.dataset.id,projectId:r.destination.dataset.bigQuery.projectId,tableId:r.destination.id},delete a.destination}if(a.params){if(a.parameterMode=iu.array(a.params)?"positional":"named",a.parameterMode==="named"){a.queryParameters=[];for(let n in a.params){let l=a.params[n],d;if(a.types){if(!iu.object(a.types))throw new Error("Provided types must match the value type passed to `params`");a.types[n]?d=C0.valueToQueryParameter_(l,a.types[n]):d=C0.valueToQueryParameter_(l)}else d=C0.valueToQueryParameter_(l);d.name=n,a.queryParameters.push(d)}}else if(a.queryParameters=[],a.types){if(!iu.array(a.types))throw new Error("Provided types must match the value type passed to `params`");if(a.params.length!==a.types.length)throw new Error("Incorrect number of parameter types provided.");a.params.forEach((n,l)=>{let d=C0.valueToQueryParameter_(n,a.types[l]);a.queryParameters.push(d)})}else a.params.forEach(n=>{let l=C0.valueToQueryParameter_(n);a.queryParameters.push(l)});delete a.params}let s={configuration:{query:a}};typeof a.jobTimeoutMs=="number"&&(s.configuration.jobTimeoutMs=a.jobTimeoutMs,delete a.jobTimeoutMs),a.dryRun&&(s.configuration.dryRun=a.dryRun,delete a.dryRun),a.labels&&(s.configuration.labels=a.labels,delete a.labels),a.jobPrefix&&(s.jobPrefix=a.jobPrefix,delete a.jobPrefix),a.location&&(s.location=a.location,delete a.location),a.jobId&&(s.jobId=a.jobId,delete a.jobId),this.createJob(s,u)}createJob(e,u){let r=typeof e.jobId<"u",a=Object.assign({},e),s=r?a.jobId:IF.v4();a.jobId&&delete a.jobId,a.jobPrefix&&(s=a.jobPrefix+s,delete a.jobPrefix),a.jobReference={projectId:this.projectId,jobId:s,location:this.location},e.location&&(a.jobReference.location=e.location,delete a.location);let n=this.job(s,{location:a.jobReference.location});this.request({method:"POST",uri:"/jobs",json:a},async(l,d)=>{if(l)if(l.code===409&&!r)l=null,[d]=await n.getMetadata();else{u(l,null,d);return}d.status.errors&&(l=new yA.util.ApiError({errors:d.status.errors,response:d})),n.location=d.jobReference.location,n.metadata=d,u(l,n,d)})}dataset(e,u){if(typeof e!="string")throw new TypeError("A dataset ID is required.");return this.location&&(u=Dr({location:this.location},u)),new bF.Dataset(this,e,u)}getDatasets(e,u){let r=typeof e=="object"?e:{},a=typeof e=="function"?e:u;this.request({uri:"/datasets",qs:r},(s,n)=>{if(s){a(s,null,null,n);return}let l=null;n.nextPageToken&&(l=Object.assign({},r,{pageToken:n.nextPageToken}));let d=(n.datasets||[]).map(p=>{let h=this.dataset(p.datasetReference.datasetId,{location:p.location});return h.metadata=p,h});a(null,d,l,n)})}getJobs(e,u){let r=typeof e=="object"?e:{},a=typeof e=="function"?e:u;this.request({uri:"/jobs",qs:r,useQuerystring:!0},(s,n)=>{if(s){a(s,null,null,n);return}let l=null;n.nextPageToken&&(l=Object.assign({},r,{pageToken:n.nextPageToken}));let d=(n.jobs||[]).map(p=>{let h=this.job(p.jobReference.jobId,{location:p.jobReference.location});return h.metadata=p,h});a(null,d,l,n)})}job(e,u){return this.location&&(u=Dr({location:this.location},u)),new xF.Job(this,e,u)}query(e,u,r){let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r;this.createQueryJob(e,(n,l,d)=>{if(n){s(n,null,d);return}if(typeof e=="object"&&e.dryRun){s(null,[],d);return}a=Dr({job:l},a),l.getQueryResults(a,s)})}queryAsStream_(e,u,r){let a=typeof u=="object"?u:{},s=typeof u=="function"?u:r;if(a=e.job?Dr(e,a):Dr(a,{autoPaginate:!1}),e.job){e.job.getQueryResults(a,s);return}this.query(e,a,s)}};c(C0,"BigQuery");var wr=C0;Ae.BigQuery=wr;Ad.paginator.extend(wr,["getDatasets","getJobs"]);CF.promisifyAll(wr,{exclude:["dataset","date","datetime","geography","int","job","time","timestamp"]});var L4=class L4{constructor(e){typeof e=="object"&&(e=wr.datetime(e).value),this.value=e}};c(L4,"BigQueryDate");var p1=L4;Ae.BigQueryDate=p1;var E4=class E4{constructor(e){this.value=e}};c(E4,"Geography");var h1=E4;Ae.Geography=h1;var B4=class B4{constructor(e){this.value=new Date(e).toJSON()}};c(B4,"BigQueryTimestamp");var f1=B4;Ae.BigQueryTimestamp=f1;var M4=class M4{constructor(e){if(typeof e=="object"){let u;e.hours&&(u=wr.time(e).value);let r=e.year,a=e.month,s=e.day;u=u?" "+u:"",e=`${r}-${a}-${s}${u}`}else e=e.replace(/^(.*)T(.*)Z$/,"$1 $2");this.value=e}};c(M4,"BigQueryDatetime");var S1=M4;Ae.BigQueryDatetime=S1;var m4=class m4{constructor(e){if(typeof e=="object"){let u=e.hours,r=e.minutes||0,a=e.seconds||0,s=iu.defined(e.fractional)?"."+e.fractional:"";e=`${u}:${r}:${a}${s}`}this.value=e}};c(m4,"BigQueryTime");var O1=m4;Ae.BigQueryTime=O1;var _4=class _4 extends Number{constructor(e,u){if(super(typeof e=="object"?e.integerValue:e),this._schemaFieldName=typeof e=="object"?e.schemaFieldName:void 0,this.value=typeof e=="object"?e.integerValue.toString():e.toString(),this.type="BigQueryInt",u){if(typeof u.integerTypeCastFunction!="function")throw new Error("integerTypeCastFunction is not a function or was not provided.");let r=u.fields?NA(u.fields):void 0,a=!0;r&&(a=this._schemaFieldName?!!r.includes(this._schemaFieldName):!1),a&&(this.typeCastFunction=u.integerTypeCastFunction)}}valueOf(){if(!!this.typeCastFunction)try{return this.typeCastFunction(this.value)}catch(u){throw u.message=`integerTypeCastFunction threw an error: + + - ${u.message}`,u}else return wr.decodeIntegerValue_({integerValue:this.value,schemaFieldName:this._schemaFieldName})}toJSON(){return{type:this.type,value:this.value}}};c(_4,"BigQueryInt");var L1=_4;Ae.BigQueryInt=L1});var Ld=b(au=>{"use strict";Object.defineProperty(au,"__esModule",{value:!0});var Ur=S4();Object.defineProperty(au,"BigQuery",{enumerable:!0,get:function(){return Ur.BigQuery}});Object.defineProperty(au,"BigQueryDate",{enumerable:!0,get:function(){return Ur.BigQueryDate}});Object.defineProperty(au,"BigQueryDatetime",{enumerable:!0,get:function(){return Ur.BigQueryDatetime}});Object.defineProperty(au,"BigQueryInt",{enumerable:!0,get:function(){return Ur.BigQueryInt}});Object.defineProperty(au,"BigQueryTime",{enumerable:!0,get:function(){return Ur.BigQueryTime}});Object.defineProperty(au,"BigQueryTimestamp",{enumerable:!0,get:function(){return Ur.BigQueryTimestamp}});Object.defineProperty(au,"Geography",{enumerable:!0,get:function(){return Ur.Geography}});Object.defineProperty(au,"PROTOCOL_REGEX",{enumerable:!0,get:function(){return Ur.PROTOCOL_REGEX}});var DF=p4();Object.defineProperty(au,"Dataset",{enumerable:!0,get:function(){return DF.Dataset}});var wF=f4();Object.defineProperty(au,"Job",{enumerable:!0,get:function(){return wF.Job}});var UF=o4();Object.defineProperty(au,"Model",{enumerable:!0,get:function(){return UF.Model}});var PF=c4();Object.defineProperty(au,"Routine",{enumerable:!0,get:function(){return PF.Routine}});var kF=Od();Object.defineProperty(au,"Table",{enumerable:!0,get:function(){return kF.Table}})});var IA=b((HJ,CA)=>{"use strict";var{BigQuery:FF}=Ld(),E1=null,HF=c(i=>{if(E1)return E1;let e=i.projectId,u=i.keyFilename,r=i.location;return E1=new FF({keyFilename:u,location:r,projectId:e,scopes:["https://www.googleapis.com/auth/bigquery","https://www.googleapis.com/auth/drive"]}),E1},"connect"),VF=c(()=>{E1=null},"disconnect");CA.exports={connect:HF,disconnect:VF}});var xA=b((GJ,bA)=>{"use strict";var GF=c((i,e)=>{let u=c(async()=>{let[E]=await i.getDatasets();return E},"getDatasets"),r=c(async(E,A)=>{try{return await i.query({query:`SELECT * + FROM ${E}.${A}.INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU + INNER JOIN ${E}.${A}.INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC + USING(constraint_name) + WHERE TC.constraint_type = "PRIMARY KEY";`})}catch(g){return e.warn("Error while getting table constraints",g),[]}},"getPrimaryKeyConstraintsData"),a=c(async(E,A)=>{try{return await i.query({query:`SELECT + CCU.column_name as \`parent_column\`, + KCU.column_name as \`child_column\`, + TC.constraint_catalog, + TC.constraint_name, + TC.constraint_schema, + TC.constraint_type, + TC.table_catalog, + CCU.table_schema as \`parent_schema\`, + KCU.table_schema as \`child_schema\`, + CCU.table_name as \`parent_table\`, + KCU.table_name as \`child_table\` + FROM (${E}.${A}.INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS CCU + INNER JOIN ${E}.${A}.INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU + USING(constraint_name)) + INNER JOIN ${E}.${A}.INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC + USING(constraint_name) + WHERE TC.constraint_type = "FOREIGN KEY";`})}catch(g){return e.warn("Error while getting table constraints",g),[]}},"getForeignKeyConstraintsData"),s=c(async(E,A)=>{let g=(await r(E,A)).flat(),D=(await a(E,A)).flat();return{primaryKeyConstraintsData:g,foreignKeyConstraintsData:D}},"getConstraintsData"),n=c(async E=>{let[A]=await i.dataset(E).getTables();return A||[]},"getTables"),l=c(()=>new Promise((E,A)=>{i.request({uri:"https://bigquery.googleapis.com/bigquery/v2/projects"},(g,D)=>{if(g)return A(g);E(D.projects||[])})}),"getProjectList"),d=c(async()=>{let E=await i.getProjectId(),g=(await l()).find(D=>D.id===E);return g||{id:E}},"getProjectInfo"),p=c(async E=>{let[A]=await i.dataset(E).get();return A},"getDataset"),h=c(async(E,A,g)=>{let D=await f(A,E,g),I={integerTypeCastFunction(W){return Number(W)}};if(A.metadata.type!=="EXTERNAL")return A.getRows({wrapIntegers:I,maxResults:D});try{return await A.query({query:`SELECT * FROM ${E} LIMIT ${D};`,wrapIntegers:I})}catch(W){return e.warn(`There is an issue during getting data from external table ${E}. Error: ${W.message}`,W),[[]]}},"getRows"),f=c(async(E,A,g)=>{if(g.active==="absolute")return Number(g.absolute.value);let D=await _(E,A);return S(D,g)},"getLimit"),S=c((E,A)=>{let g=Math.ceil(E*A.relative.value/100);return Math.min(g,A.maxValue)},"getSampleDocSize"),_=c(async(E,A)=>{var g;try{let[D]=await E.query({query:`SELECT COUNT(*) AS rows_count FROM ${A}`});return((g=D[0])==null?void 0:g.rows_count)||1e3}catch(D){return e.warn("Error while getting rows count, using default value: 1000",D),1e3}},"getTableRowsCount");return{getDatasets:u,getTables:n,getProjectInfo:d,getDataset:p,getRows:h,getTableRowsCount:_,getConstraintsData:s,getViewName:c(E=>`${E} (v)`,"getViewName")}},"createBigQueryHelper");bA.exports=GF});var PA=b((KJ,UA)=>{"use strict";var qF=c((i,e)=>({properties:vA(i.fields||[],e)}),"createJsonSchema"),vA=c((i,e)=>i.reduce((u,r)=>({...u,[r.name]:wA(r,DA(r.name,e))}),{}),"getProperties"),DA=c((i,e=[])=>e.map(u=>u[i]).filter(Boolean),"getValues"),wA=c((i,e)=>{let u=WF(i.type),r=KF(i.mode),a=jF(u,e),s=i.description,n=i.precision,l=i.scale,d=i.maxLength;if(i.mode==="REPEATED")return{type:"array",items:wA({...i,mode:"REQUIRED"},DA(0,e))};if(Array.isArray(i.fields)){let p=vA(i.fields,e);return{type:u,description:s,properties:p,dataTypeMode:r,subtype:a}}return{type:u,description:s,dataTypeMode:r,precision:n,scale:l,length:d,subtype:a}},"convertField"),KF=c(i=>{switch(i){case"REQUIRED":return"Required";case"REPEATED":return"Repeated";default:return"Nullable"}},"getTypeMode"),WF=c(i=>{switch(i){case"RECORD":return"struct";case"GEOGRAPHY":return"geography";case"TIME":return"time";case"DATETIME":return"datetime";case"DATE":return"date";case"TIMESTAMP":return"timestamp";case"BOOLEAN":return"bool";case"BIGNUMERIC":return"bignumeric";case"NUMERIC":return"numeric";case"FLOAT":return"float64";case"INTEGER":return"int64";case"BYTES":return"bytes";case"JSON":return"json";case"STRING":default:return"string"}},"getType"),jF=c((i,e)=>{if(i!=="json")return;let u=XF(e)||e[0];return JF(QF(u))},"getSubtype"),XF=c(i=>i.find(e=>{if(typeof e!="string")return!1;try{return JSON.parse(e)}catch{return!1}}),"findJsonValue"),QF=c(i=>{try{return JSON.parse(i)}catch{return i}},"safeParse"),JF=c(i=>{if(Array.isArray(i))return"array";let e=typeof i;return e==="undefined"?"object":e},"getParsedJsonValueType");UA.exports={createJsonSchema:qF}});var FA=b((jJ,kA)=>{"use strict";var zF=c((i,e)=>({isConstraintComposed:u,constraintType:r})=>r!=="PRIMARY KEY"?i:u?{...i,compositePrimaryKey:!0,primaryKey:!0}:{...i,primaryKey:!0},"primaryKeyConstraintIntoPropertyInjector"),$F=[zF],ZF=c(({datasetId:i,tableName:e,properties:u,constraintsData:r})=>{let a=[];return{propertiesWithInjectedConstraints:Object.fromEntries(Object.entries(u).map(([n,l])=>{let d=r.find(({table_schema:O,table_name:E,column_name:A})=>O===i&&E===e&&A===n);if(!d)return[n,l];let p=eH(r),h=d.constraint_name,f=d.constraint_type,S=p[h].length>1;f==="PRIMARY KEY"&&S&&(a=uH({primaryKey:a,constraintName:h,propertyName:n}));let _=$F.reduce((O,E)=>E(O,d)({isConstraintComposed:S,constraintType:f}),l);return[n,_]})),primaryKey:a.map(n=>({compositePrimaryKey:n.compositePrimaryKey}))}},"injectPrimaryKeyConstraintsIntoTable"),eH=c(i=>{let e=Array.from(new Set(i.map(({constraint_name:r})=>r))),u={};return e.forEach(r=>{u={...u,[r]:i.filter(({constraint_name:a})=>a===r)}}),u},"groupPropertiesByConstraints"),uH=c(({primaryKey:i,constraintName:e,propertyName:u})=>{let r=i.find(({name:a})=>a===e);if(r){let a=i.filter(({name:n})=>n!==e),s={...r,compositePrimaryKey:[...r.compositePrimaryKey,u]};return[...a,s]}else return[...i,{name:e,compositePrimaryKey:[{name:u}]}]},"getCompositePrimaryKeyFieldModelData"),tH=c(i=>{let[e,u]=i.split(".");return u},"getConstraintBusinessName"),rH=c(i=>i.reduce((e,u)=>{let r=tH(u.constraint_name),a=e.find(({relationshipName:l})=>l===r),{parent_column:s,child_column:n}=u;if(a){let l=a.parentField.includes(s),d=a.childField.includes(n),p={...a,childField:d?a.childField:[...a.childField,n],parentField:l?a.parentField:[...a.parentField,s]};return[...e.filter(({relationshipName:h})=>h!==r),p]}else{let l={relationshipName:r,relationshipType:"Foreign Key",childDbName:u.child_schema,childCollection:u.child_table,childField:[u.child_column],dbName:u.parent_schema,parentCollection:u.parent_table,parentField:[u.parent_column],relationshipInfo:{}};return[...e,l]}},[]),"reverseForeignKeys");kA.exports={injectPrimaryKeyConstraintsIntoTable:ZF,reverseForeignKeys:rH}});var su=b((QJ,qA)=>{function HA(i){return Array.isArray(i)?"["+i.join(", ")+"]":"null"}c(HA,"arrayToString");String.prototype.seed=String.prototype.seed||Math.round(Math.random()*Math.pow(2,32));String.prototype.hashCode=function(){let i=this.toString(),e,u,r=i.length&3,a=i.length-r,s=String.prototype.seed,n=3432918353,l=461845907,d=0;for(;d>>16)*n&65535)<<16)&4294967295,u=u<<15|u>>>17,u=(u&65535)*l+(((u>>>16)*l&65535)<<16)&4294967295,s^=u,s=s<<13|s>>>19,e=(s&65535)*5+(((s>>>16)*5&65535)<<16)&4294967295,s=(e&65535)+27492+(((e>>>16)+58964&65535)<<16);switch(u=0,r){case 3:u^=(i.charCodeAt(d+2)&255)<<16;case 2:u^=(i.charCodeAt(d+1)&255)<<8;case 1:u^=i.charCodeAt(d)&255,u=(u&65535)*n+(((u>>>16)*n&65535)<<16)&4294967295,u=u<<15|u>>>17,u=(u&65535)*l+(((u>>>16)*l&65535)<<16)&4294967295,s^=u}return s^=i.length,s^=s>>>16,s=(s&65535)*2246822507+(((s>>>16)*2246822507&65535)<<16)&4294967295,s^=s>>>13,s=(s&65535)*3266489909+(((s>>>16)*3266489909&65535)<<16)&4294967295,s^=s>>>16,s>>>0};function VA(i,e){return i?i.equals(e):i==e}c(VA,"standardEqualsFunction");function GA(i){return i?i.hashCode():-1}c(GA,"standardHashCodeFunction");var g4=class g4{constructor(e,u){this.data={},this.hashFunction=e||GA,this.equalsFunction=u||VA}add(e){let r="hash_"+this.hashFunction(e);if(r in this.data){let a=this.data[r];for(let s=0;s>>17,r=r*461845907,this.count=this.count+1;let a=this.hash^r;a=a<<13|a>>>19,a=a*5+3864292196,this.hash=a}}}finish(){let e=this.hash^this.count*4;return e=e^e>>>16,e=e*2246822507,e=e^e>>>13,e=e*3266489909,e=e^e>>>16,e}};c(I4,"Hash");var B1=I4;function iH(){let i=new B1;return i.update.apply(i,arguments),i.finish()}c(iH,"hashStuff");function aH(i,e){return i=i.replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r"),e&&(i=i.replace(/ /g,"\xB7")),i}c(aH,"escapeWhitespace");function sH(i){return i.replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1)})}c(sH,"titleCase");function nH(i,e){if(!Array.isArray(i)||!Array.isArray(e))return!1;if(i===e)return!0;if(i.length!==e.length)return!1;for(let u=0;u{var b4=class b4{constructor(){this.source=null,this.type=null,this.channel=null,this.start=null,this.stop=null,this.tokenIndex=null,this.line=null,this.column=null,this._text=null}getTokenSource(){return this.source[0]}getInputStream(){return this.source[1]}get text(){return this._text}set text(e){this._text=e}};c(b4,"Token");var et=b4;et.INVALID_TYPE=0;et.EPSILON=-2;et.MIN_USER_TOKEN_TYPE=1;et.EOF=-1;et.DEFAULT_CHANNEL=0;et.HIDDEN_CHANNEL=1;var M1=class M1 extends et{constructor(e,u,r,a,s){super(),this.source=e!==void 0?e:M1.EMPTY_SOURCE,this.type=u!==void 0?u:null,this.channel=r!==void 0?r:et.DEFAULT_CHANNEL,this.start=a!==void 0?a:-1,this.stop=s!==void 0?s:-1,this.tokenIndex=-1,this.source[0]!==null?(this.line=e[0].line,this.column=e[0].column):this.column=-1}clone(){let e=new M1(this.source,this.type,this.channel,this.start,this.stop);return e.tokenIndex=this.tokenIndex,e.line=this.line,e.column=this.column,e.text=this.text,e}toString(){let e=this.text;return e!==null?e=e.replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t"):e="","[@"+this.tokenIndex+","+this.start+":"+this.stop+"='"+e+"',<"+this.type+">"+(this.channel>0?",channel="+this.channel:"")+","+this.line+":"+this.column+"]"}get text(){if(this._text!==null)return this._text;let e=this.getInputStream();if(e===null)return null;let u=e.size;return this.start"}set text(e){this._text=e}};c(M1,"CommonToken");var yd=M1;yd.EMPTY_SOURCE=[null,null];KA.exports={Token:et,CommonToken:yd}});var qt=b((ZJ,WA)=>{var m1=class m1{constructor(){this.atn=null,this.stateNumber=m1.INVALID_STATE_NUMBER,this.stateType=null,this.ruleIndex=0,this.epsilonOnlyTransitions=!1,this.transitions=[],this.nextTokenWithinRule=null}toString(){return this.stateNumber}equals(e){return e instanceof m1?this.stateNumber===e.stateNumber:!1}isNonGreedyExitState(){return!1}addTransition(e,u){u===void 0&&(u=-1),this.transitions.length===0?this.epsilonOnlyTransitions=e.isEpsilon:this.epsilonOnlyTransitions!==e.isEpsilon&&(this.epsilonOnlyTransitions=!1),u===-1?this.transitions.push(e):this.transitions.splice(u,1,e)}};c(m1,"ATNState");var D0=m1;D0.INVALID_TYPE=0;D0.BASIC=1;D0.RULE_START=2;D0.BLOCK_START=3;D0.PLUS_BLOCK_START=4;D0.STAR_BLOCK_START=5;D0.TOKEN_START=6;D0.RULE_STOP=7;D0.BLOCK_END=8;D0.STAR_LOOP_BACK=9;D0.STAR_LOOP_ENTRY=10;D0.PLUS_LOOP_BACK=11;D0.LOOP_END=12;D0.serializationNames=["INVALID","BASIC","RULE_START","BLOCK_START","PLUS_BLOCK_START","STAR_BLOCK_START","TOKEN_START","RULE_STOP","BLOCK_END","STAR_LOOP_BACK","STAR_LOOP_ENTRY","PLUS_LOOP_BACK","LOOP_END"];D0.INVALID_STATE_NUMBER=-1;var K4=class K4 extends D0{constructor(){super(),this.stateType=D0.BASIC}};c(K4,"BasicState");var x4=K4,W4=class W4 extends D0{constructor(){return super(),this.decision=-1,this.nonGreedy=!1,this}};c(W4,"DecisionState");var Ti=W4,j4=class j4 extends Ti{constructor(){return super(),this.endState=null,this}};c(j4,"BlockStartState");var Xa=j4,X4=class X4 extends Xa{constructor(){return super(),this.stateType=D0.BLOCK_START,this}};c(X4,"BasicBlockStartState");var v4=X4,Q4=class Q4 extends D0{constructor(){return super(),this.stateType=D0.BLOCK_END,this.startState=null,this}};c(Q4,"BlockEndState");var D4=Q4,J4=class J4 extends D0{constructor(){return super(),this.stateType=D0.RULE_STOP,this}};c(J4,"RuleStopState");var w4=J4,z4=class z4 extends D0{constructor(){return super(),this.stateType=D0.RULE_START,this.stopState=null,this.isPrecedenceRule=!1,this}};c(z4,"RuleStartState");var U4=z4,$4=class $4 extends Ti{constructor(){return super(),this.stateType=D0.PLUS_LOOP_BACK,this}};c($4,"PlusLoopbackState");var P4=$4,Z4=class Z4 extends Xa{constructor(){return super(),this.stateType=D0.PLUS_BLOCK_START,this.loopBackState=null,this}};c(Z4,"PlusBlockStartState");var k4=Z4,e6=class e6 extends Xa{constructor(){return super(),this.stateType=D0.STAR_BLOCK_START,this}};c(e6,"StarBlockStartState");var F4=e6,u6=class u6 extends D0{constructor(){return super(),this.stateType=D0.STAR_LOOP_BACK,this}};c(u6,"StarLoopbackState");var H4=u6,t6=class t6 extends Ti{constructor(){return super(),this.stateType=D0.STAR_LOOP_ENTRY,this.loopBackState=null,this.isPrecedenceDecision=null,this}};c(t6,"StarLoopEntryState");var V4=t6,r6=class r6 extends D0{constructor(){return super(),this.stateType=D0.LOOP_END,this.loopBackState=null,this}};c(r6,"LoopEndState");var G4=r6,i6=class i6 extends Ti{constructor(){return super(),this.stateType=D0.TOKEN_START,this}};c(i6,"TokensStartState");var q4=i6;WA.exports={ATNState:D0,BasicState:x4,DecisionState:Ti,BlockStartState:Xa,BlockEndState:D4,LoopEndState:G4,RuleStartState:U4,RuleStopState:w4,TokensStartState:q4,PlusLoopbackState:P4,StarLoopbackState:H4,StarLoopEntryState:V4,PlusBlockStartState:k4,StarBlockStartState:F4,BasicBlockStartState:v4}});var za=b((uz,QA)=>{var{Set:jA,Hash:oH,equalArrays:XA}=su(),Pr=class Pr{hashCode(){let e=new oH;return this.updateHashCode(e),e.finish()}evaluate(e,u){}evalPrecedence(e,u){return this}static andContext(e,u){if(e===null||e===Pr.NONE)return u;if(u===null||u===Pr.NONE)return e;let r=new a6(e,u);return r.opnds.length===1?r.opnds[0]:r}static orContext(e,u){if(e===null)return u;if(u===null)return e;if(e===Pr.NONE||u===Pr.NONE)return Pr.NONE;let r=new s6(e,u);return r.opnds.length===1?r.opnds[0]:r}};c(Pr,"SemanticContext");var nu=Pr,Cd=class Cd extends nu{constructor(e,u,r){super(),this.ruleIndex=e===void 0?-1:e,this.predIndex=u===void 0?-1:u,this.isCtxDependent=r===void 0?!1:r}evaluate(e,u){let r=this.isCtxDependent?u:null;return e.sempred(r,this.ruleIndex,this.predIndex)}updateHashCode(e){e.update(this.ruleIndex,this.predIndex,this.isCtxDependent)}equals(e){return this===e?!0:e instanceof Cd?this.ruleIndex===e.ruleIndex&&this.predIndex===e.predIndex&&this.isCtxDependent===e.isCtxDependent:!1}toString(){return"{"+this.ruleIndex+":"+this.predIndex+"}?"}};c(Cd,"Predicate");var Nd=Cd;nu.NONE=new Nd;var _1=class _1 extends nu{constructor(e){super(),this.precedence=e===void 0?0:e}evaluate(e,u){return e.precpred(u,this.precedence)}evalPrecedence(e,u){return e.precpred(u,this.precedence)?nu.NONE:null}compareTo(e){return this.precedence-e.precedence}updateHashCode(e){e.update(this.precedence)}equals(e){return this===e?!0:e instanceof _1?this.precedence===e.precedence:!1}toString(){return"{"+this.precedence+">=prec}?"}static filterPrecedencePredicates(e){let u=[];return e.values().map(function(r){r instanceof _1&&u.push(r)}),u}};c(_1,"PrecedencePredicate");var T1=_1,Qa=class Qa extends nu{constructor(e,u){super();let r=new jA;e instanceof Qa?e.opnds.map(function(s){r.add(s)}):r.add(e),u instanceof Qa?u.opnds.map(function(s){r.add(s)}):r.add(u);let a=T1.filterPrecedencePredicates(r);if(a.length>0){let s=null;a.map(function(n){(s===null||n.precedenceu.toString());return(e.length>3?e.slice(3):e).join("&&")}};c(Qa,"AND");var a6=Qa,Ja=class Ja extends nu{constructor(e,u){super();let r=new jA;e instanceof Ja?e.opnds.map(function(s){r.add(s)}):r.add(e),u instanceof Ja?u.opnds.map(function(s){r.add(s)}):r.add(u);let a=T1.filterPrecedencePredicates(r);if(a.length>0){let s=a.sort(function(l,d){return l.compareTo(d)}),n=s[s.length-1];r.add(n)}this.opnds=Array.from(r.values())}equals(e){return this===e?!0:e instanceof Ja?XA(this.opnds,e.opnds):!1}updateHashCode(e){e.update(this.opnds,"OR")}evaluate(e,u){for(let r=0;ru.toString());return(e.length>3?e.slice(3):e).join("||")}};c(Ja,"OR");var s6=Ja;QA.exports={SemanticContext:nu,PrecedencePredicate:T1,Predicate:Nd}});var A1=b((rz,o6)=>{var{DecisionState:lH}=qt(),{SemanticContext:JA}=za(),{Hash:zA}=su();function $A(i,e){if(i===null){let u={state:null,alt:null,context:null,semanticContext:null};return e&&(u.reachesIntoOuterContext=0),u}else{let u={};return u.state=i.state||null,u.alt=i.alt===void 0?null:i.alt,u.context=i.context||null,u.semanticContext=i.semanticContext||null,e&&(u.reachesIntoOuterContext=i.reachesIntoOuterContext||0,u.precedenceFilterSuppressed=i.precedenceFilterSuppressed||!1),u}}c($A,"checkParams");var Y1=class Y1{constructor(e,u){this.checkContext(e,u),e=$A(e),u=$A(u,!0),this.state=e.state!==null?e.state:u.state,this.alt=e.alt!==null?e.alt:u.alt,this.context=e.context!==null?e.context:u.context,this.semanticContext=e.semanticContext!==null?e.semanticContext:u.semanticContext!==null?u.semanticContext:JA.NONE,this.reachesIntoOuterContext=u.reachesIntoOuterContext,this.precedenceFilterSuppressed=u.precedenceFilterSuppressed}checkContext(e,u){(e.context===null||e.context===void 0)&&(u===null||u.context===null||u.context===void 0)&&(this.context=null)}hashCode(){let e=new zA;return this.updateHashCode(e),e.finish()}updateHashCode(e){e.update(this.state.stateNumber,this.alt,this.context,this.semanticContext)}equals(e){return this===e?!0:e instanceof Y1?this.state.stateNumber===e.state.stateNumber&&this.alt===e.alt&&(this.context===null?e.context===null:this.context.equals(e.context))&&this.semanticContext.equals(e.semanticContext)&&this.precedenceFilterSuppressed===e.precedenceFilterSuppressed:!1}hashCodeForConfigSet(){let e=new zA;return e.update(this.state.stateNumber,this.alt,this.semanticContext),e.finish()}equalsForConfigSet(e){return this===e?!0:e instanceof Y1?this.state.stateNumber===e.state.stateNumber&&this.alt===e.alt&&this.semanticContext.equals(e.semanticContext):!1}toString(){return"("+this.state+","+this.alt+(this.context!==null?",["+this.context.toString()+"]":"")+(this.semanticContext!==JA.NONE?","+this.semanticContext.toString():"")+(this.reachesIntoOuterContext>0?",up="+this.reachesIntoOuterContext:"")+")"}};c(Y1,"ATNConfig");var Id=Y1,$a=class $a extends Id{constructor(e,u){super(e,u);let r=e.lexerActionExecutor||null;return this.lexerActionExecutor=r||(u!==null?u.lexerActionExecutor:null),this.passedThroughNonGreedyDecision=u!==null?this.checkNonGreedyDecision(u,this.state):!1,this.hashCodeForConfigSet=$a.prototype.hashCode,this.equalsForConfigSet=$a.prototype.equals,this}updateHashCode(e){e.update(this.state.stateNumber,this.alt,this.context,this.semanticContext,this.passedThroughNonGreedyDecision,this.lexerActionExecutor)}equals(e){return this===e||e instanceof $a&&this.passedThroughNonGreedyDecision===e.passedThroughNonGreedyDecision&&(this.lexerActionExecutor?this.lexerActionExecutor.equals(e.lexerActionExecutor):!e.lexerActionExecutor)&&super.equals(e)}checkNonGreedyDecision(e,u){return e.passedThroughNonGreedyDecision||u instanceof lH&&u.nonGreedy}};c($a,"LexerATNConfig");var n6=$a;o6.exports.ATNConfig=Id;o6.exports.LexerATNConfig=n6});var Su=b((az,ZA)=>{var{Token:R1}=me(),c6=class c6{constructor(e,u){this.start=e,this.stop=u}contains(e){return e>=this.start&&ethis.addInterval(u),this),this}reduce(e){if(e=r.stop?(this.intervals.splice(e+1,1),this.reduce(e)):u.stop>=r.start&&(this.intervals[e]=new ou(u.start,r.stop),this.intervals.splice(e+1,1))}}complement(e,u){let r=new bd;return r.addInterval(new ou(e,u+1)),this.intervals!==null&&this.intervals.forEach(a=>r.removeRange(a)),r}contains(e){if(this.intervals===null)return!1;for(let u=0;ua.start&&e.stop=a.stop?(this.intervals.splice(u,1),u=u-1):e.start"):e.push("'"+String.fromCharCode(r.start)+"'"):e.push("'"+String.fromCharCode(r.start)+"'..'"+String.fromCharCode(r.stop-1)+"'")}return e.length>1?"{"+e.join(", ")+"}":e[0]}toIndexString(){let e=[];for(let u=0;u"):e.push(r.start.toString()):e.push(r.start.toString()+".."+(r.stop-1).toString())}return e.length>1?"{"+e.join(", ")+"}":e[0]}toTokenString(e,u){let r=[];for(let a=0;a1?"{"+r.join(", ")+"}":r[0]}elementName(e,u,r){return r===R1.EOF?"":r===R1.EPSILON?"":e[r]||u[r]}get length(){return this.intervals.map(e=>e.length).reduce((e,u)=>e+u)}};c(bd,"IntervalSet");var l6=bd;ZA.exports={Interval:ou,IntervalSet:l6}});var Za=b((nz,eR)=>{var{Token:cH}=me(),{IntervalSet:M6}=Su(),{Predicate:dH,PrecedencePredicate:pH}=za(),m6=class m6{constructor(e){if(e==null)throw"target cannot be null.";this.target=e,this.isEpsilon=!1,this.label=null}};c(m6,"Transition");var Y0=m6;Y0.EPSILON=1;Y0.RANGE=2;Y0.RULE=3;Y0.PREDICATE=4;Y0.ATOM=5;Y0.ACTION=6;Y0.SET=7;Y0.NOT_SET=8;Y0.WILDCARD=9;Y0.PRECEDENCE=10;Y0.serializationNames=["INVALID","EPSILON","RANGE","RULE","PREDICATE","ATOM","ACTION","SET","NOT_SET","WILDCARD","PRECEDENCE"];Y0.serializationTypes={EpsilonTransition:Y0.EPSILON,RangeTransition:Y0.RANGE,RuleTransition:Y0.RULE,PredicateTransition:Y0.PREDICATE,AtomTransition:Y0.ATOM,ActionTransition:Y0.ACTION,SetTransition:Y0.SET,NotSetTransition:Y0.NOT_SET,WildcardTransition:Y0.WILDCARD,PrecedencePredicateTransition:Y0.PRECEDENCE};var _6=class _6 extends Y0{constructor(e,u){super(e),this.label_=u,this.label=this.makeLabel(),this.serializationType=Y0.ATOM}makeLabel(){let e=new M6;return e.addOne(this.label_),e}matches(e,u,r){return this.label_===e}toString(){return this.label_}};c(_6,"AtomTransition");var d6=_6,T6=class T6 extends Y0{constructor(e,u,r,a){super(e),this.ruleIndex=u,this.precedence=r,this.followState=a,this.serializationType=Y0.RULE,this.isEpsilon=!0}matches(e,u,r){return!1}};c(T6,"RuleTransition");var p6=T6,Y6=class Y6 extends Y0{constructor(e,u){super(e),this.serializationType=Y0.EPSILON,this.isEpsilon=!0,this.outermostPrecedenceReturn=u}matches(e,u,r){return!1}toString(){return"epsilon"}};c(Y6,"EpsilonTransition");var h6=Y6,A6=class A6 extends Y0{constructor(e,u,r){super(e),this.serializationType=Y0.RANGE,this.start=u,this.stop=r,this.label=this.makeLabel()}makeLabel(){let e=new M6;return e.addRange(this.start,this.stop),e}matches(e,u,r){return e>=this.start&&e<=this.stop}toString(){return"'"+String.fromCharCode(this.start)+"'..'"+String.fromCharCode(this.stop)+"'"}};c(A6,"RangeTransition");var f6=A6,R6=class R6 extends Y0{constructor(e){super(e)}};c(R6,"AbstractPredicateTransition");var g1=R6,g6=class g6 extends g1{constructor(e,u,r,a){super(e),this.serializationType=Y0.PREDICATE,this.ruleIndex=u,this.predIndex=r,this.isCtxDependent=a,this.isEpsilon=!0}matches(e,u,r){return!1}getPredicate(){return new dH(this.ruleIndex,this.predIndex,this.isCtxDependent)}toString(){return"pred_"+this.ruleIndex+":"+this.predIndex}};c(g6,"PredicateTransition");var S6=g6,y6=class y6 extends Y0{constructor(e,u,r,a){super(e),this.serializationType=Y0.ACTION,this.ruleIndex=u,this.actionIndex=r===void 0?-1:r,this.isCtxDependent=a===void 0?!1:a,this.isEpsilon=!0}matches(e,u,r){return!1}toString(){return"action_"+this.ruleIndex+":"+this.actionIndex}};c(y6,"ActionTransition");var O6=y6,N6=class N6 extends Y0{constructor(e,u){super(e),this.serializationType=Y0.SET,u!=null?this.label=u:(this.label=new M6,this.label.addOne(cH.INVALID_TYPE))}matches(e,u,r){return this.label.contains(e)}toString(){return this.label.toString()}};c(N6,"SetTransition");var xd=N6,C6=class C6 extends xd{constructor(e,u){super(e,u),this.serializationType=Y0.NOT_SET}matches(e,u,r){return e>=u&&e<=r&&!super.matches(e,u,r)}toString(){return"~"+super.toString()}};c(C6,"NotSetTransition");var L6=C6,I6=class I6 extends Y0{constructor(e){super(e),this.serializationType=Y0.WILDCARD}matches(e,u,r){return e>=u&&e<=r}toString(){return"."}};c(I6,"WildcardTransition");var E6=I6,b6=class b6 extends g1{constructor(e,u){super(e),this.serializationType=Y0.PRECEDENCE,this.precedence=u,this.isEpsilon=!0}matches(e,u,r){return!1}getPredicate(){return new pH(this.precedence)}toString(){return this.precedence+" >= _p"}};c(b6,"PrecedencePredicateTransition");var B6=b6;eR.exports={Transition:Y0,AtomTransition:d6,SetTransition:xd,NotSetTransition:L6,RuleTransition:p6,ActionTransition:O6,EpsilonTransition:h6,RangeTransition:f6,WildcardTransition:E6,PredicateTransition:S6,PrecedencePredicateTransition:B6,AbstractPredicateTransition:g1}});var Yi=b((lz,rR)=>{var{Token:hH}=me(),{Interval:uR}=Su(),tR=new uR(-1,-2),k6=class k6{};c(k6,"Tree");var x6=k6,F6=class F6 extends x6{constructor(){super()}};c(F6,"SyntaxTree");var v6=F6,H6=class H6 extends v6{constructor(){super()}};c(H6,"ParseTree");var vd=H6,V6=class V6 extends vd{constructor(){super()}getRuleContext(){throw new Error("missing interface implementation")}};c(V6,"RuleNode");var D6=V6,G6=class G6 extends vd{constructor(){super()}};c(G6,"TerminalNode");var es=G6,q6=class q6 extends es{constructor(){super()}};c(q6,"ErrorNode");var Dd=q6,K6=class K6{visit(e){return Array.isArray(e)?e.map(function(u){return u.accept(this)},this):e.accept(this)}visitChildren(e){return e.children?this.visit(e.children):null}visitTerminal(e){}visitErrorNode(e){}};c(K6,"ParseTreeVisitor");var w6=K6,W6=class W6{visitTerminal(e){}visitErrorNode(e){}enterEveryRule(e){}exitEveryRule(e){}};c(W6,"ParseTreeListener");var U6=W6,j6=class j6 extends es{constructor(e){super(),this.parentCtx=null,this.symbol=e}getChild(e){return null}getSymbol(){return this.symbol}getParent(){return this.parentCtx}getPayload(){return this.symbol}getSourceInterval(){if(this.symbol===null)return tR;let e=this.symbol.tokenIndex;return new uR(e,e)}getChildCount(){return 0}accept(e){return e.visitTerminal(this)}getText(){return this.symbol.text}toString(){return this.symbol.type===hH.EOF?"":this.symbol.text}};c(j6,"TerminalNodeImpl");var wd=j6,X6=class X6 extends wd{constructor(e){super(e)}isErrorNode(){return!0}accept(e){return e.visitErrorNode(this)}};c(X6,"ErrorNodeImpl");var P6=X6,Q6=class Q6{walk(e,u){if(u instanceof Dd||u.isErrorNode!==void 0&&u.isErrorNode())e.visitErrorNode(u);else if(u instanceof es)e.visitTerminal(u);else{this.enterRule(e,u);for(let a=0;a{var fH=su(),{Token:SH}=me(),{ErrorNode:OH,TerminalNode:iR,RuleNode:aR}=Yi(),Kt={toStringTree:function(i,e,u){e=e||null,u=u||null,u!==null&&(e=u.ruleNames);let r=Kt.getNodeText(i,e);r=fH.escapeWhitespace(r,!1);let a=i.getChildCount();if(a===0)return r;let s="("+r+" ";a>0&&(r=Kt.toStringTree(i.getChild(0),e),s=s.concat(r));for(let n=1;n{var{RuleNode:LH}=Yi(),{INVALID_INTERVAL:EH}=Yi(),BH=J6(),$6=class $6 extends LH{constructor(e,u){super(),this.parentCtx=e||null,this.invokingState=u||-1}depth(){let e=0,u=this;for(;u!==null;)u=u.parentCtx,e+=1;return e}isEmpty(){return this.invokingState===-1}getSourceInterval(){return EH}getRuleContext(){return this}getPayload(){return this}getText(){return this.getChildCount()===0?"":this.children.map(function(e){return e.getText()}).join("")}getAltNumber(){return 0}setAltNumber(e){}getChild(e){return null}getChildCount(){return 0}accept(e){return e.visitChildren(this)}toStringTree(e,u){return BH.toStringTree(this,e,u)}toString(e,u){e=e||null,u=u||null;let r=this,a="[";for(;r!==null&&r!==u;){if(e===null)r.isEmpty()||(a+=r.invokingState);else{let s=r.ruleIndex,n=s>=0&&s{var oR=Ud(),{Hash:cR,Map:dR,equalArrays:lR}=su(),N1=class N1{constructor(e){this.cachedHashCode=e}isEmpty(){return this===N1.EMPTY}hasEmptyPath(){return this.getReturnState(this.length-1)===N1.EMPTY_RETURN_STATE}hashCode(){return this.cachedHashCode}updateHashCode(e){e.update(this.cachedHashCode)}};c(N1,"PredictionContext");var q0=N1;q0.EMPTY=null;q0.EMPTY_RETURN_STATE=2147483647;q0.globalNodeCount=1;q0.id=q0.globalNodeCount;var uS=class uS{constructor(){this.cache=new dR}add(e){if(e===q0.EMPTY)return q0.EMPTY;let u=this.cache.get(e)||null;return u!==null?u:(this.cache.put(e,e),e)}get(e){return this.cache.get(e)||null}get length(){return this.cache.length}};c(uS,"PredictionContextCache");var Z6=uS,C1=class C1 extends q0{constructor(e,u){let r=0,a=new cR;e!==null?a.update(e,u):a.update(1),r=a.finish(),super(r),this.parentCtx=e,this.returnState=u}getParent(e){return this.parentCtx}getReturnState(e){return this.returnState}equals(e){return this===e?!0:e instanceof C1?this.hashCode()!==e.hashCode()||this.returnState!==e.returnState?!1:this.parentCtx==null?e.parentCtx==null:this.parentCtx.equals(e.parentCtx):!1}toString(){let e=this.parentCtx===null?"":this.parentCtx.toString();return e.length===0?this.returnState===q0.EMPTY_RETURN_STATE?"$":""+this.returnState:""+this.returnState+" "+e}get length(){return 1}static create(e,u){return u===q0.EMPTY_RETURN_STATE&&e===null?q0.EMPTY:new C1(e,u)}};c(C1,"SingletonPredictionContext");var ku=C1,tS=class tS extends ku{constructor(){super(null,q0.EMPTY_RETURN_STATE)}isEmpty(){return!0}getParent(e){return null}getReturnState(e){return this.returnState}equals(e){return this===e}toString(){return"$"}};c(tS,"EmptyPredictionContext");var I1=tS;q0.EMPTY=new I1;var Pd=class Pd extends q0{constructor(e,u){let r=new cR;r.update(e,u);let a=r.finish();return super(a),this.parents=e,this.returnStates=u,this}isEmpty(){return this.returnStates[0]===q0.EMPTY_RETURN_STATE}getParent(e){return this.parents[e]}getReturnState(e){return this.returnStates[e]}equals(e){return this===e?!0:e instanceof Pd?this.hashCode()!==e.hashCode()?!1:lR(this.returnStates,e.returnStates)&&lR(this.parents,e.parents):!1}toString(){if(this.isEmpty())return"[]";{let e="[";for(let u=0;u0&&(e=e+", "),this.returnStates[u]===q0.EMPTY_RETURN_STATE){e=e+"$";continue}e=e+this.returnStates[u],this.parents[u]!==null?e=e+" "+this.parents[u]:e=e+"null"}return e+"]"}}get length(){return this.returnStates.length}};c(Pd,"ArrayPredictionContext");var Yt=Pd;function pR(i,e){if(e==null&&(e=oR.EMPTY),e.parentCtx===null||e===oR.EMPTY)return q0.EMPTY;let u=pR(i,e.parentCtx),a=i.states[e.invokingState].transitions[0];return ku.create(u,a.followState.stateNumber)}c(pR,"predictionContextFromRuleContext");function eS(i,e,u,r){if(i===e)return i;if(i instanceof ku&&e instanceof ku)return MH(i,e,u,r);if(u){if(i instanceof I1)return i;if(e instanceof I1)return e}return i instanceof ku&&(i=new Yt([i.getParent()],[i.returnState])),e instanceof ku&&(e=new Yt([e.getParent()],[e.returnState])),_H(i,e,u,r)}c(eS,"merge");function MH(i,e,u,r){if(r!==null){let s=r.get(i,e);if(s!==null||(s=r.get(e,i),s!==null))return s}let a=mH(i,e,u);if(a!==null)return r!==null&&r.set(i,e,a),a;if(i.returnState===e.returnState){let s=eS(i.parentCtx,e.parentCtx,u,r);if(s===i.parentCtx)return i;if(s===e.parentCtx)return e;let n=ku.create(s,i.returnState);return r!==null&&r.set(i,e,n),n}else{let s=null;if((i===e||i.parentCtx!==null&&i.parentCtx===e.parentCtx)&&(s=i.parentCtx),s!==null){let p=[i.returnState,e.returnState];i.returnState>e.returnState&&(p[0]=e.returnState,p[1]=i.returnState);let h=[s,s],f=new Yt(h,p);return r!==null&&r.set(i,e,f),f}let n=[i.returnState,e.returnState],l=[i.parentCtx,e.parentCtx];i.returnState>e.returnState&&(n[0]=e.returnState,n[1]=i.returnState,l=[e.parentCtx,i.parentCtx]);let d=new Yt(l,n);return r!==null&&r.set(i,e,d),d}}c(MH,"mergeSingletons");function mH(i,e,u){if(u){if(i===q0.EMPTY||e===q0.EMPTY)return q0.EMPTY}else{if(i===q0.EMPTY&&e===q0.EMPTY)return q0.EMPTY;if(i===q0.EMPTY){let r=[e.returnState,q0.EMPTY_RETURN_STATE],a=[e.parentCtx,null];return new Yt(a,r)}else if(e===q0.EMPTY){let r=[i.returnState,q0.EMPTY_RETURN_STATE],a=[i.parentCtx,null];return new Yt(a,r)}}return null}c(mH,"mergeRoot");function _H(i,e,u,r){if(r!==null){let h=r.get(i,e);if(h!==null||(h=r.get(e,i),h!==null))return h}let a=0,s=0,n=0,l=[],d=[];for(;a{var{Set:SR,BitSet:OR}=su(),{Token:Ai}=me(),{ATNConfig:YH}=A1(),{IntervalSet:LR}=Su(),{RuleStopState:AH}=qt(),{RuleTransition:RH,NotSetTransition:gH,WildcardTransition:yH,AbstractPredicateTransition:NH}=Za(),{predictionContextFromRuleContext:CH,PredictionContext:ER,SingletonPredictionContext:IH}=Wt(),b1=class b1{constructor(e){this.atn=e}getDecisionLookahead(e){if(e===null)return null;let u=e.transitions.length,r=[];for(let a=0;a{var bH=rS(),{IntervalSet:xH}=Su(),{Token:us}=me(),iS=class iS{constructor(e,u){this.grammarType=e,this.maxTokenType=u,this.states=[],this.decisionToState=[],this.ruleToStartState=[],this.ruleToStopState=null,this.modeNameToStartState={},this.ruleToTokenType=null,this.lexerActions=null,this.modeToStartState=[]}nextTokensInContext(e,u){return new bH(this).LOOK(e,null,u)}nextTokensNoContext(e){return e.nextTokenWithinRule!==null||(e.nextTokenWithinRule=this.nextTokensInContext(e,null),e.nextTokenWithinRule.readOnly=!0),e.nextTokenWithinRule}nextTokens(e,u){return u===void 0?this.nextTokensNoContext(e):this.nextTokensInContext(e,u)}addState(e){e!==null&&(e.atn=this,e.stateNumber=this.states.length),this.states.push(e)}removeState(e){this.states[e.stateNumber]=null}defineDecisionState(e){return this.decisionToState.push(e),e.decision=this.decisionToState.length-1,e.decision}getDecisionState(e){return this.decisionToState.length===0?null:this.decisionToState[e]}getExpectedTokens(e,u){if(e<0||e>=this.states.length)throw"Invalid state number.";let r=this.states[e],a=this.nextTokens(r);if(!a.contains(us.EPSILON))return a;let s=new xH;for(s.addSet(a),s.removeOne(us.EPSILON);u!==null&&u.invokingState>=0&&a.contains(us.EPSILON);){let l=this.states[u.invokingState].transitions[0];a=this.nextTokens(l.followState),s.addSet(a),s.removeOne(us.EPSILON),u=u.parentCtx}return a.contains(us.EPSILON)&&s.addOne(us.EOF),s}};c(iS,"ATN");var Fd=iS;Fd.INVALID_ALT_NUMBER=0;MR.exports=Fd});var _R=b((Mz,mR)=>{mR.exports={LEXER:0,PARSER:1}});var sS=b((mz,TR)=>{var aS=class aS{constructor(e){e===void 0&&(e=null),this.readOnly=!1,this.verifyATN=e===null?!0:e.verifyATN,this.generateRuleBypassTransitions=e===null?!1:e.generateRuleBypassTransitions}};c(aS,"ATNDeserializationOptions");var ts=aS;ts.defaultOptions=new ts;ts.defaultOptions.readOnly=!0;TR.exports=ts});var LS=b((Tz,YR)=>{var jt={CHANNEL:0,CUSTOM:1,MODE:2,MORE:3,POP_MODE:4,PUSH_MODE:5,SKIP:6,TYPE:7},hS=class hS{constructor(e){this.actionType=e,this.isPositionDependent=!1}hashCode(){let e=new Hash;return this.updateHashCode(e),e.finish()}updateHashCode(e){e.update(this.actionType)}equals(e){return this===e}};c(hS,"LexerAction");var ut=hS,fS=class fS extends ut{constructor(){super(jt.SKIP)}execute(e){e.skip()}toString(){return"skip"}};c(fS,"LexerSkipAction");var x1=fS;x1.INSTANCE=new x1;var Hd=class Hd extends ut{constructor(e){super(jt.TYPE),this.type=e}execute(e){e.type=this.type}updateHashCode(e){e.update(this.actionType,this.type)}equals(e){return this===e?!0:e instanceof Hd?this.type===e.type:!1}toString(){return"type("+this.type+")"}};c(Hd,"LexerTypeAction");var nS=Hd,Vd=class Vd extends ut{constructor(e){super(jt.PUSH_MODE),this.mode=e}execute(e){e.pushMode(this.mode)}updateHashCode(e){e.update(this.actionType,this.mode)}equals(e){return this===e?!0:e instanceof Vd?this.mode===e.mode:!1}toString(){return"pushMode("+this.mode+")"}};c(Vd,"LexerPushModeAction");var oS=Vd,SS=class SS extends ut{constructor(){super(jt.POP_MODE)}execute(e){e.popMode()}toString(){return"popMode"}};c(SS,"LexerPopModeAction");var v1=SS;v1.INSTANCE=new v1;var OS=class OS extends ut{constructor(){super(jt.MORE)}execute(e){e.more()}toString(){return"more"}};c(OS,"LexerMoreAction");var D1=OS;D1.INSTANCE=new D1;var Gd=class Gd extends ut{constructor(e){super(jt.MODE),this.mode=e}execute(e){e.mode(this.mode)}updateHashCode(e){e.update(this.actionType,this.mode)}equals(e){return this===e?!0:e instanceof Gd?this.mode===e.mode:!1}toString(){return"mode("+this.mode+")"}};c(Gd,"LexerModeAction");var lS=Gd,qd=class qd extends ut{constructor(e,u){super(jt.CUSTOM),this.ruleIndex=e,this.actionIndex=u,this.isPositionDependent=!0}execute(e){e.action(null,this.ruleIndex,this.actionIndex)}updateHashCode(e){e.update(this.actionType,this.ruleIndex,this.actionIndex)}equals(e){return this===e?!0:e instanceof qd?this.ruleIndex===e.ruleIndex&&this.actionIndex===e.actionIndex:!1}};c(qd,"LexerCustomAction");var cS=qd,Kd=class Kd extends ut{constructor(e){super(jt.CHANNEL),this.channel=e}execute(e){e._channel=this.channel}updateHashCode(e){e.update(this.actionType,this.channel)}equals(e){return this===e?!0:e instanceof Kd?this.channel===e.channel:!1}toString(){return"channel("+this.channel+")"}};c(Kd,"LexerChannelAction");var dS=Kd,Wd=class Wd extends ut{constructor(e,u){super(u.actionType),this.offset=e,this.action=u,this.isPositionDependent=!0}execute(e){this.action.execute(e)}updateHashCode(e){e.update(this.actionType,this.offset,this.action)}equals(e){return this===e?!0:e instanceof Wd?this.offset===e.offset&&this.action===e.action:!1}};c(Wd,"LexerIndexedCustomAction");var pS=Wd;YR.exports={LexerActionType:jt,LexerSkipAction:x1,LexerChannelAction:dS,LexerCustomAction:cS,LexerIndexedCustomAction:pS,LexerMoreAction:D1,LexerTypeAction:nS,LexerPushModeAction:oS,LexerPopModeAction:v1,LexerModeAction:lS}});var NS=b((Az,xR)=>{var{Token:ES}=me(),vH=Ri(),jd=_R(),{ATNState:lu,BasicState:AR,DecisionState:DH,BlockStartState:BS,BlockEndState:MS,LoopEndState:rs,RuleStartState:RR,RuleStopState:w1,TokensStartState:wH,PlusLoopbackState:gR,StarLoopbackState:mS,StarLoopEntryState:is,PlusBlockStartState:_S,StarBlockStartState:TS,BasicBlockStartState:yR}=qt(),{Transition:At,AtomTransition:YS,SetTransition:UH,NotSetTransition:PH,RuleTransition:NR,RangeTransition:CR,ActionTransition:kH,EpsilonTransition:U1,WildcardTransition:FH,PredicateTransition:HH,PrecedencePredicateTransition:VH}=Za(),{IntervalSet:GH}=Su(),qH=sS(),{LexerActionType:kr,LexerSkipAction:KH,LexerChannelAction:WH,LexerCustomAction:jH,LexerMoreAction:XH,LexerTypeAction:QH,LexerPushModeAction:JH,LexerPopModeAction:zH,LexerModeAction:$H}=LS(),ZH="AADB8D7E-AEEF-4415-AD2B-8204D6CF042E",gS="59627784-3BE5-417A-B9EB-8131A7286089",AS=[ZH,gS],IR=3,bR=gS;function Xd(i,e){let u=[];return u[i-1]=e,u.map(function(r){return e})}c(Xd,"initArray");var yS=class yS{constructor(e){e==null&&(e=qH.defaultOptions),this.deserializationOptions=e,this.stateFactories=null,this.actionFactories=null}isFeatureSupported(e,u){let r=AS.indexOf(e);return r<0?!1:AS.indexOf(u)>=r}deserialize(e){this.reset(e),this.checkVersion(),this.checkUUID();let u=this.readATN();this.readStates(u),this.readRules(u),this.readModes(u);let r=[];return this.readSets(u,r,this.readInt.bind(this)),this.isFeatureSupported(gS,this.uuid)&&this.readSets(u,r,this.readInt32.bind(this)),this.readEdges(u,r),this.readDecisions(u),this.readLexerActions(u),this.markPrecedenceDecisions(u),this.verifyATN(u),this.deserializationOptions.generateRuleBypassTransitions&&u.grammarType===jd.PARSER&&(this.generateRuleBypassTransitions(u),this.verifyATN(u)),u}reset(e){let u=c(function(a){let s=a.charCodeAt(0);return s>1?s-2:s+65534},"adjust"),r=e.split("").map(u);r[0]=e.charCodeAt(0),this.data=r,this.pos=0}checkVersion(){let e=this.readInt();if(e!==IR)throw"Could not deserialize ATN with version "+e+" (expected "+IR+")."}checkUUID(){let e=this.readUUID();if(AS.indexOf(e)<0)throw""+e+bR,bR;this.uuid=e}readATN(){let e=this.readInt(),u=this.readInt();return new vH(e,u)}readStates(e){let u,r,a,s=[],n=[],l=this.readInt();for(let h=0;h0;)s.addTransition(p.transitions[h-1]),p.transitions=p.transitions.slice(-1);e.ruleToStartState[u].addTransition(new U1(s)),n.addTransition(new U1(d));let f=new AR;e.addState(f),f.addTransition(new YS(n,e.ruleToTokenType[u])),s.addTransition(new U1(f))}stateIsEndStateFor(e,u){if(e.ruleIndex!==u||!(e instanceof is))return null;let r=e.transitions[e.transitions.length-1].target;return r instanceof rs&&r.epsilonOnlyTransitions&&r.transitions[0].target instanceof w1?e:null}markPrecedenceDecisions(e){for(let u=0;u=0):this.checkCondition(r.transitions.length<=1||r instanceof w1)}}checkCondition(e,u){if(!e)throw u==null&&(u="IllegalState"),u}readInt(){return this.data[this.pos++]}readInt32(){let e=this.readInt(),u=this.readInt();return e|u<<16}readLong(){let e=this.readInt32(),u=this.readInt32();return e&4294967295|u<<32}readUUID(){let e=[];for(let u=7;u>=0;u--){let r=this.readInt();e[2*u+1]=r&255,e[2*u]=r>>8&255}return Xe[e[0]]+Xe[e[1]]+Xe[e[2]]+Xe[e[3]]+"-"+Xe[e[4]]+Xe[e[5]]+"-"+Xe[e[6]]+Xe[e[7]]+"-"+Xe[e[8]]+Xe[e[9]]+"-"+Xe[e[10]]+Xe[e[11]]+Xe[e[12]]+Xe[e[13]]+Xe[e[14]]+Xe[e[15]]}edgeFactory(e,u,r,a,s,n,l,d){let p=e.states[a];switch(u){case At.EPSILON:return new U1(p);case At.RANGE:return l!==0?new CR(p,ES.EOF,n):new CR(p,s,n);case At.RULE:return new NR(e.states[s],n,l,p);case At.PREDICATE:return new HH(p,s,n,l!==0);case At.PRECEDENCE:return new VH(p,s);case At.ATOM:return l!==0?new YS(p,ES.EOF):new YS(p,s);case At.ACTION:return new kH(p,s,n,l!==0);case At.SET:return new UH(p,d[s]);case At.NOT_SET:return new PH(p,d[s]);case At.WILDCARD:return new FH(p);default:throw"The specified transition type: "+u+" is not valid."}}stateFactory(e,u){if(this.stateFactories===null){let r=[];r[lu.INVALID_TYPE]=null,r[lu.BASIC]=()=>new AR,r[lu.RULE_START]=()=>new RR,r[lu.BLOCK_START]=()=>new yR,r[lu.PLUS_BLOCK_START]=()=>new _S,r[lu.STAR_BLOCK_START]=()=>new TS,r[lu.TOKEN_START]=()=>new wH,r[lu.RULE_STOP]=()=>new w1,r[lu.BLOCK_END]=()=>new MS,r[lu.STAR_LOOP_BACK]=()=>new mS,r[lu.STAR_LOOP_ENTRY]=()=>new is,r[lu.PLUS_LOOP_BACK]=()=>new gR,r[lu.LOOP_END]=()=>new rs,this.stateFactories=r}if(e>this.stateFactories.length||this.stateFactories[e]===null)throw"The specified state type "+e+" is not valid.";{let r=this.stateFactories[e]();if(r!==null)return r.ruleIndex=u,r}}lexerActionFactory(e,u,r){if(this.actionFactories===null){let a=[];a[kr.CHANNEL]=(s,n)=>new WH(s),a[kr.CUSTOM]=(s,n)=>new jH(s,n),a[kr.MODE]=(s,n)=>new $H(s),a[kr.MORE]=(s,n)=>XH.INSTANCE,a[kr.POP_MODE]=(s,n)=>zH.INSTANCE,a[kr.PUSH_MODE]=(s,n)=>new JH(s),a[kr.SKIP]=(s,n)=>KH.INSTANCE,a[kr.TYPE]=(s,n)=>new QH(s),this.actionFactories=a}if(e>this.actionFactories.length||this.actionFactories[e]===null)throw"The specified lexer action type "+e+" is not valid.";return this.actionFactories[e](u,r)}};c(yS,"ATNDeserializer");var RS=yS;function eV(){let i=[];for(let e=0;e<256;e++)i[e]=(e+256).toString(16).substr(1).toUpperCase();return i}c(eV,"createByteToHex");var Xe=eV();xR.exports=RS});var F1=b((gz,vR)=>{var IS=class IS{syntaxError(e,u,r,a,s,n){}reportAmbiguity(e,u,r,a,s,n,l){}reportAttemptingFullContext(e,u,r,a,s,n){}reportContextSensitivity(e,u,r,a,s,n){}};c(IS,"ErrorListener");var P1=IS,bS=class bS extends P1{constructor(){super()}syntaxError(e,u,r,a,s,n){console.error("line "+r+":"+a+" "+s)}};c(bS,"ConsoleErrorListener");var k1=bS;k1.INSTANCE=new k1;var xS=class xS extends P1{constructor(e){if(super(),e===null)throw"delegates";return this.delegates=e,this}syntaxError(e,u,r,a,s,n){this.delegates.map(l=>l.syntaxError(e,u,r,a,s,n))}reportAmbiguity(e,u,r,a,s,n,l){this.delegates.map(d=>d.reportAmbiguity(e,u,r,a,s,n,l))}reportAttemptingFullContext(e,u,r,a,s,n){this.delegates.map(l=>l.reportAttemptingFullContext(e,u,r,a,s,n))}reportContextSensitivity(e,u,r,a,s,n){this.delegates.map(l=>l.reportContextSensitivity(e,u,r,a,s,n))}};c(xS,"ProxyErrorListener");var CS=xS;vR.exports={ErrorListener:P1,ConsoleErrorListener:k1,ProxyErrorListener:CS}});var wS=b((Nz,DR)=>{var{Token:vS}=me(),{ConsoleErrorListener:uV}=F1(),{ProxyErrorListener:tV}=F1(),DS=class DS{constructor(){this._listeners=[uV.INSTANCE],this._interp=null,this._stateNumber=-1}checkVersion(e){let u="4.9.2";u!==e&&console.log("ANTLR runtime and generated code versions disagree: "+u+"!="+e)}addErrorListener(e){this._listeners.push(e)}removeErrorListeners(){this._listeners=[]}getTokenTypeMap(){let e=this.getTokenNames();if(e===null)throw"The current recognizer does not provide a list of token names.";let u=this.tokenTypeMapCache[e];return u===void 0&&(u=e.reduce(function(r,a,s){r[a]=s}),u.EOF=vS.EOF,this.tokenTypeMapCache[e]=u),u}getRuleIndexMap(){let e=this.ruleNames;if(e===null)throw"The current recognizer does not provide a list of rule names.";let u=this.ruleIndexMapCache[e];return u===void 0&&(u=e.reduce(function(r,a,s){r[a]=s}),this.ruleIndexMapCache[e]=u),u}getTokenType(e){let u=this.getTokenTypeMap()[e];return u!==void 0?u:vS.INVALID_TYPE}getErrorHeader(e){let u=e.getOffendingToken().line,r=e.getOffendingToken().column;return"line "+u+":"+r}getTokenErrorDisplay(e){if(e===null)return"";let u=e.text;return u===null&&(e.type===vS.EOF?u="":u="<"+e.type+">"),u=u.replace(` +`,"\\n").replace("\r","\\r").replace(" ","\\t"),"'"+u+"'"}getErrorListenerDispatch(){return new tV(this._listeners)}sempred(e,u,r){return!0}precpred(e,u){return!0}get state(){return this._stateNumber}set state(e){this._stateNumber=e}};c(DS,"Recognizer");var H1=DS;H1.tokenTypeMapCache={};H1.ruleIndexMapCache={};DR.exports=H1});var PR=b((Iz,UR)=>{var wR=me().CommonToken,PS=class PS{};c(PS,"TokenFactory");var US=PS,kS=class kS extends US{constructor(e){super(),this.copyText=e===void 0?!1:e}create(e,u,r,a,s,n,l,d){let p=new wR(e,u,a,s,n);return p.line=l,p.column=d,r!==null?p.text=r:this.copyText&&e[1]!==null&&(p.text=e[1].getText(s,n)),p}createThin(e,u){let r=new wR(null,e);return r.text=u,r}};c(kS,"CommonTokenFactory");var V1=kS;V1.DEFAULT=new V1;UR.exports=V1});var tt=b((xz,kR)=>{var{PredicateTransition:rV}=Za(),{Interval:iV}=Su().Interval,Qd=class Qd extends Error{constructor(e){if(super(e.message),Error.captureStackTrace)Error.captureStackTrace(this,Qd);else var u=new Error().stack;this.message=e.message,this.recognizer=e.recognizer,this.input=e.input,this.ctx=e.ctx,this.offendingToken=null,this.offendingState=-1,this.recognizer!==null&&(this.offendingState=this.recognizer.state)}getExpectedTokens(){return this.recognizer!==null?this.recognizer.atn.getExpectedTokens(this.offendingState,this.ctx):null}toString(){return this.message}};c(Qd,"RecognitionException");var gi=Qd,KS=class KS extends gi{constructor(e,u,r,a){super({message:"",recognizer:e,input:u,ctx:null}),this.startIndex=r,this.deadEndConfigs=a}toString(){let e="";return this.startIndex>=0&&this.startIndex{var{Token:cu}=me(),sV=wS(),nV=PR(),{RecognitionException:oV}=tt(),{LexerNoViableAltException:lV}=tt(),Rt=class Rt extends sV{constructor(e){super(),this._input=e,this._factory=nV.DEFAULT,this._tokenFactorySourcePair=[this,e],this._interp=null,this._token=null,this._tokenStartCharIndex=-1,this._tokenStartLine=-1,this._tokenStartColumn=-1,this._hitEOF=!1,this._channel=cu.DEFAULT_CHANNEL,this._type=cu.INVALID_TYPE,this._modeStack=[],this._mode=Rt.DEFAULT_MODE,this._text=null}reset(){this._input!==null&&this._input.seek(0),this._token=null,this._type=cu.INVALID_TYPE,this._channel=cu.DEFAULT_CHANNEL,this._tokenStartCharIndex=-1,this._tokenStartColumn=-1,this._tokenStartLine=-1,this._text=null,this._hitEOF=!1,this._mode=Rt.DEFAULT_MODE,this._modeStack=[],this._interp.reset()}nextToken(){if(this._input===null)throw"nextToken requires a non-null input stream.";let e=this._input.mark();try{for(;;){if(this._hitEOF)return this.emitEOF(),this._token;this._token=null,this._channel=cu.DEFAULT_CHANNEL,this._tokenStartCharIndex=this._input.index,this._tokenStartColumn=this._interp.column,this._tokenStartLine=this._interp.line,this._text=null;let u=!1;for(;;){this._type=cu.INVALID_TYPE;let r=Rt.SKIP;try{r=this._interp.match(this._input,this._mode)}catch(a){if(a instanceof oV)this.notifyListeners(a),this.recover(a);else throw console.log(a.stack),a}if(this._input.LA(1)===cu.EOF&&(this._hitEOF=!0),this._type===cu.INVALID_TYPE&&(this._type=r),this._type===Rt.SKIP){u=!0;break}if(this._type!==Rt.MORE)break}if(!u)return this._token===null&&this.emit(),this._token}}finally{this._input.release(e)}}skip(){this._type=Rt.SKIP}more(){this._type=Rt.MORE}mode(e){this._mode=e}pushMode(e){this._interp.debug&&console.log("pushMode "+e),this._modeStack.push(this._mode),this.mode(e)}popMode(){if(this._modeStack.length===0)throw"Empty Stack";return this._interp.debug&&console.log("popMode back to "+this._modeStack.slice(0,-1)),this.mode(this._modeStack.pop()),this._mode}emitToken(e){this._token=e}emit(){let e=this._factory.create(this._tokenFactorySourcePair,this._type,this._text,this._channel,this._tokenStartCharIndex,this.getCharIndex()-1,this._tokenStartLine,this._tokenStartColumn);return this.emitToken(e),e}emitEOF(){let e=this.column,u=this.line,r=this._factory.create(this._tokenFactorySourcePair,cu.EOF,null,cu.DEFAULT_CHANNEL,this._input.index,this._input.index-1,u,e);return this.emitToken(r),r}getCharIndex(){return this._input.index}getAllTokens(){let e=[],u=this.nextToken();for(;u.type!==cu.EOF;)e.push(u),u=this.nextToken();return e}notifyListeners(e){let u=this._tokenStartCharIndex,r=this._input.index,a=this._input.getText(u,r),s="token recognition error at: '"+this.getErrorDisplay(a)+"'";this.getErrorListenerDispatch().syntaxError(this,null,this._tokenStartLine,this._tokenStartColumn,s,e)}getErrorDisplay(e){let u=[];for(let r=0;r":e===` +`?"\\n":e===" "?"\\t":e==="\r"?"\\r":e}getCharErrorDisplay(e){return"'"+this.getErrorDisplayForChar(e)+"'"}recover(e){this._input.LA(1)!==cu.EOF&&(e instanceof lV?this._interp.consume(this._input):this._input.consume())}get inputStream(){return this._input}set inputStream(e){this._input=null,this._tokenFactorySourcePair=[this,this._input],this.reset(),this._input=e,this._tokenFactorySourcePair=[this,this._input]}get sourceName(){return this._input.sourceName}get type(){return this.type}set type(e){this._type=e}get line(){return this._interp.line}set line(e){this._interp.line=e}get column(){return this._interp.column}set column(e){this._interp.column=e}get text(){return this._text!==null?this._text:this._interp.getText(this._input)}set text(e){this._text=e}};c(Rt,"Lexer");var gt=Rt;gt.DEFAULT_MODE=0;gt.MORE=-2;gt.SKIP=-3;gt.DEFAULT_TOKEN_CHANNEL=cu.DEFAULT_CHANNEL;gt.HIDDEN=cu.HIDDEN_CHANNEL;gt.MIN_CHAR_VALUE=0;gt.MAX_CHAR_VALUE=1114111;FR.exports=gt});var Ni=b((Uz,VR)=>{var cV=Ri(),yi=su(),{SemanticContext:HR}=za(),{merge:dV}=Wt();function pV(i){return i.hashCodeForConfigSet()}c(pV,"hashATNConfig");function hV(i,e){return i===e?!0:i===null||e===null?!1:i.equalsForConfigSet(e)}c(hV,"equalATNConfigs");var $d=class $d{constructor(e){this.configLookup=new yi.Set(pV,hV),this.fullCtx=e===void 0?!0:e,this.readOnly=!1,this.configs=[],this.uniqueAlt=0,this.conflictingAlts=null,this.hasSemanticContext=!1,this.dipsIntoOuterContext=!1,this.cachedHashCode=-1}add(e,u){if(u===void 0&&(u=null),this.readOnly)throw"This set is readonly";e.semanticContext!==HR.NONE&&(this.hasSemanticContext=!0),e.reachesIntoOuterContext>0&&(this.dipsIntoOuterContext=!0);let r=this.configLookup.add(e);if(r===e)return this.cachedHashCode=-1,this.configs.push(e),!0;let a=!this.fullCtx,s=dV(r.context,e.context,a,u);return r.reachesIntoOuterContext=Math.max(r.reachesIntoOuterContext,e.reachesIntoOuterContext),e.precedenceFilterSuppressed&&(r.precedenceFilterSuppressed=!0),r.context=s,!0}getStates(){let e=new yi.Set;for(let u=0;u{var{ATNConfigSet:fV}=Ni(),{Hash:SV,Set:OV}=su(),ZS=class ZS{constructor(e,u){this.alt=u,this.pred=e}toString(){return"("+this.pred+", "+this.alt+")"}};c(ZS,"PredPrediction");var zS=ZS,Zd=class Zd{constructor(e,u){return e===null&&(e=-1),u===null&&(u=new fV),this.stateNumber=e,this.configs=u,this.edges=null,this.isAcceptState=!1,this.prediction=0,this.lexerActionExecutor=null,this.requiresFullContext=!1,this.predicates=null,this}getAltSet(){let e=new OV;if(this.configs!==null)for(let u=0;u",this.predicates!==null?e=e+this.predicates:e=e+this.prediction),e}hashCode(){let e=new SV;return e.update(this.configs),e.finish()}};c(Zd,"DFAState");var $S=Zd;GR.exports={DFAState:$S,PredPrediction:zS}});var uO=b((Hz,qR)=>{var{DFAState:LV}=as(),{ATNConfigSet:EV}=Ni(),{getCachedPredictionContext:BV}=Wt(),{Map:MV}=su(),eO=class eO{constructor(e,u){return this.atn=e,this.sharedContextCache=u,this}getCachedContext(e){if(this.sharedContextCache===null)return e;let u=new MV;return BV(e,this.sharedContextCache,u)}};c(eO,"ATNSimulator");var e3=eO;e3.ERROR=new LV(2147483647,new EV);qR.exports=e3});var WR=b((Gz,KR)=>{var{hashStuff:mV}=su(),{LexerIndexedCustomAction:tO}=LS(),Ci=class Ci{constructor(e){return this.lexerActions=e===null?[]:e,this.cachedHashCode=mV(e),this}fixOffsetBeforeMatch(e){let u=null;for(let r=0;r{var{Token:ss}=me(),u3=G1(),_V=Ri(),t3=uO(),{DFAState:TV}=as(),{OrderedATNConfigSet:jR}=Ni(),{PredictionContext:iO}=Wt(),{SingletonPredictionContext:YV}=Wt(),{RuleStopState:XR}=qt(),{LexerATNConfig:yt}=A1(),{Transition:Fr}=Za(),AV=WR(),{LexerNoViableAltException:RV}=tt();function QR(i){i.index=-1,i.line=0,i.column=-1,i.dfaState=null}c(QR,"resetSimState");var sO=class sO{constructor(){QR(this)}reset(){QR(this)}};c(sO,"SimState");var aO=sO,_e=class _e extends t3{constructor(e,u,r,a){super(u,a),this.decisionToDFA=r,this.recog=e,this.startIndex=-1,this.line=1,this.column=0,this.mode=u3.DEFAULT_MODE,this.prevAccept=new aO}copyState(e){this.column=e.column,this.line=e.line,this.mode=e.mode,this.startIndex=e.startIndex}match(e,u){this.match_calls+=1,this.mode=u;let r=e.mark();try{this.startIndex=e.index,this.prevAccept.reset();let a=this.decisionToDFA[u];return a.s0===null?this.matchATN(e):this.execATN(e,a.s0)}finally{e.release(r)}}reset(){this.prevAccept.reset(),this.startIndex=-1,this.line=1,this.column=0,this.mode=u3.DEFAULT_MODE}matchATN(e){let u=this.atn.modeToStartState[this.mode];_e.debug&&console.log("matchATN mode "+this.mode+" start: "+u);let r=this.mode,a=this.computeStartState(e,u),s=a.hasSemanticContext;a.hasSemanticContext=!1;let n=this.addDFAState(a);s||(this.decisionToDFA[this.mode].s0=n);let l=this.execATN(e,n);return _e.debug&&console.log("DFA after matchATN: "+this.decisionToDFA[r].toLexerString()),l}execATN(e,u){_e.debug&&console.log("start state closure="+u.configs),u.isAcceptState&&this.captureSimState(this.prevAccept,e,u);let r=e.LA(1),a=u;for(;;){_e.debug&&console.log("execATN loop starting closure: "+a.configs);let s=this.getExistingTargetState(a,r);if(s===null&&(s=this.computeTargetState(e,a,r)),s===t3.ERROR||(r!==ss.EOF&&this.consume(e),s.isAcceptState&&(this.captureSimState(this.prevAccept,e,s),r===ss.EOF)))break;r=e.LA(1),a=s}return this.failOrAccept(this.prevAccept,e,a.configs,r)}getExistingTargetState(e,u){if(e.edges===null||u<_e.MIN_DFA_EDGE||u>_e.MAX_DFA_EDGE)return null;let r=e.edges[u-_e.MIN_DFA_EDGE];return r===void 0&&(r=null),_e.debug&&r!==null&&console.log("reuse state "+e.stateNumber+" edge to "+r.stateNumber),r}computeTargetState(e,u,r){let a=new jR;return this.getReachableConfigSet(e,u.configs,a,r),a.items.length===0?(a.hasSemanticContext||this.addDFAEdge(u,r,t3.ERROR),t3.ERROR):this.addDFAEdge(u,r,null,a)}failOrAccept(e,u,r,a){if(this.prevAccept.dfaState!==null){let s=e.dfaState.lexerActionExecutor;return this.accept(u,s,this.startIndex,e.index,e.line,e.column),e.dfaState.prediction}else{if(a===ss.EOF&&u.index===this.startIndex)return ss.EOF;throw new RV(this.recog,u,this.startIndex,r)}}getReachableConfigSet(e,u,r,a){let s=_V.INVALID_ALT_NUMBER;for(let n=0;n_e.MAX_DFA_EDGE||(_e.debug&&console.log("EDGE "+e+" -> "+r+" upon "+u),e.edges===null&&(e.edges=[]),e.edges[u-_e.MIN_DFA_EDGE]=r),r}addDFAState(e){let u=new TV(null,e),r=null;for(let l=0;l{var{Map:gV,BitSet:nO,AltDict:yV,hashStuff:NV}=su(),$R=Ri(),{RuleStopState:ZR}=qt(),{ATNConfigSet:CV}=Ni(),{ATNConfig:IV}=A1(),{SemanticContext:bV}=za(),Nt={SLL:0,LL:1,LL_EXACT_AMBIG_DETECTION:2,hasSLLConflictTerminatingPrediction:function(i,e){if(Nt.allConfigsInRuleStopStates(e))return!0;if(i===Nt.SLL&&e.hasSemanticContext){let r=new CV;for(let a=0;a1)return!0;return!1},allSubsetsEqual:function(i){let e=null;for(let u=0;u{var rg=Ud(),i3=Yi(),xV=i3.INVALID_INTERVAL,ug=i3.TerminalNode,vV=i3.TerminalNodeImpl,tg=i3.ErrorNodeImpl,DV=Su().Interval,lO=class lO extends rg{constructor(e,u){e=e||null,u=u||null,super(e,u),this.ruleIndex=-1,this.children=null,this.start=null,this.stop=null,this.exception=null}copyFrom(e){this.parentCtx=e.parentCtx,this.invokingState=e.invokingState,this.children=null,this.start=e.start,this.stop=e.stop,e.children&&(this.children=[],e.children.map(function(u){u instanceof tg&&(this.children.push(u),u.parentCtx=this)},this))}enterRule(e){}exitRule(e){}addChild(e){return this.children===null&&(this.children=[]),this.children.push(e),e}removeLastChild(){this.children!==null&&this.children.pop()}addTokenNode(e){let u=new vV(e);return this.addChild(u),u.parentCtx=this,u}addErrorNode(e){let u=new tg(e);return this.addChild(u),u.parentCtx=this,u}getChild(e,u){if(u=u||null,this.children===null||e<0||e>=this.children.length)return null;if(u===null)return this.children[e];for(let r=0;r=this.children.length)return null;for(let r=0;r{var W1=su(),{Set:ag,BitSet:sg,DoubleDict:wV}=W1,qe=Ri(),{ATNState:a3,RuleStopState:q1}=qt(),{ATNConfig:Qe}=A1(),{ATNConfigSet:Ii}=Ni(),{Token:Xt}=me(),{DFAState:dO,PredPrediction:UV}=as(),K1=uO(),Ke=oO(),ng=Ud(),Jz=cO(),{SemanticContext:Vr}=za(),{PredictionContext:og}=Wt(),{Interval:pO}=Su(),{Transition:Gr,SetTransition:PV,NotSetTransition:kV,RuleTransition:FV,ActionTransition:HV}=Za(),{NoViableAltException:VV}=tt(),{SingletonPredictionContext:GV,predictionContextFromRuleContext:qV}=Wt(),fO=class fO extends K1{constructor(e,u,r,a){super(u,a),this.parser=e,this.decisionToDFA=r,this.predictionMode=Ke.LL,this._input=null,this._startIndex=0,this._outerContext=null,this._dfa=null,this.mergeCache=null,this.debug=!1,this.debug_closure=!1,this.debug_add=!1,this.debug_list_atn_decisions=!1,this.dfa_debug=!1,this.retry_debug=!1}reset(){}adaptivePredict(e,u,r){(this.debug||this.debug_list_atn_decisions)&&console.log("adaptivePredict decision "+u+" exec LA(1)=="+this.getLookaheadName(e)+" line "+e.LT(1).line+":"+e.LT(1).column),this._input=e,this._startIndex=e.index,this._outerContext=r;let a=this.decisionToDFA[u];this._dfa=a;let s=e.mark(),n=e.index;try{let l;if(a.precedenceDfa?l=a.getPrecedenceStartState(this.parser.getPrecedence()):l=a.s0,l===null){r===null&&(r=ng.EMPTY),(this.debug||this.debug_list_atn_decisions)&&console.log("predictATN decision "+a.decision+" exec LA(1)=="+this.getLookaheadName(e)+", outerContext="+r.toString(this.parser.ruleNames));let h=this.computeStartState(a.atnStartState,ng.EMPTY,!1);a.precedenceDfa?(a.s0.configs=h,h=this.applyPrecedenceFilter(h),l=this.addDFAState(a,new dO(null,h)),a.setPrecedenceStartState(this.parser.getPrecedence(),l)):(l=this.addDFAState(a,new dO(null,h)),a.s0=l)}let d=this.execATN(a,l,e,n,r);return this.debug&&console.log("DFA after predictATN: "+a.toString(this.parser.literalNames)),d}finally{this._dfa=null,this.mergeCache=null,e.seek(n),e.release(s)}}execATN(e,u,r,a,s){(this.debug||this.debug_list_atn_decisions)&&console.log("execATN decision "+e.decision+" exec LA(1)=="+this.getLookaheadName(r)+" line "+r.LT(1).line+":"+r.LT(1).column);let n,l=u;this.debug&&console.log("s0 = "+u);let d=r.LA(1);for(;;){let p=this.getExistingTargetState(l,d);if(p===null&&(p=this.computeTargetState(e,l,d)),p===K1.ERROR){let h=this.noViableAlt(r,s,l.configs,a);if(r.seek(a),n=this.getSynValidOrSemInvalidAltThatFinishedDecisionEntryRule(l.configs,s),n!==qe.INVALID_ALT_NUMBER)return n;throw h}if(p.requiresFullContext&&this.predictionMode!==Ke.SLL){let h=null;if(p.predicates!==null){this.debug&&console.log("DFA state has preds in DFA sim LL failover");let _=r.index;if(_!==a&&r.seek(a),h=this.evalSemanticContext(p.predicates,s,!0),h.length===1)return this.debug&&console.log("Full LL avoided"),h.minValue();_!==a&&r.seek(_)}this.dfa_debug&&console.log("ctx sensitive state "+s+" in "+p);let S=this.computeStartState(e.atnStartState,s,!0);return this.reportAttemptingFullContext(e,h,p.configs,a,r.index),n=this.execATNWithFullContext(e,p,S,r,a,s),n}if(p.isAcceptState){if(p.predicates===null)return p.prediction;let h=r.index;r.seek(a);let f=this.evalSemanticContext(p.predicates,s,!0);if(f.length===0)throw this.noViableAlt(r,s,p.configs,a);return f.length===1||this.reportAmbiguity(e,p,a,h,!1,f,p.configs),f.minValue()}l=p,d!==Xt.EOF&&(r.consume(),d=r.LA(1))}}getExistingTargetState(e,u){let r=e.edges;return r===null?null:r[u+1]||null}computeTargetState(e,u,r){let a=this.computeReachSet(u.configs,r,!1);if(a===null)return this.addDFAEdge(e,u,r,K1.ERROR),K1.ERROR;let s=new dO(null,a),n=this.getUniqueAlt(a);if(this.debug){let l=Ke.getConflictingAltSubsets(a);console.log("SLL altSubSets="+W1.arrayToString(l)+", previous="+u.configs+", configs="+a+", predict="+n+", allSubsetsConflict="+Ke.allSubsetsConflict(l)+", conflictingAlts="+this.getConflictingAlts(a))}return n!==qe.INVALID_ALT_NUMBER?(s.isAcceptState=!0,s.configs.uniqueAlt=n,s.prediction=n):Ke.hasSLLConflictTerminatingPrediction(this.predictionMode,a)&&(s.configs.conflictingAlts=this.getConflictingAlts(a),s.requiresFullContext=!0,s.isAcceptState=!0,s.prediction=s.configs.conflictingAlts.minValue()),s.isAcceptState&&s.configs.hasSemanticContext&&(this.predicateDFAState(s,this.atn.getDecisionState(e.decision)),s.predicates!==null&&(s.prediction=qe.INVALID_ALT_NUMBER)),s=this.addDFAEdge(e,u,r,s),s}predicateDFAState(e,u){let r=u.transitions.length,a=this.getConflictingAltsOrUniqueAlt(e.configs),s=this.getPredsForAmbigAlts(a,e.configs,r);s!==null?(e.predicates=this.getPredicatePredictions(a,s),e.prediction=qe.INVALID_ALT_NUMBER):e.prediction=a.minValue()}execATNWithFullContext(e,u,r,a,s,n){(this.debug||this.debug_list_atn_decisions)&&console.log("execATNWithFullContext "+r);let l=!0,d=!1,p,h=r;a.seek(s);let f=a.LA(1),S=-1;for(;;){if(p=this.computeReachSet(h,f,l),p===null){let O=this.noViableAlt(a,n,h,s);a.seek(s);let E=this.getSynValidOrSemInvalidAltThatFinishedDecisionEntryRule(h,n);if(E!==qe.INVALID_ALT_NUMBER)return E;throw O}let _=Ke.getConflictingAltSubsets(p);if(this.debug&&console.log("LL altSubSets="+_+", predict="+Ke.getUniqueAlt(_)+", resolvesToJustOneViableAlt="+Ke.resolvesToJustOneViableAlt(_)),p.uniqueAlt=this.getUniqueAlt(p),p.uniqueAlt!==qe.INVALID_ALT_NUMBER){S=p.uniqueAlt;break}else if(this.predictionMode!==Ke.LL_EXACT_AMBIG_DETECTION){if(S=Ke.resolvesToJustOneViableAlt(_),S!==qe.INVALID_ALT_NUMBER)break}else if(Ke.allSubsetsConflict(_)&&Ke.allSubsetsEqual(_)){d=!0,S=Ke.getSingleViableAlt(_);break}h=p,f!==Xt.EOF&&(a.consume(),f=a.LA(1))}return p.uniqueAlt!==qe.INVALID_ALT_NUMBER?(this.reportContextSensitivity(e,S,p,s,a.index),S):(this.reportAmbiguity(e,u,s,a.index,d,null,p),S)}computeReachSet(e,u,r){this.debug&&console.log("in computeReachSet, starting closure: "+e),this.mergeCache===null&&(this.mergeCache=new wV);let a=new Ii(r),s=null;for(let l=0;l0&&(n=this.getAltThatFinishedDecisionEntryRule(s),n!==qe.INVALID_ALT_NUMBER)?n:qe.INVALID_ALT_NUMBER}getAltThatFinishedDecisionEntryRule(e){let u=[];for(let r=0;r0||a.state instanceof q1&&a.context.hasEmptyPath())&&u.indexOf(a.alt)<0&&u.push(a.alt)}return u.length===0?qe.INVALID_ALT_NUMBER:Math.min.apply(null,u)}splitAccordingToSemanticValidity(e,u){let r=new Ii(e.fullCtx),a=new Ii(e.fullCtx);for(let s=0;s50))throw"problem";if(e.state instanceof q1)if(e.context.isEmpty())if(s){u.add(e,this.mergeCache);return}else this.debug&&console.log("FALLING off rule "+this.getRuleName(e.state.ruleIndex));else{for(let d=0;d=0&&(_+=1)}this.closureCheckingStopState(S,u,r,f,s,_,l)}}}canDropLoopEntryEdgeInLeftRecursiveRule(e){let u=e.state;if(u.stateType!==a3.STAR_LOOP_ENTRY||u.stateType!==a3.STAR_LOOP_ENTRY||!u.isPrecedenceDecision||e.context.isEmpty()||e.context.hasEmptyPath())return!1;let r=e.context.length;for(let l=0;l=0?this.parser.ruleNames[e]:""}getEpsilonTarget(e,u,r,a,s,n){switch(u.serializationType){case Gr.RULE:return this.ruleTransition(e,u);case Gr.PRECEDENCE:return this.precedenceTransition(e,u,r,a,s);case Gr.PREDICATE:return this.predTransition(e,u,r,a,s);case Gr.ACTION:return this.actionTransition(e,u);case Gr.EPSILON:return new Qe({state:u.target},e);case Gr.ATOM:case Gr.RANGE:case Gr.SET:return n&&u.matches(Xt.EOF,0,1)?new Qe({state:u.target},e):null;default:return null}}actionTransition(e,u){if(this.debug){let r=u.actionIndex===-1?65535:u.actionIndex;console.log("ACTION edge "+u.ruleIndex+":"+r)}return new Qe({state:u.target},e)}precedenceTransition(e,u,r,a,s){this.debug&&(console.log("PRED (collectPredicates="+r+") "+u.precedence+">=_p, ctx dependent=true"),this.parser!==null&&console.log("context surrounding pred is "+W1.arrayToString(this.parser.getRuleInvocationStack())));let n=null;if(r&&a)if(s){let l=this._input.index;this._input.seek(this._startIndex);let d=u.getPredicate().evaluate(this.parser,this._outerContext);this._input.seek(l),d&&(n=new Qe({state:u.target},e))}else{let l=Vr.andContext(e.semanticContext,u.getPredicate());n=new Qe({state:u.target,semanticContext:l},e)}else n=new Qe({state:u.target},e);return this.debug&&console.log("config from pred transition="+n),n}predTransition(e,u,r,a,s){this.debug&&(console.log("PRED (collectPredicates="+r+") "+u.ruleIndex+":"+u.predIndex+", ctx dependent="+u.isCtxDependent),this.parser!==null&&console.log("context surrounding pred is "+W1.arrayToString(this.parser.getRuleInvocationStack())));let n=null;if(r&&(u.isCtxDependent&&a||!u.isCtxDependent))if(s){let l=this._input.index;this._input.seek(this._startIndex);let d=u.getPredicate().evaluate(this.parser,this._outerContext);this._input.seek(l),d&&(n=new Qe({state:u.target},e))}else{let l=Vr.andContext(e.semanticContext,u.getPredicate());n=new Qe({state:u.target,semanticContext:l},e)}else n=new Qe({state:u.target},e);return this.debug&&console.log("config from pred transition="+n),n}ruleTransition(e,u){this.debug&&console.log("CALL rule "+this.getRuleName(u.target.ruleIndex)+", ctx="+e.context);let r=u.followState,a=GV.create(e.context,r.stateNumber);return new Qe({state:u.target,context:a},e)}getConflictingAlts(e){let u=Ke.getConflictingAltSubsets(e);return Ke.getAlts(u)}getConflictingAltsOrUniqueAlt(e){let u=null;return e.uniqueAlt!==qe.INVALID_ALT_NUMBER?(u=new sg,u.add(e.uniqueAlt)):u=e.conflictingAlts,u}getTokenName(e){if(e===Xt.EOF)return"EOF";if(this.parser!==null&&this.parser.literalNames!==null)if(e>=this.parser.literalNames.length&&e>=this.parser.symbolicNames.length)console.log(""+e+" ttype out of range: "+this.parser.literalNames),console.log(""+this.parser.getInputStream().getTokens());else return(this.parser.literalNames[e]||this.parser.symbolicNames[e])+"<"+e+">";return""+e}getLookaheadName(e){return this.getTokenName(e.LA(1))}dumpDeadEndConfigs(e){console.log("dead end configs: ");let u=e.getDeadEndConfigs();for(let r=0;r0){let n=a.state.transitions[0];n instanceof AtomTransition?s="Atom "+this.getTokenName(n.label):n instanceof PV&&(s=(n instanceof kV?"~":"")+"Set "+n.set)}console.error(a.toString(this.parser,!0)+":"+s)}}noViableAlt(e,u,r,a){return new VV(this.parser,e,e.get(a),e.LT(1),r,u)}getUniqueAlt(e){let u=qe.INVALID_ALT_NUMBER;for(let r=0;r "+a+" upon "+this.getTokenName(r)),a===null)return null;if(a=this.addDFAState(e,a),u===null||r<-1||r>this.atn.maxTokenType)return a;if(u.edges===null&&(u.edges=[]),u.edges[r+1]=a,this.debug){let s=this.parser===null?null:this.parser.literalNames,n=this.parser===null?null:this.parser.symbolicNames;console.log(`DFA= +`+e.toString(s,n))}return a}addDFAState(e,u){if(u===K1.ERROR)return u;let r=e.states.get(u);return r!==null?r:(u.stateNumber=e.states.length,u.configs.readOnly||(u.configs.optimizeConfigs(this),u.configs.setReadonly(!0)),e.states.add(u),this.debug&&console.log("adding new DFA state: "+u),u)}reportAttemptingFullContext(e,u,r,a,s){if(this.debug||this.retry_debug){let n=new pO(a,s+1);console.log("reportAttemptingFullContext decision="+e.decision+":"+r+", input="+this.parser.getTokenStream().getText(n))}this.parser!==null&&this.parser.getErrorListenerDispatch().reportAttemptingFullContext(this.parser,e,a,s,u,r)}reportContextSensitivity(e,u,r,a,s){if(this.debug||this.retry_debug){let n=new pO(a,s+1);console.log("reportContextSensitivity decision="+e.decision+":"+r+", input="+this.parser.getTokenStream().getText(n))}this.parser!==null&&this.parser.getErrorListenerDispatch().reportContextSensitivity(this.parser,e,a,s,u,r)}reportAmbiguity(e,u,r,a,s,n,l){if(this.debug||this.retry_debug){let d=new pO(r,a+1);console.log("reportAmbiguity "+n+":"+l+", input="+this.parser.getTokenStream().getText(d))}this.parser!==null&&this.parser.getErrorListenerDispatch().reportAmbiguity(this.parser,e,r,a,s,n,l)}};c(fO,"ParserATNSimulator");var hO=fO;lg.exports=hO});var dg=b(ns=>{ns.ATN=Ri();ns.ATNDeserializer=NS();ns.LexerATNSimulator=zR();ns.ParserATNSimulator=cg();ns.PredictionMode=oO()});var SO=b(()=>{String.prototype.codePointAt||function(){"use strict";var i=function(){let u;try{let r={},a=Object.defineProperty;u=a(r,r,r)&&a}catch{}return u}();let e=c(function(u){if(this==null)throw TypeError();let r=String(this),a=r.length,s=u?Number(u):0;if(s!==s&&(s=0),s<0||s>=a)return;let n=r.charCodeAt(s),l;return n>=55296&&n<=56319&&a>s+1&&(l=r.charCodeAt(s+1),l>=56320&&l<=57343)?(n-55296)*1024+l-56320+65536:n},"codePointAt");i?i(String.prototype,"codePointAt",{value:e,configurable:!0,writable:!0}):String.prototype.codePointAt=e}()});var j1=b((r$,pg)=>{var LO=class LO{constructor(e,u,r){this.dfa=e,this.literalNames=u||[],this.symbolicNames=r||[]}toString(){if(this.dfa.s0===null)return null;let e="",u=this.dfa.sortedStates();for(let r=0;r"),e=e.concat(this.getStateString(l)),e=e.concat(` +`))}}}return e.length===0?null:e}getEdgeLabel(e){return e===0?"EOF":this.literalNames!==null||this.symbolicNames!==null?this.literalNames[e-1]||this.symbolicNames[e-1]:String.fromCharCode(e-1)}getStateString(e){let u=(e.isAcceptState?":":"")+"s"+e.stateNumber+(e.requiresFullContext?"^":"");return e.isAcceptState?e.predicates!==null?u+"=>"+e.predicates.toString():u+"=>"+e.prediction.toString():u}};c(LO,"DFASerializer");var s3=LO,EO=class EO extends s3{constructor(e){super(e,null)}getEdgeLabel(e){return"'"+String.fromCharCode(e)+"'"}};c(EO,"LexerDFASerializer");var OO=EO;pg.exports={DFASerializer:s3,LexerDFASerializer:OO}});var Lg=b((a$,Og)=>{var{Set:hg}=su(),{DFAState:fg}=as(),{StarLoopEntryState:KV}=qt(),{ATNConfigSet:Sg}=Ni(),{DFASerializer:WV}=j1(),{LexerDFASerializer:jV}=j1(),MO=class MO{constructor(e,u){if(u===void 0&&(u=0),this.atnStartState=e,this.decision=u,this._states=new hg,this.s0=null,this.precedenceDfa=!1,e instanceof KV&&e.isPrecedenceDecision){this.precedenceDfa=!0;let r=new fg(null,new Sg);r.edges=[],r.isAcceptState=!1,r.requiresFullContext=!1,this.s0=r}}getPrecedenceStartState(e){if(!this.precedenceDfa)throw"Only precedence DFAs may contain a precedence start state.";return e<0||e>=this.s0.edges.length?null:this.s0.edges[e]||null}setPrecedenceStartState(e,u){if(!this.precedenceDfa)throw"Only precedence DFAs may contain a precedence start state.";e<0||(this.s0.edges[e]=u)}setPrecedenceDfa(e){if(this.precedenceDfa!==e){if(this._states=new hg,e){let u=new fg(null,new Sg);u.edges=[],u.isAcceptState=!1,u.requiresFullContext=!1,this.s0=u}else this.s0=null;this.precedenceDfa=e}}sortedStates(){return this._states.values().sort(function(u,r){return u.stateNumber-r.stateNumber})}toString(e,u){return e=e||null,u=u||null,this.s0===null?"":new WV(this,e,u).toString()}toLexerString(){return this.s0===null?"":new jV(this).toString()}get states(){return this._states}};c(MO,"DFA");var BO=MO;Og.exports=BO});var Eg=b(X1=>{X1.DFA=Lg();X1.DFASerializer=j1().DFASerializer;X1.LexerDFASerializer=j1().LexerDFASerializer;X1.PredPrediction=as().PredPrediction});var mO=b(()=>{String.fromCodePoint||function(){let i=function(){let a;try{let s={},n=Object.defineProperty;a=n(s,s,s)&&n}catch{}return a}(),e=String.fromCharCode,u=Math.floor,r=c(function(a){let n=[],l,d,p=-1,h=arguments.length;if(!h)return"";let f="";for(;++p1114111||u(S)!==S)throw RangeError("Invalid code point: "+S);S<=65535?n.push(S):(S-=65536,l=(S>>10)+55296,d=S%1024+56320,n.push(l,d)),(p+1===h||n.length>16384)&&(f+=e.apply(null,n),n.length=0)}return f},"fromCodePoint");i?i(String,"fromCodePoint",{value:r,configurable:!0,writable:!0}):String.fromCodePoint=r}()});var Mg=b((d$,Bg)=>{var XV=Yi(),QV=J6();Bg.exports={...XV,Trees:QV}});var _g=b((p$,mg)=>{var{BitSet:JV}=su(),{ErrorListener:zV}=F1(),{Interval:_O}=Su(),YO=class YO extends zV{constructor(e){super(),e=e||!0,this.exactOnly=e}reportAmbiguity(e,u,r,a,s,n,l){if(this.exactOnly&&!s)return;let d="reportAmbiguity d="+this.getDecisionDescription(e,u)+": ambigAlts="+this.getConflictingAlts(n,l)+", input='"+e.getTokenStream().getText(new _O(r,a))+"'";e.notifyErrorListeners(d)}reportAttemptingFullContext(e,u,r,a,s,n){let l="reportAttemptingFullContext d="+this.getDecisionDescription(e,u)+", input='"+e.getTokenStream().getText(new _O(r,a))+"'";e.notifyErrorListeners(l)}reportContextSensitivity(e,u,r,a,s,n){let l="reportContextSensitivity d="+this.getDecisionDescription(e,u)+", input='"+e.getTokenStream().getText(new _O(r,a))+"'";e.notifyErrorListeners(l)}getDecisionDescription(e,u){let r=u.decision,a=u.atnStartState.ruleIndex,s=e.ruleNames;if(a<0||a>=s.length)return""+r;let n=s[a]||null;return n===null||n.length===0?""+r:`${r} (${n})`}getConflictingAlts(e,u){if(e!==null)return e;let r=new JV;for(let a=0;a{var{Token:qr}=me(),{NoViableAltException:$V,InputMismatchException:n3,FailedPredicateException:ZV,ParseCancellationException:eG}=tt(),{ATNState:bi}=qt(),{Interval:uG,IntervalSet:Tg}=Su(),gO=class gO{reset(e){}recoverInline(e){}recover(e,u){}sync(e){}inErrorRecoveryMode(e){}reportError(e){}};c(gO,"ErrorStrategy");var AO=gO,yO=class yO extends AO{constructor(){super(),this.errorRecoveryMode=!1,this.lastErrorIndex=-1,this.lastErrorStates=null,this.nextTokensContext=null,this.nextTokenState=0}reset(e){this.endErrorCondition(e)}beginErrorCondition(e){this.errorRecoveryMode=!0}inErrorRecoveryMode(e){return this.errorRecoveryMode}endErrorCondition(e){this.errorRecoveryMode=!1,this.lastErrorStates=null,this.lastErrorIndex=-1}reportMatch(e){this.endErrorCondition(e)}reportError(e,u){this.inErrorRecoveryMode(e)||(this.beginErrorCondition(e),u instanceof $V?this.reportNoViableAlternative(e,u):u instanceof n3?this.reportInputMismatch(e,u):u instanceof ZV?this.reportFailedPredicate(e,u):(console.log("unknown recognition error type: "+u.constructor.name),console.log(u.stack),e.notifyErrorListeners(u.getOffendingToken(),u.getMessage(),u)))}recover(e,u){this.lastErrorIndex===e.getInputStream().index&&this.lastErrorStates!==null&&this.lastErrorStates.indexOf(e.state)>=0&&e.consume(),this.lastErrorIndex=e._input.index,this.lastErrorStates===null&&(this.lastErrorStates=[]),this.lastErrorStates.push(e.state);let r=this.getErrorRecoverySet(e);this.consumeUntil(e,r)}sync(e){if(this.inErrorRecoveryMode(e))return;let u=e._interp.atn.states[e.state],r=e.getTokenStream().LA(1),a=e.atn.nextTokens(u);if(a.contains(r)){this.nextTokensContext=null,this.nextTokenState=bi.INVALID_STATE_NUMBER;return}else if(a.contains(qr.EPSILON)){this.nextTokensContext===null&&(this.nextTokensContext=e._ctx,this.nextTokensState=e._stateNumber);return}switch(u.stateType){case bi.BLOCK_START:case bi.STAR_BLOCK_START:case bi.PLUS_BLOCK_START:case bi.STAR_LOOP_ENTRY:if(this.singleTokenDeletion(e)!==null)return;throw new n3(e);case bi.PLUS_LOOP_BACK:case bi.STAR_LOOP_BACK:this.reportUnwantedToken(e);let s=new Tg;s.addSet(e.getExpectedTokens());let n=s.addSet(this.getErrorRecoverySet(e));this.consumeUntil(e,n);break;default:}}reportNoViableAlternative(e,u){let r=e.getTokenStream(),a;r!==null?u.startToken.type===qr.EOF?a="":a=r.getText(new uG(u.startToken.tokenIndex,u.offendingToken.tokenIndex)):a="";let s="no viable alternative at input "+this.escapeWSAndQuote(a);e.notifyErrorListeners(s,u.offendingToken,u)}reportInputMismatch(e,u){let r="mismatched input "+this.getTokenErrorDisplay(u.offendingToken)+" expecting "+u.getExpectedTokens().toString(e.literalNames,e.symbolicNames);e.notifyErrorListeners(r,u.offendingToken,u)}reportFailedPredicate(e,u){let a="rule "+e.ruleNames[e._ctx.ruleIndex]+" "+u.message;e.notifyErrorListeners(a,u.offendingToken,u)}reportUnwantedToken(e){if(this.inErrorRecoveryMode(e))return;this.beginErrorCondition(e);let u=e.getCurrentToken(),r=this.getTokenErrorDisplay(u),a=this.getExpectedTokens(e),s="extraneous input "+r+" expecting "+a.toString(e.literalNames,e.symbolicNames);e.notifyErrorListeners(s,u,null)}reportMissingToken(e){if(this.inErrorRecoveryMode(e))return;this.beginErrorCondition(e);let u=e.getCurrentToken(),a="missing "+this.getExpectedTokens(e).toString(e.literalNames,e.symbolicNames)+" at "+this.getTokenErrorDisplay(u);e.notifyErrorListeners(a,u,null)}recoverInline(e){let u=this.singleTokenDeletion(e);if(u!==null)return e.consume(),u;if(this.singleTokenInsertion(e))return this.getMissingSymbol(e);throw new n3(e)}singleTokenInsertion(e){let u=e.getTokenStream().LA(1),r=e._interp.atn,s=r.states[e.state].transitions[0].target;return r.nextTokens(s,e._ctx).contains(u)?(this.reportMissingToken(e),!0):!1}singleTokenDeletion(e){let u=e.getTokenStream().LA(2);if(this.getExpectedTokens(e).contains(u)){this.reportUnwantedToken(e),e.consume();let a=e.getCurrentToken();return this.reportMatch(e),a}else return null}getMissingSymbol(e){let u=e.getCurrentToken(),a=this.getExpectedTokens(e).first(),s;a===qr.EOF?s="":s="";let n=u,l=e.getTokenStream().LT(-1);return n.type===qr.EOF&&l!==null&&(n=l),e.getTokenFactory().create(n.source,a,s,qr.DEFAULT_CHANNEL,-1,-1,n.line,n.column)}getExpectedTokens(e){return e.getExpectedTokens()}getTokenErrorDisplay(e){if(e===null)return"";let u=e.text;return u===null&&(e.type===qr.EOF?u="":u="<"+e.type+">"),this.escapeWSAndQuote(u)}escapeWSAndQuote(e){return e=e.replace(/\n/g,"\\n"),e=e.replace(/\r/g,"\\r"),e=e.replace(/\t/g,"\\t"),"'"+e+"'"}getErrorRecoverySet(e){let u=e._interp.atn,r=e._ctx,a=new Tg;for(;r!==null&&r.invokingState>=0;){let n=u.states[r.invokingState].transitions[0],l=u.nextTokens(n.followState);a.addSet(l),r=r.parentCtx}return a.removeOne(qr.EPSILON),a}consumeUntil(e,u){let r=e.getTokenStream().LA(1);for(;r!==qr.EOF&&!u.contains(r);)e.consume(),r=e.getTokenStream().LA(1)}};c(yO,"DefaultErrorStrategy");var o3=yO,NO=class NO extends o3{constructor(){super()}recover(e,u){let r=e._ctx;for(;r!==null;)r.exception=u,r=r.parentCtx;throw new eG(u)}recoverInline(e){this.recover(e,new n3(e))}sync(e){}};c(NO,"BailErrorStrategy");var RO=NO;Yg.exports={BailErrorStrategy:RO,DefaultErrorStrategy:o3}});var Ag=b((O$,Ct)=>{Ct.exports.RecognitionException=tt().RecognitionException;Ct.exports.NoViableAltException=tt().NoViableAltException;Ct.exports.LexerNoViableAltException=tt().LexerNoViableAltException;Ct.exports.InputMismatchException=tt().InputMismatchException;Ct.exports.FailedPredicateException=tt().FailedPredicateException;Ct.exports.DiagnosticErrorListener=_g();Ct.exports.BailErrorStrategy=l3().BailErrorStrategy;Ct.exports.DefaultErrorStrategy=l3().DefaultErrorStrategy;Ct.exports.ErrorListener=F1().ErrorListener});var c3=b((L$,Rg)=>{var{Token:tG}=me();SO();mO();var IO=class IO{constructor(e,u){if(this.name="",this.strdata=e,this.decodeToUnicodeCodePoints=u||!1,this._index=0,this.data=[],this.decodeToUnicodeCodePoints)for(let r=0;r=this._size)throw"cannot consume EOF";this._index+=1}LA(e){if(e===0)return 0;e<0&&(e+=1);let u=this._index+e-1;return u<0||u>=this._size?tG.EOF:this.data[u]}LT(e){return this.LA(e)}mark(){return-1}release(e){}seek(e){if(e<=this._index){this._index=e;return}this._index=Math.min(e,this._size)}getText(e,u){if(u>=this._size&&(u=this._size-1),e>=this._size)return"";if(this.decodeToUnicodeCodePoints){let r="";for(let a=e;a<=u;a++)r+=String.fromCodePoint(this.data[a]);return r}else return this.strdata.slice(e,u+1)}toString(){return this.strdata}get index(){return this._index}get size(){return this._size}};c(IO,"InputStream");var CO=IO;Rg.exports=CO});var Ng=b((B$,yg)=>{var Q1=c3(),gg=require("fs"),rG={fromString:function(i){return new Q1(i,!0)},fromBlob:function(i,e,u,r){let a=new window.FileReader;a.onload=function(s){let n=new Q1(s.target.result,!0);u(n)},a.onerror=r,a.readAsText(i,e)},fromBuffer:function(i,e){return new Q1(i.toString(e),!0)},fromPath:function(i,e,u){gg.readFile(i,e,function(r,a){let s=null;a!==null&&(s=new Q1(a,!0)),u(r,s)})},fromPathSync:function(i,e){let u=gg.readFileSync(i,e);return new Q1(u,!0)}};yg.exports=rG});var Ig=b((M$,Cg)=>{var iG=c3(),aG=require("fs"),xO=class xO extends iG{constructor(e,u){let r=aG.readFileSync(e,"utf8");super(r,u),this.fileName=e}};c(xO,"FileStream");var bO=xO;Cg.exports=bO});var xg=b((_$,bg)=>{var{Token:xi}=me(),vO=G1(),{Interval:sG}=Su(),UO=class UO{};c(UO,"TokenStream");var DO=UO,PO=class PO extends DO{constructor(e){super(),this.tokenSource=e,this.tokens=[],this.index=-1,this.fetchedEOF=!1}mark(){return 0}release(e){}reset(){this.seek(0)}seek(e){this.lazyInit(),this.index=this.adjustSeekIndex(e)}get(e){return this.lazyInit(),this.tokens[e]}consume(){let e=!1;if(this.index>=0?this.fetchedEOF?e=this.index0?this.fetch(u)>=u:!0}fetch(e){if(this.fetchedEOF)return 0;for(let u=0;u=this.tokens.length&&(u=this.tokens.length-1);for(let s=e;s=this.tokens.length?this.tokens[this.tokens.length-1]:this.tokens[u]}adjustSeekIndex(e){return e}lazyInit(){this.index===-1&&this.setup()}setup(){this.sync(0),this.index=this.adjustSeekIndex(0)}setTokenSource(e){this.tokenSource=e,this.tokens=[],this.index=-1,this.fetchedEOF=!1}nextTokenOnChannel(e,u){if(this.sync(e),e>=this.tokens.length)return-1;let r=this.tokens[e];for(;r.channel!==this.channel;){if(r.type===xi.EOF)return-1;e+=1,this.sync(e),r=this.tokens[e]}return e}previousTokenOnChannel(e,u){for(;e>=0&&this.tokens[e].channel!==u;)e-=1;return e}getHiddenTokensToRight(e,u){if(u===void 0&&(u=-1),this.lazyInit(),e<0||e>=this.tokens.length)throw""+e+" not in 0.."+this.tokens.length-1;let r=this.nextTokenOnChannel(e+1,vO.DEFAULT_TOKEN_CHANNEL),a=e+1,s=r===-1?this.tokens.length-1:r;return this.filterForChannel(a,s,u)}getHiddenTokensToLeft(e,u){if(u===void 0&&(u=-1),this.lazyInit(),e<0||e>=this.tokens.length)throw""+e+" not in 0.."+this.tokens.length-1;let r=this.previousTokenOnChannel(e-1,vO.DEFAULT_TOKEN_CHANNEL);if(r===e-1)return null;let a=r+1,s=e-1;return this.filterForChannel(a,s,u)}filterForChannel(e,u,r){let a=[];for(let s=e;s=this.tokens.length&&(r=this.tokens.length-1);let a="";for(let s=u;s{var vg=me().Token,nG=xg(),FO=class FO extends nG{constructor(e,u){super(e),this.channel=u===void 0?vg.DEFAULT_CHANNEL:u}adjustSeekIndex(e){return this.nextTokenOnChannel(e,this.channel)}LB(e){if(e===0||this.index-e<0)return null;let u=this.index,r=1;for(;r<=e;)u=this.previousTokenOnChannel(u-1,this.channel),r+=1;return u<0?null:this.tokens[u]}LT(e){if(this.lazyInit(),e===0)return null;if(e<0)return this.LB(-e);let u=this.index,r=1;for(;r{var{Token:J1}=me(),{ParseTreeListener:oG,TerminalNode:lG,ErrorNode:cG}=Yi(),dG=wS(),{DefaultErrorStrategy:pG}=l3(),hG=NS(),fG=sS(),SG=G1(),VO=class VO extends oG{constructor(e){super(),this.parser=e}enterEveryRule(e){console.log("enter "+this.parser.ruleNames[e.ruleIndex]+", LT(1)="+this.parser._input.LT(1).text)}visitTerminal(e){console.log("consume "+e.symbol+" rule "+this.parser.ruleNames[this.parser._ctx.ruleIndex])}exitEveryRule(e){console.log("exit "+this.parser.ruleNames[e.ruleIndex]+", LT(1)="+this.parser._input.LT(1).text)}};c(VO,"TraceListener");var HO=VO,GO=class GO extends dG{constructor(e){super(),this._input=null,this._errHandler=new pG,this._precedenceStack=[],this._precedenceStack.push(0),this._ctx=null,this.buildParseTrees=!0,this._tracer=null,this._parseListeners=null,this._syntaxErrors=0,this.setInputStream(e)}reset(){this._input!==null&&this._input.seek(0),this._errHandler.reset(this),this._ctx=null,this._syntaxErrors=0,this.setTrace(!1),this._precedenceStack=[],this._precedenceStack.push(0),this._interp!==null&&this._interp.reset()}match(e){let u=this.getCurrentToken();return u.type===e?(this._errHandler.reportMatch(this),this.consume()):(u=this._errHandler.recoverInline(this),this.buildParseTrees&&u.tokenIndex===-1&&this._ctx.addErrorNode(u)),u}matchWildcard(){let e=this.getCurrentToken();return e.type>0?(this._errHandler.reportMatch(this),this.consume()):(e=this._errHandler.recoverInline(this),this._buildParseTrees&&e.tokenIndex===-1&&this._ctx.addErrorNode(e)),e}getParseListeners(){return this._parseListeners||[]}addParseListener(e){if(e===null)throw"listener";this._parseListeners===null&&(this._parseListeners=[]),this._parseListeners.push(e)}removeParseListener(e){if(this._parseListeners!==null){let u=this._parseListeners.indexOf(e);u>=0&&this._parseListeners.splice(u,1),this._parseListeners.length===0&&(this._parseListeners=null)}}removeParseListeners(){this._parseListeners=null}triggerEnterRuleEvent(){if(this._parseListeners!==null){let e=this._ctx;this._parseListeners.map(function(u){u.enterEveryRule(e),e.enterRule(u)})}}triggerExitRuleEvent(){if(this._parseListeners!==null){let e=this._ctx;this._parseListeners.slice(0).reverse().map(function(u){e.exitRule(u),u.exitEveryRule(e)})}}getTokenFactory(){return this._input.tokenSource._factory}setTokenFactory(e){this._input.tokenSource._factory=e}getATNWithBypassAlts(){let e=this.getSerializedATN();if(e===null)throw"The current parser does not support an ATN with bypass alternatives.";let u=this.bypassAltsAtnCache[e];if(u===null){let r=new fG;r.generateRuleBypassTransitions=!0,u=new hG(r).deserialize(e),this.bypassAltsAtnCache[e]=u}return u}compileParseTreePattern(e,u,r){if(r=r||null,r===null&&this.getTokenStream()!==null){let s=this.getTokenStream().tokenSource;s instanceof SG&&(r=s)}if(r===null)throw"Parser can't discover a lexer to use";return new ParseTreePatternMatcher(r,this).compile(e,u)}getInputStream(){return this.getTokenStream()}setInputStream(e){this.setTokenStream(e)}getTokenStream(){return this._input}setTokenStream(e){this._input=null,this.reset(),this._input=e}getCurrentToken(){return this._input.LT(1)}notifyErrorListeners(e,u,r){u=u||null,r=r||null,u===null&&(u=this.getCurrentToken()),this._syntaxErrors+=1;let a=u.line,s=u.column;this.getErrorListenerDispatch().syntaxError(this,u,a,s,e,r)}consume(){let e=this.getCurrentToken();e.type!==J1.EOF&&this.getInputStream().consume();let u=this._parseListeners!==null&&this._parseListeners.length>0;if(this.buildParseTrees||u){let r;this._errHandler.inErrorRecoveryMode(this)?r=this._ctx.addErrorNode(e):r=this._ctx.addTokenNode(e),r.invokingState=this.state,u&&this._parseListeners.map(function(a){r instanceof cG||r.isErrorNode!==void 0&&r.isErrorNode()?a.visitErrorNode(r):r instanceof lG&&a.visitTerminal(r)})}return e}addContextToParseTree(){this._ctx.parentCtx!==null&&this._ctx.parentCtx.addChild(this._ctx)}enterRule(e,u,r){this.state=u,this._ctx=e,this._ctx.start=this._input.LT(1),this.buildParseTrees&&this.addContextToParseTree(),this._parseListeners!==null&&this.triggerEnterRuleEvent()}exitRule(){this._ctx.stop=this._input.LT(-1),this._parseListeners!==null&&this.triggerExitRuleEvent(),this.state=this._ctx.invokingState,this._ctx=this._ctx.parentCtx}enterOuterAlt(e,u){e.setAltNumber(u),this.buildParseTrees&&this._ctx!==e&&this._ctx.parentCtx!==null&&(this._ctx.parentCtx.removeLastChild(),this._ctx.parentCtx.addChild(e)),this._ctx=e}getPrecedence(){return this._precedenceStack.length===0?-1:this._precedenceStack[this._precedenceStack.length-1]}enterRecursionRule(e,u,r,a){this.state=u,this._precedenceStack.push(a),this._ctx=e,this._ctx.start=this._input.LT(1),this._parseListeners!==null&&this.triggerEnterRuleEvent()}pushNewRecursionContext(e,u,r){let a=this._ctx;a.parentCtx=e,a.invokingState=u,a.stop=this._input.LT(-1),this._ctx=e,this._ctx.start=a.start,this.buildParseTrees&&this._ctx.addChild(a),this._parseListeners!==null&&this.triggerEnterRuleEvent()}unrollRecursionContexts(e){this._precedenceStack.pop(),this._ctx.stop=this._input.LT(-1);let u=this._ctx;if(this._parseListeners!==null)for(;this._ctx!==e;)this.triggerExitRuleEvent(),this._ctx=this._ctx.parentCtx;else this._ctx=e;u.parentCtx=e,this.buildParseTrees&&e!==null&&e.addChild(u)}getInvokingContext(e){let u=this._ctx;for(;u!==null;){if(u.ruleIndex===e)return u;u=u.parentCtx}return null}precpred(e,u){return u>=this._precedenceStack[this._precedenceStack.length-1]}inContext(e){return!1}isExpectedToken(e){let u=this._interp.atn,r=this._ctx,a=u.states[this.state],s=u.nextTokens(a);if(s.contains(e))return!0;if(!s.contains(J1.EPSILON))return!1;for(;r!==null&&r.invokingState>=0&&s.contains(J1.EPSILON);){let l=u.states[r.invokingState].transitions[0];if(s=u.nextTokens(l.followState),s.contains(e))return!0;r=r.parentCtx}return!!(s.contains(J1.EPSILON)&&e===J1.EOF)}getExpectedTokens(){return this._interp.atn.getExpectedTokens(this.state,this._ctx)}getExpectedTokensWithinCurrentRule(){let e=this._interp.atn,u=e.states[this.state];return e.nextTokens(u)}getRuleIndex(e){let u=this.getRuleIndexMap()[e];return u!==null?u:-1}getRuleInvocationStack(e){e=e||null,e===null&&(e=this._ctx);let u=[];for(;e!==null;){let r=e.ruleIndex;r<0?u.push("n/a"):u.push(this.ruleNames[r]),e=e.parentCtx}return u}getDFAStrings(){return this._interp.decisionToDFA.toString()}dumpDFA(){let e=!1;for(let u=0;u0&&(e&&console.log(),this.printer.println("Decision "+r.decision+":"),this.printer.print(r.toString(this.literalNames,this.symbolicNames)),e=!0)}}getSourceName(){return this._input.sourceName}setTrace(e){e?(this._tracer!==null&&this.removeParseListener(this._tracer),this._tracer=new HO(this),this.addParseListener(this._tracer)):(this.removeParseListener(this._tracer),this._tracer=null)}};c(GO,"Parser");var d3=GO;d3.bypassAltsAtnCache={};Ug.exports=d3});var z1=b(Le=>{Le.atn=dg();Le.codepointat=SO();Le.dfa=Eg();Le.fromcodepoint=mO();Le.tree=Mg();Le.error=Ag();Le.Token=me().Token;Le.CharStreams=Ng();Le.CommonToken=me().CommonToken;Le.InputStream=c3();Le.FileStream=Ig();Le.CommonTokenStream=wg();Le.Lexer=G1();Le.Parser=Pg();var OG=Wt();Le.PredictionContextCache=OG.PredictionContextCache;Le.ParserRuleContext=cO();Le.Interval=Su().Interval;Le.IntervalSet=Su().IntervalSet;Le.Utils=su();Le.LL1Analyzer=rS().LL1Analyzer});var Fg=b((N$,kg)=>{var os=z1(),LG=["\u608B\uA72A\u8133\uB9ED\u417C\u3BE7\u7786","\u5964\u016D\u0F01\b  ","   \x07",` \x07\b \b  + +\v \v`,"\f \f\r \r  ","    ","   ","    ","\x1B \x1B  ",'   ! !" "#'," #$ $% %& &' '( () )","* *+ +, ,- -. ./ /0 0","1 12 23 34 45 56 67 7","8 89 9: :; ;< <= => >","? ?@ @A AB BC CD DE E","F FG GH HI IJ JK KL L","M MN NO OP PQ QR RS S","T TU UV VW WX XY YZ Z","[ [\\ \\] ]^ ^_ _` `a a","b bc cd de ef fg gh h","i ij jk kl lm mn no o","p pq qr rs st tu uv v","w wx xy yz z{ {| |} }","~ ~\x7F \x7F\x80 \x80\x81 \x81","\x82 \x82\x83 \x83\x84 \x84\x85 ","\x85\x86 \x86\x87 \x87\x88 \x88","\x89 \x89\x8A \x8A\x8B \x8B\x8C ","\x8C\x8D \x8D\x8E \x8E\x8F \x8F","\x90 \x90\x91 \x91\x92 \x92\x93 ","\x93\x94 \x94\x95 \x95\x96 \x96","\x97 \x97\x98 \x98\x99 \x99\x9A ","\x9A\x9B \x9B\x9C \x9C\x9D \x9D","\x9E \x9E\x9F \x9F\xA0 \xA0\xA1 ","\xA1\xA2 \xA2\xA3 \xA3\xA4 \xA4","\xA5 \xA5\xA6 \xA6\xA7 \xA7\xA8 ","\xA8\xA9 \xA9\xAA \xAA\xAB \xAB","\xAC \xAC\xAD \xAD\xAE \xAE\xAF ","\xAF\xB0 \xB0\xB1 \xB1\xB2 \xB2","\xB3 \xB3\xB4 \xB4\xB5 \xB5\xB6 ","\xB6\xB7 \xB7\xB8 \xB8\xB9 \xB9","\xBA \xBA\xBB \xBB\xBC \xBC\xBD ","\xBD\xBE \xBE\xBF \xBF\xC0 \xC0","\xC1 \xC1\xC2 \xC2\xC3 \xC3\xC4 ","\xC4\xC5 \xC5\xC6 \xC6\xC7 \xC7","\xC8 \xC8\xC9 \xC9\xCA \xCA\xCB ","\xCB\xCC \xCC\xCD \xCD\xCE \xCE","\xCF \xCF\xD0 \xD0\xD1 \xD1\xD2 ","\xD2\xD3 \xD3\xD4 \xD4\xD5 \xD5","\xD6 \xD6\xD7 \xD7\xD8 \xD8\xD9 ","\xD9\xDA \xDA\xDB \xDB\xDC \xDC","\xDD \xDD\xDE \xDE\xDF \xDF\xE0 ","\xE0\xE1 \xE1\xE2 \xE2\xE3 \xE3","\xE4 \xE4\xE5 \xE5\xE6 \xE6\xE7 ","\xE7\xE8 \xE8\xE9 \xE9\xEA \xEA","\xEB \xEB\xEC \xEC\xED \xED\xEE ","\xEE\xEF \xEF\xF0 \xF0\xF1 \xF1","\xF2 \xF2\xF3 \xF3\xF4 \xF4\xF5 ","\xF5\xF6 \xF6\xF7 \xF7\xF8 \xF8","\xF9 \xF9\xFA \xFA\xFB \xFB\xFC ","\xFC\xFD \xFD\xFE \xFE\xFF \xFF","\u0100 \u0100\u0101 \u0101\u0102 \u0102\u0103 ","\u0103\u0104 \u0104\u0105 \u0105\u0106 \u0106","\u0107 \u0107\u0108 \u0108\u0109 \u0109\u010A ","\u010A\u010B \u010B\u010C \u010C\u010D \u010D","\u010E \u010E\u010F \u010F\u0110 \u0110\u0111 ","\u0111\u0112 \u0112\u0113 \u0113\u0114 \u0114","\u0115 \u0115\u0116 \u0116\u0117 \u0117\u0118 ","\u0118\u0119 \u0119\u011A \u011A\u011B \u011B","\u011C \u011C\u011D \u011D\u011E \u011E\u011F ","\u011F\u0120 \u0120\u0121 \u0121\u0122 \u0122","\u0123 \u0123\u0124 \u0124\u0125 \u0125\u0126 ","\u0126\u0127 \u0127\u0128 \u0128\u0129 \u0129","\u012A \u012A\u012B \u012B\u012C \u012C\u012D ","\u012D\u012E \u012E\u012F \u012F\u0130 \u0130","\u0131 \u0131\u0132 \u0132\u0133 \u0133\u0134 ","\u0134\u0135 \u0135\u0136 \u0136\u0137 \u0137","\u0138 \u0138\u0139 \u0139\u013A \u013A\u013B ","\u013B\u013C \u013C\u013D \u013D\u013E \u013E","\u013F \u013F\u0140 \u0140\u0141 \u0141\u0142 ","\u0142\u0143 \u0143\u0144 \u0144\u0145 \u0145","\u0146 \u0146\u0147 \u0147\u0148 \u0148\u0149 ","\u0149\u014A \u014A\u014B \u014B\u014C \u014C","\u014D \u014D\u014E \u014E\u014F \u014F\u0150 ","\u0150\u0151 \u0151\u0152 \u0152\u0153 \u0153","\u0154 \u0154\u0155 \u0155\u0156 \u0156\u0157 ","\u0157\u0158 \u0158\u0159 \u0159\u015A \u015A","\u015B \u015B\u015C \u015C\u015D \u015D\u015E ","\u015E\u015F \u015F\u0160 \u0160\u0161 \u0161","\u0162 \u0162\u0163 \u0163\u0164 \u0164\u0165 ","\u0165\u0166 \u0166\u0167 \u0167\u0168 \u0168","\u0169 \u0169\u016A \u016A\u016B \u016B\u016C ","\u016C\u016D \u016D\u016E \u016E\u016F \u016F","\u0170 \u0170\u0171 \u0171\u0172 \u0172\u0173 ","\u0173\u0174 \u0174\u0175 \u0175\u0176 \u0176","\u0177 \u0177\u0178 \u0178\u0179 \u0179\u017A ","\u017A\u017B \u017B\u017C \u017C\u017D \u017D","\u017E \u017E\u017F \u017F\u0180 \u0180\u0181 ","\u0181\u0182 \u0182\u0183 \u0183\u0184 \u0184","\u0185 \u0185\u0186 \u0186\u0187 \u0187\u0188 ","\u0188\u0189 \u0189\u018A \u018A\u018B \u018B","\u018C \u018C\u018D \u018D\u018E \u018E\u018F ","\u018F\u0190 \u0190\u0191 \u0191\u0192 \u0192","\u0193 \u0193\u0194 \u0194\u0195 \u0195\u0196 ","\u0196\u0197 \u0197\u0198 \u0198\u0199 \u0199","\u019A \u019A\u019B \u019B\u019C \u019C\u019D ","\u019D\u019E \u019E\u019F \u019F\u01A0 \u01A0","\u01A1 \u01A1","","\x07\x07","\x07\b\b     \u035B",` +  + +\v\v\f\f\r`,"\r","","","","","\x1B\x1B"," ",' !!""###$',"$$%%%&&&&'","'((()))***","++,,,--../","/001122334","4556677889","9::;;<<==>",">??@@AABBC","CDDEEFFGGH",`H\u03E7 +H\rHH\u03E8IIJJJ`,`JJ\u03F1 +J\rJJ\u03F2JJJJ`,`J\u03F9 +J\rJJ\u03FAJJJ\u03FF +JK`,`KKKK\u0405 +K\rKK\u0406KK`,`KKK\u040D +K\rKK\u040EKK\u0412 +K`,`LLMM\u0417 +MMMMNN\u041D`,` +NNN\u0420 +NNNNNN\u0426`,` +NNNOOOOOOO`,"OPPPPPPPPP","QQQQQQQQQQ","RRRRRRRRSS","SSSSSSSSSS",`S\u0459 +STTTTTTTU`,"UUUUUUVVVV","VVVWWWWWXX","XXYYYYYZZZ","ZZZ[[[[[[[","[\\\\\\\\\\]]]","]]]]]^^^^^","^_______``","``aaaaaaaa","abbbbbbbbb","bbbbbccccc","cccccccccd","dddddddddd","ddddddeeee","eeeeeeeeee","efffffffff","fffffffffg","gggggggggg","gggggggggh","hhhhhiiiii","iijjjjjkkk","kkkkklllll","llllmmmmmm","mmmmnnnnnn","nnooooooop","ppppppqqqr","rrrrrrrrrs","sstttttuuu","uuuvvvvvvv","wwwwwwwwww","xxxxxxxxxx","yyyyyyyyyz","zzzzzzz{{{","{||||||||}","}}}~~~~~~~","~~~\x7F\x7F\x7F\x7F","\x7F\x7F\x7F\x7F\x80\x80","\x80\x80\x80\x80\x81\x81","\x81\x81\x81\x82\x82\x82","\x83\x83\x83\x83\x83\x83","\x83\x84\x84\x84\x84\x84","\x85\x85\x85\x85\x85\x85","\x85\x85\x86\x86\x86\x86","\x86\x86\x86\x86\x86\x86","\x87\x87\x87\x87\x87\x87","\x87\x88\x88\x88\x88\x88","\x89\x89\x89\x89\x89\x89","\x8A\x8A\x8A\x8A\x8B\x8B","\x8B\x8B\x8B\x8C\x8C\x8C","\x8C\x8C\x8D\x8D\x8D\x8D","\x8D\x8E\x8E\x8E\x8E\x8E","\x8E\x8E\x8F\x8F\x8F\x8F","\x8F\x8F\x90\x90\x90\x90","\x90\x90\x90\x90\x90\x90","\x90\x90\x90\x91\x91\x91","\x91\x91\x91\x91\x91\x91","\x91\x92\x92\x92\x92\x92","\x92\x92\x92\x92\x92\x92","\x92\x92\x92\x92\x92\x92","\x92\x92\x93\x93\x93\x93","\x94\x94\x94\x95\x95\x95","\x95\x95\x96\x96\x96\x97","\x97\x97\x97\x97\x97\x98","\x98\x98\x98\x98\x99\x99","\x99\x99\x99\x99\x99\x9A","\x9A\x9A\x9A\x9A\x9B\x9B","\x9B\x9B\x9B\x9B\x9B\x9C","\x9C\x9C\x9C\x9C\x9C\x9C","\x9D\x9D\x9D\x9D\x9D\x9D","\x9E\x9E\x9E\x9E\x9E\x9E","\x9E\x9E\x9F\x9F\x9F\xA0","\xA0\xA0\xA1\xA1\xA1\xA1","\xA1\xA1\xA2\xA2\xA2\xA2","\xA2\xA2\xA2\xA2\xA3\xA3","\xA3\xA3\xA3\xA3\xA4\xA4","\xA4\xA4\xA4\xA5\xA5\xA5","\xA5\xA5\xA6\xA6\xA6\xA6","\xA6\xA6\xA7\xA7\xA7\xA7","\xA7\xA7\xA8\xA8\xA8\xA8","\xA8\xA8\xA9\xA9\xA9\xA9","\xA9\xA9\xA9\xA9\xAA\xAA","\xAA\xAA\xAA\xAA\xAA\xAA","\xAA\xAA\xAA\xAB\xAB\xAB","\xAB\xAB\xAB\xAB\xAB\xAC","\xAC\xAC\xAC\xAC\xAC\xAC","\xAC\xAC\xAC\xAC\xAD\xAD","\xAD\xAD\xAD\xAD\xAD\xAE","\xAE\xAE\xAE\xAE\xAF\xAF","\xAF\xAF\xAF\xAF\xAF\xB0","\xB0\xB0\xB0\xB0\xB0\xB1","\xB1\xB1\xB1\xB1\xB1\xB2","\xB2\xB2\xB2\xB2\xB3\xB3","\xB3\xB3\xB4\xB4\xB4\xB4","\xB4\xB4\xB5\xB5\xB5\xB5","\xB5\xB5\xB5\xB6\xB6\xB6","\xB6\xB7\xB7\xB7\xB7\xB7","\xB7\xB8\xB8\xB8\xB8\xB8","\xB8\xB8\xB8\xB9\xB9\xB9","\xBA\xBA\xBA\xBA\xBA\xBB","\xBB\xBB\xBB\xBB\xBB\xBC","\xBC\xBC\xBC\xBC\xBC\xBC","\xBC\xBD\xBD\xBD\xBD\xBE","\xBE\xBE\xBE\xBF\xBF\xBF","\xC0\xC0\xC0\xC0\xC1\xC1","\xC1\xC1\xC1\xC1\xC1\xC2","\xC2\xC2\xC2\xC2\xC2\xC2","\xC3\xC3\xC3\xC3\xC3\xC4","\xC4\xC4\xC4\xC4\xC4\xC4","\xC5\xC5\xC5\xC5\xC5\xC5","\xC5\xC6\xC6\xC6\xC6\xC7","\xC7\xC7\xC7\xC8\xC8\xC8","\xC8\xC8\xC8\xC9\xC9\xC9","\xC9\xC9\xC9\xC9\xC9\xCA","\xCA\xCA\xCA\xCA\xCA\xCA","\xCB\xCB\xCB\xCB\xCB\xCC","\xCC\xCC\xCC\xCC\xCC\xCD","\xCD\xCD\xCD\xCD\xCE\xCE","\xCE\xCE\xCF\xCF\xCF\xCF","\xCF\xCF\xCF\xCF\xD0\xD0","\xD0\xD0\xD0\xD0\xD0\xD0","\xD1\xD1\xD1\xD1\xD2\xD2","\xD2\xD2\xD2\xD2\xD2\xD2","\xD3\xD3\xD3\xD3\xD3\xD3","\xD3\xD4\xD4\xD4\xD4\xD4","\xD4\xD4\xD4\xD5\xD5\xD5","\xD5\xD5\xD5\xD6\xD6\xD6","\xD6\xD7\xD7\xD7\xD7\xD8","\xD8\xD8\xD8\xD9\xD9\xD9","\xD9\xD9\xD9\xD9\xD9\xD9","\xDA\xDA\xDA\xDA\xDA\xDA","\xDA\xDA\xDA\xDA\xDA\xDA","\xDB\xDB\xDB\xDB\xDB\xDB","\xDB\xDB\xDB\xDC\xDC\xDC","\xDC\xDD\xDD\xDD\xDD\xDD","\xDD\xDD\xDD\xDD\xDD\xDD","\xDD\xDD\xDE\xDE\xDE\xDE","\xDE\xDE\xDE\xDE\xDE\xDE","\xDF\xDF\xDF\xDF\xDF\xDF","\xDF\xDF\xDF\xE0\xE0\xE0","\xE0\xE0\xE0\xE0\xE0\xE0","\xE0\xE0\xE1\xE1\xE1\xE1","\xE1\xE2\xE2\xE2\xE2\xE2","\xE2\xE2\xE2\xE2\xE2\xE2","\xE3\xE3\xE3\xE3\xE3\xE3","\xE3\xE3\xE3\xE3\xE4\xE4","\xE4\xE4\xE4\xE4\xE4\xE4","\xE4\xE4\xE4\xE4\xE4\xE5","\xE5\xE5\xE5\xE5\xE5\xE6","\xE6\xE6\xE6\xE6\xE7\xE7","\xE7\xE7\xE8\xE8\xE8\xE8","\xE8\xE8\xE8\xE8\xE8\xE8","\xE8\xE8\xE9\xE9\xE9\xE9","\xE9\xE9\xE9\xE9\xE9\xE9","\xE9\xEA\xEA\xEA\xEA\xEA","\xEA\xEA\xEA\xEA\xEA\xEB","\xEB\xEB\xEB\xEB\xEB\xEC","\xEC\xEC\xEC\xEC\xED\xED","\xED\xED\xED\xEE\xEE\xEE","\xEE\xEE\xEE\xEE\xEE\xEF","\xEF\xEF\xEF\xEF\xEF\xF0","\xF0\xF0\xF0\xF0\xF0\xF0","\xF0\xF0\xF0\xF0\xF0\xF0","\xF0\xF1\xF1\xF1\xF1\xF1","\xF1\xF1\xF1\xF1\xF1\xF1","\xF1\xF1\xF1\xF1\xF2\xF2","\xF2\xF2\xF2\xF2\xF2\xF2","\xF3\xF3\xF3\xF3\xF3\xF3","\xF3\xF3\xF3\xF4\xF4\xF4","\xF4\xF4\xF4\xF5\xF5\xF5","\xF5\xF5\xF5\xF5\xF5\xF5","\xF5\xF6\xF6\xF6\xF6\xF6","\xF6\xF6\xF6\xF6\xF6\xF6",`\xF6\xF6\xF6\xF6\xF6\u08F1 +\xF6`,"\xF7\xF7\xF7\xF7\xF7\xF7","\xF7\xF7\xF7\xF7\xF7\xF7","\xF7\xF8\xF8\xF8\xF8\xF8","\xF9\xF9\xF9\xF9\xF9\xF9","\xF9\xFA\xFA\xFA\xFA\xFA","\xFB\xFB\xFB\xFB\xFB\xFB","\xFB\xFB\xFB\xFB\xFC\xFC","\xFC\xFC\xFC\xFC\xFC\xFC","\xFC\xFC\xFC\xFC\xFC\xFC","\xFC\xFC\xFC\xFC\xFC\xFC","\xFC\xFC\xFC\xFC\xFC\xFC",`\xFC\xFC\u0936 +\xFC\xFD\xFD`,"\xFD\xFD\xFD\xFD\xFD\xFD","\xFD\xFD\xFD\xFD\xFD\xFD","\xFD\xFD\xFD\xFD\xFD\xFD","\xFD\xFD\xFD\xFD\xFD\xFD",`\xFD\xFD\u0953 +\xFD\xFE\xFE\xFE`,"\xFE\xFE\xFF\xFF\xFF\xFF","\xFF\u0100\u0100\u0100\u0100\u0100","\u0100\u0100\u0100\u0101\u0101\u0101","\u0101\u0101\u0101\u0101\u0101\u0102","\u0102\u0102\u0102\u0102\u0102\u0102","\u0102\u0103\u0103\u0103\u0103\u0103","\u0103\u0103\u0103\u0104\u0104\u0104","\u0104\u0104\u0104\u0104\u0104\u0104","\u0105\u0105\u0105\u0105\u0105\u0105","\u0105\u0105\u0105\u0106\u0106\u0106","\u0106\u0106\u0106\u0106\u0106\u0107","\u0107\u0107\u0107\u0107\u0107\u0107","\u0107\u0107\u0107\u0107\u0108\u0108","\u0108\u0108\u0109\u0109\u0109\u0109","\u0109\u0109\u0109\u0109\u0109\u010A","\u010A\u010A\u010A\u010A\u010A\u010A","\u010A\u010B\u010B\u010B\u010B\u010B","\u010B\u010B\u010B\u010B\u010B\u010B","\u010B\u010B\u010B\u010C\u010C\u010C","\u010C\u010C\u010C\u010C\u010C\u010C","\u010C\u010C\u010C\u010C\u010C\u010C","\u010D\u010D\u010D\u010D\u010D\u010D","\u010D\u010D\u010D\u010E\u010E\u010E","\u010E\u010E\u010E\u010E\u010E\u010E","\u010F\u010F\u010F\u010F\u010F\u010F","\u010F\u010F\u010F\u010F\u010F\u010F","\u010F\u010F\u0110\u0110\u0110\u0110","\u0110\u0110\u0111\u0111\u0111\u0111","\u0111\u0111\u0111\u0111\u0112\u0112","\u0112\u0112\u0112\u0112\u0112\u0112","\u0112\u0113\u0113\u0113\u0113\u0113","\u0113\u0113\u0113\u0113\u0113\u0114","\u0114\u0114\u0114\u0114\u0114\u0114","\u0114\u0114\u0115\u0115\u0115\u0116","\u0116\u0116\u0116\u0116\u0116\u0116","\u0117\u0117\u0117\u0117\u0117\u0117","\u0117\u0117\u0117\u0117\u0117\u0117","\u0118\u0118\u0118\u0118\u0118\u0118","\u0118\u0118\u0118\u0118\u0118\u0118","\u0118\u0119\u0119\u0119\u0119\u0119","\u0119\u0119\u0119\u0119\u011A\u011A","\u011A\u011A\u011A\u011A\u011A\u011B","\u011B\u011B\u011B\u011B\u011B\u011B","\u011B\u011C\u011C\u011C\u011C\u011C","\u011C\u011C\u011C\u011D\u011D\u011D","\u011D\u011D\u011D\u011D\u011D\u011D","\u011D\u011E\u011E\u011E\u011E\u011E","\u011E\u011E\u011E\u011E\u011F\u011F","\u011F\u011F\u011F\u011F\u011F\u011F","\u011F\u011F\u011F\u011F\u011F\u011F","\u0120\u0120\u0120\u0120\u0120\u0120","\u0120\u0120\u0120\u0121\u0121\u0121","\u0121\u0121\u0121\u0121\u0121\u0121","\u0121\u0121\u0121\u0121\u0121\u0121","\u0121\u0121\u0121\u0121\u0122\u0122","\u0122\u0122\u0122\u0122\u0122\u0122","\u0122\u0122\u0122\u0123\u0123\u0123","\u0123\u0123\u0123\u0123\u0123\u0123","\u0123\u0123\u0123\u0123\u0123\u0123","\u0123\u0124\u0124\u0124\u0124\u0124","\u0124\u0124\u0124\u0124\u0124\u0124","\u0125\u0125\u0125\u0125\u0125\u0125","\u0125\u0125\u0125\u0125\u0125\u0125","\u0125\u0126\u0126\u0126\u0126\u0126","\u0126\u0127\u0127\u0127\u0127\u0127","\u0127\u0127\u0127\u0128\u0128\u0128","\u0128\u0128\u0128\u0129\u0129\u0129","\u0129\u0129\u0129\u0129\u0129\u0129","\u012A\u012A\u012A\u012A\u012A\u012B","\u012B\u012B\u012B\u012B\u012B\u012B","\u012B\u012C\u012C\u012C\u012C\u012C","\u012C\u012C\u012C\u012C\u012D\u012D","\u012D\u012D\u012D\u012E\u012E\u012E","\u012E\u012E\u012E\u012E\u012F\u012F","\u012F\u012F\u012F\u012F\u012F\u012F","\u012F\u012F\u0130\u0130\u0130\u0130","\u0130\u0131\u0131\u0131\u0131\u0131","\u0132\u0132\u0132\u0132\u0132\u0133","\u0133\u0133\u0133\u0133\u0133\u0133","\u0134\u0134\u0134\u0134\u0134\u0134","\u0134\u0134\u0134\u0135\u0135\u0135","\u0135\u0135\u0135\u0135\u0135\u0135",`\u0135\u0135\u0135\u0135\u0B47 +\u0135`,"\u0136\u0136\u0136\u0136\u0136\u0137","\u0137\u0137\u0137\u0137\u0137\u0138","\u0138\u0138\u0138\u0138\u0138\u0138","\u0139\u0139\u0139\u0139\u0139\u0139","\u0139\u013A\u013A\u013A\u013A\u013B","\u013B\u013B\u013B\u013B\u013B\u013B","\u013B\u013B\u013B\u013B\u013B\u013B","\u013B\u013B\u013B\u013B\u013B\u013B","\u013C\u013C\u013C\u013C\u013C\u013C","\u013C\u013C\u013C\u013C\u013C\u013C","\u013C\u013C\u013C\u013C\u013C\u013C","\u013C\u013D\u013D\u013D\u013D\u013D","\u013D\u013D\u013D\u013D\u013D\u013D","\u013D\u013D\u013D\u013E\u013E\u013E","\u013E\u013E\u013E\u013E\u013E\u013E","\u013E\u013E\u013E\u013E\u013E\u013E","\u013E\u013E\u013F\u013F\u013F\u013F","\u013F\u013F\u013F\u013F\u013F\u013F","\u013F\u013F\u0140\u0140\u0140\u0140","\u0140\u0140\u0140\u0140\u0140\u0140","\u0140\u0140\u0141\u0141\u0141\u0141","\u0141\u0141\u0141\u0141\u0141\u0141","\u0141\u0141\u0141\u0141\u0141\u0141","\u0142\u0142\u0142\u0142\u0142\u0142","\u0142\u0142\u0142\u0142\u0142\u0143","\u0143\u0143\u0143\u0143\u0143\u0143","\u0143\u0143\u0143\u0143\u0144\u0144","\u0144\u0144\u0144\u0144\u0144\u0144","\u0144\u0145\u0145\u0145\u0145\u0145","\u0145\u0145\u0145\u0145\u0145\u0145","\u0146\u0146\u0146\u0146\u0146\u0146","\u0147\u0147\u0147\u0147\u0147\u0147","\u0148\u0148\u0148\u0148\u0148\u0149","\u0149\u0149\u0149\u0149\u014A\u014A","\u014A\u014A\u014A\u014A\u014A\u014B","\u014B\u014B\u014B\u014B\u014B\u014B","\u014B\u014B\u014B\u014C\u014C\u014C","\u014C\u014C\u014C\u014C\u014C\u014D","\u014D\u014D\u014D\u014D\u014D\u014D","\u014E\u014E\u014E\u014E\u014E\u014E","\u014F\u014F\u014F\u014F\u0150\u0150","\u0150\u0150\u0150\u0151\u0151\u0151","\u0151\u0151\u0151\u0151\u0151\u0152","\u0152\u0152\u0152\u0152\u0152\u0152","\u0152\u0153\u0153\u0153\u0153\u0153","\u0153\u0153\u0153\u0153\u0154\u0154","\u0154\u0154\u0154\u0154\u0154\u0154","\u0154\u0155\u0155\u0155\u0155\u0155","\u0155\u0155\u0155\u0155\u0156\u0156","\u0156\u0156\u0156\u0156\u0156\u0156","\u0156\u0156\u0157\u0157\u0157\u0157","\u0157\u0157\u0158\u0158\u0158\u0158","\u0158\u0158\u0158\u0158\u0158\u0158","\u0159\u0159\u0159\u0159\u0159\u0159","\u0159\u0159\u0159\u015A\u015A\u015A","\u015A\u015A\u015B\u015B\u015B\u015B","\u015B\u015C\u015C\u015C\u015C\u015C","\u015C\u015D\u015D\u015D\u015D\u015E","\u015E\u015E\u015E\u015E\u015E\u015E","\u015E\u015E\u015E\u015E\u015F\u015F","\u015F\u015F\u015F\u015F\u015F\u015F","\u015F\u0160\u0160\u0160\u0160\u0160","\u0161\u0161\u0161\u0161\u0161\u0161","\u0161\u0161\u0161\u0162\u0162\u0162","\u0162\u0162\u0163\u0163\u0163\u0163","\u0163\u0163\u0163\u0163\u0163\u0163","\u0163\u0164\u0164\u0164\u0164\u0164","\u0164\u0164\u0164\u0164\u0165\u0165","\u0165\u0165\u0165\u0166\u0166\u0166","\u0166\u0166\u0166\u0166\u0167\u0167","\u0167\u0167\u0167\u0167\u0167\u0167","\u0167\u0168\u0168\u0168\u0168\u0168","\u0168\u0168\u0168\u0168\u0169\u0169","\u0169\u0169\u0169\u016A\u016A\u016A","\u016A\u016A\u016A\u016A\u016A\u016B","\u016B\u016B\u016B\u016B\u016B\u016B","\u016B\u016B\u016B\u016B\u016C\u016C","\u016C\u016C\u016C\u016C\u016C\u016C","\u016C\u016C\u016C\u016D\u016D\u016D","\u016D\u016D\u016D\u016D\u016D\u016D","\u016E\u016E\u016E\u016E\u016E\u016E","\u016E\u016E\u016F\u016F\u016F\u016F","\u016F\u016F\u0170\u0170\u0170\u0170","\u0170\u0170\u0170\u0170\u0170\u0171","\u0171\u0171\u0171\u0171\u0171\u0171","\u0172\u0172\u0172\u0172\u0172\u0172","\u0173\u0173\u0173\u0173\u0173\u0173","\u0173\u0173\u0174\u0174\u0174\u0174","\u0174\u0174\u0174\u0174\u0175\u0175","\u0175\u0175\u0175\u0175\u0175\u0176","\u0176\u0176\u0176\u0176\u0176\u0176","\u0176\u0176\u0176\u0177\u0177\u0177","\u0177\u0177\u0177\u0177\u0177\u0178","\u0178\u0178\u0178\u0178\u0178\u0178","\u0179\u0179\u0179\u0179\u0179\u0179","\u0179\u017A\u017A\u017A\u017A\u017A","\u017A\u017A\u017B\u017B\u017B\u017B","\u017B\u017B\u017B\u017C\u017C\u017C","\u017C\u017C\u017C\u017C\u017D\u017D","\u017D\u017D\u017D\u017D\u017D\u017D","\u017D\u017D\u017D\u017D\u017D\u017D","\u017D\u017D\u017D\u017E\u017E\u017E","\u017E\u017E\u017E\u017E\u017E\u017E","\u017E\u017E\u017E\u017E\u017E\u017E","\u017E\u017E\u017F\u017F\u017F\u017F","\u017F\u017F\u017F\u017F\u017F\u017F","\u017F\u017F\u017F\u017F\u017F\u0180","\u0180\u0180\u0180\u0180\u0180\u0180","\u0180\u0180\u0180\u0180\u0180\u0180","\u0180\u0181\u0181\u0181\u0181\u0181","\u0181\u0181\u0181\u0181\u0181\u0181","\u0181\u0181\u0181\u0181\u0182\u0182","\u0182\u0182\u0182\u0182\u0182\u0182","\u0182\u0182\u0182\u0182\u0182\u0182","\u0182\u0182\u0183\u0183\u0183\u0183","\u0183\u0183\u0183\u0183\u0183\u0183","\u0183\u0183\u0183\u0183\u0183\u0183","\u0183\u0183\u0184\u0184\u0184\u0184","\u0184\u0184\u0184\u0184\u0184\u0184","\u0184\u0184\u0184\u0184\u0184\u0185",`\u0185\u0185\u0185\u0186\u0186\u0E1D +\u0186`,`\u0187\u0187\u0187\u0E21 +\u0187\r\u0187\u0187`,`\u0E22\u0188\u0188\u0E26 +\u0188\r\u0188\u0188\u0E27`,`\u0188\u0188\u0188\x07\u0188\u0E2D +\u0188\f\u0188`,`\u0188\u0E30\v\u0188\u0188\u0E32 +\u0188\u0188`,`\u0188\u0E35 +\u0188\r\u0188\u0188\u0E36\u0188`,`\u0188\x07\u0188\u0E3B +\u0188\f\u0188\u0188\u0E3E\v\u0188`,`\u0188\u0188\x07\u0188\u0E42 +\u0188\f\u0188\u0188`,`\u0E45\v\u0188\u0188\u0E47 +\u0188\u0189\u0189`,"\u0189\u018A\u018A\u018B\u018B\u018C",`\u018C\u018D\u018D\x07\u018D\u0E54 +\u018D\f\u018D`,"\u018D\u0E57\v\u018D\u018D\u018D\u018E",`\u018E\x07\u018E\u0E5D +\u018E\f\u018E\u018E\u0E60\v\u018E`,`\u018E\u018E\u018E\u0E64 +\u018E\r\u018E\u018E`,`\u0E65\u018F\u018F\x07\u018F\u0E6A +\u018F\f\u018F`,`\u018F\u0E6D\v\u018F\u018F\u018F\u018F\u0E71 +`,"\u018F\r\u018F\u018F\u0E72\u0190\u0190\x07\u0190",`\u0E77 +\u0190\f\u0190\u0190\u0E7A\v\u0190\u0190`,`\u0190\u0190\u0E7E +\u0190\r\u0190\u0190\u0E7F\u0191`,`\u0191\u0191\u0191\u0191\u0E86 +\u0191\r\u0191`,`\u0191\u0E87\u0192\u0192\x07\u0192\u0E8C +\u0192`,"\f\u0192\u0192\u0E8F\v\u0192\u0192\u0192",`\u0192\u0E93 +\u0192\r\u0192\u0192\u0E94\u0193\u0193`,"\u0193\u0193\u0193\u0193\u0193\x07\u0193",`\u0E9E +\u0193\f\u0193\u0193\u0EA1\v\u0193\u0193`,"\u0193\u0193\u0193\u0193\u0194\u0194","\u0194\u0194\u0194\u0194\u0195\u0195",`\u0195\u0195\x07\u0195\u0EB2 +\u0195\f\u0195\u0195\u0EB5`,"\v\u0195\u0195\u0195\u0196\u0196\u0196","\u0196\u0196\u0197\u0197\u0197\u0197","\u0197\u0197\u0197\u0197\u0197\x07\u0197",`\u0EC7 +\u0197\f\u0197\u0197\u0ECA\v\u0197\u0197`,`\u0197\u0197\u0ECE +\u0197\u0197\u0197\u0198`,`\u0198\x07\u0198\u0ED4 +\u0198\f\u0198\u0198\u0ED7\v`,"\u0198\u0198\u0198\u0199\u0199\x07\u0199\u0EDD",` +\u0199\f\u0199\u0199\u0EE0\v\u0199\u0199\u0199`,`\u0199\u0EE4 +\u0199\u0199\u0199\u019A`,"\u019A\u019A\u019B\u019B\u019C\u019C",`\u019C\u019C\u0EF0 +\u019C\r\u019C\u019C\u0EF1\u019D`,"\u019D\u019D\u019E\u019E\u019E\u019F",`\u019F\u019F\u0EFC +\u019F\u01A0\u01A0`,"\u01A1\u01A1 \u0E55\u0E5E\u0E6B\u0E78\u0E8D\u0E9F\u0EC8","\u01A2\x07 \v\x07\r\b",`  +\v\f\r\x1B`,"!#%')+-",`/13\x1B579;= ?!A"C#E$G%I&K'`,"M(O)Q*S+U,W-Y[]_aceg","ikmoqsuwy{","}\x7F\x81\x83\x85\x87","\x89\x8B\x8D\x8F\x91\x93.","\x95/\x970\x991\x9B2\x9D3\x9F4\xA15\xA36\xA57\xA7","8\xA99\xAB:\xAD;\xAF<\xB1=\xB3>\xB5?\xB7@\xB9A\xBB","B\xBDC\xBFD\xC1E\xC3F\xC5G\xC7H\xC9I\xCBJ\xCDK\xCF","L\xD1M\xD3N\xD5O\xD7P\xD9Q\xDBR\xDDS\xDFT\xE1U\xE3","V\xE5W\xE7X\xE9Y\xEBZ\xED[\xEF\\\xF1]\xF3^\xF5_\xF7","`\xF9a\xFBb\xFDc\xFFd\u0101e\u0103f\u0105g\u0107h\u0109i\u010B","j\u010Dk\u010Fl\u0111m\u0113n\u0115o\u0117p\u0119q\u011Br\u011Ds\u011F","t\u0121u\u0123v\u0125w\u0127x\u0129y\u012Bz\u012D{\u012F|\u0131}\u0133","~\u0135\x7F\u0137\x80\u0139\x81\u013B\x82\u013D\x83\u013F","\x84\u0141\x85\u0143\x86\u0145\x87\u0147\x88\u0149\x89\u014B","\x8A\u014D\x8B\u014F\x8C\u0151\x8D\u0153\x8E\u0155\x8F\u0157","\x90\u0159\x91\u015B\x92\u015D\x93\u015F\x94\u0161\x95\u0163","\x96\u0165\x97\u0167\x98\u0169\x99\u016B\x9A\u016D\x9B\u016F","\x9C\u0171\x9D\u0173\x9E\u0175\x9F\u0177\xA0\u0179\xA1\u017B","\xA2\u017D\xA3\u017F\xA4\u0181\xA5\u0183\xA6\u0185\xA7\u0187","\xA8\u0189\xA9\u018B\xAA\u018D\xAB\u018F\xAC\u0191\xAD\u0193","\xAE\u0195\xAF\u0197\xB0\u0199\xB1\u019B\xB2\u019D\xB3\u019F","\xB4\u01A1\xB5\u01A3\xB6\u01A5\xB7\u01A7\xB8\u01A9\xB9\u01AB","\xBA\u01AD\xBB\u01AF\xBC\u01B1\xBD\u01B3\xBE\u01B5\xBF\u01B7","\xC0\u01B9\xC1\u01BB\xC2\u01BD\xC3\u01BF\xC4\u01C1\xC5\u01C3","\xC6\u01C5\xC7\u01C7\xC8\u01C9\xC9\u01CB\xCA\u01CD\xCB\u01CF","\xCC\u01D1\xCD\u01D3\xCE\u01D5\xCF\u01D7\xD0\u01D9\xD1\u01DB","\xD2\u01DD\xD3\u01DF\xD4\u01E1\xD5\u01E3\xD6\u01E5\xD7\u01E7","\xD8\u01E9\xD9\u01EB\xDA\u01ED\xDB\u01EF\xDC\u01F1\xDD\u01F3","\xDE\u01F5\xDF\u01F7\xE0\u01F9\xE1\u01FB\xE2\u01FD\xE3\u01FF","\xE4\u0201\xE5\u0203\xE6\u0205\xE7\u0207\xE8\u0209\xE9\u020B","\xEA\u020D\xEB\u020F\xEC\u0211\xED\u0213\xEE\u0215\xEF\u0217","\xF0\u0219\xF1\u021B\xF2\u021D\xF3\u021F\xF4\u0221\xF5\u0223","\xF6\u0225\xF7\u0227\xF8\u0229\xF9\u022B\xFA\u022D\xFB\u022F","\xFC\u0231\xFD\u0233\xFE\u0235\xFF\u0237\u0100\u0239\u0101\u023B","\u0102\u023D\u0103\u023F\u0104\u0241\u0105\u0243\u0106\u0245\u0107\u0247","\u0108\u0249\u0109\u024B\u010A\u024D\u010B\u024F\u010C\u0251\u010D\u0253","\u010E\u0255\u010F\u0257\u0110\u0259\u0111\u025B\u0112\u025D\u0113\u025F","\u0114\u0261\u0115\u0263\u0116\u0265\u0117\u0267\u0118\u0269\u0119\u026B","\u011A\u026D\u011B\u026F\u011C\u0271\u011D\u0273\u011E\u0275\u011F\u0277","\u0120\u0279\u0121\u027B\u0122\u027D\u0123\u027F\u0124\u0281\u0125\u0283","\u0126\u0285\u0127\u0287\u0128\u0289\u0129\u028B\u012A\u028D\u012B\u028F","\u012C\u0291\u012D\u0293\u012E\u0295\u012F\u0297\u0130\u0299\u0131\u029B","\u0132\u029D\u0133\u029F\u0134\u02A1\u0135\u02A3\u0136\u02A5\u0137\u02A7","\u0138\u02A9\u0139\u02AB\u013A\u02AD\u013B\u02AF\u013C\u02B1\u013D\u02B3","\u013E\u02B5\u013F\u02B7\u0140\u02B9\u0141\u02BB\u0142\u02BD\u0143\u02BF","\u0144\u02C1\u0145\u02C3\u0146\u02C5\u0147\u02C7\u0148\u02C9\u0149\u02CB","\u014A\u02CD\u014B\u02CF\u014C\u02D1\u014D\u02D3\u014E\u02D5\u014F\u02D7","\u0150\u02D9\u0151\u02DB\u0152\u02DD\u0153\u02DF\u0154\u02E1\u0155\u02E3","\u0156\u02E5\u0157\u02E7\u0158\u02E9\u0159\u02EB\u015A\u02ED\u015B\u02EF","\u02F1\u02F3\u02F5\u02F7\u02F9\u02FB","\u02FD\u02FF\u0301\u0303\u0305\u0307","\u0309\u015C\u030B\u015D\u030D\u015E\u030F\u015F\u0311\u0160\u0313","\u0315\u0317\u0319\u0161\u031B\u0162\u031D\u0163\u031F","\u0164\u0321\u0165\u0323\u0166\u0325\u0167\u0327\u0168\u0329\u0169\u032B","\u016A\u032D\u016B\u032F\u016C\u0331\u016D\u0333\u0335\u0337","\u0339\u033B\u033D\u033F\u0341","'CCccDDddEEee","FFffGGggHHhhIIiiJJj","jKKkkLLllMMmmNNnn","OOooPPppQQqqRRrr","SSssTTttUUuuVVvvWWw","wXXxxYYyyZZzz[[{{","\\\\||2;2;CHch23",`\v\f"" +\r!`,"2;c|\f\f##&&C\\aac|","\x07&&C\\aac|\x82 &&CFH\\aacfh|\x82","\u0F09","\x07 ","\v\r","","","","\x1B","!","#%","')","+-/","13","57","9;","=?","ACE","GI","KM","OQ","SU","W\x93","\x95\x97","\x99\x9B","\x9D\x9F","\xA1\xA3","\xA5\xA7","\xA9\xAB","\xAD\xAF","\xB1\xB3","\xB5\xB7","\xB9\xBB","\xBD\xBF","\xC1\xC3","\xC5\xC7","\xC9\xCB","\xCD\xCF","\xD1\xD3","\xD5\xD7","\xD9\xDB","\xDD\xDF","\xE1\xE3","\xE5\xE7","\xE9\xEB","\xED\xEF","\xF1\xF3","\xF5\xF7","\xF9\xFB","\xFD\xFF","\u0101\u0103","\u0105\u0107","\u0109\u010B","\u010D\u010F","\u0111\u0113","\u0115\u0117","\u0119\u011B","\u011D\u011F","\u0121\u0123","\u0125\u0127","\u0129\u012B","\u012D\u012F","\u0131\u0133","\u0135\u0137","\u0139\u013B","\u013D\u013F","\u0141\u0143","\u0145\u0147","\u0149\u014B","\u014D\u014F","\u0151\u0153","\u0155\u0157","\u0159\u015B","\u015D\u015F","\u0161\u0163","\u0165\u0167","\u0169\u016B","\u016D\u016F","\u0171\u0173","\u0175\u0177","\u0179\u017B","\u017D\u017F","\u0181\u0183","\u0185\u0187","\u0189\u018B","\u018D\u018F","\u0191\u0193","\u0195\u0197","\u0199\u019B","\u019D\u019F","\u01A1\u01A3","\u01A5\u01A7","\u01A9\u01AB","\u01AD\u01AF","\u01B1\u01B3","\u01B5\u01B7","\u01B9\u01BB","\u01BD\u01BF","\u01C1\u01C3","\u01C5\u01C7","\u01C9\u01CB","\u01CD\u01CF","\u01D1\u01D3","\u01D5\u01D7","\u01D9\u01DB","\u01DD\u01DF","\u01E1\u01E3","\u01E5\u01E7","\u01E9\u01EB","\u01ED\u01EF","\u01F1\u01F3","\u01F5\u01F7","\u01F9\u01FB","\u01FD\u01FF","\u0201\u0203","\u0205\u0207","\u0209\u020B","\u020D\u020F","\u0211\u0213","\u0215\u0217","\u0219\u021B","\u021D\u021F","\u0221\u0223","\u0225\u0227","\u0229\u022B","\u022D\u022F","\u0231\u0233","\u0235\u0237","\u0239\u023B","\u023D\u023F","\u0241\u0243","\u0245\u0247","\u0249\u024B","\u024D\u024F","\u0251\u0253","\u0255\u0257","\u0259\u025B","\u025D\u025F","\u0261\u0263","\u0265\u0267","\u0269\u026B","\u026D\u026F","\u0271\u0273","\u0275\u0277","\u0279\u027B","\u027D\u027F","\u0281\u0283","\u0285\u0287","\u0289\u028B","\u028D\u028F","\u0291\u0293","\u0295\u0297","\u0299\u029B","\u029D\u029F","\u02A1\u02A3","\u02A5\u02A7","\u02A9\u02AB","\u02AD\u02AF","\u02B1\u02B3","\u02B5\u02B7","\u02B9\u02BB","\u02BD\u02BF","\u02C1\u02C3","\u02C5\u02C7","\u02C9\u02CB","\u02CD\u02CF","\u02D1\u02D3","\u02D5\u02D7","\u02D9\u02DB","\u02DD\u02DF","\u02E1\u02E3","\u02E5\u02E7","\u02E9\u02EB","\u02ED\u02EF","\u02F1\u02F3","\u02F5\u02F7","\u02F9\u02FB","\u02FD\u02FF","\u0301\u0303","\u0305\u0307","\u0309\u030B","\u030D\u030F","\u0311\u0319","\u031B\u031D","\u031F\u0321","\u0323\u0325","\u0327\u0329","\u032B\u032D","\u032F\u0331","\u0343\u0345\x07","\u0348 \u034C\v","\u034F\r\u0351","\u0354\u035A","\u035C\u035E","\u0360\u0362\x1B","\u0364\u0366","\u0368!\u036A#\u036D","%\u0370'\u0373",")\u0375+\u0377","-\u037A/\u037C","1\u037E3\u0380","5\u03827\u03849\u0386",";\u0388=\u038A","?\u038CA\u038E","C\u0390E\u0392","G\u0395I\u0398","K\u039BM\u039FO\u03A1","Q\u03A4S\u03A7","U\u03AAW\u03AC","Y\u03AF[\u03B1","]\u03B3_\u03B5","a\u03B7c\u03B9e\u03BB","g\u03BDi\u03BF","k\u03C1m\u03C3","o\u03C5q\u03C7","s\u03C9u\u03CB","w\u03CDy\u03CF{\u03D1","}\u03D3\x7F\u03D5","\x81\u03D7\x83\u03D9","\x85\u03DB\x87\u03DD","\x89\u03DF\x8B\u03E1","\x8D\u03E3\x8F\u03E6","\x91\u03EA\x93\u03FE","\x95\u0411\x97\u0413","\x99\u0416\x9B\u041F","\x9D\u0429\x9F\u0431","\xA1\u043A\xA3\u0444","\xA5\u0458\xA7\u045A","\xA9\u0461\xAB\u0468","\xAD\u046F\xAF\u0474","\xB1\u0478\xB3\u047D","\xB5\u0483\xB7\u048B","\xB9\u0490\xBB\u0498","\xBD\u049E\xBF\u04A5","\xC1\u04A9\xC3\u04B2","\xC5\u04C0\xC7\u04CE","\xC9\u04DF\xCB\u04EE","\xCD\u0500\xCF\u0514","\xD1\u051A\xD3\u0521","\xD5\u0526\xD7\u052E","\xD9\u0537\xDB\u0541","\xDD\u0549\xDF\u0550","\xE1\u0557\xE3\u055A","\xE5\u0564\xE7\u0567","\xE9\u056C\xEB\u0572","\xED\u0579\xEF\u0583","\xF1\u058D\xF3\u0596","\xF5\u059E\xF7\u05A2","\xF9\u05AA\xFB\u05AE","\xFD\u05B8\xFF\u05C0","\u0101\u05C6\u0103\u05CB","\u0105\u05CE\u0107\u05D5","\u0109\u05DA\u010B\u05E2","\u010D\u05EC\u010F\u05F3","\u0111\u05F8\u0113\u05FE","\u0115\u0602\u0117\u0607","\u0119\u060C\u011B\u0611","\u011D\u0618\u011F\u061E","\u0121\u062B\u0123\u0635","\u0125\u0648\u0127\u064C","\u0129\u064F\u012B\u0654","\u012D\u0657\u012F\u065D","\u0131\u0662\u0133\u0669","\u0135\u066E\u0137\u0675","\u0139\u067C\u013B\u0682","\u013D\u068A\u013F\u068D","\u0141\u0690\u0143\u0696","\u0145\u069E\u0147\u06A4","\u0149\u06A9\u014B\u06AE","\u014D\u06B4\u014F\u06BA","\u0151\u06C0\u0153\u06C8","\u0155\u06D3\u0157\u06DB","\u0159\u06E6\u015B\u06ED","\u015D\u06F2\u015F\u06F9","\u0161\u06FF\u0163\u0705","\u0165\u070A\u0167\u070E","\u0169\u0714\u016B\u071B","\u016D\u071F\u016F\u0725","\u0171\u072D\u0173\u0730","\u0175\u0735\u0177\u073B","\u0179\u0743\u017B\u0747","\u017D\u074B\u017F\u074E","\u0181\u0752\u0183\u0759","\u0185\u0760\u0187\u0765","\u0189\u076C\u018B\u0773","\u018D\u0777\u018F\u077B","\u0191\u0781\u0193\u0789","\u0195\u0790\u0197\u0795","\u0199\u079B\u019B\u07A0","\u019D\u07A4\u019F\u07AC","\u01A1\u07B4\u01A3\u07B8","\u01A5\u07C0\u01A7\u07C7","\u01A9\u07CF\u01AB\u07D5","\u01AD\u07D9\u01AF\u07DD","\u01B1\u07E1\u01B3\u07EA","\u01B5\u07F6\u01B7\u07FF","\u01B9\u0803\u01BB\u0810","\u01BD\u081A\u01BF\u0823","\u01C1\u082E\u01C3\u0833","\u01C5\u083E\u01C7\u0848","\u01C9\u0855\u01CB\u085B","\u01CD\u0860\u01CF\u0864","\u01D1\u0870\u01D3\u087B","\u01D5\u0885\u01D7\u088B","\u01D9\u0890\u01DB\u0895","\u01DD\u089D\u01DF\u08A3","\u01E1\u08B1\u01E3\u08C0","\u01E5\u08C8\u01E7\u08D1","\u01E9\u08D7\u01EB\u08F0","\u01ED\u08F2\u01EF\u08FF","\u01F1\u0904\u01F3\u090B","\u01F5\u0910\u01F7\u0935","\u01F9\u0952\u01FB\u0954","\u01FD\u0959\u01FF\u095E","\u0201\u0966\u0203\u096E","\u0205\u0976\u0207\u097E","\u0209\u0987\u020B\u0990","\u020D\u0998\u020F\u09A3","\u0211\u09A7\u0213\u09B0","\u0215\u09B8\u0217\u09C6","\u0219\u09D5\u021B\u09DE","\u021D\u09E7\u021F\u09F5","\u0221\u09FB\u0223\u0A03","\u0225\u0A0C\u0227\u0A16","\u0229\u0A1F\u022B\u0A22","\u022D\u0A29\u022F\u0A35","\u0231\u0A42\u0233\u0A4B","\u0235\u0A52\u0237\u0A5A","\u0239\u0A62\u023B\u0A6C","\u023D\u0A75\u023F\u0A83","\u0241\u0A8C\u0243\u0A9F","\u0245\u0AAA\u0247\u0ABA","\u0249\u0AC5\u024B\u0AD2","\u024D\u0AD8\u024F\u0AE0","\u0251\u0AE6\u0253\u0AEF","\u0255\u0AF4\u0257\u0AFC","\u0259\u0B05\u025B\u0B0A","\u025D\u0B11\u025F\u0B1B","\u0261\u0B20\u0263\u0B25","\u0265\u0B2A\u0267\u0B31","\u0269\u0B46\u026B\u0B48","\u026D\u0B4D\u026F\u0B53","\u0271\u0B5A\u0273\u0B61","\u0275\u0B65\u0277\u0B78","\u0279\u0B8B\u027B\u0B99","\u027D\u0BAA\u027F\u0BB6","\u0281\u0BC2\u0283\u0BD2","\u0285\u0BDD\u0287\u0BE8","\u0289\u0BF1\u028B\u0BFC","\u028D\u0C02\u028F\u0C08","\u0291\u0C0D\u0293\u0C12","\u0295\u0C19\u0297\u0C23","\u0299\u0C2B\u029B\u0C32","\u029D\u0C38\u029F\u0C3C","\u02A1\u0C41\u02A3\u0C49","\u02A5\u0C51\u02A7\u0C5A","\u02A9\u0C63\u02AB\u0C6C","\u02AD\u0C76\u02AF\u0C7C","\u02B1\u0C86\u02B3\u0C8F","\u02B5\u0C94\u02B7\u0C99","\u02B9\u0C9F\u02BB\u0CA3","\u02BD\u0CAE\u02BF\u0CB7","\u02C1\u0CBC\u02C3\u0CC5","\u02C5\u0CCA\u02C7\u0CD5","\u02C9\u0CDE\u02CB\u0CE3","\u02CD\u0CEA\u02CF\u0CF3","\u02D1\u0CFC\u02D3\u0D01","\u02D5\u0D09\u02D7\u0D14","\u02D9\u0D1F\u02DB\u0D28","\u02DD\u0D30\u02DF\u0D36","\u02E1\u0D3F\u02E3\u0D46","\u02E5\u0D4C\u02E7\u0D54","\u02E9\u0D5C\u02EB\u0D63","\u02ED\u0D6D\u02EF\u0D75","\u02F1\u0D7C\u02F3\u0D83","\u02F5\u0D8A\u02F7\u0D91","\u02F9\u0D98\u02FB\u0DA9","\u02FD\u0DBA\u02FF\u0DC9","\u0301\u0DD7\u0303\u0DE6","\u0305\u0DF6\u0307\u0E08","\u0309\u0E17\u030B\u0E1C","\u030D\u0E1E\u030F\u0E46","\u0311\u0E48\u0313\u0E4B","\u0315\u0E4D\u0317\u0E4F","\u0319\u0E51\u031B\u0E63","\u031D\u0E70\u031F\u0E7D","\u0321\u0E85\u0323\u0E92","\u0325\u0E96\u0327\u0EA7","\u0329\u0EAD\u032B\u0EB8","\u032D\u0ECD\u032F\u0ED1","\u0331\u0EDA\u0333\u0EE7","\u0335\u0EEA\u0337\u0EEF","\u0339\u0EF3\u033B\u0EF6","\u033D\u0EFB\u033F\u0EFD","\u0341\u0EFF\u0343\u0344","\x07?\u0344\u0345\u0346","\x07<\u0346\u0347\x07?\u0347","\u0348\u0349\x07>\u0349\u034A\x07","?\u034A\u034B\x07@\u034B\b","\u034C\u034D\x07@\u034D\u034E\x07?",`\u034E +\u034F\u0350\x07@\u0350`,"\f\u0351\u0352\x07>\u0352\u0353","\x07?\u0353\u0354\u0355","\x07>\u0355\u0356\u0357","\x07#\u0357\u035B\x07?\u0358\u0359\x07",">\u0359\u035B\x07@\u035A\u0356","\u035A\u0358\u035B","\u035C\u035D\x07-\u035D","\u035E\u035F\x07/\u035F","\u0360\u0361\x07,\u0361","\u0362\u0363\x071\u0363","\u0364\u0365\x07'\u0365","\u0366\u0367\x07#\u0367","\u0368\u0369\x07\x80\u0369 ","\u036A\u036B\x07>\u036B\u036C\x07>",'\u036C"\u036D\u036E\x07@',"\u036E\u036F\x07@\u036F$\u0370","\u0371\x07(\u0371\u0372\x07(\u0372&","\u0373\u0374\x07(\u0374(","\u0375\u0376\x07`\u0376*","\u0377\u0378\x07~\u0378\u0379\x07~","\u0379,\u037A\u037B\x07~\u037B",".\u037C\u037D\x070\u037D0","\u037E\u037F\x07.\u037F2","\u0380\u0381\x07=\u03814","\u0382\u0383\x07<\u03836","\u0384\u0385\x07*\u03858\u0386","\u0387\x07+\u0387:\u0388\u0389","\x07}\u0389<\u038A\u038B\x07","\x7F\u038B>\u038C\u038D\x07","a\u038D@\u038E\u038F\x07]","\u038FB\u0390\u0391\x07_","\u0391D\u0392\u0393\x07}\u0393","\u0394\x07}\u0394F\u0395\u0396","\x07\x7F\u0396\u0397\x07\x7F\u0397H","\u0398\u0399\x07/\u0399\u039A","\x07@\u039AJ\u039B\u039C\x07","/\u039C\u039D\x07@\u039D\u039E\x07@","\u039EL\u039F\u03A0\x07B","\u03A0N\u03A1\u03A2\x07B\u03A2","\u03A3\u0337\u019C\u03A3P\u03A4","\u03A5\x07B\u03A5\u03A6\x07B\u03A6R","\u03A7\u03A8\x07^\u03A8\u03A9\x07","P\u03A9T\u03AA\u03AB\x07A","\u03ABV\u03AC\u03AD\x07<","\u03AD\u03AE\x07<\u03AEX\u03AF","\u03B0 \u03B0Z\u03B1\u03B2"," \u03B2\\\u03B3\u03B4 ","\u03B4^\u03B5\u03B6 ","\u03B6`\u03B7\u03B8 ","\u03B8b\u03B9\u03BA \x07\u03BA","d\u03BB\u03BC \b\u03BCf","\u03BD\u03BE \u03BEh",`\u03BF\u03C0 +\u03C0j\u03C1\u03C2`," \v\u03C2l\u03C3\u03C4 \f","\u03C4n\u03C5\u03C6 \r","\u03C6p\u03C7\u03C8 \u03C8","r\u03C9\u03CA \u03CAt","\u03CB\u03CC \u03CCv","\u03CD\u03CE \u03CEx","\u03CF\u03D0 \u03D0z","\u03D1\u03D2 \u03D2|\u03D3","\u03D4 \u03D4~\u03D5\u03D6"," \u03D6\x80\u03D7\u03D8"," \u03D8\x82\u03D9\u03DA"," \u03DA\x84\u03DB\u03DC"," \u03DC\x86\u03DD\u03DE"," \u03DE\x88\u03DF\u03E0"," \u03E0\x8A\u03E1\u03E2"," \x1B\u03E2\x8C\u03E3\u03E4"," \u03E4\x8E\u03E5\u03E7","\x8DG\u03E6\u03E5\u03E7\u03E8","\u03E8\u03E6\u03E8\u03E9","\u03E9\x90\u03EA\u03EB"," \u03EB\x92\u03EC\u03ED","\x072\u03ED\u03EE\x07z\u03EE\u03F0","\u03EF\u03F1\x91I\u03F0\u03EF","\u03F1\u03F2\u03F2\u03F0","\u03F2\u03F3\u03F3\u03FF","\u03F4\u03F5\x07z\u03F5\u03F6\x07",")\u03F6\u03F8\u03F7\u03F9","\x91I\u03F8\u03F7\u03F9\u03FA","\u03FA\u03F8\u03FA\u03FB","\u03FB\u03FC\u03FC\u03FD\x07",")\u03FD\u03FF\u03FE\u03EC","\u03FE\u03F4\u03FF\x94","\u0400\u0401\x072\u0401\u0402\x07","d\u0402\u0404\u0403\u0405 ","\u0404\u0403\u0405\u0406","\u0406\u0404\u0406\u0407","\u0407\u0412\u0408\u0409\x07d","\u0409\u040A\x07)\u040A\u040C","\u040B\u040D \u040C\u040B","\u040D\u040E\u040E\u040C","\u040E\u040F\u040F\u0410","\u0410\u0412\x07)\u0411\u0400","\u0411\u0408\u0412\x96","\u0413\u0414\x8FH\u0414\x98","\u0415\u0417\x8FH\u0416\u0415","\u0416\u0417\u0417\u0418","\u0418\u0419/\u0419\u041A\x8F","H\u041A\x9A\u041B\u041D\x8F","H\u041C\u041B\u041C\u041D","\u041D\u041E\u041E\u0420/","\u041F\u041C\u041F\u0420","\u0420\u0421\u0421\u0422\x8F","H\u0422\u0425 \u0423\u0426\v",`\u0424\u0426 +\u0425\u0423`,"\u0425\u0424\u0425\u0426","\u0426\u0427\u0427\u0428\x8FH","\u0428\x9C\u0429\u042A\x7F@","\u042A\u042Bi5\u042B\u042Cs:\u042C\u042D","\x89E\u042D\u042Ei5\u042E\u042Fs:","\u042F\u0430\x7F@\u0430\x9E","\u0431\u0432}?\u0432\u0433q9\u0433\u0434","Y-\u0434\u0435o8\u0435\u0436o8\u0436\u0437","i5\u0437\u0438s:\u0438\u0439\x7F@","\u0439\xA0\u043A\u043Bq9\u043B","\u043Ca1\u043C\u043D_0\u043D\u043Ei5","\u043E\u043F\x81A\u043F\u0440q9\u0440\u0441","i5\u0441\u0442s:\u0442\u0443\x7F@","\u0443\xA2\u0444\u0445[.\u0445","\u0446\x89E\u0446\u0447\x7F@\u0447\u0448","a1\u0448\u0449i5\u0449\u044As:\u044A","\u044B\x7F@\u044B\xA4\u044C","\u044Di5\u044D\u044Es:\u044E\u044F\x7F","@\u044F\u0450a1\u0450\u0451e3\u0451\u0452","a1\u0452\u0453{>\u0453\u0459","\u0454\u0455i5\u0455\u0456s:\u0456\u0457","\x7F@\u0457\u0459\u0458\u044C","\u0458\u0454\u0459\xA6","\u045A\u045B[.\u045B\u045C","i5\u045C\u045De3\u045D\u045Ei5\u045E\u045F","s:\u045F\u0460\x7F@\u0460\xA8","\u0461\u0462}?\u0462\u0463a1\u0463","\u0464]/\u0464\u0465u;\u0465\u0466s:","\u0466\u0467_0\u0467\xAA\u0468","\u0469q9\u0469\u046Ai5\u046A\u046Bs:","\u046B\u046C\x81A\u046C\u046D\x7F@\u046D","\u046Ea1\u046E\xAC\u046F\u0470","g4\u0470\u0471u;\u0471\u0472\x81A","\u0472\u0473{>\u0473\xAE\u0474","\u0475_0\u0475\u0476Y-\u0476\u0477\x89","E\u0477\xB0\u0478\u0479\x85","C\u0479\u047Aa1\u047A\u047Ba1\u047B\u047C","m7\u047C\xB2\u047D\u047E","q9\u047E\u047Fu;\u047F\u0480s:\u0480\u0481","\x7F@\u0481\u0482g4\u0482\xB4","\u0483\u0484y=\u0484\u0485\x81A","\u0485\u0486Y-\u0486\u0487{>\u0487\u0488","\x7F@\u0488\u0489a1\u0489\u048A{>\u048A","\xB6\u048B\u048C\x89E\u048C","\u048Da1\u048D\u048EY-\u048E\u048F{>","\u048F\xB8\u0490\u0491_0\u0491","\u0492a1\u0492\u0493c2\u0493\u0494Y-","\u0494\u0495\x81A\u0495\u0496o8\u0496\u0497","\x7F@\u0497\xBA\u0498\u0499","\x81A\u0499\u049As:\u049A\u049Bi5","\u049B\u049Cu;\u049C\u049Ds:\u049D\xBC","\u049E\u049F}?\u049F\u04A0a1","\u04A0\u04A1o8\u04A1\u04A2a1\u04A2\u04A3","]/\u04A3\u04A4\x7F@\u04A4\xBE","\u04A5\u04A6Y-\u04A6\u04A7o8\u04A7\u04A8","o8\u04A8\xC0\u04A9\u04AA","_0\u04AA\u04ABi5\u04AB\u04AC}?\u04AC\u04AD","\x7F@\u04AD\u04AEi5\u04AE\u04AFs:","\u04AF\u04B0]/\u04B0\u04B1\x7F@\u04B1\xC2","\u04B2\u04B3}?\u04B3\u04B4","\x7F@\u04B4\u04B5{>\u04B5\u04B6Y-\u04B6","\u04B7i5\u04B7\u04B8e3\u04B8\u04B9g4","\u04B9\u04BA\x7F@\u04BA\u04BB\x07a\u04BB","\u04BCk6\u04BC\u04BDu;\u04BD\u04BEi5","\u04BE\u04BFs:\u04BF\xC4\u04C0","\u04C1g4\u04C1\u04C2i5\u04C2\u04C3e3","\u04C3\u04C4g4\u04C4\u04C5\x07a\u04C5\u04C6","w<\u04C6\u04C7{>\u04C7\u04C8i5\u04C8","\u04C9u;\u04C9\u04CA{>\u04CA\u04CBi5","\u04CB\u04CC\x7F@\u04CC\u04CD\x89E\u04CD","\xC6\u04CE\u04CF}?\u04CF\u04D0","y=\u04D0\u04D1o8\u04D1\u04D2\x07a","\u04D2\u04D3}?\u04D3\u04D4q9\u04D4\u04D5","Y-\u04D5\u04D6o8\u04D6\u04D7o8\u04D7\u04D8","\x07a\u04D8\u04D9{>\u04D9\u04DAa1","\u04DA\u04DB}?\u04DB\u04DC\x81A\u04DC\u04DD","o8\u04DD\u04DE\x7F@\u04DE\xC8","\u04DF\u04E0}?\u04E0\u04E1y=\u04E1","\u04E2o8\u04E2\u04E3\x07a\u04E3\u04E4","[.\u04E4\u04E5i5\u04E5\u04E6e3\u04E6\u04E7","\x07a\u04E7\u04E8{>\u04E8\u04E9a1","\u04E9\u04EA}?\u04EA\u04EB\x81A\u04EB\u04EC","o8\u04EC\u04ED\x7F@\u04ED\xCA","\u04EE\u04EF}?\u04EF\u04F0y=\u04F0","\u04F1o8\u04F1\u04F2\x07a\u04F2\u04F3","[.\u04F3\u04F4\x81A\u04F4\u04F5c2\u04F5","\u04F6c2\u04F6\u04F7a1\u04F7\u04F8{>","\u04F8\u04F9\x07a\u04F9\u04FA{>\u04FA\u04FB","a1\u04FB\u04FC}?\u04FC\u04FD\x81A","\u04FD\u04FEo8\u04FE\u04FF\x7F@\u04FF\xCC","\u0500\u0501}?\u0501\u0502","y=\u0502\u0503o8\u0503\u0504\x07a\u0504","\u0505]/\u0505\u0506Y-\u0506\u0507o8","\u0507\u0508]/\u0508\u0509\x07a\u0509\u050A","c2\u050A\u050Bu;\u050B\u050C\x81A","\u050C\u050Ds:\u050D\u050E_0\u050E\u050F\x07","a\u050F\u0510{>\u0510\u0511u;\u0511","\u0512\x85C\u0512\u0513}?\u0513\xCE","\u0514\u0515o8\u0515\u0516i5","\u0516\u0517q9\u0517\u0518i5\u0518\u0519","\x7F@\u0519\xD0\u051A\u051B","u;\u051B\u051Cc2\u051C\u051Dc2\u051D\u051E","}?\u051E\u051Fa1\u051F\u0520\x7F@","\u0520\xD2\u0521\u0522i5\u0522","\u0523s:\u0523\u0524\x7F@\u0524\u0525","u;\u0525\xD4\u0526\u0527u;","\u0527\u0528\x81A\u0528\u0529\x7F@\u0529","\u052Ac2\u052A\u052Bi5\u052B\u052Co8","\u052C\u052Da1\u052D\xD6\u052E","\u052F_0\u052F\u0530\x81A\u0530\u0531","q9\u0531\u0532w<\u0532\u0533c2\u0533\u0534","i5\u0534\u0535o8\u0535\u0536a1\u0536","\xD8\u0537\u0538w<\u0538\u0539","{>\u0539\u053Au;\u053A\u053B]/\u053B","\u053Ca1\u053C\u053D_0\u053D\u053E\x81","A\u053E\u053F{>\u053F\u0540a1\u0540\xDA","\u0541\u0542Y-\u0542\u0543","s:\u0543\u0544Y-\u0544\u0545o8\u0545\u0546","\x89E\u0546\u0547}?\u0547\u0548a1","\u0548\xDC\u0549\u054Ag4\u054A","\u054BY-\u054B\u054C\x83B\u054C\u054D","i5\u054D\u054Es:\u054E\u054Fe3\u054F\xDE","\u0550\u0551\x85C\u0551\u0552","i5\u0552\u0553s:\u0553\u0554_0\u0554","\u0555u;\u0555\u0556\x85C\u0556\xE0","\u0557\u0558Y-\u0558\u0559}?","\u0559\xE2\u055A\u055Bw<\u055B","\u055CY-\u055C\u055D{>\u055D\u055E\x7F","@\u055E\u055Fi5\u055F\u0560\x7F@\u0560","\u0561i5\u0561\u0562u;\u0562\u0563s:","\u0563\xE4\u0564\u0565[.\u0565","\u0566\x89E\u0566\xE6\u0567","\u0568{>\u0568\u0569u;\u0569\u056A\x85","C\u056A\u056B}?\u056B\xE8","\u056C\u056D{>\u056D\u056EY-\u056E\u056F","s:\u056F\u0570e3\u0570\u0571a1\u0571\xEA","\u0572\u0573e3\u0573\u0574","{>\u0574\u0575u;\u0575\u0576\x81A\u0576","\u0577w<\u0577\u0578}?\u0578\xEC","\u0579\u057A\x81A\u057A\u057Bs:","\u057B\u057C[.\u057C\u057Du;\u057D\u057E","\x81A\u057E\u057Fs:\u057F\u0580_0\u0580","\u0581a1\u0581\u0582_0\u0582\xEE","\u0583\u0584w<\u0584\u0585{>\u0585","\u0586a1\u0586\u0587]/\u0587\u0588a1","\u0588\u0589_0\u0589\u058Ai5\u058A\u058B","s:\u058B\u058Ce3\u058C\xF0","\u058D\u058Ei5\u058E\u058Fs:\u058F\u0590","\x7F@\u0590\u0591a1\u0591\u0592{>\u0592","\u0593\x83B\u0593\u0594Y-\u0594\u0595","o8\u0595\xF2\u0596\u0597]/","\u0597\u0598\x81A\u0598\u0599{>\u0599\u059A","{>\u059A\u059Ba1\u059B\u059Cs:\u059C","\u059D\x7F@\u059D\xF4\u059E","\u059F{>\u059F\u05A0u;\u05A0\u05A1\x85","C\u05A1\xF6\u05A2\u05A3[.","\u05A3\u05A4a1\u05A4\u05A5\x7F@\u05A5\u05A6","\x85C\u05A6\u05A7a1\u05A7\u05A8a1","\u05A8\u05A9s:\u05A9\xF8\u05AA","\u05ABY-\u05AB\u05ACs:\u05AC\u05AD_0","\u05AD\xFA\u05AE\u05AFc2\u05AF","\u05B0u;\u05B0\u05B1o8\u05B1\u05B2o8","\u05B2\u05B3u;\u05B3\u05B4\x85C\u05B4\u05B5","i5\u05B5\u05B6s:\u05B6\u05B7e3\u05B7","\xFC\u05B8\u05B9a1\u05B9\u05BA","\x87D\u05BA\u05BB]/\u05BB\u05BCo8","\u05BC\u05BD\x81A\u05BD\u05BE_0\u05BE\u05BF","a1\u05BF\xFE\u05C0\u05C1","e3\u05C1\u05C2{>\u05C2\u05C3u;\u05C3\u05C4","\x81A\u05C4\u05C5w<\u05C5\u0100","\u05C6\u05C7\x7F@\u05C7\u05C8i5","\u05C8\u05C9a1\u05C9\u05CA}?\u05CA\u0102","\u05CB\u05CCs:\u05CC\u05CDu;","\u05CD\u0104\u05CE\u05CFu;\u05CF","\u05D0\x7F@\u05D0\u05D1g4\u05D1\u05D2","a1\u05D2\u05D3{>\u05D3\u05D4}?\u05D4\u0106","\u05D5\u05D6\x85C\u05D6\u05D7","i5\u05D7\u05D8\x7F@\u05D8\u05D9g4","\u05D9\u0108\u05DA\u05DB\x85C","\u05DB\u05DCi5\u05DC\u05DD\x7F@\u05DD\u05DE","g4\u05DE\u05DFu;\u05DF\u05E0\x81A","\u05E0\u05E1\x7F@\u05E1\u010A","\u05E2\u05E3{>\u05E3\u05E4a1\u05E4\u05E5","]/\u05E5\u05E6\x81A\u05E6\u05E7{>\u05E7","\u05E8}?\u05E8\u05E9i5\u05E9\u05EA\x83","B\u05EA\u05EBa1\u05EB\u010C","\u05EC\u05ED{>\u05ED\u05EEu;\u05EE\u05EF","o8\u05EF\u05F0o8\u05F0\u05F1\x81A\u05F1","\u05F2w<\u05F2\u010E\u05F3\u05F4","]/\u05F4\u05F5\x81A\u05F5\u05F6[.","\u05F6\u05F7a1\u05F7\u0110\u05F8","\u05F9u;\u05F9\u05FA{>\u05FA\u05FB_0","\u05FB\u05FCa1\u05FC\u05FD{>\u05FD\u0112","\u05FE\u05FFY-\u05FF\u0600}?","\u0600\u0601]/\u0601\u0114\u0602","\u0603_0\u0603\u0604a1\u0604\u0605}?","\u0605\u0606]/\u0606\u0116\u0607","\u0608c2\u0608\u0609{>\u0609\u060Au;","\u060A\u060Bq9\u060B\u0118\u060C","\u060D_0\u060D\u060E\x81A\u060E\u060F","Y-\u060F\u0610o8\u0610\u011A","\u0611\u0612\x83B\u0612\u0613Y-\u0613\u0614","o8\u0614\u0615\x81A\u0615\u0616a1","\u0616\u0617}?\u0617\u011C\u0618","\u0619\x7F@\u0619\u061AY-\u061A\u061B","[.\u061B\u061Co8\u061C\u061Da1\u061D\u011E","\u061E\u061F}?\u061F\u0620","y=\u0620\u0621o8\u0621\u0622\x07a\u0622","\u0623s:\u0623\u0624u;\u0624\u0625\x07a","\u0625\u0626]/\u0626\u0627Y-\u0627\u0628","]/\u0628\u0629g4\u0629\u062Aa1\u062A","\u0120\u062B\u062C}?\u062C\u062D","y=\u062D\u062Eo8\u062E\u062F\x07a","\u062F\u0630]/\u0630\u0631Y-\u0631\u0632","]/\u0632\u0633g4\u0633\u0634a1\u0634\u0122","\u0635\u0636q9\u0636\u0637","Y-\u0637\u0638\x87D\u0638\u0639\x07a","\u0639\u063A}?\u063A\u063B\x7F@\u063B\u063C","Y-\u063C\u063D\x7F@\u063D\u063Ea1","\u063E\u063Fq9\u063F\u0640a1\u0640\u0641","s:\u0641\u0642\x7F@\u0642\u0643\x07a","\u0643\u0644\x7F@\u0644\u0645i5\u0645\u0646","q9\u0646\u0647a1\u0647\u0124","\u0648\u0649c2\u0649\u064Au;\u064A\u064B","{>\u064B\u0126\u064C\u064D","u;\u064D\u064Ec2\u064E\u0128","\u064F\u0650o8\u0650\u0651u;\u0651\u0652","]/\u0652\u0653m7\u0653\u012A","\u0654\u0655i5\u0655\u0656s:\u0656\u012C","\u0657\u0658}?\u0658\u0659g4","\u0659\u065AY-\u065A\u065B{>\u065B\u065C","a1\u065C\u012E\u065D\u065Eq9","\u065E\u065Fu;\u065F\u0660_0\u0660\u0661","a1\u0661\u0130\u0662\u0663\x81","A\u0663\u0664w<\u0664\u0665_0\u0665\u0666","Y-\u0666\u0667\x7F@\u0667\u0668a1","\u0668\u0132\u0669\u066A}?\u066A","\u066Bm7\u066B\u066Ci5\u066C\u066Dw<","\u066D\u0134\u066E\u066Fo8\u066F","\u0670u;\u0670\u0671]/\u0671\u0672m7","\u0672\u0673a1\u0673\u0674_0\u0674\u0136","\u0675\u0676s:\u0676\u0677u;","\u0677\u0678\x85C\u0678\u0679Y-\u0679\u067A","i5\u067A\u067B\x7F@\u067B\u0138","\u067C\u067D\x85C\u067D\u067Eg4","\u067E\u067Fa1\u067F\u0680{>\u0680\u0681","a1\u0681\u013A\u0682\u0683y=","\u0683\u0684\x81A\u0684\u0685Y-\u0685\u0686","o8\u0686\u0687i5\u0687\u0688c2\u0688","\u0689\x89E\u0689\u013C\u068A","\u068Bu;\u068B\u068Ck6\u068C\u013E","\u068D\u068Eu;\u068E\u068Fs:\u068F","\u0140\u0690\u0691\x81A\u0691","\u0692}?\u0692\u0693i5\u0693\u0694s:","\u0694\u0695e3\u0695\u0142\u0696","\u0697s:\u0697\u0698Y-\u0698\u0699\x7F","@\u0699\u069A\x81A\u069A\u069B{>\u069B","\u069CY-\u069C\u069Do8\u069D\u0144","\u069E\u069Fi5\u069F\u06A0s:\u06A0","\u06A1s:\u06A1\u06A2a1\u06A2\u06A3{>","\u06A3\u0146\u06A4\u06A5k6\u06A5","\u06A6u;\u06A6\u06A7i5\u06A7\u06A8s:","\u06A8\u0148\u06A9\u06AAo8\u06AA","\u06ABa1\u06AB\u06ACc2\u06AC\u06AD\x7F","@\u06AD\u014A\u06AE\u06AF{>","\u06AF\u06B0i5\u06B0\u06B1e3\u06B1\u06B2","g4\u06B2\u06B3\x7F@\u06B3\u014C","\u06B4\u06B5u;\u06B5\u06B6\x81A\u06B6","\u06B7\x7F@\u06B7\u06B8a1\u06B8\u06B9","{>\u06B9\u014E\u06BA\u06BB]/","\u06BB\u06BC{>\u06BC\u06BDu;\u06BD\u06BE","}?\u06BE\u06BF}?\u06BF\u0150","\u06C0\u06C1o8\u06C1\u06C2Y-\u06C2\u06C3","\x7F@\u06C3\u06C4a1\u06C4\u06C5{>\u06C5","\u06C6Y-\u06C6\u06C7o8\u06C7\u0152","\u06C8\u06C9k6\u06C9\u06CA}?\u06CA","\u06CBu;\u06CB\u06CCs:\u06CC\u06CD\x07a","\u06CD\u06CE\x7F@\u06CE\u06CFY-\u06CF","\u06D0[.\u06D0\u06D1o8\u06D1\u06D2a1","\u06D2\u0154\u06D3\u06D4]/\u06D4","\u06D5u;\u06D5\u06D6o8\u06D6\u06D7\x81","A\u06D7\u06D8q9\u06D8\u06D9s:\u06D9\u06DA","}?\u06DA\u0156\u06DB\u06DC","u;\u06DC\u06DD{>\u06DD\u06DE_0\u06DE\u06DF","i5\u06DF\u06E0s:\u06E0\u06E1Y-\u06E1","\u06E2o8\u06E2\u06E3i5\u06E3\u06E4\x7F","@\u06E4\u06E5\x89E\u06E5\u0158","\u06E6\u06E7a1\u06E7\u06E8\x87D\u06E8","\u06E9i5\u06E9\u06EA}?\u06EA\u06EB\x7F","@\u06EB\u06EC}?\u06EC\u015A","\u06ED\u06EEw<\u06EE\u06EFY-\u06EF\u06F0","\x7F@\u06F0\u06F1g4\u06F1\u015C","\u06F2\u06F3s:\u06F3\u06F4a1\u06F4\u06F5","}?\u06F5\u06F6\x7F@\u06F6\u06F7a1","\u06F7\u06F8_0\u06F8\u015E\u06F9","\u06FAa1\u06FA\u06FBq9\u06FB\u06FCw<","\u06FC\u06FD\x7F@\u06FD\u06FE\x89E\u06FE","\u0160\u06FF\u0700a1\u0700\u0701","{>\u0701\u0702{>\u0702\u0703u;\u0703","\u0704{>\u0704\u0162\u0705\u0706","s:\u0706\u0707\x81A\u0707\u0708o8","\u0708\u0709o8\u0709\u0164\u070A","\u070B\x81A\u070B\u070C}?\u070C\u070D","a1\u070D\u0166\u070E\u070Fc2","\u070F\u0710u;\u0710\u0711{>\u0711\u0712","]/\u0712\u0713a1\u0713\u0168","\u0714\u0715i5\u0715\u0716e3\u0716\u0717","s:\u0717\u0718u;\u0718\u0719{>\u0719\u071A","a1\u071A\u016A\u071B\u071C","m7\u071C\u071Da1\u071D\u071E\x89E\u071E","\u016C\u071F\u0720i5\u0720\u0721","s:\u0721\u0722_0\u0722\u0723a1\u0723","\u0724\x87D\u0724\u016E\u0725","\u0726w<\u0726\u0727{>\u0727\u0728i5","\u0728\u0729q9\u0729\u072AY-\u072A\u072B","{>\u072B\u072C\x89E\u072C\u0170","\u072D\u072Ei5\u072E\u072F}?\u072F\u0172","\u0730\u0731\x7F@\u0731\u0732","{>\u0732\u0733\x81A\u0733\u0734a1","\u0734\u0174\u0735\u0736c2\u0736","\u0737Y-\u0737\u0738o8\u0738\u0739}?","\u0739\u073Aa1\u073A\u0176\u073B","\u073C\x81A\u073C\u073Ds:\u073D\u073E","m7\u073E\u073Fs:\u073F\u0740u;\u0740\u0741","\x85C\u0741\u0742s:\u0742\u0178","\u0743\u0744s:\u0744\u0745u;\u0745","\u0746\x7F@\u0746\u017A\u0747","\u0748\x87D\u0748\u0749u;\u0749\u074A","{>\u074A\u017C\u074B\u074Cu;","\u074C\u074D{>\u074D\u017E\u074E","\u074FY-\u074F\u0750s:\u0750\u0751\x89","E\u0751\u0180\u0752\u0753q9","\u0753\u0754a1\u0754\u0755q9\u0755\u0756","[.\u0756\u0757a1\u0757\u0758{>\u0758\u0182","\u0759\u075A}?\u075A\u075B","u;\u075B\u075C\x81A\u075C\u075Ds:\u075D","\u075E_0\u075E\u075F}?\u075F\u0184","\u0760\u0761o8\u0761\u0762i5\u0762","\u0763m7\u0763\u0764a1\u0764\u0186","\u0765\u0766a1\u0766\u0767}?\u0767","\u0768]/\u0768\u0769Y-\u0769\u076Aw<","\u076A\u076Ba1\u076B\u0188\u076C","\u076D{>\u076D\u076Ea1\u076E\u076Fe3","\u076F\u0770a1\u0770\u0771\x87D\u0771\u0772","w<\u0772\u018A\u0773\u0774","_0\u0774\u0775i5\u0775\u0776\x83B\u0776","\u018C\u0777\u0778q9\u0778\u0779","u;\u0779\u077A_0\u077A\u018E","\u077B\u077Cq9\u077C\u077DY-\u077D\u077E","\x7F@\u077E\u077F]/\u077F\u0780g4","\u0780\u0190\u0781\u0782Y-\u0782","\u0783e3\u0783\u0784Y-\u0784\u0785i5","\u0785\u0786s:\u0786\u0787}?\u0787\u0788","\x7F@\u0788\u0192\u0789\u078A","[.\u078A\u078Bi5\u078B\u078Cs:\u078C\u078D","Y-\u078D\u078E{>\u078E\u078F\x89E","\u078F\u0194\u0790\u0791]/\u0791","\u0792Y-\u0792\u0793}?\u0793\u0794\x7F","@\u0794\u0196\u0795\u0796Y-","\u0796\u0797{>\u0797\u0798{>\u0798\u0799","Y-\u0799\u079A\x89E\u079A\u0198","\u079B\u079C]/\u079C\u079DY-\u079D\u079E","}?\u079E\u079Fa1\u079F\u019A","\u07A0\u07A1a1\u07A1\u07A2s:\u07A2\u07A3","_0\u07A3\u019C\u07A4\u07A5","]/\u07A5\u07A6u;\u07A6\u07A7s:\u07A7\u07A8","\x83B\u07A8\u07A9a1\u07A9\u07AA{>","\u07AA\u07AB\x7F@\u07AB\u019E","\u07AC\u07AD]/\u07AD\u07AEu;\u07AE\u07AF","o8\u07AF\u07B0o8\u07B0\u07B1Y-\u07B1\u07B2","\x7F@\u07B2\u07B3a1\u07B3\u01A0","\u07B4\u07B5Y-\u07B5\u07B6\x83B","\u07B6\u07B7e3\u07B7\u01A2\u07B8","\u07B9[.\u07B9\u07BAi5\u07BA\u07BB\x7F","@\u07BB\u07BC\x07a\u07BC\u07BDY-\u07BD","\u07BEs:\u07BE\u07BF_0\u07BF\u01A4","\u07C0\u07C1[.\u07C1\u07C2i5\u07C2","\u07C3\x7F@\u07C3\u07C4\x07a\u07C4\u07C5","u;\u07C5\u07C6{>\u07C6\u01A6","\u07C7\u07C8[.\u07C8\u07C9i5\u07C9\u07CA","\x7F@\u07CA\u07CB\x07a\u07CB\u07CC","\x87D\u07CC\u07CDu;\u07CD\u07CE{>\u07CE","\u01A8\u07CF\u07D0]/\u07D0\u07D1","u;\u07D1\u07D2\x81A\u07D2\u07D3s:","\u07D3\u07D4\x7F@\u07D4\u01AA","\u07D5\u07D6q9\u07D6\u07D7i5\u07D7\u07D8","s:\u07D8\u01AC\u07D9\u07DAq9","\u07DA\u07DBY-\u07DB\u07DC\x87D\u07DC\u01AE","\u07DD\u07DE}?\u07DE\u07DF","\x7F@\u07DF\u07E0_0\u07E0\u01B0","\u07E1\u07E2\x83B\u07E2\u07E3Y-\u07E3","\u07E4{>\u07E4\u07E5i5\u07E5\u07E6Y-","\u07E6\u07E7s:\u07E7\u07E8]/\u07E8\u07E9","a1\u07E9\u01B2\u07EA\u07EB}?","\u07EB\u07EC\x7F@\u07EC\u07ED_0\u07ED\u07EE","_0\u07EE\u07EFa1\u07EF\u07F0\x83B","\u07F0\u07F1\x07a\u07F1\u07F2}?\u07F2\u07F3","Y-\u07F3\u07F4q9\u07F4\u07F5w<\u07F5","\u01B4\u07F6\u07F7\x83B\u07F7","\u07F8Y-\u07F8\u07F9{>\u07F9\u07FA\x07a","\u07FA\u07FB}?\u07FB\u07FCY-\u07FC\u07FD","q9\u07FD\u07FEw<\u07FE\u01B6","\u07FF\u0800}?\u0800\u0801\x81A\u0801","\u0802q9\u0802\u01B8\u0803\u0804","e3\u0804\u0805{>\u0805\u0806u;\u0806","\u0807\x81A\u0807\u0808w<\u0808\u0809\x07","a\u0809\u080A]/\u080A\u080Bu;\u080B","\u080Cs:\u080C\u080D]/\u080D\u080EY-","\u080E\u080F\x7F@\u080F\u01BA","\u0810\u0811}?\u0811\u0812a1\u0812\u0813","w<\u0813\u0814Y-\u0814\u0815{>\u0815\u0816","Y-\u0816\u0817\x7F@\u0817\u0818u;","\u0818\u0819{>\u0819\u01BC\u081A","\u081Be3\u081B\u081C{>\u081C\u081Du;","\u081D\u081E\x81A\u081E\u081Fw<\u081F\u0820","i5\u0820\u0821s:\u0821\u0822e3\u0822","\u01BE\u0823\u0824{>\u0824\u0825","u;\u0825\u0826\x85C\u0826\u0827\x07a","\u0827\u0828s:\u0828\u0829\x81A\u0829","\u082Aq9\u082A\u082B[.\u082B\u082Ca1","\u082C\u082D{>\u082D\u01C0\u082E","\u082F{>\u082F\u0830Y-\u0830\u0831s:","\u0831\u0832m7\u0832\u01C2\u0833","\u0834_0\u0834\u0835a1\u0835\u0836s:","\u0836\u0837}?\u0837\u0838a1\u0838\u0839\x07","a\u0839\u083A{>\u083A\u083BY-\u083B","\u083Cs:\u083C\u083Dm7\u083D\u01C4","\u083E\u083F]/\u083F\u0840\x81A","\u0840\u0841q9\u0841\u0842a1\u0842\u0843\x07","a\u0843\u0844_0\u0844\u0845i5\u0845","\u0846}?\u0846\u0847\x7F@\u0847\u01C6","\u0848\u0849w<\u0849\u084Aa1","\u084A\u084B{>\u084B\u084C]/\u084C\u084D","a1\u084D\u084Es:\u084E\u084F\x7F@\u084F","\u0850\x07a\u0850\u0851{>\u0851\u0852","Y-\u0852\u0853s:\u0853\u0854m7\u0854\u01C8","\u0855\u0856s:\u0856\u0857","\x7F@\u0857\u0858i5\u0858\u0859o8\u0859","\u085Aa1\u085A\u01CA\u085B\u085C","o8\u085C\u085Da1\u085D\u085EY-\u085E","\u085F_0\u085F\u01CC\u0860\u0861","o8\u0861\u0862Y-\u0862\u0863e3\u0863","\u01CE\u0864\u0865c2\u0865\u0866","i5\u0866\u0867{>\u0867\u0868}?\u0868","\u0869\x7F@\u0869\u086A\x07a\u086A\u086B","\x83B\u086B\u086CY-\u086C\u086Do8","\u086D\u086E\x81A\u086E\u086Fa1\u086F\u01D0","\u0870\u0871o8\u0871\u0872","Y-\u0872\u0873}?\u0873\u0874\x7F@\u0874","\u0875\x07a\u0875\u0876\x83B\u0876\u0877","Y-\u0877\u0878o8\u0878\u0879\x81A","\u0879\u087Aa1\u087A\u01D2\u087B","\u087Cs:\u087C\u087D\x7F@\u087D\u087E","g4\u087E\u087F\x07a\u087F\u0880\x83B","\u0880\u0881Y-\u0881\u0882o8\u0882\u0883","\x81A\u0883\u0884a1\u0884\u01D4","\u0885\u0886c2\u0886\u0887i5\u0887\u0888","{>\u0888\u0889}?\u0889\u088A\x7F@","\u088A\u01D6\u088B\u088Co8\u088C","\u088DY-\u088D\u088E}?\u088E\u088F\x7F","@\u088F\u01D8\u0890\u0891u;","\u0891\u0892\x83B\u0892\u0893a1\u0893\u0894","{>\u0894\u01DA\u0895\u0896","{>\u0896\u0897a1\u0897\u0898}?\u0898\u0899","w<\u0899\u089Aa1\u089A\u089B]/\u089B","\u089C\x7F@\u089C\u01DC\u089D","\u089Es:\u089E\u089F\x81A\u089F\u08A0","o8\u08A0\u08A1o8\u08A1\u08A2}?\u08A2\u01DE","\u08A3\u08A4k6\u08A4\u08A5","}?\u08A5\u08A6u;\u08A6\u08A7s:\u08A7\u08A8","\x07a\u08A8\u08A9Y-\u08A9\u08AA{>","\u08AA\u08AB{>\u08AB\u08ACY-\u08AC\u08AD","\x89E\u08AD\u08AEY-\u08AE\u08AFe3\u08AF","\u08B0e3\u08B0\u01E0\u08B1\u08B2","k6\u08B2\u08B3}?\u08B3\u08B4u;\u08B4","\u08B5s:\u08B5\u08B6\x07a\u08B6\u08B7","u;\u08B7\u08B8[.\u08B8\u08B9k6\u08B9\u08BA","a1\u08BA\u08BB]/\u08BB\u08BC\x7F@","\u08BC\u08BDY-\u08BD\u08BEe3\u08BE\u08BF","e3\u08BF\u01E2\u08C0\u08C1[.","\u08C1\u08C2u;\u08C2\u08C3u;\u08C3\u08C4","o8\u08C4\u08C5a1\u08C5\u08C6Y-\u08C6\u08C7","s:\u08C7\u01E4\u08C8\u08C9","o8\u08C9\u08CAY-\u08CA\u08CBs:\u08CB\u08CC","e3\u08CC\u08CD\x81A\u08CD\u08CEY-","\u08CE\u08CFe3\u08CF\u08D0a1\u08D0\u01E6","\u08D1\u08D2y=\u08D2\u08D3\x81","A\u08D3\u08D4a1\u08D4\u08D5{>\u08D5\u08D6","\x89E\u08D6\u01E8\u08D7\u08D8","a1\u08D8\u08D9\x87D\u08D9\u08DAw<","\u08DA\u08DBY-\u08DB\u08DCs:\u08DC\u08DD","}?\u08DD\u08DEi5\u08DE\u08DFu;\u08DF\u08E0","s:\u08E0\u01EA\u08E1\u08E2","]/\u08E2\u08E3g4\u08E3\u08E4Y-\u08E4\u08E5","{>\u08E5\u08E6Y-\u08E6\u08E7]/\u08E7","\u08E8\x7F@\u08E8\u08E9a1\u08E9\u08EA","{>\u08EA\u08F1\u08EB\u08EC]/","\u08EC\u08EDg4\u08ED\u08EEY-\u08EE\u08EF","{>\u08EF\u08F1\u08F0\u08E1","\u08F0\u08EB\u08F1\u01EC","\u08F2\u08F3]/\u08F3\u08F4\x81A","\u08F4\u08F5{>\u08F5\u08F6{>\u08F6\u08F7","a1\u08F7\u08F8s:\u08F8\u08F9\x7F@\u08F9","\u08FA\x07a\u08FA\u08FB\x81A\u08FB\u08FC","}?\u08FC\u08FDa1\u08FD\u08FE{>\u08FE","\u01EE\u08FF\u0900_0\u0900\u0901","Y-\u0901\u0902\x7F@\u0902\u0903a1","\u0903\u01F0\u0904\u0905i5\u0905","\u0906s:\u0906\u0907}?\u0907\u0908a1","\u0908\u0909{>\u0909\u090A\x7F@\u090A\u01F2","\u090B\u090C\x7F@\u090C\u090D","i5\u090D\u090Eq9\u090E\u090Fa1\u090F","\u01F4\u0910\u0911\x7F@\u0911","\u0912i5\u0912\u0913q9\u0913\u0914a1","\u0914\u0915}?\u0915\u0916\x7F@\u0916\u0917","Y-\u0917\u0918q9\u0918\u0919w<\u0919","\u01F6\u091A\u091B\x7F@\u091B","\u091Ci5\u091C\u091Dq9\u091D\u091Ea1","\u091E\u091F}?\u091F\u0920\x7F@\u0920\u0921","Y-\u0921\u0922q9\u0922\u0923w<\u0923","\u0924o8\u0924\u0925\x7F@\u0925\u0926","\x8BF\u0926\u0936\u0927\u0928","\x7F@\u0928\u0929i5\u0929\u092Aq9\u092A","\u092Ba1\u092B\u092C}?\u092C\u092D\x7F","@\u092D\u092EY-\u092E\u092Fq9\u092F\u0930","w<\u0930\u0931\x07a\u0931\u0932o8","\u0932\u0933\x7F@\u0933\u0934\x8BF\u0934","\u0936\u0935\u091A\u0935","\u0927\u0936\u01F8\u0937","\u0938\x7F@\u0938\u0939i5\u0939\u093A","q9\u093A\u093Ba1\u093B\u093C}?\u093C\u093D","\x7F@\u093D\u093EY-\u093E\u093Fq9","\u093F\u0940w<\u0940\u0941s:\u0941\u0942","\x7F@\u0942\u0943\x8BF\u0943\u0953","\u0944\u0945\x7F@\u0945\u0946i5","\u0946\u0947q9\u0947\u0948a1\u0948\u0949","}?\u0949\u094A\x7F@\u094A\u094BY-\u094B","\u094Cq9\u094C\u094Dw<\u094D\u094E\x07a","\u094E\u094Fs:\u094F\u0950\x7F@\u0950","\u0951\x8BF\u0951\u0953\u0952","\u0937\u0952\u0944\u0953","\u01FA\u0954\u0955\x8BF\u0955","\u0956u;\u0956\u0957s:\u0957\u0958a1","\u0958\u01FC\u0959\u095A\x81A","\u095A\u095B}?\u095B\u095Ca1\u095C\u095D","{>\u095D\u01FE\u095E\u095FY-","\u095F\u0960_0\u0960\u0961_0\u0961\u0962","_0\u0962\u0963Y-\u0963\u0964\x7F@\u0964","\u0965a1\u0965\u0200\u0966\u0967","}?\u0967\u0968\x81A\u0968\u0969[.","\u0969\u096A_0\u096A\u096BY-\u096B\u096C","\x7F@\u096C\u096Da1\u096D\u0202","\u096E\u096F]/\u096F\u0970\x81A\u0970","\u0971{>\u0971\u0972_0\u0972\u0973Y-","\u0973\u0974\x7F@\u0974\u0975a1\u0975\u0204","\u0976\u0977]/\u0977\u0978","\x81A\u0978\u0979{>\u0979\u097A\x7F@","\u097A\u097Bi5\u097B\u097Cq9\u097C\u097D","a1\u097D\u0206\u097E\u097F_0","\u097F\u0980Y-\u0980\u0981\x7F@\u0981\u0982","a1\u0982\u0983\x07a\u0983\u0984Y-","\u0984\u0985_0\u0985\u0986_0\u0986\u0208","\u0987\u0988_0\u0988\u0989Y-","\u0989\u098A\x7F@\u098A\u098Ba1\u098B\u098C","\x07a\u098C\u098D}?\u098D\u098E\x81","A\u098E\u098F[.\u098F\u020A","\u0990\u0991a1\u0991\u0992\x87D\u0992\u0993","\x7F@\u0993\u0994{>\u0994\u0995Y-","\u0995\u0996]/\u0996\u0997\x7F@\u0997\u020C","\u0998\u0999e3\u0999\u099A","a1\u099A\u099B\x7F@\u099B\u099C\x07a","\u099C\u099Dc2\u099D\u099Eu;\u099E\u099F","{>\u099F\u09A0q9\u09A0\u09A1Y-\u09A1\u09A2","\x7F@\u09A2\u020E\u09A3\u09A4","s:\u09A4\u09A5u;\u09A5\u09A6\x85C","\u09A6\u0210\u09A7\u09A8w<\u09A8","\u09A9u;\u09A9\u09AA}?\u09AA\u09ABi5","\u09AB\u09AC\x7F@\u09AC\u09ADi5\u09AD\u09AE","u;\u09AE\u09AFs:\u09AF\u0212","\u09B0\u09B1}?\u09B1\u09B2\x89E\u09B2","\u09B3}?\u09B3\u09B4_0\u09B4\u09B5Y-","\u09B5\u09B6\x7F@\u09B6\u09B7a1\u09B7\u0214","\u09B8\u09B9\x7F@\u09B9\u09BA","i5\u09BA\u09BBq9\u09BB\u09BCa1\u09BC","\u09BD}?\u09BD\u09BE\x7F@\u09BE\u09BF","Y-\u09BF\u09C0q9\u09C0\u09C1w<\u09C1\u09C2","\x07a\u09C2\u09C3Y-\u09C3\u09C4_0","\u09C4\u09C5_0\u09C5\u0216\u09C6","\u09C7\x7F@\u09C7\u09C8i5\u09C8\u09C9","q9\u09C9\u09CAa1\u09CA\u09CB}?\u09CB\u09CC","\x7F@\u09CC\u09CDY-\u09CD\u09CEq9","\u09CE\u09CFw<\u09CF\u09D0\x07a\u09D0\u09D1","_0\u09D1\u09D2i5\u09D2\u09D3c2\u09D3","\u09D4c2\u09D4\u0218\u09D5\u09D6","\x81A\u09D6\u09D7\x7F@\u09D7\u09D8","]/\u09D8\u09D9\x07a\u09D9\u09DA_0\u09DA","\u09DBY-\u09DB\u09DC\x7F@\u09DC\u09DD","a1\u09DD\u021A\u09DE\u09DF\x81","A\u09DF\u09E0\x7F@\u09E0\u09E1]/\u09E1","\u09E2\x07a\u09E2\u09E3\x7F@\u09E3\u09E4","i5\u09E4\u09E5q9\u09E5\u09E6a1\u09E6","\u021C\u09E7\u09E8\x81A\u09E8","\u09E9\x7F@\u09E9\u09EA]/\u09EA\u09EB\x07","a\u09EB\u09EC\x7F@\u09EC\u09EDi5","\u09ED\u09EEq9\u09EE\u09EFa1\u09EF\u09F0","}?\u09F0\u09F1\x7F@\u09F1\u09F2Y-\u09F2","\u09F3q9\u09F3\u09F4w<\u09F4\u021E","\u09F5\u09F6Y-\u09F6\u09F7}?\u09F7","\u09F8]/\u09F8\u09F9i5\u09F9\u09FAi5","\u09FA\u0220\u09FB\u09FC]/\u09FC","\u09FDg4\u09FD\u09FEY-\u09FE\u09FF{>","\u09FF\u0A00}?\u0A00\u0A01a1\u0A01\u0A02","\x7F@\u0A02\u0222\u0A03\u0A04","]/\u0A04\u0A05u;\u0A05\u0A06Y-\u0A06\u0A07","o8\u0A07\u0A08a1\u0A08\u0A09}?\u0A09","\u0A0A]/\u0A0A\u0A0Ba1\u0A0B\u0224","\u0A0C\u0A0D]/\u0A0D\u0A0Eu;\u0A0E","\u0A0Fo8\u0A0F\u0A10o8\u0A10\u0A11Y-","\u0A11\u0A12\x7F@\u0A12\u0A13i5\u0A13\u0A14","u;\u0A14\u0A15s:\u0A15\u0226","\u0A16\u0A17_0\u0A17\u0A18Y-\u0A18\u0A19","\x7F@\u0A19\u0A1AY-\u0A1A\u0A1B[.","\u0A1B\u0A1CY-\u0A1C\u0A1D}?\u0A1D\u0A1E","a1\u0A1E\u0228\u0A1F\u0A20i5","\u0A20\u0A21c2\u0A21\u022A\u0A22","\u0A23c2\u0A23\u0A24u;\u0A24\u0A25{>","\u0A25\u0A26q9\u0A26\u0A27Y-\u0A27\u0A28","\x7F@\u0A28\u022C\u0A29\u0A2A","q9\u0A2A\u0A2Bi5\u0A2B\u0A2C]/\u0A2C\u0A2D","{>\u0A2D\u0A2Eu;\u0A2E\u0A2F}?\u0A2F","\u0A30a1\u0A30\u0A31]/\u0A31\u0A32u;","\u0A32\u0A33s:\u0A33\u0A34_0\u0A34\u022E","\u0A35\u0A36u;\u0A36\u0A37o8","\u0A37\u0A38_0\u0A38\u0A39\x07a\u0A39\u0A3A","w<\u0A3A\u0A3BY-\u0A3B\u0A3C}?\u0A3C","\u0A3D}?\u0A3D\u0A3E\x85C\u0A3E\u0A3F","u;\u0A3F\u0A40{>\u0A40\u0A41_0\u0A41\u0230","\u0A42\u0A43w<\u0A43\u0A44","Y-\u0A44\u0A45}?\u0A45\u0A46}?\u0A46\u0A47","\x85C\u0A47\u0A48u;\u0A48\u0A49{>","\u0A49\u0A4A_0\u0A4A\u0232\u0A4B","\u0A4C{>\u0A4C\u0A4Da1\u0A4D\u0A4Ew<","\u0A4E\u0A4Fa1\u0A4F\u0A50Y-\u0A50\u0A51","\x7F@\u0A51\u0234\u0A52\u0A53","{>\u0A53\u0A54a1\u0A54\u0A55w<\u0A55\u0A56","o8\u0A56\u0A57Y-\u0A57\u0A58]/\u0A58","\u0A59a1\u0A59\u0236\u0A5A\u0A5B","{>\u0A5B\u0A5Ca1\u0A5C\u0A5D\x83B","\u0A5D\u0A5Ea1\u0A5E\u0A5F{>\u0A5F\u0A60","}?\u0A60\u0A61a1\u0A61\u0238","\u0A62\u0A63{>\u0A63\u0A64u;\u0A64\u0A65","\x85C\u0A65\u0A66\x07a\u0A66\u0A67]/","\u0A67\u0A68u;\u0A68\u0A69\x81A\u0A69\u0A6A","s:\u0A6A\u0A6B\x7F@\u0A6B\u023A","\u0A6C\u0A6D\x7F@\u0A6D\u0A6E{>","\u0A6E\u0A6F\x81A\u0A6F\u0A70s:\u0A70\u0A71","]/\u0A71\u0A72Y-\u0A72\u0A73\x7F@","\u0A73\u0A74a1\u0A74\u023C\u0A75","\u0A76\x85C\u0A76\u0A77a1\u0A77\u0A78","i5\u0A78\u0A79e3\u0A79\u0A7Ag4\u0A7A\u0A7B","\x7F@\u0A7B\u0A7C\x07a\u0A7C\u0A7D","}?\u0A7D\u0A7E\x7F@\u0A7E\u0A7F{>\u0A7F","\u0A80i5\u0A80\u0A81s:\u0A81\u0A82e3","\u0A82\u023E\u0A83\u0A84]/\u0A84","\u0A85u;\u0A85\u0A86s:\u0A86\u0A87\x7F","@\u0A87\u0A88Y-\u0A88\u0A89i5\u0A89\u0A8A","s:\u0A8A\u0A8B}?\u0A8B\u0240","\u0A8C\u0A8De3\u0A8D\u0A8Ea1\u0A8E\u0A8F","u;\u0A8F\u0A90q9\u0A90\u0A91a1\u0A91","\u0A92\x7F@\u0A92\u0A93{>\u0A93\u0A94","\x89E\u0A94\u0A95]/\u0A95\u0A96u;\u0A96","\u0A97o8\u0A97\u0A98o8\u0A98\u0A99a1","\u0A99\u0A9A]/\u0A9A\u0A9B\x7F@\u0A9B\u0A9C","i5\u0A9C\u0A9Du;\u0A9D\u0A9Es:\u0A9E","\u0242\u0A9F\u0AA0o8\u0AA0\u0AA1","i5\u0AA1\u0AA2s:\u0AA2\u0AA3a1\u0AA3","\u0AA4}?\u0AA4\u0AA5\x7F@\u0AA5\u0AA6","{>\u0AA6\u0AA7i5\u0AA7\u0AA8s:\u0AA8\u0AA9","e3\u0AA9\u0244\u0AAA\u0AAB","q9\u0AAB\u0AAC\x81A\u0AAC\u0AADo8\u0AAD","\u0AAE\x7F@\u0AAE\u0AAFi5\u0AAF\u0AB0","o8\u0AB0\u0AB1i5\u0AB1\u0AB2s:\u0AB2\u0AB3","a1\u0AB3\u0AB4}?\u0AB4\u0AB5\x7F@","\u0AB5\u0AB6{>\u0AB6\u0AB7i5\u0AB7\u0AB8","s:\u0AB8\u0AB9e3\u0AB9\u0246","\u0ABA\u0ABBq9\u0ABB\u0ABC\x81A\u0ABC\u0ABD","o8\u0ABD\u0ABE\x7F@\u0ABE\u0ABFi5","\u0ABF\u0AC0w<\u0AC0\u0AC1u;\u0AC1\u0AC2","i5\u0AC2\u0AC3s:\u0AC3\u0AC4\x7F@\u0AC4","\u0248\u0AC5\u0AC6q9\u0AC6\u0AC7","\x81A\u0AC7\u0AC8o8\u0AC8\u0AC9\x7F","@\u0AC9\u0ACAi5\u0ACA\u0ACBw<\u0ACB\u0ACC","u;\u0ACC\u0ACDo8\u0ACD\u0ACE\x89E","\u0ACE\u0ACFe3\u0ACF\u0AD0u;\u0AD0\u0AD1","s:\u0AD1\u024A\u0AD2\u0AD3w<","\u0AD3\u0AD4u;\u0AD4\u0AD5i5\u0AD5\u0AD6","s:\u0AD6\u0AD7\x7F@\u0AD7\u024C","\u0AD8\u0AD9w<\u0AD9\u0ADAu;\u0ADA\u0ADB","o8\u0ADB\u0ADC\x89E\u0ADC\u0ADDe3","\u0ADD\u0ADEu;\u0ADE\u0ADFs:\u0ADF\u024E","\u0AE0\u0AE1o8\u0AE1\u0AE2a1","\u0AE2\u0AE3\x83B\u0AE3\u0AE4a1\u0AE4\u0AE5","o8\u0AE5\u0250\u0AE6\u0AE7","_0\u0AE7\u0AE8Y-\u0AE8\u0AE9\x7F@\u0AE9","\u0AEAa1\u0AEA\u0AEB\x7F@\u0AEB\u0AEC","i5\u0AEC\u0AEDq9\u0AED\u0AEEa1\u0AEE\u0252","\u0AEF\u0AF0\x7F@\u0AF0\u0AF1","{>\u0AF1\u0AF2i5\u0AF2\u0AF3q9\u0AF3","\u0254\u0AF4\u0AF5o8\u0AF5\u0AF6","a1\u0AF6\u0AF7Y-\u0AF7\u0AF8_0\u0AF8","\u0AF9i5\u0AF9\u0AFAs:\u0AFA\u0AFBe3","\u0AFB\u0256\u0AFC\u0AFD\x7F@","\u0AFD\u0AFE{>\u0AFE\u0AFFY-\u0AFF\u0B00","i5\u0B00\u0B01o8\u0B01\u0B02i5\u0B02\u0B03","s:\u0B03\u0B04e3\u0B04\u0258","\u0B05\u0B06[.\u0B06\u0B07u;\u0B07\u0B08","\x7F@\u0B08\u0B09g4\u0B09\u025A","\u0B0A\u0B0B}?\u0B0B\u0B0C\x7F@","\u0B0C\u0B0D{>\u0B0D\u0B0Ei5\u0B0E\u0B0F","s:\u0B0F\u0B10e3\u0B10\u025C","\u0B11\u0B12}?\u0B12\u0B13\x81A\u0B13\u0B14","[.\u0B14\u0B15}?\u0B15\u0B16\x7F@","\u0B16\u0B17{>\u0B17\u0B18i5\u0B18\u0B19","s:\u0B19\u0B1Ae3\u0B1A\u025E","\u0B1B\u0B1C\x85C\u0B1C\u0B1Dg4\u0B1D\u0B1E","a1\u0B1E\u0B1Fs:\u0B1F\u0260","\u0B20\u0B21\x7F@\u0B21\u0B22g4\u0B22","\u0B23a1\u0B23\u0B24s:\u0B24\u0262","\u0B25\u0B26a1\u0B26\u0B27o8\u0B27","\u0B28}?\u0B28\u0B29a1\u0B29\u0264","\u0B2A\u0B2B}?\u0B2B\u0B2Ci5\u0B2C","\u0B2De3\u0B2D\u0B2Es:\u0B2E\u0B2Fa1","\u0B2F\u0B30_0\u0B30\u0266\u0B31","\u0B32\x81A\u0B32\u0B33s:\u0B33\u0B34","}?\u0B34\u0B35i5\u0B35\u0B36e3\u0B36\u0B37","s:\u0B37\u0B38a1\u0B38\u0B39_0\u0B39","\u0268\u0B3A\u0B3B_0\u0B3B\u0B3C","a1\u0B3C\u0B3D]/\u0B3D\u0B3Ei5\u0B3E","\u0B3Fq9\u0B3F\u0B40Y-\u0B40\u0B41o8","\u0B41\u0B47\u0B42\u0B43_0\u0B43","\u0B44a1\u0B44\u0B45]/\u0B45\u0B47","\u0B46\u0B3A\u0B46\u0B42","\u0B47\u026A\u0B48\u0B49k","6\u0B49\u0B4A}?\u0B4A\u0B4Bu;\u0B4B\u0B4C","s:\u0B4C\u026C\u0B4D\u0B4E","c2\u0B4E\u0B4Fo8\u0B4F\u0B50u;\u0B50\u0B51","Y-\u0B51\u0B52\x7F@\u0B52\u026E","\u0B53\u0B54c2\u0B54\u0B55o8\u0B55","\u0B56u;\u0B56\u0B57Y-\u0B57\u0B58\x7F","@\u0B58\u0B59\x076\u0B59\u0270","\u0B5A\u0B5Bc2\u0B5B\u0B5Co8\u0B5C\u0B5D","u;\u0B5D\u0B5EY-\u0B5E\u0B5F\x7F@","\u0B5F\u0B60\x07:\u0B60\u0272","\u0B61\u0B62}?\u0B62\u0B63a1\u0B63\u0B64","\x7F@\u0B64\u0274\u0B65\u0B66","}?\u0B66\u0B67a1\u0B67\u0B68]/\u0B68\u0B69","u;\u0B69\u0B6As:\u0B6A\u0B6B_0\u0B6B","\u0B6C\x07a\u0B6C\u0B6Dq9\u0B6D\u0B6E","i5\u0B6E\u0B6F]/\u0B6F\u0B70{>\u0B70\u0B71","u;\u0B71\u0B72}?\u0B72\u0B73a1\u0B73","\u0B74]/\u0B74\u0B75u;\u0B75\u0B76s:","\u0B76\u0B77_0\u0B77\u0276\u0B78","\u0B79q9\u0B79\u0B7Ai5\u0B7A\u0B7Bs:","\u0B7B\u0B7C\x81A\u0B7C\u0B7D\x7F@\u0B7D","\u0B7Ea1\u0B7E\u0B7F\x07a\u0B7F\u0B80","q9\u0B80\u0B81i5\u0B81\u0B82]/\u0B82\u0B83","{>\u0B83\u0B84u;\u0B84\u0B85}?\u0B85","\u0B86a1\u0B86\u0B87]/\u0B87\u0B88u;","\u0B88\u0B89s:\u0B89\u0B8A_0\u0B8A\u0278","\u0B8B\u0B8Cq9\u0B8C\u0B8Di5","\u0B8D\u0B8Es:\u0B8E\u0B8F\x81A\u0B8F\u0B90","\x7F@\u0B90\u0B91a1\u0B91\u0B92\x07a","\u0B92\u0B93}?\u0B93\u0B94a1\u0B94\u0B95","]/\u0B95\u0B96u;\u0B96\u0B97s:\u0B97","\u0B98_0\u0B98\u027A\u0B99\u0B9A","g4\u0B9A\u0B9Bu;\u0B9B\u0B9C\x81A","\u0B9C\u0B9D{>\u0B9D\u0B9E\x07a\u0B9E\u0B9F","q9\u0B9F\u0BA0i5\u0BA0\u0BA1]/\u0BA1","\u0BA2{>\u0BA2\u0BA3u;\u0BA3\u0BA4}?","\u0BA4\u0BA5a1\u0BA5\u0BA6]/\u0BA6\u0BA7","u;\u0BA7\u0BA8s:\u0BA8\u0BA9_0\u0BA9\u027C","\u0BAA\u0BABg4\u0BAB\u0BAC","u;\u0BAC\u0BAD\x81A\u0BAD\u0BAE{>\u0BAE","\u0BAF\x07a\u0BAF\u0BB0}?\u0BB0\u0BB1","a1\u0BB1\u0BB2]/\u0BB2\u0BB3u;\u0BB3\u0BB4","s:\u0BB4\u0BB5_0\u0BB5\u027E","\u0BB6\u0BB7g4\u0BB7\u0BB8u;\u0BB8\u0BB9","\x81A\u0BB9\u0BBA{>\u0BBA\u0BBB\x07a","\u0BBB\u0BBCq9\u0BBC\u0BBDi5\u0BBD\u0BBE","s:\u0BBE\u0BBF\x81A\u0BBF\u0BC0\x7F","@\u0BC0\u0BC1a1\u0BC1\u0280","\u0BC2\u0BC3_0\u0BC3\u0BC4Y-\u0BC4\u0BC5","\x89E\u0BC5\u0BC6\x07a\u0BC6\u0BC7q9","\u0BC7\u0BC8i5\u0BC8\u0BC9]/\u0BC9\u0BCA","{>\u0BCA\u0BCBu;\u0BCB\u0BCC}?\u0BCC\u0BCD","a1\u0BCD\u0BCE]/\u0BCE\u0BCFu;\u0BCF","\u0BD0s:\u0BD0\u0BD1_0\u0BD1\u0282","\u0BD2\u0BD3_0\u0BD3\u0BD4Y-\u0BD4","\u0BD5\x89E\u0BD5\u0BD6\x07a\u0BD6\u0BD7","}?\u0BD7\u0BD8a1\u0BD8\u0BD9]/\u0BD9","\u0BDAu;\u0BDA\u0BDBs:\u0BDB\u0BDC_0","\u0BDC\u0284\u0BDD\u0BDE_0\u0BDE","\u0BDFY-\u0BDF\u0BE0\x89E\u0BE0\u0BE1\x07","a\u0BE1\u0BE2q9\u0BE2\u0BE3i5\u0BE3","\u0BE4s:\u0BE4\u0BE5\x81A\u0BE5\u0BE6","\x7F@\u0BE6\u0BE7a1\u0BE7\u0286","\u0BE8\u0BE9_0\u0BE9\u0BEAY-\u0BEA\u0BEB","\x89E\u0BEB\u0BEC\x07a\u0BEC\u0BED","g4\u0BED\u0BEEu;\u0BEE\u0BEF\x81A\u0BEF","\u0BF0{>\u0BF0\u0288\u0BF1\u0BF2","\x89E\u0BF2\u0BF3a1\u0BF3\u0BF4Y-","\u0BF4\u0BF5{>\u0BF5\u0BF6\x07a\u0BF6\u0BF7","q9\u0BF7\u0BF8u;\u0BF8\u0BF9s:\u0BF9","\u0BFA\x7F@\u0BFA\u0BFBg4\u0BFB\u028A","\u0BFC\u0BFD[.\u0BFD\u0BFE\x7F","@\u0BFE\u0BFF{>\u0BFF\u0C00a1\u0C00\u0C01","a1\u0C01\u028C\u0C02\u0C03","{>\u0C03\u0C04\x7F@\u0C04\u0C05{>\u0C05","\u0C06a1\u0C06\u0C07a1\u0C07\u028E","\u0C08\u0C09g4\u0C09\u0C0AY-\u0C0A","\u0C0B}?\u0C0B\u0C0Cg4\u0C0C\u0290","\u0C0D\u0C0E{>\u0C0E\u0C0Fa1\u0C0F","\u0C10Y-\u0C10\u0C11o8\u0C11\u0292","\u0C12\u0C13_0\u0C13\u0C14u;\u0C14","\u0C15\x81A\u0C15\u0C16[.\u0C16\u0C17","o8\u0C17\u0C18a1\u0C18\u0294","\u0C19\u0C1Aw<\u0C1A\u0C1B{>\u0C1B\u0C1C","a1\u0C1C\u0C1D]/\u0C1D\u0C1Ei5\u0C1E\u0C1F","}?\u0C1F\u0C20i5\u0C20\u0C21u;\u0C21","\u0C22s:\u0C22\u0296\u0C23\u0C24","s:\u0C24\u0C25\x81A\u0C25\u0C26q9","\u0C26\u0C27a1\u0C27\u0C28{>\u0C28\u0C29","i5\u0C29\u0C2A]/\u0C2A\u0298","\u0C2B\u0C2Cs:\u0C2C\u0C2D\x81A\u0C2D\u0C2E","q9\u0C2E\u0C2F[.\u0C2F\u0C30a1\u0C30","\u0C31{>\u0C31\u029A\u0C32\u0C33","c2\u0C33\u0C34i5\u0C34\u0C35\x87D","\u0C35\u0C36a1\u0C36\u0C37_0\u0C37\u029C","\u0C38\u0C39[.\u0C39\u0C3Ai5","\u0C3A\u0C3B\x7F@\u0C3B\u029E","\u0C3C\u0C3D[.\u0C3D\u0C3Eu;\u0C3E\u0C3F","u;\u0C3F\u0C40o8\u0C40\u02A0","\u0C41\u0C42\x83B\u0C42\u0C43Y-\u0C43\u0C44","{>\u0C44\u0C45\x89E\u0C45\u0C46i5","\u0C46\u0C47s:\u0C47\u0C48e3\u0C48\u02A2","\u0C49\u0C4A\x83B\u0C4A\u0C4B","Y-\u0C4B\u0C4C{>\u0C4C\u0C4D]/\u0C4D\u0C4E","g4\u0C4E\u0C4FY-\u0C4F\u0C50{>\u0C50","\u02A4\u0C51\u0C52\x83B\u0C52","\u0C53Y-\u0C53\u0C54{>\u0C54\u0C55]/","\u0C55\u0C56g4\u0C56\u0C57Y-\u0C57\u0C58","{>\u0C58\u0C59\x074\u0C59\u02A6","\u0C5A\u0C5Bs:\u0C5B\u0C5CY-\u0C5C\u0C5D","\x7F@\u0C5D\u0C5Ei5\u0C5E\u0C5Fu;","\u0C5F\u0C60s:\u0C60\u0C61Y-\u0C61\u0C62","o8\u0C62\u02A8\u0C63\u0C64s:","\u0C64\u0C65\x83B\u0C65\u0C66Y-\u0C66\u0C67","{>\u0C67\u0C68]/\u0C68\u0C69g4\u0C69","\u0C6AY-\u0C6A\u0C6B{>\u0C6B\u02AA","\u0C6C\u0C6Ds:\u0C6D\u0C6E\x83B","\u0C6E\u0C6FY-\u0C6F\u0C70{>\u0C70\u0C71","]/\u0C71\u0C72g4\u0C72\u0C73Y-\u0C73\u0C74","{>\u0C74\u0C75\x074\u0C75\u02AC","\u0C76\u0C77s:\u0C77\u0C78]/\u0C78","\u0C79g4\u0C79\u0C7AY-\u0C7A\u0C7B{>","\u0C7B\u02AE\u0C7C\u0C7D\x83B","\u0C7D\u0C7EY-\u0C7E\u0C7F{>\u0C7F\u0C80","[.\u0C80\u0C81i5\u0C81\u0C82s:\u0C82\u0C83","Y-\u0C83\u0C84{>\u0C84\u0C85\x89E","\u0C85\u02B0\u0C86\u0C87\x7F@","\u0C87\u0C88i5\u0C88\u0C89s:\u0C89\u0C8A","\x89E\u0C8A\u0C8B[.\u0C8B\u0C8Co8\u0C8C","\u0C8Du;\u0C8D\u0C8E[.\u0C8E\u02B2","\u0C8F\u0C90[.\u0C90\u0C91o8\u0C91","\u0C92u;\u0C92\u0C93[.\u0C93\u02B4","\u0C94\u0C95]/\u0C95\u0C96o8\u0C96","\u0C97u;\u0C97\u0C98[.\u0C98\u02B6","\u0C99\u0C9A[.\u0C9A\u0C9Bc2\u0C9B","\u0C9Ci5\u0C9C\u0C9Do8\u0C9D\u0C9Ea1","\u0C9E\u02B8\u0C9F\u0CA0{>\u0CA0","\u0CA1Y-\u0CA1\u0CA2\x85C\u0CA2\u02BA","\u0CA3\u0CA4q9\u0CA4\u0CA5a1","\u0CA5\u0CA6_0\u0CA6\u0CA7i5\u0CA7\u0CA8","\x81A\u0CA8\u0CA9q9\u0CA9\u0CAA[.\u0CAA","\u0CABo8\u0CAB\u0CACu;\u0CAC\u0CAD[.","\u0CAD\u02BC\u0CAE\u0CAFo8\u0CAF","\u0CB0u;\u0CB0\u0CB1s:\u0CB1\u0CB2e3","\u0CB2\u0CB3[.\u0CB3\u0CB4o8\u0CB4\u0CB5","u;\u0CB5\u0CB6[.\u0CB6\u02BE","\u0CB7\u0CB8o8\u0CB8\u0CB9u;\u0CB9\u0CBA","s:\u0CBA\u0CBBe3\u0CBB\u02C0","\u0CBC\u0CBD\x7F@\u0CBD\u0CBEi5\u0CBE\u0CBF","s:\u0CBF\u0CC0\x89E\u0CC0\u0CC1\x7F","@\u0CC1\u0CC2a1\u0CC2\u0CC3\x87D\u0CC3","\u0CC4\x7F@\u0CC4\u02C2\u0CC5","\u0CC6\x7F@\u0CC6\u0CC7a1\u0CC7\u0CC8","\x87D\u0CC8\u0CC9\x7F@\u0CC9\u02C4","\u0CCA\u0CCBq9\u0CCB\u0CCCa1\u0CCC","\u0CCD_0\u0CCD\u0CCEi5\u0CCE\u0CCF\x81","A\u0CCF\u0CD0q9\u0CD0\u0CD1\x7F@\u0CD1","\u0CD2a1\u0CD2\u0CD3\x87D\u0CD3\u0CD4","\x7F@\u0CD4\u02C6\u0CD5\u0CD6","o8\u0CD6\u0CD7u;\u0CD7\u0CD8s:\u0CD8\u0CD9","e3\u0CD9\u0CDA\x7F@\u0CDA\u0CDBa1","\u0CDB\u0CDC\x87D\u0CDC\u0CDD\x7F@\u0CDD","\u02C8\u0CDE\u0CDFa1\u0CDF\u0CE0","s:\u0CE0\u0CE1\x81A\u0CE1\u0CE2q9","\u0CE2\u02CA\u0CE3\u0CE4}?\u0CE4","\u0CE5a1\u0CE5\u0CE6{>\u0CE6\u0CE7i5","\u0CE7\u0CE8Y-\u0CE8\u0CE9o8\u0CE9\u02CC","\u0CEA\u0CEBe3\u0CEB\u0CECa1","\u0CEC\u0CEDu;\u0CED\u0CEEq9\u0CEE\u0CEF","a1\u0CEF\u0CF0\x7F@\u0CF0\u0CF1{>\u0CF1","\u0CF2\x89E\u0CF2\u02CE\u0CF3","\u0CF4\x8BF\u0CF4\u0CF5a1\u0CF5\u0CF6","{>\u0CF6\u0CF7u;\u0CF7\u0CF8c2\u0CF8\u0CF9","i5\u0CF9\u0CFAo8\u0CFA\u0CFBo8\u0CFB","\u02D0\u0CFC\u0CFD[.\u0CFD\u0CFE","\x89E\u0CFE\u0CFF\x7F@\u0CFF\u0D00","a1\u0D00\u02D2\u0D01\u0D02\x81","A\u0D02\u0D03s:\u0D03\u0D04i5\u0D04\u0D05","]/\u0D05\u0D06u;\u0D06\u0D07_0\u0D07","\u0D08a1\u0D08\u02D4\u0D09\u0D0A","\x7F@\u0D0A\u0D0Ba1\u0D0B\u0D0C{>","\u0D0C\u0D0Dq9\u0D0D\u0D0Ei5\u0D0E\u0D0F","s:\u0D0F\u0D10Y-\u0D10\u0D11\x7F@\u0D11","\u0D12a1\u0D12\u0D13_0\u0D13\u02D6","\u0D14\u0D15u;\u0D15\u0D16w<\u0D16","\u0D17\x7F@\u0D17\u0D18i5\u0D18\u0D19","u;\u0D19\u0D1As:\u0D1A\u0D1BY-\u0D1B\u0D1C","o8\u0D1C\u0D1Do8\u0D1D\u0D1E\x89E","\u0D1E\u02D8\u0D1F\u0D20a1\u0D20","\u0D21s:\u0D21\u0D22]/\u0D22\u0D23o8","\u0D23\u0D24u;\u0D24\u0D25}?\u0D25\u0D26","a1\u0D26\u0D27_0\u0D27\u02DA","\u0D28\u0D29a1\u0D29\u0D2A}?\u0D2A\u0D2B","]/\u0D2B\u0D2CY-\u0D2C\u0D2Dw<\u0D2D\u0D2E","a1\u0D2E\u0D2F_0\u0D2F\u02DC","\u0D30\u0D31o8\u0D31\u0D32i5\u0D32\u0D33","s:\u0D33\u0D34a1\u0D34\u0D35}?\u0D35","\u02DE\u0D36\u0D37}?\u0D37\u0D38","\x7F@\u0D38\u0D39Y-\u0D39\u0D3A{>","\u0D3A\u0D3B\x7F@\u0D3B\u0D3Ci5\u0D3C\u0D3D","s:\u0D3D\u0D3Ee3\u0D3E\u02E0","\u0D3F\u0D40e3\u0D40\u0D41o8\u0D41\u0D42","u;\u0D42\u0D43[.\u0D43\u0D44Y-\u0D44","\u0D45o8\u0D45\u02E2\u0D46\u0D47","o8\u0D47\u0D48u;\u0D48\u0D49]/\u0D49","\u0D4AY-\u0D4A\u0D4Bo8\u0D4B\u02E4","\u0D4C\u0D4D}?\u0D4D\u0D4Ea1\u0D4E","\u0D4F}?\u0D4F\u0D50}?\u0D50\u0D51i5","\u0D51\u0D52u;\u0D52\u0D53s:\u0D53\u02E6","\u0D54\u0D55\x83B\u0D55\u0D56","Y-\u0D56\u0D57{>\u0D57\u0D58i5\u0D58\u0D59","Y-\u0D59\u0D5As:\u0D5A\u0D5B\x7F@","\u0D5B\u02E8\u0D5C\u0D5Du;\u0D5D","\u0D5E[.\u0D5E\u0D5Fk6\u0D5F\u0D60a1","\u0D60\u0D61]/\u0D61\u0D62\x7F@\u0D62\u02EA","\u0D63\u0D64e3\u0D64\u0D65","a1\u0D65\u0D66u;\u0D66\u0D67e3\u0D67\u0D68","{>\u0D68\u0D69Y-\u0D69\u0D6Aw<\u0D6A","\u0D6Bg4\u0D6B\u0D6C\x89E\u0D6C\u02EC","\u0D6D\u0D6E\x81A\u0D6E\u0D6F","s:\u0D6F\u0D70w<\u0D70\u0D71i5\u0D71\u0D72","\x83B\u0D72\u0D73u;\u0D73\u0D74\x7F","@\u0D74\u02EE\u0D75\u0D76i5","\u0D76\u0D77s:\u0D77\u0D78\x7F@\u0D78\u0D79","\x073\u0D79\u0D7A\u0D7A\u0D7B","\b\u0178\u0D7B\u02F0\u0D7C\u0D7D","i5\u0D7D\u0D7Es:\u0D7E\u0D7F\x7F@","\u0D7F\u0D80\x074\u0D80\u0D81","\u0D81\u0D82\b\u0179\u0D82\u02F2","\u0D83\u0D84i5\u0D84\u0D85s:\u0D85\u0D86","\x7F@\u0D86\u0D87\x075\u0D87\u0D88","\u0D88\u0D89\b\u017A\u0D89\u02F4","\u0D8A\u0D8Bi5\u0D8B\u0D8Cs:\u0D8C","\u0D8D\x7F@\u0D8D\u0D8E\x076\u0D8E\u0D8F","\u0D8F\u0D90\b\u017B\u0D90\u02F6","\u0D91\u0D92i5\u0D92\u0D93","s:\u0D93\u0D94\x7F@\u0D94\u0D95\x07:","\u0D95\u0D96\u0D96\u0D97\b\u017C","\u0D97\u02F8\u0D98\u0D99}?\u0D99","\u0D9Ay=\u0D9A\u0D9Bo8\u0D9B\u0D9C\x07a","\u0D9C\u0D9D\x7F@\u0D9D\u0D9E}?\u0D9E","\u0D9Fi5\u0D9F\u0DA0\x07a\u0DA0\u0DA1","}?\u0DA1\u0DA2a1\u0DA2\u0DA3]/\u0DA3\u0DA4","u;\u0DA4\u0DA5s:\u0DA5\u0DA6_0\u0DA6","\u0DA7\u0DA7\u0DA8\b\u017D\x07\u0DA8","\u02FA\u0DA9\u0DAA}?\u0DAA\u0DAB","y=\u0DAB\u0DACo8\u0DAC\u0DAD\x07a","\u0DAD\u0DAE\x7F@\u0DAE\u0DAF}?\u0DAF\u0DB0","i5\u0DB0\u0DB1\x07a\u0DB1\u0DB2q9","\u0DB2\u0DB3i5\u0DB3\u0DB4s:\u0DB4\u0DB5","\x81A\u0DB5\u0DB6\x7F@\u0DB6\u0DB7a1","\u0DB7\u0DB8\u0DB8\u0DB9\b\u017E\b\u0DB9","\u02FC\u0DBA\u0DBB}?\u0DBB\u0DBC","y=\u0DBC\u0DBDo8\u0DBD\u0DBE\x07a","\u0DBE\u0DBF\x7F@\u0DBF\u0DC0}?\u0DC0\u0DC1","i5\u0DC1\u0DC2\x07a\u0DC2\u0DC3g4","\u0DC3\u0DC4u;\u0DC4\u0DC5\x81A\u0DC5\u0DC6","{>\u0DC6\u0DC7\u0DC7\u0DC8\b\u017F"," \u0DC8\u02FE\u0DC9\u0DCA}?","\u0DCA\u0DCBy=\u0DCB\u0DCCo8\u0DCC\u0DCD\x07","a\u0DCD\u0DCE\x7F@\u0DCE\u0DCF}?","\u0DCF\u0DD0i5\u0DD0\u0DD1\x07a\u0DD1\u0DD2","_0\u0DD2\u0DD3Y-\u0DD3\u0DD4\x89E",`\u0DD4\u0DD5\u0DD5\u0DD6\b\u0180 +\u0DD6`,"\u0300\u0DD7\u0DD8}?\u0DD8\u0DD9","y=\u0DD9\u0DDAo8\u0DDA\u0DDB\x07a","\u0DDB\u0DDC\x7F@\u0DDC\u0DDD}?\u0DDD\u0DDE","i5\u0DDE\u0DDF\x07a\u0DDF\u0DE0\x85","C\u0DE0\u0DE1a1\u0DE1\u0DE2a1\u0DE2\u0DE3","m7\u0DE3\u0DE4\u0DE4\u0DE5\b\u0181","\v\u0DE5\u0302\u0DE6\u0DE7}","?\u0DE7\u0DE8y=\u0DE8\u0DE9o8\u0DE9\u0DEA","\x07a\u0DEA\u0DEB\x7F@\u0DEB\u0DEC","}?\u0DEC\u0DEDi5\u0DED\u0DEE\x07a\u0DEE","\u0DEFq9\u0DEF\u0DF0u;\u0DF0\u0DF1s:","\u0DF1\u0DF2\x7F@\u0DF2\u0DF3g4\u0DF3\u0DF4","\u0DF4\u0DF5\b\u0182\f\u0DF5\u0304","\u0DF6\u0DF7}?\u0DF7\u0DF8y=","\u0DF8\u0DF9o8\u0DF9\u0DFA\x07a\u0DFA\u0DFB","\x7F@\u0DFB\u0DFC}?\u0DFC\u0DFDi5","\u0DFD\u0DFE\x07a\u0DFE\u0DFFy=\u0DFF\u0E00","\x81A\u0E00\u0E01Y-\u0E01\u0E02{>","\u0E02\u0E03\x7F@\u0E03\u0E04a1\u0E04\u0E05","{>\u0E05\u0E06\u0E06\u0E07\b\u0183","\r\u0E07\u0306\u0E08\u0E09}?","\u0E09\u0E0Ay=\u0E0A\u0E0Bo8\u0E0B\u0E0C\x07","a\u0E0C\u0E0D\x7F@\u0E0D\u0E0E}?","\u0E0E\u0E0Fi5\u0E0F\u0E10\x07a\u0E10\u0E11","\x89E\u0E11\u0E12a1\u0E12\u0E13Y-","\u0E13\u0E14{>\u0E14\u0E15\u0E15","\u0E16\b\u0184\u0E16\u0308\u0E17","\u0E18 \u0E18\u0E19\u0E19","\u0E1A\b\u0185\u0E1A\u030A\u0E1B","\u0E1D \u0E1C\u0E1B\u0E1D\u030C","\u0E1E\u0E20? \u0E1F\u0E21 !","\u0E20\u0E1F\u0E21\u0E22","\u0E22\u0E20\u0E22\u0E23","\u0E23\u030E\u0E24\u0E26\x8FH","\u0E25\u0E24\u0E26\u0E27","\u0E27\u0E25\u0E27\u0E28","\u0E28\u0E29\u0E29\u0E31 ","\u0E2A\u0E2E\u033F\u01A0\u0E2B\u0E2D\u033D\u019F","\u0E2C\u0E2B\u0E2D\u0E30","\u0E2E\u0E2C\u0E2E\u0E2F","\u0E2F\u0E32\u0E30\u0E2E","\u0E31\u0E2A\u0E31\u0E32","\u0E32\u0E47\u0E33\u0E35\x8FH","\u0E34\u0E33\u0E35\u0E36","\u0E36\u0E34\u0E36\u0E37","\u0E37\u0E38\u0E38\u0E3C\u0341\u01A1","\u0E39\u0E3B\u033D\u019F\u0E3A\u0E39","\u0E3B\u0E3E\u0E3C\u0E3A","\u0E3C\u0E3D\u0E3D\u0E47","\u0E3E\u0E3C\u0E3F\u0E43\u033F\u01A0","\u0E40\u0E42\u033D\u019F\u0E41\u0E40","\u0E42\u0E45\u0E43\u0E41","\u0E43\u0E44\u0E44\u0E47","\u0E45\u0E43\u0E46\u0E25","\u0E46\u0E34\u0E46\u0E3F","\u0E47\u0310\u0E48\u0E49 ","\u0E49\u0E4A\u031D\u018F\u0E4A\u0312","\u0E4B\u0E4C\x07b\u0E4C\u0314","\u0E4D\u0E4E\x07)\u0E4E\u0316","\u0E4F\u0E50\x07$\u0E50\u0318","\u0E51\u0E55\u0313\u018A\u0E52\u0E54\v","\u0E53\u0E52\u0E54\u0E57","\u0E55\u0E56\u0E55\u0E53","\u0E56\u0E58\u0E57\u0E55","\u0E58\u0E59\u0313\u018A\u0E59\u031A","\u0E5A\u0E5E\u0317\u018C\u0E5B\u0E5D\v","\u0E5C\u0E5B\u0E5D\u0E60","\u0E5E\u0E5F\u0E5E\u0E5C","\u0E5F\u0E61\u0E60\u0E5E","\u0E61\u0E62\u0317\u018C\u0E62\u0E64","\u0E63\u0E5A\u0E64\u0E65","\u0E65\u0E63\u0E65\u0E66","\u0E66\u031C\u0E67\u0E6B\u0315\u018B","\u0E68\u0E6A\v\u0E69\u0E68","\u0E6A\u0E6D\u0E6B\u0E6C","\u0E6B\u0E69\u0E6C\u0E6E","\u0E6D\u0E6B\u0E6E\u0E6F\u0315\u018B","\u0E6F\u0E71\u0E70\u0E67","\u0E71\u0E72\u0E72\u0E70","\u0E72\u0E73\u0E73\u031E","\u0E74\u0E78A!\u0E75\u0E77\v","\u0E76\u0E75\u0E77\u0E7A","\u0E78\u0E79\u0E78\u0E76","\u0E79\u0E7B\u0E7A\u0E78",'\u0E7B\u0E7CC"\u0E7C\u0E7E\u0E7D',"\u0E74\u0E7E\u0E7F\u0E7F","\u0E7D\u0E7F\u0E80\u0E80","\u0320\u0E81\u0E82A!\u0E82\u0E83",'\x97L\u0E83\u0E84C"\u0E84\u0E86',"\u0E85\u0E81\u0E86\u0E87","\u0E87\u0E85\u0E87\u0E88","\u0E88\u0322\u0E89\u0E8DE","#\u0E8A\u0E8C\v\u0E8B\u0E8A","\u0E8C\u0E8F\u0E8D\u0E8E","\u0E8D\u0E8B\u0E8E\u0E90","\u0E8F\u0E8D\u0E90\u0E91G","$\u0E91\u0E93\u0E92\u0E89","\u0E93\u0E94\u0E94\u0E92","\u0E94\u0E95\u0E95\u0324","\u0E96\u0E97\x071\u0E97\u0E98\x07,","\u0E98\u0E99\x07#\u0E99\u0E9A","\u0E9A\u0E9B\x8FH\u0E9B\u0E9F","\u0E9C\u0E9E\v\u0E9D\u0E9C","\u0E9E\u0EA1\u0E9F\u0EA0","\u0E9F\u0E9D\u0EA0\u0EA2","\u0EA1\u0E9F\u0EA2\u0EA3\x07,","\u0EA3\u0EA4\x071\u0EA4\u0EA5","\u0EA5\u0EA6\b\u0193\u0EA6\u0326","\u0EA7\u0EA8\x071\u0EA8\u0EA9\x07,","\u0EA9\u0EAA\x07#\u0EAA\u0EAB","\u0EAB\u0EAC\b\u0194\u0EAC\u0328","\u0EAD\u0EAE\x071\u0EAE\u0EAF\x071\u0EAF",`\u0EB3\u0EB0\u0EB2 +"\u0EB1\u0EB0`,"\u0EB2\u0EB5\u0EB3\u0EB1","\u0EB3\u0EB4\u0EB4\u0EB6","\u0EB5\u0EB3\u0EB6\u0EB7","\b\u0195\u0EB7\u032A\u0EB8\u0EB9","\x07,\u0EB9\u0EBA\x071\u0EBA\u0EBB","\u0EBB\u0EBC\b\u0196\u0EBC\u032C","\u0EBD\u0EBE\x071\u0EBE\u0EBF\x07",",\u0EBF\u0EC0\x07,\u0EC0\u0ECE\x071","\u0EC1\u0EC2\x071\u0EC2\u0EC3\x07,",`\u0EC3\u0EC4\u0EC4\u0EC8 +#\u0EC5`,"\u0EC7\v\u0EC6\u0EC5\u0EC7","\u0ECA\u0EC8\u0EC9\u0EC8","\u0EC6\u0EC9\u0ECB\u0ECA","\u0EC8\u0ECB\u0ECC\x07,\u0ECC","\u0ECE\x071\u0ECD\u0EBD\u0ECD","\u0EC1\u0ECE\u0ECF\u0ECF","\u0ED0\b\u0197\u0ED0\u032E\u0ED1",`\u0ED5\x07%\u0ED2\u0ED4 +"\u0ED3\u0ED2`,"\u0ED4\u0ED7\u0ED5\u0ED3","\u0ED5\u0ED6\u0ED6\u0ED8","\u0ED7\u0ED5\u0ED8\u0ED9\b","\u0198\u0ED9\u0330\u0EDA\u0EE3",`\u0333\u019A\u0EDB\u0EDD +"\u0EDC\u0EDB`,"\u0EDD\u0EE0\u0EDE\u0EDC","\u0EDE\u0EDF\u0EDF\u0EE4","\u0EE0\u0EDE\u0EE1\u0EE4\u0335","\u019B\u0EE2\u0EE4\x07\u0EE3\u0EDE","\u0EE3\u0EE1\u0EE3\u0EE2","\u0EE4\u0EE5\u0EE5\u0EE6\b\u0199","\u0EE6\u0332\u0EE7\u0EE8\x07/","\u0EE8\u0EE9\x07/\u0EE9\u0334",'\u0EEA\u0EEB "\u0EEB\u0336',"\u0EEC\u0EF0\x8DG\u0EED\u0EF0 $\u0EEE","\u0EF0/\u0EEF\u0EEC\u0EEF","\u0EED\u0EEF\u0EEE\u0EF0","\u0EF1\u0EF1\u0EEF\u0EF1","\u0EF2\u0EF2\u0338\u0EF3","\u0EF4\x071\u0EF4\u0EF5\x07,\u0EF5\u033A","\u0EF6\u0EF7\x07,\u0EF7\u0EF8","\x071\u0EF8\u033C\u0EF9\u0EFC","\x8DG\u0EFA\u0EFC\u033F\u01A0\u0EFB\u0EF9","\u0EFB\u0EFA\u0EFC\u033E","\u0EFD\u0EFE %\u0EFE\u0340","\u0EFF\u0F00 &\u0F00\u0342","1\u035A\u03E8\u03F2\u03FA\u03FE\u0406\u040E\u0411","\u0416\u041C\u041F\u0425\u0458\u08F0\u0935\u0952\u0B46\u0E1C\u0E22\u0E27","\u0E2E\u0E31\u0E36\u0E3C\u0E43\u0E46\u0E55\u0E5E\u0E65\u0E6B\u0E72\u0E78","\u0E7F\u0E87\u0E8D\u0E94\u0E9F\u0EB3\u0EC8\u0ECD\u0ED5\u0EDE\u0EE3\u0EEF","\u0EF1\u0EFB 3 4 5 7 8 9"," : ; < = > ? @",""].join(""),qO=new os.atn.ATNDeserializer().deserialize(LG),EG=qO.decisionToState.map((i,e)=>new os.dfa.DFA(i,e)),Qt=class Qt extends os.Lexer{constructor(e){super(e),this._interp=new os.atn.LexerATNSimulator(this,qO,EG,new os.PredictionContextCache)}get atn(){return qO}};c(Qt,"SQLSelectLexer"),Yu(Qt,"grammarFileName","SQLSelectLexer.g4"),Yu(Qt,"channelNames",["DEFAULT_TOKEN_CHANNEL","HIDDEN"]),Yu(Qt,"modeNames",["DEFAULT_MODE"]),Yu(Qt,"literalNames",[null,"'='","':='","'<=>'","'>='","'>'","'<='","'<'",null,"'+'","'-'","'*'","'/'","'%'","'!'","'~'","'<<'","'>>'","'&&'","'&'","'^'","'||'","'|'","'.'","','","';'","':'","'('","')'","'{'","'}'","'_'","'['","']'","'{{'","'}}'","'->'","'->>'","'@'",null,"'@@'","'\\N'","'?'","'::'",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"'/*!'",null,"'*/'"]),Yu(Qt,"symbolicNames",[null,"EQUAL_OPERATOR","ASSIGN_OPERATOR","NULL_SAFE_EQUAL_OPERATOR","GREATER_OR_EQUAL_OPERATOR","GREATER_THAN_OPERATOR","LESS_OR_EQUAL_OPERATOR","LESS_THAN_OPERATOR","NOT_EQUAL_OPERATOR","PLUS_OPERATOR","MINUS_OPERATOR","MULT_OPERATOR","DIV_OPERATOR","MOD_OPERATOR","LOGICAL_NOT_OPERATOR","BITWISE_NOT_OPERATOR","SHIFT_LEFT_OPERATOR","SHIFT_RIGHT_OPERATOR","LOGICAL_AND_OPERATOR","BITWISE_AND_OPERATOR","BITWISE_XOR_OPERATOR","LOGICAL_OR_OPERATOR","BITWISE_OR_OPERATOR","DOT_SYMBOL","COMMA_SYMBOL","SEMICOLON_SYMBOL","COLON_SYMBOL","OPEN_PAR_SYMBOL","CLOSE_PAR_SYMBOL","OPEN_CURLY_SYMBOL","CLOSE_CURLY_SYMBOL","UNDERLINE_SYMBOL","OPEN_BRACKET_SYMBOL","CLOSE_BRACKET_SYMBOL","OPEN_DOUBLE_CURLY_SYMBOL","CLOSE_DOUBLE_CURLY_SYMBOL","JSON_SEPARATOR_SYMBOL","JSON_UNQUOTED_SEPARATOR_SYMBOL","AT_SIGN_SYMBOL","AT_TEXT_SUFFIX","AT_AT_SIGN_SYMBOL","NULL2_SYMBOL","PARAM_MARKER","CAST_COLON_SYMBOL","HEX_NUMBER","BIN_NUMBER","INT_NUMBER","DECIMAL_NUMBER","FLOAT_NUMBER","TINYINT_SYMBOL","SMALLINT_SYMBOL","MEDIUMINT_SYMBOL","BYTE_INT_SYMBOL","INT_SYMBOL","BIGINT_SYMBOL","SECOND_SYMBOL","MINUTE_SYMBOL","HOUR_SYMBOL","DAY_SYMBOL","WEEK_SYMBOL","MONTH_SYMBOL","QUARTER_SYMBOL","YEAR_SYMBOL","DEFAULT_SYMBOL","UNION_SYMBOL","SELECT_SYMBOL","ALL_SYMBOL","DISTINCT_SYMBOL","STRAIGHT_JOIN_SYMBOL","HIGH_PRIORITY_SYMBOL","SQL_SMALL_RESULT_SYMBOL","SQL_BIG_RESULT_SYMBOL","SQL_BUFFER_RESULT_SYMBOL","SQL_CALC_FOUND_ROWS_SYMBOL","LIMIT_SYMBOL","OFFSET_SYMBOL","INTO_SYMBOL","OUTFILE_SYMBOL","DUMPFILE_SYMBOL","PROCEDURE_SYMBOL","ANALYSE_SYMBOL","HAVING_SYMBOL","WINDOW_SYMBOL","AS_SYMBOL","PARTITION_SYMBOL","BY_SYMBOL","ROWS_SYMBOL","RANGE_SYMBOL","GROUPS_SYMBOL","UNBOUNDED_SYMBOL","PRECEDING_SYMBOL","INTERVAL_SYMBOL","CURRENT_SYMBOL","ROW_SYMBOL","BETWEEN_SYMBOL","AND_SYMBOL","FOLLOWING_SYMBOL","EXCLUDE_SYMBOL","GROUP_SYMBOL","TIES_SYMBOL","NO_SYMBOL","OTHERS_SYMBOL","WITH_SYMBOL","WITHOUT_SYMBOL","RECURSIVE_SYMBOL","ROLLUP_SYMBOL","CUBE_SYMBOL","ORDER_SYMBOL","ASC_SYMBOL","DESC_SYMBOL","FROM_SYMBOL","DUAL_SYMBOL","VALUES_SYMBOL","TABLE_SYMBOL","SQL_NO_CACHE_SYMBOL","SQL_CACHE_SYMBOL","MAX_STATEMENT_TIME_SYMBOL","FOR_SYMBOL","OF_SYMBOL","LOCK_SYMBOL","IN_SYMBOL","SHARE_SYMBOL","MODE_SYMBOL","UPDATE_SYMBOL","SKIP_SYMBOL","LOCKED_SYMBOL","NOWAIT_SYMBOL","WHERE_SYMBOL","QUALIFY_SYMBOL","OJ_SYMBOL","ON_SYMBOL","USING_SYMBOL","NATURAL_SYMBOL","INNER_SYMBOL","JOIN_SYMBOL","LEFT_SYMBOL","RIGHT_SYMBOL","OUTER_SYMBOL","CROSS_SYMBOL","LATERAL_SYMBOL","JSON_TABLE_SYMBOL","COLUMNS_SYMBOL","ORDINALITY_SYMBOL","EXISTS_SYMBOL","PATH_SYMBOL","NESTED_SYMBOL","EMPTY_SYMBOL","ERROR_SYMBOL","NULL_SYMBOL","USE_SYMBOL","FORCE_SYMBOL","IGNORE_SYMBOL","KEY_SYMBOL","INDEX_SYMBOL","PRIMARY_SYMBOL","IS_SYMBOL","TRUE_SYMBOL","FALSE_SYMBOL","UNKNOWN_SYMBOL","NOT_SYMBOL","XOR_SYMBOL","OR_SYMBOL","ANY_SYMBOL","MEMBER_SYMBOL","SOUNDS_SYMBOL","LIKE_SYMBOL","ESCAPE_SYMBOL","REGEXP_SYMBOL","DIV_SYMBOL","MOD_SYMBOL","MATCH_SYMBOL","AGAINST_SYMBOL","BINARY_SYMBOL","CAST_SYMBOL","ARRAY_SYMBOL","CASE_SYMBOL","END_SYMBOL","CONVERT_SYMBOL","COLLATE_SYMBOL","AVG_SYMBOL","BIT_AND_SYMBOL","BIT_OR_SYMBOL","BIT_XOR_SYMBOL","COUNT_SYMBOL","MIN_SYMBOL","MAX_SYMBOL","STD_SYMBOL","VARIANCE_SYMBOL","STDDEV_SAMP_SYMBOL","VAR_SAMP_SYMBOL","SUM_SYMBOL","GROUP_CONCAT_SYMBOL","SEPARATOR_SYMBOL","GROUPING_SYMBOL","ROW_NUMBER_SYMBOL","RANK_SYMBOL","DENSE_RANK_SYMBOL","CUME_DIST_SYMBOL","PERCENT_RANK_SYMBOL","NTILE_SYMBOL","LEAD_SYMBOL","LAG_SYMBOL","FIRST_VALUE_SYMBOL","LAST_VALUE_SYMBOL","NTH_VALUE_SYMBOL","FIRST_SYMBOL","LAST_SYMBOL","OVER_SYMBOL","RESPECT_SYMBOL","NULLS_SYMBOL","JSON_ARRAYAGG_SYMBOL","JSON_OBJECTAGG_SYMBOL","BOOLEAN_SYMBOL","LANGUAGE_SYMBOL","QUERY_SYMBOL","EXPANSION_SYMBOL","CHAR_SYMBOL","CURRENT_USER_SYMBOL","DATE_SYMBOL","INSERT_SYMBOL","TIME_SYMBOL","TIMESTAMP_SYMBOL","TIMESTAMP_LTZ_SYMBOL","TIMESTAMP_NTZ_SYMBOL","ZONE_SYMBOL","USER_SYMBOL","ADDDATE_SYMBOL","SUBDATE_SYMBOL","CURDATE_SYMBOL","CURTIME_SYMBOL","DATE_ADD_SYMBOL","DATE_SUB_SYMBOL","EXTRACT_SYMBOL","GET_FORMAT_SYMBOL","NOW_SYMBOL","POSITION_SYMBOL","SYSDATE_SYMBOL","TIMESTAMP_ADD_SYMBOL","TIMESTAMP_DIFF_SYMBOL","UTC_DATE_SYMBOL","UTC_TIME_SYMBOL","UTC_TIMESTAMP_SYMBOL","ASCII_SYMBOL","CHARSET_SYMBOL","COALESCE_SYMBOL","COLLATION_SYMBOL","DATABASE_SYMBOL","IF_SYMBOL","FORMAT_SYMBOL","MICROSECOND_SYMBOL","OLD_PASSWORD_SYMBOL","PASSWORD_SYMBOL","REPEAT_SYMBOL","REPLACE_SYMBOL","REVERSE_SYMBOL","ROW_COUNT_SYMBOL","TRUNCATE_SYMBOL","WEIGHT_STRING_SYMBOL","CONTAINS_SYMBOL","GEOMETRYCOLLECTION_SYMBOL","LINESTRING_SYMBOL","MULTILINESTRING_SYMBOL","MULTIPOINT_SYMBOL","MULTIPOLYGON_SYMBOL","POINT_SYMBOL","POLYGON_SYMBOL","LEVEL_SYMBOL","DATETIME_SYMBOL","TRIM_SYMBOL","LEADING_SYMBOL","TRAILING_SYMBOL","BOTH_SYMBOL","STRING_SYMBOL","SUBSTRING_SYMBOL","WHEN_SYMBOL","THEN_SYMBOL","ELSE_SYMBOL","SIGNED_SYMBOL","UNSIGNED_SYMBOL","DECIMAL_SYMBOL","JSON_SYMBOL","FLOAT_SYMBOL","FLOAT_SYMBOL_4","FLOAT_SYMBOL_8","SET_SYMBOL","SECOND_MICROSECOND_SYMBOL","MINUTE_MICROSECOND_SYMBOL","MINUTE_SECOND_SYMBOL","HOUR_MICROSECOND_SYMBOL","HOUR_SECOND_SYMBOL","HOUR_MINUTE_SYMBOL","DAY_MICROSECOND_SYMBOL","DAY_SECOND_SYMBOL","DAY_MINUTE_SYMBOL","DAY_HOUR_SYMBOL","YEAR_MONTH_SYMBOL","BTREE_SYMBOL","RTREE_SYMBOL","HASH_SYMBOL","REAL_SYMBOL","DOUBLE_SYMBOL","PRECISION_SYMBOL","NUMERIC_SYMBOL","NUMBER_SYMBOL","FIXED_SYMBOL","BIT_SYMBOL","BOOL_SYMBOL","VARYING_SYMBOL","VARCHAR_SYMBOL","VARCHAR2_SYMBOL","NATIONAL_SYMBOL","NVARCHAR_SYMBOL","NVARCHAR2_SYMBOL","NCHAR_SYMBOL","VARBINARY_SYMBOL","TINYBLOB_SYMBOL","BLOB_SYMBOL","CLOB_SYMBOL","BFILE_SYMBOL","RAW_SYMBOL","MEDIUMBLOB_SYMBOL","LONGBLOB_SYMBOL","LONG_SYMBOL","TINYTEXT_SYMBOL","TEXT_SYMBOL","MEDIUMTEXT_SYMBOL","LONGTEXT_SYMBOL","ENUM_SYMBOL","SERIAL_SYMBOL","GEOMETRY_SYMBOL","ZEROFILL_SYMBOL","BYTE_SYMBOL","UNICODE_SYMBOL","TERMINATED_SYMBOL","OPTIONALLY_SYMBOL","ENCLOSED_SYMBOL","ESCAPED_SYMBOL","LINES_SYMBOL","STARTING_SYMBOL","GLOBAL_SYMBOL","LOCAL_SYMBOL","SESSION_SYMBOL","VARIANT_SYMBOL","OBJECT_SYMBOL","GEOGRAPHY_SYMBOL","UNPIVOT_SYMBOL","WHITESPACE","INVALID_INPUT","UNDERSCORE_CHARSET","IDENTIFIER","NCHAR_TEXT","BACK_TICK_QUOTED_ID","DOUBLE_QUOTED_TEXT","SINGLE_QUOTED_TEXT","BRACKET_QUOTED_TEXT","BRACKET_QUOTED_NUMBER","CURLY_BRACES_QUOTED_TEXT","VERSION_COMMENT_START","MYSQL_COMMENT_START","SNOWFLAKE_COMMENT","VERSION_COMMENT_END","BLOCK_COMMENT","POUND_COMMENT","DASHDASH_COMMENT"]),Yu(Qt,"ruleNames",["EQUAL_OPERATOR","ASSIGN_OPERATOR","NULL_SAFE_EQUAL_OPERATOR","GREATER_OR_EQUAL_OPERATOR","GREATER_THAN_OPERATOR","LESS_OR_EQUAL_OPERATOR","LESS_THAN_OPERATOR","NOT_EQUAL_OPERATOR","PLUS_OPERATOR","MINUS_OPERATOR","MULT_OPERATOR","DIV_OPERATOR","MOD_OPERATOR","LOGICAL_NOT_OPERATOR","BITWISE_NOT_OPERATOR","SHIFT_LEFT_OPERATOR","SHIFT_RIGHT_OPERATOR","LOGICAL_AND_OPERATOR","BITWISE_AND_OPERATOR","BITWISE_XOR_OPERATOR","LOGICAL_OR_OPERATOR","BITWISE_OR_OPERATOR","DOT_SYMBOL","COMMA_SYMBOL","SEMICOLON_SYMBOL","COLON_SYMBOL","OPEN_PAR_SYMBOL","CLOSE_PAR_SYMBOL","OPEN_CURLY_SYMBOL","CLOSE_CURLY_SYMBOL","UNDERLINE_SYMBOL","OPEN_BRACKET_SYMBOL","CLOSE_BRACKET_SYMBOL","OPEN_DOUBLE_CURLY_SYMBOL","CLOSE_DOUBLE_CURLY_SYMBOL","JSON_SEPARATOR_SYMBOL","JSON_UNQUOTED_SEPARATOR_SYMBOL","AT_SIGN_SYMBOL","AT_TEXT_SUFFIX","AT_AT_SIGN_SYMBOL","NULL2_SYMBOL","PARAM_MARKER","CAST_COLON_SYMBOL","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","DIGIT","DIGITS","HEXDIGIT","HEX_NUMBER","BIN_NUMBER","INT_NUMBER","DECIMAL_NUMBER","FLOAT_NUMBER","TINYINT_SYMBOL","SMALLINT_SYMBOL","MEDIUMINT_SYMBOL","BYTE_INT_SYMBOL","INT_SYMBOL","BIGINT_SYMBOL","SECOND_SYMBOL","MINUTE_SYMBOL","HOUR_SYMBOL","DAY_SYMBOL","WEEK_SYMBOL","MONTH_SYMBOL","QUARTER_SYMBOL","YEAR_SYMBOL","DEFAULT_SYMBOL","UNION_SYMBOL","SELECT_SYMBOL","ALL_SYMBOL","DISTINCT_SYMBOL","STRAIGHT_JOIN_SYMBOL","HIGH_PRIORITY_SYMBOL","SQL_SMALL_RESULT_SYMBOL","SQL_BIG_RESULT_SYMBOL","SQL_BUFFER_RESULT_SYMBOL","SQL_CALC_FOUND_ROWS_SYMBOL","LIMIT_SYMBOL","OFFSET_SYMBOL","INTO_SYMBOL","OUTFILE_SYMBOL","DUMPFILE_SYMBOL","PROCEDURE_SYMBOL","ANALYSE_SYMBOL","HAVING_SYMBOL","WINDOW_SYMBOL","AS_SYMBOL","PARTITION_SYMBOL","BY_SYMBOL","ROWS_SYMBOL","RANGE_SYMBOL","GROUPS_SYMBOL","UNBOUNDED_SYMBOL","PRECEDING_SYMBOL","INTERVAL_SYMBOL","CURRENT_SYMBOL","ROW_SYMBOL","BETWEEN_SYMBOL","AND_SYMBOL","FOLLOWING_SYMBOL","EXCLUDE_SYMBOL","GROUP_SYMBOL","TIES_SYMBOL","NO_SYMBOL","OTHERS_SYMBOL","WITH_SYMBOL","WITHOUT_SYMBOL","RECURSIVE_SYMBOL","ROLLUP_SYMBOL","CUBE_SYMBOL","ORDER_SYMBOL","ASC_SYMBOL","DESC_SYMBOL","FROM_SYMBOL","DUAL_SYMBOL","VALUES_SYMBOL","TABLE_SYMBOL","SQL_NO_CACHE_SYMBOL","SQL_CACHE_SYMBOL","MAX_STATEMENT_TIME_SYMBOL","FOR_SYMBOL","OF_SYMBOL","LOCK_SYMBOL","IN_SYMBOL","SHARE_SYMBOL","MODE_SYMBOL","UPDATE_SYMBOL","SKIP_SYMBOL","LOCKED_SYMBOL","NOWAIT_SYMBOL","WHERE_SYMBOL","QUALIFY_SYMBOL","OJ_SYMBOL","ON_SYMBOL","USING_SYMBOL","NATURAL_SYMBOL","INNER_SYMBOL","JOIN_SYMBOL","LEFT_SYMBOL","RIGHT_SYMBOL","OUTER_SYMBOL","CROSS_SYMBOL","LATERAL_SYMBOL","JSON_TABLE_SYMBOL","COLUMNS_SYMBOL","ORDINALITY_SYMBOL","EXISTS_SYMBOL","PATH_SYMBOL","NESTED_SYMBOL","EMPTY_SYMBOL","ERROR_SYMBOL","NULL_SYMBOL","USE_SYMBOL","FORCE_SYMBOL","IGNORE_SYMBOL","KEY_SYMBOL","INDEX_SYMBOL","PRIMARY_SYMBOL","IS_SYMBOL","TRUE_SYMBOL","FALSE_SYMBOL","UNKNOWN_SYMBOL","NOT_SYMBOL","XOR_SYMBOL","OR_SYMBOL","ANY_SYMBOL","MEMBER_SYMBOL","SOUNDS_SYMBOL","LIKE_SYMBOL","ESCAPE_SYMBOL","REGEXP_SYMBOL","DIV_SYMBOL","MOD_SYMBOL","MATCH_SYMBOL","AGAINST_SYMBOL","BINARY_SYMBOL","CAST_SYMBOL","ARRAY_SYMBOL","CASE_SYMBOL","END_SYMBOL","CONVERT_SYMBOL","COLLATE_SYMBOL","AVG_SYMBOL","BIT_AND_SYMBOL","BIT_OR_SYMBOL","BIT_XOR_SYMBOL","COUNT_SYMBOL","MIN_SYMBOL","MAX_SYMBOL","STD_SYMBOL","VARIANCE_SYMBOL","STDDEV_SAMP_SYMBOL","VAR_SAMP_SYMBOL","SUM_SYMBOL","GROUP_CONCAT_SYMBOL","SEPARATOR_SYMBOL","GROUPING_SYMBOL","ROW_NUMBER_SYMBOL","RANK_SYMBOL","DENSE_RANK_SYMBOL","CUME_DIST_SYMBOL","PERCENT_RANK_SYMBOL","NTILE_SYMBOL","LEAD_SYMBOL","LAG_SYMBOL","FIRST_VALUE_SYMBOL","LAST_VALUE_SYMBOL","NTH_VALUE_SYMBOL","FIRST_SYMBOL","LAST_SYMBOL","OVER_SYMBOL","RESPECT_SYMBOL","NULLS_SYMBOL","JSON_ARRAYAGG_SYMBOL","JSON_OBJECTAGG_SYMBOL","BOOLEAN_SYMBOL","LANGUAGE_SYMBOL","QUERY_SYMBOL","EXPANSION_SYMBOL","CHAR_SYMBOL","CURRENT_USER_SYMBOL","DATE_SYMBOL","INSERT_SYMBOL","TIME_SYMBOL","TIMESTAMP_SYMBOL","TIMESTAMP_LTZ_SYMBOL","TIMESTAMP_NTZ_SYMBOL","ZONE_SYMBOL","USER_SYMBOL","ADDDATE_SYMBOL","SUBDATE_SYMBOL","CURDATE_SYMBOL","CURTIME_SYMBOL","DATE_ADD_SYMBOL","DATE_SUB_SYMBOL","EXTRACT_SYMBOL","GET_FORMAT_SYMBOL","NOW_SYMBOL","POSITION_SYMBOL","SYSDATE_SYMBOL","TIMESTAMP_ADD_SYMBOL","TIMESTAMP_DIFF_SYMBOL","UTC_DATE_SYMBOL","UTC_TIME_SYMBOL","UTC_TIMESTAMP_SYMBOL","ASCII_SYMBOL","CHARSET_SYMBOL","COALESCE_SYMBOL","COLLATION_SYMBOL","DATABASE_SYMBOL","IF_SYMBOL","FORMAT_SYMBOL","MICROSECOND_SYMBOL","OLD_PASSWORD_SYMBOL","PASSWORD_SYMBOL","REPEAT_SYMBOL","REPLACE_SYMBOL","REVERSE_SYMBOL","ROW_COUNT_SYMBOL","TRUNCATE_SYMBOL","WEIGHT_STRING_SYMBOL","CONTAINS_SYMBOL","GEOMETRYCOLLECTION_SYMBOL","LINESTRING_SYMBOL","MULTILINESTRING_SYMBOL","MULTIPOINT_SYMBOL","MULTIPOLYGON_SYMBOL","POINT_SYMBOL","POLYGON_SYMBOL","LEVEL_SYMBOL","DATETIME_SYMBOL","TRIM_SYMBOL","LEADING_SYMBOL","TRAILING_SYMBOL","BOTH_SYMBOL","STRING_SYMBOL","SUBSTRING_SYMBOL","WHEN_SYMBOL","THEN_SYMBOL","ELSE_SYMBOL","SIGNED_SYMBOL","UNSIGNED_SYMBOL","DECIMAL_SYMBOL","JSON_SYMBOL","FLOAT_SYMBOL","FLOAT_SYMBOL_4","FLOAT_SYMBOL_8","SET_SYMBOL","SECOND_MICROSECOND_SYMBOL","MINUTE_MICROSECOND_SYMBOL","MINUTE_SECOND_SYMBOL","HOUR_MICROSECOND_SYMBOL","HOUR_SECOND_SYMBOL","HOUR_MINUTE_SYMBOL","DAY_MICROSECOND_SYMBOL","DAY_SECOND_SYMBOL","DAY_MINUTE_SYMBOL","DAY_HOUR_SYMBOL","YEAR_MONTH_SYMBOL","BTREE_SYMBOL","RTREE_SYMBOL","HASH_SYMBOL","REAL_SYMBOL","DOUBLE_SYMBOL","PRECISION_SYMBOL","NUMERIC_SYMBOL","NUMBER_SYMBOL","FIXED_SYMBOL","BIT_SYMBOL","BOOL_SYMBOL","VARYING_SYMBOL","VARCHAR_SYMBOL","VARCHAR2_SYMBOL","NATIONAL_SYMBOL","NVARCHAR_SYMBOL","NVARCHAR2_SYMBOL","NCHAR_SYMBOL","VARBINARY_SYMBOL","TINYBLOB_SYMBOL","BLOB_SYMBOL","CLOB_SYMBOL","BFILE_SYMBOL","RAW_SYMBOL","MEDIUMBLOB_SYMBOL","LONGBLOB_SYMBOL","LONG_SYMBOL","TINYTEXT_SYMBOL","TEXT_SYMBOL","MEDIUMTEXT_SYMBOL","LONGTEXT_SYMBOL","ENUM_SYMBOL","SERIAL_SYMBOL","GEOMETRY_SYMBOL","ZEROFILL_SYMBOL","BYTE_SYMBOL","UNICODE_SYMBOL","TERMINATED_SYMBOL","OPTIONALLY_SYMBOL","ENCLOSED_SYMBOL","ESCAPED_SYMBOL","LINES_SYMBOL","STARTING_SYMBOL","GLOBAL_SYMBOL","LOCAL_SYMBOL","SESSION_SYMBOL","VARIANT_SYMBOL","OBJECT_SYMBOL","GEOGRAPHY_SYMBOL","UNPIVOT_SYMBOL","INT1_SYMBOL","INT2_SYMBOL","INT3_SYMBOL","INT4_SYMBOL","INT8_SYMBOL","SQL_TSI_SECOND_SYMBOL","SQL_TSI_MINUTE_SYMBOL","SQL_TSI_HOUR_SYMBOL","SQL_TSI_DAY_SYMBOL","SQL_TSI_WEEK_SYMBOL","SQL_TSI_MONTH_SYMBOL","SQL_TSI_QUARTER_SYMBOL","SQL_TSI_YEAR_SYMBOL","WHITESPACE","INVALID_INPUT","UNDERSCORE_CHARSET","IDENTIFIER","NCHAR_TEXT","BACK_TICK","SINGLE_QUOTE","DOUBLE_QUOTE","BACK_TICK_QUOTED_ID","DOUBLE_QUOTED_TEXT","SINGLE_QUOTED_TEXT","BRACKET_QUOTED_TEXT","BRACKET_QUOTED_NUMBER","CURLY_BRACES_QUOTED_TEXT","VERSION_COMMENT_START","MYSQL_COMMENT_START","SNOWFLAKE_COMMENT","VERSION_COMMENT_END","BLOCK_COMMENT","POUND_COMMENT","DASHDASH_COMMENT","DOUBLE_DASH","LINEBREAK","SIMPLE_IDENTIFIER","ML_COMMENT_HEAD","ML_COMMENT_END","LETTER_WHEN_UNQUOTED","LETTER_WHEN_UNQUOTED_NO_DIGIT","LETTER_WITHOUT_FLOAT_PART"]);var M=Qt;M.EOF=os.Token.EOF;M.EQUAL_OPERATOR=1;M.ASSIGN_OPERATOR=2;M.NULL_SAFE_EQUAL_OPERATOR=3;M.GREATER_OR_EQUAL_OPERATOR=4;M.GREATER_THAN_OPERATOR=5;M.LESS_OR_EQUAL_OPERATOR=6;M.LESS_THAN_OPERATOR=7;M.NOT_EQUAL_OPERATOR=8;M.PLUS_OPERATOR=9;M.MINUS_OPERATOR=10;M.MULT_OPERATOR=11;M.DIV_OPERATOR=12;M.MOD_OPERATOR=13;M.LOGICAL_NOT_OPERATOR=14;M.BITWISE_NOT_OPERATOR=15;M.SHIFT_LEFT_OPERATOR=16;M.SHIFT_RIGHT_OPERATOR=17;M.LOGICAL_AND_OPERATOR=18;M.BITWISE_AND_OPERATOR=19;M.BITWISE_XOR_OPERATOR=20;M.LOGICAL_OR_OPERATOR=21;M.BITWISE_OR_OPERATOR=22;M.DOT_SYMBOL=23;M.COMMA_SYMBOL=24;M.SEMICOLON_SYMBOL=25;M.COLON_SYMBOL=26;M.OPEN_PAR_SYMBOL=27;M.CLOSE_PAR_SYMBOL=28;M.OPEN_CURLY_SYMBOL=29;M.CLOSE_CURLY_SYMBOL=30;M.UNDERLINE_SYMBOL=31;M.OPEN_BRACKET_SYMBOL=32;M.CLOSE_BRACKET_SYMBOL=33;M.OPEN_DOUBLE_CURLY_SYMBOL=34;M.CLOSE_DOUBLE_CURLY_SYMBOL=35;M.JSON_SEPARATOR_SYMBOL=36;M.JSON_UNQUOTED_SEPARATOR_SYMBOL=37;M.AT_SIGN_SYMBOL=38;M.AT_TEXT_SUFFIX=39;M.AT_AT_SIGN_SYMBOL=40;M.NULL2_SYMBOL=41;M.PARAM_MARKER=42;M.CAST_COLON_SYMBOL=43;M.HEX_NUMBER=44;M.BIN_NUMBER=45;M.INT_NUMBER=46;M.DECIMAL_NUMBER=47;M.FLOAT_NUMBER=48;M.TINYINT_SYMBOL=49;M.SMALLINT_SYMBOL=50;M.MEDIUMINT_SYMBOL=51;M.BYTE_INT_SYMBOL=52;M.INT_SYMBOL=53;M.BIGINT_SYMBOL=54;M.SECOND_SYMBOL=55;M.MINUTE_SYMBOL=56;M.HOUR_SYMBOL=57;M.DAY_SYMBOL=58;M.WEEK_SYMBOL=59;M.MONTH_SYMBOL=60;M.QUARTER_SYMBOL=61;M.YEAR_SYMBOL=62;M.DEFAULT_SYMBOL=63;M.UNION_SYMBOL=64;M.SELECT_SYMBOL=65;M.ALL_SYMBOL=66;M.DISTINCT_SYMBOL=67;M.STRAIGHT_JOIN_SYMBOL=68;M.HIGH_PRIORITY_SYMBOL=69;M.SQL_SMALL_RESULT_SYMBOL=70;M.SQL_BIG_RESULT_SYMBOL=71;M.SQL_BUFFER_RESULT_SYMBOL=72;M.SQL_CALC_FOUND_ROWS_SYMBOL=73;M.LIMIT_SYMBOL=74;M.OFFSET_SYMBOL=75;M.INTO_SYMBOL=76;M.OUTFILE_SYMBOL=77;M.DUMPFILE_SYMBOL=78;M.PROCEDURE_SYMBOL=79;M.ANALYSE_SYMBOL=80;M.HAVING_SYMBOL=81;M.WINDOW_SYMBOL=82;M.AS_SYMBOL=83;M.PARTITION_SYMBOL=84;M.BY_SYMBOL=85;M.ROWS_SYMBOL=86;M.RANGE_SYMBOL=87;M.GROUPS_SYMBOL=88;M.UNBOUNDED_SYMBOL=89;M.PRECEDING_SYMBOL=90;M.INTERVAL_SYMBOL=91;M.CURRENT_SYMBOL=92;M.ROW_SYMBOL=93;M.BETWEEN_SYMBOL=94;M.AND_SYMBOL=95;M.FOLLOWING_SYMBOL=96;M.EXCLUDE_SYMBOL=97;M.GROUP_SYMBOL=98;M.TIES_SYMBOL=99;M.NO_SYMBOL=100;M.OTHERS_SYMBOL=101;M.WITH_SYMBOL=102;M.WITHOUT_SYMBOL=103;M.RECURSIVE_SYMBOL=104;M.ROLLUP_SYMBOL=105;M.CUBE_SYMBOL=106;M.ORDER_SYMBOL=107;M.ASC_SYMBOL=108;M.DESC_SYMBOL=109;M.FROM_SYMBOL=110;M.DUAL_SYMBOL=111;M.VALUES_SYMBOL=112;M.TABLE_SYMBOL=113;M.SQL_NO_CACHE_SYMBOL=114;M.SQL_CACHE_SYMBOL=115;M.MAX_STATEMENT_TIME_SYMBOL=116;M.FOR_SYMBOL=117;M.OF_SYMBOL=118;M.LOCK_SYMBOL=119;M.IN_SYMBOL=120;M.SHARE_SYMBOL=121;M.MODE_SYMBOL=122;M.UPDATE_SYMBOL=123;M.SKIP_SYMBOL=124;M.LOCKED_SYMBOL=125;M.NOWAIT_SYMBOL=126;M.WHERE_SYMBOL=127;M.QUALIFY_SYMBOL=128;M.OJ_SYMBOL=129;M.ON_SYMBOL=130;M.USING_SYMBOL=131;M.NATURAL_SYMBOL=132;M.INNER_SYMBOL=133;M.JOIN_SYMBOL=134;M.LEFT_SYMBOL=135;M.RIGHT_SYMBOL=136;M.OUTER_SYMBOL=137;M.CROSS_SYMBOL=138;M.LATERAL_SYMBOL=139;M.JSON_TABLE_SYMBOL=140;M.COLUMNS_SYMBOL=141;M.ORDINALITY_SYMBOL=142;M.EXISTS_SYMBOL=143;M.PATH_SYMBOL=144;M.NESTED_SYMBOL=145;M.EMPTY_SYMBOL=146;M.ERROR_SYMBOL=147;M.NULL_SYMBOL=148;M.USE_SYMBOL=149;M.FORCE_SYMBOL=150;M.IGNORE_SYMBOL=151;M.KEY_SYMBOL=152;M.INDEX_SYMBOL=153;M.PRIMARY_SYMBOL=154;M.IS_SYMBOL=155;M.TRUE_SYMBOL=156;M.FALSE_SYMBOL=157;M.UNKNOWN_SYMBOL=158;M.NOT_SYMBOL=159;M.XOR_SYMBOL=160;M.OR_SYMBOL=161;M.ANY_SYMBOL=162;M.MEMBER_SYMBOL=163;M.SOUNDS_SYMBOL=164;M.LIKE_SYMBOL=165;M.ESCAPE_SYMBOL=166;M.REGEXP_SYMBOL=167;M.DIV_SYMBOL=168;M.MOD_SYMBOL=169;M.MATCH_SYMBOL=170;M.AGAINST_SYMBOL=171;M.BINARY_SYMBOL=172;M.CAST_SYMBOL=173;M.ARRAY_SYMBOL=174;M.CASE_SYMBOL=175;M.END_SYMBOL=176;M.CONVERT_SYMBOL=177;M.COLLATE_SYMBOL=178;M.AVG_SYMBOL=179;M.BIT_AND_SYMBOL=180;M.BIT_OR_SYMBOL=181;M.BIT_XOR_SYMBOL=182;M.COUNT_SYMBOL=183;M.MIN_SYMBOL=184;M.MAX_SYMBOL=185;M.STD_SYMBOL=186;M.VARIANCE_SYMBOL=187;M.STDDEV_SAMP_SYMBOL=188;M.VAR_SAMP_SYMBOL=189;M.SUM_SYMBOL=190;M.GROUP_CONCAT_SYMBOL=191;M.SEPARATOR_SYMBOL=192;M.GROUPING_SYMBOL=193;M.ROW_NUMBER_SYMBOL=194;M.RANK_SYMBOL=195;M.DENSE_RANK_SYMBOL=196;M.CUME_DIST_SYMBOL=197;M.PERCENT_RANK_SYMBOL=198;M.NTILE_SYMBOL=199;M.LEAD_SYMBOL=200;M.LAG_SYMBOL=201;M.FIRST_VALUE_SYMBOL=202;M.LAST_VALUE_SYMBOL=203;M.NTH_VALUE_SYMBOL=204;M.FIRST_SYMBOL=205;M.LAST_SYMBOL=206;M.OVER_SYMBOL=207;M.RESPECT_SYMBOL=208;M.NULLS_SYMBOL=209;M.JSON_ARRAYAGG_SYMBOL=210;M.JSON_OBJECTAGG_SYMBOL=211;M.BOOLEAN_SYMBOL=212;M.LANGUAGE_SYMBOL=213;M.QUERY_SYMBOL=214;M.EXPANSION_SYMBOL=215;M.CHAR_SYMBOL=216;M.CURRENT_USER_SYMBOL=217;M.DATE_SYMBOL=218;M.INSERT_SYMBOL=219;M.TIME_SYMBOL=220;M.TIMESTAMP_SYMBOL=221;M.TIMESTAMP_LTZ_SYMBOL=222;M.TIMESTAMP_NTZ_SYMBOL=223;M.ZONE_SYMBOL=224;M.USER_SYMBOL=225;M.ADDDATE_SYMBOL=226;M.SUBDATE_SYMBOL=227;M.CURDATE_SYMBOL=228;M.CURTIME_SYMBOL=229;M.DATE_ADD_SYMBOL=230;M.DATE_SUB_SYMBOL=231;M.EXTRACT_SYMBOL=232;M.GET_FORMAT_SYMBOL=233;M.NOW_SYMBOL=234;M.POSITION_SYMBOL=235;M.SYSDATE_SYMBOL=236;M.TIMESTAMP_ADD_SYMBOL=237;M.TIMESTAMP_DIFF_SYMBOL=238;M.UTC_DATE_SYMBOL=239;M.UTC_TIME_SYMBOL=240;M.UTC_TIMESTAMP_SYMBOL=241;M.ASCII_SYMBOL=242;M.CHARSET_SYMBOL=243;M.COALESCE_SYMBOL=244;M.COLLATION_SYMBOL=245;M.DATABASE_SYMBOL=246;M.IF_SYMBOL=247;M.FORMAT_SYMBOL=248;M.MICROSECOND_SYMBOL=249;M.OLD_PASSWORD_SYMBOL=250;M.PASSWORD_SYMBOL=251;M.REPEAT_SYMBOL=252;M.REPLACE_SYMBOL=253;M.REVERSE_SYMBOL=254;M.ROW_COUNT_SYMBOL=255;M.TRUNCATE_SYMBOL=256;M.WEIGHT_STRING_SYMBOL=257;M.CONTAINS_SYMBOL=258;M.GEOMETRYCOLLECTION_SYMBOL=259;M.LINESTRING_SYMBOL=260;M.MULTILINESTRING_SYMBOL=261;M.MULTIPOINT_SYMBOL=262;M.MULTIPOLYGON_SYMBOL=263;M.POINT_SYMBOL=264;M.POLYGON_SYMBOL=265;M.LEVEL_SYMBOL=266;M.DATETIME_SYMBOL=267;M.TRIM_SYMBOL=268;M.LEADING_SYMBOL=269;M.TRAILING_SYMBOL=270;M.BOTH_SYMBOL=271;M.STRING_SYMBOL=272;M.SUBSTRING_SYMBOL=273;M.WHEN_SYMBOL=274;M.THEN_SYMBOL=275;M.ELSE_SYMBOL=276;M.SIGNED_SYMBOL=277;M.UNSIGNED_SYMBOL=278;M.DECIMAL_SYMBOL=279;M.JSON_SYMBOL=280;M.FLOAT_SYMBOL=281;M.FLOAT_SYMBOL_4=282;M.FLOAT_SYMBOL_8=283;M.SET_SYMBOL=284;M.SECOND_MICROSECOND_SYMBOL=285;M.MINUTE_MICROSECOND_SYMBOL=286;M.MINUTE_SECOND_SYMBOL=287;M.HOUR_MICROSECOND_SYMBOL=288;M.HOUR_SECOND_SYMBOL=289;M.HOUR_MINUTE_SYMBOL=290;M.DAY_MICROSECOND_SYMBOL=291;M.DAY_SECOND_SYMBOL=292;M.DAY_MINUTE_SYMBOL=293;M.DAY_HOUR_SYMBOL=294;M.YEAR_MONTH_SYMBOL=295;M.BTREE_SYMBOL=296;M.RTREE_SYMBOL=297;M.HASH_SYMBOL=298;M.REAL_SYMBOL=299;M.DOUBLE_SYMBOL=300;M.PRECISION_SYMBOL=301;M.NUMERIC_SYMBOL=302;M.NUMBER_SYMBOL=303;M.FIXED_SYMBOL=304;M.BIT_SYMBOL=305;M.BOOL_SYMBOL=306;M.VARYING_SYMBOL=307;M.VARCHAR_SYMBOL=308;M.VARCHAR2_SYMBOL=309;M.NATIONAL_SYMBOL=310;M.NVARCHAR_SYMBOL=311;M.NVARCHAR2_SYMBOL=312;M.NCHAR_SYMBOL=313;M.VARBINARY_SYMBOL=314;M.TINYBLOB_SYMBOL=315;M.BLOB_SYMBOL=316;M.CLOB_SYMBOL=317;M.BFILE_SYMBOL=318;M.RAW_SYMBOL=319;M.MEDIUMBLOB_SYMBOL=320;M.LONGBLOB_SYMBOL=321;M.LONG_SYMBOL=322;M.TINYTEXT_SYMBOL=323;M.TEXT_SYMBOL=324;M.MEDIUMTEXT_SYMBOL=325;M.LONGTEXT_SYMBOL=326;M.ENUM_SYMBOL=327;M.SERIAL_SYMBOL=328;M.GEOMETRY_SYMBOL=329;M.ZEROFILL_SYMBOL=330;M.BYTE_SYMBOL=331;M.UNICODE_SYMBOL=332;M.TERMINATED_SYMBOL=333;M.OPTIONALLY_SYMBOL=334;M.ENCLOSED_SYMBOL=335;M.ESCAPED_SYMBOL=336;M.LINES_SYMBOL=337;M.STARTING_SYMBOL=338;M.GLOBAL_SYMBOL=339;M.LOCAL_SYMBOL=340;M.SESSION_SYMBOL=341;M.VARIANT_SYMBOL=342;M.OBJECT_SYMBOL=343;M.GEOGRAPHY_SYMBOL=344;M.UNPIVOT_SYMBOL=345;M.WHITESPACE=346;M.INVALID_INPUT=347;M.UNDERSCORE_CHARSET=348;M.IDENTIFIER=349;M.NCHAR_TEXT=350;M.BACK_TICK_QUOTED_ID=351;M.DOUBLE_QUOTED_TEXT=352;M.SINGLE_QUOTED_TEXT=353;M.BRACKET_QUOTED_TEXT=354;M.BRACKET_QUOTED_NUMBER=355;M.CURLY_BRACES_QUOTED_TEXT=356;M.VERSION_COMMENT_START=357;M.MYSQL_COMMENT_START=358;M.SNOWFLAKE_COMMENT=359;M.VERSION_COMMENT_END=360;M.BLOCK_COMMENT=361;M.POUND_COMMENT=362;M.DASHDASH_COMMENT=363;kg.exports=M});var jO=b((I$,Hg)=>{var BG=z1(),WO=class WO extends BG.tree.ParseTreeListener{enterQuery(e){}exitQuery(e){}enterValues(e){}exitValues(e){}enterSelectStatement(e){}exitSelectStatement(e){}enterSelectStatementWithInto(e){}exitSelectStatementWithInto(e){}enterQueryExpression(e){}exitQueryExpression(e){}enterQueryExpressionBody(e){}exitQueryExpressionBody(e){}enterQueryExpressionParens(e){}exitQueryExpressionParens(e){}enterQueryPrimary(e){}exitQueryPrimary(e){}enterQuerySpecification(e){}exitQuerySpecification(e){}enterSubquery(e){}exitSubquery(e){}enterQuerySpecOption(e){}exitQuerySpecOption(e){}enterLimitClause(e){}exitLimitClause(e){}enterLimitOptions(e){}exitLimitOptions(e){}enterLimitOption(e){}exitLimitOption(e){}enterIntoClause(e){}exitIntoClause(e){}enterProcedureAnalyseClause(e){}exitProcedureAnalyseClause(e){}enterHavingClause(e){}exitHavingClause(e){}enterWindowClause(e){}exitWindowClause(e){}enterWindowDefinition(e){}exitWindowDefinition(e){}enterWindowSpec(e){}exitWindowSpec(e){}enterWindowSpecDetails(e){}exitWindowSpecDetails(e){}enterWindowFrameClause(e){}exitWindowFrameClause(e){}enterWindowFrameUnits(e){}exitWindowFrameUnits(e){}enterWindowFrameExtent(e){}exitWindowFrameExtent(e){}enterWindowFrameStart(e){}exitWindowFrameStart(e){}enterWindowFrameBetween(e){}exitWindowFrameBetween(e){}enterWindowFrameBound(e){}exitWindowFrameBound(e){}enterWindowFrameExclusion(e){}exitWindowFrameExclusion(e){}enterWithClause(e){}exitWithClause(e){}enterCommonTableExpression(e){}exitCommonTableExpression(e){}enterGroupByClause(e){}exitGroupByClause(e){}enterOlapOption(e){}exitOlapOption(e){}enterOrderClause(e){}exitOrderClause(e){}enterDirection(e){}exitDirection(e){}enterFromClause(e){}exitFromClause(e){}enterTableReferenceList(e){}exitTableReferenceList(e){}enterTableValueConstructor(e){}exitTableValueConstructor(e){}enterExplicitTable(e){}exitExplicitTable(e){}enterRowValueExplicit(e){}exitRowValueExplicit(e){}enterSelectOption(e){}exitSelectOption(e){}enterLockingClauseList(e){}exitLockingClauseList(e){}enterLockingClause(e){}exitLockingClause(e){}enterLockStrengh(e){}exitLockStrengh(e){}enterLockedRowAction(e){}exitLockedRowAction(e){}enterSelectItemList(e){}exitSelectItemList(e){}enterSelectItem(e){}exitSelectItem(e){}enterSelectAlias(e){}exitSelectAlias(e){}enterWhereClause(e){}exitWhereClause(e){}enterQualifyClause(e){}exitQualifyClause(e){}enterTableReference(e){}exitTableReference(e){}enterEscapedTableReference(e){}exitEscapedTableReference(e){}enterJoinedTable(e){}exitJoinedTable(e){}enterNaturalJoinType(e){}exitNaturalJoinType(e){}enterInnerJoinType(e){}exitInnerJoinType(e){}enterOuterJoinType(e){}exitOuterJoinType(e){}enterTableFactor(e){}exitTableFactor(e){}enterSingleTable(e){}exitSingleTable(e){}enterSingleTableParens(e){}exitSingleTableParens(e){}enterDerivedTable(e){}exitDerivedTable(e){}enterTableReferenceListParens(e){}exitTableReferenceListParens(e){}enterTableFunction(e){}exitTableFunction(e){}enterColumnsClause(e){}exitColumnsClause(e){}enterJtColumn(e){}exitJtColumn(e){}enterOnEmptyOrError(e){}exitOnEmptyOrError(e){}enterOnEmpty(e){}exitOnEmpty(e){}enterOnError(e){}exitOnError(e){}enterJtOnResponse(e){}exitJtOnResponse(e){}enterUnionOption(e){}exitUnionOption(e){}enterTableAlias(e){}exitTableAlias(e){}enterIndexHintList(e){}exitIndexHintList(e){}enterIndexHint(e){}exitIndexHint(e){}enterIndexHintType(e){}exitIndexHintType(e){}enterKeyOrIndex(e){}exitKeyOrIndex(e){}enterIndexHintClause(e){}exitIndexHintClause(e){}enterIndexList(e){}exitIndexList(e){}enterIndexListElement(e){}exitIndexListElement(e){}enterExpr(e){}exitExpr(e){}enterBoolPri(e){}exitBoolPri(e){}enterCompOp(e){}exitCompOp(e){}enterPredicate(e){}exitPredicate(e){}enterPredicateOperations(e){}exitPredicateOperations(e){}enterBitExpr(e){}exitBitExpr(e){}enterSimpleExpr(e){}exitSimpleExpr(e){}enterJsonOperator(e){}exitJsonOperator(e){}enterSumExpr(e){}exitSumExpr(e){}enterGroupingOperation(e){}exitGroupingOperation(e){}enterWindowFunctionCall(e){}exitWindowFunctionCall(e){}enterWindowingClause(e){}exitWindowingClause(e){}enterLeadLagInfo(e){}exitLeadLagInfo(e){}enterNullTreatment(e){}exitNullTreatment(e){}enterJsonFunction(e){}exitJsonFunction(e){}enterInSumExpr(e){}exitInSumExpr(e){}enterIdentListArg(e){}exitIdentListArg(e){}enterIdentList(e){}exitIdentList(e){}enterFulltextOptions(e){}exitFulltextOptions(e){}enterRuntimeFunctionCall(e){}exitRuntimeFunctionCall(e){}enterGeometryFunction(e){}exitGeometryFunction(e){}enterTimeFunctionParameters(e){}exitTimeFunctionParameters(e){}enterFractionalPrecision(e){}exitFractionalPrecision(e){}enterWeightStringLevels(e){}exitWeightStringLevels(e){}enterWeightStringLevelListItem(e){}exitWeightStringLevelListItem(e){}enterDateTimeTtype(e){}exitDateTimeTtype(e){}enterTrimFunction(e){}exitTrimFunction(e){}enterSubstringFunction(e){}exitSubstringFunction(e){}enterFunctionCall(e){}exitFunctionCall(e){}enterUdfExprList(e){}exitUdfExprList(e){}enterUdfExpr(e){}exitUdfExpr(e){}enterUnpivotClause(e){}exitUnpivotClause(e){}enterVariable(e){}exitVariable(e){}enterUserVariable(e){}exitUserVariable(e){}enterSystemVariable(e){}exitSystemVariable(e){}enterWhenExpression(e){}exitWhenExpression(e){}enterThenExpression(e){}exitThenExpression(e){}enterElseExpression(e){}exitElseExpression(e){}enterExprList(e){}exitExprList(e){}enterCharset(e){}exitCharset(e){}enterNotRule(e){}exitNotRule(e){}enterNot2Rule(e){}exitNot2Rule(e){}enterInterval(e){}exitInterval(e){}enterIntervalTimeStamp(e){}exitIntervalTimeStamp(e){}enterExprListWithParentheses(e){}exitExprListWithParentheses(e){}enterExprWithParentheses(e){}exitExprWithParentheses(e){}enterSimpleExprWithParentheses(e){}exitSimpleExprWithParentheses(e){}enterOrderList(e){}exitOrderList(e){}enterOrderExpression(e){}exitOrderExpression(e){}enterIndexType(e){}exitIndexType(e){}enterDataType(e){}exitDataType(e){}enterNchar(e){}exitNchar(e){}enterFieldLength(e){}exitFieldLength(e){}enterFieldOptions(e){}exitFieldOptions(e){}enterCharsetWithOptBinary(e){}exitCharsetWithOptBinary(e){}enterAscii(e){}exitAscii(e){}enterUnicode(e){}exitUnicode(e){}enterWsNumCodepoints(e){}exitWsNumCodepoints(e){}enterTypeDatetimePrecision(e){}exitTypeDatetimePrecision(e){}enterCharsetName(e){}exitCharsetName(e){}enterCollationName(e){}exitCollationName(e){}enterCollate(e){}exitCollate(e){}enterCharsetClause(e){}exitCharsetClause(e){}enterFieldsClause(e){}exitFieldsClause(e){}enterFieldTerm(e){}exitFieldTerm(e){}enterLinesClause(e){}exitLinesClause(e){}enterLineTerm(e){}exitLineTerm(e){}enterUsePartition(e){}exitUsePartition(e){}enterColumnInternalRefList(e){}exitColumnInternalRefList(e){}enterTableAliasRefList(e){}exitTableAliasRefList(e){}enterPureIdentifier(e){}exitPureIdentifier(e){}enterIdentifier(e){}exitIdentifier(e){}enterIdentifierList(e){}exitIdentifierList(e){}enterIdentifierListWithParentheses(e){}exitIdentifierListWithParentheses(e){}enterQualifiedIdentifier(e){}exitQualifiedIdentifier(e){}enterJsonPathIdentifier(e){}exitJsonPathIdentifier(e){}enterDotIdentifier(e){}exitDotIdentifier(e){}enterUlong_number(e){}exitUlong_number(e){}enterReal_ulong_number(e){}exitReal_ulong_number(e){}enterUlonglong_number(e){}exitUlonglong_number(e){}enterReal_ulonglong_number(e){}exitReal_ulonglong_number(e){}enterLiteral(e){}exitLiteral(e){}enterStringList(e){}exitStringList(e){}enterTextStringLiteral(e){}exitTextStringLiteral(e){}enterTextString(e){}exitTextString(e){}enterTextLiteral(e){}exitTextLiteral(e){}enterNumLiteral(e){}exitNumLiteral(e){}enterBoolLiteral(e){}exitBoolLiteral(e){}enterNullLiteral(e){}exitNullLiteral(e){}enterTemporalLiteral(e){}exitTemporalLiteral(e){}enterFloatOptions(e){}exitFloatOptions(e){}enterPrecision(e){}exitPrecision(e){}enterTextOrIdentifier(e){}exitTextOrIdentifier(e){}enterParentheses(e){}exitParentheses(e){}enterEqual(e){}exitEqual(e){}enterVarIdentType(e){}exitVarIdentType(e){}enterIdentifierKeyword(e){}exitIdentifierKeyword(e){}};c(WO,"SQLSelectParserListener");var KO=WO;Hg.exports=KO});var Gg=b((x$,Vg)=>{var L=z1(),R=jO(),MG=["\u608B\uA72A\u8133\uB9ED\u417C\u3BE7\u7786","\u5964\u016D\u09EB  ","   \x07 ",`\x07\b \b  + +\v \v`,"\f \f\r \r  ","    ","   ","    ","\x1B \x1B  ",'   ! !" "#'," #$ $% %& &' '( () )","* *+ +, ,- -. ./ /0 0","1 12 23 34 45 56 67 7","8 89 9: :; ;< <= => >","? ?@ @A AB BC CD DE E","F FG GH HI IJ JK KL L","M MN NO OP PQ QR RS S","T TU UV VW WX XY YZ Z","[ [\\ \\] ]^ ^_ _` `a a","b bc cd de ef fg gh h","i ij jk kl lm mn no o","p pq qr rs st tu uv v","w wx xy yz z{ {| |} }","~ ~\x7F \x7F\x80 \x80\x81 \x81","\x82 \x82\x83 \x83\x84 \x84\x85 ","\x85\x86 \x86\x87 \x87\x88 \x88","\x89 \x89\x8A \x8A\x8B \x8B\x8C ","\x8C\x8D \x8D\x8E \x8E\x8F \x8F","\x90 \x90\x91 \x91\x92 \x92\x93 ","\x93\x94 \x94\x95 \x95\x96 \x96","\x97 \x97\x98 \x98\x99 \x99\x9A ","\x9A\x9B \x9B\x9C \x9C\x9D \x9D","\x9E \x9E\x9F \x9F\xA0 \xA0\xA1 ","\xA1\xA2 \xA2\xA3 \xA3\xA4 \xA4","\xA5 \xA5\xA6 \xA6\xA7 \xA7\xA8 ","\xA8\xA9 \xA9\xAA \xAA\xAB \xAB","\xAC \xAC\xAD \xAD\xAE \xAE",`\u015E +`,`\u0163 +\u0166 +`,`\u016A +`,`\u016F +\x07\u0171 +\f`,`\u0174\v\u0178 +`,`\u017C +`,"",`\u0185 +`,`\u018A +\u018D +`,`\u0191 +\u0194 +`,`\u0198 +`,`\u019B +\u019D +`,`\u01A0 +\x07\x07\x07\x07`,`\x07\u01A6 +\x07\x07\x07\x07\u01AA +\x07`,`\x07\u01AC +\x07\x07\x07\x07\u01B0`,` +\x07\x07\x07\x07\u01B4 +\x07\x07\x07`,`\u01B6 +\x07\f\x07\x07\u01B9\v\x07\b\b`,`\b\b\b\u01BF +\b\b\u01C1 +\b\b\b`,`    \u01C8 +  + +\x07 +\u01CC`,` + +\f + +\u01CF\v + + + +\u01D3 + +`,` + +\u01D6 + + + +\u01D9 + + +\x07 +\u01DC`,` + +\f + +\u01DF\v + + +\u01E2 + + +`,` +\u01E5 + + + +\u01E8 + + + +\u01EB + +`,`\v\v\v\u01EF +\v\f\f\f`,"\f\f\f\f\f\f\f\f",`\f\f\f\f\u01FF +\f\r\r\r`,`\u0207 +`,`\u020B +`,`\u0211 +\u0214`,` +\u0217 +`,`\u021D +`,`\u0222 +\x07\u0224 +`,`\f\u0227\v\u0229 +`,"",`\u0231 +\u0233 +`,"",`\x07\u023E +\f\u0241\v`,"",`\u024C +`,`\u0251 +`,`\u0254 +\u0257 +`,`\u025C +`,`\u0262 +`,"","",`\u0272 +\x1B`,"\x1B\x1B\x1B\x1B","","\u0286",` +`,`\u028F +`,`\u0293 +`,`\x07\u0298 +\f\u029B\v`,`\u029F +`,`     \u02A8 + !`,`!!!!\u02AE +!""""`,`##$$$$\u02B9 +$%%%\x07`,`%\u02BE +%\f%%\u02C1\v%&&&&\x07`,`&\u02C7 +&\f&&\u02CA\v&'''(`,`(((\u02D2 +((())))`,`)))\u02DC +)**\u02DF +*\r**\u02E0`,`+++++\u02E7 ++++\u02EA ++`,`+++++\u02F0 ++,,--`,`--\u02F7 +-...\u02FB +...\x07`,`.\u02FF +.\f..\u0302\v.///\u0306 +/`,`//\u0309 +////\u030D +//\u030F +/`,`00\u0312 +0000\u0316 +011`,`122233333\u0322 +3`,`3333\u0327 +33\x073\u032A +3\f33\u032D`,`\v344\x074\u0331 +4\f44\u0334\v45`,`555555\u033C +555`,`55555\u0344 +55555\u0349`,` +5666\u034D +66666`,`6\u0353 +666\u0356 +677\u0359 +77`,`77\u035D +7888\u0361 +888`,`999999\u036A +9:::\u036E`,` +:::\u0371 +:::\u0374 +:;;`,`;;\u0379 +;;;<<<\u037F +<`,`<<\u0382 +<<<<<\u0387 +<<`,`<\u038A +<<\u038C +<====\u0391 +=`,"==>>>>>>>>",`>\u039D +>?????\x07?\u03A4 +?\f?`,"?\u03A7\v???@@@@@",`@@@\u03B2 +@@@\u03B5 +@@@`,`@@\u03BA +@@@@@@@\u03C1 +`,`@AAA\u03C5 +AAAA\u03C9 +A`,`A\u03CB +ABBBBCCCC`,`DDDDD\u03D9 +DEEFF\u03DE`,` +FFFGGG\x07G\u03E5 +G\fGG\u03E8`,`\vGHHHH\u03ED +HHHH`,`HHHHH\u03F6 +HHHH\u03FA +`,`HHHH\u03FE +HIIJJK`,`KKKKKK\u040A +KLLL\x07`,`L\u040F +L\fLL\u0412\vLMMM\u0416 +M`,`NNNNN\u041C +NNN\u041F +N`,`NNN\u0423 +NNNNNNN`,`NNN\x07N\u042E +N\fNN\u0431\vNO`,`OOOOOO\u0439 +OOOO`,`OOOOOOO\x07O\u0445 +O\fO`,`O\u0448\vOPPQQQ\u044E +QQ`,`QQQ\u0453 +QQQQQQQ\u045A`,` +QRRRRRRR\u0462 +R`,"RRRRRRRRRR\u046D",` +RRRR\u0471 +RSSSS`,"SSSSSSSSSS","SSSSSSSSSS",`SS\u048C +S\x07S\u048E +S\fSS\u0491\vST`,`TTTTT\u0498 +TTTT\u049C +`,"TTTTTTTTTT",`TTTTT\u04AB +TTTTT`,`TT\u04B2 +TTTTTTTT`,`TTTTTT\u04C0 +TTTT`,`TTTTTTTT\u04CC +TT`,`TTTT\u04D2 +TTTTT\u04D7 +`,`T\rTT\u04D8TT\u04DC +TTTT`,"TTTTTTTTTT","TTTTTTTTTT","TTTTTTTTTT",`T\u04FF +TTTTTTTTT`,`T\x07T\u050A +T\fTT\u050D\vTUUU`,`U\u0512 +UVVVV\u0517 +VVV`,`VV\u051C +VVVVVVV\u0523 +`,`VVVVVV\u0529 +VVVV`,`V\u052E +VVVVV\u0533 +VVV`,`VVV\u0539 +VVVV\u053D +VV`,`VVV\u0542 +VVVVV\u0547 +V`,`VVVV\u054C +VVVVV\u0551 +`,`VVVVVVV\u0558 +VVV`,`VVVV\u055F +VVVVVV`,`V\u0566 +VVVVVVV\u056D +V`,`VVVV\u0572 +VVVVV\u0577 +`,`VVVVV\u057C +VVVV\u0580 +`,`VVVV\u0584 +VVVV\u0588 +V`,`V\u058A +VWWWWWXXX`,"XXXXXXXXXX\u059D",` +XXXX\u05A1 +XXXXX`,`XX\u05A8 +XXXXXXXX`,`XXXX\u05B4 +XXX\u05B7 +XX`,`XX\u05BB +XYYYY\u05C0 +YZ`,`ZZZ\u05C5 +ZZZZ\u05C9 +Z[`,`[[\\\\\\\\\\\\\u05D3 +\\`,`\\\\\\\\\\\\\\\\\u05DC +\\`,`\\\u05DE +\\]]\u05E1 +]]]^`,`^^^^^\u05EA +^___\x07_\u05EF`,"\n_\f__\u05F2\v_`````","``````\u05FE\n````","`\u0603\n`aaaaaa\u060A\na",`aaaaa\u0610 +aaaaa`,"aaaaaaaaaa",`aaaaaaaaa\u0628 +a\r`,"aa\u0629aaaaaaa","aaaaaaaaaa","aaaaaaaaaa",`aaa\u0649 +aaaaaaa`,"aaaaaaaaaa",`aaa\u065D +aaaaaa\u0663 +`,`aaaa\u0667 +aaaaaa`,"aaaaaaaaaa","aaaaaaaaaa",`a\u0682 +aaaaaaaaa`,`aaa\u068E +aaaaaaa`,`aaaaaa\u069B +aaaa\u069F`,` +aaaa\u06A3 +aaaaa`,"aaaaaaaaaa","aaaaaaaaaa",`aaa\u06BF +aaaaaaa`,"aaaaaaaaaa","aaaaaaaaaa","aaaaaaaaaa","aaaaaaaaaa",`aaaaaaa\u06F5 +aaa`,`aaaaaaa\u06FF +aaa\u0702`,` +aaaaaaaaaa`,`aa\u070E +aaaaa\u0713 +ab`,"bbbbbbbbbb\u071F",` +bbbbbbbbbb`,"bbbbbbbbbb\u0733",` +bccc\u0737 +cccdd`,`eeeeeeee\x07e\u0745 +e\f`,`ee\u0748\vee\u074A +effff\u074F`,` +fff\u0752 +fgghhh`,`hhh\u075B +hhhh\u075F +hh`,`hhhh\u0765 +hhhhhh\u076B`,` +hhhh\u076F +hhhii`,`iiiiii\u077A +iiii`,`ii\u0780 +ii\u0782 +iiijj`,`jj\u0789 +jjjjjjj\u0790 +`,`jjj\u0793 +jj\u0795 +jjjj\u0799`,` +jkkk\x07k\u079E +k\fkk\u07A1\vk`,`lll\u07A5 +lll\u07A8 +lmm`,`mmmm\u07AF +mmmmm\x07m\u07B5`,` +m\fmm\u07B8\vmnnn\u07BC +no`,`ooo\u07C1 +oppp\u07C5 +pp`,`pp\u07C9 +pqqqrrrs`,`ssttt\x07t\u07D7 +t\ftt\u07DA\v`,`tuuuu\u07DF +uvvww`,`xxx\u07E7 +xyyzzzz`,"{{{{||||}}",`}\x07}\u07FA +}\f}}\u07FD\v}~~~\u0801`,` +~\x7F\x7F\x80\x80\x80\u0807`,` +\x80\x80\x80\u080A +\x80\x80\x80`,`\x80\x80\u080F +\x80\x80\u0811 +\x80`,`\x80\x80\u0814 +\x80\x80\x80\u0817 +\x80`,`\x80\x80\x80\u081B +\x80\x80`,`\x80\u081E +\x80\x80\x80\x80\u0822 +\x80`,`\x80\x80\x80\x80\u0827 +\x80`,`\x80\x80\u082A +\x80\x80\x80\x80`,`\u082E +\x80\x80\x80\x80\x80`,`\x80\x80\u0835 +\x80\x80\x80\x80`,"\x80\x80\x80\x80\x80\x80",`\x80\x80\x80\x80\x80\u0844 +`,`\x80\x80\x80\x80\u0848 +\x80\x80`,`\x80\x80\x80\x80\u084E +\x80`,`\x80\x80\u0851 +\x80\x80\x80\x80`,`\x80\u0856 +\x80\x80\x80\x80\u085A`,` +\x80\x80\x80\x80\u085E +\x80\x80`,`\x80\x80\u0862 +\x80\x80\x80`,`\x80\x80\x80\x80\x80\u086A +\x80`,"\x80\x80\x80\x80\x80\x80",`\x80\u0872 +\x80\x80\x80\x80`,`\x80\x80\x80\u0879 +\x80\x80\x80`,`\x80\u087D +\x80\x80\x80\x80`,`\x80\x80\x80\x80\x80\u0886 +\x80`,`\x80\x80\u0889 +\x80\x80\x80`,"\x80\x80\x80\x80\x80\x80",`\x80\u0893 +\x80\x80\x80\u0896 +\x80\x80`,`\x80\x80\u089A +\x80\x80\x80`,`\x80\u089E +\x80\x80\x80\u08A1 +\x80\x80`,`\x80\x80\u08A5 +\x80\x80\x80`,`\x80\u08A9 +\x80\x80\x80\x80\x80`,`\u08AE +\x80\x80\x80\x80\x80\u08B3`,` +\x80\x80\x80\x80\x80\x80`,"\x80\x80\x80\x80\x80\x80",`\x07\x80\u08C0 +\x80\f\x80\x80\u08C3\v\x80`,`\x80\u08C5 +\x80\x80\x80\x80\x80`,`\x07\x80\u08CB +\x80\f\x80\x80\u08CE\v\x80`,`\x80\u08D0 +\x80\x80\x80\x80\u08D4 +\x80`,`\x80\u08D6 +\x80\x81\x81\x81`,`\x81\u08DB +\x81\x82\x82\x82\x82`,`\u08E0 +\x82\x82\x82\u08E3 +\x82\x82`,`\x82\x83\x83\u08E8 +\x83\r\x83\x83\u08E9`,"\x84\x84\x84\x84\x84\x84",`\x84\u08F2 +\x84\x84\x84\x84`,`\x84\x84\u08F8 +\x84\x84\u08FA +\x84\x85`,`\x85\x85\u08FE +\x85\x85\x85`,`\x85\u0902 +\x85\x86\x86\x86\u0906 +\x86`,`\x86\x86\x86\u090A +\x86\x87`,"\x87\x87\x87\x88\x88\x88",`\x88\x89\x89\x89\x89\u0917 +\x89`,`\x8A\x8A\x8A\x8A\u091C +\x8A`,"\x8B\x8B\x8B\x8C\x8C\x8C",`\x8D\x8D\x8D\u0926 +\x8D\r\x8D\x8D\u0927`,`\x8E\x8E\x8E\x8E\x8E\u092E +`,"\x8E\x8E\x8E\x8E\x8E\x8E",`\x8E\x8E\u0936 +\x8E\x8F\x8F\x8F`,`\u093A +\x8F\r\x8F\x8F\u093B\x90\x90`,"\x90\x90\x91\x91\x91\x92",`\x92\x92\x92\x07\x92\u0949 +\x92\f\x92`,"\x92\u094C\v\x92\x92\x92\x93\x93",`\x93\x07\x93\u0953 +\x93\f\x93\x93\u0956\v`,"\x93\x94\x94\x95\x95\x95\u095C",` +\x95\x96\x96\x96\x07\x96\u0961 +\x96`,"\f\x96\x96\u0964\v\x96\x97\x97","\x97\x97\x98\x98\x98\x07\x98\u096D",` +\x98\f\x98\x98\u0970\v\x98\x98\x98`,`\x98\u0974 +\x98\x99\x99\x99`,`\x99\x99\x99\x07\x99\u097C +\x99\f\x99`,`\x99\u097F\v\x99\x99\x99\x99\u0983 +`,`\x99\x99\x99\x99\u0987 +\x99\x99`,`\u0989 +\x99\x9A\x9A\x9A\x9B`,"\x9B\x9C\x9C\x9D\x9D\x9E","\x9E\x9F\x9F\x9F\x9F\x9F",`\x9F\x9F\u099C +\x9F\x9F\x9F\u099F +\x9F`,`\xA0\xA0\xA0\xA0\x07\xA0\u09A5 +`,"\xA0\f\xA0\xA0\u09A8\v\xA0\xA0\xA0","\xA1\xA1\xA2\xA2\xA2\xA2",`\u09B1 +\xA2\xA3\xA3\u09B4 +\xA3\xA3`,`\xA3\xA3\u09B8 +\xA3\xA3\x07\xA3\u09BB +\xA3`,"\f\xA3\xA3\u09BE\v\xA3\xA4\xA4","\xA5\xA5\xA6\xA6\xA7\xA7",`\xA7\xA7\xA7\xA7\xA7\u09CC +\xA7`,`\xA8\xA8\xA8\u09D0 +\xA8\xA9`,"\xA9\xA9\xA9\xA9\xA9\xAA",`\xAA\xAA\u09DA +\xAA\xAB\xAB\xAB`,"\xAC\xAC\xAD\xAD\xAD\xAD",`\xAD\xAD\xAD\u09E7 +\xAD\xAE`,"\xAE\xAE\x9A\x9C\xA4\xA6\xAF",`\b +\f `,'"$&(*,.02468:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~\x80\x82\x84',"\x86\x88\x8A\x8C\x8E\x90\x92\x94\x96\x98\x9A\x9C","\x9E\xA0\xA2\xA4\xA6\xA8\xAA\xAC\xAE\xB0\xB2\xB4","\xB6\xB8\xBA\xBC\xBE\xC0\xC2\xC4\xC6\xC8\xCA\xCC","\xCE\xD0\xD2\xD4\xD6\xD8\xDA\xDC\xDE\xE0\xE2\xE4","\xE6\xE8\xEA\xEC\xEE\xF0\xF2\xF4\xF6\xF8\xFA\xFC","\xFE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114","\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C","\u012E\u0130\u0132\u0134\u0136\u0138\u013A\u013C\u013E\u0140\u0142\u0144","\u0146\u0148\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A","7MM,,00XZ","no{{}}\x89\x8A\x87\x87\x8C","\x8CDEUU\x98\x99","\x9A\x9B\x9E\xA0","aa\xA3\xA3DD\xA4\xA4",` +\v\xAA\xAB`,"\v\f\v\f","&'\xB6\xB8\xC4\xC8","\xCA\xCB\xCC\xCD\xCF\xD0","\x99\x99\xD2\xD2\xE4\xE5\xE8","\xE9\xEF\xF0\xDC\xDC\xDE\xDF\u010D","\u010D\u011F\u01299@\xFB\xFB","\u012A\u012C38\u0119\u0119\u0130\u0131\u0119","\u0119\u011B\u011D\u0130\u0130\u0132\u0132\xD6\xD6\u0134","\u0134\xDA\xDA\u0112\u0112\u0136\u0137\u0146\u0146","\u0142\u0143\u0105\u010B\u014B\u014B\u0117","\u0118\u014C\u014C\u014F\u014F\u0154\u0154\u015E","\u015F\u0161\u0164\u0166\u0166","..02..0002./\u0162","\u0163\x9E\x9F++\x96\x96","3\x81\x83\u015A\u0B4E\u015D","\u0169\u017B",`\b\u0189 +\u018C`,"\f\u01AB\u01BA","\u01C7\u01C9","\u01EE\u01FE","\u0200\u0203","\u020A\u020C",' \u022A"\u0236',"$\u0239&\u0242","(\u0246*\u024B",",\u0258.\u025D0\u0261","2\u02714\u0273","6\u02858\u0287",":\u0290<\u029C",">\u02A3@\u02AD","B\u02AFD\u02B3F\u02B5","H\u02BAJ\u02C2","L\u02CBN\u02CE","P\u02DBR\u02DE","T\u02EFV\u02F1","X\u02F6Z\u02FA\\\u030E","^\u0311`\u0317","b\u031Ad\u0326","f\u032Eh\u0348","j\u0355l\u035C","n\u035Ep\u0369r\u036B","t\u0375v\u038B","x\u038Dz\u0394","|\u039E~\u03C0","\x80\u03CA\x82\u03CC","\x84\u03D0\x86\u03D8","\x88\u03DA\x8A\u03DD","\x8C\u03E1\x8E\u03FD","\x90\u03FF\x92\u0401","\x94\u0403\x96\u040B","\x98\u0415\x9A\u0422","\x9C\u0432\x9E\u0449","\xA0\u044B\xA2\u0470","\xA4\u0472\xA6\u04FE","\xA8\u050E\xAA\u0589","\xAC\u058B\xAE\u05BA","\xB0\u05BC\xB2\u05C1","\xB4\u05CA\xB6\u05DD","\xB8\u05E0\xBA\u05E9","\xBC\u05EB\xBE\u0602","\xC0\u0712\xC2\u0732","\xC4\u0734\xC6\u073A","\xC8\u073C\xCA\u074B","\xCC\u0753\xCE\u0755","\xD0\u0772\xD2\u0798","\xD4\u079A\xD6\u07A2","\xD8\u07A9\xDA\u07BB","\xDC\u07C0\xDE\u07C2","\xE0\u07CA\xE2\u07CD","\xE4\u07D0\xE6\u07D3","\xE8\u07DE\xEA\u07E0","\xEC\u07E2\xEE\u07E6","\xF0\u07E8\xF2\u07EA","\xF4\u07EE\xF6\u07F2","\xF8\u07F6\xFA\u07FE","\xFC\u0802\xFE\u08D5","\u0100\u08DA\u0102\u08DC","\u0104\u08E7\u0106\u08F9","\u0108\u0901\u010A\u0909","\u010C\u090B\u010E\u090F","\u0110\u0916\u0112\u091B","\u0114\u091D\u0116\u0920","\u0118\u0923\u011A\u0935","\u011C\u0937\u011E\u093D","\u0120\u0941\u0122\u0944","\u0124\u094F\u0126\u0957","\u0128\u095B\u012A\u095D","\u012C\u0965\u012E\u0969","\u0130\u0975\u0132\u098A","\u0134\u098D\u0136\u098F","\u0138\u0991\u013A\u0993","\u013C\u099E\u013E\u09A0","\u0140\u09AB\u0142\u09B0","\u0144\u09B7\u0146\u09BF","\u0148\u09C1\u014A\u09C3","\u014C\u09CB\u014E\u09CF","\u0150\u09D1\u0152\u09D9","\u0154\u09DB\u0156\u09DE","\u0158\u09E6\u015A\u09E8","\u015C\u015E:\u015D\u015C","\u015D\u015E\u015E\u015F","\u015F\u0165\u0160\u0162\x07\x1B","\u0161\u0163\x07\u0162\u0161","\u0162\u0163\u0163\u0166","\u0164\u0166\x07\u0165\u0160","\u0165\u0164\u0166","\u0167\u016A\x9AN\u0168\u016A\x07A","\u0169\u0167\u0169\u0168","\u016A\u0172\u016B\u016E\x07","\u016C\u016F\x9AN\u016D\u016F\x07A\u016E","\u016C\u016E\u016D\u016F","\u0171\u0170\u016B\u0171","\u0174\u0172\u0170\u0172","\u0173\u0173\u0174",`\u0172\u0175\u0177 +\u0176`,"\u0178R*\u0177\u0176\u0177\u0178","\u0178\u017C\u0179\u017C","\b\u017A\u017C\b\u017B\u0175","\u017B\u0179\u017B\u017A","\u017C\x07\u017D\u017E\x07","\u017E\u017F\b\u017F\u0180\x07","\u0180\u018A\u0181\u0182",` +\u0182\u0184\u0183\u0185`,"R*\u0184\u0183\u0184\u0185","\u0185\u018A\u0186\u0187R","*\u0187\u0188\u0188\u018A","\u0189\u017D\u0189\u0181","\u0189\u0186\u018A ","\u018B\u018D:\u018C\u018B","\u018C\u018D\u018D\u019C",'\u018E\u0190\f\x07\u018F\u0191B"',"\u0190\u018F\u0190\u0191","\u0191\u0193\u0192\u0194\r","\u0193\u0192\u0193\u0194","\u0194\u019D\u0195\u0197\b",'\u0196\u0198B"\u0197\u0196\u0197',"\u0198\u0198\u019A\u0199","\u019B\r\u019A\u0199\u019A","\u019B\u019B\u019D\u019C","\u018E\u019C\u0195\u019D","\u019F\u019E\u01A0 \u019F","\u019E\u019F\u01A0\u01A0","\v\u01A1\u01AC \u01A2","\u01A3\b\u01A3\u01A5\x07B\u01A4\u01A6","\x88E\u01A5\u01A4\u01A5\u01A6","\u01A6\u01A9\u01A7\u01AA"," \u01A8\u01AA\b\u01A9\u01A7","\u01A9\u01A8\u01AA\u01AC","\u01AB\u01A1\u01AB\u01A2","\u01AC\u01B7\u01AD\u01AF\x07","B\u01AE\u01B0\x88E\u01AF\u01AE","\u01AF\u01B0\u01B0\u01B3","\u01B1\u01B4 \u01B2\u01B4","\b\u01B3\u01B1\u01B3\u01B2","\u01B4\u01B6\u01B5\u01AD","\u01B6\u01B9\u01B7\u01B5","\u01B7\u01B8\u01B8\r","\u01B9\u01B7\u01BA\u01C0\x07",`\u01BB\u01C1\b\u01BC\u01BE +`,"\u01BD\u01BFR*\u01BE\u01BD","\u01BE\u01BF\u01BF\u01C1","\u01C0\u01BB\u01C0\u01BC","\u01C1\u01C2\u01C2\u01C3\x07",`\u01C3\u01C4\u01C8 +`,"\u01C5\u01C8J&\u01C6\u01C8L'\u01C7\u01C4","\u01C7\u01C5\u01C7\u01C6","\u01C8\u01C9\u01CD\x07","C\u01CA\u01CCP)\u01CB\u01CA","\u01CC\u01CF\u01CD\u01CB","\u01CD\u01CE\u01CE\u01D0","\u01CF\u01CD\u01D0\u01D2Z.","\u01D1\u01D3\u01D2\u01D1","\u01D2\u01D3\u01D3\u01D5","\u01D4\u01D6F$\u01D5\u01D4\u01D5","\u01D6\u01D6\u01D8\u01D7","\u01D9`1\u01D8\u01D7\u01D8\u01D9","\u01D9\u01DD\u01DA\u01DC","\xD8m\u01DB\u01DA\u01DC\u01DF","\u01DD\u01DB\u01DD\u01DE","\u01DE\u01E1\u01DF\u01DD","\u01E0\u01E2b2\u01E1\u01E0","\u01E1\u01E2\u01E2\u01E4","\u01E3\u01E5> \u01E4\u01E3","\u01E4\u01E5\u01E5\u01E7",'\u01E6\u01E8"\u01E7\u01E6',"\u01E7\u01E8\u01E8\u01EA","\u01E9\u01EB$\u01EA\u01E9","\u01EA\u01EB\u01EB","\u01EC\u01EF\u01ED\u01EF","\b\u01EE\u01EC\u01EE\u01ED","\u01EF\u01F0\u01FF\x07D","\u01F1\u01F2\x07E\u01F2\u01F3\x07\x84","\u01F3\u01F4\x07\u01F4\u01F5\u012E","\x98\u01F5\u01F6\x07\u01F6\u01FF","\u01F7\u01FF\x07E\u01F8\u01FF\x07F","\u01F9\u01FF\x07G\u01FA\u01FF\x07H","\u01FB\u01FF\x07I\u01FC\u01FF\x07J\u01FD","\u01FF\x07K\u01FE\u01F0\u01FE","\u01F1\u01FE\u01F7\u01FE","\u01F8\u01FE\u01F9\u01FE","\u01FA\u01FE\u01FB\u01FE","\u01FC\u01FE\u01FD\u01FF","\u0200\u0201\x07L\u0201","\u0202\u0202\u0203","\u0206\u0204\u0205 \u0205","\u0207\u0206\u0204\u0206","\u0207\u0207\x1B\u0208","\u020B\u0128\x95\u0209\u020B \u020A","\u0208\u020A\u0209\u020B","\u020C\u0228\x07N\u020D","\u020E\x07O\u020E\u0210\u0140\xA1\u020F","\u0211\u0116\x8C\u0210\u020F\u0210","\u0211\u0211\u0213\u0212","\u0214\u0118\x8D\u0213\u0212\u0213","\u0214\u0214\u0216\u0215","\u0217\u011C\x8F\u0216\u0215\u0216","\u0217\u0217\u0229\u0218","\u0219\x07P\u0219\u0229\u0140\xA1\u021A","\u021D\u0152\xAA\u021B\u021D\xDCo\u021C","\u021A\u021C\u021B\u021D","\u0225\u021E\u0221\x07\u021F","\u0222\u0152\xAA\u0220\u0222\xDCo\u0221","\u021F\u0221\u0220\u0222","\u0224\u0223\u021E\u0224","\u0227\u0225\u0223\u0225","\u0226\u0226\u0229\u0227","\u0225\u0228\u020D\u0228","\u0218\u0228\u021C\u0229","\u022A\u022B\x07Q\u022B","\u022C\x07R\u022C\u0232\x07\u022D","\u0230\x070\u022E\u022F\x07\u022F","\u0231\x070\u0230\u022E\u0230","\u0231\u0231\u0233\u0232","\u022D\u0232\u0233\u0233","\u0234\u0234\u0235\x07\u0235","!\u0236\u0237\x07S\u0237\u0238","\x9AN\u0238#\u0239\u023A\x07","T\u023A\u023F&\u023B\u023C\x07","\u023C\u023E&\u023D\u023B","\u023E\u0241\u023F\u023D","\u023F\u0240\u0240%","\u0241\u023F\u0242\u0243\u0128","\x95\u0243\u0244\x07U\u0244\u0245(","\u0245'\u0246\u0247\x07","\u0247\u0248*\u0248\u0249\x07","\u0249)\u024A\u024C\u0128\x95","\u024B\u024A\u024B\u024C","\u024C\u0250\u024D\u024E\x07V","\u024E\u024F\x07W\u024F\u0251\xF8}","\u0250\u024D\u0250\u0251",'\u0251\u0253\u0252\u0254B"\u0253',"\u0252\u0253\u0254\u0254","\u0256\u0255\u0257,\u0256","\u0255\u0256\u0257\u0257","+\u0258\u0259.\u0259\u025B","0\u025A\u025C8\u025B\u025A","\u025B\u025C\u025C-","\u025D\u025E \u025E/","\u025F\u02622\u0260\u02624\x1B","\u0261\u025F\u0261\u0260","\u02621\u0263\u0264\x07[","\u0264\u0272\x07\\\u0265\u0266\u0138\x9D","\u0266\u0267\x07\\\u0267\u0272","\u0268\u0269\x07,\u0269\u0272\x07\\\u026A","\u026B\x07]\u026B\u026C\x9AN\u026C\u026D","\xEEx\u026D\u026E\x07\\\u026E\u0272","\u026F\u0270\x07^\u0270\u0272\x07","_\u0271\u0263\u0271\u0265","\u0271\u0268\u0271\u026A","\u0271\u026F\u02723","\u0273\u0274\x07`\u0274\u0275","6\u0275\u0276\x07a\u0276\u02776","\u02775\u0278\u02862","\u0279\u027A\x07[\u027A\u0286\x07b\u027B","\u027C\u0138\x9D\u027C\u027D\x07b\u027D","\u0286\u027E\u027F\x07,\u027F","\u0286\x07b\u0280\u0281\x07]\u0281\u0282","\x9AN\u0282\u0283\xEEx\u0283\u0284\x07","b\u0284\u0286\u0285\u0278","\u0285\u0279\u0285\u027B","\u0285\u027E\u0285\u0280","\u02867\u0287\u028E\x07","c\u0288\u0289\x07^\u0289\u028F\x07_","\u028A\u028F\x07d\u028B\u028F\x07e","\u028C\u028D\x07f\u028D\u028F\x07g\u028E","\u0288\u028E\u028A\u028E","\u028B\u028E\u028C\u028F","9\u0290\u0292\x07h\u0291\u0293","\x07j\u0292\u0291\u0292\u0293","\u0293\u0294\u0294\u0299","<\u0295\u0296\x07\u0296\u0298","<\u0297\u0295\u0298\u029B","\u0299\u0297\u0299\u029A","\u029A;\u029B\u0299","\u029C\u029E\u0128\x95\u029D\u029F","\u0122\x92\u029E\u029D\u029E\u029F","\u029F\u02A0\u02A0\u02A1","\x07U\u02A1\u02A2\v\u02A2=","\u02A3\u02A4\x07d\u02A4\u02A5\x07","W\u02A5\u02A7\xF8}\u02A6\u02A8@!","\u02A7\u02A6\u02A7\u02A8","\u02A8?\u02A9\u02AA\x07h\u02AA","\u02AE\x07k\u02AB\u02AC\x07h\u02AC\u02AE","\x07l\u02AD\u02A9\u02AD\u02AB","\u02AEA\u02AF\u02B0","\x07m\u02B0\u02B1\x07W\u02B1\u02B2","\xF8}\u02B2C\u02B3\u02B4 ","\u02B4E\u02B5\u02B8\x07p","\u02B6\u02B9\x07q\u02B7\u02B9H%\u02B8\u02B6","\u02B8\u02B7\u02B9G","\u02BA\u02BFd3\u02BB\u02BC\x07","\u02BC\u02BEd3\u02BD\u02BB","\u02BE\u02C1\u02BF\u02BD","\u02BF\u02C0\u02C0I","\u02C1\u02BF\u02C2\u02C3\x07r","\u02C3\u02C8N(\u02C4\u02C5\x07","\u02C5\u02C7N(\u02C6\u02C4","\u02C7\u02CA\u02C8\u02C6","\u02C8\u02C9\u02C9K","\u02CA\u02C8\u02CB\u02CC\x07s","\u02CC\u02CD\u012E\x98\u02CDM","\u02CE\u02CF\x07_\u02CF\u02D1\x07","\u02D0\u02D2\u02D1\u02D0","\u02D1\u02D2\u02D2\u02D3","\u02D3\u02D4\x07\u02D4O","\u02D5\u02DC\f\u02D6\u02DC\x07t\u02D7","\u02DC\x07u\u02D8\u02D9\x07v\u02D9\u02DA","\x07\u02DA\u02DC\u0136\x9C\u02DB\u02D5","\u02DB\u02D6\u02DB\u02D7","\u02DB\u02D8\u02DCQ","\u02DD\u02DFT+\u02DE\u02DD","\u02DF\u02E0\u02E0\u02DE","\u02E0\u02E1\u02E1S","\u02E2\u02E3\x07w\u02E3\u02E6","V,\u02E4\u02E5\x07x\u02E5\u02E7\u0124\x93","\u02E6\u02E4\u02E6\u02E7","\u02E7\u02E9\u02E8\u02EAX-","\u02E9\u02E8\u02E9\u02EA","\u02EA\u02F0\u02EB\u02EC\x07y","\u02EC\u02ED\x07z\u02ED\u02EE\x07{\u02EE","\u02F0\x07|\u02EF\u02E2\u02EF","\u02EB\u02F0U\u02F1","\u02F2 \u02F2W\u02F3\u02F4","\x07~\u02F4\u02F7\x07\x7F\u02F5\u02F7","\x07\x80\u02F6\u02F3\u02F6\u02F5","\u02F7Y\u02F8\u02FB","\\/\u02F9\u02FB\x07\r\u02FA\u02F8","\u02FA\u02F9\u02FB\u0300","\u02FC\u02FD\x07\u02FD\u02FF\\","/\u02FE\u02FC\u02FF\u0302","\u0300\u02FE\u0300\u0301","\u0301[\u0302\u0300","\u0303\u0306\u012E\x98\u0304\u0306\u0130","\x99\u0305\u0303\u0305\u0304","\u0306\u0308\u0307\u0309^","0\u0308\u0307\u0308\u0309","\u0309\u030F\u030A\u030C\x9A","N\u030B\u030D^0\u030C\u030B","\u030C\u030D\u030D\u030F","\u030E\u0305\u030E\u030A","\u030F]\u0310\u0312\x07U\u0311","\u0310\u0311\u0312\u0312","\u0315\u0313\u0316\u0128\x95\u0314","\u0316\u0140\xA1\u0315\u0313\u0315","\u0314\u0316_\u0317","\u0318\x07\x81\u0318\u0319\x9AN\u0319","a\u031A\u031B\x07\x82\u031B","\u031C\x9AN\u031Cc\u031D\u0327","p9\u031E\u0321\x07\u031F\u0322","\u0128\x95\u0320\u0322\x07\x83\u0321\u031F","\u0321\u0320\u0322\u0323","\u0323\u0324f4\u0324\u0325\x07 ","\u0325\u0327\u0326\u031D","\u0326\u031E\u0327\u032B","\u0328\u032Ah5\u0329\u0328","\u032A\u032D\u032B\u0329","\u032B\u032C\u032Ce","\u032D\u032B\u032E\u0332p9\u032F","\u0331h5\u0330\u032F\u0331\u0334","\u0332\u0330\u0332\u0333","\u0333g\u0334\u0332","\u0335\u0336l7\u0336\u033B","d3\u0337\u0338\x07\x84\u0338\u033C\x9A","N\u0339\u033A\x07\x85\u033A\u033C\u012C","\x97\u033B\u0337\u033B\u0339","\u033B\u033C\u033C\u0349","\u033D\u033En8\u033E\u0343d3\u033F","\u0340\x07\x84\u0340\u0344\x9AN\u0341","\u0342\x07\x85\u0342\u0344\u012C\x97\u0343","\u033F\u0343\u0341\u0344","\u0349\u0345\u0346j6\u0346\u0347","p9\u0347\u0349\u0348\u0335","\u0348\u033D\u0348\u0345","\u0349i\u034A\u034C\x07","\x86\u034B\u034D\x07\x87\u034C\u034B","\u034C\u034D\u034D\u034E","\u034E\u0356\x07\x88\u034F\u0350\x07","\x86\u0350\u0352 \x07\u0351\u0353\x07","\x8B\u0352\u0351\u0352\u0353","\u0353\u0354\u0354\u0356\x07","\x88\u0355\u034A\u0355\u034F","\u0356k\u0357\u0359 \b","\u0358\u0357\u0358\u0359","\u0359\u035A\u035A\u035D\x07\x88","\u035B\u035D\x07F\u035C\u0358","\u035C\u035B\u035Dm","\u035E\u0360 \x07\u035F\u0361\x07\x8B","\u0360\u035F\u0360\u0361","\u0361\u0362\u0362\u0363\x07\x88","\u0363o\u0364\u036Ar:\u0365","\u036At;\u0366\u036Av<\u0367\u036Ax=","\u0368\u036Az>\u0369\u0364\u0369","\u0365\u0369\u0366\u0369","\u0367\u0369\u0368\u036A","q\u036B\u036D\u012E\x98\u036C","\u036E\u0120\x91\u036D\u036C\u036D","\u036E\u036E\u0370\u036F","\u0371\x8AF\u0370\u036F\u0370","\u0371\u0371\u0373\u0372","\u0374\x8CG\u0373\u0372\u0373","\u0374\u0374s\u0375","\u0378\x07\u0376\u0379r:\u0377\u0379","t;\u0378\u0376\u0378\u0377","\u0379\u037A\u037A\u037B\x07","\u037Bu\u037C\u037E","\v\u037D\u037F\x8AF\u037E\u037D","\u037E\u037F\u037F\u0381","\u0380\u0382\u0122\x92\u0381\u0380","\u0381\u0382\u0382\u038C","\u0383\u0384\x07\x8D\u0384\u0386","\v\u0385\u0387\x8AF\u0386\u0385","\u0386\u0387\u0387\u0389","\u0388\u038A\u0122\x92\u0389\u0388","\u0389\u038A\u038A\u038C","\u038B\u037C\u038B\u0383","\u038Cw\u038D\u0390\x07","\u038E\u0391H%\u038F\u0391x=","\u0390\u038E\u0390\u038F","\u0391\u0392\u0392\u0393\x07","\u0393y\u0394\u0395\x07\x8E","\u0395\u0396\x07\u0396\u0397\x9AN","\u0397\u0398\x07\u0398\u0399\u0140\xA1","\u0399\u039A|?\u039A\u039C\x07\u039B","\u039D\x8AF\u039C\u039B\u039C","\u039D\u039D{\u039E","\u039F\x07\x8F\u039F\u03A0\x07\u03A0","\u03A5~@\u03A1\u03A2\x07\u03A2\u03A4","~@\u03A3\u03A1\u03A4\u03A7","\u03A5\u03A3\u03A5\u03A6","\u03A6\u03A8\u03A7\u03A5","\u03A8\u03A9\x07\u03A9}","\u03AA\u03AB\u0128\x95\u03AB\u03AC\x07","w\u03AC\u03AD\x07\x90\u03AD\u03C1","\u03AE\u03AF\u0128\x95\u03AF\u03B1","\xFE\x80\u03B0\u03B2\u0114\x8B\u03B1\u03B0","\u03B1\u03B2\u03B2\u03B4","\u03B3\u03B5\x07\x91\u03B4\u03B3","\u03B4\u03B5\u03B5\u03B6","\u03B6\u03B7\x07\x92\u03B7\u03B9","\u0140\xA1\u03B8\u03BA\x80A\u03B9\u03B8","\u03B9\u03BA\u03BA\u03C1","\u03BB\u03BC\x07\x93\u03BC\u03BD\x07","\x92\u03BD\u03BE\u0140\xA1\u03BE\u03BF","|?\u03BF\u03C1\u03C0\u03AA","\u03C0\u03AE\u03C0\u03BB","\u03C1\x7F\u03C2\u03C4\x82","B\u03C3\u03C5\x84C\u03C4\u03C3","\u03C4\u03C5\u03C5\u03CB","\u03C6\u03C8\x84C\u03C7\u03C9\x82B","\u03C8\u03C7\u03C8\u03C9","\u03C9\u03CB\u03CA\u03C2","\u03CA\u03C6\u03CB\x81","\u03CC\u03CD\x86D\u03CD\u03CE\x07\x84","\u03CE\u03CF\x07\x94\u03CF\x83","\u03D0\u03D1\x86D\u03D1\u03D2\x07\x84","\u03D2\u03D3\x07\x95\u03D3\x85","\u03D4\u03D9\x07\x95\u03D5\u03D9\x07\x96","\u03D6\u03D7\x07A\u03D7\u03D9\u0140\xA1","\u03D8\u03D4\u03D8\u03D5","\u03D8\u03D6\u03D9\x87","\u03DA\u03DB \u03DB\x89\u03DC",`\u03DE +\u03DD\u03DC\u03DD\u03DE`,"\u03DE\u03DF\u03DF\u03E0","\u0128\x95\u03E0\x8B\u03E1\u03E6","\x8EH\u03E2\u03E3\x07\u03E3\u03E5","\x8EH\u03E4\u03E2\u03E5\u03E8","\u03E6\u03E4\u03E6\u03E7","\u03E7\x8D\u03E8\u03E6","\u03E9\u03EA\x90I\u03EA\u03EC","\x92J\u03EB\u03ED\x94K\u03EC\u03EB","\u03EC\u03ED\u03ED\u03EE","\u03EE\u03EF\x07\u03EF\u03F0","\x96L\u03F0\u03F1\x07\u03F1\u03FE","\u03F2\u03F3\x07\x97\u03F3\u03F5","\x92J\u03F4\u03F6\x94K\u03F5\u03F4","\u03F5\u03F6\u03F6\u03F7","\u03F7\u03F9\x07\u03F8\u03FA\x96","L\u03F9\u03F8\u03F9\u03FA","\u03FA\u03FB\u03FB\u03FC\x07","\u03FC\u03FE\u03FD\u03E9","\u03FD\u03F2\u03FE\x8F","\u03FF\u0400 \v\u0400\x91","\u0401\u0402 \f\u0402\x93","\u0403\u0409\x07w\u0404\u040A\x07\x88","\u0405\u0406\x07m\u0406\u040A\x07W","\u0407\u0408\x07d\u0408\u040A\x07W\u0409","\u0404\u0409\u0405\u0409","\u0407\u040A\x95\u040B","\u0410\x98M\u040C\u040D\x07\u040D","\u040F\x98M\u040E\u040C\u040F","\u0412\u0410\u040E\u0410","\u0411\u0411\x97\u0412","\u0410\u0413\u0416\u0128\x95\u0414","\u0416\x07\x9C\u0415\u0413\u0415","\u0414\u0416\x99\u0417","\u0418\bN\u0418\u041E\x9CO\u0419\u041B\x07","\x9D\u041A\u041C\xEAv\u041B\u041A","\u041B\u041C\u041C\u041D","\u041D\u041F \r\u041E\u0419","\u041E\u041F\u041F\u0423","\u0420\u0421\x07\xA1\u0421\u0423\x9A","N\u0422\u0417\u0422\u0420","\u0423\u042F\u0424\u0425\f","\u0425\u0426 \u0426\u042E\x9A","N\u0427\u0428\f\u0428\u0429\x07\xA2","\u0429\u042E\x9AN\u042A\u042B\f","\u042B\u042C \u042C\u042E\x9AN\u042D","\u0424\u042D\u0427\u042D","\u042A\u042E\u0431\u042F","\u042D\u042F\u0430\u0430","\x9B\u0431\u042F\u0432","\u0433\bO\u0433\u0434\xA0Q\u0434\u0446","\u0435\u0436\f\u0436\u0438\x07","\x9D\u0437\u0439\xEAv\u0438\u0437","\u0438\u0439\u0439\u043A","\u043A\u0445\x07\x96\u043B\u043C\f","\u043C\u043D\x9EP\u043D\u043E","\xA0Q\u043E\u0445\u043F\u0440\f","\u0440\u0441\x9EP\u0441\u0442 ","\u0442\u0443\v\u0443\u0445","\u0444\u0435\u0444\u043B","\u0444\u043F\u0445\u0448","\u0446\u0444\u0446\u0447","\u0447\x9D\u0448\u0446","\u0449\u044A \u044A\x9F","\u044B\u0459\xA4S\u044C\u044E\xEAv","\u044D\u044C\u044D\u044E","\u044E\u044F\u044F\u045A\xA2R","\u0450\u0452\x07\xA5\u0451\u0453\x07x","\u0452\u0451\u0452\u0453","\u0453\u0454\u0454\u045A\xF6|","\u0455\u0456\x07\xA6\u0456\u0457\x07\xA7","\u0457\u045A\xA4S\u0458\u045A\xB4[\u0459","\u044D\u0459\u0450\u0459","\u0455\u0459\u0458\u0459","\u045A\u045A\xA1\u045B","\u0461\x07z\u045C\u0462\v\u045D","\u045E\x07\u045E\u045F\xE6t\u045F","\u0460\x07\u0460\u0462\u0461","\u045C\u0461\u045D\u0462","\u0471\u0463\u0464\x07`\u0464","\u0465\xA4S\u0465\u0466\x07a\u0466\u0467","\xA0Q\u0467\u0471\u0468\u0469","\x07\xA7\u0469\u046C\xA6T\u046A\u046B","\x07\xA8\u046B\u046D\xA6T\u046C\u046A","\u046C\u046D\u046D\u0471","\u046E\u046F\x07\xA9\u046F\u0471","\xA4S\u0470\u045B\u0470\u0463","\u0470\u0468\u0470\u046E","\u0471\xA3\u0472\u0473","\bS\u0473\u0474\xA6T\u0474\u048F","\u0475\u0476\f \u0476\u0477\x07",`\u0477\u048E\xA4S +\u0478\u0479\f\b\u0479`,"\u047A \u047A\u048E\xA4S \u047B\u047C\f","\u047C\u047D \u047D\u048E","\xA4S\x07\u047E\u047F\f\u047F\u0480\x07","\u0480\u048E\xA4S\u0481\u0482\f","\u0482\u0483\x07\u0483\u048E\xA4S","\u0484\u0485\f\x07\u0485\u0486 ","\u0486\u048B\x07]\u0487\u0488\x9AN\u0488","\u0489\xEEx\u0489\u048C\u048A","\u048C\x07\u0163\u048B\u0487\u048B","\u048A\u048C\u048E\u048D","\u0475\u048D\u0478\u048D","\u047B\u048D\u047E\u048D","\u0481\u048D\u0484\u048E","\u0491\u048F\u048D\u048F","\u0490\u0490\xA5\u0491","\u048F\u0492\u0493\bT\u0493\u0497","\xDAn\u0494\u0495\u0156\xAC\u0495\u0496","\x9AN\u0496\u0498\u0497\u0494","\u0497\u0498\u0498\u04FF","\u0499\u049B\u012E\x98\u049A\u049C","\xA8U\u049B\u049A\u049B\u049C","\u049C\u04FF\u049D\u04FF","\xC0a\u049E\u04FF\xD2j\u049F\u04FF","\u013C\x9F\u04A0\u04FF\x07,\u04A1\u04FF","\xAAV\u04A2\u04FF\xACW\u04A3\u04FF\xAE","X\u04A4\u04A5 \u04A5\u04FF\xA6T","\u04A6\u04A7\xECw\u04A7\u04A8\xA6T\u04A8","\u04FF\u04A9\u04AB\x07_\u04AA","\u04A9\u04AA\u04AB\u04AB","\u04AC\u04AC\u04AD\x07\u04AD","\u04AE\xE6t\u04AE\u04AF\x07\u04AF","\u04FF\u04B0\u04B2\x07\x91\u04B1","\u04B0\u04B1\u04B2\u04B2","\u04B3\u04B3\u04FF\v\u04B4","\u04B5\x07\u04B5\u04B6\u0128\x95\u04B6","\u04B7\x9AN\u04B7\u04B8\x07 \u04B8\u04FF","\u04B9\u04BA\x07\xAC\u04BA\u04BB","\xBA^\u04BB\u04BC\x07\xAD\u04BC\u04BD","\x07\u04BD\u04BF\xA4S\u04BE\u04C0","\xBE`\u04BF\u04BE\u04BF\u04C0","\u04C0\u04C1\u04C1\u04C2","\x07\u04C2\u04FF\u04C3\u04C4","\x07\xAE\u04C4\u04FF\xA6T\f\u04C5\u04C6\x07","\xAF\u04C6\u04C7\x07\u04C7\u04C8","\x9AN\u04C8\u04C9\x07U\u04C9\u04CB\xFE","\x80\u04CA\u04CC\x07\xB0\u04CB\u04CA","\u04CB\u04CC\u04CC\u04CD","\u04CD\u04CE\x07\u04CE\u04FF","\u04CF\u04D1\x07\xB1\u04D0\u04D2\x9A","N\u04D1\u04D0\u04D1\u04D2","\u04D2\u04D6\u04D3\u04D4\xE0","q\u04D4\u04D5\xE2r\u04D5\u04D7","\u04D6\u04D3\u04D7\u04D8","\u04D8\u04D6\u04D8\u04D9","\u04D9\u04DB\u04DA\u04DC\xE4s","\u04DB\u04DA\u04DB\u04DC","\u04DC\u04DD\u04DD\u04DE\x07\xB2","\u04DE\u04FF\u04DF\u04E0\x07\xB3","\u04E0\u04E1\x07\u04E1\u04E2\x9AN","\u04E2\u04E3\x07\u04E3\u04E4\xFE\x80","\u04E4\u04E5\x07\u04E5\u04FF","\u04E6\u04E7\x07\xB3\u04E7\u04E8\x07","\u04E8\u04E9\x9AN\u04E9\u04EA\x07\x85","\u04EA\u04EB\u0110\x89\u04EB\u04EC\x07","\u04EC\u04FF\u04ED\u04EE\x07A","\u04EE\u04EF\x07\u04EF\u04F0\u012E\x98","\u04F0\u04F1\x07\u04F1\u04FF","\u04F2\u04F3\x07r\u04F3\u04F4\x07","\u04F4\u04F5\u012E\x98\u04F5\u04F6\x07","\u04F6\u04FF\u04F7\u04F8\x07]","\u04F8\u04F9\x9AN\u04F9\u04FA\xEEx","\u04FA\u04FB\x07\v\u04FB\u04FC\x9AN","\u04FC\u04FF\u04FD\u04FF\u0130\x99","\u04FE\u0492\u04FE\u0499","\u04FE\u049D\u04FE\u049E","\u04FE\u049F\u04FE\u04A0","\u04FE\u04A1\u04FE\u04A2","\u04FE\u04A3\u04FE\u04A4","\u04FE\u04A6\u04FE\u04AA","\u04FE\u04B1\u04FE\u04B4","\u04FE\u04B9\u04FE\u04C3","\u04FE\u04C5\u04FE\u04CF","\u04FE\u04DF\u04FE\u04E6","\u04FE\u04ED\u04FE\u04F2","\u04FE\u04F7\u04FE\u04FD","\u04FF\u050B\u0500\u0501\f","\u0501\u0502\x07\u0502\u050A\xA6T","\u0503\u0504\f\u0504\u0505\x07\xB4",`\u0505\u050A\u0152\xAA\u0506\u0507\f +\u0507`,"\u0508\x07-\u0508\u050A\xFE\x80\u0509","\u0500\u0509\u0503\u0509","\u0506\u050A\u050D\u050B","\u0509\u050B\u050C\u050C","\xA7\u050D\u050B\u050E","\u0511 \u050F\u0512\u0140\xA1\u0510","\u0512\x9AN\u0511\u050F\u0511","\u0510\u0512\xA9\u0513","\u0514\x07\xB5\u0514\u0516\x07\u0515","\u0517\x07E\u0516\u0515\u0516","\u0517\u0517\u0518\u0518","\u0519\xB8]\u0519\u051B\x07\u051A","\u051C\xB0Y\u051B\u051A\u051B","\u051C\u051C\u058A\u051D","\u051E \u051E\u051F\x07\u051F","\u0520\xB8]\u0520\u0522\x07\u0521","\u0523\xB0Y\u0522\u0521\u0522","\u0523\u0523\u058A\u0524","\u058A\xB6\\\u0525\u0526\x07\xB9\u0526","\u0528\x07\u0527\u0529\x07D\u0528","\u0527\u0528\u0529\u0529","\u052A\u052A\u052B\x07\r\u052B","\u052D\x07\u052C\u052E\xB0Y\u052D","\u052C\u052D\u052E\u052E","\u058A\u052F\u0530\x07\xB9\u0530","\u0538\x07\u0531\u0533\x07D\u0532","\u0531\u0532\u0533\u0533","\u0534\u0534\u0539\x07\r\u0535","\u0539\xB8]\u0536\u0537\x07E\u0537\u0539","\xE6t\u0538\u0532\u0538\u0535","\u0538\u0536\u0539\u053A","\u053A\u053C\x07\u053B\u053D","\xB0Y\u053C\u053B\u053C\u053D","\u053D\u058A\u053E\u053F","\x07\xBA\u053F\u0541\x07\u0540\u0542","\x07E\u0541\u0540\u0541\u0542","\u0542\u0543\u0543\u0544","\xB8]\u0544\u0546\x07\u0545\u0547","\xB0Y\u0546\u0545\u0546\u0547","\u0547\u058A\u0548\u0549","\x07\xBB\u0549\u054B\x07\u054A\u054C","\x07E\u054B\u054A\u054B\u054C","\u054C\u054D\u054D\u054E","\xB8]\u054E\u0550\x07\u054F\u0551","\xB0Y\u0550\u054F\u0550\u0551","\u0551\u058A\u0552\u0553","\x07\xBC\u0553\u0554\x07\u0554\u0555","\xB8]\u0555\u0557\x07\u0556\u0558","\xB0Y\u0557\u0556\u0557\u0558","\u0558\u058A\u0559\u055A","\x07\xBD\u055A\u055B\x07\u055B\u055C","\xB8]\u055C\u055E\x07\u055D\u055F","\xB0Y\u055E\u055D\u055E\u055F","\u055F\u058A\u0560\u0561","\x07\xBE\u0561\u0562\x07\u0562\u0563","\xB8]\u0563\u0565\x07\u0564\u0566","\xB0Y\u0565\u0564\u0565\u0566","\u0566\u058A\u0567\u0568","\x07\xBF\u0568\u0569\x07\u0569\u056A","\xB8]\u056A\u056C\x07\u056B\u056D","\xB0Y\u056C\u056B\u056C\u056D","\u056D\u058A\u056E\u056F","\x07\xC0\u056F\u0571\x07\u0570\u0572","\x07E\u0571\u0570\u0571\u0572","\u0572\u0573\u0573\u0574","\xB8]\u0574\u0576\x07\u0575\u0577","\xB0Y\u0576\u0575\u0576\u0577","\u0577\u058A\u0578\u0579","\x07\xC1\u0579\u057B\x07\u057A\u057C","\x07E\u057B\u057A\u057B\u057C","\u057C\u057D\u057D\u057F",'\xE6t\u057E\u0580B"\u057F\u057E',"\u057F\u0580\u0580\u0583","\u0581\u0582\x07\xC2\u0582\u0584\u0142","\xA2\u0583\u0581\u0583\u0584","\u0584\u0585\u0585\u0587\x07","\u0586\u0588\xB0Y\u0587\u0586","\u0587\u0588\u0588\u058A","\u0589\u0513\u0589\u051D","\u0589\u0524\u0589\u0525","\u0589\u052F\u0589\u053E","\u0589\u0548\u0589\u0552","\u0589\u0559\u0589\u0560","\u0589\u0567\u0589\u056E","\u0589\u0578\u058A\xAB","\u058B\u058C\x07\xC3\u058C\u058D\x07","\u058D\u058E\xE6t\u058E\u058F\x07","\u058F\xAD\u0590\u0591 ","\u0591\u0592\u0154\xAB\u0592\u0593\xB0","Y\u0593\u05BB\u0594\u0595\x07\xC9","\u0595\u0596\xF6|\u0596\u0597\xB0","Y\u0597\u05BB\u0598\u0599 ","\u0599\u059A\x07\u059A\u059C\x9AN","\u059B\u059D\xB2Z\u059C\u059B","\u059C\u059D\u059D\u059E","\u059E\u05A0\x07\u059F\u05A1\xB4[","\u05A0\u059F\u05A0\u05A1","\u05A1\u05A2\u05A2\u05A3\xB0Y","\u05A3\u05BB\u05A4\u05A5 ","\u05A5\u05A7\xF4{\u05A6\u05A8\xB4[","\u05A7\u05A6\u05A7\u05A8","\u05A8\u05A9\u05A9\u05AA\xB0Y","\u05AA\u05BB\u05AB\u05AC\x07\xCE","\u05AC\u05AD\x07\u05AD\u05AE\x9AN","\u05AE\u05AF\x07\u05AF\u05B0\xA6T","\u05B0\u05B3\x07\u05B1\u05B2\x07p","\u05B2\u05B4 \x1B\u05B3\u05B1","\u05B3\u05B4\u05B4\u05B6","\u05B5\u05B7\xB4[\u05B6\u05B5","\u05B6\u05B7\u05B7\u05B8","\u05B8\u05B9\xB0Y\u05B9\u05BB","\u05BA\u0590\u05BA\u0594","\u05BA\u0598\u05BA\u05A4","\u05BA\u05AB\u05BB\xAF","\u05BC\u05BF\x07\xD1\u05BD\u05C0\u0128\x95","\u05BE\u05C0(\u05BF\u05BD","\u05BF\u05BE\u05C0\xB1","\u05C1\u05C4\x07\u05C2\u05C5\u0138\x9D","\u05C3\u05C5\x07,\u05C4\u05C2","\u05C4\u05C3\u05C5\u05C8","\u05C6\u05C7\x07\u05C7\u05C9\x9AN","\u05C8\u05C6\u05C8\u05C9","\u05C9\xB3\u05CA\u05CB ","\u05CB\u05CC\x07\xD3\u05CC\xB5","\u05CD\u05CE\x07\xD4\u05CE\u05CF\x07","\u05CF\u05D0\xB8]\u05D0\u05D2\x07","\u05D1\u05D3\xB0Y\u05D2\u05D1","\u05D2\u05D3\u05D3\u05DE","\u05D4\u05D5\x07\xD5\u05D5\u05D6\x07","\u05D6\u05D7\xB8]\u05D7\u05D8\x07","\u05D8\u05D9\xB8]\u05D9\u05DB\x07","\u05DA\u05DC\xB0Y\u05DB\u05DA","\u05DB\u05DC\u05DC\u05DE","\u05DD\u05CD\u05DD\u05D4","\u05DE\xB7\u05DF\u05E1\x07D","\u05E0\u05DF\u05E0\u05E1","\u05E1\u05E2\u05E2\u05E3\x9AN","\u05E3\xB9\u05E4\u05EA\xBC_","\u05E5\u05E6\x07\u05E6\u05E7\xBC_","\u05E7\u05E8\x07\u05E8\u05EA","\u05E9\u05E4\u05E9\u05E5","\u05EA\xBB\u05EB\u05F0\u012E\x98","\u05EC\u05ED\x07\u05ED\u05EF\u012E\x98","\u05EE\u05EC\u05EF\u05F2","\u05F0\u05EE\u05F0\u05F1","\u05F1\xBD\u05F2\u05F0","\u05F3\u05F4\x07z\u05F4\u05F5\x07\xD6","\u05F5\u0603\x07|\u05F6\u05F7\x07z\u05F7","\u05F8\x07\x86\u05F8\u05F9\x07\xD7\u05F9","\u05FD\x07|\u05FA\u05FB\x07h\u05FB\u05FC","\x07\xD8\u05FC\u05FE\x07\xD9\u05FD\u05FA","\u05FD\u05FE\u05FE\u0603","\u05FF\u0600\x07h\u0600\u0601","\x07\xD8\u0601\u0603\x07\xD9\u0602\u05F3","\u0602\u05F6\u0602\u05FF","\u0603\xBF\u0604\u0605","\x07\xDA\u0605\u0606\x07\u0606\u0609","\xE6t\u0607\u0608\x07\x85\u0608\u060A","\u0110\x89\u0609\u0607\u0609\u060A","\u060A\u060B\u060B\u060C","\x07\u060C\u0713\u060D\u060F","\x07\xDB\u060E\u0610\u0154\xAB\u060F\u060E","\u060F\u0610\u0610\u0713","\u0611\u0612\x07\xDC\u0612\u0713","\xF4{\u0613\u0614\x07<\u0614\u0713","\xF4{\u0615\u0616\x07;\u0616\u0713\xF4","{\u0617\u0618\x07\xDD\u0618\u0619\x07","\u0619\u061A\x9AN\u061A\u061B\x07","\u061B\u061C\x9AN\u061C\u061D\x07","\u061D\u061E\x9AN\u061E\u061F\x07","\u061F\u0620\x9AN\u0620\u0621\x07","\u0621\u0713\u0622\u0623\x07]","\u0623\u0624\x07\u0624\u0627\x9A","N\u0625\u0626\x07\u0626\u0628\x9A","N\u0627\u0625\u0628\u0629","\u0629\u0627\u0629\u062A","\u062A\u062B\u062B\u062C\x07","\u062C\u0713\u062D\u062E\x07\x89","\u062E\u062F\x07\u062F\u0630\x9A","N\u0630\u0631\x07\u0631\u0632\x9A","N\u0632\u0633\x07\u0633\u0713","\u0634\u0635\x07:\u0635\u0713\xF4","{\u0636\u0637\x07>\u0637\u0713\xF4{","\u0638\u0639\x07\x8A\u0639\u063A\x07","\u063A\u063B\x9AN\u063B\u063C\x07","\u063C\u063D\x9AN\u063D\u063E\x07","\u063E\u0713\u063F\u0640\x079","\u0640\u0713\xF4{\u0641\u0642\x07\xDE","\u0642\u0713\xF4{\u0643\u0644\x07\xDF","\u0644\u0645\x07\u0645\u0648\x9AN","\u0646\u0647\x07\u0647\u0649\x9AN","\u0648\u0646\u0648\u0649","\u0649\u064A\u064A\u064B\x07","\u064B\u0713\u064C\u0713\xCEh","\u064D\u064E\x07\xE3\u064E\u0713\u0154\xAB","\u064F\u0650\x07r\u0650\u0713\xF4{\u0651","\u0652\x07@\u0652\u0713\xF4{\u0653\u0654"," \u0654\u0655\x07\u0655\u0656","\x9AN\u0656\u065C\x07\u0657\u065D","\x9AN\u0658\u0659\x07]\u0659\u065A","\x9AN\u065A\u065B\xEEx\u065B\u065D","\u065C\u0657\u065C\u0658","\u065D\u065E\u065E\u065F\x07","\u065F\u0713\u0660\u0662\x07\xE6","\u0661\u0663\u0154\xAB\u0662\u0661","\u0662\u0663\u0663\u0713","\u0664\u0666\x07\xE7\u0665\u0667\xC4","c\u0666\u0665\u0666\u0667","\u0667\u0713\u0668\u0669 ","\u0669\u066A\x07\u066A\u066B\x9A","N\u066B\u066C\x07\u066C\u066D\x07]","\u066D\u066E\x9AN\u066E\u066F\xEEx","\u066F\u0670\x07\u0670\u0713","\u0671\u0672\x07\xEA\u0672\u0673\x07","\u0673\u0674\xEEx\u0674\u0675\x07p\u0675","\u0676\x9AN\u0676\u0677\x07\u0677","\u0713\u0678\u0679\x07\xEB\u0679","\u067A\x07\u067A\u067B\xCCg\u067B","\u067C\x07\u067C\u067D\x9AN\u067D","\u067E\x07\u067E\u0713\u067F","\u0681\x07\xEC\u0680\u0682\xC4c\u0681","\u0680\u0681\u0682\u0682","\u0713\u0683\u0684\x07\xED\u0684","\u0685\x07\u0685\u0686\xA4S\u0686","\u0687\x07z\u0687\u0688\x9AN\u0688\u0689","\x07\u0689\u0713\u068A\u0713","\xD0i\u068B\u068D\x07\xEE\u068C\u068E","\xC4c\u068D\u068C\u068D\u068E","\u068E\u0713\u068F\u0690"," \u0690\u0691\x07\u0691\u0692","\xF0y\u0692\u0693\x07\u0693\u0694","\x9AN\u0694\u0695\x07\u0695\u0696","\x9AN\u0696\u0697\x07\u0697\u0713","\u0698\u069A\x07\xF1\u0699\u069B","\u0154\xAB\u069A\u0699\u069A\u069B","\u069B\u0713\u069C\u069E","\x07\xF2\u069D\u069F\xC4c\u069E\u069D","\u069E\u069F\u069F\u0713","\u06A0\u06A2\x07\xF3\u06A1\u06A3","\xC4c\u06A2\u06A1\u06A2\u06A3","\u06A3\u0713\u06A4\u06A5","\x07\xF4\u06A5\u0713\xF4{\u06A6\u06A7","\x07\xF5\u06A7\u0713\xF4{\u06A8\u06A9","\x07\xF6\u06A9\u0713\xF2z\u06AA\u06AB","\x07\xF7\u06AB\u0713\xF4{\u06AC\u06AD","\x07\xF8\u06AD\u0713\u0154\xAB\u06AE\u06AF","\x07\xF9\u06AF\u06B0\x07\u06B0\u06B1","\x9AN\u06B1\u06B2\x07\u06B2\u06B3","\x9AN\u06B3\u06B4\x07\u06B4\u06B5","\x9AN\u06B5\u06B6\x07\u06B6\u0713","\u06B7\u06B8\x07\xFA\u06B8\u06B9","\x07\u06B9\u06BA\x9AN\u06BA\u06BB","\x07\u06BB\u06BE\x9AN\u06BC\u06BD","\x07\u06BD\u06BF\x9AN\u06BE\u06BC","\u06BE\u06BF\u06BF\u06C0","\u06C0\u06C1\x07\u06C1\u0713","\u06C2\u06C3\x07\xFB\u06C3\u0713","\xF4{\u06C4\u06C5\x07\xAB\u06C5\u06C6","\x07\u06C6\u06C7\x9AN\u06C7\u06C8","\x07\u06C8\u06C9\x9AN\u06C9\u06CA","\x07\u06CA\u0713\u06CB\u06CC","\x07\xFC\u06CC\u06CD\x07\u06CD\u06CE","\u0144\xA3\u06CE\u06CF\x07\u06CF\u0713","\u06D0\u06D1\x07\xFD\u06D1\u0713","\xF4{\u06D2\u06D3\x07?\u06D3\u0713","\xF4{\u06D4\u06D5\x07\xFE\u06D5\u06D6\x07","\u06D6\u06D7\x9AN\u06D7\u06D8\x07","\u06D8\u06D9\x9AN\u06D9\u06DA\x07","\u06DA\u0713\u06DB\u06DC\x07","\xFF\u06DC\u06DD\x07\u06DD\u06DE","\x9AN\u06DE\u06DF\x07\u06DF\u06E0","\x9AN\u06E0\u06E1\x07\u06E1\u06E2","\x9AN\u06E2\u06E3\x07\u06E3\u0713","\u06E4\u06E5\x07\u0100\u06E5\u0713","\xF4{\u06E6\u06E7\x07\u0101\u06E7\u0713","\u0154\xAB\u06E8\u06E9\x07\u0102\u06E9\u06EA\x07","\u06EA\u06EB\x9AN\u06EB\u06EC\x07","\u06EC\u06ED\x9AN\u06ED\u06EE\x07","\u06EE\u0713\u06EF\u06F0\x07","=\u06F0\u06F1\x07\u06F1\u06F4","\x9AN\u06F2\u06F3\x07\u06F3\u06F5","\x9AN\u06F4\u06F2\u06F4\u06F5","\u06F5\u06F6\u06F6\u06F7\x07","\u06F7\u0713\u06F8\u06F9\x07","\u0103\u06F9\u06FA\x07\u06FA\u070D","\x9AN\u06FB\u06FC\x07U\u06FC\u06FD\x07\xDA","\u06FD\u06FF\u010C\x87\u06FE\u06FB","\u06FE\u06FF\u06FF\u0701","\u0700\u0702\xC8e\u0701\u0700","\u0701\u0702\u0702\u070E","\u0703\u0704\x07U\u0704\u0705\x07\xAE","\u0705\u070E\u010C\x87\u0706\u0707\x07","\u0707\u0708\u0134\x9B\u0708\u0709\x07","\u0709\u070A\u0134\x9B\u070A\u070B\x07","\u070B\u070C\u0134\x9B\u070C\u070E","\u070D\u06FE\u070D\u0703","\u070D\u0706\u070E\u070F","\u070F\u0710\x07\u0710\u0713","\u0711\u0713\xC2b\u0712\u0604","\u0712\u060D\u0712\u0611","\u0712\u0613\u0712\u0615","\u0712\u0617\u0712\u0622","\u0712\u062D\u0712\u0634","\u0712\u0636\u0712\u0638","\u0712\u063F\u0712\u0641","\u0712\u0643\u0712\u064C","\u0712\u064D\u0712\u064F","\u0712\u0651\u0712\u0653","\u0712\u0660\u0712\u0664","\u0712\u0668\u0712\u0671","\u0712\u0678\u0712\u067F","\u0712\u0683\u0712\u068A","\u0712\u068B\u0712\u068F","\u0712\u0698\u0712\u069C","\u0712\u06A0\u0712\u06A4","\u0712\u06A6\u0712\u06A8","\u0712\u06AA\u0712\u06AC","\u0712\u06AE\u0712\u06B7","\u0712\u06C2\u0712\u06C4","\u0712\u06CB\u0712\u06D0","\u0712\u06D2\u0712\u06D4","\u0712\u06DB\u0712\u06E4","\u0712\u06E6\u0712\u06E8","\u0712\u06EF\u0712\u06F8","\u0712\u0711\u0713\xC1","\u0714\u0715\x07\u0104\u0715\u0716\x07","\u0716\u0717\x9AN\u0717\u0718\x07","\u0718\u0719\x9AN\u0719\u071A\x07","\u071A\u0733\u071B\u071C\x07\u0105","\u071C\u071E\x07\u071D\u071F\xE6","t\u071E\u071D\u071E\u071F","\u071F\u0720\u0720\u0733\x07","\u0721\u0722\x07\u0106\u0722\u0733\xF2","z\u0723\u0724\x07\u0107\u0724\u0733\xF2","z\u0725\u0726\x07\u0108\u0726\u0733\xF2","z\u0727\u0728\x07\u0109\u0728\u0733\xF2","z\u0729\u072A\x07\u010A\u072A\u072B\x07","\u072B\u072C\x9AN\u072C\u072D\x07","\u072D\u072E\x9AN\u072E\u072F\x07","\u072F\u0733\u0730\u0731\x07\u010B","\u0731\u0733\xF2z\u0732\u0714","\u0732\u071B\u0732\u0721","\u0732\u0723\u0732\u0725","\u0732\u0727\u0732\u0729","\u0732\u0730\u0733\xC3","\u0734\u0736\x07\u0735\u0737\xC6","d\u0736\u0735\u0736\u0737","\u0737\u0738\u0738\u0739\x07","\u0739\xC5\u073A\u073B\x070","\u073B\xC7\u073C\u0749\x07\u010C","\u073D\u073E\u0136\x9C\u073E\u073F\x07\f","\u073F\u0740\u0136\x9C\u0740\u074A","\u0741\u0746\xCAf\u0742\u0743\x07","\u0743\u0745\xCAf\u0744\u0742","\u0745\u0748\u0746\u0744","\u0746\u0747\u0747\u074A","\u0748\u0746\u0749\u073D","\u0749\u0741\u074A\xC9","\u074B\u0751\u0136\x9C\u074C\u074E ","\u074D\u074F\x07\u0100\u074E\u074D","\u074E\u074F\u074F\u0752","\u0750\u0752\x07\u0100\u0751\u074C","\u0751\u0750\u0751\u0752","\u0752\xCB\u0753\u0754 ","\u0754\xCD\u0755\u0756\x07\u010E","\u0756\u076E\x07\u0757\u075A\x9AN","\u0758\u0759\x07p\u0759\u075B\x9AN","\u075A\u0758\u075A\u075B","\u075B\u076F\u075C\u075E\x07\u010F","\u075D\u075F\x9AN\u075E\u075D","\u075E\u075F\u075F\u0760","\u0760\u0761\x07p\u0761\u076F\x9AN\u0762","\u0764\x07\u0110\u0763\u0765\x9AN\u0764","\u0763\u0764\u0765\u0765","\u0766\u0766\u0767\x07p\u0767","\u076F\x9AN\u0768\u076A\x07\u0111\u0769","\u076B\x9AN\u076A\u0769\u076A","\u076B\u076B\u076C\u076C","\u076D\x07p\u076D\u076F\x9AN\u076E\u0757","\u076E\u075C\u076E\u0762","\u076E\u0768\u076F\u0770","\u0770\u0771\x07\u0771\xCF","\u0772\u0773\x07\u0113\u0773\u0774","\x07\u0774\u0781\x9AN\u0775\u0776","\x07\u0776\u0779\x9AN\u0777\u0778","\x07\u0778\u077A\x9AN\u0779\u0777","\u0779\u077A\u077A\u0782","\u077B\u077C\x07p\u077C\u077F","\x9AN\u077D\u077E\x07w\u077E\u0780","\x9AN\u077F\u077D\u077F\u0780","\u0780\u0782\u0781\u0775","\u0781\u077B\u0782\u0783","\u0783\u0784\x07\u0784\xD1","\u0785\u0786\u0126\x94\u0786\u0788\x07","\u0787\u0789\xD4k\u0788\u0787","\u0788\u0789\u0789\u078A","\u078A\u078B\x07\u078B\u0799","\u078C\u078D\u012E\x98\u078D\u0794\x07","\u078E\u0790\xE6t\u078F\u078E","\u078F\u0790\u0790\u0795","\u0791\u0793\\/\u0792\u0791","\u0792\u0793\u0793\u0795","\u0794\u078F\u0794\u0792","\u0795\u0796\u0796\u0797\x07","\u0797\u0799\u0798\u0785","\u0798\u078C\u0799\xD3","\u079A\u079F\xD6l\u079B\u079C\x07","\u079C\u079E\xD6l\u079D\u079B","\u079E\u07A1\u079F\u079D","\u079F\u07A0\u07A0\xD5","\u07A1\u079F\u07A2\u07A4\x9A","N\u07A3\u07A5\u012E\x98\u07A4\u07A3","\u07A4\u07A5\u07A5\u07A7","\u07A6\u07A8^0\u07A7\u07A6","\u07A7\u07A8\u07A8\xD7","\u07A9\u07AA\x07\u015B\u07AA\u07AB\x07","\u07AB\u07AE\u0128\x95\u07AC\u07AD\x07w","\u07AD\u07AF\u0128\x95\u07AE\u07AC","\u07AE\u07AF\u07AF\u07B0","\u07B0\u07B1\x07z\u07B1\u07B2\u012C\x97","\u07B2\u07B6\x07\u07B3\u07B5`1","\u07B4\u07B3\u07B5\u07B8","\u07B6\u07B4\u07B6\u07B7","\u07B7\xD9\u07B8\u07B6","\u07B9\u07BC\xDCo\u07BA\u07BC\xDEp\u07BB","\u07B9\u07BB\u07BA\u07BC","\xDB\u07BD\u07BE\x07(\u07BE","\u07C1\u0152\xAA\u07BF\u07C1\x07)\u07C0","\u07BD\u07C0\u07BF\u07C1","\xDD\u07C2\u07C4\x07*\u07C3","\u07C5\u0158\xAD\u07C4\u07C3\u07C4","\u07C5\u07C5\u07C6\u07C6","\u07C8\u0152\xAA\u07C7\u07C9\u0132\x9A\u07C8","\u07C7\u07C8\u07C9\u07C9","\xDF\u07CA\u07CB\x07\u0114\u07CB","\u07CC\x9AN\u07CC\xE1\u07CD","\u07CE\x07\u0115\u07CE\u07CF\x9AN\u07CF","\xE3\u07D0\u07D1\x07\u0116\u07D1","\u07D2\x9AN\u07D2\xE5\u07D3","\u07D8\x9AN\u07D4\u07D5\x07\u07D5","\u07D7\x9AN\u07D6\u07D4\u07D7","\u07DA\u07D8\u07D6\u07D8","\u07D9\u07D9\xE7\u07DA","\u07D8\u07DB\u07DC\x07\xDA\u07DC","\u07DF\x07\u011E\u07DD\u07DF\x07\xF5\u07DE","\u07DB\u07DE\u07DD\u07DF","\xE9\u07E0\u07E1\x07\xA1\u07E1","\xEB\u07E2\u07E3\x07\u07E3","\xED\u07E4\u07E7\xF0y\u07E5","\u07E7 !\u07E6\u07E4\u07E6\u07E5","\u07E7\xEF\u07E8\u07E9",' "\u07E9\xF1\u07EA\u07EB\x07',"\u07EB\u07EC\xE6t\u07EC\u07ED\x07","\u07ED\xF3\u07EE\u07EF\x07","\u07EF\u07F0\x9AN\u07F0\u07F1\x07","\u07F1\xF5\u07F2\u07F3\x07","\u07F3\u07F4\xA6T\u07F4\u07F5\x07","\u07F5\xF7\u07F6\u07FB","\xFA~\u07F7\u07F8\x07\u07F8\u07FA","\xFA~\u07F9\u07F7\u07FA\u07FD","\u07FB\u07F9\u07FB\u07FC","\u07FC\xF9\u07FD\u07FB","\u07FE\u0800\x9AN\u07FF\u0801","D#\u0800\u07FF\u0800\u0801","\u0801\xFB\u0802\u0803 #","\u0803\xFD\u0804\u0806 $","\u0805\u0807\u0102\x82\u0806\u0805","\u0806\u0807\u0807\u0809","\u0808\u080A\u0104\x83\u0809\u0808","\u0809\u080A\u080A\u08D6","\u080B\u0811\x07\u012D\u080C\u080E\x07\u012E","\u080D\u080F\x07\u012F\u080E\u080D","\u080E\u080F\u080F\u0811","\u0810\u080B\u0810\u080C","\u0811\u0813\u0812\u0814\u0150\xA9","\u0813\u0812\u0813\u0814","\u0814\u0816\u0815\u0817\u0104\x83","\u0816\u0815\u0816\u0817","\u0817\u08D6\u0818\u081A %\u0819","\u081B\u014E\xA8\u081A\u0819\u081A","\u081B\u081B\u081D\u081C","\u081E\u0104\x83\u081D\u081C\u081D","\u081E\u081E\u08D6\u081F","\u0821\x07\u0133\u0820\u0822\u0102\x82\u0821","\u0820\u0821\u0822\u0822","\u08D6\u0823\u08D6 &\u0824\u0826","\u0100\x81\u0825\u0827\u0102\x82\u0826\u0825","\u0826\u0827\u0827\u0829","\u0828\u082A\x07\xAE\u0829\u0828","\u0829\u082A\u082A\u08D6","\u082B\u082D\x07\xAE\u082C\u082E","\u0102\x82\u082D\u082C\u082D\u082E","\u082E\u08D6\u082F\u0830","\x07\xDA\u0830\u08D6\x07\u0135\u0831\u0832"," '\u0832\u0834\u0102\x82\u0833\u0835","\u0106\x84\u0834\u0833\u0834\u0835","\u0835\u08D6\u0836\u0837\x07","\u0138\u0837\u0844\x07\u0136\u0838\u0844\x07","\u013A\u0839\u0844\x07\u0139\u083A\u083B\x07","\u013B\u083B\u0844\x07\u0137\u083C\u083D\x07","\u013B\u083D\u0844\x07\u0136\u083E\u083F\x07","\u0138\u083F\u0840\x07\xDA\u0840\u0844\x07","\u0135\u0841\u0842\x07\u013B\u0842\u0844\x07","\u0135\u0843\u0836\u0843\u0838","\u0843\u0839\u0843\u083A","\u0843\u083C\u0843\u083E","\u0843\u0841\u0844\u0845","\u0845\u0847\u0102\x82\u0846\u0848\x07","\xAE\u0847\u0846\u0847\u0848","\u0848\u08D6\u0849\u084A\x07","\u013C\u084A\u08D6\u0102\x82\u084B\u084D\x07","@\u084C\u084E\u0102\x82\u084D\u084C","\u084D\u084E\u084E\u0850","\u084F\u0851\u0104\x83\u0850\u084F","\u0850\u0851\u0851\u08D6","\u0852\u08D6\x07\xDC\u0853\u0855\x07","\xDE\u0854\u0856\u010E\x88\u0855\u0854","\u0855\u0856\u0856\u08D6","\u0857\u0859\x07\xDF\u0858\u085A","\u010E\x88\u0859\u0858\u0859\u085A","\u085A\u08D6\u085B\u085D\x07","\xE1\u085C\u085E\u010E\x88\u085D\u085C","\u085D\u085E\u085E\u08D6","\u085F\u0861\x07\xE0\u0860\u0862","\u010E\x88\u0861\u0860\u0861\u0862","\u0862\u08D6\u0863\u0864\x07","\xDF\u0864\u0865\x07h\u0865\u0866\x07","\u0156\u0866\u0867\x07\xDE\u0867\u0869\x07","\xE2\u0868\u086A\u010E\x88\u0869\u0868","\u0869\u086A\u086A\u08D6","\u086B\u086C\x07\xDF\u086C\u086D\x07","i\u086D\u086E\x07\u0156\u086E\u086F\x07","\xDE\u086F\u0871\x07\xE2\u0870\u0872","\u010E\x88\u0871\u0870\u0871\u0872","\u0872\u08D6\u0873\u0874\x07","\xDF\u0874\u0875\x07h\u0875\u0876\x07","\xDE\u0876\u0878\x07\xE2\u0877\u0879","\u010E\x88\u0878\u0877\u0878\u0879","\u0879\u08D6\u087A\u087C\x07","\u010D\u087B\u087D\u010E\x88\u087C\u087B","\u087C\u087D\u087D\u08D6","\u087E\u08D6\x07\u013D\u087F\u0886\x07","\u013E\u0880\u0886\x07\u013F\u0881\u0886\x07","\u0140\u0882\u0883\x07\u0144\u0883\u0886\x07","\u0141\u0884\u0886\x07\u0141\u0885\u087F","\u0885\u0880\u0885\u0881","\u0885\u0882\u0885\u0884","\u0886\u0888\u0887\u0889","\u0102\x82\u0888\u0887\u0888\u0889","\u0889\u08D6\u088A\u08D6 ","(\u088B\u088C\x07\u0144\u088C\u08D6\x07","\u013C\u088D\u0892\x07\u0144\u088E\u088F\x07","\xDA\u088F\u0893\x07\u0135\u0890\u0893\x07","\u0136\u0891\u0893\x07\u0137\u0892\u088E","\u0892\u0890\u0892\u0891","\u0892\u0893\u0893\u0895","\u0894\u0896\u0106\x84\u0895\u0894","\u0895\u0896\u0896\u08D6","\u0897\u0899\x07\u0145\u0898\u089A","\u0106\x84\u0899\u0898\u0899\u089A","\u089A\u08D6\u089B\u089D\x07","\u0146\u089C\u089E\u0102\x82\u089D\u089C","\u089D\u089E\u089E\u08A0","\u089F\u08A1\u0106\x84\u08A0\u089F","\u08A0\u08A1\u08A1\u08D6","\u08A2\u08A4\x07\u0147\u08A3\u08A5","\u0106\x84\u08A4\u08A3\u08A4\u08A5","\u08A5\u08D6\u08A6\u08A8\x07","\u0148\u08A7\u08A9\u0106\x84\u08A8\u08A7","\u08A8\u08A9\u08A9\u08D6","\u08AA\u08AB\x07\u0149\u08AB\u08AD","\u013E\xA0\u08AC\u08AE\u0106\x84\u08AD\u08AC","\u08AD\u08AE\u08AE\u08D6","\u08AF\u08B0\x07\u011E\u08B0\u08B2","\u013E\xA0\u08B1\u08B3\u0106\x84\u08B2\u08B1","\u08B2\u08B3\u08B3\u08D6","\u08B4\u08D6\x07\u014A\u08B5\u08D6\x07","\u011A\u08B6\u08D6 )\u08B7\u08D6\x07\u015A","\u08B8\u08D6\x07\u0158\u08B9\u08D6\x07\u0159","\u08BA\u08D6\x07\xB0\u08BB\u08C4\x07\u0149","\u08BC\u08C1\x9AN\u08BD\u08BE\x07","\u08BE\u08C0\x9AN\u08BF\u08BD","\u08C0\u08C3\u08C1\u08BF","\u08C1\u08C2\u08C2\u08C5","\u08C3\u08C1\u08C4\u08BC","\u08C4\u08C5\u08C5\u08D6","\u08C6\u08CF\x07\u011E\u08C7\u08CC\x9A","N\u08C8\u08C9\x07\u08C9\u08CB\x9A","N\u08CA\u08C8\u08CB\u08CE","\u08CC\u08CA\u08CC\u08CD","\u08CD\u08D0\u08CE\u08CC","\u08CF\u08C7\u08CF\u08D0","\u08D0\u08D6\u08D1\u08D3\u0128","\x95\u08D2\u08D4\u0150\xA9\u08D3\u08D2","\u08D3\u08D4\u08D4\u08D6","\u08D5\u0804\u08D5\u0810","\u08D5\u0818\u08D5\u081F","\u08D5\u0823\u08D5\u0824","\u08D5\u082B\u08D5\u082F","\u08D5\u0831\u08D5\u0843","\u08D5\u0849\u08D5\u084B","\u08D5\u0852\u08D5\u0853","\u08D5\u0857\u08D5\u085B","\u08D5\u085F\u08D5\u0863","\u08D5\u086B\u08D5\u0873","\u08D5\u087A\u08D5\u087E","\u08D5\u0885\u08D5\u088A","\u08D5\u088B\u08D5\u088D","\u08D5\u0897\u08D5\u089B","\u08D5\u08A2\u08D5\u08A6","\u08D5\u08AA\u08D5\u08AF","\u08D5\u08B4\u08D5\u08B5","\u08D5\u08B6\u08D5\u08B7","\u08D5\u08B8\u08D5\u08B9","\u08D5\u08BA\u08D5\u08BB","\u08D5\u08C6\u08D5\u08D1","\u08D6\xFF\u08D7\u08DB\x07\u013B","\u08D8\u08D9\x07\u0138\u08D9\u08DB\x07\xDA","\u08DA\u08D7\u08DA\u08D8","\u08DB\u0101\u08DC\u08DF\x07","\u08DD\u08E0\u013A\x9E\u08DE\u08E0\x071","\u08DF\u08DD\u08DF\u08DE","\u08E0\u08E2\u08E1\u08E3\x07\xDA","\u08E2\u08E1\u08E2\u08E3","\u08E3\u08E4\u08E4\u08E5\x07","\u08E5\u0103\u08E6\u08E8 *","\u08E7\u08E6\u08E8\u08E9","\u08E9\u08E7\u08E9\u08EA","\u08EA\u0105\u08EB\u08FA\u0108\x85","\u08EC\u08FA\u010A\x86\u08ED\u08FA\x07\u014D","\u08EE\u08EF\xE8u\u08EF\u08F1\u0110\x89","\u08F0\u08F2\x07\xAE\u08F1\u08F0","\u08F1\u08F2\u08F2\u08FA","\u08F3\u08F7\x07\xAE\u08F4\u08F5\xE8u","\u08F5\u08F6\u0110\x89\u08F6\u08F8","\u08F7\u08F4\u08F7\u08F8","\u08F8\u08FA\u08F9\u08EB","\u08F9\u08EC\u08F9\u08ED","\u08F9\u08EE\u08F9\u08F3","\u08FA\u0107\u08FB\u08FD\x07\xF4","\u08FC\u08FE\x07\xAE\u08FD\u08FC","\u08FD\u08FE\u08FE\u0902","\u08FF\u0900\x07\xAE\u0900\u0902\x07\xF4","\u0901\u08FB\u0901\u08FF","\u0902\u0109\u0903\u0905\x07\u014E","\u0904\u0906\x07\xAE\u0905\u0904","\u0905\u0906\u0906\u090A","\u0907\u0908\x07\xAE\u0908\u090A\x07\u014E","\u0909\u0903\u0909\u0907","\u090A\u010B\u090B\u090C\x07","\u090C\u090D\u0136\x9C\u090D\u090E\x07","\u090E\u010D\u090F\u0910\x07","\u0910\u0911\x070\u0911\u0912\x07","\u0912\u010F\u0913\u0917\u0152\xAA","\u0914\u0917\x07\xAE\u0915\u0917\x07A","\u0916\u0913\u0916\u0914","\u0916\u0915\u0917\u0111","\u0918\u091C\u0152\xAA\u0919\u091C\x07A","\u091A\u091C\x07\xAE\u091B\u0918","\u091B\u0919\u091B\u091A","\u091C\u0113\u091D\u091E\x07\xB4","\u091E\u091F\u0112\x8A\u091F\u0115","\u0920\u0921\xE8u\u0921\u0922\u0110\x89","\u0922\u0117\u0923\u0925\x07\x8F","\u0924\u0926\u011A\x8E\u0925\u0924","\u0926\u0927\u0927\u0925","\u0927\u0928\u0928\u0119","\u0929\u092A\x07\u014F\u092A\u092B\x07W","\u092B\u0936\u0142\xA2\u092C\u092E\x07\u0150","\u092D\u092C\u092D\u092E","\u092E\u092F\u092F\u0930\x07\u0151","\u0930\u0931\x07W\u0931\u0936\u0142\xA2","\u0932\u0933\x07\u0152\u0933\u0934\x07W","\u0934\u0936\u0142\xA2\u0935\u0929","\u0935\u092D\u0935\u0932","\u0936\u011B\u0937\u0939\x07\u0153","\u0938\u093A\u011E\x90\u0939\u0938","\u093A\u093B\u093B\u0939","\u093B\u093C\u093C\u011D","\u093D\u093E +\u093E\u093F\x07W\u093F","\u0940\u0142\xA2\u0940\u011F\u0941","\u0942\x07V\u0942\u0943\u012C\x97\u0943","\u0121\u0944\u0945\x07\u0945","\u094A\u0128\x95\u0946\u0947\x07\u0947","\u0949\u0128\x95\u0948\u0946\u0949","\u094C\u094A\u0948\u094A","\u094B\u094B\u094D\u094C","\u094A\u094D\u094E\x07\u094E","\u0123\u094F\u0954\u012E\x98\u0950","\u0951\x07\u0951\u0953\u012E\x98\u0952","\u0950\u0953\u0956\u0954","\u0952\u0954\u0955\u0955","\u0125\u0956\u0954\u0957","\u0958 ,\u0958\u0127\u0959\u095C","\u0126\x94\u095A\u095C\u015A\xAE\u095B\u0959","\u095B\u095A\u095C\u0129","\u095D\u0962\u0128\x95\u095E\u095F","\x07\u095F\u0961\u0128\x95\u0960\u095E","\u0961\u0964\u0962\u0960","\u0962\u0963\u0963\u012B","\u0964\u0962\u0965\u0966","\x07\u0966\u0967\u012A\x96\u0967\u0968","\x07\u0968\u012D\u0969\u096E","\u0128\x95\u096A\u096B\x07\u096B\u096D","\u0128\x95\u096C\u096A\u096D\u0970","\u096E\u096C\u096E\u096F","\u096F\u0973\u0970\u096E","\u0971\u0972\x07\u0972\u0974","\x07\r\u0973\u0971\u0973\u0974","\u0974\u012F\u0975\u0976","\u012E\x98\u0976\u0977\x07\u0977\u097D","\u0128\x95\u0978\u0979 -\u0979\u097C","\u0128\x95\u097A\u097C\x07\u0164\u097B\u0978","\u097B\u097A\u097C\u097F","\u097D\u097B\u097D\u097E","\u097E\u0982\u097F\u097D","\u0980\u0981\x07-\u0981\u0983","\xFE\x80\u0982\u0980\u0982\u0983","\u0983\u0988\u0984\u0986\x07","\xB4\u0985\u0987\u0128\x95\u0986\u0985","\u0986\u0987\u0987\u0989","\u0988\u0984\u0988\u0989","\u0989\u0131\u098A\u098B\x07","\u098B\u098C\u0128\x95\u098C\u0133","\u098D\u098E .\u098E\u0135","\u098F\u0990 /\u0990\u0137","\u0991\u0992 0\u0992\u0139","\u0993\u0994 /\u0994\u013B\u0995","\u099F\u0144\xA3\u0996\u099F\u0146\xA4\u0997","\u099F\u014C\xA7\u0998\u099F\u014A\xA6\u0999","\u099F\u0148\xA5\u099A\u099C\x07\u015E\u099B","\u099A\u099B\u099C\u099C","\u099D\u099D\u099F 1\u099E\u0995","\u099E\u0996\u099E\u0997","\u099E\u0998\u099E\u0999","\u099E\u099B\u099F\u013D","\u09A0\u09A1\x07\u09A1\u09A6","\u0142\xA2\u09A2\u09A3\x07\u09A3\u09A5","\u0142\xA2\u09A4\u09A2\u09A5\u09A8","\u09A6\u09A4\u09A6\u09A7","\u09A7\u09A9\u09A8\u09A6","\u09A9\u09AA\x07\u09AA\u013F","\u09AB\u09AC 2\u09AC\u0141","\u09AD\u09B1\u0140\xA1\u09AE\u09B1\x07",".\u09AF\u09B1\x07/\u09B0\u09AD","\u09B0\u09AE\u09B0\u09AF","\u09B1\u0143\u09B2\u09B4\x07\u015E","\u09B3\u09B2\u09B3\u09B4","\u09B4\u09B5\u09B5\u09B8\u0140","\xA1\u09B6\u09B8\x07\u0160\u09B7\u09B3","\u09B7\u09B6\u09B8\u09BC","\u09B9\u09BB\u0140\xA1\u09BA\u09B9","\u09BB\u09BE\u09BC\u09BA","\u09BC\u09BD\u09BD\u0145","\u09BE\u09BC\u09BF\u09C0 0","\u09C0\u0147\u09C1\u09C2 3","\u09C2\u0149\u09C3\u09C4 4\u09C4","\u014B\u09C5\u09C6\x07\xDC\u09C6","\u09CC\x07\u0163\u09C7\u09C8\x07\xDE\u09C8","\u09CC\x07\u0163\u09C9\u09CA\x07\xDF\u09CA","\u09CC\x07\u0163\u09CB\u09C5\u09CB","\u09C7\u09CB\u09C9\u09CC","\u014D\u09CD\u09D0\u0102\x82\u09CE","\u09D0\u0150\xA9\u09CF\u09CD\u09CF","\u09CE\u09D0\u014F\u09D1","\u09D2\x07\u09D2\u09D3\x070\u09D3","\u09D4\x07\u09D4\u09D5\x070\u09D5","\u09D6\x07\u09D6\u0151\u09D7","\u09DA\u0128\x95\u09D8\u09DA\u0140\xA1\u09D9","\u09D7\u09D9\u09D8\u09DA","\u0153\u09DB\u09DC\x07\u09DC","\u09DD\x07\u09DD\u0155\u09DE","\u09DF 5\u09DF\u0157\u09E0\u09E1","\x07\u0155\u09E1\u09E7\x07\u09E2\u09E3","\x07\u0156\u09E3\u09E7\x07\u09E4\u09E5","\x07\u0157\u09E5\u09E7\x07\u09E6\u09E0","\u09E6\u09E2\u09E6\u09E4","\u09E7\u0159\u09E8\u09E9"," 6\u09E9\u015B\u0149\u015D\u0162","\u0165\u0169\u016E\u0172\u0177\u017B\u0184\u0189\u018C\u0190\u0193\u0197","\u019A\u019C\u019F\u01A5\u01A9\u01AB\u01AF\u01B3\u01B7\u01BE\u01C0\u01C7","\u01CD\u01D2\u01D5\u01D8\u01DD\u01E1\u01E4\u01E7\u01EA\u01EE\u01FE\u0206","\u020A\u0210\u0213\u0216\u021C\u0221\u0225\u0228\u0230\u0232\u023F\u024B","\u0250\u0253\u0256\u025B\u0261\u0271\u0285\u028E\u0292\u0299\u029E\u02A7","\u02AD\u02B8\u02BF\u02C8\u02D1\u02DB\u02E0\u02E6\u02E9\u02EF\u02F6\u02FA","\u0300\u0305\u0308\u030C\u030E\u0311\u0315\u0321\u0326\u032B\u0332\u033B","\u0343\u0348\u034C\u0352\u0355\u0358\u035C\u0360\u0369\u036D\u0370\u0373","\u0378\u037E\u0381\u0386\u0389\u038B\u0390\u039C\u03A5\u03B1\u03B4\u03B9","\u03C0\u03C4\u03C8\u03CA\u03D8\u03DD\u03E6\u03EC\u03F5\u03F9\u03FD\u0409","\u0410\u0415\u041B\u041E\u0422\u042D\u042F\u0438\u0444\u0446\u044D\u0452","\u0459\u0461\u046C\u0470\u048B\u048D\u048F\u0497\u049B\u04AA\u04B1\u04BF","\u04CB\u04D1\u04D8\u04DB\u04FE\u0509\u050B\u0511\u0516\u051B\u0522\u0528","\u052D\u0532\u0538\u053C\u0541\u0546\u054B\u0550\u0557\u055E\u0565\u056C","\u0571\u0576\u057B\u057F\u0583\u0587\u0589\u059C\u05A0\u05A7\u05B3\u05B6","\u05BA\u05BF\u05C4\u05C8\u05D2\u05DB\u05DD\u05E0\u05E9\u05F0\u05FD\u0602","\u0609\u060F\u0629\u0648\u065C\u0662\u0666\u0681\u068D\u069A\u069E\u06A2","\u06BE\u06F4\u06FE\u0701\u070D\u0712\u071E\u0732\u0736\u0746\u0749\u074E","\u0751\u075A\u075E\u0764\u076A\u076E\u0779\u077F\u0781\u0788\u078F\u0792","\u0794\u0798\u079F\u07A4\u07A7\u07AE\u07B6\u07BB\u07C0\u07C4\u07C8\u07D8","\u07DE\u07E6\u07FB\u0800\u0806\u0809\u080E\u0810\u0813\u0816\u081A\u081D","\u0821\u0826\u0829\u082D\u0834\u0843\u0847\u084D\u0850\u0855\u0859\u085D","\u0861\u0869\u0871\u0878\u087C\u0885\u0888\u0892\u0895\u0899\u089D\u08A0","\u08A4\u08A8\u08AD\u08B2\u08C1\u08C4\u08CC\u08CF\u08D3\u08D5\u08DA\u08DF","\u08E2\u08E9\u08F1\u08F7\u08F9\u08FD\u0901\u0905\u0909\u0916\u091B\u0927","\u092D\u0935\u093B\u094A\u0954\u095B\u0962\u096E\u0973\u097B\u097D\u0982","\u0986\u0988\u099B\u099E\u09A6\u09B0\u09B3\u09B7\u09BC\u09CB\u09CF\u09D9","\u09E6"].join(""),XO=new L.atn.ATNDeserializer().deserialize(MG),mG=XO.decisionToState.map((i,e)=>new L.dfa.DFA(i,e)),_G=new L.PredictionContextCache,t=class t extends L.Parser{constructor(e){super(e),this._interp=new L.atn.ParserATNSimulator(this,XO,mG,_G),this.ruleNames=t.ruleNames,this.literalNames=t.literalNames,this.symbolicNames=t.symbolicNames}get atn(){return XO}sempred(e,u,r){switch(u){case 76:return this.expr_sempred(e,r);case 77:return this.boolPri_sempred(e,r);case 81:return this.bitExpr_sempred(e,r);case 82:return this.simpleExpr_sempred(e,r);default:throw"No predicate with index:"+u}}expr_sempred(e,u){switch(u){case 0:return this.precpred(this._ctx,3);case 1:return this.precpred(this._ctx,2);case 2:return this.precpred(this._ctx,1);default:throw"No predicate with index:"+u}}boolPri_sempred(e,u){switch(u){case 3:return this.precpred(this._ctx,3);case 4:return this.precpred(this._ctx,2);case 5:return this.precpred(this._ctx,1);default:throw"No predicate with index:"+u}}bitExpr_sempred(e,u){switch(u){case 6:return this.precpred(this._ctx,7);case 7:return this.precpred(this._ctx,6);case 8:return this.precpred(this._ctx,4);case 9:return this.precpred(this._ctx,3);case 10:return this.precpred(this._ctx,2);case 11:return this.precpred(this._ctx,5);default:throw"No predicate with index:"+u}}simpleExpr_sempred(e,u){switch(u){case 12:return this.precpred(this._ctx,17);case 13:return this.precpred(this._ctx,23);case 14:return this.precpred(this._ctx,8);default:throw"No predicate with index:"+u}}query(){let e=new u2(this,this._ctx,this.state);this.enterRule(e,0,t.RULE_query);try{this.enterOuterAlt(e,1),this.state=347,this._errHandler.sync(this);var u=this._interp.adaptivePredict(this._input,0,this._ctx);switch(u===1&&(this.state=346,this.withClause()),this.state=349,this.selectStatement(),this.state=355,this._errHandler.sync(this),this._input.LA(1)){case t.SEMICOLON_SYMBOL:this.state=350,this.match(t.SEMICOLON_SYMBOL),this.state=352,this._errHandler.sync(this);var u=this._interp.adaptivePredict(this._input,1,this._ctx);u===1&&(this.state=351,this.match(t.EOF));break;case t.EOF:this.state=354,this.match(t.EOF);break;default:throw new L.error.NoViableAltException(this)}}catch(r){if(r instanceof L.error.RecognitionException)e.exception=r,this._errHandler.reportError(this,r),this._errHandler.recover(this,r);else throw r}finally{this.exitRule()}return e}values(){let e=new t2(this,this._ctx,this.state);this.enterRule(e,2,t.RULE_values);var u=0;try{this.enterOuterAlt(e,1),this.state=359,this._errHandler.sync(this);var r=this._interp.adaptivePredict(this._input,3,this._ctx);switch(r){case 1:this.state=357,this.expr(0);break;case 2:this.state=358,this.match(t.DEFAULT_SYMBOL);break}for(this.state=368,this._errHandler.sync(this),u=this._input.LA(1);u===t.COMMA_SYMBOL;){this.state=361,this.match(t.COMMA_SYMBOL),this.state=364,this._errHandler.sync(this);var r=this._interp.adaptivePredict(this._input,4,this._ctx);switch(r){case 1:this.state=362,this.expr(0);break;case 2:this.state=363,this.match(t.DEFAULT_SYMBOL);break}this.state=370,this._errHandler.sync(this),u=this._input.LA(1)}}catch(a){if(a instanceof L.error.RecognitionException)e.exception=a,this._errHandler.reportError(this,a),this._errHandler.recover(this,a);else throw a}finally{this.exitRule()}return e}selectStatement(){let e=new r2(this,this._ctx,this.state);this.enterRule(e,4,t.RULE_selectStatement);var u=0;try{this.state=377,this._errHandler.sync(this);var r=this._interp.adaptivePredict(this._input,7,this._ctx);switch(r){case 1:this.enterOuterAlt(e,1),this.state=371,this.queryExpression(),this.state=373,this._errHandler.sync(this),u=this._input.LA(1),(u===t.FOR_SYMBOL||u===t.LOCK_SYMBOL)&&(this.state=372,this.lockingClauseList());break;case 2:this.enterOuterAlt(e,2),this.state=375,this.queryExpressionParens();break;case 3:this.enterOuterAlt(e,3),this.state=376,this.selectStatementWithInto();break}}catch(a){if(a instanceof L.error.RecognitionException)e.exception=a,this._errHandler.reportError(this,a),this._errHandler.recover(this,a);else throw a}finally{this.exitRule()}return e}selectStatementWithInto(){let e=new i2(this,this._ctx,this.state);this.enterRule(e,6,t.RULE_selectStatementWithInto);var u=0;try{this.state=391,this._errHandler.sync(this);var r=this._interp.adaptivePredict(this._input,9,this._ctx);switch(r){case 1:this.enterOuterAlt(e,1),this.state=379,this.match(t.OPEN_PAR_SYMBOL),this.state=380,this.selectStatementWithInto(),this.state=381,this.match(t.CLOSE_PAR_SYMBOL);break;case 2:this.enterOuterAlt(e,2),this.state=383,this.queryExpression(),this.state=384,this.intoClause(),this.state=386,this._errHandler.sync(this),u=this._input.LA(1),(u===t.FOR_SYMBOL||u===t.LOCK_SYMBOL)&&(this.state=385,this.lockingClauseList());break;case 3:this.enterOuterAlt(e,3),this.state=388,this.lockingClauseList(),this.state=389,this.intoClause();break}}catch(a){if(a instanceof L.error.RecognitionException)e.exception=a,this._errHandler.reportError(this,a),this._errHandler.recover(this,a);else throw a}finally{this.exitRule()}return e}queryExpression(){let e=new vi(this,this._ctx,this.state);this.enterRule(e,8,t.RULE_queryExpression);var u=0;try{this.enterOuterAlt(e,1),this.state=394,this._errHandler.sync(this),u=this._input.LA(1),u===t.WITH_SYMBOL&&(this.state=393,this.withClause()),this.state=410,this._errHandler.sync(this);var r=this._interp.adaptivePredict(this._input,15,this._ctx);switch(r){case 1:this.state=396,this.queryExpressionBody(),this.state=398,this._errHandler.sync(this),u=this._input.LA(1),u===t.ORDER_SYMBOL&&(this.state=397,this.orderClause()),this.state=401,this._errHandler.sync(this),u=this._input.LA(1),u===t.LIMIT_SYMBOL&&(this.state=400,this.limitClause());break;case 2:this.state=403,this.queryExpressionParens(),this.state=405,this._errHandler.sync(this),u=this._input.LA(1),u===t.ORDER_SYMBOL&&(this.state=404,this.orderClause()),this.state=408,this._errHandler.sync(this),u=this._input.LA(1),u===t.LIMIT_SYMBOL&&(this.state=407,this.limitClause());break}this.state=413,this._errHandler.sync(this),u=this._input.LA(1),u===t.PROCEDURE_SYMBOL&&(this.state=412,this.procedureAnalyseClause())}catch(a){if(a instanceof L.error.RecognitionException)e.exception=a,this._errHandler.reportError(this,a),this._errHandler.recover(this,a);else throw a}finally{this.exitRule()}return e}queryExpressionBody(){let e=new a2(this,this._ctx,this.state);this.enterRule(e,10,t.RULE_queryExpressionBody);var u=0;try{switch(this.enterOuterAlt(e,1),this.state=425,this._errHandler.sync(this),this._input.LA(1)){case t.SELECT_SYMBOL:case t.VALUES_SYMBOL:case t.TABLE_SYMBOL:this.state=415,this.queryPrimary();break;case t.OPEN_PAR_SYMBOL:switch(this.state=416,this.queryExpressionParens(),this.state=417,this.match(t.UNION_SYMBOL),this.state=419,this._errHandler.sync(this),u=this._input.LA(1),(u===t.ALL_SYMBOL||u===t.DISTINCT_SYMBOL)&&(this.state=418,this.unionOption()),this.state=423,this._errHandler.sync(this),this._input.LA(1)){case t.SELECT_SYMBOL:case t.VALUES_SYMBOL:case t.TABLE_SYMBOL:this.state=421,this.queryPrimary();break;case t.OPEN_PAR_SYMBOL:this.state=422,this.queryExpressionParens();break;default:throw new L.error.NoViableAltException(this)}break;default:throw new L.error.NoViableAltException(this)}for(this.state=437,this._errHandler.sync(this),u=this._input.LA(1);u===t.UNION_SYMBOL;){switch(this.state=427,this.match(t.UNION_SYMBOL),this.state=429,this._errHandler.sync(this),u=this._input.LA(1),(u===t.ALL_SYMBOL||u===t.DISTINCT_SYMBOL)&&(this.state=428,this.unionOption()),this.state=433,this._errHandler.sync(this),this._input.LA(1)){case t.SELECT_SYMBOL:case t.VALUES_SYMBOL:case t.TABLE_SYMBOL:this.state=431,this.queryPrimary();break;case t.OPEN_PAR_SYMBOL:this.state=432,this.queryExpressionParens();break;default:throw new L.error.NoViableAltException(this)}this.state=439,this._errHandler.sync(this),u=this._input.LA(1)}}catch(r){if(r instanceof L.error.RecognitionException)e.exception=r,this._errHandler.reportError(this,r),this._errHandler.recover(this,r);else throw r}finally{this.exitRule()}return e}queryExpressionParens(){let e=new Jt(this,this._ctx,this.state);this.enterRule(e,12,t.RULE_queryExpressionParens);var u=0;try{this.enterOuterAlt(e,1),this.state=440,this.match(t.OPEN_PAR_SYMBOL),this.state=446,this._errHandler.sync(this);var r=this._interp.adaptivePredict(this._input,24,this._ctx);switch(r){case 1:this.state=441,this.queryExpressionParens();break;case 2:this.state=442,this.queryExpression(),this.state=444,this._errHandler.sync(this),u=this._input.LA(1),(u===t.FOR_SYMBOL||u===t.LOCK_SYMBOL)&&(this.state=443,this.lockingClauseList());break}this.state=448,this.match(t.CLOSE_PAR_SYMBOL)}catch(a){if(a instanceof L.error.RecognitionException)e.exception=a,this._errHandler.reportError(this,a),this._errHandler.recover(this,a);else throw a}finally{this.exitRule()}return e}queryPrimary(){let e=new ls(this,this._ctx,this.state);this.enterRule(e,14,t.RULE_queryPrimary);try{switch(this.state=453,this._errHandler.sync(this),this._input.LA(1)){case t.SELECT_SYMBOL:this.enterOuterAlt(e,1),this.state=450,this.querySpecification();break;case t.VALUES_SYMBOL:this.enterOuterAlt(e,2),this.state=451,this.tableValueConstructor();break;case t.TABLE_SYMBOL:this.enterOuterAlt(e,3),this.state=452,this.explicitTable();break;default:throw new L.error.NoViableAltException(this)}}catch(u){if(u instanceof L.error.RecognitionException)e.exception=u,this._errHandler.reportError(this,u),this._errHandler.recover(this,u);else throw u}finally{this.exitRule()}return e}querySpecification(){let e=new s2(this,this._ctx,this.state);this.enterRule(e,16,t.RULE_querySpecification);var u=0;try{this.enterOuterAlt(e,1),this.state=455,this.match(t.SELECT_SYMBOL),this.state=459,this._errHandler.sync(this);for(var r=this._interp.adaptivePredict(this._input,26,this._ctx);r!=2&&r!=L.atn.ATN.INVALID_ALT_NUMBER;)r===1&&(this.state=456,this.selectOption()),this.state=461,this._errHandler.sync(this),r=this._interp.adaptivePredict(this._input,26,this._ctx);this.state=462,this.selectItemList(),this.state=464,this._errHandler.sync(this);var a=this._interp.adaptivePredict(this._input,27,this._ctx);for(a===1&&(this.state=463,this.intoClause()),this.state=467,this._errHandler.sync(this),u=this._input.LA(1),u===t.FROM_SYMBOL&&(this.state=466,this.fromClause()),this.state=470,this._errHandler.sync(this),u=this._input.LA(1),u===t.WHERE_SYMBOL&&(this.state=469,this.whereClause()),this.state=475,this._errHandler.sync(this),u=this._input.LA(1);u===t.UNPIVOT_SYMBOL;)this.state=472,this.unpivotClause(),this.state=477,this._errHandler.sync(this),u=this._input.LA(1);this.state=479,this._errHandler.sync(this),u=this._input.LA(1),u===t.QUALIFY_SYMBOL&&(this.state=478,this.qualifyClause()),this.state=482,this._errHandler.sync(this),u=this._input.LA(1),u===t.GROUP_SYMBOL&&(this.state=481,this.groupByClause()),this.state=485,this._errHandler.sync(this),u=this._input.LA(1),u===t.HAVING_SYMBOL&&(this.state=484,this.havingClause()),this.state=488,this._errHandler.sync(this),u=this._input.LA(1),u===t.WINDOW_SYMBOL&&(this.state=487,this.windowClause())}catch(s){if(s instanceof L.error.RecognitionException)e.exception=s,this._errHandler.reportError(this,s),this._errHandler.recover(this,s);else throw s}finally{this.exitRule()}return e}subquery(){let e=new zt(this,this._ctx,this.state);this.enterRule(e,18,t.RULE_subquery);try{this.state=492,this._errHandler.sync(this);var u=this._interp.adaptivePredict(this._input,35,this._ctx);switch(u){case 1:this.enterOuterAlt(e,1),this.state=490,this.query();break;case 2:this.enterOuterAlt(e,2),this.state=491,this.queryExpressionParens();break}}catch(r){if(r instanceof L.error.RecognitionException)e.exception=r,this._errHandler.reportError(this,r),this._errHandler.recover(this,r);else throw r}finally{this.exitRule()}return e}querySpecOption(){let e=new n2(this,this._ctx,this.state);this.enterRule(e,20,t.RULE_querySpecOption);try{this.state=508,this._errHandler.sync(this);var u=this._interp.adaptivePredict(this._input,36,this._ctx);switch(u){case 1:this.enterOuterAlt(e,1),this.state=494,this.match(t.ALL_SYMBOL);break;case 2:this.enterOuterAlt(e,2),this.state=495,this.match(t.DISTINCT_SYMBOL),this.state=496,this.match(t.ON_SYMBOL),this.state=497,this.match(t.OPEN_PAR_SYMBOL),this.state=498,this.qualifiedIdentifier(),this.state=499,this.match(t.CLOSE_PAR_SYMBOL);break;case 3:this.enterOuterAlt(e,3),this.state=501,this.match(t.DISTINCT_SYMBOL);break;case 4:this.enterOuterAlt(e,4),this.state=502,this.match(t.STRAIGHT_JOIN_SYMBOL);break;case 5:this.enterOuterAlt(e,5),this.state=503,this.match(t.HIGH_PRIORITY_SYMBOL);break;case 6:this.enterOuterAlt(e,6),this.state=504,this.match(t.SQL_SMALL_RESULT_SYMBOL);break;case 7:this.enterOuterAlt(e,7),this.state=505,this.match(t.SQL_BIG_RESULT_SYMBOL);break;case 8:this.enterOuterAlt(e,8),this.state=506,this.match(t.SQL_BUFFER_RESULT_SYMBOL);break;case 9:this.enterOuterAlt(e,9),this.state=507,this.match(t.SQL_CALC_FOUND_ROWS_SYMBOL);break}}catch(r){if(r instanceof L.error.RecognitionException)e.exception=r,this._errHandler.reportError(this,r),this._errHandler.recover(this,r);else throw r}finally{this.exitRule()}return e}limitClause(){let e=new o2(this,this._ctx,this.state);this.enterRule(e,22,t.RULE_limitClause);try{this.enterOuterAlt(e,1),this.state=510,this.match(t.LIMIT_SYMBOL),this.state=511,this.limitOptions()}catch(u){if(u instanceof L.error.RecognitionException)e.exception=u,this._errHandler.reportError(this,u),this._errHandler.recover(this,u);else throw u}finally{this.exitRule()}return e}limitOptions(){let e=new l2(this,this._ctx,this.state);this.enterRule(e,24,t.RULE_limitOptions);var u=0;try{this.enterOuterAlt(e,1),this.state=513,this.limitOption(),this.state=516,this._errHandler.sync(this),u=this._input.LA(1),(u===t.COMMA_SYMBOL||u===t.OFFSET_SYMBOL)&&(this.state=514,u=this._input.LA(1),u===t.COMMA_SYMBOL||u===t.OFFSET_SYMBOL?(this._errHandler.reportMatch(this),this.consume()):this._errHandler.recoverInline(this),this.state=515,this.limitOption())}catch(r){if(r instanceof L.error.RecognitionException)e.exception=r,this._errHandler.reportError(this,r),this._errHandler.recover(this,r);else throw r}finally{this.exitRule()}return e}limitOption(){let e=new cs(this,this._ctx,this.state);this.enterRule(e,26,t.RULE_limitOption);var u=0;try{switch(this.state=520,this._errHandler.sync(this),this._input.LA(1)){case t.TINYINT_SYMBOL:case t.SMALLINT_SYMBOL:case t.MEDIUMINT_SYMBOL:case t.BYTE_INT_SYMBOL:case t.INT_SYMBOL:case t.BIGINT_SYMBOL:case t.SECOND_SYMBOL:case t.MINUTE_SYMBOL:case t.HOUR_SYMBOL:case t.DAY_SYMBOL:case t.WEEK_SYMBOL:case t.MONTH_SYMBOL:case t.QUARTER_SYMBOL:case t.YEAR_SYMBOL:case t.DEFAULT_SYMBOL:case t.UNION_SYMBOL:case t.SELECT_SYMBOL:case t.ALL_SYMBOL:case t.DISTINCT_SYMBOL:case t.STRAIGHT_JOIN_SYMBOL:case t.HIGH_PRIORITY_SYMBOL:case t.SQL_SMALL_RESULT_SYMBOL:case t.SQL_BIG_RESULT_SYMBOL:case t.SQL_BUFFER_RESULT_SYMBOL:case t.SQL_CALC_FOUND_ROWS_SYMBOL:case t.LIMIT_SYMBOL:case t.OFFSET_SYMBOL:case t.INTO_SYMBOL:case t.OUTFILE_SYMBOL:case t.DUMPFILE_SYMBOL:case t.PROCEDURE_SYMBOL:case t.ANALYSE_SYMBOL:case t.HAVING_SYMBOL:case t.WINDOW_SYMBOL:case t.AS_SYMBOL:case t.PARTITION_SYMBOL:case t.BY_SYMBOL:case t.ROWS_SYMBOL:case t.RANGE_SYMBOL:case t.GROUPS_SYMBOL:case t.UNBOUNDED_SYMBOL:case t.PRECEDING_SYMBOL:case t.INTERVAL_SYMBOL:case t.CURRENT_SYMBOL:case t.ROW_SYMBOL:case t.BETWEEN_SYMBOL:case t.AND_SYMBOL:case t.FOLLOWING_SYMBOL:case t.EXCLUDE_SYMBOL:case t.GROUP_SYMBOL:case t.TIES_SYMBOL:case t.NO_SYMBOL:case t.OTHERS_SYMBOL:case t.WITH_SYMBOL:case t.WITHOUT_SYMBOL:case t.RECURSIVE_SYMBOL:case t.ROLLUP_SYMBOL:case t.CUBE_SYMBOL:case t.ORDER_SYMBOL:case t.ASC_SYMBOL:case t.DESC_SYMBOL:case t.FROM_SYMBOL:case t.DUAL_SYMBOL:case t.VALUES_SYMBOL:case t.TABLE_SYMBOL:case t.SQL_NO_CACHE_SYMBOL:case t.SQL_CACHE_SYMBOL:case t.MAX_STATEMENT_TIME_SYMBOL:case t.FOR_SYMBOL:case t.OF_SYMBOL:case t.LOCK_SYMBOL:case t.IN_SYMBOL:case t.SHARE_SYMBOL:case t.MODE_SYMBOL:case t.UPDATE_SYMBOL:case t.SKIP_SYMBOL:case t.LOCKED_SYMBOL:case t.NOWAIT_SYMBOL:case t.WHERE_SYMBOL:case t.OJ_SYMBOL:case t.ON_SYMBOL:case t.USING_SYMBOL:case t.NATURAL_SYMBOL:case t.INNER_SYMBOL:case t.JOIN_SYMBOL:case t.LEFT_SYMBOL:case t.RIGHT_SYMBOL:case t.OUTER_SYMBOL:case t.CROSS_SYMBOL:case t.LATERAL_SYMBOL:case t.JSON_TABLE_SYMBOL:case t.COLUMNS_SYMBOL:case t.ORDINALITY_SYMBOL:case t.EXISTS_SYMBOL:case t.PATH_SYMBOL:case t.NESTED_SYMBOL:case t.EMPTY_SYMBOL:case t.ERROR_SYMBOL:case t.NULL_SYMBOL:case t.USE_SYMBOL:case t.FORCE_SYMBOL:case t.IGNORE_SYMBOL:case t.KEY_SYMBOL:case t.INDEX_SYMBOL:case t.PRIMARY_SYMBOL:case t.IS_SYMBOL:case t.TRUE_SYMBOL:case t.FALSE_SYMBOL:case t.UNKNOWN_SYMBOL:case t.NOT_SYMBOL:case t.XOR_SYMBOL:case t.OR_SYMBOL:case t.ANY_SYMBOL:case t.MEMBER_SYMBOL:case t.SOUNDS_SYMBOL:case t.LIKE_SYMBOL:case t.ESCAPE_SYMBOL:case t.REGEXP_SYMBOL:case t.DIV_SYMBOL:case t.MOD_SYMBOL:case t.MATCH_SYMBOL:case t.AGAINST_SYMBOL:case t.BINARY_SYMBOL:case t.CAST_SYMBOL:case t.ARRAY_SYMBOL:case t.CASE_SYMBOL:case t.END_SYMBOL:case t.CONVERT_SYMBOL:case t.COLLATE_SYMBOL:case t.AVG_SYMBOL:case t.BIT_AND_SYMBOL:case t.BIT_OR_SYMBOL:case t.BIT_XOR_SYMBOL:case t.COUNT_SYMBOL:case t.MIN_SYMBOL:case t.MAX_SYMBOL:case t.STD_SYMBOL:case t.VARIANCE_SYMBOL:case t.STDDEV_SAMP_SYMBOL:case t.VAR_SAMP_SYMBOL:case t.SUM_SYMBOL:case t.GROUP_CONCAT_SYMBOL:case t.SEPARATOR_SYMBOL:case t.GROUPING_SYMBOL:case t.ROW_NUMBER_SYMBOL:case t.RANK_SYMBOL:case t.DENSE_RANK_SYMBOL:case t.CUME_DIST_SYMBOL:case t.PERCENT_RANK_SYMBOL:case t.NTILE_SYMBOL:case t.LEAD_SYMBOL:case t.LAG_SYMBOL:case t.FIRST_VALUE_SYMBOL:case t.LAST_VALUE_SYMBOL:case t.NTH_VALUE_SYMBOL:case t.FIRST_SYMBOL:case t.LAST_SYMBOL:case t.OVER_SYMBOL:case t.RESPECT_SYMBOL:case t.NULLS_SYMBOL:case t.JSON_ARRAYAGG_SYMBOL:case t.JSON_OBJECTAGG_SYMBOL:case t.BOOLEAN_SYMBOL:case t.LANGUAGE_SYMBOL:case t.QUERY_SYMBOL:case t.EXPANSION_SYMBOL:case t.CHAR_SYMBOL:case t.CURRENT_USER_SYMBOL:case t.DATE_SYMBOL:case t.INSERT_SYMBOL:case t.TIME_SYMBOL:case t.TIMESTAMP_SYMBOL:case t.TIMESTAMP_LTZ_SYMBOL:case t.TIMESTAMP_NTZ_SYMBOL:case t.ZONE_SYMBOL:case t.USER_SYMBOL:case t.ADDDATE_SYMBOL:case t.SUBDATE_SYMBOL:case t.CURDATE_SYMBOL:case t.CURTIME_SYMBOL:case t.DATE_ADD_SYMBOL:case t.DATE_SUB_SYMBOL:case t.EXTRACT_SYMBOL:case t.GET_FORMAT_SYMBOL:case t.NOW_SYMBOL:case t.POSITION_SYMBOL:case t.SYSDATE_SYMBOL:case t.TIMESTAMP_ADD_SYMBOL:case t.TIMESTAMP_DIFF_SYMBOL:case t.UTC_DATE_SYMBOL:case t.UTC_TIME_SYMBOL:case t.UTC_TIMESTAMP_SYMBOL:case t.ASCII_SYMBOL:case t.CHARSET_SYMBOL:case t.COALESCE_SYMBOL:case t.COLLATION_SYMBOL:case t.DATABASE_SYMBOL:case t.IF_SYMBOL:case t.FORMAT_SYMBOL:case t.MICROSECOND_SYMBOL:case t.OLD_PASSWORD_SYMBOL:case t.PASSWORD_SYMBOL:case t.REPEAT_SYMBOL:case t.REPLACE_SYMBOL:case t.REVERSE_SYMBOL:case t.ROW_COUNT_SYMBOL:case t.TRUNCATE_SYMBOL:case t.WEIGHT_STRING_SYMBOL:case t.CONTAINS_SYMBOL:case t.GEOMETRYCOLLECTION_SYMBOL:case t.LINESTRING_SYMBOL:case t.MULTILINESTRING_SYMBOL:case t.MULTIPOINT_SYMBOL:case t.MULTIPOLYGON_SYMBOL:case t.POINT_SYMBOL:case t.POLYGON_SYMBOL:case t.LEVEL_SYMBOL:case t.DATETIME_SYMBOL:case t.TRIM_SYMBOL:case t.LEADING_SYMBOL:case t.TRAILING_SYMBOL:case t.BOTH_SYMBOL:case t.STRING_SYMBOL:case t.SUBSTRING_SYMBOL:case t.WHEN_SYMBOL:case t.THEN_SYMBOL:case t.ELSE_SYMBOL:case t.SIGNED_SYMBOL:case t.UNSIGNED_SYMBOL:case t.DECIMAL_SYMBOL:case t.JSON_SYMBOL:case t.FLOAT_SYMBOL:case t.FLOAT_SYMBOL_4:case t.FLOAT_SYMBOL_8:case t.SET_SYMBOL:case t.SECOND_MICROSECOND_SYMBOL:case t.MINUTE_MICROSECOND_SYMBOL:case t.MINUTE_SECOND_SYMBOL:case t.HOUR_MICROSECOND_SYMBOL:case t.HOUR_SECOND_SYMBOL:case t.HOUR_MINUTE_SYMBOL:case t.DAY_MICROSECOND_SYMBOL:case t.DAY_SECOND_SYMBOL:case t.DAY_MINUTE_SYMBOL:case t.DAY_HOUR_SYMBOL:case t.YEAR_MONTH_SYMBOL:case t.BTREE_SYMBOL:case t.RTREE_SYMBOL:case t.HASH_SYMBOL:case t.REAL_SYMBOL:case t.DOUBLE_SYMBOL:case t.PRECISION_SYMBOL:case t.NUMERIC_SYMBOL:case t.NUMBER_SYMBOL:case t.FIXED_SYMBOL:case t.BIT_SYMBOL:case t.BOOL_SYMBOL:case t.VARYING_SYMBOL:case t.VARCHAR_SYMBOL:case t.VARCHAR2_SYMBOL:case t.NATIONAL_SYMBOL:case t.NVARCHAR_SYMBOL:case t.NVARCHAR2_SYMBOL:case t.NCHAR_SYMBOL:case t.VARBINARY_SYMBOL:case t.TINYBLOB_SYMBOL:case t.BLOB_SYMBOL:case t.CLOB_SYMBOL:case t.BFILE_SYMBOL:case t.RAW_SYMBOL:case t.MEDIUMBLOB_SYMBOL:case t.LONGBLOB_SYMBOL:case t.LONG_SYMBOL:case t.TINYTEXT_SYMBOL:case t.TEXT_SYMBOL:case t.MEDIUMTEXT_SYMBOL:case t.LONGTEXT_SYMBOL:case t.ENUM_SYMBOL:case t.SERIAL_SYMBOL:case t.GEOMETRY_SYMBOL:case t.ZEROFILL_SYMBOL:case t.BYTE_SYMBOL:case t.UNICODE_SYMBOL:case t.TERMINATED_SYMBOL:case t.OPTIONALLY_SYMBOL:case t.ENCLOSED_SYMBOL:case t.ESCAPED_SYMBOL:case t.LINES_SYMBOL:case t.STARTING_SYMBOL:case t.GLOBAL_SYMBOL:case t.LOCAL_SYMBOL:case t.SESSION_SYMBOL:case t.VARIANT_SYMBOL:case t.OBJECT_SYMBOL:case t.GEOGRAPHY_SYMBOL:case t.UNDERSCORE_CHARSET:case t.IDENTIFIER:case t.BACK_TICK_QUOTED_ID:case t.DOUBLE_QUOTED_TEXT:case t.SINGLE_QUOTED_TEXT:case t.BRACKET_QUOTED_TEXT:case t.CURLY_BRACES_QUOTED_TEXT:this.enterOuterAlt(e,1),this.state=518,this.identifier();break;case t.PARAM_MARKER:case t.INT_NUMBER:this.enterOuterAlt(e,2),this.state=519,u=this._input.LA(1),u===t.PARAM_MARKER||u===t.INT_NUMBER?(this._errHandler.reportMatch(this),this.consume()):this._errHandler.recoverInline(this);break;default:throw new L.error.NoViableAltException(this)}}catch(r){if(r instanceof L.error.RecognitionException)e.exception=r,this._errHandler.reportError(this,r),this._errHandler.recover(this,r);else throw r}finally{this.exitRule()}return e}intoClause(){let e=new ds(this,this._ctx,this.state);this.enterRule(e,28,t.RULE_intoClause);var u=0;try{this.enterOuterAlt(e,1),this.state=522,this.match(t.INTO_SYMBOL),this.state=550,this._errHandler.sync(this);var r=this._interp.adaptivePredict(this._input,45,this._ctx);switch(r){case 1:this.state=523,this.match(t.OUTFILE_SYMBOL),this.state=524,this.textStringLiteral(),this.state=526,this._errHandler.sync(this),u=this._input.LA(1),(u===t.CHAR_SYMBOL||u===t.CHARSET_SYMBOL)&&(this.state=525,this.charsetClause()),this.state=529,this._errHandler.sync(this),u=this._input.LA(1),u===t.COLUMNS_SYMBOL&&(this.state=528,this.fieldsClause()),this.state=532,this._errHandler.sync(this),u=this._input.LA(1),u===t.LINES_SYMBOL&&(this.state=531,this.linesClause());break;case 2:this.state=534,this.match(t.DUMPFILE_SYMBOL),this.state=535,this.textStringLiteral();break;case 3:switch(this.state=538,this._errHandler.sync(this),this._input.LA(1)){case t.TINYINT_SYMBOL:case t.SMALLINT_SYMBOL:case t.MEDIUMINT_SYMBOL:case t.BYTE_INT_SYMBOL:case t.INT_SYMBOL:case t.BIGINT_SYMBOL:case t.SECOND_SYMBOL:case t.MINUTE_SYMBOL:case t.HOUR_SYMBOL:case t.DAY_SYMBOL:case t.WEEK_SYMBOL:case t.MONTH_SYMBOL:case t.QUARTER_SYMBOL:case t.YEAR_SYMBOL:case t.DEFAULT_SYMBOL:case t.UNION_SYMBOL:case t.SELECT_SYMBOL:case t.ALL_SYMBOL:case t.DISTINCT_SYMBOL:case t.STRAIGHT_JOIN_SYMBOL:case t.HIGH_PRIORITY_SYMBOL:case t.SQL_SMALL_RESULT_SYMBOL:case t.SQL_BIG_RESULT_SYMBOL:case t.SQL_BUFFER_RESULT_SYMBOL:case t.SQL_CALC_FOUND_ROWS_SYMBOL:case t.LIMIT_SYMBOL:case t.OFFSET_SYMBOL:case t.INTO_SYMBOL:case t.OUTFILE_SYMBOL:case t.DUMPFILE_SYMBOL:case t.PROCEDURE_SYMBOL:case t.ANALYSE_SYMBOL:case t.HAVING_SYMBOL:case t.WINDOW_SYMBOL:case t.AS_SYMBOL:case t.PARTITION_SYMBOL:case t.BY_SYMBOL:case t.ROWS_SYMBOL:case t.RANGE_SYMBOL:case t.GROUPS_SYMBOL:case t.UNBOUNDED_SYMBOL:case t.PRECEDING_SYMBOL:case t.INTERVAL_SYMBOL:case t.CURRENT_SYMBOL:case t.ROW_SYMBOL:case t.BETWEEN_SYMBOL:case t.AND_SYMBOL:case t.FOLLOWING_SYMBOL:case t.EXCLUDE_SYMBOL:case t.GROUP_SYMBOL:case t.TIES_SYMBOL:case t.NO_SYMBOL:case t.OTHERS_SYMBOL:case t.WITH_SYMBOL:case t.WITHOUT_SYMBOL:case t.RECURSIVE_SYMBOL:case t.ROLLUP_SYMBOL:case t.CUBE_SYMBOL:case t.ORDER_SYMBOL:case t.ASC_SYMBOL:case t.DESC_SYMBOL:case t.FROM_SYMBOL:case t.DUAL_SYMBOL:case t.VALUES_SYMBOL:case t.TABLE_SYMBOL:case t.SQL_NO_CACHE_SYMBOL:case t.SQL_CACHE_SYMBOL:case t.MAX_STATEMENT_TIME_SYMBOL:case t.FOR_SYMBOL:case t.OF_SYMBOL:case t.LOCK_SYMBOL:case t.IN_SYMBOL:case t.SHARE_SYMBOL:case t.MODE_SYMBOL:case t.UPDATE_SYMBOL:case t.SKIP_SYMBOL:case t.LOCKED_SYMBOL:case t.NOWAIT_SYMBOL:case t.WHERE_SYMBOL:case t.OJ_SYMBOL:case t.ON_SYMBOL:case t.USING_SYMBOL:case t.NATURAL_SYMBOL:case t.INNER_SYMBOL:case t.JOIN_SYMBOL:case t.LEFT_SYMBOL:case t.RIGHT_SYMBOL:case t.OUTER_SYMBOL:case t.CROSS_SYMBOL:case t.LATERAL_SYMBOL:case t.JSON_TABLE_SYMBOL:case t.COLUMNS_SYMBOL:case t.ORDINALITY_SYMBOL:case t.EXISTS_SYMBOL:case t.PATH_SYMBOL:case t.NESTED_SYMBOL:case t.EMPTY_SYMBOL:case t.ERROR_SYMBOL:case t.NULL_SYMBOL:case t.USE_SYMBOL:case t.FORCE_SYMBOL:case t.IGNORE_SYMBOL:case t.KEY_SYMBOL:case t.INDEX_SYMBOL:case t.PRIMARY_SYMBOL:case t.IS_SYMBOL:case t.TRUE_SYMBOL:case t.FALSE_SYMBOL:case t.UNKNOWN_SYMBOL:case t.NOT_SYMBOL:case t.XOR_SYMBOL:case t.OR_SYMBOL:case t.ANY_SYMBOL:case t.MEMBER_SYMBOL:case t.SOUNDS_SYMBOL:case t.LIKE_SYMBOL:case t.ESCAPE_SYMBOL:case t.REGEXP_SYMBOL:case t.DIV_SYMBOL:case t.MOD_SYMBOL:case t.MATCH_SYMBOL:case t.AGAINST_SYMBOL:case t.BINARY_SYMBOL:case t.CAST_SYMBOL:case t.ARRAY_SYMBOL:case t.CASE_SYMBOL:case t.END_SYMBOL:case t.CONVERT_SYMBOL:case t.COLLATE_SYMBOL:case t.AVG_SYMBOL:case t.BIT_AND_SYMBOL:case t.BIT_OR_SYMBOL:case t.BIT_XOR_SYMBOL:case t.COUNT_SYMBOL:case t.MIN_SYMBOL:case t.MAX_SYMBOL:case t.STD_SYMBOL:case t.VARIANCE_SYMBOL:case t.STDDEV_SAMP_SYMBOL:case t.VAR_SAMP_SYMBOL:case t.SUM_SYMBOL:case t.GROUP_CONCAT_SYMBOL:case t.SEPARATOR_SYMBOL:case t.GROUPING_SYMBOL:case t.ROW_NUMBER_SYMBOL:case t.RANK_SYMBOL:case t.DENSE_RANK_SYMBOL:case t.CUME_DIST_SYMBOL:case t.PERCENT_RANK_SYMBOL:case t.NTILE_SYMBOL:case t.LEAD_SYMBOL:case t.LAG_SYMBOL:case t.FIRST_VALUE_SYMBOL:case t.LAST_VALUE_SYMBOL:case t.NTH_VALUE_SYMBOL:case t.FIRST_SYMBOL:case t.LAST_SYMBOL:case t.OVER_SYMBOL:case t.RESPECT_SYMBOL:case t.NULLS_SYMBOL:case t.JSON_ARRAYAGG_SYMBOL:case t.JSON_OBJECTAGG_SYMBOL:case t.BOOLEAN_SYMBOL:case t.LANGUAGE_SYMBOL:case t.QUERY_SYMBOL:case t.EXPANSION_SYMBOL:case t.CHAR_SYMBOL:case t.CURRENT_USER_SYMBOL:case t.DATE_SYMBOL:case t.INSERT_SYMBOL:case t.TIME_SYMBOL:case t.TIMESTAMP_SYMBOL:case t.TIMESTAMP_LTZ_SYMBOL:case t.TIMESTAMP_NTZ_SYMBOL:case t.ZONE_SYMBOL:case t.USER_SYMBOL:case t.ADDDATE_SYMBOL:case t.SUBDATE_SYMBOL:case t.CURDATE_SYMBOL:case t.CURTIME_SYMBOL:case t.DATE_ADD_SYMBOL:case t.DATE_SUB_SYMBOL:case t.EXTRACT_SYMBOL:case t.GET_FORMAT_SYMBOL:case t.NOW_SYMBOL:case t.POSITION_SYMBOL:case t.SYSDATE_SYMBOL:case t.TIMESTAMP_ADD_SYMBOL:case t.TIMESTAMP_DIFF_SYMBOL:case t.UTC_DATE_SYMBOL:case t.UTC_TIME_SYMBOL:case t.UTC_TIMESTAMP_SYMBOL:case t.ASCII_SYMBOL:case t.CHARSET_SYMBOL:case t.COALESCE_SYMBOL:case t.COLLATION_SYMBOL:case t.DATABASE_SYMBOL:case t.IF_SYMBOL:case t.FORMAT_SYMBOL:case t.MICROSECOND_SYMBOL:case t.OLD_PASSWORD_SYMBOL:case t.PASSWORD_SYMBOL:case t.REPEAT_SYMBOL:case t.REPLACE_SYMBOL:case t.REVERSE_SYMBOL:case t.ROW_COUNT_SYMBOL:case t.TRUNCATE_SYMBOL:case t.WEIGHT_STRING_SYMBOL:case t.CONTAINS_SYMBOL:case t.GEOMETRYCOLLECTION_SYMBOL:case t.LINESTRING_SYMBOL:case t.MULTILINESTRING_SYMBOL:case t.MULTIPOINT_SYMBOL:case t.MULTIPOLYGON_SYMBOL:case t.POINT_SYMBOL:case t.POLYGON_SYMBOL:case t.LEVEL_SYMBOL:case t.DATETIME_SYMBOL:case t.TRIM_SYMBOL:case t.LEADING_SYMBOL:case t.TRAILING_SYMBOL:case t.BOTH_SYMBOL:case t.STRING_SYMBOL:case t.SUBSTRING_SYMBOL:case t.WHEN_SYMBOL:case t.THEN_SYMBOL:case t.ELSE_SYMBOL:case t.SIGNED_SYMBOL:case t.UNSIGNED_SYMBOL:case t.DECIMAL_SYMBOL:case t.JSON_SYMBOL:case t.FLOAT_SYMBOL:case t.FLOAT_SYMBOL_4:case t.FLOAT_SYMBOL_8:case t.SET_SYMBOL:case t.SECOND_MICROSECOND_SYMBOL:case t.MINUTE_MICROSECOND_SYMBOL:case t.MINUTE_SECOND_SYMBOL:case t.HOUR_MICROSECOND_SYMBOL:case t.HOUR_SECOND_SYMBOL:case t.HOUR_MINUTE_SYMBOL:case t.DAY_MICROSECOND_SYMBOL:case t.DAY_SECOND_SYMBOL:case t.DAY_MINUTE_SYMBOL:case t.DAY_HOUR_SYMBOL:case t.YEAR_MONTH_SYMBOL:case t.BTREE_SYMBOL:case t.RTREE_SYMBOL:case t.HASH_SYMBOL:case t.REAL_SYMBOL:case t.DOUBLE_SYMBOL:case t.PRECISION_SYMBOL:case t.NUMERIC_SYMBOL:case t.NUMBER_SYMBOL:case t.FIXED_SYMBOL:case t.BIT_SYMBOL:case t.BOOL_SYMBOL:case t.VARYING_SYMBOL:case t.VARCHAR_SYMBOL:case t.VARCHAR2_SYMBOL:case t.NATIONAL_SYMBOL:case t.NVARCHAR_SYMBOL:case t.NVARCHAR2_SYMBOL:case t.NCHAR_SYMBOL:case t.VARBINARY_SYMBOL:case t.TINYBLOB_SYMBOL:case t.BLOB_SYMBOL:case t.CLOB_SYMBOL:case t.BFILE_SYMBOL:case t.RAW_SYMBOL:case t.MEDIUMBLOB_SYMBOL:case t.LONGBLOB_SYMBOL:case t.LONG_SYMBOL:case t.TINYTEXT_SYMBOL:case t.TEXT_SYMBOL:case t.MEDIUMTEXT_SYMBOL:case t.LONGTEXT_SYMBOL:case t.ENUM_SYMBOL:case t.SERIAL_SYMBOL:case t.GEOMETRY_SYMBOL:case t.ZEROFILL_SYMBOL:case t.BYTE_SYMBOL:case t.UNICODE_SYMBOL:case t.TERMINATED_SYMBOL:case t.OPTIONALLY_SYMBOL:case t.ENCLOSED_SYMBOL:case t.ESCAPED_SYMBOL:case t.LINES_SYMBOL:case t.STARTING_SYMBOL:case t.GLOBAL_SYMBOL:case t.LOCAL_SYMBOL:case t.SESSION_SYMBOL:case t.VARIANT_SYMBOL:case t.OBJECT_SYMBOL:case t.GEOGRAPHY_SYMBOL:case t.UNDERSCORE_CHARSET:case t.IDENTIFIER:case t.BACK_TICK_QUOTED_ID:case t.DOUBLE_QUOTED_TEXT:case t.SINGLE_QUOTED_TEXT:case t.BRACKET_QUOTED_TEXT:case t.CURLY_BRACES_QUOTED_TEXT:this.state=536,this.textOrIdentifier();break;case t.AT_SIGN_SYMBOL:case t.AT_TEXT_SUFFIX:this.state=537,this.userVariable();break;default:throw new L.error.NoViableAltException(this)}for(this.state=547,this._errHandler.sync(this),u=this._input.LA(1);u===t.COMMA_SYMBOL;){switch(this.state=540,this.match(t.COMMA_SYMBOL),this.state=543,this._errHandler.sync(this),this._input.LA(1)){case t.TINYINT_SYMBOL:case t.SMALLINT_SYMBOL:case t.MEDIUMINT_SYMBOL:case t.BYTE_INT_SYMBOL:case t.INT_SYMBOL:case t.BIGINT_SYMBOL:case t.SECOND_SYMBOL:case t.MINUTE_SYMBOL:case t.HOUR_SYMBOL:case t.DAY_SYMBOL:case t.WEEK_SYMBOL:case t.MONTH_SYMBOL:case t.QUARTER_SYMBOL:case t.YEAR_SYMBOL:case t.DEFAULT_SYMBOL:case t.UNION_SYMBOL:case t.SELECT_SYMBOL:case t.ALL_SYMBOL:case t.DISTINCT_SYMBOL:case t.STRAIGHT_JOIN_SYMBOL:case t.HIGH_PRIORITY_SYMBOL:case t.SQL_SMALL_RESULT_SYMBOL:case t.SQL_BIG_RESULT_SYMBOL:case t.SQL_BUFFER_RESULT_SYMBOL:case t.SQL_CALC_FOUND_ROWS_SYMBOL:case t.LIMIT_SYMBOL:case t.OFFSET_SYMBOL:case t.INTO_SYMBOL:case t.OUTFILE_SYMBOL:case t.DUMPFILE_SYMBOL:case t.PROCEDURE_SYMBOL:case t.ANALYSE_SYMBOL:case t.HAVING_SYMBOL:case t.WINDOW_SYMBOL:case t.AS_SYMBOL:case t.PARTITION_SYMBOL:case t.BY_SYMBOL:case t.ROWS_SYMBOL:case t.RANGE_SYMBOL:case t.GROUPS_SYMBOL:case t.UNBOUNDED_SYMBOL:case t.PRECEDING_SYMBOL:case t.INTERVAL_SYMBOL:case t.CURRENT_SYMBOL:case t.ROW_SYMBOL:case t.BETWEEN_SYMBOL:case t.AND_SYMBOL:case t.FOLLOWING_SYMBOL:case t.EXCLUDE_SYMBOL:case t.GROUP_SYMBOL:case t.TIES_SYMBOL:case t.NO_SYMBOL:case t.OTHERS_SYMBOL:case t.WITH_SYMBOL:case t.WITHOUT_SYMBOL:case t.RECURSIVE_SYMBOL:case t.ROLLUP_SYMBOL:case t.CUBE_SYMBOL:case t.ORDER_SYMBOL:case t.ASC_SYMBOL:case t.DESC_SYMBOL:case t.FROM_SYMBOL:case t.DUAL_SYMBOL:case t.VALUES_SYMBOL:case t.TABLE_SYMBOL:case t.SQL_NO_CACHE_SYMBOL:case t.SQL_CACHE_SYMBOL:case t.MAX_STATEMENT_TIME_SYMBOL:case t.FOR_SYMBOL:case t.OF_SYMBOL:case t.LOCK_SYMBOL:case t.IN_SYMBOL:case t.SHARE_SYMBOL:case t.MODE_SYMBOL:case t.UPDATE_SYMBOL:case t.SKIP_SYMBOL:case t.LOCKED_SYMBOL:case t.NOWAIT_SYMBOL:case t.WHERE_SYMBOL:case t.OJ_SYMBOL:case t.ON_SYMBOL:case t.USING_SYMBOL:case t.NATURAL_SYMBOL:case t.INNER_SYMBOL:case t.JOIN_SYMBOL:case t.LEFT_SYMBOL:case t.RIGHT_SYMBOL:case t.OUTER_SYMBOL:case t.CROSS_SYMBOL:case t.LATERAL_SYMBOL:case t.JSON_TABLE_SYMBOL:case t.COLUMNS_SYMBOL:case t.ORDINALITY_SYMBOL:case t.EXISTS_SYMBOL:case t.PATH_SYMBOL:case t.NESTED_SYMBOL:case t.EMPTY_SYMBOL:case t.ERROR_SYMBOL:case t.NULL_SYMBOL:case t.USE_SYMBOL:case t.FORCE_SYMBOL:case t.IGNORE_SYMBOL:case t.KEY_SYMBOL:case t.INDEX_SYMBOL:case t.PRIMARY_SYMBOL:case t.IS_SYMBOL:case t.TRUE_SYMBOL:case t.FALSE_SYMBOL:case t.UNKNOWN_SYMBOL:case t.NOT_SYMBOL:case t.XOR_SYMBOL:case t.OR_SYMBOL:case t.ANY_SYMBOL:case t.MEMBER_SYMBOL:case t.SOUNDS_SYMBOL:case t.LIKE_SYMBOL:case t.ESCAPE_SYMBOL:case t.REGEXP_SYMBOL:case t.DIV_SYMBOL:case t.MOD_SYMBOL:case t.MATCH_SYMBOL:case t.AGAINST_SYMBOL:case t.BINARY_SYMBOL:case t.CAST_SYMBOL:case t.ARRAY_SYMBOL:case t.CASE_SYMBOL:case t.END_SYMBOL:case t.CONVERT_SYMBOL:case t.COLLATE_SYMBOL:case t.AVG_SYMBOL:case t.BIT_AND_SYMBOL:case t.BIT_OR_SYMBOL:case t.BIT_XOR_SYMBOL:case t.COUNT_SYMBOL:case t.MIN_SYMBOL:case t.MAX_SYMBOL:case t.STD_SYMBOL:case t.VARIANCE_SYMBOL:case t.STDDEV_SAMP_SYMBOL:case t.VAR_SAMP_SYMBOL:case t.SUM_SYMBOL:case t.GROUP_CONCAT_SYMBOL:case t.SEPARATOR_SYMBOL:case t.GROUPING_SYMBOL:case t.ROW_NUMBER_SYMBOL:case t.RANK_SYMBOL:case t.DENSE_RANK_SYMBOL:case t.CUME_DIST_SYMBOL:case t.PERCENT_RANK_SYMBOL:case t.NTILE_SYMBOL:case t.LEAD_SYMBOL:case t.LAG_SYMBOL:case t.FIRST_VALUE_SYMBOL:case t.LAST_VALUE_SYMBOL:case t.NTH_VALUE_SYMBOL:case t.FIRST_SYMBOL:case t.LAST_SYMBOL:case t.OVER_SYMBOL:case t.RESPECT_SYMBOL:case t.NULLS_SYMBOL:case t.JSON_ARRAYAGG_SYMBOL:case t.JSON_OBJECTAGG_SYMBOL:case t.BOOLEAN_SYMBOL:case t.LANGUAGE_SYMBOL:case t.QUERY_SYMBOL:case t.EXPANSION_SYMBOL:case t.CHAR_SYMBOL:case t.CURRENT_USER_SYMBOL:case t.DATE_SYMBOL:case t.INSERT_SYMBOL:case t.TIME_SYMBOL:case t.TIMESTAMP_SYMBOL:case t.TIMESTAMP_LTZ_SYMBOL:case t.TIMESTAMP_NTZ_SYMBOL:case t.ZONE_SYMBOL:case t.USER_SYMBOL:case t.ADDDATE_SYMBOL:case t.SUBDATE_SYMBOL:case t.CURDATE_SYMBOL:case t.CURTIME_SYMBOL:case t.DATE_ADD_SYMBOL:case t.DATE_SUB_SYMBOL:case t.EXTRACT_SYMBOL:case t.GET_FORMAT_SYMBOL:case t.NOW_SYMBOL:case t.POSITION_SYMBOL:case t.SYSDATE_SYMBOL:case t.TIMESTAMP_ADD_SYMBOL:case t.TIMESTAMP_DIFF_SYMBOL:case t.UTC_DATE_SYMBOL:case t.UTC_TIME_SYMBOL:case t.UTC_TIMESTAMP_SYMBOL:case t.ASCII_SYMBOL:case t.CHARSET_SYMBOL:case t.COALESCE_SYMBOL:case t.COLLATION_SYMBOL:case t.DATABASE_SYMBOL:case t.IF_SYMBOL:case t.FORMAT_SYMBOL:case t.MICROSECOND_SYMBOL:case t.OLD_PASSWORD_SYMBOL:case t.PASSWORD_SYMBOL:case t.REPEAT_SYMBOL:case t.REPLACE_SYMBOL:case t.REVERSE_SYMBOL:case t.ROW_COUNT_SYMBOL:case t.TRUNCATE_SYMBOL:case t.WEIGHT_STRING_SYMBOL:case t.CONTAINS_SYMBOL:case t.GEOMETRYCOLLECTION_SYMBOL:case t.LINESTRING_SYMBOL:case t.MULTILINESTRING_SYMBOL:case t.MULTIPOINT_SYMBOL:case t.MULTIPOLYGON_SYMBOL:case t.POINT_SYMBOL:case t.POLYGON_SYMBOL:case t.LEVEL_SYMBOL:case t.DATETIME_SYMBOL:case t.TRIM_SYMBOL:case t.LEADING_SYMBOL:case t.TRAILING_SYMBOL:case t.BOTH_SYMBOL:case t.STRING_SYMBOL:case t.SUBSTRING_SYMBOL:case t.WHEN_SYMBOL:case t.THEN_SYMBOL:case t.ELSE_SYMBOL:case t.SIGNED_SYMBOL:case t.UNSIGNED_SYMBOL:case t.DECIMAL_SYMBOL:case t.JSON_SYMBOL:case t.FLOAT_SYMBOL:case t.FLOAT_SYMBOL_4:case t.FLOAT_SYMBOL_8:case t.SET_SYMBOL:case t.SECOND_MICROSECOND_SYMBOL:case t.MINUTE_MICROSECOND_SYMBOL:case t.MINUTE_SECOND_SYMBOL:case t.HOUR_MICROSECOND_SYMBOL:case t.HOUR_SECOND_SYMBOL:case t.HOUR_MINUTE_SYMBOL:case t.DAY_MICROSECOND_SYMBOL:case t.DAY_SECOND_SYMBOL:case t.DAY_MINUTE_SYMBOL:case t.DAY_HOUR_SYMBOL:case t.YEAR_MONTH_SYMBOL:case t.BTREE_SYMBOL:case t.RTREE_SYMBOL:case t.HASH_SYMBOL:case t.REAL_SYMBOL:case t.DOUBLE_SYMBOL:case t.PRECISION_SYMBOL:case t.NUMERIC_SYMBOL:case t.NUMBER_SYMBOL:case t.FIXED_SYMBOL:case t.BIT_SYMBOL:case t.BOOL_SYMBOL:case t.VARYING_SYMBOL:case t.VARCHAR_SYMBOL:case t.VARCHAR2_SYMBOL:case t.NATIONAL_SYMBOL:case t.NVARCHAR_SYMBOL:case t.NVARCHAR2_SYMBOL:case t.NCHAR_SYMBOL:case t.VARBINARY_SYMBOL:case t.TINYBLOB_SYMBOL:case t.BLOB_SYMBOL:case t.CLOB_SYMBOL:case t.BFILE_SYMBOL:case t.RAW_SYMBOL:case t.MEDIUMBLOB_SYMBOL:case t.LONGBLOB_SYMBOL:case t.LONG_SYMBOL:case t.TINYTEXT_SYMBOL:case t.TEXT_SYMBOL:case t.MEDIUMTEXT_SYMBOL:case t.LONGTEXT_SYMBOL:case t.ENUM_SYMBOL:case t.SERIAL_SYMBOL:case t.GEOMETRY_SYMBOL:case t.ZEROFILL_SYMBOL:case t.BYTE_SYMBOL:case t.UNICODE_SYMBOL:case t.TERMINATED_SYMBOL:case t.OPTIONALLY_SYMBOL:case t.ENCLOSED_SYMBOL:case t.ESCAPED_SYMBOL:case t.LINES_SYMBOL:case t.STARTING_SYMBOL:case t.GLOBAL_SYMBOL:case t.LOCAL_SYMBOL:case t.SESSION_SYMBOL:case t.VARIANT_SYMBOL:case t.OBJECT_SYMBOL:case t.GEOGRAPHY_SYMBOL:case t.UNDERSCORE_CHARSET:case t.IDENTIFIER:case t.BACK_TICK_QUOTED_ID:case t.DOUBLE_QUOTED_TEXT:case t.SINGLE_QUOTED_TEXT:case t.BRACKET_QUOTED_TEXT:case t.CURLY_BRACES_QUOTED_TEXT:this.state=541,this.textOrIdentifier();break;case t.AT_SIGN_SYMBOL:case t.AT_TEXT_SUFFIX:this.state=542,this.userVariable();break;default:throw new L.error.NoViableAltException(this)}this.state=549,this._errHandler.sync(this),u=this._input.LA(1)}break}}catch(a){if(a instanceof L.error.RecognitionException)e.exception=a,this._errHandler.reportError(this,a),this._errHandler.recover(this,a);else throw a}finally{this.exitRule()}return e}procedureAnalyseClause(){let e=new c2(this,this._ctx,this.state);this.enterRule(e,30,t.RULE_procedureAnalyseClause);var u=0;try{this.enterOuterAlt(e,1),this.state=552,this.match(t.PROCEDURE_SYMBOL),this.state=553,this.match(t.ANALYSE_SYMBOL),this.state=554,this.match(t.OPEN_PAR_SYMBOL),this.state=560,this._errHandler.sync(this),u=this._input.LA(1),u===t.INT_NUMBER&&(this.state=555,this.match(t.INT_NUMBER),this.state=558,this._errHandler.sync(this),u=this._input.LA(1),u===t.COMMA_SYMBOL&&(this.state=556,this.match(t.COMMA_SYMBOL),this.state=557,this.match(t.INT_NUMBER))),this.state=562,this.match(t.CLOSE_PAR_SYMBOL)}catch(r){if(r instanceof L.error.RecognitionException)e.exception=r,this._errHandler.reportError(this,r),this._errHandler.recover(this,r);else throw r}finally{this.exitRule()}return e}havingClause(){let e=new d2(this,this._ctx,this.state);this.enterRule(e,32,t.RULE_havingClause);try{this.enterOuterAlt(e,1),this.state=564,this.match(t.HAVING_SYMBOL),this.state=565,this.expr(0)}catch(u){if(u instanceof L.error.RecognitionException)e.exception=u,this._errHandler.reportError(this,u),this._errHandler.recover(this,u);else throw u}finally{this.exitRule()}return e}windowClause(){let e=new p2(this,this._ctx,this.state);this.enterRule(e,34,t.RULE_windowClause);var u=0;try{for(this.enterOuterAlt(e,1),this.state=567,this.match(t.WINDOW_SYMBOL),this.state=568,this.windowDefinition(),this.state=573,this._errHandler.sync(this),u=this._input.LA(1);u===t.COMMA_SYMBOL;)this.state=569,this.match(t.COMMA_SYMBOL),this.state=570,this.windowDefinition(),this.state=575,this._errHandler.sync(this),u=this._input.LA(1)}catch(r){if(r instanceof L.error.RecognitionException)e.exception=r,this._errHandler.reportError(this,r),this._errHandler.recover(this,r);else throw r}finally{this.exitRule()}return e}windowDefinition(){let e=new ps(this,this._ctx,this.state);this.enterRule(e,36,t.RULE_windowDefinition);try{this.enterOuterAlt(e,1),this.state=576,this.identifier(),this.state=577,this.match(t.AS_SYMBOL),this.state=578,this.windowSpec()}catch(u){if(u instanceof L.error.RecognitionException)e.exception=u,this._errHandler.reportError(this,u),this._errHandler.recover(this,u);else throw u}finally{this.exitRule()}return e}windowSpec(){let e=new hs(this,this._ctx,this.state);this.enterRule(e,38,t.RULE_windowSpec);try{this.enterOuterAlt(e,1),this.state=580,this.match(t.OPEN_PAR_SYMBOL),this.state=581,this.windowSpecDetails(),this.state=582,this.match(t.CLOSE_PAR_SYMBOL)}catch(u){if(u instanceof L.error.RecognitionException)e.exception=u,this._errHandler.reportError(this,u),this._errHandler.recover(this,u);else throw u}finally{this.exitRule()}return e}windowSpecDetails(){let e=new h2(this,this._ctx,this.state);this.enterRule(e,40,t.RULE_windowSpecDetails);var u=0;try{this.enterOuterAlt(e,1),this.state=585,this._errHandler.sync(this);var r=this._interp.adaptivePredict(this._input,49,this._ctx);r===1&&(this.state=584,this.identifier()),this.state=590,this._errHandler.sync(this),u=this._input.LA(1),u===t.PARTITION_SYMBOL&&(this.state=587,this.match(t.PARTITION_SYMBOL),this.state=588,this.match(t.BY_SYMBOL),this.state=589,this.orderList()),this.state=593,this._errHandler.sync(this),u=this._input.LA(1),u===t.ORDER_SYMBOL&&(this.state=592,this.orderClause()),this.state=596,this._errHandler.sync(this),u=this._input.LA(1),!(u-86&-32)&&1<'","'>='","'>'","'<='","'<'",null,"'+'","'-'","'*'","'/'","'%'","'!'","'~'","'<<'","'>>'","'&&'","'&'","'^'","'||'","'|'","'.'","','","';'","':'","'('","')'","'{'","'}'","'_'","'['","']'","'{{'","'}}'","'->'","'->>'","'@'",null,"'@@'","'\\N'","'?'","'::'",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"'/*!'",null,"'*/'"]),Yu(t,"symbolicNames",[null,"EQUAL_OPERATOR","ASSIGN_OPERATOR","NULL_SAFE_EQUAL_OPERATOR","GREATER_OR_EQUAL_OPERATOR","GREATER_THAN_OPERATOR","LESS_OR_EQUAL_OPERATOR","LESS_THAN_OPERATOR","NOT_EQUAL_OPERATOR","PLUS_OPERATOR","MINUS_OPERATOR","MULT_OPERATOR","DIV_OPERATOR","MOD_OPERATOR","LOGICAL_NOT_OPERATOR","BITWISE_NOT_OPERATOR","SHIFT_LEFT_OPERATOR","SHIFT_RIGHT_OPERATOR","LOGICAL_AND_OPERATOR","BITWISE_AND_OPERATOR","BITWISE_XOR_OPERATOR","LOGICAL_OR_OPERATOR","BITWISE_OR_OPERATOR","DOT_SYMBOL","COMMA_SYMBOL","SEMICOLON_SYMBOL","COLON_SYMBOL","OPEN_PAR_SYMBOL","CLOSE_PAR_SYMBOL","OPEN_CURLY_SYMBOL","CLOSE_CURLY_SYMBOL","UNDERLINE_SYMBOL","OPEN_BRACKET_SYMBOL","CLOSE_BRACKET_SYMBOL","OPEN_DOUBLE_CURLY_SYMBOL","CLOSE_DOUBLE_CURLY_SYMBOL","JSON_SEPARATOR_SYMBOL","JSON_UNQUOTED_SEPARATOR_SYMBOL","AT_SIGN_SYMBOL","AT_TEXT_SUFFIX","AT_AT_SIGN_SYMBOL","NULL2_SYMBOL","PARAM_MARKER","CAST_COLON_SYMBOL","HEX_NUMBER","BIN_NUMBER","INT_NUMBER","DECIMAL_NUMBER","FLOAT_NUMBER","TINYINT_SYMBOL","SMALLINT_SYMBOL","MEDIUMINT_SYMBOL","BYTE_INT_SYMBOL","INT_SYMBOL","BIGINT_SYMBOL","SECOND_SYMBOL","MINUTE_SYMBOL","HOUR_SYMBOL","DAY_SYMBOL","WEEK_SYMBOL","MONTH_SYMBOL","QUARTER_SYMBOL","YEAR_SYMBOL","DEFAULT_SYMBOL","UNION_SYMBOL","SELECT_SYMBOL","ALL_SYMBOL","DISTINCT_SYMBOL","STRAIGHT_JOIN_SYMBOL","HIGH_PRIORITY_SYMBOL","SQL_SMALL_RESULT_SYMBOL","SQL_BIG_RESULT_SYMBOL","SQL_BUFFER_RESULT_SYMBOL","SQL_CALC_FOUND_ROWS_SYMBOL","LIMIT_SYMBOL","OFFSET_SYMBOL","INTO_SYMBOL","OUTFILE_SYMBOL","DUMPFILE_SYMBOL","PROCEDURE_SYMBOL","ANALYSE_SYMBOL","HAVING_SYMBOL","WINDOW_SYMBOL","AS_SYMBOL","PARTITION_SYMBOL","BY_SYMBOL","ROWS_SYMBOL","RANGE_SYMBOL","GROUPS_SYMBOL","UNBOUNDED_SYMBOL","PRECEDING_SYMBOL","INTERVAL_SYMBOL","CURRENT_SYMBOL","ROW_SYMBOL","BETWEEN_SYMBOL","AND_SYMBOL","FOLLOWING_SYMBOL","EXCLUDE_SYMBOL","GROUP_SYMBOL","TIES_SYMBOL","NO_SYMBOL","OTHERS_SYMBOL","WITH_SYMBOL","WITHOUT_SYMBOL","RECURSIVE_SYMBOL","ROLLUP_SYMBOL","CUBE_SYMBOL","ORDER_SYMBOL","ASC_SYMBOL","DESC_SYMBOL","FROM_SYMBOL","DUAL_SYMBOL","VALUES_SYMBOL","TABLE_SYMBOL","SQL_NO_CACHE_SYMBOL","SQL_CACHE_SYMBOL","MAX_STATEMENT_TIME_SYMBOL","FOR_SYMBOL","OF_SYMBOL","LOCK_SYMBOL","IN_SYMBOL","SHARE_SYMBOL","MODE_SYMBOL","UPDATE_SYMBOL","SKIP_SYMBOL","LOCKED_SYMBOL","NOWAIT_SYMBOL","WHERE_SYMBOL","QUALIFY_SYMBOL","OJ_SYMBOL","ON_SYMBOL","USING_SYMBOL","NATURAL_SYMBOL","INNER_SYMBOL","JOIN_SYMBOL","LEFT_SYMBOL","RIGHT_SYMBOL","OUTER_SYMBOL","CROSS_SYMBOL","LATERAL_SYMBOL","JSON_TABLE_SYMBOL","COLUMNS_SYMBOL","ORDINALITY_SYMBOL","EXISTS_SYMBOL","PATH_SYMBOL","NESTED_SYMBOL","EMPTY_SYMBOL","ERROR_SYMBOL","NULL_SYMBOL","USE_SYMBOL","FORCE_SYMBOL","IGNORE_SYMBOL","KEY_SYMBOL","INDEX_SYMBOL","PRIMARY_SYMBOL","IS_SYMBOL","TRUE_SYMBOL","FALSE_SYMBOL","UNKNOWN_SYMBOL","NOT_SYMBOL","XOR_SYMBOL","OR_SYMBOL","ANY_SYMBOL","MEMBER_SYMBOL","SOUNDS_SYMBOL","LIKE_SYMBOL","ESCAPE_SYMBOL","REGEXP_SYMBOL","DIV_SYMBOL","MOD_SYMBOL","MATCH_SYMBOL","AGAINST_SYMBOL","BINARY_SYMBOL","CAST_SYMBOL","ARRAY_SYMBOL","CASE_SYMBOL","END_SYMBOL","CONVERT_SYMBOL","COLLATE_SYMBOL","AVG_SYMBOL","BIT_AND_SYMBOL","BIT_OR_SYMBOL","BIT_XOR_SYMBOL","COUNT_SYMBOL","MIN_SYMBOL","MAX_SYMBOL","STD_SYMBOL","VARIANCE_SYMBOL","STDDEV_SAMP_SYMBOL","VAR_SAMP_SYMBOL","SUM_SYMBOL","GROUP_CONCAT_SYMBOL","SEPARATOR_SYMBOL","GROUPING_SYMBOL","ROW_NUMBER_SYMBOL","RANK_SYMBOL","DENSE_RANK_SYMBOL","CUME_DIST_SYMBOL","PERCENT_RANK_SYMBOL","NTILE_SYMBOL","LEAD_SYMBOL","LAG_SYMBOL","FIRST_VALUE_SYMBOL","LAST_VALUE_SYMBOL","NTH_VALUE_SYMBOL","FIRST_SYMBOL","LAST_SYMBOL","OVER_SYMBOL","RESPECT_SYMBOL","NULLS_SYMBOL","JSON_ARRAYAGG_SYMBOL","JSON_OBJECTAGG_SYMBOL","BOOLEAN_SYMBOL","LANGUAGE_SYMBOL","QUERY_SYMBOL","EXPANSION_SYMBOL","CHAR_SYMBOL","CURRENT_USER_SYMBOL","DATE_SYMBOL","INSERT_SYMBOL","TIME_SYMBOL","TIMESTAMP_SYMBOL","TIMESTAMP_LTZ_SYMBOL","TIMESTAMP_NTZ_SYMBOL","ZONE_SYMBOL","USER_SYMBOL","ADDDATE_SYMBOL","SUBDATE_SYMBOL","CURDATE_SYMBOL","CURTIME_SYMBOL","DATE_ADD_SYMBOL","DATE_SUB_SYMBOL","EXTRACT_SYMBOL","GET_FORMAT_SYMBOL","NOW_SYMBOL","POSITION_SYMBOL","SYSDATE_SYMBOL","TIMESTAMP_ADD_SYMBOL","TIMESTAMP_DIFF_SYMBOL","UTC_DATE_SYMBOL","UTC_TIME_SYMBOL","UTC_TIMESTAMP_SYMBOL","ASCII_SYMBOL","CHARSET_SYMBOL","COALESCE_SYMBOL","COLLATION_SYMBOL","DATABASE_SYMBOL","IF_SYMBOL","FORMAT_SYMBOL","MICROSECOND_SYMBOL","OLD_PASSWORD_SYMBOL","PASSWORD_SYMBOL","REPEAT_SYMBOL","REPLACE_SYMBOL","REVERSE_SYMBOL","ROW_COUNT_SYMBOL","TRUNCATE_SYMBOL","WEIGHT_STRING_SYMBOL","CONTAINS_SYMBOL","GEOMETRYCOLLECTION_SYMBOL","LINESTRING_SYMBOL","MULTILINESTRING_SYMBOL","MULTIPOINT_SYMBOL","MULTIPOLYGON_SYMBOL","POINT_SYMBOL","POLYGON_SYMBOL","LEVEL_SYMBOL","DATETIME_SYMBOL","TRIM_SYMBOL","LEADING_SYMBOL","TRAILING_SYMBOL","BOTH_SYMBOL","STRING_SYMBOL","SUBSTRING_SYMBOL","WHEN_SYMBOL","THEN_SYMBOL","ELSE_SYMBOL","SIGNED_SYMBOL","UNSIGNED_SYMBOL","DECIMAL_SYMBOL","JSON_SYMBOL","FLOAT_SYMBOL","FLOAT_SYMBOL_4","FLOAT_SYMBOL_8","SET_SYMBOL","SECOND_MICROSECOND_SYMBOL","MINUTE_MICROSECOND_SYMBOL","MINUTE_SECOND_SYMBOL","HOUR_MICROSECOND_SYMBOL","HOUR_SECOND_SYMBOL","HOUR_MINUTE_SYMBOL","DAY_MICROSECOND_SYMBOL","DAY_SECOND_SYMBOL","DAY_MINUTE_SYMBOL","DAY_HOUR_SYMBOL","YEAR_MONTH_SYMBOL","BTREE_SYMBOL","RTREE_SYMBOL","HASH_SYMBOL","REAL_SYMBOL","DOUBLE_SYMBOL","PRECISION_SYMBOL","NUMERIC_SYMBOL","NUMBER_SYMBOL","FIXED_SYMBOL","BIT_SYMBOL","BOOL_SYMBOL","VARYING_SYMBOL","VARCHAR_SYMBOL","VARCHAR2_SYMBOL","NATIONAL_SYMBOL","NVARCHAR_SYMBOL","NVARCHAR2_SYMBOL","NCHAR_SYMBOL","VARBINARY_SYMBOL","TINYBLOB_SYMBOL","BLOB_SYMBOL","CLOB_SYMBOL","BFILE_SYMBOL","RAW_SYMBOL","MEDIUMBLOB_SYMBOL","LONGBLOB_SYMBOL","LONG_SYMBOL","TINYTEXT_SYMBOL","TEXT_SYMBOL","MEDIUMTEXT_SYMBOL","LONGTEXT_SYMBOL","ENUM_SYMBOL","SERIAL_SYMBOL","GEOMETRY_SYMBOL","ZEROFILL_SYMBOL","BYTE_SYMBOL","UNICODE_SYMBOL","TERMINATED_SYMBOL","OPTIONALLY_SYMBOL","ENCLOSED_SYMBOL","ESCAPED_SYMBOL","LINES_SYMBOL","STARTING_SYMBOL","GLOBAL_SYMBOL","LOCAL_SYMBOL","SESSION_SYMBOL","VARIANT_SYMBOL","OBJECT_SYMBOL","GEOGRAPHY_SYMBOL","UNPIVOT_SYMBOL","WHITESPACE","INVALID_INPUT","UNDERSCORE_CHARSET","IDENTIFIER","NCHAR_TEXT","BACK_TICK_QUOTED_ID","DOUBLE_QUOTED_TEXT","SINGLE_QUOTED_TEXT","BRACKET_QUOTED_TEXT","BRACKET_QUOTED_NUMBER","CURLY_BRACES_QUOTED_TEXT","VERSION_COMMENT_START","MYSQL_COMMENT_START","SNOWFLAKE_COMMENT","VERSION_COMMENT_END","BLOCK_COMMENT","POUND_COMMENT","DASHDASH_COMMENT"]),Yu(t,"ruleNames",["query","values","selectStatement","selectStatementWithInto","queryExpression","queryExpressionBody","queryExpressionParens","queryPrimary","querySpecification","subquery","querySpecOption","limitClause","limitOptions","limitOption","intoClause","procedureAnalyseClause","havingClause","windowClause","windowDefinition","windowSpec","windowSpecDetails","windowFrameClause","windowFrameUnits","windowFrameExtent","windowFrameStart","windowFrameBetween","windowFrameBound","windowFrameExclusion","withClause","commonTableExpression","groupByClause","olapOption","orderClause","direction","fromClause","tableReferenceList","tableValueConstructor","explicitTable","rowValueExplicit","selectOption","lockingClauseList","lockingClause","lockStrengh","lockedRowAction","selectItemList","selectItem","selectAlias","whereClause","qualifyClause","tableReference","escapedTableReference","joinedTable","naturalJoinType","innerJoinType","outerJoinType","tableFactor","singleTable","singleTableParens","derivedTable","tableReferenceListParens","tableFunction","columnsClause","jtColumn","onEmptyOrError","onEmpty","onError","jtOnResponse","unionOption","tableAlias","indexHintList","indexHint","indexHintType","keyOrIndex","indexHintClause","indexList","indexListElement","expr","boolPri","compOp","predicate","predicateOperations","bitExpr","simpleExpr","jsonOperator","sumExpr","groupingOperation","windowFunctionCall","windowingClause","leadLagInfo","nullTreatment","jsonFunction","inSumExpr","identListArg","identList","fulltextOptions","runtimeFunctionCall","geometryFunction","timeFunctionParameters","fractionalPrecision","weightStringLevels","weightStringLevelListItem","dateTimeTtype","trimFunction","substringFunction","functionCall","udfExprList","udfExpr","unpivotClause","variable","userVariable","systemVariable","whenExpression","thenExpression","elseExpression","exprList","charset","notRule","not2Rule","interval","intervalTimeStamp","exprListWithParentheses","exprWithParentheses","simpleExprWithParentheses","orderList","orderExpression","indexType","dataType","nchar","fieldLength","fieldOptions","charsetWithOptBinary","ascii","unicode","wsNumCodepoints","typeDatetimePrecision","charsetName","collationName","collate","charsetClause","fieldsClause","fieldTerm","linesClause","lineTerm","usePartition","columnInternalRefList","tableAliasRefList","pureIdentifier","identifier","identifierList","identifierListWithParentheses","qualifiedIdentifier","jsonPathIdentifier","dotIdentifier","ulong_number","real_ulong_number","ulonglong_number","real_ulonglong_number","literal","stringList","textStringLiteral","textString","textLiteral","numLiteral","boolLiteral","nullLiteral","temporalLiteral","floatOptions","precision","textOrIdentifier","parentheses","equal","varIdentType","identifierKeyword"]);var o=t;o.EOF=L.Token.EOF;o.EQUAL_OPERATOR=1;o.ASSIGN_OPERATOR=2;o.NULL_SAFE_EQUAL_OPERATOR=3;o.GREATER_OR_EQUAL_OPERATOR=4;o.GREATER_THAN_OPERATOR=5;o.LESS_OR_EQUAL_OPERATOR=6;o.LESS_THAN_OPERATOR=7;o.NOT_EQUAL_OPERATOR=8;o.PLUS_OPERATOR=9;o.MINUS_OPERATOR=10;o.MULT_OPERATOR=11;o.DIV_OPERATOR=12;o.MOD_OPERATOR=13;o.LOGICAL_NOT_OPERATOR=14;o.BITWISE_NOT_OPERATOR=15;o.SHIFT_LEFT_OPERATOR=16;o.SHIFT_RIGHT_OPERATOR=17;o.LOGICAL_AND_OPERATOR=18;o.BITWISE_AND_OPERATOR=19;o.BITWISE_XOR_OPERATOR=20;o.LOGICAL_OR_OPERATOR=21;o.BITWISE_OR_OPERATOR=22;o.DOT_SYMBOL=23;o.COMMA_SYMBOL=24;o.SEMICOLON_SYMBOL=25;o.COLON_SYMBOL=26;o.OPEN_PAR_SYMBOL=27;o.CLOSE_PAR_SYMBOL=28;o.OPEN_CURLY_SYMBOL=29;o.CLOSE_CURLY_SYMBOL=30;o.UNDERLINE_SYMBOL=31;o.OPEN_BRACKET_SYMBOL=32;o.CLOSE_BRACKET_SYMBOL=33;o.OPEN_DOUBLE_CURLY_SYMBOL=34;o.CLOSE_DOUBLE_CURLY_SYMBOL=35;o.JSON_SEPARATOR_SYMBOL=36;o.JSON_UNQUOTED_SEPARATOR_SYMBOL=37;o.AT_SIGN_SYMBOL=38;o.AT_TEXT_SUFFIX=39;o.AT_AT_SIGN_SYMBOL=40;o.NULL2_SYMBOL=41;o.PARAM_MARKER=42;o.CAST_COLON_SYMBOL=43;o.HEX_NUMBER=44;o.BIN_NUMBER=45;o.INT_NUMBER=46;o.DECIMAL_NUMBER=47;o.FLOAT_NUMBER=48;o.TINYINT_SYMBOL=49;o.SMALLINT_SYMBOL=50;o.MEDIUMINT_SYMBOL=51;o.BYTE_INT_SYMBOL=52;o.INT_SYMBOL=53;o.BIGINT_SYMBOL=54;o.SECOND_SYMBOL=55;o.MINUTE_SYMBOL=56;o.HOUR_SYMBOL=57;o.DAY_SYMBOL=58;o.WEEK_SYMBOL=59;o.MONTH_SYMBOL=60;o.QUARTER_SYMBOL=61;o.YEAR_SYMBOL=62;o.DEFAULT_SYMBOL=63;o.UNION_SYMBOL=64;o.SELECT_SYMBOL=65;o.ALL_SYMBOL=66;o.DISTINCT_SYMBOL=67;o.STRAIGHT_JOIN_SYMBOL=68;o.HIGH_PRIORITY_SYMBOL=69;o.SQL_SMALL_RESULT_SYMBOL=70;o.SQL_BIG_RESULT_SYMBOL=71;o.SQL_BUFFER_RESULT_SYMBOL=72;o.SQL_CALC_FOUND_ROWS_SYMBOL=73;o.LIMIT_SYMBOL=74;o.OFFSET_SYMBOL=75;o.INTO_SYMBOL=76;o.OUTFILE_SYMBOL=77;o.DUMPFILE_SYMBOL=78;o.PROCEDURE_SYMBOL=79;o.ANALYSE_SYMBOL=80;o.HAVING_SYMBOL=81;o.WINDOW_SYMBOL=82;o.AS_SYMBOL=83;o.PARTITION_SYMBOL=84;o.BY_SYMBOL=85;o.ROWS_SYMBOL=86;o.RANGE_SYMBOL=87;o.GROUPS_SYMBOL=88;o.UNBOUNDED_SYMBOL=89;o.PRECEDING_SYMBOL=90;o.INTERVAL_SYMBOL=91;o.CURRENT_SYMBOL=92;o.ROW_SYMBOL=93;o.BETWEEN_SYMBOL=94;o.AND_SYMBOL=95;o.FOLLOWING_SYMBOL=96;o.EXCLUDE_SYMBOL=97;o.GROUP_SYMBOL=98;o.TIES_SYMBOL=99;o.NO_SYMBOL=100;o.OTHERS_SYMBOL=101;o.WITH_SYMBOL=102;o.WITHOUT_SYMBOL=103;o.RECURSIVE_SYMBOL=104;o.ROLLUP_SYMBOL=105;o.CUBE_SYMBOL=106;o.ORDER_SYMBOL=107;o.ASC_SYMBOL=108;o.DESC_SYMBOL=109;o.FROM_SYMBOL=110;o.DUAL_SYMBOL=111;o.VALUES_SYMBOL=112;o.TABLE_SYMBOL=113;o.SQL_NO_CACHE_SYMBOL=114;o.SQL_CACHE_SYMBOL=115;o.MAX_STATEMENT_TIME_SYMBOL=116;o.FOR_SYMBOL=117;o.OF_SYMBOL=118;o.LOCK_SYMBOL=119;o.IN_SYMBOL=120;o.SHARE_SYMBOL=121;o.MODE_SYMBOL=122;o.UPDATE_SYMBOL=123;o.SKIP_SYMBOL=124;o.LOCKED_SYMBOL=125;o.NOWAIT_SYMBOL=126;o.WHERE_SYMBOL=127;o.QUALIFY_SYMBOL=128;o.OJ_SYMBOL=129;o.ON_SYMBOL=130;o.USING_SYMBOL=131;o.NATURAL_SYMBOL=132;o.INNER_SYMBOL=133;o.JOIN_SYMBOL=134;o.LEFT_SYMBOL=135;o.RIGHT_SYMBOL=136;o.OUTER_SYMBOL=137;o.CROSS_SYMBOL=138;o.LATERAL_SYMBOL=139;o.JSON_TABLE_SYMBOL=140;o.COLUMNS_SYMBOL=141;o.ORDINALITY_SYMBOL=142;o.EXISTS_SYMBOL=143;o.PATH_SYMBOL=144;o.NESTED_SYMBOL=145;o.EMPTY_SYMBOL=146;o.ERROR_SYMBOL=147;o.NULL_SYMBOL=148;o.USE_SYMBOL=149;o.FORCE_SYMBOL=150;o.IGNORE_SYMBOL=151;o.KEY_SYMBOL=152;o.INDEX_SYMBOL=153;o.PRIMARY_SYMBOL=154;o.IS_SYMBOL=155;o.TRUE_SYMBOL=156;o.FALSE_SYMBOL=157;o.UNKNOWN_SYMBOL=158;o.NOT_SYMBOL=159;o.XOR_SYMBOL=160;o.OR_SYMBOL=161;o.ANY_SYMBOL=162;o.MEMBER_SYMBOL=163;o.SOUNDS_SYMBOL=164;o.LIKE_SYMBOL=165;o.ESCAPE_SYMBOL=166;o.REGEXP_SYMBOL=167;o.DIV_SYMBOL=168;o.MOD_SYMBOL=169;o.MATCH_SYMBOL=170;o.AGAINST_SYMBOL=171;o.BINARY_SYMBOL=172;o.CAST_SYMBOL=173;o.ARRAY_SYMBOL=174;o.CASE_SYMBOL=175;o.END_SYMBOL=176;o.CONVERT_SYMBOL=177;o.COLLATE_SYMBOL=178;o.AVG_SYMBOL=179;o.BIT_AND_SYMBOL=180;o.BIT_OR_SYMBOL=181;o.BIT_XOR_SYMBOL=182;o.COUNT_SYMBOL=183;o.MIN_SYMBOL=184;o.MAX_SYMBOL=185;o.STD_SYMBOL=186;o.VARIANCE_SYMBOL=187;o.STDDEV_SAMP_SYMBOL=188;o.VAR_SAMP_SYMBOL=189;o.SUM_SYMBOL=190;o.GROUP_CONCAT_SYMBOL=191;o.SEPARATOR_SYMBOL=192;o.GROUPING_SYMBOL=193;o.ROW_NUMBER_SYMBOL=194;o.RANK_SYMBOL=195;o.DENSE_RANK_SYMBOL=196;o.CUME_DIST_SYMBOL=197;o.PERCENT_RANK_SYMBOL=198;o.NTILE_SYMBOL=199;o.LEAD_SYMBOL=200;o.LAG_SYMBOL=201;o.FIRST_VALUE_SYMBOL=202;o.LAST_VALUE_SYMBOL=203;o.NTH_VALUE_SYMBOL=204;o.FIRST_SYMBOL=205;o.LAST_SYMBOL=206;o.OVER_SYMBOL=207;o.RESPECT_SYMBOL=208;o.NULLS_SYMBOL=209;o.JSON_ARRAYAGG_SYMBOL=210;o.JSON_OBJECTAGG_SYMBOL=211;o.BOOLEAN_SYMBOL=212;o.LANGUAGE_SYMBOL=213;o.QUERY_SYMBOL=214;o.EXPANSION_SYMBOL=215;o.CHAR_SYMBOL=216;o.CURRENT_USER_SYMBOL=217;o.DATE_SYMBOL=218;o.INSERT_SYMBOL=219;o.TIME_SYMBOL=220;o.TIMESTAMP_SYMBOL=221;o.TIMESTAMP_LTZ_SYMBOL=222;o.TIMESTAMP_NTZ_SYMBOL=223;o.ZONE_SYMBOL=224;o.USER_SYMBOL=225;o.ADDDATE_SYMBOL=226;o.SUBDATE_SYMBOL=227;o.CURDATE_SYMBOL=228;o.CURTIME_SYMBOL=229;o.DATE_ADD_SYMBOL=230;o.DATE_SUB_SYMBOL=231;o.EXTRACT_SYMBOL=232;o.GET_FORMAT_SYMBOL=233;o.NOW_SYMBOL=234;o.POSITION_SYMBOL=235;o.SYSDATE_SYMBOL=236;o.TIMESTAMP_ADD_SYMBOL=237;o.TIMESTAMP_DIFF_SYMBOL=238;o.UTC_DATE_SYMBOL=239;o.UTC_TIME_SYMBOL=240;o.UTC_TIMESTAMP_SYMBOL=241;o.ASCII_SYMBOL=242;o.CHARSET_SYMBOL=243;o.COALESCE_SYMBOL=244;o.COLLATION_SYMBOL=245;o.DATABASE_SYMBOL=246;o.IF_SYMBOL=247;o.FORMAT_SYMBOL=248;o.MICROSECOND_SYMBOL=249;o.OLD_PASSWORD_SYMBOL=250;o.PASSWORD_SYMBOL=251;o.REPEAT_SYMBOL=252;o.REPLACE_SYMBOL=253;o.REVERSE_SYMBOL=254;o.ROW_COUNT_SYMBOL=255;o.TRUNCATE_SYMBOL=256;o.WEIGHT_STRING_SYMBOL=257;o.CONTAINS_SYMBOL=258;o.GEOMETRYCOLLECTION_SYMBOL=259;o.LINESTRING_SYMBOL=260;o.MULTILINESTRING_SYMBOL=261;o.MULTIPOINT_SYMBOL=262;o.MULTIPOLYGON_SYMBOL=263;o.POINT_SYMBOL=264;o.POLYGON_SYMBOL=265;o.LEVEL_SYMBOL=266;o.DATETIME_SYMBOL=267;o.TRIM_SYMBOL=268;o.LEADING_SYMBOL=269;o.TRAILING_SYMBOL=270;o.BOTH_SYMBOL=271;o.STRING_SYMBOL=272;o.SUBSTRING_SYMBOL=273;o.WHEN_SYMBOL=274;o.THEN_SYMBOL=275;o.ELSE_SYMBOL=276;o.SIGNED_SYMBOL=277;o.UNSIGNED_SYMBOL=278;o.DECIMAL_SYMBOL=279;o.JSON_SYMBOL=280;o.FLOAT_SYMBOL=281;o.FLOAT_SYMBOL_4=282;o.FLOAT_SYMBOL_8=283;o.SET_SYMBOL=284;o.SECOND_MICROSECOND_SYMBOL=285;o.MINUTE_MICROSECOND_SYMBOL=286;o.MINUTE_SECOND_SYMBOL=287;o.HOUR_MICROSECOND_SYMBOL=288;o.HOUR_SECOND_SYMBOL=289;o.HOUR_MINUTE_SYMBOL=290;o.DAY_MICROSECOND_SYMBOL=291;o.DAY_SECOND_SYMBOL=292;o.DAY_MINUTE_SYMBOL=293;o.DAY_HOUR_SYMBOL=294;o.YEAR_MONTH_SYMBOL=295;o.BTREE_SYMBOL=296;o.RTREE_SYMBOL=297;o.HASH_SYMBOL=298;o.REAL_SYMBOL=299;o.DOUBLE_SYMBOL=300;o.PRECISION_SYMBOL=301;o.NUMERIC_SYMBOL=302;o.NUMBER_SYMBOL=303;o.FIXED_SYMBOL=304;o.BIT_SYMBOL=305;o.BOOL_SYMBOL=306;o.VARYING_SYMBOL=307;o.VARCHAR_SYMBOL=308;o.VARCHAR2_SYMBOL=309;o.NATIONAL_SYMBOL=310;o.NVARCHAR_SYMBOL=311;o.NVARCHAR2_SYMBOL=312;o.NCHAR_SYMBOL=313;o.VARBINARY_SYMBOL=314;o.TINYBLOB_SYMBOL=315;o.BLOB_SYMBOL=316;o.CLOB_SYMBOL=317;o.BFILE_SYMBOL=318;o.RAW_SYMBOL=319;o.MEDIUMBLOB_SYMBOL=320;o.LONGBLOB_SYMBOL=321;o.LONG_SYMBOL=322;o.TINYTEXT_SYMBOL=323;o.TEXT_SYMBOL=324;o.MEDIUMTEXT_SYMBOL=325;o.LONGTEXT_SYMBOL=326;o.ENUM_SYMBOL=327;o.SERIAL_SYMBOL=328;o.GEOMETRY_SYMBOL=329;o.ZEROFILL_SYMBOL=330;o.BYTE_SYMBOL=331;o.UNICODE_SYMBOL=332;o.TERMINATED_SYMBOL=333;o.OPTIONALLY_SYMBOL=334;o.ENCLOSED_SYMBOL=335;o.ESCAPED_SYMBOL=336;o.LINES_SYMBOL=337;o.STARTING_SYMBOL=338;o.GLOBAL_SYMBOL=339;o.LOCAL_SYMBOL=340;o.SESSION_SYMBOL=341;o.VARIANT_SYMBOL=342;o.OBJECT_SYMBOL=343;o.GEOGRAPHY_SYMBOL=344;o.UNPIVOT_SYMBOL=345;o.WHITESPACE=346;o.INVALID_INPUT=347;o.UNDERSCORE_CHARSET=348;o.IDENTIFIER=349;o.NCHAR_TEXT=350;o.BACK_TICK_QUOTED_ID=351;o.DOUBLE_QUOTED_TEXT=352;o.SINGLE_QUOTED_TEXT=353;o.BRACKET_QUOTED_TEXT=354;o.BRACKET_QUOTED_NUMBER=355;o.CURLY_BRACES_QUOTED_TEXT=356;o.VERSION_COMMENT_START=357;o.MYSQL_COMMENT_START=358;o.SNOWFLAKE_COMMENT=359;o.VERSION_COMMENT_END=360;o.BLOCK_COMMENT=361;o.POUND_COMMENT=362;o.DASHDASH_COMMENT=363;o.RULE_query=0;o.RULE_values=1;o.RULE_selectStatement=2;o.RULE_selectStatementWithInto=3;o.RULE_queryExpression=4;o.RULE_queryExpressionBody=5;o.RULE_queryExpressionParens=6;o.RULE_queryPrimary=7;o.RULE_querySpecification=8;o.RULE_subquery=9;o.RULE_querySpecOption=10;o.RULE_limitClause=11;o.RULE_limitOptions=12;o.RULE_limitOption=13;o.RULE_intoClause=14;o.RULE_procedureAnalyseClause=15;o.RULE_havingClause=16;o.RULE_windowClause=17;o.RULE_windowDefinition=18;o.RULE_windowSpec=19;o.RULE_windowSpecDetails=20;o.RULE_windowFrameClause=21;o.RULE_windowFrameUnits=22;o.RULE_windowFrameExtent=23;o.RULE_windowFrameStart=24;o.RULE_windowFrameBetween=25;o.RULE_windowFrameBound=26;o.RULE_windowFrameExclusion=27;o.RULE_withClause=28;o.RULE_commonTableExpression=29;o.RULE_groupByClause=30;o.RULE_olapOption=31;o.RULE_orderClause=32;o.RULE_direction=33;o.RULE_fromClause=34;o.RULE_tableReferenceList=35;o.RULE_tableValueConstructor=36;o.RULE_explicitTable=37;o.RULE_rowValueExplicit=38;o.RULE_selectOption=39;o.RULE_lockingClauseList=40;o.RULE_lockingClause=41;o.RULE_lockStrengh=42;o.RULE_lockedRowAction=43;o.RULE_selectItemList=44;o.RULE_selectItem=45;o.RULE_selectAlias=46;o.RULE_whereClause=47;o.RULE_qualifyClause=48;o.RULE_tableReference=49;o.RULE_escapedTableReference=50;o.RULE_joinedTable=51;o.RULE_naturalJoinType=52;o.RULE_innerJoinType=53;o.RULE_outerJoinType=54;o.RULE_tableFactor=55;o.RULE_singleTable=56;o.RULE_singleTableParens=57;o.RULE_derivedTable=58;o.RULE_tableReferenceListParens=59;o.RULE_tableFunction=60;o.RULE_columnsClause=61;o.RULE_jtColumn=62;o.RULE_onEmptyOrError=63;o.RULE_onEmpty=64;o.RULE_onError=65;o.RULE_jtOnResponse=66;o.RULE_unionOption=67;o.RULE_tableAlias=68;o.RULE_indexHintList=69;o.RULE_indexHint=70;o.RULE_indexHintType=71;o.RULE_keyOrIndex=72;o.RULE_indexHintClause=73;o.RULE_indexList=74;o.RULE_indexListElement=75;o.RULE_expr=76;o.RULE_boolPri=77;o.RULE_compOp=78;o.RULE_predicate=79;o.RULE_predicateOperations=80;o.RULE_bitExpr=81;o.RULE_simpleExpr=82;o.RULE_jsonOperator=83;o.RULE_sumExpr=84;o.RULE_groupingOperation=85;o.RULE_windowFunctionCall=86;o.RULE_windowingClause=87;o.RULE_leadLagInfo=88;o.RULE_nullTreatment=89;o.RULE_jsonFunction=90;o.RULE_inSumExpr=91;o.RULE_identListArg=92;o.RULE_identList=93;o.RULE_fulltextOptions=94;o.RULE_runtimeFunctionCall=95;o.RULE_geometryFunction=96;o.RULE_timeFunctionParameters=97;o.RULE_fractionalPrecision=98;o.RULE_weightStringLevels=99;o.RULE_weightStringLevelListItem=100;o.RULE_dateTimeTtype=101;o.RULE_trimFunction=102;o.RULE_substringFunction=103;o.RULE_functionCall=104;o.RULE_udfExprList=105;o.RULE_udfExpr=106;o.RULE_unpivotClause=107;o.RULE_variable=108;o.RULE_userVariable=109;o.RULE_systemVariable=110;o.RULE_whenExpression=111;o.RULE_thenExpression=112;o.RULE_elseExpression=113;o.RULE_exprList=114;o.RULE_charset=115;o.RULE_notRule=116;o.RULE_not2Rule=117;o.RULE_interval=118;o.RULE_intervalTimeStamp=119;o.RULE_exprListWithParentheses=120;o.RULE_exprWithParentheses=121;o.RULE_simpleExprWithParentheses=122;o.RULE_orderList=123;o.RULE_orderExpression=124;o.RULE_indexType=125;o.RULE_dataType=126;o.RULE_nchar=127;o.RULE_fieldLength=128;o.RULE_fieldOptions=129;o.RULE_charsetWithOptBinary=130;o.RULE_ascii=131;o.RULE_unicode=132;o.RULE_wsNumCodepoints=133;o.RULE_typeDatetimePrecision=134;o.RULE_charsetName=135;o.RULE_collationName=136;o.RULE_collate=137;o.RULE_charsetClause=138;o.RULE_fieldsClause=139;o.RULE_fieldTerm=140;o.RULE_linesClause=141;o.RULE_lineTerm=142;o.RULE_usePartition=143;o.RULE_columnInternalRefList=144;o.RULE_tableAliasRefList=145;o.RULE_pureIdentifier=146;o.RULE_identifier=147;o.RULE_identifierList=148;o.RULE_identifierListWithParentheses=149;o.RULE_qualifiedIdentifier=150;o.RULE_jsonPathIdentifier=151;o.RULE_dotIdentifier=152;o.RULE_ulong_number=153;o.RULE_real_ulong_number=154;o.RULE_ulonglong_number=155;o.RULE_real_ulonglong_number=156;o.RULE_literal=157;o.RULE_stringList=158;o.RULE_textStringLiteral=159;o.RULE_textString=160;o.RULE_textLiteral=161;o.RULE_numLiteral=162;o.RULE_boolLiteral=163;o.RULE_nullLiteral=164;o.RULE_temporalLiteral=165;o.RULE_floatOptions=166;o.RULE_precision=167;o.RULE_textOrIdentifier=168;o.RULE_parentheses=169;o.RULE_equal=170;o.RULE_varIdentType=171;o.RULE_identifierKeyword=172;var QO=class QO extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_query}selectStatement(){return this.getTypedRuleContext(r2,0)}SEMICOLON_SYMBOL(){return this.getToken(o.SEMICOLON_SYMBOL,0)}EOF(){return this.getToken(o.EOF,0)}withClause(){return this.getTypedRuleContext(Os,0)}enterRule(e){e instanceof R&&e.enterQuery(this)}exitRule(e){e instanceof R&&e.exitQuery(this)}};c(QO,"QueryContext");var u2=QO,JO=class JO extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_values}expr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(A0):this.getTypedRuleContext(A0,e)};DEFAULT_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.DEFAULT_SYMBOL):this.getToken(o.DEFAULT_SYMBOL,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof R&&e.enterValues(this)}exitRule(e){e instanceof R&&e.exitValues(this)}};c(JO,"ValuesContext");var t2=JO,zO=class zO extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_selectStatement}queryExpression(){return this.getTypedRuleContext(vi,0)}lockingClauseList(){return this.getTypedRuleContext(wi,0)}queryExpressionParens(){return this.getTypedRuleContext(Jt,0)}selectStatementWithInto(){return this.getTypedRuleContext(i2,0)}enterRule(e){e instanceof R&&e.enterSelectStatement(this)}exitRule(e){e instanceof R&&e.exitSelectStatement(this)}};c(zO,"SelectStatementContext");var r2=zO,h3=class h3 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_selectStatementWithInto}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}selectStatementWithInto(){return this.getTypedRuleContext(h3,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}queryExpression(){return this.getTypedRuleContext(vi,0)}intoClause(){return this.getTypedRuleContext(ds,0)}lockingClauseList(){return this.getTypedRuleContext(wi,0)}enterRule(e){e instanceof R&&e.enterSelectStatementWithInto(this)}exitRule(e){e instanceof R&&e.exitSelectStatementWithInto(this)}};c(h3,"SelectStatementWithIntoContext");var i2=h3,$O=class $O extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_queryExpression}queryExpressionBody(){return this.getTypedRuleContext(a2,0)}queryExpressionParens(){return this.getTypedRuleContext(Jt,0)}withClause(){return this.getTypedRuleContext(Os,0)}procedureAnalyseClause(){return this.getTypedRuleContext(c2,0)}orderClause(){return this.getTypedRuleContext(Di,0)}limitClause(){return this.getTypedRuleContext(o2,0)}enterRule(e){e instanceof R&&e.enterQueryExpression(this)}exitRule(e){e instanceof R&&e.exitQueryExpression(this)}};c($O,"QueryExpressionContext");var vi=$O,ZO=class ZO extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_queryExpressionBody}queryPrimary=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(ls):this.getTypedRuleContext(ls,e)};queryExpressionParens=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Jt):this.getTypedRuleContext(Jt,e)};UNION_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.UNION_SYMBOL):this.getToken(o.UNION_SYMBOL,e)};unionOption=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(gs):this.getTypedRuleContext(gs,e)};enterRule(e){e instanceof R&&e.enterQueryExpressionBody(this)}exitRule(e){e instanceof R&&e.exitQueryExpressionBody(this)}};c(ZO,"QueryExpressionBodyContext");var a2=ZO,f3=class f3 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_queryExpressionParens}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}queryExpressionParens(){return this.getTypedRuleContext(f3,0)}queryExpression(){return this.getTypedRuleContext(vi,0)}lockingClauseList(){return this.getTypedRuleContext(wi,0)}enterRule(e){e instanceof R&&e.enterQueryExpressionParens(this)}exitRule(e){e instanceof R&&e.exitQueryExpressionParens(this)}};c(f3,"QueryExpressionParensContext");var Jt=f3,e8=class e8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_queryPrimary}querySpecification(){return this.getTypedRuleContext(s2,0)}tableValueConstructor(){return this.getTypedRuleContext(T2,0)}explicitTable(){return this.getTypedRuleContext(Y2,0)}enterRule(e){e instanceof R&&e.enterQueryPrimary(this)}exitRule(e){e instanceof R&&e.exitQueryPrimary(this)}};c(e8,"QueryPrimaryContext");var ls=e8,u8=class u8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_querySpecification}SELECT_SYMBOL(){return this.getToken(o.SELECT_SYMBOL,0)}selectItemList(){return this.getTypedRuleContext(g2,0)}selectOption=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Ms):this.getTypedRuleContext(Ms,e)};intoClause(){return this.getTypedRuleContext(ds,0)}fromClause(){return this.getTypedRuleContext(_2,0)}whereClause(){return this.getTypedRuleContext(Pi,0)}unpivotClause=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(vs):this.getTypedRuleContext(vs,e)};qualifyClause(){return this.getTypedRuleContext(y2,0)}groupByClause(){return this.getTypedRuleContext(B2,0)}havingClause(){return this.getTypedRuleContext(d2,0)}windowClause(){return this.getTypedRuleContext(p2,0)}enterRule(e){e instanceof R&&e.enterQuerySpecification(this)}exitRule(e){e instanceof R&&e.exitQuerySpecification(this)}};c(u8,"QuerySpecificationContext");var s2=u8,t8=class t8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_subquery}query(){return this.getTypedRuleContext(u2,0)}queryExpressionParens(){return this.getTypedRuleContext(Jt,0)}enterRule(e){e instanceof R&&e.enterSubquery(this)}exitRule(e){e instanceof R&&e.exitSubquery(this)}};c(t8,"SubqueryContext");var zt=t8,r8=class r8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_querySpecOption}ALL_SYMBOL(){return this.getToken(o.ALL_SYMBOL,0)}DISTINCT_SYMBOL(){return this.getToken(o.DISTINCT_SYMBOL,0)}ON_SYMBOL(){return this.getToken(o.ON_SYMBOL,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}qualifiedIdentifier(){return this.getTypedRuleContext(Je,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}STRAIGHT_JOIN_SYMBOL(){return this.getToken(o.STRAIGHT_JOIN_SYMBOL,0)}HIGH_PRIORITY_SYMBOL(){return this.getToken(o.HIGH_PRIORITY_SYMBOL,0)}SQL_SMALL_RESULT_SYMBOL(){return this.getToken(o.SQL_SMALL_RESULT_SYMBOL,0)}SQL_BIG_RESULT_SYMBOL(){return this.getToken(o.SQL_BIG_RESULT_SYMBOL,0)}SQL_BUFFER_RESULT_SYMBOL(){return this.getToken(o.SQL_BUFFER_RESULT_SYMBOL,0)}SQL_CALC_FOUND_ROWS_SYMBOL(){return this.getToken(o.SQL_CALC_FOUND_ROWS_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterQuerySpecOption(this)}exitRule(e){e instanceof R&&e.exitQuerySpecOption(this)}};c(r8,"QuerySpecOptionContext");var n2=r8,i8=class i8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_limitClause}LIMIT_SYMBOL(){return this.getToken(o.LIMIT_SYMBOL,0)}limitOptions(){return this.getTypedRuleContext(l2,0)}enterRule(e){e instanceof R&&e.enterLimitClause(this)}exitRule(e){e instanceof R&&e.exitLimitClause(this)}};c(i8,"LimitClauseContext");var o2=i8,a8=class a8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_limitOptions}limitOption=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(cs):this.getTypedRuleContext(cs,e)};COMMA_SYMBOL(){return this.getToken(o.COMMA_SYMBOL,0)}OFFSET_SYMBOL(){return this.getToken(o.OFFSET_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterLimitOptions(this)}exitRule(e){e instanceof R&&e.exitLimitOptions(this)}};c(a8,"LimitOptionsContext");var l2=a8,s8=class s8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_limitOption}identifier(){return this.getTypedRuleContext(z0,0)}PARAM_MARKER(){return this.getToken(o.PARAM_MARKER,0)}INT_NUMBER(){return this.getToken(o.INT_NUMBER,0)}enterRule(e){e instanceof R&&e.enterLimitOption(this)}exitRule(e){e instanceof R&&e.exitLimitOption(this)}};c(s8,"LimitOptionContext");var cs=s8,n8=class n8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_intoClause}INTO_SYMBOL(){return this.getToken(o.INTO_SYMBOL,0)}OUTFILE_SYMBOL(){return this.getToken(o.OUTFILE_SYMBOL,0)}textStringLiteral(){return this.getTypedRuleContext(Ou,0)}DUMPFILE_SYMBOL(){return this.getToken(o.DUMPFILE_SYMBOL,0)}textOrIdentifier=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(rt):this.getTypedRuleContext(rt,e)};userVariable=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(qi):this.getTypedRuleContext(qi,e)};charsetClause(){return this.getTypedRuleContext(Ro,0)}fieldsClause(){return this.getTypedRuleContext(go,0)}linesClause(){return this.getTypedRuleContext(yo,0)}COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof R&&e.enterIntoClause(this)}exitRule(e){e instanceof R&&e.exitIntoClause(this)}};c(n8,"IntoClauseContext");var ds=n8,o8=class o8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_procedureAnalyseClause}PROCEDURE_SYMBOL(){return this.getToken(o.PROCEDURE_SYMBOL,0)}ANALYSE_SYMBOL(){return this.getToken(o.ANALYSE_SYMBOL,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}INT_NUMBER=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.INT_NUMBER):this.getToken(o.INT_NUMBER,e)};COMMA_SYMBOL(){return this.getToken(o.COMMA_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterProcedureAnalyseClause(this)}exitRule(e){e instanceof R&&e.exitProcedureAnalyseClause(this)}};c(o8,"ProcedureAnalyseClauseContext");var c2=o8,l8=class l8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_havingClause}HAVING_SYMBOL(){return this.getToken(o.HAVING_SYMBOL,0)}expr(){return this.getTypedRuleContext(A0,0)}enterRule(e){e instanceof R&&e.enterHavingClause(this)}exitRule(e){e instanceof R&&e.exitHavingClause(this)}};c(l8,"HavingClauseContext");var d2=l8,c8=class c8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_windowClause}WINDOW_SYMBOL(){return this.getToken(o.WINDOW_SYMBOL,0)}windowDefinition=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(ps):this.getTypedRuleContext(ps,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof R&&e.enterWindowClause(this)}exitRule(e){e instanceof R&&e.exitWindowClause(this)}};c(c8,"WindowClauseContext");var p2=c8,d8=class d8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_windowDefinition}identifier(){return this.getTypedRuleContext(z0,0)}AS_SYMBOL(){return this.getToken(o.AS_SYMBOL,0)}windowSpec(){return this.getTypedRuleContext(hs,0)}enterRule(e){e instanceof R&&e.enterWindowDefinition(this)}exitRule(e){e instanceof R&&e.exitWindowDefinition(this)}};c(d8,"WindowDefinitionContext");var ps=d8,p8=class p8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_windowSpec}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}windowSpecDetails(){return this.getTypedRuleContext(h2,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterWindowSpec(this)}exitRule(e){e instanceof R&&e.exitWindowSpec(this)}};c(p8,"WindowSpecContext");var hs=p8,h8=class h8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_windowSpecDetails}identifier(){return this.getTypedRuleContext(z0,0)}PARTITION_SYMBOL(){return this.getToken(o.PARTITION_SYMBOL,0)}BY_SYMBOL(){return this.getToken(o.BY_SYMBOL,0)}orderList(){return this.getTypedRuleContext(Wi,0)}orderClause(){return this.getTypedRuleContext(Di,0)}windowFrameClause(){return this.getTypedRuleContext(f2,0)}enterRule(e){e instanceof R&&e.enterWindowSpecDetails(this)}exitRule(e){e instanceof R&&e.exitWindowSpecDetails(this)}};c(h8,"WindowSpecDetailsContext");var h2=h8,f8=class f8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_windowFrameClause}windowFrameUnits(){return this.getTypedRuleContext(S2,0)}windowFrameExtent(){return this.getTypedRuleContext(O2,0)}windowFrameExclusion(){return this.getTypedRuleContext(E2,0)}enterRule(e){e instanceof R&&e.enterWindowFrameClause(this)}exitRule(e){e instanceof R&&e.exitWindowFrameClause(this)}};c(f8,"WindowFrameClauseContext");var f2=f8,S8=class S8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_windowFrameUnits}ROWS_SYMBOL(){return this.getToken(o.ROWS_SYMBOL,0)}RANGE_SYMBOL(){return this.getToken(o.RANGE_SYMBOL,0)}GROUPS_SYMBOL(){return this.getToken(o.GROUPS_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterWindowFrameUnits(this)}exitRule(e){e instanceof R&&e.exitWindowFrameUnits(this)}};c(S8,"WindowFrameUnitsContext");var S2=S8,O8=class O8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_windowFrameExtent}windowFrameStart(){return this.getTypedRuleContext(fs,0)}windowFrameBetween(){return this.getTypedRuleContext(L2,0)}enterRule(e){e instanceof R&&e.enterWindowFrameExtent(this)}exitRule(e){e instanceof R&&e.exitWindowFrameExtent(this)}};c(O8,"WindowFrameExtentContext");var O2=O8,L8=class L8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_windowFrameStart}UNBOUNDED_SYMBOL(){return this.getToken(o.UNBOUNDED_SYMBOL,0)}PRECEDING_SYMBOL(){return this.getToken(o.PRECEDING_SYMBOL,0)}ulonglong_number(){return this.getTypedRuleContext(Qi,0)}PARAM_MARKER(){return this.getToken(o.PARAM_MARKER,0)}INTERVAL_SYMBOL(){return this.getToken(o.INTERVAL_SYMBOL,0)}expr(){return this.getTypedRuleContext(A0,0)}interval(){return this.getTypedRuleContext($t,0)}CURRENT_SYMBOL(){return this.getToken(o.CURRENT_SYMBOL,0)}ROW_SYMBOL(){return this.getToken(o.ROW_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterWindowFrameStart(this)}exitRule(e){e instanceof R&&e.exitWindowFrameStart(this)}};c(L8,"WindowFrameStartContext");var fs=L8,E8=class E8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_windowFrameBetween}BETWEEN_SYMBOL(){return this.getToken(o.BETWEEN_SYMBOL,0)}windowFrameBound=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Ss):this.getTypedRuleContext(Ss,e)};AND_SYMBOL(){return this.getToken(o.AND_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterWindowFrameBetween(this)}exitRule(e){e instanceof R&&e.exitWindowFrameBetween(this)}};c(E8,"WindowFrameBetweenContext");var L2=E8,B8=class B8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_windowFrameBound}windowFrameStart(){return this.getTypedRuleContext(fs,0)}UNBOUNDED_SYMBOL(){return this.getToken(o.UNBOUNDED_SYMBOL,0)}FOLLOWING_SYMBOL(){return this.getToken(o.FOLLOWING_SYMBOL,0)}ulonglong_number(){return this.getTypedRuleContext(Qi,0)}PARAM_MARKER(){return this.getToken(o.PARAM_MARKER,0)}INTERVAL_SYMBOL(){return this.getToken(o.INTERVAL_SYMBOL,0)}expr(){return this.getTypedRuleContext(A0,0)}interval(){return this.getTypedRuleContext($t,0)}enterRule(e){e instanceof R&&e.enterWindowFrameBound(this)}exitRule(e){e instanceof R&&e.exitWindowFrameBound(this)}};c(B8,"WindowFrameBoundContext");var Ss=B8,M8=class M8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_windowFrameExclusion}EXCLUDE_SYMBOL(){return this.getToken(o.EXCLUDE_SYMBOL,0)}CURRENT_SYMBOL(){return this.getToken(o.CURRENT_SYMBOL,0)}ROW_SYMBOL(){return this.getToken(o.ROW_SYMBOL,0)}GROUP_SYMBOL(){return this.getToken(o.GROUP_SYMBOL,0)}TIES_SYMBOL(){return this.getToken(o.TIES_SYMBOL,0)}NO_SYMBOL(){return this.getToken(o.NO_SYMBOL,0)}OTHERS_SYMBOL(){return this.getToken(o.OTHERS_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterWindowFrameExclusion(this)}exitRule(e){e instanceof R&&e.exitWindowFrameExclusion(this)}};c(M8,"WindowFrameExclusionContext");var E2=M8,m8=class m8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_withClause}WITH_SYMBOL(){return this.getToken(o.WITH_SYMBOL,0)}commonTableExpression=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Ls):this.getTypedRuleContext(Ls,e)};RECURSIVE_SYMBOL(){return this.getToken(o.RECURSIVE_SYMBOL,0)}COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof R&&e.enterWithClause(this)}exitRule(e){e instanceof R&&e.exitWithClause(this)}};c(m8,"WithClauseContext");var Os=m8,_8=class _8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_commonTableExpression}identifier(){return this.getTypedRuleContext(z0,0)}AS_SYMBOL(){return this.getToken(o.AS_SYMBOL,0)}subquery(){return this.getTypedRuleContext(zt,0)}columnInternalRefList(){return this.getTypedRuleContext(Ws,0)}enterRule(e){e instanceof R&&e.enterCommonTableExpression(this)}exitRule(e){e instanceof R&&e.exitCommonTableExpression(this)}};c(_8,"CommonTableExpressionContext");var Ls=_8,T8=class T8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_groupByClause}GROUP_SYMBOL(){return this.getToken(o.GROUP_SYMBOL,0)}BY_SYMBOL(){return this.getToken(o.BY_SYMBOL,0)}orderList(){return this.getTypedRuleContext(Wi,0)}olapOption(){return this.getTypedRuleContext(M2,0)}enterRule(e){e instanceof R&&e.enterGroupByClause(this)}exitRule(e){e instanceof R&&e.exitGroupByClause(this)}};c(T8,"GroupByClauseContext");var B2=T8,Y8=class Y8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_olapOption}WITH_SYMBOL(){return this.getToken(o.WITH_SYMBOL,0)}ROLLUP_SYMBOL(){return this.getToken(o.ROLLUP_SYMBOL,0)}CUBE_SYMBOL(){return this.getToken(o.CUBE_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterOlapOption(this)}exitRule(e){e instanceof R&&e.exitOlapOption(this)}};c(Y8,"OlapOptionContext");var M2=Y8,A8=class A8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_orderClause}ORDER_SYMBOL(){return this.getToken(o.ORDER_SYMBOL,0)}BY_SYMBOL(){return this.getToken(o.BY_SYMBOL,0)}orderList(){return this.getTypedRuleContext(Wi,0)}enterRule(e){e instanceof R&&e.enterOrderClause(this)}exitRule(e){e instanceof R&&e.exitOrderClause(this)}};c(A8,"OrderClauseContext");var Di=A8,R8=class R8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_direction}ASC_SYMBOL(){return this.getToken(o.ASC_SYMBOL,0)}DESC_SYMBOL(){return this.getToken(o.DESC_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterDirection(this)}exitRule(e){e instanceof R&&e.exitDirection(this)}};c(R8,"DirectionContext");var m2=R8,g8=class g8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_fromClause}FROM_SYMBOL(){return this.getToken(o.FROM_SYMBOL,0)}DUAL_SYMBOL(){return this.getToken(o.DUAL_SYMBOL,0)}tableReferenceList(){return this.getTypedRuleContext(Es,0)}enterRule(e){e instanceof R&&e.enterFromClause(this)}exitRule(e){e instanceof R&&e.exitFromClause(this)}};c(g8,"FromClauseContext");var _2=g8,y8=class y8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_tableReferenceList}tableReference=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(ki):this.getTypedRuleContext(ki,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof R&&e.enterTableReferenceList(this)}exitRule(e){e instanceof R&&e.exitTableReferenceList(this)}};c(y8,"TableReferenceListContext");var Es=y8,N8=class N8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_tableValueConstructor}VALUES_SYMBOL(){return this.getToken(o.VALUES_SYMBOL,0)}rowValueExplicit=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Bs):this.getTypedRuleContext(Bs,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof R&&e.enterTableValueConstructor(this)}exitRule(e){e instanceof R&&e.exitTableValueConstructor(this)}};c(N8,"TableValueConstructorContext");var T2=N8,C8=class C8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_explicitTable}TABLE_SYMBOL(){return this.getToken(o.TABLE_SYMBOL,0)}qualifiedIdentifier(){return this.getTypedRuleContext(Je,0)}enterRule(e){e instanceof R&&e.enterExplicitTable(this)}exitRule(e){e instanceof R&&e.exitExplicitTable(this)}};c(C8,"ExplicitTableContext");var Y2=C8,I8=class I8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_rowValueExplicit}ROW_SYMBOL(){return this.getToken(o.ROW_SYMBOL,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}values(){return this.getTypedRuleContext(t2,0)}enterRule(e){e instanceof R&&e.enterRowValueExplicit(this)}exitRule(e){e instanceof R&&e.exitRowValueExplicit(this)}};c(I8,"RowValueExplicitContext");var Bs=I8,b8=class b8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_selectOption}querySpecOption(){return this.getTypedRuleContext(n2,0)}SQL_NO_CACHE_SYMBOL(){return this.getToken(o.SQL_NO_CACHE_SYMBOL,0)}SQL_CACHE_SYMBOL(){return this.getToken(o.SQL_CACHE_SYMBOL,0)}MAX_STATEMENT_TIME_SYMBOL(){return this.getToken(o.MAX_STATEMENT_TIME_SYMBOL,0)}EQUAL_OPERATOR(){return this.getToken(o.EQUAL_OPERATOR,0)}real_ulong_number(){return this.getTypedRuleContext(Zt,0)}enterRule(e){e instanceof R&&e.enterSelectOption(this)}exitRule(e){e instanceof R&&e.exitSelectOption(this)}};c(b8,"SelectOptionContext");var Ms=b8,x8=class x8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_lockingClauseList}lockingClause=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(ms):this.getTypedRuleContext(ms,e)};enterRule(e){e instanceof R&&e.enterLockingClauseList(this)}exitRule(e){e instanceof R&&e.exitLockingClauseList(this)}};c(x8,"LockingClauseListContext");var wi=x8,v8=class v8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_lockingClause}FOR_SYMBOL(){return this.getToken(o.FOR_SYMBOL,0)}lockStrengh(){return this.getTypedRuleContext(A2,0)}OF_SYMBOL(){return this.getToken(o.OF_SYMBOL,0)}tableAliasRefList(){return this.getTypedRuleContext(Co,0)}lockedRowAction(){return this.getTypedRuleContext(R2,0)}LOCK_SYMBOL(){return this.getToken(o.LOCK_SYMBOL,0)}IN_SYMBOL(){return this.getToken(o.IN_SYMBOL,0)}SHARE_SYMBOL(){return this.getToken(o.SHARE_SYMBOL,0)}MODE_SYMBOL(){return this.getToken(o.MODE_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterLockingClause(this)}exitRule(e){e instanceof R&&e.exitLockingClause(this)}};c(v8,"LockingClauseContext");var ms=v8,D8=class D8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_lockStrengh}UPDATE_SYMBOL(){return this.getToken(o.UPDATE_SYMBOL,0)}SHARE_SYMBOL(){return this.getToken(o.SHARE_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterLockStrengh(this)}exitRule(e){e instanceof R&&e.exitLockStrengh(this)}};c(D8,"LockStrenghContext");var A2=D8,w8=class w8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_lockedRowAction}SKIP_SYMBOL(){return this.getToken(o.SKIP_SYMBOL,0)}LOCKED_SYMBOL(){return this.getToken(o.LOCKED_SYMBOL,0)}NOWAIT_SYMBOL(){return this.getToken(o.NOWAIT_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterLockedRowAction(this)}exitRule(e){e instanceof R&&e.exitLockedRowAction(this)}};c(w8,"LockedRowActionContext");var R2=w8,U8=class U8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_selectItemList}selectItem=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Ui):this.getTypedRuleContext(Ui,e)};MULT_OPERATOR(){return this.getToken(o.MULT_OPERATOR,0)}COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof R&&e.enterSelectItemList(this)}exitRule(e){e instanceof R&&e.exitSelectItemList(this)}};c(U8,"SelectItemListContext");var g2=U8,P8=class P8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_selectItem}qualifiedIdentifier(){return this.getTypedRuleContext(Je,0)}jsonPathIdentifier(){return this.getTypedRuleContext(Xs,0)}selectAlias(){return this.getTypedRuleContext(_s,0)}expr(){return this.getTypedRuleContext(A0,0)}enterRule(e){e instanceof R&&e.enterSelectItem(this)}exitRule(e){e instanceof R&&e.exitSelectItem(this)}};c(P8,"SelectItemContext");var Ui=P8,k8=class k8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_selectAlias}identifier(){return this.getTypedRuleContext(z0,0)}textStringLiteral(){return this.getTypedRuleContext(Ou,0)}AS_SYMBOL(){return this.getToken(o.AS_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterSelectAlias(this)}exitRule(e){e instanceof R&&e.exitSelectAlias(this)}};c(k8,"SelectAliasContext");var _s=k8,F8=class F8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_whereClause}WHERE_SYMBOL(){return this.getToken(o.WHERE_SYMBOL,0)}expr(){return this.getTypedRuleContext(A0,0)}enterRule(e){e instanceof R&&e.enterWhereClause(this)}exitRule(e){e instanceof R&&e.exitWhereClause(this)}};c(F8,"WhereClauseContext");var Pi=F8,H8=class H8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_qualifyClause}QUALIFY_SYMBOL(){return this.getToken(o.QUALIFY_SYMBOL,0)}expr(){return this.getTypedRuleContext(A0,0)}enterRule(e){e instanceof R&&e.enterQualifyClause(this)}exitRule(e){e instanceof R&&e.exitQualifyClause(this)}};c(H8,"QualifyClauseContext");var y2=H8,V8=class V8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_tableReference}tableFactor(){return this.getTypedRuleContext(Fi,0)}OPEN_CURLY_SYMBOL(){return this.getToken(o.OPEN_CURLY_SYMBOL,0)}escapedTableReference(){return this.getTypedRuleContext(N2,0)}CLOSE_CURLY_SYMBOL(){return this.getToken(o.CLOSE_CURLY_SYMBOL,0)}joinedTable=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Wr):this.getTypedRuleContext(Wr,e)};identifier(){return this.getTypedRuleContext(z0,0)}OJ_SYMBOL(){return this.getToken(o.OJ_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterTableReference(this)}exitRule(e){e instanceof R&&e.exitTableReference(this)}};c(V8,"TableReferenceContext");var ki=V8,G8=class G8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_escapedTableReference}tableFactor(){return this.getTypedRuleContext(Fi,0)}joinedTable=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Wr):this.getTypedRuleContext(Wr,e)};enterRule(e){e instanceof R&&e.enterEscapedTableReference(this)}exitRule(e){e instanceof R&&e.exitEscapedTableReference(this)}};c(G8,"EscapedTableReferenceContext");var N2=G8,q8=class q8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_joinedTable}innerJoinType(){return this.getTypedRuleContext(I2,0)}tableReference(){return this.getTypedRuleContext(ki,0)}ON_SYMBOL(){return this.getToken(o.ON_SYMBOL,0)}expr(){return this.getTypedRuleContext(A0,0)}USING_SYMBOL(){return this.getToken(o.USING_SYMBOL,0)}identifierListWithParentheses(){return this.getTypedRuleContext(Xi,0)}outerJoinType(){return this.getTypedRuleContext(b2,0)}naturalJoinType(){return this.getTypedRuleContext(C2,0)}tableFactor(){return this.getTypedRuleContext(Fi,0)}enterRule(e){e instanceof R&&e.enterJoinedTable(this)}exitRule(e){e instanceof R&&e.exitJoinedTable(this)}};c(q8,"JoinedTableContext");var Wr=q8,K8=class K8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_naturalJoinType}NATURAL_SYMBOL(){return this.getToken(o.NATURAL_SYMBOL,0)}JOIN_SYMBOL(){return this.getToken(o.JOIN_SYMBOL,0)}INNER_SYMBOL(){return this.getToken(o.INNER_SYMBOL,0)}LEFT_SYMBOL(){return this.getToken(o.LEFT_SYMBOL,0)}RIGHT_SYMBOL(){return this.getToken(o.RIGHT_SYMBOL,0)}OUTER_SYMBOL(){return this.getToken(o.OUTER_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterNaturalJoinType(this)}exitRule(e){e instanceof R&&e.exitNaturalJoinType(this)}};c(K8,"NaturalJoinTypeContext");var C2=K8,W8=class W8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_innerJoinType}JOIN_SYMBOL(){return this.getToken(o.JOIN_SYMBOL,0)}INNER_SYMBOL(){return this.getToken(o.INNER_SYMBOL,0)}CROSS_SYMBOL(){return this.getToken(o.CROSS_SYMBOL,0)}STRAIGHT_JOIN_SYMBOL(){return this.getToken(o.STRAIGHT_JOIN_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterInnerJoinType(this)}exitRule(e){e instanceof R&&e.exitInnerJoinType(this)}};c(W8,"InnerJoinTypeContext");var I2=W8,j8=class j8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_outerJoinType}JOIN_SYMBOL(){return this.getToken(o.JOIN_SYMBOL,0)}LEFT_SYMBOL(){return this.getToken(o.LEFT_SYMBOL,0)}RIGHT_SYMBOL(){return this.getToken(o.RIGHT_SYMBOL,0)}OUTER_SYMBOL(){return this.getToken(o.OUTER_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterOuterJoinType(this)}exitRule(e){e instanceof R&&e.exitOuterJoinType(this)}};c(j8,"OuterJoinTypeContext");var b2=j8,X8=class X8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_tableFactor}singleTable(){return this.getTypedRuleContext(Ts,0)}singleTableParens(){return this.getTypedRuleContext(x2,0)}derivedTable(){return this.getTypedRuleContext(v2,0)}tableReferenceListParens(){return this.getTypedRuleContext(D2,0)}tableFunction(){return this.getTypedRuleContext(w2,0)}enterRule(e){e instanceof R&&e.enterTableFactor(this)}exitRule(e){e instanceof R&&e.exitTableFactor(this)}};c(X8,"TableFactorContext");var Fi=X8,Q8=class Q8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_singleTable}qualifiedIdentifier(){return this.getTypedRuleContext(Je,0)}usePartition(){return this.getTypedRuleContext(No,0)}tableAlias(){return this.getTypedRuleContext(Hi,0)}indexHintList(){return this.getTypedRuleContext(F2,0)}enterRule(e){e instanceof R&&e.enterSingleTable(this)}exitRule(e){e instanceof R&&e.exitSingleTable(this)}};c(Q8,"SingleTableContext");var Ts=Q8,S3=class S3 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_singleTableParens}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}singleTable(){return this.getTypedRuleContext(Ts,0)}singleTableParens(){return this.getTypedRuleContext(S3,0)}enterRule(e){e instanceof R&&e.enterSingleTableParens(this)}exitRule(e){e instanceof R&&e.exitSingleTableParens(this)}};c(S3,"SingleTableParensContext");var x2=S3,J8=class J8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_derivedTable}subquery(){return this.getTypedRuleContext(zt,0)}tableAlias(){return this.getTypedRuleContext(Hi,0)}columnInternalRefList(){return this.getTypedRuleContext(Ws,0)}LATERAL_SYMBOL(){return this.getToken(o.LATERAL_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterDerivedTable(this)}exitRule(e){e instanceof R&&e.exitDerivedTable(this)}};c(J8,"DerivedTableContext");var v2=J8,O3=class O3 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_tableReferenceListParens}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}tableReferenceList(){return this.getTypedRuleContext(Es,0)}tableReferenceListParens(){return this.getTypedRuleContext(O3,0)}enterRule(e){e instanceof R&&e.enterTableReferenceListParens(this)}exitRule(e){e instanceof R&&e.exitTableReferenceListParens(this)}};c(O3,"TableReferenceListParensContext");var D2=O3,z8=class z8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_tableFunction}JSON_TABLE_SYMBOL(){return this.getToken(o.JSON_TABLE_SYMBOL,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}expr(){return this.getTypedRuleContext(A0,0)}COMMA_SYMBOL(){return this.getToken(o.COMMA_SYMBOL,0)}textStringLiteral(){return this.getTypedRuleContext(Ou,0)}columnsClause(){return this.getTypedRuleContext(Ys,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}tableAlias(){return this.getTypedRuleContext(Hi,0)}enterRule(e){e instanceof R&&e.enterTableFunction(this)}exitRule(e){e instanceof R&&e.exitTableFunction(this)}};c(z8,"TableFunctionContext");var w2=z8,$8=class $8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_columnsClause}COLUMNS_SYMBOL(){return this.getToken(o.COLUMNS_SYMBOL,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}jtColumn=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(As):this.getTypedRuleContext(As,e)};CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof R&&e.enterColumnsClause(this)}exitRule(e){e instanceof R&&e.exitColumnsClause(this)}};c($8,"ColumnsClauseContext");var Ys=$8,Z8=class Z8 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_jtColumn}identifier(){return this.getTypedRuleContext(z0,0)}FOR_SYMBOL(){return this.getToken(o.FOR_SYMBOL,0)}ORDINALITY_SYMBOL(){return this.getToken(o.ORDINALITY_SYMBOL,0)}dataType(){return this.getTypedRuleContext(ji,0)}PATH_SYMBOL(){return this.getToken(o.PATH_SYMBOL,0)}textStringLiteral(){return this.getTypedRuleContext(Ou,0)}collate(){return this.getTypedRuleContext(Ao,0)}EXISTS_SYMBOL(){return this.getToken(o.EXISTS_SYMBOL,0)}onEmptyOrError(){return this.getTypedRuleContext(U2,0)}NESTED_SYMBOL(){return this.getToken(o.NESTED_SYMBOL,0)}columnsClause(){return this.getTypedRuleContext(Ys,0)}enterRule(e){e instanceof R&&e.enterJtColumn(this)}exitRule(e){e instanceof R&&e.exitJtColumn(this)}};c(Z8,"JtColumnContext");var As=Z8,eL=class eL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_onEmptyOrError}onEmpty(){return this.getTypedRuleContext(P2,0)}onError(){return this.getTypedRuleContext(k2,0)}enterRule(e){e instanceof R&&e.enterOnEmptyOrError(this)}exitRule(e){e instanceof R&&e.exitOnEmptyOrError(this)}};c(eL,"OnEmptyOrErrorContext");var U2=eL,uL=class uL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_onEmpty}jtOnResponse(){return this.getTypedRuleContext(Rs,0)}ON_SYMBOL(){return this.getToken(o.ON_SYMBOL,0)}EMPTY_SYMBOL(){return this.getToken(o.EMPTY_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterOnEmpty(this)}exitRule(e){e instanceof R&&e.exitOnEmpty(this)}};c(uL,"OnEmptyContext");var P2=uL,tL=class tL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_onError}jtOnResponse(){return this.getTypedRuleContext(Rs,0)}ON_SYMBOL(){return this.getToken(o.ON_SYMBOL,0)}ERROR_SYMBOL(){return this.getToken(o.ERROR_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterOnError(this)}exitRule(e){e instanceof R&&e.exitOnError(this)}};c(tL,"OnErrorContext");var k2=tL,rL=class rL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_jtOnResponse}ERROR_SYMBOL(){return this.getToken(o.ERROR_SYMBOL,0)}NULL_SYMBOL(){return this.getToken(o.NULL_SYMBOL,0)}DEFAULT_SYMBOL(){return this.getToken(o.DEFAULT_SYMBOL,0)}textStringLiteral(){return this.getTypedRuleContext(Ou,0)}enterRule(e){e instanceof R&&e.enterJtOnResponse(this)}exitRule(e){e instanceof R&&e.exitJtOnResponse(this)}};c(rL,"JtOnResponseContext");var Rs=rL,iL=class iL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_unionOption}DISTINCT_SYMBOL(){return this.getToken(o.DISTINCT_SYMBOL,0)}ALL_SYMBOL(){return this.getToken(o.ALL_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterUnionOption(this)}exitRule(e){e instanceof R&&e.exitUnionOption(this)}};c(iL,"UnionOptionContext");var gs=iL,aL=class aL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_tableAlias}identifier(){return this.getTypedRuleContext(z0,0)}AS_SYMBOL(){return this.getToken(o.AS_SYMBOL,0)}EQUAL_OPERATOR(){return this.getToken(o.EQUAL_OPERATOR,0)}enterRule(e){e instanceof R&&e.enterTableAlias(this)}exitRule(e){e instanceof R&&e.exitTableAlias(this)}};c(aL,"TableAliasContext");var Hi=aL,sL=class sL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_indexHintList}indexHint=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(ys):this.getTypedRuleContext(ys,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof R&&e.enterIndexHintList(this)}exitRule(e){e instanceof R&&e.exitIndexHintList(this)}};c(sL,"IndexHintListContext");var F2=sL,nL=class nL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_indexHint}indexHintType(){return this.getTypedRuleContext(H2,0)}keyOrIndex(){return this.getTypedRuleContext(V2,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}indexList(){return this.getTypedRuleContext(q2,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}indexHintClause(){return this.getTypedRuleContext(G2,0)}USE_SYMBOL(){return this.getToken(o.USE_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterIndexHint(this)}exitRule(e){e instanceof R&&e.exitIndexHint(this)}};c(nL,"IndexHintContext");var ys=nL,oL=class oL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_indexHintType}FORCE_SYMBOL(){return this.getToken(o.FORCE_SYMBOL,0)}IGNORE_SYMBOL(){return this.getToken(o.IGNORE_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterIndexHintType(this)}exitRule(e){e instanceof R&&e.exitIndexHintType(this)}};c(oL,"IndexHintTypeContext");var H2=oL,lL=class lL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_keyOrIndex}KEY_SYMBOL(){return this.getToken(o.KEY_SYMBOL,0)}INDEX_SYMBOL(){return this.getToken(o.INDEX_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterKeyOrIndex(this)}exitRule(e){e instanceof R&&e.exitKeyOrIndex(this)}};c(lL,"KeyOrIndexContext");var V2=lL,cL=class cL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_indexHintClause}FOR_SYMBOL(){return this.getToken(o.FOR_SYMBOL,0)}JOIN_SYMBOL(){return this.getToken(o.JOIN_SYMBOL,0)}ORDER_SYMBOL(){return this.getToken(o.ORDER_SYMBOL,0)}BY_SYMBOL(){return this.getToken(o.BY_SYMBOL,0)}GROUP_SYMBOL(){return this.getToken(o.GROUP_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterIndexHintClause(this)}exitRule(e){e instanceof R&&e.exitIndexHintClause(this)}};c(cL,"IndexHintClauseContext");var G2=cL,dL=class dL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_indexList}indexListElement=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Ns):this.getTypedRuleContext(Ns,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof R&&e.enterIndexList(this)}exitRule(e){e instanceof R&&e.exitIndexList(this)}};c(dL,"IndexListContext");var q2=dL,pL=class pL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_indexListElement}identifier(){return this.getTypedRuleContext(z0,0)}PRIMARY_SYMBOL(){return this.getToken(o.PRIMARY_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterIndexListElement(this)}exitRule(e){e instanceof R&&e.exitIndexListElement(this)}};c(pL,"IndexListElementContext");var Ns=pL,$1=class $1 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_expr}boolPri(){return this.getTypedRuleContext(Kr,0)}IS_SYMBOL(){return this.getToken(o.IS_SYMBOL,0)}TRUE_SYMBOL(){return this.getToken(o.TRUE_SYMBOL,0)}FALSE_SYMBOL(){return this.getToken(o.FALSE_SYMBOL,0)}UNKNOWN_SYMBOL(){return this.getToken(o.UNKNOWN_SYMBOL,0)}notRule(){return this.getTypedRuleContext(Ki,0)}NOT_SYMBOL(){return this.getToken(o.NOT_SYMBOL,0)}expr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts($1):this.getTypedRuleContext($1,e)};AND_SYMBOL(){return this.getToken(o.AND_SYMBOL,0)}LOGICAL_AND_OPERATOR(){return this.getToken(o.LOGICAL_AND_OPERATOR,0)}XOR_SYMBOL(){return this.getToken(o.XOR_SYMBOL,0)}OR_SYMBOL(){return this.getToken(o.OR_SYMBOL,0)}LOGICAL_OR_OPERATOR(){return this.getToken(o.LOGICAL_OR_OPERATOR,0)}enterRule(e){e instanceof R&&e.enterExpr(this)}exitRule(e){e instanceof R&&e.exitExpr(this)}};c($1,"ExprContext");var A0=$1,L3=class L3 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_boolPri}predicate(){return this.getTypedRuleContext(Cs,0)}boolPri(){return this.getTypedRuleContext(L3,0)}IS_SYMBOL(){return this.getToken(o.IS_SYMBOL,0)}NULL_SYMBOL(){return this.getToken(o.NULL_SYMBOL,0)}notRule(){return this.getTypedRuleContext(Ki,0)}compOp(){return this.getTypedRuleContext(K2,0)}subquery(){return this.getTypedRuleContext(zt,0)}ALL_SYMBOL(){return this.getToken(o.ALL_SYMBOL,0)}ANY_SYMBOL(){return this.getToken(o.ANY_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterBoolPri(this)}exitRule(e){e instanceof R&&e.exitBoolPri(this)}};c(L3,"BoolPriContext");var Kr=L3,hL=class hL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_compOp}EQUAL_OPERATOR(){return this.getToken(o.EQUAL_OPERATOR,0)}NULL_SAFE_EQUAL_OPERATOR(){return this.getToken(o.NULL_SAFE_EQUAL_OPERATOR,0)}GREATER_OR_EQUAL_OPERATOR(){return this.getToken(o.GREATER_OR_EQUAL_OPERATOR,0)}GREATER_THAN_OPERATOR(){return this.getToken(o.GREATER_THAN_OPERATOR,0)}LESS_OR_EQUAL_OPERATOR(){return this.getToken(o.LESS_OR_EQUAL_OPERATOR,0)}LESS_THAN_OPERATOR(){return this.getToken(o.LESS_THAN_OPERATOR,0)}NOT_EQUAL_OPERATOR(){return this.getToken(o.NOT_EQUAL_OPERATOR,0)}enterRule(e){e instanceof R&&e.enterCompOp(this)}exitRule(e){e instanceof R&&e.exitCompOp(this)}};c(hL,"CompOpContext");var K2=hL,fL=class fL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_predicate}bitExpr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(du):this.getTypedRuleContext(du,e)};predicateOperations(){return this.getTypedRuleContext(W2,0)}MEMBER_SYMBOL(){return this.getToken(o.MEMBER_SYMBOL,0)}simpleExprWithParentheses(){return this.getTypedRuleContext(Hs,0)}SOUNDS_SYMBOL(){return this.getToken(o.SOUNDS_SYMBOL,0)}LIKE_SYMBOL(){return this.getToken(o.LIKE_SYMBOL,0)}nullTreatment(){return this.getTypedRuleContext(Is,0)}notRule(){return this.getTypedRuleContext(Ki,0)}OF_SYMBOL(){return this.getToken(o.OF_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterPredicate(this)}exitRule(e){e instanceof R&&e.exitPredicate(this)}};c(fL,"PredicateContext");var Cs=fL,SL=class SL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_predicateOperations}IN_SYMBOL(){return this.getToken(o.IN_SYMBOL,0)}subquery(){return this.getTypedRuleContext(zt,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}exprList(){return this.getTypedRuleContext(Hu,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}BETWEEN_SYMBOL(){return this.getToken(o.BETWEEN_SYMBOL,0)}bitExpr(){return this.getTypedRuleContext(du,0)}AND_SYMBOL(){return this.getToken(o.AND_SYMBOL,0)}predicate(){return this.getTypedRuleContext(Cs,0)}LIKE_SYMBOL(){return this.getToken(o.LIKE_SYMBOL,0)}simpleExpr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Fu):this.getTypedRuleContext(Fu,e)};ESCAPE_SYMBOL(){return this.getToken(o.ESCAPE_SYMBOL,0)}REGEXP_SYMBOL(){return this.getToken(o.REGEXP_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterPredicateOperations(this)}exitRule(e){e instanceof R&&e.exitPredicateOperations(this)}};c(SL,"PredicateOperationsContext");var W2=SL,Z1=class Z1 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_bitExpr}simpleExpr(){return this.getTypedRuleContext(Fu,0)}bitExpr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Z1):this.getTypedRuleContext(Z1,e)};BITWISE_XOR_OPERATOR(){return this.getToken(o.BITWISE_XOR_OPERATOR,0)}MULT_OPERATOR(){return this.getToken(o.MULT_OPERATOR,0)}DIV_OPERATOR(){return this.getToken(o.DIV_OPERATOR,0)}MOD_OPERATOR(){return this.getToken(o.MOD_OPERATOR,0)}DIV_SYMBOL(){return this.getToken(o.DIV_SYMBOL,0)}MOD_SYMBOL(){return this.getToken(o.MOD_SYMBOL,0)}PLUS_OPERATOR(){return this.getToken(o.PLUS_OPERATOR,0)}MINUS_OPERATOR(){return this.getToken(o.MINUS_OPERATOR,0)}SHIFT_LEFT_OPERATOR(){return this.getToken(o.SHIFT_LEFT_OPERATOR,0)}SHIFT_RIGHT_OPERATOR(){return this.getToken(o.SHIFT_RIGHT_OPERATOR,0)}BITWISE_AND_OPERATOR(){return this.getToken(o.BITWISE_AND_OPERATOR,0)}BITWISE_OR_OPERATOR(){return this.getToken(o.BITWISE_OR_OPERATOR,0)}INTERVAL_SYMBOL(){return this.getToken(o.INTERVAL_SYMBOL,0)}SINGLE_QUOTED_TEXT(){return this.getToken(o.SINGLE_QUOTED_TEXT,0)}expr(){return this.getTypedRuleContext(A0,0)}interval(){return this.getTypedRuleContext($t,0)}enterRule(e){e instanceof R&&e.enterBitExpr(this)}exitRule(e){e instanceof R&&e.exitBitExpr(this)}};c(Z1,"BitExprContext");var du=Z1,e2=class e2 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_simpleExpr}variable(){return this.getTypedRuleContext(ho,0)}equal(){return this.getTypedRuleContext(Ho,0)}expr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(A0):this.getTypedRuleContext(A0,e)};qualifiedIdentifier(){return this.getTypedRuleContext(Je,0)}jsonOperator(){return this.getTypedRuleContext(j2,0)}runtimeFunctionCall(){return this.getTypedRuleContext(to,0)}functionCall(){return this.getTypedRuleContext(co,0)}literal(){return this.getTypedRuleContext(vo,0)}PARAM_MARKER(){return this.getToken(o.PARAM_MARKER,0)}sumExpr(){return this.getTypedRuleContext(X2,0)}groupingOperation(){return this.getTypedRuleContext(Q2,0)}windowFunctionCall(){return this.getTypedRuleContext(J2,0)}simpleExpr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(e2):this.getTypedRuleContext(e2,e)};PLUS_OPERATOR(){return this.getToken(o.PLUS_OPERATOR,0)}MINUS_OPERATOR(){return this.getToken(o.MINUS_OPERATOR,0)}BITWISE_NOT_OPERATOR(){return this.getToken(o.BITWISE_NOT_OPERATOR,0)}not2Rule(){return this.getTypedRuleContext(Oo,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}exprList(){return this.getTypedRuleContext(Hu,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}ROW_SYMBOL(){return this.getToken(o.ROW_SYMBOL,0)}subquery(){return this.getTypedRuleContext(zt,0)}EXISTS_SYMBOL(){return this.getToken(o.EXISTS_SYMBOL,0)}OPEN_CURLY_SYMBOL(){return this.getToken(o.OPEN_CURLY_SYMBOL,0)}identifier(){return this.getTypedRuleContext(z0,0)}CLOSE_CURLY_SYMBOL(){return this.getToken(o.CLOSE_CURLY_SYMBOL,0)}MATCH_SYMBOL(){return this.getToken(o.MATCH_SYMBOL,0)}identListArg(){return this.getTypedRuleContext(Z2,0)}AGAINST_SYMBOL(){return this.getToken(o.AGAINST_SYMBOL,0)}bitExpr(){return this.getTypedRuleContext(du,0)}fulltextOptions(){return this.getTypedRuleContext(uo,0)}BINARY_SYMBOL(){return this.getToken(o.BINARY_SYMBOL,0)}CAST_SYMBOL(){return this.getToken(o.CAST_SYMBOL,0)}AS_SYMBOL(){return this.getToken(o.AS_SYMBOL,0)}dataType(){return this.getTypedRuleContext(ji,0)}ARRAY_SYMBOL(){return this.getToken(o.ARRAY_SYMBOL,0)}CASE_SYMBOL(){return this.getToken(o.CASE_SYMBOL,0)}END_SYMBOL(){return this.getToken(o.END_SYMBOL,0)}whenExpression=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Ds):this.getTypedRuleContext(Ds,e)};thenExpression=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(ws):this.getTypedRuleContext(ws,e)};elseExpression(){return this.getTypedRuleContext(So,0)}CONVERT_SYMBOL(){return this.getToken(o.CONVERT_SYMBOL,0)}COMMA_SYMBOL(){return this.getToken(o.COMMA_SYMBOL,0)}USING_SYMBOL(){return this.getToken(o.USING_SYMBOL,0)}charsetName(){return this.getTypedRuleContext(jr,0)}DEFAULT_SYMBOL(){return this.getToken(o.DEFAULT_SYMBOL,0)}VALUES_SYMBOL(){return this.getToken(o.VALUES_SYMBOL,0)}INTERVAL_SYMBOL(){return this.getToken(o.INTERVAL_SYMBOL,0)}interval(){return this.getTypedRuleContext($t,0)}jsonPathIdentifier(){return this.getTypedRuleContext(Xs,0)}LOGICAL_OR_OPERATOR(){return this.getToken(o.LOGICAL_OR_OPERATOR,0)}COLLATE_SYMBOL(){return this.getToken(o.COLLATE_SYMBOL,0)}textOrIdentifier(){return this.getTypedRuleContext(rt,0)}CAST_COLON_SYMBOL(){return this.getToken(o.CAST_COLON_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterSimpleExpr(this)}exitRule(e){e instanceof R&&e.exitSimpleExpr(this)}};c(e2,"SimpleExprContext");var Fu=e2,OL=class OL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_jsonOperator}JSON_SEPARATOR_SYMBOL(){return this.getToken(o.JSON_SEPARATOR_SYMBOL,0)}JSON_UNQUOTED_SEPARATOR_SYMBOL(){return this.getToken(o.JSON_UNQUOTED_SEPARATOR_SYMBOL,0)}textStringLiteral(){return this.getTypedRuleContext(Ou,0)}expr(){return this.getTypedRuleContext(A0,0)}enterRule(e){e instanceof R&&e.enterJsonOperator(this)}exitRule(e){e instanceof R&&e.exitJsonOperator(this)}};c(OL,"JsonOperatorContext");var j2=OL,LL=class LL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_sumExpr}AVG_SYMBOL(){return this.getToken(o.AVG_SYMBOL,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}inSumExpr(){return this.getTypedRuleContext(Gi,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}DISTINCT_SYMBOL(){return this.getToken(o.DISTINCT_SYMBOL,0)}windowingClause(){return this.getTypedRuleContext(Vi,0)}BIT_AND_SYMBOL(){return this.getToken(o.BIT_AND_SYMBOL,0)}BIT_OR_SYMBOL(){return this.getToken(o.BIT_OR_SYMBOL,0)}BIT_XOR_SYMBOL(){return this.getToken(o.BIT_XOR_SYMBOL,0)}jsonFunction(){return this.getTypedRuleContext($2,0)}COUNT_SYMBOL(){return this.getToken(o.COUNT_SYMBOL,0)}MULT_OPERATOR(){return this.getToken(o.MULT_OPERATOR,0)}ALL_SYMBOL(){return this.getToken(o.ALL_SYMBOL,0)}exprList(){return this.getTypedRuleContext(Hu,0)}MIN_SYMBOL(){return this.getToken(o.MIN_SYMBOL,0)}MAX_SYMBOL(){return this.getToken(o.MAX_SYMBOL,0)}STD_SYMBOL(){return this.getToken(o.STD_SYMBOL,0)}VARIANCE_SYMBOL(){return this.getToken(o.VARIANCE_SYMBOL,0)}STDDEV_SAMP_SYMBOL(){return this.getToken(o.STDDEV_SAMP_SYMBOL,0)}VAR_SAMP_SYMBOL(){return this.getToken(o.VAR_SAMP_SYMBOL,0)}SUM_SYMBOL(){return this.getToken(o.SUM_SYMBOL,0)}GROUP_CONCAT_SYMBOL(){return this.getToken(o.GROUP_CONCAT_SYMBOL,0)}orderClause(){return this.getTypedRuleContext(Di,0)}SEPARATOR_SYMBOL(){return this.getToken(o.SEPARATOR_SYMBOL,0)}textString(){return this.getTypedRuleContext(er,0)}enterRule(e){e instanceof R&&e.enterSumExpr(this)}exitRule(e){e instanceof R&&e.exitSumExpr(this)}};c(LL,"SumExprContext");var X2=LL,EL=class EL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_groupingOperation}GROUPING_SYMBOL(){return this.getToken(o.GROUPING_SYMBOL,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}exprList(){return this.getTypedRuleContext(Hu,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterGroupingOperation(this)}exitRule(e){e instanceof R&&e.exitGroupingOperation(this)}};c(EL,"GroupingOperationContext");var Q2=EL,BL=class BL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_windowFunctionCall}parentheses(){return this.getTypedRuleContext($s,0)}windowingClause(){return this.getTypedRuleContext(Vi,0)}ROW_NUMBER_SYMBOL(){return this.getToken(o.ROW_NUMBER_SYMBOL,0)}RANK_SYMBOL(){return this.getToken(o.RANK_SYMBOL,0)}DENSE_RANK_SYMBOL(){return this.getToken(o.DENSE_RANK_SYMBOL,0)}CUME_DIST_SYMBOL(){return this.getToken(o.CUME_DIST_SYMBOL,0)}PERCENT_RANK_SYMBOL(){return this.getToken(o.PERCENT_RANK_SYMBOL,0)}NTILE_SYMBOL(){return this.getToken(o.NTILE_SYMBOL,0)}simpleExprWithParentheses(){return this.getTypedRuleContext(Hs,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}expr(){return this.getTypedRuleContext(A0,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}LEAD_SYMBOL(){return this.getToken(o.LEAD_SYMBOL,0)}LAG_SYMBOL(){return this.getToken(o.LAG_SYMBOL,0)}leadLagInfo(){return this.getTypedRuleContext(z2,0)}nullTreatment(){return this.getTypedRuleContext(Is,0)}exprWithParentheses(){return this.getTypedRuleContext(Fs,0)}FIRST_VALUE_SYMBOL(){return this.getToken(o.FIRST_VALUE_SYMBOL,0)}LAST_VALUE_SYMBOL(){return this.getToken(o.LAST_VALUE_SYMBOL,0)}NTH_VALUE_SYMBOL(){return this.getToken(o.NTH_VALUE_SYMBOL,0)}COMMA_SYMBOL(){return this.getToken(o.COMMA_SYMBOL,0)}simpleExpr(){return this.getTypedRuleContext(Fu,0)}FROM_SYMBOL(){return this.getToken(o.FROM_SYMBOL,0)}FIRST_SYMBOL(){return this.getToken(o.FIRST_SYMBOL,0)}LAST_SYMBOL(){return this.getToken(o.LAST_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterWindowFunctionCall(this)}exitRule(e){e instanceof R&&e.exitWindowFunctionCall(this)}};c(BL,"WindowFunctionCallContext");var J2=BL,ML=class ML extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_windowingClause}OVER_SYMBOL(){return this.getToken(o.OVER_SYMBOL,0)}identifier(){return this.getTypedRuleContext(z0,0)}windowSpec(){return this.getTypedRuleContext(hs,0)}enterRule(e){e instanceof R&&e.enterWindowingClause(this)}exitRule(e){e instanceof R&&e.exitWindowingClause(this)}};c(ML,"WindowingClauseContext");var Vi=ML,mL=class mL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_leadLagInfo}COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};ulonglong_number(){return this.getTypedRuleContext(Qi,0)}PARAM_MARKER(){return this.getToken(o.PARAM_MARKER,0)}expr(){return this.getTypedRuleContext(A0,0)}enterRule(e){e instanceof R&&e.enterLeadLagInfo(this)}exitRule(e){e instanceof R&&e.exitLeadLagInfo(this)}};c(mL,"LeadLagInfoContext");var z2=mL,_L=class _L extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_nullTreatment}NULLS_SYMBOL(){return this.getToken(o.NULLS_SYMBOL,0)}RESPECT_SYMBOL(){return this.getToken(o.RESPECT_SYMBOL,0)}IGNORE_SYMBOL(){return this.getToken(o.IGNORE_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterNullTreatment(this)}exitRule(e){e instanceof R&&e.exitNullTreatment(this)}};c(_L,"NullTreatmentContext");var Is=_L,TL=class TL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_jsonFunction}JSON_ARRAYAGG_SYMBOL(){return this.getToken(o.JSON_ARRAYAGG_SYMBOL,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}inSumExpr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Gi):this.getTypedRuleContext(Gi,e)};CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}windowingClause(){return this.getTypedRuleContext(Vi,0)}JSON_OBJECTAGG_SYMBOL(){return this.getToken(o.JSON_OBJECTAGG_SYMBOL,0)}COMMA_SYMBOL(){return this.getToken(o.COMMA_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterJsonFunction(this)}exitRule(e){e instanceof R&&e.exitJsonFunction(this)}};c(TL,"JsonFunctionContext");var $2=TL,YL=class YL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_inSumExpr}expr(){return this.getTypedRuleContext(A0,0)}ALL_SYMBOL(){return this.getToken(o.ALL_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterInSumExpr(this)}exitRule(e){e instanceof R&&e.exitInSumExpr(this)}};c(YL,"InSumExprContext");var Gi=YL,AL=class AL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_identListArg}identList(){return this.getTypedRuleContext(eo,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterIdentListArg(this)}exitRule(e){e instanceof R&&e.exitIdentListArg(this)}};c(AL,"IdentListArgContext");var Z2=AL,RL=class RL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_identList}qualifiedIdentifier=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Je):this.getTypedRuleContext(Je,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof R&&e.enterIdentList(this)}exitRule(e){e instanceof R&&e.exitIdentList(this)}};c(RL,"IdentListContext");var eo=RL,gL=class gL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_fulltextOptions}IN_SYMBOL(){return this.getToken(o.IN_SYMBOL,0)}BOOLEAN_SYMBOL(){return this.getToken(o.BOOLEAN_SYMBOL,0)}MODE_SYMBOL(){return this.getToken(o.MODE_SYMBOL,0)}NATURAL_SYMBOL(){return this.getToken(o.NATURAL_SYMBOL,0)}LANGUAGE_SYMBOL(){return this.getToken(o.LANGUAGE_SYMBOL,0)}WITH_SYMBOL(){return this.getToken(o.WITH_SYMBOL,0)}QUERY_SYMBOL(){return this.getToken(o.QUERY_SYMBOL,0)}EXPANSION_SYMBOL(){return this.getToken(o.EXPANSION_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterFulltextOptions(this)}exitRule(e){e instanceof R&&e.exitFulltextOptions(this)}};c(gL,"FulltextOptionsContext");var uo=gL,yL=class yL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_runtimeFunctionCall}CHAR_SYMBOL(){return this.getToken(o.CHAR_SYMBOL,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}exprList(){return this.getTypedRuleContext(Hu,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}USING_SYMBOL(){return this.getToken(o.USING_SYMBOL,0)}charsetName(){return this.getTypedRuleContext(jr,0)}CURRENT_USER_SYMBOL(){return this.getToken(o.CURRENT_USER_SYMBOL,0)}parentheses(){return this.getTypedRuleContext($s,0)}DATE_SYMBOL(){return this.getToken(o.DATE_SYMBOL,0)}exprWithParentheses(){return this.getTypedRuleContext(Fs,0)}DAY_SYMBOL(){return this.getToken(o.DAY_SYMBOL,0)}HOUR_SYMBOL(){return this.getToken(o.HOUR_SYMBOL,0)}INSERT_SYMBOL(){return this.getToken(o.INSERT_SYMBOL,0)}expr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(A0):this.getTypedRuleContext(A0,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};INTERVAL_SYMBOL(){return this.getToken(o.INTERVAL_SYMBOL,0)}LEFT_SYMBOL(){return this.getToken(o.LEFT_SYMBOL,0)}MINUTE_SYMBOL(){return this.getToken(o.MINUTE_SYMBOL,0)}MONTH_SYMBOL(){return this.getToken(o.MONTH_SYMBOL,0)}RIGHT_SYMBOL(){return this.getToken(o.RIGHT_SYMBOL,0)}SECOND_SYMBOL(){return this.getToken(o.SECOND_SYMBOL,0)}TIME_SYMBOL(){return this.getToken(o.TIME_SYMBOL,0)}TIMESTAMP_SYMBOL(){return this.getToken(o.TIMESTAMP_SYMBOL,0)}trimFunction(){return this.getTypedRuleContext(oo,0)}USER_SYMBOL(){return this.getToken(o.USER_SYMBOL,0)}VALUES_SYMBOL(){return this.getToken(o.VALUES_SYMBOL,0)}YEAR_SYMBOL(){return this.getToken(o.YEAR_SYMBOL,0)}ADDDATE_SYMBOL(){return this.getToken(o.ADDDATE_SYMBOL,0)}SUBDATE_SYMBOL(){return this.getToken(o.SUBDATE_SYMBOL,0)}interval(){return this.getTypedRuleContext($t,0)}CURDATE_SYMBOL(){return this.getToken(o.CURDATE_SYMBOL,0)}CURTIME_SYMBOL(){return this.getToken(o.CURTIME_SYMBOL,0)}timeFunctionParameters(){return this.getTypedRuleContext(io,0)}DATE_ADD_SYMBOL(){return this.getToken(o.DATE_ADD_SYMBOL,0)}DATE_SUB_SYMBOL(){return this.getToken(o.DATE_SUB_SYMBOL,0)}EXTRACT_SYMBOL(){return this.getToken(o.EXTRACT_SYMBOL,0)}FROM_SYMBOL(){return this.getToken(o.FROM_SYMBOL,0)}GET_FORMAT_SYMBOL(){return this.getToken(o.GET_FORMAT_SYMBOL,0)}dateTimeTtype(){return this.getTypedRuleContext(no,0)}NOW_SYMBOL(){return this.getToken(o.NOW_SYMBOL,0)}POSITION_SYMBOL(){return this.getToken(o.POSITION_SYMBOL,0)}bitExpr(){return this.getTypedRuleContext(du,0)}IN_SYMBOL(){return this.getToken(o.IN_SYMBOL,0)}substringFunction(){return this.getTypedRuleContext(lo,0)}SYSDATE_SYMBOL(){return this.getToken(o.SYSDATE_SYMBOL,0)}intervalTimeStamp(){return this.getTypedRuleContext(Ps,0)}TIMESTAMP_ADD_SYMBOL(){return this.getToken(o.TIMESTAMP_ADD_SYMBOL,0)}TIMESTAMP_DIFF_SYMBOL(){return this.getToken(o.TIMESTAMP_DIFF_SYMBOL,0)}UTC_DATE_SYMBOL(){return this.getToken(o.UTC_DATE_SYMBOL,0)}UTC_TIME_SYMBOL(){return this.getToken(o.UTC_TIME_SYMBOL,0)}UTC_TIMESTAMP_SYMBOL(){return this.getToken(o.UTC_TIMESTAMP_SYMBOL,0)}ASCII_SYMBOL(){return this.getToken(o.ASCII_SYMBOL,0)}CHARSET_SYMBOL(){return this.getToken(o.CHARSET_SYMBOL,0)}COALESCE_SYMBOL(){return this.getToken(o.COALESCE_SYMBOL,0)}exprListWithParentheses(){return this.getTypedRuleContext(ks,0)}COLLATION_SYMBOL(){return this.getToken(o.COLLATION_SYMBOL,0)}DATABASE_SYMBOL(){return this.getToken(o.DATABASE_SYMBOL,0)}IF_SYMBOL(){return this.getToken(o.IF_SYMBOL,0)}FORMAT_SYMBOL(){return this.getToken(o.FORMAT_SYMBOL,0)}MICROSECOND_SYMBOL(){return this.getToken(o.MICROSECOND_SYMBOL,0)}MOD_SYMBOL(){return this.getToken(o.MOD_SYMBOL,0)}OLD_PASSWORD_SYMBOL(){return this.getToken(o.OLD_PASSWORD_SYMBOL,0)}textLiteral(){return this.getTypedRuleContext(Js,0)}PASSWORD_SYMBOL(){return this.getToken(o.PASSWORD_SYMBOL,0)}QUARTER_SYMBOL(){return this.getToken(o.QUARTER_SYMBOL,0)}REPEAT_SYMBOL(){return this.getToken(o.REPEAT_SYMBOL,0)}REPLACE_SYMBOL(){return this.getToken(o.REPLACE_SYMBOL,0)}REVERSE_SYMBOL(){return this.getToken(o.REVERSE_SYMBOL,0)}ROW_COUNT_SYMBOL(){return this.getToken(o.ROW_COUNT_SYMBOL,0)}TRUNCATE_SYMBOL(){return this.getToken(o.TRUNCATE_SYMBOL,0)}WEEK_SYMBOL(){return this.getToken(o.WEEK_SYMBOL,0)}WEIGHT_STRING_SYMBOL(){return this.getToken(o.WEIGHT_STRING_SYMBOL,0)}AS_SYMBOL(){return this.getToken(o.AS_SYMBOL,0)}BINARY_SYMBOL(){return this.getToken(o.BINARY_SYMBOL,0)}wsNumCodepoints(){return this.getTypedRuleContext(_o,0)}ulong_number=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Qs):this.getTypedRuleContext(Qs,e)};weightStringLevels(){return this.getTypedRuleContext(so,0)}geometryFunction(){return this.getTypedRuleContext(ro,0)}enterRule(e){e instanceof R&&e.enterRuntimeFunctionCall(this)}exitRule(e){e instanceof R&&e.exitRuntimeFunctionCall(this)}};c(yL,"RuntimeFunctionCallContext");var to=yL,NL=class NL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_geometryFunction}CONTAINS_SYMBOL(){return this.getToken(o.CONTAINS_SYMBOL,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}expr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(A0):this.getTypedRuleContext(A0,e)};COMMA_SYMBOL(){return this.getToken(o.COMMA_SYMBOL,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}GEOMETRYCOLLECTION_SYMBOL(){return this.getToken(o.GEOMETRYCOLLECTION_SYMBOL,0)}exprList(){return this.getTypedRuleContext(Hu,0)}LINESTRING_SYMBOL(){return this.getToken(o.LINESTRING_SYMBOL,0)}exprListWithParentheses(){return this.getTypedRuleContext(ks,0)}MULTILINESTRING_SYMBOL(){return this.getToken(o.MULTILINESTRING_SYMBOL,0)}MULTIPOINT_SYMBOL(){return this.getToken(o.MULTIPOINT_SYMBOL,0)}MULTIPOLYGON_SYMBOL(){return this.getToken(o.MULTIPOLYGON_SYMBOL,0)}POINT_SYMBOL(){return this.getToken(o.POINT_SYMBOL,0)}POLYGON_SYMBOL(){return this.getToken(o.POLYGON_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterGeometryFunction(this)}exitRule(e){e instanceof R&&e.exitGeometryFunction(this)}};c(NL,"GeometryFunctionContext");var ro=NL,CL=class CL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_timeFunctionParameters}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}fractionalPrecision(){return this.getTypedRuleContext(ao,0)}enterRule(e){e instanceof R&&e.enterTimeFunctionParameters(this)}exitRule(e){e instanceof R&&e.exitTimeFunctionParameters(this)}};c(CL,"TimeFunctionParametersContext");var io=CL,IL=class IL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_fractionalPrecision}INT_NUMBER(){return this.getToken(o.INT_NUMBER,0)}enterRule(e){e instanceof R&&e.enterFractionalPrecision(this)}exitRule(e){e instanceof R&&e.exitFractionalPrecision(this)}};c(IL,"FractionalPrecisionContext");var ao=IL,bL=class bL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_weightStringLevels}LEVEL_SYMBOL(){return this.getToken(o.LEVEL_SYMBOL,0)}real_ulong_number=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Zt):this.getTypedRuleContext(Zt,e)};MINUS_OPERATOR(){return this.getToken(o.MINUS_OPERATOR,0)}weightStringLevelListItem=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(bs):this.getTypedRuleContext(bs,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof R&&e.enterWeightStringLevels(this)}exitRule(e){e instanceof R&&e.exitWeightStringLevels(this)}};c(bL,"WeightStringLevelsContext");var so=bL,xL=class xL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_weightStringLevelListItem}real_ulong_number(){return this.getTypedRuleContext(Zt,0)}REVERSE_SYMBOL(){return this.getToken(o.REVERSE_SYMBOL,0)}ASC_SYMBOL(){return this.getToken(o.ASC_SYMBOL,0)}DESC_SYMBOL(){return this.getToken(o.DESC_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterWeightStringLevelListItem(this)}exitRule(e){e instanceof R&&e.exitWeightStringLevelListItem(this)}};c(xL,"WeightStringLevelListItemContext");var bs=xL,vL=class vL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_dateTimeTtype}DATE_SYMBOL(){return this.getToken(o.DATE_SYMBOL,0)}TIME_SYMBOL(){return this.getToken(o.TIME_SYMBOL,0)}DATETIME_SYMBOL(){return this.getToken(o.DATETIME_SYMBOL,0)}TIMESTAMP_SYMBOL(){return this.getToken(o.TIMESTAMP_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterDateTimeTtype(this)}exitRule(e){e instanceof R&&e.exitDateTimeTtype(this)}};c(vL,"DateTimeTtypeContext");var no=vL,DL=class DL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_trimFunction}TRIM_SYMBOL(){return this.getToken(o.TRIM_SYMBOL,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}expr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(A0):this.getTypedRuleContext(A0,e)};LEADING_SYMBOL(){return this.getToken(o.LEADING_SYMBOL,0)}FROM_SYMBOL(){return this.getToken(o.FROM_SYMBOL,0)}TRAILING_SYMBOL(){return this.getToken(o.TRAILING_SYMBOL,0)}BOTH_SYMBOL(){return this.getToken(o.BOTH_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterTrimFunction(this)}exitRule(e){e instanceof R&&e.exitTrimFunction(this)}};c(DL,"TrimFunctionContext");var oo=DL,wL=class wL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_substringFunction}SUBSTRING_SYMBOL(){return this.getToken(o.SUBSTRING_SYMBOL,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}expr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(A0):this.getTypedRuleContext(A0,e)};CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};FROM_SYMBOL(){return this.getToken(o.FROM_SYMBOL,0)}FOR_SYMBOL(){return this.getToken(o.FOR_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterSubstringFunction(this)}exitRule(e){e instanceof R&&e.exitSubstringFunction(this)}};c(wL,"SubstringFunctionContext");var lo=wL,UL=class UL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_functionCall}pureIdentifier(){return this.getTypedRuleContext(js,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}udfExprList(){return this.getTypedRuleContext(po,0)}qualifiedIdentifier(){return this.getTypedRuleContext(Je,0)}exprList(){return this.getTypedRuleContext(Hu,0)}selectItem(){return this.getTypedRuleContext(Ui,0)}enterRule(e){e instanceof R&&e.enterFunctionCall(this)}exitRule(e){e instanceof R&&e.exitFunctionCall(this)}};c(UL,"FunctionCallContext");var co=UL,PL=class PL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_udfExprList}udfExpr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(xs):this.getTypedRuleContext(xs,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof R&&e.enterUdfExprList(this)}exitRule(e){e instanceof R&&e.exitUdfExprList(this)}};c(PL,"UdfExprListContext");var po=PL,kL=class kL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_udfExpr}expr(){return this.getTypedRuleContext(A0,0)}qualifiedIdentifier(){return this.getTypedRuleContext(Je,0)}selectAlias(){return this.getTypedRuleContext(_s,0)}enterRule(e){e instanceof R&&e.enterUdfExpr(this)}exitRule(e){e instanceof R&&e.exitUdfExpr(this)}};c(kL,"UdfExprContext");var xs=kL,FL=class FL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_unpivotClause}UNPIVOT_SYMBOL(){return this.getToken(o.UNPIVOT_SYMBOL,0)}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}identifier=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(z0):this.getTypedRuleContext(z0,e)};IN_SYMBOL(){return this.getToken(o.IN_SYMBOL,0)}identifierListWithParentheses(){return this.getTypedRuleContext(Xi,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}FOR_SYMBOL(){return this.getToken(o.FOR_SYMBOL,0)}whereClause=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Pi):this.getTypedRuleContext(Pi,e)};enterRule(e){e instanceof R&&e.enterUnpivotClause(this)}exitRule(e){e instanceof R&&e.exitUnpivotClause(this)}};c(FL,"UnpivotClauseContext");var vs=FL,HL=class HL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_variable}userVariable(){return this.getTypedRuleContext(qi,0)}systemVariable(){return this.getTypedRuleContext(fo,0)}enterRule(e){e instanceof R&&e.enterVariable(this)}exitRule(e){e instanceof R&&e.exitVariable(this)}};c(HL,"VariableContext");var ho=HL,VL=class VL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_userVariable}AT_SIGN_SYMBOL(){return this.getToken(o.AT_SIGN_SYMBOL,0)}textOrIdentifier(){return this.getTypedRuleContext(rt,0)}AT_TEXT_SUFFIX(){return this.getToken(o.AT_TEXT_SUFFIX,0)}enterRule(e){e instanceof R&&e.enterUserVariable(this)}exitRule(e){e instanceof R&&e.exitUserVariable(this)}};c(VL,"UserVariableContext");var qi=VL,GL=class GL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_systemVariable}AT_AT_SIGN_SYMBOL(){return this.getToken(o.AT_AT_SIGN_SYMBOL,0)}textOrIdentifier(){return this.getTypedRuleContext(rt,0)}varIdentType(){return this.getTypedRuleContext(Vo,0)}dotIdentifier(){return this.getTypedRuleContext(bo,0)}enterRule(e){e instanceof R&&e.enterSystemVariable(this)}exitRule(e){e instanceof R&&e.exitSystemVariable(this)}};c(GL,"SystemVariableContext");var fo=GL,qL=class qL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_whenExpression}WHEN_SYMBOL(){return this.getToken(o.WHEN_SYMBOL,0)}expr(){return this.getTypedRuleContext(A0,0)}enterRule(e){e instanceof R&&e.enterWhenExpression(this)}exitRule(e){e instanceof R&&e.exitWhenExpression(this)}};c(qL,"WhenExpressionContext");var Ds=qL,KL=class KL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_thenExpression}THEN_SYMBOL(){return this.getToken(o.THEN_SYMBOL,0)}expr(){return this.getTypedRuleContext(A0,0)}enterRule(e){e instanceof R&&e.enterThenExpression(this)}exitRule(e){e instanceof R&&e.exitThenExpression(this)}};c(KL,"ThenExpressionContext");var ws=KL,WL=class WL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_elseExpression}ELSE_SYMBOL(){return this.getToken(o.ELSE_SYMBOL,0)}expr(){return this.getTypedRuleContext(A0,0)}enterRule(e){e instanceof R&&e.enterElseExpression(this)}exitRule(e){e instanceof R&&e.exitElseExpression(this)}};c(WL,"ElseExpressionContext");var So=WL,jL=class jL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_exprList}expr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(A0):this.getTypedRuleContext(A0,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof R&&e.enterExprList(this)}exitRule(e){e instanceof R&&e.exitExprList(this)}};c(jL,"ExprListContext");var Hu=jL,XL=class XL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_charset}CHAR_SYMBOL(){return this.getToken(o.CHAR_SYMBOL,0)}SET_SYMBOL(){return this.getToken(o.SET_SYMBOL,0)}CHARSET_SYMBOL(){return this.getToken(o.CHARSET_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterCharset(this)}exitRule(e){e instanceof R&&e.exitCharset(this)}};c(XL,"CharsetContext");var Us=XL,QL=class QL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_notRule}NOT_SYMBOL(){return this.getToken(o.NOT_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterNotRule(this)}exitRule(e){e instanceof R&&e.exitNotRule(this)}};c(QL,"NotRuleContext");var Ki=QL,JL=class JL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_not2Rule}LOGICAL_NOT_OPERATOR(){return this.getToken(o.LOGICAL_NOT_OPERATOR,0)}enterRule(e){e instanceof R&&e.enterNot2Rule(this)}exitRule(e){e instanceof R&&e.exitNot2Rule(this)}};c(JL,"Not2RuleContext");var Oo=JL,zL=class zL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_interval}intervalTimeStamp(){return this.getTypedRuleContext(Ps,0)}SECOND_MICROSECOND_SYMBOL(){return this.getToken(o.SECOND_MICROSECOND_SYMBOL,0)}MINUTE_MICROSECOND_SYMBOL(){return this.getToken(o.MINUTE_MICROSECOND_SYMBOL,0)}MINUTE_SECOND_SYMBOL(){return this.getToken(o.MINUTE_SECOND_SYMBOL,0)}HOUR_MICROSECOND_SYMBOL(){return this.getToken(o.HOUR_MICROSECOND_SYMBOL,0)}HOUR_SECOND_SYMBOL(){return this.getToken(o.HOUR_SECOND_SYMBOL,0)}HOUR_MINUTE_SYMBOL(){return this.getToken(o.HOUR_MINUTE_SYMBOL,0)}DAY_MICROSECOND_SYMBOL(){return this.getToken(o.DAY_MICROSECOND_SYMBOL,0)}DAY_SECOND_SYMBOL(){return this.getToken(o.DAY_SECOND_SYMBOL,0)}DAY_MINUTE_SYMBOL(){return this.getToken(o.DAY_MINUTE_SYMBOL,0)}DAY_HOUR_SYMBOL(){return this.getToken(o.DAY_HOUR_SYMBOL,0)}YEAR_MONTH_SYMBOL(){return this.getToken(o.YEAR_MONTH_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterInterval(this)}exitRule(e){e instanceof R&&e.exitInterval(this)}};c(zL,"IntervalContext");var $t=zL,$L=class $L extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_intervalTimeStamp}MICROSECOND_SYMBOL(){return this.getToken(o.MICROSECOND_SYMBOL,0)}SECOND_SYMBOL(){return this.getToken(o.SECOND_SYMBOL,0)}MINUTE_SYMBOL(){return this.getToken(o.MINUTE_SYMBOL,0)}HOUR_SYMBOL(){return this.getToken(o.HOUR_SYMBOL,0)}DAY_SYMBOL(){return this.getToken(o.DAY_SYMBOL,0)}WEEK_SYMBOL(){return this.getToken(o.WEEK_SYMBOL,0)}MONTH_SYMBOL(){return this.getToken(o.MONTH_SYMBOL,0)}QUARTER_SYMBOL(){return this.getToken(o.QUARTER_SYMBOL,0)}YEAR_SYMBOL(){return this.getToken(o.YEAR_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterIntervalTimeStamp(this)}exitRule(e){e instanceof R&&e.exitIntervalTimeStamp(this)}};c($L,"IntervalTimeStampContext");var Ps=$L,ZL=class ZL extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_exprListWithParentheses}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}exprList(){return this.getTypedRuleContext(Hu,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterExprListWithParentheses(this)}exitRule(e){e instanceof R&&e.exitExprListWithParentheses(this)}};c(ZL,"ExprListWithParenthesesContext");var ks=ZL,e9=class e9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_exprWithParentheses}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}expr(){return this.getTypedRuleContext(A0,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterExprWithParentheses(this)}exitRule(e){e instanceof R&&e.exitExprWithParentheses(this)}};c(e9,"ExprWithParenthesesContext");var Fs=e9,u9=class u9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_simpleExprWithParentheses}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}simpleExpr(){return this.getTypedRuleContext(Fu,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterSimpleExprWithParentheses(this)}exitRule(e){e instanceof R&&e.exitSimpleExprWithParentheses(this)}};c(u9,"SimpleExprWithParenthesesContext");var Hs=u9,t9=class t9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_orderList}orderExpression=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Vs):this.getTypedRuleContext(Vs,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof R&&e.enterOrderList(this)}exitRule(e){e instanceof R&&e.exitOrderList(this)}};c(t9,"OrderListContext");var Wi=t9,r9=class r9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_orderExpression}expr(){return this.getTypedRuleContext(A0,0)}direction(){return this.getTypedRuleContext(m2,0)}enterRule(e){e instanceof R&&e.enterOrderExpression(this)}exitRule(e){e instanceof R&&e.exitOrderExpression(this)}};c(r9,"OrderExpressionContext");var Vs=r9,i9=class i9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_indexType}BTREE_SYMBOL(){return this.getToken(o.BTREE_SYMBOL,0)}RTREE_SYMBOL(){return this.getToken(o.RTREE_SYMBOL,0)}HASH_SYMBOL(){return this.getToken(o.HASH_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterIndexType(this)}exitRule(e){e instanceof R&&e.exitIndexType(this)}};c(i9,"IndexTypeContext");var p3=i9,a9=class a9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_dataType}INT_SYMBOL(){return this.getToken(o.INT_SYMBOL,0)}BYTE_INT_SYMBOL(){return this.getToken(o.BYTE_INT_SYMBOL,0)}TINYINT_SYMBOL(){return this.getToken(o.TINYINT_SYMBOL,0)}SMALLINT_SYMBOL(){return this.getToken(o.SMALLINT_SYMBOL,0)}MEDIUMINT_SYMBOL(){return this.getToken(o.MEDIUMINT_SYMBOL,0)}BIGINT_SYMBOL(){return this.getToken(o.BIGINT_SYMBOL,0)}DECIMAL_SYMBOL(){return this.getToken(o.DECIMAL_SYMBOL,0)}NUMERIC_SYMBOL(){return this.getToken(o.NUMERIC_SYMBOL,0)}NUMBER_SYMBOL(){return this.getToken(o.NUMBER_SYMBOL,0)}fieldLength(){return this.getTypedRuleContext(Gs,0)}fieldOptions(){return this.getTypedRuleContext(Eo,0)}REAL_SYMBOL(){return this.getToken(o.REAL_SYMBOL,0)}DOUBLE_SYMBOL(){return this.getToken(o.DOUBLE_SYMBOL,0)}precision(){return this.getTypedRuleContext(zs,0)}PRECISION_SYMBOL(){return this.getToken(o.PRECISION_SYMBOL,0)}FLOAT_SYMBOL_4(){return this.getToken(o.FLOAT_SYMBOL_4,0)}FLOAT_SYMBOL_8(){return this.getToken(o.FLOAT_SYMBOL_8,0)}FLOAT_SYMBOL(){return this.getToken(o.FLOAT_SYMBOL,0)}FIXED_SYMBOL(){return this.getToken(o.FIXED_SYMBOL,0)}floatOptions(){return this.getTypedRuleContext(Fo,0)}BIT_SYMBOL(){return this.getToken(o.BIT_SYMBOL,0)}BOOL_SYMBOL(){return this.getToken(o.BOOL_SYMBOL,0)}BOOLEAN_SYMBOL(){return this.getToken(o.BOOLEAN_SYMBOL,0)}nchar(){return this.getTypedRuleContext(Lo,0)}BINARY_SYMBOL(){return this.getToken(o.BINARY_SYMBOL,0)}CHAR_SYMBOL(){return this.getToken(o.CHAR_SYMBOL,0)}VARYING_SYMBOL(){return this.getToken(o.VARYING_SYMBOL,0)}VARCHAR_SYMBOL(){return this.getToken(o.VARCHAR_SYMBOL,0)}VARCHAR2_SYMBOL(){return this.getToken(o.VARCHAR2_SYMBOL,0)}STRING_SYMBOL(){return this.getToken(o.STRING_SYMBOL,0)}TEXT_SYMBOL(){return this.getToken(o.TEXT_SYMBOL,0)}charsetWithOptBinary(){return this.getTypedRuleContext(Bo,0)}NATIONAL_SYMBOL(){return this.getToken(o.NATIONAL_SYMBOL,0)}NVARCHAR2_SYMBOL(){return this.getToken(o.NVARCHAR2_SYMBOL,0)}NVARCHAR_SYMBOL(){return this.getToken(o.NVARCHAR_SYMBOL,0)}NCHAR_SYMBOL(){return this.getToken(o.NCHAR_SYMBOL,0)}VARBINARY_SYMBOL(){return this.getToken(o.VARBINARY_SYMBOL,0)}YEAR_SYMBOL(){return this.getToken(o.YEAR_SYMBOL,0)}DATE_SYMBOL(){return this.getToken(o.DATE_SYMBOL,0)}TIME_SYMBOL(){return this.getToken(o.TIME_SYMBOL,0)}typeDatetimePrecision(){return this.getTypedRuleContext(To,0)}TIMESTAMP_SYMBOL(){return this.getToken(o.TIMESTAMP_SYMBOL,0)}TIMESTAMP_NTZ_SYMBOL(){return this.getToken(o.TIMESTAMP_NTZ_SYMBOL,0)}TIMESTAMP_LTZ_SYMBOL(){return this.getToken(o.TIMESTAMP_LTZ_SYMBOL,0)}WITH_SYMBOL(){return this.getToken(o.WITH_SYMBOL,0)}LOCAL_SYMBOL(){return this.getToken(o.LOCAL_SYMBOL,0)}ZONE_SYMBOL(){return this.getToken(o.ZONE_SYMBOL,0)}WITHOUT_SYMBOL(){return this.getToken(o.WITHOUT_SYMBOL,0)}DATETIME_SYMBOL(){return this.getToken(o.DATETIME_SYMBOL,0)}TINYBLOB_SYMBOL(){return this.getToken(o.TINYBLOB_SYMBOL,0)}BLOB_SYMBOL(){return this.getToken(o.BLOB_SYMBOL,0)}CLOB_SYMBOL(){return this.getToken(o.CLOB_SYMBOL,0)}BFILE_SYMBOL(){return this.getToken(o.BFILE_SYMBOL,0)}LONG_SYMBOL(){return this.getToken(o.LONG_SYMBOL,0)}RAW_SYMBOL(){return this.getToken(o.RAW_SYMBOL,0)}MEDIUMBLOB_SYMBOL(){return this.getToken(o.MEDIUMBLOB_SYMBOL,0)}LONGBLOB_SYMBOL(){return this.getToken(o.LONGBLOB_SYMBOL,0)}TINYTEXT_SYMBOL(){return this.getToken(o.TINYTEXT_SYMBOL,0)}MEDIUMTEXT_SYMBOL(){return this.getToken(o.MEDIUMTEXT_SYMBOL,0)}LONGTEXT_SYMBOL(){return this.getToken(o.LONGTEXT_SYMBOL,0)}ENUM_SYMBOL(){return this.getToken(o.ENUM_SYMBOL,0)}stringList(){return this.getTypedRuleContext(Do,0)}SET_SYMBOL(){return this.getToken(o.SET_SYMBOL,0)}SERIAL_SYMBOL(){return this.getToken(o.SERIAL_SYMBOL,0)}JSON_SYMBOL(){return this.getToken(o.JSON_SYMBOL,0)}GEOMETRY_SYMBOL(){return this.getToken(o.GEOMETRY_SYMBOL,0)}GEOMETRYCOLLECTION_SYMBOL(){return this.getToken(o.GEOMETRYCOLLECTION_SYMBOL,0)}POINT_SYMBOL(){return this.getToken(o.POINT_SYMBOL,0)}MULTIPOINT_SYMBOL(){return this.getToken(o.MULTIPOINT_SYMBOL,0)}LINESTRING_SYMBOL(){return this.getToken(o.LINESTRING_SYMBOL,0)}MULTILINESTRING_SYMBOL(){return this.getToken(o.MULTILINESTRING_SYMBOL,0)}POLYGON_SYMBOL(){return this.getToken(o.POLYGON_SYMBOL,0)}MULTIPOLYGON_SYMBOL(){return this.getToken(o.MULTIPOLYGON_SYMBOL,0)}GEOGRAPHY_SYMBOL(){return this.getToken(o.GEOGRAPHY_SYMBOL,0)}VARIANT_SYMBOL(){return this.getToken(o.VARIANT_SYMBOL,0)}OBJECT_SYMBOL(){return this.getToken(o.OBJECT_SYMBOL,0)}ARRAY_SYMBOL(){return this.getToken(o.ARRAY_SYMBOL,0)}expr=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(A0):this.getTypedRuleContext(A0,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};identifier(){return this.getTypedRuleContext(z0,0)}enterRule(e){e instanceof R&&e.enterDataType(this)}exitRule(e){e instanceof R&&e.exitDataType(this)}};c(a9,"DataTypeContext");var ji=a9,s9=class s9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_nchar}NCHAR_SYMBOL(){return this.getToken(o.NCHAR_SYMBOL,0)}NATIONAL_SYMBOL(){return this.getToken(o.NATIONAL_SYMBOL,0)}CHAR_SYMBOL(){return this.getToken(o.CHAR_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterNchar(this)}exitRule(e){e instanceof R&&e.exitNchar(this)}};c(s9,"NcharContext");var Lo=s9,n9=class n9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_fieldLength}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}real_ulonglong_number(){return this.getTypedRuleContext(xo,0)}DECIMAL_NUMBER(){return this.getToken(o.DECIMAL_NUMBER,0)}CHAR_SYMBOL(){return this.getToken(o.CHAR_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterFieldLength(this)}exitRule(e){e instanceof R&&e.exitFieldLength(this)}};c(n9,"FieldLengthContext");var Gs=n9,o9=class o9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_fieldOptions}SIGNED_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.SIGNED_SYMBOL):this.getToken(o.SIGNED_SYMBOL,e)};UNSIGNED_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.UNSIGNED_SYMBOL):this.getToken(o.UNSIGNED_SYMBOL,e)};ZEROFILL_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.ZEROFILL_SYMBOL):this.getToken(o.ZEROFILL_SYMBOL,e)};enterRule(e){e instanceof R&&e.enterFieldOptions(this)}exitRule(e){e instanceof R&&e.exitFieldOptions(this)}};c(o9,"FieldOptionsContext");var Eo=o9,l9=class l9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_charsetWithOptBinary}ascii(){return this.getTypedRuleContext(Mo,0)}unicode(){return this.getTypedRuleContext(mo,0)}BYTE_SYMBOL(){return this.getToken(o.BYTE_SYMBOL,0)}charset(){return this.getTypedRuleContext(Us,0)}charsetName(){return this.getTypedRuleContext(jr,0)}BINARY_SYMBOL(){return this.getToken(o.BINARY_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterCharsetWithOptBinary(this)}exitRule(e){e instanceof R&&e.exitCharsetWithOptBinary(this)}};c(l9,"CharsetWithOptBinaryContext");var Bo=l9,c9=class c9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_ascii}ASCII_SYMBOL(){return this.getToken(o.ASCII_SYMBOL,0)}BINARY_SYMBOL(){return this.getToken(o.BINARY_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterAscii(this)}exitRule(e){e instanceof R&&e.exitAscii(this)}};c(c9,"AsciiContext");var Mo=c9,d9=class d9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_unicode}UNICODE_SYMBOL(){return this.getToken(o.UNICODE_SYMBOL,0)}BINARY_SYMBOL(){return this.getToken(o.BINARY_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterUnicode(this)}exitRule(e){e instanceof R&&e.exitUnicode(this)}};c(d9,"UnicodeContext");var mo=d9,p9=class p9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_wsNumCodepoints}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}real_ulong_number(){return this.getTypedRuleContext(Zt,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterWsNumCodepoints(this)}exitRule(e){e instanceof R&&e.exitWsNumCodepoints(this)}};c(p9,"WsNumCodepointsContext");var _o=p9,h9=class h9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_typeDatetimePrecision}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}INT_NUMBER(){return this.getToken(o.INT_NUMBER,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterTypeDatetimePrecision(this)}exitRule(e){e instanceof R&&e.exitTypeDatetimePrecision(this)}};c(h9,"TypeDatetimePrecisionContext");var To=h9,f9=class f9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_charsetName}textOrIdentifier(){return this.getTypedRuleContext(rt,0)}BINARY_SYMBOL(){return this.getToken(o.BINARY_SYMBOL,0)}DEFAULT_SYMBOL(){return this.getToken(o.DEFAULT_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterCharsetName(this)}exitRule(e){e instanceof R&&e.exitCharsetName(this)}};c(f9,"CharsetNameContext");var jr=f9,S9=class S9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_collationName}textOrIdentifier(){return this.getTypedRuleContext(rt,0)}DEFAULT_SYMBOL(){return this.getToken(o.DEFAULT_SYMBOL,0)}BINARY_SYMBOL(){return this.getToken(o.BINARY_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterCollationName(this)}exitRule(e){e instanceof R&&e.exitCollationName(this)}};c(S9,"CollationNameContext");var Yo=S9,O9=class O9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_collate}COLLATE_SYMBOL(){return this.getToken(o.COLLATE_SYMBOL,0)}collationName(){return this.getTypedRuleContext(Yo,0)}enterRule(e){e instanceof R&&e.enterCollate(this)}exitRule(e){e instanceof R&&e.exitCollate(this)}};c(O9,"CollateContext");var Ao=O9,L9=class L9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_charsetClause}charset(){return this.getTypedRuleContext(Us,0)}charsetName(){return this.getTypedRuleContext(jr,0)}enterRule(e){e instanceof R&&e.enterCharsetClause(this)}exitRule(e){e instanceof R&&e.exitCharsetClause(this)}};c(L9,"CharsetClauseContext");var Ro=L9,E9=class E9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_fieldsClause}COLUMNS_SYMBOL(){return this.getToken(o.COLUMNS_SYMBOL,0)}fieldTerm=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(qs):this.getTypedRuleContext(qs,e)};enterRule(e){e instanceof R&&e.enterFieldsClause(this)}exitRule(e){e instanceof R&&e.exitFieldsClause(this)}};c(E9,"FieldsClauseContext");var go=E9,B9=class B9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_fieldTerm}TERMINATED_SYMBOL(){return this.getToken(o.TERMINATED_SYMBOL,0)}BY_SYMBOL(){return this.getToken(o.BY_SYMBOL,0)}textString(){return this.getTypedRuleContext(er,0)}ENCLOSED_SYMBOL(){return this.getToken(o.ENCLOSED_SYMBOL,0)}OPTIONALLY_SYMBOL(){return this.getToken(o.OPTIONALLY_SYMBOL,0)}ESCAPED_SYMBOL(){return this.getToken(o.ESCAPED_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterFieldTerm(this)}exitRule(e){e instanceof R&&e.exitFieldTerm(this)}};c(B9,"FieldTermContext");var qs=B9,M9=class M9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_linesClause}LINES_SYMBOL(){return this.getToken(o.LINES_SYMBOL,0)}lineTerm=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Ks):this.getTypedRuleContext(Ks,e)};enterRule(e){e instanceof R&&e.enterLinesClause(this)}exitRule(e){e instanceof R&&e.exitLinesClause(this)}};c(M9,"LinesClauseContext");var yo=M9,m9=class m9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_lineTerm}BY_SYMBOL(){return this.getToken(o.BY_SYMBOL,0)}textString(){return this.getTypedRuleContext(er,0)}TERMINATED_SYMBOL(){return this.getToken(o.TERMINATED_SYMBOL,0)}STARTING_SYMBOL(){return this.getToken(o.STARTING_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterLineTerm(this)}exitRule(e){e instanceof R&&e.exitLineTerm(this)}};c(m9,"LineTermContext");var Ks=m9,_9=class _9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_usePartition}PARTITION_SYMBOL(){return this.getToken(o.PARTITION_SYMBOL,0)}identifierListWithParentheses(){return this.getTypedRuleContext(Xi,0)}enterRule(e){e instanceof R&&e.enterUsePartition(this)}exitRule(e){e instanceof R&&e.exitUsePartition(this)}};c(_9,"UsePartitionContext");var No=_9,T9=class T9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_columnInternalRefList}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}identifier=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(z0):this.getTypedRuleContext(z0,e)};CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof R&&e.enterColumnInternalRefList(this)}exitRule(e){e instanceof R&&e.exitColumnInternalRefList(this)}};c(T9,"ColumnInternalRefListContext");var Ws=T9,Y9=class Y9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_tableAliasRefList}qualifiedIdentifier=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Je):this.getTypedRuleContext(Je,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof R&&e.enterTableAliasRefList(this)}exitRule(e){e instanceof R&&e.exitTableAliasRefList(this)}};c(Y9,"TableAliasRefListContext");var Co=Y9,A9=class A9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_pureIdentifier}IDENTIFIER(){return this.getToken(o.IDENTIFIER,0)}BACK_TICK_QUOTED_ID(){return this.getToken(o.BACK_TICK_QUOTED_ID,0)}SINGLE_QUOTED_TEXT(){return this.getToken(o.SINGLE_QUOTED_TEXT,0)}DOUBLE_QUOTED_TEXT(){return this.getToken(o.DOUBLE_QUOTED_TEXT,0)}BRACKET_QUOTED_TEXT(){return this.getToken(o.BRACKET_QUOTED_TEXT,0)}CURLY_BRACES_QUOTED_TEXT(){return this.getToken(o.CURLY_BRACES_QUOTED_TEXT,0)}UNDERSCORE_CHARSET(){return this.getToken(o.UNDERSCORE_CHARSET,0)}enterRule(e){e instanceof R&&e.enterPureIdentifier(this)}exitRule(e){e instanceof R&&e.exitPureIdentifier(this)}};c(A9,"PureIdentifierContext");var js=A9,R9=class R9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_identifier}pureIdentifier(){return this.getTypedRuleContext(js,0)}identifierKeyword(){return this.getTypedRuleContext(Go,0)}enterRule(e){e instanceof R&&e.enterIdentifier(this)}exitRule(e){e instanceof R&&e.exitIdentifier(this)}};c(R9,"IdentifierContext");var z0=R9,g9=class g9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_identifierList}identifier=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(z0):this.getTypedRuleContext(z0,e)};COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof R&&e.enterIdentifierList(this)}exitRule(e){e instanceof R&&e.exitIdentifierList(this)}};c(g9,"IdentifierListContext");var Io=g9,y9=class y9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_identifierListWithParentheses}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}identifierList(){return this.getTypedRuleContext(Io,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterIdentifierListWithParentheses(this)}exitRule(e){e instanceof R&&e.exitIdentifierListWithParentheses(this)}};c(y9,"IdentifierListWithParenthesesContext");var Xi=y9,N9=class N9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_qualifiedIdentifier}identifier=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(z0):this.getTypedRuleContext(z0,e)};DOT_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.DOT_SYMBOL):this.getToken(o.DOT_SYMBOL,e)};MULT_OPERATOR(){return this.getToken(o.MULT_OPERATOR,0)}enterRule(e){e instanceof R&&e.enterQualifiedIdentifier(this)}exitRule(e){e instanceof R&&e.exitQualifiedIdentifier(this)}};c(N9,"QualifiedIdentifierContext");var Je=N9,C9=class C9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_jsonPathIdentifier}qualifiedIdentifier(){return this.getTypedRuleContext(Je,0)}COLON_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COLON_SYMBOL):this.getToken(o.COLON_SYMBOL,e)};identifier=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(z0):this.getTypedRuleContext(z0,e)};BRACKET_QUOTED_TEXT=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.BRACKET_QUOTED_TEXT):this.getToken(o.BRACKET_QUOTED_TEXT,e)};CAST_COLON_SYMBOL(){return this.getToken(o.CAST_COLON_SYMBOL,0)}dataType(){return this.getTypedRuleContext(ji,0)}COLLATE_SYMBOL(){return this.getToken(o.COLLATE_SYMBOL,0)}DOT_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.DOT_SYMBOL):this.getToken(o.DOT_SYMBOL,e)};enterRule(e){e instanceof R&&e.enterJsonPathIdentifier(this)}exitRule(e){e instanceof R&&e.exitJsonPathIdentifier(this)}};c(C9,"JsonPathIdentifierContext");var Xs=C9,I9=class I9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_dotIdentifier}DOT_SYMBOL(){return this.getToken(o.DOT_SYMBOL,0)}identifier(){return this.getTypedRuleContext(z0,0)}enterRule(e){e instanceof R&&e.enterDotIdentifier(this)}exitRule(e){e instanceof R&&e.exitDotIdentifier(this)}};c(I9,"DotIdentifierContext");var bo=I9,b9=class b9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_ulong_number}INT_NUMBER(){return this.getToken(o.INT_NUMBER,0)}HEX_NUMBER(){return this.getToken(o.HEX_NUMBER,0)}DECIMAL_NUMBER(){return this.getToken(o.DECIMAL_NUMBER,0)}FLOAT_NUMBER(){return this.getToken(o.FLOAT_NUMBER,0)}enterRule(e){e instanceof R&&e.enterUlong_number(this)}exitRule(e){e instanceof R&&e.exitUlong_number(this)}};c(b9,"Ulong_numberContext");var Qs=b9,x9=class x9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_real_ulong_number}INT_NUMBER(){return this.getToken(o.INT_NUMBER,0)}HEX_NUMBER(){return this.getToken(o.HEX_NUMBER,0)}enterRule(e){e instanceof R&&e.enterReal_ulong_number(this)}exitRule(e){e instanceof R&&e.exitReal_ulong_number(this)}};c(x9,"Real_ulong_numberContext");var Zt=x9,v9=class v9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_ulonglong_number}INT_NUMBER(){return this.getToken(o.INT_NUMBER,0)}DECIMAL_NUMBER(){return this.getToken(o.DECIMAL_NUMBER,0)}FLOAT_NUMBER(){return this.getToken(o.FLOAT_NUMBER,0)}enterRule(e){e instanceof R&&e.enterUlonglong_number(this)}exitRule(e){e instanceof R&&e.exitUlonglong_number(this)}};c(v9,"Ulonglong_numberContext");var Qi=v9,D9=class D9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_real_ulonglong_number}INT_NUMBER(){return this.getToken(o.INT_NUMBER,0)}HEX_NUMBER(){return this.getToken(o.HEX_NUMBER,0)}enterRule(e){e instanceof R&&e.enterReal_ulonglong_number(this)}exitRule(e){e instanceof R&&e.exitReal_ulonglong_number(this)}};c(D9,"Real_ulonglong_numberContext");var xo=D9,w9=class w9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_literal}textLiteral(){return this.getTypedRuleContext(Js,0)}numLiteral(){return this.getTypedRuleContext(wo,0)}temporalLiteral(){return this.getTypedRuleContext(ko,0)}nullLiteral(){return this.getTypedRuleContext(Po,0)}boolLiteral(){return this.getTypedRuleContext(Uo,0)}HEX_NUMBER(){return this.getToken(o.HEX_NUMBER,0)}BIN_NUMBER(){return this.getToken(o.BIN_NUMBER,0)}UNDERSCORE_CHARSET(){return this.getToken(o.UNDERSCORE_CHARSET,0)}enterRule(e){e instanceof R&&e.enterLiteral(this)}exitRule(e){e instanceof R&&e.exitLiteral(this)}};c(w9,"LiteralContext");var vo=w9,U9=class U9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_stringList}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}textString=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(er):this.getTypedRuleContext(er,e)};CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}COMMA_SYMBOL=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.COMMA_SYMBOL):this.getToken(o.COMMA_SYMBOL,e)};enterRule(e){e instanceof R&&e.enterStringList(this)}exitRule(e){e instanceof R&&e.exitStringList(this)}};c(U9,"StringListContext");var Do=U9,P9=class P9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_textStringLiteral}SINGLE_QUOTED_TEXT(){return this.getToken(o.SINGLE_QUOTED_TEXT,0)}DOUBLE_QUOTED_TEXT(){return this.getToken(o.DOUBLE_QUOTED_TEXT,0)}enterRule(e){e instanceof R&&e.enterTextStringLiteral(this)}exitRule(e){e instanceof R&&e.exitTextStringLiteral(this)}};c(P9,"TextStringLiteralContext");var Ou=P9,k9=class k9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_textString}textStringLiteral(){return this.getTypedRuleContext(Ou,0)}HEX_NUMBER(){return this.getToken(o.HEX_NUMBER,0)}BIN_NUMBER(){return this.getToken(o.BIN_NUMBER,0)}enterRule(e){e instanceof R&&e.enterTextString(this)}exitRule(e){e instanceof R&&e.exitTextString(this)}};c(k9,"TextStringContext");var er=k9,F9=class F9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_textLiteral}textStringLiteral=function(e){return e===void 0&&(e=null),e===null?this.getTypedRuleContexts(Ou):this.getTypedRuleContext(Ou,e)};NCHAR_TEXT(){return this.getToken(o.NCHAR_TEXT,0)}UNDERSCORE_CHARSET(){return this.getToken(o.UNDERSCORE_CHARSET,0)}enterRule(e){e instanceof R&&e.enterTextLiteral(this)}exitRule(e){e instanceof R&&e.exitTextLiteral(this)}};c(F9,"TextLiteralContext");var Js=F9,H9=class H9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_numLiteral}INT_NUMBER(){return this.getToken(o.INT_NUMBER,0)}DECIMAL_NUMBER(){return this.getToken(o.DECIMAL_NUMBER,0)}FLOAT_NUMBER(){return this.getToken(o.FLOAT_NUMBER,0)}enterRule(e){e instanceof R&&e.enterNumLiteral(this)}exitRule(e){e instanceof R&&e.exitNumLiteral(this)}};c(H9,"NumLiteralContext");var wo=H9,V9=class V9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_boolLiteral}TRUE_SYMBOL(){return this.getToken(o.TRUE_SYMBOL,0)}FALSE_SYMBOL(){return this.getToken(o.FALSE_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterBoolLiteral(this)}exitRule(e){e instanceof R&&e.exitBoolLiteral(this)}};c(V9,"BoolLiteralContext");var Uo=V9,G9=class G9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_nullLiteral}NULL_SYMBOL(){return this.getToken(o.NULL_SYMBOL,0)}NULL2_SYMBOL(){return this.getToken(o.NULL2_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterNullLiteral(this)}exitRule(e){e instanceof R&&e.exitNullLiteral(this)}};c(G9,"NullLiteralContext");var Po=G9,q9=class q9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_temporalLiteral}DATE_SYMBOL(){return this.getToken(o.DATE_SYMBOL,0)}SINGLE_QUOTED_TEXT(){return this.getToken(o.SINGLE_QUOTED_TEXT,0)}TIME_SYMBOL(){return this.getToken(o.TIME_SYMBOL,0)}TIMESTAMP_SYMBOL(){return this.getToken(o.TIMESTAMP_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterTemporalLiteral(this)}exitRule(e){e instanceof R&&e.exitTemporalLiteral(this)}};c(q9,"TemporalLiteralContext");var ko=q9,K9=class K9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_floatOptions}fieldLength(){return this.getTypedRuleContext(Gs,0)}precision(){return this.getTypedRuleContext(zs,0)}enterRule(e){e instanceof R&&e.enterFloatOptions(this)}exitRule(e){e instanceof R&&e.exitFloatOptions(this)}};c(K9,"FloatOptionsContext");var Fo=K9,W9=class W9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_precision}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}INT_NUMBER=function(e){return e===void 0&&(e=null),e===null?this.getTokens(o.INT_NUMBER):this.getToken(o.INT_NUMBER,e)};COMMA_SYMBOL(){return this.getToken(o.COMMA_SYMBOL,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterPrecision(this)}exitRule(e){e instanceof R&&e.exitPrecision(this)}};c(W9,"PrecisionContext");var zs=W9,j9=class j9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_textOrIdentifier}identifier(){return this.getTypedRuleContext(z0,0)}textStringLiteral(){return this.getTypedRuleContext(Ou,0)}enterRule(e){e instanceof R&&e.enterTextOrIdentifier(this)}exitRule(e){e instanceof R&&e.exitTextOrIdentifier(this)}};c(j9,"TextOrIdentifierContext");var rt=j9,X9=class X9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_parentheses}OPEN_PAR_SYMBOL(){return this.getToken(o.OPEN_PAR_SYMBOL,0)}CLOSE_PAR_SYMBOL(){return this.getToken(o.CLOSE_PAR_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterParentheses(this)}exitRule(e){e instanceof R&&e.exitParentheses(this)}};c(X9,"ParenthesesContext");var $s=X9,Q9=class Q9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_equal}EQUAL_OPERATOR(){return this.getToken(o.EQUAL_OPERATOR,0)}ASSIGN_OPERATOR(){return this.getToken(o.ASSIGN_OPERATOR,0)}enterRule(e){e instanceof R&&e.enterEqual(this)}exitRule(e){e instanceof R&&e.exitEqual(this)}};c(Q9,"EqualContext");var Ho=Q9,J9=class J9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_varIdentType}GLOBAL_SYMBOL(){return this.getToken(o.GLOBAL_SYMBOL,0)}DOT_SYMBOL(){return this.getToken(o.DOT_SYMBOL,0)}LOCAL_SYMBOL(){return this.getToken(o.LOCAL_SYMBOL,0)}SESSION_SYMBOL(){return this.getToken(o.SESSION_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterVarIdentType(this)}exitRule(e){e instanceof R&&e.exitVarIdentType(this)}};c(J9,"VarIdentTypeContext");var Vo=J9,z9=class z9 extends L.ParserRuleContext{constructor(e,u,r){u===void 0&&(u=null),r==null&&(r=-1),super(u,r),this.parser=e,this.ruleIndex=o.RULE_identifierKeyword}TINYINT_SYMBOL(){return this.getToken(o.TINYINT_SYMBOL,0)}SMALLINT_SYMBOL(){return this.getToken(o.SMALLINT_SYMBOL,0)}MEDIUMINT_SYMBOL(){return this.getToken(o.MEDIUMINT_SYMBOL,0)}INT_SYMBOL(){return this.getToken(o.INT_SYMBOL,0)}BIGINT_SYMBOL(){return this.getToken(o.BIGINT_SYMBOL,0)}SECOND_SYMBOL(){return this.getToken(o.SECOND_SYMBOL,0)}MINUTE_SYMBOL(){return this.getToken(o.MINUTE_SYMBOL,0)}HOUR_SYMBOL(){return this.getToken(o.HOUR_SYMBOL,0)}DAY_SYMBOL(){return this.getToken(o.DAY_SYMBOL,0)}WEEK_SYMBOL(){return this.getToken(o.WEEK_SYMBOL,0)}MONTH_SYMBOL(){return this.getToken(o.MONTH_SYMBOL,0)}QUARTER_SYMBOL(){return this.getToken(o.QUARTER_SYMBOL,0)}YEAR_SYMBOL(){return this.getToken(o.YEAR_SYMBOL,0)}DEFAULT_SYMBOL(){return this.getToken(o.DEFAULT_SYMBOL,0)}UNION_SYMBOL(){return this.getToken(o.UNION_SYMBOL,0)}SELECT_SYMBOL(){return this.getToken(o.SELECT_SYMBOL,0)}ALL_SYMBOL(){return this.getToken(o.ALL_SYMBOL,0)}DISTINCT_SYMBOL(){return this.getToken(o.DISTINCT_SYMBOL,0)}STRAIGHT_JOIN_SYMBOL(){return this.getToken(o.STRAIGHT_JOIN_SYMBOL,0)}HIGH_PRIORITY_SYMBOL(){return this.getToken(o.HIGH_PRIORITY_SYMBOL,0)}SQL_SMALL_RESULT_SYMBOL(){return this.getToken(o.SQL_SMALL_RESULT_SYMBOL,0)}SQL_BIG_RESULT_SYMBOL(){return this.getToken(o.SQL_BIG_RESULT_SYMBOL,0)}SQL_BUFFER_RESULT_SYMBOL(){return this.getToken(o.SQL_BUFFER_RESULT_SYMBOL,0)}SQL_CALC_FOUND_ROWS_SYMBOL(){return this.getToken(o.SQL_CALC_FOUND_ROWS_SYMBOL,0)}LIMIT_SYMBOL(){return this.getToken(o.LIMIT_SYMBOL,0)}OFFSET_SYMBOL(){return this.getToken(o.OFFSET_SYMBOL,0)}INTO_SYMBOL(){return this.getToken(o.INTO_SYMBOL,0)}OUTFILE_SYMBOL(){return this.getToken(o.OUTFILE_SYMBOL,0)}DUMPFILE_SYMBOL(){return this.getToken(o.DUMPFILE_SYMBOL,0)}PROCEDURE_SYMBOL(){return this.getToken(o.PROCEDURE_SYMBOL,0)}ANALYSE_SYMBOL(){return this.getToken(o.ANALYSE_SYMBOL,0)}HAVING_SYMBOL(){return this.getToken(o.HAVING_SYMBOL,0)}WINDOW_SYMBOL(){return this.getToken(o.WINDOW_SYMBOL,0)}AS_SYMBOL(){return this.getToken(o.AS_SYMBOL,0)}PARTITION_SYMBOL(){return this.getToken(o.PARTITION_SYMBOL,0)}BY_SYMBOL(){return this.getToken(o.BY_SYMBOL,0)}ROWS_SYMBOL(){return this.getToken(o.ROWS_SYMBOL,0)}RANGE_SYMBOL(){return this.getToken(o.RANGE_SYMBOL,0)}GROUPS_SYMBOL(){return this.getToken(o.GROUPS_SYMBOL,0)}UNBOUNDED_SYMBOL(){return this.getToken(o.UNBOUNDED_SYMBOL,0)}PRECEDING_SYMBOL(){return this.getToken(o.PRECEDING_SYMBOL,0)}INTERVAL_SYMBOL(){return this.getToken(o.INTERVAL_SYMBOL,0)}CURRENT_SYMBOL(){return this.getToken(o.CURRENT_SYMBOL,0)}ROW_SYMBOL(){return this.getToken(o.ROW_SYMBOL,0)}BETWEEN_SYMBOL(){return this.getToken(o.BETWEEN_SYMBOL,0)}AND_SYMBOL(){return this.getToken(o.AND_SYMBOL,0)}FOLLOWING_SYMBOL(){return this.getToken(o.FOLLOWING_SYMBOL,0)}EXCLUDE_SYMBOL(){return this.getToken(o.EXCLUDE_SYMBOL,0)}GROUP_SYMBOL(){return this.getToken(o.GROUP_SYMBOL,0)}TIES_SYMBOL(){return this.getToken(o.TIES_SYMBOL,0)}NO_SYMBOL(){return this.getToken(o.NO_SYMBOL,0)}OTHERS_SYMBOL(){return this.getToken(o.OTHERS_SYMBOL,0)}WITH_SYMBOL(){return this.getToken(o.WITH_SYMBOL,0)}RECURSIVE_SYMBOL(){return this.getToken(o.RECURSIVE_SYMBOL,0)}ROLLUP_SYMBOL(){return this.getToken(o.ROLLUP_SYMBOL,0)}CUBE_SYMBOL(){return this.getToken(o.CUBE_SYMBOL,0)}ORDER_SYMBOL(){return this.getToken(o.ORDER_SYMBOL,0)}ASC_SYMBOL(){return this.getToken(o.ASC_SYMBOL,0)}DESC_SYMBOL(){return this.getToken(o.DESC_SYMBOL,0)}FROM_SYMBOL(){return this.getToken(o.FROM_SYMBOL,0)}DUAL_SYMBOL(){return this.getToken(o.DUAL_SYMBOL,0)}VALUES_SYMBOL(){return this.getToken(o.VALUES_SYMBOL,0)}TABLE_SYMBOL(){return this.getToken(o.TABLE_SYMBOL,0)}SQL_NO_CACHE_SYMBOL(){return this.getToken(o.SQL_NO_CACHE_SYMBOL,0)}SQL_CACHE_SYMBOL(){return this.getToken(o.SQL_CACHE_SYMBOL,0)}MAX_STATEMENT_TIME_SYMBOL(){return this.getToken(o.MAX_STATEMENT_TIME_SYMBOL,0)}FOR_SYMBOL(){return this.getToken(o.FOR_SYMBOL,0)}OF_SYMBOL(){return this.getToken(o.OF_SYMBOL,0)}LOCK_SYMBOL(){return this.getToken(o.LOCK_SYMBOL,0)}IN_SYMBOL(){return this.getToken(o.IN_SYMBOL,0)}SHARE_SYMBOL(){return this.getToken(o.SHARE_SYMBOL,0)}MODE_SYMBOL(){return this.getToken(o.MODE_SYMBOL,0)}UPDATE_SYMBOL(){return this.getToken(o.UPDATE_SYMBOL,0)}SKIP_SYMBOL(){return this.getToken(o.SKIP_SYMBOL,0)}LOCKED_SYMBOL(){return this.getToken(o.LOCKED_SYMBOL,0)}NOWAIT_SYMBOL(){return this.getToken(o.NOWAIT_SYMBOL,0)}WHERE_SYMBOL(){return this.getToken(o.WHERE_SYMBOL,0)}OJ_SYMBOL(){return this.getToken(o.OJ_SYMBOL,0)}ON_SYMBOL(){return this.getToken(o.ON_SYMBOL,0)}USING_SYMBOL(){return this.getToken(o.USING_SYMBOL,0)}NATURAL_SYMBOL(){return this.getToken(o.NATURAL_SYMBOL,0)}INNER_SYMBOL(){return this.getToken(o.INNER_SYMBOL,0)}JOIN_SYMBOL(){return this.getToken(o.JOIN_SYMBOL,0)}LEFT_SYMBOL(){return this.getToken(o.LEFT_SYMBOL,0)}RIGHT_SYMBOL(){return this.getToken(o.RIGHT_SYMBOL,0)}OUTER_SYMBOL(){return this.getToken(o.OUTER_SYMBOL,0)}CROSS_SYMBOL(){return this.getToken(o.CROSS_SYMBOL,0)}LATERAL_SYMBOL(){return this.getToken(o.LATERAL_SYMBOL,0)}JSON_TABLE_SYMBOL(){return this.getToken(o.JSON_TABLE_SYMBOL,0)}COLUMNS_SYMBOL(){return this.getToken(o.COLUMNS_SYMBOL,0)}ORDINALITY_SYMBOL(){return this.getToken(o.ORDINALITY_SYMBOL,0)}EXISTS_SYMBOL(){return this.getToken(o.EXISTS_SYMBOL,0)}PATH_SYMBOL(){return this.getToken(o.PATH_SYMBOL,0)}NESTED_SYMBOL(){return this.getToken(o.NESTED_SYMBOL,0)}EMPTY_SYMBOL(){return this.getToken(o.EMPTY_SYMBOL,0)}ERROR_SYMBOL(){return this.getToken(o.ERROR_SYMBOL,0)}NULL_SYMBOL(){return this.getToken(o.NULL_SYMBOL,0)}USE_SYMBOL(){return this.getToken(o.USE_SYMBOL,0)}FORCE_SYMBOL(){return this.getToken(o.FORCE_SYMBOL,0)}IGNORE_SYMBOL(){return this.getToken(o.IGNORE_SYMBOL,0)}KEY_SYMBOL(){return this.getToken(o.KEY_SYMBOL,0)}INDEX_SYMBOL(){return this.getToken(o.INDEX_SYMBOL,0)}PRIMARY_SYMBOL(){return this.getToken(o.PRIMARY_SYMBOL,0)}IS_SYMBOL(){return this.getToken(o.IS_SYMBOL,0)}TRUE_SYMBOL(){return this.getToken(o.TRUE_SYMBOL,0)}FALSE_SYMBOL(){return this.getToken(o.FALSE_SYMBOL,0)}UNKNOWN_SYMBOL(){return this.getToken(o.UNKNOWN_SYMBOL,0)}NOT_SYMBOL(){return this.getToken(o.NOT_SYMBOL,0)}XOR_SYMBOL(){return this.getToken(o.XOR_SYMBOL,0)}OR_SYMBOL(){return this.getToken(o.OR_SYMBOL,0)}ANY_SYMBOL(){return this.getToken(o.ANY_SYMBOL,0)}MEMBER_SYMBOL(){return this.getToken(o.MEMBER_SYMBOL,0)}SOUNDS_SYMBOL(){return this.getToken(o.SOUNDS_SYMBOL,0)}LIKE_SYMBOL(){return this.getToken(o.LIKE_SYMBOL,0)}ESCAPE_SYMBOL(){return this.getToken(o.ESCAPE_SYMBOL,0)}REGEXP_SYMBOL(){return this.getToken(o.REGEXP_SYMBOL,0)}DIV_SYMBOL(){return this.getToken(o.DIV_SYMBOL,0)}MOD_SYMBOL(){return this.getToken(o.MOD_SYMBOL,0)}MATCH_SYMBOL(){return this.getToken(o.MATCH_SYMBOL,0)}AGAINST_SYMBOL(){return this.getToken(o.AGAINST_SYMBOL,0)}BINARY_SYMBOL(){return this.getToken(o.BINARY_SYMBOL,0)}CAST_SYMBOL(){return this.getToken(o.CAST_SYMBOL,0)}ARRAY_SYMBOL(){return this.getToken(o.ARRAY_SYMBOL,0)}CASE_SYMBOL(){return this.getToken(o.CASE_SYMBOL,0)}END_SYMBOL(){return this.getToken(o.END_SYMBOL,0)}CONVERT_SYMBOL(){return this.getToken(o.CONVERT_SYMBOL,0)}COLLATE_SYMBOL(){return this.getToken(o.COLLATE_SYMBOL,0)}AVG_SYMBOL(){return this.getToken(o.AVG_SYMBOL,0)}BIT_AND_SYMBOL(){return this.getToken(o.BIT_AND_SYMBOL,0)}BIT_OR_SYMBOL(){return this.getToken(o.BIT_OR_SYMBOL,0)}BIT_XOR_SYMBOL(){return this.getToken(o.BIT_XOR_SYMBOL,0)}COUNT_SYMBOL(){return this.getToken(o.COUNT_SYMBOL,0)}MIN_SYMBOL(){return this.getToken(o.MIN_SYMBOL,0)}MAX_SYMBOL(){return this.getToken(o.MAX_SYMBOL,0)}STD_SYMBOL(){return this.getToken(o.STD_SYMBOL,0)}VARIANCE_SYMBOL(){return this.getToken(o.VARIANCE_SYMBOL,0)}STDDEV_SAMP_SYMBOL(){return this.getToken(o.STDDEV_SAMP_SYMBOL,0)}VAR_SAMP_SYMBOL(){return this.getToken(o.VAR_SAMP_SYMBOL,0)}SUM_SYMBOL(){return this.getToken(o.SUM_SYMBOL,0)}GROUP_CONCAT_SYMBOL(){return this.getToken(o.GROUP_CONCAT_SYMBOL,0)}SEPARATOR_SYMBOL(){return this.getToken(o.SEPARATOR_SYMBOL,0)}GROUPING_SYMBOL(){return this.getToken(o.GROUPING_SYMBOL,0)}ROW_NUMBER_SYMBOL(){return this.getToken(o.ROW_NUMBER_SYMBOL,0)}RANK_SYMBOL(){return this.getToken(o.RANK_SYMBOL,0)}DENSE_RANK_SYMBOL(){return this.getToken(o.DENSE_RANK_SYMBOL,0)}CUME_DIST_SYMBOL(){return this.getToken(o.CUME_DIST_SYMBOL,0)}PERCENT_RANK_SYMBOL(){return this.getToken(o.PERCENT_RANK_SYMBOL,0)}NTILE_SYMBOL(){return this.getToken(o.NTILE_SYMBOL,0)}LEAD_SYMBOL(){return this.getToken(o.LEAD_SYMBOL,0)}LAG_SYMBOL(){return this.getToken(o.LAG_SYMBOL,0)}FIRST_VALUE_SYMBOL(){return this.getToken(o.FIRST_VALUE_SYMBOL,0)}LAST_VALUE_SYMBOL(){return this.getToken(o.LAST_VALUE_SYMBOL,0)}NTH_VALUE_SYMBOL(){return this.getToken(o.NTH_VALUE_SYMBOL,0)}FIRST_SYMBOL(){return this.getToken(o.FIRST_SYMBOL,0)}LAST_SYMBOL(){return this.getToken(o.LAST_SYMBOL,0)}OVER_SYMBOL(){return this.getToken(o.OVER_SYMBOL,0)}RESPECT_SYMBOL(){return this.getToken(o.RESPECT_SYMBOL,0)}NULLS_SYMBOL(){return this.getToken(o.NULLS_SYMBOL,0)}JSON_ARRAYAGG_SYMBOL(){return this.getToken(o.JSON_ARRAYAGG_SYMBOL,0)}JSON_OBJECTAGG_SYMBOL(){return this.getToken(o.JSON_OBJECTAGG_SYMBOL,0)}BOOLEAN_SYMBOL(){return this.getToken(o.BOOLEAN_SYMBOL,0)}LANGUAGE_SYMBOL(){return this.getToken(o.LANGUAGE_SYMBOL,0)}QUERY_SYMBOL(){return this.getToken(o.QUERY_SYMBOL,0)}EXPANSION_SYMBOL(){return this.getToken(o.EXPANSION_SYMBOL,0)}CHAR_SYMBOL(){return this.getToken(o.CHAR_SYMBOL,0)}CURRENT_USER_SYMBOL(){return this.getToken(o.CURRENT_USER_SYMBOL,0)}DATE_SYMBOL(){return this.getToken(o.DATE_SYMBOL,0)}INSERT_SYMBOL(){return this.getToken(o.INSERT_SYMBOL,0)}TIME_SYMBOL(){return this.getToken(o.TIME_SYMBOL,0)}TIMESTAMP_SYMBOL(){return this.getToken(o.TIMESTAMP_SYMBOL,0)}USER_SYMBOL(){return this.getToken(o.USER_SYMBOL,0)}ADDDATE_SYMBOL(){return this.getToken(o.ADDDATE_SYMBOL,0)}SUBDATE_SYMBOL(){return this.getToken(o.SUBDATE_SYMBOL,0)}CURDATE_SYMBOL(){return this.getToken(o.CURDATE_SYMBOL,0)}CURTIME_SYMBOL(){return this.getToken(o.CURTIME_SYMBOL,0)}DATE_ADD_SYMBOL(){return this.getToken(o.DATE_ADD_SYMBOL,0)}DATE_SUB_SYMBOL(){return this.getToken(o.DATE_SUB_SYMBOL,0)}EXTRACT_SYMBOL(){return this.getToken(o.EXTRACT_SYMBOL,0)}GET_FORMAT_SYMBOL(){return this.getToken(o.GET_FORMAT_SYMBOL,0)}NOW_SYMBOL(){return this.getToken(o.NOW_SYMBOL,0)}POSITION_SYMBOL(){return this.getToken(o.POSITION_SYMBOL,0)}SYSDATE_SYMBOL(){return this.getToken(o.SYSDATE_SYMBOL,0)}TIMESTAMP_ADD_SYMBOL(){return this.getToken(o.TIMESTAMP_ADD_SYMBOL,0)}TIMESTAMP_DIFF_SYMBOL(){return this.getToken(o.TIMESTAMP_DIFF_SYMBOL,0)}UTC_DATE_SYMBOL(){return this.getToken(o.UTC_DATE_SYMBOL,0)}UTC_TIME_SYMBOL(){return this.getToken(o.UTC_TIME_SYMBOL,0)}UTC_TIMESTAMP_SYMBOL(){return this.getToken(o.UTC_TIMESTAMP_SYMBOL,0)}ASCII_SYMBOL(){return this.getToken(o.ASCII_SYMBOL,0)}CHARSET_SYMBOL(){return this.getToken(o.CHARSET_SYMBOL,0)}COALESCE_SYMBOL(){return this.getToken(o.COALESCE_SYMBOL,0)}COLLATION_SYMBOL(){return this.getToken(o.COLLATION_SYMBOL,0)}DATABASE_SYMBOL(){return this.getToken(o.DATABASE_SYMBOL,0)}IF_SYMBOL(){return this.getToken(o.IF_SYMBOL,0)}FORMAT_SYMBOL(){return this.getToken(o.FORMAT_SYMBOL,0)}MICROSECOND_SYMBOL(){return this.getToken(o.MICROSECOND_SYMBOL,0)}OLD_PASSWORD_SYMBOL(){return this.getToken(o.OLD_PASSWORD_SYMBOL,0)}PASSWORD_SYMBOL(){return this.getToken(o.PASSWORD_SYMBOL,0)}REPEAT_SYMBOL(){return this.getToken(o.REPEAT_SYMBOL,0)}REPLACE_SYMBOL(){return this.getToken(o.REPLACE_SYMBOL,0)}REVERSE_SYMBOL(){return this.getToken(o.REVERSE_SYMBOL,0)}ROW_COUNT_SYMBOL(){return this.getToken(o.ROW_COUNT_SYMBOL,0)}TRUNCATE_SYMBOL(){return this.getToken(o.TRUNCATE_SYMBOL,0)}WEIGHT_STRING_SYMBOL(){return this.getToken(o.WEIGHT_STRING_SYMBOL,0)}CONTAINS_SYMBOL(){return this.getToken(o.CONTAINS_SYMBOL,0)}GEOMETRYCOLLECTION_SYMBOL(){return this.getToken(o.GEOMETRYCOLLECTION_SYMBOL,0)}LINESTRING_SYMBOL(){return this.getToken(o.LINESTRING_SYMBOL,0)}MULTILINESTRING_SYMBOL(){return this.getToken(o.MULTILINESTRING_SYMBOL,0)}MULTIPOINT_SYMBOL(){return this.getToken(o.MULTIPOINT_SYMBOL,0)}MULTIPOLYGON_SYMBOL(){return this.getToken(o.MULTIPOLYGON_SYMBOL,0)}POINT_SYMBOL(){return this.getToken(o.POINT_SYMBOL,0)}POLYGON_SYMBOL(){return this.getToken(o.POLYGON_SYMBOL,0)}LEVEL_SYMBOL(){return this.getToken(o.LEVEL_SYMBOL,0)}DATETIME_SYMBOL(){return this.getToken(o.DATETIME_SYMBOL,0)}TRIM_SYMBOL(){return this.getToken(o.TRIM_SYMBOL,0)}LEADING_SYMBOL(){return this.getToken(o.LEADING_SYMBOL,0)}TRAILING_SYMBOL(){return this.getToken(o.TRAILING_SYMBOL,0)}BOTH_SYMBOL(){return this.getToken(o.BOTH_SYMBOL,0)}SUBSTRING_SYMBOL(){return this.getToken(o.SUBSTRING_SYMBOL,0)}WHEN_SYMBOL(){return this.getToken(o.WHEN_SYMBOL,0)}THEN_SYMBOL(){return this.getToken(o.THEN_SYMBOL,0)}ELSE_SYMBOL(){return this.getToken(o.ELSE_SYMBOL,0)}SIGNED_SYMBOL(){return this.getToken(o.SIGNED_SYMBOL,0)}UNSIGNED_SYMBOL(){return this.getToken(o.UNSIGNED_SYMBOL,0)}DECIMAL_SYMBOL(){return this.getToken(o.DECIMAL_SYMBOL,0)}JSON_SYMBOL(){return this.getToken(o.JSON_SYMBOL,0)}FLOAT_SYMBOL(){return this.getToken(o.FLOAT_SYMBOL,0)}SET_SYMBOL(){return this.getToken(o.SET_SYMBOL,0)}SECOND_MICROSECOND_SYMBOL(){return this.getToken(o.SECOND_MICROSECOND_SYMBOL,0)}MINUTE_MICROSECOND_SYMBOL(){return this.getToken(o.MINUTE_MICROSECOND_SYMBOL,0)}MINUTE_SECOND_SYMBOL(){return this.getToken(o.MINUTE_SECOND_SYMBOL,0)}HOUR_MICROSECOND_SYMBOL(){return this.getToken(o.HOUR_MICROSECOND_SYMBOL,0)}HOUR_SECOND_SYMBOL(){return this.getToken(o.HOUR_SECOND_SYMBOL,0)}HOUR_MINUTE_SYMBOL(){return this.getToken(o.HOUR_MINUTE_SYMBOL,0)}DAY_MICROSECOND_SYMBOL(){return this.getToken(o.DAY_MICROSECOND_SYMBOL,0)}DAY_SECOND_SYMBOL(){return this.getToken(o.DAY_SECOND_SYMBOL,0)}DAY_MINUTE_SYMBOL(){return this.getToken(o.DAY_MINUTE_SYMBOL,0)}DAY_HOUR_SYMBOL(){return this.getToken(o.DAY_HOUR_SYMBOL,0)}YEAR_MONTH_SYMBOL(){return this.getToken(o.YEAR_MONTH_SYMBOL,0)}BTREE_SYMBOL(){return this.getToken(o.BTREE_SYMBOL,0)}RTREE_SYMBOL(){return this.getToken(o.RTREE_SYMBOL,0)}HASH_SYMBOL(){return this.getToken(o.HASH_SYMBOL,0)}REAL_SYMBOL(){return this.getToken(o.REAL_SYMBOL,0)}DOUBLE_SYMBOL(){return this.getToken(o.DOUBLE_SYMBOL,0)}PRECISION_SYMBOL(){return this.getToken(o.PRECISION_SYMBOL,0)}NUMERIC_SYMBOL(){return this.getToken(o.NUMERIC_SYMBOL,0)}FIXED_SYMBOL(){return this.getToken(o.FIXED_SYMBOL,0)}BIT_SYMBOL(){return this.getToken(o.BIT_SYMBOL,0)}BOOL_SYMBOL(){return this.getToken(o.BOOL_SYMBOL,0)}VARYING_SYMBOL(){return this.getToken(o.VARYING_SYMBOL,0)}VARCHAR_SYMBOL(){return this.getToken(o.VARCHAR_SYMBOL,0)}VARCHAR2_SYMBOL(){return this.getToken(o.VARCHAR2_SYMBOL,0)}NATIONAL_SYMBOL(){return this.getToken(o.NATIONAL_SYMBOL,0)}NVARCHAR_SYMBOL(){return this.getToken(o.NVARCHAR_SYMBOL,0)}NVARCHAR2_SYMBOL(){return this.getToken(o.NVARCHAR2_SYMBOL,0)}NCHAR_SYMBOL(){return this.getToken(o.NCHAR_SYMBOL,0)}VARBINARY_SYMBOL(){return this.getToken(o.VARBINARY_SYMBOL,0)}TINYBLOB_SYMBOL(){return this.getToken(o.TINYBLOB_SYMBOL,0)}BLOB_SYMBOL(){return this.getToken(o.BLOB_SYMBOL,0)}CLOB_SYMBOL(){return this.getToken(o.CLOB_SYMBOL,0)}BFILE_SYMBOL(){return this.getToken(o.BFILE_SYMBOL,0)}RAW_SYMBOL(){return this.getToken(o.RAW_SYMBOL,0)}MEDIUMBLOB_SYMBOL(){return this.getToken(o.MEDIUMBLOB_SYMBOL,0)}LONGBLOB_SYMBOL(){return this.getToken(o.LONGBLOB_SYMBOL,0)}LONG_SYMBOL(){return this.getToken(o.LONG_SYMBOL,0)}TINYTEXT_SYMBOL(){return this.getToken(o.TINYTEXT_SYMBOL,0)}TEXT_SYMBOL(){return this.getToken(o.TEXT_SYMBOL,0)}MEDIUMTEXT_SYMBOL(){return this.getToken(o.MEDIUMTEXT_SYMBOL,0)}LONGTEXT_SYMBOL(){return this.getToken(o.LONGTEXT_SYMBOL,0)}ENUM_SYMBOL(){return this.getToken(o.ENUM_SYMBOL,0)}SERIAL_SYMBOL(){return this.getToken(o.SERIAL_SYMBOL,0)}GEOMETRY_SYMBOL(){return this.getToken(o.GEOMETRY_SYMBOL,0)}ZEROFILL_SYMBOL(){return this.getToken(o.ZEROFILL_SYMBOL,0)}BYTE_SYMBOL(){return this.getToken(o.BYTE_SYMBOL,0)}UNICODE_SYMBOL(){return this.getToken(o.UNICODE_SYMBOL,0)}TERMINATED_SYMBOL(){return this.getToken(o.TERMINATED_SYMBOL,0)}OPTIONALLY_SYMBOL(){return this.getToken(o.OPTIONALLY_SYMBOL,0)}ENCLOSED_SYMBOL(){return this.getToken(o.ENCLOSED_SYMBOL,0)}ESCAPED_SYMBOL(){return this.getToken(o.ESCAPED_SYMBOL,0)}LINES_SYMBOL(){return this.getToken(o.LINES_SYMBOL,0)}STARTING_SYMBOL(){return this.getToken(o.STARTING_SYMBOL,0)}GLOBAL_SYMBOL(){return this.getToken(o.GLOBAL_SYMBOL,0)}LOCAL_SYMBOL(){return this.getToken(o.LOCAL_SYMBOL,0)}SESSION_SYMBOL(){return this.getToken(o.SESSION_SYMBOL,0)}BYTE_INT_SYMBOL(){return this.getToken(o.BYTE_INT_SYMBOL,0)}WITHOUT_SYMBOL(){return this.getToken(o.WITHOUT_SYMBOL,0)}TIMESTAMP_LTZ_SYMBOL(){return this.getToken(o.TIMESTAMP_LTZ_SYMBOL,0)}TIMESTAMP_NTZ_SYMBOL(){return this.getToken(o.TIMESTAMP_NTZ_SYMBOL,0)}ZONE_SYMBOL(){return this.getToken(o.ZONE_SYMBOL,0)}STRING_SYMBOL(){return this.getToken(o.STRING_SYMBOL,0)}FLOAT_SYMBOL_4(){return this.getToken(o.FLOAT_SYMBOL_4,0)}FLOAT_SYMBOL_8(){return this.getToken(o.FLOAT_SYMBOL_8,0)}NUMBER_SYMBOL(){return this.getToken(o.NUMBER_SYMBOL,0)}VARIANT_SYMBOL(){return this.getToken(o.VARIANT_SYMBOL,0)}OBJECT_SYMBOL(){return this.getToken(o.OBJECT_SYMBOL,0)}GEOGRAPHY_SYMBOL(){return this.getToken(o.GEOGRAPHY_SYMBOL,0)}enterRule(e){e instanceof R&&e.enterIdentifierKeyword(this)}exitRule(e){e instanceof R&&e.exitIdentifierKeyword(this)}};c(z9,"IdentifierKeywordContext");var Go=z9;o.QueryContext=u2;o.ValuesContext=t2;o.SelectStatementContext=r2;o.SelectStatementWithIntoContext=i2;o.QueryExpressionContext=vi;o.QueryExpressionBodyContext=a2;o.QueryExpressionParensContext=Jt;o.QueryPrimaryContext=ls;o.QuerySpecificationContext=s2;o.SubqueryContext=zt;o.QuerySpecOptionContext=n2;o.LimitClauseContext=o2;o.LimitOptionsContext=l2;o.LimitOptionContext=cs;o.IntoClauseContext=ds;o.ProcedureAnalyseClauseContext=c2;o.HavingClauseContext=d2;o.WindowClauseContext=p2;o.WindowDefinitionContext=ps;o.WindowSpecContext=hs;o.WindowSpecDetailsContext=h2;o.WindowFrameClauseContext=f2;o.WindowFrameUnitsContext=S2;o.WindowFrameExtentContext=O2;o.WindowFrameStartContext=fs;o.WindowFrameBetweenContext=L2;o.WindowFrameBoundContext=Ss;o.WindowFrameExclusionContext=E2;o.WithClauseContext=Os;o.CommonTableExpressionContext=Ls;o.GroupByClauseContext=B2;o.OlapOptionContext=M2;o.OrderClauseContext=Di;o.DirectionContext=m2;o.FromClauseContext=_2;o.TableReferenceListContext=Es;o.TableValueConstructorContext=T2;o.ExplicitTableContext=Y2;o.RowValueExplicitContext=Bs;o.SelectOptionContext=Ms;o.LockingClauseListContext=wi;o.LockingClauseContext=ms;o.LockStrenghContext=A2;o.LockedRowActionContext=R2;o.SelectItemListContext=g2;o.SelectItemContext=Ui;o.SelectAliasContext=_s;o.WhereClauseContext=Pi;o.QualifyClauseContext=y2;o.TableReferenceContext=ki;o.EscapedTableReferenceContext=N2;o.JoinedTableContext=Wr;o.NaturalJoinTypeContext=C2;o.InnerJoinTypeContext=I2;o.OuterJoinTypeContext=b2;o.TableFactorContext=Fi;o.SingleTableContext=Ts;o.SingleTableParensContext=x2;o.DerivedTableContext=v2;o.TableReferenceListParensContext=D2;o.TableFunctionContext=w2;o.ColumnsClauseContext=Ys;o.JtColumnContext=As;o.OnEmptyOrErrorContext=U2;o.OnEmptyContext=P2;o.OnErrorContext=k2;o.JtOnResponseContext=Rs;o.UnionOptionContext=gs;o.TableAliasContext=Hi;o.IndexHintListContext=F2;o.IndexHintContext=ys;o.IndexHintTypeContext=H2;o.KeyOrIndexContext=V2;o.IndexHintClauseContext=G2;o.IndexListContext=q2;o.IndexListElementContext=Ns;o.ExprContext=A0;o.BoolPriContext=Kr;o.CompOpContext=K2;o.PredicateContext=Cs;o.PredicateOperationsContext=W2;o.BitExprContext=du;o.SimpleExprContext=Fu;o.JsonOperatorContext=j2;o.SumExprContext=X2;o.GroupingOperationContext=Q2;o.WindowFunctionCallContext=J2;o.WindowingClauseContext=Vi;o.LeadLagInfoContext=z2;o.NullTreatmentContext=Is;o.JsonFunctionContext=$2;o.InSumExprContext=Gi;o.IdentListArgContext=Z2;o.IdentListContext=eo;o.FulltextOptionsContext=uo;o.RuntimeFunctionCallContext=to;o.GeometryFunctionContext=ro;o.TimeFunctionParametersContext=io;o.FractionalPrecisionContext=ao;o.WeightStringLevelsContext=so;o.WeightStringLevelListItemContext=bs;o.DateTimeTtypeContext=no;o.TrimFunctionContext=oo;o.SubstringFunctionContext=lo;o.FunctionCallContext=co;o.UdfExprListContext=po;o.UdfExprContext=xs;o.UnpivotClauseContext=vs;o.VariableContext=ho;o.UserVariableContext=qi;o.SystemVariableContext=fo;o.WhenExpressionContext=Ds;o.ThenExpressionContext=ws;o.ElseExpressionContext=So;o.ExprListContext=Hu;o.CharsetContext=Us;o.NotRuleContext=Ki;o.Not2RuleContext=Oo;o.IntervalContext=$t;o.IntervalTimeStampContext=Ps;o.ExprListWithParenthesesContext=ks;o.ExprWithParenthesesContext=Fs;o.SimpleExprWithParenthesesContext=Hs;o.OrderListContext=Wi;o.OrderExpressionContext=Vs;o.IndexTypeContext=p3;o.DataTypeContext=ji;o.NcharContext=Lo;o.FieldLengthContext=Gs;o.FieldOptionsContext=Eo;o.CharsetWithOptBinaryContext=Bo;o.AsciiContext=Mo;o.UnicodeContext=mo;o.WsNumCodepointsContext=_o;o.TypeDatetimePrecisionContext=To;o.CharsetNameContext=jr;o.CollationNameContext=Yo;o.CollateContext=Ao;o.CharsetClauseContext=Ro;o.FieldsClauseContext=go;o.FieldTermContext=qs;o.LinesClauseContext=yo;o.LineTermContext=Ks;o.UsePartitionContext=No;o.ColumnInternalRefListContext=Ws;o.TableAliasRefListContext=Co;o.PureIdentifierContext=js;o.IdentifierContext=z0;o.IdentifierListContext=Io;o.IdentifierListWithParenthesesContext=Xi;o.QualifiedIdentifierContext=Je;o.JsonPathIdentifierContext=Xs;o.DotIdentifierContext=bo;o.Ulong_numberContext=Qs;o.Real_ulong_numberContext=Zt;o.Ulonglong_numberContext=Qi;o.Real_ulonglong_numberContext=xo;o.LiteralContext=vo;o.StringListContext=Do;o.TextStringLiteralContext=Ou;o.TextStringContext=er;o.TextLiteralContext=Js;o.NumLiteralContext=wo;o.BoolLiteralContext=Uo;o.NullLiteralContext=Po;o.TemporalLiteralContext=ko;o.FloatOptionsContext=Fo;o.PrecisionContext=zs;o.TextOrIdentifierContext=rt;o.ParenthesesContext=$s;o.EqualContext=Ho;o.VarIdentTypeContext=Vo;o.IdentifierKeywordContext=Go;Vg.exports=o});var Wg=b((D$,Kg)=>{var TG=jO(),Z9=class Z9 extends TG{constructor(e){super(),this.parser=e,this.result=null,this.fieldReferences=[],this.expressionState=null}getResult(){return this.result}setResult(e){this.result=e}isAllSelected(e){var u;return((u=e==null?void 0:e[0])==null?void 0:u.name)==="*"}findParentContextsToSkip(e){let u=[this.parser.ruleNames.findIndex(r=>r==="joinedTable"),this.parser.ruleNames.findIndex(r=>r==="withClause")];return this.findParent(e,u)}findParent(e,u){return e.parentCtx?u.includes(e.parentCtx.ruleIndex)?e.parentCtx:this.findParent(e.parentCtx,u):null}exitQuerySpecification(e){let u=e.selectItemList().fields||[];this.findParentContextsToSkip(e)||this.result&&this.isAllSelected(u)||this.setResult({selectItems:e.selectItemList().fields||[],from:(e.fromClause()||{}).tableList||[]})}exitSelectItemList(e){let u=e.MULT_OPERATOR(),r=e.selectItem()||[];e.fields=r.map(a=>{let{name:s,tableName:n,schemaName:l,databaseName:d}=qg(a.identifier);return{name:s,tableName:n,schemaName:l,databaseName:d,originalName:a.originalName,alias:a.alias,fieldReferences:YG(a.fieldReferences)}}).filter(Boolean),u&&(e.fields=[{name:"*"},...e.fields])}exitSelectItem(e){let u=e.qualifiedIdentifier()||e.jsonPathIdentifier();if(e.alias=(e.selectAlias()||{}).alias,u){e.identifier=u.identifier,e.originalName=u.originalName;return}e.fieldReferences=e.expr().fieldReferences}exitJsonPathIdentifier(e){let u=e.identifier(),r=e.qualifiedIdentifier().identifier,a=u.map(s=>s.getText())||[];e.originalName=a.join("."),e.identifier=[...r,a[a.length-1]].map(E3),!u.some(s=>{var n,l,d,p;return((l=(n=s.identifierKeyword)==null?void 0:n.call(s))==null?void 0:l.NULL_SYMBOL())||((p=(d=s.identifierKeyword)==null?void 0:d.call(s))==null?void 0:p.DISTINCT_SYMBOL())})&&this.fieldReferences.push(e.identifier[e.identifier.length-1])}enterExpr(e){this.expressionState||(this.fieldReferences=[],this.expressionState=e.invokingState)}exitExpr(e){this.expressionState===e.invokingState&&(e.fieldReferences=this.fieldReferences,this.fieldReferences=[],this.expressionState=null)}exitSelectAlias(e){e.alias=E3((e.identifier()||e.textStringLiteral()).getText())}exitTableWild(e){let{identifier:u,originalName:r}=e.qualifiedIdentifier();e.identifier=u,e.originalName=r}exitQualifiedIdentifier(e){let u=e.identifier(),r=u.map(a=>a.getText())||[];e.MULT_OPERATOR()&&r.push("*"),e.originalName=r[r.length-1],e.identifier=r.map(E3),!u.some(a=>{var s,n,l,d;return((n=(s=a.identifierKeyword)==null?void 0:s.call(a))==null?void 0:n.NULL_SYMBOL())||((d=(l=a.identifierKeyword)==null?void 0:l.call(a))==null?void 0:d.DISTINCT_SYMBOL())})&&this.fieldReferences.push(e.identifier[e.identifier.length-1])}exitFromClause(e){e.tableList=(e.tableReferenceList()||{}).tableList||[]}exitTableReferenceList(e){e.tableList=e.tableReference().flatMap(u=>u.tables)}exitTableReference(e){e.tables=(e.tableFactor()||e.escapedTableReference()).tables;let u=e.joinedTable()||[];e.tables=[...e.tables,...u.flatMap(r=>r.tables)]}exitJoinedTable(e){e.tables=(e.tableReference()||e.tableFactor()).tables}exitEscapedTableReference(e){e.tables=e.tableFactor().tables;let u=e.joinedTable()||[];e.tables=[...e.tables,...u.flatMap(r=>r.tables)]}exitTableFactor(e){let u=e.singleTable()||e.singleTableParens();if(u){e.tables=[{table:u.table,schemaName:u.schemaName,databaseName:u.databaseName,originalName:u.originalName,alias:u.alias}];return}let r=e.tableReferenceListParens();if(!r){e.tables=[];return}e.tables=r.tableList}exitSingleTable(e){let{originalName:u,identifier:r}=e.qualifiedIdentifier(),{tableName:a,schemaName:s,databaseName:n}=qg([...r||[],"column"]);e.table=a,e.schemaName=s,e.databaseName=n,e.originalName=u,e.alias=(e.tableAlias()||{}).alias}exitSingleTableParens(e){let u=e.singleTable()||e.singleTableParens();e.table=u.table,e.schemaName=u.schemaName,e.databaseName=u.databaseName,e.originalName=u.originalName,e.alias=u.alias,e.originalName=u.originalName}exitTableReferenceListParens(e){let u=e.tableReferenceList()||e.tableReferenceListParens();e.tableList=u.tableList}exitTableAlias(e){e.alias=E3(e.identifier().getText())}};c(Z9,"Listener");var $9=Z9,E3=c(i=>i?/^\[.*\]$|^(`|'|").*\1$/.test(i)?i.slice(1,-1):i:"","removeQuotes"),qg=c(i=>{if(!Array.isArray(i))return"";let e=["name","tableName","schemaName","databaseName"];return i.reverse().reduce((u,r,a)=>({...u,[e[a]]:r}),{})},"getNameObject"),YG=c(i=>{if((i==null?void 0:i.length)>0)return i},"getFieldReferences");Kg.exports=$9});var Xg=b((U$,jg)=>{var B3=z1(),AG=Fg(),RG=Gg(),gG=Wg(),yG=c((i,e)=>{let u=new B3.InputStream(i),r=new AG(u),a=new B3.CommonTokenStream(r),s=new RG(a);s.removeErrorListeners();let p=class p extends B3.error.ErrorListener{syntaxError(f,S,_,O,E){let A=`line ${_}:${O} ${E}`;e?e(A):console.log(new Error(A))}};c(p,"ExprErrorListener");let n=p;s.addErrorListener(new n);let l=s.query(),d=new gG(s);return B3.tree.ParseTreeWalker.DEFAULT.walk(d,l),d.getResult()},"parseSelectStatement");jg.exports=yG});var zg=IA(),m3=xA(),{createJsonSchema:Qg}=PA(),{injectPrimaryKeyConstraintsIntoTable:NG,reverseForeignKeys:CG}=FA(),{BigQueryDate:IG,BigQueryDatetime:bG,BigQueryTime:xG,BigQueryTimestamp:vG,Geography:DG}=Ld(),{Big:wG}=pd(),UG=Xg(),PG=c(async(i,e,u,r)=>{try{let a=T3({title:"Reverse-engineering process",hiddenKeys:i.hiddenKeys,logger:e}),s=_3(i,e),n=m3(s,a),d=(i.datasetId?[{id:i.datasetId}]:await n.getDatasets()).map(p=>p.id);u(null,d)}catch(a){u(Y3(e,a))}},"getDatabases"),_3=c((i,e)=>(e.clear(),e.log("info",i,"connectionInfo",i.hiddenKeys),zg.connect(i)),"connect"),kG=c(async(i,e,u)=>{try{let r=T3({title:"Reverse-engineering process",hiddenKeys:i.hiddenKeys,logger:e}),a=_3(i,e);await m3(a,r).getDatasets(),u()}catch(r){u(Y3(e,r))}},"testConnection"),FG=c(async(i,e,u)=>{zg.disconnect(),u()},"disconnect"),HG=c(async(i,e,u,r)=>{var a;try{let s=r.require("async"),n=T3({title:"Reverse-engineering process",hiddenKeys:i.hiddenKeys,logger:e}),l=_3(i,e),d=m3(l,n),p=i.datasetId||((a=i.data)==null?void 0:a.databaseName),h=p?[{id:p}]:await d.getDatasets(),f=await s.mapSeries(h,async S=>{let _=await d.getTables(S.id),O=["MATERIALIZED_VIEW","VIEW"],E=_.filter(g=>!O.includes(g.metadata.type)).map(g=>g.id),A=_.filter(g=>O.includes(g.metadata.type)).map(g=>d.getViewName(g.id));return{isEmpty:_.length===0,dbName:S.id,dbCollections:E,views:A}});u(null,f)}catch(s){u(Y3(e,s))}},"getDbCollectionsNames"),VG=c(async(i,e,u,r)=>{try{let a=r.require("lodash"),s=r.require("async"),n=_3(i,e),l=T3({title:"Reverse-engineering process",hiddenKeys:i.hiddenKeys,logger:e}),d=m3(n,l),p=await d.getProjectInfo(),h=i.recordSamplingSettings,f={projectID:p.id,projectName:p.friendlyName},S=[],_=await s.reduce(i.collectionData.dataBaseNames,[],async(O,E)=>{var U;l.info(`Process dataset "${E}"`),l.progress(`Process dataset "${E}"`,E);let A=await d.getDataset(E),g=KG({metadata:A.metadata,datasetName:E,_:a}),{tables:D,views:I}=(U=i.collectionData.collections[E])!=null&&U.length?GG(i,E):await qG(A),{primaryKeyConstraintsData:W,foreignKeyConstraintsData:Y}=await d.getConstraintsData(p.id,E),N=Y?CG(Y):[];S=[...S,...N],l.info(`Getting dataset constraints "${E}"`),l.progress(`Getting dataset constraints "${E}"`,E);let w=await s.mapSeries(D,async z=>{l.info(`Get table metadata: "${z}"`),l.progress("Get table metadata",E,z);let[e0]=await A.table(z).get(),Z=e0.metadata.friendlyName;l.info(`Get table rows: "${z}"`),l.progress("Get table rows",E,z);let[l0]=await d.getRows(z,e0,h);l.info(`Convert rows: "${z}"`),l.progress("Convert rows",E,z);let n0=Qg(e0.metadata.schema??{},l0),{propertiesWithInjectedConstraints:M0,primaryKey:S0}=NG({datasetId:A.id,properties:n0.properties,tableName:z,constraintsData:W}),c0={...n0,properties:M0},Ee=e7(l0);return{dbName:g.name,collectionName:Z||z,entityLevel:{...WG({_:a,table:e0,tableName:z}),primaryKey:S0},documents:Ee,standardDoc:Ee[0],views:[],emptyBucket:!1,validation:{jsonSchema:c0},bucketInfo:g}}),G=await s.mapSeries(I,async z=>{var M0,S0,c0;l.info(`Get view metadata: "${z}"`),l.progress("Get view metadata",E,z);let[e0]=await A.table(z).get(),Z=e0.metadata.materializedView||e0.metadata.view;l.info(`Process view: "${z}"`),l.progress("Process view",E,z);let l0=e0.metadata.friendlyName,n0=Qg(e0.metadata.schema??{});return{dbName:g.name,name:l0||z,jsonSchema:$G({viewQuery:Z.query,tablePackages:w,viewJsonSchema:n0,log:l}),data:{name:l0||z,code:l0?z:"",materialized:e0.metadata.type==="MATERIALIZED_VIEW",description:e0.metadata.description,selectStatement:Z.query,labels:u7(a,e0.metadata.labels),expiration:e0.metadata.expirationTime?Number(e0.metadata.expirationTime):void 0,clusteringKey:((M0=e0.metadata.clustering)==null?void 0:M0.fields)||[],...Zg(e0.metadata),enableRefresh:!!(Z!=null&&Z.enableRefresh),refreshInterval:isNaN(Z==null?void 0:Z.refreshIntervalMs)?"":Number(Z==null?void 0:Z.refreshIntervalMs)/(60*1e3),maxStaleness:e0.metadata.maxStaleness,allowNonIncrementalDefinition:(c0=(S0=e0.metadata)==null?void 0:S0.materializedView)==null?void 0:c0.allowNonIncrementalDefinition}}});return O=O.concat(w),G.length&&(O=O.concat({dbName:g.name,views:G,emptyBucket:!1})),O});u(null,_,f,S)}catch(a){u(Y3(e,a))}},"getDbCollectionsData"),GG=c((i,e)=>{let u=i.collectionData.collections[e].filter(a=>!Jg(a)),r=i.collectionData.collections[e].map(Jg).filter(Boolean);return{tables:u,views:r}},"getSpecificTablesAndViews"),qG=c(async i=>{let e=(await i.getTables()).flat(),u=e.filter(({metadata:a})=>a.type==="TABLE").map(({id:a})=>a),r=e.filter(({metadata:a})=>a.type==="VIEW"||a.type==="MATERIALIZED_VIEW").map(({id:a})=>a);return{tables:u,views:r}},"getTablesAndViews"),T3=c(({title:i,logger:e,hiddenKeys:u})=>({info(r){e.log("info",{message:r},i,u)},warn(r,a){e.log("info",{message:"[warning] "+r,context:a},i,u)},progress(r,a="",s=""){e.progress({message:r,containerName:a,entityName:s})},error(r){e.log("error",{message:r.message,stack:r.stack},i)}}),"createLogger"),KG=c(({_:i,metadata:e,datasetName:u})=>{var s;let r=(s=e==null?void 0:e.datasetReference)==null?void 0:s.datasetId,a=e.friendlyName;return{name:a||r,code:a&&r,datasetID:e.id,dataLocation:(e.location||"").toLowerCase(),description:e.description||"",labels:u7(i,e.labels),enableTableExpiration:!!e.defaultTableExpirationMs,defaultExpiration:isNaN(e.defaultTableExpirationMs)?void 0:e.defaultTableExpirationMs/(1e3*60*60*24),...$g(e.defaultEncryptionConfiguration)}},"getBucketInfo"),u7=c((i,e)=>i.keys(e).map(u=>({labelKey:u,labelValue:e[u]})),"getLabels"),Jg=c(i=>{let e=/ \(v\)$/i;return e.test(i)?i.replace(e,""):""},"getViewName"),WG=c(({_:i,table:e,tableName:u})=>{var s;let r=e.metadata||{},a=r.friendlyName||u;return{...Zg(r),collectionName:a,code:r.friendlyName?u:"",tableType:r.tableType==="EXTERNAL"||r.type==="EXTERNAL"?"External":"Native",description:r.description,expiration:r.expirationTime?Number(r.expirationTime):void 0,clusteringKey:((s=r.clustering)==null?void 0:s.fields)||[],...$g(r.encryptionConfiguration),labels:u7(i,r.labels),tableOptions:jG(r)}},"getTableInfo"),jG=c(i=>{var r,a,s,n,l,d,p,h,f,S,_,O,E,A,g,D;let e=i.externalDataConfiguration||{},u={CSV:"CSV",GOOGLE_SHEETS:"GOOGLE_SHEETS",NEWLINE_DELIMITED_JSON:"JSON",AVRO:"AVRO",DATASTORE_BACKUP:"DATASTORE_BACKUP",ORC:"ORC",PARQUET:"PARQUET",BIGTABLE:"CLOUD_BIGTABLE",JSON:"JSON",CLOUD_BIGTABLE:"CLOUD_BIGTABLE"}[(e.sourceFormat||"").toUpperCase()]||"";return{format:u,uris:(e.sourceUris||[]).map(I=>({uri:I})),bigtableUri:u==="CLOUD_BIGTABLE"&&((r=e.sourceUris)==null?void 0:r[0])||"",autodetect:e.autodetect,max_staleness:i.maxStaleness,metadata_cache_mode:{AUTOMATIC:"AUTOMATIC",MANUAL:"MANUAL"}[(e.metadataCacheMode||"").toUpperCase()]||"",object_metadata:e.objectMetadata||"",decimal_target_types:(e.decimalTargetTypes||[]).map(I=>({value:I})),allow_quoted_newlines:(a=e.csvOptions)==null?void 0:a.allowQuotedNewlines,allow_jagged_rows:(s=e.csvOptions)==null?void 0:s.allowJaggedRows,quote:(n=e.csvOptions)==null?void 0:n.quote,skip_leading_rows:((l=e.csvOptions)==null?void 0:l.skipLeadingRows)||((d=e.googleSheetsOptions)==null?void 0:d.skipLeadingRows),preserve_ascii_control_characters:(p=e.csvOptions)==null?void 0:p.preserveAsciiControlCharacters,null_marker:(h=e.csvOptions)==null?void 0:h.nullMarker,field_delimiter:(f=e.csvOptions)==null?void 0:f.fieldDelimiter,encoding:(S=e.csvOptions)==null?void 0:S.encoding,ignore_unknown_values:e.ignoreUnknownValues,compression:e.compression,max_bad_records:e.maxBadRecords,require_hive_partition_filter:(_=e.hivePartitioningOptions)==null?void 0:_.requirePartitionFilter,hive_partition_uri_prefix:(O=e.hivePartitioningOptions)==null?void 0:O.sourceUriPrefix,sheet_range:(E=e.googleSheetsOptions)==null?void 0:E.range,reference_file_schema_uri:e.referenceFileSchemaUri,enable_list_inference:(A=e.parquetOptions)==null?void 0:A.enableListInference,enum_as_string:(g=e.parquetOptions)==null?void 0:g.enumAsString,enable_logical_types:(D=e.avroOptions)==null?void 0:D.useAvroLogicalTypes,bigtable_options:JSON.stringify(e.bigtableOptions,null,4),json_extension:e.jsonExtension}},"getExternalOptions"),$g=c(i=>({encryption:i?"Customer-managed":"Google-managed",customerEncryptionKey:i==null?void 0:i.kmsKeyName}),"getEncryption"),Zg=c(i=>{var u;return{partitioning:XG(i),partitioningFilterRequired:i.requirePartitionFilter,partitioningType:QG(i.timePartitioning||{}),timeUnitpartitionKey:[(u=i.timePartitioning)==null?void 0:u.field],rangeOptions:JG(i.rangePartitioning)}},"getPartitioning"),XG=c(i=>i.timePartitioning?i.timePartitioning.field?"By time-unit column":"By ingestion time":i.rangePartitioning?"By integer-range":"No partitioning","getPartitioningCategory"),QG=c(i=>i.type==="HOUR"?"By hour":i.type==="MONTH"?"By month":i.type==="YEAR"?"By year":"By day","getPartitioningType"),JG=c(i=>{var e,u,r;return i?[{rangePartitionKey:[i.field],rangeStart:(e=i.range)==null?void 0:e.start,rangeEnd:(u=i.range)==null?void 0:u.end,rangeinterval:(r=i.range)==null?void 0:r.interval}]:[]},"getPartitioningRange"),Y3=c((i,e)=>{let u={message:e.message,stack:e.stack};return i.log("error",u,"Reverse Engineering error"),u},"prepareError"),e7=c(i=>i instanceof IG||i instanceof bG||i instanceof xG||i instanceof vG?i.value:i instanceof Buffer?i.toString("base64"):i instanceof wG?i.toNumber():(i instanceof DG&&(i=i.value),Array.isArray(i)?i.map(e7):i&&typeof i=="object"?Object.keys(i).reduce((e,u)=>({...e,[u]:e7(i[u])}),{}):i),"convertValue"),M3=c((i,e)=>!i||!e||i.type!==e.type||i.properties&&!e.properties||!i.properties&&e.properties||!i.items&&e.items||i.items&&!e.items?!1:i.properties&&e.properties?Object.keys(i.properties).every(u=>M3(i.properties[u],e.properties[u])):Array.isArray(i.items)&&Array.isArray(e.items)?i.items.every((u,r)=>M3(u,e.item[r])):i.items&&e.items?M3(i.items,e.items):!0,"equalByStructure"),zG=c((i,e)=>i.properties[e.alias]?e.alias:Object.keys(i.properties).find(u=>M3(i.properties[u],e)),"findViewPropertyByTableProperty"),$G=c(({viewQuery:i,tablePackages:e,viewJsonSchema:u,log:r})=>{try{let a=UG(i),s=a.selectItems.map(l=>({alias:l.alias,name:l.name||l.fieldReferences[l.fieldReferences.length-1]||l.alias,table:l.tableName||""}));return a.from.reduce((l,d)=>{let p=d.table.split("."),h=p.length>1?p[p.length-1]:p[0],f=p.length>1?p[p.length-2]:d.schemaName,S=e.find(A=>(A.dbName===f||!f)&&A.collectionName===h);if(!S)return l;let _=s.filter(A=>A.table===h||A.table===d.alias||!A.table),O=S.validation.jsonSchema,E=_.map(A=>{if(O.properties[A.name])return{...O.properties[A.name],table:h,name:A.name,alias:A.alias}}).filter(Boolean);return l.concat(E)},[]).reduce((l,d,p)=>{let h=zG(l,d);return h?{...l,properties:{...l.properties,[h]:{$ref:`#collection/definitions/${d.table}/${d.name}`}}}:l},u)}catch(a){return r.info("Error with processing view select statement: "+i),r.error(a),u}},"createViewSchema");module.exports={disconnect:FG,testConnection:kG,getDbCollectionsNames:HG,getDbCollectionsData:VG,getDatabases:PG}; +/*! Bundled license information: + +safe-buffer/index.js: + (*! safe-buffer. MIT License. Feross Aboukhadijeh *) + +teeny-request/build/src/agents.js: + (** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *) + +teeny-request/build/src/TeenyStatistics.js: + (** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *) + +teeny-request/build/src/index.js: + (** + * @license + * Copyright 2018 Google LLC + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *) + +@google-cloud/common/build/src/util.js: + (*! + * @module common/util + *) + +@google-cloud/common/build/src/service-object.js: + (*! + * @module common/service-object + *) + +@google-cloud/common/build/src/operation.js: + (*! + * @module common/operation + *) + +@google-cloud/common/build/src/service.js: + (*! + * @module common/service + *) + +@google-cloud/paginator/build/src/resource-stream.js: + (*! + * Copyright 2019 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *) + +@google-cloud/paginator/build/src/index.js: + (*! + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *) + (*! + * @module common/paginator + *) + (*! Developer Documentation + * + * paginator is used to auto-paginate `nextQuery` methods as well as + * streamifying them. + * + * Before: + * + * search.query('done=true', function(err, results, nextQuery) { + * search.query(nextQuery, function(err, results, nextQuery) {}); + * }); + * + * After: + * + * search.query('done=true', function(err, results) {}); + * + * Methods to extend should be written to accept callbacks and return a + * `nextQuery`. + *) + +is/index.js: + (**! + * is + * the definitive JavaScript type testing library + * + * @copyright 2013-2014 Enrico Marino / Jordan Harband + * @license MIT + *) + +@google-cloud/bigquery/build/src/table.js: + (*! + * Copyright 2014 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *) + (*! Developer Documentation + * + * These methods can be auto-paginated. + *) + (*! Developer Documentation + * + * All async methods (except for streams) will return a Promise in the event + * that a callback is omitted. + *) + +@google-cloud/bigquery/build/src/model.js: + (*! + * Copyright 2019 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *) + (*! Developer Documentation + * + * All async methods (except for streams) will return a Promise in the event + * that a callback is omitted. + *) + +@google-cloud/bigquery/build/src/routine.js: + (*! + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *) + (*! Developer Documentation + * + * All async methods (except for streams) will return a Promise in the event + * that a callback is omitted. + *) + +@google-cloud/bigquery/build/src/dataset.js: + (*! + * Copyright 2014 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *) + (*! Developer Documentation + * + * These methods can be auto-paginated. + *) + (*! Developer Documentation + * + * All async methods (except for streams) will return a Promise in the event + * that a callback is omitted. + *) + +@google-cloud/bigquery/build/src/job.js: + (*! + * Copyright 2014 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *) + (*! + * @module bigquery/job + *) + (*! Developer Documentation + * + * These methods can be auto-paginated. + *) + (*! Developer Documentation + * + * All async methods (except for streams) will return a Promise in the event + * that a callback is omitted. + *) + +@google-cloud/bigquery/build/src/bigquery.js: + (*! + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *) + (*! Developer Documentation + * + * These methods can be auto-paginated. + *) + (*! Developer Documentation + * + * All async methods (except for streams) will return a Promise in the event + * that a callback is omitted. + *) + +@google-cloud/bigquery/build/src/index.js: + (*! + * Copyright 2019 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *) + +antlr4/src/antlr4/polyfills/codepointat.js: + (*! https://mths.be/codepointat v0.2.0 by @mathias *) + +antlr4/src/antlr4/polyfills/fromcodepoint.js: + (*! https://mths.be/fromcodepoint v0.2.1 by @mathias *) +*/ diff --git a/reverse_engineering/connection_settings_modal/connectionSettingsModalConfig.json b/reverse_engineering/connection_settings_modal/connectionSettingsModalConfig.json index bfcf9fa..5c66a4b 100644 --- a/reverse_engineering/connection_settings_modal/connectionSettingsModalConfig.json +++ b/reverse_engineering/connection_settings_modal/connectionSettingsModalConfig.json @@ -7,15 +7,12 @@ "inputKeyword": "name", "inputType": "text", "inputPlaceholder": "Name" - }, { "inputLabel": "Cloud platform", "inputKeyword": "cloudPlatform", "inputType": "select", - "options": [ - { "value": "", "label": "Google Cloud" } - ] + "options": [{ "value": "", "label": "Google Cloud" }] }, { "inputLabel": "Project id", @@ -40,4 +37,4 @@ } ] } -] \ No newline at end of file +] diff --git a/reverse_engineering/helpers/bigQueryHelper.js b/reverse_engineering/helpers/bigQueryHelper.js deleted file mode 100644 index 1fd0bb8..0000000 --- a/reverse_engineering/helpers/bigQueryHelper.js +++ /dev/null @@ -1,169 +0,0 @@ -const createBigQueryHelper = (client, log) => { - const getDatasets = async () => { - const [datasets] = await client.getDatasets(); - - return datasets; - }; - - const getPrimaryKeyConstraintsData = async (projectId, datasetId) => { - try { - return await client.query({ - query: `SELECT * - FROM ${projectId}.${datasetId}.INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU - INNER JOIN ${projectId}.${datasetId}.INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC - USING(constraint_name) - WHERE TC.constraint_type = "PRIMARY KEY";` - }) - } catch (error) { - log.warn('Error while getting table constraints', error) - return [] - } - } - - const getForeignKeyConstraintsData = async (projectId, datasetId) => { - try { - return await client.query({ - query: `SELECT - CCU.column_name as \`parent_column\`, - KCU.column_name as \`child_column\`, - TC.constraint_catalog, - TC.constraint_name, - TC.constraint_schema, - TC.constraint_type, - TC.table_catalog, - CCU.table_schema as \`parent_schema\`, - KCU.table_schema as \`child_schema\`, - CCU.table_name as \`parent_table\`, - KCU.table_name as \`child_table\` - FROM (${projectId}.${datasetId}.INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS CCU - INNER JOIN ${projectId}.${datasetId}.INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU - USING(constraint_name)) - INNER JOIN ${projectId}.${datasetId}.INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC - USING(constraint_name) - WHERE TC.constraint_type = "FOREIGN KEY";` - }) - } catch (error) { - log.warn('Error while getting table constraints', error) - return [] - } - } - - const getConstraintsData = async (projectId, datasetId) => { - const primaryKeyConstraintsData = (await getPrimaryKeyConstraintsData(projectId, datasetId)).flat() - const foreignKeyConstraintsData = (await getForeignKeyConstraintsData(projectId, datasetId)).flat() - return { - primaryKeyConstraintsData, foreignKeyConstraintsData - } - } - - const getTables = async datasetId => { - const [tables] = await client.dataset(datasetId).getTables(); - - return tables || []; - }; - - const getProjectList = () => - new Promise((resolve, reject) => { - client.request({ uri: 'https://bigquery.googleapis.com/bigquery/v2/projects' }, (error, result) => { - if (error) { - return reject(error); - } - - resolve(result.projects || []); - }); - }); - - const getProjectInfo = async () => { - const projectId = await client.getProjectId(); - const projects = await getProjectList(); - - const project = projects.find(project => project.id === projectId); - - if (!project) { - return { - id: projectId, - }; - } - - return project; - }; - - const getDataset = async datasetName => { - const [dataset] = await client.dataset(datasetName).get(); - - return dataset; - }; - - const getRows = async (name, table, recordSamplingSettings) => { - const limit = await getLimit(table, name, recordSamplingSettings); - - const wrapIntegers = { - integerTypeCastFunction(n) { - return Number(n); - }, - }; - - if (table.metadata.type !== 'EXTERNAL') { - return table.getRows({ - wrapIntegers, - maxResults: limit, - }); - } - - try { - return await table.query({ - query: `SELECT * FROM ${name} LIMIT ${limit};`, - wrapIntegers, - }); - } catch (e) { - log.warn(`There is an issue during getting data from external table ${name}. Error: ${e.message}`, e); - - return [[]]; - } - }; - - const getLimit = async (table, name, recordSamplingSettings) => { - if (recordSamplingSettings.active === 'absolute') { - return Number(recordSamplingSettings.absolute.value); - } - - const numberOfRows = await getTableRowsCount(table, name); - - return getSampleDocSize(numberOfRows, recordSamplingSettings); - }; - - const getSampleDocSize = (count, recordSamplingSettings) => { - const limit = Math.ceil((count * recordSamplingSettings.relative.value) / 100); - - return Math.min(limit, recordSamplingSettings.maxValue); - }; - - const getTableRowsCount = async (table, name) => { - try { - const [result] = await table.query({ - query: `SELECT COUNT(*) AS rows_count FROM ${name}`, - }); - - return result[0]?.rows_count || 1000; - } catch (error) { - log.warn('Error while getting rows count, using default value: 1000', error); - - return 1000; - } - }; - - const getViewName = (name) => `${name} (v)`; - - return { - getDatasets, - getTables, - getProjectInfo, - getDataset, - getRows, - getTableRowsCount, - getConstraintsData, - getViewName, - }; -}; - -module.exports = createBigQueryHelper; diff --git a/reverse_engineering/helpers/connectionHelper.js b/reverse_engineering/helpers/connectionHelper.js deleted file mode 100644 index 61b0f45..0000000 --- a/reverse_engineering/helpers/connectionHelper.js +++ /dev/null @@ -1,34 +0,0 @@ -const { BigQuery } = require('@google-cloud/bigquery'); - -let client = null; - -const connect = connectionInfo => { - if (client) { - return client; - } - - const projectId = connectionInfo.projectId; - const keyFilename = connectionInfo.keyFilename; - const location = connectionInfo.location; - - client = new BigQuery({ - keyFilename, - location, - projectId, - scopes: [ - 'https://www.googleapis.com/auth/bigquery', - 'https://www.googleapis.com/auth/drive', - ], - }); - - return client; -}; - -const disconnect = () => { - client = null; -}; - -module.exports = { - connect, - disconnect, -}; diff --git a/reverse_engineering/helpers/constraintsHelper.js b/reverse_engineering/helpers/constraintsHelper.js deleted file mode 100644 index 86a302c..0000000 --- a/reverse_engineering/helpers/constraintsHelper.js +++ /dev/null @@ -1,116 +0,0 @@ -const primaryKeyConstraintIntoPropertyInjector = (property, propertyConstraintData) => ({isConstraintComposed, constraintType}) => { - if (constraintType !== 'PRIMARY KEY') { - return property - } - - if (isConstraintComposed) { - return { - ...property, - compositePrimaryKey: true, - primaryKey: true - } - } - - return { - ...property, - primaryKey: true - } -} - -const constraintsInjectors = [primaryKeyConstraintIntoPropertyInjector] - -const injectPrimaryKeyConstraintsIntoTable = ({datasetId, tableName, properties, constraintsData}) => { - let primaryKey = [] - const propertiesWithInjectedConstraints = Object.fromEntries(Object.entries(properties).map(([propertyName, propertyValue]) => { - const propertyPKConstraintData = constraintsData.find(({table_schema, table_name, column_name}) => - table_schema === datasetId && - table_name === tableName && - column_name === propertyName) - - if (!propertyPKConstraintData) { - return [propertyName, propertyValue] - } - const propertiesByConstraints = groupPropertiesByConstraints(constraintsData) - const constraintName = propertyPKConstraintData.constraint_name - const constraintType = propertyPKConstraintData.constraint_type - const isConstraintComposed = propertiesByConstraints[constraintName].length > 1 - - if (constraintType === 'PRIMARY KEY' && isConstraintComposed) { - primaryKey = getCompositePrimaryKeyFieldModelData({primaryKey, constraintName, propertyName}) - } - - const newPropertyValue = constraintsInjectors.reduce((propertyWithInjectedConstraints, injector) => { - return injector(propertyWithInjectedConstraints, propertyPKConstraintData)({isConstraintComposed, constraintType}) - }, propertyValue) - return [propertyName, newPropertyValue] - })) - - return { - propertiesWithInjectedConstraints, - primaryKey: primaryKey.map(pk => ({compositePrimaryKey: pk.compositePrimaryKey})), - } -} - -const groupPropertiesByConstraints = (constraintsData) => { - const constraintsNames = Array.from(new Set(constraintsData.map(({constraint_name}) => constraint_name))) - let propertiesByConstraints = {} - constraintsNames.forEach(constraintName => { - propertiesByConstraints = { - ...propertiesByConstraints, - [constraintName] : constraintsData.filter(({constraint_name}) => constraint_name === constraintName) - } - }) - return propertiesByConstraints -} - -const getCompositePrimaryKeyFieldModelData = ({primaryKey, constraintName, propertyName}) => { - const composedPkToUpdate = primaryKey.find(({name}) => name === constraintName) - if (composedPkToUpdate) { - const newPrimaryKey = primaryKey.filter(({name}) => name !== constraintName) - const newCompositePk = {...composedPkToUpdate, compositePrimaryKey: [...composedPkToUpdate.compositePrimaryKey, propertyName]} - return [...newPrimaryKey, newCompositePk] - } else { - return [...primaryKey, {name: constraintName, compositePrimaryKey: [{name: propertyName}]}] - } -} - -const getConstraintBusinessName = (constraintNameFromCloud) => { - const [constraintChildTableName, constraintBusinessName] = constraintNameFromCloud.split('.') - return constraintBusinessName -} - -const reverseForeignKeys = (foreignKeyConstraintsData) => { - return foreignKeyConstraintsData.reduce((constraints, fkConstraintData) => { - const constraintNameToUse = getConstraintBusinessName(fkConstraintData.constraint_name) - const constraintInList = constraints.find(({relationshipName}) => relationshipName === constraintNameToUse) - const {parent_column, child_column} = fkConstraintData - if (constraintInList) { - const isParentAdded = constraintInList.parentField.includes(parent_column) - const isChildAdded = constraintInList.childField.includes(child_column) - const newConstraintData = { - ...constraintInList, - childField: isChildAdded ? constraintInList.childField : [...constraintInList.childField, child_column], - parentField: isParentAdded ? constraintInList.parentField : [...constraintInList.parentField, parent_column] - } - return [...constraints.filter(({relationshipName}) => relationshipName !== constraintNameToUse), newConstraintData] - } else { - const newConstraint = { - relationshipName: constraintNameToUse, - relationshipType: 'Foreign Key', - childDbName: fkConstraintData.child_schema, - childCollection: fkConstraintData.child_table, - childField: [fkConstraintData.child_column], - dbName: fkConstraintData.parent_schema, - parentCollection: fkConstraintData.parent_table, - parentField: [fkConstraintData.parent_column], - relationshipInfo: {} - } - return [...constraints, newConstraint] - } - }, []) -} - -module.exports = { - injectPrimaryKeyConstraintsIntoTable, - reverseForeignKeys -} \ No newline at end of file diff --git a/reverse_engineering/helpers/jsonSchemaHelper.js b/reverse_engineering/helpers/jsonSchemaHelper.js deleted file mode 100644 index a44b5f0..0000000 --- a/reverse_engineering/helpers/jsonSchemaHelper.js +++ /dev/null @@ -1,158 +0,0 @@ -const createJsonSchema = (schema, rows) => { - const properties = getProperties(schema.fields || [], rows); - - return { - properties, - }; -}; - -const getProperties = (fields, values) => { - return fields.reduce((properties, field) => { - return { - ...properties, - [field.name]: convertField(field, getValues(field.name, values)), - }; - }, {}); -}; - -const getValues = (name, values = []) => values.map(row => row[name]).filter(Boolean); - -const convertField = (field, values) => { - const type = getType(field.type); - const dataTypeMode = getTypeMode(field.mode); - const subtype = getSubtype(type, values); - const description = field.description; - const precision = field.precision; - const scale = field.scale; - const length = field.maxLength; - - if (field.mode === 'REPEATED') { - return { - type: 'array', - items: convertField( - { - ...field, - mode: 'REQUIRED', - }, - getValues(0, values), - ), - }; - } - - if (Array.isArray(field.fields)) { - const properties = getProperties(field.fields, values); - - return { - type, - description, - properties, - dataTypeMode, - subtype, - }; - } - - return { - type, - description, - dataTypeMode, - precision, - scale, - length, - subtype, - }; -}; - -const getTypeMode = mode => { - switch (mode) { - case 'REQUIRED': - return 'Required'; - case 'REPEATED': - return 'Repeated'; - default: - return 'Nullable'; - } -}; - -const getType = fieldType => { - switch (fieldType) { - case 'RECORD': - return 'struct'; - case 'GEOGRAPHY': - return 'geography'; - case 'TIME': - return 'time'; - case 'DATETIME': - return 'datetime'; - case 'DATE': - return 'date'; - case 'TIMESTAMP': - return 'timestamp'; - case 'BOOLEAN': - return 'bool'; - case 'BIGNUMERIC': - return 'bignumeric'; - case 'NUMERIC': - return 'numeric'; - case 'FLOAT': - return 'float64'; - case 'INTEGER': - return 'int64'; - case 'BYTES': - return 'bytes'; - case 'JSON': - return 'json'; - case 'STRING': - default: - return 'string'; - } -}; - -const getSubtype = (fieldType, values) => { - if (fieldType !== 'json') { - return; - } - - const jsonValue = findJsonValue(values) || values[0]; - - return getParsedJsonValueType(safeParse(jsonValue)); -}; - -const findJsonValue = values => { - return values.find(value => { - if (typeof value !== 'string') { - return false; - } - - try { - return JSON.parse(value); - } catch (e) { - return false; - } - }); -}; - -const safeParse = json => { - try { - return JSON.parse(json); - } catch (error) { - return json; - } -}; - -const getParsedJsonValueType = value => { - if (Array.isArray(value)) { - return 'array'; - } - - const type = typeof value; - - if (type === 'undefined') { - return 'object'; - } - - return type; -}; - -module.exports = { - createJsonSchema, -}; diff --git a/reverse_engineering/node_modules/.bin/gp12-pem b/reverse_engineering/node_modules/.bin/gp12-pem deleted file mode 120000 index cfbbf67..0000000 --- a/reverse_engineering/node_modules/.bin/gp12-pem +++ /dev/null @@ -1 +0,0 @@ -../google-p12-pem/build/src/bin/gp12-pem.js \ No newline at end of file diff --git a/reverse_engineering/node_modules/.bin/uuid b/reverse_engineering/node_modules/.bin/uuid deleted file mode 120000 index 588f70e..0000000 --- a/reverse_engineering/node_modules/.bin/uuid +++ /dev/null @@ -1 +0,0 @@ -../uuid/dist/bin/uuid \ No newline at end of file diff --git a/reverse_engineering/node_modules/@google-cloud/bigquery/CHANGELOG.md b/reverse_engineering/node_modules/@google-cloud/bigquery/CHANGELOG.md deleted file mode 100644 index 8a5d18c..0000000 --- a/reverse_engineering/node_modules/@google-cloud/bigquery/CHANGELOG.md +++ /dev/null @@ -1,648 +0,0 @@ -# Changelog - -[npm history][1] - -[1]: https://www.npmjs.com/package/@google-cloud/bigquery?activeTab=versions - -### [5.7.1](https://www.github.com/googleapis/nodejs-bigquery/compare/v5.7.0...v5.7.1) (2021-08-10) - - -### Bug Fixes - -* **build:** migrate to using main branch ([#986](https://www.github.com/googleapis/nodejs-bigquery/issues/986)) ([16e7a4e](https://www.github.com/googleapis/nodejs-bigquery/commit/16e7a4e36245af42a4f19048941a4dab1303f106)) - -## [5.7.0](https://www.github.com/googleapis/nodejs-bigquery/compare/v5.6.0...v5.7.0) (2021-07-21) - - -### Features - -* add `gcf-owl-bot[bot]` to `ignoreAuthors` ([#958](https://www.github.com/googleapis/nodejs-bigquery/issues/958)) ([9eab78d](https://www.github.com/googleapis/nodejs-bigquery/commit/9eab78de56d087f3dc756ab2c0974737a80ad43f)) - - -### Bug Fixes - -* **deps:** update dependency yargs to v17 ([#954](https://www.github.com/googleapis/nodejs-bigquery/issues/954)) ([28cf08d](https://www.github.com/googleapis/nodejs-bigquery/commit/28cf08d74184b388cd8d18a9622630939c5f99cf)) -* extend definition of Query.types for simple named parameters ([#906](https://www.github.com/googleapis/nodejs-bigquery/issues/906)) ([#907](https://www.github.com/googleapis/nodejs-bigquery/issues/907)) ([44e1ac7](https://www.github.com/googleapis/nodejs-bigquery/commit/44e1ac7cf8604d79508316d70a3a98e2953d59f0)) -* handle null query parameter value ([#920](https://www.github.com/googleapis/nodejs-bigquery/issues/920)) ([3bf900a](https://www.github.com/googleapis/nodejs-bigquery/commit/3bf900a54a92c0422fa8f3c48480dc430a7d134d)) -* promise never returned on table.insert ([#953](https://www.github.com/googleapis/nodejs-bigquery/issues/953)) ([a138347](https://www.github.com/googleapis/nodejs-bigquery/commit/a138347855f74d4e5c889dc42b00992c4a3808a6)) - -## [5.6.0](https://www.github.com/googleapis/nodejs-bigquery/compare/v5.5.0...v5.6.0) (2021-04-28) - - -### Features - -* Adds support for BIGNUMERIC type ([#904](https://www.github.com/googleapis/nodejs-bigquery/issues/904)) ([ef5552a](https://www.github.com/googleapis/nodejs-bigquery/commit/ef5552a5230240650fadd5bca8405a69b561a712)) - - -### Bug Fixes - -* **deps:** update dependency google-auth-library to v7 ([#928](https://www.github.com/googleapis/nodejs-bigquery/issues/928)) ([2ce28c7](https://www.github.com/googleapis/nodejs-bigquery/commit/2ce28c7beec18d80a744e5dafaa0b8288041c35f)) -* update returned Job with API-determined location in getMetadata ([#900](https://www.github.com/googleapis/nodejs-bigquery/issues/900)) ([8c31358](https://www.github.com/googleapis/nodejs-bigquery/commit/8c313582595ba7819f1cebf01625b24814c38174)) - -## [5.5.0](https://www.github.com/googleapis/nodejs-bigquery/compare/v5.4.0...v5.5.0) (2020-11-10) - - -### Features - -* Add support for Table IAM policies ([#892](https://www.github.com/googleapis/nodejs-bigquery/issues/892)) ([005422a](https://www.github.com/googleapis/nodejs-bigquery/commit/005422a07a46edd0eaf3fba3035753b42a86dadb)) - - -### Bug Fixes - -* update returned Job with API-determined location ([#890](https://www.github.com/googleapis/nodejs-bigquery/issues/890)) ([3894140](https://www.github.com/googleapis/nodejs-bigquery/commit/38941409c63221bf704ee8580ab3b032802ddc4e)) - -## [5.4.0](https://www.github.com/googleapis/nodejs-bigquery/compare/v5.3.0...v5.4.0) (2020-11-02) - - -### Features - -* optionally wrap INT64 in BigQueryInt or provide a custom INT64 value type cast options ([#873](https://www.github.com/googleapis/nodejs-bigquery/issues/873)) ([be7c6e6](https://www.github.com/googleapis/nodejs-bigquery/commit/be7c6e6411e351bfab4b557fb34162470bbfd7f4)) - - -### Bug Fixes - -* Detect Geography type during parameterized query ([#877](https://www.github.com/googleapis/nodejs-bigquery/issues/877)) ([bc0ca69](https://www.github.com/googleapis/nodejs-bigquery/commit/bc0ca695a5b2d9df15df9383f6a791be30e851ec)) -* do not retry jobs.insert when it flakes ([#864](https://www.github.com/googleapis/nodejs-bigquery/issues/864)) ([255491b](https://www.github.com/googleapis/nodejs-bigquery/commit/255491b958171907695b10aca7e536d58a52354c)) -* return error when custom getQueryResults() timeout has been exceeded ([#872](https://www.github.com/googleapis/nodejs-bigquery/issues/872)) ([96f939c](https://www.github.com/googleapis/nodejs-bigquery/commit/96f939cefe2f31a5252002bbfecd5f503b32f841)) -* **deps:** update dependency big.js to v6 ([#862](https://www.github.com/googleapis/nodejs-bigquery/issues/862)) ([a47afb5](https://www.github.com/googleapis/nodejs-bigquery/commit/a47afb5c97115d0159ad94615a7997db15d03d01)) - -## [5.3.0](https://www.github.com/googleapis/nodejs-bigquery/compare/v5.2.0...v5.3.0) (2020-09-30) - - -### Features - -* **constructor:** add option to set baseUrl using environment variable ([#849](https://www.github.com/googleapis/nodejs-bigquery/issues/849)) ([8c54f20](https://www.github.com/googleapis/nodejs-bigquery/commit/8c54f20777a902a343035fcf09e63978d71135ad)) -* allow setting BigQuery Job labels in createQueryJob method ([#865](https://www.github.com/googleapis/nodejs-bigquery/issues/865)) ([be074e7](https://www.github.com/googleapis/nodejs-bigquery/commit/be074e72ae1907f0649fbc5e085e22a31c3a6393)) - - -### Bug Fixes - -* **deps:** update dependency yargs to v16 ([#854](https://www.github.com/googleapis/nodejs-bigquery/issues/854)) ([58dcf34](https://www.github.com/googleapis/nodejs-bigquery/commit/58dcf34d8d22b4b5c9e488935b75eeaf8c8fd69e)) -* **perf:** disable prettyPrint for slimmer API responses ([#860](https://www.github.com/googleapis/nodejs-bigquery/issues/860)) ([1e56383](https://www.github.com/googleapis/nodejs-bigquery/commit/1e56383da5e6d8ce1335a711b32fea1155bddada)) - -## [5.2.0](https://www.github.com/googleapis/nodejs-bigquery/compare/v5.1.0...v5.2.0) (2020-08-13) - - -### Features - -* model extract ([#832](https://www.github.com/googleapis/nodejs-bigquery/issues/832)) ([1541e98](https://www.github.com/googleapis/nodejs-bigquery/commit/1541e98076ee33da7d7e5f5a10d3ea45fc393736)) - -## [5.1.0](https://www.github.com/googleapis/nodejs-bigquery/compare/v5.0.1...v5.1.0) (2020-07-27) - - -### Features - -* detect param type if not in provided types ([#813](https://www.github.com/googleapis/nodejs-bigquery/issues/813)) ([1e5a4cc](https://www.github.com/googleapis/nodejs-bigquery/commit/1e5a4cc0e7927dfe9690842e564982bfbef9310f)) - - -### Bug Fixes - -* add string type for query types ([#827](https://www.github.com/googleapis/nodejs-bigquery/issues/827)) ([acdecbd](https://www.github.com/googleapis/nodejs-bigquery/commit/acdecbd06f6a6ac1e5d1d8d0cd68afcb9a4d3ba7)) -* move gitattributes files to node templates ([#829](https://www.github.com/googleapis/nodejs-bigquery/issues/829)) ([f26e641](https://www.github.com/googleapis/nodejs-bigquery/commit/f26e64100e543cb520bcd7cd99913eca68e84af5)) - -### [5.0.1](https://www.github.com/googleapis/nodejs-bigquery/compare/v5.0.0...v5.0.1) (2020-07-07) - - -### Bug Fixes - -* add tests for Routine ([#807](https://www.github.com/googleapis/nodejs-bigquery/issues/807)) ([c969f3d](https://www.github.com/googleapis/nodejs-bigquery/commit/c969f3d15d4e545b9efd92c4f8a9649216cbd927)) - -## [5.0.0](https://www.github.com/googleapis/nodejs-bigquery/compare/v4.7.0...v5.0.0) (2020-06-19) - - -### ⚠ BREAKING CHANGES - -* don't return Stream from createLoadJob (#647) -* drop Node 8 from engines field (#662) - -### Features - -* drop Node 8 from engines field ([#662](https://www.github.com/googleapis/nodejs-bigquery/issues/662)) ([712b029](https://www.github.com/googleapis/nodejs-bigquery/commit/712b0294c6329545de70febb48762abd8b0567b9)) -* improved types ([40087fa](https://www.github.com/googleapis/nodejs-bigquery/commit/40087fa40f1e9a4180da7aaa43e2bb8a018bd632)) -* update types.d.ts ([#667](https://www.github.com/googleapis/nodejs-bigquery/issues/667)) ([a12b094](https://www.github.com/googleapis/nodejs-bigquery/commit/a12b094d2e6e48049203c9cd773fecb98713a3fa)), closes [#662](https://www.github.com/googleapis/nodejs-bigquery/issues/662) [#662](https://www.github.com/googleapis/nodejs-bigquery/issues/662) [#647](https://www.github.com/googleapis/nodejs-bigquery/issues/647) [#647](https://www.github.com/googleapis/nodejs-bigquery/issues/647) [#640](https://www.github.com/googleapis/nodejs-bigquery/issues/640) [#640](https://www.github.com/googleapis/nodejs-bigquery/issues/640) [#647](https://www.github.com/googleapis/nodejs-bigquery/issues/647) [#661](https://www.github.com/googleapis/nodejs-bigquery/issues/661) [#661](https://www.github.com/googleapis/nodejs-bigquery/issues/661) [#658](https://www.github.com/googleapis/nodejs-bigquery/issues/658) [#658](https://www.github.com/googleapis/nodejs-bigquery/issues/658) [#8203](https://www.github.com/googleapis/nodejs-bigquery/issues/8203) [#8203](https://www.github.com/googleapis/nodejs-bigquery/issues/8203) [#8203](https://www.github.com/googleapis/nodejs-bigquery/issues/8203) [#8203](https://www.github.com/googleapis/nodejs-bigquery/issues/8203) [#8203](https://www.github.com/googleapis/nodejs-bigquery/issues/8203) [#657](https://www.github.com/googleapis/nodejs-bigquery/issues/657) [#657](https://www.github.com/googleapis/nodejs-bigquery/issues/657) [#8203](https://www.github.com/googleapis/nodejs-bigquery/issues/8203) [#8203](https://www.github.com/googleapis/nodejs-bigquery/issues/8203) [#8203](https://www.github.com/googleapis/nodejs-bigquery/issues/8203) [#8203](https://www.github.com/googleapis/nodejs-bigquery/issues/8203) [#8203](https://www.github.com/googleapis/nodejs-bigquery/issues/8203) [#8203](https://www.github.com/googleapis/nodejs-bigquery/issues/8203) [#8203](https://www.github.com/googleapis/nodejs-bigquery/issues/8203) [#8203](https://www.github.com/googleapis/nodejs-bigquery/issues/8203) [#660](https://www.github.com/googleapis/nodejs-bigquery/issues/660) [#660](https://www.github.com/googleapis/nodejs-bigquery/issues/660) [#8203](https://www.github.com/googleapis/nodejs-bigquery/issues/8203) [#8203](https://www.github.com/googleapis/nodejs-bigquery/issues/8203) [#8203](https://www.github.com/googleapis/nodejs-bigquery/issues/8203) [#8203](https://www.github.com/googleapis/nodejs-bigquery/issues/8203) [#8203](https://www.github.com/googleapis/nodejs-bigquery/issues/8203) [#8203](https://www.github.com/googleapis/nodejs-bigquery/issues/8203) [#8203](https://www.github.com/googleapis/nodejs-bigquery/issues/8203) [#8203](https://www.github.com/googleapis/nodejs-bigquery/issues/8203) [#8203](https://www.github.com/googleapis/nodejs-bigquery/issues/8203) [#8203](https://www.github.com/googleapis/nodejs-bigquery/issues/8203) [#8203](https://www.github.com/googleapis/nodejs-bigquery/issues/8203) [#8203](https://www.github.com/googleapis/nodejs-bigquery/issues/8203) [#665](https://www.github.com/googleapis/nodejs-bigquery/issues/665) [#665](https://www.github.com/googleapis/nodejs-bigquery/issues/665) [#454](https://www.github.com/googleapis/nodejs-bigquery/issues/454) [#454](https://www.github.com/googleapis/nodejs-bigquery/issues/454) [#456](https://www.github.com/googleapis/nodejs-bigquery/issues/456) [#456](https://www.github.com/googleapis/nodejs-bigquery/issues/456) [#463](https://www.github.com/googleapis/nodejs-bigquery/issues/463) [#463](https://www.github.com/googleapis/nodejs-bigquery/issues/463) -* **userAgent:** allow for optional user agent to be provided ([#671](https://www.github.com/googleapis/nodejs-bigquery/issues/671)) ([25aeca8](https://www.github.com/googleapis/nodejs-bigquery/commit/25aeca8f6c136d03d6029bda54e7cdab98af80ca)) - - -### Bug Fixes - -* add types for hasDrift and seasonalPeriods ([#680](https://www.github.com/googleapis/nodejs-bigquery/issues/680)) ([d6c9566](https://www.github.com/googleapis/nodejs-bigquery/commit/d6c95667577df2d32bff6f9d07117d011379ecd2)) -* **deps:** update dependency @google-cloud/paginator to v3 ([#658](https://www.github.com/googleapis/nodejs-bigquery/issues/658)) ([a09c493](https://www.github.com/googleapis/nodejs-bigquery/commit/a09c493f1f94e4a0272c17cb62009c92945c20d0)) -* apache license URL ([#468](https://www.github.com/googleapis/nodejs-bigquery/issues/468)) ([#669](https://www.github.com/googleapis/nodejs-bigquery/issues/669)) ([d3ed602](https://www.github.com/googleapis/nodejs-bigquery/commit/d3ed602e47ba005ca4c9d2f382867d19336f239d)) -* drop dependency on string-format-obj ([#698](https://www.github.com/googleapis/nodejs-bigquery/issues/698)) ([cf8f58f](https://www.github.com/googleapis/nodejs-bigquery/commit/cf8f58f851a8e32a4857f35c05a081cd031be124)) -* load job to a different project ID ([#748](https://www.github.com/googleapis/nodejs-bigquery/issues/748)) ([bfb74ad](https://www.github.com/googleapis/nodejs-bigquery/commit/bfb74add1850925837fa1737fded8642c80f0356)) -* **docs:** fix link for job configuration load ([#678](https://www.github.com/googleapis/nodejs-bigquery/issues/678)) ([ea3d7af](https://www.github.com/googleapis/nodejs-bigquery/commit/ea3d7afe18f8f22c6541043c92c26625ae9e0e85)) -* selectedFields on getRows not working correctly ([#712](https://www.github.com/googleapis/nodejs-bigquery/issues/712)) ([13b7e39](https://www.github.com/googleapis/nodejs-bigquery/commit/13b7e391cb3cfd87caec094f058143842cb39306)) -* **deps:** update dependency @google-cloud/promisify to v2 ([#657](https://www.github.com/googleapis/nodejs-bigquery/issues/657)) ([5d8112c](https://www.github.com/googleapis/nodejs-bigquery/commit/5d8112c2cd3994d1d32102d63a7a90fb9478223c)) -* **deps:** update dependency @google-cloud/storage to v5 ([#700](https://www.github.com/googleapis/nodejs-bigquery/issues/700)) ([a2e34ef](https://www.github.com/googleapis/nodejs-bigquery/commit/a2e34ef32a79c0dccaa11954ca2fa3f90795c63a)) -* **deps:** update dependency google-auth-library to v6 ([#660](https://www.github.com/googleapis/nodejs-bigquery/issues/660)) ([3ea642e](https://www.github.com/googleapis/nodejs-bigquery/commit/3ea642ec9f1c471bff0d5d095fcc3e1b3813e52a)) -* **docs:** configuration.copy link ([#709](https://www.github.com/googleapis/nodejs-bigquery/issues/709)) ([4a81b1e](https://www.github.com/googleapis/nodejs-bigquery/commit/4a81b1e25c9b8f09eca28142bd54f6ca42b1f866)) -* **docs:** correct createTablePartitioned sample argument ([#701](https://www.github.com/googleapis/nodejs-bigquery/issues/701)) ([9a7520e](https://www.github.com/googleapis/nodejs-bigquery/commit/9a7520e62ebe7f561190de0a3c1080bbc07567ba)) -* **table:** add retries for insert partial failures ([#589](https://www.github.com/googleapis/nodejs-bigquery/issues/589)) ([b8639c2](https://www.github.com/googleapis/nodejs-bigquery/commit/b8639c27009aaa4eb03bbd9ebf0fa1463e2bcd2b)), closes [#655](https://www.github.com/googleapis/nodejs-bigquery/issues/655) -* **types:** drop changes for drift and seasonal ([#681](https://www.github.com/googleapis/nodejs-bigquery/issues/681)) ([679d990](https://www.github.com/googleapis/nodejs-bigquery/commit/679d990f391433fbef180a4bbba2e32442e358da)) - - -### Code Refactoring - -* don't return Stream from createLoadJob ([#647](https://www.github.com/googleapis/nodejs-bigquery/issues/647)) ([8e26fb5](https://www.github.com/googleapis/nodejs-bigquery/commit/8e26fb561a9595e0f05e0506cebb71aa1eaba432)), closes [#640](https://www.github.com/googleapis/nodejs-bigquery/issues/640) [#640](https://www.github.com/googleapis/nodejs-bigquery/issues/640) - -## [4.7.0](https://www.github.com/googleapis/nodejs-bigquery/compare/v4.6.1...v4.7.0) (2020-01-30) - - -### Features - -* add support for scripting/routines ([#580](https://www.github.com/googleapis/nodejs-bigquery/issues/580)) ([63d7e24](https://www.github.com/googleapis/nodejs-bigquery/commit/63d7e24bd9347f7b5202127afc1e92be34819a77)) -* **params:** adds optional param types ([#599](https://www.github.com/googleapis/nodejs-bigquery/issues/599)) ([008946a](https://www.github.com/googleapis/nodejs-bigquery/commit/008946a05b8d1d54add31a25cc52aba2a61448a8)) - -### [4.6.1](https://www.github.com/googleapis/nodejs-bigquery/compare/v4.6.0...v4.6.1) (2020-01-13) - - -### Bug Fixes - -* don't modify the constructor options ([#607](https://www.github.com/googleapis/nodejs-bigquery/issues/607)) ([7df0799](https://www.github.com/googleapis/nodejs-bigquery/commit/7df0799e09e2a3a44f9ac4a04d157b7c85816fbe)) - -## [4.6.0](https://www.github.com/googleapis/nodejs-bigquery/compare/v4.5.0...v4.6.0) (2020-01-05) - - -### Features - -* types to support slot ms and read masks ([#592](https://www.github.com/googleapis/nodejs-bigquery/issues/592)) ([84d1c82](https://www.github.com/googleapis/nodejs-bigquery/commit/84d1c82981a2f3444836dde5d8fd00a23ee1cf94)) - -## [4.5.0](https://www.github.com/googleapis/nodejs-bigquery/compare/v4.4.0...v4.5.0) (2019-12-05) - - -### Features - -* **table:** allow opting out of default insert id ([#582](https://www.github.com/googleapis/nodejs-bigquery/issues/582)) ([6bf2dbd](https://www.github.com/googleapis/nodejs-bigquery/commit/6bf2dbd1ec09689338ee21b1d8666a4e8b2a7367)) -* adds policyTags parameter removes IGetParams Interface ([#576](https://www.github.com/googleapis/nodejs-bigquery/issues/576)) ([8cf8f1d](https://www.github.com/googleapis/nodejs-bigquery/commit/8cf8f1d15cd53406ac911fef512f69132d823873)) - - -### Bug Fixes - -* **deps:** TypeScript 3.7.0 causes breaking change in typings ([#586](https://www.github.com/googleapis/nodejs-bigquery/issues/586)) ([04f8cba](https://www.github.com/googleapis/nodejs-bigquery/commit/04f8cba7c86675fd7e12bb5ac4235f56745c033f)) -* **deps:** update dependency yargs to v15 ([#579](https://www.github.com/googleapis/nodejs-bigquery/issues/579)) ([92119e3](https://www.github.com/googleapis/nodejs-bigquery/commit/92119e3b23874263d9529283194a149b358b7c9f)) -* **docs:** snippets are now replaced in jsdoc comments ([#573](https://www.github.com/googleapis/nodejs-bigquery/issues/573)) ([a0d3538](https://www.github.com/googleapis/nodejs-bigquery/commit/a0d3538ad83b356918cabbd2bbfaf405e0a8272d)) - -## [4.4.0](https://www.github.com/googleapis/nodejs-bigquery/compare/v4.3.0...v4.4.0) (2019-11-08) - - -### Features - -* **table:** typescript support for range partitioning ([#559](https://www.github.com/googleapis/nodejs-bigquery/issues/559)) ([a77c28a](https://www.github.com/googleapis/nodejs-bigquery/commit/a77c28a3e8b84760d67c4381008424103dcd1db7)) -* typescript support for data split result ([#570](https://www.github.com/googleapis/nodejs-bigquery/issues/570)) ([2236545](https://www.github.com/googleapis/nodejs-bigquery/commit/223654555ed9113683781883c65ffa7ee2f1ea5b)) - - -### Bug Fixes - -* **deps:** update dependency @google-cloud/storage to v4 ([#561](https://www.github.com/googleapis/nodejs-bigquery/issues/561)) ([0ec07f9](https://www.github.com/googleapis/nodejs-bigquery/commit/0ec07f994e0e9567025d1c96ad65f9a057a65344)) - -## [4.3.0](https://www.github.com/googleapis/nodejs-bigquery/compare/v4.2.1...v4.3.0) (2019-10-09) - - -### Features - -* **TypeScript:** introduce IArimaResult interface ([4cd3a71](https://www.github.com/googleapis/nodejs-bigquery/commit/4cd3a71)) - -### [4.2.1](https://www.github.com/googleapis/nodejs-bigquery/compare/v4.2.0...v4.2.1) (2019-09-16) - - -### Bug Fixes - -* **deps:** update dependency discovery-tsd to ^0.2.0 ([#540](https://www.github.com/googleapis/nodejs-bigquery/issues/540)) ([651e870](https://www.github.com/googleapis/nodejs-bigquery/commit/651e870)) - -## [4.2.0](https://www.github.com/googleapis/nodejs-bigquery/compare/v4.1.8...v4.2.0) (2019-09-07) - - -### Bug Fixes - -* **deps:** update dependency yargs to v14 ([#520](https://www.github.com/googleapis/nodejs-bigquery/issues/520)) ([9dd59a6](https://www.github.com/googleapis/nodejs-bigquery/commit/9dd59a6)) -* **types:** update to the latest discovery types ([#518](https://www.github.com/googleapis/nodejs-bigquery/issues/518)) ([dccf2cf](https://www.github.com/googleapis/nodejs-bigquery/commit/dccf2cf)) -* update root url to `bigquery.googleapis.com` ([#531](https://www.github.com/googleapis/nodejs-bigquery/issues/531)) ([277940f](https://www.github.com/googleapis/nodejs-bigquery/commit/277940f)) - - -### Features - -* **typescript:** generate latest request/response types ([#528](https://www.github.com/googleapis/nodejs-bigquery/issues/528)) ([f8d2f4d](https://www.github.com/googleapis/nodejs-bigquery/commit/f8d2f4d)) - -### [4.1.8](https://www.github.com/googleapis/nodejs-bigquery/compare/v4.1.7...v4.1.8) (2019-08-02) - - -### Bug Fixes - -* allow calls with no request, add JSON proto ([885a98a](https://www.github.com/googleapis/nodejs-bigquery/commit/885a98a)) - -### [4.1.7](https://www.github.com/googleapis/nodejs-bigquery/compare/v4.1.6...v4.1.7) (2019-08-01) - - -### Bug Fixes - -* **docs:** duplicate readme sample names ([#512](https://www.github.com/googleapis/nodejs-bigquery/issues/512)) ([56040f5](https://www.github.com/googleapis/nodejs-bigquery/commit/56040f5)) -* **docs:** fix formatting of the docs ([#513](https://www.github.com/googleapis/nodejs-bigquery/issues/513)) ([d823014](https://www.github.com/googleapis/nodejs-bigquery/commit/d823014)) - -### [4.1.6](https://www.github.com/googleapis/nodejs-bigquery/compare/v4.1.5...v4.1.6) (2019-07-29) - - -### Bug Fixes - -* **deps:** update dependency @google-cloud/storage to v3 ([#508](https://www.github.com/googleapis/nodejs-bigquery/issues/508)) ([bdca2ea](https://www.github.com/googleapis/nodejs-bigquery/commit/bdca2ea)) - -### [4.1.5](https://www.github.com/googleapis/nodejs-bigquery/compare/v4.1.4...v4.1.5) (2019-07-17) - - -### Performance Improvements - -* pull in paginator refactor ([#499](https://www.github.com/googleapis/nodejs-bigquery/issues/499)) ([8daafcc](https://www.github.com/googleapis/nodejs-bigquery/commit/8daafcc)) - -### [4.1.4](https://www.github.com/googleapis/nodejs-bigquery/compare/v4.1.3...v4.1.4) (2019-07-02) - - -### Bug Fixes - -* **docs:** link to reference docs section on googleapis.dev ([#486](https://www.github.com/googleapis/nodejs-bigquery/issues/486)) ([a76cc5b](https://www.github.com/googleapis/nodejs-bigquery/commit/a76cc5b)) - -### [4.1.3](https://www.github.com/googleapis/nodejs-bigquery/compare/v4.1.2...v4.1.3) (2019-06-17) - - -### Bug Fixes - -* **docs:** move to new client docs URL ([#479](https://www.github.com/googleapis/nodejs-bigquery/issues/479)) ([7db57d2](https://www.github.com/googleapis/nodejs-bigquery/commit/7db57d2)) - -### [4.1.2](https://www.github.com/googleapis/nodejs-bigquery/compare/v4.1.1...v4.1.2) (2019-06-11) - - -### Bug Fixes - -* link to new googleapis.dev docs ([#477](https://www.github.com/googleapis/nodejs-bigquery/issues/477)) ([9dfcda0](https://www.github.com/googleapis/nodejs-bigquery/commit/9dfcda0)) - -### [4.1.1](https://www.github.com/googleapis/nodejs-bigquery/compare/v4.1.0...v4.1.1) (2019-05-30) - - -### Bug Fixes - -* **job:** remove job instance from request params ([#465](https://www.github.com/googleapis/nodejs-bigquery/issues/465)) ([27f080d](https://www.github.com/googleapis/nodejs-bigquery/commit/27f080d)) -* correct name in .repo-metadata.json ([#467](https://www.github.com/googleapis/nodejs-bigquery/issues/467)) ([6add722](https://www.github.com/googleapis/nodejs-bigquery/commit/6add722)) - -## [4.1.0](https://www.github.com/googleapis/nodejs-bigquery/compare/v4.0.0...v4.1.0) (2019-05-29) - - -### Features - -* **model:** dataset model support ([#449](https://www.github.com/googleapis/nodejs-bigquery/issues/449)) ([3ad884f](https://www.github.com/googleapis/nodejs-bigquery/commit/3ad884f)) -* accept apiEndpoint override ([#455](https://www.github.com/googleapis/nodejs-bigquery/issues/455)) ([1eda8ff](https://www.github.com/googleapis/nodejs-bigquery/commit/1eda8ff)) - -## [4.0.0](https://www.github.com/googleapis/nodejs-bigquery/compare/v3.0.0...v4.0.0) (2019-05-20) - - -### ⚠ BREAKING CHANGES - -* **deps:** this will ship async/await with the generated code. -* upgrade engines field to >=8.10.0 (#424) -* This removes the `autoCreate` option which may result in a breaking change for TypeScript users. - -### Bug Fixes - -* **deps:** update dependency @google-cloud/common to ^0.32.0 ([8e28b62](https://www.github.com/googleapis/nodejs-bigquery/commit/8e28b62)), closes [#8203](https://www.github.com/googleapis/nodejs-bigquery/issues/8203) -* **deps:** update dependency @google-cloud/common to v1 ([#434](https://www.github.com/googleapis/nodejs-bigquery/issues/434)) ([0e4aeef](https://www.github.com/googleapis/nodejs-bigquery/commit/0e4aeef)) -* **deps:** update dependency @google-cloud/paginator to v1 ([#428](https://www.github.com/googleapis/nodejs-bigquery/issues/428)) ([5d925af](https://www.github.com/googleapis/nodejs-bigquery/commit/5d925af)) -* **deps:** update dependency @google-cloud/promisify to v1 ([#427](https://www.github.com/googleapis/nodejs-bigquery/issues/427)) ([fdeb862](https://www.github.com/googleapis/nodejs-bigquery/commit/fdeb862)) -* **deps:** update dependency arrify to v2 ([de0f687](https://www.github.com/googleapis/nodejs-bigquery/commit/de0f687)) -* **table:** allow for TableSchema to be used ([#438](https://www.github.com/googleapis/nodejs-bigquery/issues/438)) ([7995be0](https://www.github.com/googleapis/nodejs-bigquery/commit/7995be0)) -* **types:** correct interface ([#407](https://www.github.com/googleapis/nodejs-bigquery/issues/407)) ([da5ed01](https://www.github.com/googleapis/nodejs-bigquery/commit/da5ed01)) -* correctly encode nested struct/array params ([#439](https://www.github.com/googleapis/nodejs-bigquery/issues/439)) ([d7006bd](https://www.github.com/googleapis/nodejs-bigquery/commit/d7006bd)) -* remove teeny-request as a direct dependency ([#412](https://www.github.com/googleapis/nodejs-bigquery/issues/412)) ([c6de54a](https://www.github.com/googleapis/nodejs-bigquery/commit/c6de54a)) - - -### Build System - -* upgrade engines field to >=8.10.0 ([#424](https://www.github.com/googleapis/nodejs-bigquery/issues/424)) ([cea017e](https://www.github.com/googleapis/nodejs-bigquery/commit/cea017e)) - - -### Code Refactoring - -* drop autoCreate in table.insert in favor of schema ([#421](https://www.github.com/googleapis/nodejs-bigquery/issues/421)) ([b59cd7f](https://www.github.com/googleapis/nodejs-bigquery/commit/b59cd7f)) - - -### Miscellaneous Chores - -* **deps:** update dependency gts to v1 ([#419](https://www.github.com/googleapis/nodejs-bigquery/issues/419)) ([7b0e76a](https://www.github.com/googleapis/nodejs-bigquery/commit/7b0e76a)) - -## v3.0.0 - -04-02-2019 10:02 PDT - - -### Implementation Changes - -- fix(job): check for `errorResult` when polling jobs ([#387](https://github.com/googleapis/nodejs-bigquery/pull/387)) - - -**BREAKING CHANGE** Previously when polling a BigQuery Job the Node.js client would check for the presence of the `errors` field when trying to determine if the job suceeded. We have since changed this logic to instead check for the `errorResult` field. This is significant because the `errors` array may now be present for passing jobs, however these errors should serve more as warnings. If your application logic depended on this functionality you'll need to manually check for `errors` now. - -```js -await job.promise(); - -if (job.metadata.status.errors) { - // optionally handle warnings -} -``` - -- fix(ts): provide complete and correct types ([#385](https://github.com/googleapis/nodejs-bigquery/pull/385)) - -**BREAKING CHANGE** A number of the BigQuery TypeScript types were incomplete, this change provides more complete types for the entire client. - -### New Features -- feat(geo): add support for geography ([#397](https://github.com/googleapis/nodejs-bigquery/pull/397)) - -### Bug Fixes -- fix: correctly encode nested custom date/time parameters ([#393](https://github.com/googleapis/nodejs-bigquery/pull/393)) - -### Dependencies -- chore(deps): update dependency tmp to v0.1.0 ([#398](https://github.com/googleapis/nodejs-bigquery/pull/398)) -- chore(deps): update dependency @types/tmp to v0.1.0 -- chore(deps): update dependency typescript to ~3.4.0 - -### Documentation -- docs(samples): adds queryParamsNamed and queryParamsPositional ([#381](https://github.com/googleapis/nodejs-bigquery/pull/381)) -- refactor(samples): split query and table samples into separate files ([#384](https://github.com/googleapis/nodejs-bigquery/pull/384)) -- refactor(samples): fix loadJSONFromGCSTruncate wrong function ([#386](https://github.com/googleapis/nodejs-bigquery/pull/386)) -- refactor(samples): add main() function wrappers to samples - -### Internal / Testing Changes -- build: use per-repo npm publish token ([#382](https://github.com/googleapis/nodejs-bigquery/pull/382)) -- chore: publish to npm using wombat ([#390](https://github.com/googleapis/nodejs-bigquery/pull/390)) -- fix(tests): update TIMESTAMP param tests ([#394](https://github.com/googleapis/nodejs-bigquery/pull/394)) - -## v2.1.0 - -03-12-2019 15:30 PDT - -### New Features -- feat: throw errors for missing resource ids ([#342](https://github.com/googleapis/nodejs-bigquery/pull/342)) - -### Bug Fixes -- fix(types): move JobLoadMetadata writeDisposition ([#365](https://github.com/googleapis/nodejs-bigquery/pull/365)) -- fix(types): Allow views to be configured using an object or a string ([#333](https://github.com/googleapis/nodejs-bigquery/pull/333)) -- fix(types): add missing parameters (selectedFields, startIndex) in table.getRows() options ([#331](https://github.com/googleapis/nodejs-bigquery/pull/331)) - -### Dependencies -- fix(deps): update dependency @google-cloud/paginator to ^0.2.0 ([#373](https://github.com/googleapis/nodejs-bigquery/pull/373)) -- fix(deps): update dependency @google-cloud/common to ^0.31.0 ([#371](https://github.com/googleapis/nodejs-bigquery/pull/371)) -- fix(deps): update dependency @google-cloud/promisify to ^0.4.0 ([#356](https://github.com/googleapis/nodejs-bigquery/pull/356)) -- fix(deps): update dependency duplexify to v4 ([#343](https://github.com/googleapis/nodejs-bigquery/pull/343)) - -### Documentation -- docs(table): link to upstream limit docs ([#376](https://github.com/googleapis/nodejs-bigquery/pull/376)) -- docs: update samples and docs to match rubric ([#374](https://github.com/googleapis/nodejs-bigquery/pull/374)) -- docs: update links in contrib guide ([#358](https://github.com/googleapis/nodejs-bigquery/pull/358)) -- docs: update contributing path in README ([#350](https://github.com/googleapis/nodejs-bigquery/pull/350)) -- docs: move CONTRIBUTING.md to root ([#349](https://github.com/googleapis/nodejs-bigquery/pull/349)) -- docs: add lint/fix example to contributing guide ([#344](https://github.com/googleapis/nodejs-bigquery/pull/344)) - -### Internal / Testing Changes -- testing: remove nextQuery assertion ([#377](https://github.com/googleapis/nodejs-bigquery/pull/377)) -- refactor(samples): split samples into their own files ([#368](https://github.com/googleapis/nodejs-bigquery/pull/368)) -- build: Add docuploader credentials to node publish jobs ([#370](https://github.com/googleapis/nodejs-bigquery/pull/370)) -- build: use node10 to run samples-test, system-test etc ([#369](https://github.com/googleapis/nodejs-bigquery/pull/369)) -- build: system-tests only delete stale resources -- chore: make test prefix unique per run ([#363](https://github.com/googleapis/nodejs-bigquery/pull/363)) -- chore(deps): update dependency mocha to v6 ([#360](https://github.com/googleapis/nodejs-bigquery/pull/360)) -- test: skip installation test if GOOGLE_CLOUD_TESTS_IN_VPCSC is passed ([#345](https://github.com/googleapis/nodejs-bigquery/pull/345)) -- build: use linkinator for docs test ([#354](https://github.com/googleapis/nodejs-bigquery/pull/354)) -- fix(deps): update dependency yargs to v13 ([#353](https://github.com/googleapis/nodejs-bigquery/pull/353)) -- chore(deps): update dependency @types/tmp to v0.0.34 ([#355](https://github.com/googleapis/nodejs-bigquery/pull/355)) -- build: create docs test npm scripts ([#352](https://github.com/googleapis/nodejs-bigquery/pull/352)) -- build: test using @grpc/grpc-js in CI ([#351](https://github.com/googleapis/nodejs-bigquery/pull/351)) -- build: check for 404s in the docs ([#337](https://github.com/googleapis/nodejs-bigquery/pull/337)) -- build: output benchmark data in csv format ([#339](https://github.com/googleapis/nodejs-bigquery/pull/339)) -- chore(deps): update dependency eslint-config-prettier to v4 ([#338](https://github.com/googleapis/nodejs-bigquery/pull/338)) - -## v2.0.6 - -01-08-2019 13:52 PST - -### Fixes -- fix: correctly iterate query results within stream ([#323](https://github.com/googleapis/nodejs-bigquery/pull/323)) -- fix: remove Job.setMetadata method ([#319](https://github.com/googleapis/nodejs-bigquery/pull/319)) -- fix(deps): update dependency @google-cloud/common to ^0.29.0 ([#314](https://github.com/googleapis/nodejs-bigquery/pull/314)) - -### Documentation -- fix(docs): package exports an object, not the BigQuery ctor ([#322](https://github.com/googleapis/nodejs-bigquery/pull/322)) -- docs: regenerate README.md ([#321](https://github.com/googleapis/nodejs-bigquery/pull/321)) - -### Internal / Testing Changes -- refactor: modernize the sample tests ([#318](https://github.com/googleapis/nodejs-bigquery/pull/318)) - -## v2.0.5 - -12-21-2018 13:19 PST - -### Bug fixes -- fix: createQueryJob should accept pageToken ([#313](https://github.com/googleapis/nodejs-bigquery/pull/313)) - -### Internal / Testing Changes -- fix(test): skip flaky invalid etag test ([#317](https://github.com/googleapis/nodejs-bigquery/pull/317)) -- fix(test): labels: should be an object, not arry ([#315](https://github.com/googleapis/nodejs-bigquery/pull/315)) - -## v2.0.4 - -12-19-2018 14:35 PST - -### Implementation Changes -- fix(ts): explicit usage of Duplex ([#300](https://github.com/googleapis/nodejs-bigquery/pull/300)) -- fix: fix typescript compilation ([#295](https://github.com/googleapis/nodejs-bigquery/pull/295)) - -### Dependencies -- fix(deps): update dependency @google-cloud/common to ^0.28.0 ([#308](https://github.com/googleapis/nodejs-bigquery/pull/308)) -- chore(deps): update dependency @types/sinon to v7 ([#307](https://github.com/googleapis/nodejs-bigquery/pull/307)) -- fix(deps): update dependency @google-cloud/common to ^0.27.0 ([#274](https://github.com/googleapis/nodejs-bigquery/pull/274)) - -### Documentation -- fix(docs): move doc comments so stream methods show up in docs correctly ([#309](https://github.com/googleapis/nodejs-bigquery/pull/309)) - -### Internal / Testing Changes -- chore(build): inject yoshi automation key ([#306](https://github.com/googleapis/nodejs-bigquery/pull/306)) -- chore: update nyc and eslint configs ([#305](https://github.com/googleapis/nodejs-bigquery/pull/305)) -- chore: fix publish.sh permission +x ([#302](https://github.com/googleapis/nodejs-bigquery/pull/302)) -- fix(build): fix Kokoro release script ([#301](https://github.com/googleapis/nodejs-bigquery/pull/301)) -- build: add Kokoro configs for autorelease ([#298](https://github.com/googleapis/nodejs-bigquery/pull/298)) - -## v2.0.3 - -12-06-2018 17:10 PST - -### Documentation -- fix(docs): move comments above last overload ([#292](https://github.com/googleapis/nodejs-bigquery/pull/292)) -- fix(docs): internal links ([#293](https://github.com/googleapis/nodejs-bigquery/pull/293)) -- fix(docs): change source location to ./build for ts project ([#291](https://github.com/googleapis/nodejs-bigquery/pull/291)) -- docs: fix region tag placement typo ([#286](https://github.com/googleapis/nodejs-bigquery/pull/286)) - -### Internal / Testing Changes -- chore: always nyc report before calling codecov ([#290](https://github.com/googleapis/nodejs-bigquery/pull/290)) -- chore: nyc ignore build/test by default ([#289](https://github.com/googleapis/nodejs-bigquery/pull/289)) - -## v2.0.2 - -12-04-2018 14:04 PST - -### Implementation Changes - -*TypeScript related changes:* -- fix: Changing import of Big from big.js so it doesn't use default ([#270](https://github.com/googleapis/nodejs-bigquery/pull/270)) -- refactor(ts): enable noImplicitAny ([#259](https://github.com/googleapis/nodejs-bigquery/pull/259)) -- refactor(ts): add @types/proxyquire ([#256](https://github.com/googleapis/nodejs-bigquery/pull/256)) -- refactor(ts): refactor system tests to drop unused deps ([#254](https://github.com/googleapis/nodejs-bigquery/pull/254)) -- fix(ts): CopyTableMetadata type can’t receive optional values -- refactor(ts): complete type annotations for src ([#250](https://github.com/googleapis/nodejs-bigquery/pull/250)) -- refactor(ts): add more types ([#246](https://github.com/googleapis/nodejs-bigquery/pull/246)) - -### Dependencies -- fix: Pin @types/sinon to last compatible version ([#267](https://github.com/googleapis/nodejs-bigquery/pull/267)) -- chore(deps): update dependency typescript to ~3.2.0 ([#276](https://github.com/googleapis/nodejs-bigquery/pull/276)) -- chore(deps): update dependency gts to ^0.9.0 ([#263](https://github.com/googleapis/nodejs-bigquery/pull/263)) -- chore(deps): update dependency @google-cloud/nodejs-repo-tools to v3 ([#261](https://github.com/googleapis/nodejs-bigquery/pull/261)) -- chore(deps): update dependency @types/is to v0.0.21 ([#258](https://github.com/googleapis/nodejs-bigquery/pull/258)) - -### Documentation -- chore: update license file ([#283](https://github.com/googleapis/nodejs-bigquery/pull/283)) -- docs: Improve timestamp documentation. ([#280](https://github.com/googleapis/nodejs-bigquery/pull/280)) -- docs: Improve documentationfor load method ([#281](https://github.com/googleapis/nodejs-bigquery/pull/281)) -- docs: update readme badges ([#279](https://github.com/googleapis/nodejs-bigquery/pull/279)) -- refactor(samples): replace promise with async await ([#268](https://github.com/googleapis/nodejs-bigquery/pull/268)) - -### Internal / Testing Changes -- fix(build): fix system key decryption ([#277](https://github.com/googleapis/nodejs-bigquery/pull/277)) -- refactor(tests): convert samples tests from ava to mocha ([#248](https://github.com/googleapis/nodejs-bigquery/pull/248)) -- chore: add synth.metadata -- chore: update eslintignore config ([#262](https://github.com/googleapis/nodejs-bigquery/pull/262)) -- chore: drop contributors from multiple places ([#260](https://github.com/googleapis/nodejs-bigquery/pull/260)) -- chore: use latest npm on Windows ([#257](https://github.com/googleapis/nodejs-bigquery/pull/257)) -- chore: update CircleCI config ([#249](https://github.com/googleapis/nodejs-bigquery/pull/249)) - -## v2.0.1 - -### Bug fixes -- fix: use teeny-request for HTTP requests ([#244](https://github.com/googleapis/nodejs-bigquery/pull/244)) - -### Internal / Testing Changes -- chore: include build in eslintignore ([#240](https://github.com/googleapis/nodejs-bigquery/pull/240)) -- refactor(ts): enable noImplicitThis in the tsconfig ([#237](https://github.com/googleapis/nodejs-bigquery/pull/237)) -- refactor(ts): improve typing ([#241](https://github.com/googleapis/nodejs-bigquery/pull/241)) - -## v2.0.0 - -### Implementation Changes -*This release drops support for Node.js 4.x and 9.x. Future releases might not be compatible with your application if they are still on these non-LTS version.* -*BREAKING CHANGE* This library is now compatible with es module import syntax - - -#### Old Code -```js -const BigQuery = require('@google-cloud/bigquery')(); -// or... -const BigQuery = require('@google-cloud/bigquery'); -const bq = new BigQuery(); -``` - -#### New Code -```js -const {BigQuery} = require('@google-cloud/bigquery'); -const bq = new BigQuery(); -``` - -- refactor(typescript): convert index to es module ([#227](https://github.com/googleapis/nodejs-bigquery/pull/227) -- fix: drop support for node.js 4.x and 9.x ([#142](https://github.com/googleapis/nodejs-bigquery/pull/142)) -- wait for job result before emitting complete. ([#85](https://github.com/googleapis/nodejs-bigquery/pull/85)) -- fix: Update table.js ([#78](https://github.com/googleapis/nodejs-bigquery/pull/78)) -- feat: convert to TypeScript ([#157](https://github.com/googleapis/nodejs-bigquery/pull/157)) -- Correctly pass `autoPaginate: false` to query methods. ([#121](https://github.com/googleapis/nodejs-bigquery/pull/121)) -- chore: use more arrow functions ([#172](https://github.com/googleapis/nodejs-bigquery/pull/172)) -- chore: convert a few files to es classes ([#170](https://github.com/googleapis/nodejs-bigquery/pull/170)) - -### New Features -BigQuery ORC: -- BigQuery Orc & Parquet Samples ([#195](https://github.com/googleapis/nodejs-bigquery/pull/195)) -- Support ORC files. ([#190](https://github.com/googleapis/nodejs-bigquery/pull/190)) - -### Dependencies -- chore(deps): update dependency eslint-plugin-node to v8 ([#234](https://github.com/googleapis/nodejs-bigquery/pull/234)) -- chore(deps): lock file maintenance ([#143](https://github.com/googleapis/nodejs-bigquery/pull/143)) -- chore(deps): update dependency sinon to v7 ([#212](https://github.com/googleapis/nodejs-bigquery/pull/212)) -- chore(deps): update dependency eslint-plugin-prettier to v3 ([#207](https://github.com/googleapis/nodejs-bigquery/pull/207)) -- chore(deps): update dependency typescript to ~3.1.0 ([#205](https://github.com/googleapis/nodejs-bigquery/pull/205)) -- chore: upgrade to the latest common ([#159](https://github.com/googleapis/nodejs-bigquery/pull/159)) -- chore(package): update to the latest @google-cloud/common ([#146](https://github.com/googleapis/nodejs-bigquery/pull/146)) -- fix(deps): update dependency @google-cloud/common to ^0.25.0 ([#197](https://github.com/googleapis/nodejs-bigquery/pull/197)) -- fix(deps): update dependency @google-cloud/common to ^0.24.0 ([#187](https://github.com/googleapis/nodejs-bigquery/pull/187)) -- fix(deps): update dependency @google-cloud/storage to v2: edited ([#181](https://github.com/googleapis/nodejs-bigquery/pull/181)) -- chore(deps): update dependency nyc to v13 ([#178](https://github.com/googleapis/nodejs-bigquery/pull/178)) -- chore(deps): update dependency eslint-config-prettier to v3 ([#169](https://github.com/googleapis/nodejs-bigquery/pull/169)) -- chore(deps): lock file maintenance ([#160](https://github.com/googleapis/nodejs-bigquery/pull/160)) -- chore(deps): lock file maintenance ([#153](https://github.com/googleapis/nodejs-bigquery/pull/153)) -- chore(deps): lock file maintenance ([#150](https://github.com/googleapis/nodejs-bigquery/pull/150)) -- chore(deps): update dependency eslint-plugin-node to v7 ([#148](https://github.com/googleapis/nodejs-bigquery/pull/148)) -- chore(deps): lock file maintenance ([#147](https://github.com/googleapis/nodejs-bigquery/pull/147)) -- chore(deps): lock file maintenance ([#145](https://github.com/googleapis/nodejs-bigquery/pull/145)) -- chore(deps): lock file maintenance ([#144](https://github.com/googleapis/nodejs-bigquery/pull/144)) -- chore(deps): lock file maintenance ([#141](https://github.com/googleapis/nodejs-bigquery/pull/141)) -- chore(deps): lock file maintenance ([#140](https://github.com/googleapis/nodejs-bigquery/pull/140)) -- chore(deps): lock file maintenance ([#139](https://github.com/googleapis/nodejs-bigquery/pull/139)) -- chore(deps): update dependency proxyquire to v2 ([#135](https://github.com/googleapis/nodejs-bigquery/pull/135)) -- fix(deps): update dependency yargs to v12 ([#138](https://github.com/googleapis/nodejs-bigquery/pull/138)) -- fix(deps): update dependency yargs to v11 ([#137](https://github.com/googleapis/nodejs-bigquery/pull/137)) -- chore(deps): update dependency sinon to v6 ([#136](https://github.com/googleapis/nodejs-bigquery/pull/136)) -- chore(deps): update dependency nyc to v12 ([#134](https://github.com/googleapis/nodejs-bigquery/pull/134)) -- chore(deps): update dependency @google-cloud/nodejs-repo-tools to v2.3.0 ([#128](https://github.com/googleapis/nodejs-bigquery/pull/128)) -- chore(deps): update dependency uuid to v3.3.0 ([#132](https://github.com/googleapis/nodejs-bigquery/pull/132)) -- chore(deps): update dependency ava to v0.25.0 ([#129](https://github.com/googleapis/nodejs-bigquery/pull/129)) -- chore(deps): update dependency sinon to v4.5.0 ([#131](https://github.com/googleapis/nodejs-bigquery/pull/131)) - -### Documentation -- docs: Correct table.load().format options. ([#206](https://github.com/googleapis/nodejs-bigquery/pull/206)) -- fix: (docs): Correct query syntax. ([#180](https://github.com/googleapis/nodejs-bigquery/pull/180)) -- docs: Fix create job links ([#164](https://github.com/googleapis/nodejs-bigquery/pull/164)) -- fix(samples): Refactor query samples to follow python canonical and add disable cache sample ([#215](https://github.com/googleapis/nodejs-bigquery/pull/215)) -- chore(samples): Remove unused BigQuery samples and fix comment typos ([#201](https://github.com/googleapis/nodejs-bigquery/pull/201)) -- Use async/await in samples ([#193](https://github.com/googleapis/nodejs-bigquery/pull/193)) -- remove asserts in samples ([#182](https://github.com/googleapis/nodejs-bigquery/pull/182)) -- fix: fix the samples tests ([#167](https://github.com/googleapis/nodejs-bigquery/pull/167)) -- fix: update linking for samples ([#125](https://github.com/googleapis/nodejs-bigquery/pull/125)) -- chore: make samples test work ([#113](https://github.com/googleapis/nodejs-bigquery/pull/113)) - -### Internal / Testing Changes -- refactor(ts): re-enable fix and lint ([#232](https://github.com/googleapis/nodejs-bigquery/pull/232)) -- fix(tests): fix system-test ([#231](https://github.com/googleapis/nodejs-bigquery/pull/231)) -- Pass an empty object. ([#191](https://github.com/googleapis/nodejs-bigquery/pull/191)) -- fix: (tests) Use a filter to locate datasets used in tests. ([#177](https://github.com/googleapis/nodejs-bigquery/pull/177)) -- chore: update issue templates ([#229](https://github.com/googleapis/nodejs-bigquery/pull/229)) -- chore: remove old issue template ([#224](https://github.com/googleapis/nodejs-bigquery/pull/224)) -- build: run tests on node11 ([#223](https://github.com/googleapis/nodejs-bigquery/pull/223)) -- chores(build): do not collect sponge.xml from windows builds ([#221](https://github.com/googleapis/nodejs-bigquery/pull/221)) -- chores(build): run codecov on continuous builds ([#220](https://github.com/googleapis/nodejs-bigquery/pull/220)) -- chore: update new issue template ([#219](https://github.com/googleapis/nodejs-bigquery/pull/219)) -- build: fix codecov uploading on Kokoro ([#213](https://github.com/googleapis/nodejs-bigquery/pull/213)) -- Update kokoro config ([#208](https://github.com/googleapis/nodejs-bigquery/pull/208)) -- Don't publish sourcemaps ([#202](https://github.com/googleapis/nodejs-bigquery/pull/202)) -- test: remove appveyor config ([#200](https://github.com/googleapis/nodejs-bigquery/pull/200)) -- Enable prefer-const in the eslint config ([#198](https://github.com/googleapis/nodejs-bigquery/pull/198)) -- Enable no-var in eslint ([#196](https://github.com/googleapis/nodejs-bigquery/pull/196)) -- Retry npm install in CI ([#184](https://github.com/googleapis/nodejs-bigquery/pull/184)) -- chore: make ci happy ([#175](https://github.com/googleapis/nodejs-bigquery/pull/175)) -- chore: use let and const ([#161](https://github.com/googleapis/nodejs-bigquery/pull/161)) -- chore: ignore package-lock.json ([#162](https://github.com/googleapis/nodejs-bigquery/pull/162)) -- chore: update renovate config ([#156](https://github.com/googleapis/nodejs-bigquery/pull/156)) -- remove that whitespace ([#155](https://github.com/googleapis/nodejs-bigquery/pull/155)) -- chore: move mocha options to mocha.opts ([#152](https://github.com/googleapis/nodejs-bigquery/pull/152)) -- refactor: use @google-cloud/promisify ([#151](https://github.com/googleapis/nodejs-bigquery/pull/151)) -- fix: get eslint passing ([#149](https://github.com/googleapis/nodejs-bigquery/pull/149)) -- Configure Renovate ([#123](https://github.com/googleapis/nodejs-bigquery/pull/123)) -- chore(package): update eslint to version 5.0.0 ([#124](https://github.com/googleapis/nodejs-bigquery/pull/124)) -- refactor: drop repo-tool as an exec wrapper ([#127](https://github.com/googleapis/nodejs-bigquery/pull/127)) -- chore: update sample lockfiles ([#126](https://github.com/googleapis/nodejs-bigquery/pull/126)) -- fix: drop support for node 4.x and 9.x ([#122](https://github.com/googleapis/nodejs-bigquery/pull/122)) -- Added support for the NUMERIC values. ([#119](https://github.com/googleapis/nodejs-bigquery/pull/119)) -- chore(package): update nyc to version 12.0.2 ([#116](https://github.com/googleapis/nodejs-bigquery/pull/116)) -- chore: the ultimate fix for repo-tools EPERM ([#108](https://github.com/googleapis/nodejs-bigquery/pull/108)) -- chore: fix prettier incompatibility ([#112](https://github.com/googleapis/nodejs-bigquery/pull/112)) -- chore: lock files maintenance ([#111](https://github.com/googleapis/nodejs-bigquery/pull/111)) -- chore: lock files ([#109](https://github.com/googleapis/nodejs-bigquery/pull/109)) -- chore: timeout for system test ([#107](https://github.com/googleapis/nodejs-bigquery/pull/107)) -- chore: lock files maintenance ([#106](https://github.com/googleapis/nodejs-bigquery/pull/106)) diff --git a/reverse_engineering/node_modules/@google-cloud/bigquery/LICENSE b/reverse_engineering/node_modules/@google-cloud/bigquery/LICENSE deleted file mode 100644 index d645695..0000000 --- a/reverse_engineering/node_modules/@google-cloud/bigquery/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/reverse_engineering/node_modules/@google-cloud/bigquery/README.md b/reverse_engineering/node_modules/@google-cloud/bigquery/README.md deleted file mode 100644 index 4725534..0000000 --- a/reverse_engineering/node_modules/@google-cloud/bigquery/README.md +++ /dev/null @@ -1,244 +0,0 @@ -[//]: # "This README.md file is auto-generated, all changes to this file will be lost." -[//]: # "To regenerate it, use `python -m synthtool`." -Google Cloud Platform logo - -# [Google BigQuery: Node.js Client](https://github.com/googleapis/nodejs-bigquery) - -[![release level](https://img.shields.io/badge/release%20level-general%20availability%20%28GA%29-brightgreen.svg?style=flat)](https://cloud.google.com/terms/launch-stages) -[![npm version](https://img.shields.io/npm/v/@google-cloud/bigquery.svg)](https://www.npmjs.org/package/@google-cloud/bigquery) -[![codecov](https://img.shields.io/codecov/c/github/googleapis/nodejs-bigquery/main.svg?style=flat)](https://codecov.io/gh/googleapis/nodejs-bigquery) - - - - -Google BigQuery Client Library for Node.js - - -A comprehensive list of changes in each version may be found in -[the CHANGELOG](https://github.com/googleapis/nodejs-bigquery/blob/main/CHANGELOG.md). - -* [Google BigQuery Node.js Client API Reference][client-docs] -* [Google BigQuery Documentation][product-docs] -* [github.com/googleapis/nodejs-bigquery](https://github.com/googleapis/nodejs-bigquery) - -Read more about the client libraries for Cloud APIs, including the older -Google APIs Client Libraries, in [Client Libraries Explained][explained]. - -[explained]: https://cloud.google.com/apis/docs/client-libraries-explained - -**Table of contents:** - - -* [Quickstart](#quickstart) - * [Before you begin](#before-you-begin) - * [Installing the client library](#installing-the-client-library) - * [Using the client library](#using-the-client-library) -* [Samples](#samples) -* [Versioning](#versioning) -* [Contributing](#contributing) -* [License](#license) - -## Quickstart - -### Before you begin - -1. [Select or create a Cloud Platform project][projects]. -1. [Enable the Google BigQuery API][enable_api]. -1. [Set up authentication with a service account][auth] so you can access the - API from your local workstation. - -### Installing the client library - -```bash -npm install @google-cloud/bigquery -``` - - -### Using the client library - -```javascript -// Imports the Google Cloud client library -const {BigQuery} = require('@google-cloud/bigquery'); - -async function createDataset() { - // Creates a client - const bigqueryClient = new BigQuery(); - - // Create the dataset - const [dataset] = await bigqueryClient.createDataset(datasetName); - console.log(`Dataset ${dataset.id} created.`); -} -createDataset(); - -``` - - - -## Samples - -Samples are in the [`samples/`](https://github.com/googleapis/nodejs-bigquery/tree/main/samples) directory. Each sample's `README.md` has instructions for running its sample. - -| Sample | Source Code | Try it | -| --------------------------- | --------------------------------- | ------ | -| Add Column Load Append | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/addColumnLoadAppend.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/addColumnLoadAppend.js,samples/README.md) | -| Add Column Query Append | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/addColumnQueryAppend.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/addColumnQueryAppend.js,samples/README.md) | -| Add Empty Column | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/addEmptyColumn.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/addEmptyColumn.js,samples/README.md) | -| Auth View Tutorial | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/authViewTutorial.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/authViewTutorial.js,samples/README.md) | -| Browse Table | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/browseTable.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/browseTable.js,samples/README.md) | -| Cancel Job | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/cancelJob.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/cancelJob.js,samples/README.md) | -| Client JSON Credentials | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/clientJSONCredentials.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/clientJSONCredentials.js,samples/README.md) | -| Copy Table | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/copyTable.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/copyTable.js,samples/README.md) | -| Copy Table Multiple Source | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/copyTableMultipleSource.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/copyTableMultipleSource.js,samples/README.md) | -| Create Dataset | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/createDataset.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/createDataset.js,samples/README.md) | -| Create Job | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/createJob.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/createJob.js,samples/README.md) | -| Create Model | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/createModel.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/createModel.js,samples/README.md) | -| Create Routine | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/createRoutine.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/createRoutine.js,samples/README.md) | -| Create Routine DDL | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/createRoutineDDL.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/createRoutineDDL.js,samples/README.md) | -| Create Table | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/createTable.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/createTable.js,samples/README.md) | -| Create Table Partitioned | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/createTablePartitioned.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/createTablePartitioned.js,samples/README.md) | -| Create Table Range Partitioned | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/createTableRangePartitioned.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/createTableRangePartitioned.js,samples/README.md) | -| Create View | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/createView.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/createView.js,samples/README.md) | -| Ddl Create View | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/ddlCreateView.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/ddlCreateView.js,samples/README.md) | -| Delete Dataset | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/deleteDataset.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/deleteDataset.js,samples/README.md) | -| Delete Label Dataset | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/deleteLabelDataset.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/deleteLabelDataset.js,samples/README.md) | -| Delete Label Table | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/deleteLabelTable.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/deleteLabelTable.js,samples/README.md) | -| Delete Model | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/deleteModel.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/deleteModel.js,samples/README.md) | -| Delete Routine | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/deleteRoutine.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/deleteRoutine.js,samples/README.md) | -| Delete Table | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/deleteTable.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/deleteTable.js,samples/README.md) | -| Extract Table Compressed | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/extractTableCompressed.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/extractTableCompressed.js,samples/README.md) | -| Extract Table JSON | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/extractTableJSON.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/extractTableJSON.js,samples/README.md) | -| Extract Table To GCS | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/extractTableToGCS.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/extractTableToGCS.js,samples/README.md) | -| Get Dataset | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/getDataset.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/getDataset.js,samples/README.md) | -| Get Dataset Labels | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/getDatasetLabels.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/getDatasetLabels.js,samples/README.md) | -| Get Job | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/getJob.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/getJob.js,samples/README.md) | -| BigQuery Get Model | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/getModel.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/getModel.js,samples/README.md) | -| Get Routine | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/getRoutine.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/getRoutine.js,samples/README.md) | -| BigQuery Get Table | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/getTable.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/getTable.js,samples/README.md) | -| Get Table Labels | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/getTableLabels.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/getTableLabels.js,samples/README.md) | -| Get View | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/getView.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/getView.js,samples/README.md) | -| Insert Rows As Stream | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/insertRowsAsStream.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/insertRowsAsStream.js,samples/README.md) | -| Inserting Data Types | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/insertingDataTypes.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/insertingDataTypes.js,samples/README.md) | -| BigQuery Label Dataset | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/labelDataset.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/labelDataset.js,samples/README.md) | -| Label Table | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/labelTable.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/labelTable.js,samples/README.md) | -| List Datasets | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/listDatasets.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/listDatasets.js,samples/README.md) | -| List Datasets By Label | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/listDatasetsByLabel.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/listDatasetsByLabel.js,samples/README.md) | -| List Jobs | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/listJobs.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/listJobs.js,samples/README.md) | -| BigQuery List Models | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/listModels.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/listModels.js,samples/README.md) | -| BigQuery List Models Streaming | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/listModelsStreaming.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/listModelsStreaming.js,samples/README.md) | -| List Routines | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/listRoutines.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/listRoutines.js,samples/README.md) | -| List Tables | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/listTables.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/listTables.js,samples/README.md) | -| Load CSV From GCS | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/loadCSVFromGCS.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/loadCSVFromGCS.js,samples/README.md) | -| Load CSV From GCS Autodetect | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/loadCSVFromGCSAutodetect.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/loadCSVFromGCSAutodetect.js,samples/README.md) | -| Load CSV From GCS Truncate | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/loadCSVFromGCSTruncate.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/loadCSVFromGCSTruncate.js,samples/README.md) | -| Load JSON From GCS | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/loadJSONFromGCS.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/loadJSONFromGCS.js,samples/README.md) | -| Load JSON From GCS Autodetect | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/loadJSONFromGCSAutodetect.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/loadJSONFromGCSAutodetect.js,samples/README.md) | -| Load JSON From GCS Truncate | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/loadJSONFromGCSTruncate.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/loadJSONFromGCSTruncate.js,samples/README.md) | -| Load Local File | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/loadLocalFile.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/loadLocalFile.js,samples/README.md) | -| Load Orc From GCS Truncate | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/loadOrcFromGCSTruncate.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/loadOrcFromGCSTruncate.js,samples/README.md) | -| Load Parquet From GCS Truncate | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/loadParquetFromGCSTruncate.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/loadParquetFromGCSTruncate.js,samples/README.md) | -| Load Table GCS Avro | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/loadTableGCSAvro.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/loadTableGCSAvro.js,samples/README.md) | -| Load Table GCS Avro Truncate | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/loadTableGCSAvroTruncate.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/loadTableGCSAvroTruncate.js,samples/README.md) | -| Load Table GCSORC | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/loadTableGCSORC.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/loadTableGCSORC.js,samples/README.md) | -| Load Table GCS Parquet | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/loadTableGCSParquet.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/loadTableGCSParquet.js,samples/README.md) | -| Load Table Partitioned | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/loadTablePartitioned.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/loadTablePartitioned.js,samples/README.md) | -| Nested Repeated Schema | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/nestedRepeatedSchema.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/nestedRepeatedSchema.js,samples/README.md) | -| Query | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/query.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/query.js,samples/README.md) | -| Query Batch | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/queryBatch.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/queryBatch.js,samples/README.md) | -| Query Destination Table | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/queryDestinationTable.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/queryDestinationTable.js,samples/README.md) | -| Query Disable Cache | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/queryDisableCache.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/queryDisableCache.js,samples/README.md) | -| Query Dry Run | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/queryDryRun.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/queryDryRun.js,samples/README.md) | -| Query External GCS Perm | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/queryExternalGCSPerm.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/queryExternalGCSPerm.js,samples/README.md) | -| Query Legacy | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/queryLegacy.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/queryLegacy.js,samples/README.md) | -| Query Legacy Large Results | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/queryLegacyLargeResults.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/queryLegacyLargeResults.js,samples/README.md) | -| Query Pagination | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/queryPagination.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/queryPagination.js,samples/README.md) | -| Query Params Arrays | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/queryParamsArrays.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/queryParamsArrays.js,samples/README.md) | -| Query Params Named | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/queryParamsNamed.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/queryParamsNamed.js,samples/README.md) | -| Query Params Named Types | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/queryParamsNamedTypes.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/queryParamsNamedTypes.js,samples/README.md) | -| Query Params Positional | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/queryParamsPositional.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/queryParamsPositional.js,samples/README.md) | -| Query Params Positional Types | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/queryParamsPositionalTypes.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/queryParamsPositionalTypes.js,samples/README.md) | -| Query Params Structs | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/queryParamsStructs.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/queryParamsStructs.js,samples/README.md) | -| Query Params Timestamps | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/queryParamsTimestamps.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/queryParamsTimestamps.js,samples/README.md) | -| Query Stack Overflow | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/queryStackOverflow.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/queryStackOverflow.js,samples/README.md) | -| Quickstart | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/quickstart.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/quickstart.js,samples/README.md) | -| Relax Column | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/relaxColumn.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/relaxColumn.js,samples/README.md) | -| Relax Column Load Append | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/relaxColumnLoadAppend.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/relaxColumnLoadAppend.js,samples/README.md) | -| Relax Column Query Append | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/relaxColumnQueryAppend.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/relaxColumnQueryAppend.js,samples/README.md) | -| Set User Agent | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/setUserAgent.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/setUserAgent.js,samples/README.md) | -| Undelete Table | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/undeleteTable.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/undeleteTable.js,samples/README.md) | -| Update Dataset Access | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/updateDatasetAccess.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/updateDatasetAccess.js,samples/README.md) | -| Update Dataset Description | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/updateDatasetDescription.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/updateDatasetDescription.js,samples/README.md) | -| Update Dataset Expiration | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/updateDatasetExpiration.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/updateDatasetExpiration.js,samples/README.md) | -| BigQuery Update Model | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/updateModel.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/updateModel.js,samples/README.md) | -| Update Routine | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/updateRoutine.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/updateRoutine.js,samples/README.md) | -| Update Table Description | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/updateTableDescription.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/updateTableDescription.js,samples/README.md) | -| Update Table Expiration | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/updateTableExpiration.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/updateTableExpiration.js,samples/README.md) | -| Update View Query | [source code](https://github.com/googleapis/nodejs-bigquery/blob/main/samples/updateViewQuery.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-bigquery&page=editor&open_in_editor=samples/updateViewQuery.js,samples/README.md) | - - - -The [Google BigQuery Node.js Client API Reference][client-docs] documentation -also contains samples. - -## Supported Node.js Versions - -Our client libraries follow the [Node.js release schedule](https://nodejs.org/en/about/releases/). -Libraries are compatible with all current _active_ and _maintenance_ versions of -Node.js. - -Client libraries targeting some end-of-life versions of Node.js are available, and -can be installed via npm [dist-tags](https://docs.npmjs.com/cli/dist-tag). -The dist-tags follow the naming convention `legacy-(version)`. - -_Legacy Node.js versions are supported as a best effort:_ - -* Legacy versions will not be tested in continuous integration. -* Some security patches may not be able to be backported. -* Dependencies will not be kept up-to-date, and features will not be backported. - -#### Legacy tags available - -* `legacy-8`: install client libraries from this dist-tag for versions - compatible with Node.js 8. - -## Versioning - -This library follows [Semantic Versioning](http://semver.org/). - - -This library is considered to be **General Availability (GA)**. This means it -is stable; the code surface will not change in backwards-incompatible ways -unless absolutely necessary (e.g. because of critical security issues) or with -an extensive deprecation period. Issues and requests against **GA** libraries -are addressed with the highest priority. - - - - - -More Information: [Google Cloud Platform Launch Stages][launch_stages] - -[launch_stages]: https://cloud.google.com/terms/launch-stages - -## Contributing - -Contributions welcome! See the [Contributing Guide](https://github.com/googleapis/nodejs-bigquery/blob/main/CONTRIBUTING.md). - -Please note that this `README.md`, the `samples/README.md`, -and a variety of configuration files in this repository (including `.nycrc` and `tsconfig.json`) -are generated from a central template. To edit one of these files, make an edit -to its templates in -[directory](https://github.com/googleapis/synthtool). - -## License - -Apache Version 2.0 - -See [LICENSE](https://github.com/googleapis/nodejs-bigquery/blob/main/LICENSE) - -[client-docs]: https://cloud.google.com/nodejs/docs/reference/bigquery/latest -[product-docs]: https://cloud.google.com/bigquery -[shell_img]: https://gstatic.com/cloudssh/images/open-btn.png -[projects]: https://console.cloud.google.com/project -[billing]: https://support.google.com/cloud/answer/6293499#enable-billing -[enable_api]: https://console.cloud.google.com/flows/enableapi?apiid=bigquery.googleapis.com -[auth]: https://cloud.google.com/docs/authentication/getting-started diff --git a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/bigquery.d.ts b/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/bigquery.d.ts deleted file mode 100644 index b56e8ca..0000000 --- a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/bigquery.d.ts +++ /dev/null @@ -1,638 +0,0 @@ -/*! - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as common from '@google-cloud/common'; -import { ResourceStream } from '@google-cloud/paginator'; -import { Dataset, DatasetOptions } from './dataset'; -import { Job, JobOptions, QueryResultsOptions } from './job'; -import { Table, TableField, TableSchema, TableRow, JobCallback, JobResponse, RowMetadata } from './table'; -import bigquery from './types'; -export interface RequestCallback { - (err: Error | null, response?: T | null): void; -} -export interface ResourceCallback { - (err: Error | null, resource?: T | null, response?: R | null): void; -} -export declare type PagedResponse = [T[]] | [T[], Q | null, R]; -export interface PagedCallback { - (err: Error | null, resource?: T[] | null, nextQuery?: Q | null, response?: R | null): void; -} -export declare type JobRequest = J & { - jobId?: string; - jobPrefix?: string; - location?: string; -}; -export declare type PagedRequest

= P & { - autoPaginate?: boolean; - maxApiCalls?: number; -}; -export declare type QueryRowsResponse = PagedResponse; -export declare type QueryRowsCallback = PagedCallback; -export declare type SimpleQueryRowsResponse = [RowMetadata[], bigquery.IJob]; -export declare type SimpleQueryRowsCallback = ResourceCallback; -export declare type Query = JobRequest & { - destination?: Table; - params?: any[] | { - [param: string]: any; - }; - dryRun?: boolean; - labels?: { - [label: string]: string; - }; - types?: string[] | string[][] | { - [type: string]: string | string[]; - }; - job?: Job; - maxResults?: number; - jobTimeoutMs?: number; - pageToken?: string; - wrapIntegers?: boolean | IntegerTypeCastOptions; -}; -export declare type QueryOptions = QueryResultsOptions; -export declare type QueryStreamOptions = { - wrapIntegers?: boolean | IntegerTypeCastOptions; -}; -export declare type DatasetResource = bigquery.IDataset; -export declare type ValueType = bigquery.IQueryParameterType; -export declare type GetDatasetsOptions = PagedRequest; -export declare type DatasetsResponse = PagedResponse; -export declare type DatasetsCallback = PagedCallback; -export declare type DatasetResponse = [Dataset, bigquery.IDataset]; -export declare type DatasetCallback = ResourceCallback; -export declare type GetJobsOptions = PagedRequest; -export declare type GetJobsResponse = PagedResponse; -export declare type GetJobsCallback = PagedCallback; -export interface BigQueryTimeOptions { - hours?: number | string; - minutes?: number | string; - seconds?: number | string; - fractional?: number | string; -} -export interface BigQueryDateOptions { - year?: number | string; - month?: number | string; - day?: number | string; -} -export interface BigQueryDatetimeOptions { - year?: string | number; - month?: string | number; - day?: string | number; - hours?: string | number; - minutes?: string | number; - seconds?: string | number; - fractional?: string | number; -} -export declare type ProvidedTypeArray = Array; -export interface ProvidedTypeStruct { - [key: string]: string | ProvidedTypeArray | ProvidedTypeStruct; -} -export declare type QueryParameter = bigquery.IQueryParameter; -export interface BigQueryOptions extends common.GoogleAuthOptions { - autoRetry?: boolean; - maxRetries?: number; - location?: string; - userAgent?: string; - /** - * The API endpoint of the service used to make requests. - * Defaults to `bigquery.googleapis.com`. - */ - apiEndpoint?: string; -} -export interface IntegerTypeCastOptions { - integerTypeCastFunction: Function; - fields?: string | string[]; -} -export declare type IntegerTypeCastValue = { - integerValue: string | number; - schemaFieldName?: string; -}; -export declare const PROTOCOL_REGEX: RegExp; -/** - * @typedef {object} BigQueryOptions - * @property {string} [projectId] The project ID from the Google Developer's - * Console, e.g. 'grape-spaceship-123'. We will also check the environment - * variable `GCLOUD_PROJECT` for your project ID. If your app is running in - * an environment which supports {@link - * https://cloud.google.com/docs/authentication/production#providing_credentials_to_your_application - * Application Default Credentials}, your project ID will be detected - * automatically. - * @property {string} [keyFilename] Full path to the a .json, .pem, or .p12 key - * downloaded from the Google Developers Console. If you provide a path to a - * JSON file, the `projectId` option above is not necessary. NOTE: .pem and - * .p12 require you to specify the `email` option as well. - * @property {string} [token] An OAUTH access token. If provided, we will not - * manage fetching, re-using, and re-minting access tokens. - * @property {string} [email] Account email address. Required when using a .pem - * or .p12 keyFilename. - * @property {object} [credentials] Credentials object. - * @property {string} [credentials.client_email] - * @property {string} [credentials.private_key] - * @property {boolean} [autoRetry=true] Automatically retry requests if the - * response is related to rate limits or certain intermittent server errors. - * We will exponentially backoff subsequent requests by default. - * @property {number} [maxRetries=3] Maximum number of automatic retries - * attempted before returning the error. - * @property {Constructor} [promise] Custom promise module to use instead of - * native Promises. - * @property {string} [location] The geographic location of all datasets and - * jobs referenced and created through the client. - * @property {string} [userAgent] The value to be prepended to the User-Agent - * header in API requests. - * @property {string[]} [scopes] Additional OAuth scopes to use in requests. For - * example, to access an external data source, you may need the - * `https://www.googleapis.com/auth/drive.readonly` scope. - * @property {string=} apiEndpoint The API endpoint of the service used to make requests. Defaults to `bigquery.googleapis.com`. - */ -/** - * In the following examples from this page and the other modules (`Dataset`, - * `Table`, etc.), we are going to be using a dataset from - * [data.gov](http://goo.gl/f2SXcb) of higher education institutions. - * - * We will create a table with the correct schema, import the public CSV file - * into that table, and query it for data. - * - * @class - * - * @see [What is BigQuery?]{@link https://cloud.google.com/bigquery/what-is-bigquery} - * - * @param {BigQueryOptions} options Constructor options. - * - * @example Install the client library with npm: - * npm install @google-cloud/bigquery - * - * @example Import the client library - * const {BigQuery} = require('@google-cloud/bigquery'); - * - * @example Create a client that uses Application Default Credentials (ADC): - * const bigquery = new BigQuery(); - * - * @example Create a client with explicit credentials: - * const bigquery = new BigQuery({ - * projectId: 'your-project-id', - * keyFilename: '/path/to/keyfile.json' - * }); - * - * @example include:samples/quickstart.js - * region_tag:bigquery_quickstart - * Full quickstart example: - */ -export declare class BigQuery extends common.Service { - location?: string; - createQueryStream: (options?: Query | string) => ResourceStream; - getDatasetsStream: (options?: GetDatasetsOptions) => ResourceStream; - getJobsStream: (options?: GetJobsOptions) => ResourceStream; - constructor(options?: BigQueryOptions); - private static sanitizeEndpoint; - /** - * Merge a rowset returned from the API with a table schema. - * - * @private - * - * @param {object} schema - * @param {array} rows - * @param {boolean|IntegerTypeCastOptions} wrapIntegers Wrap values of - * 'INT64' type in {@link BigQueryInt} objects. - * If a `boolean`, this will wrap values in {@link BigQueryInt} objects. - * If an `object`, this will return a value returned by - * `wrapIntegers.integerTypeCastFunction`. - * Please see {@link IntegerTypeCastOptions} for options descriptions. - * @param {array} selectedFields List of fields to return. - * If unspecified, all fields are returned. - * @returns {array} Fields using their matching names from the table's schema. - */ - static mergeSchemaWithRows_(schema: TableSchema | TableField, rows: TableRow[], wrapIntegers: boolean | IntegerTypeCastOptions, selectedFields?: string[]): any[]; - /** - * The `DATE` type represents a logical calendar date, independent of time - * zone. It does not represent a specific 24-hour time period. Rather, a given - * DATE value represents a different 24-hour period when interpreted in - * different time zones, and may represent a shorter or longer day during - * Daylight Savings Time transitions. - * - * @param {object|string} value The date. If a string, this should be in the - * format the API describes: `YYYY-[M]M-[D]D`. - * Otherwise, provide an object. - * @param {string|number} value.year Four digits. - * @param {string|number} value.month One or two digits. - * @param {string|number} value.day One or two digits. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const date = bigquery.date('2017-01-01'); - * - * //- - * // Alternatively, provide an object. - * //- - * const date2 = bigquery.date({ - * year: 2017, - * month: 1, - * day: 1 - * }); - */ - static date(value: BigQueryDateOptions | string): BigQueryDate; - /** - * @param {object|string} value The date. If a string, this should be in the - * format the API describes: `YYYY-[M]M-[D]D`. - * Otherwise, provide an object. - * @param {string|number} value.year Four digits. - * @param {string|number} value.month One or two digits. - * @param {string|number} value.day One or two digits. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const date = BigQuery.date('2017-01-01'); - * - * //- - * // Alternatively, provide an object. - * //- - * const date2 = BigQuery.date({ - * year: 2017, - * month: 1, - * day: 1 - * }); - */ - date(value: BigQueryDateOptions | string): BigQueryDate; - /** - * A `DATETIME` data type represents a point in time. Unlike a `TIMESTAMP`, - * this does not refer to an absolute instance in time. Instead, it is the - * civil time, or the time that a user would see on a watch or calendar. - * - * @method BigQuery.datetime - * @param {object|string} value The time. If a string, this should be in the - * format the API describes: `YYYY-[M]M-[D]D[ [H]H:[M]M:[S]S[.DDDDDD]]`. - * Otherwise, provide an object. - * @param {string|number} value.year Four digits. - * @param {string|number} value.month One or two digits. - * @param {string|number} value.day One or two digits. - * @param {string|number} [value.hours] One or two digits (`00` - `23`). - * @param {string|number} [value.minutes] One or two digits (`00` - `59`). - * @param {string|number} [value.seconds] One or two digits (`00` - `59`). - * @param {string|number} [value.fractional] Up to six digits for microsecond - * precision. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const datetime = BigQuery.datetime('2017-01-01 13:00:00'); - * - * //- - * // Alternatively, provide an object. - * //- - * const datetime = BigQuery.datetime({ - * year: 2017, - * month: 1, - * day: 1, - * hours: 14, - * minutes: 0, - * seconds: 0 - * }); - */ - /** - * A `DATETIME` data type represents a point in time. Unlike a `TIMESTAMP`, - * this does not refer to an absolute instance in time. Instead, it is the - * civil time, or the time that a user would see on a watch or calendar. - * - * @method BigQuery#datetime - * @param {object|string} value The time. If a string, this should be in the - * format the API describes: `YYYY-[M]M-[D]D[ [H]H:[M]M:[S]S[.DDDDDD]]`. - * Otherwise, provide an object. - * @param {string|number} value.year Four digits. - * @param {string|number} value.month One or two digits. - * @param {string|number} value.day One or two digits. - * @param {string|number} [value.hours] One or two digits (`00` - `23`). - * @param {string|number} [value.minutes] One or two digits (`00` - `59`). - * @param {string|number} [value.seconds] One or two digits (`00` - `59`). - * @param {string|number} [value.fractional] Up to six digits for microsecond - * precision. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const datetime = bigquery.datetime('2017-01-01 13:00:00'); - * - * //- - * // Alternatively, provide an object. - * //- - * const datetime = bigquery.datetime({ - * year: 2017, - * month: 1, - * day: 1, - * hours: 14, - * minutes: 0, - * seconds: 0 - * }); - */ - static datetime(value: BigQueryDatetimeOptions | string): BigQueryDatetime; - datetime(value: BigQueryDatetimeOptions | string): BigQueryDatetime; - /** - * A `TIME` data type represents a time, independent of a specific date. - * - * @method BigQuery.time - * @param {object|string} value The time. If a string, this should be in the - * format the API describes: `[H]H:[M]M:[S]S[.DDDDDD]`. Otherwise, provide - * an object. - * @param {string|number} [value.hours] One or two digits (`00` - `23`). - * @param {string|number} [value.minutes] One or two digits (`00` - `59`). - * @param {string|number} [value.seconds] One or two digits (`00` - `59`). - * @param {string|number} [value.fractional] Up to six digits for microsecond - * precision. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const time = BigQuery.time('14:00:00'); // 2:00 PM - * - * //- - * // Alternatively, provide an object. - * //- - * const time = BigQuery.time({ - * hours: 14, - * minutes: 0, - * seconds: 0 - * }); - */ - /** - * A `TIME` data type represents a time, independent of a specific date. - * - * @method BigQuery#time - * @param {object|string} value The time. If a string, this should be in the - * format the API describes: `[H]H:[M]M:[S]S[.DDDDDD]`. Otherwise, provide - * an object. - * @param {string|number} [value.hours] One or two digits (`00` - `23`). - * @param {string|number} [value.minutes] One or two digits (`00` - `59`). - * @param {string|number} [value.seconds] One or two digits (`00` - `59`). - * @param {string|number} [value.fractional] Up to six digits for microsecond - * precision. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const time = bigquery.time('14:00:00'); // 2:00 PM - * - * //- - * // Alternatively, provide an object. - * //- - * const time = bigquery.time({ - * hours: 14, - * minutes: 0, - * seconds: 0 - * }); - */ - static time(value: BigQueryTimeOptions | string): BigQueryTime; - time(value: BigQueryTimeOptions | string): BigQueryTime; - /** - * A timestamp represents an absolute point in time, independent of any time - * zone or convention such as Daylight Savings Time. - * - * @method BigQuery.timestamp - * @param {Date|string} value The time. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const timestamp = BigQuery.timestamp(new Date()); - */ - /** - * A timestamp represents an absolute point in time, independent of any time - * zone or convention such as Daylight Savings Time. - * - * @method BigQuery#timestamp - * @param {Date|string} value The time. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const timestamp = bigquery.timestamp(new Date()); - */ - static timestamp(value: Date | string): BigQueryTimestamp; - timestamp(value: Date | string): BigQueryTimestamp; - /** - * A BigQueryInt wraps 'INT64' values. Can be used to maintain precision. - * - * @method BigQuery#int - * @param {string|number|IntegerTypeCastValue} value The INT64 value to convert. - * @param {IntegerTypeCastOptions} typeCastOptions Configuration to convert - * value. Must provide an `integerTypeCastFunction` to handle conversion. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * - * const largeIntegerValue = Number.MAX_SAFE_INTEGER + 1; - * - * const options = { - * integerTypeCastFunction: value => value.split(), - * }; - * - * const bqInteger = bigquery.int(largeIntegerValue, options); - * - * const customValue = bqInteger.valueOf(); - * // customValue is the value returned from your `integerTypeCastFunction`. - */ - static int(value: string | number | IntegerTypeCastValue, typeCastOptions?: IntegerTypeCastOptions): BigQueryInt; - int(value: string | number | IntegerTypeCastValue, typeCastOptions?: IntegerTypeCastOptions): BigQueryInt; - /** - * A geography value represents a surface area on the Earth - * in Well-known Text (WKT) format. - * - * @method BigQuery.geography - * @param {string} value The geospatial data. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const geography = BigQuery.geography('POINT(1, 2)'); - */ - /** - * A geography value represents a surface area on the Earth - * in Well-known Text (WKT) format. - * - * @method BigQuery#geography - * @param {string} value The geospatial data. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const geography = bigquery.geography('POINT(1, 2)'); - */ - static geography(value: string): Geography; - geography(value: string): Geography; - /** - * Convert an INT64 value to Number. - * - * @private - * @param {object} value The INT64 value to convert. - */ - static decodeIntegerValue_(value: IntegerTypeCastValue): number; - /** - * Return a value's provided type. - * - * @private - * - * @throws {error} If the type provided is invalid. - * - * @see [Data Type]{@link https://cloud.google.com/bigquery/data-types} - * - * @param {*} providedType The type. - * @returns {string} The valid type provided. - */ - static getTypeDescriptorFromProvidedType_(providedType: string | ProvidedTypeStruct | ProvidedTypeArray): ValueType; - /** - * Detect a value's type. - * - * @private - * - * @throws {error} If the type could not be detected. - * - * @see [Data Type]{@link https://cloud.google.com/bigquery/data-types} - * - * @param {*} value The value. - * @returns {string} The type detected from the value. - */ - static getTypeDescriptorFromValue_(value: unknown): ValueType; - /** - * Convert a value into a `queryParameter` object. - * - * @private - * - * @see [Jobs.query API Reference Docs (see `queryParameters`)]{@link https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs/query#request-body} - * - * @param {*} value The value. - * @param {string|ProvidedTypeStruct|ProvidedTypeArray} providedType Provided - * query parameter type. - * @returns {object} A properly-formed `queryParameter` object. - */ - static valueToQueryParameter_(value: any, providedType?: string | ProvidedTypeStruct | ProvidedTypeArray): bigquery.IQueryParameter; - private static _getValue; - private static _isCustomType; - createDataset(id: string, options?: DatasetResource): Promise; - createDataset(id: string, options: DatasetResource, callback: DatasetCallback): void; - createDataset(id: string, callback: DatasetCallback): void; - createQueryJob(options: Query | string): Promise; - createQueryJob(options: Query | string, callback: JobCallback): void; - createJob(options: JobOptions): Promise; - createJob(options: JobOptions, callback: JobCallback): void; - /** - * Create a reference to a dataset. - * - * @param {string} id ID of the dataset. - * @param {object} [options] Dataset options. - * @param {string} [options.location] The geographic location of the dataset. - * Required except for US and EU. - * @returns {Dataset} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('higher_education'); - */ - dataset(id: string, options?: DatasetOptions): Dataset; - getDatasets(options?: GetDatasetsOptions): Promise; - getDatasets(options: GetDatasetsOptions, callback: DatasetsCallback): void; - getDatasets(callback: DatasetsCallback): void; - getJobs(options?: GetJobsOptions): Promise; - getJobs(options: GetJobsOptions, callback: GetJobsCallback): void; - getJobs(callback: GetJobsCallback): void; - /** - * Create a reference to an existing job. - * - * @param {string} id ID of the job. - * @param {object} [options] Configuration object. - * @param {string} [options.location] The geographic location of the job. - * Required except for US and EU. - * @returns {Job} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * - * const myExistingJob = bigquery.job('job-id'); - */ - job(id: string, options?: JobOptions): Job; - query(query: string, options?: QueryOptions): Promise; - query(query: Query, options?: QueryOptions): Promise; - query(query: string, options: QueryOptions, callback?: QueryRowsCallback): void; - query(query: Query, options: QueryOptions, callback?: SimpleQueryRowsCallback): void; - query(query: string, callback?: QueryRowsCallback): void; - query(query: Query, callback?: SimpleQueryRowsCallback): void; - /** - * This method will be called by `createQueryStream()`. It is required to - * properly set the `autoPaginate` option value. - * - * @private - */ - queryAsStream_(query: Query, optionsOrCallback?: QueryStreamOptions, cb?: SimpleQueryRowsCallback): void; -} -/** - * Date class for BigQuery. - */ -export declare class BigQueryDate { - value: string; - constructor(value: BigQueryDateOptions | string); -} -/** - * Geography class for BigQuery. - */ -export declare class Geography { - value: string; - constructor(value: string); -} -/** - * Timestamp class for BigQuery. - */ -export declare class BigQueryTimestamp { - value: string; - constructor(value: Date | string); -} -/** - * Datetime class for BigQuery. - */ -export declare class BigQueryDatetime { - value: string; - constructor(value: BigQueryDatetimeOptions | string); -} -/** - * Time class for BigQuery. - */ -export declare class BigQueryTime { - value: string; - constructor(value: BigQueryTimeOptions | string); -} -/** - * Build a BigQueryInt object. For long integers, a string can be provided. - * - * @class - * @param {string|number|IntegerTypeCastValue} value The 'INT64' value. - * @param {object} [typeCastOptions] Configuration to convert - * values of 'INT64' type to a custom value. Must provide an - * `integerTypeCastFunction` to handle conversion. - * @param {function} typeCastOptions.integerTypeCastFunction A custom user - * provided function to convert value. - * @param {string|string[]} [typeCastOptions.fields] Schema field - * names to be converted using `integerTypeCastFunction`. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const anInt = bigquery.int(7); - */ -export declare class BigQueryInt extends Number { - type: string; - value: string; - typeCastFunction?: Function; - private _schemaFieldName; - constructor(value: string | number | IntegerTypeCastValue, typeCastOptions?: IntegerTypeCastOptions); - valueOf(): any; - toJSON(): Json; -} -export interface Json { - [field: string]: string; -} diff --git a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/bigquery.js b/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/bigquery.js deleted file mode 100644 index 5d1e5dc..0000000 --- a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/bigquery.js +++ /dev/null @@ -1,1758 +0,0 @@ -"use strict"; -/*! - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BigQueryInt = exports.BigQueryTime = exports.BigQueryDatetime = exports.BigQueryTimestamp = exports.Geography = exports.BigQueryDate = exports.BigQuery = exports.PROTOCOL_REGEX = void 0; -const common = require("@google-cloud/common"); -const paginator_1 = require("@google-cloud/paginator"); -const promisify_1 = require("@google-cloud/promisify"); -const arrify = require("arrify"); -const big_js_1 = require("big.js"); -const extend = require("extend"); -const is = require("is"); -const uuid = require("uuid"); -const dataset_1 = require("./dataset"); -const job_1 = require("./job"); -const table_1 = require("./table"); -exports.PROTOCOL_REGEX = /^(\w*):\/\//; -/** - * @typedef {object} BigQueryOptions - * @property {string} [projectId] The project ID from the Google Developer's - * Console, e.g. 'grape-spaceship-123'. We will also check the environment - * variable `GCLOUD_PROJECT` for your project ID. If your app is running in - * an environment which supports {@link - * https://cloud.google.com/docs/authentication/production#providing_credentials_to_your_application - * Application Default Credentials}, your project ID will be detected - * automatically. - * @property {string} [keyFilename] Full path to the a .json, .pem, or .p12 key - * downloaded from the Google Developers Console. If you provide a path to a - * JSON file, the `projectId` option above is not necessary. NOTE: .pem and - * .p12 require you to specify the `email` option as well. - * @property {string} [token] An OAUTH access token. If provided, we will not - * manage fetching, re-using, and re-minting access tokens. - * @property {string} [email] Account email address. Required when using a .pem - * or .p12 keyFilename. - * @property {object} [credentials] Credentials object. - * @property {string} [credentials.client_email] - * @property {string} [credentials.private_key] - * @property {boolean} [autoRetry=true] Automatically retry requests if the - * response is related to rate limits or certain intermittent server errors. - * We will exponentially backoff subsequent requests by default. - * @property {number} [maxRetries=3] Maximum number of automatic retries - * attempted before returning the error. - * @property {Constructor} [promise] Custom promise module to use instead of - * native Promises. - * @property {string} [location] The geographic location of all datasets and - * jobs referenced and created through the client. - * @property {string} [userAgent] The value to be prepended to the User-Agent - * header in API requests. - * @property {string[]} [scopes] Additional OAuth scopes to use in requests. For - * example, to access an external data source, you may need the - * `https://www.googleapis.com/auth/drive.readonly` scope. - * @property {string=} apiEndpoint The API endpoint of the service used to make requests. Defaults to `bigquery.googleapis.com`. - */ -/** - * In the following examples from this page and the other modules (`Dataset`, - * `Table`, etc.), we are going to be using a dataset from - * [data.gov](http://goo.gl/f2SXcb) of higher education institutions. - * - * We will create a table with the correct schema, import the public CSV file - * into that table, and query it for data. - * - * @class - * - * @see [What is BigQuery?]{@link https://cloud.google.com/bigquery/what-is-bigquery} - * - * @param {BigQueryOptions} options Constructor options. - * - * @example Install the client library with npm: - * npm install @google-cloud/bigquery - * - * @example Import the client library - * const {BigQuery} = require('@google-cloud/bigquery'); - * - * @example Create a client that uses Application Default Credentials (ADC): - * const bigquery = new BigQuery(); - * - * @example Create a client with explicit credentials: - * const bigquery = new BigQuery({ - * projectId: 'your-project-id', - * keyFilename: '/path/to/keyfile.json' - * }); - * - * @example include:samples/quickstart.js - * region_tag:bigquery_quickstart - * Full quickstart example: - */ -class BigQuery extends common.Service { - constructor(options = {}) { - let apiEndpoint = 'https://bigquery.googleapis.com'; - const EMULATOR_HOST = process.env.BIGQUERY_EMULATOR_HOST; - if (typeof EMULATOR_HOST === 'string') { - apiEndpoint = BigQuery.sanitizeEndpoint(EMULATOR_HOST); - } - if (options.apiEndpoint) { - apiEndpoint = BigQuery.sanitizeEndpoint(options.apiEndpoint); - } - options = Object.assign({}, options, { - apiEndpoint, - }); - const baseUrl = EMULATOR_HOST || `${options.apiEndpoint}/bigquery/v2`; - const config = { - apiEndpoint: options.apiEndpoint, - baseUrl, - scopes: ['https://www.googleapis.com/auth/bigquery'], - packageJson: require('../../package.json'), - }; - if (options.scopes) { - config.scopes = config.scopes.concat(options.scopes); - } - super(config, options); - /** - * @name BigQuery#location - * @type {string} - */ - this.location = options.location; - /** - * Run a query scoped to your project as a readable object stream. - * - * @param {object} query Configuration object. See {@link Query} for a complete - * list of options. - * @returns {stream} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * - * const query = 'SELECT url FROM `publicdata.samples.github_nested` LIMIT - * 100'; - * - * bigquery.createQueryStream(query) - * .on('error', console.error) - * .on('data', function(row) { - * // row is a result from your query. - * }) - * .on('end', function() { - * // All rows retrieved. - * }); - * - * //- - * // If you anticipate many results, you can end a stream early to prevent - * // unnecessary processing and API requests. - * //- - * bigquery.createQueryStream(query) - * .on('data', function(row) { - * this.end(); - * }); - */ - this.createQueryStream = paginator_1.paginator.streamify('queryAsStream_'); - /** - * List all or some of the {@link Dataset} objects in your project as - * a readable object stream. - * - * @param {object} [options] Configuration object. See - * {@link BigQuery#getDatasets} for a complete list of options. - * @returns {stream} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * - * bigquery.getDatasetsStream() - * .on('error', console.error) - * .on('data', function(dataset) { - * // dataset is a Dataset object. - * }) - * .on('end', function() { - * // All datasets retrieved. - * }); - * - * //- - * // If you anticipate many results, you can end a stream early to prevent - * // unnecessary processing and API requests. - * //- - * bigquery.getDatasetsStream() - * .on('data', function(dataset) { - * this.end(); - * }); - */ - this.getDatasetsStream = paginator_1.paginator.streamify('getDatasets'); - /** - * List all or some of the {@link Job} objects in your project as a - * readable object stream. - * - * @param {object} [options] Configuration object. See - * {@link BigQuery#getJobs} for a complete list of options. - * @returns {stream} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * - * bigquery.getJobsStream() - * .on('error', console.error) - * .on('data', function(job) { - * // job is a Job object. - * }) - * .on('end', function() { - * // All jobs retrieved. - * }); - * - * //- - * // If you anticipate many results, you can end a stream early to prevent - * // unnecessary processing and API requests. - * //- - * bigquery.getJobsStream() - * .on('data', function(job) { - * this.end(); - * }); - */ - this.getJobsStream = paginator_1.paginator.streamify('getJobs'); - // Disable `prettyPrint` for better performance. - // https://github.com/googleapis/nodejs-bigquery/issues/858 - this.interceptors.push({ - request: (reqOpts) => { - return extend(true, {}, reqOpts, { qs: { prettyPrint: false } }); - }, - }); - } - static sanitizeEndpoint(url) { - if (!exports.PROTOCOL_REGEX.test(url)) { - url = `https://${url}`; - } - return url.replace(/\/+$/, ''); // Remove trailing slashes - } - /** - * Merge a rowset returned from the API with a table schema. - * - * @private - * - * @param {object} schema - * @param {array} rows - * @param {boolean|IntegerTypeCastOptions} wrapIntegers Wrap values of - * 'INT64' type in {@link BigQueryInt} objects. - * If a `boolean`, this will wrap values in {@link BigQueryInt} objects. - * If an `object`, this will return a value returned by - * `wrapIntegers.integerTypeCastFunction`. - * Please see {@link IntegerTypeCastOptions} for options descriptions. - * @param {array} selectedFields List of fields to return. - * If unspecified, all fields are returned. - * @returns {array} Fields using their matching names from the table's schema. - */ - static mergeSchemaWithRows_(schema, rows, wrapIntegers, selectedFields) { - var _a; - if (selectedFields && selectedFields.length > 0) { - const selectedFieldsArray = selectedFields.map(c => { - return c.split('.'); - }); - const currentFields = selectedFieldsArray.map(c => c.shift()); - //filter schema fields based on selected fields. - schema.fields = (_a = schema.fields) === null || _a === void 0 ? void 0 : _a.filter(field => currentFields - .map(c => c.toLowerCase()) - .indexOf(field.name.toLowerCase()) >= 0); - selectedFields = selectedFieldsArray - .filter(c => c.length > 0) - .map(c => c.join('.')); - } - return arrify(rows) - .map(mergeSchema) - .map(flattenRows); - function mergeSchema(row) { - return row.f.map((field, index) => { - const schemaField = schema.fields[index]; - let value = field.v; - if (schemaField.mode === 'REPEATED') { - value = value.map(val => { - return convert(schemaField, val.v, wrapIntegers, selectedFields); - }); - } - else { - value = convert(schemaField, value, wrapIntegers, selectedFields); - } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const fieldObject = {}; - fieldObject[schemaField.name] = value; - return fieldObject; - }); - } - function convert(schemaField, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - value, wrapIntegers, selectedFields) { - if (is.null(value)) { - return value; - } - switch (schemaField.type) { - case 'BOOLEAN': - case 'BOOL': { - value = value.toLowerCase() === 'true'; - break; - } - case 'BYTES': { - value = Buffer.from(value, 'base64'); - break; - } - case 'FLOAT': - case 'FLOAT64': { - value = Number(value); - break; - } - case 'INTEGER': - case 'INT64': { - value = wrapIntegers - ? typeof wrapIntegers === 'object' - ? BigQuery.int({ integerValue: value, schemaFieldName: schemaField.name }, wrapIntegers).valueOf() - : BigQuery.int(value) - : Number(value); - break; - } - case 'NUMERIC': { - value = new big_js_1.Big(value); - break; - } - case 'BIGNUMERIC': { - value = new big_js_1.Big(value); - break; - } - case 'RECORD': { - value = BigQuery.mergeSchemaWithRows_(schemaField, value, wrapIntegers, selectedFields).pop(); - break; - } - case 'DATE': { - value = BigQuery.date(value); - break; - } - case 'DATETIME': { - value = BigQuery.datetime(value); - break; - } - case 'TIME': { - value = BigQuery.time(value); - break; - } - case 'TIMESTAMP': { - value = BigQuery.timestamp(new Date(value * 1000)); - break; - } - case 'GEOGRAPHY': { - value = BigQuery.geography(value); - break; - } - default: - break; - } - return value; - } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - function flattenRows(rows) { - return rows.reduce((acc, row) => { - const key = Object.keys(row)[0]; - acc[key] = row[key]; - return acc; - }, {}); - } - } - /** - * The `DATE` type represents a logical calendar date, independent of time - * zone. It does not represent a specific 24-hour time period. Rather, a given - * DATE value represents a different 24-hour period when interpreted in - * different time zones, and may represent a shorter or longer day during - * Daylight Savings Time transitions. - * - * @param {object|string} value The date. If a string, this should be in the - * format the API describes: `YYYY-[M]M-[D]D`. - * Otherwise, provide an object. - * @param {string|number} value.year Four digits. - * @param {string|number} value.month One or two digits. - * @param {string|number} value.day One or two digits. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const date = bigquery.date('2017-01-01'); - * - * //- - * // Alternatively, provide an object. - * //- - * const date2 = bigquery.date({ - * year: 2017, - * month: 1, - * day: 1 - * }); - */ - static date(value) { - return new BigQueryDate(value); - } - /** - * @param {object|string} value The date. If a string, this should be in the - * format the API describes: `YYYY-[M]M-[D]D`. - * Otherwise, provide an object. - * @param {string|number} value.year Four digits. - * @param {string|number} value.month One or two digits. - * @param {string|number} value.day One or two digits. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const date = BigQuery.date('2017-01-01'); - * - * //- - * // Alternatively, provide an object. - * //- - * const date2 = BigQuery.date({ - * year: 2017, - * month: 1, - * day: 1 - * }); - */ - date(value) { - return BigQuery.date(value); - } - /** - * A `DATETIME` data type represents a point in time. Unlike a `TIMESTAMP`, - * this does not refer to an absolute instance in time. Instead, it is the - * civil time, or the time that a user would see on a watch or calendar. - * - * @method BigQuery.datetime - * @param {object|string} value The time. If a string, this should be in the - * format the API describes: `YYYY-[M]M-[D]D[ [H]H:[M]M:[S]S[.DDDDDD]]`. - * Otherwise, provide an object. - * @param {string|number} value.year Four digits. - * @param {string|number} value.month One or two digits. - * @param {string|number} value.day One or two digits. - * @param {string|number} [value.hours] One or two digits (`00` - `23`). - * @param {string|number} [value.minutes] One or two digits (`00` - `59`). - * @param {string|number} [value.seconds] One or two digits (`00` - `59`). - * @param {string|number} [value.fractional] Up to six digits for microsecond - * precision. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const datetime = BigQuery.datetime('2017-01-01 13:00:00'); - * - * //- - * // Alternatively, provide an object. - * //- - * const datetime = BigQuery.datetime({ - * year: 2017, - * month: 1, - * day: 1, - * hours: 14, - * minutes: 0, - * seconds: 0 - * }); - */ - /** - * A `DATETIME` data type represents a point in time. Unlike a `TIMESTAMP`, - * this does not refer to an absolute instance in time. Instead, it is the - * civil time, or the time that a user would see on a watch or calendar. - * - * @method BigQuery#datetime - * @param {object|string} value The time. If a string, this should be in the - * format the API describes: `YYYY-[M]M-[D]D[ [H]H:[M]M:[S]S[.DDDDDD]]`. - * Otherwise, provide an object. - * @param {string|number} value.year Four digits. - * @param {string|number} value.month One or two digits. - * @param {string|number} value.day One or two digits. - * @param {string|number} [value.hours] One or two digits (`00` - `23`). - * @param {string|number} [value.minutes] One or two digits (`00` - `59`). - * @param {string|number} [value.seconds] One or two digits (`00` - `59`). - * @param {string|number} [value.fractional] Up to six digits for microsecond - * precision. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const datetime = bigquery.datetime('2017-01-01 13:00:00'); - * - * //- - * // Alternatively, provide an object. - * //- - * const datetime = bigquery.datetime({ - * year: 2017, - * month: 1, - * day: 1, - * hours: 14, - * minutes: 0, - * seconds: 0 - * }); - */ - static datetime(value) { - return new BigQueryDatetime(value); - } - datetime(value) { - return BigQuery.datetime(value); - } - /** - * A `TIME` data type represents a time, independent of a specific date. - * - * @method BigQuery.time - * @param {object|string} value The time. If a string, this should be in the - * format the API describes: `[H]H:[M]M:[S]S[.DDDDDD]`. Otherwise, provide - * an object. - * @param {string|number} [value.hours] One or two digits (`00` - `23`). - * @param {string|number} [value.minutes] One or two digits (`00` - `59`). - * @param {string|number} [value.seconds] One or two digits (`00` - `59`). - * @param {string|number} [value.fractional] Up to six digits for microsecond - * precision. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const time = BigQuery.time('14:00:00'); // 2:00 PM - * - * //- - * // Alternatively, provide an object. - * //- - * const time = BigQuery.time({ - * hours: 14, - * minutes: 0, - * seconds: 0 - * }); - */ - /** - * A `TIME` data type represents a time, independent of a specific date. - * - * @method BigQuery#time - * @param {object|string} value The time. If a string, this should be in the - * format the API describes: `[H]H:[M]M:[S]S[.DDDDDD]`. Otherwise, provide - * an object. - * @param {string|number} [value.hours] One or two digits (`00` - `23`). - * @param {string|number} [value.minutes] One or two digits (`00` - `59`). - * @param {string|number} [value.seconds] One or two digits (`00` - `59`). - * @param {string|number} [value.fractional] Up to six digits for microsecond - * precision. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const time = bigquery.time('14:00:00'); // 2:00 PM - * - * //- - * // Alternatively, provide an object. - * //- - * const time = bigquery.time({ - * hours: 14, - * minutes: 0, - * seconds: 0 - * }); - */ - static time(value) { - return new BigQueryTime(value); - } - time(value) { - return BigQuery.time(value); - } - /** - * A timestamp represents an absolute point in time, independent of any time - * zone or convention such as Daylight Savings Time. - * - * @method BigQuery.timestamp - * @param {Date|string} value The time. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const timestamp = BigQuery.timestamp(new Date()); - */ - /** - * A timestamp represents an absolute point in time, independent of any time - * zone or convention such as Daylight Savings Time. - * - * @method BigQuery#timestamp - * @param {Date|string} value The time. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const timestamp = bigquery.timestamp(new Date()); - */ - static timestamp(value) { - return new BigQueryTimestamp(value); - } - timestamp(value) { - return BigQuery.timestamp(value); - } - /** - * A BigQueryInt wraps 'INT64' values. Can be used to maintain precision. - * - * @method BigQuery#int - * @param {string|number|IntegerTypeCastValue} value The INT64 value to convert. - * @param {IntegerTypeCastOptions} typeCastOptions Configuration to convert - * value. Must provide an `integerTypeCastFunction` to handle conversion. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * - * const largeIntegerValue = Number.MAX_SAFE_INTEGER + 1; - * - * const options = { - * integerTypeCastFunction: value => value.split(), - * }; - * - * const bqInteger = bigquery.int(largeIntegerValue, options); - * - * const customValue = bqInteger.valueOf(); - * // customValue is the value returned from your `integerTypeCastFunction`. - */ - static int(value, typeCastOptions) { - return new BigQueryInt(value, typeCastOptions); - } - int(value, typeCastOptions) { - return BigQuery.int(value, typeCastOptions); - } - /** - * A geography value represents a surface area on the Earth - * in Well-known Text (WKT) format. - * - * @method BigQuery.geography - * @param {string} value The geospatial data. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const geography = BigQuery.geography('POINT(1, 2)'); - */ - /** - * A geography value represents a surface area on the Earth - * in Well-known Text (WKT) format. - * - * @method BigQuery#geography - * @param {string} value The geospatial data. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const geography = bigquery.geography('POINT(1, 2)'); - */ - static geography(value) { - return new Geography(value); - } - geography(value) { - return BigQuery.geography(value); - } - /** - * Convert an INT64 value to Number. - * - * @private - * @param {object} value The INT64 value to convert. - */ - static decodeIntegerValue_(value) { - const num = Number(value.integerValue); - if (!Number.isSafeInteger(num)) { - throw new Error('We attempted to return all of the numeric values, but ' + - (value.schemaFieldName ? value.schemaFieldName + ' ' : '') + - 'value ' + - value.integerValue + - " is out of bounds of 'Number.MAX_SAFE_INTEGER'.\n" + - "To prevent this error, please consider passing 'options.wrapNumbers' as\n" + - '{\n' + - ' integerTypeCastFunction: provide \n' + - ' fields: optionally specify field name(s) to be custom casted\n' + - '}\n'); - } - return num; - } - /** - * Return a value's provided type. - * - * @private - * - * @throws {error} If the type provided is invalid. - * - * @see [Data Type]{@link https://cloud.google.com/bigquery/data-types} - * - * @param {*} providedType The type. - * @returns {string} The valid type provided. - */ - static getTypeDescriptorFromProvidedType_(providedType) { - // The list of types can be found in src/types.d.ts - const VALID_TYPES = [ - 'DATE', - 'DATETIME', - 'TIME', - 'TIMESTAMP', - 'BYTES', - 'NUMERIC', - 'BIGNUMERIC', - 'BOOL', - 'INT64', - 'FLOAT64', - 'STRING', - 'GEOGRAPHY', - 'ARRAY', - 'STRUCT', - ]; - if (is.array(providedType)) { - providedType = providedType; - return { - type: 'ARRAY', - arrayType: BigQuery.getTypeDescriptorFromProvidedType_(providedType[0]), - }; - } - else if (is.object(providedType)) { - return { - type: 'STRUCT', - structTypes: Object.keys(providedType).map(prop => { - return { - name: prop, - type: BigQuery.getTypeDescriptorFromProvidedType_(providedType[prop]), - }; - }), - }; - } - providedType = providedType.toUpperCase(); - if (!VALID_TYPES.includes(providedType)) { - throw new Error(`Invalid type provided: "${providedType}"`); - } - return { type: providedType.toUpperCase() }; - } - /** - * Detect a value's type. - * - * @private - * - * @throws {error} If the type could not be detected. - * - * @see [Data Type]{@link https://cloud.google.com/bigquery/data-types} - * - * @param {*} value The value. - * @returns {string} The type detected from the value. - */ - static getTypeDescriptorFromValue_(value) { - let typeName; - if (value === null) { - throw new Error("Parameter types must be provided for null values via the 'types' field in query options."); - } - if (value instanceof BigQueryDate) { - typeName = 'DATE'; - } - else if (value instanceof BigQueryDatetime) { - typeName = 'DATETIME'; - } - else if (value instanceof BigQueryTime) { - typeName = 'TIME'; - } - else if (value instanceof BigQueryTimestamp) { - typeName = 'TIMESTAMP'; - } - else if (value instanceof Buffer) { - typeName = 'BYTES'; - } - else if (value instanceof big_js_1.Big) { - if (value.c.length - value.e >= 10) { - typeName = 'BIGNUMERIC'; - } - else { - typeName = 'NUMERIC'; - } - } - else if (value instanceof BigQueryInt) { - typeName = 'INT64'; - } - else if (value instanceof Geography) { - typeName = 'GEOGRAPHY'; - } - else if (Array.isArray(value)) { - if (value.length === 0) { - throw new Error("Parameter types must be provided for empty arrays via the 'types' field in query options."); - } - return { - type: 'ARRAY', - arrayType: BigQuery.getTypeDescriptorFromValue_(value[0]), - }; - } - else if (is.boolean(value)) { - typeName = 'BOOL'; - } - else if (is.number(value)) { - typeName = value % 1 === 0 ? 'INT64' : 'FLOAT64'; - } - else if (is.object(value)) { - return { - type: 'STRUCT', - structTypes: Object.keys(value).map(prop => { - return { - name: prop, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - type: BigQuery.getTypeDescriptorFromValue_(value[prop]), - }; - }), - }; - } - else if (is.string(value)) { - typeName = 'STRING'; - } - if (!typeName) { - throw new Error([ - 'This value could not be translated to a BigQuery data type.', - value, - ].join('\n')); - } - return { - type: typeName, - }; - } - /** - * Convert a value into a `queryParameter` object. - * - * @private - * - * @see [Jobs.query API Reference Docs (see `queryParameters`)]{@link https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs/query#request-body} - * - * @param {*} value The value. - * @param {string|ProvidedTypeStruct|ProvidedTypeArray} providedType Provided - * query parameter type. - * @returns {object} A properly-formed `queryParameter` object. - */ - static valueToQueryParameter_( - // eslint-disable-next-line @typescript-eslint/no-explicit-any - value, providedType) { - if (is.date(value)) { - value = BigQuery.timestamp(value); - } - let parameterType; - if (providedType) { - parameterType = BigQuery.getTypeDescriptorFromProvidedType_(providedType); - } - else { - parameterType = BigQuery.getTypeDescriptorFromValue_(value); - } - const queryParameter = { parameterType, parameterValue: {} }; - const typeName = queryParameter.parameterType.type; - if (typeName === 'ARRAY') { - queryParameter.parameterValue.arrayValues = value.map(itemValue => { - const value = BigQuery._getValue(itemValue, parameterType.arrayType); - if (is.object(value) || is.array(value)) { - if (is.array(providedType)) { - providedType = providedType; - return BigQuery.valueToQueryParameter_(value, providedType[0]) - .parameterValue; - } - else { - return BigQuery.valueToQueryParameter_(value).parameterValue; - } - } - return { value }; - }); - } - else if (typeName === 'STRUCT') { - queryParameter.parameterValue.structValues = Object.keys(value).reduce((structValues, prop) => { - let nestedQueryParameter; - if (providedType) { - nestedQueryParameter = BigQuery.valueToQueryParameter_(value[prop], providedType[prop]); - } - else { - nestedQueryParameter = BigQuery.valueToQueryParameter_(value[prop]); - } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - structValues[prop] = nestedQueryParameter.parameterValue; - return structValues; - }, {}); - } - else { - queryParameter.parameterValue.value = BigQuery._getValue(value, parameterType); - } - return queryParameter; - } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - static _getValue(value, type) { - if (value === null) { - return null; - } - if (value.type) - type = value; - return BigQuery._isCustomType(type) ? value.value : value; - } - static _isCustomType({ type }) { - return (type.indexOf('TIME') > -1 || - type.indexOf('DATE') > -1 || - type.indexOf('GEOGRAPHY') > -1 || - type.indexOf('BigQueryInt') > -1); - } - /** - * Create a dataset. - * - * @see [Datasets: insert API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/v2/datasets/insert} - * - * @param {string} id ID of the dataset to create. - * @param {object} [options] See a - * [Dataset - * resource](https://cloud.google.com/bigquery/docs/reference/v2/datasets#resource). - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this request - * @param {Dataset} callback.dataset The newly created dataset - * @param {object} callback.apiResponse The full API response. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * - * bigquery.createDataset('my-dataset', function(err, dataset, apiResponse) - * {}); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * bigquery.createDataset('my-dataset').then(function(data) { - * const dataset = data[0]; - * const apiResponse = data[1]; - * }); - */ - createDataset(id, optionsOrCallback, cb) { - const options = typeof optionsOrCallback === 'object' ? optionsOrCallback : {}; - const callback = typeof optionsOrCallback === 'function' ? optionsOrCallback : cb; - this.request({ - method: 'POST', - uri: '/datasets', - json: extend(true, { - location: this.location, - }, options, { - datasetReference: { - datasetId: id, - }, - }), - }, (err, resp) => { - if (err) { - callback(err, null, resp); - return; - } - const dataset = this.dataset(id); - dataset.metadata = resp; - callback(null, dataset, resp); - }); - } - /** - * Run a query as a job. No results are immediately returned. Instead, your - * callback will be executed with a {@link Job} object that you must - * ping for the results. See the Job documentation for explanations of how to - * check on the status of the job. - * - * @see [Jobs: insert API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/v2/jobs/insert} - * - * @param {object|string} options The configuration object. This must be in - * the format of the [`configuration.query`](https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationQuery) - * property of a Jobs resource. If a string is provided, this is used as the - * query string, and all other options are defaulted. - * @param {Table} [options.destination] The table to save the - * query's results to. If omitted, a new table will be created. - * @param {boolean} [options.dryRun] If set, don't actually run this job. A - * valid query will update the job with processing statistics. These can - * be accessed via `job.metadata`. - * @param {object} [options.labels] String key/value pairs to be attached as - * labels to the newly created Job. - * @param {string} [options.location] The geographic location of the job. - * Required except for US and EU. - * @param {number} [options.jobTimeoutMs] Job timeout in milliseconds. - * If this time limit is exceeded, BigQuery might attempt to stop the job. - * @param {string} [options.jobId] Custom job id. - * @param {string} [options.jobPrefix] Prefix to apply to the job id. - * @param {string} options.query A query string, following the BigQuery query - * syntax, of the query to execute. - * @param {boolean} [options.useLegacySql=false] Option to use legacy sql syntax. - * @param {object} [options.defaultDataset] The dataset. This must be in - * the format of the [`DatasetReference`](https://cloud.google.com/bigquery/docs/reference/rest/v2/datasets#DatasetReference) - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this request. - * @param {Job} callback.job The newly created job for your query. - * @param {object} callback.apiResponse The full API response. - * @returns {Promise} - * - * @throws {Error} If a query is not specified. - * @throws {Error} If a Table is not provided as a destination. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * - * const query = 'SELECT url FROM `publicdata.samples.github_nested` LIMIT - * 100'; - * - * //- - * // You may pass only a query string, having a new table created to store - * the - * // results of the query. - * //- - * bigquery.createQueryJob(query, function(err, job) {}); - * - * //- - * // You can also control the destination table by providing a - * // {@link Table} object. - * //- - * bigquery.createQueryJob({ - * destination: bigquery.dataset('higher_education').table('institutions'), - * query: query - * }, function(err, job) {}); - * - * //- - * // After you have run `createQueryJob`, your query will execute in a job. - * Your - * // callback is executed with a {@link Job} object so that you may - * // check for the results. - * //- - * bigquery.createQueryJob(query, function(err, job) { - * if (!err) { - * job.getQueryResults(function(err, rows, apiResponse) {}); - * } - * }); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * bigquery.createQueryJob(query).then(function(data) { - * const job = data[0]; - * const apiResponse = data[1]; - * - * return job.getQueryResults(); - * }); - */ - createQueryJob(opts, callback) { - const options = typeof opts === 'object' ? opts : { query: opts }; - if ((!options || !options.query) && !options.pageToken) { - throw new Error('A SQL query string is required.'); - } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const query = extend(true, { - useLegacySql: false, - }, options); - if (options.destination) { - if (!(options.destination instanceof table_1.Table)) { - throw new Error('Destination must be a Table object.'); - } - query.destinationTable = { - datasetId: options.destination.dataset.id, - projectId: options.destination.dataset.bigQuery.projectId, - tableId: options.destination.id, - }; - delete query.destination; - } - if (query.params) { - query.parameterMode = is.array(query.params) ? 'positional' : 'named'; - if (query.parameterMode === 'named') { - query.queryParameters = []; - // tslint:disable-next-line forin - for (const namedParameter in query.params) { - const value = query.params[namedParameter]; - let queryParameter; - if (query.types) { - if (!is.object(query.types)) { - throw new Error('Provided types must match the value type passed to `params`'); - } - if (query.types[namedParameter]) { - queryParameter = BigQuery.valueToQueryParameter_(value, query.types[namedParameter]); - } - else { - queryParameter = BigQuery.valueToQueryParameter_(value); - } - } - else { - queryParameter = BigQuery.valueToQueryParameter_(value); - } - queryParameter.name = namedParameter; - query.queryParameters.push(queryParameter); - } - } - else { - query.queryParameters = []; - if (query.types) { - if (!is.array(query.types)) { - throw new Error('Provided types must match the value type passed to `params`'); - } - if (query.params.length !== query.types.length) { - throw new Error('Incorrect number of parameter types provided.'); - } - query.params.forEach((value, i) => { - const queryParameter = BigQuery.valueToQueryParameter_(value, query.types[i]); - query.queryParameters.push(queryParameter); - }); - } - else { - query.params.forEach((value) => { - const queryParameter = BigQuery.valueToQueryParameter_(value); - query.queryParameters.push(queryParameter); - }); - } - } - delete query.params; - } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const reqOpts = { - configuration: { - query, - }, - }; - if (typeof query.jobTimeoutMs === 'number') { - reqOpts.configuration.jobTimeoutMs = query.jobTimeoutMs; - delete query.jobTimeoutMs; - } - if (query.dryRun) { - reqOpts.configuration.dryRun = query.dryRun; - delete query.dryRun; - } - if (query.labels) { - reqOpts.configuration.labels = query.labels; - delete query.labels; - } - if (query.jobPrefix) { - reqOpts.jobPrefix = query.jobPrefix; - delete query.jobPrefix; - } - if (query.location) { - reqOpts.location = query.location; - delete query.location; - } - if (query.jobId) { - reqOpts.jobId = query.jobId; - delete query.jobId; - } - this.createJob(reqOpts, callback); - } - /** - * Creates a job. Typically when creating a job you'll have a very specific - * task in mind. For this we recommend one of the following methods: - * - * - {@link BigQuery#createQueryJob} - * - {@link Table#createCopyJob} - * - {@link Table#createCopyFromJob} - * - {@link Table#createExtractJob} - * - {@link Table#createLoadJob} - * - * However in the event you need a finer level of control over the job - * creation, you can use this method to pass in a raw [Job - * resource](https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs) - * object. - * - * @see [Jobs Overview]{@link https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs} - * @see [Jobs: insert API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/v2/jobs/insert} - * - * @param {object} options Object in the form of a [Job resource](https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs); - * @param {string} [options.jobId] Custom job id. - * @param {string} [options.jobPrefix] Prefix to apply to the job id. - * @param {string} [options.location] The geographic location of the job. - * Required except for US and EU. - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this request. - * @param {Job} callback.job The newly created job. - * @param {object} callback.apiResponse The full API response. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * - * const options = { - * configuration: { - * query: { - * query: 'SELECT url FROM `publicdata.samples.github_nested` LIMIT 100' - * } - * } - * }; - * - * bigquery.createJob(options, function(err, job) { - * if (err) { - * // Error handling omitted. - * } - * - * job.getQueryResults(function(err, rows) {}); - * }); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * bigquery.createJob(options).then(function(data) { - * const job = data[0]; - * - * return job.getQueryResults(); - * }); - */ - createJob(options, callback) { - const JOB_ID_PROVIDED = typeof options.jobId !== 'undefined'; - const reqOpts = Object.assign({}, options); - let jobId = JOB_ID_PROVIDED ? reqOpts.jobId : uuid.v4(); - if (reqOpts.jobId) { - delete reqOpts.jobId; - } - if (reqOpts.jobPrefix) { - jobId = reqOpts.jobPrefix + jobId; - delete reqOpts.jobPrefix; - } - reqOpts.jobReference = { - projectId: this.projectId, - jobId, - location: this.location, - }; - if (options.location) { - reqOpts.jobReference.location = options.location; - delete reqOpts.location; - } - const job = this.job(jobId, { - location: reqOpts.jobReference.location, - }); - this.request({ - method: 'POST', - uri: '/jobs', - json: reqOpts, - }, async (err, resp) => { - const ALREADY_EXISTS_CODE = 409; - if (err) { - if (err.code === ALREADY_EXISTS_CODE && - !JOB_ID_PROVIDED) { - // The last insert attempt flaked, but the API still processed the - // request and created the job. Because of our "autoRetry" feature, - // we tried the request again, which tried to create it again, - // unnecessarily. We will get the job's metadata and treat it as if - // it just came back from the create call. - err = null; - [resp] = await job.getMetadata(); - } - else { - callback(err, null, resp); - return; - } - } - if (resp.status.errors) { - err = new common.util.ApiError({ - errors: resp.status.errors, - response: resp, - }); - } - // Update the location with the one used by the API. - job.location = resp.jobReference.location; - job.metadata = resp; - callback(err, job, resp); - }); - } - /** - * Create a reference to a dataset. - * - * @param {string} id ID of the dataset. - * @param {object} [options] Dataset options. - * @param {string} [options.location] The geographic location of the dataset. - * Required except for US and EU. - * @returns {Dataset} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('higher_education'); - */ - dataset(id, options) { - if (typeof id !== 'string') { - throw new TypeError('A dataset ID is required.'); - } - if (this.location) { - options = extend({ location: this.location }, options); - } - return new dataset_1.Dataset(this, id, options); - } - /** - * List all or some of the datasets in your project. - * - * @see [Datasets: list API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/v2/datasets/list} - * - * @param {object} [options] Configuration object. - * @param {boolean} [options.all] List all datasets, including hidden ones. - * @param {boolean} [options.autoPaginate] Have pagination handled automatically. - * Default: true. - * @param {number} [options.maxApiCalls] Maximum number of API calls to make. - * @param {number} [options.maxResults] Maximum number of results to return. - * @param {string} [options.pageToken] Token returned from a previous call, to - * request the next page of results. - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this request - * @param {Dataset[]} callback.datasets The list of datasets in your project. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * - * bigquery.getDatasets(function(err, datasets) { - * if (!err) { - * // datasets is an array of Dataset objects. - * } - * }); - * - * //- - * // To control how many API requests are made and page through the results - * // manually, set `autoPaginate` to `false`. - * //- - * function manualPaginationCallback(err, datasets, nextQuery, apiResponse) { - * if (nextQuery) { - * // More results exist. - * bigquery.getDatasets(nextQuery, manualPaginationCallback); - * } - * } - * - * bigquery.getDatasets({ - * autoPaginate: false - * }, manualPaginationCallback); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * bigquery.getDatasets().then(function(datasets) {}); - */ - getDatasets(optionsOrCallback, cb) { - const options = typeof optionsOrCallback === 'object' ? optionsOrCallback : {}; - const callback = typeof optionsOrCallback === 'function' ? optionsOrCallback : cb; - this.request({ - uri: '/datasets', - qs: options, - }, (err, resp) => { - if (err) { - callback(err, null, null, resp); - return; - } - let nextQuery = null; - if (resp.nextPageToken) { - nextQuery = Object.assign({}, options, { - pageToken: resp.nextPageToken, - }); - } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const datasets = (resp.datasets || []).map((dataset) => { - const ds = this.dataset(dataset.datasetReference.datasetId, { - location: dataset.location, - }); - ds.metadata = dataset; - return ds; - }); - callback(null, datasets, nextQuery, resp); - }); - } - /** - * Get all of the jobs from your project. - * - * @see [Jobs: list API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/v2/jobs/list} - * - * @param {object} [options] Configuration object. - * @param {boolean} [options.allUsers] Display jobs owned by all users in the - * project. - * @param {boolean} [options.autoPaginate] Have pagination handled - * automatically. Default: true. - * @param {number} [options.maxApiCalls] Maximum number of API calls to make. - * @param {number} [options.maxResults] Maximum number of results to return. - * @param {string} [options.pageToken] Token returned from a previous call, to - * request the next page of results. - * @param {string} [options.projection] Restrict information returned to a set - * of selected fields. Acceptable values are "full", for all job data, and - * "minimal", to not include the job configuration. - * @param {string} [options.stateFilter] Filter for job state. Acceptable - * values are "done", "pending", and "running". Sending an array to this - * option performs a disjunction. - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this request - * @param {Job[]} callback.jobs The list of jobs in your - * project. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * - * bigquery.getJobs(function(err, jobs) { - * if (!err) { - * // jobs is an array of Job objects. - * } - * }); - * - * //- - * // To control how many API requests are made and page through the results - * // manually, set `autoPaginate` to `false`. - * //- - * function manualPaginationCallback(err, jobs, nextQuery, apiRespose) { - * if (nextQuery) { - * // More results exist. - * bigquery.getJobs(nextQuery, manualPaginationCallback); - * } - * } - * - * bigquery.getJobs({ - * autoPaginate: false - * }, manualPaginationCallback); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * bigquery.getJobs().then(function(data) { - * const jobs = data[0]; - * }); - */ - getJobs(optionsOrCallback, cb) { - const options = typeof optionsOrCallback === 'object' ? optionsOrCallback : {}; - const callback = typeof optionsOrCallback === 'function' ? optionsOrCallback : cb; - this.request({ - uri: '/jobs', - qs: options, - useQuerystring: true, - }, (err, resp) => { - if (err) { - callback(err, null, null, resp); - return; - } - let nextQuery = null; - if (resp.nextPageToken) { - nextQuery = Object.assign({}, options, { - pageToken: resp.nextPageToken, - }); - } - const jobs = (resp.jobs || []).map((jobObject) => { - const job = this.job(jobObject.jobReference.jobId, { - location: jobObject.jobReference.location, - }); - job.metadata = jobObject; - return job; - }); - callback(null, jobs, nextQuery, resp); - }); - } - /** - * Create a reference to an existing job. - * - * @param {string} id ID of the job. - * @param {object} [options] Configuration object. - * @param {string} [options.location] The geographic location of the job. - * Required except for US and EU. - * @returns {Job} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * - * const myExistingJob = bigquery.job('job-id'); - */ - job(id, options) { - if (this.location) { - options = extend({ location: this.location }, options); - } - return new job_1.Job(this, id, options); - } - /** - * Run a query scoped to your project. For manual pagination please refer to - * {@link BigQuery#createQueryJob}. - * - * @see [Jobs: query API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/v2/jobs/query} - * - * @param {string|object} query A string SQL query or configuration object. - * For all available options, see - * [Jobs: query request - * body](https://cloud.google.com/bigquery/docs/reference/v2/jobs/query#request-body). - * @param {string} [query.location] The geographic location of the job. - * Required except for US and EU. - * @param {string} [query.jobId] Custom id for the underlying job. - * @param {string} [query.jobPrefix] Prefix to apply to the underlying job id. - * @param {object|Array<*>} query.params For positional SQL parameters, provide - * an array of values. For named SQL parameters, provide an object which - * maps each named parameter to its value. The supported types are - * integers, floats, {@link BigQuery#date} objects, {@link BigQuery#datetime} - * objects, {@link BigQuery#time} objects, {@link BigQuery#timestamp} - * objects, Strings, Booleans, and Objects. - * @param {string} query.query A query string, following the BigQuery query - * syntax, of the query to execute. - * @param {object|Array<*>} query.types Provided types for query parameters. - * For positional SQL parameters, provide an array of types. For named - * SQL parameters, provide an object which maps each named parameter to - * its type. - * @param {boolean} [query.useLegacySql=false] Option to use legacy sql syntax. - * @param {object} [options] Configuration object for query results. - * @param {number} [options.maxResults] Maximum number of results to read. - * @param {number} [options.timeoutMs] How long to wait for the query to - * complete, in milliseconds, before returning. Default is 10 seconds. - * If the timeout passes before the job completes, an error will be returned - * and the 'jobComplete' field in the response will be false. - * @param {boolean|IntegerTypeCastOptions} [options.wrapIntegers=false] Wrap values - * of 'INT64' type in {@link BigQueryInt} objects. - * If a `boolean`, this will wrap values in {@link BigQueryInt} objects. - * If an `object`, this will return a value returned by - * `wrapIntegers.integerTypeCastFunction`. - * Please see {@link IntegerTypeCastOptions} for options descriptions. - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this request - * @param {array} callback.rows The list of results from your query. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * - * const query = 'SELECT url FROM `publicdata.samples.github_nested` LIMIT - * 100'; - * - * bigquery.query(query, function(err, rows) { - * if (!err) { - * // rows is an array of results. - * } - * }); - * - * //- - * // Positional SQL parameters are supported. - * //- - * bigquery.query({ - * query: [ - * 'SELECT url', - * 'FROM `publicdata.samples.github_nested`', - * 'WHERE repository.owner = ?' - * ].join(' '), - * - * params: [ - * 'google' - * ] - * }, function(err, rows) {}); - * - * //- - * // Or if you prefer to name them, that's also supported. - * //- - * bigquery.query({ - * query: [ - * 'SELECT url', - * 'FROM `publicdata.samples.github_nested`', - * 'WHERE repository.owner = @owner' - * ].join(' '), - * params: { - * owner: 'google' - * } - * }, function(err, rows) {}); - * - * //- - * // Providing types for SQL parameters is supported. - * //- - * bigquery.query({ - * query: [ - * 'SELECT url', - * 'FROM `publicdata.samples.github_nested`', - * 'WHERE repository.owner = ?' - * ].join(' '), - * - * params: [ - * null - * ], - * - * types: ['string'] - * }, function(err, rows) {}); - * - * //- - * // If you need to use a `DATE`, `DATETIME`, `TIME`, or `TIMESTAMP` type in - * // your query, see {@link BigQuery#date}, {@link BigQuery#datetime}, - * // {@link BigQuery#time}, and {@link BigQuery#timestamp}. - * //- - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * bigquery.query(query).then(function(data) { - * const rows = data[0]; - * }); - */ - query(query, optionsOrCallback, cb) { - let options = typeof optionsOrCallback === 'object' ? optionsOrCallback : {}; - const callback = typeof optionsOrCallback === 'function' ? optionsOrCallback : cb; - this.createQueryJob(query, (err, job, resp) => { - if (err) { - callback(err, null, resp); - return; - } - if (typeof query === 'object' && query.dryRun) { - callback(null, [], resp); - return; - } - // The Job is important for the `queryAsStream_` method, so a new query - // isn't created each time results are polled for. - options = extend({ job }, options); - job.getQueryResults(options, callback); - }); - } - /** - * This method will be called by `createQueryStream()`. It is required to - * properly set the `autoPaginate` option value. - * - * @private - */ - queryAsStream_(query, optionsOrCallback, cb) { - let options = typeof optionsOrCallback === 'object' ? optionsOrCallback : {}; - const callback = typeof optionsOrCallback === 'function' ? optionsOrCallback : cb; - options = query.job - ? extend(query, options) - : extend(options, { autoPaginate: false }); - if (query.job) { - query.job.getQueryResults(options, callback); - return; - } - this.query(query, options, callback); - } -} -exports.BigQuery = BigQuery; -/*! Developer Documentation - * - * These methods can be auto-paginated. - */ -paginator_1.paginator.extend(BigQuery, ['getDatasets', 'getJobs']); -/*! Developer Documentation - * - * All async methods (except for streams) will return a Promise in the event - * that a callback is omitted. - */ -promisify_1.promisifyAll(BigQuery, { - exclude: [ - 'dataset', - 'date', - 'datetime', - 'geography', - 'int', - 'job', - 'time', - 'timestamp', - ], -}); -/** - * Date class for BigQuery. - */ -class BigQueryDate { - constructor(value) { - if (typeof value === 'object') { - value = BigQuery.datetime(value).value; - } - this.value = value; - } -} -exports.BigQueryDate = BigQueryDate; -/** - * Geography class for BigQuery. - */ -class Geography { - constructor(value) { - this.value = value; - } -} -exports.Geography = Geography; -/** - * Timestamp class for BigQuery. - */ -class BigQueryTimestamp { - constructor(value) { - this.value = new Date(value).toJSON(); - } -} -exports.BigQueryTimestamp = BigQueryTimestamp; -/** - * Datetime class for BigQuery. - */ -class BigQueryDatetime { - constructor(value) { - if (typeof value === 'object') { - let time; - if (value.hours) { - time = BigQuery.time(value).value; - } - const y = value.year; - const m = value.month; - const d = value.day; - time = time ? ' ' + time : ''; - value = `${y}-${m}-${d}${time}`; - } - else { - value = value.replace(/^(.*)T(.*)Z$/, '$1 $2'); - } - this.value = value; - } -} -exports.BigQueryDatetime = BigQueryDatetime; -/** - * Time class for BigQuery. - */ -class BigQueryTime { - constructor(value) { - if (typeof value === 'object') { - const h = value.hours; - const m = value.minutes || 0; - const s = value.seconds || 0; - const f = is.defined(value.fractional) ? '.' + value.fractional : ''; - value = `${h}:${m}:${s}${f}`; - } - this.value = value; - } -} -exports.BigQueryTime = BigQueryTime; -/** - * Build a BigQueryInt object. For long integers, a string can be provided. - * - * @class - * @param {string|number|IntegerTypeCastValue} value The 'INT64' value. - * @param {object} [typeCastOptions] Configuration to convert - * values of 'INT64' type to a custom value. Must provide an - * `integerTypeCastFunction` to handle conversion. - * @param {function} typeCastOptions.integerTypeCastFunction A custom user - * provided function to convert value. - * @param {string|string[]} [typeCastOptions.fields] Schema field - * names to be converted using `integerTypeCastFunction`. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const anInt = bigquery.int(7); - */ -class BigQueryInt extends Number { - constructor(value, typeCastOptions) { - super(typeof value === 'object' ? value.integerValue : value); - this._schemaFieldName = - typeof value === 'object' ? value.schemaFieldName : undefined; - this.value = - typeof value === 'object' - ? value.integerValue.toString() - : value.toString(); - this.type = 'BigQueryInt'; - if (typeCastOptions) { - if (typeof typeCastOptions.integerTypeCastFunction !== 'function') { - throw new Error('integerTypeCastFunction is not a function or was not provided.'); - } - const typeCastFields = typeCastOptions.fields - ? arrify(typeCastOptions.fields) - : undefined; - let customCast = true; - if (typeCastFields) { - customCast = this._schemaFieldName - ? typeCastFields.includes(this._schemaFieldName) - ? true - : false - : false; - } - customCast && - (this.typeCastFunction = typeCastOptions.integerTypeCastFunction); - } - } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - valueOf() { - const shouldCustomCast = this.typeCastFunction ? true : false; - if (shouldCustomCast) { - try { - return this.typeCastFunction(this.value); - } - catch (error) { - error.message = `integerTypeCastFunction threw an error:\n\n - ${error.message}`; - throw error; - } - } - else { - // return this.value; - return BigQuery.decodeIntegerValue_({ - integerValue: this.value, - schemaFieldName: this._schemaFieldName, - }); - } - } - toJSON() { - return { type: this.type, value: this.value }; - } -} -exports.BigQueryInt = BigQueryInt; -//# sourceMappingURL=bigquery.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/dataset.d.ts b/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/dataset.d.ts deleted file mode 100644 index 17f6de4..0000000 --- a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/dataset.d.ts +++ /dev/null @@ -1,171 +0,0 @@ -/*! - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/// -import { DeleteCallback, Metadata, ServiceObject } from '@google-cloud/common'; -import { ResourceStream } from '@google-cloud/paginator'; -import { Duplex } from 'stream'; -import { BigQuery, PagedCallback, PagedRequest, PagedResponse, Query, QueryRowsResponse, ResourceCallback, SimpleQueryRowsCallback } from './bigquery'; -import { JobCallback, JobResponse, Table, TableMetadata, TableOptions } from './table'; -import { Model } from './model'; -import { Routine } from './routine'; -import bigquery from './types'; -export interface DatasetDeleteOptions { - force?: boolean; -} -export interface DatasetOptions { - location?: string; -} -export declare type CreateDatasetOptions = bigquery.IDataset; -export declare type GetModelsOptions = PagedRequest; -export declare type GetModelsResponse = PagedResponse; -export declare type GetModelsCallback = PagedCallback; -export declare type GetRoutinesOptions = PagedRequest; -export declare type GetRoutinesResponse = PagedResponse; -export declare type GetRoutinesCallback = PagedCallback; -export declare type GetTablesOptions = PagedRequest; -export declare type GetTablesResponse = PagedResponse; -export declare type GetTablesCallback = PagedCallback; -export declare type RoutineMetadata = bigquery.IRoutine; -export declare type RoutineResponse = [Routine, bigquery.IRoutine]; -export declare type RoutineCallback = ResourceCallback; -export declare type TableResponse = [Table, bigquery.ITable]; -export declare type TableCallback = ResourceCallback; -/** - * Interact with your BigQuery dataset. Create a Dataset instance with - * {@link BigQuery#createDataset} or {@link BigQuery#dataset}. - * - * @class - * @param {BigQuery} bigQuery {@link BigQuery} instance. - * @param {string} id The ID of the Dataset. - * @param {object} [options] Dataset options. - * @param {string} [options.location] The geographic location of the dataset. - * Defaults to US. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('institutions'); - */ -declare class Dataset extends ServiceObject { - bigQuery: BigQuery; - location?: string; - getModelsStream: (options?: GetModelsOptions) => ResourceStream; - getRoutinesStream: (options?: GetRoutinesOptions) => ResourceStream; - getTablesStream: (options?: GetTablesOptions) => ResourceStream; - constructor(bigQuery: BigQuery, id: string, options?: DatasetOptions); - createQueryJob(options: string | Query): Promise; - createQueryJob(options: string | Query, callback: JobCallback): void; - /** - * Run a query scoped to your dataset as a readable object stream. - * - * See {@link BigQuery#createQueryStream} for full documentation of this - * method. - * - * @param {object} options See {@link BigQuery#createQueryStream} for full - * documentation of this method. - * @returns {stream} - */ - createQueryStream(options: Query | string): Duplex; - createRoutine(id: string, config: RoutineMetadata): Promise; - createRoutine(id: string, config: RoutineMetadata, callback: RoutineCallback): void; - createTable(id: string, options: TableMetadata): Promise; - createTable(id: string, options: TableMetadata, callback: TableCallback): void; - createTable(id: string, callback: TableCallback): void; - delete(options?: DatasetDeleteOptions): Promise<[Metadata]>; - delete(options: DatasetDeleteOptions, callback: DeleteCallback): void; - delete(callback: DeleteCallback): void; - getModels(options?: GetModelsOptions): Promise; - getModels(options: GetModelsOptions, callback: GetModelsCallback): void; - getModels(callback: GetModelsCallback): void; - getRoutines(options?: GetRoutinesOptions): Promise; - getRoutines(options: GetRoutinesOptions, callback: GetRoutinesCallback): void; - getRoutines(callback: GetRoutinesCallback): void; - getTables(options?: GetTablesOptions): Promise; - getTables(options: GetTablesOptions, callback: GetTablesCallback): void; - getTables(callback: GetTablesCallback): void; - /** - * Create a {@link Model} object. - * - * @throws {TypeError} if model ID is missing. - * - * @param {string} id The ID of the model. - * @return {Model} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('institutions'); - * - * const model = dataset.model('my-model'); - */ - model(id: string): Model; - /** - * Run a query scoped to your dataset. - * - * See {@link BigQuery#query} for full documentation of this method. - * - * @param {object} options See {@link BigQuery#query} for full documentation of this method. - * @param {function} [callback] See {@link BigQuery#query} for full documentation of this method. - * @returns {Promise} See {@link BigQuery#query} for full documentation of this method. - */ - query(options: Query): Promise; - query(options: Query, callback: SimpleQueryRowsCallback): void; - /** - * Create a Routine object. - * - * @throws {TypeError} if routine ID is missing. - * - * @param {string} id The ID of the routine. - * @returns {Routine} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('institutions'); - * - * const routine = dataset.routine('my_routine'); - */ - routine(id: string): Routine; - /** - * Create a Table object. - * - * @throws {TypeError} if table ID is missing. - * - * @param {string} id The ID of the table. - * @param {object} [options] Table options. - * @param {string} [options.location] The geographic location of the table, by - * default this value is inherited from the dataset. This can be used to - * configure the location of all jobs created through a table instance. - * It cannot be used to set the actual location of the table. This value will - * be superseded by any API responses containing location data for the - * table. - * @return {Table} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('institutions'); - * - * const institutions = dataset.table('institution_data'); - */ - table(id: string, options?: TableOptions): Table; -} -/** - * Reference to the {@link Dataset} class. - * @name module:@google-cloud/bigquery.Dataset - * @see Dataset - */ -export { Dataset }; diff --git a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/dataset.js b/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/dataset.js deleted file mode 100644 index fab57cb..0000000 --- a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/dataset.js +++ /dev/null @@ -1,878 +0,0 @@ -"use strict"; -/*! - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Dataset = void 0; -const common_1 = require("@google-cloud/common"); -const paginator_1 = require("@google-cloud/paginator"); -const promisify_1 = require("@google-cloud/promisify"); -const extend = require("extend"); -const table_1 = require("./table"); -const model_1 = require("./model"); -const routine_1 = require("./routine"); -/** - * Interact with your BigQuery dataset. Create a Dataset instance with - * {@link BigQuery#createDataset} or {@link BigQuery#dataset}. - * - * @class - * @param {BigQuery} bigQuery {@link BigQuery} instance. - * @param {string} id The ID of the Dataset. - * @param {object} [options] Dataset options. - * @param {string} [options.location] The geographic location of the dataset. - * Defaults to US. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('institutions'); - */ -class Dataset extends common_1.ServiceObject { - constructor(bigQuery, id, options) { - const methods = { - /** - * Create a dataset. - * - * @method Dataset#create - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this - * request. - * @param {Dataset} callback.dataset The created dataset. - * @param {object} callback.apiResponse The full API response. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('institutions'); - * dataset.create((err, dataset, apiResponse) => { - * if (!err) { - * // The dataset was created successfully. - * } - * }); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * dataset.create().then((data) => { - * const dataset = data[0]; - * const apiResponse = data[1]; - * }); - */ - create: true, - /** - * Check if the dataset exists. - * - * @method Dataset#exists - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this - * request. - * @param {boolean} callback.exists Whether the dataset exists or not. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('institutions'); - * dataset.exists((err, exists) => {}); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * dataset.exists().then((data) => { - * const exists = data[0]; - * }); - */ - exists: true, - /** - * Get a dataset if it exists. - * - * You may optionally use this to "get or create" an object by providing - * an object with `autoCreate` set to `true`. Any extra configuration that - * is normally required for the `create` method must be contained within - * this object as well. - * - * @method Dataset#get - * @param {options} [options] Configuration object. - * @param {boolean} [options.autoCreate=false] Automatically create the - * object if it does not exist. - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this - * request. - * @param {Dataset} callback.dataset The dataset. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('institutions'); - * dataset.get((err, dataset, apiResponse) => { - * if (!err) { - * // `dataset.metadata` has been populated. - * } - * }); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * dataset.get().then((data) => { - * const dataset = data[0]; - * const apiResponse = data[1]; - * }); - */ - get: true, - /** - * Get the metadata for the Dataset. - * - * @see [Datasets: get API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/v2/datasets/get} - * - * @method Dataset#getMetadata - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this - * request. - * @param {object} callback.metadata The dataset's metadata. - * @param {object} callback.apiResponse The full API response. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('institutions'); - * dataset.getMetadata((err, metadata, apiResponse) => {}); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * dataset.getMetadata().then((data) => { - * const metadata = data[0]; - * const apiResponse = data[1]; - * }); - */ - getMetadata: true, - /** - * Sets the metadata of the Dataset object. - * - * @see [Datasets: patch API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/v2/datasets/patch} - * - * @method Dataset#setMetadata - * @param {object} metadata Metadata to save on the Dataset. - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this - * request. - * @param {object} callback.apiResponse The full API response. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('institutions'); - * - * const metadata = { - * description: 'Info for every institution in the 2013 IPEDS universe' - * }; - * - * dataset.setMetadata(metadata, (err, apiResponse) => {}); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * dataset.setMetadata(metadata).then((data) => { - * const apiResponse = data[0]; - * }); - */ - setMetadata: true, - }; - super({ - parent: bigQuery, - baseUrl: '/datasets', - id, - methods, - createMethod: (id, optionsOrCallback, cb) => { - let options = typeof optionsOrCallback === 'object' ? optionsOrCallback : {}; - const callback = typeof optionsOrCallback === 'function' - ? optionsOrCallback - : cb; - options = extend({}, options, { location: this.location }); - return bigQuery.createDataset(id, options, callback); - }, - }); - if (options && options.location) { - this.location = options.location; - } - this.bigQuery = bigQuery; - // Catch all for read-modify-write cycle - // https://cloud.google.com/bigquery/docs/api-performance#read-patch-write - this.interceptors.push({ - request: (reqOpts) => { - if (reqOpts.method === 'PATCH' && reqOpts.json.etag) { - reqOpts.headers = reqOpts.headers || {}; - reqOpts.headers['If-Match'] = reqOpts.json.etag; - } - return reqOpts; - }, - }); - /** - * List all or some of the {module:bigquery/model} objects in your project - * as a readable object stream. - * - * @param {object} [options] Configuration object. See - * {@link Dataset#getModels} for a complete list of options. - * @return {stream} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('institutions'); - * - * dataset.getModelsStream() - * .on('error', console.error) - * .on('data', (model) => {}) - * .on('end', () => { - * // All models have been retrieved - * }); - * - * @example - * dataset.getModelsStream() - * .on('data', function(model) { - * this.end(); - * }); - */ - this.getModelsStream = paginator_1.paginator.streamify('getModels'); - /** - * List all or some of the {@link Routine} objects in your project as a - * readable object stream. - * - * @method Dataset#getRoutinesStream - * @param {GetRoutinesOptions} [options] Configuration object. - * @returns {stream} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('institutions'); - * - * dataset.getRoutinesStream() - * .on('error', console.error) - * .on('data', (routine) => {}) - * .on('end', () => { - * // All routines have been retrieved - * }); - * - * @example - * dataset.getRoutinesStream() - * .on('data', function(routine) { - * this.end(); - * }); - */ - this.getRoutinesStream = paginator_1.paginator.streamify('getRoutines'); - /** - * List all or some of the {module:bigquery/table} objects in your project - * as a readable object stream. - * - * @param {object} [options] Configuration object. See - * {@link Dataset#getTables} for a complete list of options. - * @return {stream} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('institutions'); - * - * dataset.getTablesStream() - * .on('error', console.error) - * .on('data', (table) => {}) - * .on('end', () => { - * // All tables have been retrieved - * }); - * - * //- - * // If you anticipate many results, you can end a stream early to prevent - * // unnecessary processing and API requests. - * //- - * dataset.getTablesStream() - * .on('data', function(table) { - * this.end(); - * }); - */ - this.getTablesStream = paginator_1.paginator.streamify('getTables'); - } - /** - * Run a query as a job. No results are immediately returned. Instead, your - * callback will be executed with a {@link Job} object that you must - * ping for the results. See the Job documentation for explanations of how to - * check on the status of the job. - * - * See {@link BigQuery#createQueryJob} for full documentation of this method. - * - * @param {object} options See {@link BigQuery#createQueryJob} for full documentation of this method. - * @param {function} [callback] See {@link BigQuery#createQueryJob} for full documentation of this method. - * @returns {Promise} See {@link BigQuery#createQueryJob} for full documentation of this method. - */ - createQueryJob(options, callback) { - if (typeof options === 'string') { - options = { - query: options, - }; - } - options = extend(true, {}, options, { - defaultDataset: { - datasetId: this.id, - }, - location: this.location, - }); - return this.bigQuery.createQueryJob(options, callback); - } - /** - * Run a query scoped to your dataset as a readable object stream. - * - * See {@link BigQuery#createQueryStream} for full documentation of this - * method. - * - * @param {object} options See {@link BigQuery#createQueryStream} for full - * documentation of this method. - * @returns {stream} - */ - createQueryStream(options) { - if (typeof options === 'string') { - options = { - query: options, - }; - } - options = extend(true, {}, options, { - defaultDataset: { - datasetId: this.id, - }, - location: this.location, - }); - return this.bigQuery.createQueryStream(options); - } - /** - * @callback CreateRoutineCallback - * @param {?Error} err Request error, if any. - * @param {Routine} routine The newly created routine. - * @param {object} response The full API response body. - */ - /** - * @typedef {array} CreateRoutineResponse - * @property {Routine} 0 The newly created routine. - * @property {object} 1 The full API response body. - */ - /** - * Create a routine. - * - * @see [Routines: insert API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/rest/v2/routines/insert} - * - * @param {string} id The routine ID. - * @param {object} config A [routine resource]{@link https://cloud.google.com/bigquery/docs/reference/rest/v2/routines#Routine}. - * @param {CreateRoutineCallback} [callback] The callback function. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * - * const id = 'my-routine'; - * const config = { - * arguments: [{ - * name: 'x', - * dataType: { - * typeKind: 'INT64' - * } - * }], - * definitionBody: 'x * 3', - * routineType: 'SCALAR_FUNCTION', - * returnType: { - * typeKind: 'INT64' - * } - * }; - * - * dataset.createRoutine(id, config, (err, routine, apiResponse) => { - * if (!err) { - * // The routine was created successfully. - * } - * }); - * - * @example - * const [routine, apiResponse] = await dataset.createRoutine(id, config); - */ - createRoutine(id, config, callback) { - const json = Object.assign({}, config, { - routineReference: { - routineId: id, - datasetId: this.id, - projectId: this.bigQuery.projectId, - }, - }); - this.request({ - method: 'POST', - uri: '/routines', - json, - }, (err, resp) => { - if (err) { - callback(err, null, resp); - return; - } - const routine = this.routine(resp.routineReference.routineId); - routine.metadata = resp; - callback(null, routine, resp); - }); - } - /** - * Create a table given a tableId or configuration object. - * - * @see [Tables: insert API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/v2/tables/insert} - * - * @param {string} id Table id. - * @param {object} [options] See a - * [Table - * resource](https://cloud.google.com/bigquery/docs/reference/v2/tables#resource). - * @param {string|object} [options.schema] A comma-separated list of name:type - * pairs. Valid types are "string", "integer", "float", "boolean", and - * "timestamp". If the type is omitted, it is assumed to be "string". - * Example: "name:string, age:integer". Schemas can also be specified as a - * JSON array of fields, which allows for nested and repeated fields. See - * a [Table resource](http://goo.gl/sl8Dmg) for more detailed information. - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this request - * @param {Table} callback.table The newly created table. - * @param {object} callback.apiResponse The full API response. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('institutions'); - * - * const tableId = 'institution_data'; - * - * const options = { - * // From the data.gov CSV dataset (http://goo.gl/kSE7z6): - * schema: 'UNITID,INSTNM,ADDR,CITY,STABBR,ZIP,FIPS,OBEREG,CHFNM,...' - * }; - * - * dataset.createTable(tableId, options, (err, table, apiResponse) => {}); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * dataset.createTable(tableId, options).then((data) => { - * const table = data[0]; - * const apiResponse = data[1]; - * }); - */ - createTable(id, optionsOrCallback, cb) { - const options = typeof optionsOrCallback === 'object' ? optionsOrCallback : {}; - const callback = typeof optionsOrCallback === 'function' ? optionsOrCallback : cb; - const body = table_1.Table.formatMetadata_(options); - // eslint-disable-next-line @typescript-eslint/no-explicit-any - body.tableReference = { - datasetId: this.id, - projectId: this.bigQuery.projectId, - tableId: id, - }; - this.request({ - method: 'POST', - uri: '/tables', - json: body, - }, (err, resp) => { - if (err) { - callback(err, null, resp); - return; - } - const table = this.table(resp.tableReference.tableId, { - location: resp.location, - }); - table.metadata = resp; - callback(null, table, resp); - }); - } - /** - * Delete the dataset. - * - * @see [Datasets: delete API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/v2/datasets/delete} - * - * @param {object} [options] The configuration object. - * @param {boolean} [options.force=false] Force delete dataset and all tables. - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this request - * @param {object} callback.apiResponse The full API response. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('institutions'); - * - * //- - * // Delete the dataset, only if it does not have any tables. - * //- - * dataset.delete((err, apiResponse) => {}); - * - * //- - * // Delete the dataset and any tables it contains. - * //- - * dataset.delete({ force: true }, (err, apiResponse) => {}); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * dataset.delete().then((data) => { - * const apiResponse = data[0]; - * }); - */ - delete(optionsOrCallback, callback) { - const options = typeof optionsOrCallback === 'object' ? optionsOrCallback : {}; - callback = - typeof optionsOrCallback === 'function' ? optionsOrCallback : callback; - const query = { - deleteContents: !!options.force, - }; - this.request({ - method: 'DELETE', - uri: '', - qs: query, - }, callback); - } - /** - * Get a list of models. - * - * @see [Models: list API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/rest/v2/models/list} - * - * @param {object} [options] Configuration object. - * @param {boolean} [options.autoPaginate=true] Have pagination handled - * automatically. - * @param {number} [options.maxApiCalls] Maximum number of API calls to make. - * @param {number} [options.maxResults] Maximum number of results to return. - * @param {string} [options.pageToken] Token returned from a previous call, to - * request the next page of results. - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this request - * @param {Model[]} callback.models The list of models from - * your Dataset. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('institutions'); - * - * dataset.getModels((err, models) => { - * // models is an array of `Model` objects. - * }); - * - * @example - * function manualPaginationCallback(err, models, nextQuery, apiResponse) { - * if (nextQuery) { - * // More results exist. - * dataset.getModels(nextQuery, manualPaginationCallback); - * } - * } - * - * dataset.getModels({ - * autoPaginate: false - * }, manualPaginationCallback); - * - * @example - * dataset.getModels().then((data) => { - * const models = data[0]; - * }); - */ - getModels(optsOrCb, cb) { - const options = typeof optsOrCb === 'object' ? optsOrCb : {}; - const callback = typeof optsOrCb === 'function' ? optsOrCb : cb; - this.request({ - uri: '/models', - qs: options, - }, (err, resp) => { - if (err) { - callback(err, null, null, resp); - return; - } - let nextQuery = null; - if (resp.nextPageToken) { - nextQuery = Object.assign({}, options, { - pageToken: resp.nextPageToken, - }); - } - const models = (resp.models || []).map(modelObject => { - const model = this.model(modelObject.modelReference.modelId); - model.metadata = modelObject; - return model; - }); - callback(null, models, nextQuery, resp); - }); - } - /** - * @typedef {object} GetRoutinesOptions - * @property {boolean} [autoPaginate=true] Have pagination handled - * automatically. - * @property {number} [maxApiCalls] Maximum number of API calls to make. - * @property {number} [maxResults] Maximum number of results to return. - * @property {string} [pageToken] Token returned from a previous call, to - * request the next page of results. - */ - /** - * @callback GetRoutinesCallback - * @param {?Error} err Request error, if any. - * @param {Routine[]} routines List of routine objects. - * @param {GetRoutinesOptions} nextQuery If `autoPaginate` is set to true, - * this will be a prepared query for the next page of results. - * @param {object} response The full API response. - */ - /** - * @typedef {array} GetRoutinesResponse - * @property {Routine[]} 0 List of routine objects. - * @property {GetRoutinesOptions} 1 If `autoPaginate` is set to true, this - * will be a prepared query for the next page of results. - * @property {object} 2 The full API response. - */ - /** - * Get a list of routines. - * - * @see [Routines: list API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/rest/v2/routines/list} - * - * @param {GetRoutinesOptions} [options] Request options. - * @param {GetRoutinesCallback} [callback] The callback function. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('institutions'); - * - * dataset.getRoutines((err, routines) => { - * // routines is an array of `Routine` objects. - * }); - * - * @example - * function manualPaginationCallback(err, routines, nextQuery, apiResponse) { - * if (nextQuery) { - * // More results exist. - * dataset.getRoutines(nextQuery, manualPaginationCallback); - * } - * } - * - * dataset.getRoutines({ - * autoPaginate: false - * }, manualPaginationCallback); - * - * @example - * const [routines] = await dataset.getRoutines(); - */ - getRoutines(optsOrCb, cb) { - const options = typeof optsOrCb === 'object' ? optsOrCb : {}; - const callback = typeof optsOrCb === 'function' ? optsOrCb : cb; - this.request({ - uri: '/routines', - qs: options, - }, (err, resp) => { - if (err) { - callback(err, null, null, resp); - return; - } - let nextQuery = null; - if (resp.nextPageToken) { - nextQuery = Object.assign({}, options, { - pageToken: resp.nextPageToken, - }); - } - const routines = (resp.routines || []).map(metadata => { - const routine = this.routine(metadata.routineReference.routineId); - routine.metadata = metadata; - return routine; - }); - callback(null, routines, nextQuery, resp); - }); - } - /** - * Get a list of tables. - * - * @see [Tables: list API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/v2/tables/list} - * - * @param {object} [options] Configuration object. - * @param {boolean} [options.autoPaginate=true] Have pagination handled automatically. - * @param {number} [options.maxApiCalls] Maximum number of API calls to make. - * @param {number} [options.maxResults] Maximum number of results to return. - * @param {string} [options.pageToken] Token returned from a previous call, to - * request the next page of results. - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this request - * @param {Table[]} callback.tables The list of tables from - * your Dataset. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('institutions'); - * - * dataset.getTables((err, tables) => { - * // tables is an array of `Table` objects. - * }); - * - * //- - * // To control how many API requests are made and page through the results - * // manually, set `autoPaginate` to `false`. - * //- - * function manualPaginationCallback(err, tables, nextQuery, apiResponse) { - * if (nextQuery) { - * // More results exist. - * dataset.getTables(nextQuery, manualPaginationCallback); - * } - * } - * - * dataset.getTables({ - * autoPaginate: false - * }, manualPaginationCallback); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * dataset.getTables().then((data) => { - * const tables = data[0]; - * }); - */ - getTables(optionsOrCallback, cb) { - const options = typeof optionsOrCallback === 'object' ? optionsOrCallback : {}; - const callback = typeof optionsOrCallback === 'function' ? optionsOrCallback : cb; - this.request({ - uri: '/tables', - qs: options, - }, (err, resp) => { - if (err) { - callback(err, null, null, resp); - return; - } - let nextQuery = null; - if (resp.nextPageToken) { - nextQuery = Object.assign({}, options, { - pageToken: resp.nextPageToken, - }); - } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const tables = (resp.tables || []).map((tableObject) => { - const table = this.table(tableObject.tableReference.tableId, { - location: tableObject.location, - }); - table.metadata = tableObject; - return table; - }); - callback(null, tables, nextQuery, resp); - }); - } - /** - * Create a {@link Model} object. - * - * @throws {TypeError} if model ID is missing. - * - * @param {string} id The ID of the model. - * @return {Model} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('institutions'); - * - * const model = dataset.model('my-model'); - */ - model(id) { - if (typeof id !== 'string') { - throw new TypeError('A model ID is required.'); - } - return new model_1.Model(this, id); - } - query(options, callback) { - if (typeof options === 'string') { - options = { - query: options, - }; - } - options = extend(true, {}, options, { - defaultDataset: { - datasetId: this.id, - }, - location: this.location, - }); - return this.bigQuery.query(options, callback); - } - /** - * Create a Routine object. - * - * @throws {TypeError} if routine ID is missing. - * - * @param {string} id The ID of the routine. - * @returns {Routine} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('institutions'); - * - * const routine = dataset.routine('my_routine'); - */ - routine(id) { - if (typeof id !== 'string') { - throw new TypeError('A routine ID is required.'); - } - return new routine_1.Routine(this, id); - } - /** - * Create a Table object. - * - * @throws {TypeError} if table ID is missing. - * - * @param {string} id The ID of the table. - * @param {object} [options] Table options. - * @param {string} [options.location] The geographic location of the table, by - * default this value is inherited from the dataset. This can be used to - * configure the location of all jobs created through a table instance. - * It cannot be used to set the actual location of the table. This value will - * be superseded by any API responses containing location data for the - * table. - * @return {Table} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('institutions'); - * - * const institutions = dataset.table('institution_data'); - */ - table(id, options) { - if (typeof id !== 'string') { - throw new TypeError('A table ID is required.'); - } - options = extend({ - location: this.location, - }, options); - return new table_1.Table(this, id, options); - } -} -exports.Dataset = Dataset; -/*! Developer Documentation - * - * These methods can be auto-paginated. - */ -paginator_1.paginator.extend(Dataset, ['getModels', 'getRoutines', 'getTables']); -/*! Developer Documentation - * - * All async methods (except for streams) will return a Promise in the event - * that a callback is omitted. - */ -promisify_1.promisifyAll(Dataset, { - exclude: ['model', 'routine', 'table'], -}); -//# sourceMappingURL=dataset.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/index.d.ts b/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/index.d.ts deleted file mode 100644 index 2403beb..0000000 --- a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/index.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -/*! - * Copyright 2019 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -export { BigQuery, BigQueryDate, BigQueryDateOptions, BigQueryDatetime, BigQueryDatetimeOptions, BigQueryInt, BigQueryOptions, BigQueryTime, BigQueryTimeOptions, BigQueryTimestamp, DatasetCallback, DatasetResource, DatasetResponse, DatasetsCallback, DatasetsResponse, Geography, GetDatasetsOptions, GetJobsCallback, GetJobsOptions, GetJobsResponse, IntegerTypeCastOptions, IntegerTypeCastValue, JobRequest, Json, PROTOCOL_REGEX, PagedCallback, PagedRequest, PagedResponse, ProvidedTypeArray, ProvidedTypeStruct, Query, QueryOptions, QueryParameter, QueryRowsCallback, QueryRowsResponse, QueryStreamOptions, RequestCallback, ResourceCallback, SimpleQueryRowsCallback, SimpleQueryRowsResponse, ValueType, } from './bigquery'; -export { CreateDatasetOptions, Dataset, DatasetDeleteOptions, DatasetOptions, GetModelsCallback, GetModelsOptions, GetModelsResponse, GetRoutinesCallback, GetRoutinesOptions, GetRoutinesResponse, GetTablesCallback, GetTablesOptions, GetTablesResponse, RoutineCallback, RoutineMetadata, RoutineResponse, TableCallback, TableResponse, } from './dataset'; -export { CancelCallback, CancelResponse, Job, JobMetadata, JobOptions, QueryResultsOptions, } from './job'; -export { CreateExtractJobOptions, File, JobCallback, JobMetadataCallback, JobMetadataResponse, JobResponse, Model, } from './model'; -export { Routine } from './routine'; -export { CopyTableMetadata, CreateCopyJobMetadata, FormattedMetadata, GetPolicyOptions, GetRowsOptions, InsertRow, InsertRowsCallback, InsertRowsOptions, InsertRowsResponse, JobLoadMetadata, PartialInsertFailure, PermissionsCallback, PermissionsResponse, Policy, PolicyCallback, PolicyRequest, PolicyResponse, RowMetadata, RowsCallback, RowsResponse, SetPolicyOptions, SetTableMetadataOptions, Table, TableField, TableMetadata, TableOptions, TableRow, TableRowField, TableRowValue, TableSchema, ViewDefinition, } from './table'; diff --git a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/index.js b/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/index.js deleted file mode 100644 index 8187cb5..0000000 --- a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/index.js +++ /dev/null @@ -1,37 +0,0 @@ -"use strict"; -/*! - * Copyright 2019 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -var bigquery_1 = require("./bigquery"); -Object.defineProperty(exports, "BigQuery", { enumerable: true, get: function () { return bigquery_1.BigQuery; } }); -Object.defineProperty(exports, "BigQueryDate", { enumerable: true, get: function () { return bigquery_1.BigQueryDate; } }); -Object.defineProperty(exports, "BigQueryDatetime", { enumerable: true, get: function () { return bigquery_1.BigQueryDatetime; } }); -Object.defineProperty(exports, "BigQueryInt", { enumerable: true, get: function () { return bigquery_1.BigQueryInt; } }); -Object.defineProperty(exports, "BigQueryTime", { enumerable: true, get: function () { return bigquery_1.BigQueryTime; } }); -Object.defineProperty(exports, "BigQueryTimestamp", { enumerable: true, get: function () { return bigquery_1.BigQueryTimestamp; } }); -Object.defineProperty(exports, "Geography", { enumerable: true, get: function () { return bigquery_1.Geography; } }); -Object.defineProperty(exports, "PROTOCOL_REGEX", { enumerable: true, get: function () { return bigquery_1.PROTOCOL_REGEX; } }); -var dataset_1 = require("./dataset"); -Object.defineProperty(exports, "Dataset", { enumerable: true, get: function () { return dataset_1.Dataset; } }); -var job_1 = require("./job"); -Object.defineProperty(exports, "Job", { enumerable: true, get: function () { return job_1.Job; } }); -var model_1 = require("./model"); -Object.defineProperty(exports, "Model", { enumerable: true, get: function () { return model_1.Model; } }); -var routine_1 = require("./routine"); -Object.defineProperty(exports, "Routine", { enumerable: true, get: function () { return routine_1.Routine; } }); -var table_1 = require("./table"); -Object.defineProperty(exports, "Table", { enumerable: true, get: function () { return table_1.Table; } }); -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/job.d.ts b/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/job.d.ts deleted file mode 100644 index 68b4945..0000000 --- a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/job.d.ts +++ /dev/null @@ -1,134 +0,0 @@ -/*! - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/*! - * @module bigquery/job - */ -import { MetadataCallback, Operation } from '@google-cloud/common'; -import { ResourceStream } from '@google-cloud/paginator'; -import { BigQuery, IntegerTypeCastOptions, JobRequest, PagedRequest, QueryRowsCallback, QueryRowsResponse, RequestCallback } from './bigquery'; -import { RowMetadata } from './table'; -import bigquery from './types'; -export declare type JobMetadata = bigquery.IJob; -export declare type JobOptions = JobRequest; -export declare type CancelCallback = RequestCallback; -export declare type CancelResponse = [bigquery.IJobCancelResponse]; -export declare type QueryResultsOptions = { - job?: Job; - wrapIntegers?: boolean | IntegerTypeCastOptions; -} & PagedRequest; -/** - * @callback QueryResultsCallback - * @param {?Error} err An error returned while making this request. - * @param {array} rows The results of the job. - */ -/** - * @callback ManualQueryResultsCallback - * @param {?Error} err An error returned while making this request. - * @param {array} rows The results of the job. - * @param {?object} nextQuery A pre-made configuration object for your next - * request. This will be `null` if no additional results are available. - * If the query is not yet complete, you may get empty `rows` and - * non-`null` `nextQuery` that you should use for your next request. - * @param {object} apiResponse The full API response. - */ -/** - * Job objects are returned from various places in the BigQuery API: - * - * - {@link BigQuery#getJobs} - * - {@link BigQuery#job} - * - {@link BigQuery#query} - * - {@link BigQuery#createJob} - * - {@link Table#copy} - * - {@link Table#createWriteStream} - * - {@link Table#extract} - * - {@link Table#load} - * - * They can be used to check the status of a running job or fetching the results - * of a previously-executed one. - * - * @class - * @param {BigQuery} bigQuery {@link BigQuery} instance. - * @param {string} id The ID of the job. - * @param {object} [options] Configuration object. - * @param {string} [options.location] The geographic location of the job. - * Required except for US and EU. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * - * const job = bigquery.job('job-id'); - * - * //- - * // All jobs are event emitters. The status of each job is polled - * // continuously, starting only after you register a "complete" listener. - * //- - * job.on('complete', (metadata) => { - * // The job is complete. - * }); - * - * //- - * // Be sure to register an error handler as well to catch any issues which - * // impeded the job. - * //- - * job.on('error', (err) => { - * // An error occurred during the job. - * }); - * - * //- - * // To force the Job object to stop polling for updates, simply remove any - * // "complete" listeners you've registered. - * // - * // The easiest way to do this is with `removeAllListeners()`. - * //- - * job.removeAllListeners(); - */ -declare class Job extends Operation { - bigQuery: BigQuery; - location?: string; - getQueryResultsStream: (options?: QueryResultsOptions) => ResourceStream; - constructor(bigQuery: BigQuery, id: string, options?: JobOptions); - cancel(): Promise; - cancel(callback: CancelCallback): void; - getQueryResults(options?: QueryResultsOptions): Promise; - getQueryResults(options: QueryResultsOptions, callback: QueryRowsCallback): void; - getQueryResults(callback: QueryRowsCallback): void; - /** - * This method will be called by `getQueryResultsStream()`. It is required to - * properly set the `autoPaginate` option value. - * - * @private - */ - getQueryResultsAsStream_(options: QueryResultsOptions, callback: QueryRowsCallback): void; - /** - * Poll for a status update. Execute the callback: - * - * - callback(err): Job failed - * - callback(): Job incomplete - * - callback(null, metadata): Job complete - * - * @private - * - * @param {function} callback - */ - poll_(callback: MetadataCallback): void; -} -/** - * Reference to the {@link Job} class. - * @name module:@google-cloud/bigquery.Job - * @see Job - */ -export { Job }; diff --git a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/job.js b/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/job.js deleted file mode 100644 index 1dde34f..0000000 --- a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/job.js +++ /dev/null @@ -1,442 +0,0 @@ -"use strict"; -/*! - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Job = void 0; -/*! - * @module bigquery/job - */ -const common_1 = require("@google-cloud/common"); -const paginator_1 = require("@google-cloud/paginator"); -const promisify_1 = require("@google-cloud/promisify"); -const extend = require("extend"); -const bigquery_1 = require("./bigquery"); -/** - * @callback QueryResultsCallback - * @param {?Error} err An error returned while making this request. - * @param {array} rows The results of the job. - */ -/** - * @callback ManualQueryResultsCallback - * @param {?Error} err An error returned while making this request. - * @param {array} rows The results of the job. - * @param {?object} nextQuery A pre-made configuration object for your next - * request. This will be `null` if no additional results are available. - * If the query is not yet complete, you may get empty `rows` and - * non-`null` `nextQuery` that you should use for your next request. - * @param {object} apiResponse The full API response. - */ -/** - * Job objects are returned from various places in the BigQuery API: - * - * - {@link BigQuery#getJobs} - * - {@link BigQuery#job} - * - {@link BigQuery#query} - * - {@link BigQuery#createJob} - * - {@link Table#copy} - * - {@link Table#createWriteStream} - * - {@link Table#extract} - * - {@link Table#load} - * - * They can be used to check the status of a running job or fetching the results - * of a previously-executed one. - * - * @class - * @param {BigQuery} bigQuery {@link BigQuery} instance. - * @param {string} id The ID of the job. - * @param {object} [options] Configuration object. - * @param {string} [options.location] The geographic location of the job. - * Required except for US and EU. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * - * const job = bigquery.job('job-id'); - * - * //- - * // All jobs are event emitters. The status of each job is polled - * // continuously, starting only after you register a "complete" listener. - * //- - * job.on('complete', (metadata) => { - * // The job is complete. - * }); - * - * //- - * // Be sure to register an error handler as well to catch any issues which - * // impeded the job. - * //- - * job.on('error', (err) => { - * // An error occurred during the job. - * }); - * - * //- - * // To force the Job object to stop polling for updates, simply remove any - * // "complete" listeners you've registered. - * // - * // The easiest way to do this is with `removeAllListeners()`. - * //- - * job.removeAllListeners(); - */ -class Job extends common_1.Operation { - constructor(bigQuery, id, options) { - let location; - const methods = { - /** - * Check if the job exists. - * - * @method Job#exists - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this - * request. - * @param {boolean} callback.exists Whether the job exists or not. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * - * const job = bigquery.job('job-id'); - * - * job.exists((err, exists) => {}); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * job.exists().then((data) => { - * const exists = data[0]; - * }); - */ - exists: true, - /** - * Get a job if it exists. - * - * @method Job#get - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this - * request. - * @param {Job} callback.job The job. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * - * const job = bigquery.job('job-id'); - * - * job.get((err, job, apiResponse) => { - * if (!err) { - * // `job.metadata` has been populated. - * } - * }); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * job.get().then((data) => { - * const job = data[0]; - * const apiResponse = data[1]; - * }); - */ - get: true, - /** - * Get the metadata of the job. This will mostly be useful for checking - * the status of a previously-run job. - * - * @see [Jobs: get API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/v2/jobs/get} - * - * @method Job#getMetadata - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this - * request. - * @param {object} callback.metadata The metadata of the job. - * @param {object} callback.apiResponse The full API response. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * - * const job = bigquery.job('id'); - * job.getMetadata((err, metadata, apiResponse) => {}); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * job.getMetadata().then((data) => { - * const metadata = data[0]; - * const apiResponse = data[1]; - * }); - */ - getMetadata: { - reqOpts: { - qs: { - get location() { - return location; - }, - }, - }, - }, - }; - super({ - parent: bigQuery, - baseUrl: '/jobs', - id, - methods, - }); - Object.defineProperty(this, 'location', { - get() { - return location; - }, - set(_location) { - location = _location; - }, - }); - this.bigQuery = bigQuery; - if (options && options.location) { - this.location = options.location; - } - /** - * Get the results of a job as a readable object stream. - * - * @param {object} options Configuration object. See - * {@link Job#getQueryResults} for a complete list of options. - * @return {stream} - * - * @example - * const through2 = require('through2'); - * const fs = require('fs'); - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * - * const job = bigquery.job('job-id'); - * - * job.getQueryResultsStream() - * .pipe(through2.obj(function (row, enc, next) { - * this.push(JSON.stringify(row) + '\n'); - * next(); - * })) - * .pipe(fs.createWriteStream('./test/testdata/testfile.json')); - */ - this.getQueryResultsStream = paginator_1.paginator.streamify('getQueryResultsAsStream_'); - } - /** - * Cancel a job. Use {@link Job#getMetadata} to see if the cancel - * completes successfully. See an example implementation below. - * - * @see [Jobs: get API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/v2/jobs/cancel} - * - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this request. - * @param {object} callback.apiResponse The full API response. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * - * const job = bigquery.job('job-id'); - * - * job.cancel((err, apiResponse) =>{ - * // Check to see if the job completes successfully. - * job.on('error', (err) => {}); - * job.on('complete', (metadata) => {}); - * }); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * job.cancel().then((data) => { - * const apiResponse = data[0]; - * }); - */ - cancel(callback) { - let qs; - if (this.location) { - qs = { location: this.location }; - } - this.request({ - method: 'POST', - uri: '/cancel', - qs, - }, callback); - } - /** - * Get the results of a job. - * - * @see [Jobs: getQueryResults API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/v2/jobs/getQueryResults} - * - * @param {object} [options] Configuration object. - * @param {boolean} [options.autoPaginate=true] Have pagination handled - * automatically. - * @param {number} [options.maxApiCalls] Maximum number of API calls to make. - * @param {number} [options.maxResults] Maximum number of results to read. - * @param {string} [options.pageToken] Page token, returned by a previous call, - * to request the next page of results. Note: This is automatically added - * to the `nextQuery` argument of your callback. - * @param {number} [options.startIndex] Zero-based index of the starting row. - * @param {number} [options.timeoutMs] How long to wait for the query to - * complete, in milliseconds, before returning. Default is 10 seconds. - * If the timeout passes before the job completes, an error will be returned - * and the 'jobComplete' field in the response will be false. - * @param {boolean|IntegerTypeCastOptions} [options.wrapIntegers=false] Wrap values - * of 'INT64' type in {@link BigQueryInt} objects. - * If a `boolean`, this will wrap values in {@link BigQueryInt} objects. - * If an `object`, this will return a value returned by - * `wrapIntegers.integerTypeCastFunction`. - * @param {QueryResultsCallback|ManualQueryResultsCallback} [callback] The - * callback function. If `autoPaginate` is set to false a - * {@link ManualQueryResultsCallback} should be used. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * - * const job = bigquery.job('job-id'); - * - * //- - * // Get all of the results of a query. - * //- - * job.getQueryResults((err, rows) => { - * if (!err) { - * // rows is an array of results. - * } - * }); - * - * //- - * // Customize the results you want to fetch. - * //- - * job.getQueryResults({ - * maxResults: 100 - * }, (err, rows) => {}); - * - * //- - * // To control how many API requests are made and page through the results - * // manually, set `autoPaginate` to `false`. - * //- - * function manualPaginationCallback(err, rows, nextQuery, apiResponse) { - * if (nextQuery) { - * // More results exist. - * job.getQueryResults(nextQuery, manualPaginationCallback); - * } - * } - * - * job.getQueryResults({ - * autoPaginate: false - * }, manualPaginationCallback); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * job.getQueryResults().then((data) => { - * const rows = data[0]; - * }); - */ - getQueryResults(optionsOrCallback, cb) { - const options = typeof optionsOrCallback === 'object' ? optionsOrCallback : {}; - const callback = typeof optionsOrCallback === 'function' ? optionsOrCallback : cb; - const qs = extend({ - location: this.location, - }, options); - const wrapIntegers = qs.wrapIntegers ? qs.wrapIntegers : false; - delete qs.wrapIntegers; - delete qs.job; - const timeoutOverride = typeof qs.timeoutMs === 'number' ? qs.timeoutMs : false; - this.bigQuery.request({ - uri: '/queries/' + this.id, - qs, - }, (err, resp) => { - if (err) { - callback(err, null, null, resp); - return; - } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - let rows = []; - if (resp.schema && resp.rows) { - rows = bigquery_1.BigQuery.mergeSchemaWithRows_(resp.schema, resp.rows, wrapIntegers); - } - let nextQuery = null; - if (resp.jobComplete === false) { - // Query is still running. - nextQuery = Object.assign({}, options); - // If timeout override was provided, return error. - if (timeoutOverride) { - const err = new Error(`The query did not complete before ${timeoutOverride}ms`); - callback(err, null, nextQuery, resp); - return; - } - } - else if (resp.pageToken) { - // More results exist. - nextQuery = Object.assign({}, options, { - pageToken: resp.pageToken, - }); - } - callback(null, rows, nextQuery, resp); - }); - } - /** - * This method will be called by `getQueryResultsStream()`. It is required to - * properly set the `autoPaginate` option value. - * - * @private - */ - getQueryResultsAsStream_(options, callback) { - options = extend({ autoPaginate: false }, options); - this.getQueryResults(options, callback); - } - /** - * Poll for a status update. Execute the callback: - * - * - callback(err): Job failed - * - callback(): Job incomplete - * - callback(null, metadata): Job complete - * - * @private - * - * @param {function} callback - */ - poll_(callback) { - this.getMetadata((err, metadata) => { - if (!err && metadata.status && metadata.status.errorResult) { - err = new common_1.util.ApiError(metadata.status); - } - if (err) { - callback(err); - return; - } - if (metadata.status.state !== 'DONE') { - callback(null); - return; - } - callback(null, metadata); - }); - } -} -exports.Job = Job; -/*! Developer Documentation - * - * These methods can be auto-paginated. - */ -paginator_1.paginator.extend(Job, ['getQueryResults']); -/*! Developer Documentation - * - * All async methods (except for streams) will return a Promise in the event - * that a callback is omitted. - */ -promisify_1.promisifyAll(Job); -//# sourceMappingURL=job.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/model.d.ts b/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/model.d.ts deleted file mode 100644 index 0c46a1f..0000000 --- a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/model.d.ts +++ /dev/null @@ -1,65 +0,0 @@ -/*! - * Copyright 2019 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as common from '@google-cloud/common'; -import { BigQuery, Job, Dataset, ResourceCallback, RequestCallback, JobRequest } from '.'; -import { JobMetadata } from './job'; -import bigquery from './types'; -export interface File { - bucket: any; - kmsKeyName?: string; - userProject?: string; - name: string; - generation?: number; -} -export declare type JobMetadataCallback = RequestCallback; -export declare type JobMetadataResponse = [JobMetadata]; -export declare type JobResponse = [Job, bigquery.IJob]; -export declare type JobCallback = ResourceCallback; -export declare type CreateExtractJobOptions = JobRequest & { - format?: 'ML_TF_SAVED_MODEL' | 'ML_XGBOOST_BOOSTER'; -}; -/** - * Model objects are returned by methods such as {@link Dataset#model} and - * {@link Dataset#getModels}. - * - * @class - * @param {Dataset} dataset {@link Dataset} instance. - * @param {string} id The ID of the model. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * - * const model = dataset.model('my-model'); - */ -declare class Model extends common.ServiceObject { - dataset: Dataset; - bigQuery: BigQuery; - constructor(dataset: Dataset, id: string); - createExtractJob(destination: string | File, options?: CreateExtractJobOptions): Promise; - createExtractJob(destination: string | File, options: CreateExtractJobOptions, callback: JobCallback): void; - createExtractJob(destination: string | File, callback: JobCallback): void; - extract(destination: string | File, options?: CreateExtractJobOptions): Promise; - extract(destination: string | File, options: CreateExtractJobOptions, callback?: JobMetadataCallback): void; - extract(destination: string | File, callback?: JobMetadataCallback): void; -} -/** - * Reference to the {@link Model} class. - * @name module:@google-cloud/bigquery.Model - * @see Model - */ -export { Model }; diff --git a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/model.js b/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/model.js deleted file mode 100644 index 2fb2f40..0000000 --- a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/model.js +++ /dev/null @@ -1,377 +0,0 @@ -"use strict"; -/*! - * Copyright 2019 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Model = void 0; -const common = require("@google-cloud/common"); -const promisify_1 = require("@google-cloud/promisify"); -const arrify = require("arrify"); -const extend = require("extend"); -/** - * The model export formats accepted by BigQuery. - * - * @type {array} - * @private - */ -const FORMATS = ['ML_TF_SAVED_MODEL', 'ML_XGBOOST_BOOSTER']; -/** - * Model objects are returned by methods such as {@link Dataset#model} and - * {@link Dataset#getModels}. - * - * @class - * @param {Dataset} dataset {@link Dataset} instance. - * @param {string} id The ID of the model. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * - * const model = dataset.model('my-model'); - */ -class Model extends common.ServiceObject { - constructor(dataset, id) { - const methods = { - /** - * Delete the model. - * - * @see [Models: delete API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/rest/v2/models/delete} - * - * @method Model#delete - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this - * request. - * @param {object} callback.apiResponse The full API response. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * const model = dataset.model('my-model'); - * - * model.delete((err, apiResponse) => {}); - * - * @example - * const [apiResponse] = await model.delete(); - */ - delete: true, - /** - * Check if the model exists. - * - * @method Model#exists - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this - * request. - * @param {boolean} callback.exists Whether the model exists or not. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * const model = dataset.model('my-model'); - * - * model.exists((err, exists) => {}); - * - * @example - * const [exists] = await model.exists(); - */ - exists: true, - /** - * Get a model if it exists. - * - * @see [Models: get API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/rest/v2/models/get} - * - * @method Model#get: - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this - * request. - * @param {Model} callback.model The {@link Model}. - * @param {object} callback.apiResponse The full API response. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * const model = dataset.model('my-model'); - * - * model.get(err => { - * if (!err) { - * // `model.metadata` has been populated. - * } - * }); - * - * @example - * await model.get(); - */ - get: true, - /** - * Return the metadata associated with the model. - * - * @see [Models: get API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/rest/v2/models/get} - * - * @method Model#getMetadata - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this - * request. - * @param {object} callback.metadata The metadata of the model. - * @param {object} callback.apiResponse The full API response. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * const model = dataset.model('my-model'); - * - * model.getMetadata((err, metadata, apiResponse) => {}); - * - * @example - * const [metadata, apiResponse] = await model.getMetadata(); - */ - getMetadata: true, - /** - * @see [Models: patch API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/rest/v2/models/patch} - * - * @method Model#setMetadata - * @param {object} metadata The metadata key/value object to set. - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this - * request. - * @param {object} callback.metadata The updated metadata of the model. - * @param {object} callback.apiResponse The full API response. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * const model = dataset.model('my-model'); - * - * const metadata = { - * friendlyName: 'TheBestModelEver' - * }; - * - * model.setMetadata(metadata, (err, metadata, apiResponse) => {}); - * - * @example - * const [metadata, apiResponse] = await model.setMetadata(metadata); - */ - setMetadata: true, - }; - super({ - parent: dataset, - baseUrl: '/models', - id, - methods, - }); - this.dataset = dataset; - this.bigQuery = dataset.bigQuery; - } - /** - * Export model to Cloud Storage. - * - * @see [Jobs: insert API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/v2/jobs/insert} - * - * @param {string|File} destination Where the model should be exported - * to. A string or {@link - * https://googleapis.dev/nodejs/storage/latest/File.html File} - * object. - * @param {object} [options] The configuration object. - * @param {string} [options.format] The format to export the data in. - * Allowed options are "ML_TF_SAVED_MODEL" or "ML_XGBOOST_BOOSTER". - * Default: "ML_TF_SAVED_MODEL". - * @param {string} [options.jobId] Custom job id. - * @param {string} [options.jobPrefix] Prefix to apply to the job id. - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this request. - * @param {Job} callback.job The job used to export the model. - * @param {object} callback.apiResponse The full API response. - * - * @throws {Error} If a destination isn't a string or File object. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * const model = dataset.model('my-model'); - * - * const extractedModel = 'gs://my-bucket/extracted-model'; - * - * function callback(err, job, apiResponse) { - * // `job` is a Job object that can be used to check the status of the - * // request. - * } - * - * //- - * // To use the default options, just pass a string or a {@link - * https://googleapis.dev/nodejs/storage/latest/File.html File} - * object. - * // - * // Note: The default format is 'ML_TF_SAVED_MODEL'. - * //- - * model.createExtractJob(extractedModel, callback); - * - * //- - * // If you need more customization, pass an `options` object. - * //- - * const options = { - * format: 'ML_TF_SAVED_MODEL', - * jobId: '123abc' - * }; - * - * model.createExtractJob(extractedModel, options, callback); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * model.createExtractJob(extractedModel, options).then((data) => { - * const job = data[0]; - * const apiResponse = data[1]; - * }); - */ - createExtractJob(destination, optionsOrCallback, cb) { - let options = typeof optionsOrCallback === 'object' ? optionsOrCallback : {}; - const callback = typeof optionsOrCallback === 'function' ? optionsOrCallback : cb; - options = extend(true, options, { - destinationUris: arrify(destination).map(dest => { - if (common.util.isCustomType(dest, 'storage/file')) { - return ('gs://' + dest.bucket.name + '/' + dest.name); - } - if (typeof dest === 'string') { - return dest; - } - throw new Error('Destination must be a string or a File object.'); - }), - }); - if (options.format) { - options.format = options.format.toUpperCase(); - if (FORMATS.includes(options.format)) { - options.destinationFormat = options.format; - delete options.format; - } - else { - throw new Error('Destination format not recognized: ' + options.format); - } - } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const body = { - configuration: { - extract: extend(true, options, { - sourceModel: { - datasetId: this.dataset.id, - projectId: this.bigQuery.projectId, - modelId: this.id, - }, - }), - }, - }; - if (options.jobPrefix) { - body.jobPrefix = options.jobPrefix; - delete options.jobPrefix; - } - if (options.jobId) { - body.jobId = options.jobId; - delete options.jobId; - } - this.bigQuery.createJob(body, callback); - } - /** - * Export model to Cloud Storage. - * - * @param {string|File} destination Where the model should be exported - * to. A string or {@link - * https://googleapis.dev/nodejs/storage/latest/File.html File} - * object. - * @param {object} [options] The configuration object. - * @param {string} [options.format] The format to export - * the data in. Allowed options are "ML_TF_SAVED_MODEL" or - * "ML_XGBOOST_BOOSTER". Default: "ML_TF_SAVED_MODEL". - * @param {string} [options.jobId] Custom id for the underlying job. - * @param {string} [options.jobPrefix] Prefix to apply to the underlying job id. - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this request - * @param {object} callback.apiResponse The full API response. - * @returns {Promise} - * - * @throws {Error} If destination isn't a string or File object. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * const model = dataset.model('my-model'); - * - * const extractedModel = 'gs://my-bucket/extracted-model'; - * - * - * //- - * function callback(err, job, apiResponse) { - * // `job` is a Job object that can be used to check the status of the - * // request. - * } - * - * //- - * // To use the default options, just pass a string or a {@link - * https://googleapis.dev/nodejs/storage/latest/File.html File} - * object. - * // - * // Note: The default format is 'ML_TF_SAVED_MODEL'. - * //- - * model.createExtractJob(extractedModel, callback); - * - * //- - * // If you need more customization, pass an `options` object. - * //- - * const options = { - * format: 'ML_TF_SAVED_MODEL', - * jobId: '123abc' - * }; - * - * model.createExtractJob(extractedModel, options, callback); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * model.createExtractJob(extractedModel, options).then((data) => { - * const job = data[0]; - * const apiResponse = data[1]; - * }); - */ - extract(destination, optionsOrCallback, cb) { - const options = typeof optionsOrCallback === 'object' ? optionsOrCallback : {}; - const callback = typeof optionsOrCallback === 'function' ? optionsOrCallback : cb; - this.createExtractJob(destination, options, (err, job, resp) => { - if (err) { - callback(err, resp); - return; - } - job.on('error', callback).on('complete', metadata => { - callback(null, metadata); - }); - }); - } -} -exports.Model = Model; -/*! Developer Documentation - * - * All async methods (except for streams) will return a Promise in the event - * that a callback is omitted. - */ -promisify_1.promisifyAll(Model); -//# sourceMappingURL=model.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/routine.d.ts b/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/routine.d.ts deleted file mode 100644 index 2aaf4c9..0000000 --- a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/routine.d.ts +++ /dev/null @@ -1,39 +0,0 @@ -/*! - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as common from '@google-cloud/common'; -import { Dataset, RoutineMetadata } from './dataset'; -/** - * Routine objects are returned by methods such as - * {@link Dataset#routine}, {@link Dataset#createRoutine}, and - * {@link Dataset#getRoutines}. - * - * @class - * @param {Dataset} dataset {@link Dataset} instance. - * @param {string} id The ID of the routine. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * - * const routine = dataset.routine('my_routine'); - */ -declare class Routine extends common.ServiceObject { - constructor(dataset: Dataset, id: string); - setMetadata(metadata: RoutineMetadata): Promise; - setMetadata(metadata: RoutineMetadata, callback: common.ResponseCallback): void; -} -export { Routine }; diff --git a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/routine.js b/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/routine.js deleted file mode 100644 index 4b98911..0000000 --- a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/routine.js +++ /dev/null @@ -1,273 +0,0 @@ -"use strict"; -/*! - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Routine = void 0; -const common = require("@google-cloud/common"); -const promisify_1 = require("@google-cloud/promisify"); -const extend = require("extend"); -/** - * Routine objects are returned by methods such as - * {@link Dataset#routine}, {@link Dataset#createRoutine}, and - * {@link Dataset#getRoutines}. - * - * @class - * @param {Dataset} dataset {@link Dataset} instance. - * @param {string} id The ID of the routine. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * - * const routine = dataset.routine('my_routine'); - */ -class Routine extends common.ServiceObject { - constructor(dataset, id) { - const methods = { - /** - * Create a routine. - * - * @see [Routines: insert API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/rest/v2/routines/insert} - * - * @method Routine#create - * @param {object} config A [routine resource]{@link https://cloud.google.com/bigquery/docs/reference/rest/v2/routines#Routine}. - * @param {CreateRoutineCallback} [callback] The callback function. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * const routine = dataset.routine('my_routine'); - * - * const config = { - * arguments: [{ - * name: 'x', - * dataType: { - * typeKind: 'INT64' - * } - * }], - * definitionBody: 'x * 3', - * routineType: 'SCALAR_FUNCTION', - * returnType: { - * typeKind: 'INT64' - * } - * }; - * - * routine.create(config, (err, routine, apiResponse) => { - * if (!err) { - * // The routine was created successfully. - * } - * }); - * - * @example - * const [routine, apiResponse] = await routine.create(config); - */ - create: true, - /** - * @callback DeleteRoutineCallback - * @param {?Error} err Request error, if any. - * @param {object} apiResponse The full API response. - */ - /** - * @typedef {array} DeleteRoutineResponse - * @property {object} 0 The full API response. - */ - /** - * Deletes a routine. - * - * @see [Routines: delete API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/rest/v2/routines/delete} - * - * @method Routine#delete - * @param {DeleteRoutineCallback} [callback] The callback function. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * const routine = dataset.routine('my_routine'); - * - * routine.delete((err, apiResponse) => {}); - * - * @example - * const [apiResponse] = await routine.delete(); - */ - delete: true, - /** - * @callback RoutineExistsCallback - * @param {?Error} err Request error, if any. - * @param {boolean} exists Indicates if the routine exists. - */ - /** - * @typedef {array} RoutineExistsResponse - * @property {boolean} 0 Indicates if the routine exists. - */ - /** - * Check if the routine exists. - * - * @method Routine#exists - * @param {RoutineExistsCallback} [callback] The callback function. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * const routine = dataset.routine('my_routine'); - * - * routine.exists((err, exists) => {}); - * - * @example - * const [exists] = await routine.exists(); - */ - exists: true, - /** - * @callback GetRoutineCallback - * @param {?Error} err Request error, if any. - * @param {Routine} routine The routine. - * @param {object} apiResponse The full API response body. - */ - /** - * @typedef {array} GetRoutineResponse - * @property {Routine} 0 The routine. - * @property {object} 1 The full API response body. - */ - /** - * Get a routine if it exists. - * - * @see [Routines: get API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/rest/v2/routines/get} - * - * @method Routine#get - * @param {GetRoutineCallback} [callback] The callback function. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * const routine = dataset.routine('my_routine'); - * - * routine.get((err, routine) => {}); - * - * @example - * const [routine2] = await routine.get(); - */ - get: true, - /** - * @callback GetRoutineMetadataCallback - * @param {?Error} err Request error, if any. - * @param {object} metadata The routine metadata. - * @param {object} apiResponse The full API response. - */ - /** - * @typedef {array} GetRoutineMetadataResponse - * @property {object} 0 The routine metadata. - * @property {object} 1 The full API response. - */ - /** - * Get the metadata associated with a routine. - * - * @see [Routines: get API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/rest/v2/routines/get} - * - * @method Routine#getMetadata - * @param {GetRoutineMetadataCallback} [callback] The callback function. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * const routine = dataset.routine('my_routine'); - * - * routine.getMetadata((err, metadata, apiResponse) => {}); - * - * @example - * const [metadata, apiResponse] = await routine.getMetadata(); - */ - getMetadata: true, - /** - * @callback SetRoutineMetadataCallback - * @param {?Error} err Request error, if any. - * @param {object} metadata The routine metadata. - * @param {object} apiResponse The full API response. - */ - /** - * @typedef {array} SetRoutineMetadataResponse - * @property {object} 0 The routine metadata. - * @property {object} 1 The full API response. - */ - /** - * Update a routine. - * - * @see [Routines: update API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/rest/v2/routines/update} - * - * @method Routine#setMetadata - * @param {object} metadata A [routine resource object]{@link https://cloud.google.com/bigquery/docs/reference/rest/v2/routines#Routine}. - * @param {SetRoutineMetadataCallback} [callback] The callback function. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * const routine = dataset.routine('my_routine'); - * - * const updates = { - * description: 'The perfect description!' - * }; - * - * routine.setMetadata(updates, (err, metadata, apiResponse) => {}); - * - * @example - * const [metadata, apiResponse] = await routine.setMetadata(updates); - */ - setMetadata: { - reqOpts: { - method: 'PUT', - }, - }, - }; - super({ - parent: dataset, - baseUrl: '/routines', - id, - methods, - createMethod: dataset.createRoutine.bind(dataset), - }); - } - setMetadata(metadata, callback) { - // per the python client, it would appear that in order to update a routine - // you need to send the routine in its entirety, not just the updated fields - this.getMetadata((err, fullMetadata) => { - if (err) { - callback(err); - return; - } - const updatedMetadata = extend(true, {}, fullMetadata, metadata); - super.setMetadata(updatedMetadata, callback); - }); - } -} -exports.Routine = Routine; -/*! Developer Documentation - * - * All async methods (except for streams) will return a Promise in the event - * that a callback is omitted. - */ -promisify_1.promisifyAll(Routine); -//# sourceMappingURL=routine.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/table.d.ts b/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/table.d.ts deleted file mode 100644 index 1f787d3..0000000 --- a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/table.d.ts +++ /dev/null @@ -1,323 +0,0 @@ -/*! - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/// -import * as common from '@google-cloud/common'; -import { ResourceStream } from '@google-cloud/paginator'; -import { BigQuery, Job, Dataset, Query, SimpleQueryRowsResponse, SimpleQueryRowsCallback, ResourceCallback, RequestCallback, PagedResponse, PagedCallback, JobRequest, PagedRequest } from '.'; -import { Duplex, Writable } from 'stream'; -import { JobMetadata } from './job'; -import bigquery from './types'; -import { IntegerTypeCastOptions } from './bigquery'; -export interface File { - bucket: any; - kmsKeyName?: string; - userProject?: string; - name: string; - generation?: number; -} -export declare type JobMetadataCallback = RequestCallback; -export declare type JobMetadataResponse = [JobMetadata]; -export declare type RowMetadata = any; -export declare type InsertRowsOptions = bigquery.ITableDataInsertAllRequest & { - createInsertId?: boolean; - partialRetries?: number; - raw?: boolean; - schema?: string | {}; -}; -export declare type InsertRowsResponse = [bigquery.ITableDataInsertAllResponse | bigquery.ITable]; -export declare type InsertRowsCallback = RequestCallback; -export declare type RowsResponse = PagedResponse; -export declare type RowsCallback = PagedCallback; -export interface InsertRow { - insertId?: string; - json?: bigquery.IJsonObject; -} -export declare type TableRow = bigquery.ITableRow; -export declare type TableRowField = bigquery.ITableCell; -export declare type TableRowValue = string | TableRow; -export declare type GetRowsOptions = PagedRequest & { - wrapIntegers?: boolean | IntegerTypeCastOptions; -}; -export declare type JobLoadMetadata = JobRequest & { - format?: string; -}; -export declare type CreateExtractJobOptions = JobRequest & { - format?: 'CSV' | 'JSON' | 'AVRO' | 'PARQUET' | 'ORC'; - gzip?: boolean; -}; -export declare type JobResponse = [Job, bigquery.IJob]; -export declare type JobCallback = ResourceCallback; -export declare type CreateCopyJobMetadata = CopyTableMetadata; -export declare type SetTableMetadataOptions = TableMetadata; -export declare type CopyTableMetadata = JobRequest; -export declare type TableMetadata = bigquery.ITable & { - name?: string; - schema?: string | TableField[] | TableSchema; - partitioning?: string; - view?: string | ViewDefinition; -}; -export declare type ViewDefinition = bigquery.IViewDefinition; -export declare type FormattedMetadata = bigquery.ITable; -export declare type TableSchema = bigquery.ITableSchema; -export declare type TableField = bigquery.ITableFieldSchema; -export interface PartialInsertFailure { - message: string; - reason: string; - row: RowMetadata; -} -export declare type Policy = bigquery.IPolicy; -export declare type GetPolicyOptions = bigquery.IGetPolicyOptions; -export declare type SetPolicyOptions = Omit; -export declare type PolicyRequest = bigquery.IGetIamPolicyRequest; -export declare type PolicyResponse = [Policy]; -export declare type PolicyCallback = RequestCallback; -export declare type PermissionsResponse = [bigquery.ITestIamPermissionsResponse]; -export declare type PermissionsCallback = RequestCallback; -export interface TableOptions { - location?: string; -} -/** - * Table objects are returned by methods such as - * {@link Dataset#table}, {@link Dataset#createTable}, and - * {@link Dataset#getTables}. - * - * @class - * @param {Dataset} dataset {@link Dataset} instance. - * @param {string} id The ID of the table. - * @param {object} [options] Table options. - * @param {string} [options.location] The geographic location of the table, by - * default this value is inherited from the dataset. This can be used to - * configure the location of all jobs created through a table instance. It - * cannot be used to set the actual location of the table. This value will - * be superseded by any API responses containing location data for the - * table. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * - * const table = dataset.table('my-table'); - */ -declare class Table extends common.ServiceObject { - dataset: Dataset; - bigQuery: BigQuery; - location?: string; - createReadStream: (options?: GetRowsOptions) => ResourceStream; - constructor(dataset: Dataset, id: string, options?: TableOptions); - /** - * Convert a comma-separated name:type string to a table schema object. - * - * @static - * @private - * - * @param {string} str Comma-separated schema string. - * @returns {object} Table schema in the format the API expects. - */ - static createSchemaFromString_(str: string): TableSchema; - /** - * Convert a row entry from native types to their encoded types that the API - * expects. - * - * @static - * @private - * - * @param {*} value The value to be converted. - * @returns {*} The converted value. - */ - static encodeValue_(value?: {} | null): {} | null; - /** - * @private - */ - static formatMetadata_(options: TableMetadata): FormattedMetadata; - copy(destination: Table, metadata?: CopyTableMetadata): Promise; - copy(destination: Table, metadata: CopyTableMetadata, callback: JobMetadataCallback): void; - copy(destination: Table, callback: JobMetadataCallback): void; - copyFrom(sourceTables: Table | Table[], metadata?: CopyTableMetadata): Promise; - copyFrom(sourceTables: Table | Table[], metadata: CopyTableMetadata, callback: JobMetadataCallback): void; - copyFrom(sourceTables: Table | Table[], callback: JobMetadataCallback): void; - createCopyJob(destination: Table, metadata?: CreateCopyJobMetadata): Promise; - createCopyJob(destination: Table, metadata: CreateCopyJobMetadata, callback: JobCallback): void; - createCopyJob(destination: Table, callback: JobCallback): void; - createCopyFromJob(source: Table | Table[], metadata?: CopyTableMetadata): Promise; - createCopyFromJob(source: Table | Table[], metadata: CopyTableMetadata, callback: JobCallback): void; - createCopyFromJob(source: Table | Table[], callback: JobCallback): void; - createExtractJob(destination: File, options?: CreateExtractJobOptions): Promise; - createExtractJob(destination: File, options: CreateExtractJobOptions, callback: JobCallback): void; - createExtractJob(destination: File, callback: JobCallback): void; - createLoadJob(source: string | File, metadata?: JobLoadMetadata): Promise; - createLoadJob(source: string | File, metadata: JobLoadMetadata, callback: JobCallback): void; - createLoadJob(source: string | File, callback: JobCallback): void; - /** - * @param {string | File | File[]} source - * @param {JobLoadMetadata} metadata - * @returns {Promise} - * @private - */ - _createLoadJob(source: string | File | File[], metadata: JobLoadMetadata): Promise; - createQueryJob(options: Query): Promise; - createQueryJob(options: Query, callback: JobCallback): void; - /** - * Run a query scoped to your dataset as a readable object stream. - * - * See {@link BigQuery#createQueryStream} for full documentation of this - * method. - * - * @param {object} query See {@link BigQuery#createQueryStream} for full - * documentation of this method. - * @returns {stream} See {@link BigQuery#createQueryStream} for full - * documentation of this method. - */ - createQueryStream(query: Query): Duplex; - /** - * Creates a write stream. Unlike the public version, this will not - * automatically poll the underlying job. - * - * @private - * - * @param {string|object} [metadata] Metadata to set with the load operation. - * The metadata object should be in the format of the - * [`configuration.load`](https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationLoad) - * property of a Jobs resource. If a string is given, it will be used - * as the filetype. - * @param {string} [metadata.jobId] Custom job id. - * @param {string} [metadata.jobPrefix] Prefix to apply to the job id. - * @returns {WritableStream} - */ - createWriteStream_(metadata: JobLoadMetadata | string): Writable; - /** - * Load data into your table from a readable stream of AVRO, CSV, JSON, ORC, - * or PARQUET data. - * - * @see [Jobs: insert API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/v2/jobs/insert} - * - * @param {string|object} [metadata] Metadata to set with the load operation. - * The metadata object should be in the format of the - * [`configuration.load`](https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationLoad) - * property of a Jobs resource. If a string is given, - * it will be used as the filetype. - * @param {string} [metadata.jobId] Custom job id. - * @param {string} [metadata.jobPrefix] Prefix to apply to the job id. - * @returns {WritableStream} - * - * @throws {Error} If source format isn't recognized. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * const table = dataset.table('my-table'); - * - * //- - * // Load data from a CSV file. - * //- - * const request = require('request'); - * - * const csvUrl = 'http://goo.gl/kSE7z6'; - * - * const metadata = { - * allowJaggedRows: true, - * skipLeadingRows: 1 - * }; - * - * request.get(csvUrl) - * .pipe(table.createWriteStream(metadata)) - * .on('job', (job) => { - * // `job` is a Job object that can be used to check the status of the - * // request. - * }) - * .on('complete', (job) => { - * // The job has completed successfully. - * }); - * - * //- - * // Load data from a JSON file. - * //- - * const fs = require('fs'); - * - * fs.createReadStream('./test/testdata/testfile.json') - * .pipe(table.createWriteStream('json')) - * .on('job', (job) => { - * // `job` is a Job object that can be used to check the status of the - * // request. - * }) - * .on('complete', (job) => { - * // The job has completed successfully. - * }); - */ - createWriteStream(metadata: JobLoadMetadata | string): Writable; - extract(destination: File, options?: CreateExtractJobOptions): Promise; - extract(destination: File, options: CreateExtractJobOptions, callback?: JobMetadataCallback): void; - extract(destination: File, callback?: JobMetadataCallback): void; - getRows(options?: GetRowsOptions): Promise; - getRows(options: GetRowsOptions, callback: RowsCallback): void; - getRows(callback: RowsCallback): void; - insert(rows: RowMetadata | RowMetadata[], options?: InsertRowsOptions): Promise; - insert(rows: RowMetadata | RowMetadata[], options: InsertRowsOptions, callback: InsertRowsCallback): void; - insert(rows: RowMetadata | RowMetadata[], callback: InsertRowsCallback): void; - /** - * Insert rows with retries, but will create the table if not exists. - * - * @param {RowMetadata | RowMetadata[]} rows - * @param {InsertRowsOptions} options - * @returns {Promise} - * @private - */ - private _insertAndCreateTable; - /** - * This method will attempt to insert rows while retrying any partial failures - * that occur along the way. Because partial insert failures are returned - * differently, we can't depend on our usual retry strategy. - * - * @private - * - * @param {RowMetadata|RowMetadata[]} rows The rows to insert. - * @param {InsertRowsOptions} options Insert options. - * @returns {Promise} - */ - private _insertWithRetry; - /** - * This method does the bulk of the work for processing options and making the - * network request. - * - * @private - * - * @param {RowMetadata|RowMetadata[]} rows The rows to insert. - * @param {InsertRowsOptions} options Insert options. - * @returns {Promise} - */ - private _insert; - load(source: string | File, metadata?: JobLoadMetadata): Promise; - load(source: string | File, metadata: JobLoadMetadata, callback: JobMetadataCallback): void; - load(source: string | File, callback: JobMetadataCallback): void; - query(query: Query): Promise; - query(query: Query, callback: SimpleQueryRowsCallback): void; - setMetadata(metadata: SetTableMetadataOptions): Promise; - setMetadata(metadata: SetTableMetadataOptions, callback: common.ResponseCallback): void; - getIamPolicy(optionsOrCallback?: GetPolicyOptions | PolicyCallback): Promise; - getIamPolicy(options: GetPolicyOptions, callback: PolicyCallback): void; - setIamPolicy(policy: Policy, options?: SetPolicyOptions): Promise; - setIamPolicy(policy: Policy, options: SetPolicyOptions, callback: PolicyCallback): void; - setIamPolicy(policy: Policy, callback: PolicyCallback): void; - testIamPermissions(permissions: string | string[]): Promise; - testIamPermissions(permissions: string | string[], callback: PermissionsCallback): void; -} -/** - * Reference to the {@link Table} class. - * @name module:@google-cloud/bigquery.Table - * @see Table - */ -export { Table }; diff --git a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/table.js b/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/table.js deleted file mode 100644 index 684fb47..0000000 --- a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/table.js +++ /dev/null @@ -1,1858 +0,0 @@ -"use strict"; -/*! - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Table = void 0; -const common = require("@google-cloud/common"); -const paginator_1 = require("@google-cloud/paginator"); -const promisify_1 = require("@google-cloud/promisify"); -const arrify = require("arrify"); -const big_js_1 = require("big.js"); -const extend = require("extend"); -const p_event_1 = require("p-event"); -const fs = require("fs"); -const is = require("is"); -const path = require("path"); -const streamEvents = require("stream-events"); -const uuid = require("uuid"); -const _1 = require("."); -// eslint-disable-next-line @typescript-eslint/no-var-requires -const duplexify = require('duplexify'); -/** - * The file formats accepted by BigQuery. - * - * @type {object} - * @private - */ -const FORMATS = { - avro: 'AVRO', - csv: 'CSV', - json: 'NEWLINE_DELIMITED_JSON', - orc: 'ORC', - parquet: 'PARQUET', -}; -/** - * Table objects are returned by methods such as - * {@link Dataset#table}, {@link Dataset#createTable}, and - * {@link Dataset#getTables}. - * - * @class - * @param {Dataset} dataset {@link Dataset} instance. - * @param {string} id The ID of the table. - * @param {object} [options] Table options. - * @param {string} [options.location] The geographic location of the table, by - * default this value is inherited from the dataset. This can be used to - * configure the location of all jobs created through a table instance. It - * cannot be used to set the actual location of the table. This value will - * be superseded by any API responses containing location data for the - * table. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * - * const table = dataset.table('my-table'); - */ -class Table extends common.ServiceObject { - constructor(dataset, id, options) { - const methods = { - /** - * Create a table. - * - * @method Table#create - * @param {object} [options] See {@link Dataset#createTable}. - * @param {function} [callback] - * @param {?error} callback.err An error returned while making this - * request. - * @param {Table} callback.table The new {@link Table}. - * @param {object} callback.apiResponse The full API response. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * - * const table = dataset.table('my-table'); - * - * table.create((err, table, apiResponse) => { - * if (!err) { - * // The table was created successfully. - * } - * }); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * table.create().then((data) => { - * const table = data[0]; - * const apiResponse = data[1]; - * }); - */ - create: true, - /** - * Delete a table and all its data. - * - * @see [Tables: delete API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/v2/tables/delete} - * - * @method Table#delete - * @param {function} [callback] - * @param {?error} callback.err An error returned while making this - * request. - * @param {object} callback.apiResponse The full API response. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * - * const table = dataset.table('my-table'); - * - * table.delete((err, apiResponse) => {}); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * table.delete().then((data) => { - * const apiResponse = data[0]; - * }); - */ - delete: true, - /** - * Check if the table exists. - * - * @method Table#exists - * @param {function} [callback] - * @param {?error} callback.err An error returned while making this - * request. - * @param {boolean} callback.exists Whether the table exists or not. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * - * const table = dataset.table('my-table'); - * - * table.exists((err, exists) => {}); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * table.exists().then((data) => { - * const exists = data[0]; - * }); - */ - exists: true, - /** - * Get a table if it exists. - * - * You may optionally use this to "get or create" an object by providing - * an object with `autoCreate` set to `true`. Any extra configuration that - * is normally required for the `create` method must be contained within - * this object as well. - * - * @method Table#get - * @param {options} [options] Configuration object. - * @param {boolean} [options.autoCreate=false] Automatically create the - * object if it does not exist. - * @param {function} [callback] - * @param {?error} callback.err An error returned while making this - * request. - * @param {Table} callback.table The {@link Table}. - * @param {object} callback.apiResponse The full API response. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * - * const table = dataset.table('my-table'); - * - * table.get((err, table, apiResponse) => { - * // `table.metadata` has been populated. - * }); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * table.get().then((data) => { - * const table = data[0]; - * const apiResponse = data[1]; - * }); - */ - get: true, - /** - * Return the metadata associated with the Table. - * - * @see [Tables: get API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/v2/tables/get} - * - * @method Table#getMetadata - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this - * request. - * @param {object} callback.metadata The metadata of the Table. - * @param {object} callback.apiResponse The full API response. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * - * const table = dataset.table('my-table'); - * - * table.getMetadata((err, metadata, apiResponse) => {}); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * table.getMetadata().then((data) => { - * const metadata = data[0]; - * const apiResponse = data[1]; - * }); - */ - getMetadata: true, - }; - super({ - parent: dataset, - baseUrl: '/tables', - id, - createMethod: dataset.createTable.bind(dataset), - methods, - }); - if (options && options.location) { - this.location = options.location; - } - this.bigQuery = dataset.bigQuery; - this.dataset = dataset; - // Catch all for read-modify-write cycle - // https://cloud.google.com/bigquery/docs/api-performance#read-patch-write - this.interceptors.push({ - request: (reqOpts) => { - if (reqOpts.method === 'PATCH' && reqOpts.json.etag) { - reqOpts.headers = reqOpts.headers || {}; - reqOpts.headers['If-Match'] = reqOpts.json.etag; - } - return reqOpts; - }, - }); - /** - * Create a readable stream of the rows of data in your table. This method - * is simply a wrapper around {@link Table#getRows}. - * - * @see [Tabledata: list API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/v2/tabledata/list} - * - * @returns {ReadableStream} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * const table = dataset.table('my-table'); - * - * table.createReadStream(options) - * .on('error', console.error) - * .on('data', row => {}) - * .on('end', function() { - * // All rows have been retrieved. - * }); - * - * //- - * // If you anticipate many results, you can end a stream early to prevent - * // unnecessary processing and API requests. - * //- - * table.createReadStream() - * .on('data', function(row) { - * this.end(); - * }); - */ - this.createReadStream = paginator_1.paginator.streamify('getRows'); - } - /** - * Convert a comma-separated name:type string to a table schema object. - * - * @static - * @private - * - * @param {string} str Comma-separated schema string. - * @returns {object} Table schema in the format the API expects. - */ - static createSchemaFromString_(str) { - return str.split(/\s*,\s*/).reduce((acc, pair) => { - acc.fields.push({ - name: pair.split(':')[0].trim(), - type: (pair.split(':')[1] || 'STRING').toUpperCase().trim(), - }); - return acc; - }, { - fields: [], - }); - } - /** - * Convert a row entry from native types to their encoded types that the API - * expects. - * - * @static - * @private - * - * @param {*} value The value to be converted. - * @returns {*} The converted value. - */ - static encodeValue_(value) { - if (typeof value === 'undefined' || value === null) { - return null; - } - if (value instanceof Buffer) { - return value.toString('base64'); - } - if (value instanceof big_js_1.default) { - return value.toFixed(); - } - const customTypeConstructorNames = [ - 'BigQueryDate', - 'BigQueryDatetime', - 'BigQueryInt', - 'BigQueryTime', - 'BigQueryTimestamp', - 'Geography', - ]; - const constructorName = value.constructor.name; - const isCustomType = customTypeConstructorNames.indexOf(constructorName) > -1; - if (isCustomType) { - return value.value; - } - if (is.date(value)) { - return value.toJSON(); - } - if (is.array(value)) { - return value.map(Table.encodeValue_); - } - if (typeof value === 'object') { - return Object.keys(value).reduce((acc, key) => { - acc[key] = Table.encodeValue_(value[key]); - return acc; - }, {}); - } - return value; - } - /** - * @private - */ - static formatMetadata_(options) { - const body = extend(true, {}, options); - if (options.name) { - body.friendlyName = options.name; - delete body.name; - } - if (is.string(options.schema)) { - body.schema = Table.createSchemaFromString_(options.schema); - } - if (is.array(options.schema)) { - body.schema = { - fields: options.schema, - }; - } - if (body.schema && body.schema.fields) { - body.schema.fields = body.schema.fields.map(field => { - if (field.fields) { - field.type = 'RECORD'; - } - return field; - }); - } - if (is.string(options.partitioning)) { - body.timePartitioning = { - type: options.partitioning.toUpperCase(), - }; - delete body.partitioning; - } - if (is.string(options.view)) { - body.view = { - query: options.view, - useLegacySql: false, - }; - } - return body; - } - /** - * Copy data from one table to another, optionally creating that table. - * - * @param {Table} destination The destination table. - * @param {object} [metadata] Metadata to set with the copy operation. The - * metadata object should be in the format of a - * [`JobConfigurationTableCopy`](https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationTableCopy) - * object. - * object. - * @param {string} [metadata.jobId] Custom id for the underlying job. - * @param {string} [metadata.jobPrefix] Prefix to apply to the underlying job - * id. - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this request - * @param {object} callback.apiResponse The full API response. - * @returns {Promise} - * - * @throws {Error} If a destination other than a Table object is provided. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * - * const table = dataset.table('my-table'); - * const yourTable = dataset.table('your-table'); - * - * table.copy(yourTable, (err, apiResponse) => {}); - * - * //- - * // See https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationTableCopy - * // for all available options. - * //- - * const metadata = { - * createDisposition: 'CREATE_NEVER', - * writeDisposition: 'WRITE_TRUNCATE' - * }; - * - * table.copy(yourTable, metadata, (err, apiResponse) => {}); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * table.copy(yourTable, metadata).then((data) => { - * const apiResponse = data[0]; - * }); - */ - copy(destination, metadataOrCallback, cb) { - const metadata = typeof metadataOrCallback === 'object' ? metadataOrCallback : {}; - const callback = typeof metadataOrCallback === 'function' ? metadataOrCallback : cb; - this.createCopyJob(destination, metadata, (err, job, resp) => { - if (err) { - callback(err, resp); - return; - } - job.on('error', callback).on('complete', (metadata) => { - callback(null, metadata); - }); - }); - } - /** - * Copy data from multiple tables into this table. - * - * @param {Table|Table[]} sourceTables The - * source table(s) to copy data from. - * @param {object=} metadata Metadata to set with the copy operation. The - * metadata object should be in the format of a - * [`JobConfigurationTableCopy`](https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationTableCopy) - * object. - * @param {string} [metadata.jobId] Custom id for the underlying job. - * @param {string} [metadata.jobPrefix] Prefix to apply to the underlying job - * id. - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this request - * @param {object} callback.apiResponse The full API response. - * @returns {Promise} - * - * @throws {Error} If a source other than a Table object is provided. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * const table = dataset.table('my-table'); - * - * const sourceTables = [ - * dataset.table('your-table'), - * dataset.table('your-second-table') - * ]; - * - * table.copyFrom(sourceTables, (err, apiResponse) => {}); - * - * //- - * // See https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationTableCopy - * // for all available options. - * //- - * const metadata = { - * createDisposition: 'CREATE_NEVER', - * writeDisposition: 'WRITE_TRUNCATE' - * }; - * - * table.copyFrom(sourceTables, metadata, (err, apiResponse) => {}); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * table.copyFrom(sourceTables, metadata).then((data) => { - * const apiResponse = data[0]; - * }); - */ - copyFrom(sourceTables, metadataOrCallback, cb) { - const metadata = typeof metadataOrCallback === 'object' ? metadataOrCallback : {}; - const callback = typeof metadataOrCallback === 'function' ? metadataOrCallback : cb; - this.createCopyFromJob(sourceTables, metadata, (err, job, resp) => { - if (err) { - callback(err, resp); - return; - } - job.on('error', callback).on('complete', metadata => { - callback(null, metadata); - }); - }); - } - /** - * Copy data from one table to another, optionally creating that table. - * - * @see [Jobs: insert API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/v2/jobs/insert} - * - * @param {Table} destination The destination table. - * @param {object} [metadata] Metadata to set with the copy operation. The - * metadata object should be in the format of a - * [`JobConfigurationTableCopy`](https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationTableCopy) - * object. - * @param {string} [metadata.jobId] Custom job id. - * @param {string} [metadata.jobPrefix] Prefix to apply to the job id. - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this request - * @param {Job} callback.job The job used to copy your table. - * @param {object} callback.apiResponse The full API response. - * @returns {Promise} - * - * @throws {Error} If a destination other than a Table object is provided. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * const table = dataset.table('my-table'); - * - * const yourTable = dataset.table('your-table'); - * table.createCopyJob(yourTable, (err, job, apiResponse) => { - * // `job` is a Job object that can be used to check the status of the - * // request. - * }); - * - * //- - * // See https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationTableCopy - * // for all available options. - * //- - * const metadata = { - * createDisposition: 'CREATE_NEVER', - * writeDisposition: 'WRITE_TRUNCATE' - * }; - * - * table.createCopyJob(yourTable, metadata, (err, job, apiResponse) => {}); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * table.createCopyJob(yourTable, metadata).then((data) => { - * const job = data[0]; - * const apiResponse = data[1]; - * }); - */ - createCopyJob(destination, metadataOrCallback, cb) { - if (!(destination instanceof Table)) { - throw new Error('Destination must be a Table object.'); - } - const metadata = typeof metadataOrCallback === 'object' - ? metadataOrCallback - : {}; - const callback = typeof metadataOrCallback === 'function' ? metadataOrCallback : cb; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const body = { - configuration: { - copy: extend(true, metadata, { - destinationTable: { - datasetId: destination.dataset.id, - projectId: destination.bigQuery.projectId, - tableId: destination.id, - }, - sourceTable: { - datasetId: this.dataset.id, - projectId: this.bigQuery.projectId, - tableId: this.id, - }, - }), - }, - }; - if (metadata.jobPrefix) { - body.jobPrefix = metadata.jobPrefix; - delete metadata.jobPrefix; - } - if (this.location) { - body.location = this.location; - } - if (metadata.jobId) { - body.jobId = metadata.jobId; - delete metadata.jobId; - } - this.bigQuery.createJob(body, callback); - } - /** - * Copy data from multiple tables into this table. - * - * @see [Jobs: insert API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/v2/jobs/insert} - * - * @param {Table|Table[]} sourceTables The - * source table(s) to copy data from. - * @param {object} [metadata] Metadata to set with the copy operation. The - * metadata object should be in the format of a - * [`JobConfigurationTableCopy`](https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationTableCopy) - * object. - * @param {string} [metadata.jobId] Custom job id. - * @param {string} [metadata.jobPrefix] Prefix to apply to the job id. - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this request - * @param {Job} callback.job The job used to copy your table. - * @param {object} callback.apiResponse The full API response. - * @returns {Promise} - * - * @throws {Error} If a source other than a Table object is provided. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * const table = dataset.table('my-table'); - * - * const sourceTables = [ - * dataset.table('your-table'), - * dataset.table('your-second-table') - * ]; - * - * const callback = (err, job, apiResponse) => { - * // `job` is a Job object that can be used to check the status of the - * // request. - * }; - * - * table.createCopyFromJob(sourceTables, callback); - * - * //- - * // See https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationTableCopy - * // for all available options. - * //- - * const metadata = { - * createDisposition: 'CREATE_NEVER', - * writeDisposition: 'WRITE_TRUNCATE' - * }; - * - * table.createCopyFromJob(sourceTables, metadata, callback); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * table.createCopyFromJob(sourceTables, metadata).then((data) => { - * const job = data[0]; - * const apiResponse = data[1]; - * }); - */ - createCopyFromJob(source, metadataOrCallback, cb) { - const sourceTables = arrify(source); - sourceTables.forEach(sourceTable => { - if (!(sourceTable instanceof Table)) { - throw new Error('Source must be a Table object.'); - } - }); - const metadata = typeof metadataOrCallback === 'object' ? metadataOrCallback : {}; - const callback = typeof metadataOrCallback === 'function' ? metadataOrCallback : cb; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const body = { - configuration: { - copy: extend(true, metadata, { - destinationTable: { - datasetId: this.dataset.id, - projectId: this.bigQuery.projectId, - tableId: this.id, - }, - sourceTables: sourceTables.map(sourceTable => { - return { - datasetId: sourceTable.dataset.id, - projectId: sourceTable.bigQuery.projectId, - tableId: sourceTable.id, - }; - }), - }), - }, - }; - if (metadata.jobPrefix) { - body.jobPrefix = metadata.jobPrefix; - delete metadata.jobPrefix; - } - if (this.location) { - body.location = this.location; - } - if (metadata.jobId) { - body.jobId = metadata.jobId; - delete metadata.jobId; - } - this.bigQuery.createJob(body, callback); - } - /** - * Export table to Cloud Storage. - * - * @see [Jobs: insert API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/v2/jobs/insert} - * - * @param {string|File} destination Where the file should be exported - * to. A string or a {@link - * https://googleapis.dev/nodejs/storage/latest/File.html File} - * object. - * @param {object=} options - The configuration object. - * @param {string} options.format - The format to export the data in. Allowed - * options are "CSV", "JSON", "AVRO", or "PARQUET". Default: "CSV". - * @param {boolean} options.gzip - Specify if you would like the file compressed - * with GZIP. Default: false. - * @param {string} [options.jobId] Custom job id. - * @param {string} [options.jobPrefix] Prefix to apply to the job id. - * @param {function} callback - The callback function. - * @param {?error} callback.err - An error returned while making this request - * @param {Job} callback.job - The job used to export the table. - * @param {object} callback.apiResponse - The full API response. - * - * @throws {Error} If destination isn't a File object. - * @throws {Error} If destination format isn't recongized. - * - * @example - * const {Storage} = require('@google-cloud/storage'); - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * const table = dataset.table('my-table'); - * - * const storage = new Storage({ - * projectId: 'grape-spaceship-123' - * }); - * const extractedFile = storage.bucket('institutions').file('2014.csv'); - * - * function callback(err, job, apiResponse) { - * // `job` is a Job object that can be used to check the status of the - * // request. - * } - * - * //- - * // To use the default options, just pass a {@link - * https://googleapis.dev/nodejs/storage/latest/File.html File} - * object. - * // - * // Note: The exported format type will be inferred by the file's extension. - * // If you wish to override this, or provide an array of destination files, - * // you must provide an `options` object. - * //- - * table.createExtractJob(extractedFile, callback); - * - * //- - * // If you need more customization, pass an `options` object. - * //- - * const options = { - * format: 'json', - * gzip: true - * }; - * - * table.createExtractJob(extractedFile, options, callback); - * - * //- - * // You can also specify multiple destination files. - * //- - * table.createExtractJob([ - * storage.bucket('institutions').file('2014.json'), - * storage.bucket('institutions-copy').file('2014.json') - * ], options, callback); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * table.createExtractJob(extractedFile, options).then((data) => { - * const job = data[0]; - * const apiResponse = data[1]; - * }); - */ - createExtractJob(destination, optionsOrCallback, cb) { - let options = typeof optionsOrCallback === 'object' ? optionsOrCallback : {}; - const callback = typeof optionsOrCallback === 'function' ? optionsOrCallback : cb; - options = extend(true, options, { - destinationUris: arrify(destination).map(dest => { - if (!common.util.isCustomType(dest, 'storage/file')) { - throw new Error('Destination must be a File object.'); - } - // If no explicit format was provided, attempt to find a match from the - // file's extension. If no match, don't set, and default upstream to - // CSV. - const format = path - .extname(dest.name) - .substr(1) - .toLowerCase(); - if (!options.destinationFormat && !options.format && FORMATS[format]) { - options.destinationFormat = FORMATS[format]; - } - return 'gs://' + dest.bucket.name + '/' + dest.name; - }), - }); - if (options.format) { - options.format = options.format.toLowerCase(); - if (FORMATS[options.format]) { - options.destinationFormat = FORMATS[options.format]; - delete options.format; - } - else { - throw new Error('Destination format not recognized: ' + options.format); - } - } - if (options.gzip) { - options.compression = 'GZIP'; - delete options.gzip; - } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const body = { - configuration: { - extract: extend(true, options, { - sourceTable: { - datasetId: this.dataset.id, - projectId: this.bigQuery.projectId, - tableId: this.id, - }, - }), - }, - }; - if (options.jobPrefix) { - body.jobPrefix = options.jobPrefix; - delete options.jobPrefix; - } - if (this.location) { - body.location = this.location; - } - if (options.jobId) { - body.jobId = options.jobId; - delete options.jobId; - } - this.bigQuery.createJob(body, callback); - } - /** - * Load data from a local file or Storage {@link - * https://googleapis.dev/nodejs/storage/latest/File.html File}. - * - * By loading data this way, you create a load job that will run your data - * load asynchronously. If you would like instantaneous access to your data, - * insert it using {@liink Table#insert}. - * - * Note: The file type will be inferred by the given file's extension. If you - * wish to override this, you must provide `metadata.format`. - * - * @see [Jobs: insert API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/v2/jobs/insert} - * - * @param {string|File|File[]} source The source file to load. A string (path) - * to a local file, or one or more {@link - * https://googleapis.dev/nodejs/storage/latest/File.html File} - * objects. - * @param {object} [metadata] Metadata to set with the load operation. The - * metadata object should be in the format of the - * [`configuration.load`](https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationLoad) - * property of a Jobs resource. - * @param {string} [metadata.format] The format the data being loaded is in. - * Allowed options are "AVRO", "CSV", "JSON", "ORC", or "PARQUET". - * @param {string} [metadata.jobId] Custom job id. - * @param {string} [metadata.jobPrefix] Prefix to apply to the job id. - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this request - * @param {Job} callback.job The job used to load your data. - * @param {object} callback.apiResponse The full API response. - * @returns {Promise} - * - * @throws {Error} If the source isn't a string file name or a File instance. - * - * @example - * const {Storage} = require('@google-cloud/storage'); - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * const table = dataset.table('my-table'); - * - * //- - * // Load data from a local file. - * //- - * const callback = (err, job, apiResponse) => { - * // `job` is a Job object that can be used to check the status of the - * // request. - * }; - * - * table.createLoadJob('./institutions.csv', callback); - * - * //- - * // You may also pass in metadata in the format of a Jobs resource. See - * // (https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationLoad) - * // for a full list of supported values. - * //- - * const metadata = { - * encoding: 'ISO-8859-1', - * sourceFormat: 'NEWLINE_DELIMITED_JSON' - * }; - * - * table.createLoadJob('./my-data.csv', metadata, callback); - * - * //- - * // Load data from a file in your Cloud Storage bucket. - * //- - * const storage = new Storage({ - * projectId: 'grape-spaceship-123' - * }); - * const data = storage.bucket('institutions').file('data.csv'); - * table.createLoadJob(data, callback); - * - * //- - * // Load data from multiple files in your Cloud Storage bucket(s). - * //- - * table.createLoadJob([ - * storage.bucket('institutions').file('2011.csv'), - * storage.bucket('institutions').file('2012.csv') - * ], callback); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * table.createLoadJob(data).then((data) => { - * const job = data[0]; - * const apiResponse = data[1]; - * }); - */ - createLoadJob(source, metadataOrCallback, cb) { - const metadata = typeof metadataOrCallback === 'object' ? metadataOrCallback : {}; - const callback = typeof metadataOrCallback === 'function' ? metadataOrCallback : cb; - this._createLoadJob(source, metadata).then(([resp]) => callback(null, resp, resp.metadata), err => callback(err)); - } - /** - * @param {string | File | File[]} source - * @param {JobLoadMetadata} metadata - * @returns {Promise} - * @private - */ - async _createLoadJob(source, metadata) { - if (metadata.format) { - metadata.sourceFormat = FORMATS[metadata.format.toLowerCase()]; - delete metadata.format; - } - if (this.location) { - metadata.location = this.location; - } - if (typeof source === 'string') { - // A path to a file was given. If a sourceFormat wasn't specified, try to - // find a match from the file's extension. - const detectedFormat = FORMATS[path - .extname(source) - .substr(1) - .toLowerCase()]; - if (!metadata.sourceFormat && detectedFormat) { - metadata.sourceFormat = detectedFormat; - } - // Read the file into a new write stream. - const jobWritable = fs - .createReadStream(source) - .pipe(this.createWriteStream_(metadata)); - const jobResponse = (await p_event_1.default(jobWritable, 'job')); - return [jobResponse, jobResponse.metadata]; - } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const body = { - configuration: { - load: { - destinationTable: { - projectId: this.bigQuery.projectId, - datasetId: this.dataset.id, - tableId: this.id, - }, - }, - }, - }; - if (metadata.jobPrefix) { - body.jobPrefix = metadata.jobPrefix; - delete metadata.jobPrefix; - } - if (metadata.location) { - body.location = metadata.location; - delete metadata.location; - } - if (metadata.jobId) { - body.jobId = metadata.jobId; - delete metadata.jobId; - } - extend(true, body.configuration.load, metadata, { - sourceUris: arrify(source).map(src => { - if (!common.util.isCustomType(src, 'storage/file')) { - throw new Error('Source must be a File object.'); - } - // If no explicit format was provided, attempt to find a match from - // the file's extension. If no match, don't set, and default upstream - // to CSV. - const format = FORMATS[path - .extname(src.name) - .substr(1) - .toLowerCase()]; - if (!metadata.sourceFormat && format) { - body.configuration.load.sourceFormat = format; - } - return 'gs://' + src.bucket.name + '/' + src.name; - }), - }); - return this.bigQuery.createJob(body); - } - /** - * Run a query as a job. No results are immediately returned. Instead, your - * callback will be executed with a {@link Job} object that you must - * ping for the results. See the Job documentation for explanations of how to - * check on the status of the job. - * - * See {@link BigQuery#createQueryJob} for full documentation of this method. - */ - createQueryJob(options, callback) { - return this.dataset.createQueryJob(options, callback); - } - /** - * Run a query scoped to your dataset as a readable object stream. - * - * See {@link BigQuery#createQueryStream} for full documentation of this - * method. - * - * @param {object} query See {@link BigQuery#createQueryStream} for full - * documentation of this method. - * @returns {stream} See {@link BigQuery#createQueryStream} for full - * documentation of this method. - */ - createQueryStream(query) { - return this.dataset.createQueryStream(query); - } - /** - * Creates a write stream. Unlike the public version, this will not - * automatically poll the underlying job. - * - * @private - * - * @param {string|object} [metadata] Metadata to set with the load operation. - * The metadata object should be in the format of the - * [`configuration.load`](https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationLoad) - * property of a Jobs resource. If a string is given, it will be used - * as the filetype. - * @param {string} [metadata.jobId] Custom job id. - * @param {string} [metadata.jobPrefix] Prefix to apply to the job id. - * @returns {WritableStream} - */ - createWriteStream_(metadata) { - metadata = metadata || {}; - if (typeof metadata === 'string') { - metadata = { - sourceFormat: FORMATS[metadata.toLowerCase()], - }; - } - if (typeof metadata.schema === 'string') { - metadata.schema = Table.createSchemaFromString_(metadata.schema); - } - metadata = extend(true, { - destinationTable: { - projectId: this.bigQuery.projectId, - datasetId: this.dataset.id, - tableId: this.id, - }, - }, metadata); - let jobId = metadata.jobId || uuid.v4(); - if (metadata.jobId) { - delete metadata.jobId; - } - if (metadata.jobPrefix) { - jobId = metadata.jobPrefix + jobId; - delete metadata.jobPrefix; - } - const dup = streamEvents(duplexify()); - dup.once('writing', () => { - common.util.makeWritableStream(dup, { - makeAuthenticatedRequest: this.bigQuery.makeAuthenticatedRequest, - metadata: { - configuration: { - load: metadata, - }, - jobReference: { - jobId, - projectId: this.bigQuery.projectId, - location: this.location, - }, - }, - request: { - uri: `${this.bigQuery.apiEndpoint}/upload/bigquery/v2/projects/${this.bigQuery.projectId}/jobs`, - }, - }, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (data) => { - const job = this.bigQuery.job(data.jobReference.jobId, { - location: data.jobReference.location, - }); - job.metadata = data; - dup.emit('job', job); - }); - }); - return dup; - } - /** - * Load data into your table from a readable stream of AVRO, CSV, JSON, ORC, - * or PARQUET data. - * - * @see [Jobs: insert API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/v2/jobs/insert} - * - * @param {string|object} [metadata] Metadata to set with the load operation. - * The metadata object should be in the format of the - * [`configuration.load`](https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationLoad) - * property of a Jobs resource. If a string is given, - * it will be used as the filetype. - * @param {string} [metadata.jobId] Custom job id. - * @param {string} [metadata.jobPrefix] Prefix to apply to the job id. - * @returns {WritableStream} - * - * @throws {Error} If source format isn't recognized. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * const table = dataset.table('my-table'); - * - * //- - * // Load data from a CSV file. - * //- - * const request = require('request'); - * - * const csvUrl = 'http://goo.gl/kSE7z6'; - * - * const metadata = { - * allowJaggedRows: true, - * skipLeadingRows: 1 - * }; - * - * request.get(csvUrl) - * .pipe(table.createWriteStream(metadata)) - * .on('job', (job) => { - * // `job` is a Job object that can be used to check the status of the - * // request. - * }) - * .on('complete', (job) => { - * // The job has completed successfully. - * }); - * - * //- - * // Load data from a JSON file. - * //- - * const fs = require('fs'); - * - * fs.createReadStream('./test/testdata/testfile.json') - * .pipe(table.createWriteStream('json')) - * .on('job', (job) => { - * // `job` is a Job object that can be used to check the status of the - * // request. - * }) - * .on('complete', (job) => { - * // The job has completed successfully. - * }); - */ - createWriteStream(metadata) { - const stream = this.createWriteStream_(metadata); - stream.on('prefinish', () => { - stream.cork(); - }); - stream.on('job', (job) => { - job - .on('error', err => { - stream.destroy(err); - }) - .on('complete', () => { - stream.emit('complete', job); - stream.uncork(); - }); - }); - return stream; - } - /** - * Export table to Cloud Storage. - * - * @param {string|File} destination Where the file should be exported - * to. A string or a {@link - * https://googleapis.dev/nodejs/storage/latest/File.html File}. - * @param {object} [options] The configuration object. - * @param {string} [options.format="CSV"] The format to export the data in. - * Allowed options are "AVRO", "CSV", "JSON", "ORC" or "PARQUET". - * @param {boolean} [options.gzip] Specify if you would like the file compressed - * with GZIP. Default: false. - * @param {string} [options.jobId] Custom id for the underlying job. - * @param {string} [options.jobPrefix] Prefix to apply to the underlying job id. - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this request - * @param {object} callback.apiResponse The full API response. - * @returns {Promise} - * - * @throws {Error} If destination isn't a File object. - * @throws {Error} If destination format isn't recongized. - * - * @example - * const Storage = require('@google-cloud/storage'); - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * const table = dataset.table('my-table'); - * - * const storage = new Storage({ - * projectId: 'grape-spaceship-123' - * }); - * const extractedFile = storage.bucket('institutions').file('2014.csv'); - * - * //- - * // To use the default options, just pass a {@link - * https://googleapis.dev/nodejs/storage/latest/File.html File} - * object. - * // - * // Note: The exported format type will be inferred by the file's extension. - * // If you wish to override this, or provide an array of destination files, - * // you must provide an `options` object. - * //- - * table.extract(extractedFile, (err, apiResponse) => {}); - * - * //- - * // If you need more customization, pass an `options` object. - * //- - * const options = { - * format: 'json', - * gzip: true - * }; - * - * table.extract(extractedFile, options, (err, apiResponse) => {}); - * - * //- - * // You can also specify multiple destination files. - * //- - * table.extract([ - * storage.bucket('institutions').file('2014.json'), - * storage.bucket('institutions-copy').file('2014.json') - * ], options, (err, apiResponse) => {}); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * table.extract(extractedFile, options).then((data) => { - * const apiResponse = data[0]; - * }); - */ - extract(destination, optionsOrCallback, cb) { - const options = typeof optionsOrCallback === 'object' ? optionsOrCallback : {}; - const callback = typeof optionsOrCallback === 'function' ? optionsOrCallback : cb; - this.createExtractJob(destination, options, (err, job, resp) => { - if (err) { - callback(err, resp); - return; - } - job.on('error', callback).on('complete', metadata => { - callback(null, metadata); - }); - }); - } - /** - * Retrieves table data from a specified set of rows. The rows are returned to - * your callback as an array of objects matching your table's schema. - * - * @see [Tabledata: list API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/v2/tabledata/list} - * - * @param {object} [options] The configuration object. - * @param {boolean} [options.autoPaginate=true] Have pagination handled - * automatically. - * @param {number} [options.maxApiCalls] Maximum number of API calls to make. - * @param {number} [options.maxResults] Maximum number of results to return. - * @param {boolean|IntegerTypeCastOptions} [options.wrapIntegers=false] Wrap values - * of 'INT64' type in {@link BigQueryInt} objects. - * If a `boolean`, this will wrap values in {@link BigQueryInt} objects. - * If an `object`, this will return a value returned by - * `wrapIntegers.integerTypeCastFunction`. - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this request - * @param {array} callback.rows The table data from specified set of rows. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * const table = dataset.table('my-table'); - * - * table.getRows((err, rows) => { - * if (!err) { - * // rows is an array of results. - * } - * }); - * - * //- - * // To control how many API requests are made and page through the results - * // manually, set `autoPaginate` to `false`. - * //- - * function manualPaginationCallback(err, rows, nextQuery, apiResponse) { - * if (nextQuery) { - * // More results exist. - * table.getRows(nextQuery, manualPaginationCallback); - * } - * } - * - * table.getRows({ - * autoPaginate: false - * }, manualPaginationCallback); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * table.getRows().then((data) => { - * const rows = data[0]; - * }); - */ - getRows(optionsOrCallback, cb) { - const options = typeof optionsOrCallback === 'object' ? optionsOrCallback : {}; - const callback = typeof optionsOrCallback === 'function' ? optionsOrCallback : cb; - const wrapIntegers = options.wrapIntegers ? options.wrapIntegers : false; - delete options.wrapIntegers; - const onComplete = (err, rows, nextQuery, resp) => { - if (err) { - callback(err, null, null, resp); - return; - } - rows = _1.BigQuery.mergeSchemaWithRows_(this.metadata.schema, rows || [], wrapIntegers, options.selectedFields ? options.selectedFields.split(',') : []); - callback(null, rows, nextQuery, resp); - }; - this.request({ - uri: '/data', - qs: options, - }, (err, resp) => { - if (err) { - onComplete(err, null, null, resp); - return; - } - let nextQuery = null; - if (resp.pageToken) { - nextQuery = Object.assign({}, options, { - pageToken: resp.pageToken, - }); - } - if (resp.rows && resp.rows.length > 0 && !this.metadata.schema) { - // We don't know the schema for this table yet. Do a quick stat. - this.getMetadata((err, metadata, apiResponse) => { - if (err) { - onComplete(err, null, null, apiResponse); - return; - } - onComplete(null, resp.rows, nextQuery, resp); - }); - return; - } - onComplete(null, resp.rows, nextQuery, resp); - }); - } - /** - * Stream data into BigQuery one record at a time without running a load job. - * - * If you need to create an entire table from a file, consider using - * {@link Table#load} instead. - * - * Note, if a table was recently created, inserts may fail until the table - * is consistent within BigQuery. If a `schema` is supplied, this method will - * automatically retry those failed inserts, and it will even create the - * table with the provided schema if it does not exist. - * - * @see [Tabledata: insertAll API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/v2/tabledata/insertAll} - * @see [Streaming Insert Limits]{@link https://cloud.google.com/bigquery/quotas#streaming_inserts} - * @see [Troubleshooting Errors]{@link https://developers.google.com/bigquery/troubleshooting-errors} - * - * @param {object|object[]} rows The rows to insert into the table. - * @param {object} [options] Configuration object. - * @param {boolean} [options.createInsertId=true] Automatically insert a - * default row id when one is not provided. - * @param {boolean} [options.ignoreUnknownValues=false] Accept rows that contain - * values that do not match the schema. The unknown values are ignored. - * @param {number} [options.partialRetries=3] Number of times to retry - * inserting rows for cases of partial failures. - * @param {boolean} [options.raw] If `true`, the `rows` argument is expected to - * be formatted as according to the - * [specification](https://cloud.google.com/bigquery/docs/reference/v2/tabledata/insertAll). - * @param {string|object} [options.schema] If provided will automatically - * create a table if it doesn't already exist. Note that this can take - * longer than 2 minutes to complete. A comma-separated list of - * name:type pairs. - * Valid types are "string", "integer", "float", "boolean", and - * "timestamp". If the type is omitted, it is assumed to be "string". - * Example: "name:string, age:integer". Schemas can also be specified as a - * JSON array of fields, which allows for nested and repeated fields. See - * a [Table resource](http://goo.gl/sl8Dmg) for more detailed information. - * @param {boolean} [options.skipInvalidRows=false] Insert all valid rows of a - * request, even if invalid rows exist. - * @param {string} [options.templateSuffix] Treat the destination table as a - * base template, and insert the rows into an instance table named - * "{destination}{templateSuffix}". BigQuery will manage creation of - * the instance table, using the schema of the base template table. See - * [Automatic table creation using template - * tables](https://cloud.google.com/bigquery/streaming-data-into-bigquery#template-tables) - * for considerations when working with templates tables. - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this request. - * @param {object[]} callback.err.errors If present, these represent partial - * failures. It's possible for part of your request to be completed - * successfully, while the other part was not. - * @param {object} callback.apiResponse The full API response. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * const table = dataset.table('my-table'); - * - * //- - * // Insert a single row. - * //- - * table.insert({ - * INSTNM: 'Motion Picture Institute of Michigan', - * CITY: 'Troy', - * STABBR: 'MI' - * }, insertHandler); - * - * //- - * // Insert multiple rows at a time. - * //- - * const rows = [ - * { - * INSTNM: 'Motion Picture Institute of Michigan', - * CITY: 'Troy', - * STABBR: 'MI' - * }, - * // ... - * ]; - * - * table.insert(rows, insertHandler); - * - * //- - * // Insert a row as according to the specification. - * //- - * const row = { - * insertId: '1', - * json: { - * INSTNM: 'Motion Picture Institute of Michigan', - * CITY: 'Troy', - * STABBR: 'MI' - * } - * }; - * - * const options = { - * raw: true - * }; - * - * table.insert(row, options, insertHandler); - * - * //- - * // Handling the response. See Troubleshooting Errors for best practices on how to handle errors. - * //- - * function insertHandler(err, apiResponse) { - * if (err) { - * // An API error or partial failure occurred. - * - * if (err.name === 'PartialFailureError') { - * // Some rows failed to insert, while others may have succeeded. - * - * // err.errors (object[]): - * // err.errors[].row (original row object passed to `insert`) - * // err.errors[].errors[].reason - * // err.errors[].errors[].message - * } - * } - * } - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * table.insert(rows) - * .then((data) => { - * const apiResponse = data[0]; - * }) - * .catch((err) => { - * // An API error or partial failure occurred. - * - * if (err.name === 'PartialFailureError') { - * // Some rows failed to insert, while others may have succeeded. - * - * // err.errors (object[]): - * // err.errors[].row (original row object passed to `insert`) - * // err.errors[].errors[].reason - * // err.errors[].errors[].message - * } - * }); - */ - insert(rows, optionsOrCallback, cb) { - const options = typeof optionsOrCallback === 'object' - ? optionsOrCallback - : {}; - const callback = typeof optionsOrCallback === 'function' ? optionsOrCallback : cb; - const promise = this._insertAndCreateTable(rows, options); - if (callback) { - promise.then(resp => callback(null, resp), err => callback(err, null)); - } - else { - return promise.then(r => [r]); - } - } - /** - * Insert rows with retries, but will create the table if not exists. - * - * @param {RowMetadata | RowMetadata[]} rows - * @param {InsertRowsOptions} options - * @returns {Promise} - * @private - */ - async _insertAndCreateTable(rows, options) { - const { schema } = options; - const delay = 60000; - try { - return await this._insertWithRetry(rows, options); - } - catch (err) { - if (err.code !== 404 || !schema) { - throw err; - } - } - try { - await this.create({ schema }); - } - catch (err) { - if (err.code !== 409) { - throw err; - } - } - // table creation after failed access is subject to failure caching and - // eventual consistency, see: - // https://github.com/googleapis/google-cloud-python/issues/4553#issuecomment-350110292 - await new Promise(resolve => setTimeout(resolve, delay)); - return this._insertAndCreateTable(rows, options); - } - /** - * This method will attempt to insert rows while retrying any partial failures - * that occur along the way. Because partial insert failures are returned - * differently, we can't depend on our usual retry strategy. - * - * @private - * - * @param {RowMetadata|RowMetadata[]} rows The rows to insert. - * @param {InsertRowsOptions} options Insert options. - * @returns {Promise} - */ - async _insertWithRetry(rows, options) { - const { partialRetries = 3 } = options; - let error; - const maxAttempts = Math.max(partialRetries, 0) + 1; - for (let attempts = 0; attempts < maxAttempts; attempts++) { - try { - return await this._insert(rows, options); - } - catch (e) { - error = e; - rows = (e.errors || []) - .filter(err => !!err.row) - .map(err => err.row); - if (!rows.length) { - break; - } - } - } - throw error; - } - /** - * This method does the bulk of the work for processing options and making the - * network request. - * - * @private - * - * @param {RowMetadata|RowMetadata[]} rows The rows to insert. - * @param {InsertRowsOptions} options Insert options. - * @returns {Promise} - */ - async _insert(rows, options) { - rows = arrify(rows); - if (!rows.length) { - throw new Error('You must provide at least 1 row to be inserted.'); - } - const json = extend(true, {}, options, { rows }); - if (!options.raw) { - json.rows = rows.map((row) => { - const encoded = { - json: Table.encodeValue_(row), - }; - if (options.createInsertId !== false) { - encoded.insertId = uuid.v4(); - } - return encoded; - }); - } - delete json.createInsertId; - delete json.partialRetries; - delete json.raw; - delete json.schema; - const [resp] = await this.request({ - method: 'POST', - uri: '/insertAll', - json, - }); - const partialFailures = (resp.insertErrors || []).map((insertError) => { - return { - errors: insertError.errors.map(error => { - return { - message: error.message, - reason: error.reason, - }; - }), - // eslint-disable-next-line @typescript-eslint/no-explicit-any - row: rows[insertError.index], - }; - }); - if (partialFailures.length > 0) { - throw new common.util.PartialFailureError({ - errors: partialFailures, - response: resp, - }); - } - return resp; - } - /** - * Load data from a local file or Storage {@link - * https://googleapis.dev/nodejs/storage/latest/File.html File}. - * - * By loading data this way, you create a load job that will run your data - * load asynchronously. If you would like instantaneous access to your data, - * insert it using {@link Table#insert}. - * - * Note: The file type will be inferred by the given file's extension. If you - * wish to override this, you must provide `metadata.format`. - * - * @param {string|File} source The source file to load. A filepath as a string - * or a {@link - * https://googleapis.dev/nodejs/storage/latest/File.html File} - * object. - * @param {object} [metadata] Metadata to set with the load operation. The - * metadata object should be in the format of the - * [`configuration.load`](https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationLoad) - * property of a Jobs resource. - * @param {string} [metadata.format] The format the data being loaded is in. - * Allowed options are "AVRO", "CSV", "JSON", "ORC", or "PARQUET". - * @param {string} [metadata.jobId] Custom id for the underlying job. - * @param {string} [metadata.jobPrefix] Prefix to apply to the underlying job - * id. - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this request - * @param {object} callback.apiResponse The full API response. - * @returns {Promise} - * - * @throws {Error} If the source isn't a string file name or a File instance. - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * const table = dataset.table('my-table'); - * - * //- - * // Load data from a local file. - * //- - * table.load('./institutions.csv', (err, apiResponse) => {}); - * - * //- - * // You may also pass in metadata in the format of a Jobs resource. See - * // (https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationLoad) - * // for a full list of supported values. - * //- - * const metadata = { - * encoding: 'ISO-8859-1', - * sourceFormat: 'NEWLINE_DELIMITED_JSON' - * }; - * - * table.load('./my-data.csv', metadata, (err, apiResponse) => {}); - * - * //- - * // Load data from a file in your Cloud Storage bucket. - * //- - * const gcs = require('@google-cloud/storage')({ - * projectId: 'grape-spaceship-123' - * }); - * const data = gcs.bucket('institutions').file('data.csv'); - * table.load(data, (err, apiResponse) => {}); - * - * //- - * // Load data from multiple files in your Cloud Storage bucket(s). - * //- - * table.load([ - * gcs.bucket('institutions').file('2011.csv'), - * gcs.bucket('institutions').file('2012.csv') - * ], function(err, apiResponse) {}); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * table.load(data).then(function(data) { - * const apiResponse = data[0]; - * }); - */ - load(source, metadataOrCallback, cb) { - const metadata = typeof metadataOrCallback === 'object' ? metadataOrCallback : {}; - const callback = typeof metadataOrCallback === 'function' ? metadataOrCallback : cb; - this.createLoadJob(source, metadata, (err, job, resp) => { - if (err) { - callback(err, resp); - return; - } - job.on('error', callback).on('complete', metadata => { - callback(null, metadata); - }); - }); - } - /** - * Run a query scoped to your dataset. - * - * See {@link BigQuery#query} for full documentation of this method. - * @param {object} query See {@link BigQuery#query} for full documentation of this method. - * @param {function} [callback] See {@link BigQuery#query} for full documentation of this method. - * @returns {Promise} - */ - query(query, callback) { - this.dataset.query(query, callback); - } - /** - * Set the metadata on the table. - * - * @see [Tables: patch API Documentation]{@link https://cloud.google.com/bigquery/docs/reference/v2/tables/patch} - * - * @param {object} metadata The metadata key/value object to set. - * @param {string} metadata.description A user-friendly description of the - * table. - * @param {string} metadata.name A descriptive name for the table. - * @param {string|object} metadata.schema A comma-separated list of name:type - * pairs. Valid types are "string", "integer", "float", "boolean", - * "bytes", "record", and "timestamp". If the type is omitted, it is assumed - * to be "string". Example: "name:string, age:integer". Schemas can also be - * specified as a JSON array of fields, which allows for nested and - * repeated fields. See a [Table resource](http://goo.gl/sl8Dmg) for more - * detailed information. - * @param {function} [callback] The callback function. - * @param {?error} callback.err An error returned while making this request. - * @param {object} callback.apiResponse The full API response. - * @returns {Promise} - * - * @example - * const {BigQuery} = require('@google-cloud/bigquery'); - * const bigquery = new BigQuery(); - * const dataset = bigquery.dataset('my-dataset'); - * const table = dataset.table('my-table'); - * - * const metadata = { - * name: 'My recipes', - * description: 'A table for storing my recipes.', - * schema: 'name:string, servings:integer, cookingTime:float, quick:boolean' - * }; - * - * table.setMetadata(metadata, (err, metadata, apiResponse) => {}); - * - * //- - * // If the callback is omitted, we'll return a Promise. - * //- - * table.setMetadata(metadata).then((data) => { - * const metadata = data[0]; - * const apiResponse = data[1]; - * }); - */ - setMetadata(metadata, callback) { - const body = Table.formatMetadata_(metadata); - super.setMetadata(body, callback); - } - /** - * Run a query scoped to your dataset. - * @returns {Promise} - */ - getIamPolicy(optionsOrCallback, cb) { - const options = typeof optionsOrCallback === 'object' ? optionsOrCallback : {}; - const callback = typeof optionsOrCallback === 'function' ? optionsOrCallback : cb; - if (typeof options.requestedPolicyVersion === 'number' && - options.requestedPolicyVersion !== 1) { - throw new Error('Only IAM policy version 1 is supported.'); - } - const json = extend(true, {}, { options }); - this.request({ - method: 'POST', - uri: '/:getIamPolicy', - json, - }, (err, resp) => { - if (err) { - callback(err, null); - return; - } - callback(null, resp); - }); - } - /** - * Run a query scoped to your dataset. - * @returns {Promise} - */ - setIamPolicy(policy, optionsOrCallback, cb) { - const options = typeof optionsOrCallback === 'object' ? optionsOrCallback : {}; - const callback = typeof optionsOrCallback === 'function' ? optionsOrCallback : cb; - if (policy.version && policy.version !== 1) { - throw new Error('Only IAM policy version 1 is supported.'); - } - const json = extend(true, {}, options, { policy }); - this.request({ - method: 'POST', - uri: '/:setIamPolicy', - json, - }, (err, resp) => { - if (err) { - callback(err, null); - return; - } - callback(null, resp); - }); - } - /** - * Run a query scoped to your dataset. - * @returns {Promise} - */ - testIamPermissions(permissions, callback) { - permissions = arrify(permissions); - const json = extend(true, {}, { permissions }); - this.request({ - method: 'POST', - uri: '/:testIamPermissions', - json, - }, (err, resp) => { - if (err) { - callback(err, null); - return; - } - callback(null, resp); - }); - } -} -exports.Table = Table; -/*! Developer Documentation - * - * These methods can be auto-paginated. - */ -paginator_1.paginator.extend(Table, ['getRows']); -/*! Developer Documentation - * - * All async methods (except for streams) will return a Promise in the event - * that a callback is omitted. - */ -promisify_1.promisifyAll(Table); -//# sourceMappingURL=table.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/types.d.ts b/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/types.d.ts deleted file mode 100644 index a59da1d..0000000 --- a/reverse_engineering/node_modules/@google-cloud/bigquery/build/src/types.d.ts +++ /dev/null @@ -1,3705 +0,0 @@ -/** - * BigQuery API - */ -declare namespace bigquery { - /** - * Aggregate metrics for classification/classifier models. For multi-class models, the metrics are either macro-averaged or micro-averaged. When macro-averaged, the metrics are calculated for each label and then an unweighted average is taken of those values. When micro-averaged, the metric is calculated globally by counting the total number of correctly predicted rows. - */ - type IAggregateClassificationMetrics = { - /** - * Accuracy is the fraction of predictions given the correct label. For multiclass this is a micro-averaged metric. - */ - accuracy?: number; - /** - * The F1 score is an average of recall and precision. For multiclass this is a macro-averaged metric. - */ - f1Score?: number; - /** - * Logarithmic Loss. For multiclass this is a macro-averaged metric. - */ - logLoss?: number; - /** - * Precision is the fraction of actual positive predictions that had positive actual labels. For multiclass this is a macro-averaged metric treating each class as a binary classifier. - */ - precision?: number; - /** - * Recall is the fraction of actual positive labels that were given a positive prediction. For multiclass this is a macro-averaged metric. - */ - recall?: number; - /** - * Area Under a ROC Curve. For multiclass this is a macro-averaged metric. - */ - rocAuc?: number; - /** - * Threshold at which the metrics are computed. For binary classification models this is the positive class threshold. For multi-class classfication models this is the confidence threshold. - */ - threshold?: number; - }; - - /** - * Input/output argument of a function or a stored procedure. - */ - type IArgument = { - /** - * Optional. Defaults to FIXED_TYPE. - */ - argumentKind?: 'ARGUMENT_KIND_UNSPECIFIED' | 'FIXED_TYPE' | 'ANY_TYPE'; - /** - * Required unless argument_kind = ANY_TYPE. - */ - dataType?: IStandardSqlDataType; - /** - * Optional. Specifies whether the argument is input or output. Can be set for procedures only. - */ - mode?: 'MODE_UNSPECIFIED' | 'IN' | 'OUT' | 'INOUT'; - /** - * Optional. The name of this argument. Can be absent for function return argument. - */ - name?: string; - }; - - /** - * Arima coefficients. - */ - type IArimaCoefficients = { - /** - * Auto-regressive coefficients, an array of double. - */ - autoRegressiveCoefficients?: Array; - /** - * Intercept coefficient, just a double not an array. - */ - interceptCoefficient?: number; - /** - * Moving-average coefficients, an array of double. - */ - movingAverageCoefficients?: Array; - }; - - /** - * ARIMA model fitting metrics. - */ - type IArimaFittingMetrics = { - /** - * AIC. - */ - aic?: number; - /** - * Log-likelihood. - */ - logLikelihood?: number; - /** - * Variance. - */ - variance?: number; - }; - - /** - * Model evaluation metrics for ARIMA forecasting models. - */ - type IArimaForecastingMetrics = { - /** - * Arima model fitting metrics. - */ - arimaFittingMetrics?: Array; - /** - * Repeated as there can be many metric sets (one for each model) in auto-arima and the large-scale case. - */ - arimaSingleModelForecastingMetrics?: Array< - IArimaSingleModelForecastingMetrics - >; - /** - * Whether Arima model fitted with drift or not. It is always false when d is not 1. - */ - hasDrift?: Array; - /** - * Non-seasonal order. - */ - nonSeasonalOrder?: Array; - /** - * Seasonal periods. Repeated because multiple periods are supported for one time series. - */ - seasonalPeriods?: Array< - | 'SEASONAL_PERIOD_TYPE_UNSPECIFIED' - | 'NO_SEASONALITY' - | 'DAILY' - | 'WEEKLY' - | 'MONTHLY' - | 'QUARTERLY' - | 'YEARLY' - >; - /** - * Id to differentiate different time series for the large-scale case. - */ - timeSeriesId?: Array; - }; - - /** - * Arima model information. - */ - type IArimaModelInfo = { - /** - * Arima coefficients. - */ - arimaCoefficients?: IArimaCoefficients; - /** - * Arima fitting metrics. - */ - arimaFittingMetrics?: IArimaFittingMetrics; - /** - * Whether Arima model fitted with drift or not. It is always false when d is not 1. - */ - hasDrift?: boolean; - /** - * Non-seasonal order. - */ - nonSeasonalOrder?: IArimaOrder; - /** - * Seasonal periods. Repeated because multiple periods are supported for one time series. - */ - seasonalPeriods?: Array< - | 'SEASONAL_PERIOD_TYPE_UNSPECIFIED' - | 'NO_SEASONALITY' - | 'DAILY' - | 'WEEKLY' - | 'MONTHLY' - | 'QUARTERLY' - | 'YEARLY' - >; - /** - * The id to indicate different time series. - */ - timeSeriesId?: string; - }; - - /** - * Arima order, can be used for both non-seasonal and seasonal parts. - */ - type IArimaOrder = { - /** - * Order of the differencing part. - */ - d?: string; - /** - * Order of the autoregressive part. - */ - p?: string; - /** - * Order of the moving-average part. - */ - q?: string; - }; - - /** - * (Auto-)arima fitting result. Wrap everything in ArimaResult for easier refactoring if we want to use model-specific iteration results. - */ - type IArimaResult = { - /** - * This message is repeated because there are multiple arima models fitted in auto-arima. For non-auto-arima model, its size is one. - */ - arimaModelInfo?: Array; - /** - * Seasonal periods. Repeated because multiple periods are supported for one time series. - */ - seasonalPeriods?: Array< - | 'SEASONAL_PERIOD_TYPE_UNSPECIFIED' - | 'NO_SEASONALITY' - | 'DAILY' - | 'WEEKLY' - | 'MONTHLY' - | 'QUARTERLY' - | 'YEARLY' - >; - }; - - /** - * Model evaluation metrics for a single ARIMA forecasting model. - */ - type IArimaSingleModelForecastingMetrics = { - /** - * Arima fitting metrics. - */ - arimaFittingMetrics?: IArimaFittingMetrics; - /** - * Is arima model fitted with drift or not. It is always false when d is not 1. - */ - hasDrift?: boolean; - /** - * Non-seasonal order. - */ - nonSeasonalOrder?: IArimaOrder; - /** - * Seasonal periods. Repeated because multiple periods are supported for one time series. - */ - seasonalPeriods?: Array< - | 'SEASONAL_PERIOD_TYPE_UNSPECIFIED' - | 'NO_SEASONALITY' - | 'DAILY' - | 'WEEKLY' - | 'MONTHLY' - | 'QUARTERLY' - | 'YEARLY' - >; - /** - * The id to indicate different time series. - */ - timeSeriesId?: string; - }; - - /** - * Specifies the audit configuration for a service. The configuration determines which permission types are logged, and what identities, if any, are exempted from logging. An AuditConfig must have one or more AuditLogConfigs. If there are AuditConfigs for both `allServices` and a specific service, the union of the two AuditConfigs is used for that service: the log_types specified in each AuditConfig are enabled, and the exempted_members in each AuditLogConfig are exempted. Example Policy with multiple AuditConfigs: { "audit_configs": [ { "service": "allServices", "audit_log_configs": [ { "log_type": "DATA_READ", "exempted_members": [ "user:jose@example.com" ] }, { "log_type": "DATA_WRITE" }, { "log_type": "ADMIN_READ" } ] }, { "service": "sampleservice.googleapis.com", "audit_log_configs": [ { "log_type": "DATA_READ" }, { "log_type": "DATA_WRITE", "exempted_members": [ "user:aliya@example.com" ] } ] } ] } For sampleservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ logging. It also exempts jose@example.com from DATA_READ logging, and aliya@example.com from DATA_WRITE logging. - */ - type IAuditConfig = { - /** - * The configuration for logging of each type of permission. - */ - auditLogConfigs?: Array; - /** - * Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices` is a special value that covers all services. - */ - service?: string; - }; - - /** - * Provides the configuration for logging a type of permissions. Example: { "audit_log_configs": [ { "log_type": "DATA_READ", "exempted_members": [ "user:jose@example.com" ] }, { "log_type": "DATA_WRITE" } ] } This enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting jose@example.com from DATA_READ logging. - */ - type IAuditLogConfig = { - /** - * Specifies the identities that do not cause logging for this type of permission. Follows the same format of Binding.members. - */ - exemptedMembers?: Array; - /** - * The log type that this config enables. - */ - logType?: - | 'LOG_TYPE_UNSPECIFIED' - | 'ADMIN_READ' - | 'DATA_WRITE' - | 'DATA_READ'; - }; - - type IBigQueryModelTraining = { - /** - * [Output-only, Beta] Index of current ML training iteration. Updated during create model query job to show job progress. - */ - currentIteration?: number; - /** - * [Output-only, Beta] Expected number of iterations for the create model query job specified as num_iterations in the input query. The actual total number of iterations may be less than this number due to early stop. - */ - expectedTotalIterations?: string; - }; - - type IBigtableColumn = { - /** - * [Optional] The encoding of the values when the type is not STRING. Acceptable encoding values are: TEXT - indicates values are alphanumeric text strings. BINARY - indicates values are encoded using HBase Bytes.toBytes family of functions. 'encoding' can also be set at the column family level. However, the setting at this level takes precedence if 'encoding' is set at both levels. - */ - encoding?: string; - /** - * [Optional] If the qualifier is not a valid BigQuery field identifier i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier must be provided as the column field name and is used as field name in queries. - */ - fieldName?: string; - /** - * [Optional] If this is set, only the latest version of value in this column are exposed. 'onlyReadLatest' can also be set at the column family level. However, the setting at this level takes precedence if 'onlyReadLatest' is set at both levels. - */ - onlyReadLatest?: boolean; - /** - * [Required] Qualifier of the column. Columns in the parent column family that has this exact qualifier are exposed as . field. If the qualifier is valid UTF-8 string, it can be specified in the qualifier_string field. Otherwise, a base-64 encoded value must be set to qualifier_encoded. The column field name is the same as the column qualifier. However, if the qualifier is not a valid BigQuery field identifier i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier must be provided as field_name. - */ - qualifierEncoded?: string; - qualifierString?: string; - /** - * [Optional] The type to convert the value in cells of this column. The values are expected to be encoded using HBase Bytes.toBytes function when using the BINARY encoding value. Following BigQuery types are allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Default type is BYTES. 'type' can also be set at the column family level. However, the setting at this level takes precedence if 'type' is set at both levels. - */ - type?: string; - }; - - type IBigtableColumnFamily = { - /** - * [Optional] Lists of columns that should be exposed as individual fields as opposed to a list of (column name, value) pairs. All columns whose qualifier matches a qualifier in this list can be accessed as .. Other columns can be accessed as a list through .Column field. - */ - columns?: Array; - /** - * [Optional] The encoding of the values when the type is not STRING. Acceptable encoding values are: TEXT - indicates values are alphanumeric text strings. BINARY - indicates values are encoded using HBase Bytes.toBytes family of functions. This can be overridden for a specific column by listing that column in 'columns' and specifying an encoding for it. - */ - encoding?: string; - /** - * Identifier of the column family. - */ - familyId?: string; - /** - * [Optional] If this is set only the latest version of value are exposed for all columns in this column family. This can be overridden for a specific column by listing that column in 'columns' and specifying a different setting for that column. - */ - onlyReadLatest?: boolean; - /** - * [Optional] The type to convert the value in cells of this column family. The values are expected to be encoded using HBase Bytes.toBytes function when using the BINARY encoding value. Following BigQuery types are allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Default type is BYTES. This can be overridden for a specific column by listing that column in 'columns' and specifying a type for it. - */ - type?: string; - }; - - type IBigtableOptions = { - /** - * [Optional] List of column families to expose in the table schema along with their types. This list restricts the column families that can be referenced in queries and specifies their value types. You can use this list to do type conversions - see the 'type' field for more details. If you leave this list empty, all column families are present in the table schema and their values are read as BYTES. During a query only the column families referenced in that query are read from Bigtable. - */ - columnFamilies?: Array; - /** - * [Optional] If field is true, then the column families that are not specified in columnFamilies list are not exposed in the table schema. Otherwise, they are read with BYTES type values. The default value is false. - */ - ignoreUnspecifiedColumnFamilies?: boolean; - /** - * [Optional] If field is true, then the rowkey column families will be read and converted to string. Otherwise they are read with BYTES type values and users need to manually cast them with CAST if necessary. The default value is false. - */ - readRowkeyAsString?: boolean; - }; - - /** - * Evaluation metrics for binary classification/classifier models. - */ - type IBinaryClassificationMetrics = { - /** - * Aggregate classification metrics. - */ - aggregateClassificationMetrics?: IAggregateClassificationMetrics; - /** - * Binary confusion matrix at multiple thresholds. - */ - binaryConfusionMatrixList?: Array; - /** - * Label representing the negative class. - */ - negativeLabel?: string; - /** - * Label representing the positive class. - */ - positiveLabel?: string; - }; - - /** - * Confusion matrix for binary classification models. - */ - type IBinaryConfusionMatrix = { - /** - * The fraction of predictions given the correct label. - */ - accuracy?: number; - /** - * The equally weighted average of recall and precision. - */ - f1Score?: number; - /** - * Number of false samples predicted as false. - */ - falseNegatives?: string; - /** - * Number of false samples predicted as true. - */ - falsePositives?: string; - /** - * Threshold value used when computing each of the following metric. - */ - positiveClassThreshold?: number; - /** - * The fraction of actual positive predictions that had positive actual labels. - */ - precision?: number; - /** - * The fraction of actual positive labels that were given a positive prediction. - */ - recall?: number; - /** - * Number of true samples predicted as false. - */ - trueNegatives?: string; - /** - * Number of true samples predicted as true. - */ - truePositives?: string; - }; - - /** - * Associates `members` with a `role`. - */ - type IBinding = { - /** - * The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the members in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). - */ - condition?: IExpr; - /** - * Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`. - */ - members?: Array; - /** - * Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`. - */ - role?: string; - }; - - type IBqmlIterationResult = { - /** - * [Output-only, Beta] Time taken to run the training iteration in milliseconds. - */ - durationMs?: string; - /** - * [Output-only, Beta] Eval loss computed on the eval data at the end of the iteration. The eval loss is used for early stopping to avoid overfitting. No eval loss if eval_split_method option is specified as no_split or auto_split with input data size less than 500 rows. - */ - evalLoss?: number; - /** - * [Output-only, Beta] Index of the ML training iteration, starting from zero for each training run. - */ - index?: number; - /** - * [Output-only, Beta] Learning rate used for this iteration, it varies for different training iterations if learn_rate_strategy option is not constant. - */ - learnRate?: number; - /** - * [Output-only, Beta] Training loss computed on the training data at the end of the iteration. The training loss function is defined by model type. - */ - trainingLoss?: number; - }; - - type IBqmlTrainingRun = { - /** - * [Output-only, Beta] List of each iteration results. - */ - iterationResults?: Array; - /** - * [Output-only, Beta] Training run start time in milliseconds since the epoch. - */ - startTime?: string; - /** - * [Output-only, Beta] Different state applicable for a training run. IN PROGRESS: Training run is in progress. FAILED: Training run ended due to a non-retryable failure. SUCCEEDED: Training run successfully completed. CANCELLED: Training run cancelled by the user. - */ - state?: string; - /** - * [Output-only, Beta] Training options used by this training run. These options are mutable for subsequent training runs. Default values are explicitly stored for options not specified in the input query of the first training run. For subsequent training runs, any option not explicitly specified in the input query will be copied from the previous training run. - */ - trainingOptions?: { - earlyStop?: boolean; - l1Reg?: number; - l2Reg?: number; - learnRate?: number; - learnRateStrategy?: string; - lineSearchInitLearnRate?: number; - maxIteration?: string; - minRelProgress?: number; - warmStart?: boolean; - }; - }; - - /** - * Representative value of a categorical feature. - */ - type ICategoricalValue = { - /** - * Counts of all categories for the categorical feature. If there are more than ten categories, we return top ten (by count) and return one more CategoryCount with category "_OTHER_" and count as aggregate counts of remaining categories. - */ - categoryCounts?: Array; - }; - - /** - * Represents the count of a single category within the cluster. - */ - type ICategoryCount = { - /** - * The name of category. - */ - category?: string; - /** - * The count of training samples matching the category within the cluster. - */ - count?: string; - }; - - /** - * Message containing the information about one cluster. - */ - type ICluster = { - /** - * Centroid id. - */ - centroidId?: string; - /** - * Count of training data rows that were assigned to this cluster. - */ - count?: string; - /** - * Values of highly variant features for this cluster. - */ - featureValues?: Array; - }; - - /** - * Information about a single cluster for clustering model. - */ - type IClusterInfo = { - /** - * Centroid id. - */ - centroidId?: string; - /** - * Cluster radius, the average distance from centroid to each point assigned to the cluster. - */ - clusterRadius?: number; - /** - * Cluster size, the total number of points assigned to the cluster. - */ - clusterSize?: string; - }; - - type IClustering = { - /** - * [Repeated] One or more fields on which data should be clustered. Only top-level, non-repeated, simple-type fields are supported. When you cluster a table using multiple columns, the order of columns you specify is important. The order of the specified columns determines the sort order of the data. - */ - fields?: Array; - }; - - /** - * Evaluation metrics for clustering models. - */ - type IClusteringMetrics = { - /** - * [Beta] Information for all clusters. - */ - clusters?: Array; - /** - * Davies-Bouldin index. - */ - daviesBouldinIndex?: number; - /** - * Mean of squared distances between each sample to its cluster centroid. - */ - meanSquaredDistance?: number; - }; - - /** - * Confusion matrix for multi-class classification models. - */ - type IConfusionMatrix = { - /** - * Confidence threshold used when computing the entries of the confusion matrix. - */ - confidenceThreshold?: number; - /** - * One row per actual label. - */ - rows?: Array; - }; - - type IConnectionProperty = { - /** - * [Required] Name of the connection property to set. - */ - key?: string; - /** - * [Required] Value of the connection property. - */ - value?: string; - }; - - type ICsvOptions = { - /** - * [Optional] Indicates if BigQuery should accept rows that are missing trailing optional columns. If true, BigQuery treats missing trailing columns as null values. If false, records with missing trailing columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false. - */ - allowJaggedRows?: boolean; - /** - * [Optional] Indicates if BigQuery should allow quoted data sections that contain newline characters in a CSV file. The default value is false. - */ - allowQuotedNewlines?: boolean; - /** - * [Optional] The character encoding of the data. The supported values are UTF-8 or ISO-8859-1. The default value is UTF-8. BigQuery decodes the data after the raw, binary data has been split using the values of the quote and fieldDelimiter properties. - */ - encoding?: string; - /** - * [Optional] The separator for fields in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. BigQuery also supports the escape sequence "\t" to specify a tab separator. The default value is a comma (','). - */ - fieldDelimiter?: string; - /** - * [Optional] The value that is used to quote data sections in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. The default value is a double-quote ('"'). If your data does not contain quoted sections, set the property value to an empty string. If your data contains quoted newline characters, you must also set the allowQuotedNewlines property to true. - */ - quote?: string; - /** - * [Optional] The number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped. When autodetect is on, the behavior is the following: * skipLeadingRows unspecified - Autodetect tries to detect headers in the first row. If they are not detected, the row is read as data. Otherwise data is read starting from the second row. * skipLeadingRows is 0 - Instructs autodetect that there are no headers and data should be read starting from the first row. * skipLeadingRows = N > 0 - Autodetect skips N-1 rows and tries to detect headers in row N. If headers are not detected, row N is just skipped. Otherwise row N is used to extract column names for the detected schema. - */ - skipLeadingRows?: string; - }; - - /** - * Data split result. This contains references to the training and evaluation data tables that were used to train the model. - */ - type IDataSplitResult = { - /** - * Table reference of the evaluation data after split. - */ - evaluationTable?: ITableReference; - /** - * Table reference of the training data after split. - */ - trainingTable?: ITableReference; - }; - - type IDataset = { - /** - * [Optional] An array of objects that define dataset access for one or more entities. You can set this property when inserting or updating a dataset in order to control who is allowed to access the data. If unspecified at dataset creation time, BigQuery adds default dataset access for the following entities: access.specialGroup: projectReaders; access.role: READER; access.specialGroup: projectWriters; access.role: WRITER; access.specialGroup: projectOwners; access.role: OWNER; access.userByEmail: [dataset creator email]; access.role: OWNER; - */ - access?: Array<{ - /** - * [Pick one] A domain to grant access to. Any users signed in with the domain specified will be granted the specified access. Example: "example.com". Maps to IAM policy member "domain:DOMAIN". - */ - domain?: string; - /** - * [Pick one] An email address of a Google Group to grant access to. Maps to IAM policy member "group:GROUP". - */ - groupByEmail?: string; - /** - * [Pick one] Some other type of member that appears in the IAM Policy but isn't a user, group, domain, or special group. - */ - iamMember?: string; - /** - * [Required] An IAM role ID that should be granted to the user, group, or domain specified in this access entry. The following legacy mappings will be applied: OWNER roles/bigquery.dataOwner WRITER roles/bigquery.dataEditor READER roles/bigquery.dataViewer This field will accept any of the above formats, but will return only the legacy format. For example, if you set this field to "roles/bigquery.dataOwner", it will be returned back as "OWNER". - */ - role?: string; - /** - * [Pick one] A routine from a different dataset to grant access to. Queries executed against that routine will have read access to views/tables/routines in this dataset. Only UDF is supported for now. The role field is not required when this field is set. If that routine is updated by any user, access to the routine needs to be granted again via an update operation. - */ - routine?: IRoutineReference; - /** - * [Pick one] A special group to grant access to. Possible values include: projectOwners: Owners of the enclosing project. projectReaders: Readers of the enclosing project. projectWriters: Writers of the enclosing project. allAuthenticatedUsers: All authenticated BigQuery users. Maps to similarly-named IAM members. - */ - specialGroup?: string; - /** - * [Pick one] An email address of a user to grant access to. For example: fred@example.com. Maps to IAM policy member "user:EMAIL" or "serviceAccount:EMAIL". - */ - userByEmail?: string; - /** - * [Pick one] A view from a different dataset to grant access to. Queries executed against that view will have read access to tables in this dataset. The role field is not required when this field is set. If that view is updated by any user, access to the view needs to be granted again via an update operation. - */ - view?: ITableReference; - }>; - /** - * [Output-only] The time when this dataset was created, in milliseconds since the epoch. - */ - creationTime?: string; - /** - * [Required] A reference that identifies the dataset. - */ - datasetReference?: IDatasetReference; - defaultEncryptionConfiguration?: IEncryptionConfiguration; - /** - * [Optional] The default partition expiration for all partitioned tables in the dataset, in milliseconds. Once this property is set, all newly-created partitioned tables in the dataset will have an expirationMs property in the timePartitioning settings set to this value, and changing the value will only affect new tables, not existing ones. The storage in a partition will have an expiration time of its partition time plus this value. Setting this property overrides the use of defaultTableExpirationMs for partitioned tables: only one of defaultTableExpirationMs and defaultPartitionExpirationMs will be used for any new partitioned table. If you provide an explicit timePartitioning.expirationMs when creating or updating a partitioned table, that value takes precedence over the default partition expiration time indicated by this property. - */ - defaultPartitionExpirationMs?: string; - /** - * [Optional] The default lifetime of all tables in the dataset, in milliseconds. The minimum value is 3600000 milliseconds (one hour). Once this property is set, all newly-created tables in the dataset will have an expirationTime property set to the creation time plus the value in this property, and changing the value will only affect new tables, not existing ones. When the expirationTime for a given table is reached, that table will be deleted automatically. If a table's expirationTime is modified or removed before the table expires, or if you provide an explicit expirationTime when creating a table, that value takes precedence over the default expiration time indicated by this property. - */ - defaultTableExpirationMs?: string; - /** - * [Optional] A user-friendly description of the dataset. - */ - description?: string; - /** - * [Output-only] A hash of the resource. - */ - etag?: string; - /** - * [Optional] A descriptive name for the dataset. - */ - friendlyName?: string; - /** - * [Output-only] The fully-qualified unique name of the dataset in the format projectId:datasetId. The dataset name without the project name is given in the datasetId field. When creating a new dataset, leave this field blank, and instead specify the datasetId field. - */ - id?: string; - /** - * [Output-only] The resource type. - */ - kind?: string; - /** - * The labels associated with this dataset. You can use these to organize and group your datasets. You can set this property when inserting or updating a dataset. See Creating and Updating Dataset Labels for more information. - */ - labels?: {[key: string]: string}; - /** - * [Output-only] The date when this dataset or any of its tables was last modified, in milliseconds since the epoch. - */ - lastModifiedTime?: string; - /** - * The geographic location where the dataset should reside. The default value is US. See details at https://cloud.google.com/bigquery/docs/locations. - */ - location?: string; - /** - * [Output-only] Reserved for future use. - */ - satisfiesPZS?: boolean; - /** - * [Output-only] A URL that can be used to access the resource again. You can use this URL in Get or Update requests to the resource. - */ - selfLink?: string; - }; - - type IDatasetList = { - /** - * An array of the dataset resources in the project. Each resource contains basic information. For full information about a particular dataset resource, use the Datasets: get method. This property is omitted when there are no datasets in the project. - */ - datasets?: Array<{ - /** - * The dataset reference. Use this property to access specific parts of the dataset's ID, such as project ID or dataset ID. - */ - datasetReference?: IDatasetReference; - /** - * A descriptive name for the dataset, if one exists. - */ - friendlyName?: string; - /** - * The fully-qualified, unique, opaque ID of the dataset. - */ - id?: string; - /** - * The resource type. This property always returns the value "bigquery#dataset". - */ - kind?: string; - /** - * The labels associated with this dataset. You can use these to organize and group your datasets. - */ - labels?: {[key: string]: string}; - /** - * The geographic location where the data resides. - */ - location?: string; - }>; - /** - * A hash value of the results page. You can use this property to determine if the page has changed since the last request. - */ - etag?: string; - /** - * The list type. This property always returns the value "bigquery#datasetList". - */ - kind?: string; - /** - * A token that can be used to request the next results page. This property is omitted on the final results page. - */ - nextPageToken?: string; - }; - - type IDatasetReference = { - /** - * [Required] A unique ID for this dataset, without the project name. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters. - */ - datasetId?: string; - /** - * [Optional] The ID of the project containing this dataset. - */ - projectId?: string; - }; - - type IDestinationTableProperties = { - /** - * [Optional] The description for the destination table. This will only be used if the destination table is newly created. If the table already exists and a value different than the current description is provided, the job will fail. - */ - description?: string; - /** - * [Optional] The friendly name for the destination table. This will only be used if the destination table is newly created. If the table already exists and a value different than the current friendly name is provided, the job will fail. - */ - friendlyName?: string; - /** - * [Optional] The labels associated with this table. You can use these to organize and group your tables. This will only be used if the destination table is newly created. If the table already exists and labels are different than the current labels are provided, the job will fail. - */ - labels?: {[key: string]: string}; - }; - - type IEncryptionConfiguration = { - /** - * [Optional] Describes the Cloud KMS encryption key that will be used to protect destination BigQuery table. The BigQuery Service Account associated with your project requires access to this encryption key. - */ - kmsKeyName?: string; - }; - - /** - * A single entry in the confusion matrix. - */ - type IEntry = { - /** - * Number of items being predicted as this label. - */ - itemCount?: string; - /** - * The predicted label. For confidence_threshold > 0, we will also add an entry indicating the number of items under the confidence threshold. - */ - predictedLabel?: string; - }; - - type IErrorProto = { - /** - * Debugging information. This property is internal to Google and should not be used. - */ - debugInfo?: string; - /** - * Specifies where the error occurred, if present. - */ - location?: string; - /** - * A human-readable description of the error. - */ - message?: string; - /** - * A short error code that summarizes the error. - */ - reason?: string; - }; - - /** - * Evaluation metrics of a model. These are either computed on all training data or just the eval data based on whether eval data was used during training. These are not present for imported models. - */ - type IEvaluationMetrics = { - /** - * Populated for ARIMA models. - */ - arimaForecastingMetrics?: IArimaForecastingMetrics; - /** - * Populated for binary classification/classifier models. - */ - binaryClassificationMetrics?: IBinaryClassificationMetrics; - /** - * Populated for clustering models. - */ - clusteringMetrics?: IClusteringMetrics; - /** - * Populated for multi-class classification/classifier models. - */ - multiClassClassificationMetrics?: IMultiClassClassificationMetrics; - /** - * Populated for implicit feedback type matrix factorization models. - */ - rankingMetrics?: IRankingMetrics; - /** - * Populated for regression models and explicit feedback type matrix factorization models. - */ - regressionMetrics?: IRegressionMetrics; - }; - - type IExplainQueryStage = { - /** - * Number of parallel input segments completed. - */ - completedParallelInputs?: string; - /** - * Milliseconds the average shard spent on CPU-bound tasks. - */ - computeMsAvg?: string; - /** - * Milliseconds the slowest shard spent on CPU-bound tasks. - */ - computeMsMax?: string; - /** - * Relative amount of time the average shard spent on CPU-bound tasks. - */ - computeRatioAvg?: number; - /** - * Relative amount of time the slowest shard spent on CPU-bound tasks. - */ - computeRatioMax?: number; - /** - * Stage end time represented as milliseconds since epoch. - */ - endMs?: string; - /** - * Unique ID for stage within plan. - */ - id?: string; - /** - * IDs for stages that are inputs to this stage. - */ - inputStages?: Array; - /** - * Human-readable name for stage. - */ - name?: string; - /** - * Number of parallel input segments to be processed. - */ - parallelInputs?: string; - /** - * Milliseconds the average shard spent reading input. - */ - readMsAvg?: string; - /** - * Milliseconds the slowest shard spent reading input. - */ - readMsMax?: string; - /** - * Relative amount of time the average shard spent reading input. - */ - readRatioAvg?: number; - /** - * Relative amount of time the slowest shard spent reading input. - */ - readRatioMax?: number; - /** - * Number of records read into the stage. - */ - recordsRead?: string; - /** - * Number of records written by the stage. - */ - recordsWritten?: string; - /** - * Total number of bytes written to shuffle. - */ - shuffleOutputBytes?: string; - /** - * Total number of bytes written to shuffle and spilled to disk. - */ - shuffleOutputBytesSpilled?: string; - /** - * Slot-milliseconds used by the stage. - */ - slotMs?: string; - /** - * Stage start time represented as milliseconds since epoch. - */ - startMs?: string; - /** - * Current status for the stage. - */ - status?: string; - /** - * List of operations within the stage in dependency order (approximately chronological). - */ - steps?: Array; - /** - * Milliseconds the average shard spent waiting to be scheduled. - */ - waitMsAvg?: string; - /** - * Milliseconds the slowest shard spent waiting to be scheduled. - */ - waitMsMax?: string; - /** - * Relative amount of time the average shard spent waiting to be scheduled. - */ - waitRatioAvg?: number; - /** - * Relative amount of time the slowest shard spent waiting to be scheduled. - */ - waitRatioMax?: number; - /** - * Milliseconds the average shard spent on writing output. - */ - writeMsAvg?: string; - /** - * Milliseconds the slowest shard spent on writing output. - */ - writeMsMax?: string; - /** - * Relative amount of time the average shard spent on writing output. - */ - writeRatioAvg?: number; - /** - * Relative amount of time the slowest shard spent on writing output. - */ - writeRatioMax?: number; - }; - - type IExplainQueryStep = { - /** - * Machine-readable operation type. - */ - kind?: string; - /** - * Human-readable stage descriptions. - */ - substeps?: Array; - }; - - /** - * Explanation for a single feature. - */ - type IExplanation = { - /** - * Attribution of feature. - */ - attribution?: number; - /** - * Full name of the feature. For non-numerical features, will be formatted like .. Overall size of feature name will always be truncated to first 120 characters. - */ - featureName?: string; - }; - - /** - * Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: "Summary size limit" description: "Determines if a summary is less than 100 chars" expression: "document.summary.size() < 100" Example (Equality): title: "Requestor is owner" description: "Determines if requestor is the document owner" expression: "document.owner == request.auth.claims.email" Example (Logic): title: "Public documents" description: "Determine whether the document should be publicly visible" expression: "document.type != 'private' && document.type != 'internal'" Example (Data Manipulation): title: "Notification string" description: "Create a notification string with a timestamp." expression: "'New message received at ' + string(document.create_time)" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information. - */ - type IExpr = { - /** - * Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. - */ - description?: string; - /** - * Textual representation of an expression in Common Expression Language syntax. - */ - expression?: string; - /** - * Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file. - */ - location?: string; - /** - * Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression. - */ - title?: string; - }; - - type IExternalDataConfiguration = { - /** - * Try to detect schema and format options automatically. Any option specified explicitly will be honored. - */ - autodetect?: boolean; - /** - * [Optional] Additional options if sourceFormat is set to BIGTABLE. - */ - bigtableOptions?: IBigtableOptions; - /** - * [Optional] The compression type of the data source. Possible values include GZIP and NONE. The default value is NONE. This setting is ignored for Google Cloud Bigtable, Google Cloud Datastore backups and Avro formats. - */ - compression?: string; - /** - * [Optional, Trusted Tester] Connection for external data source. - */ - connectionId?: string; - /** - * Additional properties to set if sourceFormat is set to CSV. - */ - csvOptions?: ICsvOptions; - /** - * [Optional] Additional options if sourceFormat is set to GOOGLE_SHEETS. - */ - googleSheetsOptions?: IGoogleSheetsOptions; - /** - * [Optional, Trusted Tester] Options to configure hive partitioning support. - */ - hivePartitioningOptions?: IHivePartitioningOptions; - /** - * [Optional] Indicates if BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false. The sourceFormat property determines what BigQuery treats as an extra value: CSV: Trailing columns JSON: Named values that don't match any column names Google Cloud Bigtable: This setting is ignored. Google Cloud Datastore backups: This setting is ignored. Avro: This setting is ignored. - */ - ignoreUnknownValues?: boolean; - /** - * [Optional] The maximum number of bad records that BigQuery can ignore when reading data. If the number of bad records exceeds this value, an invalid error is returned in the job result. This is only valid for CSV, JSON, and Google Sheets. The default value is 0, which requires that all records are valid. This setting is ignored for Google Cloud Bigtable, Google Cloud Datastore backups and Avro formats. - */ - maxBadRecords?: number; - /** - * [Optional] The schema for the data. Schema is required for CSV and JSON formats. Schema is disallowed for Google Cloud Bigtable, Cloud Datastore backups, and Avro formats. - */ - schema?: ITableSchema; - /** - * [Required] The data format. For CSV files, specify "CSV". For Google sheets, specify "GOOGLE_SHEETS". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Avro files, specify "AVRO". For Google Cloud Datastore backups, specify "DATASTORE_BACKUP". [Beta] For Google Cloud Bigtable, specify "BIGTABLE". - */ - sourceFormat?: string; - /** - * [Required] The fully-qualified URIs that point to your data in Google Cloud. For Google Cloud Storage URIs: Each URI can contain one '*' wildcard character and it must come after the 'bucket' name. Size limits related to load jobs apply to external data sources. For Google Cloud Bigtable URIs: Exactly one URI can be specified and it has be a fully specified and valid HTTPS URL for a Google Cloud Bigtable table. For Google Cloud Datastore backups, exactly one URI can be specified. Also, the '*' wildcard character is not allowed. - */ - sourceUris?: Array; - }; - - /** - * Representative value of a single feature within the cluster. - */ - type IFeatureValue = { - /** - * The categorical feature value. - */ - categoricalValue?: ICategoricalValue; - /** - * The feature column name. - */ - featureColumn?: string; - /** - * The numerical feature value. This is the centroid value for this feature. - */ - numericalValue?: number; - }; - - /** - * Request message for `GetIamPolicy` method. - */ - type IGetIamPolicyRequest = { - /** - * OPTIONAL: A `GetPolicyOptions` object for specifying options to `GetIamPolicy`. - */ - options?: IGetPolicyOptions; - }; - - /** - * Encapsulates settings provided to GetIamPolicy. - */ - type IGetPolicyOptions = { - /** - * Optional. The policy format version to be returned. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional bindings must specify version 3. Policies without any conditional bindings may specify any valid value or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). - */ - requestedPolicyVersion?: number; - }; - - type IGetQueryResultsResponse = { - /** - * Whether the query result was fetched from the query cache. - */ - cacheHit?: boolean; - /** - * [Output-only] The first errors or warnings encountered during the running of the job. The final message includes the number of errors that caused the process to stop. Errors here do not necessarily mean that the job has completed or was unsuccessful. - */ - errors?: Array; - /** - * A hash of this response. - */ - etag?: string; - /** - * Whether the query has completed or not. If rows or totalRows are present, this will always be true. If this is false, totalRows will not be available. - */ - jobComplete?: boolean; - /** - * Reference to the BigQuery Job that was created to run the query. This field will be present even if the original request timed out, in which case GetQueryResults can be used to read the results once the query has completed. Since this API only returns the first page of results, subsequent pages can be fetched via the same mechanism (GetQueryResults). - */ - jobReference?: IJobReference; - /** - * The resource type of the response. - */ - kind?: string; - /** - * [Output-only] The number of rows affected by a DML statement. Present only for DML statements INSERT, UPDATE or DELETE. - */ - numDmlAffectedRows?: string; - /** - * A token used for paging results. - */ - pageToken?: string; - /** - * An object with as many results as can be contained within the maximum permitted reply size. To get any additional rows, you can call GetQueryResults and specify the jobReference returned above. Present only when the query completes successfully. - */ - rows?: Array; - /** - * The schema of the results. Present only when the query completes successfully. - */ - schema?: ITableSchema; - /** - * The total number of bytes processed for this query. - */ - totalBytesProcessed?: string; - /** - * The total number of rows in the complete query result set, which can be more than the number of rows in this single page of results. Present only when the query completes successfully. - */ - totalRows?: string; - }; - - type IGetServiceAccountResponse = { - /** - * The service account email address. - */ - email?: string; - /** - * The resource type of the response. - */ - kind?: string; - }; - - /** - * Global explanations containing the top most important features after training. - */ - type IGlobalExplanation = { - /** - * Class label for this set of global explanations. Will be empty/null for binary logistic and linear regression models. Sorted alphabetically in descending order. - */ - classLabel?: string; - /** - * A list of the top global explanations. Sorted by absolute value of attribution in descending order. - */ - explanations?: Array; - }; - - type IGoogleSheetsOptions = { - /** - * [Optional] Range of a sheet to query from. Only used when non-empty. Typical format: sheet_name!top_left_cell_id:bottom_right_cell_id For example: sheet1!A1:B20 - */ - range?: string; - /** - * [Optional] The number of rows at the top of a sheet that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows that should be skipped. When autodetect is on, behavior is the following: * skipLeadingRows unspecified - Autodetect tries to detect headers in the first row. If they are not detected, the row is read as data. Otherwise data is read starting from the second row. * skipLeadingRows is 0 - Instructs autodetect that there are no headers and data should be read starting from the first row. * skipLeadingRows = N > 0 - Autodetect skips N-1 rows and tries to detect headers in row N. If headers are not detected, row N is just skipped. Otherwise row N is used to extract column names for the detected schema. - */ - skipLeadingRows?: string; - }; - - type IHivePartitioningOptions = { - /** - * [Optional] When set, what mode of hive partitioning to use when reading data. The following modes are supported. (1) AUTO: automatically infer partition key name(s) and type(s). (2) STRINGS: automatically infer partition key name(s). All types are interpreted as strings. (3) CUSTOM: partition key schema is encoded in the source URI prefix. Not all storage formats support hive partitioning. Requesting hive partitioning on an unsupported format will lead to an error. Currently supported types include: AVRO, CSV, JSON, ORC and Parquet. - */ - mode?: string; - /** - * [Optional] If set to true, queries over this table require a partition filter that can be used for partition elimination to be specified. Note that this field should only be true when creating a permanent external table or querying a temporary external table. Hive-partitioned loads with requirePartitionFilter explicitly set to true will fail. - */ - requirePartitionFilter?: boolean; - /** - * [Optional] When hive partition detection is requested, a common prefix for all source uris should be supplied. The prefix must end immediately before the partition key encoding begins. For example, consider files following this data layout. gs://bucket/path_to_table/dt=2019-01-01/country=BR/id=7/file.avro gs://bucket/path_to_table/dt=2018-12-31/country=CA/id=3/file.avro When hive partitioning is requested with either AUTO or STRINGS detection, the common prefix can be either of gs://bucket/path_to_table or gs://bucket/path_to_table/ (trailing slash does not matter). - */ - sourceUriPrefix?: string; - }; - - /** - * Information about a single iteration of the training run. - */ - type IIterationResult = { - arimaResult?: IArimaResult; - /** - * Information about top clusters for clustering models. - */ - clusterInfos?: Array; - /** - * Time taken to run the iteration in milliseconds. - */ - durationMs?: string; - /** - * Loss computed on the eval data at the end of iteration. - */ - evalLoss?: number; - /** - * Index of the iteration, 0 based. - */ - index?: number; - /** - * Learn rate used for this iteration. - */ - learnRate?: number; - /** - * Loss computed on the training data at the end of iteration. - */ - trainingLoss?: number; - }; - - type IJob = { - /** - * [Required] Describes the job configuration. - */ - configuration?: IJobConfiguration; - /** - * [Output-only] A hash of this resource. - */ - etag?: string; - /** - * [Output-only] Opaque ID field of the job - */ - id?: string; - /** - * [Optional] Reference describing the unique-per-user name of the job. - */ - jobReference?: IJobReference; - /** - * [Output-only] The type of the resource. - */ - kind?: string; - /** - * [Output-only] A URL that can be used to access this resource again. - */ - selfLink?: string; - /** - * [Output-only] Information about the job, including starting time and ending time of the job. - */ - statistics?: IJobStatistics; - /** - * [Output-only] The status of this job. Examine this value when polling an asynchronous job to see if the job is complete. - */ - status?: IJobStatus; - /** - * [Output-only] Email address of the user who ran the job. - */ - user_email?: string; - }; - - type IJobCancelResponse = { - /** - * The final state of the job. - */ - job?: IJob; - /** - * The resource type of the response. - */ - kind?: string; - }; - - type IJobConfiguration = { - /** - * [Pick one] Copies a table. - */ - copy?: IJobConfigurationTableCopy; - /** - * [Optional] If set, don't actually run this job. A valid query will return a mostly empty response with some processing statistics, while an invalid query will return the same error it would if it wasn't a dry run. Behavior of non-query jobs is undefined. - */ - dryRun?: boolean; - /** - * [Pick one] Configures an extract job. - */ - extract?: IJobConfigurationExtract; - /** - * [Optional] Job timeout in milliseconds. If this time limit is exceeded, BigQuery may attempt to terminate the job. - */ - jobTimeoutMs?: string; - /** - * [Output-only] The type of the job. Can be QUERY, LOAD, EXTRACT, COPY or UNKNOWN. - */ - jobType?: string; - /** - * The labels associated with this job. You can use these to organize and group your jobs. Label keys and values can be no longer than 63 characters, can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. Label values are optional. Label keys must start with a letter and each label in the list must have a different key. - */ - labels?: {[key: string]: string}; - /** - * [Pick one] Configures a load job. - */ - load?: IJobConfigurationLoad; - /** - * [Pick one] Configures a query job. - */ - query?: IJobConfigurationQuery; - }; - - type IJobConfigurationExtract = { - /** - * [Optional] The compression type to use for exported files. Possible values include GZIP, DEFLATE, SNAPPY, and NONE. The default value is NONE. DEFLATE and SNAPPY are only supported for Avro. Not applicable when extracting models. - */ - compression?: string; - /** - * [Optional] The exported file format. Possible values include CSV, NEWLINE_DELIMITED_JSON, PARQUET or AVRO for tables and ML_TF_SAVED_MODEL or ML_XGBOOST_BOOSTER for models. The default value for tables is CSV. Tables with nested or repeated fields cannot be exported as CSV. The default value for models is ML_TF_SAVED_MODEL. - */ - destinationFormat?: string; - /** - * [Pick one] DEPRECATED: Use destinationUris instead, passing only one URI as necessary. The fully-qualified Google Cloud Storage URI where the extracted table should be written. - */ - destinationUri?: string; - /** - * [Pick one] A list of fully-qualified Google Cloud Storage URIs where the extracted table should be written. - */ - destinationUris?: Array; - /** - * [Optional] Delimiter to use between fields in the exported data. Default is ','. Not applicable when extracting models. - */ - fieldDelimiter?: string; - /** - * [Optional] Whether to print out a header row in the results. Default is true. Not applicable when extracting models. - */ - printHeader?: boolean; - /** - * A reference to the model being exported. - */ - sourceModel?: IModelReference; - /** - * A reference to the table being exported. - */ - sourceTable?: ITableReference; - /** - * [Optional] If destinationFormat is set to "AVRO", this flag indicates whether to enable extracting applicable column types (such as TIMESTAMP) to their corresponding AVRO logical types (timestamp-micros), instead of only using their raw types (avro-long). Not applicable when extracting models. - */ - useAvroLogicalTypes?: boolean; - }; - - type IJobConfigurationLoad = { - /** - * [Optional] Accept rows that are missing trailing optional columns. The missing values are treated as nulls. If false, records with missing trailing columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false. Only applicable to CSV, ignored for other formats. - */ - allowJaggedRows?: boolean; - /** - * Indicates if BigQuery should allow quoted data sections that contain newline characters in a CSV file. The default value is false. - */ - allowQuotedNewlines?: boolean; - /** - * [Optional] Indicates if we should automatically infer the options and schema for CSV and JSON sources. - */ - autodetect?: boolean; - /** - * [Beta] Clustering specification for the destination table. Must be specified with time-based partitioning, data in the table will be first partitioned and subsequently clustered. - */ - clustering?: IClustering; - /** - * [Optional] Specifies whether the job is allowed to create new tables. The following values are supported: CREATE_IF_NEEDED: If the table does not exist, BigQuery creates the table. CREATE_NEVER: The table must already exist. If it does not, a 'notFound' error is returned in the job result. The default value is CREATE_IF_NEEDED. Creation, truncation and append actions occur as one atomic update upon job completion. - */ - createDisposition?: string; - /** - * [Trusted Tester] Defines the list of possible SQL data types to which the source decimal values are converted. This list and the precision and the scale parameters of the decimal field determine the target type. In the order of NUMERIC, BIGNUMERIC, and STRING, a type is picked if it is in the specified list and if it supports the precision and the scale. STRING supports all precision and scale values. If none of the listed types supports the precision and the scale, the type supporting the widest range in the specified list is picked, and if a value exceeds the supported range when reading the data, an error will be thrown. For example: suppose decimal_target_type = ["NUMERIC", "BIGNUMERIC"]. Then if (precision,scale) is: * (38,9) -> NUMERIC; * (39,9) -> BIGNUMERIC (NUMERIC cannot hold 30 integer digits); * (38,10) -> BIGNUMERIC (NUMERIC cannot hold 10 fractional digits); * (76,38) -> BIGNUMERIC; * (77,38) -> BIGNUMERIC (error if value exeeds supported range). For duplicated types in this field, only one will be considered and the rest will be ignored. The order of the types in this field is ignored. For example, ["BIGNUMERIC", "NUMERIC"] is the same as ["NUMERIC", "BIGNUMERIC"] and NUMERIC always takes precedence over BIGNUMERIC. - */ - decimalTargetTypes?: Array; - /** - * Custom encryption configuration (e.g., Cloud KMS keys). - */ - destinationEncryptionConfiguration?: IEncryptionConfiguration; - /** - * [Required] The destination table to load the data into. - */ - destinationTable?: ITableReference; - /** - * [Beta] [Optional] Properties with which to create the destination table if it is new. - */ - destinationTableProperties?: IDestinationTableProperties; - /** - * [Optional] The character encoding of the data. The supported values are UTF-8 or ISO-8859-1. The default value is UTF-8. BigQuery decodes the data after the raw, binary data has been split using the values of the quote and fieldDelimiter properties. - */ - encoding?: string; - /** - * [Optional] The separator for fields in a CSV file. The separator can be any ISO-8859-1 single-byte character. To use a character in the range 128-255, you must encode the character as UTF8. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. BigQuery also supports the escape sequence "\t" to specify a tab separator. The default value is a comma (','). - */ - fieldDelimiter?: string; - /** - * [Optional, Trusted Tester] Options to configure hive partitioning support. - */ - hivePartitioningOptions?: IHivePartitioningOptions; - /** - * [Optional] Indicates if BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false. The sourceFormat property determines what BigQuery treats as an extra value: CSV: Trailing columns JSON: Named values that don't match any column names - */ - ignoreUnknownValues?: boolean; - /** - * [Optional] The maximum number of bad records that BigQuery can ignore when running the job. If the number of bad records exceeds this value, an invalid error is returned in the job result. This is only valid for CSV and JSON. The default value is 0, which requires that all records are valid. - */ - maxBadRecords?: number; - /** - * [Optional] Specifies a string that represents a null value in a CSV file. For example, if you specify "\N", BigQuery interprets "\N" as a null value when loading a CSV file. The default value is the empty string. If you set this property to a custom value, BigQuery throws an error if an empty string is present for all data types except for STRING and BYTE. For STRING and BYTE columns, BigQuery interprets the empty string as an empty value. - */ - nullMarker?: string; - /** - * If sourceFormat is set to "DATASTORE_BACKUP", indicates which entity properties to load into BigQuery from a Cloud Datastore backup. Property names are case sensitive and must be top-level properties. If no properties are specified, BigQuery loads all properties. If any named property isn't found in the Cloud Datastore backup, an invalid error is returned in the job result. - */ - projectionFields?: Array; - /** - * [Optional] The value that is used to quote data sections in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. The default value is a double-quote ('"'). If your data does not contain quoted sections, set the property value to an empty string. If your data contains quoted newline characters, you must also set the allowQuotedNewlines property to true. - */ - quote?: string; - /** - * [TrustedTester] Range partitioning specification for this table. Only one of timePartitioning and rangePartitioning should be specified. - */ - rangePartitioning?: IRangePartitioning; - /** - * [Optional] The schema for the destination table. The schema can be omitted if the destination table already exists, or if you're loading data from Google Cloud Datastore. - */ - schema?: ITableSchema; - /** - * [Deprecated] The inline schema. For CSV schemas, specify as "Field1:Type1[,Field2:Type2]*". For example, "foo:STRING, bar:INTEGER, baz:FLOAT". - */ - schemaInline?: string; - /** - * [Deprecated] The format of the schemaInline property. - */ - schemaInlineFormat?: string; - /** - * Allows the schema of the destination table to be updated as a side effect of the load job if a schema is autodetected or supplied in the job configuration. Schema update options are supported in two cases: when writeDisposition is WRITE_APPEND; when writeDisposition is WRITE_TRUNCATE and the destination table is a partition of a table, specified by partition decorators. For normal tables, WRITE_TRUNCATE will always overwrite the schema. One or more of the following values are specified: ALLOW_FIELD_ADDITION: allow adding a nullable field to the schema. ALLOW_FIELD_RELAXATION: allow relaxing a required field in the original schema to nullable. - */ - schemaUpdateOptions?: Array; - /** - * [Optional] The number of rows at the top of a CSV file that BigQuery will skip when loading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped. - */ - skipLeadingRows?: number; - /** - * [Optional] The format of the data files. For CSV files, specify "CSV". For datastore backups, specify "DATASTORE_BACKUP". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Avro, specify "AVRO". For parquet, specify "PARQUET". For orc, specify "ORC". The default value is CSV. - */ - sourceFormat?: string; - /** - * [Required] The fully-qualified URIs that point to your data in Google Cloud. For Google Cloud Storage URIs: Each URI can contain one '*' wildcard character and it must come after the 'bucket' name. Size limits related to load jobs apply to external data sources. For Google Cloud Bigtable URIs: Exactly one URI can be specified and it has be a fully specified and valid HTTPS URL for a Google Cloud Bigtable table. For Google Cloud Datastore backups: Exactly one URI can be specified. Also, the '*' wildcard character is not allowed. - */ - sourceUris?: Array; - /** - * Time-based partitioning specification for the destination table. Only one of timePartitioning and rangePartitioning should be specified. - */ - timePartitioning?: ITimePartitioning; - /** - * [Optional] If sourceFormat is set to "AVRO", indicates whether to enable interpreting logical types into their corresponding types (ie. TIMESTAMP), instead of only using their raw types (ie. INTEGER). - */ - useAvroLogicalTypes?: boolean; - /** - * [Optional] Specifies the action that occurs if the destination table already exists. The following values are supported: WRITE_TRUNCATE: If the table already exists, BigQuery overwrites the table data. WRITE_APPEND: If the table already exists, BigQuery appends the data to the table. WRITE_EMPTY: If the table already exists and contains data, a 'duplicate' error is returned in the job result. The default value is WRITE_APPEND. Each action is atomic and only occurs if BigQuery is able to complete the job successfully. Creation, truncation and append actions occur as one atomic update upon job completion. - */ - writeDisposition?: string; - }; - - type IJobConfigurationQuery = { - /** - * [Optional] If true and query uses legacy SQL dialect, allows the query to produce arbitrarily large result tables at a slight cost in performance. Requires destinationTable to be set. For standard SQL queries, this flag is ignored and large results are always allowed. However, you must still set destinationTable when result size exceeds the allowed maximum response size. - */ - allowLargeResults?: boolean; - /** - * [Beta] Clustering specification for the destination table. Must be specified with time-based partitioning, data in the table will be first partitioned and subsequently clustered. - */ - clustering?: IClustering; - /** - * Connection properties. - */ - connectionProperties?: Array; - /** - * [Optional] Specifies whether the job is allowed to create new tables. The following values are supported: CREATE_IF_NEEDED: If the table does not exist, BigQuery creates the table. CREATE_NEVER: The table must already exist. If it does not, a 'notFound' error is returned in the job result. The default value is CREATE_IF_NEEDED. Creation, truncation and append actions occur as one atomic update upon job completion. - */ - createDisposition?: string; - /** - * [Optional] Specifies the default dataset to use for unqualified table names in the query. Note that this does not alter behavior of unqualified dataset names. - */ - defaultDataset?: IDatasetReference; - /** - * Custom encryption configuration (e.g., Cloud KMS keys). - */ - destinationEncryptionConfiguration?: IEncryptionConfiguration; - /** - * [Optional] Describes the table where the query results should be stored. If not present, a new table will be created to store the results. This property must be set for large results that exceed the maximum response size. - */ - destinationTable?: ITableReference; - /** - * [Optional] If true and query uses legacy SQL dialect, flattens all nested and repeated fields in the query results. allowLargeResults must be true if this is set to false. For standard SQL queries, this flag is ignored and results are never flattened. - */ - flattenResults?: boolean; - /** - * [Optional] Limits the billing tier for this job. Queries that have resource usage beyond this tier will fail (without incurring a charge). If unspecified, this will be set to your project default. - */ - maximumBillingTier?: number; - /** - * [Optional] Limits the bytes billed for this job. Queries that will have bytes billed beyond this limit will fail (without incurring a charge). If unspecified, this will be set to your project default. - */ - maximumBytesBilled?: string; - /** - * Standard SQL only. Set to POSITIONAL to use positional (?) query parameters or to NAMED to use named (@myparam) query parameters in this query. - */ - parameterMode?: string; - /** - * [Deprecated] This property is deprecated. - */ - preserveNulls?: boolean; - /** - * [Optional] Specifies a priority for the query. Possible values include INTERACTIVE and BATCH. The default value is INTERACTIVE. - */ - priority?: string; - /** - * [Required] SQL query text to execute. The useLegacySql field can be used to indicate whether the query uses legacy SQL or standard SQL. - */ - query?: string; - /** - * Query parameters for standard SQL queries. - */ - queryParameters?: Array; - /** - * [TrustedTester] Range partitioning specification for this table. Only one of timePartitioning and rangePartitioning should be specified. - */ - rangePartitioning?: IRangePartitioning; - /** - * Allows the schema of the destination table to be updated as a side effect of the query job. Schema update options are supported in two cases: when writeDisposition is WRITE_APPEND; when writeDisposition is WRITE_TRUNCATE and the destination table is a partition of a table, specified by partition decorators. For normal tables, WRITE_TRUNCATE will always overwrite the schema. One or more of the following values are specified: ALLOW_FIELD_ADDITION: allow adding a nullable field to the schema. ALLOW_FIELD_RELAXATION: allow relaxing a required field in the original schema to nullable. - */ - schemaUpdateOptions?: Array; - /** - * [Optional] If querying an external data source outside of BigQuery, describes the data format, location and other properties of the data source. By defining these properties, the data source can then be queried as if it were a standard BigQuery table. - */ - tableDefinitions?: {[key: string]: IExternalDataConfiguration}; - /** - * Time-based partitioning specification for the destination table. Only one of timePartitioning and rangePartitioning should be specified. - */ - timePartitioning?: ITimePartitioning; - /** - * Specifies whether to use BigQuery's legacy SQL dialect for this query. The default value is true. If set to false, the query will use BigQuery's standard SQL: https://cloud.google.com/bigquery/sql-reference/ When useLegacySql is set to false, the value of flattenResults is ignored; query will be run as if flattenResults is false. - */ - useLegacySql?: boolean; - /** - * [Optional] Whether to look for the result in the query cache. The query cache is a best-effort cache that will be flushed whenever tables in the query are modified. Moreover, the query cache is only available when a query does not have a destination table specified. The default value is true. - */ - useQueryCache?: boolean; - /** - * Describes user-defined function resources used in the query. - */ - userDefinedFunctionResources?: Array; - /** - * [Optional] Specifies the action that occurs if the destination table already exists. The following values are supported: WRITE_TRUNCATE: If the table already exists, BigQuery overwrites the table data and uses the schema from the query result. WRITE_APPEND: If the table already exists, BigQuery appends the data to the table. WRITE_EMPTY: If the table already exists and contains data, a 'duplicate' error is returned in the job result. The default value is WRITE_EMPTY. Each action is atomic and only occurs if BigQuery is able to complete the job successfully. Creation, truncation and append actions occur as one atomic update upon job completion. - */ - writeDisposition?: string; - }; - - type IJobConfigurationTableCopy = { - /** - * [Optional] Specifies whether the job is allowed to create new tables. The following values are supported: CREATE_IF_NEEDED: If the table does not exist, BigQuery creates the table. CREATE_NEVER: The table must already exist. If it does not, a 'notFound' error is returned in the job result. The default value is CREATE_IF_NEEDED. Creation, truncation and append actions occur as one atomic update upon job completion. - */ - createDisposition?: string; - /** - * Custom encryption configuration (e.g., Cloud KMS keys). - */ - destinationEncryptionConfiguration?: IEncryptionConfiguration; - /** - * [Optional] The time when the destination table expires. Expired tables will be deleted and their storage reclaimed. - */ - destinationExpirationTime?: any; - /** - * [Required] The destination table - */ - destinationTable?: ITableReference; - /** - * [Optional] Supported operation types in table copy job. - */ - operationType?: string; - /** - * [Pick one] Source table to copy. - */ - sourceTable?: ITableReference; - /** - * [Pick one] Source tables to copy. - */ - sourceTables?: Array; - /** - * [Optional] Specifies the action that occurs if the destination table already exists. The following values are supported: WRITE_TRUNCATE: If the table already exists, BigQuery overwrites the table data. WRITE_APPEND: If the table already exists, BigQuery appends the data to the table. WRITE_EMPTY: If the table already exists and contains data, a 'duplicate' error is returned in the job result. The default value is WRITE_EMPTY. Each action is atomic and only occurs if BigQuery is able to complete the job successfully. Creation, truncation and append actions occur as one atomic update upon job completion. - */ - writeDisposition?: string; - }; - - type IJobList = { - /** - * A hash of this page of results. - */ - etag?: string; - /** - * List of jobs that were requested. - */ - jobs?: Array<{ - /** - * [Full-projection-only] Specifies the job configuration. - */ - configuration?: IJobConfiguration; - /** - * A result object that will be present only if the job has failed. - */ - errorResult?: IErrorProto; - /** - * Unique opaque ID of the job. - */ - id?: string; - /** - * Job reference uniquely identifying the job. - */ - jobReference?: IJobReference; - /** - * The resource type. - */ - kind?: string; - /** - * Running state of the job. When the state is DONE, errorResult can be checked to determine whether the job succeeded or failed. - */ - state?: string; - /** - * [Output-only] Information about the job, including starting time and ending time of the job. - */ - statistics?: IJobStatistics; - /** - * [Full-projection-only] Describes the state of the job. - */ - status?: IJobStatus; - /** - * [Full-projection-only] Email address of the user who ran the job. - */ - user_email?: string; - }>; - /** - * The resource type of the response. - */ - kind?: string; - /** - * A token to request the next page of results. - */ - nextPageToken?: string; - }; - - type IJobReference = { - /** - * [Required] The ID of the job. The ID must contain only letters (a-z, A-Z), numbers (0-9), underscores (_), or dashes (-). The maximum length is 1,024 characters. - */ - jobId?: string; - /** - * The geographic location of the job. See details at https://cloud.google.com/bigquery/docs/locations#specifying_your_location. - */ - location?: string; - /** - * [Required] The ID of the project containing this job. - */ - projectId?: string; - }; - - type IJobStatistics = { - /** - * [TrustedTester] [Output-only] Job progress (0.0 -> 1.0) for LOAD and EXTRACT jobs. - */ - completionRatio?: number; - /** - * [Output-only] Creation time of this job, in milliseconds since the epoch. This field will be present on all jobs. - */ - creationTime?: string; - /** - * [Output-only] End time of this job, in milliseconds since the epoch. This field will be present whenever a job is in the DONE state. - */ - endTime?: string; - /** - * [Output-only] Statistics for an extract job. - */ - extract?: IJobStatistics4; - /** - * [Output-only] Statistics for a load job. - */ - load?: IJobStatistics3; - /** - * [Output-only] Number of child jobs executed. - */ - numChildJobs?: string; - /** - * [Output-only] If this is a child job, the id of the parent. - */ - parentJobId?: string; - /** - * [Output-only] Statistics for a query job. - */ - query?: IJobStatistics2; - /** - * [Output-only] Quotas which delayed this job's start time. - */ - quotaDeferments?: Array; - /** - * [Output-only] Job resource usage breakdown by reservation. - */ - reservationUsage?: Array<{ - /** - * [Output-only] Reservation name or "unreserved" for on-demand resources usage. - */ - name?: string; - /** - * [Output-only] Slot-milliseconds the job spent in the given reservation. - */ - slotMs?: string; - }>; - /** - * [Output-only] Name of the primary reservation assigned to this job. Note that this could be different than reservations reported in the reservation usage field if parent reservations were used to execute this job. - */ - reservation_id?: string; - /** - * [Output-only] [Preview] Statistics for row-level security. Present only for query and extract jobs. - */ - rowLevelSecurityStatistics?: IRowLevelSecurityStatistics; - /** - * [Output-only] Statistics for a child job of a script. - */ - scriptStatistics?: IScriptStatistics; - /** - * [Output-only] Start time of this job, in milliseconds since the epoch. This field will be present when the job transitions from the PENDING state to either RUNNING or DONE. - */ - startTime?: string; - /** - * [Output-only] [Deprecated] Use the bytes processed in the query statistics instead. - */ - totalBytesProcessed?: string; - /** - * [Output-only] Slot-milliseconds for the job. - */ - totalSlotMs?: string; - /** - * [Output-only] [Alpha] Information of the multi-statement transaction if this job is part of one. - */ - transactionInfoTemplate?: ITransactionInfo; - }; - - type IJobStatistics2 = { - /** - * [Output-only] Billing tier for the job. - */ - billingTier?: number; - /** - * [Output-only] Whether the query result was fetched from the query cache. - */ - cacheHit?: boolean; - /** - * [Output-only] [Preview] The number of row access policies affected by a DDL statement. Present only for DROP ALL ROW ACCESS POLICIES queries. - */ - ddlAffectedRowAccessPolicyCount?: string; - /** - * The DDL operation performed, possibly dependent on the pre-existence of the DDL target. Possible values (new values might be added in the future): "CREATE": The query created the DDL target. "SKIP": No-op. Example cases: the query is CREATE TABLE IF NOT EXISTS while the table already exists, or the query is DROP TABLE IF EXISTS while the table does not exist. "REPLACE": The query replaced the DDL target. Example case: the query is CREATE OR REPLACE TABLE, and the table already exists. "DROP": The query deleted the DDL target. - */ - ddlOperationPerformed?: string; - /** - * The DDL target routine. Present only for CREATE/DROP FUNCTION/PROCEDURE queries. - */ - ddlTargetRoutine?: IRoutineReference; - /** - * [Output-only] [Preview] The DDL target row access policy. Present only for CREATE/DROP ROW ACCESS POLICY queries. - */ - ddlTargetRowAccessPolicy?: IRowAccessPolicyReference; - /** - * [Output-only] The DDL target table. Present only for CREATE/DROP TABLE/VIEW and DROP ALL ROW ACCESS POLICIES queries. - */ - ddlTargetTable?: ITableReference; - /** - * [Output-only] The original estimate of bytes processed for the job. - */ - estimatedBytesProcessed?: string; - /** - * [Output-only, Beta] Information about create model query job progress. - */ - modelTraining?: IBigQueryModelTraining; - /** - * [Output-only, Beta] Deprecated; do not use. - */ - modelTrainingCurrentIteration?: number; - /** - * [Output-only, Beta] Deprecated; do not use. - */ - modelTrainingExpectedTotalIteration?: string; - /** - * [Output-only] The number of rows affected by a DML statement. Present only for DML statements INSERT, UPDATE or DELETE. - */ - numDmlAffectedRows?: string; - /** - * [Output-only] Describes execution plan for the query. - */ - queryPlan?: Array; - /** - * [Output-only] Referenced routines (persistent user-defined functions and stored procedures) for the job. - */ - referencedRoutines?: Array; - /** - * [Output-only] Referenced tables for the job. Queries that reference more than 50 tables will not have a complete list. - */ - referencedTables?: Array; - /** - * [Output-only] Job resource usage breakdown by reservation. - */ - reservationUsage?: Array<{ - /** - * [Output-only] Reservation name or "unreserved" for on-demand resources usage. - */ - name?: string; - /** - * [Output-only] Slot-milliseconds the job spent in the given reservation. - */ - slotMs?: string; - }>; - /** - * [Output-only] The schema of the results. Present only for successful dry run of non-legacy SQL queries. - */ - schema?: ITableSchema; - /** - * The type of query statement, if valid. Possible values (new values might be added in the future): "SELECT": SELECT query. "INSERT": INSERT query; see https://cloud.google.com/bigquery/docs/reference/standard-sql/data-manipulation-language. "UPDATE": UPDATE query; see https://cloud.google.com/bigquery/docs/reference/standard-sql/data-manipulation-language. "DELETE": DELETE query; see https://cloud.google.com/bigquery/docs/reference/standard-sql/data-manipulation-language. "MERGE": MERGE query; see https://cloud.google.com/bigquery/docs/reference/standard-sql/data-manipulation-language. "ALTER_TABLE": ALTER TABLE query. "ALTER_VIEW": ALTER VIEW query. "ASSERT": ASSERT condition AS 'description'. "CREATE_FUNCTION": CREATE FUNCTION query. "CREATE_MODEL": CREATE [OR REPLACE] MODEL ... AS SELECT ... . "CREATE_PROCEDURE": CREATE PROCEDURE query. "CREATE_TABLE": CREATE [OR REPLACE] TABLE without AS SELECT. "CREATE_TABLE_AS_SELECT": CREATE [OR REPLACE] TABLE ... AS SELECT ... . "CREATE_VIEW": CREATE [OR REPLACE] VIEW ... AS SELECT ... . "DROP_FUNCTION" : DROP FUNCTION query. "DROP_PROCEDURE": DROP PROCEDURE query. "DROP_TABLE": DROP TABLE query. "DROP_VIEW": DROP VIEW query. - */ - statementType?: string; - /** - * [Output-only] [Beta] Describes a timeline of job execution. - */ - timeline?: Array; - /** - * [Output-only] Total bytes billed for the job. - */ - totalBytesBilled?: string; - /** - * [Output-only] Total bytes processed for the job. - */ - totalBytesProcessed?: string; - /** - * [Output-only] For dry-run jobs, totalBytesProcessed is an estimate and this field specifies the accuracy of the estimate. Possible values can be: UNKNOWN: accuracy of the estimate is unknown. PRECISE: estimate is precise. LOWER_BOUND: estimate is lower bound of what the query would cost. UPPER_BOUND: estimate is upper bound of what the query would cost. - */ - totalBytesProcessedAccuracy?: string; - /** - * [Output-only] Total number of partitions processed from all partitioned tables referenced in the job. - */ - totalPartitionsProcessed?: string; - /** - * [Output-only] Slot-milliseconds for the job. - */ - totalSlotMs?: string; - /** - * Standard SQL only: list of undeclared query parameters detected during a dry run validation. - */ - undeclaredQueryParameters?: Array; - }; - - type IJobStatistics3 = { - /** - * [Output-only] The number of bad records encountered. Note that if the job has failed because of more bad records encountered than the maximum allowed in the load job configuration, then this number can be less than the total number of bad records present in the input data. - */ - badRecords?: string; - /** - * [Output-only] Number of bytes of source data in a load job. - */ - inputFileBytes?: string; - /** - * [Output-only] Number of source files in a load job. - */ - inputFiles?: string; - /** - * [Output-only] Size of the loaded data in bytes. Note that while a load job is in the running state, this value may change. - */ - outputBytes?: string; - /** - * [Output-only] Number of rows imported in a load job. Note that while an import job is in the running state, this value may change. - */ - outputRows?: string; - }; - - type IJobStatistics4 = { - /** - * [Output-only] Number of files per destination URI or URI pattern specified in the extract configuration. These values will be in the same order as the URIs specified in the 'destinationUris' field. - */ - destinationUriFileCounts?: Array; - /** - * [Output-only] Number of user bytes extracted into the result. This is the byte count as computed by BigQuery for billing purposes. - */ - inputBytes?: string; - }; - - type IJobStatus = { - /** - * [Output-only] Final error result of the job. If present, indicates that the job has completed and was unsuccessful. - */ - errorResult?: IErrorProto; - /** - * [Output-only] The first errors encountered during the running of the job. The final message includes the number of errors that caused the process to stop. Errors here do not necessarily mean that the job has completed or was unsuccessful. - */ - errors?: Array; - /** - * [Output-only] Running state of the job. - */ - state?: string; - }; - - /** - * Represents a single JSON object. - */ - type IJsonObject = {[key: string]: IJsonValue}; - - type IJsonValue = any; - - type IListModelsResponse = { - /** - * Models in the requested dataset. Only the following fields are populated: model_reference, model_type, creation_time, last_modified_time and labels. - */ - models?: Array; - /** - * A token to request the next page of results. - */ - nextPageToken?: string; - }; - - type IListRoutinesResponse = { - /** - * A token to request the next page of results. - */ - nextPageToken?: string; - /** - * Routines in the requested dataset. Unless read_mask is set in the request, only the following fields are populated: etag, project_id, dataset_id, routine_id, routine_type, creation_time, last_modified_time, and language. - */ - routines?: Array; - }; - - /** - * Response message for the ListRowAccessPolicies method. - */ - type IListRowAccessPoliciesResponse = { - /** - * A token to request the next page of results. - */ - nextPageToken?: string; - /** - * Row access policies on the requested table. - */ - rowAccessPolicies?: Array; - }; - - /** - * BigQuery-specific metadata about a location. This will be set on google.cloud.location.Location.metadata in Cloud Location API responses. - */ - type ILocationMetadata = { - /** - * The legacy BigQuery location ID, e.g. “EU” for the “europe” location. This is for any API consumers that need the legacy “US” and “EU” locations. - */ - legacyLocationId?: string; - }; - - type IMaterializedViewDefinition = { - /** - * [Optional] [TrustedTester] Enable automatic refresh of the materialized view when the base table is updated. The default value is "true". - */ - enableRefresh?: boolean; - /** - * [Output-only] [TrustedTester] The time when this materialized view was last modified, in milliseconds since the epoch. - */ - lastRefreshTime?: string; - /** - * [Required] A query whose result is persisted. - */ - query?: string; - /** - * [Optional] [TrustedTester] The maximum frequency at which this materialized view will be refreshed. The default value is "1800000" (30 minutes). - */ - refreshIntervalMs?: string; - }; - - type IModel = { - /** - * Output only. The time when this model was created, in millisecs since the epoch. - */ - creationTime?: string; - /** - * Optional. A user-friendly description of this model. - */ - description?: string; - /** - * Custom encryption configuration (e.g., Cloud KMS keys). This shows the encryption configuration of the model data while stored in BigQuery storage. This field can be used with PatchModel to update encryption key for an already encrypted model. - */ - encryptionConfiguration?: IEncryptionConfiguration; - /** - * Output only. A hash of this resource. - */ - etag?: string; - /** - * Optional. The time when this model expires, in milliseconds since the epoch. If not present, the model will persist indefinitely. Expired models will be deleted and their storage reclaimed. The defaultTableExpirationMs property of the encapsulating dataset can be used to set a default expirationTime on newly created models. - */ - expirationTime?: string; - /** - * Output only. Input feature columns that were used to train this model. - */ - featureColumns?: Array; - /** - * Optional. A descriptive name for this model. - */ - friendlyName?: string; - /** - * Output only. Label columns that were used to train this model. The output of the model will have a "predicted_" prefix to these columns. - */ - labelColumns?: Array; - /** - * The labels associated with this model. You can use these to organize and group your models. Label keys and values can be no longer than 63 characters, can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. Label values are optional. Label keys must start with a letter and each label in the list must have a different key. - */ - labels?: {[key: string]: string}; - /** - * Output only. The time when this model was last modified, in millisecs since the epoch. - */ - lastModifiedTime?: string; - /** - * Output only. The geographic location where the model resides. This value is inherited from the dataset. - */ - location?: string; - /** - * Required. Unique identifier for this model. - */ - modelReference?: IModelReference; - /** - * Output only. Type of the model resource. - */ - modelType?: - | 'MODEL_TYPE_UNSPECIFIED' - | 'LINEAR_REGRESSION' - | 'LOGISTIC_REGRESSION' - | 'KMEANS' - | 'MATRIX_FACTORIZATION' - | 'DNN_CLASSIFIER' - | 'TENSORFLOW' - | 'DNN_REGRESSOR' - | 'BOOSTED_TREE_REGRESSOR' - | 'BOOSTED_TREE_CLASSIFIER' - | 'ARIMA' - | 'AUTOML_REGRESSOR' - | 'AUTOML_CLASSIFIER'; - /** - * Output only. Information for all training runs in increasing order of start_time. - */ - trainingRuns?: Array; - }; - - type IModelDefinition = { - /** - * [Output-only, Beta] Model options used for the first training run. These options are immutable for subsequent training runs. Default values are used for any options not specified in the input query. - */ - modelOptions?: { - labels?: Array; - lossType?: string; - modelType?: string; - }; - /** - * [Output-only, Beta] Information about ml training runs, each training run comprises of multiple iterations and there may be multiple training runs for the model if warm start is used or if a user decides to continue a previously cancelled query. - */ - trainingRuns?: Array; - }; - - type IModelReference = { - /** - * [Required] The ID of the dataset containing this model. - */ - datasetId?: string; - /** - * [Required] The ID of the model. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters. - */ - modelId?: string; - /** - * [Required] The ID of the project containing this model. - */ - projectId?: string; - }; - - /** - * Evaluation metrics for multi-class classification/classifier models. - */ - type IMultiClassClassificationMetrics = { - /** - * Aggregate classification metrics. - */ - aggregateClassificationMetrics?: IAggregateClassificationMetrics; - /** - * Confusion matrix at different thresholds. - */ - confusionMatrixList?: Array; - }; - - /** - * An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members` to a single `role`. Members can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** { "bindings": [ { "role": "roles/resourcemanager.organizationAdmin", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-project-id@appspot.gserviceaccount.com" ] }, { "role": "roles/resourcemanager.organizationViewer", "members": [ "user:eve@example.com" ], "condition": { "title": "expirable access", "description": "Does not grant access after Sep 2020", "expression": "request.time < timestamp('2020-10-01T00:00:00.000Z')", } } ], "etag": "BwWWja0YfJA=", "version": 3 } **YAML example:** bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time < timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/). - */ - type IPolicy = { - /** - * Specifies cloud audit logging configuration for this policy. - */ - auditConfigs?: Array; - /** - * Associates a list of `members` to a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one member. - */ - bindings?: Array; - /** - * `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. - */ - etag?: string; - /** - * Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). - */ - version?: number; - }; - - type IProjectList = { - /** - * A hash of the page of results - */ - etag?: string; - /** - * The type of list. - */ - kind?: string; - /** - * A token to request the next page of results. - */ - nextPageToken?: string; - /** - * Projects to which you have at least READ access. - */ - projects?: Array<{ - /** - * A descriptive name for this project. - */ - friendlyName?: string; - /** - * An opaque ID of this project. - */ - id?: string; - /** - * The resource type. - */ - kind?: string; - /** - * The numeric ID of this project. - */ - numericId?: string; - /** - * A unique reference to this project. - */ - projectReference?: IProjectReference; - }>; - /** - * The total number of projects in the list. - */ - totalItems?: number; - }; - - type IProjectReference = { - /** - * [Required] ID of the project. Can be either the numeric ID or the assigned ID of the project. - */ - projectId?: string; - }; - - type IQueryParameter = { - /** - * [Optional] If unset, this is a positional parameter. Otherwise, should be unique within a query. - */ - name?: string; - /** - * [Required] The type of this parameter. - */ - parameterType?: IQueryParameterType; - /** - * [Required] The value of this parameter. - */ - parameterValue?: IQueryParameterValue; - }; - - type IQueryParameterType = { - /** - * [Optional] The type of the array's elements, if this is an array. - */ - arrayType?: IQueryParameterType; - /** - * [Optional] The types of the fields of this struct, in order, if this is a struct. - */ - structTypes?: Array<{ - /** - * [Optional] Human-oriented description of the field. - */ - description?: string; - /** - * [Optional] The name of this field. - */ - name?: string; - /** - * [Required] The type of this field. - */ - type?: IQueryParameterType; - }>; - /** - * [Required] The top level type of this field. - */ - type?: string; - }; - - type IQueryParameterValue = { - /** - * [Optional] The array values, if this is an array type. - */ - arrayValues?: Array; - /** - * [Optional] The struct field values, in order of the struct type's declaration. - */ - structValues?: {[key: string]: IQueryParameterValue}; - /** - * [Optional] The value of this value, if a simple scalar type. - */ - value?: string; - }; - - type IQueryRequest = { - /** - * Connection properties. - */ - connectionProperties?: Array; - /** - * [Optional] Specifies the default datasetId and projectId to assume for any unqualified table names in the query. If not set, all table names in the query string must be qualified in the format 'datasetId.tableId'. - */ - defaultDataset?: IDatasetReference; - /** - * [Optional] If set to true, BigQuery doesn't run the job. Instead, if the query is valid, BigQuery returns statistics about the job such as how many bytes would be processed. If the query is invalid, an error returns. The default value is false. - */ - dryRun?: boolean; - /** - * The resource type of the request. - */ - kind?: string; - /** - * The labels associated with this job. You can use these to organize and group your jobs. Label keys and values can be no longer than 63 characters, can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. Label values are optional. Label keys must start with a letter and each label in the list must have a different key. - */ - labels?: {[key: string]: string}; - /** - * The geographic location where the job should run. See details at https://cloud.google.com/bigquery/docs/locations#specifying_your_location. - */ - location?: string; - /** - * [Optional] The maximum number of rows of data to return per page of results. Setting this flag to a small value such as 1000 and then paging through results might improve reliability when the query result set is large. In addition to this limit, responses are also limited to 10 MB. By default, there is no maximum row count, and only the byte limit applies. - */ - maxResults?: number; - /** - * [Optional] Limits the bytes billed for this job. Queries that will have bytes billed beyond this limit will fail (without incurring a charge). If unspecified, this will be set to your project default. - */ - maximumBytesBilled?: string; - /** - * Standard SQL only. Set to POSITIONAL to use positional (?) query parameters or to NAMED to use named (@myparam) query parameters in this query. - */ - parameterMode?: string; - /** - * [Deprecated] This property is deprecated. - */ - preserveNulls?: boolean; - /** - * [Required] A query string, following the BigQuery query syntax, of the query to execute. Example: "SELECT count(f1) FROM [myProjectId:myDatasetId.myTableId]". - */ - query?: string; - /** - * Query parameters for Standard SQL queries. - */ - queryParameters?: Array; - /** - * A unique user provided identifier to ensure idempotent behavior for queries. Note that this is different from the job_id. It has the following properties: 1. It is case-sensitive, limited to up to 36 ASCII characters. A UUID is recommended. 2. Read only queries can ignore this token since they are nullipotent by definition. 3. For the purposes of idempotency ensured by the request_id, a request is considered duplicate of another only if they have the same request_id and are actually duplicates. When determining whether a request is a duplicate of the previous request, all parameters in the request that may affect the behavior are considered. For example, query, connection_properties, query_parameters, use_legacy_sql are parameters that affect the result and are considered when determining whether a request is a duplicate, but properties like timeout_ms don't affect the result and are thus not considered. Dry run query requests are never considered duplicate of another request. 4. When a duplicate mutating query request is detected, it returns: a. the results of the mutation if it completes successfully within the timeout. b. the running operation if it is still in progress at the end of the timeout. 5. Its lifetime is limited to 15 minutes. In other words, if two requests are sent with the same request_id, but more than 15 minutes apart, idempotency is not guaranteed. - */ - requestId?: string; - /** - * [Optional] How long to wait for the query to complete, in milliseconds, before the request times out and returns. Note that this is only a timeout for the request, not the query. If the query takes longer to run than the timeout value, the call returns without any results and with the 'jobComplete' flag set to false. You can call GetQueryResults() to wait for the query to complete and read the results. The default value is 10000 milliseconds (10 seconds). - */ - timeoutMs?: number; - /** - * Specifies whether to use BigQuery's legacy SQL dialect for this query. The default value is true. If set to false, the query will use BigQuery's standard SQL: https://cloud.google.com/bigquery/sql-reference/ When useLegacySql is set to false, the value of flattenResults is ignored; query will be run as if flattenResults is false. - */ - useLegacySql?: boolean; - /** - * [Optional] Whether to look for the result in the query cache. The query cache is a best-effort cache that will be flushed whenever tables in the query are modified. The default value is true. - */ - useQueryCache?: boolean; - }; - - type IQueryResponse = { - /** - * Whether the query result was fetched from the query cache. - */ - cacheHit?: boolean; - /** - * [Output-only] The first errors or warnings encountered during the running of the job. The final message includes the number of errors that caused the process to stop. Errors here do not necessarily mean that the job has completed or was unsuccessful. - */ - errors?: Array; - /** - * Whether the query has completed or not. If rows or totalRows are present, this will always be true. If this is false, totalRows will not be available. - */ - jobComplete?: boolean; - /** - * Reference to the Job that was created to run the query. This field will be present even if the original request timed out, in which case GetQueryResults can be used to read the results once the query has completed. Since this API only returns the first page of results, subsequent pages can be fetched via the same mechanism (GetQueryResults). - */ - jobReference?: IJobReference; - /** - * The resource type. - */ - kind?: string; - /** - * [Output-only] The number of rows affected by a DML statement. Present only for DML statements INSERT, UPDATE or DELETE. - */ - numDmlAffectedRows?: string; - /** - * A token used for paging results. - */ - pageToken?: string; - /** - * An object with as many results as can be contained within the maximum permitted reply size. To get any additional rows, you can call GetQueryResults and specify the jobReference returned above. - */ - rows?: Array; - /** - * The schema of the results. Present only when the query completes successfully. - */ - schema?: ITableSchema; - /** - * The total number of bytes processed for this query. If this query was a dry run, this is the number of bytes that would be processed if the query were run. - */ - totalBytesProcessed?: string; - /** - * The total number of rows in the complete query result set, which can be more than the number of rows in this single page of results. - */ - totalRows?: string; - }; - - type IQueryTimelineSample = { - /** - * Total number of units currently being processed by workers. This does not correspond directly to slot usage. This is the largest value observed since the last sample. - */ - activeUnits?: string; - /** - * Total parallel units of work completed by this query. - */ - completedUnits?: string; - /** - * Milliseconds elapsed since the start of query execution. - */ - elapsedMs?: string; - /** - * Total parallel units of work remaining for the active stages. - */ - pendingUnits?: string; - /** - * Cumulative slot-ms consumed by the query. - */ - totalSlotMs?: string; - }; - - type IRangePartitioning = { - /** - * [TrustedTester] [Required] The table is partitioned by this field. The field must be a top-level NULLABLE/REQUIRED field. The only supported type is INTEGER/INT64. - */ - field?: string; - /** - * [TrustedTester] [Required] Defines the ranges for range partitioning. - */ - range?: { - /** - * [TrustedTester] [Required] The end of range partitioning, exclusive. - */ - end?: string; - /** - * [TrustedTester] [Required] The width of each interval. - */ - interval?: string; - /** - * [TrustedTester] [Required] The start of range partitioning, inclusive. - */ - start?: string; - }; - }; - - /** - * Evaluation metrics used by weighted-ALS models specified by feedback_type=implicit. - */ - type IRankingMetrics = { - /** - * Determines the goodness of a ranking by computing the percentile rank from the predicted confidence and dividing it by the original rank. - */ - averageRank?: number; - /** - * Calculates a precision per user for all the items by ranking them and then averages all the precisions across all the users. - */ - meanAveragePrecision?: number; - /** - * Similar to the mean squared error computed in regression and explicit recommendation models except instead of computing the rating directly, the output from evaluate is computed against a preference which is 1 or 0 depending on if the rating exists or not. - */ - meanSquaredError?: number; - /** - * A metric to determine the goodness of a ranking calculated from the predicted confidence by comparing it to an ideal rank measured by the original ratings. - */ - normalizedDiscountedCumulativeGain?: number; - }; - - /** - * Evaluation metrics for regression and explicit feedback type matrix factorization models. - */ - type IRegressionMetrics = { - /** - * Mean absolute error. - */ - meanAbsoluteError?: number; - /** - * Mean squared error. - */ - meanSquaredError?: number; - /** - * Mean squared log error. - */ - meanSquaredLogError?: number; - /** - * Median absolute error. - */ - medianAbsoluteError?: number; - /** - * R^2 score. - */ - rSquared?: number; - }; - - /** - * A user-defined function or a stored procedure. - */ - type IRoutine = { - /** - * Optional. - */ - arguments?: Array; - /** - * Output only. The time when this routine was created, in milliseconds since the epoch. - */ - creationTime?: string; - /** - * Required. The body of the routine. For functions, this is the expression in the AS clause. If language=SQL, it is the substring inside (but excluding) the parentheses. For example, for the function created with the following statement: `CREATE FUNCTION JoinLines(x string, y string) as (concat(x, "\n", y))` The definition_body is `concat(x, "\n", y)` (\n is not replaced with linebreak). If language=JAVASCRIPT, it is the evaluated string in the AS clause. For example, for the function created with the following statement: `CREATE FUNCTION f() RETURNS STRING LANGUAGE js AS 'return "\n";\n'` The definition_body is `return "\n";\n` Note that both \n are replaced with linebreaks. - */ - definitionBody?: string; - /** - * Optional. [Experimental] The description of the routine if defined. - */ - description?: string; - /** - * Optional. [Experimental] The determinism level of the JavaScript UDF if defined. - */ - determinismLevel?: - | 'DETERMINISM_LEVEL_UNSPECIFIED' - | 'DETERMINISTIC' - | 'NOT_DETERMINISTIC'; - /** - * Output only. A hash of this resource. - */ - etag?: string; - /** - * Optional. If language = "JAVASCRIPT", this field stores the path of the imported JAVASCRIPT libraries. - */ - importedLibraries?: Array; - /** - * Optional. Defaults to "SQL". - */ - language?: 'LANGUAGE_UNSPECIFIED' | 'SQL' | 'JAVASCRIPT'; - /** - * Output only. The time when this routine was last modified, in milliseconds since the epoch. - */ - lastModifiedTime?: string; - /** - * Optional if language = "SQL"; required otherwise. If absent, the return type is inferred from definition_body at query time in each query that references this routine. If present, then the evaluated result will be cast to the specified returned type at query time. For example, for the functions created with the following statements: * `CREATE FUNCTION Add(x FLOAT64, y FLOAT64) RETURNS FLOAT64 AS (x + y);` * `CREATE FUNCTION Increment(x FLOAT64) AS (Add(x, 1));` * `CREATE FUNCTION Decrement(x FLOAT64) RETURNS FLOAT64 AS (Add(x, -1));` The return_type is `{type_kind: "FLOAT64"}` for `Add` and `Decrement`, and is absent for `Increment` (inferred as FLOAT64 at query time). Suppose the function `Add` is replaced by `CREATE OR REPLACE FUNCTION Add(x INT64, y INT64) AS (x + y);` Then the inferred return type of `Increment` is automatically changed to INT64 at query time, while the return type of `Decrement` remains FLOAT64. - */ - returnType?: IStandardSqlDataType; - /** - * Required. Reference describing the ID of this routine. - */ - routineReference?: IRoutineReference; - /** - * Required. The type of routine. - */ - routineType?: 'ROUTINE_TYPE_UNSPECIFIED' | 'SCALAR_FUNCTION' | 'PROCEDURE'; - }; - - type IRoutineReference = { - /** - * [Required] The ID of the dataset containing this routine. - */ - datasetId?: string; - /** - * [Required] The ID of the project containing this routine. - */ - projectId?: string; - /** - * [Required] The ID of the routine. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 256 characters. - */ - routineId?: string; - }; - - /** - * A single row in the confusion matrix. - */ - type IRow = { - /** - * The original label of this row. - */ - actualLabel?: string; - /** - * Info describing predicted label distribution. - */ - entries?: Array; - }; - - /** - * Represents access on a subset of rows on the specified table, defined by its filter predicate. Access to the subset of rows is controlled by its IAM policy. - */ - type IRowAccessPolicy = { - /** - * Output only. The time when this row access policy was created, in milliseconds since the epoch. - */ - creationTime?: string; - /** - * Output only. A hash of this resource. - */ - etag?: string; - /** - * Required. A SQL boolean expression that represents the rows defined by this row access policy, similar to the boolean expression in a WHERE clause of a SELECT query on a table. References to other tables, routines, and temporary functions are not supported. Examples: region="EU" date_field = CAST('2019-9-27' as DATE) nullable_field is not NULL numeric_field BETWEEN 1.0 AND 5.0 - */ - filterPredicate?: string; - /** - * Output only. The time when this row access policy was last modified, in milliseconds since the epoch. - */ - lastModifiedTime?: string; - /** - * Required. Reference describing the ID of this row access policy. - */ - rowAccessPolicyReference?: IRowAccessPolicyReference; - }; - - type IRowAccessPolicyReference = { - /** - * [Required] The ID of the dataset containing this row access policy. - */ - datasetId?: string; - /** - * [Required] The ID of the row access policy. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 256 characters. - */ - policyId?: string; - /** - * [Required] The ID of the project containing this row access policy. - */ - projectId?: string; - /** - * [Required] The ID of the table containing this row access policy. - */ - tableId?: string; - }; - - type IRowLevelSecurityStatistics = { - /** - * [Output-only] [Preview] Whether any accessed data was protected by row access policies. - */ - rowLevelSecurityApplied?: boolean; - }; - - type IScriptStackFrame = { - /** - * [Output-only] One-based end column. - */ - endColumn?: number; - /** - * [Output-only] One-based end line. - */ - endLine?: number; - /** - * [Output-only] Name of the active procedure, empty if in a top-level script. - */ - procedureId?: string; - /** - * [Output-only] One-based start column. - */ - startColumn?: number; - /** - * [Output-only] One-based start line. - */ - startLine?: number; - /** - * [Output-only] Text of the current statement/expression. - */ - text?: string; - }; - - type IScriptStatistics = { - /** - * [Output-only] Whether this child job was a statement or expression. - */ - evaluationKind?: string; - /** - * Stack trace showing the line/column/procedure name of each frame on the stack at the point where the current evaluation happened. The leaf frame is first, the primary script is last. Never empty. - */ - stackFrames?: Array; - }; - - /** - * Request message for `SetIamPolicy` method. - */ - type ISetIamPolicyRequest = { - /** - * REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud Platform services (such as Projects) might reject them. - */ - policy?: IPolicy; - /** - * OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only the fields in the mask will be modified. If no mask is provided, the following default mask is used: `paths: "bindings, etag"` - */ - updateMask?: string; - }; - - type ISnapshotDefinition = { - /** - * [Required] Reference describing the ID of the table that is snapshotted. - */ - baseTableReference?: ITableReference; - /** - * [Required] The time at which the base table was snapshot. - */ - snapshotTime?: string; - }; - - /** - * The type of a variable, e.g., a function argument. Examples: INT64: {type_kind="INT64"} ARRAY: {type_kind="ARRAY", array_element_type="STRING"} STRUCT>: {type_kind="STRUCT", struct_type={fields=[ {name="x", type={type_kind="STRING"}}, {name="y", type={type_kind="ARRAY", array_element_type="DATE"}} ]}} - */ - type IStandardSqlDataType = { - /** - * The type of the array's elements, if type_kind = "ARRAY". - */ - arrayElementType?: IStandardSqlDataType; - /** - * The fields of this struct, in order, if type_kind = "STRUCT". - */ - structType?: IStandardSqlStructType; - /** - * Required. The top level type of this field. Can be any standard SQL data type (e.g., "INT64", "DATE", "ARRAY"). - */ - typeKind?: - | 'TYPE_KIND_UNSPECIFIED' - | 'INT64' - | 'BOOL' - | 'FLOAT64' - | 'STRING' - | 'BYTES' - | 'TIMESTAMP' - | 'DATE' - | 'TIME' - | 'DATETIME' - | 'GEOGRAPHY' - | 'NUMERIC' - | 'BIGNUMERIC' - | 'ARRAY' - | 'STRUCT'; - }; - - /** - * A field or a column. - */ - type IStandardSqlField = { - /** - * Optional. The name of this field. Can be absent for struct fields. - */ - name?: string; - /** - * Optional. The type of this parameter. Absent if not explicitly specified (e.g., CREATE FUNCTION statement can omit the return type; in this case the output parameter does not have this "type" field). - */ - type?: IStandardSqlDataType; - }; - - type IStandardSqlStructType = {fields?: Array}; - - type IStreamingbuffer = { - /** - * [Output-only] A lower-bound estimate of the number of bytes currently in the streaming buffer. - */ - estimatedBytes?: string; - /** - * [Output-only] A lower-bound estimate of the number of rows currently in the streaming buffer. - */ - estimatedRows?: string; - /** - * [Output-only] Contains the timestamp of the oldest entry in the streaming buffer, in milliseconds since the epoch, if the streaming buffer is available. - */ - oldestEntryTime?: string; - }; - - type ITable = { - /** - * [Beta] Clustering specification for the table. Must be specified with partitioning, data in the table will be first partitioned and subsequently clustered. - */ - clustering?: IClustering; - /** - * [Output-only] The time when this table was created, in milliseconds since the epoch. - */ - creationTime?: string; - /** - * [Optional] A user-friendly description of this table. - */ - description?: string; - /** - * Custom encryption configuration (e.g., Cloud KMS keys). - */ - encryptionConfiguration?: IEncryptionConfiguration; - /** - * [Output-only] A hash of the table metadata. Used to ensure there were no concurrent modifications to the resource when attempting an update. Not guaranteed to change when the table contents or the fields numRows, numBytes, numLongTermBytes or lastModifiedTime change. - */ - etag?: string; - /** - * [Optional] The time when this table expires, in milliseconds since the epoch. If not present, the table will persist indefinitely. Expired tables will be deleted and their storage reclaimed. The defaultTableExpirationMs property of the encapsulating dataset can be used to set a default expirationTime on newly created tables. - */ - expirationTime?: string; - /** - * [Optional] Describes the data format, location, and other properties of a table stored outside of BigQuery. By defining these properties, the data source can then be queried as if it were a standard BigQuery table. - */ - externalDataConfiguration?: IExternalDataConfiguration; - /** - * [Optional] A descriptive name for this table. - */ - friendlyName?: string; - /** - * [Output-only] An opaque ID uniquely identifying the table. - */ - id?: string; - /** - * [Output-only] The type of the resource. - */ - kind?: string; - /** - * The labels associated with this table. You can use these to organize and group your tables. Label keys and values can be no longer than 63 characters, can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. Label values are optional. Label keys must start with a letter and each label in the list must have a different key. - */ - labels?: {[key: string]: string}; - /** - * [Output-only] The time when this table was last modified, in milliseconds since the epoch. - */ - lastModifiedTime?: string; - /** - * [Output-only] The geographic location where the table resides. This value is inherited from the dataset. - */ - location?: string; - /** - * [Optional] Materialized view definition. - */ - materializedView?: IMaterializedViewDefinition; - /** - * [Output-only, Beta] Present iff this table represents a ML model. Describes the training information for the model, and it is required to run 'PREDICT' queries. - */ - model?: IModelDefinition; - /** - * [Output-only] The size of this table in bytes, excluding any data in the streaming buffer. - */ - numBytes?: string; - /** - * [Output-only] The number of bytes in the table that are considered "long-term storage". - */ - numLongTermBytes?: string; - /** - * [Output-only] [TrustedTester] The physical size of this table in bytes, excluding any data in the streaming buffer. This includes compression and storage used for time travel. - */ - numPhysicalBytes?: string; - /** - * [Output-only] The number of rows of data in this table, excluding any data in the streaming buffer. - */ - numRows?: string; - /** - * [TrustedTester] Range partitioning specification for this table. Only one of timePartitioning and rangePartitioning should be specified. - */ - rangePartitioning?: IRangePartitioning; - /** - * [Optional] If set to true, queries over this table require a partition filter that can be used for partition elimination to be specified. - */ - requirePartitionFilter?: boolean; - /** - * [Optional] Describes the schema of this table. - */ - schema?: ITableSchema; - /** - * [Output-only] A URL that can be used to access this resource again. - */ - selfLink?: string; - /** - * [Output-only] Snapshot definition. - */ - snapshotDefinition?: ISnapshotDefinition; - /** - * [Output-only] Contains information regarding this table's streaming buffer, if one is present. This field will be absent if the table is not being streamed to or if there is no data in the streaming buffer. - */ - streamingBuffer?: IStreamingbuffer; - /** - * [Required] Reference describing the ID of this table. - */ - tableReference?: ITableReference; - /** - * Time-based partitioning specification for this table. Only one of timePartitioning and rangePartitioning should be specified. - */ - timePartitioning?: ITimePartitioning; - /** - * [Output-only] Describes the table type. The following values are supported: TABLE: A normal BigQuery table. VIEW: A virtual table defined by a SQL query. SNAPSHOT: An immutable, read-only table that is a copy of another table. [TrustedTester] MATERIALIZED_VIEW: SQL query whose result is persisted. EXTERNAL: A table that references data stored in an external storage system, such as Google Cloud Storage. The default value is TABLE. - */ - type?: string; - /** - * [Optional] The view definition. - */ - view?: IViewDefinition; - }; - - type ITableCell = {v?: any}; - - type ITableDataInsertAllRequest = { - /** - * [Optional] Accept rows that contain values that do not match the schema. The unknown values are ignored. Default is false, which treats unknown values as errors. - */ - ignoreUnknownValues?: boolean; - /** - * The resource type of the response. - */ - kind?: string; - /** - * The rows to insert. - */ - rows?: Array<{ - /** - * [Optional] A unique ID for each row. BigQuery uses this property to detect duplicate insertion requests on a best-effort basis. - */ - insertId?: string; - /** - * [Required] A JSON object that contains a row of data. The object's properties and values must match the destination table's schema. - */ - json?: IJsonObject; - }>; - /** - * [Optional] Insert all valid rows of a request, even if invalid rows exist. The default value is false, which causes the entire request to fail if any invalid rows exist. - */ - skipInvalidRows?: boolean; - /** - * If specified, treats the destination table as a base template, and inserts the rows into an instance table named "{destination}{templateSuffix}". BigQuery will manage creation of the instance table, using the schema of the base template table. See https://cloud.google.com/bigquery/streaming-data-into-bigquery#template-tables for considerations when working with templates tables. - */ - templateSuffix?: string; - }; - - type ITableDataInsertAllResponse = { - /** - * An array of errors for rows that were not inserted. - */ - insertErrors?: Array<{ - /** - * Error information for the row indicated by the index property. - */ - errors?: Array; - /** - * The index of the row that error applies to. - */ - index?: number; - }>; - /** - * The resource type of the response. - */ - kind?: string; - }; - - type ITableDataList = { - /** - * A hash of this page of results. - */ - etag?: string; - /** - * The resource type of the response. - */ - kind?: string; - /** - * A token used for paging results. Providing this token instead of the startIndex parameter can help you retrieve stable results when an underlying table is changing. - */ - pageToken?: string; - /** - * Rows of results. - */ - rows?: Array; - /** - * The total number of rows in the complete table. - */ - totalRows?: string; - }; - - type ITableFieldSchema = { - /** - * [Optional] The categories attached to this field, used for field-level access control. - */ - categories?: { - /** - * A list of category resource names. For example, "projects/1/taxonomies/2/categories/3". At most 5 categories are allowed. - */ - names?: Array; - }; - /** - * [Optional] The field description. The maximum length is 1,024 characters. - */ - description?: string; - /** - * [Optional] Describes the nested schema fields if the type property is set to RECORD. - */ - fields?: Array; - /** - * [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE. - */ - mode?: string; - /** - * [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters. - */ - name?: string; - policyTags?: { - /** - * A list of category resource names. For example, "projects/1/location/eu/taxonomies/2/policyTags/3". At most 1 policy tag is allowed. - */ - names?: Array; - }; - /** - * [Required] The field data type. Possible values include STRING, BYTES, INTEGER, INT64 (same as INTEGER), FLOAT, FLOAT64 (same as FLOAT), BOOLEAN, BOOL (same as BOOLEAN), TIMESTAMP, DATE, TIME, DATETIME, RECORD (where RECORD indicates that the field contains a nested schema) or STRUCT (same as RECORD). - */ - type?: string; - }; - - type ITableList = { - /** - * A hash of this page of results. - */ - etag?: string; - /** - * The type of list. - */ - kind?: string; - /** - * A token to request the next page of results. - */ - nextPageToken?: string; - /** - * Tables in the requested dataset. - */ - tables?: Array<{ - /** - * [Beta] Clustering specification for this table, if configured. - */ - clustering?: IClustering; - /** - * The time when this table was created, in milliseconds since the epoch. - */ - creationTime?: string; - /** - * [Optional] The time when this table expires, in milliseconds since the epoch. If not present, the table will persist indefinitely. Expired tables will be deleted and their storage reclaimed. - */ - expirationTime?: string; - /** - * The user-friendly name for this table. - */ - friendlyName?: string; - /** - * An opaque ID of the table - */ - id?: string; - /** - * The resource type. - */ - kind?: string; - /** - * The labels associated with this table. You can use these to organize and group your tables. - */ - labels?: {[key: string]: string}; - /** - * The range partitioning specification for this table, if configured. - */ - rangePartitioning?: IRangePartitioning; - /** - * A reference uniquely identifying the table. - */ - tableReference?: ITableReference; - /** - * The time-based partitioning specification for this table, if configured. - */ - timePartitioning?: ITimePartitioning; - /** - * The type of table. Possible values are: TABLE, VIEW. - */ - type?: string; - /** - * Additional details for a view. - */ - view?: { - /** - * True if view is defined in legacy SQL dialect, false if in standard SQL. - */ - useLegacySql?: boolean; - }; - }>; - /** - * The total number of tables in the dataset. - */ - totalItems?: number; - }; - - type ITableReference = { - /** - * [Required] The ID of the dataset containing this table. - */ - datasetId?: string; - /** - * [Required] The ID of the project containing this table. - */ - projectId?: string; - /** - * [Required] The ID of the table. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters. - */ - tableId?: string; - }; - - type ITableRow = { - /** - * Represents a single row in the result set, consisting of one or more fields. - */ - f?: Array; - }; - - type ITableSchema = { - /** - * Describes the fields in a table. - */ - fields?: Array; - }; - - /** - * Request message for `TestIamPermissions` method. - */ - type ITestIamPermissionsRequest = { - /** - * The set of permissions to check for the `resource`. Permissions with wildcards (such as '*' or 'storage.*') are not allowed. For more information see [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions). - */ - permissions?: Array; - }; - - /** - * Response message for `TestIamPermissions` method. - */ - type ITestIamPermissionsResponse = { - /** - * A subset of `TestPermissionsRequest.permissions` that the caller is allowed. - */ - permissions?: Array; - }; - - type ITimePartitioning = { - /** - * [Optional] Number of milliseconds for which to keep the storage for partitions in the table. The storage in a partition will have an expiration time of its partition time plus this value. - */ - expirationMs?: string; - /** - * [Beta] [Optional] If not set, the table is partitioned by pseudo column, referenced via either '_PARTITIONTIME' as TIMESTAMP type, or '_PARTITIONDATE' as DATE type. If field is specified, the table is instead partitioned by this field. The field must be a top-level TIMESTAMP or DATE field. Its mode must be NULLABLE or REQUIRED. - */ - field?: string; - requirePartitionFilter?: boolean; - /** - * [Required] The supported types are DAY, HOUR, MONTH, and YEAR, which will generate one partition per day, hour, month, and year, respectively. When the type is not specified, the default behavior is DAY. - */ - type?: string; - }; - - type ITrainingOptions = { - /** - * Whether to enable auto ARIMA or not. - */ - autoArima?: boolean; - /** - * The max value of non-seasonal p and q. - */ - autoArimaMaxOrder?: string; - /** - * Batch size for dnn models. - */ - batchSize?: string; - /** - * The data frequency of a time series. - */ - dataFrequency?: - | 'DATA_FREQUENCY_UNSPECIFIED' - | 'AUTO_FREQUENCY' - | 'YEARLY' - | 'QUARTERLY' - | 'MONTHLY' - | 'WEEKLY' - | 'DAILY' - | 'HOURLY'; - /** - * The column to split data with. This column won't be used as a feature. 1. When data_split_method is CUSTOM, the corresponding column should be boolean. The rows with true value tag are eval data, and the false are training data. 2. When data_split_method is SEQ, the first DATA_SPLIT_EVAL_FRACTION rows (from smallest to largest) in the corresponding column are used as training data, and the rest are eval data. It respects the order in Orderable data types: https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#data-type-properties - */ - dataSplitColumn?: string; - /** - * The fraction of evaluation data over the whole input data. The rest of data will be used as training data. The format should be double. Accurate to two decimal places. Default value is 0.2. - */ - dataSplitEvalFraction?: number; - /** - * The data split type for training and evaluation, e.g. RANDOM. - */ - dataSplitMethod?: - | 'DATA_SPLIT_METHOD_UNSPECIFIED' - | 'RANDOM' - | 'CUSTOM' - | 'SEQUENTIAL' - | 'NO_SPLIT' - | 'AUTO_SPLIT'; - /** - * Distance type for clustering models. - */ - distanceType?: 'DISTANCE_TYPE_UNSPECIFIED' | 'EUCLIDEAN' | 'COSINE'; - /** - * Dropout probability for dnn models. - */ - dropout?: number; - /** - * Whether to stop early when the loss doesn't improve significantly any more (compared to min_relative_progress). Used only for iterative training algorithms. - */ - earlyStop?: boolean; - /** - * Feedback type that specifies which algorithm to run for matrix factorization. - */ - feedbackType?: 'FEEDBACK_TYPE_UNSPECIFIED' | 'IMPLICIT' | 'EXPLICIT'; - /** - * Hidden units for dnn models. - */ - hiddenUnits?: Array; - /** - * The geographical region based on which the holidays are considered in time series modeling. If a valid value is specified, then holiday effects modeling is enabled. - */ - holidayRegion?: - | 'HOLIDAY_REGION_UNSPECIFIED' - | 'GLOBAL' - | 'NA' - | 'JAPAC' - | 'EMEA' - | 'LAC' - | 'AE' - | 'AR' - | 'AT' - | 'AU' - | 'BE' - | 'BR' - | 'CA' - | 'CH' - | 'CL' - | 'CN' - | 'CO' - | 'CS' - | 'CZ' - | 'DE' - | 'DK' - | 'DZ' - | 'EC' - | 'EE' - | 'EG' - | 'ES' - | 'FI' - | 'FR' - | 'GB' - | 'GR' - | 'HK' - | 'HU' - | 'ID' - | 'IE' - | 'IL' - | 'IN' - | 'IR' - | 'IT' - | 'JP' - | 'KR' - | 'LV' - | 'MA' - | 'MX' - | 'MY' - | 'NG' - | 'NL' - | 'NO' - | 'NZ' - | 'PE' - | 'PH' - | 'PK' - | 'PL' - | 'PT' - | 'RO' - | 'RS' - | 'RU' - | 'SA' - | 'SE' - | 'SG' - | 'SI' - | 'SK' - | 'TH' - | 'TR' - | 'TW' - | 'UA' - | 'US' - | 'VE' - | 'VN' - | 'ZA'; - /** - * The number of periods ahead that need to be forecasted. - */ - horizon?: string; - /** - * Include drift when fitting an ARIMA model. - */ - includeDrift?: boolean; - /** - * Specifies the initial learning rate for the line search learn rate strategy. - */ - initialLearnRate?: number; - /** - * Name of input label columns in training data. - */ - inputLabelColumns?: Array; - /** - * Item column specified for matrix factorization models. - */ - itemColumn?: string; - /** - * The column used to provide the initial centroids for kmeans algorithm when kmeans_initialization_method is CUSTOM. - */ - kmeansInitializationColumn?: string; - /** - * The method used to initialize the centroids for kmeans algorithm. - */ - kmeansInitializationMethod?: - | 'KMEANS_INITIALIZATION_METHOD_UNSPECIFIED' - | 'RANDOM' - | 'CUSTOM' - | 'KMEANS_PLUS_PLUS'; - /** - * L1 regularization coefficient. - */ - l1Regularization?: number; - /** - * L2 regularization coefficient. - */ - l2Regularization?: number; - /** - * Weights associated with each label class, for rebalancing the training data. Only applicable for classification models. - */ - labelClassWeights?: {[key: string]: number}; - /** - * Learning rate in training. Used only for iterative training algorithms. - */ - learnRate?: number; - /** - * The strategy to determine learn rate for the current iteration. - */ - learnRateStrategy?: - | 'LEARN_RATE_STRATEGY_UNSPECIFIED' - | 'LINE_SEARCH' - | 'CONSTANT'; - /** - * Type of loss function used during training run. - */ - lossType?: 'LOSS_TYPE_UNSPECIFIED' | 'MEAN_SQUARED_LOSS' | 'MEAN_LOG_LOSS'; - /** - * The maximum number of iterations in training. Used only for iterative training algorithms. - */ - maxIterations?: string; - /** - * Maximum depth of a tree for boosted tree models. - */ - maxTreeDepth?: string; - /** - * When early_stop is true, stops training when accuracy improvement is less than 'min_relative_progress'. Used only for iterative training algorithms. - */ - minRelativeProgress?: number; - /** - * Minimum split loss for boosted tree models. - */ - minSplitLoss?: number; - /** - * [Beta] Google Cloud Storage URI from which the model was imported. Only applicable for imported models. - */ - modelUri?: string; - /** - * A specification of the non-seasonal part of the ARIMA model: the three components (p, d, q) are the AR order, the degree of differencing, and the MA order. - */ - nonSeasonalOrder?: IArimaOrder; - /** - * Number of clusters for clustering models. - */ - numClusters?: string; - /** - * Num factors specified for matrix factorization models. - */ - numFactors?: string; - /** - * Optimization strategy for training linear regression models. - */ - optimizationStrategy?: - | 'OPTIMIZATION_STRATEGY_UNSPECIFIED' - | 'BATCH_GRADIENT_DESCENT' - | 'NORMAL_EQUATION'; - /** - * Whether to preserve the input structs in output feature names. Suppose there is a struct A with field b. When false (default), the output feature name is A_b. When true, the output feature name is A.b. - */ - preserveInputStructs?: boolean; - /** - * Subsample fraction of the training data to grow tree to prevent overfitting for boosted tree models. - */ - subsample?: number; - /** - * Column to be designated as time series data for ARIMA model. - */ - timeSeriesDataColumn?: string; - /** - * The id column that will be used to indicate different time series to forecast in parallel. - */ - timeSeriesIdColumn?: string; - /** - * Column to be designated as time series timestamp for ARIMA model. - */ - timeSeriesTimestampColumn?: string; - /** - * User column specified for matrix factorization models. - */ - userColumn?: string; - /** - * Hyperparameter for matrix factoration when implicit feedback type is specified. - */ - walsAlpha?: number; - /** - * Whether to train a model from the last checkpoint. - */ - warmStart?: boolean; - }; - - /** - * Information about a single training query run for the model. - */ - type ITrainingRun = { - /** - * Data split result of the training run. Only set when the input data is actually split. - */ - dataSplitResult?: IDataSplitResult; - /** - * The evaluation metrics over training/eval data that were computed at the end of training. - */ - evaluationMetrics?: IEvaluationMetrics; - /** - * Global explanations for important features of the model. For multi-class models, there is one entry for each label class. For other models, there is only one entry in the list. - */ - globalExplanations?: Array; - /** - * Output of each iteration run, results.size() <= max_iterations. - */ - results?: Array; - /** - * The start time of this training run. - */ - startTime?: string; - /** - * Options that were used for this training run, includes user specified and default options that were used. - */ - trainingOptions?: ITrainingOptions; - }; - - type ITransactionInfo = { - /** - * [Output-only] // [Alpha] Id of the transaction. - */ - transactionId?: string; - }; - - /** - * This is used for defining User Defined Function (UDF) resources only when using legacy SQL. Users of Standard SQL should leverage either DDL (e.g. CREATE [TEMPORARY] FUNCTION ... ) or the Routines API to define UDF resources. For additional information on migrating, see: https://cloud.google.com/bigquery/docs/reference/standard-sql/migrating-from-legacy-sql#differences_in_user-defined_javascript_functions - */ - type IUserDefinedFunctionResource = { - /** - * [Pick one] An inline resource that contains code for a user-defined function (UDF). Providing a inline code resource is equivalent to providing a URI for a file containing the same code. - */ - inlineCode?: string; - /** - * [Pick one] A code resource to load from a Google Cloud Storage URI (gs://bucket/path). - */ - resourceUri?: string; - }; - - type IViewDefinition = { - /** - * [Required] A query that BigQuery executes when the view is referenced. - */ - query?: string; - /** - * Specifies whether to use BigQuery's legacy SQL for this view. The default value is true. If set to false, the view will use BigQuery's standard SQL: https://cloud.google.com/bigquery/sql-reference/ Queries and views that reference this view must use the same flag value. - */ - useLegacySql?: boolean; - /** - * Describes user-defined function resources used in the query. - */ - userDefinedFunctionResources?: Array; - }; - - namespace datasets { - /** - * Deletes the dataset specified by the datasetId value. Before you can delete a dataset, you must delete all its tables, either manually or by specifying deleteContents. Immediately after deletion, you can create another dataset with the same name. - */ - type IDeleteParams = { - /** - * If True, delete all the tables in the dataset. If False and the dataset contains tables, the request will fail. Default is False - */ - deleteContents?: boolean; - }; - - /** - * Lists all datasets in the specified project to which you have been granted the READER dataset role. - */ - type IListParams = { - /** - * Whether to list all datasets, including hidden ones - */ - all?: boolean; - /** - * An expression for filtering the results of the request by label. The syntax is "labels.[:]". Multiple filters can be ANDed together by connecting with a space. Example: "labels.department:receiving labels.active". See Filtering datasets using labels for details. - */ - filter?: string; - /** - * The maximum number of results to return - */ - maxResults?: number; - /** - * Page token, returned by a previous call, to request the next page of results - */ - pageToken?: string; - }; - } - - namespace jobs { - /** - * Requests that a job be cancelled. This call will return immediately, and the client will need to poll for the job status to see if the cancel completed successfully. Cancelled jobs may still incur costs. - */ - type ICancelParams = { - /** - * The geographic location of the job. Required except for US and EU. See details at https://cloud.google.com/bigquery/docs/locations#specifying_your_location. - */ - location?: string; - }; - - /** - * Returns information about a specific job. Job information is available for a six month period after creation. Requires that you're the person who ran the job, or have the Is Owner project role. - */ - type IGetParams = { - /** - * The geographic location of the job. Required except for US and EU. See details at https://cloud.google.com/bigquery/docs/locations#specifying_your_location. - */ - location?: string; - }; - - /** - * Retrieves the results of a query job. - */ - type IGetQueryResultsParams = { - /** - * The geographic location where the job should run. Required except for US and EU. See details at https://cloud.google.com/bigquery/docs/locations#specifying_your_location. - */ - location?: string; - /** - * Maximum number of results to read - */ - maxResults?: number; - /** - * Page token, returned by a previous call, to request the next page of results - */ - pageToken?: string; - /** - * Zero-based index of the starting row - */ - startIndex?: string; - /** - * How long to wait for the query to complete, in milliseconds, before returning. Default is 10 seconds. If the timeout passes before the job completes, the 'jobComplete' field in the response will be false - */ - timeoutMs?: number; - }; - - /** - * Lists all jobs that you started in the specified project. Job information is available for a six month period after creation. The job list is sorted in reverse chronological order, by job creation time. Requires the Can View project role, or the Is Owner project role if you set the allUsers property. - */ - type IListParams = { - /** - * Whether to display jobs owned by all users in the project. Default false - */ - allUsers?: boolean; - /** - * Max value for job creation time, in milliseconds since the POSIX epoch. If set, only jobs created before or at this timestamp are returned - */ - maxCreationTime?: string; - /** - * Maximum number of results to return - */ - maxResults?: number; - /** - * Min value for job creation time, in milliseconds since the POSIX epoch. If set, only jobs created after or at this timestamp are returned - */ - minCreationTime?: string; - /** - * Page token, returned by a previous call, to request the next page of results - */ - pageToken?: string; - /** - * If set, retrieves only jobs whose parent is this job. Otherwise, retrieves only jobs which have no parent - */ - parentJobId?: string; - /** - * Restrict information returned to a set of selected fields - */ - projection?: 'full' | 'minimal'; - /** - * Filter for job state - */ - stateFilter?: 'done' | 'pending' | 'running'; - }; - } - - namespace models { - /** - * Lists all models in the specified dataset. Requires the READER dataset role. - */ - type IListParams = { - /** - * The maximum number of results to return in a single response page. Leverage the page tokens to iterate through the entire collection. - */ - maxResults?: number; - /** - * Page token, returned by a previous call to request the next page of results - */ - pageToken?: string; - }; - } - - namespace projects { - /** - * Lists all projects to which you have been granted any project role. - */ - type IListParams = { - /** - * Maximum number of results to return - */ - maxResults?: number; - /** - * Page token, returned by a previous call, to request the next page of results - */ - pageToken?: string; - }; - } - - namespace routines { - /** - * Gets the specified routine resource by routine ID. - */ - type IGetParams = { - /** - * If set, only the Routine fields in the field mask are returned in the response. If unset, all Routine fields are returned. - */ - readMask?: string; - }; - - /** - * Lists all routines in the specified dataset. Requires the READER dataset role. - */ - type IListParams = { - /** - * If set, then only the Routines matching this filter are returned. The current supported form is either "routine_type:" or "routineType:", where is a RoutineType enum. Example: "routineType:SCALAR_FUNCTION". - */ - filter?: string; - /** - * The maximum number of results to return in a single response page. Leverage the page tokens to iterate through the entire collection. - */ - maxResults?: number; - /** - * Page token, returned by a previous call, to request the next page of results - */ - pageToken?: string; - /** - * If set, then only the Routine fields in the field mask, as well as project_id, dataset_id and routine_id, are returned in the response. If unset, then the following Routine fields are returned: etag, project_id, dataset_id, routine_id, routine_type, creation_time, last_modified_time, and language. - */ - readMask?: string; - }; - } - - namespace rowAccessPolicies { - /** - * Lists all row access policies on the specified table. - */ - type IListParams = { - /** - * The maximum number of results to return in a single response page. Leverage the page tokens to iterate through the entire collection. - */ - pageSize?: number; - /** - * Page token, returned by a previous call, to request the next page of results. - */ - pageToken?: string; - }; - } - - namespace tabledata { - /** - * Retrieves table data from a specified set of rows. Requires the READER dataset role. - */ - type IListParams = { - /** - * Maximum number of results to return - */ - maxResults?: number; - /** - * Page token, returned by a previous call, identifying the result set - */ - pageToken?: string; - /** - * List of fields to return (comma-separated). If unspecified, all fields are returned - */ - selectedFields?: string; - /** - * Zero-based index of the starting row to read - */ - startIndex?: string; - }; - } - - namespace tables { - /** - * Gets the specified table resource by table ID. This method does not return the data in the table, it only returns the table resource, which describes the structure of this table. - */ - type IGetParams = { - /** - * List of fields to return (comma-separated). If unspecified, all fields are returned - */ - selectedFields?: string; - }; - - /** - * Lists all tables in the specified dataset. Requires the READER dataset role. - */ - type IListParams = { - /** - * Maximum number of results to return - */ - maxResults?: number; - /** - * Page token, returned by a previous call, to request the next page of results - */ - pageToken?: string; - }; - } -} - -export default bigquery; diff --git a/reverse_engineering/node_modules/@google-cloud/bigquery/package.json b/reverse_engineering/node_modules/@google-cloud/bigquery/package.json deleted file mode 100644 index 1dad864..0000000 --- a/reverse_engineering/node_modules/@google-cloud/bigquery/package.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "_from": "@google-cloud/bigquery", - "_id": "@google-cloud/bigquery@5.7.1", - "_inBundle": false, - "_integrity": "sha512-YLs1sLKa2N1RzppI04ZCqUJ0WX9hMHggU/b9bYHqYlrtqXVBMmbqUJNOzKMC7GkiltMNsFav1Zyk5cJ7mfQGwQ==", - "_location": "/@google-cloud/bigquery", - "_phantomChildren": {}, - "_requested": { - "type": "tag", - "registry": true, - "raw": "@google-cloud/bigquery", - "name": "@google-cloud/bigquery", - "escapedName": "@google-cloud%2fbigquery", - "scope": "@google-cloud", - "rawSpec": "", - "saveSpec": null, - "fetchSpec": "latest" - }, - "_requiredBy": [ - "#USER", - "/" - ], - "_resolved": "https://registry.npmjs.org/@google-cloud/bigquery/-/bigquery-5.7.1.tgz", - "_shasum": "3d6f3ff34dfc84378def4ed2b813b216ed94a944", - "_spec": "@google-cloud/bigquery", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering", - "author": { - "name": "Google LLC" - }, - "bugs": { - "url": "https://github.com/googleapis/nodejs-bigquery/issues" - }, - "bundleDependencies": false, - "dependencies": { - "@google-cloud/common": "^3.1.0", - "@google-cloud/paginator": "^3.0.0", - "@google-cloud/promisify": "^2.0.0", - "arrify": "^2.0.1", - "big.js": "^6.0.0", - "duplexify": "^4.0.0", - "extend": "^3.0.2", - "is": "^3.3.0", - "p-event": "^4.1.0", - "stream-events": "^1.0.5", - "uuid": "^8.0.0" - }, - "deprecated": false, - "description": "Google BigQuery Client Library for Node.js", - "devDependencies": { - "@google-cloud/storage": "^5.0.0", - "@types/big.js": "^6.0.0", - "@types/execa": "^0.9.0", - "@types/extend": "^3.0.1", - "@types/is": "0.0.21", - "@types/mocha": "^8.0.0", - "@types/mv": "^2.1.0", - "@types/ncp": "^2.0.1", - "@types/node": "^14.0.0", - "@types/proxyquire": "^1.3.28", - "@types/sinon": "^10.0.0", - "@types/tmp": "0.2.1", - "@types/uuid": "^8.0.0", - "c8": "^7.0.0", - "codecov": "^3.5.0", - "discovery-tsd": "^0.2.0", - "execa": "^5.0.0", - "gts": "^2.0.0", - "jsdoc": "^3.6.3", - "jsdoc-fresh": "^1.0.1", - "jsdoc-region-tag": "^1.0.2", - "linkinator": "^2.0.0", - "mocha": "^8.0.0", - "mv": "^2.1.1", - "ncp": "^2.0.0", - "proxyquire": "^2.1.0", - "sinon": "^11.0.0", - "tmp": "0.2.1", - "typescript": "^3.8.3" - }, - "engines": { - "node": ">=10" - }, - "files": [ - "build/src", - "!build/src/**/*.map" - ], - "homepage": "https://github.com/googleapis/nodejs-bigquery#readme", - "keywords": [ - "google apis client", - "google api client", - "google apis", - "google api", - "google", - "google cloud platform", - "google cloud", - "cloud", - "google bigquery", - "bigquery" - ], - "license": "Apache-2.0", - "main": "./build/src/index.js", - "name": "@google-cloud/bigquery", - "repository": { - "type": "git", - "url": "git+https://github.com/googleapis/nodejs-bigquery.git" - }, - "scripts": { - "benchmark": "node build/benchmark/bench.js benchmark/queries.json", - "clean": "gts clean", - "compile": "tsc -p . && cp src/types.d.ts build/src/", - "docs": "jsdoc -c .jsdoc.js", - "docs-test": "linkinator docs", - "fix": "gts fix", - "lint": "gts check", - "prebenchmark": "npm run compile", - "precompile": "gts clean", - "predocs": "npm run compile", - "predocs-test": "npm run docs", - "prelint": "cd samples; npm link ../; npm install", - "prepare": "npm run compile", - "presystem-test": "npm run compile", - "pretest": "npm run compile", - "samples-test": "cd samples/ && npm link ../ && npm test && cd ../", - "system-test": "mocha build/system-test --timeout 600000", - "test": "c8 mocha build/test", - "types": "dtsd bigquery v2 > ./src/types.d.ts" - }, - "types": "./build/src/index.d.ts", - "version": "5.7.1" -} diff --git a/reverse_engineering/node_modules/@google-cloud/common/CHANGELOG.md b/reverse_engineering/node_modules/@google-cloud/common/CHANGELOG.md deleted file mode 100644 index b8be127..0000000 --- a/reverse_engineering/node_modules/@google-cloud/common/CHANGELOG.md +++ /dev/null @@ -1,635 +0,0 @@ -# Changelog - -[npm history][1] - -[1]: https://www.npmjs.com/package/@google-cloud/common?activeTab=versions - -### [3.7.1](https://www.github.com/googleapis/nodejs-common/compare/v3.7.0...v3.7.1) (2021-08-06) - - -### Bug Fixes - -* correctly locate projectId from auth library ([#663](https://www.github.com/googleapis/nodejs-common/issues/663)) ([72e3168](https://www.github.com/googleapis/nodejs-common/commit/72e3168bcac1d177360257197293a566c5fb63d3)) - -## [3.7.0](https://www.github.com/googleapis/nodejs-common/compare/v3.6.0...v3.7.0) (2021-07-09) - - -### Features - -* Customize retry implementation ([#680](https://www.github.com/googleapis/nodejs-common/issues/680)) ([b529998](https://www.github.com/googleapis/nodejs-common/commit/b529998cdd1c8a7f159846f65651e2118bae5d9e)) - -## [3.6.0](https://www.github.com/googleapis/nodejs-common/compare/v3.5.0...v3.6.0) (2021-02-17) - - -### Features - -* **deps:** google-auth-library with workload identity federation ([#649](https://www.github.com/googleapis/nodejs-common/issues/649)) ([31945ac](https://www.github.com/googleapis/nodejs-common/commit/31945accc3fbfed513ab54c63038685a219429f4)), closes [#648](https://www.github.com/googleapis/nodejs-common/issues/648) - -## [3.5.0](https://www.github.com/googleapis/nodejs-common/compare/v3.4.1...v3.5.0) (2020-11-11) - - -### Features - -* add ignoreNotFound to service-object#delete ([#634](https://www.github.com/googleapis/nodejs-common/issues/634)) ([3248e27](https://www.github.com/googleapis/nodejs-common/commit/3248e27c3776d705720f69c2dcf48d51f2cc4e5c)) - -### [3.4.1](https://www.github.com/googleapis/nodejs-common/compare/v3.4.0...v3.4.1) (2020-10-06) - - -### Bug Fixes - -* **deps:** upgrade google-auth-library ([#630](https://www.github.com/googleapis/nodejs-common/issues/630)) ([611d16b](https://www.github.com/googleapis/nodejs-common/commit/611d16ba465b53d5eeb3ad59d37a2501a77c3b87)) - -## [3.4.0](https://www.github.com/googleapis/nodejs-common/compare/v3.3.3...v3.4.0) (2020-09-12) - - -### Features - -* support user-provided auth clients ([#623](https://www.github.com/googleapis/nodejs-common/issues/623)) ([a053e40](https://www.github.com/googleapis/nodejs-common/commit/a053e40a91e647a47dc44ba47cfb86775904556d)) - -### [3.3.3](https://www.github.com/googleapis/nodejs-common/compare/v3.3.2...v3.3.3) (2020-08-28) - - -### Bug Fixes - -* move system and samples test from Node 10 to Node 12 ([#619](https://www.github.com/googleapis/nodejs-common/issues/619)) ([8dee48f](https://www.github.com/googleapis/nodejs-common/commit/8dee48f78b5f8df25ec97bd0dc2be731481bba35)) - -### [3.3.2](https://www.github.com/googleapis/nodejs-common/compare/v3.3.1...v3.3.2) (2020-07-09) - - -### Bug Fixes - -* typeo in nodejs .gitattribute ([#597](https://www.github.com/googleapis/nodejs-common/issues/597)) ([50269c2](https://www.github.com/googleapis/nodejs-common/commit/50269c23b0e22f4affbaa20d1c2c2947d824dc9e)) - -### [3.3.1](https://www.github.com/googleapis/nodejs-common/compare/v3.3.0...v3.3.1) (2020-07-06) - - -### Bug Fixes - -* allow non-JSON body ([#587](https://www.github.com/googleapis/nodejs-common/issues/587)) ([dbaad17](https://www.github.com/googleapis/nodejs-common/commit/dbaad170a2e3a6785568523086f15d88fb34eaca)) - -## [3.3.0](https://www.github.com/googleapis/nodejs-common/compare/v3.2.0...v3.3.0) (2020-06-29) - - -### Features - -* add ServiceObject#getRequestInterceptors() ([#591](https://www.github.com/googleapis/nodejs-common/issues/591)) ([ade7e50](https://www.github.com/googleapis/nodejs-common/commit/ade7e50558e87b514adf48940f6e4413b2160b37)) - -## [3.2.0](https://www.github.com/googleapis/nodejs-common/compare/v3.1.1...v3.2.0) (2020-06-23) - - -### Features - -* expose method to get request interceptors ([#589](https://www.github.com/googleapis/nodejs-common/issues/589)) ([d01507f](https://www.github.com/googleapis/nodejs-common/commit/d01507f3fae41ffdffa2056bfb1aa40d97ffb653)) - - -### Bug Fixes - -* **deps:** update dependency teeny-request to v7 ([#581](https://www.github.com/googleapis/nodejs-common/issues/581)) ([8d12007](https://www.github.com/googleapis/nodejs-common/commit/8d12007c5b43b8b6a679b0a925c05cb665d850b7)) - -### [3.1.1](https://www.github.com/googleapis/nodejs-common/compare/v3.1.0...v3.1.1) (2020-05-29) - - -### Bug Fixes - -* allow users to set interceptors ([#579](https://www.github.com/googleapis/nodejs-common/issues/579)) ([75f0d8a](https://www.github.com/googleapis/nodejs-common/commit/75f0d8ad92702a893b614d60f36aea09fe20bb30)) - -## [3.1.0](https://www.github.com/googleapis/nodejs-common/compare/v3.0.0...v3.1.0) (2020-05-08) - - -### Features - -* **service:** add optional provided user agent ([#566](https://www.github.com/googleapis/nodejs-common/issues/566)) ([a0b814e](https://www.github.com/googleapis/nodejs-common/commit/a0b814ead58c8b255de2da8044c81d1be7b3825d)) - - -### Bug Fixes - -* **deps:** update dependency google-auth-library to v6 ([#556](https://www.github.com/googleapis/nodejs-common/issues/556)) ([03a8a54](https://www.github.com/googleapis/nodejs-common/commit/03a8a542ac329f63776388346d1f74732b0ab984)) -* apache license URL ([#468](https://www.github.com/googleapis/nodejs-common/issues/468)) ([#564](https://www.github.com/googleapis/nodejs-common/issues/564)) ([1adc855](https://www.github.com/googleapis/nodejs-common/commit/1adc855c17091b67e7f8821e0286ce7256023040)) -* retry error code 408 ([#578](https://www.github.com/googleapis/nodejs-common/issues/578)) ([0d3239d](https://www.github.com/googleapis/nodejs-common/commit/0d3239d9eeb03bb9cb49e1107d3d6d4864ffe341)) - -## [3.0.0](https://www.github.com/googleapis/nodejs-common/compare/v2.4.0...v3.0.0) (2020-03-26) - - -### ⚠ BREAKING CHANGES - -* drop support for node.js 8 (#554) -* remove support for custom promises (#541) - -### Features - -* add progress events ([#540](https://www.github.com/googleapis/nodejs-common/issues/540)) ([1834059](https://www.github.com/googleapis/nodejs-common/commit/18340596ecb61018e5427371b9b5a120753ec003)) - - -### Bug Fixes - -* remove support for custom promises ([#541](https://www.github.com/googleapis/nodejs-common/issues/541)) ([ecf1c16](https://www.github.com/googleapis/nodejs-common/commit/ecf1c167927b609f13dc4fbec1954ff3a2765344)) -* **deps:** update dependency @google-cloud/projectify to v2 ([#553](https://www.github.com/googleapis/nodejs-common/issues/553)) ([23030a2](https://www.github.com/googleapis/nodejs-common/commit/23030a25783cd091f4720c25a15416c91e7bd0a0)) -* **deps:** update dependency @google-cloud/promisify to v2 ([#552](https://www.github.com/googleapis/nodejs-common/issues/552)) ([63175e0](https://www.github.com/googleapis/nodejs-common/commit/63175e0c4504020466a95e92c2449bdb8ac47546)) - - -### Miscellaneous Chores - -* drop support for node.js 8 ([#554](https://www.github.com/googleapis/nodejs-common/issues/554)) ([9f41047](https://www.github.com/googleapis/nodejs-common/commit/9f410477432893f68e57b5eeb31a068a3d8ef52f)) - -## [2.4.0](https://www.github.com/googleapis/nodejs-common/compare/v2.3.0...v2.4.0) (2020-02-25) - - -### Features - -* if we see EAI_AGAIN error for reason, retry request ([#534](https://www.github.com/googleapis/nodejs-common/issues/534)) ([0debe28](https://www.github.com/googleapis/nodejs-common/commit/0debe28b77d77bf9382e74dc4c11744fb433db6d)), closes [#473](https://www.github.com/googleapis/nodejs-common/issues/473) - -## [2.3.0](https://www.github.com/googleapis/nodejs-common/compare/v2.2.6...v2.3.0) (2020-01-23) - - -### Features - -* allow poll interval to be configured ([#520](https://www.github.com/googleapis/nodejs-common/issues/520)) ([abfbd18](https://www.github.com/googleapis/nodejs-common/commit/abfbd189b5769c8dccd482e3c7369711c27b9895)) - -### [2.2.6](https://www.github.com/googleapis/nodejs-common/compare/v2.2.5...v2.2.6) (2020-01-17) - - -### Bug Fixes - -* **deps:** update dependency teeny-request to v6 ([#517](https://www.github.com/googleapis/nodejs-common/issues/517)) ([f190f7c](https://www.github.com/googleapis/nodejs-common/commit/f190f7ce054e6e25dedfa6b71eb161b0fef52335)) - -### [2.2.5](https://www.github.com/googleapis/nodejs-common/compare/v2.2.4...v2.2.5) (2019-12-05) - - -### Bug Fixes - -* **deps:** pin TypeScript below 3.7.0 ([e78bd5f](https://www.github.com/googleapis/nodejs-common/commit/e78bd5fafb9e864872e5def4ec71bf5d04acdb19)) - -### [2.2.4](https://www.github.com/googleapis/nodejs-common/compare/v2.2.3...v2.2.4) (2019-11-13) - - -### Bug Fixes - -* **docs:** add jsdoc-region-tag plugin ([#500](https://www.github.com/googleapis/nodejs-common/issues/500)) ([e1111d0](https://www.github.com/googleapis/nodejs-common/commit/e1111d0ef643c49d6c8f460be89f100d8826aca1)) - -### [2.2.3](https://www.github.com/googleapis/nodejs-common/compare/v2.2.2...v2.2.3) (2019-10-18) - - -### Bug Fixes - -* **deps:** force newer auth library with various fixes ([#495](https://www.github.com/googleapis/nodejs-common/issues/495)) ([a9c6e43](https://www.github.com/googleapis/nodejs-common/commit/a9c6e4384ddd386955fde4eb52561fc47840e8f3)) - -### [2.2.2](https://www.github.com/googleapis/nodejs-common/compare/v2.2.1...v2.2.2) (2019-09-18) - - -### Bug Fixes - -* capture message in ApiError.stack ([#466](https://www.github.com/googleapis/nodejs-common/issues/466)) ([811c7cd](https://www.github.com/googleapis/nodejs-common/commit/811c7cd)) - -### [2.2.1](https://www.github.com/googleapis/nodejs-common/compare/v2.2.0...v2.2.1) (2019-09-12) - - -### Bug Fixes - -* do not block API 401 errors when auth was provided ([#482](https://www.github.com/googleapis/nodejs-common/issues/482)) ([1b617e6](https://www.github.com/googleapis/nodejs-common/commit/1b617e6)) - -## [2.2.0](https://www.github.com/googleapis/nodejs-common/compare/v2.1.2...v2.2.0) (2019-09-11) - - -### Bug Fixes - -* **docs:** remove anchor from reference doc link ([#474](https://www.github.com/googleapis/nodejs-common/issues/474)) ([81ebc1f](https://www.github.com/googleapis/nodejs-common/commit/81ebc1f)) - - -### Features - -* return more helpful error when authentication fails ([#480](https://www.github.com/googleapis/nodejs-common/issues/480)) ([98d2b7f](https://www.github.com/googleapis/nodejs-common/commit/98d2b7f)) - -### [2.1.2](https://www.github.com/googleapis/nodejs-common/compare/v2.1.1...v2.1.2) (2019-08-14) - - -### Bug Fixes - -* **types:** correct internal timeout field type ([#470](https://www.github.com/googleapis/nodejs-common/issues/470)) ([e7dd206](https://www.github.com/googleapis/nodejs-common/commit/e7dd206)) -* upgrade to version of teeny-request with looser types for method ([#472](https://www.github.com/googleapis/nodejs-common/issues/472)) ([143774c](https://www.github.com/googleapis/nodejs-common/commit/143774c)) - -### [2.1.1](https://www.github.com/googleapis/nodejs-common/compare/v2.1.0...v2.1.1) (2019-08-13) - - -### Bug Fixes - -* **deps:** teeny-request@5.2.0 with fixes for http ([#467](https://www.github.com/googleapis/nodejs-common/issues/467)) ([e11d46c](https://www.github.com/googleapis/nodejs-common/commit/e11d46c)) - -## [2.1.0](https://www.github.com/googleapis/nodejs-common/compare/v2.0.5...v2.1.0) (2019-08-05) - - -### Bug Fixes - -* **deps:** upgrade to the latest version of teeny-request ([#448](https://www.github.com/googleapis/nodejs-common/issues/448)) ([bb76f07](https://www.github.com/googleapis/nodejs-common/commit/bb76f07)) - - -### Features - -* adds timeout to options and use it in reqOpts ([#455](https://www.github.com/googleapis/nodejs-common/issues/455)) ([90a6097](https://www.github.com/googleapis/nodejs-common/commit/90a6097)) - -### [2.0.5](https://www.github.com/googleapis/nodejs-common/compare/v2.0.4...v2.0.5) (2019-07-29) - - -### Bug Fixes - -* **deps:** update dependency google-auth-library to v5 ([#453](https://www.github.com/googleapis/nodejs-common/issues/453)) ([755635c](https://www.github.com/googleapis/nodejs-common/commit/755635c)) - -### [2.0.4](https://www.github.com/googleapis/nodejs-common/compare/v2.0.3...v2.0.4) (2019-07-11) - - -### Bug Fixes - -* allow methodConfig to override request method and uri ([#451](https://www.github.com/googleapis/nodejs-common/issues/451)) ([8c2f903](https://www.github.com/googleapis/nodejs-common/commit/8c2f903)) - -### [2.0.3](https://www.github.com/googleapis/nodejs-common/compare/v2.0.2...v2.0.3) (2019-06-26) - - -### Bug Fixes - -* **docs:** link to reference docs section on googleapis.dev ([#443](https://www.github.com/googleapis/nodejs-common/issues/443)) ([11ccb28](https://www.github.com/googleapis/nodejs-common/commit/11ccb28)) - -### [2.0.2](https://www.github.com/googleapis/nodejs-common/compare/v2.0.1...v2.0.2) (2019-06-14) - - -### Bug Fixes - -* **docs:** move to new client docs URL ([#438](https://www.github.com/googleapis/nodejs-common/issues/438)) ([1a52715](https://www.github.com/googleapis/nodejs-common/commit/1a52715)) - -### [2.0.1](https://www.github.com/googleapis/nodejs-common/compare/v2.0.0...v2.0.1) (2019-06-11) - - -### Bug Fixes - -* **deps:** teeny-request was retrying some requests in error ([#436](https://www.github.com/googleapis/nodejs-common/issues/436)) ([00a8ba2](https://www.github.com/googleapis/nodejs-common/commit/00a8ba2)) - -## [2.0.0](https://www.github.com/googleapis/nodejs-common/compare/v1.0.0...v2.0.0) (2019-05-23) - - -### ⚠ BREAKING CHANGES - -* This adds the apiEndpoint property as a required field for the ServiceConfig, and makes it a public property on the Service class. This is being added to broadly support apiEndpoint overrides. - -### Features - -* add apiEndpoint property to service config ([#427](https://www.github.com/googleapis/nodejs-common/issues/427)) ([c063df8](https://www.github.com/googleapis/nodejs-common/commit/c063df8)), closes [googleapis/nodejs-bigquery#455](https://www.github.com/googleapis/nodejs-common/issues/455) - -## [1.0.0](https://www.github.com/googleapis/nodejs-common/compare/v0.32.1...v1.0.0) (2019-05-09) - - -### Bug Fixes - -* **deps:** update dependency @google-cloud/projectify to v1 ([#414](https://www.github.com/googleapis/nodejs-common/issues/414)) ([6cdc2fe](https://www.github.com/googleapis/nodejs-common/commit/6cdc2fe)) -* **deps:** update dependency @google-cloud/promisify to v1 ([#415](https://www.github.com/googleapis/nodejs-common/issues/415)) ([00c422a](https://www.github.com/googleapis/nodejs-common/commit/00c422a)) -* **deps:** update dependency google-auth-library to v4 ([#422](https://www.github.com/googleapis/nodejs-common/issues/422)) ([e0a94af](https://www.github.com/googleapis/nodejs-common/commit/e0a94af)) - - -### Build System - -* upgrade engines field to >=8.10.0 ([#412](https://www.github.com/googleapis/nodejs-common/issues/412)) ([4349d68](https://www.github.com/googleapis/nodejs-common/commit/4349d68)) - - -### Miscellaneous Chores - -* **deps:** update dependency gts to v1 ([#407](https://www.github.com/googleapis/nodejs-common/issues/407)) ([8e73d8c](https://www.github.com/googleapis/nodejs-common/commit/8e73d8c)) - - -### BREAKING CHANGES - -* **deps:** this will ship async/await in the generated code -* upgrade engines field to >=8.10.0 (#412) - -## v0.32.1 - -04-08-2019 10:53 PDT - -### Dependencies - -- fix: teeny-request should be dependency -- fix(deps): update dependency arrify to v2 ([#404](https://github.com/googleapis/nodejs-common/pull/404)) -- chore: unpin @types/node ([#402](https://github.com/googleapis/nodejs-common/pull/402)) - -## v0.32.0 - -04-02-2019 15:11 PDT - -**BREAKING CHANGE**: This PR removes the ability to configure a custom implementation of the Request module. This was necessary when we were migrating from request to teeny-request, but that migration is now complete. All interfaces at accepted a custom implementation of request will no longer accept one. teeny-request is now just included in the box. - -## Bug Fixes - -- fix: @types/node@11.13.0 breaks paginate/promisifyAll ([#397](https://github.com/googleapis/nodejs-common/pull/397)) -- fix(ts): do not ship @types/duplexify ([#393](https://github.com/googleapis/nodejs-common/pull/393)) -- fix(deps): bump the min version required for all deps - -### Implementation Changes - -- refactor: remove configurable request ([#394](https://github.com/googleapis/nodejs-common/pull/394)) - -### Dependencies - -- chore(deps): update dependency @types/tmp to v0.1.0 -- chore(deps): update dependency typescript to ~3.4.0 -- chore(deps): update dependency tmp to v0.1.0 ([#390](https://github.com/googleapis/nodejs-common/pull/390)) - -### Internal / Testing Changes - -- build: use per-repo publish token ([#384](https://github.com/googleapis/nodejs-common/pull/384)) - -## v0.31.1 - -03-13-2019 16:25 PDT - -### Bug Fixes -- fix(autoCreate): leave user options intact ([#378](https://github.com/googleapis/nodejs-common/pull/378)) - -### Dependencies -- fix(deps): update dependency @google-cloud/promisify to ^0.4.0 ([#374](https://github.com/googleapis/nodejs-common/pull/374)) - -### Documentation -- docs: update links in contrib guide ([#375](https://github.com/googleapis/nodejs-common/pull/375)) -- docs: update contributing path in README ([#369](https://github.com/googleapis/nodejs-common/pull/369)) -- docs: move CONTRIBUTING.md to root ([#368](https://github.com/googleapis/nodejs-common/pull/368)) - -### Internal / Testing Changes -- build: Add docuploader credentials to node publish jobs ([#381](https://github.com/googleapis/nodejs-common/pull/381)) -- build: use node10 to run samples-test, system-test etc ([#380](https://github.com/googleapis/nodejs-common/pull/380)) -- build: update release configuration -- chore(deps): update dependency mocha to v6 -- test: do not depend on request ([#376](https://github.com/googleapis/nodejs-common/pull/376)) -- build: use linkinator for docs test ([#372](https://github.com/googleapis/nodejs-common/pull/372)) -- chore(deps): update dependency @types/tmp to v0.0.34 ([#373](https://github.com/googleapis/nodejs-common/pull/373)) -- build: create docs test npm scripts ([#371](https://github.com/googleapis/nodejs-common/pull/371)) -- build: test using @grpc/grpc-js in CI ([#370](https://github.com/googleapis/nodejs-common/pull/370)) -- refactor: change error message format to multiline ([#362](https://github.com/googleapis/nodejs-common/pull/362)) - -## v0.31.0 - -02-05-2019 16:37 PST - -### New Features - -- fix: remove timeout rule from streaming uploads ([#365](https://github.com/googleapis/nodejs-common/pull/365)) - -### Dependencies - -- deps: update typescript to v3.3.0 ([#358](https://github.com/googleapis/nodejs-common/pull/358)) - -### Documentation - -- docs: add lint/fix example to contributing guide ([#364](https://github.com/googleapis/nodejs-common/pull/364)) - -## v0.30.2 - -01-25-2019 12:06 PST - -### New Features -- fix: clone default request configuration object ([#356](https://github.com/googleapis/nodejs-common/pull/356)) - -## v0.30.1 - -01-25-2019 11:06 PST - -### New Features - -- fix: favor user options over defaults ([#353](https://github.com/googleapis/nodejs-common/pull/353)) - -### Documentation - -- build: ignore googleapis.com in doc link check ([#351](https://github.com/googleapis/nodejs-common/pull/351)) - -### Internal / Testing Changes - -- add tests ([#352](https://github.com/googleapis/nodejs-common/pull/352)) - -## v0.30.0 - -01-23-2019 06:21 PST - -### New Features - -- fix: inherit requestModule from parent ([#344](https://github.com/googleapis/nodejs-common/pull/344)) -- feat: allow options to ServiceObject methods ([#349](https://github.com/googleapis/nodejs-common/pull/349)) - -### Dependencies - -- chore(deps): update dependency google-auth-library to v3.0.0 ([#348](https://github.com/googleapis/nodejs-common/pull/348)) -- chore(deps): update dependency @types/sinon to v7.0.3 ([#346](https://github.com/googleapis/nodejs-common/pull/346)) -- chore(deps): update dependency @types/sinon to v7.0.2 ([#343](https://github.com/googleapis/nodejs-common/pull/343)) - -### Internal / Testing Changes - -- build: check for 404s in the docs ([#347](https://github.com/googleapis/nodejs-common/pull/347)) - -## v0.29.1 - -12-19-2018 20:57 PST - -### Bug fixes -- fix: bind to this instead of true ([#341](https://github.com/googleapis/nodejs-common/pull/341)) - -## v0.29.0 - -12-19-2018 13:11 PST - -- fix: use request_ for service-object ([#337](https://github.com/googleapis/nodejs-common/pull/337)) - -## v0.28.0 - -12-13-2018 14:34 PST - -**This release has breaking changes**. The signature of the protected `request` method on `ServiceObject` has been changed. The method now resolves with an array of `[Body, Response]`, making it consistent with all other promisified methods. This change was made to fix several breaking changes that occurred in the `0.18.0` release. - -### New Features -- feat: allow passing GoogleAuth client to Service ([#314](https://github.com/googleapis/nodejs-common/pull/314)) -- feat: add maybeOptionsOrCallback util method ([#315](https://github.com/googleapis/nodejs-common/pull/315)) - -### Bug Fixes -- fix: revert async behavior of request ([#331](https://github.com/googleapis/nodejs-common/pull/331)) - -### Documentation -- docs: update readme badges ([#316](https://github.com/googleapis/nodejs-common/pull/316)) - -### Internal / Testing Changes -- chore(deps): update dependency @types/sinon to v7 ([#332](https://github.com/googleapis/nodejs-common/pull/332)) -- chore(build): inject yoshi automation key ([#330](https://github.com/googleapis/nodejs-common/pull/330)) -- chore: update nyc and eslint configs ([#329](https://github.com/googleapis/nodejs-common/pull/329)) -- chore: fix publish.sh permission +x ([#327](https://github.com/googleapis/nodejs-common/pull/327)) -- fix(build): fix Kokoro release script ([#326](https://github.com/googleapis/nodejs-common/pull/326)) -- build: add Kokoro configs for autorelease ([#325](https://github.com/googleapis/nodejs-common/pull/325)) -- chore: always nyc report before calling codecov ([#322](https://github.com/googleapis/nodejs-common/pull/322)) -- chore: nyc ignore build/test by default ([#321](https://github.com/googleapis/nodejs-common/pull/321)) -- chore(build): update the prettier config ([#319](https://github.com/googleapis/nodejs-common/pull/319)) -- chore: update license file ([#318](https://github.com/googleapis/nodejs-common/pull/318)) -- fix(build): fix system key decryption ([#313](https://github.com/googleapis/nodejs-common/pull/313)) -- chore(deps): update dependency @types/sinon to v5.0.7 ([#308](https://github.com/googleapis/nodejs-common/pull/308)) -- chore(deps): update dependency typescript to ~3.2.0 ([#312](https://github.com/googleapis/nodejs-common/pull/312)) - -## v0.27.0 - -11-26-2018 12:26 PST - -**BREAKING CHANGE**: The `ServiceObject` class now has stricter TypeScript types for property names. This will have no runtime impact, but may cause TypeScript compilation errors until the issues are addressed. - -### Fixes -- fix: improve types for service object ([#310](https://github.com/googleapis/nodejs-common/pull/310)) -- refactor: drop through2, mv, and a few others ([#306](https://github.com/googleapis/nodejs-common/pull/306)) - -### Internal / Testing Changes -- chore: add a synth.metadata -- fix: Pin @types/sinon to last compatible version ([#307](https://github.com/googleapis/nodejs-common/pull/307)) - -## v0.26.2 - -This patch release also brings in a patch dependency update of @google-cloud/projectify which contains a fix for OOM issue. - -### Implementation Changes -- ts: genericize CreateOptions in ServiceObject ([#275](https://github.com/googleapis/nodejs-common/pull/275)) - -### Dependencies -- chore(deps): upgrade @google-cloud/projectify to v0.3.2 ([#301](https://github.com/googleapis/nodejs-common/pull/301)) -- chore(deps): update dependency gts to ^0.9.0 ([#300](https://github.com/googleapis/nodejs-common/pull/300)) -- chore(deps): update dependency @google-cloud/nodejs-repo-tools to v3 ([#298](https://github.com/googleapis/nodejs-common/pull/298)) -- fix(deps): update dependency through2 to v3 ([#295](https://github.com/googleapis/nodejs-common/pull/295)) - -### Internal / Testing Changes -- chore: update eslintignore config ([#299](https://github.com/googleapis/nodejs-common/pull/299)) -- chore: drop contributors from multiple places ([#297](https://github.com/googleapis/nodejs-common/pull/297)) -- chore: use latest npm on Windows ([#296](https://github.com/googleapis/nodejs-common/pull/296)) -- chore: update CircleCI config ([#294](https://github.com/googleapis/nodejs-common/pull/294)) - -## v0.26.1 - -### Dependencies -- chore(deps): upgrade @google-cloud/projectify to ^0.3.1 ([#289](https://github.com/googleapis/nodejs-common/pull/289)) - -### Internal / Testing Changes -- chore: include build in eslintignore ([#288](https://github.com/googleapis/nodejs-common/pull/288)) -- chore: update issue templates ([#284](https://github.com/googleapis/nodejs-common/pull/284)) -- chore: remove old issue template ([#282](https://github.com/googleapis/nodejs-common/pull/282)) -- build: run tests on node11 ([#280](https://github.com/googleapis/nodejs-common/pull/280)) - -## v0.26.0 - -### Implementation Changes -- fix(typescript): Make ResponseCallback match subtype ([#271](https://github.com/googleapis/nodejs-common/pull/271)) -- fix: Do not retry streaming POST requests. ([#268](https://github.com/googleapis/nodejs-common/pull/268)) -- Don't publish sourcemaps ([#256](https://github.com/googleapis/nodejs-common/pull/256)) - -### Dependencies -- chore: Remove 'is' dependency ([#270](https://github.com/googleapis/nodejs-common/pull/270)) -- chore(deps): update dependency sinon to v7 ([#267](https://github.com/googleapis/nodejs-common/pull/267)) -- chore(deps): update dependency typescript to ~3.1.0 ([#259](https://github.com/googleapis/nodejs-common/pull/259)) - -### Internal / Testing Changes -- chores(build): run codecov on continuous builds ([#276](https://github.com/googleapis/nodejs-common/pull/276)) -- chore: update new issue template ([#274](https://github.com/googleapis/nodejs-common/pull/274)) -- chore: re-enable codecov ([#266](https://github.com/googleapis/nodejs-common/pull/266)) -- test: move install to system tests, and other tsconfig cleanup ([#269](https://github.com/googleapis/nodejs-common/pull/269)) -- Update kokoro config ([#264](https://github.com/googleapis/nodejs-common/pull/264)) -- docs: Remove appveyor badge from readme ([#262](https://github.com/googleapis/nodejs-common/pull/262)) -- Update CI config ([#258](https://github.com/googleapis/nodejs-common/pull/258)) -- build: prevent system/sample-test from leaking credentials -- Update the kokoro config ([#254](https://github.com/googleapis/nodejs-common/pull/254)) -- test: remove appveyor config ([#253](https://github.com/googleapis/nodejs-common/pull/253)) -- Update CI config ([#252](https://github.com/googleapis/nodejs-common/pull/252)) - -## v0.25.3 - -### Bug fixes -- fix(types): improve TypeScript types ([#248](https://github.com/googleapis/nodejs-common/pull/248)) - -## v0.25.2 - -### Bug fixes -- fix(service): Use getProjectId instead of getDefaultProjectId ([#246](https://github.com/googleapis/nodejs-common/pull/246)) - -## v0.25.1 - -### Implementation Changes -- Improve TypeScript types for async operations ([#241](https://github.com/googleapis/nodejs-common/pull/241)) -- Enhance typing of ServiceObject.prototype.get ([#239](https://github.com/googleapis/nodejs-common/pull/239)) -- Fix TypeScript setMetadata return type ([#240](https://github.com/googleapis/nodejs-common/pull/240)) -- Enable no-var in eslint ([#238](https://github.com/googleapis/nodejs-common/pull/238)) - -## v0.25.0 - -### Implementation Changes -Some types improvements. -- Improve types for SO.getMetadata, setMetadata ([#235](https://github.com/googleapis/nodejs-common/pull/235)) -- Expose the parent property on service-object ([#233](https://github.com/googleapis/nodejs-common/pull/233)) - -### Internal / Testing Changes -- Update CI config ([#232](https://github.com/googleapis/nodejs-common/pull/232)) - -## v0.24.0 - -**BREAKING CHANGES**: This release includes an update to `google-auth-library` [2.0](https://github.com/google/google-auth-library-nodejs/releases/tag/v2.0.0), which has a variety of breaking changes. - -### Bug fixes -- fix: set default once (#226) -- fix: export DecorateRequestOptions and BodyResponseCallback (#225) -- fix: fix the types (#221) - -### Dependencies -- fix(deps): update dependency google-auth-library to v2 (#224) -- chore(deps): update dependency nyc to v13 (#223) - -## v0.23.0 - -### Fixes -- fix: move repo-tools to dev dependencies (#218) - -### Features -- feat: make HTTP dependency configurable (#210) - -### Keepin the lights on -- chore: run repo-tools (#219) - -## v0.22.0 - -### Commits - -- fix: Remove old code & replace project ID token in multipart arrays. (#215) -- allow ServiceObject`s parent to be an ServiceObject (#212) -- fix: increase timeout for install test (#214) -- chore: remove dead code and packages (#209) -- fix(deps): update dependency pify to v4 (#208) - -## v0.21.1 - -### Bug fixes -- fix: method metadata can be a boolean (#206) - -### Build and Test -- test: throw on deprecation (#198) -- chore(deps): update dependency typescript to v3 (#197) -- chore: ignore package-lock.json (#205) - -## v0.21.0 - -**This release has breaking changes**. - -#### Node.js support -Versions 4.x and 9.x of node.js are no longer supported. Please upgrade to node.js 8.x or 10.x. - -#### New npm modules -The support for pagination, promisification, and project Id replacement have been moved into their own npm modules. You can find them at: -- [@google-cloud/projectify](https://github.com/googleapis/nodejs-projectify) -- [@google-cloud/promisify](https://github.com/googleapis/nodejs-promisify) -- [@google-cloud/paginator](https://github.com/googleapis/nodejs-paginator) - -These methods have been removed from `@google-cloud/common`. - -### Breaking Changes -- fix: drop support for node.js 4.x and 9.x (#190) -- chore: cut out code split into other modules (#194) - -### Implementation Changes -- fix: make ServiceObject#id protected to allow subclass access (#200) - -### Internal / Testing Changes -- chore(deps): update dependency gts to ^0.8.0 (#192) -- chore: update renovate config (#202) -- refactor: remove circular imports (#201) -- fix: special JSON.stringify for for strictEqual test (#199) -- chore: assert.deelEqual => assert.deepStrictEqual (#196) -- chore: move mocha options to mocha.opts (#195) -- Update config.yml (#191) diff --git a/reverse_engineering/node_modules/@google-cloud/common/LICENSE b/reverse_engineering/node_modules/@google-cloud/common/LICENSE deleted file mode 100644 index d645695..0000000 --- a/reverse_engineering/node_modules/@google-cloud/common/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/reverse_engineering/node_modules/@google-cloud/common/README.md b/reverse_engineering/node_modules/@google-cloud/common/README.md deleted file mode 100644 index 0f37d36..0000000 --- a/reverse_engineering/node_modules/@google-cloud/common/README.md +++ /dev/null @@ -1,119 +0,0 @@ -[//]: # "This README.md file is auto-generated, all changes to this file will be lost." -[//]: # "To regenerate it, use `python -m synthtool`." -Google Cloud Platform logo - -# [Google Cloud Common: Node.js Client](https://github.com/googleapis/nodejs-common) - -[![release level](https://img.shields.io/badge/release%20level-general%20availability%20%28GA%29-brightgreen.svg?style=flat)](https://cloud.google.com/terms/launch-stages) -[![npm version](https://img.shields.io/npm/v/@google-cloud/common.svg)](https://www.npmjs.org/package/@google-cloud/common) -[![codecov](https://img.shields.io/codecov/c/github/googleapis/nodejs-common/master.svg?style=flat)](https://codecov.io/gh/googleapis/nodejs-common) - - - - -Common components for Cloud APIs Node.js Client Libraries - - -A comprehensive list of changes in each version may be found in -[the CHANGELOG](https://github.com/googleapis/nodejs-common/blob/master/CHANGELOG.md). - -* [Google Cloud Common Node.js Client API Reference][client-docs] - -* [github.com/googleapis/nodejs-common](https://github.com/googleapis/nodejs-common) - -Read more about the client libraries for Cloud APIs, including the older -Google APIs Client Libraries, in [Client Libraries Explained][explained]. - -[explained]: https://cloud.google.com/apis/docs/client-libraries-explained - -**Table of contents:** - - -* [Quickstart](#quickstart) - - * [Installing the client library](#installing-the-client-library) - - -* [Versioning](#versioning) -* [Contributing](#contributing) -* [License](#license) - -## Quickstart - -### Installing the client library - -```bash -npm install @google-cloud/common -``` - -It's unlikely you will need to install this package directly, as it will be -installed as a dependency when you install other `@google-cloud` packages. - - - -The [Google Cloud Common Node.js Client API Reference][client-docs] documentation -also contains samples. - -## Supported Node.js Versions - -Our client libraries follow the [Node.js release schedule](https://nodejs.org/en/about/releases/). -Libraries are compatible with all current _active_ and _maintenance_ versions of -Node.js. - -Client libraries targeting some end-of-life versions of Node.js are available, and -can be installed via npm [dist-tags](https://docs.npmjs.com/cli/dist-tag). -The dist-tags follow the naming convention `legacy-(version)`. - -_Legacy Node.js versions are supported as a best effort:_ - -* Legacy versions will not be tested in continuous integration. -* Some security patches may not be able to be backported. -* Dependencies will not be kept up-to-date, and features will not be backported. - -#### Legacy tags available - -* `legacy-8`: install client libraries from this dist-tag for versions - compatible with Node.js 8. - -## Versioning - -This library follows [Semantic Versioning](http://semver.org/). - - -This library is considered to be **General Availability (GA)**. This means it -is stable; the code surface will not change in backwards-incompatible ways -unless absolutely necessary (e.g. because of critical security issues) or with -an extensive deprecation period. Issues and requests against **GA** libraries -are addressed with the highest priority. - - - - - -More Information: [Google Cloud Platform Launch Stages][launch_stages] - -[launch_stages]: https://cloud.google.com/terms/launch-stages - -## Contributing - -Contributions welcome! See the [Contributing Guide](https://github.com/googleapis/nodejs-common/blob/master/CONTRIBUTING.md). - -Please note that this `README.md`, the `samples/README.md`, -and a variety of configuration files in this repository (including `.nycrc` and `tsconfig.json`) -are generated from a central template. To edit one of these files, make an edit -to its template in this -[directory](https://github.com/googleapis/synthtool/tree/master/synthtool/gcp/templates/node_library). - -## License - -Apache Version 2.0 - -See [LICENSE](https://github.com/googleapis/nodejs-common/blob/master/LICENSE) - -[client-docs]: https://googleapis.dev/nodejs/common/latest - -[shell_img]: https://gstatic.com/cloudssh/images/open-btn.png -[projects]: https://console.cloud.google.com/project -[billing]: https://support.google.com/cloud/answer/6293499#enable-billing - -[auth]: https://cloud.google.com/docs/authentication/getting-started diff --git a/reverse_engineering/node_modules/@google-cloud/common/build/src/index.d.ts b/reverse_engineering/node_modules/@google-cloud/common/build/src/index.d.ts deleted file mode 100644 index cab8890..0000000 --- a/reverse_engineering/node_modules/@google-cloud/common/build/src/index.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -export { GoogleAuthOptions } from 'google-auth-library'; -/** - * @type {module:common/operation} - * @private - */ -export { Operation } from './operation'; -/** - * @type {module:common/service} - * @private - */ -export { Service, ServiceConfig, ServiceOptions, StreamRequestOptions, } from './service'; -/** - * @type {module:common/serviceObject} - * @private - */ -export { DeleteCallback, ExistsCallback, GetConfig, InstanceResponseCallback, Interceptor, Metadata, MetadataCallback, MetadataResponse, Methods, ResponseCallback, ServiceObject, ServiceObjectConfig, ServiceObjectParent, SetMetadataResponse, } from './service-object'; -/** - * @type {module:common/util} - * @private - */ -export { Abortable, AbortableDuplex, ApiError, BodyResponseCallback, DecorateRequestOptions, ResponseBody, util, } from './util'; diff --git a/reverse_engineering/node_modules/@google-cloud/common/build/src/index.js b/reverse_engineering/node_modules/@google-cloud/common/build/src/index.js deleted file mode 100644 index dc6a9fa..0000000 --- a/reverse_engineering/node_modules/@google-cloud/common/build/src/index.js +++ /dev/null @@ -1,41 +0,0 @@ -"use strict"; -// Copyright 2016 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * @type {module:common/operation} - * @private - */ -var operation_1 = require("./operation"); -exports.Operation = operation_1.Operation; -/** - * @type {module:common/service} - * @private - */ -var service_1 = require("./service"); -exports.Service = service_1.Service; -/** - * @type {module:common/serviceObject} - * @private - */ -var service_object_1 = require("./service-object"); -exports.ServiceObject = service_object_1.ServiceObject; -/** - * @type {module:common/util} - * @private - */ -var util_1 = require("./util"); -exports.ApiError = util_1.ApiError; -exports.util = util_1.util; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/@google-cloud/common/build/src/operation.d.ts b/reverse_engineering/node_modules/@google-cloud/common/build/src/operation.d.ts deleted file mode 100644 index 12264ce..0000000 --- a/reverse_engineering/node_modules/@google-cloud/common/build/src/operation.d.ts +++ /dev/null @@ -1,53 +0,0 @@ -/*! - * @module common/operation - */ -import { MetadataCallback, ServiceObject, ServiceObjectConfig } from './service-object'; -export declare class Operation extends ServiceObject { - completeListeners: number; - hasActiveListeners: boolean; - /** - * An Operation object allows you to interact with APIs that take longer to - * process things. - * - * @constructor - * @alias module:common/operation - * - * @param {object} config - Configuration object. - * @param {module:common/service|module:common/serviceObject|module:common/grpcService|module:common/grpcServiceObject} config.parent - The parent object. - */ - constructor(config: ServiceObjectConfig); - /** - * Wraps the `complete` and `error` events in a Promise. - * - * @return {Promise} - */ - promise(): Promise; - /** - * Begin listening for events on the operation. This method keeps track of how - * many "complete" listeners are registered and removed, making sure polling - * is handled automatically. - * - * As long as there is one active "complete" listener, the connection is open. - * When there are no more listeners, the polling stops. - * - * @private - */ - protected listenForEvents_(): void; - /** - * Poll for a status update. Returns null for an incomplete - * status, and metadata for a complete status. - * - * @private - */ - protected poll_(callback: MetadataCallback): void; - /** - * Poll `getMetadata` to check the operation's status. This runs a loop to - * ping the API on an interval. - * - * Note: This method is automatically called once a "complete" event handler - * is registered on the operation. - * - * @private - */ - protected startPolling_(): Promise; -} diff --git a/reverse_engineering/node_modules/@google-cloud/common/build/src/operation.js b/reverse_engineering/node_modules/@google-cloud/common/build/src/operation.js deleted file mode 100644 index 9a7628e..0000000 --- a/reverse_engineering/node_modules/@google-cloud/common/build/src/operation.js +++ /dev/null @@ -1,146 +0,0 @@ -"use strict"; -// Copyright 2016 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -/*! - * @module common/operation - */ -const service_object_1 = require("./service-object"); -const util_1 = require("util"); -// eslint-disable-next-line @typescript-eslint/no-explicit-any -class Operation extends service_object_1.ServiceObject { - /** - * An Operation object allows you to interact with APIs that take longer to - * process things. - * - * @constructor - * @alias module:common/operation - * - * @param {object} config - Configuration object. - * @param {module:common/service|module:common/serviceObject|module:common/grpcService|module:common/grpcServiceObject} config.parent - The parent object. - */ - constructor(config) { - const methods = { - /** - * Checks to see if an operation exists. - */ - exists: true, - /** - * Retrieves the operation. - */ - get: true, - /** - * Retrieves metadata for the operation. - */ - getMetadata: { - reqOpts: { - name: config.id, - }, - }, - }; - config = Object.assign({ - baseUrl: '', - }, config); - // eslint-disable-next-line @typescript-eslint/no-explicit-any - config.methods = (config.methods || methods); - super(config); - this.completeListeners = 0; - this.hasActiveListeners = false; - this.listenForEvents_(); - } - /** - * Wraps the `complete` and `error` events in a Promise. - * - * @return {Promise} - */ - promise() { - return new Promise((resolve, reject) => { - this.on('error', reject).on('complete', (metadata) => { - resolve([metadata]); - }); - }); - } - /** - * Begin listening for events on the operation. This method keeps track of how - * many "complete" listeners are registered and removed, making sure polling - * is handled automatically. - * - * As long as there is one active "complete" listener, the connection is open. - * When there are no more listeners, the polling stops. - * - * @private - */ - listenForEvents_() { - this.on('newListener', (event) => { - if (event === 'complete') { - this.completeListeners++; - if (!this.hasActiveListeners) { - this.hasActiveListeners = true; - this.startPolling_(); - } - } - }); - this.on('removeListener', (event) => { - if (event === 'complete' && --this.completeListeners === 0) { - this.hasActiveListeners = false; - } - }); - } - /** - * Poll for a status update. Returns null for an incomplete - * status, and metadata for a complete status. - * - * @private - */ - poll_(callback) { - this.getMetadata((err, body) => { - if (err || body.error) { - callback(err || body.error); - return; - } - if (!body.done) { - callback(null); - return; - } - callback(null, body); - }); - } - /** - * Poll `getMetadata` to check the operation's status. This runs a loop to - * ping the API on an interval. - * - * Note: This method is automatically called once a "complete" event handler - * is registered on the operation. - * - * @private - */ - async startPolling_() { - if (!this.hasActiveListeners) { - return; - } - try { - const metadata = await util_1.promisify(this.poll_.bind(this))(); - if (!metadata) { - setTimeout(this.startPolling_.bind(this), this.pollIntervalMs || 500); - return; - } - this.emit('complete', metadata); - } - catch (err) { - this.emit('error', err); - } - } -} -exports.Operation = Operation; -//# sourceMappingURL=operation.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/@google-cloud/common/build/src/service-object.d.ts b/reverse_engineering/node_modules/@google-cloud/common/build/src/service-object.d.ts deleted file mode 100644 index 62a2c43..0000000 --- a/reverse_engineering/node_modules/@google-cloud/common/build/src/service-object.d.ts +++ /dev/null @@ -1,207 +0,0 @@ -/// -import { EventEmitter } from 'events'; -import * as r from 'teeny-request'; -import { ApiError, BodyResponseCallback, DecorateRequestOptions } from './util'; -export declare type RequestResponse = [Metadata, r.Response]; -export interface ServiceObjectParent { - interceptors: Interceptor[]; - getRequestInterceptors(): Function[]; - requestStream(reqOpts: DecorateRequestOptions): r.Request; - request(reqOpts: DecorateRequestOptions, callback: BodyResponseCallback): void; -} -export interface Interceptor { - request(opts: r.Options): DecorateRequestOptions; -} -export declare type GetMetadataOptions = object; -export declare type Metadata = any; -export declare type MetadataResponse = [Metadata, r.Response]; -export declare type MetadataCallback = (err: Error | null, metadata?: Metadata, apiResponse?: r.Response) => void; -export declare type ExistsOptions = object; -export interface ExistsCallback { - (err: Error | null, exists?: boolean): void; -} -export interface ServiceObjectConfig { - /** - * The base URL to make API requests to. - */ - baseUrl?: string; - /** - * The method which creates this object. - */ - createMethod?: Function; - /** - * The identifier of the object. For example, the name of a Storage bucket or - * Pub/Sub topic. - */ - id?: string; - /** - * A map of each method name that should be inherited. - */ - methods?: Methods; - /** - * The parent service instance. For example, an instance of Storage if the - * object is Bucket. - */ - parent: ServiceObjectParent; - /** - * For long running operations, how often should the client poll - * for completion. - */ - pollIntervalMs?: number; -} -export interface Methods { - [methodName: string]: { - reqOpts?: r.CoreOptions; - } | boolean; -} -export interface InstanceResponseCallback { - (err: ApiError | null, instance?: T | null, apiResponse?: r.Response): void; -} -export interface CreateOptions { -} -export declare type CreateResponse = any[]; -export interface CreateCallback { - (err: ApiError | null, instance?: T | null, ...args: any[]): void; -} -export declare type DeleteOptions = { - ignoreNotFound?: boolean; -} & object; -export interface DeleteCallback { - (err: Error | null, apiResponse?: r.Response): void; -} -export interface GetConfig { - /** - * Create the object if it doesn't already exist. - */ - autoCreate?: boolean; -} -declare type GetOrCreateOptions = GetConfig & CreateOptions; -export declare type GetResponse = [T, r.Response]; -export interface ResponseCallback { - (err?: Error | null, apiResponse?: r.Response): void; -} -export declare type SetMetadataResponse = [Metadata]; -export declare type SetMetadataOptions = object; -/** - * ServiceObject is a base class, meant to be inherited from by a "service - * object," like a BigQuery dataset or Storage bucket. - * - * Most of the time, these objects share common functionality; they can be - * created or deleted, and you can get or set their metadata. - * - * By inheriting from this class, a service object will be extended with these - * shared behaviors. Note that any method can be overridden when the service - * object requires specific behavior. - */ -declare class ServiceObject extends EventEmitter { - metadata: Metadata; - baseUrl?: string; - parent: ServiceObjectParent; - id?: string; - pollIntervalMs?: number; - private createMethod?; - protected methods: Methods; - interceptors: Interceptor[]; - constructor(config: ServiceObjectConfig); - /** - * Create the object. - * - * @param {object=} options - Configuration object. - * @param {function} callback - The callback function. - * @param {?error} callback.err - An error returned while making this request. - * @param {object} callback.instance - The instance. - * @param {object} callback.apiResponse - The full API response. - */ - create(options?: CreateOptions): Promise>; - create(options: CreateOptions, callback: CreateCallback): void; - create(callback: CreateCallback): void; - /** - * Delete the object. - * - * @param {function=} callback - The callback function. - * @param {?error} callback.err - An error returned while making this request. - * @param {object} callback.apiResponse - The full API response. - */ - delete(options?: DeleteOptions): Promise<[r.Response]>; - delete(options: DeleteOptions, callback: DeleteCallback): void; - delete(callback: DeleteCallback): void; - /** - * Check if the object exists. - * - * @param {function} callback - The callback function. - * @param {?error} callback.err - An error returned while making this request. - * @param {boolean} callback.exists - Whether the object exists or not. - */ - exists(options?: ExistsOptions): Promise<[boolean]>; - exists(options: ExistsOptions, callback: ExistsCallback): void; - exists(callback: ExistsCallback): void; - /** - * Get the object if it exists. Optionally have the object created if an - * options object is provided with `autoCreate: true`. - * - * @param {object=} options - The configuration object that will be used to - * create the object if necessary. - * @param {boolean} options.autoCreate - Create the object if it doesn't already exist. - * @param {function} callback - The callback function. - * @param {?error} callback.err - An error returned while making this request. - * @param {object} callback.instance - The instance. - * @param {object} callback.apiResponse - The full API response. - */ - get(options?: GetOrCreateOptions): Promise>; - get(callback: InstanceResponseCallback): void; - get(options: GetOrCreateOptions, callback: InstanceResponseCallback): void; - /** - * Get the metadata of this object. - * - * @param {function} callback - The callback function. - * @param {?error} callback.err - An error returned while making this request. - * @param {object} callback.metadata - The metadata for this object. - * @param {object} callback.apiResponse - The full API response. - */ - getMetadata(options?: GetMetadataOptions): Promise; - getMetadata(options: GetMetadataOptions, callback: MetadataCallback): void; - getMetadata(callback: MetadataCallback): void; - /** - * Return the user's custom request interceptors. - */ - getRequestInterceptors(): Function[]; - /** - * Set the metadata for this object. - * - * @param {object} metadata - The metadata to set on this object. - * @param {object=} options - Configuration options. - * @param {function=} callback - The callback function. - * @param {?error} callback.err - An error returned while making this request. - * @param {object} callback.apiResponse - The full API response. - */ - setMetadata(metadata: Metadata, options?: SetMetadataOptions): Promise; - setMetadata(metadata: Metadata, callback: MetadataCallback): void; - setMetadata(metadata: Metadata, options: SetMetadataOptions, callback: MetadataCallback): void; - /** - * Make an authenticated API request. - * - * @private - * - * @param {object} reqOpts - Request options that are passed to `request`. - * @param {string} reqOpts.uri - A URI relative to the baseUrl. - * @param {function} callback - The callback function passed to `request`. - */ - private request_; - /** - * Make an authenticated API request. - * - * @param {object} reqOpts - Request options that are passed to `request`. - * @param {string} reqOpts.uri - A URI relative to the baseUrl. - * @param {function} callback - The callback function passed to `request`. - */ - request(reqOpts: DecorateRequestOptions): Promise; - request(reqOpts: DecorateRequestOptions, callback: BodyResponseCallback): void; - /** - * Make an authenticated API request. - * - * @param {object} reqOpts - Request options that are passed to `request`. - * @param {string} reqOpts.uri - A URI relative to the baseUrl. - */ - requestStream(reqOpts: DecorateRequestOptions): r.Request; -} -export { ServiceObject }; diff --git a/reverse_engineering/node_modules/@google-cloud/common/build/src/service-object.js b/reverse_engineering/node_modules/@google-cloud/common/build/src/service-object.js deleted file mode 100644 index 649243c..0000000 --- a/reverse_engineering/node_modules/@google-cloud/common/build/src/service-object.js +++ /dev/null @@ -1,272 +0,0 @@ -"use strict"; -// Copyright 2015 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -/*! - * @module common/service-object - */ -const promisify_1 = require("@google-cloud/promisify"); -const arrify = require("arrify"); -const events_1 = require("events"); -const extend = require("extend"); -const util_1 = require("./util"); -/** - * ServiceObject is a base class, meant to be inherited from by a "service - * object," like a BigQuery dataset or Storage bucket. - * - * Most of the time, these objects share common functionality; they can be - * created or deleted, and you can get or set their metadata. - * - * By inheriting from this class, a service object will be extended with these - * shared behaviors. Note that any method can be overridden when the service - * object requires specific behavior. - */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -class ServiceObject extends events_1.EventEmitter { - /* - * @constructor - * @alias module:common/service-object - * - * @private - * - * @param {object} config - Configuration object. - * @param {string} config.baseUrl - The base URL to make API requests to. - * @param {string} config.createMethod - The method which creates this object. - * @param {string=} config.id - The identifier of the object. For example, the - * name of a Storage bucket or Pub/Sub topic. - * @param {object=} config.methods - A map of each method name that should be inherited. - * @param {object} config.methods[].reqOpts - Default request options for this - * particular method. A common use case is when `setMetadata` requires a - * `PUT` method to override the default `PATCH`. - * @param {object} config.parent - The parent service instance. For example, an - * instance of Storage if the object is Bucket. - */ - constructor(config) { - super(); - this.metadata = {}; - this.baseUrl = config.baseUrl; - this.parent = config.parent; // Parent class. - this.id = config.id; // Name or ID (e.g. dataset ID, bucket name, etc). - this.createMethod = config.createMethod; - this.methods = config.methods || {}; - this.interceptors = []; - this.pollIntervalMs = config.pollIntervalMs; - if (config.methods) { - // This filters the ServiceObject instance (e.g. a "File") to only have - // the configured methods. We make a couple of exceptions for core- - // functionality ("request()" and "getRequestInterceptors()") - Object.getOwnPropertyNames(ServiceObject.prototype) - .filter(methodName => { - return ( - // All ServiceObjects need `request` and `getRequestInterceptors`. - // clang-format off - !/^request/.test(methodName) && - !/^getRequestInterceptors/.test(methodName) && - // clang-format on - // The ServiceObject didn't redefine the method. - // eslint-disable-next-line @typescript-eslint/no-explicit-any - this[methodName] === - // eslint-disable-next-line @typescript-eslint/no-explicit-any - ServiceObject.prototype[methodName] && - // This method isn't wanted. - !config.methods[methodName]); - }) - .forEach(methodName => { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - this[methodName] = undefined; - }); - } - } - create(optionsOrCallback, callback) { - // eslint-disable-next-line @typescript-eslint/no-this-alias - const self = this; - const args = [this.id]; - if (typeof optionsOrCallback === 'function') { - callback = optionsOrCallback; - } - if (typeof optionsOrCallback === 'object') { - args.push(optionsOrCallback); - } - // Wrap the callback to return *this* instance of the object, not the - // newly-created one. - // tslint: disable-next-line no-any - function onCreate(...args) { - const [err, instance] = args; - if (!err) { - self.metadata = instance.metadata; - args[1] = self; // replace the created `instance` with this one. - } - callback(...args); - } - args.push(onCreate); - // eslint-disable-next-line prefer-spread - this.createMethod.apply(null, args); - } - delete(optionsOrCallback, cb) { - const [options, callback] = util_1.util.maybeOptionsOrCallback(optionsOrCallback, cb); - const ignoreNotFound = options.ignoreNotFound; - delete options.ignoreNotFound; - const methodConfig = (typeof this.methods.delete === 'object' && this.methods.delete) || {}; - const reqOpts = extend(true, { - method: 'DELETE', - uri: '', - }, methodConfig.reqOpts, { - qs: options, - }); - // The `request` method may have been overridden to hold any special - // behavior. Ensure we call the original `request` method. - ServiceObject.prototype.request.call(this, reqOpts, (err, ...args) => { - if (err) { - if (err.code === 404 && ignoreNotFound) { - err = null; - } - } - callback(err, ...args); - }); - } - exists(optionsOrCallback, cb) { - const [options, callback] = util_1.util.maybeOptionsOrCallback(optionsOrCallback, cb); - this.get(options, err => { - if (err) { - if (err.code === 404) { - callback(null, false); - } - else { - callback(err); - } - return; - } - callback(null, true); - }); - } - get(optionsOrCallback, cb) { - // eslint-disable-next-line @typescript-eslint/no-this-alias - const self = this; - const [opts, callback] = util_1.util.maybeOptionsOrCallback(optionsOrCallback, cb); - const options = Object.assign({}, opts); - const autoCreate = options.autoCreate && typeof this.create === 'function'; - delete options.autoCreate; - function onCreate(err, instance, apiResponse) { - if (err) { - if (err.code === 409) { - self.get(options, callback); - return; - } - callback(err, null, apiResponse); - return; - } - callback(null, instance, apiResponse); - } - this.getMetadata(options, (err, metadata) => { - if (err) { - if (err.code === 404 && autoCreate) { - const args = []; - if (Object.keys(options).length > 0) { - args.push(options); - } - args.push(onCreate); - self.create(...args); - return; - } - callback(err, null, metadata); - return; - } - callback(null, self, metadata); - }); - } - getMetadata(optionsOrCallback, cb) { - const [options, callback] = util_1.util.maybeOptionsOrCallback(optionsOrCallback, cb); - const methodConfig = (typeof this.methods.getMetadata === 'object' && - this.methods.getMetadata) || - {}; - const reqOpts = extend(true, { - uri: '', - }, methodConfig.reqOpts, { - qs: options, - }); - // The `request` method may have been overridden to hold any special - // behavior. Ensure we call the original `request` method. - ServiceObject.prototype.request.call(this, reqOpts, (err, body, res) => { - this.metadata = body; - callback(err, this.metadata, res); - }); - } - /** - * Return the user's custom request interceptors. - */ - getRequestInterceptors() { - // Interceptors should be returned in the order they were assigned. - const localInterceptors = this.interceptors - .filter(interceptor => typeof interceptor.request === 'function') - .map(interceptor => interceptor.request); - return this.parent.getRequestInterceptors().concat(localInterceptors); - } - setMetadata(metadata, optionsOrCallback, cb) { - const [options, callback] = util_1.util.maybeOptionsOrCallback(optionsOrCallback, cb); - const methodConfig = (typeof this.methods.setMetadata === 'object' && - this.methods.setMetadata) || - {}; - const reqOpts = extend(true, {}, { - method: 'PATCH', - uri: '', - }, methodConfig.reqOpts, { - json: metadata, - qs: options, - }); - // The `request` method may have been overridden to hold any special - // behavior. Ensure we call the original `request` method. - ServiceObject.prototype.request.call(this, reqOpts, (err, body, res) => { - this.metadata = body; - callback(err, this.metadata, res); - }); - } - request_(reqOpts, callback) { - reqOpts = extend(true, {}, reqOpts); - const isAbsoluteUrl = reqOpts.uri.indexOf('http') === 0; - const uriComponents = [this.baseUrl, this.id || '', reqOpts.uri]; - if (isAbsoluteUrl) { - uriComponents.splice(0, uriComponents.indexOf(reqOpts.uri)); - } - reqOpts.uri = uriComponents - .filter(x => x.trim()) // Limit to non-empty strings. - .map(uriComponent => { - const trimSlashesRegex = /^\/*|\/*$/g; - return uriComponent.replace(trimSlashesRegex, ''); - }) - .join('/'); - const childInterceptors = arrify(reqOpts.interceptors_); - const localInterceptors = [].slice.call(this.interceptors); - reqOpts.interceptors_ = childInterceptors.concat(localInterceptors); - if (reqOpts.shouldReturnStream) { - return this.parent.requestStream(reqOpts); - } - this.parent.request(reqOpts, callback); - } - request(reqOpts, callback) { - this.request_(reqOpts, callback); - } - /** - * Make an authenticated API request. - * - * @param {object} reqOpts - Request options that are passed to `request`. - * @param {string} reqOpts.uri - A URI relative to the baseUrl. - */ - requestStream(reqOpts) { - const opts = extend(true, reqOpts, { shouldReturnStream: true }); - return this.request_(opts); - } -} -exports.ServiceObject = ServiceObject; -promisify_1.promisifyAll(ServiceObject, { exclude: ['getRequestInterceptors'] }); -//# sourceMappingURL=service-object.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/@google-cloud/common/build/src/service.d.ts b/reverse_engineering/node_modules/@google-cloud/common/build/src/service.d.ts deleted file mode 100644 index ed45026..0000000 --- a/reverse_engineering/node_modules/@google-cloud/common/build/src/service.d.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { GoogleAuth, GoogleAuthOptions } from 'google-auth-library'; -import * as r from 'teeny-request'; -import { Interceptor } from './service-object'; -import { BodyResponseCallback, DecorateRequestOptions, MakeAuthenticatedRequest, PackageJson } from './util'; -export interface StreamRequestOptions extends DecorateRequestOptions { - shouldReturnStream: true; -} -export interface ServiceConfig { - /** - * The base URL to make API requests to. - */ - baseUrl: string; - /** - * The API Endpoint to use when connecting to the service. - * Example: storage.googleapis.com - */ - apiEndpoint: string; - /** - * The scopes required for the request. - */ - scopes: string[]; - projectIdRequired?: boolean; - packageJson: PackageJson; - /** - * Reuse an existing GoogleAuth client instead of creating a new one. - */ - authClient?: GoogleAuth; -} -export interface ServiceOptions extends GoogleAuthOptions { - authClient?: GoogleAuth; - interceptors_?: Interceptor[]; - email?: string; - token?: string; - timeout?: number; - userAgent?: string; -} -export declare class Service { - baseUrl: string; - private globalInterceptors; - interceptors: Interceptor[]; - private packageJson; - projectId: string; - private projectIdRequired; - providedUserAgent?: string; - makeAuthenticatedRequest: MakeAuthenticatedRequest; - authClient: GoogleAuth; - private getCredentials; - readonly apiEndpoint: string; - timeout?: number; - /** - * Service is a base class, meant to be inherited from by a "service," like - * BigQuery or Storage. - * - * This handles making authenticated requests by exposing a `makeReq_` - * function. - * - * @constructor - * @alias module:common/service - * - * @param {object} config - Configuration object. - * @param {string} config.baseUrl - The base URL to make API requests to. - * @param {string[]} config.scopes - The scopes required for the request. - * @param {object=} options - [Configuration object](#/docs). - */ - constructor(config: ServiceConfig, options?: ServiceOptions); - /** - * Return the user's custom request interceptors. - */ - getRequestInterceptors(): Function[]; - /** - * Get and update the Service's project ID. - * - * @param {function} callback - The callback function. - */ - getProjectId(): Promise; - getProjectId(callback: (err: Error | null, projectId?: string) => void): void; - protected getProjectIdAsync(): Promise; - /** - * Make an authenticated API request. - * - * @private - * - * @param {object} reqOpts - Request options that are passed to `request`. - * @param {string} reqOpts.uri - A URI relative to the baseUrl. - * @param {function} callback - The callback function passed to `request`. - */ - private request_; - /** - * Make an authenticated API request. - * - * @param {object} reqOpts - Request options that are passed to `request`. - * @param {string} reqOpts.uri - A URI relative to the baseUrl. - * @param {function} callback - The callback function passed to `request`. - */ - request(reqOpts: DecorateRequestOptions, callback: BodyResponseCallback): void; - /** - * Make an authenticated API request. - * - * @param {object} reqOpts - Request options that are passed to `request`. - * @param {string} reqOpts.uri - A URI relative to the baseUrl. - */ - requestStream(reqOpts: DecorateRequestOptions): r.Request; -} diff --git a/reverse_engineering/node_modules/@google-cloud/common/build/src/service.js b/reverse_engineering/node_modules/@google-cloud/common/build/src/service.js deleted file mode 100644 index 7984ee5..0000000 --- a/reverse_engineering/node_modules/@google-cloud/common/build/src/service.js +++ /dev/null @@ -1,166 +0,0 @@ -"use strict"; -// Copyright 2015 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -/*! - * @module common/service - */ -const arrify = require("arrify"); -const extend = require("extend"); -const util_1 = require("./util"); -const PROJECT_ID_TOKEN = '{{projectId}}'; -class Service { - /** - * Service is a base class, meant to be inherited from by a "service," like - * BigQuery or Storage. - * - * This handles making authenticated requests by exposing a `makeReq_` - * function. - * - * @constructor - * @alias module:common/service - * - * @param {object} config - Configuration object. - * @param {string} config.baseUrl - The base URL to make API requests to. - * @param {string[]} config.scopes - The scopes required for the request. - * @param {object=} options - [Configuration object](#/docs). - */ - constructor(config, options = {}) { - this.baseUrl = config.baseUrl; - this.apiEndpoint = config.apiEndpoint; - this.timeout = options.timeout; - this.globalInterceptors = arrify(options.interceptors_); - this.interceptors = []; - this.packageJson = config.packageJson; - this.projectId = options.projectId || PROJECT_ID_TOKEN; - this.projectIdRequired = config.projectIdRequired !== false; - this.providedUserAgent = options.userAgent; - const reqCfg = extend({}, config, { - projectIdRequired: this.projectIdRequired, - projectId: this.projectId, - authClient: options.authClient, - credentials: options.credentials, - keyFile: options.keyFilename, - email: options.email, - token: options.token, - }); - this.makeAuthenticatedRequest = - util_1.util.makeAuthenticatedRequestFactory(reqCfg); - this.authClient = this.makeAuthenticatedRequest.authClient; - this.getCredentials = this.makeAuthenticatedRequest.getCredentials; - const isCloudFunctionEnv = !!process.env.FUNCTION_NAME; - if (isCloudFunctionEnv) { - this.interceptors.push({ - request(reqOpts) { - reqOpts.forever = false; - return reqOpts; - }, - }); - } - } - /** - * Return the user's custom request interceptors. - */ - getRequestInterceptors() { - // Interceptors should be returned in the order they were assigned. - return [].slice - .call(this.globalInterceptors) - .concat(this.interceptors) - .filter(interceptor => typeof interceptor.request === 'function') - .map(interceptor => interceptor.request); - } - getProjectId(callback) { - if (!callback) { - return this.getProjectIdAsync(); - } - this.getProjectIdAsync().then(p => callback(null, p), callback); - } - async getProjectIdAsync() { - const projectId = await this.authClient.getProjectId(); - if (this.projectId === PROJECT_ID_TOKEN && projectId) { - this.projectId = projectId; - } - return this.projectId; - } - request_(reqOpts, callback) { - reqOpts = extend(true, {}, reqOpts, { timeout: this.timeout }); - const isAbsoluteUrl = reqOpts.uri.indexOf('http') === 0; - const uriComponents = [this.baseUrl]; - if (this.projectIdRequired) { - uriComponents.push('projects'); - uriComponents.push(this.projectId); - } - uriComponents.push(reqOpts.uri); - if (isAbsoluteUrl) { - uriComponents.splice(0, uriComponents.indexOf(reqOpts.uri)); - } - reqOpts.uri = uriComponents - .map(uriComponent => { - const trimSlashesRegex = /^\/*|\/*$/g; - return uriComponent.replace(trimSlashesRegex, ''); - }) - .join('/') - // Some URIs have colon separators. - // Bad: https://.../projects/:list - // Good: https://.../projects:list - .replace(/\/:/g, ':'); - const requestInterceptors = this.getRequestInterceptors(); - arrify(reqOpts.interceptors_).forEach(interceptor => { - if (typeof interceptor.request === 'function') { - requestInterceptors.push(interceptor.request); - } - }); - requestInterceptors.forEach(requestInterceptor => { - reqOpts = requestInterceptor(reqOpts); - }); - delete reqOpts.interceptors_; - const pkg = this.packageJson; - let userAgent = util_1.util.getUserAgentFromPackageJson(pkg); - if (this.providedUserAgent) { - userAgent = `${this.providedUserAgent} ${userAgent}`; - } - reqOpts.headers = extend({}, reqOpts.headers, { - 'User-Agent': userAgent, - 'x-goog-api-client': `gl-node/${process.versions.node} gccl/${pkg.version}`, - }); - if (reqOpts.shouldReturnStream) { - return this.makeAuthenticatedRequest(reqOpts); - } - else { - this.makeAuthenticatedRequest(reqOpts, callback); - } - } - /** - * Make an authenticated API request. - * - * @param {object} reqOpts - Request options that are passed to `request`. - * @param {string} reqOpts.uri - A URI relative to the baseUrl. - * @param {function} callback - The callback function passed to `request`. - */ - request(reqOpts, callback) { - Service.prototype.request_.call(this, reqOpts, callback); - } - /** - * Make an authenticated API request. - * - * @param {object} reqOpts - Request options that are passed to `request`. - * @param {string} reqOpts.uri - A URI relative to the baseUrl. - */ - requestStream(reqOpts) { - const opts = extend(true, reqOpts, { shouldReturnStream: true }); - return Service.prototype.request_.call(this, opts); - } -} -exports.Service = Service; -//# sourceMappingURL=service.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/@google-cloud/common/build/src/util.d.ts b/reverse_engineering/node_modules/@google-cloud/common/build/src/util.d.ts deleted file mode 100644 index 04a8fea..0000000 --- a/reverse_engineering/node_modules/@google-cloud/common/build/src/util.d.ts +++ /dev/null @@ -1,302 +0,0 @@ -/// -import { GoogleAuth, GoogleAuthOptions } from 'google-auth-library'; -import { CredentialBody } from 'google-auth-library'; -import * as r from 'teeny-request'; -import { Duplex, DuplexOptions, Readable, Writable } from 'stream'; -import { Interceptor } from './service-object'; -export declare type ResponseBody = any; -export interface DuplexifyOptions extends DuplexOptions { - autoDestroy?: boolean; - end?: boolean; -} -export interface Duplexify extends Duplex { - readonly destroyed: boolean; - setWritable(writable: Writable | false | null): void; - setReadable(readable: Readable | false | null): void; -} -export interface DuplexifyConstructor { - obj(writable?: Writable | false | null, readable?: Readable | false | null, options?: DuplexifyOptions): Duplexify; - new (writable?: Writable | false | null, readable?: Readable | false | null, options?: DuplexifyOptions): Duplexify; - (writable?: Writable | false | null, readable?: Readable | false | null, options?: DuplexifyOptions): Duplexify; -} -export interface ParsedHttpRespMessage { - resp: r.Response; - err?: ApiError; -} -export interface MakeAuthenticatedRequest { - (reqOpts: DecorateRequestOptions): Duplexify; - (reqOpts: DecorateRequestOptions, options?: MakeAuthenticatedRequestOptions): void | Abortable; - (reqOpts: DecorateRequestOptions, callback?: BodyResponseCallback): void | Abortable; - (reqOpts: DecorateRequestOptions, optionsOrCallback?: MakeAuthenticatedRequestOptions | BodyResponseCallback): void | Abortable | Duplexify; - getCredentials: (callback: (err?: Error | null, credentials?: CredentialBody) => void) => void; - authClient: GoogleAuth; -} -export interface Abortable { - abort(): void; -} -export declare type AbortableDuplex = Duplexify & Abortable; -export interface PackageJson { - name: string; - version: string; -} -export interface MakeAuthenticatedRequestFactoryConfig extends GoogleAuthOptions { - /** - * Automatically retry requests if the response is related to rate limits or - * certain intermittent server errors. We will exponentially backoff - * subsequent requests by default. (default: true) - */ - autoRetry?: boolean; - /** - * If true, just return the provided request options. Default: false. - */ - customEndpoint?: boolean; - /** - * Account email address, required for PEM/P12 usage. - */ - email?: string; - /** - * Maximum number of automatic retries attempted before returning the error. - * (default: 3) - */ - maxRetries?: number; - stream?: Duplexify; - /** - * A pre-instantiated GoogleAuth client that should be used. - * A new will be created if this is not set. - */ - authClient?: GoogleAuth; -} -export interface MakeAuthenticatedRequestOptions { - onAuthenticated: OnAuthenticatedCallback; -} -export interface OnAuthenticatedCallback { - (err: Error | null, reqOpts?: DecorateRequestOptions): void; -} -export interface GoogleErrorBody { - code: number; - errors?: GoogleInnerError[]; - response: r.Response; - message?: string; -} -export interface GoogleInnerError { - reason?: string; - message?: string; -} -export interface MakeWritableStreamOptions { - /** - * A connection instance used to get a token with and send the request - * through. - */ - connection?: {}; - /** - * Metadata to send at the head of the request. - */ - metadata?: { - contentType?: string; - }; - /** - * Request object, in the format of a standard Node.js http.request() object. - */ - request?: r.Options; - makeAuthenticatedRequest(reqOpts: r.OptionsWithUri, fnobj: { - onAuthenticated(err: Error | null, authenticatedReqOpts?: r.Options): void; - }): void; -} -export interface DecorateRequestOptions extends r.CoreOptions { - autoPaginate?: boolean; - autoPaginateVal?: boolean; - objectMode?: boolean; - maxRetries?: number; - uri: string; - interceptors_?: Interceptor[]; - shouldReturnStream?: boolean; -} -export interface ParsedHttpResponseBody { - body: ResponseBody; - err?: Error; -} -/** - * Custom error type for API errors. - * - * @param {object} errorBody - Error object. - */ -export declare class ApiError extends Error { - code?: number; - errors?: GoogleInnerError[]; - response?: r.Response; - constructor(errorMessage: string); - constructor(errorBody: GoogleErrorBody); - /** - * Pieces together an error message by combining all unique error messages - * returned from a single GoogleError - * - * @private - * - * @param {GoogleErrorBody} err The original error. - * @param {GoogleInnerError[]} [errors] Inner errors, if any. - * @returns {string} - */ - static createMultiErrorMessage(err: GoogleErrorBody, errors?: GoogleInnerError[]): string; -} -/** - * Custom error type for partial errors returned from the API. - * - * @param {object} b - Error object. - */ -export declare class PartialFailureError extends Error { - errors?: GoogleInnerError[]; - response?: r.Response; - constructor(b: GoogleErrorBody); -} -export interface BodyResponseCallback { - (err: Error | ApiError | null, body?: ResponseBody, res?: r.Response): void; -} -export interface RetryOptions { - retryDelayMultiplier?: number; - totalTimeout?: number; - maxRetryDelay?: number; - autoRetry?: boolean; - maxRetries?: number; - retryableErrorFn?: (err: ApiError) => boolean; -} -export interface MakeRequestConfig { - /** - * Automatically retry requests if the response is related to rate limits or - * certain intermittent server errors. We will exponentially backoff - * subsequent requests by default. (default: true) - */ - autoRetry?: boolean; - /** - * Maximum number of automatic retries attempted before returning the error. - * (default: 3) - */ - maxRetries?: number; - retries?: number; - retryOptions?: RetryOptions; - stream?: Duplexify; - shouldRetryFn?: (response?: r.Response) => boolean; -} -export declare class Util { - ApiError: typeof ApiError; - PartialFailureError: typeof PartialFailureError; - /** - * No op. - * - * @example - * function doSomething(callback) { - * callback = callback || noop; - * } - */ - noop(): void; - /** - * Uniformly process an API response. - * - * @param {*} err - Error value. - * @param {*} resp - Response value. - * @param {*} body - Body value. - * @param {function} callback - The callback function. - */ - handleResp(err: Error | null, resp?: r.Response | null, body?: ResponseBody, callback?: BodyResponseCallback): void; - /** - * Sniff an incoming HTTP response message for errors. - * - * @param {object} httpRespMessage - An incoming HTTP response message from `request`. - * @return {object} parsedHttpRespMessage - The parsed response. - * @param {?error} parsedHttpRespMessage.err - An error detected. - * @param {object} parsedHttpRespMessage.resp - The original response object. - */ - parseHttpRespMessage(httpRespMessage: r.Response): ParsedHttpRespMessage; - /** - * Parse the response body from an HTTP request. - * - * @param {object} body - The response body. - * @return {object} parsedHttpRespMessage - The parsed response. - * @param {?error} parsedHttpRespMessage.err - An error detected. - * @param {object} parsedHttpRespMessage.body - The original body value provided - * will try to be JSON.parse'd. If it's successful, the parsed value will - * be returned here, otherwise the original value and an error will be returned. - */ - parseHttpRespBody(body: ResponseBody): ParsedHttpResponseBody; - /** - * Take a Duplexify stream, fetch an authenticated connection header, and - * create an outgoing writable stream. - * - * @param {Duplexify} dup - Duplexify stream. - * @param {object} options - Configuration object. - * @param {module:common/connection} options.connection - A connection instance used to get a token with and send the request through. - * @param {object} options.metadata - Metadata to send at the head of the request. - * @param {object} options.request - Request object, in the format of a standard Node.js http.request() object. - * @param {string=} options.request.method - Default: "POST". - * @param {string=} options.request.qs.uploadType - Default: "multipart". - * @param {string=} options.streamContentType - Default: "application/octet-stream". - * @param {function} onComplete - Callback, executed after the writable Request stream has completed. - */ - makeWritableStream(dup: Duplexify, options: MakeWritableStreamOptions, onComplete?: Function): void; - /** - * Returns true if the API request should be retried, given the error that was - * given the first time the request was attempted. This is used for rate limit - * related errors as well as intermittent server errors. - * - * @param {error} err - The API error to check if it is appropriate to retry. - * @return {boolean} True if the API request should be retried, false otherwise. - */ - shouldRetryRequest(err?: ApiError): boolean; - /** - * Get a function for making authenticated requests. - * - * @param {object} config - Configuration object. - * @param {boolean=} config.autoRetry - Automatically retry requests if the - * response is related to rate limits or certain intermittent server - * errors. We will exponentially backoff subsequent requests by default. - * (default: true) - * @param {object=} config.credentials - Credentials object. - * @param {boolean=} config.customEndpoint - If true, just return the provided request options. Default: false. - * @param {string=} config.email - Account email address, required for PEM/P12 usage. - * @param {number=} config.maxRetries - Maximum number of automatic retries attempted before returning the error. (default: 3) - * @param {string=} config.keyFile - Path to a .json, .pem, or .p12 keyfile. - * @param {array} config.scopes - Array of scopes required for the API. - */ - makeAuthenticatedRequestFactory(config: MakeAuthenticatedRequestFactoryConfig): MakeAuthenticatedRequest; - /** - * Make a request through the `retryRequest` module with built-in error - * handling and exponential back off. - * - * @param {object} reqOpts - Request options in the format `request` expects. - * @param {object=} config - Configuration object. - * @param {boolean=} config.autoRetry - Automatically retry requests if the - * response is related to rate limits or certain intermittent server - * errors. We will exponentially backoff subsequent requests by default. - * (default: true) - * @param {number=} config.maxRetries - Maximum number of automatic retries - * attempted before returning the error. (default: 3) - * @param {object=} config.request - HTTP module for request calls. - * @param {function} callback - The callback function. - */ - makeRequest(reqOpts: DecorateRequestOptions, config: MakeRequestConfig, callback: BodyResponseCallback): void | Abortable; - /** - * Decorate the options about to be made in a request. - * - * @param {object} reqOpts - The options to be passed to `request`. - * @param {string} projectId - The project ID. - * @return {object} reqOpts - The decorated reqOpts. - */ - decorateRequest(reqOpts: DecorateRequestOptions, projectId: string): DecorateRequestOptions; - isCustomType(unknown: any, module: string): boolean; - /** - * Create a properly-formatted User-Agent string from a package.json file. - * - * @param {object} packageJson - A module's package.json file. - * @return {string} userAgent - The formatted User-Agent string. - */ - getUserAgentFromPackageJson(packageJson: PackageJson): string; - /** - * Given two parameters, figure out if this is either: - * - Just a callback function - * - An options object, and then a callback function - * @param optionsOrCallback An options object or callback. - * @param cb A potentially undefined callback. - */ - maybeOptionsOrCallback void>(optionsOrCallback?: T | C, cb?: C): [T, C]; -} -declare const util: Util; -export { util }; diff --git a/reverse_engineering/node_modules/@google-cloud/common/build/src/util.js b/reverse_engineering/node_modules/@google-cloud/common/build/src/util.js deleted file mode 100644 index 8f1e01d..0000000 --- a/reverse_engineering/node_modules/@google-cloud/common/build/src/util.js +++ /dev/null @@ -1,598 +0,0 @@ -"use strict"; -// Copyright 2014 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -/*! - * @module common/util - */ -const projectify_1 = require("@google-cloud/projectify"); -const ent = require("ent"); -const extend = require("extend"); -const google_auth_library_1 = require("google-auth-library"); -const retryRequest = require("retry-request"); -const stream_1 = require("stream"); -const teeny_request_1 = require("teeny-request"); -// eslint-disable-next-line @typescript-eslint/no-var-requires -const duplexify = require('duplexify'); -const requestDefaults = { - timeout: 60000, - gzip: true, - forever: true, - pool: { - maxSockets: Infinity, - }, -}; -/** - * Default behavior: Automatically retry retriable server errors. - * - * @const {boolean} - * @private - */ -const AUTO_RETRY_DEFAULT = true; -/** - * Default behavior: Only attempt to retry retriable errors 3 times. - * - * @const {number} - * @private - */ -const MAX_RETRY_DEFAULT = 3; -/** - * Custom error type for API errors. - * - * @param {object} errorBody - Error object. - */ -class ApiError extends Error { - constructor(errorBodyOrMessage) { - super(); - if (typeof errorBodyOrMessage !== 'object') { - this.message = errorBodyOrMessage || ''; - return; - } - const errorBody = errorBodyOrMessage; - this.code = errorBody.code; - this.errors = errorBody.errors; - this.response = errorBody.response; - try { - this.errors = JSON.parse(this.response.body).error.errors; - } - catch (e) { - this.errors = errorBody.errors; - } - this.message = ApiError.createMultiErrorMessage(errorBody, this.errors); - Error.captureStackTrace(this); - } - /** - * Pieces together an error message by combining all unique error messages - * returned from a single GoogleError - * - * @private - * - * @param {GoogleErrorBody} err The original error. - * @param {GoogleInnerError[]} [errors] Inner errors, if any. - * @returns {string} - */ - static createMultiErrorMessage(err, errors) { - const messages = new Set(); - if (err.message) { - messages.add(err.message); - } - if (errors && errors.length) { - errors.forEach(({ message }) => messages.add(message)); - } - else if (err.response && err.response.body) { - messages.add(ent.decode(err.response.body.toString())); - } - else if (!err.message) { - messages.add('A failure occurred during this request.'); - } - let messageArr = Array.from(messages); - if (messageArr.length > 1) { - messageArr = messageArr.map((message, i) => ` ${i + 1}. ${message}`); - messageArr.unshift('Multiple errors occurred during the request. Please see the `errors` array for complete details.\n'); - messageArr.push('\n'); - } - return messageArr.join('\n'); - } -} -exports.ApiError = ApiError; -/** - * Custom error type for partial errors returned from the API. - * - * @param {object} b - Error object. - */ -class PartialFailureError extends Error { - constructor(b) { - super(); - const errorObject = b; - this.errors = errorObject.errors; - this.name = 'PartialFailureError'; - this.response = errorObject.response; - this.message = ApiError.createMultiErrorMessage(errorObject, this.errors); - } -} -exports.PartialFailureError = PartialFailureError; -class Util { - constructor() { - this.ApiError = ApiError; - this.PartialFailureError = PartialFailureError; - } - /** - * No op. - * - * @example - * function doSomething(callback) { - * callback = callback || noop; - * } - */ - noop() { } - /** - * Uniformly process an API response. - * - * @param {*} err - Error value. - * @param {*} resp - Response value. - * @param {*} body - Body value. - * @param {function} callback - The callback function. - */ - handleResp(err, resp, body, callback) { - callback = callback || util.noop; - const parsedResp = extend(true, { err: err || null }, resp && util.parseHttpRespMessage(resp), body && util.parseHttpRespBody(body)); - // Assign the parsed body to resp.body, even if { json: false } was passed - // as a request option. - // We assume that nobody uses the previously unparsed value of resp.body. - if (!parsedResp.err && resp && typeof parsedResp.body === 'object') { - parsedResp.resp.body = parsedResp.body; - } - if (parsedResp.err && resp) { - parsedResp.err.response = resp; - } - callback(parsedResp.err, parsedResp.body, parsedResp.resp); - } - /** - * Sniff an incoming HTTP response message for errors. - * - * @param {object} httpRespMessage - An incoming HTTP response message from `request`. - * @return {object} parsedHttpRespMessage - The parsed response. - * @param {?error} parsedHttpRespMessage.err - An error detected. - * @param {object} parsedHttpRespMessage.resp - The original response object. - */ - parseHttpRespMessage(httpRespMessage) { - const parsedHttpRespMessage = { - resp: httpRespMessage, - }; - if (httpRespMessage.statusCode < 200 || httpRespMessage.statusCode > 299) { - // Unknown error. Format according to ApiError standard. - parsedHttpRespMessage.err = new ApiError({ - errors: new Array(), - code: httpRespMessage.statusCode, - message: httpRespMessage.statusMessage, - response: httpRespMessage, - }); - } - return parsedHttpRespMessage; - } - /** - * Parse the response body from an HTTP request. - * - * @param {object} body - The response body. - * @return {object} parsedHttpRespMessage - The parsed response. - * @param {?error} parsedHttpRespMessage.err - An error detected. - * @param {object} parsedHttpRespMessage.body - The original body value provided - * will try to be JSON.parse'd. If it's successful, the parsed value will - * be returned here, otherwise the original value and an error will be returned. - */ - parseHttpRespBody(body) { - const parsedHttpRespBody = { - body, - }; - if (typeof body === 'string') { - try { - parsedHttpRespBody.body = JSON.parse(body); - } - catch (err) { - parsedHttpRespBody.body = body; - } - } - if (parsedHttpRespBody.body && parsedHttpRespBody.body.error) { - // Error from JSON API. - parsedHttpRespBody.err = new ApiError(parsedHttpRespBody.body.error); - } - return parsedHttpRespBody; - } - /** - * Take a Duplexify stream, fetch an authenticated connection header, and - * create an outgoing writable stream. - * - * @param {Duplexify} dup - Duplexify stream. - * @param {object} options - Configuration object. - * @param {module:common/connection} options.connection - A connection instance used to get a token with and send the request through. - * @param {object} options.metadata - Metadata to send at the head of the request. - * @param {object} options.request - Request object, in the format of a standard Node.js http.request() object. - * @param {string=} options.request.method - Default: "POST". - * @param {string=} options.request.qs.uploadType - Default: "multipart". - * @param {string=} options.streamContentType - Default: "application/octet-stream". - * @param {function} onComplete - Callback, executed after the writable Request stream has completed. - */ - makeWritableStream(dup, options, onComplete) { - onComplete = onComplete || util.noop; - const writeStream = new ProgressStream(); - writeStream.on('progress', evt => dup.emit('progress', evt)); - dup.setWritable(writeStream); - const defaultReqOpts = { - method: 'POST', - qs: { - uploadType: 'multipart', - }, - timeout: 0, - maxRetries: 0, - }; - const metadata = options.metadata || {}; - const reqOpts = extend(true, defaultReqOpts, options.request, { - multipart: [ - { - 'Content-Type': 'application/json', - body: JSON.stringify(metadata), - }, - { - 'Content-Type': metadata.contentType || 'application/octet-stream', - body: writeStream, - }, - ], - }); - options.makeAuthenticatedRequest(reqOpts, { - onAuthenticated(err, authenticatedReqOpts) { - if (err) { - dup.destroy(err); - return; - } - const request = teeny_request_1.teenyRequest.defaults(requestDefaults); - request(authenticatedReqOpts, (err, resp, body) => { - util.handleResp(err, resp, body, (err, data) => { - if (err) { - dup.destroy(err); - return; - } - dup.emit('response', resp); - onComplete(data); - }); - }); - }, - }); - } - /** - * Returns true if the API request should be retried, given the error that was - * given the first time the request was attempted. This is used for rate limit - * related errors as well as intermittent server errors. - * - * @param {error} err - The API error to check if it is appropriate to retry. - * @return {boolean} True if the API request should be retried, false otherwise. - */ - shouldRetryRequest(err) { - if (err) { - if ([408, 429, 500, 502, 503].indexOf(err.code) !== -1) { - return true; - } - if (err.errors) { - for (const e of err.errors) { - const reason = e.reason; - if (reason === 'rateLimitExceeded') { - return true; - } - if (reason === 'userRateLimitExceeded') { - return true; - } - if (reason && reason.includes('EAI_AGAIN')) { - return true; - } - } - } - } - return false; - } - /** - * Get a function for making authenticated requests. - * - * @param {object} config - Configuration object. - * @param {boolean=} config.autoRetry - Automatically retry requests if the - * response is related to rate limits or certain intermittent server - * errors. We will exponentially backoff subsequent requests by default. - * (default: true) - * @param {object=} config.credentials - Credentials object. - * @param {boolean=} config.customEndpoint - If true, just return the provided request options. Default: false. - * @param {string=} config.email - Account email address, required for PEM/P12 usage. - * @param {number=} config.maxRetries - Maximum number of automatic retries attempted before returning the error. (default: 3) - * @param {string=} config.keyFile - Path to a .json, .pem, or .p12 keyfile. - * @param {array} config.scopes - Array of scopes required for the API. - */ - makeAuthenticatedRequestFactory(config) { - const googleAutoAuthConfig = extend({}, config); - if (googleAutoAuthConfig.projectId === '{{projectId}}') { - delete googleAutoAuthConfig.projectId; - } - const authClient = googleAutoAuthConfig.authClient || new google_auth_library_1.GoogleAuth(googleAutoAuthConfig); - function makeAuthenticatedRequest(reqOpts, optionsOrCallback) { - let stream; - let projectId; - const reqConfig = extend({}, config); - let activeRequest_; - if (!optionsOrCallback) { - stream = duplexify(); - reqConfig.stream = stream; - } - const options = typeof optionsOrCallback === 'object' ? optionsOrCallback : undefined; - const callback = typeof optionsOrCallback === 'function' ? optionsOrCallback : undefined; - const onAuthenticated = (err, authenticatedReqOpts) => { - const authLibraryError = err; - const autoAuthFailed = err && - err.message.indexOf('Could not load the default credentials') > -1; - if (autoAuthFailed) { - // Even though authentication failed, the API might not actually - // care. - authenticatedReqOpts = reqOpts; - } - if (!err || autoAuthFailed) { - try { - authenticatedReqOpts = util.decorateRequest(authenticatedReqOpts, projectId); - err = null; - } - catch (e) { - // A projectId was required, but we don't have one. - // Re-use the "Could not load the default credentials error" if - // auto auth failed. - err = err || e; - } - } - if (err) { - if (stream) { - stream.destroy(err); - } - else { - const fn = options && options.onAuthenticated - ? options.onAuthenticated - : callback; - fn(err); - } - return; - } - if (options && options.onAuthenticated) { - options.onAuthenticated(null, authenticatedReqOpts); - } - else { - activeRequest_ = util.makeRequest(authenticatedReqOpts, reqConfig, (apiResponseError, ...params) => { - if (apiResponseError && - apiResponseError.code === 401 && - authLibraryError) { - // Re-use the "Could not load the default credentials error" if - // the API request failed due to missing credentials. - apiResponseError = authLibraryError; - } - callback(apiResponseError, ...params); - }); - } - }; - Promise.all([ - config.projectId && config.projectId !== '{{projectId}}' - ? // The user provided a project ID. We don't need to check with the - // auth client, it could be incorrect. - new Promise(resolve => resolve(config.projectId)) - : authClient.getProjectId(), - reqConfig.customEndpoint - ? // Using a custom API override. Do not use `google-auth-library` for - // authentication. (ex: connecting to a local Datastore server) - new Promise(resolve => resolve(reqOpts)) - : authClient.authorizeRequest(reqOpts), - ]) - .then(([_projectId, authorizedReqOpts]) => { - projectId = _projectId; - onAuthenticated(null, authorizedReqOpts); - }) - .catch(onAuthenticated); - if (stream) { - return stream; - } - return { - abort() { - setImmediate(() => { - if (activeRequest_) { - activeRequest_.abort(); - activeRequest_ = null; - } - }); - }, - }; - } - const mar = makeAuthenticatedRequest; - mar.getCredentials = authClient.getCredentials.bind(authClient); - mar.authClient = authClient; - return mar; - } - /** - * Make a request through the `retryRequest` module with built-in error - * handling and exponential back off. - * - * @param {object} reqOpts - Request options in the format `request` expects. - * @param {object=} config - Configuration object. - * @param {boolean=} config.autoRetry - Automatically retry requests if the - * response is related to rate limits or certain intermittent server - * errors. We will exponentially backoff subsequent requests by default. - * (default: true) - * @param {number=} config.maxRetries - Maximum number of automatic retries - * attempted before returning the error. (default: 3) - * @param {object=} config.request - HTTP module for request calls. - * @param {function} callback - The callback function. - */ - makeRequest(reqOpts, config, callback) { - var _a, _b, _c, _d, _e, _f, _g; - let autoRetryValue = AUTO_RETRY_DEFAULT; - if (config.autoRetry !== undefined && - ((_a = config.retryOptions) === null || _a === void 0 ? void 0 : _a.autoRetry) !== undefined) { - throw new ApiError('autoRetry is deprecated. Use retryOptions.autoRetry instead.'); - } - else if (config.autoRetry !== undefined) { - autoRetryValue = config.autoRetry; - } - else if (((_b = config.retryOptions) === null || _b === void 0 ? void 0 : _b.autoRetry) !== undefined) { - autoRetryValue = config.retryOptions.autoRetry; - } - let maxRetryValue = MAX_RETRY_DEFAULT; - if (config.maxRetries && ((_c = config.retryOptions) === null || _c === void 0 ? void 0 : _c.maxRetries)) { - throw new ApiError('maxRetries is deprecated. Use retryOptions.maxRetries instead.'); - } - else if (config.maxRetries) { - maxRetryValue = config.maxRetries; - } - else if ((_d = config.retryOptions) === null || _d === void 0 ? void 0 : _d.maxRetries) { - maxRetryValue = config.retryOptions.maxRetries; - } - const options = { - request: teeny_request_1.teenyRequest.defaults(requestDefaults), - retries: autoRetryValue !== false ? maxRetryValue : 0, - shouldRetryFn(httpRespMessage) { - var _a, _b; - const err = util.parseHttpRespMessage(httpRespMessage).err; - if ((_a = config.retryOptions) === null || _a === void 0 ? void 0 : _a.retryableErrorFn) { - return err && ((_b = config.retryOptions) === null || _b === void 0 ? void 0 : _b.retryableErrorFn(err)); - } - return err && util.shouldRetryRequest(err); - }, - maxRetryDelay: (_e = config.retryOptions) === null || _e === void 0 ? void 0 : _e.maxRetryDelay, - retryDelayMultiplier: (_f = config.retryOptions) === null || _f === void 0 ? void 0 : _f.retryDelayMultiplier, - totalTimeout: (_g = config.retryOptions) === null || _g === void 0 ? void 0 : _g.totalTimeout, - }; - if (typeof reqOpts.maxRetries === 'number') { - options.retries = reqOpts.maxRetries; - } - if (!config.stream) { - return retryRequest(reqOpts, options, (err, response, body) => { - util.handleResp(err, response, body, callback); - }); - } - const dup = config.stream; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - let requestStream; - const isGetRequest = (reqOpts.method || 'GET').toUpperCase() === 'GET'; - if (isGetRequest) { - requestStream = retryRequest(reqOpts, options); - dup.setReadable(requestStream); - } - else { - // Streaming writable HTTP requests cannot be retried. - requestStream = options.request(reqOpts); - dup.setWritable(requestStream); - } - // Replay the Request events back to the stream. - requestStream - .on('error', dup.destroy.bind(dup)) - .on('response', dup.emit.bind(dup, 'response')) - .on('complete', dup.emit.bind(dup, 'complete')); - dup.abort = requestStream.abort; - return dup; - } - /** - * Decorate the options about to be made in a request. - * - * @param {object} reqOpts - The options to be passed to `request`. - * @param {string} projectId - The project ID. - * @return {object} reqOpts - The decorated reqOpts. - */ - decorateRequest(reqOpts, projectId) { - delete reqOpts.autoPaginate; - delete reqOpts.autoPaginateVal; - delete reqOpts.objectMode; - if (reqOpts.qs !== null && typeof reqOpts.qs === 'object') { - delete reqOpts.qs.autoPaginate; - delete reqOpts.qs.autoPaginateVal; - reqOpts.qs = projectify_1.replaceProjectIdToken(reqOpts.qs, projectId); - } - if (Array.isArray(reqOpts.multipart)) { - reqOpts.multipart = reqOpts.multipart.map(part => { - return projectify_1.replaceProjectIdToken(part, projectId); - }); - } - if (reqOpts.json !== null && typeof reqOpts.json === 'object') { - delete reqOpts.json.autoPaginate; - delete reqOpts.json.autoPaginateVal; - reqOpts.json = projectify_1.replaceProjectIdToken(reqOpts.json, projectId); - } - reqOpts.uri = projectify_1.replaceProjectIdToken(reqOpts.uri, projectId); - return reqOpts; - } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - isCustomType(unknown, module) { - function getConstructorName(obj) { - return obj.constructor && obj.constructor.name.toLowerCase(); - } - const moduleNameParts = module.split('/'); - const parentModuleName = moduleNameParts[0] && moduleNameParts[0].toLowerCase(); - const subModuleName = moduleNameParts[1] && moduleNameParts[1].toLowerCase(); - if (subModuleName && getConstructorName(unknown) !== subModuleName) { - return false; - } - let walkingModule = unknown; - // eslint-disable-next-line no-constant-condition - while (true) { - if (getConstructorName(walkingModule) === parentModuleName) { - return true; - } - walkingModule = walkingModule.parent; - if (!walkingModule) { - return false; - } - } - } - /** - * Create a properly-formatted User-Agent string from a package.json file. - * - * @param {object} packageJson - A module's package.json file. - * @return {string} userAgent - The formatted User-Agent string. - */ - getUserAgentFromPackageJson(packageJson) { - const hyphenatedPackageName = packageJson.name - .replace('@google-cloud', 'gcloud-node') // For legacy purposes. - .replace('/', '-'); // For UA spec-compliance purposes. - return hyphenatedPackageName + '/' + packageJson.version; - } - /** - * Given two parameters, figure out if this is either: - * - Just a callback function - * - An options object, and then a callback function - * @param optionsOrCallback An options object or callback. - * @param cb A potentially undefined callback. - */ - maybeOptionsOrCallback(optionsOrCallback, cb) { - return typeof optionsOrCallback === 'function' - ? [{}, optionsOrCallback] - : [optionsOrCallback, cb]; - } -} -exports.Util = Util; -/** - * Basic Passthrough Stream that records the number of bytes read - * every time the cursor is moved. - */ -class ProgressStream extends stream_1.Transform { - constructor() { - super(...arguments); - this.bytesRead = 0; - } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - _transform(chunk, encoding, callback) { - this.bytesRead += chunk.length; - this.emit('progress', { bytesWritten: this.bytesRead, contentLength: '*' }); - this.push(chunk); - callback(); - } -} -const util = new Util(); -exports.util = util; -//# sourceMappingURL=util.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/@google-cloud/common/package.json b/reverse_engineering/node_modules/@google-cloud/common/package.json deleted file mode 100644 index 9009841..0000000 --- a/reverse_engineering/node_modules/@google-cloud/common/package.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "_from": "@google-cloud/common@^3.1.0", - "_id": "@google-cloud/common@3.7.1", - "_inBundle": false, - "_integrity": "sha512-BJfcV5BShbunYcn5HniebXLVp2Y6fpuesNegyar5CG8H2AKYHlKxnVID+FSwy92WAW4N2lpGdvxRsmiAn8Fc3w==", - "_location": "/@google-cloud/common", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "@google-cloud/common@^3.1.0", - "name": "@google-cloud/common", - "escapedName": "@google-cloud%2fcommon", - "scope": "@google-cloud", - "rawSpec": "^3.1.0", - "saveSpec": null, - "fetchSpec": "^3.1.0" - }, - "_requiredBy": [ - "/@google-cloud/bigquery" - ], - "_resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-3.7.1.tgz", - "_shasum": "e6a4b512ea0c72435b853831565bfba6a8dff2ac", - "_spec": "@google-cloud/common@^3.1.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/@google-cloud/bigquery", - "author": { - "name": "Google Inc." - }, - "bugs": { - "url": "https://github.com/googleapis/nodejs-common/issues" - }, - "bundleDependencies": false, - "dependencies": { - "@google-cloud/projectify": "^2.0.0", - "@google-cloud/promisify": "^2.0.0", - "arrify": "^2.0.1", - "duplexify": "^4.1.1", - "ent": "^2.2.0", - "extend": "^3.0.2", - "google-auth-library": "^7.0.2", - "retry-request": "^4.2.2", - "teeny-request": "^7.0.0" - }, - "deprecated": false, - "description": "Common components for Cloud APIs Node.js Client Libraries", - "devDependencies": { - "@compodoc/compodoc": "^1.1.11", - "@types/ent": "^2.2.1", - "@types/extend": "^3.0.1", - "@types/mocha": "^8.0.0", - "@types/mv": "^2.1.0", - "@types/ncp": "^2.0.3", - "@types/node": "^14.0.0", - "@types/proxyquire": "^1.3.28", - "@types/request": "^2.48.4", - "@types/sinon": "^10.0.0", - "@types/tmp": "0.2.1", - "c8": "^7.1.0", - "codecov": "^3.6.5", - "gts": "^2.0.0", - "linkinator": "^2.0.4", - "mocha": "^8.0.0", - "mv": "^2.1.1", - "ncp": "^2.0.0", - "nock": "^13.0.0", - "proxyquire": "^2.1.3", - "sinon": "^11.0.0", - "tmp": "0.2.1", - "typescript": "~3.8.3" - }, - "engines": { - "node": ">=10" - }, - "files": [ - "build/src", - "!build/src/**/*.map" - ], - "homepage": "https://github.com/googleapis/nodejs-common#readme", - "license": "Apache-2.0", - "main": "./build/src/index.js", - "name": "@google-cloud/common", - "repository": { - "type": "git", - "url": "git+https://github.com/googleapis/nodejs-common.git" - }, - "scripts": { - "clean": "gts clean", - "compile": "tsc -p .", - "docs": "compodoc src/", - "docs-test": "linkinator docs", - "fix": "gts fix", - "lint": "gts check", - "precompile": "gts clean", - "predocs-test": "npm run docs", - "prelint": "cd samples; npm link ../; npm install", - "prepare": "npm run compile", - "presystem-test": "npm run compile", - "pretest": "npm run compile", - "samples-test": "cd samples/ && npm link ../ && npm test && cd ../", - "system-test": "mocha build/system-test", - "test": "c8 mocha build/test" - }, - "types": "./build/src/index.d.ts", - "version": "3.7.1" -} diff --git a/reverse_engineering/node_modules/@google-cloud/paginator/CHANGELOG.md b/reverse_engineering/node_modules/@google-cloud/paginator/CHANGELOG.md deleted file mode 100644 index eff5ef5..0000000 --- a/reverse_engineering/node_modules/@google-cloud/paginator/CHANGELOG.md +++ /dev/null @@ -1,205 +0,0 @@ -# Changelog - -[npm history][1] - -[1]: https://www.npmjs.com/package/nodejs-paginator?activeTab=versions - -### [3.0.5](https://www.github.com/googleapis/nodejs-paginator/compare/v3.0.4...v3.0.5) (2020-09-02) - - -### Bug Fixes - -* add configs by running synthtool ([#241](https://www.github.com/googleapis/nodejs-paginator/issues/241)) ([643593a](https://www.github.com/googleapis/nodejs-paginator/commit/643593ae9ffb8febff69a7bdae19239f5bcb1266)) - -### [3.0.4](https://www.github.com/googleapis/nodejs-paginator/compare/v3.0.3...v3.0.4) (2020-08-06) - - -### Bug Fixes - -* destroy ResourceStream with pre-flight error ([#236](https://www.github.com/googleapis/nodejs-paginator/issues/236)) ([d57beb4](https://www.github.com/googleapis/nodejs-paginator/commit/d57beb424d875a7bf502d458cc208f1bbe47a42a)) - -### [3.0.3](https://www.github.com/googleapis/nodejs-paginator/compare/v3.0.2...v3.0.3) (2020-07-24) - - -### Bug Fixes - -* move gitattributes files to node templates ([#234](https://www.github.com/googleapis/nodejs-paginator/issues/234)) ([30e881c](https://www.github.com/googleapis/nodejs-paginator/commit/30e881ce7415749b93b6b7e4e71745ea3fb248b6)) - -### [3.0.2](https://www.github.com/googleapis/nodejs-paginator/compare/v3.0.1...v3.0.2) (2020-07-06) - - -### Bug Fixes - -* update node issue template ([#221](https://www.github.com/googleapis/nodejs-paginator/issues/221)) ([088153c](https://www.github.com/googleapis/nodejs-paginator/commit/088153c4fca6d53e2e5ef4bb42365ce5493b913d)) - -### [3.0.1](https://www.github.com/googleapis/nodejs-paginator/compare/v3.0.0...v3.0.1) (2020-05-20) - - -### Bug Fixes - -* apache license URL ([#468](https://www.github.com/googleapis/nodejs-paginator/issues/468)) ([#211](https://www.github.com/googleapis/nodejs-paginator/issues/211)) ([f343b7f](https://www.github.com/googleapis/nodejs-paginator/commit/f343b7f7e184fd1b453f20ac1463d17520aac7ad)) - -## [3.0.0](https://www.github.com/googleapis/nodejs-paginator/compare/v2.0.3...v3.0.0) (2020-03-25) - - -### ⚠ BREAKING CHANGES - -* **dep:** upgrade gts 2.0.0 (#194) -* **deps:** deprecated node 8 to 10; upgrade typescript - -### Miscellaneous Chores - -* **dep:** upgrade gts 2.0.0 ([#194](https://www.github.com/googleapis/nodejs-paginator/issues/194)) ([4eaf9be](https://www.github.com/googleapis/nodejs-paginator/commit/4eaf9bed1fcfd0f10e877ff15c1d0e968e3356c8)) -* **deps:** deprecated node 8 to 10; upgrade typescript ([f6434ab](https://www.github.com/googleapis/nodejs-paginator/commit/f6434ab9cacb6ab804c070f19c38b6072ca326b5)) - -### [2.0.3](https://www.github.com/googleapis/nodejs-paginator/compare/v2.0.2...v2.0.3) (2019-12-05) - - -### Bug Fixes - -* **deps:** pin TypeScript below 3.7.0 ([e06e1b0](https://www.github.com/googleapis/nodejs-paginator/commit/e06e1b0a2e2bb1cf56fc806c1703b8b5e468b954)) - -### [2.0.2](https://www.github.com/googleapis/nodejs-paginator/compare/v2.0.1...v2.0.2) (2019-11-13) - - -### Bug Fixes - -* **docs:** add jsdoc-region-tag plugin ([#155](https://www.github.com/googleapis/nodejs-paginator/issues/155)) ([b983799](https://www.github.com/googleapis/nodejs-paginator/commit/b98379905848fd179c6268aff3e1cfaf2bf76663)) - -### [2.0.1](https://www.github.com/googleapis/nodejs-paginator/compare/v2.0.0...v2.0.1) (2019-08-25) - - -### Bug Fixes - -* **deps:** use the latest extend ([#141](https://www.github.com/googleapis/nodejs-paginator/issues/141)) ([61b383e](https://www.github.com/googleapis/nodejs-paginator/commit/61b383e)) - -## [2.0.0](https://www.github.com/googleapis/nodejs-paginator/compare/v1.0.2...v2.0.0) (2019-07-12) - - -### ⚠ BREAKING CHANGES - -* rewrite streaming logic (#136) - -### Code Refactoring - -* rewrite streaming logic ([#136](https://www.github.com/googleapis/nodejs-paginator/issues/136)) ([641d82d](https://www.github.com/googleapis/nodejs-paginator/commit/641d82d)) - -### [1.0.2](https://www.github.com/googleapis/nodejs-paginator/compare/v1.0.1...v1.0.2) (2019-06-26) - - -### Bug Fixes - -* **docs:** link to reference docs section on googleapis.dev ([#132](https://www.github.com/googleapis/nodejs-paginator/issues/132)) ([be231be](https://www.github.com/googleapis/nodejs-paginator/commit/be231be)) - -### [1.0.1](https://www.github.com/googleapis/nodejs-paginator/compare/v1.0.0...v1.0.1) (2019-06-14) - - -### Bug Fixes - -* **docs:** move to new client docs URL ([#129](https://www.github.com/googleapis/nodejs-paginator/issues/129)) ([689f483](https://www.github.com/googleapis/nodejs-paginator/commit/689f483)) - -## [1.0.0](https://www.github.com/googleapis/nodejs-paginator/compare/v0.2.0...v1.0.0) (2019-05-03) - - -### Bug Fixes - -* **deps:** update dependency arrify to v2 ([#109](https://www.github.com/googleapis/nodejs-paginator/issues/109)) ([9f06c83](https://www.github.com/googleapis/nodejs-paginator/commit/9f06c83)) - - -### Build System - -* upgrade engines field to >=8.10.0 ([#115](https://www.github.com/googleapis/nodejs-paginator/issues/115)) ([0921076](https://www.github.com/googleapis/nodejs-paginator/commit/0921076)) - - -### BREAKING CHANGES - -* upgrade engines field to >=8.10.0 (#115) - -## v0.2.0 - -03-08-2019 12:15 PST - -### New Features -- feat: handle promise based functions ([#91](https://github.com/googleapis/nodejs-paginator/pull/91)) -- refactor(ts): create generic for object streams ([#101](https://github.com/googleapis/nodejs-paginator/pull/101)) - -### Dependencies -- chore(deps): update dependency through2 to v3 ([#53](https://github.com/googleapis/nodejs-paginator/pull/53)) -- chore(deps): update dependency @types/is to v0.0.21 ([#55](https://github.com/googleapis/nodejs-paginator/pull/55)) -- chore(deps): update dependency gts to ^0.9.0 ([#57](https://github.com/googleapis/nodejs-paginator/pull/57)) -- fix: Pin @types/sinon to last compatible version ([#61](https://github.com/googleapis/nodejs-paginator/pull/61)) -- refactor: trim a few dependencies ([#60](https://github.com/googleapis/nodejs-paginator/pull/60)) -- chore(deps): update dependency @types/sinon to v5.0.7 ([#62](https://github.com/googleapis/nodejs-paginator/pull/62)) -- chore(deps): update dependency @types/sinon to v7 ([#81](https://github.com/googleapis/nodejs-paginator/pull/81)) -- chore(deps): update dependency mocha to v6 - -### Documentation -- docs: add lint/fix example to contributing guide ([#85](https://github.com/googleapis/nodejs-paginator/pull/85)) -- chore: move CONTRIBUTING.md to root ([#87](https://github.com/googleapis/nodejs-paginator/pull/87)) -- docs: update links in contrib guide ([#94](https://github.com/googleapis/nodejs-paginator/pull/94)) -- docs: update contributing path in README ([#88](https://github.com/googleapis/nodejs-paginator/pull/88)) - -### Internal / Testing Changes -- chore: include build in eslintignore ([#49](https://github.com/googleapis/nodejs-paginator/pull/49)) -- chore: update CircleCI config ([#52](https://github.com/googleapis/nodejs-paginator/pull/52)) -- chore: use latest npm on Windows ([#54](https://github.com/googleapis/nodejs-paginator/pull/54)) -- chore: update eslintignore config ([#56](https://github.com/googleapis/nodejs-paginator/pull/56)) -- chore: add synth.metadata -- fix(build): fix system key decryption ([#64](https://github.com/googleapis/nodejs-paginator/pull/64)) -- chore: update license file ([#68](https://github.com/googleapis/nodejs-paginator/pull/68)) -- chore(build): update prettier config ([#69](https://github.com/googleapis/nodejs-paginator/pull/69)) -- chore: nyc ignore build/test by default ([#71](https://github.com/googleapis/nodejs-paginator/pull/71)) -- chore: always nyc report before calling codecov ([#72](https://github.com/googleapis/nodejs-paginator/pull/72)) -- build: add Kokoro configs for autorelease ([#75](https://github.com/googleapis/nodejs-paginator/pull/75)) -- fix(build): fix Kokoro release script ([#76](https://github.com/googleapis/nodejs-paginator/pull/76)) -- chore: fix publish.sh permission +x ([#77](https://github.com/googleapis/nodejs-paginator/pull/77)) -- chore: update nyc and eslint configs ([#79](https://github.com/googleapis/nodejs-paginator/pull/79)) -- chore(build): inject yoshi automation key ([#80](https://github.com/googleapis/nodejs-paginator/pull/80)) -- build: check broken links in generated docs ([#82](https://github.com/googleapis/nodejs-paginator/pull/82)) -- build: ignore googleapis.com in doc link check ([#84](https://github.com/googleapis/nodejs-paginator/pull/84)) -- build: test using @grpc/grpc-js in CI ([#89](https://github.com/googleapis/nodejs-paginator/pull/89)) -- build: create docs test npm scripts ([#90](https://github.com/googleapis/nodejs-paginator/pull/90)) -- build: use linkinator for docs test ([#93](https://github.com/googleapis/nodejs-paginator/pull/93)) -- build: update release configuration -- build: fix types for sinon ([#98](https://github.com/googleapis/nodejs-paginator/pull/98)) -- build: use node10 to run samples-test, system-test etc ([#97](https://github.com/googleapis/nodejs-paginator/pull/97)) -- build: Add docuploader credentials to node publish jobs ([#99](https://github.com/googleapis/nodejs-paginator/pull/99)) - -## v0.1.2 - -### Bug fixes -- fix: call limiter.makeRequest() instead of original method ([#43](https://github.com/googleapis/nodejs-paginator/pull/43)) - -### Internal / Testing Changes -- chore: update issue templates ([#42](https://github.com/googleapis/nodejs-paginator/pull/42)) -- chore: remove old issue template ([#40](https://github.com/googleapis/nodejs-paginator/pull/40)) -- build: run tests on node11 ([#39](https://github.com/googleapis/nodejs-paginator/pull/39)) -- chores(build): run codecov on continuous builds ([#36](https://github.com/googleapis/nodejs-paginator/pull/36)) -- chores(build): do not collect sponge.xml from windows builds ([#37](https://github.com/googleapis/nodejs-paginator/pull/37)) -- chore: update new issue template ([#35](https://github.com/googleapis/nodejs-paginator/pull/35)) -- chore(deps): update dependency sinon to v7 ([#31](https://github.com/googleapis/nodejs-paginator/pull/31)) -- build: fix codecov uploading on Kokoro ([#32](https://github.com/googleapis/nodejs-paginator/pull/32)) -- Update kokoro config ([#29](https://github.com/googleapis/nodejs-paginator/pull/29)) -- Update CI config ([#27](https://github.com/googleapis/nodejs-paginator/pull/27)) -- Don't publish sourcemaps ([#25](https://github.com/googleapis/nodejs-paginator/pull/25)) -- build: prevent system/sample-test from leaking credentials -- Update kokoro config ([#23](https://github.com/googleapis/nodejs-paginator/pull/23)) -- test: remove appveyor config ([#22](https://github.com/googleapis/nodejs-paginator/pull/22)) -- Update CI config ([#21](https://github.com/googleapis/nodejs-paginator/pull/21)) -- Enable prefer-const in the eslint config ([#20](https://github.com/googleapis/nodejs-paginator/pull/20)) -- Enable no-var in eslint ([#19](https://github.com/googleapis/nodejs-paginator/pull/19)) -- Update CI config ([#18](https://github.com/googleapis/nodejs-paginator/pull/18)) - -## v0.1.1 - -### Internal / Testing Changes -- Add synth script and update CI config (#14) -- chore(deps): update dependency nyc to v13 (#12) -- chore: ignore package-lock.json (#11) -- chore(deps): lock file maintenance (#10) -- chore: update renovate config (#9) -- remove that whitespace (#8) -- chore(deps): lock file maintenance (#7) -- chore(deps): update dependency typescript to v3 (#6) -- chore: assert.deelEqual => assert.deepStrictEqual (#5) -- chore: move mocha options to mocha.opts (#4) diff --git a/reverse_engineering/node_modules/@google-cloud/paginator/LICENSE b/reverse_engineering/node_modules/@google-cloud/paginator/LICENSE deleted file mode 100644 index d645695..0000000 --- a/reverse_engineering/node_modules/@google-cloud/paginator/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/reverse_engineering/node_modules/@google-cloud/paginator/README.md b/reverse_engineering/node_modules/@google-cloud/paginator/README.md deleted file mode 100644 index 4dc9e95..0000000 --- a/reverse_engineering/node_modules/@google-cloud/paginator/README.md +++ /dev/null @@ -1,136 +0,0 @@ -[//]: # "This README.md file is auto-generated, all changes to this file will be lost." -[//]: # "To regenerate it, use `python -m synthtool`." -Google Cloud Platform logo - -# [Google Cloud Common Paginator: Node.js Client](https://github.com/googleapis/nodejs-paginator) - -[![release level](https://img.shields.io/badge/release%20level-general%20availability%20%28GA%29-brightgreen.svg?style=flat)](https://cloud.google.com/terms/launch-stages) -[![npm version](https://img.shields.io/npm/v/@google-cloud/paginator.svg)](https://www.npmjs.org/package/@google-cloud/paginator) -[![codecov](https://img.shields.io/codecov/c/github/googleapis/nodejs-paginator/master.svg?style=flat)](https://codecov.io/gh/googleapis/nodejs-paginator) - - - - -A result paging utility used by Google node.js modules - - -A comprehensive list of changes in each version may be found in -[the CHANGELOG](https://github.com/googleapis/nodejs-paginator/blob/master/CHANGELOG.md). - -* [Google Cloud Common Paginator Node.js Client API Reference][client-docs] - -* [github.com/googleapis/nodejs-paginator](https://github.com/googleapis/nodejs-paginator) - -Read more about the client libraries for Cloud APIs, including the older -Google APIs Client Libraries, in [Client Libraries Explained][explained]. - -[explained]: https://cloud.google.com/apis/docs/client-libraries-explained - -**Table of contents:** - - -* [Quickstart](#quickstart) - - * [Installing the client library](#installing-the-client-library) - * [Using the client library](#using-the-client-library) -* [Samples](#samples) -* [Versioning](#versioning) -* [Contributing](#contributing) -* [License](#license) - -## Quickstart - -### Installing the client library - -```bash -npm install @google-cloud/paginator -``` - - -### Using the client library - -```javascript -const {paginator} = require('@google-cloud/paginator'); -console.log(paginator); - -``` - - - -## Samples - -Samples are in the [`samples/`](https://github.com/googleapis/nodejs-paginator/tree/master/samples) directory. The samples' `README.md` -has instructions for running the samples. - -| Sample | Source Code | Try it | -| --------------------------- | --------------------------------- | ------ | -| Quickstart | [source code](https://github.com/googleapis/nodejs-paginator/blob/master/samples/quickstart.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-paginator&page=editor&open_in_editor=samples/quickstart.js,samples/README.md) | - - - -The [Google Cloud Common Paginator Node.js Client API Reference][client-docs] documentation -also contains samples. - -## Supported Node.js Versions - -Our client libraries follow the [Node.js release schedule](https://nodejs.org/en/about/releases/). -Libraries are compatible with all current _active_ and _maintenance_ versions of -Node.js. - -Client libraries targetting some end-of-life versions of Node.js are available, and -can be installed via npm [dist-tags](https://docs.npmjs.com/cli/dist-tag). -The dist-tags follow the naming convention `legacy-(version)`. - -_Legacy Node.js versions are supported as a best effort:_ - -* Legacy versions will not be tested in continuous integration. -* Some security patches may not be able to be backported. -* Dependencies will not be kept up-to-date, and features will not be backported. - -#### Legacy tags available - -* `legacy-8`: install client libraries from this dist-tag for versions - compatible with Node.js 8. - -## Versioning - -This library follows [Semantic Versioning](http://semver.org/). - - -This library is considered to be **General Availability (GA)**. This means it -is stable; the code surface will not change in backwards-incompatible ways -unless absolutely necessary (e.g. because of critical security issues) or with -an extensive deprecation period. Issues and requests against **GA** libraries -are addressed with the highest priority. - - - - - -More Information: [Google Cloud Platform Launch Stages][launch_stages] - -[launch_stages]: https://cloud.google.com/terms/launch-stages - -## Contributing - -Contributions welcome! See the [Contributing Guide](https://github.com/googleapis/nodejs-paginator/blob/master/CONTRIBUTING.md). - -Please note that this `README.md`, the `samples/README.md`, -and a variety of configuration files in this repository (including `.nycrc` and `tsconfig.json`) -are generated from a central template. To edit one of these files, make an edit -to its template in this -[directory](https://github.com/googleapis/synthtool/tree/master/synthtool/gcp/templates/node_library). - -## License - -Apache Version 2.0 - -See [LICENSE](https://github.com/googleapis/nodejs-paginator/blob/master/LICENSE) - -[client-docs]: https://googleapis.dev/nodejs/paginator/latest - -[shell_img]: https://gstatic.com/cloudssh/images/open-btn.png -[projects]: https://console.cloud.google.com/project -[billing]: https://support.google.com/cloud/answer/6293499#enable-billing - -[auth]: https://cloud.google.com/docs/authentication/getting-started diff --git a/reverse_engineering/node_modules/@google-cloud/paginator/build/src/index.d.ts b/reverse_engineering/node_modules/@google-cloud/paginator/build/src/index.d.ts deleted file mode 100644 index 7a090bd..0000000 --- a/reverse_engineering/node_modules/@google-cloud/paginator/build/src/index.d.ts +++ /dev/null @@ -1,131 +0,0 @@ -/*! - * Copyright 2015 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/// -import { TransformOptions } from 'stream'; -import { ResourceStream } from './resource-stream'; -export interface ParsedArguments extends TransformOptions { - /** - * Query object. This is most commonly an object, but to make the API more - * simple, it can also be a string in some places. - */ - query?: ParsedArguments; - /** - * Callback function. - */ - callback?: Function; - /** - * Auto-pagination enabled. - */ - autoPaginate?: boolean; - /** - * Maximum API calls to make. - */ - maxApiCalls?: number; - /** - * Maximum results to return. - */ - maxResults?: number; - pageSize?: number; - streamOptions?: ParsedArguments; -} -/*! Developer Documentation - * - * paginator is used to auto-paginate `nextQuery` methods as well as - * streamifying them. - * - * Before: - * - * search.query('done=true', function(err, results, nextQuery) { - * search.query(nextQuery, function(err, results, nextQuery) {}); - * }); - * - * After: - * - * search.query('done=true', function(err, results) {}); - * - * Methods to extend should be written to accept callbacks and return a - * `nextQuery`. - */ -export declare class Paginator { - /** - * Cache the original method, then overwrite it on the Class's prototype. - * - * @param {function} Class - The parent class of the methods to extend. - * @param {string|string[]} methodNames - Name(s) of the methods to extend. - */ - extend(Class: Function, methodNames: string | string[]): void; - /** - * Wraps paginated API calls in a readable object stream. - * - * This method simply calls the nextQuery recursively, emitting results to a - * stream. The stream ends when `nextQuery` is null. - * - * `maxResults` will act as a cap for how many results are fetched and emitted - * to the stream. - * - * @param {string} methodName - Name of the method to streamify. - * @return {function} - Wrapped function. - */ - streamify(methodName: string): (this: { - [index: string]: Function; - }, ...args: any[]) => ResourceStream; - /** - * Parse a pseudo-array `arguments` for a query and callback. - * - * @param {array} args - The original `arguments` pseduo-array that the original - * method received. - */ - parseArguments_(args: any[]): ParsedArguments; - /** - * This simply checks to see if `autoPaginate` is set or not, if it's true - * then we buffer all results, otherwise simply call the original method. - * - * @param {array} parsedArguments - Parsed arguments from the original method - * call. - * @param {object=|string=} parsedArguments.query - Query object. This is most - * commonly an object, but to make the API more simple, it can also be a - * string in some places. - * @param {function=} parsedArguments.callback - Callback function. - * @param {boolean} parsedArguments.autoPaginate - Auto-pagination enabled. - * @param {boolean} parsedArguments.maxApiCalls - Maximum API calls to make. - * @param {number} parsedArguments.maxResults - Maximum results to return. - * @param {function} originalMethod - The cached method that accepts a callback - * and returns `nextQuery` to receive more results. - */ - run_(parsedArguments: ParsedArguments, originalMethod: Function): any; - /** - * This method simply calls the nextQuery recursively, emitting results to a - * stream. The stream ends when `nextQuery` is null. - * - * `maxResults` will act as a cap for how many results are fetched and emitted - * to the stream. - * - * @param {object=|string=} parsedArguments.query - Query object. This is most - * commonly an object, but to make the API more simple, it can also be a - * string in some places. - * @param {function=} parsedArguments.callback - Callback function. - * @param {boolean} parsedArguments.autoPaginate - Auto-pagination enabled. - * @param {boolean} parsedArguments.maxApiCalls - Maximum API calls to make. - * @param {number} parsedArguments.maxResults - Maximum results to return. - * @param {function} originalMethod - The cached method that accepts a callback - * and returns `nextQuery` to receive more results. - * @return {stream} - Readable object stream. - */ - runAsStream_(parsedArguments: ParsedArguments, originalMethod: Function): ResourceStream; -} -declare const paginator: Paginator; -export { paginator }; -export { ResourceStream }; diff --git a/reverse_engineering/node_modules/@google-cloud/paginator/build/src/index.js b/reverse_engineering/node_modules/@google-cloud/paginator/build/src/index.js deleted file mode 100644 index 45f47e4..0000000 --- a/reverse_engineering/node_modules/@google-cloud/paginator/build/src/index.js +++ /dev/null @@ -1,206 +0,0 @@ -"use strict"; -/*! - * Copyright 2015 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ResourceStream = exports.paginator = exports.Paginator = void 0; -/*! - * @module common/paginator - */ -const arrify = require("arrify"); -const extend = require("extend"); -const resource_stream_1 = require("./resource-stream"); -Object.defineProperty(exports, "ResourceStream", { enumerable: true, get: function () { return resource_stream_1.ResourceStream; } }); -/*! Developer Documentation - * - * paginator is used to auto-paginate `nextQuery` methods as well as - * streamifying them. - * - * Before: - * - * search.query('done=true', function(err, results, nextQuery) { - * search.query(nextQuery, function(err, results, nextQuery) {}); - * }); - * - * After: - * - * search.query('done=true', function(err, results) {}); - * - * Methods to extend should be written to accept callbacks and return a - * `nextQuery`. - */ -class Paginator { - /** - * Cache the original method, then overwrite it on the Class's prototype. - * - * @param {function} Class - The parent class of the methods to extend. - * @param {string|string[]} methodNames - Name(s) of the methods to extend. - */ - // tslint:disable-next-line:variable-name - extend(Class, methodNames) { - methodNames = arrify(methodNames); - methodNames.forEach(methodName => { - const originalMethod = Class.prototype[methodName]; - // map the original method to a private member - Class.prototype[methodName + '_'] = originalMethod; - // overwrite the original to auto-paginate - /* eslint-disable @typescript-eslint/no-explicit-any */ - Class.prototype[methodName] = function (...args) { - const parsedArguments = paginator.parseArguments_(args); - return paginator.run_(parsedArguments, originalMethod.bind(this)); - }; - }); - } - /** - * Wraps paginated API calls in a readable object stream. - * - * This method simply calls the nextQuery recursively, emitting results to a - * stream. The stream ends when `nextQuery` is null. - * - * `maxResults` will act as a cap for how many results are fetched and emitted - * to the stream. - * - * @param {string} methodName - Name of the method to streamify. - * @return {function} - Wrapped function. - */ - /* eslint-disable @typescript-eslint/no-explicit-any */ - streamify(methodName) { - return function ( - /* eslint-disable @typescript-eslint/no-explicit-any */ - ...args) { - const parsedArguments = paginator.parseArguments_(args); - const originalMethod = this[methodName + '_'] || this[methodName]; - return paginator.runAsStream_(parsedArguments, originalMethod.bind(this)); - }; - } - /** - * Parse a pseudo-array `arguments` for a query and callback. - * - * @param {array} args - The original `arguments` pseduo-array that the original - * method received. - */ - /* eslint-disable @typescript-eslint/no-explicit-any */ - parseArguments_(args) { - let query; - let autoPaginate = true; - let maxApiCalls = -1; - let maxResults = -1; - let callback; - const firstArgument = args[0]; - const lastArgument = args[args.length - 1]; - if (typeof firstArgument === 'function') { - callback = firstArgument; - } - else { - query = firstArgument; - } - if (typeof lastArgument === 'function') { - callback = lastArgument; - } - if (typeof query === 'object') { - query = extend(true, {}, query); - // Check if the user only asked for a certain amount of results. - if (query.maxResults && typeof query.maxResults === 'number') { - // `maxResults` is used API-wide. - maxResults = query.maxResults; - } - else if (typeof query.pageSize === 'number') { - // `pageSize` is Pub/Sub's `maxResults`. - maxResults = query.pageSize; - } - if (query.maxApiCalls && typeof query.maxApiCalls === 'number') { - maxApiCalls = query.maxApiCalls; - delete query.maxApiCalls; - } - // maxResults is the user specified limit. - if (maxResults !== -1 || query.autoPaginate === false) { - autoPaginate = false; - } - } - const parsedArguments = { - query: query || {}, - autoPaginate, - maxApiCalls, - maxResults, - callback, - }; - parsedArguments.streamOptions = extend(true, {}, parsedArguments.query); - delete parsedArguments.streamOptions.autoPaginate; - delete parsedArguments.streamOptions.maxResults; - delete parsedArguments.streamOptions.pageSize; - return parsedArguments; - } - /** - * This simply checks to see if `autoPaginate` is set or not, if it's true - * then we buffer all results, otherwise simply call the original method. - * - * @param {array} parsedArguments - Parsed arguments from the original method - * call. - * @param {object=|string=} parsedArguments.query - Query object. This is most - * commonly an object, but to make the API more simple, it can also be a - * string in some places. - * @param {function=} parsedArguments.callback - Callback function. - * @param {boolean} parsedArguments.autoPaginate - Auto-pagination enabled. - * @param {boolean} parsedArguments.maxApiCalls - Maximum API calls to make. - * @param {number} parsedArguments.maxResults - Maximum results to return. - * @param {function} originalMethod - The cached method that accepts a callback - * and returns `nextQuery` to receive more results. - */ - run_(parsedArguments, originalMethod) { - const query = parsedArguments.query; - const callback = parsedArguments.callback; - if (!parsedArguments.autoPaginate) { - return originalMethod(query, callback); - } - const results = new Array(); - const promise = new Promise((resolve, reject) => { - paginator - .runAsStream_(parsedArguments, originalMethod) - .on('error', reject) - .on('data', (data) => results.push(data)) - .on('end', () => resolve(results)); - }); - if (!callback) { - return promise.then(results => [results]); - } - promise.then(results => callback(null, results), (err) => callback(err)); - } - /** - * This method simply calls the nextQuery recursively, emitting results to a - * stream. The stream ends when `nextQuery` is null. - * - * `maxResults` will act as a cap for how many results are fetched and emitted - * to the stream. - * - * @param {object=|string=} parsedArguments.query - Query object. This is most - * commonly an object, but to make the API more simple, it can also be a - * string in some places. - * @param {function=} parsedArguments.callback - Callback function. - * @param {boolean} parsedArguments.autoPaginate - Auto-pagination enabled. - * @param {boolean} parsedArguments.maxApiCalls - Maximum API calls to make. - * @param {number} parsedArguments.maxResults - Maximum results to return. - * @param {function} originalMethod - The cached method that accepts a callback - * and returns `nextQuery` to receive more results. - * @return {stream} - Readable object stream. - */ - /* eslint-disable @typescript-eslint/no-explicit-any */ - runAsStream_(parsedArguments, originalMethod) { - return new resource_stream_1.ResourceStream(parsedArguments, originalMethod); - } -} -exports.Paginator = Paginator; -const paginator = new Paginator(); -exports.paginator = paginator; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/@google-cloud/paginator/build/src/resource-stream.d.ts b/reverse_engineering/node_modules/@google-cloud/paginator/build/src/resource-stream.d.ts deleted file mode 100644 index 9e30a89..0000000 --- a/reverse_engineering/node_modules/@google-cloud/paginator/build/src/resource-stream.d.ts +++ /dev/null @@ -1,40 +0,0 @@ -/*! - * Copyright 2019 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/// -import { Transform } from 'stream'; -import { ParsedArguments } from './'; -interface ResourceEvents { - addListener(event: 'data', listener: (data: T) => void): this; - emit(event: 'data', data: T): boolean; - on(event: 'data', listener: (data: T) => void): this; - once(event: 'data', listener: (data: T) => void): this; - prependListener(event: 'data', listener: (data: T) => void): this; - prependOnceListener(event: 'data', listener: (data: T) => void): this; - removeListener(event: 'data', listener: (data: T) => void): this; -} -export declare class ResourceStream extends Transform implements ResourceEvents { - _ended: boolean; - _maxApiCalls: number; - _nextQuery: {} | null; - _reading: boolean; - _requestFn: Function; - _requestsMade: number; - _resultsToSend: number; - constructor(args: ParsedArguments, requestFn: Function); - end(...args: any[]): void; - _read(): void; -} -export {}; diff --git a/reverse_engineering/node_modules/@google-cloud/paginator/build/src/resource-stream.js b/reverse_engineering/node_modules/@google-cloud/paginator/build/src/resource-stream.js deleted file mode 100644 index 0ec90c0..0000000 --- a/reverse_engineering/node_modules/@google-cloud/paginator/build/src/resource-stream.js +++ /dev/null @@ -1,80 +0,0 @@ -"use strict"; -/*! - * Copyright 2019 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ResourceStream = void 0; -const stream_1 = require("stream"); -class ResourceStream extends stream_1.Transform { - constructor(args, requestFn) { - const options = Object.assign({ objectMode: true }, args.streamOptions); - super(options); - this._ended = false; - this._maxApiCalls = args.maxApiCalls === -1 ? Infinity : args.maxApiCalls; - this._nextQuery = args.query; - this._reading = false; - this._requestFn = requestFn; - this._requestsMade = 0; - this._resultsToSend = args.maxResults === -1 ? Infinity : args.maxResults; - } - /* eslint-disable @typescript-eslint/no-explicit-any */ - end(...args) { - this._ended = true; - return super.end(...args); - } - _read() { - if (this._reading) { - return; - } - this._reading = true; - // Wrap in a try/catch to catch input linting errors, e.g. - // an invalid BigQuery query. These errors are thrown in an - // async fashion, which makes them un-catchable by the user. - try { - this._requestFn(this._nextQuery, (err, results, nextQuery) => { - if (err) { - this.destroy(err); - return; - } - this._nextQuery = nextQuery; - if (this._resultsToSend !== Infinity) { - results = results.splice(0, this._resultsToSend); - this._resultsToSend -= results.length; - } - let more = true; - for (const result of results) { - if (this._ended) { - break; - } - more = this.push(result); - } - const isFinished = !this._nextQuery || this._resultsToSend < 1; - const madeMaxCalls = ++this._requestsMade >= this._maxApiCalls; - if (isFinished || madeMaxCalls) { - this.end(); - } - if (more && !this._ended) { - setImmediate(() => this._read()); - } - this._reading = false; - }); - } - catch (e) { - this.destroy(e); - } - } -} -exports.ResourceStream = ResourceStream; -//# sourceMappingURL=resource-stream.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/@google-cloud/paginator/package.json b/reverse_engineering/node_modules/@google-cloud/paginator/package.json deleted file mode 100644 index 3ffb4dc..0000000 --- a/reverse_engineering/node_modules/@google-cloud/paginator/package.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "_from": "@google-cloud/paginator@^3.0.0", - "_id": "@google-cloud/paginator@3.0.5", - "_inBundle": false, - "_integrity": "sha512-N4Uk4BT1YuskfRhKXBs0n9Lg2YTROZc6IMpkO/8DIHODtm5s3xY8K5vVBo23v/2XulY3azwITQlYWgT4GdLsUw==", - "_location": "/@google-cloud/paginator", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "@google-cloud/paginator@^3.0.0", - "name": "@google-cloud/paginator", - "escapedName": "@google-cloud%2fpaginator", - "scope": "@google-cloud", - "rawSpec": "^3.0.0", - "saveSpec": null, - "fetchSpec": "^3.0.0" - }, - "_requiredBy": [ - "/@google-cloud/bigquery" - ], - "_resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.5.tgz", - "_shasum": "9d6b96c421a89bd560c1bc2c197c7611ef21db6c", - "_spec": "@google-cloud/paginator@^3.0.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/@google-cloud/bigquery", - "author": { - "name": "Google Inc." - }, - "bugs": { - "url": "https://github.com/googleapis/nodejs-paginator/issues" - }, - "bundleDependencies": false, - "dependencies": { - "arrify": "^2.0.0", - "extend": "^3.0.2" - }, - "deprecated": false, - "description": "A result paging utility used by Google node.js modules", - "devDependencies": { - "@compodoc/compodoc": "^1.1.7", - "@microsoft/api-documenter": "^7.8.10", - "@microsoft/api-extractor": "^7.8.10", - "@types/extend": "^3.0.0", - "@types/mocha": "^8.0.0", - "@types/node": "^10.5.2", - "@types/proxyquire": "^1.3.28", - "@types/sinon": "^9.0.0", - "@types/uuid": "^8.0.0", - "c8": "^7.0.0", - "codecov": "^3.0.4", - "gts": "^2.0.0", - "linkinator": "^2.0.0", - "mocha": "^8.0.0", - "proxyquire": "^2.0.1", - "sinon": "^9.0.0", - "typescript": "^3.8.3", - "uuid": "^8.0.0" - }, - "engines": { - "node": ">=10" - }, - "files": [ - "build/src", - "!build/src/**/*.map" - ], - "homepage": "https://github.com/googleapis/nodejs-paginator#readme", - "keywords": [], - "license": "Apache-2.0", - "main": "build/src/index.js", - "name": "@google-cloud/paginator", - "repository": { - "type": "git", - "url": "git+https://github.com/googleapis/nodejs-paginator.git" - }, - "scripts": { - "api-documenter": "api-documenter yaml --input-folder=temp", - "api-extractor": "api-extractor run --local", - "clean": "gts clean", - "compile": "tsc -p .", - "docs": "compodoc src/", - "docs-test": "linkinator docs", - "fix": "gts fix", - "lint": "gts check", - "precompile": "gts clean", - "predocs-test": "npm run docs", - "prelint": "cd samples; npm link ../; npm install", - "prepare": "npm run compile", - "presystem-test": "npm run compile", - "pretest": "npm run compile", - "samples-test": "cd samples/ && npm link ../ && npm test && cd ../", - "system-test": "mocha build/system-test", - "test": "c8 mocha build/test" - }, - "types": "build/src/index.d.ts", - "version": "3.0.5" -} diff --git a/reverse_engineering/node_modules/@google-cloud/projectify/CHANGELOG.md b/reverse_engineering/node_modules/@google-cloud/projectify/CHANGELOG.md deleted file mode 100644 index 75c8797..0000000 --- a/reverse_engineering/node_modules/@google-cloud/projectify/CHANGELOG.md +++ /dev/null @@ -1,162 +0,0 @@ -# Changelog - -[npm history][1] - -[1]: https://www.npmjs.com/package/@google-cloud/projectify?activeTab=versions -## [2.1.0](https://www.github.com/googleapis/nodejs-projectify/compare/v2.0.1...v2.1.0) (2021-06-10) - - -### Features - -* add `gcf-owl-bot[bot]` to `ignoreAuthors` ([#245](https://www.github.com/googleapis/nodejs-projectify/issues/245)) ([30f0499](https://www.github.com/googleapis/nodejs-projectify/commit/30f0499ade5f140774c3aa672b44fd3538e72309)) - -### [2.0.1](https://www.github.com/googleapis/nodejs-projectify/compare/v2.0.0...v2.0.1) (2020-07-06) - - -### Bug Fixes - -* update node issue template ([#197](https://www.github.com/googleapis/nodejs-projectify/issues/197)) ([3406f2a](https://www.github.com/googleapis/nodejs-projectify/commit/3406f2aa431ed04541585b63c330c04270c602aa)) - -## [2.0.0](https://www.github.com/googleapis/nodejs-projectify/compare/v1.0.4...v2.0.0) (2020-03-24) - - -### ⚠ BREAKING CHANGES - -* typescript@3.7 introduced some breaking changes -* drop Node 8 from engines field (#172) - -### Features - -* drop Node 8 from engines field ([#172](https://www.github.com/googleapis/nodejs-projectify/issues/172)) ([3eac424](https://www.github.com/googleapis/nodejs-projectify/commit/3eac424bfb1ee47144a77888dc68db687988945e)) - - -### Build System - -* update to latest version of gts/typescript ([#171](https://www.github.com/googleapis/nodejs-projectify/issues/171)) ([30f90cc](https://www.github.com/googleapis/nodejs-projectify/commit/30f90cc172da6ed9394da91869556bf5eef42434)) - -### [1.0.4](https://www.github.com/googleapis/nodejs-projectify/compare/v1.0.3...v1.0.4) (2019-12-05) - - -### Bug Fixes - -* **publish:** publication failed to reach npm ([#141](https://www.github.com/googleapis/nodejs-projectify/issues/141)) ([5406ba5](https://www.github.com/googleapis/nodejs-projectify/commit/5406ba5e1d43a228a19072023c1baebce34190af)) - -### [1.0.3](https://www.github.com/googleapis/nodejs-projectify/compare/v1.0.2...v1.0.3) (2019-12-05) - - -### Bug Fixes - -* **deps:** pin TypeScript below 3.7.0 ([6c95307](https://www.github.com/googleapis/nodejs-projectify/commit/6c953070139a77d30c4ce5b7dee1443874046906)) - -### [1.0.2](https://www.github.com/googleapis/nodejs-projectify/compare/v1.0.1...v1.0.2) (2019-11-14) - - -### Bug Fixes - -* **docs:** add jsdoc-region-tag plugin ([#135](https://www.github.com/googleapis/nodejs-projectify/issues/135)) ([59301e7](https://www.github.com/googleapis/nodejs-projectify/commit/59301e7cfa855add4894dd9c46870e61fffa7413)) - -### [1.0.1](https://www.github.com/googleapis/nodejs-projectify/compare/v1.0.0...v1.0.1) (2019-06-26) - - -### Bug Fixes - -* **docs:** link to reference docs section on googleapis.dev ([#119](https://www.github.com/googleapis/nodejs-projectify/issues/119)) ([90a009f](https://www.github.com/googleapis/nodejs-projectify/commit/90a009f)) - -## [1.0.0](https://www.github.com/googleapis/nodejs-projectify/compare/v0.3.3...v1.0.0) (2019-05-02) - - -### Build System - -* upgrade engines field to >=8.10.0 ([#103](https://www.github.com/googleapis/nodejs-projectify/issues/103)) ([0149650](https://www.github.com/googleapis/nodejs-projectify/commit/0149650)) - - -### BREAKING CHANGES - -* upgrade engines field to >=8.10.0 (#103) - -## v0.3.3 - -03-12-2019 12:27 PDT - -This patch release contains a few updates to the docs. That's all! - -### Documentation -- docs: update links in contrib guide ([#86](https://github.com/googleapis/nodejs-projectify/pull/86)) -- docs: update contributing path in README ([#82](https://github.com/googleapis/nodejs-projectify/pull/82)) -- docs: move CONTRIBUTING.md to root ([#81](https://github.com/googleapis/nodejs-projectify/pull/81)) -- docs: add lint/fix example to contributing guide ([#79](https://github.com/googleapis/nodejs-projectify/pull/79)) - -### Internal / Testing Changes -- build: Add docuploader credentials to node publish jobs ([#90](https://github.com/googleapis/nodejs-projectify/pull/90)) -- build: use node10 to run samples-test, system-test etc ([#89](https://github.com/googleapis/nodejs-projectify/pull/89)) -- build: update release configuration -- chore(deps): update dependency mocha to v6 -- build: use linkinator for docs test ([#85](https://github.com/googleapis/nodejs-projectify/pull/85)) -- build: create docs test npm scripts ([#84](https://github.com/googleapis/nodejs-projectify/pull/84)) -- build: test using @grpc/grpc-js in CI ([#83](https://github.com/googleapis/nodejs-projectify/pull/83)) -- build: ignore googleapis.com in doc link check ([#78](https://github.com/googleapis/nodejs-projectify/pull/78)) -- build: check for 404s in the docs ([#77](https://github.com/googleapis/nodejs-projectify/pull/77)) -- chore(build): inject yoshi automation key ([#75](https://github.com/googleapis/nodejs-projectify/pull/75)) -- chore: update nyc and eslint configs ([#74](https://github.com/googleapis/nodejs-projectify/pull/74)) -- chore: fix publish.sh permission +x ([#72](https://github.com/googleapis/nodejs-projectify/pull/72)) -- fix(build): fix Kokoro release script ([#71](https://github.com/googleapis/nodejs-projectify/pull/71)) -- build: add Kokoro configs for autorelease ([#70](https://github.com/googleapis/nodejs-projectify/pull/70)) -- chore: always nyc report before calling codecov ([#67](https://github.com/googleapis/nodejs-projectify/pull/67)) -- chore: nyc ignore build/test by default ([#66](https://github.com/googleapis/nodejs-projectify/pull/66)) -- chore(build): update prettier config ([#64](https://github.com/googleapis/nodejs-projectify/pull/64)) -- chore: update license file ([#63](https://github.com/googleapis/nodejs-projectify/pull/63)) -- fix(build): fix system key decryption ([#59](https://github.com/googleapis/nodejs-projectify/pull/59)) -- chore: add synth.metadata - -## v0.3.2 - -### Bug fixes -- fix: do not replace projectId on stream objects ([#53](https://github.com/googleapis/nodejs-projectify/pull/53)) - -### Dependencies -- chore(deps): update dependency gts to ^0.9.0 ([#52](https://github.com/googleapis/nodejs-projectify/pull/52)) - -### Internal / Testing Changes -- chore: update eslintignore config ([#51](https://github.com/googleapis/nodejs-projectify/pull/51)) -- chore: use latest npm on Windows ([#50](https://github.com/googleapis/nodejs-projectify/pull/50)) -- chore: update CircleCI config ([#49](https://github.com/googleapis/nodejs-projectify/pull/49)) -- chore: include build in eslintignore ([#46](https://github.com/googleapis/nodejs-projectify/pull/46)) - -## v0.3.1 - -### Implementation Changes -- fix: replaceProjectId should not fail when passed a Buffer ([#43](https://github.com/googleapis/nodejs-projectify/pull/43)) - -### Dependencies -- chore(deps): update dependency nyc to v13 ([#13](https://github.com/googleapis/nodejs-projectify/pull/13)) -- chore(deps): lock file maintenance ([#11](https://github.com/googleapis/nodejs-projectify/pull/11)) -- chore(deps): lock file maintenance ([#8](https://github.com/googleapis/nodejs-projectify/pull/8)) -- chore(deps): update dependency typescript to v3 ([#7](https://github.com/googleapis/nodejs-projectify/pull/7)) -- chore(deps): update dependency gts to ^0.8.0 ([#2](https://github.com/googleapis/nodejs-projectify/pull/2)) -- chore(deps): lock file maintenance ([#4](https://github.com/googleapis/nodejs-projectify/pull/4)) -- chore(deps): lock file maintenance ([#3](https://github.com/googleapis/nodejs-projectify/pull/3)) - -### Internal / Testing Changes -- chore: update issue templates ([#40](https://github.com/googleapis/nodejs-projectify/pull/40)) -- chore: remove old issue template ([#38](https://github.com/googleapis/nodejs-projectify/pull/38)) -- build: run tests on node11 ([#37](https://github.com/googleapis/nodejs-projectify/pull/37)) -- chores(build): run codecov on continuous builds ([#34](https://github.com/googleapis/nodejs-projectify/pull/34)) -- chores(build): do not collect sponge.xml from windows builds ([#35](https://github.com/googleapis/nodejs-projectify/pull/35)) -- chore: update new issue template ([#33](https://github.com/googleapis/nodejs-projectify/pull/33)) -- build: fix codecov uploading on Kokoro ([#30](https://github.com/googleapis/nodejs-projectify/pull/30)) -- Update kokoro config ([#28](https://github.com/googleapis/nodejs-projectify/pull/28)) -- Update CI config ([#26](https://github.com/googleapis/nodejs-projectify/pull/26)) -- Don't publish sourcemaps ([#24](https://github.com/googleapis/nodejs-projectify/pull/24)) -- build: prevent system/sample-test from leaking credentials -- Update kokoro config ([#22](https://github.com/googleapis/nodejs-projectify/pull/22)) -- test: remove appveyor config ([#21](https://github.com/googleapis/nodejs-projectify/pull/21)) -- Update CI config ([#20](https://github.com/googleapis/nodejs-projectify/pull/20)) -- Enable prefer-const in the eslint config ([#19](https://github.com/googleapis/nodejs-projectify/pull/19)) -- Enable no-var in eslint ([#18](https://github.com/googleapis/nodejs-projectify/pull/18)) -- Update CI config ([#17](https://github.com/googleapis/nodejs-projectify/pull/17)) -- Add synth and update CI config ([#15](https://github.com/googleapis/nodejs-projectify/pull/15)) -- chore: ignore package-lock.json ([#12](https://github.com/googleapis/nodejs-projectify/pull/12)) -- chore: update renovate config ([#10](https://github.com/googleapis/nodejs-projectify/pull/10)) -- remove that whitespace ([#9](https://github.com/googleapis/nodejs-projectify/pull/9)) -- chore: assert.deelEqual => assert.deepStrictEqual ([#6](https://github.com/googleapis/nodejs-projectify/pull/6)) -- chore: move mocha options to mocha.opts ([#5](https://github.com/googleapis/nodejs-projectify/pull/5)) diff --git a/reverse_engineering/node_modules/@google-cloud/projectify/LICENSE b/reverse_engineering/node_modules/@google-cloud/projectify/LICENSE deleted file mode 100644 index d645695..0000000 --- a/reverse_engineering/node_modules/@google-cloud/projectify/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/reverse_engineering/node_modules/@google-cloud/projectify/README.md b/reverse_engineering/node_modules/@google-cloud/projectify/README.md deleted file mode 100644 index 5897d45..0000000 --- a/reverse_engineering/node_modules/@google-cloud/projectify/README.md +++ /dev/null @@ -1,135 +0,0 @@ -[//]: # "This README.md file is auto-generated, all changes to this file will be lost." -[//]: # "To regenerate it, use `python -m synthtool`." -Google Cloud Platform logo - -# [Google Cloud Common Projectify: Node.js Client](https://github.com/googleapis/nodejs-projectify) - -[![release level](https://img.shields.io/badge/release%20level-general%20availability%20%28GA%29-brightgreen.svg?style=flat)](https://cloud.google.com/terms/launch-stages) -[![npm version](https://img.shields.io/npm/v/@google-cloud/projectify.svg)](https://www.npmjs.org/package/@google-cloud/projectify) -[![codecov](https://img.shields.io/codecov/c/github/googleapis/nodejs-projectify/master.svg?style=flat)](https://codecov.io/gh/googleapis/nodejs-projectify) - - - - -A simple utility for replacing the projectid token in objects. - - -A comprehensive list of changes in each version may be found in -[the CHANGELOG](https://github.com/googleapis/nodejs-projectify/blob/master/CHANGELOG.md). - - - -* [github.com/googleapis/nodejs-projectify](https://github.com/googleapis/nodejs-projectify) - -Read more about the client libraries for Cloud APIs, including the older -Google APIs Client Libraries, in [Client Libraries Explained][explained]. - -[explained]: https://cloud.google.com/apis/docs/client-libraries-explained - -**Table of contents:** - - -* [Quickstart](#quickstart) - - * [Installing the client library](#installing-the-client-library) - * [Using the client library](#using-the-client-library) -* [Samples](#samples) -* [Versioning](#versioning) -* [Contributing](#contributing) -* [License](#license) - -## Quickstart - -### Installing the client library - -```bash -npm install @google-cloud/projectify -``` - - -### Using the client library - -```javascript -const {replaceProjectIdToken} = require('@google-cloud/projectify'); -const options = { - projectId: '{{projectId}}', -}; -replaceProjectIdToken(options, 'fake-project-id'); - -``` - - - -## Samples - -Samples are in the [`samples/`](https://github.com/googleapis/nodejs-projectify/tree/master/samples) directory. Each sample's `README.md` has instructions for running its sample. - -| Sample | Source Code | Try it | -| --------------------------- | --------------------------------- | ------ | -| Quickstart | [source code](https://github.com/googleapis/nodejs-projectify/blob/master/samples/quickstart.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-projectify&page=editor&open_in_editor=samples/quickstart.js,samples/README.md) | - - - -## Supported Node.js Versions - -Our client libraries follow the [Node.js release schedule](https://nodejs.org/en/about/releases/). -Libraries are compatible with all current _active_ and _maintenance_ versions of -Node.js. - -Client libraries targeting some end-of-life versions of Node.js are available, and -can be installed via npm [dist-tags](https://docs.npmjs.com/cli/dist-tag). -The dist-tags follow the naming convention `legacy-(version)`. - -_Legacy Node.js versions are supported as a best effort:_ - -* Legacy versions will not be tested in continuous integration. -* Some security patches may not be able to be backported. -* Dependencies will not be kept up-to-date, and features will not be backported. - -#### Legacy tags available - -* `legacy-8`: install client libraries from this dist-tag for versions - compatible with Node.js 8. - -## Versioning - -This library follows [Semantic Versioning](http://semver.org/). - - -This library is considered to be **General Availability (GA)**. This means it -is stable; the code surface will not change in backwards-incompatible ways -unless absolutely necessary (e.g. because of critical security issues) or with -an extensive deprecation period. Issues and requests against **GA** libraries -are addressed with the highest priority. - - - - - -More Information: [Google Cloud Platform Launch Stages][launch_stages] - -[launch_stages]: https://cloud.google.com/terms/launch-stages - -## Contributing - -Contributions welcome! See the [Contributing Guide](https://github.com/googleapis/nodejs-projectify/blob/master/CONTRIBUTING.md). - -Please note that this `README.md`, the `samples/README.md`, -and a variety of configuration files in this repository (including `.nycrc` and `tsconfig.json`) -are generated from a central template. To edit one of these files, make an edit -to its template in this -[directory](https://github.com/googleapis/synthtool/tree/master/synthtool/gcp/templates/node_library). - -## License - -Apache Version 2.0 - -See [LICENSE](https://github.com/googleapis/nodejs-projectify/blob/master/LICENSE) - - - -[shell_img]: https://gstatic.com/cloudssh/images/open-btn.png -[projects]: https://console.cloud.google.com/project -[billing]: https://support.google.com/cloud/answer/6293499#enable-billing - -[auth]: https://cloud.google.com/docs/authentication/getting-started diff --git a/reverse_engineering/node_modules/@google-cloud/projectify/build/src/index.d.ts b/reverse_engineering/node_modules/@google-cloud/projectify/build/src/index.d.ts deleted file mode 100644 index f96f13c..0000000 --- a/reverse_engineering/node_modules/@google-cloud/projectify/build/src/index.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Populate the `{{projectId}}` placeholder. - * - * @throws {Error} If a projectId is required, but one is not provided. - * - * @param {*} - Any input value that may contain a placeholder. Arrays and objects will be looped. - * @param {string} projectId - A projectId. If not provided - * @return {*} - The original argument with all placeholders populated. - */ -export declare function replaceProjectIdToken(value: any, projectId: string): any; -/** - * Custom error type for missing project ID errors. - */ -export declare class MissingProjectIdError extends Error { - message: string; -} diff --git a/reverse_engineering/node_modules/@google-cloud/projectify/build/src/index.js b/reverse_engineering/node_modules/@google-cloud/projectify/build/src/index.js deleted file mode 100644 index d905973..0000000 --- a/reverse_engineering/node_modules/@google-cloud/projectify/build/src/index.js +++ /dev/null @@ -1,65 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const stream_1 = require("stream"); -// Copyright 2014 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/** - * Populate the `{{projectId}}` placeholder. - * - * @throws {Error} If a projectId is required, but one is not provided. - * - * @param {*} - Any input value that may contain a placeholder. Arrays and objects will be looped. - * @param {string} projectId - A projectId. If not provided - * @return {*} - The original argument with all placeholders populated. - */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -function replaceProjectIdToken(value, projectId) { - if (Array.isArray(value)) { - value = value.map(v => replaceProjectIdToken(v, projectId)); - } - if (value !== null && - typeof value === 'object' && - !(value instanceof Buffer) && - !(value instanceof stream_1.Stream) && - typeof value.hasOwnProperty === 'function') { - for (const opt in value) { - // eslint-disable-next-line no-prototype-builtins - if (value.hasOwnProperty(opt)) { - value[opt] = replaceProjectIdToken(value[opt], projectId); - } - } - } - if (typeof value === 'string' && - value.indexOf('{{projectId}}') > -1) { - if (!projectId || projectId === '{{projectId}}') { - throw new MissingProjectIdError(); - } - value = value.replace(/{{projectId}}/g, projectId); - } - return value; -} -exports.replaceProjectIdToken = replaceProjectIdToken; -/** - * Custom error type for missing project ID errors. - */ -class MissingProjectIdError extends Error { - constructor() { - super(...arguments); - this.message = `Sorry, we cannot connect to Cloud Services without a project - ID. You may specify one with an environment variable named - "GOOGLE_CLOUD_PROJECT".`.replace(/ +/g, ' '); - } -} -exports.MissingProjectIdError = MissingProjectIdError; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/@google-cloud/projectify/package.json b/reverse_engineering/node_modules/@google-cloud/projectify/package.json deleted file mode 100644 index 35ead4b..0000000 --- a/reverse_engineering/node_modules/@google-cloud/projectify/package.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "_from": "@google-cloud/projectify@^2.0.0", - "_id": "@google-cloud/projectify@2.1.0", - "_inBundle": false, - "_integrity": "sha512-qbpidP/fOvQNz3nyabaVnZqcED1NNzf7qfeOlgtAZd9knTwY+KtsGRkYpiQzcATABy4gnGP2lousM3S0nuWVzA==", - "_location": "/@google-cloud/projectify", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "@google-cloud/projectify@^2.0.0", - "name": "@google-cloud/projectify", - "escapedName": "@google-cloud%2fprojectify", - "scope": "@google-cloud", - "rawSpec": "^2.0.0", - "saveSpec": null, - "fetchSpec": "^2.0.0" - }, - "_requiredBy": [ - "/@google-cloud/common" - ], - "_resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-2.1.0.tgz", - "_shasum": "3df145c932e244cdeb87a30d93adce615bc69e6d", - "_spec": "@google-cloud/projectify@^2.0.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/@google-cloud/common", - "author": { - "name": "Google Inc." - }, - "bugs": { - "url": "https://github.com/googleapis/nodejs-projectify/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "A simple utility for replacing the projectid token in objects.", - "devDependencies": { - "@compodoc/compodoc": "^1.1.11", - "@microsoft/api-documenter": "^7.8.10", - "@microsoft/api-extractor": "^7.8.10", - "@types/mocha": "^8.0.0", - "@types/node": "^14.0.0", - "c8": "^7.1.0", - "codecov": "^3.6.5", - "gts": "^3.0.0", - "linkinator": "^2.0.4", - "mocha": "^8.0.0", - "typescript": "3.8.3" - }, - "engines": { - "node": ">=10" - }, - "files": [ - "build/src", - "!build/src/**/*.map" - ], - "homepage": "https://github.com/googleapis/nodejs-projectify#readme", - "keywords": [], - "license": "Apache-2.0", - "main": "build/src/index.js", - "name": "@google-cloud/projectify", - "repository": { - "type": "git", - "url": "git+https://github.com/googleapis/nodejs-projectify.git" - }, - "scripts": { - "api-documenter": "api-documenter yaml --input-folder=temp", - "api-extractor": "api-extractor run --local", - "clean": "gts clean", - "compile": "tsc -p .", - "docs": "compodoc src/", - "docs-test": "linkinator docs", - "fix": "gts fix", - "lint": "gts check", - "precompile": "gts clean", - "predocs-test": "npm run docs", - "prelint": "cd samples; npm link ../; npm install", - "prepare": "npm run compile", - "presystem-test": "npm run compile", - "pretest": "npm run compile", - "samples-test": "cd samples/ && npm link ../ && npm test && cd ../", - "system-test": "mocha build/system-test", - "test": "c8 mocha build/test" - }, - "types": "build/src/index.d.ts", - "version": "2.1.0" -} diff --git a/reverse_engineering/node_modules/@google-cloud/promisify/CHANGELOG.md b/reverse_engineering/node_modules/@google-cloud/promisify/CHANGELOG.md deleted file mode 100644 index 417115c..0000000 --- a/reverse_engineering/node_modules/@google-cloud/promisify/CHANGELOG.md +++ /dev/null @@ -1,155 +0,0 @@ -# Changelog - -[npm history][1] - -[1]: https://www.npmjs.com/package/nodejs-promisify?activeTab=versions - -### [2.0.3](https://www.github.com/googleapis/nodejs-promisify/compare/v2.0.2...v2.0.3) (2020-09-04) - - -### Bug Fixes - -* allow excluding accessor methods ([#228](https://www.github.com/googleapis/nodejs-promisify/issues/228)) ([114d8bc](https://www.github.com/googleapis/nodejs-promisify/commit/114d8bcef7093bdfda195a15e0c2f376195fd3fc)) - -### [2.0.2](https://www.github.com/googleapis/nodejs-promisify/compare/v2.0.1...v2.0.2) (2020-07-06) - - -### Bug Fixes - -* update node issue template ([#204](https://www.github.com/googleapis/nodejs-promisify/issues/204)) ([a2ba8d8](https://www.github.com/googleapis/nodejs-promisify/commit/a2ba8d8e45ef03d093d987292a467696745fc9fd)) - -### [2.0.1](https://www.github.com/googleapis/nodejs-promisify/compare/v2.0.0...v2.0.1) (2020-05-08) - - -### Bug Fixes - -* apache license URL ([#468](https://www.github.com/googleapis/nodejs-promisify/issues/468)) ([#191](https://www.github.com/googleapis/nodejs-promisify/issues/191)) ([0edc724](https://www.github.com/googleapis/nodejs-promisify/commit/0edc7246c53d25d9dd220b813561bcee97250783)) - -## [2.0.0](https://www.github.com/googleapis/nodejs-promisify/compare/v1.0.4...v2.0.0) (2020-03-23) - - -### ⚠ BREAKING CHANGES - -* update to latest version of gts/typescript (#183) -* drop Node 8 from engines field (#184) - -### Features - -* drop Node 8 from engines field ([#184](https://www.github.com/googleapis/nodejs-promisify/issues/184)) ([7e6d3c5](https://www.github.com/googleapis/nodejs-promisify/commit/7e6d3c54066d89530ed25c7f9722efd252f43fb8)) - - -### Build System - -* update to latest version of gts/typescript ([#183](https://www.github.com/googleapis/nodejs-promisify/issues/183)) ([9c3ed12](https://www.github.com/googleapis/nodejs-promisify/commit/9c3ed12c12f4bb1e17af7440c6371c4cefddcd59)) - -### [1.0.4](https://www.github.com/googleapis/nodejs-promisify/compare/v1.0.3...v1.0.4) (2019-12-05) - - -### Bug Fixes - -* **deps:** pin TypeScript below 3.7.0 ([e48750e](https://www.github.com/googleapis/nodejs-promisify/commit/e48750ef96aa20eb3a2b73fe2f062d04430468a7)) - -### [1.0.3](https://www.github.com/googleapis/nodejs-promisify/compare/v1.0.2...v1.0.3) (2019-11-13) - - -### Bug Fixes - -* **docs:** add jsdoc-region-tag plugin ([#146](https://www.github.com/googleapis/nodejs-promisify/issues/146)) ([ff0ee74](https://www.github.com/googleapis/nodejs-promisify/commit/ff0ee7408f50e8f7147b8ccf7e10337aa5920076)) - -### [1.0.2](https://www.github.com/googleapis/nodejs-promisify/compare/v1.0.1...v1.0.2) (2019-06-26) - - -### Bug Fixes - -* **docs:** link to reference docs section on googleapis.dev ([#128](https://www.github.com/googleapis/nodejs-promisify/issues/128)) ([5a8bd90](https://www.github.com/googleapis/nodejs-promisify/commit/5a8bd90)) - -### [1.0.1](https://www.github.com/googleapis/nodejs-promisify/compare/v1.0.0...v1.0.1) (2019-06-14) - - -### Bug Fixes - -* **docs:** move to new client docs URL ([#124](https://www.github.com/googleapis/nodejs-promisify/issues/124)) ([34d18cd](https://www.github.com/googleapis/nodejs-promisify/commit/34d18cd)) - -## [1.0.0](https://www.github.com/googleapis/nodejs-promisify/compare/v0.4.0...v1.0.0) (2019-05-02) - - -### Build System - -* upgrade engines field to >=8.10.0 ([#108](https://www.github.com/googleapis/nodejs-promisify/issues/108)) ([78ab89c](https://www.github.com/googleapis/nodejs-promisify/commit/78ab89c)) - - -### BREAKING CHANGES - -* upgrade engines field to >=8.10.0 (#108) - -## v0.4.0 - -02-12-2019 19:44 PST - -### New features -- feat: add callbackify() and callbackifyAll() methods ([#82](https://github.com/googleapis/nodejs-promisify/pull/82)) - -### Documentation -- docs: update contributing path in README ([#86](https://github.com/googleapis/nodejs-promisify/pull/86)) -- chore: move CONTRIBUTING.md to root ([#85](https://github.com/googleapis/nodejs-promisify/pull/85)) -- docs: add lint/fix example to contributing guide ([#83](https://github.com/googleapis/nodejs-promisify/pull/83)) - -### Internal / Testing Changes -- build: create docs test npm scripts ([#88](https://github.com/googleapis/nodejs-promisify/pull/88)) -- build: test using @grpc/grpc-js in CI ([#87](https://github.com/googleapis/nodejs-promisify/pull/87)) -- build: ignore googleapis.com in doc link check ([#81](https://github.com/googleapis/nodejs-promisify/pull/81)) -- build: check broken links in generated docs ([#79](https://github.com/googleapis/nodejs-promisify/pull/79)) -- chore(deps): update dependency @types/sinon to v7 ([#78](https://github.com/googleapis/nodejs-promisify/pull/78)) -- chore(build): inject yoshi automation key ([#77](https://github.com/googleapis/nodejs-promisify/pull/77)) -- chore: update nyc and eslint configs ([#76](https://github.com/googleapis/nodejs-promisify/pull/76)) -- chore: fix publish.sh permission +x ([#74](https://github.com/googleapis/nodejs-promisify/pull/74)) -- fix(build): fix Kokoro release script ([#73](https://github.com/googleapis/nodejs-promisify/pull/73)) -- build: add Kokoro configs for autorelease ([#72](https://github.com/googleapis/nodejs-promisify/pull/72)) -- chore: always nyc report before calling codecov ([#69](https://github.com/googleapis/nodejs-promisify/pull/69)) -- chore: nyc ignore build/test by default ([#68](https://github.com/googleapis/nodejs-promisify/pull/68)) -- chore(build): update prettier config ([#66](https://github.com/googleapis/nodejs-promisify/pull/66)) -- fix: get the build passing ([#65](https://github.com/googleapis/nodejs-promisify/pull/65)) -- chore: update license file ([#64](https://github.com/googleapis/nodejs-promisify/pull/64)) -- fix(build): fix system key decryption ([#60](https://github.com/googleapis/nodejs-promisify/pull/60)) -- chore(deps): update dependency @types/sinon to v5.0.7 ([#58](https://github.com/googleapis/nodejs-promisify/pull/58)) -- fix: Pin @types/sinon to last compatible version ([#57](https://github.com/googleapis/nodejs-promisify/pull/57)) -- chore: add synth.metadata -- chore(deps): update dependency gts to ^0.9.0 ([#54](https://github.com/googleapis/nodejs-promisify/pull/54)) -- chore: update eslintignore config ([#53](https://github.com/googleapis/nodejs-promisify/pull/53)) -- chore: use latest npm on Windows ([#52](https://github.com/googleapis/nodejs-promisify/pull/52)) -- chore: update CircleCI config ([#51](https://github.com/googleapis/nodejs-promisify/pull/51)) -- chore: include build in eslintignore ([#48](https://github.com/googleapis/nodejs-promisify/pull/48)) -- chore: update issue templates ([#44](https://github.com/googleapis/nodejs-promisify/pull/44)) -- chore: remove old issue template ([#42](https://github.com/googleapis/nodejs-promisify/pull/42)) -- build: run tests on node11 ([#41](https://github.com/googleapis/nodejs-promisify/pull/41)) -- chores(build): do not collect sponge.xml from windows builds ([#40](https://github.com/googleapis/nodejs-promisify/pull/40)) -- chores(build): run codecov on continuous builds ([#39](https://github.com/googleapis/nodejs-promisify/pull/39)) -- chore: update new issue template ([#38](https://github.com/googleapis/nodejs-promisify/pull/38)) -- chore(deps): update dependency sinon to v7 ([#33](https://github.com/googleapis/nodejs-promisify/pull/33)) -- build: fix codecov uploading on Kokoro ([#34](https://github.com/googleapis/nodejs-promisify/pull/34)) -- Update kokoro config ([#30](https://github.com/googleapis/nodejs-promisify/pull/30)) -- Update CI config ([#28](https://github.com/googleapis/nodejs-promisify/pull/28)) -- Don't publish sourcemaps ([#26](https://github.com/googleapis/nodejs-promisify/pull/26)) -- Update kokoro config ([#24](https://github.com/googleapis/nodejs-promisify/pull/24)) -- test: remove appveyor config ([#23](https://github.com/googleapis/nodejs-promisify/pull/23)) -- Update CI config ([#22](https://github.com/googleapis/nodejs-promisify/pull/22)) -- Enable prefer-const in the eslint config ([#21](https://github.com/googleapis/nodejs-promisify/pull/21)) -- Enable no-var in eslint ([#19](https://github.com/googleapis/nodejs-promisify/pull/19)) -- Update CI config ([#18](https://github.com/googleapis/nodejs-promisify/pull/18)) - -## v0.3.1 - -### Internal / Testing Changes -- Add synth script and update CI (#14) -- chore(deps): update dependency nyc to v13 (#12) -- chore: ignore package-lock.json (#11) -- chore(deps): lock file maintenance (#10) -- chore: update renovate config (#9) -- remove that whitespace (#8) -- chore(deps): lock file maintenance (#7) -- chore(deps): update dependency typescript to v3 (#6) -- chore: assert.deelEqual => assert.deepStrictEqual (#5) -- chore: move mocha options to mocha.opts (#4) -- chore(deps): update dependency gts to ^0.8.0 (#1) -- chore(deps): lock file maintenance (#3) -- chore(deps): lock file maintenance (#2) diff --git a/reverse_engineering/node_modules/@google-cloud/promisify/LICENSE b/reverse_engineering/node_modules/@google-cloud/promisify/LICENSE deleted file mode 100644 index d645695..0000000 --- a/reverse_engineering/node_modules/@google-cloud/promisify/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/reverse_engineering/node_modules/@google-cloud/promisify/README.md b/reverse_engineering/node_modules/@google-cloud/promisify/README.md deleted file mode 100644 index e2fe848..0000000 --- a/reverse_engineering/node_modules/@google-cloud/promisify/README.md +++ /dev/null @@ -1,157 +0,0 @@ -[//]: # "This README.md file is auto-generated, all changes to this file will be lost." -[//]: # "To regenerate it, use `python -m synthtool`." -Google Cloud Platform logo - -# [Google Cloud Common Promisify: Node.js Client](https://github.com/googleapis/nodejs-promisify) - -[![release level](https://img.shields.io/badge/release%20level-general%20availability%20%28GA%29-brightgreen.svg?style=flat)](https://cloud.google.com/terms/launch-stages) -[![npm version](https://img.shields.io/npm/v/@google-cloud/promisify.svg)](https://www.npmjs.org/package/@google-cloud/promisify) -[![codecov](https://img.shields.io/codecov/c/github/googleapis/nodejs-promisify/master.svg?style=flat)](https://codecov.io/gh/googleapis/nodejs-promisify) - - - - -A simple utility for promisifying functions and classes. - - -A comprehensive list of changes in each version may be found in -[the CHANGELOG](https://github.com/googleapis/nodejs-promisify/blob/master/CHANGELOG.md). - -* [Google Cloud Common Promisify Node.js Client API Reference][client-docs] - -* [github.com/googleapis/nodejs-promisify](https://github.com/googleapis/nodejs-promisify) - -Read more about the client libraries for Cloud APIs, including the older -Google APIs Client Libraries, in [Client Libraries Explained][explained]. - -[explained]: https://cloud.google.com/apis/docs/client-libraries-explained - -**Table of contents:** - - -* [Quickstart](#quickstart) - - * [Installing the client library](#installing-the-client-library) - * [Using the client library](#using-the-client-library) -* [Samples](#samples) -* [Versioning](#versioning) -* [Contributing](#contributing) -* [License](#license) - -## Quickstart - -### Installing the client library - -```bash -npm install @google-cloud/promisify -``` - - -### Using the client library - -```javascript -const {promisify} = require('@google-cloud/promisify'); - -/** - * This is a very basic example function that accepts a callback. - */ -function someCallbackFunction(name, callback) { - if (!name) { - callback(new Error('Name is required!')); - } else { - callback(null, `Well hello there, ${name}!`); - } -} - -// let's promisify it! -const somePromiseFunction = promisify(someCallbackFunction); - -async function quickstart() { - // now we can just `await` the function to use it like a promisified method - const [result] = await somePromiseFunction('nodestronaut'); - console.log(result); -} -quickstart(); - -``` -It's unlikely you will need to install this package directly, as it will be -installed as a dependency when you install other `@google-cloud` packages. - - -## Samples - -Samples are in the [`samples/`](https://github.com/googleapis/nodejs-promisify/tree/master/samples) directory. The samples' `README.md` -has instructions for running the samples. - -| Sample | Source Code | Try it | -| --------------------------- | --------------------------------- | ------ | -| Quickstart | [source code](https://github.com/googleapis/nodejs-promisify/blob/master/samples/quickstart.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-promisify&page=editor&open_in_editor=samples/quickstart.js,samples/README.md) | - - - -The [Google Cloud Common Promisify Node.js Client API Reference][client-docs] documentation -also contains samples. - -## Supported Node.js Versions - -Our client libraries follow the [Node.js release schedule](https://nodejs.org/en/about/releases/). -Libraries are compatible with all current _active_ and _maintenance_ versions of -Node.js. - -Client libraries targetting some end-of-life versions of Node.js are available, and -can be installed via npm [dist-tags](https://docs.npmjs.com/cli/dist-tag). -The dist-tags follow the naming convention `legacy-(version)`. - -_Legacy Node.js versions are supported as a best effort:_ - -* Legacy versions will not be tested in continuous integration. -* Some security patches may not be able to be backported. -* Dependencies will not be kept up-to-date, and features will not be backported. - -#### Legacy tags available - -* `legacy-8`: install client libraries from this dist-tag for versions - compatible with Node.js 8. - -## Versioning - -This library follows [Semantic Versioning](http://semver.org/). - - -This library is considered to be **General Availability (GA)**. This means it -is stable; the code surface will not change in backwards-incompatible ways -unless absolutely necessary (e.g. because of critical security issues) or with -an extensive deprecation period. Issues and requests against **GA** libraries -are addressed with the highest priority. - - - - - -More Information: [Google Cloud Platform Launch Stages][launch_stages] - -[launch_stages]: https://cloud.google.com/terms/launch-stages - -## Contributing - -Contributions welcome! See the [Contributing Guide](https://github.com/googleapis/nodejs-promisify/blob/master/CONTRIBUTING.md). - -Please note that this `README.md`, the `samples/README.md`, -and a variety of configuration files in this repository (including `.nycrc` and `tsconfig.json`) -are generated from a central template. To edit one of these files, make an edit -to its template in this -[directory](https://github.com/googleapis/synthtool/tree/master/synthtool/gcp/templates/node_library). - -## License - -Apache Version 2.0 - -See [LICENSE](https://github.com/googleapis/nodejs-promisify/blob/master/LICENSE) - -[client-docs]: https://googleapis.dev/nodejs/promisify/latest - -[shell_img]: https://gstatic.com/cloudssh/images/open-btn.png -[projects]: https://console.cloud.google.com/project -[billing]: https://support.google.com/cloud/answer/6293499#enable-billing - -[auth]: https://cloud.google.com/docs/authentication/getting-started diff --git a/reverse_engineering/node_modules/@google-cloud/promisify/build/src/index.d.ts b/reverse_engineering/node_modules/@google-cloud/promisify/build/src/index.d.ts deleted file mode 100644 index 9d75a39..0000000 --- a/reverse_engineering/node_modules/@google-cloud/promisify/build/src/index.d.ts +++ /dev/null @@ -1,61 +0,0 @@ -export interface PromisifyAllOptions extends PromisifyOptions { - /** - * Array of methods to ignore when promisifying. - */ - exclude?: string[]; -} -export interface PromisifyOptions { - /** - * Resolve the promise with single arg instead of an array. - */ - singular?: boolean; -} -export interface PromiseMethod extends Function { - promisified_?: boolean; -} -export interface WithPromise { - Promise?: PromiseConstructor; -} -export interface CallbackifyAllOptions { - /** - * Array of methods to ignore when callbackifying. - */ - exclude?: string[]; -} -export interface CallbackMethod extends Function { - callbackified_?: boolean; -} -/** - * Wraps a callback style function to conditionally return a promise. - * - * @param {function} originalMethod - The method to promisify. - * @param {object=} options - Promise options. - * @param {boolean} options.singular - Resolve the promise with single arg instead of an array. - * @return {function} wrapped - */ -export declare function promisify(originalMethod: PromiseMethod, options?: PromisifyOptions): any; -/** - * Promisifies certain Class methods. This will not promisify private or - * streaming methods. - * - * @param {module:common/service} Class - Service class. - * @param {object=} options - Configuration object. - */ -export declare function promisifyAll(Class: Function, options?: PromisifyAllOptions): void; -/** - * Wraps a promisy type function to conditionally call a callback function. - * - * @param {function} originalMethod - The method to callbackify. - * @param {object=} options - Callback options. - * @param {boolean} options.singular - Pass to the callback a single arg instead of an array. - * @return {function} wrapped - */ -export declare function callbackify(originalMethod: CallbackMethod): CallbackMethod; -/** - * Callbackifies certain Class methods. This will not callbackify private or - * streaming methods. - * - * @param {module:common/service} Class - Service class. - * @param {object=} options - Configuration object. - */ -export declare function callbackifyAll(Class: Function, options?: CallbackifyAllOptions): void; diff --git a/reverse_engineering/node_modules/@google-cloud/promisify/build/src/index.js b/reverse_engineering/node_modules/@google-cloud/promisify/build/src/index.js deleted file mode 100644 index 3199b96..0000000 --- a/reverse_engineering/node_modules/@google-cloud/promisify/build/src/index.js +++ /dev/null @@ -1,148 +0,0 @@ -"use strict"; -/* eslint-disable prefer-rest-params */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.callbackifyAll = exports.callbackify = exports.promisifyAll = exports.promisify = void 0; -/** - * Wraps a callback style function to conditionally return a promise. - * - * @param {function} originalMethod - The method to promisify. - * @param {object=} options - Promise options. - * @param {boolean} options.singular - Resolve the promise with single arg instead of an array. - * @return {function} wrapped - */ -function promisify(originalMethod, options) { - if (originalMethod.promisified_) { - return originalMethod; - } - options = options || {}; - const slice = Array.prototype.slice; - // tslint:disable-next-line:no-any - const wrapper = function () { - let last; - for (last = arguments.length - 1; last >= 0; last--) { - const arg = arguments[last]; - if (typeof arg === 'undefined') { - continue; // skip trailing undefined. - } - if (typeof arg !== 'function') { - break; // non-callback last argument found. - } - return originalMethod.apply(this, arguments); - } - // peel trailing undefined. - const args = slice.call(arguments, 0, last + 1); - // tslint:disable-next-line:variable-name - let PromiseCtor = Promise; - // Because dedupe will likely create a single install of - // @google-cloud/common to be shared amongst all modules, we need to - // localize it at the Service level. - if (this && this.Promise) { - PromiseCtor = this.Promise; - } - return new PromiseCtor((resolve, reject) => { - // tslint:disable-next-line:no-any - args.push((...args) => { - const callbackArgs = slice.call(args); - const err = callbackArgs.shift(); - if (err) { - return reject(err); - } - if (options.singular && callbackArgs.length === 1) { - resolve(callbackArgs[0]); - } - else { - resolve(callbackArgs); - } - }); - originalMethod.apply(this, args); - }); - }; - wrapper.promisified_ = true; - return wrapper; -} -exports.promisify = promisify; -/** - * Promisifies certain Class methods. This will not promisify private or - * streaming methods. - * - * @param {module:common/service} Class - Service class. - * @param {object=} options - Configuration object. - */ -// tslint:disable-next-line:variable-name -function promisifyAll(Class, options) { - const exclude = (options && options.exclude) || []; - const ownPropertyNames = Object.getOwnPropertyNames(Class.prototype); - const methods = ownPropertyNames.filter(methodName => { - // clang-format off - return (!exclude.includes(methodName) && - typeof Class.prototype[methodName] === 'function' && // is it a function? - !/(^_|(Stream|_)|promise$)|^constructor$/.test(methodName) // is it promisable? - ); - // clang-format on - }); - methods.forEach(methodName => { - const originalMethod = Class.prototype[methodName]; - if (!originalMethod.promisified_) { - Class.prototype[methodName] = exports.promisify(originalMethod, options); - } - }); -} -exports.promisifyAll = promisifyAll; -/** - * Wraps a promisy type function to conditionally call a callback function. - * - * @param {function} originalMethod - The method to callbackify. - * @param {object=} options - Callback options. - * @param {boolean} options.singular - Pass to the callback a single arg instead of an array. - * @return {function} wrapped - */ -function callbackify(originalMethod) { - if (originalMethod.callbackified_) { - return originalMethod; - } - // tslint:disable-next-line:no-any - const wrapper = function () { - if (typeof arguments[arguments.length - 1] !== 'function') { - return originalMethod.apply(this, arguments); - } - const cb = Array.prototype.pop.call(arguments); - originalMethod.apply(this, arguments).then( - // tslint:disable-next-line:no-any - (res) => { - res = Array.isArray(res) ? res : [res]; - cb(null, ...res); - }, (err) => cb(err)); - }; - wrapper.callbackified_ = true; - return wrapper; -} -exports.callbackify = callbackify; -/** - * Callbackifies certain Class methods. This will not callbackify private or - * streaming methods. - * - * @param {module:common/service} Class - Service class. - * @param {object=} options - Configuration object. - */ -function callbackifyAll( -// tslint:disable-next-line:variable-name -Class, options) { - const exclude = (options && options.exclude) || []; - const ownPropertyNames = Object.getOwnPropertyNames(Class.prototype); - const methods = ownPropertyNames.filter(methodName => { - // clang-format off - return (!exclude.includes(methodName) && - typeof Class.prototype[methodName] === 'function' && // is it a function? - !/^_|(Stream|_)|^constructor$/.test(methodName) // is it callbackifyable? - ); - // clang-format on - }); - methods.forEach(methodName => { - const originalMethod = Class.prototype[methodName]; - if (!originalMethod.callbackified_) { - Class.prototype[methodName] = exports.callbackify(originalMethod); - } - }); -} -exports.callbackifyAll = callbackifyAll; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/@google-cloud/promisify/package.json b/reverse_engineering/node_modules/@google-cloud/promisify/package.json deleted file mode 100644 index f7d6f26..0000000 --- a/reverse_engineering/node_modules/@google-cloud/promisify/package.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "_from": "@google-cloud/promisify@^2.0.0", - "_id": "@google-cloud/promisify@2.0.3", - "_inBundle": false, - "_integrity": "sha512-d4VSA86eL/AFTe5xtyZX+ePUjE8dIFu2T8zmdeNBSa5/kNgXPCx/o/wbFNHAGLJdGnk1vddRuMESD9HbOC8irw==", - "_location": "/@google-cloud/promisify", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "@google-cloud/promisify@^2.0.0", - "name": "@google-cloud/promisify", - "escapedName": "@google-cloud%2fpromisify", - "scope": "@google-cloud", - "rawSpec": "^2.0.0", - "saveSpec": null, - "fetchSpec": "^2.0.0" - }, - "_requiredBy": [ - "/@google-cloud/bigquery", - "/@google-cloud/common" - ], - "_resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.3.tgz", - "_shasum": "f934b5cdc939e3c7039ff62b9caaf59a9d89e3a8", - "_spec": "@google-cloud/promisify@^2.0.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/@google-cloud/bigquery", - "author": { - "name": "Google Inc." - }, - "bugs": { - "url": "https://github.com/googleapis/nodejs-promisify/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "A simple utility for promisifying functions and classes.", - "devDependencies": { - "@compodoc/compodoc": "^1.1.9", - "@microsoft/api-documenter": "^7.8.10", - "@microsoft/api-extractor": "^7.8.10", - "@types/mocha": "^8.0.0", - "@types/node": "^10.5.2", - "@types/sinon": "^9.0.0", - "c8": "^7.0.0", - "chai": "^4.2.0", - "codecov": "^3.0.4", - "gts": "^2.0.0", - "hard-rejection": "^2.1.0", - "linkinator": "^2.0.0", - "mocha": "^8.0.0", - "sinon": "^9.0.0", - "typescript": "^3.8.3" - }, - "engines": { - "node": ">=10" - }, - "files": [ - "build/src", - "!build/src/**/*.map" - ], - "homepage": "https://github.com/googleapis/nodejs-promisify#readme", - "keywords": [], - "license": "Apache-2.0", - "main": "build/src/index.js", - "name": "@google-cloud/promisify", - "repository": { - "type": "git", - "url": "git+https://github.com/googleapis/nodejs-promisify.git" - }, - "scripts": { - "api-documenter": "api-documenter yaml --input-folder=temp", - "api-extractor": "api-extractor run --local", - "clean": "gts clean", - "compile": "tsc -p .", - "docs": "compodoc src/", - "docs-test": "linkinator docs", - "fix": "gts fix", - "lint": "gts check", - "precompile": "gts clean", - "predocs-test": "npm run docs", - "prelint": "cd samples; npm link ../; npm install", - "prepare": "npm run compile", - "presystem-test": "npm run compile", - "pretest": "npm run compile", - "samples-test": "cd samples/ && npm link ../ && npm test && cd ../", - "system-test": "mocha build/system-test", - "test": "c8 mocha build/test" - }, - "types": "build/src/index.d.ts", - "version": "2.0.3" -} diff --git a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/.github/workflows/release.yml b/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/.github/workflows/release.yml deleted file mode 100644 index 2841cec..0000000 --- a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/.github/workflows/release.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: release - -on: - release: - types: [published] - -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v1 - with: - node-version: 12 - registry-url: https://registry.npmjs.org/ - - run: npm publish --access public - env: - NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} \ No newline at end of file diff --git a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/LICENSE b/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/LICENSE deleted file mode 100644 index c8c4f04..0000000 --- a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2022 Hackolade - -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/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/README.md b/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/README.md deleted file mode 100644 index 0ba7967..0000000 --- a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# SELECT statement SQL parser - -Dialect-agnostic parser of SQL SELECT statements. - -Function parseSelectStatement accepts SQL SELECT statement of different SQL dialects (MySQL, Snowflake, PostgreSQL, MSSQL, etc.) and returns object describing columns and tables names those were used in the query. - -## Installation -``` -npm install @hackolade/sql-select-statement-parser -``` - -## Usage -```javascript -const result = parseSelectStatement(` - SELECT "database".'schema'.table.[column] AS columnAlias - FROM database.schema.table AS tableAlias; -`); -``` - -## Result structure -```javascript -{ - selectItems: [{ // array of selected columns and expressions - name: "column", // column name or * - tableName: "table", // table name - schemaName: "schema", // schema name (or database name for some dialects) - databaseName: "database", // database name (if schemas also exists in the dialect) - originalName: "[column]", // original column name including quotes - // (or square brackets for MSSQL) - alias: "columnAlias", // column alias - fieldReferences: ["column"], // List of column names used in expression. - // Appears only when selected item is - // described by expression. - }], - from: [{ // array of tables described in a FROM clause - table: "table", // table name - schemaName: "schema", // schema name (or database name for some dialects) - databaseName: "database", // database name (if schemas also exists in the dialect) - alias: "tableAlias", // table alias - originalName: "`table`", // original table name including quotes - //(or square brackets for MSSQL) - }] -} -``` - -## License -[MIT](LICENSE) \ No newline at end of file diff --git a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/grammars/SQLSelectLexer.g4 b/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/grammars/SQLSelectLexer.g4 deleted file mode 100644 index 61050c0..0000000 --- a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/grammars/SQLSelectLexer.g4 +++ /dev/null @@ -1,488 +0,0 @@ -lexer grammar SQLSelectLexer; - -EQUAL_OPERATOR: '='; -ASSIGN_OPERATOR: ':='; -NULL_SAFE_EQUAL_OPERATOR: '<=>'; -GREATER_OR_EQUAL_OPERATOR: '>='; -GREATER_THAN_OPERATOR: '>'; -LESS_OR_EQUAL_OPERATOR: '<='; -LESS_THAN_OPERATOR: '<'; -NOT_EQUAL_OPERATOR: '!='; - -PLUS_OPERATOR: '+'; -MINUS_OPERATOR: '-'; -MULT_OPERATOR: '*'; -DIV_OPERATOR: '/'; - -MOD_OPERATOR: '%'; - -LOGICAL_NOT_OPERATOR: '!'; -BITWISE_NOT_OPERATOR: '~'; - -SHIFT_LEFT_OPERATOR: '<<'; -SHIFT_RIGHT_OPERATOR: '>>'; - -LOGICAL_AND_OPERATOR: '&&'; -BITWISE_AND_OPERATOR: '&'; - -BITWISE_XOR_OPERATOR: '^'; - -LOGICAL_OR_OPERATOR: - '||' -; -BITWISE_OR_OPERATOR: '|'; - -DOT_SYMBOL: '.'; -COMMA_SYMBOL: ','; -SEMICOLON_SYMBOL: ';'; -COLON_SYMBOL: ':'; -OPEN_PAR_SYMBOL: '('; -CLOSE_PAR_SYMBOL: ')'; -OPEN_CURLY_SYMBOL: '{'; -CLOSE_CURLY_SYMBOL: '}'; -UNDERLINE_SYMBOL: '_'; -OPEN_BRACKET_SYMBOL: '['; -CLOSE_BRACKET_SYMBOL: ']'; - -JSON_SEPARATOR_SYMBOL: '->' ; -JSON_UNQUOTED_SEPARATOR_SYMBOL: '->>' ; - -AT_SIGN_SYMBOL: '@'; -AT_TEXT_SUFFIX: '@' SIMPLE_IDENTIFIER; - -AT_AT_SIGN_SYMBOL: '@@'; - -NULL2_SYMBOL: '\\N'; -PARAM_MARKER: '?'; -CAST_COLON_SYMBOL: '::'; - -fragment A: [aA]; -fragment B: [bB]; -fragment C: [cC]; -fragment D: [dD]; -fragment E: [eE]; -fragment F: [fF]; -fragment G: [gG]; -fragment H: [hH]; -fragment I: [iI]; -fragment J: [jJ]; -fragment K: [kK]; -fragment L: [lL]; -fragment M: [mM]; -fragment N: [nN]; -fragment O: [oO]; -fragment P: [pP]; -fragment Q: [qQ]; -fragment R: [rR]; -fragment S: [sS]; -fragment T: [tT]; -fragment U: [uU]; -fragment V: [vV]; -fragment W: [wW]; -fragment X: [xX]; -fragment Y: [yY]; -fragment Z: [zZ]; - -fragment DIGIT: [0-9]; -fragment DIGITS: DIGIT+; -fragment HEXDIGIT: [0-9a-fA-F]; - -HEX_NUMBER: ('0x' HEXDIGIT+) | ('x\'' HEXDIGIT+ '\''); -BIN_NUMBER: ('0b' [01]+) | ('b\'' [01]+ '\''); - -INT_NUMBER: DIGITS ; -DECIMAL_NUMBER: DIGITS? DOT_SYMBOL DIGITS; -FLOAT_NUMBER: (DIGITS? DOT_SYMBOL)? DIGITS [eE] (MINUS_OPERATOR | PLUS_OPERATOR)? DIGITS; - -TINYINT_SYMBOL: T I N Y I N T; -SMALLINT_SYMBOL: S M A L L I N T; -MEDIUMINT_SYMBOL: M E D I U M I N T; -BYTE_INT_SYMBOL: B Y T E I N T; -INT_SYMBOL : I N T E G E R | I N T; -BIGINT_SYMBOL: B I G I N T; -SECOND_SYMBOL: S E C O N D; -MINUTE_SYMBOL: M I N U T E; -HOUR_SYMBOL : H O U R; -DAY_SYMBOL : D A Y; -WEEK_SYMBOL : W E E K; -MONTH_SYMBOL: M O N T H; -QUARTER_SYMBOL: Q U A R T E R; -YEAR_SYMBOL : Y E A R; - -DEFAULT_SYMBOL: D E F A U L T; -UNION_SYMBOL: U N I O N; -SELECT_SYMBOL: S E L E C T; -ALL_SYMBOL: A L L; -DISTINCT_SYMBOL: D I S T I N C T; -STRAIGHT_JOIN_SYMBOL: S T R A I G H T '_' J O I N; -HIGH_PRIORITY_SYMBOL: H I G H '_' P R I O R I T Y; -SQL_SMALL_RESULT_SYMBOL: S Q L '_' S M A L L '_' R E S U L T; -SQL_BIG_RESULT_SYMBOL: S Q L '_' B I G '_' R E S U L T; -SQL_BUFFER_RESULT_SYMBOL: S Q L '_' B U F F E R '_' R E S U L T; -SQL_CALC_FOUND_ROWS_SYMBOL: S Q L '_' C A L C '_' F O U N D '_' R O W S; -LIMIT_SYMBOL: L I M I T; -OFFSET_SYMBOL: O F F S E T; -INTO_SYMBOL: I N T O; -OUTFILE_SYMBOL: O U T F I L E; -DUMPFILE_SYMBOL: D U M P F I L E; -PROCEDURE_SYMBOL: P R O C E D U R E; -ANALYSE_SYMBOL: A N A L Y S E; -HAVING_SYMBOL: H A V I N G; -WINDOW_SYMBOL: W I N D O W; -AS_SYMBOL: A S; -PARTITION_SYMBOL: P A R T I T I O N; -BY_SYMBOL: B Y; -ROWS_SYMBOL: R O W S; -RANGE_SYMBOL: R A N G E; -GROUPS_SYMBOL: G R O U P S; -UNBOUNDED_SYMBOL: U N B O U N D E D; -PRECEDING_SYMBOL: P R E C E D I N G; -INTERVAL_SYMBOL: I N T E R V A L; -CURRENT_SYMBOL: C U R R E N T; -ROW_SYMBOL: R O W; -BETWEEN_SYMBOL: B E T W E E N; -AND_SYMBOL: A N D; -FOLLOWING_SYMBOL: F O L L O W I N G; -EXCLUDE_SYMBOL: E X C L U D E; -GROUP_SYMBOL: G R O U P; -TIES_SYMBOL: T I E S; -NO_SYMBOL: N O; -OTHERS_SYMBOL: O T H E R S; -WITH_SYMBOL: W I T H; -WITHOUT_SYMBOL: W I T H O U T; -RECURSIVE_SYMBOL: R E C U R S I V E; -ROLLUP_SYMBOL: R O L L U P; -CUBE_SYMBOL: C U B E; -ORDER_SYMBOL: O R D E R; -ASC_SYMBOL: A S C; -DESC_SYMBOL: D E S C; -FROM_SYMBOL: F R O M; -DUAL_SYMBOL: D U A L; -VALUES_SYMBOL: V A L U E S; -TABLE_SYMBOL: T A B L E; -SQL_NO_CACHE_SYMBOL: S Q L '_' N O '_' C A C H E; -SQL_CACHE_SYMBOL: S Q L '_' C A C H E; -MAX_STATEMENT_TIME_SYMBOL: M A X '_' S T A T E M E N T '_' T I M E; -FOR_SYMBOL: F O R; -OF_SYMBOL: O F; -LOCK_SYMBOL: L O C K; -IN_SYMBOL: I N; -SHARE_SYMBOL: S H A R E; -MODE_SYMBOL: M O D E; -UPDATE_SYMBOL: U P D A T E; -SKIP_SYMBOL: S K I P; -LOCKED_SYMBOL: L O C K E D; -NOWAIT_SYMBOL: N O W A I T; -WHERE_SYMBOL: W H E R E; -OJ_SYMBOL: O J; -ON_SYMBOL: O N; -USING_SYMBOL: U S I N G; -NATURAL_SYMBOL: N A T U R A L; -INNER_SYMBOL: I N N E R; -JOIN_SYMBOL: J O I N; -LEFT_SYMBOL: L E F T; -RIGHT_SYMBOL: R I G H T; -OUTER_SYMBOL: O U T E R; -CROSS_SYMBOL: C R O S S; -LATERAL_SYMBOL: L A T E R A L; -JSON_TABLE_SYMBOL: J S O N '_' T A B L E; -COLUMNS_SYMBOL: C O L U M N S; -ORDINALITY_SYMBOL: O R D I N A L I T Y; -EXISTS_SYMBOL: E X I S T S; -PATH_SYMBOL: P A T H; -NESTED_SYMBOL: N E S T E D; -EMPTY_SYMBOL: E M P T Y; -ERROR_SYMBOL: E R R O R; -NULL_SYMBOL: N U L L; -USE_SYMBOL: U S E; -FORCE_SYMBOL: F O R C E; -IGNORE_SYMBOL: I G N O R E; -KEY_SYMBOL: K E Y; -INDEX_SYMBOL: I N D E X; -PRIMARY_SYMBOL: P R I M A R Y; -IS_SYMBOL: I S; -TRUE_SYMBOL: T R U E; -FALSE_SYMBOL: F A L S E; -UNKNOWN_SYMBOL: U N K N O W N; -NOT_SYMBOL: N O T; -XOR_SYMBOL: X O R; -OR_SYMBOL: O R; -ANY_SYMBOL: A N Y; -MEMBER_SYMBOL: M E M B E R; -SOUNDS_SYMBOL: S O U N D S; -LIKE_SYMBOL: L I K E; -ESCAPE_SYMBOL: E S C A P E; -REGEXP_SYMBOL: R E G E X P; -DIV_SYMBOL: D I V; -MOD_SYMBOL: M O D; -MATCH_SYMBOL: M A T C H; -AGAINST_SYMBOL: A G A I N S T; -BINARY_SYMBOL: B I N A R Y; -CAST_SYMBOL: C A S T; -ARRAY_SYMBOL: A R R A Y; -CASE_SYMBOL: C A S E; -END_SYMBOL: E N D; -CONVERT_SYMBOL: C O N V E R T; -COLLATE_SYMBOL: C O L L A T E; -AVG_SYMBOL: A V G; -BIT_AND_SYMBOL: B I T '_' A N D; -BIT_OR_SYMBOL: B I T '_' O R; -BIT_XOR_SYMBOL: B I T '_' X O R; -COUNT_SYMBOL: C O U N T; -MIN_SYMBOL: M I N; -MAX_SYMBOL: M A X; -STD_SYMBOL: S T D; -VARIANCE_SYMBOL: V A R I A N C E; -STDDEV_SAMP_SYMBOL: S T D D E V '_' S A M P; -VAR_SAMP_SYMBOL: V A R '_' S A M P; -SUM_SYMBOL: S U M; -GROUP_CONCAT_SYMBOL: G R O U P '_' C O N C A T; -SEPARATOR_SYMBOL: S E P A R A T O R; -GROUPING_SYMBOL: G R O U P I N G; -ROW_NUMBER_SYMBOL: R O W '_' N U M B E R; -RANK_SYMBOL: R A N K; -DENSE_RANK_SYMBOL: D E N S E '_' R A N K; -CUME_DIST_SYMBOL: C U M E '_' D I S T; -PERCENT_RANK_SYMBOL: P E R C E N T '_' R A N K; -NTILE_SYMBOL: N T I L E; -LEAD_SYMBOL: L E A D; -LAG_SYMBOL: L A G; -FIRST_VALUE_SYMBOL: F I R S T '_' V A L U E; -LAST_VALUE_SYMBOL: L A S T '_' V A L U E; -NTH_VALUE_SYMBOL: N T H '_' V A L U E; -FIRST_SYMBOL: F I R S T; -LAST_SYMBOL: L A S T; -OVER_SYMBOL: O V E R; -RESPECT_SYMBOL: R E S P E C T; -NULLS_SYMBOL: N U L L S; -JSON_ARRAYAGG_SYMBOL: J S O N '_' A R R A Y A G G; -JSON_OBJECTAGG_SYMBOL: J S O N '_' O B J E C T A G G; -BOOLEAN_SYMBOL: B O O L E A N; -LANGUAGE_SYMBOL: L A N G U A G E; -QUERY_SYMBOL: Q U E R Y; -EXPANSION_SYMBOL: E X P A N S I O N; -CHAR_SYMBOL: C H A R A C T E R | C H A R; -CURRENT_USER_SYMBOL: C U R R E N T '_' U S E R; -DATE_SYMBOL: D A T E; -INSERT_SYMBOL: I N S E R T; -TIME_SYMBOL: T I M E; -TIMESTAMP_SYMBOL: T I M E S T A M P; -TIMESTAMP_LTZ_SYMBOL: T I M E S T A M P L T Z | T I M E S T A M P '_' L T Z; -TIMESTAMP_NTZ_SYMBOL: T I M E S T A M P N T Z | T I M E S T A M P '_' N T Z; -ZONE_SYMBOL: Z O N E; -USER_SYMBOL: U S E R; -ADDDATE_SYMBOL: A D D D A T E; -SUBDATE_SYMBOL: S U B D A T E; -CURDATE_SYMBOL: C U R D A T E; -CURTIME_SYMBOL: C U R T I M E; -DATE_ADD_SYMBOL: D A T E '_' A D D; -DATE_SUB_SYMBOL: D A T E '_' S U B; -EXTRACT_SYMBOL: E X T R A C T; -GET_FORMAT_SYMBOL: G E T '_' F O R M A T; -NOW_SYMBOL: N O W; -POSITION_SYMBOL: P O S I T I O N; -SYSDATE_SYMBOL: S Y S D A T E; -TIMESTAMP_ADD_SYMBOL: T I M E S T A M P '_' A D D; -TIMESTAMP_DIFF_SYMBOL: T I M E S T A M P '_' D I F F; -UTC_DATE_SYMBOL: U T C '_' D A T E; -UTC_TIME_SYMBOL: U T C '_' T I M E; -UTC_TIMESTAMP_SYMBOL: U T C '_' T I M E S T A M P; -ASCII_SYMBOL: A S C I I; -CHARSET_SYMBOL: C H A R S E T; -COALESCE_SYMBOL: C O A L E S C E; -COLLATION_SYMBOL: C O L L A T I O N; -DATABASE_SYMBOL: D A T A B A S E; -IF_SYMBOL: I F; -FORMAT_SYMBOL: F O R M A T; -MICROSECOND_SYMBOL: M I C R O S E C O N D; -OLD_PASSWORD_SYMBOL: O L D '_' P A S S W O R D; -PASSWORD_SYMBOL: P A S S W O R D; -REPEAT_SYMBOL: R E P E A T; -REPLACE_SYMBOL: R E P L A C E; -REVERSE_SYMBOL: R E V E R S E; -ROW_COUNT_SYMBOL: R O W '_' C O U N T; -TRUNCATE_SYMBOL: T R U N C A T E; -WEIGHT_STRING_SYMBOL: W E I G H T '_' S T R I N G; -CONTAINS_SYMBOL: C O N T A I N S; -GEOMETRYCOLLECTION_SYMBOL: G E O M E T R Y C O L L E C T I O N; -LINESTRING_SYMBOL: L I N E S T R I N G; -MULTILINESTRING_SYMBOL: M U L T I L I N E S T R I N G; -MULTIPOINT_SYMBOL: M U L T I P O I N T; -MULTIPOLYGON_SYMBOL: M U L T I P O L Y G O N; -POINT_SYMBOL: P O I N T; -POLYGON_SYMBOL: P O L Y G O N; -LEVEL_SYMBOL: L E V E L; -DATETIME_SYMBOL: D A T E T I M E; -TRIM_SYMBOL: T R I M; -LEADING_SYMBOL: L E A D I N G; -TRAILING_SYMBOL: T R A I L I N G; -BOTH_SYMBOL: B O T H; -STRING_SYMBOL: S T R I N G; -SUBSTRING_SYMBOL: S U B S T R I N G; -WHEN_SYMBOL: W H E N; -THEN_SYMBOL: T H E N; -ELSE_SYMBOL: E L S E; -SIGNED_SYMBOL: S I G N E D; -UNSIGNED_SYMBOL: U N S I G N E D; -DECIMAL_SYMBOL: D E C I M A L | D E C; -JSON_SYMBOL: J S O N; -FLOAT_SYMBOL: F L O A T; -FLOAT_SYMBOL_4: F L O A T '4'; -FLOAT_SYMBOL_8: F L O A T '8'; -SET_SYMBOL: S E T; -SECOND_MICROSECOND_SYMBOL: S E C O N D '_' M I C R O S E C O N D; -MINUTE_MICROSECOND_SYMBOL: M I N U T E '_' M I C R O S E C O N D; -MINUTE_SECOND_SYMBOL: M I N U T E '_' S E C O N D; -HOUR_MICROSECOND_SYMBOL: H O U R '_' M I C R O S E C O N D; -HOUR_SECOND_SYMBOL: H O U R '_' S E C O N D; -HOUR_MINUTE_SYMBOL: H O U R '_' M I N U T E; -DAY_MICROSECOND_SYMBOL: D A Y '_' M I C R O S E C O N D; -DAY_SECOND_SYMBOL: D A Y '_' S E C O N D; -DAY_MINUTE_SYMBOL: D A Y '_' M I N U T E; -DAY_HOUR_SYMBOL: D A Y '_' H O U R; -YEAR_MONTH_SYMBOL: Y E A R '_' M O N T H; -BTREE_SYMBOL: B T R E E; -RTREE_SYMBOL: R T R E E; -HASH_SYMBOL: H A S H; -REAL_SYMBOL: R E A L; -DOUBLE_SYMBOL: D O U B L E; -PRECISION_SYMBOL: P R E C I S I O N; -NUMERIC_SYMBOL: N U M E R I C; -NUMBER_SYMBOL: N U M B E R; -FIXED_SYMBOL: F I X E D; -BIT_SYMBOL: B I T; -BOOL_SYMBOL: B O O L; -VARYING_SYMBOL: V A R Y I N G; -VARCHAR_SYMBOL: V A R C H A R; -NATIONAL_SYMBOL: N A T I O N A L; -NVARCHAR_SYMBOL: N V A R C H A R; -NCHAR_SYMBOL: N C H A R; -VARBINARY_SYMBOL: V A R B I N A R Y; -TINYBLOB_SYMBOL: T I N Y B L O B; -BLOB_SYMBOL: B L O B; -MEDIUMBLOB_SYMBOL: M E D I U M B L O B; -LONGBLOB_SYMBOL: L O N G B L O B; -LONG_SYMBOL: L O N G; -TINYTEXT_SYMBOL: T I N Y T E X T; -TEXT_SYMBOL: T E X T; -MEDIUMTEXT_SYMBOL: M E D I U M T E X T; -LONGTEXT_SYMBOL: L O N G T E X T; -ENUM_SYMBOL: E N U M; -SERIAL_SYMBOL: S E R I A L; -GEOMETRY_SYMBOL: G E O M E T R Y; -ZEROFILL_SYMBOL: Z E R O F I L L; -BYTE_SYMBOL: B Y T E; -UNICODE_SYMBOL: U N I C O D E; -TERMINATED_SYMBOL: T E R M I N A T E D; -OPTIONALLY_SYMBOL: O P T I O N A L L Y; -ENCLOSED_SYMBOL: E N C L O S E D; -ESCAPED_SYMBOL: E S C A P E D; -LINES_SYMBOL: L I N E S; -STARTING_SYMBOL: S T A R T I N G; -GLOBAL_SYMBOL: G L O B A L; -LOCAL_SYMBOL: L O C A L; -SESSION_SYMBOL: S E S S I O N; -VARIANT_SYMBOL: V A R I A N T; -OBJECT_SYMBOL: O B J E C T; -GEOGRAPHY_SYMBOL: G E O G R A P H Y; - -INT1_SYMBOL: I N T '1' -> type(TINYINT_SYMBOL); // Synonym -INT2_SYMBOL: I N T '2' -> type(SMALLINT_SYMBOL); // Synonym -INT3_SYMBOL: I N T '3' -> type(MEDIUMINT_SYMBOL); // Synonym -INT4_SYMBOL: I N T '4' -> type(INT_SYMBOL); // Synonym -INT8_SYMBOL: I N T '8' -> type(BIGINT_SYMBOL); // Synonym - -SQL_TSI_SECOND_SYMBOL: S Q L '_' T S I '_' S E C O N D -> type(SECOND_SYMBOL); // Synonym -SQL_TSI_MINUTE_SYMBOL: S Q L '_' T S I '_' M I N U T E -> type(MINUTE_SYMBOL); // Synonym -SQL_TSI_HOUR_SYMBOL: S Q L '_' T S I '_' H O U R -> type(HOUR_SYMBOL); // Synonym -SQL_TSI_DAY_SYMBOL: S Q L '_' T S I '_' D A Y -> type(DAY_SYMBOL); // Synonym -SQL_TSI_WEEK_SYMBOL: S Q L '_' T S I '_' W E E K -> type(WEEK_SYMBOL); // Synonym -SQL_TSI_MONTH_SYMBOL: S Q L '_' T S I '_' M O N T H -> type(MONTH_SYMBOL); // Synonym -SQL_TSI_QUARTER_SYMBOL: S Q L '_' T S I '_' Q U A R T E R -> type(QUARTER_SYMBOL); // Synonym -SQL_TSI_YEAR_SYMBOL: S Q L '_' T S I '_' Y E A R -> type(YEAR_SYMBOL); // Synonym - -// White space handling -WHITESPACE: [ \t\f\r\n] -> channel(HIDDEN); // Ignore whitespaces. - -// Input not covered elsewhere (unless quoted). -INVALID_INPUT: - [\u0001-\u0008] // Control codes. - | '\u000B' // Line tabulation. - | '\u000C' // Form feed. - | [\u000E-\u001F] // More control codes. -; - -// String and text types. - -// The underscore charset token is used to defined the repertoire of a string, though it conflicts -// with normal identifiers, which also can start with an underscore. -UNDERSCORE_CHARSET: UNDERLINE_SYMBOL [a-z0-9]+ ; - -// Identifiers might start with a digit, even though it is discouraged, and may not consist entirely of digits only. -// All keywords above are automatically excluded. -IDENTIFIER: - DIGITS+ [eE] (LETTER_WHEN_UNQUOTED_NO_DIGIT LETTER_WHEN_UNQUOTED*)? // Have to exclude float pattern, as this rule matches more. - | DIGITS+ LETTER_WITHOUT_FLOAT_PART LETTER_WHEN_UNQUOTED* - | LETTER_WHEN_UNQUOTED_NO_DIGIT LETTER_WHEN_UNQUOTED* // INT_NUMBER matches first if there are only digits. -; - -NCHAR_TEXT: [nN] SINGLE_QUOTED_TEXT; - -// MySQL supports automatic concatenation of multiple single and double quoted strings if they follow each other as separate -// tokens. This is reflected in the `textLiteral` parser rule. -// Here we handle duplication of quotation chars only (which must be replaced by a single char in the target code). - -fragment BACK_TICK: '`'; -fragment SINGLE_QUOTE: '\''; -fragment DOUBLE_QUOTE: '"'; - -BACK_TICK_QUOTED_ID: BACK_TICK .*? BACK_TICK; - -DOUBLE_QUOTED_TEXT: ( - DOUBLE_QUOTE .*? DOUBLE_QUOTE - )+ -; - -SINGLE_QUOTED_TEXT: ( - SINGLE_QUOTE .*? SINGLE_QUOTE - )+ -; - -BRACKET_QUOTED_TEXT: ( - OPEN_BRACKET_SYMBOL .*? CLOSE_BRACKET_SYMBOL - )+ -; - -// There are 3 types of block comments: -// /* ... */ - The standard multi line comment. -// /*! ... */ - A comment used to mask code for other clients. In MySQL the content is handled as normal code. -// /*!12345 ... */ - Same as the previous one except code is only used when the given number is lower -// than the current server version (specifying so the minimum server version the code can run with). -VERSION_COMMENT_START: ('/*!' DIGITS) ( - .*? '*/' - ) -> channel(HIDDEN) -; - -// inVersionComment is a variable in the base lexer. -MYSQL_COMMENT_START: '/*!' -> channel(HIDDEN); -VERSION_COMMENT_END: '*/' -> channel(HIDDEN); -BLOCK_COMMENT: ( '/**/' | '/*' ~[!] .*? '*/') -> channel(HIDDEN); - -POUND_COMMENT: '#' ~([\n\r])* -> channel(HIDDEN); -DASHDASH_COMMENT: DOUBLE_DASH ([ \t] (~[\n\r])* | LINEBREAK | EOF) -> channel(HIDDEN); - -fragment DOUBLE_DASH: '--'; -fragment LINEBREAK: [\n\r]; - -fragment SIMPLE_IDENTIFIER: (DIGIT | [a-zA-Z_$] | DOT_SYMBOL)+; - -fragment ML_COMMENT_HEAD: '/*'; -fragment ML_COMMENT_END: '*/'; - -// As defined in https://dev.mysql.com/doc/refman/8.0/en/identifiers.html. -fragment LETTER_WHEN_UNQUOTED: DIGIT | LETTER_WHEN_UNQUOTED_NO_DIGIT; - -fragment LETTER_WHEN_UNQUOTED_NO_DIGIT: [a-zA-Z_$\u0080-\uffff]; - -// Any letter but without e/E and digits (which are used to match a decimal number). -fragment LETTER_WITHOUT_FLOAT_PART: [a-df-zA-DF-Z_$\u0080-\uffff]; \ No newline at end of file diff --git a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/grammars/SQLSelectParser.g4 b/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/grammars/SQLSelectParser.g4 deleted file mode 100644 index fd2c229..0000000 --- a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/grammars/SQLSelectParser.g4 +++ /dev/null @@ -1,1400 +0,0 @@ -parser grammar SQLSelectParser; - -options { - tokenVocab = SQLSelectLexer; -} - -query: - withClause? selectStatement (SEMICOLON_SYMBOL EOF? | EOF) -; - -values: - (expr | DEFAULT_SYMBOL) (COMMA_SYMBOL (expr | DEFAULT_SYMBOL))* -; -selectStatement: - queryExpression lockingClauseList? - | queryExpressionParens - | selectStatementWithInto -; - -selectStatementWithInto: - OPEN_PAR_SYMBOL selectStatementWithInto CLOSE_PAR_SYMBOL - | queryExpression intoClause lockingClauseList? - | lockingClauseList intoClause -; - -queryExpression: - (withClause)? ( - queryExpressionBody orderClause? limitClause? - | queryExpressionParens orderClause? limitClause? - ) (procedureAnalyseClause)? -; - -queryExpressionBody: - ( - queryPrimary - | queryExpressionParens UNION_SYMBOL unionOption? ( - queryPrimary - | queryExpressionParens - ) - ) (UNION_SYMBOL unionOption? ( queryPrimary | queryExpressionParens))* -; - -queryExpressionParens: - OPEN_PAR_SYMBOL ( - queryExpressionParens - | queryExpression lockingClauseList? - ) CLOSE_PAR_SYMBOL -; - -queryPrimary: - querySpecification - | tableValueConstructor - | explicitTable -; - -querySpecification: - SELECT_SYMBOL selectOption* selectItemList intoClause? fromClause? whereClause? groupByClause? havingClause? ( - windowClause - )? -; - -subquery: - query | queryExpressionParens -; - -querySpecOption: - ALL_SYMBOL - | DISTINCT_SYMBOL - | STRAIGHT_JOIN_SYMBOL - | HIGH_PRIORITY_SYMBOL - | SQL_SMALL_RESULT_SYMBOL - | SQL_BIG_RESULT_SYMBOL - | SQL_BUFFER_RESULT_SYMBOL - | SQL_CALC_FOUND_ROWS_SYMBOL -; - -limitClause: - LIMIT_SYMBOL limitOptions -; - -limitOptions: - limitOption ((COMMA_SYMBOL | OFFSET_SYMBOL) limitOption)? -; - -limitOption: - identifier - | (PARAM_MARKER | INT_NUMBER) -; - -intoClause: - INTO_SYMBOL ( - OUTFILE_SYMBOL textStringLiteral charsetClause? fieldsClause? linesClause? - | DUMPFILE_SYMBOL textStringLiteral - | (textOrIdentifier | userVariable) ( - COMMA_SYMBOL (textOrIdentifier | userVariable) - )* - ) -; - -procedureAnalyseClause: - PROCEDURE_SYMBOL ANALYSE_SYMBOL OPEN_PAR_SYMBOL ( - INT_NUMBER (COMMA_SYMBOL INT_NUMBER)? - )? CLOSE_PAR_SYMBOL -; - -havingClause: - HAVING_SYMBOL expr -; - -windowClause: - WINDOW_SYMBOL windowDefinition (COMMA_SYMBOL windowDefinition)* -; - -windowDefinition: - identifier AS_SYMBOL windowSpec -; - -windowSpec: - OPEN_PAR_SYMBOL windowSpecDetails CLOSE_PAR_SYMBOL -; - -windowSpecDetails: - identifier? (PARTITION_SYMBOL BY_SYMBOL orderList)? orderClause? windowFrameClause? -; - -windowFrameClause: - windowFrameUnits windowFrameExtent windowFrameExclusion? -; - -windowFrameUnits: - ROWS_SYMBOL - | RANGE_SYMBOL - | GROUPS_SYMBOL -; - -windowFrameExtent: - windowFrameStart - | windowFrameBetween -; - -windowFrameStart: - UNBOUNDED_SYMBOL PRECEDING_SYMBOL - | ulonglong_number PRECEDING_SYMBOL - | PARAM_MARKER PRECEDING_SYMBOL - | INTERVAL_SYMBOL expr interval PRECEDING_SYMBOL - | CURRENT_SYMBOL ROW_SYMBOL -; - -windowFrameBetween: - BETWEEN_SYMBOL windowFrameBound AND_SYMBOL windowFrameBound -; - -windowFrameBound: - windowFrameStart - | UNBOUNDED_SYMBOL FOLLOWING_SYMBOL - | ulonglong_number FOLLOWING_SYMBOL - | PARAM_MARKER FOLLOWING_SYMBOL - | INTERVAL_SYMBOL expr interval FOLLOWING_SYMBOL -; - -windowFrameExclusion: - EXCLUDE_SYMBOL ( - CURRENT_SYMBOL ROW_SYMBOL - | GROUP_SYMBOL - | TIES_SYMBOL - | NO_SYMBOL OTHERS_SYMBOL - ) -; - -withClause: - WITH_SYMBOL RECURSIVE_SYMBOL? commonTableExpression ( - COMMA_SYMBOL commonTableExpression - )* -; - -commonTableExpression: - identifier columnInternalRefList? AS_SYMBOL subquery -; - -groupByClause: - GROUP_SYMBOL BY_SYMBOL orderList olapOption? -; - -olapOption: - WITH_SYMBOL ROLLUP_SYMBOL - | WITH_SYMBOL CUBE_SYMBOL -; - -orderClause: - ORDER_SYMBOL BY_SYMBOL orderList -; - -direction: - ASC_SYMBOL - | DESC_SYMBOL -; - -fromClause: - FROM_SYMBOL (DUAL_SYMBOL | tableReferenceList) -; - -tableReferenceList: - tableReference (COMMA_SYMBOL tableReference)* -; - -tableValueConstructor: - VALUES_SYMBOL rowValueExplicit (COMMA_SYMBOL rowValueExplicit)* -; - -explicitTable: - TABLE_SYMBOL qualifiedIdentifier -; - -rowValueExplicit: - ROW_SYMBOL OPEN_PAR_SYMBOL values? CLOSE_PAR_SYMBOL -; - -selectOption: - querySpecOption - | SQL_NO_CACHE_SYMBOL - | SQL_CACHE_SYMBOL - | MAX_STATEMENT_TIME_SYMBOL EQUAL_OPERATOR real_ulong_number -; - -lockingClauseList: - lockingClause+ -; - -lockingClause: - FOR_SYMBOL lockStrengh (OF_SYMBOL tableAliasRefList)? ( - lockedRowAction - )? - | LOCK_SYMBOL IN_SYMBOL SHARE_SYMBOL MODE_SYMBOL -; - -lockStrengh: - UPDATE_SYMBOL - | SHARE_SYMBOL -; - -lockedRowAction: - SKIP_SYMBOL LOCKED_SYMBOL - | NOWAIT_SYMBOL -; - -selectItemList: (selectItem | MULT_OPERATOR) (COMMA_SYMBOL selectItem)* -; - -selectItem: - qualifiedIdentifier selectAlias? - | expr selectAlias? -; - -selectAlias: - AS_SYMBOL? (identifier | textStringLiteral) -; - -whereClause: - WHERE_SYMBOL expr -; - -tableReference: ( - tableFactor - | OPEN_CURLY_SYMBOL (identifier | OJ_SYMBOL) escapedTableReference CLOSE_CURLY_SYMBOL - ) joinedTable* -; - -escapedTableReference: - tableFactor joinedTable* -; - -joinedTable: - innerJoinType tableReference ( - ON_SYMBOL expr - | USING_SYMBOL identifierListWithParentheses - )? - | outerJoinType tableReference ( - ON_SYMBOL expr - | USING_SYMBOL identifierListWithParentheses - ) - | naturalJoinType tableFactor -; - -naturalJoinType: - NATURAL_SYMBOL INNER_SYMBOL? JOIN_SYMBOL - | NATURAL_SYMBOL (LEFT_SYMBOL | RIGHT_SYMBOL) OUTER_SYMBOL? JOIN_SYMBOL -; - -innerJoinType: - (INNER_SYMBOL | CROSS_SYMBOL)? JOIN_SYMBOL - | STRAIGHT_JOIN_SYMBOL -; - -outerJoinType: - (LEFT_SYMBOL | RIGHT_SYMBOL) OUTER_SYMBOL? JOIN_SYMBOL -; - -tableFactor: - singleTable - | singleTableParens - | derivedTable - | tableReferenceListParens - | tableFunction -; - -singleTable: - qualifiedIdentifier usePartition? tableAlias? indexHintList? -; - -singleTableParens: - OPEN_PAR_SYMBOL (singleTable | singleTableParens) CLOSE_PAR_SYMBOL -; - -derivedTable: - subquery tableAlias? (columnInternalRefList)? - | LATERAL_SYMBOL subquery tableAlias? columnInternalRefList? -; - -tableReferenceListParens: - OPEN_PAR_SYMBOL (tableReferenceList | tableReferenceListParens) CLOSE_PAR_SYMBOL -; - -tableFunction: - JSON_TABLE_SYMBOL OPEN_PAR_SYMBOL expr COMMA_SYMBOL textStringLiteral columnsClause CLOSE_PAR_SYMBOL tableAlias? -; - -columnsClause: - COLUMNS_SYMBOL OPEN_PAR_SYMBOL jtColumn (COMMA_SYMBOL jtColumn)* CLOSE_PAR_SYMBOL -; - -jtColumn: - identifier FOR_SYMBOL ORDINALITY_SYMBOL - | identifier dataType (collate)? EXISTS_SYMBOL? PATH_SYMBOL textStringLiteral onEmptyOrError? - | NESTED_SYMBOL PATH_SYMBOL textStringLiteral columnsClause -; - -onEmptyOrError: - onEmpty onError? - | onError onEmpty? -; - -onEmpty: - jtOnResponse ON_SYMBOL EMPTY_SYMBOL -; - -onError: - jtOnResponse ON_SYMBOL ERROR_SYMBOL -; - -jtOnResponse: - ERROR_SYMBOL - | NULL_SYMBOL - | DEFAULT_SYMBOL textStringLiteral -; - -unionOption: - DISTINCT_SYMBOL - | ALL_SYMBOL -; - -tableAlias: - (AS_SYMBOL | EQUAL_OPERATOR)? identifier -; - -indexHintList: - indexHint (COMMA_SYMBOL indexHint)* -; - -indexHint: - indexHintType keyOrIndex indexHintClause? OPEN_PAR_SYMBOL indexList CLOSE_PAR_SYMBOL - | USE_SYMBOL keyOrIndex indexHintClause? OPEN_PAR_SYMBOL indexList? CLOSE_PAR_SYMBOL -; - -indexHintType: - FORCE_SYMBOL - | IGNORE_SYMBOL -; - -keyOrIndex: - KEY_SYMBOL - | INDEX_SYMBOL -; - -indexHintClause: - FOR_SYMBOL (JOIN_SYMBOL | ORDER_SYMBOL BY_SYMBOL | GROUP_SYMBOL BY_SYMBOL) -; - -indexList: - indexListElement (COMMA_SYMBOL indexListElement)* -; - -indexListElement: - identifier - | PRIMARY_SYMBOL -; - -//----------------- Expression support --------------------------------------------------------------------------------- - -expr: - boolPri (IS_SYMBOL notRule? (TRUE_SYMBOL | FALSE_SYMBOL | UNKNOWN_SYMBOL))? - | NOT_SYMBOL expr - | expr (AND_SYMBOL | LOGICAL_AND_OPERATOR) expr - | expr XOR_SYMBOL expr - | expr (OR_SYMBOL | LOGICAL_OR_OPERATOR) expr -; - -boolPri: - predicate - | boolPri IS_SYMBOL notRule? NULL_SYMBOL - | boolPri compOp predicate - | boolPri compOp (ALL_SYMBOL | ANY_SYMBOL) subquery -; - -compOp: - EQUAL_OPERATOR - | NULL_SAFE_EQUAL_OPERATOR - | GREATER_OR_EQUAL_OPERATOR - | GREATER_THAN_OPERATOR - | LESS_OR_EQUAL_OPERATOR - | LESS_THAN_OPERATOR - | NOT_EQUAL_OPERATOR -; - -predicate: - bitExpr ( - notRule? predicateOperations - | MEMBER_SYMBOL OF_SYMBOL? simpleExprWithParentheses - | SOUNDS_SYMBOL LIKE_SYMBOL bitExpr - )? -; - -predicateOperations: - IN_SYMBOL (subquery | OPEN_PAR_SYMBOL exprList CLOSE_PAR_SYMBOL) - | BETWEEN_SYMBOL bitExpr AND_SYMBOL predicate - | LIKE_SYMBOL simpleExpr (ESCAPE_SYMBOL simpleExpr)? - | REGEXP_SYMBOL bitExpr -; - -bitExpr: - simpleExpr - | bitExpr BITWISE_XOR_OPERATOR bitExpr - | bitExpr ( - MULT_OPERATOR - | DIV_OPERATOR - | MOD_OPERATOR - | DIV_SYMBOL - | MOD_SYMBOL - ) bitExpr - | bitExpr (PLUS_OPERATOR | MINUS_OPERATOR) bitExpr - | bitExpr (PLUS_OPERATOR | MINUS_OPERATOR) INTERVAL_SYMBOL expr interval - | bitExpr (SHIFT_LEFT_OPERATOR | SHIFT_RIGHT_OPERATOR) bitExpr - | bitExpr BITWISE_AND_OPERATOR bitExpr - | bitExpr BITWISE_OR_OPERATOR bitExpr -; - -simpleExpr: - variable (equal expr)? - | qualifiedIdentifier jsonOperator? - | runtimeFunctionCall - | functionCall - | simpleExpr COLLATE_SYMBOL textOrIdentifier - | literal - | PARAM_MARKER - | sumExpr - | groupingOperation - | windowFunctionCall - | simpleExpr LOGICAL_OR_OPERATOR simpleExpr - | (PLUS_OPERATOR | MINUS_OPERATOR | BITWISE_NOT_OPERATOR) simpleExpr - | not2Rule simpleExpr - | ROW_SYMBOL? OPEN_PAR_SYMBOL exprList CLOSE_PAR_SYMBOL - | EXISTS_SYMBOL? subquery - | OPEN_CURLY_SYMBOL identifier expr CLOSE_CURLY_SYMBOL - | MATCH_SYMBOL identListArg AGAINST_SYMBOL OPEN_PAR_SYMBOL bitExpr fulltextOptions? CLOSE_PAR_SYMBOL - | BINARY_SYMBOL simpleExpr - | CAST_SYMBOL OPEN_PAR_SYMBOL expr AS_SYMBOL dataType ARRAY_SYMBOL? CLOSE_PAR_SYMBOL - | simpleExpr CAST_COLON_SYMBOL dataType - | CASE_SYMBOL expr? (whenExpression thenExpression)+ elseExpression? END_SYMBOL - | CONVERT_SYMBOL OPEN_PAR_SYMBOL expr COMMA_SYMBOL dataType CLOSE_PAR_SYMBOL - | CONVERT_SYMBOL OPEN_PAR_SYMBOL expr USING_SYMBOL charsetName CLOSE_PAR_SYMBOL - | DEFAULT_SYMBOL OPEN_PAR_SYMBOL qualifiedIdentifier CLOSE_PAR_SYMBOL - | VALUES_SYMBOL OPEN_PAR_SYMBOL qualifiedIdentifier CLOSE_PAR_SYMBOL - | INTERVAL_SYMBOL expr interval PLUS_OPERATOR expr -; - -jsonOperator: - (JSON_SEPARATOR_SYMBOL | JSON_UNQUOTED_SEPARATOR_SYMBOL) (textStringLiteral | expr) -; - -sumExpr: - AVG_SYMBOL OPEN_PAR_SYMBOL DISTINCT_SYMBOL? inSumExpr CLOSE_PAR_SYMBOL ( - windowingClause - )? - | (BIT_AND_SYMBOL | BIT_OR_SYMBOL | BIT_XOR_SYMBOL) OPEN_PAR_SYMBOL inSumExpr CLOSE_PAR_SYMBOL ( - windowingClause - )? - | jsonFunction - | COUNT_SYMBOL OPEN_PAR_SYMBOL ALL_SYMBOL? MULT_OPERATOR CLOSE_PAR_SYMBOL ( - windowingClause - )? - | COUNT_SYMBOL OPEN_PAR_SYMBOL ( - ALL_SYMBOL? MULT_OPERATOR - | inSumExpr - | DISTINCT_SYMBOL exprList - ) CLOSE_PAR_SYMBOL (windowingClause)? - | MIN_SYMBOL OPEN_PAR_SYMBOL DISTINCT_SYMBOL? inSumExpr CLOSE_PAR_SYMBOL ( - windowingClause - )? - | MAX_SYMBOL OPEN_PAR_SYMBOL DISTINCT_SYMBOL? inSumExpr CLOSE_PAR_SYMBOL ( - windowingClause - )? - | STD_SYMBOL OPEN_PAR_SYMBOL inSumExpr CLOSE_PAR_SYMBOL ( - windowingClause - )? - | VARIANCE_SYMBOL OPEN_PAR_SYMBOL inSumExpr CLOSE_PAR_SYMBOL ( - windowingClause - )? - | STDDEV_SAMP_SYMBOL OPEN_PAR_SYMBOL inSumExpr CLOSE_PAR_SYMBOL ( - windowingClause - )? - | VAR_SAMP_SYMBOL OPEN_PAR_SYMBOL inSumExpr CLOSE_PAR_SYMBOL ( - windowingClause - )? - | SUM_SYMBOL OPEN_PAR_SYMBOL DISTINCT_SYMBOL? inSumExpr CLOSE_PAR_SYMBOL ( - windowingClause - )? - | GROUP_CONCAT_SYMBOL OPEN_PAR_SYMBOL DISTINCT_SYMBOL? exprList orderClause? ( - SEPARATOR_SYMBOL textString - )? CLOSE_PAR_SYMBOL (windowingClause)? -; - -groupingOperation: - GROUPING_SYMBOL OPEN_PAR_SYMBOL exprList CLOSE_PAR_SYMBOL -; - -windowFunctionCall: - ( - ROW_NUMBER_SYMBOL - | RANK_SYMBOL - | DENSE_RANK_SYMBOL - | CUME_DIST_SYMBOL - | PERCENT_RANK_SYMBOL - ) parentheses windowingClause - | NTILE_SYMBOL simpleExprWithParentheses windowingClause - | (LEAD_SYMBOL | LAG_SYMBOL) OPEN_PAR_SYMBOL expr leadLagInfo? CLOSE_PAR_SYMBOL nullTreatment? windowingClause - | (FIRST_VALUE_SYMBOL | LAST_VALUE_SYMBOL) exprWithParentheses nullTreatment? windowingClause - | NTH_VALUE_SYMBOL OPEN_PAR_SYMBOL expr COMMA_SYMBOL simpleExpr CLOSE_PAR_SYMBOL ( - FROM_SYMBOL (FIRST_SYMBOL | LAST_SYMBOL) - )? nullTreatment? windowingClause -; - -windowingClause: - OVER_SYMBOL (identifier | windowSpec) -; - -leadLagInfo: - COMMA_SYMBOL (ulonglong_number | PARAM_MARKER) (COMMA_SYMBOL expr)? -; - -nullTreatment: - (RESPECT_SYMBOL | IGNORE_SYMBOL) NULLS_SYMBOL -; - -jsonFunction: - JSON_ARRAYAGG_SYMBOL OPEN_PAR_SYMBOL inSumExpr CLOSE_PAR_SYMBOL windowingClause? - | JSON_OBJECTAGG_SYMBOL OPEN_PAR_SYMBOL inSumExpr COMMA_SYMBOL inSumExpr CLOSE_PAR_SYMBOL windowingClause? -; - -inSumExpr: - ALL_SYMBOL? expr -; - -identListArg: - identList - | OPEN_PAR_SYMBOL identList CLOSE_PAR_SYMBOL -; - -identList: - qualifiedIdentifier (COMMA_SYMBOL qualifiedIdentifier)* -; - -fulltextOptions: - IN_SYMBOL BOOLEAN_SYMBOL MODE_SYMBOL - | IN_SYMBOL NATURAL_SYMBOL LANGUAGE_SYMBOL MODE_SYMBOL ( - WITH_SYMBOL QUERY_SYMBOL EXPANSION_SYMBOL - )? - | WITH_SYMBOL QUERY_SYMBOL EXPANSION_SYMBOL -; - -runtimeFunctionCall: - // Function names that are keywords. - CHAR_SYMBOL OPEN_PAR_SYMBOL exprList (USING_SYMBOL charsetName)? CLOSE_PAR_SYMBOL - | CURRENT_USER_SYMBOL parentheses? - | DATE_SYMBOL exprWithParentheses - | DAY_SYMBOL exprWithParentheses - | HOUR_SYMBOL exprWithParentheses - | INSERT_SYMBOL OPEN_PAR_SYMBOL expr COMMA_SYMBOL expr COMMA_SYMBOL expr COMMA_SYMBOL expr CLOSE_PAR_SYMBOL - | INTERVAL_SYMBOL OPEN_PAR_SYMBOL expr (COMMA_SYMBOL expr)+ CLOSE_PAR_SYMBOL - | LEFT_SYMBOL OPEN_PAR_SYMBOL expr COMMA_SYMBOL expr CLOSE_PAR_SYMBOL - | MINUTE_SYMBOL exprWithParentheses - | MONTH_SYMBOL exprWithParentheses - | RIGHT_SYMBOL OPEN_PAR_SYMBOL expr COMMA_SYMBOL expr CLOSE_PAR_SYMBOL - | SECOND_SYMBOL exprWithParentheses - | TIME_SYMBOL exprWithParentheses - | TIMESTAMP_SYMBOL OPEN_PAR_SYMBOL expr (COMMA_SYMBOL expr)? CLOSE_PAR_SYMBOL - | trimFunction - | USER_SYMBOL parentheses - | VALUES_SYMBOL exprWithParentheses - | YEAR_SYMBOL exprWithParentheses - - // Function names that are not keywords. - | (ADDDATE_SYMBOL | SUBDATE_SYMBOL) OPEN_PAR_SYMBOL expr COMMA_SYMBOL ( - expr - | INTERVAL_SYMBOL expr interval - ) CLOSE_PAR_SYMBOL - | CURDATE_SYMBOL parentheses? - | CURTIME_SYMBOL timeFunctionParameters? - | (DATE_ADD_SYMBOL | DATE_SUB_SYMBOL) OPEN_PAR_SYMBOL expr COMMA_SYMBOL INTERVAL_SYMBOL expr interval CLOSE_PAR_SYMBOL - | EXTRACT_SYMBOL OPEN_PAR_SYMBOL interval FROM_SYMBOL expr CLOSE_PAR_SYMBOL - | GET_FORMAT_SYMBOL OPEN_PAR_SYMBOL dateTimeTtype COMMA_SYMBOL expr CLOSE_PAR_SYMBOL - | NOW_SYMBOL timeFunctionParameters? - | POSITION_SYMBOL OPEN_PAR_SYMBOL bitExpr IN_SYMBOL expr CLOSE_PAR_SYMBOL - | substringFunction - | SYSDATE_SYMBOL timeFunctionParameters? - | (TIMESTAMP_ADD_SYMBOL | TIMESTAMP_DIFF_SYMBOL) OPEN_PAR_SYMBOL intervalTimeStamp COMMA_SYMBOL expr COMMA_SYMBOL expr - CLOSE_PAR_SYMBOL - | UTC_DATE_SYMBOL parentheses? - | UTC_TIME_SYMBOL timeFunctionParameters? - | UTC_TIMESTAMP_SYMBOL timeFunctionParameters? - - // Function calls with other conflicts. - | ASCII_SYMBOL exprWithParentheses - | CHARSET_SYMBOL exprWithParentheses - | COALESCE_SYMBOL exprListWithParentheses - | COLLATION_SYMBOL exprWithParentheses - | DATABASE_SYMBOL parentheses - | IF_SYMBOL OPEN_PAR_SYMBOL expr COMMA_SYMBOL expr COMMA_SYMBOL expr CLOSE_PAR_SYMBOL - | FORMAT_SYMBOL OPEN_PAR_SYMBOL expr COMMA_SYMBOL expr (COMMA_SYMBOL expr)? CLOSE_PAR_SYMBOL - | MICROSECOND_SYMBOL exprWithParentheses - | MOD_SYMBOL OPEN_PAR_SYMBOL expr COMMA_SYMBOL expr CLOSE_PAR_SYMBOL - | OLD_PASSWORD_SYMBOL OPEN_PAR_SYMBOL textLiteral CLOSE_PAR_SYMBOL - | PASSWORD_SYMBOL exprWithParentheses - | QUARTER_SYMBOL exprWithParentheses - | REPEAT_SYMBOL OPEN_PAR_SYMBOL expr COMMA_SYMBOL expr CLOSE_PAR_SYMBOL - | REPLACE_SYMBOL OPEN_PAR_SYMBOL expr COMMA_SYMBOL expr COMMA_SYMBOL expr CLOSE_PAR_SYMBOL - | REVERSE_SYMBOL exprWithParentheses - | ROW_COUNT_SYMBOL parentheses - | TRUNCATE_SYMBOL OPEN_PAR_SYMBOL expr COMMA_SYMBOL expr CLOSE_PAR_SYMBOL - | WEEK_SYMBOL OPEN_PAR_SYMBOL expr (COMMA_SYMBOL expr)? CLOSE_PAR_SYMBOL - | WEIGHT_STRING_SYMBOL OPEN_PAR_SYMBOL expr ( - (AS_SYMBOL CHAR_SYMBOL wsNumCodepoints)? ( - weightStringLevels - )? - | AS_SYMBOL BINARY_SYMBOL wsNumCodepoints - | COMMA_SYMBOL ulong_number COMMA_SYMBOL ulong_number COMMA_SYMBOL ulong_number - ) CLOSE_PAR_SYMBOL - | geometryFunction -; - -geometryFunction: - CONTAINS_SYMBOL OPEN_PAR_SYMBOL expr COMMA_SYMBOL expr CLOSE_PAR_SYMBOL - | GEOMETRYCOLLECTION_SYMBOL OPEN_PAR_SYMBOL exprList? CLOSE_PAR_SYMBOL - | LINESTRING_SYMBOL exprListWithParentheses - | MULTILINESTRING_SYMBOL exprListWithParentheses - | MULTIPOINT_SYMBOL exprListWithParentheses - | MULTIPOLYGON_SYMBOL exprListWithParentheses - | POINT_SYMBOL OPEN_PAR_SYMBOL expr COMMA_SYMBOL expr CLOSE_PAR_SYMBOL - | POLYGON_SYMBOL exprListWithParentheses -; - -timeFunctionParameters: - OPEN_PAR_SYMBOL fractionalPrecision? CLOSE_PAR_SYMBOL -; - -fractionalPrecision: - INT_NUMBER -; - -weightStringLevels: - LEVEL_SYMBOL ( - real_ulong_number MINUS_OPERATOR real_ulong_number - | weightStringLevelListItem (COMMA_SYMBOL weightStringLevelListItem)* - ) -; - -weightStringLevelListItem: - real_ulong_number ((ASC_SYMBOL | DESC_SYMBOL) REVERSE_SYMBOL? | REVERSE_SYMBOL)? -; - -dateTimeTtype: - DATE_SYMBOL - | TIME_SYMBOL - | DATETIME_SYMBOL - | TIMESTAMP_SYMBOL -; - -trimFunction: - TRIM_SYMBOL OPEN_PAR_SYMBOL ( - expr (FROM_SYMBOL expr)? - | LEADING_SYMBOL expr? FROM_SYMBOL expr - | TRAILING_SYMBOL expr? FROM_SYMBOL expr - | BOTH_SYMBOL expr? FROM_SYMBOL expr - ) CLOSE_PAR_SYMBOL -; - -substringFunction: - SUBSTRING_SYMBOL OPEN_PAR_SYMBOL expr ( - COMMA_SYMBOL expr (COMMA_SYMBOL expr)? - | FROM_SYMBOL expr (FOR_SYMBOL expr)? - ) CLOSE_PAR_SYMBOL -; - -functionCall: - pureIdentifier OPEN_PAR_SYMBOL udfExprList? CLOSE_PAR_SYMBOL // For both UDF + other functions. - | qualifiedIdentifier OPEN_PAR_SYMBOL exprList? CLOSE_PAR_SYMBOL // Other functions only. -; - -udfExprList: - udfExpr (COMMA_SYMBOL udfExpr)* -; - -udfExpr: - expr selectAlias? -; - -variable: - userVariable - | systemVariable -; - -userVariable: - AT_SIGN_SYMBOL textOrIdentifier - | AT_TEXT_SUFFIX -; - -systemVariable: - AT_AT_SIGN_SYMBOL varIdentType? textOrIdentifier dotIdentifier? -; - -whenExpression: - WHEN_SYMBOL expr -; - -thenExpression: - THEN_SYMBOL expr -; - -elseExpression: - ELSE_SYMBOL expr -; - -exprList: - expr (COMMA_SYMBOL expr)* -; - -charset: - CHAR_SYMBOL SET_SYMBOL - | CHARSET_SYMBOL -; - -notRule: - NOT_SYMBOL -; - -not2Rule: - LOGICAL_NOT_OPERATOR -; - -interval: - intervalTimeStamp - | ( - SECOND_MICROSECOND_SYMBOL - | MINUTE_MICROSECOND_SYMBOL - | MINUTE_SECOND_SYMBOL - | HOUR_MICROSECOND_SYMBOL - | HOUR_SECOND_SYMBOL - | HOUR_MINUTE_SYMBOL - | DAY_MICROSECOND_SYMBOL - | DAY_SECOND_SYMBOL - | DAY_MINUTE_SYMBOL - | DAY_HOUR_SYMBOL - | YEAR_MONTH_SYMBOL - ) -; - -intervalTimeStamp: - MICROSECOND_SYMBOL - | SECOND_SYMBOL - | MINUTE_SYMBOL - | HOUR_SYMBOL - | DAY_SYMBOL - | WEEK_SYMBOL - | MONTH_SYMBOL - | QUARTER_SYMBOL - | YEAR_SYMBOL -; - -exprListWithParentheses: - OPEN_PAR_SYMBOL exprList CLOSE_PAR_SYMBOL -; - -exprWithParentheses: - OPEN_PAR_SYMBOL expr CLOSE_PAR_SYMBOL -; - -simpleExprWithParentheses: - OPEN_PAR_SYMBOL simpleExpr CLOSE_PAR_SYMBOL -; - -orderList: - orderExpression (COMMA_SYMBOL orderExpression)* -; - -orderExpression: - expr direction? -; - -indexType: - (BTREE_SYMBOL | RTREE_SYMBOL | HASH_SYMBOL) -; - -dataType: - ( - INT_SYMBOL - | BYTE_INT_SYMBOL - | TINYINT_SYMBOL - | SMALLINT_SYMBOL - | MEDIUMINT_SYMBOL - | BIGINT_SYMBOL - | DECIMAL_SYMBOL - | NUMERIC_SYMBOL - | NUMBER_SYMBOL - ) fieldLength? fieldOptions? - | (REAL_SYMBOL | DOUBLE_SYMBOL PRECISION_SYMBOL?) precision? fieldOptions? - | (FLOAT_SYMBOL_4 | FLOAT_SYMBOL_8 | FLOAT_SYMBOL | DECIMAL_SYMBOL | NUMERIC_SYMBOL | FIXED_SYMBOL) floatOptions? fieldOptions? - | BIT_SYMBOL fieldLength? - | (BOOL_SYMBOL | BOOLEAN_SYMBOL) - | nchar fieldLength? BINARY_SYMBOL? - | BINARY_SYMBOL fieldLength? - | (VARCHAR_SYMBOL | CHAR_SYMBOL | CHAR_SYMBOL VARYING_SYMBOL | STRING_SYMBOL | TEXT_SYMBOL) fieldLength charsetWithOptBinary? - | ( - NATIONAL_SYMBOL VARCHAR_SYMBOL - | NVARCHAR_SYMBOL - | NCHAR_SYMBOL VARCHAR_SYMBOL - | NATIONAL_SYMBOL CHAR_SYMBOL VARYING_SYMBOL - | NCHAR_SYMBOL VARYING_SYMBOL - ) fieldLength BINARY_SYMBOL? - | VARBINARY_SYMBOL fieldLength - | YEAR_SYMBOL fieldLength? fieldOptions? - | DATE_SYMBOL - | TIME_SYMBOL typeDatetimePrecision? - | TIMESTAMP_SYMBOL typeDatetimePrecision? - | TIMESTAMP_SYMBOL WITH_SYMBOL LOCAL_SYMBOL TIME_SYMBOL ZONE_SYMBOL typeDatetimePrecision? - | TIMESTAMP_SYMBOL WITHOUT_SYMBOL LOCAL_SYMBOL TIME_SYMBOL ZONE_SYMBOL typeDatetimePrecision? - | TIMESTAMP_SYMBOL WITH_SYMBOL TIME_SYMBOL ZONE_SYMBOL typeDatetimePrecision? - | DATETIME_SYMBOL typeDatetimePrecision? - | TINYBLOB_SYMBOL - | BLOB_SYMBOL fieldLength? - | (MEDIUMBLOB_SYMBOL | LONGBLOB_SYMBOL) - | LONG_SYMBOL VARBINARY_SYMBOL - | LONG_SYMBOL (CHAR_SYMBOL VARYING_SYMBOL | VARCHAR_SYMBOL)? charsetWithOptBinary? - | TINYTEXT_SYMBOL charsetWithOptBinary? - | TEXT_SYMBOL fieldLength? charsetWithOptBinary? - | MEDIUMTEXT_SYMBOL charsetWithOptBinary? - | LONGTEXT_SYMBOL charsetWithOptBinary? - | ENUM_SYMBOL stringList charsetWithOptBinary? - | SET_SYMBOL stringList charsetWithOptBinary? - | SERIAL_SYMBOL - | JSON_SYMBOL - | ( - GEOMETRY_SYMBOL - | GEOMETRYCOLLECTION_SYMBOL - | POINT_SYMBOL - | MULTIPOINT_SYMBOL - | LINESTRING_SYMBOL - | MULTILINESTRING_SYMBOL - | POLYGON_SYMBOL - | MULTIPOLYGON_SYMBOL - ) - | GEOGRAPHY_SYMBOL - | VARIANT_SYMBOL - | OBJECT_SYMBOL - | ARRAY_SYMBOL - | ENUM_SYMBOL (expr (COMMA_SYMBOL expr)*)? - | SET_SYMBOL (expr (COMMA_SYMBOL expr)*)? - | identifier precision? -; - -nchar: - NCHAR_SYMBOL - | NATIONAL_SYMBOL CHAR_SYMBOL -; - -fieldLength: - OPEN_PAR_SYMBOL (real_ulonglong_number | DECIMAL_NUMBER) CLOSE_PAR_SYMBOL -; - -fieldOptions: (SIGNED_SYMBOL | UNSIGNED_SYMBOL | ZEROFILL_SYMBOL)+ -; - -charsetWithOptBinary: - ascii - | unicode - | BYTE_SYMBOL - | charset charsetName BINARY_SYMBOL? - | BINARY_SYMBOL (charset charsetName)? -; - -ascii: - ASCII_SYMBOL BINARY_SYMBOL? - | BINARY_SYMBOL ASCII_SYMBOL -; - -unicode: - UNICODE_SYMBOL BINARY_SYMBOL? - | BINARY_SYMBOL UNICODE_SYMBOL -; - -wsNumCodepoints: - OPEN_PAR_SYMBOL real_ulong_number CLOSE_PAR_SYMBOL -; - -typeDatetimePrecision: - OPEN_PAR_SYMBOL INT_NUMBER CLOSE_PAR_SYMBOL -; - -charsetName: - textOrIdentifier - | BINARY_SYMBOL - | DEFAULT_SYMBOL -; - -collationName: - textOrIdentifier - | DEFAULT_SYMBOL - | BINARY_SYMBOL -; - -collate: - COLLATE_SYMBOL collationName -; - -charsetClause: - charset charsetName -; - -fieldsClause: - COLUMNS_SYMBOL fieldTerm+ -; - -fieldTerm: - TERMINATED_SYMBOL BY_SYMBOL textString - | OPTIONALLY_SYMBOL? ENCLOSED_SYMBOL BY_SYMBOL textString - | ESCAPED_SYMBOL BY_SYMBOL textString -; - -linesClause: - LINES_SYMBOL lineTerm+ -; - -lineTerm: (TERMINATED_SYMBOL | STARTING_SYMBOL) BY_SYMBOL textString -; - -usePartition: - PARTITION_SYMBOL identifierListWithParentheses -; - -columnInternalRefList: - OPEN_PAR_SYMBOL identifier (COMMA_SYMBOL identifier)* CLOSE_PAR_SYMBOL -; - -tableAliasRefList: - qualifiedIdentifier (COMMA_SYMBOL qualifiedIdentifier)* -; - -pureIdentifier: - IDENTIFIER - | BACK_TICK_QUOTED_ID - | SINGLE_QUOTED_TEXT - | DOUBLE_QUOTED_TEXT - | BRACKET_QUOTED_TEXT -; - -identifier: - pureIdentifier - | identifierKeyword -; - -identifierList: - identifier (COMMA_SYMBOL identifier)* -; - -identifierListWithParentheses: - OPEN_PAR_SYMBOL identifierList CLOSE_PAR_SYMBOL -; - -qualifiedIdentifier: - identifier (DOT_SYMBOL identifier)* (DOT_SYMBOL MULT_OPERATOR)? -; - -dotIdentifier: - DOT_SYMBOL identifier -; - -ulong_number: - INT_NUMBER - | HEX_NUMBER - | DECIMAL_NUMBER - | FLOAT_NUMBER -; - -real_ulong_number: - INT_NUMBER - | HEX_NUMBER -; - -ulonglong_number: - INT_NUMBER - | DECIMAL_NUMBER - | FLOAT_NUMBER -; - -real_ulonglong_number: - INT_NUMBER - | HEX_NUMBER -; - -literal: - textLiteral - | numLiteral - | temporalLiteral - | nullLiteral - | boolLiteral - | UNDERSCORE_CHARSET? (HEX_NUMBER | BIN_NUMBER) -; - -stringList: - OPEN_PAR_SYMBOL textString (COMMA_SYMBOL textString)* CLOSE_PAR_SYMBOL -; - -textStringLiteral: - SINGLE_QUOTED_TEXT - | DOUBLE_QUOTED_TEXT -; - -textString: - textStringLiteral - | HEX_NUMBER - | BIN_NUMBER -; - -textLiteral: - (UNDERSCORE_CHARSET? textStringLiteral | NCHAR_TEXT) textStringLiteral* -; - -numLiteral: - INT_NUMBER - | DECIMAL_NUMBER - | FLOAT_NUMBER -; - -boolLiteral: - TRUE_SYMBOL - | FALSE_SYMBOL -; - -nullLiteral: - NULL_SYMBOL - | NULL2_SYMBOL -; - -temporalLiteral: - DATE_SYMBOL SINGLE_QUOTED_TEXT - | TIME_SYMBOL SINGLE_QUOTED_TEXT - | TIMESTAMP_SYMBOL SINGLE_QUOTED_TEXT -; - -floatOptions: - fieldLength - | precision -; - -precision: - OPEN_PAR_SYMBOL INT_NUMBER COMMA_SYMBOL INT_NUMBER CLOSE_PAR_SYMBOL -; - -textOrIdentifier: - identifier - | textStringLiteral -; - -parentheses: - OPEN_PAR_SYMBOL CLOSE_PAR_SYMBOL -; - -equal: - EQUAL_OPERATOR - | ASSIGN_OPERATOR -; - -varIdentType: - GLOBAL_SYMBOL DOT_SYMBOL - | LOCAL_SYMBOL DOT_SYMBOL - | SESSION_SYMBOL DOT_SYMBOL -; - -identifierKeyword: - TINYINT_SYMBOL | - SMALLINT_SYMBOL | - MEDIUMINT_SYMBOL | - INT_SYMBOL | - BIGINT_SYMBOL | - SECOND_SYMBOL | - MINUTE_SYMBOL | - HOUR_SYMBOL | - DAY_SYMBOL | - WEEK_SYMBOL | - MONTH_SYMBOL | - QUARTER_SYMBOL | - YEAR_SYMBOL | - DEFAULT_SYMBOL | - UNION_SYMBOL | - SELECT_SYMBOL | - ALL_SYMBOL | - DISTINCT_SYMBOL | - STRAIGHT_JOIN_SYMBOL | - HIGH_PRIORITY_SYMBOL | - SQL_SMALL_RESULT_SYMBOL | - SQL_BIG_RESULT_SYMBOL | - SQL_BUFFER_RESULT_SYMBOL | - SQL_CALC_FOUND_ROWS_SYMBOL | - LIMIT_SYMBOL | - OFFSET_SYMBOL | - INTO_SYMBOL | - OUTFILE_SYMBOL | - DUMPFILE_SYMBOL | - PROCEDURE_SYMBOL | - ANALYSE_SYMBOL | - HAVING_SYMBOL | - WINDOW_SYMBOL | - AS_SYMBOL | - PARTITION_SYMBOL | - BY_SYMBOL | - ROWS_SYMBOL | - RANGE_SYMBOL | - GROUPS_SYMBOL | - UNBOUNDED_SYMBOL | - PRECEDING_SYMBOL | - INTERVAL_SYMBOL | - CURRENT_SYMBOL | - ROW_SYMBOL | - BETWEEN_SYMBOL | - AND_SYMBOL | - FOLLOWING_SYMBOL | - EXCLUDE_SYMBOL | - GROUP_SYMBOL | - TIES_SYMBOL | - NO_SYMBOL | - OTHERS_SYMBOL | - WITH_SYMBOL | - RECURSIVE_SYMBOL | - ROLLUP_SYMBOL | - CUBE_SYMBOL | - ORDER_SYMBOL | - ASC_SYMBOL | - DESC_SYMBOL | - FROM_SYMBOL | - DUAL_SYMBOL | - VALUES_SYMBOL | - TABLE_SYMBOL | - SQL_NO_CACHE_SYMBOL | - SQL_CACHE_SYMBOL | - MAX_STATEMENT_TIME_SYMBOL | - FOR_SYMBOL | - OF_SYMBOL | - LOCK_SYMBOL | - IN_SYMBOL | - SHARE_SYMBOL | - MODE_SYMBOL | - UPDATE_SYMBOL | - SKIP_SYMBOL | - LOCKED_SYMBOL | - NOWAIT_SYMBOL | - WHERE_SYMBOL | - OJ_SYMBOL | - ON_SYMBOL | - USING_SYMBOL | - NATURAL_SYMBOL | - INNER_SYMBOL | - JOIN_SYMBOL | - LEFT_SYMBOL | - RIGHT_SYMBOL | - OUTER_SYMBOL | - CROSS_SYMBOL | - LATERAL_SYMBOL | - JSON_TABLE_SYMBOL | - COLUMNS_SYMBOL | - ORDINALITY_SYMBOL | - EXISTS_SYMBOL | - PATH_SYMBOL | - NESTED_SYMBOL | - EMPTY_SYMBOL | - ERROR_SYMBOL | - NULL_SYMBOL | - USE_SYMBOL | - FORCE_SYMBOL | - IGNORE_SYMBOL | - KEY_SYMBOL | - INDEX_SYMBOL | - PRIMARY_SYMBOL | - IS_SYMBOL | - TRUE_SYMBOL | - FALSE_SYMBOL | - UNKNOWN_SYMBOL | - NOT_SYMBOL | - XOR_SYMBOL | - OR_SYMBOL | - ANY_SYMBOL | - MEMBER_SYMBOL | - SOUNDS_SYMBOL | - LIKE_SYMBOL | - ESCAPE_SYMBOL | - REGEXP_SYMBOL | - DIV_SYMBOL | - MOD_SYMBOL | - MATCH_SYMBOL | - AGAINST_SYMBOL | - BINARY_SYMBOL | - CAST_SYMBOL | - ARRAY_SYMBOL | - CASE_SYMBOL | - END_SYMBOL | - CONVERT_SYMBOL | - COLLATE_SYMBOL | - AVG_SYMBOL | - BIT_AND_SYMBOL | - BIT_OR_SYMBOL | - BIT_XOR_SYMBOL | - COUNT_SYMBOL | - MIN_SYMBOL | - MAX_SYMBOL | - STD_SYMBOL | - VARIANCE_SYMBOL | - STDDEV_SAMP_SYMBOL | - VAR_SAMP_SYMBOL | - SUM_SYMBOL | - GROUP_CONCAT_SYMBOL | - SEPARATOR_SYMBOL | - GROUPING_SYMBOL | - ROW_NUMBER_SYMBOL | - RANK_SYMBOL | - DENSE_RANK_SYMBOL | - CUME_DIST_SYMBOL | - PERCENT_RANK_SYMBOL | - NTILE_SYMBOL | - LEAD_SYMBOL | - LAG_SYMBOL | - FIRST_VALUE_SYMBOL | - LAST_VALUE_SYMBOL | - NTH_VALUE_SYMBOL | - FIRST_SYMBOL | - LAST_SYMBOL | - OVER_SYMBOL | - RESPECT_SYMBOL | - NULLS_SYMBOL | - JSON_ARRAYAGG_SYMBOL | - JSON_OBJECTAGG_SYMBOL | - BOOLEAN_SYMBOL | - LANGUAGE_SYMBOL | - QUERY_SYMBOL | - EXPANSION_SYMBOL | - CHAR_SYMBOL | - CURRENT_USER_SYMBOL | - DATE_SYMBOL | - INSERT_SYMBOL | - TIME_SYMBOL | - TIMESTAMP_SYMBOL | - USER_SYMBOL | - ADDDATE_SYMBOL | - SUBDATE_SYMBOL | - CURDATE_SYMBOL | - CURTIME_SYMBOL | - DATE_ADD_SYMBOL | - DATE_SUB_SYMBOL | - EXTRACT_SYMBOL | - GET_FORMAT_SYMBOL | - NOW_SYMBOL | - POSITION_SYMBOL | - SYSDATE_SYMBOL | - TIMESTAMP_ADD_SYMBOL | - TIMESTAMP_DIFF_SYMBOL | - UTC_DATE_SYMBOL | - UTC_TIME_SYMBOL | - UTC_TIMESTAMP_SYMBOL | - ASCII_SYMBOL | - CHARSET_SYMBOL | - COALESCE_SYMBOL | - COLLATION_SYMBOL | - DATABASE_SYMBOL | - IF_SYMBOL | - FORMAT_SYMBOL | - MICROSECOND_SYMBOL | - OLD_PASSWORD_SYMBOL | - PASSWORD_SYMBOL | - REPEAT_SYMBOL | - REPLACE_SYMBOL | - REVERSE_SYMBOL | - ROW_COUNT_SYMBOL | - TRUNCATE_SYMBOL | - WEIGHT_STRING_SYMBOL | - CONTAINS_SYMBOL | - GEOMETRYCOLLECTION_SYMBOL | - LINESTRING_SYMBOL | - MULTILINESTRING_SYMBOL | - MULTIPOINT_SYMBOL | - MULTIPOLYGON_SYMBOL | - POINT_SYMBOL | - POLYGON_SYMBOL | - LEVEL_SYMBOL | - DATETIME_SYMBOL | - TRIM_SYMBOL | - LEADING_SYMBOL | - TRAILING_SYMBOL | - BOTH_SYMBOL | - SUBSTRING_SYMBOL | - WHEN_SYMBOL | - THEN_SYMBOL | - ELSE_SYMBOL | - SIGNED_SYMBOL | - UNSIGNED_SYMBOL | - DECIMAL_SYMBOL | - JSON_SYMBOL | - FLOAT_SYMBOL | - SET_SYMBOL | - SECOND_MICROSECOND_SYMBOL | - MINUTE_MICROSECOND_SYMBOL | - MINUTE_SECOND_SYMBOL | - HOUR_MICROSECOND_SYMBOL | - HOUR_SECOND_SYMBOL | - HOUR_MINUTE_SYMBOL | - DAY_MICROSECOND_SYMBOL | - DAY_SECOND_SYMBOL | - DAY_MINUTE_SYMBOL | - DAY_HOUR_SYMBOL | - YEAR_MONTH_SYMBOL | - BTREE_SYMBOL | - RTREE_SYMBOL | - HASH_SYMBOL | - REAL_SYMBOL | - DOUBLE_SYMBOL | - PRECISION_SYMBOL | - NUMERIC_SYMBOL | - FIXED_SYMBOL | - BIT_SYMBOL | - BOOL_SYMBOL | - VARYING_SYMBOL | - VARCHAR_SYMBOL | - NATIONAL_SYMBOL | - NVARCHAR_SYMBOL | - NCHAR_SYMBOL | - VARBINARY_SYMBOL | - TINYBLOB_SYMBOL | - BLOB_SYMBOL | - MEDIUMBLOB_SYMBOL | - LONGBLOB_SYMBOL | - LONG_SYMBOL | - TINYTEXT_SYMBOL | - TEXT_SYMBOL | - MEDIUMTEXT_SYMBOL | - LONGTEXT_SYMBOL | - ENUM_SYMBOL | - SERIAL_SYMBOL | - GEOMETRY_SYMBOL | - ZEROFILL_SYMBOL | - BYTE_SYMBOL | - UNICODE_SYMBOL | - TERMINATED_SYMBOL | - OPTIONALLY_SYMBOL | - ENCLOSED_SYMBOL | - ESCAPED_SYMBOL | - LINES_SYMBOL | - STARTING_SYMBOL | - GLOBAL_SYMBOL | - LOCAL_SYMBOL | - SESSION_SYMBOL | - MEDIUMINT_SYMBOL | - BYTE_INT_SYMBOL | - INT_SYMBOL | - WITHOUT_SYMBOL | - CHAR_SYMBOL | - TIMESTAMP_LTZ_SYMBOL | - TIMESTAMP_NTZ_SYMBOL | - ZONE_SYMBOL | - STRING_SYMBOL | - FLOAT_SYMBOL_4 | - FLOAT_SYMBOL_8 | - NUMBER_SYMBOL | - VARIANT_SYMBOL | - OBJECT_SYMBOL | - GEOGRAPHY_SYMBOL -; \ No newline at end of file diff --git a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/index.js b/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/index.js deleted file mode 100644 index bb91261..0000000 --- a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/index.js +++ /dev/null @@ -1,34 +0,0 @@ -const antlr4 = require('antlr4'); -const SQLSelectLexer = require('./parser/SQLSelectLexer'); -const SQLSelectParser = require('./parser/SQLSelectParser'); -const selectStatementListener = require('./selectStatementListener.js'); - -const parseSelectStatement = (sql, logger) => { - const chars = new antlr4.InputStream(sql); - const lexer = new SQLSelectLexer(chars); - - const tokens = new antlr4.CommonTokenStream(lexer); - const parser = new SQLSelectParser(tokens); - - parser.removeErrorListeners(); - class ExprErrorListener extends antlr4.error.ErrorListener { - syntaxError(recognizer, offendingSymbol, line, column, msg) { - const error = `line ${line}:${column} ${msg}`; - if (!logger) { - console.log(new Error(error)); - } else { - logger(error); - } - } - } - - parser.addErrorListener(new ExprErrorListener()); - const tree = parser.query(); - - const listener = new selectStatementListener(); - antlr4.tree.ParseTreeWalker.DEFAULT.walk(listener, tree); - - return listener.getResult(); -}; - -module.exports = parseSelectStatement; \ No newline at end of file diff --git a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/package.json b/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/package.json deleted file mode 100644 index d361bd5..0000000 --- a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "_from": "@hackolade/sql-select-statement-parser", - "_id": "@hackolade/sql-select-statement-parser@0.0.5", - "_inBundle": false, - "_integrity": "sha512-TlHPKe+OOt2CvtQ/ELakMogpaqOmglHdMlDfGTCC0BDAu9ISZ1Aa9XSZGM3jVA7UbI8vXN1Yp9y2L+oAThieag==", - "_location": "/@hackolade/sql-select-statement-parser", - "_phantomChildren": {}, - "_requested": { - "type": "tag", - "registry": true, - "raw": "@hackolade/sql-select-statement-parser", - "name": "@hackolade/sql-select-statement-parser", - "escapedName": "@hackolade%2fsql-select-statement-parser", - "scope": "@hackolade", - "rawSpec": "", - "saveSpec": null, - "fetchSpec": "latest" - }, - "_requiredBy": [ - "#USER", - "/" - ], - "_resolved": "https://registry.npmjs.org/@hackolade/sql-select-statement-parser/-/sql-select-statement-parser-0.0.5.tgz", - "_shasum": "62ddf3df7599693a43a89640eb914dea6e1881a6", - "_spec": "@hackolade/sql-select-statement-parser", - "_where": "/home/mikhail/.hackolade/plugins/BigQuery/reverse_engineering", - "author": { - "name": "Hackolade" - }, - "bundleDependencies": false, - "dependencies": { - "antlr4": "^4.9.2" - }, - "deprecated": false, - "description": "Dialect-agnostic parser of SQL SELECT statements.", - "devDependencies": { - "mocha": "^9.2.2" - }, - "license": "ISC", - "main": "index.js", - "name": "@hackolade/sql-select-statement-parser", - "scripts": { - "test": "mocha" - }, - "version": "0.0.5" -} diff --git a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/parser/SQLSelectLexer.interp b/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/parser/SQLSelectLexer.interp deleted file mode 100644 index 97e2608..0000000 --- a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/parser/SQLSelectLexer.interp +++ /dev/null @@ -1,1123 +0,0 @@ -token literal names: -null -'=' -':=' -'<=>' -'>=' -'>' -'<=' -'<' -'!=' -'+' -'-' -'*' -'/' -'%' -'!' -'~' -'<<' -'>>' -'&&' -'&' -'^' -'||' -'|' -'.' -',' -';' -':' -'(' -')' -'{' -'}' -'_' -'[' -']' -'->' -'->>' -'@' -null -'@@' -'\\N' -'?' -'::' -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -'/*!' -'*/' -null -null -null - -token symbolic names: -null -EQUAL_OPERATOR -ASSIGN_OPERATOR -NULL_SAFE_EQUAL_OPERATOR -GREATER_OR_EQUAL_OPERATOR -GREATER_THAN_OPERATOR -LESS_OR_EQUAL_OPERATOR -LESS_THAN_OPERATOR -NOT_EQUAL_OPERATOR -PLUS_OPERATOR -MINUS_OPERATOR -MULT_OPERATOR -DIV_OPERATOR -MOD_OPERATOR -LOGICAL_NOT_OPERATOR -BITWISE_NOT_OPERATOR -SHIFT_LEFT_OPERATOR -SHIFT_RIGHT_OPERATOR -LOGICAL_AND_OPERATOR -BITWISE_AND_OPERATOR -BITWISE_XOR_OPERATOR -LOGICAL_OR_OPERATOR -BITWISE_OR_OPERATOR -DOT_SYMBOL -COMMA_SYMBOL -SEMICOLON_SYMBOL -COLON_SYMBOL -OPEN_PAR_SYMBOL -CLOSE_PAR_SYMBOL -OPEN_CURLY_SYMBOL -CLOSE_CURLY_SYMBOL -UNDERLINE_SYMBOL -OPEN_BRACKET_SYMBOL -CLOSE_BRACKET_SYMBOL -JSON_SEPARATOR_SYMBOL -JSON_UNQUOTED_SEPARATOR_SYMBOL -AT_SIGN_SYMBOL -AT_TEXT_SUFFIX -AT_AT_SIGN_SYMBOL -NULL2_SYMBOL -PARAM_MARKER -CAST_COLON_SYMBOL -HEX_NUMBER -BIN_NUMBER -INT_NUMBER -DECIMAL_NUMBER -FLOAT_NUMBER -TINYINT_SYMBOL -SMALLINT_SYMBOL -MEDIUMINT_SYMBOL -BYTE_INT_SYMBOL -INT_SYMBOL -BIGINT_SYMBOL -SECOND_SYMBOL -MINUTE_SYMBOL -HOUR_SYMBOL -DAY_SYMBOL -WEEK_SYMBOL -MONTH_SYMBOL -QUARTER_SYMBOL -YEAR_SYMBOL -DEFAULT_SYMBOL -UNION_SYMBOL -SELECT_SYMBOL -ALL_SYMBOL -DISTINCT_SYMBOL -STRAIGHT_JOIN_SYMBOL -HIGH_PRIORITY_SYMBOL -SQL_SMALL_RESULT_SYMBOL -SQL_BIG_RESULT_SYMBOL -SQL_BUFFER_RESULT_SYMBOL -SQL_CALC_FOUND_ROWS_SYMBOL -LIMIT_SYMBOL -OFFSET_SYMBOL -INTO_SYMBOL -OUTFILE_SYMBOL -DUMPFILE_SYMBOL -PROCEDURE_SYMBOL -ANALYSE_SYMBOL -HAVING_SYMBOL -WINDOW_SYMBOL -AS_SYMBOL -PARTITION_SYMBOL -BY_SYMBOL -ROWS_SYMBOL -RANGE_SYMBOL -GROUPS_SYMBOL -UNBOUNDED_SYMBOL -PRECEDING_SYMBOL -INTERVAL_SYMBOL -CURRENT_SYMBOL -ROW_SYMBOL -BETWEEN_SYMBOL -AND_SYMBOL -FOLLOWING_SYMBOL -EXCLUDE_SYMBOL -GROUP_SYMBOL -TIES_SYMBOL -NO_SYMBOL -OTHERS_SYMBOL -WITH_SYMBOL -WITHOUT_SYMBOL -RECURSIVE_SYMBOL -ROLLUP_SYMBOL -CUBE_SYMBOL -ORDER_SYMBOL -ASC_SYMBOL -DESC_SYMBOL -FROM_SYMBOL -DUAL_SYMBOL -VALUES_SYMBOL -TABLE_SYMBOL -SQL_NO_CACHE_SYMBOL -SQL_CACHE_SYMBOL -MAX_STATEMENT_TIME_SYMBOL -FOR_SYMBOL -OF_SYMBOL -LOCK_SYMBOL -IN_SYMBOL -SHARE_SYMBOL -MODE_SYMBOL -UPDATE_SYMBOL -SKIP_SYMBOL -LOCKED_SYMBOL -NOWAIT_SYMBOL -WHERE_SYMBOL -OJ_SYMBOL -ON_SYMBOL -USING_SYMBOL -NATURAL_SYMBOL -INNER_SYMBOL -JOIN_SYMBOL -LEFT_SYMBOL -RIGHT_SYMBOL -OUTER_SYMBOL -CROSS_SYMBOL -LATERAL_SYMBOL -JSON_TABLE_SYMBOL -COLUMNS_SYMBOL -ORDINALITY_SYMBOL -EXISTS_SYMBOL -PATH_SYMBOL -NESTED_SYMBOL -EMPTY_SYMBOL -ERROR_SYMBOL -NULL_SYMBOL -USE_SYMBOL -FORCE_SYMBOL -IGNORE_SYMBOL -KEY_SYMBOL -INDEX_SYMBOL -PRIMARY_SYMBOL -IS_SYMBOL -TRUE_SYMBOL -FALSE_SYMBOL -UNKNOWN_SYMBOL -NOT_SYMBOL -XOR_SYMBOL -OR_SYMBOL -ANY_SYMBOL -MEMBER_SYMBOL -SOUNDS_SYMBOL -LIKE_SYMBOL -ESCAPE_SYMBOL -REGEXP_SYMBOL -DIV_SYMBOL -MOD_SYMBOL -MATCH_SYMBOL -AGAINST_SYMBOL -BINARY_SYMBOL -CAST_SYMBOL -ARRAY_SYMBOL -CASE_SYMBOL -END_SYMBOL -CONVERT_SYMBOL -COLLATE_SYMBOL -AVG_SYMBOL -BIT_AND_SYMBOL -BIT_OR_SYMBOL -BIT_XOR_SYMBOL -COUNT_SYMBOL -MIN_SYMBOL -MAX_SYMBOL -STD_SYMBOL -VARIANCE_SYMBOL -STDDEV_SAMP_SYMBOL -VAR_SAMP_SYMBOL -SUM_SYMBOL -GROUP_CONCAT_SYMBOL -SEPARATOR_SYMBOL -GROUPING_SYMBOL -ROW_NUMBER_SYMBOL -RANK_SYMBOL -DENSE_RANK_SYMBOL -CUME_DIST_SYMBOL -PERCENT_RANK_SYMBOL -NTILE_SYMBOL -LEAD_SYMBOL -LAG_SYMBOL -FIRST_VALUE_SYMBOL -LAST_VALUE_SYMBOL -NTH_VALUE_SYMBOL -FIRST_SYMBOL -LAST_SYMBOL -OVER_SYMBOL -RESPECT_SYMBOL -NULLS_SYMBOL -JSON_ARRAYAGG_SYMBOL -JSON_OBJECTAGG_SYMBOL -BOOLEAN_SYMBOL -LANGUAGE_SYMBOL -QUERY_SYMBOL -EXPANSION_SYMBOL -CHAR_SYMBOL -CURRENT_USER_SYMBOL -DATE_SYMBOL -INSERT_SYMBOL -TIME_SYMBOL -TIMESTAMP_SYMBOL -TIMESTAMP_LTZ_SYMBOL -TIMESTAMP_NTZ_SYMBOL -ZONE_SYMBOL -USER_SYMBOL -ADDDATE_SYMBOL -SUBDATE_SYMBOL -CURDATE_SYMBOL -CURTIME_SYMBOL -DATE_ADD_SYMBOL -DATE_SUB_SYMBOL -EXTRACT_SYMBOL -GET_FORMAT_SYMBOL -NOW_SYMBOL -POSITION_SYMBOL -SYSDATE_SYMBOL -TIMESTAMP_ADD_SYMBOL -TIMESTAMP_DIFF_SYMBOL -UTC_DATE_SYMBOL -UTC_TIME_SYMBOL -UTC_TIMESTAMP_SYMBOL -ASCII_SYMBOL -CHARSET_SYMBOL -COALESCE_SYMBOL -COLLATION_SYMBOL -DATABASE_SYMBOL -IF_SYMBOL -FORMAT_SYMBOL -MICROSECOND_SYMBOL -OLD_PASSWORD_SYMBOL -PASSWORD_SYMBOL -REPEAT_SYMBOL -REPLACE_SYMBOL -REVERSE_SYMBOL -ROW_COUNT_SYMBOL -TRUNCATE_SYMBOL -WEIGHT_STRING_SYMBOL -CONTAINS_SYMBOL -GEOMETRYCOLLECTION_SYMBOL -LINESTRING_SYMBOL -MULTILINESTRING_SYMBOL -MULTIPOINT_SYMBOL -MULTIPOLYGON_SYMBOL -POINT_SYMBOL -POLYGON_SYMBOL -LEVEL_SYMBOL -DATETIME_SYMBOL -TRIM_SYMBOL -LEADING_SYMBOL -TRAILING_SYMBOL -BOTH_SYMBOL -STRING_SYMBOL -SUBSTRING_SYMBOL -WHEN_SYMBOL -THEN_SYMBOL -ELSE_SYMBOL -SIGNED_SYMBOL -UNSIGNED_SYMBOL -DECIMAL_SYMBOL -JSON_SYMBOL -FLOAT_SYMBOL -FLOAT_SYMBOL_4 -FLOAT_SYMBOL_8 -SET_SYMBOL -SECOND_MICROSECOND_SYMBOL -MINUTE_MICROSECOND_SYMBOL -MINUTE_SECOND_SYMBOL -HOUR_MICROSECOND_SYMBOL -HOUR_SECOND_SYMBOL -HOUR_MINUTE_SYMBOL -DAY_MICROSECOND_SYMBOL -DAY_SECOND_SYMBOL -DAY_MINUTE_SYMBOL -DAY_HOUR_SYMBOL -YEAR_MONTH_SYMBOL -BTREE_SYMBOL -RTREE_SYMBOL -HASH_SYMBOL -REAL_SYMBOL -DOUBLE_SYMBOL -PRECISION_SYMBOL -NUMERIC_SYMBOL -NUMBER_SYMBOL -FIXED_SYMBOL -BIT_SYMBOL -BOOL_SYMBOL -VARYING_SYMBOL -VARCHAR_SYMBOL -NATIONAL_SYMBOL -NVARCHAR_SYMBOL -NCHAR_SYMBOL -VARBINARY_SYMBOL -TINYBLOB_SYMBOL -BLOB_SYMBOL -MEDIUMBLOB_SYMBOL -LONGBLOB_SYMBOL -LONG_SYMBOL -TINYTEXT_SYMBOL -TEXT_SYMBOL -MEDIUMTEXT_SYMBOL -LONGTEXT_SYMBOL -ENUM_SYMBOL -SERIAL_SYMBOL -GEOMETRY_SYMBOL -ZEROFILL_SYMBOL -BYTE_SYMBOL -UNICODE_SYMBOL -TERMINATED_SYMBOL -OPTIONALLY_SYMBOL -ENCLOSED_SYMBOL -ESCAPED_SYMBOL -LINES_SYMBOL -STARTING_SYMBOL -GLOBAL_SYMBOL -LOCAL_SYMBOL -SESSION_SYMBOL -VARIANT_SYMBOL -OBJECT_SYMBOL -GEOGRAPHY_SYMBOL -WHITESPACE -INVALID_INPUT -UNDERSCORE_CHARSET -IDENTIFIER -NCHAR_TEXT -BACK_TICK_QUOTED_ID -DOUBLE_QUOTED_TEXT -SINGLE_QUOTED_TEXT -BRACKET_QUOTED_TEXT -VERSION_COMMENT_START -MYSQL_COMMENT_START -VERSION_COMMENT_END -BLOCK_COMMENT -POUND_COMMENT -DASHDASH_COMMENT - -rule names: -EQUAL_OPERATOR -ASSIGN_OPERATOR -NULL_SAFE_EQUAL_OPERATOR -GREATER_OR_EQUAL_OPERATOR -GREATER_THAN_OPERATOR -LESS_OR_EQUAL_OPERATOR -LESS_THAN_OPERATOR -NOT_EQUAL_OPERATOR -PLUS_OPERATOR -MINUS_OPERATOR -MULT_OPERATOR -DIV_OPERATOR -MOD_OPERATOR -LOGICAL_NOT_OPERATOR -BITWISE_NOT_OPERATOR -SHIFT_LEFT_OPERATOR -SHIFT_RIGHT_OPERATOR -LOGICAL_AND_OPERATOR -BITWISE_AND_OPERATOR -BITWISE_XOR_OPERATOR -LOGICAL_OR_OPERATOR -BITWISE_OR_OPERATOR -DOT_SYMBOL -COMMA_SYMBOL -SEMICOLON_SYMBOL -COLON_SYMBOL -OPEN_PAR_SYMBOL -CLOSE_PAR_SYMBOL -OPEN_CURLY_SYMBOL -CLOSE_CURLY_SYMBOL -UNDERLINE_SYMBOL -OPEN_BRACKET_SYMBOL -CLOSE_BRACKET_SYMBOL -JSON_SEPARATOR_SYMBOL -JSON_UNQUOTED_SEPARATOR_SYMBOL -AT_SIGN_SYMBOL -AT_TEXT_SUFFIX -AT_AT_SIGN_SYMBOL -NULL2_SYMBOL -PARAM_MARKER -CAST_COLON_SYMBOL -A -B -C -D -E -F -G -H -I -J -K -L -M -N -O -P -Q -R -S -T -U -V -W -X -Y -Z -DIGIT -DIGITS -HEXDIGIT -HEX_NUMBER -BIN_NUMBER -INT_NUMBER -DECIMAL_NUMBER -FLOAT_NUMBER -TINYINT_SYMBOL -SMALLINT_SYMBOL -MEDIUMINT_SYMBOL -BYTE_INT_SYMBOL -INT_SYMBOL -BIGINT_SYMBOL -SECOND_SYMBOL -MINUTE_SYMBOL -HOUR_SYMBOL -DAY_SYMBOL -WEEK_SYMBOL -MONTH_SYMBOL -QUARTER_SYMBOL -YEAR_SYMBOL -DEFAULT_SYMBOL -UNION_SYMBOL -SELECT_SYMBOL -ALL_SYMBOL -DISTINCT_SYMBOL -STRAIGHT_JOIN_SYMBOL -HIGH_PRIORITY_SYMBOL -SQL_SMALL_RESULT_SYMBOL -SQL_BIG_RESULT_SYMBOL -SQL_BUFFER_RESULT_SYMBOL -SQL_CALC_FOUND_ROWS_SYMBOL -LIMIT_SYMBOL -OFFSET_SYMBOL -INTO_SYMBOL -OUTFILE_SYMBOL -DUMPFILE_SYMBOL -PROCEDURE_SYMBOL -ANALYSE_SYMBOL -HAVING_SYMBOL -WINDOW_SYMBOL -AS_SYMBOL -PARTITION_SYMBOL -BY_SYMBOL -ROWS_SYMBOL -RANGE_SYMBOL -GROUPS_SYMBOL -UNBOUNDED_SYMBOL -PRECEDING_SYMBOL -INTERVAL_SYMBOL -CURRENT_SYMBOL -ROW_SYMBOL -BETWEEN_SYMBOL -AND_SYMBOL -FOLLOWING_SYMBOL -EXCLUDE_SYMBOL -GROUP_SYMBOL -TIES_SYMBOL -NO_SYMBOL -OTHERS_SYMBOL -WITH_SYMBOL -WITHOUT_SYMBOL -RECURSIVE_SYMBOL -ROLLUP_SYMBOL -CUBE_SYMBOL -ORDER_SYMBOL -ASC_SYMBOL -DESC_SYMBOL -FROM_SYMBOL -DUAL_SYMBOL -VALUES_SYMBOL -TABLE_SYMBOL -SQL_NO_CACHE_SYMBOL -SQL_CACHE_SYMBOL -MAX_STATEMENT_TIME_SYMBOL -FOR_SYMBOL -OF_SYMBOL -LOCK_SYMBOL -IN_SYMBOL -SHARE_SYMBOL -MODE_SYMBOL -UPDATE_SYMBOL -SKIP_SYMBOL -LOCKED_SYMBOL -NOWAIT_SYMBOL -WHERE_SYMBOL -OJ_SYMBOL -ON_SYMBOL -USING_SYMBOL -NATURAL_SYMBOL -INNER_SYMBOL -JOIN_SYMBOL -LEFT_SYMBOL -RIGHT_SYMBOL -OUTER_SYMBOL -CROSS_SYMBOL -LATERAL_SYMBOL -JSON_TABLE_SYMBOL -COLUMNS_SYMBOL -ORDINALITY_SYMBOL -EXISTS_SYMBOL -PATH_SYMBOL -NESTED_SYMBOL -EMPTY_SYMBOL -ERROR_SYMBOL -NULL_SYMBOL -USE_SYMBOL -FORCE_SYMBOL -IGNORE_SYMBOL -KEY_SYMBOL -INDEX_SYMBOL -PRIMARY_SYMBOL -IS_SYMBOL -TRUE_SYMBOL -FALSE_SYMBOL -UNKNOWN_SYMBOL -NOT_SYMBOL -XOR_SYMBOL -OR_SYMBOL -ANY_SYMBOL -MEMBER_SYMBOL -SOUNDS_SYMBOL -LIKE_SYMBOL -ESCAPE_SYMBOL -REGEXP_SYMBOL -DIV_SYMBOL -MOD_SYMBOL -MATCH_SYMBOL -AGAINST_SYMBOL -BINARY_SYMBOL -CAST_SYMBOL -ARRAY_SYMBOL -CASE_SYMBOL -END_SYMBOL -CONVERT_SYMBOL -COLLATE_SYMBOL -AVG_SYMBOL -BIT_AND_SYMBOL -BIT_OR_SYMBOL -BIT_XOR_SYMBOL -COUNT_SYMBOL -MIN_SYMBOL -MAX_SYMBOL -STD_SYMBOL -VARIANCE_SYMBOL -STDDEV_SAMP_SYMBOL -VAR_SAMP_SYMBOL -SUM_SYMBOL -GROUP_CONCAT_SYMBOL -SEPARATOR_SYMBOL -GROUPING_SYMBOL -ROW_NUMBER_SYMBOL -RANK_SYMBOL -DENSE_RANK_SYMBOL -CUME_DIST_SYMBOL -PERCENT_RANK_SYMBOL -NTILE_SYMBOL -LEAD_SYMBOL -LAG_SYMBOL -FIRST_VALUE_SYMBOL -LAST_VALUE_SYMBOL -NTH_VALUE_SYMBOL -FIRST_SYMBOL -LAST_SYMBOL -OVER_SYMBOL -RESPECT_SYMBOL -NULLS_SYMBOL -JSON_ARRAYAGG_SYMBOL -JSON_OBJECTAGG_SYMBOL -BOOLEAN_SYMBOL -LANGUAGE_SYMBOL -QUERY_SYMBOL -EXPANSION_SYMBOL -CHAR_SYMBOL -CURRENT_USER_SYMBOL -DATE_SYMBOL -INSERT_SYMBOL -TIME_SYMBOL -TIMESTAMP_SYMBOL -TIMESTAMP_LTZ_SYMBOL -TIMESTAMP_NTZ_SYMBOL -ZONE_SYMBOL -USER_SYMBOL -ADDDATE_SYMBOL -SUBDATE_SYMBOL -CURDATE_SYMBOL -CURTIME_SYMBOL -DATE_ADD_SYMBOL -DATE_SUB_SYMBOL -EXTRACT_SYMBOL -GET_FORMAT_SYMBOL -NOW_SYMBOL -POSITION_SYMBOL -SYSDATE_SYMBOL -TIMESTAMP_ADD_SYMBOL -TIMESTAMP_DIFF_SYMBOL -UTC_DATE_SYMBOL -UTC_TIME_SYMBOL -UTC_TIMESTAMP_SYMBOL -ASCII_SYMBOL -CHARSET_SYMBOL -COALESCE_SYMBOL -COLLATION_SYMBOL -DATABASE_SYMBOL -IF_SYMBOL -FORMAT_SYMBOL -MICROSECOND_SYMBOL -OLD_PASSWORD_SYMBOL -PASSWORD_SYMBOL -REPEAT_SYMBOL -REPLACE_SYMBOL -REVERSE_SYMBOL -ROW_COUNT_SYMBOL -TRUNCATE_SYMBOL -WEIGHT_STRING_SYMBOL -CONTAINS_SYMBOL -GEOMETRYCOLLECTION_SYMBOL -LINESTRING_SYMBOL -MULTILINESTRING_SYMBOL -MULTIPOINT_SYMBOL -MULTIPOLYGON_SYMBOL -POINT_SYMBOL -POLYGON_SYMBOL -LEVEL_SYMBOL -DATETIME_SYMBOL -TRIM_SYMBOL -LEADING_SYMBOL -TRAILING_SYMBOL -BOTH_SYMBOL -STRING_SYMBOL -SUBSTRING_SYMBOL -WHEN_SYMBOL -THEN_SYMBOL -ELSE_SYMBOL -SIGNED_SYMBOL -UNSIGNED_SYMBOL -DECIMAL_SYMBOL -JSON_SYMBOL -FLOAT_SYMBOL -FLOAT_SYMBOL_4 -FLOAT_SYMBOL_8 -SET_SYMBOL -SECOND_MICROSECOND_SYMBOL -MINUTE_MICROSECOND_SYMBOL -MINUTE_SECOND_SYMBOL -HOUR_MICROSECOND_SYMBOL -HOUR_SECOND_SYMBOL -HOUR_MINUTE_SYMBOL -DAY_MICROSECOND_SYMBOL -DAY_SECOND_SYMBOL -DAY_MINUTE_SYMBOL -DAY_HOUR_SYMBOL -YEAR_MONTH_SYMBOL -BTREE_SYMBOL -RTREE_SYMBOL -HASH_SYMBOL -REAL_SYMBOL -DOUBLE_SYMBOL -PRECISION_SYMBOL -NUMERIC_SYMBOL -NUMBER_SYMBOL -FIXED_SYMBOL -BIT_SYMBOL -BOOL_SYMBOL -VARYING_SYMBOL -VARCHAR_SYMBOL -NATIONAL_SYMBOL -NVARCHAR_SYMBOL -NCHAR_SYMBOL -VARBINARY_SYMBOL -TINYBLOB_SYMBOL -BLOB_SYMBOL -MEDIUMBLOB_SYMBOL -LONGBLOB_SYMBOL -LONG_SYMBOL -TINYTEXT_SYMBOL -TEXT_SYMBOL -MEDIUMTEXT_SYMBOL -LONGTEXT_SYMBOL -ENUM_SYMBOL -SERIAL_SYMBOL -GEOMETRY_SYMBOL -ZEROFILL_SYMBOL -BYTE_SYMBOL -UNICODE_SYMBOL -TERMINATED_SYMBOL -OPTIONALLY_SYMBOL -ENCLOSED_SYMBOL -ESCAPED_SYMBOL -LINES_SYMBOL -STARTING_SYMBOL -GLOBAL_SYMBOL -LOCAL_SYMBOL -SESSION_SYMBOL -VARIANT_SYMBOL -OBJECT_SYMBOL -GEOGRAPHY_SYMBOL -INT1_SYMBOL -INT2_SYMBOL -INT3_SYMBOL -INT4_SYMBOL -INT8_SYMBOL -SQL_TSI_SECOND_SYMBOL -SQL_TSI_MINUTE_SYMBOL -SQL_TSI_HOUR_SYMBOL -SQL_TSI_DAY_SYMBOL -SQL_TSI_WEEK_SYMBOL -SQL_TSI_MONTH_SYMBOL -SQL_TSI_QUARTER_SYMBOL -SQL_TSI_YEAR_SYMBOL -WHITESPACE -INVALID_INPUT -UNDERSCORE_CHARSET -IDENTIFIER -NCHAR_TEXT -BACK_TICK -SINGLE_QUOTE -DOUBLE_QUOTE -BACK_TICK_QUOTED_ID -DOUBLE_QUOTED_TEXT -SINGLE_QUOTED_TEXT -BRACKET_QUOTED_TEXT -VERSION_COMMENT_START -MYSQL_COMMENT_START -VERSION_COMMENT_END -BLOCK_COMMENT -POUND_COMMENT -DASHDASH_COMMENT -DOUBLE_DASH -LINEBREAK -SIMPLE_IDENTIFIER -ML_COMMENT_HEAD -ML_COMMENT_END -LETTER_WHEN_UNQUOTED -LETTER_WHEN_UNQUOTED_NO_DIGIT -LETTER_WITHOUT_FLOAT_PART - -channel names: -DEFAULT_TOKEN_CHANNEL -HIDDEN - -mode names: -DEFAULT_MODE - -atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 353, 3721, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 4, 126, 9, 126, 4, 127, 9, 127, 4, 128, 9, 128, 4, 129, 9, 129, 4, 130, 9, 130, 4, 131, 9, 131, 4, 132, 9, 132, 4, 133, 9, 133, 4, 134, 9, 134, 4, 135, 9, 135, 4, 136, 9, 136, 4, 137, 9, 137, 4, 138, 9, 138, 4, 139, 9, 139, 4, 140, 9, 140, 4, 141, 9, 141, 4, 142, 9, 142, 4, 143, 9, 143, 4, 144, 9, 144, 4, 145, 9, 145, 4, 146, 9, 146, 4, 147, 9, 147, 4, 148, 9, 148, 4, 149, 9, 149, 4, 150, 9, 150, 4, 151, 9, 151, 4, 152, 9, 152, 4, 153, 9, 153, 4, 154, 9, 154, 4, 155, 9, 155, 4, 156, 9, 156, 4, 157, 9, 157, 4, 158, 9, 158, 4, 159, 9, 159, 4, 160, 9, 160, 4, 161, 9, 161, 4, 162, 9, 162, 4, 163, 9, 163, 4, 164, 9, 164, 4, 165, 9, 165, 4, 166, 9, 166, 4, 167, 9, 167, 4, 168, 9, 168, 4, 169, 9, 169, 4, 170, 9, 170, 4, 171, 9, 171, 4, 172, 9, 172, 4, 173, 9, 173, 4, 174, 9, 174, 4, 175, 9, 175, 4, 176, 9, 176, 4, 177, 9, 177, 4, 178, 9, 178, 4, 179, 9, 179, 4, 180, 9, 180, 4, 181, 9, 181, 4, 182, 9, 182, 4, 183, 9, 183, 4, 184, 9, 184, 4, 185, 9, 185, 4, 186, 9, 186, 4, 187, 9, 187, 4, 188, 9, 188, 4, 189, 9, 189, 4, 190, 9, 190, 4, 191, 9, 191, 4, 192, 9, 192, 4, 193, 9, 193, 4, 194, 9, 194, 4, 195, 9, 195, 4, 196, 9, 196, 4, 197, 9, 197, 4, 198, 9, 198, 4, 199, 9, 199, 4, 200, 9, 200, 4, 201, 9, 201, 4, 202, 9, 202, 4, 203, 9, 203, 4, 204, 9, 204, 4, 205, 9, 205, 4, 206, 9, 206, 4, 207, 9, 207, 4, 208, 9, 208, 4, 209, 9, 209, 4, 210, 9, 210, 4, 211, 9, 211, 4, 212, 9, 212, 4, 213, 9, 213, 4, 214, 9, 214, 4, 215, 9, 215, 4, 216, 9, 216, 4, 217, 9, 217, 4, 218, 9, 218, 4, 219, 9, 219, 4, 220, 9, 220, 4, 221, 9, 221, 4, 222, 9, 222, 4, 223, 9, 223, 4, 224, 9, 224, 4, 225, 9, 225, 4, 226, 9, 226, 4, 227, 9, 227, 4, 228, 9, 228, 4, 229, 9, 229, 4, 230, 9, 230, 4, 231, 9, 231, 4, 232, 9, 232, 4, 233, 9, 233, 4, 234, 9, 234, 4, 235, 9, 235, 4, 236, 9, 236, 4, 237, 9, 237, 4, 238, 9, 238, 4, 239, 9, 239, 4, 240, 9, 240, 4, 241, 9, 241, 4, 242, 9, 242, 4, 243, 9, 243, 4, 244, 9, 244, 4, 245, 9, 245, 4, 246, 9, 246, 4, 247, 9, 247, 4, 248, 9, 248, 4, 249, 9, 249, 4, 250, 9, 250, 4, 251, 9, 251, 4, 252, 9, 252, 4, 253, 9, 253, 4, 254, 9, 254, 4, 255, 9, 255, 4, 256, 9, 256, 4, 257, 9, 257, 4, 258, 9, 258, 4, 259, 9, 259, 4, 260, 9, 260, 4, 261, 9, 261, 4, 262, 9, 262, 4, 263, 9, 263, 4, 264, 9, 264, 4, 265, 9, 265, 4, 266, 9, 266, 4, 267, 9, 267, 4, 268, 9, 268, 4, 269, 9, 269, 4, 270, 9, 270, 4, 271, 9, 271, 4, 272, 9, 272, 4, 273, 9, 273, 4, 274, 9, 274, 4, 275, 9, 275, 4, 276, 9, 276, 4, 277, 9, 277, 4, 278, 9, 278, 4, 279, 9, 279, 4, 280, 9, 280, 4, 281, 9, 281, 4, 282, 9, 282, 4, 283, 9, 283, 4, 284, 9, 284, 4, 285, 9, 285, 4, 286, 9, 286, 4, 287, 9, 287, 4, 288, 9, 288, 4, 289, 9, 289, 4, 290, 9, 290, 4, 291, 9, 291, 4, 292, 9, 292, 4, 293, 9, 293, 4, 294, 9, 294, 4, 295, 9, 295, 4, 296, 9, 296, 4, 297, 9, 297, 4, 298, 9, 298, 4, 299, 9, 299, 4, 300, 9, 300, 4, 301, 9, 301, 4, 302, 9, 302, 4, 303, 9, 303, 4, 304, 9, 304, 4, 305, 9, 305, 4, 306, 9, 306, 4, 307, 9, 307, 4, 308, 9, 308, 4, 309, 9, 309, 4, 310, 9, 310, 4, 311, 9, 311, 4, 312, 9, 312, 4, 313, 9, 313, 4, 314, 9, 314, 4, 315, 9, 315, 4, 316, 9, 316, 4, 317, 9, 317, 4, 318, 9, 318, 4, 319, 9, 319, 4, 320, 9, 320, 4, 321, 9, 321, 4, 322, 9, 322, 4, 323, 9, 323, 4, 324, 9, 324, 4, 325, 9, 325, 4, 326, 9, 326, 4, 327, 9, 327, 4, 328, 9, 328, 4, 329, 9, 329, 4, 330, 9, 330, 4, 331, 9, 331, 4, 332, 9, 332, 4, 333, 9, 333, 4, 334, 9, 334, 4, 335, 9, 335, 4, 336, 9, 336, 4, 337, 9, 337, 4, 338, 9, 338, 4, 339, 9, 339, 4, 340, 9, 340, 4, 341, 9, 341, 4, 342, 9, 342, 4, 343, 9, 343, 4, 344, 9, 344, 4, 345, 9, 345, 4, 346, 9, 346, 4, 347, 9, 347, 4, 348, 9, 348, 4, 349, 9, 349, 4, 350, 9, 350, 4, 351, 9, 351, 4, 352, 9, 352, 4, 353, 9, 353, 4, 354, 9, 354, 4, 355, 9, 355, 4, 356, 9, 356, 4, 357, 9, 357, 4, 358, 9, 358, 4, 359, 9, 359, 4, 360, 9, 360, 4, 361, 9, 361, 4, 362, 9, 362, 4, 363, 9, 363, 4, 364, 9, 364, 4, 365, 9, 365, 4, 366, 9, 366, 4, 367, 9, 367, 4, 368, 9, 368, 4, 369, 9, 369, 4, 370, 9, 370, 4, 371, 9, 371, 4, 372, 9, 372, 4, 373, 9, 373, 4, 374, 9, 374, 4, 375, 9, 375, 4, 376, 9, 376, 4, 377, 9, 377, 4, 378, 9, 378, 4, 379, 9, 379, 4, 380, 9, 380, 4, 381, 9, 381, 4, 382, 9, 382, 4, 383, 9, 383, 4, 384, 9, 384, 4, 385, 9, 385, 4, 386, 9, 386, 4, 387, 9, 387, 4, 388, 9, 388, 4, 389, 9, 389, 4, 390, 9, 390, 4, 391, 9, 391, 4, 392, 9, 392, 4, 393, 9, 393, 4, 394, 9, 394, 4, 395, 9, 395, 4, 396, 9, 396, 4, 397, 9, 397, 4, 398, 9, 398, 4, 399, 9, 399, 4, 400, 9, 400, 4, 401, 9, 401, 4, 402, 9, 402, 4, 403, 9, 403, 4, 404, 9, 404, 4, 405, 9, 405, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 54, 3, 54, 3, 55, 3, 55, 3, 56, 3, 56, 3, 57, 3, 57, 3, 58, 3, 58, 3, 59, 3, 59, 3, 60, 3, 60, 3, 61, 3, 61, 3, 62, 3, 62, 3, 63, 3, 63, 3, 64, 3, 64, 3, 65, 3, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 70, 6, 70, 966, 10, 70, 13, 70, 14, 70, 967, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 6, 72, 976, 10, 72, 13, 72, 14, 72, 977, 3, 72, 3, 72, 3, 72, 3, 72, 6, 72, 984, 10, 72, 13, 72, 14, 72, 985, 3, 72, 3, 72, 5, 72, 990, 10, 72, 3, 73, 3, 73, 3, 73, 3, 73, 6, 73, 996, 10, 73, 13, 73, 14, 73, 997, 3, 73, 3, 73, 3, 73, 3, 73, 6, 73, 1004, 10, 73, 13, 73, 14, 73, 1005, 3, 73, 5, 73, 1009, 10, 73, 3, 74, 3, 74, 3, 75, 5, 75, 1014, 10, 75, 3, 75, 3, 75, 3, 75, 3, 76, 5, 76, 1020, 10, 76, 3, 76, 5, 76, 1023, 10, 76, 3, 76, 3, 76, 3, 76, 3, 76, 5, 76, 1029, 10, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 5, 81, 1080, 10, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 94, 3, 94, 3, 94, 3, 94, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 111, 3, 111, 3, 111, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 113, 3, 113, 3, 113, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 121, 3, 121, 3, 121, 3, 121, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 123, 3, 123, 3, 123, 3, 123, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 127, 3, 127, 3, 127, 3, 127, 3, 127, 3, 128, 3, 128, 3, 128, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 136, 3, 136, 3, 136, 3, 136, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 139, 3, 139, 3, 139, 3, 139, 3, 139, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 142, 3, 142, 3, 142, 3, 142, 3, 142, 3, 142, 3, 142, 3, 142, 3, 142, 3, 142, 3, 142, 3, 142, 3, 142, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 145, 3, 145, 3, 145, 3, 145, 3, 146, 3, 146, 3, 146, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 148, 3, 148, 3, 148, 3, 149, 3, 149, 3, 149, 3, 149, 3, 149, 3, 149, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 152, 3, 152, 3, 152, 3, 152, 3, 152, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 155, 3, 155, 3, 155, 3, 155, 3, 155, 3, 155, 3, 156, 3, 156, 3, 156, 3, 157, 3, 157, 3, 157, 3, 158, 3, 158, 3, 158, 3, 158, 3, 158, 3, 158, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, 3, 161, 3, 161, 3, 161, 3, 161, 3, 161, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 163, 3, 163, 3, 163, 3, 163, 3, 163, 3, 163, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 3, 165, 3, 165, 3, 165, 3, 165, 3, 165, 3, 165, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 171, 3, 171, 3, 171, 3, 171, 3, 171, 3, 172, 3, 172, 3, 172, 3, 172, 3, 172, 3, 172, 3, 172, 3, 173, 3, 173, 3, 173, 3, 173, 3, 173, 3, 173, 3, 174, 3, 174, 3, 174, 3, 174, 3, 174, 3, 174, 3, 175, 3, 175, 3, 175, 3, 175, 3, 175, 3, 176, 3, 176, 3, 176, 3, 176, 3, 177, 3, 177, 3, 177, 3, 177, 3, 177, 3, 177, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 179, 3, 179, 3, 179, 3, 179, 3, 180, 3, 180, 3, 180, 3, 180, 3, 180, 3, 180, 3, 181, 3, 181, 3, 181, 3, 181, 3, 181, 3, 181, 3, 181, 3, 181, 3, 182, 3, 182, 3, 182, 3, 183, 3, 183, 3, 183, 3, 183, 3, 183, 3, 184, 3, 184, 3, 184, 3, 184, 3, 184, 3, 184, 3, 185, 3, 185, 3, 185, 3, 185, 3, 185, 3, 185, 3, 185, 3, 185, 3, 186, 3, 186, 3, 186, 3, 186, 3, 187, 3, 187, 3, 187, 3, 187, 3, 188, 3, 188, 3, 188, 3, 189, 3, 189, 3, 189, 3, 189, 3, 190, 3, 190, 3, 190, 3, 190, 3, 190, 3, 190, 3, 190, 3, 191, 3, 191, 3, 191, 3, 191, 3, 191, 3, 191, 3, 191, 3, 192, 3, 192, 3, 192, 3, 192, 3, 192, 3, 193, 3, 193, 3, 193, 3, 193, 3, 193, 3, 193, 3, 193, 3, 194, 3, 194, 3, 194, 3, 194, 3, 194, 3, 194, 3, 194, 3, 195, 3, 195, 3, 195, 3, 195, 3, 196, 3, 196, 3, 196, 3, 196, 3, 197, 3, 197, 3, 197, 3, 197, 3, 197, 3, 197, 3, 198, 3, 198, 3, 198, 3, 198, 3, 198, 3, 198, 3, 198, 3, 198, 3, 199, 3, 199, 3, 199, 3, 199, 3, 199, 3, 199, 3, 199, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 3, 201, 3, 201, 3, 201, 3, 201, 3, 201, 3, 201, 3, 202, 3, 202, 3, 202, 3, 202, 3, 202, 3, 203, 3, 203, 3, 203, 3, 203, 3, 204, 3, 204, 3, 204, 3, 204, 3, 204, 3, 204, 3, 204, 3, 204, 3, 205, 3, 205, 3, 205, 3, 205, 3, 205, 3, 205, 3, 205, 3, 205, 3, 206, 3, 206, 3, 206, 3, 206, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 208, 3, 208, 3, 208, 3, 208, 3, 208, 3, 208, 3, 208, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 211, 3, 211, 3, 211, 3, 211, 3, 212, 3, 212, 3, 212, 3, 212, 3, 213, 3, 213, 3, 213, 3, 213, 3, 214, 3, 214, 3, 214, 3, 214, 3, 214, 3, 214, 3, 214, 3, 214, 3, 214, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 217, 3, 217, 3, 217, 3, 217, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 220, 3, 220, 3, 220, 3, 220, 3, 220, 3, 220, 3, 220, 3, 220, 3, 220, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 227, 3, 227, 3, 227, 3, 227, 3, 227, 3, 228, 3, 228, 3, 228, 3, 228, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 232, 3, 232, 3, 232, 3, 232, 3, 232, 3, 232, 3, 233, 3, 233, 3, 233, 3, 233, 3, 233, 3, 234, 3, 234, 3, 234, 3, 234, 3, 234, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 236, 3, 236, 3, 236, 3, 236, 3, 236, 3, 236, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 3, 239, 3, 239, 3, 239, 3, 239, 3, 239, 3, 239, 3, 239, 3, 239, 3, 240, 3, 240, 3, 240, 3, 240, 3, 240, 3, 240, 3, 240, 3, 240, 3, 240, 3, 241, 3, 241, 3, 241, 3, 241, 3, 241, 3, 241, 3, 242, 3, 242, 3, 242, 3, 242, 3, 242, 3, 242, 3, 242, 3, 242, 3, 242, 3, 242, 3, 243, 3, 243, 3, 243, 3, 243, 3, 243, 3, 243, 3, 243, 3, 243, 3, 243, 3, 243, 3, 243, 3, 243, 3, 243, 3, 243, 3, 243, 5, 243, 2248, 10, 243, 3, 244, 3, 244, 3, 244, 3, 244, 3, 244, 3, 244, 3, 244, 3, 244, 3, 244, 3, 244, 3, 244, 3, 244, 3, 244, 3, 245, 3, 245, 3, 245, 3, 245, 3, 245, 3, 246, 3, 246, 3, 246, 3, 246, 3, 246, 3, 246, 3, 246, 3, 247, 3, 247, 3, 247, 3, 247, 3, 247, 3, 248, 3, 248, 3, 248, 3, 248, 3, 248, 3, 248, 3, 248, 3, 248, 3, 248, 3, 248, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 5, 249, 2317, 10, 249, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 3, 250, 5, 250, 2346, 10, 250, 3, 251, 3, 251, 3, 251, 3, 251, 3, 251, 3, 252, 3, 252, 3, 252, 3, 252, 3, 252, 3, 253, 3, 253, 3, 253, 3, 253, 3, 253, 3, 253, 3, 253, 3, 253, 3, 254, 3, 254, 3, 254, 3, 254, 3, 254, 3, 254, 3, 254, 3, 254, 3, 255, 3, 255, 3, 255, 3, 255, 3, 255, 3, 255, 3, 255, 3, 255, 3, 256, 3, 256, 3, 256, 3, 256, 3, 256, 3, 256, 3, 256, 3, 256, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 261, 3, 261, 3, 261, 3, 261, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 262, 3, 263, 3, 263, 3, 263, 3, 263, 3, 263, 3, 263, 3, 263, 3, 263, 3, 264, 3, 264, 3, 264, 3, 264, 3, 264, 3, 264, 3, 264, 3, 264, 3, 264, 3, 264, 3, 264, 3, 264, 3, 264, 3, 264, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 266, 3, 266, 3, 266, 3, 266, 3, 266, 3, 266, 3, 266, 3, 266, 3, 266, 3, 267, 3, 267, 3, 267, 3, 267, 3, 267, 3, 267, 3, 267, 3, 267, 3, 267, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 269, 3, 269, 3, 269, 3, 269, 3, 269, 3, 269, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 271, 3, 271, 3, 271, 3, 271, 3, 271, 3, 271, 3, 271, 3, 271, 3, 271, 3, 272, 3, 272, 3, 272, 3, 272, 3, 272, 3, 272, 3, 272, 3, 272, 3, 272, 3, 272, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 274, 3, 274, 3, 274, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 276, 3, 276, 3, 276, 3, 276, 3, 276, 3, 276, 3, 276, 3, 276, 3, 276, 3, 276, 3, 276, 3, 276, 3, 277, 3, 277, 3, 277, 3, 277, 3, 277, 3, 277, 3, 277, 3, 277, 3, 277, 3, 277, 3, 277, 3, 277, 3, 277, 3, 278, 3, 278, 3, 278, 3, 278, 3, 278, 3, 278, 3, 278, 3, 278, 3, 278, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 283, 3, 283, 3, 283, 3, 283, 3, 283, 3, 283, 3, 283, 3, 283, 3, 283, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 285, 3, 285, 3, 285, 3, 285, 3, 285, 3, 285, 3, 285, 3, 285, 3, 285, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 288, 3, 288, 3, 288, 3, 288, 3, 288, 3, 288, 3, 288, 3, 288, 3, 288, 3, 288, 3, 288, 3, 288, 3, 288, 3, 288, 3, 288, 3, 288, 3, 289, 3, 289, 3, 289, 3, 289, 3, 289, 3, 289, 3, 289, 3, 289, 3, 289, 3, 289, 3, 289, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 3, 291, 3, 291, 3, 291, 3, 291, 3, 291, 3, 291, 3, 292, 3, 292, 3, 292, 3, 292, 3, 292, 3, 292, 3, 292, 3, 292, 3, 293, 3, 293, 3, 293, 3, 293, 3, 293, 3, 293, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 295, 3, 295, 3, 295, 3, 295, 3, 295, 3, 296, 3, 296, 3, 296, 3, 296, 3, 296, 3, 296, 3, 296, 3, 296, 3, 297, 3, 297, 3, 297, 3, 297, 3, 297, 3, 297, 3, 297, 3, 297, 3, 297, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 300, 3, 300, 3, 300, 3, 300, 3, 300, 3, 300, 3, 300, 3, 300, 3, 300, 3, 300, 3, 301, 3, 301, 3, 301, 3, 301, 3, 301, 3, 302, 3, 302, 3, 302, 3, 302, 3, 302, 3, 303, 3, 303, 3, 303, 3, 303, 3, 303, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 305, 3, 305, 3, 305, 3, 305, 3, 305, 3, 305, 3, 305, 3, 305, 3, 305, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 309, 3, 309, 3, 309, 3, 309, 3, 309, 3, 309, 3, 309, 3, 310, 3, 310, 3, 310, 3, 310, 3, 310, 3, 310, 3, 310, 3, 311, 3, 311, 3, 311, 3, 311, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 313, 3, 313, 3, 313, 3, 313, 3, 313, 3, 313, 3, 313, 3, 313, 3, 313, 3, 313, 3, 313, 3, 313, 3, 313, 3, 313, 3, 313, 3, 313, 3, 313, 3, 313, 3, 313, 3, 314, 3, 314, 3, 314, 3, 314, 3, 314, 3, 314, 3, 314, 3, 314, 3, 314, 3, 314, 3, 314, 3, 314, 3, 314, 3, 314, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 316, 3, 316, 3, 316, 3, 316, 3, 316, 3, 316, 3, 316, 3, 316, 3, 316, 3, 316, 3, 316, 3, 316, 3, 317, 3, 317, 3, 317, 3, 317, 3, 317, 3, 317, 3, 317, 3, 317, 3, 317, 3, 317, 3, 317, 3, 317, 3, 318, 3, 318, 3, 318, 3, 318, 3, 318, 3, 318, 3, 318, 3, 318, 3, 318, 3, 318, 3, 318, 3, 318, 3, 318, 3, 318, 3, 318, 3, 318, 3, 319, 3, 319, 3, 319, 3, 319, 3, 319, 3, 319, 3, 319, 3, 319, 3, 319, 3, 319, 3, 319, 3, 320, 3, 320, 3, 320, 3, 320, 3, 320, 3, 320, 3, 320, 3, 320, 3, 320, 3, 320, 3, 320, 3, 321, 3, 321, 3, 321, 3, 321, 3, 321, 3, 321, 3, 321, 3, 321, 3, 321, 3, 322, 3, 322, 3, 322, 3, 322, 3, 322, 3, 322, 3, 322, 3, 322, 3, 322, 3, 322, 3, 322, 3, 323, 3, 323, 3, 323, 3, 323, 3, 323, 3, 323, 3, 324, 3, 324, 3, 324, 3, 324, 3, 324, 3, 324, 3, 325, 3, 325, 3, 325, 3, 325, 3, 325, 3, 326, 3, 326, 3, 326, 3, 326, 3, 326, 3, 327, 3, 327, 3, 327, 3, 327, 3, 327, 3, 327, 3, 327, 3, 328, 3, 328, 3, 328, 3, 328, 3, 328, 3, 328, 3, 328, 3, 328, 3, 328, 3, 328, 3, 329, 3, 329, 3, 329, 3, 329, 3, 329, 3, 329, 3, 329, 3, 329, 3, 330, 3, 330, 3, 330, 3, 330, 3, 330, 3, 330, 3, 330, 3, 331, 3, 331, 3, 331, 3, 331, 3, 331, 3, 331, 3, 332, 3, 332, 3, 332, 3, 332, 3, 333, 3, 333, 3, 333, 3, 333, 3, 333, 3, 334, 3, 334, 3, 334, 3, 334, 3, 334, 3, 334, 3, 334, 3, 334, 3, 335, 3, 335, 3, 335, 3, 335, 3, 335, 3, 335, 3, 335, 3, 335, 3, 336, 3, 336, 3, 336, 3, 336, 3, 336, 3, 336, 3, 336, 3, 336, 3, 336, 3, 337, 3, 337, 3, 337, 3, 337, 3, 337, 3, 337, 3, 337, 3, 337, 3, 337, 3, 338, 3, 338, 3, 338, 3, 338, 3, 338, 3, 338, 3, 339, 3, 339, 3, 339, 3, 339, 3, 339, 3, 339, 3, 339, 3, 339, 3, 339, 3, 339, 3, 340, 3, 340, 3, 340, 3, 340, 3, 340, 3, 340, 3, 340, 3, 340, 3, 340, 3, 341, 3, 341, 3, 341, 3, 341, 3, 341, 3, 342, 3, 342, 3, 342, 3, 342, 3, 342, 3, 342, 3, 342, 3, 342, 3, 342, 3, 342, 3, 342, 3, 343, 3, 343, 3, 343, 3, 343, 3, 343, 3, 343, 3, 343, 3, 343, 3, 343, 3, 344, 3, 344, 3, 344, 3, 344, 3, 344, 3, 345, 3, 345, 3, 345, 3, 345, 3, 345, 3, 345, 3, 345, 3, 345, 3, 345, 3, 346, 3, 346, 3, 346, 3, 346, 3, 346, 3, 347, 3, 347, 3, 347, 3, 347, 3, 347, 3, 347, 3, 347, 3, 347, 3, 347, 3, 347, 3, 347, 3, 348, 3, 348, 3, 348, 3, 348, 3, 348, 3, 348, 3, 348, 3, 348, 3, 348, 3, 349, 3, 349, 3, 349, 3, 349, 3, 349, 3, 350, 3, 350, 3, 350, 3, 350, 3, 350, 3, 350, 3, 350, 3, 351, 3, 351, 3, 351, 3, 351, 3, 351, 3, 351, 3, 351, 3, 351, 3, 351, 3, 352, 3, 352, 3, 352, 3, 352, 3, 352, 3, 352, 3, 352, 3, 352, 3, 352, 3, 353, 3, 353, 3, 353, 3, 353, 3, 353, 3, 354, 3, 354, 3, 354, 3, 354, 3, 354, 3, 354, 3, 354, 3, 354, 3, 355, 3, 355, 3, 355, 3, 355, 3, 355, 3, 355, 3, 355, 3, 355, 3, 355, 3, 355, 3, 355, 3, 356, 3, 356, 3, 356, 3, 356, 3, 356, 3, 356, 3, 356, 3, 356, 3, 356, 3, 356, 3, 356, 3, 357, 3, 357, 3, 357, 3, 357, 3, 357, 3, 357, 3, 357, 3, 357, 3, 357, 3, 358, 3, 358, 3, 358, 3, 358, 3, 358, 3, 358, 3, 358, 3, 358, 3, 359, 3, 359, 3, 359, 3, 359, 3, 359, 3, 359, 3, 360, 3, 360, 3, 360, 3, 360, 3, 360, 3, 360, 3, 360, 3, 360, 3, 360, 3, 361, 3, 361, 3, 361, 3, 361, 3, 361, 3, 361, 3, 361, 3, 362, 3, 362, 3, 362, 3, 362, 3, 362, 3, 362, 3, 363, 3, 363, 3, 363, 3, 363, 3, 363, 3, 363, 3, 363, 3, 363, 3, 364, 3, 364, 3, 364, 3, 364, 3, 364, 3, 364, 3, 364, 3, 364, 3, 365, 3, 365, 3, 365, 3, 365, 3, 365, 3, 365, 3, 365, 3, 366, 3, 366, 3, 366, 3, 366, 3, 366, 3, 366, 3, 366, 3, 366, 3, 366, 3, 366, 3, 367, 3, 367, 3, 367, 3, 367, 3, 367, 3, 367, 3, 367, 3, 368, 3, 368, 3, 368, 3, 368, 3, 368, 3, 368, 3, 368, 3, 369, 3, 369, 3, 369, 3, 369, 3, 369, 3, 369, 3, 369, 3, 370, 3, 370, 3, 370, 3, 370, 3, 370, 3, 370, 3, 370, 3, 371, 3, 371, 3, 371, 3, 371, 3, 371, 3, 371, 3, 371, 3, 372, 3, 372, 3, 372, 3, 372, 3, 372, 3, 372, 3, 372, 3, 372, 3, 372, 3, 372, 3, 372, 3, 372, 3, 372, 3, 372, 3, 372, 3, 372, 3, 372, 3, 373, 3, 373, 3, 373, 3, 373, 3, 373, 3, 373, 3, 373, 3, 373, 3, 373, 3, 373, 3, 373, 3, 373, 3, 373, 3, 373, 3, 373, 3, 373, 3, 373, 3, 374, 3, 374, 3, 374, 3, 374, 3, 374, 3, 374, 3, 374, 3, 374, 3, 374, 3, 374, 3, 374, 3, 374, 3, 374, 3, 374, 3, 374, 3, 375, 3, 375, 3, 375, 3, 375, 3, 375, 3, 375, 3, 375, 3, 375, 3, 375, 3, 375, 3, 375, 3, 375, 3, 375, 3, 375, 3, 376, 3, 376, 3, 376, 3, 376, 3, 376, 3, 376, 3, 376, 3, 376, 3, 376, 3, 376, 3, 376, 3, 376, 3, 376, 3, 376, 3, 376, 3, 377, 3, 377, 3, 377, 3, 377, 3, 377, 3, 377, 3, 377, 3, 377, 3, 377, 3, 377, 3, 377, 3, 377, 3, 377, 3, 377, 3, 377, 3, 377, 3, 378, 3, 378, 3, 378, 3, 378, 3, 378, 3, 378, 3, 378, 3, 378, 3, 378, 3, 378, 3, 378, 3, 378, 3, 378, 3, 378, 3, 378, 3, 378, 3, 378, 3, 378, 3, 379, 3, 379, 3, 379, 3, 379, 3, 379, 3, 379, 3, 379, 3, 379, 3, 379, 3, 379, 3, 379, 3, 379, 3, 379, 3, 379, 3, 379, 3, 380, 3, 380, 3, 380, 3, 380, 3, 381, 5, 381, 3524, 10, 381, 3, 382, 3, 382, 6, 382, 3528, 10, 382, 13, 382, 14, 382, 3529, 3, 383, 6, 383, 3533, 10, 383, 13, 383, 14, 383, 3534, 3, 383, 3, 383, 3, 383, 7, 383, 3540, 10, 383, 12, 383, 14, 383, 3543, 11, 383, 5, 383, 3545, 10, 383, 3, 383, 6, 383, 3548, 10, 383, 13, 383, 14, 383, 3549, 3, 383, 3, 383, 7, 383, 3554, 10, 383, 12, 383, 14, 383, 3557, 11, 383, 3, 383, 3, 383, 7, 383, 3561, 10, 383, 12, 383, 14, 383, 3564, 11, 383, 5, 383, 3566, 10, 383, 3, 384, 3, 384, 3, 384, 3, 385, 3, 385, 3, 386, 3, 386, 3, 387, 3, 387, 3, 388, 3, 388, 7, 388, 3579, 10, 388, 12, 388, 14, 388, 3582, 11, 388, 3, 388, 3, 388, 3, 389, 3, 389, 7, 389, 3588, 10, 389, 12, 389, 14, 389, 3591, 11, 389, 3, 389, 3, 389, 6, 389, 3595, 10, 389, 13, 389, 14, 389, 3596, 3, 390, 3, 390, 7, 390, 3601, 10, 390, 12, 390, 14, 390, 3604, 11, 390, 3, 390, 3, 390, 6, 390, 3608, 10, 390, 13, 390, 14, 390, 3609, 3, 391, 3, 391, 7, 391, 3614, 10, 391, 12, 391, 14, 391, 3617, 11, 391, 3, 391, 3, 391, 6, 391, 3621, 10, 391, 13, 391, 14, 391, 3622, 3, 392, 3, 392, 3, 392, 3, 392, 3, 392, 3, 392, 3, 392, 7, 392, 3632, 10, 392, 12, 392, 14, 392, 3635, 11, 392, 3, 392, 3, 392, 3, 392, 3, 392, 3, 392, 3, 393, 3, 393, 3, 393, 3, 393, 3, 393, 3, 393, 3, 394, 3, 394, 3, 394, 3, 394, 3, 394, 3, 395, 3, 395, 3, 395, 3, 395, 3, 395, 3, 395, 3, 395, 3, 395, 3, 395, 7, 395, 3662, 10, 395, 12, 395, 14, 395, 3665, 11, 395, 3, 395, 3, 395, 5, 395, 3669, 10, 395, 3, 395, 3, 395, 3, 396, 3, 396, 7, 396, 3675, 10, 396, 12, 396, 14, 396, 3678, 11, 396, 3, 396, 3, 396, 3, 397, 3, 397, 3, 397, 7, 397, 3685, 10, 397, 12, 397, 14, 397, 3688, 11, 397, 3, 397, 3, 397, 5, 397, 3692, 10, 397, 3, 397, 3, 397, 3, 398, 3, 398, 3, 398, 3, 399, 3, 399, 3, 400, 3, 400, 3, 400, 6, 400, 3704, 10, 400, 13, 400, 14, 400, 3705, 3, 401, 3, 401, 3, 401, 3, 402, 3, 402, 3, 402, 3, 403, 3, 403, 5, 403, 3716, 10, 403, 3, 404, 3, 404, 3, 405, 3, 405, 8, 3580, 3589, 3602, 3615, 3633, 3663, 2, 406, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 2, 87, 2, 89, 2, 91, 2, 93, 2, 95, 2, 97, 2, 99, 2, 101, 2, 103, 2, 105, 2, 107, 2, 109, 2, 111, 2, 113, 2, 115, 2, 117, 2, 119, 2, 121, 2, 123, 2, 125, 2, 127, 2, 129, 2, 131, 2, 133, 2, 135, 2, 137, 2, 139, 2, 141, 2, 143, 44, 145, 45, 147, 46, 149, 47, 151, 48, 153, 49, 155, 50, 157, 51, 159, 52, 161, 53, 163, 54, 165, 55, 167, 56, 169, 57, 171, 58, 173, 59, 175, 60, 177, 61, 179, 62, 181, 63, 183, 64, 185, 65, 187, 66, 189, 67, 191, 68, 193, 69, 195, 70, 197, 71, 199, 72, 201, 73, 203, 74, 205, 75, 207, 76, 209, 77, 211, 78, 213, 79, 215, 80, 217, 81, 219, 82, 221, 83, 223, 84, 225, 85, 227, 86, 229, 87, 231, 88, 233, 89, 235, 90, 237, 91, 239, 92, 241, 93, 243, 94, 245, 95, 247, 96, 249, 97, 251, 98, 253, 99, 255, 100, 257, 101, 259, 102, 261, 103, 263, 104, 265, 105, 267, 106, 269, 107, 271, 108, 273, 109, 275, 110, 277, 111, 279, 112, 281, 113, 283, 114, 285, 115, 287, 116, 289, 117, 291, 118, 293, 119, 295, 120, 297, 121, 299, 122, 301, 123, 303, 124, 305, 125, 307, 126, 309, 127, 311, 128, 313, 129, 315, 130, 317, 131, 319, 132, 321, 133, 323, 134, 325, 135, 327, 136, 329, 137, 331, 138, 333, 139, 335, 140, 337, 141, 339, 142, 341, 143, 343, 144, 345, 145, 347, 146, 349, 147, 351, 148, 353, 149, 355, 150, 357, 151, 359, 152, 361, 153, 363, 154, 365, 155, 367, 156, 369, 157, 371, 158, 373, 159, 375, 160, 377, 161, 379, 162, 381, 163, 383, 164, 385, 165, 387, 166, 389, 167, 391, 168, 393, 169, 395, 170, 397, 171, 399, 172, 401, 173, 403, 174, 405, 175, 407, 176, 409, 177, 411, 178, 413, 179, 415, 180, 417, 181, 419, 182, 421, 183, 423, 184, 425, 185, 427, 186, 429, 187, 431, 188, 433, 189, 435, 190, 437, 191, 439, 192, 441, 193, 443, 194, 445, 195, 447, 196, 449, 197, 451, 198, 453, 199, 455, 200, 457, 201, 459, 202, 461, 203, 463, 204, 465, 205, 467, 206, 469, 207, 471, 208, 473, 209, 475, 210, 477, 211, 479, 212, 481, 213, 483, 214, 485, 215, 487, 216, 489, 217, 491, 218, 493, 219, 495, 220, 497, 221, 499, 222, 501, 223, 503, 224, 505, 225, 507, 226, 509, 227, 511, 228, 513, 229, 515, 230, 517, 231, 519, 232, 521, 233, 523, 234, 525, 235, 527, 236, 529, 237, 531, 238, 533, 239, 535, 240, 537, 241, 539, 242, 541, 243, 543, 244, 545, 245, 547, 246, 549, 247, 551, 248, 553, 249, 555, 250, 557, 251, 559, 252, 561, 253, 563, 254, 565, 255, 567, 256, 569, 257, 571, 258, 573, 259, 575, 260, 577, 261, 579, 262, 581, 263, 583, 264, 585, 265, 587, 266, 589, 267, 591, 268, 593, 269, 595, 270, 597, 271, 599, 272, 601, 273, 603, 274, 605, 275, 607, 276, 609, 277, 611, 278, 613, 279, 615, 280, 617, 281, 619, 282, 621, 283, 623, 284, 625, 285, 627, 286, 629, 287, 631, 288, 633, 289, 635, 290, 637, 291, 639, 292, 641, 293, 643, 294, 645, 295, 647, 296, 649, 297, 651, 298, 653, 299, 655, 300, 657, 301, 659, 302, 661, 303, 663, 304, 665, 305, 667, 306, 669, 307, 671, 308, 673, 309, 675, 310, 677, 311, 679, 312, 681, 313, 683, 314, 685, 315, 687, 316, 689, 317, 691, 318, 693, 319, 695, 320, 697, 321, 699, 322, 701, 323, 703, 324, 705, 325, 707, 326, 709, 327, 711, 328, 713, 329, 715, 330, 717, 331, 719, 332, 721, 333, 723, 334, 725, 335, 727, 336, 729, 337, 731, 338, 733, 2, 735, 2, 737, 2, 739, 2, 741, 2, 743, 2, 745, 2, 747, 2, 749, 2, 751, 2, 753, 2, 755, 2, 757, 2, 759, 339, 761, 340, 763, 341, 765, 342, 767, 343, 769, 2, 771, 2, 773, 2, 775, 344, 777, 345, 779, 346, 781, 347, 783, 348, 785, 349, 787, 350, 789, 351, 791, 352, 793, 353, 795, 2, 797, 2, 799, 2, 801, 2, 803, 2, 805, 2, 807, 2, 809, 2, 3, 2, 40, 4, 2, 67, 67, 99, 99, 4, 2, 68, 68, 100, 100, 4, 2, 69, 69, 101, 101, 4, 2, 70, 70, 102, 102, 4, 2, 71, 71, 103, 103, 4, 2, 72, 72, 104, 104, 4, 2, 73, 73, 105, 105, 4, 2, 74, 74, 106, 106, 4, 2, 75, 75, 107, 107, 4, 2, 76, 76, 108, 108, 4, 2, 77, 77, 109, 109, 4, 2, 78, 78, 110, 110, 4, 2, 79, 79, 111, 111, 4, 2, 80, 80, 112, 112, 4, 2, 81, 81, 113, 113, 4, 2, 82, 82, 114, 114, 4, 2, 83, 83, 115, 115, 4, 2, 84, 84, 116, 116, 4, 2, 85, 85, 117, 117, 4, 2, 86, 86, 118, 118, 4, 2, 87, 87, 119, 119, 4, 2, 88, 88, 120, 120, 4, 2, 89, 89, 121, 121, 4, 2, 90, 90, 122, 122, 4, 2, 91, 91, 123, 123, 4, 2, 92, 92, 124, 124, 3, 2, 50, 59, 5, 2, 50, 59, 67, 72, 99, 104, 3, 2, 50, 51, 5, 2, 11, 12, 14, 15, 34, 34, 5, 2, 3, 10, 13, 14, 16, 33, 4, 2, 50, 59, 99, 124, 3, 2, 35, 35, 4, 2, 12, 12, 15, 15, 4, 2, 11, 11, 34, 34, 6, 2, 38, 38, 67, 92, 97, 97, 99, 124, 7, 2, 38, 38, 67, 92, 97, 97, 99, 124, 130, 1, 9, 2, 38, 38, 67, 70, 72, 92, 97, 97, 99, 102, 104, 124, 130, 1, 2, 3723, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 2, 163, 3, 2, 2, 2, 2, 165, 3, 2, 2, 2, 2, 167, 3, 2, 2, 2, 2, 169, 3, 2, 2, 2, 2, 171, 3, 2, 2, 2, 2, 173, 3, 2, 2, 2, 2, 175, 3, 2, 2, 2, 2, 177, 3, 2, 2, 2, 2, 179, 3, 2, 2, 2, 2, 181, 3, 2, 2, 2, 2, 183, 3, 2, 2, 2, 2, 185, 3, 2, 2, 2, 2, 187, 3, 2, 2, 2, 2, 189, 3, 2, 2, 2, 2, 191, 3, 2, 2, 2, 2, 193, 3, 2, 2, 2, 2, 195, 3, 2, 2, 2, 2, 197, 3, 2, 2, 2, 2, 199, 3, 2, 2, 2, 2, 201, 3, 2, 2, 2, 2, 203, 3, 2, 2, 2, 2, 205, 3, 2, 2, 2, 2, 207, 3, 2, 2, 2, 2, 209, 3, 2, 2, 2, 2, 211, 3, 2, 2, 2, 2, 213, 3, 2, 2, 2, 2, 215, 3, 2, 2, 2, 2, 217, 3, 2, 2, 2, 2, 219, 3, 2, 2, 2, 2, 221, 3, 2, 2, 2, 2, 223, 3, 2, 2, 2, 2, 225, 3, 2, 2, 2, 2, 227, 3, 2, 2, 2, 2, 229, 3, 2, 2, 2, 2, 231, 3, 2, 2, 2, 2, 233, 3, 2, 2, 2, 2, 235, 3, 2, 2, 2, 2, 237, 3, 2, 2, 2, 2, 239, 3, 2, 2, 2, 2, 241, 3, 2, 2, 2, 2, 243, 3, 2, 2, 2, 2, 245, 3, 2, 2, 2, 2, 247, 3, 2, 2, 2, 2, 249, 3, 2, 2, 2, 2, 251, 3, 2, 2, 2, 2, 253, 3, 2, 2, 2, 2, 255, 3, 2, 2, 2, 2, 257, 3, 2, 2, 2, 2, 259, 3, 2, 2, 2, 2, 261, 3, 2, 2, 2, 2, 263, 3, 2, 2, 2, 2, 265, 3, 2, 2, 2, 2, 267, 3, 2, 2, 2, 2, 269, 3, 2, 2, 2, 2, 271, 3, 2, 2, 2, 2, 273, 3, 2, 2, 2, 2, 275, 3, 2, 2, 2, 2, 277, 3, 2, 2, 2, 2, 279, 3, 2, 2, 2, 2, 281, 3, 2, 2, 2, 2, 283, 3, 2, 2, 2, 2, 285, 3, 2, 2, 2, 2, 287, 3, 2, 2, 2, 2, 289, 3, 2, 2, 2, 2, 291, 3, 2, 2, 2, 2, 293, 3, 2, 2, 2, 2, 295, 3, 2, 2, 2, 2, 297, 3, 2, 2, 2, 2, 299, 3, 2, 2, 2, 2, 301, 3, 2, 2, 2, 2, 303, 3, 2, 2, 2, 2, 305, 3, 2, 2, 2, 2, 307, 3, 2, 2, 2, 2, 309, 3, 2, 2, 2, 2, 311, 3, 2, 2, 2, 2, 313, 3, 2, 2, 2, 2, 315, 3, 2, 2, 2, 2, 317, 3, 2, 2, 2, 2, 319, 3, 2, 2, 2, 2, 321, 3, 2, 2, 2, 2, 323, 3, 2, 2, 2, 2, 325, 3, 2, 2, 2, 2, 327, 3, 2, 2, 2, 2, 329, 3, 2, 2, 2, 2, 331, 3, 2, 2, 2, 2, 333, 3, 2, 2, 2, 2, 335, 3, 2, 2, 2, 2, 337, 3, 2, 2, 2, 2, 339, 3, 2, 2, 2, 2, 341, 3, 2, 2, 2, 2, 343, 3, 2, 2, 2, 2, 345, 3, 2, 2, 2, 2, 347, 3, 2, 2, 2, 2, 349, 3, 2, 2, 2, 2, 351, 3, 2, 2, 2, 2, 353, 3, 2, 2, 2, 2, 355, 3, 2, 2, 2, 2, 357, 3, 2, 2, 2, 2, 359, 3, 2, 2, 2, 2, 361, 3, 2, 2, 2, 2, 363, 3, 2, 2, 2, 2, 365, 3, 2, 2, 2, 2, 367, 3, 2, 2, 2, 2, 369, 3, 2, 2, 2, 2, 371, 3, 2, 2, 2, 2, 373, 3, 2, 2, 2, 2, 375, 3, 2, 2, 2, 2, 377, 3, 2, 2, 2, 2, 379, 3, 2, 2, 2, 2, 381, 3, 2, 2, 2, 2, 383, 3, 2, 2, 2, 2, 385, 3, 2, 2, 2, 2, 387, 3, 2, 2, 2, 2, 389, 3, 2, 2, 2, 2, 391, 3, 2, 2, 2, 2, 393, 3, 2, 2, 2, 2, 395, 3, 2, 2, 2, 2, 397, 3, 2, 2, 2, 2, 399, 3, 2, 2, 2, 2, 401, 3, 2, 2, 2, 2, 403, 3, 2, 2, 2, 2, 405, 3, 2, 2, 2, 2, 407, 3, 2, 2, 2, 2, 409, 3, 2, 2, 2, 2, 411, 3, 2, 2, 2, 2, 413, 3, 2, 2, 2, 2, 415, 3, 2, 2, 2, 2, 417, 3, 2, 2, 2, 2, 419, 3, 2, 2, 2, 2, 421, 3, 2, 2, 2, 2, 423, 3, 2, 2, 2, 2, 425, 3, 2, 2, 2, 2, 427, 3, 2, 2, 2, 2, 429, 3, 2, 2, 2, 2, 431, 3, 2, 2, 2, 2, 433, 3, 2, 2, 2, 2, 435, 3, 2, 2, 2, 2, 437, 3, 2, 2, 2, 2, 439, 3, 2, 2, 2, 2, 441, 3, 2, 2, 2, 2, 443, 3, 2, 2, 2, 2, 445, 3, 2, 2, 2, 2, 447, 3, 2, 2, 2, 2, 449, 3, 2, 2, 2, 2, 451, 3, 2, 2, 2, 2, 453, 3, 2, 2, 2, 2, 455, 3, 2, 2, 2, 2, 457, 3, 2, 2, 2, 2, 459, 3, 2, 2, 2, 2, 461, 3, 2, 2, 2, 2, 463, 3, 2, 2, 2, 2, 465, 3, 2, 2, 2, 2, 467, 3, 2, 2, 2, 2, 469, 3, 2, 2, 2, 2, 471, 3, 2, 2, 2, 2, 473, 3, 2, 2, 2, 2, 475, 3, 2, 2, 2, 2, 477, 3, 2, 2, 2, 2, 479, 3, 2, 2, 2, 2, 481, 3, 2, 2, 2, 2, 483, 3, 2, 2, 2, 2, 485, 3, 2, 2, 2, 2, 487, 3, 2, 2, 2, 2, 489, 3, 2, 2, 2, 2, 491, 3, 2, 2, 2, 2, 493, 3, 2, 2, 2, 2, 495, 3, 2, 2, 2, 2, 497, 3, 2, 2, 2, 2, 499, 3, 2, 2, 2, 2, 501, 3, 2, 2, 2, 2, 503, 3, 2, 2, 2, 2, 505, 3, 2, 2, 2, 2, 507, 3, 2, 2, 2, 2, 509, 3, 2, 2, 2, 2, 511, 3, 2, 2, 2, 2, 513, 3, 2, 2, 2, 2, 515, 3, 2, 2, 2, 2, 517, 3, 2, 2, 2, 2, 519, 3, 2, 2, 2, 2, 521, 3, 2, 2, 2, 2, 523, 3, 2, 2, 2, 2, 525, 3, 2, 2, 2, 2, 527, 3, 2, 2, 2, 2, 529, 3, 2, 2, 2, 2, 531, 3, 2, 2, 2, 2, 533, 3, 2, 2, 2, 2, 535, 3, 2, 2, 2, 2, 537, 3, 2, 2, 2, 2, 539, 3, 2, 2, 2, 2, 541, 3, 2, 2, 2, 2, 543, 3, 2, 2, 2, 2, 545, 3, 2, 2, 2, 2, 547, 3, 2, 2, 2, 2, 549, 3, 2, 2, 2, 2, 551, 3, 2, 2, 2, 2, 553, 3, 2, 2, 2, 2, 555, 3, 2, 2, 2, 2, 557, 3, 2, 2, 2, 2, 559, 3, 2, 2, 2, 2, 561, 3, 2, 2, 2, 2, 563, 3, 2, 2, 2, 2, 565, 3, 2, 2, 2, 2, 567, 3, 2, 2, 2, 2, 569, 3, 2, 2, 2, 2, 571, 3, 2, 2, 2, 2, 573, 3, 2, 2, 2, 2, 575, 3, 2, 2, 2, 2, 577, 3, 2, 2, 2, 2, 579, 3, 2, 2, 2, 2, 581, 3, 2, 2, 2, 2, 583, 3, 2, 2, 2, 2, 585, 3, 2, 2, 2, 2, 587, 3, 2, 2, 2, 2, 589, 3, 2, 2, 2, 2, 591, 3, 2, 2, 2, 2, 593, 3, 2, 2, 2, 2, 595, 3, 2, 2, 2, 2, 597, 3, 2, 2, 2, 2, 599, 3, 2, 2, 2, 2, 601, 3, 2, 2, 2, 2, 603, 3, 2, 2, 2, 2, 605, 3, 2, 2, 2, 2, 607, 3, 2, 2, 2, 2, 609, 3, 2, 2, 2, 2, 611, 3, 2, 2, 2, 2, 613, 3, 2, 2, 2, 2, 615, 3, 2, 2, 2, 2, 617, 3, 2, 2, 2, 2, 619, 3, 2, 2, 2, 2, 621, 3, 2, 2, 2, 2, 623, 3, 2, 2, 2, 2, 625, 3, 2, 2, 2, 2, 627, 3, 2, 2, 2, 2, 629, 3, 2, 2, 2, 2, 631, 3, 2, 2, 2, 2, 633, 3, 2, 2, 2, 2, 635, 3, 2, 2, 2, 2, 637, 3, 2, 2, 2, 2, 639, 3, 2, 2, 2, 2, 641, 3, 2, 2, 2, 2, 643, 3, 2, 2, 2, 2, 645, 3, 2, 2, 2, 2, 647, 3, 2, 2, 2, 2, 649, 3, 2, 2, 2, 2, 651, 3, 2, 2, 2, 2, 653, 3, 2, 2, 2, 2, 655, 3, 2, 2, 2, 2, 657, 3, 2, 2, 2, 2, 659, 3, 2, 2, 2, 2, 661, 3, 2, 2, 2, 2, 663, 3, 2, 2, 2, 2, 665, 3, 2, 2, 2, 2, 667, 3, 2, 2, 2, 2, 669, 3, 2, 2, 2, 2, 671, 3, 2, 2, 2, 2, 673, 3, 2, 2, 2, 2, 675, 3, 2, 2, 2, 2, 677, 3, 2, 2, 2, 2, 679, 3, 2, 2, 2, 2, 681, 3, 2, 2, 2, 2, 683, 3, 2, 2, 2, 2, 685, 3, 2, 2, 2, 2, 687, 3, 2, 2, 2, 2, 689, 3, 2, 2, 2, 2, 691, 3, 2, 2, 2, 2, 693, 3, 2, 2, 2, 2, 695, 3, 2, 2, 2, 2, 697, 3, 2, 2, 2, 2, 699, 3, 2, 2, 2, 2, 701, 3, 2, 2, 2, 2, 703, 3, 2, 2, 2, 2, 705, 3, 2, 2, 2, 2, 707, 3, 2, 2, 2, 2, 709, 3, 2, 2, 2, 2, 711, 3, 2, 2, 2, 2, 713, 3, 2, 2, 2, 2, 715, 3, 2, 2, 2, 2, 717, 3, 2, 2, 2, 2, 719, 3, 2, 2, 2, 2, 721, 3, 2, 2, 2, 2, 723, 3, 2, 2, 2, 2, 725, 3, 2, 2, 2, 2, 727, 3, 2, 2, 2, 2, 729, 3, 2, 2, 2, 2, 731, 3, 2, 2, 2, 2, 733, 3, 2, 2, 2, 2, 735, 3, 2, 2, 2, 2, 737, 3, 2, 2, 2, 2, 739, 3, 2, 2, 2, 2, 741, 3, 2, 2, 2, 2, 743, 3, 2, 2, 2, 2, 745, 3, 2, 2, 2, 2, 747, 3, 2, 2, 2, 2, 749, 3, 2, 2, 2, 2, 751, 3, 2, 2, 2, 2, 753, 3, 2, 2, 2, 2, 755, 3, 2, 2, 2, 2, 757, 3, 2, 2, 2, 2, 759, 3, 2, 2, 2, 2, 761, 3, 2, 2, 2, 2, 763, 3, 2, 2, 2, 2, 765, 3, 2, 2, 2, 2, 767, 3, 2, 2, 2, 2, 775, 3, 2, 2, 2, 2, 777, 3, 2, 2, 2, 2, 779, 3, 2, 2, 2, 2, 781, 3, 2, 2, 2, 2, 783, 3, 2, 2, 2, 2, 785, 3, 2, 2, 2, 2, 787, 3, 2, 2, 2, 2, 789, 3, 2, 2, 2, 2, 791, 3, 2, 2, 2, 2, 793, 3, 2, 2, 2, 3, 811, 3, 2, 2, 2, 5, 813, 3, 2, 2, 2, 7, 816, 3, 2, 2, 2, 9, 820, 3, 2, 2, 2, 11, 823, 3, 2, 2, 2, 13, 825, 3, 2, 2, 2, 15, 828, 3, 2, 2, 2, 17, 830, 3, 2, 2, 2, 19, 833, 3, 2, 2, 2, 21, 835, 3, 2, 2, 2, 23, 837, 3, 2, 2, 2, 25, 839, 3, 2, 2, 2, 27, 841, 3, 2, 2, 2, 29, 843, 3, 2, 2, 2, 31, 845, 3, 2, 2, 2, 33, 847, 3, 2, 2, 2, 35, 850, 3, 2, 2, 2, 37, 853, 3, 2, 2, 2, 39, 856, 3, 2, 2, 2, 41, 858, 3, 2, 2, 2, 43, 860, 3, 2, 2, 2, 45, 863, 3, 2, 2, 2, 47, 865, 3, 2, 2, 2, 49, 867, 3, 2, 2, 2, 51, 869, 3, 2, 2, 2, 53, 871, 3, 2, 2, 2, 55, 873, 3, 2, 2, 2, 57, 875, 3, 2, 2, 2, 59, 877, 3, 2, 2, 2, 61, 879, 3, 2, 2, 2, 63, 881, 3, 2, 2, 2, 65, 883, 3, 2, 2, 2, 67, 885, 3, 2, 2, 2, 69, 887, 3, 2, 2, 2, 71, 890, 3, 2, 2, 2, 73, 894, 3, 2, 2, 2, 75, 896, 3, 2, 2, 2, 77, 899, 3, 2, 2, 2, 79, 902, 3, 2, 2, 2, 81, 905, 3, 2, 2, 2, 83, 907, 3, 2, 2, 2, 85, 910, 3, 2, 2, 2, 87, 912, 3, 2, 2, 2, 89, 914, 3, 2, 2, 2, 91, 916, 3, 2, 2, 2, 93, 918, 3, 2, 2, 2, 95, 920, 3, 2, 2, 2, 97, 922, 3, 2, 2, 2, 99, 924, 3, 2, 2, 2, 101, 926, 3, 2, 2, 2, 103, 928, 3, 2, 2, 2, 105, 930, 3, 2, 2, 2, 107, 932, 3, 2, 2, 2, 109, 934, 3, 2, 2, 2, 111, 936, 3, 2, 2, 2, 113, 938, 3, 2, 2, 2, 115, 940, 3, 2, 2, 2, 117, 942, 3, 2, 2, 2, 119, 944, 3, 2, 2, 2, 121, 946, 3, 2, 2, 2, 123, 948, 3, 2, 2, 2, 125, 950, 3, 2, 2, 2, 127, 952, 3, 2, 2, 2, 129, 954, 3, 2, 2, 2, 131, 956, 3, 2, 2, 2, 133, 958, 3, 2, 2, 2, 135, 960, 3, 2, 2, 2, 137, 962, 3, 2, 2, 2, 139, 965, 3, 2, 2, 2, 141, 969, 3, 2, 2, 2, 143, 989, 3, 2, 2, 2, 145, 1008, 3, 2, 2, 2, 147, 1010, 3, 2, 2, 2, 149, 1013, 3, 2, 2, 2, 151, 1022, 3, 2, 2, 2, 153, 1032, 3, 2, 2, 2, 155, 1040, 3, 2, 2, 2, 157, 1049, 3, 2, 2, 2, 159, 1059, 3, 2, 2, 2, 161, 1079, 3, 2, 2, 2, 163, 1081, 3, 2, 2, 2, 165, 1088, 3, 2, 2, 2, 167, 1095, 3, 2, 2, 2, 169, 1102, 3, 2, 2, 2, 171, 1107, 3, 2, 2, 2, 173, 1111, 3, 2, 2, 2, 175, 1116, 3, 2, 2, 2, 177, 1122, 3, 2, 2, 2, 179, 1130, 3, 2, 2, 2, 181, 1135, 3, 2, 2, 2, 183, 1143, 3, 2, 2, 2, 185, 1149, 3, 2, 2, 2, 187, 1156, 3, 2, 2, 2, 189, 1160, 3, 2, 2, 2, 191, 1169, 3, 2, 2, 2, 193, 1183, 3, 2, 2, 2, 195, 1197, 3, 2, 2, 2, 197, 1214, 3, 2, 2, 2, 199, 1229, 3, 2, 2, 2, 201, 1247, 3, 2, 2, 2, 203, 1267, 3, 2, 2, 2, 205, 1273, 3, 2, 2, 2, 207, 1280, 3, 2, 2, 2, 209, 1285, 3, 2, 2, 2, 211, 1293, 3, 2, 2, 2, 213, 1302, 3, 2, 2, 2, 215, 1312, 3, 2, 2, 2, 217, 1320, 3, 2, 2, 2, 219, 1327, 3, 2, 2, 2, 221, 1334, 3, 2, 2, 2, 223, 1337, 3, 2, 2, 2, 225, 1347, 3, 2, 2, 2, 227, 1350, 3, 2, 2, 2, 229, 1355, 3, 2, 2, 2, 231, 1361, 3, 2, 2, 2, 233, 1368, 3, 2, 2, 2, 235, 1378, 3, 2, 2, 2, 237, 1388, 3, 2, 2, 2, 239, 1397, 3, 2, 2, 2, 241, 1405, 3, 2, 2, 2, 243, 1409, 3, 2, 2, 2, 245, 1417, 3, 2, 2, 2, 247, 1421, 3, 2, 2, 2, 249, 1431, 3, 2, 2, 2, 251, 1439, 3, 2, 2, 2, 253, 1445, 3, 2, 2, 2, 255, 1450, 3, 2, 2, 2, 257, 1453, 3, 2, 2, 2, 259, 1460, 3, 2, 2, 2, 261, 1465, 3, 2, 2, 2, 263, 1473, 3, 2, 2, 2, 265, 1483, 3, 2, 2, 2, 267, 1490, 3, 2, 2, 2, 269, 1495, 3, 2, 2, 2, 271, 1501, 3, 2, 2, 2, 273, 1505, 3, 2, 2, 2, 275, 1510, 3, 2, 2, 2, 277, 1515, 3, 2, 2, 2, 279, 1520, 3, 2, 2, 2, 281, 1527, 3, 2, 2, 2, 283, 1533, 3, 2, 2, 2, 285, 1546, 3, 2, 2, 2, 287, 1556, 3, 2, 2, 2, 289, 1575, 3, 2, 2, 2, 291, 1579, 3, 2, 2, 2, 293, 1582, 3, 2, 2, 2, 295, 1587, 3, 2, 2, 2, 297, 1590, 3, 2, 2, 2, 299, 1596, 3, 2, 2, 2, 301, 1601, 3, 2, 2, 2, 303, 1608, 3, 2, 2, 2, 305, 1613, 3, 2, 2, 2, 307, 1620, 3, 2, 2, 2, 309, 1627, 3, 2, 2, 2, 311, 1633, 3, 2, 2, 2, 313, 1636, 3, 2, 2, 2, 315, 1639, 3, 2, 2, 2, 317, 1645, 3, 2, 2, 2, 319, 1653, 3, 2, 2, 2, 321, 1659, 3, 2, 2, 2, 323, 1664, 3, 2, 2, 2, 325, 1669, 3, 2, 2, 2, 327, 1675, 3, 2, 2, 2, 329, 1681, 3, 2, 2, 2, 331, 1687, 3, 2, 2, 2, 333, 1695, 3, 2, 2, 2, 335, 1706, 3, 2, 2, 2, 337, 1714, 3, 2, 2, 2, 339, 1725, 3, 2, 2, 2, 341, 1732, 3, 2, 2, 2, 343, 1737, 3, 2, 2, 2, 345, 1744, 3, 2, 2, 2, 347, 1750, 3, 2, 2, 2, 349, 1756, 3, 2, 2, 2, 351, 1761, 3, 2, 2, 2, 353, 1765, 3, 2, 2, 2, 355, 1771, 3, 2, 2, 2, 357, 1778, 3, 2, 2, 2, 359, 1782, 3, 2, 2, 2, 361, 1788, 3, 2, 2, 2, 363, 1796, 3, 2, 2, 2, 365, 1799, 3, 2, 2, 2, 367, 1804, 3, 2, 2, 2, 369, 1810, 3, 2, 2, 2, 371, 1818, 3, 2, 2, 2, 373, 1822, 3, 2, 2, 2, 375, 1826, 3, 2, 2, 2, 377, 1829, 3, 2, 2, 2, 379, 1833, 3, 2, 2, 2, 381, 1840, 3, 2, 2, 2, 383, 1847, 3, 2, 2, 2, 385, 1852, 3, 2, 2, 2, 387, 1859, 3, 2, 2, 2, 389, 1866, 3, 2, 2, 2, 391, 1870, 3, 2, 2, 2, 393, 1874, 3, 2, 2, 2, 395, 1880, 3, 2, 2, 2, 397, 1888, 3, 2, 2, 2, 399, 1895, 3, 2, 2, 2, 401, 1900, 3, 2, 2, 2, 403, 1906, 3, 2, 2, 2, 405, 1911, 3, 2, 2, 2, 407, 1915, 3, 2, 2, 2, 409, 1923, 3, 2, 2, 2, 411, 1931, 3, 2, 2, 2, 413, 1935, 3, 2, 2, 2, 415, 1943, 3, 2, 2, 2, 417, 1950, 3, 2, 2, 2, 419, 1958, 3, 2, 2, 2, 421, 1964, 3, 2, 2, 2, 423, 1968, 3, 2, 2, 2, 425, 1972, 3, 2, 2, 2, 427, 1976, 3, 2, 2, 2, 429, 1985, 3, 2, 2, 2, 431, 1997, 3, 2, 2, 2, 433, 2006, 3, 2, 2, 2, 435, 2010, 3, 2, 2, 2, 437, 2023, 3, 2, 2, 2, 439, 2033, 3, 2, 2, 2, 441, 2042, 3, 2, 2, 2, 443, 2053, 3, 2, 2, 2, 445, 2058, 3, 2, 2, 2, 447, 2069, 3, 2, 2, 2, 449, 2079, 3, 2, 2, 2, 451, 2092, 3, 2, 2, 2, 453, 2098, 3, 2, 2, 2, 455, 2103, 3, 2, 2, 2, 457, 2107, 3, 2, 2, 2, 459, 2119, 3, 2, 2, 2, 461, 2130, 3, 2, 2, 2, 463, 2140, 3, 2, 2, 2, 465, 2146, 3, 2, 2, 2, 467, 2151, 3, 2, 2, 2, 469, 2156, 3, 2, 2, 2, 471, 2164, 3, 2, 2, 2, 473, 2170, 3, 2, 2, 2, 475, 2184, 3, 2, 2, 2, 477, 2199, 3, 2, 2, 2, 479, 2207, 3, 2, 2, 2, 481, 2216, 3, 2, 2, 2, 483, 2222, 3, 2, 2, 2, 485, 2247, 3, 2, 2, 2, 487, 2249, 3, 2, 2, 2, 489, 2262, 3, 2, 2, 2, 491, 2267, 3, 2, 2, 2, 493, 2274, 3, 2, 2, 2, 495, 2279, 3, 2, 2, 2, 497, 2316, 3, 2, 2, 2, 499, 2345, 3, 2, 2, 2, 501, 2347, 3, 2, 2, 2, 503, 2352, 3, 2, 2, 2, 505, 2357, 3, 2, 2, 2, 507, 2365, 3, 2, 2, 2, 509, 2373, 3, 2, 2, 2, 511, 2381, 3, 2, 2, 2, 513, 2389, 3, 2, 2, 2, 515, 2398, 3, 2, 2, 2, 517, 2407, 3, 2, 2, 2, 519, 2415, 3, 2, 2, 2, 521, 2426, 3, 2, 2, 2, 523, 2430, 3, 2, 2, 2, 525, 2439, 3, 2, 2, 2, 527, 2447, 3, 2, 2, 2, 529, 2461, 3, 2, 2, 2, 531, 2476, 3, 2, 2, 2, 533, 2485, 3, 2, 2, 2, 535, 2494, 3, 2, 2, 2, 537, 2508, 3, 2, 2, 2, 539, 2514, 3, 2, 2, 2, 541, 2522, 3, 2, 2, 2, 543, 2531, 3, 2, 2, 2, 545, 2541, 3, 2, 2, 2, 547, 2550, 3, 2, 2, 2, 549, 2553, 3, 2, 2, 2, 551, 2560, 3, 2, 2, 2, 553, 2572, 3, 2, 2, 2, 555, 2585, 3, 2, 2, 2, 557, 2594, 3, 2, 2, 2, 559, 2601, 3, 2, 2, 2, 561, 2609, 3, 2, 2, 2, 563, 2617, 3, 2, 2, 2, 565, 2627, 3, 2, 2, 2, 567, 2636, 3, 2, 2, 2, 569, 2650, 3, 2, 2, 2, 571, 2659, 3, 2, 2, 2, 573, 2678, 3, 2, 2, 2, 575, 2689, 3, 2, 2, 2, 577, 2705, 3, 2, 2, 2, 579, 2716, 3, 2, 2, 2, 581, 2729, 3, 2, 2, 2, 583, 2735, 3, 2, 2, 2, 585, 2743, 3, 2, 2, 2, 587, 2749, 3, 2, 2, 2, 589, 2758, 3, 2, 2, 2, 591, 2763, 3, 2, 2, 2, 593, 2771, 3, 2, 2, 2, 595, 2780, 3, 2, 2, 2, 597, 2785, 3, 2, 2, 2, 599, 2792, 3, 2, 2, 2, 601, 2802, 3, 2, 2, 2, 603, 2807, 3, 2, 2, 2, 605, 2812, 3, 2, 2, 2, 607, 2817, 3, 2, 2, 2, 609, 2824, 3, 2, 2, 2, 611, 2833, 3, 2, 2, 2, 613, 2841, 3, 2, 2, 2, 615, 2846, 3, 2, 2, 2, 617, 2852, 3, 2, 2, 2, 619, 2859, 3, 2, 2, 2, 621, 2866, 3, 2, 2, 2, 623, 2870, 3, 2, 2, 2, 625, 2889, 3, 2, 2, 2, 627, 2908, 3, 2, 2, 2, 629, 2922, 3, 2, 2, 2, 631, 2939, 3, 2, 2, 2, 633, 2951, 3, 2, 2, 2, 635, 2963, 3, 2, 2, 2, 637, 2979, 3, 2, 2, 2, 639, 2990, 3, 2, 2, 2, 641, 3001, 3, 2, 2, 2, 643, 3010, 3, 2, 2, 2, 645, 3021, 3, 2, 2, 2, 647, 3027, 3, 2, 2, 2, 649, 3033, 3, 2, 2, 2, 651, 3038, 3, 2, 2, 2, 653, 3043, 3, 2, 2, 2, 655, 3050, 3, 2, 2, 2, 657, 3060, 3, 2, 2, 2, 659, 3068, 3, 2, 2, 2, 661, 3075, 3, 2, 2, 2, 663, 3081, 3, 2, 2, 2, 665, 3085, 3, 2, 2, 2, 667, 3090, 3, 2, 2, 2, 669, 3098, 3, 2, 2, 2, 671, 3106, 3, 2, 2, 2, 673, 3115, 3, 2, 2, 2, 675, 3124, 3, 2, 2, 2, 677, 3130, 3, 2, 2, 2, 679, 3140, 3, 2, 2, 2, 681, 3149, 3, 2, 2, 2, 683, 3154, 3, 2, 2, 2, 685, 3165, 3, 2, 2, 2, 687, 3174, 3, 2, 2, 2, 689, 3179, 3, 2, 2, 2, 691, 3188, 3, 2, 2, 2, 693, 3193, 3, 2, 2, 2, 695, 3204, 3, 2, 2, 2, 697, 3213, 3, 2, 2, 2, 699, 3218, 3, 2, 2, 2, 701, 3225, 3, 2, 2, 2, 703, 3234, 3, 2, 2, 2, 705, 3243, 3, 2, 2, 2, 707, 3248, 3, 2, 2, 2, 709, 3256, 3, 2, 2, 2, 711, 3267, 3, 2, 2, 2, 713, 3278, 3, 2, 2, 2, 715, 3287, 3, 2, 2, 2, 717, 3295, 3, 2, 2, 2, 719, 3301, 3, 2, 2, 2, 721, 3310, 3, 2, 2, 2, 723, 3317, 3, 2, 2, 2, 725, 3323, 3, 2, 2, 2, 727, 3331, 3, 2, 2, 2, 729, 3339, 3, 2, 2, 2, 731, 3346, 3, 2, 2, 2, 733, 3356, 3, 2, 2, 2, 735, 3363, 3, 2, 2, 2, 737, 3370, 3, 2, 2, 2, 739, 3377, 3, 2, 2, 2, 741, 3384, 3, 2, 2, 2, 743, 3391, 3, 2, 2, 2, 745, 3408, 3, 2, 2, 2, 747, 3425, 3, 2, 2, 2, 749, 3440, 3, 2, 2, 2, 751, 3454, 3, 2, 2, 2, 753, 3469, 3, 2, 2, 2, 755, 3485, 3, 2, 2, 2, 757, 3503, 3, 2, 2, 2, 759, 3518, 3, 2, 2, 2, 761, 3523, 3, 2, 2, 2, 763, 3525, 3, 2, 2, 2, 765, 3565, 3, 2, 2, 2, 767, 3567, 3, 2, 2, 2, 769, 3570, 3, 2, 2, 2, 771, 3572, 3, 2, 2, 2, 773, 3574, 3, 2, 2, 2, 775, 3576, 3, 2, 2, 2, 777, 3594, 3, 2, 2, 2, 779, 3607, 3, 2, 2, 2, 781, 3620, 3, 2, 2, 2, 783, 3624, 3, 2, 2, 2, 785, 3641, 3, 2, 2, 2, 787, 3647, 3, 2, 2, 2, 789, 3668, 3, 2, 2, 2, 791, 3672, 3, 2, 2, 2, 793, 3681, 3, 2, 2, 2, 795, 3695, 3, 2, 2, 2, 797, 3698, 3, 2, 2, 2, 799, 3703, 3, 2, 2, 2, 801, 3707, 3, 2, 2, 2, 803, 3710, 3, 2, 2, 2, 805, 3715, 3, 2, 2, 2, 807, 3717, 3, 2, 2, 2, 809, 3719, 3, 2, 2, 2, 811, 812, 7, 63, 2, 2, 812, 4, 3, 2, 2, 2, 813, 814, 7, 60, 2, 2, 814, 815, 7, 63, 2, 2, 815, 6, 3, 2, 2, 2, 816, 817, 7, 62, 2, 2, 817, 818, 7, 63, 2, 2, 818, 819, 7, 64, 2, 2, 819, 8, 3, 2, 2, 2, 820, 821, 7, 64, 2, 2, 821, 822, 7, 63, 2, 2, 822, 10, 3, 2, 2, 2, 823, 824, 7, 64, 2, 2, 824, 12, 3, 2, 2, 2, 825, 826, 7, 62, 2, 2, 826, 827, 7, 63, 2, 2, 827, 14, 3, 2, 2, 2, 828, 829, 7, 62, 2, 2, 829, 16, 3, 2, 2, 2, 830, 831, 7, 35, 2, 2, 831, 832, 7, 63, 2, 2, 832, 18, 3, 2, 2, 2, 833, 834, 7, 45, 2, 2, 834, 20, 3, 2, 2, 2, 835, 836, 7, 47, 2, 2, 836, 22, 3, 2, 2, 2, 837, 838, 7, 44, 2, 2, 838, 24, 3, 2, 2, 2, 839, 840, 7, 49, 2, 2, 840, 26, 3, 2, 2, 2, 841, 842, 7, 39, 2, 2, 842, 28, 3, 2, 2, 2, 843, 844, 7, 35, 2, 2, 844, 30, 3, 2, 2, 2, 845, 846, 7, 128, 2, 2, 846, 32, 3, 2, 2, 2, 847, 848, 7, 62, 2, 2, 848, 849, 7, 62, 2, 2, 849, 34, 3, 2, 2, 2, 850, 851, 7, 64, 2, 2, 851, 852, 7, 64, 2, 2, 852, 36, 3, 2, 2, 2, 853, 854, 7, 40, 2, 2, 854, 855, 7, 40, 2, 2, 855, 38, 3, 2, 2, 2, 856, 857, 7, 40, 2, 2, 857, 40, 3, 2, 2, 2, 858, 859, 7, 96, 2, 2, 859, 42, 3, 2, 2, 2, 860, 861, 7, 126, 2, 2, 861, 862, 7, 126, 2, 2, 862, 44, 3, 2, 2, 2, 863, 864, 7, 126, 2, 2, 864, 46, 3, 2, 2, 2, 865, 866, 7, 48, 2, 2, 866, 48, 3, 2, 2, 2, 867, 868, 7, 46, 2, 2, 868, 50, 3, 2, 2, 2, 869, 870, 7, 61, 2, 2, 870, 52, 3, 2, 2, 2, 871, 872, 7, 60, 2, 2, 872, 54, 3, 2, 2, 2, 873, 874, 7, 42, 2, 2, 874, 56, 3, 2, 2, 2, 875, 876, 7, 43, 2, 2, 876, 58, 3, 2, 2, 2, 877, 878, 7, 125, 2, 2, 878, 60, 3, 2, 2, 2, 879, 880, 7, 127, 2, 2, 880, 62, 3, 2, 2, 2, 881, 882, 7, 97, 2, 2, 882, 64, 3, 2, 2, 2, 883, 884, 7, 93, 2, 2, 884, 66, 3, 2, 2, 2, 885, 886, 7, 95, 2, 2, 886, 68, 3, 2, 2, 2, 887, 888, 7, 47, 2, 2, 888, 889, 7, 64, 2, 2, 889, 70, 3, 2, 2, 2, 890, 891, 7, 47, 2, 2, 891, 892, 7, 64, 2, 2, 892, 893, 7, 64, 2, 2, 893, 72, 3, 2, 2, 2, 894, 895, 7, 66, 2, 2, 895, 74, 3, 2, 2, 2, 896, 897, 7, 66, 2, 2, 897, 898, 5, 799, 400, 2, 898, 76, 3, 2, 2, 2, 899, 900, 7, 66, 2, 2, 900, 901, 7, 66, 2, 2, 901, 78, 3, 2, 2, 2, 902, 903, 7, 94, 2, 2, 903, 904, 7, 80, 2, 2, 904, 80, 3, 2, 2, 2, 905, 906, 7, 65, 2, 2, 906, 82, 3, 2, 2, 2, 907, 908, 7, 60, 2, 2, 908, 909, 7, 60, 2, 2, 909, 84, 3, 2, 2, 2, 910, 911, 9, 2, 2, 2, 911, 86, 3, 2, 2, 2, 912, 913, 9, 3, 2, 2, 913, 88, 3, 2, 2, 2, 914, 915, 9, 4, 2, 2, 915, 90, 3, 2, 2, 2, 916, 917, 9, 5, 2, 2, 917, 92, 3, 2, 2, 2, 918, 919, 9, 6, 2, 2, 919, 94, 3, 2, 2, 2, 920, 921, 9, 7, 2, 2, 921, 96, 3, 2, 2, 2, 922, 923, 9, 8, 2, 2, 923, 98, 3, 2, 2, 2, 924, 925, 9, 9, 2, 2, 925, 100, 3, 2, 2, 2, 926, 927, 9, 10, 2, 2, 927, 102, 3, 2, 2, 2, 928, 929, 9, 11, 2, 2, 929, 104, 3, 2, 2, 2, 930, 931, 9, 12, 2, 2, 931, 106, 3, 2, 2, 2, 932, 933, 9, 13, 2, 2, 933, 108, 3, 2, 2, 2, 934, 935, 9, 14, 2, 2, 935, 110, 3, 2, 2, 2, 936, 937, 9, 15, 2, 2, 937, 112, 3, 2, 2, 2, 938, 939, 9, 16, 2, 2, 939, 114, 3, 2, 2, 2, 940, 941, 9, 17, 2, 2, 941, 116, 3, 2, 2, 2, 942, 943, 9, 18, 2, 2, 943, 118, 3, 2, 2, 2, 944, 945, 9, 19, 2, 2, 945, 120, 3, 2, 2, 2, 946, 947, 9, 20, 2, 2, 947, 122, 3, 2, 2, 2, 948, 949, 9, 21, 2, 2, 949, 124, 3, 2, 2, 2, 950, 951, 9, 22, 2, 2, 951, 126, 3, 2, 2, 2, 952, 953, 9, 23, 2, 2, 953, 128, 3, 2, 2, 2, 954, 955, 9, 24, 2, 2, 955, 130, 3, 2, 2, 2, 956, 957, 9, 25, 2, 2, 957, 132, 3, 2, 2, 2, 958, 959, 9, 26, 2, 2, 959, 134, 3, 2, 2, 2, 960, 961, 9, 27, 2, 2, 961, 136, 3, 2, 2, 2, 962, 963, 9, 28, 2, 2, 963, 138, 3, 2, 2, 2, 964, 966, 5, 137, 69, 2, 965, 964, 3, 2, 2, 2, 966, 967, 3, 2, 2, 2, 967, 965, 3, 2, 2, 2, 967, 968, 3, 2, 2, 2, 968, 140, 3, 2, 2, 2, 969, 970, 9, 29, 2, 2, 970, 142, 3, 2, 2, 2, 971, 972, 7, 50, 2, 2, 972, 973, 7, 122, 2, 2, 973, 975, 3, 2, 2, 2, 974, 976, 5, 141, 71, 2, 975, 974, 3, 2, 2, 2, 976, 977, 3, 2, 2, 2, 977, 975, 3, 2, 2, 2, 977, 978, 3, 2, 2, 2, 978, 990, 3, 2, 2, 2, 979, 980, 7, 122, 2, 2, 980, 981, 7, 41, 2, 2, 981, 983, 3, 2, 2, 2, 982, 984, 5, 141, 71, 2, 983, 982, 3, 2, 2, 2, 984, 985, 3, 2, 2, 2, 985, 983, 3, 2, 2, 2, 985, 986, 3, 2, 2, 2, 986, 987, 3, 2, 2, 2, 987, 988, 7, 41, 2, 2, 988, 990, 3, 2, 2, 2, 989, 971, 3, 2, 2, 2, 989, 979, 3, 2, 2, 2, 990, 144, 3, 2, 2, 2, 991, 992, 7, 50, 2, 2, 992, 993, 7, 100, 2, 2, 993, 995, 3, 2, 2, 2, 994, 996, 9, 30, 2, 2, 995, 994, 3, 2, 2, 2, 996, 997, 3, 2, 2, 2, 997, 995, 3, 2, 2, 2, 997, 998, 3, 2, 2, 2, 998, 1009, 3, 2, 2, 2, 999, 1000, 7, 100, 2, 2, 1000, 1001, 7, 41, 2, 2, 1001, 1003, 3, 2, 2, 2, 1002, 1004, 9, 30, 2, 2, 1003, 1002, 3, 2, 2, 2, 1004, 1005, 3, 2, 2, 2, 1005, 1003, 3, 2, 2, 2, 1005, 1006, 3, 2, 2, 2, 1006, 1007, 3, 2, 2, 2, 1007, 1009, 7, 41, 2, 2, 1008, 991, 3, 2, 2, 2, 1008, 999, 3, 2, 2, 2, 1009, 146, 3, 2, 2, 2, 1010, 1011, 5, 139, 70, 2, 1011, 148, 3, 2, 2, 2, 1012, 1014, 5, 139, 70, 2, 1013, 1012, 3, 2, 2, 2, 1013, 1014, 3, 2, 2, 2, 1014, 1015, 3, 2, 2, 2, 1015, 1016, 5, 47, 24, 2, 1016, 1017, 5, 139, 70, 2, 1017, 150, 3, 2, 2, 2, 1018, 1020, 5, 139, 70, 2, 1019, 1018, 3, 2, 2, 2, 1019, 1020, 3, 2, 2, 2, 1020, 1021, 3, 2, 2, 2, 1021, 1023, 5, 47, 24, 2, 1022, 1019, 3, 2, 2, 2, 1022, 1023, 3, 2, 2, 2, 1023, 1024, 3, 2, 2, 2, 1024, 1025, 5, 139, 70, 2, 1025, 1028, 9, 6, 2, 2, 1026, 1029, 5, 21, 11, 2, 1027, 1029, 5, 19, 10, 2, 1028, 1026, 3, 2, 2, 2, 1028, 1027, 3, 2, 2, 2, 1028, 1029, 3, 2, 2, 2, 1029, 1030, 3, 2, 2, 2, 1030, 1031, 5, 139, 70, 2, 1031, 152, 3, 2, 2, 2, 1032, 1033, 5, 123, 62, 2, 1033, 1034, 5, 101, 51, 2, 1034, 1035, 5, 111, 56, 2, 1035, 1036, 5, 133, 67, 2, 1036, 1037, 5, 101, 51, 2, 1037, 1038, 5, 111, 56, 2, 1038, 1039, 5, 123, 62, 2, 1039, 154, 3, 2, 2, 2, 1040, 1041, 5, 121, 61, 2, 1041, 1042, 5, 109, 55, 2, 1042, 1043, 5, 85, 43, 2, 1043, 1044, 5, 107, 54, 2, 1044, 1045, 5, 107, 54, 2, 1045, 1046, 5, 101, 51, 2, 1046, 1047, 5, 111, 56, 2, 1047, 1048, 5, 123, 62, 2, 1048, 156, 3, 2, 2, 2, 1049, 1050, 5, 109, 55, 2, 1050, 1051, 5, 93, 47, 2, 1051, 1052, 5, 91, 46, 2, 1052, 1053, 5, 101, 51, 2, 1053, 1054, 5, 125, 63, 2, 1054, 1055, 5, 109, 55, 2, 1055, 1056, 5, 101, 51, 2, 1056, 1057, 5, 111, 56, 2, 1057, 1058, 5, 123, 62, 2, 1058, 158, 3, 2, 2, 2, 1059, 1060, 5, 87, 44, 2, 1060, 1061, 5, 133, 67, 2, 1061, 1062, 5, 123, 62, 2, 1062, 1063, 5, 93, 47, 2, 1063, 1064, 5, 101, 51, 2, 1064, 1065, 5, 111, 56, 2, 1065, 1066, 5, 123, 62, 2, 1066, 160, 3, 2, 2, 2, 1067, 1068, 5, 101, 51, 2, 1068, 1069, 5, 111, 56, 2, 1069, 1070, 5, 123, 62, 2, 1070, 1071, 5, 93, 47, 2, 1071, 1072, 5, 97, 49, 2, 1072, 1073, 5, 93, 47, 2, 1073, 1074, 5, 119, 60, 2, 1074, 1080, 3, 2, 2, 2, 1075, 1076, 5, 101, 51, 2, 1076, 1077, 5, 111, 56, 2, 1077, 1078, 5, 123, 62, 2, 1078, 1080, 3, 2, 2, 2, 1079, 1067, 3, 2, 2, 2, 1079, 1075, 3, 2, 2, 2, 1080, 162, 3, 2, 2, 2, 1081, 1082, 5, 87, 44, 2, 1082, 1083, 5, 101, 51, 2, 1083, 1084, 5, 97, 49, 2, 1084, 1085, 5, 101, 51, 2, 1085, 1086, 5, 111, 56, 2, 1086, 1087, 5, 123, 62, 2, 1087, 164, 3, 2, 2, 2, 1088, 1089, 5, 121, 61, 2, 1089, 1090, 5, 93, 47, 2, 1090, 1091, 5, 89, 45, 2, 1091, 1092, 5, 113, 57, 2, 1092, 1093, 5, 111, 56, 2, 1093, 1094, 5, 91, 46, 2, 1094, 166, 3, 2, 2, 2, 1095, 1096, 5, 109, 55, 2, 1096, 1097, 5, 101, 51, 2, 1097, 1098, 5, 111, 56, 2, 1098, 1099, 5, 125, 63, 2, 1099, 1100, 5, 123, 62, 2, 1100, 1101, 5, 93, 47, 2, 1101, 168, 3, 2, 2, 2, 1102, 1103, 5, 99, 50, 2, 1103, 1104, 5, 113, 57, 2, 1104, 1105, 5, 125, 63, 2, 1105, 1106, 5, 119, 60, 2, 1106, 170, 3, 2, 2, 2, 1107, 1108, 5, 91, 46, 2, 1108, 1109, 5, 85, 43, 2, 1109, 1110, 5, 133, 67, 2, 1110, 172, 3, 2, 2, 2, 1111, 1112, 5, 129, 65, 2, 1112, 1113, 5, 93, 47, 2, 1113, 1114, 5, 93, 47, 2, 1114, 1115, 5, 105, 53, 2, 1115, 174, 3, 2, 2, 2, 1116, 1117, 5, 109, 55, 2, 1117, 1118, 5, 113, 57, 2, 1118, 1119, 5, 111, 56, 2, 1119, 1120, 5, 123, 62, 2, 1120, 1121, 5, 99, 50, 2, 1121, 176, 3, 2, 2, 2, 1122, 1123, 5, 117, 59, 2, 1123, 1124, 5, 125, 63, 2, 1124, 1125, 5, 85, 43, 2, 1125, 1126, 5, 119, 60, 2, 1126, 1127, 5, 123, 62, 2, 1127, 1128, 5, 93, 47, 2, 1128, 1129, 5, 119, 60, 2, 1129, 178, 3, 2, 2, 2, 1130, 1131, 5, 133, 67, 2, 1131, 1132, 5, 93, 47, 2, 1132, 1133, 5, 85, 43, 2, 1133, 1134, 5, 119, 60, 2, 1134, 180, 3, 2, 2, 2, 1135, 1136, 5, 91, 46, 2, 1136, 1137, 5, 93, 47, 2, 1137, 1138, 5, 95, 48, 2, 1138, 1139, 5, 85, 43, 2, 1139, 1140, 5, 125, 63, 2, 1140, 1141, 5, 107, 54, 2, 1141, 1142, 5, 123, 62, 2, 1142, 182, 3, 2, 2, 2, 1143, 1144, 5, 125, 63, 2, 1144, 1145, 5, 111, 56, 2, 1145, 1146, 5, 101, 51, 2, 1146, 1147, 5, 113, 57, 2, 1147, 1148, 5, 111, 56, 2, 1148, 184, 3, 2, 2, 2, 1149, 1150, 5, 121, 61, 2, 1150, 1151, 5, 93, 47, 2, 1151, 1152, 5, 107, 54, 2, 1152, 1153, 5, 93, 47, 2, 1153, 1154, 5, 89, 45, 2, 1154, 1155, 5, 123, 62, 2, 1155, 186, 3, 2, 2, 2, 1156, 1157, 5, 85, 43, 2, 1157, 1158, 5, 107, 54, 2, 1158, 1159, 5, 107, 54, 2, 1159, 188, 3, 2, 2, 2, 1160, 1161, 5, 91, 46, 2, 1161, 1162, 5, 101, 51, 2, 1162, 1163, 5, 121, 61, 2, 1163, 1164, 5, 123, 62, 2, 1164, 1165, 5, 101, 51, 2, 1165, 1166, 5, 111, 56, 2, 1166, 1167, 5, 89, 45, 2, 1167, 1168, 5, 123, 62, 2, 1168, 190, 3, 2, 2, 2, 1169, 1170, 5, 121, 61, 2, 1170, 1171, 5, 123, 62, 2, 1171, 1172, 5, 119, 60, 2, 1172, 1173, 5, 85, 43, 2, 1173, 1174, 5, 101, 51, 2, 1174, 1175, 5, 97, 49, 2, 1175, 1176, 5, 99, 50, 2, 1176, 1177, 5, 123, 62, 2, 1177, 1178, 7, 97, 2, 2, 1178, 1179, 5, 103, 52, 2, 1179, 1180, 5, 113, 57, 2, 1180, 1181, 5, 101, 51, 2, 1181, 1182, 5, 111, 56, 2, 1182, 192, 3, 2, 2, 2, 1183, 1184, 5, 99, 50, 2, 1184, 1185, 5, 101, 51, 2, 1185, 1186, 5, 97, 49, 2, 1186, 1187, 5, 99, 50, 2, 1187, 1188, 7, 97, 2, 2, 1188, 1189, 5, 115, 58, 2, 1189, 1190, 5, 119, 60, 2, 1190, 1191, 5, 101, 51, 2, 1191, 1192, 5, 113, 57, 2, 1192, 1193, 5, 119, 60, 2, 1193, 1194, 5, 101, 51, 2, 1194, 1195, 5, 123, 62, 2, 1195, 1196, 5, 133, 67, 2, 1196, 194, 3, 2, 2, 2, 1197, 1198, 5, 121, 61, 2, 1198, 1199, 5, 117, 59, 2, 1199, 1200, 5, 107, 54, 2, 1200, 1201, 7, 97, 2, 2, 1201, 1202, 5, 121, 61, 2, 1202, 1203, 5, 109, 55, 2, 1203, 1204, 5, 85, 43, 2, 1204, 1205, 5, 107, 54, 2, 1205, 1206, 5, 107, 54, 2, 1206, 1207, 7, 97, 2, 2, 1207, 1208, 5, 119, 60, 2, 1208, 1209, 5, 93, 47, 2, 1209, 1210, 5, 121, 61, 2, 1210, 1211, 5, 125, 63, 2, 1211, 1212, 5, 107, 54, 2, 1212, 1213, 5, 123, 62, 2, 1213, 196, 3, 2, 2, 2, 1214, 1215, 5, 121, 61, 2, 1215, 1216, 5, 117, 59, 2, 1216, 1217, 5, 107, 54, 2, 1217, 1218, 7, 97, 2, 2, 1218, 1219, 5, 87, 44, 2, 1219, 1220, 5, 101, 51, 2, 1220, 1221, 5, 97, 49, 2, 1221, 1222, 7, 97, 2, 2, 1222, 1223, 5, 119, 60, 2, 1223, 1224, 5, 93, 47, 2, 1224, 1225, 5, 121, 61, 2, 1225, 1226, 5, 125, 63, 2, 1226, 1227, 5, 107, 54, 2, 1227, 1228, 5, 123, 62, 2, 1228, 198, 3, 2, 2, 2, 1229, 1230, 5, 121, 61, 2, 1230, 1231, 5, 117, 59, 2, 1231, 1232, 5, 107, 54, 2, 1232, 1233, 7, 97, 2, 2, 1233, 1234, 5, 87, 44, 2, 1234, 1235, 5, 125, 63, 2, 1235, 1236, 5, 95, 48, 2, 1236, 1237, 5, 95, 48, 2, 1237, 1238, 5, 93, 47, 2, 1238, 1239, 5, 119, 60, 2, 1239, 1240, 7, 97, 2, 2, 1240, 1241, 5, 119, 60, 2, 1241, 1242, 5, 93, 47, 2, 1242, 1243, 5, 121, 61, 2, 1243, 1244, 5, 125, 63, 2, 1244, 1245, 5, 107, 54, 2, 1245, 1246, 5, 123, 62, 2, 1246, 200, 3, 2, 2, 2, 1247, 1248, 5, 121, 61, 2, 1248, 1249, 5, 117, 59, 2, 1249, 1250, 5, 107, 54, 2, 1250, 1251, 7, 97, 2, 2, 1251, 1252, 5, 89, 45, 2, 1252, 1253, 5, 85, 43, 2, 1253, 1254, 5, 107, 54, 2, 1254, 1255, 5, 89, 45, 2, 1255, 1256, 7, 97, 2, 2, 1256, 1257, 5, 95, 48, 2, 1257, 1258, 5, 113, 57, 2, 1258, 1259, 5, 125, 63, 2, 1259, 1260, 5, 111, 56, 2, 1260, 1261, 5, 91, 46, 2, 1261, 1262, 7, 97, 2, 2, 1262, 1263, 5, 119, 60, 2, 1263, 1264, 5, 113, 57, 2, 1264, 1265, 5, 129, 65, 2, 1265, 1266, 5, 121, 61, 2, 1266, 202, 3, 2, 2, 2, 1267, 1268, 5, 107, 54, 2, 1268, 1269, 5, 101, 51, 2, 1269, 1270, 5, 109, 55, 2, 1270, 1271, 5, 101, 51, 2, 1271, 1272, 5, 123, 62, 2, 1272, 204, 3, 2, 2, 2, 1273, 1274, 5, 113, 57, 2, 1274, 1275, 5, 95, 48, 2, 1275, 1276, 5, 95, 48, 2, 1276, 1277, 5, 121, 61, 2, 1277, 1278, 5, 93, 47, 2, 1278, 1279, 5, 123, 62, 2, 1279, 206, 3, 2, 2, 2, 1280, 1281, 5, 101, 51, 2, 1281, 1282, 5, 111, 56, 2, 1282, 1283, 5, 123, 62, 2, 1283, 1284, 5, 113, 57, 2, 1284, 208, 3, 2, 2, 2, 1285, 1286, 5, 113, 57, 2, 1286, 1287, 5, 125, 63, 2, 1287, 1288, 5, 123, 62, 2, 1288, 1289, 5, 95, 48, 2, 1289, 1290, 5, 101, 51, 2, 1290, 1291, 5, 107, 54, 2, 1291, 1292, 5, 93, 47, 2, 1292, 210, 3, 2, 2, 2, 1293, 1294, 5, 91, 46, 2, 1294, 1295, 5, 125, 63, 2, 1295, 1296, 5, 109, 55, 2, 1296, 1297, 5, 115, 58, 2, 1297, 1298, 5, 95, 48, 2, 1298, 1299, 5, 101, 51, 2, 1299, 1300, 5, 107, 54, 2, 1300, 1301, 5, 93, 47, 2, 1301, 212, 3, 2, 2, 2, 1302, 1303, 5, 115, 58, 2, 1303, 1304, 5, 119, 60, 2, 1304, 1305, 5, 113, 57, 2, 1305, 1306, 5, 89, 45, 2, 1306, 1307, 5, 93, 47, 2, 1307, 1308, 5, 91, 46, 2, 1308, 1309, 5, 125, 63, 2, 1309, 1310, 5, 119, 60, 2, 1310, 1311, 5, 93, 47, 2, 1311, 214, 3, 2, 2, 2, 1312, 1313, 5, 85, 43, 2, 1313, 1314, 5, 111, 56, 2, 1314, 1315, 5, 85, 43, 2, 1315, 1316, 5, 107, 54, 2, 1316, 1317, 5, 133, 67, 2, 1317, 1318, 5, 121, 61, 2, 1318, 1319, 5, 93, 47, 2, 1319, 216, 3, 2, 2, 2, 1320, 1321, 5, 99, 50, 2, 1321, 1322, 5, 85, 43, 2, 1322, 1323, 5, 127, 64, 2, 1323, 1324, 5, 101, 51, 2, 1324, 1325, 5, 111, 56, 2, 1325, 1326, 5, 97, 49, 2, 1326, 218, 3, 2, 2, 2, 1327, 1328, 5, 129, 65, 2, 1328, 1329, 5, 101, 51, 2, 1329, 1330, 5, 111, 56, 2, 1330, 1331, 5, 91, 46, 2, 1331, 1332, 5, 113, 57, 2, 1332, 1333, 5, 129, 65, 2, 1333, 220, 3, 2, 2, 2, 1334, 1335, 5, 85, 43, 2, 1335, 1336, 5, 121, 61, 2, 1336, 222, 3, 2, 2, 2, 1337, 1338, 5, 115, 58, 2, 1338, 1339, 5, 85, 43, 2, 1339, 1340, 5, 119, 60, 2, 1340, 1341, 5, 123, 62, 2, 1341, 1342, 5, 101, 51, 2, 1342, 1343, 5, 123, 62, 2, 1343, 1344, 5, 101, 51, 2, 1344, 1345, 5, 113, 57, 2, 1345, 1346, 5, 111, 56, 2, 1346, 224, 3, 2, 2, 2, 1347, 1348, 5, 87, 44, 2, 1348, 1349, 5, 133, 67, 2, 1349, 226, 3, 2, 2, 2, 1350, 1351, 5, 119, 60, 2, 1351, 1352, 5, 113, 57, 2, 1352, 1353, 5, 129, 65, 2, 1353, 1354, 5, 121, 61, 2, 1354, 228, 3, 2, 2, 2, 1355, 1356, 5, 119, 60, 2, 1356, 1357, 5, 85, 43, 2, 1357, 1358, 5, 111, 56, 2, 1358, 1359, 5, 97, 49, 2, 1359, 1360, 5, 93, 47, 2, 1360, 230, 3, 2, 2, 2, 1361, 1362, 5, 97, 49, 2, 1362, 1363, 5, 119, 60, 2, 1363, 1364, 5, 113, 57, 2, 1364, 1365, 5, 125, 63, 2, 1365, 1366, 5, 115, 58, 2, 1366, 1367, 5, 121, 61, 2, 1367, 232, 3, 2, 2, 2, 1368, 1369, 5, 125, 63, 2, 1369, 1370, 5, 111, 56, 2, 1370, 1371, 5, 87, 44, 2, 1371, 1372, 5, 113, 57, 2, 1372, 1373, 5, 125, 63, 2, 1373, 1374, 5, 111, 56, 2, 1374, 1375, 5, 91, 46, 2, 1375, 1376, 5, 93, 47, 2, 1376, 1377, 5, 91, 46, 2, 1377, 234, 3, 2, 2, 2, 1378, 1379, 5, 115, 58, 2, 1379, 1380, 5, 119, 60, 2, 1380, 1381, 5, 93, 47, 2, 1381, 1382, 5, 89, 45, 2, 1382, 1383, 5, 93, 47, 2, 1383, 1384, 5, 91, 46, 2, 1384, 1385, 5, 101, 51, 2, 1385, 1386, 5, 111, 56, 2, 1386, 1387, 5, 97, 49, 2, 1387, 236, 3, 2, 2, 2, 1388, 1389, 5, 101, 51, 2, 1389, 1390, 5, 111, 56, 2, 1390, 1391, 5, 123, 62, 2, 1391, 1392, 5, 93, 47, 2, 1392, 1393, 5, 119, 60, 2, 1393, 1394, 5, 127, 64, 2, 1394, 1395, 5, 85, 43, 2, 1395, 1396, 5, 107, 54, 2, 1396, 238, 3, 2, 2, 2, 1397, 1398, 5, 89, 45, 2, 1398, 1399, 5, 125, 63, 2, 1399, 1400, 5, 119, 60, 2, 1400, 1401, 5, 119, 60, 2, 1401, 1402, 5, 93, 47, 2, 1402, 1403, 5, 111, 56, 2, 1403, 1404, 5, 123, 62, 2, 1404, 240, 3, 2, 2, 2, 1405, 1406, 5, 119, 60, 2, 1406, 1407, 5, 113, 57, 2, 1407, 1408, 5, 129, 65, 2, 1408, 242, 3, 2, 2, 2, 1409, 1410, 5, 87, 44, 2, 1410, 1411, 5, 93, 47, 2, 1411, 1412, 5, 123, 62, 2, 1412, 1413, 5, 129, 65, 2, 1413, 1414, 5, 93, 47, 2, 1414, 1415, 5, 93, 47, 2, 1415, 1416, 5, 111, 56, 2, 1416, 244, 3, 2, 2, 2, 1417, 1418, 5, 85, 43, 2, 1418, 1419, 5, 111, 56, 2, 1419, 1420, 5, 91, 46, 2, 1420, 246, 3, 2, 2, 2, 1421, 1422, 5, 95, 48, 2, 1422, 1423, 5, 113, 57, 2, 1423, 1424, 5, 107, 54, 2, 1424, 1425, 5, 107, 54, 2, 1425, 1426, 5, 113, 57, 2, 1426, 1427, 5, 129, 65, 2, 1427, 1428, 5, 101, 51, 2, 1428, 1429, 5, 111, 56, 2, 1429, 1430, 5, 97, 49, 2, 1430, 248, 3, 2, 2, 2, 1431, 1432, 5, 93, 47, 2, 1432, 1433, 5, 131, 66, 2, 1433, 1434, 5, 89, 45, 2, 1434, 1435, 5, 107, 54, 2, 1435, 1436, 5, 125, 63, 2, 1436, 1437, 5, 91, 46, 2, 1437, 1438, 5, 93, 47, 2, 1438, 250, 3, 2, 2, 2, 1439, 1440, 5, 97, 49, 2, 1440, 1441, 5, 119, 60, 2, 1441, 1442, 5, 113, 57, 2, 1442, 1443, 5, 125, 63, 2, 1443, 1444, 5, 115, 58, 2, 1444, 252, 3, 2, 2, 2, 1445, 1446, 5, 123, 62, 2, 1446, 1447, 5, 101, 51, 2, 1447, 1448, 5, 93, 47, 2, 1448, 1449, 5, 121, 61, 2, 1449, 254, 3, 2, 2, 2, 1450, 1451, 5, 111, 56, 2, 1451, 1452, 5, 113, 57, 2, 1452, 256, 3, 2, 2, 2, 1453, 1454, 5, 113, 57, 2, 1454, 1455, 5, 123, 62, 2, 1455, 1456, 5, 99, 50, 2, 1456, 1457, 5, 93, 47, 2, 1457, 1458, 5, 119, 60, 2, 1458, 1459, 5, 121, 61, 2, 1459, 258, 3, 2, 2, 2, 1460, 1461, 5, 129, 65, 2, 1461, 1462, 5, 101, 51, 2, 1462, 1463, 5, 123, 62, 2, 1463, 1464, 5, 99, 50, 2, 1464, 260, 3, 2, 2, 2, 1465, 1466, 5, 129, 65, 2, 1466, 1467, 5, 101, 51, 2, 1467, 1468, 5, 123, 62, 2, 1468, 1469, 5, 99, 50, 2, 1469, 1470, 5, 113, 57, 2, 1470, 1471, 5, 125, 63, 2, 1471, 1472, 5, 123, 62, 2, 1472, 262, 3, 2, 2, 2, 1473, 1474, 5, 119, 60, 2, 1474, 1475, 5, 93, 47, 2, 1475, 1476, 5, 89, 45, 2, 1476, 1477, 5, 125, 63, 2, 1477, 1478, 5, 119, 60, 2, 1478, 1479, 5, 121, 61, 2, 1479, 1480, 5, 101, 51, 2, 1480, 1481, 5, 127, 64, 2, 1481, 1482, 5, 93, 47, 2, 1482, 264, 3, 2, 2, 2, 1483, 1484, 5, 119, 60, 2, 1484, 1485, 5, 113, 57, 2, 1485, 1486, 5, 107, 54, 2, 1486, 1487, 5, 107, 54, 2, 1487, 1488, 5, 125, 63, 2, 1488, 1489, 5, 115, 58, 2, 1489, 266, 3, 2, 2, 2, 1490, 1491, 5, 89, 45, 2, 1491, 1492, 5, 125, 63, 2, 1492, 1493, 5, 87, 44, 2, 1493, 1494, 5, 93, 47, 2, 1494, 268, 3, 2, 2, 2, 1495, 1496, 5, 113, 57, 2, 1496, 1497, 5, 119, 60, 2, 1497, 1498, 5, 91, 46, 2, 1498, 1499, 5, 93, 47, 2, 1499, 1500, 5, 119, 60, 2, 1500, 270, 3, 2, 2, 2, 1501, 1502, 5, 85, 43, 2, 1502, 1503, 5, 121, 61, 2, 1503, 1504, 5, 89, 45, 2, 1504, 272, 3, 2, 2, 2, 1505, 1506, 5, 91, 46, 2, 1506, 1507, 5, 93, 47, 2, 1507, 1508, 5, 121, 61, 2, 1508, 1509, 5, 89, 45, 2, 1509, 274, 3, 2, 2, 2, 1510, 1511, 5, 95, 48, 2, 1511, 1512, 5, 119, 60, 2, 1512, 1513, 5, 113, 57, 2, 1513, 1514, 5, 109, 55, 2, 1514, 276, 3, 2, 2, 2, 1515, 1516, 5, 91, 46, 2, 1516, 1517, 5, 125, 63, 2, 1517, 1518, 5, 85, 43, 2, 1518, 1519, 5, 107, 54, 2, 1519, 278, 3, 2, 2, 2, 1520, 1521, 5, 127, 64, 2, 1521, 1522, 5, 85, 43, 2, 1522, 1523, 5, 107, 54, 2, 1523, 1524, 5, 125, 63, 2, 1524, 1525, 5, 93, 47, 2, 1525, 1526, 5, 121, 61, 2, 1526, 280, 3, 2, 2, 2, 1527, 1528, 5, 123, 62, 2, 1528, 1529, 5, 85, 43, 2, 1529, 1530, 5, 87, 44, 2, 1530, 1531, 5, 107, 54, 2, 1531, 1532, 5, 93, 47, 2, 1532, 282, 3, 2, 2, 2, 1533, 1534, 5, 121, 61, 2, 1534, 1535, 5, 117, 59, 2, 1535, 1536, 5, 107, 54, 2, 1536, 1537, 7, 97, 2, 2, 1537, 1538, 5, 111, 56, 2, 1538, 1539, 5, 113, 57, 2, 1539, 1540, 7, 97, 2, 2, 1540, 1541, 5, 89, 45, 2, 1541, 1542, 5, 85, 43, 2, 1542, 1543, 5, 89, 45, 2, 1543, 1544, 5, 99, 50, 2, 1544, 1545, 5, 93, 47, 2, 1545, 284, 3, 2, 2, 2, 1546, 1547, 5, 121, 61, 2, 1547, 1548, 5, 117, 59, 2, 1548, 1549, 5, 107, 54, 2, 1549, 1550, 7, 97, 2, 2, 1550, 1551, 5, 89, 45, 2, 1551, 1552, 5, 85, 43, 2, 1552, 1553, 5, 89, 45, 2, 1553, 1554, 5, 99, 50, 2, 1554, 1555, 5, 93, 47, 2, 1555, 286, 3, 2, 2, 2, 1556, 1557, 5, 109, 55, 2, 1557, 1558, 5, 85, 43, 2, 1558, 1559, 5, 131, 66, 2, 1559, 1560, 7, 97, 2, 2, 1560, 1561, 5, 121, 61, 2, 1561, 1562, 5, 123, 62, 2, 1562, 1563, 5, 85, 43, 2, 1563, 1564, 5, 123, 62, 2, 1564, 1565, 5, 93, 47, 2, 1565, 1566, 5, 109, 55, 2, 1566, 1567, 5, 93, 47, 2, 1567, 1568, 5, 111, 56, 2, 1568, 1569, 5, 123, 62, 2, 1569, 1570, 7, 97, 2, 2, 1570, 1571, 5, 123, 62, 2, 1571, 1572, 5, 101, 51, 2, 1572, 1573, 5, 109, 55, 2, 1573, 1574, 5, 93, 47, 2, 1574, 288, 3, 2, 2, 2, 1575, 1576, 5, 95, 48, 2, 1576, 1577, 5, 113, 57, 2, 1577, 1578, 5, 119, 60, 2, 1578, 290, 3, 2, 2, 2, 1579, 1580, 5, 113, 57, 2, 1580, 1581, 5, 95, 48, 2, 1581, 292, 3, 2, 2, 2, 1582, 1583, 5, 107, 54, 2, 1583, 1584, 5, 113, 57, 2, 1584, 1585, 5, 89, 45, 2, 1585, 1586, 5, 105, 53, 2, 1586, 294, 3, 2, 2, 2, 1587, 1588, 5, 101, 51, 2, 1588, 1589, 5, 111, 56, 2, 1589, 296, 3, 2, 2, 2, 1590, 1591, 5, 121, 61, 2, 1591, 1592, 5, 99, 50, 2, 1592, 1593, 5, 85, 43, 2, 1593, 1594, 5, 119, 60, 2, 1594, 1595, 5, 93, 47, 2, 1595, 298, 3, 2, 2, 2, 1596, 1597, 5, 109, 55, 2, 1597, 1598, 5, 113, 57, 2, 1598, 1599, 5, 91, 46, 2, 1599, 1600, 5, 93, 47, 2, 1600, 300, 3, 2, 2, 2, 1601, 1602, 5, 125, 63, 2, 1602, 1603, 5, 115, 58, 2, 1603, 1604, 5, 91, 46, 2, 1604, 1605, 5, 85, 43, 2, 1605, 1606, 5, 123, 62, 2, 1606, 1607, 5, 93, 47, 2, 1607, 302, 3, 2, 2, 2, 1608, 1609, 5, 121, 61, 2, 1609, 1610, 5, 105, 53, 2, 1610, 1611, 5, 101, 51, 2, 1611, 1612, 5, 115, 58, 2, 1612, 304, 3, 2, 2, 2, 1613, 1614, 5, 107, 54, 2, 1614, 1615, 5, 113, 57, 2, 1615, 1616, 5, 89, 45, 2, 1616, 1617, 5, 105, 53, 2, 1617, 1618, 5, 93, 47, 2, 1618, 1619, 5, 91, 46, 2, 1619, 306, 3, 2, 2, 2, 1620, 1621, 5, 111, 56, 2, 1621, 1622, 5, 113, 57, 2, 1622, 1623, 5, 129, 65, 2, 1623, 1624, 5, 85, 43, 2, 1624, 1625, 5, 101, 51, 2, 1625, 1626, 5, 123, 62, 2, 1626, 308, 3, 2, 2, 2, 1627, 1628, 5, 129, 65, 2, 1628, 1629, 5, 99, 50, 2, 1629, 1630, 5, 93, 47, 2, 1630, 1631, 5, 119, 60, 2, 1631, 1632, 5, 93, 47, 2, 1632, 310, 3, 2, 2, 2, 1633, 1634, 5, 113, 57, 2, 1634, 1635, 5, 103, 52, 2, 1635, 312, 3, 2, 2, 2, 1636, 1637, 5, 113, 57, 2, 1637, 1638, 5, 111, 56, 2, 1638, 314, 3, 2, 2, 2, 1639, 1640, 5, 125, 63, 2, 1640, 1641, 5, 121, 61, 2, 1641, 1642, 5, 101, 51, 2, 1642, 1643, 5, 111, 56, 2, 1643, 1644, 5, 97, 49, 2, 1644, 316, 3, 2, 2, 2, 1645, 1646, 5, 111, 56, 2, 1646, 1647, 5, 85, 43, 2, 1647, 1648, 5, 123, 62, 2, 1648, 1649, 5, 125, 63, 2, 1649, 1650, 5, 119, 60, 2, 1650, 1651, 5, 85, 43, 2, 1651, 1652, 5, 107, 54, 2, 1652, 318, 3, 2, 2, 2, 1653, 1654, 5, 101, 51, 2, 1654, 1655, 5, 111, 56, 2, 1655, 1656, 5, 111, 56, 2, 1656, 1657, 5, 93, 47, 2, 1657, 1658, 5, 119, 60, 2, 1658, 320, 3, 2, 2, 2, 1659, 1660, 5, 103, 52, 2, 1660, 1661, 5, 113, 57, 2, 1661, 1662, 5, 101, 51, 2, 1662, 1663, 5, 111, 56, 2, 1663, 322, 3, 2, 2, 2, 1664, 1665, 5, 107, 54, 2, 1665, 1666, 5, 93, 47, 2, 1666, 1667, 5, 95, 48, 2, 1667, 1668, 5, 123, 62, 2, 1668, 324, 3, 2, 2, 2, 1669, 1670, 5, 119, 60, 2, 1670, 1671, 5, 101, 51, 2, 1671, 1672, 5, 97, 49, 2, 1672, 1673, 5, 99, 50, 2, 1673, 1674, 5, 123, 62, 2, 1674, 326, 3, 2, 2, 2, 1675, 1676, 5, 113, 57, 2, 1676, 1677, 5, 125, 63, 2, 1677, 1678, 5, 123, 62, 2, 1678, 1679, 5, 93, 47, 2, 1679, 1680, 5, 119, 60, 2, 1680, 328, 3, 2, 2, 2, 1681, 1682, 5, 89, 45, 2, 1682, 1683, 5, 119, 60, 2, 1683, 1684, 5, 113, 57, 2, 1684, 1685, 5, 121, 61, 2, 1685, 1686, 5, 121, 61, 2, 1686, 330, 3, 2, 2, 2, 1687, 1688, 5, 107, 54, 2, 1688, 1689, 5, 85, 43, 2, 1689, 1690, 5, 123, 62, 2, 1690, 1691, 5, 93, 47, 2, 1691, 1692, 5, 119, 60, 2, 1692, 1693, 5, 85, 43, 2, 1693, 1694, 5, 107, 54, 2, 1694, 332, 3, 2, 2, 2, 1695, 1696, 5, 103, 52, 2, 1696, 1697, 5, 121, 61, 2, 1697, 1698, 5, 113, 57, 2, 1698, 1699, 5, 111, 56, 2, 1699, 1700, 7, 97, 2, 2, 1700, 1701, 5, 123, 62, 2, 1701, 1702, 5, 85, 43, 2, 1702, 1703, 5, 87, 44, 2, 1703, 1704, 5, 107, 54, 2, 1704, 1705, 5, 93, 47, 2, 1705, 334, 3, 2, 2, 2, 1706, 1707, 5, 89, 45, 2, 1707, 1708, 5, 113, 57, 2, 1708, 1709, 5, 107, 54, 2, 1709, 1710, 5, 125, 63, 2, 1710, 1711, 5, 109, 55, 2, 1711, 1712, 5, 111, 56, 2, 1712, 1713, 5, 121, 61, 2, 1713, 336, 3, 2, 2, 2, 1714, 1715, 5, 113, 57, 2, 1715, 1716, 5, 119, 60, 2, 1716, 1717, 5, 91, 46, 2, 1717, 1718, 5, 101, 51, 2, 1718, 1719, 5, 111, 56, 2, 1719, 1720, 5, 85, 43, 2, 1720, 1721, 5, 107, 54, 2, 1721, 1722, 5, 101, 51, 2, 1722, 1723, 5, 123, 62, 2, 1723, 1724, 5, 133, 67, 2, 1724, 338, 3, 2, 2, 2, 1725, 1726, 5, 93, 47, 2, 1726, 1727, 5, 131, 66, 2, 1727, 1728, 5, 101, 51, 2, 1728, 1729, 5, 121, 61, 2, 1729, 1730, 5, 123, 62, 2, 1730, 1731, 5, 121, 61, 2, 1731, 340, 3, 2, 2, 2, 1732, 1733, 5, 115, 58, 2, 1733, 1734, 5, 85, 43, 2, 1734, 1735, 5, 123, 62, 2, 1735, 1736, 5, 99, 50, 2, 1736, 342, 3, 2, 2, 2, 1737, 1738, 5, 111, 56, 2, 1738, 1739, 5, 93, 47, 2, 1739, 1740, 5, 121, 61, 2, 1740, 1741, 5, 123, 62, 2, 1741, 1742, 5, 93, 47, 2, 1742, 1743, 5, 91, 46, 2, 1743, 344, 3, 2, 2, 2, 1744, 1745, 5, 93, 47, 2, 1745, 1746, 5, 109, 55, 2, 1746, 1747, 5, 115, 58, 2, 1747, 1748, 5, 123, 62, 2, 1748, 1749, 5, 133, 67, 2, 1749, 346, 3, 2, 2, 2, 1750, 1751, 5, 93, 47, 2, 1751, 1752, 5, 119, 60, 2, 1752, 1753, 5, 119, 60, 2, 1753, 1754, 5, 113, 57, 2, 1754, 1755, 5, 119, 60, 2, 1755, 348, 3, 2, 2, 2, 1756, 1757, 5, 111, 56, 2, 1757, 1758, 5, 125, 63, 2, 1758, 1759, 5, 107, 54, 2, 1759, 1760, 5, 107, 54, 2, 1760, 350, 3, 2, 2, 2, 1761, 1762, 5, 125, 63, 2, 1762, 1763, 5, 121, 61, 2, 1763, 1764, 5, 93, 47, 2, 1764, 352, 3, 2, 2, 2, 1765, 1766, 5, 95, 48, 2, 1766, 1767, 5, 113, 57, 2, 1767, 1768, 5, 119, 60, 2, 1768, 1769, 5, 89, 45, 2, 1769, 1770, 5, 93, 47, 2, 1770, 354, 3, 2, 2, 2, 1771, 1772, 5, 101, 51, 2, 1772, 1773, 5, 97, 49, 2, 1773, 1774, 5, 111, 56, 2, 1774, 1775, 5, 113, 57, 2, 1775, 1776, 5, 119, 60, 2, 1776, 1777, 5, 93, 47, 2, 1777, 356, 3, 2, 2, 2, 1778, 1779, 5, 105, 53, 2, 1779, 1780, 5, 93, 47, 2, 1780, 1781, 5, 133, 67, 2, 1781, 358, 3, 2, 2, 2, 1782, 1783, 5, 101, 51, 2, 1783, 1784, 5, 111, 56, 2, 1784, 1785, 5, 91, 46, 2, 1785, 1786, 5, 93, 47, 2, 1786, 1787, 5, 131, 66, 2, 1787, 360, 3, 2, 2, 2, 1788, 1789, 5, 115, 58, 2, 1789, 1790, 5, 119, 60, 2, 1790, 1791, 5, 101, 51, 2, 1791, 1792, 5, 109, 55, 2, 1792, 1793, 5, 85, 43, 2, 1793, 1794, 5, 119, 60, 2, 1794, 1795, 5, 133, 67, 2, 1795, 362, 3, 2, 2, 2, 1796, 1797, 5, 101, 51, 2, 1797, 1798, 5, 121, 61, 2, 1798, 364, 3, 2, 2, 2, 1799, 1800, 5, 123, 62, 2, 1800, 1801, 5, 119, 60, 2, 1801, 1802, 5, 125, 63, 2, 1802, 1803, 5, 93, 47, 2, 1803, 366, 3, 2, 2, 2, 1804, 1805, 5, 95, 48, 2, 1805, 1806, 5, 85, 43, 2, 1806, 1807, 5, 107, 54, 2, 1807, 1808, 5, 121, 61, 2, 1808, 1809, 5, 93, 47, 2, 1809, 368, 3, 2, 2, 2, 1810, 1811, 5, 125, 63, 2, 1811, 1812, 5, 111, 56, 2, 1812, 1813, 5, 105, 53, 2, 1813, 1814, 5, 111, 56, 2, 1814, 1815, 5, 113, 57, 2, 1815, 1816, 5, 129, 65, 2, 1816, 1817, 5, 111, 56, 2, 1817, 370, 3, 2, 2, 2, 1818, 1819, 5, 111, 56, 2, 1819, 1820, 5, 113, 57, 2, 1820, 1821, 5, 123, 62, 2, 1821, 372, 3, 2, 2, 2, 1822, 1823, 5, 131, 66, 2, 1823, 1824, 5, 113, 57, 2, 1824, 1825, 5, 119, 60, 2, 1825, 374, 3, 2, 2, 2, 1826, 1827, 5, 113, 57, 2, 1827, 1828, 5, 119, 60, 2, 1828, 376, 3, 2, 2, 2, 1829, 1830, 5, 85, 43, 2, 1830, 1831, 5, 111, 56, 2, 1831, 1832, 5, 133, 67, 2, 1832, 378, 3, 2, 2, 2, 1833, 1834, 5, 109, 55, 2, 1834, 1835, 5, 93, 47, 2, 1835, 1836, 5, 109, 55, 2, 1836, 1837, 5, 87, 44, 2, 1837, 1838, 5, 93, 47, 2, 1838, 1839, 5, 119, 60, 2, 1839, 380, 3, 2, 2, 2, 1840, 1841, 5, 121, 61, 2, 1841, 1842, 5, 113, 57, 2, 1842, 1843, 5, 125, 63, 2, 1843, 1844, 5, 111, 56, 2, 1844, 1845, 5, 91, 46, 2, 1845, 1846, 5, 121, 61, 2, 1846, 382, 3, 2, 2, 2, 1847, 1848, 5, 107, 54, 2, 1848, 1849, 5, 101, 51, 2, 1849, 1850, 5, 105, 53, 2, 1850, 1851, 5, 93, 47, 2, 1851, 384, 3, 2, 2, 2, 1852, 1853, 5, 93, 47, 2, 1853, 1854, 5, 121, 61, 2, 1854, 1855, 5, 89, 45, 2, 1855, 1856, 5, 85, 43, 2, 1856, 1857, 5, 115, 58, 2, 1857, 1858, 5, 93, 47, 2, 1858, 386, 3, 2, 2, 2, 1859, 1860, 5, 119, 60, 2, 1860, 1861, 5, 93, 47, 2, 1861, 1862, 5, 97, 49, 2, 1862, 1863, 5, 93, 47, 2, 1863, 1864, 5, 131, 66, 2, 1864, 1865, 5, 115, 58, 2, 1865, 388, 3, 2, 2, 2, 1866, 1867, 5, 91, 46, 2, 1867, 1868, 5, 101, 51, 2, 1868, 1869, 5, 127, 64, 2, 1869, 390, 3, 2, 2, 2, 1870, 1871, 5, 109, 55, 2, 1871, 1872, 5, 113, 57, 2, 1872, 1873, 5, 91, 46, 2, 1873, 392, 3, 2, 2, 2, 1874, 1875, 5, 109, 55, 2, 1875, 1876, 5, 85, 43, 2, 1876, 1877, 5, 123, 62, 2, 1877, 1878, 5, 89, 45, 2, 1878, 1879, 5, 99, 50, 2, 1879, 394, 3, 2, 2, 2, 1880, 1881, 5, 85, 43, 2, 1881, 1882, 5, 97, 49, 2, 1882, 1883, 5, 85, 43, 2, 1883, 1884, 5, 101, 51, 2, 1884, 1885, 5, 111, 56, 2, 1885, 1886, 5, 121, 61, 2, 1886, 1887, 5, 123, 62, 2, 1887, 396, 3, 2, 2, 2, 1888, 1889, 5, 87, 44, 2, 1889, 1890, 5, 101, 51, 2, 1890, 1891, 5, 111, 56, 2, 1891, 1892, 5, 85, 43, 2, 1892, 1893, 5, 119, 60, 2, 1893, 1894, 5, 133, 67, 2, 1894, 398, 3, 2, 2, 2, 1895, 1896, 5, 89, 45, 2, 1896, 1897, 5, 85, 43, 2, 1897, 1898, 5, 121, 61, 2, 1898, 1899, 5, 123, 62, 2, 1899, 400, 3, 2, 2, 2, 1900, 1901, 5, 85, 43, 2, 1901, 1902, 5, 119, 60, 2, 1902, 1903, 5, 119, 60, 2, 1903, 1904, 5, 85, 43, 2, 1904, 1905, 5, 133, 67, 2, 1905, 402, 3, 2, 2, 2, 1906, 1907, 5, 89, 45, 2, 1907, 1908, 5, 85, 43, 2, 1908, 1909, 5, 121, 61, 2, 1909, 1910, 5, 93, 47, 2, 1910, 404, 3, 2, 2, 2, 1911, 1912, 5, 93, 47, 2, 1912, 1913, 5, 111, 56, 2, 1913, 1914, 5, 91, 46, 2, 1914, 406, 3, 2, 2, 2, 1915, 1916, 5, 89, 45, 2, 1916, 1917, 5, 113, 57, 2, 1917, 1918, 5, 111, 56, 2, 1918, 1919, 5, 127, 64, 2, 1919, 1920, 5, 93, 47, 2, 1920, 1921, 5, 119, 60, 2, 1921, 1922, 5, 123, 62, 2, 1922, 408, 3, 2, 2, 2, 1923, 1924, 5, 89, 45, 2, 1924, 1925, 5, 113, 57, 2, 1925, 1926, 5, 107, 54, 2, 1926, 1927, 5, 107, 54, 2, 1927, 1928, 5, 85, 43, 2, 1928, 1929, 5, 123, 62, 2, 1929, 1930, 5, 93, 47, 2, 1930, 410, 3, 2, 2, 2, 1931, 1932, 5, 85, 43, 2, 1932, 1933, 5, 127, 64, 2, 1933, 1934, 5, 97, 49, 2, 1934, 412, 3, 2, 2, 2, 1935, 1936, 5, 87, 44, 2, 1936, 1937, 5, 101, 51, 2, 1937, 1938, 5, 123, 62, 2, 1938, 1939, 7, 97, 2, 2, 1939, 1940, 5, 85, 43, 2, 1940, 1941, 5, 111, 56, 2, 1941, 1942, 5, 91, 46, 2, 1942, 414, 3, 2, 2, 2, 1943, 1944, 5, 87, 44, 2, 1944, 1945, 5, 101, 51, 2, 1945, 1946, 5, 123, 62, 2, 1946, 1947, 7, 97, 2, 2, 1947, 1948, 5, 113, 57, 2, 1948, 1949, 5, 119, 60, 2, 1949, 416, 3, 2, 2, 2, 1950, 1951, 5, 87, 44, 2, 1951, 1952, 5, 101, 51, 2, 1952, 1953, 5, 123, 62, 2, 1953, 1954, 7, 97, 2, 2, 1954, 1955, 5, 131, 66, 2, 1955, 1956, 5, 113, 57, 2, 1956, 1957, 5, 119, 60, 2, 1957, 418, 3, 2, 2, 2, 1958, 1959, 5, 89, 45, 2, 1959, 1960, 5, 113, 57, 2, 1960, 1961, 5, 125, 63, 2, 1961, 1962, 5, 111, 56, 2, 1962, 1963, 5, 123, 62, 2, 1963, 420, 3, 2, 2, 2, 1964, 1965, 5, 109, 55, 2, 1965, 1966, 5, 101, 51, 2, 1966, 1967, 5, 111, 56, 2, 1967, 422, 3, 2, 2, 2, 1968, 1969, 5, 109, 55, 2, 1969, 1970, 5, 85, 43, 2, 1970, 1971, 5, 131, 66, 2, 1971, 424, 3, 2, 2, 2, 1972, 1973, 5, 121, 61, 2, 1973, 1974, 5, 123, 62, 2, 1974, 1975, 5, 91, 46, 2, 1975, 426, 3, 2, 2, 2, 1976, 1977, 5, 127, 64, 2, 1977, 1978, 5, 85, 43, 2, 1978, 1979, 5, 119, 60, 2, 1979, 1980, 5, 101, 51, 2, 1980, 1981, 5, 85, 43, 2, 1981, 1982, 5, 111, 56, 2, 1982, 1983, 5, 89, 45, 2, 1983, 1984, 5, 93, 47, 2, 1984, 428, 3, 2, 2, 2, 1985, 1986, 5, 121, 61, 2, 1986, 1987, 5, 123, 62, 2, 1987, 1988, 5, 91, 46, 2, 1988, 1989, 5, 91, 46, 2, 1989, 1990, 5, 93, 47, 2, 1990, 1991, 5, 127, 64, 2, 1991, 1992, 7, 97, 2, 2, 1992, 1993, 5, 121, 61, 2, 1993, 1994, 5, 85, 43, 2, 1994, 1995, 5, 109, 55, 2, 1995, 1996, 5, 115, 58, 2, 1996, 430, 3, 2, 2, 2, 1997, 1998, 5, 127, 64, 2, 1998, 1999, 5, 85, 43, 2, 1999, 2000, 5, 119, 60, 2, 2000, 2001, 7, 97, 2, 2, 2001, 2002, 5, 121, 61, 2, 2002, 2003, 5, 85, 43, 2, 2003, 2004, 5, 109, 55, 2, 2004, 2005, 5, 115, 58, 2, 2005, 432, 3, 2, 2, 2, 2006, 2007, 5, 121, 61, 2, 2007, 2008, 5, 125, 63, 2, 2008, 2009, 5, 109, 55, 2, 2009, 434, 3, 2, 2, 2, 2010, 2011, 5, 97, 49, 2, 2011, 2012, 5, 119, 60, 2, 2012, 2013, 5, 113, 57, 2, 2013, 2014, 5, 125, 63, 2, 2014, 2015, 5, 115, 58, 2, 2015, 2016, 7, 97, 2, 2, 2016, 2017, 5, 89, 45, 2, 2017, 2018, 5, 113, 57, 2, 2018, 2019, 5, 111, 56, 2, 2019, 2020, 5, 89, 45, 2, 2020, 2021, 5, 85, 43, 2, 2021, 2022, 5, 123, 62, 2, 2022, 436, 3, 2, 2, 2, 2023, 2024, 5, 121, 61, 2, 2024, 2025, 5, 93, 47, 2, 2025, 2026, 5, 115, 58, 2, 2026, 2027, 5, 85, 43, 2, 2027, 2028, 5, 119, 60, 2, 2028, 2029, 5, 85, 43, 2, 2029, 2030, 5, 123, 62, 2, 2030, 2031, 5, 113, 57, 2, 2031, 2032, 5, 119, 60, 2, 2032, 438, 3, 2, 2, 2, 2033, 2034, 5, 97, 49, 2, 2034, 2035, 5, 119, 60, 2, 2035, 2036, 5, 113, 57, 2, 2036, 2037, 5, 125, 63, 2, 2037, 2038, 5, 115, 58, 2, 2038, 2039, 5, 101, 51, 2, 2039, 2040, 5, 111, 56, 2, 2040, 2041, 5, 97, 49, 2, 2041, 440, 3, 2, 2, 2, 2042, 2043, 5, 119, 60, 2, 2043, 2044, 5, 113, 57, 2, 2044, 2045, 5, 129, 65, 2, 2045, 2046, 7, 97, 2, 2, 2046, 2047, 5, 111, 56, 2, 2047, 2048, 5, 125, 63, 2, 2048, 2049, 5, 109, 55, 2, 2049, 2050, 5, 87, 44, 2, 2050, 2051, 5, 93, 47, 2, 2051, 2052, 5, 119, 60, 2, 2052, 442, 3, 2, 2, 2, 2053, 2054, 5, 119, 60, 2, 2054, 2055, 5, 85, 43, 2, 2055, 2056, 5, 111, 56, 2, 2056, 2057, 5, 105, 53, 2, 2057, 444, 3, 2, 2, 2, 2058, 2059, 5, 91, 46, 2, 2059, 2060, 5, 93, 47, 2, 2060, 2061, 5, 111, 56, 2, 2061, 2062, 5, 121, 61, 2, 2062, 2063, 5, 93, 47, 2, 2063, 2064, 7, 97, 2, 2, 2064, 2065, 5, 119, 60, 2, 2065, 2066, 5, 85, 43, 2, 2066, 2067, 5, 111, 56, 2, 2067, 2068, 5, 105, 53, 2, 2068, 446, 3, 2, 2, 2, 2069, 2070, 5, 89, 45, 2, 2070, 2071, 5, 125, 63, 2, 2071, 2072, 5, 109, 55, 2, 2072, 2073, 5, 93, 47, 2, 2073, 2074, 7, 97, 2, 2, 2074, 2075, 5, 91, 46, 2, 2075, 2076, 5, 101, 51, 2, 2076, 2077, 5, 121, 61, 2, 2077, 2078, 5, 123, 62, 2, 2078, 448, 3, 2, 2, 2, 2079, 2080, 5, 115, 58, 2, 2080, 2081, 5, 93, 47, 2, 2081, 2082, 5, 119, 60, 2, 2082, 2083, 5, 89, 45, 2, 2083, 2084, 5, 93, 47, 2, 2084, 2085, 5, 111, 56, 2, 2085, 2086, 5, 123, 62, 2, 2086, 2087, 7, 97, 2, 2, 2087, 2088, 5, 119, 60, 2, 2088, 2089, 5, 85, 43, 2, 2089, 2090, 5, 111, 56, 2, 2090, 2091, 5, 105, 53, 2, 2091, 450, 3, 2, 2, 2, 2092, 2093, 5, 111, 56, 2, 2093, 2094, 5, 123, 62, 2, 2094, 2095, 5, 101, 51, 2, 2095, 2096, 5, 107, 54, 2, 2096, 2097, 5, 93, 47, 2, 2097, 452, 3, 2, 2, 2, 2098, 2099, 5, 107, 54, 2, 2099, 2100, 5, 93, 47, 2, 2100, 2101, 5, 85, 43, 2, 2101, 2102, 5, 91, 46, 2, 2102, 454, 3, 2, 2, 2, 2103, 2104, 5, 107, 54, 2, 2104, 2105, 5, 85, 43, 2, 2105, 2106, 5, 97, 49, 2, 2106, 456, 3, 2, 2, 2, 2107, 2108, 5, 95, 48, 2, 2108, 2109, 5, 101, 51, 2, 2109, 2110, 5, 119, 60, 2, 2110, 2111, 5, 121, 61, 2, 2111, 2112, 5, 123, 62, 2, 2112, 2113, 7, 97, 2, 2, 2113, 2114, 5, 127, 64, 2, 2114, 2115, 5, 85, 43, 2, 2115, 2116, 5, 107, 54, 2, 2116, 2117, 5, 125, 63, 2, 2117, 2118, 5, 93, 47, 2, 2118, 458, 3, 2, 2, 2, 2119, 2120, 5, 107, 54, 2, 2120, 2121, 5, 85, 43, 2, 2121, 2122, 5, 121, 61, 2, 2122, 2123, 5, 123, 62, 2, 2123, 2124, 7, 97, 2, 2, 2124, 2125, 5, 127, 64, 2, 2125, 2126, 5, 85, 43, 2, 2126, 2127, 5, 107, 54, 2, 2127, 2128, 5, 125, 63, 2, 2128, 2129, 5, 93, 47, 2, 2129, 460, 3, 2, 2, 2, 2130, 2131, 5, 111, 56, 2, 2131, 2132, 5, 123, 62, 2, 2132, 2133, 5, 99, 50, 2, 2133, 2134, 7, 97, 2, 2, 2134, 2135, 5, 127, 64, 2, 2135, 2136, 5, 85, 43, 2, 2136, 2137, 5, 107, 54, 2, 2137, 2138, 5, 125, 63, 2, 2138, 2139, 5, 93, 47, 2, 2139, 462, 3, 2, 2, 2, 2140, 2141, 5, 95, 48, 2, 2141, 2142, 5, 101, 51, 2, 2142, 2143, 5, 119, 60, 2, 2143, 2144, 5, 121, 61, 2, 2144, 2145, 5, 123, 62, 2, 2145, 464, 3, 2, 2, 2, 2146, 2147, 5, 107, 54, 2, 2147, 2148, 5, 85, 43, 2, 2148, 2149, 5, 121, 61, 2, 2149, 2150, 5, 123, 62, 2, 2150, 466, 3, 2, 2, 2, 2151, 2152, 5, 113, 57, 2, 2152, 2153, 5, 127, 64, 2, 2153, 2154, 5, 93, 47, 2, 2154, 2155, 5, 119, 60, 2, 2155, 468, 3, 2, 2, 2, 2156, 2157, 5, 119, 60, 2, 2157, 2158, 5, 93, 47, 2, 2158, 2159, 5, 121, 61, 2, 2159, 2160, 5, 115, 58, 2, 2160, 2161, 5, 93, 47, 2, 2161, 2162, 5, 89, 45, 2, 2162, 2163, 5, 123, 62, 2, 2163, 470, 3, 2, 2, 2, 2164, 2165, 5, 111, 56, 2, 2165, 2166, 5, 125, 63, 2, 2166, 2167, 5, 107, 54, 2, 2167, 2168, 5, 107, 54, 2, 2168, 2169, 5, 121, 61, 2, 2169, 472, 3, 2, 2, 2, 2170, 2171, 5, 103, 52, 2, 2171, 2172, 5, 121, 61, 2, 2172, 2173, 5, 113, 57, 2, 2173, 2174, 5, 111, 56, 2, 2174, 2175, 7, 97, 2, 2, 2175, 2176, 5, 85, 43, 2, 2176, 2177, 5, 119, 60, 2, 2177, 2178, 5, 119, 60, 2, 2178, 2179, 5, 85, 43, 2, 2179, 2180, 5, 133, 67, 2, 2180, 2181, 5, 85, 43, 2, 2181, 2182, 5, 97, 49, 2, 2182, 2183, 5, 97, 49, 2, 2183, 474, 3, 2, 2, 2, 2184, 2185, 5, 103, 52, 2, 2185, 2186, 5, 121, 61, 2, 2186, 2187, 5, 113, 57, 2, 2187, 2188, 5, 111, 56, 2, 2188, 2189, 7, 97, 2, 2, 2189, 2190, 5, 113, 57, 2, 2190, 2191, 5, 87, 44, 2, 2191, 2192, 5, 103, 52, 2, 2192, 2193, 5, 93, 47, 2, 2193, 2194, 5, 89, 45, 2, 2194, 2195, 5, 123, 62, 2, 2195, 2196, 5, 85, 43, 2, 2196, 2197, 5, 97, 49, 2, 2197, 2198, 5, 97, 49, 2, 2198, 476, 3, 2, 2, 2, 2199, 2200, 5, 87, 44, 2, 2200, 2201, 5, 113, 57, 2, 2201, 2202, 5, 113, 57, 2, 2202, 2203, 5, 107, 54, 2, 2203, 2204, 5, 93, 47, 2, 2204, 2205, 5, 85, 43, 2, 2205, 2206, 5, 111, 56, 2, 2206, 478, 3, 2, 2, 2, 2207, 2208, 5, 107, 54, 2, 2208, 2209, 5, 85, 43, 2, 2209, 2210, 5, 111, 56, 2, 2210, 2211, 5, 97, 49, 2, 2211, 2212, 5, 125, 63, 2, 2212, 2213, 5, 85, 43, 2, 2213, 2214, 5, 97, 49, 2, 2214, 2215, 5, 93, 47, 2, 2215, 480, 3, 2, 2, 2, 2216, 2217, 5, 117, 59, 2, 2217, 2218, 5, 125, 63, 2, 2218, 2219, 5, 93, 47, 2, 2219, 2220, 5, 119, 60, 2, 2220, 2221, 5, 133, 67, 2, 2221, 482, 3, 2, 2, 2, 2222, 2223, 5, 93, 47, 2, 2223, 2224, 5, 131, 66, 2, 2224, 2225, 5, 115, 58, 2, 2225, 2226, 5, 85, 43, 2, 2226, 2227, 5, 111, 56, 2, 2227, 2228, 5, 121, 61, 2, 2228, 2229, 5, 101, 51, 2, 2229, 2230, 5, 113, 57, 2, 2230, 2231, 5, 111, 56, 2, 2231, 484, 3, 2, 2, 2, 2232, 2233, 5, 89, 45, 2, 2233, 2234, 5, 99, 50, 2, 2234, 2235, 5, 85, 43, 2, 2235, 2236, 5, 119, 60, 2, 2236, 2237, 5, 85, 43, 2, 2237, 2238, 5, 89, 45, 2, 2238, 2239, 5, 123, 62, 2, 2239, 2240, 5, 93, 47, 2, 2240, 2241, 5, 119, 60, 2, 2241, 2248, 3, 2, 2, 2, 2242, 2243, 5, 89, 45, 2, 2243, 2244, 5, 99, 50, 2, 2244, 2245, 5, 85, 43, 2, 2245, 2246, 5, 119, 60, 2, 2246, 2248, 3, 2, 2, 2, 2247, 2232, 3, 2, 2, 2, 2247, 2242, 3, 2, 2, 2, 2248, 486, 3, 2, 2, 2, 2249, 2250, 5, 89, 45, 2, 2250, 2251, 5, 125, 63, 2, 2251, 2252, 5, 119, 60, 2, 2252, 2253, 5, 119, 60, 2, 2253, 2254, 5, 93, 47, 2, 2254, 2255, 5, 111, 56, 2, 2255, 2256, 5, 123, 62, 2, 2256, 2257, 7, 97, 2, 2, 2257, 2258, 5, 125, 63, 2, 2258, 2259, 5, 121, 61, 2, 2259, 2260, 5, 93, 47, 2, 2260, 2261, 5, 119, 60, 2, 2261, 488, 3, 2, 2, 2, 2262, 2263, 5, 91, 46, 2, 2263, 2264, 5, 85, 43, 2, 2264, 2265, 5, 123, 62, 2, 2265, 2266, 5, 93, 47, 2, 2266, 490, 3, 2, 2, 2, 2267, 2268, 5, 101, 51, 2, 2268, 2269, 5, 111, 56, 2, 2269, 2270, 5, 121, 61, 2, 2270, 2271, 5, 93, 47, 2, 2271, 2272, 5, 119, 60, 2, 2272, 2273, 5, 123, 62, 2, 2273, 492, 3, 2, 2, 2, 2274, 2275, 5, 123, 62, 2, 2275, 2276, 5, 101, 51, 2, 2276, 2277, 5, 109, 55, 2, 2277, 2278, 5, 93, 47, 2, 2278, 494, 3, 2, 2, 2, 2279, 2280, 5, 123, 62, 2, 2280, 2281, 5, 101, 51, 2, 2281, 2282, 5, 109, 55, 2, 2282, 2283, 5, 93, 47, 2, 2283, 2284, 5, 121, 61, 2, 2284, 2285, 5, 123, 62, 2, 2285, 2286, 5, 85, 43, 2, 2286, 2287, 5, 109, 55, 2, 2287, 2288, 5, 115, 58, 2, 2288, 496, 3, 2, 2, 2, 2289, 2290, 5, 123, 62, 2, 2290, 2291, 5, 101, 51, 2, 2291, 2292, 5, 109, 55, 2, 2292, 2293, 5, 93, 47, 2, 2293, 2294, 5, 121, 61, 2, 2294, 2295, 5, 123, 62, 2, 2295, 2296, 5, 85, 43, 2, 2296, 2297, 5, 109, 55, 2, 2297, 2298, 5, 115, 58, 2, 2298, 2299, 5, 107, 54, 2, 2299, 2300, 5, 123, 62, 2, 2300, 2301, 5, 135, 68, 2, 2301, 2317, 3, 2, 2, 2, 2302, 2303, 5, 123, 62, 2, 2303, 2304, 5, 101, 51, 2, 2304, 2305, 5, 109, 55, 2, 2305, 2306, 5, 93, 47, 2, 2306, 2307, 5, 121, 61, 2, 2307, 2308, 5, 123, 62, 2, 2308, 2309, 5, 85, 43, 2, 2309, 2310, 5, 109, 55, 2, 2310, 2311, 5, 115, 58, 2, 2311, 2312, 7, 97, 2, 2, 2312, 2313, 5, 107, 54, 2, 2313, 2314, 5, 123, 62, 2, 2314, 2315, 5, 135, 68, 2, 2315, 2317, 3, 2, 2, 2, 2316, 2289, 3, 2, 2, 2, 2316, 2302, 3, 2, 2, 2, 2317, 498, 3, 2, 2, 2, 2318, 2319, 5, 123, 62, 2, 2319, 2320, 5, 101, 51, 2, 2320, 2321, 5, 109, 55, 2, 2321, 2322, 5, 93, 47, 2, 2322, 2323, 5, 121, 61, 2, 2323, 2324, 5, 123, 62, 2, 2324, 2325, 5, 85, 43, 2, 2325, 2326, 5, 109, 55, 2, 2326, 2327, 5, 115, 58, 2, 2327, 2328, 5, 111, 56, 2, 2328, 2329, 5, 123, 62, 2, 2329, 2330, 5, 135, 68, 2, 2330, 2346, 3, 2, 2, 2, 2331, 2332, 5, 123, 62, 2, 2332, 2333, 5, 101, 51, 2, 2333, 2334, 5, 109, 55, 2, 2334, 2335, 5, 93, 47, 2, 2335, 2336, 5, 121, 61, 2, 2336, 2337, 5, 123, 62, 2, 2337, 2338, 5, 85, 43, 2, 2338, 2339, 5, 109, 55, 2, 2339, 2340, 5, 115, 58, 2, 2340, 2341, 7, 97, 2, 2, 2341, 2342, 5, 111, 56, 2, 2342, 2343, 5, 123, 62, 2, 2343, 2344, 5, 135, 68, 2, 2344, 2346, 3, 2, 2, 2, 2345, 2318, 3, 2, 2, 2, 2345, 2331, 3, 2, 2, 2, 2346, 500, 3, 2, 2, 2, 2347, 2348, 5, 135, 68, 2, 2348, 2349, 5, 113, 57, 2, 2349, 2350, 5, 111, 56, 2, 2350, 2351, 5, 93, 47, 2, 2351, 502, 3, 2, 2, 2, 2352, 2353, 5, 125, 63, 2, 2353, 2354, 5, 121, 61, 2, 2354, 2355, 5, 93, 47, 2, 2355, 2356, 5, 119, 60, 2, 2356, 504, 3, 2, 2, 2, 2357, 2358, 5, 85, 43, 2, 2358, 2359, 5, 91, 46, 2, 2359, 2360, 5, 91, 46, 2, 2360, 2361, 5, 91, 46, 2, 2361, 2362, 5, 85, 43, 2, 2362, 2363, 5, 123, 62, 2, 2363, 2364, 5, 93, 47, 2, 2364, 506, 3, 2, 2, 2, 2365, 2366, 5, 121, 61, 2, 2366, 2367, 5, 125, 63, 2, 2367, 2368, 5, 87, 44, 2, 2368, 2369, 5, 91, 46, 2, 2369, 2370, 5, 85, 43, 2, 2370, 2371, 5, 123, 62, 2, 2371, 2372, 5, 93, 47, 2, 2372, 508, 3, 2, 2, 2, 2373, 2374, 5, 89, 45, 2, 2374, 2375, 5, 125, 63, 2, 2375, 2376, 5, 119, 60, 2, 2376, 2377, 5, 91, 46, 2, 2377, 2378, 5, 85, 43, 2, 2378, 2379, 5, 123, 62, 2, 2379, 2380, 5, 93, 47, 2, 2380, 510, 3, 2, 2, 2, 2381, 2382, 5, 89, 45, 2, 2382, 2383, 5, 125, 63, 2, 2383, 2384, 5, 119, 60, 2, 2384, 2385, 5, 123, 62, 2, 2385, 2386, 5, 101, 51, 2, 2386, 2387, 5, 109, 55, 2, 2387, 2388, 5, 93, 47, 2, 2388, 512, 3, 2, 2, 2, 2389, 2390, 5, 91, 46, 2, 2390, 2391, 5, 85, 43, 2, 2391, 2392, 5, 123, 62, 2, 2392, 2393, 5, 93, 47, 2, 2393, 2394, 7, 97, 2, 2, 2394, 2395, 5, 85, 43, 2, 2395, 2396, 5, 91, 46, 2, 2396, 2397, 5, 91, 46, 2, 2397, 514, 3, 2, 2, 2, 2398, 2399, 5, 91, 46, 2, 2399, 2400, 5, 85, 43, 2, 2400, 2401, 5, 123, 62, 2, 2401, 2402, 5, 93, 47, 2, 2402, 2403, 7, 97, 2, 2, 2403, 2404, 5, 121, 61, 2, 2404, 2405, 5, 125, 63, 2, 2405, 2406, 5, 87, 44, 2, 2406, 516, 3, 2, 2, 2, 2407, 2408, 5, 93, 47, 2, 2408, 2409, 5, 131, 66, 2, 2409, 2410, 5, 123, 62, 2, 2410, 2411, 5, 119, 60, 2, 2411, 2412, 5, 85, 43, 2, 2412, 2413, 5, 89, 45, 2, 2413, 2414, 5, 123, 62, 2, 2414, 518, 3, 2, 2, 2, 2415, 2416, 5, 97, 49, 2, 2416, 2417, 5, 93, 47, 2, 2417, 2418, 5, 123, 62, 2, 2418, 2419, 7, 97, 2, 2, 2419, 2420, 5, 95, 48, 2, 2420, 2421, 5, 113, 57, 2, 2421, 2422, 5, 119, 60, 2, 2422, 2423, 5, 109, 55, 2, 2423, 2424, 5, 85, 43, 2, 2424, 2425, 5, 123, 62, 2, 2425, 520, 3, 2, 2, 2, 2426, 2427, 5, 111, 56, 2, 2427, 2428, 5, 113, 57, 2, 2428, 2429, 5, 129, 65, 2, 2429, 522, 3, 2, 2, 2, 2430, 2431, 5, 115, 58, 2, 2431, 2432, 5, 113, 57, 2, 2432, 2433, 5, 121, 61, 2, 2433, 2434, 5, 101, 51, 2, 2434, 2435, 5, 123, 62, 2, 2435, 2436, 5, 101, 51, 2, 2436, 2437, 5, 113, 57, 2, 2437, 2438, 5, 111, 56, 2, 2438, 524, 3, 2, 2, 2, 2439, 2440, 5, 121, 61, 2, 2440, 2441, 5, 133, 67, 2, 2441, 2442, 5, 121, 61, 2, 2442, 2443, 5, 91, 46, 2, 2443, 2444, 5, 85, 43, 2, 2444, 2445, 5, 123, 62, 2, 2445, 2446, 5, 93, 47, 2, 2446, 526, 3, 2, 2, 2, 2447, 2448, 5, 123, 62, 2, 2448, 2449, 5, 101, 51, 2, 2449, 2450, 5, 109, 55, 2, 2450, 2451, 5, 93, 47, 2, 2451, 2452, 5, 121, 61, 2, 2452, 2453, 5, 123, 62, 2, 2453, 2454, 5, 85, 43, 2, 2454, 2455, 5, 109, 55, 2, 2455, 2456, 5, 115, 58, 2, 2456, 2457, 7, 97, 2, 2, 2457, 2458, 5, 85, 43, 2, 2458, 2459, 5, 91, 46, 2, 2459, 2460, 5, 91, 46, 2, 2460, 528, 3, 2, 2, 2, 2461, 2462, 5, 123, 62, 2, 2462, 2463, 5, 101, 51, 2, 2463, 2464, 5, 109, 55, 2, 2464, 2465, 5, 93, 47, 2, 2465, 2466, 5, 121, 61, 2, 2466, 2467, 5, 123, 62, 2, 2467, 2468, 5, 85, 43, 2, 2468, 2469, 5, 109, 55, 2, 2469, 2470, 5, 115, 58, 2, 2470, 2471, 7, 97, 2, 2, 2471, 2472, 5, 91, 46, 2, 2472, 2473, 5, 101, 51, 2, 2473, 2474, 5, 95, 48, 2, 2474, 2475, 5, 95, 48, 2, 2475, 530, 3, 2, 2, 2, 2476, 2477, 5, 125, 63, 2, 2477, 2478, 5, 123, 62, 2, 2478, 2479, 5, 89, 45, 2, 2479, 2480, 7, 97, 2, 2, 2480, 2481, 5, 91, 46, 2, 2481, 2482, 5, 85, 43, 2, 2482, 2483, 5, 123, 62, 2, 2483, 2484, 5, 93, 47, 2, 2484, 532, 3, 2, 2, 2, 2485, 2486, 5, 125, 63, 2, 2486, 2487, 5, 123, 62, 2, 2487, 2488, 5, 89, 45, 2, 2488, 2489, 7, 97, 2, 2, 2489, 2490, 5, 123, 62, 2, 2490, 2491, 5, 101, 51, 2, 2491, 2492, 5, 109, 55, 2, 2492, 2493, 5, 93, 47, 2, 2493, 534, 3, 2, 2, 2, 2494, 2495, 5, 125, 63, 2, 2495, 2496, 5, 123, 62, 2, 2496, 2497, 5, 89, 45, 2, 2497, 2498, 7, 97, 2, 2, 2498, 2499, 5, 123, 62, 2, 2499, 2500, 5, 101, 51, 2, 2500, 2501, 5, 109, 55, 2, 2501, 2502, 5, 93, 47, 2, 2502, 2503, 5, 121, 61, 2, 2503, 2504, 5, 123, 62, 2, 2504, 2505, 5, 85, 43, 2, 2505, 2506, 5, 109, 55, 2, 2506, 2507, 5, 115, 58, 2, 2507, 536, 3, 2, 2, 2, 2508, 2509, 5, 85, 43, 2, 2509, 2510, 5, 121, 61, 2, 2510, 2511, 5, 89, 45, 2, 2511, 2512, 5, 101, 51, 2, 2512, 2513, 5, 101, 51, 2, 2513, 538, 3, 2, 2, 2, 2514, 2515, 5, 89, 45, 2, 2515, 2516, 5, 99, 50, 2, 2516, 2517, 5, 85, 43, 2, 2517, 2518, 5, 119, 60, 2, 2518, 2519, 5, 121, 61, 2, 2519, 2520, 5, 93, 47, 2, 2520, 2521, 5, 123, 62, 2, 2521, 540, 3, 2, 2, 2, 2522, 2523, 5, 89, 45, 2, 2523, 2524, 5, 113, 57, 2, 2524, 2525, 5, 85, 43, 2, 2525, 2526, 5, 107, 54, 2, 2526, 2527, 5, 93, 47, 2, 2527, 2528, 5, 121, 61, 2, 2528, 2529, 5, 89, 45, 2, 2529, 2530, 5, 93, 47, 2, 2530, 542, 3, 2, 2, 2, 2531, 2532, 5, 89, 45, 2, 2532, 2533, 5, 113, 57, 2, 2533, 2534, 5, 107, 54, 2, 2534, 2535, 5, 107, 54, 2, 2535, 2536, 5, 85, 43, 2, 2536, 2537, 5, 123, 62, 2, 2537, 2538, 5, 101, 51, 2, 2538, 2539, 5, 113, 57, 2, 2539, 2540, 5, 111, 56, 2, 2540, 544, 3, 2, 2, 2, 2541, 2542, 5, 91, 46, 2, 2542, 2543, 5, 85, 43, 2, 2543, 2544, 5, 123, 62, 2, 2544, 2545, 5, 85, 43, 2, 2545, 2546, 5, 87, 44, 2, 2546, 2547, 5, 85, 43, 2, 2547, 2548, 5, 121, 61, 2, 2548, 2549, 5, 93, 47, 2, 2549, 546, 3, 2, 2, 2, 2550, 2551, 5, 101, 51, 2, 2551, 2552, 5, 95, 48, 2, 2552, 548, 3, 2, 2, 2, 2553, 2554, 5, 95, 48, 2, 2554, 2555, 5, 113, 57, 2, 2555, 2556, 5, 119, 60, 2, 2556, 2557, 5, 109, 55, 2, 2557, 2558, 5, 85, 43, 2, 2558, 2559, 5, 123, 62, 2, 2559, 550, 3, 2, 2, 2, 2560, 2561, 5, 109, 55, 2, 2561, 2562, 5, 101, 51, 2, 2562, 2563, 5, 89, 45, 2, 2563, 2564, 5, 119, 60, 2, 2564, 2565, 5, 113, 57, 2, 2565, 2566, 5, 121, 61, 2, 2566, 2567, 5, 93, 47, 2, 2567, 2568, 5, 89, 45, 2, 2568, 2569, 5, 113, 57, 2, 2569, 2570, 5, 111, 56, 2, 2570, 2571, 5, 91, 46, 2, 2571, 552, 3, 2, 2, 2, 2572, 2573, 5, 113, 57, 2, 2573, 2574, 5, 107, 54, 2, 2574, 2575, 5, 91, 46, 2, 2575, 2576, 7, 97, 2, 2, 2576, 2577, 5, 115, 58, 2, 2577, 2578, 5, 85, 43, 2, 2578, 2579, 5, 121, 61, 2, 2579, 2580, 5, 121, 61, 2, 2580, 2581, 5, 129, 65, 2, 2581, 2582, 5, 113, 57, 2, 2582, 2583, 5, 119, 60, 2, 2583, 2584, 5, 91, 46, 2, 2584, 554, 3, 2, 2, 2, 2585, 2586, 5, 115, 58, 2, 2586, 2587, 5, 85, 43, 2, 2587, 2588, 5, 121, 61, 2, 2588, 2589, 5, 121, 61, 2, 2589, 2590, 5, 129, 65, 2, 2590, 2591, 5, 113, 57, 2, 2591, 2592, 5, 119, 60, 2, 2592, 2593, 5, 91, 46, 2, 2593, 556, 3, 2, 2, 2, 2594, 2595, 5, 119, 60, 2, 2595, 2596, 5, 93, 47, 2, 2596, 2597, 5, 115, 58, 2, 2597, 2598, 5, 93, 47, 2, 2598, 2599, 5, 85, 43, 2, 2599, 2600, 5, 123, 62, 2, 2600, 558, 3, 2, 2, 2, 2601, 2602, 5, 119, 60, 2, 2602, 2603, 5, 93, 47, 2, 2603, 2604, 5, 115, 58, 2, 2604, 2605, 5, 107, 54, 2, 2605, 2606, 5, 85, 43, 2, 2606, 2607, 5, 89, 45, 2, 2607, 2608, 5, 93, 47, 2, 2608, 560, 3, 2, 2, 2, 2609, 2610, 5, 119, 60, 2, 2610, 2611, 5, 93, 47, 2, 2611, 2612, 5, 127, 64, 2, 2612, 2613, 5, 93, 47, 2, 2613, 2614, 5, 119, 60, 2, 2614, 2615, 5, 121, 61, 2, 2615, 2616, 5, 93, 47, 2, 2616, 562, 3, 2, 2, 2, 2617, 2618, 5, 119, 60, 2, 2618, 2619, 5, 113, 57, 2, 2619, 2620, 5, 129, 65, 2, 2620, 2621, 7, 97, 2, 2, 2621, 2622, 5, 89, 45, 2, 2622, 2623, 5, 113, 57, 2, 2623, 2624, 5, 125, 63, 2, 2624, 2625, 5, 111, 56, 2, 2625, 2626, 5, 123, 62, 2, 2626, 564, 3, 2, 2, 2, 2627, 2628, 5, 123, 62, 2, 2628, 2629, 5, 119, 60, 2, 2629, 2630, 5, 125, 63, 2, 2630, 2631, 5, 111, 56, 2, 2631, 2632, 5, 89, 45, 2, 2632, 2633, 5, 85, 43, 2, 2633, 2634, 5, 123, 62, 2, 2634, 2635, 5, 93, 47, 2, 2635, 566, 3, 2, 2, 2, 2636, 2637, 5, 129, 65, 2, 2637, 2638, 5, 93, 47, 2, 2638, 2639, 5, 101, 51, 2, 2639, 2640, 5, 97, 49, 2, 2640, 2641, 5, 99, 50, 2, 2641, 2642, 5, 123, 62, 2, 2642, 2643, 7, 97, 2, 2, 2643, 2644, 5, 121, 61, 2, 2644, 2645, 5, 123, 62, 2, 2645, 2646, 5, 119, 60, 2, 2646, 2647, 5, 101, 51, 2, 2647, 2648, 5, 111, 56, 2, 2648, 2649, 5, 97, 49, 2, 2649, 568, 3, 2, 2, 2, 2650, 2651, 5, 89, 45, 2, 2651, 2652, 5, 113, 57, 2, 2652, 2653, 5, 111, 56, 2, 2653, 2654, 5, 123, 62, 2, 2654, 2655, 5, 85, 43, 2, 2655, 2656, 5, 101, 51, 2, 2656, 2657, 5, 111, 56, 2, 2657, 2658, 5, 121, 61, 2, 2658, 570, 3, 2, 2, 2, 2659, 2660, 5, 97, 49, 2, 2660, 2661, 5, 93, 47, 2, 2661, 2662, 5, 113, 57, 2, 2662, 2663, 5, 109, 55, 2, 2663, 2664, 5, 93, 47, 2, 2664, 2665, 5, 123, 62, 2, 2665, 2666, 5, 119, 60, 2, 2666, 2667, 5, 133, 67, 2, 2667, 2668, 5, 89, 45, 2, 2668, 2669, 5, 113, 57, 2, 2669, 2670, 5, 107, 54, 2, 2670, 2671, 5, 107, 54, 2, 2671, 2672, 5, 93, 47, 2, 2672, 2673, 5, 89, 45, 2, 2673, 2674, 5, 123, 62, 2, 2674, 2675, 5, 101, 51, 2, 2675, 2676, 5, 113, 57, 2, 2676, 2677, 5, 111, 56, 2, 2677, 572, 3, 2, 2, 2, 2678, 2679, 5, 107, 54, 2, 2679, 2680, 5, 101, 51, 2, 2680, 2681, 5, 111, 56, 2, 2681, 2682, 5, 93, 47, 2, 2682, 2683, 5, 121, 61, 2, 2683, 2684, 5, 123, 62, 2, 2684, 2685, 5, 119, 60, 2, 2685, 2686, 5, 101, 51, 2, 2686, 2687, 5, 111, 56, 2, 2687, 2688, 5, 97, 49, 2, 2688, 574, 3, 2, 2, 2, 2689, 2690, 5, 109, 55, 2, 2690, 2691, 5, 125, 63, 2, 2691, 2692, 5, 107, 54, 2, 2692, 2693, 5, 123, 62, 2, 2693, 2694, 5, 101, 51, 2, 2694, 2695, 5, 107, 54, 2, 2695, 2696, 5, 101, 51, 2, 2696, 2697, 5, 111, 56, 2, 2697, 2698, 5, 93, 47, 2, 2698, 2699, 5, 121, 61, 2, 2699, 2700, 5, 123, 62, 2, 2700, 2701, 5, 119, 60, 2, 2701, 2702, 5, 101, 51, 2, 2702, 2703, 5, 111, 56, 2, 2703, 2704, 5, 97, 49, 2, 2704, 576, 3, 2, 2, 2, 2705, 2706, 5, 109, 55, 2, 2706, 2707, 5, 125, 63, 2, 2707, 2708, 5, 107, 54, 2, 2708, 2709, 5, 123, 62, 2, 2709, 2710, 5, 101, 51, 2, 2710, 2711, 5, 115, 58, 2, 2711, 2712, 5, 113, 57, 2, 2712, 2713, 5, 101, 51, 2, 2713, 2714, 5, 111, 56, 2, 2714, 2715, 5, 123, 62, 2, 2715, 578, 3, 2, 2, 2, 2716, 2717, 5, 109, 55, 2, 2717, 2718, 5, 125, 63, 2, 2718, 2719, 5, 107, 54, 2, 2719, 2720, 5, 123, 62, 2, 2720, 2721, 5, 101, 51, 2, 2721, 2722, 5, 115, 58, 2, 2722, 2723, 5, 113, 57, 2, 2723, 2724, 5, 107, 54, 2, 2724, 2725, 5, 133, 67, 2, 2725, 2726, 5, 97, 49, 2, 2726, 2727, 5, 113, 57, 2, 2727, 2728, 5, 111, 56, 2, 2728, 580, 3, 2, 2, 2, 2729, 2730, 5, 115, 58, 2, 2730, 2731, 5, 113, 57, 2, 2731, 2732, 5, 101, 51, 2, 2732, 2733, 5, 111, 56, 2, 2733, 2734, 5, 123, 62, 2, 2734, 582, 3, 2, 2, 2, 2735, 2736, 5, 115, 58, 2, 2736, 2737, 5, 113, 57, 2, 2737, 2738, 5, 107, 54, 2, 2738, 2739, 5, 133, 67, 2, 2739, 2740, 5, 97, 49, 2, 2740, 2741, 5, 113, 57, 2, 2741, 2742, 5, 111, 56, 2, 2742, 584, 3, 2, 2, 2, 2743, 2744, 5, 107, 54, 2, 2744, 2745, 5, 93, 47, 2, 2745, 2746, 5, 127, 64, 2, 2746, 2747, 5, 93, 47, 2, 2747, 2748, 5, 107, 54, 2, 2748, 586, 3, 2, 2, 2, 2749, 2750, 5, 91, 46, 2, 2750, 2751, 5, 85, 43, 2, 2751, 2752, 5, 123, 62, 2, 2752, 2753, 5, 93, 47, 2, 2753, 2754, 5, 123, 62, 2, 2754, 2755, 5, 101, 51, 2, 2755, 2756, 5, 109, 55, 2, 2756, 2757, 5, 93, 47, 2, 2757, 588, 3, 2, 2, 2, 2758, 2759, 5, 123, 62, 2, 2759, 2760, 5, 119, 60, 2, 2760, 2761, 5, 101, 51, 2, 2761, 2762, 5, 109, 55, 2, 2762, 590, 3, 2, 2, 2, 2763, 2764, 5, 107, 54, 2, 2764, 2765, 5, 93, 47, 2, 2765, 2766, 5, 85, 43, 2, 2766, 2767, 5, 91, 46, 2, 2767, 2768, 5, 101, 51, 2, 2768, 2769, 5, 111, 56, 2, 2769, 2770, 5, 97, 49, 2, 2770, 592, 3, 2, 2, 2, 2771, 2772, 5, 123, 62, 2, 2772, 2773, 5, 119, 60, 2, 2773, 2774, 5, 85, 43, 2, 2774, 2775, 5, 101, 51, 2, 2775, 2776, 5, 107, 54, 2, 2776, 2777, 5, 101, 51, 2, 2777, 2778, 5, 111, 56, 2, 2778, 2779, 5, 97, 49, 2, 2779, 594, 3, 2, 2, 2, 2780, 2781, 5, 87, 44, 2, 2781, 2782, 5, 113, 57, 2, 2782, 2783, 5, 123, 62, 2, 2783, 2784, 5, 99, 50, 2, 2784, 596, 3, 2, 2, 2, 2785, 2786, 5, 121, 61, 2, 2786, 2787, 5, 123, 62, 2, 2787, 2788, 5, 119, 60, 2, 2788, 2789, 5, 101, 51, 2, 2789, 2790, 5, 111, 56, 2, 2790, 2791, 5, 97, 49, 2, 2791, 598, 3, 2, 2, 2, 2792, 2793, 5, 121, 61, 2, 2793, 2794, 5, 125, 63, 2, 2794, 2795, 5, 87, 44, 2, 2795, 2796, 5, 121, 61, 2, 2796, 2797, 5, 123, 62, 2, 2797, 2798, 5, 119, 60, 2, 2798, 2799, 5, 101, 51, 2, 2799, 2800, 5, 111, 56, 2, 2800, 2801, 5, 97, 49, 2, 2801, 600, 3, 2, 2, 2, 2802, 2803, 5, 129, 65, 2, 2803, 2804, 5, 99, 50, 2, 2804, 2805, 5, 93, 47, 2, 2805, 2806, 5, 111, 56, 2, 2806, 602, 3, 2, 2, 2, 2807, 2808, 5, 123, 62, 2, 2808, 2809, 5, 99, 50, 2, 2809, 2810, 5, 93, 47, 2, 2810, 2811, 5, 111, 56, 2, 2811, 604, 3, 2, 2, 2, 2812, 2813, 5, 93, 47, 2, 2813, 2814, 5, 107, 54, 2, 2814, 2815, 5, 121, 61, 2, 2815, 2816, 5, 93, 47, 2, 2816, 606, 3, 2, 2, 2, 2817, 2818, 5, 121, 61, 2, 2818, 2819, 5, 101, 51, 2, 2819, 2820, 5, 97, 49, 2, 2820, 2821, 5, 111, 56, 2, 2821, 2822, 5, 93, 47, 2, 2822, 2823, 5, 91, 46, 2, 2823, 608, 3, 2, 2, 2, 2824, 2825, 5, 125, 63, 2, 2825, 2826, 5, 111, 56, 2, 2826, 2827, 5, 121, 61, 2, 2827, 2828, 5, 101, 51, 2, 2828, 2829, 5, 97, 49, 2, 2829, 2830, 5, 111, 56, 2, 2830, 2831, 5, 93, 47, 2, 2831, 2832, 5, 91, 46, 2, 2832, 610, 3, 2, 2, 2, 2833, 2834, 5, 91, 46, 2, 2834, 2835, 5, 93, 47, 2, 2835, 2836, 5, 89, 45, 2, 2836, 2837, 5, 101, 51, 2, 2837, 2838, 5, 109, 55, 2, 2838, 2839, 5, 85, 43, 2, 2839, 2840, 5, 107, 54, 2, 2840, 612, 3, 2, 2, 2, 2841, 2842, 5, 103, 52, 2, 2842, 2843, 5, 121, 61, 2, 2843, 2844, 5, 113, 57, 2, 2844, 2845, 5, 111, 56, 2, 2845, 614, 3, 2, 2, 2, 2846, 2847, 5, 95, 48, 2, 2847, 2848, 5, 107, 54, 2, 2848, 2849, 5, 113, 57, 2, 2849, 2850, 5, 85, 43, 2, 2850, 2851, 5, 123, 62, 2, 2851, 616, 3, 2, 2, 2, 2852, 2853, 5, 95, 48, 2, 2853, 2854, 5, 107, 54, 2, 2854, 2855, 5, 113, 57, 2, 2855, 2856, 5, 85, 43, 2, 2856, 2857, 5, 123, 62, 2, 2857, 2858, 7, 54, 2, 2, 2858, 618, 3, 2, 2, 2, 2859, 2860, 5, 95, 48, 2, 2860, 2861, 5, 107, 54, 2, 2861, 2862, 5, 113, 57, 2, 2862, 2863, 5, 85, 43, 2, 2863, 2864, 5, 123, 62, 2, 2864, 2865, 7, 58, 2, 2, 2865, 620, 3, 2, 2, 2, 2866, 2867, 5, 121, 61, 2, 2867, 2868, 5, 93, 47, 2, 2868, 2869, 5, 123, 62, 2, 2869, 622, 3, 2, 2, 2, 2870, 2871, 5, 121, 61, 2, 2871, 2872, 5, 93, 47, 2, 2872, 2873, 5, 89, 45, 2, 2873, 2874, 5, 113, 57, 2, 2874, 2875, 5, 111, 56, 2, 2875, 2876, 5, 91, 46, 2, 2876, 2877, 7, 97, 2, 2, 2877, 2878, 5, 109, 55, 2, 2878, 2879, 5, 101, 51, 2, 2879, 2880, 5, 89, 45, 2, 2880, 2881, 5, 119, 60, 2, 2881, 2882, 5, 113, 57, 2, 2882, 2883, 5, 121, 61, 2, 2883, 2884, 5, 93, 47, 2, 2884, 2885, 5, 89, 45, 2, 2885, 2886, 5, 113, 57, 2, 2886, 2887, 5, 111, 56, 2, 2887, 2888, 5, 91, 46, 2, 2888, 624, 3, 2, 2, 2, 2889, 2890, 5, 109, 55, 2, 2890, 2891, 5, 101, 51, 2, 2891, 2892, 5, 111, 56, 2, 2892, 2893, 5, 125, 63, 2, 2893, 2894, 5, 123, 62, 2, 2894, 2895, 5, 93, 47, 2, 2895, 2896, 7, 97, 2, 2, 2896, 2897, 5, 109, 55, 2, 2897, 2898, 5, 101, 51, 2, 2898, 2899, 5, 89, 45, 2, 2899, 2900, 5, 119, 60, 2, 2900, 2901, 5, 113, 57, 2, 2901, 2902, 5, 121, 61, 2, 2902, 2903, 5, 93, 47, 2, 2903, 2904, 5, 89, 45, 2, 2904, 2905, 5, 113, 57, 2, 2905, 2906, 5, 111, 56, 2, 2906, 2907, 5, 91, 46, 2, 2907, 626, 3, 2, 2, 2, 2908, 2909, 5, 109, 55, 2, 2909, 2910, 5, 101, 51, 2, 2910, 2911, 5, 111, 56, 2, 2911, 2912, 5, 125, 63, 2, 2912, 2913, 5, 123, 62, 2, 2913, 2914, 5, 93, 47, 2, 2914, 2915, 7, 97, 2, 2, 2915, 2916, 5, 121, 61, 2, 2916, 2917, 5, 93, 47, 2, 2917, 2918, 5, 89, 45, 2, 2918, 2919, 5, 113, 57, 2, 2919, 2920, 5, 111, 56, 2, 2920, 2921, 5, 91, 46, 2, 2921, 628, 3, 2, 2, 2, 2922, 2923, 5, 99, 50, 2, 2923, 2924, 5, 113, 57, 2, 2924, 2925, 5, 125, 63, 2, 2925, 2926, 5, 119, 60, 2, 2926, 2927, 7, 97, 2, 2, 2927, 2928, 5, 109, 55, 2, 2928, 2929, 5, 101, 51, 2, 2929, 2930, 5, 89, 45, 2, 2930, 2931, 5, 119, 60, 2, 2931, 2932, 5, 113, 57, 2, 2932, 2933, 5, 121, 61, 2, 2933, 2934, 5, 93, 47, 2, 2934, 2935, 5, 89, 45, 2, 2935, 2936, 5, 113, 57, 2, 2936, 2937, 5, 111, 56, 2, 2937, 2938, 5, 91, 46, 2, 2938, 630, 3, 2, 2, 2, 2939, 2940, 5, 99, 50, 2, 2940, 2941, 5, 113, 57, 2, 2941, 2942, 5, 125, 63, 2, 2942, 2943, 5, 119, 60, 2, 2943, 2944, 7, 97, 2, 2, 2944, 2945, 5, 121, 61, 2, 2945, 2946, 5, 93, 47, 2, 2946, 2947, 5, 89, 45, 2, 2947, 2948, 5, 113, 57, 2, 2948, 2949, 5, 111, 56, 2, 2949, 2950, 5, 91, 46, 2, 2950, 632, 3, 2, 2, 2, 2951, 2952, 5, 99, 50, 2, 2952, 2953, 5, 113, 57, 2, 2953, 2954, 5, 125, 63, 2, 2954, 2955, 5, 119, 60, 2, 2955, 2956, 7, 97, 2, 2, 2956, 2957, 5, 109, 55, 2, 2957, 2958, 5, 101, 51, 2, 2958, 2959, 5, 111, 56, 2, 2959, 2960, 5, 125, 63, 2, 2960, 2961, 5, 123, 62, 2, 2961, 2962, 5, 93, 47, 2, 2962, 634, 3, 2, 2, 2, 2963, 2964, 5, 91, 46, 2, 2964, 2965, 5, 85, 43, 2, 2965, 2966, 5, 133, 67, 2, 2966, 2967, 7, 97, 2, 2, 2967, 2968, 5, 109, 55, 2, 2968, 2969, 5, 101, 51, 2, 2969, 2970, 5, 89, 45, 2, 2970, 2971, 5, 119, 60, 2, 2971, 2972, 5, 113, 57, 2, 2972, 2973, 5, 121, 61, 2, 2973, 2974, 5, 93, 47, 2, 2974, 2975, 5, 89, 45, 2, 2975, 2976, 5, 113, 57, 2, 2976, 2977, 5, 111, 56, 2, 2977, 2978, 5, 91, 46, 2, 2978, 636, 3, 2, 2, 2, 2979, 2980, 5, 91, 46, 2, 2980, 2981, 5, 85, 43, 2, 2981, 2982, 5, 133, 67, 2, 2982, 2983, 7, 97, 2, 2, 2983, 2984, 5, 121, 61, 2, 2984, 2985, 5, 93, 47, 2, 2985, 2986, 5, 89, 45, 2, 2986, 2987, 5, 113, 57, 2, 2987, 2988, 5, 111, 56, 2, 2988, 2989, 5, 91, 46, 2, 2989, 638, 3, 2, 2, 2, 2990, 2991, 5, 91, 46, 2, 2991, 2992, 5, 85, 43, 2, 2992, 2993, 5, 133, 67, 2, 2993, 2994, 7, 97, 2, 2, 2994, 2995, 5, 109, 55, 2, 2995, 2996, 5, 101, 51, 2, 2996, 2997, 5, 111, 56, 2, 2997, 2998, 5, 125, 63, 2, 2998, 2999, 5, 123, 62, 2, 2999, 3000, 5, 93, 47, 2, 3000, 640, 3, 2, 2, 2, 3001, 3002, 5, 91, 46, 2, 3002, 3003, 5, 85, 43, 2, 3003, 3004, 5, 133, 67, 2, 3004, 3005, 7, 97, 2, 2, 3005, 3006, 5, 99, 50, 2, 3006, 3007, 5, 113, 57, 2, 3007, 3008, 5, 125, 63, 2, 3008, 3009, 5, 119, 60, 2, 3009, 642, 3, 2, 2, 2, 3010, 3011, 5, 133, 67, 2, 3011, 3012, 5, 93, 47, 2, 3012, 3013, 5, 85, 43, 2, 3013, 3014, 5, 119, 60, 2, 3014, 3015, 7, 97, 2, 2, 3015, 3016, 5, 109, 55, 2, 3016, 3017, 5, 113, 57, 2, 3017, 3018, 5, 111, 56, 2, 3018, 3019, 5, 123, 62, 2, 3019, 3020, 5, 99, 50, 2, 3020, 644, 3, 2, 2, 2, 3021, 3022, 5, 87, 44, 2, 3022, 3023, 5, 123, 62, 2, 3023, 3024, 5, 119, 60, 2, 3024, 3025, 5, 93, 47, 2, 3025, 3026, 5, 93, 47, 2, 3026, 646, 3, 2, 2, 2, 3027, 3028, 5, 119, 60, 2, 3028, 3029, 5, 123, 62, 2, 3029, 3030, 5, 119, 60, 2, 3030, 3031, 5, 93, 47, 2, 3031, 3032, 5, 93, 47, 2, 3032, 648, 3, 2, 2, 2, 3033, 3034, 5, 99, 50, 2, 3034, 3035, 5, 85, 43, 2, 3035, 3036, 5, 121, 61, 2, 3036, 3037, 5, 99, 50, 2, 3037, 650, 3, 2, 2, 2, 3038, 3039, 5, 119, 60, 2, 3039, 3040, 5, 93, 47, 2, 3040, 3041, 5, 85, 43, 2, 3041, 3042, 5, 107, 54, 2, 3042, 652, 3, 2, 2, 2, 3043, 3044, 5, 91, 46, 2, 3044, 3045, 5, 113, 57, 2, 3045, 3046, 5, 125, 63, 2, 3046, 3047, 5, 87, 44, 2, 3047, 3048, 5, 107, 54, 2, 3048, 3049, 5, 93, 47, 2, 3049, 654, 3, 2, 2, 2, 3050, 3051, 5, 115, 58, 2, 3051, 3052, 5, 119, 60, 2, 3052, 3053, 5, 93, 47, 2, 3053, 3054, 5, 89, 45, 2, 3054, 3055, 5, 101, 51, 2, 3055, 3056, 5, 121, 61, 2, 3056, 3057, 5, 101, 51, 2, 3057, 3058, 5, 113, 57, 2, 3058, 3059, 5, 111, 56, 2, 3059, 656, 3, 2, 2, 2, 3060, 3061, 5, 111, 56, 2, 3061, 3062, 5, 125, 63, 2, 3062, 3063, 5, 109, 55, 2, 3063, 3064, 5, 93, 47, 2, 3064, 3065, 5, 119, 60, 2, 3065, 3066, 5, 101, 51, 2, 3066, 3067, 5, 89, 45, 2, 3067, 658, 3, 2, 2, 2, 3068, 3069, 5, 111, 56, 2, 3069, 3070, 5, 125, 63, 2, 3070, 3071, 5, 109, 55, 2, 3071, 3072, 5, 87, 44, 2, 3072, 3073, 5, 93, 47, 2, 3073, 3074, 5, 119, 60, 2, 3074, 660, 3, 2, 2, 2, 3075, 3076, 5, 95, 48, 2, 3076, 3077, 5, 101, 51, 2, 3077, 3078, 5, 131, 66, 2, 3078, 3079, 5, 93, 47, 2, 3079, 3080, 5, 91, 46, 2, 3080, 662, 3, 2, 2, 2, 3081, 3082, 5, 87, 44, 2, 3082, 3083, 5, 101, 51, 2, 3083, 3084, 5, 123, 62, 2, 3084, 664, 3, 2, 2, 2, 3085, 3086, 5, 87, 44, 2, 3086, 3087, 5, 113, 57, 2, 3087, 3088, 5, 113, 57, 2, 3088, 3089, 5, 107, 54, 2, 3089, 666, 3, 2, 2, 2, 3090, 3091, 5, 127, 64, 2, 3091, 3092, 5, 85, 43, 2, 3092, 3093, 5, 119, 60, 2, 3093, 3094, 5, 133, 67, 2, 3094, 3095, 5, 101, 51, 2, 3095, 3096, 5, 111, 56, 2, 3096, 3097, 5, 97, 49, 2, 3097, 668, 3, 2, 2, 2, 3098, 3099, 5, 127, 64, 2, 3099, 3100, 5, 85, 43, 2, 3100, 3101, 5, 119, 60, 2, 3101, 3102, 5, 89, 45, 2, 3102, 3103, 5, 99, 50, 2, 3103, 3104, 5, 85, 43, 2, 3104, 3105, 5, 119, 60, 2, 3105, 670, 3, 2, 2, 2, 3106, 3107, 5, 111, 56, 2, 3107, 3108, 5, 85, 43, 2, 3108, 3109, 5, 123, 62, 2, 3109, 3110, 5, 101, 51, 2, 3110, 3111, 5, 113, 57, 2, 3111, 3112, 5, 111, 56, 2, 3112, 3113, 5, 85, 43, 2, 3113, 3114, 5, 107, 54, 2, 3114, 672, 3, 2, 2, 2, 3115, 3116, 5, 111, 56, 2, 3116, 3117, 5, 127, 64, 2, 3117, 3118, 5, 85, 43, 2, 3118, 3119, 5, 119, 60, 2, 3119, 3120, 5, 89, 45, 2, 3120, 3121, 5, 99, 50, 2, 3121, 3122, 5, 85, 43, 2, 3122, 3123, 5, 119, 60, 2, 3123, 674, 3, 2, 2, 2, 3124, 3125, 5, 111, 56, 2, 3125, 3126, 5, 89, 45, 2, 3126, 3127, 5, 99, 50, 2, 3127, 3128, 5, 85, 43, 2, 3128, 3129, 5, 119, 60, 2, 3129, 676, 3, 2, 2, 2, 3130, 3131, 5, 127, 64, 2, 3131, 3132, 5, 85, 43, 2, 3132, 3133, 5, 119, 60, 2, 3133, 3134, 5, 87, 44, 2, 3134, 3135, 5, 101, 51, 2, 3135, 3136, 5, 111, 56, 2, 3136, 3137, 5, 85, 43, 2, 3137, 3138, 5, 119, 60, 2, 3138, 3139, 5, 133, 67, 2, 3139, 678, 3, 2, 2, 2, 3140, 3141, 5, 123, 62, 2, 3141, 3142, 5, 101, 51, 2, 3142, 3143, 5, 111, 56, 2, 3143, 3144, 5, 133, 67, 2, 3144, 3145, 5, 87, 44, 2, 3145, 3146, 5, 107, 54, 2, 3146, 3147, 5, 113, 57, 2, 3147, 3148, 5, 87, 44, 2, 3148, 680, 3, 2, 2, 2, 3149, 3150, 5, 87, 44, 2, 3150, 3151, 5, 107, 54, 2, 3151, 3152, 5, 113, 57, 2, 3152, 3153, 5, 87, 44, 2, 3153, 682, 3, 2, 2, 2, 3154, 3155, 5, 109, 55, 2, 3155, 3156, 5, 93, 47, 2, 3156, 3157, 5, 91, 46, 2, 3157, 3158, 5, 101, 51, 2, 3158, 3159, 5, 125, 63, 2, 3159, 3160, 5, 109, 55, 2, 3160, 3161, 5, 87, 44, 2, 3161, 3162, 5, 107, 54, 2, 3162, 3163, 5, 113, 57, 2, 3163, 3164, 5, 87, 44, 2, 3164, 684, 3, 2, 2, 2, 3165, 3166, 5, 107, 54, 2, 3166, 3167, 5, 113, 57, 2, 3167, 3168, 5, 111, 56, 2, 3168, 3169, 5, 97, 49, 2, 3169, 3170, 5, 87, 44, 2, 3170, 3171, 5, 107, 54, 2, 3171, 3172, 5, 113, 57, 2, 3172, 3173, 5, 87, 44, 2, 3173, 686, 3, 2, 2, 2, 3174, 3175, 5, 107, 54, 2, 3175, 3176, 5, 113, 57, 2, 3176, 3177, 5, 111, 56, 2, 3177, 3178, 5, 97, 49, 2, 3178, 688, 3, 2, 2, 2, 3179, 3180, 5, 123, 62, 2, 3180, 3181, 5, 101, 51, 2, 3181, 3182, 5, 111, 56, 2, 3182, 3183, 5, 133, 67, 2, 3183, 3184, 5, 123, 62, 2, 3184, 3185, 5, 93, 47, 2, 3185, 3186, 5, 131, 66, 2, 3186, 3187, 5, 123, 62, 2, 3187, 690, 3, 2, 2, 2, 3188, 3189, 5, 123, 62, 2, 3189, 3190, 5, 93, 47, 2, 3190, 3191, 5, 131, 66, 2, 3191, 3192, 5, 123, 62, 2, 3192, 692, 3, 2, 2, 2, 3193, 3194, 5, 109, 55, 2, 3194, 3195, 5, 93, 47, 2, 3195, 3196, 5, 91, 46, 2, 3196, 3197, 5, 101, 51, 2, 3197, 3198, 5, 125, 63, 2, 3198, 3199, 5, 109, 55, 2, 3199, 3200, 5, 123, 62, 2, 3200, 3201, 5, 93, 47, 2, 3201, 3202, 5, 131, 66, 2, 3202, 3203, 5, 123, 62, 2, 3203, 694, 3, 2, 2, 2, 3204, 3205, 5, 107, 54, 2, 3205, 3206, 5, 113, 57, 2, 3206, 3207, 5, 111, 56, 2, 3207, 3208, 5, 97, 49, 2, 3208, 3209, 5, 123, 62, 2, 3209, 3210, 5, 93, 47, 2, 3210, 3211, 5, 131, 66, 2, 3211, 3212, 5, 123, 62, 2, 3212, 696, 3, 2, 2, 2, 3213, 3214, 5, 93, 47, 2, 3214, 3215, 5, 111, 56, 2, 3215, 3216, 5, 125, 63, 2, 3216, 3217, 5, 109, 55, 2, 3217, 698, 3, 2, 2, 2, 3218, 3219, 5, 121, 61, 2, 3219, 3220, 5, 93, 47, 2, 3220, 3221, 5, 119, 60, 2, 3221, 3222, 5, 101, 51, 2, 3222, 3223, 5, 85, 43, 2, 3223, 3224, 5, 107, 54, 2, 3224, 700, 3, 2, 2, 2, 3225, 3226, 5, 97, 49, 2, 3226, 3227, 5, 93, 47, 2, 3227, 3228, 5, 113, 57, 2, 3228, 3229, 5, 109, 55, 2, 3229, 3230, 5, 93, 47, 2, 3230, 3231, 5, 123, 62, 2, 3231, 3232, 5, 119, 60, 2, 3232, 3233, 5, 133, 67, 2, 3233, 702, 3, 2, 2, 2, 3234, 3235, 5, 135, 68, 2, 3235, 3236, 5, 93, 47, 2, 3236, 3237, 5, 119, 60, 2, 3237, 3238, 5, 113, 57, 2, 3238, 3239, 5, 95, 48, 2, 3239, 3240, 5, 101, 51, 2, 3240, 3241, 5, 107, 54, 2, 3241, 3242, 5, 107, 54, 2, 3242, 704, 3, 2, 2, 2, 3243, 3244, 5, 87, 44, 2, 3244, 3245, 5, 133, 67, 2, 3245, 3246, 5, 123, 62, 2, 3246, 3247, 5, 93, 47, 2, 3247, 706, 3, 2, 2, 2, 3248, 3249, 5, 125, 63, 2, 3249, 3250, 5, 111, 56, 2, 3250, 3251, 5, 101, 51, 2, 3251, 3252, 5, 89, 45, 2, 3252, 3253, 5, 113, 57, 2, 3253, 3254, 5, 91, 46, 2, 3254, 3255, 5, 93, 47, 2, 3255, 708, 3, 2, 2, 2, 3256, 3257, 5, 123, 62, 2, 3257, 3258, 5, 93, 47, 2, 3258, 3259, 5, 119, 60, 2, 3259, 3260, 5, 109, 55, 2, 3260, 3261, 5, 101, 51, 2, 3261, 3262, 5, 111, 56, 2, 3262, 3263, 5, 85, 43, 2, 3263, 3264, 5, 123, 62, 2, 3264, 3265, 5, 93, 47, 2, 3265, 3266, 5, 91, 46, 2, 3266, 710, 3, 2, 2, 2, 3267, 3268, 5, 113, 57, 2, 3268, 3269, 5, 115, 58, 2, 3269, 3270, 5, 123, 62, 2, 3270, 3271, 5, 101, 51, 2, 3271, 3272, 5, 113, 57, 2, 3272, 3273, 5, 111, 56, 2, 3273, 3274, 5, 85, 43, 2, 3274, 3275, 5, 107, 54, 2, 3275, 3276, 5, 107, 54, 2, 3276, 3277, 5, 133, 67, 2, 3277, 712, 3, 2, 2, 2, 3278, 3279, 5, 93, 47, 2, 3279, 3280, 5, 111, 56, 2, 3280, 3281, 5, 89, 45, 2, 3281, 3282, 5, 107, 54, 2, 3282, 3283, 5, 113, 57, 2, 3283, 3284, 5, 121, 61, 2, 3284, 3285, 5, 93, 47, 2, 3285, 3286, 5, 91, 46, 2, 3286, 714, 3, 2, 2, 2, 3287, 3288, 5, 93, 47, 2, 3288, 3289, 5, 121, 61, 2, 3289, 3290, 5, 89, 45, 2, 3290, 3291, 5, 85, 43, 2, 3291, 3292, 5, 115, 58, 2, 3292, 3293, 5, 93, 47, 2, 3293, 3294, 5, 91, 46, 2, 3294, 716, 3, 2, 2, 2, 3295, 3296, 5, 107, 54, 2, 3296, 3297, 5, 101, 51, 2, 3297, 3298, 5, 111, 56, 2, 3298, 3299, 5, 93, 47, 2, 3299, 3300, 5, 121, 61, 2, 3300, 718, 3, 2, 2, 2, 3301, 3302, 5, 121, 61, 2, 3302, 3303, 5, 123, 62, 2, 3303, 3304, 5, 85, 43, 2, 3304, 3305, 5, 119, 60, 2, 3305, 3306, 5, 123, 62, 2, 3306, 3307, 5, 101, 51, 2, 3307, 3308, 5, 111, 56, 2, 3308, 3309, 5, 97, 49, 2, 3309, 720, 3, 2, 2, 2, 3310, 3311, 5, 97, 49, 2, 3311, 3312, 5, 107, 54, 2, 3312, 3313, 5, 113, 57, 2, 3313, 3314, 5, 87, 44, 2, 3314, 3315, 5, 85, 43, 2, 3315, 3316, 5, 107, 54, 2, 3316, 722, 3, 2, 2, 2, 3317, 3318, 5, 107, 54, 2, 3318, 3319, 5, 113, 57, 2, 3319, 3320, 5, 89, 45, 2, 3320, 3321, 5, 85, 43, 2, 3321, 3322, 5, 107, 54, 2, 3322, 724, 3, 2, 2, 2, 3323, 3324, 5, 121, 61, 2, 3324, 3325, 5, 93, 47, 2, 3325, 3326, 5, 121, 61, 2, 3326, 3327, 5, 121, 61, 2, 3327, 3328, 5, 101, 51, 2, 3328, 3329, 5, 113, 57, 2, 3329, 3330, 5, 111, 56, 2, 3330, 726, 3, 2, 2, 2, 3331, 3332, 5, 127, 64, 2, 3332, 3333, 5, 85, 43, 2, 3333, 3334, 5, 119, 60, 2, 3334, 3335, 5, 101, 51, 2, 3335, 3336, 5, 85, 43, 2, 3336, 3337, 5, 111, 56, 2, 3337, 3338, 5, 123, 62, 2, 3338, 728, 3, 2, 2, 2, 3339, 3340, 5, 113, 57, 2, 3340, 3341, 5, 87, 44, 2, 3341, 3342, 5, 103, 52, 2, 3342, 3343, 5, 93, 47, 2, 3343, 3344, 5, 89, 45, 2, 3344, 3345, 5, 123, 62, 2, 3345, 730, 3, 2, 2, 2, 3346, 3347, 5, 97, 49, 2, 3347, 3348, 5, 93, 47, 2, 3348, 3349, 5, 113, 57, 2, 3349, 3350, 5, 97, 49, 2, 3350, 3351, 5, 119, 60, 2, 3351, 3352, 5, 85, 43, 2, 3352, 3353, 5, 115, 58, 2, 3353, 3354, 5, 99, 50, 2, 3354, 3355, 5, 133, 67, 2, 3355, 732, 3, 2, 2, 2, 3356, 3357, 5, 101, 51, 2, 3357, 3358, 5, 111, 56, 2, 3358, 3359, 5, 123, 62, 2, 3359, 3360, 7, 51, 2, 2, 3360, 3361, 3, 2, 2, 2, 3361, 3362, 8, 367, 2, 2, 3362, 734, 3, 2, 2, 2, 3363, 3364, 5, 101, 51, 2, 3364, 3365, 5, 111, 56, 2, 3365, 3366, 5, 123, 62, 2, 3366, 3367, 7, 52, 2, 2, 3367, 3368, 3, 2, 2, 2, 3368, 3369, 8, 368, 3, 2, 3369, 736, 3, 2, 2, 2, 3370, 3371, 5, 101, 51, 2, 3371, 3372, 5, 111, 56, 2, 3372, 3373, 5, 123, 62, 2, 3373, 3374, 7, 53, 2, 2, 3374, 3375, 3, 2, 2, 2, 3375, 3376, 8, 369, 4, 2, 3376, 738, 3, 2, 2, 2, 3377, 3378, 5, 101, 51, 2, 3378, 3379, 5, 111, 56, 2, 3379, 3380, 5, 123, 62, 2, 3380, 3381, 7, 54, 2, 2, 3381, 3382, 3, 2, 2, 2, 3382, 3383, 8, 370, 5, 2, 3383, 740, 3, 2, 2, 2, 3384, 3385, 5, 101, 51, 2, 3385, 3386, 5, 111, 56, 2, 3386, 3387, 5, 123, 62, 2, 3387, 3388, 7, 58, 2, 2, 3388, 3389, 3, 2, 2, 2, 3389, 3390, 8, 371, 6, 2, 3390, 742, 3, 2, 2, 2, 3391, 3392, 5, 121, 61, 2, 3392, 3393, 5, 117, 59, 2, 3393, 3394, 5, 107, 54, 2, 3394, 3395, 7, 97, 2, 2, 3395, 3396, 5, 123, 62, 2, 3396, 3397, 5, 121, 61, 2, 3397, 3398, 5, 101, 51, 2, 3398, 3399, 7, 97, 2, 2, 3399, 3400, 5, 121, 61, 2, 3400, 3401, 5, 93, 47, 2, 3401, 3402, 5, 89, 45, 2, 3402, 3403, 5, 113, 57, 2, 3403, 3404, 5, 111, 56, 2, 3404, 3405, 5, 91, 46, 2, 3405, 3406, 3, 2, 2, 2, 3406, 3407, 8, 372, 7, 2, 3407, 744, 3, 2, 2, 2, 3408, 3409, 5, 121, 61, 2, 3409, 3410, 5, 117, 59, 2, 3410, 3411, 5, 107, 54, 2, 3411, 3412, 7, 97, 2, 2, 3412, 3413, 5, 123, 62, 2, 3413, 3414, 5, 121, 61, 2, 3414, 3415, 5, 101, 51, 2, 3415, 3416, 7, 97, 2, 2, 3416, 3417, 5, 109, 55, 2, 3417, 3418, 5, 101, 51, 2, 3418, 3419, 5, 111, 56, 2, 3419, 3420, 5, 125, 63, 2, 3420, 3421, 5, 123, 62, 2, 3421, 3422, 5, 93, 47, 2, 3422, 3423, 3, 2, 2, 2, 3423, 3424, 8, 373, 8, 2, 3424, 746, 3, 2, 2, 2, 3425, 3426, 5, 121, 61, 2, 3426, 3427, 5, 117, 59, 2, 3427, 3428, 5, 107, 54, 2, 3428, 3429, 7, 97, 2, 2, 3429, 3430, 5, 123, 62, 2, 3430, 3431, 5, 121, 61, 2, 3431, 3432, 5, 101, 51, 2, 3432, 3433, 7, 97, 2, 2, 3433, 3434, 5, 99, 50, 2, 3434, 3435, 5, 113, 57, 2, 3435, 3436, 5, 125, 63, 2, 3436, 3437, 5, 119, 60, 2, 3437, 3438, 3, 2, 2, 2, 3438, 3439, 8, 374, 9, 2, 3439, 748, 3, 2, 2, 2, 3440, 3441, 5, 121, 61, 2, 3441, 3442, 5, 117, 59, 2, 3442, 3443, 5, 107, 54, 2, 3443, 3444, 7, 97, 2, 2, 3444, 3445, 5, 123, 62, 2, 3445, 3446, 5, 121, 61, 2, 3446, 3447, 5, 101, 51, 2, 3447, 3448, 7, 97, 2, 2, 3448, 3449, 5, 91, 46, 2, 3449, 3450, 5, 85, 43, 2, 3450, 3451, 5, 133, 67, 2, 3451, 3452, 3, 2, 2, 2, 3452, 3453, 8, 375, 10, 2, 3453, 750, 3, 2, 2, 2, 3454, 3455, 5, 121, 61, 2, 3455, 3456, 5, 117, 59, 2, 3456, 3457, 5, 107, 54, 2, 3457, 3458, 7, 97, 2, 2, 3458, 3459, 5, 123, 62, 2, 3459, 3460, 5, 121, 61, 2, 3460, 3461, 5, 101, 51, 2, 3461, 3462, 7, 97, 2, 2, 3462, 3463, 5, 129, 65, 2, 3463, 3464, 5, 93, 47, 2, 3464, 3465, 5, 93, 47, 2, 3465, 3466, 5, 105, 53, 2, 3466, 3467, 3, 2, 2, 2, 3467, 3468, 8, 376, 11, 2, 3468, 752, 3, 2, 2, 2, 3469, 3470, 5, 121, 61, 2, 3470, 3471, 5, 117, 59, 2, 3471, 3472, 5, 107, 54, 2, 3472, 3473, 7, 97, 2, 2, 3473, 3474, 5, 123, 62, 2, 3474, 3475, 5, 121, 61, 2, 3475, 3476, 5, 101, 51, 2, 3476, 3477, 7, 97, 2, 2, 3477, 3478, 5, 109, 55, 2, 3478, 3479, 5, 113, 57, 2, 3479, 3480, 5, 111, 56, 2, 3480, 3481, 5, 123, 62, 2, 3481, 3482, 5, 99, 50, 2, 3482, 3483, 3, 2, 2, 2, 3483, 3484, 8, 377, 12, 2, 3484, 754, 3, 2, 2, 2, 3485, 3486, 5, 121, 61, 2, 3486, 3487, 5, 117, 59, 2, 3487, 3488, 5, 107, 54, 2, 3488, 3489, 7, 97, 2, 2, 3489, 3490, 5, 123, 62, 2, 3490, 3491, 5, 121, 61, 2, 3491, 3492, 5, 101, 51, 2, 3492, 3493, 7, 97, 2, 2, 3493, 3494, 5, 117, 59, 2, 3494, 3495, 5, 125, 63, 2, 3495, 3496, 5, 85, 43, 2, 3496, 3497, 5, 119, 60, 2, 3497, 3498, 5, 123, 62, 2, 3498, 3499, 5, 93, 47, 2, 3499, 3500, 5, 119, 60, 2, 3500, 3501, 3, 2, 2, 2, 3501, 3502, 8, 378, 13, 2, 3502, 756, 3, 2, 2, 2, 3503, 3504, 5, 121, 61, 2, 3504, 3505, 5, 117, 59, 2, 3505, 3506, 5, 107, 54, 2, 3506, 3507, 7, 97, 2, 2, 3507, 3508, 5, 123, 62, 2, 3508, 3509, 5, 121, 61, 2, 3509, 3510, 5, 101, 51, 2, 3510, 3511, 7, 97, 2, 2, 3511, 3512, 5, 133, 67, 2, 3512, 3513, 5, 93, 47, 2, 3513, 3514, 5, 85, 43, 2, 3514, 3515, 5, 119, 60, 2, 3515, 3516, 3, 2, 2, 2, 3516, 3517, 8, 379, 14, 2, 3517, 758, 3, 2, 2, 2, 3518, 3519, 9, 31, 2, 2, 3519, 3520, 3, 2, 2, 2, 3520, 3521, 8, 380, 15, 2, 3521, 760, 3, 2, 2, 2, 3522, 3524, 9, 32, 2, 2, 3523, 3522, 3, 2, 2, 2, 3524, 762, 3, 2, 2, 2, 3525, 3527, 5, 63, 32, 2, 3526, 3528, 9, 33, 2, 2, 3527, 3526, 3, 2, 2, 2, 3528, 3529, 3, 2, 2, 2, 3529, 3527, 3, 2, 2, 2, 3529, 3530, 3, 2, 2, 2, 3530, 764, 3, 2, 2, 2, 3531, 3533, 5, 139, 70, 2, 3532, 3531, 3, 2, 2, 2, 3533, 3534, 3, 2, 2, 2, 3534, 3532, 3, 2, 2, 2, 3534, 3535, 3, 2, 2, 2, 3535, 3536, 3, 2, 2, 2, 3536, 3544, 9, 6, 2, 2, 3537, 3541, 5, 807, 404, 2, 3538, 3540, 5, 805, 403, 2, 3539, 3538, 3, 2, 2, 2, 3540, 3543, 3, 2, 2, 2, 3541, 3539, 3, 2, 2, 2, 3541, 3542, 3, 2, 2, 2, 3542, 3545, 3, 2, 2, 2, 3543, 3541, 3, 2, 2, 2, 3544, 3537, 3, 2, 2, 2, 3544, 3545, 3, 2, 2, 2, 3545, 3566, 3, 2, 2, 2, 3546, 3548, 5, 139, 70, 2, 3547, 3546, 3, 2, 2, 2, 3548, 3549, 3, 2, 2, 2, 3549, 3547, 3, 2, 2, 2, 3549, 3550, 3, 2, 2, 2, 3550, 3551, 3, 2, 2, 2, 3551, 3555, 5, 809, 405, 2, 3552, 3554, 5, 805, 403, 2, 3553, 3552, 3, 2, 2, 2, 3554, 3557, 3, 2, 2, 2, 3555, 3553, 3, 2, 2, 2, 3555, 3556, 3, 2, 2, 2, 3556, 3566, 3, 2, 2, 2, 3557, 3555, 3, 2, 2, 2, 3558, 3562, 5, 807, 404, 2, 3559, 3561, 5, 805, 403, 2, 3560, 3559, 3, 2, 2, 2, 3561, 3564, 3, 2, 2, 2, 3562, 3560, 3, 2, 2, 2, 3562, 3563, 3, 2, 2, 2, 3563, 3566, 3, 2, 2, 2, 3564, 3562, 3, 2, 2, 2, 3565, 3532, 3, 2, 2, 2, 3565, 3547, 3, 2, 2, 2, 3565, 3558, 3, 2, 2, 2, 3566, 766, 3, 2, 2, 2, 3567, 3568, 9, 15, 2, 2, 3568, 3569, 5, 779, 390, 2, 3569, 768, 3, 2, 2, 2, 3570, 3571, 7, 98, 2, 2, 3571, 770, 3, 2, 2, 2, 3572, 3573, 7, 41, 2, 2, 3573, 772, 3, 2, 2, 2, 3574, 3575, 7, 36, 2, 2, 3575, 774, 3, 2, 2, 2, 3576, 3580, 5, 769, 385, 2, 3577, 3579, 11, 2, 2, 2, 3578, 3577, 3, 2, 2, 2, 3579, 3582, 3, 2, 2, 2, 3580, 3581, 3, 2, 2, 2, 3580, 3578, 3, 2, 2, 2, 3581, 3583, 3, 2, 2, 2, 3582, 3580, 3, 2, 2, 2, 3583, 3584, 5, 769, 385, 2, 3584, 776, 3, 2, 2, 2, 3585, 3589, 5, 773, 387, 2, 3586, 3588, 11, 2, 2, 2, 3587, 3586, 3, 2, 2, 2, 3588, 3591, 3, 2, 2, 2, 3589, 3590, 3, 2, 2, 2, 3589, 3587, 3, 2, 2, 2, 3590, 3592, 3, 2, 2, 2, 3591, 3589, 3, 2, 2, 2, 3592, 3593, 5, 773, 387, 2, 3593, 3595, 3, 2, 2, 2, 3594, 3585, 3, 2, 2, 2, 3595, 3596, 3, 2, 2, 2, 3596, 3594, 3, 2, 2, 2, 3596, 3597, 3, 2, 2, 2, 3597, 778, 3, 2, 2, 2, 3598, 3602, 5, 771, 386, 2, 3599, 3601, 11, 2, 2, 2, 3600, 3599, 3, 2, 2, 2, 3601, 3604, 3, 2, 2, 2, 3602, 3603, 3, 2, 2, 2, 3602, 3600, 3, 2, 2, 2, 3603, 3605, 3, 2, 2, 2, 3604, 3602, 3, 2, 2, 2, 3605, 3606, 5, 771, 386, 2, 3606, 3608, 3, 2, 2, 2, 3607, 3598, 3, 2, 2, 2, 3608, 3609, 3, 2, 2, 2, 3609, 3607, 3, 2, 2, 2, 3609, 3610, 3, 2, 2, 2, 3610, 780, 3, 2, 2, 2, 3611, 3615, 5, 65, 33, 2, 3612, 3614, 11, 2, 2, 2, 3613, 3612, 3, 2, 2, 2, 3614, 3617, 3, 2, 2, 2, 3615, 3616, 3, 2, 2, 2, 3615, 3613, 3, 2, 2, 2, 3616, 3618, 3, 2, 2, 2, 3617, 3615, 3, 2, 2, 2, 3618, 3619, 5, 67, 34, 2, 3619, 3621, 3, 2, 2, 2, 3620, 3611, 3, 2, 2, 2, 3621, 3622, 3, 2, 2, 2, 3622, 3620, 3, 2, 2, 2, 3622, 3623, 3, 2, 2, 2, 3623, 782, 3, 2, 2, 2, 3624, 3625, 7, 49, 2, 2, 3625, 3626, 7, 44, 2, 2, 3626, 3627, 7, 35, 2, 2, 3627, 3628, 3, 2, 2, 2, 3628, 3629, 5, 139, 70, 2, 3629, 3633, 3, 2, 2, 2, 3630, 3632, 11, 2, 2, 2, 3631, 3630, 3, 2, 2, 2, 3632, 3635, 3, 2, 2, 2, 3633, 3634, 3, 2, 2, 2, 3633, 3631, 3, 2, 2, 2, 3634, 3636, 3, 2, 2, 2, 3635, 3633, 3, 2, 2, 2, 3636, 3637, 7, 44, 2, 2, 3637, 3638, 7, 49, 2, 2, 3638, 3639, 3, 2, 2, 2, 3639, 3640, 8, 392, 15, 2, 3640, 784, 3, 2, 2, 2, 3641, 3642, 7, 49, 2, 2, 3642, 3643, 7, 44, 2, 2, 3643, 3644, 7, 35, 2, 2, 3644, 3645, 3, 2, 2, 2, 3645, 3646, 8, 393, 15, 2, 3646, 786, 3, 2, 2, 2, 3647, 3648, 7, 44, 2, 2, 3648, 3649, 7, 49, 2, 2, 3649, 3650, 3, 2, 2, 2, 3650, 3651, 8, 394, 15, 2, 3651, 788, 3, 2, 2, 2, 3652, 3653, 7, 49, 2, 2, 3653, 3654, 7, 44, 2, 2, 3654, 3655, 7, 44, 2, 2, 3655, 3669, 7, 49, 2, 2, 3656, 3657, 7, 49, 2, 2, 3657, 3658, 7, 44, 2, 2, 3658, 3659, 3, 2, 2, 2, 3659, 3663, 10, 34, 2, 2, 3660, 3662, 11, 2, 2, 2, 3661, 3660, 3, 2, 2, 2, 3662, 3665, 3, 2, 2, 2, 3663, 3664, 3, 2, 2, 2, 3663, 3661, 3, 2, 2, 2, 3664, 3666, 3, 2, 2, 2, 3665, 3663, 3, 2, 2, 2, 3666, 3667, 7, 44, 2, 2, 3667, 3669, 7, 49, 2, 2, 3668, 3652, 3, 2, 2, 2, 3668, 3656, 3, 2, 2, 2, 3669, 3670, 3, 2, 2, 2, 3670, 3671, 8, 395, 15, 2, 3671, 790, 3, 2, 2, 2, 3672, 3676, 7, 37, 2, 2, 3673, 3675, 10, 35, 2, 2, 3674, 3673, 3, 2, 2, 2, 3675, 3678, 3, 2, 2, 2, 3676, 3674, 3, 2, 2, 2, 3676, 3677, 3, 2, 2, 2, 3677, 3679, 3, 2, 2, 2, 3678, 3676, 3, 2, 2, 2, 3679, 3680, 8, 396, 15, 2, 3680, 792, 3, 2, 2, 2, 3681, 3691, 5, 795, 398, 2, 3682, 3686, 9, 36, 2, 2, 3683, 3685, 10, 35, 2, 2, 3684, 3683, 3, 2, 2, 2, 3685, 3688, 3, 2, 2, 2, 3686, 3684, 3, 2, 2, 2, 3686, 3687, 3, 2, 2, 2, 3687, 3692, 3, 2, 2, 2, 3688, 3686, 3, 2, 2, 2, 3689, 3692, 5, 797, 399, 2, 3690, 3692, 7, 2, 2, 3, 3691, 3682, 3, 2, 2, 2, 3691, 3689, 3, 2, 2, 2, 3691, 3690, 3, 2, 2, 2, 3692, 3693, 3, 2, 2, 2, 3693, 3694, 8, 397, 15, 2, 3694, 794, 3, 2, 2, 2, 3695, 3696, 7, 47, 2, 2, 3696, 3697, 7, 47, 2, 2, 3697, 796, 3, 2, 2, 2, 3698, 3699, 9, 35, 2, 2, 3699, 798, 3, 2, 2, 2, 3700, 3704, 5, 137, 69, 2, 3701, 3704, 9, 37, 2, 2, 3702, 3704, 5, 47, 24, 2, 3703, 3700, 3, 2, 2, 2, 3703, 3701, 3, 2, 2, 2, 3703, 3702, 3, 2, 2, 2, 3704, 3705, 3, 2, 2, 2, 3705, 3703, 3, 2, 2, 2, 3705, 3706, 3, 2, 2, 2, 3706, 800, 3, 2, 2, 2, 3707, 3708, 7, 49, 2, 2, 3708, 3709, 7, 44, 2, 2, 3709, 802, 3, 2, 2, 2, 3710, 3711, 7, 44, 2, 2, 3711, 3712, 7, 49, 2, 2, 3712, 804, 3, 2, 2, 2, 3713, 3716, 5, 137, 69, 2, 3714, 3716, 5, 807, 404, 2, 3715, 3713, 3, 2, 2, 2, 3715, 3714, 3, 2, 2, 2, 3716, 806, 3, 2, 2, 2, 3717, 3718, 9, 38, 2, 2, 3718, 808, 3, 2, 2, 2, 3719, 3720, 9, 39, 2, 2, 3720, 810, 3, 2, 2, 2, 43, 2, 967, 977, 985, 989, 997, 1005, 1008, 1013, 1019, 1022, 1028, 1079, 2247, 2316, 2345, 3523, 3529, 3534, 3541, 3544, 3549, 3555, 3562, 3565, 3580, 3589, 3596, 3602, 3609, 3615, 3622, 3633, 3663, 3668, 3676, 3686, 3691, 3703, 3705, 3715, 16, 9, 49, 2, 9, 50, 2, 9, 51, 2, 9, 53, 2, 9, 54, 2, 9, 55, 2, 9, 56, 2, 9, 57, 2, 9, 58, 2, 9, 59, 2, 9, 60, 2, 9, 61, 2, 9, 62, 2, 2, 3, 2] \ No newline at end of file diff --git a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/parser/SQLSelectLexer.js b/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/parser/SQLSelectLexer.js deleted file mode 100644 index 8bcb541..0000000 --- a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/parser/SQLSelectLexer.js +++ /dev/null @@ -1,2881 +0,0 @@ -// Generated from grammars/SQLSelectLexer.g4 by ANTLR 4.9.2 -// jshint ignore: start -const antlr4 = require('antlr4'); - - - -const serializedATN = ["\u0003\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786", - "\u5964\u0002\u0161\u0e89\b\u0001\u0004\u0002\t\u0002\u0004\u0003\t\u0003", - "\u0004\u0004\t\u0004\u0004\u0005\t\u0005\u0004\u0006\t\u0006\u0004\u0007", - "\t\u0007\u0004\b\t\b\u0004\t\t\t\u0004\n\t\n\u0004\u000b\t\u000b\u0004", - "\f\t\f\u0004\r\t\r\u0004\u000e\t\u000e\u0004\u000f\t\u000f\u0004\u0010", - "\t\u0010\u0004\u0011\t\u0011\u0004\u0012\t\u0012\u0004\u0013\t\u0013", - "\u0004\u0014\t\u0014\u0004\u0015\t\u0015\u0004\u0016\t\u0016\u0004\u0017", - "\t\u0017\u0004\u0018\t\u0018\u0004\u0019\t\u0019\u0004\u001a\t\u001a", - "\u0004\u001b\t\u001b\u0004\u001c\t\u001c\u0004\u001d\t\u001d\u0004\u001e", - "\t\u001e\u0004\u001f\t\u001f\u0004 \t \u0004!\t!\u0004\"\t\"\u0004#", - "\t#\u0004$\t$\u0004%\t%\u0004&\t&\u0004\'\t\'\u0004(\t(\u0004)\t)\u0004", - "*\t*\u0004+\t+\u0004,\t,\u0004-\t-\u0004.\t.\u0004/\t/\u00040\t0\u0004", - "1\t1\u00042\t2\u00043\t3\u00044\t4\u00045\t5\u00046\t6\u00047\t7\u0004", - "8\t8\u00049\t9\u0004:\t:\u0004;\t;\u0004<\t<\u0004=\t=\u0004>\t>\u0004", - "?\t?\u0004@\t@\u0004A\tA\u0004B\tB\u0004C\tC\u0004D\tD\u0004E\tE\u0004", - "F\tF\u0004G\tG\u0004H\tH\u0004I\tI\u0004J\tJ\u0004K\tK\u0004L\tL\u0004", - "M\tM\u0004N\tN\u0004O\tO\u0004P\tP\u0004Q\tQ\u0004R\tR\u0004S\tS\u0004", - "T\tT\u0004U\tU\u0004V\tV\u0004W\tW\u0004X\tX\u0004Y\tY\u0004Z\tZ\u0004", - "[\t[\u0004\\\t\\\u0004]\t]\u0004^\t^\u0004_\t_\u0004`\t`\u0004a\ta\u0004", - "b\tb\u0004c\tc\u0004d\td\u0004e\te\u0004f\tf\u0004g\tg\u0004h\th\u0004", - "i\ti\u0004j\tj\u0004k\tk\u0004l\tl\u0004m\tm\u0004n\tn\u0004o\to\u0004", - "p\tp\u0004q\tq\u0004r\tr\u0004s\ts\u0004t\tt\u0004u\tu\u0004v\tv\u0004", - "w\tw\u0004x\tx\u0004y\ty\u0004z\tz\u0004{\t{\u0004|\t|\u0004}\t}\u0004", - "~\t~\u0004\u007f\t\u007f\u0004\u0080\t\u0080\u0004\u0081\t\u0081\u0004", - "\u0082\t\u0082\u0004\u0083\t\u0083\u0004\u0084\t\u0084\u0004\u0085\t", - "\u0085\u0004\u0086\t\u0086\u0004\u0087\t\u0087\u0004\u0088\t\u0088\u0004", - "\u0089\t\u0089\u0004\u008a\t\u008a\u0004\u008b\t\u008b\u0004\u008c\t", - "\u008c\u0004\u008d\t\u008d\u0004\u008e\t\u008e\u0004\u008f\t\u008f\u0004", - "\u0090\t\u0090\u0004\u0091\t\u0091\u0004\u0092\t\u0092\u0004\u0093\t", - "\u0093\u0004\u0094\t\u0094\u0004\u0095\t\u0095\u0004\u0096\t\u0096\u0004", - "\u0097\t\u0097\u0004\u0098\t\u0098\u0004\u0099\t\u0099\u0004\u009a\t", - "\u009a\u0004\u009b\t\u009b\u0004\u009c\t\u009c\u0004\u009d\t\u009d\u0004", - "\u009e\t\u009e\u0004\u009f\t\u009f\u0004\u00a0\t\u00a0\u0004\u00a1\t", - "\u00a1\u0004\u00a2\t\u00a2\u0004\u00a3\t\u00a3\u0004\u00a4\t\u00a4\u0004", - "\u00a5\t\u00a5\u0004\u00a6\t\u00a6\u0004\u00a7\t\u00a7\u0004\u00a8\t", - "\u00a8\u0004\u00a9\t\u00a9\u0004\u00aa\t\u00aa\u0004\u00ab\t\u00ab\u0004", - "\u00ac\t\u00ac\u0004\u00ad\t\u00ad\u0004\u00ae\t\u00ae\u0004\u00af\t", - "\u00af\u0004\u00b0\t\u00b0\u0004\u00b1\t\u00b1\u0004\u00b2\t\u00b2\u0004", - "\u00b3\t\u00b3\u0004\u00b4\t\u00b4\u0004\u00b5\t\u00b5\u0004\u00b6\t", - "\u00b6\u0004\u00b7\t\u00b7\u0004\u00b8\t\u00b8\u0004\u00b9\t\u00b9\u0004", - "\u00ba\t\u00ba\u0004\u00bb\t\u00bb\u0004\u00bc\t\u00bc\u0004\u00bd\t", - "\u00bd\u0004\u00be\t\u00be\u0004\u00bf\t\u00bf\u0004\u00c0\t\u00c0\u0004", - "\u00c1\t\u00c1\u0004\u00c2\t\u00c2\u0004\u00c3\t\u00c3\u0004\u00c4\t", - "\u00c4\u0004\u00c5\t\u00c5\u0004\u00c6\t\u00c6\u0004\u00c7\t\u00c7\u0004", - "\u00c8\t\u00c8\u0004\u00c9\t\u00c9\u0004\u00ca\t\u00ca\u0004\u00cb\t", - "\u00cb\u0004\u00cc\t\u00cc\u0004\u00cd\t\u00cd\u0004\u00ce\t\u00ce\u0004", - "\u00cf\t\u00cf\u0004\u00d0\t\u00d0\u0004\u00d1\t\u00d1\u0004\u00d2\t", - "\u00d2\u0004\u00d3\t\u00d3\u0004\u00d4\t\u00d4\u0004\u00d5\t\u00d5\u0004", - "\u00d6\t\u00d6\u0004\u00d7\t\u00d7\u0004\u00d8\t\u00d8\u0004\u00d9\t", - "\u00d9\u0004\u00da\t\u00da\u0004\u00db\t\u00db\u0004\u00dc\t\u00dc\u0004", - "\u00dd\t\u00dd\u0004\u00de\t\u00de\u0004\u00df\t\u00df\u0004\u00e0\t", - "\u00e0\u0004\u00e1\t\u00e1\u0004\u00e2\t\u00e2\u0004\u00e3\t\u00e3\u0004", - "\u00e4\t\u00e4\u0004\u00e5\t\u00e5\u0004\u00e6\t\u00e6\u0004\u00e7\t", - "\u00e7\u0004\u00e8\t\u00e8\u0004\u00e9\t\u00e9\u0004\u00ea\t\u00ea\u0004", - "\u00eb\t\u00eb\u0004\u00ec\t\u00ec\u0004\u00ed\t\u00ed\u0004\u00ee\t", - "\u00ee\u0004\u00ef\t\u00ef\u0004\u00f0\t\u00f0\u0004\u00f1\t\u00f1\u0004", - "\u00f2\t\u00f2\u0004\u00f3\t\u00f3\u0004\u00f4\t\u00f4\u0004\u00f5\t", - "\u00f5\u0004\u00f6\t\u00f6\u0004\u00f7\t\u00f7\u0004\u00f8\t\u00f8\u0004", - "\u00f9\t\u00f9\u0004\u00fa\t\u00fa\u0004\u00fb\t\u00fb\u0004\u00fc\t", - "\u00fc\u0004\u00fd\t\u00fd\u0004\u00fe\t\u00fe\u0004\u00ff\t\u00ff\u0004", - "\u0100\t\u0100\u0004\u0101\t\u0101\u0004\u0102\t\u0102\u0004\u0103\t", - "\u0103\u0004\u0104\t\u0104\u0004\u0105\t\u0105\u0004\u0106\t\u0106\u0004", - "\u0107\t\u0107\u0004\u0108\t\u0108\u0004\u0109\t\u0109\u0004\u010a\t", - "\u010a\u0004\u010b\t\u010b\u0004\u010c\t\u010c\u0004\u010d\t\u010d\u0004", - "\u010e\t\u010e\u0004\u010f\t\u010f\u0004\u0110\t\u0110\u0004\u0111\t", - "\u0111\u0004\u0112\t\u0112\u0004\u0113\t\u0113\u0004\u0114\t\u0114\u0004", - "\u0115\t\u0115\u0004\u0116\t\u0116\u0004\u0117\t\u0117\u0004\u0118\t", - "\u0118\u0004\u0119\t\u0119\u0004\u011a\t\u011a\u0004\u011b\t\u011b\u0004", - "\u011c\t\u011c\u0004\u011d\t\u011d\u0004\u011e\t\u011e\u0004\u011f\t", - "\u011f\u0004\u0120\t\u0120\u0004\u0121\t\u0121\u0004\u0122\t\u0122\u0004", - "\u0123\t\u0123\u0004\u0124\t\u0124\u0004\u0125\t\u0125\u0004\u0126\t", - "\u0126\u0004\u0127\t\u0127\u0004\u0128\t\u0128\u0004\u0129\t\u0129\u0004", - "\u012a\t\u012a\u0004\u012b\t\u012b\u0004\u012c\t\u012c\u0004\u012d\t", - "\u012d\u0004\u012e\t\u012e\u0004\u012f\t\u012f\u0004\u0130\t\u0130\u0004", - "\u0131\t\u0131\u0004\u0132\t\u0132\u0004\u0133\t\u0133\u0004\u0134\t", - "\u0134\u0004\u0135\t\u0135\u0004\u0136\t\u0136\u0004\u0137\t\u0137\u0004", - "\u0138\t\u0138\u0004\u0139\t\u0139\u0004\u013a\t\u013a\u0004\u013b\t", - "\u013b\u0004\u013c\t\u013c\u0004\u013d\t\u013d\u0004\u013e\t\u013e\u0004", - "\u013f\t\u013f\u0004\u0140\t\u0140\u0004\u0141\t\u0141\u0004\u0142\t", - "\u0142\u0004\u0143\t\u0143\u0004\u0144\t\u0144\u0004\u0145\t\u0145\u0004", - "\u0146\t\u0146\u0004\u0147\t\u0147\u0004\u0148\t\u0148\u0004\u0149\t", - "\u0149\u0004\u014a\t\u014a\u0004\u014b\t\u014b\u0004\u014c\t\u014c\u0004", - "\u014d\t\u014d\u0004\u014e\t\u014e\u0004\u014f\t\u014f\u0004\u0150\t", - "\u0150\u0004\u0151\t\u0151\u0004\u0152\t\u0152\u0004\u0153\t\u0153\u0004", - "\u0154\t\u0154\u0004\u0155\t\u0155\u0004\u0156\t\u0156\u0004\u0157\t", - "\u0157\u0004\u0158\t\u0158\u0004\u0159\t\u0159\u0004\u015a\t\u015a\u0004", - "\u015b\t\u015b\u0004\u015c\t\u015c\u0004\u015d\t\u015d\u0004\u015e\t", - "\u015e\u0004\u015f\t\u015f\u0004\u0160\t\u0160\u0004\u0161\t\u0161\u0004", - "\u0162\t\u0162\u0004\u0163\t\u0163\u0004\u0164\t\u0164\u0004\u0165\t", - "\u0165\u0004\u0166\t\u0166\u0004\u0167\t\u0167\u0004\u0168\t\u0168\u0004", - "\u0169\t\u0169\u0004\u016a\t\u016a\u0004\u016b\t\u016b\u0004\u016c\t", - "\u016c\u0004\u016d\t\u016d\u0004\u016e\t\u016e\u0004\u016f\t\u016f\u0004", - "\u0170\t\u0170\u0004\u0171\t\u0171\u0004\u0172\t\u0172\u0004\u0173\t", - "\u0173\u0004\u0174\t\u0174\u0004\u0175\t\u0175\u0004\u0176\t\u0176\u0004", - "\u0177\t\u0177\u0004\u0178\t\u0178\u0004\u0179\t\u0179\u0004\u017a\t", - "\u017a\u0004\u017b\t\u017b\u0004\u017c\t\u017c\u0004\u017d\t\u017d\u0004", - "\u017e\t\u017e\u0004\u017f\t\u017f\u0004\u0180\t\u0180\u0004\u0181\t", - "\u0181\u0004\u0182\t\u0182\u0004\u0183\t\u0183\u0004\u0184\t\u0184\u0004", - "\u0185\t\u0185\u0004\u0186\t\u0186\u0004\u0187\t\u0187\u0004\u0188\t", - "\u0188\u0004\u0189\t\u0189\u0004\u018a\t\u018a\u0004\u018b\t\u018b\u0004", - "\u018c\t\u018c\u0004\u018d\t\u018d\u0004\u018e\t\u018e\u0004\u018f\t", - "\u018f\u0004\u0190\t\u0190\u0004\u0191\t\u0191\u0004\u0192\t\u0192\u0004", - "\u0193\t\u0193\u0004\u0194\t\u0194\u0004\u0195\t\u0195\u0003\u0002\u0003", - "\u0002\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0004\u0003\u0004\u0003", - "\u0004\u0003\u0004\u0003\u0005\u0003\u0005\u0003\u0005\u0003\u0006\u0003", - "\u0006\u0003\u0007\u0003\u0007\u0003\u0007\u0003\b\u0003\b\u0003\t\u0003", - "\t\u0003\t\u0003\n\u0003\n\u0003\u000b\u0003\u000b\u0003\f\u0003\f\u0003", - "\r\u0003\r\u0003\u000e\u0003\u000e\u0003\u000f\u0003\u000f\u0003\u0010", - "\u0003\u0010\u0003\u0011\u0003\u0011\u0003\u0011\u0003\u0012\u0003\u0012", - "\u0003\u0012\u0003\u0013\u0003\u0013\u0003\u0013\u0003\u0014\u0003\u0014", - "\u0003\u0015\u0003\u0015\u0003\u0016\u0003\u0016\u0003\u0016\u0003\u0017", - "\u0003\u0017\u0003\u0018\u0003\u0018\u0003\u0019\u0003\u0019\u0003\u001a", - "\u0003\u001a\u0003\u001b\u0003\u001b\u0003\u001c\u0003\u001c\u0003\u001d", - "\u0003\u001d\u0003\u001e\u0003\u001e\u0003\u001f\u0003\u001f\u0003 ", - "\u0003 \u0003!\u0003!\u0003\"\u0003\"\u0003#\u0003#\u0003#\u0003$\u0003", - "$\u0003$\u0003$\u0003%\u0003%\u0003&\u0003&\u0003&\u0003\'\u0003\'\u0003", - "\'\u0003(\u0003(\u0003(\u0003)\u0003)\u0003*\u0003*\u0003*\u0003+\u0003", - "+\u0003,\u0003,\u0003-\u0003-\u0003.\u0003.\u0003/\u0003/\u00030\u0003", - "0\u00031\u00031\u00032\u00032\u00033\u00033\u00034\u00034\u00035\u0003", - "5\u00036\u00036\u00037\u00037\u00038\u00038\u00039\u00039\u0003:\u0003", - ":\u0003;\u0003;\u0003<\u0003<\u0003=\u0003=\u0003>\u0003>\u0003?\u0003", - "?\u0003@\u0003@\u0003A\u0003A\u0003B\u0003B\u0003C\u0003C\u0003D\u0003", - "D\u0003E\u0003E\u0003F\u0006F\u03c6\nF\rF\u000eF\u03c7\u0003G\u0003", - "G\u0003H\u0003H\u0003H\u0003H\u0006H\u03d0\nH\rH\u000eH\u03d1\u0003", - "H\u0003H\u0003H\u0003H\u0006H\u03d8\nH\rH\u000eH\u03d9\u0003H\u0003", - "H\u0005H\u03de\nH\u0003I\u0003I\u0003I\u0003I\u0006I\u03e4\nI\rI\u000e", - "I\u03e5\u0003I\u0003I\u0003I\u0003I\u0006I\u03ec\nI\rI\u000eI\u03ed", - "\u0003I\u0005I\u03f1\nI\u0003J\u0003J\u0003K\u0005K\u03f6\nK\u0003K", - "\u0003K\u0003K\u0003L\u0005L\u03fc\nL\u0003L\u0005L\u03ff\nL\u0003L", - "\u0003L\u0003L\u0003L\u0005L\u0405\nL\u0003L\u0003L\u0003M\u0003M\u0003", - "M\u0003M\u0003M\u0003M\u0003M\u0003M\u0003N\u0003N\u0003N\u0003N\u0003", - "N\u0003N\u0003N\u0003N\u0003N\u0003O\u0003O\u0003O\u0003O\u0003O\u0003", - "O\u0003O\u0003O\u0003O\u0003O\u0003P\u0003P\u0003P\u0003P\u0003P\u0003", - "P\u0003P\u0003P\u0003Q\u0003Q\u0003Q\u0003Q\u0003Q\u0003Q\u0003Q\u0003", - "Q\u0003Q\u0003Q\u0003Q\u0003Q\u0005Q\u0438\nQ\u0003R\u0003R\u0003R\u0003", - "R\u0003R\u0003R\u0003R\u0003S\u0003S\u0003S\u0003S\u0003S\u0003S\u0003", - "S\u0003T\u0003T\u0003T\u0003T\u0003T\u0003T\u0003T\u0003U\u0003U\u0003", - "U\u0003U\u0003U\u0003V\u0003V\u0003V\u0003V\u0003W\u0003W\u0003W\u0003", - "W\u0003W\u0003X\u0003X\u0003X\u0003X\u0003X\u0003X\u0003Y\u0003Y\u0003", - "Y\u0003Y\u0003Y\u0003Y\u0003Y\u0003Y\u0003Z\u0003Z\u0003Z\u0003Z\u0003", - "Z\u0003[\u0003[\u0003[\u0003[\u0003[\u0003[\u0003[\u0003[\u0003\\\u0003", - "\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003]\u0003]\u0003]\u0003]\u0003", - "]\u0003]\u0003]\u0003^\u0003^\u0003^\u0003^\u0003_\u0003_\u0003_\u0003", - "_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003`\u0003`\u0003`\u0003`\u0003", - "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", - "a\u0003a\u0003a\u0003a\u0003a\u0003a\u0003a\u0003a\u0003a\u0003a\u0003", - "a\u0003a\u0003a\u0003a\u0003b\u0003b\u0003b\u0003b\u0003b\u0003b\u0003", - "b\u0003b\u0003b\u0003b\u0003b\u0003b\u0003b\u0003b\u0003b\u0003b\u0003", - "b\u0003c\u0003c\u0003c\u0003c\u0003c\u0003c\u0003c\u0003c\u0003c\u0003", - "c\u0003c\u0003c\u0003c\u0003c\u0003c\u0003d\u0003d\u0003d\u0003d\u0003", - "d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003", - "d\u0003d\u0003d\u0003d\u0003e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003", - "e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003", - "e\u0003e\u0003e\u0003e\u0003f\u0003f\u0003f\u0003f\u0003f\u0003f\u0003", - "g\u0003g\u0003g\u0003g\u0003g\u0003g\u0003g\u0003h\u0003h\u0003h\u0003", - "h\u0003h\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003", - "j\u0003j\u0003j\u0003j\u0003j\u0003j\u0003j\u0003j\u0003j\u0003k\u0003", - "k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003k\u0003l\u0003", - "l\u0003l\u0003l\u0003l\u0003l\u0003l\u0003l\u0003m\u0003m\u0003m\u0003", - "m\u0003m\u0003m\u0003m\u0003n\u0003n\u0003n\u0003n\u0003n\u0003n\u0003", - "n\u0003o\u0003o\u0003o\u0003p\u0003p\u0003p\u0003p\u0003p\u0003p\u0003", - "p\u0003p\u0003p\u0003p\u0003q\u0003q\u0003q\u0003r\u0003r\u0003r\u0003", - "r\u0003r\u0003s\u0003s\u0003s\u0003s\u0003s\u0003s\u0003t\u0003t\u0003", - "t\u0003t\u0003t\u0003t\u0003t\u0003u\u0003u\u0003u\u0003u\u0003u\u0003", - "u\u0003u\u0003u\u0003u\u0003u\u0003v\u0003v\u0003v\u0003v\u0003v\u0003", - "v\u0003v\u0003v\u0003v\u0003v\u0003w\u0003w\u0003w\u0003w\u0003w\u0003", - "w\u0003w\u0003w\u0003w\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003", - "x\u0003x\u0003y\u0003y\u0003y\u0003y\u0003z\u0003z\u0003z\u0003z\u0003", - "z\u0003z\u0003z\u0003z\u0003{\u0003{\u0003{\u0003{\u0003|\u0003|\u0003", - "|\u0003|\u0003|\u0003|\u0003|\u0003|\u0003|\u0003|\u0003}\u0003}\u0003", - "}\u0003}\u0003}\u0003}\u0003}\u0003}\u0003~\u0003~\u0003~\u0003~\u0003", - "~\u0003~\u0003\u007f\u0003\u007f\u0003\u007f\u0003\u007f\u0003\u007f", - "\u0003\u0080\u0003\u0080\u0003\u0080\u0003\u0081\u0003\u0081\u0003\u0081", - "\u0003\u0081\u0003\u0081\u0003\u0081\u0003\u0081\u0003\u0082\u0003\u0082", - "\u0003\u0082\u0003\u0082\u0003\u0082\u0003\u0083\u0003\u0083\u0003\u0083", - "\u0003\u0083\u0003\u0083\u0003\u0083\u0003\u0083\u0003\u0083\u0003\u0084", - "\u0003\u0084\u0003\u0084\u0003\u0084\u0003\u0084\u0003\u0084\u0003\u0084", - "\u0003\u0084\u0003\u0084\u0003\u0084\u0003\u0085\u0003\u0085\u0003\u0085", - "\u0003\u0085\u0003\u0085\u0003\u0085\u0003\u0085\u0003\u0086\u0003\u0086", - "\u0003\u0086\u0003\u0086\u0003\u0086\u0003\u0087\u0003\u0087\u0003\u0087", - "\u0003\u0087\u0003\u0087\u0003\u0087\u0003\u0088\u0003\u0088\u0003\u0088", - "\u0003\u0088\u0003\u0089\u0003\u0089\u0003\u0089\u0003\u0089\u0003\u0089", - "\u0003\u008a\u0003\u008a\u0003\u008a\u0003\u008a\u0003\u008a\u0003\u008b", - "\u0003\u008b\u0003\u008b\u0003\u008b\u0003\u008b\u0003\u008c\u0003\u008c", - "\u0003\u008c\u0003\u008c\u0003\u008c\u0003\u008c\u0003\u008c\u0003\u008d", - "\u0003\u008d\u0003\u008d\u0003\u008d\u0003\u008d\u0003\u008d\u0003\u008e", - "\u0003\u008e\u0003\u008e\u0003\u008e\u0003\u008e\u0003\u008e\u0003\u008e", - "\u0003\u008e\u0003\u008e\u0003\u008e\u0003\u008e\u0003\u008e\u0003\u008e", - "\u0003\u008f\u0003\u008f\u0003\u008f\u0003\u008f\u0003\u008f\u0003\u008f", - "\u0003\u008f\u0003\u008f\u0003\u008f\u0003\u008f\u0003\u0090\u0003\u0090", - "\u0003\u0090\u0003\u0090\u0003\u0090\u0003\u0090\u0003\u0090\u0003\u0090", - "\u0003\u0090\u0003\u0090\u0003\u0090\u0003\u0090\u0003\u0090\u0003\u0090", - "\u0003\u0090\u0003\u0090\u0003\u0090\u0003\u0090\u0003\u0090\u0003\u0091", - "\u0003\u0091\u0003\u0091\u0003\u0091\u0003\u0092\u0003\u0092\u0003\u0092", - "\u0003\u0093\u0003\u0093\u0003\u0093\u0003\u0093\u0003\u0093\u0003\u0094", - "\u0003\u0094\u0003\u0094\u0003\u0095\u0003\u0095\u0003\u0095\u0003\u0095", - "\u0003\u0095\u0003\u0095\u0003\u0096\u0003\u0096\u0003\u0096\u0003\u0096", - "\u0003\u0096\u0003\u0097\u0003\u0097\u0003\u0097\u0003\u0097\u0003\u0097", - "\u0003\u0097\u0003\u0097\u0003\u0098\u0003\u0098\u0003\u0098\u0003\u0098", - "\u0003\u0098\u0003\u0099\u0003\u0099\u0003\u0099\u0003\u0099\u0003\u0099", - "\u0003\u0099\u0003\u0099\u0003\u009a\u0003\u009a\u0003\u009a\u0003\u009a", - "\u0003\u009a\u0003\u009a\u0003\u009a\u0003\u009b\u0003\u009b\u0003\u009b", - "\u0003\u009b\u0003\u009b\u0003\u009b\u0003\u009c\u0003\u009c\u0003\u009c", - "\u0003\u009d\u0003\u009d\u0003\u009d\u0003\u009e\u0003\u009e\u0003\u009e", - "\u0003\u009e\u0003\u009e\u0003\u009e\u0003\u009f\u0003\u009f\u0003\u009f", - "\u0003\u009f\u0003\u009f\u0003\u009f\u0003\u009f\u0003\u009f\u0003\u00a0", - "\u0003\u00a0\u0003\u00a0\u0003\u00a0\u0003\u00a0\u0003\u00a0\u0003\u00a1", - "\u0003\u00a1\u0003\u00a1\u0003\u00a1\u0003\u00a1\u0003\u00a2\u0003\u00a2", - "\u0003\u00a2\u0003\u00a2\u0003\u00a2\u0003\u00a3\u0003\u00a3\u0003\u00a3", - "\u0003\u00a3\u0003\u00a3\u0003\u00a3\u0003\u00a4\u0003\u00a4\u0003\u00a4", - "\u0003\u00a4\u0003\u00a4\u0003\u00a4\u0003\u00a5\u0003\u00a5\u0003\u00a5", - "\u0003\u00a5\u0003\u00a5\u0003\u00a5\u0003\u00a6\u0003\u00a6\u0003\u00a6", - "\u0003\u00a6\u0003\u00a6\u0003\u00a6\u0003\u00a6\u0003\u00a6\u0003\u00a7", - "\u0003\u00a7\u0003\u00a7\u0003\u00a7\u0003\u00a7\u0003\u00a7\u0003\u00a7", - "\u0003\u00a7\u0003\u00a7\u0003\u00a7\u0003\u00a7\u0003\u00a8\u0003\u00a8", - "\u0003\u00a8\u0003\u00a8\u0003\u00a8\u0003\u00a8\u0003\u00a8\u0003\u00a8", - "\u0003\u00a9\u0003\u00a9\u0003\u00a9\u0003\u00a9\u0003\u00a9\u0003\u00a9", - "\u0003\u00a9\u0003\u00a9\u0003\u00a9\u0003\u00a9\u0003\u00a9\u0003\u00aa", - "\u0003\u00aa\u0003\u00aa\u0003\u00aa\u0003\u00aa\u0003\u00aa\u0003\u00aa", - "\u0003\u00ab\u0003\u00ab\u0003\u00ab\u0003\u00ab\u0003\u00ab\u0003\u00ac", - "\u0003\u00ac\u0003\u00ac\u0003\u00ac\u0003\u00ac\u0003\u00ac\u0003\u00ac", - "\u0003\u00ad\u0003\u00ad\u0003\u00ad\u0003\u00ad\u0003\u00ad\u0003\u00ad", - "\u0003\u00ae\u0003\u00ae\u0003\u00ae\u0003\u00ae\u0003\u00ae\u0003\u00ae", - "\u0003\u00af\u0003\u00af\u0003\u00af\u0003\u00af\u0003\u00af\u0003\u00b0", - "\u0003\u00b0\u0003\u00b0\u0003\u00b0\u0003\u00b1\u0003\u00b1\u0003\u00b1", - "\u0003\u00b1\u0003\u00b1\u0003\u00b1\u0003\u00b2\u0003\u00b2\u0003\u00b2", - "\u0003\u00b2\u0003\u00b2\u0003\u00b2\u0003\u00b2\u0003\u00b3\u0003\u00b3", - "\u0003\u00b3\u0003\u00b3\u0003\u00b4\u0003\u00b4\u0003\u00b4\u0003\u00b4", - "\u0003\u00b4\u0003\u00b4\u0003\u00b5\u0003\u00b5\u0003\u00b5\u0003\u00b5", - "\u0003\u00b5\u0003\u00b5\u0003\u00b5\u0003\u00b5\u0003\u00b6\u0003\u00b6", - "\u0003\u00b6\u0003\u00b7\u0003\u00b7\u0003\u00b7\u0003\u00b7\u0003\u00b7", - "\u0003\u00b8\u0003\u00b8\u0003\u00b8\u0003\u00b8\u0003\u00b8\u0003\u00b8", - "\u0003\u00b9\u0003\u00b9\u0003\u00b9\u0003\u00b9\u0003\u00b9\u0003\u00b9", - "\u0003\u00b9\u0003\u00b9\u0003\u00ba\u0003\u00ba\u0003\u00ba\u0003\u00ba", - "\u0003\u00bb\u0003\u00bb\u0003\u00bb\u0003\u00bb\u0003\u00bc\u0003\u00bc", - "\u0003\u00bc\u0003\u00bd\u0003\u00bd\u0003\u00bd\u0003\u00bd\u0003\u00be", - "\u0003\u00be\u0003\u00be\u0003\u00be\u0003\u00be\u0003\u00be\u0003\u00be", - "\u0003\u00bf\u0003\u00bf\u0003\u00bf\u0003\u00bf\u0003\u00bf\u0003\u00bf", - "\u0003\u00bf\u0003\u00c0\u0003\u00c0\u0003\u00c0\u0003\u00c0\u0003\u00c0", - "\u0003\u00c1\u0003\u00c1\u0003\u00c1\u0003\u00c1\u0003\u00c1\u0003\u00c1", - "\u0003\u00c1\u0003\u00c2\u0003\u00c2\u0003\u00c2\u0003\u00c2\u0003\u00c2", - "\u0003\u00c2\u0003\u00c2\u0003\u00c3\u0003\u00c3\u0003\u00c3\u0003\u00c3", - "\u0003\u00c4\u0003\u00c4\u0003\u00c4\u0003\u00c4\u0003\u00c5\u0003\u00c5", - "\u0003\u00c5\u0003\u00c5\u0003\u00c5\u0003\u00c5\u0003\u00c6\u0003\u00c6", - "\u0003\u00c6\u0003\u00c6\u0003\u00c6\u0003\u00c6\u0003\u00c6\u0003\u00c6", - "\u0003\u00c7\u0003\u00c7\u0003\u00c7\u0003\u00c7\u0003\u00c7\u0003\u00c7", - "\u0003\u00c7\u0003\u00c8\u0003\u00c8\u0003\u00c8\u0003\u00c8\u0003\u00c8", - "\u0003\u00c9\u0003\u00c9\u0003\u00c9\u0003\u00c9\u0003\u00c9\u0003\u00c9", - "\u0003\u00ca\u0003\u00ca\u0003\u00ca\u0003\u00ca\u0003\u00ca\u0003\u00cb", - "\u0003\u00cb\u0003\u00cb\u0003\u00cb\u0003\u00cc\u0003\u00cc\u0003\u00cc", - "\u0003\u00cc\u0003\u00cc\u0003\u00cc\u0003\u00cc\u0003\u00cc\u0003\u00cd", - "\u0003\u00cd\u0003\u00cd\u0003\u00cd\u0003\u00cd\u0003\u00cd\u0003\u00cd", - "\u0003\u00cd\u0003\u00ce\u0003\u00ce\u0003\u00ce\u0003\u00ce\u0003\u00cf", - "\u0003\u00cf\u0003\u00cf\u0003\u00cf\u0003\u00cf\u0003\u00cf\u0003\u00cf", - "\u0003\u00cf\u0003\u00d0\u0003\u00d0\u0003\u00d0\u0003\u00d0\u0003\u00d0", - "\u0003\u00d0\u0003\u00d0\u0003\u00d1\u0003\u00d1\u0003\u00d1\u0003\u00d1", - "\u0003\u00d1\u0003\u00d1\u0003\u00d1\u0003\u00d1\u0003\u00d2\u0003\u00d2", - "\u0003\u00d2\u0003\u00d2\u0003\u00d2\u0003\u00d2\u0003\u00d3\u0003\u00d3", - "\u0003\u00d3\u0003\u00d3\u0003\u00d4\u0003\u00d4\u0003\u00d4\u0003\u00d4", - "\u0003\u00d5\u0003\u00d5\u0003\u00d5\u0003\u00d5\u0003\u00d6\u0003\u00d6", - "\u0003\u00d6\u0003\u00d6\u0003\u00d6\u0003\u00d6\u0003\u00d6\u0003\u00d6", - "\u0003\u00d6\u0003\u00d7\u0003\u00d7\u0003\u00d7\u0003\u00d7\u0003\u00d7", - "\u0003\u00d7\u0003\u00d7\u0003\u00d7\u0003\u00d7\u0003\u00d7\u0003\u00d7", - "\u0003\u00d7\u0003\u00d8\u0003\u00d8\u0003\u00d8\u0003\u00d8\u0003\u00d8", - "\u0003\u00d8\u0003\u00d8\u0003\u00d8\u0003\u00d8\u0003\u00d9\u0003\u00d9", - "\u0003\u00d9\u0003\u00d9\u0003\u00da\u0003\u00da\u0003\u00da\u0003\u00da", - "\u0003\u00da\u0003\u00da\u0003\u00da\u0003\u00da\u0003\u00da\u0003\u00da", - "\u0003\u00da\u0003\u00da\u0003\u00da\u0003\u00db\u0003\u00db\u0003\u00db", - "\u0003\u00db\u0003\u00db\u0003\u00db\u0003\u00db\u0003\u00db\u0003\u00db", - "\u0003\u00db\u0003\u00dc\u0003\u00dc\u0003\u00dc\u0003\u00dc\u0003\u00dc", - "\u0003\u00dc\u0003\u00dc\u0003\u00dc\u0003\u00dc\u0003\u00dd\u0003\u00dd", - "\u0003\u00dd\u0003\u00dd\u0003\u00dd\u0003\u00dd\u0003\u00dd\u0003\u00dd", - "\u0003\u00dd\u0003\u00dd\u0003\u00dd\u0003\u00de\u0003\u00de\u0003\u00de", - "\u0003\u00de\u0003\u00de\u0003\u00df\u0003\u00df\u0003\u00df\u0003\u00df", - "\u0003\u00df\u0003\u00df\u0003\u00df\u0003\u00df\u0003\u00df\u0003\u00df", - "\u0003\u00df\u0003\u00e0\u0003\u00e0\u0003\u00e0\u0003\u00e0\u0003\u00e0", - "\u0003\u00e0\u0003\u00e0\u0003\u00e0\u0003\u00e0\u0003\u00e0\u0003\u00e1", - "\u0003\u00e1\u0003\u00e1\u0003\u00e1\u0003\u00e1\u0003\u00e1\u0003\u00e1", - "\u0003\u00e1\u0003\u00e1\u0003\u00e1\u0003\u00e1\u0003\u00e1\u0003\u00e1", - "\u0003\u00e2\u0003\u00e2\u0003\u00e2\u0003\u00e2\u0003\u00e2\u0003\u00e2", - "\u0003\u00e3\u0003\u00e3\u0003\u00e3\u0003\u00e3\u0003\u00e3\u0003\u00e4", - "\u0003\u00e4\u0003\u00e4\u0003\u00e4\u0003\u00e5\u0003\u00e5\u0003\u00e5", - "\u0003\u00e5\u0003\u00e5\u0003\u00e5\u0003\u00e5\u0003\u00e5\u0003\u00e5", - "\u0003\u00e5\u0003\u00e5\u0003\u00e5\u0003\u00e6\u0003\u00e6\u0003\u00e6", - "\u0003\u00e6\u0003\u00e6\u0003\u00e6\u0003\u00e6\u0003\u00e6\u0003\u00e6", - "\u0003\u00e6\u0003\u00e6\u0003\u00e7\u0003\u00e7\u0003\u00e7\u0003\u00e7", - "\u0003\u00e7\u0003\u00e7\u0003\u00e7\u0003\u00e7\u0003\u00e7\u0003\u00e7", - "\u0003\u00e8\u0003\u00e8\u0003\u00e8\u0003\u00e8\u0003\u00e8\u0003\u00e8", - "\u0003\u00e9\u0003\u00e9\u0003\u00e9\u0003\u00e9\u0003\u00e9\u0003\u00ea", - "\u0003\u00ea\u0003\u00ea\u0003\u00ea\u0003\u00ea\u0003\u00eb\u0003\u00eb", - "\u0003\u00eb\u0003\u00eb\u0003\u00eb\u0003\u00eb\u0003\u00eb\u0003\u00eb", - "\u0003\u00ec\u0003\u00ec\u0003\u00ec\u0003\u00ec\u0003\u00ec\u0003\u00ec", - "\u0003\u00ed\u0003\u00ed\u0003\u00ed\u0003\u00ed\u0003\u00ed\u0003\u00ed", - "\u0003\u00ed\u0003\u00ed\u0003\u00ed\u0003\u00ed\u0003\u00ed\u0003\u00ed", - "\u0003\u00ed\u0003\u00ed\u0003\u00ee\u0003\u00ee\u0003\u00ee\u0003\u00ee", - "\u0003\u00ee\u0003\u00ee\u0003\u00ee\u0003\u00ee\u0003\u00ee\u0003\u00ee", - "\u0003\u00ee\u0003\u00ee\u0003\u00ee\u0003\u00ee\u0003\u00ee\u0003\u00ef", - "\u0003\u00ef\u0003\u00ef\u0003\u00ef\u0003\u00ef\u0003\u00ef\u0003\u00ef", - "\u0003\u00ef\u0003\u00f0\u0003\u00f0\u0003\u00f0\u0003\u00f0\u0003\u00f0", - "\u0003\u00f0\u0003\u00f0\u0003\u00f0\u0003\u00f0\u0003\u00f1\u0003\u00f1", - "\u0003\u00f1\u0003\u00f1\u0003\u00f1\u0003\u00f1\u0003\u00f2\u0003\u00f2", - "\u0003\u00f2\u0003\u00f2\u0003\u00f2\u0003\u00f2\u0003\u00f2\u0003\u00f2", - "\u0003\u00f2\u0003\u00f2\u0003\u00f3\u0003\u00f3\u0003\u00f3\u0003\u00f3", - "\u0003\u00f3\u0003\u00f3\u0003\u00f3\u0003\u00f3\u0003\u00f3\u0003\u00f3", - "\u0003\u00f3\u0003\u00f3\u0003\u00f3\u0003\u00f3\u0003\u00f3\u0005\u00f3", - "\u08c8\n\u00f3\u0003\u00f4\u0003\u00f4\u0003\u00f4\u0003\u00f4\u0003", - "\u00f4\u0003\u00f4\u0003\u00f4\u0003\u00f4\u0003\u00f4\u0003\u00f4\u0003", - "\u00f4\u0003\u00f4\u0003\u00f4\u0003\u00f5\u0003\u00f5\u0003\u00f5\u0003", - "\u00f5\u0003\u00f5\u0003\u00f6\u0003\u00f6\u0003\u00f6\u0003\u00f6\u0003", - "\u00f6\u0003\u00f6\u0003\u00f6\u0003\u00f7\u0003\u00f7\u0003\u00f7\u0003", - "\u00f7\u0003\u00f7\u0003\u00f8\u0003\u00f8\u0003\u00f8\u0003\u00f8\u0003", - "\u00f8\u0003\u00f8\u0003\u00f8\u0003\u00f8\u0003\u00f8\u0003\u00f8\u0003", - "\u00f9\u0003\u00f9\u0003\u00f9\u0003\u00f9\u0003\u00f9\u0003\u00f9\u0003", - "\u00f9\u0003\u00f9\u0003\u00f9\u0003\u00f9\u0003\u00f9\u0003\u00f9\u0003", - "\u00f9\u0003\u00f9\u0003\u00f9\u0003\u00f9\u0003\u00f9\u0003\u00f9\u0003", - "\u00f9\u0003\u00f9\u0003\u00f9\u0003\u00f9\u0003\u00f9\u0003\u00f9\u0003", - "\u00f9\u0003\u00f9\u0003\u00f9\u0005\u00f9\u090d\n\u00f9\u0003\u00fa", - "\u0003\u00fa\u0003\u00fa\u0003\u00fa\u0003\u00fa\u0003\u00fa\u0003\u00fa", - "\u0003\u00fa\u0003\u00fa\u0003\u00fa\u0003\u00fa\u0003\u00fa\u0003\u00fa", - "\u0003\u00fa\u0003\u00fa\u0003\u00fa\u0003\u00fa\u0003\u00fa\u0003\u00fa", - "\u0003\u00fa\u0003\u00fa\u0003\u00fa\u0003\u00fa\u0003\u00fa\u0003\u00fa", - "\u0003\u00fa\u0003\u00fa\u0005\u00fa\u092a\n\u00fa\u0003\u00fb\u0003", - "\u00fb\u0003\u00fb\u0003\u00fb\u0003\u00fb\u0003\u00fc\u0003\u00fc\u0003", - "\u00fc\u0003\u00fc\u0003\u00fc\u0003\u00fd\u0003\u00fd\u0003\u00fd\u0003", - "\u00fd\u0003\u00fd\u0003\u00fd\u0003\u00fd\u0003\u00fd\u0003\u00fe\u0003", - "\u00fe\u0003\u00fe\u0003\u00fe\u0003\u00fe\u0003\u00fe\u0003\u00fe\u0003", - "\u00fe\u0003\u00ff\u0003\u00ff\u0003\u00ff\u0003\u00ff\u0003\u00ff\u0003", - "\u00ff\u0003\u00ff\u0003\u00ff\u0003\u0100\u0003\u0100\u0003\u0100\u0003", - "\u0100\u0003\u0100\u0003\u0100\u0003\u0100\u0003\u0100\u0003\u0101\u0003", - "\u0101\u0003\u0101\u0003\u0101\u0003\u0101\u0003\u0101\u0003\u0101\u0003", - "\u0101\u0003\u0101\u0003\u0102\u0003\u0102\u0003\u0102\u0003\u0102\u0003", - "\u0102\u0003\u0102\u0003\u0102\u0003\u0102\u0003\u0102\u0003\u0103\u0003", - "\u0103\u0003\u0103\u0003\u0103\u0003\u0103\u0003\u0103\u0003\u0103\u0003", - "\u0103\u0003\u0104\u0003\u0104\u0003\u0104\u0003\u0104\u0003\u0104\u0003", - "\u0104\u0003\u0104\u0003\u0104\u0003\u0104\u0003\u0104\u0003\u0104\u0003", - "\u0105\u0003\u0105\u0003\u0105\u0003\u0105\u0003\u0106\u0003\u0106\u0003", - "\u0106\u0003\u0106\u0003\u0106\u0003\u0106\u0003\u0106\u0003\u0106\u0003", - "\u0106\u0003\u0107\u0003\u0107\u0003\u0107\u0003\u0107\u0003\u0107\u0003", - "\u0107\u0003\u0107\u0003\u0107\u0003\u0108\u0003\u0108\u0003\u0108\u0003", - "\u0108\u0003\u0108\u0003\u0108\u0003\u0108\u0003\u0108\u0003\u0108\u0003", - "\u0108\u0003\u0108\u0003\u0108\u0003\u0108\u0003\u0108\u0003\u0109\u0003", - "\u0109\u0003\u0109\u0003\u0109\u0003\u0109\u0003\u0109\u0003\u0109\u0003", - "\u0109\u0003\u0109\u0003\u0109\u0003\u0109\u0003\u0109\u0003\u0109\u0003", - "\u0109\u0003\u0109\u0003\u010a\u0003\u010a\u0003\u010a\u0003\u010a\u0003", - "\u010a\u0003\u010a\u0003\u010a\u0003\u010a\u0003\u010a\u0003\u010b\u0003", - "\u010b\u0003\u010b\u0003\u010b\u0003\u010b\u0003\u010b\u0003\u010b\u0003", - "\u010b\u0003\u010b\u0003\u010c\u0003\u010c\u0003\u010c\u0003\u010c\u0003", - "\u010c\u0003\u010c\u0003\u010c\u0003\u010c\u0003\u010c\u0003\u010c\u0003", - "\u010c\u0003\u010c\u0003\u010c\u0003\u010c\u0003\u010d\u0003\u010d\u0003", - "\u010d\u0003\u010d\u0003\u010d\u0003\u010d\u0003\u010e\u0003\u010e\u0003", - "\u010e\u0003\u010e\u0003\u010e\u0003\u010e\u0003\u010e\u0003\u010e\u0003", - "\u010f\u0003\u010f\u0003\u010f\u0003\u010f\u0003\u010f\u0003\u010f\u0003", - "\u010f\u0003\u010f\u0003\u010f\u0003\u0110\u0003\u0110\u0003\u0110\u0003", - "\u0110\u0003\u0110\u0003\u0110\u0003\u0110\u0003\u0110\u0003\u0110\u0003", - "\u0110\u0003\u0111\u0003\u0111\u0003\u0111\u0003\u0111\u0003\u0111\u0003", - "\u0111\u0003\u0111\u0003\u0111\u0003\u0111\u0003\u0112\u0003\u0112\u0003", - "\u0112\u0003\u0113\u0003\u0113\u0003\u0113\u0003\u0113\u0003\u0113\u0003", - "\u0113\u0003\u0113\u0003\u0114\u0003\u0114\u0003\u0114\u0003\u0114\u0003", - "\u0114\u0003\u0114\u0003\u0114\u0003\u0114\u0003\u0114\u0003\u0114\u0003", - "\u0114\u0003\u0114\u0003\u0115\u0003\u0115\u0003\u0115\u0003\u0115\u0003", - "\u0115\u0003\u0115\u0003\u0115\u0003\u0115\u0003\u0115\u0003\u0115\u0003", - "\u0115\u0003\u0115\u0003\u0115\u0003\u0116\u0003\u0116\u0003\u0116\u0003", - "\u0116\u0003\u0116\u0003\u0116\u0003\u0116\u0003\u0116\u0003\u0116\u0003", - "\u0117\u0003\u0117\u0003\u0117\u0003\u0117\u0003\u0117\u0003\u0117\u0003", - "\u0117\u0003\u0118\u0003\u0118\u0003\u0118\u0003\u0118\u0003\u0118\u0003", - "\u0118\u0003\u0118\u0003\u0118\u0003\u0119\u0003\u0119\u0003\u0119\u0003", - "\u0119\u0003\u0119\u0003\u0119\u0003\u0119\u0003\u0119\u0003\u011a\u0003", - "\u011a\u0003\u011a\u0003\u011a\u0003\u011a\u0003\u011a\u0003\u011a\u0003", - "\u011a\u0003\u011a\u0003\u011a\u0003\u011b\u0003\u011b\u0003\u011b\u0003", - "\u011b\u0003\u011b\u0003\u011b\u0003\u011b\u0003\u011b\u0003\u011b\u0003", - "\u011c\u0003\u011c\u0003\u011c\u0003\u011c\u0003\u011c\u0003\u011c\u0003", - "\u011c\u0003\u011c\u0003\u011c\u0003\u011c\u0003\u011c\u0003\u011c\u0003", - "\u011c\u0003\u011c\u0003\u011d\u0003\u011d\u0003\u011d\u0003\u011d\u0003", - "\u011d\u0003\u011d\u0003\u011d\u0003\u011d\u0003\u011d\u0003\u011e\u0003", - "\u011e\u0003\u011e\u0003\u011e\u0003\u011e\u0003\u011e\u0003\u011e\u0003", - "\u011e\u0003\u011e\u0003\u011e\u0003\u011e\u0003\u011e\u0003\u011e\u0003", - "\u011e\u0003\u011e\u0003\u011e\u0003\u011e\u0003\u011e\u0003\u011e\u0003", - "\u011f\u0003\u011f\u0003\u011f\u0003\u011f\u0003\u011f\u0003\u011f\u0003", - "\u011f\u0003\u011f\u0003\u011f\u0003\u011f\u0003\u011f\u0003\u0120\u0003", - "\u0120\u0003\u0120\u0003\u0120\u0003\u0120\u0003\u0120\u0003\u0120\u0003", - "\u0120\u0003\u0120\u0003\u0120\u0003\u0120\u0003\u0120\u0003\u0120\u0003", - "\u0120\u0003\u0120\u0003\u0120\u0003\u0121\u0003\u0121\u0003\u0121\u0003", - "\u0121\u0003\u0121\u0003\u0121\u0003\u0121\u0003\u0121\u0003\u0121\u0003", - "\u0121\u0003\u0121\u0003\u0122\u0003\u0122\u0003\u0122\u0003\u0122\u0003", - "\u0122\u0003\u0122\u0003\u0122\u0003\u0122\u0003\u0122\u0003\u0122\u0003", - "\u0122\u0003\u0122\u0003\u0122\u0003\u0123\u0003\u0123\u0003\u0123\u0003", - "\u0123\u0003\u0123\u0003\u0123\u0003\u0124\u0003\u0124\u0003\u0124\u0003", - "\u0124\u0003\u0124\u0003\u0124\u0003\u0124\u0003\u0124\u0003\u0125\u0003", - "\u0125\u0003\u0125\u0003\u0125\u0003\u0125\u0003\u0125\u0003\u0126\u0003", - "\u0126\u0003\u0126\u0003\u0126\u0003\u0126\u0003\u0126\u0003\u0126\u0003", - "\u0126\u0003\u0126\u0003\u0127\u0003\u0127\u0003\u0127\u0003\u0127\u0003", - "\u0127\u0003\u0128\u0003\u0128\u0003\u0128\u0003\u0128\u0003\u0128\u0003", - "\u0128\u0003\u0128\u0003\u0128\u0003\u0129\u0003\u0129\u0003\u0129\u0003", - "\u0129\u0003\u0129\u0003\u0129\u0003\u0129\u0003\u0129\u0003\u0129\u0003", - "\u012a\u0003\u012a\u0003\u012a\u0003\u012a\u0003\u012a\u0003\u012b\u0003", - "\u012b\u0003\u012b\u0003\u012b\u0003\u012b\u0003\u012b\u0003\u012b\u0003", - "\u012c\u0003\u012c\u0003\u012c\u0003\u012c\u0003\u012c\u0003\u012c\u0003", - "\u012c\u0003\u012c\u0003\u012c\u0003\u012c\u0003\u012d\u0003\u012d\u0003", - "\u012d\u0003\u012d\u0003\u012d\u0003\u012e\u0003\u012e\u0003\u012e\u0003", - "\u012e\u0003\u012e\u0003\u012f\u0003\u012f\u0003\u012f\u0003\u012f\u0003", - "\u012f\u0003\u0130\u0003\u0130\u0003\u0130\u0003\u0130\u0003\u0130\u0003", - "\u0130\u0003\u0130\u0003\u0131\u0003\u0131\u0003\u0131\u0003\u0131\u0003", - "\u0131\u0003\u0131\u0003\u0131\u0003\u0131\u0003\u0131\u0003\u0132\u0003", - "\u0132\u0003\u0132\u0003\u0132\u0003\u0132\u0003\u0132\u0003\u0132\u0003", - "\u0132\u0003\u0133\u0003\u0133\u0003\u0133\u0003\u0133\u0003\u0133\u0003", - "\u0134\u0003\u0134\u0003\u0134\u0003\u0134\u0003\u0134\u0003\u0134\u0003", - "\u0135\u0003\u0135\u0003\u0135\u0003\u0135\u0003\u0135\u0003\u0135\u0003", - "\u0135\u0003\u0136\u0003\u0136\u0003\u0136\u0003\u0136\u0003\u0136\u0003", - "\u0136\u0003\u0136\u0003\u0137\u0003\u0137\u0003\u0137\u0003\u0137\u0003", - "\u0138\u0003\u0138\u0003\u0138\u0003\u0138\u0003\u0138\u0003\u0138\u0003", - "\u0138\u0003\u0138\u0003\u0138\u0003\u0138\u0003\u0138\u0003\u0138\u0003", - "\u0138\u0003\u0138\u0003\u0138\u0003\u0138\u0003\u0138\u0003\u0138\u0003", - "\u0138\u0003\u0139\u0003\u0139\u0003\u0139\u0003\u0139\u0003\u0139\u0003", - "\u0139\u0003\u0139\u0003\u0139\u0003\u0139\u0003\u0139\u0003\u0139\u0003", - "\u0139\u0003\u0139\u0003\u0139\u0003\u0139\u0003\u0139\u0003\u0139\u0003", - "\u0139\u0003\u0139\u0003\u013a\u0003\u013a\u0003\u013a\u0003\u013a\u0003", - "\u013a\u0003\u013a\u0003\u013a\u0003\u013a\u0003\u013a\u0003\u013a\u0003", - "\u013a\u0003\u013a\u0003\u013a\u0003\u013a\u0003\u013b\u0003\u013b\u0003", - "\u013b\u0003\u013b\u0003\u013b\u0003\u013b\u0003\u013b\u0003\u013b\u0003", - "\u013b\u0003\u013b\u0003\u013b\u0003\u013b\u0003\u013b\u0003\u013b\u0003", - "\u013b\u0003\u013b\u0003\u013b\u0003\u013c\u0003\u013c\u0003\u013c\u0003", - "\u013c\u0003\u013c\u0003\u013c\u0003\u013c\u0003\u013c\u0003\u013c\u0003", - "\u013c\u0003\u013c\u0003\u013c\u0003\u013d\u0003\u013d\u0003\u013d\u0003", - "\u013d\u0003\u013d\u0003\u013d\u0003\u013d\u0003\u013d\u0003\u013d\u0003", - "\u013d\u0003\u013d\u0003\u013d\u0003\u013e\u0003\u013e\u0003\u013e\u0003", - "\u013e\u0003\u013e\u0003\u013e\u0003\u013e\u0003\u013e\u0003\u013e\u0003", - "\u013e\u0003\u013e\u0003\u013e\u0003\u013e\u0003\u013e\u0003\u013e\u0003", - "\u013e\u0003\u013f\u0003\u013f\u0003\u013f\u0003\u013f\u0003\u013f\u0003", - "\u013f\u0003\u013f\u0003\u013f\u0003\u013f\u0003\u013f\u0003\u013f\u0003", - "\u0140\u0003\u0140\u0003\u0140\u0003\u0140\u0003\u0140\u0003\u0140\u0003", - "\u0140\u0003\u0140\u0003\u0140\u0003\u0140\u0003\u0140\u0003\u0141\u0003", - "\u0141\u0003\u0141\u0003\u0141\u0003\u0141\u0003\u0141\u0003\u0141\u0003", - "\u0141\u0003\u0141\u0003\u0142\u0003\u0142\u0003\u0142\u0003\u0142\u0003", - "\u0142\u0003\u0142\u0003\u0142\u0003\u0142\u0003\u0142\u0003\u0142\u0003", - "\u0142\u0003\u0143\u0003\u0143\u0003\u0143\u0003\u0143\u0003\u0143\u0003", - "\u0143\u0003\u0144\u0003\u0144\u0003\u0144\u0003\u0144\u0003\u0144\u0003", - "\u0144\u0003\u0145\u0003\u0145\u0003\u0145\u0003\u0145\u0003\u0145\u0003", - "\u0146\u0003\u0146\u0003\u0146\u0003\u0146\u0003\u0146\u0003\u0147\u0003", - "\u0147\u0003\u0147\u0003\u0147\u0003\u0147\u0003\u0147\u0003\u0147\u0003", - "\u0148\u0003\u0148\u0003\u0148\u0003\u0148\u0003\u0148\u0003\u0148\u0003", - "\u0148\u0003\u0148\u0003\u0148\u0003\u0148\u0003\u0149\u0003\u0149\u0003", - "\u0149\u0003\u0149\u0003\u0149\u0003\u0149\u0003\u0149\u0003\u0149\u0003", - "\u014a\u0003\u014a\u0003\u014a\u0003\u014a\u0003\u014a\u0003\u014a\u0003", - "\u014a\u0003\u014b\u0003\u014b\u0003\u014b\u0003\u014b\u0003\u014b\u0003", - "\u014b\u0003\u014c\u0003\u014c\u0003\u014c\u0003\u014c\u0003\u014d\u0003", - "\u014d\u0003\u014d\u0003\u014d\u0003\u014d\u0003\u014e\u0003\u014e\u0003", - "\u014e\u0003\u014e\u0003\u014e\u0003\u014e\u0003\u014e\u0003\u014e\u0003", - "\u014f\u0003\u014f\u0003\u014f\u0003\u014f\u0003\u014f\u0003\u014f\u0003", - "\u014f\u0003\u014f\u0003\u0150\u0003\u0150\u0003\u0150\u0003\u0150\u0003", - "\u0150\u0003\u0150\u0003\u0150\u0003\u0150\u0003\u0150\u0003\u0151\u0003", - "\u0151\u0003\u0151\u0003\u0151\u0003\u0151\u0003\u0151\u0003\u0151\u0003", - "\u0151\u0003\u0151\u0003\u0152\u0003\u0152\u0003\u0152\u0003\u0152\u0003", - "\u0152\u0003\u0152\u0003\u0153\u0003\u0153\u0003\u0153\u0003\u0153\u0003", - "\u0153\u0003\u0153\u0003\u0153\u0003\u0153\u0003\u0153\u0003\u0153\u0003", - "\u0154\u0003\u0154\u0003\u0154\u0003\u0154\u0003\u0154\u0003\u0154\u0003", - "\u0154\u0003\u0154\u0003\u0154\u0003\u0155\u0003\u0155\u0003\u0155\u0003", - "\u0155\u0003\u0155\u0003\u0156\u0003\u0156\u0003\u0156\u0003\u0156\u0003", - "\u0156\u0003\u0156\u0003\u0156\u0003\u0156\u0003\u0156\u0003\u0156\u0003", - "\u0156\u0003\u0157\u0003\u0157\u0003\u0157\u0003\u0157\u0003\u0157\u0003", - "\u0157\u0003\u0157\u0003\u0157\u0003\u0157\u0003\u0158\u0003\u0158\u0003", - "\u0158\u0003\u0158\u0003\u0158\u0003\u0159\u0003\u0159\u0003\u0159\u0003", - "\u0159\u0003\u0159\u0003\u0159\u0003\u0159\u0003\u0159\u0003\u0159\u0003", - "\u015a\u0003\u015a\u0003\u015a\u0003\u015a\u0003\u015a\u0003\u015b\u0003", - "\u015b\u0003\u015b\u0003\u015b\u0003\u015b\u0003\u015b\u0003\u015b\u0003", - "\u015b\u0003\u015b\u0003\u015b\u0003\u015b\u0003\u015c\u0003\u015c\u0003", - "\u015c\u0003\u015c\u0003\u015c\u0003\u015c\u0003\u015c\u0003\u015c\u0003", - "\u015c\u0003\u015d\u0003\u015d\u0003\u015d\u0003\u015d\u0003\u015d\u0003", - "\u015e\u0003\u015e\u0003\u015e\u0003\u015e\u0003\u015e\u0003\u015e\u0003", - "\u015e\u0003\u015f\u0003\u015f\u0003\u015f\u0003\u015f\u0003\u015f\u0003", - "\u015f\u0003\u015f\u0003\u015f\u0003\u015f\u0003\u0160\u0003\u0160\u0003", - "\u0160\u0003\u0160\u0003\u0160\u0003\u0160\u0003\u0160\u0003\u0160\u0003", - "\u0160\u0003\u0161\u0003\u0161\u0003\u0161\u0003\u0161\u0003\u0161\u0003", - "\u0162\u0003\u0162\u0003\u0162\u0003\u0162\u0003\u0162\u0003\u0162\u0003", - "\u0162\u0003\u0162\u0003\u0163\u0003\u0163\u0003\u0163\u0003\u0163\u0003", - "\u0163\u0003\u0163\u0003\u0163\u0003\u0163\u0003\u0163\u0003\u0163\u0003", - "\u0163\u0003\u0164\u0003\u0164\u0003\u0164\u0003\u0164\u0003\u0164\u0003", - "\u0164\u0003\u0164\u0003\u0164\u0003\u0164\u0003\u0164\u0003\u0164\u0003", - "\u0165\u0003\u0165\u0003\u0165\u0003\u0165\u0003\u0165\u0003\u0165\u0003", - "\u0165\u0003\u0165\u0003\u0165\u0003\u0166\u0003\u0166\u0003\u0166\u0003", - "\u0166\u0003\u0166\u0003\u0166\u0003\u0166\u0003\u0166\u0003\u0167\u0003", - "\u0167\u0003\u0167\u0003\u0167\u0003\u0167\u0003\u0167\u0003\u0168\u0003", - "\u0168\u0003\u0168\u0003\u0168\u0003\u0168\u0003\u0168\u0003\u0168\u0003", - "\u0168\u0003\u0168\u0003\u0169\u0003\u0169\u0003\u0169\u0003\u0169\u0003", - "\u0169\u0003\u0169\u0003\u0169\u0003\u016a\u0003\u016a\u0003\u016a\u0003", - "\u016a\u0003\u016a\u0003\u016a\u0003\u016b\u0003\u016b\u0003\u016b\u0003", - "\u016b\u0003\u016b\u0003\u016b\u0003\u016b\u0003\u016b\u0003\u016c\u0003", - "\u016c\u0003\u016c\u0003\u016c\u0003\u016c\u0003\u016c\u0003\u016c\u0003", - "\u016c\u0003\u016d\u0003\u016d\u0003\u016d\u0003\u016d\u0003\u016d\u0003", - "\u016d\u0003\u016d\u0003\u016e\u0003\u016e\u0003\u016e\u0003\u016e\u0003", - "\u016e\u0003\u016e\u0003\u016e\u0003\u016e\u0003\u016e\u0003\u016e\u0003", - "\u016f\u0003\u016f\u0003\u016f\u0003\u016f\u0003\u016f\u0003\u016f\u0003", - "\u016f\u0003\u0170\u0003\u0170\u0003\u0170\u0003\u0170\u0003\u0170\u0003", - "\u0170\u0003\u0170\u0003\u0171\u0003\u0171\u0003\u0171\u0003\u0171\u0003", - "\u0171\u0003\u0171\u0003\u0171\u0003\u0172\u0003\u0172\u0003\u0172\u0003", - "\u0172\u0003\u0172\u0003\u0172\u0003\u0172\u0003\u0173\u0003\u0173\u0003", - "\u0173\u0003\u0173\u0003\u0173\u0003\u0173\u0003\u0173\u0003\u0174\u0003", - "\u0174\u0003\u0174\u0003\u0174\u0003\u0174\u0003\u0174\u0003\u0174\u0003", - "\u0174\u0003\u0174\u0003\u0174\u0003\u0174\u0003\u0174\u0003\u0174\u0003", - "\u0174\u0003\u0174\u0003\u0174\u0003\u0174\u0003\u0175\u0003\u0175\u0003", - "\u0175\u0003\u0175\u0003\u0175\u0003\u0175\u0003\u0175\u0003\u0175\u0003", - "\u0175\u0003\u0175\u0003\u0175\u0003\u0175\u0003\u0175\u0003\u0175\u0003", - "\u0175\u0003\u0175\u0003\u0175\u0003\u0176\u0003\u0176\u0003\u0176\u0003", - "\u0176\u0003\u0176\u0003\u0176\u0003\u0176\u0003\u0176\u0003\u0176\u0003", - "\u0176\u0003\u0176\u0003\u0176\u0003\u0176\u0003\u0176\u0003\u0176\u0003", - "\u0177\u0003\u0177\u0003\u0177\u0003\u0177\u0003\u0177\u0003\u0177\u0003", - "\u0177\u0003\u0177\u0003\u0177\u0003\u0177\u0003\u0177\u0003\u0177\u0003", - "\u0177\u0003\u0177\u0003\u0178\u0003\u0178\u0003\u0178\u0003\u0178\u0003", - "\u0178\u0003\u0178\u0003\u0178\u0003\u0178\u0003\u0178\u0003\u0178\u0003", - "\u0178\u0003\u0178\u0003\u0178\u0003\u0178\u0003\u0178\u0003\u0179\u0003", - "\u0179\u0003\u0179\u0003\u0179\u0003\u0179\u0003\u0179\u0003\u0179\u0003", - "\u0179\u0003\u0179\u0003\u0179\u0003\u0179\u0003\u0179\u0003\u0179\u0003", - "\u0179\u0003\u0179\u0003\u0179\u0003\u017a\u0003\u017a\u0003\u017a\u0003", - "\u017a\u0003\u017a\u0003\u017a\u0003\u017a\u0003\u017a\u0003\u017a\u0003", - "\u017a\u0003\u017a\u0003\u017a\u0003\u017a\u0003\u017a\u0003\u017a\u0003", - "\u017a\u0003\u017a\u0003\u017a\u0003\u017b\u0003\u017b\u0003\u017b\u0003", - "\u017b\u0003\u017b\u0003\u017b\u0003\u017b\u0003\u017b\u0003\u017b\u0003", - "\u017b\u0003\u017b\u0003\u017b\u0003\u017b\u0003\u017b\u0003\u017b\u0003", - "\u017c\u0003\u017c\u0003\u017c\u0003\u017c\u0003\u017d\u0005\u017d\u0dc4", - "\n\u017d\u0003\u017e\u0003\u017e\u0006\u017e\u0dc8\n\u017e\r\u017e\u000e", - "\u017e\u0dc9\u0003\u017f\u0006\u017f\u0dcd\n\u017f\r\u017f\u000e\u017f", - "\u0dce\u0003\u017f\u0003\u017f\u0003\u017f\u0007\u017f\u0dd4\n\u017f", - "\f\u017f\u000e\u017f\u0dd7\u000b\u017f\u0005\u017f\u0dd9\n\u017f\u0003", - "\u017f\u0006\u017f\u0ddc\n\u017f\r\u017f\u000e\u017f\u0ddd\u0003\u017f", - "\u0003\u017f\u0007\u017f\u0de2\n\u017f\f\u017f\u000e\u017f\u0de5\u000b", - "\u017f\u0003\u017f\u0003\u017f\u0007\u017f\u0de9\n\u017f\f\u017f\u000e", - "\u017f\u0dec\u000b\u017f\u0005\u017f\u0dee\n\u017f\u0003\u0180\u0003", - "\u0180\u0003\u0180\u0003\u0181\u0003\u0181\u0003\u0182\u0003\u0182\u0003", - "\u0183\u0003\u0183\u0003\u0184\u0003\u0184\u0007\u0184\u0dfb\n\u0184", - "\f\u0184\u000e\u0184\u0dfe\u000b\u0184\u0003\u0184\u0003\u0184\u0003", - "\u0185\u0003\u0185\u0007\u0185\u0e04\n\u0185\f\u0185\u000e\u0185\u0e07", - "\u000b\u0185\u0003\u0185\u0003\u0185\u0006\u0185\u0e0b\n\u0185\r\u0185", - "\u000e\u0185\u0e0c\u0003\u0186\u0003\u0186\u0007\u0186\u0e11\n\u0186", - "\f\u0186\u000e\u0186\u0e14\u000b\u0186\u0003\u0186\u0003\u0186\u0006", - "\u0186\u0e18\n\u0186\r\u0186\u000e\u0186\u0e19\u0003\u0187\u0003\u0187", - "\u0007\u0187\u0e1e\n\u0187\f\u0187\u000e\u0187\u0e21\u000b\u0187\u0003", - "\u0187\u0003\u0187\u0006\u0187\u0e25\n\u0187\r\u0187\u000e\u0187\u0e26", - "\u0003\u0188\u0003\u0188\u0003\u0188\u0003\u0188\u0003\u0188\u0003\u0188", - "\u0003\u0188\u0007\u0188\u0e30\n\u0188\f\u0188\u000e\u0188\u0e33\u000b", - "\u0188\u0003\u0188\u0003\u0188\u0003\u0188\u0003\u0188\u0003\u0188\u0003", - "\u0189\u0003\u0189\u0003\u0189\u0003\u0189\u0003\u0189\u0003\u0189\u0003", - "\u018a\u0003\u018a\u0003\u018a\u0003\u018a\u0003\u018a\u0003\u018b\u0003", - "\u018b\u0003\u018b\u0003\u018b\u0003\u018b\u0003\u018b\u0003\u018b\u0003", - "\u018b\u0003\u018b\u0007\u018b\u0e4e\n\u018b\f\u018b\u000e\u018b\u0e51", - "\u000b\u018b\u0003\u018b\u0003\u018b\u0005\u018b\u0e55\n\u018b\u0003", - "\u018b\u0003\u018b\u0003\u018c\u0003\u018c\u0007\u018c\u0e5b\n\u018c", - "\f\u018c\u000e\u018c\u0e5e\u000b\u018c\u0003\u018c\u0003\u018c\u0003", - "\u018d\u0003\u018d\u0003\u018d\u0007\u018d\u0e65\n\u018d\f\u018d\u000e", - "\u018d\u0e68\u000b\u018d\u0003\u018d\u0003\u018d\u0005\u018d\u0e6c\n", - "\u018d\u0003\u018d\u0003\u018d\u0003\u018e\u0003\u018e\u0003\u018e\u0003", - "\u018f\u0003\u018f\u0003\u0190\u0003\u0190\u0003\u0190\u0006\u0190\u0e78", - "\n\u0190\r\u0190\u000e\u0190\u0e79\u0003\u0191\u0003\u0191\u0003\u0191", - "\u0003\u0192\u0003\u0192\u0003\u0192\u0003\u0193\u0003\u0193\u0005\u0193", - "\u0e84\n\u0193\u0003\u0194\u0003\u0194\u0003\u0195\u0003\u0195\b\u0dfc", - "\u0e05\u0e12\u0e1f\u0e31\u0e4f\u0002\u0196\u0003\u0003\u0005\u0004\u0007", - "\u0005\t\u0006\u000b\u0007\r\b\u000f\t\u0011\n\u0013\u000b\u0015\f\u0017", - "\r\u0019\u000e\u001b\u000f\u001d\u0010\u001f\u0011!\u0012#\u0013%\u0014", - "\'\u0015)\u0016+\u0017-\u0018/\u00191\u001a3\u001b5\u001c7\u001d9\u001e", - ";\u001f= ?!A\"C#E$G%I&K\'M(O)Q*S+U\u0002W\u0002Y\u0002[\u0002]\u0002", - "_\u0002a\u0002c\u0002e\u0002g\u0002i\u0002k\u0002m\u0002o\u0002q\u0002", - "s\u0002u\u0002w\u0002y\u0002{\u0002}\u0002\u007f\u0002\u0081\u0002\u0083", - "\u0002\u0085\u0002\u0087\u0002\u0089\u0002\u008b\u0002\u008d\u0002\u008f", - ",\u0091-\u0093.\u0095/\u00970\u00991\u009b2\u009d3\u009f4\u00a15\u00a3", - "6\u00a57\u00a78\u00a99\u00ab:\u00ad;\u00af<\u00b1=\u00b3>\u00b5?\u00b7", - "@\u00b9A\u00bbB\u00bdC\u00bfD\u00c1E\u00c3F\u00c5G\u00c7H\u00c9I\u00cb", - "J\u00cdK\u00cfL\u00d1M\u00d3N\u00d5O\u00d7P\u00d9Q\u00dbR\u00ddS\u00df", - "T\u00e1U\u00e3V\u00e5W\u00e7X\u00e9Y\u00ebZ\u00ed[\u00ef\\\u00f1]\u00f3", - "^\u00f5_\u00f7`\u00f9a\u00fbb\u00fdc\u00ffd\u0101e\u0103f\u0105g\u0107", - "h\u0109i\u010bj\u010dk\u010fl\u0111m\u0113n\u0115o\u0117p\u0119q\u011b", - "r\u011ds\u011ft\u0121u\u0123v\u0125w\u0127x\u0129y\u012bz\u012d{\u012f", - "|\u0131}\u0133~\u0135\u007f\u0137\u0080\u0139\u0081\u013b\u0082\u013d", - "\u0083\u013f\u0084\u0141\u0085\u0143\u0086\u0145\u0087\u0147\u0088\u0149", - "\u0089\u014b\u008a\u014d\u008b\u014f\u008c\u0151\u008d\u0153\u008e\u0155", - "\u008f\u0157\u0090\u0159\u0091\u015b\u0092\u015d\u0093\u015f\u0094\u0161", - "\u0095\u0163\u0096\u0165\u0097\u0167\u0098\u0169\u0099\u016b\u009a\u016d", - "\u009b\u016f\u009c\u0171\u009d\u0173\u009e\u0175\u009f\u0177\u00a0\u0179", - "\u00a1\u017b\u00a2\u017d\u00a3\u017f\u00a4\u0181\u00a5\u0183\u00a6\u0185", - "\u00a7\u0187\u00a8\u0189\u00a9\u018b\u00aa\u018d\u00ab\u018f\u00ac\u0191", - "\u00ad\u0193\u00ae\u0195\u00af\u0197\u00b0\u0199\u00b1\u019b\u00b2\u019d", - "\u00b3\u019f\u00b4\u01a1\u00b5\u01a3\u00b6\u01a5\u00b7\u01a7\u00b8\u01a9", - "\u00b9\u01ab\u00ba\u01ad\u00bb\u01af\u00bc\u01b1\u00bd\u01b3\u00be\u01b5", - "\u00bf\u01b7\u00c0\u01b9\u00c1\u01bb\u00c2\u01bd\u00c3\u01bf\u00c4\u01c1", - "\u00c5\u01c3\u00c6\u01c5\u00c7\u01c7\u00c8\u01c9\u00c9\u01cb\u00ca\u01cd", - "\u00cb\u01cf\u00cc\u01d1\u00cd\u01d3\u00ce\u01d5\u00cf\u01d7\u00d0\u01d9", - "\u00d1\u01db\u00d2\u01dd\u00d3\u01df\u00d4\u01e1\u00d5\u01e3\u00d6\u01e5", - "\u00d7\u01e7\u00d8\u01e9\u00d9\u01eb\u00da\u01ed\u00db\u01ef\u00dc\u01f1", - "\u00dd\u01f3\u00de\u01f5\u00df\u01f7\u00e0\u01f9\u00e1\u01fb\u00e2\u01fd", - "\u00e3\u01ff\u00e4\u0201\u00e5\u0203\u00e6\u0205\u00e7\u0207\u00e8\u0209", - "\u00e9\u020b\u00ea\u020d\u00eb\u020f\u00ec\u0211\u00ed\u0213\u00ee\u0215", - "\u00ef\u0217\u00f0\u0219\u00f1\u021b\u00f2\u021d\u00f3\u021f\u00f4\u0221", - "\u00f5\u0223\u00f6\u0225\u00f7\u0227\u00f8\u0229\u00f9\u022b\u00fa\u022d", - "\u00fb\u022f\u00fc\u0231\u00fd\u0233\u00fe\u0235\u00ff\u0237\u0100\u0239", - "\u0101\u023b\u0102\u023d\u0103\u023f\u0104\u0241\u0105\u0243\u0106\u0245", - "\u0107\u0247\u0108\u0249\u0109\u024b\u010a\u024d\u010b\u024f\u010c\u0251", - "\u010d\u0253\u010e\u0255\u010f\u0257\u0110\u0259\u0111\u025b\u0112\u025d", - "\u0113\u025f\u0114\u0261\u0115\u0263\u0116\u0265\u0117\u0267\u0118\u0269", - "\u0119\u026b\u011a\u026d\u011b\u026f\u011c\u0271\u011d\u0273\u011e\u0275", - "\u011f\u0277\u0120\u0279\u0121\u027b\u0122\u027d\u0123\u027f\u0124\u0281", - "\u0125\u0283\u0126\u0285\u0127\u0287\u0128\u0289\u0129\u028b\u012a\u028d", - "\u012b\u028f\u012c\u0291\u012d\u0293\u012e\u0295\u012f\u0297\u0130\u0299", - "\u0131\u029b\u0132\u029d\u0133\u029f\u0134\u02a1\u0135\u02a3\u0136\u02a5", - "\u0137\u02a7\u0138\u02a9\u0139\u02ab\u013a\u02ad\u013b\u02af\u013c\u02b1", - "\u013d\u02b3\u013e\u02b5\u013f\u02b7\u0140\u02b9\u0141\u02bb\u0142\u02bd", - "\u0143\u02bf\u0144\u02c1\u0145\u02c3\u0146\u02c5\u0147\u02c7\u0148\u02c9", - "\u0149\u02cb\u014a\u02cd\u014b\u02cf\u014c\u02d1\u014d\u02d3\u014e\u02d5", - "\u014f\u02d7\u0150\u02d9\u0151\u02db\u0152\u02dd\u0002\u02df\u0002\u02e1", - "\u0002\u02e3\u0002\u02e5\u0002\u02e7\u0002\u02e9\u0002\u02eb\u0002\u02ed", - "\u0002\u02ef\u0002\u02f1\u0002\u02f3\u0002\u02f5\u0002\u02f7\u0153\u02f9", - "\u0154\u02fb\u0155\u02fd\u0156\u02ff\u0157\u0301\u0002\u0303\u0002\u0305", - "\u0002\u0307\u0158\u0309\u0159\u030b\u015a\u030d\u015b\u030f\u015c\u0311", - "\u015d\u0313\u015e\u0315\u015f\u0317\u0160\u0319\u0161\u031b\u0002\u031d", - "\u0002\u031f\u0002\u0321\u0002\u0323\u0002\u0325\u0002\u0327\u0002\u0329", - "\u0002\u0003\u0002(\u0004\u0002CCcc\u0004\u0002DDdd\u0004\u0002EEee", - "\u0004\u0002FFff\u0004\u0002GGgg\u0004\u0002HHhh\u0004\u0002IIii\u0004", - "\u0002JJjj\u0004\u0002KKkk\u0004\u0002LLll\u0004\u0002MMmm\u0004\u0002", - "NNnn\u0004\u0002OOoo\u0004\u0002PPpp\u0004\u0002QQqq\u0004\u0002RRr", - "r\u0004\u0002SSss\u0004\u0002TTtt\u0004\u0002UUuu\u0004\u0002VVvv\u0004", - "\u0002WWww\u0004\u0002XXxx\u0004\u0002YYyy\u0004\u0002ZZzz\u0004\u0002", - "[[{{\u0004\u0002\\\\||\u0003\u00022;\u0005\u00022;CHch\u0003\u00022", - "3\u0005\u0002\u000b\f\u000e\u000f\"\"\u0005\u0002\u0003\n\r\u000e\u0010", - "!\u0004\u00022;c|\u0003\u0002##\u0004\u0002\f\f\u000f\u000f\u0004\u0002", - "\u000b\u000b\"\"\u0006\u0002&&C\\aac|\u0007\u0002&&C\\aac|\u0082\u0001", - "\t\u0002&&CFH\\aacfh|\u0082\u0001\u0002\u0e8b\u0002\u0003\u0003\u0002", - "\u0002\u0002\u0002\u0005\u0003\u0002\u0002\u0002\u0002\u0007\u0003\u0002", - "\u0002\u0002\u0002\t\u0003\u0002\u0002\u0002\u0002\u000b\u0003\u0002", - "\u0002\u0002\u0002\r\u0003\u0002\u0002\u0002\u0002\u000f\u0003\u0002", - "\u0002\u0002\u0002\u0011\u0003\u0002\u0002\u0002\u0002\u0013\u0003\u0002", - "\u0002\u0002\u0002\u0015\u0003\u0002\u0002\u0002\u0002\u0017\u0003\u0002", - "\u0002\u0002\u0002\u0019\u0003\u0002\u0002\u0002\u0002\u001b\u0003\u0002", - "\u0002\u0002\u0002\u001d\u0003\u0002\u0002\u0002\u0002\u001f\u0003\u0002", - "\u0002\u0002\u0002!\u0003\u0002\u0002\u0002\u0002#\u0003\u0002\u0002", - "\u0002\u0002%\u0003\u0002\u0002\u0002\u0002\'\u0003\u0002\u0002\u0002", - "\u0002)\u0003\u0002\u0002\u0002\u0002+\u0003\u0002\u0002\u0002\u0002", - "-\u0003\u0002\u0002\u0002\u0002/\u0003\u0002\u0002\u0002\u00021\u0003", - "\u0002\u0002\u0002\u00023\u0003\u0002\u0002\u0002\u00025\u0003\u0002", - "\u0002\u0002\u00027\u0003\u0002\u0002\u0002\u00029\u0003\u0002\u0002", - "\u0002\u0002;\u0003\u0002\u0002\u0002\u0002=\u0003\u0002\u0002\u0002", - "\u0002?\u0003\u0002\u0002\u0002\u0002A\u0003\u0002\u0002\u0002\u0002", - "C\u0003\u0002\u0002\u0002\u0002E\u0003\u0002\u0002\u0002\u0002G\u0003", - "\u0002\u0002\u0002\u0002I\u0003\u0002\u0002\u0002\u0002K\u0003\u0002", - "\u0002\u0002\u0002M\u0003\u0002\u0002\u0002\u0002O\u0003\u0002\u0002", - "\u0002\u0002Q\u0003\u0002\u0002\u0002\u0002S\u0003\u0002\u0002\u0002", - "\u0002\u008f\u0003\u0002\u0002\u0002\u0002\u0091\u0003\u0002\u0002\u0002", - "\u0002\u0093\u0003\u0002\u0002\u0002\u0002\u0095\u0003\u0002\u0002\u0002", - "\u0002\u0097\u0003\u0002\u0002\u0002\u0002\u0099\u0003\u0002\u0002\u0002", - "\u0002\u009b\u0003\u0002\u0002\u0002\u0002\u009d\u0003\u0002\u0002\u0002", - "\u0002\u009f\u0003\u0002\u0002\u0002\u0002\u00a1\u0003\u0002\u0002\u0002", - "\u0002\u00a3\u0003\u0002\u0002\u0002\u0002\u00a5\u0003\u0002\u0002\u0002", - "\u0002\u00a7\u0003\u0002\u0002\u0002\u0002\u00a9\u0003\u0002\u0002\u0002", - "\u0002\u00ab\u0003\u0002\u0002\u0002\u0002\u00ad\u0003\u0002\u0002\u0002", - "\u0002\u00af\u0003\u0002\u0002\u0002\u0002\u00b1\u0003\u0002\u0002\u0002", - "\u0002\u00b3\u0003\u0002\u0002\u0002\u0002\u00b5\u0003\u0002\u0002\u0002", - "\u0002\u00b7\u0003\u0002\u0002\u0002\u0002\u00b9\u0003\u0002\u0002\u0002", - "\u0002\u00bb\u0003\u0002\u0002\u0002\u0002\u00bd\u0003\u0002\u0002\u0002", - "\u0002\u00bf\u0003\u0002\u0002\u0002\u0002\u00c1\u0003\u0002\u0002\u0002", - "\u0002\u00c3\u0003\u0002\u0002\u0002\u0002\u00c5\u0003\u0002\u0002\u0002", - "\u0002\u00c7\u0003\u0002\u0002\u0002\u0002\u00c9\u0003\u0002\u0002\u0002", - "\u0002\u00cb\u0003\u0002\u0002\u0002\u0002\u00cd\u0003\u0002\u0002\u0002", - "\u0002\u00cf\u0003\u0002\u0002\u0002\u0002\u00d1\u0003\u0002\u0002\u0002", - "\u0002\u00d3\u0003\u0002\u0002\u0002\u0002\u00d5\u0003\u0002\u0002\u0002", - "\u0002\u00d7\u0003\u0002\u0002\u0002\u0002\u00d9\u0003\u0002\u0002\u0002", - "\u0002\u00db\u0003\u0002\u0002\u0002\u0002\u00dd\u0003\u0002\u0002\u0002", - "\u0002\u00df\u0003\u0002\u0002\u0002\u0002\u00e1\u0003\u0002\u0002\u0002", - "\u0002\u00e3\u0003\u0002\u0002\u0002\u0002\u00e5\u0003\u0002\u0002\u0002", - "\u0002\u00e7\u0003\u0002\u0002\u0002\u0002\u00e9\u0003\u0002\u0002\u0002", - "\u0002\u00eb\u0003\u0002\u0002\u0002\u0002\u00ed\u0003\u0002\u0002\u0002", - "\u0002\u00ef\u0003\u0002\u0002\u0002\u0002\u00f1\u0003\u0002\u0002\u0002", - "\u0002\u00f3\u0003\u0002\u0002\u0002\u0002\u00f5\u0003\u0002\u0002\u0002", - "\u0002\u00f7\u0003\u0002\u0002\u0002\u0002\u00f9\u0003\u0002\u0002\u0002", - "\u0002\u00fb\u0003\u0002\u0002\u0002\u0002\u00fd\u0003\u0002\u0002\u0002", - "\u0002\u00ff\u0003\u0002\u0002\u0002\u0002\u0101\u0003\u0002\u0002\u0002", - "\u0002\u0103\u0003\u0002\u0002\u0002\u0002\u0105\u0003\u0002\u0002\u0002", - "\u0002\u0107\u0003\u0002\u0002\u0002\u0002\u0109\u0003\u0002\u0002\u0002", - "\u0002\u010b\u0003\u0002\u0002\u0002\u0002\u010d\u0003\u0002\u0002\u0002", - "\u0002\u010f\u0003\u0002\u0002\u0002\u0002\u0111\u0003\u0002\u0002\u0002", - "\u0002\u0113\u0003\u0002\u0002\u0002\u0002\u0115\u0003\u0002\u0002\u0002", - "\u0002\u0117\u0003\u0002\u0002\u0002\u0002\u0119\u0003\u0002\u0002\u0002", - "\u0002\u011b\u0003\u0002\u0002\u0002\u0002\u011d\u0003\u0002\u0002\u0002", - "\u0002\u011f\u0003\u0002\u0002\u0002\u0002\u0121\u0003\u0002\u0002\u0002", - "\u0002\u0123\u0003\u0002\u0002\u0002\u0002\u0125\u0003\u0002\u0002\u0002", - "\u0002\u0127\u0003\u0002\u0002\u0002\u0002\u0129\u0003\u0002\u0002\u0002", - "\u0002\u012b\u0003\u0002\u0002\u0002\u0002\u012d\u0003\u0002\u0002\u0002", - "\u0002\u012f\u0003\u0002\u0002\u0002\u0002\u0131\u0003\u0002\u0002\u0002", - "\u0002\u0133\u0003\u0002\u0002\u0002\u0002\u0135\u0003\u0002\u0002\u0002", - "\u0002\u0137\u0003\u0002\u0002\u0002\u0002\u0139\u0003\u0002\u0002\u0002", - "\u0002\u013b\u0003\u0002\u0002\u0002\u0002\u013d\u0003\u0002\u0002\u0002", - "\u0002\u013f\u0003\u0002\u0002\u0002\u0002\u0141\u0003\u0002\u0002\u0002", - "\u0002\u0143\u0003\u0002\u0002\u0002\u0002\u0145\u0003\u0002\u0002\u0002", - "\u0002\u0147\u0003\u0002\u0002\u0002\u0002\u0149\u0003\u0002\u0002\u0002", - "\u0002\u014b\u0003\u0002\u0002\u0002\u0002\u014d\u0003\u0002\u0002\u0002", - "\u0002\u014f\u0003\u0002\u0002\u0002\u0002\u0151\u0003\u0002\u0002\u0002", - "\u0002\u0153\u0003\u0002\u0002\u0002\u0002\u0155\u0003\u0002\u0002\u0002", - "\u0002\u0157\u0003\u0002\u0002\u0002\u0002\u0159\u0003\u0002\u0002\u0002", - "\u0002\u015b\u0003\u0002\u0002\u0002\u0002\u015d\u0003\u0002\u0002\u0002", - "\u0002\u015f\u0003\u0002\u0002\u0002\u0002\u0161\u0003\u0002\u0002\u0002", - "\u0002\u0163\u0003\u0002\u0002\u0002\u0002\u0165\u0003\u0002\u0002\u0002", - "\u0002\u0167\u0003\u0002\u0002\u0002\u0002\u0169\u0003\u0002\u0002\u0002", - "\u0002\u016b\u0003\u0002\u0002\u0002\u0002\u016d\u0003\u0002\u0002\u0002", - "\u0002\u016f\u0003\u0002\u0002\u0002\u0002\u0171\u0003\u0002\u0002\u0002", - "\u0002\u0173\u0003\u0002\u0002\u0002\u0002\u0175\u0003\u0002\u0002\u0002", - "\u0002\u0177\u0003\u0002\u0002\u0002\u0002\u0179\u0003\u0002\u0002\u0002", - "\u0002\u017b\u0003\u0002\u0002\u0002\u0002\u017d\u0003\u0002\u0002\u0002", - "\u0002\u017f\u0003\u0002\u0002\u0002\u0002\u0181\u0003\u0002\u0002\u0002", - "\u0002\u0183\u0003\u0002\u0002\u0002\u0002\u0185\u0003\u0002\u0002\u0002", - "\u0002\u0187\u0003\u0002\u0002\u0002\u0002\u0189\u0003\u0002\u0002\u0002", - "\u0002\u018b\u0003\u0002\u0002\u0002\u0002\u018d\u0003\u0002\u0002\u0002", - "\u0002\u018f\u0003\u0002\u0002\u0002\u0002\u0191\u0003\u0002\u0002\u0002", - "\u0002\u0193\u0003\u0002\u0002\u0002\u0002\u0195\u0003\u0002\u0002\u0002", - "\u0002\u0197\u0003\u0002\u0002\u0002\u0002\u0199\u0003\u0002\u0002\u0002", - "\u0002\u019b\u0003\u0002\u0002\u0002\u0002\u019d\u0003\u0002\u0002\u0002", - "\u0002\u019f\u0003\u0002\u0002\u0002\u0002\u01a1\u0003\u0002\u0002\u0002", - "\u0002\u01a3\u0003\u0002\u0002\u0002\u0002\u01a5\u0003\u0002\u0002\u0002", - "\u0002\u01a7\u0003\u0002\u0002\u0002\u0002\u01a9\u0003\u0002\u0002\u0002", - "\u0002\u01ab\u0003\u0002\u0002\u0002\u0002\u01ad\u0003\u0002\u0002\u0002", - "\u0002\u01af\u0003\u0002\u0002\u0002\u0002\u01b1\u0003\u0002\u0002\u0002", - "\u0002\u01b3\u0003\u0002\u0002\u0002\u0002\u01b5\u0003\u0002\u0002\u0002", - "\u0002\u01b7\u0003\u0002\u0002\u0002\u0002\u01b9\u0003\u0002\u0002\u0002", - "\u0002\u01bb\u0003\u0002\u0002\u0002\u0002\u01bd\u0003\u0002\u0002\u0002", - "\u0002\u01bf\u0003\u0002\u0002\u0002\u0002\u01c1\u0003\u0002\u0002\u0002", - "\u0002\u01c3\u0003\u0002\u0002\u0002\u0002\u01c5\u0003\u0002\u0002\u0002", - "\u0002\u01c7\u0003\u0002\u0002\u0002\u0002\u01c9\u0003\u0002\u0002\u0002", - "\u0002\u01cb\u0003\u0002\u0002\u0002\u0002\u01cd\u0003\u0002\u0002\u0002", - "\u0002\u01cf\u0003\u0002\u0002\u0002\u0002\u01d1\u0003\u0002\u0002\u0002", - "\u0002\u01d3\u0003\u0002\u0002\u0002\u0002\u01d5\u0003\u0002\u0002\u0002", - "\u0002\u01d7\u0003\u0002\u0002\u0002\u0002\u01d9\u0003\u0002\u0002\u0002", - "\u0002\u01db\u0003\u0002\u0002\u0002\u0002\u01dd\u0003\u0002\u0002\u0002", - "\u0002\u01df\u0003\u0002\u0002\u0002\u0002\u01e1\u0003\u0002\u0002\u0002", - "\u0002\u01e3\u0003\u0002\u0002\u0002\u0002\u01e5\u0003\u0002\u0002\u0002", - "\u0002\u01e7\u0003\u0002\u0002\u0002\u0002\u01e9\u0003\u0002\u0002\u0002", - "\u0002\u01eb\u0003\u0002\u0002\u0002\u0002\u01ed\u0003\u0002\u0002\u0002", - "\u0002\u01ef\u0003\u0002\u0002\u0002\u0002\u01f1\u0003\u0002\u0002\u0002", - "\u0002\u01f3\u0003\u0002\u0002\u0002\u0002\u01f5\u0003\u0002\u0002\u0002", - "\u0002\u01f7\u0003\u0002\u0002\u0002\u0002\u01f9\u0003\u0002\u0002\u0002", - "\u0002\u01fb\u0003\u0002\u0002\u0002\u0002\u01fd\u0003\u0002\u0002\u0002", - "\u0002\u01ff\u0003\u0002\u0002\u0002\u0002\u0201\u0003\u0002\u0002\u0002", - "\u0002\u0203\u0003\u0002\u0002\u0002\u0002\u0205\u0003\u0002\u0002\u0002", - "\u0002\u0207\u0003\u0002\u0002\u0002\u0002\u0209\u0003\u0002\u0002\u0002", - "\u0002\u020b\u0003\u0002\u0002\u0002\u0002\u020d\u0003\u0002\u0002\u0002", - "\u0002\u020f\u0003\u0002\u0002\u0002\u0002\u0211\u0003\u0002\u0002\u0002", - "\u0002\u0213\u0003\u0002\u0002\u0002\u0002\u0215\u0003\u0002\u0002\u0002", - "\u0002\u0217\u0003\u0002\u0002\u0002\u0002\u0219\u0003\u0002\u0002\u0002", - "\u0002\u021b\u0003\u0002\u0002\u0002\u0002\u021d\u0003\u0002\u0002\u0002", - "\u0002\u021f\u0003\u0002\u0002\u0002\u0002\u0221\u0003\u0002\u0002\u0002", - "\u0002\u0223\u0003\u0002\u0002\u0002\u0002\u0225\u0003\u0002\u0002\u0002", - "\u0002\u0227\u0003\u0002\u0002\u0002\u0002\u0229\u0003\u0002\u0002\u0002", - "\u0002\u022b\u0003\u0002\u0002\u0002\u0002\u022d\u0003\u0002\u0002\u0002", - "\u0002\u022f\u0003\u0002\u0002\u0002\u0002\u0231\u0003\u0002\u0002\u0002", - "\u0002\u0233\u0003\u0002\u0002\u0002\u0002\u0235\u0003\u0002\u0002\u0002", - "\u0002\u0237\u0003\u0002\u0002\u0002\u0002\u0239\u0003\u0002\u0002\u0002", - "\u0002\u023b\u0003\u0002\u0002\u0002\u0002\u023d\u0003\u0002\u0002\u0002", - "\u0002\u023f\u0003\u0002\u0002\u0002\u0002\u0241\u0003\u0002\u0002\u0002", - "\u0002\u0243\u0003\u0002\u0002\u0002\u0002\u0245\u0003\u0002\u0002\u0002", - "\u0002\u0247\u0003\u0002\u0002\u0002\u0002\u0249\u0003\u0002\u0002\u0002", - "\u0002\u024b\u0003\u0002\u0002\u0002\u0002\u024d\u0003\u0002\u0002\u0002", - "\u0002\u024f\u0003\u0002\u0002\u0002\u0002\u0251\u0003\u0002\u0002\u0002", - "\u0002\u0253\u0003\u0002\u0002\u0002\u0002\u0255\u0003\u0002\u0002\u0002", - "\u0002\u0257\u0003\u0002\u0002\u0002\u0002\u0259\u0003\u0002\u0002\u0002", - "\u0002\u025b\u0003\u0002\u0002\u0002\u0002\u025d\u0003\u0002\u0002\u0002", - "\u0002\u025f\u0003\u0002\u0002\u0002\u0002\u0261\u0003\u0002\u0002\u0002", - "\u0002\u0263\u0003\u0002\u0002\u0002\u0002\u0265\u0003\u0002\u0002\u0002", - "\u0002\u0267\u0003\u0002\u0002\u0002\u0002\u0269\u0003\u0002\u0002\u0002", - "\u0002\u026b\u0003\u0002\u0002\u0002\u0002\u026d\u0003\u0002\u0002\u0002", - "\u0002\u026f\u0003\u0002\u0002\u0002\u0002\u0271\u0003\u0002\u0002\u0002", - "\u0002\u0273\u0003\u0002\u0002\u0002\u0002\u0275\u0003\u0002\u0002\u0002", - "\u0002\u0277\u0003\u0002\u0002\u0002\u0002\u0279\u0003\u0002\u0002\u0002", - "\u0002\u027b\u0003\u0002\u0002\u0002\u0002\u027d\u0003\u0002\u0002\u0002", - "\u0002\u027f\u0003\u0002\u0002\u0002\u0002\u0281\u0003\u0002\u0002\u0002", - "\u0002\u0283\u0003\u0002\u0002\u0002\u0002\u0285\u0003\u0002\u0002\u0002", - "\u0002\u0287\u0003\u0002\u0002\u0002\u0002\u0289\u0003\u0002\u0002\u0002", - "\u0002\u028b\u0003\u0002\u0002\u0002\u0002\u028d\u0003\u0002\u0002\u0002", - "\u0002\u028f\u0003\u0002\u0002\u0002\u0002\u0291\u0003\u0002\u0002\u0002", - "\u0002\u0293\u0003\u0002\u0002\u0002\u0002\u0295\u0003\u0002\u0002\u0002", - "\u0002\u0297\u0003\u0002\u0002\u0002\u0002\u0299\u0003\u0002\u0002\u0002", - "\u0002\u029b\u0003\u0002\u0002\u0002\u0002\u029d\u0003\u0002\u0002\u0002", - "\u0002\u029f\u0003\u0002\u0002\u0002\u0002\u02a1\u0003\u0002\u0002\u0002", - "\u0002\u02a3\u0003\u0002\u0002\u0002\u0002\u02a5\u0003\u0002\u0002\u0002", - "\u0002\u02a7\u0003\u0002\u0002\u0002\u0002\u02a9\u0003\u0002\u0002\u0002", - "\u0002\u02ab\u0003\u0002\u0002\u0002\u0002\u02ad\u0003\u0002\u0002\u0002", - "\u0002\u02af\u0003\u0002\u0002\u0002\u0002\u02b1\u0003\u0002\u0002\u0002", - "\u0002\u02b3\u0003\u0002\u0002\u0002\u0002\u02b5\u0003\u0002\u0002\u0002", - "\u0002\u02b7\u0003\u0002\u0002\u0002\u0002\u02b9\u0003\u0002\u0002\u0002", - "\u0002\u02bb\u0003\u0002\u0002\u0002\u0002\u02bd\u0003\u0002\u0002\u0002", - "\u0002\u02bf\u0003\u0002\u0002\u0002\u0002\u02c1\u0003\u0002\u0002\u0002", - "\u0002\u02c3\u0003\u0002\u0002\u0002\u0002\u02c5\u0003\u0002\u0002\u0002", - "\u0002\u02c7\u0003\u0002\u0002\u0002\u0002\u02c9\u0003\u0002\u0002\u0002", - "\u0002\u02cb\u0003\u0002\u0002\u0002\u0002\u02cd\u0003\u0002\u0002\u0002", - "\u0002\u02cf\u0003\u0002\u0002\u0002\u0002\u02d1\u0003\u0002\u0002\u0002", - "\u0002\u02d3\u0003\u0002\u0002\u0002\u0002\u02d5\u0003\u0002\u0002\u0002", - "\u0002\u02d7\u0003\u0002\u0002\u0002\u0002\u02d9\u0003\u0002\u0002\u0002", - "\u0002\u02db\u0003\u0002\u0002\u0002\u0002\u02dd\u0003\u0002\u0002\u0002", - "\u0002\u02df\u0003\u0002\u0002\u0002\u0002\u02e1\u0003\u0002\u0002\u0002", - "\u0002\u02e3\u0003\u0002\u0002\u0002\u0002\u02e5\u0003\u0002\u0002\u0002", - "\u0002\u02e7\u0003\u0002\u0002\u0002\u0002\u02e9\u0003\u0002\u0002\u0002", - "\u0002\u02eb\u0003\u0002\u0002\u0002\u0002\u02ed\u0003\u0002\u0002\u0002", - "\u0002\u02ef\u0003\u0002\u0002\u0002\u0002\u02f1\u0003\u0002\u0002\u0002", - "\u0002\u02f3\u0003\u0002\u0002\u0002\u0002\u02f5\u0003\u0002\u0002\u0002", - "\u0002\u02f7\u0003\u0002\u0002\u0002\u0002\u02f9\u0003\u0002\u0002\u0002", - "\u0002\u02fb\u0003\u0002\u0002\u0002\u0002\u02fd\u0003\u0002\u0002\u0002", - "\u0002\u02ff\u0003\u0002\u0002\u0002\u0002\u0307\u0003\u0002\u0002\u0002", - "\u0002\u0309\u0003\u0002\u0002\u0002\u0002\u030b\u0003\u0002\u0002\u0002", - "\u0002\u030d\u0003\u0002\u0002\u0002\u0002\u030f\u0003\u0002\u0002\u0002", - "\u0002\u0311\u0003\u0002\u0002\u0002\u0002\u0313\u0003\u0002\u0002\u0002", - "\u0002\u0315\u0003\u0002\u0002\u0002\u0002\u0317\u0003\u0002\u0002\u0002", - "\u0002\u0319\u0003\u0002\u0002\u0002\u0003\u032b\u0003\u0002\u0002\u0002", - "\u0005\u032d\u0003\u0002\u0002\u0002\u0007\u0330\u0003\u0002\u0002\u0002", - "\t\u0334\u0003\u0002\u0002\u0002\u000b\u0337\u0003\u0002\u0002\u0002", - "\r\u0339\u0003\u0002\u0002\u0002\u000f\u033c\u0003\u0002\u0002\u0002", - "\u0011\u033e\u0003\u0002\u0002\u0002\u0013\u0341\u0003\u0002\u0002\u0002", - "\u0015\u0343\u0003\u0002\u0002\u0002\u0017\u0345\u0003\u0002\u0002\u0002", - "\u0019\u0347\u0003\u0002\u0002\u0002\u001b\u0349\u0003\u0002\u0002\u0002", - "\u001d\u034b\u0003\u0002\u0002\u0002\u001f\u034d\u0003\u0002\u0002\u0002", - "!\u034f\u0003\u0002\u0002\u0002#\u0352\u0003\u0002\u0002\u0002%\u0355", - "\u0003\u0002\u0002\u0002\'\u0358\u0003\u0002\u0002\u0002)\u035a\u0003", - "\u0002\u0002\u0002+\u035c\u0003\u0002\u0002\u0002-\u035f\u0003\u0002", - "\u0002\u0002/\u0361\u0003\u0002\u0002\u00021\u0363\u0003\u0002\u0002", - "\u00023\u0365\u0003\u0002\u0002\u00025\u0367\u0003\u0002\u0002\u0002", - "7\u0369\u0003\u0002\u0002\u00029\u036b\u0003\u0002\u0002\u0002;\u036d", - "\u0003\u0002\u0002\u0002=\u036f\u0003\u0002\u0002\u0002?\u0371\u0003", - "\u0002\u0002\u0002A\u0373\u0003\u0002\u0002\u0002C\u0375\u0003\u0002", - "\u0002\u0002E\u0377\u0003\u0002\u0002\u0002G\u037a\u0003\u0002\u0002", - "\u0002I\u037e\u0003\u0002\u0002\u0002K\u0380\u0003\u0002\u0002\u0002", - "M\u0383\u0003\u0002\u0002\u0002O\u0386\u0003\u0002\u0002\u0002Q\u0389", - "\u0003\u0002\u0002\u0002S\u038b\u0003\u0002\u0002\u0002U\u038e\u0003", - "\u0002\u0002\u0002W\u0390\u0003\u0002\u0002\u0002Y\u0392\u0003\u0002", - "\u0002\u0002[\u0394\u0003\u0002\u0002\u0002]\u0396\u0003\u0002\u0002", - "\u0002_\u0398\u0003\u0002\u0002\u0002a\u039a\u0003\u0002\u0002\u0002", - "c\u039c\u0003\u0002\u0002\u0002e\u039e\u0003\u0002\u0002\u0002g\u03a0", - "\u0003\u0002\u0002\u0002i\u03a2\u0003\u0002\u0002\u0002k\u03a4\u0003", - "\u0002\u0002\u0002m\u03a6\u0003\u0002\u0002\u0002o\u03a8\u0003\u0002", - "\u0002\u0002q\u03aa\u0003\u0002\u0002\u0002s\u03ac\u0003\u0002\u0002", - "\u0002u\u03ae\u0003\u0002\u0002\u0002w\u03b0\u0003\u0002\u0002\u0002", - "y\u03b2\u0003\u0002\u0002\u0002{\u03b4\u0003\u0002\u0002\u0002}\u03b6", - "\u0003\u0002\u0002\u0002\u007f\u03b8\u0003\u0002\u0002\u0002\u0081\u03ba", - "\u0003\u0002\u0002\u0002\u0083\u03bc\u0003\u0002\u0002\u0002\u0085\u03be", - "\u0003\u0002\u0002\u0002\u0087\u03c0\u0003\u0002\u0002\u0002\u0089\u03c2", - "\u0003\u0002\u0002\u0002\u008b\u03c5\u0003\u0002\u0002\u0002\u008d\u03c9", - "\u0003\u0002\u0002\u0002\u008f\u03dd\u0003\u0002\u0002\u0002\u0091\u03f0", - "\u0003\u0002\u0002\u0002\u0093\u03f2\u0003\u0002\u0002\u0002\u0095\u03f5", - "\u0003\u0002\u0002\u0002\u0097\u03fe\u0003\u0002\u0002\u0002\u0099\u0408", - "\u0003\u0002\u0002\u0002\u009b\u0410\u0003\u0002\u0002\u0002\u009d\u0419", - "\u0003\u0002\u0002\u0002\u009f\u0423\u0003\u0002\u0002\u0002\u00a1\u0437", - "\u0003\u0002\u0002\u0002\u00a3\u0439\u0003\u0002\u0002\u0002\u00a5\u0440", - "\u0003\u0002\u0002\u0002\u00a7\u0447\u0003\u0002\u0002\u0002\u00a9\u044e", - "\u0003\u0002\u0002\u0002\u00ab\u0453\u0003\u0002\u0002\u0002\u00ad\u0457", - "\u0003\u0002\u0002\u0002\u00af\u045c\u0003\u0002\u0002\u0002\u00b1\u0462", - "\u0003\u0002\u0002\u0002\u00b3\u046a\u0003\u0002\u0002\u0002\u00b5\u046f", - "\u0003\u0002\u0002\u0002\u00b7\u0477\u0003\u0002\u0002\u0002\u00b9\u047d", - "\u0003\u0002\u0002\u0002\u00bb\u0484\u0003\u0002\u0002\u0002\u00bd\u0488", - "\u0003\u0002\u0002\u0002\u00bf\u0491\u0003\u0002\u0002\u0002\u00c1\u049f", - "\u0003\u0002\u0002\u0002\u00c3\u04ad\u0003\u0002\u0002\u0002\u00c5\u04be", - "\u0003\u0002\u0002\u0002\u00c7\u04cd\u0003\u0002\u0002\u0002\u00c9\u04df", - "\u0003\u0002\u0002\u0002\u00cb\u04f3\u0003\u0002\u0002\u0002\u00cd\u04f9", - "\u0003\u0002\u0002\u0002\u00cf\u0500\u0003\u0002\u0002\u0002\u00d1\u0505", - "\u0003\u0002\u0002\u0002\u00d3\u050d\u0003\u0002\u0002\u0002\u00d5\u0516", - "\u0003\u0002\u0002\u0002\u00d7\u0520\u0003\u0002\u0002\u0002\u00d9\u0528", - "\u0003\u0002\u0002\u0002\u00db\u052f\u0003\u0002\u0002\u0002\u00dd\u0536", - "\u0003\u0002\u0002\u0002\u00df\u0539\u0003\u0002\u0002\u0002\u00e1\u0543", - "\u0003\u0002\u0002\u0002\u00e3\u0546\u0003\u0002\u0002\u0002\u00e5\u054b", - "\u0003\u0002\u0002\u0002\u00e7\u0551\u0003\u0002\u0002\u0002\u00e9\u0558", - "\u0003\u0002\u0002\u0002\u00eb\u0562\u0003\u0002\u0002\u0002\u00ed\u056c", - "\u0003\u0002\u0002\u0002\u00ef\u0575\u0003\u0002\u0002\u0002\u00f1\u057d", - "\u0003\u0002\u0002\u0002\u00f3\u0581\u0003\u0002\u0002\u0002\u00f5\u0589", - "\u0003\u0002\u0002\u0002\u00f7\u058d\u0003\u0002\u0002\u0002\u00f9\u0597", - "\u0003\u0002\u0002\u0002\u00fb\u059f\u0003\u0002\u0002\u0002\u00fd\u05a5", - "\u0003\u0002\u0002\u0002\u00ff\u05aa\u0003\u0002\u0002\u0002\u0101\u05ad", - "\u0003\u0002\u0002\u0002\u0103\u05b4\u0003\u0002\u0002\u0002\u0105\u05b9", - "\u0003\u0002\u0002\u0002\u0107\u05c1\u0003\u0002\u0002\u0002\u0109\u05cb", - "\u0003\u0002\u0002\u0002\u010b\u05d2\u0003\u0002\u0002\u0002\u010d\u05d7", - "\u0003\u0002\u0002\u0002\u010f\u05dd\u0003\u0002\u0002\u0002\u0111\u05e1", - "\u0003\u0002\u0002\u0002\u0113\u05e6\u0003\u0002\u0002\u0002\u0115\u05eb", - "\u0003\u0002\u0002\u0002\u0117\u05f0\u0003\u0002\u0002\u0002\u0119\u05f7", - "\u0003\u0002\u0002\u0002\u011b\u05fd\u0003\u0002\u0002\u0002\u011d\u060a", - "\u0003\u0002\u0002\u0002\u011f\u0614\u0003\u0002\u0002\u0002\u0121\u0627", - "\u0003\u0002\u0002\u0002\u0123\u062b\u0003\u0002\u0002\u0002\u0125\u062e", - "\u0003\u0002\u0002\u0002\u0127\u0633\u0003\u0002\u0002\u0002\u0129\u0636", - "\u0003\u0002\u0002\u0002\u012b\u063c\u0003\u0002\u0002\u0002\u012d\u0641", - "\u0003\u0002\u0002\u0002\u012f\u0648\u0003\u0002\u0002\u0002\u0131\u064d", - "\u0003\u0002\u0002\u0002\u0133\u0654\u0003\u0002\u0002\u0002\u0135\u065b", - "\u0003\u0002\u0002\u0002\u0137\u0661\u0003\u0002\u0002\u0002\u0139\u0664", - "\u0003\u0002\u0002\u0002\u013b\u0667\u0003\u0002\u0002\u0002\u013d\u066d", - "\u0003\u0002\u0002\u0002\u013f\u0675\u0003\u0002\u0002\u0002\u0141\u067b", - "\u0003\u0002\u0002\u0002\u0143\u0680\u0003\u0002\u0002\u0002\u0145\u0685", - "\u0003\u0002\u0002\u0002\u0147\u068b\u0003\u0002\u0002\u0002\u0149\u0691", - "\u0003\u0002\u0002\u0002\u014b\u0697\u0003\u0002\u0002\u0002\u014d\u069f", - "\u0003\u0002\u0002\u0002\u014f\u06aa\u0003\u0002\u0002\u0002\u0151\u06b2", - "\u0003\u0002\u0002\u0002\u0153\u06bd\u0003\u0002\u0002\u0002\u0155\u06c4", - "\u0003\u0002\u0002\u0002\u0157\u06c9\u0003\u0002\u0002\u0002\u0159\u06d0", - "\u0003\u0002\u0002\u0002\u015b\u06d6\u0003\u0002\u0002\u0002\u015d\u06dc", - "\u0003\u0002\u0002\u0002\u015f\u06e1\u0003\u0002\u0002\u0002\u0161\u06e5", - "\u0003\u0002\u0002\u0002\u0163\u06eb\u0003\u0002\u0002\u0002\u0165\u06f2", - "\u0003\u0002\u0002\u0002\u0167\u06f6\u0003\u0002\u0002\u0002\u0169\u06fc", - "\u0003\u0002\u0002\u0002\u016b\u0704\u0003\u0002\u0002\u0002\u016d\u0707", - "\u0003\u0002\u0002\u0002\u016f\u070c\u0003\u0002\u0002\u0002\u0171\u0712", - "\u0003\u0002\u0002\u0002\u0173\u071a\u0003\u0002\u0002\u0002\u0175\u071e", - "\u0003\u0002\u0002\u0002\u0177\u0722\u0003\u0002\u0002\u0002\u0179\u0725", - "\u0003\u0002\u0002\u0002\u017b\u0729\u0003\u0002\u0002\u0002\u017d\u0730", - "\u0003\u0002\u0002\u0002\u017f\u0737\u0003\u0002\u0002\u0002\u0181\u073c", - "\u0003\u0002\u0002\u0002\u0183\u0743\u0003\u0002\u0002\u0002\u0185\u074a", - "\u0003\u0002\u0002\u0002\u0187\u074e\u0003\u0002\u0002\u0002\u0189\u0752", - "\u0003\u0002\u0002\u0002\u018b\u0758\u0003\u0002\u0002\u0002\u018d\u0760", - "\u0003\u0002\u0002\u0002\u018f\u0767\u0003\u0002\u0002\u0002\u0191\u076c", - "\u0003\u0002\u0002\u0002\u0193\u0772\u0003\u0002\u0002\u0002\u0195\u0777", - "\u0003\u0002\u0002\u0002\u0197\u077b\u0003\u0002\u0002\u0002\u0199\u0783", - "\u0003\u0002\u0002\u0002\u019b\u078b\u0003\u0002\u0002\u0002\u019d\u078f", - "\u0003\u0002\u0002\u0002\u019f\u0797\u0003\u0002\u0002\u0002\u01a1\u079e", - "\u0003\u0002\u0002\u0002\u01a3\u07a6\u0003\u0002\u0002\u0002\u01a5\u07ac", - "\u0003\u0002\u0002\u0002\u01a7\u07b0\u0003\u0002\u0002\u0002\u01a9\u07b4", - "\u0003\u0002\u0002\u0002\u01ab\u07b8\u0003\u0002\u0002\u0002\u01ad\u07c1", - "\u0003\u0002\u0002\u0002\u01af\u07cd\u0003\u0002\u0002\u0002\u01b1\u07d6", - "\u0003\u0002\u0002\u0002\u01b3\u07da\u0003\u0002\u0002\u0002\u01b5\u07e7", - "\u0003\u0002\u0002\u0002\u01b7\u07f1\u0003\u0002\u0002\u0002\u01b9\u07fa", - "\u0003\u0002\u0002\u0002\u01bb\u0805\u0003\u0002\u0002\u0002\u01bd\u080a", - "\u0003\u0002\u0002\u0002\u01bf\u0815\u0003\u0002\u0002\u0002\u01c1\u081f", - "\u0003\u0002\u0002\u0002\u01c3\u082c\u0003\u0002\u0002\u0002\u01c5\u0832", - "\u0003\u0002\u0002\u0002\u01c7\u0837\u0003\u0002\u0002\u0002\u01c9\u083b", - "\u0003\u0002\u0002\u0002\u01cb\u0847\u0003\u0002\u0002\u0002\u01cd\u0852", - "\u0003\u0002\u0002\u0002\u01cf\u085c\u0003\u0002\u0002\u0002\u01d1\u0862", - "\u0003\u0002\u0002\u0002\u01d3\u0867\u0003\u0002\u0002\u0002\u01d5\u086c", - "\u0003\u0002\u0002\u0002\u01d7\u0874\u0003\u0002\u0002\u0002\u01d9\u087a", - "\u0003\u0002\u0002\u0002\u01db\u0888\u0003\u0002\u0002\u0002\u01dd\u0897", - "\u0003\u0002\u0002\u0002\u01df\u089f\u0003\u0002\u0002\u0002\u01e1\u08a8", - "\u0003\u0002\u0002\u0002\u01e3\u08ae\u0003\u0002\u0002\u0002\u01e5\u08c7", - "\u0003\u0002\u0002\u0002\u01e7\u08c9\u0003\u0002\u0002\u0002\u01e9\u08d6", - "\u0003\u0002\u0002\u0002\u01eb\u08db\u0003\u0002\u0002\u0002\u01ed\u08e2", - "\u0003\u0002\u0002\u0002\u01ef\u08e7\u0003\u0002\u0002\u0002\u01f1\u090c", - "\u0003\u0002\u0002\u0002\u01f3\u0929\u0003\u0002\u0002\u0002\u01f5\u092b", - "\u0003\u0002\u0002\u0002\u01f7\u0930\u0003\u0002\u0002\u0002\u01f9\u0935", - "\u0003\u0002\u0002\u0002\u01fb\u093d\u0003\u0002\u0002\u0002\u01fd\u0945", - "\u0003\u0002\u0002\u0002\u01ff\u094d\u0003\u0002\u0002\u0002\u0201\u0955", - "\u0003\u0002\u0002\u0002\u0203\u095e\u0003\u0002\u0002\u0002\u0205\u0967", - "\u0003\u0002\u0002\u0002\u0207\u096f\u0003\u0002\u0002\u0002\u0209\u097a", - "\u0003\u0002\u0002\u0002\u020b\u097e\u0003\u0002\u0002\u0002\u020d\u0987", - "\u0003\u0002\u0002\u0002\u020f\u098f\u0003\u0002\u0002\u0002\u0211\u099d", - "\u0003\u0002\u0002\u0002\u0213\u09ac\u0003\u0002\u0002\u0002\u0215\u09b5", - "\u0003\u0002\u0002\u0002\u0217\u09be\u0003\u0002\u0002\u0002\u0219\u09cc", - "\u0003\u0002\u0002\u0002\u021b\u09d2\u0003\u0002\u0002\u0002\u021d\u09da", - "\u0003\u0002\u0002\u0002\u021f\u09e3\u0003\u0002\u0002\u0002\u0221\u09ed", - "\u0003\u0002\u0002\u0002\u0223\u09f6\u0003\u0002\u0002\u0002\u0225\u09f9", - "\u0003\u0002\u0002\u0002\u0227\u0a00\u0003\u0002\u0002\u0002\u0229\u0a0c", - "\u0003\u0002\u0002\u0002\u022b\u0a19\u0003\u0002\u0002\u0002\u022d\u0a22", - "\u0003\u0002\u0002\u0002\u022f\u0a29\u0003\u0002\u0002\u0002\u0231\u0a31", - "\u0003\u0002\u0002\u0002\u0233\u0a39\u0003\u0002\u0002\u0002\u0235\u0a43", - "\u0003\u0002\u0002\u0002\u0237\u0a4c\u0003\u0002\u0002\u0002\u0239\u0a5a", - "\u0003\u0002\u0002\u0002\u023b\u0a63\u0003\u0002\u0002\u0002\u023d\u0a76", - "\u0003\u0002\u0002\u0002\u023f\u0a81\u0003\u0002\u0002\u0002\u0241\u0a91", - "\u0003\u0002\u0002\u0002\u0243\u0a9c\u0003\u0002\u0002\u0002\u0245\u0aa9", - "\u0003\u0002\u0002\u0002\u0247\u0aaf\u0003\u0002\u0002\u0002\u0249\u0ab7", - "\u0003\u0002\u0002\u0002\u024b\u0abd\u0003\u0002\u0002\u0002\u024d\u0ac6", - "\u0003\u0002\u0002\u0002\u024f\u0acb\u0003\u0002\u0002\u0002\u0251\u0ad3", - "\u0003\u0002\u0002\u0002\u0253\u0adc\u0003\u0002\u0002\u0002\u0255\u0ae1", - "\u0003\u0002\u0002\u0002\u0257\u0ae8\u0003\u0002\u0002\u0002\u0259\u0af2", - "\u0003\u0002\u0002\u0002\u025b\u0af7\u0003\u0002\u0002\u0002\u025d\u0afc", - "\u0003\u0002\u0002\u0002\u025f\u0b01\u0003\u0002\u0002\u0002\u0261\u0b08", - "\u0003\u0002\u0002\u0002\u0263\u0b11\u0003\u0002\u0002\u0002\u0265\u0b19", - "\u0003\u0002\u0002\u0002\u0267\u0b1e\u0003\u0002\u0002\u0002\u0269\u0b24", - "\u0003\u0002\u0002\u0002\u026b\u0b2b\u0003\u0002\u0002\u0002\u026d\u0b32", - "\u0003\u0002\u0002\u0002\u026f\u0b36\u0003\u0002\u0002\u0002\u0271\u0b49", - "\u0003\u0002\u0002\u0002\u0273\u0b5c\u0003\u0002\u0002\u0002\u0275\u0b6a", - "\u0003\u0002\u0002\u0002\u0277\u0b7b\u0003\u0002\u0002\u0002\u0279\u0b87", - "\u0003\u0002\u0002\u0002\u027b\u0b93\u0003\u0002\u0002\u0002\u027d\u0ba3", - "\u0003\u0002\u0002\u0002\u027f\u0bae\u0003\u0002\u0002\u0002\u0281\u0bb9", - "\u0003\u0002\u0002\u0002\u0283\u0bc2\u0003\u0002\u0002\u0002\u0285\u0bcd", - "\u0003\u0002\u0002\u0002\u0287\u0bd3\u0003\u0002\u0002\u0002\u0289\u0bd9", - "\u0003\u0002\u0002\u0002\u028b\u0bde\u0003\u0002\u0002\u0002\u028d\u0be3", - "\u0003\u0002\u0002\u0002\u028f\u0bea\u0003\u0002\u0002\u0002\u0291\u0bf4", - "\u0003\u0002\u0002\u0002\u0293\u0bfc\u0003\u0002\u0002\u0002\u0295\u0c03", - "\u0003\u0002\u0002\u0002\u0297\u0c09\u0003\u0002\u0002\u0002\u0299\u0c0d", - "\u0003\u0002\u0002\u0002\u029b\u0c12\u0003\u0002\u0002\u0002\u029d\u0c1a", - "\u0003\u0002\u0002\u0002\u029f\u0c22\u0003\u0002\u0002\u0002\u02a1\u0c2b", - "\u0003\u0002\u0002\u0002\u02a3\u0c34\u0003\u0002\u0002\u0002\u02a5\u0c3a", - "\u0003\u0002\u0002\u0002\u02a7\u0c44\u0003\u0002\u0002\u0002\u02a9\u0c4d", - "\u0003\u0002\u0002\u0002\u02ab\u0c52\u0003\u0002\u0002\u0002\u02ad\u0c5d", - "\u0003\u0002\u0002\u0002\u02af\u0c66\u0003\u0002\u0002\u0002\u02b1\u0c6b", - "\u0003\u0002\u0002\u0002\u02b3\u0c74\u0003\u0002\u0002\u0002\u02b5\u0c79", - "\u0003\u0002\u0002\u0002\u02b7\u0c84\u0003\u0002\u0002\u0002\u02b9\u0c8d", - "\u0003\u0002\u0002\u0002\u02bb\u0c92\u0003\u0002\u0002\u0002\u02bd\u0c99", - "\u0003\u0002\u0002\u0002\u02bf\u0ca2\u0003\u0002\u0002\u0002\u02c1\u0cab", - "\u0003\u0002\u0002\u0002\u02c3\u0cb0\u0003\u0002\u0002\u0002\u02c5\u0cb8", - "\u0003\u0002\u0002\u0002\u02c7\u0cc3\u0003\u0002\u0002\u0002\u02c9\u0cce", - "\u0003\u0002\u0002\u0002\u02cb\u0cd7\u0003\u0002\u0002\u0002\u02cd\u0cdf", - "\u0003\u0002\u0002\u0002\u02cf\u0ce5\u0003\u0002\u0002\u0002\u02d1\u0cee", - "\u0003\u0002\u0002\u0002\u02d3\u0cf5\u0003\u0002\u0002\u0002\u02d5\u0cfb", - "\u0003\u0002\u0002\u0002\u02d7\u0d03\u0003\u0002\u0002\u0002\u02d9\u0d0b", - "\u0003\u0002\u0002\u0002\u02db\u0d12\u0003\u0002\u0002\u0002\u02dd\u0d1c", - "\u0003\u0002\u0002\u0002\u02df\u0d23\u0003\u0002\u0002\u0002\u02e1\u0d2a", - "\u0003\u0002\u0002\u0002\u02e3\u0d31\u0003\u0002\u0002\u0002\u02e5\u0d38", - "\u0003\u0002\u0002\u0002\u02e7\u0d3f\u0003\u0002\u0002\u0002\u02e9\u0d50", - "\u0003\u0002\u0002\u0002\u02eb\u0d61\u0003\u0002\u0002\u0002\u02ed\u0d70", - "\u0003\u0002\u0002\u0002\u02ef\u0d7e\u0003\u0002\u0002\u0002\u02f1\u0d8d", - "\u0003\u0002\u0002\u0002\u02f3\u0d9d\u0003\u0002\u0002\u0002\u02f5\u0daf", - "\u0003\u0002\u0002\u0002\u02f7\u0dbe\u0003\u0002\u0002\u0002\u02f9\u0dc3", - "\u0003\u0002\u0002\u0002\u02fb\u0dc5\u0003\u0002\u0002\u0002\u02fd\u0ded", - "\u0003\u0002\u0002\u0002\u02ff\u0def\u0003\u0002\u0002\u0002\u0301\u0df2", - "\u0003\u0002\u0002\u0002\u0303\u0df4\u0003\u0002\u0002\u0002\u0305\u0df6", - "\u0003\u0002\u0002\u0002\u0307\u0df8\u0003\u0002\u0002\u0002\u0309\u0e0a", - "\u0003\u0002\u0002\u0002\u030b\u0e17\u0003\u0002\u0002\u0002\u030d\u0e24", - "\u0003\u0002\u0002\u0002\u030f\u0e28\u0003\u0002\u0002\u0002\u0311\u0e39", - "\u0003\u0002\u0002\u0002\u0313\u0e3f\u0003\u0002\u0002\u0002\u0315\u0e54", - "\u0003\u0002\u0002\u0002\u0317\u0e58\u0003\u0002\u0002\u0002\u0319\u0e61", - "\u0003\u0002\u0002\u0002\u031b\u0e6f\u0003\u0002\u0002\u0002\u031d\u0e72", - "\u0003\u0002\u0002\u0002\u031f\u0e77\u0003\u0002\u0002\u0002\u0321\u0e7b", - "\u0003\u0002\u0002\u0002\u0323\u0e7e\u0003\u0002\u0002\u0002\u0325\u0e83", - "\u0003\u0002\u0002\u0002\u0327\u0e85\u0003\u0002\u0002\u0002\u0329\u0e87", - "\u0003\u0002\u0002\u0002\u032b\u032c\u0007?\u0002\u0002\u032c\u0004", - "\u0003\u0002\u0002\u0002\u032d\u032e\u0007<\u0002\u0002\u032e\u032f", - "\u0007?\u0002\u0002\u032f\u0006\u0003\u0002\u0002\u0002\u0330\u0331", - "\u0007>\u0002\u0002\u0331\u0332\u0007?\u0002\u0002\u0332\u0333\u0007", - "@\u0002\u0002\u0333\b\u0003\u0002\u0002\u0002\u0334\u0335\u0007@\u0002", - "\u0002\u0335\u0336\u0007?\u0002\u0002\u0336\n\u0003\u0002\u0002\u0002", - "\u0337\u0338\u0007@\u0002\u0002\u0338\f\u0003\u0002\u0002\u0002\u0339", - "\u033a\u0007>\u0002\u0002\u033a\u033b\u0007?\u0002\u0002\u033b\u000e", - "\u0003\u0002\u0002\u0002\u033c\u033d\u0007>\u0002\u0002\u033d\u0010", - "\u0003\u0002\u0002\u0002\u033e\u033f\u0007#\u0002\u0002\u033f\u0340", - "\u0007?\u0002\u0002\u0340\u0012\u0003\u0002\u0002\u0002\u0341\u0342", - "\u0007-\u0002\u0002\u0342\u0014\u0003\u0002\u0002\u0002\u0343\u0344", - "\u0007/\u0002\u0002\u0344\u0016\u0003\u0002\u0002\u0002\u0345\u0346", - "\u0007,\u0002\u0002\u0346\u0018\u0003\u0002\u0002\u0002\u0347\u0348", - "\u00071\u0002\u0002\u0348\u001a\u0003\u0002\u0002\u0002\u0349\u034a", - "\u0007\'\u0002\u0002\u034a\u001c\u0003\u0002\u0002\u0002\u034b\u034c", - "\u0007#\u0002\u0002\u034c\u001e\u0003\u0002\u0002\u0002\u034d\u034e", - "\u0007\u0080\u0002\u0002\u034e \u0003\u0002\u0002\u0002\u034f\u0350", - "\u0007>\u0002\u0002\u0350\u0351\u0007>\u0002\u0002\u0351\"\u0003\u0002", - "\u0002\u0002\u0352\u0353\u0007@\u0002\u0002\u0353\u0354\u0007@\u0002", - "\u0002\u0354$\u0003\u0002\u0002\u0002\u0355\u0356\u0007(\u0002\u0002", - "\u0356\u0357\u0007(\u0002\u0002\u0357&\u0003\u0002\u0002\u0002\u0358", - "\u0359\u0007(\u0002\u0002\u0359(\u0003\u0002\u0002\u0002\u035a\u035b", - "\u0007`\u0002\u0002\u035b*\u0003\u0002\u0002\u0002\u035c\u035d\u0007", - "~\u0002\u0002\u035d\u035e\u0007~\u0002\u0002\u035e,\u0003\u0002\u0002", - "\u0002\u035f\u0360\u0007~\u0002\u0002\u0360.\u0003\u0002\u0002\u0002", - "\u0361\u0362\u00070\u0002\u0002\u03620\u0003\u0002\u0002\u0002\u0363", - "\u0364\u0007.\u0002\u0002\u03642\u0003\u0002\u0002\u0002\u0365\u0366", - "\u0007=\u0002\u0002\u03664\u0003\u0002\u0002\u0002\u0367\u0368\u0007", - "<\u0002\u0002\u03686\u0003\u0002\u0002\u0002\u0369\u036a\u0007*\u0002", - "\u0002\u036a8\u0003\u0002\u0002\u0002\u036b\u036c\u0007+\u0002\u0002", - "\u036c:\u0003\u0002\u0002\u0002\u036d\u036e\u0007}\u0002\u0002\u036e", - "<\u0003\u0002\u0002\u0002\u036f\u0370\u0007\u007f\u0002\u0002\u0370", - ">\u0003\u0002\u0002\u0002\u0371\u0372\u0007a\u0002\u0002\u0372@\u0003", - "\u0002\u0002\u0002\u0373\u0374\u0007]\u0002\u0002\u0374B\u0003\u0002", - "\u0002\u0002\u0375\u0376\u0007_\u0002\u0002\u0376D\u0003\u0002\u0002", - "\u0002\u0377\u0378\u0007/\u0002\u0002\u0378\u0379\u0007@\u0002\u0002", - "\u0379F\u0003\u0002\u0002\u0002\u037a\u037b\u0007/\u0002\u0002\u037b", - "\u037c\u0007@\u0002\u0002\u037c\u037d\u0007@\u0002\u0002\u037dH\u0003", - "\u0002\u0002\u0002\u037e\u037f\u0007B\u0002\u0002\u037fJ\u0003\u0002", - "\u0002\u0002\u0380\u0381\u0007B\u0002\u0002\u0381\u0382\u0005\u031f", - "\u0190\u0002\u0382L\u0003\u0002\u0002\u0002\u0383\u0384\u0007B\u0002", - "\u0002\u0384\u0385\u0007B\u0002\u0002\u0385N\u0003\u0002\u0002\u0002", - "\u0386\u0387\u0007^\u0002\u0002\u0387\u0388\u0007P\u0002\u0002\u0388", - "P\u0003\u0002\u0002\u0002\u0389\u038a\u0007A\u0002\u0002\u038aR\u0003", - "\u0002\u0002\u0002\u038b\u038c\u0007<\u0002\u0002\u038c\u038d\u0007", - "<\u0002\u0002\u038dT\u0003\u0002\u0002\u0002\u038e\u038f\t\u0002\u0002", - "\u0002\u038fV\u0003\u0002\u0002\u0002\u0390\u0391\t\u0003\u0002\u0002", - "\u0391X\u0003\u0002\u0002\u0002\u0392\u0393\t\u0004\u0002\u0002\u0393", - "Z\u0003\u0002\u0002\u0002\u0394\u0395\t\u0005\u0002\u0002\u0395\\\u0003", - "\u0002\u0002\u0002\u0396\u0397\t\u0006\u0002\u0002\u0397^\u0003\u0002", - "\u0002\u0002\u0398\u0399\t\u0007\u0002\u0002\u0399`\u0003\u0002\u0002", - "\u0002\u039a\u039b\t\b\u0002\u0002\u039bb\u0003\u0002\u0002\u0002\u039c", - "\u039d\t\t\u0002\u0002\u039dd\u0003\u0002\u0002\u0002\u039e\u039f\t", - "\n\u0002\u0002\u039ff\u0003\u0002\u0002\u0002\u03a0\u03a1\t\u000b\u0002", - "\u0002\u03a1h\u0003\u0002\u0002\u0002\u03a2\u03a3\t\f\u0002\u0002\u03a3", - "j\u0003\u0002\u0002\u0002\u03a4\u03a5\t\r\u0002\u0002\u03a5l\u0003\u0002", - "\u0002\u0002\u03a6\u03a7\t\u000e\u0002\u0002\u03a7n\u0003\u0002\u0002", - "\u0002\u03a8\u03a9\t\u000f\u0002\u0002\u03a9p\u0003\u0002\u0002\u0002", - "\u03aa\u03ab\t\u0010\u0002\u0002\u03abr\u0003\u0002\u0002\u0002\u03ac", - "\u03ad\t\u0011\u0002\u0002\u03adt\u0003\u0002\u0002\u0002\u03ae\u03af", - "\t\u0012\u0002\u0002\u03afv\u0003\u0002\u0002\u0002\u03b0\u03b1\t\u0013", - "\u0002\u0002\u03b1x\u0003\u0002\u0002\u0002\u03b2\u03b3\t\u0014\u0002", - "\u0002\u03b3z\u0003\u0002\u0002\u0002\u03b4\u03b5\t\u0015\u0002\u0002", - "\u03b5|\u0003\u0002\u0002\u0002\u03b6\u03b7\t\u0016\u0002\u0002\u03b7", - "~\u0003\u0002\u0002\u0002\u03b8\u03b9\t\u0017\u0002\u0002\u03b9\u0080", - "\u0003\u0002\u0002\u0002\u03ba\u03bb\t\u0018\u0002\u0002\u03bb\u0082", - "\u0003\u0002\u0002\u0002\u03bc\u03bd\t\u0019\u0002\u0002\u03bd\u0084", - "\u0003\u0002\u0002\u0002\u03be\u03bf\t\u001a\u0002\u0002\u03bf\u0086", - "\u0003\u0002\u0002\u0002\u03c0\u03c1\t\u001b\u0002\u0002\u03c1\u0088", - "\u0003\u0002\u0002\u0002\u03c2\u03c3\t\u001c\u0002\u0002\u03c3\u008a", - "\u0003\u0002\u0002\u0002\u03c4\u03c6\u0005\u0089E\u0002\u03c5\u03c4", - "\u0003\u0002\u0002\u0002\u03c6\u03c7\u0003\u0002\u0002\u0002\u03c7\u03c5", - "\u0003\u0002\u0002\u0002\u03c7\u03c8\u0003\u0002\u0002\u0002\u03c8\u008c", - "\u0003\u0002\u0002\u0002\u03c9\u03ca\t\u001d\u0002\u0002\u03ca\u008e", - "\u0003\u0002\u0002\u0002\u03cb\u03cc\u00072\u0002\u0002\u03cc\u03cd", - "\u0007z\u0002\u0002\u03cd\u03cf\u0003\u0002\u0002\u0002\u03ce\u03d0", - "\u0005\u008dG\u0002\u03cf\u03ce\u0003\u0002\u0002\u0002\u03d0\u03d1", - "\u0003\u0002\u0002\u0002\u03d1\u03cf\u0003\u0002\u0002\u0002\u03d1\u03d2", - "\u0003\u0002\u0002\u0002\u03d2\u03de\u0003\u0002\u0002\u0002\u03d3\u03d4", - "\u0007z\u0002\u0002\u03d4\u03d5\u0007)\u0002\u0002\u03d5\u03d7\u0003", - "\u0002\u0002\u0002\u03d6\u03d8\u0005\u008dG\u0002\u03d7\u03d6\u0003", - "\u0002\u0002\u0002\u03d8\u03d9\u0003\u0002\u0002\u0002\u03d9\u03d7\u0003", - "\u0002\u0002\u0002\u03d9\u03da\u0003\u0002\u0002\u0002\u03da\u03db\u0003", - "\u0002\u0002\u0002\u03db\u03dc\u0007)\u0002\u0002\u03dc\u03de\u0003", - "\u0002\u0002\u0002\u03dd\u03cb\u0003\u0002\u0002\u0002\u03dd\u03d3\u0003", - "\u0002\u0002\u0002\u03de\u0090\u0003\u0002\u0002\u0002\u03df\u03e0\u0007", - "2\u0002\u0002\u03e0\u03e1\u0007d\u0002\u0002\u03e1\u03e3\u0003\u0002", - "\u0002\u0002\u03e2\u03e4\t\u001e\u0002\u0002\u03e3\u03e2\u0003\u0002", - "\u0002\u0002\u03e4\u03e5\u0003\u0002\u0002\u0002\u03e5\u03e3\u0003\u0002", - "\u0002\u0002\u03e5\u03e6\u0003\u0002\u0002\u0002\u03e6\u03f1\u0003\u0002", - "\u0002\u0002\u03e7\u03e8\u0007d\u0002\u0002\u03e8\u03e9\u0007)\u0002", - "\u0002\u03e9\u03eb\u0003\u0002\u0002\u0002\u03ea\u03ec\t\u001e\u0002", - "\u0002\u03eb\u03ea\u0003\u0002\u0002\u0002\u03ec\u03ed\u0003\u0002\u0002", - "\u0002\u03ed\u03eb\u0003\u0002\u0002\u0002\u03ed\u03ee\u0003\u0002\u0002", - "\u0002\u03ee\u03ef\u0003\u0002\u0002\u0002\u03ef\u03f1\u0007)\u0002", - "\u0002\u03f0\u03df\u0003\u0002\u0002\u0002\u03f0\u03e7\u0003\u0002\u0002", - "\u0002\u03f1\u0092\u0003\u0002\u0002\u0002\u03f2\u03f3\u0005\u008bF", - "\u0002\u03f3\u0094\u0003\u0002\u0002\u0002\u03f4\u03f6\u0005\u008bF", - "\u0002\u03f5\u03f4\u0003\u0002\u0002\u0002\u03f5\u03f6\u0003\u0002\u0002", - "\u0002\u03f6\u03f7\u0003\u0002\u0002\u0002\u03f7\u03f8\u0005/\u0018", - "\u0002\u03f8\u03f9\u0005\u008bF\u0002\u03f9\u0096\u0003\u0002\u0002", - "\u0002\u03fa\u03fc\u0005\u008bF\u0002\u03fb\u03fa\u0003\u0002\u0002", - "\u0002\u03fb\u03fc\u0003\u0002\u0002\u0002\u03fc\u03fd\u0003\u0002\u0002", - "\u0002\u03fd\u03ff\u0005/\u0018\u0002\u03fe\u03fb\u0003\u0002\u0002", - "\u0002\u03fe\u03ff\u0003\u0002\u0002\u0002\u03ff\u0400\u0003\u0002\u0002", - "\u0002\u0400\u0401\u0005\u008bF\u0002\u0401\u0404\t\u0006\u0002\u0002", - "\u0402\u0405\u0005\u0015\u000b\u0002\u0403\u0405\u0005\u0013\n\u0002", - "\u0404\u0402\u0003\u0002\u0002\u0002\u0404\u0403\u0003\u0002\u0002\u0002", - "\u0404\u0405\u0003\u0002\u0002\u0002\u0405\u0406\u0003\u0002\u0002\u0002", - "\u0406\u0407\u0005\u008bF\u0002\u0407\u0098\u0003\u0002\u0002\u0002", - "\u0408\u0409\u0005{>\u0002\u0409\u040a\u0005e3\u0002\u040a\u040b\u0005", - "o8\u0002\u040b\u040c\u0005\u0085C\u0002\u040c\u040d\u0005e3\u0002\u040d", - "\u040e\u0005o8\u0002\u040e\u040f\u0005{>\u0002\u040f\u009a\u0003\u0002", - "\u0002\u0002\u0410\u0411\u0005y=\u0002\u0411\u0412\u0005m7\u0002\u0412", - "\u0413\u0005U+\u0002\u0413\u0414\u0005k6\u0002\u0414\u0415\u0005k6\u0002", - "\u0415\u0416\u0005e3\u0002\u0416\u0417\u0005o8\u0002\u0417\u0418\u0005", - "{>\u0002\u0418\u009c\u0003\u0002\u0002\u0002\u0419\u041a\u0005m7\u0002", - "\u041a\u041b\u0005]/\u0002\u041b\u041c\u0005[.\u0002\u041c\u041d\u0005", - "e3\u0002\u041d\u041e\u0005}?\u0002\u041e\u041f\u0005m7\u0002\u041f\u0420", - "\u0005e3\u0002\u0420\u0421\u0005o8\u0002\u0421\u0422\u0005{>\u0002\u0422", - "\u009e\u0003\u0002\u0002\u0002\u0423\u0424\u0005W,\u0002\u0424\u0425", - "\u0005\u0085C\u0002\u0425\u0426\u0005{>\u0002\u0426\u0427\u0005]/\u0002", - "\u0427\u0428\u0005e3\u0002\u0428\u0429\u0005o8\u0002\u0429\u042a\u0005", - "{>\u0002\u042a\u00a0\u0003\u0002\u0002\u0002\u042b\u042c\u0005e3\u0002", - "\u042c\u042d\u0005o8\u0002\u042d\u042e\u0005{>\u0002\u042e\u042f\u0005", - "]/\u0002\u042f\u0430\u0005a1\u0002\u0430\u0431\u0005]/\u0002\u0431\u0432", - "\u0005w<\u0002\u0432\u0438\u0003\u0002\u0002\u0002\u0433\u0434\u0005", - "e3\u0002\u0434\u0435\u0005o8\u0002\u0435\u0436\u0005{>\u0002\u0436\u0438", - "\u0003\u0002\u0002\u0002\u0437\u042b\u0003\u0002\u0002\u0002\u0437\u0433", - "\u0003\u0002\u0002\u0002\u0438\u00a2\u0003\u0002\u0002\u0002\u0439\u043a", - "\u0005W,\u0002\u043a\u043b\u0005e3\u0002\u043b\u043c\u0005a1\u0002\u043c", - "\u043d\u0005e3\u0002\u043d\u043e\u0005o8\u0002\u043e\u043f\u0005{>\u0002", - "\u043f\u00a4\u0003\u0002\u0002\u0002\u0440\u0441\u0005y=\u0002\u0441", - "\u0442\u0005]/\u0002\u0442\u0443\u0005Y-\u0002\u0443\u0444\u0005q9\u0002", - "\u0444\u0445\u0005o8\u0002\u0445\u0446\u0005[.\u0002\u0446\u00a6\u0003", - "\u0002\u0002\u0002\u0447\u0448\u0005m7\u0002\u0448\u0449\u0005e3\u0002", - "\u0449\u044a\u0005o8\u0002\u044a\u044b\u0005}?\u0002\u044b\u044c\u0005", - "{>\u0002\u044c\u044d\u0005]/\u0002\u044d\u00a8\u0003\u0002\u0002\u0002", - "\u044e\u044f\u0005c2\u0002\u044f\u0450\u0005q9\u0002\u0450\u0451\u0005", - "}?\u0002\u0451\u0452\u0005w<\u0002\u0452\u00aa\u0003\u0002\u0002\u0002", - "\u0453\u0454\u0005[.\u0002\u0454\u0455\u0005U+\u0002\u0455\u0456\u0005", - "\u0085C\u0002\u0456\u00ac\u0003\u0002\u0002\u0002\u0457\u0458\u0005", - "\u0081A\u0002\u0458\u0459\u0005]/\u0002\u0459\u045a\u0005]/\u0002\u045a", - "\u045b\u0005i5\u0002\u045b\u00ae\u0003\u0002\u0002\u0002\u045c\u045d", - "\u0005m7\u0002\u045d\u045e\u0005q9\u0002\u045e\u045f\u0005o8\u0002\u045f", - "\u0460\u0005{>\u0002\u0460\u0461\u0005c2\u0002\u0461\u00b0\u0003\u0002", - "\u0002\u0002\u0462\u0463\u0005u;\u0002\u0463\u0464\u0005}?\u0002\u0464", - "\u0465\u0005U+\u0002\u0465\u0466\u0005w<\u0002\u0466\u0467\u0005{>\u0002", - "\u0467\u0468\u0005]/\u0002\u0468\u0469\u0005w<\u0002\u0469\u00b2\u0003", - "\u0002\u0002\u0002\u046a\u046b\u0005\u0085C\u0002\u046b\u046c\u0005", - "]/\u0002\u046c\u046d\u0005U+\u0002\u046d\u046e\u0005w<\u0002\u046e\u00b4", - "\u0003\u0002\u0002\u0002\u046f\u0470\u0005[.\u0002\u0470\u0471\u0005", - "]/\u0002\u0471\u0472\u0005_0\u0002\u0472\u0473\u0005U+\u0002\u0473\u0474", - "\u0005}?\u0002\u0474\u0475\u0005k6\u0002\u0475\u0476\u0005{>\u0002\u0476", - "\u00b6\u0003\u0002\u0002\u0002\u0477\u0478\u0005}?\u0002\u0478\u0479", - "\u0005o8\u0002\u0479\u047a\u0005e3\u0002\u047a\u047b\u0005q9\u0002\u047b", - "\u047c\u0005o8\u0002\u047c\u00b8\u0003\u0002\u0002\u0002\u047d\u047e", - "\u0005y=\u0002\u047e\u047f\u0005]/\u0002\u047f\u0480\u0005k6\u0002\u0480", - "\u0481\u0005]/\u0002\u0481\u0482\u0005Y-\u0002\u0482\u0483\u0005{>\u0002", - "\u0483\u00ba\u0003\u0002\u0002\u0002\u0484\u0485\u0005U+\u0002\u0485", - "\u0486\u0005k6\u0002\u0486\u0487\u0005k6\u0002\u0487\u00bc\u0003\u0002", - "\u0002\u0002\u0488\u0489\u0005[.\u0002\u0489\u048a\u0005e3\u0002\u048a", - "\u048b\u0005y=\u0002\u048b\u048c\u0005{>\u0002\u048c\u048d\u0005e3\u0002", - "\u048d\u048e\u0005o8\u0002\u048e\u048f\u0005Y-\u0002\u048f\u0490\u0005", - "{>\u0002\u0490\u00be\u0003\u0002\u0002\u0002\u0491\u0492\u0005y=\u0002", - "\u0492\u0493\u0005{>\u0002\u0493\u0494\u0005w<\u0002\u0494\u0495\u0005", - "U+\u0002\u0495\u0496\u0005e3\u0002\u0496\u0497\u0005a1\u0002\u0497\u0498", - "\u0005c2\u0002\u0498\u0499\u0005{>\u0002\u0499\u049a\u0007a\u0002\u0002", - "\u049a\u049b\u0005g4\u0002\u049b\u049c\u0005q9\u0002\u049c\u049d\u0005", - "e3\u0002\u049d\u049e\u0005o8\u0002\u049e\u00c0\u0003\u0002\u0002\u0002", - "\u049f\u04a0\u0005c2\u0002\u04a0\u04a1\u0005e3\u0002\u04a1\u04a2\u0005", - "a1\u0002\u04a2\u04a3\u0005c2\u0002\u04a3\u04a4\u0007a\u0002\u0002\u04a4", - "\u04a5\u0005s:\u0002\u04a5\u04a6\u0005w<\u0002\u04a6\u04a7\u0005e3\u0002", - "\u04a7\u04a8\u0005q9\u0002\u04a8\u04a9\u0005w<\u0002\u04a9\u04aa\u0005", - "e3\u0002\u04aa\u04ab\u0005{>\u0002\u04ab\u04ac\u0005\u0085C\u0002\u04ac", - "\u00c2\u0003\u0002\u0002\u0002\u04ad\u04ae\u0005y=\u0002\u04ae\u04af", - "\u0005u;\u0002\u04af\u04b0\u0005k6\u0002\u04b0\u04b1\u0007a\u0002\u0002", - "\u04b1\u04b2\u0005y=\u0002\u04b2\u04b3\u0005m7\u0002\u04b3\u04b4\u0005", - "U+\u0002\u04b4\u04b5\u0005k6\u0002\u04b5\u04b6\u0005k6\u0002\u04b6\u04b7", - "\u0007a\u0002\u0002\u04b7\u04b8\u0005w<\u0002\u04b8\u04b9\u0005]/\u0002", - "\u04b9\u04ba\u0005y=\u0002\u04ba\u04bb\u0005}?\u0002\u04bb\u04bc\u0005", - "k6\u0002\u04bc\u04bd\u0005{>\u0002\u04bd\u00c4\u0003\u0002\u0002\u0002", - "\u04be\u04bf\u0005y=\u0002\u04bf\u04c0\u0005u;\u0002\u04c0\u04c1\u0005", - "k6\u0002\u04c1\u04c2\u0007a\u0002\u0002\u04c2\u04c3\u0005W,\u0002\u04c3", - "\u04c4\u0005e3\u0002\u04c4\u04c5\u0005a1\u0002\u04c5\u04c6\u0007a\u0002", - "\u0002\u04c6\u04c7\u0005w<\u0002\u04c7\u04c8\u0005]/\u0002\u04c8\u04c9", - "\u0005y=\u0002\u04c9\u04ca\u0005}?\u0002\u04ca\u04cb\u0005k6\u0002\u04cb", - "\u04cc\u0005{>\u0002\u04cc\u00c6\u0003\u0002\u0002\u0002\u04cd\u04ce", - "\u0005y=\u0002\u04ce\u04cf\u0005u;\u0002\u04cf\u04d0\u0005k6\u0002\u04d0", - "\u04d1\u0007a\u0002\u0002\u04d1\u04d2\u0005W,\u0002\u04d2\u04d3\u0005", - "}?\u0002\u04d3\u04d4\u0005_0\u0002\u04d4\u04d5\u0005_0\u0002\u04d5\u04d6", - "\u0005]/\u0002\u04d6\u04d7\u0005w<\u0002\u04d7\u04d8\u0007a\u0002\u0002", - "\u04d8\u04d9\u0005w<\u0002\u04d9\u04da\u0005]/\u0002\u04da\u04db\u0005", - "y=\u0002\u04db\u04dc\u0005}?\u0002\u04dc\u04dd\u0005k6\u0002\u04dd\u04de", - "\u0005{>\u0002\u04de\u00c8\u0003\u0002\u0002\u0002\u04df\u04e0\u0005", - "y=\u0002\u04e0\u04e1\u0005u;\u0002\u04e1\u04e2\u0005k6\u0002\u04e2\u04e3", - "\u0007a\u0002\u0002\u04e3\u04e4\u0005Y-\u0002\u04e4\u04e5\u0005U+\u0002", - "\u04e5\u04e6\u0005k6\u0002\u04e6\u04e7\u0005Y-\u0002\u04e7\u04e8\u0007", - "a\u0002\u0002\u04e8\u04e9\u0005_0\u0002\u04e9\u04ea\u0005q9\u0002\u04ea", - "\u04eb\u0005}?\u0002\u04eb\u04ec\u0005o8\u0002\u04ec\u04ed\u0005[.\u0002", - "\u04ed\u04ee\u0007a\u0002\u0002\u04ee\u04ef\u0005w<\u0002\u04ef\u04f0", - "\u0005q9\u0002\u04f0\u04f1\u0005\u0081A\u0002\u04f1\u04f2\u0005y=\u0002", - "\u04f2\u00ca\u0003\u0002\u0002\u0002\u04f3\u04f4\u0005k6\u0002\u04f4", - "\u04f5\u0005e3\u0002\u04f5\u04f6\u0005m7\u0002\u04f6\u04f7\u0005e3\u0002", - "\u04f7\u04f8\u0005{>\u0002\u04f8\u00cc\u0003\u0002\u0002\u0002\u04f9", - "\u04fa\u0005q9\u0002\u04fa\u04fb\u0005_0\u0002\u04fb\u04fc\u0005_0\u0002", - "\u04fc\u04fd\u0005y=\u0002\u04fd\u04fe\u0005]/\u0002\u04fe\u04ff\u0005", - "{>\u0002\u04ff\u00ce\u0003\u0002\u0002\u0002\u0500\u0501\u0005e3\u0002", - "\u0501\u0502\u0005o8\u0002\u0502\u0503\u0005{>\u0002\u0503\u0504\u0005", - "q9\u0002\u0504\u00d0\u0003\u0002\u0002\u0002\u0505\u0506\u0005q9\u0002", - "\u0506\u0507\u0005}?\u0002\u0507\u0508\u0005{>\u0002\u0508\u0509\u0005", - "_0\u0002\u0509\u050a\u0005e3\u0002\u050a\u050b\u0005k6\u0002\u050b\u050c", - "\u0005]/\u0002\u050c\u00d2\u0003\u0002\u0002\u0002\u050d\u050e\u0005", - "[.\u0002\u050e\u050f\u0005}?\u0002\u050f\u0510\u0005m7\u0002\u0510\u0511", - "\u0005s:\u0002\u0511\u0512\u0005_0\u0002\u0512\u0513\u0005e3\u0002\u0513", - "\u0514\u0005k6\u0002\u0514\u0515\u0005]/\u0002\u0515\u00d4\u0003\u0002", - "\u0002\u0002\u0516\u0517\u0005s:\u0002\u0517\u0518\u0005w<\u0002\u0518", - "\u0519\u0005q9\u0002\u0519\u051a\u0005Y-\u0002\u051a\u051b\u0005]/\u0002", - "\u051b\u051c\u0005[.\u0002\u051c\u051d\u0005}?\u0002\u051d\u051e\u0005", - "w<\u0002\u051e\u051f\u0005]/\u0002\u051f\u00d6\u0003\u0002\u0002\u0002", - "\u0520\u0521\u0005U+\u0002\u0521\u0522\u0005o8\u0002\u0522\u0523\u0005", - "U+\u0002\u0523\u0524\u0005k6\u0002\u0524\u0525\u0005\u0085C\u0002\u0525", - "\u0526\u0005y=\u0002\u0526\u0527\u0005]/\u0002\u0527\u00d8\u0003\u0002", - "\u0002\u0002\u0528\u0529\u0005c2\u0002\u0529\u052a\u0005U+\u0002\u052a", - "\u052b\u0005\u007f@\u0002\u052b\u052c\u0005e3\u0002\u052c\u052d\u0005", - "o8\u0002\u052d\u052e\u0005a1\u0002\u052e\u00da\u0003\u0002\u0002\u0002", - "\u052f\u0530\u0005\u0081A\u0002\u0530\u0531\u0005e3\u0002\u0531\u0532", - "\u0005o8\u0002\u0532\u0533\u0005[.\u0002\u0533\u0534\u0005q9\u0002\u0534", - "\u0535\u0005\u0081A\u0002\u0535\u00dc\u0003\u0002\u0002\u0002\u0536", - "\u0537\u0005U+\u0002\u0537\u0538\u0005y=\u0002\u0538\u00de\u0003\u0002", - "\u0002\u0002\u0539\u053a\u0005s:\u0002\u053a\u053b\u0005U+\u0002\u053b", - "\u053c\u0005w<\u0002\u053c\u053d\u0005{>\u0002\u053d\u053e\u0005e3\u0002", - "\u053e\u053f\u0005{>\u0002\u053f\u0540\u0005e3\u0002\u0540\u0541\u0005", - "q9\u0002\u0541\u0542\u0005o8\u0002\u0542\u00e0\u0003\u0002\u0002\u0002", - "\u0543\u0544\u0005W,\u0002\u0544\u0545\u0005\u0085C\u0002\u0545\u00e2", - "\u0003\u0002\u0002\u0002\u0546\u0547\u0005w<\u0002\u0547\u0548\u0005", - "q9\u0002\u0548\u0549\u0005\u0081A\u0002\u0549\u054a\u0005y=\u0002\u054a", - "\u00e4\u0003\u0002\u0002\u0002\u054b\u054c\u0005w<\u0002\u054c\u054d", - "\u0005U+\u0002\u054d\u054e\u0005o8\u0002\u054e\u054f\u0005a1\u0002\u054f", - "\u0550\u0005]/\u0002\u0550\u00e6\u0003\u0002\u0002\u0002\u0551\u0552", - "\u0005a1\u0002\u0552\u0553\u0005w<\u0002\u0553\u0554\u0005q9\u0002\u0554", - "\u0555\u0005}?\u0002\u0555\u0556\u0005s:\u0002\u0556\u0557\u0005y=\u0002", - "\u0557\u00e8\u0003\u0002\u0002\u0002\u0558\u0559\u0005}?\u0002\u0559", - "\u055a\u0005o8\u0002\u055a\u055b\u0005W,\u0002\u055b\u055c\u0005q9\u0002", - "\u055c\u055d\u0005}?\u0002\u055d\u055e\u0005o8\u0002\u055e\u055f\u0005", - "[.\u0002\u055f\u0560\u0005]/\u0002\u0560\u0561\u0005[.\u0002\u0561\u00ea", - "\u0003\u0002\u0002\u0002\u0562\u0563\u0005s:\u0002\u0563\u0564\u0005", - "w<\u0002\u0564\u0565\u0005]/\u0002\u0565\u0566\u0005Y-\u0002\u0566\u0567", - "\u0005]/\u0002\u0567\u0568\u0005[.\u0002\u0568\u0569\u0005e3\u0002\u0569", - "\u056a\u0005o8\u0002\u056a\u056b\u0005a1\u0002\u056b\u00ec\u0003\u0002", - "\u0002\u0002\u056c\u056d\u0005e3\u0002\u056d\u056e\u0005o8\u0002\u056e", - "\u056f\u0005{>\u0002\u056f\u0570\u0005]/\u0002\u0570\u0571\u0005w<\u0002", - "\u0571\u0572\u0005\u007f@\u0002\u0572\u0573\u0005U+\u0002\u0573\u0574", - "\u0005k6\u0002\u0574\u00ee\u0003\u0002\u0002\u0002\u0575\u0576\u0005", - "Y-\u0002\u0576\u0577\u0005}?\u0002\u0577\u0578\u0005w<\u0002\u0578\u0579", - "\u0005w<\u0002\u0579\u057a\u0005]/\u0002\u057a\u057b\u0005o8\u0002\u057b", - "\u057c\u0005{>\u0002\u057c\u00f0\u0003\u0002\u0002\u0002\u057d\u057e", - "\u0005w<\u0002\u057e\u057f\u0005q9\u0002\u057f\u0580\u0005\u0081A\u0002", - "\u0580\u00f2\u0003\u0002\u0002\u0002\u0581\u0582\u0005W,\u0002\u0582", - "\u0583\u0005]/\u0002\u0583\u0584\u0005{>\u0002\u0584\u0585\u0005\u0081", - "A\u0002\u0585\u0586\u0005]/\u0002\u0586\u0587\u0005]/\u0002\u0587\u0588", - "\u0005o8\u0002\u0588\u00f4\u0003\u0002\u0002\u0002\u0589\u058a\u0005", - "U+\u0002\u058a\u058b\u0005o8\u0002\u058b\u058c\u0005[.\u0002\u058c\u00f6", - "\u0003\u0002\u0002\u0002\u058d\u058e\u0005_0\u0002\u058e\u058f\u0005", - "q9\u0002\u058f\u0590\u0005k6\u0002\u0590\u0591\u0005k6\u0002\u0591\u0592", - "\u0005q9\u0002\u0592\u0593\u0005\u0081A\u0002\u0593\u0594\u0005e3\u0002", - "\u0594\u0595\u0005o8\u0002\u0595\u0596\u0005a1\u0002\u0596\u00f8\u0003", - "\u0002\u0002\u0002\u0597\u0598\u0005]/\u0002\u0598\u0599\u0005\u0083", - "B\u0002\u0599\u059a\u0005Y-\u0002\u059a\u059b\u0005k6\u0002\u059b\u059c", - "\u0005}?\u0002\u059c\u059d\u0005[.\u0002\u059d\u059e\u0005]/\u0002\u059e", - "\u00fa\u0003\u0002\u0002\u0002\u059f\u05a0\u0005a1\u0002\u05a0\u05a1", - "\u0005w<\u0002\u05a1\u05a2\u0005q9\u0002\u05a2\u05a3\u0005}?\u0002\u05a3", - "\u05a4\u0005s:\u0002\u05a4\u00fc\u0003\u0002\u0002\u0002\u05a5\u05a6", - "\u0005{>\u0002\u05a6\u05a7\u0005e3\u0002\u05a7\u05a8\u0005]/\u0002\u05a8", - "\u05a9\u0005y=\u0002\u05a9\u00fe\u0003\u0002\u0002\u0002\u05aa\u05ab", - "\u0005o8\u0002\u05ab\u05ac\u0005q9\u0002\u05ac\u0100\u0003\u0002\u0002", - "\u0002\u05ad\u05ae\u0005q9\u0002\u05ae\u05af\u0005{>\u0002\u05af\u05b0", - "\u0005c2\u0002\u05b0\u05b1\u0005]/\u0002\u05b1\u05b2\u0005w<\u0002\u05b2", - "\u05b3\u0005y=\u0002\u05b3\u0102\u0003\u0002\u0002\u0002\u05b4\u05b5", - "\u0005\u0081A\u0002\u05b5\u05b6\u0005e3\u0002\u05b6\u05b7\u0005{>\u0002", - "\u05b7\u05b8\u0005c2\u0002\u05b8\u0104\u0003\u0002\u0002\u0002\u05b9", - "\u05ba\u0005\u0081A\u0002\u05ba\u05bb\u0005e3\u0002\u05bb\u05bc\u0005", - "{>\u0002\u05bc\u05bd\u0005c2\u0002\u05bd\u05be\u0005q9\u0002\u05be\u05bf", - "\u0005}?\u0002\u05bf\u05c0\u0005{>\u0002\u05c0\u0106\u0003\u0002\u0002", - "\u0002\u05c1\u05c2\u0005w<\u0002\u05c2\u05c3\u0005]/\u0002\u05c3\u05c4", - "\u0005Y-\u0002\u05c4\u05c5\u0005}?\u0002\u05c5\u05c6\u0005w<\u0002\u05c6", - "\u05c7\u0005y=\u0002\u05c7\u05c8\u0005e3\u0002\u05c8\u05c9\u0005\u007f", - "@\u0002\u05c9\u05ca\u0005]/\u0002\u05ca\u0108\u0003\u0002\u0002\u0002", - "\u05cb\u05cc\u0005w<\u0002\u05cc\u05cd\u0005q9\u0002\u05cd\u05ce\u0005", - "k6\u0002\u05ce\u05cf\u0005k6\u0002\u05cf\u05d0\u0005}?\u0002\u05d0\u05d1", - "\u0005s:\u0002\u05d1\u010a\u0003\u0002\u0002\u0002\u05d2\u05d3\u0005", - "Y-\u0002\u05d3\u05d4\u0005}?\u0002\u05d4\u05d5\u0005W,\u0002\u05d5\u05d6", - "\u0005]/\u0002\u05d6\u010c\u0003\u0002\u0002\u0002\u05d7\u05d8\u0005", - "q9\u0002\u05d8\u05d9\u0005w<\u0002\u05d9\u05da\u0005[.\u0002\u05da\u05db", - "\u0005]/\u0002\u05db\u05dc\u0005w<\u0002\u05dc\u010e\u0003\u0002\u0002", - "\u0002\u05dd\u05de\u0005U+\u0002\u05de\u05df\u0005y=\u0002\u05df\u05e0", - "\u0005Y-\u0002\u05e0\u0110\u0003\u0002\u0002\u0002\u05e1\u05e2\u0005", - "[.\u0002\u05e2\u05e3\u0005]/\u0002\u05e3\u05e4\u0005y=\u0002\u05e4\u05e5", - "\u0005Y-\u0002\u05e5\u0112\u0003\u0002\u0002\u0002\u05e6\u05e7\u0005", - "_0\u0002\u05e7\u05e8\u0005w<\u0002\u05e8\u05e9\u0005q9\u0002\u05e9\u05ea", - "\u0005m7\u0002\u05ea\u0114\u0003\u0002\u0002\u0002\u05eb\u05ec\u0005", - "[.\u0002\u05ec\u05ed\u0005}?\u0002\u05ed\u05ee\u0005U+\u0002\u05ee\u05ef", - "\u0005k6\u0002\u05ef\u0116\u0003\u0002\u0002\u0002\u05f0\u05f1\u0005", - "\u007f@\u0002\u05f1\u05f2\u0005U+\u0002\u05f2\u05f3\u0005k6\u0002\u05f3", - "\u05f4\u0005}?\u0002\u05f4\u05f5\u0005]/\u0002\u05f5\u05f6\u0005y=\u0002", - "\u05f6\u0118\u0003\u0002\u0002\u0002\u05f7\u05f8\u0005{>\u0002\u05f8", - "\u05f9\u0005U+\u0002\u05f9\u05fa\u0005W,\u0002\u05fa\u05fb\u0005k6\u0002", - "\u05fb\u05fc\u0005]/\u0002\u05fc\u011a\u0003\u0002\u0002\u0002\u05fd", - "\u05fe\u0005y=\u0002\u05fe\u05ff\u0005u;\u0002\u05ff\u0600\u0005k6\u0002", - "\u0600\u0601\u0007a\u0002\u0002\u0601\u0602\u0005o8\u0002\u0602\u0603", - "\u0005q9\u0002\u0603\u0604\u0007a\u0002\u0002\u0604\u0605\u0005Y-\u0002", - "\u0605\u0606\u0005U+\u0002\u0606\u0607\u0005Y-\u0002\u0607\u0608\u0005", - "c2\u0002\u0608\u0609\u0005]/\u0002\u0609\u011c\u0003\u0002\u0002\u0002", - "\u060a\u060b\u0005y=\u0002\u060b\u060c\u0005u;\u0002\u060c\u060d\u0005", - "k6\u0002\u060d\u060e\u0007a\u0002\u0002\u060e\u060f\u0005Y-\u0002\u060f", - "\u0610\u0005U+\u0002\u0610\u0611\u0005Y-\u0002\u0611\u0612\u0005c2\u0002", - "\u0612\u0613\u0005]/\u0002\u0613\u011e\u0003\u0002\u0002\u0002\u0614", - "\u0615\u0005m7\u0002\u0615\u0616\u0005U+\u0002\u0616\u0617\u0005\u0083", - "B\u0002\u0617\u0618\u0007a\u0002\u0002\u0618\u0619\u0005y=\u0002\u0619", - "\u061a\u0005{>\u0002\u061a\u061b\u0005U+\u0002\u061b\u061c\u0005{>\u0002", - "\u061c\u061d\u0005]/\u0002\u061d\u061e\u0005m7\u0002\u061e\u061f\u0005", - "]/\u0002\u061f\u0620\u0005o8\u0002\u0620\u0621\u0005{>\u0002\u0621\u0622", - "\u0007a\u0002\u0002\u0622\u0623\u0005{>\u0002\u0623\u0624\u0005e3\u0002", - "\u0624\u0625\u0005m7\u0002\u0625\u0626\u0005]/\u0002\u0626\u0120\u0003", - "\u0002\u0002\u0002\u0627\u0628\u0005_0\u0002\u0628\u0629\u0005q9\u0002", - "\u0629\u062a\u0005w<\u0002\u062a\u0122\u0003\u0002\u0002\u0002\u062b", - "\u062c\u0005q9\u0002\u062c\u062d\u0005_0\u0002\u062d\u0124\u0003\u0002", - "\u0002\u0002\u062e\u062f\u0005k6\u0002\u062f\u0630\u0005q9\u0002\u0630", - "\u0631\u0005Y-\u0002\u0631\u0632\u0005i5\u0002\u0632\u0126\u0003\u0002", - "\u0002\u0002\u0633\u0634\u0005e3\u0002\u0634\u0635\u0005o8\u0002\u0635", - "\u0128\u0003\u0002\u0002\u0002\u0636\u0637\u0005y=\u0002\u0637\u0638", - "\u0005c2\u0002\u0638\u0639\u0005U+\u0002\u0639\u063a\u0005w<\u0002\u063a", - "\u063b\u0005]/\u0002\u063b\u012a\u0003\u0002\u0002\u0002\u063c\u063d", - "\u0005m7\u0002\u063d\u063e\u0005q9\u0002\u063e\u063f\u0005[.\u0002\u063f", - "\u0640\u0005]/\u0002\u0640\u012c\u0003\u0002\u0002\u0002\u0641\u0642", - "\u0005}?\u0002\u0642\u0643\u0005s:\u0002\u0643\u0644\u0005[.\u0002\u0644", - "\u0645\u0005U+\u0002\u0645\u0646\u0005{>\u0002\u0646\u0647\u0005]/\u0002", - "\u0647\u012e\u0003\u0002\u0002\u0002\u0648\u0649\u0005y=\u0002\u0649", - "\u064a\u0005i5\u0002\u064a\u064b\u0005e3\u0002\u064b\u064c\u0005s:\u0002", - "\u064c\u0130\u0003\u0002\u0002\u0002\u064d\u064e\u0005k6\u0002\u064e", - "\u064f\u0005q9\u0002\u064f\u0650\u0005Y-\u0002\u0650\u0651\u0005i5\u0002", - "\u0651\u0652\u0005]/\u0002\u0652\u0653\u0005[.\u0002\u0653\u0132\u0003", - "\u0002\u0002\u0002\u0654\u0655\u0005o8\u0002\u0655\u0656\u0005q9\u0002", - "\u0656\u0657\u0005\u0081A\u0002\u0657\u0658\u0005U+\u0002\u0658\u0659", - "\u0005e3\u0002\u0659\u065a\u0005{>\u0002\u065a\u0134\u0003\u0002\u0002", - "\u0002\u065b\u065c\u0005\u0081A\u0002\u065c\u065d\u0005c2\u0002\u065d", - "\u065e\u0005]/\u0002\u065e\u065f\u0005w<\u0002\u065f\u0660\u0005]/\u0002", - "\u0660\u0136\u0003\u0002\u0002\u0002\u0661\u0662\u0005q9\u0002\u0662", - "\u0663\u0005g4\u0002\u0663\u0138\u0003\u0002\u0002\u0002\u0664\u0665", - "\u0005q9\u0002\u0665\u0666\u0005o8\u0002\u0666\u013a\u0003\u0002\u0002", - "\u0002\u0667\u0668\u0005}?\u0002\u0668\u0669\u0005y=\u0002\u0669\u066a", - "\u0005e3\u0002\u066a\u066b\u0005o8\u0002\u066b\u066c\u0005a1\u0002\u066c", - "\u013c\u0003\u0002\u0002\u0002\u066d\u066e\u0005o8\u0002\u066e\u066f", - "\u0005U+\u0002\u066f\u0670\u0005{>\u0002\u0670\u0671\u0005}?\u0002\u0671", - "\u0672\u0005w<\u0002\u0672\u0673\u0005U+\u0002\u0673\u0674\u0005k6\u0002", - "\u0674\u013e\u0003\u0002\u0002\u0002\u0675\u0676\u0005e3\u0002\u0676", - "\u0677\u0005o8\u0002\u0677\u0678\u0005o8\u0002\u0678\u0679\u0005]/\u0002", - "\u0679\u067a\u0005w<\u0002\u067a\u0140\u0003\u0002\u0002\u0002\u067b", - "\u067c\u0005g4\u0002\u067c\u067d\u0005q9\u0002\u067d\u067e\u0005e3\u0002", - "\u067e\u067f\u0005o8\u0002\u067f\u0142\u0003\u0002\u0002\u0002\u0680", - "\u0681\u0005k6\u0002\u0681\u0682\u0005]/\u0002\u0682\u0683\u0005_0\u0002", - "\u0683\u0684\u0005{>\u0002\u0684\u0144\u0003\u0002\u0002\u0002\u0685", - "\u0686\u0005w<\u0002\u0686\u0687\u0005e3\u0002\u0687\u0688\u0005a1\u0002", - "\u0688\u0689\u0005c2\u0002\u0689\u068a\u0005{>\u0002\u068a\u0146\u0003", - "\u0002\u0002\u0002\u068b\u068c\u0005q9\u0002\u068c\u068d\u0005}?\u0002", - "\u068d\u068e\u0005{>\u0002\u068e\u068f\u0005]/\u0002\u068f\u0690\u0005", - "w<\u0002\u0690\u0148\u0003\u0002\u0002\u0002\u0691\u0692\u0005Y-\u0002", - "\u0692\u0693\u0005w<\u0002\u0693\u0694\u0005q9\u0002\u0694\u0695\u0005", - "y=\u0002\u0695\u0696\u0005y=\u0002\u0696\u014a\u0003\u0002\u0002\u0002", - "\u0697\u0698\u0005k6\u0002\u0698\u0699\u0005U+\u0002\u0699\u069a\u0005", - "{>\u0002\u069a\u069b\u0005]/\u0002\u069b\u069c\u0005w<\u0002\u069c\u069d", - "\u0005U+\u0002\u069d\u069e\u0005k6\u0002\u069e\u014c\u0003\u0002\u0002", - "\u0002\u069f\u06a0\u0005g4\u0002\u06a0\u06a1\u0005y=\u0002\u06a1\u06a2", - "\u0005q9\u0002\u06a2\u06a3\u0005o8\u0002\u06a3\u06a4\u0007a\u0002\u0002", - "\u06a4\u06a5\u0005{>\u0002\u06a5\u06a6\u0005U+\u0002\u06a6\u06a7\u0005", - "W,\u0002\u06a7\u06a8\u0005k6\u0002\u06a8\u06a9\u0005]/\u0002\u06a9\u014e", - "\u0003\u0002\u0002\u0002\u06aa\u06ab\u0005Y-\u0002\u06ab\u06ac\u0005", - "q9\u0002\u06ac\u06ad\u0005k6\u0002\u06ad\u06ae\u0005}?\u0002\u06ae\u06af", - "\u0005m7\u0002\u06af\u06b0\u0005o8\u0002\u06b0\u06b1\u0005y=\u0002\u06b1", - "\u0150\u0003\u0002\u0002\u0002\u06b2\u06b3\u0005q9\u0002\u06b3\u06b4", - "\u0005w<\u0002\u06b4\u06b5\u0005[.\u0002\u06b5\u06b6\u0005e3\u0002\u06b6", - "\u06b7\u0005o8\u0002\u06b7\u06b8\u0005U+\u0002\u06b8\u06b9\u0005k6\u0002", - "\u06b9\u06ba\u0005e3\u0002\u06ba\u06bb\u0005{>\u0002\u06bb\u06bc\u0005", - "\u0085C\u0002\u06bc\u0152\u0003\u0002\u0002\u0002\u06bd\u06be\u0005", - "]/\u0002\u06be\u06bf\u0005\u0083B\u0002\u06bf\u06c0\u0005e3\u0002\u06c0", - "\u06c1\u0005y=\u0002\u06c1\u06c2\u0005{>\u0002\u06c2\u06c3\u0005y=\u0002", - "\u06c3\u0154\u0003\u0002\u0002\u0002\u06c4\u06c5\u0005s:\u0002\u06c5", - "\u06c6\u0005U+\u0002\u06c6\u06c7\u0005{>\u0002\u06c7\u06c8\u0005c2\u0002", - "\u06c8\u0156\u0003\u0002\u0002\u0002\u06c9\u06ca\u0005o8\u0002\u06ca", - "\u06cb\u0005]/\u0002\u06cb\u06cc\u0005y=\u0002\u06cc\u06cd\u0005{>\u0002", - "\u06cd\u06ce\u0005]/\u0002\u06ce\u06cf\u0005[.\u0002\u06cf\u0158\u0003", - "\u0002\u0002\u0002\u06d0\u06d1\u0005]/\u0002\u06d1\u06d2\u0005m7\u0002", - "\u06d2\u06d3\u0005s:\u0002\u06d3\u06d4\u0005{>\u0002\u06d4\u06d5\u0005", - "\u0085C\u0002\u06d5\u015a\u0003\u0002\u0002\u0002\u06d6\u06d7\u0005", - "]/\u0002\u06d7\u06d8\u0005w<\u0002\u06d8\u06d9\u0005w<\u0002\u06d9\u06da", - "\u0005q9\u0002\u06da\u06db\u0005w<\u0002\u06db\u015c\u0003\u0002\u0002", - "\u0002\u06dc\u06dd\u0005o8\u0002\u06dd\u06de\u0005}?\u0002\u06de\u06df", - "\u0005k6\u0002\u06df\u06e0\u0005k6\u0002\u06e0\u015e\u0003\u0002\u0002", - "\u0002\u06e1\u06e2\u0005}?\u0002\u06e2\u06e3\u0005y=\u0002\u06e3\u06e4", - "\u0005]/\u0002\u06e4\u0160\u0003\u0002\u0002\u0002\u06e5\u06e6\u0005", - "_0\u0002\u06e6\u06e7\u0005q9\u0002\u06e7\u06e8\u0005w<\u0002\u06e8\u06e9", - "\u0005Y-\u0002\u06e9\u06ea\u0005]/\u0002\u06ea\u0162\u0003\u0002\u0002", - "\u0002\u06eb\u06ec\u0005e3\u0002\u06ec\u06ed\u0005a1\u0002\u06ed\u06ee", - "\u0005o8\u0002\u06ee\u06ef\u0005q9\u0002\u06ef\u06f0\u0005w<\u0002\u06f0", - "\u06f1\u0005]/\u0002\u06f1\u0164\u0003\u0002\u0002\u0002\u06f2\u06f3", - "\u0005i5\u0002\u06f3\u06f4\u0005]/\u0002\u06f4\u06f5\u0005\u0085C\u0002", - "\u06f5\u0166\u0003\u0002\u0002\u0002\u06f6\u06f7\u0005e3\u0002\u06f7", - "\u06f8\u0005o8\u0002\u06f8\u06f9\u0005[.\u0002\u06f9\u06fa\u0005]/\u0002", - "\u06fa\u06fb\u0005\u0083B\u0002\u06fb\u0168\u0003\u0002\u0002\u0002", - "\u06fc\u06fd\u0005s:\u0002\u06fd\u06fe\u0005w<\u0002\u06fe\u06ff\u0005", - "e3\u0002\u06ff\u0700\u0005m7\u0002\u0700\u0701\u0005U+\u0002\u0701\u0702", - "\u0005w<\u0002\u0702\u0703\u0005\u0085C\u0002\u0703\u016a\u0003\u0002", - "\u0002\u0002\u0704\u0705\u0005e3\u0002\u0705\u0706\u0005y=\u0002\u0706", - "\u016c\u0003\u0002\u0002\u0002\u0707\u0708\u0005{>\u0002\u0708\u0709", - "\u0005w<\u0002\u0709\u070a\u0005}?\u0002\u070a\u070b\u0005]/\u0002\u070b", - "\u016e\u0003\u0002\u0002\u0002\u070c\u070d\u0005_0\u0002\u070d\u070e", - "\u0005U+\u0002\u070e\u070f\u0005k6\u0002\u070f\u0710\u0005y=\u0002\u0710", - "\u0711\u0005]/\u0002\u0711\u0170\u0003\u0002\u0002\u0002\u0712\u0713", - "\u0005}?\u0002\u0713\u0714\u0005o8\u0002\u0714\u0715\u0005i5\u0002\u0715", - "\u0716\u0005o8\u0002\u0716\u0717\u0005q9\u0002\u0717\u0718\u0005\u0081", - "A\u0002\u0718\u0719\u0005o8\u0002\u0719\u0172\u0003\u0002\u0002\u0002", - "\u071a\u071b\u0005o8\u0002\u071b\u071c\u0005q9\u0002\u071c\u071d\u0005", - "{>\u0002\u071d\u0174\u0003\u0002\u0002\u0002\u071e\u071f\u0005\u0083", - "B\u0002\u071f\u0720\u0005q9\u0002\u0720\u0721\u0005w<\u0002\u0721\u0176", - "\u0003\u0002\u0002\u0002\u0722\u0723\u0005q9\u0002\u0723\u0724\u0005", - "w<\u0002\u0724\u0178\u0003\u0002\u0002\u0002\u0725\u0726\u0005U+\u0002", - "\u0726\u0727\u0005o8\u0002\u0727\u0728\u0005\u0085C\u0002\u0728\u017a", - "\u0003\u0002\u0002\u0002\u0729\u072a\u0005m7\u0002\u072a\u072b\u0005", - "]/\u0002\u072b\u072c\u0005m7\u0002\u072c\u072d\u0005W,\u0002\u072d\u072e", - "\u0005]/\u0002\u072e\u072f\u0005w<\u0002\u072f\u017c\u0003\u0002\u0002", - "\u0002\u0730\u0731\u0005y=\u0002\u0731\u0732\u0005q9\u0002\u0732\u0733", - "\u0005}?\u0002\u0733\u0734\u0005o8\u0002\u0734\u0735\u0005[.\u0002\u0735", - "\u0736\u0005y=\u0002\u0736\u017e\u0003\u0002\u0002\u0002\u0737\u0738", - "\u0005k6\u0002\u0738\u0739\u0005e3\u0002\u0739\u073a\u0005i5\u0002\u073a", - "\u073b\u0005]/\u0002\u073b\u0180\u0003\u0002\u0002\u0002\u073c\u073d", - "\u0005]/\u0002\u073d\u073e\u0005y=\u0002\u073e\u073f\u0005Y-\u0002\u073f", - "\u0740\u0005U+\u0002\u0740\u0741\u0005s:\u0002\u0741\u0742\u0005]/\u0002", - "\u0742\u0182\u0003\u0002\u0002\u0002\u0743\u0744\u0005w<\u0002\u0744", - "\u0745\u0005]/\u0002\u0745\u0746\u0005a1\u0002\u0746\u0747\u0005]/\u0002", - "\u0747\u0748\u0005\u0083B\u0002\u0748\u0749\u0005s:\u0002\u0749\u0184", - "\u0003\u0002\u0002\u0002\u074a\u074b\u0005[.\u0002\u074b\u074c\u0005", - "e3\u0002\u074c\u074d\u0005\u007f@\u0002\u074d\u0186\u0003\u0002\u0002", - "\u0002\u074e\u074f\u0005m7\u0002\u074f\u0750\u0005q9\u0002\u0750\u0751", - "\u0005[.\u0002\u0751\u0188\u0003\u0002\u0002\u0002\u0752\u0753\u0005", - "m7\u0002\u0753\u0754\u0005U+\u0002\u0754\u0755\u0005{>\u0002\u0755\u0756", - "\u0005Y-\u0002\u0756\u0757\u0005c2\u0002\u0757\u018a\u0003\u0002\u0002", - "\u0002\u0758\u0759\u0005U+\u0002\u0759\u075a\u0005a1\u0002\u075a\u075b", - "\u0005U+\u0002\u075b\u075c\u0005e3\u0002\u075c\u075d\u0005o8\u0002\u075d", - "\u075e\u0005y=\u0002\u075e\u075f\u0005{>\u0002\u075f\u018c\u0003\u0002", - "\u0002\u0002\u0760\u0761\u0005W,\u0002\u0761\u0762\u0005e3\u0002\u0762", - "\u0763\u0005o8\u0002\u0763\u0764\u0005U+\u0002\u0764\u0765\u0005w<\u0002", - "\u0765\u0766\u0005\u0085C\u0002\u0766\u018e\u0003\u0002\u0002\u0002", - "\u0767\u0768\u0005Y-\u0002\u0768\u0769\u0005U+\u0002\u0769\u076a\u0005", - "y=\u0002\u076a\u076b\u0005{>\u0002\u076b\u0190\u0003\u0002\u0002\u0002", - "\u076c\u076d\u0005U+\u0002\u076d\u076e\u0005w<\u0002\u076e\u076f\u0005", - "w<\u0002\u076f\u0770\u0005U+\u0002\u0770\u0771\u0005\u0085C\u0002\u0771", - "\u0192\u0003\u0002\u0002\u0002\u0772\u0773\u0005Y-\u0002\u0773\u0774", - "\u0005U+\u0002\u0774\u0775\u0005y=\u0002\u0775\u0776\u0005]/\u0002\u0776", - "\u0194\u0003\u0002\u0002\u0002\u0777\u0778\u0005]/\u0002\u0778\u0779", - "\u0005o8\u0002\u0779\u077a\u0005[.\u0002\u077a\u0196\u0003\u0002\u0002", - "\u0002\u077b\u077c\u0005Y-\u0002\u077c\u077d\u0005q9\u0002\u077d\u077e", - "\u0005o8\u0002\u077e\u077f\u0005\u007f@\u0002\u077f\u0780\u0005]/\u0002", - "\u0780\u0781\u0005w<\u0002\u0781\u0782\u0005{>\u0002\u0782\u0198\u0003", - "\u0002\u0002\u0002\u0783\u0784\u0005Y-\u0002\u0784\u0785\u0005q9\u0002", - "\u0785\u0786\u0005k6\u0002\u0786\u0787\u0005k6\u0002\u0787\u0788\u0005", - "U+\u0002\u0788\u0789\u0005{>\u0002\u0789\u078a\u0005]/\u0002\u078a\u019a", - "\u0003\u0002\u0002\u0002\u078b\u078c\u0005U+\u0002\u078c\u078d\u0005", - "\u007f@\u0002\u078d\u078e\u0005a1\u0002\u078e\u019c\u0003\u0002\u0002", - "\u0002\u078f\u0790\u0005W,\u0002\u0790\u0791\u0005e3\u0002\u0791\u0792", - "\u0005{>\u0002\u0792\u0793\u0007a\u0002\u0002\u0793\u0794\u0005U+\u0002", - "\u0794\u0795\u0005o8\u0002\u0795\u0796\u0005[.\u0002\u0796\u019e\u0003", - "\u0002\u0002\u0002\u0797\u0798\u0005W,\u0002\u0798\u0799\u0005e3\u0002", - "\u0799\u079a\u0005{>\u0002\u079a\u079b\u0007a\u0002\u0002\u079b\u079c", - "\u0005q9\u0002\u079c\u079d\u0005w<\u0002\u079d\u01a0\u0003\u0002\u0002", - "\u0002\u079e\u079f\u0005W,\u0002\u079f\u07a0\u0005e3\u0002\u07a0\u07a1", - "\u0005{>\u0002\u07a1\u07a2\u0007a\u0002\u0002\u07a2\u07a3\u0005\u0083", - "B\u0002\u07a3\u07a4\u0005q9\u0002\u07a4\u07a5\u0005w<\u0002\u07a5\u01a2", - "\u0003\u0002\u0002\u0002\u07a6\u07a7\u0005Y-\u0002\u07a7\u07a8\u0005", - "q9\u0002\u07a8\u07a9\u0005}?\u0002\u07a9\u07aa\u0005o8\u0002\u07aa\u07ab", - "\u0005{>\u0002\u07ab\u01a4\u0003\u0002\u0002\u0002\u07ac\u07ad\u0005", - "m7\u0002\u07ad\u07ae\u0005e3\u0002\u07ae\u07af\u0005o8\u0002\u07af\u01a6", - "\u0003\u0002\u0002\u0002\u07b0\u07b1\u0005m7\u0002\u07b1\u07b2\u0005", - "U+\u0002\u07b2\u07b3\u0005\u0083B\u0002\u07b3\u01a8\u0003\u0002\u0002", - "\u0002\u07b4\u07b5\u0005y=\u0002\u07b5\u07b6\u0005{>\u0002\u07b6\u07b7", - "\u0005[.\u0002\u07b7\u01aa\u0003\u0002\u0002\u0002\u07b8\u07b9\u0005", - "\u007f@\u0002\u07b9\u07ba\u0005U+\u0002\u07ba\u07bb\u0005w<\u0002\u07bb", - "\u07bc\u0005e3\u0002\u07bc\u07bd\u0005U+\u0002\u07bd\u07be\u0005o8\u0002", - "\u07be\u07bf\u0005Y-\u0002\u07bf\u07c0\u0005]/\u0002\u07c0\u01ac\u0003", - "\u0002\u0002\u0002\u07c1\u07c2\u0005y=\u0002\u07c2\u07c3\u0005{>\u0002", - "\u07c3\u07c4\u0005[.\u0002\u07c4\u07c5\u0005[.\u0002\u07c5\u07c6\u0005", - "]/\u0002\u07c6\u07c7\u0005\u007f@\u0002\u07c7\u07c8\u0007a\u0002\u0002", - "\u07c8\u07c9\u0005y=\u0002\u07c9\u07ca\u0005U+\u0002\u07ca\u07cb\u0005", - "m7\u0002\u07cb\u07cc\u0005s:\u0002\u07cc\u01ae\u0003\u0002\u0002\u0002", - "\u07cd\u07ce\u0005\u007f@\u0002\u07ce\u07cf\u0005U+\u0002\u07cf\u07d0", - "\u0005w<\u0002\u07d0\u07d1\u0007a\u0002\u0002\u07d1\u07d2\u0005y=\u0002", - "\u07d2\u07d3\u0005U+\u0002\u07d3\u07d4\u0005m7\u0002\u07d4\u07d5\u0005", - "s:\u0002\u07d5\u01b0\u0003\u0002\u0002\u0002\u07d6\u07d7\u0005y=\u0002", - "\u07d7\u07d8\u0005}?\u0002\u07d8\u07d9\u0005m7\u0002\u07d9\u01b2\u0003", - "\u0002\u0002\u0002\u07da\u07db\u0005a1\u0002\u07db\u07dc\u0005w<\u0002", - "\u07dc\u07dd\u0005q9\u0002\u07dd\u07de\u0005}?\u0002\u07de\u07df\u0005", - "s:\u0002\u07df\u07e0\u0007a\u0002\u0002\u07e0\u07e1\u0005Y-\u0002\u07e1", - "\u07e2\u0005q9\u0002\u07e2\u07e3\u0005o8\u0002\u07e3\u07e4\u0005Y-\u0002", - "\u07e4\u07e5\u0005U+\u0002\u07e5\u07e6\u0005{>\u0002\u07e6\u01b4\u0003", - "\u0002\u0002\u0002\u07e7\u07e8\u0005y=\u0002\u07e8\u07e9\u0005]/\u0002", - "\u07e9\u07ea\u0005s:\u0002\u07ea\u07eb\u0005U+\u0002\u07eb\u07ec\u0005", - "w<\u0002\u07ec\u07ed\u0005U+\u0002\u07ed\u07ee\u0005{>\u0002\u07ee\u07ef", - "\u0005q9\u0002\u07ef\u07f0\u0005w<\u0002\u07f0\u01b6\u0003\u0002\u0002", - "\u0002\u07f1\u07f2\u0005a1\u0002\u07f2\u07f3\u0005w<\u0002\u07f3\u07f4", - "\u0005q9\u0002\u07f4\u07f5\u0005}?\u0002\u07f5\u07f6\u0005s:\u0002\u07f6", - "\u07f7\u0005e3\u0002\u07f7\u07f8\u0005o8\u0002\u07f8\u07f9\u0005a1\u0002", - "\u07f9\u01b8\u0003\u0002\u0002\u0002\u07fa\u07fb\u0005w<\u0002\u07fb", - "\u07fc\u0005q9\u0002\u07fc\u07fd\u0005\u0081A\u0002\u07fd\u07fe\u0007", - "a\u0002\u0002\u07fe\u07ff\u0005o8\u0002\u07ff\u0800\u0005}?\u0002\u0800", - "\u0801\u0005m7\u0002\u0801\u0802\u0005W,\u0002\u0802\u0803\u0005]/\u0002", - "\u0803\u0804\u0005w<\u0002\u0804\u01ba\u0003\u0002\u0002\u0002\u0805", - "\u0806\u0005w<\u0002\u0806\u0807\u0005U+\u0002\u0807\u0808\u0005o8\u0002", - "\u0808\u0809\u0005i5\u0002\u0809\u01bc\u0003\u0002\u0002\u0002\u080a", - "\u080b\u0005[.\u0002\u080b\u080c\u0005]/\u0002\u080c\u080d\u0005o8\u0002", - "\u080d\u080e\u0005y=\u0002\u080e\u080f\u0005]/\u0002\u080f\u0810\u0007", - "a\u0002\u0002\u0810\u0811\u0005w<\u0002\u0811\u0812\u0005U+\u0002\u0812", - "\u0813\u0005o8\u0002\u0813\u0814\u0005i5\u0002\u0814\u01be\u0003\u0002", - "\u0002\u0002\u0815\u0816\u0005Y-\u0002\u0816\u0817\u0005}?\u0002\u0817", - "\u0818\u0005m7\u0002\u0818\u0819\u0005]/\u0002\u0819\u081a\u0007a\u0002", - "\u0002\u081a\u081b\u0005[.\u0002\u081b\u081c\u0005e3\u0002\u081c\u081d", - "\u0005y=\u0002\u081d\u081e\u0005{>\u0002\u081e\u01c0\u0003\u0002\u0002", - "\u0002\u081f\u0820\u0005s:\u0002\u0820\u0821\u0005]/\u0002\u0821\u0822", - "\u0005w<\u0002\u0822\u0823\u0005Y-\u0002\u0823\u0824\u0005]/\u0002\u0824", - "\u0825\u0005o8\u0002\u0825\u0826\u0005{>\u0002\u0826\u0827\u0007a\u0002", - "\u0002\u0827\u0828\u0005w<\u0002\u0828\u0829\u0005U+\u0002\u0829\u082a", - "\u0005o8\u0002\u082a\u082b\u0005i5\u0002\u082b\u01c2\u0003\u0002\u0002", - "\u0002\u082c\u082d\u0005o8\u0002\u082d\u082e\u0005{>\u0002\u082e\u082f", - "\u0005e3\u0002\u082f\u0830\u0005k6\u0002\u0830\u0831\u0005]/\u0002\u0831", - "\u01c4\u0003\u0002\u0002\u0002\u0832\u0833\u0005k6\u0002\u0833\u0834", - "\u0005]/\u0002\u0834\u0835\u0005U+\u0002\u0835\u0836\u0005[.\u0002\u0836", - "\u01c6\u0003\u0002\u0002\u0002\u0837\u0838\u0005k6\u0002\u0838\u0839", - "\u0005U+\u0002\u0839\u083a\u0005a1\u0002\u083a\u01c8\u0003\u0002\u0002", - "\u0002\u083b\u083c\u0005_0\u0002\u083c\u083d\u0005e3\u0002\u083d\u083e", - "\u0005w<\u0002\u083e\u083f\u0005y=\u0002\u083f\u0840\u0005{>\u0002\u0840", - "\u0841\u0007a\u0002\u0002\u0841\u0842\u0005\u007f@\u0002\u0842\u0843", - "\u0005U+\u0002\u0843\u0844\u0005k6\u0002\u0844\u0845\u0005}?\u0002\u0845", - "\u0846\u0005]/\u0002\u0846\u01ca\u0003\u0002\u0002\u0002\u0847\u0848", - "\u0005k6\u0002\u0848\u0849\u0005U+\u0002\u0849\u084a\u0005y=\u0002\u084a", - "\u084b\u0005{>\u0002\u084b\u084c\u0007a\u0002\u0002\u084c\u084d\u0005", - "\u007f@\u0002\u084d\u084e\u0005U+\u0002\u084e\u084f\u0005k6\u0002\u084f", - "\u0850\u0005}?\u0002\u0850\u0851\u0005]/\u0002\u0851\u01cc\u0003\u0002", - "\u0002\u0002\u0852\u0853\u0005o8\u0002\u0853\u0854\u0005{>\u0002\u0854", - "\u0855\u0005c2\u0002\u0855\u0856\u0007a\u0002\u0002\u0856\u0857\u0005", - "\u007f@\u0002\u0857\u0858\u0005U+\u0002\u0858\u0859\u0005k6\u0002\u0859", - "\u085a\u0005}?\u0002\u085a\u085b\u0005]/\u0002\u085b\u01ce\u0003\u0002", - "\u0002\u0002\u085c\u085d\u0005_0\u0002\u085d\u085e\u0005e3\u0002\u085e", - "\u085f\u0005w<\u0002\u085f\u0860\u0005y=\u0002\u0860\u0861\u0005{>\u0002", - "\u0861\u01d0\u0003\u0002\u0002\u0002\u0862\u0863\u0005k6\u0002\u0863", - "\u0864\u0005U+\u0002\u0864\u0865\u0005y=\u0002\u0865\u0866\u0005{>\u0002", - "\u0866\u01d2\u0003\u0002\u0002\u0002\u0867\u0868\u0005q9\u0002\u0868", - "\u0869\u0005\u007f@\u0002\u0869\u086a\u0005]/\u0002\u086a\u086b\u0005", - "w<\u0002\u086b\u01d4\u0003\u0002\u0002\u0002\u086c\u086d\u0005w<\u0002", - "\u086d\u086e\u0005]/\u0002\u086e\u086f\u0005y=\u0002\u086f\u0870\u0005", - "s:\u0002\u0870\u0871\u0005]/\u0002\u0871\u0872\u0005Y-\u0002\u0872\u0873", - "\u0005{>\u0002\u0873\u01d6\u0003\u0002\u0002\u0002\u0874\u0875\u0005", - "o8\u0002\u0875\u0876\u0005}?\u0002\u0876\u0877\u0005k6\u0002\u0877\u0878", - "\u0005k6\u0002\u0878\u0879\u0005y=\u0002\u0879\u01d8\u0003\u0002\u0002", - "\u0002\u087a\u087b\u0005g4\u0002\u087b\u087c\u0005y=\u0002\u087c\u087d", - "\u0005q9\u0002\u087d\u087e\u0005o8\u0002\u087e\u087f\u0007a\u0002\u0002", - "\u087f\u0880\u0005U+\u0002\u0880\u0881\u0005w<\u0002\u0881\u0882\u0005", - "w<\u0002\u0882\u0883\u0005U+\u0002\u0883\u0884\u0005\u0085C\u0002\u0884", - "\u0885\u0005U+\u0002\u0885\u0886\u0005a1\u0002\u0886\u0887\u0005a1\u0002", - "\u0887\u01da\u0003\u0002\u0002\u0002\u0888\u0889\u0005g4\u0002\u0889", - "\u088a\u0005y=\u0002\u088a\u088b\u0005q9\u0002\u088b\u088c\u0005o8\u0002", - "\u088c\u088d\u0007a\u0002\u0002\u088d\u088e\u0005q9\u0002\u088e\u088f", - "\u0005W,\u0002\u088f\u0890\u0005g4\u0002\u0890\u0891\u0005]/\u0002\u0891", - "\u0892\u0005Y-\u0002\u0892\u0893\u0005{>\u0002\u0893\u0894\u0005U+\u0002", - "\u0894\u0895\u0005a1\u0002\u0895\u0896\u0005a1\u0002\u0896\u01dc\u0003", - "\u0002\u0002\u0002\u0897\u0898\u0005W,\u0002\u0898\u0899\u0005q9\u0002", - "\u0899\u089a\u0005q9\u0002\u089a\u089b\u0005k6\u0002\u089b\u089c\u0005", - "]/\u0002\u089c\u089d\u0005U+\u0002\u089d\u089e\u0005o8\u0002\u089e\u01de", - "\u0003\u0002\u0002\u0002\u089f\u08a0\u0005k6\u0002\u08a0\u08a1\u0005", - "U+\u0002\u08a1\u08a2\u0005o8\u0002\u08a2\u08a3\u0005a1\u0002\u08a3\u08a4", - "\u0005}?\u0002\u08a4\u08a5\u0005U+\u0002\u08a5\u08a6\u0005a1\u0002\u08a6", - "\u08a7\u0005]/\u0002\u08a7\u01e0\u0003\u0002\u0002\u0002\u08a8\u08a9", - "\u0005u;\u0002\u08a9\u08aa\u0005}?\u0002\u08aa\u08ab\u0005]/\u0002\u08ab", - "\u08ac\u0005w<\u0002\u08ac\u08ad\u0005\u0085C\u0002\u08ad\u01e2\u0003", - "\u0002\u0002\u0002\u08ae\u08af\u0005]/\u0002\u08af\u08b0\u0005\u0083", - "B\u0002\u08b0\u08b1\u0005s:\u0002\u08b1\u08b2\u0005U+\u0002\u08b2\u08b3", - "\u0005o8\u0002\u08b3\u08b4\u0005y=\u0002\u08b4\u08b5\u0005e3\u0002\u08b5", - "\u08b6\u0005q9\u0002\u08b6\u08b7\u0005o8\u0002\u08b7\u01e4\u0003\u0002", - "\u0002\u0002\u08b8\u08b9\u0005Y-\u0002\u08b9\u08ba\u0005c2\u0002\u08ba", - "\u08bb\u0005U+\u0002\u08bb\u08bc\u0005w<\u0002\u08bc\u08bd\u0005U+\u0002", - "\u08bd\u08be\u0005Y-\u0002\u08be\u08bf\u0005{>\u0002\u08bf\u08c0\u0005", - "]/\u0002\u08c0\u08c1\u0005w<\u0002\u08c1\u08c8\u0003\u0002\u0002\u0002", - "\u08c2\u08c3\u0005Y-\u0002\u08c3\u08c4\u0005c2\u0002\u08c4\u08c5\u0005", - "U+\u0002\u08c5\u08c6\u0005w<\u0002\u08c6\u08c8\u0003\u0002\u0002\u0002", - "\u08c7\u08b8\u0003\u0002\u0002\u0002\u08c7\u08c2\u0003\u0002\u0002\u0002", - "\u08c8\u01e6\u0003\u0002\u0002\u0002\u08c9\u08ca\u0005Y-\u0002\u08ca", - "\u08cb\u0005}?\u0002\u08cb\u08cc\u0005w<\u0002\u08cc\u08cd\u0005w<\u0002", - "\u08cd\u08ce\u0005]/\u0002\u08ce\u08cf\u0005o8\u0002\u08cf\u08d0\u0005", - "{>\u0002\u08d0\u08d1\u0007a\u0002\u0002\u08d1\u08d2\u0005}?\u0002\u08d2", - "\u08d3\u0005y=\u0002\u08d3\u08d4\u0005]/\u0002\u08d4\u08d5\u0005w<\u0002", - "\u08d5\u01e8\u0003\u0002\u0002\u0002\u08d6\u08d7\u0005[.\u0002\u08d7", - "\u08d8\u0005U+\u0002\u08d8\u08d9\u0005{>\u0002\u08d9\u08da\u0005]/\u0002", - "\u08da\u01ea\u0003\u0002\u0002\u0002\u08db\u08dc\u0005e3\u0002\u08dc", - "\u08dd\u0005o8\u0002\u08dd\u08de\u0005y=\u0002\u08de\u08df\u0005]/\u0002", - "\u08df\u08e0\u0005w<\u0002\u08e0\u08e1\u0005{>\u0002\u08e1\u01ec\u0003", - "\u0002\u0002\u0002\u08e2\u08e3\u0005{>\u0002\u08e3\u08e4\u0005e3\u0002", - "\u08e4\u08e5\u0005m7\u0002\u08e5\u08e6\u0005]/\u0002\u08e6\u01ee\u0003", - "\u0002\u0002\u0002\u08e7\u08e8\u0005{>\u0002\u08e8\u08e9\u0005e3\u0002", - "\u08e9\u08ea\u0005m7\u0002\u08ea\u08eb\u0005]/\u0002\u08eb\u08ec\u0005", - "y=\u0002\u08ec\u08ed\u0005{>\u0002\u08ed\u08ee\u0005U+\u0002\u08ee\u08ef", - "\u0005m7\u0002\u08ef\u08f0\u0005s:\u0002\u08f0\u01f0\u0003\u0002\u0002", - "\u0002\u08f1\u08f2\u0005{>\u0002\u08f2\u08f3\u0005e3\u0002\u08f3\u08f4", - "\u0005m7\u0002\u08f4\u08f5\u0005]/\u0002\u08f5\u08f6\u0005y=\u0002\u08f6", - "\u08f7\u0005{>\u0002\u08f7\u08f8\u0005U+\u0002\u08f8\u08f9\u0005m7\u0002", - "\u08f9\u08fa\u0005s:\u0002\u08fa\u08fb\u0005k6\u0002\u08fb\u08fc\u0005", - "{>\u0002\u08fc\u08fd\u0005\u0087D\u0002\u08fd\u090d\u0003\u0002\u0002", - "\u0002\u08fe\u08ff\u0005{>\u0002\u08ff\u0900\u0005e3\u0002\u0900\u0901", - "\u0005m7\u0002\u0901\u0902\u0005]/\u0002\u0902\u0903\u0005y=\u0002\u0903", - "\u0904\u0005{>\u0002\u0904\u0905\u0005U+\u0002\u0905\u0906\u0005m7\u0002", - "\u0906\u0907\u0005s:\u0002\u0907\u0908\u0007a\u0002\u0002\u0908\u0909", - "\u0005k6\u0002\u0909\u090a\u0005{>\u0002\u090a\u090b\u0005\u0087D\u0002", - "\u090b\u090d\u0003\u0002\u0002\u0002\u090c\u08f1\u0003\u0002\u0002\u0002", - "\u090c\u08fe\u0003\u0002\u0002\u0002\u090d\u01f2\u0003\u0002\u0002\u0002", - "\u090e\u090f\u0005{>\u0002\u090f\u0910\u0005e3\u0002\u0910\u0911\u0005", - "m7\u0002\u0911\u0912\u0005]/\u0002\u0912\u0913\u0005y=\u0002\u0913\u0914", - "\u0005{>\u0002\u0914\u0915\u0005U+\u0002\u0915\u0916\u0005m7\u0002\u0916", - "\u0917\u0005s:\u0002\u0917\u0918\u0005o8\u0002\u0918\u0919\u0005{>\u0002", - "\u0919\u091a\u0005\u0087D\u0002\u091a\u092a\u0003\u0002\u0002\u0002", - "\u091b\u091c\u0005{>\u0002\u091c\u091d\u0005e3\u0002\u091d\u091e\u0005", - "m7\u0002\u091e\u091f\u0005]/\u0002\u091f\u0920\u0005y=\u0002\u0920\u0921", - "\u0005{>\u0002\u0921\u0922\u0005U+\u0002\u0922\u0923\u0005m7\u0002\u0923", - "\u0924\u0005s:\u0002\u0924\u0925\u0007a\u0002\u0002\u0925\u0926\u0005", - "o8\u0002\u0926\u0927\u0005{>\u0002\u0927\u0928\u0005\u0087D\u0002\u0928", - "\u092a\u0003\u0002\u0002\u0002\u0929\u090e\u0003\u0002\u0002\u0002\u0929", - "\u091b\u0003\u0002\u0002\u0002\u092a\u01f4\u0003\u0002\u0002\u0002\u092b", - "\u092c\u0005\u0087D\u0002\u092c\u092d\u0005q9\u0002\u092d\u092e\u0005", - "o8\u0002\u092e\u092f\u0005]/\u0002\u092f\u01f6\u0003\u0002\u0002\u0002", - "\u0930\u0931\u0005}?\u0002\u0931\u0932\u0005y=\u0002\u0932\u0933\u0005", - "]/\u0002\u0933\u0934\u0005w<\u0002\u0934\u01f8\u0003\u0002\u0002\u0002", - "\u0935\u0936\u0005U+\u0002\u0936\u0937\u0005[.\u0002\u0937\u0938\u0005", - "[.\u0002\u0938\u0939\u0005[.\u0002\u0939\u093a\u0005U+\u0002\u093a\u093b", - "\u0005{>\u0002\u093b\u093c\u0005]/\u0002\u093c\u01fa\u0003\u0002\u0002", - "\u0002\u093d\u093e\u0005y=\u0002\u093e\u093f\u0005}?\u0002\u093f\u0940", - "\u0005W,\u0002\u0940\u0941\u0005[.\u0002\u0941\u0942\u0005U+\u0002\u0942", - "\u0943\u0005{>\u0002\u0943\u0944\u0005]/\u0002\u0944\u01fc\u0003\u0002", - "\u0002\u0002\u0945\u0946\u0005Y-\u0002\u0946\u0947\u0005}?\u0002\u0947", - "\u0948\u0005w<\u0002\u0948\u0949\u0005[.\u0002\u0949\u094a\u0005U+\u0002", - "\u094a\u094b\u0005{>\u0002\u094b\u094c\u0005]/\u0002\u094c\u01fe\u0003", - "\u0002\u0002\u0002\u094d\u094e\u0005Y-\u0002\u094e\u094f\u0005}?\u0002", - "\u094f\u0950\u0005w<\u0002\u0950\u0951\u0005{>\u0002\u0951\u0952\u0005", - "e3\u0002\u0952\u0953\u0005m7\u0002\u0953\u0954\u0005]/\u0002\u0954\u0200", - "\u0003\u0002\u0002\u0002\u0955\u0956\u0005[.\u0002\u0956\u0957\u0005", - "U+\u0002\u0957\u0958\u0005{>\u0002\u0958\u0959\u0005]/\u0002\u0959\u095a", - "\u0007a\u0002\u0002\u095a\u095b\u0005U+\u0002\u095b\u095c\u0005[.\u0002", - "\u095c\u095d\u0005[.\u0002\u095d\u0202\u0003\u0002\u0002\u0002\u095e", - "\u095f\u0005[.\u0002\u095f\u0960\u0005U+\u0002\u0960\u0961\u0005{>\u0002", - "\u0961\u0962\u0005]/\u0002\u0962\u0963\u0007a\u0002\u0002\u0963\u0964", - "\u0005y=\u0002\u0964\u0965\u0005}?\u0002\u0965\u0966\u0005W,\u0002\u0966", - "\u0204\u0003\u0002\u0002\u0002\u0967\u0968\u0005]/\u0002\u0968\u0969", - "\u0005\u0083B\u0002\u0969\u096a\u0005{>\u0002\u096a\u096b\u0005w<\u0002", - "\u096b\u096c\u0005U+\u0002\u096c\u096d\u0005Y-\u0002\u096d\u096e\u0005", - "{>\u0002\u096e\u0206\u0003\u0002\u0002\u0002\u096f\u0970\u0005a1\u0002", - "\u0970\u0971\u0005]/\u0002\u0971\u0972\u0005{>\u0002\u0972\u0973\u0007", - "a\u0002\u0002\u0973\u0974\u0005_0\u0002\u0974\u0975\u0005q9\u0002\u0975", - "\u0976\u0005w<\u0002\u0976\u0977\u0005m7\u0002\u0977\u0978\u0005U+\u0002", - "\u0978\u0979\u0005{>\u0002\u0979\u0208\u0003\u0002\u0002\u0002\u097a", - "\u097b\u0005o8\u0002\u097b\u097c\u0005q9\u0002\u097c\u097d\u0005\u0081", - "A\u0002\u097d\u020a\u0003\u0002\u0002\u0002\u097e\u097f\u0005s:\u0002", - "\u097f\u0980\u0005q9\u0002\u0980\u0981\u0005y=\u0002\u0981\u0982\u0005", - "e3\u0002\u0982\u0983\u0005{>\u0002\u0983\u0984\u0005e3\u0002\u0984\u0985", - "\u0005q9\u0002\u0985\u0986\u0005o8\u0002\u0986\u020c\u0003\u0002\u0002", - "\u0002\u0987\u0988\u0005y=\u0002\u0988\u0989\u0005\u0085C\u0002\u0989", - "\u098a\u0005y=\u0002\u098a\u098b\u0005[.\u0002\u098b\u098c\u0005U+\u0002", - "\u098c\u098d\u0005{>\u0002\u098d\u098e\u0005]/\u0002\u098e\u020e\u0003", - "\u0002\u0002\u0002\u098f\u0990\u0005{>\u0002\u0990\u0991\u0005e3\u0002", - "\u0991\u0992\u0005m7\u0002\u0992\u0993\u0005]/\u0002\u0993\u0994\u0005", - "y=\u0002\u0994\u0995\u0005{>\u0002\u0995\u0996\u0005U+\u0002\u0996\u0997", - "\u0005m7\u0002\u0997\u0998\u0005s:\u0002\u0998\u0999\u0007a\u0002\u0002", - "\u0999\u099a\u0005U+\u0002\u099a\u099b\u0005[.\u0002\u099b\u099c\u0005", - "[.\u0002\u099c\u0210\u0003\u0002\u0002\u0002\u099d\u099e\u0005{>\u0002", - "\u099e\u099f\u0005e3\u0002\u099f\u09a0\u0005m7\u0002\u09a0\u09a1\u0005", - "]/\u0002\u09a1\u09a2\u0005y=\u0002\u09a2\u09a3\u0005{>\u0002\u09a3\u09a4", - "\u0005U+\u0002\u09a4\u09a5\u0005m7\u0002\u09a5\u09a6\u0005s:\u0002\u09a6", - "\u09a7\u0007a\u0002\u0002\u09a7\u09a8\u0005[.\u0002\u09a8\u09a9\u0005", - "e3\u0002\u09a9\u09aa\u0005_0\u0002\u09aa\u09ab\u0005_0\u0002\u09ab\u0212", - "\u0003\u0002\u0002\u0002\u09ac\u09ad\u0005}?\u0002\u09ad\u09ae\u0005", - "{>\u0002\u09ae\u09af\u0005Y-\u0002\u09af\u09b0\u0007a\u0002\u0002\u09b0", - "\u09b1\u0005[.\u0002\u09b1\u09b2\u0005U+\u0002\u09b2\u09b3\u0005{>\u0002", - "\u09b3\u09b4\u0005]/\u0002\u09b4\u0214\u0003\u0002\u0002\u0002\u09b5", - "\u09b6\u0005}?\u0002\u09b6\u09b7\u0005{>\u0002\u09b7\u09b8\u0005Y-\u0002", - "\u09b8\u09b9\u0007a\u0002\u0002\u09b9\u09ba\u0005{>\u0002\u09ba\u09bb", - "\u0005e3\u0002\u09bb\u09bc\u0005m7\u0002\u09bc\u09bd\u0005]/\u0002\u09bd", - "\u0216\u0003\u0002\u0002\u0002\u09be\u09bf\u0005}?\u0002\u09bf\u09c0", - "\u0005{>\u0002\u09c0\u09c1\u0005Y-\u0002\u09c1\u09c2\u0007a\u0002\u0002", - "\u09c2\u09c3\u0005{>\u0002\u09c3\u09c4\u0005e3\u0002\u09c4\u09c5\u0005", - "m7\u0002\u09c5\u09c6\u0005]/\u0002\u09c6\u09c7\u0005y=\u0002\u09c7\u09c8", - "\u0005{>\u0002\u09c8\u09c9\u0005U+\u0002\u09c9\u09ca\u0005m7\u0002\u09ca", - "\u09cb\u0005s:\u0002\u09cb\u0218\u0003\u0002\u0002\u0002\u09cc\u09cd", - "\u0005U+\u0002\u09cd\u09ce\u0005y=\u0002\u09ce\u09cf\u0005Y-\u0002\u09cf", - "\u09d0\u0005e3\u0002\u09d0\u09d1\u0005e3\u0002\u09d1\u021a\u0003\u0002", - "\u0002\u0002\u09d2\u09d3\u0005Y-\u0002\u09d3\u09d4\u0005c2\u0002\u09d4", - "\u09d5\u0005U+\u0002\u09d5\u09d6\u0005w<\u0002\u09d6\u09d7\u0005y=\u0002", - "\u09d7\u09d8\u0005]/\u0002\u09d8\u09d9\u0005{>\u0002\u09d9\u021c\u0003", - "\u0002\u0002\u0002\u09da\u09db\u0005Y-\u0002\u09db\u09dc\u0005q9\u0002", - "\u09dc\u09dd\u0005U+\u0002\u09dd\u09de\u0005k6\u0002\u09de\u09df\u0005", - "]/\u0002\u09df\u09e0\u0005y=\u0002\u09e0\u09e1\u0005Y-\u0002\u09e1\u09e2", - "\u0005]/\u0002\u09e2\u021e\u0003\u0002\u0002\u0002\u09e3\u09e4\u0005", - "Y-\u0002\u09e4\u09e5\u0005q9\u0002\u09e5\u09e6\u0005k6\u0002\u09e6\u09e7", - "\u0005k6\u0002\u09e7\u09e8\u0005U+\u0002\u09e8\u09e9\u0005{>\u0002\u09e9", - "\u09ea\u0005e3\u0002\u09ea\u09eb\u0005q9\u0002\u09eb\u09ec\u0005o8\u0002", - "\u09ec\u0220\u0003\u0002\u0002\u0002\u09ed\u09ee\u0005[.\u0002\u09ee", - "\u09ef\u0005U+\u0002\u09ef\u09f0\u0005{>\u0002\u09f0\u09f1\u0005U+\u0002", - "\u09f1\u09f2\u0005W,\u0002\u09f2\u09f3\u0005U+\u0002\u09f3\u09f4\u0005", - "y=\u0002\u09f4\u09f5\u0005]/\u0002\u09f5\u0222\u0003\u0002\u0002\u0002", - "\u09f6\u09f7\u0005e3\u0002\u09f7\u09f8\u0005_0\u0002\u09f8\u0224\u0003", - "\u0002\u0002\u0002\u09f9\u09fa\u0005_0\u0002\u09fa\u09fb\u0005q9\u0002", - "\u09fb\u09fc\u0005w<\u0002\u09fc\u09fd\u0005m7\u0002\u09fd\u09fe\u0005", - "U+\u0002\u09fe\u09ff\u0005{>\u0002\u09ff\u0226\u0003\u0002\u0002\u0002", - "\u0a00\u0a01\u0005m7\u0002\u0a01\u0a02\u0005e3\u0002\u0a02\u0a03\u0005", - "Y-\u0002\u0a03\u0a04\u0005w<\u0002\u0a04\u0a05\u0005q9\u0002\u0a05\u0a06", - "\u0005y=\u0002\u0a06\u0a07\u0005]/\u0002\u0a07\u0a08\u0005Y-\u0002\u0a08", - "\u0a09\u0005q9\u0002\u0a09\u0a0a\u0005o8\u0002\u0a0a\u0a0b\u0005[.\u0002", - "\u0a0b\u0228\u0003\u0002\u0002\u0002\u0a0c\u0a0d\u0005q9\u0002\u0a0d", - "\u0a0e\u0005k6\u0002\u0a0e\u0a0f\u0005[.\u0002\u0a0f\u0a10\u0007a\u0002", - "\u0002\u0a10\u0a11\u0005s:\u0002\u0a11\u0a12\u0005U+\u0002\u0a12\u0a13", - "\u0005y=\u0002\u0a13\u0a14\u0005y=\u0002\u0a14\u0a15\u0005\u0081A\u0002", - "\u0a15\u0a16\u0005q9\u0002\u0a16\u0a17\u0005w<\u0002\u0a17\u0a18\u0005", - "[.\u0002\u0a18\u022a\u0003\u0002\u0002\u0002\u0a19\u0a1a\u0005s:\u0002", - "\u0a1a\u0a1b\u0005U+\u0002\u0a1b\u0a1c\u0005y=\u0002\u0a1c\u0a1d\u0005", - "y=\u0002\u0a1d\u0a1e\u0005\u0081A\u0002\u0a1e\u0a1f\u0005q9\u0002\u0a1f", - "\u0a20\u0005w<\u0002\u0a20\u0a21\u0005[.\u0002\u0a21\u022c\u0003\u0002", - "\u0002\u0002\u0a22\u0a23\u0005w<\u0002\u0a23\u0a24\u0005]/\u0002\u0a24", - "\u0a25\u0005s:\u0002\u0a25\u0a26\u0005]/\u0002\u0a26\u0a27\u0005U+\u0002", - "\u0a27\u0a28\u0005{>\u0002\u0a28\u022e\u0003\u0002\u0002\u0002\u0a29", - "\u0a2a\u0005w<\u0002\u0a2a\u0a2b\u0005]/\u0002\u0a2b\u0a2c\u0005s:\u0002", - "\u0a2c\u0a2d\u0005k6\u0002\u0a2d\u0a2e\u0005U+\u0002\u0a2e\u0a2f\u0005", - "Y-\u0002\u0a2f\u0a30\u0005]/\u0002\u0a30\u0230\u0003\u0002\u0002\u0002", - "\u0a31\u0a32\u0005w<\u0002\u0a32\u0a33\u0005]/\u0002\u0a33\u0a34\u0005", - "\u007f@\u0002\u0a34\u0a35\u0005]/\u0002\u0a35\u0a36\u0005w<\u0002\u0a36", - "\u0a37\u0005y=\u0002\u0a37\u0a38\u0005]/\u0002\u0a38\u0232\u0003\u0002", - "\u0002\u0002\u0a39\u0a3a\u0005w<\u0002\u0a3a\u0a3b\u0005q9\u0002\u0a3b", - "\u0a3c\u0005\u0081A\u0002\u0a3c\u0a3d\u0007a\u0002\u0002\u0a3d\u0a3e", - "\u0005Y-\u0002\u0a3e\u0a3f\u0005q9\u0002\u0a3f\u0a40\u0005}?\u0002\u0a40", - "\u0a41\u0005o8\u0002\u0a41\u0a42\u0005{>\u0002\u0a42\u0234\u0003\u0002", - "\u0002\u0002\u0a43\u0a44\u0005{>\u0002\u0a44\u0a45\u0005w<\u0002\u0a45", - "\u0a46\u0005}?\u0002\u0a46\u0a47\u0005o8\u0002\u0a47\u0a48\u0005Y-\u0002", - "\u0a48\u0a49\u0005U+\u0002\u0a49\u0a4a\u0005{>\u0002\u0a4a\u0a4b\u0005", - "]/\u0002\u0a4b\u0236\u0003\u0002\u0002\u0002\u0a4c\u0a4d\u0005\u0081", - "A\u0002\u0a4d\u0a4e\u0005]/\u0002\u0a4e\u0a4f\u0005e3\u0002\u0a4f\u0a50", - "\u0005a1\u0002\u0a50\u0a51\u0005c2\u0002\u0a51\u0a52\u0005{>\u0002\u0a52", - "\u0a53\u0007a\u0002\u0002\u0a53\u0a54\u0005y=\u0002\u0a54\u0a55\u0005", - "{>\u0002\u0a55\u0a56\u0005w<\u0002\u0a56\u0a57\u0005e3\u0002\u0a57\u0a58", - "\u0005o8\u0002\u0a58\u0a59\u0005a1\u0002\u0a59\u0238\u0003\u0002\u0002", - "\u0002\u0a5a\u0a5b\u0005Y-\u0002\u0a5b\u0a5c\u0005q9\u0002\u0a5c\u0a5d", - "\u0005o8\u0002\u0a5d\u0a5e\u0005{>\u0002\u0a5e\u0a5f\u0005U+\u0002\u0a5f", - "\u0a60\u0005e3\u0002\u0a60\u0a61\u0005o8\u0002\u0a61\u0a62\u0005y=\u0002", - "\u0a62\u023a\u0003\u0002\u0002\u0002\u0a63\u0a64\u0005a1\u0002\u0a64", - "\u0a65\u0005]/\u0002\u0a65\u0a66\u0005q9\u0002\u0a66\u0a67\u0005m7\u0002", - "\u0a67\u0a68\u0005]/\u0002\u0a68\u0a69\u0005{>\u0002\u0a69\u0a6a\u0005", - "w<\u0002\u0a6a\u0a6b\u0005\u0085C\u0002\u0a6b\u0a6c\u0005Y-\u0002\u0a6c", - "\u0a6d\u0005q9\u0002\u0a6d\u0a6e\u0005k6\u0002\u0a6e\u0a6f\u0005k6\u0002", - "\u0a6f\u0a70\u0005]/\u0002\u0a70\u0a71\u0005Y-\u0002\u0a71\u0a72\u0005", - "{>\u0002\u0a72\u0a73\u0005e3\u0002\u0a73\u0a74\u0005q9\u0002\u0a74\u0a75", - "\u0005o8\u0002\u0a75\u023c\u0003\u0002\u0002\u0002\u0a76\u0a77\u0005", - "k6\u0002\u0a77\u0a78\u0005e3\u0002\u0a78\u0a79\u0005o8\u0002\u0a79\u0a7a", - "\u0005]/\u0002\u0a7a\u0a7b\u0005y=\u0002\u0a7b\u0a7c\u0005{>\u0002\u0a7c", - "\u0a7d\u0005w<\u0002\u0a7d\u0a7e\u0005e3\u0002\u0a7e\u0a7f\u0005o8\u0002", - "\u0a7f\u0a80\u0005a1\u0002\u0a80\u023e\u0003\u0002\u0002\u0002\u0a81", - "\u0a82\u0005m7\u0002\u0a82\u0a83\u0005}?\u0002\u0a83\u0a84\u0005k6\u0002", - "\u0a84\u0a85\u0005{>\u0002\u0a85\u0a86\u0005e3\u0002\u0a86\u0a87\u0005", - "k6\u0002\u0a87\u0a88\u0005e3\u0002\u0a88\u0a89\u0005o8\u0002\u0a89\u0a8a", - "\u0005]/\u0002\u0a8a\u0a8b\u0005y=\u0002\u0a8b\u0a8c\u0005{>\u0002\u0a8c", - "\u0a8d\u0005w<\u0002\u0a8d\u0a8e\u0005e3\u0002\u0a8e\u0a8f\u0005o8\u0002", - "\u0a8f\u0a90\u0005a1\u0002\u0a90\u0240\u0003\u0002\u0002\u0002\u0a91", - "\u0a92\u0005m7\u0002\u0a92\u0a93\u0005}?\u0002\u0a93\u0a94\u0005k6\u0002", - "\u0a94\u0a95\u0005{>\u0002\u0a95\u0a96\u0005e3\u0002\u0a96\u0a97\u0005", - "s:\u0002\u0a97\u0a98\u0005q9\u0002\u0a98\u0a99\u0005e3\u0002\u0a99\u0a9a", - "\u0005o8\u0002\u0a9a\u0a9b\u0005{>\u0002\u0a9b\u0242\u0003\u0002\u0002", - "\u0002\u0a9c\u0a9d\u0005m7\u0002\u0a9d\u0a9e\u0005}?\u0002\u0a9e\u0a9f", - "\u0005k6\u0002\u0a9f\u0aa0\u0005{>\u0002\u0aa0\u0aa1\u0005e3\u0002\u0aa1", - "\u0aa2\u0005s:\u0002\u0aa2\u0aa3\u0005q9\u0002\u0aa3\u0aa4\u0005k6\u0002", - "\u0aa4\u0aa5\u0005\u0085C\u0002\u0aa5\u0aa6\u0005a1\u0002\u0aa6\u0aa7", - "\u0005q9\u0002\u0aa7\u0aa8\u0005o8\u0002\u0aa8\u0244\u0003\u0002\u0002", - "\u0002\u0aa9\u0aaa\u0005s:\u0002\u0aaa\u0aab\u0005q9\u0002\u0aab\u0aac", - "\u0005e3\u0002\u0aac\u0aad\u0005o8\u0002\u0aad\u0aae\u0005{>\u0002\u0aae", - "\u0246\u0003\u0002\u0002\u0002\u0aaf\u0ab0\u0005s:\u0002\u0ab0\u0ab1", - "\u0005q9\u0002\u0ab1\u0ab2\u0005k6\u0002\u0ab2\u0ab3\u0005\u0085C\u0002", - "\u0ab3\u0ab4\u0005a1\u0002\u0ab4\u0ab5\u0005q9\u0002\u0ab5\u0ab6\u0005", - "o8\u0002\u0ab6\u0248\u0003\u0002\u0002\u0002\u0ab7\u0ab8\u0005k6\u0002", - "\u0ab8\u0ab9\u0005]/\u0002\u0ab9\u0aba\u0005\u007f@\u0002\u0aba\u0abb", - "\u0005]/\u0002\u0abb\u0abc\u0005k6\u0002\u0abc\u024a\u0003\u0002\u0002", - "\u0002\u0abd\u0abe\u0005[.\u0002\u0abe\u0abf\u0005U+\u0002\u0abf\u0ac0", - "\u0005{>\u0002\u0ac0\u0ac1\u0005]/\u0002\u0ac1\u0ac2\u0005{>\u0002\u0ac2", - "\u0ac3\u0005e3\u0002\u0ac3\u0ac4\u0005m7\u0002\u0ac4\u0ac5\u0005]/\u0002", - "\u0ac5\u024c\u0003\u0002\u0002\u0002\u0ac6\u0ac7\u0005{>\u0002\u0ac7", - "\u0ac8\u0005w<\u0002\u0ac8\u0ac9\u0005e3\u0002\u0ac9\u0aca\u0005m7\u0002", - "\u0aca\u024e\u0003\u0002\u0002\u0002\u0acb\u0acc\u0005k6\u0002\u0acc", - "\u0acd\u0005]/\u0002\u0acd\u0ace\u0005U+\u0002\u0ace\u0acf\u0005[.\u0002", - "\u0acf\u0ad0\u0005e3\u0002\u0ad0\u0ad1\u0005o8\u0002\u0ad1\u0ad2\u0005", - "a1\u0002\u0ad2\u0250\u0003\u0002\u0002\u0002\u0ad3\u0ad4\u0005{>\u0002", - "\u0ad4\u0ad5\u0005w<\u0002\u0ad5\u0ad6\u0005U+\u0002\u0ad6\u0ad7\u0005", - "e3\u0002\u0ad7\u0ad8\u0005k6\u0002\u0ad8\u0ad9\u0005e3\u0002\u0ad9\u0ada", - "\u0005o8\u0002\u0ada\u0adb\u0005a1\u0002\u0adb\u0252\u0003\u0002\u0002", - "\u0002\u0adc\u0add\u0005W,\u0002\u0add\u0ade\u0005q9\u0002\u0ade\u0adf", - "\u0005{>\u0002\u0adf\u0ae0\u0005c2\u0002\u0ae0\u0254\u0003\u0002\u0002", - "\u0002\u0ae1\u0ae2\u0005y=\u0002\u0ae2\u0ae3\u0005{>\u0002\u0ae3\u0ae4", - "\u0005w<\u0002\u0ae4\u0ae5\u0005e3\u0002\u0ae5\u0ae6\u0005o8\u0002\u0ae6", - "\u0ae7\u0005a1\u0002\u0ae7\u0256\u0003\u0002\u0002\u0002\u0ae8\u0ae9", - "\u0005y=\u0002\u0ae9\u0aea\u0005}?\u0002\u0aea\u0aeb\u0005W,\u0002\u0aeb", - "\u0aec\u0005y=\u0002\u0aec\u0aed\u0005{>\u0002\u0aed\u0aee\u0005w<\u0002", - "\u0aee\u0aef\u0005e3\u0002\u0aef\u0af0\u0005o8\u0002\u0af0\u0af1\u0005", - "a1\u0002\u0af1\u0258\u0003\u0002\u0002\u0002\u0af2\u0af3\u0005\u0081", - "A\u0002\u0af3\u0af4\u0005c2\u0002\u0af4\u0af5\u0005]/\u0002\u0af5\u0af6", - "\u0005o8\u0002\u0af6\u025a\u0003\u0002\u0002\u0002\u0af7\u0af8\u0005", - "{>\u0002\u0af8\u0af9\u0005c2\u0002\u0af9\u0afa\u0005]/\u0002\u0afa\u0afb", - "\u0005o8\u0002\u0afb\u025c\u0003\u0002\u0002\u0002\u0afc\u0afd\u0005", - "]/\u0002\u0afd\u0afe\u0005k6\u0002\u0afe\u0aff\u0005y=\u0002\u0aff\u0b00", - "\u0005]/\u0002\u0b00\u025e\u0003\u0002\u0002\u0002\u0b01\u0b02\u0005", - "y=\u0002\u0b02\u0b03\u0005e3\u0002\u0b03\u0b04\u0005a1\u0002\u0b04\u0b05", - "\u0005o8\u0002\u0b05\u0b06\u0005]/\u0002\u0b06\u0b07\u0005[.\u0002\u0b07", - "\u0260\u0003\u0002\u0002\u0002\u0b08\u0b09\u0005}?\u0002\u0b09\u0b0a", - "\u0005o8\u0002\u0b0a\u0b0b\u0005y=\u0002\u0b0b\u0b0c\u0005e3\u0002\u0b0c", - "\u0b0d\u0005a1\u0002\u0b0d\u0b0e\u0005o8\u0002\u0b0e\u0b0f\u0005]/\u0002", - "\u0b0f\u0b10\u0005[.\u0002\u0b10\u0262\u0003\u0002\u0002\u0002\u0b11", - "\u0b12\u0005[.\u0002\u0b12\u0b13\u0005]/\u0002\u0b13\u0b14\u0005Y-\u0002", - "\u0b14\u0b15\u0005e3\u0002\u0b15\u0b16\u0005m7\u0002\u0b16\u0b17\u0005", - "U+\u0002\u0b17\u0b18\u0005k6\u0002\u0b18\u0264\u0003\u0002\u0002\u0002", - "\u0b19\u0b1a\u0005g4\u0002\u0b1a\u0b1b\u0005y=\u0002\u0b1b\u0b1c\u0005", - "q9\u0002\u0b1c\u0b1d\u0005o8\u0002\u0b1d\u0266\u0003\u0002\u0002\u0002", - "\u0b1e\u0b1f\u0005_0\u0002\u0b1f\u0b20\u0005k6\u0002\u0b20\u0b21\u0005", - "q9\u0002\u0b21\u0b22\u0005U+\u0002\u0b22\u0b23\u0005{>\u0002\u0b23\u0268", - "\u0003\u0002\u0002\u0002\u0b24\u0b25\u0005_0\u0002\u0b25\u0b26\u0005", - "k6\u0002\u0b26\u0b27\u0005q9\u0002\u0b27\u0b28\u0005U+\u0002\u0b28\u0b29", - "\u0005{>\u0002\u0b29\u0b2a\u00076\u0002\u0002\u0b2a\u026a\u0003\u0002", - "\u0002\u0002\u0b2b\u0b2c\u0005_0\u0002\u0b2c\u0b2d\u0005k6\u0002\u0b2d", - "\u0b2e\u0005q9\u0002\u0b2e\u0b2f\u0005U+\u0002\u0b2f\u0b30\u0005{>\u0002", - "\u0b30\u0b31\u0007:\u0002\u0002\u0b31\u026c\u0003\u0002\u0002\u0002", - "\u0b32\u0b33\u0005y=\u0002\u0b33\u0b34\u0005]/\u0002\u0b34\u0b35\u0005", - "{>\u0002\u0b35\u026e\u0003\u0002\u0002\u0002\u0b36\u0b37\u0005y=\u0002", - "\u0b37\u0b38\u0005]/\u0002\u0b38\u0b39\u0005Y-\u0002\u0b39\u0b3a\u0005", - "q9\u0002\u0b3a\u0b3b\u0005o8\u0002\u0b3b\u0b3c\u0005[.\u0002\u0b3c\u0b3d", - "\u0007a\u0002\u0002\u0b3d\u0b3e\u0005m7\u0002\u0b3e\u0b3f\u0005e3\u0002", - "\u0b3f\u0b40\u0005Y-\u0002\u0b40\u0b41\u0005w<\u0002\u0b41\u0b42\u0005", - "q9\u0002\u0b42\u0b43\u0005y=\u0002\u0b43\u0b44\u0005]/\u0002\u0b44\u0b45", - "\u0005Y-\u0002\u0b45\u0b46\u0005q9\u0002\u0b46\u0b47\u0005o8\u0002\u0b47", - "\u0b48\u0005[.\u0002\u0b48\u0270\u0003\u0002\u0002\u0002\u0b49\u0b4a", - "\u0005m7\u0002\u0b4a\u0b4b\u0005e3\u0002\u0b4b\u0b4c\u0005o8\u0002\u0b4c", - "\u0b4d\u0005}?\u0002\u0b4d\u0b4e\u0005{>\u0002\u0b4e\u0b4f\u0005]/\u0002", - "\u0b4f\u0b50\u0007a\u0002\u0002\u0b50\u0b51\u0005m7\u0002\u0b51\u0b52", - "\u0005e3\u0002\u0b52\u0b53\u0005Y-\u0002\u0b53\u0b54\u0005w<\u0002\u0b54", - "\u0b55\u0005q9\u0002\u0b55\u0b56\u0005y=\u0002\u0b56\u0b57\u0005]/\u0002", - "\u0b57\u0b58\u0005Y-\u0002\u0b58\u0b59\u0005q9\u0002\u0b59\u0b5a\u0005", - "o8\u0002\u0b5a\u0b5b\u0005[.\u0002\u0b5b\u0272\u0003\u0002\u0002\u0002", - "\u0b5c\u0b5d\u0005m7\u0002\u0b5d\u0b5e\u0005e3\u0002\u0b5e\u0b5f\u0005", - "o8\u0002\u0b5f\u0b60\u0005}?\u0002\u0b60\u0b61\u0005{>\u0002\u0b61\u0b62", - "\u0005]/\u0002\u0b62\u0b63\u0007a\u0002\u0002\u0b63\u0b64\u0005y=\u0002", - "\u0b64\u0b65\u0005]/\u0002\u0b65\u0b66\u0005Y-\u0002\u0b66\u0b67\u0005", - "q9\u0002\u0b67\u0b68\u0005o8\u0002\u0b68\u0b69\u0005[.\u0002\u0b69\u0274", - "\u0003\u0002\u0002\u0002\u0b6a\u0b6b\u0005c2\u0002\u0b6b\u0b6c\u0005", - "q9\u0002\u0b6c\u0b6d\u0005}?\u0002\u0b6d\u0b6e\u0005w<\u0002\u0b6e\u0b6f", - "\u0007a\u0002\u0002\u0b6f\u0b70\u0005m7\u0002\u0b70\u0b71\u0005e3\u0002", - "\u0b71\u0b72\u0005Y-\u0002\u0b72\u0b73\u0005w<\u0002\u0b73\u0b74\u0005", - "q9\u0002\u0b74\u0b75\u0005y=\u0002\u0b75\u0b76\u0005]/\u0002\u0b76\u0b77", - "\u0005Y-\u0002\u0b77\u0b78\u0005q9\u0002\u0b78\u0b79\u0005o8\u0002\u0b79", - "\u0b7a\u0005[.\u0002\u0b7a\u0276\u0003\u0002\u0002\u0002\u0b7b\u0b7c", - "\u0005c2\u0002\u0b7c\u0b7d\u0005q9\u0002\u0b7d\u0b7e\u0005}?\u0002\u0b7e", - "\u0b7f\u0005w<\u0002\u0b7f\u0b80\u0007a\u0002\u0002\u0b80\u0b81\u0005", - "y=\u0002\u0b81\u0b82\u0005]/\u0002\u0b82\u0b83\u0005Y-\u0002\u0b83\u0b84", - "\u0005q9\u0002\u0b84\u0b85\u0005o8\u0002\u0b85\u0b86\u0005[.\u0002\u0b86", - "\u0278\u0003\u0002\u0002\u0002\u0b87\u0b88\u0005c2\u0002\u0b88\u0b89", - "\u0005q9\u0002\u0b89\u0b8a\u0005}?\u0002\u0b8a\u0b8b\u0005w<\u0002\u0b8b", - "\u0b8c\u0007a\u0002\u0002\u0b8c\u0b8d\u0005m7\u0002\u0b8d\u0b8e\u0005", - "e3\u0002\u0b8e\u0b8f\u0005o8\u0002\u0b8f\u0b90\u0005}?\u0002\u0b90\u0b91", - "\u0005{>\u0002\u0b91\u0b92\u0005]/\u0002\u0b92\u027a\u0003\u0002\u0002", - "\u0002\u0b93\u0b94\u0005[.\u0002\u0b94\u0b95\u0005U+\u0002\u0b95\u0b96", - "\u0005\u0085C\u0002\u0b96\u0b97\u0007a\u0002\u0002\u0b97\u0b98\u0005", - "m7\u0002\u0b98\u0b99\u0005e3\u0002\u0b99\u0b9a\u0005Y-\u0002\u0b9a\u0b9b", - "\u0005w<\u0002\u0b9b\u0b9c\u0005q9\u0002\u0b9c\u0b9d\u0005y=\u0002\u0b9d", - "\u0b9e\u0005]/\u0002\u0b9e\u0b9f\u0005Y-\u0002\u0b9f\u0ba0\u0005q9\u0002", - "\u0ba0\u0ba1\u0005o8\u0002\u0ba1\u0ba2\u0005[.\u0002\u0ba2\u027c\u0003", - "\u0002\u0002\u0002\u0ba3\u0ba4\u0005[.\u0002\u0ba4\u0ba5\u0005U+\u0002", - "\u0ba5\u0ba6\u0005\u0085C\u0002\u0ba6\u0ba7\u0007a\u0002\u0002\u0ba7", - "\u0ba8\u0005y=\u0002\u0ba8\u0ba9\u0005]/\u0002\u0ba9\u0baa\u0005Y-\u0002", - "\u0baa\u0bab\u0005q9\u0002\u0bab\u0bac\u0005o8\u0002\u0bac\u0bad\u0005", - "[.\u0002\u0bad\u027e\u0003\u0002\u0002\u0002\u0bae\u0baf\u0005[.\u0002", - "\u0baf\u0bb0\u0005U+\u0002\u0bb0\u0bb1\u0005\u0085C\u0002\u0bb1\u0bb2", - "\u0007a\u0002\u0002\u0bb2\u0bb3\u0005m7\u0002\u0bb3\u0bb4\u0005e3\u0002", - "\u0bb4\u0bb5\u0005o8\u0002\u0bb5\u0bb6\u0005}?\u0002\u0bb6\u0bb7\u0005", - "{>\u0002\u0bb7\u0bb8\u0005]/\u0002\u0bb8\u0280\u0003\u0002\u0002\u0002", - "\u0bb9\u0bba\u0005[.\u0002\u0bba\u0bbb\u0005U+\u0002\u0bbb\u0bbc\u0005", - "\u0085C\u0002\u0bbc\u0bbd\u0007a\u0002\u0002\u0bbd\u0bbe\u0005c2\u0002", - "\u0bbe\u0bbf\u0005q9\u0002\u0bbf\u0bc0\u0005}?\u0002\u0bc0\u0bc1\u0005", - "w<\u0002\u0bc1\u0282\u0003\u0002\u0002\u0002\u0bc2\u0bc3\u0005\u0085", - "C\u0002\u0bc3\u0bc4\u0005]/\u0002\u0bc4\u0bc5\u0005U+\u0002\u0bc5\u0bc6", - "\u0005w<\u0002\u0bc6\u0bc7\u0007a\u0002\u0002\u0bc7\u0bc8\u0005m7\u0002", - "\u0bc8\u0bc9\u0005q9\u0002\u0bc9\u0bca\u0005o8\u0002\u0bca\u0bcb\u0005", - "{>\u0002\u0bcb\u0bcc\u0005c2\u0002\u0bcc\u0284\u0003\u0002\u0002\u0002", - "\u0bcd\u0bce\u0005W,\u0002\u0bce\u0bcf\u0005{>\u0002\u0bcf\u0bd0\u0005", - "w<\u0002\u0bd0\u0bd1\u0005]/\u0002\u0bd1\u0bd2\u0005]/\u0002\u0bd2\u0286", - "\u0003\u0002\u0002\u0002\u0bd3\u0bd4\u0005w<\u0002\u0bd4\u0bd5\u0005", - "{>\u0002\u0bd5\u0bd6\u0005w<\u0002\u0bd6\u0bd7\u0005]/\u0002\u0bd7\u0bd8", - "\u0005]/\u0002\u0bd8\u0288\u0003\u0002\u0002\u0002\u0bd9\u0bda\u0005", - "c2\u0002\u0bda\u0bdb\u0005U+\u0002\u0bdb\u0bdc\u0005y=\u0002\u0bdc\u0bdd", - "\u0005c2\u0002\u0bdd\u028a\u0003\u0002\u0002\u0002\u0bde\u0bdf\u0005", - "w<\u0002\u0bdf\u0be0\u0005]/\u0002\u0be0\u0be1\u0005U+\u0002\u0be1\u0be2", - "\u0005k6\u0002\u0be2\u028c\u0003\u0002\u0002\u0002\u0be3\u0be4\u0005", - "[.\u0002\u0be4\u0be5\u0005q9\u0002\u0be5\u0be6\u0005}?\u0002\u0be6\u0be7", - "\u0005W,\u0002\u0be7\u0be8\u0005k6\u0002\u0be8\u0be9\u0005]/\u0002\u0be9", - "\u028e\u0003\u0002\u0002\u0002\u0bea\u0beb\u0005s:\u0002\u0beb\u0bec", - "\u0005w<\u0002\u0bec\u0bed\u0005]/\u0002\u0bed\u0bee\u0005Y-\u0002\u0bee", - "\u0bef\u0005e3\u0002\u0bef\u0bf0\u0005y=\u0002\u0bf0\u0bf1\u0005e3\u0002", - "\u0bf1\u0bf2\u0005q9\u0002\u0bf2\u0bf3\u0005o8\u0002\u0bf3\u0290\u0003", - "\u0002\u0002\u0002\u0bf4\u0bf5\u0005o8\u0002\u0bf5\u0bf6\u0005}?\u0002", - "\u0bf6\u0bf7\u0005m7\u0002\u0bf7\u0bf8\u0005]/\u0002\u0bf8\u0bf9\u0005", - "w<\u0002\u0bf9\u0bfa\u0005e3\u0002\u0bfa\u0bfb\u0005Y-\u0002\u0bfb\u0292", - "\u0003\u0002\u0002\u0002\u0bfc\u0bfd\u0005o8\u0002\u0bfd\u0bfe\u0005", - "}?\u0002\u0bfe\u0bff\u0005m7\u0002\u0bff\u0c00\u0005W,\u0002\u0c00\u0c01", - "\u0005]/\u0002\u0c01\u0c02\u0005w<\u0002\u0c02\u0294\u0003\u0002\u0002", - "\u0002\u0c03\u0c04\u0005_0\u0002\u0c04\u0c05\u0005e3\u0002\u0c05\u0c06", - "\u0005\u0083B\u0002\u0c06\u0c07\u0005]/\u0002\u0c07\u0c08\u0005[.\u0002", - "\u0c08\u0296\u0003\u0002\u0002\u0002\u0c09\u0c0a\u0005W,\u0002\u0c0a", - "\u0c0b\u0005e3\u0002\u0c0b\u0c0c\u0005{>\u0002\u0c0c\u0298\u0003\u0002", - "\u0002\u0002\u0c0d\u0c0e\u0005W,\u0002\u0c0e\u0c0f\u0005q9\u0002\u0c0f", - "\u0c10\u0005q9\u0002\u0c10\u0c11\u0005k6\u0002\u0c11\u029a\u0003\u0002", - "\u0002\u0002\u0c12\u0c13\u0005\u007f@\u0002\u0c13\u0c14\u0005U+\u0002", - "\u0c14\u0c15\u0005w<\u0002\u0c15\u0c16\u0005\u0085C\u0002\u0c16\u0c17", - "\u0005e3\u0002\u0c17\u0c18\u0005o8\u0002\u0c18\u0c19\u0005a1\u0002\u0c19", - "\u029c\u0003\u0002\u0002\u0002\u0c1a\u0c1b\u0005\u007f@\u0002\u0c1b", - "\u0c1c\u0005U+\u0002\u0c1c\u0c1d\u0005w<\u0002\u0c1d\u0c1e\u0005Y-\u0002", - "\u0c1e\u0c1f\u0005c2\u0002\u0c1f\u0c20\u0005U+\u0002\u0c20\u0c21\u0005", - "w<\u0002\u0c21\u029e\u0003\u0002\u0002\u0002\u0c22\u0c23\u0005o8\u0002", - "\u0c23\u0c24\u0005U+\u0002\u0c24\u0c25\u0005{>\u0002\u0c25\u0c26\u0005", - "e3\u0002\u0c26\u0c27\u0005q9\u0002\u0c27\u0c28\u0005o8\u0002\u0c28\u0c29", - "\u0005U+\u0002\u0c29\u0c2a\u0005k6\u0002\u0c2a\u02a0\u0003\u0002\u0002", - "\u0002\u0c2b\u0c2c\u0005o8\u0002\u0c2c\u0c2d\u0005\u007f@\u0002\u0c2d", - "\u0c2e\u0005U+\u0002\u0c2e\u0c2f\u0005w<\u0002\u0c2f\u0c30\u0005Y-\u0002", - "\u0c30\u0c31\u0005c2\u0002\u0c31\u0c32\u0005U+\u0002\u0c32\u0c33\u0005", - "w<\u0002\u0c33\u02a2\u0003\u0002\u0002\u0002\u0c34\u0c35\u0005o8\u0002", - "\u0c35\u0c36\u0005Y-\u0002\u0c36\u0c37\u0005c2\u0002\u0c37\u0c38\u0005", - "U+\u0002\u0c38\u0c39\u0005w<\u0002\u0c39\u02a4\u0003\u0002\u0002\u0002", - "\u0c3a\u0c3b\u0005\u007f@\u0002\u0c3b\u0c3c\u0005U+\u0002\u0c3c\u0c3d", - "\u0005w<\u0002\u0c3d\u0c3e\u0005W,\u0002\u0c3e\u0c3f\u0005e3\u0002\u0c3f", - "\u0c40\u0005o8\u0002\u0c40\u0c41\u0005U+\u0002\u0c41\u0c42\u0005w<\u0002", - "\u0c42\u0c43\u0005\u0085C\u0002\u0c43\u02a6\u0003\u0002\u0002\u0002", - "\u0c44\u0c45\u0005{>\u0002\u0c45\u0c46\u0005e3\u0002\u0c46\u0c47\u0005", - "o8\u0002\u0c47\u0c48\u0005\u0085C\u0002\u0c48\u0c49\u0005W,\u0002\u0c49", - "\u0c4a\u0005k6\u0002\u0c4a\u0c4b\u0005q9\u0002\u0c4b\u0c4c\u0005W,\u0002", - "\u0c4c\u02a8\u0003\u0002\u0002\u0002\u0c4d\u0c4e\u0005W,\u0002\u0c4e", - "\u0c4f\u0005k6\u0002\u0c4f\u0c50\u0005q9\u0002\u0c50\u0c51\u0005W,\u0002", - "\u0c51\u02aa\u0003\u0002\u0002\u0002\u0c52\u0c53\u0005m7\u0002\u0c53", - "\u0c54\u0005]/\u0002\u0c54\u0c55\u0005[.\u0002\u0c55\u0c56\u0005e3\u0002", - "\u0c56\u0c57\u0005}?\u0002\u0c57\u0c58\u0005m7\u0002\u0c58\u0c59\u0005", - "W,\u0002\u0c59\u0c5a\u0005k6\u0002\u0c5a\u0c5b\u0005q9\u0002\u0c5b\u0c5c", - "\u0005W,\u0002\u0c5c\u02ac\u0003\u0002\u0002\u0002\u0c5d\u0c5e\u0005", - "k6\u0002\u0c5e\u0c5f\u0005q9\u0002\u0c5f\u0c60\u0005o8\u0002\u0c60\u0c61", - "\u0005a1\u0002\u0c61\u0c62\u0005W,\u0002\u0c62\u0c63\u0005k6\u0002\u0c63", - "\u0c64\u0005q9\u0002\u0c64\u0c65\u0005W,\u0002\u0c65\u02ae\u0003\u0002", - "\u0002\u0002\u0c66\u0c67\u0005k6\u0002\u0c67\u0c68\u0005q9\u0002\u0c68", - "\u0c69\u0005o8\u0002\u0c69\u0c6a\u0005a1\u0002\u0c6a\u02b0\u0003\u0002", - "\u0002\u0002\u0c6b\u0c6c\u0005{>\u0002\u0c6c\u0c6d\u0005e3\u0002\u0c6d", - "\u0c6e\u0005o8\u0002\u0c6e\u0c6f\u0005\u0085C\u0002\u0c6f\u0c70\u0005", - "{>\u0002\u0c70\u0c71\u0005]/\u0002\u0c71\u0c72\u0005\u0083B\u0002\u0c72", - "\u0c73\u0005{>\u0002\u0c73\u02b2\u0003\u0002\u0002\u0002\u0c74\u0c75", - "\u0005{>\u0002\u0c75\u0c76\u0005]/\u0002\u0c76\u0c77\u0005\u0083B\u0002", - "\u0c77\u0c78\u0005{>\u0002\u0c78\u02b4\u0003\u0002\u0002\u0002\u0c79", - "\u0c7a\u0005m7\u0002\u0c7a\u0c7b\u0005]/\u0002\u0c7b\u0c7c\u0005[.\u0002", - "\u0c7c\u0c7d\u0005e3\u0002\u0c7d\u0c7e\u0005}?\u0002\u0c7e\u0c7f\u0005", - "m7\u0002\u0c7f\u0c80\u0005{>\u0002\u0c80\u0c81\u0005]/\u0002\u0c81\u0c82", - "\u0005\u0083B\u0002\u0c82\u0c83\u0005{>\u0002\u0c83\u02b6\u0003\u0002", - "\u0002\u0002\u0c84\u0c85\u0005k6\u0002\u0c85\u0c86\u0005q9\u0002\u0c86", - "\u0c87\u0005o8\u0002\u0c87\u0c88\u0005a1\u0002\u0c88\u0c89\u0005{>\u0002", - "\u0c89\u0c8a\u0005]/\u0002\u0c8a\u0c8b\u0005\u0083B\u0002\u0c8b\u0c8c", - "\u0005{>\u0002\u0c8c\u02b8\u0003\u0002\u0002\u0002\u0c8d\u0c8e\u0005", - "]/\u0002\u0c8e\u0c8f\u0005o8\u0002\u0c8f\u0c90\u0005}?\u0002\u0c90\u0c91", - "\u0005m7\u0002\u0c91\u02ba\u0003\u0002\u0002\u0002\u0c92\u0c93\u0005", - "y=\u0002\u0c93\u0c94\u0005]/\u0002\u0c94\u0c95\u0005w<\u0002\u0c95\u0c96", - "\u0005e3\u0002\u0c96\u0c97\u0005U+\u0002\u0c97\u0c98\u0005k6\u0002\u0c98", - "\u02bc\u0003\u0002\u0002\u0002\u0c99\u0c9a\u0005a1\u0002\u0c9a\u0c9b", - "\u0005]/\u0002\u0c9b\u0c9c\u0005q9\u0002\u0c9c\u0c9d\u0005m7\u0002\u0c9d", - "\u0c9e\u0005]/\u0002\u0c9e\u0c9f\u0005{>\u0002\u0c9f\u0ca0\u0005w<\u0002", - "\u0ca0\u0ca1\u0005\u0085C\u0002\u0ca1\u02be\u0003\u0002\u0002\u0002", - "\u0ca2\u0ca3\u0005\u0087D\u0002\u0ca3\u0ca4\u0005]/\u0002\u0ca4\u0ca5", - "\u0005w<\u0002\u0ca5\u0ca6\u0005q9\u0002\u0ca6\u0ca7\u0005_0\u0002\u0ca7", - "\u0ca8\u0005e3\u0002\u0ca8\u0ca9\u0005k6\u0002\u0ca9\u0caa\u0005k6\u0002", - "\u0caa\u02c0\u0003\u0002\u0002\u0002\u0cab\u0cac\u0005W,\u0002\u0cac", - "\u0cad\u0005\u0085C\u0002\u0cad\u0cae\u0005{>\u0002\u0cae\u0caf\u0005", - "]/\u0002\u0caf\u02c2\u0003\u0002\u0002\u0002\u0cb0\u0cb1\u0005}?\u0002", - "\u0cb1\u0cb2\u0005o8\u0002\u0cb2\u0cb3\u0005e3\u0002\u0cb3\u0cb4\u0005", - "Y-\u0002\u0cb4\u0cb5\u0005q9\u0002\u0cb5\u0cb6\u0005[.\u0002\u0cb6\u0cb7", - "\u0005]/\u0002\u0cb7\u02c4\u0003\u0002\u0002\u0002\u0cb8\u0cb9\u0005", - "{>\u0002\u0cb9\u0cba\u0005]/\u0002\u0cba\u0cbb\u0005w<\u0002\u0cbb\u0cbc", - "\u0005m7\u0002\u0cbc\u0cbd\u0005e3\u0002\u0cbd\u0cbe\u0005o8\u0002\u0cbe", - "\u0cbf\u0005U+\u0002\u0cbf\u0cc0\u0005{>\u0002\u0cc0\u0cc1\u0005]/\u0002", - "\u0cc1\u0cc2\u0005[.\u0002\u0cc2\u02c6\u0003\u0002\u0002\u0002\u0cc3", - "\u0cc4\u0005q9\u0002\u0cc4\u0cc5\u0005s:\u0002\u0cc5\u0cc6\u0005{>\u0002", - "\u0cc6\u0cc7\u0005e3\u0002\u0cc7\u0cc8\u0005q9\u0002\u0cc8\u0cc9\u0005", - "o8\u0002\u0cc9\u0cca\u0005U+\u0002\u0cca\u0ccb\u0005k6\u0002\u0ccb\u0ccc", - "\u0005k6\u0002\u0ccc\u0ccd\u0005\u0085C\u0002\u0ccd\u02c8\u0003\u0002", - "\u0002\u0002\u0cce\u0ccf\u0005]/\u0002\u0ccf\u0cd0\u0005o8\u0002\u0cd0", - "\u0cd1\u0005Y-\u0002\u0cd1\u0cd2\u0005k6\u0002\u0cd2\u0cd3\u0005q9\u0002", - "\u0cd3\u0cd4\u0005y=\u0002\u0cd4\u0cd5\u0005]/\u0002\u0cd5\u0cd6\u0005", - "[.\u0002\u0cd6\u02ca\u0003\u0002\u0002\u0002\u0cd7\u0cd8\u0005]/\u0002", - "\u0cd8\u0cd9\u0005y=\u0002\u0cd9\u0cda\u0005Y-\u0002\u0cda\u0cdb\u0005", - "U+\u0002\u0cdb\u0cdc\u0005s:\u0002\u0cdc\u0cdd\u0005]/\u0002\u0cdd\u0cde", - "\u0005[.\u0002\u0cde\u02cc\u0003\u0002\u0002\u0002\u0cdf\u0ce0\u0005", - "k6\u0002\u0ce0\u0ce1\u0005e3\u0002\u0ce1\u0ce2\u0005o8\u0002\u0ce2\u0ce3", - "\u0005]/\u0002\u0ce3\u0ce4\u0005y=\u0002\u0ce4\u02ce\u0003\u0002\u0002", - "\u0002\u0ce5\u0ce6\u0005y=\u0002\u0ce6\u0ce7\u0005{>\u0002\u0ce7\u0ce8", - "\u0005U+\u0002\u0ce8\u0ce9\u0005w<\u0002\u0ce9\u0cea\u0005{>\u0002\u0cea", - "\u0ceb\u0005e3\u0002\u0ceb\u0cec\u0005o8\u0002\u0cec\u0ced\u0005a1\u0002", - "\u0ced\u02d0\u0003\u0002\u0002\u0002\u0cee\u0cef\u0005a1\u0002\u0cef", - "\u0cf0\u0005k6\u0002\u0cf0\u0cf1\u0005q9\u0002\u0cf1\u0cf2\u0005W,\u0002", - "\u0cf2\u0cf3\u0005U+\u0002\u0cf3\u0cf4\u0005k6\u0002\u0cf4\u02d2\u0003", - "\u0002\u0002\u0002\u0cf5\u0cf6\u0005k6\u0002\u0cf6\u0cf7\u0005q9\u0002", - "\u0cf7\u0cf8\u0005Y-\u0002\u0cf8\u0cf9\u0005U+\u0002\u0cf9\u0cfa\u0005", - "k6\u0002\u0cfa\u02d4\u0003\u0002\u0002\u0002\u0cfb\u0cfc\u0005y=\u0002", - "\u0cfc\u0cfd\u0005]/\u0002\u0cfd\u0cfe\u0005y=\u0002\u0cfe\u0cff\u0005", - "y=\u0002\u0cff\u0d00\u0005e3\u0002\u0d00\u0d01\u0005q9\u0002\u0d01\u0d02", - "\u0005o8\u0002\u0d02\u02d6\u0003\u0002\u0002\u0002\u0d03\u0d04\u0005", - "\u007f@\u0002\u0d04\u0d05\u0005U+\u0002\u0d05\u0d06\u0005w<\u0002\u0d06", - "\u0d07\u0005e3\u0002\u0d07\u0d08\u0005U+\u0002\u0d08\u0d09\u0005o8\u0002", - "\u0d09\u0d0a\u0005{>\u0002\u0d0a\u02d8\u0003\u0002\u0002\u0002\u0d0b", - "\u0d0c\u0005q9\u0002\u0d0c\u0d0d\u0005W,\u0002\u0d0d\u0d0e\u0005g4\u0002", - "\u0d0e\u0d0f\u0005]/\u0002\u0d0f\u0d10\u0005Y-\u0002\u0d10\u0d11\u0005", - "{>\u0002\u0d11\u02da\u0003\u0002\u0002\u0002\u0d12\u0d13\u0005a1\u0002", - "\u0d13\u0d14\u0005]/\u0002\u0d14\u0d15\u0005q9\u0002\u0d15\u0d16\u0005", - "a1\u0002\u0d16\u0d17\u0005w<\u0002\u0d17\u0d18\u0005U+\u0002\u0d18\u0d19", - "\u0005s:\u0002\u0d19\u0d1a\u0005c2\u0002\u0d1a\u0d1b\u0005\u0085C\u0002", - "\u0d1b\u02dc\u0003\u0002\u0002\u0002\u0d1c\u0d1d\u0005e3\u0002\u0d1d", - "\u0d1e\u0005o8\u0002\u0d1e\u0d1f\u0005{>\u0002\u0d1f\u0d20\u00073\u0002", - "\u0002\u0d20\u0d21\u0003\u0002\u0002\u0002\u0d21\u0d22\b\u016f\u0002", - "\u0002\u0d22\u02de\u0003\u0002\u0002\u0002\u0d23\u0d24\u0005e3\u0002", - "\u0d24\u0d25\u0005o8\u0002\u0d25\u0d26\u0005{>\u0002\u0d26\u0d27\u0007", - "4\u0002\u0002\u0d27\u0d28\u0003\u0002\u0002\u0002\u0d28\u0d29\b\u0170", - "\u0003\u0002\u0d29\u02e0\u0003\u0002\u0002\u0002\u0d2a\u0d2b\u0005e", - "3\u0002\u0d2b\u0d2c\u0005o8\u0002\u0d2c\u0d2d\u0005{>\u0002\u0d2d\u0d2e", - "\u00075\u0002\u0002\u0d2e\u0d2f\u0003\u0002\u0002\u0002\u0d2f\u0d30", - "\b\u0171\u0004\u0002\u0d30\u02e2\u0003\u0002\u0002\u0002\u0d31\u0d32", - "\u0005e3\u0002\u0d32\u0d33\u0005o8\u0002\u0d33\u0d34\u0005{>\u0002\u0d34", - "\u0d35\u00076\u0002\u0002\u0d35\u0d36\u0003\u0002\u0002\u0002\u0d36", - "\u0d37\b\u0172\u0005\u0002\u0d37\u02e4\u0003\u0002\u0002\u0002\u0d38", - "\u0d39\u0005e3\u0002\u0d39\u0d3a\u0005o8\u0002\u0d3a\u0d3b\u0005{>\u0002", - "\u0d3b\u0d3c\u0007:\u0002\u0002\u0d3c\u0d3d\u0003\u0002\u0002\u0002", - "\u0d3d\u0d3e\b\u0173\u0006\u0002\u0d3e\u02e6\u0003\u0002\u0002\u0002", - "\u0d3f\u0d40\u0005y=\u0002\u0d40\u0d41\u0005u;\u0002\u0d41\u0d42\u0005", - "k6\u0002\u0d42\u0d43\u0007a\u0002\u0002\u0d43\u0d44\u0005{>\u0002\u0d44", - "\u0d45\u0005y=\u0002\u0d45\u0d46\u0005e3\u0002\u0d46\u0d47\u0007a\u0002", - "\u0002\u0d47\u0d48\u0005y=\u0002\u0d48\u0d49\u0005]/\u0002\u0d49\u0d4a", - "\u0005Y-\u0002\u0d4a\u0d4b\u0005q9\u0002\u0d4b\u0d4c\u0005o8\u0002\u0d4c", - "\u0d4d\u0005[.\u0002\u0d4d\u0d4e\u0003\u0002\u0002\u0002\u0d4e\u0d4f", - "\b\u0174\u0007\u0002\u0d4f\u02e8\u0003\u0002\u0002\u0002\u0d50\u0d51", - "\u0005y=\u0002\u0d51\u0d52\u0005u;\u0002\u0d52\u0d53\u0005k6\u0002\u0d53", - "\u0d54\u0007a\u0002\u0002\u0d54\u0d55\u0005{>\u0002\u0d55\u0d56\u0005", - "y=\u0002\u0d56\u0d57\u0005e3\u0002\u0d57\u0d58\u0007a\u0002\u0002\u0d58", - "\u0d59\u0005m7\u0002\u0d59\u0d5a\u0005e3\u0002\u0d5a\u0d5b\u0005o8\u0002", - "\u0d5b\u0d5c\u0005}?\u0002\u0d5c\u0d5d\u0005{>\u0002\u0d5d\u0d5e\u0005", - "]/\u0002\u0d5e\u0d5f\u0003\u0002\u0002\u0002\u0d5f\u0d60\b\u0175\b\u0002", - "\u0d60\u02ea\u0003\u0002\u0002\u0002\u0d61\u0d62\u0005y=\u0002\u0d62", - "\u0d63\u0005u;\u0002\u0d63\u0d64\u0005k6\u0002\u0d64\u0d65\u0007a\u0002", - "\u0002\u0d65\u0d66\u0005{>\u0002\u0d66\u0d67\u0005y=\u0002\u0d67\u0d68", - "\u0005e3\u0002\u0d68\u0d69\u0007a\u0002\u0002\u0d69\u0d6a\u0005c2\u0002", - "\u0d6a\u0d6b\u0005q9\u0002\u0d6b\u0d6c\u0005}?\u0002\u0d6c\u0d6d\u0005", - "w<\u0002\u0d6d\u0d6e\u0003\u0002\u0002\u0002\u0d6e\u0d6f\b\u0176\t\u0002", - "\u0d6f\u02ec\u0003\u0002\u0002\u0002\u0d70\u0d71\u0005y=\u0002\u0d71", - "\u0d72\u0005u;\u0002\u0d72\u0d73\u0005k6\u0002\u0d73\u0d74\u0007a\u0002", - "\u0002\u0d74\u0d75\u0005{>\u0002\u0d75\u0d76\u0005y=\u0002\u0d76\u0d77", - "\u0005e3\u0002\u0d77\u0d78\u0007a\u0002\u0002\u0d78\u0d79\u0005[.\u0002", - "\u0d79\u0d7a\u0005U+\u0002\u0d7a\u0d7b\u0005\u0085C\u0002\u0d7b\u0d7c", - "\u0003\u0002\u0002\u0002\u0d7c\u0d7d\b\u0177\n\u0002\u0d7d\u02ee\u0003", - "\u0002\u0002\u0002\u0d7e\u0d7f\u0005y=\u0002\u0d7f\u0d80\u0005u;\u0002", - "\u0d80\u0d81\u0005k6\u0002\u0d81\u0d82\u0007a\u0002\u0002\u0d82\u0d83", - "\u0005{>\u0002\u0d83\u0d84\u0005y=\u0002\u0d84\u0d85\u0005e3\u0002\u0d85", - "\u0d86\u0007a\u0002\u0002\u0d86\u0d87\u0005\u0081A\u0002\u0d87\u0d88", - "\u0005]/\u0002\u0d88\u0d89\u0005]/\u0002\u0d89\u0d8a\u0005i5\u0002\u0d8a", - "\u0d8b\u0003\u0002\u0002\u0002\u0d8b\u0d8c\b\u0178\u000b\u0002\u0d8c", - "\u02f0\u0003\u0002\u0002\u0002\u0d8d\u0d8e\u0005y=\u0002\u0d8e\u0d8f", - "\u0005u;\u0002\u0d8f\u0d90\u0005k6\u0002\u0d90\u0d91\u0007a\u0002\u0002", - "\u0d91\u0d92\u0005{>\u0002\u0d92\u0d93\u0005y=\u0002\u0d93\u0d94\u0005", - "e3\u0002\u0d94\u0d95\u0007a\u0002\u0002\u0d95\u0d96\u0005m7\u0002\u0d96", - "\u0d97\u0005q9\u0002\u0d97\u0d98\u0005o8\u0002\u0d98\u0d99\u0005{>\u0002", - "\u0d99\u0d9a\u0005c2\u0002\u0d9a\u0d9b\u0003\u0002\u0002\u0002\u0d9b", - "\u0d9c\b\u0179\f\u0002\u0d9c\u02f2\u0003\u0002\u0002\u0002\u0d9d\u0d9e", - "\u0005y=\u0002\u0d9e\u0d9f\u0005u;\u0002\u0d9f\u0da0\u0005k6\u0002\u0da0", - "\u0da1\u0007a\u0002\u0002\u0da1\u0da2\u0005{>\u0002\u0da2\u0da3\u0005", - "y=\u0002\u0da3\u0da4\u0005e3\u0002\u0da4\u0da5\u0007a\u0002\u0002\u0da5", - "\u0da6\u0005u;\u0002\u0da6\u0da7\u0005}?\u0002\u0da7\u0da8\u0005U+\u0002", - "\u0da8\u0da9\u0005w<\u0002\u0da9\u0daa\u0005{>\u0002\u0daa\u0dab\u0005", - "]/\u0002\u0dab\u0dac\u0005w<\u0002\u0dac\u0dad\u0003\u0002\u0002\u0002", - "\u0dad\u0dae\b\u017a\r\u0002\u0dae\u02f4\u0003\u0002\u0002\u0002\u0daf", - "\u0db0\u0005y=\u0002\u0db0\u0db1\u0005u;\u0002\u0db1\u0db2\u0005k6\u0002", - "\u0db2\u0db3\u0007a\u0002\u0002\u0db3\u0db4\u0005{>\u0002\u0db4\u0db5", - "\u0005y=\u0002\u0db5\u0db6\u0005e3\u0002\u0db6\u0db7\u0007a\u0002\u0002", - "\u0db7\u0db8\u0005\u0085C\u0002\u0db8\u0db9\u0005]/\u0002\u0db9\u0dba", - "\u0005U+\u0002\u0dba\u0dbb\u0005w<\u0002\u0dbb\u0dbc\u0003\u0002\u0002", - "\u0002\u0dbc\u0dbd\b\u017b\u000e\u0002\u0dbd\u02f6\u0003\u0002\u0002", - "\u0002\u0dbe\u0dbf\t\u001f\u0002\u0002\u0dbf\u0dc0\u0003\u0002\u0002", - "\u0002\u0dc0\u0dc1\b\u017c\u000f\u0002\u0dc1\u02f8\u0003\u0002\u0002", - "\u0002\u0dc2\u0dc4\t \u0002\u0002\u0dc3\u0dc2\u0003\u0002\u0002\u0002", - "\u0dc4\u02fa\u0003\u0002\u0002\u0002\u0dc5\u0dc7\u0005? \u0002\u0dc6", - "\u0dc8\t!\u0002\u0002\u0dc7\u0dc6\u0003\u0002\u0002\u0002\u0dc8\u0dc9", - "\u0003\u0002\u0002\u0002\u0dc9\u0dc7\u0003\u0002\u0002\u0002\u0dc9\u0dca", - "\u0003\u0002\u0002\u0002\u0dca\u02fc\u0003\u0002\u0002\u0002\u0dcb\u0dcd", - "\u0005\u008bF\u0002\u0dcc\u0dcb\u0003\u0002\u0002\u0002\u0dcd\u0dce", - "\u0003\u0002\u0002\u0002\u0dce\u0dcc\u0003\u0002\u0002\u0002\u0dce\u0dcf", - "\u0003\u0002\u0002\u0002\u0dcf\u0dd0\u0003\u0002\u0002\u0002\u0dd0\u0dd8", - "\t\u0006\u0002\u0002\u0dd1\u0dd5\u0005\u0327\u0194\u0002\u0dd2\u0dd4", - "\u0005\u0325\u0193\u0002\u0dd3\u0dd2\u0003\u0002\u0002\u0002\u0dd4\u0dd7", - "\u0003\u0002\u0002\u0002\u0dd5\u0dd3\u0003\u0002\u0002\u0002\u0dd5\u0dd6", - "\u0003\u0002\u0002\u0002\u0dd6\u0dd9\u0003\u0002\u0002\u0002\u0dd7\u0dd5", - "\u0003\u0002\u0002\u0002\u0dd8\u0dd1\u0003\u0002\u0002\u0002\u0dd8\u0dd9", - "\u0003\u0002\u0002\u0002\u0dd9\u0dee\u0003\u0002\u0002\u0002\u0dda\u0ddc", - "\u0005\u008bF\u0002\u0ddb\u0dda\u0003\u0002\u0002\u0002\u0ddc\u0ddd", - "\u0003\u0002\u0002\u0002\u0ddd\u0ddb\u0003\u0002\u0002\u0002\u0ddd\u0dde", - "\u0003\u0002\u0002\u0002\u0dde\u0ddf\u0003\u0002\u0002\u0002\u0ddf\u0de3", - "\u0005\u0329\u0195\u0002\u0de0\u0de2\u0005\u0325\u0193\u0002\u0de1\u0de0", - "\u0003\u0002\u0002\u0002\u0de2\u0de5\u0003\u0002\u0002\u0002\u0de3\u0de1", - "\u0003\u0002\u0002\u0002\u0de3\u0de4\u0003\u0002\u0002\u0002\u0de4\u0dee", - "\u0003\u0002\u0002\u0002\u0de5\u0de3\u0003\u0002\u0002\u0002\u0de6\u0dea", - "\u0005\u0327\u0194\u0002\u0de7\u0de9\u0005\u0325\u0193\u0002\u0de8\u0de7", - "\u0003\u0002\u0002\u0002\u0de9\u0dec\u0003\u0002\u0002\u0002\u0dea\u0de8", - "\u0003\u0002\u0002\u0002\u0dea\u0deb\u0003\u0002\u0002\u0002\u0deb\u0dee", - "\u0003\u0002\u0002\u0002\u0dec\u0dea\u0003\u0002\u0002\u0002\u0ded\u0dcc", - "\u0003\u0002\u0002\u0002\u0ded\u0ddb\u0003\u0002\u0002\u0002\u0ded\u0de6", - "\u0003\u0002\u0002\u0002\u0dee\u02fe\u0003\u0002\u0002\u0002\u0def\u0df0", - "\t\u000f\u0002\u0002\u0df0\u0df1\u0005\u030b\u0186\u0002\u0df1\u0300", - "\u0003\u0002\u0002\u0002\u0df2\u0df3\u0007b\u0002\u0002\u0df3\u0302", - "\u0003\u0002\u0002\u0002\u0df4\u0df5\u0007)\u0002\u0002\u0df5\u0304", - "\u0003\u0002\u0002\u0002\u0df6\u0df7\u0007$\u0002\u0002\u0df7\u0306", - "\u0003\u0002\u0002\u0002\u0df8\u0dfc\u0005\u0301\u0181\u0002\u0df9\u0dfb", - "\u000b\u0002\u0002\u0002\u0dfa\u0df9\u0003\u0002\u0002\u0002\u0dfb\u0dfe", - "\u0003\u0002\u0002\u0002\u0dfc\u0dfd\u0003\u0002\u0002\u0002\u0dfc\u0dfa", - "\u0003\u0002\u0002\u0002\u0dfd\u0dff\u0003\u0002\u0002\u0002\u0dfe\u0dfc", - "\u0003\u0002\u0002\u0002\u0dff\u0e00\u0005\u0301\u0181\u0002\u0e00\u0308", - "\u0003\u0002\u0002\u0002\u0e01\u0e05\u0005\u0305\u0183\u0002\u0e02\u0e04", - "\u000b\u0002\u0002\u0002\u0e03\u0e02\u0003\u0002\u0002\u0002\u0e04\u0e07", - "\u0003\u0002\u0002\u0002\u0e05\u0e06\u0003\u0002\u0002\u0002\u0e05\u0e03", - "\u0003\u0002\u0002\u0002\u0e06\u0e08\u0003\u0002\u0002\u0002\u0e07\u0e05", - "\u0003\u0002\u0002\u0002\u0e08\u0e09\u0005\u0305\u0183\u0002\u0e09\u0e0b", - "\u0003\u0002\u0002\u0002\u0e0a\u0e01\u0003\u0002\u0002\u0002\u0e0b\u0e0c", - "\u0003\u0002\u0002\u0002\u0e0c\u0e0a\u0003\u0002\u0002\u0002\u0e0c\u0e0d", - "\u0003\u0002\u0002\u0002\u0e0d\u030a\u0003\u0002\u0002\u0002\u0e0e\u0e12", - "\u0005\u0303\u0182\u0002\u0e0f\u0e11\u000b\u0002\u0002\u0002\u0e10\u0e0f", - "\u0003\u0002\u0002\u0002\u0e11\u0e14\u0003\u0002\u0002\u0002\u0e12\u0e13", - "\u0003\u0002\u0002\u0002\u0e12\u0e10\u0003\u0002\u0002\u0002\u0e13\u0e15", - "\u0003\u0002\u0002\u0002\u0e14\u0e12\u0003\u0002\u0002\u0002\u0e15\u0e16", - "\u0005\u0303\u0182\u0002\u0e16\u0e18\u0003\u0002\u0002\u0002\u0e17\u0e0e", - "\u0003\u0002\u0002\u0002\u0e18\u0e19\u0003\u0002\u0002\u0002\u0e19\u0e17", - "\u0003\u0002\u0002\u0002\u0e19\u0e1a\u0003\u0002\u0002\u0002\u0e1a\u030c", - "\u0003\u0002\u0002\u0002\u0e1b\u0e1f\u0005A!\u0002\u0e1c\u0e1e\u000b", - "\u0002\u0002\u0002\u0e1d\u0e1c\u0003\u0002\u0002\u0002\u0e1e\u0e21\u0003", - "\u0002\u0002\u0002\u0e1f\u0e20\u0003\u0002\u0002\u0002\u0e1f\u0e1d\u0003", - "\u0002\u0002\u0002\u0e20\u0e22\u0003\u0002\u0002\u0002\u0e21\u0e1f\u0003", - "\u0002\u0002\u0002\u0e22\u0e23\u0005C\"\u0002\u0e23\u0e25\u0003\u0002", - "\u0002\u0002\u0e24\u0e1b\u0003\u0002\u0002\u0002\u0e25\u0e26\u0003\u0002", - "\u0002\u0002\u0e26\u0e24\u0003\u0002\u0002\u0002\u0e26\u0e27\u0003\u0002", - "\u0002\u0002\u0e27\u030e\u0003\u0002\u0002\u0002\u0e28\u0e29\u00071", - "\u0002\u0002\u0e29\u0e2a\u0007,\u0002\u0002\u0e2a\u0e2b\u0007#\u0002", - "\u0002\u0e2b\u0e2c\u0003\u0002\u0002\u0002\u0e2c\u0e2d\u0005\u008bF", - "\u0002\u0e2d\u0e31\u0003\u0002\u0002\u0002\u0e2e\u0e30\u000b\u0002\u0002", - "\u0002\u0e2f\u0e2e\u0003\u0002\u0002\u0002\u0e30\u0e33\u0003\u0002\u0002", - "\u0002\u0e31\u0e32\u0003\u0002\u0002\u0002\u0e31\u0e2f\u0003\u0002\u0002", - "\u0002\u0e32\u0e34\u0003\u0002\u0002\u0002\u0e33\u0e31\u0003\u0002\u0002", - "\u0002\u0e34\u0e35\u0007,\u0002\u0002\u0e35\u0e36\u00071\u0002\u0002", - "\u0e36\u0e37\u0003\u0002\u0002\u0002\u0e37\u0e38\b\u0188\u000f\u0002", - "\u0e38\u0310\u0003\u0002\u0002\u0002\u0e39\u0e3a\u00071\u0002\u0002", - "\u0e3a\u0e3b\u0007,\u0002\u0002\u0e3b\u0e3c\u0007#\u0002\u0002\u0e3c", - "\u0e3d\u0003\u0002\u0002\u0002\u0e3d\u0e3e\b\u0189\u000f\u0002\u0e3e", - "\u0312\u0003\u0002\u0002\u0002\u0e3f\u0e40\u0007,\u0002\u0002\u0e40", - "\u0e41\u00071\u0002\u0002\u0e41\u0e42\u0003\u0002\u0002\u0002\u0e42", - "\u0e43\b\u018a\u000f\u0002\u0e43\u0314\u0003\u0002\u0002\u0002\u0e44", - "\u0e45\u00071\u0002\u0002\u0e45\u0e46\u0007,\u0002\u0002\u0e46\u0e47", - "\u0007,\u0002\u0002\u0e47\u0e55\u00071\u0002\u0002\u0e48\u0e49\u0007", - "1\u0002\u0002\u0e49\u0e4a\u0007,\u0002\u0002\u0e4a\u0e4b\u0003\u0002", - "\u0002\u0002\u0e4b\u0e4f\n\"\u0002\u0002\u0e4c\u0e4e\u000b\u0002\u0002", - "\u0002\u0e4d\u0e4c\u0003\u0002\u0002\u0002\u0e4e\u0e51\u0003\u0002\u0002", - "\u0002\u0e4f\u0e50\u0003\u0002\u0002\u0002\u0e4f\u0e4d\u0003\u0002\u0002", - "\u0002\u0e50\u0e52\u0003\u0002\u0002\u0002\u0e51\u0e4f\u0003\u0002\u0002", - "\u0002\u0e52\u0e53\u0007,\u0002\u0002\u0e53\u0e55\u00071\u0002\u0002", - "\u0e54\u0e44\u0003\u0002\u0002\u0002\u0e54\u0e48\u0003\u0002\u0002\u0002", - "\u0e55\u0e56\u0003\u0002\u0002\u0002\u0e56\u0e57\b\u018b\u000f\u0002", - "\u0e57\u0316\u0003\u0002\u0002\u0002\u0e58\u0e5c\u0007%\u0002\u0002", - "\u0e59\u0e5b\n#\u0002\u0002\u0e5a\u0e59\u0003\u0002\u0002\u0002\u0e5b", - "\u0e5e\u0003\u0002\u0002\u0002\u0e5c\u0e5a\u0003\u0002\u0002\u0002\u0e5c", - "\u0e5d\u0003\u0002\u0002\u0002\u0e5d\u0e5f\u0003\u0002\u0002\u0002\u0e5e", - "\u0e5c\u0003\u0002\u0002\u0002\u0e5f\u0e60\b\u018c\u000f\u0002\u0e60", - "\u0318\u0003\u0002\u0002\u0002\u0e61\u0e6b\u0005\u031b\u018e\u0002\u0e62", - "\u0e66\t$\u0002\u0002\u0e63\u0e65\n#\u0002\u0002\u0e64\u0e63\u0003\u0002", - "\u0002\u0002\u0e65\u0e68\u0003\u0002\u0002\u0002\u0e66\u0e64\u0003\u0002", - "\u0002\u0002\u0e66\u0e67\u0003\u0002\u0002\u0002\u0e67\u0e6c\u0003\u0002", - "\u0002\u0002\u0e68\u0e66\u0003\u0002\u0002\u0002\u0e69\u0e6c\u0005\u031d", - "\u018f\u0002\u0e6a\u0e6c\u0007\u0002\u0002\u0003\u0e6b\u0e62\u0003\u0002", - "\u0002\u0002\u0e6b\u0e69\u0003\u0002\u0002\u0002\u0e6b\u0e6a\u0003\u0002", - "\u0002\u0002\u0e6c\u0e6d\u0003\u0002\u0002\u0002\u0e6d\u0e6e\b\u018d", - "\u000f\u0002\u0e6e\u031a\u0003\u0002\u0002\u0002\u0e6f\u0e70\u0007/", - "\u0002\u0002\u0e70\u0e71\u0007/\u0002\u0002\u0e71\u031c\u0003\u0002", - "\u0002\u0002\u0e72\u0e73\t#\u0002\u0002\u0e73\u031e\u0003\u0002\u0002", - "\u0002\u0e74\u0e78\u0005\u0089E\u0002\u0e75\u0e78\t%\u0002\u0002\u0e76", - "\u0e78\u0005/\u0018\u0002\u0e77\u0e74\u0003\u0002\u0002\u0002\u0e77", - "\u0e75\u0003\u0002\u0002\u0002\u0e77\u0e76\u0003\u0002\u0002\u0002\u0e78", - "\u0e79\u0003\u0002\u0002\u0002\u0e79\u0e77\u0003\u0002\u0002\u0002\u0e79", - "\u0e7a\u0003\u0002\u0002\u0002\u0e7a\u0320\u0003\u0002\u0002\u0002\u0e7b", - "\u0e7c\u00071\u0002\u0002\u0e7c\u0e7d\u0007,\u0002\u0002\u0e7d\u0322", - "\u0003\u0002\u0002\u0002\u0e7e\u0e7f\u0007,\u0002\u0002\u0e7f\u0e80", - "\u00071\u0002\u0002\u0e80\u0324\u0003\u0002\u0002\u0002\u0e81\u0e84", - "\u0005\u0089E\u0002\u0e82\u0e84\u0005\u0327\u0194\u0002\u0e83\u0e81", - "\u0003\u0002\u0002\u0002\u0e83\u0e82\u0003\u0002\u0002\u0002\u0e84\u0326", - "\u0003\u0002\u0002\u0002\u0e85\u0e86\t&\u0002\u0002\u0e86\u0328\u0003", - "\u0002\u0002\u0002\u0e87\u0e88\t\'\u0002\u0002\u0e88\u032a\u0003\u0002", - "\u0002\u0002+\u0002\u03c7\u03d1\u03d9\u03dd\u03e5\u03ed\u03f0\u03f5", - "\u03fb\u03fe\u0404\u0437\u08c7\u090c\u0929\u0dc3\u0dc9\u0dce\u0dd5\u0dd8", - "\u0ddd\u0de3\u0dea\u0ded\u0dfc\u0e05\u0e0c\u0e12\u0e19\u0e1f\u0e26\u0e31", - "\u0e4f\u0e54\u0e5c\u0e66\u0e6b\u0e77\u0e79\u0e83\u0010\t1\u0002\t2\u0002", - "\t3\u0002\t5\u0002\t6\u0002\t7\u0002\t8\u0002\t9\u0002\t:\u0002\t;\u0002", - "\t<\u0002\t=\u0002\t>\u0002\u0002\u0003\u0002"].join(""); - - -const atn = new antlr4.atn.ATNDeserializer().deserialize(serializedATN); - -const decisionsToDFA = atn.decisionToState.map( (ds, index) => new antlr4.dfa.DFA(ds, index) ); - -class SQLSelectLexer extends antlr4.Lexer { - - static grammarFileName = "SQLSelectLexer.g4"; - static channelNames = [ "DEFAULT_TOKEN_CHANNEL", "HIDDEN" ]; - static modeNames = [ "DEFAULT_MODE" ]; - static literalNames = [ null, "'='", "':='", "'<=>'", "'>='", "'>'", "'<='", - "'<'", "'!='", "'+'", "'-'", "'*'", "'/'", "'%'", - "'!'", "'~'", "'<<'", "'>>'", "'&&'", "'&'", "'^'", - "'||'", "'|'", "'.'", "','", "';'", "':'", "'('", - "')'", "'{'", "'}'", "'_'", "'['", "']'", "'->'", - "'->>'", "'@'", null, "'@@'", "'\\N'", "'?'", "'::'", - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, "'/*!'", "'*/'" ]; - static symbolicNames = [ null, "EQUAL_OPERATOR", "ASSIGN_OPERATOR", "NULL_SAFE_EQUAL_OPERATOR", - "GREATER_OR_EQUAL_OPERATOR", "GREATER_THAN_OPERATOR", - "LESS_OR_EQUAL_OPERATOR", "LESS_THAN_OPERATOR", - "NOT_EQUAL_OPERATOR", "PLUS_OPERATOR", "MINUS_OPERATOR", - "MULT_OPERATOR", "DIV_OPERATOR", "MOD_OPERATOR", - "LOGICAL_NOT_OPERATOR", "BITWISE_NOT_OPERATOR", - "SHIFT_LEFT_OPERATOR", "SHIFT_RIGHT_OPERATOR", - "LOGICAL_AND_OPERATOR", "BITWISE_AND_OPERATOR", - "BITWISE_XOR_OPERATOR", "LOGICAL_OR_OPERATOR", - "BITWISE_OR_OPERATOR", "DOT_SYMBOL", "COMMA_SYMBOL", - "SEMICOLON_SYMBOL", "COLON_SYMBOL", "OPEN_PAR_SYMBOL", - "CLOSE_PAR_SYMBOL", "OPEN_CURLY_SYMBOL", "CLOSE_CURLY_SYMBOL", - "UNDERLINE_SYMBOL", "OPEN_BRACKET_SYMBOL", "CLOSE_BRACKET_SYMBOL", - "JSON_SEPARATOR_SYMBOL", "JSON_UNQUOTED_SEPARATOR_SYMBOL", - "AT_SIGN_SYMBOL", "AT_TEXT_SUFFIX", "AT_AT_SIGN_SYMBOL", - "NULL2_SYMBOL", "PARAM_MARKER", "CAST_COLON_SYMBOL", - "HEX_NUMBER", "BIN_NUMBER", "INT_NUMBER", "DECIMAL_NUMBER", - "FLOAT_NUMBER", "TINYINT_SYMBOL", "SMALLINT_SYMBOL", - "MEDIUMINT_SYMBOL", "BYTE_INT_SYMBOL", "INT_SYMBOL", - "BIGINT_SYMBOL", "SECOND_SYMBOL", "MINUTE_SYMBOL", - "HOUR_SYMBOL", "DAY_SYMBOL", "WEEK_SYMBOL", "MONTH_SYMBOL", - "QUARTER_SYMBOL", "YEAR_SYMBOL", "DEFAULT_SYMBOL", - "UNION_SYMBOL", "SELECT_SYMBOL", "ALL_SYMBOL", - "DISTINCT_SYMBOL", "STRAIGHT_JOIN_SYMBOL", "HIGH_PRIORITY_SYMBOL", - "SQL_SMALL_RESULT_SYMBOL", "SQL_BIG_RESULT_SYMBOL", - "SQL_BUFFER_RESULT_SYMBOL", "SQL_CALC_FOUND_ROWS_SYMBOL", - "LIMIT_SYMBOL", "OFFSET_SYMBOL", "INTO_SYMBOL", - "OUTFILE_SYMBOL", "DUMPFILE_SYMBOL", "PROCEDURE_SYMBOL", - "ANALYSE_SYMBOL", "HAVING_SYMBOL", "WINDOW_SYMBOL", - "AS_SYMBOL", "PARTITION_SYMBOL", "BY_SYMBOL", - "ROWS_SYMBOL", "RANGE_SYMBOL", "GROUPS_SYMBOL", - "UNBOUNDED_SYMBOL", "PRECEDING_SYMBOL", "INTERVAL_SYMBOL", - "CURRENT_SYMBOL", "ROW_SYMBOL", "BETWEEN_SYMBOL", - "AND_SYMBOL", "FOLLOWING_SYMBOL", "EXCLUDE_SYMBOL", - "GROUP_SYMBOL", "TIES_SYMBOL", "NO_SYMBOL", "OTHERS_SYMBOL", - "WITH_SYMBOL", "WITHOUT_SYMBOL", "RECURSIVE_SYMBOL", - "ROLLUP_SYMBOL", "CUBE_SYMBOL", "ORDER_SYMBOL", - "ASC_SYMBOL", "DESC_SYMBOL", "FROM_SYMBOL", "DUAL_SYMBOL", - "VALUES_SYMBOL", "TABLE_SYMBOL", "SQL_NO_CACHE_SYMBOL", - "SQL_CACHE_SYMBOL", "MAX_STATEMENT_TIME_SYMBOL", - "FOR_SYMBOL", "OF_SYMBOL", "LOCK_SYMBOL", "IN_SYMBOL", - "SHARE_SYMBOL", "MODE_SYMBOL", "UPDATE_SYMBOL", - "SKIP_SYMBOL", "LOCKED_SYMBOL", "NOWAIT_SYMBOL", - "WHERE_SYMBOL", "OJ_SYMBOL", "ON_SYMBOL", "USING_SYMBOL", - "NATURAL_SYMBOL", "INNER_SYMBOL", "JOIN_SYMBOL", - "LEFT_SYMBOL", "RIGHT_SYMBOL", "OUTER_SYMBOL", - "CROSS_SYMBOL", "LATERAL_SYMBOL", "JSON_TABLE_SYMBOL", - "COLUMNS_SYMBOL", "ORDINALITY_SYMBOL", "EXISTS_SYMBOL", - "PATH_SYMBOL", "NESTED_SYMBOL", "EMPTY_SYMBOL", - "ERROR_SYMBOL", "NULL_SYMBOL", "USE_SYMBOL", "FORCE_SYMBOL", - "IGNORE_SYMBOL", "KEY_SYMBOL", "INDEX_SYMBOL", - "PRIMARY_SYMBOL", "IS_SYMBOL", "TRUE_SYMBOL", - "FALSE_SYMBOL", "UNKNOWN_SYMBOL", "NOT_SYMBOL", - "XOR_SYMBOL", "OR_SYMBOL", "ANY_SYMBOL", "MEMBER_SYMBOL", - "SOUNDS_SYMBOL", "LIKE_SYMBOL", "ESCAPE_SYMBOL", - "REGEXP_SYMBOL", "DIV_SYMBOL", "MOD_SYMBOL", "MATCH_SYMBOL", - "AGAINST_SYMBOL", "BINARY_SYMBOL", "CAST_SYMBOL", - "ARRAY_SYMBOL", "CASE_SYMBOL", "END_SYMBOL", "CONVERT_SYMBOL", - "COLLATE_SYMBOL", "AVG_SYMBOL", "BIT_AND_SYMBOL", - "BIT_OR_SYMBOL", "BIT_XOR_SYMBOL", "COUNT_SYMBOL", - "MIN_SYMBOL", "MAX_SYMBOL", "STD_SYMBOL", "VARIANCE_SYMBOL", - "STDDEV_SAMP_SYMBOL", "VAR_SAMP_SYMBOL", "SUM_SYMBOL", - "GROUP_CONCAT_SYMBOL", "SEPARATOR_SYMBOL", "GROUPING_SYMBOL", - "ROW_NUMBER_SYMBOL", "RANK_SYMBOL", "DENSE_RANK_SYMBOL", - "CUME_DIST_SYMBOL", "PERCENT_RANK_SYMBOL", "NTILE_SYMBOL", - "LEAD_SYMBOL", "LAG_SYMBOL", "FIRST_VALUE_SYMBOL", - "LAST_VALUE_SYMBOL", "NTH_VALUE_SYMBOL", "FIRST_SYMBOL", - "LAST_SYMBOL", "OVER_SYMBOL", "RESPECT_SYMBOL", - "NULLS_SYMBOL", "JSON_ARRAYAGG_SYMBOL", "JSON_OBJECTAGG_SYMBOL", - "BOOLEAN_SYMBOL", "LANGUAGE_SYMBOL", "QUERY_SYMBOL", - "EXPANSION_SYMBOL", "CHAR_SYMBOL", "CURRENT_USER_SYMBOL", - "DATE_SYMBOL", "INSERT_SYMBOL", "TIME_SYMBOL", - "TIMESTAMP_SYMBOL", "TIMESTAMP_LTZ_SYMBOL", "TIMESTAMP_NTZ_SYMBOL", - "ZONE_SYMBOL", "USER_SYMBOL", "ADDDATE_SYMBOL", - "SUBDATE_SYMBOL", "CURDATE_SYMBOL", "CURTIME_SYMBOL", - "DATE_ADD_SYMBOL", "DATE_SUB_SYMBOL", "EXTRACT_SYMBOL", - "GET_FORMAT_SYMBOL", "NOW_SYMBOL", "POSITION_SYMBOL", - "SYSDATE_SYMBOL", "TIMESTAMP_ADD_SYMBOL", "TIMESTAMP_DIFF_SYMBOL", - "UTC_DATE_SYMBOL", "UTC_TIME_SYMBOL", "UTC_TIMESTAMP_SYMBOL", - "ASCII_SYMBOL", "CHARSET_SYMBOL", "COALESCE_SYMBOL", - "COLLATION_SYMBOL", "DATABASE_SYMBOL", "IF_SYMBOL", - "FORMAT_SYMBOL", "MICROSECOND_SYMBOL", "OLD_PASSWORD_SYMBOL", - "PASSWORD_SYMBOL", "REPEAT_SYMBOL", "REPLACE_SYMBOL", - "REVERSE_SYMBOL", "ROW_COUNT_SYMBOL", "TRUNCATE_SYMBOL", - "WEIGHT_STRING_SYMBOL", "CONTAINS_SYMBOL", "GEOMETRYCOLLECTION_SYMBOL", - "LINESTRING_SYMBOL", "MULTILINESTRING_SYMBOL", - "MULTIPOINT_SYMBOL", "MULTIPOLYGON_SYMBOL", "POINT_SYMBOL", - "POLYGON_SYMBOL", "LEVEL_SYMBOL", "DATETIME_SYMBOL", - "TRIM_SYMBOL", "LEADING_SYMBOL", "TRAILING_SYMBOL", - "BOTH_SYMBOL", "STRING_SYMBOL", "SUBSTRING_SYMBOL", - "WHEN_SYMBOL", "THEN_SYMBOL", "ELSE_SYMBOL", "SIGNED_SYMBOL", - "UNSIGNED_SYMBOL", "DECIMAL_SYMBOL", "JSON_SYMBOL", - "FLOAT_SYMBOL", "FLOAT_SYMBOL_4", "FLOAT_SYMBOL_8", - "SET_SYMBOL", "SECOND_MICROSECOND_SYMBOL", "MINUTE_MICROSECOND_SYMBOL", - "MINUTE_SECOND_SYMBOL", "HOUR_MICROSECOND_SYMBOL", - "HOUR_SECOND_SYMBOL", "HOUR_MINUTE_SYMBOL", "DAY_MICROSECOND_SYMBOL", - "DAY_SECOND_SYMBOL", "DAY_MINUTE_SYMBOL", "DAY_HOUR_SYMBOL", - "YEAR_MONTH_SYMBOL", "BTREE_SYMBOL", "RTREE_SYMBOL", - "HASH_SYMBOL", "REAL_SYMBOL", "DOUBLE_SYMBOL", - "PRECISION_SYMBOL", "NUMERIC_SYMBOL", "NUMBER_SYMBOL", - "FIXED_SYMBOL", "BIT_SYMBOL", "BOOL_SYMBOL", "VARYING_SYMBOL", - "VARCHAR_SYMBOL", "NATIONAL_SYMBOL", "NVARCHAR_SYMBOL", - "NCHAR_SYMBOL", "VARBINARY_SYMBOL", "TINYBLOB_SYMBOL", - "BLOB_SYMBOL", "MEDIUMBLOB_SYMBOL", "LONGBLOB_SYMBOL", - "LONG_SYMBOL", "TINYTEXT_SYMBOL", "TEXT_SYMBOL", - "MEDIUMTEXT_SYMBOL", "LONGTEXT_SYMBOL", "ENUM_SYMBOL", - "SERIAL_SYMBOL", "GEOMETRY_SYMBOL", "ZEROFILL_SYMBOL", - "BYTE_SYMBOL", "UNICODE_SYMBOL", "TERMINATED_SYMBOL", - "OPTIONALLY_SYMBOL", "ENCLOSED_SYMBOL", "ESCAPED_SYMBOL", - "LINES_SYMBOL", "STARTING_SYMBOL", "GLOBAL_SYMBOL", - "LOCAL_SYMBOL", "SESSION_SYMBOL", "VARIANT_SYMBOL", - "OBJECT_SYMBOL", "GEOGRAPHY_SYMBOL", "WHITESPACE", - "INVALID_INPUT", "UNDERSCORE_CHARSET", "IDENTIFIER", - "NCHAR_TEXT", "BACK_TICK_QUOTED_ID", "DOUBLE_QUOTED_TEXT", - "SINGLE_QUOTED_TEXT", "BRACKET_QUOTED_TEXT", "VERSION_COMMENT_START", - "MYSQL_COMMENT_START", "VERSION_COMMENT_END", - "BLOCK_COMMENT", "POUND_COMMENT", "DASHDASH_COMMENT" ]; - static ruleNames = [ "EQUAL_OPERATOR", "ASSIGN_OPERATOR", "NULL_SAFE_EQUAL_OPERATOR", - "GREATER_OR_EQUAL_OPERATOR", "GREATER_THAN_OPERATOR", - "LESS_OR_EQUAL_OPERATOR", "LESS_THAN_OPERATOR", "NOT_EQUAL_OPERATOR", - "PLUS_OPERATOR", "MINUS_OPERATOR", "MULT_OPERATOR", - "DIV_OPERATOR", "MOD_OPERATOR", "LOGICAL_NOT_OPERATOR", - "BITWISE_NOT_OPERATOR", "SHIFT_LEFT_OPERATOR", "SHIFT_RIGHT_OPERATOR", - "LOGICAL_AND_OPERATOR", "BITWISE_AND_OPERATOR", "BITWISE_XOR_OPERATOR", - "LOGICAL_OR_OPERATOR", "BITWISE_OR_OPERATOR", "DOT_SYMBOL", - "COMMA_SYMBOL", "SEMICOLON_SYMBOL", "COLON_SYMBOL", - "OPEN_PAR_SYMBOL", "CLOSE_PAR_SYMBOL", "OPEN_CURLY_SYMBOL", - "CLOSE_CURLY_SYMBOL", "UNDERLINE_SYMBOL", "OPEN_BRACKET_SYMBOL", - "CLOSE_BRACKET_SYMBOL", "JSON_SEPARATOR_SYMBOL", "JSON_UNQUOTED_SEPARATOR_SYMBOL", - "AT_SIGN_SYMBOL", "AT_TEXT_SUFFIX", "AT_AT_SIGN_SYMBOL", - "NULL2_SYMBOL", "PARAM_MARKER", "CAST_COLON_SYMBOL", - "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", - "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", - "U", "V", "W", "X", "Y", "Z", "DIGIT", "DIGITS", "HEXDIGIT", - "HEX_NUMBER", "BIN_NUMBER", "INT_NUMBER", "DECIMAL_NUMBER", - "FLOAT_NUMBER", "TINYINT_SYMBOL", "SMALLINT_SYMBOL", - "MEDIUMINT_SYMBOL", "BYTE_INT_SYMBOL", "INT_SYMBOL", - "BIGINT_SYMBOL", "SECOND_SYMBOL", "MINUTE_SYMBOL", - "HOUR_SYMBOL", "DAY_SYMBOL", "WEEK_SYMBOL", "MONTH_SYMBOL", - "QUARTER_SYMBOL", "YEAR_SYMBOL", "DEFAULT_SYMBOL", - "UNION_SYMBOL", "SELECT_SYMBOL", "ALL_SYMBOL", "DISTINCT_SYMBOL", - "STRAIGHT_JOIN_SYMBOL", "HIGH_PRIORITY_SYMBOL", "SQL_SMALL_RESULT_SYMBOL", - "SQL_BIG_RESULT_SYMBOL", "SQL_BUFFER_RESULT_SYMBOL", - "SQL_CALC_FOUND_ROWS_SYMBOL", "LIMIT_SYMBOL", "OFFSET_SYMBOL", - "INTO_SYMBOL", "OUTFILE_SYMBOL", "DUMPFILE_SYMBOL", - "PROCEDURE_SYMBOL", "ANALYSE_SYMBOL", "HAVING_SYMBOL", - "WINDOW_SYMBOL", "AS_SYMBOL", "PARTITION_SYMBOL", - "BY_SYMBOL", "ROWS_SYMBOL", "RANGE_SYMBOL", "GROUPS_SYMBOL", - "UNBOUNDED_SYMBOL", "PRECEDING_SYMBOL", "INTERVAL_SYMBOL", - "CURRENT_SYMBOL", "ROW_SYMBOL", "BETWEEN_SYMBOL", - "AND_SYMBOL", "FOLLOWING_SYMBOL", "EXCLUDE_SYMBOL", - "GROUP_SYMBOL", "TIES_SYMBOL", "NO_SYMBOL", "OTHERS_SYMBOL", - "WITH_SYMBOL", "WITHOUT_SYMBOL", "RECURSIVE_SYMBOL", - "ROLLUP_SYMBOL", "CUBE_SYMBOL", "ORDER_SYMBOL", "ASC_SYMBOL", - "DESC_SYMBOL", "FROM_SYMBOL", "DUAL_SYMBOL", "VALUES_SYMBOL", - "TABLE_SYMBOL", "SQL_NO_CACHE_SYMBOL", "SQL_CACHE_SYMBOL", - "MAX_STATEMENT_TIME_SYMBOL", "FOR_SYMBOL", "OF_SYMBOL", - "LOCK_SYMBOL", "IN_SYMBOL", "SHARE_SYMBOL", "MODE_SYMBOL", - "UPDATE_SYMBOL", "SKIP_SYMBOL", "LOCKED_SYMBOL", "NOWAIT_SYMBOL", - "WHERE_SYMBOL", "OJ_SYMBOL", "ON_SYMBOL", "USING_SYMBOL", - "NATURAL_SYMBOL", "INNER_SYMBOL", "JOIN_SYMBOL", "LEFT_SYMBOL", - "RIGHT_SYMBOL", "OUTER_SYMBOL", "CROSS_SYMBOL", "LATERAL_SYMBOL", - "JSON_TABLE_SYMBOL", "COLUMNS_SYMBOL", "ORDINALITY_SYMBOL", - "EXISTS_SYMBOL", "PATH_SYMBOL", "NESTED_SYMBOL", "EMPTY_SYMBOL", - "ERROR_SYMBOL", "NULL_SYMBOL", "USE_SYMBOL", "FORCE_SYMBOL", - "IGNORE_SYMBOL", "KEY_SYMBOL", "INDEX_SYMBOL", "PRIMARY_SYMBOL", - "IS_SYMBOL", "TRUE_SYMBOL", "FALSE_SYMBOL", "UNKNOWN_SYMBOL", - "NOT_SYMBOL", "XOR_SYMBOL", "OR_SYMBOL", "ANY_SYMBOL", - "MEMBER_SYMBOL", "SOUNDS_SYMBOL", "LIKE_SYMBOL", "ESCAPE_SYMBOL", - "REGEXP_SYMBOL", "DIV_SYMBOL", "MOD_SYMBOL", "MATCH_SYMBOL", - "AGAINST_SYMBOL", "BINARY_SYMBOL", "CAST_SYMBOL", - "ARRAY_SYMBOL", "CASE_SYMBOL", "END_SYMBOL", "CONVERT_SYMBOL", - "COLLATE_SYMBOL", "AVG_SYMBOL", "BIT_AND_SYMBOL", - "BIT_OR_SYMBOL", "BIT_XOR_SYMBOL", "COUNT_SYMBOL", - "MIN_SYMBOL", "MAX_SYMBOL", "STD_SYMBOL", "VARIANCE_SYMBOL", - "STDDEV_SAMP_SYMBOL", "VAR_SAMP_SYMBOL", "SUM_SYMBOL", - "GROUP_CONCAT_SYMBOL", "SEPARATOR_SYMBOL", "GROUPING_SYMBOL", - "ROW_NUMBER_SYMBOL", "RANK_SYMBOL", "DENSE_RANK_SYMBOL", - "CUME_DIST_SYMBOL", "PERCENT_RANK_SYMBOL", "NTILE_SYMBOL", - "LEAD_SYMBOL", "LAG_SYMBOL", "FIRST_VALUE_SYMBOL", - "LAST_VALUE_SYMBOL", "NTH_VALUE_SYMBOL", "FIRST_SYMBOL", - "LAST_SYMBOL", "OVER_SYMBOL", "RESPECT_SYMBOL", "NULLS_SYMBOL", - "JSON_ARRAYAGG_SYMBOL", "JSON_OBJECTAGG_SYMBOL", "BOOLEAN_SYMBOL", - "LANGUAGE_SYMBOL", "QUERY_SYMBOL", "EXPANSION_SYMBOL", - "CHAR_SYMBOL", "CURRENT_USER_SYMBOL", "DATE_SYMBOL", - "INSERT_SYMBOL", "TIME_SYMBOL", "TIMESTAMP_SYMBOL", - "TIMESTAMP_LTZ_SYMBOL", "TIMESTAMP_NTZ_SYMBOL", "ZONE_SYMBOL", - "USER_SYMBOL", "ADDDATE_SYMBOL", "SUBDATE_SYMBOL", - "CURDATE_SYMBOL", "CURTIME_SYMBOL", "DATE_ADD_SYMBOL", - "DATE_SUB_SYMBOL", "EXTRACT_SYMBOL", "GET_FORMAT_SYMBOL", - "NOW_SYMBOL", "POSITION_SYMBOL", "SYSDATE_SYMBOL", - "TIMESTAMP_ADD_SYMBOL", "TIMESTAMP_DIFF_SYMBOL", "UTC_DATE_SYMBOL", - "UTC_TIME_SYMBOL", "UTC_TIMESTAMP_SYMBOL", "ASCII_SYMBOL", - "CHARSET_SYMBOL", "COALESCE_SYMBOL", "COLLATION_SYMBOL", - "DATABASE_SYMBOL", "IF_SYMBOL", "FORMAT_SYMBOL", "MICROSECOND_SYMBOL", - "OLD_PASSWORD_SYMBOL", "PASSWORD_SYMBOL", "REPEAT_SYMBOL", - "REPLACE_SYMBOL", "REVERSE_SYMBOL", "ROW_COUNT_SYMBOL", - "TRUNCATE_SYMBOL", "WEIGHT_STRING_SYMBOL", "CONTAINS_SYMBOL", - "GEOMETRYCOLLECTION_SYMBOL", "LINESTRING_SYMBOL", - "MULTILINESTRING_SYMBOL", "MULTIPOINT_SYMBOL", "MULTIPOLYGON_SYMBOL", - "POINT_SYMBOL", "POLYGON_SYMBOL", "LEVEL_SYMBOL", - "DATETIME_SYMBOL", "TRIM_SYMBOL", "LEADING_SYMBOL", - "TRAILING_SYMBOL", "BOTH_SYMBOL", "STRING_SYMBOL", - "SUBSTRING_SYMBOL", "WHEN_SYMBOL", "THEN_SYMBOL", - "ELSE_SYMBOL", "SIGNED_SYMBOL", "UNSIGNED_SYMBOL", - "DECIMAL_SYMBOL", "JSON_SYMBOL", "FLOAT_SYMBOL", "FLOAT_SYMBOL_4", - "FLOAT_SYMBOL_8", "SET_SYMBOL", "SECOND_MICROSECOND_SYMBOL", - "MINUTE_MICROSECOND_SYMBOL", "MINUTE_SECOND_SYMBOL", - "HOUR_MICROSECOND_SYMBOL", "HOUR_SECOND_SYMBOL", "HOUR_MINUTE_SYMBOL", - "DAY_MICROSECOND_SYMBOL", "DAY_SECOND_SYMBOL", "DAY_MINUTE_SYMBOL", - "DAY_HOUR_SYMBOL", "YEAR_MONTH_SYMBOL", "BTREE_SYMBOL", - "RTREE_SYMBOL", "HASH_SYMBOL", "REAL_SYMBOL", "DOUBLE_SYMBOL", - "PRECISION_SYMBOL", "NUMERIC_SYMBOL", "NUMBER_SYMBOL", - "FIXED_SYMBOL", "BIT_SYMBOL", "BOOL_SYMBOL", "VARYING_SYMBOL", - "VARCHAR_SYMBOL", "NATIONAL_SYMBOL", "NVARCHAR_SYMBOL", - "NCHAR_SYMBOL", "VARBINARY_SYMBOL", "TINYBLOB_SYMBOL", - "BLOB_SYMBOL", "MEDIUMBLOB_SYMBOL", "LONGBLOB_SYMBOL", - "LONG_SYMBOL", "TINYTEXT_SYMBOL", "TEXT_SYMBOL", "MEDIUMTEXT_SYMBOL", - "LONGTEXT_SYMBOL", "ENUM_SYMBOL", "SERIAL_SYMBOL", - "GEOMETRY_SYMBOL", "ZEROFILL_SYMBOL", "BYTE_SYMBOL", - "UNICODE_SYMBOL", "TERMINATED_SYMBOL", "OPTIONALLY_SYMBOL", - "ENCLOSED_SYMBOL", "ESCAPED_SYMBOL", "LINES_SYMBOL", - "STARTING_SYMBOL", "GLOBAL_SYMBOL", "LOCAL_SYMBOL", - "SESSION_SYMBOL", "VARIANT_SYMBOL", "OBJECT_SYMBOL", - "GEOGRAPHY_SYMBOL", "INT1_SYMBOL", "INT2_SYMBOL", - "INT3_SYMBOL", "INT4_SYMBOL", "INT8_SYMBOL", "SQL_TSI_SECOND_SYMBOL", - "SQL_TSI_MINUTE_SYMBOL", "SQL_TSI_HOUR_SYMBOL", "SQL_TSI_DAY_SYMBOL", - "SQL_TSI_WEEK_SYMBOL", "SQL_TSI_MONTH_SYMBOL", "SQL_TSI_QUARTER_SYMBOL", - "SQL_TSI_YEAR_SYMBOL", "WHITESPACE", "INVALID_INPUT", - "UNDERSCORE_CHARSET", "IDENTIFIER", "NCHAR_TEXT", - "BACK_TICK", "SINGLE_QUOTE", "DOUBLE_QUOTE", "BACK_TICK_QUOTED_ID", - "DOUBLE_QUOTED_TEXT", "SINGLE_QUOTED_TEXT", "BRACKET_QUOTED_TEXT", - "VERSION_COMMENT_START", "MYSQL_COMMENT_START", "VERSION_COMMENT_END", - "BLOCK_COMMENT", "POUND_COMMENT", "DASHDASH_COMMENT", - "DOUBLE_DASH", "LINEBREAK", "SIMPLE_IDENTIFIER", "ML_COMMENT_HEAD", - "ML_COMMENT_END", "LETTER_WHEN_UNQUOTED", "LETTER_WHEN_UNQUOTED_NO_DIGIT", - "LETTER_WITHOUT_FLOAT_PART" ]; - - constructor(input) { - super(input) - this._interp = new antlr4.atn.LexerATNSimulator(this, atn, decisionsToDFA, new antlr4.PredictionContextCache()); - } - - get atn() { - return atn; - } -} - -SQLSelectLexer.EOF = antlr4.Token.EOF; -SQLSelectLexer.EQUAL_OPERATOR = 1; -SQLSelectLexer.ASSIGN_OPERATOR = 2; -SQLSelectLexer.NULL_SAFE_EQUAL_OPERATOR = 3; -SQLSelectLexer.GREATER_OR_EQUAL_OPERATOR = 4; -SQLSelectLexer.GREATER_THAN_OPERATOR = 5; -SQLSelectLexer.LESS_OR_EQUAL_OPERATOR = 6; -SQLSelectLexer.LESS_THAN_OPERATOR = 7; -SQLSelectLexer.NOT_EQUAL_OPERATOR = 8; -SQLSelectLexer.PLUS_OPERATOR = 9; -SQLSelectLexer.MINUS_OPERATOR = 10; -SQLSelectLexer.MULT_OPERATOR = 11; -SQLSelectLexer.DIV_OPERATOR = 12; -SQLSelectLexer.MOD_OPERATOR = 13; -SQLSelectLexer.LOGICAL_NOT_OPERATOR = 14; -SQLSelectLexer.BITWISE_NOT_OPERATOR = 15; -SQLSelectLexer.SHIFT_LEFT_OPERATOR = 16; -SQLSelectLexer.SHIFT_RIGHT_OPERATOR = 17; -SQLSelectLexer.LOGICAL_AND_OPERATOR = 18; -SQLSelectLexer.BITWISE_AND_OPERATOR = 19; -SQLSelectLexer.BITWISE_XOR_OPERATOR = 20; -SQLSelectLexer.LOGICAL_OR_OPERATOR = 21; -SQLSelectLexer.BITWISE_OR_OPERATOR = 22; -SQLSelectLexer.DOT_SYMBOL = 23; -SQLSelectLexer.COMMA_SYMBOL = 24; -SQLSelectLexer.SEMICOLON_SYMBOL = 25; -SQLSelectLexer.COLON_SYMBOL = 26; -SQLSelectLexer.OPEN_PAR_SYMBOL = 27; -SQLSelectLexer.CLOSE_PAR_SYMBOL = 28; -SQLSelectLexer.OPEN_CURLY_SYMBOL = 29; -SQLSelectLexer.CLOSE_CURLY_SYMBOL = 30; -SQLSelectLexer.UNDERLINE_SYMBOL = 31; -SQLSelectLexer.OPEN_BRACKET_SYMBOL = 32; -SQLSelectLexer.CLOSE_BRACKET_SYMBOL = 33; -SQLSelectLexer.JSON_SEPARATOR_SYMBOL = 34; -SQLSelectLexer.JSON_UNQUOTED_SEPARATOR_SYMBOL = 35; -SQLSelectLexer.AT_SIGN_SYMBOL = 36; -SQLSelectLexer.AT_TEXT_SUFFIX = 37; -SQLSelectLexer.AT_AT_SIGN_SYMBOL = 38; -SQLSelectLexer.NULL2_SYMBOL = 39; -SQLSelectLexer.PARAM_MARKER = 40; -SQLSelectLexer.CAST_COLON_SYMBOL = 41; -SQLSelectLexer.HEX_NUMBER = 42; -SQLSelectLexer.BIN_NUMBER = 43; -SQLSelectLexer.INT_NUMBER = 44; -SQLSelectLexer.DECIMAL_NUMBER = 45; -SQLSelectLexer.FLOAT_NUMBER = 46; -SQLSelectLexer.TINYINT_SYMBOL = 47; -SQLSelectLexer.SMALLINT_SYMBOL = 48; -SQLSelectLexer.MEDIUMINT_SYMBOL = 49; -SQLSelectLexer.BYTE_INT_SYMBOL = 50; -SQLSelectLexer.INT_SYMBOL = 51; -SQLSelectLexer.BIGINT_SYMBOL = 52; -SQLSelectLexer.SECOND_SYMBOL = 53; -SQLSelectLexer.MINUTE_SYMBOL = 54; -SQLSelectLexer.HOUR_SYMBOL = 55; -SQLSelectLexer.DAY_SYMBOL = 56; -SQLSelectLexer.WEEK_SYMBOL = 57; -SQLSelectLexer.MONTH_SYMBOL = 58; -SQLSelectLexer.QUARTER_SYMBOL = 59; -SQLSelectLexer.YEAR_SYMBOL = 60; -SQLSelectLexer.DEFAULT_SYMBOL = 61; -SQLSelectLexer.UNION_SYMBOL = 62; -SQLSelectLexer.SELECT_SYMBOL = 63; -SQLSelectLexer.ALL_SYMBOL = 64; -SQLSelectLexer.DISTINCT_SYMBOL = 65; -SQLSelectLexer.STRAIGHT_JOIN_SYMBOL = 66; -SQLSelectLexer.HIGH_PRIORITY_SYMBOL = 67; -SQLSelectLexer.SQL_SMALL_RESULT_SYMBOL = 68; -SQLSelectLexer.SQL_BIG_RESULT_SYMBOL = 69; -SQLSelectLexer.SQL_BUFFER_RESULT_SYMBOL = 70; -SQLSelectLexer.SQL_CALC_FOUND_ROWS_SYMBOL = 71; -SQLSelectLexer.LIMIT_SYMBOL = 72; -SQLSelectLexer.OFFSET_SYMBOL = 73; -SQLSelectLexer.INTO_SYMBOL = 74; -SQLSelectLexer.OUTFILE_SYMBOL = 75; -SQLSelectLexer.DUMPFILE_SYMBOL = 76; -SQLSelectLexer.PROCEDURE_SYMBOL = 77; -SQLSelectLexer.ANALYSE_SYMBOL = 78; -SQLSelectLexer.HAVING_SYMBOL = 79; -SQLSelectLexer.WINDOW_SYMBOL = 80; -SQLSelectLexer.AS_SYMBOL = 81; -SQLSelectLexer.PARTITION_SYMBOL = 82; -SQLSelectLexer.BY_SYMBOL = 83; -SQLSelectLexer.ROWS_SYMBOL = 84; -SQLSelectLexer.RANGE_SYMBOL = 85; -SQLSelectLexer.GROUPS_SYMBOL = 86; -SQLSelectLexer.UNBOUNDED_SYMBOL = 87; -SQLSelectLexer.PRECEDING_SYMBOL = 88; -SQLSelectLexer.INTERVAL_SYMBOL = 89; -SQLSelectLexer.CURRENT_SYMBOL = 90; -SQLSelectLexer.ROW_SYMBOL = 91; -SQLSelectLexer.BETWEEN_SYMBOL = 92; -SQLSelectLexer.AND_SYMBOL = 93; -SQLSelectLexer.FOLLOWING_SYMBOL = 94; -SQLSelectLexer.EXCLUDE_SYMBOL = 95; -SQLSelectLexer.GROUP_SYMBOL = 96; -SQLSelectLexer.TIES_SYMBOL = 97; -SQLSelectLexer.NO_SYMBOL = 98; -SQLSelectLexer.OTHERS_SYMBOL = 99; -SQLSelectLexer.WITH_SYMBOL = 100; -SQLSelectLexer.WITHOUT_SYMBOL = 101; -SQLSelectLexer.RECURSIVE_SYMBOL = 102; -SQLSelectLexer.ROLLUP_SYMBOL = 103; -SQLSelectLexer.CUBE_SYMBOL = 104; -SQLSelectLexer.ORDER_SYMBOL = 105; -SQLSelectLexer.ASC_SYMBOL = 106; -SQLSelectLexer.DESC_SYMBOL = 107; -SQLSelectLexer.FROM_SYMBOL = 108; -SQLSelectLexer.DUAL_SYMBOL = 109; -SQLSelectLexer.VALUES_SYMBOL = 110; -SQLSelectLexer.TABLE_SYMBOL = 111; -SQLSelectLexer.SQL_NO_CACHE_SYMBOL = 112; -SQLSelectLexer.SQL_CACHE_SYMBOL = 113; -SQLSelectLexer.MAX_STATEMENT_TIME_SYMBOL = 114; -SQLSelectLexer.FOR_SYMBOL = 115; -SQLSelectLexer.OF_SYMBOL = 116; -SQLSelectLexer.LOCK_SYMBOL = 117; -SQLSelectLexer.IN_SYMBOL = 118; -SQLSelectLexer.SHARE_SYMBOL = 119; -SQLSelectLexer.MODE_SYMBOL = 120; -SQLSelectLexer.UPDATE_SYMBOL = 121; -SQLSelectLexer.SKIP_SYMBOL = 122; -SQLSelectLexer.LOCKED_SYMBOL = 123; -SQLSelectLexer.NOWAIT_SYMBOL = 124; -SQLSelectLexer.WHERE_SYMBOL = 125; -SQLSelectLexer.OJ_SYMBOL = 126; -SQLSelectLexer.ON_SYMBOL = 127; -SQLSelectLexer.USING_SYMBOL = 128; -SQLSelectLexer.NATURAL_SYMBOL = 129; -SQLSelectLexer.INNER_SYMBOL = 130; -SQLSelectLexer.JOIN_SYMBOL = 131; -SQLSelectLexer.LEFT_SYMBOL = 132; -SQLSelectLexer.RIGHT_SYMBOL = 133; -SQLSelectLexer.OUTER_SYMBOL = 134; -SQLSelectLexer.CROSS_SYMBOL = 135; -SQLSelectLexer.LATERAL_SYMBOL = 136; -SQLSelectLexer.JSON_TABLE_SYMBOL = 137; -SQLSelectLexer.COLUMNS_SYMBOL = 138; -SQLSelectLexer.ORDINALITY_SYMBOL = 139; -SQLSelectLexer.EXISTS_SYMBOL = 140; -SQLSelectLexer.PATH_SYMBOL = 141; -SQLSelectLexer.NESTED_SYMBOL = 142; -SQLSelectLexer.EMPTY_SYMBOL = 143; -SQLSelectLexer.ERROR_SYMBOL = 144; -SQLSelectLexer.NULL_SYMBOL = 145; -SQLSelectLexer.USE_SYMBOL = 146; -SQLSelectLexer.FORCE_SYMBOL = 147; -SQLSelectLexer.IGNORE_SYMBOL = 148; -SQLSelectLexer.KEY_SYMBOL = 149; -SQLSelectLexer.INDEX_SYMBOL = 150; -SQLSelectLexer.PRIMARY_SYMBOL = 151; -SQLSelectLexer.IS_SYMBOL = 152; -SQLSelectLexer.TRUE_SYMBOL = 153; -SQLSelectLexer.FALSE_SYMBOL = 154; -SQLSelectLexer.UNKNOWN_SYMBOL = 155; -SQLSelectLexer.NOT_SYMBOL = 156; -SQLSelectLexer.XOR_SYMBOL = 157; -SQLSelectLexer.OR_SYMBOL = 158; -SQLSelectLexer.ANY_SYMBOL = 159; -SQLSelectLexer.MEMBER_SYMBOL = 160; -SQLSelectLexer.SOUNDS_SYMBOL = 161; -SQLSelectLexer.LIKE_SYMBOL = 162; -SQLSelectLexer.ESCAPE_SYMBOL = 163; -SQLSelectLexer.REGEXP_SYMBOL = 164; -SQLSelectLexer.DIV_SYMBOL = 165; -SQLSelectLexer.MOD_SYMBOL = 166; -SQLSelectLexer.MATCH_SYMBOL = 167; -SQLSelectLexer.AGAINST_SYMBOL = 168; -SQLSelectLexer.BINARY_SYMBOL = 169; -SQLSelectLexer.CAST_SYMBOL = 170; -SQLSelectLexer.ARRAY_SYMBOL = 171; -SQLSelectLexer.CASE_SYMBOL = 172; -SQLSelectLexer.END_SYMBOL = 173; -SQLSelectLexer.CONVERT_SYMBOL = 174; -SQLSelectLexer.COLLATE_SYMBOL = 175; -SQLSelectLexer.AVG_SYMBOL = 176; -SQLSelectLexer.BIT_AND_SYMBOL = 177; -SQLSelectLexer.BIT_OR_SYMBOL = 178; -SQLSelectLexer.BIT_XOR_SYMBOL = 179; -SQLSelectLexer.COUNT_SYMBOL = 180; -SQLSelectLexer.MIN_SYMBOL = 181; -SQLSelectLexer.MAX_SYMBOL = 182; -SQLSelectLexer.STD_SYMBOL = 183; -SQLSelectLexer.VARIANCE_SYMBOL = 184; -SQLSelectLexer.STDDEV_SAMP_SYMBOL = 185; -SQLSelectLexer.VAR_SAMP_SYMBOL = 186; -SQLSelectLexer.SUM_SYMBOL = 187; -SQLSelectLexer.GROUP_CONCAT_SYMBOL = 188; -SQLSelectLexer.SEPARATOR_SYMBOL = 189; -SQLSelectLexer.GROUPING_SYMBOL = 190; -SQLSelectLexer.ROW_NUMBER_SYMBOL = 191; -SQLSelectLexer.RANK_SYMBOL = 192; -SQLSelectLexer.DENSE_RANK_SYMBOL = 193; -SQLSelectLexer.CUME_DIST_SYMBOL = 194; -SQLSelectLexer.PERCENT_RANK_SYMBOL = 195; -SQLSelectLexer.NTILE_SYMBOL = 196; -SQLSelectLexer.LEAD_SYMBOL = 197; -SQLSelectLexer.LAG_SYMBOL = 198; -SQLSelectLexer.FIRST_VALUE_SYMBOL = 199; -SQLSelectLexer.LAST_VALUE_SYMBOL = 200; -SQLSelectLexer.NTH_VALUE_SYMBOL = 201; -SQLSelectLexer.FIRST_SYMBOL = 202; -SQLSelectLexer.LAST_SYMBOL = 203; -SQLSelectLexer.OVER_SYMBOL = 204; -SQLSelectLexer.RESPECT_SYMBOL = 205; -SQLSelectLexer.NULLS_SYMBOL = 206; -SQLSelectLexer.JSON_ARRAYAGG_SYMBOL = 207; -SQLSelectLexer.JSON_OBJECTAGG_SYMBOL = 208; -SQLSelectLexer.BOOLEAN_SYMBOL = 209; -SQLSelectLexer.LANGUAGE_SYMBOL = 210; -SQLSelectLexer.QUERY_SYMBOL = 211; -SQLSelectLexer.EXPANSION_SYMBOL = 212; -SQLSelectLexer.CHAR_SYMBOL = 213; -SQLSelectLexer.CURRENT_USER_SYMBOL = 214; -SQLSelectLexer.DATE_SYMBOL = 215; -SQLSelectLexer.INSERT_SYMBOL = 216; -SQLSelectLexer.TIME_SYMBOL = 217; -SQLSelectLexer.TIMESTAMP_SYMBOL = 218; -SQLSelectLexer.TIMESTAMP_LTZ_SYMBOL = 219; -SQLSelectLexer.TIMESTAMP_NTZ_SYMBOL = 220; -SQLSelectLexer.ZONE_SYMBOL = 221; -SQLSelectLexer.USER_SYMBOL = 222; -SQLSelectLexer.ADDDATE_SYMBOL = 223; -SQLSelectLexer.SUBDATE_SYMBOL = 224; -SQLSelectLexer.CURDATE_SYMBOL = 225; -SQLSelectLexer.CURTIME_SYMBOL = 226; -SQLSelectLexer.DATE_ADD_SYMBOL = 227; -SQLSelectLexer.DATE_SUB_SYMBOL = 228; -SQLSelectLexer.EXTRACT_SYMBOL = 229; -SQLSelectLexer.GET_FORMAT_SYMBOL = 230; -SQLSelectLexer.NOW_SYMBOL = 231; -SQLSelectLexer.POSITION_SYMBOL = 232; -SQLSelectLexer.SYSDATE_SYMBOL = 233; -SQLSelectLexer.TIMESTAMP_ADD_SYMBOL = 234; -SQLSelectLexer.TIMESTAMP_DIFF_SYMBOL = 235; -SQLSelectLexer.UTC_DATE_SYMBOL = 236; -SQLSelectLexer.UTC_TIME_SYMBOL = 237; -SQLSelectLexer.UTC_TIMESTAMP_SYMBOL = 238; -SQLSelectLexer.ASCII_SYMBOL = 239; -SQLSelectLexer.CHARSET_SYMBOL = 240; -SQLSelectLexer.COALESCE_SYMBOL = 241; -SQLSelectLexer.COLLATION_SYMBOL = 242; -SQLSelectLexer.DATABASE_SYMBOL = 243; -SQLSelectLexer.IF_SYMBOL = 244; -SQLSelectLexer.FORMAT_SYMBOL = 245; -SQLSelectLexer.MICROSECOND_SYMBOL = 246; -SQLSelectLexer.OLD_PASSWORD_SYMBOL = 247; -SQLSelectLexer.PASSWORD_SYMBOL = 248; -SQLSelectLexer.REPEAT_SYMBOL = 249; -SQLSelectLexer.REPLACE_SYMBOL = 250; -SQLSelectLexer.REVERSE_SYMBOL = 251; -SQLSelectLexer.ROW_COUNT_SYMBOL = 252; -SQLSelectLexer.TRUNCATE_SYMBOL = 253; -SQLSelectLexer.WEIGHT_STRING_SYMBOL = 254; -SQLSelectLexer.CONTAINS_SYMBOL = 255; -SQLSelectLexer.GEOMETRYCOLLECTION_SYMBOL = 256; -SQLSelectLexer.LINESTRING_SYMBOL = 257; -SQLSelectLexer.MULTILINESTRING_SYMBOL = 258; -SQLSelectLexer.MULTIPOINT_SYMBOL = 259; -SQLSelectLexer.MULTIPOLYGON_SYMBOL = 260; -SQLSelectLexer.POINT_SYMBOL = 261; -SQLSelectLexer.POLYGON_SYMBOL = 262; -SQLSelectLexer.LEVEL_SYMBOL = 263; -SQLSelectLexer.DATETIME_SYMBOL = 264; -SQLSelectLexer.TRIM_SYMBOL = 265; -SQLSelectLexer.LEADING_SYMBOL = 266; -SQLSelectLexer.TRAILING_SYMBOL = 267; -SQLSelectLexer.BOTH_SYMBOL = 268; -SQLSelectLexer.STRING_SYMBOL = 269; -SQLSelectLexer.SUBSTRING_SYMBOL = 270; -SQLSelectLexer.WHEN_SYMBOL = 271; -SQLSelectLexer.THEN_SYMBOL = 272; -SQLSelectLexer.ELSE_SYMBOL = 273; -SQLSelectLexer.SIGNED_SYMBOL = 274; -SQLSelectLexer.UNSIGNED_SYMBOL = 275; -SQLSelectLexer.DECIMAL_SYMBOL = 276; -SQLSelectLexer.JSON_SYMBOL = 277; -SQLSelectLexer.FLOAT_SYMBOL = 278; -SQLSelectLexer.FLOAT_SYMBOL_4 = 279; -SQLSelectLexer.FLOAT_SYMBOL_8 = 280; -SQLSelectLexer.SET_SYMBOL = 281; -SQLSelectLexer.SECOND_MICROSECOND_SYMBOL = 282; -SQLSelectLexer.MINUTE_MICROSECOND_SYMBOL = 283; -SQLSelectLexer.MINUTE_SECOND_SYMBOL = 284; -SQLSelectLexer.HOUR_MICROSECOND_SYMBOL = 285; -SQLSelectLexer.HOUR_SECOND_SYMBOL = 286; -SQLSelectLexer.HOUR_MINUTE_SYMBOL = 287; -SQLSelectLexer.DAY_MICROSECOND_SYMBOL = 288; -SQLSelectLexer.DAY_SECOND_SYMBOL = 289; -SQLSelectLexer.DAY_MINUTE_SYMBOL = 290; -SQLSelectLexer.DAY_HOUR_SYMBOL = 291; -SQLSelectLexer.YEAR_MONTH_SYMBOL = 292; -SQLSelectLexer.BTREE_SYMBOL = 293; -SQLSelectLexer.RTREE_SYMBOL = 294; -SQLSelectLexer.HASH_SYMBOL = 295; -SQLSelectLexer.REAL_SYMBOL = 296; -SQLSelectLexer.DOUBLE_SYMBOL = 297; -SQLSelectLexer.PRECISION_SYMBOL = 298; -SQLSelectLexer.NUMERIC_SYMBOL = 299; -SQLSelectLexer.NUMBER_SYMBOL = 300; -SQLSelectLexer.FIXED_SYMBOL = 301; -SQLSelectLexer.BIT_SYMBOL = 302; -SQLSelectLexer.BOOL_SYMBOL = 303; -SQLSelectLexer.VARYING_SYMBOL = 304; -SQLSelectLexer.VARCHAR_SYMBOL = 305; -SQLSelectLexer.NATIONAL_SYMBOL = 306; -SQLSelectLexer.NVARCHAR_SYMBOL = 307; -SQLSelectLexer.NCHAR_SYMBOL = 308; -SQLSelectLexer.VARBINARY_SYMBOL = 309; -SQLSelectLexer.TINYBLOB_SYMBOL = 310; -SQLSelectLexer.BLOB_SYMBOL = 311; -SQLSelectLexer.MEDIUMBLOB_SYMBOL = 312; -SQLSelectLexer.LONGBLOB_SYMBOL = 313; -SQLSelectLexer.LONG_SYMBOL = 314; -SQLSelectLexer.TINYTEXT_SYMBOL = 315; -SQLSelectLexer.TEXT_SYMBOL = 316; -SQLSelectLexer.MEDIUMTEXT_SYMBOL = 317; -SQLSelectLexer.LONGTEXT_SYMBOL = 318; -SQLSelectLexer.ENUM_SYMBOL = 319; -SQLSelectLexer.SERIAL_SYMBOL = 320; -SQLSelectLexer.GEOMETRY_SYMBOL = 321; -SQLSelectLexer.ZEROFILL_SYMBOL = 322; -SQLSelectLexer.BYTE_SYMBOL = 323; -SQLSelectLexer.UNICODE_SYMBOL = 324; -SQLSelectLexer.TERMINATED_SYMBOL = 325; -SQLSelectLexer.OPTIONALLY_SYMBOL = 326; -SQLSelectLexer.ENCLOSED_SYMBOL = 327; -SQLSelectLexer.ESCAPED_SYMBOL = 328; -SQLSelectLexer.LINES_SYMBOL = 329; -SQLSelectLexer.STARTING_SYMBOL = 330; -SQLSelectLexer.GLOBAL_SYMBOL = 331; -SQLSelectLexer.LOCAL_SYMBOL = 332; -SQLSelectLexer.SESSION_SYMBOL = 333; -SQLSelectLexer.VARIANT_SYMBOL = 334; -SQLSelectLexer.OBJECT_SYMBOL = 335; -SQLSelectLexer.GEOGRAPHY_SYMBOL = 336; -SQLSelectLexer.WHITESPACE = 337; -SQLSelectLexer.INVALID_INPUT = 338; -SQLSelectLexer.UNDERSCORE_CHARSET = 339; -SQLSelectLexer.IDENTIFIER = 340; -SQLSelectLexer.NCHAR_TEXT = 341; -SQLSelectLexer.BACK_TICK_QUOTED_ID = 342; -SQLSelectLexer.DOUBLE_QUOTED_TEXT = 343; -SQLSelectLexer.SINGLE_QUOTED_TEXT = 344; -SQLSelectLexer.BRACKET_QUOTED_TEXT = 345; -SQLSelectLexer.VERSION_COMMENT_START = 346; -SQLSelectLexer.MYSQL_COMMENT_START = 347; -SQLSelectLexer.VERSION_COMMENT_END = 348; -SQLSelectLexer.BLOCK_COMMENT = 349; -SQLSelectLexer.POUND_COMMENT = 350; -SQLSelectLexer.DASHDASH_COMMENT = 351; - - - - -module.exports = SQLSelectLexer; \ No newline at end of file diff --git a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/parser/SQLSelectLexer.tokens b/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/parser/SQLSelectLexer.tokens deleted file mode 100644 index 20e7ed6..0000000 --- a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/parser/SQLSelectLexer.tokens +++ /dev/null @@ -1,393 +0,0 @@ -EQUAL_OPERATOR=1 -ASSIGN_OPERATOR=2 -NULL_SAFE_EQUAL_OPERATOR=3 -GREATER_OR_EQUAL_OPERATOR=4 -GREATER_THAN_OPERATOR=5 -LESS_OR_EQUAL_OPERATOR=6 -LESS_THAN_OPERATOR=7 -NOT_EQUAL_OPERATOR=8 -PLUS_OPERATOR=9 -MINUS_OPERATOR=10 -MULT_OPERATOR=11 -DIV_OPERATOR=12 -MOD_OPERATOR=13 -LOGICAL_NOT_OPERATOR=14 -BITWISE_NOT_OPERATOR=15 -SHIFT_LEFT_OPERATOR=16 -SHIFT_RIGHT_OPERATOR=17 -LOGICAL_AND_OPERATOR=18 -BITWISE_AND_OPERATOR=19 -BITWISE_XOR_OPERATOR=20 -LOGICAL_OR_OPERATOR=21 -BITWISE_OR_OPERATOR=22 -DOT_SYMBOL=23 -COMMA_SYMBOL=24 -SEMICOLON_SYMBOL=25 -COLON_SYMBOL=26 -OPEN_PAR_SYMBOL=27 -CLOSE_PAR_SYMBOL=28 -OPEN_CURLY_SYMBOL=29 -CLOSE_CURLY_SYMBOL=30 -UNDERLINE_SYMBOL=31 -OPEN_BRACKET_SYMBOL=32 -CLOSE_BRACKET_SYMBOL=33 -JSON_SEPARATOR_SYMBOL=34 -JSON_UNQUOTED_SEPARATOR_SYMBOL=35 -AT_SIGN_SYMBOL=36 -AT_TEXT_SUFFIX=37 -AT_AT_SIGN_SYMBOL=38 -NULL2_SYMBOL=39 -PARAM_MARKER=40 -CAST_COLON_SYMBOL=41 -HEX_NUMBER=42 -BIN_NUMBER=43 -INT_NUMBER=44 -DECIMAL_NUMBER=45 -FLOAT_NUMBER=46 -TINYINT_SYMBOL=47 -SMALLINT_SYMBOL=48 -MEDIUMINT_SYMBOL=49 -BYTE_INT_SYMBOL=50 -INT_SYMBOL=51 -BIGINT_SYMBOL=52 -SECOND_SYMBOL=53 -MINUTE_SYMBOL=54 -HOUR_SYMBOL=55 -DAY_SYMBOL=56 -WEEK_SYMBOL=57 -MONTH_SYMBOL=58 -QUARTER_SYMBOL=59 -YEAR_SYMBOL=60 -DEFAULT_SYMBOL=61 -UNION_SYMBOL=62 -SELECT_SYMBOL=63 -ALL_SYMBOL=64 -DISTINCT_SYMBOL=65 -STRAIGHT_JOIN_SYMBOL=66 -HIGH_PRIORITY_SYMBOL=67 -SQL_SMALL_RESULT_SYMBOL=68 -SQL_BIG_RESULT_SYMBOL=69 -SQL_BUFFER_RESULT_SYMBOL=70 -SQL_CALC_FOUND_ROWS_SYMBOL=71 -LIMIT_SYMBOL=72 -OFFSET_SYMBOL=73 -INTO_SYMBOL=74 -OUTFILE_SYMBOL=75 -DUMPFILE_SYMBOL=76 -PROCEDURE_SYMBOL=77 -ANALYSE_SYMBOL=78 -HAVING_SYMBOL=79 -WINDOW_SYMBOL=80 -AS_SYMBOL=81 -PARTITION_SYMBOL=82 -BY_SYMBOL=83 -ROWS_SYMBOL=84 -RANGE_SYMBOL=85 -GROUPS_SYMBOL=86 -UNBOUNDED_SYMBOL=87 -PRECEDING_SYMBOL=88 -INTERVAL_SYMBOL=89 -CURRENT_SYMBOL=90 -ROW_SYMBOL=91 -BETWEEN_SYMBOL=92 -AND_SYMBOL=93 -FOLLOWING_SYMBOL=94 -EXCLUDE_SYMBOL=95 -GROUP_SYMBOL=96 -TIES_SYMBOL=97 -NO_SYMBOL=98 -OTHERS_SYMBOL=99 -WITH_SYMBOL=100 -WITHOUT_SYMBOL=101 -RECURSIVE_SYMBOL=102 -ROLLUP_SYMBOL=103 -CUBE_SYMBOL=104 -ORDER_SYMBOL=105 -ASC_SYMBOL=106 -DESC_SYMBOL=107 -FROM_SYMBOL=108 -DUAL_SYMBOL=109 -VALUES_SYMBOL=110 -TABLE_SYMBOL=111 -SQL_NO_CACHE_SYMBOL=112 -SQL_CACHE_SYMBOL=113 -MAX_STATEMENT_TIME_SYMBOL=114 -FOR_SYMBOL=115 -OF_SYMBOL=116 -LOCK_SYMBOL=117 -IN_SYMBOL=118 -SHARE_SYMBOL=119 -MODE_SYMBOL=120 -UPDATE_SYMBOL=121 -SKIP_SYMBOL=122 -LOCKED_SYMBOL=123 -NOWAIT_SYMBOL=124 -WHERE_SYMBOL=125 -OJ_SYMBOL=126 -ON_SYMBOL=127 -USING_SYMBOL=128 -NATURAL_SYMBOL=129 -INNER_SYMBOL=130 -JOIN_SYMBOL=131 -LEFT_SYMBOL=132 -RIGHT_SYMBOL=133 -OUTER_SYMBOL=134 -CROSS_SYMBOL=135 -LATERAL_SYMBOL=136 -JSON_TABLE_SYMBOL=137 -COLUMNS_SYMBOL=138 -ORDINALITY_SYMBOL=139 -EXISTS_SYMBOL=140 -PATH_SYMBOL=141 -NESTED_SYMBOL=142 -EMPTY_SYMBOL=143 -ERROR_SYMBOL=144 -NULL_SYMBOL=145 -USE_SYMBOL=146 -FORCE_SYMBOL=147 -IGNORE_SYMBOL=148 -KEY_SYMBOL=149 -INDEX_SYMBOL=150 -PRIMARY_SYMBOL=151 -IS_SYMBOL=152 -TRUE_SYMBOL=153 -FALSE_SYMBOL=154 -UNKNOWN_SYMBOL=155 -NOT_SYMBOL=156 -XOR_SYMBOL=157 -OR_SYMBOL=158 -ANY_SYMBOL=159 -MEMBER_SYMBOL=160 -SOUNDS_SYMBOL=161 -LIKE_SYMBOL=162 -ESCAPE_SYMBOL=163 -REGEXP_SYMBOL=164 -DIV_SYMBOL=165 -MOD_SYMBOL=166 -MATCH_SYMBOL=167 -AGAINST_SYMBOL=168 -BINARY_SYMBOL=169 -CAST_SYMBOL=170 -ARRAY_SYMBOL=171 -CASE_SYMBOL=172 -END_SYMBOL=173 -CONVERT_SYMBOL=174 -COLLATE_SYMBOL=175 -AVG_SYMBOL=176 -BIT_AND_SYMBOL=177 -BIT_OR_SYMBOL=178 -BIT_XOR_SYMBOL=179 -COUNT_SYMBOL=180 -MIN_SYMBOL=181 -MAX_SYMBOL=182 -STD_SYMBOL=183 -VARIANCE_SYMBOL=184 -STDDEV_SAMP_SYMBOL=185 -VAR_SAMP_SYMBOL=186 -SUM_SYMBOL=187 -GROUP_CONCAT_SYMBOL=188 -SEPARATOR_SYMBOL=189 -GROUPING_SYMBOL=190 -ROW_NUMBER_SYMBOL=191 -RANK_SYMBOL=192 -DENSE_RANK_SYMBOL=193 -CUME_DIST_SYMBOL=194 -PERCENT_RANK_SYMBOL=195 -NTILE_SYMBOL=196 -LEAD_SYMBOL=197 -LAG_SYMBOL=198 -FIRST_VALUE_SYMBOL=199 -LAST_VALUE_SYMBOL=200 -NTH_VALUE_SYMBOL=201 -FIRST_SYMBOL=202 -LAST_SYMBOL=203 -OVER_SYMBOL=204 -RESPECT_SYMBOL=205 -NULLS_SYMBOL=206 -JSON_ARRAYAGG_SYMBOL=207 -JSON_OBJECTAGG_SYMBOL=208 -BOOLEAN_SYMBOL=209 -LANGUAGE_SYMBOL=210 -QUERY_SYMBOL=211 -EXPANSION_SYMBOL=212 -CHAR_SYMBOL=213 -CURRENT_USER_SYMBOL=214 -DATE_SYMBOL=215 -INSERT_SYMBOL=216 -TIME_SYMBOL=217 -TIMESTAMP_SYMBOL=218 -TIMESTAMP_LTZ_SYMBOL=219 -TIMESTAMP_NTZ_SYMBOL=220 -ZONE_SYMBOL=221 -USER_SYMBOL=222 -ADDDATE_SYMBOL=223 -SUBDATE_SYMBOL=224 -CURDATE_SYMBOL=225 -CURTIME_SYMBOL=226 -DATE_ADD_SYMBOL=227 -DATE_SUB_SYMBOL=228 -EXTRACT_SYMBOL=229 -GET_FORMAT_SYMBOL=230 -NOW_SYMBOL=231 -POSITION_SYMBOL=232 -SYSDATE_SYMBOL=233 -TIMESTAMP_ADD_SYMBOL=234 -TIMESTAMP_DIFF_SYMBOL=235 -UTC_DATE_SYMBOL=236 -UTC_TIME_SYMBOL=237 -UTC_TIMESTAMP_SYMBOL=238 -ASCII_SYMBOL=239 -CHARSET_SYMBOL=240 -COALESCE_SYMBOL=241 -COLLATION_SYMBOL=242 -DATABASE_SYMBOL=243 -IF_SYMBOL=244 -FORMAT_SYMBOL=245 -MICROSECOND_SYMBOL=246 -OLD_PASSWORD_SYMBOL=247 -PASSWORD_SYMBOL=248 -REPEAT_SYMBOL=249 -REPLACE_SYMBOL=250 -REVERSE_SYMBOL=251 -ROW_COUNT_SYMBOL=252 -TRUNCATE_SYMBOL=253 -WEIGHT_STRING_SYMBOL=254 -CONTAINS_SYMBOL=255 -GEOMETRYCOLLECTION_SYMBOL=256 -LINESTRING_SYMBOL=257 -MULTILINESTRING_SYMBOL=258 -MULTIPOINT_SYMBOL=259 -MULTIPOLYGON_SYMBOL=260 -POINT_SYMBOL=261 -POLYGON_SYMBOL=262 -LEVEL_SYMBOL=263 -DATETIME_SYMBOL=264 -TRIM_SYMBOL=265 -LEADING_SYMBOL=266 -TRAILING_SYMBOL=267 -BOTH_SYMBOL=268 -STRING_SYMBOL=269 -SUBSTRING_SYMBOL=270 -WHEN_SYMBOL=271 -THEN_SYMBOL=272 -ELSE_SYMBOL=273 -SIGNED_SYMBOL=274 -UNSIGNED_SYMBOL=275 -DECIMAL_SYMBOL=276 -JSON_SYMBOL=277 -FLOAT_SYMBOL=278 -FLOAT_SYMBOL_4=279 -FLOAT_SYMBOL_8=280 -SET_SYMBOL=281 -SECOND_MICROSECOND_SYMBOL=282 -MINUTE_MICROSECOND_SYMBOL=283 -MINUTE_SECOND_SYMBOL=284 -HOUR_MICROSECOND_SYMBOL=285 -HOUR_SECOND_SYMBOL=286 -HOUR_MINUTE_SYMBOL=287 -DAY_MICROSECOND_SYMBOL=288 -DAY_SECOND_SYMBOL=289 -DAY_MINUTE_SYMBOL=290 -DAY_HOUR_SYMBOL=291 -YEAR_MONTH_SYMBOL=292 -BTREE_SYMBOL=293 -RTREE_SYMBOL=294 -HASH_SYMBOL=295 -REAL_SYMBOL=296 -DOUBLE_SYMBOL=297 -PRECISION_SYMBOL=298 -NUMERIC_SYMBOL=299 -NUMBER_SYMBOL=300 -FIXED_SYMBOL=301 -BIT_SYMBOL=302 -BOOL_SYMBOL=303 -VARYING_SYMBOL=304 -VARCHAR_SYMBOL=305 -NATIONAL_SYMBOL=306 -NVARCHAR_SYMBOL=307 -NCHAR_SYMBOL=308 -VARBINARY_SYMBOL=309 -TINYBLOB_SYMBOL=310 -BLOB_SYMBOL=311 -MEDIUMBLOB_SYMBOL=312 -LONGBLOB_SYMBOL=313 -LONG_SYMBOL=314 -TINYTEXT_SYMBOL=315 -TEXT_SYMBOL=316 -MEDIUMTEXT_SYMBOL=317 -LONGTEXT_SYMBOL=318 -ENUM_SYMBOL=319 -SERIAL_SYMBOL=320 -GEOMETRY_SYMBOL=321 -ZEROFILL_SYMBOL=322 -BYTE_SYMBOL=323 -UNICODE_SYMBOL=324 -TERMINATED_SYMBOL=325 -OPTIONALLY_SYMBOL=326 -ENCLOSED_SYMBOL=327 -ESCAPED_SYMBOL=328 -LINES_SYMBOL=329 -STARTING_SYMBOL=330 -GLOBAL_SYMBOL=331 -LOCAL_SYMBOL=332 -SESSION_SYMBOL=333 -VARIANT_SYMBOL=334 -OBJECT_SYMBOL=335 -GEOGRAPHY_SYMBOL=336 -WHITESPACE=337 -INVALID_INPUT=338 -UNDERSCORE_CHARSET=339 -IDENTIFIER=340 -NCHAR_TEXT=341 -BACK_TICK_QUOTED_ID=342 -DOUBLE_QUOTED_TEXT=343 -SINGLE_QUOTED_TEXT=344 -BRACKET_QUOTED_TEXT=345 -VERSION_COMMENT_START=346 -MYSQL_COMMENT_START=347 -VERSION_COMMENT_END=348 -BLOCK_COMMENT=349 -POUND_COMMENT=350 -DASHDASH_COMMENT=351 -'='=1 -':='=2 -'<=>'=3 -'>='=4 -'>'=5 -'<='=6 -'<'=7 -'!='=8 -'+'=9 -'-'=10 -'*'=11 -'/'=12 -'%'=13 -'!'=14 -'~'=15 -'<<'=16 -'>>'=17 -'&&'=18 -'&'=19 -'^'=20 -'||'=21 -'|'=22 -'.'=23 -','=24 -';'=25 -':'=26 -'('=27 -')'=28 -'{'=29 -'}'=30 -'_'=31 -'['=32 -']'=33 -'->'=34 -'->>'=35 -'@'=36 -'@@'=38 -'\\N'=39 -'?'=40 -'::'=41 -'/*!'=347 -'*/'=348 diff --git a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/parser/SQLSelectParser.interp b/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/parser/SQLSelectParser.interp deleted file mode 100644 index 20c403c..0000000 --- a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/parser/SQLSelectParser.interp +++ /dev/null @@ -1,883 +0,0 @@ -token literal names: -null -'=' -':=' -'<=>' -'>=' -'>' -'<=' -'<' -'!=' -'+' -'-' -'*' -'/' -'%' -'!' -'~' -'<<' -'>>' -'&&' -'&' -'^' -'||' -'|' -'.' -',' -';' -':' -'(' -')' -'{' -'}' -'_' -'[' -']' -'->' -'->>' -'@' -null -'@@' -'\\N' -'?' -'::' -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -'/*!' -'*/' -null -null -null - -token symbolic names: -null -EQUAL_OPERATOR -ASSIGN_OPERATOR -NULL_SAFE_EQUAL_OPERATOR -GREATER_OR_EQUAL_OPERATOR -GREATER_THAN_OPERATOR -LESS_OR_EQUAL_OPERATOR -LESS_THAN_OPERATOR -NOT_EQUAL_OPERATOR -PLUS_OPERATOR -MINUS_OPERATOR -MULT_OPERATOR -DIV_OPERATOR -MOD_OPERATOR -LOGICAL_NOT_OPERATOR -BITWISE_NOT_OPERATOR -SHIFT_LEFT_OPERATOR -SHIFT_RIGHT_OPERATOR -LOGICAL_AND_OPERATOR -BITWISE_AND_OPERATOR -BITWISE_XOR_OPERATOR -LOGICAL_OR_OPERATOR -BITWISE_OR_OPERATOR -DOT_SYMBOL -COMMA_SYMBOL -SEMICOLON_SYMBOL -COLON_SYMBOL -OPEN_PAR_SYMBOL -CLOSE_PAR_SYMBOL -OPEN_CURLY_SYMBOL -CLOSE_CURLY_SYMBOL -UNDERLINE_SYMBOL -OPEN_BRACKET_SYMBOL -CLOSE_BRACKET_SYMBOL -JSON_SEPARATOR_SYMBOL -JSON_UNQUOTED_SEPARATOR_SYMBOL -AT_SIGN_SYMBOL -AT_TEXT_SUFFIX -AT_AT_SIGN_SYMBOL -NULL2_SYMBOL -PARAM_MARKER -CAST_COLON_SYMBOL -HEX_NUMBER -BIN_NUMBER -INT_NUMBER -DECIMAL_NUMBER -FLOAT_NUMBER -TINYINT_SYMBOL -SMALLINT_SYMBOL -MEDIUMINT_SYMBOL -BYTE_INT_SYMBOL -INT_SYMBOL -BIGINT_SYMBOL -SECOND_SYMBOL -MINUTE_SYMBOL -HOUR_SYMBOL -DAY_SYMBOL -WEEK_SYMBOL -MONTH_SYMBOL -QUARTER_SYMBOL -YEAR_SYMBOL -DEFAULT_SYMBOL -UNION_SYMBOL -SELECT_SYMBOL -ALL_SYMBOL -DISTINCT_SYMBOL -STRAIGHT_JOIN_SYMBOL -HIGH_PRIORITY_SYMBOL -SQL_SMALL_RESULT_SYMBOL -SQL_BIG_RESULT_SYMBOL -SQL_BUFFER_RESULT_SYMBOL -SQL_CALC_FOUND_ROWS_SYMBOL -LIMIT_SYMBOL -OFFSET_SYMBOL -INTO_SYMBOL -OUTFILE_SYMBOL -DUMPFILE_SYMBOL -PROCEDURE_SYMBOL -ANALYSE_SYMBOL -HAVING_SYMBOL -WINDOW_SYMBOL -AS_SYMBOL -PARTITION_SYMBOL -BY_SYMBOL -ROWS_SYMBOL -RANGE_SYMBOL -GROUPS_SYMBOL -UNBOUNDED_SYMBOL -PRECEDING_SYMBOL -INTERVAL_SYMBOL -CURRENT_SYMBOL -ROW_SYMBOL -BETWEEN_SYMBOL -AND_SYMBOL -FOLLOWING_SYMBOL -EXCLUDE_SYMBOL -GROUP_SYMBOL -TIES_SYMBOL -NO_SYMBOL -OTHERS_SYMBOL -WITH_SYMBOL -WITHOUT_SYMBOL -RECURSIVE_SYMBOL -ROLLUP_SYMBOL -CUBE_SYMBOL -ORDER_SYMBOL -ASC_SYMBOL -DESC_SYMBOL -FROM_SYMBOL -DUAL_SYMBOL -VALUES_SYMBOL -TABLE_SYMBOL -SQL_NO_CACHE_SYMBOL -SQL_CACHE_SYMBOL -MAX_STATEMENT_TIME_SYMBOL -FOR_SYMBOL -OF_SYMBOL -LOCK_SYMBOL -IN_SYMBOL -SHARE_SYMBOL -MODE_SYMBOL -UPDATE_SYMBOL -SKIP_SYMBOL -LOCKED_SYMBOL -NOWAIT_SYMBOL -WHERE_SYMBOL -OJ_SYMBOL -ON_SYMBOL -USING_SYMBOL -NATURAL_SYMBOL -INNER_SYMBOL -JOIN_SYMBOL -LEFT_SYMBOL -RIGHT_SYMBOL -OUTER_SYMBOL -CROSS_SYMBOL -LATERAL_SYMBOL -JSON_TABLE_SYMBOL -COLUMNS_SYMBOL -ORDINALITY_SYMBOL -EXISTS_SYMBOL -PATH_SYMBOL -NESTED_SYMBOL -EMPTY_SYMBOL -ERROR_SYMBOL -NULL_SYMBOL -USE_SYMBOL -FORCE_SYMBOL -IGNORE_SYMBOL -KEY_SYMBOL -INDEX_SYMBOL -PRIMARY_SYMBOL -IS_SYMBOL -TRUE_SYMBOL -FALSE_SYMBOL -UNKNOWN_SYMBOL -NOT_SYMBOL -XOR_SYMBOL -OR_SYMBOL -ANY_SYMBOL -MEMBER_SYMBOL -SOUNDS_SYMBOL -LIKE_SYMBOL -ESCAPE_SYMBOL -REGEXP_SYMBOL -DIV_SYMBOL -MOD_SYMBOL -MATCH_SYMBOL -AGAINST_SYMBOL -BINARY_SYMBOL -CAST_SYMBOL -ARRAY_SYMBOL -CASE_SYMBOL -END_SYMBOL -CONVERT_SYMBOL -COLLATE_SYMBOL -AVG_SYMBOL -BIT_AND_SYMBOL -BIT_OR_SYMBOL -BIT_XOR_SYMBOL -COUNT_SYMBOL -MIN_SYMBOL -MAX_SYMBOL -STD_SYMBOL -VARIANCE_SYMBOL -STDDEV_SAMP_SYMBOL -VAR_SAMP_SYMBOL -SUM_SYMBOL -GROUP_CONCAT_SYMBOL -SEPARATOR_SYMBOL -GROUPING_SYMBOL -ROW_NUMBER_SYMBOL -RANK_SYMBOL -DENSE_RANK_SYMBOL -CUME_DIST_SYMBOL -PERCENT_RANK_SYMBOL -NTILE_SYMBOL -LEAD_SYMBOL -LAG_SYMBOL -FIRST_VALUE_SYMBOL -LAST_VALUE_SYMBOL -NTH_VALUE_SYMBOL -FIRST_SYMBOL -LAST_SYMBOL -OVER_SYMBOL -RESPECT_SYMBOL -NULLS_SYMBOL -JSON_ARRAYAGG_SYMBOL -JSON_OBJECTAGG_SYMBOL -BOOLEAN_SYMBOL -LANGUAGE_SYMBOL -QUERY_SYMBOL -EXPANSION_SYMBOL -CHAR_SYMBOL -CURRENT_USER_SYMBOL -DATE_SYMBOL -INSERT_SYMBOL -TIME_SYMBOL -TIMESTAMP_SYMBOL -TIMESTAMP_LTZ_SYMBOL -TIMESTAMP_NTZ_SYMBOL -ZONE_SYMBOL -USER_SYMBOL -ADDDATE_SYMBOL -SUBDATE_SYMBOL -CURDATE_SYMBOL -CURTIME_SYMBOL -DATE_ADD_SYMBOL -DATE_SUB_SYMBOL -EXTRACT_SYMBOL -GET_FORMAT_SYMBOL -NOW_SYMBOL -POSITION_SYMBOL -SYSDATE_SYMBOL -TIMESTAMP_ADD_SYMBOL -TIMESTAMP_DIFF_SYMBOL -UTC_DATE_SYMBOL -UTC_TIME_SYMBOL -UTC_TIMESTAMP_SYMBOL -ASCII_SYMBOL -CHARSET_SYMBOL -COALESCE_SYMBOL -COLLATION_SYMBOL -DATABASE_SYMBOL -IF_SYMBOL -FORMAT_SYMBOL -MICROSECOND_SYMBOL -OLD_PASSWORD_SYMBOL -PASSWORD_SYMBOL -REPEAT_SYMBOL -REPLACE_SYMBOL -REVERSE_SYMBOL -ROW_COUNT_SYMBOL -TRUNCATE_SYMBOL -WEIGHT_STRING_SYMBOL -CONTAINS_SYMBOL -GEOMETRYCOLLECTION_SYMBOL -LINESTRING_SYMBOL -MULTILINESTRING_SYMBOL -MULTIPOINT_SYMBOL -MULTIPOLYGON_SYMBOL -POINT_SYMBOL -POLYGON_SYMBOL -LEVEL_SYMBOL -DATETIME_SYMBOL -TRIM_SYMBOL -LEADING_SYMBOL -TRAILING_SYMBOL -BOTH_SYMBOL -STRING_SYMBOL -SUBSTRING_SYMBOL -WHEN_SYMBOL -THEN_SYMBOL -ELSE_SYMBOL -SIGNED_SYMBOL -UNSIGNED_SYMBOL -DECIMAL_SYMBOL -JSON_SYMBOL -FLOAT_SYMBOL -FLOAT_SYMBOL_4 -FLOAT_SYMBOL_8 -SET_SYMBOL -SECOND_MICROSECOND_SYMBOL -MINUTE_MICROSECOND_SYMBOL -MINUTE_SECOND_SYMBOL -HOUR_MICROSECOND_SYMBOL -HOUR_SECOND_SYMBOL -HOUR_MINUTE_SYMBOL -DAY_MICROSECOND_SYMBOL -DAY_SECOND_SYMBOL -DAY_MINUTE_SYMBOL -DAY_HOUR_SYMBOL -YEAR_MONTH_SYMBOL -BTREE_SYMBOL -RTREE_SYMBOL -HASH_SYMBOL -REAL_SYMBOL -DOUBLE_SYMBOL -PRECISION_SYMBOL -NUMERIC_SYMBOL -NUMBER_SYMBOL -FIXED_SYMBOL -BIT_SYMBOL -BOOL_SYMBOL -VARYING_SYMBOL -VARCHAR_SYMBOL -NATIONAL_SYMBOL -NVARCHAR_SYMBOL -NCHAR_SYMBOL -VARBINARY_SYMBOL -TINYBLOB_SYMBOL -BLOB_SYMBOL -MEDIUMBLOB_SYMBOL -LONGBLOB_SYMBOL -LONG_SYMBOL -TINYTEXT_SYMBOL -TEXT_SYMBOL -MEDIUMTEXT_SYMBOL -LONGTEXT_SYMBOL -ENUM_SYMBOL -SERIAL_SYMBOL -GEOMETRY_SYMBOL -ZEROFILL_SYMBOL -BYTE_SYMBOL -UNICODE_SYMBOL -TERMINATED_SYMBOL -OPTIONALLY_SYMBOL -ENCLOSED_SYMBOL -ESCAPED_SYMBOL -LINES_SYMBOL -STARTING_SYMBOL -GLOBAL_SYMBOL -LOCAL_SYMBOL -SESSION_SYMBOL -VARIANT_SYMBOL -OBJECT_SYMBOL -GEOGRAPHY_SYMBOL -WHITESPACE -INVALID_INPUT -UNDERSCORE_CHARSET -IDENTIFIER -NCHAR_TEXT -BACK_TICK_QUOTED_ID -DOUBLE_QUOTED_TEXT -SINGLE_QUOTED_TEXT -BRACKET_QUOTED_TEXT -VERSION_COMMENT_START -MYSQL_COMMENT_START -VERSION_COMMENT_END -BLOCK_COMMENT -POUND_COMMENT -DASHDASH_COMMENT - -rule names: -query -values -selectStatement -selectStatementWithInto -queryExpression -queryExpressionBody -queryExpressionParens -queryPrimary -querySpecification -subquery -querySpecOption -limitClause -limitOptions -limitOption -intoClause -procedureAnalyseClause -havingClause -windowClause -windowDefinition -windowSpec -windowSpecDetails -windowFrameClause -windowFrameUnits -windowFrameExtent -windowFrameStart -windowFrameBetween -windowFrameBound -windowFrameExclusion -withClause -commonTableExpression -groupByClause -olapOption -orderClause -direction -fromClause -tableReferenceList -tableValueConstructor -explicitTable -rowValueExplicit -selectOption -lockingClauseList -lockingClause -lockStrengh -lockedRowAction -selectItemList -selectItem -selectAlias -whereClause -tableReference -escapedTableReference -joinedTable -naturalJoinType -innerJoinType -outerJoinType -tableFactor -singleTable -singleTableParens -derivedTable -tableReferenceListParens -tableFunction -columnsClause -jtColumn -onEmptyOrError -onEmpty -onError -jtOnResponse -unionOption -tableAlias -indexHintList -indexHint -indexHintType -keyOrIndex -indexHintClause -indexList -indexListElement -expr -boolPri -compOp -predicate -predicateOperations -bitExpr -simpleExpr -jsonOperator -sumExpr -groupingOperation -windowFunctionCall -windowingClause -leadLagInfo -nullTreatment -jsonFunction -inSumExpr -identListArg -identList -fulltextOptions -runtimeFunctionCall -geometryFunction -timeFunctionParameters -fractionalPrecision -weightStringLevels -weightStringLevelListItem -dateTimeTtype -trimFunction -substringFunction -functionCall -udfExprList -udfExpr -variable -userVariable -systemVariable -whenExpression -thenExpression -elseExpression -exprList -charset -notRule -not2Rule -interval -intervalTimeStamp -exprListWithParentheses -exprWithParentheses -simpleExprWithParentheses -orderList -orderExpression -indexType -dataType -nchar -fieldLength -fieldOptions -charsetWithOptBinary -ascii -unicode -wsNumCodepoints -typeDatetimePrecision -charsetName -collationName -collate -charsetClause -fieldsClause -fieldTerm -linesClause -lineTerm -usePartition -columnInternalRefList -tableAliasRefList -pureIdentifier -identifier -identifierList -identifierListWithParentheses -qualifiedIdentifier -dotIdentifier -ulong_number -real_ulong_number -ulonglong_number -real_ulonglong_number -literal -stringList -textStringLiteral -textString -textLiteral -numLiteral -boolLiteral -nullLiteral -temporalLiteral -floatOptions -precision -textOrIdentifier -parentheses -equal -varIdentType -identifierKeyword - - -atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 353, 2440, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 4, 126, 9, 126, 4, 127, 9, 127, 4, 128, 9, 128, 4, 129, 9, 129, 4, 130, 9, 130, 4, 131, 9, 131, 4, 132, 9, 132, 4, 133, 9, 133, 4, 134, 9, 134, 4, 135, 9, 135, 4, 136, 9, 136, 4, 137, 9, 137, 4, 138, 9, 138, 4, 139, 9, 139, 4, 140, 9, 140, 4, 141, 9, 141, 4, 142, 9, 142, 4, 143, 9, 143, 4, 144, 9, 144, 4, 145, 9, 145, 4, 146, 9, 146, 4, 147, 9, 147, 4, 148, 9, 148, 4, 149, 9, 149, 4, 150, 9, 150, 4, 151, 9, 151, 4, 152, 9, 152, 4, 153, 9, 153, 4, 154, 9, 154, 4, 155, 9, 155, 4, 156, 9, 156, 4, 157, 9, 157, 4, 158, 9, 158, 4, 159, 9, 159, 4, 160, 9, 160, 4, 161, 9, 161, 4, 162, 9, 162, 4, 163, 9, 163, 4, 164, 9, 164, 4, 165, 9, 165, 4, 166, 9, 166, 4, 167, 9, 167, 4, 168, 9, 168, 4, 169, 9, 169, 4, 170, 9, 170, 4, 171, 9, 171, 3, 2, 5, 2, 344, 10, 2, 3, 2, 3, 2, 3, 2, 5, 2, 349, 10, 2, 3, 2, 5, 2, 352, 10, 2, 3, 3, 3, 3, 5, 3, 356, 10, 3, 3, 3, 3, 3, 3, 3, 5, 3, 361, 10, 3, 7, 3, 363, 10, 3, 12, 3, 14, 3, 366, 11, 3, 3, 4, 3, 4, 5, 4, 370, 10, 4, 3, 4, 3, 4, 5, 4, 374, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 383, 10, 5, 3, 5, 3, 5, 3, 5, 5, 5, 388, 10, 5, 3, 6, 5, 6, 391, 10, 6, 3, 6, 3, 6, 5, 6, 395, 10, 6, 3, 6, 5, 6, 398, 10, 6, 3, 6, 3, 6, 5, 6, 402, 10, 6, 3, 6, 5, 6, 405, 10, 6, 5, 6, 407, 10, 6, 3, 6, 5, 6, 410, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 416, 10, 7, 3, 7, 3, 7, 5, 7, 420, 10, 7, 5, 7, 422, 10, 7, 3, 7, 3, 7, 5, 7, 426, 10, 7, 3, 7, 3, 7, 5, 7, 430, 10, 7, 7, 7, 432, 10, 7, 12, 7, 14, 7, 435, 11, 7, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 441, 10, 8, 5, 8, 443, 10, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 5, 9, 450, 10, 9, 3, 10, 3, 10, 7, 10, 454, 10, 10, 12, 10, 14, 10, 457, 11, 10, 3, 10, 3, 10, 5, 10, 461, 10, 10, 3, 10, 5, 10, 464, 10, 10, 3, 10, 5, 10, 467, 10, 10, 3, 10, 5, 10, 470, 10, 10, 3, 10, 5, 10, 473, 10, 10, 3, 10, 5, 10, 476, 10, 10, 3, 11, 3, 11, 5, 11, 480, 10, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 5, 14, 490, 10, 14, 3, 15, 3, 15, 5, 15, 494, 10, 15, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 500, 10, 16, 3, 16, 5, 16, 503, 10, 16, 3, 16, 5, 16, 506, 10, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 512, 10, 16, 3, 16, 3, 16, 3, 16, 5, 16, 517, 10, 16, 7, 16, 519, 10, 16, 12, 16, 14, 16, 522, 11, 16, 5, 16, 524, 10, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 532, 10, 17, 5, 17, 534, 10, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 7, 19, 545, 10, 19, 12, 19, 14, 19, 548, 11, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 5, 22, 559, 10, 22, 3, 22, 3, 22, 3, 22, 5, 22, 564, 10, 22, 3, 22, 5, 22, 567, 10, 22, 3, 22, 5, 22, 570, 10, 22, 3, 23, 3, 23, 3, 23, 5, 23, 575, 10, 23, 3, 24, 3, 24, 3, 25, 3, 25, 5, 25, 581, 10, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 597, 10, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 5, 28, 617, 10, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 5, 29, 626, 10, 29, 3, 30, 3, 30, 5, 30, 630, 10, 30, 3, 30, 3, 30, 3, 30, 7, 30, 635, 10, 30, 12, 30, 14, 30, 638, 11, 30, 3, 31, 3, 31, 5, 31, 642, 10, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 651, 10, 32, 3, 33, 3, 33, 3, 33, 3, 33, 5, 33, 657, 10, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 5, 36, 668, 10, 36, 3, 37, 3, 37, 3, 37, 7, 37, 673, 10, 37, 12, 37, 14, 37, 676, 11, 37, 3, 38, 3, 38, 3, 38, 3, 38, 7, 38, 682, 10, 38, 12, 38, 14, 38, 685, 11, 38, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 5, 40, 693, 10, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 5, 41, 703, 10, 41, 3, 42, 6, 42, 706, 10, 42, 13, 42, 14, 42, 707, 3, 43, 3, 43, 3, 43, 3, 43, 5, 43, 714, 10, 43, 3, 43, 5, 43, 717, 10, 43, 3, 43, 3, 43, 3, 43, 3, 43, 5, 43, 723, 10, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 5, 45, 730, 10, 45, 3, 46, 3, 46, 5, 46, 734, 10, 46, 3, 46, 3, 46, 7, 46, 738, 10, 46, 12, 46, 14, 46, 741, 11, 46, 3, 47, 3, 47, 5, 47, 745, 10, 47, 3, 47, 3, 47, 5, 47, 749, 10, 47, 5, 47, 751, 10, 47, 3, 48, 5, 48, 754, 10, 48, 3, 48, 3, 48, 5, 48, 758, 10, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 5, 50, 767, 10, 50, 3, 50, 3, 50, 3, 50, 5, 50, 772, 10, 50, 3, 50, 7, 50, 775, 10, 50, 12, 50, 14, 50, 778, 11, 50, 3, 51, 3, 51, 7, 51, 782, 10, 51, 12, 51, 14, 51, 785, 11, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 5, 52, 793, 10, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 5, 52, 801, 10, 52, 3, 52, 3, 52, 3, 52, 5, 52, 806, 10, 52, 3, 53, 3, 53, 5, 53, 810, 10, 53, 3, 53, 3, 53, 3, 53, 3, 53, 5, 53, 816, 10, 53, 3, 53, 5, 53, 819, 10, 53, 3, 54, 5, 54, 822, 10, 54, 3, 54, 3, 54, 5, 54, 826, 10, 54, 3, 55, 3, 55, 5, 55, 830, 10, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 5, 56, 839, 10, 56, 3, 57, 3, 57, 5, 57, 843, 10, 57, 3, 57, 5, 57, 846, 10, 57, 3, 57, 5, 57, 849, 10, 57, 3, 58, 3, 58, 3, 58, 5, 58, 854, 10, 58, 3, 58, 3, 58, 3, 59, 3, 59, 5, 59, 860, 10, 59, 3, 59, 5, 59, 863, 10, 59, 3, 59, 3, 59, 3, 59, 5, 59, 868, 10, 59, 3, 59, 5, 59, 871, 10, 59, 5, 59, 873, 10, 59, 3, 60, 3, 60, 3, 60, 5, 60, 878, 10, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 5, 61, 890, 10, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 7, 62, 897, 10, 62, 12, 62, 14, 62, 900, 11, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 5, 63, 911, 10, 63, 3, 63, 5, 63, 914, 10, 63, 3, 63, 3, 63, 3, 63, 5, 63, 919, 10, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 5, 63, 926, 10, 63, 3, 64, 3, 64, 5, 64, 930, 10, 64, 3, 64, 3, 64, 5, 64, 934, 10, 64, 5, 64, 936, 10, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 5, 67, 950, 10, 67, 3, 68, 3, 68, 3, 69, 5, 69, 955, 10, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 7, 70, 962, 10, 70, 12, 70, 14, 70, 965, 11, 70, 3, 71, 3, 71, 3, 71, 5, 71, 970, 10, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 5, 71, 979, 10, 71, 3, 71, 3, 71, 5, 71, 983, 10, 71, 3, 71, 3, 71, 5, 71, 987, 10, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 5, 74, 999, 10, 74, 3, 75, 3, 75, 3, 75, 7, 75, 1004, 10, 75, 12, 75, 14, 75, 1007, 11, 75, 3, 76, 3, 76, 5, 76, 1011, 10, 76, 3, 77, 3, 77, 3, 77, 3, 77, 5, 77, 1017, 10, 77, 3, 77, 5, 77, 1020, 10, 77, 3, 77, 3, 77, 5, 77, 1024, 10, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 7, 77, 1035, 10, 77, 12, 77, 14, 77, 1038, 11, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 5, 78, 1046, 10, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 7, 78, 1058, 10, 78, 12, 78, 14, 78, 1061, 11, 78, 3, 79, 3, 79, 3, 80, 3, 80, 5, 80, 1067, 10, 80, 3, 80, 3, 80, 3, 80, 5, 80, 1072, 10, 80, 3, 80, 3, 80, 3, 80, 3, 80, 5, 80, 1078, 10, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 5, 81, 1086, 10, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 5, 81, 1097, 10, 81, 3, 81, 3, 81, 5, 81, 1101, 10, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 7, 82, 1130, 10, 82, 12, 82, 14, 82, 1133, 11, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 5, 83, 1140, 10, 83, 3, 83, 3, 83, 5, 83, 1144, 10, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 5, 83, 1159, 10, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 5, 83, 1166, 10, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 5, 83, 1180, 10, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 5, 83, 1192, 10, 83, 3, 83, 3, 83, 3, 83, 3, 83, 5, 83, 1198, 10, 83, 3, 83, 3, 83, 3, 83, 6, 83, 1203, 10, 83, 13, 83, 14, 83, 1204, 3, 83, 5, 83, 1208, 10, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 5, 83, 1242, 10, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 7, 83, 1253, 10, 83, 12, 83, 14, 83, 1256, 11, 83, 3, 84, 3, 84, 3, 84, 5, 84, 1261, 10, 84, 3, 85, 3, 85, 3, 85, 5, 85, 1266, 10, 85, 3, 85, 3, 85, 3, 85, 5, 85, 1271, 10, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 5, 85, 1278, 10, 85, 3, 85, 3, 85, 3, 85, 3, 85, 5, 85, 1284, 10, 85, 3, 85, 3, 85, 3, 85, 5, 85, 1289, 10, 85, 3, 85, 3, 85, 3, 85, 5, 85, 1294, 10, 85, 3, 85, 3, 85, 3, 85, 3, 85, 5, 85, 1300, 10, 85, 3, 85, 3, 85, 5, 85, 1304, 10, 85, 3, 85, 3, 85, 3, 85, 5, 85, 1309, 10, 85, 3, 85, 3, 85, 3, 85, 5, 85, 1314, 10, 85, 3, 85, 3, 85, 3, 85, 5, 85, 1319, 10, 85, 3, 85, 3, 85, 3, 85, 5, 85, 1324, 10, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 5, 85, 1331, 10, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 5, 85, 1338, 10, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 5, 85, 1345, 10, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 5, 85, 1352, 10, 85, 3, 85, 3, 85, 3, 85, 5, 85, 1357, 10, 85, 3, 85, 3, 85, 3, 85, 5, 85, 1362, 10, 85, 3, 85, 3, 85, 3, 85, 5, 85, 1367, 10, 85, 3, 85, 3, 85, 5, 85, 1371, 10, 85, 3, 85, 3, 85, 5, 85, 1375, 10, 85, 3, 85, 3, 85, 5, 85, 1379, 10, 85, 5, 85, 1381, 10, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 5, 87, 1400, 10, 87, 3, 87, 3, 87, 5, 87, 1404, 10, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 5, 87, 1411, 10, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 5, 87, 1423, 10, 87, 3, 87, 5, 87, 1426, 10, 87, 3, 87, 3, 87, 5, 87, 1430, 10, 87, 3, 88, 3, 88, 3, 88, 5, 88, 1435, 10, 88, 3, 89, 3, 89, 3, 89, 5, 89, 1440, 10, 89, 3, 89, 3, 89, 5, 89, 1444, 10, 89, 3, 90, 3, 90, 3, 90, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 5, 91, 1454, 10, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 5, 91, 1463, 10, 91, 5, 91, 1465, 10, 91, 3, 92, 5, 92, 1468, 10, 92, 3, 92, 3, 92, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 5, 93, 1477, 10, 93, 3, 94, 3, 94, 3, 94, 7, 94, 1482, 10, 94, 12, 94, 14, 94, 1485, 11, 94, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 5, 95, 1497, 10, 95, 3, 95, 3, 95, 3, 95, 5, 95, 1502, 10, 95, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 5, 96, 1509, 10, 96, 3, 96, 3, 96, 3, 96, 3, 96, 5, 96, 1515, 10, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 6, 96, 1539, 10, 96, 13, 96, 14, 96, 1540, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 5, 96, 1572, 10, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 5, 96, 1592, 10, 96, 3, 96, 3, 96, 3, 96, 3, 96, 5, 96, 1598, 10, 96, 3, 96, 3, 96, 5, 96, 1602, 10, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 5, 96, 1629, 10, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 5, 96, 1641, 10, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 5, 96, 1654, 10, 96, 3, 96, 3, 96, 5, 96, 1658, 10, 96, 3, 96, 3, 96, 5, 96, 1662, 10, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 5, 96, 1690, 10, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 5, 96, 1744, 10, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 5, 96, 1754, 10, 96, 3, 96, 5, 96, 1757, 10, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 5, 96, 1769, 10, 96, 3, 96, 3, 96, 3, 96, 5, 96, 1774, 10, 96, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 5, 97, 1786, 10, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 5, 97, 1806, 10, 97, 3, 98, 3, 98, 5, 98, 1810, 10, 98, 3, 98, 3, 98, 3, 99, 3, 99, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 7, 100, 1824, 10, 100, 12, 100, 14, 100, 1827, 11, 100, 5, 100, 1829, 10, 100, 3, 101, 3, 101, 3, 101, 5, 101, 1834, 10, 101, 3, 101, 5, 101, 1837, 10, 101, 3, 102, 3, 102, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 5, 103, 1846, 10, 103, 3, 103, 3, 103, 5, 103, 1850, 10, 103, 3, 103, 3, 103, 3, 103, 3, 103, 5, 103, 1856, 10, 103, 3, 103, 3, 103, 3, 103, 3, 103, 5, 103, 1862, 10, 103, 3, 103, 3, 103, 5, 103, 1866, 10, 103, 3, 103, 3, 103, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 5, 104, 1877, 10, 104, 3, 104, 3, 104, 3, 104, 3, 104, 5, 104, 1883, 10, 104, 5, 104, 1885, 10, 104, 3, 104, 3, 104, 3, 105, 3, 105, 3, 105, 5, 105, 1892, 10, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 5, 105, 1899, 10, 105, 3, 105, 3, 105, 5, 105, 1903, 10, 105, 3, 106, 3, 106, 3, 106, 7, 106, 1908, 10, 106, 12, 106, 14, 106, 1911, 11, 106, 3, 107, 3, 107, 5, 107, 1915, 10, 107, 3, 108, 3, 108, 5, 108, 1919, 10, 108, 3, 109, 3, 109, 3, 109, 5, 109, 1924, 10, 109, 3, 110, 3, 110, 5, 110, 1928, 10, 110, 3, 110, 3, 110, 5, 110, 1932, 10, 110, 3, 111, 3, 111, 3, 111, 3, 112, 3, 112, 3, 112, 3, 113, 3, 113, 3, 113, 3, 114, 3, 114, 3, 114, 7, 114, 1946, 10, 114, 12, 114, 14, 114, 1949, 11, 114, 3, 115, 3, 115, 3, 115, 5, 115, 1954, 10, 115, 3, 116, 3, 116, 3, 117, 3, 117, 3, 118, 3, 118, 5, 118, 1962, 10, 118, 3, 119, 3, 119, 3, 120, 3, 120, 3, 120, 3, 120, 3, 121, 3, 121, 3, 121, 3, 121, 3, 122, 3, 122, 3, 122, 3, 122, 3, 123, 3, 123, 3, 123, 7, 123, 1981, 10, 123, 12, 123, 14, 123, 1984, 11, 123, 3, 124, 3, 124, 5, 124, 1988, 10, 124, 3, 125, 3, 125, 3, 126, 3, 126, 5, 126, 1994, 10, 126, 3, 126, 5, 126, 1997, 10, 126, 3, 126, 3, 126, 3, 126, 5, 126, 2002, 10, 126, 5, 126, 2004, 10, 126, 3, 126, 5, 126, 2007, 10, 126, 3, 126, 5, 126, 2010, 10, 126, 3, 126, 3, 126, 5, 126, 2014, 10, 126, 3, 126, 5, 126, 2017, 10, 126, 3, 126, 3, 126, 5, 126, 2021, 10, 126, 3, 126, 3, 126, 3, 126, 5, 126, 2026, 10, 126, 3, 126, 5, 126, 2029, 10, 126, 3, 126, 3, 126, 5, 126, 2033, 10, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 5, 126, 2041, 10, 126, 3, 126, 3, 126, 5, 126, 2045, 10, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 5, 126, 2057, 10, 126, 3, 126, 3, 126, 5, 126, 2061, 10, 126, 3, 126, 3, 126, 3, 126, 3, 126, 5, 126, 2067, 10, 126, 3, 126, 5, 126, 2070, 10, 126, 3, 126, 3, 126, 3, 126, 5, 126, 2075, 10, 126, 3, 126, 3, 126, 5, 126, 2079, 10, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 5, 126, 2087, 10, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 5, 126, 2095, 10, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 5, 126, 2102, 10, 126, 3, 126, 3, 126, 5, 126, 2106, 10, 126, 3, 126, 3, 126, 3, 126, 5, 126, 2111, 10, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 5, 126, 2120, 10, 126, 3, 126, 5, 126, 2123, 10, 126, 3, 126, 3, 126, 5, 126, 2127, 10, 126, 3, 126, 3, 126, 5, 126, 2131, 10, 126, 3, 126, 5, 126, 2134, 10, 126, 3, 126, 3, 126, 5, 126, 2138, 10, 126, 3, 126, 3, 126, 5, 126, 2142, 10, 126, 3, 126, 3, 126, 3, 126, 5, 126, 2147, 10, 126, 3, 126, 3, 126, 3, 126, 5, 126, 2152, 10, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 7, 126, 2165, 10, 126, 12, 126, 14, 126, 2168, 11, 126, 5, 126, 2170, 10, 126, 3, 126, 3, 126, 3, 126, 3, 126, 7, 126, 2176, 10, 126, 12, 126, 14, 126, 2179, 11, 126, 5, 126, 2181, 10, 126, 3, 126, 3, 126, 5, 126, 2185, 10, 126, 5, 126, 2187, 10, 126, 3, 127, 3, 127, 3, 127, 5, 127, 2192, 10, 127, 3, 128, 3, 128, 3, 128, 5, 128, 2197, 10, 128, 3, 128, 3, 128, 3, 129, 6, 129, 2202, 10, 129, 13, 129, 14, 129, 2203, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 5, 130, 2212, 10, 130, 3, 130, 3, 130, 3, 130, 3, 130, 5, 130, 2218, 10, 130, 5, 130, 2220, 10, 130, 3, 131, 3, 131, 5, 131, 2224, 10, 131, 3, 131, 3, 131, 5, 131, 2228, 10, 131, 3, 132, 3, 132, 5, 132, 2232, 10, 132, 3, 132, 3, 132, 5, 132, 2236, 10, 132, 3, 133, 3, 133, 3, 133, 3, 133, 3, 134, 3, 134, 3, 134, 3, 134, 3, 135, 3, 135, 3, 135, 5, 135, 2249, 10, 135, 3, 136, 3, 136, 3, 136, 5, 136, 2254, 10, 136, 3, 137, 3, 137, 3, 137, 3, 138, 3, 138, 3, 138, 3, 139, 3, 139, 6, 139, 2264, 10, 139, 13, 139, 14, 139, 2265, 3, 140, 3, 140, 3, 140, 3, 140, 5, 140, 2272, 10, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 5, 140, 2280, 10, 140, 3, 141, 3, 141, 6, 141, 2284, 10, 141, 13, 141, 14, 141, 2285, 3, 142, 3, 142, 3, 142, 3, 142, 3, 143, 3, 143, 3, 143, 3, 144, 3, 144, 3, 144, 3, 144, 7, 144, 2299, 10, 144, 12, 144, 14, 144, 2302, 11, 144, 3, 144, 3, 144, 3, 145, 3, 145, 3, 145, 7, 145, 2309, 10, 145, 12, 145, 14, 145, 2312, 11, 145, 3, 146, 3, 146, 3, 147, 3, 147, 5, 147, 2318, 10, 147, 3, 148, 3, 148, 3, 148, 7, 148, 2323, 10, 148, 12, 148, 14, 148, 2326, 11, 148, 3, 149, 3, 149, 3, 149, 3, 149, 3, 150, 3, 150, 3, 150, 7, 150, 2335, 10, 150, 12, 150, 14, 150, 2338, 11, 150, 3, 150, 3, 150, 5, 150, 2342, 10, 150, 3, 151, 3, 151, 3, 151, 3, 152, 3, 152, 3, 153, 3, 153, 3, 154, 3, 154, 3, 155, 3, 155, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 5, 156, 2361, 10, 156, 3, 156, 5, 156, 2364, 10, 156, 3, 157, 3, 157, 3, 157, 3, 157, 7, 157, 2370, 10, 157, 12, 157, 14, 157, 2373, 11, 157, 3, 157, 3, 157, 3, 158, 3, 158, 3, 159, 3, 159, 3, 159, 5, 159, 2382, 10, 159, 3, 160, 5, 160, 2385, 10, 160, 3, 160, 3, 160, 5, 160, 2389, 10, 160, 3, 160, 7, 160, 2392, 10, 160, 12, 160, 14, 160, 2395, 11, 160, 3, 161, 3, 161, 3, 162, 3, 162, 3, 163, 3, 163, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 5, 164, 2409, 10, 164, 3, 165, 3, 165, 5, 165, 2413, 10, 165, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 167, 3, 167, 5, 167, 2423, 10, 167, 3, 168, 3, 168, 3, 168, 3, 169, 3, 169, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 5, 170, 2436, 10, 170, 3, 171, 3, 171, 3, 171, 2, 6, 152, 154, 162, 164, 172, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 2, 54, 3, 2, 66, 73, 4, 2, 26, 26, 75, 75, 4, 2, 42, 42, 46, 46, 3, 2, 86, 88, 3, 2, 108, 109, 4, 2, 121, 121, 123, 123, 3, 2, 134, 135, 4, 2, 132, 132, 137, 137, 3, 2, 66, 67, 4, 2, 3, 3, 83, 83, 3, 2, 149, 150, 3, 2, 151, 152, 3, 2, 155, 157, 4, 2, 20, 20, 95, 95, 4, 2, 23, 23, 160, 160, 4, 2, 66, 66, 161, 161, 4, 2, 3, 3, 5, 10, 4, 2, 13, 15, 167, 168, 3, 2, 11, 12, 3, 2, 18, 19, 4, 2, 11, 12, 17, 17, 3, 2, 36, 37, 3, 2, 179, 181, 3, 2, 193, 197, 3, 2, 199, 200, 3, 2, 201, 202, 3, 2, 204, 205, 4, 2, 150, 150, 207, 207, 3, 2, 225, 226, 3, 2, 229, 230, 3, 2, 236, 237, 5, 2, 217, 217, 219, 220, 266, 266, 3, 2, 284, 294, 4, 2, 55, 62, 248, 248, 3, 2, 295, 297, 5, 2, 49, 54, 278, 278, 301, 302, 6, 2, 278, 278, 280, 282, 301, 301, 303, 303, 4, 2, 211, 211, 305, 305, 3, 2, 314, 315, 4, 2, 258, 264, 323, 323, 4, 2, 276, 277, 324, 324, 4, 2, 327, 327, 332, 332, 4, 2, 342, 342, 344, 347, 4, 2, 44, 44, 46, 48, 4, 2, 44, 44, 46, 46, 3, 2, 46, 48, 3, 2, 44, 45, 3, 2, 345, 346, 3, 2, 155, 156, 4, 2, 41, 41, 147, 147, 3, 2, 3, 4, 3, 2, 49, 338, 2, 2766, 2, 343, 3, 2, 2, 2, 4, 355, 3, 2, 2, 2, 6, 373, 3, 2, 2, 2, 8, 387, 3, 2, 2, 2, 10, 390, 3, 2, 2, 2, 12, 421, 3, 2, 2, 2, 14, 436, 3, 2, 2, 2, 16, 449, 3, 2, 2, 2, 18, 451, 3, 2, 2, 2, 20, 479, 3, 2, 2, 2, 22, 481, 3, 2, 2, 2, 24, 483, 3, 2, 2, 2, 26, 486, 3, 2, 2, 2, 28, 493, 3, 2, 2, 2, 30, 495, 3, 2, 2, 2, 32, 525, 3, 2, 2, 2, 34, 537, 3, 2, 2, 2, 36, 540, 3, 2, 2, 2, 38, 549, 3, 2, 2, 2, 40, 553, 3, 2, 2, 2, 42, 558, 3, 2, 2, 2, 44, 571, 3, 2, 2, 2, 46, 576, 3, 2, 2, 2, 48, 580, 3, 2, 2, 2, 50, 596, 3, 2, 2, 2, 52, 598, 3, 2, 2, 2, 54, 616, 3, 2, 2, 2, 56, 618, 3, 2, 2, 2, 58, 627, 3, 2, 2, 2, 60, 639, 3, 2, 2, 2, 62, 646, 3, 2, 2, 2, 64, 656, 3, 2, 2, 2, 66, 658, 3, 2, 2, 2, 68, 662, 3, 2, 2, 2, 70, 664, 3, 2, 2, 2, 72, 669, 3, 2, 2, 2, 74, 677, 3, 2, 2, 2, 76, 686, 3, 2, 2, 2, 78, 689, 3, 2, 2, 2, 80, 702, 3, 2, 2, 2, 82, 705, 3, 2, 2, 2, 84, 722, 3, 2, 2, 2, 86, 724, 3, 2, 2, 2, 88, 729, 3, 2, 2, 2, 90, 733, 3, 2, 2, 2, 92, 750, 3, 2, 2, 2, 94, 753, 3, 2, 2, 2, 96, 759, 3, 2, 2, 2, 98, 771, 3, 2, 2, 2, 100, 779, 3, 2, 2, 2, 102, 805, 3, 2, 2, 2, 104, 818, 3, 2, 2, 2, 106, 825, 3, 2, 2, 2, 108, 827, 3, 2, 2, 2, 110, 838, 3, 2, 2, 2, 112, 840, 3, 2, 2, 2, 114, 850, 3, 2, 2, 2, 116, 872, 3, 2, 2, 2, 118, 874, 3, 2, 2, 2, 120, 881, 3, 2, 2, 2, 122, 891, 3, 2, 2, 2, 124, 925, 3, 2, 2, 2, 126, 935, 3, 2, 2, 2, 128, 937, 3, 2, 2, 2, 130, 941, 3, 2, 2, 2, 132, 949, 3, 2, 2, 2, 134, 951, 3, 2, 2, 2, 136, 954, 3, 2, 2, 2, 138, 958, 3, 2, 2, 2, 140, 986, 3, 2, 2, 2, 142, 988, 3, 2, 2, 2, 144, 990, 3, 2, 2, 2, 146, 992, 3, 2, 2, 2, 148, 1000, 3, 2, 2, 2, 150, 1010, 3, 2, 2, 2, 152, 1023, 3, 2, 2, 2, 154, 1039, 3, 2, 2, 2, 156, 1062, 3, 2, 2, 2, 158, 1064, 3, 2, 2, 2, 160, 1100, 3, 2, 2, 2, 162, 1102, 3, 2, 2, 2, 164, 1241, 3, 2, 2, 2, 166, 1257, 3, 2, 2, 2, 168, 1380, 3, 2, 2, 2, 170, 1382, 3, 2, 2, 2, 172, 1429, 3, 2, 2, 2, 174, 1431, 3, 2, 2, 2, 176, 1436, 3, 2, 2, 2, 178, 1445, 3, 2, 2, 2, 180, 1464, 3, 2, 2, 2, 182, 1467, 3, 2, 2, 2, 184, 1476, 3, 2, 2, 2, 186, 1478, 3, 2, 2, 2, 188, 1501, 3, 2, 2, 2, 190, 1773, 3, 2, 2, 2, 192, 1805, 3, 2, 2, 2, 194, 1807, 3, 2, 2, 2, 196, 1813, 3, 2, 2, 2, 198, 1815, 3, 2, 2, 2, 200, 1830, 3, 2, 2, 2, 202, 1838, 3, 2, 2, 2, 204, 1840, 3, 2, 2, 2, 206, 1869, 3, 2, 2, 2, 208, 1902, 3, 2, 2, 2, 210, 1904, 3, 2, 2, 2, 212, 1912, 3, 2, 2, 2, 214, 1918, 3, 2, 2, 2, 216, 1923, 3, 2, 2, 2, 218, 1925, 3, 2, 2, 2, 220, 1933, 3, 2, 2, 2, 222, 1936, 3, 2, 2, 2, 224, 1939, 3, 2, 2, 2, 226, 1942, 3, 2, 2, 2, 228, 1953, 3, 2, 2, 2, 230, 1955, 3, 2, 2, 2, 232, 1957, 3, 2, 2, 2, 234, 1961, 3, 2, 2, 2, 236, 1963, 3, 2, 2, 2, 238, 1965, 3, 2, 2, 2, 240, 1969, 3, 2, 2, 2, 242, 1973, 3, 2, 2, 2, 244, 1977, 3, 2, 2, 2, 246, 1985, 3, 2, 2, 2, 248, 1989, 3, 2, 2, 2, 250, 2186, 3, 2, 2, 2, 252, 2191, 3, 2, 2, 2, 254, 2193, 3, 2, 2, 2, 256, 2201, 3, 2, 2, 2, 258, 2219, 3, 2, 2, 2, 260, 2227, 3, 2, 2, 2, 262, 2235, 3, 2, 2, 2, 264, 2237, 3, 2, 2, 2, 266, 2241, 3, 2, 2, 2, 268, 2248, 3, 2, 2, 2, 270, 2253, 3, 2, 2, 2, 272, 2255, 3, 2, 2, 2, 274, 2258, 3, 2, 2, 2, 276, 2261, 3, 2, 2, 2, 278, 2279, 3, 2, 2, 2, 280, 2281, 3, 2, 2, 2, 282, 2287, 3, 2, 2, 2, 284, 2291, 3, 2, 2, 2, 286, 2294, 3, 2, 2, 2, 288, 2305, 3, 2, 2, 2, 290, 2313, 3, 2, 2, 2, 292, 2317, 3, 2, 2, 2, 294, 2319, 3, 2, 2, 2, 296, 2327, 3, 2, 2, 2, 298, 2331, 3, 2, 2, 2, 300, 2343, 3, 2, 2, 2, 302, 2346, 3, 2, 2, 2, 304, 2348, 3, 2, 2, 2, 306, 2350, 3, 2, 2, 2, 308, 2352, 3, 2, 2, 2, 310, 2363, 3, 2, 2, 2, 312, 2365, 3, 2, 2, 2, 314, 2376, 3, 2, 2, 2, 316, 2381, 3, 2, 2, 2, 318, 2388, 3, 2, 2, 2, 320, 2396, 3, 2, 2, 2, 322, 2398, 3, 2, 2, 2, 324, 2400, 3, 2, 2, 2, 326, 2408, 3, 2, 2, 2, 328, 2412, 3, 2, 2, 2, 330, 2414, 3, 2, 2, 2, 332, 2422, 3, 2, 2, 2, 334, 2424, 3, 2, 2, 2, 336, 2427, 3, 2, 2, 2, 338, 2435, 3, 2, 2, 2, 340, 2437, 3, 2, 2, 2, 342, 344, 5, 58, 30, 2, 343, 342, 3, 2, 2, 2, 343, 344, 3, 2, 2, 2, 344, 345, 3, 2, 2, 2, 345, 351, 5, 6, 4, 2, 346, 348, 7, 27, 2, 2, 347, 349, 7, 2, 2, 3, 348, 347, 3, 2, 2, 2, 348, 349, 3, 2, 2, 2, 349, 352, 3, 2, 2, 2, 350, 352, 7, 2, 2, 3, 351, 346, 3, 2, 2, 2, 351, 350, 3, 2, 2, 2, 352, 3, 3, 2, 2, 2, 353, 356, 5, 152, 77, 2, 354, 356, 7, 63, 2, 2, 355, 353, 3, 2, 2, 2, 355, 354, 3, 2, 2, 2, 356, 364, 3, 2, 2, 2, 357, 360, 7, 26, 2, 2, 358, 361, 5, 152, 77, 2, 359, 361, 7, 63, 2, 2, 360, 358, 3, 2, 2, 2, 360, 359, 3, 2, 2, 2, 361, 363, 3, 2, 2, 2, 362, 357, 3, 2, 2, 2, 363, 366, 3, 2, 2, 2, 364, 362, 3, 2, 2, 2, 364, 365, 3, 2, 2, 2, 365, 5, 3, 2, 2, 2, 366, 364, 3, 2, 2, 2, 367, 369, 5, 10, 6, 2, 368, 370, 5, 82, 42, 2, 369, 368, 3, 2, 2, 2, 369, 370, 3, 2, 2, 2, 370, 374, 3, 2, 2, 2, 371, 374, 5, 14, 8, 2, 372, 374, 5, 8, 5, 2, 373, 367, 3, 2, 2, 2, 373, 371, 3, 2, 2, 2, 373, 372, 3, 2, 2, 2, 374, 7, 3, 2, 2, 2, 375, 376, 7, 29, 2, 2, 376, 377, 5, 8, 5, 2, 377, 378, 7, 30, 2, 2, 378, 388, 3, 2, 2, 2, 379, 380, 5, 10, 6, 2, 380, 382, 5, 30, 16, 2, 381, 383, 5, 82, 42, 2, 382, 381, 3, 2, 2, 2, 382, 383, 3, 2, 2, 2, 383, 388, 3, 2, 2, 2, 384, 385, 5, 82, 42, 2, 385, 386, 5, 30, 16, 2, 386, 388, 3, 2, 2, 2, 387, 375, 3, 2, 2, 2, 387, 379, 3, 2, 2, 2, 387, 384, 3, 2, 2, 2, 388, 9, 3, 2, 2, 2, 389, 391, 5, 58, 30, 2, 390, 389, 3, 2, 2, 2, 390, 391, 3, 2, 2, 2, 391, 406, 3, 2, 2, 2, 392, 394, 5, 12, 7, 2, 393, 395, 5, 66, 34, 2, 394, 393, 3, 2, 2, 2, 394, 395, 3, 2, 2, 2, 395, 397, 3, 2, 2, 2, 396, 398, 5, 24, 13, 2, 397, 396, 3, 2, 2, 2, 397, 398, 3, 2, 2, 2, 398, 407, 3, 2, 2, 2, 399, 401, 5, 14, 8, 2, 400, 402, 5, 66, 34, 2, 401, 400, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 404, 3, 2, 2, 2, 403, 405, 5, 24, 13, 2, 404, 403, 3, 2, 2, 2, 404, 405, 3, 2, 2, 2, 405, 407, 3, 2, 2, 2, 406, 392, 3, 2, 2, 2, 406, 399, 3, 2, 2, 2, 407, 409, 3, 2, 2, 2, 408, 410, 5, 32, 17, 2, 409, 408, 3, 2, 2, 2, 409, 410, 3, 2, 2, 2, 410, 11, 3, 2, 2, 2, 411, 422, 5, 16, 9, 2, 412, 413, 5, 14, 8, 2, 413, 415, 7, 64, 2, 2, 414, 416, 5, 134, 68, 2, 415, 414, 3, 2, 2, 2, 415, 416, 3, 2, 2, 2, 416, 419, 3, 2, 2, 2, 417, 420, 5, 16, 9, 2, 418, 420, 5, 14, 8, 2, 419, 417, 3, 2, 2, 2, 419, 418, 3, 2, 2, 2, 420, 422, 3, 2, 2, 2, 421, 411, 3, 2, 2, 2, 421, 412, 3, 2, 2, 2, 422, 433, 3, 2, 2, 2, 423, 425, 7, 64, 2, 2, 424, 426, 5, 134, 68, 2, 425, 424, 3, 2, 2, 2, 425, 426, 3, 2, 2, 2, 426, 429, 3, 2, 2, 2, 427, 430, 5, 16, 9, 2, 428, 430, 5, 14, 8, 2, 429, 427, 3, 2, 2, 2, 429, 428, 3, 2, 2, 2, 430, 432, 3, 2, 2, 2, 431, 423, 3, 2, 2, 2, 432, 435, 3, 2, 2, 2, 433, 431, 3, 2, 2, 2, 433, 434, 3, 2, 2, 2, 434, 13, 3, 2, 2, 2, 435, 433, 3, 2, 2, 2, 436, 442, 7, 29, 2, 2, 437, 443, 5, 14, 8, 2, 438, 440, 5, 10, 6, 2, 439, 441, 5, 82, 42, 2, 440, 439, 3, 2, 2, 2, 440, 441, 3, 2, 2, 2, 441, 443, 3, 2, 2, 2, 442, 437, 3, 2, 2, 2, 442, 438, 3, 2, 2, 2, 443, 444, 3, 2, 2, 2, 444, 445, 7, 30, 2, 2, 445, 15, 3, 2, 2, 2, 446, 450, 5, 18, 10, 2, 447, 450, 5, 74, 38, 2, 448, 450, 5, 76, 39, 2, 449, 446, 3, 2, 2, 2, 449, 447, 3, 2, 2, 2, 449, 448, 3, 2, 2, 2, 450, 17, 3, 2, 2, 2, 451, 455, 7, 65, 2, 2, 452, 454, 5, 80, 41, 2, 453, 452, 3, 2, 2, 2, 454, 457, 3, 2, 2, 2, 455, 453, 3, 2, 2, 2, 455, 456, 3, 2, 2, 2, 456, 458, 3, 2, 2, 2, 457, 455, 3, 2, 2, 2, 458, 460, 5, 90, 46, 2, 459, 461, 5, 30, 16, 2, 460, 459, 3, 2, 2, 2, 460, 461, 3, 2, 2, 2, 461, 463, 3, 2, 2, 2, 462, 464, 5, 70, 36, 2, 463, 462, 3, 2, 2, 2, 463, 464, 3, 2, 2, 2, 464, 466, 3, 2, 2, 2, 465, 467, 5, 96, 49, 2, 466, 465, 3, 2, 2, 2, 466, 467, 3, 2, 2, 2, 467, 469, 3, 2, 2, 2, 468, 470, 5, 62, 32, 2, 469, 468, 3, 2, 2, 2, 469, 470, 3, 2, 2, 2, 470, 472, 3, 2, 2, 2, 471, 473, 5, 34, 18, 2, 472, 471, 3, 2, 2, 2, 472, 473, 3, 2, 2, 2, 473, 475, 3, 2, 2, 2, 474, 476, 5, 36, 19, 2, 475, 474, 3, 2, 2, 2, 475, 476, 3, 2, 2, 2, 476, 19, 3, 2, 2, 2, 477, 480, 5, 2, 2, 2, 478, 480, 5, 14, 8, 2, 479, 477, 3, 2, 2, 2, 479, 478, 3, 2, 2, 2, 480, 21, 3, 2, 2, 2, 481, 482, 9, 2, 2, 2, 482, 23, 3, 2, 2, 2, 483, 484, 7, 74, 2, 2, 484, 485, 5, 26, 14, 2, 485, 25, 3, 2, 2, 2, 486, 489, 5, 28, 15, 2, 487, 488, 9, 3, 2, 2, 488, 490, 5, 28, 15, 2, 489, 487, 3, 2, 2, 2, 489, 490, 3, 2, 2, 2, 490, 27, 3, 2, 2, 2, 491, 494, 5, 292, 147, 2, 492, 494, 9, 4, 2, 2, 493, 491, 3, 2, 2, 2, 493, 492, 3, 2, 2, 2, 494, 29, 3, 2, 2, 2, 495, 523, 7, 76, 2, 2, 496, 497, 7, 77, 2, 2, 497, 499, 5, 314, 158, 2, 498, 500, 5, 274, 138, 2, 499, 498, 3, 2, 2, 2, 499, 500, 3, 2, 2, 2, 500, 502, 3, 2, 2, 2, 501, 503, 5, 276, 139, 2, 502, 501, 3, 2, 2, 2, 502, 503, 3, 2, 2, 2, 503, 505, 3, 2, 2, 2, 504, 506, 5, 280, 141, 2, 505, 504, 3, 2, 2, 2, 505, 506, 3, 2, 2, 2, 506, 524, 3, 2, 2, 2, 507, 508, 7, 78, 2, 2, 508, 524, 5, 314, 158, 2, 509, 512, 5, 332, 167, 2, 510, 512, 5, 216, 109, 2, 511, 509, 3, 2, 2, 2, 511, 510, 3, 2, 2, 2, 512, 520, 3, 2, 2, 2, 513, 516, 7, 26, 2, 2, 514, 517, 5, 332, 167, 2, 515, 517, 5, 216, 109, 2, 516, 514, 3, 2, 2, 2, 516, 515, 3, 2, 2, 2, 517, 519, 3, 2, 2, 2, 518, 513, 3, 2, 2, 2, 519, 522, 3, 2, 2, 2, 520, 518, 3, 2, 2, 2, 520, 521, 3, 2, 2, 2, 521, 524, 3, 2, 2, 2, 522, 520, 3, 2, 2, 2, 523, 496, 3, 2, 2, 2, 523, 507, 3, 2, 2, 2, 523, 511, 3, 2, 2, 2, 524, 31, 3, 2, 2, 2, 525, 526, 7, 79, 2, 2, 526, 527, 7, 80, 2, 2, 527, 533, 7, 29, 2, 2, 528, 531, 7, 46, 2, 2, 529, 530, 7, 26, 2, 2, 530, 532, 7, 46, 2, 2, 531, 529, 3, 2, 2, 2, 531, 532, 3, 2, 2, 2, 532, 534, 3, 2, 2, 2, 533, 528, 3, 2, 2, 2, 533, 534, 3, 2, 2, 2, 534, 535, 3, 2, 2, 2, 535, 536, 7, 30, 2, 2, 536, 33, 3, 2, 2, 2, 537, 538, 7, 81, 2, 2, 538, 539, 5, 152, 77, 2, 539, 35, 3, 2, 2, 2, 540, 541, 7, 82, 2, 2, 541, 546, 5, 38, 20, 2, 542, 543, 7, 26, 2, 2, 543, 545, 5, 38, 20, 2, 544, 542, 3, 2, 2, 2, 545, 548, 3, 2, 2, 2, 546, 544, 3, 2, 2, 2, 546, 547, 3, 2, 2, 2, 547, 37, 3, 2, 2, 2, 548, 546, 3, 2, 2, 2, 549, 550, 5, 292, 147, 2, 550, 551, 7, 83, 2, 2, 551, 552, 5, 40, 21, 2, 552, 39, 3, 2, 2, 2, 553, 554, 7, 29, 2, 2, 554, 555, 5, 42, 22, 2, 555, 556, 7, 30, 2, 2, 556, 41, 3, 2, 2, 2, 557, 559, 5, 292, 147, 2, 558, 557, 3, 2, 2, 2, 558, 559, 3, 2, 2, 2, 559, 563, 3, 2, 2, 2, 560, 561, 7, 84, 2, 2, 561, 562, 7, 85, 2, 2, 562, 564, 5, 244, 123, 2, 563, 560, 3, 2, 2, 2, 563, 564, 3, 2, 2, 2, 564, 566, 3, 2, 2, 2, 565, 567, 5, 66, 34, 2, 566, 565, 3, 2, 2, 2, 566, 567, 3, 2, 2, 2, 567, 569, 3, 2, 2, 2, 568, 570, 5, 44, 23, 2, 569, 568, 3, 2, 2, 2, 569, 570, 3, 2, 2, 2, 570, 43, 3, 2, 2, 2, 571, 572, 5, 46, 24, 2, 572, 574, 5, 48, 25, 2, 573, 575, 5, 56, 29, 2, 574, 573, 3, 2, 2, 2, 574, 575, 3, 2, 2, 2, 575, 45, 3, 2, 2, 2, 576, 577, 9, 5, 2, 2, 577, 47, 3, 2, 2, 2, 578, 581, 5, 50, 26, 2, 579, 581, 5, 52, 27, 2, 580, 578, 3, 2, 2, 2, 580, 579, 3, 2, 2, 2, 581, 49, 3, 2, 2, 2, 582, 583, 7, 89, 2, 2, 583, 597, 7, 90, 2, 2, 584, 585, 5, 306, 154, 2, 585, 586, 7, 90, 2, 2, 586, 597, 3, 2, 2, 2, 587, 588, 7, 42, 2, 2, 588, 597, 7, 90, 2, 2, 589, 590, 7, 91, 2, 2, 590, 591, 5, 152, 77, 2, 591, 592, 5, 234, 118, 2, 592, 593, 7, 90, 2, 2, 593, 597, 3, 2, 2, 2, 594, 595, 7, 92, 2, 2, 595, 597, 7, 93, 2, 2, 596, 582, 3, 2, 2, 2, 596, 584, 3, 2, 2, 2, 596, 587, 3, 2, 2, 2, 596, 589, 3, 2, 2, 2, 596, 594, 3, 2, 2, 2, 597, 51, 3, 2, 2, 2, 598, 599, 7, 94, 2, 2, 599, 600, 5, 54, 28, 2, 600, 601, 7, 95, 2, 2, 601, 602, 5, 54, 28, 2, 602, 53, 3, 2, 2, 2, 603, 617, 5, 50, 26, 2, 604, 605, 7, 89, 2, 2, 605, 617, 7, 96, 2, 2, 606, 607, 5, 306, 154, 2, 607, 608, 7, 96, 2, 2, 608, 617, 3, 2, 2, 2, 609, 610, 7, 42, 2, 2, 610, 617, 7, 96, 2, 2, 611, 612, 7, 91, 2, 2, 612, 613, 5, 152, 77, 2, 613, 614, 5, 234, 118, 2, 614, 615, 7, 96, 2, 2, 615, 617, 3, 2, 2, 2, 616, 603, 3, 2, 2, 2, 616, 604, 3, 2, 2, 2, 616, 606, 3, 2, 2, 2, 616, 609, 3, 2, 2, 2, 616, 611, 3, 2, 2, 2, 617, 55, 3, 2, 2, 2, 618, 625, 7, 97, 2, 2, 619, 620, 7, 92, 2, 2, 620, 626, 7, 93, 2, 2, 621, 626, 7, 98, 2, 2, 622, 626, 7, 99, 2, 2, 623, 624, 7, 100, 2, 2, 624, 626, 7, 101, 2, 2, 625, 619, 3, 2, 2, 2, 625, 621, 3, 2, 2, 2, 625, 622, 3, 2, 2, 2, 625, 623, 3, 2, 2, 2, 626, 57, 3, 2, 2, 2, 627, 629, 7, 102, 2, 2, 628, 630, 7, 104, 2, 2, 629, 628, 3, 2, 2, 2, 629, 630, 3, 2, 2, 2, 630, 631, 3, 2, 2, 2, 631, 636, 5, 60, 31, 2, 632, 633, 7, 26, 2, 2, 633, 635, 5, 60, 31, 2, 634, 632, 3, 2, 2, 2, 635, 638, 3, 2, 2, 2, 636, 634, 3, 2, 2, 2, 636, 637, 3, 2, 2, 2, 637, 59, 3, 2, 2, 2, 638, 636, 3, 2, 2, 2, 639, 641, 5, 292, 147, 2, 640, 642, 5, 286, 144, 2, 641, 640, 3, 2, 2, 2, 641, 642, 3, 2, 2, 2, 642, 643, 3, 2, 2, 2, 643, 644, 7, 83, 2, 2, 644, 645, 5, 20, 11, 2, 645, 61, 3, 2, 2, 2, 646, 647, 7, 98, 2, 2, 647, 648, 7, 85, 2, 2, 648, 650, 5, 244, 123, 2, 649, 651, 5, 64, 33, 2, 650, 649, 3, 2, 2, 2, 650, 651, 3, 2, 2, 2, 651, 63, 3, 2, 2, 2, 652, 653, 7, 102, 2, 2, 653, 657, 7, 105, 2, 2, 654, 655, 7, 102, 2, 2, 655, 657, 7, 106, 2, 2, 656, 652, 3, 2, 2, 2, 656, 654, 3, 2, 2, 2, 657, 65, 3, 2, 2, 2, 658, 659, 7, 107, 2, 2, 659, 660, 7, 85, 2, 2, 660, 661, 5, 244, 123, 2, 661, 67, 3, 2, 2, 2, 662, 663, 9, 6, 2, 2, 663, 69, 3, 2, 2, 2, 664, 667, 7, 110, 2, 2, 665, 668, 7, 111, 2, 2, 666, 668, 5, 72, 37, 2, 667, 665, 3, 2, 2, 2, 667, 666, 3, 2, 2, 2, 668, 71, 3, 2, 2, 2, 669, 674, 5, 98, 50, 2, 670, 671, 7, 26, 2, 2, 671, 673, 5, 98, 50, 2, 672, 670, 3, 2, 2, 2, 673, 676, 3, 2, 2, 2, 674, 672, 3, 2, 2, 2, 674, 675, 3, 2, 2, 2, 675, 73, 3, 2, 2, 2, 676, 674, 3, 2, 2, 2, 677, 678, 7, 112, 2, 2, 678, 683, 5, 78, 40, 2, 679, 680, 7, 26, 2, 2, 680, 682, 5, 78, 40, 2, 681, 679, 3, 2, 2, 2, 682, 685, 3, 2, 2, 2, 683, 681, 3, 2, 2, 2, 683, 684, 3, 2, 2, 2, 684, 75, 3, 2, 2, 2, 685, 683, 3, 2, 2, 2, 686, 687, 7, 113, 2, 2, 687, 688, 5, 298, 150, 2, 688, 77, 3, 2, 2, 2, 689, 690, 7, 93, 2, 2, 690, 692, 7, 29, 2, 2, 691, 693, 5, 4, 3, 2, 692, 691, 3, 2, 2, 2, 692, 693, 3, 2, 2, 2, 693, 694, 3, 2, 2, 2, 694, 695, 7, 30, 2, 2, 695, 79, 3, 2, 2, 2, 696, 703, 5, 22, 12, 2, 697, 703, 7, 114, 2, 2, 698, 703, 7, 115, 2, 2, 699, 700, 7, 116, 2, 2, 700, 701, 7, 3, 2, 2, 701, 703, 5, 304, 153, 2, 702, 696, 3, 2, 2, 2, 702, 697, 3, 2, 2, 2, 702, 698, 3, 2, 2, 2, 702, 699, 3, 2, 2, 2, 703, 81, 3, 2, 2, 2, 704, 706, 5, 84, 43, 2, 705, 704, 3, 2, 2, 2, 706, 707, 3, 2, 2, 2, 707, 705, 3, 2, 2, 2, 707, 708, 3, 2, 2, 2, 708, 83, 3, 2, 2, 2, 709, 710, 7, 117, 2, 2, 710, 713, 5, 86, 44, 2, 711, 712, 7, 118, 2, 2, 712, 714, 5, 288, 145, 2, 713, 711, 3, 2, 2, 2, 713, 714, 3, 2, 2, 2, 714, 716, 3, 2, 2, 2, 715, 717, 5, 88, 45, 2, 716, 715, 3, 2, 2, 2, 716, 717, 3, 2, 2, 2, 717, 723, 3, 2, 2, 2, 718, 719, 7, 119, 2, 2, 719, 720, 7, 120, 2, 2, 720, 721, 7, 121, 2, 2, 721, 723, 7, 122, 2, 2, 722, 709, 3, 2, 2, 2, 722, 718, 3, 2, 2, 2, 723, 85, 3, 2, 2, 2, 724, 725, 9, 7, 2, 2, 725, 87, 3, 2, 2, 2, 726, 727, 7, 124, 2, 2, 727, 730, 7, 125, 2, 2, 728, 730, 7, 126, 2, 2, 729, 726, 3, 2, 2, 2, 729, 728, 3, 2, 2, 2, 730, 89, 3, 2, 2, 2, 731, 734, 5, 92, 47, 2, 732, 734, 7, 13, 2, 2, 733, 731, 3, 2, 2, 2, 733, 732, 3, 2, 2, 2, 734, 739, 3, 2, 2, 2, 735, 736, 7, 26, 2, 2, 736, 738, 5, 92, 47, 2, 737, 735, 3, 2, 2, 2, 738, 741, 3, 2, 2, 2, 739, 737, 3, 2, 2, 2, 739, 740, 3, 2, 2, 2, 740, 91, 3, 2, 2, 2, 741, 739, 3, 2, 2, 2, 742, 744, 5, 298, 150, 2, 743, 745, 5, 94, 48, 2, 744, 743, 3, 2, 2, 2, 744, 745, 3, 2, 2, 2, 745, 751, 3, 2, 2, 2, 746, 748, 5, 152, 77, 2, 747, 749, 5, 94, 48, 2, 748, 747, 3, 2, 2, 2, 748, 749, 3, 2, 2, 2, 749, 751, 3, 2, 2, 2, 750, 742, 3, 2, 2, 2, 750, 746, 3, 2, 2, 2, 751, 93, 3, 2, 2, 2, 752, 754, 7, 83, 2, 2, 753, 752, 3, 2, 2, 2, 753, 754, 3, 2, 2, 2, 754, 757, 3, 2, 2, 2, 755, 758, 5, 292, 147, 2, 756, 758, 5, 314, 158, 2, 757, 755, 3, 2, 2, 2, 757, 756, 3, 2, 2, 2, 758, 95, 3, 2, 2, 2, 759, 760, 7, 127, 2, 2, 760, 761, 5, 152, 77, 2, 761, 97, 3, 2, 2, 2, 762, 772, 5, 110, 56, 2, 763, 766, 7, 31, 2, 2, 764, 767, 5, 292, 147, 2, 765, 767, 7, 128, 2, 2, 766, 764, 3, 2, 2, 2, 766, 765, 3, 2, 2, 2, 767, 768, 3, 2, 2, 2, 768, 769, 5, 100, 51, 2, 769, 770, 7, 32, 2, 2, 770, 772, 3, 2, 2, 2, 771, 762, 3, 2, 2, 2, 771, 763, 3, 2, 2, 2, 772, 776, 3, 2, 2, 2, 773, 775, 5, 102, 52, 2, 774, 773, 3, 2, 2, 2, 775, 778, 3, 2, 2, 2, 776, 774, 3, 2, 2, 2, 776, 777, 3, 2, 2, 2, 777, 99, 3, 2, 2, 2, 778, 776, 3, 2, 2, 2, 779, 783, 5, 110, 56, 2, 780, 782, 5, 102, 52, 2, 781, 780, 3, 2, 2, 2, 782, 785, 3, 2, 2, 2, 783, 781, 3, 2, 2, 2, 783, 784, 3, 2, 2, 2, 784, 101, 3, 2, 2, 2, 785, 783, 3, 2, 2, 2, 786, 787, 5, 106, 54, 2, 787, 792, 5, 98, 50, 2, 788, 789, 7, 129, 2, 2, 789, 793, 5, 152, 77, 2, 790, 791, 7, 130, 2, 2, 791, 793, 5, 296, 149, 2, 792, 788, 3, 2, 2, 2, 792, 790, 3, 2, 2, 2, 792, 793, 3, 2, 2, 2, 793, 806, 3, 2, 2, 2, 794, 795, 5, 108, 55, 2, 795, 800, 5, 98, 50, 2, 796, 797, 7, 129, 2, 2, 797, 801, 5, 152, 77, 2, 798, 799, 7, 130, 2, 2, 799, 801, 5, 296, 149, 2, 800, 796, 3, 2, 2, 2, 800, 798, 3, 2, 2, 2, 801, 806, 3, 2, 2, 2, 802, 803, 5, 104, 53, 2, 803, 804, 5, 110, 56, 2, 804, 806, 3, 2, 2, 2, 805, 786, 3, 2, 2, 2, 805, 794, 3, 2, 2, 2, 805, 802, 3, 2, 2, 2, 806, 103, 3, 2, 2, 2, 807, 809, 7, 131, 2, 2, 808, 810, 7, 132, 2, 2, 809, 808, 3, 2, 2, 2, 809, 810, 3, 2, 2, 2, 810, 811, 3, 2, 2, 2, 811, 819, 7, 133, 2, 2, 812, 813, 7, 131, 2, 2, 813, 815, 9, 8, 2, 2, 814, 816, 7, 136, 2, 2, 815, 814, 3, 2, 2, 2, 815, 816, 3, 2, 2, 2, 816, 817, 3, 2, 2, 2, 817, 819, 7, 133, 2, 2, 818, 807, 3, 2, 2, 2, 818, 812, 3, 2, 2, 2, 819, 105, 3, 2, 2, 2, 820, 822, 9, 9, 2, 2, 821, 820, 3, 2, 2, 2, 821, 822, 3, 2, 2, 2, 822, 823, 3, 2, 2, 2, 823, 826, 7, 133, 2, 2, 824, 826, 7, 68, 2, 2, 825, 821, 3, 2, 2, 2, 825, 824, 3, 2, 2, 2, 826, 107, 3, 2, 2, 2, 827, 829, 9, 8, 2, 2, 828, 830, 7, 136, 2, 2, 829, 828, 3, 2, 2, 2, 829, 830, 3, 2, 2, 2, 830, 831, 3, 2, 2, 2, 831, 832, 7, 133, 2, 2, 832, 109, 3, 2, 2, 2, 833, 839, 5, 112, 57, 2, 834, 839, 5, 114, 58, 2, 835, 839, 5, 116, 59, 2, 836, 839, 5, 118, 60, 2, 837, 839, 5, 120, 61, 2, 838, 833, 3, 2, 2, 2, 838, 834, 3, 2, 2, 2, 838, 835, 3, 2, 2, 2, 838, 836, 3, 2, 2, 2, 838, 837, 3, 2, 2, 2, 839, 111, 3, 2, 2, 2, 840, 842, 5, 298, 150, 2, 841, 843, 5, 284, 143, 2, 842, 841, 3, 2, 2, 2, 842, 843, 3, 2, 2, 2, 843, 845, 3, 2, 2, 2, 844, 846, 5, 136, 69, 2, 845, 844, 3, 2, 2, 2, 845, 846, 3, 2, 2, 2, 846, 848, 3, 2, 2, 2, 847, 849, 5, 138, 70, 2, 848, 847, 3, 2, 2, 2, 848, 849, 3, 2, 2, 2, 849, 113, 3, 2, 2, 2, 850, 853, 7, 29, 2, 2, 851, 854, 5, 112, 57, 2, 852, 854, 5, 114, 58, 2, 853, 851, 3, 2, 2, 2, 853, 852, 3, 2, 2, 2, 854, 855, 3, 2, 2, 2, 855, 856, 7, 30, 2, 2, 856, 115, 3, 2, 2, 2, 857, 859, 5, 20, 11, 2, 858, 860, 5, 136, 69, 2, 859, 858, 3, 2, 2, 2, 859, 860, 3, 2, 2, 2, 860, 862, 3, 2, 2, 2, 861, 863, 5, 286, 144, 2, 862, 861, 3, 2, 2, 2, 862, 863, 3, 2, 2, 2, 863, 873, 3, 2, 2, 2, 864, 865, 7, 138, 2, 2, 865, 867, 5, 20, 11, 2, 866, 868, 5, 136, 69, 2, 867, 866, 3, 2, 2, 2, 867, 868, 3, 2, 2, 2, 868, 870, 3, 2, 2, 2, 869, 871, 5, 286, 144, 2, 870, 869, 3, 2, 2, 2, 870, 871, 3, 2, 2, 2, 871, 873, 3, 2, 2, 2, 872, 857, 3, 2, 2, 2, 872, 864, 3, 2, 2, 2, 873, 117, 3, 2, 2, 2, 874, 877, 7, 29, 2, 2, 875, 878, 5, 72, 37, 2, 876, 878, 5, 118, 60, 2, 877, 875, 3, 2, 2, 2, 877, 876, 3, 2, 2, 2, 878, 879, 3, 2, 2, 2, 879, 880, 7, 30, 2, 2, 880, 119, 3, 2, 2, 2, 881, 882, 7, 139, 2, 2, 882, 883, 7, 29, 2, 2, 883, 884, 5, 152, 77, 2, 884, 885, 7, 26, 2, 2, 885, 886, 5, 314, 158, 2, 886, 887, 5, 122, 62, 2, 887, 889, 7, 30, 2, 2, 888, 890, 5, 136, 69, 2, 889, 888, 3, 2, 2, 2, 889, 890, 3, 2, 2, 2, 890, 121, 3, 2, 2, 2, 891, 892, 7, 140, 2, 2, 892, 893, 7, 29, 2, 2, 893, 898, 5, 124, 63, 2, 894, 895, 7, 26, 2, 2, 895, 897, 5, 124, 63, 2, 896, 894, 3, 2, 2, 2, 897, 900, 3, 2, 2, 2, 898, 896, 3, 2, 2, 2, 898, 899, 3, 2, 2, 2, 899, 901, 3, 2, 2, 2, 900, 898, 3, 2, 2, 2, 901, 902, 7, 30, 2, 2, 902, 123, 3, 2, 2, 2, 903, 904, 5, 292, 147, 2, 904, 905, 7, 117, 2, 2, 905, 906, 7, 141, 2, 2, 906, 926, 3, 2, 2, 2, 907, 908, 5, 292, 147, 2, 908, 910, 5, 250, 126, 2, 909, 911, 5, 272, 137, 2, 910, 909, 3, 2, 2, 2, 910, 911, 3, 2, 2, 2, 911, 913, 3, 2, 2, 2, 912, 914, 7, 142, 2, 2, 913, 912, 3, 2, 2, 2, 913, 914, 3, 2, 2, 2, 914, 915, 3, 2, 2, 2, 915, 916, 7, 143, 2, 2, 916, 918, 5, 314, 158, 2, 917, 919, 5, 126, 64, 2, 918, 917, 3, 2, 2, 2, 918, 919, 3, 2, 2, 2, 919, 926, 3, 2, 2, 2, 920, 921, 7, 144, 2, 2, 921, 922, 7, 143, 2, 2, 922, 923, 5, 314, 158, 2, 923, 924, 5, 122, 62, 2, 924, 926, 3, 2, 2, 2, 925, 903, 3, 2, 2, 2, 925, 907, 3, 2, 2, 2, 925, 920, 3, 2, 2, 2, 926, 125, 3, 2, 2, 2, 927, 929, 5, 128, 65, 2, 928, 930, 5, 130, 66, 2, 929, 928, 3, 2, 2, 2, 929, 930, 3, 2, 2, 2, 930, 936, 3, 2, 2, 2, 931, 933, 5, 130, 66, 2, 932, 934, 5, 128, 65, 2, 933, 932, 3, 2, 2, 2, 933, 934, 3, 2, 2, 2, 934, 936, 3, 2, 2, 2, 935, 927, 3, 2, 2, 2, 935, 931, 3, 2, 2, 2, 936, 127, 3, 2, 2, 2, 937, 938, 5, 132, 67, 2, 938, 939, 7, 129, 2, 2, 939, 940, 7, 145, 2, 2, 940, 129, 3, 2, 2, 2, 941, 942, 5, 132, 67, 2, 942, 943, 7, 129, 2, 2, 943, 944, 7, 146, 2, 2, 944, 131, 3, 2, 2, 2, 945, 950, 7, 146, 2, 2, 946, 950, 7, 147, 2, 2, 947, 948, 7, 63, 2, 2, 948, 950, 5, 314, 158, 2, 949, 945, 3, 2, 2, 2, 949, 946, 3, 2, 2, 2, 949, 947, 3, 2, 2, 2, 950, 133, 3, 2, 2, 2, 951, 952, 9, 10, 2, 2, 952, 135, 3, 2, 2, 2, 953, 955, 9, 11, 2, 2, 954, 953, 3, 2, 2, 2, 954, 955, 3, 2, 2, 2, 955, 956, 3, 2, 2, 2, 956, 957, 5, 292, 147, 2, 957, 137, 3, 2, 2, 2, 958, 963, 5, 140, 71, 2, 959, 960, 7, 26, 2, 2, 960, 962, 5, 140, 71, 2, 961, 959, 3, 2, 2, 2, 962, 965, 3, 2, 2, 2, 963, 961, 3, 2, 2, 2, 963, 964, 3, 2, 2, 2, 964, 139, 3, 2, 2, 2, 965, 963, 3, 2, 2, 2, 966, 967, 5, 142, 72, 2, 967, 969, 5, 144, 73, 2, 968, 970, 5, 146, 74, 2, 969, 968, 3, 2, 2, 2, 969, 970, 3, 2, 2, 2, 970, 971, 3, 2, 2, 2, 971, 972, 7, 29, 2, 2, 972, 973, 5, 148, 75, 2, 973, 974, 7, 30, 2, 2, 974, 987, 3, 2, 2, 2, 975, 976, 7, 148, 2, 2, 976, 978, 5, 144, 73, 2, 977, 979, 5, 146, 74, 2, 978, 977, 3, 2, 2, 2, 978, 979, 3, 2, 2, 2, 979, 980, 3, 2, 2, 2, 980, 982, 7, 29, 2, 2, 981, 983, 5, 148, 75, 2, 982, 981, 3, 2, 2, 2, 982, 983, 3, 2, 2, 2, 983, 984, 3, 2, 2, 2, 984, 985, 7, 30, 2, 2, 985, 987, 3, 2, 2, 2, 986, 966, 3, 2, 2, 2, 986, 975, 3, 2, 2, 2, 987, 141, 3, 2, 2, 2, 988, 989, 9, 12, 2, 2, 989, 143, 3, 2, 2, 2, 990, 991, 9, 13, 2, 2, 991, 145, 3, 2, 2, 2, 992, 998, 7, 117, 2, 2, 993, 999, 7, 133, 2, 2, 994, 995, 7, 107, 2, 2, 995, 999, 7, 85, 2, 2, 996, 997, 7, 98, 2, 2, 997, 999, 7, 85, 2, 2, 998, 993, 3, 2, 2, 2, 998, 994, 3, 2, 2, 2, 998, 996, 3, 2, 2, 2, 999, 147, 3, 2, 2, 2, 1000, 1005, 5, 150, 76, 2, 1001, 1002, 7, 26, 2, 2, 1002, 1004, 5, 150, 76, 2, 1003, 1001, 3, 2, 2, 2, 1004, 1007, 3, 2, 2, 2, 1005, 1003, 3, 2, 2, 2, 1005, 1006, 3, 2, 2, 2, 1006, 149, 3, 2, 2, 2, 1007, 1005, 3, 2, 2, 2, 1008, 1011, 5, 292, 147, 2, 1009, 1011, 7, 153, 2, 2, 1010, 1008, 3, 2, 2, 2, 1010, 1009, 3, 2, 2, 2, 1011, 151, 3, 2, 2, 2, 1012, 1013, 8, 77, 1, 2, 1013, 1019, 5, 154, 78, 2, 1014, 1016, 7, 154, 2, 2, 1015, 1017, 5, 230, 116, 2, 1016, 1015, 3, 2, 2, 2, 1016, 1017, 3, 2, 2, 2, 1017, 1018, 3, 2, 2, 2, 1018, 1020, 9, 14, 2, 2, 1019, 1014, 3, 2, 2, 2, 1019, 1020, 3, 2, 2, 2, 1020, 1024, 3, 2, 2, 2, 1021, 1022, 7, 158, 2, 2, 1022, 1024, 5, 152, 77, 6, 1023, 1012, 3, 2, 2, 2, 1023, 1021, 3, 2, 2, 2, 1024, 1036, 3, 2, 2, 2, 1025, 1026, 12, 5, 2, 2, 1026, 1027, 9, 15, 2, 2, 1027, 1035, 5, 152, 77, 6, 1028, 1029, 12, 4, 2, 2, 1029, 1030, 7, 159, 2, 2, 1030, 1035, 5, 152, 77, 5, 1031, 1032, 12, 3, 2, 2, 1032, 1033, 9, 16, 2, 2, 1033, 1035, 5, 152, 77, 4, 1034, 1025, 3, 2, 2, 2, 1034, 1028, 3, 2, 2, 2, 1034, 1031, 3, 2, 2, 2, 1035, 1038, 3, 2, 2, 2, 1036, 1034, 3, 2, 2, 2, 1036, 1037, 3, 2, 2, 2, 1037, 153, 3, 2, 2, 2, 1038, 1036, 3, 2, 2, 2, 1039, 1040, 8, 78, 1, 2, 1040, 1041, 5, 158, 80, 2, 1041, 1059, 3, 2, 2, 2, 1042, 1043, 12, 5, 2, 2, 1043, 1045, 7, 154, 2, 2, 1044, 1046, 5, 230, 116, 2, 1045, 1044, 3, 2, 2, 2, 1045, 1046, 3, 2, 2, 2, 1046, 1047, 3, 2, 2, 2, 1047, 1058, 7, 147, 2, 2, 1048, 1049, 12, 4, 2, 2, 1049, 1050, 5, 156, 79, 2, 1050, 1051, 5, 158, 80, 2, 1051, 1058, 3, 2, 2, 2, 1052, 1053, 12, 3, 2, 2, 1053, 1054, 5, 156, 79, 2, 1054, 1055, 9, 17, 2, 2, 1055, 1056, 5, 20, 11, 2, 1056, 1058, 3, 2, 2, 2, 1057, 1042, 3, 2, 2, 2, 1057, 1048, 3, 2, 2, 2, 1057, 1052, 3, 2, 2, 2, 1058, 1061, 3, 2, 2, 2, 1059, 1057, 3, 2, 2, 2, 1059, 1060, 3, 2, 2, 2, 1060, 155, 3, 2, 2, 2, 1061, 1059, 3, 2, 2, 2, 1062, 1063, 9, 18, 2, 2, 1063, 157, 3, 2, 2, 2, 1064, 1077, 5, 162, 82, 2, 1065, 1067, 5, 230, 116, 2, 1066, 1065, 3, 2, 2, 2, 1066, 1067, 3, 2, 2, 2, 1067, 1068, 3, 2, 2, 2, 1068, 1078, 5, 160, 81, 2, 1069, 1071, 7, 162, 2, 2, 1070, 1072, 7, 118, 2, 2, 1071, 1070, 3, 2, 2, 2, 1071, 1072, 3, 2, 2, 2, 1072, 1073, 3, 2, 2, 2, 1073, 1078, 5, 242, 122, 2, 1074, 1075, 7, 163, 2, 2, 1075, 1076, 7, 164, 2, 2, 1076, 1078, 5, 162, 82, 2, 1077, 1066, 3, 2, 2, 2, 1077, 1069, 3, 2, 2, 2, 1077, 1074, 3, 2, 2, 2, 1077, 1078, 3, 2, 2, 2, 1078, 159, 3, 2, 2, 2, 1079, 1085, 7, 120, 2, 2, 1080, 1086, 5, 20, 11, 2, 1081, 1082, 7, 29, 2, 2, 1082, 1083, 5, 226, 114, 2, 1083, 1084, 7, 30, 2, 2, 1084, 1086, 3, 2, 2, 2, 1085, 1080, 3, 2, 2, 2, 1085, 1081, 3, 2, 2, 2, 1086, 1101, 3, 2, 2, 2, 1087, 1088, 7, 94, 2, 2, 1088, 1089, 5, 162, 82, 2, 1089, 1090, 7, 95, 2, 2, 1090, 1091, 5, 158, 80, 2, 1091, 1101, 3, 2, 2, 2, 1092, 1093, 7, 164, 2, 2, 1093, 1096, 5, 164, 83, 2, 1094, 1095, 7, 165, 2, 2, 1095, 1097, 5, 164, 83, 2, 1096, 1094, 3, 2, 2, 2, 1096, 1097, 3, 2, 2, 2, 1097, 1101, 3, 2, 2, 2, 1098, 1099, 7, 166, 2, 2, 1099, 1101, 5, 162, 82, 2, 1100, 1079, 3, 2, 2, 2, 1100, 1087, 3, 2, 2, 2, 1100, 1092, 3, 2, 2, 2, 1100, 1098, 3, 2, 2, 2, 1101, 161, 3, 2, 2, 2, 1102, 1103, 8, 82, 1, 2, 1103, 1104, 5, 164, 83, 2, 1104, 1131, 3, 2, 2, 2, 1105, 1106, 12, 9, 2, 2, 1106, 1107, 7, 22, 2, 2, 1107, 1130, 5, 162, 82, 10, 1108, 1109, 12, 8, 2, 2, 1109, 1110, 9, 19, 2, 2, 1110, 1130, 5, 162, 82, 9, 1111, 1112, 12, 7, 2, 2, 1112, 1113, 9, 20, 2, 2, 1113, 1130, 5, 162, 82, 8, 1114, 1115, 12, 5, 2, 2, 1115, 1116, 9, 21, 2, 2, 1116, 1130, 5, 162, 82, 6, 1117, 1118, 12, 4, 2, 2, 1118, 1119, 7, 21, 2, 2, 1119, 1130, 5, 162, 82, 5, 1120, 1121, 12, 3, 2, 2, 1121, 1122, 7, 24, 2, 2, 1122, 1130, 5, 162, 82, 4, 1123, 1124, 12, 6, 2, 2, 1124, 1125, 9, 20, 2, 2, 1125, 1126, 7, 91, 2, 2, 1126, 1127, 5, 152, 77, 2, 1127, 1128, 5, 234, 118, 2, 1128, 1130, 3, 2, 2, 2, 1129, 1105, 3, 2, 2, 2, 1129, 1108, 3, 2, 2, 2, 1129, 1111, 3, 2, 2, 2, 1129, 1114, 3, 2, 2, 2, 1129, 1117, 3, 2, 2, 2, 1129, 1120, 3, 2, 2, 2, 1129, 1123, 3, 2, 2, 2, 1130, 1133, 3, 2, 2, 2, 1131, 1129, 3, 2, 2, 2, 1131, 1132, 3, 2, 2, 2, 1132, 163, 3, 2, 2, 2, 1133, 1131, 3, 2, 2, 2, 1134, 1135, 8, 83, 1, 2, 1135, 1139, 5, 214, 108, 2, 1136, 1137, 5, 336, 169, 2, 1137, 1138, 5, 152, 77, 2, 1138, 1140, 3, 2, 2, 2, 1139, 1136, 3, 2, 2, 2, 1139, 1140, 3, 2, 2, 2, 1140, 1242, 3, 2, 2, 2, 1141, 1143, 5, 298, 150, 2, 1142, 1144, 5, 166, 84, 2, 1143, 1142, 3, 2, 2, 2, 1143, 1144, 3, 2, 2, 2, 1144, 1242, 3, 2, 2, 2, 1145, 1242, 5, 190, 96, 2, 1146, 1242, 5, 208, 105, 2, 1147, 1242, 5, 310, 156, 2, 1148, 1242, 7, 42, 2, 2, 1149, 1242, 5, 168, 85, 2, 1150, 1242, 5, 170, 86, 2, 1151, 1242, 5, 172, 87, 2, 1152, 1153, 9, 22, 2, 2, 1153, 1242, 5, 164, 83, 17, 1154, 1155, 5, 232, 117, 2, 1155, 1156, 5, 164, 83, 16, 1156, 1242, 3, 2, 2, 2, 1157, 1159, 7, 93, 2, 2, 1158, 1157, 3, 2, 2, 2, 1158, 1159, 3, 2, 2, 2, 1159, 1160, 3, 2, 2, 2, 1160, 1161, 7, 29, 2, 2, 1161, 1162, 5, 226, 114, 2, 1162, 1163, 7, 30, 2, 2, 1163, 1242, 3, 2, 2, 2, 1164, 1166, 7, 142, 2, 2, 1165, 1164, 3, 2, 2, 2, 1165, 1166, 3, 2, 2, 2, 1166, 1167, 3, 2, 2, 2, 1167, 1242, 5, 20, 11, 2, 1168, 1169, 7, 31, 2, 2, 1169, 1170, 5, 292, 147, 2, 1170, 1171, 5, 152, 77, 2, 1171, 1172, 7, 32, 2, 2, 1172, 1242, 3, 2, 2, 2, 1173, 1174, 7, 169, 2, 2, 1174, 1175, 5, 184, 93, 2, 1175, 1176, 7, 170, 2, 2, 1176, 1177, 7, 29, 2, 2, 1177, 1179, 5, 162, 82, 2, 1178, 1180, 5, 188, 95, 2, 1179, 1178, 3, 2, 2, 2, 1179, 1180, 3, 2, 2, 2, 1180, 1181, 3, 2, 2, 2, 1181, 1182, 7, 30, 2, 2, 1182, 1242, 3, 2, 2, 2, 1183, 1184, 7, 171, 2, 2, 1184, 1242, 5, 164, 83, 11, 1185, 1186, 7, 172, 2, 2, 1186, 1187, 7, 29, 2, 2, 1187, 1188, 5, 152, 77, 2, 1188, 1189, 7, 83, 2, 2, 1189, 1191, 5, 250, 126, 2, 1190, 1192, 7, 173, 2, 2, 1191, 1190, 3, 2, 2, 2, 1191, 1192, 3, 2, 2, 2, 1192, 1193, 3, 2, 2, 2, 1193, 1194, 7, 30, 2, 2, 1194, 1242, 3, 2, 2, 2, 1195, 1197, 7, 174, 2, 2, 1196, 1198, 5, 152, 77, 2, 1197, 1196, 3, 2, 2, 2, 1197, 1198, 3, 2, 2, 2, 1198, 1202, 3, 2, 2, 2, 1199, 1200, 5, 220, 111, 2, 1200, 1201, 5, 222, 112, 2, 1201, 1203, 3, 2, 2, 2, 1202, 1199, 3, 2, 2, 2, 1203, 1204, 3, 2, 2, 2, 1204, 1202, 3, 2, 2, 2, 1204, 1205, 3, 2, 2, 2, 1205, 1207, 3, 2, 2, 2, 1206, 1208, 5, 224, 113, 2, 1207, 1206, 3, 2, 2, 2, 1207, 1208, 3, 2, 2, 2, 1208, 1209, 3, 2, 2, 2, 1209, 1210, 7, 175, 2, 2, 1210, 1242, 3, 2, 2, 2, 1211, 1212, 7, 176, 2, 2, 1212, 1213, 7, 29, 2, 2, 1213, 1214, 5, 152, 77, 2, 1214, 1215, 7, 26, 2, 2, 1215, 1216, 5, 250, 126, 2, 1216, 1217, 7, 30, 2, 2, 1217, 1242, 3, 2, 2, 2, 1218, 1219, 7, 176, 2, 2, 1219, 1220, 7, 29, 2, 2, 1220, 1221, 5, 152, 77, 2, 1221, 1222, 7, 130, 2, 2, 1222, 1223, 5, 268, 135, 2, 1223, 1224, 7, 30, 2, 2, 1224, 1242, 3, 2, 2, 2, 1225, 1226, 7, 63, 2, 2, 1226, 1227, 7, 29, 2, 2, 1227, 1228, 5, 298, 150, 2, 1228, 1229, 7, 30, 2, 2, 1229, 1242, 3, 2, 2, 2, 1230, 1231, 7, 112, 2, 2, 1231, 1232, 7, 29, 2, 2, 1232, 1233, 5, 298, 150, 2, 1233, 1234, 7, 30, 2, 2, 1234, 1242, 3, 2, 2, 2, 1235, 1236, 7, 91, 2, 2, 1236, 1237, 5, 152, 77, 2, 1237, 1238, 5, 234, 118, 2, 1238, 1239, 7, 11, 2, 2, 1239, 1240, 5, 152, 77, 2, 1240, 1242, 3, 2, 2, 2, 1241, 1134, 3, 2, 2, 2, 1241, 1141, 3, 2, 2, 2, 1241, 1145, 3, 2, 2, 2, 1241, 1146, 3, 2, 2, 2, 1241, 1147, 3, 2, 2, 2, 1241, 1148, 3, 2, 2, 2, 1241, 1149, 3, 2, 2, 2, 1241, 1150, 3, 2, 2, 2, 1241, 1151, 3, 2, 2, 2, 1241, 1152, 3, 2, 2, 2, 1241, 1154, 3, 2, 2, 2, 1241, 1158, 3, 2, 2, 2, 1241, 1165, 3, 2, 2, 2, 1241, 1168, 3, 2, 2, 2, 1241, 1173, 3, 2, 2, 2, 1241, 1183, 3, 2, 2, 2, 1241, 1185, 3, 2, 2, 2, 1241, 1195, 3, 2, 2, 2, 1241, 1211, 3, 2, 2, 2, 1241, 1218, 3, 2, 2, 2, 1241, 1225, 3, 2, 2, 2, 1241, 1230, 3, 2, 2, 2, 1241, 1235, 3, 2, 2, 2, 1242, 1254, 3, 2, 2, 2, 1243, 1244, 12, 18, 2, 2, 1244, 1245, 7, 23, 2, 2, 1245, 1253, 5, 164, 83, 19, 1246, 1247, 12, 24, 2, 2, 1247, 1248, 7, 177, 2, 2, 1248, 1253, 5, 332, 167, 2, 1249, 1250, 12, 9, 2, 2, 1250, 1251, 7, 43, 2, 2, 1251, 1253, 5, 250, 126, 2, 1252, 1243, 3, 2, 2, 2, 1252, 1246, 3, 2, 2, 2, 1252, 1249, 3, 2, 2, 2, 1253, 1256, 3, 2, 2, 2, 1254, 1252, 3, 2, 2, 2, 1254, 1255, 3, 2, 2, 2, 1255, 165, 3, 2, 2, 2, 1256, 1254, 3, 2, 2, 2, 1257, 1260, 9, 23, 2, 2, 1258, 1261, 5, 314, 158, 2, 1259, 1261, 5, 152, 77, 2, 1260, 1258, 3, 2, 2, 2, 1260, 1259, 3, 2, 2, 2, 1261, 167, 3, 2, 2, 2, 1262, 1263, 7, 178, 2, 2, 1263, 1265, 7, 29, 2, 2, 1264, 1266, 7, 67, 2, 2, 1265, 1264, 3, 2, 2, 2, 1265, 1266, 3, 2, 2, 2, 1266, 1267, 3, 2, 2, 2, 1267, 1268, 5, 182, 92, 2, 1268, 1270, 7, 30, 2, 2, 1269, 1271, 5, 174, 88, 2, 1270, 1269, 3, 2, 2, 2, 1270, 1271, 3, 2, 2, 2, 1271, 1381, 3, 2, 2, 2, 1272, 1273, 9, 24, 2, 2, 1273, 1274, 7, 29, 2, 2, 1274, 1275, 5, 182, 92, 2, 1275, 1277, 7, 30, 2, 2, 1276, 1278, 5, 174, 88, 2, 1277, 1276, 3, 2, 2, 2, 1277, 1278, 3, 2, 2, 2, 1278, 1381, 3, 2, 2, 2, 1279, 1381, 5, 180, 91, 2, 1280, 1281, 7, 182, 2, 2, 1281, 1283, 7, 29, 2, 2, 1282, 1284, 7, 66, 2, 2, 1283, 1282, 3, 2, 2, 2, 1283, 1284, 3, 2, 2, 2, 1284, 1285, 3, 2, 2, 2, 1285, 1286, 7, 13, 2, 2, 1286, 1288, 7, 30, 2, 2, 1287, 1289, 5, 174, 88, 2, 1288, 1287, 3, 2, 2, 2, 1288, 1289, 3, 2, 2, 2, 1289, 1381, 3, 2, 2, 2, 1290, 1291, 7, 182, 2, 2, 1291, 1299, 7, 29, 2, 2, 1292, 1294, 7, 66, 2, 2, 1293, 1292, 3, 2, 2, 2, 1293, 1294, 3, 2, 2, 2, 1294, 1295, 3, 2, 2, 2, 1295, 1300, 7, 13, 2, 2, 1296, 1300, 5, 182, 92, 2, 1297, 1298, 7, 67, 2, 2, 1298, 1300, 5, 226, 114, 2, 1299, 1293, 3, 2, 2, 2, 1299, 1296, 3, 2, 2, 2, 1299, 1297, 3, 2, 2, 2, 1300, 1301, 3, 2, 2, 2, 1301, 1303, 7, 30, 2, 2, 1302, 1304, 5, 174, 88, 2, 1303, 1302, 3, 2, 2, 2, 1303, 1304, 3, 2, 2, 2, 1304, 1381, 3, 2, 2, 2, 1305, 1306, 7, 183, 2, 2, 1306, 1308, 7, 29, 2, 2, 1307, 1309, 7, 67, 2, 2, 1308, 1307, 3, 2, 2, 2, 1308, 1309, 3, 2, 2, 2, 1309, 1310, 3, 2, 2, 2, 1310, 1311, 5, 182, 92, 2, 1311, 1313, 7, 30, 2, 2, 1312, 1314, 5, 174, 88, 2, 1313, 1312, 3, 2, 2, 2, 1313, 1314, 3, 2, 2, 2, 1314, 1381, 3, 2, 2, 2, 1315, 1316, 7, 184, 2, 2, 1316, 1318, 7, 29, 2, 2, 1317, 1319, 7, 67, 2, 2, 1318, 1317, 3, 2, 2, 2, 1318, 1319, 3, 2, 2, 2, 1319, 1320, 3, 2, 2, 2, 1320, 1321, 5, 182, 92, 2, 1321, 1323, 7, 30, 2, 2, 1322, 1324, 5, 174, 88, 2, 1323, 1322, 3, 2, 2, 2, 1323, 1324, 3, 2, 2, 2, 1324, 1381, 3, 2, 2, 2, 1325, 1326, 7, 185, 2, 2, 1326, 1327, 7, 29, 2, 2, 1327, 1328, 5, 182, 92, 2, 1328, 1330, 7, 30, 2, 2, 1329, 1331, 5, 174, 88, 2, 1330, 1329, 3, 2, 2, 2, 1330, 1331, 3, 2, 2, 2, 1331, 1381, 3, 2, 2, 2, 1332, 1333, 7, 186, 2, 2, 1333, 1334, 7, 29, 2, 2, 1334, 1335, 5, 182, 92, 2, 1335, 1337, 7, 30, 2, 2, 1336, 1338, 5, 174, 88, 2, 1337, 1336, 3, 2, 2, 2, 1337, 1338, 3, 2, 2, 2, 1338, 1381, 3, 2, 2, 2, 1339, 1340, 7, 187, 2, 2, 1340, 1341, 7, 29, 2, 2, 1341, 1342, 5, 182, 92, 2, 1342, 1344, 7, 30, 2, 2, 1343, 1345, 5, 174, 88, 2, 1344, 1343, 3, 2, 2, 2, 1344, 1345, 3, 2, 2, 2, 1345, 1381, 3, 2, 2, 2, 1346, 1347, 7, 188, 2, 2, 1347, 1348, 7, 29, 2, 2, 1348, 1349, 5, 182, 92, 2, 1349, 1351, 7, 30, 2, 2, 1350, 1352, 5, 174, 88, 2, 1351, 1350, 3, 2, 2, 2, 1351, 1352, 3, 2, 2, 2, 1352, 1381, 3, 2, 2, 2, 1353, 1354, 7, 189, 2, 2, 1354, 1356, 7, 29, 2, 2, 1355, 1357, 7, 67, 2, 2, 1356, 1355, 3, 2, 2, 2, 1356, 1357, 3, 2, 2, 2, 1357, 1358, 3, 2, 2, 2, 1358, 1359, 5, 182, 92, 2, 1359, 1361, 7, 30, 2, 2, 1360, 1362, 5, 174, 88, 2, 1361, 1360, 3, 2, 2, 2, 1361, 1362, 3, 2, 2, 2, 1362, 1381, 3, 2, 2, 2, 1363, 1364, 7, 190, 2, 2, 1364, 1366, 7, 29, 2, 2, 1365, 1367, 7, 67, 2, 2, 1366, 1365, 3, 2, 2, 2, 1366, 1367, 3, 2, 2, 2, 1367, 1368, 3, 2, 2, 2, 1368, 1370, 5, 226, 114, 2, 1369, 1371, 5, 66, 34, 2, 1370, 1369, 3, 2, 2, 2, 1370, 1371, 3, 2, 2, 2, 1371, 1374, 3, 2, 2, 2, 1372, 1373, 7, 191, 2, 2, 1373, 1375, 5, 316, 159, 2, 1374, 1372, 3, 2, 2, 2, 1374, 1375, 3, 2, 2, 2, 1375, 1376, 3, 2, 2, 2, 1376, 1378, 7, 30, 2, 2, 1377, 1379, 5, 174, 88, 2, 1378, 1377, 3, 2, 2, 2, 1378, 1379, 3, 2, 2, 2, 1379, 1381, 3, 2, 2, 2, 1380, 1262, 3, 2, 2, 2, 1380, 1272, 3, 2, 2, 2, 1380, 1279, 3, 2, 2, 2, 1380, 1280, 3, 2, 2, 2, 1380, 1290, 3, 2, 2, 2, 1380, 1305, 3, 2, 2, 2, 1380, 1315, 3, 2, 2, 2, 1380, 1325, 3, 2, 2, 2, 1380, 1332, 3, 2, 2, 2, 1380, 1339, 3, 2, 2, 2, 1380, 1346, 3, 2, 2, 2, 1380, 1353, 3, 2, 2, 2, 1380, 1363, 3, 2, 2, 2, 1381, 169, 3, 2, 2, 2, 1382, 1383, 7, 192, 2, 2, 1383, 1384, 7, 29, 2, 2, 1384, 1385, 5, 226, 114, 2, 1385, 1386, 7, 30, 2, 2, 1386, 171, 3, 2, 2, 2, 1387, 1388, 9, 25, 2, 2, 1388, 1389, 5, 334, 168, 2, 1389, 1390, 5, 174, 88, 2, 1390, 1430, 3, 2, 2, 2, 1391, 1392, 7, 198, 2, 2, 1392, 1393, 5, 242, 122, 2, 1393, 1394, 5, 174, 88, 2, 1394, 1430, 3, 2, 2, 2, 1395, 1396, 9, 26, 2, 2, 1396, 1397, 7, 29, 2, 2, 1397, 1399, 5, 152, 77, 2, 1398, 1400, 5, 176, 89, 2, 1399, 1398, 3, 2, 2, 2, 1399, 1400, 3, 2, 2, 2, 1400, 1401, 3, 2, 2, 2, 1401, 1403, 7, 30, 2, 2, 1402, 1404, 5, 178, 90, 2, 1403, 1402, 3, 2, 2, 2, 1403, 1404, 3, 2, 2, 2, 1404, 1405, 3, 2, 2, 2, 1405, 1406, 5, 174, 88, 2, 1406, 1430, 3, 2, 2, 2, 1407, 1408, 9, 27, 2, 2, 1408, 1410, 5, 240, 121, 2, 1409, 1411, 5, 178, 90, 2, 1410, 1409, 3, 2, 2, 2, 1410, 1411, 3, 2, 2, 2, 1411, 1412, 3, 2, 2, 2, 1412, 1413, 5, 174, 88, 2, 1413, 1430, 3, 2, 2, 2, 1414, 1415, 7, 203, 2, 2, 1415, 1416, 7, 29, 2, 2, 1416, 1417, 5, 152, 77, 2, 1417, 1418, 7, 26, 2, 2, 1418, 1419, 5, 164, 83, 2, 1419, 1422, 7, 30, 2, 2, 1420, 1421, 7, 110, 2, 2, 1421, 1423, 9, 28, 2, 2, 1422, 1420, 3, 2, 2, 2, 1422, 1423, 3, 2, 2, 2, 1423, 1425, 3, 2, 2, 2, 1424, 1426, 5, 178, 90, 2, 1425, 1424, 3, 2, 2, 2, 1425, 1426, 3, 2, 2, 2, 1426, 1427, 3, 2, 2, 2, 1427, 1428, 5, 174, 88, 2, 1428, 1430, 3, 2, 2, 2, 1429, 1387, 3, 2, 2, 2, 1429, 1391, 3, 2, 2, 2, 1429, 1395, 3, 2, 2, 2, 1429, 1407, 3, 2, 2, 2, 1429, 1414, 3, 2, 2, 2, 1430, 173, 3, 2, 2, 2, 1431, 1434, 7, 206, 2, 2, 1432, 1435, 5, 292, 147, 2, 1433, 1435, 5, 40, 21, 2, 1434, 1432, 3, 2, 2, 2, 1434, 1433, 3, 2, 2, 2, 1435, 175, 3, 2, 2, 2, 1436, 1439, 7, 26, 2, 2, 1437, 1440, 5, 306, 154, 2, 1438, 1440, 7, 42, 2, 2, 1439, 1437, 3, 2, 2, 2, 1439, 1438, 3, 2, 2, 2, 1440, 1443, 3, 2, 2, 2, 1441, 1442, 7, 26, 2, 2, 1442, 1444, 5, 152, 77, 2, 1443, 1441, 3, 2, 2, 2, 1443, 1444, 3, 2, 2, 2, 1444, 177, 3, 2, 2, 2, 1445, 1446, 9, 29, 2, 2, 1446, 1447, 7, 208, 2, 2, 1447, 179, 3, 2, 2, 2, 1448, 1449, 7, 209, 2, 2, 1449, 1450, 7, 29, 2, 2, 1450, 1451, 5, 182, 92, 2, 1451, 1453, 7, 30, 2, 2, 1452, 1454, 5, 174, 88, 2, 1453, 1452, 3, 2, 2, 2, 1453, 1454, 3, 2, 2, 2, 1454, 1465, 3, 2, 2, 2, 1455, 1456, 7, 210, 2, 2, 1456, 1457, 7, 29, 2, 2, 1457, 1458, 5, 182, 92, 2, 1458, 1459, 7, 26, 2, 2, 1459, 1460, 5, 182, 92, 2, 1460, 1462, 7, 30, 2, 2, 1461, 1463, 5, 174, 88, 2, 1462, 1461, 3, 2, 2, 2, 1462, 1463, 3, 2, 2, 2, 1463, 1465, 3, 2, 2, 2, 1464, 1448, 3, 2, 2, 2, 1464, 1455, 3, 2, 2, 2, 1465, 181, 3, 2, 2, 2, 1466, 1468, 7, 66, 2, 2, 1467, 1466, 3, 2, 2, 2, 1467, 1468, 3, 2, 2, 2, 1468, 1469, 3, 2, 2, 2, 1469, 1470, 5, 152, 77, 2, 1470, 183, 3, 2, 2, 2, 1471, 1477, 5, 186, 94, 2, 1472, 1473, 7, 29, 2, 2, 1473, 1474, 5, 186, 94, 2, 1474, 1475, 7, 30, 2, 2, 1475, 1477, 3, 2, 2, 2, 1476, 1471, 3, 2, 2, 2, 1476, 1472, 3, 2, 2, 2, 1477, 185, 3, 2, 2, 2, 1478, 1483, 5, 298, 150, 2, 1479, 1480, 7, 26, 2, 2, 1480, 1482, 5, 298, 150, 2, 1481, 1479, 3, 2, 2, 2, 1482, 1485, 3, 2, 2, 2, 1483, 1481, 3, 2, 2, 2, 1483, 1484, 3, 2, 2, 2, 1484, 187, 3, 2, 2, 2, 1485, 1483, 3, 2, 2, 2, 1486, 1487, 7, 120, 2, 2, 1487, 1488, 7, 211, 2, 2, 1488, 1502, 7, 122, 2, 2, 1489, 1490, 7, 120, 2, 2, 1490, 1491, 7, 131, 2, 2, 1491, 1492, 7, 212, 2, 2, 1492, 1496, 7, 122, 2, 2, 1493, 1494, 7, 102, 2, 2, 1494, 1495, 7, 213, 2, 2, 1495, 1497, 7, 214, 2, 2, 1496, 1493, 3, 2, 2, 2, 1496, 1497, 3, 2, 2, 2, 1497, 1502, 3, 2, 2, 2, 1498, 1499, 7, 102, 2, 2, 1499, 1500, 7, 213, 2, 2, 1500, 1502, 7, 214, 2, 2, 1501, 1486, 3, 2, 2, 2, 1501, 1489, 3, 2, 2, 2, 1501, 1498, 3, 2, 2, 2, 1502, 189, 3, 2, 2, 2, 1503, 1504, 7, 215, 2, 2, 1504, 1505, 7, 29, 2, 2, 1505, 1508, 5, 226, 114, 2, 1506, 1507, 7, 130, 2, 2, 1507, 1509, 5, 268, 135, 2, 1508, 1506, 3, 2, 2, 2, 1508, 1509, 3, 2, 2, 2, 1509, 1510, 3, 2, 2, 2, 1510, 1511, 7, 30, 2, 2, 1511, 1774, 3, 2, 2, 2, 1512, 1514, 7, 216, 2, 2, 1513, 1515, 5, 334, 168, 2, 1514, 1513, 3, 2, 2, 2, 1514, 1515, 3, 2, 2, 2, 1515, 1774, 3, 2, 2, 2, 1516, 1517, 7, 217, 2, 2, 1517, 1774, 5, 240, 121, 2, 1518, 1519, 7, 58, 2, 2, 1519, 1774, 5, 240, 121, 2, 1520, 1521, 7, 57, 2, 2, 1521, 1774, 5, 240, 121, 2, 1522, 1523, 7, 218, 2, 2, 1523, 1524, 7, 29, 2, 2, 1524, 1525, 5, 152, 77, 2, 1525, 1526, 7, 26, 2, 2, 1526, 1527, 5, 152, 77, 2, 1527, 1528, 7, 26, 2, 2, 1528, 1529, 5, 152, 77, 2, 1529, 1530, 7, 26, 2, 2, 1530, 1531, 5, 152, 77, 2, 1531, 1532, 7, 30, 2, 2, 1532, 1774, 3, 2, 2, 2, 1533, 1534, 7, 91, 2, 2, 1534, 1535, 7, 29, 2, 2, 1535, 1538, 5, 152, 77, 2, 1536, 1537, 7, 26, 2, 2, 1537, 1539, 5, 152, 77, 2, 1538, 1536, 3, 2, 2, 2, 1539, 1540, 3, 2, 2, 2, 1540, 1538, 3, 2, 2, 2, 1540, 1541, 3, 2, 2, 2, 1541, 1542, 3, 2, 2, 2, 1542, 1543, 7, 30, 2, 2, 1543, 1774, 3, 2, 2, 2, 1544, 1545, 7, 134, 2, 2, 1545, 1546, 7, 29, 2, 2, 1546, 1547, 5, 152, 77, 2, 1547, 1548, 7, 26, 2, 2, 1548, 1549, 5, 152, 77, 2, 1549, 1550, 7, 30, 2, 2, 1550, 1774, 3, 2, 2, 2, 1551, 1552, 7, 56, 2, 2, 1552, 1774, 5, 240, 121, 2, 1553, 1554, 7, 60, 2, 2, 1554, 1774, 5, 240, 121, 2, 1555, 1556, 7, 135, 2, 2, 1556, 1557, 7, 29, 2, 2, 1557, 1558, 5, 152, 77, 2, 1558, 1559, 7, 26, 2, 2, 1559, 1560, 5, 152, 77, 2, 1560, 1561, 7, 30, 2, 2, 1561, 1774, 3, 2, 2, 2, 1562, 1563, 7, 55, 2, 2, 1563, 1774, 5, 240, 121, 2, 1564, 1565, 7, 219, 2, 2, 1565, 1774, 5, 240, 121, 2, 1566, 1567, 7, 220, 2, 2, 1567, 1568, 7, 29, 2, 2, 1568, 1571, 5, 152, 77, 2, 1569, 1570, 7, 26, 2, 2, 1570, 1572, 5, 152, 77, 2, 1571, 1569, 3, 2, 2, 2, 1571, 1572, 3, 2, 2, 2, 1572, 1573, 3, 2, 2, 2, 1573, 1574, 7, 30, 2, 2, 1574, 1774, 3, 2, 2, 2, 1575, 1774, 5, 204, 103, 2, 1576, 1577, 7, 224, 2, 2, 1577, 1774, 5, 334, 168, 2, 1578, 1579, 7, 112, 2, 2, 1579, 1774, 5, 240, 121, 2, 1580, 1581, 7, 62, 2, 2, 1581, 1774, 5, 240, 121, 2, 1582, 1583, 9, 30, 2, 2, 1583, 1584, 7, 29, 2, 2, 1584, 1585, 5, 152, 77, 2, 1585, 1591, 7, 26, 2, 2, 1586, 1592, 5, 152, 77, 2, 1587, 1588, 7, 91, 2, 2, 1588, 1589, 5, 152, 77, 2, 1589, 1590, 5, 234, 118, 2, 1590, 1592, 3, 2, 2, 2, 1591, 1586, 3, 2, 2, 2, 1591, 1587, 3, 2, 2, 2, 1592, 1593, 3, 2, 2, 2, 1593, 1594, 7, 30, 2, 2, 1594, 1774, 3, 2, 2, 2, 1595, 1597, 7, 227, 2, 2, 1596, 1598, 5, 334, 168, 2, 1597, 1596, 3, 2, 2, 2, 1597, 1598, 3, 2, 2, 2, 1598, 1774, 3, 2, 2, 2, 1599, 1601, 7, 228, 2, 2, 1600, 1602, 5, 194, 98, 2, 1601, 1600, 3, 2, 2, 2, 1601, 1602, 3, 2, 2, 2, 1602, 1774, 3, 2, 2, 2, 1603, 1604, 9, 31, 2, 2, 1604, 1605, 7, 29, 2, 2, 1605, 1606, 5, 152, 77, 2, 1606, 1607, 7, 26, 2, 2, 1607, 1608, 7, 91, 2, 2, 1608, 1609, 5, 152, 77, 2, 1609, 1610, 5, 234, 118, 2, 1610, 1611, 7, 30, 2, 2, 1611, 1774, 3, 2, 2, 2, 1612, 1613, 7, 231, 2, 2, 1613, 1614, 7, 29, 2, 2, 1614, 1615, 5, 234, 118, 2, 1615, 1616, 7, 110, 2, 2, 1616, 1617, 5, 152, 77, 2, 1617, 1618, 7, 30, 2, 2, 1618, 1774, 3, 2, 2, 2, 1619, 1620, 7, 232, 2, 2, 1620, 1621, 7, 29, 2, 2, 1621, 1622, 5, 202, 102, 2, 1622, 1623, 7, 26, 2, 2, 1623, 1624, 5, 152, 77, 2, 1624, 1625, 7, 30, 2, 2, 1625, 1774, 3, 2, 2, 2, 1626, 1628, 7, 233, 2, 2, 1627, 1629, 5, 194, 98, 2, 1628, 1627, 3, 2, 2, 2, 1628, 1629, 3, 2, 2, 2, 1629, 1774, 3, 2, 2, 2, 1630, 1631, 7, 234, 2, 2, 1631, 1632, 7, 29, 2, 2, 1632, 1633, 5, 162, 82, 2, 1633, 1634, 7, 120, 2, 2, 1634, 1635, 5, 152, 77, 2, 1635, 1636, 7, 30, 2, 2, 1636, 1774, 3, 2, 2, 2, 1637, 1774, 5, 206, 104, 2, 1638, 1640, 7, 235, 2, 2, 1639, 1641, 5, 194, 98, 2, 1640, 1639, 3, 2, 2, 2, 1640, 1641, 3, 2, 2, 2, 1641, 1774, 3, 2, 2, 2, 1642, 1643, 9, 32, 2, 2, 1643, 1644, 7, 29, 2, 2, 1644, 1645, 5, 236, 119, 2, 1645, 1646, 7, 26, 2, 2, 1646, 1647, 5, 152, 77, 2, 1647, 1648, 7, 26, 2, 2, 1648, 1649, 5, 152, 77, 2, 1649, 1650, 7, 30, 2, 2, 1650, 1774, 3, 2, 2, 2, 1651, 1653, 7, 238, 2, 2, 1652, 1654, 5, 334, 168, 2, 1653, 1652, 3, 2, 2, 2, 1653, 1654, 3, 2, 2, 2, 1654, 1774, 3, 2, 2, 2, 1655, 1657, 7, 239, 2, 2, 1656, 1658, 5, 194, 98, 2, 1657, 1656, 3, 2, 2, 2, 1657, 1658, 3, 2, 2, 2, 1658, 1774, 3, 2, 2, 2, 1659, 1661, 7, 240, 2, 2, 1660, 1662, 5, 194, 98, 2, 1661, 1660, 3, 2, 2, 2, 1661, 1662, 3, 2, 2, 2, 1662, 1774, 3, 2, 2, 2, 1663, 1664, 7, 241, 2, 2, 1664, 1774, 5, 240, 121, 2, 1665, 1666, 7, 242, 2, 2, 1666, 1774, 5, 240, 121, 2, 1667, 1668, 7, 243, 2, 2, 1668, 1774, 5, 238, 120, 2, 1669, 1670, 7, 244, 2, 2, 1670, 1774, 5, 240, 121, 2, 1671, 1672, 7, 245, 2, 2, 1672, 1774, 5, 334, 168, 2, 1673, 1674, 7, 246, 2, 2, 1674, 1675, 7, 29, 2, 2, 1675, 1676, 5, 152, 77, 2, 1676, 1677, 7, 26, 2, 2, 1677, 1678, 5, 152, 77, 2, 1678, 1679, 7, 26, 2, 2, 1679, 1680, 5, 152, 77, 2, 1680, 1681, 7, 30, 2, 2, 1681, 1774, 3, 2, 2, 2, 1682, 1683, 7, 247, 2, 2, 1683, 1684, 7, 29, 2, 2, 1684, 1685, 5, 152, 77, 2, 1685, 1686, 7, 26, 2, 2, 1686, 1689, 5, 152, 77, 2, 1687, 1688, 7, 26, 2, 2, 1688, 1690, 5, 152, 77, 2, 1689, 1687, 3, 2, 2, 2, 1689, 1690, 3, 2, 2, 2, 1690, 1691, 3, 2, 2, 2, 1691, 1692, 7, 30, 2, 2, 1692, 1774, 3, 2, 2, 2, 1693, 1694, 7, 248, 2, 2, 1694, 1774, 5, 240, 121, 2, 1695, 1696, 7, 168, 2, 2, 1696, 1697, 7, 29, 2, 2, 1697, 1698, 5, 152, 77, 2, 1698, 1699, 7, 26, 2, 2, 1699, 1700, 5, 152, 77, 2, 1700, 1701, 7, 30, 2, 2, 1701, 1774, 3, 2, 2, 2, 1702, 1703, 7, 249, 2, 2, 1703, 1704, 7, 29, 2, 2, 1704, 1705, 5, 318, 160, 2, 1705, 1706, 7, 30, 2, 2, 1706, 1774, 3, 2, 2, 2, 1707, 1708, 7, 250, 2, 2, 1708, 1774, 5, 240, 121, 2, 1709, 1710, 7, 61, 2, 2, 1710, 1774, 5, 240, 121, 2, 1711, 1712, 7, 251, 2, 2, 1712, 1713, 7, 29, 2, 2, 1713, 1714, 5, 152, 77, 2, 1714, 1715, 7, 26, 2, 2, 1715, 1716, 5, 152, 77, 2, 1716, 1717, 7, 30, 2, 2, 1717, 1774, 3, 2, 2, 2, 1718, 1719, 7, 252, 2, 2, 1719, 1720, 7, 29, 2, 2, 1720, 1721, 5, 152, 77, 2, 1721, 1722, 7, 26, 2, 2, 1722, 1723, 5, 152, 77, 2, 1723, 1724, 7, 26, 2, 2, 1724, 1725, 5, 152, 77, 2, 1725, 1726, 7, 30, 2, 2, 1726, 1774, 3, 2, 2, 2, 1727, 1728, 7, 253, 2, 2, 1728, 1774, 5, 240, 121, 2, 1729, 1730, 7, 254, 2, 2, 1730, 1774, 5, 334, 168, 2, 1731, 1732, 7, 255, 2, 2, 1732, 1733, 7, 29, 2, 2, 1733, 1734, 5, 152, 77, 2, 1734, 1735, 7, 26, 2, 2, 1735, 1736, 5, 152, 77, 2, 1736, 1737, 7, 30, 2, 2, 1737, 1774, 3, 2, 2, 2, 1738, 1739, 7, 59, 2, 2, 1739, 1740, 7, 29, 2, 2, 1740, 1743, 5, 152, 77, 2, 1741, 1742, 7, 26, 2, 2, 1742, 1744, 5, 152, 77, 2, 1743, 1741, 3, 2, 2, 2, 1743, 1744, 3, 2, 2, 2, 1744, 1745, 3, 2, 2, 2, 1745, 1746, 7, 30, 2, 2, 1746, 1774, 3, 2, 2, 2, 1747, 1748, 7, 256, 2, 2, 1748, 1749, 7, 29, 2, 2, 1749, 1768, 5, 152, 77, 2, 1750, 1751, 7, 83, 2, 2, 1751, 1752, 7, 215, 2, 2, 1752, 1754, 5, 264, 133, 2, 1753, 1750, 3, 2, 2, 2, 1753, 1754, 3, 2, 2, 2, 1754, 1756, 3, 2, 2, 2, 1755, 1757, 5, 198, 100, 2, 1756, 1755, 3, 2, 2, 2, 1756, 1757, 3, 2, 2, 2, 1757, 1769, 3, 2, 2, 2, 1758, 1759, 7, 83, 2, 2, 1759, 1760, 7, 171, 2, 2, 1760, 1769, 5, 264, 133, 2, 1761, 1762, 7, 26, 2, 2, 1762, 1763, 5, 302, 152, 2, 1763, 1764, 7, 26, 2, 2, 1764, 1765, 5, 302, 152, 2, 1765, 1766, 7, 26, 2, 2, 1766, 1767, 5, 302, 152, 2, 1767, 1769, 3, 2, 2, 2, 1768, 1753, 3, 2, 2, 2, 1768, 1758, 3, 2, 2, 2, 1768, 1761, 3, 2, 2, 2, 1769, 1770, 3, 2, 2, 2, 1770, 1771, 7, 30, 2, 2, 1771, 1774, 3, 2, 2, 2, 1772, 1774, 5, 192, 97, 2, 1773, 1503, 3, 2, 2, 2, 1773, 1512, 3, 2, 2, 2, 1773, 1516, 3, 2, 2, 2, 1773, 1518, 3, 2, 2, 2, 1773, 1520, 3, 2, 2, 2, 1773, 1522, 3, 2, 2, 2, 1773, 1533, 3, 2, 2, 2, 1773, 1544, 3, 2, 2, 2, 1773, 1551, 3, 2, 2, 2, 1773, 1553, 3, 2, 2, 2, 1773, 1555, 3, 2, 2, 2, 1773, 1562, 3, 2, 2, 2, 1773, 1564, 3, 2, 2, 2, 1773, 1566, 3, 2, 2, 2, 1773, 1575, 3, 2, 2, 2, 1773, 1576, 3, 2, 2, 2, 1773, 1578, 3, 2, 2, 2, 1773, 1580, 3, 2, 2, 2, 1773, 1582, 3, 2, 2, 2, 1773, 1595, 3, 2, 2, 2, 1773, 1599, 3, 2, 2, 2, 1773, 1603, 3, 2, 2, 2, 1773, 1612, 3, 2, 2, 2, 1773, 1619, 3, 2, 2, 2, 1773, 1626, 3, 2, 2, 2, 1773, 1630, 3, 2, 2, 2, 1773, 1637, 3, 2, 2, 2, 1773, 1638, 3, 2, 2, 2, 1773, 1642, 3, 2, 2, 2, 1773, 1651, 3, 2, 2, 2, 1773, 1655, 3, 2, 2, 2, 1773, 1659, 3, 2, 2, 2, 1773, 1663, 3, 2, 2, 2, 1773, 1665, 3, 2, 2, 2, 1773, 1667, 3, 2, 2, 2, 1773, 1669, 3, 2, 2, 2, 1773, 1671, 3, 2, 2, 2, 1773, 1673, 3, 2, 2, 2, 1773, 1682, 3, 2, 2, 2, 1773, 1693, 3, 2, 2, 2, 1773, 1695, 3, 2, 2, 2, 1773, 1702, 3, 2, 2, 2, 1773, 1707, 3, 2, 2, 2, 1773, 1709, 3, 2, 2, 2, 1773, 1711, 3, 2, 2, 2, 1773, 1718, 3, 2, 2, 2, 1773, 1727, 3, 2, 2, 2, 1773, 1729, 3, 2, 2, 2, 1773, 1731, 3, 2, 2, 2, 1773, 1738, 3, 2, 2, 2, 1773, 1747, 3, 2, 2, 2, 1773, 1772, 3, 2, 2, 2, 1774, 191, 3, 2, 2, 2, 1775, 1776, 7, 257, 2, 2, 1776, 1777, 7, 29, 2, 2, 1777, 1778, 5, 152, 77, 2, 1778, 1779, 7, 26, 2, 2, 1779, 1780, 5, 152, 77, 2, 1780, 1781, 7, 30, 2, 2, 1781, 1806, 3, 2, 2, 2, 1782, 1783, 7, 258, 2, 2, 1783, 1785, 7, 29, 2, 2, 1784, 1786, 5, 226, 114, 2, 1785, 1784, 3, 2, 2, 2, 1785, 1786, 3, 2, 2, 2, 1786, 1787, 3, 2, 2, 2, 1787, 1806, 7, 30, 2, 2, 1788, 1789, 7, 259, 2, 2, 1789, 1806, 5, 238, 120, 2, 1790, 1791, 7, 260, 2, 2, 1791, 1806, 5, 238, 120, 2, 1792, 1793, 7, 261, 2, 2, 1793, 1806, 5, 238, 120, 2, 1794, 1795, 7, 262, 2, 2, 1795, 1806, 5, 238, 120, 2, 1796, 1797, 7, 263, 2, 2, 1797, 1798, 7, 29, 2, 2, 1798, 1799, 5, 152, 77, 2, 1799, 1800, 7, 26, 2, 2, 1800, 1801, 5, 152, 77, 2, 1801, 1802, 7, 30, 2, 2, 1802, 1806, 3, 2, 2, 2, 1803, 1804, 7, 264, 2, 2, 1804, 1806, 5, 238, 120, 2, 1805, 1775, 3, 2, 2, 2, 1805, 1782, 3, 2, 2, 2, 1805, 1788, 3, 2, 2, 2, 1805, 1790, 3, 2, 2, 2, 1805, 1792, 3, 2, 2, 2, 1805, 1794, 3, 2, 2, 2, 1805, 1796, 3, 2, 2, 2, 1805, 1803, 3, 2, 2, 2, 1806, 193, 3, 2, 2, 2, 1807, 1809, 7, 29, 2, 2, 1808, 1810, 5, 196, 99, 2, 1809, 1808, 3, 2, 2, 2, 1809, 1810, 3, 2, 2, 2, 1810, 1811, 3, 2, 2, 2, 1811, 1812, 7, 30, 2, 2, 1812, 195, 3, 2, 2, 2, 1813, 1814, 7, 46, 2, 2, 1814, 197, 3, 2, 2, 2, 1815, 1828, 7, 265, 2, 2, 1816, 1817, 5, 304, 153, 2, 1817, 1818, 7, 12, 2, 2, 1818, 1819, 5, 304, 153, 2, 1819, 1829, 3, 2, 2, 2, 1820, 1825, 5, 200, 101, 2, 1821, 1822, 7, 26, 2, 2, 1822, 1824, 5, 200, 101, 2, 1823, 1821, 3, 2, 2, 2, 1824, 1827, 3, 2, 2, 2, 1825, 1823, 3, 2, 2, 2, 1825, 1826, 3, 2, 2, 2, 1826, 1829, 3, 2, 2, 2, 1827, 1825, 3, 2, 2, 2, 1828, 1816, 3, 2, 2, 2, 1828, 1820, 3, 2, 2, 2, 1829, 199, 3, 2, 2, 2, 1830, 1836, 5, 304, 153, 2, 1831, 1833, 9, 6, 2, 2, 1832, 1834, 7, 253, 2, 2, 1833, 1832, 3, 2, 2, 2, 1833, 1834, 3, 2, 2, 2, 1834, 1837, 3, 2, 2, 2, 1835, 1837, 7, 253, 2, 2, 1836, 1831, 3, 2, 2, 2, 1836, 1835, 3, 2, 2, 2, 1836, 1837, 3, 2, 2, 2, 1837, 201, 3, 2, 2, 2, 1838, 1839, 9, 33, 2, 2, 1839, 203, 3, 2, 2, 2, 1840, 1841, 7, 267, 2, 2, 1841, 1865, 7, 29, 2, 2, 1842, 1845, 5, 152, 77, 2, 1843, 1844, 7, 110, 2, 2, 1844, 1846, 5, 152, 77, 2, 1845, 1843, 3, 2, 2, 2, 1845, 1846, 3, 2, 2, 2, 1846, 1866, 3, 2, 2, 2, 1847, 1849, 7, 268, 2, 2, 1848, 1850, 5, 152, 77, 2, 1849, 1848, 3, 2, 2, 2, 1849, 1850, 3, 2, 2, 2, 1850, 1851, 3, 2, 2, 2, 1851, 1852, 7, 110, 2, 2, 1852, 1866, 5, 152, 77, 2, 1853, 1855, 7, 269, 2, 2, 1854, 1856, 5, 152, 77, 2, 1855, 1854, 3, 2, 2, 2, 1855, 1856, 3, 2, 2, 2, 1856, 1857, 3, 2, 2, 2, 1857, 1858, 7, 110, 2, 2, 1858, 1866, 5, 152, 77, 2, 1859, 1861, 7, 270, 2, 2, 1860, 1862, 5, 152, 77, 2, 1861, 1860, 3, 2, 2, 2, 1861, 1862, 3, 2, 2, 2, 1862, 1863, 3, 2, 2, 2, 1863, 1864, 7, 110, 2, 2, 1864, 1866, 5, 152, 77, 2, 1865, 1842, 3, 2, 2, 2, 1865, 1847, 3, 2, 2, 2, 1865, 1853, 3, 2, 2, 2, 1865, 1859, 3, 2, 2, 2, 1866, 1867, 3, 2, 2, 2, 1867, 1868, 7, 30, 2, 2, 1868, 205, 3, 2, 2, 2, 1869, 1870, 7, 272, 2, 2, 1870, 1871, 7, 29, 2, 2, 1871, 1884, 5, 152, 77, 2, 1872, 1873, 7, 26, 2, 2, 1873, 1876, 5, 152, 77, 2, 1874, 1875, 7, 26, 2, 2, 1875, 1877, 5, 152, 77, 2, 1876, 1874, 3, 2, 2, 2, 1876, 1877, 3, 2, 2, 2, 1877, 1885, 3, 2, 2, 2, 1878, 1879, 7, 110, 2, 2, 1879, 1882, 5, 152, 77, 2, 1880, 1881, 7, 117, 2, 2, 1881, 1883, 5, 152, 77, 2, 1882, 1880, 3, 2, 2, 2, 1882, 1883, 3, 2, 2, 2, 1883, 1885, 3, 2, 2, 2, 1884, 1872, 3, 2, 2, 2, 1884, 1878, 3, 2, 2, 2, 1885, 1886, 3, 2, 2, 2, 1886, 1887, 7, 30, 2, 2, 1887, 207, 3, 2, 2, 2, 1888, 1889, 5, 290, 146, 2, 1889, 1891, 7, 29, 2, 2, 1890, 1892, 5, 210, 106, 2, 1891, 1890, 3, 2, 2, 2, 1891, 1892, 3, 2, 2, 2, 1892, 1893, 3, 2, 2, 2, 1893, 1894, 7, 30, 2, 2, 1894, 1903, 3, 2, 2, 2, 1895, 1896, 5, 298, 150, 2, 1896, 1898, 7, 29, 2, 2, 1897, 1899, 5, 226, 114, 2, 1898, 1897, 3, 2, 2, 2, 1898, 1899, 3, 2, 2, 2, 1899, 1900, 3, 2, 2, 2, 1900, 1901, 7, 30, 2, 2, 1901, 1903, 3, 2, 2, 2, 1902, 1888, 3, 2, 2, 2, 1902, 1895, 3, 2, 2, 2, 1903, 209, 3, 2, 2, 2, 1904, 1909, 5, 212, 107, 2, 1905, 1906, 7, 26, 2, 2, 1906, 1908, 5, 212, 107, 2, 1907, 1905, 3, 2, 2, 2, 1908, 1911, 3, 2, 2, 2, 1909, 1907, 3, 2, 2, 2, 1909, 1910, 3, 2, 2, 2, 1910, 211, 3, 2, 2, 2, 1911, 1909, 3, 2, 2, 2, 1912, 1914, 5, 152, 77, 2, 1913, 1915, 5, 94, 48, 2, 1914, 1913, 3, 2, 2, 2, 1914, 1915, 3, 2, 2, 2, 1915, 213, 3, 2, 2, 2, 1916, 1919, 5, 216, 109, 2, 1917, 1919, 5, 218, 110, 2, 1918, 1916, 3, 2, 2, 2, 1918, 1917, 3, 2, 2, 2, 1919, 215, 3, 2, 2, 2, 1920, 1921, 7, 38, 2, 2, 1921, 1924, 5, 332, 167, 2, 1922, 1924, 7, 39, 2, 2, 1923, 1920, 3, 2, 2, 2, 1923, 1922, 3, 2, 2, 2, 1924, 217, 3, 2, 2, 2, 1925, 1927, 7, 40, 2, 2, 1926, 1928, 5, 338, 170, 2, 1927, 1926, 3, 2, 2, 2, 1927, 1928, 3, 2, 2, 2, 1928, 1929, 3, 2, 2, 2, 1929, 1931, 5, 332, 167, 2, 1930, 1932, 5, 300, 151, 2, 1931, 1930, 3, 2, 2, 2, 1931, 1932, 3, 2, 2, 2, 1932, 219, 3, 2, 2, 2, 1933, 1934, 7, 273, 2, 2, 1934, 1935, 5, 152, 77, 2, 1935, 221, 3, 2, 2, 2, 1936, 1937, 7, 274, 2, 2, 1937, 1938, 5, 152, 77, 2, 1938, 223, 3, 2, 2, 2, 1939, 1940, 7, 275, 2, 2, 1940, 1941, 5, 152, 77, 2, 1941, 225, 3, 2, 2, 2, 1942, 1947, 5, 152, 77, 2, 1943, 1944, 7, 26, 2, 2, 1944, 1946, 5, 152, 77, 2, 1945, 1943, 3, 2, 2, 2, 1946, 1949, 3, 2, 2, 2, 1947, 1945, 3, 2, 2, 2, 1947, 1948, 3, 2, 2, 2, 1948, 227, 3, 2, 2, 2, 1949, 1947, 3, 2, 2, 2, 1950, 1951, 7, 215, 2, 2, 1951, 1954, 7, 283, 2, 2, 1952, 1954, 7, 242, 2, 2, 1953, 1950, 3, 2, 2, 2, 1953, 1952, 3, 2, 2, 2, 1954, 229, 3, 2, 2, 2, 1955, 1956, 7, 158, 2, 2, 1956, 231, 3, 2, 2, 2, 1957, 1958, 7, 16, 2, 2, 1958, 233, 3, 2, 2, 2, 1959, 1962, 5, 236, 119, 2, 1960, 1962, 9, 34, 2, 2, 1961, 1959, 3, 2, 2, 2, 1961, 1960, 3, 2, 2, 2, 1962, 235, 3, 2, 2, 2, 1963, 1964, 9, 35, 2, 2, 1964, 237, 3, 2, 2, 2, 1965, 1966, 7, 29, 2, 2, 1966, 1967, 5, 226, 114, 2, 1967, 1968, 7, 30, 2, 2, 1968, 239, 3, 2, 2, 2, 1969, 1970, 7, 29, 2, 2, 1970, 1971, 5, 152, 77, 2, 1971, 1972, 7, 30, 2, 2, 1972, 241, 3, 2, 2, 2, 1973, 1974, 7, 29, 2, 2, 1974, 1975, 5, 164, 83, 2, 1975, 1976, 7, 30, 2, 2, 1976, 243, 3, 2, 2, 2, 1977, 1982, 5, 246, 124, 2, 1978, 1979, 7, 26, 2, 2, 1979, 1981, 5, 246, 124, 2, 1980, 1978, 3, 2, 2, 2, 1981, 1984, 3, 2, 2, 2, 1982, 1980, 3, 2, 2, 2, 1982, 1983, 3, 2, 2, 2, 1983, 245, 3, 2, 2, 2, 1984, 1982, 3, 2, 2, 2, 1985, 1987, 5, 152, 77, 2, 1986, 1988, 5, 68, 35, 2, 1987, 1986, 3, 2, 2, 2, 1987, 1988, 3, 2, 2, 2, 1988, 247, 3, 2, 2, 2, 1989, 1990, 9, 36, 2, 2, 1990, 249, 3, 2, 2, 2, 1991, 1993, 9, 37, 2, 2, 1992, 1994, 5, 254, 128, 2, 1993, 1992, 3, 2, 2, 2, 1993, 1994, 3, 2, 2, 2, 1994, 1996, 3, 2, 2, 2, 1995, 1997, 5, 256, 129, 2, 1996, 1995, 3, 2, 2, 2, 1996, 1997, 3, 2, 2, 2, 1997, 2187, 3, 2, 2, 2, 1998, 2004, 7, 298, 2, 2, 1999, 2001, 7, 299, 2, 2, 2000, 2002, 7, 300, 2, 2, 2001, 2000, 3, 2, 2, 2, 2001, 2002, 3, 2, 2, 2, 2002, 2004, 3, 2, 2, 2, 2003, 1998, 3, 2, 2, 2, 2003, 1999, 3, 2, 2, 2, 2004, 2006, 3, 2, 2, 2, 2005, 2007, 5, 330, 166, 2, 2006, 2005, 3, 2, 2, 2, 2006, 2007, 3, 2, 2, 2, 2007, 2009, 3, 2, 2, 2, 2008, 2010, 5, 256, 129, 2, 2009, 2008, 3, 2, 2, 2, 2009, 2010, 3, 2, 2, 2, 2010, 2187, 3, 2, 2, 2, 2011, 2013, 9, 38, 2, 2, 2012, 2014, 5, 328, 165, 2, 2013, 2012, 3, 2, 2, 2, 2013, 2014, 3, 2, 2, 2, 2014, 2016, 3, 2, 2, 2, 2015, 2017, 5, 256, 129, 2, 2016, 2015, 3, 2, 2, 2, 2016, 2017, 3, 2, 2, 2, 2017, 2187, 3, 2, 2, 2, 2018, 2020, 7, 304, 2, 2, 2019, 2021, 5, 254, 128, 2, 2020, 2019, 3, 2, 2, 2, 2020, 2021, 3, 2, 2, 2, 2021, 2187, 3, 2, 2, 2, 2022, 2187, 9, 39, 2, 2, 2023, 2025, 5, 252, 127, 2, 2024, 2026, 5, 254, 128, 2, 2025, 2024, 3, 2, 2, 2, 2025, 2026, 3, 2, 2, 2, 2026, 2028, 3, 2, 2, 2, 2027, 2029, 7, 171, 2, 2, 2028, 2027, 3, 2, 2, 2, 2028, 2029, 3, 2, 2, 2, 2029, 2187, 3, 2, 2, 2, 2030, 2032, 7, 171, 2, 2, 2031, 2033, 5, 254, 128, 2, 2032, 2031, 3, 2, 2, 2, 2032, 2033, 3, 2, 2, 2, 2033, 2187, 3, 2, 2, 2, 2034, 2041, 7, 307, 2, 2, 2035, 2041, 7, 215, 2, 2, 2036, 2037, 7, 215, 2, 2, 2037, 2041, 7, 306, 2, 2, 2038, 2041, 7, 271, 2, 2, 2039, 2041, 7, 318, 2, 2, 2040, 2034, 3, 2, 2, 2, 2040, 2035, 3, 2, 2, 2, 2040, 2036, 3, 2, 2, 2, 2040, 2038, 3, 2, 2, 2, 2040, 2039, 3, 2, 2, 2, 2041, 2042, 3, 2, 2, 2, 2042, 2044, 5, 254, 128, 2, 2043, 2045, 5, 258, 130, 2, 2044, 2043, 3, 2, 2, 2, 2044, 2045, 3, 2, 2, 2, 2045, 2187, 3, 2, 2, 2, 2046, 2047, 7, 308, 2, 2, 2047, 2057, 7, 307, 2, 2, 2048, 2057, 7, 309, 2, 2, 2049, 2050, 7, 310, 2, 2, 2050, 2057, 7, 307, 2, 2, 2051, 2052, 7, 308, 2, 2, 2052, 2053, 7, 215, 2, 2, 2053, 2057, 7, 306, 2, 2, 2054, 2055, 7, 310, 2, 2, 2055, 2057, 7, 306, 2, 2, 2056, 2046, 3, 2, 2, 2, 2056, 2048, 3, 2, 2, 2, 2056, 2049, 3, 2, 2, 2, 2056, 2051, 3, 2, 2, 2, 2056, 2054, 3, 2, 2, 2, 2057, 2058, 3, 2, 2, 2, 2058, 2060, 5, 254, 128, 2, 2059, 2061, 7, 171, 2, 2, 2060, 2059, 3, 2, 2, 2, 2060, 2061, 3, 2, 2, 2, 2061, 2187, 3, 2, 2, 2, 2062, 2063, 7, 311, 2, 2, 2063, 2187, 5, 254, 128, 2, 2064, 2066, 7, 62, 2, 2, 2065, 2067, 5, 254, 128, 2, 2066, 2065, 3, 2, 2, 2, 2066, 2067, 3, 2, 2, 2, 2067, 2069, 3, 2, 2, 2, 2068, 2070, 5, 256, 129, 2, 2069, 2068, 3, 2, 2, 2, 2069, 2070, 3, 2, 2, 2, 2070, 2187, 3, 2, 2, 2, 2071, 2187, 7, 217, 2, 2, 2072, 2074, 7, 219, 2, 2, 2073, 2075, 5, 266, 134, 2, 2074, 2073, 3, 2, 2, 2, 2074, 2075, 3, 2, 2, 2, 2075, 2187, 3, 2, 2, 2, 2076, 2078, 7, 220, 2, 2, 2077, 2079, 5, 266, 134, 2, 2078, 2077, 3, 2, 2, 2, 2078, 2079, 3, 2, 2, 2, 2079, 2187, 3, 2, 2, 2, 2080, 2081, 7, 220, 2, 2, 2081, 2082, 7, 102, 2, 2, 2082, 2083, 7, 334, 2, 2, 2083, 2084, 7, 219, 2, 2, 2084, 2086, 7, 223, 2, 2, 2085, 2087, 5, 266, 134, 2, 2086, 2085, 3, 2, 2, 2, 2086, 2087, 3, 2, 2, 2, 2087, 2187, 3, 2, 2, 2, 2088, 2089, 7, 220, 2, 2, 2089, 2090, 7, 103, 2, 2, 2090, 2091, 7, 334, 2, 2, 2091, 2092, 7, 219, 2, 2, 2092, 2094, 7, 223, 2, 2, 2093, 2095, 5, 266, 134, 2, 2094, 2093, 3, 2, 2, 2, 2094, 2095, 3, 2, 2, 2, 2095, 2187, 3, 2, 2, 2, 2096, 2097, 7, 220, 2, 2, 2097, 2098, 7, 102, 2, 2, 2098, 2099, 7, 219, 2, 2, 2099, 2101, 7, 223, 2, 2, 2100, 2102, 5, 266, 134, 2, 2101, 2100, 3, 2, 2, 2, 2101, 2102, 3, 2, 2, 2, 2102, 2187, 3, 2, 2, 2, 2103, 2105, 7, 266, 2, 2, 2104, 2106, 5, 266, 134, 2, 2105, 2104, 3, 2, 2, 2, 2105, 2106, 3, 2, 2, 2, 2106, 2187, 3, 2, 2, 2, 2107, 2187, 7, 312, 2, 2, 2108, 2110, 7, 313, 2, 2, 2109, 2111, 5, 254, 128, 2, 2110, 2109, 3, 2, 2, 2, 2110, 2111, 3, 2, 2, 2, 2111, 2187, 3, 2, 2, 2, 2112, 2187, 9, 40, 2, 2, 2113, 2114, 7, 316, 2, 2, 2114, 2187, 7, 311, 2, 2, 2115, 2119, 7, 316, 2, 2, 2116, 2117, 7, 215, 2, 2, 2117, 2120, 7, 306, 2, 2, 2118, 2120, 7, 307, 2, 2, 2119, 2116, 3, 2, 2, 2, 2119, 2118, 3, 2, 2, 2, 2119, 2120, 3, 2, 2, 2, 2120, 2122, 3, 2, 2, 2, 2121, 2123, 5, 258, 130, 2, 2122, 2121, 3, 2, 2, 2, 2122, 2123, 3, 2, 2, 2, 2123, 2187, 3, 2, 2, 2, 2124, 2126, 7, 317, 2, 2, 2125, 2127, 5, 258, 130, 2, 2126, 2125, 3, 2, 2, 2, 2126, 2127, 3, 2, 2, 2, 2127, 2187, 3, 2, 2, 2, 2128, 2130, 7, 318, 2, 2, 2129, 2131, 5, 254, 128, 2, 2130, 2129, 3, 2, 2, 2, 2130, 2131, 3, 2, 2, 2, 2131, 2133, 3, 2, 2, 2, 2132, 2134, 5, 258, 130, 2, 2133, 2132, 3, 2, 2, 2, 2133, 2134, 3, 2, 2, 2, 2134, 2187, 3, 2, 2, 2, 2135, 2137, 7, 319, 2, 2, 2136, 2138, 5, 258, 130, 2, 2137, 2136, 3, 2, 2, 2, 2137, 2138, 3, 2, 2, 2, 2138, 2187, 3, 2, 2, 2, 2139, 2141, 7, 320, 2, 2, 2140, 2142, 5, 258, 130, 2, 2141, 2140, 3, 2, 2, 2, 2141, 2142, 3, 2, 2, 2, 2142, 2187, 3, 2, 2, 2, 2143, 2144, 7, 321, 2, 2, 2144, 2146, 5, 312, 157, 2, 2145, 2147, 5, 258, 130, 2, 2146, 2145, 3, 2, 2, 2, 2146, 2147, 3, 2, 2, 2, 2147, 2187, 3, 2, 2, 2, 2148, 2149, 7, 283, 2, 2, 2149, 2151, 5, 312, 157, 2, 2150, 2152, 5, 258, 130, 2, 2151, 2150, 3, 2, 2, 2, 2151, 2152, 3, 2, 2, 2, 2152, 2187, 3, 2, 2, 2, 2153, 2187, 7, 322, 2, 2, 2154, 2187, 7, 279, 2, 2, 2155, 2187, 9, 41, 2, 2, 2156, 2187, 7, 338, 2, 2, 2157, 2187, 7, 336, 2, 2, 2158, 2187, 7, 337, 2, 2, 2159, 2187, 7, 173, 2, 2, 2160, 2169, 7, 321, 2, 2, 2161, 2166, 5, 152, 77, 2, 2162, 2163, 7, 26, 2, 2, 2163, 2165, 5, 152, 77, 2, 2164, 2162, 3, 2, 2, 2, 2165, 2168, 3, 2, 2, 2, 2166, 2164, 3, 2, 2, 2, 2166, 2167, 3, 2, 2, 2, 2167, 2170, 3, 2, 2, 2, 2168, 2166, 3, 2, 2, 2, 2169, 2161, 3, 2, 2, 2, 2169, 2170, 3, 2, 2, 2, 2170, 2187, 3, 2, 2, 2, 2171, 2180, 7, 283, 2, 2, 2172, 2177, 5, 152, 77, 2, 2173, 2174, 7, 26, 2, 2, 2174, 2176, 5, 152, 77, 2, 2175, 2173, 3, 2, 2, 2, 2176, 2179, 3, 2, 2, 2, 2177, 2175, 3, 2, 2, 2, 2177, 2178, 3, 2, 2, 2, 2178, 2181, 3, 2, 2, 2, 2179, 2177, 3, 2, 2, 2, 2180, 2172, 3, 2, 2, 2, 2180, 2181, 3, 2, 2, 2, 2181, 2187, 3, 2, 2, 2, 2182, 2184, 5, 292, 147, 2, 2183, 2185, 5, 330, 166, 2, 2184, 2183, 3, 2, 2, 2, 2184, 2185, 3, 2, 2, 2, 2185, 2187, 3, 2, 2, 2, 2186, 1991, 3, 2, 2, 2, 2186, 2003, 3, 2, 2, 2, 2186, 2011, 3, 2, 2, 2, 2186, 2018, 3, 2, 2, 2, 2186, 2022, 3, 2, 2, 2, 2186, 2023, 3, 2, 2, 2, 2186, 2030, 3, 2, 2, 2, 2186, 2040, 3, 2, 2, 2, 2186, 2056, 3, 2, 2, 2, 2186, 2062, 3, 2, 2, 2, 2186, 2064, 3, 2, 2, 2, 2186, 2071, 3, 2, 2, 2, 2186, 2072, 3, 2, 2, 2, 2186, 2076, 3, 2, 2, 2, 2186, 2080, 3, 2, 2, 2, 2186, 2088, 3, 2, 2, 2, 2186, 2096, 3, 2, 2, 2, 2186, 2103, 3, 2, 2, 2, 2186, 2107, 3, 2, 2, 2, 2186, 2108, 3, 2, 2, 2, 2186, 2112, 3, 2, 2, 2, 2186, 2113, 3, 2, 2, 2, 2186, 2115, 3, 2, 2, 2, 2186, 2124, 3, 2, 2, 2, 2186, 2128, 3, 2, 2, 2, 2186, 2135, 3, 2, 2, 2, 2186, 2139, 3, 2, 2, 2, 2186, 2143, 3, 2, 2, 2, 2186, 2148, 3, 2, 2, 2, 2186, 2153, 3, 2, 2, 2, 2186, 2154, 3, 2, 2, 2, 2186, 2155, 3, 2, 2, 2, 2186, 2156, 3, 2, 2, 2, 2186, 2157, 3, 2, 2, 2, 2186, 2158, 3, 2, 2, 2, 2186, 2159, 3, 2, 2, 2, 2186, 2160, 3, 2, 2, 2, 2186, 2171, 3, 2, 2, 2, 2186, 2182, 3, 2, 2, 2, 2187, 251, 3, 2, 2, 2, 2188, 2192, 7, 310, 2, 2, 2189, 2190, 7, 308, 2, 2, 2190, 2192, 7, 215, 2, 2, 2191, 2188, 3, 2, 2, 2, 2191, 2189, 3, 2, 2, 2, 2192, 253, 3, 2, 2, 2, 2193, 2196, 7, 29, 2, 2, 2194, 2197, 5, 308, 155, 2, 2195, 2197, 7, 47, 2, 2, 2196, 2194, 3, 2, 2, 2, 2196, 2195, 3, 2, 2, 2, 2197, 2198, 3, 2, 2, 2, 2198, 2199, 7, 30, 2, 2, 2199, 255, 3, 2, 2, 2, 2200, 2202, 9, 42, 2, 2, 2201, 2200, 3, 2, 2, 2, 2202, 2203, 3, 2, 2, 2, 2203, 2201, 3, 2, 2, 2, 2203, 2204, 3, 2, 2, 2, 2204, 257, 3, 2, 2, 2, 2205, 2220, 5, 260, 131, 2, 2206, 2220, 5, 262, 132, 2, 2207, 2220, 7, 325, 2, 2, 2208, 2209, 5, 228, 115, 2, 2209, 2211, 5, 268, 135, 2, 2210, 2212, 7, 171, 2, 2, 2211, 2210, 3, 2, 2, 2, 2211, 2212, 3, 2, 2, 2, 2212, 2220, 3, 2, 2, 2, 2213, 2217, 7, 171, 2, 2, 2214, 2215, 5, 228, 115, 2, 2215, 2216, 5, 268, 135, 2, 2216, 2218, 3, 2, 2, 2, 2217, 2214, 3, 2, 2, 2, 2217, 2218, 3, 2, 2, 2, 2218, 2220, 3, 2, 2, 2, 2219, 2205, 3, 2, 2, 2, 2219, 2206, 3, 2, 2, 2, 2219, 2207, 3, 2, 2, 2, 2219, 2208, 3, 2, 2, 2, 2219, 2213, 3, 2, 2, 2, 2220, 259, 3, 2, 2, 2, 2221, 2223, 7, 241, 2, 2, 2222, 2224, 7, 171, 2, 2, 2223, 2222, 3, 2, 2, 2, 2223, 2224, 3, 2, 2, 2, 2224, 2228, 3, 2, 2, 2, 2225, 2226, 7, 171, 2, 2, 2226, 2228, 7, 241, 2, 2, 2227, 2221, 3, 2, 2, 2, 2227, 2225, 3, 2, 2, 2, 2228, 261, 3, 2, 2, 2, 2229, 2231, 7, 326, 2, 2, 2230, 2232, 7, 171, 2, 2, 2231, 2230, 3, 2, 2, 2, 2231, 2232, 3, 2, 2, 2, 2232, 2236, 3, 2, 2, 2, 2233, 2234, 7, 171, 2, 2, 2234, 2236, 7, 326, 2, 2, 2235, 2229, 3, 2, 2, 2, 2235, 2233, 3, 2, 2, 2, 2236, 263, 3, 2, 2, 2, 2237, 2238, 7, 29, 2, 2, 2238, 2239, 5, 304, 153, 2, 2239, 2240, 7, 30, 2, 2, 2240, 265, 3, 2, 2, 2, 2241, 2242, 7, 29, 2, 2, 2242, 2243, 7, 46, 2, 2, 2243, 2244, 7, 30, 2, 2, 2244, 267, 3, 2, 2, 2, 2245, 2249, 5, 332, 167, 2, 2246, 2249, 7, 171, 2, 2, 2247, 2249, 7, 63, 2, 2, 2248, 2245, 3, 2, 2, 2, 2248, 2246, 3, 2, 2, 2, 2248, 2247, 3, 2, 2, 2, 2249, 269, 3, 2, 2, 2, 2250, 2254, 5, 332, 167, 2, 2251, 2254, 7, 63, 2, 2, 2252, 2254, 7, 171, 2, 2, 2253, 2250, 3, 2, 2, 2, 2253, 2251, 3, 2, 2, 2, 2253, 2252, 3, 2, 2, 2, 2254, 271, 3, 2, 2, 2, 2255, 2256, 7, 177, 2, 2, 2256, 2257, 5, 270, 136, 2, 2257, 273, 3, 2, 2, 2, 2258, 2259, 5, 228, 115, 2, 2259, 2260, 5, 268, 135, 2, 2260, 275, 3, 2, 2, 2, 2261, 2263, 7, 140, 2, 2, 2262, 2264, 5, 278, 140, 2, 2263, 2262, 3, 2, 2, 2, 2264, 2265, 3, 2, 2, 2, 2265, 2263, 3, 2, 2, 2, 2265, 2266, 3, 2, 2, 2, 2266, 277, 3, 2, 2, 2, 2267, 2268, 7, 327, 2, 2, 2268, 2269, 7, 85, 2, 2, 2269, 2280, 5, 316, 159, 2, 2270, 2272, 7, 328, 2, 2, 2271, 2270, 3, 2, 2, 2, 2271, 2272, 3, 2, 2, 2, 2272, 2273, 3, 2, 2, 2, 2273, 2274, 7, 329, 2, 2, 2274, 2275, 7, 85, 2, 2, 2275, 2280, 5, 316, 159, 2, 2276, 2277, 7, 330, 2, 2, 2277, 2278, 7, 85, 2, 2, 2278, 2280, 5, 316, 159, 2, 2279, 2267, 3, 2, 2, 2, 2279, 2271, 3, 2, 2, 2, 2279, 2276, 3, 2, 2, 2, 2280, 279, 3, 2, 2, 2, 2281, 2283, 7, 331, 2, 2, 2282, 2284, 5, 282, 142, 2, 2283, 2282, 3, 2, 2, 2, 2284, 2285, 3, 2, 2, 2, 2285, 2283, 3, 2, 2, 2, 2285, 2286, 3, 2, 2, 2, 2286, 281, 3, 2, 2, 2, 2287, 2288, 9, 43, 2, 2, 2288, 2289, 7, 85, 2, 2, 2289, 2290, 5, 316, 159, 2, 2290, 283, 3, 2, 2, 2, 2291, 2292, 7, 84, 2, 2, 2292, 2293, 5, 296, 149, 2, 2293, 285, 3, 2, 2, 2, 2294, 2295, 7, 29, 2, 2, 2295, 2300, 5, 292, 147, 2, 2296, 2297, 7, 26, 2, 2, 2297, 2299, 5, 292, 147, 2, 2298, 2296, 3, 2, 2, 2, 2299, 2302, 3, 2, 2, 2, 2300, 2298, 3, 2, 2, 2, 2300, 2301, 3, 2, 2, 2, 2301, 2303, 3, 2, 2, 2, 2302, 2300, 3, 2, 2, 2, 2303, 2304, 7, 30, 2, 2, 2304, 287, 3, 2, 2, 2, 2305, 2310, 5, 298, 150, 2, 2306, 2307, 7, 26, 2, 2, 2307, 2309, 5, 298, 150, 2, 2308, 2306, 3, 2, 2, 2, 2309, 2312, 3, 2, 2, 2, 2310, 2308, 3, 2, 2, 2, 2310, 2311, 3, 2, 2, 2, 2311, 289, 3, 2, 2, 2, 2312, 2310, 3, 2, 2, 2, 2313, 2314, 9, 44, 2, 2, 2314, 291, 3, 2, 2, 2, 2315, 2318, 5, 290, 146, 2, 2316, 2318, 5, 340, 171, 2, 2317, 2315, 3, 2, 2, 2, 2317, 2316, 3, 2, 2, 2, 2318, 293, 3, 2, 2, 2, 2319, 2324, 5, 292, 147, 2, 2320, 2321, 7, 26, 2, 2, 2321, 2323, 5, 292, 147, 2, 2322, 2320, 3, 2, 2, 2, 2323, 2326, 3, 2, 2, 2, 2324, 2322, 3, 2, 2, 2, 2324, 2325, 3, 2, 2, 2, 2325, 295, 3, 2, 2, 2, 2326, 2324, 3, 2, 2, 2, 2327, 2328, 7, 29, 2, 2, 2328, 2329, 5, 294, 148, 2, 2329, 2330, 7, 30, 2, 2, 2330, 297, 3, 2, 2, 2, 2331, 2336, 5, 292, 147, 2, 2332, 2333, 7, 25, 2, 2, 2333, 2335, 5, 292, 147, 2, 2334, 2332, 3, 2, 2, 2, 2335, 2338, 3, 2, 2, 2, 2336, 2334, 3, 2, 2, 2, 2336, 2337, 3, 2, 2, 2, 2337, 2341, 3, 2, 2, 2, 2338, 2336, 3, 2, 2, 2, 2339, 2340, 7, 25, 2, 2, 2340, 2342, 7, 13, 2, 2, 2341, 2339, 3, 2, 2, 2, 2341, 2342, 3, 2, 2, 2, 2342, 299, 3, 2, 2, 2, 2343, 2344, 7, 25, 2, 2, 2344, 2345, 5, 292, 147, 2, 2345, 301, 3, 2, 2, 2, 2346, 2347, 9, 45, 2, 2, 2347, 303, 3, 2, 2, 2, 2348, 2349, 9, 46, 2, 2, 2349, 305, 3, 2, 2, 2, 2350, 2351, 9, 47, 2, 2, 2351, 307, 3, 2, 2, 2, 2352, 2353, 9, 46, 2, 2, 2353, 309, 3, 2, 2, 2, 2354, 2364, 5, 318, 160, 2, 2355, 2364, 5, 320, 161, 2, 2356, 2364, 5, 326, 164, 2, 2357, 2364, 5, 324, 163, 2, 2358, 2364, 5, 322, 162, 2, 2359, 2361, 7, 341, 2, 2, 2360, 2359, 3, 2, 2, 2, 2360, 2361, 3, 2, 2, 2, 2361, 2362, 3, 2, 2, 2, 2362, 2364, 9, 48, 2, 2, 2363, 2354, 3, 2, 2, 2, 2363, 2355, 3, 2, 2, 2, 2363, 2356, 3, 2, 2, 2, 2363, 2357, 3, 2, 2, 2, 2363, 2358, 3, 2, 2, 2, 2363, 2360, 3, 2, 2, 2, 2364, 311, 3, 2, 2, 2, 2365, 2366, 7, 29, 2, 2, 2366, 2371, 5, 316, 159, 2, 2367, 2368, 7, 26, 2, 2, 2368, 2370, 5, 316, 159, 2, 2369, 2367, 3, 2, 2, 2, 2370, 2373, 3, 2, 2, 2, 2371, 2369, 3, 2, 2, 2, 2371, 2372, 3, 2, 2, 2, 2372, 2374, 3, 2, 2, 2, 2373, 2371, 3, 2, 2, 2, 2374, 2375, 7, 30, 2, 2, 2375, 313, 3, 2, 2, 2, 2376, 2377, 9, 49, 2, 2, 2377, 315, 3, 2, 2, 2, 2378, 2382, 5, 314, 158, 2, 2379, 2382, 7, 44, 2, 2, 2380, 2382, 7, 45, 2, 2, 2381, 2378, 3, 2, 2, 2, 2381, 2379, 3, 2, 2, 2, 2381, 2380, 3, 2, 2, 2, 2382, 317, 3, 2, 2, 2, 2383, 2385, 7, 341, 2, 2, 2384, 2383, 3, 2, 2, 2, 2384, 2385, 3, 2, 2, 2, 2385, 2386, 3, 2, 2, 2, 2386, 2389, 5, 314, 158, 2, 2387, 2389, 7, 343, 2, 2, 2388, 2384, 3, 2, 2, 2, 2388, 2387, 3, 2, 2, 2, 2389, 2393, 3, 2, 2, 2, 2390, 2392, 5, 314, 158, 2, 2391, 2390, 3, 2, 2, 2, 2392, 2395, 3, 2, 2, 2, 2393, 2391, 3, 2, 2, 2, 2393, 2394, 3, 2, 2, 2, 2394, 319, 3, 2, 2, 2, 2395, 2393, 3, 2, 2, 2, 2396, 2397, 9, 47, 2, 2, 2397, 321, 3, 2, 2, 2, 2398, 2399, 9, 50, 2, 2, 2399, 323, 3, 2, 2, 2, 2400, 2401, 9, 51, 2, 2, 2401, 325, 3, 2, 2, 2, 2402, 2403, 7, 217, 2, 2, 2403, 2409, 7, 346, 2, 2, 2404, 2405, 7, 219, 2, 2, 2405, 2409, 7, 346, 2, 2, 2406, 2407, 7, 220, 2, 2, 2407, 2409, 7, 346, 2, 2, 2408, 2402, 3, 2, 2, 2, 2408, 2404, 3, 2, 2, 2, 2408, 2406, 3, 2, 2, 2, 2409, 327, 3, 2, 2, 2, 2410, 2413, 5, 254, 128, 2, 2411, 2413, 5, 330, 166, 2, 2412, 2410, 3, 2, 2, 2, 2412, 2411, 3, 2, 2, 2, 2413, 329, 3, 2, 2, 2, 2414, 2415, 7, 29, 2, 2, 2415, 2416, 7, 46, 2, 2, 2416, 2417, 7, 26, 2, 2, 2417, 2418, 7, 46, 2, 2, 2418, 2419, 7, 30, 2, 2, 2419, 331, 3, 2, 2, 2, 2420, 2423, 5, 292, 147, 2, 2421, 2423, 5, 314, 158, 2, 2422, 2420, 3, 2, 2, 2, 2422, 2421, 3, 2, 2, 2, 2423, 333, 3, 2, 2, 2, 2424, 2425, 7, 29, 2, 2, 2425, 2426, 7, 30, 2, 2, 2426, 335, 3, 2, 2, 2, 2427, 2428, 9, 52, 2, 2, 2428, 337, 3, 2, 2, 2, 2429, 2430, 7, 333, 2, 2, 2430, 2436, 7, 25, 2, 2, 2431, 2432, 7, 334, 2, 2, 2432, 2436, 7, 25, 2, 2, 2433, 2434, 7, 335, 2, 2, 2434, 2436, 7, 25, 2, 2, 2435, 2429, 3, 2, 2, 2, 2435, 2431, 3, 2, 2, 2, 2435, 2433, 3, 2, 2, 2, 2436, 339, 3, 2, 2, 2, 2437, 2438, 9, 53, 2, 2, 2438, 341, 3, 2, 2, 2, 311, 343, 348, 351, 355, 360, 364, 369, 373, 382, 387, 390, 394, 397, 401, 404, 406, 409, 415, 419, 421, 425, 429, 433, 440, 442, 449, 455, 460, 463, 466, 469, 472, 475, 479, 489, 493, 499, 502, 505, 511, 516, 520, 523, 531, 533, 546, 558, 563, 566, 569, 574, 580, 596, 616, 625, 629, 636, 641, 650, 656, 667, 674, 683, 692, 702, 707, 713, 716, 722, 729, 733, 739, 744, 748, 750, 753, 757, 766, 771, 776, 783, 792, 800, 805, 809, 815, 818, 821, 825, 829, 838, 842, 845, 848, 853, 859, 862, 867, 870, 872, 877, 889, 898, 910, 913, 918, 925, 929, 933, 935, 949, 954, 963, 969, 978, 982, 986, 998, 1005, 1010, 1016, 1019, 1023, 1034, 1036, 1045, 1057, 1059, 1066, 1071, 1077, 1085, 1096, 1100, 1129, 1131, 1139, 1143, 1158, 1165, 1179, 1191, 1197, 1204, 1207, 1241, 1252, 1254, 1260, 1265, 1270, 1277, 1283, 1288, 1293, 1299, 1303, 1308, 1313, 1318, 1323, 1330, 1337, 1344, 1351, 1356, 1361, 1366, 1370, 1374, 1378, 1380, 1399, 1403, 1410, 1422, 1425, 1429, 1434, 1439, 1443, 1453, 1462, 1464, 1467, 1476, 1483, 1496, 1501, 1508, 1514, 1540, 1571, 1591, 1597, 1601, 1628, 1640, 1653, 1657, 1661, 1689, 1743, 1753, 1756, 1768, 1773, 1785, 1805, 1809, 1825, 1828, 1833, 1836, 1845, 1849, 1855, 1861, 1865, 1876, 1882, 1884, 1891, 1898, 1902, 1909, 1914, 1918, 1923, 1927, 1931, 1947, 1953, 1961, 1982, 1987, 1993, 1996, 2001, 2003, 2006, 2009, 2013, 2016, 2020, 2025, 2028, 2032, 2040, 2044, 2056, 2060, 2066, 2069, 2074, 2078, 2086, 2094, 2101, 2105, 2110, 2119, 2122, 2126, 2130, 2133, 2137, 2141, 2146, 2151, 2166, 2169, 2177, 2180, 2184, 2186, 2191, 2196, 2203, 2211, 2217, 2219, 2223, 2227, 2231, 2235, 2248, 2253, 2265, 2271, 2279, 2285, 2300, 2310, 2317, 2324, 2336, 2341, 2360, 2363, 2371, 2381, 2384, 2388, 2393, 2408, 2412, 2422, 2435] \ No newline at end of file diff --git a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/parser/SQLSelectParser.js b/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/parser/SQLSelectParser.js deleted file mode 100644 index 5122bde..0000000 --- a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/parser/SQLSelectParser.js +++ /dev/null @@ -1,25913 +0,0 @@ -// Generated from grammars/SQLSelectParser.g4 by ANTLR 4.9.2 -// jshint ignore: start -const antlr4 = require('antlr4'); -const SQLSelectParserListener = require('./SQLSelectParserListener.js'); - -const serializedATN = ["\u0003\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786", - "\u5964\u0003\u0161\u0988\u0004\u0002\t\u0002\u0004\u0003\t\u0003\u0004", - "\u0004\t\u0004\u0004\u0005\t\u0005\u0004\u0006\t\u0006\u0004\u0007\t", - "\u0007\u0004\b\t\b\u0004\t\t\t\u0004\n\t\n\u0004\u000b\t\u000b\u0004", - "\f\t\f\u0004\r\t\r\u0004\u000e\t\u000e\u0004\u000f\t\u000f\u0004\u0010", - "\t\u0010\u0004\u0011\t\u0011\u0004\u0012\t\u0012\u0004\u0013\t\u0013", - "\u0004\u0014\t\u0014\u0004\u0015\t\u0015\u0004\u0016\t\u0016\u0004\u0017", - "\t\u0017\u0004\u0018\t\u0018\u0004\u0019\t\u0019\u0004\u001a\t\u001a", - "\u0004\u001b\t\u001b\u0004\u001c\t\u001c\u0004\u001d\t\u001d\u0004\u001e", - "\t\u001e\u0004\u001f\t\u001f\u0004 \t \u0004!\t!\u0004\"\t\"\u0004#", - "\t#\u0004$\t$\u0004%\t%\u0004&\t&\u0004\'\t\'\u0004(\t(\u0004)\t)\u0004", - "*\t*\u0004+\t+\u0004,\t,\u0004-\t-\u0004.\t.\u0004/\t/\u00040\t0\u0004", - "1\t1\u00042\t2\u00043\t3\u00044\t4\u00045\t5\u00046\t6\u00047\t7\u0004", - "8\t8\u00049\t9\u0004:\t:\u0004;\t;\u0004<\t<\u0004=\t=\u0004>\t>\u0004", - "?\t?\u0004@\t@\u0004A\tA\u0004B\tB\u0004C\tC\u0004D\tD\u0004E\tE\u0004", - "F\tF\u0004G\tG\u0004H\tH\u0004I\tI\u0004J\tJ\u0004K\tK\u0004L\tL\u0004", - "M\tM\u0004N\tN\u0004O\tO\u0004P\tP\u0004Q\tQ\u0004R\tR\u0004S\tS\u0004", - "T\tT\u0004U\tU\u0004V\tV\u0004W\tW\u0004X\tX\u0004Y\tY\u0004Z\tZ\u0004", - "[\t[\u0004\\\t\\\u0004]\t]\u0004^\t^\u0004_\t_\u0004`\t`\u0004a\ta\u0004", - "b\tb\u0004c\tc\u0004d\td\u0004e\te\u0004f\tf\u0004g\tg\u0004h\th\u0004", - "i\ti\u0004j\tj\u0004k\tk\u0004l\tl\u0004m\tm\u0004n\tn\u0004o\to\u0004", - "p\tp\u0004q\tq\u0004r\tr\u0004s\ts\u0004t\tt\u0004u\tu\u0004v\tv\u0004", - "w\tw\u0004x\tx\u0004y\ty\u0004z\tz\u0004{\t{\u0004|\t|\u0004}\t}\u0004", - "~\t~\u0004\u007f\t\u007f\u0004\u0080\t\u0080\u0004\u0081\t\u0081\u0004", - "\u0082\t\u0082\u0004\u0083\t\u0083\u0004\u0084\t\u0084\u0004\u0085\t", - "\u0085\u0004\u0086\t\u0086\u0004\u0087\t\u0087\u0004\u0088\t\u0088\u0004", - "\u0089\t\u0089\u0004\u008a\t\u008a\u0004\u008b\t\u008b\u0004\u008c\t", - "\u008c\u0004\u008d\t\u008d\u0004\u008e\t\u008e\u0004\u008f\t\u008f\u0004", - "\u0090\t\u0090\u0004\u0091\t\u0091\u0004\u0092\t\u0092\u0004\u0093\t", - "\u0093\u0004\u0094\t\u0094\u0004\u0095\t\u0095\u0004\u0096\t\u0096\u0004", - "\u0097\t\u0097\u0004\u0098\t\u0098\u0004\u0099\t\u0099\u0004\u009a\t", - "\u009a\u0004\u009b\t\u009b\u0004\u009c\t\u009c\u0004\u009d\t\u009d\u0004", - "\u009e\t\u009e\u0004\u009f\t\u009f\u0004\u00a0\t\u00a0\u0004\u00a1\t", - "\u00a1\u0004\u00a2\t\u00a2\u0004\u00a3\t\u00a3\u0004\u00a4\t\u00a4\u0004", - "\u00a5\t\u00a5\u0004\u00a6\t\u00a6\u0004\u00a7\t\u00a7\u0004\u00a8\t", - "\u00a8\u0004\u00a9\t\u00a9\u0004\u00aa\t\u00aa\u0004\u00ab\t\u00ab\u0003", - "\u0002\u0005\u0002\u0158\n\u0002\u0003\u0002\u0003\u0002\u0003\u0002", - "\u0005\u0002\u015d\n\u0002\u0003\u0002\u0005\u0002\u0160\n\u0002\u0003", - "\u0003\u0003\u0003\u0005\u0003\u0164\n\u0003\u0003\u0003\u0003\u0003", - "\u0003\u0003\u0005\u0003\u0169\n\u0003\u0007\u0003\u016b\n\u0003\f\u0003", - "\u000e\u0003\u016e\u000b\u0003\u0003\u0004\u0003\u0004\u0005\u0004\u0172", - "\n\u0004\u0003\u0004\u0003\u0004\u0005\u0004\u0176\n\u0004\u0003\u0005", - "\u0003\u0005\u0003\u0005\u0003\u0005\u0003\u0005\u0003\u0005\u0003\u0005", - "\u0005\u0005\u017f\n\u0005\u0003\u0005\u0003\u0005\u0003\u0005\u0005", - "\u0005\u0184\n\u0005\u0003\u0006\u0005\u0006\u0187\n\u0006\u0003\u0006", - "\u0003\u0006\u0005\u0006\u018b\n\u0006\u0003\u0006\u0005\u0006\u018e", - "\n\u0006\u0003\u0006\u0003\u0006\u0005\u0006\u0192\n\u0006\u0003\u0006", - "\u0005\u0006\u0195\n\u0006\u0005\u0006\u0197\n\u0006\u0003\u0006\u0005", - "\u0006\u019a\n\u0006\u0003\u0007\u0003\u0007\u0003\u0007\u0003\u0007", - "\u0005\u0007\u01a0\n\u0007\u0003\u0007\u0003\u0007\u0005\u0007\u01a4", - "\n\u0007\u0005\u0007\u01a6\n\u0007\u0003\u0007\u0003\u0007\u0005\u0007", - "\u01aa\n\u0007\u0003\u0007\u0003\u0007\u0005\u0007\u01ae\n\u0007\u0007", - "\u0007\u01b0\n\u0007\f\u0007\u000e\u0007\u01b3\u000b\u0007\u0003\b\u0003", - "\b\u0003\b\u0003\b\u0005\b\u01b9\n\b\u0005\b\u01bb\n\b\u0003\b\u0003", - "\b\u0003\t\u0003\t\u0003\t\u0005\t\u01c2\n\t\u0003\n\u0003\n\u0007\n", - "\u01c6\n\n\f\n\u000e\n\u01c9\u000b\n\u0003\n\u0003\n\u0005\n\u01cd\n", - "\n\u0003\n\u0005\n\u01d0\n\n\u0003\n\u0005\n\u01d3\n\n\u0003\n\u0005", - "\n\u01d6\n\n\u0003\n\u0005\n\u01d9\n\n\u0003\n\u0005\n\u01dc\n\n\u0003", - "\u000b\u0003\u000b\u0005\u000b\u01e0\n\u000b\u0003\f\u0003\f\u0003\r", - "\u0003\r\u0003\r\u0003\u000e\u0003\u000e\u0003\u000e\u0005\u000e\u01ea", - "\n\u000e\u0003\u000f\u0003\u000f\u0005\u000f\u01ee\n\u000f\u0003\u0010", - "\u0003\u0010\u0003\u0010\u0003\u0010\u0005\u0010\u01f4\n\u0010\u0003", - "\u0010\u0005\u0010\u01f7\n\u0010\u0003\u0010\u0005\u0010\u01fa\n\u0010", - "\u0003\u0010\u0003\u0010\u0003\u0010\u0003\u0010\u0005\u0010\u0200\n", - "\u0010\u0003\u0010\u0003\u0010\u0003\u0010\u0005\u0010\u0205\n\u0010", - "\u0007\u0010\u0207\n\u0010\f\u0010\u000e\u0010\u020a\u000b\u0010\u0005", - "\u0010\u020c\n\u0010\u0003\u0011\u0003\u0011\u0003\u0011\u0003\u0011", - "\u0003\u0011\u0003\u0011\u0005\u0011\u0214\n\u0011\u0005\u0011\u0216", - "\n\u0011\u0003\u0011\u0003\u0011\u0003\u0012\u0003\u0012\u0003\u0012", - "\u0003\u0013\u0003\u0013\u0003\u0013\u0003\u0013\u0007\u0013\u0221\n", - "\u0013\f\u0013\u000e\u0013\u0224\u000b\u0013\u0003\u0014\u0003\u0014", - "\u0003\u0014\u0003\u0014\u0003\u0015\u0003\u0015\u0003\u0015\u0003\u0015", - "\u0003\u0016\u0005\u0016\u022f\n\u0016\u0003\u0016\u0003\u0016\u0003", - "\u0016\u0005\u0016\u0234\n\u0016\u0003\u0016\u0005\u0016\u0237\n\u0016", - "\u0003\u0016\u0005\u0016\u023a\n\u0016\u0003\u0017\u0003\u0017\u0003", - "\u0017\u0005\u0017\u023f\n\u0017\u0003\u0018\u0003\u0018\u0003\u0019", - "\u0003\u0019\u0005\u0019\u0245\n\u0019\u0003\u001a\u0003\u001a\u0003", - "\u001a\u0003\u001a\u0003\u001a\u0003\u001a\u0003\u001a\u0003\u001a\u0003", - "\u001a\u0003\u001a\u0003\u001a\u0003\u001a\u0003\u001a\u0003\u001a\u0005", - "\u001a\u0255\n\u001a\u0003\u001b\u0003\u001b\u0003\u001b\u0003\u001b", - "\u0003\u001b\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c", - "\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c", - "\u0003\u001c\u0003\u001c\u0005\u001c\u0269\n\u001c\u0003\u001d\u0003", - "\u001d\u0003\u001d\u0003\u001d\u0003\u001d\u0003\u001d\u0003\u001d\u0005", - "\u001d\u0272\n\u001d\u0003\u001e\u0003\u001e\u0005\u001e\u0276\n\u001e", - "\u0003\u001e\u0003\u001e\u0003\u001e\u0007\u001e\u027b\n\u001e\f\u001e", - "\u000e\u001e\u027e\u000b\u001e\u0003\u001f\u0003\u001f\u0005\u001f\u0282", - "\n\u001f\u0003\u001f\u0003\u001f\u0003\u001f\u0003 \u0003 \u0003 \u0003", - " \u0005 \u028b\n \u0003!\u0003!\u0003!\u0003!\u0005!\u0291\n!\u0003", - "\"\u0003\"\u0003\"\u0003\"\u0003#\u0003#\u0003$\u0003$\u0003$\u0005", - "$\u029c\n$\u0003%\u0003%\u0003%\u0007%\u02a1\n%\f%\u000e%\u02a4\u000b", - "%\u0003&\u0003&\u0003&\u0003&\u0007&\u02aa\n&\f&\u000e&\u02ad\u000b", - "&\u0003\'\u0003\'\u0003\'\u0003(\u0003(\u0003(\u0005(\u02b5\n(\u0003", - "(\u0003(\u0003)\u0003)\u0003)\u0003)\u0003)\u0003)\u0005)\u02bf\n)\u0003", - "*\u0006*\u02c2\n*\r*\u000e*\u02c3\u0003+\u0003+\u0003+\u0003+\u0005", - "+\u02ca\n+\u0003+\u0005+\u02cd\n+\u0003+\u0003+\u0003+\u0003+\u0005", - "+\u02d3\n+\u0003,\u0003,\u0003-\u0003-\u0003-\u0005-\u02da\n-\u0003", - ".\u0003.\u0005.\u02de\n.\u0003.\u0003.\u0007.\u02e2\n.\f.\u000e.\u02e5", - "\u000b.\u0003/\u0003/\u0005/\u02e9\n/\u0003/\u0003/\u0005/\u02ed\n/", - "\u0005/\u02ef\n/\u00030\u00050\u02f2\n0\u00030\u00030\u00050\u02f6\n", - "0\u00031\u00031\u00031\u00032\u00032\u00032\u00032\u00052\u02ff\n2\u0003", - "2\u00032\u00032\u00052\u0304\n2\u00032\u00072\u0307\n2\f2\u000e2\u030a", - "\u000b2\u00033\u00033\u00073\u030e\n3\f3\u000e3\u0311\u000b3\u00034", - "\u00034\u00034\u00034\u00034\u00034\u00054\u0319\n4\u00034\u00034\u0003", - "4\u00034\u00034\u00034\u00054\u0321\n4\u00034\u00034\u00034\u00054\u0326", - "\n4\u00035\u00035\u00055\u032a\n5\u00035\u00035\u00035\u00035\u0005", - "5\u0330\n5\u00035\u00055\u0333\n5\u00036\u00056\u0336\n6\u00036\u0003", - "6\u00056\u033a\n6\u00037\u00037\u00057\u033e\n7\u00037\u00037\u0003", - "8\u00038\u00038\u00038\u00038\u00058\u0347\n8\u00039\u00039\u00059\u034b", - "\n9\u00039\u00059\u034e\n9\u00039\u00059\u0351\n9\u0003:\u0003:\u0003", - ":\u0005:\u0356\n:\u0003:\u0003:\u0003;\u0003;\u0005;\u035c\n;\u0003", - ";\u0005;\u035f\n;\u0003;\u0003;\u0003;\u0005;\u0364\n;\u0003;\u0005", - ";\u0367\n;\u0005;\u0369\n;\u0003<\u0003<\u0003<\u0005<\u036e\n<\u0003", - "<\u0003<\u0003=\u0003=\u0003=\u0003=\u0003=\u0003=\u0003=\u0003=\u0005", - "=\u037a\n=\u0003>\u0003>\u0003>\u0003>\u0003>\u0007>\u0381\n>\f>\u000e", - ">\u0384\u000b>\u0003>\u0003>\u0003?\u0003?\u0003?\u0003?\u0003?\u0003", - "?\u0003?\u0005?\u038f\n?\u0003?\u0005?\u0392\n?\u0003?\u0003?\u0003", - "?\u0005?\u0397\n?\u0003?\u0003?\u0003?\u0003?\u0003?\u0005?\u039e\n", - "?\u0003@\u0003@\u0005@\u03a2\n@\u0003@\u0003@\u0005@\u03a6\n@\u0005", - "@\u03a8\n@\u0003A\u0003A\u0003A\u0003A\u0003B\u0003B\u0003B\u0003B\u0003", - "C\u0003C\u0003C\u0003C\u0005C\u03b6\nC\u0003D\u0003D\u0003E\u0005E\u03bb", - "\nE\u0003E\u0003E\u0003F\u0003F\u0003F\u0007F\u03c2\nF\fF\u000eF\u03c5", - "\u000bF\u0003G\u0003G\u0003G\u0005G\u03ca\nG\u0003G\u0003G\u0003G\u0003", - "G\u0003G\u0003G\u0003G\u0005G\u03d3\nG\u0003G\u0003G\u0005G\u03d7\n", - "G\u0003G\u0003G\u0005G\u03db\nG\u0003H\u0003H\u0003I\u0003I\u0003J\u0003", - "J\u0003J\u0003J\u0003J\u0003J\u0005J\u03e7\nJ\u0003K\u0003K\u0003K\u0007", - "K\u03ec\nK\fK\u000eK\u03ef\u000bK\u0003L\u0003L\u0005L\u03f3\nL\u0003", - "M\u0003M\u0003M\u0003M\u0005M\u03f9\nM\u0003M\u0005M\u03fc\nM\u0003", - "M\u0003M\u0005M\u0400\nM\u0003M\u0003M\u0003M\u0003M\u0003M\u0003M\u0003", - "M\u0003M\u0003M\u0007M\u040b\nM\fM\u000eM\u040e\u000bM\u0003N\u0003", - "N\u0003N\u0003N\u0003N\u0003N\u0005N\u0416\nN\u0003N\u0003N\u0003N\u0003", - "N\u0003N\u0003N\u0003N\u0003N\u0003N\u0003N\u0007N\u0422\nN\fN\u000e", - "N\u0425\u000bN\u0003O\u0003O\u0003P\u0003P\u0005P\u042b\nP\u0003P\u0003", - "P\u0003P\u0005P\u0430\nP\u0003P\u0003P\u0003P\u0003P\u0005P\u0436\n", - "P\u0003Q\u0003Q\u0003Q\u0003Q\u0003Q\u0003Q\u0005Q\u043e\nQ\u0003Q\u0003", - "Q\u0003Q\u0003Q\u0003Q\u0003Q\u0003Q\u0003Q\u0003Q\u0005Q\u0449\nQ\u0003", - "Q\u0003Q\u0005Q\u044d\nQ\u0003R\u0003R\u0003R\u0003R\u0003R\u0003R\u0003", - "R\u0003R\u0003R\u0003R\u0003R\u0003R\u0003R\u0003R\u0003R\u0003R\u0003", - "R\u0003R\u0003R\u0003R\u0003R\u0003R\u0003R\u0003R\u0003R\u0003R\u0003", - "R\u0007R\u046a\nR\fR\u000eR\u046d\u000bR\u0003S\u0003S\u0003S\u0003", - "S\u0003S\u0005S\u0474\nS\u0003S\u0003S\u0005S\u0478\nS\u0003S\u0003", - "S\u0003S\u0003S\u0003S\u0003S\u0003S\u0003S\u0003S\u0003S\u0003S\u0003", - "S\u0003S\u0005S\u0487\nS\u0003S\u0003S\u0003S\u0003S\u0003S\u0005S\u048e", - "\nS\u0003S\u0003S\u0003S\u0003S\u0003S\u0003S\u0003S\u0003S\u0003S\u0003", - "S\u0003S\u0003S\u0005S\u049c\nS\u0003S\u0003S\u0003S\u0003S\u0003S\u0003", - "S\u0003S\u0003S\u0003S\u0003S\u0005S\u04a8\nS\u0003S\u0003S\u0003S\u0003", - "S\u0005S\u04ae\nS\u0003S\u0003S\u0003S\u0006S\u04b3\nS\rS\u000eS\u04b4", - "\u0003S\u0005S\u04b8\nS\u0003S\u0003S\u0003S\u0003S\u0003S\u0003S\u0003", - "S\u0003S\u0003S\u0003S\u0003S\u0003S\u0003S\u0003S\u0003S\u0003S\u0003", - "S\u0003S\u0003S\u0003S\u0003S\u0003S\u0003S\u0003S\u0003S\u0003S\u0003", - "S\u0003S\u0003S\u0003S\u0003S\u0003S\u0005S\u04da\nS\u0003S\u0003S\u0003", - "S\u0003S\u0003S\u0003S\u0003S\u0003S\u0003S\u0007S\u04e5\nS\fS\u000e", - "S\u04e8\u000bS\u0003T\u0003T\u0003T\u0005T\u04ed\nT\u0003U\u0003U\u0003", - "U\u0005U\u04f2\nU\u0003U\u0003U\u0003U\u0005U\u04f7\nU\u0003U\u0003", - "U\u0003U\u0003U\u0003U\u0005U\u04fe\nU\u0003U\u0003U\u0003U\u0003U\u0005", - "U\u0504\nU\u0003U\u0003U\u0003U\u0005U\u0509\nU\u0003U\u0003U\u0003", - "U\u0005U\u050e\nU\u0003U\u0003U\u0003U\u0003U\u0005U\u0514\nU\u0003", - "U\u0003U\u0005U\u0518\nU\u0003U\u0003U\u0003U\u0005U\u051d\nU\u0003", - "U\u0003U\u0003U\u0005U\u0522\nU\u0003U\u0003U\u0003U\u0005U\u0527\n", - "U\u0003U\u0003U\u0003U\u0005U\u052c\nU\u0003U\u0003U\u0003U\u0003U\u0003", - "U\u0005U\u0533\nU\u0003U\u0003U\u0003U\u0003U\u0003U\u0005U\u053a\n", - "U\u0003U\u0003U\u0003U\u0003U\u0003U\u0005U\u0541\nU\u0003U\u0003U\u0003", - "U\u0003U\u0003U\u0005U\u0548\nU\u0003U\u0003U\u0003U\u0005U\u054d\n", - "U\u0003U\u0003U\u0003U\u0005U\u0552\nU\u0003U\u0003U\u0003U\u0005U\u0557", - "\nU\u0003U\u0003U\u0005U\u055b\nU\u0003U\u0003U\u0005U\u055f\nU\u0003", - "U\u0003U\u0005U\u0563\nU\u0005U\u0565\nU\u0003V\u0003V\u0003V\u0003", - "V\u0003V\u0003W\u0003W\u0003W\u0003W\u0003W\u0003W\u0003W\u0003W\u0003", - "W\u0003W\u0003W\u0003W\u0005W\u0578\nW\u0003W\u0003W\u0005W\u057c\n", - "W\u0003W\u0003W\u0003W\u0003W\u0003W\u0005W\u0583\nW\u0003W\u0003W\u0003", - "W\u0003W\u0003W\u0003W\u0003W\u0003W\u0003W\u0003W\u0005W\u058f\nW\u0003", - "W\u0005W\u0592\nW\u0003W\u0003W\u0005W\u0596\nW\u0003X\u0003X\u0003", - "X\u0005X\u059b\nX\u0003Y\u0003Y\u0003Y\u0005Y\u05a0\nY\u0003Y\u0003", - "Y\u0005Y\u05a4\nY\u0003Z\u0003Z\u0003Z\u0003[\u0003[\u0003[\u0003[\u0003", - "[\u0005[\u05ae\n[\u0003[\u0003[\u0003[\u0003[\u0003[\u0003[\u0003[\u0005", - "[\u05b7\n[\u0005[\u05b9\n[\u0003\\\u0005\\\u05bc\n\\\u0003\\\u0003\\", - "\u0003]\u0003]\u0003]\u0003]\u0003]\u0005]\u05c5\n]\u0003^\u0003^\u0003", - "^\u0007^\u05ca\n^\f^\u000e^\u05cd\u000b^\u0003_\u0003_\u0003_\u0003", - "_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0005_\u05d9\n_\u0003_\u0003", - "_\u0003_\u0005_\u05de\n_\u0003`\u0003`\u0003`\u0003`\u0003`\u0005`\u05e5", - "\n`\u0003`\u0003`\u0003`\u0003`\u0005`\u05eb\n`\u0003`\u0003`\u0003", - "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", - "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0006", - "`\u0603\n`\r`\u000e`\u0604\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", - "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", - "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", - "`\u0003`\u0003`\u0003`\u0005`\u0624\n`\u0003`\u0003`\u0003`\u0003`\u0003", - "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", - "`\u0003`\u0003`\u0003`\u0005`\u0638\n`\u0003`\u0003`\u0003`\u0003`\u0005", - "`\u063e\n`\u0003`\u0003`\u0005`\u0642\n`\u0003`\u0003`\u0003`\u0003", - "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", - "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", - "`\u0003`\u0005`\u065d\n`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", - "`\u0003`\u0003`\u0003`\u0005`\u0669\n`\u0003`\u0003`\u0003`\u0003`\u0003", - "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0005`\u0676\n`\u0003`\u0003", - "`\u0005`\u067a\n`\u0003`\u0003`\u0005`\u067e\n`\u0003`\u0003`\u0003", - "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", - "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", - "`\u0003`\u0003`\u0003`\u0005`\u069a\n`\u0003`\u0003`\u0003`\u0003`\u0003", - "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", - "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", - "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", - "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", - "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0005`\u06d0\n`\u0003", - "`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0005`\u06da\n`\u0003", - "`\u0005`\u06dd\n`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003`\u0003", - "`\u0003`\u0003`\u0005`\u06e9\n`\u0003`\u0003`\u0003`\u0005`\u06ee\n", - "`\u0003a\u0003a\u0003a\u0003a\u0003a\u0003a\u0003a\u0003a\u0003a\u0003", - "a\u0005a\u06fa\na\u0003a\u0003a\u0003a\u0003a\u0003a\u0003a\u0003a\u0003", - "a\u0003a\u0003a\u0003a\u0003a\u0003a\u0003a\u0003a\u0003a\u0003a\u0003", - "a\u0005a\u070e\na\u0003b\u0003b\u0005b\u0712\nb\u0003b\u0003b\u0003", - "c\u0003c\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0007", - "d\u0720\nd\fd\u000ed\u0723\u000bd\u0005d\u0725\nd\u0003e\u0003e\u0003", - "e\u0005e\u072a\ne\u0003e\u0005e\u072d\ne\u0003f\u0003f\u0003g\u0003", - "g\u0003g\u0003g\u0003g\u0005g\u0736\ng\u0003g\u0003g\u0005g\u073a\n", - "g\u0003g\u0003g\u0003g\u0003g\u0005g\u0740\ng\u0003g\u0003g\u0003g\u0003", - "g\u0005g\u0746\ng\u0003g\u0003g\u0005g\u074a\ng\u0003g\u0003g\u0003", - "h\u0003h\u0003h\u0003h\u0003h\u0003h\u0003h\u0005h\u0755\nh\u0003h\u0003", - "h\u0003h\u0003h\u0005h\u075b\nh\u0005h\u075d\nh\u0003h\u0003h\u0003", - "i\u0003i\u0003i\u0005i\u0764\ni\u0003i\u0003i\u0003i\u0003i\u0003i\u0005", - "i\u076b\ni\u0003i\u0003i\u0005i\u076f\ni\u0003j\u0003j\u0003j\u0007", - "j\u0774\nj\fj\u000ej\u0777\u000bj\u0003k\u0003k\u0005k\u077b\nk\u0003", - "l\u0003l\u0005l\u077f\nl\u0003m\u0003m\u0003m\u0005m\u0784\nm\u0003", - "n\u0003n\u0005n\u0788\nn\u0003n\u0003n\u0005n\u078c\nn\u0003o\u0003", - "o\u0003o\u0003p\u0003p\u0003p\u0003q\u0003q\u0003q\u0003r\u0003r\u0003", - "r\u0007r\u079a\nr\fr\u000er\u079d\u000br\u0003s\u0003s\u0003s\u0005", - "s\u07a2\ns\u0003t\u0003t\u0003u\u0003u\u0003v\u0003v\u0005v\u07aa\n", - "v\u0003w\u0003w\u0003x\u0003x\u0003x\u0003x\u0003y\u0003y\u0003y\u0003", - "y\u0003z\u0003z\u0003z\u0003z\u0003{\u0003{\u0003{\u0007{\u07bd\n{\f", - "{\u000e{\u07c0\u000b{\u0003|\u0003|\u0005|\u07c4\n|\u0003}\u0003}\u0003", - "~\u0003~\u0005~\u07ca\n~\u0003~\u0005~\u07cd\n~\u0003~\u0003~\u0003", - "~\u0005~\u07d2\n~\u0005~\u07d4\n~\u0003~\u0005~\u07d7\n~\u0003~\u0005", - "~\u07da\n~\u0003~\u0003~\u0005~\u07de\n~\u0003~\u0005~\u07e1\n~\u0003", - "~\u0003~\u0005~\u07e5\n~\u0003~\u0003~\u0003~\u0005~\u07ea\n~\u0003", - "~\u0005~\u07ed\n~\u0003~\u0003~\u0005~\u07f1\n~\u0003~\u0003~\u0003", - "~\u0003~\u0003~\u0003~\u0005~\u07f9\n~\u0003~\u0003~\u0005~\u07fd\n", - "~\u0003~\u0003~\u0003~\u0003~\u0003~\u0003~\u0003~\u0003~\u0003~\u0003", - "~\u0005~\u0809\n~\u0003~\u0003~\u0005~\u080d\n~\u0003~\u0003~\u0003", - "~\u0003~\u0005~\u0813\n~\u0003~\u0005~\u0816\n~\u0003~\u0003~\u0003", - "~\u0005~\u081b\n~\u0003~\u0003~\u0005~\u081f\n~\u0003~\u0003~\u0003", - "~\u0003~\u0003~\u0003~\u0005~\u0827\n~\u0003~\u0003~\u0003~\u0003~\u0003", - "~\u0003~\u0005~\u082f\n~\u0003~\u0003~\u0003~\u0003~\u0003~\u0005~\u0836", - "\n~\u0003~\u0003~\u0005~\u083a\n~\u0003~\u0003~\u0003~\u0005~\u083f", - "\n~\u0003~\u0003~\u0003~\u0003~\u0003~\u0003~\u0003~\u0005~\u0848\n", - "~\u0003~\u0005~\u084b\n~\u0003~\u0003~\u0005~\u084f\n~\u0003~\u0003", - "~\u0005~\u0853\n~\u0003~\u0005~\u0856\n~\u0003~\u0003~\u0005~\u085a", - "\n~\u0003~\u0003~\u0005~\u085e\n~\u0003~\u0003~\u0003~\u0005~\u0863", - "\n~\u0003~\u0003~\u0003~\u0005~\u0868\n~\u0003~\u0003~\u0003~\u0003", - "~\u0003~\u0003~\u0003~\u0003~\u0003~\u0003~\u0003~\u0007~\u0875\n~\f", - "~\u000e~\u0878\u000b~\u0005~\u087a\n~\u0003~\u0003~\u0003~\u0003~\u0007", - "~\u0880\n~\f~\u000e~\u0883\u000b~\u0005~\u0885\n~\u0003~\u0003~\u0005", - "~\u0889\n~\u0005~\u088b\n~\u0003\u007f\u0003\u007f\u0003\u007f\u0005", - "\u007f\u0890\n\u007f\u0003\u0080\u0003\u0080\u0003\u0080\u0005\u0080", - "\u0895\n\u0080\u0003\u0080\u0003\u0080\u0003\u0081\u0006\u0081\u089a", - "\n\u0081\r\u0081\u000e\u0081\u089b\u0003\u0082\u0003\u0082\u0003\u0082", - "\u0003\u0082\u0003\u0082\u0003\u0082\u0005\u0082\u08a4\n\u0082\u0003", - "\u0082\u0003\u0082\u0003\u0082\u0003\u0082\u0005\u0082\u08aa\n\u0082", - "\u0005\u0082\u08ac\n\u0082\u0003\u0083\u0003\u0083\u0005\u0083\u08b0", - "\n\u0083\u0003\u0083\u0003\u0083\u0005\u0083\u08b4\n\u0083\u0003\u0084", - "\u0003\u0084\u0005\u0084\u08b8\n\u0084\u0003\u0084\u0003\u0084\u0005", - "\u0084\u08bc\n\u0084\u0003\u0085\u0003\u0085\u0003\u0085\u0003\u0085", - "\u0003\u0086\u0003\u0086\u0003\u0086\u0003\u0086\u0003\u0087\u0003\u0087", - "\u0003\u0087\u0005\u0087\u08c9\n\u0087\u0003\u0088\u0003\u0088\u0003", - "\u0088\u0005\u0088\u08ce\n\u0088\u0003\u0089\u0003\u0089\u0003\u0089", - "\u0003\u008a\u0003\u008a\u0003\u008a\u0003\u008b\u0003\u008b\u0006\u008b", - "\u08d8\n\u008b\r\u008b\u000e\u008b\u08d9\u0003\u008c\u0003\u008c\u0003", - "\u008c\u0003\u008c\u0005\u008c\u08e0\n\u008c\u0003\u008c\u0003\u008c", - "\u0003\u008c\u0003\u008c\u0003\u008c\u0003\u008c\u0005\u008c\u08e8\n", - "\u008c\u0003\u008d\u0003\u008d\u0006\u008d\u08ec\n\u008d\r\u008d\u000e", - "\u008d\u08ed\u0003\u008e\u0003\u008e\u0003\u008e\u0003\u008e\u0003\u008f", - "\u0003\u008f\u0003\u008f\u0003\u0090\u0003\u0090\u0003\u0090\u0003\u0090", - "\u0007\u0090\u08fb\n\u0090\f\u0090\u000e\u0090\u08fe\u000b\u0090\u0003", - "\u0090\u0003\u0090\u0003\u0091\u0003\u0091\u0003\u0091\u0007\u0091\u0905", - "\n\u0091\f\u0091\u000e\u0091\u0908\u000b\u0091\u0003\u0092\u0003\u0092", - "\u0003\u0093\u0003\u0093\u0005\u0093\u090e\n\u0093\u0003\u0094\u0003", - "\u0094\u0003\u0094\u0007\u0094\u0913\n\u0094\f\u0094\u000e\u0094\u0916", - "\u000b\u0094\u0003\u0095\u0003\u0095\u0003\u0095\u0003\u0095\u0003\u0096", - "\u0003\u0096\u0003\u0096\u0007\u0096\u091f\n\u0096\f\u0096\u000e\u0096", - "\u0922\u000b\u0096\u0003\u0096\u0003\u0096\u0005\u0096\u0926\n\u0096", - "\u0003\u0097\u0003\u0097\u0003\u0097\u0003\u0098\u0003\u0098\u0003\u0099", - "\u0003\u0099\u0003\u009a\u0003\u009a\u0003\u009b\u0003\u009b\u0003\u009c", - "\u0003\u009c\u0003\u009c\u0003\u009c\u0003\u009c\u0003\u009c\u0005\u009c", - "\u0939\n\u009c\u0003\u009c\u0005\u009c\u093c\n\u009c\u0003\u009d\u0003", - "\u009d\u0003\u009d\u0003\u009d\u0007\u009d\u0942\n\u009d\f\u009d\u000e", - "\u009d\u0945\u000b\u009d\u0003\u009d\u0003\u009d\u0003\u009e\u0003\u009e", - "\u0003\u009f\u0003\u009f\u0003\u009f\u0005\u009f\u094e\n\u009f\u0003", - "\u00a0\u0005\u00a0\u0951\n\u00a0\u0003\u00a0\u0003\u00a0\u0005\u00a0", - "\u0955\n\u00a0\u0003\u00a0\u0007\u00a0\u0958\n\u00a0\f\u00a0\u000e\u00a0", - "\u095b\u000b\u00a0\u0003\u00a1\u0003\u00a1\u0003\u00a2\u0003\u00a2\u0003", - "\u00a3\u0003\u00a3\u0003\u00a4\u0003\u00a4\u0003\u00a4\u0003\u00a4\u0003", - "\u00a4\u0003\u00a4\u0005\u00a4\u0969\n\u00a4\u0003\u00a5\u0003\u00a5", - "\u0005\u00a5\u096d\n\u00a5\u0003\u00a6\u0003\u00a6\u0003\u00a6\u0003", - "\u00a6\u0003\u00a6\u0003\u00a6\u0003\u00a7\u0003\u00a7\u0005\u00a7\u0977", - "\n\u00a7\u0003\u00a8\u0003\u00a8\u0003\u00a8\u0003\u00a9\u0003\u00a9", - "\u0003\u00aa\u0003\u00aa\u0003\u00aa\u0003\u00aa\u0003\u00aa\u0003\u00aa", - "\u0005\u00aa\u0984\n\u00aa\u0003\u00ab\u0003\u00ab\u0003\u00ab\u0002", - "\u0006\u0098\u009a\u00a2\u00a4\u00ac\u0002\u0004\u0006\b\n\f\u000e\u0010", - "\u0012\u0014\u0016\u0018\u001a\u001c\u001e \"$&(*,.02468:<>@BDFHJLN", - "PRTVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082\u0084\u0086\u0088\u008a\u008c", - "\u008e\u0090\u0092\u0094\u0096\u0098\u009a\u009c\u009e\u00a0\u00a2\u00a4", - "\u00a6\u00a8\u00aa\u00ac\u00ae\u00b0\u00b2\u00b4\u00b6\u00b8\u00ba\u00bc", - "\u00be\u00c0\u00c2\u00c4\u00c6\u00c8\u00ca\u00cc\u00ce\u00d0\u00d2\u00d4", - "\u00d6\u00d8\u00da\u00dc\u00de\u00e0\u00e2\u00e4\u00e6\u00e8\u00ea\u00ec", - "\u00ee\u00f0\u00f2\u00f4\u00f6\u00f8\u00fa\u00fc\u00fe\u0100\u0102\u0104", - "\u0106\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c", - "\u011e\u0120\u0122\u0124\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134", - "\u0136\u0138\u013a\u013c\u013e\u0140\u0142\u0144\u0146\u0148\u014a\u014c", - "\u014e\u0150\u0152\u0154\u00026\u0003\u0002BI\u0004\u0002\u001a\u001a", - "KK\u0004\u0002**..\u0003\u0002VX\u0003\u0002lm\u0004\u0002yy{{\u0003", - "\u0002\u0086\u0087\u0004\u0002\u0084\u0084\u0089\u0089\u0003\u0002B", - "C\u0004\u0002\u0003\u0003SS\u0003\u0002\u0095\u0096\u0003\u0002\u0097", - "\u0098\u0003\u0002\u009b\u009d\u0004\u0002\u0014\u0014__\u0004\u0002", - "\u0017\u0017\u00a0\u00a0\u0004\u0002BB\u00a1\u00a1\u0004\u0002\u0003", - "\u0003\u0005\n\u0004\u0002\r\u000f\u00a7\u00a8\u0003\u0002\u000b\f\u0003", - "\u0002\u0012\u0013\u0004\u0002\u000b\f\u0011\u0011\u0003\u0002$%\u0003", - "\u0002\u00b3\u00b5\u0003\u0002\u00c1\u00c5\u0003\u0002\u00c7\u00c8\u0003", - "\u0002\u00c9\u00ca\u0003\u0002\u00cc\u00cd\u0004\u0002\u0096\u0096\u00cf", - "\u00cf\u0003\u0002\u00e1\u00e2\u0003\u0002\u00e5\u00e6\u0003\u0002\u00ec", - "\u00ed\u0005\u0002\u00d9\u00d9\u00db\u00dc\u010a\u010a\u0003\u0002\u011c", - "\u0126\u0004\u00027>\u00f8\u00f8\u0003\u0002\u0127\u0129\u0005\u0002", - "16\u0116\u0116\u012d\u012e\u0006\u0002\u0116\u0116\u0118\u011a\u012d", - "\u012d\u012f\u012f\u0004\u0002\u00d3\u00d3\u0131\u0131\u0003\u0002\u013a", - "\u013b\u0004\u0002\u0102\u0108\u0143\u0143\u0004\u0002\u0114\u0115\u0144", - "\u0144\u0004\u0002\u0147\u0147\u014c\u014c\u0004\u0002\u0156\u0156\u0158", - "\u015b\u0004\u0002,,.0\u0004\u0002,,..\u0003\u0002.0\u0003\u0002,-\u0003", - "\u0002\u0159\u015a\u0003\u0002\u009b\u009c\u0004\u0002))\u0093\u0093", - "\u0003\u0002\u0003\u0004\u0003\u00021\u0152\u0002\u0ace\u0002\u0157", - "\u0003\u0002\u0002\u0002\u0004\u0163\u0003\u0002\u0002\u0002\u0006\u0175", - "\u0003\u0002\u0002\u0002\b\u0183\u0003\u0002\u0002\u0002\n\u0186\u0003", - "\u0002\u0002\u0002\f\u01a5\u0003\u0002\u0002\u0002\u000e\u01b4\u0003", - "\u0002\u0002\u0002\u0010\u01c1\u0003\u0002\u0002\u0002\u0012\u01c3\u0003", - "\u0002\u0002\u0002\u0014\u01df\u0003\u0002\u0002\u0002\u0016\u01e1\u0003", - "\u0002\u0002\u0002\u0018\u01e3\u0003\u0002\u0002\u0002\u001a\u01e6\u0003", - "\u0002\u0002\u0002\u001c\u01ed\u0003\u0002\u0002\u0002\u001e\u01ef\u0003", - "\u0002\u0002\u0002 \u020d\u0003\u0002\u0002\u0002\"\u0219\u0003\u0002", - "\u0002\u0002$\u021c\u0003\u0002\u0002\u0002&\u0225\u0003\u0002\u0002", - "\u0002(\u0229\u0003\u0002\u0002\u0002*\u022e\u0003\u0002\u0002\u0002", - ",\u023b\u0003\u0002\u0002\u0002.\u0240\u0003\u0002\u0002\u00020\u0244", - "\u0003\u0002\u0002\u00022\u0254\u0003\u0002\u0002\u00024\u0256\u0003", - "\u0002\u0002\u00026\u0268\u0003\u0002\u0002\u00028\u026a\u0003\u0002", - "\u0002\u0002:\u0273\u0003\u0002\u0002\u0002<\u027f\u0003\u0002\u0002", - "\u0002>\u0286\u0003\u0002\u0002\u0002@\u0290\u0003\u0002\u0002\u0002", - "B\u0292\u0003\u0002\u0002\u0002D\u0296\u0003\u0002\u0002\u0002F\u0298", - "\u0003\u0002\u0002\u0002H\u029d\u0003\u0002\u0002\u0002J\u02a5\u0003", - "\u0002\u0002\u0002L\u02ae\u0003\u0002\u0002\u0002N\u02b1\u0003\u0002", - "\u0002\u0002P\u02be\u0003\u0002\u0002\u0002R\u02c1\u0003\u0002\u0002", - "\u0002T\u02d2\u0003\u0002\u0002\u0002V\u02d4\u0003\u0002\u0002\u0002", - "X\u02d9\u0003\u0002\u0002\u0002Z\u02dd\u0003\u0002\u0002\u0002\\\u02ee", - "\u0003\u0002\u0002\u0002^\u02f1\u0003\u0002\u0002\u0002`\u02f7\u0003", - "\u0002\u0002\u0002b\u0303\u0003\u0002\u0002\u0002d\u030b\u0003\u0002", - "\u0002\u0002f\u0325\u0003\u0002\u0002\u0002h\u0332\u0003\u0002\u0002", - "\u0002j\u0339\u0003\u0002\u0002\u0002l\u033b\u0003\u0002\u0002\u0002", - "n\u0346\u0003\u0002\u0002\u0002p\u0348\u0003\u0002\u0002\u0002r\u0352", - "\u0003\u0002\u0002\u0002t\u0368\u0003\u0002\u0002\u0002v\u036a\u0003", - "\u0002\u0002\u0002x\u0371\u0003\u0002\u0002\u0002z\u037b\u0003\u0002", - "\u0002\u0002|\u039d\u0003\u0002\u0002\u0002~\u03a7\u0003\u0002\u0002", - "\u0002\u0080\u03a9\u0003\u0002\u0002\u0002\u0082\u03ad\u0003\u0002\u0002", - "\u0002\u0084\u03b5\u0003\u0002\u0002\u0002\u0086\u03b7\u0003\u0002\u0002", - "\u0002\u0088\u03ba\u0003\u0002\u0002\u0002\u008a\u03be\u0003\u0002\u0002", - "\u0002\u008c\u03da\u0003\u0002\u0002\u0002\u008e\u03dc\u0003\u0002\u0002", - "\u0002\u0090\u03de\u0003\u0002\u0002\u0002\u0092\u03e0\u0003\u0002\u0002", - "\u0002\u0094\u03e8\u0003\u0002\u0002\u0002\u0096\u03f2\u0003\u0002\u0002", - "\u0002\u0098\u03ff\u0003\u0002\u0002\u0002\u009a\u040f\u0003\u0002\u0002", - "\u0002\u009c\u0426\u0003\u0002\u0002\u0002\u009e\u0428\u0003\u0002\u0002", - "\u0002\u00a0\u044c\u0003\u0002\u0002\u0002\u00a2\u044e\u0003\u0002\u0002", - "\u0002\u00a4\u04d9\u0003\u0002\u0002\u0002\u00a6\u04e9\u0003\u0002\u0002", - "\u0002\u00a8\u0564\u0003\u0002\u0002\u0002\u00aa\u0566\u0003\u0002\u0002", - "\u0002\u00ac\u0595\u0003\u0002\u0002\u0002\u00ae\u0597\u0003\u0002\u0002", - "\u0002\u00b0\u059c\u0003\u0002\u0002\u0002\u00b2\u05a5\u0003\u0002\u0002", - "\u0002\u00b4\u05b8\u0003\u0002\u0002\u0002\u00b6\u05bb\u0003\u0002\u0002", - "\u0002\u00b8\u05c4\u0003\u0002\u0002\u0002\u00ba\u05c6\u0003\u0002\u0002", - "\u0002\u00bc\u05dd\u0003\u0002\u0002\u0002\u00be\u06ed\u0003\u0002\u0002", - "\u0002\u00c0\u070d\u0003\u0002\u0002\u0002\u00c2\u070f\u0003\u0002\u0002", - "\u0002\u00c4\u0715\u0003\u0002\u0002\u0002\u00c6\u0717\u0003\u0002\u0002", - "\u0002\u00c8\u0726\u0003\u0002\u0002\u0002\u00ca\u072e\u0003\u0002\u0002", - "\u0002\u00cc\u0730\u0003\u0002\u0002\u0002\u00ce\u074d\u0003\u0002\u0002", - "\u0002\u00d0\u076e\u0003\u0002\u0002\u0002\u00d2\u0770\u0003\u0002\u0002", - "\u0002\u00d4\u0778\u0003\u0002\u0002\u0002\u00d6\u077e\u0003\u0002\u0002", - "\u0002\u00d8\u0783\u0003\u0002\u0002\u0002\u00da\u0785\u0003\u0002\u0002", - "\u0002\u00dc\u078d\u0003\u0002\u0002\u0002\u00de\u0790\u0003\u0002\u0002", - "\u0002\u00e0\u0793\u0003\u0002\u0002\u0002\u00e2\u0796\u0003\u0002\u0002", - "\u0002\u00e4\u07a1\u0003\u0002\u0002\u0002\u00e6\u07a3\u0003\u0002\u0002", - "\u0002\u00e8\u07a5\u0003\u0002\u0002\u0002\u00ea\u07a9\u0003\u0002\u0002", - "\u0002\u00ec\u07ab\u0003\u0002\u0002\u0002\u00ee\u07ad\u0003\u0002\u0002", - "\u0002\u00f0\u07b1\u0003\u0002\u0002\u0002\u00f2\u07b5\u0003\u0002\u0002", - "\u0002\u00f4\u07b9\u0003\u0002\u0002\u0002\u00f6\u07c1\u0003\u0002\u0002", - "\u0002\u00f8\u07c5\u0003\u0002\u0002\u0002\u00fa\u088a\u0003\u0002\u0002", - "\u0002\u00fc\u088f\u0003\u0002\u0002\u0002\u00fe\u0891\u0003\u0002\u0002", - "\u0002\u0100\u0899\u0003\u0002\u0002\u0002\u0102\u08ab\u0003\u0002\u0002", - "\u0002\u0104\u08b3\u0003\u0002\u0002\u0002\u0106\u08bb\u0003\u0002\u0002", - "\u0002\u0108\u08bd\u0003\u0002\u0002\u0002\u010a\u08c1\u0003\u0002\u0002", - "\u0002\u010c\u08c8\u0003\u0002\u0002\u0002\u010e\u08cd\u0003\u0002\u0002", - "\u0002\u0110\u08cf\u0003\u0002\u0002\u0002\u0112\u08d2\u0003\u0002\u0002", - "\u0002\u0114\u08d5\u0003\u0002\u0002\u0002\u0116\u08e7\u0003\u0002\u0002", - "\u0002\u0118\u08e9\u0003\u0002\u0002\u0002\u011a\u08ef\u0003\u0002\u0002", - "\u0002\u011c\u08f3\u0003\u0002\u0002\u0002\u011e\u08f6\u0003\u0002\u0002", - "\u0002\u0120\u0901\u0003\u0002\u0002\u0002\u0122\u0909\u0003\u0002\u0002", - "\u0002\u0124\u090d\u0003\u0002\u0002\u0002\u0126\u090f\u0003\u0002\u0002", - "\u0002\u0128\u0917\u0003\u0002\u0002\u0002\u012a\u091b\u0003\u0002\u0002", - "\u0002\u012c\u0927\u0003\u0002\u0002\u0002\u012e\u092a\u0003\u0002\u0002", - "\u0002\u0130\u092c\u0003\u0002\u0002\u0002\u0132\u092e\u0003\u0002\u0002", - "\u0002\u0134\u0930\u0003\u0002\u0002\u0002\u0136\u093b\u0003\u0002\u0002", - "\u0002\u0138\u093d\u0003\u0002\u0002\u0002\u013a\u0948\u0003\u0002\u0002", - "\u0002\u013c\u094d\u0003\u0002\u0002\u0002\u013e\u0954\u0003\u0002\u0002", - "\u0002\u0140\u095c\u0003\u0002\u0002\u0002\u0142\u095e\u0003\u0002\u0002", - "\u0002\u0144\u0960\u0003\u0002\u0002\u0002\u0146\u0968\u0003\u0002\u0002", - "\u0002\u0148\u096c\u0003\u0002\u0002\u0002\u014a\u096e\u0003\u0002\u0002", - "\u0002\u014c\u0976\u0003\u0002\u0002\u0002\u014e\u0978\u0003\u0002\u0002", - "\u0002\u0150\u097b\u0003\u0002\u0002\u0002\u0152\u0983\u0003\u0002\u0002", - "\u0002\u0154\u0985\u0003\u0002\u0002\u0002\u0156\u0158\u0005:\u001e", - "\u0002\u0157\u0156\u0003\u0002\u0002\u0002\u0157\u0158\u0003\u0002\u0002", - "\u0002\u0158\u0159\u0003\u0002\u0002\u0002\u0159\u015f\u0005\u0006\u0004", - "\u0002\u015a\u015c\u0007\u001b\u0002\u0002\u015b\u015d\u0007\u0002\u0002", - "\u0003\u015c\u015b\u0003\u0002\u0002\u0002\u015c\u015d\u0003\u0002\u0002", - "\u0002\u015d\u0160\u0003\u0002\u0002\u0002\u015e\u0160\u0007\u0002\u0002", - "\u0003\u015f\u015a\u0003\u0002\u0002\u0002\u015f\u015e\u0003\u0002\u0002", - "\u0002\u0160\u0003\u0003\u0002\u0002\u0002\u0161\u0164\u0005\u0098M", - "\u0002\u0162\u0164\u0007?\u0002\u0002\u0163\u0161\u0003\u0002\u0002", - "\u0002\u0163\u0162\u0003\u0002\u0002\u0002\u0164\u016c\u0003\u0002\u0002", - "\u0002\u0165\u0168\u0007\u001a\u0002\u0002\u0166\u0169\u0005\u0098M", - "\u0002\u0167\u0169\u0007?\u0002\u0002\u0168\u0166\u0003\u0002\u0002", - "\u0002\u0168\u0167\u0003\u0002\u0002\u0002\u0169\u016b\u0003\u0002\u0002", - "\u0002\u016a\u0165\u0003\u0002\u0002\u0002\u016b\u016e\u0003\u0002\u0002", - "\u0002\u016c\u016a\u0003\u0002\u0002\u0002\u016c\u016d\u0003\u0002\u0002", - "\u0002\u016d\u0005\u0003\u0002\u0002\u0002\u016e\u016c\u0003\u0002\u0002", - "\u0002\u016f\u0171\u0005\n\u0006\u0002\u0170\u0172\u0005R*\u0002\u0171", - "\u0170\u0003\u0002\u0002\u0002\u0171\u0172\u0003\u0002\u0002\u0002\u0172", - "\u0176\u0003\u0002\u0002\u0002\u0173\u0176\u0005\u000e\b\u0002\u0174", - "\u0176\u0005\b\u0005\u0002\u0175\u016f\u0003\u0002\u0002\u0002\u0175", - "\u0173\u0003\u0002\u0002\u0002\u0175\u0174\u0003\u0002\u0002\u0002\u0176", - "\u0007\u0003\u0002\u0002\u0002\u0177\u0178\u0007\u001d\u0002\u0002\u0178", - "\u0179\u0005\b\u0005\u0002\u0179\u017a\u0007\u001e\u0002\u0002\u017a", - "\u0184\u0003\u0002\u0002\u0002\u017b\u017c\u0005\n\u0006\u0002\u017c", - "\u017e\u0005\u001e\u0010\u0002\u017d\u017f\u0005R*\u0002\u017e\u017d", - "\u0003\u0002\u0002\u0002\u017e\u017f\u0003\u0002\u0002\u0002\u017f\u0184", - "\u0003\u0002\u0002\u0002\u0180\u0181\u0005R*\u0002\u0181\u0182\u0005", - "\u001e\u0010\u0002\u0182\u0184\u0003\u0002\u0002\u0002\u0183\u0177\u0003", - "\u0002\u0002\u0002\u0183\u017b\u0003\u0002\u0002\u0002\u0183\u0180\u0003", - "\u0002\u0002\u0002\u0184\t\u0003\u0002\u0002\u0002\u0185\u0187\u0005", - ":\u001e\u0002\u0186\u0185\u0003\u0002\u0002\u0002\u0186\u0187\u0003", - "\u0002\u0002\u0002\u0187\u0196\u0003\u0002\u0002\u0002\u0188\u018a\u0005", - "\f\u0007\u0002\u0189\u018b\u0005B\"\u0002\u018a\u0189\u0003\u0002\u0002", - "\u0002\u018a\u018b\u0003\u0002\u0002\u0002\u018b\u018d\u0003\u0002\u0002", - "\u0002\u018c\u018e\u0005\u0018\r\u0002\u018d\u018c\u0003\u0002\u0002", - "\u0002\u018d\u018e\u0003\u0002\u0002\u0002\u018e\u0197\u0003\u0002\u0002", - "\u0002\u018f\u0191\u0005\u000e\b\u0002\u0190\u0192\u0005B\"\u0002\u0191", - "\u0190\u0003\u0002\u0002\u0002\u0191\u0192\u0003\u0002\u0002\u0002\u0192", - "\u0194\u0003\u0002\u0002\u0002\u0193\u0195\u0005\u0018\r\u0002\u0194", - "\u0193\u0003\u0002\u0002\u0002\u0194\u0195\u0003\u0002\u0002\u0002\u0195", - "\u0197\u0003\u0002\u0002\u0002\u0196\u0188\u0003\u0002\u0002\u0002\u0196", - "\u018f\u0003\u0002\u0002\u0002\u0197\u0199\u0003\u0002\u0002\u0002\u0198", - "\u019a\u0005 \u0011\u0002\u0199\u0198\u0003\u0002\u0002\u0002\u0199", - "\u019a\u0003\u0002\u0002\u0002\u019a\u000b\u0003\u0002\u0002\u0002\u019b", - "\u01a6\u0005\u0010\t\u0002\u019c\u019d\u0005\u000e\b\u0002\u019d\u019f", - "\u0007@\u0002\u0002\u019e\u01a0\u0005\u0086D\u0002\u019f\u019e\u0003", - "\u0002\u0002\u0002\u019f\u01a0\u0003\u0002\u0002\u0002\u01a0\u01a3\u0003", - "\u0002\u0002\u0002\u01a1\u01a4\u0005\u0010\t\u0002\u01a2\u01a4\u0005", - "\u000e\b\u0002\u01a3\u01a1\u0003\u0002\u0002\u0002\u01a3\u01a2\u0003", - "\u0002\u0002\u0002\u01a4\u01a6\u0003\u0002\u0002\u0002\u01a5\u019b\u0003", - "\u0002\u0002\u0002\u01a5\u019c\u0003\u0002\u0002\u0002\u01a6\u01b1\u0003", - "\u0002\u0002\u0002\u01a7\u01a9\u0007@\u0002\u0002\u01a8\u01aa\u0005", - "\u0086D\u0002\u01a9\u01a8\u0003\u0002\u0002\u0002\u01a9\u01aa\u0003", - "\u0002\u0002\u0002\u01aa\u01ad\u0003\u0002\u0002\u0002\u01ab\u01ae\u0005", - "\u0010\t\u0002\u01ac\u01ae\u0005\u000e\b\u0002\u01ad\u01ab\u0003\u0002", - "\u0002\u0002\u01ad\u01ac\u0003\u0002\u0002\u0002\u01ae\u01b0\u0003\u0002", - "\u0002\u0002\u01af\u01a7\u0003\u0002\u0002\u0002\u01b0\u01b3\u0003\u0002", - "\u0002\u0002\u01b1\u01af\u0003\u0002\u0002\u0002\u01b1\u01b2\u0003\u0002", - "\u0002\u0002\u01b2\r\u0003\u0002\u0002\u0002\u01b3\u01b1\u0003\u0002", - "\u0002\u0002\u01b4\u01ba\u0007\u001d\u0002\u0002\u01b5\u01bb\u0005\u000e", - "\b\u0002\u01b6\u01b8\u0005\n\u0006\u0002\u01b7\u01b9\u0005R*\u0002\u01b8", - "\u01b7\u0003\u0002\u0002\u0002\u01b8\u01b9\u0003\u0002\u0002\u0002\u01b9", - "\u01bb\u0003\u0002\u0002\u0002\u01ba\u01b5\u0003\u0002\u0002\u0002\u01ba", - "\u01b6\u0003\u0002\u0002\u0002\u01bb\u01bc\u0003\u0002\u0002\u0002\u01bc", - "\u01bd\u0007\u001e\u0002\u0002\u01bd\u000f\u0003\u0002\u0002\u0002\u01be", - "\u01c2\u0005\u0012\n\u0002\u01bf\u01c2\u0005J&\u0002\u01c0\u01c2\u0005", - "L\'\u0002\u01c1\u01be\u0003\u0002\u0002\u0002\u01c1\u01bf\u0003\u0002", - "\u0002\u0002\u01c1\u01c0\u0003\u0002\u0002\u0002\u01c2\u0011\u0003\u0002", - "\u0002\u0002\u01c3\u01c7\u0007A\u0002\u0002\u01c4\u01c6\u0005P)\u0002", - "\u01c5\u01c4\u0003\u0002\u0002\u0002\u01c6\u01c9\u0003\u0002\u0002\u0002", - "\u01c7\u01c5\u0003\u0002\u0002\u0002\u01c7\u01c8\u0003\u0002\u0002\u0002", - "\u01c8\u01ca\u0003\u0002\u0002\u0002\u01c9\u01c7\u0003\u0002\u0002\u0002", - "\u01ca\u01cc\u0005Z.\u0002\u01cb\u01cd\u0005\u001e\u0010\u0002\u01cc", - "\u01cb\u0003\u0002\u0002\u0002\u01cc\u01cd\u0003\u0002\u0002\u0002\u01cd", - "\u01cf\u0003\u0002\u0002\u0002\u01ce\u01d0\u0005F$\u0002\u01cf\u01ce", - "\u0003\u0002\u0002\u0002\u01cf\u01d0\u0003\u0002\u0002\u0002\u01d0\u01d2", - "\u0003\u0002\u0002\u0002\u01d1\u01d3\u0005`1\u0002\u01d2\u01d1\u0003", - "\u0002\u0002\u0002\u01d2\u01d3\u0003\u0002\u0002\u0002\u01d3\u01d5\u0003", - "\u0002\u0002\u0002\u01d4\u01d6\u0005> \u0002\u01d5\u01d4\u0003\u0002", - "\u0002\u0002\u01d5\u01d6\u0003\u0002\u0002\u0002\u01d6\u01d8\u0003\u0002", - "\u0002\u0002\u01d7\u01d9\u0005\"\u0012\u0002\u01d8\u01d7\u0003\u0002", - "\u0002\u0002\u01d8\u01d9\u0003\u0002\u0002\u0002\u01d9\u01db\u0003\u0002", - "\u0002\u0002\u01da\u01dc\u0005$\u0013\u0002\u01db\u01da\u0003\u0002", - "\u0002\u0002\u01db\u01dc\u0003\u0002\u0002\u0002\u01dc\u0013\u0003\u0002", - "\u0002\u0002\u01dd\u01e0\u0005\u0002\u0002\u0002\u01de\u01e0\u0005\u000e", - "\b\u0002\u01df\u01dd\u0003\u0002\u0002\u0002\u01df\u01de\u0003\u0002", - "\u0002\u0002\u01e0\u0015\u0003\u0002\u0002\u0002\u01e1\u01e2\t\u0002", - "\u0002\u0002\u01e2\u0017\u0003\u0002\u0002\u0002\u01e3\u01e4\u0007J", - "\u0002\u0002\u01e4\u01e5\u0005\u001a\u000e\u0002\u01e5\u0019\u0003\u0002", - "\u0002\u0002\u01e6\u01e9\u0005\u001c\u000f\u0002\u01e7\u01e8\t\u0003", - "\u0002\u0002\u01e8\u01ea\u0005\u001c\u000f\u0002\u01e9\u01e7\u0003\u0002", - "\u0002\u0002\u01e9\u01ea\u0003\u0002\u0002\u0002\u01ea\u001b\u0003\u0002", - "\u0002\u0002\u01eb\u01ee\u0005\u0124\u0093\u0002\u01ec\u01ee\t\u0004", - "\u0002\u0002\u01ed\u01eb\u0003\u0002\u0002\u0002\u01ed\u01ec\u0003\u0002", - "\u0002\u0002\u01ee\u001d\u0003\u0002\u0002\u0002\u01ef\u020b\u0007L", - "\u0002\u0002\u01f0\u01f1\u0007M\u0002\u0002\u01f1\u01f3\u0005\u013a", - "\u009e\u0002\u01f2\u01f4\u0005\u0112\u008a\u0002\u01f3\u01f2\u0003\u0002", - "\u0002\u0002\u01f3\u01f4\u0003\u0002\u0002\u0002\u01f4\u01f6\u0003\u0002", - "\u0002\u0002\u01f5\u01f7\u0005\u0114\u008b\u0002\u01f6\u01f5\u0003\u0002", - "\u0002\u0002\u01f6\u01f7\u0003\u0002\u0002\u0002\u01f7\u01f9\u0003\u0002", - "\u0002\u0002\u01f8\u01fa\u0005\u0118\u008d\u0002\u01f9\u01f8\u0003\u0002", - "\u0002\u0002\u01f9\u01fa\u0003\u0002\u0002\u0002\u01fa\u020c\u0003\u0002", - "\u0002\u0002\u01fb\u01fc\u0007N\u0002\u0002\u01fc\u020c\u0005\u013a", - "\u009e\u0002\u01fd\u0200\u0005\u014c\u00a7\u0002\u01fe\u0200\u0005\u00d8", - "m\u0002\u01ff\u01fd\u0003\u0002\u0002\u0002\u01ff\u01fe\u0003\u0002", - "\u0002\u0002\u0200\u0208\u0003\u0002\u0002\u0002\u0201\u0204\u0007\u001a", - "\u0002\u0002\u0202\u0205\u0005\u014c\u00a7\u0002\u0203\u0205\u0005\u00d8", - "m\u0002\u0204\u0202\u0003\u0002\u0002\u0002\u0204\u0203\u0003\u0002", - "\u0002\u0002\u0205\u0207\u0003\u0002\u0002\u0002\u0206\u0201\u0003\u0002", - "\u0002\u0002\u0207\u020a\u0003\u0002\u0002\u0002\u0208\u0206\u0003\u0002", - "\u0002\u0002\u0208\u0209\u0003\u0002\u0002\u0002\u0209\u020c\u0003\u0002", - "\u0002\u0002\u020a\u0208\u0003\u0002\u0002\u0002\u020b\u01f0\u0003\u0002", - "\u0002\u0002\u020b\u01fb\u0003\u0002\u0002\u0002\u020b\u01ff\u0003\u0002", - "\u0002\u0002\u020c\u001f\u0003\u0002\u0002\u0002\u020d\u020e\u0007O", - "\u0002\u0002\u020e\u020f\u0007P\u0002\u0002\u020f\u0215\u0007\u001d", - "\u0002\u0002\u0210\u0213\u0007.\u0002\u0002\u0211\u0212\u0007\u001a", - "\u0002\u0002\u0212\u0214\u0007.\u0002\u0002\u0213\u0211\u0003\u0002", - "\u0002\u0002\u0213\u0214\u0003\u0002\u0002\u0002\u0214\u0216\u0003\u0002", - "\u0002\u0002\u0215\u0210\u0003\u0002\u0002\u0002\u0215\u0216\u0003\u0002", - "\u0002\u0002\u0216\u0217\u0003\u0002\u0002\u0002\u0217\u0218\u0007\u001e", - "\u0002\u0002\u0218!\u0003\u0002\u0002\u0002\u0219\u021a\u0007Q\u0002", - "\u0002\u021a\u021b\u0005\u0098M\u0002\u021b#\u0003\u0002\u0002\u0002", - "\u021c\u021d\u0007R\u0002\u0002\u021d\u0222\u0005&\u0014\u0002\u021e", - "\u021f\u0007\u001a\u0002\u0002\u021f\u0221\u0005&\u0014\u0002\u0220", - "\u021e\u0003\u0002\u0002\u0002\u0221\u0224\u0003\u0002\u0002\u0002\u0222", - "\u0220\u0003\u0002\u0002\u0002\u0222\u0223\u0003\u0002\u0002\u0002\u0223", - "%\u0003\u0002\u0002\u0002\u0224\u0222\u0003\u0002\u0002\u0002\u0225", - "\u0226\u0005\u0124\u0093\u0002\u0226\u0227\u0007S\u0002\u0002\u0227", - "\u0228\u0005(\u0015\u0002\u0228\'\u0003\u0002\u0002\u0002\u0229\u022a", - "\u0007\u001d\u0002\u0002\u022a\u022b\u0005*\u0016\u0002\u022b\u022c", - "\u0007\u001e\u0002\u0002\u022c)\u0003\u0002\u0002\u0002\u022d\u022f", - "\u0005\u0124\u0093\u0002\u022e\u022d\u0003\u0002\u0002\u0002\u022e\u022f", - "\u0003\u0002\u0002\u0002\u022f\u0233\u0003\u0002\u0002\u0002\u0230\u0231", - "\u0007T\u0002\u0002\u0231\u0232\u0007U\u0002\u0002\u0232\u0234\u0005", - "\u00f4{\u0002\u0233\u0230\u0003\u0002\u0002\u0002\u0233\u0234\u0003", - "\u0002\u0002\u0002\u0234\u0236\u0003\u0002\u0002\u0002\u0235\u0237\u0005", - "B\"\u0002\u0236\u0235\u0003\u0002\u0002\u0002\u0236\u0237\u0003\u0002", - "\u0002\u0002\u0237\u0239\u0003\u0002\u0002\u0002\u0238\u023a\u0005,", - "\u0017\u0002\u0239\u0238\u0003\u0002\u0002\u0002\u0239\u023a\u0003\u0002", - "\u0002\u0002\u023a+\u0003\u0002\u0002\u0002\u023b\u023c\u0005.\u0018", - "\u0002\u023c\u023e\u00050\u0019\u0002\u023d\u023f\u00058\u001d\u0002", - "\u023e\u023d\u0003\u0002\u0002\u0002\u023e\u023f\u0003\u0002\u0002\u0002", - "\u023f-\u0003\u0002\u0002\u0002\u0240\u0241\t\u0005\u0002\u0002\u0241", - "/\u0003\u0002\u0002\u0002\u0242\u0245\u00052\u001a\u0002\u0243\u0245", - "\u00054\u001b\u0002\u0244\u0242\u0003\u0002\u0002\u0002\u0244\u0243", - "\u0003\u0002\u0002\u0002\u02451\u0003\u0002\u0002\u0002\u0246\u0247", - "\u0007Y\u0002\u0002\u0247\u0255\u0007Z\u0002\u0002\u0248\u0249\u0005", - "\u0132\u009a\u0002\u0249\u024a\u0007Z\u0002\u0002\u024a\u0255\u0003", - "\u0002\u0002\u0002\u024b\u024c\u0007*\u0002\u0002\u024c\u0255\u0007", - "Z\u0002\u0002\u024d\u024e\u0007[\u0002\u0002\u024e\u024f\u0005\u0098", - "M\u0002\u024f\u0250\u0005\u00eav\u0002\u0250\u0251\u0007Z\u0002\u0002", - "\u0251\u0255\u0003\u0002\u0002\u0002\u0252\u0253\u0007\\\u0002\u0002", - "\u0253\u0255\u0007]\u0002\u0002\u0254\u0246\u0003\u0002\u0002\u0002", - "\u0254\u0248\u0003\u0002\u0002\u0002\u0254\u024b\u0003\u0002\u0002\u0002", - "\u0254\u024d\u0003\u0002\u0002\u0002\u0254\u0252\u0003\u0002\u0002\u0002", - "\u02553\u0003\u0002\u0002\u0002\u0256\u0257\u0007^\u0002\u0002\u0257", - "\u0258\u00056\u001c\u0002\u0258\u0259\u0007_\u0002\u0002\u0259\u025a", - "\u00056\u001c\u0002\u025a5\u0003\u0002\u0002\u0002\u025b\u0269\u0005", - "2\u001a\u0002\u025c\u025d\u0007Y\u0002\u0002\u025d\u0269\u0007`\u0002", - "\u0002\u025e\u025f\u0005\u0132\u009a\u0002\u025f\u0260\u0007`\u0002", - "\u0002\u0260\u0269\u0003\u0002\u0002\u0002\u0261\u0262\u0007*\u0002", - "\u0002\u0262\u0269\u0007`\u0002\u0002\u0263\u0264\u0007[\u0002\u0002", - "\u0264\u0265\u0005\u0098M\u0002\u0265\u0266\u0005\u00eav\u0002\u0266", - "\u0267\u0007`\u0002\u0002\u0267\u0269\u0003\u0002\u0002\u0002\u0268", - "\u025b\u0003\u0002\u0002\u0002\u0268\u025c\u0003\u0002\u0002\u0002\u0268", - "\u025e\u0003\u0002\u0002\u0002\u0268\u0261\u0003\u0002\u0002\u0002\u0268", - "\u0263\u0003\u0002\u0002\u0002\u02697\u0003\u0002\u0002\u0002\u026a", - "\u0271\u0007a\u0002\u0002\u026b\u026c\u0007\\\u0002\u0002\u026c\u0272", - "\u0007]\u0002\u0002\u026d\u0272\u0007b\u0002\u0002\u026e\u0272\u0007", - "c\u0002\u0002\u026f\u0270\u0007d\u0002\u0002\u0270\u0272\u0007e\u0002", - "\u0002\u0271\u026b\u0003\u0002\u0002\u0002\u0271\u026d\u0003\u0002\u0002", - "\u0002\u0271\u026e\u0003\u0002\u0002\u0002\u0271\u026f\u0003\u0002\u0002", - "\u0002\u02729\u0003\u0002\u0002\u0002\u0273\u0275\u0007f\u0002\u0002", - "\u0274\u0276\u0007h\u0002\u0002\u0275\u0274\u0003\u0002\u0002\u0002", - "\u0275\u0276\u0003\u0002\u0002\u0002\u0276\u0277\u0003\u0002\u0002\u0002", - "\u0277\u027c\u0005<\u001f\u0002\u0278\u0279\u0007\u001a\u0002\u0002", - "\u0279\u027b\u0005<\u001f\u0002\u027a\u0278\u0003\u0002\u0002\u0002", - "\u027b\u027e\u0003\u0002\u0002\u0002\u027c\u027a\u0003\u0002\u0002\u0002", - "\u027c\u027d\u0003\u0002\u0002\u0002\u027d;\u0003\u0002\u0002\u0002", - "\u027e\u027c\u0003\u0002\u0002\u0002\u027f\u0281\u0005\u0124\u0093\u0002", - "\u0280\u0282\u0005\u011e\u0090\u0002\u0281\u0280\u0003\u0002\u0002\u0002", - "\u0281\u0282\u0003\u0002\u0002\u0002\u0282\u0283\u0003\u0002\u0002\u0002", - "\u0283\u0284\u0007S\u0002\u0002\u0284\u0285\u0005\u0014\u000b\u0002", - "\u0285=\u0003\u0002\u0002\u0002\u0286\u0287\u0007b\u0002\u0002\u0287", - "\u0288\u0007U\u0002\u0002\u0288\u028a\u0005\u00f4{\u0002\u0289\u028b", - "\u0005@!\u0002\u028a\u0289\u0003\u0002\u0002\u0002\u028a\u028b\u0003", - "\u0002\u0002\u0002\u028b?\u0003\u0002\u0002\u0002\u028c\u028d\u0007", - "f\u0002\u0002\u028d\u0291\u0007i\u0002\u0002\u028e\u028f\u0007f\u0002", - "\u0002\u028f\u0291\u0007j\u0002\u0002\u0290\u028c\u0003\u0002\u0002", - "\u0002\u0290\u028e\u0003\u0002\u0002\u0002\u0291A\u0003\u0002\u0002", - "\u0002\u0292\u0293\u0007k\u0002\u0002\u0293\u0294\u0007U\u0002\u0002", - "\u0294\u0295\u0005\u00f4{\u0002\u0295C\u0003\u0002\u0002\u0002\u0296", - "\u0297\t\u0006\u0002\u0002\u0297E\u0003\u0002\u0002\u0002\u0298\u029b", - "\u0007n\u0002\u0002\u0299\u029c\u0007o\u0002\u0002\u029a\u029c\u0005", - "H%\u0002\u029b\u0299\u0003\u0002\u0002\u0002\u029b\u029a\u0003\u0002", - "\u0002\u0002\u029cG\u0003\u0002\u0002\u0002\u029d\u02a2\u0005b2\u0002", - "\u029e\u029f\u0007\u001a\u0002\u0002\u029f\u02a1\u0005b2\u0002\u02a0", - "\u029e\u0003\u0002\u0002\u0002\u02a1\u02a4\u0003\u0002\u0002\u0002\u02a2", - "\u02a0\u0003\u0002\u0002\u0002\u02a2\u02a3\u0003\u0002\u0002\u0002\u02a3", - "I\u0003\u0002\u0002\u0002\u02a4\u02a2\u0003\u0002\u0002\u0002\u02a5", - "\u02a6\u0007p\u0002\u0002\u02a6\u02ab\u0005N(\u0002\u02a7\u02a8\u0007", - "\u001a\u0002\u0002\u02a8\u02aa\u0005N(\u0002\u02a9\u02a7\u0003\u0002", - "\u0002\u0002\u02aa\u02ad\u0003\u0002\u0002\u0002\u02ab\u02a9\u0003\u0002", - "\u0002\u0002\u02ab\u02ac\u0003\u0002\u0002\u0002\u02acK\u0003\u0002", - "\u0002\u0002\u02ad\u02ab\u0003\u0002\u0002\u0002\u02ae\u02af\u0007q", - "\u0002\u0002\u02af\u02b0\u0005\u012a\u0096\u0002\u02b0M\u0003\u0002", - "\u0002\u0002\u02b1\u02b2\u0007]\u0002\u0002\u02b2\u02b4\u0007\u001d", - "\u0002\u0002\u02b3\u02b5\u0005\u0004\u0003\u0002\u02b4\u02b3\u0003\u0002", - "\u0002\u0002\u02b4\u02b5\u0003\u0002\u0002\u0002\u02b5\u02b6\u0003\u0002", - "\u0002\u0002\u02b6\u02b7\u0007\u001e\u0002\u0002\u02b7O\u0003\u0002", - "\u0002\u0002\u02b8\u02bf\u0005\u0016\f\u0002\u02b9\u02bf\u0007r\u0002", - "\u0002\u02ba\u02bf\u0007s\u0002\u0002\u02bb\u02bc\u0007t\u0002\u0002", - "\u02bc\u02bd\u0007\u0003\u0002\u0002\u02bd\u02bf\u0005\u0130\u0099\u0002", - "\u02be\u02b8\u0003\u0002\u0002\u0002\u02be\u02b9\u0003\u0002\u0002\u0002", - "\u02be\u02ba\u0003\u0002\u0002\u0002\u02be\u02bb\u0003\u0002\u0002\u0002", - "\u02bfQ\u0003\u0002\u0002\u0002\u02c0\u02c2\u0005T+\u0002\u02c1\u02c0", - "\u0003\u0002\u0002\u0002\u02c2\u02c3\u0003\u0002\u0002\u0002\u02c3\u02c1", - "\u0003\u0002\u0002\u0002\u02c3\u02c4\u0003\u0002\u0002\u0002\u02c4S", - "\u0003\u0002\u0002\u0002\u02c5\u02c6\u0007u\u0002\u0002\u02c6\u02c9", - "\u0005V,\u0002\u02c7\u02c8\u0007v\u0002\u0002\u02c8\u02ca\u0005\u0120", - "\u0091\u0002\u02c9\u02c7\u0003\u0002\u0002\u0002\u02c9\u02ca\u0003\u0002", - "\u0002\u0002\u02ca\u02cc\u0003\u0002\u0002\u0002\u02cb\u02cd\u0005X", - "-\u0002\u02cc\u02cb\u0003\u0002\u0002\u0002\u02cc\u02cd\u0003\u0002", - "\u0002\u0002\u02cd\u02d3\u0003\u0002\u0002\u0002\u02ce\u02cf\u0007w", - "\u0002\u0002\u02cf\u02d0\u0007x\u0002\u0002\u02d0\u02d1\u0007y\u0002", - "\u0002\u02d1\u02d3\u0007z\u0002\u0002\u02d2\u02c5\u0003\u0002\u0002", - "\u0002\u02d2\u02ce\u0003\u0002\u0002\u0002\u02d3U\u0003\u0002\u0002", - "\u0002\u02d4\u02d5\t\u0007\u0002\u0002\u02d5W\u0003\u0002\u0002\u0002", - "\u02d6\u02d7\u0007|\u0002\u0002\u02d7\u02da\u0007}\u0002\u0002\u02d8", - "\u02da\u0007~\u0002\u0002\u02d9\u02d6\u0003\u0002\u0002\u0002\u02d9", - "\u02d8\u0003\u0002\u0002\u0002\u02daY\u0003\u0002\u0002\u0002\u02db", - "\u02de\u0005\\/\u0002\u02dc\u02de\u0007\r\u0002\u0002\u02dd\u02db\u0003", - "\u0002\u0002\u0002\u02dd\u02dc\u0003\u0002\u0002\u0002\u02de\u02e3\u0003", - "\u0002\u0002\u0002\u02df\u02e0\u0007\u001a\u0002\u0002\u02e0\u02e2\u0005", - "\\/\u0002\u02e1\u02df\u0003\u0002\u0002\u0002\u02e2\u02e5\u0003\u0002", - "\u0002\u0002\u02e3\u02e1\u0003\u0002\u0002\u0002\u02e3\u02e4\u0003\u0002", - "\u0002\u0002\u02e4[\u0003\u0002\u0002\u0002\u02e5\u02e3\u0003\u0002", - "\u0002\u0002\u02e6\u02e8\u0005\u012a\u0096\u0002\u02e7\u02e9\u0005^", - "0\u0002\u02e8\u02e7\u0003\u0002\u0002\u0002\u02e8\u02e9\u0003\u0002", - "\u0002\u0002\u02e9\u02ef\u0003\u0002\u0002\u0002\u02ea\u02ec\u0005\u0098", - "M\u0002\u02eb\u02ed\u0005^0\u0002\u02ec\u02eb\u0003\u0002\u0002\u0002", - "\u02ec\u02ed\u0003\u0002\u0002\u0002\u02ed\u02ef\u0003\u0002\u0002\u0002", - "\u02ee\u02e6\u0003\u0002\u0002\u0002\u02ee\u02ea\u0003\u0002\u0002\u0002", - "\u02ef]\u0003\u0002\u0002\u0002\u02f0\u02f2\u0007S\u0002\u0002\u02f1", - "\u02f0\u0003\u0002\u0002\u0002\u02f1\u02f2\u0003\u0002\u0002\u0002\u02f2", - "\u02f5\u0003\u0002\u0002\u0002\u02f3\u02f6\u0005\u0124\u0093\u0002\u02f4", - "\u02f6\u0005\u013a\u009e\u0002\u02f5\u02f3\u0003\u0002\u0002\u0002\u02f5", - "\u02f4\u0003\u0002\u0002\u0002\u02f6_\u0003\u0002\u0002\u0002\u02f7", - "\u02f8\u0007\u007f\u0002\u0002\u02f8\u02f9\u0005\u0098M\u0002\u02f9", - "a\u0003\u0002\u0002\u0002\u02fa\u0304\u0005n8\u0002\u02fb\u02fe\u0007", - "\u001f\u0002\u0002\u02fc\u02ff\u0005\u0124\u0093\u0002\u02fd\u02ff\u0007", - "\u0080\u0002\u0002\u02fe\u02fc\u0003\u0002\u0002\u0002\u02fe\u02fd\u0003", - "\u0002\u0002\u0002\u02ff\u0300\u0003\u0002\u0002\u0002\u0300\u0301\u0005", - "d3\u0002\u0301\u0302\u0007 \u0002\u0002\u0302\u0304\u0003\u0002\u0002", - "\u0002\u0303\u02fa\u0003\u0002\u0002\u0002\u0303\u02fb\u0003\u0002\u0002", - "\u0002\u0304\u0308\u0003\u0002\u0002\u0002\u0305\u0307\u0005f4\u0002", - "\u0306\u0305\u0003\u0002\u0002\u0002\u0307\u030a\u0003\u0002\u0002\u0002", - "\u0308\u0306\u0003\u0002\u0002\u0002\u0308\u0309\u0003\u0002\u0002\u0002", - "\u0309c\u0003\u0002\u0002\u0002\u030a\u0308\u0003\u0002\u0002\u0002", - "\u030b\u030f\u0005n8\u0002\u030c\u030e\u0005f4\u0002\u030d\u030c\u0003", - "\u0002\u0002\u0002\u030e\u0311\u0003\u0002\u0002\u0002\u030f\u030d\u0003", - "\u0002\u0002\u0002\u030f\u0310\u0003\u0002\u0002\u0002\u0310e\u0003", - "\u0002\u0002\u0002\u0311\u030f\u0003\u0002\u0002\u0002\u0312\u0313\u0005", - "j6\u0002\u0313\u0318\u0005b2\u0002\u0314\u0315\u0007\u0081\u0002\u0002", - "\u0315\u0319\u0005\u0098M\u0002\u0316\u0317\u0007\u0082\u0002\u0002", - "\u0317\u0319\u0005\u0128\u0095\u0002\u0318\u0314\u0003\u0002\u0002\u0002", - "\u0318\u0316\u0003\u0002\u0002\u0002\u0318\u0319\u0003\u0002\u0002\u0002", - "\u0319\u0326\u0003\u0002\u0002\u0002\u031a\u031b\u0005l7\u0002\u031b", - "\u0320\u0005b2\u0002\u031c\u031d\u0007\u0081\u0002\u0002\u031d\u0321", - "\u0005\u0098M\u0002\u031e\u031f\u0007\u0082\u0002\u0002\u031f\u0321", - "\u0005\u0128\u0095\u0002\u0320\u031c\u0003\u0002\u0002\u0002\u0320\u031e", - "\u0003\u0002\u0002\u0002\u0321\u0326\u0003\u0002\u0002\u0002\u0322\u0323", - "\u0005h5\u0002\u0323\u0324\u0005n8\u0002\u0324\u0326\u0003\u0002\u0002", - "\u0002\u0325\u0312\u0003\u0002\u0002\u0002\u0325\u031a\u0003\u0002\u0002", - "\u0002\u0325\u0322\u0003\u0002\u0002\u0002\u0326g\u0003\u0002\u0002", - "\u0002\u0327\u0329\u0007\u0083\u0002\u0002\u0328\u032a\u0007\u0084\u0002", - "\u0002\u0329\u0328\u0003\u0002\u0002\u0002\u0329\u032a\u0003\u0002\u0002", - "\u0002\u032a\u032b\u0003\u0002\u0002\u0002\u032b\u0333\u0007\u0085\u0002", - "\u0002\u032c\u032d\u0007\u0083\u0002\u0002\u032d\u032f\t\b\u0002\u0002", - "\u032e\u0330\u0007\u0088\u0002\u0002\u032f\u032e\u0003\u0002\u0002\u0002", - "\u032f\u0330\u0003\u0002\u0002\u0002\u0330\u0331\u0003\u0002\u0002\u0002", - "\u0331\u0333\u0007\u0085\u0002\u0002\u0332\u0327\u0003\u0002\u0002\u0002", - "\u0332\u032c\u0003\u0002\u0002\u0002\u0333i\u0003\u0002\u0002\u0002", - "\u0334\u0336\t\t\u0002\u0002\u0335\u0334\u0003\u0002\u0002\u0002\u0335", - "\u0336\u0003\u0002\u0002\u0002\u0336\u0337\u0003\u0002\u0002\u0002\u0337", - "\u033a\u0007\u0085\u0002\u0002\u0338\u033a\u0007D\u0002\u0002\u0339", - "\u0335\u0003\u0002\u0002\u0002\u0339\u0338\u0003\u0002\u0002\u0002\u033a", - "k\u0003\u0002\u0002\u0002\u033b\u033d\t\b\u0002\u0002\u033c\u033e\u0007", - "\u0088\u0002\u0002\u033d\u033c\u0003\u0002\u0002\u0002\u033d\u033e\u0003", - "\u0002\u0002\u0002\u033e\u033f\u0003\u0002\u0002\u0002\u033f\u0340\u0007", - "\u0085\u0002\u0002\u0340m\u0003\u0002\u0002\u0002\u0341\u0347\u0005", - "p9\u0002\u0342\u0347\u0005r:\u0002\u0343\u0347\u0005t;\u0002\u0344\u0347", - "\u0005v<\u0002\u0345\u0347\u0005x=\u0002\u0346\u0341\u0003\u0002\u0002", - "\u0002\u0346\u0342\u0003\u0002\u0002\u0002\u0346\u0343\u0003\u0002\u0002", - "\u0002\u0346\u0344\u0003\u0002\u0002\u0002\u0346\u0345\u0003\u0002\u0002", - "\u0002\u0347o\u0003\u0002\u0002\u0002\u0348\u034a\u0005\u012a\u0096", - "\u0002\u0349\u034b\u0005\u011c\u008f\u0002\u034a\u0349\u0003\u0002\u0002", - "\u0002\u034a\u034b\u0003\u0002\u0002\u0002\u034b\u034d\u0003\u0002\u0002", - "\u0002\u034c\u034e\u0005\u0088E\u0002\u034d\u034c\u0003\u0002\u0002", - "\u0002\u034d\u034e\u0003\u0002\u0002\u0002\u034e\u0350\u0003\u0002\u0002", - "\u0002\u034f\u0351\u0005\u008aF\u0002\u0350\u034f\u0003\u0002\u0002", - "\u0002\u0350\u0351\u0003\u0002\u0002\u0002\u0351q\u0003\u0002\u0002", - "\u0002\u0352\u0355\u0007\u001d\u0002\u0002\u0353\u0356\u0005p9\u0002", - "\u0354\u0356\u0005r:\u0002\u0355\u0353\u0003\u0002\u0002\u0002\u0355", - "\u0354\u0003\u0002\u0002\u0002\u0356\u0357\u0003\u0002\u0002\u0002\u0357", - "\u0358\u0007\u001e\u0002\u0002\u0358s\u0003\u0002\u0002\u0002\u0359", - "\u035b\u0005\u0014\u000b\u0002\u035a\u035c\u0005\u0088E\u0002\u035b", - "\u035a\u0003\u0002\u0002\u0002\u035b\u035c\u0003\u0002\u0002\u0002\u035c", - "\u035e\u0003\u0002\u0002\u0002\u035d\u035f\u0005\u011e\u0090\u0002\u035e", - "\u035d\u0003\u0002\u0002\u0002\u035e\u035f\u0003\u0002\u0002\u0002\u035f", - "\u0369\u0003\u0002\u0002\u0002\u0360\u0361\u0007\u008a\u0002\u0002\u0361", - "\u0363\u0005\u0014\u000b\u0002\u0362\u0364\u0005\u0088E\u0002\u0363", - "\u0362\u0003\u0002\u0002\u0002\u0363\u0364\u0003\u0002\u0002\u0002\u0364", - "\u0366\u0003\u0002\u0002\u0002\u0365\u0367\u0005\u011e\u0090\u0002\u0366", - "\u0365\u0003\u0002\u0002\u0002\u0366\u0367\u0003\u0002\u0002\u0002\u0367", - "\u0369\u0003\u0002\u0002\u0002\u0368\u0359\u0003\u0002\u0002\u0002\u0368", - "\u0360\u0003\u0002\u0002\u0002\u0369u\u0003\u0002\u0002\u0002\u036a", - "\u036d\u0007\u001d\u0002\u0002\u036b\u036e\u0005H%\u0002\u036c\u036e", - "\u0005v<\u0002\u036d\u036b\u0003\u0002\u0002\u0002\u036d\u036c\u0003", - "\u0002\u0002\u0002\u036e\u036f\u0003\u0002\u0002\u0002\u036f\u0370\u0007", - "\u001e\u0002\u0002\u0370w\u0003\u0002\u0002\u0002\u0371\u0372\u0007", - "\u008b\u0002\u0002\u0372\u0373\u0007\u001d\u0002\u0002\u0373\u0374\u0005", - "\u0098M\u0002\u0374\u0375\u0007\u001a\u0002\u0002\u0375\u0376\u0005", - "\u013a\u009e\u0002\u0376\u0377\u0005z>\u0002\u0377\u0379\u0007\u001e", - "\u0002\u0002\u0378\u037a\u0005\u0088E\u0002\u0379\u0378\u0003\u0002", - "\u0002\u0002\u0379\u037a\u0003\u0002\u0002\u0002\u037ay\u0003\u0002", - "\u0002\u0002\u037b\u037c\u0007\u008c\u0002\u0002\u037c\u037d\u0007\u001d", - "\u0002\u0002\u037d\u0382\u0005|?\u0002\u037e\u037f\u0007\u001a\u0002", - "\u0002\u037f\u0381\u0005|?\u0002\u0380\u037e\u0003\u0002\u0002\u0002", - "\u0381\u0384\u0003\u0002\u0002\u0002\u0382\u0380\u0003\u0002\u0002\u0002", - "\u0382\u0383\u0003\u0002\u0002\u0002\u0383\u0385\u0003\u0002\u0002\u0002", - "\u0384\u0382\u0003\u0002\u0002\u0002\u0385\u0386\u0007\u001e\u0002\u0002", - "\u0386{\u0003\u0002\u0002\u0002\u0387\u0388\u0005\u0124\u0093\u0002", - "\u0388\u0389\u0007u\u0002\u0002\u0389\u038a\u0007\u008d\u0002\u0002", - "\u038a\u039e\u0003\u0002\u0002\u0002\u038b\u038c\u0005\u0124\u0093\u0002", - "\u038c\u038e\u0005\u00fa~\u0002\u038d\u038f\u0005\u0110\u0089\u0002", - "\u038e\u038d\u0003\u0002\u0002\u0002\u038e\u038f\u0003\u0002\u0002\u0002", - "\u038f\u0391\u0003\u0002\u0002\u0002\u0390\u0392\u0007\u008e\u0002\u0002", - "\u0391\u0390\u0003\u0002\u0002\u0002\u0391\u0392\u0003\u0002\u0002\u0002", - "\u0392\u0393\u0003\u0002\u0002\u0002\u0393\u0394\u0007\u008f\u0002\u0002", - "\u0394\u0396\u0005\u013a\u009e\u0002\u0395\u0397\u0005~@\u0002\u0396", - "\u0395\u0003\u0002\u0002\u0002\u0396\u0397\u0003\u0002\u0002\u0002\u0397", - "\u039e\u0003\u0002\u0002\u0002\u0398\u0399\u0007\u0090\u0002\u0002\u0399", - "\u039a\u0007\u008f\u0002\u0002\u039a\u039b\u0005\u013a\u009e\u0002\u039b", - "\u039c\u0005z>\u0002\u039c\u039e\u0003\u0002\u0002\u0002\u039d\u0387", - "\u0003\u0002\u0002\u0002\u039d\u038b\u0003\u0002\u0002\u0002\u039d\u0398", - "\u0003\u0002\u0002\u0002\u039e}\u0003\u0002\u0002\u0002\u039f\u03a1", - "\u0005\u0080A\u0002\u03a0\u03a2\u0005\u0082B\u0002\u03a1\u03a0\u0003", - "\u0002\u0002\u0002\u03a1\u03a2\u0003\u0002\u0002\u0002\u03a2\u03a8\u0003", - "\u0002\u0002\u0002\u03a3\u03a5\u0005\u0082B\u0002\u03a4\u03a6\u0005", - "\u0080A\u0002\u03a5\u03a4\u0003\u0002\u0002\u0002\u03a5\u03a6\u0003", - "\u0002\u0002\u0002\u03a6\u03a8\u0003\u0002\u0002\u0002\u03a7\u039f\u0003", - "\u0002\u0002\u0002\u03a7\u03a3\u0003\u0002\u0002\u0002\u03a8\u007f\u0003", - "\u0002\u0002\u0002\u03a9\u03aa\u0005\u0084C\u0002\u03aa\u03ab\u0007", - "\u0081\u0002\u0002\u03ab\u03ac\u0007\u0091\u0002\u0002\u03ac\u0081\u0003", - "\u0002\u0002\u0002\u03ad\u03ae\u0005\u0084C\u0002\u03ae\u03af\u0007", - "\u0081\u0002\u0002\u03af\u03b0\u0007\u0092\u0002\u0002\u03b0\u0083\u0003", - "\u0002\u0002\u0002\u03b1\u03b6\u0007\u0092\u0002\u0002\u03b2\u03b6\u0007", - "\u0093\u0002\u0002\u03b3\u03b4\u0007?\u0002\u0002\u03b4\u03b6\u0005", - "\u013a\u009e\u0002\u03b5\u03b1\u0003\u0002\u0002\u0002\u03b5\u03b2\u0003", - "\u0002\u0002\u0002\u03b5\u03b3\u0003\u0002\u0002\u0002\u03b6\u0085\u0003", - "\u0002\u0002\u0002\u03b7\u03b8\t\n\u0002\u0002\u03b8\u0087\u0003\u0002", - "\u0002\u0002\u03b9\u03bb\t\u000b\u0002\u0002\u03ba\u03b9\u0003\u0002", - "\u0002\u0002\u03ba\u03bb\u0003\u0002\u0002\u0002\u03bb\u03bc\u0003\u0002", - "\u0002\u0002\u03bc\u03bd\u0005\u0124\u0093\u0002\u03bd\u0089\u0003\u0002", - "\u0002\u0002\u03be\u03c3\u0005\u008cG\u0002\u03bf\u03c0\u0007\u001a", - "\u0002\u0002\u03c0\u03c2\u0005\u008cG\u0002\u03c1\u03bf\u0003\u0002", - "\u0002\u0002\u03c2\u03c5\u0003\u0002\u0002\u0002\u03c3\u03c1\u0003\u0002", - "\u0002\u0002\u03c3\u03c4\u0003\u0002\u0002\u0002\u03c4\u008b\u0003\u0002", - "\u0002\u0002\u03c5\u03c3\u0003\u0002\u0002\u0002\u03c6\u03c7\u0005\u008e", - "H\u0002\u03c7\u03c9\u0005\u0090I\u0002\u03c8\u03ca\u0005\u0092J\u0002", - "\u03c9\u03c8\u0003\u0002\u0002\u0002\u03c9\u03ca\u0003\u0002\u0002\u0002", - "\u03ca\u03cb\u0003\u0002\u0002\u0002\u03cb\u03cc\u0007\u001d\u0002\u0002", - "\u03cc\u03cd\u0005\u0094K\u0002\u03cd\u03ce\u0007\u001e\u0002\u0002", - "\u03ce\u03db\u0003\u0002\u0002\u0002\u03cf\u03d0\u0007\u0094\u0002\u0002", - "\u03d0\u03d2\u0005\u0090I\u0002\u03d1\u03d3\u0005\u0092J\u0002\u03d2", - "\u03d1\u0003\u0002\u0002\u0002\u03d2\u03d3\u0003\u0002\u0002\u0002\u03d3", - "\u03d4\u0003\u0002\u0002\u0002\u03d4\u03d6\u0007\u001d\u0002\u0002\u03d5", - "\u03d7\u0005\u0094K\u0002\u03d6\u03d5\u0003\u0002\u0002\u0002\u03d6", - "\u03d7\u0003\u0002\u0002\u0002\u03d7\u03d8\u0003\u0002\u0002\u0002\u03d8", - "\u03d9\u0007\u001e\u0002\u0002\u03d9\u03db\u0003\u0002\u0002\u0002\u03da", - "\u03c6\u0003\u0002\u0002\u0002\u03da\u03cf\u0003\u0002\u0002\u0002\u03db", - "\u008d\u0003\u0002\u0002\u0002\u03dc\u03dd\t\f\u0002\u0002\u03dd\u008f", - "\u0003\u0002\u0002\u0002\u03de\u03df\t\r\u0002\u0002\u03df\u0091\u0003", - "\u0002\u0002\u0002\u03e0\u03e6\u0007u\u0002\u0002\u03e1\u03e7\u0007", - "\u0085\u0002\u0002\u03e2\u03e3\u0007k\u0002\u0002\u03e3\u03e7\u0007", - "U\u0002\u0002\u03e4\u03e5\u0007b\u0002\u0002\u03e5\u03e7\u0007U\u0002", - "\u0002\u03e6\u03e1\u0003\u0002\u0002\u0002\u03e6\u03e2\u0003\u0002\u0002", - "\u0002\u03e6\u03e4\u0003\u0002\u0002\u0002\u03e7\u0093\u0003\u0002\u0002", - "\u0002\u03e8\u03ed\u0005\u0096L\u0002\u03e9\u03ea\u0007\u001a\u0002", - "\u0002\u03ea\u03ec\u0005\u0096L\u0002\u03eb\u03e9\u0003\u0002\u0002", - "\u0002\u03ec\u03ef\u0003\u0002\u0002\u0002\u03ed\u03eb\u0003\u0002\u0002", - "\u0002\u03ed\u03ee\u0003\u0002\u0002\u0002\u03ee\u0095\u0003\u0002\u0002", - "\u0002\u03ef\u03ed\u0003\u0002\u0002\u0002\u03f0\u03f3\u0005\u0124\u0093", - "\u0002\u03f1\u03f3\u0007\u0099\u0002\u0002\u03f2\u03f0\u0003\u0002\u0002", - "\u0002\u03f2\u03f1\u0003\u0002\u0002\u0002\u03f3\u0097\u0003\u0002\u0002", - "\u0002\u03f4\u03f5\bM\u0001\u0002\u03f5\u03fb\u0005\u009aN\u0002\u03f6", - "\u03f8\u0007\u009a\u0002\u0002\u03f7\u03f9\u0005\u00e6t\u0002\u03f8", - "\u03f7\u0003\u0002\u0002\u0002\u03f8\u03f9\u0003\u0002\u0002\u0002\u03f9", - "\u03fa\u0003\u0002\u0002\u0002\u03fa\u03fc\t\u000e\u0002\u0002\u03fb", - "\u03f6\u0003\u0002\u0002\u0002\u03fb\u03fc\u0003\u0002\u0002\u0002\u03fc", - "\u0400\u0003\u0002\u0002\u0002\u03fd\u03fe\u0007\u009e\u0002\u0002\u03fe", - "\u0400\u0005\u0098M\u0006\u03ff\u03f4\u0003\u0002\u0002\u0002\u03ff", - "\u03fd\u0003\u0002\u0002\u0002\u0400\u040c\u0003\u0002\u0002\u0002\u0401", - "\u0402\f\u0005\u0002\u0002\u0402\u0403\t\u000f\u0002\u0002\u0403\u040b", - "\u0005\u0098M\u0006\u0404\u0405\f\u0004\u0002\u0002\u0405\u0406\u0007", - "\u009f\u0002\u0002\u0406\u040b\u0005\u0098M\u0005\u0407\u0408\f\u0003", - "\u0002\u0002\u0408\u0409\t\u0010\u0002\u0002\u0409\u040b\u0005\u0098", - "M\u0004\u040a\u0401\u0003\u0002\u0002\u0002\u040a\u0404\u0003\u0002", - "\u0002\u0002\u040a\u0407\u0003\u0002\u0002\u0002\u040b\u040e\u0003\u0002", - "\u0002\u0002\u040c\u040a\u0003\u0002\u0002\u0002\u040c\u040d\u0003\u0002", - "\u0002\u0002\u040d\u0099\u0003\u0002\u0002\u0002\u040e\u040c\u0003\u0002", - "\u0002\u0002\u040f\u0410\bN\u0001\u0002\u0410\u0411\u0005\u009eP\u0002", - "\u0411\u0423\u0003\u0002\u0002\u0002\u0412\u0413\f\u0005\u0002\u0002", - "\u0413\u0415\u0007\u009a\u0002\u0002\u0414\u0416\u0005\u00e6t\u0002", - "\u0415\u0414\u0003\u0002\u0002\u0002\u0415\u0416\u0003\u0002\u0002\u0002", - "\u0416\u0417\u0003\u0002\u0002\u0002\u0417\u0422\u0007\u0093\u0002\u0002", - "\u0418\u0419\f\u0004\u0002\u0002\u0419\u041a\u0005\u009cO\u0002\u041a", - "\u041b\u0005\u009eP\u0002\u041b\u0422\u0003\u0002\u0002\u0002\u041c", - "\u041d\f\u0003\u0002\u0002\u041d\u041e\u0005\u009cO\u0002\u041e\u041f", - "\t\u0011\u0002\u0002\u041f\u0420\u0005\u0014\u000b\u0002\u0420\u0422", - "\u0003\u0002\u0002\u0002\u0421\u0412\u0003\u0002\u0002\u0002\u0421\u0418", - "\u0003\u0002\u0002\u0002\u0421\u041c\u0003\u0002\u0002\u0002\u0422\u0425", - "\u0003\u0002\u0002\u0002\u0423\u0421\u0003\u0002\u0002\u0002\u0423\u0424", - "\u0003\u0002\u0002\u0002\u0424\u009b\u0003\u0002\u0002\u0002\u0425\u0423", - "\u0003\u0002\u0002\u0002\u0426\u0427\t\u0012\u0002\u0002\u0427\u009d", - "\u0003\u0002\u0002\u0002\u0428\u0435\u0005\u00a2R\u0002\u0429\u042b", - "\u0005\u00e6t\u0002\u042a\u0429\u0003\u0002\u0002\u0002\u042a\u042b", - "\u0003\u0002\u0002\u0002\u042b\u042c\u0003\u0002\u0002\u0002\u042c\u0436", - "\u0005\u00a0Q\u0002\u042d\u042f\u0007\u00a2\u0002\u0002\u042e\u0430", - "\u0007v\u0002\u0002\u042f\u042e\u0003\u0002\u0002\u0002\u042f\u0430", - "\u0003\u0002\u0002\u0002\u0430\u0431\u0003\u0002\u0002\u0002\u0431\u0436", - "\u0005\u00f2z\u0002\u0432\u0433\u0007\u00a3\u0002\u0002\u0433\u0434", - "\u0007\u00a4\u0002\u0002\u0434\u0436\u0005\u00a2R\u0002\u0435\u042a", - "\u0003\u0002\u0002\u0002\u0435\u042d\u0003\u0002\u0002\u0002\u0435\u0432", - "\u0003\u0002\u0002\u0002\u0435\u0436\u0003\u0002\u0002\u0002\u0436\u009f", - "\u0003\u0002\u0002\u0002\u0437\u043d\u0007x\u0002\u0002\u0438\u043e", - "\u0005\u0014\u000b\u0002\u0439\u043a\u0007\u001d\u0002\u0002\u043a\u043b", - "\u0005\u00e2r\u0002\u043b\u043c\u0007\u001e\u0002\u0002\u043c\u043e", - "\u0003\u0002\u0002\u0002\u043d\u0438\u0003\u0002\u0002\u0002\u043d\u0439", - "\u0003\u0002\u0002\u0002\u043e\u044d\u0003\u0002\u0002\u0002\u043f\u0440", - "\u0007^\u0002\u0002\u0440\u0441\u0005\u00a2R\u0002\u0441\u0442\u0007", - "_\u0002\u0002\u0442\u0443\u0005\u009eP\u0002\u0443\u044d\u0003\u0002", - "\u0002\u0002\u0444\u0445\u0007\u00a4\u0002\u0002\u0445\u0448\u0005\u00a4", - "S\u0002\u0446\u0447\u0007\u00a5\u0002\u0002\u0447\u0449\u0005\u00a4", - "S\u0002\u0448\u0446\u0003\u0002\u0002\u0002\u0448\u0449\u0003\u0002", - "\u0002\u0002\u0449\u044d\u0003\u0002\u0002\u0002\u044a\u044b\u0007\u00a6", - "\u0002\u0002\u044b\u044d\u0005\u00a2R\u0002\u044c\u0437\u0003\u0002", - "\u0002\u0002\u044c\u043f\u0003\u0002\u0002\u0002\u044c\u0444\u0003\u0002", - "\u0002\u0002\u044c\u044a\u0003\u0002\u0002\u0002\u044d\u00a1\u0003\u0002", - "\u0002\u0002\u044e\u044f\bR\u0001\u0002\u044f\u0450\u0005\u00a4S\u0002", - "\u0450\u046b\u0003\u0002\u0002\u0002\u0451\u0452\f\t\u0002\u0002\u0452", - "\u0453\u0007\u0016\u0002\u0002\u0453\u046a\u0005\u00a2R\n\u0454\u0455", - "\f\b\u0002\u0002\u0455\u0456\t\u0013\u0002\u0002\u0456\u046a\u0005\u00a2", - "R\t\u0457\u0458\f\u0007\u0002\u0002\u0458\u0459\t\u0014\u0002\u0002", - "\u0459\u046a\u0005\u00a2R\b\u045a\u045b\f\u0005\u0002\u0002\u045b\u045c", - "\t\u0015\u0002\u0002\u045c\u046a\u0005\u00a2R\u0006\u045d\u045e\f\u0004", - "\u0002\u0002\u045e\u045f\u0007\u0015\u0002\u0002\u045f\u046a\u0005\u00a2", - "R\u0005\u0460\u0461\f\u0003\u0002\u0002\u0461\u0462\u0007\u0018\u0002", - "\u0002\u0462\u046a\u0005\u00a2R\u0004\u0463\u0464\f\u0006\u0002\u0002", - "\u0464\u0465\t\u0014\u0002\u0002\u0465\u0466\u0007[\u0002\u0002\u0466", - "\u0467\u0005\u0098M\u0002\u0467\u0468\u0005\u00eav\u0002\u0468\u046a", - "\u0003\u0002\u0002\u0002\u0469\u0451\u0003\u0002\u0002\u0002\u0469\u0454", - "\u0003\u0002\u0002\u0002\u0469\u0457\u0003\u0002\u0002\u0002\u0469\u045a", - "\u0003\u0002\u0002\u0002\u0469\u045d\u0003\u0002\u0002\u0002\u0469\u0460", - "\u0003\u0002\u0002\u0002\u0469\u0463\u0003\u0002\u0002\u0002\u046a\u046d", - "\u0003\u0002\u0002\u0002\u046b\u0469\u0003\u0002\u0002\u0002\u046b\u046c", - "\u0003\u0002\u0002\u0002\u046c\u00a3\u0003\u0002\u0002\u0002\u046d\u046b", - "\u0003\u0002\u0002\u0002\u046e\u046f\bS\u0001\u0002\u046f\u0473\u0005", - "\u00d6l\u0002\u0470\u0471\u0005\u0150\u00a9\u0002\u0471\u0472\u0005", - "\u0098M\u0002\u0472\u0474\u0003\u0002\u0002\u0002\u0473\u0470\u0003", - "\u0002\u0002\u0002\u0473\u0474\u0003\u0002\u0002\u0002\u0474\u04da\u0003", - "\u0002\u0002\u0002\u0475\u0477\u0005\u012a\u0096\u0002\u0476\u0478\u0005", - "\u00a6T\u0002\u0477\u0476\u0003\u0002\u0002\u0002\u0477\u0478\u0003", - "\u0002\u0002\u0002\u0478\u04da\u0003\u0002\u0002\u0002\u0479\u04da\u0005", - "\u00be`\u0002\u047a\u04da\u0005\u00d0i\u0002\u047b\u04da\u0005\u0136", - "\u009c\u0002\u047c\u04da\u0007*\u0002\u0002\u047d\u04da\u0005\u00a8", - "U\u0002\u047e\u04da\u0005\u00aaV\u0002\u047f\u04da\u0005\u00acW\u0002", - "\u0480\u0481\t\u0016\u0002\u0002\u0481\u04da\u0005\u00a4S\u0011\u0482", - "\u0483\u0005\u00e8u\u0002\u0483\u0484\u0005\u00a4S\u0010\u0484\u04da", - "\u0003\u0002\u0002\u0002\u0485\u0487\u0007]\u0002\u0002\u0486\u0485", - "\u0003\u0002\u0002\u0002\u0486\u0487\u0003\u0002\u0002\u0002\u0487\u0488", - "\u0003\u0002\u0002\u0002\u0488\u0489\u0007\u001d\u0002\u0002\u0489\u048a", - "\u0005\u00e2r\u0002\u048a\u048b\u0007\u001e\u0002\u0002\u048b\u04da", - "\u0003\u0002\u0002\u0002\u048c\u048e\u0007\u008e\u0002\u0002\u048d\u048c", - "\u0003\u0002\u0002\u0002\u048d\u048e\u0003\u0002\u0002\u0002\u048e\u048f", - "\u0003\u0002\u0002\u0002\u048f\u04da\u0005\u0014\u000b\u0002\u0490\u0491", - "\u0007\u001f\u0002\u0002\u0491\u0492\u0005\u0124\u0093\u0002\u0492\u0493", - "\u0005\u0098M\u0002\u0493\u0494\u0007 \u0002\u0002\u0494\u04da\u0003", - "\u0002\u0002\u0002\u0495\u0496\u0007\u00a9\u0002\u0002\u0496\u0497\u0005", - "\u00b8]\u0002\u0497\u0498\u0007\u00aa\u0002\u0002\u0498\u0499\u0007", - "\u001d\u0002\u0002\u0499\u049b\u0005\u00a2R\u0002\u049a\u049c\u0005", - "\u00bc_\u0002\u049b\u049a\u0003\u0002\u0002\u0002\u049b\u049c\u0003", - "\u0002\u0002\u0002\u049c\u049d\u0003\u0002\u0002\u0002\u049d\u049e\u0007", - "\u001e\u0002\u0002\u049e\u04da\u0003\u0002\u0002\u0002\u049f\u04a0\u0007", - "\u00ab\u0002\u0002\u04a0\u04da\u0005\u00a4S\u000b\u04a1\u04a2\u0007", - "\u00ac\u0002\u0002\u04a2\u04a3\u0007\u001d\u0002\u0002\u04a3\u04a4\u0005", - "\u0098M\u0002\u04a4\u04a5\u0007S\u0002\u0002\u04a5\u04a7\u0005\u00fa", - "~\u0002\u04a6\u04a8\u0007\u00ad\u0002\u0002\u04a7\u04a6\u0003\u0002", - "\u0002\u0002\u04a7\u04a8\u0003\u0002\u0002\u0002\u04a8\u04a9\u0003\u0002", - "\u0002\u0002\u04a9\u04aa\u0007\u001e\u0002\u0002\u04aa\u04da\u0003\u0002", - "\u0002\u0002\u04ab\u04ad\u0007\u00ae\u0002\u0002\u04ac\u04ae\u0005\u0098", - "M\u0002\u04ad\u04ac\u0003\u0002\u0002\u0002\u04ad\u04ae\u0003\u0002", - "\u0002\u0002\u04ae\u04b2\u0003\u0002\u0002\u0002\u04af\u04b0\u0005\u00dc", - "o\u0002\u04b0\u04b1\u0005\u00dep\u0002\u04b1\u04b3\u0003\u0002\u0002", - "\u0002\u04b2\u04af\u0003\u0002\u0002\u0002\u04b3\u04b4\u0003\u0002\u0002", - "\u0002\u04b4\u04b2\u0003\u0002\u0002\u0002\u04b4\u04b5\u0003\u0002\u0002", - "\u0002\u04b5\u04b7\u0003\u0002\u0002\u0002\u04b6\u04b8\u0005\u00e0q", - "\u0002\u04b7\u04b6\u0003\u0002\u0002\u0002\u04b7\u04b8\u0003\u0002\u0002", - "\u0002\u04b8\u04b9\u0003\u0002\u0002\u0002\u04b9\u04ba\u0007\u00af\u0002", - "\u0002\u04ba\u04da\u0003\u0002\u0002\u0002\u04bb\u04bc\u0007\u00b0\u0002", - "\u0002\u04bc\u04bd\u0007\u001d\u0002\u0002\u04bd\u04be\u0005\u0098M", - "\u0002\u04be\u04bf\u0007\u001a\u0002\u0002\u04bf\u04c0\u0005\u00fa~", - "\u0002\u04c0\u04c1\u0007\u001e\u0002\u0002\u04c1\u04da\u0003\u0002\u0002", - "\u0002\u04c2\u04c3\u0007\u00b0\u0002\u0002\u04c3\u04c4\u0007\u001d\u0002", - "\u0002\u04c4\u04c5\u0005\u0098M\u0002\u04c5\u04c6\u0007\u0082\u0002", - "\u0002\u04c6\u04c7\u0005\u010c\u0087\u0002\u04c7\u04c8\u0007\u001e\u0002", - "\u0002\u04c8\u04da\u0003\u0002\u0002\u0002\u04c9\u04ca\u0007?\u0002", - "\u0002\u04ca\u04cb\u0007\u001d\u0002\u0002\u04cb\u04cc\u0005\u012a\u0096", - "\u0002\u04cc\u04cd\u0007\u001e\u0002\u0002\u04cd\u04da\u0003\u0002\u0002", - "\u0002\u04ce\u04cf\u0007p\u0002\u0002\u04cf\u04d0\u0007\u001d\u0002", - "\u0002\u04d0\u04d1\u0005\u012a\u0096\u0002\u04d1\u04d2\u0007\u001e\u0002", - "\u0002\u04d2\u04da\u0003\u0002\u0002\u0002\u04d3\u04d4\u0007[\u0002", - "\u0002\u04d4\u04d5\u0005\u0098M\u0002\u04d5\u04d6\u0005\u00eav\u0002", - "\u04d6\u04d7\u0007\u000b\u0002\u0002\u04d7\u04d8\u0005\u0098M\u0002", - "\u04d8\u04da\u0003\u0002\u0002\u0002\u04d9\u046e\u0003\u0002\u0002\u0002", - "\u04d9\u0475\u0003\u0002\u0002\u0002\u04d9\u0479\u0003\u0002\u0002\u0002", - "\u04d9\u047a\u0003\u0002\u0002\u0002\u04d9\u047b\u0003\u0002\u0002\u0002", - "\u04d9\u047c\u0003\u0002\u0002\u0002\u04d9\u047d\u0003\u0002\u0002\u0002", - "\u04d9\u047e\u0003\u0002\u0002\u0002\u04d9\u047f\u0003\u0002\u0002\u0002", - "\u04d9\u0480\u0003\u0002\u0002\u0002\u04d9\u0482\u0003\u0002\u0002\u0002", - "\u04d9\u0486\u0003\u0002\u0002\u0002\u04d9\u048d\u0003\u0002\u0002\u0002", - "\u04d9\u0490\u0003\u0002\u0002\u0002\u04d9\u0495\u0003\u0002\u0002\u0002", - "\u04d9\u049f\u0003\u0002\u0002\u0002\u04d9\u04a1\u0003\u0002\u0002\u0002", - "\u04d9\u04ab\u0003\u0002\u0002\u0002\u04d9\u04bb\u0003\u0002\u0002\u0002", - "\u04d9\u04c2\u0003\u0002\u0002\u0002\u04d9\u04c9\u0003\u0002\u0002\u0002", - "\u04d9\u04ce\u0003\u0002\u0002\u0002\u04d9\u04d3\u0003\u0002\u0002\u0002", - "\u04da\u04e6\u0003\u0002\u0002\u0002\u04db\u04dc\f\u0012\u0002\u0002", - "\u04dc\u04dd\u0007\u0017\u0002\u0002\u04dd\u04e5\u0005\u00a4S\u0013", - "\u04de\u04df\f\u0018\u0002\u0002\u04df\u04e0\u0007\u00b1\u0002\u0002", - "\u04e0\u04e5\u0005\u014c\u00a7\u0002\u04e1\u04e2\f\t\u0002\u0002\u04e2", - "\u04e3\u0007+\u0002\u0002\u04e3\u04e5\u0005\u00fa~\u0002\u04e4\u04db", - "\u0003\u0002\u0002\u0002\u04e4\u04de\u0003\u0002\u0002\u0002\u04e4\u04e1", - "\u0003\u0002\u0002\u0002\u04e5\u04e8\u0003\u0002\u0002\u0002\u04e6\u04e4", - "\u0003\u0002\u0002\u0002\u04e6\u04e7\u0003\u0002\u0002\u0002\u04e7\u00a5", - "\u0003\u0002\u0002\u0002\u04e8\u04e6\u0003\u0002\u0002\u0002\u04e9\u04ec", - "\t\u0017\u0002\u0002\u04ea\u04ed\u0005\u013a\u009e\u0002\u04eb\u04ed", - "\u0005\u0098M\u0002\u04ec\u04ea\u0003\u0002\u0002\u0002\u04ec\u04eb", - "\u0003\u0002\u0002\u0002\u04ed\u00a7\u0003\u0002\u0002\u0002\u04ee\u04ef", - "\u0007\u00b2\u0002\u0002\u04ef\u04f1\u0007\u001d\u0002\u0002\u04f0\u04f2", - "\u0007C\u0002\u0002\u04f1\u04f0\u0003\u0002\u0002\u0002\u04f1\u04f2", - "\u0003\u0002\u0002\u0002\u04f2\u04f3\u0003\u0002\u0002\u0002\u04f3\u04f4", - "\u0005\u00b6\\\u0002\u04f4\u04f6\u0007\u001e\u0002\u0002\u04f5\u04f7", - "\u0005\u00aeX\u0002\u04f6\u04f5\u0003\u0002\u0002\u0002\u04f6\u04f7", - "\u0003\u0002\u0002\u0002\u04f7\u0565\u0003\u0002\u0002\u0002\u04f8\u04f9", - "\t\u0018\u0002\u0002\u04f9\u04fa\u0007\u001d\u0002\u0002\u04fa\u04fb", - "\u0005\u00b6\\\u0002\u04fb\u04fd\u0007\u001e\u0002\u0002\u04fc\u04fe", - "\u0005\u00aeX\u0002\u04fd\u04fc\u0003\u0002\u0002\u0002\u04fd\u04fe", - "\u0003\u0002\u0002\u0002\u04fe\u0565\u0003\u0002\u0002\u0002\u04ff\u0565", - "\u0005\u00b4[\u0002\u0500\u0501\u0007\u00b6\u0002\u0002\u0501\u0503", - "\u0007\u001d\u0002\u0002\u0502\u0504\u0007B\u0002\u0002\u0503\u0502", - "\u0003\u0002\u0002\u0002\u0503\u0504\u0003\u0002\u0002\u0002\u0504\u0505", - "\u0003\u0002\u0002\u0002\u0505\u0506\u0007\r\u0002\u0002\u0506\u0508", - "\u0007\u001e\u0002\u0002\u0507\u0509\u0005\u00aeX\u0002\u0508\u0507", - "\u0003\u0002\u0002\u0002\u0508\u0509\u0003\u0002\u0002\u0002\u0509\u0565", - "\u0003\u0002\u0002\u0002\u050a\u050b\u0007\u00b6\u0002\u0002\u050b\u0513", - "\u0007\u001d\u0002\u0002\u050c\u050e\u0007B\u0002\u0002\u050d\u050c", - "\u0003\u0002\u0002\u0002\u050d\u050e\u0003\u0002\u0002\u0002\u050e\u050f", - "\u0003\u0002\u0002\u0002\u050f\u0514\u0007\r\u0002\u0002\u0510\u0514", - "\u0005\u00b6\\\u0002\u0511\u0512\u0007C\u0002\u0002\u0512\u0514\u0005", - "\u00e2r\u0002\u0513\u050d\u0003\u0002\u0002\u0002\u0513\u0510\u0003", - "\u0002\u0002\u0002\u0513\u0511\u0003\u0002\u0002\u0002\u0514\u0515\u0003", - "\u0002\u0002\u0002\u0515\u0517\u0007\u001e\u0002\u0002\u0516\u0518\u0005", - "\u00aeX\u0002\u0517\u0516\u0003\u0002\u0002\u0002\u0517\u0518\u0003", - "\u0002\u0002\u0002\u0518\u0565\u0003\u0002\u0002\u0002\u0519\u051a\u0007", - "\u00b7\u0002\u0002\u051a\u051c\u0007\u001d\u0002\u0002\u051b\u051d\u0007", - "C\u0002\u0002\u051c\u051b\u0003\u0002\u0002\u0002\u051c\u051d\u0003", - "\u0002\u0002\u0002\u051d\u051e\u0003\u0002\u0002\u0002\u051e\u051f\u0005", - "\u00b6\\\u0002\u051f\u0521\u0007\u001e\u0002\u0002\u0520\u0522\u0005", - "\u00aeX\u0002\u0521\u0520\u0003\u0002\u0002\u0002\u0521\u0522\u0003", - "\u0002\u0002\u0002\u0522\u0565\u0003\u0002\u0002\u0002\u0523\u0524\u0007", - "\u00b8\u0002\u0002\u0524\u0526\u0007\u001d\u0002\u0002\u0525\u0527\u0007", - "C\u0002\u0002\u0526\u0525\u0003\u0002\u0002\u0002\u0526\u0527\u0003", - "\u0002\u0002\u0002\u0527\u0528\u0003\u0002\u0002\u0002\u0528\u0529\u0005", - "\u00b6\\\u0002\u0529\u052b\u0007\u001e\u0002\u0002\u052a\u052c\u0005", - "\u00aeX\u0002\u052b\u052a\u0003\u0002\u0002\u0002\u052b\u052c\u0003", - "\u0002\u0002\u0002\u052c\u0565\u0003\u0002\u0002\u0002\u052d\u052e\u0007", - "\u00b9\u0002\u0002\u052e\u052f\u0007\u001d\u0002\u0002\u052f\u0530\u0005", - "\u00b6\\\u0002\u0530\u0532\u0007\u001e\u0002\u0002\u0531\u0533\u0005", - "\u00aeX\u0002\u0532\u0531\u0003\u0002\u0002\u0002\u0532\u0533\u0003", - "\u0002\u0002\u0002\u0533\u0565\u0003\u0002\u0002\u0002\u0534\u0535\u0007", - "\u00ba\u0002\u0002\u0535\u0536\u0007\u001d\u0002\u0002\u0536\u0537\u0005", - "\u00b6\\\u0002\u0537\u0539\u0007\u001e\u0002\u0002\u0538\u053a\u0005", - "\u00aeX\u0002\u0539\u0538\u0003\u0002\u0002\u0002\u0539\u053a\u0003", - "\u0002\u0002\u0002\u053a\u0565\u0003\u0002\u0002\u0002\u053b\u053c\u0007", - "\u00bb\u0002\u0002\u053c\u053d\u0007\u001d\u0002\u0002\u053d\u053e\u0005", - "\u00b6\\\u0002\u053e\u0540\u0007\u001e\u0002\u0002\u053f\u0541\u0005", - "\u00aeX\u0002\u0540\u053f\u0003\u0002\u0002\u0002\u0540\u0541\u0003", - "\u0002\u0002\u0002\u0541\u0565\u0003\u0002\u0002\u0002\u0542\u0543\u0007", - "\u00bc\u0002\u0002\u0543\u0544\u0007\u001d\u0002\u0002\u0544\u0545\u0005", - "\u00b6\\\u0002\u0545\u0547\u0007\u001e\u0002\u0002\u0546\u0548\u0005", - "\u00aeX\u0002\u0547\u0546\u0003\u0002\u0002\u0002\u0547\u0548\u0003", - "\u0002\u0002\u0002\u0548\u0565\u0003\u0002\u0002\u0002\u0549\u054a\u0007", - "\u00bd\u0002\u0002\u054a\u054c\u0007\u001d\u0002\u0002\u054b\u054d\u0007", - "C\u0002\u0002\u054c\u054b\u0003\u0002\u0002\u0002\u054c\u054d\u0003", - "\u0002\u0002\u0002\u054d\u054e\u0003\u0002\u0002\u0002\u054e\u054f\u0005", - "\u00b6\\\u0002\u054f\u0551\u0007\u001e\u0002\u0002\u0550\u0552\u0005", - "\u00aeX\u0002\u0551\u0550\u0003\u0002\u0002\u0002\u0551\u0552\u0003", - "\u0002\u0002\u0002\u0552\u0565\u0003\u0002\u0002\u0002\u0553\u0554\u0007", - "\u00be\u0002\u0002\u0554\u0556\u0007\u001d\u0002\u0002\u0555\u0557\u0007", - "C\u0002\u0002\u0556\u0555\u0003\u0002\u0002\u0002\u0556\u0557\u0003", - "\u0002\u0002\u0002\u0557\u0558\u0003\u0002\u0002\u0002\u0558\u055a\u0005", - "\u00e2r\u0002\u0559\u055b\u0005B\"\u0002\u055a\u0559\u0003\u0002\u0002", - "\u0002\u055a\u055b\u0003\u0002\u0002\u0002\u055b\u055e\u0003\u0002\u0002", - "\u0002\u055c\u055d\u0007\u00bf\u0002\u0002\u055d\u055f\u0005\u013c\u009f", - "\u0002\u055e\u055c\u0003\u0002\u0002\u0002\u055e\u055f\u0003\u0002\u0002", - "\u0002\u055f\u0560\u0003\u0002\u0002\u0002\u0560\u0562\u0007\u001e\u0002", - "\u0002\u0561\u0563\u0005\u00aeX\u0002\u0562\u0561\u0003\u0002\u0002", - "\u0002\u0562\u0563\u0003\u0002\u0002\u0002\u0563\u0565\u0003\u0002\u0002", - "\u0002\u0564\u04ee\u0003\u0002\u0002\u0002\u0564\u04f8\u0003\u0002\u0002", - "\u0002\u0564\u04ff\u0003\u0002\u0002\u0002\u0564\u0500\u0003\u0002\u0002", - "\u0002\u0564\u050a\u0003\u0002\u0002\u0002\u0564\u0519\u0003\u0002\u0002", - "\u0002\u0564\u0523\u0003\u0002\u0002\u0002\u0564\u052d\u0003\u0002\u0002", - "\u0002\u0564\u0534\u0003\u0002\u0002\u0002\u0564\u053b\u0003\u0002\u0002", - "\u0002\u0564\u0542\u0003\u0002\u0002\u0002\u0564\u0549\u0003\u0002\u0002", - "\u0002\u0564\u0553\u0003\u0002\u0002\u0002\u0565\u00a9\u0003\u0002\u0002", - "\u0002\u0566\u0567\u0007\u00c0\u0002\u0002\u0567\u0568\u0007\u001d\u0002", - "\u0002\u0568\u0569\u0005\u00e2r\u0002\u0569\u056a\u0007\u001e\u0002", - "\u0002\u056a\u00ab\u0003\u0002\u0002\u0002\u056b\u056c\t\u0019\u0002", - "\u0002\u056c\u056d\u0005\u014e\u00a8\u0002\u056d\u056e\u0005\u00aeX", - "\u0002\u056e\u0596\u0003\u0002\u0002\u0002\u056f\u0570\u0007\u00c6\u0002", - "\u0002\u0570\u0571\u0005\u00f2z\u0002\u0571\u0572\u0005\u00aeX\u0002", - "\u0572\u0596\u0003\u0002\u0002\u0002\u0573\u0574\t\u001a\u0002\u0002", - "\u0574\u0575\u0007\u001d\u0002\u0002\u0575\u0577\u0005\u0098M\u0002", - "\u0576\u0578\u0005\u00b0Y\u0002\u0577\u0576\u0003\u0002\u0002\u0002", - "\u0577\u0578\u0003\u0002\u0002\u0002\u0578\u0579\u0003\u0002\u0002\u0002", - "\u0579\u057b\u0007\u001e\u0002\u0002\u057a\u057c\u0005\u00b2Z\u0002", - "\u057b\u057a\u0003\u0002\u0002\u0002\u057b\u057c\u0003\u0002\u0002\u0002", - "\u057c\u057d\u0003\u0002\u0002\u0002\u057d\u057e\u0005\u00aeX\u0002", - "\u057e\u0596\u0003\u0002\u0002\u0002\u057f\u0580\t\u001b\u0002\u0002", - "\u0580\u0582\u0005\u00f0y\u0002\u0581\u0583\u0005\u00b2Z\u0002\u0582", - "\u0581\u0003\u0002\u0002\u0002\u0582\u0583\u0003\u0002\u0002\u0002\u0583", - "\u0584\u0003\u0002\u0002\u0002\u0584\u0585\u0005\u00aeX\u0002\u0585", - "\u0596\u0003\u0002\u0002\u0002\u0586\u0587\u0007\u00cb\u0002\u0002\u0587", - "\u0588\u0007\u001d\u0002\u0002\u0588\u0589\u0005\u0098M\u0002\u0589", - "\u058a\u0007\u001a\u0002\u0002\u058a\u058b\u0005\u00a4S\u0002\u058b", - "\u058e\u0007\u001e\u0002\u0002\u058c\u058d\u0007n\u0002\u0002\u058d", - "\u058f\t\u001c\u0002\u0002\u058e\u058c\u0003\u0002\u0002\u0002\u058e", - "\u058f\u0003\u0002\u0002\u0002\u058f\u0591\u0003\u0002\u0002\u0002\u0590", - "\u0592\u0005\u00b2Z\u0002\u0591\u0590\u0003\u0002\u0002\u0002\u0591", - "\u0592\u0003\u0002\u0002\u0002\u0592\u0593\u0003\u0002\u0002\u0002\u0593", - "\u0594\u0005\u00aeX\u0002\u0594\u0596\u0003\u0002\u0002\u0002\u0595", - "\u056b\u0003\u0002\u0002\u0002\u0595\u056f\u0003\u0002\u0002\u0002\u0595", - "\u0573\u0003\u0002\u0002\u0002\u0595\u057f\u0003\u0002\u0002\u0002\u0595", - "\u0586\u0003\u0002\u0002\u0002\u0596\u00ad\u0003\u0002\u0002\u0002\u0597", - "\u059a\u0007\u00ce\u0002\u0002\u0598\u059b\u0005\u0124\u0093\u0002\u0599", - "\u059b\u0005(\u0015\u0002\u059a\u0598\u0003\u0002\u0002\u0002\u059a", - "\u0599\u0003\u0002\u0002\u0002\u059b\u00af\u0003\u0002\u0002\u0002\u059c", - "\u059f\u0007\u001a\u0002\u0002\u059d\u05a0\u0005\u0132\u009a\u0002\u059e", - "\u05a0\u0007*\u0002\u0002\u059f\u059d\u0003\u0002\u0002\u0002\u059f", - "\u059e\u0003\u0002\u0002\u0002\u05a0\u05a3\u0003\u0002\u0002\u0002\u05a1", - "\u05a2\u0007\u001a\u0002\u0002\u05a2\u05a4\u0005\u0098M\u0002\u05a3", - "\u05a1\u0003\u0002\u0002\u0002\u05a3\u05a4\u0003\u0002\u0002\u0002\u05a4", - "\u00b1\u0003\u0002\u0002\u0002\u05a5\u05a6\t\u001d\u0002\u0002\u05a6", - "\u05a7\u0007\u00d0\u0002\u0002\u05a7\u00b3\u0003\u0002\u0002\u0002\u05a8", - "\u05a9\u0007\u00d1\u0002\u0002\u05a9\u05aa\u0007\u001d\u0002\u0002\u05aa", - "\u05ab\u0005\u00b6\\\u0002\u05ab\u05ad\u0007\u001e\u0002\u0002\u05ac", - "\u05ae\u0005\u00aeX\u0002\u05ad\u05ac\u0003\u0002\u0002\u0002\u05ad", - "\u05ae\u0003\u0002\u0002\u0002\u05ae\u05b9\u0003\u0002\u0002\u0002\u05af", - "\u05b0\u0007\u00d2\u0002\u0002\u05b0\u05b1\u0007\u001d\u0002\u0002\u05b1", - "\u05b2\u0005\u00b6\\\u0002\u05b2\u05b3\u0007\u001a\u0002\u0002\u05b3", - "\u05b4\u0005\u00b6\\\u0002\u05b4\u05b6\u0007\u001e\u0002\u0002\u05b5", - "\u05b7\u0005\u00aeX\u0002\u05b6\u05b5\u0003\u0002\u0002\u0002\u05b6", - "\u05b7\u0003\u0002\u0002\u0002\u05b7\u05b9\u0003\u0002\u0002\u0002\u05b8", - "\u05a8\u0003\u0002\u0002\u0002\u05b8\u05af\u0003\u0002\u0002\u0002\u05b9", - "\u00b5\u0003\u0002\u0002\u0002\u05ba\u05bc\u0007B\u0002\u0002\u05bb", - "\u05ba\u0003\u0002\u0002\u0002\u05bb\u05bc\u0003\u0002\u0002\u0002\u05bc", - "\u05bd\u0003\u0002\u0002\u0002\u05bd\u05be\u0005\u0098M\u0002\u05be", - "\u00b7\u0003\u0002\u0002\u0002\u05bf\u05c5\u0005\u00ba^\u0002\u05c0", - "\u05c1\u0007\u001d\u0002\u0002\u05c1\u05c2\u0005\u00ba^\u0002\u05c2", - "\u05c3\u0007\u001e\u0002\u0002\u05c3\u05c5\u0003\u0002\u0002\u0002\u05c4", - "\u05bf\u0003\u0002\u0002\u0002\u05c4\u05c0\u0003\u0002\u0002\u0002\u05c5", - "\u00b9\u0003\u0002\u0002\u0002\u05c6\u05cb\u0005\u012a\u0096\u0002\u05c7", - "\u05c8\u0007\u001a\u0002\u0002\u05c8\u05ca\u0005\u012a\u0096\u0002\u05c9", - "\u05c7\u0003\u0002\u0002\u0002\u05ca\u05cd\u0003\u0002\u0002\u0002\u05cb", - "\u05c9\u0003\u0002\u0002\u0002\u05cb\u05cc\u0003\u0002\u0002\u0002\u05cc", - "\u00bb\u0003\u0002\u0002\u0002\u05cd\u05cb\u0003\u0002\u0002\u0002\u05ce", - "\u05cf\u0007x\u0002\u0002\u05cf\u05d0\u0007\u00d3\u0002\u0002\u05d0", - "\u05de\u0007z\u0002\u0002\u05d1\u05d2\u0007x\u0002\u0002\u05d2\u05d3", - "\u0007\u0083\u0002\u0002\u05d3\u05d4\u0007\u00d4\u0002\u0002\u05d4\u05d8", - "\u0007z\u0002\u0002\u05d5\u05d6\u0007f\u0002\u0002\u05d6\u05d7\u0007", - "\u00d5\u0002\u0002\u05d7\u05d9\u0007\u00d6\u0002\u0002\u05d8\u05d5\u0003", - "\u0002\u0002\u0002\u05d8\u05d9\u0003\u0002\u0002\u0002\u05d9\u05de\u0003", - "\u0002\u0002\u0002\u05da\u05db\u0007f\u0002\u0002\u05db\u05dc\u0007", - "\u00d5\u0002\u0002\u05dc\u05de\u0007\u00d6\u0002\u0002\u05dd\u05ce\u0003", - "\u0002\u0002\u0002\u05dd\u05d1\u0003\u0002\u0002\u0002\u05dd\u05da\u0003", - "\u0002\u0002\u0002\u05de\u00bd\u0003\u0002\u0002\u0002\u05df\u05e0\u0007", - "\u00d7\u0002\u0002\u05e0\u05e1\u0007\u001d\u0002\u0002\u05e1\u05e4\u0005", - "\u00e2r\u0002\u05e2\u05e3\u0007\u0082\u0002\u0002\u05e3\u05e5\u0005", - "\u010c\u0087\u0002\u05e4\u05e2\u0003\u0002\u0002\u0002\u05e4\u05e5\u0003", - "\u0002\u0002\u0002\u05e5\u05e6\u0003\u0002\u0002\u0002\u05e6\u05e7\u0007", - "\u001e\u0002\u0002\u05e7\u06ee\u0003\u0002\u0002\u0002\u05e8\u05ea\u0007", - "\u00d8\u0002\u0002\u05e9\u05eb\u0005\u014e\u00a8\u0002\u05ea\u05e9\u0003", - "\u0002\u0002\u0002\u05ea\u05eb\u0003\u0002\u0002\u0002\u05eb\u06ee\u0003", - "\u0002\u0002\u0002\u05ec\u05ed\u0007\u00d9\u0002\u0002\u05ed\u06ee\u0005", - "\u00f0y\u0002\u05ee\u05ef\u0007:\u0002\u0002\u05ef\u06ee\u0005\u00f0", - "y\u0002\u05f0\u05f1\u00079\u0002\u0002\u05f1\u06ee\u0005\u00f0y\u0002", - "\u05f2\u05f3\u0007\u00da\u0002\u0002\u05f3\u05f4\u0007\u001d\u0002\u0002", - "\u05f4\u05f5\u0005\u0098M\u0002\u05f5\u05f6\u0007\u001a\u0002\u0002", - "\u05f6\u05f7\u0005\u0098M\u0002\u05f7\u05f8\u0007\u001a\u0002\u0002", - "\u05f8\u05f9\u0005\u0098M\u0002\u05f9\u05fa\u0007\u001a\u0002\u0002", - "\u05fa\u05fb\u0005\u0098M\u0002\u05fb\u05fc\u0007\u001e\u0002\u0002", - "\u05fc\u06ee\u0003\u0002\u0002\u0002\u05fd\u05fe\u0007[\u0002\u0002", - "\u05fe\u05ff\u0007\u001d\u0002\u0002\u05ff\u0602\u0005\u0098M\u0002", - "\u0600\u0601\u0007\u001a\u0002\u0002\u0601\u0603\u0005\u0098M\u0002", - "\u0602\u0600\u0003\u0002\u0002\u0002\u0603\u0604\u0003\u0002\u0002\u0002", - "\u0604\u0602\u0003\u0002\u0002\u0002\u0604\u0605\u0003\u0002\u0002\u0002", - "\u0605\u0606\u0003\u0002\u0002\u0002\u0606\u0607\u0007\u001e\u0002\u0002", - "\u0607\u06ee\u0003\u0002\u0002\u0002\u0608\u0609\u0007\u0086\u0002\u0002", - "\u0609\u060a\u0007\u001d\u0002\u0002\u060a\u060b\u0005\u0098M\u0002", - "\u060b\u060c\u0007\u001a\u0002\u0002\u060c\u060d\u0005\u0098M\u0002", - "\u060d\u060e\u0007\u001e\u0002\u0002\u060e\u06ee\u0003\u0002\u0002\u0002", - "\u060f\u0610\u00078\u0002\u0002\u0610\u06ee\u0005\u00f0y\u0002\u0611", - "\u0612\u0007<\u0002\u0002\u0612\u06ee\u0005\u00f0y\u0002\u0613\u0614", - "\u0007\u0087\u0002\u0002\u0614\u0615\u0007\u001d\u0002\u0002\u0615\u0616", - "\u0005\u0098M\u0002\u0616\u0617\u0007\u001a\u0002\u0002\u0617\u0618", - "\u0005\u0098M\u0002\u0618\u0619\u0007\u001e\u0002\u0002\u0619\u06ee", - "\u0003\u0002\u0002\u0002\u061a\u061b\u00077\u0002\u0002\u061b\u06ee", - "\u0005\u00f0y\u0002\u061c\u061d\u0007\u00db\u0002\u0002\u061d\u06ee", - "\u0005\u00f0y\u0002\u061e\u061f\u0007\u00dc\u0002\u0002\u061f\u0620", - "\u0007\u001d\u0002\u0002\u0620\u0623\u0005\u0098M\u0002\u0621\u0622", - "\u0007\u001a\u0002\u0002\u0622\u0624\u0005\u0098M\u0002\u0623\u0621", - "\u0003\u0002\u0002\u0002\u0623\u0624\u0003\u0002\u0002\u0002\u0624\u0625", - "\u0003\u0002\u0002\u0002\u0625\u0626\u0007\u001e\u0002\u0002\u0626\u06ee", - "\u0003\u0002\u0002\u0002\u0627\u06ee\u0005\u00ccg\u0002\u0628\u0629", - "\u0007\u00e0\u0002\u0002\u0629\u06ee\u0005\u014e\u00a8\u0002\u062a\u062b", - "\u0007p\u0002\u0002\u062b\u06ee\u0005\u00f0y\u0002\u062c\u062d\u0007", - ">\u0002\u0002\u062d\u06ee\u0005\u00f0y\u0002\u062e\u062f\t\u001e\u0002", - "\u0002\u062f\u0630\u0007\u001d\u0002\u0002\u0630\u0631\u0005\u0098M", - "\u0002\u0631\u0637\u0007\u001a\u0002\u0002\u0632\u0638\u0005\u0098M", - "\u0002\u0633\u0634\u0007[\u0002\u0002\u0634\u0635\u0005\u0098M\u0002", - "\u0635\u0636\u0005\u00eav\u0002\u0636\u0638\u0003\u0002\u0002\u0002", - "\u0637\u0632\u0003\u0002\u0002\u0002\u0637\u0633\u0003\u0002\u0002\u0002", - "\u0638\u0639\u0003\u0002\u0002\u0002\u0639\u063a\u0007\u001e\u0002\u0002", - "\u063a\u06ee\u0003\u0002\u0002\u0002\u063b\u063d\u0007\u00e3\u0002\u0002", - "\u063c\u063e\u0005\u014e\u00a8\u0002\u063d\u063c\u0003\u0002\u0002\u0002", - "\u063d\u063e\u0003\u0002\u0002\u0002\u063e\u06ee\u0003\u0002\u0002\u0002", - "\u063f\u0641\u0007\u00e4\u0002\u0002\u0640\u0642\u0005\u00c2b\u0002", - "\u0641\u0640\u0003\u0002\u0002\u0002\u0641\u0642\u0003\u0002\u0002\u0002", - "\u0642\u06ee\u0003\u0002\u0002\u0002\u0643\u0644\t\u001f\u0002\u0002", - "\u0644\u0645\u0007\u001d\u0002\u0002\u0645\u0646\u0005\u0098M\u0002", - "\u0646\u0647\u0007\u001a\u0002\u0002\u0647\u0648\u0007[\u0002\u0002", - "\u0648\u0649\u0005\u0098M\u0002\u0649\u064a\u0005\u00eav\u0002\u064a", - "\u064b\u0007\u001e\u0002\u0002\u064b\u06ee\u0003\u0002\u0002\u0002\u064c", - "\u064d\u0007\u00e7\u0002\u0002\u064d\u064e\u0007\u001d\u0002\u0002\u064e", - "\u064f\u0005\u00eav\u0002\u064f\u0650\u0007n\u0002\u0002\u0650\u0651", - "\u0005\u0098M\u0002\u0651\u0652\u0007\u001e\u0002\u0002\u0652\u06ee", - "\u0003\u0002\u0002\u0002\u0653\u0654\u0007\u00e8\u0002\u0002\u0654\u0655", - "\u0007\u001d\u0002\u0002\u0655\u0656\u0005\u00caf\u0002\u0656\u0657", - "\u0007\u001a\u0002\u0002\u0657\u0658\u0005\u0098M\u0002\u0658\u0659", - "\u0007\u001e\u0002\u0002\u0659\u06ee\u0003\u0002\u0002\u0002\u065a\u065c", - "\u0007\u00e9\u0002\u0002\u065b\u065d\u0005\u00c2b\u0002\u065c\u065b", - "\u0003\u0002\u0002\u0002\u065c\u065d\u0003\u0002\u0002\u0002\u065d\u06ee", - "\u0003\u0002\u0002\u0002\u065e\u065f\u0007\u00ea\u0002\u0002\u065f\u0660", - "\u0007\u001d\u0002\u0002\u0660\u0661\u0005\u00a2R\u0002\u0661\u0662", - "\u0007x\u0002\u0002\u0662\u0663\u0005\u0098M\u0002\u0663\u0664\u0007", - "\u001e\u0002\u0002\u0664\u06ee\u0003\u0002\u0002\u0002\u0665\u06ee\u0005", - "\u00ceh\u0002\u0666\u0668\u0007\u00eb\u0002\u0002\u0667\u0669\u0005", - "\u00c2b\u0002\u0668\u0667\u0003\u0002\u0002\u0002\u0668\u0669\u0003", - "\u0002\u0002\u0002\u0669\u06ee\u0003\u0002\u0002\u0002\u066a\u066b\t", - " \u0002\u0002\u066b\u066c\u0007\u001d\u0002\u0002\u066c\u066d\u0005", - "\u00ecw\u0002\u066d\u066e\u0007\u001a\u0002\u0002\u066e\u066f\u0005", - "\u0098M\u0002\u066f\u0670\u0007\u001a\u0002\u0002\u0670\u0671\u0005", - "\u0098M\u0002\u0671\u0672\u0007\u001e\u0002\u0002\u0672\u06ee\u0003", - "\u0002\u0002\u0002\u0673\u0675\u0007\u00ee\u0002\u0002\u0674\u0676\u0005", - "\u014e\u00a8\u0002\u0675\u0674\u0003\u0002\u0002\u0002\u0675\u0676\u0003", - "\u0002\u0002\u0002\u0676\u06ee\u0003\u0002\u0002\u0002\u0677\u0679\u0007", - "\u00ef\u0002\u0002\u0678\u067a\u0005\u00c2b\u0002\u0679\u0678\u0003", - "\u0002\u0002\u0002\u0679\u067a\u0003\u0002\u0002\u0002\u067a\u06ee\u0003", - "\u0002\u0002\u0002\u067b\u067d\u0007\u00f0\u0002\u0002\u067c\u067e\u0005", - "\u00c2b\u0002\u067d\u067c\u0003\u0002\u0002\u0002\u067d\u067e\u0003", - "\u0002\u0002\u0002\u067e\u06ee\u0003\u0002\u0002\u0002\u067f\u0680\u0007", - "\u00f1\u0002\u0002\u0680\u06ee\u0005\u00f0y\u0002\u0681\u0682\u0007", - "\u00f2\u0002\u0002\u0682\u06ee\u0005\u00f0y\u0002\u0683\u0684\u0007", - "\u00f3\u0002\u0002\u0684\u06ee\u0005\u00eex\u0002\u0685\u0686\u0007", - "\u00f4\u0002\u0002\u0686\u06ee\u0005\u00f0y\u0002\u0687\u0688\u0007", - "\u00f5\u0002\u0002\u0688\u06ee\u0005\u014e\u00a8\u0002\u0689\u068a\u0007", - "\u00f6\u0002\u0002\u068a\u068b\u0007\u001d\u0002\u0002\u068b\u068c\u0005", - "\u0098M\u0002\u068c\u068d\u0007\u001a\u0002\u0002\u068d\u068e\u0005", - "\u0098M\u0002\u068e\u068f\u0007\u001a\u0002\u0002\u068f\u0690\u0005", - "\u0098M\u0002\u0690\u0691\u0007\u001e\u0002\u0002\u0691\u06ee\u0003", - "\u0002\u0002\u0002\u0692\u0693\u0007\u00f7\u0002\u0002\u0693\u0694\u0007", - "\u001d\u0002\u0002\u0694\u0695\u0005\u0098M\u0002\u0695\u0696\u0007", - "\u001a\u0002\u0002\u0696\u0699\u0005\u0098M\u0002\u0697\u0698\u0007", - "\u001a\u0002\u0002\u0698\u069a\u0005\u0098M\u0002\u0699\u0697\u0003", - "\u0002\u0002\u0002\u0699\u069a\u0003\u0002\u0002\u0002\u069a\u069b\u0003", - "\u0002\u0002\u0002\u069b\u069c\u0007\u001e\u0002\u0002\u069c\u06ee\u0003", - "\u0002\u0002\u0002\u069d\u069e\u0007\u00f8\u0002\u0002\u069e\u06ee\u0005", - "\u00f0y\u0002\u069f\u06a0\u0007\u00a8\u0002\u0002\u06a0\u06a1\u0007", - "\u001d\u0002\u0002\u06a1\u06a2\u0005\u0098M\u0002\u06a2\u06a3\u0007", - "\u001a\u0002\u0002\u06a3\u06a4\u0005\u0098M\u0002\u06a4\u06a5\u0007", - "\u001e\u0002\u0002\u06a5\u06ee\u0003\u0002\u0002\u0002\u06a6\u06a7\u0007", - "\u00f9\u0002\u0002\u06a7\u06a8\u0007\u001d\u0002\u0002\u06a8\u06a9\u0005", - "\u013e\u00a0\u0002\u06a9\u06aa\u0007\u001e\u0002\u0002\u06aa\u06ee\u0003", - "\u0002\u0002\u0002\u06ab\u06ac\u0007\u00fa\u0002\u0002\u06ac\u06ee\u0005", - "\u00f0y\u0002\u06ad\u06ae\u0007=\u0002\u0002\u06ae\u06ee\u0005\u00f0", - "y\u0002\u06af\u06b0\u0007\u00fb\u0002\u0002\u06b0\u06b1\u0007\u001d", - "\u0002\u0002\u06b1\u06b2\u0005\u0098M\u0002\u06b2\u06b3\u0007\u001a", - "\u0002\u0002\u06b3\u06b4\u0005\u0098M\u0002\u06b4\u06b5\u0007\u001e", - "\u0002\u0002\u06b5\u06ee\u0003\u0002\u0002\u0002\u06b6\u06b7\u0007\u00fc", - "\u0002\u0002\u06b7\u06b8\u0007\u001d\u0002\u0002\u06b8\u06b9\u0005\u0098", - "M\u0002\u06b9\u06ba\u0007\u001a\u0002\u0002\u06ba\u06bb\u0005\u0098", - "M\u0002\u06bb\u06bc\u0007\u001a\u0002\u0002\u06bc\u06bd\u0005\u0098", - "M\u0002\u06bd\u06be\u0007\u001e\u0002\u0002\u06be\u06ee\u0003\u0002", - "\u0002\u0002\u06bf\u06c0\u0007\u00fd\u0002\u0002\u06c0\u06ee\u0005\u00f0", - "y\u0002\u06c1\u06c2\u0007\u00fe\u0002\u0002\u06c2\u06ee\u0005\u014e", - "\u00a8\u0002\u06c3\u06c4\u0007\u00ff\u0002\u0002\u06c4\u06c5\u0007\u001d", - "\u0002\u0002\u06c5\u06c6\u0005\u0098M\u0002\u06c6\u06c7\u0007\u001a", - "\u0002\u0002\u06c7\u06c8\u0005\u0098M\u0002\u06c8\u06c9\u0007\u001e", - "\u0002\u0002\u06c9\u06ee\u0003\u0002\u0002\u0002\u06ca\u06cb\u0007;", - "\u0002\u0002\u06cb\u06cc\u0007\u001d\u0002\u0002\u06cc\u06cf\u0005\u0098", - "M\u0002\u06cd\u06ce\u0007\u001a\u0002\u0002\u06ce\u06d0\u0005\u0098", - "M\u0002\u06cf\u06cd\u0003\u0002\u0002\u0002\u06cf\u06d0\u0003\u0002", - "\u0002\u0002\u06d0\u06d1\u0003\u0002\u0002\u0002\u06d1\u06d2\u0007\u001e", - "\u0002\u0002\u06d2\u06ee\u0003\u0002\u0002\u0002\u06d3\u06d4\u0007\u0100", - "\u0002\u0002\u06d4\u06d5\u0007\u001d\u0002\u0002\u06d5\u06e8\u0005\u0098", - "M\u0002\u06d6\u06d7\u0007S\u0002\u0002\u06d7\u06d8\u0007\u00d7\u0002", - "\u0002\u06d8\u06da\u0005\u0108\u0085\u0002\u06d9\u06d6\u0003\u0002\u0002", - "\u0002\u06d9\u06da\u0003\u0002\u0002\u0002\u06da\u06dc\u0003\u0002\u0002", - "\u0002\u06db\u06dd\u0005\u00c6d\u0002\u06dc\u06db\u0003\u0002\u0002", - "\u0002\u06dc\u06dd\u0003\u0002\u0002\u0002\u06dd\u06e9\u0003\u0002\u0002", - "\u0002\u06de\u06df\u0007S\u0002\u0002\u06df\u06e0\u0007\u00ab\u0002", - "\u0002\u06e0\u06e9\u0005\u0108\u0085\u0002\u06e1\u06e2\u0007\u001a\u0002", - "\u0002\u06e2\u06e3\u0005\u012e\u0098\u0002\u06e3\u06e4\u0007\u001a\u0002", - "\u0002\u06e4\u06e5\u0005\u012e\u0098\u0002\u06e5\u06e6\u0007\u001a\u0002", - "\u0002\u06e6\u06e7\u0005\u012e\u0098\u0002\u06e7\u06e9\u0003\u0002\u0002", - "\u0002\u06e8\u06d9\u0003\u0002\u0002\u0002\u06e8\u06de\u0003\u0002\u0002", - "\u0002\u06e8\u06e1\u0003\u0002\u0002\u0002\u06e9\u06ea\u0003\u0002\u0002", - "\u0002\u06ea\u06eb\u0007\u001e\u0002\u0002\u06eb\u06ee\u0003\u0002\u0002", - "\u0002\u06ec\u06ee\u0005\u00c0a\u0002\u06ed\u05df\u0003\u0002\u0002", - "\u0002\u06ed\u05e8\u0003\u0002\u0002\u0002\u06ed\u05ec\u0003\u0002\u0002", - "\u0002\u06ed\u05ee\u0003\u0002\u0002\u0002\u06ed\u05f0\u0003\u0002\u0002", - "\u0002\u06ed\u05f2\u0003\u0002\u0002\u0002\u06ed\u05fd\u0003\u0002\u0002", - "\u0002\u06ed\u0608\u0003\u0002\u0002\u0002\u06ed\u060f\u0003\u0002\u0002", - "\u0002\u06ed\u0611\u0003\u0002\u0002\u0002\u06ed\u0613\u0003\u0002\u0002", - "\u0002\u06ed\u061a\u0003\u0002\u0002\u0002\u06ed\u061c\u0003\u0002\u0002", - "\u0002\u06ed\u061e\u0003\u0002\u0002\u0002\u06ed\u0627\u0003\u0002\u0002", - "\u0002\u06ed\u0628\u0003\u0002\u0002\u0002\u06ed\u062a\u0003\u0002\u0002", - "\u0002\u06ed\u062c\u0003\u0002\u0002\u0002\u06ed\u062e\u0003\u0002\u0002", - "\u0002\u06ed\u063b\u0003\u0002\u0002\u0002\u06ed\u063f\u0003\u0002\u0002", - "\u0002\u06ed\u0643\u0003\u0002\u0002\u0002\u06ed\u064c\u0003\u0002\u0002", - "\u0002\u06ed\u0653\u0003\u0002\u0002\u0002\u06ed\u065a\u0003\u0002\u0002", - "\u0002\u06ed\u065e\u0003\u0002\u0002\u0002\u06ed\u0665\u0003\u0002\u0002", - "\u0002\u06ed\u0666\u0003\u0002\u0002\u0002\u06ed\u066a\u0003\u0002\u0002", - "\u0002\u06ed\u0673\u0003\u0002\u0002\u0002\u06ed\u0677\u0003\u0002\u0002", - "\u0002\u06ed\u067b\u0003\u0002\u0002\u0002\u06ed\u067f\u0003\u0002\u0002", - "\u0002\u06ed\u0681\u0003\u0002\u0002\u0002\u06ed\u0683\u0003\u0002\u0002", - "\u0002\u06ed\u0685\u0003\u0002\u0002\u0002\u06ed\u0687\u0003\u0002\u0002", - "\u0002\u06ed\u0689\u0003\u0002\u0002\u0002\u06ed\u0692\u0003\u0002\u0002", - "\u0002\u06ed\u069d\u0003\u0002\u0002\u0002\u06ed\u069f\u0003\u0002\u0002", - "\u0002\u06ed\u06a6\u0003\u0002\u0002\u0002\u06ed\u06ab\u0003\u0002\u0002", - "\u0002\u06ed\u06ad\u0003\u0002\u0002\u0002\u06ed\u06af\u0003\u0002\u0002", - "\u0002\u06ed\u06b6\u0003\u0002\u0002\u0002\u06ed\u06bf\u0003\u0002\u0002", - "\u0002\u06ed\u06c1\u0003\u0002\u0002\u0002\u06ed\u06c3\u0003\u0002\u0002", - "\u0002\u06ed\u06ca\u0003\u0002\u0002\u0002\u06ed\u06d3\u0003\u0002\u0002", - "\u0002\u06ed\u06ec\u0003\u0002\u0002\u0002\u06ee\u00bf\u0003\u0002\u0002", - "\u0002\u06ef\u06f0\u0007\u0101\u0002\u0002\u06f0\u06f1\u0007\u001d\u0002", - "\u0002\u06f1\u06f2\u0005\u0098M\u0002\u06f2\u06f3\u0007\u001a\u0002", - "\u0002\u06f3\u06f4\u0005\u0098M\u0002\u06f4\u06f5\u0007\u001e\u0002", - "\u0002\u06f5\u070e\u0003\u0002\u0002\u0002\u06f6\u06f7\u0007\u0102\u0002", - "\u0002\u06f7\u06f9\u0007\u001d\u0002\u0002\u06f8\u06fa\u0005\u00e2r", - "\u0002\u06f9\u06f8\u0003\u0002\u0002\u0002\u06f9\u06fa\u0003\u0002\u0002", - "\u0002\u06fa\u06fb\u0003\u0002\u0002\u0002\u06fb\u070e\u0007\u001e\u0002", - "\u0002\u06fc\u06fd\u0007\u0103\u0002\u0002\u06fd\u070e\u0005\u00eex", - "\u0002\u06fe\u06ff\u0007\u0104\u0002\u0002\u06ff\u070e\u0005\u00eex", - "\u0002\u0700\u0701\u0007\u0105\u0002\u0002\u0701\u070e\u0005\u00eex", - "\u0002\u0702\u0703\u0007\u0106\u0002\u0002\u0703\u070e\u0005\u00eex", - "\u0002\u0704\u0705\u0007\u0107\u0002\u0002\u0705\u0706\u0007\u001d\u0002", - "\u0002\u0706\u0707\u0005\u0098M\u0002\u0707\u0708\u0007\u001a\u0002", - "\u0002\u0708\u0709\u0005\u0098M\u0002\u0709\u070a\u0007\u001e\u0002", - "\u0002\u070a\u070e\u0003\u0002\u0002\u0002\u070b\u070c\u0007\u0108\u0002", - "\u0002\u070c\u070e\u0005\u00eex\u0002\u070d\u06ef\u0003\u0002\u0002", - "\u0002\u070d\u06f6\u0003\u0002\u0002\u0002\u070d\u06fc\u0003\u0002\u0002", - "\u0002\u070d\u06fe\u0003\u0002\u0002\u0002\u070d\u0700\u0003\u0002\u0002", - "\u0002\u070d\u0702\u0003\u0002\u0002\u0002\u070d\u0704\u0003\u0002\u0002", - "\u0002\u070d\u070b\u0003\u0002\u0002\u0002\u070e\u00c1\u0003\u0002\u0002", - "\u0002\u070f\u0711\u0007\u001d\u0002\u0002\u0710\u0712\u0005\u00c4c", - "\u0002\u0711\u0710\u0003\u0002\u0002\u0002\u0711\u0712\u0003\u0002\u0002", - "\u0002\u0712\u0713\u0003\u0002\u0002\u0002\u0713\u0714\u0007\u001e\u0002", - "\u0002\u0714\u00c3\u0003\u0002\u0002\u0002\u0715\u0716\u0007.\u0002", - "\u0002\u0716\u00c5\u0003\u0002\u0002\u0002\u0717\u0724\u0007\u0109\u0002", - "\u0002\u0718\u0719\u0005\u0130\u0099\u0002\u0719\u071a\u0007\f\u0002", - "\u0002\u071a\u071b\u0005\u0130\u0099\u0002\u071b\u0725\u0003\u0002\u0002", - "\u0002\u071c\u0721\u0005\u00c8e\u0002\u071d\u071e\u0007\u001a\u0002", - "\u0002\u071e\u0720\u0005\u00c8e\u0002\u071f\u071d\u0003\u0002\u0002", - "\u0002\u0720\u0723\u0003\u0002\u0002\u0002\u0721\u071f\u0003\u0002\u0002", - "\u0002\u0721\u0722\u0003\u0002\u0002\u0002\u0722\u0725\u0003\u0002\u0002", - "\u0002\u0723\u0721\u0003\u0002\u0002\u0002\u0724\u0718\u0003\u0002\u0002", - "\u0002\u0724\u071c\u0003\u0002\u0002\u0002\u0725\u00c7\u0003\u0002\u0002", - "\u0002\u0726\u072c\u0005\u0130\u0099\u0002\u0727\u0729\t\u0006\u0002", - "\u0002\u0728\u072a\u0007\u00fd\u0002\u0002\u0729\u0728\u0003\u0002\u0002", - "\u0002\u0729\u072a\u0003\u0002\u0002\u0002\u072a\u072d\u0003\u0002\u0002", - "\u0002\u072b\u072d\u0007\u00fd\u0002\u0002\u072c\u0727\u0003\u0002\u0002", - "\u0002\u072c\u072b\u0003\u0002\u0002\u0002\u072c\u072d\u0003\u0002\u0002", - "\u0002\u072d\u00c9\u0003\u0002\u0002\u0002\u072e\u072f\t!\u0002\u0002", - "\u072f\u00cb\u0003\u0002\u0002\u0002\u0730\u0731\u0007\u010b\u0002\u0002", - "\u0731\u0749\u0007\u001d\u0002\u0002\u0732\u0735\u0005\u0098M\u0002", - "\u0733\u0734\u0007n\u0002\u0002\u0734\u0736\u0005\u0098M\u0002\u0735", - "\u0733\u0003\u0002\u0002\u0002\u0735\u0736\u0003\u0002\u0002\u0002\u0736", - "\u074a\u0003\u0002\u0002\u0002\u0737\u0739\u0007\u010c\u0002\u0002\u0738", - "\u073a\u0005\u0098M\u0002\u0739\u0738\u0003\u0002\u0002\u0002\u0739", - "\u073a\u0003\u0002\u0002\u0002\u073a\u073b\u0003\u0002\u0002\u0002\u073b", - "\u073c\u0007n\u0002\u0002\u073c\u074a\u0005\u0098M\u0002\u073d\u073f", - "\u0007\u010d\u0002\u0002\u073e\u0740\u0005\u0098M\u0002\u073f\u073e", - "\u0003\u0002\u0002\u0002\u073f\u0740\u0003\u0002\u0002\u0002\u0740\u0741", - "\u0003\u0002\u0002\u0002\u0741\u0742\u0007n\u0002\u0002\u0742\u074a", - "\u0005\u0098M\u0002\u0743\u0745\u0007\u010e\u0002\u0002\u0744\u0746", - "\u0005\u0098M\u0002\u0745\u0744\u0003\u0002\u0002\u0002\u0745\u0746", - "\u0003\u0002\u0002\u0002\u0746\u0747\u0003\u0002\u0002\u0002\u0747\u0748", - "\u0007n\u0002\u0002\u0748\u074a\u0005\u0098M\u0002\u0749\u0732\u0003", - "\u0002\u0002\u0002\u0749\u0737\u0003\u0002\u0002\u0002\u0749\u073d\u0003", - "\u0002\u0002\u0002\u0749\u0743\u0003\u0002\u0002\u0002\u074a\u074b\u0003", - "\u0002\u0002\u0002\u074b\u074c\u0007\u001e\u0002\u0002\u074c\u00cd\u0003", - "\u0002\u0002\u0002\u074d\u074e\u0007\u0110\u0002\u0002\u074e\u074f\u0007", - "\u001d\u0002\u0002\u074f\u075c\u0005\u0098M\u0002\u0750\u0751\u0007", - "\u001a\u0002\u0002\u0751\u0754\u0005\u0098M\u0002\u0752\u0753\u0007", - "\u001a\u0002\u0002\u0753\u0755\u0005\u0098M\u0002\u0754\u0752\u0003", - "\u0002\u0002\u0002\u0754\u0755\u0003\u0002\u0002\u0002\u0755\u075d\u0003", - "\u0002\u0002\u0002\u0756\u0757\u0007n\u0002\u0002\u0757\u075a\u0005", - "\u0098M\u0002\u0758\u0759\u0007u\u0002\u0002\u0759\u075b\u0005\u0098", - "M\u0002\u075a\u0758\u0003\u0002\u0002\u0002\u075a\u075b\u0003\u0002", - "\u0002\u0002\u075b\u075d\u0003\u0002\u0002\u0002\u075c\u0750\u0003\u0002", - "\u0002\u0002\u075c\u0756\u0003\u0002\u0002\u0002\u075d\u075e\u0003\u0002", - "\u0002\u0002\u075e\u075f\u0007\u001e\u0002\u0002\u075f\u00cf\u0003\u0002", - "\u0002\u0002\u0760\u0761\u0005\u0122\u0092\u0002\u0761\u0763\u0007\u001d", - "\u0002\u0002\u0762\u0764\u0005\u00d2j\u0002\u0763\u0762\u0003\u0002", - "\u0002\u0002\u0763\u0764\u0003\u0002\u0002\u0002\u0764\u0765\u0003\u0002", - "\u0002\u0002\u0765\u0766\u0007\u001e\u0002\u0002\u0766\u076f\u0003\u0002", - "\u0002\u0002\u0767\u0768\u0005\u012a\u0096\u0002\u0768\u076a\u0007\u001d", - "\u0002\u0002\u0769\u076b\u0005\u00e2r\u0002\u076a\u0769\u0003\u0002", - "\u0002\u0002\u076a\u076b\u0003\u0002\u0002\u0002\u076b\u076c\u0003\u0002", - "\u0002\u0002\u076c\u076d\u0007\u001e\u0002\u0002\u076d\u076f\u0003\u0002", - "\u0002\u0002\u076e\u0760\u0003\u0002\u0002\u0002\u076e\u0767\u0003\u0002", - "\u0002\u0002\u076f\u00d1\u0003\u0002\u0002\u0002\u0770\u0775\u0005\u00d4", - "k\u0002\u0771\u0772\u0007\u001a\u0002\u0002\u0772\u0774\u0005\u00d4", - "k\u0002\u0773\u0771\u0003\u0002\u0002\u0002\u0774\u0777\u0003\u0002", - "\u0002\u0002\u0775\u0773\u0003\u0002\u0002\u0002\u0775\u0776\u0003\u0002", - "\u0002\u0002\u0776\u00d3\u0003\u0002\u0002\u0002\u0777\u0775\u0003\u0002", - "\u0002\u0002\u0778\u077a\u0005\u0098M\u0002\u0779\u077b\u0005^0\u0002", - "\u077a\u0779\u0003\u0002\u0002\u0002\u077a\u077b\u0003\u0002\u0002\u0002", - "\u077b\u00d5\u0003\u0002\u0002\u0002\u077c\u077f\u0005\u00d8m\u0002", - "\u077d\u077f\u0005\u00dan\u0002\u077e\u077c\u0003\u0002\u0002\u0002", - "\u077e\u077d\u0003\u0002\u0002\u0002\u077f\u00d7\u0003\u0002\u0002\u0002", - "\u0780\u0781\u0007&\u0002\u0002\u0781\u0784\u0005\u014c\u00a7\u0002", - "\u0782\u0784\u0007\'\u0002\u0002\u0783\u0780\u0003\u0002\u0002\u0002", - "\u0783\u0782\u0003\u0002\u0002\u0002\u0784\u00d9\u0003\u0002\u0002\u0002", - "\u0785\u0787\u0007(\u0002\u0002\u0786\u0788\u0005\u0152\u00aa\u0002", - "\u0787\u0786\u0003\u0002\u0002\u0002\u0787\u0788\u0003\u0002\u0002\u0002", - "\u0788\u0789\u0003\u0002\u0002\u0002\u0789\u078b\u0005\u014c\u00a7\u0002", - "\u078a\u078c\u0005\u012c\u0097\u0002\u078b\u078a\u0003\u0002\u0002\u0002", - "\u078b\u078c\u0003\u0002\u0002\u0002\u078c\u00db\u0003\u0002\u0002\u0002", - "\u078d\u078e\u0007\u0111\u0002\u0002\u078e\u078f\u0005\u0098M\u0002", - "\u078f\u00dd\u0003\u0002\u0002\u0002\u0790\u0791\u0007\u0112\u0002\u0002", - "\u0791\u0792\u0005\u0098M\u0002\u0792\u00df\u0003\u0002\u0002\u0002", - "\u0793\u0794\u0007\u0113\u0002\u0002\u0794\u0795\u0005\u0098M\u0002", - "\u0795\u00e1\u0003\u0002\u0002\u0002\u0796\u079b\u0005\u0098M\u0002", - "\u0797\u0798\u0007\u001a\u0002\u0002\u0798\u079a\u0005\u0098M\u0002", - "\u0799\u0797\u0003\u0002\u0002\u0002\u079a\u079d\u0003\u0002\u0002\u0002", - "\u079b\u0799\u0003\u0002\u0002\u0002\u079b\u079c\u0003\u0002\u0002\u0002", - "\u079c\u00e3\u0003\u0002\u0002\u0002\u079d\u079b\u0003\u0002\u0002\u0002", - "\u079e\u079f\u0007\u00d7\u0002\u0002\u079f\u07a2\u0007\u011b\u0002\u0002", - "\u07a0\u07a2\u0007\u00f2\u0002\u0002\u07a1\u079e\u0003\u0002\u0002\u0002", - "\u07a1\u07a0\u0003\u0002\u0002\u0002\u07a2\u00e5\u0003\u0002\u0002\u0002", - "\u07a3\u07a4\u0007\u009e\u0002\u0002\u07a4\u00e7\u0003\u0002\u0002\u0002", - "\u07a5\u07a6\u0007\u0010\u0002\u0002\u07a6\u00e9\u0003\u0002\u0002\u0002", - "\u07a7\u07aa\u0005\u00ecw\u0002\u07a8\u07aa\t\"\u0002\u0002\u07a9\u07a7", - "\u0003\u0002\u0002\u0002\u07a9\u07a8\u0003\u0002\u0002\u0002\u07aa\u00eb", - "\u0003\u0002\u0002\u0002\u07ab\u07ac\t#\u0002\u0002\u07ac\u00ed\u0003", - "\u0002\u0002\u0002\u07ad\u07ae\u0007\u001d\u0002\u0002\u07ae\u07af\u0005", - "\u00e2r\u0002\u07af\u07b0\u0007\u001e\u0002\u0002\u07b0\u00ef\u0003", - "\u0002\u0002\u0002\u07b1\u07b2\u0007\u001d\u0002\u0002\u07b2\u07b3\u0005", - "\u0098M\u0002\u07b3\u07b4\u0007\u001e\u0002\u0002\u07b4\u00f1\u0003", - "\u0002\u0002\u0002\u07b5\u07b6\u0007\u001d\u0002\u0002\u07b6\u07b7\u0005", - "\u00a4S\u0002\u07b7\u07b8\u0007\u001e\u0002\u0002\u07b8\u00f3\u0003", - "\u0002\u0002\u0002\u07b9\u07be\u0005\u00f6|\u0002\u07ba\u07bb\u0007", - "\u001a\u0002\u0002\u07bb\u07bd\u0005\u00f6|\u0002\u07bc\u07ba\u0003", - "\u0002\u0002\u0002\u07bd\u07c0\u0003\u0002\u0002\u0002\u07be\u07bc\u0003", - "\u0002\u0002\u0002\u07be\u07bf\u0003\u0002\u0002\u0002\u07bf\u00f5\u0003", - "\u0002\u0002\u0002\u07c0\u07be\u0003\u0002\u0002\u0002\u07c1\u07c3\u0005", - "\u0098M\u0002\u07c2\u07c4\u0005D#\u0002\u07c3\u07c2\u0003\u0002\u0002", - "\u0002\u07c3\u07c4\u0003\u0002\u0002\u0002\u07c4\u00f7\u0003\u0002\u0002", - "\u0002\u07c5\u07c6\t$\u0002\u0002\u07c6\u00f9\u0003\u0002\u0002\u0002", - "\u07c7\u07c9\t%\u0002\u0002\u07c8\u07ca\u0005\u00fe\u0080\u0002\u07c9", - "\u07c8\u0003\u0002\u0002\u0002\u07c9\u07ca\u0003\u0002\u0002\u0002\u07ca", - "\u07cc\u0003\u0002\u0002\u0002\u07cb\u07cd\u0005\u0100\u0081\u0002\u07cc", - "\u07cb\u0003\u0002\u0002\u0002\u07cc\u07cd\u0003\u0002\u0002\u0002\u07cd", - "\u088b\u0003\u0002\u0002\u0002\u07ce\u07d4\u0007\u012a\u0002\u0002\u07cf", - "\u07d1\u0007\u012b\u0002\u0002\u07d0\u07d2\u0007\u012c\u0002\u0002\u07d1", - "\u07d0\u0003\u0002\u0002\u0002\u07d1\u07d2\u0003\u0002\u0002\u0002\u07d2", - "\u07d4\u0003\u0002\u0002\u0002\u07d3\u07ce\u0003\u0002\u0002\u0002\u07d3", - "\u07cf\u0003\u0002\u0002\u0002\u07d4\u07d6\u0003\u0002\u0002\u0002\u07d5", - "\u07d7\u0005\u014a\u00a6\u0002\u07d6\u07d5\u0003\u0002\u0002\u0002\u07d6", - "\u07d7\u0003\u0002\u0002\u0002\u07d7\u07d9\u0003\u0002\u0002\u0002\u07d8", - "\u07da\u0005\u0100\u0081\u0002\u07d9\u07d8\u0003\u0002\u0002\u0002\u07d9", - "\u07da\u0003\u0002\u0002\u0002\u07da\u088b\u0003\u0002\u0002\u0002\u07db", - "\u07dd\t&\u0002\u0002\u07dc\u07de\u0005\u0148\u00a5\u0002\u07dd\u07dc", - "\u0003\u0002\u0002\u0002\u07dd\u07de\u0003\u0002\u0002\u0002\u07de\u07e0", - "\u0003\u0002\u0002\u0002\u07df\u07e1\u0005\u0100\u0081\u0002\u07e0\u07df", - "\u0003\u0002\u0002\u0002\u07e0\u07e1\u0003\u0002\u0002\u0002\u07e1\u088b", - "\u0003\u0002\u0002\u0002\u07e2\u07e4\u0007\u0130\u0002\u0002\u07e3\u07e5", - "\u0005\u00fe\u0080\u0002\u07e4\u07e3\u0003\u0002\u0002\u0002\u07e4\u07e5", - "\u0003\u0002\u0002\u0002\u07e5\u088b\u0003\u0002\u0002\u0002\u07e6\u088b", - "\t\'\u0002\u0002\u07e7\u07e9\u0005\u00fc\u007f\u0002\u07e8\u07ea\u0005", - "\u00fe\u0080\u0002\u07e9\u07e8\u0003\u0002\u0002\u0002\u07e9\u07ea\u0003", - "\u0002\u0002\u0002\u07ea\u07ec\u0003\u0002\u0002\u0002\u07eb\u07ed\u0007", - "\u00ab\u0002\u0002\u07ec\u07eb\u0003\u0002\u0002\u0002\u07ec\u07ed\u0003", - "\u0002\u0002\u0002\u07ed\u088b\u0003\u0002\u0002\u0002\u07ee\u07f0\u0007", - "\u00ab\u0002\u0002\u07ef\u07f1\u0005\u00fe\u0080\u0002\u07f0\u07ef\u0003", - "\u0002\u0002\u0002\u07f0\u07f1\u0003\u0002\u0002\u0002\u07f1\u088b\u0003", - "\u0002\u0002\u0002\u07f2\u07f9\u0007\u0133\u0002\u0002\u07f3\u07f9\u0007", - "\u00d7\u0002\u0002\u07f4\u07f5\u0007\u00d7\u0002\u0002\u07f5\u07f9\u0007", - "\u0132\u0002\u0002\u07f6\u07f9\u0007\u010f\u0002\u0002\u07f7\u07f9\u0007", - "\u013e\u0002\u0002\u07f8\u07f2\u0003\u0002\u0002\u0002\u07f8\u07f3\u0003", - "\u0002\u0002\u0002\u07f8\u07f4\u0003\u0002\u0002\u0002\u07f8\u07f6\u0003", - "\u0002\u0002\u0002\u07f8\u07f7\u0003\u0002\u0002\u0002\u07f9\u07fa\u0003", - "\u0002\u0002\u0002\u07fa\u07fc\u0005\u00fe\u0080\u0002\u07fb\u07fd\u0005", - "\u0102\u0082\u0002\u07fc\u07fb\u0003\u0002\u0002\u0002\u07fc\u07fd\u0003", - "\u0002\u0002\u0002\u07fd\u088b\u0003\u0002\u0002\u0002\u07fe\u07ff\u0007", - "\u0134\u0002\u0002\u07ff\u0809\u0007\u0133\u0002\u0002\u0800\u0809\u0007", - "\u0135\u0002\u0002\u0801\u0802\u0007\u0136\u0002\u0002\u0802\u0809\u0007", - "\u0133\u0002\u0002\u0803\u0804\u0007\u0134\u0002\u0002\u0804\u0805\u0007", - "\u00d7\u0002\u0002\u0805\u0809\u0007\u0132\u0002\u0002\u0806\u0807\u0007", - "\u0136\u0002\u0002\u0807\u0809\u0007\u0132\u0002\u0002\u0808\u07fe\u0003", - "\u0002\u0002\u0002\u0808\u0800\u0003\u0002\u0002\u0002\u0808\u0801\u0003", - "\u0002\u0002\u0002\u0808\u0803\u0003\u0002\u0002\u0002\u0808\u0806\u0003", - "\u0002\u0002\u0002\u0809\u080a\u0003\u0002\u0002\u0002\u080a\u080c\u0005", - "\u00fe\u0080\u0002\u080b\u080d\u0007\u00ab\u0002\u0002\u080c\u080b\u0003", - "\u0002\u0002\u0002\u080c\u080d\u0003\u0002\u0002\u0002\u080d\u088b\u0003", - "\u0002\u0002\u0002\u080e\u080f\u0007\u0137\u0002\u0002\u080f\u088b\u0005", - "\u00fe\u0080\u0002\u0810\u0812\u0007>\u0002\u0002\u0811\u0813\u0005", - "\u00fe\u0080\u0002\u0812\u0811\u0003\u0002\u0002\u0002\u0812\u0813\u0003", - "\u0002\u0002\u0002\u0813\u0815\u0003\u0002\u0002\u0002\u0814\u0816\u0005", - "\u0100\u0081\u0002\u0815\u0814\u0003\u0002\u0002\u0002\u0815\u0816\u0003", - "\u0002\u0002\u0002\u0816\u088b\u0003\u0002\u0002\u0002\u0817\u088b\u0007", - "\u00d9\u0002\u0002\u0818\u081a\u0007\u00db\u0002\u0002\u0819\u081b\u0005", - "\u010a\u0086\u0002\u081a\u0819\u0003\u0002\u0002\u0002\u081a\u081b\u0003", - "\u0002\u0002\u0002\u081b\u088b\u0003\u0002\u0002\u0002\u081c\u081e\u0007", - "\u00dc\u0002\u0002\u081d\u081f\u0005\u010a\u0086\u0002\u081e\u081d\u0003", - "\u0002\u0002\u0002\u081e\u081f\u0003\u0002\u0002\u0002\u081f\u088b\u0003", - "\u0002\u0002\u0002\u0820\u0821\u0007\u00dc\u0002\u0002\u0821\u0822\u0007", - "f\u0002\u0002\u0822\u0823\u0007\u014e\u0002\u0002\u0823\u0824\u0007", - "\u00db\u0002\u0002\u0824\u0826\u0007\u00df\u0002\u0002\u0825\u0827\u0005", - "\u010a\u0086\u0002\u0826\u0825\u0003\u0002\u0002\u0002\u0826\u0827\u0003", - "\u0002\u0002\u0002\u0827\u088b\u0003\u0002\u0002\u0002\u0828\u0829\u0007", - "\u00dc\u0002\u0002\u0829\u082a\u0007g\u0002\u0002\u082a\u082b\u0007", - "\u014e\u0002\u0002\u082b\u082c\u0007\u00db\u0002\u0002\u082c\u082e\u0007", - "\u00df\u0002\u0002\u082d\u082f\u0005\u010a\u0086\u0002\u082e\u082d\u0003", - "\u0002\u0002\u0002\u082e\u082f\u0003\u0002\u0002\u0002\u082f\u088b\u0003", - "\u0002\u0002\u0002\u0830\u0831\u0007\u00dc\u0002\u0002\u0831\u0832\u0007", - "f\u0002\u0002\u0832\u0833\u0007\u00db\u0002\u0002\u0833\u0835\u0007", - "\u00df\u0002\u0002\u0834\u0836\u0005\u010a\u0086\u0002\u0835\u0834\u0003", - "\u0002\u0002\u0002\u0835\u0836\u0003\u0002\u0002\u0002\u0836\u088b\u0003", - "\u0002\u0002\u0002\u0837\u0839\u0007\u010a\u0002\u0002\u0838\u083a\u0005", - "\u010a\u0086\u0002\u0839\u0838\u0003\u0002\u0002\u0002\u0839\u083a\u0003", - "\u0002\u0002\u0002\u083a\u088b\u0003\u0002\u0002\u0002\u083b\u088b\u0007", - "\u0138\u0002\u0002\u083c\u083e\u0007\u0139\u0002\u0002\u083d\u083f\u0005", - "\u00fe\u0080\u0002\u083e\u083d\u0003\u0002\u0002\u0002\u083e\u083f\u0003", - "\u0002\u0002\u0002\u083f\u088b\u0003\u0002\u0002\u0002\u0840\u088b\t", - "(\u0002\u0002\u0841\u0842\u0007\u013c\u0002\u0002\u0842\u088b\u0007", - "\u0137\u0002\u0002\u0843\u0847\u0007\u013c\u0002\u0002\u0844\u0845\u0007", - "\u00d7\u0002\u0002\u0845\u0848\u0007\u0132\u0002\u0002\u0846\u0848\u0007", - "\u0133\u0002\u0002\u0847\u0844\u0003\u0002\u0002\u0002\u0847\u0846\u0003", - "\u0002\u0002\u0002\u0847\u0848\u0003\u0002\u0002\u0002\u0848\u084a\u0003", - "\u0002\u0002\u0002\u0849\u084b\u0005\u0102\u0082\u0002\u084a\u0849\u0003", - "\u0002\u0002\u0002\u084a\u084b\u0003\u0002\u0002\u0002\u084b\u088b\u0003", - "\u0002\u0002\u0002\u084c\u084e\u0007\u013d\u0002\u0002\u084d\u084f\u0005", - "\u0102\u0082\u0002\u084e\u084d\u0003\u0002\u0002\u0002\u084e\u084f\u0003", - "\u0002\u0002\u0002\u084f\u088b\u0003\u0002\u0002\u0002\u0850\u0852\u0007", - "\u013e\u0002\u0002\u0851\u0853\u0005\u00fe\u0080\u0002\u0852\u0851\u0003", - "\u0002\u0002\u0002\u0852\u0853\u0003\u0002\u0002\u0002\u0853\u0855\u0003", - "\u0002\u0002\u0002\u0854\u0856\u0005\u0102\u0082\u0002\u0855\u0854\u0003", - "\u0002\u0002\u0002\u0855\u0856\u0003\u0002\u0002\u0002\u0856\u088b\u0003", - "\u0002\u0002\u0002\u0857\u0859\u0007\u013f\u0002\u0002\u0858\u085a\u0005", - "\u0102\u0082\u0002\u0859\u0858\u0003\u0002\u0002\u0002\u0859\u085a\u0003", - "\u0002\u0002\u0002\u085a\u088b\u0003\u0002\u0002\u0002\u085b\u085d\u0007", - "\u0140\u0002\u0002\u085c\u085e\u0005\u0102\u0082\u0002\u085d\u085c\u0003", - "\u0002\u0002\u0002\u085d\u085e\u0003\u0002\u0002\u0002\u085e\u088b\u0003", - "\u0002\u0002\u0002\u085f\u0860\u0007\u0141\u0002\u0002\u0860\u0862\u0005", - "\u0138\u009d\u0002\u0861\u0863\u0005\u0102\u0082\u0002\u0862\u0861\u0003", - "\u0002\u0002\u0002\u0862\u0863\u0003\u0002\u0002\u0002\u0863\u088b\u0003", - "\u0002\u0002\u0002\u0864\u0865\u0007\u011b\u0002\u0002\u0865\u0867\u0005", - "\u0138\u009d\u0002\u0866\u0868\u0005\u0102\u0082\u0002\u0867\u0866\u0003", - "\u0002\u0002\u0002\u0867\u0868\u0003\u0002\u0002\u0002\u0868\u088b\u0003", - "\u0002\u0002\u0002\u0869\u088b\u0007\u0142\u0002\u0002\u086a\u088b\u0007", - "\u0117\u0002\u0002\u086b\u088b\t)\u0002\u0002\u086c\u088b\u0007\u0152", - "\u0002\u0002\u086d\u088b\u0007\u0150\u0002\u0002\u086e\u088b\u0007\u0151", - "\u0002\u0002\u086f\u088b\u0007\u00ad\u0002\u0002\u0870\u0879\u0007\u0141", - "\u0002\u0002\u0871\u0876\u0005\u0098M\u0002\u0872\u0873\u0007\u001a", - "\u0002\u0002\u0873\u0875\u0005\u0098M\u0002\u0874\u0872\u0003\u0002", - "\u0002\u0002\u0875\u0878\u0003\u0002\u0002\u0002\u0876\u0874\u0003\u0002", - "\u0002\u0002\u0876\u0877\u0003\u0002\u0002\u0002\u0877\u087a\u0003\u0002", - "\u0002\u0002\u0878\u0876\u0003\u0002\u0002\u0002\u0879\u0871\u0003\u0002", - "\u0002\u0002\u0879\u087a\u0003\u0002\u0002\u0002\u087a\u088b\u0003\u0002", - "\u0002\u0002\u087b\u0884\u0007\u011b\u0002\u0002\u087c\u0881\u0005\u0098", - "M\u0002\u087d\u087e\u0007\u001a\u0002\u0002\u087e\u0880\u0005\u0098", - "M\u0002\u087f\u087d\u0003\u0002\u0002\u0002\u0880\u0883\u0003\u0002", - "\u0002\u0002\u0881\u087f\u0003\u0002\u0002\u0002\u0881\u0882\u0003\u0002", - "\u0002\u0002\u0882\u0885\u0003\u0002\u0002\u0002\u0883\u0881\u0003\u0002", - "\u0002\u0002\u0884\u087c\u0003\u0002\u0002\u0002\u0884\u0885\u0003\u0002", - "\u0002\u0002\u0885\u088b\u0003\u0002\u0002\u0002\u0886\u0888\u0005\u0124", - "\u0093\u0002\u0887\u0889\u0005\u014a\u00a6\u0002\u0888\u0887\u0003\u0002", - "\u0002\u0002\u0888\u0889\u0003\u0002\u0002\u0002\u0889\u088b\u0003\u0002", - "\u0002\u0002\u088a\u07c7\u0003\u0002\u0002\u0002\u088a\u07d3\u0003\u0002", - "\u0002\u0002\u088a\u07db\u0003\u0002\u0002\u0002\u088a\u07e2\u0003\u0002", - "\u0002\u0002\u088a\u07e6\u0003\u0002\u0002\u0002\u088a\u07e7\u0003\u0002", - "\u0002\u0002\u088a\u07ee\u0003\u0002\u0002\u0002\u088a\u07f8\u0003\u0002", - "\u0002\u0002\u088a\u0808\u0003\u0002\u0002\u0002\u088a\u080e\u0003\u0002", - "\u0002\u0002\u088a\u0810\u0003\u0002\u0002\u0002\u088a\u0817\u0003\u0002", - "\u0002\u0002\u088a\u0818\u0003\u0002\u0002\u0002\u088a\u081c\u0003\u0002", - "\u0002\u0002\u088a\u0820\u0003\u0002\u0002\u0002\u088a\u0828\u0003\u0002", - "\u0002\u0002\u088a\u0830\u0003\u0002\u0002\u0002\u088a\u0837\u0003\u0002", - "\u0002\u0002\u088a\u083b\u0003\u0002\u0002\u0002\u088a\u083c\u0003\u0002", - "\u0002\u0002\u088a\u0840\u0003\u0002\u0002\u0002\u088a\u0841\u0003\u0002", - "\u0002\u0002\u088a\u0843\u0003\u0002\u0002\u0002\u088a\u084c\u0003\u0002", - "\u0002\u0002\u088a\u0850\u0003\u0002\u0002\u0002\u088a\u0857\u0003\u0002", - "\u0002\u0002\u088a\u085b\u0003\u0002\u0002\u0002\u088a\u085f\u0003\u0002", - "\u0002\u0002\u088a\u0864\u0003\u0002\u0002\u0002\u088a\u0869\u0003\u0002", - "\u0002\u0002\u088a\u086a\u0003\u0002\u0002\u0002\u088a\u086b\u0003\u0002", - "\u0002\u0002\u088a\u086c\u0003\u0002\u0002\u0002\u088a\u086d\u0003\u0002", - "\u0002\u0002\u088a\u086e\u0003\u0002\u0002\u0002\u088a\u086f\u0003\u0002", - "\u0002\u0002\u088a\u0870\u0003\u0002\u0002\u0002\u088a\u087b\u0003\u0002", - "\u0002\u0002\u088a\u0886\u0003\u0002\u0002\u0002\u088b\u00fb\u0003\u0002", - "\u0002\u0002\u088c\u0890\u0007\u0136\u0002\u0002\u088d\u088e\u0007\u0134", - "\u0002\u0002\u088e\u0890\u0007\u00d7\u0002\u0002\u088f\u088c\u0003\u0002", - "\u0002\u0002\u088f\u088d\u0003\u0002\u0002\u0002\u0890\u00fd\u0003\u0002", - "\u0002\u0002\u0891\u0894\u0007\u001d\u0002\u0002\u0892\u0895\u0005\u0134", - "\u009b\u0002\u0893\u0895\u0007/\u0002\u0002\u0894\u0892\u0003\u0002", - "\u0002\u0002\u0894\u0893\u0003\u0002\u0002\u0002\u0895\u0896\u0003\u0002", - "\u0002\u0002\u0896\u0897\u0007\u001e\u0002\u0002\u0897\u00ff\u0003\u0002", - "\u0002\u0002\u0898\u089a\t*\u0002\u0002\u0899\u0898\u0003\u0002\u0002", - "\u0002\u089a\u089b\u0003\u0002\u0002\u0002\u089b\u0899\u0003\u0002\u0002", - "\u0002\u089b\u089c\u0003\u0002\u0002\u0002\u089c\u0101\u0003\u0002\u0002", - "\u0002\u089d\u08ac\u0005\u0104\u0083\u0002\u089e\u08ac\u0005\u0106\u0084", - "\u0002\u089f\u08ac\u0007\u0145\u0002\u0002\u08a0\u08a1\u0005\u00e4s", - "\u0002\u08a1\u08a3\u0005\u010c\u0087\u0002\u08a2\u08a4\u0007\u00ab\u0002", - "\u0002\u08a3\u08a2\u0003\u0002\u0002\u0002\u08a3\u08a4\u0003\u0002\u0002", - "\u0002\u08a4\u08ac\u0003\u0002\u0002\u0002\u08a5\u08a9\u0007\u00ab\u0002", - "\u0002\u08a6\u08a7\u0005\u00e4s\u0002\u08a7\u08a8\u0005\u010c\u0087", - "\u0002\u08a8\u08aa\u0003\u0002\u0002\u0002\u08a9\u08a6\u0003\u0002\u0002", - "\u0002\u08a9\u08aa\u0003\u0002\u0002\u0002\u08aa\u08ac\u0003\u0002\u0002", - "\u0002\u08ab\u089d\u0003\u0002\u0002\u0002\u08ab\u089e\u0003\u0002\u0002", - "\u0002\u08ab\u089f\u0003\u0002\u0002\u0002\u08ab\u08a0\u0003\u0002\u0002", - "\u0002\u08ab\u08a5\u0003\u0002\u0002\u0002\u08ac\u0103\u0003\u0002\u0002", - "\u0002\u08ad\u08af\u0007\u00f1\u0002\u0002\u08ae\u08b0\u0007\u00ab\u0002", - "\u0002\u08af\u08ae\u0003\u0002\u0002\u0002\u08af\u08b0\u0003\u0002\u0002", - "\u0002\u08b0\u08b4\u0003\u0002\u0002\u0002\u08b1\u08b2\u0007\u00ab\u0002", - "\u0002\u08b2\u08b4\u0007\u00f1\u0002\u0002\u08b3\u08ad\u0003\u0002\u0002", - "\u0002\u08b3\u08b1\u0003\u0002\u0002\u0002\u08b4\u0105\u0003\u0002\u0002", - "\u0002\u08b5\u08b7\u0007\u0146\u0002\u0002\u08b6\u08b8\u0007\u00ab\u0002", - "\u0002\u08b7\u08b6\u0003\u0002\u0002\u0002\u08b7\u08b8\u0003\u0002\u0002", - "\u0002\u08b8\u08bc\u0003\u0002\u0002\u0002\u08b9\u08ba\u0007\u00ab\u0002", - "\u0002\u08ba\u08bc\u0007\u0146\u0002\u0002\u08bb\u08b5\u0003\u0002\u0002", - "\u0002\u08bb\u08b9\u0003\u0002\u0002\u0002\u08bc\u0107\u0003\u0002\u0002", - "\u0002\u08bd\u08be\u0007\u001d\u0002\u0002\u08be\u08bf\u0005\u0130\u0099", - "\u0002\u08bf\u08c0\u0007\u001e\u0002\u0002\u08c0\u0109\u0003\u0002\u0002", - "\u0002\u08c1\u08c2\u0007\u001d\u0002\u0002\u08c2\u08c3\u0007.\u0002", - "\u0002\u08c3\u08c4\u0007\u001e\u0002\u0002\u08c4\u010b\u0003\u0002\u0002", - "\u0002\u08c5\u08c9\u0005\u014c\u00a7\u0002\u08c6\u08c9\u0007\u00ab\u0002", - "\u0002\u08c7\u08c9\u0007?\u0002\u0002\u08c8\u08c5\u0003\u0002\u0002", - "\u0002\u08c8\u08c6\u0003\u0002\u0002\u0002\u08c8\u08c7\u0003\u0002\u0002", - "\u0002\u08c9\u010d\u0003\u0002\u0002\u0002\u08ca\u08ce\u0005\u014c\u00a7", - "\u0002\u08cb\u08ce\u0007?\u0002\u0002\u08cc\u08ce\u0007\u00ab\u0002", - "\u0002\u08cd\u08ca\u0003\u0002\u0002\u0002\u08cd\u08cb\u0003\u0002\u0002", - "\u0002\u08cd\u08cc\u0003\u0002\u0002\u0002\u08ce\u010f\u0003\u0002\u0002", - "\u0002\u08cf\u08d0\u0007\u00b1\u0002\u0002\u08d0\u08d1\u0005\u010e\u0088", - "\u0002\u08d1\u0111\u0003\u0002\u0002\u0002\u08d2\u08d3\u0005\u00e4s", - "\u0002\u08d3\u08d4\u0005\u010c\u0087\u0002\u08d4\u0113\u0003\u0002\u0002", - "\u0002\u08d5\u08d7\u0007\u008c\u0002\u0002\u08d6\u08d8\u0005\u0116\u008c", - "\u0002\u08d7\u08d6\u0003\u0002\u0002\u0002\u08d8\u08d9\u0003\u0002\u0002", - "\u0002\u08d9\u08d7\u0003\u0002\u0002\u0002\u08d9\u08da\u0003\u0002\u0002", - "\u0002\u08da\u0115\u0003\u0002\u0002\u0002\u08db\u08dc\u0007\u0147\u0002", - "\u0002\u08dc\u08dd\u0007U\u0002\u0002\u08dd\u08e8\u0005\u013c\u009f", - "\u0002\u08de\u08e0\u0007\u0148\u0002\u0002\u08df\u08de\u0003\u0002\u0002", - "\u0002\u08df\u08e0\u0003\u0002\u0002\u0002\u08e0\u08e1\u0003\u0002\u0002", - "\u0002\u08e1\u08e2\u0007\u0149\u0002\u0002\u08e2\u08e3\u0007U\u0002", - "\u0002\u08e3\u08e8\u0005\u013c\u009f\u0002\u08e4\u08e5\u0007\u014a\u0002", - "\u0002\u08e5\u08e6\u0007U\u0002\u0002\u08e6\u08e8\u0005\u013c\u009f", - "\u0002\u08e7\u08db\u0003\u0002\u0002\u0002\u08e7\u08df\u0003\u0002\u0002", - "\u0002\u08e7\u08e4\u0003\u0002\u0002\u0002\u08e8\u0117\u0003\u0002\u0002", - "\u0002\u08e9\u08eb\u0007\u014b\u0002\u0002\u08ea\u08ec\u0005\u011a\u008e", - "\u0002\u08eb\u08ea\u0003\u0002\u0002\u0002\u08ec\u08ed\u0003\u0002\u0002", - "\u0002\u08ed\u08eb\u0003\u0002\u0002\u0002\u08ed\u08ee\u0003\u0002\u0002", - "\u0002\u08ee\u0119\u0003\u0002\u0002\u0002\u08ef\u08f0\t+\u0002\u0002", - "\u08f0\u08f1\u0007U\u0002\u0002\u08f1\u08f2\u0005\u013c\u009f\u0002", - "\u08f2\u011b\u0003\u0002\u0002\u0002\u08f3\u08f4\u0007T\u0002\u0002", - "\u08f4\u08f5\u0005\u0128\u0095\u0002\u08f5\u011d\u0003\u0002\u0002\u0002", - "\u08f6\u08f7\u0007\u001d\u0002\u0002\u08f7\u08fc\u0005\u0124\u0093\u0002", - "\u08f8\u08f9\u0007\u001a\u0002\u0002\u08f9\u08fb\u0005\u0124\u0093\u0002", - "\u08fa\u08f8\u0003\u0002\u0002\u0002\u08fb\u08fe\u0003\u0002\u0002\u0002", - "\u08fc\u08fa\u0003\u0002\u0002\u0002\u08fc\u08fd\u0003\u0002\u0002\u0002", - "\u08fd\u08ff\u0003\u0002\u0002\u0002\u08fe\u08fc\u0003\u0002\u0002\u0002", - "\u08ff\u0900\u0007\u001e\u0002\u0002\u0900\u011f\u0003\u0002\u0002\u0002", - "\u0901\u0906\u0005\u012a\u0096\u0002\u0902\u0903\u0007\u001a\u0002\u0002", - "\u0903\u0905\u0005\u012a\u0096\u0002\u0904\u0902\u0003\u0002\u0002\u0002", - "\u0905\u0908\u0003\u0002\u0002\u0002\u0906\u0904\u0003\u0002\u0002\u0002", - "\u0906\u0907\u0003\u0002\u0002\u0002\u0907\u0121\u0003\u0002\u0002\u0002", - "\u0908\u0906\u0003\u0002\u0002\u0002\u0909\u090a\t,\u0002\u0002\u090a", - "\u0123\u0003\u0002\u0002\u0002\u090b\u090e\u0005\u0122\u0092\u0002\u090c", - "\u090e\u0005\u0154\u00ab\u0002\u090d\u090b\u0003\u0002\u0002\u0002\u090d", - "\u090c\u0003\u0002\u0002\u0002\u090e\u0125\u0003\u0002\u0002\u0002\u090f", - "\u0914\u0005\u0124\u0093\u0002\u0910\u0911\u0007\u001a\u0002\u0002\u0911", - "\u0913\u0005\u0124\u0093\u0002\u0912\u0910\u0003\u0002\u0002\u0002\u0913", - "\u0916\u0003\u0002\u0002\u0002\u0914\u0912\u0003\u0002\u0002\u0002\u0914", - "\u0915\u0003\u0002\u0002\u0002\u0915\u0127\u0003\u0002\u0002\u0002\u0916", - "\u0914\u0003\u0002\u0002\u0002\u0917\u0918\u0007\u001d\u0002\u0002\u0918", - "\u0919\u0005\u0126\u0094\u0002\u0919\u091a\u0007\u001e\u0002\u0002\u091a", - "\u0129\u0003\u0002\u0002\u0002\u091b\u0920\u0005\u0124\u0093\u0002\u091c", - "\u091d\u0007\u0019\u0002\u0002\u091d\u091f\u0005\u0124\u0093\u0002\u091e", - "\u091c\u0003\u0002\u0002\u0002\u091f\u0922\u0003\u0002\u0002\u0002\u0920", - "\u091e\u0003\u0002\u0002\u0002\u0920\u0921\u0003\u0002\u0002\u0002\u0921", - "\u0925\u0003\u0002\u0002\u0002\u0922\u0920\u0003\u0002\u0002\u0002\u0923", - "\u0924\u0007\u0019\u0002\u0002\u0924\u0926\u0007\r\u0002\u0002\u0925", - "\u0923\u0003\u0002\u0002\u0002\u0925\u0926\u0003\u0002\u0002\u0002\u0926", - "\u012b\u0003\u0002\u0002\u0002\u0927\u0928\u0007\u0019\u0002\u0002\u0928", - "\u0929\u0005\u0124\u0093\u0002\u0929\u012d\u0003\u0002\u0002\u0002\u092a", - "\u092b\t-\u0002\u0002\u092b\u012f\u0003\u0002\u0002\u0002\u092c\u092d", - "\t.\u0002\u0002\u092d\u0131\u0003\u0002\u0002\u0002\u092e\u092f\t/\u0002", - "\u0002\u092f\u0133\u0003\u0002\u0002\u0002\u0930\u0931\t.\u0002\u0002", - "\u0931\u0135\u0003\u0002\u0002\u0002\u0932\u093c\u0005\u013e\u00a0\u0002", - "\u0933\u093c\u0005\u0140\u00a1\u0002\u0934\u093c\u0005\u0146\u00a4\u0002", - "\u0935\u093c\u0005\u0144\u00a3\u0002\u0936\u093c\u0005\u0142\u00a2\u0002", - "\u0937\u0939\u0007\u0155\u0002\u0002\u0938\u0937\u0003\u0002\u0002\u0002", - "\u0938\u0939\u0003\u0002\u0002\u0002\u0939\u093a\u0003\u0002\u0002\u0002", - "\u093a\u093c\t0\u0002\u0002\u093b\u0932\u0003\u0002\u0002\u0002\u093b", - "\u0933\u0003\u0002\u0002\u0002\u093b\u0934\u0003\u0002\u0002\u0002\u093b", - "\u0935\u0003\u0002\u0002\u0002\u093b\u0936\u0003\u0002\u0002\u0002\u093b", - "\u0938\u0003\u0002\u0002\u0002\u093c\u0137\u0003\u0002\u0002\u0002\u093d", - "\u093e\u0007\u001d\u0002\u0002\u093e\u0943\u0005\u013c\u009f\u0002\u093f", - "\u0940\u0007\u001a\u0002\u0002\u0940\u0942\u0005\u013c\u009f\u0002\u0941", - "\u093f\u0003\u0002\u0002\u0002\u0942\u0945\u0003\u0002\u0002\u0002\u0943", - "\u0941\u0003\u0002\u0002\u0002\u0943\u0944\u0003\u0002\u0002\u0002\u0944", - "\u0946\u0003\u0002\u0002\u0002\u0945\u0943\u0003\u0002\u0002\u0002\u0946", - "\u0947\u0007\u001e\u0002\u0002\u0947\u0139\u0003\u0002\u0002\u0002\u0948", - "\u0949\t1\u0002\u0002\u0949\u013b\u0003\u0002\u0002\u0002\u094a\u094e", - "\u0005\u013a\u009e\u0002\u094b\u094e\u0007,\u0002\u0002\u094c\u094e", - "\u0007-\u0002\u0002\u094d\u094a\u0003\u0002\u0002\u0002\u094d\u094b", - "\u0003\u0002\u0002\u0002\u094d\u094c\u0003\u0002\u0002\u0002\u094e\u013d", - "\u0003\u0002\u0002\u0002\u094f\u0951\u0007\u0155\u0002\u0002\u0950\u094f", - "\u0003\u0002\u0002\u0002\u0950\u0951\u0003\u0002\u0002\u0002\u0951\u0952", - "\u0003\u0002\u0002\u0002\u0952\u0955\u0005\u013a\u009e\u0002\u0953\u0955", - "\u0007\u0157\u0002\u0002\u0954\u0950\u0003\u0002\u0002\u0002\u0954\u0953", - "\u0003\u0002\u0002\u0002\u0955\u0959\u0003\u0002\u0002\u0002\u0956\u0958", - "\u0005\u013a\u009e\u0002\u0957\u0956\u0003\u0002\u0002\u0002\u0958\u095b", - "\u0003\u0002\u0002\u0002\u0959\u0957\u0003\u0002\u0002\u0002\u0959\u095a", - "\u0003\u0002\u0002\u0002\u095a\u013f\u0003\u0002\u0002\u0002\u095b\u0959", - "\u0003\u0002\u0002\u0002\u095c\u095d\t/\u0002\u0002\u095d\u0141\u0003", - "\u0002\u0002\u0002\u095e\u095f\t2\u0002\u0002\u095f\u0143\u0003\u0002", - "\u0002\u0002\u0960\u0961\t3\u0002\u0002\u0961\u0145\u0003\u0002\u0002", - "\u0002\u0962\u0963\u0007\u00d9\u0002\u0002\u0963\u0969\u0007\u015a\u0002", - "\u0002\u0964\u0965\u0007\u00db\u0002\u0002\u0965\u0969\u0007\u015a\u0002", - "\u0002\u0966\u0967\u0007\u00dc\u0002\u0002\u0967\u0969\u0007\u015a\u0002", - "\u0002\u0968\u0962\u0003\u0002\u0002\u0002\u0968\u0964\u0003\u0002\u0002", - "\u0002\u0968\u0966\u0003\u0002\u0002\u0002\u0969\u0147\u0003\u0002\u0002", - "\u0002\u096a\u096d\u0005\u00fe\u0080\u0002\u096b\u096d\u0005\u014a\u00a6", - "\u0002\u096c\u096a\u0003\u0002\u0002\u0002\u096c\u096b\u0003\u0002\u0002", - "\u0002\u096d\u0149\u0003\u0002\u0002\u0002\u096e\u096f\u0007\u001d\u0002", - "\u0002\u096f\u0970\u0007.\u0002\u0002\u0970\u0971\u0007\u001a\u0002", - "\u0002\u0971\u0972\u0007.\u0002\u0002\u0972\u0973\u0007\u001e\u0002", - "\u0002\u0973\u014b\u0003\u0002\u0002\u0002\u0974\u0977\u0005\u0124\u0093", - "\u0002\u0975\u0977\u0005\u013a\u009e\u0002\u0976\u0974\u0003\u0002\u0002", - "\u0002\u0976\u0975\u0003\u0002\u0002\u0002\u0977\u014d\u0003\u0002\u0002", - "\u0002\u0978\u0979\u0007\u001d\u0002\u0002\u0979\u097a\u0007\u001e\u0002", - "\u0002\u097a\u014f\u0003\u0002\u0002\u0002\u097b\u097c\t4\u0002\u0002", - "\u097c\u0151\u0003\u0002\u0002\u0002\u097d\u097e\u0007\u014d\u0002\u0002", - "\u097e\u0984\u0007\u0019\u0002\u0002\u097f\u0980\u0007\u014e\u0002\u0002", - "\u0980\u0984\u0007\u0019\u0002\u0002\u0981\u0982\u0007\u014f\u0002\u0002", - "\u0982\u0984\u0007\u0019\u0002\u0002\u0983\u097d\u0003\u0002\u0002\u0002", - "\u0983\u097f\u0003\u0002\u0002\u0002\u0983\u0981\u0003\u0002\u0002\u0002", - "\u0984\u0153\u0003\u0002\u0002\u0002\u0985\u0986\t5\u0002\u0002\u0986", - "\u0155\u0003\u0002\u0002\u0002\u0137\u0157\u015c\u015f\u0163\u0168\u016c", - "\u0171\u0175\u017e\u0183\u0186\u018a\u018d\u0191\u0194\u0196\u0199\u019f", - "\u01a3\u01a5\u01a9\u01ad\u01b1\u01b8\u01ba\u01c1\u01c7\u01cc\u01cf\u01d2", - "\u01d5\u01d8\u01db\u01df\u01e9\u01ed\u01f3\u01f6\u01f9\u01ff\u0204\u0208", - "\u020b\u0213\u0215\u0222\u022e\u0233\u0236\u0239\u023e\u0244\u0254\u0268", - "\u0271\u0275\u027c\u0281\u028a\u0290\u029b\u02a2\u02ab\u02b4\u02be\u02c3", - "\u02c9\u02cc\u02d2\u02d9\u02dd\u02e3\u02e8\u02ec\u02ee\u02f1\u02f5\u02fe", - "\u0303\u0308\u030f\u0318\u0320\u0325\u0329\u032f\u0332\u0335\u0339\u033d", - "\u0346\u034a\u034d\u0350\u0355\u035b\u035e\u0363\u0366\u0368\u036d\u0379", - "\u0382\u038e\u0391\u0396\u039d\u03a1\u03a5\u03a7\u03b5\u03ba\u03c3\u03c9", - "\u03d2\u03d6\u03da\u03e6\u03ed\u03f2\u03f8\u03fb\u03ff\u040a\u040c\u0415", - "\u0421\u0423\u042a\u042f\u0435\u043d\u0448\u044c\u0469\u046b\u0473\u0477", - "\u0486\u048d\u049b\u04a7\u04ad\u04b4\u04b7\u04d9\u04e4\u04e6\u04ec\u04f1", - "\u04f6\u04fd\u0503\u0508\u050d\u0513\u0517\u051c\u0521\u0526\u052b\u0532", - "\u0539\u0540\u0547\u054c\u0551\u0556\u055a\u055e\u0562\u0564\u0577\u057b", - "\u0582\u058e\u0591\u0595\u059a\u059f\u05a3\u05ad\u05b6\u05b8\u05bb\u05c4", - "\u05cb\u05d8\u05dd\u05e4\u05ea\u0604\u0623\u0637\u063d\u0641\u065c\u0668", - "\u0675\u0679\u067d\u0699\u06cf\u06d9\u06dc\u06e8\u06ed\u06f9\u070d\u0711", - "\u0721\u0724\u0729\u072c\u0735\u0739\u073f\u0745\u0749\u0754\u075a\u075c", - "\u0763\u076a\u076e\u0775\u077a\u077e\u0783\u0787\u078b\u079b\u07a1\u07a9", - "\u07be\u07c3\u07c9\u07cc\u07d1\u07d3\u07d6\u07d9\u07dd\u07e0\u07e4\u07e9", - "\u07ec\u07f0\u07f8\u07fc\u0808\u080c\u0812\u0815\u081a\u081e\u0826\u082e", - "\u0835\u0839\u083e\u0847\u084a\u084e\u0852\u0855\u0859\u085d\u0862\u0867", - "\u0876\u0879\u0881\u0884\u0888\u088a\u088f\u0894\u089b\u08a3\u08a9\u08ab", - "\u08af\u08b3\u08b7\u08bb\u08c8\u08cd\u08d9\u08df\u08e7\u08ed\u08fc\u0906", - "\u090d\u0914\u0920\u0925\u0938\u093b\u0943\u094d\u0950\u0954\u0959\u0968", - "\u096c\u0976\u0983"].join(""); - - -const atn = new antlr4.atn.ATNDeserializer().deserialize(serializedATN); - -const decisionsToDFA = atn.decisionToState.map( (ds, index) => new antlr4.dfa.DFA(ds, index) ); - -const sharedContextCache = new antlr4.PredictionContextCache(); - -class SQLSelectParser extends antlr4.Parser { - - static grammarFileName = "SQLSelectParser.g4"; - static literalNames = [ null, "'='", "':='", "'<=>'", "'>='", "'>'", - "'<='", "'<'", "'!='", "'+'", "'-'", "'*'", - "'/'", "'%'", "'!'", "'~'", "'<<'", "'>>'", - "'&&'", "'&'", "'^'", "'||'", "'|'", "'.'", - "','", "';'", "':'", "'('", "')'", "'{'", "'}'", - "'_'", "'['", "']'", "'->'", "'->>'", "'@'", - null, "'@@'", "'\\N'", "'?'", "'::'", null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - "'/*!'", "'*/'" ]; - static symbolicNames = [ null, "EQUAL_OPERATOR", "ASSIGN_OPERATOR", - "NULL_SAFE_EQUAL_OPERATOR", "GREATER_OR_EQUAL_OPERATOR", - "GREATER_THAN_OPERATOR", "LESS_OR_EQUAL_OPERATOR", - "LESS_THAN_OPERATOR", "NOT_EQUAL_OPERATOR", - "PLUS_OPERATOR", "MINUS_OPERATOR", "MULT_OPERATOR", - "DIV_OPERATOR", "MOD_OPERATOR", "LOGICAL_NOT_OPERATOR", - "BITWISE_NOT_OPERATOR", "SHIFT_LEFT_OPERATOR", - "SHIFT_RIGHT_OPERATOR", "LOGICAL_AND_OPERATOR", - "BITWISE_AND_OPERATOR", "BITWISE_XOR_OPERATOR", - "LOGICAL_OR_OPERATOR", "BITWISE_OR_OPERATOR", - "DOT_SYMBOL", "COMMA_SYMBOL", "SEMICOLON_SYMBOL", - "COLON_SYMBOL", "OPEN_PAR_SYMBOL", "CLOSE_PAR_SYMBOL", - "OPEN_CURLY_SYMBOL", "CLOSE_CURLY_SYMBOL", - "UNDERLINE_SYMBOL", "OPEN_BRACKET_SYMBOL", - "CLOSE_BRACKET_SYMBOL", "JSON_SEPARATOR_SYMBOL", - "JSON_UNQUOTED_SEPARATOR_SYMBOL", "AT_SIGN_SYMBOL", - "AT_TEXT_SUFFIX", "AT_AT_SIGN_SYMBOL", "NULL2_SYMBOL", - "PARAM_MARKER", "CAST_COLON_SYMBOL", "HEX_NUMBER", - "BIN_NUMBER", "INT_NUMBER", "DECIMAL_NUMBER", - "FLOAT_NUMBER", "TINYINT_SYMBOL", "SMALLINT_SYMBOL", - "MEDIUMINT_SYMBOL", "BYTE_INT_SYMBOL", "INT_SYMBOL", - "BIGINT_SYMBOL", "SECOND_SYMBOL", "MINUTE_SYMBOL", - "HOUR_SYMBOL", "DAY_SYMBOL", "WEEK_SYMBOL", - "MONTH_SYMBOL", "QUARTER_SYMBOL", "YEAR_SYMBOL", - "DEFAULT_SYMBOL", "UNION_SYMBOL", "SELECT_SYMBOL", - "ALL_SYMBOL", "DISTINCT_SYMBOL", "STRAIGHT_JOIN_SYMBOL", - "HIGH_PRIORITY_SYMBOL", "SQL_SMALL_RESULT_SYMBOL", - "SQL_BIG_RESULT_SYMBOL", "SQL_BUFFER_RESULT_SYMBOL", - "SQL_CALC_FOUND_ROWS_SYMBOL", "LIMIT_SYMBOL", - "OFFSET_SYMBOL", "INTO_SYMBOL", "OUTFILE_SYMBOL", - "DUMPFILE_SYMBOL", "PROCEDURE_SYMBOL", "ANALYSE_SYMBOL", - "HAVING_SYMBOL", "WINDOW_SYMBOL", "AS_SYMBOL", - "PARTITION_SYMBOL", "BY_SYMBOL", "ROWS_SYMBOL", - "RANGE_SYMBOL", "GROUPS_SYMBOL", "UNBOUNDED_SYMBOL", - "PRECEDING_SYMBOL", "INTERVAL_SYMBOL", "CURRENT_SYMBOL", - "ROW_SYMBOL", "BETWEEN_SYMBOL", "AND_SYMBOL", - "FOLLOWING_SYMBOL", "EXCLUDE_SYMBOL", "GROUP_SYMBOL", - "TIES_SYMBOL", "NO_SYMBOL", "OTHERS_SYMBOL", - "WITH_SYMBOL", "WITHOUT_SYMBOL", "RECURSIVE_SYMBOL", - "ROLLUP_SYMBOL", "CUBE_SYMBOL", "ORDER_SYMBOL", - "ASC_SYMBOL", "DESC_SYMBOL", "FROM_SYMBOL", - "DUAL_SYMBOL", "VALUES_SYMBOL", "TABLE_SYMBOL", - "SQL_NO_CACHE_SYMBOL", "SQL_CACHE_SYMBOL", - "MAX_STATEMENT_TIME_SYMBOL", "FOR_SYMBOL", - "OF_SYMBOL", "LOCK_SYMBOL", "IN_SYMBOL", "SHARE_SYMBOL", - "MODE_SYMBOL", "UPDATE_SYMBOL", "SKIP_SYMBOL", - "LOCKED_SYMBOL", "NOWAIT_SYMBOL", "WHERE_SYMBOL", - "OJ_SYMBOL", "ON_SYMBOL", "USING_SYMBOL", "NATURAL_SYMBOL", - "INNER_SYMBOL", "JOIN_SYMBOL", "LEFT_SYMBOL", - "RIGHT_SYMBOL", "OUTER_SYMBOL", "CROSS_SYMBOL", - "LATERAL_SYMBOL", "JSON_TABLE_SYMBOL", "COLUMNS_SYMBOL", - "ORDINALITY_SYMBOL", "EXISTS_SYMBOL", "PATH_SYMBOL", - "NESTED_SYMBOL", "EMPTY_SYMBOL", "ERROR_SYMBOL", - "NULL_SYMBOL", "USE_SYMBOL", "FORCE_SYMBOL", - "IGNORE_SYMBOL", "KEY_SYMBOL", "INDEX_SYMBOL", - "PRIMARY_SYMBOL", "IS_SYMBOL", "TRUE_SYMBOL", - "FALSE_SYMBOL", "UNKNOWN_SYMBOL", "NOT_SYMBOL", - "XOR_SYMBOL", "OR_SYMBOL", "ANY_SYMBOL", "MEMBER_SYMBOL", - "SOUNDS_SYMBOL", "LIKE_SYMBOL", "ESCAPE_SYMBOL", - "REGEXP_SYMBOL", "DIV_SYMBOL", "MOD_SYMBOL", - "MATCH_SYMBOL", "AGAINST_SYMBOL", "BINARY_SYMBOL", - "CAST_SYMBOL", "ARRAY_SYMBOL", "CASE_SYMBOL", - "END_SYMBOL", "CONVERT_SYMBOL", "COLLATE_SYMBOL", - "AVG_SYMBOL", "BIT_AND_SYMBOL", "BIT_OR_SYMBOL", - "BIT_XOR_SYMBOL", "COUNT_SYMBOL", "MIN_SYMBOL", - "MAX_SYMBOL", "STD_SYMBOL", "VARIANCE_SYMBOL", - "STDDEV_SAMP_SYMBOL", "VAR_SAMP_SYMBOL", "SUM_SYMBOL", - "GROUP_CONCAT_SYMBOL", "SEPARATOR_SYMBOL", - "GROUPING_SYMBOL", "ROW_NUMBER_SYMBOL", "RANK_SYMBOL", - "DENSE_RANK_SYMBOL", "CUME_DIST_SYMBOL", "PERCENT_RANK_SYMBOL", - "NTILE_SYMBOL", "LEAD_SYMBOL", "LAG_SYMBOL", - "FIRST_VALUE_SYMBOL", "LAST_VALUE_SYMBOL", - "NTH_VALUE_SYMBOL", "FIRST_SYMBOL", "LAST_SYMBOL", - "OVER_SYMBOL", "RESPECT_SYMBOL", "NULLS_SYMBOL", - "JSON_ARRAYAGG_SYMBOL", "JSON_OBJECTAGG_SYMBOL", - "BOOLEAN_SYMBOL", "LANGUAGE_SYMBOL", "QUERY_SYMBOL", - "EXPANSION_SYMBOL", "CHAR_SYMBOL", "CURRENT_USER_SYMBOL", - "DATE_SYMBOL", "INSERT_SYMBOL", "TIME_SYMBOL", - "TIMESTAMP_SYMBOL", "TIMESTAMP_LTZ_SYMBOL", - "TIMESTAMP_NTZ_SYMBOL", "ZONE_SYMBOL", "USER_SYMBOL", - "ADDDATE_SYMBOL", "SUBDATE_SYMBOL", "CURDATE_SYMBOL", - "CURTIME_SYMBOL", "DATE_ADD_SYMBOL", "DATE_SUB_SYMBOL", - "EXTRACT_SYMBOL", "GET_FORMAT_SYMBOL", "NOW_SYMBOL", - "POSITION_SYMBOL", "SYSDATE_SYMBOL", "TIMESTAMP_ADD_SYMBOL", - "TIMESTAMP_DIFF_SYMBOL", "UTC_DATE_SYMBOL", - "UTC_TIME_SYMBOL", "UTC_TIMESTAMP_SYMBOL", - "ASCII_SYMBOL", "CHARSET_SYMBOL", "COALESCE_SYMBOL", - "COLLATION_SYMBOL", "DATABASE_SYMBOL", "IF_SYMBOL", - "FORMAT_SYMBOL", "MICROSECOND_SYMBOL", "OLD_PASSWORD_SYMBOL", - "PASSWORD_SYMBOL", "REPEAT_SYMBOL", "REPLACE_SYMBOL", - "REVERSE_SYMBOL", "ROW_COUNT_SYMBOL", "TRUNCATE_SYMBOL", - "WEIGHT_STRING_SYMBOL", "CONTAINS_SYMBOL", - "GEOMETRYCOLLECTION_SYMBOL", "LINESTRING_SYMBOL", - "MULTILINESTRING_SYMBOL", "MULTIPOINT_SYMBOL", - "MULTIPOLYGON_SYMBOL", "POINT_SYMBOL", "POLYGON_SYMBOL", - "LEVEL_SYMBOL", "DATETIME_SYMBOL", "TRIM_SYMBOL", - "LEADING_SYMBOL", "TRAILING_SYMBOL", "BOTH_SYMBOL", - "STRING_SYMBOL", "SUBSTRING_SYMBOL", "WHEN_SYMBOL", - "THEN_SYMBOL", "ELSE_SYMBOL", "SIGNED_SYMBOL", - "UNSIGNED_SYMBOL", "DECIMAL_SYMBOL", "JSON_SYMBOL", - "FLOAT_SYMBOL", "FLOAT_SYMBOL_4", "FLOAT_SYMBOL_8", - "SET_SYMBOL", "SECOND_MICROSECOND_SYMBOL", - "MINUTE_MICROSECOND_SYMBOL", "MINUTE_SECOND_SYMBOL", - "HOUR_MICROSECOND_SYMBOL", "HOUR_SECOND_SYMBOL", - "HOUR_MINUTE_SYMBOL", "DAY_MICROSECOND_SYMBOL", - "DAY_SECOND_SYMBOL", "DAY_MINUTE_SYMBOL", "DAY_HOUR_SYMBOL", - "YEAR_MONTH_SYMBOL", "BTREE_SYMBOL", "RTREE_SYMBOL", - "HASH_SYMBOL", "REAL_SYMBOL", "DOUBLE_SYMBOL", - "PRECISION_SYMBOL", "NUMERIC_SYMBOL", "NUMBER_SYMBOL", - "FIXED_SYMBOL", "BIT_SYMBOL", "BOOL_SYMBOL", - "VARYING_SYMBOL", "VARCHAR_SYMBOL", "NATIONAL_SYMBOL", - "NVARCHAR_SYMBOL", "NCHAR_SYMBOL", "VARBINARY_SYMBOL", - "TINYBLOB_SYMBOL", "BLOB_SYMBOL", "MEDIUMBLOB_SYMBOL", - "LONGBLOB_SYMBOL", "LONG_SYMBOL", "TINYTEXT_SYMBOL", - "TEXT_SYMBOL", "MEDIUMTEXT_SYMBOL", "LONGTEXT_SYMBOL", - "ENUM_SYMBOL", "SERIAL_SYMBOL", "GEOMETRY_SYMBOL", - "ZEROFILL_SYMBOL", "BYTE_SYMBOL", "UNICODE_SYMBOL", - "TERMINATED_SYMBOL", "OPTIONALLY_SYMBOL", "ENCLOSED_SYMBOL", - "ESCAPED_SYMBOL", "LINES_SYMBOL", "STARTING_SYMBOL", - "GLOBAL_SYMBOL", "LOCAL_SYMBOL", "SESSION_SYMBOL", - "VARIANT_SYMBOL", "OBJECT_SYMBOL", "GEOGRAPHY_SYMBOL", - "WHITESPACE", "INVALID_INPUT", "UNDERSCORE_CHARSET", - "IDENTIFIER", "NCHAR_TEXT", "BACK_TICK_QUOTED_ID", - "DOUBLE_QUOTED_TEXT", "SINGLE_QUOTED_TEXT", - "BRACKET_QUOTED_TEXT", "VERSION_COMMENT_START", - "MYSQL_COMMENT_START", "VERSION_COMMENT_END", - "BLOCK_COMMENT", "POUND_COMMENT", "DASHDASH_COMMENT" ]; - static ruleNames = [ "query", "values", "selectStatement", "selectStatementWithInto", - "queryExpression", "queryExpressionBody", "queryExpressionParens", - "queryPrimary", "querySpecification", "subquery", - "querySpecOption", "limitClause", "limitOptions", - "limitOption", "intoClause", "procedureAnalyseClause", - "havingClause", "windowClause", "windowDefinition", - "windowSpec", "windowSpecDetails", "windowFrameClause", - "windowFrameUnits", "windowFrameExtent", "windowFrameStart", - "windowFrameBetween", "windowFrameBound", "windowFrameExclusion", - "withClause", "commonTableExpression", "groupByClause", - "olapOption", "orderClause", "direction", "fromClause", - "tableReferenceList", "tableValueConstructor", - "explicitTable", "rowValueExplicit", "selectOption", - "lockingClauseList", "lockingClause", "lockStrengh", - "lockedRowAction", "selectItemList", "selectItem", - "selectAlias", "whereClause", "tableReference", - "escapedTableReference", "joinedTable", "naturalJoinType", - "innerJoinType", "outerJoinType", "tableFactor", - "singleTable", "singleTableParens", "derivedTable", - "tableReferenceListParens", "tableFunction", "columnsClause", - "jtColumn", "onEmptyOrError", "onEmpty", "onError", - "jtOnResponse", "unionOption", "tableAlias", "indexHintList", - "indexHint", "indexHintType", "keyOrIndex", "indexHintClause", - "indexList", "indexListElement", "expr", "boolPri", - "compOp", "predicate", "predicateOperations", "bitExpr", - "simpleExpr", "jsonOperator", "sumExpr", "groupingOperation", - "windowFunctionCall", "windowingClause", "leadLagInfo", - "nullTreatment", "jsonFunction", "inSumExpr", "identListArg", - "identList", "fulltextOptions", "runtimeFunctionCall", - "geometryFunction", "timeFunctionParameters", "fractionalPrecision", - "weightStringLevels", "weightStringLevelListItem", - "dateTimeTtype", "trimFunction", "substringFunction", - "functionCall", "udfExprList", "udfExpr", "variable", - "userVariable", "systemVariable", "whenExpression", - "thenExpression", "elseExpression", "exprList", - "charset", "notRule", "not2Rule", "interval", "intervalTimeStamp", - "exprListWithParentheses", "exprWithParentheses", - "simpleExprWithParentheses", "orderList", "orderExpression", - "indexType", "dataType", "nchar", "fieldLength", - "fieldOptions", "charsetWithOptBinary", "ascii", - "unicode", "wsNumCodepoints", "typeDatetimePrecision", - "charsetName", "collationName", "collate", "charsetClause", - "fieldsClause", "fieldTerm", "linesClause", "lineTerm", - "usePartition", "columnInternalRefList", "tableAliasRefList", - "pureIdentifier", "identifier", "identifierList", - "identifierListWithParentheses", "qualifiedIdentifier", - "dotIdentifier", "ulong_number", "real_ulong_number", - "ulonglong_number", "real_ulonglong_number", "literal", - "stringList", "textStringLiteral", "textString", - "textLiteral", "numLiteral", "boolLiteral", "nullLiteral", - "temporalLiteral", "floatOptions", "precision", - "textOrIdentifier", "parentheses", "equal", "varIdentType", - "identifierKeyword" ]; - - constructor(input) { - super(input); - this._interp = new antlr4.atn.ParserATNSimulator(this, atn, decisionsToDFA, sharedContextCache); - this.ruleNames = SQLSelectParser.ruleNames; - this.literalNames = SQLSelectParser.literalNames; - this.symbolicNames = SQLSelectParser.symbolicNames; - } - - get atn() { - return atn; - } - - sempred(localctx, ruleIndex, predIndex) { - switch(ruleIndex) { - case 75: - return this.expr_sempred(localctx, predIndex); - case 76: - return this.boolPri_sempred(localctx, predIndex); - case 80: - return this.bitExpr_sempred(localctx, predIndex); - case 81: - return this.simpleExpr_sempred(localctx, predIndex); - default: - throw "No predicate with index:" + ruleIndex; - } - } - - expr_sempred(localctx, predIndex) { - switch(predIndex) { - case 0: - return this.precpred(this._ctx, 3); - case 1: - return this.precpred(this._ctx, 2); - case 2: - return this.precpred(this._ctx, 1); - default: - throw "No predicate with index:" + predIndex; - } - }; - - boolPri_sempred(localctx, predIndex) { - switch(predIndex) { - case 3: - return this.precpred(this._ctx, 3); - case 4: - return this.precpred(this._ctx, 2); - case 5: - return this.precpred(this._ctx, 1); - default: - throw "No predicate with index:" + predIndex; - } - }; - - bitExpr_sempred(localctx, predIndex) { - switch(predIndex) { - case 6: - return this.precpred(this._ctx, 7); - case 7: - return this.precpred(this._ctx, 6); - case 8: - return this.precpred(this._ctx, 5); - case 9: - return this.precpred(this._ctx, 3); - case 10: - return this.precpred(this._ctx, 2); - case 11: - return this.precpred(this._ctx, 1); - case 12: - return this.precpred(this._ctx, 4); - default: - throw "No predicate with index:" + predIndex; - } - }; - - simpleExpr_sempred(localctx, predIndex) { - switch(predIndex) { - case 13: - return this.precpred(this._ctx, 16); - case 14: - return this.precpred(this._ctx, 22); - case 15: - return this.precpred(this._ctx, 7); - default: - throw "No predicate with index:" + predIndex; - } - }; - - - - - query() { - let localctx = new QueryContext(this, this._ctx, this.state); - this.enterRule(localctx, 0, SQLSelectParser.RULE_query); - try { - this.enterOuterAlt(localctx, 1); - this.state = 341; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,0,this._ctx); - if(la_===1) { - this.state = 340; - this.withClause(); - - } - this.state = 343; - this.selectStatement(); - this.state = 349; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.SEMICOLON_SYMBOL: - this.state = 344; - this.match(SQLSelectParser.SEMICOLON_SYMBOL); - this.state = 346; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,1,this._ctx); - if(la_===1) { - this.state = 345; - this.match(SQLSelectParser.EOF); - - } - break; - case SQLSelectParser.EOF: - this.state = 348; - this.match(SQLSelectParser.EOF); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - values() { - let localctx = new ValuesContext(this, this._ctx, this.state); - this.enterRule(localctx, 2, SQLSelectParser.RULE_values); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 353; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,3,this._ctx); - switch(la_) { - case 1: - this.state = 351; - this.expr(0); - break; - - case 2: - this.state = 352; - this.match(SQLSelectParser.DEFAULT_SYMBOL); - break; - - } - this.state = 362; - this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===SQLSelectParser.COMMA_SYMBOL) { - this.state = 355; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 358; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,4,this._ctx); - switch(la_) { - case 1: - this.state = 356; - this.expr(0); - break; - - case 2: - this.state = 357; - this.match(SQLSelectParser.DEFAULT_SYMBOL); - break; - - } - this.state = 364; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - selectStatement() { - let localctx = new SelectStatementContext(this, this._ctx, this.state); - this.enterRule(localctx, 4, SQLSelectParser.RULE_selectStatement); - var _la = 0; // Token type - try { - this.state = 371; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,7,this._ctx); - switch(la_) { - case 1: - this.enterOuterAlt(localctx, 1); - this.state = 365; - this.queryExpression(); - this.state = 367; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.FOR_SYMBOL || _la===SQLSelectParser.LOCK_SYMBOL) { - this.state = 366; - this.lockingClauseList(); - } - - break; - - case 2: - this.enterOuterAlt(localctx, 2); - this.state = 369; - this.queryExpressionParens(); - break; - - case 3: - this.enterOuterAlt(localctx, 3); - this.state = 370; - this.selectStatementWithInto(); - break; - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - selectStatementWithInto() { - let localctx = new SelectStatementWithIntoContext(this, this._ctx, this.state); - this.enterRule(localctx, 6, SQLSelectParser.RULE_selectStatementWithInto); - var _la = 0; // Token type - try { - this.state = 385; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,9,this._ctx); - switch(la_) { - case 1: - this.enterOuterAlt(localctx, 1); - this.state = 373; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 374; - this.selectStatementWithInto(); - this.state = 375; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - - case 2: - this.enterOuterAlt(localctx, 2); - this.state = 377; - this.queryExpression(); - this.state = 378; - this.intoClause(); - this.state = 380; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.FOR_SYMBOL || _la===SQLSelectParser.LOCK_SYMBOL) { - this.state = 379; - this.lockingClauseList(); - } - - break; - - case 3: - this.enterOuterAlt(localctx, 3); - this.state = 382; - this.lockingClauseList(); - this.state = 383; - this.intoClause(); - break; - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - queryExpression() { - let localctx = new QueryExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 8, SQLSelectParser.RULE_queryExpression); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 388; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.WITH_SYMBOL) { - this.state = 387; - this.withClause(); - } - - this.state = 404; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,15,this._ctx); - switch(la_) { - case 1: - this.state = 390; - this.queryExpressionBody(); - this.state = 392; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.ORDER_SYMBOL) { - this.state = 391; - this.orderClause(); - } - - this.state = 395; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.LIMIT_SYMBOL) { - this.state = 394; - this.limitClause(); - } - - break; - - case 2: - this.state = 397; - this.queryExpressionParens(); - this.state = 399; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.ORDER_SYMBOL) { - this.state = 398; - this.orderClause(); - } - - this.state = 402; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.LIMIT_SYMBOL) { - this.state = 401; - this.limitClause(); - } - - break; - - } - this.state = 407; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.PROCEDURE_SYMBOL) { - this.state = 406; - this.procedureAnalyseClause(); - } - - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - queryExpressionBody() { - let localctx = new QueryExpressionBodyContext(this, this._ctx, this.state); - this.enterRule(localctx, 10, SQLSelectParser.RULE_queryExpressionBody); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 419; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.SELECT_SYMBOL: - case SQLSelectParser.VALUES_SYMBOL: - case SQLSelectParser.TABLE_SYMBOL: - this.state = 409; - this.queryPrimary(); - break; - case SQLSelectParser.OPEN_PAR_SYMBOL: - this.state = 410; - this.queryExpressionParens(); - this.state = 411; - this.match(SQLSelectParser.UNION_SYMBOL); - this.state = 413; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.ALL_SYMBOL || _la===SQLSelectParser.DISTINCT_SYMBOL) { - this.state = 412; - this.unionOption(); - } - - this.state = 417; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.SELECT_SYMBOL: - case SQLSelectParser.VALUES_SYMBOL: - case SQLSelectParser.TABLE_SYMBOL: - this.state = 415; - this.queryPrimary(); - break; - case SQLSelectParser.OPEN_PAR_SYMBOL: - this.state = 416; - this.queryExpressionParens(); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - this.state = 431; - this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===SQLSelectParser.UNION_SYMBOL) { - this.state = 421; - this.match(SQLSelectParser.UNION_SYMBOL); - this.state = 423; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.ALL_SYMBOL || _la===SQLSelectParser.DISTINCT_SYMBOL) { - this.state = 422; - this.unionOption(); - } - - this.state = 427; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.SELECT_SYMBOL: - case SQLSelectParser.VALUES_SYMBOL: - case SQLSelectParser.TABLE_SYMBOL: - this.state = 425; - this.queryPrimary(); - break; - case SQLSelectParser.OPEN_PAR_SYMBOL: - this.state = 426; - this.queryExpressionParens(); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - this.state = 433; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - queryExpressionParens() { - let localctx = new QueryExpressionParensContext(this, this._ctx, this.state); - this.enterRule(localctx, 12, SQLSelectParser.RULE_queryExpressionParens); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 434; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 440; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,24,this._ctx); - switch(la_) { - case 1: - this.state = 435; - this.queryExpressionParens(); - break; - - case 2: - this.state = 436; - this.queryExpression(); - this.state = 438; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.FOR_SYMBOL || _la===SQLSelectParser.LOCK_SYMBOL) { - this.state = 437; - this.lockingClauseList(); - } - - break; - - } - this.state = 442; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - queryPrimary() { - let localctx = new QueryPrimaryContext(this, this._ctx, this.state); - this.enterRule(localctx, 14, SQLSelectParser.RULE_queryPrimary); - try { - this.state = 447; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.SELECT_SYMBOL: - this.enterOuterAlt(localctx, 1); - this.state = 444; - this.querySpecification(); - break; - case SQLSelectParser.VALUES_SYMBOL: - this.enterOuterAlt(localctx, 2); - this.state = 445; - this.tableValueConstructor(); - break; - case SQLSelectParser.TABLE_SYMBOL: - this.enterOuterAlt(localctx, 3); - this.state = 446; - this.explicitTable(); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - querySpecification() { - let localctx = new QuerySpecificationContext(this, this._ctx, this.state); - this.enterRule(localctx, 16, SQLSelectParser.RULE_querySpecification); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 449; - this.match(SQLSelectParser.SELECT_SYMBOL); - this.state = 453; - this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,26,this._ctx) - while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { - if(_alt===1) { - this.state = 450; - this.selectOption(); - } - this.state = 455; - this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,26,this._ctx); - } - - this.state = 456; - this.selectItemList(); - this.state = 458; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,27,this._ctx); - if(la_===1) { - this.state = 457; - this.intoClause(); - - } - this.state = 461; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.FROM_SYMBOL) { - this.state = 460; - this.fromClause(); - } - - this.state = 464; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.WHERE_SYMBOL) { - this.state = 463; - this.whereClause(); - } - - this.state = 467; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.GROUP_SYMBOL) { - this.state = 466; - this.groupByClause(); - } - - this.state = 470; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.HAVING_SYMBOL) { - this.state = 469; - this.havingClause(); - } - - this.state = 473; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.WINDOW_SYMBOL) { - this.state = 472; - this.windowClause(); - } - - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - subquery() { - let localctx = new SubqueryContext(this, this._ctx, this.state); - this.enterRule(localctx, 18, SQLSelectParser.RULE_subquery); - try { - this.state = 477; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,33,this._ctx); - switch(la_) { - case 1: - this.enterOuterAlt(localctx, 1); - this.state = 475; - this.query(); - break; - - case 2: - this.enterOuterAlt(localctx, 2); - this.state = 476; - this.queryExpressionParens(); - break; - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - querySpecOption() { - let localctx = new QuerySpecOptionContext(this, this._ctx, this.state); - this.enterRule(localctx, 20, SQLSelectParser.RULE_querySpecOption); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 479; - _la = this._input.LA(1); - if(!(((((_la - 64)) & ~0x1f) == 0 && ((1 << (_la - 64)) & ((1 << (SQLSelectParser.ALL_SYMBOL - 64)) | (1 << (SQLSelectParser.DISTINCT_SYMBOL - 64)) | (1 << (SQLSelectParser.STRAIGHT_JOIN_SYMBOL - 64)) | (1 << (SQLSelectParser.HIGH_PRIORITY_SYMBOL - 64)) | (1 << (SQLSelectParser.SQL_SMALL_RESULT_SYMBOL - 64)) | (1 << (SQLSelectParser.SQL_BIG_RESULT_SYMBOL - 64)) | (1 << (SQLSelectParser.SQL_BUFFER_RESULT_SYMBOL - 64)) | (1 << (SQLSelectParser.SQL_CALC_FOUND_ROWS_SYMBOL - 64)))) !== 0))) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - limitClause() { - let localctx = new LimitClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 22, SQLSelectParser.RULE_limitClause); - try { - this.enterOuterAlt(localctx, 1); - this.state = 481; - this.match(SQLSelectParser.LIMIT_SYMBOL); - this.state = 482; - this.limitOptions(); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - limitOptions() { - let localctx = new LimitOptionsContext(this, this._ctx, this.state); - this.enterRule(localctx, 24, SQLSelectParser.RULE_limitOptions); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 484; - this.limitOption(); - this.state = 487; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.COMMA_SYMBOL || _la===SQLSelectParser.OFFSET_SYMBOL) { - this.state = 485; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.COMMA_SYMBOL || _la===SQLSelectParser.OFFSET_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 486; - this.limitOption(); - } - - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - limitOption() { - let localctx = new LimitOptionContext(this, this._ctx, this.state); - this.enterRule(localctx, 26, SQLSelectParser.RULE_limitOption); - var _la = 0; // Token type - try { - this.state = 491; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.TINYINT_SYMBOL: - case SQLSelectParser.SMALLINT_SYMBOL: - case SQLSelectParser.MEDIUMINT_SYMBOL: - case SQLSelectParser.BYTE_INT_SYMBOL: - case SQLSelectParser.INT_SYMBOL: - case SQLSelectParser.BIGINT_SYMBOL: - case SQLSelectParser.SECOND_SYMBOL: - case SQLSelectParser.MINUTE_SYMBOL: - case SQLSelectParser.HOUR_SYMBOL: - case SQLSelectParser.DAY_SYMBOL: - case SQLSelectParser.WEEK_SYMBOL: - case SQLSelectParser.MONTH_SYMBOL: - case SQLSelectParser.QUARTER_SYMBOL: - case SQLSelectParser.YEAR_SYMBOL: - case SQLSelectParser.DEFAULT_SYMBOL: - case SQLSelectParser.UNION_SYMBOL: - case SQLSelectParser.SELECT_SYMBOL: - case SQLSelectParser.ALL_SYMBOL: - case SQLSelectParser.DISTINCT_SYMBOL: - case SQLSelectParser.STRAIGHT_JOIN_SYMBOL: - case SQLSelectParser.HIGH_PRIORITY_SYMBOL: - case SQLSelectParser.SQL_SMALL_RESULT_SYMBOL: - case SQLSelectParser.SQL_BIG_RESULT_SYMBOL: - case SQLSelectParser.SQL_BUFFER_RESULT_SYMBOL: - case SQLSelectParser.SQL_CALC_FOUND_ROWS_SYMBOL: - case SQLSelectParser.LIMIT_SYMBOL: - case SQLSelectParser.OFFSET_SYMBOL: - case SQLSelectParser.INTO_SYMBOL: - case SQLSelectParser.OUTFILE_SYMBOL: - case SQLSelectParser.DUMPFILE_SYMBOL: - case SQLSelectParser.PROCEDURE_SYMBOL: - case SQLSelectParser.ANALYSE_SYMBOL: - case SQLSelectParser.HAVING_SYMBOL: - case SQLSelectParser.WINDOW_SYMBOL: - case SQLSelectParser.AS_SYMBOL: - case SQLSelectParser.PARTITION_SYMBOL: - case SQLSelectParser.BY_SYMBOL: - case SQLSelectParser.ROWS_SYMBOL: - case SQLSelectParser.RANGE_SYMBOL: - case SQLSelectParser.GROUPS_SYMBOL: - case SQLSelectParser.UNBOUNDED_SYMBOL: - case SQLSelectParser.PRECEDING_SYMBOL: - case SQLSelectParser.INTERVAL_SYMBOL: - case SQLSelectParser.CURRENT_SYMBOL: - case SQLSelectParser.ROW_SYMBOL: - case SQLSelectParser.BETWEEN_SYMBOL: - case SQLSelectParser.AND_SYMBOL: - case SQLSelectParser.FOLLOWING_SYMBOL: - case SQLSelectParser.EXCLUDE_SYMBOL: - case SQLSelectParser.GROUP_SYMBOL: - case SQLSelectParser.TIES_SYMBOL: - case SQLSelectParser.NO_SYMBOL: - case SQLSelectParser.OTHERS_SYMBOL: - case SQLSelectParser.WITH_SYMBOL: - case SQLSelectParser.WITHOUT_SYMBOL: - case SQLSelectParser.RECURSIVE_SYMBOL: - case SQLSelectParser.ROLLUP_SYMBOL: - case SQLSelectParser.CUBE_SYMBOL: - case SQLSelectParser.ORDER_SYMBOL: - case SQLSelectParser.ASC_SYMBOL: - case SQLSelectParser.DESC_SYMBOL: - case SQLSelectParser.FROM_SYMBOL: - case SQLSelectParser.DUAL_SYMBOL: - case SQLSelectParser.VALUES_SYMBOL: - case SQLSelectParser.TABLE_SYMBOL: - case SQLSelectParser.SQL_NO_CACHE_SYMBOL: - case SQLSelectParser.SQL_CACHE_SYMBOL: - case SQLSelectParser.MAX_STATEMENT_TIME_SYMBOL: - case SQLSelectParser.FOR_SYMBOL: - case SQLSelectParser.OF_SYMBOL: - case SQLSelectParser.LOCK_SYMBOL: - case SQLSelectParser.IN_SYMBOL: - case SQLSelectParser.SHARE_SYMBOL: - case SQLSelectParser.MODE_SYMBOL: - case SQLSelectParser.UPDATE_SYMBOL: - case SQLSelectParser.SKIP_SYMBOL: - case SQLSelectParser.LOCKED_SYMBOL: - case SQLSelectParser.NOWAIT_SYMBOL: - case SQLSelectParser.WHERE_SYMBOL: - case SQLSelectParser.OJ_SYMBOL: - case SQLSelectParser.ON_SYMBOL: - case SQLSelectParser.USING_SYMBOL: - case SQLSelectParser.NATURAL_SYMBOL: - case SQLSelectParser.INNER_SYMBOL: - case SQLSelectParser.JOIN_SYMBOL: - case SQLSelectParser.LEFT_SYMBOL: - case SQLSelectParser.RIGHT_SYMBOL: - case SQLSelectParser.OUTER_SYMBOL: - case SQLSelectParser.CROSS_SYMBOL: - case SQLSelectParser.LATERAL_SYMBOL: - case SQLSelectParser.JSON_TABLE_SYMBOL: - case SQLSelectParser.COLUMNS_SYMBOL: - case SQLSelectParser.ORDINALITY_SYMBOL: - case SQLSelectParser.EXISTS_SYMBOL: - case SQLSelectParser.PATH_SYMBOL: - case SQLSelectParser.NESTED_SYMBOL: - case SQLSelectParser.EMPTY_SYMBOL: - case SQLSelectParser.ERROR_SYMBOL: - case SQLSelectParser.NULL_SYMBOL: - case SQLSelectParser.USE_SYMBOL: - case SQLSelectParser.FORCE_SYMBOL: - case SQLSelectParser.IGNORE_SYMBOL: - case SQLSelectParser.KEY_SYMBOL: - case SQLSelectParser.INDEX_SYMBOL: - case SQLSelectParser.PRIMARY_SYMBOL: - case SQLSelectParser.IS_SYMBOL: - case SQLSelectParser.TRUE_SYMBOL: - case SQLSelectParser.FALSE_SYMBOL: - case SQLSelectParser.UNKNOWN_SYMBOL: - case SQLSelectParser.NOT_SYMBOL: - case SQLSelectParser.XOR_SYMBOL: - case SQLSelectParser.OR_SYMBOL: - case SQLSelectParser.ANY_SYMBOL: - case SQLSelectParser.MEMBER_SYMBOL: - case SQLSelectParser.SOUNDS_SYMBOL: - case SQLSelectParser.LIKE_SYMBOL: - case SQLSelectParser.ESCAPE_SYMBOL: - case SQLSelectParser.REGEXP_SYMBOL: - case SQLSelectParser.DIV_SYMBOL: - case SQLSelectParser.MOD_SYMBOL: - case SQLSelectParser.MATCH_SYMBOL: - case SQLSelectParser.AGAINST_SYMBOL: - case SQLSelectParser.BINARY_SYMBOL: - case SQLSelectParser.CAST_SYMBOL: - case SQLSelectParser.ARRAY_SYMBOL: - case SQLSelectParser.CASE_SYMBOL: - case SQLSelectParser.END_SYMBOL: - case SQLSelectParser.CONVERT_SYMBOL: - case SQLSelectParser.COLLATE_SYMBOL: - case SQLSelectParser.AVG_SYMBOL: - case SQLSelectParser.BIT_AND_SYMBOL: - case SQLSelectParser.BIT_OR_SYMBOL: - case SQLSelectParser.BIT_XOR_SYMBOL: - case SQLSelectParser.COUNT_SYMBOL: - case SQLSelectParser.MIN_SYMBOL: - case SQLSelectParser.MAX_SYMBOL: - case SQLSelectParser.STD_SYMBOL: - case SQLSelectParser.VARIANCE_SYMBOL: - case SQLSelectParser.STDDEV_SAMP_SYMBOL: - case SQLSelectParser.VAR_SAMP_SYMBOL: - case SQLSelectParser.SUM_SYMBOL: - case SQLSelectParser.GROUP_CONCAT_SYMBOL: - case SQLSelectParser.SEPARATOR_SYMBOL: - case SQLSelectParser.GROUPING_SYMBOL: - case SQLSelectParser.ROW_NUMBER_SYMBOL: - case SQLSelectParser.RANK_SYMBOL: - case SQLSelectParser.DENSE_RANK_SYMBOL: - case SQLSelectParser.CUME_DIST_SYMBOL: - case SQLSelectParser.PERCENT_RANK_SYMBOL: - case SQLSelectParser.NTILE_SYMBOL: - case SQLSelectParser.LEAD_SYMBOL: - case SQLSelectParser.LAG_SYMBOL: - case SQLSelectParser.FIRST_VALUE_SYMBOL: - case SQLSelectParser.LAST_VALUE_SYMBOL: - case SQLSelectParser.NTH_VALUE_SYMBOL: - case SQLSelectParser.FIRST_SYMBOL: - case SQLSelectParser.LAST_SYMBOL: - case SQLSelectParser.OVER_SYMBOL: - case SQLSelectParser.RESPECT_SYMBOL: - case SQLSelectParser.NULLS_SYMBOL: - case SQLSelectParser.JSON_ARRAYAGG_SYMBOL: - case SQLSelectParser.JSON_OBJECTAGG_SYMBOL: - case SQLSelectParser.BOOLEAN_SYMBOL: - case SQLSelectParser.LANGUAGE_SYMBOL: - case SQLSelectParser.QUERY_SYMBOL: - case SQLSelectParser.EXPANSION_SYMBOL: - case SQLSelectParser.CHAR_SYMBOL: - case SQLSelectParser.CURRENT_USER_SYMBOL: - case SQLSelectParser.DATE_SYMBOL: - case SQLSelectParser.INSERT_SYMBOL: - case SQLSelectParser.TIME_SYMBOL: - case SQLSelectParser.TIMESTAMP_SYMBOL: - case SQLSelectParser.TIMESTAMP_LTZ_SYMBOL: - case SQLSelectParser.TIMESTAMP_NTZ_SYMBOL: - case SQLSelectParser.ZONE_SYMBOL: - case SQLSelectParser.USER_SYMBOL: - case SQLSelectParser.ADDDATE_SYMBOL: - case SQLSelectParser.SUBDATE_SYMBOL: - case SQLSelectParser.CURDATE_SYMBOL: - case SQLSelectParser.CURTIME_SYMBOL: - case SQLSelectParser.DATE_ADD_SYMBOL: - case SQLSelectParser.DATE_SUB_SYMBOL: - case SQLSelectParser.EXTRACT_SYMBOL: - case SQLSelectParser.GET_FORMAT_SYMBOL: - case SQLSelectParser.NOW_SYMBOL: - case SQLSelectParser.POSITION_SYMBOL: - case SQLSelectParser.SYSDATE_SYMBOL: - case SQLSelectParser.TIMESTAMP_ADD_SYMBOL: - case SQLSelectParser.TIMESTAMP_DIFF_SYMBOL: - case SQLSelectParser.UTC_DATE_SYMBOL: - case SQLSelectParser.UTC_TIME_SYMBOL: - case SQLSelectParser.UTC_TIMESTAMP_SYMBOL: - case SQLSelectParser.ASCII_SYMBOL: - case SQLSelectParser.CHARSET_SYMBOL: - case SQLSelectParser.COALESCE_SYMBOL: - case SQLSelectParser.COLLATION_SYMBOL: - case SQLSelectParser.DATABASE_SYMBOL: - case SQLSelectParser.IF_SYMBOL: - case SQLSelectParser.FORMAT_SYMBOL: - case SQLSelectParser.MICROSECOND_SYMBOL: - case SQLSelectParser.OLD_PASSWORD_SYMBOL: - case SQLSelectParser.PASSWORD_SYMBOL: - case SQLSelectParser.REPEAT_SYMBOL: - case SQLSelectParser.REPLACE_SYMBOL: - case SQLSelectParser.REVERSE_SYMBOL: - case SQLSelectParser.ROW_COUNT_SYMBOL: - case SQLSelectParser.TRUNCATE_SYMBOL: - case SQLSelectParser.WEIGHT_STRING_SYMBOL: - case SQLSelectParser.CONTAINS_SYMBOL: - case SQLSelectParser.GEOMETRYCOLLECTION_SYMBOL: - case SQLSelectParser.LINESTRING_SYMBOL: - case SQLSelectParser.MULTILINESTRING_SYMBOL: - case SQLSelectParser.MULTIPOINT_SYMBOL: - case SQLSelectParser.MULTIPOLYGON_SYMBOL: - case SQLSelectParser.POINT_SYMBOL: - case SQLSelectParser.POLYGON_SYMBOL: - case SQLSelectParser.LEVEL_SYMBOL: - case SQLSelectParser.DATETIME_SYMBOL: - case SQLSelectParser.TRIM_SYMBOL: - case SQLSelectParser.LEADING_SYMBOL: - case SQLSelectParser.TRAILING_SYMBOL: - case SQLSelectParser.BOTH_SYMBOL: - case SQLSelectParser.STRING_SYMBOL: - case SQLSelectParser.SUBSTRING_SYMBOL: - case SQLSelectParser.WHEN_SYMBOL: - case SQLSelectParser.THEN_SYMBOL: - case SQLSelectParser.ELSE_SYMBOL: - case SQLSelectParser.SIGNED_SYMBOL: - case SQLSelectParser.UNSIGNED_SYMBOL: - case SQLSelectParser.DECIMAL_SYMBOL: - case SQLSelectParser.JSON_SYMBOL: - case SQLSelectParser.FLOAT_SYMBOL: - case SQLSelectParser.FLOAT_SYMBOL_4: - case SQLSelectParser.FLOAT_SYMBOL_8: - case SQLSelectParser.SET_SYMBOL: - case SQLSelectParser.SECOND_MICROSECOND_SYMBOL: - case SQLSelectParser.MINUTE_MICROSECOND_SYMBOL: - case SQLSelectParser.MINUTE_SECOND_SYMBOL: - case SQLSelectParser.HOUR_MICROSECOND_SYMBOL: - case SQLSelectParser.HOUR_SECOND_SYMBOL: - case SQLSelectParser.HOUR_MINUTE_SYMBOL: - case SQLSelectParser.DAY_MICROSECOND_SYMBOL: - case SQLSelectParser.DAY_SECOND_SYMBOL: - case SQLSelectParser.DAY_MINUTE_SYMBOL: - case SQLSelectParser.DAY_HOUR_SYMBOL: - case SQLSelectParser.YEAR_MONTH_SYMBOL: - case SQLSelectParser.BTREE_SYMBOL: - case SQLSelectParser.RTREE_SYMBOL: - case SQLSelectParser.HASH_SYMBOL: - case SQLSelectParser.REAL_SYMBOL: - case SQLSelectParser.DOUBLE_SYMBOL: - case SQLSelectParser.PRECISION_SYMBOL: - case SQLSelectParser.NUMERIC_SYMBOL: - case SQLSelectParser.NUMBER_SYMBOL: - case SQLSelectParser.FIXED_SYMBOL: - case SQLSelectParser.BIT_SYMBOL: - case SQLSelectParser.BOOL_SYMBOL: - case SQLSelectParser.VARYING_SYMBOL: - case SQLSelectParser.VARCHAR_SYMBOL: - case SQLSelectParser.NATIONAL_SYMBOL: - case SQLSelectParser.NVARCHAR_SYMBOL: - case SQLSelectParser.NCHAR_SYMBOL: - case SQLSelectParser.VARBINARY_SYMBOL: - case SQLSelectParser.TINYBLOB_SYMBOL: - case SQLSelectParser.BLOB_SYMBOL: - case SQLSelectParser.MEDIUMBLOB_SYMBOL: - case SQLSelectParser.LONGBLOB_SYMBOL: - case SQLSelectParser.LONG_SYMBOL: - case SQLSelectParser.TINYTEXT_SYMBOL: - case SQLSelectParser.TEXT_SYMBOL: - case SQLSelectParser.MEDIUMTEXT_SYMBOL: - case SQLSelectParser.LONGTEXT_SYMBOL: - case SQLSelectParser.ENUM_SYMBOL: - case SQLSelectParser.SERIAL_SYMBOL: - case SQLSelectParser.GEOMETRY_SYMBOL: - case SQLSelectParser.ZEROFILL_SYMBOL: - case SQLSelectParser.BYTE_SYMBOL: - case SQLSelectParser.UNICODE_SYMBOL: - case SQLSelectParser.TERMINATED_SYMBOL: - case SQLSelectParser.OPTIONALLY_SYMBOL: - case SQLSelectParser.ENCLOSED_SYMBOL: - case SQLSelectParser.ESCAPED_SYMBOL: - case SQLSelectParser.LINES_SYMBOL: - case SQLSelectParser.STARTING_SYMBOL: - case SQLSelectParser.GLOBAL_SYMBOL: - case SQLSelectParser.LOCAL_SYMBOL: - case SQLSelectParser.SESSION_SYMBOL: - case SQLSelectParser.VARIANT_SYMBOL: - case SQLSelectParser.OBJECT_SYMBOL: - case SQLSelectParser.GEOGRAPHY_SYMBOL: - case SQLSelectParser.IDENTIFIER: - case SQLSelectParser.BACK_TICK_QUOTED_ID: - case SQLSelectParser.DOUBLE_QUOTED_TEXT: - case SQLSelectParser.SINGLE_QUOTED_TEXT: - case SQLSelectParser.BRACKET_QUOTED_TEXT: - this.enterOuterAlt(localctx, 1); - this.state = 489; - this.identifier(); - break; - case SQLSelectParser.PARAM_MARKER: - case SQLSelectParser.INT_NUMBER: - this.enterOuterAlt(localctx, 2); - this.state = 490; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.PARAM_MARKER || _la===SQLSelectParser.INT_NUMBER)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - intoClause() { - let localctx = new IntoClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 28, SQLSelectParser.RULE_intoClause); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 493; - this.match(SQLSelectParser.INTO_SYMBOL); - this.state = 521; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,42,this._ctx); - switch(la_) { - case 1: - this.state = 494; - this.match(SQLSelectParser.OUTFILE_SYMBOL); - this.state = 495; - this.textStringLiteral(); - this.state = 497; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.CHAR_SYMBOL || _la===SQLSelectParser.CHARSET_SYMBOL) { - this.state = 496; - this.charsetClause(); - } - - this.state = 500; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.COLUMNS_SYMBOL) { - this.state = 499; - this.fieldsClause(); - } - - this.state = 503; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.LINES_SYMBOL) { - this.state = 502; - this.linesClause(); - } - - break; - - case 2: - this.state = 505; - this.match(SQLSelectParser.DUMPFILE_SYMBOL); - this.state = 506; - this.textStringLiteral(); - break; - - case 3: - this.state = 509; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.TINYINT_SYMBOL: - case SQLSelectParser.SMALLINT_SYMBOL: - case SQLSelectParser.MEDIUMINT_SYMBOL: - case SQLSelectParser.BYTE_INT_SYMBOL: - case SQLSelectParser.INT_SYMBOL: - case SQLSelectParser.BIGINT_SYMBOL: - case SQLSelectParser.SECOND_SYMBOL: - case SQLSelectParser.MINUTE_SYMBOL: - case SQLSelectParser.HOUR_SYMBOL: - case SQLSelectParser.DAY_SYMBOL: - case SQLSelectParser.WEEK_SYMBOL: - case SQLSelectParser.MONTH_SYMBOL: - case SQLSelectParser.QUARTER_SYMBOL: - case SQLSelectParser.YEAR_SYMBOL: - case SQLSelectParser.DEFAULT_SYMBOL: - case SQLSelectParser.UNION_SYMBOL: - case SQLSelectParser.SELECT_SYMBOL: - case SQLSelectParser.ALL_SYMBOL: - case SQLSelectParser.DISTINCT_SYMBOL: - case SQLSelectParser.STRAIGHT_JOIN_SYMBOL: - case SQLSelectParser.HIGH_PRIORITY_SYMBOL: - case SQLSelectParser.SQL_SMALL_RESULT_SYMBOL: - case SQLSelectParser.SQL_BIG_RESULT_SYMBOL: - case SQLSelectParser.SQL_BUFFER_RESULT_SYMBOL: - case SQLSelectParser.SQL_CALC_FOUND_ROWS_SYMBOL: - case SQLSelectParser.LIMIT_SYMBOL: - case SQLSelectParser.OFFSET_SYMBOL: - case SQLSelectParser.INTO_SYMBOL: - case SQLSelectParser.OUTFILE_SYMBOL: - case SQLSelectParser.DUMPFILE_SYMBOL: - case SQLSelectParser.PROCEDURE_SYMBOL: - case SQLSelectParser.ANALYSE_SYMBOL: - case SQLSelectParser.HAVING_SYMBOL: - case SQLSelectParser.WINDOW_SYMBOL: - case SQLSelectParser.AS_SYMBOL: - case SQLSelectParser.PARTITION_SYMBOL: - case SQLSelectParser.BY_SYMBOL: - case SQLSelectParser.ROWS_SYMBOL: - case SQLSelectParser.RANGE_SYMBOL: - case SQLSelectParser.GROUPS_SYMBOL: - case SQLSelectParser.UNBOUNDED_SYMBOL: - case SQLSelectParser.PRECEDING_SYMBOL: - case SQLSelectParser.INTERVAL_SYMBOL: - case SQLSelectParser.CURRENT_SYMBOL: - case SQLSelectParser.ROW_SYMBOL: - case SQLSelectParser.BETWEEN_SYMBOL: - case SQLSelectParser.AND_SYMBOL: - case SQLSelectParser.FOLLOWING_SYMBOL: - case SQLSelectParser.EXCLUDE_SYMBOL: - case SQLSelectParser.GROUP_SYMBOL: - case SQLSelectParser.TIES_SYMBOL: - case SQLSelectParser.NO_SYMBOL: - case SQLSelectParser.OTHERS_SYMBOL: - case SQLSelectParser.WITH_SYMBOL: - case SQLSelectParser.WITHOUT_SYMBOL: - case SQLSelectParser.RECURSIVE_SYMBOL: - case SQLSelectParser.ROLLUP_SYMBOL: - case SQLSelectParser.CUBE_SYMBOL: - case SQLSelectParser.ORDER_SYMBOL: - case SQLSelectParser.ASC_SYMBOL: - case SQLSelectParser.DESC_SYMBOL: - case SQLSelectParser.FROM_SYMBOL: - case SQLSelectParser.DUAL_SYMBOL: - case SQLSelectParser.VALUES_SYMBOL: - case SQLSelectParser.TABLE_SYMBOL: - case SQLSelectParser.SQL_NO_CACHE_SYMBOL: - case SQLSelectParser.SQL_CACHE_SYMBOL: - case SQLSelectParser.MAX_STATEMENT_TIME_SYMBOL: - case SQLSelectParser.FOR_SYMBOL: - case SQLSelectParser.OF_SYMBOL: - case SQLSelectParser.LOCK_SYMBOL: - case SQLSelectParser.IN_SYMBOL: - case SQLSelectParser.SHARE_SYMBOL: - case SQLSelectParser.MODE_SYMBOL: - case SQLSelectParser.UPDATE_SYMBOL: - case SQLSelectParser.SKIP_SYMBOL: - case SQLSelectParser.LOCKED_SYMBOL: - case SQLSelectParser.NOWAIT_SYMBOL: - case SQLSelectParser.WHERE_SYMBOL: - case SQLSelectParser.OJ_SYMBOL: - case SQLSelectParser.ON_SYMBOL: - case SQLSelectParser.USING_SYMBOL: - case SQLSelectParser.NATURAL_SYMBOL: - case SQLSelectParser.INNER_SYMBOL: - case SQLSelectParser.JOIN_SYMBOL: - case SQLSelectParser.LEFT_SYMBOL: - case SQLSelectParser.RIGHT_SYMBOL: - case SQLSelectParser.OUTER_SYMBOL: - case SQLSelectParser.CROSS_SYMBOL: - case SQLSelectParser.LATERAL_SYMBOL: - case SQLSelectParser.JSON_TABLE_SYMBOL: - case SQLSelectParser.COLUMNS_SYMBOL: - case SQLSelectParser.ORDINALITY_SYMBOL: - case SQLSelectParser.EXISTS_SYMBOL: - case SQLSelectParser.PATH_SYMBOL: - case SQLSelectParser.NESTED_SYMBOL: - case SQLSelectParser.EMPTY_SYMBOL: - case SQLSelectParser.ERROR_SYMBOL: - case SQLSelectParser.NULL_SYMBOL: - case SQLSelectParser.USE_SYMBOL: - case SQLSelectParser.FORCE_SYMBOL: - case SQLSelectParser.IGNORE_SYMBOL: - case SQLSelectParser.KEY_SYMBOL: - case SQLSelectParser.INDEX_SYMBOL: - case SQLSelectParser.PRIMARY_SYMBOL: - case SQLSelectParser.IS_SYMBOL: - case SQLSelectParser.TRUE_SYMBOL: - case SQLSelectParser.FALSE_SYMBOL: - case SQLSelectParser.UNKNOWN_SYMBOL: - case SQLSelectParser.NOT_SYMBOL: - case SQLSelectParser.XOR_SYMBOL: - case SQLSelectParser.OR_SYMBOL: - case SQLSelectParser.ANY_SYMBOL: - case SQLSelectParser.MEMBER_SYMBOL: - case SQLSelectParser.SOUNDS_SYMBOL: - case SQLSelectParser.LIKE_SYMBOL: - case SQLSelectParser.ESCAPE_SYMBOL: - case SQLSelectParser.REGEXP_SYMBOL: - case SQLSelectParser.DIV_SYMBOL: - case SQLSelectParser.MOD_SYMBOL: - case SQLSelectParser.MATCH_SYMBOL: - case SQLSelectParser.AGAINST_SYMBOL: - case SQLSelectParser.BINARY_SYMBOL: - case SQLSelectParser.CAST_SYMBOL: - case SQLSelectParser.ARRAY_SYMBOL: - case SQLSelectParser.CASE_SYMBOL: - case SQLSelectParser.END_SYMBOL: - case SQLSelectParser.CONVERT_SYMBOL: - case SQLSelectParser.COLLATE_SYMBOL: - case SQLSelectParser.AVG_SYMBOL: - case SQLSelectParser.BIT_AND_SYMBOL: - case SQLSelectParser.BIT_OR_SYMBOL: - case SQLSelectParser.BIT_XOR_SYMBOL: - case SQLSelectParser.COUNT_SYMBOL: - case SQLSelectParser.MIN_SYMBOL: - case SQLSelectParser.MAX_SYMBOL: - case SQLSelectParser.STD_SYMBOL: - case SQLSelectParser.VARIANCE_SYMBOL: - case SQLSelectParser.STDDEV_SAMP_SYMBOL: - case SQLSelectParser.VAR_SAMP_SYMBOL: - case SQLSelectParser.SUM_SYMBOL: - case SQLSelectParser.GROUP_CONCAT_SYMBOL: - case SQLSelectParser.SEPARATOR_SYMBOL: - case SQLSelectParser.GROUPING_SYMBOL: - case SQLSelectParser.ROW_NUMBER_SYMBOL: - case SQLSelectParser.RANK_SYMBOL: - case SQLSelectParser.DENSE_RANK_SYMBOL: - case SQLSelectParser.CUME_DIST_SYMBOL: - case SQLSelectParser.PERCENT_RANK_SYMBOL: - case SQLSelectParser.NTILE_SYMBOL: - case SQLSelectParser.LEAD_SYMBOL: - case SQLSelectParser.LAG_SYMBOL: - case SQLSelectParser.FIRST_VALUE_SYMBOL: - case SQLSelectParser.LAST_VALUE_SYMBOL: - case SQLSelectParser.NTH_VALUE_SYMBOL: - case SQLSelectParser.FIRST_SYMBOL: - case SQLSelectParser.LAST_SYMBOL: - case SQLSelectParser.OVER_SYMBOL: - case SQLSelectParser.RESPECT_SYMBOL: - case SQLSelectParser.NULLS_SYMBOL: - case SQLSelectParser.JSON_ARRAYAGG_SYMBOL: - case SQLSelectParser.JSON_OBJECTAGG_SYMBOL: - case SQLSelectParser.BOOLEAN_SYMBOL: - case SQLSelectParser.LANGUAGE_SYMBOL: - case SQLSelectParser.QUERY_SYMBOL: - case SQLSelectParser.EXPANSION_SYMBOL: - case SQLSelectParser.CHAR_SYMBOL: - case SQLSelectParser.CURRENT_USER_SYMBOL: - case SQLSelectParser.DATE_SYMBOL: - case SQLSelectParser.INSERT_SYMBOL: - case SQLSelectParser.TIME_SYMBOL: - case SQLSelectParser.TIMESTAMP_SYMBOL: - case SQLSelectParser.TIMESTAMP_LTZ_SYMBOL: - case SQLSelectParser.TIMESTAMP_NTZ_SYMBOL: - case SQLSelectParser.ZONE_SYMBOL: - case SQLSelectParser.USER_SYMBOL: - case SQLSelectParser.ADDDATE_SYMBOL: - case SQLSelectParser.SUBDATE_SYMBOL: - case SQLSelectParser.CURDATE_SYMBOL: - case SQLSelectParser.CURTIME_SYMBOL: - case SQLSelectParser.DATE_ADD_SYMBOL: - case SQLSelectParser.DATE_SUB_SYMBOL: - case SQLSelectParser.EXTRACT_SYMBOL: - case SQLSelectParser.GET_FORMAT_SYMBOL: - case SQLSelectParser.NOW_SYMBOL: - case SQLSelectParser.POSITION_SYMBOL: - case SQLSelectParser.SYSDATE_SYMBOL: - case SQLSelectParser.TIMESTAMP_ADD_SYMBOL: - case SQLSelectParser.TIMESTAMP_DIFF_SYMBOL: - case SQLSelectParser.UTC_DATE_SYMBOL: - case SQLSelectParser.UTC_TIME_SYMBOL: - case SQLSelectParser.UTC_TIMESTAMP_SYMBOL: - case SQLSelectParser.ASCII_SYMBOL: - case SQLSelectParser.CHARSET_SYMBOL: - case SQLSelectParser.COALESCE_SYMBOL: - case SQLSelectParser.COLLATION_SYMBOL: - case SQLSelectParser.DATABASE_SYMBOL: - case SQLSelectParser.IF_SYMBOL: - case SQLSelectParser.FORMAT_SYMBOL: - case SQLSelectParser.MICROSECOND_SYMBOL: - case SQLSelectParser.OLD_PASSWORD_SYMBOL: - case SQLSelectParser.PASSWORD_SYMBOL: - case SQLSelectParser.REPEAT_SYMBOL: - case SQLSelectParser.REPLACE_SYMBOL: - case SQLSelectParser.REVERSE_SYMBOL: - case SQLSelectParser.ROW_COUNT_SYMBOL: - case SQLSelectParser.TRUNCATE_SYMBOL: - case SQLSelectParser.WEIGHT_STRING_SYMBOL: - case SQLSelectParser.CONTAINS_SYMBOL: - case SQLSelectParser.GEOMETRYCOLLECTION_SYMBOL: - case SQLSelectParser.LINESTRING_SYMBOL: - case SQLSelectParser.MULTILINESTRING_SYMBOL: - case SQLSelectParser.MULTIPOINT_SYMBOL: - case SQLSelectParser.MULTIPOLYGON_SYMBOL: - case SQLSelectParser.POINT_SYMBOL: - case SQLSelectParser.POLYGON_SYMBOL: - case SQLSelectParser.LEVEL_SYMBOL: - case SQLSelectParser.DATETIME_SYMBOL: - case SQLSelectParser.TRIM_SYMBOL: - case SQLSelectParser.LEADING_SYMBOL: - case SQLSelectParser.TRAILING_SYMBOL: - case SQLSelectParser.BOTH_SYMBOL: - case SQLSelectParser.STRING_SYMBOL: - case SQLSelectParser.SUBSTRING_SYMBOL: - case SQLSelectParser.WHEN_SYMBOL: - case SQLSelectParser.THEN_SYMBOL: - case SQLSelectParser.ELSE_SYMBOL: - case SQLSelectParser.SIGNED_SYMBOL: - case SQLSelectParser.UNSIGNED_SYMBOL: - case SQLSelectParser.DECIMAL_SYMBOL: - case SQLSelectParser.JSON_SYMBOL: - case SQLSelectParser.FLOAT_SYMBOL: - case SQLSelectParser.FLOAT_SYMBOL_4: - case SQLSelectParser.FLOAT_SYMBOL_8: - case SQLSelectParser.SET_SYMBOL: - case SQLSelectParser.SECOND_MICROSECOND_SYMBOL: - case SQLSelectParser.MINUTE_MICROSECOND_SYMBOL: - case SQLSelectParser.MINUTE_SECOND_SYMBOL: - case SQLSelectParser.HOUR_MICROSECOND_SYMBOL: - case SQLSelectParser.HOUR_SECOND_SYMBOL: - case SQLSelectParser.HOUR_MINUTE_SYMBOL: - case SQLSelectParser.DAY_MICROSECOND_SYMBOL: - case SQLSelectParser.DAY_SECOND_SYMBOL: - case SQLSelectParser.DAY_MINUTE_SYMBOL: - case SQLSelectParser.DAY_HOUR_SYMBOL: - case SQLSelectParser.YEAR_MONTH_SYMBOL: - case SQLSelectParser.BTREE_SYMBOL: - case SQLSelectParser.RTREE_SYMBOL: - case SQLSelectParser.HASH_SYMBOL: - case SQLSelectParser.REAL_SYMBOL: - case SQLSelectParser.DOUBLE_SYMBOL: - case SQLSelectParser.PRECISION_SYMBOL: - case SQLSelectParser.NUMERIC_SYMBOL: - case SQLSelectParser.NUMBER_SYMBOL: - case SQLSelectParser.FIXED_SYMBOL: - case SQLSelectParser.BIT_SYMBOL: - case SQLSelectParser.BOOL_SYMBOL: - case SQLSelectParser.VARYING_SYMBOL: - case SQLSelectParser.VARCHAR_SYMBOL: - case SQLSelectParser.NATIONAL_SYMBOL: - case SQLSelectParser.NVARCHAR_SYMBOL: - case SQLSelectParser.NCHAR_SYMBOL: - case SQLSelectParser.VARBINARY_SYMBOL: - case SQLSelectParser.TINYBLOB_SYMBOL: - case SQLSelectParser.BLOB_SYMBOL: - case SQLSelectParser.MEDIUMBLOB_SYMBOL: - case SQLSelectParser.LONGBLOB_SYMBOL: - case SQLSelectParser.LONG_SYMBOL: - case SQLSelectParser.TINYTEXT_SYMBOL: - case SQLSelectParser.TEXT_SYMBOL: - case SQLSelectParser.MEDIUMTEXT_SYMBOL: - case SQLSelectParser.LONGTEXT_SYMBOL: - case SQLSelectParser.ENUM_SYMBOL: - case SQLSelectParser.SERIAL_SYMBOL: - case SQLSelectParser.GEOMETRY_SYMBOL: - case SQLSelectParser.ZEROFILL_SYMBOL: - case SQLSelectParser.BYTE_SYMBOL: - case SQLSelectParser.UNICODE_SYMBOL: - case SQLSelectParser.TERMINATED_SYMBOL: - case SQLSelectParser.OPTIONALLY_SYMBOL: - case SQLSelectParser.ENCLOSED_SYMBOL: - case SQLSelectParser.ESCAPED_SYMBOL: - case SQLSelectParser.LINES_SYMBOL: - case SQLSelectParser.STARTING_SYMBOL: - case SQLSelectParser.GLOBAL_SYMBOL: - case SQLSelectParser.LOCAL_SYMBOL: - case SQLSelectParser.SESSION_SYMBOL: - case SQLSelectParser.VARIANT_SYMBOL: - case SQLSelectParser.OBJECT_SYMBOL: - case SQLSelectParser.GEOGRAPHY_SYMBOL: - case SQLSelectParser.IDENTIFIER: - case SQLSelectParser.BACK_TICK_QUOTED_ID: - case SQLSelectParser.DOUBLE_QUOTED_TEXT: - case SQLSelectParser.SINGLE_QUOTED_TEXT: - case SQLSelectParser.BRACKET_QUOTED_TEXT: - this.state = 507; - this.textOrIdentifier(); - break; - case SQLSelectParser.AT_SIGN_SYMBOL: - case SQLSelectParser.AT_TEXT_SUFFIX: - this.state = 508; - this.userVariable(); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - this.state = 518; - this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===SQLSelectParser.COMMA_SYMBOL) { - this.state = 511; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 514; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.TINYINT_SYMBOL: - case SQLSelectParser.SMALLINT_SYMBOL: - case SQLSelectParser.MEDIUMINT_SYMBOL: - case SQLSelectParser.BYTE_INT_SYMBOL: - case SQLSelectParser.INT_SYMBOL: - case SQLSelectParser.BIGINT_SYMBOL: - case SQLSelectParser.SECOND_SYMBOL: - case SQLSelectParser.MINUTE_SYMBOL: - case SQLSelectParser.HOUR_SYMBOL: - case SQLSelectParser.DAY_SYMBOL: - case SQLSelectParser.WEEK_SYMBOL: - case SQLSelectParser.MONTH_SYMBOL: - case SQLSelectParser.QUARTER_SYMBOL: - case SQLSelectParser.YEAR_SYMBOL: - case SQLSelectParser.DEFAULT_SYMBOL: - case SQLSelectParser.UNION_SYMBOL: - case SQLSelectParser.SELECT_SYMBOL: - case SQLSelectParser.ALL_SYMBOL: - case SQLSelectParser.DISTINCT_SYMBOL: - case SQLSelectParser.STRAIGHT_JOIN_SYMBOL: - case SQLSelectParser.HIGH_PRIORITY_SYMBOL: - case SQLSelectParser.SQL_SMALL_RESULT_SYMBOL: - case SQLSelectParser.SQL_BIG_RESULT_SYMBOL: - case SQLSelectParser.SQL_BUFFER_RESULT_SYMBOL: - case SQLSelectParser.SQL_CALC_FOUND_ROWS_SYMBOL: - case SQLSelectParser.LIMIT_SYMBOL: - case SQLSelectParser.OFFSET_SYMBOL: - case SQLSelectParser.INTO_SYMBOL: - case SQLSelectParser.OUTFILE_SYMBOL: - case SQLSelectParser.DUMPFILE_SYMBOL: - case SQLSelectParser.PROCEDURE_SYMBOL: - case SQLSelectParser.ANALYSE_SYMBOL: - case SQLSelectParser.HAVING_SYMBOL: - case SQLSelectParser.WINDOW_SYMBOL: - case SQLSelectParser.AS_SYMBOL: - case SQLSelectParser.PARTITION_SYMBOL: - case SQLSelectParser.BY_SYMBOL: - case SQLSelectParser.ROWS_SYMBOL: - case SQLSelectParser.RANGE_SYMBOL: - case SQLSelectParser.GROUPS_SYMBOL: - case SQLSelectParser.UNBOUNDED_SYMBOL: - case SQLSelectParser.PRECEDING_SYMBOL: - case SQLSelectParser.INTERVAL_SYMBOL: - case SQLSelectParser.CURRENT_SYMBOL: - case SQLSelectParser.ROW_SYMBOL: - case SQLSelectParser.BETWEEN_SYMBOL: - case SQLSelectParser.AND_SYMBOL: - case SQLSelectParser.FOLLOWING_SYMBOL: - case SQLSelectParser.EXCLUDE_SYMBOL: - case SQLSelectParser.GROUP_SYMBOL: - case SQLSelectParser.TIES_SYMBOL: - case SQLSelectParser.NO_SYMBOL: - case SQLSelectParser.OTHERS_SYMBOL: - case SQLSelectParser.WITH_SYMBOL: - case SQLSelectParser.WITHOUT_SYMBOL: - case SQLSelectParser.RECURSIVE_SYMBOL: - case SQLSelectParser.ROLLUP_SYMBOL: - case SQLSelectParser.CUBE_SYMBOL: - case SQLSelectParser.ORDER_SYMBOL: - case SQLSelectParser.ASC_SYMBOL: - case SQLSelectParser.DESC_SYMBOL: - case SQLSelectParser.FROM_SYMBOL: - case SQLSelectParser.DUAL_SYMBOL: - case SQLSelectParser.VALUES_SYMBOL: - case SQLSelectParser.TABLE_SYMBOL: - case SQLSelectParser.SQL_NO_CACHE_SYMBOL: - case SQLSelectParser.SQL_CACHE_SYMBOL: - case SQLSelectParser.MAX_STATEMENT_TIME_SYMBOL: - case SQLSelectParser.FOR_SYMBOL: - case SQLSelectParser.OF_SYMBOL: - case SQLSelectParser.LOCK_SYMBOL: - case SQLSelectParser.IN_SYMBOL: - case SQLSelectParser.SHARE_SYMBOL: - case SQLSelectParser.MODE_SYMBOL: - case SQLSelectParser.UPDATE_SYMBOL: - case SQLSelectParser.SKIP_SYMBOL: - case SQLSelectParser.LOCKED_SYMBOL: - case SQLSelectParser.NOWAIT_SYMBOL: - case SQLSelectParser.WHERE_SYMBOL: - case SQLSelectParser.OJ_SYMBOL: - case SQLSelectParser.ON_SYMBOL: - case SQLSelectParser.USING_SYMBOL: - case SQLSelectParser.NATURAL_SYMBOL: - case SQLSelectParser.INNER_SYMBOL: - case SQLSelectParser.JOIN_SYMBOL: - case SQLSelectParser.LEFT_SYMBOL: - case SQLSelectParser.RIGHT_SYMBOL: - case SQLSelectParser.OUTER_SYMBOL: - case SQLSelectParser.CROSS_SYMBOL: - case SQLSelectParser.LATERAL_SYMBOL: - case SQLSelectParser.JSON_TABLE_SYMBOL: - case SQLSelectParser.COLUMNS_SYMBOL: - case SQLSelectParser.ORDINALITY_SYMBOL: - case SQLSelectParser.EXISTS_SYMBOL: - case SQLSelectParser.PATH_SYMBOL: - case SQLSelectParser.NESTED_SYMBOL: - case SQLSelectParser.EMPTY_SYMBOL: - case SQLSelectParser.ERROR_SYMBOL: - case SQLSelectParser.NULL_SYMBOL: - case SQLSelectParser.USE_SYMBOL: - case SQLSelectParser.FORCE_SYMBOL: - case SQLSelectParser.IGNORE_SYMBOL: - case SQLSelectParser.KEY_SYMBOL: - case SQLSelectParser.INDEX_SYMBOL: - case SQLSelectParser.PRIMARY_SYMBOL: - case SQLSelectParser.IS_SYMBOL: - case SQLSelectParser.TRUE_SYMBOL: - case SQLSelectParser.FALSE_SYMBOL: - case SQLSelectParser.UNKNOWN_SYMBOL: - case SQLSelectParser.NOT_SYMBOL: - case SQLSelectParser.XOR_SYMBOL: - case SQLSelectParser.OR_SYMBOL: - case SQLSelectParser.ANY_SYMBOL: - case SQLSelectParser.MEMBER_SYMBOL: - case SQLSelectParser.SOUNDS_SYMBOL: - case SQLSelectParser.LIKE_SYMBOL: - case SQLSelectParser.ESCAPE_SYMBOL: - case SQLSelectParser.REGEXP_SYMBOL: - case SQLSelectParser.DIV_SYMBOL: - case SQLSelectParser.MOD_SYMBOL: - case SQLSelectParser.MATCH_SYMBOL: - case SQLSelectParser.AGAINST_SYMBOL: - case SQLSelectParser.BINARY_SYMBOL: - case SQLSelectParser.CAST_SYMBOL: - case SQLSelectParser.ARRAY_SYMBOL: - case SQLSelectParser.CASE_SYMBOL: - case SQLSelectParser.END_SYMBOL: - case SQLSelectParser.CONVERT_SYMBOL: - case SQLSelectParser.COLLATE_SYMBOL: - case SQLSelectParser.AVG_SYMBOL: - case SQLSelectParser.BIT_AND_SYMBOL: - case SQLSelectParser.BIT_OR_SYMBOL: - case SQLSelectParser.BIT_XOR_SYMBOL: - case SQLSelectParser.COUNT_SYMBOL: - case SQLSelectParser.MIN_SYMBOL: - case SQLSelectParser.MAX_SYMBOL: - case SQLSelectParser.STD_SYMBOL: - case SQLSelectParser.VARIANCE_SYMBOL: - case SQLSelectParser.STDDEV_SAMP_SYMBOL: - case SQLSelectParser.VAR_SAMP_SYMBOL: - case SQLSelectParser.SUM_SYMBOL: - case SQLSelectParser.GROUP_CONCAT_SYMBOL: - case SQLSelectParser.SEPARATOR_SYMBOL: - case SQLSelectParser.GROUPING_SYMBOL: - case SQLSelectParser.ROW_NUMBER_SYMBOL: - case SQLSelectParser.RANK_SYMBOL: - case SQLSelectParser.DENSE_RANK_SYMBOL: - case SQLSelectParser.CUME_DIST_SYMBOL: - case SQLSelectParser.PERCENT_RANK_SYMBOL: - case SQLSelectParser.NTILE_SYMBOL: - case SQLSelectParser.LEAD_SYMBOL: - case SQLSelectParser.LAG_SYMBOL: - case SQLSelectParser.FIRST_VALUE_SYMBOL: - case SQLSelectParser.LAST_VALUE_SYMBOL: - case SQLSelectParser.NTH_VALUE_SYMBOL: - case SQLSelectParser.FIRST_SYMBOL: - case SQLSelectParser.LAST_SYMBOL: - case SQLSelectParser.OVER_SYMBOL: - case SQLSelectParser.RESPECT_SYMBOL: - case SQLSelectParser.NULLS_SYMBOL: - case SQLSelectParser.JSON_ARRAYAGG_SYMBOL: - case SQLSelectParser.JSON_OBJECTAGG_SYMBOL: - case SQLSelectParser.BOOLEAN_SYMBOL: - case SQLSelectParser.LANGUAGE_SYMBOL: - case SQLSelectParser.QUERY_SYMBOL: - case SQLSelectParser.EXPANSION_SYMBOL: - case SQLSelectParser.CHAR_SYMBOL: - case SQLSelectParser.CURRENT_USER_SYMBOL: - case SQLSelectParser.DATE_SYMBOL: - case SQLSelectParser.INSERT_SYMBOL: - case SQLSelectParser.TIME_SYMBOL: - case SQLSelectParser.TIMESTAMP_SYMBOL: - case SQLSelectParser.TIMESTAMP_LTZ_SYMBOL: - case SQLSelectParser.TIMESTAMP_NTZ_SYMBOL: - case SQLSelectParser.ZONE_SYMBOL: - case SQLSelectParser.USER_SYMBOL: - case SQLSelectParser.ADDDATE_SYMBOL: - case SQLSelectParser.SUBDATE_SYMBOL: - case SQLSelectParser.CURDATE_SYMBOL: - case SQLSelectParser.CURTIME_SYMBOL: - case SQLSelectParser.DATE_ADD_SYMBOL: - case SQLSelectParser.DATE_SUB_SYMBOL: - case SQLSelectParser.EXTRACT_SYMBOL: - case SQLSelectParser.GET_FORMAT_SYMBOL: - case SQLSelectParser.NOW_SYMBOL: - case SQLSelectParser.POSITION_SYMBOL: - case SQLSelectParser.SYSDATE_SYMBOL: - case SQLSelectParser.TIMESTAMP_ADD_SYMBOL: - case SQLSelectParser.TIMESTAMP_DIFF_SYMBOL: - case SQLSelectParser.UTC_DATE_SYMBOL: - case SQLSelectParser.UTC_TIME_SYMBOL: - case SQLSelectParser.UTC_TIMESTAMP_SYMBOL: - case SQLSelectParser.ASCII_SYMBOL: - case SQLSelectParser.CHARSET_SYMBOL: - case SQLSelectParser.COALESCE_SYMBOL: - case SQLSelectParser.COLLATION_SYMBOL: - case SQLSelectParser.DATABASE_SYMBOL: - case SQLSelectParser.IF_SYMBOL: - case SQLSelectParser.FORMAT_SYMBOL: - case SQLSelectParser.MICROSECOND_SYMBOL: - case SQLSelectParser.OLD_PASSWORD_SYMBOL: - case SQLSelectParser.PASSWORD_SYMBOL: - case SQLSelectParser.REPEAT_SYMBOL: - case SQLSelectParser.REPLACE_SYMBOL: - case SQLSelectParser.REVERSE_SYMBOL: - case SQLSelectParser.ROW_COUNT_SYMBOL: - case SQLSelectParser.TRUNCATE_SYMBOL: - case SQLSelectParser.WEIGHT_STRING_SYMBOL: - case SQLSelectParser.CONTAINS_SYMBOL: - case SQLSelectParser.GEOMETRYCOLLECTION_SYMBOL: - case SQLSelectParser.LINESTRING_SYMBOL: - case SQLSelectParser.MULTILINESTRING_SYMBOL: - case SQLSelectParser.MULTIPOINT_SYMBOL: - case SQLSelectParser.MULTIPOLYGON_SYMBOL: - case SQLSelectParser.POINT_SYMBOL: - case SQLSelectParser.POLYGON_SYMBOL: - case SQLSelectParser.LEVEL_SYMBOL: - case SQLSelectParser.DATETIME_SYMBOL: - case SQLSelectParser.TRIM_SYMBOL: - case SQLSelectParser.LEADING_SYMBOL: - case SQLSelectParser.TRAILING_SYMBOL: - case SQLSelectParser.BOTH_SYMBOL: - case SQLSelectParser.STRING_SYMBOL: - case SQLSelectParser.SUBSTRING_SYMBOL: - case SQLSelectParser.WHEN_SYMBOL: - case SQLSelectParser.THEN_SYMBOL: - case SQLSelectParser.ELSE_SYMBOL: - case SQLSelectParser.SIGNED_SYMBOL: - case SQLSelectParser.UNSIGNED_SYMBOL: - case SQLSelectParser.DECIMAL_SYMBOL: - case SQLSelectParser.JSON_SYMBOL: - case SQLSelectParser.FLOAT_SYMBOL: - case SQLSelectParser.FLOAT_SYMBOL_4: - case SQLSelectParser.FLOAT_SYMBOL_8: - case SQLSelectParser.SET_SYMBOL: - case SQLSelectParser.SECOND_MICROSECOND_SYMBOL: - case SQLSelectParser.MINUTE_MICROSECOND_SYMBOL: - case SQLSelectParser.MINUTE_SECOND_SYMBOL: - case SQLSelectParser.HOUR_MICROSECOND_SYMBOL: - case SQLSelectParser.HOUR_SECOND_SYMBOL: - case SQLSelectParser.HOUR_MINUTE_SYMBOL: - case SQLSelectParser.DAY_MICROSECOND_SYMBOL: - case SQLSelectParser.DAY_SECOND_SYMBOL: - case SQLSelectParser.DAY_MINUTE_SYMBOL: - case SQLSelectParser.DAY_HOUR_SYMBOL: - case SQLSelectParser.YEAR_MONTH_SYMBOL: - case SQLSelectParser.BTREE_SYMBOL: - case SQLSelectParser.RTREE_SYMBOL: - case SQLSelectParser.HASH_SYMBOL: - case SQLSelectParser.REAL_SYMBOL: - case SQLSelectParser.DOUBLE_SYMBOL: - case SQLSelectParser.PRECISION_SYMBOL: - case SQLSelectParser.NUMERIC_SYMBOL: - case SQLSelectParser.NUMBER_SYMBOL: - case SQLSelectParser.FIXED_SYMBOL: - case SQLSelectParser.BIT_SYMBOL: - case SQLSelectParser.BOOL_SYMBOL: - case SQLSelectParser.VARYING_SYMBOL: - case SQLSelectParser.VARCHAR_SYMBOL: - case SQLSelectParser.NATIONAL_SYMBOL: - case SQLSelectParser.NVARCHAR_SYMBOL: - case SQLSelectParser.NCHAR_SYMBOL: - case SQLSelectParser.VARBINARY_SYMBOL: - case SQLSelectParser.TINYBLOB_SYMBOL: - case SQLSelectParser.BLOB_SYMBOL: - case SQLSelectParser.MEDIUMBLOB_SYMBOL: - case SQLSelectParser.LONGBLOB_SYMBOL: - case SQLSelectParser.LONG_SYMBOL: - case SQLSelectParser.TINYTEXT_SYMBOL: - case SQLSelectParser.TEXT_SYMBOL: - case SQLSelectParser.MEDIUMTEXT_SYMBOL: - case SQLSelectParser.LONGTEXT_SYMBOL: - case SQLSelectParser.ENUM_SYMBOL: - case SQLSelectParser.SERIAL_SYMBOL: - case SQLSelectParser.GEOMETRY_SYMBOL: - case SQLSelectParser.ZEROFILL_SYMBOL: - case SQLSelectParser.BYTE_SYMBOL: - case SQLSelectParser.UNICODE_SYMBOL: - case SQLSelectParser.TERMINATED_SYMBOL: - case SQLSelectParser.OPTIONALLY_SYMBOL: - case SQLSelectParser.ENCLOSED_SYMBOL: - case SQLSelectParser.ESCAPED_SYMBOL: - case SQLSelectParser.LINES_SYMBOL: - case SQLSelectParser.STARTING_SYMBOL: - case SQLSelectParser.GLOBAL_SYMBOL: - case SQLSelectParser.LOCAL_SYMBOL: - case SQLSelectParser.SESSION_SYMBOL: - case SQLSelectParser.VARIANT_SYMBOL: - case SQLSelectParser.OBJECT_SYMBOL: - case SQLSelectParser.GEOGRAPHY_SYMBOL: - case SQLSelectParser.IDENTIFIER: - case SQLSelectParser.BACK_TICK_QUOTED_ID: - case SQLSelectParser.DOUBLE_QUOTED_TEXT: - case SQLSelectParser.SINGLE_QUOTED_TEXT: - case SQLSelectParser.BRACKET_QUOTED_TEXT: - this.state = 512; - this.textOrIdentifier(); - break; - case SQLSelectParser.AT_SIGN_SYMBOL: - case SQLSelectParser.AT_TEXT_SUFFIX: - this.state = 513; - this.userVariable(); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - this.state = 520; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - break; - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - procedureAnalyseClause() { - let localctx = new ProcedureAnalyseClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 30, SQLSelectParser.RULE_procedureAnalyseClause); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 523; - this.match(SQLSelectParser.PROCEDURE_SYMBOL); - this.state = 524; - this.match(SQLSelectParser.ANALYSE_SYMBOL); - this.state = 525; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 531; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.INT_NUMBER) { - this.state = 526; - this.match(SQLSelectParser.INT_NUMBER); - this.state = 529; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.COMMA_SYMBOL) { - this.state = 527; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 528; - this.match(SQLSelectParser.INT_NUMBER); - } - - } - - this.state = 533; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - havingClause() { - let localctx = new HavingClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 32, SQLSelectParser.RULE_havingClause); - try { - this.enterOuterAlt(localctx, 1); - this.state = 535; - this.match(SQLSelectParser.HAVING_SYMBOL); - this.state = 536; - this.expr(0); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - windowClause() { - let localctx = new WindowClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 34, SQLSelectParser.RULE_windowClause); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 538; - this.match(SQLSelectParser.WINDOW_SYMBOL); - this.state = 539; - this.windowDefinition(); - this.state = 544; - this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===SQLSelectParser.COMMA_SYMBOL) { - this.state = 540; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 541; - this.windowDefinition(); - this.state = 546; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - windowDefinition() { - let localctx = new WindowDefinitionContext(this, this._ctx, this.state); - this.enterRule(localctx, 36, SQLSelectParser.RULE_windowDefinition); - try { - this.enterOuterAlt(localctx, 1); - this.state = 547; - this.identifier(); - this.state = 548; - this.match(SQLSelectParser.AS_SYMBOL); - this.state = 549; - this.windowSpec(); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - windowSpec() { - let localctx = new WindowSpecContext(this, this._ctx, this.state); - this.enterRule(localctx, 38, SQLSelectParser.RULE_windowSpec); - try { - this.enterOuterAlt(localctx, 1); - this.state = 551; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 552; - this.windowSpecDetails(); - this.state = 553; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - windowSpecDetails() { - let localctx = new WindowSpecDetailsContext(this, this._ctx, this.state); - this.enterRule(localctx, 40, SQLSelectParser.RULE_windowSpecDetails); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 556; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,46,this._ctx); - if(la_===1) { - this.state = 555; - this.identifier(); - - } - this.state = 561; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.PARTITION_SYMBOL) { - this.state = 558; - this.match(SQLSelectParser.PARTITION_SYMBOL); - this.state = 559; - this.match(SQLSelectParser.BY_SYMBOL); - this.state = 560; - this.orderList(); - } - - this.state = 564; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.ORDER_SYMBOL) { - this.state = 563; - this.orderClause(); - } - - this.state = 567; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(((((_la - 84)) & ~0x1f) == 0 && ((1 << (_la - 84)) & ((1 << (SQLSelectParser.ROWS_SYMBOL - 84)) | (1 << (SQLSelectParser.RANGE_SYMBOL - 84)) | (1 << (SQLSelectParser.GROUPS_SYMBOL - 84)))) !== 0)) { - this.state = 566; - this.windowFrameClause(); - } - - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - windowFrameClause() { - let localctx = new WindowFrameClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 42, SQLSelectParser.RULE_windowFrameClause); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 569; - this.windowFrameUnits(); - this.state = 570; - this.windowFrameExtent(); - this.state = 572; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.EXCLUDE_SYMBOL) { - this.state = 571; - this.windowFrameExclusion(); - } - - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - windowFrameUnits() { - let localctx = new WindowFrameUnitsContext(this, this._ctx, this.state); - this.enterRule(localctx, 44, SQLSelectParser.RULE_windowFrameUnits); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 574; - _la = this._input.LA(1); - if(!(((((_la - 84)) & ~0x1f) == 0 && ((1 << (_la - 84)) & ((1 << (SQLSelectParser.ROWS_SYMBOL - 84)) | (1 << (SQLSelectParser.RANGE_SYMBOL - 84)) | (1 << (SQLSelectParser.GROUPS_SYMBOL - 84)))) !== 0))) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - windowFrameExtent() { - let localctx = new WindowFrameExtentContext(this, this._ctx, this.state); - this.enterRule(localctx, 46, SQLSelectParser.RULE_windowFrameExtent); - try { - this.state = 578; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.PARAM_MARKER: - case SQLSelectParser.INT_NUMBER: - case SQLSelectParser.DECIMAL_NUMBER: - case SQLSelectParser.FLOAT_NUMBER: - case SQLSelectParser.UNBOUNDED_SYMBOL: - case SQLSelectParser.INTERVAL_SYMBOL: - case SQLSelectParser.CURRENT_SYMBOL: - this.enterOuterAlt(localctx, 1); - this.state = 576; - this.windowFrameStart(); - break; - case SQLSelectParser.BETWEEN_SYMBOL: - this.enterOuterAlt(localctx, 2); - this.state = 577; - this.windowFrameBetween(); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - windowFrameStart() { - let localctx = new WindowFrameStartContext(this, this._ctx, this.state); - this.enterRule(localctx, 48, SQLSelectParser.RULE_windowFrameStart); - try { - this.state = 594; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.UNBOUNDED_SYMBOL: - this.enterOuterAlt(localctx, 1); - this.state = 580; - this.match(SQLSelectParser.UNBOUNDED_SYMBOL); - this.state = 581; - this.match(SQLSelectParser.PRECEDING_SYMBOL); - break; - case SQLSelectParser.INT_NUMBER: - case SQLSelectParser.DECIMAL_NUMBER: - case SQLSelectParser.FLOAT_NUMBER: - this.enterOuterAlt(localctx, 2); - this.state = 582; - this.ulonglong_number(); - this.state = 583; - this.match(SQLSelectParser.PRECEDING_SYMBOL); - break; - case SQLSelectParser.PARAM_MARKER: - this.enterOuterAlt(localctx, 3); - this.state = 585; - this.match(SQLSelectParser.PARAM_MARKER); - this.state = 586; - this.match(SQLSelectParser.PRECEDING_SYMBOL); - break; - case SQLSelectParser.INTERVAL_SYMBOL: - this.enterOuterAlt(localctx, 4); - this.state = 587; - this.match(SQLSelectParser.INTERVAL_SYMBOL); - this.state = 588; - this.expr(0); - this.state = 589; - this.interval(); - this.state = 590; - this.match(SQLSelectParser.PRECEDING_SYMBOL); - break; - case SQLSelectParser.CURRENT_SYMBOL: - this.enterOuterAlt(localctx, 5); - this.state = 592; - this.match(SQLSelectParser.CURRENT_SYMBOL); - this.state = 593; - this.match(SQLSelectParser.ROW_SYMBOL); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - windowFrameBetween() { - let localctx = new WindowFrameBetweenContext(this, this._ctx, this.state); - this.enterRule(localctx, 50, SQLSelectParser.RULE_windowFrameBetween); - try { - this.enterOuterAlt(localctx, 1); - this.state = 596; - this.match(SQLSelectParser.BETWEEN_SYMBOL); - this.state = 597; - this.windowFrameBound(); - this.state = 598; - this.match(SQLSelectParser.AND_SYMBOL); - this.state = 599; - this.windowFrameBound(); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - windowFrameBound() { - let localctx = new WindowFrameBoundContext(this, this._ctx, this.state); - this.enterRule(localctx, 52, SQLSelectParser.RULE_windowFrameBound); - try { - this.state = 614; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,53,this._ctx); - switch(la_) { - case 1: - this.enterOuterAlt(localctx, 1); - this.state = 601; - this.windowFrameStart(); - break; - - case 2: - this.enterOuterAlt(localctx, 2); - this.state = 602; - this.match(SQLSelectParser.UNBOUNDED_SYMBOL); - this.state = 603; - this.match(SQLSelectParser.FOLLOWING_SYMBOL); - break; - - case 3: - this.enterOuterAlt(localctx, 3); - this.state = 604; - this.ulonglong_number(); - this.state = 605; - this.match(SQLSelectParser.FOLLOWING_SYMBOL); - break; - - case 4: - this.enterOuterAlt(localctx, 4); - this.state = 607; - this.match(SQLSelectParser.PARAM_MARKER); - this.state = 608; - this.match(SQLSelectParser.FOLLOWING_SYMBOL); - break; - - case 5: - this.enterOuterAlt(localctx, 5); - this.state = 609; - this.match(SQLSelectParser.INTERVAL_SYMBOL); - this.state = 610; - this.expr(0); - this.state = 611; - this.interval(); - this.state = 612; - this.match(SQLSelectParser.FOLLOWING_SYMBOL); - break; - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - windowFrameExclusion() { - let localctx = new WindowFrameExclusionContext(this, this._ctx, this.state); - this.enterRule(localctx, 54, SQLSelectParser.RULE_windowFrameExclusion); - try { - this.enterOuterAlt(localctx, 1); - this.state = 616; - this.match(SQLSelectParser.EXCLUDE_SYMBOL); - this.state = 623; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.CURRENT_SYMBOL: - this.state = 617; - this.match(SQLSelectParser.CURRENT_SYMBOL); - this.state = 618; - this.match(SQLSelectParser.ROW_SYMBOL); - break; - case SQLSelectParser.GROUP_SYMBOL: - this.state = 619; - this.match(SQLSelectParser.GROUP_SYMBOL); - break; - case SQLSelectParser.TIES_SYMBOL: - this.state = 620; - this.match(SQLSelectParser.TIES_SYMBOL); - break; - case SQLSelectParser.NO_SYMBOL: - this.state = 621; - this.match(SQLSelectParser.NO_SYMBOL); - this.state = 622; - this.match(SQLSelectParser.OTHERS_SYMBOL); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - withClause() { - let localctx = new WithClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 56, SQLSelectParser.RULE_withClause); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 625; - this.match(SQLSelectParser.WITH_SYMBOL); - this.state = 627; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,55,this._ctx); - if(la_===1) { - this.state = 626; - this.match(SQLSelectParser.RECURSIVE_SYMBOL); - - } - this.state = 629; - this.commonTableExpression(); - this.state = 634; - this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===SQLSelectParser.COMMA_SYMBOL) { - this.state = 630; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 631; - this.commonTableExpression(); - this.state = 636; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - commonTableExpression() { - let localctx = new CommonTableExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 58, SQLSelectParser.RULE_commonTableExpression); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 637; - this.identifier(); - this.state = 639; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.OPEN_PAR_SYMBOL) { - this.state = 638; - this.columnInternalRefList(); - } - - this.state = 641; - this.match(SQLSelectParser.AS_SYMBOL); - this.state = 642; - this.subquery(); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - groupByClause() { - let localctx = new GroupByClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 60, SQLSelectParser.RULE_groupByClause); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 644; - this.match(SQLSelectParser.GROUP_SYMBOL); - this.state = 645; - this.match(SQLSelectParser.BY_SYMBOL); - this.state = 646; - this.orderList(); - this.state = 648; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.WITH_SYMBOL) { - this.state = 647; - this.olapOption(); - } - - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - olapOption() { - let localctx = new OlapOptionContext(this, this._ctx, this.state); - this.enterRule(localctx, 62, SQLSelectParser.RULE_olapOption); - try { - this.state = 654; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,59,this._ctx); - switch(la_) { - case 1: - this.enterOuterAlt(localctx, 1); - this.state = 650; - this.match(SQLSelectParser.WITH_SYMBOL); - this.state = 651; - this.match(SQLSelectParser.ROLLUP_SYMBOL); - break; - - case 2: - this.enterOuterAlt(localctx, 2); - this.state = 652; - this.match(SQLSelectParser.WITH_SYMBOL); - this.state = 653; - this.match(SQLSelectParser.CUBE_SYMBOL); - break; - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - orderClause() { - let localctx = new OrderClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 64, SQLSelectParser.RULE_orderClause); - try { - this.enterOuterAlt(localctx, 1); - this.state = 656; - this.match(SQLSelectParser.ORDER_SYMBOL); - this.state = 657; - this.match(SQLSelectParser.BY_SYMBOL); - this.state = 658; - this.orderList(); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - direction() { - let localctx = new DirectionContext(this, this._ctx, this.state); - this.enterRule(localctx, 66, SQLSelectParser.RULE_direction); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 660; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.ASC_SYMBOL || _la===SQLSelectParser.DESC_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - fromClause() { - let localctx = new FromClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 68, SQLSelectParser.RULE_fromClause); - try { - this.enterOuterAlt(localctx, 1); - this.state = 662; - this.match(SQLSelectParser.FROM_SYMBOL); - this.state = 665; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,60,this._ctx); - switch(la_) { - case 1: - this.state = 663; - this.match(SQLSelectParser.DUAL_SYMBOL); - break; - - case 2: - this.state = 664; - this.tableReferenceList(); - break; - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - tableReferenceList() { - let localctx = new TableReferenceListContext(this, this._ctx, this.state); - this.enterRule(localctx, 70, SQLSelectParser.RULE_tableReferenceList); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 667; - this.tableReference(); - this.state = 672; - this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===SQLSelectParser.COMMA_SYMBOL) { - this.state = 668; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 669; - this.tableReference(); - this.state = 674; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - tableValueConstructor() { - let localctx = new TableValueConstructorContext(this, this._ctx, this.state); - this.enterRule(localctx, 72, SQLSelectParser.RULE_tableValueConstructor); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 675; - this.match(SQLSelectParser.VALUES_SYMBOL); - this.state = 676; - this.rowValueExplicit(); - this.state = 681; - this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===SQLSelectParser.COMMA_SYMBOL) { - this.state = 677; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 678; - this.rowValueExplicit(); - this.state = 683; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - explicitTable() { - let localctx = new ExplicitTableContext(this, this._ctx, this.state); - this.enterRule(localctx, 74, SQLSelectParser.RULE_explicitTable); - try { - this.enterOuterAlt(localctx, 1); - this.state = 684; - this.match(SQLSelectParser.TABLE_SYMBOL); - this.state = 685; - this.qualifiedIdentifier(); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - rowValueExplicit() { - let localctx = new RowValueExplicitContext(this, this._ctx, this.state); - this.enterRule(localctx, 76, SQLSelectParser.RULE_rowValueExplicit); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 687; - this.match(SQLSelectParser.ROW_SYMBOL); - this.state = 688; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 690; - this._errHandler.sync(this); - _la = this._input.LA(1); - if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SQLSelectParser.PLUS_OPERATOR) | (1 << SQLSelectParser.MINUS_OPERATOR) | (1 << SQLSelectParser.LOGICAL_NOT_OPERATOR) | (1 << SQLSelectParser.BITWISE_NOT_OPERATOR) | (1 << SQLSelectParser.OPEN_PAR_SYMBOL) | (1 << SQLSelectParser.OPEN_CURLY_SYMBOL))) !== 0) || ((((_la - 36)) & ~0x1f) == 0 && ((1 << (_la - 36)) & ((1 << (SQLSelectParser.AT_SIGN_SYMBOL - 36)) | (1 << (SQLSelectParser.AT_TEXT_SUFFIX - 36)) | (1 << (SQLSelectParser.AT_AT_SIGN_SYMBOL - 36)) | (1 << (SQLSelectParser.NULL2_SYMBOL - 36)) | (1 << (SQLSelectParser.PARAM_MARKER - 36)) | (1 << (SQLSelectParser.HEX_NUMBER - 36)) | (1 << (SQLSelectParser.BIN_NUMBER - 36)) | (1 << (SQLSelectParser.INT_NUMBER - 36)) | (1 << (SQLSelectParser.DECIMAL_NUMBER - 36)) | (1 << (SQLSelectParser.FLOAT_NUMBER - 36)) | (1 << (SQLSelectParser.TINYINT_SYMBOL - 36)) | (1 << (SQLSelectParser.SMALLINT_SYMBOL - 36)) | (1 << (SQLSelectParser.MEDIUMINT_SYMBOL - 36)) | (1 << (SQLSelectParser.BYTE_INT_SYMBOL - 36)) | (1 << (SQLSelectParser.INT_SYMBOL - 36)) | (1 << (SQLSelectParser.BIGINT_SYMBOL - 36)) | (1 << (SQLSelectParser.SECOND_SYMBOL - 36)) | (1 << (SQLSelectParser.MINUTE_SYMBOL - 36)) | (1 << (SQLSelectParser.HOUR_SYMBOL - 36)) | (1 << (SQLSelectParser.DAY_SYMBOL - 36)) | (1 << (SQLSelectParser.WEEK_SYMBOL - 36)) | (1 << (SQLSelectParser.MONTH_SYMBOL - 36)) | (1 << (SQLSelectParser.QUARTER_SYMBOL - 36)) | (1 << (SQLSelectParser.YEAR_SYMBOL - 36)) | (1 << (SQLSelectParser.DEFAULT_SYMBOL - 36)) | (1 << (SQLSelectParser.UNION_SYMBOL - 36)) | (1 << (SQLSelectParser.SELECT_SYMBOL - 36)) | (1 << (SQLSelectParser.ALL_SYMBOL - 36)) | (1 << (SQLSelectParser.DISTINCT_SYMBOL - 36)) | (1 << (SQLSelectParser.STRAIGHT_JOIN_SYMBOL - 36)) | (1 << (SQLSelectParser.HIGH_PRIORITY_SYMBOL - 36)))) !== 0) || ((((_la - 68)) & ~0x1f) == 0 && ((1 << (_la - 68)) & ((1 << (SQLSelectParser.SQL_SMALL_RESULT_SYMBOL - 68)) | (1 << (SQLSelectParser.SQL_BIG_RESULT_SYMBOL - 68)) | (1 << (SQLSelectParser.SQL_BUFFER_RESULT_SYMBOL - 68)) | (1 << (SQLSelectParser.SQL_CALC_FOUND_ROWS_SYMBOL - 68)) | (1 << (SQLSelectParser.LIMIT_SYMBOL - 68)) | (1 << (SQLSelectParser.OFFSET_SYMBOL - 68)) | (1 << (SQLSelectParser.INTO_SYMBOL - 68)) | (1 << (SQLSelectParser.OUTFILE_SYMBOL - 68)) | (1 << (SQLSelectParser.DUMPFILE_SYMBOL - 68)) | (1 << (SQLSelectParser.PROCEDURE_SYMBOL - 68)) | (1 << (SQLSelectParser.ANALYSE_SYMBOL - 68)) | (1 << (SQLSelectParser.HAVING_SYMBOL - 68)) | (1 << (SQLSelectParser.WINDOW_SYMBOL - 68)) | (1 << (SQLSelectParser.AS_SYMBOL - 68)) | (1 << (SQLSelectParser.PARTITION_SYMBOL - 68)) | (1 << (SQLSelectParser.BY_SYMBOL - 68)) | (1 << (SQLSelectParser.ROWS_SYMBOL - 68)) | (1 << (SQLSelectParser.RANGE_SYMBOL - 68)) | (1 << (SQLSelectParser.GROUPS_SYMBOL - 68)) | (1 << (SQLSelectParser.UNBOUNDED_SYMBOL - 68)) | (1 << (SQLSelectParser.PRECEDING_SYMBOL - 68)) | (1 << (SQLSelectParser.INTERVAL_SYMBOL - 68)) | (1 << (SQLSelectParser.CURRENT_SYMBOL - 68)) | (1 << (SQLSelectParser.ROW_SYMBOL - 68)) | (1 << (SQLSelectParser.BETWEEN_SYMBOL - 68)) | (1 << (SQLSelectParser.AND_SYMBOL - 68)) | (1 << (SQLSelectParser.FOLLOWING_SYMBOL - 68)) | (1 << (SQLSelectParser.EXCLUDE_SYMBOL - 68)) | (1 << (SQLSelectParser.GROUP_SYMBOL - 68)) | (1 << (SQLSelectParser.TIES_SYMBOL - 68)) | (1 << (SQLSelectParser.NO_SYMBOL - 68)) | (1 << (SQLSelectParser.OTHERS_SYMBOL - 68)))) !== 0) || ((((_la - 100)) & ~0x1f) == 0 && ((1 << (_la - 100)) & ((1 << (SQLSelectParser.WITH_SYMBOL - 100)) | (1 << (SQLSelectParser.WITHOUT_SYMBOL - 100)) | (1 << (SQLSelectParser.RECURSIVE_SYMBOL - 100)) | (1 << (SQLSelectParser.ROLLUP_SYMBOL - 100)) | (1 << (SQLSelectParser.CUBE_SYMBOL - 100)) | (1 << (SQLSelectParser.ORDER_SYMBOL - 100)) | (1 << (SQLSelectParser.ASC_SYMBOL - 100)) | (1 << (SQLSelectParser.DESC_SYMBOL - 100)) | (1 << (SQLSelectParser.FROM_SYMBOL - 100)) | (1 << (SQLSelectParser.DUAL_SYMBOL - 100)) | (1 << (SQLSelectParser.VALUES_SYMBOL - 100)) | (1 << (SQLSelectParser.TABLE_SYMBOL - 100)) | (1 << (SQLSelectParser.SQL_NO_CACHE_SYMBOL - 100)) | (1 << (SQLSelectParser.SQL_CACHE_SYMBOL - 100)) | (1 << (SQLSelectParser.MAX_STATEMENT_TIME_SYMBOL - 100)) | (1 << (SQLSelectParser.FOR_SYMBOL - 100)) | (1 << (SQLSelectParser.OF_SYMBOL - 100)) | (1 << (SQLSelectParser.LOCK_SYMBOL - 100)) | (1 << (SQLSelectParser.IN_SYMBOL - 100)) | (1 << (SQLSelectParser.SHARE_SYMBOL - 100)) | (1 << (SQLSelectParser.MODE_SYMBOL - 100)) | (1 << (SQLSelectParser.UPDATE_SYMBOL - 100)) | (1 << (SQLSelectParser.SKIP_SYMBOL - 100)) | (1 << (SQLSelectParser.LOCKED_SYMBOL - 100)) | (1 << (SQLSelectParser.NOWAIT_SYMBOL - 100)) | (1 << (SQLSelectParser.WHERE_SYMBOL - 100)) | (1 << (SQLSelectParser.OJ_SYMBOL - 100)) | (1 << (SQLSelectParser.ON_SYMBOL - 100)) | (1 << (SQLSelectParser.USING_SYMBOL - 100)) | (1 << (SQLSelectParser.NATURAL_SYMBOL - 100)) | (1 << (SQLSelectParser.INNER_SYMBOL - 100)) | (1 << (SQLSelectParser.JOIN_SYMBOL - 100)))) !== 0) || ((((_la - 132)) & ~0x1f) == 0 && ((1 << (_la - 132)) & ((1 << (SQLSelectParser.LEFT_SYMBOL - 132)) | (1 << (SQLSelectParser.RIGHT_SYMBOL - 132)) | (1 << (SQLSelectParser.OUTER_SYMBOL - 132)) | (1 << (SQLSelectParser.CROSS_SYMBOL - 132)) | (1 << (SQLSelectParser.LATERAL_SYMBOL - 132)) | (1 << (SQLSelectParser.JSON_TABLE_SYMBOL - 132)) | (1 << (SQLSelectParser.COLUMNS_SYMBOL - 132)) | (1 << (SQLSelectParser.ORDINALITY_SYMBOL - 132)) | (1 << (SQLSelectParser.EXISTS_SYMBOL - 132)) | (1 << (SQLSelectParser.PATH_SYMBOL - 132)) | (1 << (SQLSelectParser.NESTED_SYMBOL - 132)) | (1 << (SQLSelectParser.EMPTY_SYMBOL - 132)) | (1 << (SQLSelectParser.ERROR_SYMBOL - 132)) | (1 << (SQLSelectParser.NULL_SYMBOL - 132)) | (1 << (SQLSelectParser.USE_SYMBOL - 132)) | (1 << (SQLSelectParser.FORCE_SYMBOL - 132)) | (1 << (SQLSelectParser.IGNORE_SYMBOL - 132)) | (1 << (SQLSelectParser.KEY_SYMBOL - 132)) | (1 << (SQLSelectParser.INDEX_SYMBOL - 132)) | (1 << (SQLSelectParser.PRIMARY_SYMBOL - 132)) | (1 << (SQLSelectParser.IS_SYMBOL - 132)) | (1 << (SQLSelectParser.TRUE_SYMBOL - 132)) | (1 << (SQLSelectParser.FALSE_SYMBOL - 132)) | (1 << (SQLSelectParser.UNKNOWN_SYMBOL - 132)) | (1 << (SQLSelectParser.NOT_SYMBOL - 132)) | (1 << (SQLSelectParser.XOR_SYMBOL - 132)) | (1 << (SQLSelectParser.OR_SYMBOL - 132)) | (1 << (SQLSelectParser.ANY_SYMBOL - 132)) | (1 << (SQLSelectParser.MEMBER_SYMBOL - 132)) | (1 << (SQLSelectParser.SOUNDS_SYMBOL - 132)) | (1 << (SQLSelectParser.LIKE_SYMBOL - 132)) | (1 << (SQLSelectParser.ESCAPE_SYMBOL - 132)))) !== 0) || ((((_la - 164)) & ~0x1f) == 0 && ((1 << (_la - 164)) & ((1 << (SQLSelectParser.REGEXP_SYMBOL - 164)) | (1 << (SQLSelectParser.DIV_SYMBOL - 164)) | (1 << (SQLSelectParser.MOD_SYMBOL - 164)) | (1 << (SQLSelectParser.MATCH_SYMBOL - 164)) | (1 << (SQLSelectParser.AGAINST_SYMBOL - 164)) | (1 << (SQLSelectParser.BINARY_SYMBOL - 164)) | (1 << (SQLSelectParser.CAST_SYMBOL - 164)) | (1 << (SQLSelectParser.ARRAY_SYMBOL - 164)) | (1 << (SQLSelectParser.CASE_SYMBOL - 164)) | (1 << (SQLSelectParser.END_SYMBOL - 164)) | (1 << (SQLSelectParser.CONVERT_SYMBOL - 164)) | (1 << (SQLSelectParser.COLLATE_SYMBOL - 164)) | (1 << (SQLSelectParser.AVG_SYMBOL - 164)) | (1 << (SQLSelectParser.BIT_AND_SYMBOL - 164)) | (1 << (SQLSelectParser.BIT_OR_SYMBOL - 164)) | (1 << (SQLSelectParser.BIT_XOR_SYMBOL - 164)) | (1 << (SQLSelectParser.COUNT_SYMBOL - 164)) | (1 << (SQLSelectParser.MIN_SYMBOL - 164)) | (1 << (SQLSelectParser.MAX_SYMBOL - 164)) | (1 << (SQLSelectParser.STD_SYMBOL - 164)) | (1 << (SQLSelectParser.VARIANCE_SYMBOL - 164)) | (1 << (SQLSelectParser.STDDEV_SAMP_SYMBOL - 164)) | (1 << (SQLSelectParser.VAR_SAMP_SYMBOL - 164)) | (1 << (SQLSelectParser.SUM_SYMBOL - 164)) | (1 << (SQLSelectParser.GROUP_CONCAT_SYMBOL - 164)) | (1 << (SQLSelectParser.SEPARATOR_SYMBOL - 164)) | (1 << (SQLSelectParser.GROUPING_SYMBOL - 164)) | (1 << (SQLSelectParser.ROW_NUMBER_SYMBOL - 164)) | (1 << (SQLSelectParser.RANK_SYMBOL - 164)) | (1 << (SQLSelectParser.DENSE_RANK_SYMBOL - 164)) | (1 << (SQLSelectParser.CUME_DIST_SYMBOL - 164)) | (1 << (SQLSelectParser.PERCENT_RANK_SYMBOL - 164)))) !== 0) || ((((_la - 196)) & ~0x1f) == 0 && ((1 << (_la - 196)) & ((1 << (SQLSelectParser.NTILE_SYMBOL - 196)) | (1 << (SQLSelectParser.LEAD_SYMBOL - 196)) | (1 << (SQLSelectParser.LAG_SYMBOL - 196)) | (1 << (SQLSelectParser.FIRST_VALUE_SYMBOL - 196)) | (1 << (SQLSelectParser.LAST_VALUE_SYMBOL - 196)) | (1 << (SQLSelectParser.NTH_VALUE_SYMBOL - 196)) | (1 << (SQLSelectParser.FIRST_SYMBOL - 196)) | (1 << (SQLSelectParser.LAST_SYMBOL - 196)) | (1 << (SQLSelectParser.OVER_SYMBOL - 196)) | (1 << (SQLSelectParser.RESPECT_SYMBOL - 196)) | (1 << (SQLSelectParser.NULLS_SYMBOL - 196)) | (1 << (SQLSelectParser.JSON_ARRAYAGG_SYMBOL - 196)) | (1 << (SQLSelectParser.JSON_OBJECTAGG_SYMBOL - 196)) | (1 << (SQLSelectParser.BOOLEAN_SYMBOL - 196)) | (1 << (SQLSelectParser.LANGUAGE_SYMBOL - 196)) | (1 << (SQLSelectParser.QUERY_SYMBOL - 196)) | (1 << (SQLSelectParser.EXPANSION_SYMBOL - 196)) | (1 << (SQLSelectParser.CHAR_SYMBOL - 196)) | (1 << (SQLSelectParser.CURRENT_USER_SYMBOL - 196)) | (1 << (SQLSelectParser.DATE_SYMBOL - 196)) | (1 << (SQLSelectParser.INSERT_SYMBOL - 196)) | (1 << (SQLSelectParser.TIME_SYMBOL - 196)) | (1 << (SQLSelectParser.TIMESTAMP_SYMBOL - 196)) | (1 << (SQLSelectParser.TIMESTAMP_LTZ_SYMBOL - 196)) | (1 << (SQLSelectParser.TIMESTAMP_NTZ_SYMBOL - 196)) | (1 << (SQLSelectParser.ZONE_SYMBOL - 196)) | (1 << (SQLSelectParser.USER_SYMBOL - 196)) | (1 << (SQLSelectParser.ADDDATE_SYMBOL - 196)) | (1 << (SQLSelectParser.SUBDATE_SYMBOL - 196)) | (1 << (SQLSelectParser.CURDATE_SYMBOL - 196)) | (1 << (SQLSelectParser.CURTIME_SYMBOL - 196)) | (1 << (SQLSelectParser.DATE_ADD_SYMBOL - 196)))) !== 0) || ((((_la - 228)) & ~0x1f) == 0 && ((1 << (_la - 228)) & ((1 << (SQLSelectParser.DATE_SUB_SYMBOL - 228)) | (1 << (SQLSelectParser.EXTRACT_SYMBOL - 228)) | (1 << (SQLSelectParser.GET_FORMAT_SYMBOL - 228)) | (1 << (SQLSelectParser.NOW_SYMBOL - 228)) | (1 << (SQLSelectParser.POSITION_SYMBOL - 228)) | (1 << (SQLSelectParser.SYSDATE_SYMBOL - 228)) | (1 << (SQLSelectParser.TIMESTAMP_ADD_SYMBOL - 228)) | (1 << (SQLSelectParser.TIMESTAMP_DIFF_SYMBOL - 228)) | (1 << (SQLSelectParser.UTC_DATE_SYMBOL - 228)) | (1 << (SQLSelectParser.UTC_TIME_SYMBOL - 228)) | (1 << (SQLSelectParser.UTC_TIMESTAMP_SYMBOL - 228)) | (1 << (SQLSelectParser.ASCII_SYMBOL - 228)) | (1 << (SQLSelectParser.CHARSET_SYMBOL - 228)) | (1 << (SQLSelectParser.COALESCE_SYMBOL - 228)) | (1 << (SQLSelectParser.COLLATION_SYMBOL - 228)) | (1 << (SQLSelectParser.DATABASE_SYMBOL - 228)) | (1 << (SQLSelectParser.IF_SYMBOL - 228)) | (1 << (SQLSelectParser.FORMAT_SYMBOL - 228)) | (1 << (SQLSelectParser.MICROSECOND_SYMBOL - 228)) | (1 << (SQLSelectParser.OLD_PASSWORD_SYMBOL - 228)) | (1 << (SQLSelectParser.PASSWORD_SYMBOL - 228)) | (1 << (SQLSelectParser.REPEAT_SYMBOL - 228)) | (1 << (SQLSelectParser.REPLACE_SYMBOL - 228)) | (1 << (SQLSelectParser.REVERSE_SYMBOL - 228)) | (1 << (SQLSelectParser.ROW_COUNT_SYMBOL - 228)) | (1 << (SQLSelectParser.TRUNCATE_SYMBOL - 228)) | (1 << (SQLSelectParser.WEIGHT_STRING_SYMBOL - 228)) | (1 << (SQLSelectParser.CONTAINS_SYMBOL - 228)) | (1 << (SQLSelectParser.GEOMETRYCOLLECTION_SYMBOL - 228)) | (1 << (SQLSelectParser.LINESTRING_SYMBOL - 228)) | (1 << (SQLSelectParser.MULTILINESTRING_SYMBOL - 228)) | (1 << (SQLSelectParser.MULTIPOINT_SYMBOL - 228)))) !== 0) || ((((_la - 260)) & ~0x1f) == 0 && ((1 << (_la - 260)) & ((1 << (SQLSelectParser.MULTIPOLYGON_SYMBOL - 260)) | (1 << (SQLSelectParser.POINT_SYMBOL - 260)) | (1 << (SQLSelectParser.POLYGON_SYMBOL - 260)) | (1 << (SQLSelectParser.LEVEL_SYMBOL - 260)) | (1 << (SQLSelectParser.DATETIME_SYMBOL - 260)) | (1 << (SQLSelectParser.TRIM_SYMBOL - 260)) | (1 << (SQLSelectParser.LEADING_SYMBOL - 260)) | (1 << (SQLSelectParser.TRAILING_SYMBOL - 260)) | (1 << (SQLSelectParser.BOTH_SYMBOL - 260)) | (1 << (SQLSelectParser.STRING_SYMBOL - 260)) | (1 << (SQLSelectParser.SUBSTRING_SYMBOL - 260)) | (1 << (SQLSelectParser.WHEN_SYMBOL - 260)) | (1 << (SQLSelectParser.THEN_SYMBOL - 260)) | (1 << (SQLSelectParser.ELSE_SYMBOL - 260)) | (1 << (SQLSelectParser.SIGNED_SYMBOL - 260)) | (1 << (SQLSelectParser.UNSIGNED_SYMBOL - 260)) | (1 << (SQLSelectParser.DECIMAL_SYMBOL - 260)) | (1 << (SQLSelectParser.JSON_SYMBOL - 260)) | (1 << (SQLSelectParser.FLOAT_SYMBOL - 260)) | (1 << (SQLSelectParser.FLOAT_SYMBOL_4 - 260)) | (1 << (SQLSelectParser.FLOAT_SYMBOL_8 - 260)) | (1 << (SQLSelectParser.SET_SYMBOL - 260)) | (1 << (SQLSelectParser.SECOND_MICROSECOND_SYMBOL - 260)) | (1 << (SQLSelectParser.MINUTE_MICROSECOND_SYMBOL - 260)) | (1 << (SQLSelectParser.MINUTE_SECOND_SYMBOL - 260)) | (1 << (SQLSelectParser.HOUR_MICROSECOND_SYMBOL - 260)) | (1 << (SQLSelectParser.HOUR_SECOND_SYMBOL - 260)) | (1 << (SQLSelectParser.HOUR_MINUTE_SYMBOL - 260)) | (1 << (SQLSelectParser.DAY_MICROSECOND_SYMBOL - 260)) | (1 << (SQLSelectParser.DAY_SECOND_SYMBOL - 260)) | (1 << (SQLSelectParser.DAY_MINUTE_SYMBOL - 260)) | (1 << (SQLSelectParser.DAY_HOUR_SYMBOL - 260)))) !== 0) || ((((_la - 292)) & ~0x1f) == 0 && ((1 << (_la - 292)) & ((1 << (SQLSelectParser.YEAR_MONTH_SYMBOL - 292)) | (1 << (SQLSelectParser.BTREE_SYMBOL - 292)) | (1 << (SQLSelectParser.RTREE_SYMBOL - 292)) | (1 << (SQLSelectParser.HASH_SYMBOL - 292)) | (1 << (SQLSelectParser.REAL_SYMBOL - 292)) | (1 << (SQLSelectParser.DOUBLE_SYMBOL - 292)) | (1 << (SQLSelectParser.PRECISION_SYMBOL - 292)) | (1 << (SQLSelectParser.NUMERIC_SYMBOL - 292)) | (1 << (SQLSelectParser.NUMBER_SYMBOL - 292)) | (1 << (SQLSelectParser.FIXED_SYMBOL - 292)) | (1 << (SQLSelectParser.BIT_SYMBOL - 292)) | (1 << (SQLSelectParser.BOOL_SYMBOL - 292)) | (1 << (SQLSelectParser.VARYING_SYMBOL - 292)) | (1 << (SQLSelectParser.VARCHAR_SYMBOL - 292)) | (1 << (SQLSelectParser.NATIONAL_SYMBOL - 292)) | (1 << (SQLSelectParser.NVARCHAR_SYMBOL - 292)) | (1 << (SQLSelectParser.NCHAR_SYMBOL - 292)) | (1 << (SQLSelectParser.VARBINARY_SYMBOL - 292)) | (1 << (SQLSelectParser.TINYBLOB_SYMBOL - 292)) | (1 << (SQLSelectParser.BLOB_SYMBOL - 292)) | (1 << (SQLSelectParser.MEDIUMBLOB_SYMBOL - 292)) | (1 << (SQLSelectParser.LONGBLOB_SYMBOL - 292)) | (1 << (SQLSelectParser.LONG_SYMBOL - 292)) | (1 << (SQLSelectParser.TINYTEXT_SYMBOL - 292)) | (1 << (SQLSelectParser.TEXT_SYMBOL - 292)) | (1 << (SQLSelectParser.MEDIUMTEXT_SYMBOL - 292)) | (1 << (SQLSelectParser.LONGTEXT_SYMBOL - 292)) | (1 << (SQLSelectParser.ENUM_SYMBOL - 292)) | (1 << (SQLSelectParser.SERIAL_SYMBOL - 292)) | (1 << (SQLSelectParser.GEOMETRY_SYMBOL - 292)) | (1 << (SQLSelectParser.ZEROFILL_SYMBOL - 292)) | (1 << (SQLSelectParser.BYTE_SYMBOL - 292)))) !== 0) || ((((_la - 324)) & ~0x1f) == 0 && ((1 << (_la - 324)) & ((1 << (SQLSelectParser.UNICODE_SYMBOL - 324)) | (1 << (SQLSelectParser.TERMINATED_SYMBOL - 324)) | (1 << (SQLSelectParser.OPTIONALLY_SYMBOL - 324)) | (1 << (SQLSelectParser.ENCLOSED_SYMBOL - 324)) | (1 << (SQLSelectParser.ESCAPED_SYMBOL - 324)) | (1 << (SQLSelectParser.LINES_SYMBOL - 324)) | (1 << (SQLSelectParser.STARTING_SYMBOL - 324)) | (1 << (SQLSelectParser.GLOBAL_SYMBOL - 324)) | (1 << (SQLSelectParser.LOCAL_SYMBOL - 324)) | (1 << (SQLSelectParser.SESSION_SYMBOL - 324)) | (1 << (SQLSelectParser.VARIANT_SYMBOL - 324)) | (1 << (SQLSelectParser.OBJECT_SYMBOL - 324)) | (1 << (SQLSelectParser.GEOGRAPHY_SYMBOL - 324)) | (1 << (SQLSelectParser.UNDERSCORE_CHARSET - 324)) | (1 << (SQLSelectParser.IDENTIFIER - 324)) | (1 << (SQLSelectParser.NCHAR_TEXT - 324)) | (1 << (SQLSelectParser.BACK_TICK_QUOTED_ID - 324)) | (1 << (SQLSelectParser.DOUBLE_QUOTED_TEXT - 324)) | (1 << (SQLSelectParser.SINGLE_QUOTED_TEXT - 324)) | (1 << (SQLSelectParser.BRACKET_QUOTED_TEXT - 324)))) !== 0)) { - this.state = 689; - this.values(); - } - - this.state = 692; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - selectOption() { - let localctx = new SelectOptionContext(this, this._ctx, this.state); - this.enterRule(localctx, 78, SQLSelectParser.RULE_selectOption); - try { - this.state = 700; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.ALL_SYMBOL: - case SQLSelectParser.DISTINCT_SYMBOL: - case SQLSelectParser.STRAIGHT_JOIN_SYMBOL: - case SQLSelectParser.HIGH_PRIORITY_SYMBOL: - case SQLSelectParser.SQL_SMALL_RESULT_SYMBOL: - case SQLSelectParser.SQL_BIG_RESULT_SYMBOL: - case SQLSelectParser.SQL_BUFFER_RESULT_SYMBOL: - case SQLSelectParser.SQL_CALC_FOUND_ROWS_SYMBOL: - this.enterOuterAlt(localctx, 1); - this.state = 694; - this.querySpecOption(); - break; - case SQLSelectParser.SQL_NO_CACHE_SYMBOL: - this.enterOuterAlt(localctx, 2); - this.state = 695; - this.match(SQLSelectParser.SQL_NO_CACHE_SYMBOL); - break; - case SQLSelectParser.SQL_CACHE_SYMBOL: - this.enterOuterAlt(localctx, 3); - this.state = 696; - this.match(SQLSelectParser.SQL_CACHE_SYMBOL); - break; - case SQLSelectParser.MAX_STATEMENT_TIME_SYMBOL: - this.enterOuterAlt(localctx, 4); - this.state = 697; - this.match(SQLSelectParser.MAX_STATEMENT_TIME_SYMBOL); - this.state = 698; - this.match(SQLSelectParser.EQUAL_OPERATOR); - this.state = 699; - this.real_ulong_number(); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - lockingClauseList() { - let localctx = new LockingClauseListContext(this, this._ctx, this.state); - this.enterRule(localctx, 80, SQLSelectParser.RULE_lockingClauseList); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 703; - this._errHandler.sync(this); - _la = this._input.LA(1); - do { - this.state = 702; - this.lockingClause(); - this.state = 705; - this._errHandler.sync(this); - _la = this._input.LA(1); - } while(_la===SQLSelectParser.FOR_SYMBOL || _la===SQLSelectParser.LOCK_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - lockingClause() { - let localctx = new LockingClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 82, SQLSelectParser.RULE_lockingClause); - var _la = 0; // Token type - try { - this.state = 720; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.FOR_SYMBOL: - this.enterOuterAlt(localctx, 1); - this.state = 707; - this.match(SQLSelectParser.FOR_SYMBOL); - this.state = 708; - this.lockStrengh(); - this.state = 711; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.OF_SYMBOL) { - this.state = 709; - this.match(SQLSelectParser.OF_SYMBOL); - this.state = 710; - this.tableAliasRefList(); - } - - this.state = 714; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.SKIP_SYMBOL || _la===SQLSelectParser.NOWAIT_SYMBOL) { - this.state = 713; - this.lockedRowAction(); - } - - break; - case SQLSelectParser.LOCK_SYMBOL: - this.enterOuterAlt(localctx, 2); - this.state = 716; - this.match(SQLSelectParser.LOCK_SYMBOL); - this.state = 717; - this.match(SQLSelectParser.IN_SYMBOL); - this.state = 718; - this.match(SQLSelectParser.SHARE_SYMBOL); - this.state = 719; - this.match(SQLSelectParser.MODE_SYMBOL); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - lockStrengh() { - let localctx = new LockStrenghContext(this, this._ctx, this.state); - this.enterRule(localctx, 84, SQLSelectParser.RULE_lockStrengh); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 722; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.SHARE_SYMBOL || _la===SQLSelectParser.UPDATE_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - lockedRowAction() { - let localctx = new LockedRowActionContext(this, this._ctx, this.state); - this.enterRule(localctx, 86, SQLSelectParser.RULE_lockedRowAction); - try { - this.state = 727; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.SKIP_SYMBOL: - this.enterOuterAlt(localctx, 1); - this.state = 724; - this.match(SQLSelectParser.SKIP_SYMBOL); - this.state = 725; - this.match(SQLSelectParser.LOCKED_SYMBOL); - break; - case SQLSelectParser.NOWAIT_SYMBOL: - this.enterOuterAlt(localctx, 2); - this.state = 726; - this.match(SQLSelectParser.NOWAIT_SYMBOL); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - selectItemList() { - let localctx = new SelectItemListContext(this, this._ctx, this.state); - this.enterRule(localctx, 88, SQLSelectParser.RULE_selectItemList); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 731; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.PLUS_OPERATOR: - case SQLSelectParser.MINUS_OPERATOR: - case SQLSelectParser.LOGICAL_NOT_OPERATOR: - case SQLSelectParser.BITWISE_NOT_OPERATOR: - case SQLSelectParser.OPEN_PAR_SYMBOL: - case SQLSelectParser.OPEN_CURLY_SYMBOL: - case SQLSelectParser.AT_SIGN_SYMBOL: - case SQLSelectParser.AT_TEXT_SUFFIX: - case SQLSelectParser.AT_AT_SIGN_SYMBOL: - case SQLSelectParser.NULL2_SYMBOL: - case SQLSelectParser.PARAM_MARKER: - case SQLSelectParser.HEX_NUMBER: - case SQLSelectParser.BIN_NUMBER: - case SQLSelectParser.INT_NUMBER: - case SQLSelectParser.DECIMAL_NUMBER: - case SQLSelectParser.FLOAT_NUMBER: - case SQLSelectParser.TINYINT_SYMBOL: - case SQLSelectParser.SMALLINT_SYMBOL: - case SQLSelectParser.MEDIUMINT_SYMBOL: - case SQLSelectParser.BYTE_INT_SYMBOL: - case SQLSelectParser.INT_SYMBOL: - case SQLSelectParser.BIGINT_SYMBOL: - case SQLSelectParser.SECOND_SYMBOL: - case SQLSelectParser.MINUTE_SYMBOL: - case SQLSelectParser.HOUR_SYMBOL: - case SQLSelectParser.DAY_SYMBOL: - case SQLSelectParser.WEEK_SYMBOL: - case SQLSelectParser.MONTH_SYMBOL: - case SQLSelectParser.QUARTER_SYMBOL: - case SQLSelectParser.YEAR_SYMBOL: - case SQLSelectParser.DEFAULT_SYMBOL: - case SQLSelectParser.UNION_SYMBOL: - case SQLSelectParser.SELECT_SYMBOL: - case SQLSelectParser.ALL_SYMBOL: - case SQLSelectParser.DISTINCT_SYMBOL: - case SQLSelectParser.STRAIGHT_JOIN_SYMBOL: - case SQLSelectParser.HIGH_PRIORITY_SYMBOL: - case SQLSelectParser.SQL_SMALL_RESULT_SYMBOL: - case SQLSelectParser.SQL_BIG_RESULT_SYMBOL: - case SQLSelectParser.SQL_BUFFER_RESULT_SYMBOL: - case SQLSelectParser.SQL_CALC_FOUND_ROWS_SYMBOL: - case SQLSelectParser.LIMIT_SYMBOL: - case SQLSelectParser.OFFSET_SYMBOL: - case SQLSelectParser.INTO_SYMBOL: - case SQLSelectParser.OUTFILE_SYMBOL: - case SQLSelectParser.DUMPFILE_SYMBOL: - case SQLSelectParser.PROCEDURE_SYMBOL: - case SQLSelectParser.ANALYSE_SYMBOL: - case SQLSelectParser.HAVING_SYMBOL: - case SQLSelectParser.WINDOW_SYMBOL: - case SQLSelectParser.AS_SYMBOL: - case SQLSelectParser.PARTITION_SYMBOL: - case SQLSelectParser.BY_SYMBOL: - case SQLSelectParser.ROWS_SYMBOL: - case SQLSelectParser.RANGE_SYMBOL: - case SQLSelectParser.GROUPS_SYMBOL: - case SQLSelectParser.UNBOUNDED_SYMBOL: - case SQLSelectParser.PRECEDING_SYMBOL: - case SQLSelectParser.INTERVAL_SYMBOL: - case SQLSelectParser.CURRENT_SYMBOL: - case SQLSelectParser.ROW_SYMBOL: - case SQLSelectParser.BETWEEN_SYMBOL: - case SQLSelectParser.AND_SYMBOL: - case SQLSelectParser.FOLLOWING_SYMBOL: - case SQLSelectParser.EXCLUDE_SYMBOL: - case SQLSelectParser.GROUP_SYMBOL: - case SQLSelectParser.TIES_SYMBOL: - case SQLSelectParser.NO_SYMBOL: - case SQLSelectParser.OTHERS_SYMBOL: - case SQLSelectParser.WITH_SYMBOL: - case SQLSelectParser.WITHOUT_SYMBOL: - case SQLSelectParser.RECURSIVE_SYMBOL: - case SQLSelectParser.ROLLUP_SYMBOL: - case SQLSelectParser.CUBE_SYMBOL: - case SQLSelectParser.ORDER_SYMBOL: - case SQLSelectParser.ASC_SYMBOL: - case SQLSelectParser.DESC_SYMBOL: - case SQLSelectParser.FROM_SYMBOL: - case SQLSelectParser.DUAL_SYMBOL: - case SQLSelectParser.VALUES_SYMBOL: - case SQLSelectParser.TABLE_SYMBOL: - case SQLSelectParser.SQL_NO_CACHE_SYMBOL: - case SQLSelectParser.SQL_CACHE_SYMBOL: - case SQLSelectParser.MAX_STATEMENT_TIME_SYMBOL: - case SQLSelectParser.FOR_SYMBOL: - case SQLSelectParser.OF_SYMBOL: - case SQLSelectParser.LOCK_SYMBOL: - case SQLSelectParser.IN_SYMBOL: - case SQLSelectParser.SHARE_SYMBOL: - case SQLSelectParser.MODE_SYMBOL: - case SQLSelectParser.UPDATE_SYMBOL: - case SQLSelectParser.SKIP_SYMBOL: - case SQLSelectParser.LOCKED_SYMBOL: - case SQLSelectParser.NOWAIT_SYMBOL: - case SQLSelectParser.WHERE_SYMBOL: - case SQLSelectParser.OJ_SYMBOL: - case SQLSelectParser.ON_SYMBOL: - case SQLSelectParser.USING_SYMBOL: - case SQLSelectParser.NATURAL_SYMBOL: - case SQLSelectParser.INNER_SYMBOL: - case SQLSelectParser.JOIN_SYMBOL: - case SQLSelectParser.LEFT_SYMBOL: - case SQLSelectParser.RIGHT_SYMBOL: - case SQLSelectParser.OUTER_SYMBOL: - case SQLSelectParser.CROSS_SYMBOL: - case SQLSelectParser.LATERAL_SYMBOL: - case SQLSelectParser.JSON_TABLE_SYMBOL: - case SQLSelectParser.COLUMNS_SYMBOL: - case SQLSelectParser.ORDINALITY_SYMBOL: - case SQLSelectParser.EXISTS_SYMBOL: - case SQLSelectParser.PATH_SYMBOL: - case SQLSelectParser.NESTED_SYMBOL: - case SQLSelectParser.EMPTY_SYMBOL: - case SQLSelectParser.ERROR_SYMBOL: - case SQLSelectParser.NULL_SYMBOL: - case SQLSelectParser.USE_SYMBOL: - case SQLSelectParser.FORCE_SYMBOL: - case SQLSelectParser.IGNORE_SYMBOL: - case SQLSelectParser.KEY_SYMBOL: - case SQLSelectParser.INDEX_SYMBOL: - case SQLSelectParser.PRIMARY_SYMBOL: - case SQLSelectParser.IS_SYMBOL: - case SQLSelectParser.TRUE_SYMBOL: - case SQLSelectParser.FALSE_SYMBOL: - case SQLSelectParser.UNKNOWN_SYMBOL: - case SQLSelectParser.NOT_SYMBOL: - case SQLSelectParser.XOR_SYMBOL: - case SQLSelectParser.OR_SYMBOL: - case SQLSelectParser.ANY_SYMBOL: - case SQLSelectParser.MEMBER_SYMBOL: - case SQLSelectParser.SOUNDS_SYMBOL: - case SQLSelectParser.LIKE_SYMBOL: - case SQLSelectParser.ESCAPE_SYMBOL: - case SQLSelectParser.REGEXP_SYMBOL: - case SQLSelectParser.DIV_SYMBOL: - case SQLSelectParser.MOD_SYMBOL: - case SQLSelectParser.MATCH_SYMBOL: - case SQLSelectParser.AGAINST_SYMBOL: - case SQLSelectParser.BINARY_SYMBOL: - case SQLSelectParser.CAST_SYMBOL: - case SQLSelectParser.ARRAY_SYMBOL: - case SQLSelectParser.CASE_SYMBOL: - case SQLSelectParser.END_SYMBOL: - case SQLSelectParser.CONVERT_SYMBOL: - case SQLSelectParser.COLLATE_SYMBOL: - case SQLSelectParser.AVG_SYMBOL: - case SQLSelectParser.BIT_AND_SYMBOL: - case SQLSelectParser.BIT_OR_SYMBOL: - case SQLSelectParser.BIT_XOR_SYMBOL: - case SQLSelectParser.COUNT_SYMBOL: - case SQLSelectParser.MIN_SYMBOL: - case SQLSelectParser.MAX_SYMBOL: - case SQLSelectParser.STD_SYMBOL: - case SQLSelectParser.VARIANCE_SYMBOL: - case SQLSelectParser.STDDEV_SAMP_SYMBOL: - case SQLSelectParser.VAR_SAMP_SYMBOL: - case SQLSelectParser.SUM_SYMBOL: - case SQLSelectParser.GROUP_CONCAT_SYMBOL: - case SQLSelectParser.SEPARATOR_SYMBOL: - case SQLSelectParser.GROUPING_SYMBOL: - case SQLSelectParser.ROW_NUMBER_SYMBOL: - case SQLSelectParser.RANK_SYMBOL: - case SQLSelectParser.DENSE_RANK_SYMBOL: - case SQLSelectParser.CUME_DIST_SYMBOL: - case SQLSelectParser.PERCENT_RANK_SYMBOL: - case SQLSelectParser.NTILE_SYMBOL: - case SQLSelectParser.LEAD_SYMBOL: - case SQLSelectParser.LAG_SYMBOL: - case SQLSelectParser.FIRST_VALUE_SYMBOL: - case SQLSelectParser.LAST_VALUE_SYMBOL: - case SQLSelectParser.NTH_VALUE_SYMBOL: - case SQLSelectParser.FIRST_SYMBOL: - case SQLSelectParser.LAST_SYMBOL: - case SQLSelectParser.OVER_SYMBOL: - case SQLSelectParser.RESPECT_SYMBOL: - case SQLSelectParser.NULLS_SYMBOL: - case SQLSelectParser.JSON_ARRAYAGG_SYMBOL: - case SQLSelectParser.JSON_OBJECTAGG_SYMBOL: - case SQLSelectParser.BOOLEAN_SYMBOL: - case SQLSelectParser.LANGUAGE_SYMBOL: - case SQLSelectParser.QUERY_SYMBOL: - case SQLSelectParser.EXPANSION_SYMBOL: - case SQLSelectParser.CHAR_SYMBOL: - case SQLSelectParser.CURRENT_USER_SYMBOL: - case SQLSelectParser.DATE_SYMBOL: - case SQLSelectParser.INSERT_SYMBOL: - case SQLSelectParser.TIME_SYMBOL: - case SQLSelectParser.TIMESTAMP_SYMBOL: - case SQLSelectParser.TIMESTAMP_LTZ_SYMBOL: - case SQLSelectParser.TIMESTAMP_NTZ_SYMBOL: - case SQLSelectParser.ZONE_SYMBOL: - case SQLSelectParser.USER_SYMBOL: - case SQLSelectParser.ADDDATE_SYMBOL: - case SQLSelectParser.SUBDATE_SYMBOL: - case SQLSelectParser.CURDATE_SYMBOL: - case SQLSelectParser.CURTIME_SYMBOL: - case SQLSelectParser.DATE_ADD_SYMBOL: - case SQLSelectParser.DATE_SUB_SYMBOL: - case SQLSelectParser.EXTRACT_SYMBOL: - case SQLSelectParser.GET_FORMAT_SYMBOL: - case SQLSelectParser.NOW_SYMBOL: - case SQLSelectParser.POSITION_SYMBOL: - case SQLSelectParser.SYSDATE_SYMBOL: - case SQLSelectParser.TIMESTAMP_ADD_SYMBOL: - case SQLSelectParser.TIMESTAMP_DIFF_SYMBOL: - case SQLSelectParser.UTC_DATE_SYMBOL: - case SQLSelectParser.UTC_TIME_SYMBOL: - case SQLSelectParser.UTC_TIMESTAMP_SYMBOL: - case SQLSelectParser.ASCII_SYMBOL: - case SQLSelectParser.CHARSET_SYMBOL: - case SQLSelectParser.COALESCE_SYMBOL: - case SQLSelectParser.COLLATION_SYMBOL: - case SQLSelectParser.DATABASE_SYMBOL: - case SQLSelectParser.IF_SYMBOL: - case SQLSelectParser.FORMAT_SYMBOL: - case SQLSelectParser.MICROSECOND_SYMBOL: - case SQLSelectParser.OLD_PASSWORD_SYMBOL: - case SQLSelectParser.PASSWORD_SYMBOL: - case SQLSelectParser.REPEAT_SYMBOL: - case SQLSelectParser.REPLACE_SYMBOL: - case SQLSelectParser.REVERSE_SYMBOL: - case SQLSelectParser.ROW_COUNT_SYMBOL: - case SQLSelectParser.TRUNCATE_SYMBOL: - case SQLSelectParser.WEIGHT_STRING_SYMBOL: - case SQLSelectParser.CONTAINS_SYMBOL: - case SQLSelectParser.GEOMETRYCOLLECTION_SYMBOL: - case SQLSelectParser.LINESTRING_SYMBOL: - case SQLSelectParser.MULTILINESTRING_SYMBOL: - case SQLSelectParser.MULTIPOINT_SYMBOL: - case SQLSelectParser.MULTIPOLYGON_SYMBOL: - case SQLSelectParser.POINT_SYMBOL: - case SQLSelectParser.POLYGON_SYMBOL: - case SQLSelectParser.LEVEL_SYMBOL: - case SQLSelectParser.DATETIME_SYMBOL: - case SQLSelectParser.TRIM_SYMBOL: - case SQLSelectParser.LEADING_SYMBOL: - case SQLSelectParser.TRAILING_SYMBOL: - case SQLSelectParser.BOTH_SYMBOL: - case SQLSelectParser.STRING_SYMBOL: - case SQLSelectParser.SUBSTRING_SYMBOL: - case SQLSelectParser.WHEN_SYMBOL: - case SQLSelectParser.THEN_SYMBOL: - case SQLSelectParser.ELSE_SYMBOL: - case SQLSelectParser.SIGNED_SYMBOL: - case SQLSelectParser.UNSIGNED_SYMBOL: - case SQLSelectParser.DECIMAL_SYMBOL: - case SQLSelectParser.JSON_SYMBOL: - case SQLSelectParser.FLOAT_SYMBOL: - case SQLSelectParser.FLOAT_SYMBOL_4: - case SQLSelectParser.FLOAT_SYMBOL_8: - case SQLSelectParser.SET_SYMBOL: - case SQLSelectParser.SECOND_MICROSECOND_SYMBOL: - case SQLSelectParser.MINUTE_MICROSECOND_SYMBOL: - case SQLSelectParser.MINUTE_SECOND_SYMBOL: - case SQLSelectParser.HOUR_MICROSECOND_SYMBOL: - case SQLSelectParser.HOUR_SECOND_SYMBOL: - case SQLSelectParser.HOUR_MINUTE_SYMBOL: - case SQLSelectParser.DAY_MICROSECOND_SYMBOL: - case SQLSelectParser.DAY_SECOND_SYMBOL: - case SQLSelectParser.DAY_MINUTE_SYMBOL: - case SQLSelectParser.DAY_HOUR_SYMBOL: - case SQLSelectParser.YEAR_MONTH_SYMBOL: - case SQLSelectParser.BTREE_SYMBOL: - case SQLSelectParser.RTREE_SYMBOL: - case SQLSelectParser.HASH_SYMBOL: - case SQLSelectParser.REAL_SYMBOL: - case SQLSelectParser.DOUBLE_SYMBOL: - case SQLSelectParser.PRECISION_SYMBOL: - case SQLSelectParser.NUMERIC_SYMBOL: - case SQLSelectParser.NUMBER_SYMBOL: - case SQLSelectParser.FIXED_SYMBOL: - case SQLSelectParser.BIT_SYMBOL: - case SQLSelectParser.BOOL_SYMBOL: - case SQLSelectParser.VARYING_SYMBOL: - case SQLSelectParser.VARCHAR_SYMBOL: - case SQLSelectParser.NATIONAL_SYMBOL: - case SQLSelectParser.NVARCHAR_SYMBOL: - case SQLSelectParser.NCHAR_SYMBOL: - case SQLSelectParser.VARBINARY_SYMBOL: - case SQLSelectParser.TINYBLOB_SYMBOL: - case SQLSelectParser.BLOB_SYMBOL: - case SQLSelectParser.MEDIUMBLOB_SYMBOL: - case SQLSelectParser.LONGBLOB_SYMBOL: - case SQLSelectParser.LONG_SYMBOL: - case SQLSelectParser.TINYTEXT_SYMBOL: - case SQLSelectParser.TEXT_SYMBOL: - case SQLSelectParser.MEDIUMTEXT_SYMBOL: - case SQLSelectParser.LONGTEXT_SYMBOL: - case SQLSelectParser.ENUM_SYMBOL: - case SQLSelectParser.SERIAL_SYMBOL: - case SQLSelectParser.GEOMETRY_SYMBOL: - case SQLSelectParser.ZEROFILL_SYMBOL: - case SQLSelectParser.BYTE_SYMBOL: - case SQLSelectParser.UNICODE_SYMBOL: - case SQLSelectParser.TERMINATED_SYMBOL: - case SQLSelectParser.OPTIONALLY_SYMBOL: - case SQLSelectParser.ENCLOSED_SYMBOL: - case SQLSelectParser.ESCAPED_SYMBOL: - case SQLSelectParser.LINES_SYMBOL: - case SQLSelectParser.STARTING_SYMBOL: - case SQLSelectParser.GLOBAL_SYMBOL: - case SQLSelectParser.LOCAL_SYMBOL: - case SQLSelectParser.SESSION_SYMBOL: - case SQLSelectParser.VARIANT_SYMBOL: - case SQLSelectParser.OBJECT_SYMBOL: - case SQLSelectParser.GEOGRAPHY_SYMBOL: - case SQLSelectParser.UNDERSCORE_CHARSET: - case SQLSelectParser.IDENTIFIER: - case SQLSelectParser.NCHAR_TEXT: - case SQLSelectParser.BACK_TICK_QUOTED_ID: - case SQLSelectParser.DOUBLE_QUOTED_TEXT: - case SQLSelectParser.SINGLE_QUOTED_TEXT: - case SQLSelectParser.BRACKET_QUOTED_TEXT: - this.state = 729; - this.selectItem(); - break; - case SQLSelectParser.MULT_OPERATOR: - this.state = 730; - this.match(SQLSelectParser.MULT_OPERATOR); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - this.state = 737; - this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===SQLSelectParser.COMMA_SYMBOL) { - this.state = 733; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 734; - this.selectItem(); - this.state = 739; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - selectItem() { - let localctx = new SelectItemContext(this, this._ctx, this.state); - this.enterRule(localctx, 90, SQLSelectParser.RULE_selectItem); - try { - this.state = 748; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,74,this._ctx); - switch(la_) { - case 1: - this.enterOuterAlt(localctx, 1); - this.state = 740; - this.qualifiedIdentifier(); - this.state = 742; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,72,this._ctx); - if(la_===1) { - this.state = 741; - this.selectAlias(); - - } - break; - - case 2: - this.enterOuterAlt(localctx, 2); - this.state = 744; - this.expr(0); - this.state = 746; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,73,this._ctx); - if(la_===1) { - this.state = 745; - this.selectAlias(); - - } - break; - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - selectAlias() { - let localctx = new SelectAliasContext(this, this._ctx, this.state); - this.enterRule(localctx, 92, SQLSelectParser.RULE_selectAlias); - try { - this.enterOuterAlt(localctx, 1); - this.state = 751; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,75,this._ctx); - if(la_===1) { - this.state = 750; - this.match(SQLSelectParser.AS_SYMBOL); - - } - this.state = 755; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,76,this._ctx); - switch(la_) { - case 1: - this.state = 753; - this.identifier(); - break; - - case 2: - this.state = 754; - this.textStringLiteral(); - break; - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - whereClause() { - let localctx = new WhereClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 94, SQLSelectParser.RULE_whereClause); - try { - this.enterOuterAlt(localctx, 1); - this.state = 757; - this.match(SQLSelectParser.WHERE_SYMBOL); - this.state = 758; - this.expr(0); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - tableReference() { - let localctx = new TableReferenceContext(this, this._ctx, this.state); - this.enterRule(localctx, 96, SQLSelectParser.RULE_tableReference); - try { - this.enterOuterAlt(localctx, 1); - this.state = 769; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.OPEN_PAR_SYMBOL: - case SQLSelectParser.TINYINT_SYMBOL: - case SQLSelectParser.SMALLINT_SYMBOL: - case SQLSelectParser.MEDIUMINT_SYMBOL: - case SQLSelectParser.BYTE_INT_SYMBOL: - case SQLSelectParser.INT_SYMBOL: - case SQLSelectParser.BIGINT_SYMBOL: - case SQLSelectParser.SECOND_SYMBOL: - case SQLSelectParser.MINUTE_SYMBOL: - case SQLSelectParser.HOUR_SYMBOL: - case SQLSelectParser.DAY_SYMBOL: - case SQLSelectParser.WEEK_SYMBOL: - case SQLSelectParser.MONTH_SYMBOL: - case SQLSelectParser.QUARTER_SYMBOL: - case SQLSelectParser.YEAR_SYMBOL: - case SQLSelectParser.DEFAULT_SYMBOL: - case SQLSelectParser.UNION_SYMBOL: - case SQLSelectParser.SELECT_SYMBOL: - case SQLSelectParser.ALL_SYMBOL: - case SQLSelectParser.DISTINCT_SYMBOL: - case SQLSelectParser.STRAIGHT_JOIN_SYMBOL: - case SQLSelectParser.HIGH_PRIORITY_SYMBOL: - case SQLSelectParser.SQL_SMALL_RESULT_SYMBOL: - case SQLSelectParser.SQL_BIG_RESULT_SYMBOL: - case SQLSelectParser.SQL_BUFFER_RESULT_SYMBOL: - case SQLSelectParser.SQL_CALC_FOUND_ROWS_SYMBOL: - case SQLSelectParser.LIMIT_SYMBOL: - case SQLSelectParser.OFFSET_SYMBOL: - case SQLSelectParser.INTO_SYMBOL: - case SQLSelectParser.OUTFILE_SYMBOL: - case SQLSelectParser.DUMPFILE_SYMBOL: - case SQLSelectParser.PROCEDURE_SYMBOL: - case SQLSelectParser.ANALYSE_SYMBOL: - case SQLSelectParser.HAVING_SYMBOL: - case SQLSelectParser.WINDOW_SYMBOL: - case SQLSelectParser.AS_SYMBOL: - case SQLSelectParser.PARTITION_SYMBOL: - case SQLSelectParser.BY_SYMBOL: - case SQLSelectParser.ROWS_SYMBOL: - case SQLSelectParser.RANGE_SYMBOL: - case SQLSelectParser.GROUPS_SYMBOL: - case SQLSelectParser.UNBOUNDED_SYMBOL: - case SQLSelectParser.PRECEDING_SYMBOL: - case SQLSelectParser.INTERVAL_SYMBOL: - case SQLSelectParser.CURRENT_SYMBOL: - case SQLSelectParser.ROW_SYMBOL: - case SQLSelectParser.BETWEEN_SYMBOL: - case SQLSelectParser.AND_SYMBOL: - case SQLSelectParser.FOLLOWING_SYMBOL: - case SQLSelectParser.EXCLUDE_SYMBOL: - case SQLSelectParser.GROUP_SYMBOL: - case SQLSelectParser.TIES_SYMBOL: - case SQLSelectParser.NO_SYMBOL: - case SQLSelectParser.OTHERS_SYMBOL: - case SQLSelectParser.WITH_SYMBOL: - case SQLSelectParser.WITHOUT_SYMBOL: - case SQLSelectParser.RECURSIVE_SYMBOL: - case SQLSelectParser.ROLLUP_SYMBOL: - case SQLSelectParser.CUBE_SYMBOL: - case SQLSelectParser.ORDER_SYMBOL: - case SQLSelectParser.ASC_SYMBOL: - case SQLSelectParser.DESC_SYMBOL: - case SQLSelectParser.FROM_SYMBOL: - case SQLSelectParser.DUAL_SYMBOL: - case SQLSelectParser.VALUES_SYMBOL: - case SQLSelectParser.TABLE_SYMBOL: - case SQLSelectParser.SQL_NO_CACHE_SYMBOL: - case SQLSelectParser.SQL_CACHE_SYMBOL: - case SQLSelectParser.MAX_STATEMENT_TIME_SYMBOL: - case SQLSelectParser.FOR_SYMBOL: - case SQLSelectParser.OF_SYMBOL: - case SQLSelectParser.LOCK_SYMBOL: - case SQLSelectParser.IN_SYMBOL: - case SQLSelectParser.SHARE_SYMBOL: - case SQLSelectParser.MODE_SYMBOL: - case SQLSelectParser.UPDATE_SYMBOL: - case SQLSelectParser.SKIP_SYMBOL: - case SQLSelectParser.LOCKED_SYMBOL: - case SQLSelectParser.NOWAIT_SYMBOL: - case SQLSelectParser.WHERE_SYMBOL: - case SQLSelectParser.OJ_SYMBOL: - case SQLSelectParser.ON_SYMBOL: - case SQLSelectParser.USING_SYMBOL: - case SQLSelectParser.NATURAL_SYMBOL: - case SQLSelectParser.INNER_SYMBOL: - case SQLSelectParser.JOIN_SYMBOL: - case SQLSelectParser.LEFT_SYMBOL: - case SQLSelectParser.RIGHT_SYMBOL: - case SQLSelectParser.OUTER_SYMBOL: - case SQLSelectParser.CROSS_SYMBOL: - case SQLSelectParser.LATERAL_SYMBOL: - case SQLSelectParser.JSON_TABLE_SYMBOL: - case SQLSelectParser.COLUMNS_SYMBOL: - case SQLSelectParser.ORDINALITY_SYMBOL: - case SQLSelectParser.EXISTS_SYMBOL: - case SQLSelectParser.PATH_SYMBOL: - case SQLSelectParser.NESTED_SYMBOL: - case SQLSelectParser.EMPTY_SYMBOL: - case SQLSelectParser.ERROR_SYMBOL: - case SQLSelectParser.NULL_SYMBOL: - case SQLSelectParser.USE_SYMBOL: - case SQLSelectParser.FORCE_SYMBOL: - case SQLSelectParser.IGNORE_SYMBOL: - case SQLSelectParser.KEY_SYMBOL: - case SQLSelectParser.INDEX_SYMBOL: - case SQLSelectParser.PRIMARY_SYMBOL: - case SQLSelectParser.IS_SYMBOL: - case SQLSelectParser.TRUE_SYMBOL: - case SQLSelectParser.FALSE_SYMBOL: - case SQLSelectParser.UNKNOWN_SYMBOL: - case SQLSelectParser.NOT_SYMBOL: - case SQLSelectParser.XOR_SYMBOL: - case SQLSelectParser.OR_SYMBOL: - case SQLSelectParser.ANY_SYMBOL: - case SQLSelectParser.MEMBER_SYMBOL: - case SQLSelectParser.SOUNDS_SYMBOL: - case SQLSelectParser.LIKE_SYMBOL: - case SQLSelectParser.ESCAPE_SYMBOL: - case SQLSelectParser.REGEXP_SYMBOL: - case SQLSelectParser.DIV_SYMBOL: - case SQLSelectParser.MOD_SYMBOL: - case SQLSelectParser.MATCH_SYMBOL: - case SQLSelectParser.AGAINST_SYMBOL: - case SQLSelectParser.BINARY_SYMBOL: - case SQLSelectParser.CAST_SYMBOL: - case SQLSelectParser.ARRAY_SYMBOL: - case SQLSelectParser.CASE_SYMBOL: - case SQLSelectParser.END_SYMBOL: - case SQLSelectParser.CONVERT_SYMBOL: - case SQLSelectParser.COLLATE_SYMBOL: - case SQLSelectParser.AVG_SYMBOL: - case SQLSelectParser.BIT_AND_SYMBOL: - case SQLSelectParser.BIT_OR_SYMBOL: - case SQLSelectParser.BIT_XOR_SYMBOL: - case SQLSelectParser.COUNT_SYMBOL: - case SQLSelectParser.MIN_SYMBOL: - case SQLSelectParser.MAX_SYMBOL: - case SQLSelectParser.STD_SYMBOL: - case SQLSelectParser.VARIANCE_SYMBOL: - case SQLSelectParser.STDDEV_SAMP_SYMBOL: - case SQLSelectParser.VAR_SAMP_SYMBOL: - case SQLSelectParser.SUM_SYMBOL: - case SQLSelectParser.GROUP_CONCAT_SYMBOL: - case SQLSelectParser.SEPARATOR_SYMBOL: - case SQLSelectParser.GROUPING_SYMBOL: - case SQLSelectParser.ROW_NUMBER_SYMBOL: - case SQLSelectParser.RANK_SYMBOL: - case SQLSelectParser.DENSE_RANK_SYMBOL: - case SQLSelectParser.CUME_DIST_SYMBOL: - case SQLSelectParser.PERCENT_RANK_SYMBOL: - case SQLSelectParser.NTILE_SYMBOL: - case SQLSelectParser.LEAD_SYMBOL: - case SQLSelectParser.LAG_SYMBOL: - case SQLSelectParser.FIRST_VALUE_SYMBOL: - case SQLSelectParser.LAST_VALUE_SYMBOL: - case SQLSelectParser.NTH_VALUE_SYMBOL: - case SQLSelectParser.FIRST_SYMBOL: - case SQLSelectParser.LAST_SYMBOL: - case SQLSelectParser.OVER_SYMBOL: - case SQLSelectParser.RESPECT_SYMBOL: - case SQLSelectParser.NULLS_SYMBOL: - case SQLSelectParser.JSON_ARRAYAGG_SYMBOL: - case SQLSelectParser.JSON_OBJECTAGG_SYMBOL: - case SQLSelectParser.BOOLEAN_SYMBOL: - case SQLSelectParser.LANGUAGE_SYMBOL: - case SQLSelectParser.QUERY_SYMBOL: - case SQLSelectParser.EXPANSION_SYMBOL: - case SQLSelectParser.CHAR_SYMBOL: - case SQLSelectParser.CURRENT_USER_SYMBOL: - case SQLSelectParser.DATE_SYMBOL: - case SQLSelectParser.INSERT_SYMBOL: - case SQLSelectParser.TIME_SYMBOL: - case SQLSelectParser.TIMESTAMP_SYMBOL: - case SQLSelectParser.TIMESTAMP_LTZ_SYMBOL: - case SQLSelectParser.TIMESTAMP_NTZ_SYMBOL: - case SQLSelectParser.ZONE_SYMBOL: - case SQLSelectParser.USER_SYMBOL: - case SQLSelectParser.ADDDATE_SYMBOL: - case SQLSelectParser.SUBDATE_SYMBOL: - case SQLSelectParser.CURDATE_SYMBOL: - case SQLSelectParser.CURTIME_SYMBOL: - case SQLSelectParser.DATE_ADD_SYMBOL: - case SQLSelectParser.DATE_SUB_SYMBOL: - case SQLSelectParser.EXTRACT_SYMBOL: - case SQLSelectParser.GET_FORMAT_SYMBOL: - case SQLSelectParser.NOW_SYMBOL: - case SQLSelectParser.POSITION_SYMBOL: - case SQLSelectParser.SYSDATE_SYMBOL: - case SQLSelectParser.TIMESTAMP_ADD_SYMBOL: - case SQLSelectParser.TIMESTAMP_DIFF_SYMBOL: - case SQLSelectParser.UTC_DATE_SYMBOL: - case SQLSelectParser.UTC_TIME_SYMBOL: - case SQLSelectParser.UTC_TIMESTAMP_SYMBOL: - case SQLSelectParser.ASCII_SYMBOL: - case SQLSelectParser.CHARSET_SYMBOL: - case SQLSelectParser.COALESCE_SYMBOL: - case SQLSelectParser.COLLATION_SYMBOL: - case SQLSelectParser.DATABASE_SYMBOL: - case SQLSelectParser.IF_SYMBOL: - case SQLSelectParser.FORMAT_SYMBOL: - case SQLSelectParser.MICROSECOND_SYMBOL: - case SQLSelectParser.OLD_PASSWORD_SYMBOL: - case SQLSelectParser.PASSWORD_SYMBOL: - case SQLSelectParser.REPEAT_SYMBOL: - case SQLSelectParser.REPLACE_SYMBOL: - case SQLSelectParser.REVERSE_SYMBOL: - case SQLSelectParser.ROW_COUNT_SYMBOL: - case SQLSelectParser.TRUNCATE_SYMBOL: - case SQLSelectParser.WEIGHT_STRING_SYMBOL: - case SQLSelectParser.CONTAINS_SYMBOL: - case SQLSelectParser.GEOMETRYCOLLECTION_SYMBOL: - case SQLSelectParser.LINESTRING_SYMBOL: - case SQLSelectParser.MULTILINESTRING_SYMBOL: - case SQLSelectParser.MULTIPOINT_SYMBOL: - case SQLSelectParser.MULTIPOLYGON_SYMBOL: - case SQLSelectParser.POINT_SYMBOL: - case SQLSelectParser.POLYGON_SYMBOL: - case SQLSelectParser.LEVEL_SYMBOL: - case SQLSelectParser.DATETIME_SYMBOL: - case SQLSelectParser.TRIM_SYMBOL: - case SQLSelectParser.LEADING_SYMBOL: - case SQLSelectParser.TRAILING_SYMBOL: - case SQLSelectParser.BOTH_SYMBOL: - case SQLSelectParser.STRING_SYMBOL: - case SQLSelectParser.SUBSTRING_SYMBOL: - case SQLSelectParser.WHEN_SYMBOL: - case SQLSelectParser.THEN_SYMBOL: - case SQLSelectParser.ELSE_SYMBOL: - case SQLSelectParser.SIGNED_SYMBOL: - case SQLSelectParser.UNSIGNED_SYMBOL: - case SQLSelectParser.DECIMAL_SYMBOL: - case SQLSelectParser.JSON_SYMBOL: - case SQLSelectParser.FLOAT_SYMBOL: - case SQLSelectParser.FLOAT_SYMBOL_4: - case SQLSelectParser.FLOAT_SYMBOL_8: - case SQLSelectParser.SET_SYMBOL: - case SQLSelectParser.SECOND_MICROSECOND_SYMBOL: - case SQLSelectParser.MINUTE_MICROSECOND_SYMBOL: - case SQLSelectParser.MINUTE_SECOND_SYMBOL: - case SQLSelectParser.HOUR_MICROSECOND_SYMBOL: - case SQLSelectParser.HOUR_SECOND_SYMBOL: - case SQLSelectParser.HOUR_MINUTE_SYMBOL: - case SQLSelectParser.DAY_MICROSECOND_SYMBOL: - case SQLSelectParser.DAY_SECOND_SYMBOL: - case SQLSelectParser.DAY_MINUTE_SYMBOL: - case SQLSelectParser.DAY_HOUR_SYMBOL: - case SQLSelectParser.YEAR_MONTH_SYMBOL: - case SQLSelectParser.BTREE_SYMBOL: - case SQLSelectParser.RTREE_SYMBOL: - case SQLSelectParser.HASH_SYMBOL: - case SQLSelectParser.REAL_SYMBOL: - case SQLSelectParser.DOUBLE_SYMBOL: - case SQLSelectParser.PRECISION_SYMBOL: - case SQLSelectParser.NUMERIC_SYMBOL: - case SQLSelectParser.NUMBER_SYMBOL: - case SQLSelectParser.FIXED_SYMBOL: - case SQLSelectParser.BIT_SYMBOL: - case SQLSelectParser.BOOL_SYMBOL: - case SQLSelectParser.VARYING_SYMBOL: - case SQLSelectParser.VARCHAR_SYMBOL: - case SQLSelectParser.NATIONAL_SYMBOL: - case SQLSelectParser.NVARCHAR_SYMBOL: - case SQLSelectParser.NCHAR_SYMBOL: - case SQLSelectParser.VARBINARY_SYMBOL: - case SQLSelectParser.TINYBLOB_SYMBOL: - case SQLSelectParser.BLOB_SYMBOL: - case SQLSelectParser.MEDIUMBLOB_SYMBOL: - case SQLSelectParser.LONGBLOB_SYMBOL: - case SQLSelectParser.LONG_SYMBOL: - case SQLSelectParser.TINYTEXT_SYMBOL: - case SQLSelectParser.TEXT_SYMBOL: - case SQLSelectParser.MEDIUMTEXT_SYMBOL: - case SQLSelectParser.LONGTEXT_SYMBOL: - case SQLSelectParser.ENUM_SYMBOL: - case SQLSelectParser.SERIAL_SYMBOL: - case SQLSelectParser.GEOMETRY_SYMBOL: - case SQLSelectParser.ZEROFILL_SYMBOL: - case SQLSelectParser.BYTE_SYMBOL: - case SQLSelectParser.UNICODE_SYMBOL: - case SQLSelectParser.TERMINATED_SYMBOL: - case SQLSelectParser.OPTIONALLY_SYMBOL: - case SQLSelectParser.ENCLOSED_SYMBOL: - case SQLSelectParser.ESCAPED_SYMBOL: - case SQLSelectParser.LINES_SYMBOL: - case SQLSelectParser.STARTING_SYMBOL: - case SQLSelectParser.GLOBAL_SYMBOL: - case SQLSelectParser.LOCAL_SYMBOL: - case SQLSelectParser.SESSION_SYMBOL: - case SQLSelectParser.VARIANT_SYMBOL: - case SQLSelectParser.OBJECT_SYMBOL: - case SQLSelectParser.GEOGRAPHY_SYMBOL: - case SQLSelectParser.IDENTIFIER: - case SQLSelectParser.BACK_TICK_QUOTED_ID: - case SQLSelectParser.DOUBLE_QUOTED_TEXT: - case SQLSelectParser.SINGLE_QUOTED_TEXT: - case SQLSelectParser.BRACKET_QUOTED_TEXT: - this.state = 760; - this.tableFactor(); - break; - case SQLSelectParser.OPEN_CURLY_SYMBOL: - this.state = 761; - this.match(SQLSelectParser.OPEN_CURLY_SYMBOL); - this.state = 764; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,77,this._ctx); - switch(la_) { - case 1: - this.state = 762; - this.identifier(); - break; - - case 2: - this.state = 763; - this.match(SQLSelectParser.OJ_SYMBOL); - break; - - } - this.state = 766; - this.escapedTableReference(); - this.state = 767; - this.match(SQLSelectParser.CLOSE_CURLY_SYMBOL); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - this.state = 774; - this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,79,this._ctx) - while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { - if(_alt===1) { - this.state = 771; - this.joinedTable(); - } - this.state = 776; - this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,79,this._ctx); - } - - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - escapedTableReference() { - let localctx = new EscapedTableReferenceContext(this, this._ctx, this.state); - this.enterRule(localctx, 98, SQLSelectParser.RULE_escapedTableReference); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 777; - this.tableFactor(); - this.state = 781; - this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===SQLSelectParser.STRAIGHT_JOIN_SYMBOL || ((((_la - 129)) & ~0x1f) == 0 && ((1 << (_la - 129)) & ((1 << (SQLSelectParser.NATURAL_SYMBOL - 129)) | (1 << (SQLSelectParser.INNER_SYMBOL - 129)) | (1 << (SQLSelectParser.JOIN_SYMBOL - 129)) | (1 << (SQLSelectParser.LEFT_SYMBOL - 129)) | (1 << (SQLSelectParser.RIGHT_SYMBOL - 129)) | (1 << (SQLSelectParser.CROSS_SYMBOL - 129)))) !== 0)) { - this.state = 778; - this.joinedTable(); - this.state = 783; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - joinedTable() { - let localctx = new JoinedTableContext(this, this._ctx, this.state); - this.enterRule(localctx, 100, SQLSelectParser.RULE_joinedTable); - try { - this.state = 803; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.STRAIGHT_JOIN_SYMBOL: - case SQLSelectParser.INNER_SYMBOL: - case SQLSelectParser.JOIN_SYMBOL: - case SQLSelectParser.CROSS_SYMBOL: - this.enterOuterAlt(localctx, 1); - this.state = 784; - this.innerJoinType(); - this.state = 785; - this.tableReference(); - this.state = 790; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,81,this._ctx); - if(la_===1) { - this.state = 786; - this.match(SQLSelectParser.ON_SYMBOL); - this.state = 787; - this.expr(0); - - } else if(la_===2) { - this.state = 788; - this.match(SQLSelectParser.USING_SYMBOL); - this.state = 789; - this.identifierListWithParentheses(); - - } - break; - case SQLSelectParser.LEFT_SYMBOL: - case SQLSelectParser.RIGHT_SYMBOL: - this.enterOuterAlt(localctx, 2); - this.state = 792; - this.outerJoinType(); - this.state = 793; - this.tableReference(); - this.state = 798; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.ON_SYMBOL: - this.state = 794; - this.match(SQLSelectParser.ON_SYMBOL); - this.state = 795; - this.expr(0); - break; - case SQLSelectParser.USING_SYMBOL: - this.state = 796; - this.match(SQLSelectParser.USING_SYMBOL); - this.state = 797; - this.identifierListWithParentheses(); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - break; - case SQLSelectParser.NATURAL_SYMBOL: - this.enterOuterAlt(localctx, 3); - this.state = 800; - this.naturalJoinType(); - this.state = 801; - this.tableFactor(); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - naturalJoinType() { - let localctx = new NaturalJoinTypeContext(this, this._ctx, this.state); - this.enterRule(localctx, 102, SQLSelectParser.RULE_naturalJoinType); - var _la = 0; // Token type - try { - this.state = 816; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,86,this._ctx); - switch(la_) { - case 1: - this.enterOuterAlt(localctx, 1); - this.state = 805; - this.match(SQLSelectParser.NATURAL_SYMBOL); - this.state = 807; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.INNER_SYMBOL) { - this.state = 806; - this.match(SQLSelectParser.INNER_SYMBOL); - } - - this.state = 809; - this.match(SQLSelectParser.JOIN_SYMBOL); - break; - - case 2: - this.enterOuterAlt(localctx, 2); - this.state = 810; - this.match(SQLSelectParser.NATURAL_SYMBOL); - this.state = 811; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.LEFT_SYMBOL || _la===SQLSelectParser.RIGHT_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 813; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.OUTER_SYMBOL) { - this.state = 812; - this.match(SQLSelectParser.OUTER_SYMBOL); - } - - this.state = 815; - this.match(SQLSelectParser.JOIN_SYMBOL); - break; - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - innerJoinType() { - let localctx = new InnerJoinTypeContext(this, this._ctx, this.state); - this.enterRule(localctx, 104, SQLSelectParser.RULE_innerJoinType); - var _la = 0; // Token type - try { - this.state = 823; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.INNER_SYMBOL: - case SQLSelectParser.JOIN_SYMBOL: - case SQLSelectParser.CROSS_SYMBOL: - this.enterOuterAlt(localctx, 1); - this.state = 819; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.INNER_SYMBOL || _la===SQLSelectParser.CROSS_SYMBOL) { - this.state = 818; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.INNER_SYMBOL || _la===SQLSelectParser.CROSS_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - } - - this.state = 821; - this.match(SQLSelectParser.JOIN_SYMBOL); - break; - case SQLSelectParser.STRAIGHT_JOIN_SYMBOL: - this.enterOuterAlt(localctx, 2); - this.state = 822; - this.match(SQLSelectParser.STRAIGHT_JOIN_SYMBOL); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - outerJoinType() { - let localctx = new OuterJoinTypeContext(this, this._ctx, this.state); - this.enterRule(localctx, 106, SQLSelectParser.RULE_outerJoinType); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 825; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.LEFT_SYMBOL || _la===SQLSelectParser.RIGHT_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 827; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.OUTER_SYMBOL) { - this.state = 826; - this.match(SQLSelectParser.OUTER_SYMBOL); - } - - this.state = 829; - this.match(SQLSelectParser.JOIN_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - tableFactor() { - let localctx = new TableFactorContext(this, this._ctx, this.state); - this.enterRule(localctx, 108, SQLSelectParser.RULE_tableFactor); - try { - this.state = 836; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,90,this._ctx); - switch(la_) { - case 1: - this.enterOuterAlt(localctx, 1); - this.state = 831; - this.singleTable(); - break; - - case 2: - this.enterOuterAlt(localctx, 2); - this.state = 832; - this.singleTableParens(); - break; - - case 3: - this.enterOuterAlt(localctx, 3); - this.state = 833; - this.derivedTable(); - break; - - case 4: - this.enterOuterAlt(localctx, 4); - this.state = 834; - this.tableReferenceListParens(); - break; - - case 5: - this.enterOuterAlt(localctx, 5); - this.state = 835; - this.tableFunction(); - break; - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - singleTable() { - let localctx = new SingleTableContext(this, this._ctx, this.state); - this.enterRule(localctx, 110, SQLSelectParser.RULE_singleTable); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 838; - this.qualifiedIdentifier(); - this.state = 840; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,91,this._ctx); - if(la_===1) { - this.state = 839; - this.usePartition(); - - } - this.state = 843; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,92,this._ctx); - if(la_===1) { - this.state = 842; - this.tableAlias(); - - } - this.state = 846; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(((((_la - 146)) & ~0x1f) == 0 && ((1 << (_la - 146)) & ((1 << (SQLSelectParser.USE_SYMBOL - 146)) | (1 << (SQLSelectParser.FORCE_SYMBOL - 146)) | (1 << (SQLSelectParser.IGNORE_SYMBOL - 146)))) !== 0)) { - this.state = 845; - this.indexHintList(); - } - - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - singleTableParens() { - let localctx = new SingleTableParensContext(this, this._ctx, this.state); - this.enterRule(localctx, 112, SQLSelectParser.RULE_singleTableParens); - try { - this.enterOuterAlt(localctx, 1); - this.state = 848; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 851; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.TINYINT_SYMBOL: - case SQLSelectParser.SMALLINT_SYMBOL: - case SQLSelectParser.MEDIUMINT_SYMBOL: - case SQLSelectParser.BYTE_INT_SYMBOL: - case SQLSelectParser.INT_SYMBOL: - case SQLSelectParser.BIGINT_SYMBOL: - case SQLSelectParser.SECOND_SYMBOL: - case SQLSelectParser.MINUTE_SYMBOL: - case SQLSelectParser.HOUR_SYMBOL: - case SQLSelectParser.DAY_SYMBOL: - case SQLSelectParser.WEEK_SYMBOL: - case SQLSelectParser.MONTH_SYMBOL: - case SQLSelectParser.QUARTER_SYMBOL: - case SQLSelectParser.YEAR_SYMBOL: - case SQLSelectParser.DEFAULT_SYMBOL: - case SQLSelectParser.UNION_SYMBOL: - case SQLSelectParser.SELECT_SYMBOL: - case SQLSelectParser.ALL_SYMBOL: - case SQLSelectParser.DISTINCT_SYMBOL: - case SQLSelectParser.STRAIGHT_JOIN_SYMBOL: - case SQLSelectParser.HIGH_PRIORITY_SYMBOL: - case SQLSelectParser.SQL_SMALL_RESULT_SYMBOL: - case SQLSelectParser.SQL_BIG_RESULT_SYMBOL: - case SQLSelectParser.SQL_BUFFER_RESULT_SYMBOL: - case SQLSelectParser.SQL_CALC_FOUND_ROWS_SYMBOL: - case SQLSelectParser.LIMIT_SYMBOL: - case SQLSelectParser.OFFSET_SYMBOL: - case SQLSelectParser.INTO_SYMBOL: - case SQLSelectParser.OUTFILE_SYMBOL: - case SQLSelectParser.DUMPFILE_SYMBOL: - case SQLSelectParser.PROCEDURE_SYMBOL: - case SQLSelectParser.ANALYSE_SYMBOL: - case SQLSelectParser.HAVING_SYMBOL: - case SQLSelectParser.WINDOW_SYMBOL: - case SQLSelectParser.AS_SYMBOL: - case SQLSelectParser.PARTITION_SYMBOL: - case SQLSelectParser.BY_SYMBOL: - case SQLSelectParser.ROWS_SYMBOL: - case SQLSelectParser.RANGE_SYMBOL: - case SQLSelectParser.GROUPS_SYMBOL: - case SQLSelectParser.UNBOUNDED_SYMBOL: - case SQLSelectParser.PRECEDING_SYMBOL: - case SQLSelectParser.INTERVAL_SYMBOL: - case SQLSelectParser.CURRENT_SYMBOL: - case SQLSelectParser.ROW_SYMBOL: - case SQLSelectParser.BETWEEN_SYMBOL: - case SQLSelectParser.AND_SYMBOL: - case SQLSelectParser.FOLLOWING_SYMBOL: - case SQLSelectParser.EXCLUDE_SYMBOL: - case SQLSelectParser.GROUP_SYMBOL: - case SQLSelectParser.TIES_SYMBOL: - case SQLSelectParser.NO_SYMBOL: - case SQLSelectParser.OTHERS_SYMBOL: - case SQLSelectParser.WITH_SYMBOL: - case SQLSelectParser.WITHOUT_SYMBOL: - case SQLSelectParser.RECURSIVE_SYMBOL: - case SQLSelectParser.ROLLUP_SYMBOL: - case SQLSelectParser.CUBE_SYMBOL: - case SQLSelectParser.ORDER_SYMBOL: - case SQLSelectParser.ASC_SYMBOL: - case SQLSelectParser.DESC_SYMBOL: - case SQLSelectParser.FROM_SYMBOL: - case SQLSelectParser.DUAL_SYMBOL: - case SQLSelectParser.VALUES_SYMBOL: - case SQLSelectParser.TABLE_SYMBOL: - case SQLSelectParser.SQL_NO_CACHE_SYMBOL: - case SQLSelectParser.SQL_CACHE_SYMBOL: - case SQLSelectParser.MAX_STATEMENT_TIME_SYMBOL: - case SQLSelectParser.FOR_SYMBOL: - case SQLSelectParser.OF_SYMBOL: - case SQLSelectParser.LOCK_SYMBOL: - case SQLSelectParser.IN_SYMBOL: - case SQLSelectParser.SHARE_SYMBOL: - case SQLSelectParser.MODE_SYMBOL: - case SQLSelectParser.UPDATE_SYMBOL: - case SQLSelectParser.SKIP_SYMBOL: - case SQLSelectParser.LOCKED_SYMBOL: - case SQLSelectParser.NOWAIT_SYMBOL: - case SQLSelectParser.WHERE_SYMBOL: - case SQLSelectParser.OJ_SYMBOL: - case SQLSelectParser.ON_SYMBOL: - case SQLSelectParser.USING_SYMBOL: - case SQLSelectParser.NATURAL_SYMBOL: - case SQLSelectParser.INNER_SYMBOL: - case SQLSelectParser.JOIN_SYMBOL: - case SQLSelectParser.LEFT_SYMBOL: - case SQLSelectParser.RIGHT_SYMBOL: - case SQLSelectParser.OUTER_SYMBOL: - case SQLSelectParser.CROSS_SYMBOL: - case SQLSelectParser.LATERAL_SYMBOL: - case SQLSelectParser.JSON_TABLE_SYMBOL: - case SQLSelectParser.COLUMNS_SYMBOL: - case SQLSelectParser.ORDINALITY_SYMBOL: - case SQLSelectParser.EXISTS_SYMBOL: - case SQLSelectParser.PATH_SYMBOL: - case SQLSelectParser.NESTED_SYMBOL: - case SQLSelectParser.EMPTY_SYMBOL: - case SQLSelectParser.ERROR_SYMBOL: - case SQLSelectParser.NULL_SYMBOL: - case SQLSelectParser.USE_SYMBOL: - case SQLSelectParser.FORCE_SYMBOL: - case SQLSelectParser.IGNORE_SYMBOL: - case SQLSelectParser.KEY_SYMBOL: - case SQLSelectParser.INDEX_SYMBOL: - case SQLSelectParser.PRIMARY_SYMBOL: - case SQLSelectParser.IS_SYMBOL: - case SQLSelectParser.TRUE_SYMBOL: - case SQLSelectParser.FALSE_SYMBOL: - case SQLSelectParser.UNKNOWN_SYMBOL: - case SQLSelectParser.NOT_SYMBOL: - case SQLSelectParser.XOR_SYMBOL: - case SQLSelectParser.OR_SYMBOL: - case SQLSelectParser.ANY_SYMBOL: - case SQLSelectParser.MEMBER_SYMBOL: - case SQLSelectParser.SOUNDS_SYMBOL: - case SQLSelectParser.LIKE_SYMBOL: - case SQLSelectParser.ESCAPE_SYMBOL: - case SQLSelectParser.REGEXP_SYMBOL: - case SQLSelectParser.DIV_SYMBOL: - case SQLSelectParser.MOD_SYMBOL: - case SQLSelectParser.MATCH_SYMBOL: - case SQLSelectParser.AGAINST_SYMBOL: - case SQLSelectParser.BINARY_SYMBOL: - case SQLSelectParser.CAST_SYMBOL: - case SQLSelectParser.ARRAY_SYMBOL: - case SQLSelectParser.CASE_SYMBOL: - case SQLSelectParser.END_SYMBOL: - case SQLSelectParser.CONVERT_SYMBOL: - case SQLSelectParser.COLLATE_SYMBOL: - case SQLSelectParser.AVG_SYMBOL: - case SQLSelectParser.BIT_AND_SYMBOL: - case SQLSelectParser.BIT_OR_SYMBOL: - case SQLSelectParser.BIT_XOR_SYMBOL: - case SQLSelectParser.COUNT_SYMBOL: - case SQLSelectParser.MIN_SYMBOL: - case SQLSelectParser.MAX_SYMBOL: - case SQLSelectParser.STD_SYMBOL: - case SQLSelectParser.VARIANCE_SYMBOL: - case SQLSelectParser.STDDEV_SAMP_SYMBOL: - case SQLSelectParser.VAR_SAMP_SYMBOL: - case SQLSelectParser.SUM_SYMBOL: - case SQLSelectParser.GROUP_CONCAT_SYMBOL: - case SQLSelectParser.SEPARATOR_SYMBOL: - case SQLSelectParser.GROUPING_SYMBOL: - case SQLSelectParser.ROW_NUMBER_SYMBOL: - case SQLSelectParser.RANK_SYMBOL: - case SQLSelectParser.DENSE_RANK_SYMBOL: - case SQLSelectParser.CUME_DIST_SYMBOL: - case SQLSelectParser.PERCENT_RANK_SYMBOL: - case SQLSelectParser.NTILE_SYMBOL: - case SQLSelectParser.LEAD_SYMBOL: - case SQLSelectParser.LAG_SYMBOL: - case SQLSelectParser.FIRST_VALUE_SYMBOL: - case SQLSelectParser.LAST_VALUE_SYMBOL: - case SQLSelectParser.NTH_VALUE_SYMBOL: - case SQLSelectParser.FIRST_SYMBOL: - case SQLSelectParser.LAST_SYMBOL: - case SQLSelectParser.OVER_SYMBOL: - case SQLSelectParser.RESPECT_SYMBOL: - case SQLSelectParser.NULLS_SYMBOL: - case SQLSelectParser.JSON_ARRAYAGG_SYMBOL: - case SQLSelectParser.JSON_OBJECTAGG_SYMBOL: - case SQLSelectParser.BOOLEAN_SYMBOL: - case SQLSelectParser.LANGUAGE_SYMBOL: - case SQLSelectParser.QUERY_SYMBOL: - case SQLSelectParser.EXPANSION_SYMBOL: - case SQLSelectParser.CHAR_SYMBOL: - case SQLSelectParser.CURRENT_USER_SYMBOL: - case SQLSelectParser.DATE_SYMBOL: - case SQLSelectParser.INSERT_SYMBOL: - case SQLSelectParser.TIME_SYMBOL: - case SQLSelectParser.TIMESTAMP_SYMBOL: - case SQLSelectParser.TIMESTAMP_LTZ_SYMBOL: - case SQLSelectParser.TIMESTAMP_NTZ_SYMBOL: - case SQLSelectParser.ZONE_SYMBOL: - case SQLSelectParser.USER_SYMBOL: - case SQLSelectParser.ADDDATE_SYMBOL: - case SQLSelectParser.SUBDATE_SYMBOL: - case SQLSelectParser.CURDATE_SYMBOL: - case SQLSelectParser.CURTIME_SYMBOL: - case SQLSelectParser.DATE_ADD_SYMBOL: - case SQLSelectParser.DATE_SUB_SYMBOL: - case SQLSelectParser.EXTRACT_SYMBOL: - case SQLSelectParser.GET_FORMAT_SYMBOL: - case SQLSelectParser.NOW_SYMBOL: - case SQLSelectParser.POSITION_SYMBOL: - case SQLSelectParser.SYSDATE_SYMBOL: - case SQLSelectParser.TIMESTAMP_ADD_SYMBOL: - case SQLSelectParser.TIMESTAMP_DIFF_SYMBOL: - case SQLSelectParser.UTC_DATE_SYMBOL: - case SQLSelectParser.UTC_TIME_SYMBOL: - case SQLSelectParser.UTC_TIMESTAMP_SYMBOL: - case SQLSelectParser.ASCII_SYMBOL: - case SQLSelectParser.CHARSET_SYMBOL: - case SQLSelectParser.COALESCE_SYMBOL: - case SQLSelectParser.COLLATION_SYMBOL: - case SQLSelectParser.DATABASE_SYMBOL: - case SQLSelectParser.IF_SYMBOL: - case SQLSelectParser.FORMAT_SYMBOL: - case SQLSelectParser.MICROSECOND_SYMBOL: - case SQLSelectParser.OLD_PASSWORD_SYMBOL: - case SQLSelectParser.PASSWORD_SYMBOL: - case SQLSelectParser.REPEAT_SYMBOL: - case SQLSelectParser.REPLACE_SYMBOL: - case SQLSelectParser.REVERSE_SYMBOL: - case SQLSelectParser.ROW_COUNT_SYMBOL: - case SQLSelectParser.TRUNCATE_SYMBOL: - case SQLSelectParser.WEIGHT_STRING_SYMBOL: - case SQLSelectParser.CONTAINS_SYMBOL: - case SQLSelectParser.GEOMETRYCOLLECTION_SYMBOL: - case SQLSelectParser.LINESTRING_SYMBOL: - case SQLSelectParser.MULTILINESTRING_SYMBOL: - case SQLSelectParser.MULTIPOINT_SYMBOL: - case SQLSelectParser.MULTIPOLYGON_SYMBOL: - case SQLSelectParser.POINT_SYMBOL: - case SQLSelectParser.POLYGON_SYMBOL: - case SQLSelectParser.LEVEL_SYMBOL: - case SQLSelectParser.DATETIME_SYMBOL: - case SQLSelectParser.TRIM_SYMBOL: - case SQLSelectParser.LEADING_SYMBOL: - case SQLSelectParser.TRAILING_SYMBOL: - case SQLSelectParser.BOTH_SYMBOL: - case SQLSelectParser.STRING_SYMBOL: - case SQLSelectParser.SUBSTRING_SYMBOL: - case SQLSelectParser.WHEN_SYMBOL: - case SQLSelectParser.THEN_SYMBOL: - case SQLSelectParser.ELSE_SYMBOL: - case SQLSelectParser.SIGNED_SYMBOL: - case SQLSelectParser.UNSIGNED_SYMBOL: - case SQLSelectParser.DECIMAL_SYMBOL: - case SQLSelectParser.JSON_SYMBOL: - case SQLSelectParser.FLOAT_SYMBOL: - case SQLSelectParser.FLOAT_SYMBOL_4: - case SQLSelectParser.FLOAT_SYMBOL_8: - case SQLSelectParser.SET_SYMBOL: - case SQLSelectParser.SECOND_MICROSECOND_SYMBOL: - case SQLSelectParser.MINUTE_MICROSECOND_SYMBOL: - case SQLSelectParser.MINUTE_SECOND_SYMBOL: - case SQLSelectParser.HOUR_MICROSECOND_SYMBOL: - case SQLSelectParser.HOUR_SECOND_SYMBOL: - case SQLSelectParser.HOUR_MINUTE_SYMBOL: - case SQLSelectParser.DAY_MICROSECOND_SYMBOL: - case SQLSelectParser.DAY_SECOND_SYMBOL: - case SQLSelectParser.DAY_MINUTE_SYMBOL: - case SQLSelectParser.DAY_HOUR_SYMBOL: - case SQLSelectParser.YEAR_MONTH_SYMBOL: - case SQLSelectParser.BTREE_SYMBOL: - case SQLSelectParser.RTREE_SYMBOL: - case SQLSelectParser.HASH_SYMBOL: - case SQLSelectParser.REAL_SYMBOL: - case SQLSelectParser.DOUBLE_SYMBOL: - case SQLSelectParser.PRECISION_SYMBOL: - case SQLSelectParser.NUMERIC_SYMBOL: - case SQLSelectParser.NUMBER_SYMBOL: - case SQLSelectParser.FIXED_SYMBOL: - case SQLSelectParser.BIT_SYMBOL: - case SQLSelectParser.BOOL_SYMBOL: - case SQLSelectParser.VARYING_SYMBOL: - case SQLSelectParser.VARCHAR_SYMBOL: - case SQLSelectParser.NATIONAL_SYMBOL: - case SQLSelectParser.NVARCHAR_SYMBOL: - case SQLSelectParser.NCHAR_SYMBOL: - case SQLSelectParser.VARBINARY_SYMBOL: - case SQLSelectParser.TINYBLOB_SYMBOL: - case SQLSelectParser.BLOB_SYMBOL: - case SQLSelectParser.MEDIUMBLOB_SYMBOL: - case SQLSelectParser.LONGBLOB_SYMBOL: - case SQLSelectParser.LONG_SYMBOL: - case SQLSelectParser.TINYTEXT_SYMBOL: - case SQLSelectParser.TEXT_SYMBOL: - case SQLSelectParser.MEDIUMTEXT_SYMBOL: - case SQLSelectParser.LONGTEXT_SYMBOL: - case SQLSelectParser.ENUM_SYMBOL: - case SQLSelectParser.SERIAL_SYMBOL: - case SQLSelectParser.GEOMETRY_SYMBOL: - case SQLSelectParser.ZEROFILL_SYMBOL: - case SQLSelectParser.BYTE_SYMBOL: - case SQLSelectParser.UNICODE_SYMBOL: - case SQLSelectParser.TERMINATED_SYMBOL: - case SQLSelectParser.OPTIONALLY_SYMBOL: - case SQLSelectParser.ENCLOSED_SYMBOL: - case SQLSelectParser.ESCAPED_SYMBOL: - case SQLSelectParser.LINES_SYMBOL: - case SQLSelectParser.STARTING_SYMBOL: - case SQLSelectParser.GLOBAL_SYMBOL: - case SQLSelectParser.LOCAL_SYMBOL: - case SQLSelectParser.SESSION_SYMBOL: - case SQLSelectParser.VARIANT_SYMBOL: - case SQLSelectParser.OBJECT_SYMBOL: - case SQLSelectParser.GEOGRAPHY_SYMBOL: - case SQLSelectParser.IDENTIFIER: - case SQLSelectParser.BACK_TICK_QUOTED_ID: - case SQLSelectParser.DOUBLE_QUOTED_TEXT: - case SQLSelectParser.SINGLE_QUOTED_TEXT: - case SQLSelectParser.BRACKET_QUOTED_TEXT: - this.state = 849; - this.singleTable(); - break; - case SQLSelectParser.OPEN_PAR_SYMBOL: - this.state = 850; - this.singleTableParens(); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - this.state = 853; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - derivedTable() { - let localctx = new DerivedTableContext(this, this._ctx, this.state); - this.enterRule(localctx, 114, SQLSelectParser.RULE_derivedTable); - var _la = 0; // Token type - try { - this.state = 870; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.OPEN_PAR_SYMBOL: - case SQLSelectParser.SELECT_SYMBOL: - case SQLSelectParser.WITH_SYMBOL: - case SQLSelectParser.VALUES_SYMBOL: - case SQLSelectParser.TABLE_SYMBOL: - case SQLSelectParser.FOR_SYMBOL: - case SQLSelectParser.LOCK_SYMBOL: - this.enterOuterAlt(localctx, 1); - this.state = 855; - this.subquery(); - this.state = 857; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,95,this._ctx); - if(la_===1) { - this.state = 856; - this.tableAlias(); - - } - this.state = 860; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.OPEN_PAR_SYMBOL) { - this.state = 859; - this.columnInternalRefList(); - } - - break; - case SQLSelectParser.LATERAL_SYMBOL: - this.enterOuterAlt(localctx, 2); - this.state = 862; - this.match(SQLSelectParser.LATERAL_SYMBOL); - this.state = 863; - this.subquery(); - this.state = 865; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,97,this._ctx); - if(la_===1) { - this.state = 864; - this.tableAlias(); - - } - this.state = 868; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.OPEN_PAR_SYMBOL) { - this.state = 867; - this.columnInternalRefList(); - } - - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - tableReferenceListParens() { - let localctx = new TableReferenceListParensContext(this, this._ctx, this.state); - this.enterRule(localctx, 116, SQLSelectParser.RULE_tableReferenceListParens); - try { - this.enterOuterAlt(localctx, 1); - this.state = 872; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 875; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,100,this._ctx); - switch(la_) { - case 1: - this.state = 873; - this.tableReferenceList(); - break; - - case 2: - this.state = 874; - this.tableReferenceListParens(); - break; - - } - this.state = 877; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - tableFunction() { - let localctx = new TableFunctionContext(this, this._ctx, this.state); - this.enterRule(localctx, 118, SQLSelectParser.RULE_tableFunction); - try { - this.enterOuterAlt(localctx, 1); - this.state = 879; - this.match(SQLSelectParser.JSON_TABLE_SYMBOL); - this.state = 880; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 881; - this.expr(0); - this.state = 882; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 883; - this.textStringLiteral(); - this.state = 884; - this.columnsClause(); - this.state = 885; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - this.state = 887; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,101,this._ctx); - if(la_===1) { - this.state = 886; - this.tableAlias(); - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - columnsClause() { - let localctx = new ColumnsClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 120, SQLSelectParser.RULE_columnsClause); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 889; - this.match(SQLSelectParser.COLUMNS_SYMBOL); - this.state = 890; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 891; - this.jtColumn(); - this.state = 896; - this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===SQLSelectParser.COMMA_SYMBOL) { - this.state = 892; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 893; - this.jtColumn(); - this.state = 898; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 899; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - jtColumn() { - let localctx = new JtColumnContext(this, this._ctx, this.state); - this.enterRule(localctx, 122, SQLSelectParser.RULE_jtColumn); - var _la = 0; // Token type - try { - this.state = 923; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,106,this._ctx); - switch(la_) { - case 1: - this.enterOuterAlt(localctx, 1); - this.state = 901; - this.identifier(); - this.state = 902; - this.match(SQLSelectParser.FOR_SYMBOL); - this.state = 903; - this.match(SQLSelectParser.ORDINALITY_SYMBOL); - break; - - case 2: - this.enterOuterAlt(localctx, 2); - this.state = 905; - this.identifier(); - this.state = 906; - this.dataType(); - this.state = 908; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.COLLATE_SYMBOL) { - this.state = 907; - this.collate(); - } - - this.state = 911; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.EXISTS_SYMBOL) { - this.state = 910; - this.match(SQLSelectParser.EXISTS_SYMBOL); - } - - this.state = 913; - this.match(SQLSelectParser.PATH_SYMBOL); - this.state = 914; - this.textStringLiteral(); - this.state = 916; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.DEFAULT_SYMBOL || _la===SQLSelectParser.ERROR_SYMBOL || _la===SQLSelectParser.NULL_SYMBOL) { - this.state = 915; - this.onEmptyOrError(); - } - - break; - - case 3: - this.enterOuterAlt(localctx, 3); - this.state = 918; - this.match(SQLSelectParser.NESTED_SYMBOL); - this.state = 919; - this.match(SQLSelectParser.PATH_SYMBOL); - this.state = 920; - this.textStringLiteral(); - this.state = 921; - this.columnsClause(); - break; - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - onEmptyOrError() { - let localctx = new OnEmptyOrErrorContext(this, this._ctx, this.state); - this.enterRule(localctx, 124, SQLSelectParser.RULE_onEmptyOrError); - var _la = 0; // Token type - try { - this.state = 933; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,109,this._ctx); - switch(la_) { - case 1: - this.enterOuterAlt(localctx, 1); - this.state = 925; - this.onEmpty(); - this.state = 927; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.DEFAULT_SYMBOL || _la===SQLSelectParser.ERROR_SYMBOL || _la===SQLSelectParser.NULL_SYMBOL) { - this.state = 926; - this.onError(); - } - - break; - - case 2: - this.enterOuterAlt(localctx, 2); - this.state = 929; - this.onError(); - this.state = 931; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.DEFAULT_SYMBOL || _la===SQLSelectParser.ERROR_SYMBOL || _la===SQLSelectParser.NULL_SYMBOL) { - this.state = 930; - this.onEmpty(); - } - - break; - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - onEmpty() { - let localctx = new OnEmptyContext(this, this._ctx, this.state); - this.enterRule(localctx, 126, SQLSelectParser.RULE_onEmpty); - try { - this.enterOuterAlt(localctx, 1); - this.state = 935; - this.jtOnResponse(); - this.state = 936; - this.match(SQLSelectParser.ON_SYMBOL); - this.state = 937; - this.match(SQLSelectParser.EMPTY_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - onError() { - let localctx = new OnErrorContext(this, this._ctx, this.state); - this.enterRule(localctx, 128, SQLSelectParser.RULE_onError); - try { - this.enterOuterAlt(localctx, 1); - this.state = 939; - this.jtOnResponse(); - this.state = 940; - this.match(SQLSelectParser.ON_SYMBOL); - this.state = 941; - this.match(SQLSelectParser.ERROR_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - jtOnResponse() { - let localctx = new JtOnResponseContext(this, this._ctx, this.state); - this.enterRule(localctx, 130, SQLSelectParser.RULE_jtOnResponse); - try { - this.state = 947; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.ERROR_SYMBOL: - this.enterOuterAlt(localctx, 1); - this.state = 943; - this.match(SQLSelectParser.ERROR_SYMBOL); - break; - case SQLSelectParser.NULL_SYMBOL: - this.enterOuterAlt(localctx, 2); - this.state = 944; - this.match(SQLSelectParser.NULL_SYMBOL); - break; - case SQLSelectParser.DEFAULT_SYMBOL: - this.enterOuterAlt(localctx, 3); - this.state = 945; - this.match(SQLSelectParser.DEFAULT_SYMBOL); - this.state = 946; - this.textStringLiteral(); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - unionOption() { - let localctx = new UnionOptionContext(this, this._ctx, this.state); - this.enterRule(localctx, 132, SQLSelectParser.RULE_unionOption); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 949; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.ALL_SYMBOL || _la===SQLSelectParser.DISTINCT_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - tableAlias() { - let localctx = new TableAliasContext(this, this._ctx, this.state); - this.enterRule(localctx, 134, SQLSelectParser.RULE_tableAlias); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 952; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,111,this._ctx); - if(la_===1) { - this.state = 951; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.EQUAL_OPERATOR || _la===SQLSelectParser.AS_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - - } - this.state = 954; - this.identifier(); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - indexHintList() { - let localctx = new IndexHintListContext(this, this._ctx, this.state); - this.enterRule(localctx, 136, SQLSelectParser.RULE_indexHintList); - try { - this.enterOuterAlt(localctx, 1); - this.state = 956; - this.indexHint(); - this.state = 961; - this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,112,this._ctx) - while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { - if(_alt===1) { - this.state = 957; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 958; - this.indexHint(); - } - this.state = 963; - this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,112,this._ctx); - } - - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - indexHint() { - let localctx = new IndexHintContext(this, this._ctx, this.state); - this.enterRule(localctx, 138, SQLSelectParser.RULE_indexHint); - var _la = 0; // Token type - try { - this.state = 984; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.FORCE_SYMBOL: - case SQLSelectParser.IGNORE_SYMBOL: - this.enterOuterAlt(localctx, 1); - this.state = 964; - this.indexHintType(); - this.state = 965; - this.keyOrIndex(); - this.state = 967; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.FOR_SYMBOL) { - this.state = 966; - this.indexHintClause(); - } - - this.state = 969; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 970; - this.indexList(); - this.state = 971; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - case SQLSelectParser.USE_SYMBOL: - this.enterOuterAlt(localctx, 2); - this.state = 973; - this.match(SQLSelectParser.USE_SYMBOL); - this.state = 974; - this.keyOrIndex(); - this.state = 976; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.FOR_SYMBOL) { - this.state = 975; - this.indexHintClause(); - } - - this.state = 978; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 980; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(((((_la - 47)) & ~0x1f) == 0 && ((1 << (_la - 47)) & ((1 << (SQLSelectParser.TINYINT_SYMBOL - 47)) | (1 << (SQLSelectParser.SMALLINT_SYMBOL - 47)) | (1 << (SQLSelectParser.MEDIUMINT_SYMBOL - 47)) | (1 << (SQLSelectParser.BYTE_INT_SYMBOL - 47)) | (1 << (SQLSelectParser.INT_SYMBOL - 47)) | (1 << (SQLSelectParser.BIGINT_SYMBOL - 47)) | (1 << (SQLSelectParser.SECOND_SYMBOL - 47)) | (1 << (SQLSelectParser.MINUTE_SYMBOL - 47)) | (1 << (SQLSelectParser.HOUR_SYMBOL - 47)) | (1 << (SQLSelectParser.DAY_SYMBOL - 47)) | (1 << (SQLSelectParser.WEEK_SYMBOL - 47)) | (1 << (SQLSelectParser.MONTH_SYMBOL - 47)) | (1 << (SQLSelectParser.QUARTER_SYMBOL - 47)) | (1 << (SQLSelectParser.YEAR_SYMBOL - 47)) | (1 << (SQLSelectParser.DEFAULT_SYMBOL - 47)) | (1 << (SQLSelectParser.UNION_SYMBOL - 47)) | (1 << (SQLSelectParser.SELECT_SYMBOL - 47)) | (1 << (SQLSelectParser.ALL_SYMBOL - 47)) | (1 << (SQLSelectParser.DISTINCT_SYMBOL - 47)) | (1 << (SQLSelectParser.STRAIGHT_JOIN_SYMBOL - 47)) | (1 << (SQLSelectParser.HIGH_PRIORITY_SYMBOL - 47)) | (1 << (SQLSelectParser.SQL_SMALL_RESULT_SYMBOL - 47)) | (1 << (SQLSelectParser.SQL_BIG_RESULT_SYMBOL - 47)) | (1 << (SQLSelectParser.SQL_BUFFER_RESULT_SYMBOL - 47)) | (1 << (SQLSelectParser.SQL_CALC_FOUND_ROWS_SYMBOL - 47)) | (1 << (SQLSelectParser.LIMIT_SYMBOL - 47)) | (1 << (SQLSelectParser.OFFSET_SYMBOL - 47)) | (1 << (SQLSelectParser.INTO_SYMBOL - 47)) | (1 << (SQLSelectParser.OUTFILE_SYMBOL - 47)) | (1 << (SQLSelectParser.DUMPFILE_SYMBOL - 47)) | (1 << (SQLSelectParser.PROCEDURE_SYMBOL - 47)) | (1 << (SQLSelectParser.ANALYSE_SYMBOL - 47)))) !== 0) || ((((_la - 79)) & ~0x1f) == 0 && ((1 << (_la - 79)) & ((1 << (SQLSelectParser.HAVING_SYMBOL - 79)) | (1 << (SQLSelectParser.WINDOW_SYMBOL - 79)) | (1 << (SQLSelectParser.AS_SYMBOL - 79)) | (1 << (SQLSelectParser.PARTITION_SYMBOL - 79)) | (1 << (SQLSelectParser.BY_SYMBOL - 79)) | (1 << (SQLSelectParser.ROWS_SYMBOL - 79)) | (1 << (SQLSelectParser.RANGE_SYMBOL - 79)) | (1 << (SQLSelectParser.GROUPS_SYMBOL - 79)) | (1 << (SQLSelectParser.UNBOUNDED_SYMBOL - 79)) | (1 << (SQLSelectParser.PRECEDING_SYMBOL - 79)) | (1 << (SQLSelectParser.INTERVAL_SYMBOL - 79)) | (1 << (SQLSelectParser.CURRENT_SYMBOL - 79)) | (1 << (SQLSelectParser.ROW_SYMBOL - 79)) | (1 << (SQLSelectParser.BETWEEN_SYMBOL - 79)) | (1 << (SQLSelectParser.AND_SYMBOL - 79)) | (1 << (SQLSelectParser.FOLLOWING_SYMBOL - 79)) | (1 << (SQLSelectParser.EXCLUDE_SYMBOL - 79)) | (1 << (SQLSelectParser.GROUP_SYMBOL - 79)) | (1 << (SQLSelectParser.TIES_SYMBOL - 79)) | (1 << (SQLSelectParser.NO_SYMBOL - 79)) | (1 << (SQLSelectParser.OTHERS_SYMBOL - 79)) | (1 << (SQLSelectParser.WITH_SYMBOL - 79)) | (1 << (SQLSelectParser.WITHOUT_SYMBOL - 79)) | (1 << (SQLSelectParser.RECURSIVE_SYMBOL - 79)) | (1 << (SQLSelectParser.ROLLUP_SYMBOL - 79)) | (1 << (SQLSelectParser.CUBE_SYMBOL - 79)) | (1 << (SQLSelectParser.ORDER_SYMBOL - 79)) | (1 << (SQLSelectParser.ASC_SYMBOL - 79)) | (1 << (SQLSelectParser.DESC_SYMBOL - 79)) | (1 << (SQLSelectParser.FROM_SYMBOL - 79)) | (1 << (SQLSelectParser.DUAL_SYMBOL - 79)) | (1 << (SQLSelectParser.VALUES_SYMBOL - 79)))) !== 0) || ((((_la - 111)) & ~0x1f) == 0 && ((1 << (_la - 111)) & ((1 << (SQLSelectParser.TABLE_SYMBOL - 111)) | (1 << (SQLSelectParser.SQL_NO_CACHE_SYMBOL - 111)) | (1 << (SQLSelectParser.SQL_CACHE_SYMBOL - 111)) | (1 << (SQLSelectParser.MAX_STATEMENT_TIME_SYMBOL - 111)) | (1 << (SQLSelectParser.FOR_SYMBOL - 111)) | (1 << (SQLSelectParser.OF_SYMBOL - 111)) | (1 << (SQLSelectParser.LOCK_SYMBOL - 111)) | (1 << (SQLSelectParser.IN_SYMBOL - 111)) | (1 << (SQLSelectParser.SHARE_SYMBOL - 111)) | (1 << (SQLSelectParser.MODE_SYMBOL - 111)) | (1 << (SQLSelectParser.UPDATE_SYMBOL - 111)) | (1 << (SQLSelectParser.SKIP_SYMBOL - 111)) | (1 << (SQLSelectParser.LOCKED_SYMBOL - 111)) | (1 << (SQLSelectParser.NOWAIT_SYMBOL - 111)) | (1 << (SQLSelectParser.WHERE_SYMBOL - 111)) | (1 << (SQLSelectParser.OJ_SYMBOL - 111)) | (1 << (SQLSelectParser.ON_SYMBOL - 111)) | (1 << (SQLSelectParser.USING_SYMBOL - 111)) | (1 << (SQLSelectParser.NATURAL_SYMBOL - 111)) | (1 << (SQLSelectParser.INNER_SYMBOL - 111)) | (1 << (SQLSelectParser.JOIN_SYMBOL - 111)) | (1 << (SQLSelectParser.LEFT_SYMBOL - 111)) | (1 << (SQLSelectParser.RIGHT_SYMBOL - 111)) | (1 << (SQLSelectParser.OUTER_SYMBOL - 111)) | (1 << (SQLSelectParser.CROSS_SYMBOL - 111)) | (1 << (SQLSelectParser.LATERAL_SYMBOL - 111)) | (1 << (SQLSelectParser.JSON_TABLE_SYMBOL - 111)) | (1 << (SQLSelectParser.COLUMNS_SYMBOL - 111)) | (1 << (SQLSelectParser.ORDINALITY_SYMBOL - 111)) | (1 << (SQLSelectParser.EXISTS_SYMBOL - 111)) | (1 << (SQLSelectParser.PATH_SYMBOL - 111)) | (1 << (SQLSelectParser.NESTED_SYMBOL - 111)))) !== 0) || ((((_la - 143)) & ~0x1f) == 0 && ((1 << (_la - 143)) & ((1 << (SQLSelectParser.EMPTY_SYMBOL - 143)) | (1 << (SQLSelectParser.ERROR_SYMBOL - 143)) | (1 << (SQLSelectParser.NULL_SYMBOL - 143)) | (1 << (SQLSelectParser.USE_SYMBOL - 143)) | (1 << (SQLSelectParser.FORCE_SYMBOL - 143)) | (1 << (SQLSelectParser.IGNORE_SYMBOL - 143)) | (1 << (SQLSelectParser.KEY_SYMBOL - 143)) | (1 << (SQLSelectParser.INDEX_SYMBOL - 143)) | (1 << (SQLSelectParser.PRIMARY_SYMBOL - 143)) | (1 << (SQLSelectParser.IS_SYMBOL - 143)) | (1 << (SQLSelectParser.TRUE_SYMBOL - 143)) | (1 << (SQLSelectParser.FALSE_SYMBOL - 143)) | (1 << (SQLSelectParser.UNKNOWN_SYMBOL - 143)) | (1 << (SQLSelectParser.NOT_SYMBOL - 143)) | (1 << (SQLSelectParser.XOR_SYMBOL - 143)) | (1 << (SQLSelectParser.OR_SYMBOL - 143)) | (1 << (SQLSelectParser.ANY_SYMBOL - 143)) | (1 << (SQLSelectParser.MEMBER_SYMBOL - 143)) | (1 << (SQLSelectParser.SOUNDS_SYMBOL - 143)) | (1 << (SQLSelectParser.LIKE_SYMBOL - 143)) | (1 << (SQLSelectParser.ESCAPE_SYMBOL - 143)) | (1 << (SQLSelectParser.REGEXP_SYMBOL - 143)) | (1 << (SQLSelectParser.DIV_SYMBOL - 143)) | (1 << (SQLSelectParser.MOD_SYMBOL - 143)) | (1 << (SQLSelectParser.MATCH_SYMBOL - 143)) | (1 << (SQLSelectParser.AGAINST_SYMBOL - 143)) | (1 << (SQLSelectParser.BINARY_SYMBOL - 143)) | (1 << (SQLSelectParser.CAST_SYMBOL - 143)) | (1 << (SQLSelectParser.ARRAY_SYMBOL - 143)) | (1 << (SQLSelectParser.CASE_SYMBOL - 143)) | (1 << (SQLSelectParser.END_SYMBOL - 143)) | (1 << (SQLSelectParser.CONVERT_SYMBOL - 143)))) !== 0) || ((((_la - 175)) & ~0x1f) == 0 && ((1 << (_la - 175)) & ((1 << (SQLSelectParser.COLLATE_SYMBOL - 175)) | (1 << (SQLSelectParser.AVG_SYMBOL - 175)) | (1 << (SQLSelectParser.BIT_AND_SYMBOL - 175)) | (1 << (SQLSelectParser.BIT_OR_SYMBOL - 175)) | (1 << (SQLSelectParser.BIT_XOR_SYMBOL - 175)) | (1 << (SQLSelectParser.COUNT_SYMBOL - 175)) | (1 << (SQLSelectParser.MIN_SYMBOL - 175)) | (1 << (SQLSelectParser.MAX_SYMBOL - 175)) | (1 << (SQLSelectParser.STD_SYMBOL - 175)) | (1 << (SQLSelectParser.VARIANCE_SYMBOL - 175)) | (1 << (SQLSelectParser.STDDEV_SAMP_SYMBOL - 175)) | (1 << (SQLSelectParser.VAR_SAMP_SYMBOL - 175)) | (1 << (SQLSelectParser.SUM_SYMBOL - 175)) | (1 << (SQLSelectParser.GROUP_CONCAT_SYMBOL - 175)) | (1 << (SQLSelectParser.SEPARATOR_SYMBOL - 175)) | (1 << (SQLSelectParser.GROUPING_SYMBOL - 175)) | (1 << (SQLSelectParser.ROW_NUMBER_SYMBOL - 175)) | (1 << (SQLSelectParser.RANK_SYMBOL - 175)) | (1 << (SQLSelectParser.DENSE_RANK_SYMBOL - 175)) | (1 << (SQLSelectParser.CUME_DIST_SYMBOL - 175)) | (1 << (SQLSelectParser.PERCENT_RANK_SYMBOL - 175)) | (1 << (SQLSelectParser.NTILE_SYMBOL - 175)) | (1 << (SQLSelectParser.LEAD_SYMBOL - 175)) | (1 << (SQLSelectParser.LAG_SYMBOL - 175)) | (1 << (SQLSelectParser.FIRST_VALUE_SYMBOL - 175)) | (1 << (SQLSelectParser.LAST_VALUE_SYMBOL - 175)) | (1 << (SQLSelectParser.NTH_VALUE_SYMBOL - 175)) | (1 << (SQLSelectParser.FIRST_SYMBOL - 175)) | (1 << (SQLSelectParser.LAST_SYMBOL - 175)) | (1 << (SQLSelectParser.OVER_SYMBOL - 175)) | (1 << (SQLSelectParser.RESPECT_SYMBOL - 175)) | (1 << (SQLSelectParser.NULLS_SYMBOL - 175)))) !== 0) || ((((_la - 207)) & ~0x1f) == 0 && ((1 << (_la - 207)) & ((1 << (SQLSelectParser.JSON_ARRAYAGG_SYMBOL - 207)) | (1 << (SQLSelectParser.JSON_OBJECTAGG_SYMBOL - 207)) | (1 << (SQLSelectParser.BOOLEAN_SYMBOL - 207)) | (1 << (SQLSelectParser.LANGUAGE_SYMBOL - 207)) | (1 << (SQLSelectParser.QUERY_SYMBOL - 207)) | (1 << (SQLSelectParser.EXPANSION_SYMBOL - 207)) | (1 << (SQLSelectParser.CHAR_SYMBOL - 207)) | (1 << (SQLSelectParser.CURRENT_USER_SYMBOL - 207)) | (1 << (SQLSelectParser.DATE_SYMBOL - 207)) | (1 << (SQLSelectParser.INSERT_SYMBOL - 207)) | (1 << (SQLSelectParser.TIME_SYMBOL - 207)) | (1 << (SQLSelectParser.TIMESTAMP_SYMBOL - 207)) | (1 << (SQLSelectParser.TIMESTAMP_LTZ_SYMBOL - 207)) | (1 << (SQLSelectParser.TIMESTAMP_NTZ_SYMBOL - 207)) | (1 << (SQLSelectParser.ZONE_SYMBOL - 207)) | (1 << (SQLSelectParser.USER_SYMBOL - 207)) | (1 << (SQLSelectParser.ADDDATE_SYMBOL - 207)) | (1 << (SQLSelectParser.SUBDATE_SYMBOL - 207)) | (1 << (SQLSelectParser.CURDATE_SYMBOL - 207)) | (1 << (SQLSelectParser.CURTIME_SYMBOL - 207)) | (1 << (SQLSelectParser.DATE_ADD_SYMBOL - 207)) | (1 << (SQLSelectParser.DATE_SUB_SYMBOL - 207)) | (1 << (SQLSelectParser.EXTRACT_SYMBOL - 207)) | (1 << (SQLSelectParser.GET_FORMAT_SYMBOL - 207)) | (1 << (SQLSelectParser.NOW_SYMBOL - 207)) | (1 << (SQLSelectParser.POSITION_SYMBOL - 207)) | (1 << (SQLSelectParser.SYSDATE_SYMBOL - 207)) | (1 << (SQLSelectParser.TIMESTAMP_ADD_SYMBOL - 207)) | (1 << (SQLSelectParser.TIMESTAMP_DIFF_SYMBOL - 207)) | (1 << (SQLSelectParser.UTC_DATE_SYMBOL - 207)) | (1 << (SQLSelectParser.UTC_TIME_SYMBOL - 207)) | (1 << (SQLSelectParser.UTC_TIMESTAMP_SYMBOL - 207)))) !== 0) || ((((_la - 239)) & ~0x1f) == 0 && ((1 << (_la - 239)) & ((1 << (SQLSelectParser.ASCII_SYMBOL - 239)) | (1 << (SQLSelectParser.CHARSET_SYMBOL - 239)) | (1 << (SQLSelectParser.COALESCE_SYMBOL - 239)) | (1 << (SQLSelectParser.COLLATION_SYMBOL - 239)) | (1 << (SQLSelectParser.DATABASE_SYMBOL - 239)) | (1 << (SQLSelectParser.IF_SYMBOL - 239)) | (1 << (SQLSelectParser.FORMAT_SYMBOL - 239)) | (1 << (SQLSelectParser.MICROSECOND_SYMBOL - 239)) | (1 << (SQLSelectParser.OLD_PASSWORD_SYMBOL - 239)) | (1 << (SQLSelectParser.PASSWORD_SYMBOL - 239)) | (1 << (SQLSelectParser.REPEAT_SYMBOL - 239)) | (1 << (SQLSelectParser.REPLACE_SYMBOL - 239)) | (1 << (SQLSelectParser.REVERSE_SYMBOL - 239)) | (1 << (SQLSelectParser.ROW_COUNT_SYMBOL - 239)) | (1 << (SQLSelectParser.TRUNCATE_SYMBOL - 239)) | (1 << (SQLSelectParser.WEIGHT_STRING_SYMBOL - 239)) | (1 << (SQLSelectParser.CONTAINS_SYMBOL - 239)) | (1 << (SQLSelectParser.GEOMETRYCOLLECTION_SYMBOL - 239)) | (1 << (SQLSelectParser.LINESTRING_SYMBOL - 239)) | (1 << (SQLSelectParser.MULTILINESTRING_SYMBOL - 239)) | (1 << (SQLSelectParser.MULTIPOINT_SYMBOL - 239)) | (1 << (SQLSelectParser.MULTIPOLYGON_SYMBOL - 239)) | (1 << (SQLSelectParser.POINT_SYMBOL - 239)) | (1 << (SQLSelectParser.POLYGON_SYMBOL - 239)) | (1 << (SQLSelectParser.LEVEL_SYMBOL - 239)) | (1 << (SQLSelectParser.DATETIME_SYMBOL - 239)) | (1 << (SQLSelectParser.TRIM_SYMBOL - 239)) | (1 << (SQLSelectParser.LEADING_SYMBOL - 239)) | (1 << (SQLSelectParser.TRAILING_SYMBOL - 239)) | (1 << (SQLSelectParser.BOTH_SYMBOL - 239)) | (1 << (SQLSelectParser.STRING_SYMBOL - 239)) | (1 << (SQLSelectParser.SUBSTRING_SYMBOL - 239)))) !== 0) || ((((_la - 271)) & ~0x1f) == 0 && ((1 << (_la - 271)) & ((1 << (SQLSelectParser.WHEN_SYMBOL - 271)) | (1 << (SQLSelectParser.THEN_SYMBOL - 271)) | (1 << (SQLSelectParser.ELSE_SYMBOL - 271)) | (1 << (SQLSelectParser.SIGNED_SYMBOL - 271)) | (1 << (SQLSelectParser.UNSIGNED_SYMBOL - 271)) | (1 << (SQLSelectParser.DECIMAL_SYMBOL - 271)) | (1 << (SQLSelectParser.JSON_SYMBOL - 271)) | (1 << (SQLSelectParser.FLOAT_SYMBOL - 271)) | (1 << (SQLSelectParser.FLOAT_SYMBOL_4 - 271)) | (1 << (SQLSelectParser.FLOAT_SYMBOL_8 - 271)) | (1 << (SQLSelectParser.SET_SYMBOL - 271)) | (1 << (SQLSelectParser.SECOND_MICROSECOND_SYMBOL - 271)) | (1 << (SQLSelectParser.MINUTE_MICROSECOND_SYMBOL - 271)) | (1 << (SQLSelectParser.MINUTE_SECOND_SYMBOL - 271)) | (1 << (SQLSelectParser.HOUR_MICROSECOND_SYMBOL - 271)) | (1 << (SQLSelectParser.HOUR_SECOND_SYMBOL - 271)) | (1 << (SQLSelectParser.HOUR_MINUTE_SYMBOL - 271)) | (1 << (SQLSelectParser.DAY_MICROSECOND_SYMBOL - 271)) | (1 << (SQLSelectParser.DAY_SECOND_SYMBOL - 271)) | (1 << (SQLSelectParser.DAY_MINUTE_SYMBOL - 271)) | (1 << (SQLSelectParser.DAY_HOUR_SYMBOL - 271)) | (1 << (SQLSelectParser.YEAR_MONTH_SYMBOL - 271)) | (1 << (SQLSelectParser.BTREE_SYMBOL - 271)) | (1 << (SQLSelectParser.RTREE_SYMBOL - 271)) | (1 << (SQLSelectParser.HASH_SYMBOL - 271)) | (1 << (SQLSelectParser.REAL_SYMBOL - 271)) | (1 << (SQLSelectParser.DOUBLE_SYMBOL - 271)) | (1 << (SQLSelectParser.PRECISION_SYMBOL - 271)) | (1 << (SQLSelectParser.NUMERIC_SYMBOL - 271)) | (1 << (SQLSelectParser.NUMBER_SYMBOL - 271)) | (1 << (SQLSelectParser.FIXED_SYMBOL - 271)) | (1 << (SQLSelectParser.BIT_SYMBOL - 271)))) !== 0) || ((((_la - 303)) & ~0x1f) == 0 && ((1 << (_la - 303)) & ((1 << (SQLSelectParser.BOOL_SYMBOL - 303)) | (1 << (SQLSelectParser.VARYING_SYMBOL - 303)) | (1 << (SQLSelectParser.VARCHAR_SYMBOL - 303)) | (1 << (SQLSelectParser.NATIONAL_SYMBOL - 303)) | (1 << (SQLSelectParser.NVARCHAR_SYMBOL - 303)) | (1 << (SQLSelectParser.NCHAR_SYMBOL - 303)) | (1 << (SQLSelectParser.VARBINARY_SYMBOL - 303)) | (1 << (SQLSelectParser.TINYBLOB_SYMBOL - 303)) | (1 << (SQLSelectParser.BLOB_SYMBOL - 303)) | (1 << (SQLSelectParser.MEDIUMBLOB_SYMBOL - 303)) | (1 << (SQLSelectParser.LONGBLOB_SYMBOL - 303)) | (1 << (SQLSelectParser.LONG_SYMBOL - 303)) | (1 << (SQLSelectParser.TINYTEXT_SYMBOL - 303)) | (1 << (SQLSelectParser.TEXT_SYMBOL - 303)) | (1 << (SQLSelectParser.MEDIUMTEXT_SYMBOL - 303)) | (1 << (SQLSelectParser.LONGTEXT_SYMBOL - 303)) | (1 << (SQLSelectParser.ENUM_SYMBOL - 303)) | (1 << (SQLSelectParser.SERIAL_SYMBOL - 303)) | (1 << (SQLSelectParser.GEOMETRY_SYMBOL - 303)) | (1 << (SQLSelectParser.ZEROFILL_SYMBOL - 303)) | (1 << (SQLSelectParser.BYTE_SYMBOL - 303)) | (1 << (SQLSelectParser.UNICODE_SYMBOL - 303)) | (1 << (SQLSelectParser.TERMINATED_SYMBOL - 303)) | (1 << (SQLSelectParser.OPTIONALLY_SYMBOL - 303)) | (1 << (SQLSelectParser.ENCLOSED_SYMBOL - 303)) | (1 << (SQLSelectParser.ESCAPED_SYMBOL - 303)) | (1 << (SQLSelectParser.LINES_SYMBOL - 303)) | (1 << (SQLSelectParser.STARTING_SYMBOL - 303)) | (1 << (SQLSelectParser.GLOBAL_SYMBOL - 303)) | (1 << (SQLSelectParser.LOCAL_SYMBOL - 303)) | (1 << (SQLSelectParser.SESSION_SYMBOL - 303)) | (1 << (SQLSelectParser.VARIANT_SYMBOL - 303)))) !== 0) || ((((_la - 335)) & ~0x1f) == 0 && ((1 << (_la - 335)) & ((1 << (SQLSelectParser.OBJECT_SYMBOL - 335)) | (1 << (SQLSelectParser.GEOGRAPHY_SYMBOL - 335)) | (1 << (SQLSelectParser.IDENTIFIER - 335)) | (1 << (SQLSelectParser.BACK_TICK_QUOTED_ID - 335)) | (1 << (SQLSelectParser.DOUBLE_QUOTED_TEXT - 335)) | (1 << (SQLSelectParser.SINGLE_QUOTED_TEXT - 335)) | (1 << (SQLSelectParser.BRACKET_QUOTED_TEXT - 335)))) !== 0)) { - this.state = 979; - this.indexList(); - } - - this.state = 982; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - indexHintType() { - let localctx = new IndexHintTypeContext(this, this._ctx, this.state); - this.enterRule(localctx, 140, SQLSelectParser.RULE_indexHintType); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 986; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.FORCE_SYMBOL || _la===SQLSelectParser.IGNORE_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - keyOrIndex() { - let localctx = new KeyOrIndexContext(this, this._ctx, this.state); - this.enterRule(localctx, 142, SQLSelectParser.RULE_keyOrIndex); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 988; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.KEY_SYMBOL || _la===SQLSelectParser.INDEX_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - indexHintClause() { - let localctx = new IndexHintClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 144, SQLSelectParser.RULE_indexHintClause); - try { - this.enterOuterAlt(localctx, 1); - this.state = 990; - this.match(SQLSelectParser.FOR_SYMBOL); - this.state = 996; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.JOIN_SYMBOL: - this.state = 991; - this.match(SQLSelectParser.JOIN_SYMBOL); - break; - case SQLSelectParser.ORDER_SYMBOL: - this.state = 992; - this.match(SQLSelectParser.ORDER_SYMBOL); - this.state = 993; - this.match(SQLSelectParser.BY_SYMBOL); - break; - case SQLSelectParser.GROUP_SYMBOL: - this.state = 994; - this.match(SQLSelectParser.GROUP_SYMBOL); - this.state = 995; - this.match(SQLSelectParser.BY_SYMBOL); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - indexList() { - let localctx = new IndexListContext(this, this._ctx, this.state); - this.enterRule(localctx, 146, SQLSelectParser.RULE_indexList); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 998; - this.indexListElement(); - this.state = 1003; - this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===SQLSelectParser.COMMA_SYMBOL) { - this.state = 999; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1000; - this.indexListElement(); - this.state = 1005; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - indexListElement() { - let localctx = new IndexListElementContext(this, this._ctx, this.state); - this.enterRule(localctx, 148, SQLSelectParser.RULE_indexListElement); - try { - this.state = 1008; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,119,this._ctx); - switch(la_) { - case 1: - this.enterOuterAlt(localctx, 1); - this.state = 1006; - this.identifier(); - break; - - case 2: - this.enterOuterAlt(localctx, 2); - this.state = 1007; - this.match(SQLSelectParser.PRIMARY_SYMBOL); - break; - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - expr(_p) { - if(_p===undefined) { - _p = 0; - } - const _parentctx = this._ctx; - const _parentState = this.state; - let localctx = new ExprContext(this, this._ctx, _parentState); - let _prevctx = localctx; - const _startState = 150; - this.enterRecursionRule(localctx, 150, SQLSelectParser.RULE_expr, _p); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 1021; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,122,this._ctx); - switch(la_) { - case 1: - this.state = 1011; - this.boolPri(0); - this.state = 1017; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,121,this._ctx); - if(la_===1) { - this.state = 1012; - this.match(SQLSelectParser.IS_SYMBOL); - this.state = 1014; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.NOT_SYMBOL) { - this.state = 1013; - this.notRule(); - } - - this.state = 1016; - _la = this._input.LA(1); - if(!(((((_la - 153)) & ~0x1f) == 0 && ((1 << (_la - 153)) & ((1 << (SQLSelectParser.TRUE_SYMBOL - 153)) | (1 << (SQLSelectParser.FALSE_SYMBOL - 153)) | (1 << (SQLSelectParser.UNKNOWN_SYMBOL - 153)))) !== 0))) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - - } - break; - - case 2: - this.state = 1019; - this.match(SQLSelectParser.NOT_SYMBOL); - this.state = 1020; - this.expr(4); - break; - - } - this._ctx.stop = this._input.LT(-1); - this.state = 1034; - this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,124,this._ctx) - while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { - if(_alt===1) { - if(this._parseListeners!==null) { - this.triggerExitRuleEvent(); - } - _prevctx = localctx; - this.state = 1032; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,123,this._ctx); - switch(la_) { - case 1: - localctx = new ExprContext(this, _parentctx, _parentState); - this.pushNewRecursionContext(localctx, _startState, SQLSelectParser.RULE_expr); - this.state = 1023; - if (!( this.precpred(this._ctx, 3))) { - throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)"); - } - this.state = 1024; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.LOGICAL_AND_OPERATOR || _la===SQLSelectParser.AND_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 1025; - this.expr(4); - break; - - case 2: - localctx = new ExprContext(this, _parentctx, _parentState); - this.pushNewRecursionContext(localctx, _startState, SQLSelectParser.RULE_expr); - this.state = 1026; - if (!( this.precpred(this._ctx, 2))) { - throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)"); - } - this.state = 1027; - this.match(SQLSelectParser.XOR_SYMBOL); - this.state = 1028; - this.expr(3); - break; - - case 3: - localctx = new ExprContext(this, _parentctx, _parentState); - this.pushNewRecursionContext(localctx, _startState, SQLSelectParser.RULE_expr); - this.state = 1029; - if (!( this.precpred(this._ctx, 1))) { - throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)"); - } - this.state = 1030; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.LOGICAL_OR_OPERATOR || _la===SQLSelectParser.OR_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 1031; - this.expr(2); - break; - - } - } - this.state = 1036; - this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,124,this._ctx); - } - - } catch( error) { - if(error instanceof antlr4.error.RecognitionException) { - localctx.exception = error; - this._errHandler.reportError(this, error); - this._errHandler.recover(this, error); - } else { - throw error; - } - } finally { - this.unrollRecursionContexts(_parentctx) - } - return localctx; - } - - - boolPri(_p) { - if(_p===undefined) { - _p = 0; - } - const _parentctx = this._ctx; - const _parentState = this.state; - let localctx = new BoolPriContext(this, this._ctx, _parentState); - let _prevctx = localctx; - const _startState = 152; - this.enterRecursionRule(localctx, 152, SQLSelectParser.RULE_boolPri, _p); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 1038; - this.predicate(); - this._ctx.stop = this._input.LT(-1); - this.state = 1057; - this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,127,this._ctx) - while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { - if(_alt===1) { - if(this._parseListeners!==null) { - this.triggerExitRuleEvent(); - } - _prevctx = localctx; - this.state = 1055; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,126,this._ctx); - switch(la_) { - case 1: - localctx = new BoolPriContext(this, _parentctx, _parentState); - this.pushNewRecursionContext(localctx, _startState, SQLSelectParser.RULE_boolPri); - this.state = 1040; - if (!( this.precpred(this._ctx, 3))) { - throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)"); - } - this.state = 1041; - this.match(SQLSelectParser.IS_SYMBOL); - this.state = 1043; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.NOT_SYMBOL) { - this.state = 1042; - this.notRule(); - } - - this.state = 1045; - this.match(SQLSelectParser.NULL_SYMBOL); - break; - - case 2: - localctx = new BoolPriContext(this, _parentctx, _parentState); - this.pushNewRecursionContext(localctx, _startState, SQLSelectParser.RULE_boolPri); - this.state = 1046; - if (!( this.precpred(this._ctx, 2))) { - throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)"); - } - this.state = 1047; - this.compOp(); - this.state = 1048; - this.predicate(); - break; - - case 3: - localctx = new BoolPriContext(this, _parentctx, _parentState); - this.pushNewRecursionContext(localctx, _startState, SQLSelectParser.RULE_boolPri); - this.state = 1050; - if (!( this.precpred(this._ctx, 1))) { - throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)"); - } - this.state = 1051; - this.compOp(); - this.state = 1052; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.ALL_SYMBOL || _la===SQLSelectParser.ANY_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 1053; - this.subquery(); - break; - - } - } - this.state = 1059; - this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,127,this._ctx); - } - - } catch( error) { - if(error instanceof antlr4.error.RecognitionException) { - localctx.exception = error; - this._errHandler.reportError(this, error); - this._errHandler.recover(this, error); - } else { - throw error; - } - } finally { - this.unrollRecursionContexts(_parentctx) - } - return localctx; - } - - - - compOp() { - let localctx = new CompOpContext(this, this._ctx, this.state); - this.enterRule(localctx, 154, SQLSelectParser.RULE_compOp); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 1060; - _la = this._input.LA(1); - if(!((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SQLSelectParser.EQUAL_OPERATOR) | (1 << SQLSelectParser.NULL_SAFE_EQUAL_OPERATOR) | (1 << SQLSelectParser.GREATER_OR_EQUAL_OPERATOR) | (1 << SQLSelectParser.GREATER_THAN_OPERATOR) | (1 << SQLSelectParser.LESS_OR_EQUAL_OPERATOR) | (1 << SQLSelectParser.LESS_THAN_OPERATOR) | (1 << SQLSelectParser.NOT_EQUAL_OPERATOR))) !== 0))) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - predicate() { - let localctx = new PredicateContext(this, this._ctx, this.state); - this.enterRule(localctx, 156, SQLSelectParser.RULE_predicate); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 1062; - this.bitExpr(0); - this.state = 1075; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,130,this._ctx); - if(la_===1) { - this.state = 1064; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.NOT_SYMBOL) { - this.state = 1063; - this.notRule(); - } - - this.state = 1066; - this.predicateOperations(); - - } else if(la_===2) { - this.state = 1067; - this.match(SQLSelectParser.MEMBER_SYMBOL); - this.state = 1069; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.OF_SYMBOL) { - this.state = 1068; - this.match(SQLSelectParser.OF_SYMBOL); - } - - this.state = 1071; - this.simpleExprWithParentheses(); - - } else if(la_===3) { - this.state = 1072; - this.match(SQLSelectParser.SOUNDS_SYMBOL); - this.state = 1073; - this.match(SQLSelectParser.LIKE_SYMBOL); - this.state = 1074; - this.bitExpr(0); - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - predicateOperations() { - let localctx = new PredicateOperationsContext(this, this._ctx, this.state); - this.enterRule(localctx, 158, SQLSelectParser.RULE_predicateOperations); - try { - this.state = 1098; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.IN_SYMBOL: - this.enterOuterAlt(localctx, 1); - this.state = 1077; - this.match(SQLSelectParser.IN_SYMBOL); - this.state = 1083; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,131,this._ctx); - switch(la_) { - case 1: - this.state = 1078; - this.subquery(); - break; - - case 2: - this.state = 1079; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1080; - this.exprList(); - this.state = 1081; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - - } - break; - case SQLSelectParser.BETWEEN_SYMBOL: - this.enterOuterAlt(localctx, 2); - this.state = 1085; - this.match(SQLSelectParser.BETWEEN_SYMBOL); - this.state = 1086; - this.bitExpr(0); - this.state = 1087; - this.match(SQLSelectParser.AND_SYMBOL); - this.state = 1088; - this.predicate(); - break; - case SQLSelectParser.LIKE_SYMBOL: - this.enterOuterAlt(localctx, 3); - this.state = 1090; - this.match(SQLSelectParser.LIKE_SYMBOL); - this.state = 1091; - this.simpleExpr(0); - this.state = 1094; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,132,this._ctx); - if(la_===1) { - this.state = 1092; - this.match(SQLSelectParser.ESCAPE_SYMBOL); - this.state = 1093; - this.simpleExpr(0); - - } - break; - case SQLSelectParser.REGEXP_SYMBOL: - this.enterOuterAlt(localctx, 4); - this.state = 1096; - this.match(SQLSelectParser.REGEXP_SYMBOL); - this.state = 1097; - this.bitExpr(0); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - bitExpr(_p) { - if(_p===undefined) { - _p = 0; - } - const _parentctx = this._ctx; - const _parentState = this.state; - let localctx = new BitExprContext(this, this._ctx, _parentState); - let _prevctx = localctx; - const _startState = 160; - this.enterRecursionRule(localctx, 160, SQLSelectParser.RULE_bitExpr, _p); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 1101; - this.simpleExpr(0); - this._ctx.stop = this._input.LT(-1); - this.state = 1129; - this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,135,this._ctx) - while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { - if(_alt===1) { - if(this._parseListeners!==null) { - this.triggerExitRuleEvent(); - } - _prevctx = localctx; - this.state = 1127; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,134,this._ctx); - switch(la_) { - case 1: - localctx = new BitExprContext(this, _parentctx, _parentState); - this.pushNewRecursionContext(localctx, _startState, SQLSelectParser.RULE_bitExpr); - this.state = 1103; - if (!( this.precpred(this._ctx, 7))) { - throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 7)"); - } - this.state = 1104; - this.match(SQLSelectParser.BITWISE_XOR_OPERATOR); - this.state = 1105; - this.bitExpr(8); - break; - - case 2: - localctx = new BitExprContext(this, _parentctx, _parentState); - this.pushNewRecursionContext(localctx, _startState, SQLSelectParser.RULE_bitExpr); - this.state = 1106; - if (!( this.precpred(this._ctx, 6))) { - throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 6)"); - } - this.state = 1107; - _la = this._input.LA(1); - if(!((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SQLSelectParser.MULT_OPERATOR) | (1 << SQLSelectParser.DIV_OPERATOR) | (1 << SQLSelectParser.MOD_OPERATOR))) !== 0) || _la===SQLSelectParser.DIV_SYMBOL || _la===SQLSelectParser.MOD_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 1108; - this.bitExpr(7); - break; - - case 3: - localctx = new BitExprContext(this, _parentctx, _parentState); - this.pushNewRecursionContext(localctx, _startState, SQLSelectParser.RULE_bitExpr); - this.state = 1109; - if (!( this.precpred(this._ctx, 5))) { - throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 5)"); - } - this.state = 1110; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.PLUS_OPERATOR || _la===SQLSelectParser.MINUS_OPERATOR)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 1111; - this.bitExpr(6); - break; - - case 4: - localctx = new BitExprContext(this, _parentctx, _parentState); - this.pushNewRecursionContext(localctx, _startState, SQLSelectParser.RULE_bitExpr); - this.state = 1112; - if (!( this.precpred(this._ctx, 3))) { - throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)"); - } - this.state = 1113; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.SHIFT_LEFT_OPERATOR || _la===SQLSelectParser.SHIFT_RIGHT_OPERATOR)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 1114; - this.bitExpr(4); - break; - - case 5: - localctx = new BitExprContext(this, _parentctx, _parentState); - this.pushNewRecursionContext(localctx, _startState, SQLSelectParser.RULE_bitExpr); - this.state = 1115; - if (!( this.precpred(this._ctx, 2))) { - throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)"); - } - this.state = 1116; - this.match(SQLSelectParser.BITWISE_AND_OPERATOR); - this.state = 1117; - this.bitExpr(3); - break; - - case 6: - localctx = new BitExprContext(this, _parentctx, _parentState); - this.pushNewRecursionContext(localctx, _startState, SQLSelectParser.RULE_bitExpr); - this.state = 1118; - if (!( this.precpred(this._ctx, 1))) { - throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)"); - } - this.state = 1119; - this.match(SQLSelectParser.BITWISE_OR_OPERATOR); - this.state = 1120; - this.bitExpr(2); - break; - - case 7: - localctx = new BitExprContext(this, _parentctx, _parentState); - this.pushNewRecursionContext(localctx, _startState, SQLSelectParser.RULE_bitExpr); - this.state = 1121; - if (!( this.precpred(this._ctx, 4))) { - throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 4)"); - } - this.state = 1122; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.PLUS_OPERATOR || _la===SQLSelectParser.MINUS_OPERATOR)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 1123; - this.match(SQLSelectParser.INTERVAL_SYMBOL); - this.state = 1124; - this.expr(0); - this.state = 1125; - this.interval(); - break; - - } - } - this.state = 1131; - this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,135,this._ctx); - } - - } catch( error) { - if(error instanceof antlr4.error.RecognitionException) { - localctx.exception = error; - this._errHandler.reportError(this, error); - this._errHandler.recover(this, error); - } else { - throw error; - } - } finally { - this.unrollRecursionContexts(_parentctx) - } - return localctx; - } - - - simpleExpr(_p) { - if(_p===undefined) { - _p = 0; - } - const _parentctx = this._ctx; - const _parentState = this.state; - let localctx = new SimpleExprContext(this, this._ctx, _parentState); - let _prevctx = localctx; - const _startState = 162; - this.enterRecursionRule(localctx, 162, SQLSelectParser.RULE_simpleExpr, _p); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 1239; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,145,this._ctx); - switch(la_) { - case 1: - this.state = 1133; - this.variable(); - this.state = 1137; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,136,this._ctx); - if(la_===1) { - this.state = 1134; - this.equal(); - this.state = 1135; - this.expr(0); - - } - break; - - case 2: - this.state = 1139; - this.qualifiedIdentifier(); - this.state = 1141; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,137,this._ctx); - if(la_===1) { - this.state = 1140; - this.jsonOperator(); - - } - break; - - case 3: - this.state = 1143; - this.runtimeFunctionCall(); - break; - - case 4: - this.state = 1144; - this.functionCall(); - break; - - case 5: - this.state = 1145; - this.literal(); - break; - - case 6: - this.state = 1146; - this.match(SQLSelectParser.PARAM_MARKER); - break; - - case 7: - this.state = 1147; - this.sumExpr(); - break; - - case 8: - this.state = 1148; - this.groupingOperation(); - break; - - case 9: - this.state = 1149; - this.windowFunctionCall(); - break; - - case 10: - this.state = 1150; - _la = this._input.LA(1); - if(!((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SQLSelectParser.PLUS_OPERATOR) | (1 << SQLSelectParser.MINUS_OPERATOR) | (1 << SQLSelectParser.BITWISE_NOT_OPERATOR))) !== 0))) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 1151; - this.simpleExpr(15); - break; - - case 11: - this.state = 1152; - this.not2Rule(); - this.state = 1153; - this.simpleExpr(14); - break; - - case 12: - this.state = 1156; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.ROW_SYMBOL) { - this.state = 1155; - this.match(SQLSelectParser.ROW_SYMBOL); - } - - this.state = 1158; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1159; - this.exprList(); - this.state = 1160; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - - case 13: - this.state = 1163; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.EXISTS_SYMBOL) { - this.state = 1162; - this.match(SQLSelectParser.EXISTS_SYMBOL); - } - - this.state = 1165; - this.subquery(); - break; - - case 14: - this.state = 1166; - this.match(SQLSelectParser.OPEN_CURLY_SYMBOL); - this.state = 1167; - this.identifier(); - this.state = 1168; - this.expr(0); - this.state = 1169; - this.match(SQLSelectParser.CLOSE_CURLY_SYMBOL); - break; - - case 15: - this.state = 1171; - this.match(SQLSelectParser.MATCH_SYMBOL); - this.state = 1172; - this.identListArg(); - this.state = 1173; - this.match(SQLSelectParser.AGAINST_SYMBOL); - this.state = 1174; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1175; - this.bitExpr(0); - this.state = 1177; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.WITH_SYMBOL || _la===SQLSelectParser.IN_SYMBOL) { - this.state = 1176; - this.fulltextOptions(); - } - - this.state = 1179; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - - case 16: - this.state = 1181; - this.match(SQLSelectParser.BINARY_SYMBOL); - this.state = 1182; - this.simpleExpr(9); - break; - - case 17: - this.state = 1183; - this.match(SQLSelectParser.CAST_SYMBOL); - this.state = 1184; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1185; - this.expr(0); - this.state = 1186; - this.match(SQLSelectParser.AS_SYMBOL); - this.state = 1187; - this.dataType(); - this.state = 1189; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.ARRAY_SYMBOL) { - this.state = 1188; - this.match(SQLSelectParser.ARRAY_SYMBOL); - } - - this.state = 1191; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - - case 18: - this.state = 1193; - this.match(SQLSelectParser.CASE_SYMBOL); - this.state = 1195; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,142,this._ctx); - if(la_===1) { - this.state = 1194; - this.expr(0); - - } - this.state = 1200; - this._errHandler.sync(this); - _la = this._input.LA(1); - do { - this.state = 1197; - this.whenExpression(); - this.state = 1198; - this.thenExpression(); - this.state = 1202; - this._errHandler.sync(this); - _la = this._input.LA(1); - } while(_la===SQLSelectParser.WHEN_SYMBOL); - this.state = 1205; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.ELSE_SYMBOL) { - this.state = 1204; - this.elseExpression(); - } - - this.state = 1207; - this.match(SQLSelectParser.END_SYMBOL); - break; - - case 19: - this.state = 1209; - this.match(SQLSelectParser.CONVERT_SYMBOL); - this.state = 1210; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1211; - this.expr(0); - this.state = 1212; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1213; - this.dataType(); - this.state = 1214; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - - case 20: - this.state = 1216; - this.match(SQLSelectParser.CONVERT_SYMBOL); - this.state = 1217; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1218; - this.expr(0); - this.state = 1219; - this.match(SQLSelectParser.USING_SYMBOL); - this.state = 1220; - this.charsetName(); - this.state = 1221; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - - case 21: - this.state = 1223; - this.match(SQLSelectParser.DEFAULT_SYMBOL); - this.state = 1224; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1225; - this.qualifiedIdentifier(); - this.state = 1226; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - - case 22: - this.state = 1228; - this.match(SQLSelectParser.VALUES_SYMBOL); - this.state = 1229; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1230; - this.qualifiedIdentifier(); - this.state = 1231; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - - case 23: - this.state = 1233; - this.match(SQLSelectParser.INTERVAL_SYMBOL); - this.state = 1234; - this.expr(0); - this.state = 1235; - this.interval(); - this.state = 1236; - this.match(SQLSelectParser.PLUS_OPERATOR); - this.state = 1237; - this.expr(0); - break; - - } - this._ctx.stop = this._input.LT(-1); - this.state = 1252; - this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,147,this._ctx) - while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { - if(_alt===1) { - if(this._parseListeners!==null) { - this.triggerExitRuleEvent(); - } - _prevctx = localctx; - this.state = 1250; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,146,this._ctx); - switch(la_) { - case 1: - localctx = new SimpleExprContext(this, _parentctx, _parentState); - this.pushNewRecursionContext(localctx, _startState, SQLSelectParser.RULE_simpleExpr); - this.state = 1241; - if (!( this.precpred(this._ctx, 16))) { - throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 16)"); - } - this.state = 1242; - this.match(SQLSelectParser.LOGICAL_OR_OPERATOR); - this.state = 1243; - this.simpleExpr(17); - break; - - case 2: - localctx = new SimpleExprContext(this, _parentctx, _parentState); - this.pushNewRecursionContext(localctx, _startState, SQLSelectParser.RULE_simpleExpr); - this.state = 1244; - if (!( this.precpred(this._ctx, 22))) { - throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 22)"); - } - this.state = 1245; - this.match(SQLSelectParser.COLLATE_SYMBOL); - this.state = 1246; - this.textOrIdentifier(); - break; - - case 3: - localctx = new SimpleExprContext(this, _parentctx, _parentState); - this.pushNewRecursionContext(localctx, _startState, SQLSelectParser.RULE_simpleExpr); - this.state = 1247; - if (!( this.precpred(this._ctx, 7))) { - throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 7)"); - } - this.state = 1248; - this.match(SQLSelectParser.CAST_COLON_SYMBOL); - this.state = 1249; - this.dataType(); - break; - - } - } - this.state = 1254; - this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,147,this._ctx); - } - - } catch( error) { - if(error instanceof antlr4.error.RecognitionException) { - localctx.exception = error; - this._errHandler.reportError(this, error); - this._errHandler.recover(this, error); - } else { - throw error; - } - } finally { - this.unrollRecursionContexts(_parentctx) - } - return localctx; - } - - - - jsonOperator() { - let localctx = new JsonOperatorContext(this, this._ctx, this.state); - this.enterRule(localctx, 164, SQLSelectParser.RULE_jsonOperator); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 1255; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.JSON_SEPARATOR_SYMBOL || _la===SQLSelectParser.JSON_UNQUOTED_SEPARATOR_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 1258; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,148,this._ctx); - switch(la_) { - case 1: - this.state = 1256; - this.textStringLiteral(); - break; - - case 2: - this.state = 1257; - this.expr(0); - break; - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - sumExpr() { - let localctx = new SumExprContext(this, this._ctx, this.state); - this.enterRule(localctx, 166, SQLSelectParser.RULE_sumExpr); - var _la = 0; // Token type - try { - this.state = 1378; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,171,this._ctx); - switch(la_) { - case 1: - this.enterOuterAlt(localctx, 1); - this.state = 1260; - this.match(SQLSelectParser.AVG_SYMBOL); - this.state = 1261; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1263; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,149,this._ctx); - if(la_===1) { - this.state = 1262; - this.match(SQLSelectParser.DISTINCT_SYMBOL); - - } - this.state = 1265; - this.inSumExpr(); - this.state = 1266; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - this.state = 1268; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,150,this._ctx); - if(la_===1) { - this.state = 1267; - this.windowingClause(); - - } - break; - - case 2: - this.enterOuterAlt(localctx, 2); - this.state = 1270; - _la = this._input.LA(1); - if(!(((((_la - 177)) & ~0x1f) == 0 && ((1 << (_la - 177)) & ((1 << (SQLSelectParser.BIT_AND_SYMBOL - 177)) | (1 << (SQLSelectParser.BIT_OR_SYMBOL - 177)) | (1 << (SQLSelectParser.BIT_XOR_SYMBOL - 177)))) !== 0))) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 1271; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1272; - this.inSumExpr(); - this.state = 1273; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - this.state = 1275; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,151,this._ctx); - if(la_===1) { - this.state = 1274; - this.windowingClause(); - - } - break; - - case 3: - this.enterOuterAlt(localctx, 3); - this.state = 1277; - this.jsonFunction(); - break; - - case 4: - this.enterOuterAlt(localctx, 4); - this.state = 1278; - this.match(SQLSelectParser.COUNT_SYMBOL); - this.state = 1279; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1281; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.ALL_SYMBOL) { - this.state = 1280; - this.match(SQLSelectParser.ALL_SYMBOL); - } - - this.state = 1283; - this.match(SQLSelectParser.MULT_OPERATOR); - this.state = 1284; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - this.state = 1286; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,153,this._ctx); - if(la_===1) { - this.state = 1285; - this.windowingClause(); - - } - break; - - case 5: - this.enterOuterAlt(localctx, 5); - this.state = 1288; - this.match(SQLSelectParser.COUNT_SYMBOL); - this.state = 1289; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1297; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,155,this._ctx); - switch(la_) { - case 1: - this.state = 1291; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.ALL_SYMBOL) { - this.state = 1290; - this.match(SQLSelectParser.ALL_SYMBOL); - } - - this.state = 1293; - this.match(SQLSelectParser.MULT_OPERATOR); - break; - - case 2: - this.state = 1294; - this.inSumExpr(); - break; - - case 3: - this.state = 1295; - this.match(SQLSelectParser.DISTINCT_SYMBOL); - this.state = 1296; - this.exprList(); - break; - - } - this.state = 1299; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - this.state = 1301; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,156,this._ctx); - if(la_===1) { - this.state = 1300; - this.windowingClause(); - - } - break; - - case 6: - this.enterOuterAlt(localctx, 6); - this.state = 1303; - this.match(SQLSelectParser.MIN_SYMBOL); - this.state = 1304; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1306; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,157,this._ctx); - if(la_===1) { - this.state = 1305; - this.match(SQLSelectParser.DISTINCT_SYMBOL); - - } - this.state = 1308; - this.inSumExpr(); - this.state = 1309; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - this.state = 1311; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,158,this._ctx); - if(la_===1) { - this.state = 1310; - this.windowingClause(); - - } - break; - - case 7: - this.enterOuterAlt(localctx, 7); - this.state = 1313; - this.match(SQLSelectParser.MAX_SYMBOL); - this.state = 1314; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1316; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,159,this._ctx); - if(la_===1) { - this.state = 1315; - this.match(SQLSelectParser.DISTINCT_SYMBOL); - - } - this.state = 1318; - this.inSumExpr(); - this.state = 1319; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - this.state = 1321; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,160,this._ctx); - if(la_===1) { - this.state = 1320; - this.windowingClause(); - - } - break; - - case 8: - this.enterOuterAlt(localctx, 8); - this.state = 1323; - this.match(SQLSelectParser.STD_SYMBOL); - this.state = 1324; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1325; - this.inSumExpr(); - this.state = 1326; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - this.state = 1328; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,161,this._ctx); - if(la_===1) { - this.state = 1327; - this.windowingClause(); - - } - break; - - case 9: - this.enterOuterAlt(localctx, 9); - this.state = 1330; - this.match(SQLSelectParser.VARIANCE_SYMBOL); - this.state = 1331; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1332; - this.inSumExpr(); - this.state = 1333; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - this.state = 1335; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,162,this._ctx); - if(la_===1) { - this.state = 1334; - this.windowingClause(); - - } - break; - - case 10: - this.enterOuterAlt(localctx, 10); - this.state = 1337; - this.match(SQLSelectParser.STDDEV_SAMP_SYMBOL); - this.state = 1338; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1339; - this.inSumExpr(); - this.state = 1340; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - this.state = 1342; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,163,this._ctx); - if(la_===1) { - this.state = 1341; - this.windowingClause(); - - } - break; - - case 11: - this.enterOuterAlt(localctx, 11); - this.state = 1344; - this.match(SQLSelectParser.VAR_SAMP_SYMBOL); - this.state = 1345; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1346; - this.inSumExpr(); - this.state = 1347; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - this.state = 1349; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,164,this._ctx); - if(la_===1) { - this.state = 1348; - this.windowingClause(); - - } - break; - - case 12: - this.enterOuterAlt(localctx, 12); - this.state = 1351; - this.match(SQLSelectParser.SUM_SYMBOL); - this.state = 1352; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1354; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,165,this._ctx); - if(la_===1) { - this.state = 1353; - this.match(SQLSelectParser.DISTINCT_SYMBOL); - - } - this.state = 1356; - this.inSumExpr(); - this.state = 1357; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - this.state = 1359; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,166,this._ctx); - if(la_===1) { - this.state = 1358; - this.windowingClause(); - - } - break; - - case 13: - this.enterOuterAlt(localctx, 13); - this.state = 1361; - this.match(SQLSelectParser.GROUP_CONCAT_SYMBOL); - this.state = 1362; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1364; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,167,this._ctx); - if(la_===1) { - this.state = 1363; - this.match(SQLSelectParser.DISTINCT_SYMBOL); - - } - this.state = 1366; - this.exprList(); - this.state = 1368; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.ORDER_SYMBOL) { - this.state = 1367; - this.orderClause(); - } - - this.state = 1372; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.SEPARATOR_SYMBOL) { - this.state = 1370; - this.match(SQLSelectParser.SEPARATOR_SYMBOL); - this.state = 1371; - this.textString(); - } - - this.state = 1374; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - this.state = 1376; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,170,this._ctx); - if(la_===1) { - this.state = 1375; - this.windowingClause(); - - } - break; - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - groupingOperation() { - let localctx = new GroupingOperationContext(this, this._ctx, this.state); - this.enterRule(localctx, 168, SQLSelectParser.RULE_groupingOperation); - try { - this.enterOuterAlt(localctx, 1); - this.state = 1380; - this.match(SQLSelectParser.GROUPING_SYMBOL); - this.state = 1381; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1382; - this.exprList(); - this.state = 1383; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - windowFunctionCall() { - let localctx = new WindowFunctionCallContext(this, this._ctx, this.state); - this.enterRule(localctx, 170, SQLSelectParser.RULE_windowFunctionCall); - var _la = 0; // Token type - try { - this.state = 1427; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.ROW_NUMBER_SYMBOL: - case SQLSelectParser.RANK_SYMBOL: - case SQLSelectParser.DENSE_RANK_SYMBOL: - case SQLSelectParser.CUME_DIST_SYMBOL: - case SQLSelectParser.PERCENT_RANK_SYMBOL: - this.enterOuterAlt(localctx, 1); - this.state = 1385; - _la = this._input.LA(1); - if(!(((((_la - 191)) & ~0x1f) == 0 && ((1 << (_la - 191)) & ((1 << (SQLSelectParser.ROW_NUMBER_SYMBOL - 191)) | (1 << (SQLSelectParser.RANK_SYMBOL - 191)) | (1 << (SQLSelectParser.DENSE_RANK_SYMBOL - 191)) | (1 << (SQLSelectParser.CUME_DIST_SYMBOL - 191)) | (1 << (SQLSelectParser.PERCENT_RANK_SYMBOL - 191)))) !== 0))) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 1386; - this.parentheses(); - this.state = 1387; - this.windowingClause(); - break; - case SQLSelectParser.NTILE_SYMBOL: - this.enterOuterAlt(localctx, 2); - this.state = 1389; - this.match(SQLSelectParser.NTILE_SYMBOL); - this.state = 1390; - this.simpleExprWithParentheses(); - this.state = 1391; - this.windowingClause(); - break; - case SQLSelectParser.LEAD_SYMBOL: - case SQLSelectParser.LAG_SYMBOL: - this.enterOuterAlt(localctx, 3); - this.state = 1393; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.LEAD_SYMBOL || _la===SQLSelectParser.LAG_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 1394; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1395; - this.expr(0); - this.state = 1397; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.COMMA_SYMBOL) { - this.state = 1396; - this.leadLagInfo(); - } - - this.state = 1399; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - this.state = 1401; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.IGNORE_SYMBOL || _la===SQLSelectParser.RESPECT_SYMBOL) { - this.state = 1400; - this.nullTreatment(); - } - - this.state = 1403; - this.windowingClause(); - break; - case SQLSelectParser.FIRST_VALUE_SYMBOL: - case SQLSelectParser.LAST_VALUE_SYMBOL: - this.enterOuterAlt(localctx, 4); - this.state = 1405; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.FIRST_VALUE_SYMBOL || _la===SQLSelectParser.LAST_VALUE_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 1406; - this.exprWithParentheses(); - this.state = 1408; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.IGNORE_SYMBOL || _la===SQLSelectParser.RESPECT_SYMBOL) { - this.state = 1407; - this.nullTreatment(); - } - - this.state = 1410; - this.windowingClause(); - break; - case SQLSelectParser.NTH_VALUE_SYMBOL: - this.enterOuterAlt(localctx, 5); - this.state = 1412; - this.match(SQLSelectParser.NTH_VALUE_SYMBOL); - this.state = 1413; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1414; - this.expr(0); - this.state = 1415; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1416; - this.simpleExpr(0); - this.state = 1417; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - this.state = 1420; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.FROM_SYMBOL) { - this.state = 1418; - this.match(SQLSelectParser.FROM_SYMBOL); - this.state = 1419; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.FIRST_SYMBOL || _la===SQLSelectParser.LAST_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - } - - this.state = 1423; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.IGNORE_SYMBOL || _la===SQLSelectParser.RESPECT_SYMBOL) { - this.state = 1422; - this.nullTreatment(); - } - - this.state = 1425; - this.windowingClause(); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - windowingClause() { - let localctx = new WindowingClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 172, SQLSelectParser.RULE_windowingClause); - try { - this.enterOuterAlt(localctx, 1); - this.state = 1429; - this.match(SQLSelectParser.OVER_SYMBOL); - this.state = 1432; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.TINYINT_SYMBOL: - case SQLSelectParser.SMALLINT_SYMBOL: - case SQLSelectParser.MEDIUMINT_SYMBOL: - case SQLSelectParser.BYTE_INT_SYMBOL: - case SQLSelectParser.INT_SYMBOL: - case SQLSelectParser.BIGINT_SYMBOL: - case SQLSelectParser.SECOND_SYMBOL: - case SQLSelectParser.MINUTE_SYMBOL: - case SQLSelectParser.HOUR_SYMBOL: - case SQLSelectParser.DAY_SYMBOL: - case SQLSelectParser.WEEK_SYMBOL: - case SQLSelectParser.MONTH_SYMBOL: - case SQLSelectParser.QUARTER_SYMBOL: - case SQLSelectParser.YEAR_SYMBOL: - case SQLSelectParser.DEFAULT_SYMBOL: - case SQLSelectParser.UNION_SYMBOL: - case SQLSelectParser.SELECT_SYMBOL: - case SQLSelectParser.ALL_SYMBOL: - case SQLSelectParser.DISTINCT_SYMBOL: - case SQLSelectParser.STRAIGHT_JOIN_SYMBOL: - case SQLSelectParser.HIGH_PRIORITY_SYMBOL: - case SQLSelectParser.SQL_SMALL_RESULT_SYMBOL: - case SQLSelectParser.SQL_BIG_RESULT_SYMBOL: - case SQLSelectParser.SQL_BUFFER_RESULT_SYMBOL: - case SQLSelectParser.SQL_CALC_FOUND_ROWS_SYMBOL: - case SQLSelectParser.LIMIT_SYMBOL: - case SQLSelectParser.OFFSET_SYMBOL: - case SQLSelectParser.INTO_SYMBOL: - case SQLSelectParser.OUTFILE_SYMBOL: - case SQLSelectParser.DUMPFILE_SYMBOL: - case SQLSelectParser.PROCEDURE_SYMBOL: - case SQLSelectParser.ANALYSE_SYMBOL: - case SQLSelectParser.HAVING_SYMBOL: - case SQLSelectParser.WINDOW_SYMBOL: - case SQLSelectParser.AS_SYMBOL: - case SQLSelectParser.PARTITION_SYMBOL: - case SQLSelectParser.BY_SYMBOL: - case SQLSelectParser.ROWS_SYMBOL: - case SQLSelectParser.RANGE_SYMBOL: - case SQLSelectParser.GROUPS_SYMBOL: - case SQLSelectParser.UNBOUNDED_SYMBOL: - case SQLSelectParser.PRECEDING_SYMBOL: - case SQLSelectParser.INTERVAL_SYMBOL: - case SQLSelectParser.CURRENT_SYMBOL: - case SQLSelectParser.ROW_SYMBOL: - case SQLSelectParser.BETWEEN_SYMBOL: - case SQLSelectParser.AND_SYMBOL: - case SQLSelectParser.FOLLOWING_SYMBOL: - case SQLSelectParser.EXCLUDE_SYMBOL: - case SQLSelectParser.GROUP_SYMBOL: - case SQLSelectParser.TIES_SYMBOL: - case SQLSelectParser.NO_SYMBOL: - case SQLSelectParser.OTHERS_SYMBOL: - case SQLSelectParser.WITH_SYMBOL: - case SQLSelectParser.WITHOUT_SYMBOL: - case SQLSelectParser.RECURSIVE_SYMBOL: - case SQLSelectParser.ROLLUP_SYMBOL: - case SQLSelectParser.CUBE_SYMBOL: - case SQLSelectParser.ORDER_SYMBOL: - case SQLSelectParser.ASC_SYMBOL: - case SQLSelectParser.DESC_SYMBOL: - case SQLSelectParser.FROM_SYMBOL: - case SQLSelectParser.DUAL_SYMBOL: - case SQLSelectParser.VALUES_SYMBOL: - case SQLSelectParser.TABLE_SYMBOL: - case SQLSelectParser.SQL_NO_CACHE_SYMBOL: - case SQLSelectParser.SQL_CACHE_SYMBOL: - case SQLSelectParser.MAX_STATEMENT_TIME_SYMBOL: - case SQLSelectParser.FOR_SYMBOL: - case SQLSelectParser.OF_SYMBOL: - case SQLSelectParser.LOCK_SYMBOL: - case SQLSelectParser.IN_SYMBOL: - case SQLSelectParser.SHARE_SYMBOL: - case SQLSelectParser.MODE_SYMBOL: - case SQLSelectParser.UPDATE_SYMBOL: - case SQLSelectParser.SKIP_SYMBOL: - case SQLSelectParser.LOCKED_SYMBOL: - case SQLSelectParser.NOWAIT_SYMBOL: - case SQLSelectParser.WHERE_SYMBOL: - case SQLSelectParser.OJ_SYMBOL: - case SQLSelectParser.ON_SYMBOL: - case SQLSelectParser.USING_SYMBOL: - case SQLSelectParser.NATURAL_SYMBOL: - case SQLSelectParser.INNER_SYMBOL: - case SQLSelectParser.JOIN_SYMBOL: - case SQLSelectParser.LEFT_SYMBOL: - case SQLSelectParser.RIGHT_SYMBOL: - case SQLSelectParser.OUTER_SYMBOL: - case SQLSelectParser.CROSS_SYMBOL: - case SQLSelectParser.LATERAL_SYMBOL: - case SQLSelectParser.JSON_TABLE_SYMBOL: - case SQLSelectParser.COLUMNS_SYMBOL: - case SQLSelectParser.ORDINALITY_SYMBOL: - case SQLSelectParser.EXISTS_SYMBOL: - case SQLSelectParser.PATH_SYMBOL: - case SQLSelectParser.NESTED_SYMBOL: - case SQLSelectParser.EMPTY_SYMBOL: - case SQLSelectParser.ERROR_SYMBOL: - case SQLSelectParser.NULL_SYMBOL: - case SQLSelectParser.USE_SYMBOL: - case SQLSelectParser.FORCE_SYMBOL: - case SQLSelectParser.IGNORE_SYMBOL: - case SQLSelectParser.KEY_SYMBOL: - case SQLSelectParser.INDEX_SYMBOL: - case SQLSelectParser.PRIMARY_SYMBOL: - case SQLSelectParser.IS_SYMBOL: - case SQLSelectParser.TRUE_SYMBOL: - case SQLSelectParser.FALSE_SYMBOL: - case SQLSelectParser.UNKNOWN_SYMBOL: - case SQLSelectParser.NOT_SYMBOL: - case SQLSelectParser.XOR_SYMBOL: - case SQLSelectParser.OR_SYMBOL: - case SQLSelectParser.ANY_SYMBOL: - case SQLSelectParser.MEMBER_SYMBOL: - case SQLSelectParser.SOUNDS_SYMBOL: - case SQLSelectParser.LIKE_SYMBOL: - case SQLSelectParser.ESCAPE_SYMBOL: - case SQLSelectParser.REGEXP_SYMBOL: - case SQLSelectParser.DIV_SYMBOL: - case SQLSelectParser.MOD_SYMBOL: - case SQLSelectParser.MATCH_SYMBOL: - case SQLSelectParser.AGAINST_SYMBOL: - case SQLSelectParser.BINARY_SYMBOL: - case SQLSelectParser.CAST_SYMBOL: - case SQLSelectParser.ARRAY_SYMBOL: - case SQLSelectParser.CASE_SYMBOL: - case SQLSelectParser.END_SYMBOL: - case SQLSelectParser.CONVERT_SYMBOL: - case SQLSelectParser.COLLATE_SYMBOL: - case SQLSelectParser.AVG_SYMBOL: - case SQLSelectParser.BIT_AND_SYMBOL: - case SQLSelectParser.BIT_OR_SYMBOL: - case SQLSelectParser.BIT_XOR_SYMBOL: - case SQLSelectParser.COUNT_SYMBOL: - case SQLSelectParser.MIN_SYMBOL: - case SQLSelectParser.MAX_SYMBOL: - case SQLSelectParser.STD_SYMBOL: - case SQLSelectParser.VARIANCE_SYMBOL: - case SQLSelectParser.STDDEV_SAMP_SYMBOL: - case SQLSelectParser.VAR_SAMP_SYMBOL: - case SQLSelectParser.SUM_SYMBOL: - case SQLSelectParser.GROUP_CONCAT_SYMBOL: - case SQLSelectParser.SEPARATOR_SYMBOL: - case SQLSelectParser.GROUPING_SYMBOL: - case SQLSelectParser.ROW_NUMBER_SYMBOL: - case SQLSelectParser.RANK_SYMBOL: - case SQLSelectParser.DENSE_RANK_SYMBOL: - case SQLSelectParser.CUME_DIST_SYMBOL: - case SQLSelectParser.PERCENT_RANK_SYMBOL: - case SQLSelectParser.NTILE_SYMBOL: - case SQLSelectParser.LEAD_SYMBOL: - case SQLSelectParser.LAG_SYMBOL: - case SQLSelectParser.FIRST_VALUE_SYMBOL: - case SQLSelectParser.LAST_VALUE_SYMBOL: - case SQLSelectParser.NTH_VALUE_SYMBOL: - case SQLSelectParser.FIRST_SYMBOL: - case SQLSelectParser.LAST_SYMBOL: - case SQLSelectParser.OVER_SYMBOL: - case SQLSelectParser.RESPECT_SYMBOL: - case SQLSelectParser.NULLS_SYMBOL: - case SQLSelectParser.JSON_ARRAYAGG_SYMBOL: - case SQLSelectParser.JSON_OBJECTAGG_SYMBOL: - case SQLSelectParser.BOOLEAN_SYMBOL: - case SQLSelectParser.LANGUAGE_SYMBOL: - case SQLSelectParser.QUERY_SYMBOL: - case SQLSelectParser.EXPANSION_SYMBOL: - case SQLSelectParser.CHAR_SYMBOL: - case SQLSelectParser.CURRENT_USER_SYMBOL: - case SQLSelectParser.DATE_SYMBOL: - case SQLSelectParser.INSERT_SYMBOL: - case SQLSelectParser.TIME_SYMBOL: - case SQLSelectParser.TIMESTAMP_SYMBOL: - case SQLSelectParser.TIMESTAMP_LTZ_SYMBOL: - case SQLSelectParser.TIMESTAMP_NTZ_SYMBOL: - case SQLSelectParser.ZONE_SYMBOL: - case SQLSelectParser.USER_SYMBOL: - case SQLSelectParser.ADDDATE_SYMBOL: - case SQLSelectParser.SUBDATE_SYMBOL: - case SQLSelectParser.CURDATE_SYMBOL: - case SQLSelectParser.CURTIME_SYMBOL: - case SQLSelectParser.DATE_ADD_SYMBOL: - case SQLSelectParser.DATE_SUB_SYMBOL: - case SQLSelectParser.EXTRACT_SYMBOL: - case SQLSelectParser.GET_FORMAT_SYMBOL: - case SQLSelectParser.NOW_SYMBOL: - case SQLSelectParser.POSITION_SYMBOL: - case SQLSelectParser.SYSDATE_SYMBOL: - case SQLSelectParser.TIMESTAMP_ADD_SYMBOL: - case SQLSelectParser.TIMESTAMP_DIFF_SYMBOL: - case SQLSelectParser.UTC_DATE_SYMBOL: - case SQLSelectParser.UTC_TIME_SYMBOL: - case SQLSelectParser.UTC_TIMESTAMP_SYMBOL: - case SQLSelectParser.ASCII_SYMBOL: - case SQLSelectParser.CHARSET_SYMBOL: - case SQLSelectParser.COALESCE_SYMBOL: - case SQLSelectParser.COLLATION_SYMBOL: - case SQLSelectParser.DATABASE_SYMBOL: - case SQLSelectParser.IF_SYMBOL: - case SQLSelectParser.FORMAT_SYMBOL: - case SQLSelectParser.MICROSECOND_SYMBOL: - case SQLSelectParser.OLD_PASSWORD_SYMBOL: - case SQLSelectParser.PASSWORD_SYMBOL: - case SQLSelectParser.REPEAT_SYMBOL: - case SQLSelectParser.REPLACE_SYMBOL: - case SQLSelectParser.REVERSE_SYMBOL: - case SQLSelectParser.ROW_COUNT_SYMBOL: - case SQLSelectParser.TRUNCATE_SYMBOL: - case SQLSelectParser.WEIGHT_STRING_SYMBOL: - case SQLSelectParser.CONTAINS_SYMBOL: - case SQLSelectParser.GEOMETRYCOLLECTION_SYMBOL: - case SQLSelectParser.LINESTRING_SYMBOL: - case SQLSelectParser.MULTILINESTRING_SYMBOL: - case SQLSelectParser.MULTIPOINT_SYMBOL: - case SQLSelectParser.MULTIPOLYGON_SYMBOL: - case SQLSelectParser.POINT_SYMBOL: - case SQLSelectParser.POLYGON_SYMBOL: - case SQLSelectParser.LEVEL_SYMBOL: - case SQLSelectParser.DATETIME_SYMBOL: - case SQLSelectParser.TRIM_SYMBOL: - case SQLSelectParser.LEADING_SYMBOL: - case SQLSelectParser.TRAILING_SYMBOL: - case SQLSelectParser.BOTH_SYMBOL: - case SQLSelectParser.STRING_SYMBOL: - case SQLSelectParser.SUBSTRING_SYMBOL: - case SQLSelectParser.WHEN_SYMBOL: - case SQLSelectParser.THEN_SYMBOL: - case SQLSelectParser.ELSE_SYMBOL: - case SQLSelectParser.SIGNED_SYMBOL: - case SQLSelectParser.UNSIGNED_SYMBOL: - case SQLSelectParser.DECIMAL_SYMBOL: - case SQLSelectParser.JSON_SYMBOL: - case SQLSelectParser.FLOAT_SYMBOL: - case SQLSelectParser.FLOAT_SYMBOL_4: - case SQLSelectParser.FLOAT_SYMBOL_8: - case SQLSelectParser.SET_SYMBOL: - case SQLSelectParser.SECOND_MICROSECOND_SYMBOL: - case SQLSelectParser.MINUTE_MICROSECOND_SYMBOL: - case SQLSelectParser.MINUTE_SECOND_SYMBOL: - case SQLSelectParser.HOUR_MICROSECOND_SYMBOL: - case SQLSelectParser.HOUR_SECOND_SYMBOL: - case SQLSelectParser.HOUR_MINUTE_SYMBOL: - case SQLSelectParser.DAY_MICROSECOND_SYMBOL: - case SQLSelectParser.DAY_SECOND_SYMBOL: - case SQLSelectParser.DAY_MINUTE_SYMBOL: - case SQLSelectParser.DAY_HOUR_SYMBOL: - case SQLSelectParser.YEAR_MONTH_SYMBOL: - case SQLSelectParser.BTREE_SYMBOL: - case SQLSelectParser.RTREE_SYMBOL: - case SQLSelectParser.HASH_SYMBOL: - case SQLSelectParser.REAL_SYMBOL: - case SQLSelectParser.DOUBLE_SYMBOL: - case SQLSelectParser.PRECISION_SYMBOL: - case SQLSelectParser.NUMERIC_SYMBOL: - case SQLSelectParser.NUMBER_SYMBOL: - case SQLSelectParser.FIXED_SYMBOL: - case SQLSelectParser.BIT_SYMBOL: - case SQLSelectParser.BOOL_SYMBOL: - case SQLSelectParser.VARYING_SYMBOL: - case SQLSelectParser.VARCHAR_SYMBOL: - case SQLSelectParser.NATIONAL_SYMBOL: - case SQLSelectParser.NVARCHAR_SYMBOL: - case SQLSelectParser.NCHAR_SYMBOL: - case SQLSelectParser.VARBINARY_SYMBOL: - case SQLSelectParser.TINYBLOB_SYMBOL: - case SQLSelectParser.BLOB_SYMBOL: - case SQLSelectParser.MEDIUMBLOB_SYMBOL: - case SQLSelectParser.LONGBLOB_SYMBOL: - case SQLSelectParser.LONG_SYMBOL: - case SQLSelectParser.TINYTEXT_SYMBOL: - case SQLSelectParser.TEXT_SYMBOL: - case SQLSelectParser.MEDIUMTEXT_SYMBOL: - case SQLSelectParser.LONGTEXT_SYMBOL: - case SQLSelectParser.ENUM_SYMBOL: - case SQLSelectParser.SERIAL_SYMBOL: - case SQLSelectParser.GEOMETRY_SYMBOL: - case SQLSelectParser.ZEROFILL_SYMBOL: - case SQLSelectParser.BYTE_SYMBOL: - case SQLSelectParser.UNICODE_SYMBOL: - case SQLSelectParser.TERMINATED_SYMBOL: - case SQLSelectParser.OPTIONALLY_SYMBOL: - case SQLSelectParser.ENCLOSED_SYMBOL: - case SQLSelectParser.ESCAPED_SYMBOL: - case SQLSelectParser.LINES_SYMBOL: - case SQLSelectParser.STARTING_SYMBOL: - case SQLSelectParser.GLOBAL_SYMBOL: - case SQLSelectParser.LOCAL_SYMBOL: - case SQLSelectParser.SESSION_SYMBOL: - case SQLSelectParser.VARIANT_SYMBOL: - case SQLSelectParser.OBJECT_SYMBOL: - case SQLSelectParser.GEOGRAPHY_SYMBOL: - case SQLSelectParser.IDENTIFIER: - case SQLSelectParser.BACK_TICK_QUOTED_ID: - case SQLSelectParser.DOUBLE_QUOTED_TEXT: - case SQLSelectParser.SINGLE_QUOTED_TEXT: - case SQLSelectParser.BRACKET_QUOTED_TEXT: - this.state = 1430; - this.identifier(); - break; - case SQLSelectParser.OPEN_PAR_SYMBOL: - this.state = 1431; - this.windowSpec(); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - leadLagInfo() { - let localctx = new LeadLagInfoContext(this, this._ctx, this.state); - this.enterRule(localctx, 174, SQLSelectParser.RULE_leadLagInfo); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 1434; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1437; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.INT_NUMBER: - case SQLSelectParser.DECIMAL_NUMBER: - case SQLSelectParser.FLOAT_NUMBER: - this.state = 1435; - this.ulonglong_number(); - break; - case SQLSelectParser.PARAM_MARKER: - this.state = 1436; - this.match(SQLSelectParser.PARAM_MARKER); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - this.state = 1441; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.COMMA_SYMBOL) { - this.state = 1439; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1440; - this.expr(0); - } - - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - nullTreatment() { - let localctx = new NullTreatmentContext(this, this._ctx, this.state); - this.enterRule(localctx, 176, SQLSelectParser.RULE_nullTreatment); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 1443; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.IGNORE_SYMBOL || _la===SQLSelectParser.RESPECT_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 1444; - this.match(SQLSelectParser.NULLS_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - jsonFunction() { - let localctx = new JsonFunctionContext(this, this._ctx, this.state); - this.enterRule(localctx, 178, SQLSelectParser.RULE_jsonFunction); - try { - this.state = 1462; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.JSON_ARRAYAGG_SYMBOL: - this.enterOuterAlt(localctx, 1); - this.state = 1446; - this.match(SQLSelectParser.JSON_ARRAYAGG_SYMBOL); - this.state = 1447; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1448; - this.inSumExpr(); - this.state = 1449; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - this.state = 1451; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,181,this._ctx); - if(la_===1) { - this.state = 1450; - this.windowingClause(); - - } - break; - case SQLSelectParser.JSON_OBJECTAGG_SYMBOL: - this.enterOuterAlt(localctx, 2); - this.state = 1453; - this.match(SQLSelectParser.JSON_OBJECTAGG_SYMBOL); - this.state = 1454; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1455; - this.inSumExpr(); - this.state = 1456; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1457; - this.inSumExpr(); - this.state = 1458; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - this.state = 1460; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,182,this._ctx); - if(la_===1) { - this.state = 1459; - this.windowingClause(); - - } - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - inSumExpr() { - let localctx = new InSumExprContext(this, this._ctx, this.state); - this.enterRule(localctx, 180, SQLSelectParser.RULE_inSumExpr); - try { - this.enterOuterAlt(localctx, 1); - this.state = 1465; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,184,this._ctx); - if(la_===1) { - this.state = 1464; - this.match(SQLSelectParser.ALL_SYMBOL); - - } - this.state = 1467; - this.expr(0); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - identListArg() { - let localctx = new IdentListArgContext(this, this._ctx, this.state); - this.enterRule(localctx, 182, SQLSelectParser.RULE_identListArg); - try { - this.state = 1474; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.TINYINT_SYMBOL: - case SQLSelectParser.SMALLINT_SYMBOL: - case SQLSelectParser.MEDIUMINT_SYMBOL: - case SQLSelectParser.BYTE_INT_SYMBOL: - case SQLSelectParser.INT_SYMBOL: - case SQLSelectParser.BIGINT_SYMBOL: - case SQLSelectParser.SECOND_SYMBOL: - case SQLSelectParser.MINUTE_SYMBOL: - case SQLSelectParser.HOUR_SYMBOL: - case SQLSelectParser.DAY_SYMBOL: - case SQLSelectParser.WEEK_SYMBOL: - case SQLSelectParser.MONTH_SYMBOL: - case SQLSelectParser.QUARTER_SYMBOL: - case SQLSelectParser.YEAR_SYMBOL: - case SQLSelectParser.DEFAULT_SYMBOL: - case SQLSelectParser.UNION_SYMBOL: - case SQLSelectParser.SELECT_SYMBOL: - case SQLSelectParser.ALL_SYMBOL: - case SQLSelectParser.DISTINCT_SYMBOL: - case SQLSelectParser.STRAIGHT_JOIN_SYMBOL: - case SQLSelectParser.HIGH_PRIORITY_SYMBOL: - case SQLSelectParser.SQL_SMALL_RESULT_SYMBOL: - case SQLSelectParser.SQL_BIG_RESULT_SYMBOL: - case SQLSelectParser.SQL_BUFFER_RESULT_SYMBOL: - case SQLSelectParser.SQL_CALC_FOUND_ROWS_SYMBOL: - case SQLSelectParser.LIMIT_SYMBOL: - case SQLSelectParser.OFFSET_SYMBOL: - case SQLSelectParser.INTO_SYMBOL: - case SQLSelectParser.OUTFILE_SYMBOL: - case SQLSelectParser.DUMPFILE_SYMBOL: - case SQLSelectParser.PROCEDURE_SYMBOL: - case SQLSelectParser.ANALYSE_SYMBOL: - case SQLSelectParser.HAVING_SYMBOL: - case SQLSelectParser.WINDOW_SYMBOL: - case SQLSelectParser.AS_SYMBOL: - case SQLSelectParser.PARTITION_SYMBOL: - case SQLSelectParser.BY_SYMBOL: - case SQLSelectParser.ROWS_SYMBOL: - case SQLSelectParser.RANGE_SYMBOL: - case SQLSelectParser.GROUPS_SYMBOL: - case SQLSelectParser.UNBOUNDED_SYMBOL: - case SQLSelectParser.PRECEDING_SYMBOL: - case SQLSelectParser.INTERVAL_SYMBOL: - case SQLSelectParser.CURRENT_SYMBOL: - case SQLSelectParser.ROW_SYMBOL: - case SQLSelectParser.BETWEEN_SYMBOL: - case SQLSelectParser.AND_SYMBOL: - case SQLSelectParser.FOLLOWING_SYMBOL: - case SQLSelectParser.EXCLUDE_SYMBOL: - case SQLSelectParser.GROUP_SYMBOL: - case SQLSelectParser.TIES_SYMBOL: - case SQLSelectParser.NO_SYMBOL: - case SQLSelectParser.OTHERS_SYMBOL: - case SQLSelectParser.WITH_SYMBOL: - case SQLSelectParser.WITHOUT_SYMBOL: - case SQLSelectParser.RECURSIVE_SYMBOL: - case SQLSelectParser.ROLLUP_SYMBOL: - case SQLSelectParser.CUBE_SYMBOL: - case SQLSelectParser.ORDER_SYMBOL: - case SQLSelectParser.ASC_SYMBOL: - case SQLSelectParser.DESC_SYMBOL: - case SQLSelectParser.FROM_SYMBOL: - case SQLSelectParser.DUAL_SYMBOL: - case SQLSelectParser.VALUES_SYMBOL: - case SQLSelectParser.TABLE_SYMBOL: - case SQLSelectParser.SQL_NO_CACHE_SYMBOL: - case SQLSelectParser.SQL_CACHE_SYMBOL: - case SQLSelectParser.MAX_STATEMENT_TIME_SYMBOL: - case SQLSelectParser.FOR_SYMBOL: - case SQLSelectParser.OF_SYMBOL: - case SQLSelectParser.LOCK_SYMBOL: - case SQLSelectParser.IN_SYMBOL: - case SQLSelectParser.SHARE_SYMBOL: - case SQLSelectParser.MODE_SYMBOL: - case SQLSelectParser.UPDATE_SYMBOL: - case SQLSelectParser.SKIP_SYMBOL: - case SQLSelectParser.LOCKED_SYMBOL: - case SQLSelectParser.NOWAIT_SYMBOL: - case SQLSelectParser.WHERE_SYMBOL: - case SQLSelectParser.OJ_SYMBOL: - case SQLSelectParser.ON_SYMBOL: - case SQLSelectParser.USING_SYMBOL: - case SQLSelectParser.NATURAL_SYMBOL: - case SQLSelectParser.INNER_SYMBOL: - case SQLSelectParser.JOIN_SYMBOL: - case SQLSelectParser.LEFT_SYMBOL: - case SQLSelectParser.RIGHT_SYMBOL: - case SQLSelectParser.OUTER_SYMBOL: - case SQLSelectParser.CROSS_SYMBOL: - case SQLSelectParser.LATERAL_SYMBOL: - case SQLSelectParser.JSON_TABLE_SYMBOL: - case SQLSelectParser.COLUMNS_SYMBOL: - case SQLSelectParser.ORDINALITY_SYMBOL: - case SQLSelectParser.EXISTS_SYMBOL: - case SQLSelectParser.PATH_SYMBOL: - case SQLSelectParser.NESTED_SYMBOL: - case SQLSelectParser.EMPTY_SYMBOL: - case SQLSelectParser.ERROR_SYMBOL: - case SQLSelectParser.NULL_SYMBOL: - case SQLSelectParser.USE_SYMBOL: - case SQLSelectParser.FORCE_SYMBOL: - case SQLSelectParser.IGNORE_SYMBOL: - case SQLSelectParser.KEY_SYMBOL: - case SQLSelectParser.INDEX_SYMBOL: - case SQLSelectParser.PRIMARY_SYMBOL: - case SQLSelectParser.IS_SYMBOL: - case SQLSelectParser.TRUE_SYMBOL: - case SQLSelectParser.FALSE_SYMBOL: - case SQLSelectParser.UNKNOWN_SYMBOL: - case SQLSelectParser.NOT_SYMBOL: - case SQLSelectParser.XOR_SYMBOL: - case SQLSelectParser.OR_SYMBOL: - case SQLSelectParser.ANY_SYMBOL: - case SQLSelectParser.MEMBER_SYMBOL: - case SQLSelectParser.SOUNDS_SYMBOL: - case SQLSelectParser.LIKE_SYMBOL: - case SQLSelectParser.ESCAPE_SYMBOL: - case SQLSelectParser.REGEXP_SYMBOL: - case SQLSelectParser.DIV_SYMBOL: - case SQLSelectParser.MOD_SYMBOL: - case SQLSelectParser.MATCH_SYMBOL: - case SQLSelectParser.AGAINST_SYMBOL: - case SQLSelectParser.BINARY_SYMBOL: - case SQLSelectParser.CAST_SYMBOL: - case SQLSelectParser.ARRAY_SYMBOL: - case SQLSelectParser.CASE_SYMBOL: - case SQLSelectParser.END_SYMBOL: - case SQLSelectParser.CONVERT_SYMBOL: - case SQLSelectParser.COLLATE_SYMBOL: - case SQLSelectParser.AVG_SYMBOL: - case SQLSelectParser.BIT_AND_SYMBOL: - case SQLSelectParser.BIT_OR_SYMBOL: - case SQLSelectParser.BIT_XOR_SYMBOL: - case SQLSelectParser.COUNT_SYMBOL: - case SQLSelectParser.MIN_SYMBOL: - case SQLSelectParser.MAX_SYMBOL: - case SQLSelectParser.STD_SYMBOL: - case SQLSelectParser.VARIANCE_SYMBOL: - case SQLSelectParser.STDDEV_SAMP_SYMBOL: - case SQLSelectParser.VAR_SAMP_SYMBOL: - case SQLSelectParser.SUM_SYMBOL: - case SQLSelectParser.GROUP_CONCAT_SYMBOL: - case SQLSelectParser.SEPARATOR_SYMBOL: - case SQLSelectParser.GROUPING_SYMBOL: - case SQLSelectParser.ROW_NUMBER_SYMBOL: - case SQLSelectParser.RANK_SYMBOL: - case SQLSelectParser.DENSE_RANK_SYMBOL: - case SQLSelectParser.CUME_DIST_SYMBOL: - case SQLSelectParser.PERCENT_RANK_SYMBOL: - case SQLSelectParser.NTILE_SYMBOL: - case SQLSelectParser.LEAD_SYMBOL: - case SQLSelectParser.LAG_SYMBOL: - case SQLSelectParser.FIRST_VALUE_SYMBOL: - case SQLSelectParser.LAST_VALUE_SYMBOL: - case SQLSelectParser.NTH_VALUE_SYMBOL: - case SQLSelectParser.FIRST_SYMBOL: - case SQLSelectParser.LAST_SYMBOL: - case SQLSelectParser.OVER_SYMBOL: - case SQLSelectParser.RESPECT_SYMBOL: - case SQLSelectParser.NULLS_SYMBOL: - case SQLSelectParser.JSON_ARRAYAGG_SYMBOL: - case SQLSelectParser.JSON_OBJECTAGG_SYMBOL: - case SQLSelectParser.BOOLEAN_SYMBOL: - case SQLSelectParser.LANGUAGE_SYMBOL: - case SQLSelectParser.QUERY_SYMBOL: - case SQLSelectParser.EXPANSION_SYMBOL: - case SQLSelectParser.CHAR_SYMBOL: - case SQLSelectParser.CURRENT_USER_SYMBOL: - case SQLSelectParser.DATE_SYMBOL: - case SQLSelectParser.INSERT_SYMBOL: - case SQLSelectParser.TIME_SYMBOL: - case SQLSelectParser.TIMESTAMP_SYMBOL: - case SQLSelectParser.TIMESTAMP_LTZ_SYMBOL: - case SQLSelectParser.TIMESTAMP_NTZ_SYMBOL: - case SQLSelectParser.ZONE_SYMBOL: - case SQLSelectParser.USER_SYMBOL: - case SQLSelectParser.ADDDATE_SYMBOL: - case SQLSelectParser.SUBDATE_SYMBOL: - case SQLSelectParser.CURDATE_SYMBOL: - case SQLSelectParser.CURTIME_SYMBOL: - case SQLSelectParser.DATE_ADD_SYMBOL: - case SQLSelectParser.DATE_SUB_SYMBOL: - case SQLSelectParser.EXTRACT_SYMBOL: - case SQLSelectParser.GET_FORMAT_SYMBOL: - case SQLSelectParser.NOW_SYMBOL: - case SQLSelectParser.POSITION_SYMBOL: - case SQLSelectParser.SYSDATE_SYMBOL: - case SQLSelectParser.TIMESTAMP_ADD_SYMBOL: - case SQLSelectParser.TIMESTAMP_DIFF_SYMBOL: - case SQLSelectParser.UTC_DATE_SYMBOL: - case SQLSelectParser.UTC_TIME_SYMBOL: - case SQLSelectParser.UTC_TIMESTAMP_SYMBOL: - case SQLSelectParser.ASCII_SYMBOL: - case SQLSelectParser.CHARSET_SYMBOL: - case SQLSelectParser.COALESCE_SYMBOL: - case SQLSelectParser.COLLATION_SYMBOL: - case SQLSelectParser.DATABASE_SYMBOL: - case SQLSelectParser.IF_SYMBOL: - case SQLSelectParser.FORMAT_SYMBOL: - case SQLSelectParser.MICROSECOND_SYMBOL: - case SQLSelectParser.OLD_PASSWORD_SYMBOL: - case SQLSelectParser.PASSWORD_SYMBOL: - case SQLSelectParser.REPEAT_SYMBOL: - case SQLSelectParser.REPLACE_SYMBOL: - case SQLSelectParser.REVERSE_SYMBOL: - case SQLSelectParser.ROW_COUNT_SYMBOL: - case SQLSelectParser.TRUNCATE_SYMBOL: - case SQLSelectParser.WEIGHT_STRING_SYMBOL: - case SQLSelectParser.CONTAINS_SYMBOL: - case SQLSelectParser.GEOMETRYCOLLECTION_SYMBOL: - case SQLSelectParser.LINESTRING_SYMBOL: - case SQLSelectParser.MULTILINESTRING_SYMBOL: - case SQLSelectParser.MULTIPOINT_SYMBOL: - case SQLSelectParser.MULTIPOLYGON_SYMBOL: - case SQLSelectParser.POINT_SYMBOL: - case SQLSelectParser.POLYGON_SYMBOL: - case SQLSelectParser.LEVEL_SYMBOL: - case SQLSelectParser.DATETIME_SYMBOL: - case SQLSelectParser.TRIM_SYMBOL: - case SQLSelectParser.LEADING_SYMBOL: - case SQLSelectParser.TRAILING_SYMBOL: - case SQLSelectParser.BOTH_SYMBOL: - case SQLSelectParser.STRING_SYMBOL: - case SQLSelectParser.SUBSTRING_SYMBOL: - case SQLSelectParser.WHEN_SYMBOL: - case SQLSelectParser.THEN_SYMBOL: - case SQLSelectParser.ELSE_SYMBOL: - case SQLSelectParser.SIGNED_SYMBOL: - case SQLSelectParser.UNSIGNED_SYMBOL: - case SQLSelectParser.DECIMAL_SYMBOL: - case SQLSelectParser.JSON_SYMBOL: - case SQLSelectParser.FLOAT_SYMBOL: - case SQLSelectParser.FLOAT_SYMBOL_4: - case SQLSelectParser.FLOAT_SYMBOL_8: - case SQLSelectParser.SET_SYMBOL: - case SQLSelectParser.SECOND_MICROSECOND_SYMBOL: - case SQLSelectParser.MINUTE_MICROSECOND_SYMBOL: - case SQLSelectParser.MINUTE_SECOND_SYMBOL: - case SQLSelectParser.HOUR_MICROSECOND_SYMBOL: - case SQLSelectParser.HOUR_SECOND_SYMBOL: - case SQLSelectParser.HOUR_MINUTE_SYMBOL: - case SQLSelectParser.DAY_MICROSECOND_SYMBOL: - case SQLSelectParser.DAY_SECOND_SYMBOL: - case SQLSelectParser.DAY_MINUTE_SYMBOL: - case SQLSelectParser.DAY_HOUR_SYMBOL: - case SQLSelectParser.YEAR_MONTH_SYMBOL: - case SQLSelectParser.BTREE_SYMBOL: - case SQLSelectParser.RTREE_SYMBOL: - case SQLSelectParser.HASH_SYMBOL: - case SQLSelectParser.REAL_SYMBOL: - case SQLSelectParser.DOUBLE_SYMBOL: - case SQLSelectParser.PRECISION_SYMBOL: - case SQLSelectParser.NUMERIC_SYMBOL: - case SQLSelectParser.NUMBER_SYMBOL: - case SQLSelectParser.FIXED_SYMBOL: - case SQLSelectParser.BIT_SYMBOL: - case SQLSelectParser.BOOL_SYMBOL: - case SQLSelectParser.VARYING_SYMBOL: - case SQLSelectParser.VARCHAR_SYMBOL: - case SQLSelectParser.NATIONAL_SYMBOL: - case SQLSelectParser.NVARCHAR_SYMBOL: - case SQLSelectParser.NCHAR_SYMBOL: - case SQLSelectParser.VARBINARY_SYMBOL: - case SQLSelectParser.TINYBLOB_SYMBOL: - case SQLSelectParser.BLOB_SYMBOL: - case SQLSelectParser.MEDIUMBLOB_SYMBOL: - case SQLSelectParser.LONGBLOB_SYMBOL: - case SQLSelectParser.LONG_SYMBOL: - case SQLSelectParser.TINYTEXT_SYMBOL: - case SQLSelectParser.TEXT_SYMBOL: - case SQLSelectParser.MEDIUMTEXT_SYMBOL: - case SQLSelectParser.LONGTEXT_SYMBOL: - case SQLSelectParser.ENUM_SYMBOL: - case SQLSelectParser.SERIAL_SYMBOL: - case SQLSelectParser.GEOMETRY_SYMBOL: - case SQLSelectParser.ZEROFILL_SYMBOL: - case SQLSelectParser.BYTE_SYMBOL: - case SQLSelectParser.UNICODE_SYMBOL: - case SQLSelectParser.TERMINATED_SYMBOL: - case SQLSelectParser.OPTIONALLY_SYMBOL: - case SQLSelectParser.ENCLOSED_SYMBOL: - case SQLSelectParser.ESCAPED_SYMBOL: - case SQLSelectParser.LINES_SYMBOL: - case SQLSelectParser.STARTING_SYMBOL: - case SQLSelectParser.GLOBAL_SYMBOL: - case SQLSelectParser.LOCAL_SYMBOL: - case SQLSelectParser.SESSION_SYMBOL: - case SQLSelectParser.VARIANT_SYMBOL: - case SQLSelectParser.OBJECT_SYMBOL: - case SQLSelectParser.GEOGRAPHY_SYMBOL: - case SQLSelectParser.IDENTIFIER: - case SQLSelectParser.BACK_TICK_QUOTED_ID: - case SQLSelectParser.DOUBLE_QUOTED_TEXT: - case SQLSelectParser.SINGLE_QUOTED_TEXT: - case SQLSelectParser.BRACKET_QUOTED_TEXT: - this.enterOuterAlt(localctx, 1); - this.state = 1469; - this.identList(); - break; - case SQLSelectParser.OPEN_PAR_SYMBOL: - this.enterOuterAlt(localctx, 2); - this.state = 1470; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1471; - this.identList(); - this.state = 1472; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - identList() { - let localctx = new IdentListContext(this, this._ctx, this.state); - this.enterRule(localctx, 184, SQLSelectParser.RULE_identList); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 1476; - this.qualifiedIdentifier(); - this.state = 1481; - this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===SQLSelectParser.COMMA_SYMBOL) { - this.state = 1477; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1478; - this.qualifiedIdentifier(); - this.state = 1483; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - fulltextOptions() { - let localctx = new FulltextOptionsContext(this, this._ctx, this.state); - this.enterRule(localctx, 186, SQLSelectParser.RULE_fulltextOptions); - var _la = 0; // Token type - try { - this.state = 1499; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,188,this._ctx); - switch(la_) { - case 1: - this.enterOuterAlt(localctx, 1); - this.state = 1484; - this.match(SQLSelectParser.IN_SYMBOL); - this.state = 1485; - this.match(SQLSelectParser.BOOLEAN_SYMBOL); - this.state = 1486; - this.match(SQLSelectParser.MODE_SYMBOL); - break; - - case 2: - this.enterOuterAlt(localctx, 2); - this.state = 1487; - this.match(SQLSelectParser.IN_SYMBOL); - this.state = 1488; - this.match(SQLSelectParser.NATURAL_SYMBOL); - this.state = 1489; - this.match(SQLSelectParser.LANGUAGE_SYMBOL); - this.state = 1490; - this.match(SQLSelectParser.MODE_SYMBOL); - this.state = 1494; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.WITH_SYMBOL) { - this.state = 1491; - this.match(SQLSelectParser.WITH_SYMBOL); - this.state = 1492; - this.match(SQLSelectParser.QUERY_SYMBOL); - this.state = 1493; - this.match(SQLSelectParser.EXPANSION_SYMBOL); - } - - break; - - case 3: - this.enterOuterAlt(localctx, 3); - this.state = 1496; - this.match(SQLSelectParser.WITH_SYMBOL); - this.state = 1497; - this.match(SQLSelectParser.QUERY_SYMBOL); - this.state = 1498; - this.match(SQLSelectParser.EXPANSION_SYMBOL); - break; - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - runtimeFunctionCall() { - let localctx = new RuntimeFunctionCallContext(this, this._ctx, this.state); - this.enterRule(localctx, 188, SQLSelectParser.RULE_runtimeFunctionCall); - var _la = 0; // Token type - try { - this.state = 1771; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.CHAR_SYMBOL: - this.enterOuterAlt(localctx, 1); - this.state = 1501; - this.match(SQLSelectParser.CHAR_SYMBOL); - this.state = 1502; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1503; - this.exprList(); - this.state = 1506; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.USING_SYMBOL) { - this.state = 1504; - this.match(SQLSelectParser.USING_SYMBOL); - this.state = 1505; - this.charsetName(); - } - - this.state = 1508; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - case SQLSelectParser.CURRENT_USER_SYMBOL: - this.enterOuterAlt(localctx, 2); - this.state = 1510; - this.match(SQLSelectParser.CURRENT_USER_SYMBOL); - this.state = 1512; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,190,this._ctx); - if(la_===1) { - this.state = 1511; - this.parentheses(); - - } - break; - case SQLSelectParser.DATE_SYMBOL: - this.enterOuterAlt(localctx, 3); - this.state = 1514; - this.match(SQLSelectParser.DATE_SYMBOL); - this.state = 1515; - this.exprWithParentheses(); - break; - case SQLSelectParser.DAY_SYMBOL: - this.enterOuterAlt(localctx, 4); - this.state = 1516; - this.match(SQLSelectParser.DAY_SYMBOL); - this.state = 1517; - this.exprWithParentheses(); - break; - case SQLSelectParser.HOUR_SYMBOL: - this.enterOuterAlt(localctx, 5); - this.state = 1518; - this.match(SQLSelectParser.HOUR_SYMBOL); - this.state = 1519; - this.exprWithParentheses(); - break; - case SQLSelectParser.INSERT_SYMBOL: - this.enterOuterAlt(localctx, 6); - this.state = 1520; - this.match(SQLSelectParser.INSERT_SYMBOL); - this.state = 1521; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1522; - this.expr(0); - this.state = 1523; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1524; - this.expr(0); - this.state = 1525; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1526; - this.expr(0); - this.state = 1527; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1528; - this.expr(0); - this.state = 1529; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - case SQLSelectParser.INTERVAL_SYMBOL: - this.enterOuterAlt(localctx, 7); - this.state = 1531; - this.match(SQLSelectParser.INTERVAL_SYMBOL); - this.state = 1532; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1533; - this.expr(0); - this.state = 1536; - this._errHandler.sync(this); - _la = this._input.LA(1); - do { - this.state = 1534; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1535; - this.expr(0); - this.state = 1538; - this._errHandler.sync(this); - _la = this._input.LA(1); - } while(_la===SQLSelectParser.COMMA_SYMBOL); - this.state = 1540; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - case SQLSelectParser.LEFT_SYMBOL: - this.enterOuterAlt(localctx, 8); - this.state = 1542; - this.match(SQLSelectParser.LEFT_SYMBOL); - this.state = 1543; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1544; - this.expr(0); - this.state = 1545; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1546; - this.expr(0); - this.state = 1547; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - case SQLSelectParser.MINUTE_SYMBOL: - this.enterOuterAlt(localctx, 9); - this.state = 1549; - this.match(SQLSelectParser.MINUTE_SYMBOL); - this.state = 1550; - this.exprWithParentheses(); - break; - case SQLSelectParser.MONTH_SYMBOL: - this.enterOuterAlt(localctx, 10); - this.state = 1551; - this.match(SQLSelectParser.MONTH_SYMBOL); - this.state = 1552; - this.exprWithParentheses(); - break; - case SQLSelectParser.RIGHT_SYMBOL: - this.enterOuterAlt(localctx, 11); - this.state = 1553; - this.match(SQLSelectParser.RIGHT_SYMBOL); - this.state = 1554; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1555; - this.expr(0); - this.state = 1556; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1557; - this.expr(0); - this.state = 1558; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - case SQLSelectParser.SECOND_SYMBOL: - this.enterOuterAlt(localctx, 12); - this.state = 1560; - this.match(SQLSelectParser.SECOND_SYMBOL); - this.state = 1561; - this.exprWithParentheses(); - break; - case SQLSelectParser.TIME_SYMBOL: - this.enterOuterAlt(localctx, 13); - this.state = 1562; - this.match(SQLSelectParser.TIME_SYMBOL); - this.state = 1563; - this.exprWithParentheses(); - break; - case SQLSelectParser.TIMESTAMP_SYMBOL: - this.enterOuterAlt(localctx, 14); - this.state = 1564; - this.match(SQLSelectParser.TIMESTAMP_SYMBOL); - this.state = 1565; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1566; - this.expr(0); - this.state = 1569; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.COMMA_SYMBOL) { - this.state = 1567; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1568; - this.expr(0); - } - - this.state = 1571; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - case SQLSelectParser.TRIM_SYMBOL: - this.enterOuterAlt(localctx, 15); - this.state = 1573; - this.trimFunction(); - break; - case SQLSelectParser.USER_SYMBOL: - this.enterOuterAlt(localctx, 16); - this.state = 1574; - this.match(SQLSelectParser.USER_SYMBOL); - this.state = 1575; - this.parentheses(); - break; - case SQLSelectParser.VALUES_SYMBOL: - this.enterOuterAlt(localctx, 17); - this.state = 1576; - this.match(SQLSelectParser.VALUES_SYMBOL); - this.state = 1577; - this.exprWithParentheses(); - break; - case SQLSelectParser.YEAR_SYMBOL: - this.enterOuterAlt(localctx, 18); - this.state = 1578; - this.match(SQLSelectParser.YEAR_SYMBOL); - this.state = 1579; - this.exprWithParentheses(); - break; - case SQLSelectParser.ADDDATE_SYMBOL: - case SQLSelectParser.SUBDATE_SYMBOL: - this.enterOuterAlt(localctx, 19); - this.state = 1580; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.ADDDATE_SYMBOL || _la===SQLSelectParser.SUBDATE_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 1581; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1582; - this.expr(0); - this.state = 1583; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1589; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,193,this._ctx); - switch(la_) { - case 1: - this.state = 1584; - this.expr(0); - break; - - case 2: - this.state = 1585; - this.match(SQLSelectParser.INTERVAL_SYMBOL); - this.state = 1586; - this.expr(0); - this.state = 1587; - this.interval(); - break; - - } - this.state = 1591; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - case SQLSelectParser.CURDATE_SYMBOL: - this.enterOuterAlt(localctx, 20); - this.state = 1593; - this.match(SQLSelectParser.CURDATE_SYMBOL); - this.state = 1595; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,194,this._ctx); - if(la_===1) { - this.state = 1594; - this.parentheses(); - - } - break; - case SQLSelectParser.CURTIME_SYMBOL: - this.enterOuterAlt(localctx, 21); - this.state = 1597; - this.match(SQLSelectParser.CURTIME_SYMBOL); - this.state = 1599; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,195,this._ctx); - if(la_===1) { - this.state = 1598; - this.timeFunctionParameters(); - - } - break; - case SQLSelectParser.DATE_ADD_SYMBOL: - case SQLSelectParser.DATE_SUB_SYMBOL: - this.enterOuterAlt(localctx, 22); - this.state = 1601; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.DATE_ADD_SYMBOL || _la===SQLSelectParser.DATE_SUB_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 1602; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1603; - this.expr(0); - this.state = 1604; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1605; - this.match(SQLSelectParser.INTERVAL_SYMBOL); - this.state = 1606; - this.expr(0); - this.state = 1607; - this.interval(); - this.state = 1608; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - case SQLSelectParser.EXTRACT_SYMBOL: - this.enterOuterAlt(localctx, 23); - this.state = 1610; - this.match(SQLSelectParser.EXTRACT_SYMBOL); - this.state = 1611; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1612; - this.interval(); - this.state = 1613; - this.match(SQLSelectParser.FROM_SYMBOL); - this.state = 1614; - this.expr(0); - this.state = 1615; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - case SQLSelectParser.GET_FORMAT_SYMBOL: - this.enterOuterAlt(localctx, 24); - this.state = 1617; - this.match(SQLSelectParser.GET_FORMAT_SYMBOL); - this.state = 1618; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1619; - this.dateTimeTtype(); - this.state = 1620; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1621; - this.expr(0); - this.state = 1622; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - case SQLSelectParser.NOW_SYMBOL: - this.enterOuterAlt(localctx, 25); - this.state = 1624; - this.match(SQLSelectParser.NOW_SYMBOL); - this.state = 1626; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,196,this._ctx); - if(la_===1) { - this.state = 1625; - this.timeFunctionParameters(); - - } - break; - case SQLSelectParser.POSITION_SYMBOL: - this.enterOuterAlt(localctx, 26); - this.state = 1628; - this.match(SQLSelectParser.POSITION_SYMBOL); - this.state = 1629; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1630; - this.bitExpr(0); - this.state = 1631; - this.match(SQLSelectParser.IN_SYMBOL); - this.state = 1632; - this.expr(0); - this.state = 1633; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - case SQLSelectParser.SUBSTRING_SYMBOL: - this.enterOuterAlt(localctx, 27); - this.state = 1635; - this.substringFunction(); - break; - case SQLSelectParser.SYSDATE_SYMBOL: - this.enterOuterAlt(localctx, 28); - this.state = 1636; - this.match(SQLSelectParser.SYSDATE_SYMBOL); - this.state = 1638; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,197,this._ctx); - if(la_===1) { - this.state = 1637; - this.timeFunctionParameters(); - - } - break; - case SQLSelectParser.TIMESTAMP_ADD_SYMBOL: - case SQLSelectParser.TIMESTAMP_DIFF_SYMBOL: - this.enterOuterAlt(localctx, 29); - this.state = 1640; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.TIMESTAMP_ADD_SYMBOL || _la===SQLSelectParser.TIMESTAMP_DIFF_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 1641; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1642; - this.intervalTimeStamp(); - this.state = 1643; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1644; - this.expr(0); - this.state = 1645; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1646; - this.expr(0); - this.state = 1647; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - case SQLSelectParser.UTC_DATE_SYMBOL: - this.enterOuterAlt(localctx, 30); - this.state = 1649; - this.match(SQLSelectParser.UTC_DATE_SYMBOL); - this.state = 1651; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,198,this._ctx); - if(la_===1) { - this.state = 1650; - this.parentheses(); - - } - break; - case SQLSelectParser.UTC_TIME_SYMBOL: - this.enterOuterAlt(localctx, 31); - this.state = 1653; - this.match(SQLSelectParser.UTC_TIME_SYMBOL); - this.state = 1655; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,199,this._ctx); - if(la_===1) { - this.state = 1654; - this.timeFunctionParameters(); - - } - break; - case SQLSelectParser.UTC_TIMESTAMP_SYMBOL: - this.enterOuterAlt(localctx, 32); - this.state = 1657; - this.match(SQLSelectParser.UTC_TIMESTAMP_SYMBOL); - this.state = 1659; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,200,this._ctx); - if(la_===1) { - this.state = 1658; - this.timeFunctionParameters(); - - } - break; - case SQLSelectParser.ASCII_SYMBOL: - this.enterOuterAlt(localctx, 33); - this.state = 1661; - this.match(SQLSelectParser.ASCII_SYMBOL); - this.state = 1662; - this.exprWithParentheses(); - break; - case SQLSelectParser.CHARSET_SYMBOL: - this.enterOuterAlt(localctx, 34); - this.state = 1663; - this.match(SQLSelectParser.CHARSET_SYMBOL); - this.state = 1664; - this.exprWithParentheses(); - break; - case SQLSelectParser.COALESCE_SYMBOL: - this.enterOuterAlt(localctx, 35); - this.state = 1665; - this.match(SQLSelectParser.COALESCE_SYMBOL); - this.state = 1666; - this.exprListWithParentheses(); - break; - case SQLSelectParser.COLLATION_SYMBOL: - this.enterOuterAlt(localctx, 36); - this.state = 1667; - this.match(SQLSelectParser.COLLATION_SYMBOL); - this.state = 1668; - this.exprWithParentheses(); - break; - case SQLSelectParser.DATABASE_SYMBOL: - this.enterOuterAlt(localctx, 37); - this.state = 1669; - this.match(SQLSelectParser.DATABASE_SYMBOL); - this.state = 1670; - this.parentheses(); - break; - case SQLSelectParser.IF_SYMBOL: - this.enterOuterAlt(localctx, 38); - this.state = 1671; - this.match(SQLSelectParser.IF_SYMBOL); - this.state = 1672; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1673; - this.expr(0); - this.state = 1674; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1675; - this.expr(0); - this.state = 1676; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1677; - this.expr(0); - this.state = 1678; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - case SQLSelectParser.FORMAT_SYMBOL: - this.enterOuterAlt(localctx, 39); - this.state = 1680; - this.match(SQLSelectParser.FORMAT_SYMBOL); - this.state = 1681; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1682; - this.expr(0); - this.state = 1683; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1684; - this.expr(0); - this.state = 1687; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.COMMA_SYMBOL) { - this.state = 1685; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1686; - this.expr(0); - } - - this.state = 1689; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - case SQLSelectParser.MICROSECOND_SYMBOL: - this.enterOuterAlt(localctx, 40); - this.state = 1691; - this.match(SQLSelectParser.MICROSECOND_SYMBOL); - this.state = 1692; - this.exprWithParentheses(); - break; - case SQLSelectParser.MOD_SYMBOL: - this.enterOuterAlt(localctx, 41); - this.state = 1693; - this.match(SQLSelectParser.MOD_SYMBOL); - this.state = 1694; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1695; - this.expr(0); - this.state = 1696; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1697; - this.expr(0); - this.state = 1698; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - case SQLSelectParser.OLD_PASSWORD_SYMBOL: - this.enterOuterAlt(localctx, 42); - this.state = 1700; - this.match(SQLSelectParser.OLD_PASSWORD_SYMBOL); - this.state = 1701; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1702; - this.textLiteral(); - this.state = 1703; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - case SQLSelectParser.PASSWORD_SYMBOL: - this.enterOuterAlt(localctx, 43); - this.state = 1705; - this.match(SQLSelectParser.PASSWORD_SYMBOL); - this.state = 1706; - this.exprWithParentheses(); - break; - case SQLSelectParser.QUARTER_SYMBOL: - this.enterOuterAlt(localctx, 44); - this.state = 1707; - this.match(SQLSelectParser.QUARTER_SYMBOL); - this.state = 1708; - this.exprWithParentheses(); - break; - case SQLSelectParser.REPEAT_SYMBOL: - this.enterOuterAlt(localctx, 45); - this.state = 1709; - this.match(SQLSelectParser.REPEAT_SYMBOL); - this.state = 1710; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1711; - this.expr(0); - this.state = 1712; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1713; - this.expr(0); - this.state = 1714; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - case SQLSelectParser.REPLACE_SYMBOL: - this.enterOuterAlt(localctx, 46); - this.state = 1716; - this.match(SQLSelectParser.REPLACE_SYMBOL); - this.state = 1717; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1718; - this.expr(0); - this.state = 1719; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1720; - this.expr(0); - this.state = 1721; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1722; - this.expr(0); - this.state = 1723; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - case SQLSelectParser.REVERSE_SYMBOL: - this.enterOuterAlt(localctx, 47); - this.state = 1725; - this.match(SQLSelectParser.REVERSE_SYMBOL); - this.state = 1726; - this.exprWithParentheses(); - break; - case SQLSelectParser.ROW_COUNT_SYMBOL: - this.enterOuterAlt(localctx, 48); - this.state = 1727; - this.match(SQLSelectParser.ROW_COUNT_SYMBOL); - this.state = 1728; - this.parentheses(); - break; - case SQLSelectParser.TRUNCATE_SYMBOL: - this.enterOuterAlt(localctx, 49); - this.state = 1729; - this.match(SQLSelectParser.TRUNCATE_SYMBOL); - this.state = 1730; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1731; - this.expr(0); - this.state = 1732; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1733; - this.expr(0); - this.state = 1734; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - case SQLSelectParser.WEEK_SYMBOL: - this.enterOuterAlt(localctx, 50); - this.state = 1736; - this.match(SQLSelectParser.WEEK_SYMBOL); - this.state = 1737; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1738; - this.expr(0); - this.state = 1741; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.COMMA_SYMBOL) { - this.state = 1739; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1740; - this.expr(0); - } - - this.state = 1743; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - case SQLSelectParser.WEIGHT_STRING_SYMBOL: - this.enterOuterAlt(localctx, 51); - this.state = 1745; - this.match(SQLSelectParser.WEIGHT_STRING_SYMBOL); - this.state = 1746; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1747; - this.expr(0); - this.state = 1766; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,205,this._ctx); - switch(la_) { - case 1: - this.state = 1751; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.AS_SYMBOL) { - this.state = 1748; - this.match(SQLSelectParser.AS_SYMBOL); - this.state = 1749; - this.match(SQLSelectParser.CHAR_SYMBOL); - this.state = 1750; - this.wsNumCodepoints(); - } - - this.state = 1754; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.LEVEL_SYMBOL) { - this.state = 1753; - this.weightStringLevels(); - } - - break; - - case 2: - this.state = 1756; - this.match(SQLSelectParser.AS_SYMBOL); - this.state = 1757; - this.match(SQLSelectParser.BINARY_SYMBOL); - this.state = 1758; - this.wsNumCodepoints(); - break; - - case 3: - this.state = 1759; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1760; - this.ulong_number(); - this.state = 1761; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1762; - this.ulong_number(); - this.state = 1763; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1764; - this.ulong_number(); - break; - - } - this.state = 1768; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - case SQLSelectParser.CONTAINS_SYMBOL: - case SQLSelectParser.GEOMETRYCOLLECTION_SYMBOL: - case SQLSelectParser.LINESTRING_SYMBOL: - case SQLSelectParser.MULTILINESTRING_SYMBOL: - case SQLSelectParser.MULTIPOINT_SYMBOL: - case SQLSelectParser.MULTIPOLYGON_SYMBOL: - case SQLSelectParser.POINT_SYMBOL: - case SQLSelectParser.POLYGON_SYMBOL: - this.enterOuterAlt(localctx, 52); - this.state = 1770; - this.geometryFunction(); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - geometryFunction() { - let localctx = new GeometryFunctionContext(this, this._ctx, this.state); - this.enterRule(localctx, 190, SQLSelectParser.RULE_geometryFunction); - var _la = 0; // Token type - try { - this.state = 1803; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.CONTAINS_SYMBOL: - this.enterOuterAlt(localctx, 1); - this.state = 1773; - this.match(SQLSelectParser.CONTAINS_SYMBOL); - this.state = 1774; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1775; - this.expr(0); - this.state = 1776; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1777; - this.expr(0); - this.state = 1778; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - case SQLSelectParser.GEOMETRYCOLLECTION_SYMBOL: - this.enterOuterAlt(localctx, 2); - this.state = 1780; - this.match(SQLSelectParser.GEOMETRYCOLLECTION_SYMBOL); - this.state = 1781; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1783; - this._errHandler.sync(this); - _la = this._input.LA(1); - if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SQLSelectParser.PLUS_OPERATOR) | (1 << SQLSelectParser.MINUS_OPERATOR) | (1 << SQLSelectParser.LOGICAL_NOT_OPERATOR) | (1 << SQLSelectParser.BITWISE_NOT_OPERATOR) | (1 << SQLSelectParser.OPEN_PAR_SYMBOL) | (1 << SQLSelectParser.OPEN_CURLY_SYMBOL))) !== 0) || ((((_la - 36)) & ~0x1f) == 0 && ((1 << (_la - 36)) & ((1 << (SQLSelectParser.AT_SIGN_SYMBOL - 36)) | (1 << (SQLSelectParser.AT_TEXT_SUFFIX - 36)) | (1 << (SQLSelectParser.AT_AT_SIGN_SYMBOL - 36)) | (1 << (SQLSelectParser.NULL2_SYMBOL - 36)) | (1 << (SQLSelectParser.PARAM_MARKER - 36)) | (1 << (SQLSelectParser.HEX_NUMBER - 36)) | (1 << (SQLSelectParser.BIN_NUMBER - 36)) | (1 << (SQLSelectParser.INT_NUMBER - 36)) | (1 << (SQLSelectParser.DECIMAL_NUMBER - 36)) | (1 << (SQLSelectParser.FLOAT_NUMBER - 36)) | (1 << (SQLSelectParser.TINYINT_SYMBOL - 36)) | (1 << (SQLSelectParser.SMALLINT_SYMBOL - 36)) | (1 << (SQLSelectParser.MEDIUMINT_SYMBOL - 36)) | (1 << (SQLSelectParser.BYTE_INT_SYMBOL - 36)) | (1 << (SQLSelectParser.INT_SYMBOL - 36)) | (1 << (SQLSelectParser.BIGINT_SYMBOL - 36)) | (1 << (SQLSelectParser.SECOND_SYMBOL - 36)) | (1 << (SQLSelectParser.MINUTE_SYMBOL - 36)) | (1 << (SQLSelectParser.HOUR_SYMBOL - 36)) | (1 << (SQLSelectParser.DAY_SYMBOL - 36)) | (1 << (SQLSelectParser.WEEK_SYMBOL - 36)) | (1 << (SQLSelectParser.MONTH_SYMBOL - 36)) | (1 << (SQLSelectParser.QUARTER_SYMBOL - 36)) | (1 << (SQLSelectParser.YEAR_SYMBOL - 36)) | (1 << (SQLSelectParser.DEFAULT_SYMBOL - 36)) | (1 << (SQLSelectParser.UNION_SYMBOL - 36)) | (1 << (SQLSelectParser.SELECT_SYMBOL - 36)) | (1 << (SQLSelectParser.ALL_SYMBOL - 36)) | (1 << (SQLSelectParser.DISTINCT_SYMBOL - 36)) | (1 << (SQLSelectParser.STRAIGHT_JOIN_SYMBOL - 36)) | (1 << (SQLSelectParser.HIGH_PRIORITY_SYMBOL - 36)))) !== 0) || ((((_la - 68)) & ~0x1f) == 0 && ((1 << (_la - 68)) & ((1 << (SQLSelectParser.SQL_SMALL_RESULT_SYMBOL - 68)) | (1 << (SQLSelectParser.SQL_BIG_RESULT_SYMBOL - 68)) | (1 << (SQLSelectParser.SQL_BUFFER_RESULT_SYMBOL - 68)) | (1 << (SQLSelectParser.SQL_CALC_FOUND_ROWS_SYMBOL - 68)) | (1 << (SQLSelectParser.LIMIT_SYMBOL - 68)) | (1 << (SQLSelectParser.OFFSET_SYMBOL - 68)) | (1 << (SQLSelectParser.INTO_SYMBOL - 68)) | (1 << (SQLSelectParser.OUTFILE_SYMBOL - 68)) | (1 << (SQLSelectParser.DUMPFILE_SYMBOL - 68)) | (1 << (SQLSelectParser.PROCEDURE_SYMBOL - 68)) | (1 << (SQLSelectParser.ANALYSE_SYMBOL - 68)) | (1 << (SQLSelectParser.HAVING_SYMBOL - 68)) | (1 << (SQLSelectParser.WINDOW_SYMBOL - 68)) | (1 << (SQLSelectParser.AS_SYMBOL - 68)) | (1 << (SQLSelectParser.PARTITION_SYMBOL - 68)) | (1 << (SQLSelectParser.BY_SYMBOL - 68)) | (1 << (SQLSelectParser.ROWS_SYMBOL - 68)) | (1 << (SQLSelectParser.RANGE_SYMBOL - 68)) | (1 << (SQLSelectParser.GROUPS_SYMBOL - 68)) | (1 << (SQLSelectParser.UNBOUNDED_SYMBOL - 68)) | (1 << (SQLSelectParser.PRECEDING_SYMBOL - 68)) | (1 << (SQLSelectParser.INTERVAL_SYMBOL - 68)) | (1 << (SQLSelectParser.CURRENT_SYMBOL - 68)) | (1 << (SQLSelectParser.ROW_SYMBOL - 68)) | (1 << (SQLSelectParser.BETWEEN_SYMBOL - 68)) | (1 << (SQLSelectParser.AND_SYMBOL - 68)) | (1 << (SQLSelectParser.FOLLOWING_SYMBOL - 68)) | (1 << (SQLSelectParser.EXCLUDE_SYMBOL - 68)) | (1 << (SQLSelectParser.GROUP_SYMBOL - 68)) | (1 << (SQLSelectParser.TIES_SYMBOL - 68)) | (1 << (SQLSelectParser.NO_SYMBOL - 68)) | (1 << (SQLSelectParser.OTHERS_SYMBOL - 68)))) !== 0) || ((((_la - 100)) & ~0x1f) == 0 && ((1 << (_la - 100)) & ((1 << (SQLSelectParser.WITH_SYMBOL - 100)) | (1 << (SQLSelectParser.WITHOUT_SYMBOL - 100)) | (1 << (SQLSelectParser.RECURSIVE_SYMBOL - 100)) | (1 << (SQLSelectParser.ROLLUP_SYMBOL - 100)) | (1 << (SQLSelectParser.CUBE_SYMBOL - 100)) | (1 << (SQLSelectParser.ORDER_SYMBOL - 100)) | (1 << (SQLSelectParser.ASC_SYMBOL - 100)) | (1 << (SQLSelectParser.DESC_SYMBOL - 100)) | (1 << (SQLSelectParser.FROM_SYMBOL - 100)) | (1 << (SQLSelectParser.DUAL_SYMBOL - 100)) | (1 << (SQLSelectParser.VALUES_SYMBOL - 100)) | (1 << (SQLSelectParser.TABLE_SYMBOL - 100)) | (1 << (SQLSelectParser.SQL_NO_CACHE_SYMBOL - 100)) | (1 << (SQLSelectParser.SQL_CACHE_SYMBOL - 100)) | (1 << (SQLSelectParser.MAX_STATEMENT_TIME_SYMBOL - 100)) | (1 << (SQLSelectParser.FOR_SYMBOL - 100)) | (1 << (SQLSelectParser.OF_SYMBOL - 100)) | (1 << (SQLSelectParser.LOCK_SYMBOL - 100)) | (1 << (SQLSelectParser.IN_SYMBOL - 100)) | (1 << (SQLSelectParser.SHARE_SYMBOL - 100)) | (1 << (SQLSelectParser.MODE_SYMBOL - 100)) | (1 << (SQLSelectParser.UPDATE_SYMBOL - 100)) | (1 << (SQLSelectParser.SKIP_SYMBOL - 100)) | (1 << (SQLSelectParser.LOCKED_SYMBOL - 100)) | (1 << (SQLSelectParser.NOWAIT_SYMBOL - 100)) | (1 << (SQLSelectParser.WHERE_SYMBOL - 100)) | (1 << (SQLSelectParser.OJ_SYMBOL - 100)) | (1 << (SQLSelectParser.ON_SYMBOL - 100)) | (1 << (SQLSelectParser.USING_SYMBOL - 100)) | (1 << (SQLSelectParser.NATURAL_SYMBOL - 100)) | (1 << (SQLSelectParser.INNER_SYMBOL - 100)) | (1 << (SQLSelectParser.JOIN_SYMBOL - 100)))) !== 0) || ((((_la - 132)) & ~0x1f) == 0 && ((1 << (_la - 132)) & ((1 << (SQLSelectParser.LEFT_SYMBOL - 132)) | (1 << (SQLSelectParser.RIGHT_SYMBOL - 132)) | (1 << (SQLSelectParser.OUTER_SYMBOL - 132)) | (1 << (SQLSelectParser.CROSS_SYMBOL - 132)) | (1 << (SQLSelectParser.LATERAL_SYMBOL - 132)) | (1 << (SQLSelectParser.JSON_TABLE_SYMBOL - 132)) | (1 << (SQLSelectParser.COLUMNS_SYMBOL - 132)) | (1 << (SQLSelectParser.ORDINALITY_SYMBOL - 132)) | (1 << (SQLSelectParser.EXISTS_SYMBOL - 132)) | (1 << (SQLSelectParser.PATH_SYMBOL - 132)) | (1 << (SQLSelectParser.NESTED_SYMBOL - 132)) | (1 << (SQLSelectParser.EMPTY_SYMBOL - 132)) | (1 << (SQLSelectParser.ERROR_SYMBOL - 132)) | (1 << (SQLSelectParser.NULL_SYMBOL - 132)) | (1 << (SQLSelectParser.USE_SYMBOL - 132)) | (1 << (SQLSelectParser.FORCE_SYMBOL - 132)) | (1 << (SQLSelectParser.IGNORE_SYMBOL - 132)) | (1 << (SQLSelectParser.KEY_SYMBOL - 132)) | (1 << (SQLSelectParser.INDEX_SYMBOL - 132)) | (1 << (SQLSelectParser.PRIMARY_SYMBOL - 132)) | (1 << (SQLSelectParser.IS_SYMBOL - 132)) | (1 << (SQLSelectParser.TRUE_SYMBOL - 132)) | (1 << (SQLSelectParser.FALSE_SYMBOL - 132)) | (1 << (SQLSelectParser.UNKNOWN_SYMBOL - 132)) | (1 << (SQLSelectParser.NOT_SYMBOL - 132)) | (1 << (SQLSelectParser.XOR_SYMBOL - 132)) | (1 << (SQLSelectParser.OR_SYMBOL - 132)) | (1 << (SQLSelectParser.ANY_SYMBOL - 132)) | (1 << (SQLSelectParser.MEMBER_SYMBOL - 132)) | (1 << (SQLSelectParser.SOUNDS_SYMBOL - 132)) | (1 << (SQLSelectParser.LIKE_SYMBOL - 132)) | (1 << (SQLSelectParser.ESCAPE_SYMBOL - 132)))) !== 0) || ((((_la - 164)) & ~0x1f) == 0 && ((1 << (_la - 164)) & ((1 << (SQLSelectParser.REGEXP_SYMBOL - 164)) | (1 << (SQLSelectParser.DIV_SYMBOL - 164)) | (1 << (SQLSelectParser.MOD_SYMBOL - 164)) | (1 << (SQLSelectParser.MATCH_SYMBOL - 164)) | (1 << (SQLSelectParser.AGAINST_SYMBOL - 164)) | (1 << (SQLSelectParser.BINARY_SYMBOL - 164)) | (1 << (SQLSelectParser.CAST_SYMBOL - 164)) | (1 << (SQLSelectParser.ARRAY_SYMBOL - 164)) | (1 << (SQLSelectParser.CASE_SYMBOL - 164)) | (1 << (SQLSelectParser.END_SYMBOL - 164)) | (1 << (SQLSelectParser.CONVERT_SYMBOL - 164)) | (1 << (SQLSelectParser.COLLATE_SYMBOL - 164)) | (1 << (SQLSelectParser.AVG_SYMBOL - 164)) | (1 << (SQLSelectParser.BIT_AND_SYMBOL - 164)) | (1 << (SQLSelectParser.BIT_OR_SYMBOL - 164)) | (1 << (SQLSelectParser.BIT_XOR_SYMBOL - 164)) | (1 << (SQLSelectParser.COUNT_SYMBOL - 164)) | (1 << (SQLSelectParser.MIN_SYMBOL - 164)) | (1 << (SQLSelectParser.MAX_SYMBOL - 164)) | (1 << (SQLSelectParser.STD_SYMBOL - 164)) | (1 << (SQLSelectParser.VARIANCE_SYMBOL - 164)) | (1 << (SQLSelectParser.STDDEV_SAMP_SYMBOL - 164)) | (1 << (SQLSelectParser.VAR_SAMP_SYMBOL - 164)) | (1 << (SQLSelectParser.SUM_SYMBOL - 164)) | (1 << (SQLSelectParser.GROUP_CONCAT_SYMBOL - 164)) | (1 << (SQLSelectParser.SEPARATOR_SYMBOL - 164)) | (1 << (SQLSelectParser.GROUPING_SYMBOL - 164)) | (1 << (SQLSelectParser.ROW_NUMBER_SYMBOL - 164)) | (1 << (SQLSelectParser.RANK_SYMBOL - 164)) | (1 << (SQLSelectParser.DENSE_RANK_SYMBOL - 164)) | (1 << (SQLSelectParser.CUME_DIST_SYMBOL - 164)) | (1 << (SQLSelectParser.PERCENT_RANK_SYMBOL - 164)))) !== 0) || ((((_la - 196)) & ~0x1f) == 0 && ((1 << (_la - 196)) & ((1 << (SQLSelectParser.NTILE_SYMBOL - 196)) | (1 << (SQLSelectParser.LEAD_SYMBOL - 196)) | (1 << (SQLSelectParser.LAG_SYMBOL - 196)) | (1 << (SQLSelectParser.FIRST_VALUE_SYMBOL - 196)) | (1 << (SQLSelectParser.LAST_VALUE_SYMBOL - 196)) | (1 << (SQLSelectParser.NTH_VALUE_SYMBOL - 196)) | (1 << (SQLSelectParser.FIRST_SYMBOL - 196)) | (1 << (SQLSelectParser.LAST_SYMBOL - 196)) | (1 << (SQLSelectParser.OVER_SYMBOL - 196)) | (1 << (SQLSelectParser.RESPECT_SYMBOL - 196)) | (1 << (SQLSelectParser.NULLS_SYMBOL - 196)) | (1 << (SQLSelectParser.JSON_ARRAYAGG_SYMBOL - 196)) | (1 << (SQLSelectParser.JSON_OBJECTAGG_SYMBOL - 196)) | (1 << (SQLSelectParser.BOOLEAN_SYMBOL - 196)) | (1 << (SQLSelectParser.LANGUAGE_SYMBOL - 196)) | (1 << (SQLSelectParser.QUERY_SYMBOL - 196)) | (1 << (SQLSelectParser.EXPANSION_SYMBOL - 196)) | (1 << (SQLSelectParser.CHAR_SYMBOL - 196)) | (1 << (SQLSelectParser.CURRENT_USER_SYMBOL - 196)) | (1 << (SQLSelectParser.DATE_SYMBOL - 196)) | (1 << (SQLSelectParser.INSERT_SYMBOL - 196)) | (1 << (SQLSelectParser.TIME_SYMBOL - 196)) | (1 << (SQLSelectParser.TIMESTAMP_SYMBOL - 196)) | (1 << (SQLSelectParser.TIMESTAMP_LTZ_SYMBOL - 196)) | (1 << (SQLSelectParser.TIMESTAMP_NTZ_SYMBOL - 196)) | (1 << (SQLSelectParser.ZONE_SYMBOL - 196)) | (1 << (SQLSelectParser.USER_SYMBOL - 196)) | (1 << (SQLSelectParser.ADDDATE_SYMBOL - 196)) | (1 << (SQLSelectParser.SUBDATE_SYMBOL - 196)) | (1 << (SQLSelectParser.CURDATE_SYMBOL - 196)) | (1 << (SQLSelectParser.CURTIME_SYMBOL - 196)) | (1 << (SQLSelectParser.DATE_ADD_SYMBOL - 196)))) !== 0) || ((((_la - 228)) & ~0x1f) == 0 && ((1 << (_la - 228)) & ((1 << (SQLSelectParser.DATE_SUB_SYMBOL - 228)) | (1 << (SQLSelectParser.EXTRACT_SYMBOL - 228)) | (1 << (SQLSelectParser.GET_FORMAT_SYMBOL - 228)) | (1 << (SQLSelectParser.NOW_SYMBOL - 228)) | (1 << (SQLSelectParser.POSITION_SYMBOL - 228)) | (1 << (SQLSelectParser.SYSDATE_SYMBOL - 228)) | (1 << (SQLSelectParser.TIMESTAMP_ADD_SYMBOL - 228)) | (1 << (SQLSelectParser.TIMESTAMP_DIFF_SYMBOL - 228)) | (1 << (SQLSelectParser.UTC_DATE_SYMBOL - 228)) | (1 << (SQLSelectParser.UTC_TIME_SYMBOL - 228)) | (1 << (SQLSelectParser.UTC_TIMESTAMP_SYMBOL - 228)) | (1 << (SQLSelectParser.ASCII_SYMBOL - 228)) | (1 << (SQLSelectParser.CHARSET_SYMBOL - 228)) | (1 << (SQLSelectParser.COALESCE_SYMBOL - 228)) | (1 << (SQLSelectParser.COLLATION_SYMBOL - 228)) | (1 << (SQLSelectParser.DATABASE_SYMBOL - 228)) | (1 << (SQLSelectParser.IF_SYMBOL - 228)) | (1 << (SQLSelectParser.FORMAT_SYMBOL - 228)) | (1 << (SQLSelectParser.MICROSECOND_SYMBOL - 228)) | (1 << (SQLSelectParser.OLD_PASSWORD_SYMBOL - 228)) | (1 << (SQLSelectParser.PASSWORD_SYMBOL - 228)) | (1 << (SQLSelectParser.REPEAT_SYMBOL - 228)) | (1 << (SQLSelectParser.REPLACE_SYMBOL - 228)) | (1 << (SQLSelectParser.REVERSE_SYMBOL - 228)) | (1 << (SQLSelectParser.ROW_COUNT_SYMBOL - 228)) | (1 << (SQLSelectParser.TRUNCATE_SYMBOL - 228)) | (1 << (SQLSelectParser.WEIGHT_STRING_SYMBOL - 228)) | (1 << (SQLSelectParser.CONTAINS_SYMBOL - 228)) | (1 << (SQLSelectParser.GEOMETRYCOLLECTION_SYMBOL - 228)) | (1 << (SQLSelectParser.LINESTRING_SYMBOL - 228)) | (1 << (SQLSelectParser.MULTILINESTRING_SYMBOL - 228)) | (1 << (SQLSelectParser.MULTIPOINT_SYMBOL - 228)))) !== 0) || ((((_la - 260)) & ~0x1f) == 0 && ((1 << (_la - 260)) & ((1 << (SQLSelectParser.MULTIPOLYGON_SYMBOL - 260)) | (1 << (SQLSelectParser.POINT_SYMBOL - 260)) | (1 << (SQLSelectParser.POLYGON_SYMBOL - 260)) | (1 << (SQLSelectParser.LEVEL_SYMBOL - 260)) | (1 << (SQLSelectParser.DATETIME_SYMBOL - 260)) | (1 << (SQLSelectParser.TRIM_SYMBOL - 260)) | (1 << (SQLSelectParser.LEADING_SYMBOL - 260)) | (1 << (SQLSelectParser.TRAILING_SYMBOL - 260)) | (1 << (SQLSelectParser.BOTH_SYMBOL - 260)) | (1 << (SQLSelectParser.STRING_SYMBOL - 260)) | (1 << (SQLSelectParser.SUBSTRING_SYMBOL - 260)) | (1 << (SQLSelectParser.WHEN_SYMBOL - 260)) | (1 << (SQLSelectParser.THEN_SYMBOL - 260)) | (1 << (SQLSelectParser.ELSE_SYMBOL - 260)) | (1 << (SQLSelectParser.SIGNED_SYMBOL - 260)) | (1 << (SQLSelectParser.UNSIGNED_SYMBOL - 260)) | (1 << (SQLSelectParser.DECIMAL_SYMBOL - 260)) | (1 << (SQLSelectParser.JSON_SYMBOL - 260)) | (1 << (SQLSelectParser.FLOAT_SYMBOL - 260)) | (1 << (SQLSelectParser.FLOAT_SYMBOL_4 - 260)) | (1 << (SQLSelectParser.FLOAT_SYMBOL_8 - 260)) | (1 << (SQLSelectParser.SET_SYMBOL - 260)) | (1 << (SQLSelectParser.SECOND_MICROSECOND_SYMBOL - 260)) | (1 << (SQLSelectParser.MINUTE_MICROSECOND_SYMBOL - 260)) | (1 << (SQLSelectParser.MINUTE_SECOND_SYMBOL - 260)) | (1 << (SQLSelectParser.HOUR_MICROSECOND_SYMBOL - 260)) | (1 << (SQLSelectParser.HOUR_SECOND_SYMBOL - 260)) | (1 << (SQLSelectParser.HOUR_MINUTE_SYMBOL - 260)) | (1 << (SQLSelectParser.DAY_MICROSECOND_SYMBOL - 260)) | (1 << (SQLSelectParser.DAY_SECOND_SYMBOL - 260)) | (1 << (SQLSelectParser.DAY_MINUTE_SYMBOL - 260)) | (1 << (SQLSelectParser.DAY_HOUR_SYMBOL - 260)))) !== 0) || ((((_la - 292)) & ~0x1f) == 0 && ((1 << (_la - 292)) & ((1 << (SQLSelectParser.YEAR_MONTH_SYMBOL - 292)) | (1 << (SQLSelectParser.BTREE_SYMBOL - 292)) | (1 << (SQLSelectParser.RTREE_SYMBOL - 292)) | (1 << (SQLSelectParser.HASH_SYMBOL - 292)) | (1 << (SQLSelectParser.REAL_SYMBOL - 292)) | (1 << (SQLSelectParser.DOUBLE_SYMBOL - 292)) | (1 << (SQLSelectParser.PRECISION_SYMBOL - 292)) | (1 << (SQLSelectParser.NUMERIC_SYMBOL - 292)) | (1 << (SQLSelectParser.NUMBER_SYMBOL - 292)) | (1 << (SQLSelectParser.FIXED_SYMBOL - 292)) | (1 << (SQLSelectParser.BIT_SYMBOL - 292)) | (1 << (SQLSelectParser.BOOL_SYMBOL - 292)) | (1 << (SQLSelectParser.VARYING_SYMBOL - 292)) | (1 << (SQLSelectParser.VARCHAR_SYMBOL - 292)) | (1 << (SQLSelectParser.NATIONAL_SYMBOL - 292)) | (1 << (SQLSelectParser.NVARCHAR_SYMBOL - 292)) | (1 << (SQLSelectParser.NCHAR_SYMBOL - 292)) | (1 << (SQLSelectParser.VARBINARY_SYMBOL - 292)) | (1 << (SQLSelectParser.TINYBLOB_SYMBOL - 292)) | (1 << (SQLSelectParser.BLOB_SYMBOL - 292)) | (1 << (SQLSelectParser.MEDIUMBLOB_SYMBOL - 292)) | (1 << (SQLSelectParser.LONGBLOB_SYMBOL - 292)) | (1 << (SQLSelectParser.LONG_SYMBOL - 292)) | (1 << (SQLSelectParser.TINYTEXT_SYMBOL - 292)) | (1 << (SQLSelectParser.TEXT_SYMBOL - 292)) | (1 << (SQLSelectParser.MEDIUMTEXT_SYMBOL - 292)) | (1 << (SQLSelectParser.LONGTEXT_SYMBOL - 292)) | (1 << (SQLSelectParser.ENUM_SYMBOL - 292)) | (1 << (SQLSelectParser.SERIAL_SYMBOL - 292)) | (1 << (SQLSelectParser.GEOMETRY_SYMBOL - 292)) | (1 << (SQLSelectParser.ZEROFILL_SYMBOL - 292)) | (1 << (SQLSelectParser.BYTE_SYMBOL - 292)))) !== 0) || ((((_la - 324)) & ~0x1f) == 0 && ((1 << (_la - 324)) & ((1 << (SQLSelectParser.UNICODE_SYMBOL - 324)) | (1 << (SQLSelectParser.TERMINATED_SYMBOL - 324)) | (1 << (SQLSelectParser.OPTIONALLY_SYMBOL - 324)) | (1 << (SQLSelectParser.ENCLOSED_SYMBOL - 324)) | (1 << (SQLSelectParser.ESCAPED_SYMBOL - 324)) | (1 << (SQLSelectParser.LINES_SYMBOL - 324)) | (1 << (SQLSelectParser.STARTING_SYMBOL - 324)) | (1 << (SQLSelectParser.GLOBAL_SYMBOL - 324)) | (1 << (SQLSelectParser.LOCAL_SYMBOL - 324)) | (1 << (SQLSelectParser.SESSION_SYMBOL - 324)) | (1 << (SQLSelectParser.VARIANT_SYMBOL - 324)) | (1 << (SQLSelectParser.OBJECT_SYMBOL - 324)) | (1 << (SQLSelectParser.GEOGRAPHY_SYMBOL - 324)) | (1 << (SQLSelectParser.UNDERSCORE_CHARSET - 324)) | (1 << (SQLSelectParser.IDENTIFIER - 324)) | (1 << (SQLSelectParser.NCHAR_TEXT - 324)) | (1 << (SQLSelectParser.BACK_TICK_QUOTED_ID - 324)) | (1 << (SQLSelectParser.DOUBLE_QUOTED_TEXT - 324)) | (1 << (SQLSelectParser.SINGLE_QUOTED_TEXT - 324)) | (1 << (SQLSelectParser.BRACKET_QUOTED_TEXT - 324)))) !== 0)) { - this.state = 1782; - this.exprList(); - } - - this.state = 1785; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - case SQLSelectParser.LINESTRING_SYMBOL: - this.enterOuterAlt(localctx, 3); - this.state = 1786; - this.match(SQLSelectParser.LINESTRING_SYMBOL); - this.state = 1787; - this.exprListWithParentheses(); - break; - case SQLSelectParser.MULTILINESTRING_SYMBOL: - this.enterOuterAlt(localctx, 4); - this.state = 1788; - this.match(SQLSelectParser.MULTILINESTRING_SYMBOL); - this.state = 1789; - this.exprListWithParentheses(); - break; - case SQLSelectParser.MULTIPOINT_SYMBOL: - this.enterOuterAlt(localctx, 5); - this.state = 1790; - this.match(SQLSelectParser.MULTIPOINT_SYMBOL); - this.state = 1791; - this.exprListWithParentheses(); - break; - case SQLSelectParser.MULTIPOLYGON_SYMBOL: - this.enterOuterAlt(localctx, 6); - this.state = 1792; - this.match(SQLSelectParser.MULTIPOLYGON_SYMBOL); - this.state = 1793; - this.exprListWithParentheses(); - break; - case SQLSelectParser.POINT_SYMBOL: - this.enterOuterAlt(localctx, 7); - this.state = 1794; - this.match(SQLSelectParser.POINT_SYMBOL); - this.state = 1795; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1796; - this.expr(0); - this.state = 1797; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1798; - this.expr(0); - this.state = 1799; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - case SQLSelectParser.POLYGON_SYMBOL: - this.enterOuterAlt(localctx, 8); - this.state = 1801; - this.match(SQLSelectParser.POLYGON_SYMBOL); - this.state = 1802; - this.exprListWithParentheses(); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - timeFunctionParameters() { - let localctx = new TimeFunctionParametersContext(this, this._ctx, this.state); - this.enterRule(localctx, 192, SQLSelectParser.RULE_timeFunctionParameters); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 1805; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1807; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.INT_NUMBER) { - this.state = 1806; - this.fractionalPrecision(); - } - - this.state = 1809; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - fractionalPrecision() { - let localctx = new FractionalPrecisionContext(this, this._ctx, this.state); - this.enterRule(localctx, 194, SQLSelectParser.RULE_fractionalPrecision); - try { - this.enterOuterAlt(localctx, 1); - this.state = 1811; - this.match(SQLSelectParser.INT_NUMBER); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - weightStringLevels() { - let localctx = new WeightStringLevelsContext(this, this._ctx, this.state); - this.enterRule(localctx, 196, SQLSelectParser.RULE_weightStringLevels); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 1813; - this.match(SQLSelectParser.LEVEL_SYMBOL); - this.state = 1826; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,211,this._ctx); - switch(la_) { - case 1: - this.state = 1814; - this.real_ulong_number(); - this.state = 1815; - this.match(SQLSelectParser.MINUS_OPERATOR); - this.state = 1816; - this.real_ulong_number(); - break; - - case 2: - this.state = 1818; - this.weightStringLevelListItem(); - this.state = 1823; - this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===SQLSelectParser.COMMA_SYMBOL) { - this.state = 1819; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1820; - this.weightStringLevelListItem(); - this.state = 1825; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - break; - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - weightStringLevelListItem() { - let localctx = new WeightStringLevelListItemContext(this, this._ctx, this.state); - this.enterRule(localctx, 198, SQLSelectParser.RULE_weightStringLevelListItem); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 1828; - this.real_ulong_number(); - this.state = 1834; - this._errHandler.sync(this); - switch (this._input.LA(1)) { - case SQLSelectParser.ASC_SYMBOL: - case SQLSelectParser.DESC_SYMBOL: - this.state = 1829; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.ASC_SYMBOL || _la===SQLSelectParser.DESC_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 1831; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.REVERSE_SYMBOL) { - this.state = 1830; - this.match(SQLSelectParser.REVERSE_SYMBOL); - } - - break; - case SQLSelectParser.REVERSE_SYMBOL: - this.state = 1833; - this.match(SQLSelectParser.REVERSE_SYMBOL); - break; - case SQLSelectParser.COMMA_SYMBOL: - case SQLSelectParser.CLOSE_PAR_SYMBOL: - break; - default: - break; - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - dateTimeTtype() { - let localctx = new DateTimeTtypeContext(this, this._ctx, this.state); - this.enterRule(localctx, 200, SQLSelectParser.RULE_dateTimeTtype); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 1836; - _la = this._input.LA(1); - if(!(((((_la - 215)) & ~0x1f) == 0 && ((1 << (_la - 215)) & ((1 << (SQLSelectParser.DATE_SYMBOL - 215)) | (1 << (SQLSelectParser.TIME_SYMBOL - 215)) | (1 << (SQLSelectParser.TIMESTAMP_SYMBOL - 215)))) !== 0) || _la===SQLSelectParser.DATETIME_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - trimFunction() { - let localctx = new TrimFunctionContext(this, this._ctx, this.state); - this.enterRule(localctx, 202, SQLSelectParser.RULE_trimFunction); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 1838; - this.match(SQLSelectParser.TRIM_SYMBOL); - this.state = 1839; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1863; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,218,this._ctx); - switch(la_) { - case 1: - this.state = 1840; - this.expr(0); - this.state = 1843; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.FROM_SYMBOL) { - this.state = 1841; - this.match(SQLSelectParser.FROM_SYMBOL); - this.state = 1842; - this.expr(0); - } - - break; - - case 2: - this.state = 1845; - this.match(SQLSelectParser.LEADING_SYMBOL); - this.state = 1847; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,215,this._ctx); - if(la_===1) { - this.state = 1846; - this.expr(0); - - } - this.state = 1849; - this.match(SQLSelectParser.FROM_SYMBOL); - this.state = 1850; - this.expr(0); - break; - - case 3: - this.state = 1851; - this.match(SQLSelectParser.TRAILING_SYMBOL); - this.state = 1853; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,216,this._ctx); - if(la_===1) { - this.state = 1852; - this.expr(0); - - } - this.state = 1855; - this.match(SQLSelectParser.FROM_SYMBOL); - this.state = 1856; - this.expr(0); - break; - - case 4: - this.state = 1857; - this.match(SQLSelectParser.BOTH_SYMBOL); - this.state = 1859; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,217,this._ctx); - if(la_===1) { - this.state = 1858; - this.expr(0); - - } - this.state = 1861; - this.match(SQLSelectParser.FROM_SYMBOL); - this.state = 1862; - this.expr(0); - break; - - } - this.state = 1865; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - substringFunction() { - let localctx = new SubstringFunctionContext(this, this._ctx, this.state); - this.enterRule(localctx, 204, SQLSelectParser.RULE_substringFunction); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 1867; - this.match(SQLSelectParser.SUBSTRING_SYMBOL); - this.state = 1868; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1869; - this.expr(0); - this.state = 1882; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.COMMA_SYMBOL: - this.state = 1870; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1871; - this.expr(0); - this.state = 1874; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.COMMA_SYMBOL) { - this.state = 1872; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1873; - this.expr(0); - } - - break; - case SQLSelectParser.FROM_SYMBOL: - this.state = 1876; - this.match(SQLSelectParser.FROM_SYMBOL); - this.state = 1877; - this.expr(0); - this.state = 1880; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.FOR_SYMBOL) { - this.state = 1878; - this.match(SQLSelectParser.FOR_SYMBOL); - this.state = 1879; - this.expr(0); - } - - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - this.state = 1884; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - functionCall() { - let localctx = new FunctionCallContext(this, this._ctx, this.state); - this.enterRule(localctx, 206, SQLSelectParser.RULE_functionCall); - var _la = 0; // Token type - try { - this.state = 1900; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,224,this._ctx); - switch(la_) { - case 1: - this.enterOuterAlt(localctx, 1); - this.state = 1886; - this.pureIdentifier(); - this.state = 1887; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1889; - this._errHandler.sync(this); - _la = this._input.LA(1); - if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SQLSelectParser.PLUS_OPERATOR) | (1 << SQLSelectParser.MINUS_OPERATOR) | (1 << SQLSelectParser.LOGICAL_NOT_OPERATOR) | (1 << SQLSelectParser.BITWISE_NOT_OPERATOR) | (1 << SQLSelectParser.OPEN_PAR_SYMBOL) | (1 << SQLSelectParser.OPEN_CURLY_SYMBOL))) !== 0) || ((((_la - 36)) & ~0x1f) == 0 && ((1 << (_la - 36)) & ((1 << (SQLSelectParser.AT_SIGN_SYMBOL - 36)) | (1 << (SQLSelectParser.AT_TEXT_SUFFIX - 36)) | (1 << (SQLSelectParser.AT_AT_SIGN_SYMBOL - 36)) | (1 << (SQLSelectParser.NULL2_SYMBOL - 36)) | (1 << (SQLSelectParser.PARAM_MARKER - 36)) | (1 << (SQLSelectParser.HEX_NUMBER - 36)) | (1 << (SQLSelectParser.BIN_NUMBER - 36)) | (1 << (SQLSelectParser.INT_NUMBER - 36)) | (1 << (SQLSelectParser.DECIMAL_NUMBER - 36)) | (1 << (SQLSelectParser.FLOAT_NUMBER - 36)) | (1 << (SQLSelectParser.TINYINT_SYMBOL - 36)) | (1 << (SQLSelectParser.SMALLINT_SYMBOL - 36)) | (1 << (SQLSelectParser.MEDIUMINT_SYMBOL - 36)) | (1 << (SQLSelectParser.BYTE_INT_SYMBOL - 36)) | (1 << (SQLSelectParser.INT_SYMBOL - 36)) | (1 << (SQLSelectParser.BIGINT_SYMBOL - 36)) | (1 << (SQLSelectParser.SECOND_SYMBOL - 36)) | (1 << (SQLSelectParser.MINUTE_SYMBOL - 36)) | (1 << (SQLSelectParser.HOUR_SYMBOL - 36)) | (1 << (SQLSelectParser.DAY_SYMBOL - 36)) | (1 << (SQLSelectParser.WEEK_SYMBOL - 36)) | (1 << (SQLSelectParser.MONTH_SYMBOL - 36)) | (1 << (SQLSelectParser.QUARTER_SYMBOL - 36)) | (1 << (SQLSelectParser.YEAR_SYMBOL - 36)) | (1 << (SQLSelectParser.DEFAULT_SYMBOL - 36)) | (1 << (SQLSelectParser.UNION_SYMBOL - 36)) | (1 << (SQLSelectParser.SELECT_SYMBOL - 36)) | (1 << (SQLSelectParser.ALL_SYMBOL - 36)) | (1 << (SQLSelectParser.DISTINCT_SYMBOL - 36)) | (1 << (SQLSelectParser.STRAIGHT_JOIN_SYMBOL - 36)) | (1 << (SQLSelectParser.HIGH_PRIORITY_SYMBOL - 36)))) !== 0) || ((((_la - 68)) & ~0x1f) == 0 && ((1 << (_la - 68)) & ((1 << (SQLSelectParser.SQL_SMALL_RESULT_SYMBOL - 68)) | (1 << (SQLSelectParser.SQL_BIG_RESULT_SYMBOL - 68)) | (1 << (SQLSelectParser.SQL_BUFFER_RESULT_SYMBOL - 68)) | (1 << (SQLSelectParser.SQL_CALC_FOUND_ROWS_SYMBOL - 68)) | (1 << (SQLSelectParser.LIMIT_SYMBOL - 68)) | (1 << (SQLSelectParser.OFFSET_SYMBOL - 68)) | (1 << (SQLSelectParser.INTO_SYMBOL - 68)) | (1 << (SQLSelectParser.OUTFILE_SYMBOL - 68)) | (1 << (SQLSelectParser.DUMPFILE_SYMBOL - 68)) | (1 << (SQLSelectParser.PROCEDURE_SYMBOL - 68)) | (1 << (SQLSelectParser.ANALYSE_SYMBOL - 68)) | (1 << (SQLSelectParser.HAVING_SYMBOL - 68)) | (1 << (SQLSelectParser.WINDOW_SYMBOL - 68)) | (1 << (SQLSelectParser.AS_SYMBOL - 68)) | (1 << (SQLSelectParser.PARTITION_SYMBOL - 68)) | (1 << (SQLSelectParser.BY_SYMBOL - 68)) | (1 << (SQLSelectParser.ROWS_SYMBOL - 68)) | (1 << (SQLSelectParser.RANGE_SYMBOL - 68)) | (1 << (SQLSelectParser.GROUPS_SYMBOL - 68)) | (1 << (SQLSelectParser.UNBOUNDED_SYMBOL - 68)) | (1 << (SQLSelectParser.PRECEDING_SYMBOL - 68)) | (1 << (SQLSelectParser.INTERVAL_SYMBOL - 68)) | (1 << (SQLSelectParser.CURRENT_SYMBOL - 68)) | (1 << (SQLSelectParser.ROW_SYMBOL - 68)) | (1 << (SQLSelectParser.BETWEEN_SYMBOL - 68)) | (1 << (SQLSelectParser.AND_SYMBOL - 68)) | (1 << (SQLSelectParser.FOLLOWING_SYMBOL - 68)) | (1 << (SQLSelectParser.EXCLUDE_SYMBOL - 68)) | (1 << (SQLSelectParser.GROUP_SYMBOL - 68)) | (1 << (SQLSelectParser.TIES_SYMBOL - 68)) | (1 << (SQLSelectParser.NO_SYMBOL - 68)) | (1 << (SQLSelectParser.OTHERS_SYMBOL - 68)))) !== 0) || ((((_la - 100)) & ~0x1f) == 0 && ((1 << (_la - 100)) & ((1 << (SQLSelectParser.WITH_SYMBOL - 100)) | (1 << (SQLSelectParser.WITHOUT_SYMBOL - 100)) | (1 << (SQLSelectParser.RECURSIVE_SYMBOL - 100)) | (1 << (SQLSelectParser.ROLLUP_SYMBOL - 100)) | (1 << (SQLSelectParser.CUBE_SYMBOL - 100)) | (1 << (SQLSelectParser.ORDER_SYMBOL - 100)) | (1 << (SQLSelectParser.ASC_SYMBOL - 100)) | (1 << (SQLSelectParser.DESC_SYMBOL - 100)) | (1 << (SQLSelectParser.FROM_SYMBOL - 100)) | (1 << (SQLSelectParser.DUAL_SYMBOL - 100)) | (1 << (SQLSelectParser.VALUES_SYMBOL - 100)) | (1 << (SQLSelectParser.TABLE_SYMBOL - 100)) | (1 << (SQLSelectParser.SQL_NO_CACHE_SYMBOL - 100)) | (1 << (SQLSelectParser.SQL_CACHE_SYMBOL - 100)) | (1 << (SQLSelectParser.MAX_STATEMENT_TIME_SYMBOL - 100)) | (1 << (SQLSelectParser.FOR_SYMBOL - 100)) | (1 << (SQLSelectParser.OF_SYMBOL - 100)) | (1 << (SQLSelectParser.LOCK_SYMBOL - 100)) | (1 << (SQLSelectParser.IN_SYMBOL - 100)) | (1 << (SQLSelectParser.SHARE_SYMBOL - 100)) | (1 << (SQLSelectParser.MODE_SYMBOL - 100)) | (1 << (SQLSelectParser.UPDATE_SYMBOL - 100)) | (1 << (SQLSelectParser.SKIP_SYMBOL - 100)) | (1 << (SQLSelectParser.LOCKED_SYMBOL - 100)) | (1 << (SQLSelectParser.NOWAIT_SYMBOL - 100)) | (1 << (SQLSelectParser.WHERE_SYMBOL - 100)) | (1 << (SQLSelectParser.OJ_SYMBOL - 100)) | (1 << (SQLSelectParser.ON_SYMBOL - 100)) | (1 << (SQLSelectParser.USING_SYMBOL - 100)) | (1 << (SQLSelectParser.NATURAL_SYMBOL - 100)) | (1 << (SQLSelectParser.INNER_SYMBOL - 100)) | (1 << (SQLSelectParser.JOIN_SYMBOL - 100)))) !== 0) || ((((_la - 132)) & ~0x1f) == 0 && ((1 << (_la - 132)) & ((1 << (SQLSelectParser.LEFT_SYMBOL - 132)) | (1 << (SQLSelectParser.RIGHT_SYMBOL - 132)) | (1 << (SQLSelectParser.OUTER_SYMBOL - 132)) | (1 << (SQLSelectParser.CROSS_SYMBOL - 132)) | (1 << (SQLSelectParser.LATERAL_SYMBOL - 132)) | (1 << (SQLSelectParser.JSON_TABLE_SYMBOL - 132)) | (1 << (SQLSelectParser.COLUMNS_SYMBOL - 132)) | (1 << (SQLSelectParser.ORDINALITY_SYMBOL - 132)) | (1 << (SQLSelectParser.EXISTS_SYMBOL - 132)) | (1 << (SQLSelectParser.PATH_SYMBOL - 132)) | (1 << (SQLSelectParser.NESTED_SYMBOL - 132)) | (1 << (SQLSelectParser.EMPTY_SYMBOL - 132)) | (1 << (SQLSelectParser.ERROR_SYMBOL - 132)) | (1 << (SQLSelectParser.NULL_SYMBOL - 132)) | (1 << (SQLSelectParser.USE_SYMBOL - 132)) | (1 << (SQLSelectParser.FORCE_SYMBOL - 132)) | (1 << (SQLSelectParser.IGNORE_SYMBOL - 132)) | (1 << (SQLSelectParser.KEY_SYMBOL - 132)) | (1 << (SQLSelectParser.INDEX_SYMBOL - 132)) | (1 << (SQLSelectParser.PRIMARY_SYMBOL - 132)) | (1 << (SQLSelectParser.IS_SYMBOL - 132)) | (1 << (SQLSelectParser.TRUE_SYMBOL - 132)) | (1 << (SQLSelectParser.FALSE_SYMBOL - 132)) | (1 << (SQLSelectParser.UNKNOWN_SYMBOL - 132)) | (1 << (SQLSelectParser.NOT_SYMBOL - 132)) | (1 << (SQLSelectParser.XOR_SYMBOL - 132)) | (1 << (SQLSelectParser.OR_SYMBOL - 132)) | (1 << (SQLSelectParser.ANY_SYMBOL - 132)) | (1 << (SQLSelectParser.MEMBER_SYMBOL - 132)) | (1 << (SQLSelectParser.SOUNDS_SYMBOL - 132)) | (1 << (SQLSelectParser.LIKE_SYMBOL - 132)) | (1 << (SQLSelectParser.ESCAPE_SYMBOL - 132)))) !== 0) || ((((_la - 164)) & ~0x1f) == 0 && ((1 << (_la - 164)) & ((1 << (SQLSelectParser.REGEXP_SYMBOL - 164)) | (1 << (SQLSelectParser.DIV_SYMBOL - 164)) | (1 << (SQLSelectParser.MOD_SYMBOL - 164)) | (1 << (SQLSelectParser.MATCH_SYMBOL - 164)) | (1 << (SQLSelectParser.AGAINST_SYMBOL - 164)) | (1 << (SQLSelectParser.BINARY_SYMBOL - 164)) | (1 << (SQLSelectParser.CAST_SYMBOL - 164)) | (1 << (SQLSelectParser.ARRAY_SYMBOL - 164)) | (1 << (SQLSelectParser.CASE_SYMBOL - 164)) | (1 << (SQLSelectParser.END_SYMBOL - 164)) | (1 << (SQLSelectParser.CONVERT_SYMBOL - 164)) | (1 << (SQLSelectParser.COLLATE_SYMBOL - 164)) | (1 << (SQLSelectParser.AVG_SYMBOL - 164)) | (1 << (SQLSelectParser.BIT_AND_SYMBOL - 164)) | (1 << (SQLSelectParser.BIT_OR_SYMBOL - 164)) | (1 << (SQLSelectParser.BIT_XOR_SYMBOL - 164)) | (1 << (SQLSelectParser.COUNT_SYMBOL - 164)) | (1 << (SQLSelectParser.MIN_SYMBOL - 164)) | (1 << (SQLSelectParser.MAX_SYMBOL - 164)) | (1 << (SQLSelectParser.STD_SYMBOL - 164)) | (1 << (SQLSelectParser.VARIANCE_SYMBOL - 164)) | (1 << (SQLSelectParser.STDDEV_SAMP_SYMBOL - 164)) | (1 << (SQLSelectParser.VAR_SAMP_SYMBOL - 164)) | (1 << (SQLSelectParser.SUM_SYMBOL - 164)) | (1 << (SQLSelectParser.GROUP_CONCAT_SYMBOL - 164)) | (1 << (SQLSelectParser.SEPARATOR_SYMBOL - 164)) | (1 << (SQLSelectParser.GROUPING_SYMBOL - 164)) | (1 << (SQLSelectParser.ROW_NUMBER_SYMBOL - 164)) | (1 << (SQLSelectParser.RANK_SYMBOL - 164)) | (1 << (SQLSelectParser.DENSE_RANK_SYMBOL - 164)) | (1 << (SQLSelectParser.CUME_DIST_SYMBOL - 164)) | (1 << (SQLSelectParser.PERCENT_RANK_SYMBOL - 164)))) !== 0) || ((((_la - 196)) & ~0x1f) == 0 && ((1 << (_la - 196)) & ((1 << (SQLSelectParser.NTILE_SYMBOL - 196)) | (1 << (SQLSelectParser.LEAD_SYMBOL - 196)) | (1 << (SQLSelectParser.LAG_SYMBOL - 196)) | (1 << (SQLSelectParser.FIRST_VALUE_SYMBOL - 196)) | (1 << (SQLSelectParser.LAST_VALUE_SYMBOL - 196)) | (1 << (SQLSelectParser.NTH_VALUE_SYMBOL - 196)) | (1 << (SQLSelectParser.FIRST_SYMBOL - 196)) | (1 << (SQLSelectParser.LAST_SYMBOL - 196)) | (1 << (SQLSelectParser.OVER_SYMBOL - 196)) | (1 << (SQLSelectParser.RESPECT_SYMBOL - 196)) | (1 << (SQLSelectParser.NULLS_SYMBOL - 196)) | (1 << (SQLSelectParser.JSON_ARRAYAGG_SYMBOL - 196)) | (1 << (SQLSelectParser.JSON_OBJECTAGG_SYMBOL - 196)) | (1 << (SQLSelectParser.BOOLEAN_SYMBOL - 196)) | (1 << (SQLSelectParser.LANGUAGE_SYMBOL - 196)) | (1 << (SQLSelectParser.QUERY_SYMBOL - 196)) | (1 << (SQLSelectParser.EXPANSION_SYMBOL - 196)) | (1 << (SQLSelectParser.CHAR_SYMBOL - 196)) | (1 << (SQLSelectParser.CURRENT_USER_SYMBOL - 196)) | (1 << (SQLSelectParser.DATE_SYMBOL - 196)) | (1 << (SQLSelectParser.INSERT_SYMBOL - 196)) | (1 << (SQLSelectParser.TIME_SYMBOL - 196)) | (1 << (SQLSelectParser.TIMESTAMP_SYMBOL - 196)) | (1 << (SQLSelectParser.TIMESTAMP_LTZ_SYMBOL - 196)) | (1 << (SQLSelectParser.TIMESTAMP_NTZ_SYMBOL - 196)) | (1 << (SQLSelectParser.ZONE_SYMBOL - 196)) | (1 << (SQLSelectParser.USER_SYMBOL - 196)) | (1 << (SQLSelectParser.ADDDATE_SYMBOL - 196)) | (1 << (SQLSelectParser.SUBDATE_SYMBOL - 196)) | (1 << (SQLSelectParser.CURDATE_SYMBOL - 196)) | (1 << (SQLSelectParser.CURTIME_SYMBOL - 196)) | (1 << (SQLSelectParser.DATE_ADD_SYMBOL - 196)))) !== 0) || ((((_la - 228)) & ~0x1f) == 0 && ((1 << (_la - 228)) & ((1 << (SQLSelectParser.DATE_SUB_SYMBOL - 228)) | (1 << (SQLSelectParser.EXTRACT_SYMBOL - 228)) | (1 << (SQLSelectParser.GET_FORMAT_SYMBOL - 228)) | (1 << (SQLSelectParser.NOW_SYMBOL - 228)) | (1 << (SQLSelectParser.POSITION_SYMBOL - 228)) | (1 << (SQLSelectParser.SYSDATE_SYMBOL - 228)) | (1 << (SQLSelectParser.TIMESTAMP_ADD_SYMBOL - 228)) | (1 << (SQLSelectParser.TIMESTAMP_DIFF_SYMBOL - 228)) | (1 << (SQLSelectParser.UTC_DATE_SYMBOL - 228)) | (1 << (SQLSelectParser.UTC_TIME_SYMBOL - 228)) | (1 << (SQLSelectParser.UTC_TIMESTAMP_SYMBOL - 228)) | (1 << (SQLSelectParser.ASCII_SYMBOL - 228)) | (1 << (SQLSelectParser.CHARSET_SYMBOL - 228)) | (1 << (SQLSelectParser.COALESCE_SYMBOL - 228)) | (1 << (SQLSelectParser.COLLATION_SYMBOL - 228)) | (1 << (SQLSelectParser.DATABASE_SYMBOL - 228)) | (1 << (SQLSelectParser.IF_SYMBOL - 228)) | (1 << (SQLSelectParser.FORMAT_SYMBOL - 228)) | (1 << (SQLSelectParser.MICROSECOND_SYMBOL - 228)) | (1 << (SQLSelectParser.OLD_PASSWORD_SYMBOL - 228)) | (1 << (SQLSelectParser.PASSWORD_SYMBOL - 228)) | (1 << (SQLSelectParser.REPEAT_SYMBOL - 228)) | (1 << (SQLSelectParser.REPLACE_SYMBOL - 228)) | (1 << (SQLSelectParser.REVERSE_SYMBOL - 228)) | (1 << (SQLSelectParser.ROW_COUNT_SYMBOL - 228)) | (1 << (SQLSelectParser.TRUNCATE_SYMBOL - 228)) | (1 << (SQLSelectParser.WEIGHT_STRING_SYMBOL - 228)) | (1 << (SQLSelectParser.CONTAINS_SYMBOL - 228)) | (1 << (SQLSelectParser.GEOMETRYCOLLECTION_SYMBOL - 228)) | (1 << (SQLSelectParser.LINESTRING_SYMBOL - 228)) | (1 << (SQLSelectParser.MULTILINESTRING_SYMBOL - 228)) | (1 << (SQLSelectParser.MULTIPOINT_SYMBOL - 228)))) !== 0) || ((((_la - 260)) & ~0x1f) == 0 && ((1 << (_la - 260)) & ((1 << (SQLSelectParser.MULTIPOLYGON_SYMBOL - 260)) | (1 << (SQLSelectParser.POINT_SYMBOL - 260)) | (1 << (SQLSelectParser.POLYGON_SYMBOL - 260)) | (1 << (SQLSelectParser.LEVEL_SYMBOL - 260)) | (1 << (SQLSelectParser.DATETIME_SYMBOL - 260)) | (1 << (SQLSelectParser.TRIM_SYMBOL - 260)) | (1 << (SQLSelectParser.LEADING_SYMBOL - 260)) | (1 << (SQLSelectParser.TRAILING_SYMBOL - 260)) | (1 << (SQLSelectParser.BOTH_SYMBOL - 260)) | (1 << (SQLSelectParser.STRING_SYMBOL - 260)) | (1 << (SQLSelectParser.SUBSTRING_SYMBOL - 260)) | (1 << (SQLSelectParser.WHEN_SYMBOL - 260)) | (1 << (SQLSelectParser.THEN_SYMBOL - 260)) | (1 << (SQLSelectParser.ELSE_SYMBOL - 260)) | (1 << (SQLSelectParser.SIGNED_SYMBOL - 260)) | (1 << (SQLSelectParser.UNSIGNED_SYMBOL - 260)) | (1 << (SQLSelectParser.DECIMAL_SYMBOL - 260)) | (1 << (SQLSelectParser.JSON_SYMBOL - 260)) | (1 << (SQLSelectParser.FLOAT_SYMBOL - 260)) | (1 << (SQLSelectParser.FLOAT_SYMBOL_4 - 260)) | (1 << (SQLSelectParser.FLOAT_SYMBOL_8 - 260)) | (1 << (SQLSelectParser.SET_SYMBOL - 260)) | (1 << (SQLSelectParser.SECOND_MICROSECOND_SYMBOL - 260)) | (1 << (SQLSelectParser.MINUTE_MICROSECOND_SYMBOL - 260)) | (1 << (SQLSelectParser.MINUTE_SECOND_SYMBOL - 260)) | (1 << (SQLSelectParser.HOUR_MICROSECOND_SYMBOL - 260)) | (1 << (SQLSelectParser.HOUR_SECOND_SYMBOL - 260)) | (1 << (SQLSelectParser.HOUR_MINUTE_SYMBOL - 260)) | (1 << (SQLSelectParser.DAY_MICROSECOND_SYMBOL - 260)) | (1 << (SQLSelectParser.DAY_SECOND_SYMBOL - 260)) | (1 << (SQLSelectParser.DAY_MINUTE_SYMBOL - 260)) | (1 << (SQLSelectParser.DAY_HOUR_SYMBOL - 260)))) !== 0) || ((((_la - 292)) & ~0x1f) == 0 && ((1 << (_la - 292)) & ((1 << (SQLSelectParser.YEAR_MONTH_SYMBOL - 292)) | (1 << (SQLSelectParser.BTREE_SYMBOL - 292)) | (1 << (SQLSelectParser.RTREE_SYMBOL - 292)) | (1 << (SQLSelectParser.HASH_SYMBOL - 292)) | (1 << (SQLSelectParser.REAL_SYMBOL - 292)) | (1 << (SQLSelectParser.DOUBLE_SYMBOL - 292)) | (1 << (SQLSelectParser.PRECISION_SYMBOL - 292)) | (1 << (SQLSelectParser.NUMERIC_SYMBOL - 292)) | (1 << (SQLSelectParser.NUMBER_SYMBOL - 292)) | (1 << (SQLSelectParser.FIXED_SYMBOL - 292)) | (1 << (SQLSelectParser.BIT_SYMBOL - 292)) | (1 << (SQLSelectParser.BOOL_SYMBOL - 292)) | (1 << (SQLSelectParser.VARYING_SYMBOL - 292)) | (1 << (SQLSelectParser.VARCHAR_SYMBOL - 292)) | (1 << (SQLSelectParser.NATIONAL_SYMBOL - 292)) | (1 << (SQLSelectParser.NVARCHAR_SYMBOL - 292)) | (1 << (SQLSelectParser.NCHAR_SYMBOL - 292)) | (1 << (SQLSelectParser.VARBINARY_SYMBOL - 292)) | (1 << (SQLSelectParser.TINYBLOB_SYMBOL - 292)) | (1 << (SQLSelectParser.BLOB_SYMBOL - 292)) | (1 << (SQLSelectParser.MEDIUMBLOB_SYMBOL - 292)) | (1 << (SQLSelectParser.LONGBLOB_SYMBOL - 292)) | (1 << (SQLSelectParser.LONG_SYMBOL - 292)) | (1 << (SQLSelectParser.TINYTEXT_SYMBOL - 292)) | (1 << (SQLSelectParser.TEXT_SYMBOL - 292)) | (1 << (SQLSelectParser.MEDIUMTEXT_SYMBOL - 292)) | (1 << (SQLSelectParser.LONGTEXT_SYMBOL - 292)) | (1 << (SQLSelectParser.ENUM_SYMBOL - 292)) | (1 << (SQLSelectParser.SERIAL_SYMBOL - 292)) | (1 << (SQLSelectParser.GEOMETRY_SYMBOL - 292)) | (1 << (SQLSelectParser.ZEROFILL_SYMBOL - 292)) | (1 << (SQLSelectParser.BYTE_SYMBOL - 292)))) !== 0) || ((((_la - 324)) & ~0x1f) == 0 && ((1 << (_la - 324)) & ((1 << (SQLSelectParser.UNICODE_SYMBOL - 324)) | (1 << (SQLSelectParser.TERMINATED_SYMBOL - 324)) | (1 << (SQLSelectParser.OPTIONALLY_SYMBOL - 324)) | (1 << (SQLSelectParser.ENCLOSED_SYMBOL - 324)) | (1 << (SQLSelectParser.ESCAPED_SYMBOL - 324)) | (1 << (SQLSelectParser.LINES_SYMBOL - 324)) | (1 << (SQLSelectParser.STARTING_SYMBOL - 324)) | (1 << (SQLSelectParser.GLOBAL_SYMBOL - 324)) | (1 << (SQLSelectParser.LOCAL_SYMBOL - 324)) | (1 << (SQLSelectParser.SESSION_SYMBOL - 324)) | (1 << (SQLSelectParser.VARIANT_SYMBOL - 324)) | (1 << (SQLSelectParser.OBJECT_SYMBOL - 324)) | (1 << (SQLSelectParser.GEOGRAPHY_SYMBOL - 324)) | (1 << (SQLSelectParser.UNDERSCORE_CHARSET - 324)) | (1 << (SQLSelectParser.IDENTIFIER - 324)) | (1 << (SQLSelectParser.NCHAR_TEXT - 324)) | (1 << (SQLSelectParser.BACK_TICK_QUOTED_ID - 324)) | (1 << (SQLSelectParser.DOUBLE_QUOTED_TEXT - 324)) | (1 << (SQLSelectParser.SINGLE_QUOTED_TEXT - 324)) | (1 << (SQLSelectParser.BRACKET_QUOTED_TEXT - 324)))) !== 0)) { - this.state = 1888; - this.udfExprList(); - } - - this.state = 1891; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - - case 2: - this.enterOuterAlt(localctx, 2); - this.state = 1893; - this.qualifiedIdentifier(); - this.state = 1894; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1896; - this._errHandler.sync(this); - _la = this._input.LA(1); - if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SQLSelectParser.PLUS_OPERATOR) | (1 << SQLSelectParser.MINUS_OPERATOR) | (1 << SQLSelectParser.LOGICAL_NOT_OPERATOR) | (1 << SQLSelectParser.BITWISE_NOT_OPERATOR) | (1 << SQLSelectParser.OPEN_PAR_SYMBOL) | (1 << SQLSelectParser.OPEN_CURLY_SYMBOL))) !== 0) || ((((_la - 36)) & ~0x1f) == 0 && ((1 << (_la - 36)) & ((1 << (SQLSelectParser.AT_SIGN_SYMBOL - 36)) | (1 << (SQLSelectParser.AT_TEXT_SUFFIX - 36)) | (1 << (SQLSelectParser.AT_AT_SIGN_SYMBOL - 36)) | (1 << (SQLSelectParser.NULL2_SYMBOL - 36)) | (1 << (SQLSelectParser.PARAM_MARKER - 36)) | (1 << (SQLSelectParser.HEX_NUMBER - 36)) | (1 << (SQLSelectParser.BIN_NUMBER - 36)) | (1 << (SQLSelectParser.INT_NUMBER - 36)) | (1 << (SQLSelectParser.DECIMAL_NUMBER - 36)) | (1 << (SQLSelectParser.FLOAT_NUMBER - 36)) | (1 << (SQLSelectParser.TINYINT_SYMBOL - 36)) | (1 << (SQLSelectParser.SMALLINT_SYMBOL - 36)) | (1 << (SQLSelectParser.MEDIUMINT_SYMBOL - 36)) | (1 << (SQLSelectParser.BYTE_INT_SYMBOL - 36)) | (1 << (SQLSelectParser.INT_SYMBOL - 36)) | (1 << (SQLSelectParser.BIGINT_SYMBOL - 36)) | (1 << (SQLSelectParser.SECOND_SYMBOL - 36)) | (1 << (SQLSelectParser.MINUTE_SYMBOL - 36)) | (1 << (SQLSelectParser.HOUR_SYMBOL - 36)) | (1 << (SQLSelectParser.DAY_SYMBOL - 36)) | (1 << (SQLSelectParser.WEEK_SYMBOL - 36)) | (1 << (SQLSelectParser.MONTH_SYMBOL - 36)) | (1 << (SQLSelectParser.QUARTER_SYMBOL - 36)) | (1 << (SQLSelectParser.YEAR_SYMBOL - 36)) | (1 << (SQLSelectParser.DEFAULT_SYMBOL - 36)) | (1 << (SQLSelectParser.UNION_SYMBOL - 36)) | (1 << (SQLSelectParser.SELECT_SYMBOL - 36)) | (1 << (SQLSelectParser.ALL_SYMBOL - 36)) | (1 << (SQLSelectParser.DISTINCT_SYMBOL - 36)) | (1 << (SQLSelectParser.STRAIGHT_JOIN_SYMBOL - 36)) | (1 << (SQLSelectParser.HIGH_PRIORITY_SYMBOL - 36)))) !== 0) || ((((_la - 68)) & ~0x1f) == 0 && ((1 << (_la - 68)) & ((1 << (SQLSelectParser.SQL_SMALL_RESULT_SYMBOL - 68)) | (1 << (SQLSelectParser.SQL_BIG_RESULT_SYMBOL - 68)) | (1 << (SQLSelectParser.SQL_BUFFER_RESULT_SYMBOL - 68)) | (1 << (SQLSelectParser.SQL_CALC_FOUND_ROWS_SYMBOL - 68)) | (1 << (SQLSelectParser.LIMIT_SYMBOL - 68)) | (1 << (SQLSelectParser.OFFSET_SYMBOL - 68)) | (1 << (SQLSelectParser.INTO_SYMBOL - 68)) | (1 << (SQLSelectParser.OUTFILE_SYMBOL - 68)) | (1 << (SQLSelectParser.DUMPFILE_SYMBOL - 68)) | (1 << (SQLSelectParser.PROCEDURE_SYMBOL - 68)) | (1 << (SQLSelectParser.ANALYSE_SYMBOL - 68)) | (1 << (SQLSelectParser.HAVING_SYMBOL - 68)) | (1 << (SQLSelectParser.WINDOW_SYMBOL - 68)) | (1 << (SQLSelectParser.AS_SYMBOL - 68)) | (1 << (SQLSelectParser.PARTITION_SYMBOL - 68)) | (1 << (SQLSelectParser.BY_SYMBOL - 68)) | (1 << (SQLSelectParser.ROWS_SYMBOL - 68)) | (1 << (SQLSelectParser.RANGE_SYMBOL - 68)) | (1 << (SQLSelectParser.GROUPS_SYMBOL - 68)) | (1 << (SQLSelectParser.UNBOUNDED_SYMBOL - 68)) | (1 << (SQLSelectParser.PRECEDING_SYMBOL - 68)) | (1 << (SQLSelectParser.INTERVAL_SYMBOL - 68)) | (1 << (SQLSelectParser.CURRENT_SYMBOL - 68)) | (1 << (SQLSelectParser.ROW_SYMBOL - 68)) | (1 << (SQLSelectParser.BETWEEN_SYMBOL - 68)) | (1 << (SQLSelectParser.AND_SYMBOL - 68)) | (1 << (SQLSelectParser.FOLLOWING_SYMBOL - 68)) | (1 << (SQLSelectParser.EXCLUDE_SYMBOL - 68)) | (1 << (SQLSelectParser.GROUP_SYMBOL - 68)) | (1 << (SQLSelectParser.TIES_SYMBOL - 68)) | (1 << (SQLSelectParser.NO_SYMBOL - 68)) | (1 << (SQLSelectParser.OTHERS_SYMBOL - 68)))) !== 0) || ((((_la - 100)) & ~0x1f) == 0 && ((1 << (_la - 100)) & ((1 << (SQLSelectParser.WITH_SYMBOL - 100)) | (1 << (SQLSelectParser.WITHOUT_SYMBOL - 100)) | (1 << (SQLSelectParser.RECURSIVE_SYMBOL - 100)) | (1 << (SQLSelectParser.ROLLUP_SYMBOL - 100)) | (1 << (SQLSelectParser.CUBE_SYMBOL - 100)) | (1 << (SQLSelectParser.ORDER_SYMBOL - 100)) | (1 << (SQLSelectParser.ASC_SYMBOL - 100)) | (1 << (SQLSelectParser.DESC_SYMBOL - 100)) | (1 << (SQLSelectParser.FROM_SYMBOL - 100)) | (1 << (SQLSelectParser.DUAL_SYMBOL - 100)) | (1 << (SQLSelectParser.VALUES_SYMBOL - 100)) | (1 << (SQLSelectParser.TABLE_SYMBOL - 100)) | (1 << (SQLSelectParser.SQL_NO_CACHE_SYMBOL - 100)) | (1 << (SQLSelectParser.SQL_CACHE_SYMBOL - 100)) | (1 << (SQLSelectParser.MAX_STATEMENT_TIME_SYMBOL - 100)) | (1 << (SQLSelectParser.FOR_SYMBOL - 100)) | (1 << (SQLSelectParser.OF_SYMBOL - 100)) | (1 << (SQLSelectParser.LOCK_SYMBOL - 100)) | (1 << (SQLSelectParser.IN_SYMBOL - 100)) | (1 << (SQLSelectParser.SHARE_SYMBOL - 100)) | (1 << (SQLSelectParser.MODE_SYMBOL - 100)) | (1 << (SQLSelectParser.UPDATE_SYMBOL - 100)) | (1 << (SQLSelectParser.SKIP_SYMBOL - 100)) | (1 << (SQLSelectParser.LOCKED_SYMBOL - 100)) | (1 << (SQLSelectParser.NOWAIT_SYMBOL - 100)) | (1 << (SQLSelectParser.WHERE_SYMBOL - 100)) | (1 << (SQLSelectParser.OJ_SYMBOL - 100)) | (1 << (SQLSelectParser.ON_SYMBOL - 100)) | (1 << (SQLSelectParser.USING_SYMBOL - 100)) | (1 << (SQLSelectParser.NATURAL_SYMBOL - 100)) | (1 << (SQLSelectParser.INNER_SYMBOL - 100)) | (1 << (SQLSelectParser.JOIN_SYMBOL - 100)))) !== 0) || ((((_la - 132)) & ~0x1f) == 0 && ((1 << (_la - 132)) & ((1 << (SQLSelectParser.LEFT_SYMBOL - 132)) | (1 << (SQLSelectParser.RIGHT_SYMBOL - 132)) | (1 << (SQLSelectParser.OUTER_SYMBOL - 132)) | (1 << (SQLSelectParser.CROSS_SYMBOL - 132)) | (1 << (SQLSelectParser.LATERAL_SYMBOL - 132)) | (1 << (SQLSelectParser.JSON_TABLE_SYMBOL - 132)) | (1 << (SQLSelectParser.COLUMNS_SYMBOL - 132)) | (1 << (SQLSelectParser.ORDINALITY_SYMBOL - 132)) | (1 << (SQLSelectParser.EXISTS_SYMBOL - 132)) | (1 << (SQLSelectParser.PATH_SYMBOL - 132)) | (1 << (SQLSelectParser.NESTED_SYMBOL - 132)) | (1 << (SQLSelectParser.EMPTY_SYMBOL - 132)) | (1 << (SQLSelectParser.ERROR_SYMBOL - 132)) | (1 << (SQLSelectParser.NULL_SYMBOL - 132)) | (1 << (SQLSelectParser.USE_SYMBOL - 132)) | (1 << (SQLSelectParser.FORCE_SYMBOL - 132)) | (1 << (SQLSelectParser.IGNORE_SYMBOL - 132)) | (1 << (SQLSelectParser.KEY_SYMBOL - 132)) | (1 << (SQLSelectParser.INDEX_SYMBOL - 132)) | (1 << (SQLSelectParser.PRIMARY_SYMBOL - 132)) | (1 << (SQLSelectParser.IS_SYMBOL - 132)) | (1 << (SQLSelectParser.TRUE_SYMBOL - 132)) | (1 << (SQLSelectParser.FALSE_SYMBOL - 132)) | (1 << (SQLSelectParser.UNKNOWN_SYMBOL - 132)) | (1 << (SQLSelectParser.NOT_SYMBOL - 132)) | (1 << (SQLSelectParser.XOR_SYMBOL - 132)) | (1 << (SQLSelectParser.OR_SYMBOL - 132)) | (1 << (SQLSelectParser.ANY_SYMBOL - 132)) | (1 << (SQLSelectParser.MEMBER_SYMBOL - 132)) | (1 << (SQLSelectParser.SOUNDS_SYMBOL - 132)) | (1 << (SQLSelectParser.LIKE_SYMBOL - 132)) | (1 << (SQLSelectParser.ESCAPE_SYMBOL - 132)))) !== 0) || ((((_la - 164)) & ~0x1f) == 0 && ((1 << (_la - 164)) & ((1 << (SQLSelectParser.REGEXP_SYMBOL - 164)) | (1 << (SQLSelectParser.DIV_SYMBOL - 164)) | (1 << (SQLSelectParser.MOD_SYMBOL - 164)) | (1 << (SQLSelectParser.MATCH_SYMBOL - 164)) | (1 << (SQLSelectParser.AGAINST_SYMBOL - 164)) | (1 << (SQLSelectParser.BINARY_SYMBOL - 164)) | (1 << (SQLSelectParser.CAST_SYMBOL - 164)) | (1 << (SQLSelectParser.ARRAY_SYMBOL - 164)) | (1 << (SQLSelectParser.CASE_SYMBOL - 164)) | (1 << (SQLSelectParser.END_SYMBOL - 164)) | (1 << (SQLSelectParser.CONVERT_SYMBOL - 164)) | (1 << (SQLSelectParser.COLLATE_SYMBOL - 164)) | (1 << (SQLSelectParser.AVG_SYMBOL - 164)) | (1 << (SQLSelectParser.BIT_AND_SYMBOL - 164)) | (1 << (SQLSelectParser.BIT_OR_SYMBOL - 164)) | (1 << (SQLSelectParser.BIT_XOR_SYMBOL - 164)) | (1 << (SQLSelectParser.COUNT_SYMBOL - 164)) | (1 << (SQLSelectParser.MIN_SYMBOL - 164)) | (1 << (SQLSelectParser.MAX_SYMBOL - 164)) | (1 << (SQLSelectParser.STD_SYMBOL - 164)) | (1 << (SQLSelectParser.VARIANCE_SYMBOL - 164)) | (1 << (SQLSelectParser.STDDEV_SAMP_SYMBOL - 164)) | (1 << (SQLSelectParser.VAR_SAMP_SYMBOL - 164)) | (1 << (SQLSelectParser.SUM_SYMBOL - 164)) | (1 << (SQLSelectParser.GROUP_CONCAT_SYMBOL - 164)) | (1 << (SQLSelectParser.SEPARATOR_SYMBOL - 164)) | (1 << (SQLSelectParser.GROUPING_SYMBOL - 164)) | (1 << (SQLSelectParser.ROW_NUMBER_SYMBOL - 164)) | (1 << (SQLSelectParser.RANK_SYMBOL - 164)) | (1 << (SQLSelectParser.DENSE_RANK_SYMBOL - 164)) | (1 << (SQLSelectParser.CUME_DIST_SYMBOL - 164)) | (1 << (SQLSelectParser.PERCENT_RANK_SYMBOL - 164)))) !== 0) || ((((_la - 196)) & ~0x1f) == 0 && ((1 << (_la - 196)) & ((1 << (SQLSelectParser.NTILE_SYMBOL - 196)) | (1 << (SQLSelectParser.LEAD_SYMBOL - 196)) | (1 << (SQLSelectParser.LAG_SYMBOL - 196)) | (1 << (SQLSelectParser.FIRST_VALUE_SYMBOL - 196)) | (1 << (SQLSelectParser.LAST_VALUE_SYMBOL - 196)) | (1 << (SQLSelectParser.NTH_VALUE_SYMBOL - 196)) | (1 << (SQLSelectParser.FIRST_SYMBOL - 196)) | (1 << (SQLSelectParser.LAST_SYMBOL - 196)) | (1 << (SQLSelectParser.OVER_SYMBOL - 196)) | (1 << (SQLSelectParser.RESPECT_SYMBOL - 196)) | (1 << (SQLSelectParser.NULLS_SYMBOL - 196)) | (1 << (SQLSelectParser.JSON_ARRAYAGG_SYMBOL - 196)) | (1 << (SQLSelectParser.JSON_OBJECTAGG_SYMBOL - 196)) | (1 << (SQLSelectParser.BOOLEAN_SYMBOL - 196)) | (1 << (SQLSelectParser.LANGUAGE_SYMBOL - 196)) | (1 << (SQLSelectParser.QUERY_SYMBOL - 196)) | (1 << (SQLSelectParser.EXPANSION_SYMBOL - 196)) | (1 << (SQLSelectParser.CHAR_SYMBOL - 196)) | (1 << (SQLSelectParser.CURRENT_USER_SYMBOL - 196)) | (1 << (SQLSelectParser.DATE_SYMBOL - 196)) | (1 << (SQLSelectParser.INSERT_SYMBOL - 196)) | (1 << (SQLSelectParser.TIME_SYMBOL - 196)) | (1 << (SQLSelectParser.TIMESTAMP_SYMBOL - 196)) | (1 << (SQLSelectParser.TIMESTAMP_LTZ_SYMBOL - 196)) | (1 << (SQLSelectParser.TIMESTAMP_NTZ_SYMBOL - 196)) | (1 << (SQLSelectParser.ZONE_SYMBOL - 196)) | (1 << (SQLSelectParser.USER_SYMBOL - 196)) | (1 << (SQLSelectParser.ADDDATE_SYMBOL - 196)) | (1 << (SQLSelectParser.SUBDATE_SYMBOL - 196)) | (1 << (SQLSelectParser.CURDATE_SYMBOL - 196)) | (1 << (SQLSelectParser.CURTIME_SYMBOL - 196)) | (1 << (SQLSelectParser.DATE_ADD_SYMBOL - 196)))) !== 0) || ((((_la - 228)) & ~0x1f) == 0 && ((1 << (_la - 228)) & ((1 << (SQLSelectParser.DATE_SUB_SYMBOL - 228)) | (1 << (SQLSelectParser.EXTRACT_SYMBOL - 228)) | (1 << (SQLSelectParser.GET_FORMAT_SYMBOL - 228)) | (1 << (SQLSelectParser.NOW_SYMBOL - 228)) | (1 << (SQLSelectParser.POSITION_SYMBOL - 228)) | (1 << (SQLSelectParser.SYSDATE_SYMBOL - 228)) | (1 << (SQLSelectParser.TIMESTAMP_ADD_SYMBOL - 228)) | (1 << (SQLSelectParser.TIMESTAMP_DIFF_SYMBOL - 228)) | (1 << (SQLSelectParser.UTC_DATE_SYMBOL - 228)) | (1 << (SQLSelectParser.UTC_TIME_SYMBOL - 228)) | (1 << (SQLSelectParser.UTC_TIMESTAMP_SYMBOL - 228)) | (1 << (SQLSelectParser.ASCII_SYMBOL - 228)) | (1 << (SQLSelectParser.CHARSET_SYMBOL - 228)) | (1 << (SQLSelectParser.COALESCE_SYMBOL - 228)) | (1 << (SQLSelectParser.COLLATION_SYMBOL - 228)) | (1 << (SQLSelectParser.DATABASE_SYMBOL - 228)) | (1 << (SQLSelectParser.IF_SYMBOL - 228)) | (1 << (SQLSelectParser.FORMAT_SYMBOL - 228)) | (1 << (SQLSelectParser.MICROSECOND_SYMBOL - 228)) | (1 << (SQLSelectParser.OLD_PASSWORD_SYMBOL - 228)) | (1 << (SQLSelectParser.PASSWORD_SYMBOL - 228)) | (1 << (SQLSelectParser.REPEAT_SYMBOL - 228)) | (1 << (SQLSelectParser.REPLACE_SYMBOL - 228)) | (1 << (SQLSelectParser.REVERSE_SYMBOL - 228)) | (1 << (SQLSelectParser.ROW_COUNT_SYMBOL - 228)) | (1 << (SQLSelectParser.TRUNCATE_SYMBOL - 228)) | (1 << (SQLSelectParser.WEIGHT_STRING_SYMBOL - 228)) | (1 << (SQLSelectParser.CONTAINS_SYMBOL - 228)) | (1 << (SQLSelectParser.GEOMETRYCOLLECTION_SYMBOL - 228)) | (1 << (SQLSelectParser.LINESTRING_SYMBOL - 228)) | (1 << (SQLSelectParser.MULTILINESTRING_SYMBOL - 228)) | (1 << (SQLSelectParser.MULTIPOINT_SYMBOL - 228)))) !== 0) || ((((_la - 260)) & ~0x1f) == 0 && ((1 << (_la - 260)) & ((1 << (SQLSelectParser.MULTIPOLYGON_SYMBOL - 260)) | (1 << (SQLSelectParser.POINT_SYMBOL - 260)) | (1 << (SQLSelectParser.POLYGON_SYMBOL - 260)) | (1 << (SQLSelectParser.LEVEL_SYMBOL - 260)) | (1 << (SQLSelectParser.DATETIME_SYMBOL - 260)) | (1 << (SQLSelectParser.TRIM_SYMBOL - 260)) | (1 << (SQLSelectParser.LEADING_SYMBOL - 260)) | (1 << (SQLSelectParser.TRAILING_SYMBOL - 260)) | (1 << (SQLSelectParser.BOTH_SYMBOL - 260)) | (1 << (SQLSelectParser.STRING_SYMBOL - 260)) | (1 << (SQLSelectParser.SUBSTRING_SYMBOL - 260)) | (1 << (SQLSelectParser.WHEN_SYMBOL - 260)) | (1 << (SQLSelectParser.THEN_SYMBOL - 260)) | (1 << (SQLSelectParser.ELSE_SYMBOL - 260)) | (1 << (SQLSelectParser.SIGNED_SYMBOL - 260)) | (1 << (SQLSelectParser.UNSIGNED_SYMBOL - 260)) | (1 << (SQLSelectParser.DECIMAL_SYMBOL - 260)) | (1 << (SQLSelectParser.JSON_SYMBOL - 260)) | (1 << (SQLSelectParser.FLOAT_SYMBOL - 260)) | (1 << (SQLSelectParser.FLOAT_SYMBOL_4 - 260)) | (1 << (SQLSelectParser.FLOAT_SYMBOL_8 - 260)) | (1 << (SQLSelectParser.SET_SYMBOL - 260)) | (1 << (SQLSelectParser.SECOND_MICROSECOND_SYMBOL - 260)) | (1 << (SQLSelectParser.MINUTE_MICROSECOND_SYMBOL - 260)) | (1 << (SQLSelectParser.MINUTE_SECOND_SYMBOL - 260)) | (1 << (SQLSelectParser.HOUR_MICROSECOND_SYMBOL - 260)) | (1 << (SQLSelectParser.HOUR_SECOND_SYMBOL - 260)) | (1 << (SQLSelectParser.HOUR_MINUTE_SYMBOL - 260)) | (1 << (SQLSelectParser.DAY_MICROSECOND_SYMBOL - 260)) | (1 << (SQLSelectParser.DAY_SECOND_SYMBOL - 260)) | (1 << (SQLSelectParser.DAY_MINUTE_SYMBOL - 260)) | (1 << (SQLSelectParser.DAY_HOUR_SYMBOL - 260)))) !== 0) || ((((_la - 292)) & ~0x1f) == 0 && ((1 << (_la - 292)) & ((1 << (SQLSelectParser.YEAR_MONTH_SYMBOL - 292)) | (1 << (SQLSelectParser.BTREE_SYMBOL - 292)) | (1 << (SQLSelectParser.RTREE_SYMBOL - 292)) | (1 << (SQLSelectParser.HASH_SYMBOL - 292)) | (1 << (SQLSelectParser.REAL_SYMBOL - 292)) | (1 << (SQLSelectParser.DOUBLE_SYMBOL - 292)) | (1 << (SQLSelectParser.PRECISION_SYMBOL - 292)) | (1 << (SQLSelectParser.NUMERIC_SYMBOL - 292)) | (1 << (SQLSelectParser.NUMBER_SYMBOL - 292)) | (1 << (SQLSelectParser.FIXED_SYMBOL - 292)) | (1 << (SQLSelectParser.BIT_SYMBOL - 292)) | (1 << (SQLSelectParser.BOOL_SYMBOL - 292)) | (1 << (SQLSelectParser.VARYING_SYMBOL - 292)) | (1 << (SQLSelectParser.VARCHAR_SYMBOL - 292)) | (1 << (SQLSelectParser.NATIONAL_SYMBOL - 292)) | (1 << (SQLSelectParser.NVARCHAR_SYMBOL - 292)) | (1 << (SQLSelectParser.NCHAR_SYMBOL - 292)) | (1 << (SQLSelectParser.VARBINARY_SYMBOL - 292)) | (1 << (SQLSelectParser.TINYBLOB_SYMBOL - 292)) | (1 << (SQLSelectParser.BLOB_SYMBOL - 292)) | (1 << (SQLSelectParser.MEDIUMBLOB_SYMBOL - 292)) | (1 << (SQLSelectParser.LONGBLOB_SYMBOL - 292)) | (1 << (SQLSelectParser.LONG_SYMBOL - 292)) | (1 << (SQLSelectParser.TINYTEXT_SYMBOL - 292)) | (1 << (SQLSelectParser.TEXT_SYMBOL - 292)) | (1 << (SQLSelectParser.MEDIUMTEXT_SYMBOL - 292)) | (1 << (SQLSelectParser.LONGTEXT_SYMBOL - 292)) | (1 << (SQLSelectParser.ENUM_SYMBOL - 292)) | (1 << (SQLSelectParser.SERIAL_SYMBOL - 292)) | (1 << (SQLSelectParser.GEOMETRY_SYMBOL - 292)) | (1 << (SQLSelectParser.ZEROFILL_SYMBOL - 292)) | (1 << (SQLSelectParser.BYTE_SYMBOL - 292)))) !== 0) || ((((_la - 324)) & ~0x1f) == 0 && ((1 << (_la - 324)) & ((1 << (SQLSelectParser.UNICODE_SYMBOL - 324)) | (1 << (SQLSelectParser.TERMINATED_SYMBOL - 324)) | (1 << (SQLSelectParser.OPTIONALLY_SYMBOL - 324)) | (1 << (SQLSelectParser.ENCLOSED_SYMBOL - 324)) | (1 << (SQLSelectParser.ESCAPED_SYMBOL - 324)) | (1 << (SQLSelectParser.LINES_SYMBOL - 324)) | (1 << (SQLSelectParser.STARTING_SYMBOL - 324)) | (1 << (SQLSelectParser.GLOBAL_SYMBOL - 324)) | (1 << (SQLSelectParser.LOCAL_SYMBOL - 324)) | (1 << (SQLSelectParser.SESSION_SYMBOL - 324)) | (1 << (SQLSelectParser.VARIANT_SYMBOL - 324)) | (1 << (SQLSelectParser.OBJECT_SYMBOL - 324)) | (1 << (SQLSelectParser.GEOGRAPHY_SYMBOL - 324)) | (1 << (SQLSelectParser.UNDERSCORE_CHARSET - 324)) | (1 << (SQLSelectParser.IDENTIFIER - 324)) | (1 << (SQLSelectParser.NCHAR_TEXT - 324)) | (1 << (SQLSelectParser.BACK_TICK_QUOTED_ID - 324)) | (1 << (SQLSelectParser.DOUBLE_QUOTED_TEXT - 324)) | (1 << (SQLSelectParser.SINGLE_QUOTED_TEXT - 324)) | (1 << (SQLSelectParser.BRACKET_QUOTED_TEXT - 324)))) !== 0)) { - this.state = 1895; - this.exprList(); - } - - this.state = 1898; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - break; - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - udfExprList() { - let localctx = new UdfExprListContext(this, this._ctx, this.state); - this.enterRule(localctx, 208, SQLSelectParser.RULE_udfExprList); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 1902; - this.udfExpr(); - this.state = 1907; - this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===SQLSelectParser.COMMA_SYMBOL) { - this.state = 1903; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1904; - this.udfExpr(); - this.state = 1909; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - udfExpr() { - let localctx = new UdfExprContext(this, this._ctx, this.state); - this.enterRule(localctx, 210, SQLSelectParser.RULE_udfExpr); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 1910; - this.expr(0); - this.state = 1912; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(((((_la - 47)) & ~0x1f) == 0 && ((1 << (_la - 47)) & ((1 << (SQLSelectParser.TINYINT_SYMBOL - 47)) | (1 << (SQLSelectParser.SMALLINT_SYMBOL - 47)) | (1 << (SQLSelectParser.MEDIUMINT_SYMBOL - 47)) | (1 << (SQLSelectParser.BYTE_INT_SYMBOL - 47)) | (1 << (SQLSelectParser.INT_SYMBOL - 47)) | (1 << (SQLSelectParser.BIGINT_SYMBOL - 47)) | (1 << (SQLSelectParser.SECOND_SYMBOL - 47)) | (1 << (SQLSelectParser.MINUTE_SYMBOL - 47)) | (1 << (SQLSelectParser.HOUR_SYMBOL - 47)) | (1 << (SQLSelectParser.DAY_SYMBOL - 47)) | (1 << (SQLSelectParser.WEEK_SYMBOL - 47)) | (1 << (SQLSelectParser.MONTH_SYMBOL - 47)) | (1 << (SQLSelectParser.QUARTER_SYMBOL - 47)) | (1 << (SQLSelectParser.YEAR_SYMBOL - 47)) | (1 << (SQLSelectParser.DEFAULT_SYMBOL - 47)) | (1 << (SQLSelectParser.UNION_SYMBOL - 47)) | (1 << (SQLSelectParser.SELECT_SYMBOL - 47)) | (1 << (SQLSelectParser.ALL_SYMBOL - 47)) | (1 << (SQLSelectParser.DISTINCT_SYMBOL - 47)) | (1 << (SQLSelectParser.STRAIGHT_JOIN_SYMBOL - 47)) | (1 << (SQLSelectParser.HIGH_PRIORITY_SYMBOL - 47)) | (1 << (SQLSelectParser.SQL_SMALL_RESULT_SYMBOL - 47)) | (1 << (SQLSelectParser.SQL_BIG_RESULT_SYMBOL - 47)) | (1 << (SQLSelectParser.SQL_BUFFER_RESULT_SYMBOL - 47)) | (1 << (SQLSelectParser.SQL_CALC_FOUND_ROWS_SYMBOL - 47)) | (1 << (SQLSelectParser.LIMIT_SYMBOL - 47)) | (1 << (SQLSelectParser.OFFSET_SYMBOL - 47)) | (1 << (SQLSelectParser.INTO_SYMBOL - 47)) | (1 << (SQLSelectParser.OUTFILE_SYMBOL - 47)) | (1 << (SQLSelectParser.DUMPFILE_SYMBOL - 47)) | (1 << (SQLSelectParser.PROCEDURE_SYMBOL - 47)) | (1 << (SQLSelectParser.ANALYSE_SYMBOL - 47)))) !== 0) || ((((_la - 79)) & ~0x1f) == 0 && ((1 << (_la - 79)) & ((1 << (SQLSelectParser.HAVING_SYMBOL - 79)) | (1 << (SQLSelectParser.WINDOW_SYMBOL - 79)) | (1 << (SQLSelectParser.AS_SYMBOL - 79)) | (1 << (SQLSelectParser.PARTITION_SYMBOL - 79)) | (1 << (SQLSelectParser.BY_SYMBOL - 79)) | (1 << (SQLSelectParser.ROWS_SYMBOL - 79)) | (1 << (SQLSelectParser.RANGE_SYMBOL - 79)) | (1 << (SQLSelectParser.GROUPS_SYMBOL - 79)) | (1 << (SQLSelectParser.UNBOUNDED_SYMBOL - 79)) | (1 << (SQLSelectParser.PRECEDING_SYMBOL - 79)) | (1 << (SQLSelectParser.INTERVAL_SYMBOL - 79)) | (1 << (SQLSelectParser.CURRENT_SYMBOL - 79)) | (1 << (SQLSelectParser.ROW_SYMBOL - 79)) | (1 << (SQLSelectParser.BETWEEN_SYMBOL - 79)) | (1 << (SQLSelectParser.AND_SYMBOL - 79)) | (1 << (SQLSelectParser.FOLLOWING_SYMBOL - 79)) | (1 << (SQLSelectParser.EXCLUDE_SYMBOL - 79)) | (1 << (SQLSelectParser.GROUP_SYMBOL - 79)) | (1 << (SQLSelectParser.TIES_SYMBOL - 79)) | (1 << (SQLSelectParser.NO_SYMBOL - 79)) | (1 << (SQLSelectParser.OTHERS_SYMBOL - 79)) | (1 << (SQLSelectParser.WITH_SYMBOL - 79)) | (1 << (SQLSelectParser.WITHOUT_SYMBOL - 79)) | (1 << (SQLSelectParser.RECURSIVE_SYMBOL - 79)) | (1 << (SQLSelectParser.ROLLUP_SYMBOL - 79)) | (1 << (SQLSelectParser.CUBE_SYMBOL - 79)) | (1 << (SQLSelectParser.ORDER_SYMBOL - 79)) | (1 << (SQLSelectParser.ASC_SYMBOL - 79)) | (1 << (SQLSelectParser.DESC_SYMBOL - 79)) | (1 << (SQLSelectParser.FROM_SYMBOL - 79)) | (1 << (SQLSelectParser.DUAL_SYMBOL - 79)) | (1 << (SQLSelectParser.VALUES_SYMBOL - 79)))) !== 0) || ((((_la - 111)) & ~0x1f) == 0 && ((1 << (_la - 111)) & ((1 << (SQLSelectParser.TABLE_SYMBOL - 111)) | (1 << (SQLSelectParser.SQL_NO_CACHE_SYMBOL - 111)) | (1 << (SQLSelectParser.SQL_CACHE_SYMBOL - 111)) | (1 << (SQLSelectParser.MAX_STATEMENT_TIME_SYMBOL - 111)) | (1 << (SQLSelectParser.FOR_SYMBOL - 111)) | (1 << (SQLSelectParser.OF_SYMBOL - 111)) | (1 << (SQLSelectParser.LOCK_SYMBOL - 111)) | (1 << (SQLSelectParser.IN_SYMBOL - 111)) | (1 << (SQLSelectParser.SHARE_SYMBOL - 111)) | (1 << (SQLSelectParser.MODE_SYMBOL - 111)) | (1 << (SQLSelectParser.UPDATE_SYMBOL - 111)) | (1 << (SQLSelectParser.SKIP_SYMBOL - 111)) | (1 << (SQLSelectParser.LOCKED_SYMBOL - 111)) | (1 << (SQLSelectParser.NOWAIT_SYMBOL - 111)) | (1 << (SQLSelectParser.WHERE_SYMBOL - 111)) | (1 << (SQLSelectParser.OJ_SYMBOL - 111)) | (1 << (SQLSelectParser.ON_SYMBOL - 111)) | (1 << (SQLSelectParser.USING_SYMBOL - 111)) | (1 << (SQLSelectParser.NATURAL_SYMBOL - 111)) | (1 << (SQLSelectParser.INNER_SYMBOL - 111)) | (1 << (SQLSelectParser.JOIN_SYMBOL - 111)) | (1 << (SQLSelectParser.LEFT_SYMBOL - 111)) | (1 << (SQLSelectParser.RIGHT_SYMBOL - 111)) | (1 << (SQLSelectParser.OUTER_SYMBOL - 111)) | (1 << (SQLSelectParser.CROSS_SYMBOL - 111)) | (1 << (SQLSelectParser.LATERAL_SYMBOL - 111)) | (1 << (SQLSelectParser.JSON_TABLE_SYMBOL - 111)) | (1 << (SQLSelectParser.COLUMNS_SYMBOL - 111)) | (1 << (SQLSelectParser.ORDINALITY_SYMBOL - 111)) | (1 << (SQLSelectParser.EXISTS_SYMBOL - 111)) | (1 << (SQLSelectParser.PATH_SYMBOL - 111)) | (1 << (SQLSelectParser.NESTED_SYMBOL - 111)))) !== 0) || ((((_la - 143)) & ~0x1f) == 0 && ((1 << (_la - 143)) & ((1 << (SQLSelectParser.EMPTY_SYMBOL - 143)) | (1 << (SQLSelectParser.ERROR_SYMBOL - 143)) | (1 << (SQLSelectParser.NULL_SYMBOL - 143)) | (1 << (SQLSelectParser.USE_SYMBOL - 143)) | (1 << (SQLSelectParser.FORCE_SYMBOL - 143)) | (1 << (SQLSelectParser.IGNORE_SYMBOL - 143)) | (1 << (SQLSelectParser.KEY_SYMBOL - 143)) | (1 << (SQLSelectParser.INDEX_SYMBOL - 143)) | (1 << (SQLSelectParser.PRIMARY_SYMBOL - 143)) | (1 << (SQLSelectParser.IS_SYMBOL - 143)) | (1 << (SQLSelectParser.TRUE_SYMBOL - 143)) | (1 << (SQLSelectParser.FALSE_SYMBOL - 143)) | (1 << (SQLSelectParser.UNKNOWN_SYMBOL - 143)) | (1 << (SQLSelectParser.NOT_SYMBOL - 143)) | (1 << (SQLSelectParser.XOR_SYMBOL - 143)) | (1 << (SQLSelectParser.OR_SYMBOL - 143)) | (1 << (SQLSelectParser.ANY_SYMBOL - 143)) | (1 << (SQLSelectParser.MEMBER_SYMBOL - 143)) | (1 << (SQLSelectParser.SOUNDS_SYMBOL - 143)) | (1 << (SQLSelectParser.LIKE_SYMBOL - 143)) | (1 << (SQLSelectParser.ESCAPE_SYMBOL - 143)) | (1 << (SQLSelectParser.REGEXP_SYMBOL - 143)) | (1 << (SQLSelectParser.DIV_SYMBOL - 143)) | (1 << (SQLSelectParser.MOD_SYMBOL - 143)) | (1 << (SQLSelectParser.MATCH_SYMBOL - 143)) | (1 << (SQLSelectParser.AGAINST_SYMBOL - 143)) | (1 << (SQLSelectParser.BINARY_SYMBOL - 143)) | (1 << (SQLSelectParser.CAST_SYMBOL - 143)) | (1 << (SQLSelectParser.ARRAY_SYMBOL - 143)) | (1 << (SQLSelectParser.CASE_SYMBOL - 143)) | (1 << (SQLSelectParser.END_SYMBOL - 143)) | (1 << (SQLSelectParser.CONVERT_SYMBOL - 143)))) !== 0) || ((((_la - 175)) & ~0x1f) == 0 && ((1 << (_la - 175)) & ((1 << (SQLSelectParser.COLLATE_SYMBOL - 175)) | (1 << (SQLSelectParser.AVG_SYMBOL - 175)) | (1 << (SQLSelectParser.BIT_AND_SYMBOL - 175)) | (1 << (SQLSelectParser.BIT_OR_SYMBOL - 175)) | (1 << (SQLSelectParser.BIT_XOR_SYMBOL - 175)) | (1 << (SQLSelectParser.COUNT_SYMBOL - 175)) | (1 << (SQLSelectParser.MIN_SYMBOL - 175)) | (1 << (SQLSelectParser.MAX_SYMBOL - 175)) | (1 << (SQLSelectParser.STD_SYMBOL - 175)) | (1 << (SQLSelectParser.VARIANCE_SYMBOL - 175)) | (1 << (SQLSelectParser.STDDEV_SAMP_SYMBOL - 175)) | (1 << (SQLSelectParser.VAR_SAMP_SYMBOL - 175)) | (1 << (SQLSelectParser.SUM_SYMBOL - 175)) | (1 << (SQLSelectParser.GROUP_CONCAT_SYMBOL - 175)) | (1 << (SQLSelectParser.SEPARATOR_SYMBOL - 175)) | (1 << (SQLSelectParser.GROUPING_SYMBOL - 175)) | (1 << (SQLSelectParser.ROW_NUMBER_SYMBOL - 175)) | (1 << (SQLSelectParser.RANK_SYMBOL - 175)) | (1 << (SQLSelectParser.DENSE_RANK_SYMBOL - 175)) | (1 << (SQLSelectParser.CUME_DIST_SYMBOL - 175)) | (1 << (SQLSelectParser.PERCENT_RANK_SYMBOL - 175)) | (1 << (SQLSelectParser.NTILE_SYMBOL - 175)) | (1 << (SQLSelectParser.LEAD_SYMBOL - 175)) | (1 << (SQLSelectParser.LAG_SYMBOL - 175)) | (1 << (SQLSelectParser.FIRST_VALUE_SYMBOL - 175)) | (1 << (SQLSelectParser.LAST_VALUE_SYMBOL - 175)) | (1 << (SQLSelectParser.NTH_VALUE_SYMBOL - 175)) | (1 << (SQLSelectParser.FIRST_SYMBOL - 175)) | (1 << (SQLSelectParser.LAST_SYMBOL - 175)) | (1 << (SQLSelectParser.OVER_SYMBOL - 175)) | (1 << (SQLSelectParser.RESPECT_SYMBOL - 175)) | (1 << (SQLSelectParser.NULLS_SYMBOL - 175)))) !== 0) || ((((_la - 207)) & ~0x1f) == 0 && ((1 << (_la - 207)) & ((1 << (SQLSelectParser.JSON_ARRAYAGG_SYMBOL - 207)) | (1 << (SQLSelectParser.JSON_OBJECTAGG_SYMBOL - 207)) | (1 << (SQLSelectParser.BOOLEAN_SYMBOL - 207)) | (1 << (SQLSelectParser.LANGUAGE_SYMBOL - 207)) | (1 << (SQLSelectParser.QUERY_SYMBOL - 207)) | (1 << (SQLSelectParser.EXPANSION_SYMBOL - 207)) | (1 << (SQLSelectParser.CHAR_SYMBOL - 207)) | (1 << (SQLSelectParser.CURRENT_USER_SYMBOL - 207)) | (1 << (SQLSelectParser.DATE_SYMBOL - 207)) | (1 << (SQLSelectParser.INSERT_SYMBOL - 207)) | (1 << (SQLSelectParser.TIME_SYMBOL - 207)) | (1 << (SQLSelectParser.TIMESTAMP_SYMBOL - 207)) | (1 << (SQLSelectParser.TIMESTAMP_LTZ_SYMBOL - 207)) | (1 << (SQLSelectParser.TIMESTAMP_NTZ_SYMBOL - 207)) | (1 << (SQLSelectParser.ZONE_SYMBOL - 207)) | (1 << (SQLSelectParser.USER_SYMBOL - 207)) | (1 << (SQLSelectParser.ADDDATE_SYMBOL - 207)) | (1 << (SQLSelectParser.SUBDATE_SYMBOL - 207)) | (1 << (SQLSelectParser.CURDATE_SYMBOL - 207)) | (1 << (SQLSelectParser.CURTIME_SYMBOL - 207)) | (1 << (SQLSelectParser.DATE_ADD_SYMBOL - 207)) | (1 << (SQLSelectParser.DATE_SUB_SYMBOL - 207)) | (1 << (SQLSelectParser.EXTRACT_SYMBOL - 207)) | (1 << (SQLSelectParser.GET_FORMAT_SYMBOL - 207)) | (1 << (SQLSelectParser.NOW_SYMBOL - 207)) | (1 << (SQLSelectParser.POSITION_SYMBOL - 207)) | (1 << (SQLSelectParser.SYSDATE_SYMBOL - 207)) | (1 << (SQLSelectParser.TIMESTAMP_ADD_SYMBOL - 207)) | (1 << (SQLSelectParser.TIMESTAMP_DIFF_SYMBOL - 207)) | (1 << (SQLSelectParser.UTC_DATE_SYMBOL - 207)) | (1 << (SQLSelectParser.UTC_TIME_SYMBOL - 207)) | (1 << (SQLSelectParser.UTC_TIMESTAMP_SYMBOL - 207)))) !== 0) || ((((_la - 239)) & ~0x1f) == 0 && ((1 << (_la - 239)) & ((1 << (SQLSelectParser.ASCII_SYMBOL - 239)) | (1 << (SQLSelectParser.CHARSET_SYMBOL - 239)) | (1 << (SQLSelectParser.COALESCE_SYMBOL - 239)) | (1 << (SQLSelectParser.COLLATION_SYMBOL - 239)) | (1 << (SQLSelectParser.DATABASE_SYMBOL - 239)) | (1 << (SQLSelectParser.IF_SYMBOL - 239)) | (1 << (SQLSelectParser.FORMAT_SYMBOL - 239)) | (1 << (SQLSelectParser.MICROSECOND_SYMBOL - 239)) | (1 << (SQLSelectParser.OLD_PASSWORD_SYMBOL - 239)) | (1 << (SQLSelectParser.PASSWORD_SYMBOL - 239)) | (1 << (SQLSelectParser.REPEAT_SYMBOL - 239)) | (1 << (SQLSelectParser.REPLACE_SYMBOL - 239)) | (1 << (SQLSelectParser.REVERSE_SYMBOL - 239)) | (1 << (SQLSelectParser.ROW_COUNT_SYMBOL - 239)) | (1 << (SQLSelectParser.TRUNCATE_SYMBOL - 239)) | (1 << (SQLSelectParser.WEIGHT_STRING_SYMBOL - 239)) | (1 << (SQLSelectParser.CONTAINS_SYMBOL - 239)) | (1 << (SQLSelectParser.GEOMETRYCOLLECTION_SYMBOL - 239)) | (1 << (SQLSelectParser.LINESTRING_SYMBOL - 239)) | (1 << (SQLSelectParser.MULTILINESTRING_SYMBOL - 239)) | (1 << (SQLSelectParser.MULTIPOINT_SYMBOL - 239)) | (1 << (SQLSelectParser.MULTIPOLYGON_SYMBOL - 239)) | (1 << (SQLSelectParser.POINT_SYMBOL - 239)) | (1 << (SQLSelectParser.POLYGON_SYMBOL - 239)) | (1 << (SQLSelectParser.LEVEL_SYMBOL - 239)) | (1 << (SQLSelectParser.DATETIME_SYMBOL - 239)) | (1 << (SQLSelectParser.TRIM_SYMBOL - 239)) | (1 << (SQLSelectParser.LEADING_SYMBOL - 239)) | (1 << (SQLSelectParser.TRAILING_SYMBOL - 239)) | (1 << (SQLSelectParser.BOTH_SYMBOL - 239)) | (1 << (SQLSelectParser.STRING_SYMBOL - 239)) | (1 << (SQLSelectParser.SUBSTRING_SYMBOL - 239)))) !== 0) || ((((_la - 271)) & ~0x1f) == 0 && ((1 << (_la - 271)) & ((1 << (SQLSelectParser.WHEN_SYMBOL - 271)) | (1 << (SQLSelectParser.THEN_SYMBOL - 271)) | (1 << (SQLSelectParser.ELSE_SYMBOL - 271)) | (1 << (SQLSelectParser.SIGNED_SYMBOL - 271)) | (1 << (SQLSelectParser.UNSIGNED_SYMBOL - 271)) | (1 << (SQLSelectParser.DECIMAL_SYMBOL - 271)) | (1 << (SQLSelectParser.JSON_SYMBOL - 271)) | (1 << (SQLSelectParser.FLOAT_SYMBOL - 271)) | (1 << (SQLSelectParser.FLOAT_SYMBOL_4 - 271)) | (1 << (SQLSelectParser.FLOAT_SYMBOL_8 - 271)) | (1 << (SQLSelectParser.SET_SYMBOL - 271)) | (1 << (SQLSelectParser.SECOND_MICROSECOND_SYMBOL - 271)) | (1 << (SQLSelectParser.MINUTE_MICROSECOND_SYMBOL - 271)) | (1 << (SQLSelectParser.MINUTE_SECOND_SYMBOL - 271)) | (1 << (SQLSelectParser.HOUR_MICROSECOND_SYMBOL - 271)) | (1 << (SQLSelectParser.HOUR_SECOND_SYMBOL - 271)) | (1 << (SQLSelectParser.HOUR_MINUTE_SYMBOL - 271)) | (1 << (SQLSelectParser.DAY_MICROSECOND_SYMBOL - 271)) | (1 << (SQLSelectParser.DAY_SECOND_SYMBOL - 271)) | (1 << (SQLSelectParser.DAY_MINUTE_SYMBOL - 271)) | (1 << (SQLSelectParser.DAY_HOUR_SYMBOL - 271)) | (1 << (SQLSelectParser.YEAR_MONTH_SYMBOL - 271)) | (1 << (SQLSelectParser.BTREE_SYMBOL - 271)) | (1 << (SQLSelectParser.RTREE_SYMBOL - 271)) | (1 << (SQLSelectParser.HASH_SYMBOL - 271)) | (1 << (SQLSelectParser.REAL_SYMBOL - 271)) | (1 << (SQLSelectParser.DOUBLE_SYMBOL - 271)) | (1 << (SQLSelectParser.PRECISION_SYMBOL - 271)) | (1 << (SQLSelectParser.NUMERIC_SYMBOL - 271)) | (1 << (SQLSelectParser.NUMBER_SYMBOL - 271)) | (1 << (SQLSelectParser.FIXED_SYMBOL - 271)) | (1 << (SQLSelectParser.BIT_SYMBOL - 271)))) !== 0) || ((((_la - 303)) & ~0x1f) == 0 && ((1 << (_la - 303)) & ((1 << (SQLSelectParser.BOOL_SYMBOL - 303)) | (1 << (SQLSelectParser.VARYING_SYMBOL - 303)) | (1 << (SQLSelectParser.VARCHAR_SYMBOL - 303)) | (1 << (SQLSelectParser.NATIONAL_SYMBOL - 303)) | (1 << (SQLSelectParser.NVARCHAR_SYMBOL - 303)) | (1 << (SQLSelectParser.NCHAR_SYMBOL - 303)) | (1 << (SQLSelectParser.VARBINARY_SYMBOL - 303)) | (1 << (SQLSelectParser.TINYBLOB_SYMBOL - 303)) | (1 << (SQLSelectParser.BLOB_SYMBOL - 303)) | (1 << (SQLSelectParser.MEDIUMBLOB_SYMBOL - 303)) | (1 << (SQLSelectParser.LONGBLOB_SYMBOL - 303)) | (1 << (SQLSelectParser.LONG_SYMBOL - 303)) | (1 << (SQLSelectParser.TINYTEXT_SYMBOL - 303)) | (1 << (SQLSelectParser.TEXT_SYMBOL - 303)) | (1 << (SQLSelectParser.MEDIUMTEXT_SYMBOL - 303)) | (1 << (SQLSelectParser.LONGTEXT_SYMBOL - 303)) | (1 << (SQLSelectParser.ENUM_SYMBOL - 303)) | (1 << (SQLSelectParser.SERIAL_SYMBOL - 303)) | (1 << (SQLSelectParser.GEOMETRY_SYMBOL - 303)) | (1 << (SQLSelectParser.ZEROFILL_SYMBOL - 303)) | (1 << (SQLSelectParser.BYTE_SYMBOL - 303)) | (1 << (SQLSelectParser.UNICODE_SYMBOL - 303)) | (1 << (SQLSelectParser.TERMINATED_SYMBOL - 303)) | (1 << (SQLSelectParser.OPTIONALLY_SYMBOL - 303)) | (1 << (SQLSelectParser.ENCLOSED_SYMBOL - 303)) | (1 << (SQLSelectParser.ESCAPED_SYMBOL - 303)) | (1 << (SQLSelectParser.LINES_SYMBOL - 303)) | (1 << (SQLSelectParser.STARTING_SYMBOL - 303)) | (1 << (SQLSelectParser.GLOBAL_SYMBOL - 303)) | (1 << (SQLSelectParser.LOCAL_SYMBOL - 303)) | (1 << (SQLSelectParser.SESSION_SYMBOL - 303)) | (1 << (SQLSelectParser.VARIANT_SYMBOL - 303)))) !== 0) || ((((_la - 335)) & ~0x1f) == 0 && ((1 << (_la - 335)) & ((1 << (SQLSelectParser.OBJECT_SYMBOL - 335)) | (1 << (SQLSelectParser.GEOGRAPHY_SYMBOL - 335)) | (1 << (SQLSelectParser.IDENTIFIER - 335)) | (1 << (SQLSelectParser.BACK_TICK_QUOTED_ID - 335)) | (1 << (SQLSelectParser.DOUBLE_QUOTED_TEXT - 335)) | (1 << (SQLSelectParser.SINGLE_QUOTED_TEXT - 335)) | (1 << (SQLSelectParser.BRACKET_QUOTED_TEXT - 335)))) !== 0)) { - this.state = 1911; - this.selectAlias(); - } - - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - variable() { - let localctx = new VariableContext(this, this._ctx, this.state); - this.enterRule(localctx, 212, SQLSelectParser.RULE_variable); - try { - this.state = 1916; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.AT_SIGN_SYMBOL: - case SQLSelectParser.AT_TEXT_SUFFIX: - this.enterOuterAlt(localctx, 1); - this.state = 1914; - this.userVariable(); - break; - case SQLSelectParser.AT_AT_SIGN_SYMBOL: - this.enterOuterAlt(localctx, 2); - this.state = 1915; - this.systemVariable(); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - userVariable() { - let localctx = new UserVariableContext(this, this._ctx, this.state); - this.enterRule(localctx, 214, SQLSelectParser.RULE_userVariable); - try { - this.state = 1921; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.AT_SIGN_SYMBOL: - this.enterOuterAlt(localctx, 1); - this.state = 1918; - this.match(SQLSelectParser.AT_SIGN_SYMBOL); - this.state = 1919; - this.textOrIdentifier(); - break; - case SQLSelectParser.AT_TEXT_SUFFIX: - this.enterOuterAlt(localctx, 2); - this.state = 1920; - this.match(SQLSelectParser.AT_TEXT_SUFFIX); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - systemVariable() { - let localctx = new SystemVariableContext(this, this._ctx, this.state); - this.enterRule(localctx, 216, SQLSelectParser.RULE_systemVariable); - try { - this.enterOuterAlt(localctx, 1); - this.state = 1923; - this.match(SQLSelectParser.AT_AT_SIGN_SYMBOL); - this.state = 1925; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,229,this._ctx); - if(la_===1) { - this.state = 1924; - this.varIdentType(); - - } - this.state = 1927; - this.textOrIdentifier(); - this.state = 1929; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,230,this._ctx); - if(la_===1) { - this.state = 1928; - this.dotIdentifier(); - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - whenExpression() { - let localctx = new WhenExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 218, SQLSelectParser.RULE_whenExpression); - try { - this.enterOuterAlt(localctx, 1); - this.state = 1931; - this.match(SQLSelectParser.WHEN_SYMBOL); - this.state = 1932; - this.expr(0); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - thenExpression() { - let localctx = new ThenExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 220, SQLSelectParser.RULE_thenExpression); - try { - this.enterOuterAlt(localctx, 1); - this.state = 1934; - this.match(SQLSelectParser.THEN_SYMBOL); - this.state = 1935; - this.expr(0); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - elseExpression() { - let localctx = new ElseExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 222, SQLSelectParser.RULE_elseExpression); - try { - this.enterOuterAlt(localctx, 1); - this.state = 1937; - this.match(SQLSelectParser.ELSE_SYMBOL); - this.state = 1938; - this.expr(0); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - exprList() { - let localctx = new ExprListContext(this, this._ctx, this.state); - this.enterRule(localctx, 224, SQLSelectParser.RULE_exprList); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 1940; - this.expr(0); - this.state = 1945; - this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===SQLSelectParser.COMMA_SYMBOL) { - this.state = 1941; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1942; - this.expr(0); - this.state = 1947; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - charset() { - let localctx = new CharsetContext(this, this._ctx, this.state); - this.enterRule(localctx, 226, SQLSelectParser.RULE_charset); - try { - this.state = 1951; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.CHAR_SYMBOL: - this.enterOuterAlt(localctx, 1); - this.state = 1948; - this.match(SQLSelectParser.CHAR_SYMBOL); - this.state = 1949; - this.match(SQLSelectParser.SET_SYMBOL); - break; - case SQLSelectParser.CHARSET_SYMBOL: - this.enterOuterAlt(localctx, 2); - this.state = 1950; - this.match(SQLSelectParser.CHARSET_SYMBOL); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - notRule() { - let localctx = new NotRuleContext(this, this._ctx, this.state); - this.enterRule(localctx, 228, SQLSelectParser.RULE_notRule); - try { - this.enterOuterAlt(localctx, 1); - this.state = 1953; - this.match(SQLSelectParser.NOT_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - not2Rule() { - let localctx = new Not2RuleContext(this, this._ctx, this.state); - this.enterRule(localctx, 230, SQLSelectParser.RULE_not2Rule); - try { - this.enterOuterAlt(localctx, 1); - this.state = 1955; - this.match(SQLSelectParser.LOGICAL_NOT_OPERATOR); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - interval() { - let localctx = new IntervalContext(this, this._ctx, this.state); - this.enterRule(localctx, 232, SQLSelectParser.RULE_interval); - var _la = 0; // Token type - try { - this.state = 1959; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.SECOND_SYMBOL: - case SQLSelectParser.MINUTE_SYMBOL: - case SQLSelectParser.HOUR_SYMBOL: - case SQLSelectParser.DAY_SYMBOL: - case SQLSelectParser.WEEK_SYMBOL: - case SQLSelectParser.MONTH_SYMBOL: - case SQLSelectParser.QUARTER_SYMBOL: - case SQLSelectParser.YEAR_SYMBOL: - case SQLSelectParser.MICROSECOND_SYMBOL: - this.enterOuterAlt(localctx, 1); - this.state = 1957; - this.intervalTimeStamp(); - break; - case SQLSelectParser.SECOND_MICROSECOND_SYMBOL: - case SQLSelectParser.MINUTE_MICROSECOND_SYMBOL: - case SQLSelectParser.MINUTE_SECOND_SYMBOL: - case SQLSelectParser.HOUR_MICROSECOND_SYMBOL: - case SQLSelectParser.HOUR_SECOND_SYMBOL: - case SQLSelectParser.HOUR_MINUTE_SYMBOL: - case SQLSelectParser.DAY_MICROSECOND_SYMBOL: - case SQLSelectParser.DAY_SECOND_SYMBOL: - case SQLSelectParser.DAY_MINUTE_SYMBOL: - case SQLSelectParser.DAY_HOUR_SYMBOL: - case SQLSelectParser.YEAR_MONTH_SYMBOL: - this.enterOuterAlt(localctx, 2); - this.state = 1958; - _la = this._input.LA(1); - if(!(((((_la - 282)) & ~0x1f) == 0 && ((1 << (_la - 282)) & ((1 << (SQLSelectParser.SECOND_MICROSECOND_SYMBOL - 282)) | (1 << (SQLSelectParser.MINUTE_MICROSECOND_SYMBOL - 282)) | (1 << (SQLSelectParser.MINUTE_SECOND_SYMBOL - 282)) | (1 << (SQLSelectParser.HOUR_MICROSECOND_SYMBOL - 282)) | (1 << (SQLSelectParser.HOUR_SECOND_SYMBOL - 282)) | (1 << (SQLSelectParser.HOUR_MINUTE_SYMBOL - 282)) | (1 << (SQLSelectParser.DAY_MICROSECOND_SYMBOL - 282)) | (1 << (SQLSelectParser.DAY_SECOND_SYMBOL - 282)) | (1 << (SQLSelectParser.DAY_MINUTE_SYMBOL - 282)) | (1 << (SQLSelectParser.DAY_HOUR_SYMBOL - 282)) | (1 << (SQLSelectParser.YEAR_MONTH_SYMBOL - 282)))) !== 0))) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - intervalTimeStamp() { - let localctx = new IntervalTimeStampContext(this, this._ctx, this.state); - this.enterRule(localctx, 234, SQLSelectParser.RULE_intervalTimeStamp); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 1961; - _la = this._input.LA(1); - if(!(((((_la - 53)) & ~0x1f) == 0 && ((1 << (_la - 53)) & ((1 << (SQLSelectParser.SECOND_SYMBOL - 53)) | (1 << (SQLSelectParser.MINUTE_SYMBOL - 53)) | (1 << (SQLSelectParser.HOUR_SYMBOL - 53)) | (1 << (SQLSelectParser.DAY_SYMBOL - 53)) | (1 << (SQLSelectParser.WEEK_SYMBOL - 53)) | (1 << (SQLSelectParser.MONTH_SYMBOL - 53)) | (1 << (SQLSelectParser.QUARTER_SYMBOL - 53)) | (1 << (SQLSelectParser.YEAR_SYMBOL - 53)))) !== 0) || _la===SQLSelectParser.MICROSECOND_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - exprListWithParentheses() { - let localctx = new ExprListWithParenthesesContext(this, this._ctx, this.state); - this.enterRule(localctx, 236, SQLSelectParser.RULE_exprListWithParentheses); - try { - this.enterOuterAlt(localctx, 1); - this.state = 1963; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1964; - this.exprList(); - this.state = 1965; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - exprWithParentheses() { - let localctx = new ExprWithParenthesesContext(this, this._ctx, this.state); - this.enterRule(localctx, 238, SQLSelectParser.RULE_exprWithParentheses); - try { - this.enterOuterAlt(localctx, 1); - this.state = 1967; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1968; - this.expr(0); - this.state = 1969; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - simpleExprWithParentheses() { - let localctx = new SimpleExprWithParenthesesContext(this, this._ctx, this.state); - this.enterRule(localctx, 240, SQLSelectParser.RULE_simpleExprWithParentheses); - try { - this.enterOuterAlt(localctx, 1); - this.state = 1971; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 1972; - this.simpleExpr(0); - this.state = 1973; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - orderList() { - let localctx = new OrderListContext(this, this._ctx, this.state); - this.enterRule(localctx, 242, SQLSelectParser.RULE_orderList); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 1975; - this.orderExpression(); - this.state = 1980; - this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===SQLSelectParser.COMMA_SYMBOL) { - this.state = 1976; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 1977; - this.orderExpression(); - this.state = 1982; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - orderExpression() { - let localctx = new OrderExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 244, SQLSelectParser.RULE_orderExpression); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 1983; - this.expr(0); - this.state = 1985; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.ASC_SYMBOL || _la===SQLSelectParser.DESC_SYMBOL) { - this.state = 1984; - this.direction(); - } - - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - indexType() { - let localctx = new IndexTypeContext(this, this._ctx, this.state); - this.enterRule(localctx, 246, SQLSelectParser.RULE_indexType); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 1987; - _la = this._input.LA(1); - if(!(((((_la - 293)) & ~0x1f) == 0 && ((1 << (_la - 293)) & ((1 << (SQLSelectParser.BTREE_SYMBOL - 293)) | (1 << (SQLSelectParser.RTREE_SYMBOL - 293)) | (1 << (SQLSelectParser.HASH_SYMBOL - 293)))) !== 0))) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - dataType() { - let localctx = new DataTypeContext(this, this._ctx, this.state); - this.enterRule(localctx, 248, SQLSelectParser.RULE_dataType); - var _la = 0; // Token type - try { - this.state = 2184; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,275,this._ctx); - switch(la_) { - case 1: - this.enterOuterAlt(localctx, 1); - this.state = 1989; - _la = this._input.LA(1); - if(!(((((_la - 47)) & ~0x1f) == 0 && ((1 << (_la - 47)) & ((1 << (SQLSelectParser.TINYINT_SYMBOL - 47)) | (1 << (SQLSelectParser.SMALLINT_SYMBOL - 47)) | (1 << (SQLSelectParser.MEDIUMINT_SYMBOL - 47)) | (1 << (SQLSelectParser.BYTE_INT_SYMBOL - 47)) | (1 << (SQLSelectParser.INT_SYMBOL - 47)) | (1 << (SQLSelectParser.BIGINT_SYMBOL - 47)))) !== 0) || ((((_la - 276)) & ~0x1f) == 0 && ((1 << (_la - 276)) & ((1 << (SQLSelectParser.DECIMAL_SYMBOL - 276)) | (1 << (SQLSelectParser.NUMERIC_SYMBOL - 276)) | (1 << (SQLSelectParser.NUMBER_SYMBOL - 276)))) !== 0))) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 1991; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,236,this._ctx); - if(la_===1) { - this.state = 1990; - this.fieldLength(); - - } - this.state = 1994; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,237,this._ctx); - if(la_===1) { - this.state = 1993; - this.fieldOptions(); - - } - break; - - case 2: - this.enterOuterAlt(localctx, 2); - this.state = 2001; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.REAL_SYMBOL: - this.state = 1996; - this.match(SQLSelectParser.REAL_SYMBOL); - break; - case SQLSelectParser.DOUBLE_SYMBOL: - this.state = 1997; - this.match(SQLSelectParser.DOUBLE_SYMBOL); - this.state = 1999; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,238,this._ctx); - if(la_===1) { - this.state = 1998; - this.match(SQLSelectParser.PRECISION_SYMBOL); - - } - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - this.state = 2004; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,240,this._ctx); - if(la_===1) { - this.state = 2003; - this.precision(); - - } - this.state = 2007; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,241,this._ctx); - if(la_===1) { - this.state = 2006; - this.fieldOptions(); - - } - break; - - case 3: - this.enterOuterAlt(localctx, 3); - this.state = 2009; - _la = this._input.LA(1); - if(!(((((_la - 276)) & ~0x1f) == 0 && ((1 << (_la - 276)) & ((1 << (SQLSelectParser.DECIMAL_SYMBOL - 276)) | (1 << (SQLSelectParser.FLOAT_SYMBOL - 276)) | (1 << (SQLSelectParser.FLOAT_SYMBOL_4 - 276)) | (1 << (SQLSelectParser.FLOAT_SYMBOL_8 - 276)) | (1 << (SQLSelectParser.NUMERIC_SYMBOL - 276)) | (1 << (SQLSelectParser.FIXED_SYMBOL - 276)))) !== 0))) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 2011; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,242,this._ctx); - if(la_===1) { - this.state = 2010; - this.floatOptions(); - - } - this.state = 2014; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,243,this._ctx); - if(la_===1) { - this.state = 2013; - this.fieldOptions(); - - } - break; - - case 4: - this.enterOuterAlt(localctx, 4); - this.state = 2016; - this.match(SQLSelectParser.BIT_SYMBOL); - this.state = 2018; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,244,this._ctx); - if(la_===1) { - this.state = 2017; - this.fieldLength(); - - } - break; - - case 5: - this.enterOuterAlt(localctx, 5); - this.state = 2020; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.BOOLEAN_SYMBOL || _la===SQLSelectParser.BOOL_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - break; - - case 6: - this.enterOuterAlt(localctx, 6); - this.state = 2021; - this.nchar(); - this.state = 2023; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,245,this._ctx); - if(la_===1) { - this.state = 2022; - this.fieldLength(); - - } - this.state = 2026; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,246,this._ctx); - if(la_===1) { - this.state = 2025; - this.match(SQLSelectParser.BINARY_SYMBOL); - - } - break; - - case 7: - this.enterOuterAlt(localctx, 7); - this.state = 2028; - this.match(SQLSelectParser.BINARY_SYMBOL); - this.state = 2030; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,247,this._ctx); - if(la_===1) { - this.state = 2029; - this.fieldLength(); - - } - break; - - case 8: - this.enterOuterAlt(localctx, 8); - this.state = 2038; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,248,this._ctx); - switch(la_) { - case 1: - this.state = 2032; - this.match(SQLSelectParser.VARCHAR_SYMBOL); - break; - - case 2: - this.state = 2033; - this.match(SQLSelectParser.CHAR_SYMBOL); - break; - - case 3: - this.state = 2034; - this.match(SQLSelectParser.CHAR_SYMBOL); - this.state = 2035; - this.match(SQLSelectParser.VARYING_SYMBOL); - break; - - case 4: - this.state = 2036; - this.match(SQLSelectParser.STRING_SYMBOL); - break; - - case 5: - this.state = 2037; - this.match(SQLSelectParser.TEXT_SYMBOL); - break; - - } - this.state = 2040; - this.fieldLength(); - this.state = 2042; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,249,this._ctx); - if(la_===1) { - this.state = 2041; - this.charsetWithOptBinary(); - - } - break; - - case 9: - this.enterOuterAlt(localctx, 9); - this.state = 2054; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,250,this._ctx); - switch(la_) { - case 1: - this.state = 2044; - this.match(SQLSelectParser.NATIONAL_SYMBOL); - this.state = 2045; - this.match(SQLSelectParser.VARCHAR_SYMBOL); - break; - - case 2: - this.state = 2046; - this.match(SQLSelectParser.NVARCHAR_SYMBOL); - break; - - case 3: - this.state = 2047; - this.match(SQLSelectParser.NCHAR_SYMBOL); - this.state = 2048; - this.match(SQLSelectParser.VARCHAR_SYMBOL); - break; - - case 4: - this.state = 2049; - this.match(SQLSelectParser.NATIONAL_SYMBOL); - this.state = 2050; - this.match(SQLSelectParser.CHAR_SYMBOL); - this.state = 2051; - this.match(SQLSelectParser.VARYING_SYMBOL); - break; - - case 5: - this.state = 2052; - this.match(SQLSelectParser.NCHAR_SYMBOL); - this.state = 2053; - this.match(SQLSelectParser.VARYING_SYMBOL); - break; - - } - this.state = 2056; - this.fieldLength(); - this.state = 2058; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,251,this._ctx); - if(la_===1) { - this.state = 2057; - this.match(SQLSelectParser.BINARY_SYMBOL); - - } - break; - - case 10: - this.enterOuterAlt(localctx, 10); - this.state = 2060; - this.match(SQLSelectParser.VARBINARY_SYMBOL); - this.state = 2061; - this.fieldLength(); - break; - - case 11: - this.enterOuterAlt(localctx, 11); - this.state = 2062; - this.match(SQLSelectParser.YEAR_SYMBOL); - this.state = 2064; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,252,this._ctx); - if(la_===1) { - this.state = 2063; - this.fieldLength(); - - } - this.state = 2067; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,253,this._ctx); - if(la_===1) { - this.state = 2066; - this.fieldOptions(); - - } - break; - - case 12: - this.enterOuterAlt(localctx, 12); - this.state = 2069; - this.match(SQLSelectParser.DATE_SYMBOL); - break; - - case 13: - this.enterOuterAlt(localctx, 13); - this.state = 2070; - this.match(SQLSelectParser.TIME_SYMBOL); - this.state = 2072; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,254,this._ctx); - if(la_===1) { - this.state = 2071; - this.typeDatetimePrecision(); - - } - break; - - case 14: - this.enterOuterAlt(localctx, 14); - this.state = 2074; - this.match(SQLSelectParser.TIMESTAMP_SYMBOL); - this.state = 2076; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,255,this._ctx); - if(la_===1) { - this.state = 2075; - this.typeDatetimePrecision(); - - } - break; - - case 15: - this.enterOuterAlt(localctx, 15); - this.state = 2078; - this.match(SQLSelectParser.TIMESTAMP_SYMBOL); - this.state = 2079; - this.match(SQLSelectParser.WITH_SYMBOL); - this.state = 2080; - this.match(SQLSelectParser.LOCAL_SYMBOL); - this.state = 2081; - this.match(SQLSelectParser.TIME_SYMBOL); - this.state = 2082; - this.match(SQLSelectParser.ZONE_SYMBOL); - this.state = 2084; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,256,this._ctx); - if(la_===1) { - this.state = 2083; - this.typeDatetimePrecision(); - - } - break; - - case 16: - this.enterOuterAlt(localctx, 16); - this.state = 2086; - this.match(SQLSelectParser.TIMESTAMP_SYMBOL); - this.state = 2087; - this.match(SQLSelectParser.WITHOUT_SYMBOL); - this.state = 2088; - this.match(SQLSelectParser.LOCAL_SYMBOL); - this.state = 2089; - this.match(SQLSelectParser.TIME_SYMBOL); - this.state = 2090; - this.match(SQLSelectParser.ZONE_SYMBOL); - this.state = 2092; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,257,this._ctx); - if(la_===1) { - this.state = 2091; - this.typeDatetimePrecision(); - - } - break; - - case 17: - this.enterOuterAlt(localctx, 17); - this.state = 2094; - this.match(SQLSelectParser.TIMESTAMP_SYMBOL); - this.state = 2095; - this.match(SQLSelectParser.WITH_SYMBOL); - this.state = 2096; - this.match(SQLSelectParser.TIME_SYMBOL); - this.state = 2097; - this.match(SQLSelectParser.ZONE_SYMBOL); - this.state = 2099; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,258,this._ctx); - if(la_===1) { - this.state = 2098; - this.typeDatetimePrecision(); - - } - break; - - case 18: - this.enterOuterAlt(localctx, 18); - this.state = 2101; - this.match(SQLSelectParser.DATETIME_SYMBOL); - this.state = 2103; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,259,this._ctx); - if(la_===1) { - this.state = 2102; - this.typeDatetimePrecision(); - - } - break; - - case 19: - this.enterOuterAlt(localctx, 19); - this.state = 2105; - this.match(SQLSelectParser.TINYBLOB_SYMBOL); - break; - - case 20: - this.enterOuterAlt(localctx, 20); - this.state = 2106; - this.match(SQLSelectParser.BLOB_SYMBOL); - this.state = 2108; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,260,this._ctx); - if(la_===1) { - this.state = 2107; - this.fieldLength(); - - } - break; - - case 21: - this.enterOuterAlt(localctx, 21); - this.state = 2110; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.MEDIUMBLOB_SYMBOL || _la===SQLSelectParser.LONGBLOB_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - break; - - case 22: - this.enterOuterAlt(localctx, 22); - this.state = 2111; - this.match(SQLSelectParser.LONG_SYMBOL); - this.state = 2112; - this.match(SQLSelectParser.VARBINARY_SYMBOL); - break; - - case 23: - this.enterOuterAlt(localctx, 23); - this.state = 2113; - this.match(SQLSelectParser.LONG_SYMBOL); - this.state = 2117; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,261,this._ctx); - if(la_===1) { - this.state = 2114; - this.match(SQLSelectParser.CHAR_SYMBOL); - this.state = 2115; - this.match(SQLSelectParser.VARYING_SYMBOL); - - } else if(la_===2) { - this.state = 2116; - this.match(SQLSelectParser.VARCHAR_SYMBOL); - - } - this.state = 2120; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,262,this._ctx); - if(la_===1) { - this.state = 2119; - this.charsetWithOptBinary(); - - } - break; - - case 24: - this.enterOuterAlt(localctx, 24); - this.state = 2122; - this.match(SQLSelectParser.TINYTEXT_SYMBOL); - this.state = 2124; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,263,this._ctx); - if(la_===1) { - this.state = 2123; - this.charsetWithOptBinary(); - - } - break; - - case 25: - this.enterOuterAlt(localctx, 25); - this.state = 2126; - this.match(SQLSelectParser.TEXT_SYMBOL); - this.state = 2128; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,264,this._ctx); - if(la_===1) { - this.state = 2127; - this.fieldLength(); - - } - this.state = 2131; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,265,this._ctx); - if(la_===1) { - this.state = 2130; - this.charsetWithOptBinary(); - - } - break; - - case 26: - this.enterOuterAlt(localctx, 26); - this.state = 2133; - this.match(SQLSelectParser.MEDIUMTEXT_SYMBOL); - this.state = 2135; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,266,this._ctx); - if(la_===1) { - this.state = 2134; - this.charsetWithOptBinary(); - - } - break; - - case 27: - this.enterOuterAlt(localctx, 27); - this.state = 2137; - this.match(SQLSelectParser.LONGTEXT_SYMBOL); - this.state = 2139; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,267,this._ctx); - if(la_===1) { - this.state = 2138; - this.charsetWithOptBinary(); - - } - break; - - case 28: - this.enterOuterAlt(localctx, 28); - this.state = 2141; - this.match(SQLSelectParser.ENUM_SYMBOL); - this.state = 2142; - this.stringList(); - this.state = 2144; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,268,this._ctx); - if(la_===1) { - this.state = 2143; - this.charsetWithOptBinary(); - - } - break; - - case 29: - this.enterOuterAlt(localctx, 29); - this.state = 2146; - this.match(SQLSelectParser.SET_SYMBOL); - this.state = 2147; - this.stringList(); - this.state = 2149; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,269,this._ctx); - if(la_===1) { - this.state = 2148; - this.charsetWithOptBinary(); - - } - break; - - case 30: - this.enterOuterAlt(localctx, 30); - this.state = 2151; - this.match(SQLSelectParser.SERIAL_SYMBOL); - break; - - case 31: - this.enterOuterAlt(localctx, 31); - this.state = 2152; - this.match(SQLSelectParser.JSON_SYMBOL); - break; - - case 32: - this.enterOuterAlt(localctx, 32); - this.state = 2153; - _la = this._input.LA(1); - if(!(((((_la - 256)) & ~0x1f) == 0 && ((1 << (_la - 256)) & ((1 << (SQLSelectParser.GEOMETRYCOLLECTION_SYMBOL - 256)) | (1 << (SQLSelectParser.LINESTRING_SYMBOL - 256)) | (1 << (SQLSelectParser.MULTILINESTRING_SYMBOL - 256)) | (1 << (SQLSelectParser.MULTIPOINT_SYMBOL - 256)) | (1 << (SQLSelectParser.MULTIPOLYGON_SYMBOL - 256)) | (1 << (SQLSelectParser.POINT_SYMBOL - 256)) | (1 << (SQLSelectParser.POLYGON_SYMBOL - 256)))) !== 0) || _la===SQLSelectParser.GEOMETRY_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - break; - - case 33: - this.enterOuterAlt(localctx, 33); - this.state = 2154; - this.match(SQLSelectParser.GEOGRAPHY_SYMBOL); - break; - - case 34: - this.enterOuterAlt(localctx, 34); - this.state = 2155; - this.match(SQLSelectParser.VARIANT_SYMBOL); - break; - - case 35: - this.enterOuterAlt(localctx, 35); - this.state = 2156; - this.match(SQLSelectParser.OBJECT_SYMBOL); - break; - - case 36: - this.enterOuterAlt(localctx, 36); - this.state = 2157; - this.match(SQLSelectParser.ARRAY_SYMBOL); - break; - - case 37: - this.enterOuterAlt(localctx, 37); - this.state = 2158; - this.match(SQLSelectParser.ENUM_SYMBOL); - this.state = 2167; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,271,this._ctx); - if(la_===1) { - this.state = 2159; - this.expr(0); - this.state = 2164; - this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,270,this._ctx) - while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { - if(_alt===1) { - this.state = 2160; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 2161; - this.expr(0); - } - this.state = 2166; - this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,270,this._ctx); - } - - - } - break; - - case 38: - this.enterOuterAlt(localctx, 38); - this.state = 2169; - this.match(SQLSelectParser.SET_SYMBOL); - this.state = 2178; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,273,this._ctx); - if(la_===1) { - this.state = 2170; - this.expr(0); - this.state = 2175; - this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,272,this._ctx) - while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { - if(_alt===1) { - this.state = 2171; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 2172; - this.expr(0); - } - this.state = 2177; - this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,272,this._ctx); - } - - - } - break; - - case 39: - this.enterOuterAlt(localctx, 39); - this.state = 2180; - this.identifier(); - this.state = 2182; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,274,this._ctx); - if(la_===1) { - this.state = 2181; - this.precision(); - - } - break; - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - nchar() { - let localctx = new NcharContext(this, this._ctx, this.state); - this.enterRule(localctx, 250, SQLSelectParser.RULE_nchar); - try { - this.state = 2189; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.NCHAR_SYMBOL: - this.enterOuterAlt(localctx, 1); - this.state = 2186; - this.match(SQLSelectParser.NCHAR_SYMBOL); - break; - case SQLSelectParser.NATIONAL_SYMBOL: - this.enterOuterAlt(localctx, 2); - this.state = 2187; - this.match(SQLSelectParser.NATIONAL_SYMBOL); - this.state = 2188; - this.match(SQLSelectParser.CHAR_SYMBOL); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - fieldLength() { - let localctx = new FieldLengthContext(this, this._ctx, this.state); - this.enterRule(localctx, 252, SQLSelectParser.RULE_fieldLength); - try { - this.enterOuterAlt(localctx, 1); - this.state = 2191; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 2194; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.HEX_NUMBER: - case SQLSelectParser.INT_NUMBER: - this.state = 2192; - this.real_ulonglong_number(); - break; - case SQLSelectParser.DECIMAL_NUMBER: - this.state = 2193; - this.match(SQLSelectParser.DECIMAL_NUMBER); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - this.state = 2196; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - fieldOptions() { - let localctx = new FieldOptionsContext(this, this._ctx, this.state); - this.enterRule(localctx, 254, SQLSelectParser.RULE_fieldOptions); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 2199; - this._errHandler.sync(this); - var _alt = 1; - do { - switch (_alt) { - case 1: - this.state = 2198; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.SIGNED_SYMBOL || _la===SQLSelectParser.UNSIGNED_SYMBOL || _la===SQLSelectParser.ZEROFILL_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - this.state = 2201; - this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,278, this._ctx); - } while ( _alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER ); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - charsetWithOptBinary() { - let localctx = new CharsetWithOptBinaryContext(this, this._ctx, this.state); - this.enterRule(localctx, 256, SQLSelectParser.RULE_charsetWithOptBinary); - try { - this.state = 2217; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,281,this._ctx); - switch(la_) { - case 1: - this.enterOuterAlt(localctx, 1); - this.state = 2203; - this.ascii(); - break; - - case 2: - this.enterOuterAlt(localctx, 2); - this.state = 2204; - this.unicode(); - break; - - case 3: - this.enterOuterAlt(localctx, 3); - this.state = 2205; - this.match(SQLSelectParser.BYTE_SYMBOL); - break; - - case 4: - this.enterOuterAlt(localctx, 4); - this.state = 2206; - this.charset(); - this.state = 2207; - this.charsetName(); - this.state = 2209; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,279,this._ctx); - if(la_===1) { - this.state = 2208; - this.match(SQLSelectParser.BINARY_SYMBOL); - - } - break; - - case 5: - this.enterOuterAlt(localctx, 5); - this.state = 2211; - this.match(SQLSelectParser.BINARY_SYMBOL); - this.state = 2215; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,280,this._ctx); - if(la_===1) { - this.state = 2212; - this.charset(); - this.state = 2213; - this.charsetName(); - - } - break; - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - ascii() { - let localctx = new AsciiContext(this, this._ctx, this.state); - this.enterRule(localctx, 258, SQLSelectParser.RULE_ascii); - try { - this.state = 2225; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.ASCII_SYMBOL: - this.enterOuterAlt(localctx, 1); - this.state = 2219; - this.match(SQLSelectParser.ASCII_SYMBOL); - this.state = 2221; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,282,this._ctx); - if(la_===1) { - this.state = 2220; - this.match(SQLSelectParser.BINARY_SYMBOL); - - } - break; - case SQLSelectParser.BINARY_SYMBOL: - this.enterOuterAlt(localctx, 2); - this.state = 2223; - this.match(SQLSelectParser.BINARY_SYMBOL); - this.state = 2224; - this.match(SQLSelectParser.ASCII_SYMBOL); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - unicode() { - let localctx = new UnicodeContext(this, this._ctx, this.state); - this.enterRule(localctx, 260, SQLSelectParser.RULE_unicode); - try { - this.state = 2233; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.UNICODE_SYMBOL: - this.enterOuterAlt(localctx, 1); - this.state = 2227; - this.match(SQLSelectParser.UNICODE_SYMBOL); - this.state = 2229; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,284,this._ctx); - if(la_===1) { - this.state = 2228; - this.match(SQLSelectParser.BINARY_SYMBOL); - - } - break; - case SQLSelectParser.BINARY_SYMBOL: - this.enterOuterAlt(localctx, 2); - this.state = 2231; - this.match(SQLSelectParser.BINARY_SYMBOL); - this.state = 2232; - this.match(SQLSelectParser.UNICODE_SYMBOL); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - wsNumCodepoints() { - let localctx = new WsNumCodepointsContext(this, this._ctx, this.state); - this.enterRule(localctx, 262, SQLSelectParser.RULE_wsNumCodepoints); - try { - this.enterOuterAlt(localctx, 1); - this.state = 2235; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 2236; - this.real_ulong_number(); - this.state = 2237; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - typeDatetimePrecision() { - let localctx = new TypeDatetimePrecisionContext(this, this._ctx, this.state); - this.enterRule(localctx, 264, SQLSelectParser.RULE_typeDatetimePrecision); - try { - this.enterOuterAlt(localctx, 1); - this.state = 2239; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 2240; - this.match(SQLSelectParser.INT_NUMBER); - this.state = 2241; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - charsetName() { - let localctx = new CharsetNameContext(this, this._ctx, this.state); - this.enterRule(localctx, 266, SQLSelectParser.RULE_charsetName); - try { - this.state = 2246; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,286,this._ctx); - switch(la_) { - case 1: - this.enterOuterAlt(localctx, 1); - this.state = 2243; - this.textOrIdentifier(); - break; - - case 2: - this.enterOuterAlt(localctx, 2); - this.state = 2244; - this.match(SQLSelectParser.BINARY_SYMBOL); - break; - - case 3: - this.enterOuterAlt(localctx, 3); - this.state = 2245; - this.match(SQLSelectParser.DEFAULT_SYMBOL); - break; - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - collationName() { - let localctx = new CollationNameContext(this, this._ctx, this.state); - this.enterRule(localctx, 268, SQLSelectParser.RULE_collationName); - try { - this.state = 2251; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,287,this._ctx); - switch(la_) { - case 1: - this.enterOuterAlt(localctx, 1); - this.state = 2248; - this.textOrIdentifier(); - break; - - case 2: - this.enterOuterAlt(localctx, 2); - this.state = 2249; - this.match(SQLSelectParser.DEFAULT_SYMBOL); - break; - - case 3: - this.enterOuterAlt(localctx, 3); - this.state = 2250; - this.match(SQLSelectParser.BINARY_SYMBOL); - break; - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - collate() { - let localctx = new CollateContext(this, this._ctx, this.state); - this.enterRule(localctx, 270, SQLSelectParser.RULE_collate); - try { - this.enterOuterAlt(localctx, 1); - this.state = 2253; - this.match(SQLSelectParser.COLLATE_SYMBOL); - this.state = 2254; - this.collationName(); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - charsetClause() { - let localctx = new CharsetClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 272, SQLSelectParser.RULE_charsetClause); - try { - this.enterOuterAlt(localctx, 1); - this.state = 2256; - this.charset(); - this.state = 2257; - this.charsetName(); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - fieldsClause() { - let localctx = new FieldsClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 274, SQLSelectParser.RULE_fieldsClause); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 2259; - this.match(SQLSelectParser.COLUMNS_SYMBOL); - this.state = 2261; - this._errHandler.sync(this); - _la = this._input.LA(1); - do { - this.state = 2260; - this.fieldTerm(); - this.state = 2263; - this._errHandler.sync(this); - _la = this._input.LA(1); - } while(((((_la - 325)) & ~0x1f) == 0 && ((1 << (_la - 325)) & ((1 << (SQLSelectParser.TERMINATED_SYMBOL - 325)) | (1 << (SQLSelectParser.OPTIONALLY_SYMBOL - 325)) | (1 << (SQLSelectParser.ENCLOSED_SYMBOL - 325)) | (1 << (SQLSelectParser.ESCAPED_SYMBOL - 325)))) !== 0)); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - fieldTerm() { - let localctx = new FieldTermContext(this, this._ctx, this.state); - this.enterRule(localctx, 276, SQLSelectParser.RULE_fieldTerm); - var _la = 0; // Token type - try { - this.state = 2277; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.TERMINATED_SYMBOL: - this.enterOuterAlt(localctx, 1); - this.state = 2265; - this.match(SQLSelectParser.TERMINATED_SYMBOL); - this.state = 2266; - this.match(SQLSelectParser.BY_SYMBOL); - this.state = 2267; - this.textString(); - break; - case SQLSelectParser.OPTIONALLY_SYMBOL: - case SQLSelectParser.ENCLOSED_SYMBOL: - this.enterOuterAlt(localctx, 2); - this.state = 2269; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.OPTIONALLY_SYMBOL) { - this.state = 2268; - this.match(SQLSelectParser.OPTIONALLY_SYMBOL); - } - - this.state = 2271; - this.match(SQLSelectParser.ENCLOSED_SYMBOL); - this.state = 2272; - this.match(SQLSelectParser.BY_SYMBOL); - this.state = 2273; - this.textString(); - break; - case SQLSelectParser.ESCAPED_SYMBOL: - this.enterOuterAlt(localctx, 3); - this.state = 2274; - this.match(SQLSelectParser.ESCAPED_SYMBOL); - this.state = 2275; - this.match(SQLSelectParser.BY_SYMBOL); - this.state = 2276; - this.textString(); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - linesClause() { - let localctx = new LinesClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 278, SQLSelectParser.RULE_linesClause); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 2279; - this.match(SQLSelectParser.LINES_SYMBOL); - this.state = 2281; - this._errHandler.sync(this); - _la = this._input.LA(1); - do { - this.state = 2280; - this.lineTerm(); - this.state = 2283; - this._errHandler.sync(this); - _la = this._input.LA(1); - } while(_la===SQLSelectParser.TERMINATED_SYMBOL || _la===SQLSelectParser.STARTING_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - lineTerm() { - let localctx = new LineTermContext(this, this._ctx, this.state); - this.enterRule(localctx, 280, SQLSelectParser.RULE_lineTerm); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 2285; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.TERMINATED_SYMBOL || _la===SQLSelectParser.STARTING_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 2286; - this.match(SQLSelectParser.BY_SYMBOL); - this.state = 2287; - this.textString(); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - usePartition() { - let localctx = new UsePartitionContext(this, this._ctx, this.state); - this.enterRule(localctx, 282, SQLSelectParser.RULE_usePartition); - try { - this.enterOuterAlt(localctx, 1); - this.state = 2289; - this.match(SQLSelectParser.PARTITION_SYMBOL); - this.state = 2290; - this.identifierListWithParentheses(); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - columnInternalRefList() { - let localctx = new ColumnInternalRefListContext(this, this._ctx, this.state); - this.enterRule(localctx, 284, SQLSelectParser.RULE_columnInternalRefList); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 2292; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 2293; - this.identifier(); - this.state = 2298; - this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===SQLSelectParser.COMMA_SYMBOL) { - this.state = 2294; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 2295; - this.identifier(); - this.state = 2300; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 2301; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - tableAliasRefList() { - let localctx = new TableAliasRefListContext(this, this._ctx, this.state); - this.enterRule(localctx, 286, SQLSelectParser.RULE_tableAliasRefList); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 2303; - this.qualifiedIdentifier(); - this.state = 2308; - this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===SQLSelectParser.COMMA_SYMBOL) { - this.state = 2304; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 2305; - this.qualifiedIdentifier(); - this.state = 2310; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - pureIdentifier() { - let localctx = new PureIdentifierContext(this, this._ctx, this.state); - this.enterRule(localctx, 288, SQLSelectParser.RULE_pureIdentifier); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 2311; - _la = this._input.LA(1); - if(!(((((_la - 340)) & ~0x1f) == 0 && ((1 << (_la - 340)) & ((1 << (SQLSelectParser.IDENTIFIER - 340)) | (1 << (SQLSelectParser.BACK_TICK_QUOTED_ID - 340)) | (1 << (SQLSelectParser.DOUBLE_QUOTED_TEXT - 340)) | (1 << (SQLSelectParser.SINGLE_QUOTED_TEXT - 340)) | (1 << (SQLSelectParser.BRACKET_QUOTED_TEXT - 340)))) !== 0))) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - identifier() { - let localctx = new IdentifierContext(this, this._ctx, this.state); - this.enterRule(localctx, 290, SQLSelectParser.RULE_identifier); - try { - this.state = 2315; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.IDENTIFIER: - case SQLSelectParser.BACK_TICK_QUOTED_ID: - case SQLSelectParser.DOUBLE_QUOTED_TEXT: - case SQLSelectParser.SINGLE_QUOTED_TEXT: - case SQLSelectParser.BRACKET_QUOTED_TEXT: - this.enterOuterAlt(localctx, 1); - this.state = 2313; - this.pureIdentifier(); - break; - case SQLSelectParser.TINYINT_SYMBOL: - case SQLSelectParser.SMALLINT_SYMBOL: - case SQLSelectParser.MEDIUMINT_SYMBOL: - case SQLSelectParser.BYTE_INT_SYMBOL: - case SQLSelectParser.INT_SYMBOL: - case SQLSelectParser.BIGINT_SYMBOL: - case SQLSelectParser.SECOND_SYMBOL: - case SQLSelectParser.MINUTE_SYMBOL: - case SQLSelectParser.HOUR_SYMBOL: - case SQLSelectParser.DAY_SYMBOL: - case SQLSelectParser.WEEK_SYMBOL: - case SQLSelectParser.MONTH_SYMBOL: - case SQLSelectParser.QUARTER_SYMBOL: - case SQLSelectParser.YEAR_SYMBOL: - case SQLSelectParser.DEFAULT_SYMBOL: - case SQLSelectParser.UNION_SYMBOL: - case SQLSelectParser.SELECT_SYMBOL: - case SQLSelectParser.ALL_SYMBOL: - case SQLSelectParser.DISTINCT_SYMBOL: - case SQLSelectParser.STRAIGHT_JOIN_SYMBOL: - case SQLSelectParser.HIGH_PRIORITY_SYMBOL: - case SQLSelectParser.SQL_SMALL_RESULT_SYMBOL: - case SQLSelectParser.SQL_BIG_RESULT_SYMBOL: - case SQLSelectParser.SQL_BUFFER_RESULT_SYMBOL: - case SQLSelectParser.SQL_CALC_FOUND_ROWS_SYMBOL: - case SQLSelectParser.LIMIT_SYMBOL: - case SQLSelectParser.OFFSET_SYMBOL: - case SQLSelectParser.INTO_SYMBOL: - case SQLSelectParser.OUTFILE_SYMBOL: - case SQLSelectParser.DUMPFILE_SYMBOL: - case SQLSelectParser.PROCEDURE_SYMBOL: - case SQLSelectParser.ANALYSE_SYMBOL: - case SQLSelectParser.HAVING_SYMBOL: - case SQLSelectParser.WINDOW_SYMBOL: - case SQLSelectParser.AS_SYMBOL: - case SQLSelectParser.PARTITION_SYMBOL: - case SQLSelectParser.BY_SYMBOL: - case SQLSelectParser.ROWS_SYMBOL: - case SQLSelectParser.RANGE_SYMBOL: - case SQLSelectParser.GROUPS_SYMBOL: - case SQLSelectParser.UNBOUNDED_SYMBOL: - case SQLSelectParser.PRECEDING_SYMBOL: - case SQLSelectParser.INTERVAL_SYMBOL: - case SQLSelectParser.CURRENT_SYMBOL: - case SQLSelectParser.ROW_SYMBOL: - case SQLSelectParser.BETWEEN_SYMBOL: - case SQLSelectParser.AND_SYMBOL: - case SQLSelectParser.FOLLOWING_SYMBOL: - case SQLSelectParser.EXCLUDE_SYMBOL: - case SQLSelectParser.GROUP_SYMBOL: - case SQLSelectParser.TIES_SYMBOL: - case SQLSelectParser.NO_SYMBOL: - case SQLSelectParser.OTHERS_SYMBOL: - case SQLSelectParser.WITH_SYMBOL: - case SQLSelectParser.WITHOUT_SYMBOL: - case SQLSelectParser.RECURSIVE_SYMBOL: - case SQLSelectParser.ROLLUP_SYMBOL: - case SQLSelectParser.CUBE_SYMBOL: - case SQLSelectParser.ORDER_SYMBOL: - case SQLSelectParser.ASC_SYMBOL: - case SQLSelectParser.DESC_SYMBOL: - case SQLSelectParser.FROM_SYMBOL: - case SQLSelectParser.DUAL_SYMBOL: - case SQLSelectParser.VALUES_SYMBOL: - case SQLSelectParser.TABLE_SYMBOL: - case SQLSelectParser.SQL_NO_CACHE_SYMBOL: - case SQLSelectParser.SQL_CACHE_SYMBOL: - case SQLSelectParser.MAX_STATEMENT_TIME_SYMBOL: - case SQLSelectParser.FOR_SYMBOL: - case SQLSelectParser.OF_SYMBOL: - case SQLSelectParser.LOCK_SYMBOL: - case SQLSelectParser.IN_SYMBOL: - case SQLSelectParser.SHARE_SYMBOL: - case SQLSelectParser.MODE_SYMBOL: - case SQLSelectParser.UPDATE_SYMBOL: - case SQLSelectParser.SKIP_SYMBOL: - case SQLSelectParser.LOCKED_SYMBOL: - case SQLSelectParser.NOWAIT_SYMBOL: - case SQLSelectParser.WHERE_SYMBOL: - case SQLSelectParser.OJ_SYMBOL: - case SQLSelectParser.ON_SYMBOL: - case SQLSelectParser.USING_SYMBOL: - case SQLSelectParser.NATURAL_SYMBOL: - case SQLSelectParser.INNER_SYMBOL: - case SQLSelectParser.JOIN_SYMBOL: - case SQLSelectParser.LEFT_SYMBOL: - case SQLSelectParser.RIGHT_SYMBOL: - case SQLSelectParser.OUTER_SYMBOL: - case SQLSelectParser.CROSS_SYMBOL: - case SQLSelectParser.LATERAL_SYMBOL: - case SQLSelectParser.JSON_TABLE_SYMBOL: - case SQLSelectParser.COLUMNS_SYMBOL: - case SQLSelectParser.ORDINALITY_SYMBOL: - case SQLSelectParser.EXISTS_SYMBOL: - case SQLSelectParser.PATH_SYMBOL: - case SQLSelectParser.NESTED_SYMBOL: - case SQLSelectParser.EMPTY_SYMBOL: - case SQLSelectParser.ERROR_SYMBOL: - case SQLSelectParser.NULL_SYMBOL: - case SQLSelectParser.USE_SYMBOL: - case SQLSelectParser.FORCE_SYMBOL: - case SQLSelectParser.IGNORE_SYMBOL: - case SQLSelectParser.KEY_SYMBOL: - case SQLSelectParser.INDEX_SYMBOL: - case SQLSelectParser.PRIMARY_SYMBOL: - case SQLSelectParser.IS_SYMBOL: - case SQLSelectParser.TRUE_SYMBOL: - case SQLSelectParser.FALSE_SYMBOL: - case SQLSelectParser.UNKNOWN_SYMBOL: - case SQLSelectParser.NOT_SYMBOL: - case SQLSelectParser.XOR_SYMBOL: - case SQLSelectParser.OR_SYMBOL: - case SQLSelectParser.ANY_SYMBOL: - case SQLSelectParser.MEMBER_SYMBOL: - case SQLSelectParser.SOUNDS_SYMBOL: - case SQLSelectParser.LIKE_SYMBOL: - case SQLSelectParser.ESCAPE_SYMBOL: - case SQLSelectParser.REGEXP_SYMBOL: - case SQLSelectParser.DIV_SYMBOL: - case SQLSelectParser.MOD_SYMBOL: - case SQLSelectParser.MATCH_SYMBOL: - case SQLSelectParser.AGAINST_SYMBOL: - case SQLSelectParser.BINARY_SYMBOL: - case SQLSelectParser.CAST_SYMBOL: - case SQLSelectParser.ARRAY_SYMBOL: - case SQLSelectParser.CASE_SYMBOL: - case SQLSelectParser.END_SYMBOL: - case SQLSelectParser.CONVERT_SYMBOL: - case SQLSelectParser.COLLATE_SYMBOL: - case SQLSelectParser.AVG_SYMBOL: - case SQLSelectParser.BIT_AND_SYMBOL: - case SQLSelectParser.BIT_OR_SYMBOL: - case SQLSelectParser.BIT_XOR_SYMBOL: - case SQLSelectParser.COUNT_SYMBOL: - case SQLSelectParser.MIN_SYMBOL: - case SQLSelectParser.MAX_SYMBOL: - case SQLSelectParser.STD_SYMBOL: - case SQLSelectParser.VARIANCE_SYMBOL: - case SQLSelectParser.STDDEV_SAMP_SYMBOL: - case SQLSelectParser.VAR_SAMP_SYMBOL: - case SQLSelectParser.SUM_SYMBOL: - case SQLSelectParser.GROUP_CONCAT_SYMBOL: - case SQLSelectParser.SEPARATOR_SYMBOL: - case SQLSelectParser.GROUPING_SYMBOL: - case SQLSelectParser.ROW_NUMBER_SYMBOL: - case SQLSelectParser.RANK_SYMBOL: - case SQLSelectParser.DENSE_RANK_SYMBOL: - case SQLSelectParser.CUME_DIST_SYMBOL: - case SQLSelectParser.PERCENT_RANK_SYMBOL: - case SQLSelectParser.NTILE_SYMBOL: - case SQLSelectParser.LEAD_SYMBOL: - case SQLSelectParser.LAG_SYMBOL: - case SQLSelectParser.FIRST_VALUE_SYMBOL: - case SQLSelectParser.LAST_VALUE_SYMBOL: - case SQLSelectParser.NTH_VALUE_SYMBOL: - case SQLSelectParser.FIRST_SYMBOL: - case SQLSelectParser.LAST_SYMBOL: - case SQLSelectParser.OVER_SYMBOL: - case SQLSelectParser.RESPECT_SYMBOL: - case SQLSelectParser.NULLS_SYMBOL: - case SQLSelectParser.JSON_ARRAYAGG_SYMBOL: - case SQLSelectParser.JSON_OBJECTAGG_SYMBOL: - case SQLSelectParser.BOOLEAN_SYMBOL: - case SQLSelectParser.LANGUAGE_SYMBOL: - case SQLSelectParser.QUERY_SYMBOL: - case SQLSelectParser.EXPANSION_SYMBOL: - case SQLSelectParser.CHAR_SYMBOL: - case SQLSelectParser.CURRENT_USER_SYMBOL: - case SQLSelectParser.DATE_SYMBOL: - case SQLSelectParser.INSERT_SYMBOL: - case SQLSelectParser.TIME_SYMBOL: - case SQLSelectParser.TIMESTAMP_SYMBOL: - case SQLSelectParser.TIMESTAMP_LTZ_SYMBOL: - case SQLSelectParser.TIMESTAMP_NTZ_SYMBOL: - case SQLSelectParser.ZONE_SYMBOL: - case SQLSelectParser.USER_SYMBOL: - case SQLSelectParser.ADDDATE_SYMBOL: - case SQLSelectParser.SUBDATE_SYMBOL: - case SQLSelectParser.CURDATE_SYMBOL: - case SQLSelectParser.CURTIME_SYMBOL: - case SQLSelectParser.DATE_ADD_SYMBOL: - case SQLSelectParser.DATE_SUB_SYMBOL: - case SQLSelectParser.EXTRACT_SYMBOL: - case SQLSelectParser.GET_FORMAT_SYMBOL: - case SQLSelectParser.NOW_SYMBOL: - case SQLSelectParser.POSITION_SYMBOL: - case SQLSelectParser.SYSDATE_SYMBOL: - case SQLSelectParser.TIMESTAMP_ADD_SYMBOL: - case SQLSelectParser.TIMESTAMP_DIFF_SYMBOL: - case SQLSelectParser.UTC_DATE_SYMBOL: - case SQLSelectParser.UTC_TIME_SYMBOL: - case SQLSelectParser.UTC_TIMESTAMP_SYMBOL: - case SQLSelectParser.ASCII_SYMBOL: - case SQLSelectParser.CHARSET_SYMBOL: - case SQLSelectParser.COALESCE_SYMBOL: - case SQLSelectParser.COLLATION_SYMBOL: - case SQLSelectParser.DATABASE_SYMBOL: - case SQLSelectParser.IF_SYMBOL: - case SQLSelectParser.FORMAT_SYMBOL: - case SQLSelectParser.MICROSECOND_SYMBOL: - case SQLSelectParser.OLD_PASSWORD_SYMBOL: - case SQLSelectParser.PASSWORD_SYMBOL: - case SQLSelectParser.REPEAT_SYMBOL: - case SQLSelectParser.REPLACE_SYMBOL: - case SQLSelectParser.REVERSE_SYMBOL: - case SQLSelectParser.ROW_COUNT_SYMBOL: - case SQLSelectParser.TRUNCATE_SYMBOL: - case SQLSelectParser.WEIGHT_STRING_SYMBOL: - case SQLSelectParser.CONTAINS_SYMBOL: - case SQLSelectParser.GEOMETRYCOLLECTION_SYMBOL: - case SQLSelectParser.LINESTRING_SYMBOL: - case SQLSelectParser.MULTILINESTRING_SYMBOL: - case SQLSelectParser.MULTIPOINT_SYMBOL: - case SQLSelectParser.MULTIPOLYGON_SYMBOL: - case SQLSelectParser.POINT_SYMBOL: - case SQLSelectParser.POLYGON_SYMBOL: - case SQLSelectParser.LEVEL_SYMBOL: - case SQLSelectParser.DATETIME_SYMBOL: - case SQLSelectParser.TRIM_SYMBOL: - case SQLSelectParser.LEADING_SYMBOL: - case SQLSelectParser.TRAILING_SYMBOL: - case SQLSelectParser.BOTH_SYMBOL: - case SQLSelectParser.STRING_SYMBOL: - case SQLSelectParser.SUBSTRING_SYMBOL: - case SQLSelectParser.WHEN_SYMBOL: - case SQLSelectParser.THEN_SYMBOL: - case SQLSelectParser.ELSE_SYMBOL: - case SQLSelectParser.SIGNED_SYMBOL: - case SQLSelectParser.UNSIGNED_SYMBOL: - case SQLSelectParser.DECIMAL_SYMBOL: - case SQLSelectParser.JSON_SYMBOL: - case SQLSelectParser.FLOAT_SYMBOL: - case SQLSelectParser.FLOAT_SYMBOL_4: - case SQLSelectParser.FLOAT_SYMBOL_8: - case SQLSelectParser.SET_SYMBOL: - case SQLSelectParser.SECOND_MICROSECOND_SYMBOL: - case SQLSelectParser.MINUTE_MICROSECOND_SYMBOL: - case SQLSelectParser.MINUTE_SECOND_SYMBOL: - case SQLSelectParser.HOUR_MICROSECOND_SYMBOL: - case SQLSelectParser.HOUR_SECOND_SYMBOL: - case SQLSelectParser.HOUR_MINUTE_SYMBOL: - case SQLSelectParser.DAY_MICROSECOND_SYMBOL: - case SQLSelectParser.DAY_SECOND_SYMBOL: - case SQLSelectParser.DAY_MINUTE_SYMBOL: - case SQLSelectParser.DAY_HOUR_SYMBOL: - case SQLSelectParser.YEAR_MONTH_SYMBOL: - case SQLSelectParser.BTREE_SYMBOL: - case SQLSelectParser.RTREE_SYMBOL: - case SQLSelectParser.HASH_SYMBOL: - case SQLSelectParser.REAL_SYMBOL: - case SQLSelectParser.DOUBLE_SYMBOL: - case SQLSelectParser.PRECISION_SYMBOL: - case SQLSelectParser.NUMERIC_SYMBOL: - case SQLSelectParser.NUMBER_SYMBOL: - case SQLSelectParser.FIXED_SYMBOL: - case SQLSelectParser.BIT_SYMBOL: - case SQLSelectParser.BOOL_SYMBOL: - case SQLSelectParser.VARYING_SYMBOL: - case SQLSelectParser.VARCHAR_SYMBOL: - case SQLSelectParser.NATIONAL_SYMBOL: - case SQLSelectParser.NVARCHAR_SYMBOL: - case SQLSelectParser.NCHAR_SYMBOL: - case SQLSelectParser.VARBINARY_SYMBOL: - case SQLSelectParser.TINYBLOB_SYMBOL: - case SQLSelectParser.BLOB_SYMBOL: - case SQLSelectParser.MEDIUMBLOB_SYMBOL: - case SQLSelectParser.LONGBLOB_SYMBOL: - case SQLSelectParser.LONG_SYMBOL: - case SQLSelectParser.TINYTEXT_SYMBOL: - case SQLSelectParser.TEXT_SYMBOL: - case SQLSelectParser.MEDIUMTEXT_SYMBOL: - case SQLSelectParser.LONGTEXT_SYMBOL: - case SQLSelectParser.ENUM_SYMBOL: - case SQLSelectParser.SERIAL_SYMBOL: - case SQLSelectParser.GEOMETRY_SYMBOL: - case SQLSelectParser.ZEROFILL_SYMBOL: - case SQLSelectParser.BYTE_SYMBOL: - case SQLSelectParser.UNICODE_SYMBOL: - case SQLSelectParser.TERMINATED_SYMBOL: - case SQLSelectParser.OPTIONALLY_SYMBOL: - case SQLSelectParser.ENCLOSED_SYMBOL: - case SQLSelectParser.ESCAPED_SYMBOL: - case SQLSelectParser.LINES_SYMBOL: - case SQLSelectParser.STARTING_SYMBOL: - case SQLSelectParser.GLOBAL_SYMBOL: - case SQLSelectParser.LOCAL_SYMBOL: - case SQLSelectParser.SESSION_SYMBOL: - case SQLSelectParser.VARIANT_SYMBOL: - case SQLSelectParser.OBJECT_SYMBOL: - case SQLSelectParser.GEOGRAPHY_SYMBOL: - this.enterOuterAlt(localctx, 2); - this.state = 2314; - this.identifierKeyword(); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - identifierList() { - let localctx = new IdentifierListContext(this, this._ctx, this.state); - this.enterRule(localctx, 292, SQLSelectParser.RULE_identifierList); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 2317; - this.identifier(); - this.state = 2322; - this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===SQLSelectParser.COMMA_SYMBOL) { - this.state = 2318; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 2319; - this.identifier(); - this.state = 2324; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - identifierListWithParentheses() { - let localctx = new IdentifierListWithParenthesesContext(this, this._ctx, this.state); - this.enterRule(localctx, 294, SQLSelectParser.RULE_identifierListWithParentheses); - try { - this.enterOuterAlt(localctx, 1); - this.state = 2325; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 2326; - this.identifierList(); - this.state = 2327; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - qualifiedIdentifier() { - let localctx = new QualifiedIdentifierContext(this, this._ctx, this.state); - this.enterRule(localctx, 296, SQLSelectParser.RULE_qualifiedIdentifier); - try { - this.enterOuterAlt(localctx, 1); - this.state = 2329; - this.identifier(); - this.state = 2334; - this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,296,this._ctx) - while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { - if(_alt===1) { - this.state = 2330; - this.match(SQLSelectParser.DOT_SYMBOL); - this.state = 2331; - this.identifier(); - } - this.state = 2336; - this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,296,this._ctx); - } - - this.state = 2339; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,297,this._ctx); - if(la_===1) { - this.state = 2337; - this.match(SQLSelectParser.DOT_SYMBOL); - this.state = 2338; - this.match(SQLSelectParser.MULT_OPERATOR); - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - dotIdentifier() { - let localctx = new DotIdentifierContext(this, this._ctx, this.state); - this.enterRule(localctx, 298, SQLSelectParser.RULE_dotIdentifier); - try { - this.enterOuterAlt(localctx, 1); - this.state = 2341; - this.match(SQLSelectParser.DOT_SYMBOL); - this.state = 2342; - this.identifier(); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - ulong_number() { - let localctx = new Ulong_numberContext(this, this._ctx, this.state); - this.enterRule(localctx, 300, SQLSelectParser.RULE_ulong_number); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 2344; - _la = this._input.LA(1); - if(!(((((_la - 42)) & ~0x1f) == 0 && ((1 << (_la - 42)) & ((1 << (SQLSelectParser.HEX_NUMBER - 42)) | (1 << (SQLSelectParser.INT_NUMBER - 42)) | (1 << (SQLSelectParser.DECIMAL_NUMBER - 42)) | (1 << (SQLSelectParser.FLOAT_NUMBER - 42)))) !== 0))) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - real_ulong_number() { - let localctx = new Real_ulong_numberContext(this, this._ctx, this.state); - this.enterRule(localctx, 302, SQLSelectParser.RULE_real_ulong_number); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 2346; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.HEX_NUMBER || _la===SQLSelectParser.INT_NUMBER)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - ulonglong_number() { - let localctx = new Ulonglong_numberContext(this, this._ctx, this.state); - this.enterRule(localctx, 304, SQLSelectParser.RULE_ulonglong_number); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 2348; - _la = this._input.LA(1); - if(!(((((_la - 44)) & ~0x1f) == 0 && ((1 << (_la - 44)) & ((1 << (SQLSelectParser.INT_NUMBER - 44)) | (1 << (SQLSelectParser.DECIMAL_NUMBER - 44)) | (1 << (SQLSelectParser.FLOAT_NUMBER - 44)))) !== 0))) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - real_ulonglong_number() { - let localctx = new Real_ulonglong_numberContext(this, this._ctx, this.state); - this.enterRule(localctx, 306, SQLSelectParser.RULE_real_ulonglong_number); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 2350; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.HEX_NUMBER || _la===SQLSelectParser.INT_NUMBER)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - literal() { - let localctx = new LiteralContext(this, this._ctx, this.state); - this.enterRule(localctx, 308, SQLSelectParser.RULE_literal); - var _la = 0; // Token type - try { - this.state = 2361; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,299,this._ctx); - switch(la_) { - case 1: - this.enterOuterAlt(localctx, 1); - this.state = 2352; - this.textLiteral(); - break; - - case 2: - this.enterOuterAlt(localctx, 2); - this.state = 2353; - this.numLiteral(); - break; - - case 3: - this.enterOuterAlt(localctx, 3); - this.state = 2354; - this.temporalLiteral(); - break; - - case 4: - this.enterOuterAlt(localctx, 4); - this.state = 2355; - this.nullLiteral(); - break; - - case 5: - this.enterOuterAlt(localctx, 5); - this.state = 2356; - this.boolLiteral(); - break; - - case 6: - this.enterOuterAlt(localctx, 6); - this.state = 2358; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.UNDERSCORE_CHARSET) { - this.state = 2357; - this.match(SQLSelectParser.UNDERSCORE_CHARSET); - } - - this.state = 2360; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.HEX_NUMBER || _la===SQLSelectParser.BIN_NUMBER)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - break; - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - stringList() { - let localctx = new StringListContext(this, this._ctx, this.state); - this.enterRule(localctx, 310, SQLSelectParser.RULE_stringList); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 2363; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 2364; - this.textString(); - this.state = 2369; - this._errHandler.sync(this); - _la = this._input.LA(1); - while(_la===SQLSelectParser.COMMA_SYMBOL) { - this.state = 2365; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 2366; - this.textString(); - this.state = 2371; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 2372; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - textStringLiteral() { - let localctx = new TextStringLiteralContext(this, this._ctx, this.state); - this.enterRule(localctx, 312, SQLSelectParser.RULE_textStringLiteral); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 2374; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.DOUBLE_QUOTED_TEXT || _la===SQLSelectParser.SINGLE_QUOTED_TEXT)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - textString() { - let localctx = new TextStringContext(this, this._ctx, this.state); - this.enterRule(localctx, 314, SQLSelectParser.RULE_textString); - try { - this.state = 2379; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.DOUBLE_QUOTED_TEXT: - case SQLSelectParser.SINGLE_QUOTED_TEXT: - this.enterOuterAlt(localctx, 1); - this.state = 2376; - this.textStringLiteral(); - break; - case SQLSelectParser.HEX_NUMBER: - this.enterOuterAlt(localctx, 2); - this.state = 2377; - this.match(SQLSelectParser.HEX_NUMBER); - break; - case SQLSelectParser.BIN_NUMBER: - this.enterOuterAlt(localctx, 3); - this.state = 2378; - this.match(SQLSelectParser.BIN_NUMBER); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - textLiteral() { - let localctx = new TextLiteralContext(this, this._ctx, this.state); - this.enterRule(localctx, 316, SQLSelectParser.RULE_textLiteral); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 2386; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.UNDERSCORE_CHARSET: - case SQLSelectParser.DOUBLE_QUOTED_TEXT: - case SQLSelectParser.SINGLE_QUOTED_TEXT: - this.state = 2382; - this._errHandler.sync(this); - _la = this._input.LA(1); - if(_la===SQLSelectParser.UNDERSCORE_CHARSET) { - this.state = 2381; - this.match(SQLSelectParser.UNDERSCORE_CHARSET); - } - - this.state = 2384; - this.textStringLiteral(); - break; - case SQLSelectParser.NCHAR_TEXT: - this.state = 2385; - this.match(SQLSelectParser.NCHAR_TEXT); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - this.state = 2391; - this._errHandler.sync(this); - var _alt = this._interp.adaptivePredict(this._input,304,this._ctx) - while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) { - if(_alt===1) { - this.state = 2388; - this.textStringLiteral(); - } - this.state = 2393; - this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input,304,this._ctx); - } - - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - numLiteral() { - let localctx = new NumLiteralContext(this, this._ctx, this.state); - this.enterRule(localctx, 318, SQLSelectParser.RULE_numLiteral); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 2394; - _la = this._input.LA(1); - if(!(((((_la - 44)) & ~0x1f) == 0 && ((1 << (_la - 44)) & ((1 << (SQLSelectParser.INT_NUMBER - 44)) | (1 << (SQLSelectParser.DECIMAL_NUMBER - 44)) | (1 << (SQLSelectParser.FLOAT_NUMBER - 44)))) !== 0))) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - boolLiteral() { - let localctx = new BoolLiteralContext(this, this._ctx, this.state); - this.enterRule(localctx, 320, SQLSelectParser.RULE_boolLiteral); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 2396; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.TRUE_SYMBOL || _la===SQLSelectParser.FALSE_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - nullLiteral() { - let localctx = new NullLiteralContext(this, this._ctx, this.state); - this.enterRule(localctx, 322, SQLSelectParser.RULE_nullLiteral); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 2398; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.NULL2_SYMBOL || _la===SQLSelectParser.NULL_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - temporalLiteral() { - let localctx = new TemporalLiteralContext(this, this._ctx, this.state); - this.enterRule(localctx, 324, SQLSelectParser.RULE_temporalLiteral); - try { - this.state = 2406; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.DATE_SYMBOL: - this.enterOuterAlt(localctx, 1); - this.state = 2400; - this.match(SQLSelectParser.DATE_SYMBOL); - this.state = 2401; - this.match(SQLSelectParser.SINGLE_QUOTED_TEXT); - break; - case SQLSelectParser.TIME_SYMBOL: - this.enterOuterAlt(localctx, 2); - this.state = 2402; - this.match(SQLSelectParser.TIME_SYMBOL); - this.state = 2403; - this.match(SQLSelectParser.SINGLE_QUOTED_TEXT); - break; - case SQLSelectParser.TIMESTAMP_SYMBOL: - this.enterOuterAlt(localctx, 3); - this.state = 2404; - this.match(SQLSelectParser.TIMESTAMP_SYMBOL); - this.state = 2405; - this.match(SQLSelectParser.SINGLE_QUOTED_TEXT); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - floatOptions() { - let localctx = new FloatOptionsContext(this, this._ctx, this.state); - this.enterRule(localctx, 326, SQLSelectParser.RULE_floatOptions); - try { - this.state = 2410; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,306,this._ctx); - switch(la_) { - case 1: - this.enterOuterAlt(localctx, 1); - this.state = 2408; - this.fieldLength(); - break; - - case 2: - this.enterOuterAlt(localctx, 2); - this.state = 2409; - this.precision(); - break; - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - precision() { - let localctx = new PrecisionContext(this, this._ctx, this.state); - this.enterRule(localctx, 328, SQLSelectParser.RULE_precision); - try { - this.enterOuterAlt(localctx, 1); - this.state = 2412; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 2413; - this.match(SQLSelectParser.INT_NUMBER); - this.state = 2414; - this.match(SQLSelectParser.COMMA_SYMBOL); - this.state = 2415; - this.match(SQLSelectParser.INT_NUMBER); - this.state = 2416; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - textOrIdentifier() { - let localctx = new TextOrIdentifierContext(this, this._ctx, this.state); - this.enterRule(localctx, 330, SQLSelectParser.RULE_textOrIdentifier); - try { - this.state = 2420; - this._errHandler.sync(this); - var la_ = this._interp.adaptivePredict(this._input,307,this._ctx); - switch(la_) { - case 1: - this.enterOuterAlt(localctx, 1); - this.state = 2418; - this.identifier(); - break; - - case 2: - this.enterOuterAlt(localctx, 2); - this.state = 2419; - this.textStringLiteral(); - break; - - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - parentheses() { - let localctx = new ParenthesesContext(this, this._ctx, this.state); - this.enterRule(localctx, 332, SQLSelectParser.RULE_parentheses); - try { - this.enterOuterAlt(localctx, 1); - this.state = 2422; - this.match(SQLSelectParser.OPEN_PAR_SYMBOL); - this.state = 2423; - this.match(SQLSelectParser.CLOSE_PAR_SYMBOL); - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - equal() { - let localctx = new EqualContext(this, this._ctx, this.state); - this.enterRule(localctx, 334, SQLSelectParser.RULE_equal); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 2425; - _la = this._input.LA(1); - if(!(_la===SQLSelectParser.EQUAL_OPERATOR || _la===SQLSelectParser.ASSIGN_OPERATOR)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - varIdentType() { - let localctx = new VarIdentTypeContext(this, this._ctx, this.state); - this.enterRule(localctx, 336, SQLSelectParser.RULE_varIdentType); - try { - this.state = 2433; - this._errHandler.sync(this); - switch(this._input.LA(1)) { - case SQLSelectParser.GLOBAL_SYMBOL: - this.enterOuterAlt(localctx, 1); - this.state = 2427; - this.match(SQLSelectParser.GLOBAL_SYMBOL); - this.state = 2428; - this.match(SQLSelectParser.DOT_SYMBOL); - break; - case SQLSelectParser.LOCAL_SYMBOL: - this.enterOuterAlt(localctx, 2); - this.state = 2429; - this.match(SQLSelectParser.LOCAL_SYMBOL); - this.state = 2430; - this.match(SQLSelectParser.DOT_SYMBOL); - break; - case SQLSelectParser.SESSION_SYMBOL: - this.enterOuterAlt(localctx, 3); - this.state = 2431; - this.match(SQLSelectParser.SESSION_SYMBOL); - this.state = 2432; - this.match(SQLSelectParser.DOT_SYMBOL); - break; - default: - throw new antlr4.error.NoViableAltException(this); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - - - identifierKeyword() { - let localctx = new IdentifierKeywordContext(this, this._ctx, this.state); - this.enterRule(localctx, 338, SQLSelectParser.RULE_identifierKeyword); - var _la = 0; // Token type - try { - this.enterOuterAlt(localctx, 1); - this.state = 2435; - _la = this._input.LA(1); - if(!(((((_la - 47)) & ~0x1f) == 0 && ((1 << (_la - 47)) & ((1 << (SQLSelectParser.TINYINT_SYMBOL - 47)) | (1 << (SQLSelectParser.SMALLINT_SYMBOL - 47)) | (1 << (SQLSelectParser.MEDIUMINT_SYMBOL - 47)) | (1 << (SQLSelectParser.BYTE_INT_SYMBOL - 47)) | (1 << (SQLSelectParser.INT_SYMBOL - 47)) | (1 << (SQLSelectParser.BIGINT_SYMBOL - 47)) | (1 << (SQLSelectParser.SECOND_SYMBOL - 47)) | (1 << (SQLSelectParser.MINUTE_SYMBOL - 47)) | (1 << (SQLSelectParser.HOUR_SYMBOL - 47)) | (1 << (SQLSelectParser.DAY_SYMBOL - 47)) | (1 << (SQLSelectParser.WEEK_SYMBOL - 47)) | (1 << (SQLSelectParser.MONTH_SYMBOL - 47)) | (1 << (SQLSelectParser.QUARTER_SYMBOL - 47)) | (1 << (SQLSelectParser.YEAR_SYMBOL - 47)) | (1 << (SQLSelectParser.DEFAULT_SYMBOL - 47)) | (1 << (SQLSelectParser.UNION_SYMBOL - 47)) | (1 << (SQLSelectParser.SELECT_SYMBOL - 47)) | (1 << (SQLSelectParser.ALL_SYMBOL - 47)) | (1 << (SQLSelectParser.DISTINCT_SYMBOL - 47)) | (1 << (SQLSelectParser.STRAIGHT_JOIN_SYMBOL - 47)) | (1 << (SQLSelectParser.HIGH_PRIORITY_SYMBOL - 47)) | (1 << (SQLSelectParser.SQL_SMALL_RESULT_SYMBOL - 47)) | (1 << (SQLSelectParser.SQL_BIG_RESULT_SYMBOL - 47)) | (1 << (SQLSelectParser.SQL_BUFFER_RESULT_SYMBOL - 47)) | (1 << (SQLSelectParser.SQL_CALC_FOUND_ROWS_SYMBOL - 47)) | (1 << (SQLSelectParser.LIMIT_SYMBOL - 47)) | (1 << (SQLSelectParser.OFFSET_SYMBOL - 47)) | (1 << (SQLSelectParser.INTO_SYMBOL - 47)) | (1 << (SQLSelectParser.OUTFILE_SYMBOL - 47)) | (1 << (SQLSelectParser.DUMPFILE_SYMBOL - 47)) | (1 << (SQLSelectParser.PROCEDURE_SYMBOL - 47)) | (1 << (SQLSelectParser.ANALYSE_SYMBOL - 47)))) !== 0) || ((((_la - 79)) & ~0x1f) == 0 && ((1 << (_la - 79)) & ((1 << (SQLSelectParser.HAVING_SYMBOL - 79)) | (1 << (SQLSelectParser.WINDOW_SYMBOL - 79)) | (1 << (SQLSelectParser.AS_SYMBOL - 79)) | (1 << (SQLSelectParser.PARTITION_SYMBOL - 79)) | (1 << (SQLSelectParser.BY_SYMBOL - 79)) | (1 << (SQLSelectParser.ROWS_SYMBOL - 79)) | (1 << (SQLSelectParser.RANGE_SYMBOL - 79)) | (1 << (SQLSelectParser.GROUPS_SYMBOL - 79)) | (1 << (SQLSelectParser.UNBOUNDED_SYMBOL - 79)) | (1 << (SQLSelectParser.PRECEDING_SYMBOL - 79)) | (1 << (SQLSelectParser.INTERVAL_SYMBOL - 79)) | (1 << (SQLSelectParser.CURRENT_SYMBOL - 79)) | (1 << (SQLSelectParser.ROW_SYMBOL - 79)) | (1 << (SQLSelectParser.BETWEEN_SYMBOL - 79)) | (1 << (SQLSelectParser.AND_SYMBOL - 79)) | (1 << (SQLSelectParser.FOLLOWING_SYMBOL - 79)) | (1 << (SQLSelectParser.EXCLUDE_SYMBOL - 79)) | (1 << (SQLSelectParser.GROUP_SYMBOL - 79)) | (1 << (SQLSelectParser.TIES_SYMBOL - 79)) | (1 << (SQLSelectParser.NO_SYMBOL - 79)) | (1 << (SQLSelectParser.OTHERS_SYMBOL - 79)) | (1 << (SQLSelectParser.WITH_SYMBOL - 79)) | (1 << (SQLSelectParser.WITHOUT_SYMBOL - 79)) | (1 << (SQLSelectParser.RECURSIVE_SYMBOL - 79)) | (1 << (SQLSelectParser.ROLLUP_SYMBOL - 79)) | (1 << (SQLSelectParser.CUBE_SYMBOL - 79)) | (1 << (SQLSelectParser.ORDER_SYMBOL - 79)) | (1 << (SQLSelectParser.ASC_SYMBOL - 79)) | (1 << (SQLSelectParser.DESC_SYMBOL - 79)) | (1 << (SQLSelectParser.FROM_SYMBOL - 79)) | (1 << (SQLSelectParser.DUAL_SYMBOL - 79)) | (1 << (SQLSelectParser.VALUES_SYMBOL - 79)))) !== 0) || ((((_la - 111)) & ~0x1f) == 0 && ((1 << (_la - 111)) & ((1 << (SQLSelectParser.TABLE_SYMBOL - 111)) | (1 << (SQLSelectParser.SQL_NO_CACHE_SYMBOL - 111)) | (1 << (SQLSelectParser.SQL_CACHE_SYMBOL - 111)) | (1 << (SQLSelectParser.MAX_STATEMENT_TIME_SYMBOL - 111)) | (1 << (SQLSelectParser.FOR_SYMBOL - 111)) | (1 << (SQLSelectParser.OF_SYMBOL - 111)) | (1 << (SQLSelectParser.LOCK_SYMBOL - 111)) | (1 << (SQLSelectParser.IN_SYMBOL - 111)) | (1 << (SQLSelectParser.SHARE_SYMBOL - 111)) | (1 << (SQLSelectParser.MODE_SYMBOL - 111)) | (1 << (SQLSelectParser.UPDATE_SYMBOL - 111)) | (1 << (SQLSelectParser.SKIP_SYMBOL - 111)) | (1 << (SQLSelectParser.LOCKED_SYMBOL - 111)) | (1 << (SQLSelectParser.NOWAIT_SYMBOL - 111)) | (1 << (SQLSelectParser.WHERE_SYMBOL - 111)) | (1 << (SQLSelectParser.OJ_SYMBOL - 111)) | (1 << (SQLSelectParser.ON_SYMBOL - 111)) | (1 << (SQLSelectParser.USING_SYMBOL - 111)) | (1 << (SQLSelectParser.NATURAL_SYMBOL - 111)) | (1 << (SQLSelectParser.INNER_SYMBOL - 111)) | (1 << (SQLSelectParser.JOIN_SYMBOL - 111)) | (1 << (SQLSelectParser.LEFT_SYMBOL - 111)) | (1 << (SQLSelectParser.RIGHT_SYMBOL - 111)) | (1 << (SQLSelectParser.OUTER_SYMBOL - 111)) | (1 << (SQLSelectParser.CROSS_SYMBOL - 111)) | (1 << (SQLSelectParser.LATERAL_SYMBOL - 111)) | (1 << (SQLSelectParser.JSON_TABLE_SYMBOL - 111)) | (1 << (SQLSelectParser.COLUMNS_SYMBOL - 111)) | (1 << (SQLSelectParser.ORDINALITY_SYMBOL - 111)) | (1 << (SQLSelectParser.EXISTS_SYMBOL - 111)) | (1 << (SQLSelectParser.PATH_SYMBOL - 111)) | (1 << (SQLSelectParser.NESTED_SYMBOL - 111)))) !== 0) || ((((_la - 143)) & ~0x1f) == 0 && ((1 << (_la - 143)) & ((1 << (SQLSelectParser.EMPTY_SYMBOL - 143)) | (1 << (SQLSelectParser.ERROR_SYMBOL - 143)) | (1 << (SQLSelectParser.NULL_SYMBOL - 143)) | (1 << (SQLSelectParser.USE_SYMBOL - 143)) | (1 << (SQLSelectParser.FORCE_SYMBOL - 143)) | (1 << (SQLSelectParser.IGNORE_SYMBOL - 143)) | (1 << (SQLSelectParser.KEY_SYMBOL - 143)) | (1 << (SQLSelectParser.INDEX_SYMBOL - 143)) | (1 << (SQLSelectParser.PRIMARY_SYMBOL - 143)) | (1 << (SQLSelectParser.IS_SYMBOL - 143)) | (1 << (SQLSelectParser.TRUE_SYMBOL - 143)) | (1 << (SQLSelectParser.FALSE_SYMBOL - 143)) | (1 << (SQLSelectParser.UNKNOWN_SYMBOL - 143)) | (1 << (SQLSelectParser.NOT_SYMBOL - 143)) | (1 << (SQLSelectParser.XOR_SYMBOL - 143)) | (1 << (SQLSelectParser.OR_SYMBOL - 143)) | (1 << (SQLSelectParser.ANY_SYMBOL - 143)) | (1 << (SQLSelectParser.MEMBER_SYMBOL - 143)) | (1 << (SQLSelectParser.SOUNDS_SYMBOL - 143)) | (1 << (SQLSelectParser.LIKE_SYMBOL - 143)) | (1 << (SQLSelectParser.ESCAPE_SYMBOL - 143)) | (1 << (SQLSelectParser.REGEXP_SYMBOL - 143)) | (1 << (SQLSelectParser.DIV_SYMBOL - 143)) | (1 << (SQLSelectParser.MOD_SYMBOL - 143)) | (1 << (SQLSelectParser.MATCH_SYMBOL - 143)) | (1 << (SQLSelectParser.AGAINST_SYMBOL - 143)) | (1 << (SQLSelectParser.BINARY_SYMBOL - 143)) | (1 << (SQLSelectParser.CAST_SYMBOL - 143)) | (1 << (SQLSelectParser.ARRAY_SYMBOL - 143)) | (1 << (SQLSelectParser.CASE_SYMBOL - 143)) | (1 << (SQLSelectParser.END_SYMBOL - 143)) | (1 << (SQLSelectParser.CONVERT_SYMBOL - 143)))) !== 0) || ((((_la - 175)) & ~0x1f) == 0 && ((1 << (_la - 175)) & ((1 << (SQLSelectParser.COLLATE_SYMBOL - 175)) | (1 << (SQLSelectParser.AVG_SYMBOL - 175)) | (1 << (SQLSelectParser.BIT_AND_SYMBOL - 175)) | (1 << (SQLSelectParser.BIT_OR_SYMBOL - 175)) | (1 << (SQLSelectParser.BIT_XOR_SYMBOL - 175)) | (1 << (SQLSelectParser.COUNT_SYMBOL - 175)) | (1 << (SQLSelectParser.MIN_SYMBOL - 175)) | (1 << (SQLSelectParser.MAX_SYMBOL - 175)) | (1 << (SQLSelectParser.STD_SYMBOL - 175)) | (1 << (SQLSelectParser.VARIANCE_SYMBOL - 175)) | (1 << (SQLSelectParser.STDDEV_SAMP_SYMBOL - 175)) | (1 << (SQLSelectParser.VAR_SAMP_SYMBOL - 175)) | (1 << (SQLSelectParser.SUM_SYMBOL - 175)) | (1 << (SQLSelectParser.GROUP_CONCAT_SYMBOL - 175)) | (1 << (SQLSelectParser.SEPARATOR_SYMBOL - 175)) | (1 << (SQLSelectParser.GROUPING_SYMBOL - 175)) | (1 << (SQLSelectParser.ROW_NUMBER_SYMBOL - 175)) | (1 << (SQLSelectParser.RANK_SYMBOL - 175)) | (1 << (SQLSelectParser.DENSE_RANK_SYMBOL - 175)) | (1 << (SQLSelectParser.CUME_DIST_SYMBOL - 175)) | (1 << (SQLSelectParser.PERCENT_RANK_SYMBOL - 175)) | (1 << (SQLSelectParser.NTILE_SYMBOL - 175)) | (1 << (SQLSelectParser.LEAD_SYMBOL - 175)) | (1 << (SQLSelectParser.LAG_SYMBOL - 175)) | (1 << (SQLSelectParser.FIRST_VALUE_SYMBOL - 175)) | (1 << (SQLSelectParser.LAST_VALUE_SYMBOL - 175)) | (1 << (SQLSelectParser.NTH_VALUE_SYMBOL - 175)) | (1 << (SQLSelectParser.FIRST_SYMBOL - 175)) | (1 << (SQLSelectParser.LAST_SYMBOL - 175)) | (1 << (SQLSelectParser.OVER_SYMBOL - 175)) | (1 << (SQLSelectParser.RESPECT_SYMBOL - 175)) | (1 << (SQLSelectParser.NULLS_SYMBOL - 175)))) !== 0) || ((((_la - 207)) & ~0x1f) == 0 && ((1 << (_la - 207)) & ((1 << (SQLSelectParser.JSON_ARRAYAGG_SYMBOL - 207)) | (1 << (SQLSelectParser.JSON_OBJECTAGG_SYMBOL - 207)) | (1 << (SQLSelectParser.BOOLEAN_SYMBOL - 207)) | (1 << (SQLSelectParser.LANGUAGE_SYMBOL - 207)) | (1 << (SQLSelectParser.QUERY_SYMBOL - 207)) | (1 << (SQLSelectParser.EXPANSION_SYMBOL - 207)) | (1 << (SQLSelectParser.CHAR_SYMBOL - 207)) | (1 << (SQLSelectParser.CURRENT_USER_SYMBOL - 207)) | (1 << (SQLSelectParser.DATE_SYMBOL - 207)) | (1 << (SQLSelectParser.INSERT_SYMBOL - 207)) | (1 << (SQLSelectParser.TIME_SYMBOL - 207)) | (1 << (SQLSelectParser.TIMESTAMP_SYMBOL - 207)) | (1 << (SQLSelectParser.TIMESTAMP_LTZ_SYMBOL - 207)) | (1 << (SQLSelectParser.TIMESTAMP_NTZ_SYMBOL - 207)) | (1 << (SQLSelectParser.ZONE_SYMBOL - 207)) | (1 << (SQLSelectParser.USER_SYMBOL - 207)) | (1 << (SQLSelectParser.ADDDATE_SYMBOL - 207)) | (1 << (SQLSelectParser.SUBDATE_SYMBOL - 207)) | (1 << (SQLSelectParser.CURDATE_SYMBOL - 207)) | (1 << (SQLSelectParser.CURTIME_SYMBOL - 207)) | (1 << (SQLSelectParser.DATE_ADD_SYMBOL - 207)) | (1 << (SQLSelectParser.DATE_SUB_SYMBOL - 207)) | (1 << (SQLSelectParser.EXTRACT_SYMBOL - 207)) | (1 << (SQLSelectParser.GET_FORMAT_SYMBOL - 207)) | (1 << (SQLSelectParser.NOW_SYMBOL - 207)) | (1 << (SQLSelectParser.POSITION_SYMBOL - 207)) | (1 << (SQLSelectParser.SYSDATE_SYMBOL - 207)) | (1 << (SQLSelectParser.TIMESTAMP_ADD_SYMBOL - 207)) | (1 << (SQLSelectParser.TIMESTAMP_DIFF_SYMBOL - 207)) | (1 << (SQLSelectParser.UTC_DATE_SYMBOL - 207)) | (1 << (SQLSelectParser.UTC_TIME_SYMBOL - 207)) | (1 << (SQLSelectParser.UTC_TIMESTAMP_SYMBOL - 207)))) !== 0) || ((((_la - 239)) & ~0x1f) == 0 && ((1 << (_la - 239)) & ((1 << (SQLSelectParser.ASCII_SYMBOL - 239)) | (1 << (SQLSelectParser.CHARSET_SYMBOL - 239)) | (1 << (SQLSelectParser.COALESCE_SYMBOL - 239)) | (1 << (SQLSelectParser.COLLATION_SYMBOL - 239)) | (1 << (SQLSelectParser.DATABASE_SYMBOL - 239)) | (1 << (SQLSelectParser.IF_SYMBOL - 239)) | (1 << (SQLSelectParser.FORMAT_SYMBOL - 239)) | (1 << (SQLSelectParser.MICROSECOND_SYMBOL - 239)) | (1 << (SQLSelectParser.OLD_PASSWORD_SYMBOL - 239)) | (1 << (SQLSelectParser.PASSWORD_SYMBOL - 239)) | (1 << (SQLSelectParser.REPEAT_SYMBOL - 239)) | (1 << (SQLSelectParser.REPLACE_SYMBOL - 239)) | (1 << (SQLSelectParser.REVERSE_SYMBOL - 239)) | (1 << (SQLSelectParser.ROW_COUNT_SYMBOL - 239)) | (1 << (SQLSelectParser.TRUNCATE_SYMBOL - 239)) | (1 << (SQLSelectParser.WEIGHT_STRING_SYMBOL - 239)) | (1 << (SQLSelectParser.CONTAINS_SYMBOL - 239)) | (1 << (SQLSelectParser.GEOMETRYCOLLECTION_SYMBOL - 239)) | (1 << (SQLSelectParser.LINESTRING_SYMBOL - 239)) | (1 << (SQLSelectParser.MULTILINESTRING_SYMBOL - 239)) | (1 << (SQLSelectParser.MULTIPOINT_SYMBOL - 239)) | (1 << (SQLSelectParser.MULTIPOLYGON_SYMBOL - 239)) | (1 << (SQLSelectParser.POINT_SYMBOL - 239)) | (1 << (SQLSelectParser.POLYGON_SYMBOL - 239)) | (1 << (SQLSelectParser.LEVEL_SYMBOL - 239)) | (1 << (SQLSelectParser.DATETIME_SYMBOL - 239)) | (1 << (SQLSelectParser.TRIM_SYMBOL - 239)) | (1 << (SQLSelectParser.LEADING_SYMBOL - 239)) | (1 << (SQLSelectParser.TRAILING_SYMBOL - 239)) | (1 << (SQLSelectParser.BOTH_SYMBOL - 239)) | (1 << (SQLSelectParser.STRING_SYMBOL - 239)) | (1 << (SQLSelectParser.SUBSTRING_SYMBOL - 239)))) !== 0) || ((((_la - 271)) & ~0x1f) == 0 && ((1 << (_la - 271)) & ((1 << (SQLSelectParser.WHEN_SYMBOL - 271)) | (1 << (SQLSelectParser.THEN_SYMBOL - 271)) | (1 << (SQLSelectParser.ELSE_SYMBOL - 271)) | (1 << (SQLSelectParser.SIGNED_SYMBOL - 271)) | (1 << (SQLSelectParser.UNSIGNED_SYMBOL - 271)) | (1 << (SQLSelectParser.DECIMAL_SYMBOL - 271)) | (1 << (SQLSelectParser.JSON_SYMBOL - 271)) | (1 << (SQLSelectParser.FLOAT_SYMBOL - 271)) | (1 << (SQLSelectParser.FLOAT_SYMBOL_4 - 271)) | (1 << (SQLSelectParser.FLOAT_SYMBOL_8 - 271)) | (1 << (SQLSelectParser.SET_SYMBOL - 271)) | (1 << (SQLSelectParser.SECOND_MICROSECOND_SYMBOL - 271)) | (1 << (SQLSelectParser.MINUTE_MICROSECOND_SYMBOL - 271)) | (1 << (SQLSelectParser.MINUTE_SECOND_SYMBOL - 271)) | (1 << (SQLSelectParser.HOUR_MICROSECOND_SYMBOL - 271)) | (1 << (SQLSelectParser.HOUR_SECOND_SYMBOL - 271)) | (1 << (SQLSelectParser.HOUR_MINUTE_SYMBOL - 271)) | (1 << (SQLSelectParser.DAY_MICROSECOND_SYMBOL - 271)) | (1 << (SQLSelectParser.DAY_SECOND_SYMBOL - 271)) | (1 << (SQLSelectParser.DAY_MINUTE_SYMBOL - 271)) | (1 << (SQLSelectParser.DAY_HOUR_SYMBOL - 271)) | (1 << (SQLSelectParser.YEAR_MONTH_SYMBOL - 271)) | (1 << (SQLSelectParser.BTREE_SYMBOL - 271)) | (1 << (SQLSelectParser.RTREE_SYMBOL - 271)) | (1 << (SQLSelectParser.HASH_SYMBOL - 271)) | (1 << (SQLSelectParser.REAL_SYMBOL - 271)) | (1 << (SQLSelectParser.DOUBLE_SYMBOL - 271)) | (1 << (SQLSelectParser.PRECISION_SYMBOL - 271)) | (1 << (SQLSelectParser.NUMERIC_SYMBOL - 271)) | (1 << (SQLSelectParser.NUMBER_SYMBOL - 271)) | (1 << (SQLSelectParser.FIXED_SYMBOL - 271)) | (1 << (SQLSelectParser.BIT_SYMBOL - 271)))) !== 0) || ((((_la - 303)) & ~0x1f) == 0 && ((1 << (_la - 303)) & ((1 << (SQLSelectParser.BOOL_SYMBOL - 303)) | (1 << (SQLSelectParser.VARYING_SYMBOL - 303)) | (1 << (SQLSelectParser.VARCHAR_SYMBOL - 303)) | (1 << (SQLSelectParser.NATIONAL_SYMBOL - 303)) | (1 << (SQLSelectParser.NVARCHAR_SYMBOL - 303)) | (1 << (SQLSelectParser.NCHAR_SYMBOL - 303)) | (1 << (SQLSelectParser.VARBINARY_SYMBOL - 303)) | (1 << (SQLSelectParser.TINYBLOB_SYMBOL - 303)) | (1 << (SQLSelectParser.BLOB_SYMBOL - 303)) | (1 << (SQLSelectParser.MEDIUMBLOB_SYMBOL - 303)) | (1 << (SQLSelectParser.LONGBLOB_SYMBOL - 303)) | (1 << (SQLSelectParser.LONG_SYMBOL - 303)) | (1 << (SQLSelectParser.TINYTEXT_SYMBOL - 303)) | (1 << (SQLSelectParser.TEXT_SYMBOL - 303)) | (1 << (SQLSelectParser.MEDIUMTEXT_SYMBOL - 303)) | (1 << (SQLSelectParser.LONGTEXT_SYMBOL - 303)) | (1 << (SQLSelectParser.ENUM_SYMBOL - 303)) | (1 << (SQLSelectParser.SERIAL_SYMBOL - 303)) | (1 << (SQLSelectParser.GEOMETRY_SYMBOL - 303)) | (1 << (SQLSelectParser.ZEROFILL_SYMBOL - 303)) | (1 << (SQLSelectParser.BYTE_SYMBOL - 303)) | (1 << (SQLSelectParser.UNICODE_SYMBOL - 303)) | (1 << (SQLSelectParser.TERMINATED_SYMBOL - 303)) | (1 << (SQLSelectParser.OPTIONALLY_SYMBOL - 303)) | (1 << (SQLSelectParser.ENCLOSED_SYMBOL - 303)) | (1 << (SQLSelectParser.ESCAPED_SYMBOL - 303)) | (1 << (SQLSelectParser.LINES_SYMBOL - 303)) | (1 << (SQLSelectParser.STARTING_SYMBOL - 303)) | (1 << (SQLSelectParser.GLOBAL_SYMBOL - 303)) | (1 << (SQLSelectParser.LOCAL_SYMBOL - 303)) | (1 << (SQLSelectParser.SESSION_SYMBOL - 303)) | (1 << (SQLSelectParser.VARIANT_SYMBOL - 303)))) !== 0) || _la===SQLSelectParser.OBJECT_SYMBOL || _la===SQLSelectParser.GEOGRAPHY_SYMBOL)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - } catch (re) { - if(re instanceof antlr4.error.RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return localctx; - } - - -} - -SQLSelectParser.EOF = antlr4.Token.EOF; -SQLSelectParser.EQUAL_OPERATOR = 1; -SQLSelectParser.ASSIGN_OPERATOR = 2; -SQLSelectParser.NULL_SAFE_EQUAL_OPERATOR = 3; -SQLSelectParser.GREATER_OR_EQUAL_OPERATOR = 4; -SQLSelectParser.GREATER_THAN_OPERATOR = 5; -SQLSelectParser.LESS_OR_EQUAL_OPERATOR = 6; -SQLSelectParser.LESS_THAN_OPERATOR = 7; -SQLSelectParser.NOT_EQUAL_OPERATOR = 8; -SQLSelectParser.PLUS_OPERATOR = 9; -SQLSelectParser.MINUS_OPERATOR = 10; -SQLSelectParser.MULT_OPERATOR = 11; -SQLSelectParser.DIV_OPERATOR = 12; -SQLSelectParser.MOD_OPERATOR = 13; -SQLSelectParser.LOGICAL_NOT_OPERATOR = 14; -SQLSelectParser.BITWISE_NOT_OPERATOR = 15; -SQLSelectParser.SHIFT_LEFT_OPERATOR = 16; -SQLSelectParser.SHIFT_RIGHT_OPERATOR = 17; -SQLSelectParser.LOGICAL_AND_OPERATOR = 18; -SQLSelectParser.BITWISE_AND_OPERATOR = 19; -SQLSelectParser.BITWISE_XOR_OPERATOR = 20; -SQLSelectParser.LOGICAL_OR_OPERATOR = 21; -SQLSelectParser.BITWISE_OR_OPERATOR = 22; -SQLSelectParser.DOT_SYMBOL = 23; -SQLSelectParser.COMMA_SYMBOL = 24; -SQLSelectParser.SEMICOLON_SYMBOL = 25; -SQLSelectParser.COLON_SYMBOL = 26; -SQLSelectParser.OPEN_PAR_SYMBOL = 27; -SQLSelectParser.CLOSE_PAR_SYMBOL = 28; -SQLSelectParser.OPEN_CURLY_SYMBOL = 29; -SQLSelectParser.CLOSE_CURLY_SYMBOL = 30; -SQLSelectParser.UNDERLINE_SYMBOL = 31; -SQLSelectParser.OPEN_BRACKET_SYMBOL = 32; -SQLSelectParser.CLOSE_BRACKET_SYMBOL = 33; -SQLSelectParser.JSON_SEPARATOR_SYMBOL = 34; -SQLSelectParser.JSON_UNQUOTED_SEPARATOR_SYMBOL = 35; -SQLSelectParser.AT_SIGN_SYMBOL = 36; -SQLSelectParser.AT_TEXT_SUFFIX = 37; -SQLSelectParser.AT_AT_SIGN_SYMBOL = 38; -SQLSelectParser.NULL2_SYMBOL = 39; -SQLSelectParser.PARAM_MARKER = 40; -SQLSelectParser.CAST_COLON_SYMBOL = 41; -SQLSelectParser.HEX_NUMBER = 42; -SQLSelectParser.BIN_NUMBER = 43; -SQLSelectParser.INT_NUMBER = 44; -SQLSelectParser.DECIMAL_NUMBER = 45; -SQLSelectParser.FLOAT_NUMBER = 46; -SQLSelectParser.TINYINT_SYMBOL = 47; -SQLSelectParser.SMALLINT_SYMBOL = 48; -SQLSelectParser.MEDIUMINT_SYMBOL = 49; -SQLSelectParser.BYTE_INT_SYMBOL = 50; -SQLSelectParser.INT_SYMBOL = 51; -SQLSelectParser.BIGINT_SYMBOL = 52; -SQLSelectParser.SECOND_SYMBOL = 53; -SQLSelectParser.MINUTE_SYMBOL = 54; -SQLSelectParser.HOUR_SYMBOL = 55; -SQLSelectParser.DAY_SYMBOL = 56; -SQLSelectParser.WEEK_SYMBOL = 57; -SQLSelectParser.MONTH_SYMBOL = 58; -SQLSelectParser.QUARTER_SYMBOL = 59; -SQLSelectParser.YEAR_SYMBOL = 60; -SQLSelectParser.DEFAULT_SYMBOL = 61; -SQLSelectParser.UNION_SYMBOL = 62; -SQLSelectParser.SELECT_SYMBOL = 63; -SQLSelectParser.ALL_SYMBOL = 64; -SQLSelectParser.DISTINCT_SYMBOL = 65; -SQLSelectParser.STRAIGHT_JOIN_SYMBOL = 66; -SQLSelectParser.HIGH_PRIORITY_SYMBOL = 67; -SQLSelectParser.SQL_SMALL_RESULT_SYMBOL = 68; -SQLSelectParser.SQL_BIG_RESULT_SYMBOL = 69; -SQLSelectParser.SQL_BUFFER_RESULT_SYMBOL = 70; -SQLSelectParser.SQL_CALC_FOUND_ROWS_SYMBOL = 71; -SQLSelectParser.LIMIT_SYMBOL = 72; -SQLSelectParser.OFFSET_SYMBOL = 73; -SQLSelectParser.INTO_SYMBOL = 74; -SQLSelectParser.OUTFILE_SYMBOL = 75; -SQLSelectParser.DUMPFILE_SYMBOL = 76; -SQLSelectParser.PROCEDURE_SYMBOL = 77; -SQLSelectParser.ANALYSE_SYMBOL = 78; -SQLSelectParser.HAVING_SYMBOL = 79; -SQLSelectParser.WINDOW_SYMBOL = 80; -SQLSelectParser.AS_SYMBOL = 81; -SQLSelectParser.PARTITION_SYMBOL = 82; -SQLSelectParser.BY_SYMBOL = 83; -SQLSelectParser.ROWS_SYMBOL = 84; -SQLSelectParser.RANGE_SYMBOL = 85; -SQLSelectParser.GROUPS_SYMBOL = 86; -SQLSelectParser.UNBOUNDED_SYMBOL = 87; -SQLSelectParser.PRECEDING_SYMBOL = 88; -SQLSelectParser.INTERVAL_SYMBOL = 89; -SQLSelectParser.CURRENT_SYMBOL = 90; -SQLSelectParser.ROW_SYMBOL = 91; -SQLSelectParser.BETWEEN_SYMBOL = 92; -SQLSelectParser.AND_SYMBOL = 93; -SQLSelectParser.FOLLOWING_SYMBOL = 94; -SQLSelectParser.EXCLUDE_SYMBOL = 95; -SQLSelectParser.GROUP_SYMBOL = 96; -SQLSelectParser.TIES_SYMBOL = 97; -SQLSelectParser.NO_SYMBOL = 98; -SQLSelectParser.OTHERS_SYMBOL = 99; -SQLSelectParser.WITH_SYMBOL = 100; -SQLSelectParser.WITHOUT_SYMBOL = 101; -SQLSelectParser.RECURSIVE_SYMBOL = 102; -SQLSelectParser.ROLLUP_SYMBOL = 103; -SQLSelectParser.CUBE_SYMBOL = 104; -SQLSelectParser.ORDER_SYMBOL = 105; -SQLSelectParser.ASC_SYMBOL = 106; -SQLSelectParser.DESC_SYMBOL = 107; -SQLSelectParser.FROM_SYMBOL = 108; -SQLSelectParser.DUAL_SYMBOL = 109; -SQLSelectParser.VALUES_SYMBOL = 110; -SQLSelectParser.TABLE_SYMBOL = 111; -SQLSelectParser.SQL_NO_CACHE_SYMBOL = 112; -SQLSelectParser.SQL_CACHE_SYMBOL = 113; -SQLSelectParser.MAX_STATEMENT_TIME_SYMBOL = 114; -SQLSelectParser.FOR_SYMBOL = 115; -SQLSelectParser.OF_SYMBOL = 116; -SQLSelectParser.LOCK_SYMBOL = 117; -SQLSelectParser.IN_SYMBOL = 118; -SQLSelectParser.SHARE_SYMBOL = 119; -SQLSelectParser.MODE_SYMBOL = 120; -SQLSelectParser.UPDATE_SYMBOL = 121; -SQLSelectParser.SKIP_SYMBOL = 122; -SQLSelectParser.LOCKED_SYMBOL = 123; -SQLSelectParser.NOWAIT_SYMBOL = 124; -SQLSelectParser.WHERE_SYMBOL = 125; -SQLSelectParser.OJ_SYMBOL = 126; -SQLSelectParser.ON_SYMBOL = 127; -SQLSelectParser.USING_SYMBOL = 128; -SQLSelectParser.NATURAL_SYMBOL = 129; -SQLSelectParser.INNER_SYMBOL = 130; -SQLSelectParser.JOIN_SYMBOL = 131; -SQLSelectParser.LEFT_SYMBOL = 132; -SQLSelectParser.RIGHT_SYMBOL = 133; -SQLSelectParser.OUTER_SYMBOL = 134; -SQLSelectParser.CROSS_SYMBOL = 135; -SQLSelectParser.LATERAL_SYMBOL = 136; -SQLSelectParser.JSON_TABLE_SYMBOL = 137; -SQLSelectParser.COLUMNS_SYMBOL = 138; -SQLSelectParser.ORDINALITY_SYMBOL = 139; -SQLSelectParser.EXISTS_SYMBOL = 140; -SQLSelectParser.PATH_SYMBOL = 141; -SQLSelectParser.NESTED_SYMBOL = 142; -SQLSelectParser.EMPTY_SYMBOL = 143; -SQLSelectParser.ERROR_SYMBOL = 144; -SQLSelectParser.NULL_SYMBOL = 145; -SQLSelectParser.USE_SYMBOL = 146; -SQLSelectParser.FORCE_SYMBOL = 147; -SQLSelectParser.IGNORE_SYMBOL = 148; -SQLSelectParser.KEY_SYMBOL = 149; -SQLSelectParser.INDEX_SYMBOL = 150; -SQLSelectParser.PRIMARY_SYMBOL = 151; -SQLSelectParser.IS_SYMBOL = 152; -SQLSelectParser.TRUE_SYMBOL = 153; -SQLSelectParser.FALSE_SYMBOL = 154; -SQLSelectParser.UNKNOWN_SYMBOL = 155; -SQLSelectParser.NOT_SYMBOL = 156; -SQLSelectParser.XOR_SYMBOL = 157; -SQLSelectParser.OR_SYMBOL = 158; -SQLSelectParser.ANY_SYMBOL = 159; -SQLSelectParser.MEMBER_SYMBOL = 160; -SQLSelectParser.SOUNDS_SYMBOL = 161; -SQLSelectParser.LIKE_SYMBOL = 162; -SQLSelectParser.ESCAPE_SYMBOL = 163; -SQLSelectParser.REGEXP_SYMBOL = 164; -SQLSelectParser.DIV_SYMBOL = 165; -SQLSelectParser.MOD_SYMBOL = 166; -SQLSelectParser.MATCH_SYMBOL = 167; -SQLSelectParser.AGAINST_SYMBOL = 168; -SQLSelectParser.BINARY_SYMBOL = 169; -SQLSelectParser.CAST_SYMBOL = 170; -SQLSelectParser.ARRAY_SYMBOL = 171; -SQLSelectParser.CASE_SYMBOL = 172; -SQLSelectParser.END_SYMBOL = 173; -SQLSelectParser.CONVERT_SYMBOL = 174; -SQLSelectParser.COLLATE_SYMBOL = 175; -SQLSelectParser.AVG_SYMBOL = 176; -SQLSelectParser.BIT_AND_SYMBOL = 177; -SQLSelectParser.BIT_OR_SYMBOL = 178; -SQLSelectParser.BIT_XOR_SYMBOL = 179; -SQLSelectParser.COUNT_SYMBOL = 180; -SQLSelectParser.MIN_SYMBOL = 181; -SQLSelectParser.MAX_SYMBOL = 182; -SQLSelectParser.STD_SYMBOL = 183; -SQLSelectParser.VARIANCE_SYMBOL = 184; -SQLSelectParser.STDDEV_SAMP_SYMBOL = 185; -SQLSelectParser.VAR_SAMP_SYMBOL = 186; -SQLSelectParser.SUM_SYMBOL = 187; -SQLSelectParser.GROUP_CONCAT_SYMBOL = 188; -SQLSelectParser.SEPARATOR_SYMBOL = 189; -SQLSelectParser.GROUPING_SYMBOL = 190; -SQLSelectParser.ROW_NUMBER_SYMBOL = 191; -SQLSelectParser.RANK_SYMBOL = 192; -SQLSelectParser.DENSE_RANK_SYMBOL = 193; -SQLSelectParser.CUME_DIST_SYMBOL = 194; -SQLSelectParser.PERCENT_RANK_SYMBOL = 195; -SQLSelectParser.NTILE_SYMBOL = 196; -SQLSelectParser.LEAD_SYMBOL = 197; -SQLSelectParser.LAG_SYMBOL = 198; -SQLSelectParser.FIRST_VALUE_SYMBOL = 199; -SQLSelectParser.LAST_VALUE_SYMBOL = 200; -SQLSelectParser.NTH_VALUE_SYMBOL = 201; -SQLSelectParser.FIRST_SYMBOL = 202; -SQLSelectParser.LAST_SYMBOL = 203; -SQLSelectParser.OVER_SYMBOL = 204; -SQLSelectParser.RESPECT_SYMBOL = 205; -SQLSelectParser.NULLS_SYMBOL = 206; -SQLSelectParser.JSON_ARRAYAGG_SYMBOL = 207; -SQLSelectParser.JSON_OBJECTAGG_SYMBOL = 208; -SQLSelectParser.BOOLEAN_SYMBOL = 209; -SQLSelectParser.LANGUAGE_SYMBOL = 210; -SQLSelectParser.QUERY_SYMBOL = 211; -SQLSelectParser.EXPANSION_SYMBOL = 212; -SQLSelectParser.CHAR_SYMBOL = 213; -SQLSelectParser.CURRENT_USER_SYMBOL = 214; -SQLSelectParser.DATE_SYMBOL = 215; -SQLSelectParser.INSERT_SYMBOL = 216; -SQLSelectParser.TIME_SYMBOL = 217; -SQLSelectParser.TIMESTAMP_SYMBOL = 218; -SQLSelectParser.TIMESTAMP_LTZ_SYMBOL = 219; -SQLSelectParser.TIMESTAMP_NTZ_SYMBOL = 220; -SQLSelectParser.ZONE_SYMBOL = 221; -SQLSelectParser.USER_SYMBOL = 222; -SQLSelectParser.ADDDATE_SYMBOL = 223; -SQLSelectParser.SUBDATE_SYMBOL = 224; -SQLSelectParser.CURDATE_SYMBOL = 225; -SQLSelectParser.CURTIME_SYMBOL = 226; -SQLSelectParser.DATE_ADD_SYMBOL = 227; -SQLSelectParser.DATE_SUB_SYMBOL = 228; -SQLSelectParser.EXTRACT_SYMBOL = 229; -SQLSelectParser.GET_FORMAT_SYMBOL = 230; -SQLSelectParser.NOW_SYMBOL = 231; -SQLSelectParser.POSITION_SYMBOL = 232; -SQLSelectParser.SYSDATE_SYMBOL = 233; -SQLSelectParser.TIMESTAMP_ADD_SYMBOL = 234; -SQLSelectParser.TIMESTAMP_DIFF_SYMBOL = 235; -SQLSelectParser.UTC_DATE_SYMBOL = 236; -SQLSelectParser.UTC_TIME_SYMBOL = 237; -SQLSelectParser.UTC_TIMESTAMP_SYMBOL = 238; -SQLSelectParser.ASCII_SYMBOL = 239; -SQLSelectParser.CHARSET_SYMBOL = 240; -SQLSelectParser.COALESCE_SYMBOL = 241; -SQLSelectParser.COLLATION_SYMBOL = 242; -SQLSelectParser.DATABASE_SYMBOL = 243; -SQLSelectParser.IF_SYMBOL = 244; -SQLSelectParser.FORMAT_SYMBOL = 245; -SQLSelectParser.MICROSECOND_SYMBOL = 246; -SQLSelectParser.OLD_PASSWORD_SYMBOL = 247; -SQLSelectParser.PASSWORD_SYMBOL = 248; -SQLSelectParser.REPEAT_SYMBOL = 249; -SQLSelectParser.REPLACE_SYMBOL = 250; -SQLSelectParser.REVERSE_SYMBOL = 251; -SQLSelectParser.ROW_COUNT_SYMBOL = 252; -SQLSelectParser.TRUNCATE_SYMBOL = 253; -SQLSelectParser.WEIGHT_STRING_SYMBOL = 254; -SQLSelectParser.CONTAINS_SYMBOL = 255; -SQLSelectParser.GEOMETRYCOLLECTION_SYMBOL = 256; -SQLSelectParser.LINESTRING_SYMBOL = 257; -SQLSelectParser.MULTILINESTRING_SYMBOL = 258; -SQLSelectParser.MULTIPOINT_SYMBOL = 259; -SQLSelectParser.MULTIPOLYGON_SYMBOL = 260; -SQLSelectParser.POINT_SYMBOL = 261; -SQLSelectParser.POLYGON_SYMBOL = 262; -SQLSelectParser.LEVEL_SYMBOL = 263; -SQLSelectParser.DATETIME_SYMBOL = 264; -SQLSelectParser.TRIM_SYMBOL = 265; -SQLSelectParser.LEADING_SYMBOL = 266; -SQLSelectParser.TRAILING_SYMBOL = 267; -SQLSelectParser.BOTH_SYMBOL = 268; -SQLSelectParser.STRING_SYMBOL = 269; -SQLSelectParser.SUBSTRING_SYMBOL = 270; -SQLSelectParser.WHEN_SYMBOL = 271; -SQLSelectParser.THEN_SYMBOL = 272; -SQLSelectParser.ELSE_SYMBOL = 273; -SQLSelectParser.SIGNED_SYMBOL = 274; -SQLSelectParser.UNSIGNED_SYMBOL = 275; -SQLSelectParser.DECIMAL_SYMBOL = 276; -SQLSelectParser.JSON_SYMBOL = 277; -SQLSelectParser.FLOAT_SYMBOL = 278; -SQLSelectParser.FLOAT_SYMBOL_4 = 279; -SQLSelectParser.FLOAT_SYMBOL_8 = 280; -SQLSelectParser.SET_SYMBOL = 281; -SQLSelectParser.SECOND_MICROSECOND_SYMBOL = 282; -SQLSelectParser.MINUTE_MICROSECOND_SYMBOL = 283; -SQLSelectParser.MINUTE_SECOND_SYMBOL = 284; -SQLSelectParser.HOUR_MICROSECOND_SYMBOL = 285; -SQLSelectParser.HOUR_SECOND_SYMBOL = 286; -SQLSelectParser.HOUR_MINUTE_SYMBOL = 287; -SQLSelectParser.DAY_MICROSECOND_SYMBOL = 288; -SQLSelectParser.DAY_SECOND_SYMBOL = 289; -SQLSelectParser.DAY_MINUTE_SYMBOL = 290; -SQLSelectParser.DAY_HOUR_SYMBOL = 291; -SQLSelectParser.YEAR_MONTH_SYMBOL = 292; -SQLSelectParser.BTREE_SYMBOL = 293; -SQLSelectParser.RTREE_SYMBOL = 294; -SQLSelectParser.HASH_SYMBOL = 295; -SQLSelectParser.REAL_SYMBOL = 296; -SQLSelectParser.DOUBLE_SYMBOL = 297; -SQLSelectParser.PRECISION_SYMBOL = 298; -SQLSelectParser.NUMERIC_SYMBOL = 299; -SQLSelectParser.NUMBER_SYMBOL = 300; -SQLSelectParser.FIXED_SYMBOL = 301; -SQLSelectParser.BIT_SYMBOL = 302; -SQLSelectParser.BOOL_SYMBOL = 303; -SQLSelectParser.VARYING_SYMBOL = 304; -SQLSelectParser.VARCHAR_SYMBOL = 305; -SQLSelectParser.NATIONAL_SYMBOL = 306; -SQLSelectParser.NVARCHAR_SYMBOL = 307; -SQLSelectParser.NCHAR_SYMBOL = 308; -SQLSelectParser.VARBINARY_SYMBOL = 309; -SQLSelectParser.TINYBLOB_SYMBOL = 310; -SQLSelectParser.BLOB_SYMBOL = 311; -SQLSelectParser.MEDIUMBLOB_SYMBOL = 312; -SQLSelectParser.LONGBLOB_SYMBOL = 313; -SQLSelectParser.LONG_SYMBOL = 314; -SQLSelectParser.TINYTEXT_SYMBOL = 315; -SQLSelectParser.TEXT_SYMBOL = 316; -SQLSelectParser.MEDIUMTEXT_SYMBOL = 317; -SQLSelectParser.LONGTEXT_SYMBOL = 318; -SQLSelectParser.ENUM_SYMBOL = 319; -SQLSelectParser.SERIAL_SYMBOL = 320; -SQLSelectParser.GEOMETRY_SYMBOL = 321; -SQLSelectParser.ZEROFILL_SYMBOL = 322; -SQLSelectParser.BYTE_SYMBOL = 323; -SQLSelectParser.UNICODE_SYMBOL = 324; -SQLSelectParser.TERMINATED_SYMBOL = 325; -SQLSelectParser.OPTIONALLY_SYMBOL = 326; -SQLSelectParser.ENCLOSED_SYMBOL = 327; -SQLSelectParser.ESCAPED_SYMBOL = 328; -SQLSelectParser.LINES_SYMBOL = 329; -SQLSelectParser.STARTING_SYMBOL = 330; -SQLSelectParser.GLOBAL_SYMBOL = 331; -SQLSelectParser.LOCAL_SYMBOL = 332; -SQLSelectParser.SESSION_SYMBOL = 333; -SQLSelectParser.VARIANT_SYMBOL = 334; -SQLSelectParser.OBJECT_SYMBOL = 335; -SQLSelectParser.GEOGRAPHY_SYMBOL = 336; -SQLSelectParser.WHITESPACE = 337; -SQLSelectParser.INVALID_INPUT = 338; -SQLSelectParser.UNDERSCORE_CHARSET = 339; -SQLSelectParser.IDENTIFIER = 340; -SQLSelectParser.NCHAR_TEXT = 341; -SQLSelectParser.BACK_TICK_QUOTED_ID = 342; -SQLSelectParser.DOUBLE_QUOTED_TEXT = 343; -SQLSelectParser.SINGLE_QUOTED_TEXT = 344; -SQLSelectParser.BRACKET_QUOTED_TEXT = 345; -SQLSelectParser.VERSION_COMMENT_START = 346; -SQLSelectParser.MYSQL_COMMENT_START = 347; -SQLSelectParser.VERSION_COMMENT_END = 348; -SQLSelectParser.BLOCK_COMMENT = 349; -SQLSelectParser.POUND_COMMENT = 350; -SQLSelectParser.DASHDASH_COMMENT = 351; - -SQLSelectParser.RULE_query = 0; -SQLSelectParser.RULE_values = 1; -SQLSelectParser.RULE_selectStatement = 2; -SQLSelectParser.RULE_selectStatementWithInto = 3; -SQLSelectParser.RULE_queryExpression = 4; -SQLSelectParser.RULE_queryExpressionBody = 5; -SQLSelectParser.RULE_queryExpressionParens = 6; -SQLSelectParser.RULE_queryPrimary = 7; -SQLSelectParser.RULE_querySpecification = 8; -SQLSelectParser.RULE_subquery = 9; -SQLSelectParser.RULE_querySpecOption = 10; -SQLSelectParser.RULE_limitClause = 11; -SQLSelectParser.RULE_limitOptions = 12; -SQLSelectParser.RULE_limitOption = 13; -SQLSelectParser.RULE_intoClause = 14; -SQLSelectParser.RULE_procedureAnalyseClause = 15; -SQLSelectParser.RULE_havingClause = 16; -SQLSelectParser.RULE_windowClause = 17; -SQLSelectParser.RULE_windowDefinition = 18; -SQLSelectParser.RULE_windowSpec = 19; -SQLSelectParser.RULE_windowSpecDetails = 20; -SQLSelectParser.RULE_windowFrameClause = 21; -SQLSelectParser.RULE_windowFrameUnits = 22; -SQLSelectParser.RULE_windowFrameExtent = 23; -SQLSelectParser.RULE_windowFrameStart = 24; -SQLSelectParser.RULE_windowFrameBetween = 25; -SQLSelectParser.RULE_windowFrameBound = 26; -SQLSelectParser.RULE_windowFrameExclusion = 27; -SQLSelectParser.RULE_withClause = 28; -SQLSelectParser.RULE_commonTableExpression = 29; -SQLSelectParser.RULE_groupByClause = 30; -SQLSelectParser.RULE_olapOption = 31; -SQLSelectParser.RULE_orderClause = 32; -SQLSelectParser.RULE_direction = 33; -SQLSelectParser.RULE_fromClause = 34; -SQLSelectParser.RULE_tableReferenceList = 35; -SQLSelectParser.RULE_tableValueConstructor = 36; -SQLSelectParser.RULE_explicitTable = 37; -SQLSelectParser.RULE_rowValueExplicit = 38; -SQLSelectParser.RULE_selectOption = 39; -SQLSelectParser.RULE_lockingClauseList = 40; -SQLSelectParser.RULE_lockingClause = 41; -SQLSelectParser.RULE_lockStrengh = 42; -SQLSelectParser.RULE_lockedRowAction = 43; -SQLSelectParser.RULE_selectItemList = 44; -SQLSelectParser.RULE_selectItem = 45; -SQLSelectParser.RULE_selectAlias = 46; -SQLSelectParser.RULE_whereClause = 47; -SQLSelectParser.RULE_tableReference = 48; -SQLSelectParser.RULE_escapedTableReference = 49; -SQLSelectParser.RULE_joinedTable = 50; -SQLSelectParser.RULE_naturalJoinType = 51; -SQLSelectParser.RULE_innerJoinType = 52; -SQLSelectParser.RULE_outerJoinType = 53; -SQLSelectParser.RULE_tableFactor = 54; -SQLSelectParser.RULE_singleTable = 55; -SQLSelectParser.RULE_singleTableParens = 56; -SQLSelectParser.RULE_derivedTable = 57; -SQLSelectParser.RULE_tableReferenceListParens = 58; -SQLSelectParser.RULE_tableFunction = 59; -SQLSelectParser.RULE_columnsClause = 60; -SQLSelectParser.RULE_jtColumn = 61; -SQLSelectParser.RULE_onEmptyOrError = 62; -SQLSelectParser.RULE_onEmpty = 63; -SQLSelectParser.RULE_onError = 64; -SQLSelectParser.RULE_jtOnResponse = 65; -SQLSelectParser.RULE_unionOption = 66; -SQLSelectParser.RULE_tableAlias = 67; -SQLSelectParser.RULE_indexHintList = 68; -SQLSelectParser.RULE_indexHint = 69; -SQLSelectParser.RULE_indexHintType = 70; -SQLSelectParser.RULE_keyOrIndex = 71; -SQLSelectParser.RULE_indexHintClause = 72; -SQLSelectParser.RULE_indexList = 73; -SQLSelectParser.RULE_indexListElement = 74; -SQLSelectParser.RULE_expr = 75; -SQLSelectParser.RULE_boolPri = 76; -SQLSelectParser.RULE_compOp = 77; -SQLSelectParser.RULE_predicate = 78; -SQLSelectParser.RULE_predicateOperations = 79; -SQLSelectParser.RULE_bitExpr = 80; -SQLSelectParser.RULE_simpleExpr = 81; -SQLSelectParser.RULE_jsonOperator = 82; -SQLSelectParser.RULE_sumExpr = 83; -SQLSelectParser.RULE_groupingOperation = 84; -SQLSelectParser.RULE_windowFunctionCall = 85; -SQLSelectParser.RULE_windowingClause = 86; -SQLSelectParser.RULE_leadLagInfo = 87; -SQLSelectParser.RULE_nullTreatment = 88; -SQLSelectParser.RULE_jsonFunction = 89; -SQLSelectParser.RULE_inSumExpr = 90; -SQLSelectParser.RULE_identListArg = 91; -SQLSelectParser.RULE_identList = 92; -SQLSelectParser.RULE_fulltextOptions = 93; -SQLSelectParser.RULE_runtimeFunctionCall = 94; -SQLSelectParser.RULE_geometryFunction = 95; -SQLSelectParser.RULE_timeFunctionParameters = 96; -SQLSelectParser.RULE_fractionalPrecision = 97; -SQLSelectParser.RULE_weightStringLevels = 98; -SQLSelectParser.RULE_weightStringLevelListItem = 99; -SQLSelectParser.RULE_dateTimeTtype = 100; -SQLSelectParser.RULE_trimFunction = 101; -SQLSelectParser.RULE_substringFunction = 102; -SQLSelectParser.RULE_functionCall = 103; -SQLSelectParser.RULE_udfExprList = 104; -SQLSelectParser.RULE_udfExpr = 105; -SQLSelectParser.RULE_variable = 106; -SQLSelectParser.RULE_userVariable = 107; -SQLSelectParser.RULE_systemVariable = 108; -SQLSelectParser.RULE_whenExpression = 109; -SQLSelectParser.RULE_thenExpression = 110; -SQLSelectParser.RULE_elseExpression = 111; -SQLSelectParser.RULE_exprList = 112; -SQLSelectParser.RULE_charset = 113; -SQLSelectParser.RULE_notRule = 114; -SQLSelectParser.RULE_not2Rule = 115; -SQLSelectParser.RULE_interval = 116; -SQLSelectParser.RULE_intervalTimeStamp = 117; -SQLSelectParser.RULE_exprListWithParentheses = 118; -SQLSelectParser.RULE_exprWithParentheses = 119; -SQLSelectParser.RULE_simpleExprWithParentheses = 120; -SQLSelectParser.RULE_orderList = 121; -SQLSelectParser.RULE_orderExpression = 122; -SQLSelectParser.RULE_indexType = 123; -SQLSelectParser.RULE_dataType = 124; -SQLSelectParser.RULE_nchar = 125; -SQLSelectParser.RULE_fieldLength = 126; -SQLSelectParser.RULE_fieldOptions = 127; -SQLSelectParser.RULE_charsetWithOptBinary = 128; -SQLSelectParser.RULE_ascii = 129; -SQLSelectParser.RULE_unicode = 130; -SQLSelectParser.RULE_wsNumCodepoints = 131; -SQLSelectParser.RULE_typeDatetimePrecision = 132; -SQLSelectParser.RULE_charsetName = 133; -SQLSelectParser.RULE_collationName = 134; -SQLSelectParser.RULE_collate = 135; -SQLSelectParser.RULE_charsetClause = 136; -SQLSelectParser.RULE_fieldsClause = 137; -SQLSelectParser.RULE_fieldTerm = 138; -SQLSelectParser.RULE_linesClause = 139; -SQLSelectParser.RULE_lineTerm = 140; -SQLSelectParser.RULE_usePartition = 141; -SQLSelectParser.RULE_columnInternalRefList = 142; -SQLSelectParser.RULE_tableAliasRefList = 143; -SQLSelectParser.RULE_pureIdentifier = 144; -SQLSelectParser.RULE_identifier = 145; -SQLSelectParser.RULE_identifierList = 146; -SQLSelectParser.RULE_identifierListWithParentheses = 147; -SQLSelectParser.RULE_qualifiedIdentifier = 148; -SQLSelectParser.RULE_dotIdentifier = 149; -SQLSelectParser.RULE_ulong_number = 150; -SQLSelectParser.RULE_real_ulong_number = 151; -SQLSelectParser.RULE_ulonglong_number = 152; -SQLSelectParser.RULE_real_ulonglong_number = 153; -SQLSelectParser.RULE_literal = 154; -SQLSelectParser.RULE_stringList = 155; -SQLSelectParser.RULE_textStringLiteral = 156; -SQLSelectParser.RULE_textString = 157; -SQLSelectParser.RULE_textLiteral = 158; -SQLSelectParser.RULE_numLiteral = 159; -SQLSelectParser.RULE_boolLiteral = 160; -SQLSelectParser.RULE_nullLiteral = 161; -SQLSelectParser.RULE_temporalLiteral = 162; -SQLSelectParser.RULE_floatOptions = 163; -SQLSelectParser.RULE_precision = 164; -SQLSelectParser.RULE_textOrIdentifier = 165; -SQLSelectParser.RULE_parentheses = 166; -SQLSelectParser.RULE_equal = 167; -SQLSelectParser.RULE_varIdentType = 168; -SQLSelectParser.RULE_identifierKeyword = 169; - -class QueryContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_query; - } - - selectStatement() { - return this.getTypedRuleContext(SelectStatementContext,0); - }; - - SEMICOLON_SYMBOL() { - return this.getToken(SQLSelectParser.SEMICOLON_SYMBOL, 0); - }; - - EOF() { - return this.getToken(SQLSelectParser.EOF, 0); - }; - - withClause() { - return this.getTypedRuleContext(WithClauseContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterQuery(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitQuery(this); - } - } - - -} - - - -class ValuesContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_values; - } - - expr = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(ExprContext); - } else { - return this.getTypedRuleContext(ExprContext,i); - } - }; - - DEFAULT_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.DEFAULT_SYMBOL); - } else { - return this.getToken(SQLSelectParser.DEFAULT_SYMBOL, i); - } - }; - - - COMMA_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.COMMA_SYMBOL); - } else { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, i); - } - }; - - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterValues(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitValues(this); - } - } - - -} - - - -class SelectStatementContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_selectStatement; - } - - queryExpression() { - return this.getTypedRuleContext(QueryExpressionContext,0); - }; - - lockingClauseList() { - return this.getTypedRuleContext(LockingClauseListContext,0); - }; - - queryExpressionParens() { - return this.getTypedRuleContext(QueryExpressionParensContext,0); - }; - - selectStatementWithInto() { - return this.getTypedRuleContext(SelectStatementWithIntoContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterSelectStatement(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitSelectStatement(this); - } - } - - -} - - - -class SelectStatementWithIntoContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_selectStatementWithInto; - } - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - selectStatementWithInto() { - return this.getTypedRuleContext(SelectStatementWithIntoContext,0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - queryExpression() { - return this.getTypedRuleContext(QueryExpressionContext,0); - }; - - intoClause() { - return this.getTypedRuleContext(IntoClauseContext,0); - }; - - lockingClauseList() { - return this.getTypedRuleContext(LockingClauseListContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterSelectStatementWithInto(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitSelectStatementWithInto(this); - } - } - - -} - - - -class QueryExpressionContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_queryExpression; - } - - queryExpressionBody() { - return this.getTypedRuleContext(QueryExpressionBodyContext,0); - }; - - queryExpressionParens() { - return this.getTypedRuleContext(QueryExpressionParensContext,0); - }; - - withClause() { - return this.getTypedRuleContext(WithClauseContext,0); - }; - - procedureAnalyseClause() { - return this.getTypedRuleContext(ProcedureAnalyseClauseContext,0); - }; - - orderClause() { - return this.getTypedRuleContext(OrderClauseContext,0); - }; - - limitClause() { - return this.getTypedRuleContext(LimitClauseContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterQueryExpression(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitQueryExpression(this); - } - } - - -} - - - -class QueryExpressionBodyContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_queryExpressionBody; - } - - queryPrimary = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(QueryPrimaryContext); - } else { - return this.getTypedRuleContext(QueryPrimaryContext,i); - } - }; - - queryExpressionParens = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(QueryExpressionParensContext); - } else { - return this.getTypedRuleContext(QueryExpressionParensContext,i); - } - }; - - UNION_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.UNION_SYMBOL); - } else { - return this.getToken(SQLSelectParser.UNION_SYMBOL, i); - } - }; - - - unionOption = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(UnionOptionContext); - } else { - return this.getTypedRuleContext(UnionOptionContext,i); - } - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterQueryExpressionBody(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitQueryExpressionBody(this); - } - } - - -} - - - -class QueryExpressionParensContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_queryExpressionParens; - } - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - queryExpressionParens() { - return this.getTypedRuleContext(QueryExpressionParensContext,0); - }; - - queryExpression() { - return this.getTypedRuleContext(QueryExpressionContext,0); - }; - - lockingClauseList() { - return this.getTypedRuleContext(LockingClauseListContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterQueryExpressionParens(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitQueryExpressionParens(this); - } - } - - -} - - - -class QueryPrimaryContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_queryPrimary; - } - - querySpecification() { - return this.getTypedRuleContext(QuerySpecificationContext,0); - }; - - tableValueConstructor() { - return this.getTypedRuleContext(TableValueConstructorContext,0); - }; - - explicitTable() { - return this.getTypedRuleContext(ExplicitTableContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterQueryPrimary(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitQueryPrimary(this); - } - } - - -} - - - -class QuerySpecificationContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_querySpecification; - } - - SELECT_SYMBOL() { - return this.getToken(SQLSelectParser.SELECT_SYMBOL, 0); - }; - - selectItemList() { - return this.getTypedRuleContext(SelectItemListContext,0); - }; - - selectOption = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(SelectOptionContext); - } else { - return this.getTypedRuleContext(SelectOptionContext,i); - } - }; - - intoClause() { - return this.getTypedRuleContext(IntoClauseContext,0); - }; - - fromClause() { - return this.getTypedRuleContext(FromClauseContext,0); - }; - - whereClause() { - return this.getTypedRuleContext(WhereClauseContext,0); - }; - - groupByClause() { - return this.getTypedRuleContext(GroupByClauseContext,0); - }; - - havingClause() { - return this.getTypedRuleContext(HavingClauseContext,0); - }; - - windowClause() { - return this.getTypedRuleContext(WindowClauseContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterQuerySpecification(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitQuerySpecification(this); - } - } - - -} - - - -class SubqueryContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_subquery; - } - - query() { - return this.getTypedRuleContext(QueryContext,0); - }; - - queryExpressionParens() { - return this.getTypedRuleContext(QueryExpressionParensContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterSubquery(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitSubquery(this); - } - } - - -} - - - -class QuerySpecOptionContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_querySpecOption; - } - - ALL_SYMBOL() { - return this.getToken(SQLSelectParser.ALL_SYMBOL, 0); - }; - - DISTINCT_SYMBOL() { - return this.getToken(SQLSelectParser.DISTINCT_SYMBOL, 0); - }; - - STRAIGHT_JOIN_SYMBOL() { - return this.getToken(SQLSelectParser.STRAIGHT_JOIN_SYMBOL, 0); - }; - - HIGH_PRIORITY_SYMBOL() { - return this.getToken(SQLSelectParser.HIGH_PRIORITY_SYMBOL, 0); - }; - - SQL_SMALL_RESULT_SYMBOL() { - return this.getToken(SQLSelectParser.SQL_SMALL_RESULT_SYMBOL, 0); - }; - - SQL_BIG_RESULT_SYMBOL() { - return this.getToken(SQLSelectParser.SQL_BIG_RESULT_SYMBOL, 0); - }; - - SQL_BUFFER_RESULT_SYMBOL() { - return this.getToken(SQLSelectParser.SQL_BUFFER_RESULT_SYMBOL, 0); - }; - - SQL_CALC_FOUND_ROWS_SYMBOL() { - return this.getToken(SQLSelectParser.SQL_CALC_FOUND_ROWS_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterQuerySpecOption(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitQuerySpecOption(this); - } - } - - -} - - - -class LimitClauseContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_limitClause; - } - - LIMIT_SYMBOL() { - return this.getToken(SQLSelectParser.LIMIT_SYMBOL, 0); - }; - - limitOptions() { - return this.getTypedRuleContext(LimitOptionsContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterLimitClause(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitLimitClause(this); - } - } - - -} - - - -class LimitOptionsContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_limitOptions; - } - - limitOption = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(LimitOptionContext); - } else { - return this.getTypedRuleContext(LimitOptionContext,i); - } - }; - - COMMA_SYMBOL() { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, 0); - }; - - OFFSET_SYMBOL() { - return this.getToken(SQLSelectParser.OFFSET_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterLimitOptions(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitLimitOptions(this); - } - } - - -} - - - -class LimitOptionContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_limitOption; - } - - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); - }; - - PARAM_MARKER() { - return this.getToken(SQLSelectParser.PARAM_MARKER, 0); - }; - - INT_NUMBER() { - return this.getToken(SQLSelectParser.INT_NUMBER, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterLimitOption(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitLimitOption(this); - } - } - - -} - - - -class IntoClauseContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_intoClause; - } - - INTO_SYMBOL() { - return this.getToken(SQLSelectParser.INTO_SYMBOL, 0); - }; - - OUTFILE_SYMBOL() { - return this.getToken(SQLSelectParser.OUTFILE_SYMBOL, 0); - }; - - textStringLiteral() { - return this.getTypedRuleContext(TextStringLiteralContext,0); - }; - - DUMPFILE_SYMBOL() { - return this.getToken(SQLSelectParser.DUMPFILE_SYMBOL, 0); - }; - - textOrIdentifier = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(TextOrIdentifierContext); - } else { - return this.getTypedRuleContext(TextOrIdentifierContext,i); - } - }; - - userVariable = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(UserVariableContext); - } else { - return this.getTypedRuleContext(UserVariableContext,i); - } - }; - - charsetClause() { - return this.getTypedRuleContext(CharsetClauseContext,0); - }; - - fieldsClause() { - return this.getTypedRuleContext(FieldsClauseContext,0); - }; - - linesClause() { - return this.getTypedRuleContext(LinesClauseContext,0); - }; - - COMMA_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.COMMA_SYMBOL); - } else { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, i); - } - }; - - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterIntoClause(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitIntoClause(this); - } - } - - -} - - - -class ProcedureAnalyseClauseContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_procedureAnalyseClause; - } - - PROCEDURE_SYMBOL() { - return this.getToken(SQLSelectParser.PROCEDURE_SYMBOL, 0); - }; - - ANALYSE_SYMBOL() { - return this.getToken(SQLSelectParser.ANALYSE_SYMBOL, 0); - }; - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - INT_NUMBER = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.INT_NUMBER); - } else { - return this.getToken(SQLSelectParser.INT_NUMBER, i); - } - }; - - - COMMA_SYMBOL() { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterProcedureAnalyseClause(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitProcedureAnalyseClause(this); - } - } - - -} - - - -class HavingClauseContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_havingClause; - } - - HAVING_SYMBOL() { - return this.getToken(SQLSelectParser.HAVING_SYMBOL, 0); - }; - - expr() { - return this.getTypedRuleContext(ExprContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterHavingClause(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitHavingClause(this); - } - } - - -} - - - -class WindowClauseContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_windowClause; - } - - WINDOW_SYMBOL() { - return this.getToken(SQLSelectParser.WINDOW_SYMBOL, 0); - }; - - windowDefinition = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(WindowDefinitionContext); - } else { - return this.getTypedRuleContext(WindowDefinitionContext,i); - } - }; - - COMMA_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.COMMA_SYMBOL); - } else { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, i); - } - }; - - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterWindowClause(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitWindowClause(this); - } - } - - -} - - - -class WindowDefinitionContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_windowDefinition; - } - - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); - }; - - AS_SYMBOL() { - return this.getToken(SQLSelectParser.AS_SYMBOL, 0); - }; - - windowSpec() { - return this.getTypedRuleContext(WindowSpecContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterWindowDefinition(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitWindowDefinition(this); - } - } - - -} - - - -class WindowSpecContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_windowSpec; - } - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - windowSpecDetails() { - return this.getTypedRuleContext(WindowSpecDetailsContext,0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterWindowSpec(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitWindowSpec(this); - } - } - - -} - - - -class WindowSpecDetailsContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_windowSpecDetails; - } - - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); - }; - - PARTITION_SYMBOL() { - return this.getToken(SQLSelectParser.PARTITION_SYMBOL, 0); - }; - - BY_SYMBOL() { - return this.getToken(SQLSelectParser.BY_SYMBOL, 0); - }; - - orderList() { - return this.getTypedRuleContext(OrderListContext,0); - }; - - orderClause() { - return this.getTypedRuleContext(OrderClauseContext,0); - }; - - windowFrameClause() { - return this.getTypedRuleContext(WindowFrameClauseContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterWindowSpecDetails(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitWindowSpecDetails(this); - } - } - - -} - - - -class WindowFrameClauseContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_windowFrameClause; - } - - windowFrameUnits() { - return this.getTypedRuleContext(WindowFrameUnitsContext,0); - }; - - windowFrameExtent() { - return this.getTypedRuleContext(WindowFrameExtentContext,0); - }; - - windowFrameExclusion() { - return this.getTypedRuleContext(WindowFrameExclusionContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterWindowFrameClause(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitWindowFrameClause(this); - } - } - - -} - - - -class WindowFrameUnitsContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_windowFrameUnits; - } - - ROWS_SYMBOL() { - return this.getToken(SQLSelectParser.ROWS_SYMBOL, 0); - }; - - RANGE_SYMBOL() { - return this.getToken(SQLSelectParser.RANGE_SYMBOL, 0); - }; - - GROUPS_SYMBOL() { - return this.getToken(SQLSelectParser.GROUPS_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterWindowFrameUnits(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitWindowFrameUnits(this); - } - } - - -} - - - -class WindowFrameExtentContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_windowFrameExtent; - } - - windowFrameStart() { - return this.getTypedRuleContext(WindowFrameStartContext,0); - }; - - windowFrameBetween() { - return this.getTypedRuleContext(WindowFrameBetweenContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterWindowFrameExtent(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitWindowFrameExtent(this); - } - } - - -} - - - -class WindowFrameStartContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_windowFrameStart; - } - - UNBOUNDED_SYMBOL() { - return this.getToken(SQLSelectParser.UNBOUNDED_SYMBOL, 0); - }; - - PRECEDING_SYMBOL() { - return this.getToken(SQLSelectParser.PRECEDING_SYMBOL, 0); - }; - - ulonglong_number() { - return this.getTypedRuleContext(Ulonglong_numberContext,0); - }; - - PARAM_MARKER() { - return this.getToken(SQLSelectParser.PARAM_MARKER, 0); - }; - - INTERVAL_SYMBOL() { - return this.getToken(SQLSelectParser.INTERVAL_SYMBOL, 0); - }; - - expr() { - return this.getTypedRuleContext(ExprContext,0); - }; - - interval() { - return this.getTypedRuleContext(IntervalContext,0); - }; - - CURRENT_SYMBOL() { - return this.getToken(SQLSelectParser.CURRENT_SYMBOL, 0); - }; - - ROW_SYMBOL() { - return this.getToken(SQLSelectParser.ROW_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterWindowFrameStart(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitWindowFrameStart(this); - } - } - - -} - - - -class WindowFrameBetweenContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_windowFrameBetween; - } - - BETWEEN_SYMBOL() { - return this.getToken(SQLSelectParser.BETWEEN_SYMBOL, 0); - }; - - windowFrameBound = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(WindowFrameBoundContext); - } else { - return this.getTypedRuleContext(WindowFrameBoundContext,i); - } - }; - - AND_SYMBOL() { - return this.getToken(SQLSelectParser.AND_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterWindowFrameBetween(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitWindowFrameBetween(this); - } - } - - -} - - - -class WindowFrameBoundContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_windowFrameBound; - } - - windowFrameStart() { - return this.getTypedRuleContext(WindowFrameStartContext,0); - }; - - UNBOUNDED_SYMBOL() { - return this.getToken(SQLSelectParser.UNBOUNDED_SYMBOL, 0); - }; - - FOLLOWING_SYMBOL() { - return this.getToken(SQLSelectParser.FOLLOWING_SYMBOL, 0); - }; - - ulonglong_number() { - return this.getTypedRuleContext(Ulonglong_numberContext,0); - }; - - PARAM_MARKER() { - return this.getToken(SQLSelectParser.PARAM_MARKER, 0); - }; - - INTERVAL_SYMBOL() { - return this.getToken(SQLSelectParser.INTERVAL_SYMBOL, 0); - }; - - expr() { - return this.getTypedRuleContext(ExprContext,0); - }; - - interval() { - return this.getTypedRuleContext(IntervalContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterWindowFrameBound(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitWindowFrameBound(this); - } - } - - -} - - - -class WindowFrameExclusionContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_windowFrameExclusion; - } - - EXCLUDE_SYMBOL() { - return this.getToken(SQLSelectParser.EXCLUDE_SYMBOL, 0); - }; - - CURRENT_SYMBOL() { - return this.getToken(SQLSelectParser.CURRENT_SYMBOL, 0); - }; - - ROW_SYMBOL() { - return this.getToken(SQLSelectParser.ROW_SYMBOL, 0); - }; - - GROUP_SYMBOL() { - return this.getToken(SQLSelectParser.GROUP_SYMBOL, 0); - }; - - TIES_SYMBOL() { - return this.getToken(SQLSelectParser.TIES_SYMBOL, 0); - }; - - NO_SYMBOL() { - return this.getToken(SQLSelectParser.NO_SYMBOL, 0); - }; - - OTHERS_SYMBOL() { - return this.getToken(SQLSelectParser.OTHERS_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterWindowFrameExclusion(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitWindowFrameExclusion(this); - } - } - - -} - - - -class WithClauseContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_withClause; - } - - WITH_SYMBOL() { - return this.getToken(SQLSelectParser.WITH_SYMBOL, 0); - }; - - commonTableExpression = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(CommonTableExpressionContext); - } else { - return this.getTypedRuleContext(CommonTableExpressionContext,i); - } - }; - - RECURSIVE_SYMBOL() { - return this.getToken(SQLSelectParser.RECURSIVE_SYMBOL, 0); - }; - - COMMA_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.COMMA_SYMBOL); - } else { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, i); - } - }; - - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterWithClause(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitWithClause(this); - } - } - - -} - - - -class CommonTableExpressionContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_commonTableExpression; - } - - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); - }; - - AS_SYMBOL() { - return this.getToken(SQLSelectParser.AS_SYMBOL, 0); - }; - - subquery() { - return this.getTypedRuleContext(SubqueryContext,0); - }; - - columnInternalRefList() { - return this.getTypedRuleContext(ColumnInternalRefListContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterCommonTableExpression(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitCommonTableExpression(this); - } - } - - -} - - - -class GroupByClauseContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_groupByClause; - } - - GROUP_SYMBOL() { - return this.getToken(SQLSelectParser.GROUP_SYMBOL, 0); - }; - - BY_SYMBOL() { - return this.getToken(SQLSelectParser.BY_SYMBOL, 0); - }; - - orderList() { - return this.getTypedRuleContext(OrderListContext,0); - }; - - olapOption() { - return this.getTypedRuleContext(OlapOptionContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterGroupByClause(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitGroupByClause(this); - } - } - - -} - - - -class OlapOptionContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_olapOption; - } - - WITH_SYMBOL() { - return this.getToken(SQLSelectParser.WITH_SYMBOL, 0); - }; - - ROLLUP_SYMBOL() { - return this.getToken(SQLSelectParser.ROLLUP_SYMBOL, 0); - }; - - CUBE_SYMBOL() { - return this.getToken(SQLSelectParser.CUBE_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterOlapOption(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitOlapOption(this); - } - } - - -} - - - -class OrderClauseContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_orderClause; - } - - ORDER_SYMBOL() { - return this.getToken(SQLSelectParser.ORDER_SYMBOL, 0); - }; - - BY_SYMBOL() { - return this.getToken(SQLSelectParser.BY_SYMBOL, 0); - }; - - orderList() { - return this.getTypedRuleContext(OrderListContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterOrderClause(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitOrderClause(this); - } - } - - -} - - - -class DirectionContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_direction; - } - - ASC_SYMBOL() { - return this.getToken(SQLSelectParser.ASC_SYMBOL, 0); - }; - - DESC_SYMBOL() { - return this.getToken(SQLSelectParser.DESC_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterDirection(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitDirection(this); - } - } - - -} - - - -class FromClauseContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_fromClause; - } - - FROM_SYMBOL() { - return this.getToken(SQLSelectParser.FROM_SYMBOL, 0); - }; - - DUAL_SYMBOL() { - return this.getToken(SQLSelectParser.DUAL_SYMBOL, 0); - }; - - tableReferenceList() { - return this.getTypedRuleContext(TableReferenceListContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterFromClause(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitFromClause(this); - } - } - - -} - - - -class TableReferenceListContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_tableReferenceList; - } - - tableReference = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(TableReferenceContext); - } else { - return this.getTypedRuleContext(TableReferenceContext,i); - } - }; - - COMMA_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.COMMA_SYMBOL); - } else { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, i); - } - }; - - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterTableReferenceList(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitTableReferenceList(this); - } - } - - -} - - - -class TableValueConstructorContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_tableValueConstructor; - } - - VALUES_SYMBOL() { - return this.getToken(SQLSelectParser.VALUES_SYMBOL, 0); - }; - - rowValueExplicit = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(RowValueExplicitContext); - } else { - return this.getTypedRuleContext(RowValueExplicitContext,i); - } - }; - - COMMA_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.COMMA_SYMBOL); - } else { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, i); - } - }; - - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterTableValueConstructor(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitTableValueConstructor(this); - } - } - - -} - - - -class ExplicitTableContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_explicitTable; - } - - TABLE_SYMBOL() { - return this.getToken(SQLSelectParser.TABLE_SYMBOL, 0); - }; - - qualifiedIdentifier() { - return this.getTypedRuleContext(QualifiedIdentifierContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterExplicitTable(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitExplicitTable(this); - } - } - - -} - - - -class RowValueExplicitContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_rowValueExplicit; - } - - ROW_SYMBOL() { - return this.getToken(SQLSelectParser.ROW_SYMBOL, 0); - }; - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - values() { - return this.getTypedRuleContext(ValuesContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterRowValueExplicit(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitRowValueExplicit(this); - } - } - - -} - - - -class SelectOptionContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_selectOption; - } - - querySpecOption() { - return this.getTypedRuleContext(QuerySpecOptionContext,0); - }; - - SQL_NO_CACHE_SYMBOL() { - return this.getToken(SQLSelectParser.SQL_NO_CACHE_SYMBOL, 0); - }; - - SQL_CACHE_SYMBOL() { - return this.getToken(SQLSelectParser.SQL_CACHE_SYMBOL, 0); - }; - - MAX_STATEMENT_TIME_SYMBOL() { - return this.getToken(SQLSelectParser.MAX_STATEMENT_TIME_SYMBOL, 0); - }; - - EQUAL_OPERATOR() { - return this.getToken(SQLSelectParser.EQUAL_OPERATOR, 0); - }; - - real_ulong_number() { - return this.getTypedRuleContext(Real_ulong_numberContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterSelectOption(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitSelectOption(this); - } - } - - -} - - - -class LockingClauseListContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_lockingClauseList; - } - - lockingClause = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(LockingClauseContext); - } else { - return this.getTypedRuleContext(LockingClauseContext,i); - } - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterLockingClauseList(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitLockingClauseList(this); - } - } - - -} - - - -class LockingClauseContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_lockingClause; - } - - FOR_SYMBOL() { - return this.getToken(SQLSelectParser.FOR_SYMBOL, 0); - }; - - lockStrengh() { - return this.getTypedRuleContext(LockStrenghContext,0); - }; - - OF_SYMBOL() { - return this.getToken(SQLSelectParser.OF_SYMBOL, 0); - }; - - tableAliasRefList() { - return this.getTypedRuleContext(TableAliasRefListContext,0); - }; - - lockedRowAction() { - return this.getTypedRuleContext(LockedRowActionContext,0); - }; - - LOCK_SYMBOL() { - return this.getToken(SQLSelectParser.LOCK_SYMBOL, 0); - }; - - IN_SYMBOL() { - return this.getToken(SQLSelectParser.IN_SYMBOL, 0); - }; - - SHARE_SYMBOL() { - return this.getToken(SQLSelectParser.SHARE_SYMBOL, 0); - }; - - MODE_SYMBOL() { - return this.getToken(SQLSelectParser.MODE_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterLockingClause(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitLockingClause(this); - } - } - - -} - - - -class LockStrenghContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_lockStrengh; - } - - UPDATE_SYMBOL() { - return this.getToken(SQLSelectParser.UPDATE_SYMBOL, 0); - }; - - SHARE_SYMBOL() { - return this.getToken(SQLSelectParser.SHARE_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterLockStrengh(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitLockStrengh(this); - } - } - - -} - - - -class LockedRowActionContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_lockedRowAction; - } - - SKIP_SYMBOL() { - return this.getToken(SQLSelectParser.SKIP_SYMBOL, 0); - }; - - LOCKED_SYMBOL() { - return this.getToken(SQLSelectParser.LOCKED_SYMBOL, 0); - }; - - NOWAIT_SYMBOL() { - return this.getToken(SQLSelectParser.NOWAIT_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterLockedRowAction(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitLockedRowAction(this); - } - } - - -} - - - -class SelectItemListContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_selectItemList; - } - - selectItem = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(SelectItemContext); - } else { - return this.getTypedRuleContext(SelectItemContext,i); - } - }; - - MULT_OPERATOR() { - return this.getToken(SQLSelectParser.MULT_OPERATOR, 0); - }; - - COMMA_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.COMMA_SYMBOL); - } else { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, i); - } - }; - - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterSelectItemList(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitSelectItemList(this); - } - } - - -} - - - -class SelectItemContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_selectItem; - } - - qualifiedIdentifier() { - return this.getTypedRuleContext(QualifiedIdentifierContext,0); - }; - - selectAlias() { - return this.getTypedRuleContext(SelectAliasContext,0); - }; - - expr() { - return this.getTypedRuleContext(ExprContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterSelectItem(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitSelectItem(this); - } - } - - -} - - - -class SelectAliasContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_selectAlias; - } - - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); - }; - - textStringLiteral() { - return this.getTypedRuleContext(TextStringLiteralContext,0); - }; - - AS_SYMBOL() { - return this.getToken(SQLSelectParser.AS_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterSelectAlias(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitSelectAlias(this); - } - } - - -} - - - -class WhereClauseContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_whereClause; - } - - WHERE_SYMBOL() { - return this.getToken(SQLSelectParser.WHERE_SYMBOL, 0); - }; - - expr() { - return this.getTypedRuleContext(ExprContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterWhereClause(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitWhereClause(this); - } - } - - -} - - - -class TableReferenceContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_tableReference; - } - - tableFactor() { - return this.getTypedRuleContext(TableFactorContext,0); - }; - - OPEN_CURLY_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_CURLY_SYMBOL, 0); - }; - - escapedTableReference() { - return this.getTypedRuleContext(EscapedTableReferenceContext,0); - }; - - CLOSE_CURLY_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_CURLY_SYMBOL, 0); - }; - - joinedTable = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(JoinedTableContext); - } else { - return this.getTypedRuleContext(JoinedTableContext,i); - } - }; - - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); - }; - - OJ_SYMBOL() { - return this.getToken(SQLSelectParser.OJ_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterTableReference(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitTableReference(this); - } - } - - -} - - - -class EscapedTableReferenceContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_escapedTableReference; - } - - tableFactor() { - return this.getTypedRuleContext(TableFactorContext,0); - }; - - joinedTable = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(JoinedTableContext); - } else { - return this.getTypedRuleContext(JoinedTableContext,i); - } - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterEscapedTableReference(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitEscapedTableReference(this); - } - } - - -} - - - -class JoinedTableContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_joinedTable; - } - - innerJoinType() { - return this.getTypedRuleContext(InnerJoinTypeContext,0); - }; - - tableReference() { - return this.getTypedRuleContext(TableReferenceContext,0); - }; - - ON_SYMBOL() { - return this.getToken(SQLSelectParser.ON_SYMBOL, 0); - }; - - expr() { - return this.getTypedRuleContext(ExprContext,0); - }; - - USING_SYMBOL() { - return this.getToken(SQLSelectParser.USING_SYMBOL, 0); - }; - - identifierListWithParentheses() { - return this.getTypedRuleContext(IdentifierListWithParenthesesContext,0); - }; - - outerJoinType() { - return this.getTypedRuleContext(OuterJoinTypeContext,0); - }; - - naturalJoinType() { - return this.getTypedRuleContext(NaturalJoinTypeContext,0); - }; - - tableFactor() { - return this.getTypedRuleContext(TableFactorContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterJoinedTable(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitJoinedTable(this); - } - } - - -} - - - -class NaturalJoinTypeContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_naturalJoinType; - } - - NATURAL_SYMBOL() { - return this.getToken(SQLSelectParser.NATURAL_SYMBOL, 0); - }; - - JOIN_SYMBOL() { - return this.getToken(SQLSelectParser.JOIN_SYMBOL, 0); - }; - - INNER_SYMBOL() { - return this.getToken(SQLSelectParser.INNER_SYMBOL, 0); - }; - - LEFT_SYMBOL() { - return this.getToken(SQLSelectParser.LEFT_SYMBOL, 0); - }; - - RIGHT_SYMBOL() { - return this.getToken(SQLSelectParser.RIGHT_SYMBOL, 0); - }; - - OUTER_SYMBOL() { - return this.getToken(SQLSelectParser.OUTER_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterNaturalJoinType(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitNaturalJoinType(this); - } - } - - -} - - - -class InnerJoinTypeContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_innerJoinType; - } - - JOIN_SYMBOL() { - return this.getToken(SQLSelectParser.JOIN_SYMBOL, 0); - }; - - INNER_SYMBOL() { - return this.getToken(SQLSelectParser.INNER_SYMBOL, 0); - }; - - CROSS_SYMBOL() { - return this.getToken(SQLSelectParser.CROSS_SYMBOL, 0); - }; - - STRAIGHT_JOIN_SYMBOL() { - return this.getToken(SQLSelectParser.STRAIGHT_JOIN_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterInnerJoinType(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitInnerJoinType(this); - } - } - - -} - - - -class OuterJoinTypeContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_outerJoinType; - } - - JOIN_SYMBOL() { - return this.getToken(SQLSelectParser.JOIN_SYMBOL, 0); - }; - - LEFT_SYMBOL() { - return this.getToken(SQLSelectParser.LEFT_SYMBOL, 0); - }; - - RIGHT_SYMBOL() { - return this.getToken(SQLSelectParser.RIGHT_SYMBOL, 0); - }; - - OUTER_SYMBOL() { - return this.getToken(SQLSelectParser.OUTER_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterOuterJoinType(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitOuterJoinType(this); - } - } - - -} - - - -class TableFactorContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_tableFactor; - } - - singleTable() { - return this.getTypedRuleContext(SingleTableContext,0); - }; - - singleTableParens() { - return this.getTypedRuleContext(SingleTableParensContext,0); - }; - - derivedTable() { - return this.getTypedRuleContext(DerivedTableContext,0); - }; - - tableReferenceListParens() { - return this.getTypedRuleContext(TableReferenceListParensContext,0); - }; - - tableFunction() { - return this.getTypedRuleContext(TableFunctionContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterTableFactor(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitTableFactor(this); - } - } - - -} - - - -class SingleTableContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_singleTable; - } - - qualifiedIdentifier() { - return this.getTypedRuleContext(QualifiedIdentifierContext,0); - }; - - usePartition() { - return this.getTypedRuleContext(UsePartitionContext,0); - }; - - tableAlias() { - return this.getTypedRuleContext(TableAliasContext,0); - }; - - indexHintList() { - return this.getTypedRuleContext(IndexHintListContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterSingleTable(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitSingleTable(this); - } - } - - -} - - - -class SingleTableParensContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_singleTableParens; - } - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - singleTable() { - return this.getTypedRuleContext(SingleTableContext,0); - }; - - singleTableParens() { - return this.getTypedRuleContext(SingleTableParensContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterSingleTableParens(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitSingleTableParens(this); - } - } - - -} - - - -class DerivedTableContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_derivedTable; - } - - subquery() { - return this.getTypedRuleContext(SubqueryContext,0); - }; - - tableAlias() { - return this.getTypedRuleContext(TableAliasContext,0); - }; - - columnInternalRefList() { - return this.getTypedRuleContext(ColumnInternalRefListContext,0); - }; - - LATERAL_SYMBOL() { - return this.getToken(SQLSelectParser.LATERAL_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterDerivedTable(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitDerivedTable(this); - } - } - - -} - - - -class TableReferenceListParensContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_tableReferenceListParens; - } - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - tableReferenceList() { - return this.getTypedRuleContext(TableReferenceListContext,0); - }; - - tableReferenceListParens() { - return this.getTypedRuleContext(TableReferenceListParensContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterTableReferenceListParens(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitTableReferenceListParens(this); - } - } - - -} - - - -class TableFunctionContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_tableFunction; - } - - JSON_TABLE_SYMBOL() { - return this.getToken(SQLSelectParser.JSON_TABLE_SYMBOL, 0); - }; - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - expr() { - return this.getTypedRuleContext(ExprContext,0); - }; - - COMMA_SYMBOL() { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, 0); - }; - - textStringLiteral() { - return this.getTypedRuleContext(TextStringLiteralContext,0); - }; - - columnsClause() { - return this.getTypedRuleContext(ColumnsClauseContext,0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - tableAlias() { - return this.getTypedRuleContext(TableAliasContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterTableFunction(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitTableFunction(this); - } - } - - -} - - - -class ColumnsClauseContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_columnsClause; - } - - COLUMNS_SYMBOL() { - return this.getToken(SQLSelectParser.COLUMNS_SYMBOL, 0); - }; - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - jtColumn = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(JtColumnContext); - } else { - return this.getTypedRuleContext(JtColumnContext,i); - } - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - COMMA_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.COMMA_SYMBOL); - } else { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, i); - } - }; - - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterColumnsClause(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitColumnsClause(this); - } - } - - -} - - - -class JtColumnContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_jtColumn; - } - - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); - }; - - FOR_SYMBOL() { - return this.getToken(SQLSelectParser.FOR_SYMBOL, 0); - }; - - ORDINALITY_SYMBOL() { - return this.getToken(SQLSelectParser.ORDINALITY_SYMBOL, 0); - }; - - dataType() { - return this.getTypedRuleContext(DataTypeContext,0); - }; - - PATH_SYMBOL() { - return this.getToken(SQLSelectParser.PATH_SYMBOL, 0); - }; - - textStringLiteral() { - return this.getTypedRuleContext(TextStringLiteralContext,0); - }; - - collate() { - return this.getTypedRuleContext(CollateContext,0); - }; - - EXISTS_SYMBOL() { - return this.getToken(SQLSelectParser.EXISTS_SYMBOL, 0); - }; - - onEmptyOrError() { - return this.getTypedRuleContext(OnEmptyOrErrorContext,0); - }; - - NESTED_SYMBOL() { - return this.getToken(SQLSelectParser.NESTED_SYMBOL, 0); - }; - - columnsClause() { - return this.getTypedRuleContext(ColumnsClauseContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterJtColumn(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitJtColumn(this); - } - } - - -} - - - -class OnEmptyOrErrorContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_onEmptyOrError; - } - - onEmpty() { - return this.getTypedRuleContext(OnEmptyContext,0); - }; - - onError() { - return this.getTypedRuleContext(OnErrorContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterOnEmptyOrError(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitOnEmptyOrError(this); - } - } - - -} - - - -class OnEmptyContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_onEmpty; - } - - jtOnResponse() { - return this.getTypedRuleContext(JtOnResponseContext,0); - }; - - ON_SYMBOL() { - return this.getToken(SQLSelectParser.ON_SYMBOL, 0); - }; - - EMPTY_SYMBOL() { - return this.getToken(SQLSelectParser.EMPTY_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterOnEmpty(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitOnEmpty(this); - } - } - - -} - - - -class OnErrorContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_onError; - } - - jtOnResponse() { - return this.getTypedRuleContext(JtOnResponseContext,0); - }; - - ON_SYMBOL() { - return this.getToken(SQLSelectParser.ON_SYMBOL, 0); - }; - - ERROR_SYMBOL() { - return this.getToken(SQLSelectParser.ERROR_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterOnError(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitOnError(this); - } - } - - -} - - - -class JtOnResponseContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_jtOnResponse; - } - - ERROR_SYMBOL() { - return this.getToken(SQLSelectParser.ERROR_SYMBOL, 0); - }; - - NULL_SYMBOL() { - return this.getToken(SQLSelectParser.NULL_SYMBOL, 0); - }; - - DEFAULT_SYMBOL() { - return this.getToken(SQLSelectParser.DEFAULT_SYMBOL, 0); - }; - - textStringLiteral() { - return this.getTypedRuleContext(TextStringLiteralContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterJtOnResponse(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitJtOnResponse(this); - } - } - - -} - - - -class UnionOptionContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_unionOption; - } - - DISTINCT_SYMBOL() { - return this.getToken(SQLSelectParser.DISTINCT_SYMBOL, 0); - }; - - ALL_SYMBOL() { - return this.getToken(SQLSelectParser.ALL_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterUnionOption(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitUnionOption(this); - } - } - - -} - - - -class TableAliasContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_tableAlias; - } - - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); - }; - - AS_SYMBOL() { - return this.getToken(SQLSelectParser.AS_SYMBOL, 0); - }; - - EQUAL_OPERATOR() { - return this.getToken(SQLSelectParser.EQUAL_OPERATOR, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterTableAlias(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitTableAlias(this); - } - } - - -} - - - -class IndexHintListContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_indexHintList; - } - - indexHint = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(IndexHintContext); - } else { - return this.getTypedRuleContext(IndexHintContext,i); - } - }; - - COMMA_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.COMMA_SYMBOL); - } else { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, i); - } - }; - - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterIndexHintList(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitIndexHintList(this); - } - } - - -} - - - -class IndexHintContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_indexHint; - } - - indexHintType() { - return this.getTypedRuleContext(IndexHintTypeContext,0); - }; - - keyOrIndex() { - return this.getTypedRuleContext(KeyOrIndexContext,0); - }; - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - indexList() { - return this.getTypedRuleContext(IndexListContext,0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - indexHintClause() { - return this.getTypedRuleContext(IndexHintClauseContext,0); - }; - - USE_SYMBOL() { - return this.getToken(SQLSelectParser.USE_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterIndexHint(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitIndexHint(this); - } - } - - -} - - - -class IndexHintTypeContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_indexHintType; - } - - FORCE_SYMBOL() { - return this.getToken(SQLSelectParser.FORCE_SYMBOL, 0); - }; - - IGNORE_SYMBOL() { - return this.getToken(SQLSelectParser.IGNORE_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterIndexHintType(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitIndexHintType(this); - } - } - - -} - - - -class KeyOrIndexContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_keyOrIndex; - } - - KEY_SYMBOL() { - return this.getToken(SQLSelectParser.KEY_SYMBOL, 0); - }; - - INDEX_SYMBOL() { - return this.getToken(SQLSelectParser.INDEX_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterKeyOrIndex(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitKeyOrIndex(this); - } - } - - -} - - - -class IndexHintClauseContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_indexHintClause; - } - - FOR_SYMBOL() { - return this.getToken(SQLSelectParser.FOR_SYMBOL, 0); - }; - - JOIN_SYMBOL() { - return this.getToken(SQLSelectParser.JOIN_SYMBOL, 0); - }; - - ORDER_SYMBOL() { - return this.getToken(SQLSelectParser.ORDER_SYMBOL, 0); - }; - - BY_SYMBOL() { - return this.getToken(SQLSelectParser.BY_SYMBOL, 0); - }; - - GROUP_SYMBOL() { - return this.getToken(SQLSelectParser.GROUP_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterIndexHintClause(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitIndexHintClause(this); - } - } - - -} - - - -class IndexListContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_indexList; - } - - indexListElement = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(IndexListElementContext); - } else { - return this.getTypedRuleContext(IndexListElementContext,i); - } - }; - - COMMA_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.COMMA_SYMBOL); - } else { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, i); - } - }; - - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterIndexList(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitIndexList(this); - } - } - - -} - - - -class IndexListElementContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_indexListElement; - } - - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); - }; - - PRIMARY_SYMBOL() { - return this.getToken(SQLSelectParser.PRIMARY_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterIndexListElement(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitIndexListElement(this); - } - } - - -} - - - -class ExprContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_expr; - } - - boolPri() { - return this.getTypedRuleContext(BoolPriContext,0); - }; - - IS_SYMBOL() { - return this.getToken(SQLSelectParser.IS_SYMBOL, 0); - }; - - TRUE_SYMBOL() { - return this.getToken(SQLSelectParser.TRUE_SYMBOL, 0); - }; - - FALSE_SYMBOL() { - return this.getToken(SQLSelectParser.FALSE_SYMBOL, 0); - }; - - UNKNOWN_SYMBOL() { - return this.getToken(SQLSelectParser.UNKNOWN_SYMBOL, 0); - }; - - notRule() { - return this.getTypedRuleContext(NotRuleContext,0); - }; - - NOT_SYMBOL() { - return this.getToken(SQLSelectParser.NOT_SYMBOL, 0); - }; - - expr = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(ExprContext); - } else { - return this.getTypedRuleContext(ExprContext,i); - } - }; - - AND_SYMBOL() { - return this.getToken(SQLSelectParser.AND_SYMBOL, 0); - }; - - LOGICAL_AND_OPERATOR() { - return this.getToken(SQLSelectParser.LOGICAL_AND_OPERATOR, 0); - }; - - XOR_SYMBOL() { - return this.getToken(SQLSelectParser.XOR_SYMBOL, 0); - }; - - OR_SYMBOL() { - return this.getToken(SQLSelectParser.OR_SYMBOL, 0); - }; - - LOGICAL_OR_OPERATOR() { - return this.getToken(SQLSelectParser.LOGICAL_OR_OPERATOR, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterExpr(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitExpr(this); - } - } - - -} - - - -class BoolPriContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_boolPri; - } - - predicate() { - return this.getTypedRuleContext(PredicateContext,0); - }; - - boolPri() { - return this.getTypedRuleContext(BoolPriContext,0); - }; - - IS_SYMBOL() { - return this.getToken(SQLSelectParser.IS_SYMBOL, 0); - }; - - NULL_SYMBOL() { - return this.getToken(SQLSelectParser.NULL_SYMBOL, 0); - }; - - notRule() { - return this.getTypedRuleContext(NotRuleContext,0); - }; - - compOp() { - return this.getTypedRuleContext(CompOpContext,0); - }; - - subquery() { - return this.getTypedRuleContext(SubqueryContext,0); - }; - - ALL_SYMBOL() { - return this.getToken(SQLSelectParser.ALL_SYMBOL, 0); - }; - - ANY_SYMBOL() { - return this.getToken(SQLSelectParser.ANY_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterBoolPri(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitBoolPri(this); - } - } - - -} - - - -class CompOpContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_compOp; - } - - EQUAL_OPERATOR() { - return this.getToken(SQLSelectParser.EQUAL_OPERATOR, 0); - }; - - NULL_SAFE_EQUAL_OPERATOR() { - return this.getToken(SQLSelectParser.NULL_SAFE_EQUAL_OPERATOR, 0); - }; - - GREATER_OR_EQUAL_OPERATOR() { - return this.getToken(SQLSelectParser.GREATER_OR_EQUAL_OPERATOR, 0); - }; - - GREATER_THAN_OPERATOR() { - return this.getToken(SQLSelectParser.GREATER_THAN_OPERATOR, 0); - }; - - LESS_OR_EQUAL_OPERATOR() { - return this.getToken(SQLSelectParser.LESS_OR_EQUAL_OPERATOR, 0); - }; - - LESS_THAN_OPERATOR() { - return this.getToken(SQLSelectParser.LESS_THAN_OPERATOR, 0); - }; - - NOT_EQUAL_OPERATOR() { - return this.getToken(SQLSelectParser.NOT_EQUAL_OPERATOR, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterCompOp(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitCompOp(this); - } - } - - -} - - - -class PredicateContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_predicate; - } - - bitExpr = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(BitExprContext); - } else { - return this.getTypedRuleContext(BitExprContext,i); - } - }; - - predicateOperations() { - return this.getTypedRuleContext(PredicateOperationsContext,0); - }; - - MEMBER_SYMBOL() { - return this.getToken(SQLSelectParser.MEMBER_SYMBOL, 0); - }; - - simpleExprWithParentheses() { - return this.getTypedRuleContext(SimpleExprWithParenthesesContext,0); - }; - - SOUNDS_SYMBOL() { - return this.getToken(SQLSelectParser.SOUNDS_SYMBOL, 0); - }; - - LIKE_SYMBOL() { - return this.getToken(SQLSelectParser.LIKE_SYMBOL, 0); - }; - - notRule() { - return this.getTypedRuleContext(NotRuleContext,0); - }; - - OF_SYMBOL() { - return this.getToken(SQLSelectParser.OF_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterPredicate(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitPredicate(this); - } - } - - -} - - - -class PredicateOperationsContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_predicateOperations; - } - - IN_SYMBOL() { - return this.getToken(SQLSelectParser.IN_SYMBOL, 0); - }; - - subquery() { - return this.getTypedRuleContext(SubqueryContext,0); - }; - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - exprList() { - return this.getTypedRuleContext(ExprListContext,0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - BETWEEN_SYMBOL() { - return this.getToken(SQLSelectParser.BETWEEN_SYMBOL, 0); - }; - - bitExpr() { - return this.getTypedRuleContext(BitExprContext,0); - }; - - AND_SYMBOL() { - return this.getToken(SQLSelectParser.AND_SYMBOL, 0); - }; - - predicate() { - return this.getTypedRuleContext(PredicateContext,0); - }; - - LIKE_SYMBOL() { - return this.getToken(SQLSelectParser.LIKE_SYMBOL, 0); - }; - - simpleExpr = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(SimpleExprContext); - } else { - return this.getTypedRuleContext(SimpleExprContext,i); - } - }; - - ESCAPE_SYMBOL() { - return this.getToken(SQLSelectParser.ESCAPE_SYMBOL, 0); - }; - - REGEXP_SYMBOL() { - return this.getToken(SQLSelectParser.REGEXP_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterPredicateOperations(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitPredicateOperations(this); - } - } - - -} - - - -class BitExprContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_bitExpr; - } - - simpleExpr() { - return this.getTypedRuleContext(SimpleExprContext,0); - }; - - bitExpr = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(BitExprContext); - } else { - return this.getTypedRuleContext(BitExprContext,i); - } - }; - - BITWISE_XOR_OPERATOR() { - return this.getToken(SQLSelectParser.BITWISE_XOR_OPERATOR, 0); - }; - - MULT_OPERATOR() { - return this.getToken(SQLSelectParser.MULT_OPERATOR, 0); - }; - - DIV_OPERATOR() { - return this.getToken(SQLSelectParser.DIV_OPERATOR, 0); - }; - - MOD_OPERATOR() { - return this.getToken(SQLSelectParser.MOD_OPERATOR, 0); - }; - - DIV_SYMBOL() { - return this.getToken(SQLSelectParser.DIV_SYMBOL, 0); - }; - - MOD_SYMBOL() { - return this.getToken(SQLSelectParser.MOD_SYMBOL, 0); - }; - - PLUS_OPERATOR() { - return this.getToken(SQLSelectParser.PLUS_OPERATOR, 0); - }; - - MINUS_OPERATOR() { - return this.getToken(SQLSelectParser.MINUS_OPERATOR, 0); - }; - - SHIFT_LEFT_OPERATOR() { - return this.getToken(SQLSelectParser.SHIFT_LEFT_OPERATOR, 0); - }; - - SHIFT_RIGHT_OPERATOR() { - return this.getToken(SQLSelectParser.SHIFT_RIGHT_OPERATOR, 0); - }; - - BITWISE_AND_OPERATOR() { - return this.getToken(SQLSelectParser.BITWISE_AND_OPERATOR, 0); - }; - - BITWISE_OR_OPERATOR() { - return this.getToken(SQLSelectParser.BITWISE_OR_OPERATOR, 0); - }; - - INTERVAL_SYMBOL() { - return this.getToken(SQLSelectParser.INTERVAL_SYMBOL, 0); - }; - - expr() { - return this.getTypedRuleContext(ExprContext,0); - }; - - interval() { - return this.getTypedRuleContext(IntervalContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterBitExpr(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitBitExpr(this); - } - } - - -} - - - -class SimpleExprContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_simpleExpr; - } - - variable() { - return this.getTypedRuleContext(VariableContext,0); - }; - - equal() { - return this.getTypedRuleContext(EqualContext,0); - }; - - expr = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(ExprContext); - } else { - return this.getTypedRuleContext(ExprContext,i); - } - }; - - qualifiedIdentifier() { - return this.getTypedRuleContext(QualifiedIdentifierContext,0); - }; - - jsonOperator() { - return this.getTypedRuleContext(JsonOperatorContext,0); - }; - - runtimeFunctionCall() { - return this.getTypedRuleContext(RuntimeFunctionCallContext,0); - }; - - functionCall() { - return this.getTypedRuleContext(FunctionCallContext,0); - }; - - literal() { - return this.getTypedRuleContext(LiteralContext,0); - }; - - PARAM_MARKER() { - return this.getToken(SQLSelectParser.PARAM_MARKER, 0); - }; - - sumExpr() { - return this.getTypedRuleContext(SumExprContext,0); - }; - - groupingOperation() { - return this.getTypedRuleContext(GroupingOperationContext,0); - }; - - windowFunctionCall() { - return this.getTypedRuleContext(WindowFunctionCallContext,0); - }; - - simpleExpr = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(SimpleExprContext); - } else { - return this.getTypedRuleContext(SimpleExprContext,i); - } - }; - - PLUS_OPERATOR() { - return this.getToken(SQLSelectParser.PLUS_OPERATOR, 0); - }; - - MINUS_OPERATOR() { - return this.getToken(SQLSelectParser.MINUS_OPERATOR, 0); - }; - - BITWISE_NOT_OPERATOR() { - return this.getToken(SQLSelectParser.BITWISE_NOT_OPERATOR, 0); - }; - - not2Rule() { - return this.getTypedRuleContext(Not2RuleContext,0); - }; - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - exprList() { - return this.getTypedRuleContext(ExprListContext,0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - ROW_SYMBOL() { - return this.getToken(SQLSelectParser.ROW_SYMBOL, 0); - }; - - subquery() { - return this.getTypedRuleContext(SubqueryContext,0); - }; - - EXISTS_SYMBOL() { - return this.getToken(SQLSelectParser.EXISTS_SYMBOL, 0); - }; - - OPEN_CURLY_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_CURLY_SYMBOL, 0); - }; - - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); - }; - - CLOSE_CURLY_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_CURLY_SYMBOL, 0); - }; - - MATCH_SYMBOL() { - return this.getToken(SQLSelectParser.MATCH_SYMBOL, 0); - }; - - identListArg() { - return this.getTypedRuleContext(IdentListArgContext,0); - }; - - AGAINST_SYMBOL() { - return this.getToken(SQLSelectParser.AGAINST_SYMBOL, 0); - }; - - bitExpr() { - return this.getTypedRuleContext(BitExprContext,0); - }; - - fulltextOptions() { - return this.getTypedRuleContext(FulltextOptionsContext,0); - }; - - BINARY_SYMBOL() { - return this.getToken(SQLSelectParser.BINARY_SYMBOL, 0); - }; - - CAST_SYMBOL() { - return this.getToken(SQLSelectParser.CAST_SYMBOL, 0); - }; - - AS_SYMBOL() { - return this.getToken(SQLSelectParser.AS_SYMBOL, 0); - }; - - dataType() { - return this.getTypedRuleContext(DataTypeContext,0); - }; - - ARRAY_SYMBOL() { - return this.getToken(SQLSelectParser.ARRAY_SYMBOL, 0); - }; - - CASE_SYMBOL() { - return this.getToken(SQLSelectParser.CASE_SYMBOL, 0); - }; - - END_SYMBOL() { - return this.getToken(SQLSelectParser.END_SYMBOL, 0); - }; - - whenExpression = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(WhenExpressionContext); - } else { - return this.getTypedRuleContext(WhenExpressionContext,i); - } - }; - - thenExpression = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(ThenExpressionContext); - } else { - return this.getTypedRuleContext(ThenExpressionContext,i); - } - }; - - elseExpression() { - return this.getTypedRuleContext(ElseExpressionContext,0); - }; - - CONVERT_SYMBOL() { - return this.getToken(SQLSelectParser.CONVERT_SYMBOL, 0); - }; - - COMMA_SYMBOL() { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, 0); - }; - - USING_SYMBOL() { - return this.getToken(SQLSelectParser.USING_SYMBOL, 0); - }; - - charsetName() { - return this.getTypedRuleContext(CharsetNameContext,0); - }; - - DEFAULT_SYMBOL() { - return this.getToken(SQLSelectParser.DEFAULT_SYMBOL, 0); - }; - - VALUES_SYMBOL() { - return this.getToken(SQLSelectParser.VALUES_SYMBOL, 0); - }; - - INTERVAL_SYMBOL() { - return this.getToken(SQLSelectParser.INTERVAL_SYMBOL, 0); - }; - - interval() { - return this.getTypedRuleContext(IntervalContext,0); - }; - - LOGICAL_OR_OPERATOR() { - return this.getToken(SQLSelectParser.LOGICAL_OR_OPERATOR, 0); - }; - - COLLATE_SYMBOL() { - return this.getToken(SQLSelectParser.COLLATE_SYMBOL, 0); - }; - - textOrIdentifier() { - return this.getTypedRuleContext(TextOrIdentifierContext,0); - }; - - CAST_COLON_SYMBOL() { - return this.getToken(SQLSelectParser.CAST_COLON_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterSimpleExpr(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitSimpleExpr(this); - } - } - - -} - - - -class JsonOperatorContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_jsonOperator; - } - - JSON_SEPARATOR_SYMBOL() { - return this.getToken(SQLSelectParser.JSON_SEPARATOR_SYMBOL, 0); - }; - - JSON_UNQUOTED_SEPARATOR_SYMBOL() { - return this.getToken(SQLSelectParser.JSON_UNQUOTED_SEPARATOR_SYMBOL, 0); - }; - - textStringLiteral() { - return this.getTypedRuleContext(TextStringLiteralContext,0); - }; - - expr() { - return this.getTypedRuleContext(ExprContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterJsonOperator(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitJsonOperator(this); - } - } - - -} - - - -class SumExprContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_sumExpr; - } - - AVG_SYMBOL() { - return this.getToken(SQLSelectParser.AVG_SYMBOL, 0); - }; - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - inSumExpr() { - return this.getTypedRuleContext(InSumExprContext,0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - DISTINCT_SYMBOL() { - return this.getToken(SQLSelectParser.DISTINCT_SYMBOL, 0); - }; - - windowingClause() { - return this.getTypedRuleContext(WindowingClauseContext,0); - }; - - BIT_AND_SYMBOL() { - return this.getToken(SQLSelectParser.BIT_AND_SYMBOL, 0); - }; - - BIT_OR_SYMBOL() { - return this.getToken(SQLSelectParser.BIT_OR_SYMBOL, 0); - }; - - BIT_XOR_SYMBOL() { - return this.getToken(SQLSelectParser.BIT_XOR_SYMBOL, 0); - }; - - jsonFunction() { - return this.getTypedRuleContext(JsonFunctionContext,0); - }; - - COUNT_SYMBOL() { - return this.getToken(SQLSelectParser.COUNT_SYMBOL, 0); - }; - - MULT_OPERATOR() { - return this.getToken(SQLSelectParser.MULT_OPERATOR, 0); - }; - - ALL_SYMBOL() { - return this.getToken(SQLSelectParser.ALL_SYMBOL, 0); - }; - - exprList() { - return this.getTypedRuleContext(ExprListContext,0); - }; - - MIN_SYMBOL() { - return this.getToken(SQLSelectParser.MIN_SYMBOL, 0); - }; - - MAX_SYMBOL() { - return this.getToken(SQLSelectParser.MAX_SYMBOL, 0); - }; - - STD_SYMBOL() { - return this.getToken(SQLSelectParser.STD_SYMBOL, 0); - }; - - VARIANCE_SYMBOL() { - return this.getToken(SQLSelectParser.VARIANCE_SYMBOL, 0); - }; - - STDDEV_SAMP_SYMBOL() { - return this.getToken(SQLSelectParser.STDDEV_SAMP_SYMBOL, 0); - }; - - VAR_SAMP_SYMBOL() { - return this.getToken(SQLSelectParser.VAR_SAMP_SYMBOL, 0); - }; - - SUM_SYMBOL() { - return this.getToken(SQLSelectParser.SUM_SYMBOL, 0); - }; - - GROUP_CONCAT_SYMBOL() { - return this.getToken(SQLSelectParser.GROUP_CONCAT_SYMBOL, 0); - }; - - orderClause() { - return this.getTypedRuleContext(OrderClauseContext,0); - }; - - SEPARATOR_SYMBOL() { - return this.getToken(SQLSelectParser.SEPARATOR_SYMBOL, 0); - }; - - textString() { - return this.getTypedRuleContext(TextStringContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterSumExpr(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitSumExpr(this); - } - } - - -} - - - -class GroupingOperationContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_groupingOperation; - } - - GROUPING_SYMBOL() { - return this.getToken(SQLSelectParser.GROUPING_SYMBOL, 0); - }; - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - exprList() { - return this.getTypedRuleContext(ExprListContext,0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterGroupingOperation(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitGroupingOperation(this); - } - } - - -} - - - -class WindowFunctionCallContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_windowFunctionCall; - } - - parentheses() { - return this.getTypedRuleContext(ParenthesesContext,0); - }; - - windowingClause() { - return this.getTypedRuleContext(WindowingClauseContext,0); - }; - - ROW_NUMBER_SYMBOL() { - return this.getToken(SQLSelectParser.ROW_NUMBER_SYMBOL, 0); - }; - - RANK_SYMBOL() { - return this.getToken(SQLSelectParser.RANK_SYMBOL, 0); - }; - - DENSE_RANK_SYMBOL() { - return this.getToken(SQLSelectParser.DENSE_RANK_SYMBOL, 0); - }; - - CUME_DIST_SYMBOL() { - return this.getToken(SQLSelectParser.CUME_DIST_SYMBOL, 0); - }; - - PERCENT_RANK_SYMBOL() { - return this.getToken(SQLSelectParser.PERCENT_RANK_SYMBOL, 0); - }; - - NTILE_SYMBOL() { - return this.getToken(SQLSelectParser.NTILE_SYMBOL, 0); - }; - - simpleExprWithParentheses() { - return this.getTypedRuleContext(SimpleExprWithParenthesesContext,0); - }; - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - expr() { - return this.getTypedRuleContext(ExprContext,0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - LEAD_SYMBOL() { - return this.getToken(SQLSelectParser.LEAD_SYMBOL, 0); - }; - - LAG_SYMBOL() { - return this.getToken(SQLSelectParser.LAG_SYMBOL, 0); - }; - - leadLagInfo() { - return this.getTypedRuleContext(LeadLagInfoContext,0); - }; - - nullTreatment() { - return this.getTypedRuleContext(NullTreatmentContext,0); - }; - - exprWithParentheses() { - return this.getTypedRuleContext(ExprWithParenthesesContext,0); - }; - - FIRST_VALUE_SYMBOL() { - return this.getToken(SQLSelectParser.FIRST_VALUE_SYMBOL, 0); - }; - - LAST_VALUE_SYMBOL() { - return this.getToken(SQLSelectParser.LAST_VALUE_SYMBOL, 0); - }; - - NTH_VALUE_SYMBOL() { - return this.getToken(SQLSelectParser.NTH_VALUE_SYMBOL, 0); - }; - - COMMA_SYMBOL() { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, 0); - }; - - simpleExpr() { - return this.getTypedRuleContext(SimpleExprContext,0); - }; - - FROM_SYMBOL() { - return this.getToken(SQLSelectParser.FROM_SYMBOL, 0); - }; - - FIRST_SYMBOL() { - return this.getToken(SQLSelectParser.FIRST_SYMBOL, 0); - }; - - LAST_SYMBOL() { - return this.getToken(SQLSelectParser.LAST_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterWindowFunctionCall(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitWindowFunctionCall(this); - } - } - - -} - - - -class WindowingClauseContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_windowingClause; - } - - OVER_SYMBOL() { - return this.getToken(SQLSelectParser.OVER_SYMBOL, 0); - }; - - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); - }; - - windowSpec() { - return this.getTypedRuleContext(WindowSpecContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterWindowingClause(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitWindowingClause(this); - } - } - - -} - - - -class LeadLagInfoContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_leadLagInfo; - } - - COMMA_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.COMMA_SYMBOL); - } else { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, i); - } - }; - - - ulonglong_number() { - return this.getTypedRuleContext(Ulonglong_numberContext,0); - }; - - PARAM_MARKER() { - return this.getToken(SQLSelectParser.PARAM_MARKER, 0); - }; - - expr() { - return this.getTypedRuleContext(ExprContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterLeadLagInfo(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitLeadLagInfo(this); - } - } - - -} - - - -class NullTreatmentContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_nullTreatment; - } - - NULLS_SYMBOL() { - return this.getToken(SQLSelectParser.NULLS_SYMBOL, 0); - }; - - RESPECT_SYMBOL() { - return this.getToken(SQLSelectParser.RESPECT_SYMBOL, 0); - }; - - IGNORE_SYMBOL() { - return this.getToken(SQLSelectParser.IGNORE_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterNullTreatment(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitNullTreatment(this); - } - } - - -} - - - -class JsonFunctionContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_jsonFunction; - } - - JSON_ARRAYAGG_SYMBOL() { - return this.getToken(SQLSelectParser.JSON_ARRAYAGG_SYMBOL, 0); - }; - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - inSumExpr = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(InSumExprContext); - } else { - return this.getTypedRuleContext(InSumExprContext,i); - } - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - windowingClause() { - return this.getTypedRuleContext(WindowingClauseContext,0); - }; - - JSON_OBJECTAGG_SYMBOL() { - return this.getToken(SQLSelectParser.JSON_OBJECTAGG_SYMBOL, 0); - }; - - COMMA_SYMBOL() { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterJsonFunction(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitJsonFunction(this); - } - } - - -} - - - -class InSumExprContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_inSumExpr; - } - - expr() { - return this.getTypedRuleContext(ExprContext,0); - }; - - ALL_SYMBOL() { - return this.getToken(SQLSelectParser.ALL_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterInSumExpr(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitInSumExpr(this); - } - } - - -} - - - -class IdentListArgContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_identListArg; - } - - identList() { - return this.getTypedRuleContext(IdentListContext,0); - }; - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterIdentListArg(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitIdentListArg(this); - } - } - - -} - - - -class IdentListContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_identList; - } - - qualifiedIdentifier = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(QualifiedIdentifierContext); - } else { - return this.getTypedRuleContext(QualifiedIdentifierContext,i); - } - }; - - COMMA_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.COMMA_SYMBOL); - } else { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, i); - } - }; - - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterIdentList(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitIdentList(this); - } - } - - -} - - - -class FulltextOptionsContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_fulltextOptions; - } - - IN_SYMBOL() { - return this.getToken(SQLSelectParser.IN_SYMBOL, 0); - }; - - BOOLEAN_SYMBOL() { - return this.getToken(SQLSelectParser.BOOLEAN_SYMBOL, 0); - }; - - MODE_SYMBOL() { - return this.getToken(SQLSelectParser.MODE_SYMBOL, 0); - }; - - NATURAL_SYMBOL() { - return this.getToken(SQLSelectParser.NATURAL_SYMBOL, 0); - }; - - LANGUAGE_SYMBOL() { - return this.getToken(SQLSelectParser.LANGUAGE_SYMBOL, 0); - }; - - WITH_SYMBOL() { - return this.getToken(SQLSelectParser.WITH_SYMBOL, 0); - }; - - QUERY_SYMBOL() { - return this.getToken(SQLSelectParser.QUERY_SYMBOL, 0); - }; - - EXPANSION_SYMBOL() { - return this.getToken(SQLSelectParser.EXPANSION_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterFulltextOptions(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitFulltextOptions(this); - } - } - - -} - - - -class RuntimeFunctionCallContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_runtimeFunctionCall; - } - - CHAR_SYMBOL() { - return this.getToken(SQLSelectParser.CHAR_SYMBOL, 0); - }; - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - exprList() { - return this.getTypedRuleContext(ExprListContext,0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - USING_SYMBOL() { - return this.getToken(SQLSelectParser.USING_SYMBOL, 0); - }; - - charsetName() { - return this.getTypedRuleContext(CharsetNameContext,0); - }; - - CURRENT_USER_SYMBOL() { - return this.getToken(SQLSelectParser.CURRENT_USER_SYMBOL, 0); - }; - - parentheses() { - return this.getTypedRuleContext(ParenthesesContext,0); - }; - - DATE_SYMBOL() { - return this.getToken(SQLSelectParser.DATE_SYMBOL, 0); - }; - - exprWithParentheses() { - return this.getTypedRuleContext(ExprWithParenthesesContext,0); - }; - - DAY_SYMBOL() { - return this.getToken(SQLSelectParser.DAY_SYMBOL, 0); - }; - - HOUR_SYMBOL() { - return this.getToken(SQLSelectParser.HOUR_SYMBOL, 0); - }; - - INSERT_SYMBOL() { - return this.getToken(SQLSelectParser.INSERT_SYMBOL, 0); - }; - - expr = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(ExprContext); - } else { - return this.getTypedRuleContext(ExprContext,i); - } - }; - - COMMA_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.COMMA_SYMBOL); - } else { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, i); - } - }; - - - INTERVAL_SYMBOL() { - return this.getToken(SQLSelectParser.INTERVAL_SYMBOL, 0); - }; - - LEFT_SYMBOL() { - return this.getToken(SQLSelectParser.LEFT_SYMBOL, 0); - }; - - MINUTE_SYMBOL() { - return this.getToken(SQLSelectParser.MINUTE_SYMBOL, 0); - }; - - MONTH_SYMBOL() { - return this.getToken(SQLSelectParser.MONTH_SYMBOL, 0); - }; - - RIGHT_SYMBOL() { - return this.getToken(SQLSelectParser.RIGHT_SYMBOL, 0); - }; - - SECOND_SYMBOL() { - return this.getToken(SQLSelectParser.SECOND_SYMBOL, 0); - }; - - TIME_SYMBOL() { - return this.getToken(SQLSelectParser.TIME_SYMBOL, 0); - }; - - TIMESTAMP_SYMBOL() { - return this.getToken(SQLSelectParser.TIMESTAMP_SYMBOL, 0); - }; - - trimFunction() { - return this.getTypedRuleContext(TrimFunctionContext,0); - }; - - USER_SYMBOL() { - return this.getToken(SQLSelectParser.USER_SYMBOL, 0); - }; - - VALUES_SYMBOL() { - return this.getToken(SQLSelectParser.VALUES_SYMBOL, 0); - }; - - YEAR_SYMBOL() { - return this.getToken(SQLSelectParser.YEAR_SYMBOL, 0); - }; - - ADDDATE_SYMBOL() { - return this.getToken(SQLSelectParser.ADDDATE_SYMBOL, 0); - }; - - SUBDATE_SYMBOL() { - return this.getToken(SQLSelectParser.SUBDATE_SYMBOL, 0); - }; - - interval() { - return this.getTypedRuleContext(IntervalContext,0); - }; - - CURDATE_SYMBOL() { - return this.getToken(SQLSelectParser.CURDATE_SYMBOL, 0); - }; - - CURTIME_SYMBOL() { - return this.getToken(SQLSelectParser.CURTIME_SYMBOL, 0); - }; - - timeFunctionParameters() { - return this.getTypedRuleContext(TimeFunctionParametersContext,0); - }; - - DATE_ADD_SYMBOL() { - return this.getToken(SQLSelectParser.DATE_ADD_SYMBOL, 0); - }; - - DATE_SUB_SYMBOL() { - return this.getToken(SQLSelectParser.DATE_SUB_SYMBOL, 0); - }; - - EXTRACT_SYMBOL() { - return this.getToken(SQLSelectParser.EXTRACT_SYMBOL, 0); - }; - - FROM_SYMBOL() { - return this.getToken(SQLSelectParser.FROM_SYMBOL, 0); - }; - - GET_FORMAT_SYMBOL() { - return this.getToken(SQLSelectParser.GET_FORMAT_SYMBOL, 0); - }; - - dateTimeTtype() { - return this.getTypedRuleContext(DateTimeTtypeContext,0); - }; - - NOW_SYMBOL() { - return this.getToken(SQLSelectParser.NOW_SYMBOL, 0); - }; - - POSITION_SYMBOL() { - return this.getToken(SQLSelectParser.POSITION_SYMBOL, 0); - }; - - bitExpr() { - return this.getTypedRuleContext(BitExprContext,0); - }; - - IN_SYMBOL() { - return this.getToken(SQLSelectParser.IN_SYMBOL, 0); - }; - - substringFunction() { - return this.getTypedRuleContext(SubstringFunctionContext,0); - }; - - SYSDATE_SYMBOL() { - return this.getToken(SQLSelectParser.SYSDATE_SYMBOL, 0); - }; - - intervalTimeStamp() { - return this.getTypedRuleContext(IntervalTimeStampContext,0); - }; - - TIMESTAMP_ADD_SYMBOL() { - return this.getToken(SQLSelectParser.TIMESTAMP_ADD_SYMBOL, 0); - }; - - TIMESTAMP_DIFF_SYMBOL() { - return this.getToken(SQLSelectParser.TIMESTAMP_DIFF_SYMBOL, 0); - }; - - UTC_DATE_SYMBOL() { - return this.getToken(SQLSelectParser.UTC_DATE_SYMBOL, 0); - }; - - UTC_TIME_SYMBOL() { - return this.getToken(SQLSelectParser.UTC_TIME_SYMBOL, 0); - }; - - UTC_TIMESTAMP_SYMBOL() { - return this.getToken(SQLSelectParser.UTC_TIMESTAMP_SYMBOL, 0); - }; - - ASCII_SYMBOL() { - return this.getToken(SQLSelectParser.ASCII_SYMBOL, 0); - }; - - CHARSET_SYMBOL() { - return this.getToken(SQLSelectParser.CHARSET_SYMBOL, 0); - }; - - COALESCE_SYMBOL() { - return this.getToken(SQLSelectParser.COALESCE_SYMBOL, 0); - }; - - exprListWithParentheses() { - return this.getTypedRuleContext(ExprListWithParenthesesContext,0); - }; - - COLLATION_SYMBOL() { - return this.getToken(SQLSelectParser.COLLATION_SYMBOL, 0); - }; - - DATABASE_SYMBOL() { - return this.getToken(SQLSelectParser.DATABASE_SYMBOL, 0); - }; - - IF_SYMBOL() { - return this.getToken(SQLSelectParser.IF_SYMBOL, 0); - }; - - FORMAT_SYMBOL() { - return this.getToken(SQLSelectParser.FORMAT_SYMBOL, 0); - }; - - MICROSECOND_SYMBOL() { - return this.getToken(SQLSelectParser.MICROSECOND_SYMBOL, 0); - }; - - MOD_SYMBOL() { - return this.getToken(SQLSelectParser.MOD_SYMBOL, 0); - }; - - OLD_PASSWORD_SYMBOL() { - return this.getToken(SQLSelectParser.OLD_PASSWORD_SYMBOL, 0); - }; - - textLiteral() { - return this.getTypedRuleContext(TextLiteralContext,0); - }; - - PASSWORD_SYMBOL() { - return this.getToken(SQLSelectParser.PASSWORD_SYMBOL, 0); - }; - - QUARTER_SYMBOL() { - return this.getToken(SQLSelectParser.QUARTER_SYMBOL, 0); - }; - - REPEAT_SYMBOL() { - return this.getToken(SQLSelectParser.REPEAT_SYMBOL, 0); - }; - - REPLACE_SYMBOL() { - return this.getToken(SQLSelectParser.REPLACE_SYMBOL, 0); - }; - - REVERSE_SYMBOL() { - return this.getToken(SQLSelectParser.REVERSE_SYMBOL, 0); - }; - - ROW_COUNT_SYMBOL() { - return this.getToken(SQLSelectParser.ROW_COUNT_SYMBOL, 0); - }; - - TRUNCATE_SYMBOL() { - return this.getToken(SQLSelectParser.TRUNCATE_SYMBOL, 0); - }; - - WEEK_SYMBOL() { - return this.getToken(SQLSelectParser.WEEK_SYMBOL, 0); - }; - - WEIGHT_STRING_SYMBOL() { - return this.getToken(SQLSelectParser.WEIGHT_STRING_SYMBOL, 0); - }; - - AS_SYMBOL() { - return this.getToken(SQLSelectParser.AS_SYMBOL, 0); - }; - - BINARY_SYMBOL() { - return this.getToken(SQLSelectParser.BINARY_SYMBOL, 0); - }; - - wsNumCodepoints() { - return this.getTypedRuleContext(WsNumCodepointsContext,0); - }; - - ulong_number = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(Ulong_numberContext); - } else { - return this.getTypedRuleContext(Ulong_numberContext,i); - } - }; - - weightStringLevels() { - return this.getTypedRuleContext(WeightStringLevelsContext,0); - }; - - geometryFunction() { - return this.getTypedRuleContext(GeometryFunctionContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterRuntimeFunctionCall(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitRuntimeFunctionCall(this); - } - } - - -} - - - -class GeometryFunctionContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_geometryFunction; - } - - CONTAINS_SYMBOL() { - return this.getToken(SQLSelectParser.CONTAINS_SYMBOL, 0); - }; - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - expr = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(ExprContext); - } else { - return this.getTypedRuleContext(ExprContext,i); - } - }; - - COMMA_SYMBOL() { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, 0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - GEOMETRYCOLLECTION_SYMBOL() { - return this.getToken(SQLSelectParser.GEOMETRYCOLLECTION_SYMBOL, 0); - }; - - exprList() { - return this.getTypedRuleContext(ExprListContext,0); - }; - - LINESTRING_SYMBOL() { - return this.getToken(SQLSelectParser.LINESTRING_SYMBOL, 0); - }; - - exprListWithParentheses() { - return this.getTypedRuleContext(ExprListWithParenthesesContext,0); - }; - - MULTILINESTRING_SYMBOL() { - return this.getToken(SQLSelectParser.MULTILINESTRING_SYMBOL, 0); - }; - - MULTIPOINT_SYMBOL() { - return this.getToken(SQLSelectParser.MULTIPOINT_SYMBOL, 0); - }; - - MULTIPOLYGON_SYMBOL() { - return this.getToken(SQLSelectParser.MULTIPOLYGON_SYMBOL, 0); - }; - - POINT_SYMBOL() { - return this.getToken(SQLSelectParser.POINT_SYMBOL, 0); - }; - - POLYGON_SYMBOL() { - return this.getToken(SQLSelectParser.POLYGON_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterGeometryFunction(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitGeometryFunction(this); - } - } - - -} - - - -class TimeFunctionParametersContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_timeFunctionParameters; - } - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - fractionalPrecision() { - return this.getTypedRuleContext(FractionalPrecisionContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterTimeFunctionParameters(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitTimeFunctionParameters(this); - } - } - - -} - - - -class FractionalPrecisionContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_fractionalPrecision; - } - - INT_NUMBER() { - return this.getToken(SQLSelectParser.INT_NUMBER, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterFractionalPrecision(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitFractionalPrecision(this); - } - } - - -} - - - -class WeightStringLevelsContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_weightStringLevels; - } - - LEVEL_SYMBOL() { - return this.getToken(SQLSelectParser.LEVEL_SYMBOL, 0); - }; - - real_ulong_number = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(Real_ulong_numberContext); - } else { - return this.getTypedRuleContext(Real_ulong_numberContext,i); - } - }; - - MINUS_OPERATOR() { - return this.getToken(SQLSelectParser.MINUS_OPERATOR, 0); - }; - - weightStringLevelListItem = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(WeightStringLevelListItemContext); - } else { - return this.getTypedRuleContext(WeightStringLevelListItemContext,i); - } - }; - - COMMA_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.COMMA_SYMBOL); - } else { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, i); - } - }; - - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterWeightStringLevels(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitWeightStringLevels(this); - } - } - - -} - - - -class WeightStringLevelListItemContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_weightStringLevelListItem; - } - - real_ulong_number() { - return this.getTypedRuleContext(Real_ulong_numberContext,0); - }; - - REVERSE_SYMBOL() { - return this.getToken(SQLSelectParser.REVERSE_SYMBOL, 0); - }; - - ASC_SYMBOL() { - return this.getToken(SQLSelectParser.ASC_SYMBOL, 0); - }; - - DESC_SYMBOL() { - return this.getToken(SQLSelectParser.DESC_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterWeightStringLevelListItem(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitWeightStringLevelListItem(this); - } - } - - -} - - - -class DateTimeTtypeContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_dateTimeTtype; - } - - DATE_SYMBOL() { - return this.getToken(SQLSelectParser.DATE_SYMBOL, 0); - }; - - TIME_SYMBOL() { - return this.getToken(SQLSelectParser.TIME_SYMBOL, 0); - }; - - DATETIME_SYMBOL() { - return this.getToken(SQLSelectParser.DATETIME_SYMBOL, 0); - }; - - TIMESTAMP_SYMBOL() { - return this.getToken(SQLSelectParser.TIMESTAMP_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterDateTimeTtype(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitDateTimeTtype(this); - } - } - - -} - - - -class TrimFunctionContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_trimFunction; - } - - TRIM_SYMBOL() { - return this.getToken(SQLSelectParser.TRIM_SYMBOL, 0); - }; - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - expr = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(ExprContext); - } else { - return this.getTypedRuleContext(ExprContext,i); - } - }; - - LEADING_SYMBOL() { - return this.getToken(SQLSelectParser.LEADING_SYMBOL, 0); - }; - - FROM_SYMBOL() { - return this.getToken(SQLSelectParser.FROM_SYMBOL, 0); - }; - - TRAILING_SYMBOL() { - return this.getToken(SQLSelectParser.TRAILING_SYMBOL, 0); - }; - - BOTH_SYMBOL() { - return this.getToken(SQLSelectParser.BOTH_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterTrimFunction(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitTrimFunction(this); - } - } - - -} - - - -class SubstringFunctionContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_substringFunction; - } - - SUBSTRING_SYMBOL() { - return this.getToken(SQLSelectParser.SUBSTRING_SYMBOL, 0); - }; - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - expr = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(ExprContext); - } else { - return this.getTypedRuleContext(ExprContext,i); - } - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - COMMA_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.COMMA_SYMBOL); - } else { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, i); - } - }; - - - FROM_SYMBOL() { - return this.getToken(SQLSelectParser.FROM_SYMBOL, 0); - }; - - FOR_SYMBOL() { - return this.getToken(SQLSelectParser.FOR_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterSubstringFunction(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitSubstringFunction(this); - } - } - - -} - - - -class FunctionCallContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_functionCall; - } - - pureIdentifier() { - return this.getTypedRuleContext(PureIdentifierContext,0); - }; - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - udfExprList() { - return this.getTypedRuleContext(UdfExprListContext,0); - }; - - qualifiedIdentifier() { - return this.getTypedRuleContext(QualifiedIdentifierContext,0); - }; - - exprList() { - return this.getTypedRuleContext(ExprListContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterFunctionCall(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitFunctionCall(this); - } - } - - -} - - - -class UdfExprListContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_udfExprList; - } - - udfExpr = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(UdfExprContext); - } else { - return this.getTypedRuleContext(UdfExprContext,i); - } - }; - - COMMA_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.COMMA_SYMBOL); - } else { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, i); - } - }; - - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterUdfExprList(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitUdfExprList(this); - } - } - - -} - - - -class UdfExprContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_udfExpr; - } - - expr() { - return this.getTypedRuleContext(ExprContext,0); - }; - - selectAlias() { - return this.getTypedRuleContext(SelectAliasContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterUdfExpr(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitUdfExpr(this); - } - } - - -} - - - -class VariableContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_variable; - } - - userVariable() { - return this.getTypedRuleContext(UserVariableContext,0); - }; - - systemVariable() { - return this.getTypedRuleContext(SystemVariableContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterVariable(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitVariable(this); - } - } - - -} - - - -class UserVariableContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_userVariable; - } - - AT_SIGN_SYMBOL() { - return this.getToken(SQLSelectParser.AT_SIGN_SYMBOL, 0); - }; - - textOrIdentifier() { - return this.getTypedRuleContext(TextOrIdentifierContext,0); - }; - - AT_TEXT_SUFFIX() { - return this.getToken(SQLSelectParser.AT_TEXT_SUFFIX, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterUserVariable(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitUserVariable(this); - } - } - - -} - - - -class SystemVariableContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_systemVariable; - } - - AT_AT_SIGN_SYMBOL() { - return this.getToken(SQLSelectParser.AT_AT_SIGN_SYMBOL, 0); - }; - - textOrIdentifier() { - return this.getTypedRuleContext(TextOrIdentifierContext,0); - }; - - varIdentType() { - return this.getTypedRuleContext(VarIdentTypeContext,0); - }; - - dotIdentifier() { - return this.getTypedRuleContext(DotIdentifierContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterSystemVariable(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitSystemVariable(this); - } - } - - -} - - - -class WhenExpressionContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_whenExpression; - } - - WHEN_SYMBOL() { - return this.getToken(SQLSelectParser.WHEN_SYMBOL, 0); - }; - - expr() { - return this.getTypedRuleContext(ExprContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterWhenExpression(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitWhenExpression(this); - } - } - - -} - - - -class ThenExpressionContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_thenExpression; - } - - THEN_SYMBOL() { - return this.getToken(SQLSelectParser.THEN_SYMBOL, 0); - }; - - expr() { - return this.getTypedRuleContext(ExprContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterThenExpression(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitThenExpression(this); - } - } - - -} - - - -class ElseExpressionContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_elseExpression; - } - - ELSE_SYMBOL() { - return this.getToken(SQLSelectParser.ELSE_SYMBOL, 0); - }; - - expr() { - return this.getTypedRuleContext(ExprContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterElseExpression(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitElseExpression(this); - } - } - - -} - - - -class ExprListContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_exprList; - } - - expr = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(ExprContext); - } else { - return this.getTypedRuleContext(ExprContext,i); - } - }; - - COMMA_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.COMMA_SYMBOL); - } else { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, i); - } - }; - - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterExprList(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitExprList(this); - } - } - - -} - - - -class CharsetContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_charset; - } - - CHAR_SYMBOL() { - return this.getToken(SQLSelectParser.CHAR_SYMBOL, 0); - }; - - SET_SYMBOL() { - return this.getToken(SQLSelectParser.SET_SYMBOL, 0); - }; - - CHARSET_SYMBOL() { - return this.getToken(SQLSelectParser.CHARSET_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterCharset(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitCharset(this); - } - } - - -} - - - -class NotRuleContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_notRule; - } - - NOT_SYMBOL() { - return this.getToken(SQLSelectParser.NOT_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterNotRule(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitNotRule(this); - } - } - - -} - - - -class Not2RuleContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_not2Rule; - } - - LOGICAL_NOT_OPERATOR() { - return this.getToken(SQLSelectParser.LOGICAL_NOT_OPERATOR, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterNot2Rule(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitNot2Rule(this); - } - } - - -} - - - -class IntervalContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_interval; - } - - intervalTimeStamp() { - return this.getTypedRuleContext(IntervalTimeStampContext,0); - }; - - SECOND_MICROSECOND_SYMBOL() { - return this.getToken(SQLSelectParser.SECOND_MICROSECOND_SYMBOL, 0); - }; - - MINUTE_MICROSECOND_SYMBOL() { - return this.getToken(SQLSelectParser.MINUTE_MICROSECOND_SYMBOL, 0); - }; - - MINUTE_SECOND_SYMBOL() { - return this.getToken(SQLSelectParser.MINUTE_SECOND_SYMBOL, 0); - }; - - HOUR_MICROSECOND_SYMBOL() { - return this.getToken(SQLSelectParser.HOUR_MICROSECOND_SYMBOL, 0); - }; - - HOUR_SECOND_SYMBOL() { - return this.getToken(SQLSelectParser.HOUR_SECOND_SYMBOL, 0); - }; - - HOUR_MINUTE_SYMBOL() { - return this.getToken(SQLSelectParser.HOUR_MINUTE_SYMBOL, 0); - }; - - DAY_MICROSECOND_SYMBOL() { - return this.getToken(SQLSelectParser.DAY_MICROSECOND_SYMBOL, 0); - }; - - DAY_SECOND_SYMBOL() { - return this.getToken(SQLSelectParser.DAY_SECOND_SYMBOL, 0); - }; - - DAY_MINUTE_SYMBOL() { - return this.getToken(SQLSelectParser.DAY_MINUTE_SYMBOL, 0); - }; - - DAY_HOUR_SYMBOL() { - return this.getToken(SQLSelectParser.DAY_HOUR_SYMBOL, 0); - }; - - YEAR_MONTH_SYMBOL() { - return this.getToken(SQLSelectParser.YEAR_MONTH_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterInterval(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitInterval(this); - } - } - - -} - - - -class IntervalTimeStampContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_intervalTimeStamp; - } - - MICROSECOND_SYMBOL() { - return this.getToken(SQLSelectParser.MICROSECOND_SYMBOL, 0); - }; - - SECOND_SYMBOL() { - return this.getToken(SQLSelectParser.SECOND_SYMBOL, 0); - }; - - MINUTE_SYMBOL() { - return this.getToken(SQLSelectParser.MINUTE_SYMBOL, 0); - }; - - HOUR_SYMBOL() { - return this.getToken(SQLSelectParser.HOUR_SYMBOL, 0); - }; - - DAY_SYMBOL() { - return this.getToken(SQLSelectParser.DAY_SYMBOL, 0); - }; - - WEEK_SYMBOL() { - return this.getToken(SQLSelectParser.WEEK_SYMBOL, 0); - }; - - MONTH_SYMBOL() { - return this.getToken(SQLSelectParser.MONTH_SYMBOL, 0); - }; - - QUARTER_SYMBOL() { - return this.getToken(SQLSelectParser.QUARTER_SYMBOL, 0); - }; - - YEAR_SYMBOL() { - return this.getToken(SQLSelectParser.YEAR_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterIntervalTimeStamp(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitIntervalTimeStamp(this); - } - } - - -} - - - -class ExprListWithParenthesesContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_exprListWithParentheses; - } - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - exprList() { - return this.getTypedRuleContext(ExprListContext,0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterExprListWithParentheses(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitExprListWithParentheses(this); - } - } - - -} - - - -class ExprWithParenthesesContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_exprWithParentheses; - } - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - expr() { - return this.getTypedRuleContext(ExprContext,0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterExprWithParentheses(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitExprWithParentheses(this); - } - } - - -} - - - -class SimpleExprWithParenthesesContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_simpleExprWithParentheses; - } - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - simpleExpr() { - return this.getTypedRuleContext(SimpleExprContext,0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterSimpleExprWithParentheses(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitSimpleExprWithParentheses(this); - } - } - - -} - - - -class OrderListContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_orderList; - } - - orderExpression = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(OrderExpressionContext); - } else { - return this.getTypedRuleContext(OrderExpressionContext,i); - } - }; - - COMMA_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.COMMA_SYMBOL); - } else { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, i); - } - }; - - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterOrderList(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitOrderList(this); - } - } - - -} - - - -class OrderExpressionContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_orderExpression; - } - - expr() { - return this.getTypedRuleContext(ExprContext,0); - }; - - direction() { - return this.getTypedRuleContext(DirectionContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterOrderExpression(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitOrderExpression(this); - } - } - - -} - - - -class IndexTypeContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_indexType; - } - - BTREE_SYMBOL() { - return this.getToken(SQLSelectParser.BTREE_SYMBOL, 0); - }; - - RTREE_SYMBOL() { - return this.getToken(SQLSelectParser.RTREE_SYMBOL, 0); - }; - - HASH_SYMBOL() { - return this.getToken(SQLSelectParser.HASH_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterIndexType(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitIndexType(this); - } - } - - -} - - - -class DataTypeContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_dataType; - } - - INT_SYMBOL() { - return this.getToken(SQLSelectParser.INT_SYMBOL, 0); - }; - - BYTE_INT_SYMBOL() { - return this.getToken(SQLSelectParser.BYTE_INT_SYMBOL, 0); - }; - - TINYINT_SYMBOL() { - return this.getToken(SQLSelectParser.TINYINT_SYMBOL, 0); - }; - - SMALLINT_SYMBOL() { - return this.getToken(SQLSelectParser.SMALLINT_SYMBOL, 0); - }; - - MEDIUMINT_SYMBOL() { - return this.getToken(SQLSelectParser.MEDIUMINT_SYMBOL, 0); - }; - - BIGINT_SYMBOL() { - return this.getToken(SQLSelectParser.BIGINT_SYMBOL, 0); - }; - - DECIMAL_SYMBOL() { - return this.getToken(SQLSelectParser.DECIMAL_SYMBOL, 0); - }; - - NUMERIC_SYMBOL() { - return this.getToken(SQLSelectParser.NUMERIC_SYMBOL, 0); - }; - - NUMBER_SYMBOL() { - return this.getToken(SQLSelectParser.NUMBER_SYMBOL, 0); - }; - - fieldLength() { - return this.getTypedRuleContext(FieldLengthContext,0); - }; - - fieldOptions() { - return this.getTypedRuleContext(FieldOptionsContext,0); - }; - - REAL_SYMBOL() { - return this.getToken(SQLSelectParser.REAL_SYMBOL, 0); - }; - - DOUBLE_SYMBOL() { - return this.getToken(SQLSelectParser.DOUBLE_SYMBOL, 0); - }; - - precision() { - return this.getTypedRuleContext(PrecisionContext,0); - }; - - PRECISION_SYMBOL() { - return this.getToken(SQLSelectParser.PRECISION_SYMBOL, 0); - }; - - FLOAT_SYMBOL_4() { - return this.getToken(SQLSelectParser.FLOAT_SYMBOL_4, 0); - }; - - FLOAT_SYMBOL_8() { - return this.getToken(SQLSelectParser.FLOAT_SYMBOL_8, 0); - }; - - FLOAT_SYMBOL() { - return this.getToken(SQLSelectParser.FLOAT_SYMBOL, 0); - }; - - FIXED_SYMBOL() { - return this.getToken(SQLSelectParser.FIXED_SYMBOL, 0); - }; - - floatOptions() { - return this.getTypedRuleContext(FloatOptionsContext,0); - }; - - BIT_SYMBOL() { - return this.getToken(SQLSelectParser.BIT_SYMBOL, 0); - }; - - BOOL_SYMBOL() { - return this.getToken(SQLSelectParser.BOOL_SYMBOL, 0); - }; - - BOOLEAN_SYMBOL() { - return this.getToken(SQLSelectParser.BOOLEAN_SYMBOL, 0); - }; - - nchar() { - return this.getTypedRuleContext(NcharContext,0); - }; - - BINARY_SYMBOL() { - return this.getToken(SQLSelectParser.BINARY_SYMBOL, 0); - }; - - VARCHAR_SYMBOL() { - return this.getToken(SQLSelectParser.VARCHAR_SYMBOL, 0); - }; - - CHAR_SYMBOL() { - return this.getToken(SQLSelectParser.CHAR_SYMBOL, 0); - }; - - VARYING_SYMBOL() { - return this.getToken(SQLSelectParser.VARYING_SYMBOL, 0); - }; - - STRING_SYMBOL() { - return this.getToken(SQLSelectParser.STRING_SYMBOL, 0); - }; - - TEXT_SYMBOL() { - return this.getToken(SQLSelectParser.TEXT_SYMBOL, 0); - }; - - charsetWithOptBinary() { - return this.getTypedRuleContext(CharsetWithOptBinaryContext,0); - }; - - NATIONAL_SYMBOL() { - return this.getToken(SQLSelectParser.NATIONAL_SYMBOL, 0); - }; - - NVARCHAR_SYMBOL() { - return this.getToken(SQLSelectParser.NVARCHAR_SYMBOL, 0); - }; - - NCHAR_SYMBOL() { - return this.getToken(SQLSelectParser.NCHAR_SYMBOL, 0); - }; - - VARBINARY_SYMBOL() { - return this.getToken(SQLSelectParser.VARBINARY_SYMBOL, 0); - }; - - YEAR_SYMBOL() { - return this.getToken(SQLSelectParser.YEAR_SYMBOL, 0); - }; - - DATE_SYMBOL() { - return this.getToken(SQLSelectParser.DATE_SYMBOL, 0); - }; - - TIME_SYMBOL() { - return this.getToken(SQLSelectParser.TIME_SYMBOL, 0); - }; - - typeDatetimePrecision() { - return this.getTypedRuleContext(TypeDatetimePrecisionContext,0); - }; - - TIMESTAMP_SYMBOL() { - return this.getToken(SQLSelectParser.TIMESTAMP_SYMBOL, 0); - }; - - WITH_SYMBOL() { - return this.getToken(SQLSelectParser.WITH_SYMBOL, 0); - }; - - LOCAL_SYMBOL() { - return this.getToken(SQLSelectParser.LOCAL_SYMBOL, 0); - }; - - ZONE_SYMBOL() { - return this.getToken(SQLSelectParser.ZONE_SYMBOL, 0); - }; - - WITHOUT_SYMBOL() { - return this.getToken(SQLSelectParser.WITHOUT_SYMBOL, 0); - }; - - DATETIME_SYMBOL() { - return this.getToken(SQLSelectParser.DATETIME_SYMBOL, 0); - }; - - TINYBLOB_SYMBOL() { - return this.getToken(SQLSelectParser.TINYBLOB_SYMBOL, 0); - }; - - BLOB_SYMBOL() { - return this.getToken(SQLSelectParser.BLOB_SYMBOL, 0); - }; - - MEDIUMBLOB_SYMBOL() { - return this.getToken(SQLSelectParser.MEDIUMBLOB_SYMBOL, 0); - }; - - LONGBLOB_SYMBOL() { - return this.getToken(SQLSelectParser.LONGBLOB_SYMBOL, 0); - }; - - LONG_SYMBOL() { - return this.getToken(SQLSelectParser.LONG_SYMBOL, 0); - }; - - TINYTEXT_SYMBOL() { - return this.getToken(SQLSelectParser.TINYTEXT_SYMBOL, 0); - }; - - MEDIUMTEXT_SYMBOL() { - return this.getToken(SQLSelectParser.MEDIUMTEXT_SYMBOL, 0); - }; - - LONGTEXT_SYMBOL() { - return this.getToken(SQLSelectParser.LONGTEXT_SYMBOL, 0); - }; - - ENUM_SYMBOL() { - return this.getToken(SQLSelectParser.ENUM_SYMBOL, 0); - }; - - stringList() { - return this.getTypedRuleContext(StringListContext,0); - }; - - SET_SYMBOL() { - return this.getToken(SQLSelectParser.SET_SYMBOL, 0); - }; - - SERIAL_SYMBOL() { - return this.getToken(SQLSelectParser.SERIAL_SYMBOL, 0); - }; - - JSON_SYMBOL() { - return this.getToken(SQLSelectParser.JSON_SYMBOL, 0); - }; - - GEOMETRY_SYMBOL() { - return this.getToken(SQLSelectParser.GEOMETRY_SYMBOL, 0); - }; - - GEOMETRYCOLLECTION_SYMBOL() { - return this.getToken(SQLSelectParser.GEOMETRYCOLLECTION_SYMBOL, 0); - }; - - POINT_SYMBOL() { - return this.getToken(SQLSelectParser.POINT_SYMBOL, 0); - }; - - MULTIPOINT_SYMBOL() { - return this.getToken(SQLSelectParser.MULTIPOINT_SYMBOL, 0); - }; - - LINESTRING_SYMBOL() { - return this.getToken(SQLSelectParser.LINESTRING_SYMBOL, 0); - }; - - MULTILINESTRING_SYMBOL() { - return this.getToken(SQLSelectParser.MULTILINESTRING_SYMBOL, 0); - }; - - POLYGON_SYMBOL() { - return this.getToken(SQLSelectParser.POLYGON_SYMBOL, 0); - }; - - MULTIPOLYGON_SYMBOL() { - return this.getToken(SQLSelectParser.MULTIPOLYGON_SYMBOL, 0); - }; - - GEOGRAPHY_SYMBOL() { - return this.getToken(SQLSelectParser.GEOGRAPHY_SYMBOL, 0); - }; - - VARIANT_SYMBOL() { - return this.getToken(SQLSelectParser.VARIANT_SYMBOL, 0); - }; - - OBJECT_SYMBOL() { - return this.getToken(SQLSelectParser.OBJECT_SYMBOL, 0); - }; - - ARRAY_SYMBOL() { - return this.getToken(SQLSelectParser.ARRAY_SYMBOL, 0); - }; - - expr = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(ExprContext); - } else { - return this.getTypedRuleContext(ExprContext,i); - } - }; - - COMMA_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.COMMA_SYMBOL); - } else { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, i); - } - }; - - - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterDataType(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitDataType(this); - } - } - - -} - - - -class NcharContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_nchar; - } - - NCHAR_SYMBOL() { - return this.getToken(SQLSelectParser.NCHAR_SYMBOL, 0); - }; - - NATIONAL_SYMBOL() { - return this.getToken(SQLSelectParser.NATIONAL_SYMBOL, 0); - }; - - CHAR_SYMBOL() { - return this.getToken(SQLSelectParser.CHAR_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterNchar(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitNchar(this); - } - } - - -} - - - -class FieldLengthContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_fieldLength; - } - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - real_ulonglong_number() { - return this.getTypedRuleContext(Real_ulonglong_numberContext,0); - }; - - DECIMAL_NUMBER() { - return this.getToken(SQLSelectParser.DECIMAL_NUMBER, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterFieldLength(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitFieldLength(this); - } - } - - -} - - - -class FieldOptionsContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_fieldOptions; - } - - SIGNED_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.SIGNED_SYMBOL); - } else { - return this.getToken(SQLSelectParser.SIGNED_SYMBOL, i); - } - }; - - - UNSIGNED_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.UNSIGNED_SYMBOL); - } else { - return this.getToken(SQLSelectParser.UNSIGNED_SYMBOL, i); - } - }; - - - ZEROFILL_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.ZEROFILL_SYMBOL); - } else { - return this.getToken(SQLSelectParser.ZEROFILL_SYMBOL, i); - } - }; - - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterFieldOptions(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitFieldOptions(this); - } - } - - -} - - - -class CharsetWithOptBinaryContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_charsetWithOptBinary; - } - - ascii() { - return this.getTypedRuleContext(AsciiContext,0); - }; - - unicode() { - return this.getTypedRuleContext(UnicodeContext,0); - }; - - BYTE_SYMBOL() { - return this.getToken(SQLSelectParser.BYTE_SYMBOL, 0); - }; - - charset() { - return this.getTypedRuleContext(CharsetContext,0); - }; - - charsetName() { - return this.getTypedRuleContext(CharsetNameContext,0); - }; - - BINARY_SYMBOL() { - return this.getToken(SQLSelectParser.BINARY_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterCharsetWithOptBinary(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitCharsetWithOptBinary(this); - } - } - - -} - - - -class AsciiContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_ascii; - } - - ASCII_SYMBOL() { - return this.getToken(SQLSelectParser.ASCII_SYMBOL, 0); - }; - - BINARY_SYMBOL() { - return this.getToken(SQLSelectParser.BINARY_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterAscii(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitAscii(this); - } - } - - -} - - - -class UnicodeContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_unicode; - } - - UNICODE_SYMBOL() { - return this.getToken(SQLSelectParser.UNICODE_SYMBOL, 0); - }; - - BINARY_SYMBOL() { - return this.getToken(SQLSelectParser.BINARY_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterUnicode(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitUnicode(this); - } - } - - -} - - - -class WsNumCodepointsContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_wsNumCodepoints; - } - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - real_ulong_number() { - return this.getTypedRuleContext(Real_ulong_numberContext,0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterWsNumCodepoints(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitWsNumCodepoints(this); - } - } - - -} - - - -class TypeDatetimePrecisionContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_typeDatetimePrecision; - } - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - INT_NUMBER() { - return this.getToken(SQLSelectParser.INT_NUMBER, 0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterTypeDatetimePrecision(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitTypeDatetimePrecision(this); - } - } - - -} - - - -class CharsetNameContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_charsetName; - } - - textOrIdentifier() { - return this.getTypedRuleContext(TextOrIdentifierContext,0); - }; - - BINARY_SYMBOL() { - return this.getToken(SQLSelectParser.BINARY_SYMBOL, 0); - }; - - DEFAULT_SYMBOL() { - return this.getToken(SQLSelectParser.DEFAULT_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterCharsetName(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitCharsetName(this); - } - } - - -} - - - -class CollationNameContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_collationName; - } - - textOrIdentifier() { - return this.getTypedRuleContext(TextOrIdentifierContext,0); - }; - - DEFAULT_SYMBOL() { - return this.getToken(SQLSelectParser.DEFAULT_SYMBOL, 0); - }; - - BINARY_SYMBOL() { - return this.getToken(SQLSelectParser.BINARY_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterCollationName(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitCollationName(this); - } - } - - -} - - - -class CollateContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_collate; - } - - COLLATE_SYMBOL() { - return this.getToken(SQLSelectParser.COLLATE_SYMBOL, 0); - }; - - collationName() { - return this.getTypedRuleContext(CollationNameContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterCollate(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitCollate(this); - } - } - - -} - - - -class CharsetClauseContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_charsetClause; - } - - charset() { - return this.getTypedRuleContext(CharsetContext,0); - }; - - charsetName() { - return this.getTypedRuleContext(CharsetNameContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterCharsetClause(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitCharsetClause(this); - } - } - - -} - - - -class FieldsClauseContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_fieldsClause; - } - - COLUMNS_SYMBOL() { - return this.getToken(SQLSelectParser.COLUMNS_SYMBOL, 0); - }; - - fieldTerm = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(FieldTermContext); - } else { - return this.getTypedRuleContext(FieldTermContext,i); - } - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterFieldsClause(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitFieldsClause(this); - } - } - - -} - - - -class FieldTermContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_fieldTerm; - } - - TERMINATED_SYMBOL() { - return this.getToken(SQLSelectParser.TERMINATED_SYMBOL, 0); - }; - - BY_SYMBOL() { - return this.getToken(SQLSelectParser.BY_SYMBOL, 0); - }; - - textString() { - return this.getTypedRuleContext(TextStringContext,0); - }; - - ENCLOSED_SYMBOL() { - return this.getToken(SQLSelectParser.ENCLOSED_SYMBOL, 0); - }; - - OPTIONALLY_SYMBOL() { - return this.getToken(SQLSelectParser.OPTIONALLY_SYMBOL, 0); - }; - - ESCAPED_SYMBOL() { - return this.getToken(SQLSelectParser.ESCAPED_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterFieldTerm(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitFieldTerm(this); - } - } - - -} - - - -class LinesClauseContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_linesClause; - } - - LINES_SYMBOL() { - return this.getToken(SQLSelectParser.LINES_SYMBOL, 0); - }; - - lineTerm = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(LineTermContext); - } else { - return this.getTypedRuleContext(LineTermContext,i); - } - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterLinesClause(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitLinesClause(this); - } - } - - -} - - - -class LineTermContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_lineTerm; - } - - BY_SYMBOL() { - return this.getToken(SQLSelectParser.BY_SYMBOL, 0); - }; - - textString() { - return this.getTypedRuleContext(TextStringContext,0); - }; - - TERMINATED_SYMBOL() { - return this.getToken(SQLSelectParser.TERMINATED_SYMBOL, 0); - }; - - STARTING_SYMBOL() { - return this.getToken(SQLSelectParser.STARTING_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterLineTerm(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitLineTerm(this); - } - } - - -} - - - -class UsePartitionContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_usePartition; - } - - PARTITION_SYMBOL() { - return this.getToken(SQLSelectParser.PARTITION_SYMBOL, 0); - }; - - identifierListWithParentheses() { - return this.getTypedRuleContext(IdentifierListWithParenthesesContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterUsePartition(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitUsePartition(this); - } - } - - -} - - - -class ColumnInternalRefListContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_columnInternalRefList; - } - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - identifier = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(IdentifierContext); - } else { - return this.getTypedRuleContext(IdentifierContext,i); - } - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - COMMA_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.COMMA_SYMBOL); - } else { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, i); - } - }; - - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterColumnInternalRefList(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitColumnInternalRefList(this); - } - } - - -} - - - -class TableAliasRefListContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_tableAliasRefList; - } - - qualifiedIdentifier = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(QualifiedIdentifierContext); - } else { - return this.getTypedRuleContext(QualifiedIdentifierContext,i); - } - }; - - COMMA_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.COMMA_SYMBOL); - } else { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, i); - } - }; - - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterTableAliasRefList(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitTableAliasRefList(this); - } - } - - -} - - - -class PureIdentifierContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_pureIdentifier; - } - - IDENTIFIER() { - return this.getToken(SQLSelectParser.IDENTIFIER, 0); - }; - - BACK_TICK_QUOTED_ID() { - return this.getToken(SQLSelectParser.BACK_TICK_QUOTED_ID, 0); - }; - - SINGLE_QUOTED_TEXT() { - return this.getToken(SQLSelectParser.SINGLE_QUOTED_TEXT, 0); - }; - - DOUBLE_QUOTED_TEXT() { - return this.getToken(SQLSelectParser.DOUBLE_QUOTED_TEXT, 0); - }; - - BRACKET_QUOTED_TEXT() { - return this.getToken(SQLSelectParser.BRACKET_QUOTED_TEXT, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterPureIdentifier(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitPureIdentifier(this); - } - } - - -} - - - -class IdentifierContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_identifier; - } - - pureIdentifier() { - return this.getTypedRuleContext(PureIdentifierContext,0); - }; - - identifierKeyword() { - return this.getTypedRuleContext(IdentifierKeywordContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterIdentifier(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitIdentifier(this); - } - } - - -} - - - -class IdentifierListContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_identifierList; - } - - identifier = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(IdentifierContext); - } else { - return this.getTypedRuleContext(IdentifierContext,i); - } - }; - - COMMA_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.COMMA_SYMBOL); - } else { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, i); - } - }; - - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterIdentifierList(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitIdentifierList(this); - } - } - - -} - - - -class IdentifierListWithParenthesesContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_identifierListWithParentheses; - } - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - identifierList() { - return this.getTypedRuleContext(IdentifierListContext,0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterIdentifierListWithParentheses(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitIdentifierListWithParentheses(this); - } - } - - -} - - - -class QualifiedIdentifierContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_qualifiedIdentifier; - } - - identifier = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(IdentifierContext); - } else { - return this.getTypedRuleContext(IdentifierContext,i); - } - }; - - DOT_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.DOT_SYMBOL); - } else { - return this.getToken(SQLSelectParser.DOT_SYMBOL, i); - } - }; - - - MULT_OPERATOR() { - return this.getToken(SQLSelectParser.MULT_OPERATOR, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterQualifiedIdentifier(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitQualifiedIdentifier(this); - } - } - - -} - - - -class DotIdentifierContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_dotIdentifier; - } - - DOT_SYMBOL() { - return this.getToken(SQLSelectParser.DOT_SYMBOL, 0); - }; - - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterDotIdentifier(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitDotIdentifier(this); - } - } - - -} - - - -class Ulong_numberContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_ulong_number; - } - - INT_NUMBER() { - return this.getToken(SQLSelectParser.INT_NUMBER, 0); - }; - - HEX_NUMBER() { - return this.getToken(SQLSelectParser.HEX_NUMBER, 0); - }; - - DECIMAL_NUMBER() { - return this.getToken(SQLSelectParser.DECIMAL_NUMBER, 0); - }; - - FLOAT_NUMBER() { - return this.getToken(SQLSelectParser.FLOAT_NUMBER, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterUlong_number(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitUlong_number(this); - } - } - - -} - - - -class Real_ulong_numberContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_real_ulong_number; - } - - INT_NUMBER() { - return this.getToken(SQLSelectParser.INT_NUMBER, 0); - }; - - HEX_NUMBER() { - return this.getToken(SQLSelectParser.HEX_NUMBER, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterReal_ulong_number(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitReal_ulong_number(this); - } - } - - -} - - - -class Ulonglong_numberContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_ulonglong_number; - } - - INT_NUMBER() { - return this.getToken(SQLSelectParser.INT_NUMBER, 0); - }; - - DECIMAL_NUMBER() { - return this.getToken(SQLSelectParser.DECIMAL_NUMBER, 0); - }; - - FLOAT_NUMBER() { - return this.getToken(SQLSelectParser.FLOAT_NUMBER, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterUlonglong_number(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitUlonglong_number(this); - } - } - - -} - - - -class Real_ulonglong_numberContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_real_ulonglong_number; - } - - INT_NUMBER() { - return this.getToken(SQLSelectParser.INT_NUMBER, 0); - }; - - HEX_NUMBER() { - return this.getToken(SQLSelectParser.HEX_NUMBER, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterReal_ulonglong_number(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitReal_ulonglong_number(this); - } - } - - -} - - - -class LiteralContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_literal; - } - - textLiteral() { - return this.getTypedRuleContext(TextLiteralContext,0); - }; - - numLiteral() { - return this.getTypedRuleContext(NumLiteralContext,0); - }; - - temporalLiteral() { - return this.getTypedRuleContext(TemporalLiteralContext,0); - }; - - nullLiteral() { - return this.getTypedRuleContext(NullLiteralContext,0); - }; - - boolLiteral() { - return this.getTypedRuleContext(BoolLiteralContext,0); - }; - - HEX_NUMBER() { - return this.getToken(SQLSelectParser.HEX_NUMBER, 0); - }; - - BIN_NUMBER() { - return this.getToken(SQLSelectParser.BIN_NUMBER, 0); - }; - - UNDERSCORE_CHARSET() { - return this.getToken(SQLSelectParser.UNDERSCORE_CHARSET, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterLiteral(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitLiteral(this); - } - } - - -} - - - -class StringListContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_stringList; - } - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - textString = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(TextStringContext); - } else { - return this.getTypedRuleContext(TextStringContext,i); - } - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - COMMA_SYMBOL = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.COMMA_SYMBOL); - } else { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, i); - } - }; - - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterStringList(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitStringList(this); - } - } - - -} - - - -class TextStringLiteralContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_textStringLiteral; - } - - SINGLE_QUOTED_TEXT() { - return this.getToken(SQLSelectParser.SINGLE_QUOTED_TEXT, 0); - }; - - DOUBLE_QUOTED_TEXT() { - return this.getToken(SQLSelectParser.DOUBLE_QUOTED_TEXT, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterTextStringLiteral(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitTextStringLiteral(this); - } - } - - -} - - - -class TextStringContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_textString; - } - - textStringLiteral() { - return this.getTypedRuleContext(TextStringLiteralContext,0); - }; - - HEX_NUMBER() { - return this.getToken(SQLSelectParser.HEX_NUMBER, 0); - }; - - BIN_NUMBER() { - return this.getToken(SQLSelectParser.BIN_NUMBER, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterTextString(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitTextString(this); - } - } - - -} - - - -class TextLiteralContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_textLiteral; - } - - textStringLiteral = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTypedRuleContexts(TextStringLiteralContext); - } else { - return this.getTypedRuleContext(TextStringLiteralContext,i); - } - }; - - NCHAR_TEXT() { - return this.getToken(SQLSelectParser.NCHAR_TEXT, 0); - }; - - UNDERSCORE_CHARSET() { - return this.getToken(SQLSelectParser.UNDERSCORE_CHARSET, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterTextLiteral(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitTextLiteral(this); - } - } - - -} - - - -class NumLiteralContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_numLiteral; - } - - INT_NUMBER() { - return this.getToken(SQLSelectParser.INT_NUMBER, 0); - }; - - DECIMAL_NUMBER() { - return this.getToken(SQLSelectParser.DECIMAL_NUMBER, 0); - }; - - FLOAT_NUMBER() { - return this.getToken(SQLSelectParser.FLOAT_NUMBER, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterNumLiteral(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitNumLiteral(this); - } - } - - -} - - - -class BoolLiteralContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_boolLiteral; - } - - TRUE_SYMBOL() { - return this.getToken(SQLSelectParser.TRUE_SYMBOL, 0); - }; - - FALSE_SYMBOL() { - return this.getToken(SQLSelectParser.FALSE_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterBoolLiteral(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitBoolLiteral(this); - } - } - - -} - - - -class NullLiteralContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_nullLiteral; - } - - NULL_SYMBOL() { - return this.getToken(SQLSelectParser.NULL_SYMBOL, 0); - }; - - NULL2_SYMBOL() { - return this.getToken(SQLSelectParser.NULL2_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterNullLiteral(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitNullLiteral(this); - } - } - - -} - - - -class TemporalLiteralContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_temporalLiteral; - } - - DATE_SYMBOL() { - return this.getToken(SQLSelectParser.DATE_SYMBOL, 0); - }; - - SINGLE_QUOTED_TEXT() { - return this.getToken(SQLSelectParser.SINGLE_QUOTED_TEXT, 0); - }; - - TIME_SYMBOL() { - return this.getToken(SQLSelectParser.TIME_SYMBOL, 0); - }; - - TIMESTAMP_SYMBOL() { - return this.getToken(SQLSelectParser.TIMESTAMP_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterTemporalLiteral(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitTemporalLiteral(this); - } - } - - -} - - - -class FloatOptionsContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_floatOptions; - } - - fieldLength() { - return this.getTypedRuleContext(FieldLengthContext,0); - }; - - precision() { - return this.getTypedRuleContext(PrecisionContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterFloatOptions(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitFloatOptions(this); - } - } - - -} - - - -class PrecisionContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_precision; - } - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - INT_NUMBER = function(i) { - if(i===undefined) { - i = null; - } - if(i===null) { - return this.getTokens(SQLSelectParser.INT_NUMBER); - } else { - return this.getToken(SQLSelectParser.INT_NUMBER, i); - } - }; - - - COMMA_SYMBOL() { - return this.getToken(SQLSelectParser.COMMA_SYMBOL, 0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterPrecision(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitPrecision(this); - } - } - - -} - - - -class TextOrIdentifierContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_textOrIdentifier; - } - - identifier() { - return this.getTypedRuleContext(IdentifierContext,0); - }; - - textStringLiteral() { - return this.getTypedRuleContext(TextStringLiteralContext,0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterTextOrIdentifier(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitTextOrIdentifier(this); - } - } - - -} - - - -class ParenthesesContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_parentheses; - } - - OPEN_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.OPEN_PAR_SYMBOL, 0); - }; - - CLOSE_PAR_SYMBOL() { - return this.getToken(SQLSelectParser.CLOSE_PAR_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterParentheses(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitParentheses(this); - } - } - - -} - - - -class EqualContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_equal; - } - - EQUAL_OPERATOR() { - return this.getToken(SQLSelectParser.EQUAL_OPERATOR, 0); - }; - - ASSIGN_OPERATOR() { - return this.getToken(SQLSelectParser.ASSIGN_OPERATOR, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterEqual(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitEqual(this); - } - } - - -} - - - -class VarIdentTypeContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_varIdentType; - } - - GLOBAL_SYMBOL() { - return this.getToken(SQLSelectParser.GLOBAL_SYMBOL, 0); - }; - - DOT_SYMBOL() { - return this.getToken(SQLSelectParser.DOT_SYMBOL, 0); - }; - - LOCAL_SYMBOL() { - return this.getToken(SQLSelectParser.LOCAL_SYMBOL, 0); - }; - - SESSION_SYMBOL() { - return this.getToken(SQLSelectParser.SESSION_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterVarIdentType(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitVarIdentType(this); - } - } - - -} - - - -class IdentifierKeywordContext extends antlr4.ParserRuleContext { - - constructor(parser, parent, invokingState) { - if(parent===undefined) { - parent = null; - } - if(invokingState===undefined || invokingState===null) { - invokingState = -1; - } - super(parent, invokingState); - this.parser = parser; - this.ruleIndex = SQLSelectParser.RULE_identifierKeyword; - } - - TINYINT_SYMBOL() { - return this.getToken(SQLSelectParser.TINYINT_SYMBOL, 0); - }; - - SMALLINT_SYMBOL() { - return this.getToken(SQLSelectParser.SMALLINT_SYMBOL, 0); - }; - - MEDIUMINT_SYMBOL() { - return this.getToken(SQLSelectParser.MEDIUMINT_SYMBOL, 0); - }; - - INT_SYMBOL() { - return this.getToken(SQLSelectParser.INT_SYMBOL, 0); - }; - - BIGINT_SYMBOL() { - return this.getToken(SQLSelectParser.BIGINT_SYMBOL, 0); - }; - - SECOND_SYMBOL() { - return this.getToken(SQLSelectParser.SECOND_SYMBOL, 0); - }; - - MINUTE_SYMBOL() { - return this.getToken(SQLSelectParser.MINUTE_SYMBOL, 0); - }; - - HOUR_SYMBOL() { - return this.getToken(SQLSelectParser.HOUR_SYMBOL, 0); - }; - - DAY_SYMBOL() { - return this.getToken(SQLSelectParser.DAY_SYMBOL, 0); - }; - - WEEK_SYMBOL() { - return this.getToken(SQLSelectParser.WEEK_SYMBOL, 0); - }; - - MONTH_SYMBOL() { - return this.getToken(SQLSelectParser.MONTH_SYMBOL, 0); - }; - - QUARTER_SYMBOL() { - return this.getToken(SQLSelectParser.QUARTER_SYMBOL, 0); - }; - - YEAR_SYMBOL() { - return this.getToken(SQLSelectParser.YEAR_SYMBOL, 0); - }; - - DEFAULT_SYMBOL() { - return this.getToken(SQLSelectParser.DEFAULT_SYMBOL, 0); - }; - - UNION_SYMBOL() { - return this.getToken(SQLSelectParser.UNION_SYMBOL, 0); - }; - - SELECT_SYMBOL() { - return this.getToken(SQLSelectParser.SELECT_SYMBOL, 0); - }; - - ALL_SYMBOL() { - return this.getToken(SQLSelectParser.ALL_SYMBOL, 0); - }; - - DISTINCT_SYMBOL() { - return this.getToken(SQLSelectParser.DISTINCT_SYMBOL, 0); - }; - - STRAIGHT_JOIN_SYMBOL() { - return this.getToken(SQLSelectParser.STRAIGHT_JOIN_SYMBOL, 0); - }; - - HIGH_PRIORITY_SYMBOL() { - return this.getToken(SQLSelectParser.HIGH_PRIORITY_SYMBOL, 0); - }; - - SQL_SMALL_RESULT_SYMBOL() { - return this.getToken(SQLSelectParser.SQL_SMALL_RESULT_SYMBOL, 0); - }; - - SQL_BIG_RESULT_SYMBOL() { - return this.getToken(SQLSelectParser.SQL_BIG_RESULT_SYMBOL, 0); - }; - - SQL_BUFFER_RESULT_SYMBOL() { - return this.getToken(SQLSelectParser.SQL_BUFFER_RESULT_SYMBOL, 0); - }; - - SQL_CALC_FOUND_ROWS_SYMBOL() { - return this.getToken(SQLSelectParser.SQL_CALC_FOUND_ROWS_SYMBOL, 0); - }; - - LIMIT_SYMBOL() { - return this.getToken(SQLSelectParser.LIMIT_SYMBOL, 0); - }; - - OFFSET_SYMBOL() { - return this.getToken(SQLSelectParser.OFFSET_SYMBOL, 0); - }; - - INTO_SYMBOL() { - return this.getToken(SQLSelectParser.INTO_SYMBOL, 0); - }; - - OUTFILE_SYMBOL() { - return this.getToken(SQLSelectParser.OUTFILE_SYMBOL, 0); - }; - - DUMPFILE_SYMBOL() { - return this.getToken(SQLSelectParser.DUMPFILE_SYMBOL, 0); - }; - - PROCEDURE_SYMBOL() { - return this.getToken(SQLSelectParser.PROCEDURE_SYMBOL, 0); - }; - - ANALYSE_SYMBOL() { - return this.getToken(SQLSelectParser.ANALYSE_SYMBOL, 0); - }; - - HAVING_SYMBOL() { - return this.getToken(SQLSelectParser.HAVING_SYMBOL, 0); - }; - - WINDOW_SYMBOL() { - return this.getToken(SQLSelectParser.WINDOW_SYMBOL, 0); - }; - - AS_SYMBOL() { - return this.getToken(SQLSelectParser.AS_SYMBOL, 0); - }; - - PARTITION_SYMBOL() { - return this.getToken(SQLSelectParser.PARTITION_SYMBOL, 0); - }; - - BY_SYMBOL() { - return this.getToken(SQLSelectParser.BY_SYMBOL, 0); - }; - - ROWS_SYMBOL() { - return this.getToken(SQLSelectParser.ROWS_SYMBOL, 0); - }; - - RANGE_SYMBOL() { - return this.getToken(SQLSelectParser.RANGE_SYMBOL, 0); - }; - - GROUPS_SYMBOL() { - return this.getToken(SQLSelectParser.GROUPS_SYMBOL, 0); - }; - - UNBOUNDED_SYMBOL() { - return this.getToken(SQLSelectParser.UNBOUNDED_SYMBOL, 0); - }; - - PRECEDING_SYMBOL() { - return this.getToken(SQLSelectParser.PRECEDING_SYMBOL, 0); - }; - - INTERVAL_SYMBOL() { - return this.getToken(SQLSelectParser.INTERVAL_SYMBOL, 0); - }; - - CURRENT_SYMBOL() { - return this.getToken(SQLSelectParser.CURRENT_SYMBOL, 0); - }; - - ROW_SYMBOL() { - return this.getToken(SQLSelectParser.ROW_SYMBOL, 0); - }; - - BETWEEN_SYMBOL() { - return this.getToken(SQLSelectParser.BETWEEN_SYMBOL, 0); - }; - - AND_SYMBOL() { - return this.getToken(SQLSelectParser.AND_SYMBOL, 0); - }; - - FOLLOWING_SYMBOL() { - return this.getToken(SQLSelectParser.FOLLOWING_SYMBOL, 0); - }; - - EXCLUDE_SYMBOL() { - return this.getToken(SQLSelectParser.EXCLUDE_SYMBOL, 0); - }; - - GROUP_SYMBOL() { - return this.getToken(SQLSelectParser.GROUP_SYMBOL, 0); - }; - - TIES_SYMBOL() { - return this.getToken(SQLSelectParser.TIES_SYMBOL, 0); - }; - - NO_SYMBOL() { - return this.getToken(SQLSelectParser.NO_SYMBOL, 0); - }; - - OTHERS_SYMBOL() { - return this.getToken(SQLSelectParser.OTHERS_SYMBOL, 0); - }; - - WITH_SYMBOL() { - return this.getToken(SQLSelectParser.WITH_SYMBOL, 0); - }; - - RECURSIVE_SYMBOL() { - return this.getToken(SQLSelectParser.RECURSIVE_SYMBOL, 0); - }; - - ROLLUP_SYMBOL() { - return this.getToken(SQLSelectParser.ROLLUP_SYMBOL, 0); - }; - - CUBE_SYMBOL() { - return this.getToken(SQLSelectParser.CUBE_SYMBOL, 0); - }; - - ORDER_SYMBOL() { - return this.getToken(SQLSelectParser.ORDER_SYMBOL, 0); - }; - - ASC_SYMBOL() { - return this.getToken(SQLSelectParser.ASC_SYMBOL, 0); - }; - - DESC_SYMBOL() { - return this.getToken(SQLSelectParser.DESC_SYMBOL, 0); - }; - - FROM_SYMBOL() { - return this.getToken(SQLSelectParser.FROM_SYMBOL, 0); - }; - - DUAL_SYMBOL() { - return this.getToken(SQLSelectParser.DUAL_SYMBOL, 0); - }; - - VALUES_SYMBOL() { - return this.getToken(SQLSelectParser.VALUES_SYMBOL, 0); - }; - - TABLE_SYMBOL() { - return this.getToken(SQLSelectParser.TABLE_SYMBOL, 0); - }; - - SQL_NO_CACHE_SYMBOL() { - return this.getToken(SQLSelectParser.SQL_NO_CACHE_SYMBOL, 0); - }; - - SQL_CACHE_SYMBOL() { - return this.getToken(SQLSelectParser.SQL_CACHE_SYMBOL, 0); - }; - - MAX_STATEMENT_TIME_SYMBOL() { - return this.getToken(SQLSelectParser.MAX_STATEMENT_TIME_SYMBOL, 0); - }; - - FOR_SYMBOL() { - return this.getToken(SQLSelectParser.FOR_SYMBOL, 0); - }; - - OF_SYMBOL() { - return this.getToken(SQLSelectParser.OF_SYMBOL, 0); - }; - - LOCK_SYMBOL() { - return this.getToken(SQLSelectParser.LOCK_SYMBOL, 0); - }; - - IN_SYMBOL() { - return this.getToken(SQLSelectParser.IN_SYMBOL, 0); - }; - - SHARE_SYMBOL() { - return this.getToken(SQLSelectParser.SHARE_SYMBOL, 0); - }; - - MODE_SYMBOL() { - return this.getToken(SQLSelectParser.MODE_SYMBOL, 0); - }; - - UPDATE_SYMBOL() { - return this.getToken(SQLSelectParser.UPDATE_SYMBOL, 0); - }; - - SKIP_SYMBOL() { - return this.getToken(SQLSelectParser.SKIP_SYMBOL, 0); - }; - - LOCKED_SYMBOL() { - return this.getToken(SQLSelectParser.LOCKED_SYMBOL, 0); - }; - - NOWAIT_SYMBOL() { - return this.getToken(SQLSelectParser.NOWAIT_SYMBOL, 0); - }; - - WHERE_SYMBOL() { - return this.getToken(SQLSelectParser.WHERE_SYMBOL, 0); - }; - - OJ_SYMBOL() { - return this.getToken(SQLSelectParser.OJ_SYMBOL, 0); - }; - - ON_SYMBOL() { - return this.getToken(SQLSelectParser.ON_SYMBOL, 0); - }; - - USING_SYMBOL() { - return this.getToken(SQLSelectParser.USING_SYMBOL, 0); - }; - - NATURAL_SYMBOL() { - return this.getToken(SQLSelectParser.NATURAL_SYMBOL, 0); - }; - - INNER_SYMBOL() { - return this.getToken(SQLSelectParser.INNER_SYMBOL, 0); - }; - - JOIN_SYMBOL() { - return this.getToken(SQLSelectParser.JOIN_SYMBOL, 0); - }; - - LEFT_SYMBOL() { - return this.getToken(SQLSelectParser.LEFT_SYMBOL, 0); - }; - - RIGHT_SYMBOL() { - return this.getToken(SQLSelectParser.RIGHT_SYMBOL, 0); - }; - - OUTER_SYMBOL() { - return this.getToken(SQLSelectParser.OUTER_SYMBOL, 0); - }; - - CROSS_SYMBOL() { - return this.getToken(SQLSelectParser.CROSS_SYMBOL, 0); - }; - - LATERAL_SYMBOL() { - return this.getToken(SQLSelectParser.LATERAL_SYMBOL, 0); - }; - - JSON_TABLE_SYMBOL() { - return this.getToken(SQLSelectParser.JSON_TABLE_SYMBOL, 0); - }; - - COLUMNS_SYMBOL() { - return this.getToken(SQLSelectParser.COLUMNS_SYMBOL, 0); - }; - - ORDINALITY_SYMBOL() { - return this.getToken(SQLSelectParser.ORDINALITY_SYMBOL, 0); - }; - - EXISTS_SYMBOL() { - return this.getToken(SQLSelectParser.EXISTS_SYMBOL, 0); - }; - - PATH_SYMBOL() { - return this.getToken(SQLSelectParser.PATH_SYMBOL, 0); - }; - - NESTED_SYMBOL() { - return this.getToken(SQLSelectParser.NESTED_SYMBOL, 0); - }; - - EMPTY_SYMBOL() { - return this.getToken(SQLSelectParser.EMPTY_SYMBOL, 0); - }; - - ERROR_SYMBOL() { - return this.getToken(SQLSelectParser.ERROR_SYMBOL, 0); - }; - - NULL_SYMBOL() { - return this.getToken(SQLSelectParser.NULL_SYMBOL, 0); - }; - - USE_SYMBOL() { - return this.getToken(SQLSelectParser.USE_SYMBOL, 0); - }; - - FORCE_SYMBOL() { - return this.getToken(SQLSelectParser.FORCE_SYMBOL, 0); - }; - - IGNORE_SYMBOL() { - return this.getToken(SQLSelectParser.IGNORE_SYMBOL, 0); - }; - - KEY_SYMBOL() { - return this.getToken(SQLSelectParser.KEY_SYMBOL, 0); - }; - - INDEX_SYMBOL() { - return this.getToken(SQLSelectParser.INDEX_SYMBOL, 0); - }; - - PRIMARY_SYMBOL() { - return this.getToken(SQLSelectParser.PRIMARY_SYMBOL, 0); - }; - - IS_SYMBOL() { - return this.getToken(SQLSelectParser.IS_SYMBOL, 0); - }; - - TRUE_SYMBOL() { - return this.getToken(SQLSelectParser.TRUE_SYMBOL, 0); - }; - - FALSE_SYMBOL() { - return this.getToken(SQLSelectParser.FALSE_SYMBOL, 0); - }; - - UNKNOWN_SYMBOL() { - return this.getToken(SQLSelectParser.UNKNOWN_SYMBOL, 0); - }; - - NOT_SYMBOL() { - return this.getToken(SQLSelectParser.NOT_SYMBOL, 0); - }; - - XOR_SYMBOL() { - return this.getToken(SQLSelectParser.XOR_SYMBOL, 0); - }; - - OR_SYMBOL() { - return this.getToken(SQLSelectParser.OR_SYMBOL, 0); - }; - - ANY_SYMBOL() { - return this.getToken(SQLSelectParser.ANY_SYMBOL, 0); - }; - - MEMBER_SYMBOL() { - return this.getToken(SQLSelectParser.MEMBER_SYMBOL, 0); - }; - - SOUNDS_SYMBOL() { - return this.getToken(SQLSelectParser.SOUNDS_SYMBOL, 0); - }; - - LIKE_SYMBOL() { - return this.getToken(SQLSelectParser.LIKE_SYMBOL, 0); - }; - - ESCAPE_SYMBOL() { - return this.getToken(SQLSelectParser.ESCAPE_SYMBOL, 0); - }; - - REGEXP_SYMBOL() { - return this.getToken(SQLSelectParser.REGEXP_SYMBOL, 0); - }; - - DIV_SYMBOL() { - return this.getToken(SQLSelectParser.DIV_SYMBOL, 0); - }; - - MOD_SYMBOL() { - return this.getToken(SQLSelectParser.MOD_SYMBOL, 0); - }; - - MATCH_SYMBOL() { - return this.getToken(SQLSelectParser.MATCH_SYMBOL, 0); - }; - - AGAINST_SYMBOL() { - return this.getToken(SQLSelectParser.AGAINST_SYMBOL, 0); - }; - - BINARY_SYMBOL() { - return this.getToken(SQLSelectParser.BINARY_SYMBOL, 0); - }; - - CAST_SYMBOL() { - return this.getToken(SQLSelectParser.CAST_SYMBOL, 0); - }; - - ARRAY_SYMBOL() { - return this.getToken(SQLSelectParser.ARRAY_SYMBOL, 0); - }; - - CASE_SYMBOL() { - return this.getToken(SQLSelectParser.CASE_SYMBOL, 0); - }; - - END_SYMBOL() { - return this.getToken(SQLSelectParser.END_SYMBOL, 0); - }; - - CONVERT_SYMBOL() { - return this.getToken(SQLSelectParser.CONVERT_SYMBOL, 0); - }; - - COLLATE_SYMBOL() { - return this.getToken(SQLSelectParser.COLLATE_SYMBOL, 0); - }; - - AVG_SYMBOL() { - return this.getToken(SQLSelectParser.AVG_SYMBOL, 0); - }; - - BIT_AND_SYMBOL() { - return this.getToken(SQLSelectParser.BIT_AND_SYMBOL, 0); - }; - - BIT_OR_SYMBOL() { - return this.getToken(SQLSelectParser.BIT_OR_SYMBOL, 0); - }; - - BIT_XOR_SYMBOL() { - return this.getToken(SQLSelectParser.BIT_XOR_SYMBOL, 0); - }; - - COUNT_SYMBOL() { - return this.getToken(SQLSelectParser.COUNT_SYMBOL, 0); - }; - - MIN_SYMBOL() { - return this.getToken(SQLSelectParser.MIN_SYMBOL, 0); - }; - - MAX_SYMBOL() { - return this.getToken(SQLSelectParser.MAX_SYMBOL, 0); - }; - - STD_SYMBOL() { - return this.getToken(SQLSelectParser.STD_SYMBOL, 0); - }; - - VARIANCE_SYMBOL() { - return this.getToken(SQLSelectParser.VARIANCE_SYMBOL, 0); - }; - - STDDEV_SAMP_SYMBOL() { - return this.getToken(SQLSelectParser.STDDEV_SAMP_SYMBOL, 0); - }; - - VAR_SAMP_SYMBOL() { - return this.getToken(SQLSelectParser.VAR_SAMP_SYMBOL, 0); - }; - - SUM_SYMBOL() { - return this.getToken(SQLSelectParser.SUM_SYMBOL, 0); - }; - - GROUP_CONCAT_SYMBOL() { - return this.getToken(SQLSelectParser.GROUP_CONCAT_SYMBOL, 0); - }; - - SEPARATOR_SYMBOL() { - return this.getToken(SQLSelectParser.SEPARATOR_SYMBOL, 0); - }; - - GROUPING_SYMBOL() { - return this.getToken(SQLSelectParser.GROUPING_SYMBOL, 0); - }; - - ROW_NUMBER_SYMBOL() { - return this.getToken(SQLSelectParser.ROW_NUMBER_SYMBOL, 0); - }; - - RANK_SYMBOL() { - return this.getToken(SQLSelectParser.RANK_SYMBOL, 0); - }; - - DENSE_RANK_SYMBOL() { - return this.getToken(SQLSelectParser.DENSE_RANK_SYMBOL, 0); - }; - - CUME_DIST_SYMBOL() { - return this.getToken(SQLSelectParser.CUME_DIST_SYMBOL, 0); - }; - - PERCENT_RANK_SYMBOL() { - return this.getToken(SQLSelectParser.PERCENT_RANK_SYMBOL, 0); - }; - - NTILE_SYMBOL() { - return this.getToken(SQLSelectParser.NTILE_SYMBOL, 0); - }; - - LEAD_SYMBOL() { - return this.getToken(SQLSelectParser.LEAD_SYMBOL, 0); - }; - - LAG_SYMBOL() { - return this.getToken(SQLSelectParser.LAG_SYMBOL, 0); - }; - - FIRST_VALUE_SYMBOL() { - return this.getToken(SQLSelectParser.FIRST_VALUE_SYMBOL, 0); - }; - - LAST_VALUE_SYMBOL() { - return this.getToken(SQLSelectParser.LAST_VALUE_SYMBOL, 0); - }; - - NTH_VALUE_SYMBOL() { - return this.getToken(SQLSelectParser.NTH_VALUE_SYMBOL, 0); - }; - - FIRST_SYMBOL() { - return this.getToken(SQLSelectParser.FIRST_SYMBOL, 0); - }; - - LAST_SYMBOL() { - return this.getToken(SQLSelectParser.LAST_SYMBOL, 0); - }; - - OVER_SYMBOL() { - return this.getToken(SQLSelectParser.OVER_SYMBOL, 0); - }; - - RESPECT_SYMBOL() { - return this.getToken(SQLSelectParser.RESPECT_SYMBOL, 0); - }; - - NULLS_SYMBOL() { - return this.getToken(SQLSelectParser.NULLS_SYMBOL, 0); - }; - - JSON_ARRAYAGG_SYMBOL() { - return this.getToken(SQLSelectParser.JSON_ARRAYAGG_SYMBOL, 0); - }; - - JSON_OBJECTAGG_SYMBOL() { - return this.getToken(SQLSelectParser.JSON_OBJECTAGG_SYMBOL, 0); - }; - - BOOLEAN_SYMBOL() { - return this.getToken(SQLSelectParser.BOOLEAN_SYMBOL, 0); - }; - - LANGUAGE_SYMBOL() { - return this.getToken(SQLSelectParser.LANGUAGE_SYMBOL, 0); - }; - - QUERY_SYMBOL() { - return this.getToken(SQLSelectParser.QUERY_SYMBOL, 0); - }; - - EXPANSION_SYMBOL() { - return this.getToken(SQLSelectParser.EXPANSION_SYMBOL, 0); - }; - - CHAR_SYMBOL() { - return this.getToken(SQLSelectParser.CHAR_SYMBOL, 0); - }; - - CURRENT_USER_SYMBOL() { - return this.getToken(SQLSelectParser.CURRENT_USER_SYMBOL, 0); - }; - - DATE_SYMBOL() { - return this.getToken(SQLSelectParser.DATE_SYMBOL, 0); - }; - - INSERT_SYMBOL() { - return this.getToken(SQLSelectParser.INSERT_SYMBOL, 0); - }; - - TIME_SYMBOL() { - return this.getToken(SQLSelectParser.TIME_SYMBOL, 0); - }; - - TIMESTAMP_SYMBOL() { - return this.getToken(SQLSelectParser.TIMESTAMP_SYMBOL, 0); - }; - - USER_SYMBOL() { - return this.getToken(SQLSelectParser.USER_SYMBOL, 0); - }; - - ADDDATE_SYMBOL() { - return this.getToken(SQLSelectParser.ADDDATE_SYMBOL, 0); - }; - - SUBDATE_SYMBOL() { - return this.getToken(SQLSelectParser.SUBDATE_SYMBOL, 0); - }; - - CURDATE_SYMBOL() { - return this.getToken(SQLSelectParser.CURDATE_SYMBOL, 0); - }; - - CURTIME_SYMBOL() { - return this.getToken(SQLSelectParser.CURTIME_SYMBOL, 0); - }; - - DATE_ADD_SYMBOL() { - return this.getToken(SQLSelectParser.DATE_ADD_SYMBOL, 0); - }; - - DATE_SUB_SYMBOL() { - return this.getToken(SQLSelectParser.DATE_SUB_SYMBOL, 0); - }; - - EXTRACT_SYMBOL() { - return this.getToken(SQLSelectParser.EXTRACT_SYMBOL, 0); - }; - - GET_FORMAT_SYMBOL() { - return this.getToken(SQLSelectParser.GET_FORMAT_SYMBOL, 0); - }; - - NOW_SYMBOL() { - return this.getToken(SQLSelectParser.NOW_SYMBOL, 0); - }; - - POSITION_SYMBOL() { - return this.getToken(SQLSelectParser.POSITION_SYMBOL, 0); - }; - - SYSDATE_SYMBOL() { - return this.getToken(SQLSelectParser.SYSDATE_SYMBOL, 0); - }; - - TIMESTAMP_ADD_SYMBOL() { - return this.getToken(SQLSelectParser.TIMESTAMP_ADD_SYMBOL, 0); - }; - - TIMESTAMP_DIFF_SYMBOL() { - return this.getToken(SQLSelectParser.TIMESTAMP_DIFF_SYMBOL, 0); - }; - - UTC_DATE_SYMBOL() { - return this.getToken(SQLSelectParser.UTC_DATE_SYMBOL, 0); - }; - - UTC_TIME_SYMBOL() { - return this.getToken(SQLSelectParser.UTC_TIME_SYMBOL, 0); - }; - - UTC_TIMESTAMP_SYMBOL() { - return this.getToken(SQLSelectParser.UTC_TIMESTAMP_SYMBOL, 0); - }; - - ASCII_SYMBOL() { - return this.getToken(SQLSelectParser.ASCII_SYMBOL, 0); - }; - - CHARSET_SYMBOL() { - return this.getToken(SQLSelectParser.CHARSET_SYMBOL, 0); - }; - - COALESCE_SYMBOL() { - return this.getToken(SQLSelectParser.COALESCE_SYMBOL, 0); - }; - - COLLATION_SYMBOL() { - return this.getToken(SQLSelectParser.COLLATION_SYMBOL, 0); - }; - - DATABASE_SYMBOL() { - return this.getToken(SQLSelectParser.DATABASE_SYMBOL, 0); - }; - - IF_SYMBOL() { - return this.getToken(SQLSelectParser.IF_SYMBOL, 0); - }; - - FORMAT_SYMBOL() { - return this.getToken(SQLSelectParser.FORMAT_SYMBOL, 0); - }; - - MICROSECOND_SYMBOL() { - return this.getToken(SQLSelectParser.MICROSECOND_SYMBOL, 0); - }; - - OLD_PASSWORD_SYMBOL() { - return this.getToken(SQLSelectParser.OLD_PASSWORD_SYMBOL, 0); - }; - - PASSWORD_SYMBOL() { - return this.getToken(SQLSelectParser.PASSWORD_SYMBOL, 0); - }; - - REPEAT_SYMBOL() { - return this.getToken(SQLSelectParser.REPEAT_SYMBOL, 0); - }; - - REPLACE_SYMBOL() { - return this.getToken(SQLSelectParser.REPLACE_SYMBOL, 0); - }; - - REVERSE_SYMBOL() { - return this.getToken(SQLSelectParser.REVERSE_SYMBOL, 0); - }; - - ROW_COUNT_SYMBOL() { - return this.getToken(SQLSelectParser.ROW_COUNT_SYMBOL, 0); - }; - - TRUNCATE_SYMBOL() { - return this.getToken(SQLSelectParser.TRUNCATE_SYMBOL, 0); - }; - - WEIGHT_STRING_SYMBOL() { - return this.getToken(SQLSelectParser.WEIGHT_STRING_SYMBOL, 0); - }; - - CONTAINS_SYMBOL() { - return this.getToken(SQLSelectParser.CONTAINS_SYMBOL, 0); - }; - - GEOMETRYCOLLECTION_SYMBOL() { - return this.getToken(SQLSelectParser.GEOMETRYCOLLECTION_SYMBOL, 0); - }; - - LINESTRING_SYMBOL() { - return this.getToken(SQLSelectParser.LINESTRING_SYMBOL, 0); - }; - - MULTILINESTRING_SYMBOL() { - return this.getToken(SQLSelectParser.MULTILINESTRING_SYMBOL, 0); - }; - - MULTIPOINT_SYMBOL() { - return this.getToken(SQLSelectParser.MULTIPOINT_SYMBOL, 0); - }; - - MULTIPOLYGON_SYMBOL() { - return this.getToken(SQLSelectParser.MULTIPOLYGON_SYMBOL, 0); - }; - - POINT_SYMBOL() { - return this.getToken(SQLSelectParser.POINT_SYMBOL, 0); - }; - - POLYGON_SYMBOL() { - return this.getToken(SQLSelectParser.POLYGON_SYMBOL, 0); - }; - - LEVEL_SYMBOL() { - return this.getToken(SQLSelectParser.LEVEL_SYMBOL, 0); - }; - - DATETIME_SYMBOL() { - return this.getToken(SQLSelectParser.DATETIME_SYMBOL, 0); - }; - - TRIM_SYMBOL() { - return this.getToken(SQLSelectParser.TRIM_SYMBOL, 0); - }; - - LEADING_SYMBOL() { - return this.getToken(SQLSelectParser.LEADING_SYMBOL, 0); - }; - - TRAILING_SYMBOL() { - return this.getToken(SQLSelectParser.TRAILING_SYMBOL, 0); - }; - - BOTH_SYMBOL() { - return this.getToken(SQLSelectParser.BOTH_SYMBOL, 0); - }; - - SUBSTRING_SYMBOL() { - return this.getToken(SQLSelectParser.SUBSTRING_SYMBOL, 0); - }; - - WHEN_SYMBOL() { - return this.getToken(SQLSelectParser.WHEN_SYMBOL, 0); - }; - - THEN_SYMBOL() { - return this.getToken(SQLSelectParser.THEN_SYMBOL, 0); - }; - - ELSE_SYMBOL() { - return this.getToken(SQLSelectParser.ELSE_SYMBOL, 0); - }; - - SIGNED_SYMBOL() { - return this.getToken(SQLSelectParser.SIGNED_SYMBOL, 0); - }; - - UNSIGNED_SYMBOL() { - return this.getToken(SQLSelectParser.UNSIGNED_SYMBOL, 0); - }; - - DECIMAL_SYMBOL() { - return this.getToken(SQLSelectParser.DECIMAL_SYMBOL, 0); - }; - - JSON_SYMBOL() { - return this.getToken(SQLSelectParser.JSON_SYMBOL, 0); - }; - - FLOAT_SYMBOL() { - return this.getToken(SQLSelectParser.FLOAT_SYMBOL, 0); - }; - - SET_SYMBOL() { - return this.getToken(SQLSelectParser.SET_SYMBOL, 0); - }; - - SECOND_MICROSECOND_SYMBOL() { - return this.getToken(SQLSelectParser.SECOND_MICROSECOND_SYMBOL, 0); - }; - - MINUTE_MICROSECOND_SYMBOL() { - return this.getToken(SQLSelectParser.MINUTE_MICROSECOND_SYMBOL, 0); - }; - - MINUTE_SECOND_SYMBOL() { - return this.getToken(SQLSelectParser.MINUTE_SECOND_SYMBOL, 0); - }; - - HOUR_MICROSECOND_SYMBOL() { - return this.getToken(SQLSelectParser.HOUR_MICROSECOND_SYMBOL, 0); - }; - - HOUR_SECOND_SYMBOL() { - return this.getToken(SQLSelectParser.HOUR_SECOND_SYMBOL, 0); - }; - - HOUR_MINUTE_SYMBOL() { - return this.getToken(SQLSelectParser.HOUR_MINUTE_SYMBOL, 0); - }; - - DAY_MICROSECOND_SYMBOL() { - return this.getToken(SQLSelectParser.DAY_MICROSECOND_SYMBOL, 0); - }; - - DAY_SECOND_SYMBOL() { - return this.getToken(SQLSelectParser.DAY_SECOND_SYMBOL, 0); - }; - - DAY_MINUTE_SYMBOL() { - return this.getToken(SQLSelectParser.DAY_MINUTE_SYMBOL, 0); - }; - - DAY_HOUR_SYMBOL() { - return this.getToken(SQLSelectParser.DAY_HOUR_SYMBOL, 0); - }; - - YEAR_MONTH_SYMBOL() { - return this.getToken(SQLSelectParser.YEAR_MONTH_SYMBOL, 0); - }; - - BTREE_SYMBOL() { - return this.getToken(SQLSelectParser.BTREE_SYMBOL, 0); - }; - - RTREE_SYMBOL() { - return this.getToken(SQLSelectParser.RTREE_SYMBOL, 0); - }; - - HASH_SYMBOL() { - return this.getToken(SQLSelectParser.HASH_SYMBOL, 0); - }; - - REAL_SYMBOL() { - return this.getToken(SQLSelectParser.REAL_SYMBOL, 0); - }; - - DOUBLE_SYMBOL() { - return this.getToken(SQLSelectParser.DOUBLE_SYMBOL, 0); - }; - - PRECISION_SYMBOL() { - return this.getToken(SQLSelectParser.PRECISION_SYMBOL, 0); - }; - - NUMERIC_SYMBOL() { - return this.getToken(SQLSelectParser.NUMERIC_SYMBOL, 0); - }; - - FIXED_SYMBOL() { - return this.getToken(SQLSelectParser.FIXED_SYMBOL, 0); - }; - - BIT_SYMBOL() { - return this.getToken(SQLSelectParser.BIT_SYMBOL, 0); - }; - - BOOL_SYMBOL() { - return this.getToken(SQLSelectParser.BOOL_SYMBOL, 0); - }; - - VARYING_SYMBOL() { - return this.getToken(SQLSelectParser.VARYING_SYMBOL, 0); - }; - - VARCHAR_SYMBOL() { - return this.getToken(SQLSelectParser.VARCHAR_SYMBOL, 0); - }; - - NATIONAL_SYMBOL() { - return this.getToken(SQLSelectParser.NATIONAL_SYMBOL, 0); - }; - - NVARCHAR_SYMBOL() { - return this.getToken(SQLSelectParser.NVARCHAR_SYMBOL, 0); - }; - - NCHAR_SYMBOL() { - return this.getToken(SQLSelectParser.NCHAR_SYMBOL, 0); - }; - - VARBINARY_SYMBOL() { - return this.getToken(SQLSelectParser.VARBINARY_SYMBOL, 0); - }; - - TINYBLOB_SYMBOL() { - return this.getToken(SQLSelectParser.TINYBLOB_SYMBOL, 0); - }; - - BLOB_SYMBOL() { - return this.getToken(SQLSelectParser.BLOB_SYMBOL, 0); - }; - - MEDIUMBLOB_SYMBOL() { - return this.getToken(SQLSelectParser.MEDIUMBLOB_SYMBOL, 0); - }; - - LONGBLOB_SYMBOL() { - return this.getToken(SQLSelectParser.LONGBLOB_SYMBOL, 0); - }; - - LONG_SYMBOL() { - return this.getToken(SQLSelectParser.LONG_SYMBOL, 0); - }; - - TINYTEXT_SYMBOL() { - return this.getToken(SQLSelectParser.TINYTEXT_SYMBOL, 0); - }; - - TEXT_SYMBOL() { - return this.getToken(SQLSelectParser.TEXT_SYMBOL, 0); - }; - - MEDIUMTEXT_SYMBOL() { - return this.getToken(SQLSelectParser.MEDIUMTEXT_SYMBOL, 0); - }; - - LONGTEXT_SYMBOL() { - return this.getToken(SQLSelectParser.LONGTEXT_SYMBOL, 0); - }; - - ENUM_SYMBOL() { - return this.getToken(SQLSelectParser.ENUM_SYMBOL, 0); - }; - - SERIAL_SYMBOL() { - return this.getToken(SQLSelectParser.SERIAL_SYMBOL, 0); - }; - - GEOMETRY_SYMBOL() { - return this.getToken(SQLSelectParser.GEOMETRY_SYMBOL, 0); - }; - - ZEROFILL_SYMBOL() { - return this.getToken(SQLSelectParser.ZEROFILL_SYMBOL, 0); - }; - - BYTE_SYMBOL() { - return this.getToken(SQLSelectParser.BYTE_SYMBOL, 0); - }; - - UNICODE_SYMBOL() { - return this.getToken(SQLSelectParser.UNICODE_SYMBOL, 0); - }; - - TERMINATED_SYMBOL() { - return this.getToken(SQLSelectParser.TERMINATED_SYMBOL, 0); - }; - - OPTIONALLY_SYMBOL() { - return this.getToken(SQLSelectParser.OPTIONALLY_SYMBOL, 0); - }; - - ENCLOSED_SYMBOL() { - return this.getToken(SQLSelectParser.ENCLOSED_SYMBOL, 0); - }; - - ESCAPED_SYMBOL() { - return this.getToken(SQLSelectParser.ESCAPED_SYMBOL, 0); - }; - - LINES_SYMBOL() { - return this.getToken(SQLSelectParser.LINES_SYMBOL, 0); - }; - - STARTING_SYMBOL() { - return this.getToken(SQLSelectParser.STARTING_SYMBOL, 0); - }; - - GLOBAL_SYMBOL() { - return this.getToken(SQLSelectParser.GLOBAL_SYMBOL, 0); - }; - - LOCAL_SYMBOL() { - return this.getToken(SQLSelectParser.LOCAL_SYMBOL, 0); - }; - - SESSION_SYMBOL() { - return this.getToken(SQLSelectParser.SESSION_SYMBOL, 0); - }; - - BYTE_INT_SYMBOL() { - return this.getToken(SQLSelectParser.BYTE_INT_SYMBOL, 0); - }; - - WITHOUT_SYMBOL() { - return this.getToken(SQLSelectParser.WITHOUT_SYMBOL, 0); - }; - - TIMESTAMP_LTZ_SYMBOL() { - return this.getToken(SQLSelectParser.TIMESTAMP_LTZ_SYMBOL, 0); - }; - - TIMESTAMP_NTZ_SYMBOL() { - return this.getToken(SQLSelectParser.TIMESTAMP_NTZ_SYMBOL, 0); - }; - - ZONE_SYMBOL() { - return this.getToken(SQLSelectParser.ZONE_SYMBOL, 0); - }; - - STRING_SYMBOL() { - return this.getToken(SQLSelectParser.STRING_SYMBOL, 0); - }; - - FLOAT_SYMBOL_4() { - return this.getToken(SQLSelectParser.FLOAT_SYMBOL_4, 0); - }; - - FLOAT_SYMBOL_8() { - return this.getToken(SQLSelectParser.FLOAT_SYMBOL_8, 0); - }; - - NUMBER_SYMBOL() { - return this.getToken(SQLSelectParser.NUMBER_SYMBOL, 0); - }; - - VARIANT_SYMBOL() { - return this.getToken(SQLSelectParser.VARIANT_SYMBOL, 0); - }; - - OBJECT_SYMBOL() { - return this.getToken(SQLSelectParser.OBJECT_SYMBOL, 0); - }; - - GEOGRAPHY_SYMBOL() { - return this.getToken(SQLSelectParser.GEOGRAPHY_SYMBOL, 0); - }; - - enterRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.enterIdentifierKeyword(this); - } - } - - exitRule(listener) { - if(listener instanceof SQLSelectParserListener ) { - listener.exitIdentifierKeyword(this); - } - } - - -} - - - - -SQLSelectParser.QueryContext = QueryContext; -SQLSelectParser.ValuesContext = ValuesContext; -SQLSelectParser.SelectStatementContext = SelectStatementContext; -SQLSelectParser.SelectStatementWithIntoContext = SelectStatementWithIntoContext; -SQLSelectParser.QueryExpressionContext = QueryExpressionContext; -SQLSelectParser.QueryExpressionBodyContext = QueryExpressionBodyContext; -SQLSelectParser.QueryExpressionParensContext = QueryExpressionParensContext; -SQLSelectParser.QueryPrimaryContext = QueryPrimaryContext; -SQLSelectParser.QuerySpecificationContext = QuerySpecificationContext; -SQLSelectParser.SubqueryContext = SubqueryContext; -SQLSelectParser.QuerySpecOptionContext = QuerySpecOptionContext; -SQLSelectParser.LimitClauseContext = LimitClauseContext; -SQLSelectParser.LimitOptionsContext = LimitOptionsContext; -SQLSelectParser.LimitOptionContext = LimitOptionContext; -SQLSelectParser.IntoClauseContext = IntoClauseContext; -SQLSelectParser.ProcedureAnalyseClauseContext = ProcedureAnalyseClauseContext; -SQLSelectParser.HavingClauseContext = HavingClauseContext; -SQLSelectParser.WindowClauseContext = WindowClauseContext; -SQLSelectParser.WindowDefinitionContext = WindowDefinitionContext; -SQLSelectParser.WindowSpecContext = WindowSpecContext; -SQLSelectParser.WindowSpecDetailsContext = WindowSpecDetailsContext; -SQLSelectParser.WindowFrameClauseContext = WindowFrameClauseContext; -SQLSelectParser.WindowFrameUnitsContext = WindowFrameUnitsContext; -SQLSelectParser.WindowFrameExtentContext = WindowFrameExtentContext; -SQLSelectParser.WindowFrameStartContext = WindowFrameStartContext; -SQLSelectParser.WindowFrameBetweenContext = WindowFrameBetweenContext; -SQLSelectParser.WindowFrameBoundContext = WindowFrameBoundContext; -SQLSelectParser.WindowFrameExclusionContext = WindowFrameExclusionContext; -SQLSelectParser.WithClauseContext = WithClauseContext; -SQLSelectParser.CommonTableExpressionContext = CommonTableExpressionContext; -SQLSelectParser.GroupByClauseContext = GroupByClauseContext; -SQLSelectParser.OlapOptionContext = OlapOptionContext; -SQLSelectParser.OrderClauseContext = OrderClauseContext; -SQLSelectParser.DirectionContext = DirectionContext; -SQLSelectParser.FromClauseContext = FromClauseContext; -SQLSelectParser.TableReferenceListContext = TableReferenceListContext; -SQLSelectParser.TableValueConstructorContext = TableValueConstructorContext; -SQLSelectParser.ExplicitTableContext = ExplicitTableContext; -SQLSelectParser.RowValueExplicitContext = RowValueExplicitContext; -SQLSelectParser.SelectOptionContext = SelectOptionContext; -SQLSelectParser.LockingClauseListContext = LockingClauseListContext; -SQLSelectParser.LockingClauseContext = LockingClauseContext; -SQLSelectParser.LockStrenghContext = LockStrenghContext; -SQLSelectParser.LockedRowActionContext = LockedRowActionContext; -SQLSelectParser.SelectItemListContext = SelectItemListContext; -SQLSelectParser.SelectItemContext = SelectItemContext; -SQLSelectParser.SelectAliasContext = SelectAliasContext; -SQLSelectParser.WhereClauseContext = WhereClauseContext; -SQLSelectParser.TableReferenceContext = TableReferenceContext; -SQLSelectParser.EscapedTableReferenceContext = EscapedTableReferenceContext; -SQLSelectParser.JoinedTableContext = JoinedTableContext; -SQLSelectParser.NaturalJoinTypeContext = NaturalJoinTypeContext; -SQLSelectParser.InnerJoinTypeContext = InnerJoinTypeContext; -SQLSelectParser.OuterJoinTypeContext = OuterJoinTypeContext; -SQLSelectParser.TableFactorContext = TableFactorContext; -SQLSelectParser.SingleTableContext = SingleTableContext; -SQLSelectParser.SingleTableParensContext = SingleTableParensContext; -SQLSelectParser.DerivedTableContext = DerivedTableContext; -SQLSelectParser.TableReferenceListParensContext = TableReferenceListParensContext; -SQLSelectParser.TableFunctionContext = TableFunctionContext; -SQLSelectParser.ColumnsClauseContext = ColumnsClauseContext; -SQLSelectParser.JtColumnContext = JtColumnContext; -SQLSelectParser.OnEmptyOrErrorContext = OnEmptyOrErrorContext; -SQLSelectParser.OnEmptyContext = OnEmptyContext; -SQLSelectParser.OnErrorContext = OnErrorContext; -SQLSelectParser.JtOnResponseContext = JtOnResponseContext; -SQLSelectParser.UnionOptionContext = UnionOptionContext; -SQLSelectParser.TableAliasContext = TableAliasContext; -SQLSelectParser.IndexHintListContext = IndexHintListContext; -SQLSelectParser.IndexHintContext = IndexHintContext; -SQLSelectParser.IndexHintTypeContext = IndexHintTypeContext; -SQLSelectParser.KeyOrIndexContext = KeyOrIndexContext; -SQLSelectParser.IndexHintClauseContext = IndexHintClauseContext; -SQLSelectParser.IndexListContext = IndexListContext; -SQLSelectParser.IndexListElementContext = IndexListElementContext; -SQLSelectParser.ExprContext = ExprContext; -SQLSelectParser.BoolPriContext = BoolPriContext; -SQLSelectParser.CompOpContext = CompOpContext; -SQLSelectParser.PredicateContext = PredicateContext; -SQLSelectParser.PredicateOperationsContext = PredicateOperationsContext; -SQLSelectParser.BitExprContext = BitExprContext; -SQLSelectParser.SimpleExprContext = SimpleExprContext; -SQLSelectParser.JsonOperatorContext = JsonOperatorContext; -SQLSelectParser.SumExprContext = SumExprContext; -SQLSelectParser.GroupingOperationContext = GroupingOperationContext; -SQLSelectParser.WindowFunctionCallContext = WindowFunctionCallContext; -SQLSelectParser.WindowingClauseContext = WindowingClauseContext; -SQLSelectParser.LeadLagInfoContext = LeadLagInfoContext; -SQLSelectParser.NullTreatmentContext = NullTreatmentContext; -SQLSelectParser.JsonFunctionContext = JsonFunctionContext; -SQLSelectParser.InSumExprContext = InSumExprContext; -SQLSelectParser.IdentListArgContext = IdentListArgContext; -SQLSelectParser.IdentListContext = IdentListContext; -SQLSelectParser.FulltextOptionsContext = FulltextOptionsContext; -SQLSelectParser.RuntimeFunctionCallContext = RuntimeFunctionCallContext; -SQLSelectParser.GeometryFunctionContext = GeometryFunctionContext; -SQLSelectParser.TimeFunctionParametersContext = TimeFunctionParametersContext; -SQLSelectParser.FractionalPrecisionContext = FractionalPrecisionContext; -SQLSelectParser.WeightStringLevelsContext = WeightStringLevelsContext; -SQLSelectParser.WeightStringLevelListItemContext = WeightStringLevelListItemContext; -SQLSelectParser.DateTimeTtypeContext = DateTimeTtypeContext; -SQLSelectParser.TrimFunctionContext = TrimFunctionContext; -SQLSelectParser.SubstringFunctionContext = SubstringFunctionContext; -SQLSelectParser.FunctionCallContext = FunctionCallContext; -SQLSelectParser.UdfExprListContext = UdfExprListContext; -SQLSelectParser.UdfExprContext = UdfExprContext; -SQLSelectParser.VariableContext = VariableContext; -SQLSelectParser.UserVariableContext = UserVariableContext; -SQLSelectParser.SystemVariableContext = SystemVariableContext; -SQLSelectParser.WhenExpressionContext = WhenExpressionContext; -SQLSelectParser.ThenExpressionContext = ThenExpressionContext; -SQLSelectParser.ElseExpressionContext = ElseExpressionContext; -SQLSelectParser.ExprListContext = ExprListContext; -SQLSelectParser.CharsetContext = CharsetContext; -SQLSelectParser.NotRuleContext = NotRuleContext; -SQLSelectParser.Not2RuleContext = Not2RuleContext; -SQLSelectParser.IntervalContext = IntervalContext; -SQLSelectParser.IntervalTimeStampContext = IntervalTimeStampContext; -SQLSelectParser.ExprListWithParenthesesContext = ExprListWithParenthesesContext; -SQLSelectParser.ExprWithParenthesesContext = ExprWithParenthesesContext; -SQLSelectParser.SimpleExprWithParenthesesContext = SimpleExprWithParenthesesContext; -SQLSelectParser.OrderListContext = OrderListContext; -SQLSelectParser.OrderExpressionContext = OrderExpressionContext; -SQLSelectParser.IndexTypeContext = IndexTypeContext; -SQLSelectParser.DataTypeContext = DataTypeContext; -SQLSelectParser.NcharContext = NcharContext; -SQLSelectParser.FieldLengthContext = FieldLengthContext; -SQLSelectParser.FieldOptionsContext = FieldOptionsContext; -SQLSelectParser.CharsetWithOptBinaryContext = CharsetWithOptBinaryContext; -SQLSelectParser.AsciiContext = AsciiContext; -SQLSelectParser.UnicodeContext = UnicodeContext; -SQLSelectParser.WsNumCodepointsContext = WsNumCodepointsContext; -SQLSelectParser.TypeDatetimePrecisionContext = TypeDatetimePrecisionContext; -SQLSelectParser.CharsetNameContext = CharsetNameContext; -SQLSelectParser.CollationNameContext = CollationNameContext; -SQLSelectParser.CollateContext = CollateContext; -SQLSelectParser.CharsetClauseContext = CharsetClauseContext; -SQLSelectParser.FieldsClauseContext = FieldsClauseContext; -SQLSelectParser.FieldTermContext = FieldTermContext; -SQLSelectParser.LinesClauseContext = LinesClauseContext; -SQLSelectParser.LineTermContext = LineTermContext; -SQLSelectParser.UsePartitionContext = UsePartitionContext; -SQLSelectParser.ColumnInternalRefListContext = ColumnInternalRefListContext; -SQLSelectParser.TableAliasRefListContext = TableAliasRefListContext; -SQLSelectParser.PureIdentifierContext = PureIdentifierContext; -SQLSelectParser.IdentifierContext = IdentifierContext; -SQLSelectParser.IdentifierListContext = IdentifierListContext; -SQLSelectParser.IdentifierListWithParenthesesContext = IdentifierListWithParenthesesContext; -SQLSelectParser.QualifiedIdentifierContext = QualifiedIdentifierContext; -SQLSelectParser.DotIdentifierContext = DotIdentifierContext; -SQLSelectParser.Ulong_numberContext = Ulong_numberContext; -SQLSelectParser.Real_ulong_numberContext = Real_ulong_numberContext; -SQLSelectParser.Ulonglong_numberContext = Ulonglong_numberContext; -SQLSelectParser.Real_ulonglong_numberContext = Real_ulonglong_numberContext; -SQLSelectParser.LiteralContext = LiteralContext; -SQLSelectParser.StringListContext = StringListContext; -SQLSelectParser.TextStringLiteralContext = TextStringLiteralContext; -SQLSelectParser.TextStringContext = TextStringContext; -SQLSelectParser.TextLiteralContext = TextLiteralContext; -SQLSelectParser.NumLiteralContext = NumLiteralContext; -SQLSelectParser.BoolLiteralContext = BoolLiteralContext; -SQLSelectParser.NullLiteralContext = NullLiteralContext; -SQLSelectParser.TemporalLiteralContext = TemporalLiteralContext; -SQLSelectParser.FloatOptionsContext = FloatOptionsContext; -SQLSelectParser.PrecisionContext = PrecisionContext; -SQLSelectParser.TextOrIdentifierContext = TextOrIdentifierContext; -SQLSelectParser.ParenthesesContext = ParenthesesContext; -SQLSelectParser.EqualContext = EqualContext; -SQLSelectParser.VarIdentTypeContext = VarIdentTypeContext; -SQLSelectParser.IdentifierKeywordContext = IdentifierKeywordContext; - -module.exports = SQLSelectParser; \ No newline at end of file diff --git a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/parser/SQLSelectParser.tokens b/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/parser/SQLSelectParser.tokens deleted file mode 100644 index 20e7ed6..0000000 --- a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/parser/SQLSelectParser.tokens +++ /dev/null @@ -1,393 +0,0 @@ -EQUAL_OPERATOR=1 -ASSIGN_OPERATOR=2 -NULL_SAFE_EQUAL_OPERATOR=3 -GREATER_OR_EQUAL_OPERATOR=4 -GREATER_THAN_OPERATOR=5 -LESS_OR_EQUAL_OPERATOR=6 -LESS_THAN_OPERATOR=7 -NOT_EQUAL_OPERATOR=8 -PLUS_OPERATOR=9 -MINUS_OPERATOR=10 -MULT_OPERATOR=11 -DIV_OPERATOR=12 -MOD_OPERATOR=13 -LOGICAL_NOT_OPERATOR=14 -BITWISE_NOT_OPERATOR=15 -SHIFT_LEFT_OPERATOR=16 -SHIFT_RIGHT_OPERATOR=17 -LOGICAL_AND_OPERATOR=18 -BITWISE_AND_OPERATOR=19 -BITWISE_XOR_OPERATOR=20 -LOGICAL_OR_OPERATOR=21 -BITWISE_OR_OPERATOR=22 -DOT_SYMBOL=23 -COMMA_SYMBOL=24 -SEMICOLON_SYMBOL=25 -COLON_SYMBOL=26 -OPEN_PAR_SYMBOL=27 -CLOSE_PAR_SYMBOL=28 -OPEN_CURLY_SYMBOL=29 -CLOSE_CURLY_SYMBOL=30 -UNDERLINE_SYMBOL=31 -OPEN_BRACKET_SYMBOL=32 -CLOSE_BRACKET_SYMBOL=33 -JSON_SEPARATOR_SYMBOL=34 -JSON_UNQUOTED_SEPARATOR_SYMBOL=35 -AT_SIGN_SYMBOL=36 -AT_TEXT_SUFFIX=37 -AT_AT_SIGN_SYMBOL=38 -NULL2_SYMBOL=39 -PARAM_MARKER=40 -CAST_COLON_SYMBOL=41 -HEX_NUMBER=42 -BIN_NUMBER=43 -INT_NUMBER=44 -DECIMAL_NUMBER=45 -FLOAT_NUMBER=46 -TINYINT_SYMBOL=47 -SMALLINT_SYMBOL=48 -MEDIUMINT_SYMBOL=49 -BYTE_INT_SYMBOL=50 -INT_SYMBOL=51 -BIGINT_SYMBOL=52 -SECOND_SYMBOL=53 -MINUTE_SYMBOL=54 -HOUR_SYMBOL=55 -DAY_SYMBOL=56 -WEEK_SYMBOL=57 -MONTH_SYMBOL=58 -QUARTER_SYMBOL=59 -YEAR_SYMBOL=60 -DEFAULT_SYMBOL=61 -UNION_SYMBOL=62 -SELECT_SYMBOL=63 -ALL_SYMBOL=64 -DISTINCT_SYMBOL=65 -STRAIGHT_JOIN_SYMBOL=66 -HIGH_PRIORITY_SYMBOL=67 -SQL_SMALL_RESULT_SYMBOL=68 -SQL_BIG_RESULT_SYMBOL=69 -SQL_BUFFER_RESULT_SYMBOL=70 -SQL_CALC_FOUND_ROWS_SYMBOL=71 -LIMIT_SYMBOL=72 -OFFSET_SYMBOL=73 -INTO_SYMBOL=74 -OUTFILE_SYMBOL=75 -DUMPFILE_SYMBOL=76 -PROCEDURE_SYMBOL=77 -ANALYSE_SYMBOL=78 -HAVING_SYMBOL=79 -WINDOW_SYMBOL=80 -AS_SYMBOL=81 -PARTITION_SYMBOL=82 -BY_SYMBOL=83 -ROWS_SYMBOL=84 -RANGE_SYMBOL=85 -GROUPS_SYMBOL=86 -UNBOUNDED_SYMBOL=87 -PRECEDING_SYMBOL=88 -INTERVAL_SYMBOL=89 -CURRENT_SYMBOL=90 -ROW_SYMBOL=91 -BETWEEN_SYMBOL=92 -AND_SYMBOL=93 -FOLLOWING_SYMBOL=94 -EXCLUDE_SYMBOL=95 -GROUP_SYMBOL=96 -TIES_SYMBOL=97 -NO_SYMBOL=98 -OTHERS_SYMBOL=99 -WITH_SYMBOL=100 -WITHOUT_SYMBOL=101 -RECURSIVE_SYMBOL=102 -ROLLUP_SYMBOL=103 -CUBE_SYMBOL=104 -ORDER_SYMBOL=105 -ASC_SYMBOL=106 -DESC_SYMBOL=107 -FROM_SYMBOL=108 -DUAL_SYMBOL=109 -VALUES_SYMBOL=110 -TABLE_SYMBOL=111 -SQL_NO_CACHE_SYMBOL=112 -SQL_CACHE_SYMBOL=113 -MAX_STATEMENT_TIME_SYMBOL=114 -FOR_SYMBOL=115 -OF_SYMBOL=116 -LOCK_SYMBOL=117 -IN_SYMBOL=118 -SHARE_SYMBOL=119 -MODE_SYMBOL=120 -UPDATE_SYMBOL=121 -SKIP_SYMBOL=122 -LOCKED_SYMBOL=123 -NOWAIT_SYMBOL=124 -WHERE_SYMBOL=125 -OJ_SYMBOL=126 -ON_SYMBOL=127 -USING_SYMBOL=128 -NATURAL_SYMBOL=129 -INNER_SYMBOL=130 -JOIN_SYMBOL=131 -LEFT_SYMBOL=132 -RIGHT_SYMBOL=133 -OUTER_SYMBOL=134 -CROSS_SYMBOL=135 -LATERAL_SYMBOL=136 -JSON_TABLE_SYMBOL=137 -COLUMNS_SYMBOL=138 -ORDINALITY_SYMBOL=139 -EXISTS_SYMBOL=140 -PATH_SYMBOL=141 -NESTED_SYMBOL=142 -EMPTY_SYMBOL=143 -ERROR_SYMBOL=144 -NULL_SYMBOL=145 -USE_SYMBOL=146 -FORCE_SYMBOL=147 -IGNORE_SYMBOL=148 -KEY_SYMBOL=149 -INDEX_SYMBOL=150 -PRIMARY_SYMBOL=151 -IS_SYMBOL=152 -TRUE_SYMBOL=153 -FALSE_SYMBOL=154 -UNKNOWN_SYMBOL=155 -NOT_SYMBOL=156 -XOR_SYMBOL=157 -OR_SYMBOL=158 -ANY_SYMBOL=159 -MEMBER_SYMBOL=160 -SOUNDS_SYMBOL=161 -LIKE_SYMBOL=162 -ESCAPE_SYMBOL=163 -REGEXP_SYMBOL=164 -DIV_SYMBOL=165 -MOD_SYMBOL=166 -MATCH_SYMBOL=167 -AGAINST_SYMBOL=168 -BINARY_SYMBOL=169 -CAST_SYMBOL=170 -ARRAY_SYMBOL=171 -CASE_SYMBOL=172 -END_SYMBOL=173 -CONVERT_SYMBOL=174 -COLLATE_SYMBOL=175 -AVG_SYMBOL=176 -BIT_AND_SYMBOL=177 -BIT_OR_SYMBOL=178 -BIT_XOR_SYMBOL=179 -COUNT_SYMBOL=180 -MIN_SYMBOL=181 -MAX_SYMBOL=182 -STD_SYMBOL=183 -VARIANCE_SYMBOL=184 -STDDEV_SAMP_SYMBOL=185 -VAR_SAMP_SYMBOL=186 -SUM_SYMBOL=187 -GROUP_CONCAT_SYMBOL=188 -SEPARATOR_SYMBOL=189 -GROUPING_SYMBOL=190 -ROW_NUMBER_SYMBOL=191 -RANK_SYMBOL=192 -DENSE_RANK_SYMBOL=193 -CUME_DIST_SYMBOL=194 -PERCENT_RANK_SYMBOL=195 -NTILE_SYMBOL=196 -LEAD_SYMBOL=197 -LAG_SYMBOL=198 -FIRST_VALUE_SYMBOL=199 -LAST_VALUE_SYMBOL=200 -NTH_VALUE_SYMBOL=201 -FIRST_SYMBOL=202 -LAST_SYMBOL=203 -OVER_SYMBOL=204 -RESPECT_SYMBOL=205 -NULLS_SYMBOL=206 -JSON_ARRAYAGG_SYMBOL=207 -JSON_OBJECTAGG_SYMBOL=208 -BOOLEAN_SYMBOL=209 -LANGUAGE_SYMBOL=210 -QUERY_SYMBOL=211 -EXPANSION_SYMBOL=212 -CHAR_SYMBOL=213 -CURRENT_USER_SYMBOL=214 -DATE_SYMBOL=215 -INSERT_SYMBOL=216 -TIME_SYMBOL=217 -TIMESTAMP_SYMBOL=218 -TIMESTAMP_LTZ_SYMBOL=219 -TIMESTAMP_NTZ_SYMBOL=220 -ZONE_SYMBOL=221 -USER_SYMBOL=222 -ADDDATE_SYMBOL=223 -SUBDATE_SYMBOL=224 -CURDATE_SYMBOL=225 -CURTIME_SYMBOL=226 -DATE_ADD_SYMBOL=227 -DATE_SUB_SYMBOL=228 -EXTRACT_SYMBOL=229 -GET_FORMAT_SYMBOL=230 -NOW_SYMBOL=231 -POSITION_SYMBOL=232 -SYSDATE_SYMBOL=233 -TIMESTAMP_ADD_SYMBOL=234 -TIMESTAMP_DIFF_SYMBOL=235 -UTC_DATE_SYMBOL=236 -UTC_TIME_SYMBOL=237 -UTC_TIMESTAMP_SYMBOL=238 -ASCII_SYMBOL=239 -CHARSET_SYMBOL=240 -COALESCE_SYMBOL=241 -COLLATION_SYMBOL=242 -DATABASE_SYMBOL=243 -IF_SYMBOL=244 -FORMAT_SYMBOL=245 -MICROSECOND_SYMBOL=246 -OLD_PASSWORD_SYMBOL=247 -PASSWORD_SYMBOL=248 -REPEAT_SYMBOL=249 -REPLACE_SYMBOL=250 -REVERSE_SYMBOL=251 -ROW_COUNT_SYMBOL=252 -TRUNCATE_SYMBOL=253 -WEIGHT_STRING_SYMBOL=254 -CONTAINS_SYMBOL=255 -GEOMETRYCOLLECTION_SYMBOL=256 -LINESTRING_SYMBOL=257 -MULTILINESTRING_SYMBOL=258 -MULTIPOINT_SYMBOL=259 -MULTIPOLYGON_SYMBOL=260 -POINT_SYMBOL=261 -POLYGON_SYMBOL=262 -LEVEL_SYMBOL=263 -DATETIME_SYMBOL=264 -TRIM_SYMBOL=265 -LEADING_SYMBOL=266 -TRAILING_SYMBOL=267 -BOTH_SYMBOL=268 -STRING_SYMBOL=269 -SUBSTRING_SYMBOL=270 -WHEN_SYMBOL=271 -THEN_SYMBOL=272 -ELSE_SYMBOL=273 -SIGNED_SYMBOL=274 -UNSIGNED_SYMBOL=275 -DECIMAL_SYMBOL=276 -JSON_SYMBOL=277 -FLOAT_SYMBOL=278 -FLOAT_SYMBOL_4=279 -FLOAT_SYMBOL_8=280 -SET_SYMBOL=281 -SECOND_MICROSECOND_SYMBOL=282 -MINUTE_MICROSECOND_SYMBOL=283 -MINUTE_SECOND_SYMBOL=284 -HOUR_MICROSECOND_SYMBOL=285 -HOUR_SECOND_SYMBOL=286 -HOUR_MINUTE_SYMBOL=287 -DAY_MICROSECOND_SYMBOL=288 -DAY_SECOND_SYMBOL=289 -DAY_MINUTE_SYMBOL=290 -DAY_HOUR_SYMBOL=291 -YEAR_MONTH_SYMBOL=292 -BTREE_SYMBOL=293 -RTREE_SYMBOL=294 -HASH_SYMBOL=295 -REAL_SYMBOL=296 -DOUBLE_SYMBOL=297 -PRECISION_SYMBOL=298 -NUMERIC_SYMBOL=299 -NUMBER_SYMBOL=300 -FIXED_SYMBOL=301 -BIT_SYMBOL=302 -BOOL_SYMBOL=303 -VARYING_SYMBOL=304 -VARCHAR_SYMBOL=305 -NATIONAL_SYMBOL=306 -NVARCHAR_SYMBOL=307 -NCHAR_SYMBOL=308 -VARBINARY_SYMBOL=309 -TINYBLOB_SYMBOL=310 -BLOB_SYMBOL=311 -MEDIUMBLOB_SYMBOL=312 -LONGBLOB_SYMBOL=313 -LONG_SYMBOL=314 -TINYTEXT_SYMBOL=315 -TEXT_SYMBOL=316 -MEDIUMTEXT_SYMBOL=317 -LONGTEXT_SYMBOL=318 -ENUM_SYMBOL=319 -SERIAL_SYMBOL=320 -GEOMETRY_SYMBOL=321 -ZEROFILL_SYMBOL=322 -BYTE_SYMBOL=323 -UNICODE_SYMBOL=324 -TERMINATED_SYMBOL=325 -OPTIONALLY_SYMBOL=326 -ENCLOSED_SYMBOL=327 -ESCAPED_SYMBOL=328 -LINES_SYMBOL=329 -STARTING_SYMBOL=330 -GLOBAL_SYMBOL=331 -LOCAL_SYMBOL=332 -SESSION_SYMBOL=333 -VARIANT_SYMBOL=334 -OBJECT_SYMBOL=335 -GEOGRAPHY_SYMBOL=336 -WHITESPACE=337 -INVALID_INPUT=338 -UNDERSCORE_CHARSET=339 -IDENTIFIER=340 -NCHAR_TEXT=341 -BACK_TICK_QUOTED_ID=342 -DOUBLE_QUOTED_TEXT=343 -SINGLE_QUOTED_TEXT=344 -BRACKET_QUOTED_TEXT=345 -VERSION_COMMENT_START=346 -MYSQL_COMMENT_START=347 -VERSION_COMMENT_END=348 -BLOCK_COMMENT=349 -POUND_COMMENT=350 -DASHDASH_COMMENT=351 -'='=1 -':='=2 -'<=>'=3 -'>='=4 -'>'=5 -'<='=6 -'<'=7 -'!='=8 -'+'=9 -'-'=10 -'*'=11 -'/'=12 -'%'=13 -'!'=14 -'~'=15 -'<<'=16 -'>>'=17 -'&&'=18 -'&'=19 -'^'=20 -'||'=21 -'|'=22 -'.'=23 -','=24 -';'=25 -':'=26 -'('=27 -')'=28 -'{'=29 -'}'=30 -'_'=31 -'['=32 -']'=33 -'->'=34 -'->>'=35 -'@'=36 -'@@'=38 -'\\N'=39 -'?'=40 -'::'=41 -'/*!'=347 -'*/'=348 diff --git a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/parser/SQLSelectParserListener.js b/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/parser/SQLSelectParserListener.js deleted file mode 100644 index 7dcd9ac..0000000 --- a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/parser/SQLSelectParserListener.js +++ /dev/null @@ -1,1557 +0,0 @@ -// Generated from grammars/SQLSelectParser.g4 by ANTLR 4.9.2 -// jshint ignore: start -const antlr4 = require('antlr4'); -// This class defines a complete listener for a parse tree produced by SQLSelectParser. -class SQLSelectParserListener extends antlr4.tree.ParseTreeListener { - - // Enter a parse tree produced by SQLSelectParser#query. - enterQuery(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#query. - exitQuery(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#values. - enterValues(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#values. - exitValues(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#selectStatement. - enterSelectStatement(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#selectStatement. - exitSelectStatement(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#selectStatementWithInto. - enterSelectStatementWithInto(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#selectStatementWithInto. - exitSelectStatementWithInto(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#queryExpression. - enterQueryExpression(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#queryExpression. - exitQueryExpression(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#queryExpressionBody. - enterQueryExpressionBody(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#queryExpressionBody. - exitQueryExpressionBody(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#queryExpressionParens. - enterQueryExpressionParens(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#queryExpressionParens. - exitQueryExpressionParens(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#queryPrimary. - enterQueryPrimary(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#queryPrimary. - exitQueryPrimary(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#querySpecification. - enterQuerySpecification(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#querySpecification. - exitQuerySpecification(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#subquery. - enterSubquery(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#subquery. - exitSubquery(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#querySpecOption. - enterQuerySpecOption(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#querySpecOption. - exitQuerySpecOption(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#limitClause. - enterLimitClause(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#limitClause. - exitLimitClause(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#limitOptions. - enterLimitOptions(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#limitOptions. - exitLimitOptions(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#limitOption. - enterLimitOption(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#limitOption. - exitLimitOption(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#intoClause. - enterIntoClause(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#intoClause. - exitIntoClause(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#procedureAnalyseClause. - enterProcedureAnalyseClause(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#procedureAnalyseClause. - exitProcedureAnalyseClause(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#havingClause. - enterHavingClause(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#havingClause. - exitHavingClause(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#windowClause. - enterWindowClause(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#windowClause. - exitWindowClause(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#windowDefinition. - enterWindowDefinition(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#windowDefinition. - exitWindowDefinition(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#windowSpec. - enterWindowSpec(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#windowSpec. - exitWindowSpec(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#windowSpecDetails. - enterWindowSpecDetails(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#windowSpecDetails. - exitWindowSpecDetails(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#windowFrameClause. - enterWindowFrameClause(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#windowFrameClause. - exitWindowFrameClause(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#windowFrameUnits. - enterWindowFrameUnits(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#windowFrameUnits. - exitWindowFrameUnits(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#windowFrameExtent. - enterWindowFrameExtent(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#windowFrameExtent. - exitWindowFrameExtent(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#windowFrameStart. - enterWindowFrameStart(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#windowFrameStart. - exitWindowFrameStart(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#windowFrameBetween. - enterWindowFrameBetween(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#windowFrameBetween. - exitWindowFrameBetween(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#windowFrameBound. - enterWindowFrameBound(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#windowFrameBound. - exitWindowFrameBound(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#windowFrameExclusion. - enterWindowFrameExclusion(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#windowFrameExclusion. - exitWindowFrameExclusion(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#withClause. - enterWithClause(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#withClause. - exitWithClause(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#commonTableExpression. - enterCommonTableExpression(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#commonTableExpression. - exitCommonTableExpression(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#groupByClause. - enterGroupByClause(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#groupByClause. - exitGroupByClause(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#olapOption. - enterOlapOption(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#olapOption. - exitOlapOption(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#orderClause. - enterOrderClause(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#orderClause. - exitOrderClause(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#direction. - enterDirection(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#direction. - exitDirection(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#fromClause. - enterFromClause(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#fromClause. - exitFromClause(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#tableReferenceList. - enterTableReferenceList(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#tableReferenceList. - exitTableReferenceList(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#tableValueConstructor. - enterTableValueConstructor(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#tableValueConstructor. - exitTableValueConstructor(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#explicitTable. - enterExplicitTable(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#explicitTable. - exitExplicitTable(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#rowValueExplicit. - enterRowValueExplicit(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#rowValueExplicit. - exitRowValueExplicit(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#selectOption. - enterSelectOption(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#selectOption. - exitSelectOption(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#lockingClauseList. - enterLockingClauseList(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#lockingClauseList. - exitLockingClauseList(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#lockingClause. - enterLockingClause(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#lockingClause. - exitLockingClause(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#lockStrengh. - enterLockStrengh(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#lockStrengh. - exitLockStrengh(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#lockedRowAction. - enterLockedRowAction(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#lockedRowAction. - exitLockedRowAction(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#selectItemList. - enterSelectItemList(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#selectItemList. - exitSelectItemList(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#selectItem. - enterSelectItem(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#selectItem. - exitSelectItem(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#selectAlias. - enterSelectAlias(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#selectAlias. - exitSelectAlias(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#whereClause. - enterWhereClause(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#whereClause. - exitWhereClause(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#tableReference. - enterTableReference(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#tableReference. - exitTableReference(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#escapedTableReference. - enterEscapedTableReference(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#escapedTableReference. - exitEscapedTableReference(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#joinedTable. - enterJoinedTable(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#joinedTable. - exitJoinedTable(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#naturalJoinType. - enterNaturalJoinType(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#naturalJoinType. - exitNaturalJoinType(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#innerJoinType. - enterInnerJoinType(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#innerJoinType. - exitInnerJoinType(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#outerJoinType. - enterOuterJoinType(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#outerJoinType. - exitOuterJoinType(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#tableFactor. - enterTableFactor(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#tableFactor. - exitTableFactor(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#singleTable. - enterSingleTable(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#singleTable. - exitSingleTable(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#singleTableParens. - enterSingleTableParens(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#singleTableParens. - exitSingleTableParens(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#derivedTable. - enterDerivedTable(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#derivedTable. - exitDerivedTable(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#tableReferenceListParens. - enterTableReferenceListParens(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#tableReferenceListParens. - exitTableReferenceListParens(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#tableFunction. - enterTableFunction(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#tableFunction. - exitTableFunction(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#columnsClause. - enterColumnsClause(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#columnsClause. - exitColumnsClause(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#jtColumn. - enterJtColumn(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#jtColumn. - exitJtColumn(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#onEmptyOrError. - enterOnEmptyOrError(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#onEmptyOrError. - exitOnEmptyOrError(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#onEmpty. - enterOnEmpty(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#onEmpty. - exitOnEmpty(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#onError. - enterOnError(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#onError. - exitOnError(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#jtOnResponse. - enterJtOnResponse(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#jtOnResponse. - exitJtOnResponse(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#unionOption. - enterUnionOption(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#unionOption. - exitUnionOption(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#tableAlias. - enterTableAlias(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#tableAlias. - exitTableAlias(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#indexHintList. - enterIndexHintList(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#indexHintList. - exitIndexHintList(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#indexHint. - enterIndexHint(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#indexHint. - exitIndexHint(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#indexHintType. - enterIndexHintType(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#indexHintType. - exitIndexHintType(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#keyOrIndex. - enterKeyOrIndex(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#keyOrIndex. - exitKeyOrIndex(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#indexHintClause. - enterIndexHintClause(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#indexHintClause. - exitIndexHintClause(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#indexList. - enterIndexList(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#indexList. - exitIndexList(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#indexListElement. - enterIndexListElement(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#indexListElement. - exitIndexListElement(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#expr. - enterExpr(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#expr. - exitExpr(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#boolPri. - enterBoolPri(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#boolPri. - exitBoolPri(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#compOp. - enterCompOp(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#compOp. - exitCompOp(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#predicate. - enterPredicate(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#predicate. - exitPredicate(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#predicateOperations. - enterPredicateOperations(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#predicateOperations. - exitPredicateOperations(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#bitExpr. - enterBitExpr(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#bitExpr. - exitBitExpr(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#simpleExpr. - enterSimpleExpr(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#simpleExpr. - exitSimpleExpr(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#jsonOperator. - enterJsonOperator(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#jsonOperator. - exitJsonOperator(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#sumExpr. - enterSumExpr(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#sumExpr. - exitSumExpr(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#groupingOperation. - enterGroupingOperation(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#groupingOperation. - exitGroupingOperation(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#windowFunctionCall. - enterWindowFunctionCall(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#windowFunctionCall. - exitWindowFunctionCall(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#windowingClause. - enterWindowingClause(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#windowingClause. - exitWindowingClause(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#leadLagInfo. - enterLeadLagInfo(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#leadLagInfo. - exitLeadLagInfo(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#nullTreatment. - enterNullTreatment(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#nullTreatment. - exitNullTreatment(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#jsonFunction. - enterJsonFunction(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#jsonFunction. - exitJsonFunction(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#inSumExpr. - enterInSumExpr(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#inSumExpr. - exitInSumExpr(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#identListArg. - enterIdentListArg(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#identListArg. - exitIdentListArg(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#identList. - enterIdentList(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#identList. - exitIdentList(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#fulltextOptions. - enterFulltextOptions(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#fulltextOptions. - exitFulltextOptions(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#runtimeFunctionCall. - enterRuntimeFunctionCall(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#runtimeFunctionCall. - exitRuntimeFunctionCall(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#geometryFunction. - enterGeometryFunction(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#geometryFunction. - exitGeometryFunction(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#timeFunctionParameters. - enterTimeFunctionParameters(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#timeFunctionParameters. - exitTimeFunctionParameters(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#fractionalPrecision. - enterFractionalPrecision(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#fractionalPrecision. - exitFractionalPrecision(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#weightStringLevels. - enterWeightStringLevels(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#weightStringLevels. - exitWeightStringLevels(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#weightStringLevelListItem. - enterWeightStringLevelListItem(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#weightStringLevelListItem. - exitWeightStringLevelListItem(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#dateTimeTtype. - enterDateTimeTtype(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#dateTimeTtype. - exitDateTimeTtype(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#trimFunction. - enterTrimFunction(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#trimFunction. - exitTrimFunction(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#substringFunction. - enterSubstringFunction(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#substringFunction. - exitSubstringFunction(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#functionCall. - enterFunctionCall(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#functionCall. - exitFunctionCall(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#udfExprList. - enterUdfExprList(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#udfExprList. - exitUdfExprList(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#udfExpr. - enterUdfExpr(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#udfExpr. - exitUdfExpr(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#variable. - enterVariable(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#variable. - exitVariable(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#userVariable. - enterUserVariable(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#userVariable. - exitUserVariable(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#systemVariable. - enterSystemVariable(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#systemVariable. - exitSystemVariable(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#whenExpression. - enterWhenExpression(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#whenExpression. - exitWhenExpression(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#thenExpression. - enterThenExpression(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#thenExpression. - exitThenExpression(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#elseExpression. - enterElseExpression(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#elseExpression. - exitElseExpression(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#castType. - enterCastType(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#castType. - exitCastType(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#exprList. - enterExprList(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#exprList. - exitExprList(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#charset. - enterCharset(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#charset. - exitCharset(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#notRule. - enterNotRule(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#notRule. - exitNotRule(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#not2Rule. - enterNot2Rule(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#not2Rule. - exitNot2Rule(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#interval. - enterInterval(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#interval. - exitInterval(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#intervalTimeStamp. - enterIntervalTimeStamp(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#intervalTimeStamp. - exitIntervalTimeStamp(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#exprListWithParentheses. - enterExprListWithParentheses(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#exprListWithParentheses. - exitExprListWithParentheses(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#exprWithParentheses. - enterExprWithParentheses(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#exprWithParentheses. - exitExprWithParentheses(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#simpleExprWithParentheses. - enterSimpleExprWithParentheses(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#simpleExprWithParentheses. - exitSimpleExprWithParentheses(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#orderList. - enterOrderList(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#orderList. - exitOrderList(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#orderExpression. - enterOrderExpression(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#orderExpression. - exitOrderExpression(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#indexType. - enterIndexType(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#indexType. - exitIndexType(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#dataType. - enterDataType(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#dataType. - exitDataType(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#nchar. - enterNchar(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#nchar. - exitNchar(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#realType. - enterRealType(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#realType. - exitRealType(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#fieldLength. - enterFieldLength(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#fieldLength. - exitFieldLength(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#fieldOptions. - enterFieldOptions(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#fieldOptions. - exitFieldOptions(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#charsetWithOptBinary. - enterCharsetWithOptBinary(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#charsetWithOptBinary. - exitCharsetWithOptBinary(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#ascii. - enterAscii(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#ascii. - exitAscii(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#unicode. - enterUnicode(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#unicode. - exitUnicode(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#wsNumCodepoints. - enterWsNumCodepoints(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#wsNumCodepoints. - exitWsNumCodepoints(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#typeDatetimePrecision. - enterTypeDatetimePrecision(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#typeDatetimePrecision. - exitTypeDatetimePrecision(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#charsetName. - enterCharsetName(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#charsetName. - exitCharsetName(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#collationName. - enterCollationName(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#collationName. - exitCollationName(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#collate. - enterCollate(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#collate. - exitCollate(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#charsetClause. - enterCharsetClause(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#charsetClause. - exitCharsetClause(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#fieldsClause. - enterFieldsClause(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#fieldsClause. - exitFieldsClause(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#fieldTerm. - enterFieldTerm(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#fieldTerm. - exitFieldTerm(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#linesClause. - enterLinesClause(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#linesClause. - exitLinesClause(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#lineTerm. - enterLineTerm(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#lineTerm. - exitLineTerm(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#usePartition. - enterUsePartition(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#usePartition. - exitUsePartition(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#columnInternalRefList. - enterColumnInternalRefList(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#columnInternalRefList. - exitColumnInternalRefList(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#tableAliasRefList. - enterTableAliasRefList(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#tableAliasRefList. - exitTableAliasRefList(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#pureIdentifier. - enterPureIdentifier(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#pureIdentifier. - exitPureIdentifier(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#identifier. - enterIdentifier(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#identifier. - exitIdentifier(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#identifierList. - enterIdentifierList(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#identifierList. - exitIdentifierList(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#identifierListWithParentheses. - enterIdentifierListWithParentheses(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#identifierListWithParentheses. - exitIdentifierListWithParentheses(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#qualifiedIdentifier. - enterQualifiedIdentifier(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#qualifiedIdentifier. - exitQualifiedIdentifier(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#dotIdentifier. - enterDotIdentifier(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#dotIdentifier. - exitDotIdentifier(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#ulong_number. - enterUlong_number(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#ulong_number. - exitUlong_number(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#real_ulong_number. - enterReal_ulong_number(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#real_ulong_number. - exitReal_ulong_number(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#ulonglong_number. - enterUlonglong_number(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#ulonglong_number. - exitUlonglong_number(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#real_ulonglong_number. - enterReal_ulonglong_number(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#real_ulonglong_number. - exitReal_ulonglong_number(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#literal. - enterLiteral(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#literal. - exitLiteral(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#stringList. - enterStringList(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#stringList. - exitStringList(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#textStringLiteral. - enterTextStringLiteral(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#textStringLiteral. - exitTextStringLiteral(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#textString. - enterTextString(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#textString. - exitTextString(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#textLiteral. - enterTextLiteral(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#textLiteral. - exitTextLiteral(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#numLiteral. - enterNumLiteral(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#numLiteral. - exitNumLiteral(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#boolLiteral. - enterBoolLiteral(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#boolLiteral. - exitBoolLiteral(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#nullLiteral. - enterNullLiteral(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#nullLiteral. - exitNullLiteral(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#temporalLiteral. - enterTemporalLiteral(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#temporalLiteral. - exitTemporalLiteral(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#floatOptions. - enterFloatOptions(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#floatOptions. - exitFloatOptions(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#precision. - enterPrecision(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#precision. - exitPrecision(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#textOrIdentifier. - enterTextOrIdentifier(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#textOrIdentifier. - exitTextOrIdentifier(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#parentheses. - enterParentheses(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#parentheses. - exitParentheses(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#equal. - enterEqual(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#equal. - exitEqual(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#varIdentType. - enterVarIdentType(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#varIdentType. - exitVarIdentType(ctx) { - } - - - // Enter a parse tree produced by SQLSelectParser#identifierKeyword. - enterIdentifierKeyword(ctx) { - } - - // Exit a parse tree produced by SQLSelectParser#identifierKeyword. - exitIdentifierKeyword(ctx) { - } - - - -} -module.exports = SQLSelectParserListener; \ No newline at end of file diff --git a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/selectStatementListener.js b/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/selectStatementListener.js deleted file mode 100644 index 504727c..0000000 --- a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/selectStatementListener.js +++ /dev/null @@ -1,212 +0,0 @@ -const SQLSelectParserListener = require('./parser/SQLSelectParserListener'); - -class Listener extends SQLSelectParserListener { - constructor() { - super(); - - this.result = { selectItems: [], from: [] }; - - this.fieldReferences = []; - this.expressionState = null; - } - - getResult() { - return this.result; - } - - setResult(result) { - this.result = result; - } - - exitQuerySpecification(ctx) { - this.setResult({ - selectItems: ctx.selectItemList().fields || [], - from: (ctx.fromClause() || {}).tableList || [] - }) - } - - exitSelectItemList(ctx) { - const isAllSelected = ctx.MULT_OPERATOR(); - const items = ctx.selectItem() || []; - ctx.fields = items.map(item => { - if (!item.identifier && !item.alias) { - return; - } - - const { name, tableName, schemaName, databaseName } = getNameObject(item.identifier); - - return { - name, - tableName, - schemaName, - databaseName, - originalName: item.originalName, - alias: item.alias, - fieldReferences: item.fieldReferences, - }; - }).filter(Boolean); - if (isAllSelected) { - ctx.fields = [ { name: '*' }, ...ctx.fields ]; - } - } - - exitSelectItem(ctx) { - const tableWildContext = ctx.qualifiedIdentifier(); - ctx.alias = (ctx.selectAlias() || {}).alias; - if (tableWildContext) { - ctx.identifier = tableWildContext.identifier; - ctx.originalName = tableWildContext.originalName; - return; - } - - ctx.fieldReferences = ctx.expr().fieldReferences; - } - - enterExpr(ctx) { - if (!this.expressionState) { - this.fieldReferences = []; - this.expressionState = ctx.invokingState; - } - } - - exitExpr(ctx) { - if (this.expressionState === ctx.invokingState) { - ctx.fieldReferences = this.fieldReferences; - this.fieldReferences = []; - this.expressionState = null; - } - } - - exitSelectAlias(ctx) { - ctx.alias = removeQuotes((ctx.identifier() || ctx.textStringLiteral()).getText()); - } - - exitTableWild(ctx) { - const { identifier, originalName } = ctx.qualifiedIdentifier(); - - ctx.identifier = identifier; - ctx.originalName = originalName; - } - - exitQualifiedIdentifier(ctx) { - let identifier = ctx.identifier().map(ctx => ctx.getText()) || []; - if (ctx.MULT_OPERATOR()) { - identifier.push('*'); - } - - ctx.originalName = identifier[identifier.length - 1]; - ctx.identifier = identifier.map(removeQuotes); - this.fieldReferences.push(ctx.originalName); - } - - exitFromClause(ctx) { - ctx.tableList = (ctx.tableReferenceList() || {}).tableList || []; - } - - exitTableReferenceList(ctx) { - ctx.tableList = ctx.tableReference().flatMap(tableReferenceContext => tableReferenceContext.tables); - } - - exitTableReference(ctx) { - ctx.tables = (ctx.tableFactor() || ctx.escapedTableReference()).tables - - const joinedTables = ctx.joinedTable() || []; - - ctx.tables = [ ...ctx.tables, ...joinedTables.flatMap(tableReferenceContext => tableReferenceContext.tables)] - } - - exitJoinedTable(ctx) { - ctx.tables = (ctx.tableReference() || ctx.tableFactor()).tables; - } - - exitEscapedTableReference(ctx) { - ctx.tables = ctx.tableFactor().tables; - const joinedTables = ctx.joinedTable() || []; - - ctx.tables = [ ...ctx.tables, ...joinedTables.flatMap(tableReferenceContext => tableReferenceContext.tables)]; - } - - exitTableFactor(ctx) { - const tableData = ctx.singleTable() || ctx.singleTableParens(); - if (tableData) { - ctx.tables = [ { - table: tableData.table, - schemaName: tableData.schemaName, - databaseName: tableData.databaseName, - originalName: tableData.originalName, - alias: tableData.alias, - originalName: tableData.originalName, - }]; - return; - } - - const tablesData = ctx.tableReferenceListParens(); - if (!tablesData) { - ctx.tables = []; - return; - } - - ctx.tables = tablesData.tableList; - } - - exitSingleTable(ctx) { - const { originalName, identifier } = ctx.qualifiedIdentifier(); - const { tableName, schemaName, databaseName } = getNameObject([...(identifier || []), 'column']); - - ctx.table = tableName; - ctx.schemaName = schemaName; - ctx.databaseName = databaseName; - ctx.originalName = originalName; - ctx.alias = (ctx.tableAlias() || {}).alias; - } - - exitSingleTableParens(ctx) { - const tableData = ctx.singleTable() || ctx.singleTableParens(); - ctx.table = tableName; - ctx.schemaName = schemaName; - ctx.databaseName = databaseName; - ctx.originalName = originalName; - ctx.alias = tableData.alias; - ctx.originalName = tableData.originalName; - } - - exitTableReferenceListParens(ctx) { - const tablesData = ctx.tableReferenceList() || ctx.tableReferenceListParens(); - ctx.tableList = tablesData.tableList; - } - - exitTableAlias(ctx) { - ctx.alias = removeQuotes(ctx.identifier().getText()); - } - -}; - -const removeQuotes = str => { - if (!str) { - return ''; - } - - if (/^\[.*\]$|^(`|'|").*\1$/.test(str)) { - return str.slice(1, -1); - } - - return str; -}; - -const getNameObject = identifier => { - if (!Array.isArray(identifier)) { - return ''; - } - - const IDENTIFIER_NAMES = ['name', 'tableName', 'schemaName', 'databaseName']; - - return identifier.reverse().reduce( - (nameObject, name, index) => ({ - ...nameObject, - [IDENTIFIER_NAMES[index]]: name, - }), - {}, - ); -}; - -module.exports = Listener; \ No newline at end of file diff --git a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/test/results.js b/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/test/results.js deleted file mode 100644 index 96c45df..0000000 --- a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/test/results.js +++ /dev/null @@ -1,141 +0,0 @@ -const simple = { - selectItems: [{ - name: "column", - originalName: "column", - }], - from: [{ - table: "table", - originalName: "table", - }], -}; - -const star = { - selectItems: [{ - name: "*" - }], - from: [{ - table: "table", - originalName: "table", - }], -}; - -const aliases = { - selectItems: [{ - name: "column", - originalName: "column", - alias: "columnAlias" - }], - from: [{ - table: "table", - alias: "tableAlias", - originalName: "table", - }], -}; - -const starWithTable = { - selectItems: [{ - name: "*", - tableName: "table", - originalName: "*", - }], - from: [{ - table: "table", - originalName: "table", - }], -}; - -const specifiedSchema = { - selectItems: [{ - name: "column", - tableName: "table", - schemaName: "schema", - databaseName: "database", - originalName: "column", - }], - from: [{ - table: "table", - schemaName: "schema", - databaseName: "database", - originalName: "table", - }], -}; - -const singleQuotes = { - selectItems: [{ - name: "column", - tableName: "table", - originalName: "'column'", - }], - from: [{ - table: "table", - schemaName: "schema", - originalName: "'table'", - }], -}; - -const doubleQuotes = { - selectItems: [{ - name: "column", - tableName: "table", - originalName: '"column"', - }], - from: [{ - table: "table", - schemaName: "schema", - originalName: '"table"', - }], -}; - -const backtickQuotes = { - selectItems: [{ - name: "column", - tableName: "table", - originalName: "`column`", - }], - from: [{ - table: "table", - schemaName: "schema", - originalName: "`table`", - }], -}; - -const squareBrackets = { - selectItems: [{ - name: "column", - tableName: "table", - originalName: "[column]", - }], - from: [{ - table: "table", - schemaName: "schema", - originalName: "[table]", - }], -}; - -const functions = { - selectItems: [{ - alias: "alias1", - fieldReferences: ["column1"], - }, - { - alias: "alias2", - fieldReferences: ["column2", "'ID'"], - }], - from: [{ - table: "table", - originalName: "table", - }], -}; - -module.exports = { - simple, - star, - aliases, - starWithTable, - specifiedSchema, - singleQuotes, - doubleQuotes, - backtickQuotes, - squareBrackets, - functions, -}; \ No newline at end of file diff --git a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/test/test.js b/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/test/test.js deleted file mode 100644 index 36da7b7..0000000 --- a/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser/test/test.js +++ /dev/null @@ -1,76 +0,0 @@ -const assert = require('assert'); -const parseSelectStatement = require('../index'); - -const { - simple, - star, - aliases, - starWithTable, - specifiedSchema, - singleQuotes, - doubleQuotes, - backtickQuotes, - squareBrackets, - functions, -} = require('./results'); - -describe('Parsing of primitive SELECT statements', () => { - it('should parse primitive SELECT statement', () => { - const result = parseSelectStatement('SELECT column FROM table'); - assert.deepEqual(simple, filterUndefinedProperties(result)); - }); - it('should parse SELECT statement with aliases', () => { - const result = parseSelectStatement('SELECT column as columnAlias FROM table as tableAlias'); - assert.deepEqual(aliases, filterUndefinedProperties(result)); - }); - it('should parse statement with specified database.schema.table', () => { - const result = parseSelectStatement('SELECT database.schema.table.column FROM database.schema.table'); - assert.deepEqual(specifiedSchema, filterUndefinedProperties(result)); - }); -}); - -describe('Parsing of SELECT * statements', () => { - it('should parse SELECT * queries', () => { - const result = parseSelectStatement('SELECT * FROM table'); - assert.deepEqual(star, filterUndefinedProperties(result)); - }); - it('should parse SELECT table.* queries', () => { - const result = parseSelectStatement('SELECT table.* FROM table'); - assert.deepEqual(starWithTable, filterUndefinedProperties(result)); - }); -}); - -describe('Parsing of SELECT statements with quotes from different dialects', () => { - it('should parse statement with single quotes (MySQL-like)', () => { - const result = parseSelectStatement("SELECT 'table'.'column' FROM 'schema'.'table'"); - assert.deepEqual(singleQuotes, filterUndefinedProperties(result)); - }); - it('should parse statement with double quotes (PostgreSQL-like)', () => { - const result = parseSelectStatement('SELECT "table"."column" FROM "schema"."table"'); - assert.deepEqual(doubleQuotes, filterUndefinedProperties(result)); - }); - it('should parse statement with backtick quotes (MySQL-like)', () => { - const result = parseSelectStatement('SELECT `table`.`column` FROM `schema`.`table`'); - assert.deepEqual(backtickQuotes, filterUndefinedProperties(result)); - }); - it('should parse statement with square brackets (MSSQL-like)', () => { - const result = parseSelectStatement('SELECT [table].[column] FROM [schema].[table]'); - assert.deepEqual(squareBrackets, filterUndefinedProperties(result)); - }); -}); - -describe('Parsing of complex SELECT statements', () => { - it('should parse statement with "WITH" predicate', () => { - const result = parseSelectStatement('WITH f AS (SELECT columnWith FROM tableWith) SELECT column from table'); - assert.deepEqual(simple, filterUndefinedProperties(result)); - }); - it('should parse statement with functions', () => { - const result = parseSelectStatement(`SELECT - array_agg(table.column1) AS alias1, - (to_char(column2, 'ID'::text))::integer AS alias2 - from table`); - assert.deepEqual(functions, filterUndefinedProperties(result)); - }); -}); - -const filterUndefinedProperties = object => JSON.parse(JSON.stringify(object)); diff --git a/reverse_engineering/node_modules/@tootallnate/once/dist/index.d.ts b/reverse_engineering/node_modules/@tootallnate/once/dist/index.d.ts deleted file mode 100644 index a7efe94..0000000 --- a/reverse_engineering/node_modules/@tootallnate/once/dist/index.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -/// -import { EventEmitter } from 'events'; -declare function once(emitter: EventEmitter, name: string): once.CancelablePromise; -declare namespace once { - interface CancelFunction { - (): void; - } - interface CancelablePromise extends Promise { - cancel: CancelFunction; - } - type CancellablePromise = CancelablePromise; - function spread(emitter: EventEmitter, name: string): once.CancelablePromise; -} -export = once; diff --git a/reverse_engineering/node_modules/@tootallnate/once/dist/index.js b/reverse_engineering/node_modules/@tootallnate/once/dist/index.js deleted file mode 100644 index bfd0dc8..0000000 --- a/reverse_engineering/node_modules/@tootallnate/once/dist/index.js +++ /dev/null @@ -1,39 +0,0 @@ -"use strict"; -function noop() { } -function once(emitter, name) { - const o = once.spread(emitter, name); - const r = o.then((args) => args[0]); - r.cancel = o.cancel; - return r; -} -(function (once) { - function spread(emitter, name) { - let c = null; - const p = new Promise((resolve, reject) => { - function cancel() { - emitter.removeListener(name, onEvent); - emitter.removeListener('error', onError); - p.cancel = noop; - } - function onEvent(...args) { - cancel(); - resolve(args); - } - function onError(err) { - cancel(); - reject(err); - } - c = cancel; - emitter.on(name, onEvent); - emitter.on('error', onError); - }); - if (!c) { - throw new TypeError('Could not get `cancel()` function'); - } - p.cancel = c; - return p; - } - once.spread = spread; -})(once || (once = {})); -module.exports = once; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/@tootallnate/once/dist/index.js.map b/reverse_engineering/node_modules/@tootallnate/once/dist/index.js.map deleted file mode 100644 index 30d2049..0000000 --- a/reverse_engineering/node_modules/@tootallnate/once/dist/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,SAAS,IAAI,KAAI,CAAC;AAElB,SAAS,IAAI,CACZ,OAAqB,EACrB,IAAY;IAEZ,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAM,OAAO,EAAE,IAAI,CAAC,CAAC;IAC1C,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAA8B,CAAC;IACtE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACpB,OAAO,CAAC,CAAC;AACV,CAAC;AAED,WAAU,IAAI;IAWb,SAAgB,MAAM,CACrB,OAAqB,EACrB,IAAY;QAEZ,IAAI,CAAC,GAA+B,IAAI,CAAC;QACzC,MAAM,CAAC,GAAG,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5C,SAAS,MAAM;gBACd,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBACtC,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACzC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;YACjB,CAAC;YACD,SAAS,OAAO,CAAC,GAAG,IAAW;gBAC9B,MAAM,EAAE,CAAC;gBACT,OAAO,CAAC,IAAS,CAAC,CAAC;YACpB,CAAC;YACD,SAAS,OAAO,CAAC,GAAU;gBAC1B,MAAM,EAAE,CAAC;gBACT,MAAM,CAAC,GAAG,CAAC,CAAC;YACb,CAAC;YACD,CAAC,GAAG,MAAM,CAAC;YACX,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC1B,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9B,CAAC,CAA8B,CAAC;QAChC,IAAI,CAAC,CAAC,EAAE;YACP,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;SACzD;QACD,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QACb,OAAO,CAAC,CAAC;IACV,CAAC;IA5Be,WAAM,SA4BrB,CAAA;AACF,CAAC,EAxCS,IAAI,KAAJ,IAAI,QAwCb;AAED,iBAAS,IAAI,CAAC"} \ No newline at end of file diff --git a/reverse_engineering/node_modules/@tootallnate/once/package.json b/reverse_engineering/node_modules/@tootallnate/once/package.json deleted file mode 100644 index b995e2e..0000000 --- a/reverse_engineering/node_modules/@tootallnate/once/package.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "_from": "@tootallnate/once@1", - "_id": "@tootallnate/once@1.1.2", - "_inBundle": false, - "_integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "_location": "/@tootallnate/once", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "@tootallnate/once@1", - "name": "@tootallnate/once", - "escapedName": "@tootallnate%2fonce", - "scope": "@tootallnate", - "rawSpec": "1", - "saveSpec": null, - "fetchSpec": "1" - }, - "_requiredBy": [ - "/http-proxy-agent" - ], - "_resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "_shasum": "ccb91445360179a04e7fe6aff78c00ffc1eeaf82", - "_spec": "@tootallnate/once@1", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/http-proxy-agent", - "author": { - "name": "Nathan Rajlich", - "email": "nathan@tootallnate.net", - "url": "http://n8.io/" - }, - "bugs": { - "url": "https://github.com/TooTallNate/once/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Creates a Promise that waits for a single event", - "devDependencies": { - "@types/node": "^12.12.11", - "@typescript-eslint/eslint-plugin": "1.6.0", - "@typescript-eslint/parser": "1.1.0", - "eslint": "5.16.0", - "eslint-config-airbnb": "17.1.0", - "eslint-config-prettier": "4.1.0", - "eslint-import-resolver-typescript": "1.1.1", - "eslint-plugin-import": "2.16.0", - "eslint-plugin-jsx-a11y": "6.2.1", - "eslint-plugin-react": "7.12.4", - "mocha": "^6.2.2", - "rimraf": "^3.0.0", - "typescript": "^3.7.3" - }, - "engines": { - "node": ">= 6" - }, - "files": [ - "dist" - ], - "homepage": "https://github.com/TooTallNate/once#readme", - "keywords": [], - "license": "MIT", - "main": "./dist/index.js", - "name": "@tootallnate/once", - "repository": { - "type": "git", - "url": "git://github.com/TooTallNate/once.git" - }, - "scripts": { - "build": "tsc", - "prebuild": "rimraf dist", - "prepublishOnly": "npm run build", - "test": "mocha --reporter spec", - "test-lint": "eslint src --ext .js,.ts" - }, - "types": "./dist/index.d.ts", - "version": "1.1.2" -} diff --git a/reverse_engineering/node_modules/abort-controller/LICENSE b/reverse_engineering/node_modules/abort-controller/LICENSE deleted file mode 100644 index c914149..0000000 --- a/reverse_engineering/node_modules/abort-controller/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 Toru Nagashima - -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/reverse_engineering/node_modules/abort-controller/README.md b/reverse_engineering/node_modules/abort-controller/README.md deleted file mode 100644 index 9de3e45..0000000 --- a/reverse_engineering/node_modules/abort-controller/README.md +++ /dev/null @@ -1,98 +0,0 @@ -# abort-controller - -[![npm version](https://img.shields.io/npm/v/abort-controller.svg)](https://www.npmjs.com/package/abort-controller) -[![Downloads/month](https://img.shields.io/npm/dm/abort-controller.svg)](http://www.npmtrends.com/abort-controller) -[![Build Status](https://travis-ci.org/mysticatea/abort-controller.svg?branch=master)](https://travis-ci.org/mysticatea/abort-controller) -[![Coverage Status](https://codecov.io/gh/mysticatea/abort-controller/branch/master/graph/badge.svg)](https://codecov.io/gh/mysticatea/abort-controller) -[![Dependency Status](https://david-dm.org/mysticatea/abort-controller.svg)](https://david-dm.org/mysticatea/abort-controller) - -An implementation of [WHATWG AbortController interface](https://dom.spec.whatwg.org/#interface-abortcontroller). - -```js -import AbortController from "abort-controller" - -const controller = new AbortController() -const signal = controller.signal - -signal.addEventListener("abort", () => { - console.log("aborted!") -}) - -controller.abort() -``` - -> https://jsfiddle.net/1r2994qp/1/ - -## 💿 Installation - -Use [npm](https://www.npmjs.com/) to install then use a bundler. - -``` -npm install abort-controller -``` - -Or download from [`dist` directory](./dist). - -- [dist/abort-controller.mjs](dist/abort-controller.mjs) ... ES modules version. -- [dist/abort-controller.js](dist/abort-controller.js) ... Common JS version. -- [dist/abort-controller.umd.js](dist/abort-controller.umd.js) ... UMD (Universal Module Definition) version. This is transpiled by [Babel](https://babeljs.io/) for IE 11. - -## 📖 Usage - -### Basic - -```js -import AbortController from "abort-controller" -// or -const AbortController = require("abort-controller") - -// or UMD version defines a global variable: -const AbortController = window.AbortControllerShim -``` - -If your bundler recognizes `browser` field of `package.json`, the imported `AbortController` is the native one and it doesn't contain shim (even if the native implementation was nothing). -If you wanted to polyfill `AbortController` for IE, use `abort-controller/polyfill`. - -### Polyfilling - -Importing `abort-controller/polyfill` assigns the `AbortController` shim to the `AbortController` global variable if the native implementation was nothing. - -```js -import "abort-controller/polyfill" -// or -require("abort-controller/polyfill") -``` - -### API - -#### AbortController - -> https://dom.spec.whatwg.org/#interface-abortcontroller - -##### controller.signal - -The [AbortSignal](https://dom.spec.whatwg.org/#interface-AbortSignal) object which is associated to this controller. - -##### controller.abort() - -Notify `abort` event to listeners that the `signal` has. - -## 📰 Changelog - -- See [GitHub releases](https://github.com/mysticatea/abort-controller/releases). - -## 🍻 Contributing - -Contributing is welcome ❤️ - -Please use GitHub issues/PRs. - -### Development tools - -- `npm install` installs dependencies for development. -- `npm test` runs tests and measures code coverage. -- `npm run clean` removes temporary files of tests. -- `npm run coverage` opens code coverage of the previous test with your default browser. -- `npm run lint` runs ESLint. -- `npm run build` generates `dist` codes. -- `npm run watch` runs tests on each file change. diff --git a/reverse_engineering/node_modules/abort-controller/browser.js b/reverse_engineering/node_modules/abort-controller/browser.js deleted file mode 100644 index b0c5ec3..0000000 --- a/reverse_engineering/node_modules/abort-controller/browser.js +++ /dev/null @@ -1,13 +0,0 @@ -/*globals self, window */ -"use strict" - -/*eslint-disable @mysticatea/prettier */ -const { AbortController, AbortSignal } = - typeof self !== "undefined" ? self : - typeof window !== "undefined" ? window : - /* otherwise */ undefined -/*eslint-enable @mysticatea/prettier */ - -module.exports = AbortController -module.exports.AbortSignal = AbortSignal -module.exports.default = AbortController diff --git a/reverse_engineering/node_modules/abort-controller/browser.mjs b/reverse_engineering/node_modules/abort-controller/browser.mjs deleted file mode 100644 index a8f321a..0000000 --- a/reverse_engineering/node_modules/abort-controller/browser.mjs +++ /dev/null @@ -1,11 +0,0 @@ -/*globals self, window */ - -/*eslint-disable @mysticatea/prettier */ -const { AbortController, AbortSignal } = - typeof self !== "undefined" ? self : - typeof window !== "undefined" ? window : - /* otherwise */ undefined -/*eslint-enable @mysticatea/prettier */ - -export default AbortController -export { AbortController, AbortSignal } diff --git a/reverse_engineering/node_modules/abort-controller/dist/abort-controller.d.ts b/reverse_engineering/node_modules/abort-controller/dist/abort-controller.d.ts deleted file mode 100644 index 75852fb..0000000 --- a/reverse_engineering/node_modules/abort-controller/dist/abort-controller.d.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { EventTarget } from "event-target-shim" - -type Events = { - abort: any -} -type EventAttributes = { - onabort: any -} -/** - * The signal class. - * @see https://dom.spec.whatwg.org/#abortsignal - */ -declare class AbortSignal extends EventTarget { - /** - * AbortSignal cannot be constructed directly. - */ - constructor() - /** - * Returns `true` if this `AbortSignal`"s `AbortController` has signaled to abort, and `false` otherwise. - */ - readonly aborted: boolean -} -/** - * The AbortController. - * @see https://dom.spec.whatwg.org/#abortcontroller - */ -declare class AbortController { - /** - * Initialize this controller. - */ - constructor() - /** - * Returns the `AbortSignal` object associated with this object. - */ - readonly signal: AbortSignal - /** - * Abort and signal to any observers that the associated activity is to be aborted. - */ - abort(): void -} - -export default AbortController -export { AbortController, AbortSignal } diff --git a/reverse_engineering/node_modules/abort-controller/dist/abort-controller.js b/reverse_engineering/node_modules/abort-controller/dist/abort-controller.js deleted file mode 100644 index 49af739..0000000 --- a/reverse_engineering/node_modules/abort-controller/dist/abort-controller.js +++ /dev/null @@ -1,127 +0,0 @@ -/** - * @author Toru Nagashima - * See LICENSE file in root directory for full license. - */ -'use strict'; - -Object.defineProperty(exports, '__esModule', { value: true }); - -var eventTargetShim = require('event-target-shim'); - -/** - * The signal class. - * @see https://dom.spec.whatwg.org/#abortsignal - */ -class AbortSignal extends eventTargetShim.EventTarget { - /** - * AbortSignal cannot be constructed directly. - */ - constructor() { - super(); - throw new TypeError("AbortSignal cannot be constructed directly"); - } - /** - * Returns `true` if this `AbortSignal`'s `AbortController` has signaled to abort, and `false` otherwise. - */ - get aborted() { - const aborted = abortedFlags.get(this); - if (typeof aborted !== "boolean") { - throw new TypeError(`Expected 'this' to be an 'AbortSignal' object, but got ${this === null ? "null" : typeof this}`); - } - return aborted; - } -} -eventTargetShim.defineEventAttribute(AbortSignal.prototype, "abort"); -/** - * Create an AbortSignal object. - */ -function createAbortSignal() { - const signal = Object.create(AbortSignal.prototype); - eventTargetShim.EventTarget.call(signal); - abortedFlags.set(signal, false); - return signal; -} -/** - * Abort a given signal. - */ -function abortSignal(signal) { - if (abortedFlags.get(signal) !== false) { - return; - } - abortedFlags.set(signal, true); - signal.dispatchEvent({ type: "abort" }); -} -/** - * Aborted flag for each instances. - */ -const abortedFlags = new WeakMap(); -// Properties should be enumerable. -Object.defineProperties(AbortSignal.prototype, { - aborted: { enumerable: true }, -}); -// `toString()` should return `"[object AbortSignal]"` -if (typeof Symbol === "function" && typeof Symbol.toStringTag === "symbol") { - Object.defineProperty(AbortSignal.prototype, Symbol.toStringTag, { - configurable: true, - value: "AbortSignal", - }); -} - -/** - * The AbortController. - * @see https://dom.spec.whatwg.org/#abortcontroller - */ -class AbortController { - /** - * Initialize this controller. - */ - constructor() { - signals.set(this, createAbortSignal()); - } - /** - * Returns the `AbortSignal` object associated with this object. - */ - get signal() { - return getSignal(this); - } - /** - * Abort and signal to any observers that the associated activity is to be aborted. - */ - abort() { - abortSignal(getSignal(this)); - } -} -/** - * Associated signals. - */ -const signals = new WeakMap(); -/** - * Get the associated signal of a given controller. - */ -function getSignal(controller) { - const signal = signals.get(controller); - if (signal == null) { - throw new TypeError(`Expected 'this' to be an 'AbortController' object, but got ${controller === null ? "null" : typeof controller}`); - } - return signal; -} -// Properties should be enumerable. -Object.defineProperties(AbortController.prototype, { - signal: { enumerable: true }, - abort: { enumerable: true }, -}); -if (typeof Symbol === "function" && typeof Symbol.toStringTag === "symbol") { - Object.defineProperty(AbortController.prototype, Symbol.toStringTag, { - configurable: true, - value: "AbortController", - }); -} - -exports.AbortController = AbortController; -exports.AbortSignal = AbortSignal; -exports.default = AbortController; - -module.exports = AbortController -module.exports.AbortController = module.exports["default"] = AbortController -module.exports.AbortSignal = AbortSignal -//# sourceMappingURL=abort-controller.js.map diff --git a/reverse_engineering/node_modules/abort-controller/dist/abort-controller.js.map b/reverse_engineering/node_modules/abort-controller/dist/abort-controller.js.map deleted file mode 100644 index cfdcafd..0000000 --- a/reverse_engineering/node_modules/abort-controller/dist/abort-controller.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"abort-controller.js","sources":["../src/abort-signal.ts","../src/abort-controller.ts"],"sourcesContent":["import {\n // Event,\n EventTarget,\n // Type,\n defineEventAttribute,\n} from \"event-target-shim\"\n\n// Known Limitation\n// Use `any` because the type of `AbortSignal` in `lib.dom.d.ts` is wrong and\n// to make assignable our `AbortSignal` into that.\n// https://github.com/Microsoft/TSJS-lib-generator/pull/623\ntype Events = {\n abort: any // Event & Type<\"abort\">\n}\ntype EventAttributes = {\n onabort: any // Event & Type<\"abort\">\n}\n\n/**\n * The signal class.\n * @see https://dom.spec.whatwg.org/#abortsignal\n */\nexport default class AbortSignal extends EventTarget {\n /**\n * AbortSignal cannot be constructed directly.\n */\n public constructor() {\n super()\n throw new TypeError(\"AbortSignal cannot be constructed directly\")\n }\n\n /**\n * Returns `true` if this `AbortSignal`'s `AbortController` has signaled to abort, and `false` otherwise.\n */\n public get aborted(): boolean {\n const aborted = abortedFlags.get(this)\n if (typeof aborted !== \"boolean\") {\n throw new TypeError(\n `Expected 'this' to be an 'AbortSignal' object, but got ${\n this === null ? \"null\" : typeof this\n }`,\n )\n }\n return aborted\n }\n}\ndefineEventAttribute(AbortSignal.prototype, \"abort\")\n\n/**\n * Create an AbortSignal object.\n */\nexport function createAbortSignal(): AbortSignal {\n const signal = Object.create(AbortSignal.prototype)\n EventTarget.call(signal)\n abortedFlags.set(signal, false)\n return signal\n}\n\n/**\n * Abort a given signal.\n */\nexport function abortSignal(signal: AbortSignal): void {\n if (abortedFlags.get(signal) !== false) {\n return\n }\n\n abortedFlags.set(signal, true)\n signal.dispatchEvent<\"abort\">({ type: \"abort\" })\n}\n\n/**\n * Aborted flag for each instances.\n */\nconst abortedFlags = new WeakMap()\n\n// Properties should be enumerable.\nObject.defineProperties(AbortSignal.prototype, {\n aborted: { enumerable: true },\n})\n\n// `toString()` should return `\"[object AbortSignal]\"`\nif (typeof Symbol === \"function\" && typeof Symbol.toStringTag === \"symbol\") {\n Object.defineProperty(AbortSignal.prototype, Symbol.toStringTag, {\n configurable: true,\n value: \"AbortSignal\",\n })\n}\n","import AbortSignal, { abortSignal, createAbortSignal } from \"./abort-signal\"\n\n/**\n * The AbortController.\n * @see https://dom.spec.whatwg.org/#abortcontroller\n */\nexport default class AbortController {\n /**\n * Initialize this controller.\n */\n public constructor() {\n signals.set(this, createAbortSignal())\n }\n\n /**\n * Returns the `AbortSignal` object associated with this object.\n */\n public get signal(): AbortSignal {\n return getSignal(this)\n }\n\n /**\n * Abort and signal to any observers that the associated activity is to be aborted.\n */\n public abort(): void {\n abortSignal(getSignal(this))\n }\n}\n\n/**\n * Associated signals.\n */\nconst signals = new WeakMap()\n\n/**\n * Get the associated signal of a given controller.\n */\nfunction getSignal(controller: AbortController): AbortSignal {\n const signal = signals.get(controller)\n if (signal == null) {\n throw new TypeError(\n `Expected 'this' to be an 'AbortController' object, but got ${\n controller === null ? \"null\" : typeof controller\n }`,\n )\n }\n return signal\n}\n\n// Properties should be enumerable.\nObject.defineProperties(AbortController.prototype, {\n signal: { enumerable: true },\n abort: { enumerable: true },\n})\n\nif (typeof Symbol === \"function\" && typeof Symbol.toStringTag === \"symbol\") {\n Object.defineProperty(AbortController.prototype, Symbol.toStringTag, {\n configurable: true,\n value: \"AbortController\",\n })\n}\n\nexport { AbortController, AbortSignal }\n"],"names":["EventTarget","defineEventAttribute"],"mappings":";;;;;;;;;;AAkBA;;;;AAIA,MAAqB,WAAY,SAAQA,2BAAoC;;;;IAIzE;QACI,KAAK,EAAE,CAAA;QACP,MAAM,IAAI,SAAS,CAAC,4CAA4C,CAAC,CAAA;KACpE;;;;IAKD,IAAW,OAAO;QACd,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACtC,IAAI,OAAO,OAAO,KAAK,SAAS,EAAE;YAC9B,MAAM,IAAI,SAAS,CACf,0DACI,IAAI,KAAK,IAAI,GAAG,MAAM,GAAG,OAAO,IACpC,EAAE,CACL,CAAA;SACJ;QACD,OAAO,OAAO,CAAA;KACjB;CACJ;AACDC,oCAAoB,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;;;;AAKpD,SAAgB,iBAAiB;IAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;IACnDD,2BAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACxB,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAC/B,OAAO,MAAM,CAAA;CAChB;;;;AAKD,SAAgB,WAAW,CAAC,MAAmB;IAC3C,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE;QACpC,OAAM;KACT;IAED,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAC9B,MAAM,CAAC,aAAa,CAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;CACnD;;;;AAKD,MAAM,YAAY,GAAG,IAAI,OAAO,EAAwB,CAAA;;AAGxD,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,SAAS,EAAE;IAC3C,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAChC,CAAC,CAAA;;AAGF,IAAI,OAAO,MAAM,KAAK,UAAU,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IACxE,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,EAAE;QAC7D,YAAY,EAAE,IAAI;QAClB,KAAK,EAAE,aAAa;KACvB,CAAC,CAAA;CACL;;ACpFD;;;;AAIA,MAAqB,eAAe;;;;IAIhC;QACI,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAA;KACzC;;;;IAKD,IAAW,MAAM;QACb,OAAO,SAAS,CAAC,IAAI,CAAC,CAAA;KACzB;;;;IAKM,KAAK;QACR,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;KAC/B;CACJ;;;;AAKD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAgC,CAAA;;;;AAK3D,SAAS,SAAS,CAAC,UAA2B;IAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACtC,IAAI,MAAM,IAAI,IAAI,EAAE;QAChB,MAAM,IAAI,SAAS,CACf,8DACI,UAAU,KAAK,IAAI,GAAG,MAAM,GAAG,OAAO,UAC1C,EAAE,CACL,CAAA;KACJ;IACD,OAAO,MAAM,CAAA;CAChB;;AAGD,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,SAAS,EAAE;IAC/C,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5B,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC9B,CAAC,CAAA;AAEF,IAAI,OAAO,MAAM,KAAK,UAAU,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IACxE,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,EAAE;QACjE,YAAY,EAAE,IAAI;QAClB,KAAK,EAAE,iBAAiB;KAC3B,CAAC,CAAA;CACL;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/reverse_engineering/node_modules/abort-controller/dist/abort-controller.mjs b/reverse_engineering/node_modules/abort-controller/dist/abort-controller.mjs deleted file mode 100644 index 88ba22d..0000000 --- a/reverse_engineering/node_modules/abort-controller/dist/abort-controller.mjs +++ /dev/null @@ -1,118 +0,0 @@ -/** - * @author Toru Nagashima - * See LICENSE file in root directory for full license. - */ -import { EventTarget, defineEventAttribute } from 'event-target-shim'; - -/** - * The signal class. - * @see https://dom.spec.whatwg.org/#abortsignal - */ -class AbortSignal extends EventTarget { - /** - * AbortSignal cannot be constructed directly. - */ - constructor() { - super(); - throw new TypeError("AbortSignal cannot be constructed directly"); - } - /** - * Returns `true` if this `AbortSignal`'s `AbortController` has signaled to abort, and `false` otherwise. - */ - get aborted() { - const aborted = abortedFlags.get(this); - if (typeof aborted !== "boolean") { - throw new TypeError(`Expected 'this' to be an 'AbortSignal' object, but got ${this === null ? "null" : typeof this}`); - } - return aborted; - } -} -defineEventAttribute(AbortSignal.prototype, "abort"); -/** - * Create an AbortSignal object. - */ -function createAbortSignal() { - const signal = Object.create(AbortSignal.prototype); - EventTarget.call(signal); - abortedFlags.set(signal, false); - return signal; -} -/** - * Abort a given signal. - */ -function abortSignal(signal) { - if (abortedFlags.get(signal) !== false) { - return; - } - abortedFlags.set(signal, true); - signal.dispatchEvent({ type: "abort" }); -} -/** - * Aborted flag for each instances. - */ -const abortedFlags = new WeakMap(); -// Properties should be enumerable. -Object.defineProperties(AbortSignal.prototype, { - aborted: { enumerable: true }, -}); -// `toString()` should return `"[object AbortSignal]"` -if (typeof Symbol === "function" && typeof Symbol.toStringTag === "symbol") { - Object.defineProperty(AbortSignal.prototype, Symbol.toStringTag, { - configurable: true, - value: "AbortSignal", - }); -} - -/** - * The AbortController. - * @see https://dom.spec.whatwg.org/#abortcontroller - */ -class AbortController { - /** - * Initialize this controller. - */ - constructor() { - signals.set(this, createAbortSignal()); - } - /** - * Returns the `AbortSignal` object associated with this object. - */ - get signal() { - return getSignal(this); - } - /** - * Abort and signal to any observers that the associated activity is to be aborted. - */ - abort() { - abortSignal(getSignal(this)); - } -} -/** - * Associated signals. - */ -const signals = new WeakMap(); -/** - * Get the associated signal of a given controller. - */ -function getSignal(controller) { - const signal = signals.get(controller); - if (signal == null) { - throw new TypeError(`Expected 'this' to be an 'AbortController' object, but got ${controller === null ? "null" : typeof controller}`); - } - return signal; -} -// Properties should be enumerable. -Object.defineProperties(AbortController.prototype, { - signal: { enumerable: true }, - abort: { enumerable: true }, -}); -if (typeof Symbol === "function" && typeof Symbol.toStringTag === "symbol") { - Object.defineProperty(AbortController.prototype, Symbol.toStringTag, { - configurable: true, - value: "AbortController", - }); -} - -export default AbortController; -export { AbortController, AbortSignal }; -//# sourceMappingURL=abort-controller.mjs.map diff --git a/reverse_engineering/node_modules/abort-controller/dist/abort-controller.mjs.map b/reverse_engineering/node_modules/abort-controller/dist/abort-controller.mjs.map deleted file mode 100644 index 1e8fa6b..0000000 --- a/reverse_engineering/node_modules/abort-controller/dist/abort-controller.mjs.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"abort-controller.mjs","sources":["../src/abort-signal.ts","../src/abort-controller.ts"],"sourcesContent":["import {\n // Event,\n EventTarget,\n // Type,\n defineEventAttribute,\n} from \"event-target-shim\"\n\n// Known Limitation\n// Use `any` because the type of `AbortSignal` in `lib.dom.d.ts` is wrong and\n// to make assignable our `AbortSignal` into that.\n// https://github.com/Microsoft/TSJS-lib-generator/pull/623\ntype Events = {\n abort: any // Event & Type<\"abort\">\n}\ntype EventAttributes = {\n onabort: any // Event & Type<\"abort\">\n}\n\n/**\n * The signal class.\n * @see https://dom.spec.whatwg.org/#abortsignal\n */\nexport default class AbortSignal extends EventTarget {\n /**\n * AbortSignal cannot be constructed directly.\n */\n public constructor() {\n super()\n throw new TypeError(\"AbortSignal cannot be constructed directly\")\n }\n\n /**\n * Returns `true` if this `AbortSignal`'s `AbortController` has signaled to abort, and `false` otherwise.\n */\n public get aborted(): boolean {\n const aborted = abortedFlags.get(this)\n if (typeof aborted !== \"boolean\") {\n throw new TypeError(\n `Expected 'this' to be an 'AbortSignal' object, but got ${\n this === null ? \"null\" : typeof this\n }`,\n )\n }\n return aborted\n }\n}\ndefineEventAttribute(AbortSignal.prototype, \"abort\")\n\n/**\n * Create an AbortSignal object.\n */\nexport function createAbortSignal(): AbortSignal {\n const signal = Object.create(AbortSignal.prototype)\n EventTarget.call(signal)\n abortedFlags.set(signal, false)\n return signal\n}\n\n/**\n * Abort a given signal.\n */\nexport function abortSignal(signal: AbortSignal): void {\n if (abortedFlags.get(signal) !== false) {\n return\n }\n\n abortedFlags.set(signal, true)\n signal.dispatchEvent<\"abort\">({ type: \"abort\" })\n}\n\n/**\n * Aborted flag for each instances.\n */\nconst abortedFlags = new WeakMap()\n\n// Properties should be enumerable.\nObject.defineProperties(AbortSignal.prototype, {\n aborted: { enumerable: true },\n})\n\n// `toString()` should return `\"[object AbortSignal]\"`\nif (typeof Symbol === \"function\" && typeof Symbol.toStringTag === \"symbol\") {\n Object.defineProperty(AbortSignal.prototype, Symbol.toStringTag, {\n configurable: true,\n value: \"AbortSignal\",\n })\n}\n","import AbortSignal, { abortSignal, createAbortSignal } from \"./abort-signal\"\n\n/**\n * The AbortController.\n * @see https://dom.spec.whatwg.org/#abortcontroller\n */\nexport default class AbortController {\n /**\n * Initialize this controller.\n */\n public constructor() {\n signals.set(this, createAbortSignal())\n }\n\n /**\n * Returns the `AbortSignal` object associated with this object.\n */\n public get signal(): AbortSignal {\n return getSignal(this)\n }\n\n /**\n * Abort and signal to any observers that the associated activity is to be aborted.\n */\n public abort(): void {\n abortSignal(getSignal(this))\n }\n}\n\n/**\n * Associated signals.\n */\nconst signals = new WeakMap()\n\n/**\n * Get the associated signal of a given controller.\n */\nfunction getSignal(controller: AbortController): AbortSignal {\n const signal = signals.get(controller)\n if (signal == null) {\n throw new TypeError(\n `Expected 'this' to be an 'AbortController' object, but got ${\n controller === null ? \"null\" : typeof controller\n }`,\n )\n }\n return signal\n}\n\n// Properties should be enumerable.\nObject.defineProperties(AbortController.prototype, {\n signal: { enumerable: true },\n abort: { enumerable: true },\n})\n\nif (typeof Symbol === \"function\" && typeof Symbol.toStringTag === \"symbol\") {\n Object.defineProperty(AbortController.prototype, Symbol.toStringTag, {\n configurable: true,\n value: \"AbortController\",\n })\n}\n\nexport { AbortController, AbortSignal }\n"],"names":[],"mappings":";;;;;;AAkBA;;;;AAIA,MAAqB,WAAY,SAAQ,WAAoC;;;;IAIzE;QACI,KAAK,EAAE,CAAA;QACP,MAAM,IAAI,SAAS,CAAC,4CAA4C,CAAC,CAAA;KACpE;;;;IAKD,IAAW,OAAO;QACd,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACtC,IAAI,OAAO,OAAO,KAAK,SAAS,EAAE;YAC9B,MAAM,IAAI,SAAS,CACf,0DACI,IAAI,KAAK,IAAI,GAAG,MAAM,GAAG,OAAO,IACpC,EAAE,CACL,CAAA;SACJ;QACD,OAAO,OAAO,CAAA;KACjB;CACJ;AACD,oBAAoB,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;;;;AAKpD,SAAgB,iBAAiB;IAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;IACnD,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACxB,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAC/B,OAAO,MAAM,CAAA;CAChB;;;;AAKD,SAAgB,WAAW,CAAC,MAAmB;IAC3C,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE;QACpC,OAAM;KACT;IAED,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAC9B,MAAM,CAAC,aAAa,CAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;CACnD;;;;AAKD,MAAM,YAAY,GAAG,IAAI,OAAO,EAAwB,CAAA;;AAGxD,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,SAAS,EAAE;IAC3C,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAChC,CAAC,CAAA;;AAGF,IAAI,OAAO,MAAM,KAAK,UAAU,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IACxE,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,EAAE;QAC7D,YAAY,EAAE,IAAI;QAClB,KAAK,EAAE,aAAa;KACvB,CAAC,CAAA;CACL;;ACpFD;;;;AAIA,MAAqB,eAAe;;;;IAIhC;QACI,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAA;KACzC;;;;IAKD,IAAW,MAAM;QACb,OAAO,SAAS,CAAC,IAAI,CAAC,CAAA;KACzB;;;;IAKM,KAAK;QACR,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;KAC/B;CACJ;;;;AAKD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAgC,CAAA;;;;AAK3D,SAAS,SAAS,CAAC,UAA2B;IAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACtC,IAAI,MAAM,IAAI,IAAI,EAAE;QAChB,MAAM,IAAI,SAAS,CACf,8DACI,UAAU,KAAK,IAAI,GAAG,MAAM,GAAG,OAAO,UAC1C,EAAE,CACL,CAAA;KACJ;IACD,OAAO,MAAM,CAAA;CAChB;;AAGD,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,SAAS,EAAE;IAC/C,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5B,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;CAC9B,CAAC,CAAA;AAEF,IAAI,OAAO,MAAM,KAAK,UAAU,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;IACxE,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,EAAE;QACjE,YAAY,EAAE,IAAI;QAClB,KAAK,EAAE,iBAAiB;KAC3B,CAAC,CAAA;CACL;;;;;"} \ No newline at end of file diff --git a/reverse_engineering/node_modules/abort-controller/dist/abort-controller.umd.js b/reverse_engineering/node_modules/abort-controller/dist/abort-controller.umd.js deleted file mode 100644 index f643cfd..0000000 --- a/reverse_engineering/node_modules/abort-controller/dist/abort-controller.umd.js +++ /dev/null @@ -1,5 +0,0 @@ -/** - * @author Toru Nagashima - * See LICENSE file in root directory for full license. - */(function(a,b){"object"==typeof exports&&"undefined"!=typeof module?b(exports):"function"==typeof define&&define.amd?define(["exports"],b):(a=a||self,b(a.AbortControllerShim={}))})(this,function(a){'use strict';function b(a){return b="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},b(a)}function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function d(a,b){for(var c,d=0;d\n * @copyright 2015 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\n/**\n * @typedef {object} PrivateData\n * @property {EventTarget} eventTarget The event target.\n * @property {{type:string}} event The original event object.\n * @property {number} eventPhase The current event phase.\n * @property {EventTarget|null} currentTarget The current event target.\n * @property {boolean} canceled The flag to prevent default.\n * @property {boolean} stopped The flag to stop propagation.\n * @property {boolean} immediateStopped The flag to stop propagation immediately.\n * @property {Function|null} passiveListener The listener if the current listener is passive. Otherwise this is null.\n * @property {number} timeStamp The unix time.\n * @private\n */\n\n/**\n * Private data for event wrappers.\n * @type {WeakMap}\n * @private\n */\nconst privateData = new WeakMap();\n\n/**\n * Cache for wrapper classes.\n * @type {WeakMap}\n * @private\n */\nconst wrappers = new WeakMap();\n\n/**\n * Get private data.\n * @param {Event} event The event object to get private data.\n * @returns {PrivateData} The private data of the event.\n * @private\n */\nfunction pd(event) {\n const retv = privateData.get(event);\n console.assert(\n retv != null,\n \"'this' is expected an Event object, but got\",\n event\n );\n return retv\n}\n\n/**\n * https://dom.spec.whatwg.org/#set-the-canceled-flag\n * @param data {PrivateData} private data.\n */\nfunction setCancelFlag(data) {\n if (data.passiveListener != null) {\n if (\n typeof console !== \"undefined\" &&\n typeof console.error === \"function\"\n ) {\n console.error(\n \"Unable to preventDefault inside passive event listener invocation.\",\n data.passiveListener\n );\n }\n return\n }\n if (!data.event.cancelable) {\n return\n }\n\n data.canceled = true;\n if (typeof data.event.preventDefault === \"function\") {\n data.event.preventDefault();\n }\n}\n\n/**\n * @see https://dom.spec.whatwg.org/#interface-event\n * @private\n */\n/**\n * The event wrapper.\n * @constructor\n * @param {EventTarget} eventTarget The event target of this dispatching.\n * @param {Event|{type:string}} event The original event to wrap.\n */\nfunction Event(eventTarget, event) {\n privateData.set(this, {\n eventTarget,\n event,\n eventPhase: 2,\n currentTarget: eventTarget,\n canceled: false,\n stopped: false,\n immediateStopped: false,\n passiveListener: null,\n timeStamp: event.timeStamp || Date.now(),\n });\n\n // https://heycam.github.io/webidl/#Unforgeable\n Object.defineProperty(this, \"isTrusted\", { value: false, enumerable: true });\n\n // Define accessors\n const keys = Object.keys(event);\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n if (!(key in this)) {\n Object.defineProperty(this, key, defineRedirectDescriptor(key));\n }\n }\n}\n\n// Should be enumerable, but class methods are not enumerable.\nEvent.prototype = {\n /**\n * The type of this event.\n * @type {string}\n */\n get type() {\n return pd(this).event.type\n },\n\n /**\n * The target of this event.\n * @type {EventTarget}\n */\n get target() {\n return pd(this).eventTarget\n },\n\n /**\n * The target of this event.\n * @type {EventTarget}\n */\n get currentTarget() {\n return pd(this).currentTarget\n },\n\n /**\n * @returns {EventTarget[]} The composed path of this event.\n */\n composedPath() {\n const currentTarget = pd(this).currentTarget;\n if (currentTarget == null) {\n return []\n }\n return [currentTarget]\n },\n\n /**\n * Constant of NONE.\n * @type {number}\n */\n get NONE() {\n return 0\n },\n\n /**\n * Constant of CAPTURING_PHASE.\n * @type {number}\n */\n get CAPTURING_PHASE() {\n return 1\n },\n\n /**\n * Constant of AT_TARGET.\n * @type {number}\n */\n get AT_TARGET() {\n return 2\n },\n\n /**\n * Constant of BUBBLING_PHASE.\n * @type {number}\n */\n get BUBBLING_PHASE() {\n return 3\n },\n\n /**\n * The target of this event.\n * @type {number}\n */\n get eventPhase() {\n return pd(this).eventPhase\n },\n\n /**\n * Stop event bubbling.\n * @returns {void}\n */\n stopPropagation() {\n const data = pd(this);\n\n data.stopped = true;\n if (typeof data.event.stopPropagation === \"function\") {\n data.event.stopPropagation();\n }\n },\n\n /**\n * Stop event bubbling.\n * @returns {void}\n */\n stopImmediatePropagation() {\n const data = pd(this);\n\n data.stopped = true;\n data.immediateStopped = true;\n if (typeof data.event.stopImmediatePropagation === \"function\") {\n data.event.stopImmediatePropagation();\n }\n },\n\n /**\n * The flag to be bubbling.\n * @type {boolean}\n */\n get bubbles() {\n return Boolean(pd(this).event.bubbles)\n },\n\n /**\n * The flag to be cancelable.\n * @type {boolean}\n */\n get cancelable() {\n return Boolean(pd(this).event.cancelable)\n },\n\n /**\n * Cancel this event.\n * @returns {void}\n */\n preventDefault() {\n setCancelFlag(pd(this));\n },\n\n /**\n * The flag to indicate cancellation state.\n * @type {boolean}\n */\n get defaultPrevented() {\n return pd(this).canceled\n },\n\n /**\n * The flag to be composed.\n * @type {boolean}\n */\n get composed() {\n return Boolean(pd(this).event.composed)\n },\n\n /**\n * The unix time of this event.\n * @type {number}\n */\n get timeStamp() {\n return pd(this).timeStamp\n },\n\n /**\n * The target of this event.\n * @type {EventTarget}\n * @deprecated\n */\n get srcElement() {\n return pd(this).eventTarget\n },\n\n /**\n * The flag to stop event bubbling.\n * @type {boolean}\n * @deprecated\n */\n get cancelBubble() {\n return pd(this).stopped\n },\n set cancelBubble(value) {\n if (!value) {\n return\n }\n const data = pd(this);\n\n data.stopped = true;\n if (typeof data.event.cancelBubble === \"boolean\") {\n data.event.cancelBubble = true;\n }\n },\n\n /**\n * The flag to indicate cancellation state.\n * @type {boolean}\n * @deprecated\n */\n get returnValue() {\n return !pd(this).canceled\n },\n set returnValue(value) {\n if (!value) {\n setCancelFlag(pd(this));\n }\n },\n\n /**\n * Initialize this event object. But do nothing under event dispatching.\n * @param {string} type The event type.\n * @param {boolean} [bubbles=false] The flag to be possible to bubble up.\n * @param {boolean} [cancelable=false] The flag to be possible to cancel.\n * @deprecated\n */\n initEvent() {\n // Do nothing.\n },\n};\n\n// `constructor` is not enumerable.\nObject.defineProperty(Event.prototype, \"constructor\", {\n value: Event,\n configurable: true,\n writable: true,\n});\n\n// Ensure `event instanceof window.Event` is `true`.\nif (typeof window !== \"undefined\" && typeof window.Event !== \"undefined\") {\n Object.setPrototypeOf(Event.prototype, window.Event.prototype);\n\n // Make association for wrappers.\n wrappers.set(window.Event.prototype, Event);\n}\n\n/**\n * Get the property descriptor to redirect a given property.\n * @param {string} key Property name to define property descriptor.\n * @returns {PropertyDescriptor} The property descriptor to redirect the property.\n * @private\n */\nfunction defineRedirectDescriptor(key) {\n return {\n get() {\n return pd(this).event[key]\n },\n set(value) {\n pd(this).event[key] = value;\n },\n configurable: true,\n enumerable: true,\n }\n}\n\n/**\n * Get the property descriptor to call a given method property.\n * @param {string} key Property name to define property descriptor.\n * @returns {PropertyDescriptor} The property descriptor to call the method property.\n * @private\n */\nfunction defineCallDescriptor(key) {\n return {\n value() {\n const event = pd(this).event;\n return event[key].apply(event, arguments)\n },\n configurable: true,\n enumerable: true,\n }\n}\n\n/**\n * Define new wrapper class.\n * @param {Function} BaseEvent The base wrapper class.\n * @param {Object} proto The prototype of the original event.\n * @returns {Function} The defined wrapper class.\n * @private\n */\nfunction defineWrapper(BaseEvent, proto) {\n const keys = Object.keys(proto);\n if (keys.length === 0) {\n return BaseEvent\n }\n\n /** CustomEvent */\n function CustomEvent(eventTarget, event) {\n BaseEvent.call(this, eventTarget, event);\n }\n\n CustomEvent.prototype = Object.create(BaseEvent.prototype, {\n constructor: { value: CustomEvent, configurable: true, writable: true },\n });\n\n // Define accessors.\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n if (!(key in BaseEvent.prototype)) {\n const descriptor = Object.getOwnPropertyDescriptor(proto, key);\n const isFunc = typeof descriptor.value === \"function\";\n Object.defineProperty(\n CustomEvent.prototype,\n key,\n isFunc\n ? defineCallDescriptor(key)\n : defineRedirectDescriptor(key)\n );\n }\n }\n\n return CustomEvent\n}\n\n/**\n * Get the wrapper class of a given prototype.\n * @param {Object} proto The prototype of the original event to get its wrapper.\n * @returns {Function} The wrapper class.\n * @private\n */\nfunction getWrapper(proto) {\n if (proto == null || proto === Object.prototype) {\n return Event\n }\n\n let wrapper = wrappers.get(proto);\n if (wrapper == null) {\n wrapper = defineWrapper(getWrapper(Object.getPrototypeOf(proto)), proto);\n wrappers.set(proto, wrapper);\n }\n return wrapper\n}\n\n/**\n * Wrap a given event to management a dispatching.\n * @param {EventTarget} eventTarget The event target of this dispatching.\n * @param {Object} event The event to wrap.\n * @returns {Event} The wrapper instance.\n * @private\n */\nfunction wrapEvent(eventTarget, event) {\n const Wrapper = getWrapper(Object.getPrototypeOf(event));\n return new Wrapper(eventTarget, event)\n}\n\n/**\n * Get the immediateStopped flag of a given event.\n * @param {Event} event The event to get.\n * @returns {boolean} The flag to stop propagation immediately.\n * @private\n */\nfunction isStopped(event) {\n return pd(event).immediateStopped\n}\n\n/**\n * Set the current event phase of a given event.\n * @param {Event} event The event to set current target.\n * @param {number} eventPhase New event phase.\n * @returns {void}\n * @private\n */\nfunction setEventPhase(event, eventPhase) {\n pd(event).eventPhase = eventPhase;\n}\n\n/**\n * Set the current target of a given event.\n * @param {Event} event The event to set current target.\n * @param {EventTarget|null} currentTarget New current target.\n * @returns {void}\n * @private\n */\nfunction setCurrentTarget(event, currentTarget) {\n pd(event).currentTarget = currentTarget;\n}\n\n/**\n * Set a passive listener of a given event.\n * @param {Event} event The event to set current target.\n * @param {Function|null} passiveListener New passive listener.\n * @returns {void}\n * @private\n */\nfunction setPassiveListener(event, passiveListener) {\n pd(event).passiveListener = passiveListener;\n}\n\n/**\n * @typedef {object} ListenerNode\n * @property {Function} listener\n * @property {1|2|3} listenerType\n * @property {boolean} passive\n * @property {boolean} once\n * @property {ListenerNode|null} next\n * @private\n */\n\n/**\n * @type {WeakMap>}\n * @private\n */\nconst listenersMap = new WeakMap();\n\n// Listener types\nconst CAPTURE = 1;\nconst BUBBLE = 2;\nconst ATTRIBUTE = 3;\n\n/**\n * Check whether a given value is an object or not.\n * @param {any} x The value to check.\n * @returns {boolean} `true` if the value is an object.\n */\nfunction isObject(x) {\n return x !== null && typeof x === \"object\" //eslint-disable-line no-restricted-syntax\n}\n\n/**\n * Get listeners.\n * @param {EventTarget} eventTarget The event target to get.\n * @returns {Map} The listeners.\n * @private\n */\nfunction getListeners(eventTarget) {\n const listeners = listenersMap.get(eventTarget);\n if (listeners == null) {\n throw new TypeError(\n \"'this' is expected an EventTarget object, but got another value.\"\n )\n }\n return listeners\n}\n\n/**\n * Get the property descriptor for the event attribute of a given event.\n * @param {string} eventName The event name to get property descriptor.\n * @returns {PropertyDescriptor} The property descriptor.\n * @private\n */\nfunction defineEventAttributeDescriptor(eventName) {\n return {\n get() {\n const listeners = getListeners(this);\n let node = listeners.get(eventName);\n while (node != null) {\n if (node.listenerType === ATTRIBUTE) {\n return node.listener\n }\n node = node.next;\n }\n return null\n },\n\n set(listener) {\n if (typeof listener !== \"function\" && !isObject(listener)) {\n listener = null; // eslint-disable-line no-param-reassign\n }\n const listeners = getListeners(this);\n\n // Traverse to the tail while removing old value.\n let prev = null;\n let node = listeners.get(eventName);\n while (node != null) {\n if (node.listenerType === ATTRIBUTE) {\n // Remove old value.\n if (prev !== null) {\n prev.next = node.next;\n } else if (node.next !== null) {\n listeners.set(eventName, node.next);\n } else {\n listeners.delete(eventName);\n }\n } else {\n prev = node;\n }\n\n node = node.next;\n }\n\n // Add new value.\n if (listener !== null) {\n const newNode = {\n listener,\n listenerType: ATTRIBUTE,\n passive: false,\n once: false,\n next: null,\n };\n if (prev === null) {\n listeners.set(eventName, newNode);\n } else {\n prev.next = newNode;\n }\n }\n },\n configurable: true,\n enumerable: true,\n }\n}\n\n/**\n * Define an event attribute (e.g. `eventTarget.onclick`).\n * @param {Object} eventTargetPrototype The event target prototype to define an event attrbite.\n * @param {string} eventName The event name to define.\n * @returns {void}\n */\nfunction defineEventAttribute(eventTargetPrototype, eventName) {\n Object.defineProperty(\n eventTargetPrototype,\n `on${eventName}`,\n defineEventAttributeDescriptor(eventName)\n );\n}\n\n/**\n * Define a custom EventTarget with event attributes.\n * @param {string[]} eventNames Event names for event attributes.\n * @returns {EventTarget} The custom EventTarget.\n * @private\n */\nfunction defineCustomEventTarget(eventNames) {\n /** CustomEventTarget */\n function CustomEventTarget() {\n EventTarget.call(this);\n }\n\n CustomEventTarget.prototype = Object.create(EventTarget.prototype, {\n constructor: {\n value: CustomEventTarget,\n configurable: true,\n writable: true,\n },\n });\n\n for (let i = 0; i < eventNames.length; ++i) {\n defineEventAttribute(CustomEventTarget.prototype, eventNames[i]);\n }\n\n return CustomEventTarget\n}\n\n/**\n * EventTarget.\n *\n * - This is constructor if no arguments.\n * - This is a function which returns a CustomEventTarget constructor if there are arguments.\n *\n * For example:\n *\n * class A extends EventTarget {}\n * class B extends EventTarget(\"message\") {}\n * class C extends EventTarget(\"message\", \"error\") {}\n * class D extends EventTarget([\"message\", \"error\"]) {}\n */\nfunction EventTarget() {\n /*eslint-disable consistent-return */\n if (this instanceof EventTarget) {\n listenersMap.set(this, new Map());\n return\n }\n if (arguments.length === 1 && Array.isArray(arguments[0])) {\n return defineCustomEventTarget(arguments[0])\n }\n if (arguments.length > 0) {\n const types = new Array(arguments.length);\n for (let i = 0; i < arguments.length; ++i) {\n types[i] = arguments[i];\n }\n return defineCustomEventTarget(types)\n }\n throw new TypeError(\"Cannot call a class as a function\")\n /*eslint-enable consistent-return */\n}\n\n// Should be enumerable, but class methods are not enumerable.\nEventTarget.prototype = {\n /**\n * Add a given listener to this event target.\n * @param {string} eventName The event name to add.\n * @param {Function} listener The listener to add.\n * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\n * @returns {void}\n */\n addEventListener(eventName, listener, options) {\n if (listener == null) {\n return\n }\n if (typeof listener !== \"function\" && !isObject(listener)) {\n throw new TypeError(\"'listener' should be a function or an object.\")\n }\n\n const listeners = getListeners(this);\n const optionsIsObj = isObject(options);\n const capture = optionsIsObj\n ? Boolean(options.capture)\n : Boolean(options);\n const listenerType = capture ? CAPTURE : BUBBLE;\n const newNode = {\n listener,\n listenerType,\n passive: optionsIsObj && Boolean(options.passive),\n once: optionsIsObj && Boolean(options.once),\n next: null,\n };\n\n // Set it as the first node if the first node is null.\n let node = listeners.get(eventName);\n if (node === undefined) {\n listeners.set(eventName, newNode);\n return\n }\n\n // Traverse to the tail while checking duplication..\n let prev = null;\n while (node != null) {\n if (\n node.listener === listener &&\n node.listenerType === listenerType\n ) {\n // Should ignore duplication.\n return\n }\n prev = node;\n node = node.next;\n }\n\n // Add it.\n prev.next = newNode;\n },\n\n /**\n * Remove a given listener from this event target.\n * @param {string} eventName The event name to remove.\n * @param {Function} listener The listener to remove.\n * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\n * @returns {void}\n */\n removeEventListener(eventName, listener, options) {\n if (listener == null) {\n return\n }\n\n const listeners = getListeners(this);\n const capture = isObject(options)\n ? Boolean(options.capture)\n : Boolean(options);\n const listenerType = capture ? CAPTURE : BUBBLE;\n\n let prev = null;\n let node = listeners.get(eventName);\n while (node != null) {\n if (\n node.listener === listener &&\n node.listenerType === listenerType\n ) {\n if (prev !== null) {\n prev.next = node.next;\n } else if (node.next !== null) {\n listeners.set(eventName, node.next);\n } else {\n listeners.delete(eventName);\n }\n return\n }\n\n prev = node;\n node = node.next;\n }\n },\n\n /**\n * Dispatch a given event.\n * @param {Event|{type:string}} event The event to dispatch.\n * @returns {boolean} `false` if canceled.\n */\n dispatchEvent(event) {\n if (event == null || typeof event.type !== \"string\") {\n throw new TypeError('\"event.type\" should be a string.')\n }\n\n // If listeners aren't registered, terminate.\n const listeners = getListeners(this);\n const eventName = event.type;\n let node = listeners.get(eventName);\n if (node == null) {\n return true\n }\n\n // Since we cannot rewrite several properties, so wrap object.\n const wrappedEvent = wrapEvent(this, event);\n\n // This doesn't process capturing phase and bubbling phase.\n // This isn't participating in a tree.\n let prev = null;\n while (node != null) {\n // Remove this listener if it's once\n if (node.once) {\n if (prev !== null) {\n prev.next = node.next;\n } else if (node.next !== null) {\n listeners.set(eventName, node.next);\n } else {\n listeners.delete(eventName);\n }\n } else {\n prev = node;\n }\n\n // Call this listener\n setPassiveListener(\n wrappedEvent,\n node.passive ? node.listener : null\n );\n if (typeof node.listener === \"function\") {\n try {\n node.listener.call(this, wrappedEvent);\n } catch (err) {\n if (\n typeof console !== \"undefined\" &&\n typeof console.error === \"function\"\n ) {\n console.error(err);\n }\n }\n } else if (\n node.listenerType !== ATTRIBUTE &&\n typeof node.listener.handleEvent === \"function\"\n ) {\n node.listener.handleEvent(wrappedEvent);\n }\n\n // Break if `event.stopImmediatePropagation` was called.\n if (isStopped(wrappedEvent)) {\n break\n }\n\n node = node.next;\n }\n setPassiveListener(wrappedEvent, null);\n setEventPhase(wrappedEvent, 0);\n setCurrentTarget(wrappedEvent, null);\n\n return !wrappedEvent.defaultPrevented\n },\n};\n\n// `constructor` is not enumerable.\nObject.defineProperty(EventTarget.prototype, \"constructor\", {\n value: EventTarget,\n configurable: true,\n writable: true,\n});\n\n// Ensure `eventTarget instanceof window.EventTarget` is `true`.\nif (\n typeof window !== \"undefined\" &&\n typeof window.EventTarget !== \"undefined\"\n) {\n Object.setPrototypeOf(EventTarget.prototype, window.EventTarget.prototype);\n}\n\nexport default EventTarget;\nexport { defineEventAttribute, EventTarget };\n//# sourceMappingURL=event-target-shim.mjs.map\n","import {\n // Event,\n EventTarget,\n // Type,\n defineEventAttribute,\n} from \"event-target-shim\"\n\n// Known Limitation\n// Use `any` because the type of `AbortSignal` in `lib.dom.d.ts` is wrong and\n// to make assignable our `AbortSignal` into that.\n// https://github.com/Microsoft/TSJS-lib-generator/pull/623\ntype Events = {\n abort: any // Event & Type<\"abort\">\n}\ntype EventAttributes = {\n onabort: any // Event & Type<\"abort\">\n}\n\n/**\n * The signal class.\n * @see https://dom.spec.whatwg.org/#abortsignal\n */\nexport default class AbortSignal extends EventTarget {\n /**\n * AbortSignal cannot be constructed directly.\n */\n public constructor() {\n super()\n throw new TypeError(\"AbortSignal cannot be constructed directly\")\n }\n\n /**\n * Returns `true` if this `AbortSignal`'s `AbortController` has signaled to abort, and `false` otherwise.\n */\n public get aborted(): boolean {\n const aborted = abortedFlags.get(this)\n if (typeof aborted !== \"boolean\") {\n throw new TypeError(\n `Expected 'this' to be an 'AbortSignal' object, but got ${\n this === null ? \"null\" : typeof this\n }`,\n )\n }\n return aborted\n }\n}\ndefineEventAttribute(AbortSignal.prototype, \"abort\")\n\n/**\n * Create an AbortSignal object.\n */\nexport function createAbortSignal(): AbortSignal {\n const signal = Object.create(AbortSignal.prototype)\n EventTarget.call(signal)\n abortedFlags.set(signal, false)\n return signal\n}\n\n/**\n * Abort a given signal.\n */\nexport function abortSignal(signal: AbortSignal): void {\n if (abortedFlags.get(signal) !== false) {\n return\n }\n\n abortedFlags.set(signal, true)\n signal.dispatchEvent<\"abort\">({ type: \"abort\" })\n}\n\n/**\n * Aborted flag for each instances.\n */\nconst abortedFlags = new WeakMap()\n\n// Properties should be enumerable.\nObject.defineProperties(AbortSignal.prototype, {\n aborted: { enumerable: true },\n})\n\n// `toString()` should return `\"[object AbortSignal]\"`\nif (typeof Symbol === \"function\" && typeof Symbol.toStringTag === \"symbol\") {\n Object.defineProperty(AbortSignal.prototype, Symbol.toStringTag, {\n configurable: true,\n value: \"AbortSignal\",\n })\n}\n","import AbortSignal, { abortSignal, createAbortSignal } from \"./abort-signal\"\n\n/**\n * The AbortController.\n * @see https://dom.spec.whatwg.org/#abortcontroller\n */\nexport default class AbortController {\n /**\n * Initialize this controller.\n */\n public constructor() {\n signals.set(this, createAbortSignal())\n }\n\n /**\n * Returns the `AbortSignal` object associated with this object.\n */\n public get signal(): AbortSignal {\n return getSignal(this)\n }\n\n /**\n * Abort and signal to any observers that the associated activity is to be aborted.\n */\n public abort(): void {\n abortSignal(getSignal(this))\n }\n}\n\n/**\n * Associated signals.\n */\nconst signals = new WeakMap()\n\n/**\n * Get the associated signal of a given controller.\n */\nfunction getSignal(controller: AbortController): AbortSignal {\n const signal = signals.get(controller)\n if (signal == null) {\n throw new TypeError(\n `Expected 'this' to be an 'AbortController' object, but got ${\n controller === null ? \"null\" : typeof controller\n }`,\n )\n }\n return signal\n}\n\n// Properties should be enumerable.\nObject.defineProperties(AbortController.prototype, {\n signal: { enumerable: true },\n abort: { enumerable: true },\n})\n\nif (typeof Symbol === \"function\" && typeof Symbol.toStringTag === \"symbol\") {\n Object.defineProperty(AbortController.prototype, Symbol.toStringTag, {\n configurable: true,\n value: \"AbortController\",\n })\n}\n\nexport { AbortController, AbortSignal }\n"],"names":["pd","event","retv","privateData","get","console","assert","setCancelFlag","data","passiveListener","cancelable","canceled","preventDefault","error","Event","eventTarget","set","eventPhase","currentTarget","stopped","immediateStopped","timeStamp","Date","now","Object","defineProperty","value","enumerable","key","keys","i","length","defineRedirectDescriptor","configurable","defineCallDescriptor","apply","arguments","defineWrapper","BaseEvent","proto","CustomEvent","call","prototype","create","constructor","writable","descriptor","getOwnPropertyDescriptor","isFunc","getWrapper","wrapper","wrappers","getPrototypeOf","wrapEvent","Wrapper","isStopped","setEventPhase","setCurrentTarget","setPassiveListener","createAbortSignal","signal","AbortSignal","EventTarget","abortedFlags","abortSignal","dispatchEvent","type","getSignal","controller","signals","TypeError","WeakMap","target","composedPath","NONE","CAPTURING_PHASE","AT_TARGET","BUBBLING_PHASE","stopPropagation","stopImmediatePropagation","bubbles","defaultPrevented","composed","srcElement","cancelBubble","returnValue","initEvent","window","setPrototypeOf","aborted","defineEventAttribute","defineProperties","Symbol","_typeof","toStringTag","AbortController","abort"],"mappings":";;;+3CAkCA,QAASA,CAAAA,CAAT,CAAYC,CAAZ,CAAmB,IACTC,CAAAA,CAAI,CAAGC,CAAW,CAACC,GAAZ,CAAgBH,CAAhB,QACbI,CAAAA,OAAO,CAACC,MAAR,CACY,IAAR,EAAAJ,CADJ,CAEI,6CAFJ,CAGID,CAHJ,EAKOC,EAOX,QAASK,CAAAA,CAAT,CAAuBC,CAAvB,CAA6B,OACG,KAAxB,EAAAA,CAAI,CAACC,eADgB,MAarB,CAACD,CAAI,CAACP,KAAL,CAAWS,UAbS,GAiBzBF,CAAI,CAACG,QAAL,GAjByB,CAkBgB,UAArC,QAAOH,CAAAA,CAAI,CAACP,KAAL,CAAWW,cAlBG,EAmBrBJ,CAAI,CAACP,KAAL,CAAWW,cAAX,EAnBqB,QAGE,WAAnB,QAAOP,CAAAA,OAAP,EACyB,UAAzB,QAAOA,CAAAA,OAAO,CAACQ,KAJE,EAMjBR,OAAO,CAACQ,KAAR,CACI,oEADJ,CAEIL,CAAI,CAACC,eAFT,CANiB,EAiC7B,QAASK,CAAAA,CAAT,CAAeC,CAAf,CAA4Bd,CAA5B,CAAmC,CAC/BE,CAAW,CAACa,GAAZ,CAAgB,IAAhB,CAAsB,CAClBD,WAAW,CAAXA,CADkB,CAElBd,KAAK,CAALA,CAFkB,CAGlBgB,UAAU,CAAE,CAHM,CAIlBC,aAAa,CAAEH,CAJG,CAKlBJ,QAAQ,GALU,CAMlBQ,OAAO,GANW,CAOlBC,gBAAgB,GAPE,CAQlBX,eAAe,CAAE,IARC,CASlBY,SAAS,CAAEpB,CAAK,CAACoB,SAAN,EAAmBC,IAAI,CAACC,GAAL,EATZ,CAAtB,CAD+B,CAc/BC,MAAM,CAACC,cAAP,CAAsB,IAAtB,CAA4B,WAA5B,CAAyC,CAAEC,KAAK,GAAP,CAAgBC,UAAU,GAA1B,CAAzC,CAd+B,QAmBrBC,CAAAA,EAFJC,CAAI,CAAGL,MAAM,CAACK,IAAP,CAAY5B,CAAZ,EACJ6B,CAAC,CAAG,EAAGA,CAAC,CAAGD,CAAI,CAACE,OAAQ,EAAED,EACzBF,EAAMC,CAAI,CAACC,CAAD,EACVF,CAAG,GAAI,OACTJ,MAAM,CAACC,cAAP,CAAsB,IAAtB,CAA4BG,CAA5B,CAAiCI,CAAwB,CAACJ,CAAD,CAAzD,EAyOZ,QAASI,CAAAA,CAAT,CAAkCJ,CAAlC,CAAuC,OAC5B,CACHxB,GADG,WACG,OACKJ,CAAAA,CAAE,CAAC,IAAD,CAAF,CAASC,KAAT,CAAe2B,CAAf,CAFR,CAAA,CAIHZ,GAJG,UAICU,EAAO,CACP1B,CAAE,CAAC,IAAD,CAAF,CAASC,KAAT,CAAe2B,CAAf,EAAsBF,CALvB,CAAA,CAOHO,YAAY,GAPT,CAQHN,UAAU,GARP,EAkBX,QAASO,CAAAA,CAAT,CAA8BN,CAA9B,CAAmC,OACxB,CACHF,KADG,WACK,IACEzB,CAAAA,CAAK,CAAGD,CAAE,CAAC,IAAD,CAAF,CAASC,YAChBA,CAAAA,CAAK,CAAC2B,CAAD,CAAL,CAAWO,KAAX,CAAiBlC,CAAjB,CAAwBmC,SAAxB,CAHR,CAAA,CAKHH,YAAY,GALT,CAMHN,UAAU,GANP,EAiBX,QAASU,CAAAA,CAAT,CAAuBC,CAAvB,CAAkCC,CAAlC,CAAyC,SAO5BC,CAAAA,EAAYzB,EAAad,EAAO,CACrCqC,CAAS,CAACG,IAAV,CAAe,IAAf,CAAqB1B,CAArB,CAAkCd,CAAlC,KAPE4B,CAAAA,CAAI,CAAGL,MAAM,CAACK,IAAP,CAAYU,CAAZ,KACO,CAAhB,GAAAV,CAAI,CAACE,aACEO,CAAAA,EAQXE,CAAW,CAACE,SAAZ,CAAwBlB,MAAM,CAACmB,MAAP,CAAcL,CAAS,CAACI,SAAxB,CAAmC,CACvDE,WAAW,CAAE,CAAElB,KAAK,CAAEc,CAAT,CAAsBP,YAAY,GAAlC,CAA0CY,QAAQ,GAAlD,CAD0C,CAAnC,CAXa,KAgBhC,GACKjB,CAAAA,CADL,CAAIE,CAAC,CAAG,EAAGA,CAAC,CAAGD,CAAI,CAACE,OAAQ,EAAED,KACzBF,EAAMC,CAAI,CAACC,CAAD,EACZ,EAAEF,CAAG,GAAIU,CAAAA,CAAS,CAACI,SAAnB,EAA+B,IACzBI,CAAAA,CAAU,CAAGtB,MAAM,CAACuB,wBAAP,CAAgCR,CAAhC,CAAuCX,CAAvC,CADY,CAEzBoB,CAAM,CAA+B,UAA5B,QAAOF,CAAAA,CAAU,CAACpB,KAFF,CAG/BF,MAAM,CAACC,cAAP,CACIe,CAAW,CAACE,SADhB,CAEId,CAFJ,CAGIoB,CAAM,CACAd,CAAoB,CAACN,CAAD,CADpB,CAEAI,CAAwB,CAACJ,CAAD,CALlC,QAUDY,CAAAA,EASX,QAASS,CAAAA,CAAT,CAAoBV,CAApB,CAA2B,IACV,IAAT,EAAAA,CAAK,EAAYA,CAAK,GAAKf,MAAM,CAACkB,gBAC3B5B,CAAAA,KAGPoC,CAAAA,CAAO,CAAGC,CAAQ,CAAC/C,GAAT,CAAamC,CAAb,QACC,KAAX,EAAAW,IACAA,CAAO,CAAGb,CAAa,CAACY,CAAU,CAACzB,MAAM,CAAC4B,cAAP,CAAsBb,CAAtB,CAAD,CAAX,CAA2CA,CAA3C,EACvBY,CAAQ,CAACnC,GAAT,CAAauB,CAAb,CAAoBW,CAApB,GAEGA,EAUJ,QAASG,CAAAA,CAAT,CAAmBtC,CAAnB,CAAgCd,CAAhC,CAAuC,IACpCqD,CAAAA,CAAO,CAAGL,CAAU,CAACzB,MAAM,CAAC4B,cAAP,CAAsBnD,CAAtB,CAAD,QACnB,IAAIqD,CAAAA,CAAJ,CAAYvC,CAAZ,CAAyBd,CAAzB,EASJ,QAASsD,CAAAA,CAAT,CAAmBtD,CAAnB,CAA0B,OACtBD,CAAAA,CAAE,CAACC,CAAD,CAAF,CAAUmB,iBAUd,QAASoC,CAAAA,CAAT,CAAuBvD,CAAvB,CAA8BgB,CAA9B,CAA0C,CAC7CjB,CAAE,CAACC,CAAD,CAAF,CAAUgB,UAAV,CAAuBA,EAUpB,QAASwC,CAAAA,CAAT,CAA0BxD,CAA1B,CAAiCiB,CAAjC,CAAgD,CACnDlB,CAAE,CAACC,CAAD,CAAF,CAAUiB,aAAV,CAA0BA,EAUvB,QAASwC,CAAAA,CAAT,CAA4BzD,CAA5B,CAAmCQ,CAAnC,CAAoD,CACvDT,CAAE,CAACC,CAAD,CAAF,CAAUQ,eAAV,CAA4BA,ysCC1ahBkD,CAAAA,OACNC,CAAAA,CAAM,CAAGpC,MAAM,CAACmB,MAAPnB,CAAcqC,CAAW,CAACnB,SAA1BlB,QACfsC,CAAAA,CAAW,CAACrB,IAAZqB,CAAiBF,CAAjBE,EACAC,CAAY,CAAC/C,GAAb+C,CAAiBH,CAAjBG,KACOH,UAMKI,CAAAA,EAAYJ,GACpBG,KAAAA,CAAY,CAAC3D,GAAb2D,CAAiBH,CAAjBG,IAIJA,CAAY,CAAC/C,GAAb+C,CAAiBH,CAAjBG,KACAH,CAAM,CAACK,aAAPL,CAA8B,CAAEM,IAAI,CAAE,OAAR,CAA9BN,GC9BJ,QAASO,CAAAA,CAAT,CAAmBC,CAAnB,KACUR,CAAAA,CAAM,CAAGS,CAAO,CAACjE,GAARiE,CAAYD,CAAZC,KACD,IAAVT,EAAAA,OACM,IAAIU,CAAAA,SAAJ,sEAEiB,IAAfF,GAAAA,CAAU,CAAY,MAAZ,GAA4BA,GAFxC,QAMHR,CAAAA,KF3BLzD,CAAAA,CAAW,CAAG,GAAIoE,CAAAA,QAOlBpB,CAAQ,CAAG,GAAIoB,CAAAA,QAkFrBzD,CAAK,CAAC4B,SAAN,CAAkB,IAKVwB,CAAAA,MAAO,OACAlE,CAAAA,CAAE,CAAC,IAAD,CAAF,CAASC,KAAT,CAAeiE,IANZ,CAAA,IAaVM,CAAAA,QAAS,OACFxE,CAAAA,CAAE,CAAC,IAAD,CAAF,CAASe,WAdN,CAAA,IAqBVG,CAAAA,eAAgB,OACTlB,CAAAA,CAAE,CAAC,IAAD,CAAF,CAASkB,aAtBN,CAAA,CA4BduD,YA5Bc,WA4BC,IACLvD,CAAAA,CAAa,CAAGlB,CAAE,CAAC,IAAD,CAAF,CAASkB,cADpB,MAEU,KAAjB,EAAAA,CAFO,CAGA,EAHA,CAKJ,CAACA,CAAD,CAjCG,CAAA,IAwCVwD,CAAAA,MAAO,OACA,EAzCG,CAAA,IAgDVC,CAAAA,iBAAkB,OACX,EAjDG,CAAA,IAwDVC,CAAAA,WAAY,OACL,EAzDG,CAAA,IAgEVC,CAAAA,gBAAiB,OACV,EAjEG,CAAA,IAwEV5D,CAAAA,YAAa,OACNjB,CAAAA,CAAE,CAAC,IAAD,CAAF,CAASiB,UAzEN,CAAA,CAgFd6D,eAhFc,WAgFI,IACRtE,CAAAA,CAAI,CAAGR,CAAE,CAAC,IAAD,EAEfQ,CAAI,CAACW,OAAL,GAHc,CAI4B,UAAtC,QAAOX,CAAAA,CAAI,CAACP,KAAL,CAAW6E,eAJR,EAKVtE,CAAI,CAACP,KAAL,CAAW6E,eAAX,EArFM,CAAA,CA6FdC,wBA7Fc,WA6Fa,IACjBvE,CAAAA,CAAI,CAAGR,CAAE,CAAC,IAAD,EAEfQ,CAAI,CAACW,OAAL,GAHuB,CAIvBX,CAAI,CAACY,gBAAL,GAJuB,CAK4B,UAA/C,QAAOZ,CAAAA,CAAI,CAACP,KAAL,CAAW8E,wBALC,EAMnBvE,CAAI,CAACP,KAAL,CAAW8E,wBAAX,EAnGM,CAAA,IA2GVC,CAAAA,SAAU,SACKhF,CAAE,CAAC,IAAD,CAAF,CAASC,KAAT,CAAe+E,OA5GpB,CAAA,IAmHVtE,CAAAA,YAAa,SACEV,CAAE,CAAC,IAAD,CAAF,CAASC,KAAT,CAAeS,UApHpB,CAAA,CA2HdE,cA3Hc,WA2HG,CACbL,CAAa,CAACP,CAAE,CAAC,IAAD,CAAH,CA5HH,CAAA,IAmIViF,CAAAA,kBAAmB,OACZjF,CAAAA,CAAE,CAAC,IAAD,CAAF,CAASW,QApIN,CAAA,IA2IVuE,CAAAA,UAAW,SACIlF,CAAE,CAAC,IAAD,CAAF,CAASC,KAAT,CAAeiF,QA5IpB,CAAA,IAmJV7D,CAAAA,WAAY,OACLrB,CAAAA,CAAE,CAAC,IAAD,CAAF,CAASqB,SApJN,CAAA,IA4JV8D,CAAAA,YAAa,OACNnF,CAAAA,CAAE,CAAC,IAAD,CAAF,CAASe,WA7JN,CAAA,IAqKVqE,CAAAA,cAAe,OACRpF,CAAAA,CAAE,CAAC,IAAD,CAAF,CAASmB,OAtKN,CAAA,IAwKViE,CAAAA,aAAa1D,EAAO,IACfA,MAGClB,CAAAA,CAAI,CAAGR,CAAE,CAAC,IAAD,EAEfQ,CAAI,CAACW,OAAL,IACuC,SAAnC,QAAOX,CAAAA,CAAI,CAACP,KAAL,CAAWmF,eAClB5E,CAAI,CAACP,KAAL,CAAWmF,YAAX,KAhLM,CAAA,IAyLVC,CAAAA,aAAc,OACP,CAACrF,CAAE,CAAC,IAAD,CAAF,CAASW,QA1LP,CAAA,IA4LV0E,CAAAA,YAAY3D,EAAO,CACdA,CADc,EAEfnB,CAAa,CAACP,CAAE,CAAC,IAAD,CAAH,CA9LP,CAAA,CAyMdsF,SAzMc,WAyMF,EAzME,EA+MlB9D,MAAM,CAACC,cAAP,CAAsBX,CAAK,CAAC4B,SAA5B,CAAuC,aAAvC,CAAsD,CAClDhB,KAAK,CAAEZ,CAD2C,CAElDmB,YAAY,GAFsC,CAGlDY,QAAQ,GAH0C,CAAtD,EAOsB,WAAlB,QAAO0C,CAAAA,MAAP,EAAyD,WAAxB,QAAOA,CAAAA,MAAM,CAACzE,QAC/CU,MAAM,CAACgE,cAAP,CAAsB1E,CAAK,CAAC4B,SAA5B,CAAuC6C,MAAM,CAACzE,KAAP,CAAa4B,SAApD,EAGAS,CAAQ,CAACnC,GAAT,CAAauE,MAAM,CAACzE,KAAP,CAAa4B,SAA1B,CAAqC5B,CAArC,wiDChTiB+C,CAAAA,2EAMP,GAAIS,CAAAA,SAAJ,CAAc,4CAAd,sDAOAmB,CAAAA,CAAO,CAAG1B,CAAY,CAAC3D,GAAb2D,CAAiB,IAAjBA,KACO,SAAnB,QAAO0B,CAAAA,OACD,IAAInB,CAAAA,SAAJ,kEAEW,IAAT,QAAgB,MAAhB,GAAgC,MAFlC,QAMHmB,CAAAA,SArB0B3B,GAwBzC4B,CAAoB,CAAC7B,CAAW,CAACnB,SAAb,CAAwB,OAAxB,EA2BpB,GAAMqB,CAAAA,CAAY,CAAG,GAAIQ,CAAAA,OAAzB,CAGA/C,MAAM,CAACmE,gBAAPnE,CAAwBqC,CAAW,CAACnB,SAApClB,CAA+C,CAC3CiE,OAAO,CAAE,CAAE9D,UAAU,GAAZ,CADkC,CAA/CH,EAKsB,UAAlB,QAAOoE,CAAAA,MAAP,EAA8D,QAA9B,GAAAC,EAAOD,MAAM,CAACE,cAC9CtE,MAAM,CAACC,cAAPD,CAAsBqC,CAAW,CAACnB,SAAlClB,CAA6CoE,MAAM,CAACE,WAApDtE,CAAiE,CAC7DS,YAAY,GADiD,CAE7DP,KAAK,CAAE,aAFsD,CAAjEF,KC5EiBuE,CAAAA,oCAKb1B,CAAO,CAACrD,GAARqD,CAAY,IAAZA,CAAkBV,CAAiB,EAAnCU,4CAcAL,CAAW,CAACG,CAAS,CAAC,IAAD,CAAV,uCAPJA,CAAAA,CAAS,CAAC,IAAD,WAclBE,CAAO,CAAG,GAAIE,CAAAA,WAkBpB/C,MAAM,CAACmE,gBAAPnE,CAAwBuE,CAAe,CAACrD,SAAxClB,CAAmD,CAC/CoC,MAAM,CAAE,CAAEjC,UAAU,GAAZ,CADuC,CAE/CqE,KAAK,CAAE,CAAErE,UAAU,GAAZ,CAFwC,CAAnDH,EAKsB,UAAlB,QAAOoE,CAAAA,MAAP,EAA8D,QAA9B,GAAAC,EAAOD,MAAM,CAACE,cAC9CtE,MAAM,CAACC,cAAPD,CAAsBuE,CAAe,CAACrD,SAAtClB,CAAiDoE,MAAM,CAACE,WAAxDtE,CAAqE,CACjES,YAAY,GADqD,CAEjEP,KAAK,CAAE,iBAF0D,CAArEF"} \ No newline at end of file diff --git a/reverse_engineering/node_modules/abort-controller/package.json b/reverse_engineering/node_modules/abort-controller/package.json deleted file mode 100644 index dc600f2..0000000 --- a/reverse_engineering/node_modules/abort-controller/package.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "_from": "abort-controller@^3.0.0", - "_id": "abort-controller@3.0.0", - "_inBundle": false, - "_integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "_location": "/abort-controller", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "abort-controller@^3.0.0", - "name": "abort-controller", - "escapedName": "abort-controller", - "rawSpec": "^3.0.0", - "saveSpec": null, - "fetchSpec": "^3.0.0" - }, - "_requiredBy": [ - "/gaxios" - ], - "_resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "_shasum": "eaf54d53b62bae4138e809ca225c8439a6efb392", - "_spec": "abort-controller@^3.0.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/gaxios", - "author": { - "name": "Toru Nagashima", - "url": "https://github.com/mysticatea" - }, - "browser": "./browser.js", - "bugs": { - "url": "https://github.com/mysticatea/abort-controller/issues" - }, - "bundleDependencies": false, - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "deprecated": false, - "description": "An implementation of WHATWG AbortController interface.", - "devDependencies": { - "@babel/core": "^7.2.2", - "@babel/plugin-transform-modules-commonjs": "^7.2.0", - "@babel/preset-env": "^7.3.0", - "@babel/register": "^7.0.0", - "@mysticatea/eslint-plugin": "^8.0.1", - "@mysticatea/spy": "^0.1.2", - "@types/mocha": "^5.2.5", - "@types/node": "^10.12.18", - "assert": "^1.4.1", - "codecov": "^3.1.0", - "dts-bundle-generator": "^2.0.0", - "eslint": "^5.12.1", - "karma": "^3.1.4", - "karma-chrome-launcher": "^2.2.0", - "karma-coverage": "^1.1.2", - "karma-firefox-launcher": "^1.1.0", - "karma-growl-reporter": "^1.0.0", - "karma-ie-launcher": "^1.0.0", - "karma-mocha": "^1.3.0", - "karma-rollup-preprocessor": "^7.0.0-rc.2", - "mocha": "^5.2.0", - "npm-run-all": "^4.1.5", - "nyc": "^13.1.0", - "opener": "^1.5.1", - "rimraf": "^2.6.3", - "rollup": "^1.1.2", - "rollup-plugin-babel": "^4.3.2", - "rollup-plugin-babel-minify": "^7.0.0", - "rollup-plugin-commonjs": "^9.2.0", - "rollup-plugin-node-resolve": "^4.0.0", - "rollup-plugin-sourcemaps": "^0.4.2", - "rollup-plugin-typescript": "^1.0.0", - "rollup-watch": "^4.3.1", - "ts-node": "^8.0.1", - "type-tester": "^1.0.0", - "typescript": "^3.2.4" - }, - "engines": { - "node": ">=6.5" - }, - "files": [ - "dist", - "polyfill.*", - "browser.*" - ], - "homepage": "https://github.com/mysticatea/abort-controller#readme", - "keywords": [ - "w3c", - "whatwg", - "event", - "events", - "abort", - "cancel", - "abortcontroller", - "abortsignal", - "controller", - "signal", - "shim" - ], - "license": "MIT", - "main": "dist/abort-controller", - "name": "abort-controller", - "repository": { - "type": "git", - "url": "git+https://github.com/mysticatea/abort-controller.git" - }, - "scripts": { - "build": "run-s -s build:*", - "build:dts": "dts-bundle-generator -o dist/abort-controller.d.ts src/abort-controller.ts && ts-node scripts/fix-dts", - "build:rollup": "rollup -c", - "clean": "rimraf .nyc_output coverage", - "codecov": "codecov", - "coverage": "opener coverage/lcov-report/index.html", - "lint": "eslint . --ext .ts", - "postversion": "git push && git push --tags", - "preversion": "npm test", - "test": "run-s -s lint test:*", - "test:karma": "karma start --single-run", - "test:mocha": "nyc mocha test/*.ts", - "version": "npm run -s build && git add dist/*", - "watch": "run-p -s watch:*", - "watch:karma": "karma start --watch", - "watch:mocha": "mocha test/*.ts --require ts-node/register --watch-extensions ts --watch --growl" - }, - "version": "3.0.0" -} diff --git a/reverse_engineering/node_modules/abort-controller/polyfill.js b/reverse_engineering/node_modules/abort-controller/polyfill.js deleted file mode 100644 index 3ca8923..0000000 --- a/reverse_engineering/node_modules/abort-controller/polyfill.js +++ /dev/null @@ -1,21 +0,0 @@ -/*globals require, self, window */ -"use strict" - -const ac = require("./dist/abort-controller") - -/*eslint-disable @mysticatea/prettier */ -const g = - typeof self !== "undefined" ? self : - typeof window !== "undefined" ? window : - typeof global !== "undefined" ? global : - /* otherwise */ undefined -/*eslint-enable @mysticatea/prettier */ - -if (g) { - if (typeof g.AbortController === "undefined") { - g.AbortController = ac.AbortController - } - if (typeof g.AbortSignal === "undefined") { - g.AbortSignal = ac.AbortSignal - } -} diff --git a/reverse_engineering/node_modules/abort-controller/polyfill.mjs b/reverse_engineering/node_modules/abort-controller/polyfill.mjs deleted file mode 100644 index 0602a64..0000000 --- a/reverse_engineering/node_modules/abort-controller/polyfill.mjs +++ /dev/null @@ -1,19 +0,0 @@ -/*globals self, window */ -import * as ac from "./dist/abort-controller" - -/*eslint-disable @mysticatea/prettier */ -const g = - typeof self !== "undefined" ? self : - typeof window !== "undefined" ? window : - typeof global !== "undefined" ? global : - /* otherwise */ undefined -/*eslint-enable @mysticatea/prettier */ - -if (g) { - if (typeof g.AbortController === "undefined") { - g.AbortController = ac.AbortController - } - if (typeof g.AbortSignal === "undefined") { - g.AbortSignal = ac.AbortSignal - } -} diff --git a/reverse_engineering/node_modules/agent-base/README.md b/reverse_engineering/node_modules/agent-base/README.md deleted file mode 100644 index 256f1f3..0000000 --- a/reverse_engineering/node_modules/agent-base/README.md +++ /dev/null @@ -1,145 +0,0 @@ -agent-base -========== -### Turn a function into an [`http.Agent`][http.Agent] instance -[![Build Status](https://github.com/TooTallNate/node-agent-base/workflows/Node%20CI/badge.svg)](https://github.com/TooTallNate/node-agent-base/actions?workflow=Node+CI) - -This module provides an `http.Agent` generator. That is, you pass it an async -callback function, and it returns a new `http.Agent` instance that will invoke the -given callback function when sending outbound HTTP requests. - -#### Some subclasses: - -Here's some more interesting uses of `agent-base`. -Send a pull request to list yours! - - * [`http-proxy-agent`][http-proxy-agent]: An HTTP(s) proxy `http.Agent` implementation for HTTP endpoints - * [`https-proxy-agent`][https-proxy-agent]: An HTTP(s) proxy `http.Agent` implementation for HTTPS endpoints - * [`pac-proxy-agent`][pac-proxy-agent]: A PAC file proxy `http.Agent` implementation for HTTP and HTTPS - * [`socks-proxy-agent`][socks-proxy-agent]: A SOCKS proxy `http.Agent` implementation for HTTP and HTTPS - - -Installation ------------- - -Install with `npm`: - -``` bash -$ npm install agent-base -``` - - -Example -------- - -Here's a minimal example that creates a new `net.Socket` connection to the server -for every HTTP request (i.e. the equivalent of `agent: false` option): - -```js -var net = require('net'); -var tls = require('tls'); -var url = require('url'); -var http = require('http'); -var agent = require('agent-base'); - -var endpoint = 'http://nodejs.org/api/'; -var parsed = url.parse(endpoint); - -// This is the important part! -parsed.agent = agent(function (req, opts) { - var socket; - // `secureEndpoint` is true when using the https module - if (opts.secureEndpoint) { - socket = tls.connect(opts); - } else { - socket = net.connect(opts); - } - return socket; -}); - -// Everything else works just like normal... -http.get(parsed, function (res) { - console.log('"response" event!', res.headers); - res.pipe(process.stdout); -}); -``` - -Returning a Promise or using an `async` function is also supported: - -```js -agent(async function (req, opts) { - await sleep(1000); - // etc… -}); -``` - -Return another `http.Agent` instance to "pass through" the responsibility -for that HTTP request to that agent: - -```js -agent(function (req, opts) { - return opts.secureEndpoint ? https.globalAgent : http.globalAgent; -}); -``` - - -API ---- - -## Agent(Function callback[, Object options]) → [http.Agent][] - -Creates a base `http.Agent` that will execute the callback function `callback` -for every HTTP request that it is used as the `agent` for. The callback function -is responsible for creating a `stream.Duplex` instance of some kind that will be -used as the underlying socket in the HTTP request. - -The `options` object accepts the following properties: - - * `timeout` - Number - Timeout for the `callback()` function in milliseconds. Defaults to Infinity (optional). - -The callback function should have the following signature: - -### callback(http.ClientRequest req, Object options, Function cb) → undefined - -The ClientRequest `req` can be accessed to read request headers and -and the path, etc. The `options` object contains the options passed -to the `http.request()`/`https.request()` function call, and is formatted -to be directly passed to `net.connect()`/`tls.connect()`, or however -else you want a Socket to be created. Pass the created socket to -the callback function `cb` once created, and the HTTP request will -continue to proceed. - -If the `https` module is used to invoke the HTTP request, then the -`secureEndpoint` property on `options` _will be set to `true`_. - - -License -------- - -(The MIT License) - -Copyright (c) 2013 Nathan Rajlich <nathan@tootallnate.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. - -[http-proxy-agent]: https://github.com/TooTallNate/node-http-proxy-agent -[https-proxy-agent]: https://github.com/TooTallNate/node-https-proxy-agent -[pac-proxy-agent]: https://github.com/TooTallNate/node-pac-proxy-agent -[socks-proxy-agent]: https://github.com/TooTallNate/node-socks-proxy-agent -[http.Agent]: https://nodejs.org/api/http.html#http_class_http_agent diff --git a/reverse_engineering/node_modules/agent-base/dist/src/index.d.ts b/reverse_engineering/node_modules/agent-base/dist/src/index.d.ts deleted file mode 100644 index bc4ab74..0000000 --- a/reverse_engineering/node_modules/agent-base/dist/src/index.d.ts +++ /dev/null @@ -1,78 +0,0 @@ -/// -import net from 'net'; -import http from 'http'; -import https from 'https'; -import { Duplex } from 'stream'; -import { EventEmitter } from 'events'; -declare function createAgent(opts?: createAgent.AgentOptions): createAgent.Agent; -declare function createAgent(callback: createAgent.AgentCallback, opts?: createAgent.AgentOptions): createAgent.Agent; -declare namespace createAgent { - interface ClientRequest extends http.ClientRequest { - _last?: boolean; - _hadError?: boolean; - method: string; - } - interface AgentRequestOptions { - host?: string; - path?: string; - port: number; - } - interface HttpRequestOptions extends AgentRequestOptions, Omit { - secureEndpoint: false; - } - interface HttpsRequestOptions extends AgentRequestOptions, Omit { - secureEndpoint: true; - } - type RequestOptions = HttpRequestOptions | HttpsRequestOptions; - type AgentLike = Pick | http.Agent; - type AgentCallbackReturn = Duplex | AgentLike; - type AgentCallbackCallback = (err?: Error | null, socket?: createAgent.AgentCallbackReturn) => void; - type AgentCallbackPromise = (req: createAgent.ClientRequest, opts: createAgent.RequestOptions) => createAgent.AgentCallbackReturn | Promise; - type AgentCallback = typeof Agent.prototype.callback; - type AgentOptions = { - timeout?: number; - }; - /** - * Base `http.Agent` implementation. - * No pooling/keep-alive is implemented by default. - * - * @param {Function} callback - * @api public - */ - class Agent extends EventEmitter { - timeout: number | null; - maxFreeSockets: number; - maxTotalSockets: number; - maxSockets: number; - sockets: { - [key: string]: net.Socket[]; - }; - freeSockets: { - [key: string]: net.Socket[]; - }; - requests: { - [key: string]: http.IncomingMessage[]; - }; - options: https.AgentOptions; - private promisifiedCallback?; - private explicitDefaultPort?; - private explicitProtocol?; - constructor(callback?: createAgent.AgentCallback | createAgent.AgentOptions, _opts?: createAgent.AgentOptions); - get defaultPort(): number; - set defaultPort(v: number); - get protocol(): string; - set protocol(v: string); - callback(req: createAgent.ClientRequest, opts: createAgent.RequestOptions, fn: createAgent.AgentCallbackCallback): void; - callback(req: createAgent.ClientRequest, opts: createAgent.RequestOptions): createAgent.AgentCallbackReturn | Promise; - /** - * Called by node-core's "_http_client.js" module when creating - * a new HTTP request with this Agent instance. - * - * @api public - */ - addRequest(req: ClientRequest, _opts: RequestOptions): void; - freeSocket(socket: net.Socket, opts: AgentOptions): void; - destroy(): void; - } -} -export = createAgent; diff --git a/reverse_engineering/node_modules/agent-base/dist/src/index.js b/reverse_engineering/node_modules/agent-base/dist/src/index.js deleted file mode 100644 index bfd9e22..0000000 --- a/reverse_engineering/node_modules/agent-base/dist/src/index.js +++ /dev/null @@ -1,203 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -const events_1 = require("events"); -const debug_1 = __importDefault(require("debug")); -const promisify_1 = __importDefault(require("./promisify")); -const debug = debug_1.default('agent-base'); -function isAgent(v) { - return Boolean(v) && typeof v.addRequest === 'function'; -} -function isSecureEndpoint() { - const { stack } = new Error(); - if (typeof stack !== 'string') - return false; - return stack.split('\n').some(l => l.indexOf('(https.js:') !== -1 || l.indexOf('node:https:') !== -1); -} -function createAgent(callback, opts) { - return new createAgent.Agent(callback, opts); -} -(function (createAgent) { - /** - * Base `http.Agent` implementation. - * No pooling/keep-alive is implemented by default. - * - * @param {Function} callback - * @api public - */ - class Agent extends events_1.EventEmitter { - constructor(callback, _opts) { - super(); - let opts = _opts; - if (typeof callback === 'function') { - this.callback = callback; - } - else if (callback) { - opts = callback; - } - // Timeout for the socket to be returned from the callback - this.timeout = null; - if (opts && typeof opts.timeout === 'number') { - this.timeout = opts.timeout; - } - // These aren't actually used by `agent-base`, but are required - // for the TypeScript definition files in `@types/node` :/ - this.maxFreeSockets = 1; - this.maxSockets = 1; - this.maxTotalSockets = Infinity; - this.sockets = {}; - this.freeSockets = {}; - this.requests = {}; - this.options = {}; - } - get defaultPort() { - if (typeof this.explicitDefaultPort === 'number') { - return this.explicitDefaultPort; - } - return isSecureEndpoint() ? 443 : 80; - } - set defaultPort(v) { - this.explicitDefaultPort = v; - } - get protocol() { - if (typeof this.explicitProtocol === 'string') { - return this.explicitProtocol; - } - return isSecureEndpoint() ? 'https:' : 'http:'; - } - set protocol(v) { - this.explicitProtocol = v; - } - callback(req, opts, fn) { - throw new Error('"agent-base" has no default implementation, you must subclass and override `callback()`'); - } - /** - * Called by node-core's "_http_client.js" module when creating - * a new HTTP request with this Agent instance. - * - * @api public - */ - addRequest(req, _opts) { - const opts = Object.assign({}, _opts); - if (typeof opts.secureEndpoint !== 'boolean') { - opts.secureEndpoint = isSecureEndpoint(); - } - if (opts.host == null) { - opts.host = 'localhost'; - } - if (opts.port == null) { - opts.port = opts.secureEndpoint ? 443 : 80; - } - if (opts.protocol == null) { - opts.protocol = opts.secureEndpoint ? 'https:' : 'http:'; - } - if (opts.host && opts.path) { - // If both a `host` and `path` are specified then it's most - // likely the result of a `url.parse()` call... we need to - // remove the `path` portion so that `net.connect()` doesn't - // attempt to open that as a unix socket file. - delete opts.path; - } - delete opts.agent; - delete opts.hostname; - delete opts._defaultAgent; - delete opts.defaultPort; - delete opts.createConnection; - // Hint to use "Connection: close" - // XXX: non-documented `http` module API :( - req._last = true; - req.shouldKeepAlive = false; - let timedOut = false; - let timeoutId = null; - const timeoutMs = opts.timeout || this.timeout; - const onerror = (err) => { - if (req._hadError) - return; - req.emit('error', err); - // For Safety. Some additional errors might fire later on - // and we need to make sure we don't double-fire the error event. - req._hadError = true; - }; - const ontimeout = () => { - timeoutId = null; - timedOut = true; - const err = new Error(`A "socket" was not created for HTTP request before ${timeoutMs}ms`); - err.code = 'ETIMEOUT'; - onerror(err); - }; - const callbackError = (err) => { - if (timedOut) - return; - if (timeoutId !== null) { - clearTimeout(timeoutId); - timeoutId = null; - } - onerror(err); - }; - const onsocket = (socket) => { - if (timedOut) - return; - if (timeoutId != null) { - clearTimeout(timeoutId); - timeoutId = null; - } - if (isAgent(socket)) { - // `socket` is actually an `http.Agent` instance, so - // relinquish responsibility for this `req` to the Agent - // from here on - debug('Callback returned another Agent instance %o', socket.constructor.name); - socket.addRequest(req, opts); - return; - } - if (socket) { - socket.once('free', () => { - this.freeSocket(socket, opts); - }); - req.onSocket(socket); - return; - } - const err = new Error(`no Duplex stream was returned to agent-base for \`${req.method} ${req.path}\``); - onerror(err); - }; - if (typeof this.callback !== 'function') { - onerror(new Error('`callback` is not defined')); - return; - } - if (!this.promisifiedCallback) { - if (this.callback.length >= 3) { - debug('Converting legacy callback function to promise'); - this.promisifiedCallback = promisify_1.default(this.callback); - } - else { - this.promisifiedCallback = this.callback; - } - } - if (typeof timeoutMs === 'number' && timeoutMs > 0) { - timeoutId = setTimeout(ontimeout, timeoutMs); - } - if ('port' in opts && typeof opts.port !== 'number') { - opts.port = Number(opts.port); - } - try { - debug('Resolving socket for %o request: %o', opts.protocol, `${req.method} ${req.path}`); - Promise.resolve(this.promisifiedCallback(req, opts)).then(onsocket, callbackError); - } - catch (err) { - Promise.reject(err).catch(callbackError); - } - } - freeSocket(socket, opts) { - debug('Freeing socket %o %o', socket.constructor.name, opts); - socket.destroy(); - } - destroy() { - debug('Destroying agent %o', this.constructor.name); - } - } - createAgent.Agent = Agent; - // So that `instanceof` works correctly - createAgent.prototype = createAgent.Agent.prototype; -})(createAgent || (createAgent = {})); -module.exports = createAgent; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/agent-base/dist/src/index.js.map b/reverse_engineering/node_modules/agent-base/dist/src/index.js.map deleted file mode 100644 index bd118ab..0000000 --- a/reverse_engineering/node_modules/agent-base/dist/src/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;AAIA,mCAAsC;AACtC,kDAAgC;AAChC,4DAAoC;AAEpC,MAAM,KAAK,GAAG,eAAW,CAAC,YAAY,CAAC,CAAC;AAExC,SAAS,OAAO,CAAC,CAAM;IACtB,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC;AACzD,CAAC;AAED,SAAS,gBAAgB;IACxB,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,KAAK,EAAE,CAAC;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,IAAK,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACxG,CAAC;AAOD,SAAS,WAAW,CACnB,QAA+D,EAC/D,IAA+B;IAE/B,OAAO,IAAI,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,WAAU,WAAW;IAmDpB;;;;;;OAMG;IACH,MAAa,KAAM,SAAQ,qBAAY;QAmBtC,YACC,QAA+D,EAC/D,KAAgC;YAEhC,KAAK,EAAE,CAAC;YAER,IAAI,IAAI,GAAG,KAAK,CAAC;YACjB,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;gBACnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;aACzB;iBAAM,IAAI,QAAQ,EAAE;gBACpB,IAAI,GAAG,QAAQ,CAAC;aAChB;YAED,0DAA0D;YAC1D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE;gBAC7C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;aAC5B;YAED,+DAA+D;YAC/D,0DAA0D;YAC1D,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;YACxB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;YACpB,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;YAChC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;YAClB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;YACnB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QACnB,CAAC;QAED,IAAI,WAAW;YACd,IAAI,OAAO,IAAI,CAAC,mBAAmB,KAAK,QAAQ,EAAE;gBACjD,OAAO,IAAI,CAAC,mBAAmB,CAAC;aAChC;YACD,OAAO,gBAAgB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACtC,CAAC;QAED,IAAI,WAAW,CAAC,CAAS;YACxB,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;QAC9B,CAAC;QAED,IAAI,QAAQ;YACX,IAAI,OAAO,IAAI,CAAC,gBAAgB,KAAK,QAAQ,EAAE;gBAC9C,OAAO,IAAI,CAAC,gBAAgB,CAAC;aAC7B;YACD,OAAO,gBAAgB,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;QAChD,CAAC;QAED,IAAI,QAAQ,CAAC,CAAS;YACrB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC3B,CAAC;QAaD,QAAQ,CACP,GAA8B,EAC9B,IAA8B,EAC9B,EAAsC;YAKtC,MAAM,IAAI,KAAK,CACd,yFAAyF,CACzF,CAAC;QACH,CAAC;QAED;;;;;WAKG;QACH,UAAU,CAAC,GAAkB,EAAE,KAAqB;YACnD,MAAM,IAAI,qBAAwB,KAAK,CAAE,CAAC;YAE1C,IAAI,OAAO,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE;gBAC7C,IAAI,CAAC,cAAc,GAAG,gBAAgB,EAAE,CAAC;aACzC;YAED,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;gBACtB,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;aACxB;YAED,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;gBACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;aAC3C;YAED,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE;gBAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;aACzD;YAED,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;gBAC3B,2DAA2D;gBAC3D,0DAA0D;gBAC1D,4DAA4D;gBAC5D,8CAA8C;gBAC9C,OAAO,IAAI,CAAC,IAAI,CAAC;aACjB;YAED,OAAO,IAAI,CAAC,KAAK,CAAC;YAClB,OAAO,IAAI,CAAC,QAAQ,CAAC;YACrB,OAAO,IAAI,CAAC,aAAa,CAAC;YAC1B,OAAO,IAAI,CAAC,WAAW,CAAC;YACxB,OAAO,IAAI,CAAC,gBAAgB,CAAC;YAE7B,kCAAkC;YAClC,2CAA2C;YAC3C,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;YACjB,GAAG,CAAC,eAAe,GAAG,KAAK,CAAC;YAE5B,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,IAAI,SAAS,GAAyC,IAAI,CAAC;YAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC;YAE/C,MAAM,OAAO,GAAG,CAAC,GAA0B,EAAE,EAAE;gBAC9C,IAAI,GAAG,CAAC,SAAS;oBAAE,OAAO;gBAC1B,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACvB,yDAAyD;gBACzD,iEAAiE;gBACjE,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,CAAC,CAAC;YAEF,MAAM,SAAS,GAAG,GAAG,EAAE;gBACtB,SAAS,GAAG,IAAI,CAAC;gBACjB,QAAQ,GAAG,IAAI,CAAC;gBAChB,MAAM,GAAG,GAA0B,IAAI,KAAK,CAC3C,sDAAsD,SAAS,IAAI,CACnE,CAAC;gBACF,GAAG,CAAC,IAAI,GAAG,UAAU,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC;YAEF,MAAM,aAAa,GAAG,CAAC,GAA0B,EAAE,EAAE;gBACpD,IAAI,QAAQ;oBAAE,OAAO;gBACrB,IAAI,SAAS,KAAK,IAAI,EAAE;oBACvB,YAAY,CAAC,SAAS,CAAC,CAAC;oBACxB,SAAS,GAAG,IAAI,CAAC;iBACjB;gBACD,OAAO,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC;YAEF,MAAM,QAAQ,GAAG,CAAC,MAA2B,EAAE,EAAE;gBAChD,IAAI,QAAQ;oBAAE,OAAO;gBACrB,IAAI,SAAS,IAAI,IAAI,EAAE;oBACtB,YAAY,CAAC,SAAS,CAAC,CAAC;oBACxB,SAAS,GAAG,IAAI,CAAC;iBACjB;gBAED,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE;oBACpB,oDAAoD;oBACpD,wDAAwD;oBACxD,eAAe;oBACf,KAAK,CACJ,6CAA6C,EAC7C,MAAM,CAAC,WAAW,CAAC,IAAI,CACvB,CAAC;oBACD,MAA4B,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;oBACpD,OAAO;iBACP;gBAED,IAAI,MAAM,EAAE;oBACX,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;wBACxB,IAAI,CAAC,UAAU,CAAC,MAAoB,EAAE,IAAI,CAAC,CAAC;oBAC7C,CAAC,CAAC,CAAC;oBACH,GAAG,CAAC,QAAQ,CAAC,MAAoB,CAAC,CAAC;oBACnC,OAAO;iBACP;gBAED,MAAM,GAAG,GAAG,IAAI,KAAK,CACpB,qDAAqD,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,CAC/E,CAAC;gBACF,OAAO,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC;YAEF,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE;gBACxC,OAAO,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;gBAChD,OAAO;aACP;YAED,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;gBAC9B,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE;oBAC9B,KAAK,CAAC,gDAAgD,CAAC,CAAC;oBACxD,IAAI,CAAC,mBAAmB,GAAG,mBAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBACpD;qBAAM;oBACN,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC;iBACzC;aACD;YAED,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,GAAG,CAAC,EAAE;gBACnD,SAAS,GAAG,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;aAC7C;YAED,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACpD,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC9B;YAED,IAAI;gBACH,KAAK,CACJ,qCAAqC,EACrC,IAAI,CAAC,QAAQ,EACb,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,CAC3B,CAAC;gBACF,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CACxD,QAAQ,EACR,aAAa,CACb,CAAC;aACF;YAAC,OAAO,GAAG,EAAE;gBACb,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;aACzC;QACF,CAAC;QAED,UAAU,CAAC,MAAkB,EAAE,IAAkB;YAChD,KAAK,CAAC,sBAAsB,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC7D,MAAM,CAAC,OAAO,EAAE,CAAC;QAClB,CAAC;QAED,OAAO;YACN,KAAK,CAAC,qBAAqB,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC;KACD;IAxPY,iBAAK,QAwPjB,CAAA;IAED,uCAAuC;IACvC,WAAW,CAAC,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC;AACrD,CAAC,EAtTS,WAAW,KAAX,WAAW,QAsTpB;AAED,iBAAS,WAAW,CAAC"} \ No newline at end of file diff --git a/reverse_engineering/node_modules/agent-base/dist/src/promisify.d.ts b/reverse_engineering/node_modules/agent-base/dist/src/promisify.d.ts deleted file mode 100644 index 0268869..0000000 --- a/reverse_engineering/node_modules/agent-base/dist/src/promisify.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { ClientRequest, RequestOptions, AgentCallbackCallback, AgentCallbackPromise } from './index'; -declare type LegacyCallback = (req: ClientRequest, opts: RequestOptions, fn: AgentCallbackCallback) => void; -export default function promisify(fn: LegacyCallback): AgentCallbackPromise; -export {}; diff --git a/reverse_engineering/node_modules/agent-base/dist/src/promisify.js b/reverse_engineering/node_modules/agent-base/dist/src/promisify.js deleted file mode 100644 index b2f6132..0000000 --- a/reverse_engineering/node_modules/agent-base/dist/src/promisify.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function promisify(fn) { - return function (req, opts) { - return new Promise((resolve, reject) => { - fn.call(this, req, opts, (err, rtn) => { - if (err) { - reject(err); - } - else { - resolve(rtn); - } - }); - }); - }; -} -exports.default = promisify; -//# sourceMappingURL=promisify.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/agent-base/dist/src/promisify.js.map b/reverse_engineering/node_modules/agent-base/dist/src/promisify.js.map deleted file mode 100644 index 4bff9bf..0000000 --- a/reverse_engineering/node_modules/agent-base/dist/src/promisify.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"promisify.js","sourceRoot":"","sources":["../../src/promisify.ts"],"names":[],"mappings":";;AAeA,SAAwB,SAAS,CAAC,EAAkB;IACnD,OAAO,UAAsB,GAAkB,EAAE,IAAoB;QACpE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtC,EAAE,CAAC,IAAI,CACN,IAAI,EACJ,GAAG,EACH,IAAI,EACJ,CAAC,GAA6B,EAAE,GAAyB,EAAE,EAAE;gBAC5D,IAAI,GAAG,EAAE;oBACR,MAAM,CAAC,GAAG,CAAC,CAAC;iBACZ;qBAAM;oBACN,OAAO,CAAC,GAAG,CAAC,CAAC;iBACb;YACF,CAAC,CACD,CAAC;QACH,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC;AACH,CAAC;AAjBD,4BAiBC"} \ No newline at end of file diff --git a/reverse_engineering/node_modules/agent-base/package.json b/reverse_engineering/node_modules/agent-base/package.json deleted file mode 100644 index c5b4402..0000000 --- a/reverse_engineering/node_modules/agent-base/package.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "_from": "agent-base@6", - "_id": "agent-base@6.0.2", - "_inBundle": false, - "_integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "_location": "/agent-base", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "agent-base@6", - "name": "agent-base", - "escapedName": "agent-base", - "rawSpec": "6", - "saveSpec": null, - "fetchSpec": "6" - }, - "_requiredBy": [ - "/http-proxy-agent", - "/https-proxy-agent" - ], - "_resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "_shasum": "49fff58577cfee3f37176feab4c22e00f86d7f77", - "_spec": "agent-base@6", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/https-proxy-agent", - "author": { - "name": "Nathan Rajlich", - "email": "nathan@tootallnate.net", - "url": "http://n8.io/" - }, - "bugs": { - "url": "https://github.com/TooTallNate/node-agent-base/issues" - }, - "bundleDependencies": false, - "dependencies": { - "debug": "4" - }, - "deprecated": false, - "description": "Turn a function into an `http.Agent` instance", - "devDependencies": { - "@types/debug": "4", - "@types/mocha": "^5.2.7", - "@types/node": "^14.0.20", - "@types/semver": "^7.1.0", - "@types/ws": "^6.0.3", - "@typescript-eslint/eslint-plugin": "1.6.0", - "@typescript-eslint/parser": "1.1.0", - "async-listen": "^1.2.0", - "cpy-cli": "^2.0.0", - "eslint": "5.16.0", - "eslint-config-airbnb": "17.1.0", - "eslint-config-prettier": "4.1.0", - "eslint-import-resolver-typescript": "1.1.1", - "eslint-plugin-import": "2.16.0", - "eslint-plugin-jsx-a11y": "6.2.1", - "eslint-plugin-react": "7.12.4", - "mocha": "^6.2.0", - "rimraf": "^3.0.0", - "semver": "^7.1.2", - "typescript": "^3.5.3", - "ws": "^3.0.0" - }, - "engines": { - "node": ">= 6.0.0" - }, - "files": [ - "dist/src", - "src" - ], - "homepage": "https://github.com/TooTallNate/node-agent-base#readme", - "keywords": [ - "http", - "agent", - "base", - "barebones", - "https" - ], - "license": "MIT", - "main": "dist/src/index", - "name": "agent-base", - "repository": { - "type": "git", - "url": "git://github.com/TooTallNate/node-agent-base.git" - }, - "scripts": { - "build": "tsc", - "postbuild": "cpy --parents src test '!**/*.ts' dist", - "prebuild": "rimraf dist", - "prepublishOnly": "npm run build", - "test": "mocha --reporter spec dist/test/*.js", - "test-lint": "eslint src --ext .js,.ts" - }, - "typings": "dist/src/index", - "version": "6.0.2" -} diff --git a/reverse_engineering/node_modules/agent-base/src/index.ts b/reverse_engineering/node_modules/agent-base/src/index.ts deleted file mode 100644 index a47ccd4..0000000 --- a/reverse_engineering/node_modules/agent-base/src/index.ts +++ /dev/null @@ -1,345 +0,0 @@ -import net from 'net'; -import http from 'http'; -import https from 'https'; -import { Duplex } from 'stream'; -import { EventEmitter } from 'events'; -import createDebug from 'debug'; -import promisify from './promisify'; - -const debug = createDebug('agent-base'); - -function isAgent(v: any): v is createAgent.AgentLike { - return Boolean(v) && typeof v.addRequest === 'function'; -} - -function isSecureEndpoint(): boolean { - const { stack } = new Error(); - if (typeof stack !== 'string') return false; - return stack.split('\n').some(l => l.indexOf('(https.js:') !== -1 || l.indexOf('node:https:') !== -1); -} - -function createAgent(opts?: createAgent.AgentOptions): createAgent.Agent; -function createAgent( - callback: createAgent.AgentCallback, - opts?: createAgent.AgentOptions -): createAgent.Agent; -function createAgent( - callback?: createAgent.AgentCallback | createAgent.AgentOptions, - opts?: createAgent.AgentOptions -) { - return new createAgent.Agent(callback, opts); -} - -namespace createAgent { - export interface ClientRequest extends http.ClientRequest { - _last?: boolean; - _hadError?: boolean; - method: string; - } - - export interface AgentRequestOptions { - host?: string; - path?: string; - // `port` on `http.RequestOptions` can be a string or undefined, - // but `net.TcpNetConnectOpts` expects only a number - port: number; - } - - export interface HttpRequestOptions - extends AgentRequestOptions, - Omit { - secureEndpoint: false; - } - - export interface HttpsRequestOptions - extends AgentRequestOptions, - Omit { - secureEndpoint: true; - } - - export type RequestOptions = HttpRequestOptions | HttpsRequestOptions; - - export type AgentLike = Pick | http.Agent; - - export type AgentCallbackReturn = Duplex | AgentLike; - - export type AgentCallbackCallback = ( - err?: Error | null, - socket?: createAgent.AgentCallbackReturn - ) => void; - - export type AgentCallbackPromise = ( - req: createAgent.ClientRequest, - opts: createAgent.RequestOptions - ) => - | createAgent.AgentCallbackReturn - | Promise; - - export type AgentCallback = typeof Agent.prototype.callback; - - export type AgentOptions = { - timeout?: number; - }; - - /** - * Base `http.Agent` implementation. - * No pooling/keep-alive is implemented by default. - * - * @param {Function} callback - * @api public - */ - export class Agent extends EventEmitter { - public timeout: number | null; - public maxFreeSockets: number; - public maxTotalSockets: number; - public maxSockets: number; - public sockets: { - [key: string]: net.Socket[]; - }; - public freeSockets: { - [key: string]: net.Socket[]; - }; - public requests: { - [key: string]: http.IncomingMessage[]; - }; - public options: https.AgentOptions; - private promisifiedCallback?: createAgent.AgentCallbackPromise; - private explicitDefaultPort?: number; - private explicitProtocol?: string; - - constructor( - callback?: createAgent.AgentCallback | createAgent.AgentOptions, - _opts?: createAgent.AgentOptions - ) { - super(); - - let opts = _opts; - if (typeof callback === 'function') { - this.callback = callback; - } else if (callback) { - opts = callback; - } - - // Timeout for the socket to be returned from the callback - this.timeout = null; - if (opts && typeof opts.timeout === 'number') { - this.timeout = opts.timeout; - } - - // These aren't actually used by `agent-base`, but are required - // for the TypeScript definition files in `@types/node` :/ - this.maxFreeSockets = 1; - this.maxSockets = 1; - this.maxTotalSockets = Infinity; - this.sockets = {}; - this.freeSockets = {}; - this.requests = {}; - this.options = {}; - } - - get defaultPort(): number { - if (typeof this.explicitDefaultPort === 'number') { - return this.explicitDefaultPort; - } - return isSecureEndpoint() ? 443 : 80; - } - - set defaultPort(v: number) { - this.explicitDefaultPort = v; - } - - get protocol(): string { - if (typeof this.explicitProtocol === 'string') { - return this.explicitProtocol; - } - return isSecureEndpoint() ? 'https:' : 'http:'; - } - - set protocol(v: string) { - this.explicitProtocol = v; - } - - callback( - req: createAgent.ClientRequest, - opts: createAgent.RequestOptions, - fn: createAgent.AgentCallbackCallback - ): void; - callback( - req: createAgent.ClientRequest, - opts: createAgent.RequestOptions - ): - | createAgent.AgentCallbackReturn - | Promise; - callback( - req: createAgent.ClientRequest, - opts: createAgent.AgentOptions, - fn?: createAgent.AgentCallbackCallback - ): - | createAgent.AgentCallbackReturn - | Promise - | void { - throw new Error( - '"agent-base" has no default implementation, you must subclass and override `callback()`' - ); - } - - /** - * Called by node-core's "_http_client.js" module when creating - * a new HTTP request with this Agent instance. - * - * @api public - */ - addRequest(req: ClientRequest, _opts: RequestOptions): void { - const opts: RequestOptions = { ..._opts }; - - if (typeof opts.secureEndpoint !== 'boolean') { - opts.secureEndpoint = isSecureEndpoint(); - } - - if (opts.host == null) { - opts.host = 'localhost'; - } - - if (opts.port == null) { - opts.port = opts.secureEndpoint ? 443 : 80; - } - - if (opts.protocol == null) { - opts.protocol = opts.secureEndpoint ? 'https:' : 'http:'; - } - - if (opts.host && opts.path) { - // If both a `host` and `path` are specified then it's most - // likely the result of a `url.parse()` call... we need to - // remove the `path` portion so that `net.connect()` doesn't - // attempt to open that as a unix socket file. - delete opts.path; - } - - delete opts.agent; - delete opts.hostname; - delete opts._defaultAgent; - delete opts.defaultPort; - delete opts.createConnection; - - // Hint to use "Connection: close" - // XXX: non-documented `http` module API :( - req._last = true; - req.shouldKeepAlive = false; - - let timedOut = false; - let timeoutId: ReturnType | null = null; - const timeoutMs = opts.timeout || this.timeout; - - const onerror = (err: NodeJS.ErrnoException) => { - if (req._hadError) return; - req.emit('error', err); - // For Safety. Some additional errors might fire later on - // and we need to make sure we don't double-fire the error event. - req._hadError = true; - }; - - const ontimeout = () => { - timeoutId = null; - timedOut = true; - const err: NodeJS.ErrnoException = new Error( - `A "socket" was not created for HTTP request before ${timeoutMs}ms` - ); - err.code = 'ETIMEOUT'; - onerror(err); - }; - - const callbackError = (err: NodeJS.ErrnoException) => { - if (timedOut) return; - if (timeoutId !== null) { - clearTimeout(timeoutId); - timeoutId = null; - } - onerror(err); - }; - - const onsocket = (socket: AgentCallbackReturn) => { - if (timedOut) return; - if (timeoutId != null) { - clearTimeout(timeoutId); - timeoutId = null; - } - - if (isAgent(socket)) { - // `socket` is actually an `http.Agent` instance, so - // relinquish responsibility for this `req` to the Agent - // from here on - debug( - 'Callback returned another Agent instance %o', - socket.constructor.name - ); - (socket as createAgent.Agent).addRequest(req, opts); - return; - } - - if (socket) { - socket.once('free', () => { - this.freeSocket(socket as net.Socket, opts); - }); - req.onSocket(socket as net.Socket); - return; - } - - const err = new Error( - `no Duplex stream was returned to agent-base for \`${req.method} ${req.path}\`` - ); - onerror(err); - }; - - if (typeof this.callback !== 'function') { - onerror(new Error('`callback` is not defined')); - return; - } - - if (!this.promisifiedCallback) { - if (this.callback.length >= 3) { - debug('Converting legacy callback function to promise'); - this.promisifiedCallback = promisify(this.callback); - } else { - this.promisifiedCallback = this.callback; - } - } - - if (typeof timeoutMs === 'number' && timeoutMs > 0) { - timeoutId = setTimeout(ontimeout, timeoutMs); - } - - if ('port' in opts && typeof opts.port !== 'number') { - opts.port = Number(opts.port); - } - - try { - debug( - 'Resolving socket for %o request: %o', - opts.protocol, - `${req.method} ${req.path}` - ); - Promise.resolve(this.promisifiedCallback(req, opts)).then( - onsocket, - callbackError - ); - } catch (err) { - Promise.reject(err).catch(callbackError); - } - } - - freeSocket(socket: net.Socket, opts: AgentOptions) { - debug('Freeing socket %o %o', socket.constructor.name, opts); - socket.destroy(); - } - - destroy() { - debug('Destroying agent %o', this.constructor.name); - } - } - - // So that `instanceof` works correctly - createAgent.prototype = createAgent.Agent.prototype; -} - -export = createAgent; diff --git a/reverse_engineering/node_modules/agent-base/src/promisify.ts b/reverse_engineering/node_modules/agent-base/src/promisify.ts deleted file mode 100644 index 60cc662..0000000 --- a/reverse_engineering/node_modules/agent-base/src/promisify.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { - Agent, - ClientRequest, - RequestOptions, - AgentCallbackCallback, - AgentCallbackPromise, - AgentCallbackReturn -} from './index'; - -type LegacyCallback = ( - req: ClientRequest, - opts: RequestOptions, - fn: AgentCallbackCallback -) => void; - -export default function promisify(fn: LegacyCallback): AgentCallbackPromise { - return function(this: Agent, req: ClientRequest, opts: RequestOptions) { - return new Promise((resolve, reject) => { - fn.call( - this, - req, - opts, - (err: Error | null | undefined, rtn?: AgentCallbackReturn) => { - if (err) { - reject(err); - } else { - resolve(rtn); - } - } - ); - }); - }; -} diff --git a/reverse_engineering/node_modules/antlr4/.babelrc b/reverse_engineering/node_modules/antlr4/.babelrc deleted file mode 100644 index 1320b9a..0000000 --- a/reverse_engineering/node_modules/antlr4/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "presets": ["@babel/preset-env"] -} diff --git a/reverse_engineering/node_modules/antlr4/.project b/reverse_engineering/node_modules/antlr4/.project deleted file mode 100644 index 9968728..0000000 --- a/reverse_engineering/node_modules/antlr4/.project +++ /dev/null @@ -1,29 +0,0 @@ - - - antlr4-javascript-runtime - - - - - - org.eclipse.xtext.ui.shared.xtextBuilder - - - - - org.python.pydev.PyDevBuilder - - - - - com.eclipsesource.jshint.ui.builder - - - - - - org.nodeclipse.ui.NodeNature - org.eclipse.wst.jsdt.core.jsNature - org.eclipse.xtext.ui.shared.xtextNature - - diff --git a/reverse_engineering/node_modules/antlr4/README.md b/reverse_engineering/node_modules/antlr4/README.md deleted file mode 100644 index 0eaffea..0000000 --- a/reverse_engineering/node_modules/antlr4/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# JavaScript target for ANTLR 4 - -JavaScript runtime libraries for ANTLR 4 - -This runtime is available through npm. The package name is 'antlr4'. - -This runtime has been tested in Node.js, Safari, Firefox, Chrome and IE. - -See www.antlr.org for more information on ANTLR - -See [Javascript Target](https://github.com/antlr/antlr4/blob/master/doc/javascript-target.md) -for more information on using ANTLR in JavaScript - -This runtime requires node version >= 14, the first version to officially support ES semantics. - -ANTLR 4 runtime is available in 10 target languages, and favors consistency of versioning across targets. -As such it cannot follow recommended NPM semantic versioning. -If you install a specific version of antlr4, we strongly recommend you remove the corresponding ^ in your package.json. - - - - - - - diff --git a/reverse_engineering/node_modules/antlr4/package.json b/reverse_engineering/node_modules/antlr4/package.json deleted file mode 100644 index b046da9..0000000 --- a/reverse_engineering/node_modules/antlr4/package.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "_from": "antlr4@^4.9.2", - "_id": "antlr4@4.9.3", - "_inBundle": false, - "_integrity": "sha512-qNy2odgsa0skmNMCuxzXhM4M8J1YDaPv3TI+vCdnOAanu0N982wBrSqziDKRDctEZLZy9VffqIZXc0UGjjSP/g==", - "_location": "/antlr4", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "antlr4@^4.9.2", - "name": "antlr4", - "escapedName": "antlr4", - "rawSpec": "^4.9.2", - "saveSpec": null, - "fetchSpec": "^4.9.2" - }, - "_requiredBy": [ - "/@hackolade/sql-select-statement-parser" - ], - "_resolved": "https://registry.npmjs.org/antlr4/-/antlr4-4.9.3.tgz", - "_shasum": "268b844ff8ce97d022399a05d4b37aa6ab4047b2", - "_spec": "antlr4@^4.9.2", - "_where": "/home/mikhail/.hackolade/plugins/BigQuery/reverse_engineering/node_modules/@hackolade/sql-select-statement-parser", - "bugs": { - "url": "https://github.com/antlr/antlr4/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "JavaScript runtime for ANTLR4", - "devDependencies": { - "@babel/core": "^7.13.10", - "@babel/preset-env": "^7.13.10", - "ansi-regex": "^5.0.1", - "babel-loader": "^8.2.2", - "browserslist": ">=4.16.5", - "hosted-git-info": ">=2.8.9", - "ini": "1.3.6", - "jest": "^26.6.3", - "path-parse": ">=1.0.7", - "set-value": ">=4.0.1", - "ssri": ">=6.0.2", - "tmpl": "^1.0.5", - "webpack": "^4.46.0", - "webpack-cli": "^3.3.12", - "ws": ">=7.4.6", - "y18n": ">=4.0.1" - }, - "engines": { - "node": ">=14" - }, - "homepage": "https://github.com/antlr/antlr4", - "keywords": [ - "lexer", - "parser", - "antlr", - "antlr4", - "grammar" - ], - "license": "BSD-3-Clause", - "main": "src/antlr4/index.js", - "name": "antlr4", - "repository": { - "type": "git", - "url": "git+https://github.com/antlr/antlr4.git" - }, - "scripts": { - "build": "webpack", - "test": "jest" - }, - "version": "4.9.3" -} diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/BufferedTokenStream.js b/reverse_engineering/node_modules/antlr4/src/antlr4/BufferedTokenStream.js deleted file mode 100644 index 4d5a131..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/BufferedTokenStream.js +++ /dev/null @@ -1,386 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const {Token} = require('./Token'); -const Lexer = require('./Lexer'); -const {Interval} = require('./IntervalSet'); - -// this is just to keep meaningful parameter types to Parser -class TokenStream {} - -/** - * This implementation of {@link TokenStream} loads tokens from a - * {@link TokenSource} on-demand, and places the tokens in a buffer to provide - * access to any previous token by index. - * - *

- * This token stream ignores the value of {@link Token//getChannel}. If your - * parser requires the token stream filter tokens to only those on a particular - * channel, such as {@link Token//DEFAULT_CHANNEL} or - * {@link Token//HIDDEN_CHANNEL}, use a filtering token stream such a - * {@link CommonTokenStream}.

- */ -class BufferedTokenStream extends TokenStream { - constructor(tokenSource) { - - super(); - // The {@link TokenSource} from which tokens for this stream are fetched. - this.tokenSource = tokenSource; - /** - * A collection of all tokens fetched from the token source. The list is - * considered a complete view of the input once {@link //fetchedEOF} is set - * to {@code true}. - */ - this.tokens = []; - - /** - * The index into {@link //tokens} of the current token (next token to - * {@link //consume}). {@link //tokens}{@code [}{@link //p}{@code ]} should - * be - * {@link //LT LT(1)}. - * - *

This field is set to -1 when the stream is first constructed or when - * {@link //setTokenSource} is called, indicating that the first token has - * not yet been fetched from the token source. For additional information, - * see the documentation of {@link IntStream} for a description of - * Initializing Methods.

- */ - this.index = -1; - - /** - * Indicates whether the {@link Token//EOF} token has been fetched from - * {@link //tokenSource} and added to {@link //tokens}. This field improves - * performance for the following cases: - * - *
    - *
  • {@link //consume}: The lookahead check in {@link //consume} to - * prevent - * consuming the EOF symbol is optimized by checking the values of - * {@link //fetchedEOF} and {@link //p} instead of calling {@link - * //LA}.
  • - *
  • {@link //fetch}: The check to prevent adding multiple EOF symbols - * into - * {@link //tokens} is trivial with this field.
  • - *
      - */ - this.fetchedEOF = false; - } - - mark() { - return 0; - } - - release(marker) { - // no resources to release - } - - reset() { - this.seek(0); - } - - seek(index) { - this.lazyInit(); - this.index = this.adjustSeekIndex(index); - } - - get(index) { - this.lazyInit(); - return this.tokens[index]; - } - - consume() { - let skipEofCheck = false; - if (this.index >= 0) { - if (this.fetchedEOF) { - // the last token in tokens is EOF. skip check if p indexes any - // fetched token except the last. - skipEofCheck = this.index < this.tokens.length - 1; - } else { - // no EOF token in tokens. skip check if p indexes a fetched token. - skipEofCheck = this.index < this.tokens.length; - } - } else { - // not yet initialized - skipEofCheck = false; - } - if (!skipEofCheck && this.LA(1) === Token.EOF) { - throw "cannot consume EOF"; - } - if (this.sync(this.index + 1)) { - this.index = this.adjustSeekIndex(this.index + 1); - } - } - - /** - * Make sure index {@code i} in tokens has a token. - * - * @return {Boolean} {@code true} if a token is located at index {@code i}, otherwise - * {@code false}. - * @see //get(int i) - */ - sync(i) { - const n = i - this.tokens.length + 1; // how many more elements we need? - if (n > 0) { - const fetched = this.fetch(n); - return fetched >= n; - } - return true; - } - - /** - * Add {@code n} elements to buffer. - * - * @return {Number} The actual number of elements added to the buffer. - */ - fetch(n) { - if (this.fetchedEOF) { - return 0; - } - for (let i = 0; i < n; i++) { - const t = this.tokenSource.nextToken(); - t.tokenIndex = this.tokens.length; - this.tokens.push(t); - if (t.type === Token.EOF) { - this.fetchedEOF = true; - return i + 1; - } - } - return n; - } - -// Get all tokens from start..stop inclusively/// - getTokens(start, stop, types) { - if (types === undefined) { - types = null; - } - if (start < 0 || stop < 0) { - return null; - } - this.lazyInit(); - const subset = []; - if (stop >= this.tokens.length) { - stop = this.tokens.length - 1; - } - for (let i = start; i < stop; i++) { - const t = this.tokens[i]; - if (t.type === Token.EOF) { - break; - } - if (types === null || types.contains(t.type)) { - subset.push(t); - } - } - return subset; - } - - LA(i) { - return this.LT(i).type; - } - - LB(k) { - if (this.index - k < 0) { - return null; - } - return this.tokens[this.index - k]; - } - - LT(k) { - this.lazyInit(); - if (k === 0) { - return null; - } - if (k < 0) { - return this.LB(-k); - } - const i = this.index + k - 1; - this.sync(i); - if (i >= this.tokens.length) { // return EOF token - // EOF must be last token - return this.tokens[this.tokens.length - 1]; - } - return this.tokens[i]; - } - - /** - * Allowed derived classes to modify the behavior of operations which change - * the current stream position by adjusting the target token index of a seek - * operation. The default implementation simply returns {@code i}. If an - * exception is thrown in this method, the current stream index should not be - * changed. - * - *

      For example, {@link CommonTokenStream} overrides this method to ensure - * that - * the seek target is always an on-channel token.

      - * - * @param {Number} i The target token index. - * @return {Number} The adjusted target token index. - */ - adjustSeekIndex(i) { - return i; - } - - lazyInit() { - if (this.index === -1) { - this.setup(); - } - } - - setup() { - this.sync(0); - this.index = this.adjustSeekIndex(0); - } - -// Reset this token stream by setting its token source./// - setTokenSource(tokenSource) { - this.tokenSource = tokenSource; - this.tokens = []; - this.index = -1; - this.fetchedEOF = false; - } - - /** - * Given a starting index, return the index of the next token on channel. - * Return i if tokens[i] is on channel. Return -1 if there are no tokens - * on channel between i and EOF. - */ - nextTokenOnChannel(i, channel) { - this.sync(i); - if (i >= this.tokens.length) { - return -1; - } - let token = this.tokens[i]; - while (token.channel !== this.channel) { - if (token.type === Token.EOF) { - return -1; - } - i += 1; - this.sync(i); - token = this.tokens[i]; - } - return i; - } - - /** - * Given a starting index, return the index of the previous token on channel. - * Return i if tokens[i] is on channel. Return -1 if there are no tokens - * on channel between i and 0. - */ - previousTokenOnChannel(i, channel) { - while (i >= 0 && this.tokens[i].channel !== channel) { - i -= 1; - } - return i; - } - - /** - * Collect all tokens on specified channel to the right of - * the current token up until we see a token on DEFAULT_TOKEN_CHANNEL or - * EOF. If channel is -1, find any non default channel token. - */ - getHiddenTokensToRight(tokenIndex, - channel) { - if (channel === undefined) { - channel = -1; - } - this.lazyInit(); - if (tokenIndex < 0 || tokenIndex >= this.tokens.length) { - throw "" + tokenIndex + " not in 0.." + this.tokens.length - 1; - } - const nextOnChannel = this.nextTokenOnChannel(tokenIndex + 1, Lexer.DEFAULT_TOKEN_CHANNEL); - const from_ = tokenIndex + 1; - // if none onchannel to right, nextOnChannel=-1 so set to = last token - const to = nextOnChannel === -1 ? this.tokens.length - 1 : nextOnChannel; - return this.filterForChannel(from_, to, channel); - } - - /** - * Collect all tokens on specified channel to the left of - * the current token up until we see a token on DEFAULT_TOKEN_CHANNEL. - * If channel is -1, find any non default channel token. - */ - getHiddenTokensToLeft(tokenIndex, - channel) { - if (channel === undefined) { - channel = -1; - } - this.lazyInit(); - if (tokenIndex < 0 || tokenIndex >= this.tokens.length) { - throw "" + tokenIndex + " not in 0.." + this.tokens.length - 1; - } - const prevOnChannel = this.previousTokenOnChannel(tokenIndex - 1, Lexer.DEFAULT_TOKEN_CHANNEL); - if (prevOnChannel === tokenIndex - 1) { - return null; - } - // if none on channel to left, prevOnChannel=-1 then from=0 - const from_ = prevOnChannel + 1; - const to = tokenIndex - 1; - return this.filterForChannel(from_, to, channel); - } - - filterForChannel(left, right, channel) { - const hidden = []; - for (let i = left; i < right + 1; i++) { - const t = this.tokens[i]; - if (channel === -1) { - if (t.channel !== Lexer.DEFAULT_TOKEN_CHANNEL) { - hidden.push(t); - } - } else if (t.channel === channel) { - hidden.push(t); - } - } - if (hidden.length === 0) { - return null; - } - return hidden; - } - - getSourceName() { - return this.tokenSource.getSourceName(); - } - -// Get the text of all tokens in this buffer./// - getText(interval) { - this.lazyInit(); - this.fill(); - if (interval === undefined || interval === null) { - interval = new Interval(0, this.tokens.length - 1); - } - let start = interval.start; - if (start instanceof Token) { - start = start.tokenIndex; - } - let stop = interval.stop; - if (stop instanceof Token) { - stop = stop.tokenIndex; - } - if (start === null || stop === null || start < 0 || stop < 0) { - return ""; - } - if (stop >= this.tokens.length) { - stop = this.tokens.length - 1; - } - let s = ""; - for (let i = start; i < stop + 1; i++) { - const t = this.tokens[i]; - if (t.type === Token.EOF) { - break; - } - s = s + t.text; - } - return s; - } - -// Get all tokens from lexer until EOF/// - fill() { - this.lazyInit(); - while (this.fetch(1000) === 1000) { - continue; - } - } -} - - -module.exports = BufferedTokenStream; diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/CharStreams.js b/reverse_engineering/node_modules/antlr4/src/antlr4/CharStreams.js deleted file mode 100644 index fcf4ae8..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/CharStreams.js +++ /dev/null @@ -1,76 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const InputStream = require('./InputStream'); -const fs = require("fs"); - -/** - * Utility functions to create InputStreams from various sources. - * - * All returned InputStreams support the full range of Unicode - * up to U+10FFFF (the default behavior of InputStream only supports - * code points up to U+FFFF). - */ -const CharStreams = { - // Creates an InputStream from a string. - fromString: function(str) { - return new InputStream(str, true); - }, - - /** - * Asynchronously creates an InputStream from a blob given the - * encoding of the bytes in that blob (defaults to 'utf8' if - * encoding is null). - * - * Invokes onLoad(result) on success, onError(error) on - * failure. - */ - fromBlob: function(blob, encoding, onLoad, onError) { - const reader = new window.FileReader(); - reader.onload = function(e) { - const is = new InputStream(e.target.result, true); - onLoad(is); - }; - reader.onerror = onError; - reader.readAsText(blob, encoding); - }, - - /** - * Creates an InputStream from a Buffer given the - * encoding of the bytes in that buffer (defaults to 'utf8' if - * encoding is null). - */ - fromBuffer: function(buffer, encoding) { - return new InputStream(buffer.toString(encoding), true); - }, - - /** Asynchronously creates an InputStream from a file on disk given - * the encoding of the bytes in that file (defaults to 'utf8' if - * encoding is null). - * - * Invokes callback(error, result) on completion. - */ - fromPath: function(path, encoding, callback) { - fs.readFile(path, encoding, function(err, data) { - let is = null; - if (data !== null) { - is = new InputStream(data, true); - } - callback(err, is); - }); - }, - - /** - * Synchronously creates an InputStream given a path to a file - * on disk and the encoding of the bytes in that file (defaults to - * 'utf8' if encoding is null). - */ - fromPathSync: function(path, encoding) { - const data = fs.readFileSync(path, encoding); - return new InputStream(data, true); - } -}; - -module.exports = CharStreams; diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/CommonTokenFactory.js b/reverse_engineering/node_modules/antlr4/src/antlr4/CommonTokenFactory.js deleted file mode 100644 index 4b7a8db..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/CommonTokenFactory.js +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const CommonToken = require('./Token').CommonToken; - -class TokenFactory {} - -/** - * This default implementation of {@link TokenFactory} creates - * {@link CommonToken} objects. - */ -class CommonTokenFactory extends TokenFactory { - constructor(copyText) { - super(); - /** - * Indicates whether {@link CommonToken//setText} should be called after - * constructing tokens to explicitly set the text. This is useful for cases - * where the input stream might not be able to provide arbitrary substrings - * of text from the input after the lexer creates a token (e.g. the - * implementation of {@link CharStream//getText} in - * {@link UnbufferedCharStream} throws an - * {@link UnsupportedOperationException}). Explicitly setting the token text - * allows {@link Token//getText} to be called at any time regardless of the - * input stream implementation. - * - *

      - * The default value is {@code false} to avoid the performance and memory - * overhead of copying text for every token unless explicitly requested.

      - */ - this.copyText = copyText===undefined ? false : copyText; - } - - create(source, type, text, channel, start, stop, line, column) { - const t = new CommonToken(source, type, channel, start, stop); - t.line = line; - t.column = column; - if (text !==null) { - t.text = text; - } else if (this.copyText && source[1] !==null) { - t.text = source[1].getText(start,stop); - } - return t; - } - - createThin(type, text) { - const t = new CommonToken(null, type); - t.text = text; - return t; - } -} - -/** - * The default {@link CommonTokenFactory} instance. - * - *

      - * This token factory does not explicitly copy token text when constructing - * tokens.

      - */ -CommonTokenFactory.DEFAULT = new CommonTokenFactory(); - -module.exports = CommonTokenFactory; diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/CommonTokenStream.js b/reverse_engineering/node_modules/antlr4/src/antlr4/CommonTokenStream.js deleted file mode 100644 index 76c4ce3..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/CommonTokenStream.js +++ /dev/null @@ -1,100 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - - -const Token = require('./Token').Token; -const BufferedTokenStream = require('./BufferedTokenStream'); - -/** - * This class extends {@link BufferedTokenStream} with functionality to filter - * token streams to tokens on a particular channel (tokens where - * {@link Token//getChannel} returns a particular value). - * - *

      - * This token stream provides access to all tokens by index or when calling - * methods like {@link //getText}. The channel filtering is only used for code - * accessing tokens via the lookahead methods {@link //LA}, {@link //LT}, and - * {@link //LB}.

      - * - *

      - * By default, tokens are placed on the default channel - * ({@link Token//DEFAULT_CHANNEL}), but may be reassigned by using the - * {@code ->channel(HIDDEN)} lexer command, or by using an embedded action to - * call {@link Lexer//setChannel}. - *

      - * - *

      - * Note: lexer rules which use the {@code ->skip} lexer command or call - * {@link Lexer//skip} do not produce tokens at all, so input text matched by - * such a rule will not be available as part of the token stream, regardless of - * channel.

      - */ -class CommonTokenStream extends BufferedTokenStream { - constructor(lexer, channel) { - super(lexer); - this.channel = channel===undefined ? Token.DEFAULT_CHANNEL : channel; - } - - adjustSeekIndex(i) { - return this.nextTokenOnChannel(i, this.channel); - } - - LB(k) { - if (k===0 || this.index-k<0) { - return null; - } - let i = this.index; - let n = 1; - // find k good tokens looking backwards - while (n <= k) { - // skip off-channel tokens - i = this.previousTokenOnChannel(i - 1, this.channel); - n += 1; - } - if (i < 0) { - return null; - } - return this.tokens[i]; - } - - LT(k) { - this.lazyInit(); - if (k === 0) { - return null; - } - if (k < 0) { - return this.LB(-k); - } - let i = this.index; - let n = 1; // we know tokens[pos] is a good one - // find k good tokens - while (n < k) { - // skip off-channel tokens, but make sure to not look past EOF - if (this.sync(i + 1)) { - i = this.nextTokenOnChannel(i + 1, this.channel); - } - n += 1; - } - return this.tokens[i]; - } - - // Count EOF just once. - getNumberOfOnChannelTokens() { - let n = 0; - this.fill(); - for (let i =0; i< this.tokens.length;i++) { - const t = this.tokens[i]; - if( t.channel===this.channel) { - n += 1; - } - if( t.type===Token.EOF) { - break; - } - } - return n; - } -} - -module.exports = CommonTokenStream; diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/FileStream.js b/reverse_engineering/node_modules/antlr4/src/antlr4/FileStream.js deleted file mode 100644 index 8632ec6..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/FileStream.js +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const InputStream = require('./InputStream'); -const fs = require("fs"); - -/** - * This is an InputStream that is loaded from a file all at once - * when you construct the object. - */ -class FileStream extends InputStream { - constructor(fileName, decodeToUnicodeCodePoints) { - const data = fs.readFileSync(fileName, "utf8"); - super(data, decodeToUnicodeCodePoints); - this.fileName = fileName; - } -} - -module.exports = FileStream diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/InputStream.js b/reverse_engineering/node_modules/antlr4/src/antlr4/InputStream.js deleted file mode 100644 index 5493774..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/InputStream.js +++ /dev/null @@ -1,131 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const {Token} = require('./Token'); -require('./polyfills/codepointat'); -require('./polyfills/fromcodepoint'); - -/** - * If decodeToUnicodeCodePoints is true, the input is treated - * as a series of Unicode code points. - * - * Otherwise, the input is treated as a series of 16-bit UTF-16 code - * units. - */ -class InputStream { - constructor(data, decodeToUnicodeCodePoints) { - this.name = ""; - this.strdata = data; - this.decodeToUnicodeCodePoints = decodeToUnicodeCodePoints || false; - // _loadString - Vacuum all input from a string and then treat it like a buffer. - this._index = 0; - this.data = []; - if (this.decodeToUnicodeCodePoints) { - for (let i = 0; i < this.strdata.length; ) { - const codePoint = this.strdata.codePointAt(i); - this.data.push(codePoint); - i += codePoint <= 0xFFFF ? 1 : 2; - } - } else { - this.data = new Array(this.strdata.length); - for (let i = 0; i < this.strdata.length; i++) { - const codeUnit = this.strdata.charCodeAt(i); - this.data[i] = codeUnit; - } - } - this._size = this.data.length; - } - - /** - * Reset the stream so that it's in the same state it was - * when the object was created *except* the data array is not - * touched. - */ - reset() { - this._index = 0; - } - - consume() { - if (this._index >= this._size) { - // assert this.LA(1) == Token.EOF - throw ("cannot consume EOF"); - } - this._index += 1; - } - - LA(offset) { - if (offset === 0) { - return 0; // undefined - } - if (offset < 0) { - offset += 1; // e.g., translate LA(-1) to use offset=0 - } - const pos = this._index + offset - 1; - if (pos < 0 || pos >= this._size) { // invalid - return Token.EOF; - } - return this.data[pos]; - } - - LT(offset) { - return this.LA(offset); - } - -// mark/release do nothing; we have entire buffer - mark() { - return -1; - } - - release(marker) { - } - - /** - * consume() ahead until p==_index; can't just set p=_index as we must - * update line and column. If we seek backwards, just set p - */ - seek(_index) { - if (_index <= this._index) { - this._index = _index; // just jump; don't update stream state (line, - // ...) - return; - } - // seek forward - this._index = Math.min(_index, this._size); - } - - getText(start, stop) { - if (stop >= this._size) { - stop = this._size - 1; - } - if (start >= this._size) { - return ""; - } else { - if (this.decodeToUnicodeCodePoints) { - let result = ""; - for (let i = start; i <= stop; i++) { - result += String.fromCodePoint(this.data[i]); - } - return result; - } else { - return this.strdata.slice(start, stop + 1); - } - } - } - - toString() { - return this.strdata; - } - - get index(){ - return this._index; - } - - get size(){ - return this._size; - } -} - - -module.exports = InputStream; diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/IntervalSet.js b/reverse_engineering/node_modules/antlr4/src/antlr4/IntervalSet.js deleted file mode 100644 index c96718d..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/IntervalSet.js +++ /dev/null @@ -1,294 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const {Token} = require('./Token'); - -/* stop is not included! */ -class Interval { - - constructor(start, stop) { - this.start = start; - this.stop = stop; - } - - clone() { - return new Interval(this.start, this.stop); - } - - contains(item) { - return item >= this.start && item < this.stop; - } - - toString() { - if(this.start===this.stop-1) { - return this.start.toString(); - } else { - return this.start.toString() + ".." + (this.stop-1).toString(); - } - } - - get length(){ - return this.stop - this.start; - } -} - - -class IntervalSet { - constructor() { - this.intervals = null; - this.readOnly = false; - } - - first(v) { - if (this.intervals === null || this.intervals.length===0) { - return Token.INVALID_TYPE; - } else { - return this.intervals[0].start; - } - } - - addOne(v) { - this.addInterval(new Interval(v, v + 1)); - } - - addRange(l, h) { - this.addInterval(new Interval(l, h + 1)); - } - - addInterval(toAdd) { - if (this.intervals === null) { - this.intervals = []; - this.intervals.push(toAdd.clone()); - } else { - // find insert pos - for (let pos = 0; pos < this.intervals.length; pos++) { - const existing = this.intervals[pos]; - // distinct range -> insert - if (toAdd.stop < existing.start) { - this.intervals.splice(pos, 0, toAdd); - return; - } - // contiguous range -> adjust - else if (toAdd.stop === existing.start) { - this.intervals[pos] = new Interval(toAdd.start, existing.stop) - return; - } - // overlapping range -> adjust and reduce - else if (toAdd.start <= existing.stop) { - this.intervals[pos] = new Interval(Math.min(existing.start, toAdd.start), Math.max(existing.stop, toAdd.stop)); - this.reduce(pos); - return; - } - } - // greater than any existing - this.intervals.push(toAdd.clone()); - } - } - - addSet(other) { - if (other.intervals !== null) { - other.intervals.forEach( toAdd => this.addInterval(toAdd), this); - } - return this; - } - - reduce(pos) { - // only need to reduce if pos is not the last - if (pos < this.intervals.length - 1) { - const current = this.intervals[pos]; - const next = this.intervals[pos + 1]; - // if next contained in current - if (current.stop >= next.stop) { - this.intervals.splice(pos + 1, 1); - this.reduce(pos); - } else if (current.stop >= next.start) { - this.intervals[pos] = new Interval(current.start, next.stop); - this.intervals.splice(pos + 1, 1); - } - } - } - - complement(start, stop) { - const result = new IntervalSet(); - result.addInterval(new Interval(start, stop + 1)); - if(this.intervals !== null) - this.intervals.forEach(toRemove => result.removeRange(toRemove)); - return result; - } - - contains(item) { - if (this.intervals === null) { - return false; - } else { - for (let k = 0; k < this.intervals.length; k++) { - if(this.intervals[k].contains(item)) { - return true; - } - } - return false; - } - } - - removeRange(toRemove) { - if(toRemove.start===toRemove.stop-1) { - this.removeOne(toRemove.start); - } else if (this.intervals !== null) { - let pos = 0; - for(let n=0; nexisting.start && toRemove.stop=existing.stop) { - this.intervals.splice(pos, 1); - pos = pos - 1; // need another pass - } - // check for lower boundary - else if(toRemove.start"); - } else { - names.push("'" + String.fromCharCode(existing.start) + "'"); - } - } else { - names.push("'" + String.fromCharCode(existing.start) + "'..'" + String.fromCharCode(existing.stop-1) + "'"); - } - } - if (names.length > 1) { - return "{" + names.join(", ") + "}"; - } else { - return names[0]; - } - } - - toIndexString() { - const names = []; - for (let i = 0; i < this.intervals.length; i++) { - const existing = this.intervals[i]; - if(existing.stop===existing.start+1) { - if ( existing.start===Token.EOF ) { - names.push(""); - } else { - names.push(existing.start.toString()); - } - } else { - names.push(existing.start.toString() + ".." + (existing.stop-1).toString()); - } - } - if (names.length > 1) { - return "{" + names.join(", ") + "}"; - } else { - return names[0]; - } - } - - toTokenString(literalNames, symbolicNames) { - const names = []; - for (let i = 0; i < this.intervals.length; i++) { - const existing = this.intervals[i]; - for (let j = existing.start; j < existing.stop; j++) { - names.push(this.elementName(literalNames, symbolicNames, j)); - } - } - if (names.length > 1) { - return "{" + names.join(", ") + "}"; - } else { - return names[0]; - } - } - - elementName(literalNames, symbolicNames, token) { - if (token === Token.EOF) { - return ""; - } else if (token === Token.EPSILON) { - return ""; - } else { - return literalNames[token] || symbolicNames[token]; - } - } - - get length(){ - return this.intervals.map( interval => interval.length ).reduce((acc, val) => acc + val); - } -} - -module.exports = { - Interval, - IntervalSet -}; diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/LL1Analyzer.js b/reverse_engineering/node_modules/antlr4/src/antlr4/LL1Analyzer.js deleted file mode 100644 index 18ed878..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/LL1Analyzer.js +++ /dev/null @@ -1,190 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const {Set, BitSet} = require('./Utils'); -const {Token} = require('./Token'); -const {ATNConfig} = require('./atn/ATNConfig'); -const {IntervalSet} = require('./IntervalSet'); -const {RuleStopState} = require('./atn/ATNState'); -const {RuleTransition, NotSetTransition, WildcardTransition, AbstractPredicateTransition} = require('./atn/Transition'); -const {predictionContextFromRuleContext, PredictionContext, SingletonPredictionContext} = require('./PredictionContext'); - -class LL1Analyzer { - constructor(atn) { - this.atn = atn; - } - - /** - * Calculates the SLL(1) expected lookahead set for each outgoing transition - * of an {@link ATNState}. The returned array has one element for each - * outgoing transition in {@code s}. If the closure from transition - * i leads to a semantic predicate before matching a symbol, the - * element at index i of the result will be {@code null}. - * - * @param s the ATN state - * @return the expected symbols for each outgoing transition of {@code s}. - */ - getDecisionLookahead(s) { - if (s === null) { - return null; - } - const count = s.transitions.length; - const look = []; - for(let alt=0; alt< count; alt++) { - look[alt] = new IntervalSet(); - const lookBusy = new Set(); - const seeThruPreds = false; // fail to get lookahead upon pred - this._LOOK(s.transition(alt).target, null, PredictionContext.EMPTY, - look[alt], lookBusy, new BitSet(), seeThruPreds, false); - // Wipe out lookahead for this alternative if we found nothing - // or we had a predicate when we !seeThruPreds - if (look[alt].length===0 || look[alt].contains(LL1Analyzer.HIT_PRED)) { - look[alt] = null; - } - } - return look; - } - - /** - * Compute set of tokens that can follow {@code s} in the ATN in the - * specified {@code ctx}. - * - *

      If {@code ctx} is {@code null} and the end of the rule containing - * {@code s} is reached, {@link Token//EPSILON} is added to the result set. - * If {@code ctx} is not {@code null} and the end of the outermost rule is - * reached, {@link Token//EOF} is added to the result set.

      - * - * @param s the ATN state - * @param stopState the ATN state to stop at. This can be a - * {@link BlockEndState} to detect epsilon paths through a closure. - * @param ctx the complete parser context, or {@code null} if the context - * should be ignored - * - * @return The set of tokens that can follow {@code s} in the ATN in the - * specified {@code ctx}. - */ - LOOK(s, stopState, ctx) { - const r = new IntervalSet(); - const seeThruPreds = true; // ignore preds; get all lookahead - ctx = ctx || null; - const lookContext = ctx!==null ? predictionContextFromRuleContext(s.atn, ctx) : null; - this._LOOK(s, stopState, lookContext, r, new Set(), new BitSet(), seeThruPreds, true); - return r; - } - - /** - * Compute set of tokens that can follow {@code s} in the ATN in the - * specified {@code ctx}. - * - *

      If {@code ctx} is {@code null} and {@code stopState} or the end of the - * rule containing {@code s} is reached, {@link Token//EPSILON} is added to - * the result set. If {@code ctx} is not {@code null} and {@code addEOF} is - * {@code true} and {@code stopState} or the end of the outermost rule is - * reached, {@link Token//EOF} is added to the result set.

      - * - * @param s the ATN state. - * @param stopState the ATN state to stop at. This can be a - * {@link BlockEndState} to detect epsilon paths through a closure. - * @param ctx The outer context, or {@code null} if the outer context should - * not be used. - * @param look The result lookahead set. - * @param lookBusy A set used for preventing epsilon closures in the ATN - * from causing a stack overflow. Outside code should pass - * {@code new Set} for this argument. - * @param calledRuleStack A set used for preventing left recursion in the - * ATN from causing a stack overflow. Outside code should pass - * {@code new BitSet()} for this argument. - * @param seeThruPreds {@code true} to true semantic predicates as - * implicitly {@code true} and "see through them", otherwise {@code false} - * to treat semantic predicates as opaque and add {@link //HIT_PRED} to the - * result if one is encountered. - * @param addEOF Add {@link Token//EOF} to the result if the end of the - * outermost context is reached. This parameter has no effect if {@code ctx} - * is {@code null}. - */ - _LOOK(s, stopState , ctx, look, lookBusy, calledRuleStack, seeThruPreds, addEOF) { - const c = new ATNConfig({state:s, alt:0, context: ctx}, null); - if (lookBusy.contains(c)) { - return; - } - lookBusy.add(c); - if (s === stopState) { - if (ctx ===null) { - look.addOne(Token.EPSILON); - return; - } else if (ctx.isEmpty() && addEOF) { - look.addOne(Token.EOF); - return; - } - } - if (s instanceof RuleStopState ) { - if (ctx ===null) { - look.addOne(Token.EPSILON); - return; - } else if (ctx.isEmpty() && addEOF) { - look.addOne(Token.EOF); - return; - } - if (ctx !== PredictionContext.EMPTY) { - const removed = calledRuleStack.contains(s.ruleIndex); - try { - calledRuleStack.remove(s.ruleIndex); - // run thru all possible stack tops in ctx - for (let i = 0; i < ctx.length; i++) { - const returnState = this.atn.states[ctx.getReturnState(i)]; - this._LOOK(returnState, stopState, ctx.getParent(i), look, lookBusy, calledRuleStack, seeThruPreds, addEOF); - } - }finally { - if (removed) { - calledRuleStack.add(s.ruleIndex); - } - } - return; - } - } - for(let j=0; j"; - } else if (c === '\n') { - return "\\n"; - } else if (c === '\t') { - return "\\t"; - } else if (c === '\r') { - return "\\r"; - } else { - return c; - } - } - - getCharErrorDisplay(c) { - return "'" + this.getErrorDisplayForChar(c) + "'"; - } - - /** - * Lexers can normally match any char in it's vocabulary after matching - * a token, so do the easy thing and just kill a character and hope - * it all works out. You can instead use the rule invocation stack - * to do sophisticated error recovery if you are in a fragment rule. - */ - recover(re) { - if (this._input.LA(1) !== Token.EOF) { - if (re instanceof LexerNoViableAltException) { - // skip a char and try again - this._interp.consume(this._input); - } else { - // TODO: Do we lose character or line position information? - this._input.consume(); - } - } - } - - get inputStream(){ - return this._input; - } - - set inputStream(input) { - this._input = null; - this._tokenFactorySourcePair = [ this, this._input ]; - this.reset(); - this._input = input; - this._tokenFactorySourcePair = [ this, this._input ]; - } - - get sourceName(){ - return this._input.sourceName; - } - - get type(){ - return this._type; - } - - set type(type) { - this._type = type; - } - - get line(){ - return this._interp.line; - } - - set line(line) { - this._interp.line = line; - } - - get column(){ - return this._interp.column; - } - - set column(column) { - this._interp.column = column; - } - - get text(){ - if (this._text !== null) { - return this._text; - } else { - return this._interp.getText(this._input); - } - } - - set text(text) { - this._text = text; - } -} - - - - -Lexer.DEFAULT_MODE = 0; -Lexer.MORE = -2; -Lexer.SKIP = -3; - -Lexer.DEFAULT_TOKEN_CHANNEL = Token.DEFAULT_CHANNEL; -Lexer.HIDDEN = Token.HIDDEN_CHANNEL; -Lexer.MIN_CHAR_VALUE = 0x0000; -Lexer.MAX_CHAR_VALUE = 0x10FFFF; - -// Set the char stream and reset the lexer - - -module.exports = Lexer; diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/Parser.js b/reverse_engineering/node_modules/antlr4/src/antlr4/Parser.js deleted file mode 100644 index 61bf99d..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/Parser.js +++ /dev/null @@ -1,681 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const {Token} = require('./Token'); -const {ParseTreeListener, TerminalNode, ErrorNode} = require('./tree/Tree'); -const Recognizer = require('./Recognizer'); -const {DefaultErrorStrategy} = require('./error/ErrorStrategy'); -const ATNDeserializer = require('./atn/ATNDeserializer'); -const ATNDeserializationOptions = require('./atn/ATNDeserializationOptions'); -const Lexer = require('./Lexer'); - -class TraceListener extends ParseTreeListener { - constructor(parser) { - super(); - this.parser = parser; - } - - enterEveryRule(ctx) { - console.log("enter " + this.parser.ruleNames[ctx.ruleIndex] + ", LT(1)=" + this.parser._input.LT(1).text); - } - - visitTerminal(node) { - console.log("consume " + node.symbol + " rule " + this.parser.ruleNames[this.parser._ctx.ruleIndex]); - } - - exitEveryRule(ctx) { - console.log("exit " + this.parser.ruleNames[ctx.ruleIndex] + ", LT(1)=" + this.parser._input.LT(1).text); - } -} - -class Parser extends Recognizer { - /** - * this is all the parsing support code essentially; most of it is error - * recovery stuff. - */ - constructor(input) { - super(); - // The input stream. - this._input = null; - /** - * The error handling strategy for the parser. The default value is a new - * instance of {@link DefaultErrorStrategy}. - */ - this._errHandler = new DefaultErrorStrategy(); - this._precedenceStack = []; - this._precedenceStack.push(0); - /** - * The {@link ParserRuleContext} object for the currently executing rule. - * this is always non-null during the parsing process. - */ - this._ctx = null; - /** - * Specifies whether or not the parser should construct a parse tree during - * the parsing process. The default value is {@code true}. - */ - this.buildParseTrees = true; - /** - * When {@link //setTrace}{@code (true)} is called, a reference to the - * {@link TraceListener} is stored here so it can be easily removed in a - * later call to {@link //setTrace}{@code (false)}. The listener itself is - * implemented as a parser listener so this field is not directly used by - * other parser methods. - */ - this._tracer = null; - /** - * The list of {@link ParseTreeListener} listeners registered to receive - * events during the parse. - */ - this._parseListeners = null; - /** - * The number of syntax errors reported during parsing. this value is - * incremented each time {@link //notifyErrorListeners} is called. - */ - this._syntaxErrors = 0; - this.setInputStream(input); - } - - // reset the parser's state - reset() { - if (this._input !== null) { - this._input.seek(0); - } - this._errHandler.reset(this); - this._ctx = null; - this._syntaxErrors = 0; - this.setTrace(false); - this._precedenceStack = []; - this._precedenceStack.push(0); - if (this._interp !== null) { - this._interp.reset(); - } - } - - /** - * Match current input symbol against {@code ttype}. If the symbol type - * matches, {@link ANTLRErrorStrategy//reportMatch} and {@link //consume} are - * called to complete the match process. - * - *

      If the symbol type does not match, - * {@link ANTLRErrorStrategy//recoverInline} is called on the current error - * strategy to attempt recovery. If {@link //getBuildParseTree} is - * {@code true} and the token index of the symbol returned by - * {@link ANTLRErrorStrategy//recoverInline} is -1, the symbol is added to - * the parse tree by calling {@link ParserRuleContext//addErrorNode}.

      - * - * @param ttype the token type to match - * @return the matched symbol - * @throws RecognitionException if the current input symbol did not match - * {@code ttype} and the error strategy could not recover from the - * mismatched symbol - */ - match(ttype) { - let t = this.getCurrentToken(); - if (t.type === ttype) { - this._errHandler.reportMatch(this); - this.consume(); - } else { - t = this._errHandler.recoverInline(this); - if (this.buildParseTrees && t.tokenIndex === -1) { - // we must have conjured up a new token during single token - // insertion - // if it's not the current symbol - this._ctx.addErrorNode(t); - } - } - return t; - } - - /** - * Match current input symbol as a wildcard. If the symbol type matches - * (i.e. has a value greater than 0), {@link ANTLRErrorStrategy//reportMatch} - * and {@link //consume} are called to complete the match process. - * - *

      If the symbol type does not match, - * {@link ANTLRErrorStrategy//recoverInline} is called on the current error - * strategy to attempt recovery. If {@link //getBuildParseTree} is - * {@code true} and the token index of the symbol returned by - * {@link ANTLRErrorStrategy//recoverInline} is -1, the symbol is added to - * the parse tree by calling {@link ParserRuleContext//addErrorNode}.

      - * - * @return the matched symbol - * @throws RecognitionException if the current input symbol did not match - * a wildcard and the error strategy could not recover from the mismatched - * symbol - */ - matchWildcard() { - let t = this.getCurrentToken(); - if (t.type > 0) { - this._errHandler.reportMatch(this); - this.consume(); - } else { - t = this._errHandler.recoverInline(this); - if (this._buildParseTrees && t.tokenIndex === -1) { - // we must have conjured up a new token during single token - // insertion - // if it's not the current symbol - this._ctx.addErrorNode(t); - } - } - return t; - } - - getParseListeners() { - return this._parseListeners || []; - } - - /** - * Registers {@code listener} to receive events during the parsing process. - * - *

      To support output-preserving grammar transformations (including but not - * limited to left-recursion removal, automated left-factoring, and - * optimized code generation), calls to listener methods during the parse - * may differ substantially from calls made by - * {@link ParseTreeWalker//DEFAULT} used after the parse is complete. In - * particular, rule entry and exit events may occur in a different order - * during the parse than after the parser. In addition, calls to certain - * rule entry methods may be omitted.

      - * - *

      With the following specific exceptions, calls to listener events are - * deterministic, i.e. for identical input the calls to listener - * methods will be the same.

      - * - *
        - *
      • Alterations to the grammar used to generate code may change the - * behavior of the listener calls.
      • - *
      • Alterations to the command line options passed to ANTLR 4 when - * generating the parser may change the behavior of the listener calls.
      • - *
      • Changing the version of the ANTLR Tool used to generate the parser - * may change the behavior of the listener calls.
      • - *
      - * - * @param listener the listener to add - * - * @throws NullPointerException if {@code} listener is {@code null} - */ - addParseListener(listener) { - if (listener === null) { - throw "listener"; - } - if (this._parseListeners === null) { - this._parseListeners = []; - } - this._parseListeners.push(listener); - } - - /** - * Remove {@code listener} from the list of parse listeners. - * - *

      If {@code listener} is {@code null} or has not been added as a parse - * listener, this method does nothing.

      - * @param listener the listener to remove - */ - removeParseListener(listener) { - if (this._parseListeners !== null) { - const idx = this._parseListeners.indexOf(listener); - if (idx >= 0) { - this._parseListeners.splice(idx, 1); - } - if (this._parseListeners.length === 0) { - this._parseListeners = null; - } - } - } - - // Remove all parse listeners. - removeParseListeners() { - this._parseListeners = null; - } - - // Notify any parse listeners of an enter rule event. - triggerEnterRuleEvent() { - if (this._parseListeners !== null) { - const ctx = this._ctx; - this._parseListeners.forEach(function(listener) { - listener.enterEveryRule(ctx); - ctx.enterRule(listener); - }); - } - } - - /** - * Notify any parse listeners of an exit rule event. - * @see //addParseListener - */ - triggerExitRuleEvent() { - if (this._parseListeners !== null) { - // reverse order walk of listeners - const ctx = this._ctx; - this._parseListeners.slice(0).reverse().forEach(function(listener) { - ctx.exitRule(listener); - listener.exitEveryRule(ctx); - }); - } - } - - getTokenFactory() { - return this._input.tokenSource._factory; - } - - // Tell our token source and error strategy about a new way to create tokens. - setTokenFactory(factory) { - this._input.tokenSource._factory = factory; - } - - /** - * The ATN with bypass alternatives is expensive to create so we create it - * lazily. - * - * @throws UnsupportedOperationException if the current parser does not - * implement the {@link //getSerializedATN()} method. - */ - getATNWithBypassAlts() { - const serializedAtn = this.getSerializedATN(); - if (serializedAtn === null) { - throw "The current parser does not support an ATN with bypass alternatives."; - } - let result = this.bypassAltsAtnCache[serializedAtn]; - if (result === null) { - const deserializationOptions = new ATNDeserializationOptions(); - deserializationOptions.generateRuleBypassTransitions = true; - result = new ATNDeserializer(deserializationOptions) - .deserialize(serializedAtn); - this.bypassAltsAtnCache[serializedAtn] = result; - } - return result; - } - - /** - * The preferred method of getting a tree pattern. For example, here's a - * sample use: - * - *
      -	 * ParseTree t = parser.expr();
      -	 * ParseTreePattern p = parser.compileParseTreePattern("<ID>+0",
      -	 * MyParser.RULE_expr);
      -	 * ParseTreeMatch m = p.match(t);
      -	 * String id = m.get("ID");
      -	 * 
      - */ - compileParseTreePattern(pattern, patternRuleIndex, lexer) { - lexer = lexer || null; - if (lexer === null) { - if (this.getTokenStream() !== null) { - const tokenSource = this.getTokenStream().tokenSource; - if (tokenSource instanceof Lexer) { - lexer = tokenSource; - } - } - } - if (lexer === null) { - throw "Parser can't discover a lexer to use"; - } - const m = new ParseTreePatternMatcher(lexer, this); - return m.compile(pattern, patternRuleIndex); - } - - getInputStream() { - return this.getTokenStream(); - } - - setInputStream(input) { - this.setTokenStream(input); - } - - getTokenStream() { - return this._input; - } - - // Set the token stream and reset the parser. - setTokenStream(input) { - this._input = null; - this.reset(); - this._input = input; - } - - /** - * Match needs to return the current input symbol, which gets put - * into the label for the associated token ref; e.g., x=ID. - */ - getCurrentToken() { - return this._input.LT(1); - } - - notifyErrorListeners(msg, offendingToken, err) { - offendingToken = offendingToken || null; - err = err || null; - if (offendingToken === null) { - offendingToken = this.getCurrentToken(); - } - this._syntaxErrors += 1; - const line = offendingToken.line; - const column = offendingToken.column; - const listener = this.getErrorListenerDispatch(); - listener.syntaxError(this, offendingToken, line, column, msg, err); - } - - /** - * Consume and return the {@linkplain //getCurrentToken current symbol}. - * - *

      E.g., given the following input with {@code A} being the current - * lookahead symbol, this function moves the cursor to {@code B} and returns - * {@code A}.

      - * - *
      -	 * A B
      -	 * ^
      -	 * 
      - * - * If the parser is not in error recovery mode, the consumed symbol is added - * to the parse tree using {@link ParserRuleContext//addChild(Token)}, and - * {@link ParseTreeListener//visitTerminal} is called on any parse listeners. - * If the parser is in error recovery mode, the consumed symbol is - * added to the parse tree using - * {@link ParserRuleContext//addErrorNode(Token)}, and - * {@link ParseTreeListener//visitErrorNode} is called on any parse - * listeners. - */ - consume() { - const o = this.getCurrentToken(); - if (o.type !== Token.EOF) { - this.getInputStream().consume(); - } - const hasListener = this._parseListeners !== null && this._parseListeners.length > 0; - if (this.buildParseTrees || hasListener) { - let node; - if (this._errHandler.inErrorRecoveryMode(this)) { - node = this._ctx.addErrorNode(o); - } else { - node = this._ctx.addTokenNode(o); - } - node.invokingState = this.state; - if (hasListener) { - this._parseListeners.forEach(function(listener) { - if (node instanceof ErrorNode || (node.isErrorNode !== undefined && node.isErrorNode())) { - listener.visitErrorNode(node); - } else if (node instanceof TerminalNode) { - listener.visitTerminal(node); - } - }); - } - } - return o; - } - - addContextToParseTree() { - // add current context to parent if we have a parent - if (this._ctx.parentCtx !== null) { - this._ctx.parentCtx.addChild(this._ctx); - } - } - - /** - * Always called by generated parsers upon entry to a rule. Access field - * {@link //_ctx} get the current context. - */ - enterRule(localctx, state, ruleIndex) { - this.state = state; - this._ctx = localctx; - this._ctx.start = this._input.LT(1); - if (this.buildParseTrees) { - this.addContextToParseTree(); - } - this.triggerEnterRuleEvent(); - } - - exitRule() { - this._ctx.stop = this._input.LT(-1); - // trigger event on _ctx, before it reverts to parent - this.triggerExitRuleEvent(); - this.state = this._ctx.invokingState; - this._ctx = this._ctx.parentCtx; - } - - enterOuterAlt(localctx, altNum) { - localctx.setAltNumber(altNum); - // if we have new localctx, make sure we replace existing ctx - // that is previous child of parse tree - if (this.buildParseTrees && this._ctx !== localctx) { - if (this._ctx.parentCtx !== null) { - this._ctx.parentCtx.removeLastChild(); - this._ctx.parentCtx.addChild(localctx); - } - } - this._ctx = localctx; - } - - /** - * Get the precedence level for the top-most precedence rule. - * - * @return The precedence level for the top-most precedence rule, or -1 if - * the parser context is not nested within a precedence rule. - */ - getPrecedence() { - if (this._precedenceStack.length === 0) { - return -1; - } else { - return this._precedenceStack[this._precedenceStack.length-1]; - } - } - - enterRecursionRule(localctx, state, ruleIndex, precedence) { - this.state = state; - this._precedenceStack.push(precedence); - this._ctx = localctx; - this._ctx.start = this._input.LT(1); - this.triggerEnterRuleEvent(); // simulates rule entry for left-recursive rules - } - - // Like {@link //enterRule} but for recursive rules. - pushNewRecursionContext(localctx, state, ruleIndex) { - const previous = this._ctx; - previous.parentCtx = localctx; - previous.invokingState = state; - previous.stop = this._input.LT(-1); - - this._ctx = localctx; - this._ctx.start = previous.start; - if (this.buildParseTrees) { - this._ctx.addChild(previous); - } - this.triggerEnterRuleEvent(); // simulates rule entry for left-recursive rules - } - - unrollRecursionContexts(parentCtx) { - this._precedenceStack.pop(); - this._ctx.stop = this._input.LT(-1); - const retCtx = this._ctx; // save current ctx (return value) - // unroll so _ctx is as it was before call to recursive method - const parseListeners = this.getParseListeners(); - if (parseListeners !== null && parseListeners.length > 0) { - while (this._ctx !== parentCtx) { - this.triggerExitRuleEvent(); - this._ctx = this._ctx.parentCtx; - } - } else { - this._ctx = parentCtx; - } - // hook into tree - retCtx.parentCtx = parentCtx; - if (this.buildParseTrees && parentCtx !== null) { - // add return ctx into invoking rule's tree - parentCtx.addChild(retCtx); - } - } - - getInvokingContext(ruleIndex) { - let ctx = this._ctx; - while (ctx !== null) { - if (ctx.ruleIndex === ruleIndex) { - return ctx; - } - ctx = ctx.parentCtx; - } - return null; - } - - precpred(localctx, precedence) { - return precedence >= this._precedenceStack[this._precedenceStack.length-1]; - } - - inContext(context) { - // TODO: useful in parser? - return false; - } - - /** - * Checks whether or not {@code symbol} can follow the current state in the - * ATN. The behavior of this method is equivalent to the following, but is - * implemented such that the complete context-sensitive follow set does not - * need to be explicitly constructed. - * - *
      -	 * return getExpectedTokens().contains(symbol);
      -	 * 
      - * - * @param symbol the symbol type to check - * @return {@code true} if {@code symbol} can follow the current state in - * the ATN, otherwise {@code false}. - */ - isExpectedToken(symbol) { - const atn = this._interp.atn; - let ctx = this._ctx; - const s = atn.states[this.state]; - let following = atn.nextTokens(s); - if (following.contains(symbol)) { - return true; - } - if (!following.contains(Token.EPSILON)) { - return false; - } - while (ctx !== null && ctx.invokingState >= 0 && following.contains(Token.EPSILON)) { - const invokingState = atn.states[ctx.invokingState]; - const rt = invokingState.transitions[0]; - following = atn.nextTokens(rt.followState); - if (following.contains(symbol)) { - return true; - } - ctx = ctx.parentCtx; - } - if (following.contains(Token.EPSILON) && symbol === Token.EOF) { - return true; - } else { - return false; - } - } - - /** - * Computes the set of input symbols which could follow the current parser - * state and context, as given by {@link //getState} and {@link //getContext}, - * respectively. - * - * @see ATN//getExpectedTokens(int, RuleContext) - */ - getExpectedTokens() { - return this._interp.atn.getExpectedTokens(this.state, this._ctx); - } - - getExpectedTokensWithinCurrentRule() { - const atn = this._interp.atn; - const s = atn.states[this.state]; - return atn.nextTokens(s); - } - - // Get a rule's index (i.e., {@code RULE_ruleName} field) or -1 if not found. - getRuleIndex(ruleName) { - const ruleIndex = this.getRuleIndexMap()[ruleName]; - if (ruleIndex !== null) { - return ruleIndex; - } else { - return -1; - } - } - - /** - * Return List<String> of the rule names in your parser instance - * leading up to a call to the current rule. You could override if - * you want more details such as the file/line info of where - * in the ATN a rule is invoked. - * - * this is very useful for error messages. - */ - getRuleInvocationStack(p) { - p = p || null; - if (p === null) { - p = this._ctx; - } - const stack = []; - while (p !== null) { - // compute what follows who invoked us - const ruleIndex = p.ruleIndex; - if (ruleIndex < 0) { - stack.push("n/a"); - } else { - stack.push(this.ruleNames[ruleIndex]); - } - p = p.parentCtx; - } - return stack; - } - - // For debugging and other purposes. - getDFAStrings() { - return this._interp.decisionToDFA.toString(); - } - - // For debugging and other purposes. - dumpDFA() { - let seenOne = false; - for (let i = 0; i < this._interp.decisionToDFA.length; i++) { - const dfa = this._interp.decisionToDFA[i]; - if (dfa.states.length > 0) { - if (seenOne) { - console.log(); - } - this.printer.println("Decision " + dfa.decision + ":"); - this.printer.print(dfa.toString(this.literalNames, this.symbolicNames)); - seenOne = true; - } - } - } - - /* - " printer = function() {\r\n" + - " this.println = function(s) { document.getElementById('output') += s + '\\n'; }\r\n" + - " this.print = function(s) { document.getElementById('output') += s; }\r\n" + - " };\r\n" + - */ - getSourceName() { - return this._input.sourceName; - } - - /** - * During a parse is sometimes useful to listen in on the rule entry and exit - * events as well as token matches. this is for quick and dirty debugging. - */ - setTrace(trace) { - if (!trace) { - this.removeParseListener(this._tracer); - this._tracer = null; - } else { - if (this._tracer !== null) { - this.removeParseListener(this._tracer); - } - this._tracer = new TraceListener(this); - this.addParseListener(this._tracer); - } - } -} - -/** - * this field maps from the serialized ATN string to the deserialized {@link - * ATN} with - * bypass alternatives. - * - * @see ATNDeserializationOptions//isGenerateRuleBypassTransitions() - */ -Parser.bypassAltsAtnCache = {}; - -module.exports = Parser; diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/ParserRuleContext.js b/reverse_engineering/node_modules/antlr4/src/antlr4/ParserRuleContext.js deleted file mode 100644 index d0fce90..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/ParserRuleContext.js +++ /dev/null @@ -1,225 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const RuleContext = require('./RuleContext'); -const Tree = require('./tree/Tree'); -const INVALID_INTERVAL = Tree.INVALID_INTERVAL; -const TerminalNode = Tree.TerminalNode; -const TerminalNodeImpl = Tree.TerminalNodeImpl; -const ErrorNodeImpl = Tree.ErrorNodeImpl; -const Interval = require("./IntervalSet").Interval; - -/** - * A rule invocation record for parsing. - * - * Contains all of the information about the current rule not stored in the - * RuleContext. It handles parse tree children list, Any ATN state - * tracing, and the default values available for rule indications: - * start, stop, rule index, current alt number, current - * ATN state. - * - * Subclasses made for each rule and grammar track the parameters, - * return values, locals, and labels specific to that rule. These - * are the objects that are returned from rules. - * - * Note text is not an actual field of a rule return value; it is computed - * from start and stop using the input stream's toString() method. I - * could add a ctor to this so that we can pass in and store the input - * stream, but I'm not sure we want to do that. It would seem to be undefined - * to get the .text property anyway if the rule matches tokens from multiple - * input streams. - * - * I do not use getters for fields of objects that are used simply to - * group values such as this aggregate. The getters/setters are there to - * satisfy the superclass interface. - */ -class ParserRuleContext extends RuleContext { - constructor(parent, invokingStateNumber) { - parent = parent || null; - invokingStateNumber = invokingStateNumber || null; - super(parent, invokingStateNumber); - this.ruleIndex = -1; - /** - * If we are debugging or building a parse tree for a visitor, - * we need to track all of the tokens and rule invocations associated - * with this rule's context. This is empty for parsing w/o tree constr. - * operation because we don't the need to track the details about - * how we parse this rule. - */ - this.children = null; - this.start = null; - this.stop = null; - /** - * The exception that forced this rule to return. If the rule successfully - * completed, this is {@code null}. - */ - this.exception = null; - } - - // COPY a ctx (I'm deliberately not using copy constructor) - copyFrom(ctx) { - // from RuleContext - this.parentCtx = ctx.parentCtx; - this.invokingState = ctx.invokingState; - this.children = null; - this.start = ctx.start; - this.stop = ctx.stop; - // copy any error nodes to alt label node - if(ctx.children) { - this.children = []; - // reset parent pointer for any error nodes - ctx.children.map(function(child) { - if (child instanceof ErrorNodeImpl) { - this.children.push(child); - child.parentCtx = this; - } - }, this); - } - } - - // Double dispatch methods for listeners - enterRule(listener) { - } - - exitRule(listener) { - } - - // Does not set parent link; other add methods do that - addChild(child) { - if (this.children === null) { - this.children = []; - } - this.children.push(child); - return child; - } - - /** Used by enterOuterAlt to toss out a RuleContext previously added as - * we entered a rule. If we have // label, we will need to remove - * generic ruleContext object. - */ - removeLastChild() { - if (this.children !== null) { - this.children.pop(); - } - } - - addTokenNode(token) { - const node = new TerminalNodeImpl(token); - this.addChild(node); - node.parentCtx = this; - return node; - } - - addErrorNode(badToken) { - const node = new ErrorNodeImpl(badToken); - this.addChild(node); - node.parentCtx = this; - return node; - } - - getChild(i, type) { - type = type || null; - if (this.children === null || i < 0 || i >= this.children.length) { - return null; - } - if (type === null) { - return this.children[i]; - } else { - for(let j=0; j= this.children.length) { - return null; - } - for(let j=0; j - * private int referenceHashCode() { - * int hash = {@link MurmurHash//initialize MurmurHash.initialize}({@link - * //INITIAL_HASH}); - * - * for (int i = 0; i < {@link //size()}; i++) { - * hash = {@link MurmurHash//update MurmurHash.update}(hash, {@link //getParent - * getParent}(i)); - * } - * - * for (int i = 0; i < {@link //size()}; i++) { - * hash = {@link MurmurHash//update MurmurHash.update}(hash, {@link - * //getReturnState getReturnState}(i)); - * } - * - * hash = {@link MurmurHash//finish MurmurHash.finish}(hash, 2// {@link - * //size()}); - * return hash; - * } - * - * This means only the {@link //EMPTY} context is in set. - */ - isEmpty() { - return this === PredictionContext.EMPTY; - } - - hasEmptyPath() { - return this.getReturnState(this.length - 1) === PredictionContext.EMPTY_RETURN_STATE; - } - - hashCode() { - return this.cachedHashCode; - } - - updateHashCode(hash) { - hash.update(this.cachedHashCode); - } -} - -/** - * Represents {@code $} in local context prediction, which means wildcard. - * {@code//+x =//}. - */ -PredictionContext.EMPTY = null; - -/** - * Represents {@code $} in an array in full context mode, when {@code $} - * doesn't mean wildcard: {@code $ + x = [$,x]}. Here, - * {@code $} = {@link //EMPTY_RETURN_STATE}. - */ -PredictionContext.EMPTY_RETURN_STATE = 0x7FFFFFFF; - -PredictionContext.globalNodeCount = 1; -PredictionContext.id = PredictionContext.globalNodeCount; - - -/* -function calculateHashString(parent, returnState) { - return "" + parent + returnState; -} -*/ - -/** - * Used to cache {@link PredictionContext} objects. Its used for the shared - * context cash associated with contexts in DFA states. This cache - * can be used for both lexers and parsers. - */ -class PredictionContextCache { - - constructor() { - this.cache = new Map(); - } - - /** - * Add a context to the cache and return it. If the context already exists, - * return that one instead and do not add a new context to the cache. - * Protect shared cache from unsafe thread access. - */ - add(ctx) { - if (ctx === PredictionContext.EMPTY) { - return PredictionContext.EMPTY; - } - const existing = this.cache.get(ctx) || null; - if (existing !== null) { - return existing; - } - this.cache.put(ctx, ctx); - return ctx; - } - - get(ctx) { - return this.cache.get(ctx) || null; - } - - get length(){ - return this.cache.length; - } -} - - -class SingletonPredictionContext extends PredictionContext { - - constructor(parent, returnState) { - let hashCode = 0; - const hash = new Hash(); - if(parent !== null) { - hash.update(parent, returnState); - } else { - hash.update(1); - } - hashCode = hash.finish(); - super(hashCode); - this.parentCtx = parent; - this.returnState = returnState; - } - - getParent(index) { - return this.parentCtx; - } - - getReturnState(index) { - return this.returnState; - } - - equals(other) { - if (this === other) { - return true; - } else if (!(other instanceof SingletonPredictionContext)) { - return false; - } else if (this.hashCode() !== other.hashCode()) { - return false; // can't be same if hash is different - } else { - if(this.returnState !== other.returnState) - return false; - else if(this.parentCtx==null) - return other.parentCtx==null - else - return this.parentCtx.equals(other.parentCtx); - } - } - - toString() { - const up = this.parentCtx === null ? "" : this.parentCtx.toString(); - if (up.length === 0) { - if (this.returnState === PredictionContext.EMPTY_RETURN_STATE) { - return "$"; - } else { - return "" + this.returnState; - } - } else { - return "" + this.returnState + " " + up; - } - } - - get length(){ - return 1; - } - - static create(parent, returnState) { - if (returnState === PredictionContext.EMPTY_RETURN_STATE && parent === null) { - // someone can pass in the bits of an array ctx that mean $ - return PredictionContext.EMPTY; - } else { - return new SingletonPredictionContext(parent, returnState); - } - } -} - -class EmptyPredictionContext extends SingletonPredictionContext { - - constructor() { - super(null, PredictionContext.EMPTY_RETURN_STATE); - } - - isEmpty() { - return true; - } - - getParent(index) { - return null; - } - - getReturnState(index) { - return this.returnState; - } - - equals(other) { - return this === other; - } - - toString() { - return "$"; - } -} - - -PredictionContext.EMPTY = new EmptyPredictionContext(); - -class ArrayPredictionContext extends PredictionContext { - - constructor(parents, returnStates) { - /** - * Parent can be null only if full ctx mode and we make an array - * from {@link //EMPTY} and non-empty. We merge {@link //EMPTY} by using - * null parent and - * returnState == {@link //EMPTY_RETURN_STATE}. - */ - const h = new Hash(); - h.update(parents, returnStates); - const hashCode = h.finish(); - super(hashCode); - this.parents = parents; - this.returnStates = returnStates; - return this; - } - - isEmpty() { - // since EMPTY_RETURN_STATE can only appear in the last position, we - // don't need to verify that size==1 - return this.returnStates[0] === PredictionContext.EMPTY_RETURN_STATE; - } - - getParent(index) { - return this.parents[index]; - } - - getReturnState(index) { - return this.returnStates[index]; - } - - equals(other) { - if (this === other) { - return true; - } else if (!(other instanceof ArrayPredictionContext)) { - return false; - } else if (this.hashCode() !== other.hashCode()) { - return false; // can't be same if hash is different - } else { - return equalArrays(this.returnStates, other.returnStates) && - equalArrays(this.parents, other.parents); - } - } - - toString() { - if (this.isEmpty()) { - return "[]"; - } else { - let s = "["; - for (let i = 0; i < this.returnStates.length; i++) { - if (i > 0) { - s = s + ", "; - } - if (this.returnStates[i] === PredictionContext.EMPTY_RETURN_STATE) { - s = s + "$"; - continue; - } - s = s + this.returnStates[i]; - if (this.parents[i] !== null) { - s = s + " " + this.parents[i]; - } else { - s = s + "null"; - } - } - return s + "]"; - } - } - - get length(){ - return this.returnStates.length; - } -} - - -/** - * Convert a {@link RuleContext} tree to a {@link PredictionContext} graph. - * Return {@link //EMPTY} if {@code outerContext} is empty or null. - */ -function predictionContextFromRuleContext(atn, outerContext) { - if (outerContext === undefined || outerContext === null) { - outerContext = RuleContext.EMPTY; - } - // if we are in RuleContext of start rule, s, then PredictionContext - // is EMPTY. Nobody called us. (if we are empty, return empty) - if (outerContext.parentCtx === null || outerContext === RuleContext.EMPTY) { - return PredictionContext.EMPTY; - } - // If we have a parent, convert it to a PredictionContext graph - const parent = predictionContextFromRuleContext(atn, outerContext.parentCtx); - const state = atn.states[outerContext.invokingState]; - const transition = state.transitions[0]; - return SingletonPredictionContext.create(parent, transition.followState.stateNumber); -} -/* -function calculateListsHashString(parents, returnStates) { - const s = ""; - parents.map(function(p) { - s = s + p; - }); - returnStates.map(function(r) { - s = s + r; - }); - return s; -} -*/ -function merge(a, b, rootIsWildcard, mergeCache) { - // share same graph if both same - if (a === b) { - return a; - } - if (a instanceof SingletonPredictionContext && b instanceof SingletonPredictionContext) { - return mergeSingletons(a, b, rootIsWildcard, mergeCache); - } - // At least one of a or b is array - // If one is $ and rootIsWildcard, return $ as// wildcard - if (rootIsWildcard) { - if (a instanceof EmptyPredictionContext) { - return a; - } - if (b instanceof EmptyPredictionContext) { - return b; - } - } - // convert singleton so both are arrays to normalize - if (a instanceof SingletonPredictionContext) { - a = new ArrayPredictionContext([a.getParent()], [a.returnState]); - } - if (b instanceof SingletonPredictionContext) { - b = new ArrayPredictionContext([b.getParent()], [b.returnState]); - } - return mergeArrays(a, b, rootIsWildcard, mergeCache); -} - -/** - * Merge two {@link SingletonPredictionContext} instances. - * - *

      Stack tops equal, parents merge is same; return left graph.
      - *

      - * - *

      Same stack top, parents differ; merge parents giving array node, then - * remainders of those graphs. A new root node is created to point to the - * merged parents.
      - *

      - * - *

      Different stack tops pointing to same parent. Make array node for the - * root where both element in the root point to the same (original) - * parent.
      - *

      - * - *

      Different stack tops pointing to different parents. Make array node for - * the root where each element points to the corresponding original - * parent.
      - *

      - * - * @param a the first {@link SingletonPredictionContext} - * @param b the second {@link SingletonPredictionContext} - * @param rootIsWildcard {@code true} if this is a local-context merge, - * otherwise false to indicate a full-context merge - * @param mergeCache - */ -function mergeSingletons(a, b, rootIsWildcard, mergeCache) { - if (mergeCache !== null) { - let previous = mergeCache.get(a, b); - if (previous !== null) { - return previous; - } - previous = mergeCache.get(b, a); - if (previous !== null) { - return previous; - } - } - - const rootMerge = mergeRoot(a, b, rootIsWildcard); - if (rootMerge !== null) { - if (mergeCache !== null) { - mergeCache.set(a, b, rootMerge); - } - return rootMerge; - } - if (a.returnState === b.returnState) { - const parent = merge(a.parentCtx, b.parentCtx, rootIsWildcard, mergeCache); - // if parent is same as existing a or b parent or reduced to a parent, - // return it - if (parent === a.parentCtx) { - return a; // ax + bx = ax, if a=b - } - if (parent === b.parentCtx) { - return b; // ax + bx = bx, if a=b - } - // else: ax + ay = a'[x,y] - // merge parents x and y, giving array node with x,y then remainders - // of those graphs. dup a, a' points at merged array - // new joined parent so create new singleton pointing to it, a' - const spc = SingletonPredictionContext.create(parent, a.returnState); - if (mergeCache !== null) { - mergeCache.set(a, b, spc); - } - return spc; - } else { // a != b payloads differ - // see if we can collapse parents due to $+x parents if local ctx - let singleParent = null; - if (a === b || (a.parentCtx !== null && a.parentCtx === b.parentCtx)) { // ax + - // bx = - // [a,b]x - singleParent = a.parentCtx; - } - if (singleParent !== null) { // parents are same - // sort payloads and use same parent - const payloads = [ a.returnState, b.returnState ]; - if (a.returnState > b.returnState) { - payloads[0] = b.returnState; - payloads[1] = a.returnState; - } - const parents = [ singleParent, singleParent ]; - const apc = new ArrayPredictionContext(parents, payloads); - if (mergeCache !== null) { - mergeCache.set(a, b, apc); - } - return apc; - } - // parents differ and can't merge them. Just pack together - // into array; can't merge. - // ax + by = [ax,by] - const payloads = [ a.returnState, b.returnState ]; - let parents = [ a.parentCtx, b.parentCtx ]; - if (a.returnState > b.returnState) { // sort by payload - payloads[0] = b.returnState; - payloads[1] = a.returnState; - parents = [ b.parentCtx, a.parentCtx ]; - } - const a_ = new ArrayPredictionContext(parents, payloads); - if (mergeCache !== null) { - mergeCache.set(a, b, a_); - } - return a_; - } -} - -/** - * Handle case where at least one of {@code a} or {@code b} is - * {@link //EMPTY}. In the following diagrams, the symbol {@code $} is used - * to represent {@link //EMPTY}. - * - *

      Local-Context Merges

      - * - *

      These local-context merge operations are used when {@code rootIsWildcard} - * is true.

      - * - *

      {@link //EMPTY} is superset of any graph; return {@link //EMPTY}.
      - *

      - * - *

      {@link //EMPTY} and anything is {@code //EMPTY}, so merged parent is - * {@code //EMPTY}; return left graph.
      - *

      - * - *

      Special case of last merge if local context.
      - *

      - * - *

      Full-Context Merges

      - * - *

      These full-context merge operations are used when {@code rootIsWildcard} - * is false.

      - * - *

      - * - *

      Must keep all contexts; {@link //EMPTY} in array is a special value (and - * null parent).
      - *

      - * - *

      - * - * @param a the first {@link SingletonPredictionContext} - * @param b the second {@link SingletonPredictionContext} - * @param rootIsWildcard {@code true} if this is a local-context merge, - * otherwise false to indicate a full-context merge - */ -function mergeRoot(a, b, rootIsWildcard) { - if (rootIsWildcard) { - if (a === PredictionContext.EMPTY) { - return PredictionContext.EMPTY; // // + b =// - } - if (b === PredictionContext.EMPTY) { - return PredictionContext.EMPTY; // a +// =// - } - } else { - if (a === PredictionContext.EMPTY && b === PredictionContext.EMPTY) { - return PredictionContext.EMPTY; // $ + $ = $ - } else if (a === PredictionContext.EMPTY) { // $ + x = [$,x] - const payloads = [ b.returnState, - PredictionContext.EMPTY_RETURN_STATE ]; - const parents = [ b.parentCtx, null ]; - return new ArrayPredictionContext(parents, payloads); - } else if (b === PredictionContext.EMPTY) { // x + $ = [$,x] ($ is always first if present) - const payloads = [ a.returnState, PredictionContext.EMPTY_RETURN_STATE ]; - const parents = [ a.parentCtx, null ]; - return new ArrayPredictionContext(parents, payloads); - } - } - return null; -} - -/** - * Merge two {@link ArrayPredictionContext} instances. - * - *

      Different tops, different parents.
      - *

      - * - *

      Shared top, same parents.
      - *

      - * - *

      Shared top, different parents.
      - *

      - * - *

      Shared top, all shared parents.
      - *

      - * - *

      Equal tops, merge parents and reduce top to - * {@link SingletonPredictionContext}.
      - *

      - */ -function mergeArrays(a, b, rootIsWildcard, mergeCache) { - if (mergeCache !== null) { - let previous = mergeCache.get(a, b); - if (previous !== null) { - return previous; - } - previous = mergeCache.get(b, a); - if (previous !== null) { - return previous; - } - } - // merge sorted payloads a + b => M - let i = 0; // walks a - let j = 0; // walks b - let k = 0; // walks target M array - - let mergedReturnStates = []; - let mergedParents = []; - // walk and merge to yield mergedParents, mergedReturnStates - while (i < a.returnStates.length && j < b.returnStates.length) { - const a_parent = a.parents[i]; - const b_parent = b.parents[j]; - if (a.returnStates[i] === b.returnStates[j]) { - // same payload (stack tops are equal), must yield merged singleton - const payload = a.returnStates[i]; - // $+$ = $ - const bothDollars = payload === PredictionContext.EMPTY_RETURN_STATE && - a_parent === null && b_parent === null; - const ax_ax = (a_parent !== null && b_parent !== null && a_parent === b_parent); // ax+ax - // -> - // ax - if (bothDollars || ax_ax) { - mergedParents[k] = a_parent; // choose left - mergedReturnStates[k] = payload; - } else { // ax+ay -> a'[x,y] - mergedParents[k] = merge(a_parent, b_parent, rootIsWildcard, mergeCache); - mergedReturnStates[k] = payload; - } - i += 1; // hop over left one as usual - j += 1; // but also skip one in right side since we merge - } else if (a.returnStates[i] < b.returnStates[j]) { // copy a[i] to M - mergedParents[k] = a_parent; - mergedReturnStates[k] = a.returnStates[i]; - i += 1; - } else { // b > a, copy b[j] to M - mergedParents[k] = b_parent; - mergedReturnStates[k] = b.returnStates[j]; - j += 1; - } - k += 1; - } - // copy over any payloads remaining in either array - if (i < a.returnStates.length) { - for (let p = i; p < a.returnStates.length; p++) { - mergedParents[k] = a.parents[p]; - mergedReturnStates[k] = a.returnStates[p]; - k += 1; - } - } else { - for (let p = j; p < b.returnStates.length; p++) { - mergedParents[k] = b.parents[p]; - mergedReturnStates[k] = b.returnStates[p]; - k += 1; - } - } - // trim merged if we combined a few that had same stack tops - if (k < mergedParents.length) { // write index < last position; trim - if (k === 1) { // for just one merged element, return singleton top - const a_ = SingletonPredictionContext.create(mergedParents[0], - mergedReturnStates[0]); - if (mergeCache !== null) { - mergeCache.set(a, b, a_); - } - return a_; - } - mergedParents = mergedParents.slice(0, k); - mergedReturnStates = mergedReturnStates.slice(0, k); - } - - const M = new ArrayPredictionContext(mergedParents, mergedReturnStates); - - // if we created same array as a or b, return that instead - // TODO: track whether this is possible above during merge sort for speed - if (M === a) { - if (mergeCache !== null) { - mergeCache.set(a, b, a); - } - return a; - } - if (M === b) { - if (mergeCache !== null) { - mergeCache.set(a, b, b); - } - return b; - } - combineCommonParents(mergedParents); - - if (mergeCache !== null) { - mergeCache.set(a, b, M); - } - return M; -} - -/** - * Make pass over all M {@code parents}; merge any {@code equals()} - * ones. - */ -function combineCommonParents(parents) { - const uniqueParents = new Map(); - - for (let p = 0; p < parents.length; p++) { - const parent = parents[p]; - if (!(uniqueParents.containsKey(parent))) { - uniqueParents.put(parent, parent); - } - } - for (let q = 0; q < parents.length; q++) { - parents[q] = uniqueParents.get(parents[q]); - } -} - -function getCachedPredictionContext(context, contextCache, visited) { - if (context.isEmpty()) { - return context; - } - let existing = visited.get(context) || null; - if (existing !== null) { - return existing; - } - existing = contextCache.get(context); - if (existing !== null) { - visited.put(context, existing); - return existing; - } - let changed = false; - let parents = []; - for (let i = 0; i < parents.length; i++) { - const parent = getCachedPredictionContext(context.getParent(i), contextCache, visited); - if (changed || parent !== context.getParent(i)) { - if (!changed) { - parents = []; - for (let j = 0; j < context.length; j++) { - parents[j] = context.getParent(j); - } - changed = true; - } - parents[i] = parent; - } - } - if (!changed) { - contextCache.add(context); - visited.put(context, context); - return context; - } - let updated = null; - if (parents.length === 0) { - updated = PredictionContext.EMPTY; - } else if (parents.length === 1) { - updated = SingletonPredictionContext.create(parents[0], context - .getReturnState(0)); - } else { - updated = new ArrayPredictionContext(parents, context.returnStates); - } - contextCache.add(updated); - visited.put(updated, updated); - visited.put(context, updated); - - return updated; -} - -// ter's recursive version of Sam's getAllNodes() -function getAllContextNodes(context, nodes, visited) { - if (nodes === null) { - nodes = []; - return getAllContextNodes(context, nodes, visited); - } else if (visited === null) { - visited = new Map(); - return getAllContextNodes(context, nodes, visited); - } else { - if (context === null || visited.containsKey(context)) { - return nodes; - } - visited.put(context, context); - nodes.push(context); - for (let i = 0; i < context.length; i++) { - getAllContextNodes(context.getParent(i), nodes, visited); - } - return nodes; - } -} - -module.exports = { - merge, - PredictionContext, - PredictionContextCache, - SingletonPredictionContext, - predictionContextFromRuleContext, - getCachedPredictionContext -} diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/Recognizer.js b/reverse_engineering/node_modules/antlr4/src/antlr4/Recognizer.js deleted file mode 100644 index 0a93402..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/Recognizer.js +++ /dev/null @@ -1,157 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const {Token} = require('./Token'); -const {ConsoleErrorListener} = require('./error/ErrorListener'); -const {ProxyErrorListener} = require('./error/ErrorListener'); - -class Recognizer { - constructor() { - this._listeners = [ ConsoleErrorListener.INSTANCE ]; - this._interp = null; - this._stateNumber = -1; - } - - checkVersion(toolVersion) { - const runtimeVersion = "4.9.3"; - if (runtimeVersion!==toolVersion) { - console.log("ANTLR runtime and generated code versions disagree: "+runtimeVersion+"!="+toolVersion); - } - } - - addErrorListener(listener) { - this._listeners.push(listener); - } - - removeErrorListeners() { - this._listeners = []; - } - - getLiteralNames() { - return Object.getPrototypeOf(this).constructor.literalNames || []; - } - - getSymbolicNames() { - return Object.getPrototypeOf(this).constructor.symbolicNames || []; - } - - getTokenNames() { - if(!this.tokenNames) { - const literalNames = this.getLiteralNames(); - const symbolicNames = this.getSymbolicNames(); - const length = literalNames.length > symbolicNames.length ? literalNames.length : symbolicNames.length; - this.tokenNames = []; - for(let i=0; iUsed for XPath and tree pattern compilation.

      - */ - getRuleIndexMap() { - const ruleNames = this.ruleNames; - if (ruleNames===null) { - throw("The current recognizer does not provide a list of rule names."); - } - let result = this.ruleIndexMapCache[ruleNames]; // todo: should it be Recognizer.ruleIndexMapCache ? - if(result===undefined) { - result = ruleNames.reduce(function(o, k, i) { o[k] = i; }); - this.ruleIndexMapCache[ruleNames] = result; - } - return result; - } - - getTokenType(tokenName) { - const ttype = this.getTokenTypeMap()[tokenName]; - if (ttype !==undefined) { - return ttype; - } else { - return Token.INVALID_TYPE; - } - } - - // What is the error header, normally line/character position information? - getErrorHeader(e) { - const line = e.getOffendingToken().line; - const column = e.getOffendingToken().column; - return "line " + line + ":" + column; - } - - /** - * How should a token be displayed in an error message? The default - * is to display just the text, but during development you might - * want to have a lot of information spit out. Override in that case - * to use t.toString() (which, for CommonToken, dumps everything about - * the token). This is better than forcing you to override a method in - * your token objects because you don't have to go modify your lexer - * so that it creates a new Java type. - * - * @deprecated This method is not called by the ANTLR 4 Runtime. Specific - * implementations of {@link ANTLRErrorStrategy} may provide a similar - * feature when necessary. For example, see - * {@link DefaultErrorStrategy//getTokenErrorDisplay}.*/ - getTokenErrorDisplay(t) { - if (t===null) { - return ""; - } - let s = t.text; - if (s===null) { - if (t.type===Token.EOF) { - s = ""; - } else { - s = "<" + t.type + ">"; - } - } - s = s.replace("\n","\\n").replace("\r","\\r").replace("\t","\\t"); - return "'" + s + "'"; - } - - getErrorListenerDispatch() { - return new ProxyErrorListener(this._listeners); - } - - /** - * subclass needs to override these if there are sempreds or actions - * that the ATN interp needs to execute - */ - sempred(localctx, ruleIndex, actionIndex) { - return true; - } - - precpred(localctx , precedence) { - return true; - } - - get state(){ - return this._stateNumber; - } - - set state(state) { - this._stateNumber = state; - } -} - -Recognizer.tokenTypeMapCache = {}; -Recognizer.ruleIndexMapCache = {}; - -module.exports = Recognizer; diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/RuleContext.js b/reverse_engineering/node_modules/antlr4/src/antlr4/RuleContext.js deleted file mode 100644 index f18355e..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/RuleContext.js +++ /dev/null @@ -1,160 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const {RuleNode} = require('./tree/Tree'); -const {INVALID_INTERVAL} = require('./tree/Tree'); -const Trees = require('./tree/Trees'); - -class RuleContext extends RuleNode { - /** A rule context is a record of a single rule invocation. It knows - * which context invoked it, if any. If there is no parent context, then - * naturally the invoking state is not valid. The parent link - * provides a chain upwards from the current rule invocation to the root - * of the invocation tree, forming a stack. We actually carry no - * information about the rule associated with this context (except - * when parsing). We keep only the state number of the invoking state from - * the ATN submachine that invoked this. Contrast this with the s - * pointer inside ParserRuleContext that tracks the current state - * being "executed" for the current rule. - * - * The parent contexts are useful for computing lookahead sets and - * getting error information. - * - * These objects are used during parsing and prediction. - * For the special case of parsers, we use the subclass - * ParserRuleContext. - * - * @see ParserRuleContext - */ - constructor(parent, invokingState) { - // What context invoked this rule? - super(); - this.parentCtx = parent || null; - /** - * What state invoked the rule associated with this context? - * The "return address" is the followState of invokingState - * If parent is null, this should be -1. - */ - this.invokingState = invokingState || -1; - } - - depth() { - let n = 0; - let p = this; - while (p !== null) { - p = p.parentCtx; - n += 1; - } - return n; - } - - /** - * A context is empty if there is no invoking state; meaning nobody call - * current context. - */ - isEmpty() { - return this.invokingState === -1; - } - -// satisfy the ParseTree / SyntaxTree interface - getSourceInterval() { - return INVALID_INTERVAL; - } - - getRuleContext() { - return this; - } - - getPayload() { - return this; - } - - /** - * Return the combined text of all child nodes. This method only considers - * tokens which have been added to the parse tree. - *

      - * Since tokens on hidden channels (e.g. whitespace or comments) are not - * added to the parse trees, they will not appear in the output of this - * method. - */ - getText() { - if (this.getChildCount() === 0) { - return ""; - } else { - return this.children.map(function(child) { - return child.getText(); - }).join(""); - } - } - - /** - * For rule associated with this parse tree internal node, return - * the outer alternative number used to match the input. Default - * implementation does not compute nor store this alt num. Create - * a subclass of ParserRuleContext with backing field and set - * option contextSuperClass. - * to set it. - */ - getAltNumber() { - // use constant value of ATN.INVALID_ALT_NUMBER to avoid circular dependency - return 0; - } - - /** - * Set the outer alternative number for this context node. Default - * implementation does nothing to avoid backing field overhead for - * trees that don't need it. Create - * a subclass of ParserRuleContext with backing field and set - * option contextSuperClass. - */ - setAltNumber(altNumber) { } - - getChild(i) { - return null; - } - - getChildCount() { - return 0; - } - - accept(visitor) { - return visitor.visitChildren(this); - } - - /** - * Print out a whole tree, not just a node, in LISP format - * (root child1 .. childN). Print just a node if this is a leaf. - */ - toStringTree(ruleNames, recog) { - return Trees.toStringTree(this, ruleNames, recog); - } - - toString(ruleNames, stop) { - ruleNames = ruleNames || null; - stop = stop || null; - let p = this; - let s = "["; - while (p !== null && p !== stop) { - if (ruleNames === null) { - if (!p.isEmpty()) { - s += p.invokingState; - } - } else { - const ri = p.ruleIndex; - const ruleName = (ri >= 0 && ri < ruleNames.length) ? ruleNames[ri] - : "" + ri; - s += ruleName; - } - if (p.parentCtx !== null && (ruleNames !== null || !p.parentCtx.isEmpty())) { - s += " "; - } - p = p.parentCtx; - } - s += "]"; - return s; - } -} - -module.exports = RuleContext; diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/Token.js b/reverse_engineering/node_modules/antlr4/src/antlr4/Token.js deleted file mode 100644 index e52c225..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/Token.js +++ /dev/null @@ -1,149 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -/** - * A token has properties: text, type, line, character position in the line - * (so we can ignore tabs), token channel, index, and source from which - * we obtained this token. - */ -class Token { - constructor() { - this.source = null; - this.type = null; // token type of the token - this.channel = null; // The parser ignores everything not on DEFAULT_CHANNEL - this.start = null; // optional; return -1 if not implemented. - this.stop = null; // optional; return -1 if not implemented. - this.tokenIndex = null; // from 0..n-1 of the token object in the input stream - this.line = null; // line=1..n of the 1st character - this.column = null; // beginning of the line at which it occurs, 0..n-1 - this._text = null; // text of the token. - } - - getTokenSource() { - return this.source[0]; - } - - getInputStream() { - return this.source[1]; - } - - get text(){ - return this._text; - } - - set text(text) { - this._text = text; - } -} - -Token.INVALID_TYPE = 0; - -/** - * During lookahead operations, this "token" signifies we hit rule end ATN state - * and did not follow it despite needing to. - */ -Token.EPSILON = -2; - -Token.MIN_USER_TOKEN_TYPE = 1; - -Token.EOF = -1; - -/** - * All tokens go to the parser (unless skip() is called in that rule) - * on a particular "channel". The parser tunes to a particular channel - * so that whitespace etc... can go to the parser on a "hidden" channel. - */ -Token.DEFAULT_CHANNEL = 0; - -/** - * Anything on different channel than DEFAULT_CHANNEL is not parsed - * by parser. - */ -Token.HIDDEN_CHANNEL = 1; - - -class CommonToken extends Token { - constructor(source, type, channel, start, stop) { - super(); - this.source = source !== undefined ? source : CommonToken.EMPTY_SOURCE; - this.type = type !== undefined ? type : null; - this.channel = channel !== undefined ? channel : Token.DEFAULT_CHANNEL; - this.start = start !== undefined ? start : -1; - this.stop = stop !== undefined ? stop : -1; - this.tokenIndex = -1; - if (this.source[0] !== null) { - this.line = source[0].line; - this.column = source[0].column; - } else { - this.column = -1; - } - } - - /** - * Constructs a new {@link CommonToken} as a copy of another {@link Token}. - * - *

      - * If {@code oldToken} is also a {@link CommonToken} instance, the newly - * constructed token will share a reference to the {@link //text} field and - * the {@link Pair} stored in {@link //source}. Otherwise, {@link //text} will - * be assigned the result of calling {@link //getText}, and {@link //source} - * will be constructed from the result of {@link Token//getTokenSource} and - * {@link Token//getInputStream}.

      - * - * @param oldToken The token to copy. - */ - clone() { - const t = new CommonToken(this.source, this.type, this.channel, this.start, this.stop); - t.tokenIndex = this.tokenIndex; - t.line = this.line; - t.column = this.column; - t.text = this.text; - return t; - } - - toString() { - let txt = this.text; - if (txt !== null) { - txt = txt.replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/\t/g, "\\t"); - } else { - txt = ""; - } - return "[@" + this.tokenIndex + "," + this.start + ":" + this.stop + "='" + - txt + "',<" + this.type + ">" + - (this.channel > 0 ? ",channel=" + this.channel : "") + "," + - this.line + ":" + this.column + "]"; - } - - get text(){ - if (this._text !== null) { - return this._text; - } - const input = this.getInputStream(); - if (input === null) { - return null; - } - const n = input.size; - if (this.start < n && this.stop < n) { - return input.getText(this.start, this.stop); - } else { - return ""; - } - } - - set text(text) { - this._text = text; - } -} - -/** - * An empty {@link Pair} which is used as the default value of - * {@link //source} for tokens that do not have a source. - */ -CommonToken.EMPTY_SOURCE = [ null, null ]; - -module.exports = { - Token, - CommonToken -} diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/Utils.js b/reverse_engineering/node_modules/antlr4/src/antlr4/Utils.js deleted file mode 100644 index 9ff166e..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/Utils.js +++ /dev/null @@ -1,455 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -function valueToString(v) { - return v === null ? "null" : v; -} - -function arrayToString(a) { - return Array.isArray(a) ? ("[" + a.map(valueToString).join(", ") + "]") : "null"; -} - -String.prototype.seed = String.prototype.seed || Math.round(Math.random() * Math.pow(2, 32)); - -String.prototype.hashCode = function () { - const key = this.toString(); - let h1b, k1; - - const remainder = key.length & 3; // key.length % 4 - const bytes = key.length - remainder; - let h1 = String.prototype.seed; - const c1 = 0xcc9e2d51; - const c2 = 0x1b873593; - let i = 0; - - while (i < bytes) { - k1 = - ((key.charCodeAt(i) & 0xff)) | - ((key.charCodeAt(++i) & 0xff) << 8) | - ((key.charCodeAt(++i) & 0xff) << 16) | - ((key.charCodeAt(++i) & 0xff) << 24); - ++i; - - k1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff; - k1 = (k1 << 15) | (k1 >>> 17); - k1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff; - - h1 ^= k1; - h1 = (h1 << 13) | (h1 >>> 19); - h1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff; - h1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16)); - } - - k1 = 0; - - switch (remainder) { - case 3: - k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16; - case 2: - k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8; - case 1: - k1 ^= (key.charCodeAt(i) & 0xff); - - k1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff; - k1 = (k1 << 15) | (k1 >>> 17); - k1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff; - h1 ^= k1; - } - - h1 ^= key.length; - - h1 ^= h1 >>> 16; - h1 = (((h1 & 0xffff) * 0x85ebca6b) + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff; - h1 ^= h1 >>> 13; - h1 = ((((h1 & 0xffff) * 0xc2b2ae35) + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff; - h1 ^= h1 >>> 16; - - return h1 >>> 0; -}; - -function standardEqualsFunction(a, b) { - return a ? a.equals(b) : a==b; -} - -function standardHashCodeFunction(a) { - return a ? a.hashCode() : -1; -} - -class Set { - constructor(hashFunction, equalsFunction) { - this.data = {}; - this.hashFunction = hashFunction || standardHashCodeFunction; - this.equalsFunction = equalsFunction || standardEqualsFunction; - } - - add(value) { - const hash = this.hashFunction(value); - const key = "hash_" + hash; - if (key in this.data) { - const values = this.data[key]; - for (let i = 0; i < values.length; i++) { - if (this.equalsFunction(value, values[i])) { - return values[i]; - } - } - values.push(value); - return value; - } else { - this.data[key] = [value]; - return value; - } - } - - contains(value) { - return this.get(value) != null; - } - - get(value) { - const hash = this.hashFunction(value); - const key = "hash_" + hash; - if (key in this.data) { - const values = this.data[key]; - for (let i = 0; i < values.length; i++) { - if (this.equalsFunction(value, values[i])) { - return values[i]; - } - } - } - return null; - } - - values() { - let l = []; - for (const key in this.data) { - if (key.indexOf("hash_") === 0) { - l = l.concat(this.data[key]); - } - } - return l; - } - - toString() { - return arrayToString(this.values()); - } - - get length(){ - let l = 0; - for (const key in this.data) { - if (key.indexOf("hash_") === 0) { - l = l + this.data[key].length; - } - } - return l; - } -} - - -class BitSet { - constructor() { - this.data = []; - } - - add(value) { - this.data[value] = true; - } - - or(set) { - const bits = this; - Object.keys(set.data).map(function (alt) { - bits.add(alt); - }); - } - - remove(value) { - delete this.data[value]; - } - - contains(value) { - return this.data[value] === true; - } - - values() { - return Object.keys(this.data); - } - - minValue() { - return Math.min.apply(null, this.values()); - } - - hashCode() { - const hash = new Hash(); - hash.update(this.values()); - return hash.finish(); - } - - equals(other) { - if (!(other instanceof BitSet)) { - return false; - } - return this.hashCode() === other.hashCode(); - } - - toString() { - return "{" + this.values().join(", ") + "}"; - } - - get length(){ - return this.values().length; - } -} - - -class Map { - constructor(hashFunction, equalsFunction) { - this.data = {}; - this.hashFunction = hashFunction || standardHashCodeFunction; - this.equalsFunction = equalsFunction || standardEqualsFunction; - } - - put(key, value) { - const hashKey = "hash_" + this.hashFunction(key); - if (hashKey in this.data) { - const entries = this.data[hashKey]; - for (let i = 0; i < entries.length; i++) { - const entry = entries[i]; - if (this.equalsFunction(key, entry.key)) { - const oldValue = entry.value; - entry.value = value; - return oldValue; - } - } - entries.push({key:key, value:value}); - return value; - } else { - this.data[hashKey] = [{key:key, value:value}]; - return value; - } - } - - containsKey(key) { - const hashKey = "hash_" + this.hashFunction(key); - if(hashKey in this.data) { - const entries = this.data[hashKey]; - for (let i = 0; i < entries.length; i++) { - const entry = entries[i]; - if (this.equalsFunction(key, entry.key)) - return true; - } - } - return false; - } - - get(key) { - const hashKey = "hash_" + this.hashFunction(key); - if(hashKey in this.data) { - const entries = this.data[hashKey]; - for (let i = 0; i < entries.length; i++) { - const entry = entries[i]; - if (this.equalsFunction(key, entry.key)) - return entry.value; - } - } - return null; - } - - entries() { - let l = []; - for (const key in this.data) { - if (key.indexOf("hash_") === 0) { - l = l.concat(this.data[key]); - } - } - return l; - } - - getKeys() { - return this.entries().map(function(e) { - return e.key; - }); - } - - getValues() { - return this.entries().map(function(e) { - return e.value; - }); - } - - toString() { - const ss = this.entries().map(function(entry) { - return '{' + entry.key + ':' + entry.value + '}'; - }); - return '[' + ss.join(", ") + ']'; - } - - get length(){ - let l = 0; - for (const hashKey in this.data) { - if (hashKey.indexOf("hash_") === 0) { - l = l + this.data[hashKey].length; - } - } - return l; - } -} - - -class AltDict { - constructor() { - this.data = {}; - } - - get(key) { - key = "k-" + key; - if (key in this.data) { - return this.data[key]; - } else { - return null; - } - } - - put(key, value) { - key = "k-" + key; - this.data[key] = value; - } - - values() { - const data = this.data; - const keys = Object.keys(this.data); - return keys.map(function (key) { - return data[key]; - }); - } -} - - -class DoubleDict { - constructor(defaultMapCtor) { - this.defaultMapCtor = defaultMapCtor || Map; - this.cacheMap = new this.defaultMapCtor(); - } - - get(a, b) { - const d = this.cacheMap.get(a) || null; - return d === null ? null : (d.get(b) || null); - } - - set(a, b, o) { - let d = this.cacheMap.get(a) || null; - if (d === null) { - d = new this.defaultMapCtor(); - this.cacheMap.put(a, d); - } - d.put(b, o); - } -} - -class Hash { - constructor() { - this.count = 0; - this.hash = 0; - } - - update() { - for(let i=0;i>> (32 - 15)); - k = k * 0x1B873593; - this.count = this.count + 1; - let hash = this.hash ^ k; - hash = (hash << 13) | (hash >>> (32 - 13)); - hash = hash * 5 + 0xE6546B64; - this.hash = hash; - } - } - } - - finish() { - let hash = this.hash ^ (this.count * 4); - hash = hash ^ (hash >>> 16); - hash = hash * 0x85EBCA6B; - hash = hash ^ (hash >>> 13); - hash = hash * 0xC2B2AE35; - hash = hash ^ (hash >>> 16); - return hash; - } -} - -function hashStuff() { - const hash = new Hash(); - hash.update.apply(hash, arguments); - return hash.finish(); -} - - -function escapeWhitespace(s, escapeSpaces) { - s = s.replace(/\t/g, "\\t") - .replace(/\n/g, "\\n") - .replace(/\r/g, "\\r"); - if (escapeSpaces) { - s = s.replace(/ /g, "\u00B7"); - } - return s; -} - -function titleCase(str) { - return str.replace(/\w\S*/g, function (txt) { - return txt.charAt(0).toUpperCase() + txt.substr(1); - }); -} - -function equalArrays(a, b) { - if (!Array.isArray(a) || !Array.isArray(b)) - return false; - if (a === b) - return true; - if (a.length !== b.length) - return false; - for (let i = 0; i < a.length; i++) { - if (a[i] === b[i]) - continue; - if (!a[i].equals || !a[i].equals(b[i])) - return false; - } - return true; -} - -module.exports = { - Hash, - Set, - Map, - BitSet, - AltDict, - DoubleDict, - hashStuff, - escapeWhitespace, - arrayToString, - titleCase, - equalArrays -} diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/ATN.js b/reverse_engineering/node_modules/antlr4/src/antlr4/atn/ATN.js deleted file mode 100644 index 6125f4f..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/ATN.js +++ /dev/null @@ -1,156 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const LL1Analyzer = require('./../LL1Analyzer'); -const {IntervalSet} = require('./../IntervalSet'); -const {Token} = require('./../Token'); - -class ATN { - - constructor(grammarType , maxTokenType) { - /** - * Used for runtime deserialization of ATNs from strings - * The type of the ATN. - */ - this.grammarType = grammarType; - // The maximum value for any symbol recognized by a transition in the ATN. - this.maxTokenType = maxTokenType; - this.states = []; - /** - * Each subrule/rule is a decision point and we must track them so we - * can go back later and build DFA predictors for them. This includes - * all the rules, subrules, optional blocks, ()+, ()* etc... - */ - this.decisionToState = []; - // Maps from rule index to starting state number. - this.ruleToStartState = []; - // Maps from rule index to stop state number. - this.ruleToStopState = null; - this.modeNameToStartState = {}; - /** - * For lexer ATNs, this maps the rule index to the resulting token type. - * For parser ATNs, this maps the rule index to the generated bypass token - * type if the {@link ATNDeserializationOptions//isGenerateRuleBypassTransitions} - * deserialization option was specified; otherwise, this is {@code null} - */ - this.ruleToTokenType = null; - /** - * For lexer ATNs, this is an array of {@link LexerAction} objects which may - * be referenced by action transitions in the ATN - */ - this.lexerActions = null; - this.modeToStartState = []; - } - - /** - * Compute the set of valid tokens that can occur starting in state {@code s}. - * If {@code ctx} is null, the set of tokens will not include what can follow - * the rule surrounding {@code s}. In other words, the set will be - * restricted to tokens reachable staying within {@code s}'s rule - */ - nextTokensInContext(s, ctx) { - const anal = new LL1Analyzer(this); - return anal.LOOK(s, null, ctx); - } - - /** - * Compute the set of valid tokens that can occur starting in {@code s} and - * staying in same rule. {@link Token//EPSILON} is in set if we reach end of - * rule - */ - nextTokensNoContext(s) { - if (s.nextTokenWithinRule !== null ) { - return s.nextTokenWithinRule; - } - s.nextTokenWithinRule = this.nextTokensInContext(s, null); - s.nextTokenWithinRule.readOnly = true; - return s.nextTokenWithinRule; - } - - nextTokens(s, ctx) { - if ( ctx===undefined ) { - return this.nextTokensNoContext(s); - } else { - return this.nextTokensInContext(s, ctx); - } - } - - addState(state) { - if ( state !== null ) { - state.atn = this; - state.stateNumber = this.states.length; - } - this.states.push(state); - } - - removeState(state) { - this.states[state.stateNumber] = null; // just free mem, don't shift states in list - } - - defineDecisionState(s) { - this.decisionToState.push(s); - s.decision = this.decisionToState.length-1; - return s.decision; - } - - getDecisionState(decision) { - if (this.decisionToState.length===0) { - return null; - } else { - return this.decisionToState[decision]; - } - } - - /** - * Computes the set of input symbols which could follow ATN state number - * {@code stateNumber} in the specified full {@code context}. This method - * considers the complete parser context, but does not evaluate semantic - * predicates (i.e. all predicates encountered during the calculation are - * assumed true). If a path in the ATN exists from the starting state to the - * {@link RuleStopState} of the outermost context without matching any - * symbols, {@link Token//EOF} is added to the returned set. - * - *

      If {@code context} is {@code null}, it is treated as - * {@link ParserRuleContext//EMPTY}.

      - * - * @param stateNumber the ATN state number - * @param ctx the full parse context - * - * @return {IntervalSet} The set of potentially valid input symbols which could follow the - * specified state in the specified context. - * - * @throws IllegalArgumentException if the ATN does not contain a state with - * number {@code stateNumber} - */ - getExpectedTokens(stateNumber, ctx ) { - if ( stateNumber < 0 || stateNumber >= this.states.length ) { - throw("Invalid state number."); - } - const s = this.states[stateNumber]; - let following = this.nextTokens(s); - if (!following.contains(Token.EPSILON)) { - return following; - } - const expected = new IntervalSet(); - expected.addSet(following); - expected.removeOne(Token.EPSILON); - while (ctx !== null && ctx.invokingState >= 0 && following.contains(Token.EPSILON)) { - const invokingState = this.states[ctx.invokingState]; - const rt = invokingState.transitions[0]; - following = this.nextTokens(rt.followState); - expected.addSet(following); - expected.removeOne(Token.EPSILON); - ctx = ctx.parentCtx; - } - if (following.contains(Token.EPSILON)) { - expected.addOne(Token.EOF); - } - return expected; - } -} - -ATN.INVALID_ALT_NUMBER = 0; - -module.exports = ATN; diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/ATNConfig.js b/reverse_engineering/node_modules/antlr4/src/antlr4/atn/ATNConfig.js deleted file mode 100644 index b5c4f99..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/ATNConfig.js +++ /dev/null @@ -1,172 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const {DecisionState} = require('./ATNState'); -const {SemanticContext} = require('./SemanticContext'); -const {Hash} = require("../Utils"); - - -function checkParams(params, isCfg) { - if(params===null) { - const result = { state:null, alt:null, context:null, semanticContext:null }; - if(isCfg) { - result.reachesIntoOuterContext = 0; - } - return result; - } else { - const props = {}; - props.state = params.state || null; - props.alt = (params.alt === undefined) ? null : params.alt; - props.context = params.context || null; - props.semanticContext = params.semanticContext || null; - if(isCfg) { - props.reachesIntoOuterContext = params.reachesIntoOuterContext || 0; - props.precedenceFilterSuppressed = params.precedenceFilterSuppressed || false; - } - return props; - } -} - -class ATNConfig { - /** - * @param {Object} params A tuple: (ATN state, predicted alt, syntactic, semantic context). - * The syntactic context is a graph-structured stack node whose - * path(s) to the root is the rule invocation(s) - * chain used to arrive at the state. The semantic context is - * the tree of semantic predicates encountered before reaching - * an ATN state - */ - constructor(params, config) { - this.checkContext(params, config); - params = checkParams(params); - config = checkParams(config, true); - // The ATN state associated with this configuration/// - this.state = params.state!==null ? params.state : config.state; - // What alt (or lexer rule) is predicted by this configuration/// - this.alt = params.alt!==null ? params.alt : config.alt; - /** - * The stack of invoking states leading to the rule/states associated - * with this config. We track only those contexts pushed during - * execution of the ATN simulator - */ - this.context = params.context!==null ? params.context : config.context; - this.semanticContext = params.semanticContext!==null ? params.semanticContext : - (config.semanticContext!==null ? config.semanticContext : SemanticContext.NONE); - // TODO: make it a boolean then - /** - * We cannot execute predicates dependent upon local context unless - * we know for sure we are in the correct context. Because there is - * no way to do this efficiently, we simply cannot evaluate - * dependent predicates unless we are in the rule that initially - * invokes the ATN simulator. - * closure() tracks the depth of how far we dip into the - * outer context: depth > 0. Note that it may not be totally - * accurate depth since I don't ever decrement - */ - this.reachesIntoOuterContext = config.reachesIntoOuterContext; - this.precedenceFilterSuppressed = config.precedenceFilterSuppressed; - } - - checkContext(params, config) { - if((params.context===null || params.context===undefined) && - (config===null || config.context===null || config.context===undefined)) { - this.context = null; - } - } - - hashCode() { - const hash = new Hash(); - this.updateHashCode(hash); - return hash.finish(); - } - - updateHashCode(hash) { - hash.update(this.state.stateNumber, this.alt, this.context, this.semanticContext); - } - - /** - * An ATN configuration is equal to another if both have - * the same state, they predict the same alternative, and - * syntactic/semantic contexts are the same - */ - equals(other) { - if (this === other) { - return true; - } else if (! (other instanceof ATNConfig)) { - return false; - } else { - return this.state.stateNumber===other.state.stateNumber && - this.alt===other.alt && - (this.context===null ? other.context===null : this.context.equals(other.context)) && - this.semanticContext.equals(other.semanticContext) && - this.precedenceFilterSuppressed===other.precedenceFilterSuppressed; - } - } - - hashCodeForConfigSet() { - const hash = new Hash(); - hash.update(this.state.stateNumber, this.alt, this.semanticContext); - return hash.finish(); - } - - equalsForConfigSet(other) { - if (this === other) { - return true; - } else if (! (other instanceof ATNConfig)) { - return false; - } else { - return this.state.stateNumber===other.state.stateNumber && - this.alt===other.alt && - this.semanticContext.equals(other.semanticContext); - } - } - - toString() { - return "(" + this.state + "," + this.alt + - (this.context!==null ? ",[" + this.context.toString() + "]" : "") + - (this.semanticContext !== SemanticContext.NONE ? - ("," + this.semanticContext.toString()) - : "") + - (this.reachesIntoOuterContext>0 ? - (",up=" + this.reachesIntoOuterContext) - : "") + ")"; - } -} - - -class LexerATNConfig extends ATNConfig { - constructor(params, config) { - super(params, config); - - // This is the backing field for {@link //getLexerActionExecutor}. - const lexerActionExecutor = params.lexerActionExecutor || null; - this.lexerActionExecutor = lexerActionExecutor || (config!==null ? config.lexerActionExecutor : null); - this.passedThroughNonGreedyDecision = config!==null ? this.checkNonGreedyDecision(config, this.state) : false; - this.hashCodeForConfigSet = LexerATNConfig.prototype.hashCode; - this.equalsForConfigSet = LexerATNConfig.prototype.equals; - return this; - } - - updateHashCode(hash) { - hash.update(this.state.stateNumber, this.alt, this.context, this.semanticContext, this.passedThroughNonGreedyDecision, this.lexerActionExecutor); - } - - equals(other) { - return this === other || - (other instanceof LexerATNConfig && - this.passedThroughNonGreedyDecision === other.passedThroughNonGreedyDecision && - (this.lexerActionExecutor ? this.lexerActionExecutor.equals(other.lexerActionExecutor) : !other.lexerActionExecutor) && - super.equals(other)); - } - - checkNonGreedyDecision(source, target) { - return source.passedThroughNonGreedyDecision || - (target instanceof DecisionState) && target.nonGreedy; - } -} - - -module.exports.ATNConfig = ATNConfig; -module.exports.LexerATNConfig = LexerATNConfig; diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/ATNConfigSet.js b/reverse_engineering/node_modules/antlr4/src/antlr4/atn/ATNConfigSet.js deleted file mode 100644 index 1b5b46e..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/ATNConfigSet.js +++ /dev/null @@ -1,253 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const ATN = require('./ATN'); -const Utils = require('./../Utils'); -const {SemanticContext} = require('./SemanticContext'); -const {merge} = require('./../PredictionContext'); - -function hashATNConfig(c) { - return c.hashCodeForConfigSet(); -} - -function equalATNConfigs(a, b) { - if ( a===b ) { - return true; - } else if ( a===null || b===null ) { - return false; - } else - return a.equalsForConfigSet(b); - } - -/** - * Specialized {@link Set}{@code <}{@link ATNConfig}{@code >} that can track - * info about the set, with support for combining similar configurations using a - * graph-structured stack - */ -class ATNConfigSet { - constructor(fullCtx) { - /** - * The reason that we need this is because we don't want the hash map to use - * the standard hash code and equals. We need all configurations with the - * same - * {@code (s,i,_,semctx)} to be equal. Unfortunately, this key effectively - * doubles - * the number of objects associated with ATNConfigs. The other solution is - * to - * use a hash table that lets us specify the equals/hashcode operation. - * All configs but hashed by (s, i, _, pi) not including context. Wiped out - * when we go readonly as this set becomes a DFA state - */ - this.configLookup = new Utils.Set(hashATNConfig, equalATNConfigs); - /** - * Indicates that this configuration set is part of a full context - * LL prediction. It will be used to determine how to merge $. With SLL - * it's a wildcard whereas it is not for LL context merge - */ - this.fullCtx = fullCtx === undefined ? true : fullCtx; - /** - * Indicates that the set of configurations is read-only. Do not - * allow any code to manipulate the set; DFA states will point at - * the sets and they must not change. This does not protect the other - * fields; in particular, conflictingAlts is set after - * we've made this readonly - */ - this.readOnly = false; - // Track the elements as they are added to the set; supports get(i)/// - this.configs = []; - - // TODO: these fields make me pretty uncomfortable but nice to pack up info - // together, saves recomputation - // TODO: can we track conflicts as they are added to save scanning configs - // later? - this.uniqueAlt = 0; - this.conflictingAlts = null; - - /** - * Used in parser and lexer. In lexer, it indicates we hit a pred - * while computing a closure operation. Don't make a DFA state from this - */ - this.hasSemanticContext = false; - this.dipsIntoOuterContext = false; - - this.cachedHashCode = -1; - } - - /** - * Adding a new config means merging contexts with existing configs for - * {@code (s, i, pi, _)}, where {@code s} is the - * {@link ATNConfig//state}, {@code i} is the {@link ATNConfig//alt}, and - * {@code pi} is the {@link ATNConfig//semanticContext}. We use - * {@code (s,i,pi)} as key. - * - *

      This method updates {@link //dipsIntoOuterContext} and - * {@link //hasSemanticContext} when necessary.

      - */ - add(config, mergeCache) { - if (mergeCache === undefined) { - mergeCache = null; - } - if (this.readOnly) { - throw "This set is readonly"; - } - if (config.semanticContext !== SemanticContext.NONE) { - this.hasSemanticContext = true; - } - if (config.reachesIntoOuterContext > 0) { - this.dipsIntoOuterContext = true; - } - const existing = this.configLookup.add(config); - if (existing === config) { - this.cachedHashCode = -1; - this.configs.push(config); // track order here - return true; - } - // a previous (s,i,pi,_), merge with it and save result - const rootIsWildcard = !this.fullCtx; - const merged = merge(existing.context, config.context, rootIsWildcard, mergeCache); - /** - * no need to check for existing.context, config.context in cache - * since only way to create new graphs is "call rule" and here. We - * cache at both places - */ - existing.reachesIntoOuterContext = Math.max( existing.reachesIntoOuterContext, config.reachesIntoOuterContext); - // make sure to preserve the precedence filter suppression during the merge - if (config.precedenceFilterSuppressed) { - existing.precedenceFilterSuppressed = true; - } - existing.context = merged; // replace context; no need to alt mapping - return true; - } - - getStates() { - const states = new Utils.Set(); - for (let i = 0; i < this.configs.length; i++) { - states.add(this.configs[i].state); - } - return states; - } - - getPredicates() { - const preds = []; - for (let i = 0; i < this.configs.length; i++) { - const c = this.configs[i].semanticContext; - if (c !== SemanticContext.NONE) { - preds.push(c.semanticContext); - } - } - return preds; - } - - optimizeConfigs(interpreter) { - if (this.readOnly) { - throw "This set is readonly"; - } - if (this.configLookup.length === 0) { - return; - } - for (let i = 0; i < this.configs.length; i++) { - const config = this.configs[i]; - config.context = interpreter.getCachedContext(config.context); - } - } - - addAll(coll) { - for (let i = 0; i < coll.length; i++) { - this.add(coll[i]); - } - return false; - } - - equals(other) { - return this === other || - (other instanceof ATNConfigSet && - Utils.equalArrays(this.configs, other.configs) && - this.fullCtx === other.fullCtx && - this.uniqueAlt === other.uniqueAlt && - this.conflictingAlts === other.conflictingAlts && - this.hasSemanticContext === other.hasSemanticContext && - this.dipsIntoOuterContext === other.dipsIntoOuterContext); - } - - hashCode() { - const hash = new Utils.Hash(); - hash.update(this.configs); - return hash.finish(); - } - - updateHashCode(hash) { - if (this.readOnly) { - if (this.cachedHashCode === -1) { - this.cachedHashCode = this.hashCode(); - } - hash.update(this.cachedHashCode); - } else { - hash.update(this.hashCode()); - } - } - - isEmpty() { - return this.configs.length === 0; - } - - contains(item) { - if (this.configLookup === null) { - throw "This method is not implemented for readonly sets."; - } - return this.configLookup.contains(item); - } - - containsFast(item) { - if (this.configLookup === null) { - throw "This method is not implemented for readonly sets."; - } - return this.configLookup.containsFast(item); - } - - clear() { - if (this.readOnly) { - throw "This set is readonly"; - } - this.configs = []; - this.cachedHashCode = -1; - this.configLookup = new Utils.Set(); - } - - setReadonly(readOnly) { - this.readOnly = readOnly; - if (readOnly) { - this.configLookup = null; // can't mod, no need for lookup cache - } - } - - toString() { - return Utils.arrayToString(this.configs) + - (this.hasSemanticContext ? ",hasSemanticContext=" + this.hasSemanticContext : "") + - (this.uniqueAlt !== ATN.INVALID_ALT_NUMBER ? ",uniqueAlt=" + this.uniqueAlt : "") + - (this.conflictingAlts !== null ? ",conflictingAlts=" + this.conflictingAlts : "") + - (this.dipsIntoOuterContext ? ",dipsIntoOuterContext" : ""); - } - - get items(){ - return this.configs; - } - - get length(){ - return this.configs.length; - } -} - - -class OrderedATNConfigSet extends ATNConfigSet { - constructor() { - super(); - this.configLookup = new Utils.Set(); - } -} - -module.exports = { - ATNConfigSet, - OrderedATNConfigSet -} diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/ATNDeserializationOptions.js b/reverse_engineering/node_modules/antlr4/src/antlr4/atn/ATNDeserializationOptions.js deleted file mode 100644 index dc82dc3..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/ATNDeserializationOptions.js +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -class ATNDeserializationOptions { - constructor(copyFrom) { - if(copyFrom===undefined) { - copyFrom = null; - } - this.readOnly = false; - this.verifyATN = copyFrom===null ? true : copyFrom.verifyATN; - this.generateRuleBypassTransitions = copyFrom===null ? false : copyFrom.generateRuleBypassTransitions; - } -} - -ATNDeserializationOptions.defaultOptions = new ATNDeserializationOptions(); -ATNDeserializationOptions.defaultOptions.readOnly = true; - -// def __setattr__(self, key, value): -// if key!="readOnly" and self.readOnly: -// raise Exception("The object is read only.") -// super(type(self), self).__setattr__(key,value) - -module.exports = ATNDeserializationOptions diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/ATNDeserializer.js b/reverse_engineering/node_modules/antlr4/src/antlr4/atn/ATNDeserializer.js deleted file mode 100644 index 64bb575..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/ATNDeserializer.js +++ /dev/null @@ -1,683 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const {Token} = require('./../Token'); -const ATN = require('./ATN'); -const ATNType = require('./ATNType'); - -const { - ATNState, - BasicState, - DecisionState, - BlockStartState, - BlockEndState, - LoopEndState, - RuleStartState, - RuleStopState, - TokensStartState, - PlusLoopbackState, - StarLoopbackState, - StarLoopEntryState, - PlusBlockStartState, - StarBlockStartState, - BasicBlockStartState -} = require('./ATNState'); - -const { - Transition, - AtomTransition, - SetTransition, - NotSetTransition, - RuleTransition, - RangeTransition, - ActionTransition, - EpsilonTransition, - WildcardTransition, - PredicateTransition, - PrecedencePredicateTransition -} = require('./Transition') - -const {IntervalSet} = require('./../IntervalSet'); -const ATNDeserializationOptions = require('./ATNDeserializationOptions'); - -const { - LexerActionType, - LexerSkipAction, - LexerChannelAction, - LexerCustomAction, - LexerMoreAction, - LexerTypeAction, - LexerPushModeAction, - LexerPopModeAction, - LexerModeAction, -} = require('./LexerAction'); - -// This is the earliest supported serialized UUID. -// stick to serialized version for now, we don't need a UUID instance -const BASE_SERIALIZED_UUID = "AADB8D7E-AEEF-4415-AD2B-8204D6CF042E"; - -// -// This UUID indicates the serialized ATN contains two sets of -// IntervalSets, where the second set's values are encoded as -// 32-bit integers to support the full Unicode SMP range up to U+10FFFF. -// -const ADDED_UNICODE_SMP = "59627784-3BE5-417A-B9EB-8131A7286089"; - -// This list contains all of the currently supported UUIDs, ordered by when -// the feature first appeared in this branch. -const SUPPORTED_UUIDS = [ BASE_SERIALIZED_UUID, ADDED_UNICODE_SMP ]; - -const SERIALIZED_VERSION = 3; - -// This is the current serialized UUID. -const SERIALIZED_UUID = ADDED_UNICODE_SMP; - -function initArray( length, value) { - const tmp = []; - tmp[length-1] = value; - return tmp.map(function(i) {return value;}); -} - -class ATNDeserializer { - constructor(options) { - - if ( options=== undefined || options === null ) { - options = ATNDeserializationOptions.defaultOptions; - } - this.deserializationOptions = options; - this.stateFactories = null; - this.actionFactories = null; - } - - /** - * Determines if a particular serialized representation of an ATN supports - * a particular feature, identified by the {@link UUID} used for serializing - * the ATN at the time the feature was first introduced. - * - * @param feature The {@link UUID} marking the first time the feature was - * supported in the serialized ATN. - * @param actualUuid The {@link UUID} of the actual serialized ATN which is - * currently being deserialized. - * @return {@code true} if the {@code actualUuid} value represents a - * serialized ATN at or after the feature identified by {@code feature} was - * introduced; otherwise, {@code false}. - */ - isFeatureSupported(feature, actualUuid) { - const idx1 = SUPPORTED_UUIDS.indexOf(feature); - if (idx1<0) { - return false; - } - const idx2 = SUPPORTED_UUIDS.indexOf(actualUuid); - return idx2 >= idx1; - } - - deserialize(data) { - this.reset(data); - this.checkVersion(); - this.checkUUID(); - const atn = this.readATN(); - this.readStates(atn); - this.readRules(atn); - this.readModes(atn); - const sets = []; - // First, deserialize sets with 16-bit arguments <= U+FFFF. - this.readSets(atn, sets, this.readInt.bind(this)); - // Next, if the ATN was serialized with the Unicode SMP feature, - // deserialize sets with 32-bit arguments <= U+10FFFF. - if (this.isFeatureSupported(ADDED_UNICODE_SMP, this.uuid)) { - this.readSets(atn, sets, this.readInt32.bind(this)); - } - this.readEdges(atn, sets); - this.readDecisions(atn); - this.readLexerActions(atn); - this.markPrecedenceDecisions(atn); - this.verifyATN(atn); - if (this.deserializationOptions.generateRuleBypassTransitions && atn.grammarType === ATNType.PARSER ) { - this.generateRuleBypassTransitions(atn); - // re-verify after modification - this.verifyATN(atn); - } - return atn; - } - - reset(data) { - const adjust = function(c) { - const v = c.charCodeAt(0); - return v>1 ? v-2 : v + 65534; - }; - const temp = data.split("").map(adjust); - // don't adjust the first value since that's the version number - temp[0] = data.charCodeAt(0); - this.data = temp; - this.pos = 0; - } - - checkVersion() { - const version = this.readInt(); - if ( version !== SERIALIZED_VERSION ) { - throw ("Could not deserialize ATN with version " + version + " (expected " + SERIALIZED_VERSION + ")."); - } - } - - checkUUID() { - const uuid = this.readUUID(); - if (SUPPORTED_UUIDS.indexOf(uuid)<0) { - throw ("Could not deserialize ATN with UUID: " + uuid + - " (expected " + SERIALIZED_UUID + " or a legacy UUID).", uuid, SERIALIZED_UUID); - } - this.uuid = uuid; - } - - readATN() { - const grammarType = this.readInt(); - const maxTokenType = this.readInt(); - return new ATN(grammarType, maxTokenType); - } - - readStates(atn) { - let j, pair, stateNumber; - const loopBackStateNumbers = []; - const endStateNumbers = []; - const nstates = this.readInt(); - for(let i=0; i 0) { - bypassStart.addTransition(ruleToStartState.transitions[count-1]); - ruleToStartState.transitions = ruleToStartState.transitions.slice(-1); - } - // link the new states - atn.ruleToStartState[idx].addTransition(new EpsilonTransition(bypassStart)); - bypassStop.addTransition(new EpsilonTransition(endState)); - - const matchState = new BasicState(); - atn.addState(matchState); - matchState.addTransition(new AtomTransition(bypassStop, atn.ruleToTokenType[idx])); - bypassStart.addTransition(new EpsilonTransition(matchState)); - } - - stateIsEndStateFor(state, idx) { - if ( state.ruleIndex !== idx) { - return null; - } - if (!( state instanceof StarLoopEntryState)) { - return null; - } - const maybeLoopEndState = state.transitions[state.transitions.length - 1].target; - if (!( maybeLoopEndState instanceof LoopEndState)) { - return null; - } - if (maybeLoopEndState.epsilonOnlyTransitions && - (maybeLoopEndState.transitions[0].target instanceof RuleStopState)) { - return state; - } else { - return null; - } - } - - /** - * Analyze the {@link StarLoopEntryState} states in the specified ATN to set - * the {@link StarLoopEntryState//isPrecedenceDecision} field to the - * correct value. - * @param atn The ATN. - */ - markPrecedenceDecisions(atn) { - for(let i=0; i= 0); - } else { - this.checkCondition(state.transitions.length <= 1 || (state instanceof RuleStopState)); - } - } - } - - checkCondition(condition, message) { - if (!condition) { - if (message === undefined || message===null) { - message = "IllegalState"; - } - throw (message); - } - } - - readInt() { - return this.data[this.pos++]; - } - - readInt32() { - const low = this.readInt(); - const high = this.readInt(); - return low | (high << 16); - } - - readLong() { - const low = this.readInt32(); - const high = this.readInt32(); - return (low & 0x00000000FFFFFFFF) | (high << 32); - } - - readUUID() { - const bb = []; - for(let i=7;i>=0;i--) { - const int = this.readInt(); - /* jshint bitwise: false */ - bb[(2*i)+1] = int & 0xFF; - bb[2*i] = (int >> 8) & 0xFF; - } - return byteToHex[bb[0]] + byteToHex[bb[1]] + - byteToHex[bb[2]] + byteToHex[bb[3]] + '-' + - byteToHex[bb[4]] + byteToHex[bb[5]] + '-' + - byteToHex[bb[6]] + byteToHex[bb[7]] + '-' + - byteToHex[bb[8]] + byteToHex[bb[9]] + '-' + - byteToHex[bb[10]] + byteToHex[bb[11]] + - byteToHex[bb[12]] + byteToHex[bb[13]] + - byteToHex[bb[14]] + byteToHex[bb[15]]; - } - - edgeFactory(atn, type, src, trg, arg1, arg2, arg3, sets) { - const target = atn.states[trg]; - switch(type) { - case Transition.EPSILON: - return new EpsilonTransition(target); - case Transition.RANGE: - return arg3 !== 0 ? new RangeTransition(target, Token.EOF, arg2) : new RangeTransition(target, arg1, arg2); - case Transition.RULE: - return new RuleTransition(atn.states[arg1], arg2, arg3, target); - case Transition.PREDICATE: - return new PredicateTransition(target, arg1, arg2, arg3 !== 0); - case Transition.PRECEDENCE: - return new PrecedencePredicateTransition(target, arg1); - case Transition.ATOM: - return arg3 !== 0 ? new AtomTransition(target, Token.EOF) : new AtomTransition(target, arg1); - case Transition.ACTION: - return new ActionTransition(target, arg1, arg2, arg3 !== 0); - case Transition.SET: - return new SetTransition(target, sets[arg1]); - case Transition.NOT_SET: - return new NotSetTransition(target, sets[arg1]); - case Transition.WILDCARD: - return new WildcardTransition(target); - default: - throw "The specified transition type: " + type + " is not valid."; - } - } - - stateFactory(type, ruleIndex) { - if (this.stateFactories === null) { - const sf = []; - sf[ATNState.INVALID_TYPE] = null; - sf[ATNState.BASIC] = () => new BasicState(); - sf[ATNState.RULE_START] = () => new RuleStartState(); - sf[ATNState.BLOCK_START] = () => new BasicBlockStartState(); - sf[ATNState.PLUS_BLOCK_START] = () => new PlusBlockStartState(); - sf[ATNState.STAR_BLOCK_START] = () => new StarBlockStartState(); - sf[ATNState.TOKEN_START] = () => new TokensStartState(); - sf[ATNState.RULE_STOP] = () => new RuleStopState(); - sf[ATNState.BLOCK_END] = () => new BlockEndState(); - sf[ATNState.STAR_LOOP_BACK] = () => new StarLoopbackState(); - sf[ATNState.STAR_LOOP_ENTRY] = () => new StarLoopEntryState(); - sf[ATNState.PLUS_LOOP_BACK] = () => new PlusLoopbackState(); - sf[ATNState.LOOP_END] = () => new LoopEndState(); - this.stateFactories = sf; - } - if (type>this.stateFactories.length || this.stateFactories[type] === null) { - throw("The specified state type " + type + " is not valid."); - } else { - const s = this.stateFactories[type](); - if (s!==null) { - s.ruleIndex = ruleIndex; - return s; - } - } - } - - lexerActionFactory(type, data1, data2) { - if (this.actionFactories === null) { - const af = []; - af[LexerActionType.CHANNEL] = (data1, data2) => new LexerChannelAction(data1); - af[LexerActionType.CUSTOM] = (data1, data2) => new LexerCustomAction(data1, data2); - af[LexerActionType.MODE] = (data1, data2) => new LexerModeAction(data1); - af[LexerActionType.MORE] = (data1, data2) => LexerMoreAction.INSTANCE; - af[LexerActionType.POP_MODE] = (data1, data2) => LexerPopModeAction.INSTANCE; - af[LexerActionType.PUSH_MODE] = (data1, data2) => new LexerPushModeAction(data1); - af[LexerActionType.SKIP] = (data1, data2) => LexerSkipAction.INSTANCE; - af[LexerActionType.TYPE] = (data1, data2) => new LexerTypeAction(data1); - this.actionFactories = af; - } - if (type>this.actionFactories.length || this.actionFactories[type] === null) { - throw("The specified lexer action type " + type + " is not valid."); - } else { - return this.actionFactories[type](data1, data2); - } - } -} - -function createByteToHex() { - const bth = []; - for (let i = 0; i < 256; i++) { - bth[i] = (i + 0x100).toString(16).substr(1).toUpperCase(); - } - return bth; -} - -const byteToHex = createByteToHex(); - - -module.exports = ATNDeserializer; diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/ATNSimulator.js b/reverse_engineering/node_modules/antlr4/src/antlr4/atn/ATNSimulator.js deleted file mode 100644 index 02169d1..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/ATNSimulator.js +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const {DFAState} = require('./../dfa/DFAState'); -const {ATNConfigSet} = require('./ATNConfigSet'); -const {getCachedPredictionContext} = require('./../PredictionContext'); -const {Map} = require('./../Utils'); - -class ATNSimulator { - constructor(atn, sharedContextCache) { - /** - * The context cache maps all PredictionContext objects that are == - * to a single cached copy. This cache is shared across all contexts - * in all ATNConfigs in all DFA states. We rebuild each ATNConfigSet - * to use only cached nodes/graphs in addDFAState(). We don't want to - * fill this during closure() since there are lots of contexts that - * pop up but are not used ever again. It also greatly slows down closure(). - * - *

      This cache makes a huge difference in memory and a little bit in speed. - * For the Java grammar on java.*, it dropped the memory requirements - * at the end from 25M to 16M. We don't store any of the full context - * graphs in the DFA because they are limited to local context only, - * but apparently there's a lot of repetition there as well. We optimize - * the config contexts before storing the config set in the DFA states - * by literally rebuilding them with cached subgraphs only.

      - * - *

      I tried a cache for use during closure operations, that was - * whacked after each adaptivePredict(). It cost a little bit - * more time I think and doesn't save on the overall footprint - * so it's not worth the complexity.

      - */ - this.atn = atn; - this.sharedContextCache = sharedContextCache; - return this; - } - - getCachedContext(context) { - if (this.sharedContextCache ===null) { - return context; - } - const visited = new Map(); - return getCachedPredictionContext(context, this.sharedContextCache, visited); - } -} - -// Must distinguish between missing edge and edge we know leads nowhere/// -ATNSimulator.ERROR = new DFAState(0x7FFFFFFF, new ATNConfigSet()); - - -module.exports = ATNSimulator; diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/ATNState.js b/reverse_engineering/node_modules/antlr4/src/antlr4/atn/ATNState.js deleted file mode 100644 index eb5baf4..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/ATNState.js +++ /dev/null @@ -1,315 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const INITIAL_NUM_TRANSITIONS = 4; - -/** - * The following images show the relation of states and - * {@link ATNState//transitions} for various grammar constructs. - * - *
        - * - *
      • Solid edges marked with an &//0949; indicate a required - * {@link EpsilonTransition}.
      • - * - *
      • Dashed edges indicate locations where any transition derived from - * {@link Transition} might appear.
      • - * - *
      • Dashed nodes are place holders for either a sequence of linked - * {@link BasicState} states or the inclusion of a block representing a nested - * construct in one of the forms below.
      • - * - *
      • Nodes showing multiple outgoing alternatives with a {@code ...} support - * any number of alternatives (one or more). Nodes without the {@code ...} only - * support the exact number of alternatives shown in the diagram.
      • - * - *
      - * - *

      Basic Blocks

      - * - *

      Rule

      - * - * - * - *

      Block of 1 or more alternatives

      - * - * - * - *

      Greedy Loops

      - * - *

      Greedy Closure: {@code (...)*}

      - * - * - * - *

      Greedy Positive Closure: {@code (...)+}

      - * - * - * - *

      Greedy Optional: {@code (...)?}

      - * - * - * - *

      Non-Greedy Loops

      - * - *

      Non-Greedy Closure: {@code (...)*?}

      - * - * - * - *

      Non-Greedy Positive Closure: {@code (...)+?}

      - * - * - * - *

      Non-Greedy Optional: {@code (...)??}

      - * - * - */ -class ATNState { - constructor() { - // Which ATN are we in? - this.atn = null; - this.stateNumber = ATNState.INVALID_STATE_NUMBER; - this.stateType = null; - this.ruleIndex = 0; // at runtime, we don't have Rule objects - this.epsilonOnlyTransitions = false; - // Track the transitions emanating from this ATN state. - this.transitions = []; - // Used to cache lookahead during parsing, not used during construction - this.nextTokenWithinRule = null; - } - - toString() { - return this.stateNumber; - } - - equals(other) { - if (other instanceof ATNState) { - return this.stateNumber===other.stateNumber; - } else { - return false; - } - } - - isNonGreedyExitState() { - return false; - } - - addTransition(trans, index) { - if(index===undefined) { - index = -1; - } - if (this.transitions.length===0) { - this.epsilonOnlyTransitions = trans.isEpsilon; - } else if(this.epsilonOnlyTransitions !== trans.isEpsilon) { - this.epsilonOnlyTransitions = false; - } - if (index===-1) { - this.transitions.push(trans); - } else { - this.transitions.splice(index, 1, trans); - } - } -} - -// constants for serialization -ATNState.INVALID_TYPE = 0; -ATNState.BASIC = 1; -ATNState.RULE_START = 2; -ATNState.BLOCK_START = 3; -ATNState.PLUS_BLOCK_START = 4; -ATNState.STAR_BLOCK_START = 5; -ATNState.TOKEN_START = 6; -ATNState.RULE_STOP = 7; -ATNState.BLOCK_END = 8; -ATNState.STAR_LOOP_BACK = 9; -ATNState.STAR_LOOP_ENTRY = 10; -ATNState.PLUS_LOOP_BACK = 11; -ATNState.LOOP_END = 12; - -ATNState.serializationNames = [ - "INVALID", - "BASIC", - "RULE_START", - "BLOCK_START", - "PLUS_BLOCK_START", - "STAR_BLOCK_START", - "TOKEN_START", - "RULE_STOP", - "BLOCK_END", - "STAR_LOOP_BACK", - "STAR_LOOP_ENTRY", - "PLUS_LOOP_BACK", - "LOOP_END" ]; - -ATNState.INVALID_STATE_NUMBER = -1; - - -class BasicState extends ATNState { - constructor() { - super(); - this.stateType = ATNState.BASIC; - } -} - -class DecisionState extends ATNState { - constructor() { - super(); - this.decision = -1; - this.nonGreedy = false; - return this; - } -} - -/** - * The start of a regular {@code (...)} block - */ -class BlockStartState extends DecisionState { - constructor() { - super(); - this.endState = null; - return this; - } -} - -class BasicBlockStartState extends BlockStartState { - constructor() { - super(); - this.stateType = ATNState.BLOCK_START; - return this; - } -} - -/** - * Terminal node of a simple {@code (a|b|c)} block - */ -class BlockEndState extends ATNState { - constructor() { - super(); - this.stateType = ATNState.BLOCK_END; - this.startState = null; - return this; - } -} - -/** - * The last node in the ATN for a rule, unless that rule is the start symbol. - * In that case, there is one transition to EOF. Later, we might encode - * references to all calls to this rule to compute FOLLOW sets for - * error handling - */ -class RuleStopState extends ATNState { - constructor() { - super(); - this.stateType = ATNState.RULE_STOP; - return this; - } -} - -class RuleStartState extends ATNState { - constructor() { - super(); - this.stateType = ATNState.RULE_START; - this.stopState = null; - this.isPrecedenceRule = false; - return this; - } -} - -/** - * Decision state for {@code A+} and {@code (A|B)+}. It has two transitions: - * one to the loop back to start of the block and one to exit. - */ -class PlusLoopbackState extends DecisionState { - constructor() { - super(); - this.stateType = ATNState.PLUS_LOOP_BACK; - return this; - } -} - -/** - * Start of {@code (A|B|...)+} loop. Technically a decision state, but - * we don't use for code generation; somebody might need it, so I'm defining - * it for completeness. In reality, the {@link PlusLoopbackState} node is the - * real decision-making note for {@code A+} - */ -class PlusBlockStartState extends BlockStartState { - constructor() { - super(); - this.stateType = ATNState.PLUS_BLOCK_START; - this.loopBackState = null; - return this; - } -} - -/** - * The block that begins a closure loop - */ -class StarBlockStartState extends BlockStartState { - constructor() { - super(); - this.stateType = ATNState.STAR_BLOCK_START; - return this; - } -} - -class StarLoopbackState extends ATNState { - constructor() { - super(); - this.stateType = ATNState.STAR_LOOP_BACK; - return this; - } -} - -class StarLoopEntryState extends DecisionState { - constructor() { - super(); - this.stateType = ATNState.STAR_LOOP_ENTRY; - this.loopBackState = null; - // Indicates whether this state can benefit from a precedence DFA during SLL decision making. - this.isPrecedenceDecision = null; - return this; - } -} - -/** - * Mark the end of a * or + loop - */ -class LoopEndState extends ATNState { - constructor() { - super(); - this.stateType = ATNState.LOOP_END; - this.loopBackState = null; - return this; - } -} - -/** - * The Tokens rule start state linking to each lexer rule start state - */ -class TokensStartState extends DecisionState { - constructor() { - super(); - this.stateType = ATNState.TOKEN_START; - return this; - } -} - -module.exports = { - ATNState, - BasicState, - DecisionState, - BlockStartState, - BlockEndState, - LoopEndState, - RuleStartState, - RuleStopState, - TokensStartState, - PlusLoopbackState, - StarLoopbackState, - StarLoopEntryState, - PlusBlockStartState, - StarBlockStartState, - BasicBlockStartState -} diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/ATNType.js b/reverse_engineering/node_modules/antlr4/src/antlr4/atn/ATNType.js deleted file mode 100644 index 7c222a4..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/ATNType.js +++ /dev/null @@ -1,13 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -/** - * Represents the type of recognizer an ATN applies to - */ -module.exports = { - LEXER: 0, - PARSER: 1 -}; - diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/LexerATNSimulator.js b/reverse_engineering/node_modules/antlr4/src/antlr4/atn/LexerATNSimulator.js deleted file mode 100644 index c863f67..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/LexerATNSimulator.js +++ /dev/null @@ -1,650 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const {Token} = require('./../Token'); -const Lexer = require('./../Lexer'); -const ATN = require('./ATN'); -const ATNSimulator = require('./ATNSimulator'); -const {DFAState} = require('./../dfa/DFAState'); -const {OrderedATNConfigSet} = require('./ATNConfigSet'); -const {PredictionContext} = require('./../PredictionContext'); -const {SingletonPredictionContext} = require('./../PredictionContext'); -const {RuleStopState} = require('./ATNState'); -const {LexerATNConfig} = require('./ATNConfig'); -const {Transition} = require('./Transition'); -const LexerActionExecutor = require('./LexerActionExecutor'); -const {LexerNoViableAltException} = require('./../error/Errors'); - -function resetSimState(sim) { - sim.index = -1; - sim.line = 0; - sim.column = -1; - sim.dfaState = null; -} - -class SimState { - constructor() { - resetSimState(this); - } - - reset() { - resetSimState(this); - } -} - -class LexerATNSimulator extends ATNSimulator { - /** - * When we hit an accept state in either the DFA or the ATN, we - * have to notify the character stream to start buffering characters - * via {@link IntStream//mark} and record the current state. The current sim state - * includes the current index into the input, the current line, - * and current character position in that line. Note that the Lexer is - * tracking the starting line and characterization of the token. These - * variables track the "state" of the simulator when it hits an accept state. - * - *

      We track these variables separately for the DFA and ATN simulation - * because the DFA simulation often has to fail over to the ATN - * simulation. If the ATN simulation fails, we need the DFA to fall - * back to its previously accepted state, if any. If the ATN succeeds, - * then the ATN does the accept and the DFA simulator that invoked it - * can simply return the predicted token type.

      - */ - constructor(recog, atn, decisionToDFA, sharedContextCache) { - super(atn, sharedContextCache); - this.decisionToDFA = decisionToDFA; - this.recog = recog; - /** - * The current token's starting index into the character stream. - * Shared across DFA to ATN simulation in case the ATN fails and the - * DFA did not have a previous accept state. In this case, we use the - * ATN-generated exception object - */ - this.startIndex = -1; - // line number 1..n within the input/// - this.line = 1; - /** - * The index of the character relative to the beginning of the line - * 0..n-1 - */ - this.column = 0; - this.mode = Lexer.DEFAULT_MODE; - /** - * Used during DFA/ATN exec to record the most recent accept configuration - * info - */ - this.prevAccept = new SimState(); - } - - copyState(simulator) { - this.column = simulator.column; - this.line = simulator.line; - this.mode = simulator.mode; - this.startIndex = simulator.startIndex; - } - - match(input, mode) { - this.match_calls += 1; - this.mode = mode; - const mark = input.mark(); - try { - this.startIndex = input.index; - this.prevAccept.reset(); - const dfa = this.decisionToDFA[mode]; - if (dfa.s0 === null) { - return this.matchATN(input); - } else { - return this.execATN(input, dfa.s0); - } - } finally { - input.release(mark); - } - } - - reset() { - this.prevAccept.reset(); - this.startIndex = -1; - this.line = 1; - this.column = 0; - this.mode = Lexer.DEFAULT_MODE; - } - - matchATN(input) { - const startState = this.atn.modeToStartState[this.mode]; - - if (LexerATNSimulator.debug) { - console.log("matchATN mode " + this.mode + " start: " + startState); - } - const old_mode = this.mode; - const s0_closure = this.computeStartState(input, startState); - const suppressEdge = s0_closure.hasSemanticContext; - s0_closure.hasSemanticContext = false; - - const next = this.addDFAState(s0_closure); - if (!suppressEdge) { - this.decisionToDFA[this.mode].s0 = next; - } - - const predict = this.execATN(input, next); - - if (LexerATNSimulator.debug) { - console.log("DFA after matchATN: " + this.decisionToDFA[old_mode].toLexerString()); - } - return predict; - } - - execATN(input, ds0) { - if (LexerATNSimulator.debug) { - console.log("start state closure=" + ds0.configs); - } - if (ds0.isAcceptState) { - // allow zero-length tokens - this.captureSimState(this.prevAccept, input, ds0); - } - let t = input.LA(1); - let s = ds0; // s is current/from DFA state - - while (true) { // while more work - if (LexerATNSimulator.debug) { - console.log("execATN loop starting closure: " + s.configs); - } - - /** - * As we move src->trg, src->trg, we keep track of the previous trg to - * avoid looking up the DFA state again, which is expensive. - * If the previous target was already part of the DFA, we might - * be able to avoid doing a reach operation upon t. If s!=null, - * it means that semantic predicates didn't prevent us from - * creating a DFA state. Once we know s!=null, we check to see if - * the DFA state has an edge already for t. If so, we can just reuse - * it's configuration set; there's no point in re-computing it. - * This is kind of like doing DFA simulation within the ATN - * simulation because DFA simulation is really just a way to avoid - * computing reach/closure sets. Technically, once we know that - * we have a previously added DFA state, we could jump over to - * the DFA simulator. But, that would mean popping back and forth - * a lot and making things more complicated algorithmically. - * This optimization makes a lot of sense for loops within DFA. - * A character will take us back to an existing DFA state - * that already has lots of edges out of it. e.g., .* in comments. - * print("Target for:" + str(s) + " and:" + str(t)) - */ - let target = this.getExistingTargetState(s, t); - // print("Existing:" + str(target)) - if (target === null) { - target = this.computeTargetState(input, s, t); - // print("Computed:" + str(target)) - } - if (target === ATNSimulator.ERROR) { - break; - } - // If this is a consumable input element, make sure to consume before - // capturing the accept state so the input index, line, and char - // position accurately reflect the state of the interpreter at the - // end of the token. - if (t !== Token.EOF) { - this.consume(input); - } - if (target.isAcceptState) { - this.captureSimState(this.prevAccept, input, target); - if (t === Token.EOF) { - break; - } - } - t = input.LA(1); - s = target; // flip; current DFA target becomes new src/from state - } - return this.failOrAccept(this.prevAccept, input, s.configs, t); - } - - /** - * Get an existing target state for an edge in the DFA. If the target state - * for the edge has not yet been computed or is otherwise not available, - * this method returns {@code null}. - * - * @param s The current DFA state - * @param t The next input symbol - * @return The existing target DFA state for the given input symbol - * {@code t}, or {@code null} if the target state for this edge is not - * already cached - */ - getExistingTargetState(s, t) { - if (s.edges === null || t < LexerATNSimulator.MIN_DFA_EDGE || t > LexerATNSimulator.MAX_DFA_EDGE) { - return null; - } - - let target = s.edges[t - LexerATNSimulator.MIN_DFA_EDGE]; - if(target===undefined) { - target = null; - } - if (LexerATNSimulator.debug && target !== null) { - console.log("reuse state " + s.stateNumber + " edge to " + target.stateNumber); - } - return target; - } - - /** - * Compute a target state for an edge in the DFA, and attempt to add the - * computed state and corresponding edge to the DFA. - * - * @param input The input stream - * @param s The current DFA state - * @param t The next input symbol - * - * @return The computed target DFA state for the given input symbol - * {@code t}. If {@code t} does not lead to a valid DFA state, this method - * returns {@link //ERROR}. - */ - computeTargetState(input, s, t) { - const reach = new OrderedATNConfigSet(); - // if we don't find an existing DFA state - // Fill reach starting from closure, following t transitions - this.getReachableConfigSet(input, s.configs, reach, t); - - if (reach.items.length === 0) { // we got nowhere on t from s - if (!reach.hasSemanticContext) { - // we got nowhere on t, don't throw out this knowledge; it'd - // cause a failover from DFA later. - this.addDFAEdge(s, t, ATNSimulator.ERROR); - } - // stop when we can't match any more char - return ATNSimulator.ERROR; - } - // Add an edge from s to target DFA found/created for reach - return this.addDFAEdge(s, t, null, reach); - } - - failOrAccept(prevAccept, input, reach, t) { - if (this.prevAccept.dfaState !== null) { - const lexerActionExecutor = prevAccept.dfaState.lexerActionExecutor; - this.accept(input, lexerActionExecutor, this.startIndex, - prevAccept.index, prevAccept.line, prevAccept.column); - return prevAccept.dfaState.prediction; - } else { - // if no accept and EOF is first char, return EOF - if (t === Token.EOF && input.index === this.startIndex) { - return Token.EOF; - } - throw new LexerNoViableAltException(this.recog, input, this.startIndex, reach); - } - } - - /** - * Given a starting configuration set, figure out all ATN configurations - * we can reach upon input {@code t}. Parameter {@code reach} is a return - * parameter. - */ - getReachableConfigSet(input, closure, - reach, t) { - // this is used to skip processing for configs which have a lower priority - // than a config that already reached an accept state for the same rule - let skipAlt = ATN.INVALID_ALT_NUMBER; - for (let i = 0; i < closure.items.length; i++) { - const cfg = closure.items[i]; - const currentAltReachedAcceptState = (cfg.alt === skipAlt); - if (currentAltReachedAcceptState && cfg.passedThroughNonGreedyDecision) { - continue; - } - if (LexerATNSimulator.debug) { - console.log("testing %s at %s\n", this.getTokenName(t), cfg - .toString(this.recog, true)); - } - for (let j = 0; j < cfg.state.transitions.length; j++) { - const trans = cfg.state.transitions[j]; // for each transition - const target = this.getReachableTarget(trans, t); - if (target !== null) { - let lexerActionExecutor = cfg.lexerActionExecutor; - if (lexerActionExecutor !== null) { - lexerActionExecutor = lexerActionExecutor.fixOffsetBeforeMatch(input.index - this.startIndex); - } - const treatEofAsEpsilon = (t === Token.EOF); - const config = new LexerATNConfig({state:target, lexerActionExecutor:lexerActionExecutor}, cfg); - if (this.closure(input, config, reach, - currentAltReachedAcceptState, true, treatEofAsEpsilon)) { - // any remaining configs for this alt have a lower priority - // than the one that just reached an accept state. - skipAlt = cfg.alt; - } - } - } - } - } - - accept(input, lexerActionExecutor, - startIndex, index, line, charPos) { - if (LexerATNSimulator.debug) { - console.log("ACTION %s\n", lexerActionExecutor); - } - // seek to after last char in token - input.seek(index); - this.line = line; - this.column = charPos; - if (lexerActionExecutor !== null && this.recog !== null) { - lexerActionExecutor.execute(this.recog, input, startIndex); - } - } - - getReachableTarget(trans, t) { - if (trans.matches(t, 0, Lexer.MAX_CHAR_VALUE)) { - return trans.target; - } else { - return null; - } - } - - computeStartState(input, p) { - const initialContext = PredictionContext.EMPTY; - const configs = new OrderedATNConfigSet(); - for (let i = 0; i < p.transitions.length; i++) { - const target = p.transitions[i].target; - const cfg = new LexerATNConfig({state:target, alt:i+1, context:initialContext}, null); - this.closure(input, cfg, configs, false, false, false); - } - return configs; - } - - /** - * Since the alternatives within any lexer decision are ordered by - * preference, this method stops pursuing the closure as soon as an accept - * state is reached. After the first accept state is reached by depth-first - * search from {@code config}, all other (potentially reachable) states for - * this rule would have a lower priority. - * - * @return {Boolean} {@code true} if an accept state is reached, otherwise - * {@code false}. - */ - closure(input, config, configs, - currentAltReachedAcceptState, speculative, treatEofAsEpsilon) { - let cfg = null; - if (LexerATNSimulator.debug) { - console.log("closure(" + config.toString(this.recog, true) + ")"); - } - if (config.state instanceof RuleStopState) { - if (LexerATNSimulator.debug) { - if (this.recog !== null) { - console.log("closure at %s rule stop %s\n", this.recog.ruleNames[config.state.ruleIndex], config); - } else { - console.log("closure at rule stop %s\n", config); - } - } - if (config.context === null || config.context.hasEmptyPath()) { - if (config.context === null || config.context.isEmpty()) { - configs.add(config); - return true; - } else { - configs.add(new LexerATNConfig({ state:config.state, context:PredictionContext.EMPTY}, config)); - currentAltReachedAcceptState = true; - } - } - if (config.context !== null && !config.context.isEmpty()) { - for (let i = 0; i < config.context.length; i++) { - if (config.context.getReturnState(i) !== PredictionContext.EMPTY_RETURN_STATE) { - const newContext = config.context.getParent(i); // "pop" return state - const returnState = this.atn.states[config.context.getReturnState(i)]; - cfg = new LexerATNConfig({ state:returnState, context:newContext }, config); - currentAltReachedAcceptState = this.closure(input, cfg, - configs, currentAltReachedAcceptState, speculative, - treatEofAsEpsilon); - } - } - } - return currentAltReachedAcceptState; - } - // optimization - if (!config.state.epsilonOnlyTransitions) { - if (!currentAltReachedAcceptState || !config.passedThroughNonGreedyDecision) { - configs.add(config); - } - } - for (let j = 0; j < config.state.transitions.length; j++) { - const trans = config.state.transitions[j]; - cfg = this.getEpsilonTarget(input, config, trans, configs, speculative, treatEofAsEpsilon); - if (cfg !== null) { - currentAltReachedAcceptState = this.closure(input, cfg, configs, - currentAltReachedAcceptState, speculative, treatEofAsEpsilon); - } - } - return currentAltReachedAcceptState; - } - - // side-effect: can alter configs.hasSemanticContext - getEpsilonTarget(input, config, trans, - configs, speculative, treatEofAsEpsilon) { - let cfg = null; - if (trans.serializationType === Transition.RULE) { - const newContext = SingletonPredictionContext.create(config.context, trans.followState.stateNumber); - cfg = new LexerATNConfig( { state:trans.target, context:newContext}, config); - } else if (trans.serializationType === Transition.PRECEDENCE) { - throw "Precedence predicates are not supported in lexers."; - } else if (trans.serializationType === Transition.PREDICATE) { - // Track traversing semantic predicates. If we traverse, - // we cannot add a DFA state for this "reach" computation - // because the DFA would not test the predicate again in the - // future. Rather than creating collections of semantic predicates - // like v3 and testing them on prediction, v4 will test them on the - // fly all the time using the ATN not the DFA. This is slower but - // semantically it's not used that often. One of the key elements to - // this predicate mechanism is not adding DFA states that see - // predicates immediately afterwards in the ATN. For example, - - // a : ID {p1}? | ID {p2}? ; - - // should create the start state for rule 'a' (to save start state - // competition), but should not create target of ID state. The - // collection of ATN states the following ID references includes - // states reached by traversing predicates. Since this is when we - // test them, we cannot cash the DFA state target of ID. - - if (LexerATNSimulator.debug) { - console.log("EVAL rule " + trans.ruleIndex + ":" + trans.predIndex); - } - configs.hasSemanticContext = true; - if (this.evaluatePredicate(input, trans.ruleIndex, trans.predIndex, speculative)) { - cfg = new LexerATNConfig({ state:trans.target}, config); - } - } else if (trans.serializationType === Transition.ACTION) { - if (config.context === null || config.context.hasEmptyPath()) { - // execute actions anywhere in the start rule for a token. - // - // TODO: if the entry rule is invoked recursively, some - // actions may be executed during the recursive call. The - // problem can appear when hasEmptyPath() is true but - // isEmpty() is false. In this case, the config needs to be - // split into two contexts - one with just the empty path - // and another with everything but the empty path. - // Unfortunately, the current algorithm does not allow - // getEpsilonTarget to return two configurations, so - // additional modifications are needed before we can support - // the split operation. - const lexerActionExecutor = LexerActionExecutor.append(config.lexerActionExecutor, - this.atn.lexerActions[trans.actionIndex]); - cfg = new LexerATNConfig({ state:trans.target, lexerActionExecutor:lexerActionExecutor }, config); - } else { - // ignore actions in referenced rules - cfg = new LexerATNConfig( { state:trans.target}, config); - } - } else if (trans.serializationType === Transition.EPSILON) { - cfg = new LexerATNConfig({ state:trans.target}, config); - } else if (trans.serializationType === Transition.ATOM || - trans.serializationType === Transition.RANGE || - trans.serializationType === Transition.SET) { - if (treatEofAsEpsilon) { - if (trans.matches(Token.EOF, 0, Lexer.MAX_CHAR_VALUE)) { - cfg = new LexerATNConfig( { state:trans.target }, config); - } - } - } - return cfg; - } - - /** - * Evaluate a predicate specified in the lexer. - * - *

      If {@code speculative} is {@code true}, this method was called before - * {@link //consume} for the matched character. This method should call - * {@link //consume} before evaluating the predicate to ensure position - * sensitive values, including {@link Lexer//getText}, {@link Lexer//getLine}, - * and {@link Lexer//getcolumn}, properly reflect the current - * lexer state. This method should restore {@code input} and the simulator - * to the original state before returning (i.e. undo the actions made by the - * call to {@link //consume}.

      - * - * @param input The input stream. - * @param ruleIndex The rule containing the predicate. - * @param predIndex The index of the predicate within the rule. - * @param speculative {@code true} if the current index in {@code input} is - * one character before the predicate's location. - * - * @return {@code true} if the specified predicate evaluates to - * {@code true}. - */ - evaluatePredicate(input, ruleIndex, - predIndex, speculative) { - // assume true if no recognizer was provided - if (this.recog === null) { - return true; - } - if (!speculative) { - return this.recog.sempred(null, ruleIndex, predIndex); - } - const savedcolumn = this.column; - const savedLine = this.line; - const index = input.index; - const marker = input.mark(); - try { - this.consume(input); - return this.recog.sempred(null, ruleIndex, predIndex); - } finally { - this.column = savedcolumn; - this.line = savedLine; - input.seek(index); - input.release(marker); - } - } - - captureSimState(settings, input, dfaState) { - settings.index = input.index; - settings.line = this.line; - settings.column = this.column; - settings.dfaState = dfaState; - } - - addDFAEdge(from_, tk, to, cfgs) { - if (to === undefined) { - to = null; - } - if (cfgs === undefined) { - cfgs = null; - } - if (to === null && cfgs !== null) { - // leading to this call, ATNConfigSet.hasSemanticContext is used as a - // marker indicating dynamic predicate evaluation makes this edge - // dependent on the specific input sequence, so the static edge in the - // DFA should be omitted. The target DFAState is still created since - // execATN has the ability to resynchronize with the DFA state cache - // following the predicate evaluation step. - // - // TJP notes: next time through the DFA, we see a pred again and eval. - // If that gets us to a previously created (but dangling) DFA - // state, we can continue in pure DFA mode from there. - // / - const suppressEdge = cfgs.hasSemanticContext; - cfgs.hasSemanticContext = false; - - to = this.addDFAState(cfgs); - - if (suppressEdge) { - return to; - } - } - // add the edge - if (tk < LexerATNSimulator.MIN_DFA_EDGE || tk > LexerATNSimulator.MAX_DFA_EDGE) { - // Only track edges within the DFA bounds - return to; - } - if (LexerATNSimulator.debug) { - console.log("EDGE " + from_ + " -> " + to + " upon " + tk); - } - if (from_.edges === null) { - // make room for tokens 1..n and -1 masquerading as index 0 - from_.edges = []; - } - from_.edges[tk - LexerATNSimulator.MIN_DFA_EDGE] = to; // connect - - return to; - } - - /** - * Add a new DFA state if there isn't one with this set of - * configurations already. This method also detects the first - * configuration containing an ATN rule stop state. Later, when - * traversing the DFA, we will know which rule to accept. - */ - addDFAState(configs) { - const proposed = new DFAState(null, configs); - let firstConfigWithRuleStopState = null; - for (let i = 0; i < configs.items.length; i++) { - const cfg = configs.items[i]; - if (cfg.state instanceof RuleStopState) { - firstConfigWithRuleStopState = cfg; - break; - } - } - if (firstConfigWithRuleStopState !== null) { - proposed.isAcceptState = true; - proposed.lexerActionExecutor = firstConfigWithRuleStopState.lexerActionExecutor; - proposed.prediction = this.atn.ruleToTokenType[firstConfigWithRuleStopState.state.ruleIndex]; - } - const dfa = this.decisionToDFA[this.mode]; - const existing = dfa.states.get(proposed); - if (existing!==null) { - return existing; - } - const newState = proposed; - newState.stateNumber = dfa.states.length; - configs.setReadonly(true); - newState.configs = configs; - dfa.states.add(newState); - return newState; - } - - getDFA(mode) { - return this.decisionToDFA[mode]; - } - -// Get the text matched so far for the current token. - getText(input) { - // index is first lookahead char, don't include. - return input.getText(this.startIndex, input.index - 1); - } - - consume(input) { - const curChar = input.LA(1); - if (curChar === "\n".charCodeAt(0)) { - this.line += 1; - this.column = 0; - } else { - this.column += 1; - } - input.consume(); - } - - getTokenName(tt) { - if (tt === -1) { - return "EOF"; - } else { - return "'" + String.fromCharCode(tt) + "'"; - } - } -} - -LexerATNSimulator.debug = false; -LexerATNSimulator.dfa_debug = false; - -LexerATNSimulator.MIN_DFA_EDGE = 0; -LexerATNSimulator.MAX_DFA_EDGE = 127; // forces unicode to stay in ATN - -LexerATNSimulator.match_calls = 0; - -module.exports = LexerATNSimulator; diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/LexerAction.js b/reverse_engineering/node_modules/antlr4/src/antlr4/atn/LexerAction.js deleted file mode 100644 index faf2ed9..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/LexerAction.js +++ /dev/null @@ -1,384 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const LexerActionType = { - // The type of a {@link LexerChannelAction} action. - CHANNEL: 0, - // The type of a {@link LexerCustomAction} action - CUSTOM: 1, - // The type of a {@link LexerModeAction} action. - MODE: 2, - //The type of a {@link LexerMoreAction} action. - MORE: 3, - //The type of a {@link LexerPopModeAction} action. - POP_MODE: 4, - //The type of a {@link LexerPushModeAction} action. - PUSH_MODE: 5, - //The type of a {@link LexerSkipAction} action. - SKIP: 6, - //The type of a {@link LexerTypeAction} action. - TYPE: 7 -} - -class LexerAction { - constructor(action) { - this.actionType = action; - this.isPositionDependent = false; - } - - hashCode() { - const hash = new Hash(); - this.updateHashCode(hash); - return hash.finish() - } - - updateHashCode(hash) { - hash.update(this.actionType); - } - - equals(other) { - return this === other; - } -} - - -/** - * Implements the {@code skip} lexer action by calling {@link Lexer//skip}. - * - *

      The {@code skip} command does not have any parameters, so this action is - * implemented as a singleton instance exposed by {@link //INSTANCE}.

      - */ -class LexerSkipAction extends LexerAction { - constructor() { - super(LexerActionType.SKIP); - } - - execute(lexer) { - lexer.skip(); - } - - toString() { - return "skip"; - } -} - -// Provides a singleton instance of this parameterless lexer action. -LexerSkipAction.INSTANCE = new LexerSkipAction(); - -/** - * Implements the {@code type} lexer action by calling {@link Lexer//setType} - * with the assigned type - */ -class LexerTypeAction extends LexerAction { - constructor(type) { - super(LexerActionType.TYPE); - this.type = type; - } - - execute(lexer) { - lexer.type = this.type; - } - - updateHashCode(hash) { - hash.update(this.actionType, this.type); - } - - equals(other) { - if(this === other) { - return true; - } else if (! (other instanceof LexerTypeAction)) { - return false; - } else { - return this.type === other.type; - } - } - - toString() { - return "type(" + this.type + ")"; - } -} - - -/** - * Implements the {@code pushMode} lexer action by calling - * {@link Lexer//pushMode} with the assigned mode - */ -class LexerPushModeAction extends LexerAction { - constructor(mode) { - super(LexerActionType.PUSH_MODE); - this.mode = mode; - } - - /** - *

      This action is implemented by calling {@link Lexer//pushMode} with the - * value provided by {@link //getMode}.

      - */ - execute(lexer) { - lexer.pushMode(this.mode); - } - - updateHashCode(hash) { - hash.update(this.actionType, this.mode); - } - - equals(other) { - if (this === other) { - return true; - } else if (! (other instanceof LexerPushModeAction)) { - return false; - } else { - return this.mode === other.mode; - } - } - - toString() { - return "pushMode(" + this.mode + ")"; - } -} - -/** - * Implements the {@code popMode} lexer action by calling {@link Lexer//popMode}. - * - *

      The {@code popMode} command does not have any parameters, so this action is - * implemented as a singleton instance exposed by {@link //INSTANCE}.

      - */ -class LexerPopModeAction extends LexerAction { - constructor() { - super(LexerActionType.POP_MODE); - } - - /** - *

      This action is implemented by calling {@link Lexer//popMode}.

      - */ - execute(lexer) { - lexer.popMode(); - } - - toString() { - return "popMode"; - } -} - -LexerPopModeAction.INSTANCE = new LexerPopModeAction(); - -/** - * Implements the {@code more} lexer action by calling {@link Lexer//more}. - * - *

      The {@code more} command does not have any parameters, so this action is - * implemented as a singleton instance exposed by {@link //INSTANCE}.

      - */ -class LexerMoreAction extends LexerAction { - constructor() { - super(LexerActionType.MORE); - } - - /** - *

      This action is implemented by calling {@link Lexer//popMode}.

      - */ - execute(lexer) { - lexer.more(); - } - - toString() { - return "more"; - } -} - -LexerMoreAction.INSTANCE = new LexerMoreAction(); - - -/** - * Implements the {@code mode} lexer action by calling {@link Lexer//mode} with - * the assigned mode - */ -class LexerModeAction extends LexerAction { - constructor(mode) { - super(LexerActionType.MODE); - this.mode = mode; - } - - /** - *

      This action is implemented by calling {@link Lexer//mode} with the - * value provided by {@link //getMode}.

      - */ - execute(lexer) { - lexer.mode(this.mode); - } - - updateHashCode(hash) { - hash.update(this.actionType, this.mode); - } - - equals(other) { - if (this === other) { - return true; - } else if (! (other instanceof LexerModeAction)) { - return false; - } else { - return this.mode === other.mode; - } - } - - toString() { - return "mode(" + this.mode + ")"; - } -} - -/** - * Executes a custom lexer action by calling {@link Recognizer//action} with the - * rule and action indexes assigned to the custom action. The implementation of - * a custom action is added to the generated code for the lexer in an override - * of {@link Recognizer//action} when the grammar is compiled. - * - *

      This class may represent embedded actions created with the {...} - * syntax in ANTLR 4, as well as actions created for lexer commands where the - * command argument could not be evaluated when the grammar was compiled.

      - */ -class LexerCustomAction extends LexerAction { - /** - * Constructs a custom lexer action with the specified rule and action - * indexes. - * - * @param ruleIndex The rule index to use for calls to - * {@link Recognizer//action}. - * @param actionIndex The action index to use for calls to - * {@link Recognizer//action}. - */ - constructor(ruleIndex, actionIndex) { - super(LexerActionType.CUSTOM); - this.ruleIndex = ruleIndex; - this.actionIndex = actionIndex; - this.isPositionDependent = true; - } - - /** - *

      Custom actions are implemented by calling {@link Lexer//action} with the - * appropriate rule and action indexes.

      - */ - execute(lexer) { - lexer.action(null, this.ruleIndex, this.actionIndex); - } - - updateHashCode(hash) { - hash.update(this.actionType, this.ruleIndex, this.actionIndex); - } - - equals(other) { - if (this === other) { - return true; - } else if (! (other instanceof LexerCustomAction)) { - return false; - } else { - return this.ruleIndex === other.ruleIndex && this.actionIndex === other.actionIndex; - } - } -} - -/** - * Implements the {@code channel} lexer action by calling - * {@link Lexer//setChannel} with the assigned channel. - * Constructs a new {@code channel} action with the specified channel value. - * @param channel The channel value to pass to {@link Lexer//setChannel} - */ -class LexerChannelAction extends LexerAction { - constructor(channel) { - super(LexerActionType.CHANNEL); - this.channel = channel; - } - - /** - *

      This action is implemented by calling {@link Lexer//setChannel} with the - * value provided by {@link //getChannel}.

      - */ - execute(lexer) { - lexer._channel = this.channel; - } - - updateHashCode(hash) { - hash.update(this.actionType, this.channel); - } - - equals(other) { - if (this === other) { - return true; - } else if (! (other instanceof LexerChannelAction)) { - return false; - } else { - return this.channel === other.channel; - } - } - - toString() { - return "channel(" + this.channel + ")"; - } -} - - -/** - * This implementation of {@link LexerAction} is used for tracking input offsets - * for position-dependent actions within a {@link LexerActionExecutor}. - * - *

      This action is not serialized as part of the ATN, and is only required for - * position-dependent lexer actions which appear at a location other than the - * end of a rule. For more information about DFA optimizations employed for - * lexer actions, see {@link LexerActionExecutor//append} and - * {@link LexerActionExecutor//fixOffsetBeforeMatch}.

      - * - * Constructs a new indexed custom action by associating a character offset - * with a {@link LexerAction}. - * - *

      Note: This class is only required for lexer actions for which - * {@link LexerAction//isPositionDependent} returns {@code true}.

      - * - * @param offset The offset into the input {@link CharStream}, relative to - * the token start index, at which the specified lexer action should be - * executed. - * @param action The lexer action to execute at a particular offset in the - * input {@link CharStream}. - */ -class LexerIndexedCustomAction extends LexerAction { - constructor(offset, action) { - super(action.actionType); - this.offset = offset; - this.action = action; - this.isPositionDependent = true; - } - - /** - *

      This method calls {@link //execute} on the result of {@link //getAction} - * using the provided {@code lexer}.

      - */ - execute(lexer) { - // assume the input stream position was properly set by the calling code - this.action.execute(lexer); - } - - updateHashCode(hash) { - hash.update(this.actionType, this.offset, this.action); - } - - equals(other) { - if (this === other) { - return true; - } else if (! (other instanceof LexerIndexedCustomAction)) { - return false; - } else { - return this.offset === other.offset && this.action === other.action; - } - } -} - -module.exports = { - LexerActionType, - LexerSkipAction, - LexerChannelAction, - LexerCustomAction, - LexerIndexedCustomAction, - LexerMoreAction, - LexerTypeAction, - LexerPushModeAction, - LexerPopModeAction, - LexerModeAction -} diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/LexerActionExecutor.js b/reverse_engineering/node_modules/antlr4/src/antlr4/atn/LexerActionExecutor.js deleted file mode 100644 index 95567d4..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/LexerActionExecutor.js +++ /dev/null @@ -1,173 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const {hashStuff} = require("../Utils"); -const {LexerIndexedCustomAction} = require('./LexerAction'); - -class LexerActionExecutor { - /** - * Represents an executor for a sequence of lexer actions which traversed during - * the matching operation of a lexer rule (token). - * - *

      The executor tracks position information for position-dependent lexer actions - * efficiently, ensuring that actions appearing only at the end of the rule do - * not cause bloating of the {@link DFA} created for the lexer.

      - */ - constructor(lexerActions) { - this.lexerActions = lexerActions === null ? [] : lexerActions; - /** - * Caches the result of {@link //hashCode} since the hash code is an element - * of the performance-critical {@link LexerATNConfig//hashCode} operation - */ - this.cachedHashCode = hashStuff(lexerActions); // "".join([str(la) for la in - // lexerActions])) - return this; - } - - /** - * Creates a {@link LexerActionExecutor} which encodes the current offset - * for position-dependent lexer actions. - * - *

      Normally, when the executor encounters lexer actions where - * {@link LexerAction//isPositionDependent} returns {@code true}, it calls - * {@link IntStream//seek} on the input {@link CharStream} to set the input - * position to the end of the current token. This behavior provides - * for efficient DFA representation of lexer actions which appear at the end - * of a lexer rule, even when the lexer rule matches a variable number of - * characters.

      - * - *

      Prior to traversing a match transition in the ATN, the current offset - * from the token start index is assigned to all position-dependent lexer - * actions which have not already been assigned a fixed offset. By storing - * the offsets relative to the token start index, the DFA representation of - * lexer actions which appear in the middle of tokens remains efficient due - * to sharing among tokens of the same length, regardless of their absolute - * position in the input stream.

      - * - *

      If the current executor already has offsets assigned to all - * position-dependent lexer actions, the method returns {@code this}.

      - * - * @param offset The current offset to assign to all position-dependent - * lexer actions which do not already have offsets assigned. - * - * @return {LexerActionExecutor} A {@link LexerActionExecutor} which stores input stream offsets - * for all position-dependent lexer actions. - */ - fixOffsetBeforeMatch(offset) { - let updatedLexerActions = null; - for (let i = 0; i < this.lexerActions.length; i++) { - if (this.lexerActions[i].isPositionDependent && - !(this.lexerActions[i] instanceof LexerIndexedCustomAction)) { - if (updatedLexerActions === null) { - updatedLexerActions = this.lexerActions.concat([]); - } - updatedLexerActions[i] = new LexerIndexedCustomAction(offset, - this.lexerActions[i]); - } - } - if (updatedLexerActions === null) { - return this; - } else { - return new LexerActionExecutor(updatedLexerActions); - } - } - - /** - * Execute the actions encapsulated by this executor within the context of a - * particular {@link Lexer}. - * - *

      This method calls {@link IntStream//seek} to set the position of the - * {@code input} {@link CharStream} prior to calling - * {@link LexerAction//execute} on a position-dependent action. Before the - * method returns, the input position will be restored to the same position - * it was in when the method was invoked.

      - * - * @param lexer The lexer instance. - * @param input The input stream which is the source for the current token. - * When this method is called, the current {@link IntStream//index} for - * {@code input} should be the start of the following token, i.e. 1 - * character past the end of the current token. - * @param startIndex The token start index. This value may be passed to - * {@link IntStream//seek} to set the {@code input} position to the beginning - * of the token. - */ - execute(lexer, input, startIndex) { - let requiresSeek = false; - const stopIndex = input.index; - try { - for (let i = 0; i < this.lexerActions.length; i++) { - let lexerAction = this.lexerActions[i]; - if (lexerAction instanceof LexerIndexedCustomAction) { - const offset = lexerAction.offset; - input.seek(startIndex + offset); - lexerAction = lexerAction.action; - requiresSeek = (startIndex + offset) !== stopIndex; - } else if (lexerAction.isPositionDependent) { - input.seek(stopIndex); - requiresSeek = false; - } - lexerAction.execute(lexer); - } - } finally { - if (requiresSeek) { - input.seek(stopIndex); - } - } - } - - hashCode() { - return this.cachedHashCode; - } - - updateHashCode(hash) { - hash.update(this.cachedHashCode); - } - - equals(other) { - if (this === other) { - return true; - } else if (!(other instanceof LexerActionExecutor)) { - return false; - } else if (this.cachedHashCode != other.cachedHashCode) { - return false; - } else if (this.lexerActions.length != other.lexerActions.length) { - return false; - } else { - const numActions = this.lexerActions.length - for (let idx = 0; idx < numActions; ++idx) { - if (!this.lexerActions[idx].equals(other.lexerActions[idx])) { - return false; - } - } - return true; - } - } - - /** - * Creates a {@link LexerActionExecutor} which executes the actions for - * the input {@code lexerActionExecutor} followed by a specified - * {@code lexerAction}. - * - * @param lexerActionExecutor The executor for actions already traversed by - * the lexer while matching a token within a particular - * {@link LexerATNConfig}. If this is {@code null}, the method behaves as - * though it were an empty executor. - * @param lexerAction The lexer action to execute after the actions - * specified in {@code lexerActionExecutor}. - * - * @return {LexerActionExecutor} A {@link LexerActionExecutor} for executing the combine actions - * of {@code lexerActionExecutor} and {@code lexerAction}. - */ - static append(lexerActionExecutor, lexerAction) { - if (lexerActionExecutor === null) { - return new LexerActionExecutor([ lexerAction ]); - } - const lexerActions = lexerActionExecutor.lexerActions.concat([ lexerAction ]); - return new LexerActionExecutor(lexerActions); - } -} - - -module.exports = LexerActionExecutor; diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/ParserATNSimulator.js b/reverse_engineering/node_modules/antlr4/src/antlr4/atn/ParserATNSimulator.js deleted file mode 100644 index 05b45d5..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/ParserATNSimulator.js +++ /dev/null @@ -1,1717 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const Utils = require('./../Utils'); -const {Set, BitSet, DoubleDict} = Utils; - -const ATN = require('./ATN'); -const {ATNState, RuleStopState} = require('./ATNState'); - -const {ATNConfig} = require('./ATNConfig'); -const {ATNConfigSet} = require('./ATNConfigSet'); -const {Token} = require('./../Token'); -const {DFAState, PredPrediction} = require('./../dfa/DFAState'); -const ATNSimulator = require('./ATNSimulator'); -const PredictionMode = require('./PredictionMode'); -const RuleContext = require('./../RuleContext'); -const ParserRuleContext = require('./../ParserRuleContext'); -const {SemanticContext} = require('./SemanticContext'); -const {PredictionContext} = require('./../PredictionContext'); -const {Interval} = require('./../IntervalSet'); -const {Transition, SetTransition, NotSetTransition, RuleTransition, ActionTransition} = require('./Transition'); -const {NoViableAltException} = require('./../error/Errors'); -const {SingletonPredictionContext, predictionContextFromRuleContext} = require('./../PredictionContext'); - - -/** - * The embodiment of the adaptive LL(*), ALL(*), parsing strategy. - * - *

      - * The basic complexity of the adaptive strategy makes it harder to understand. - * We begin with ATN simulation to build paths in a DFA. Subsequent prediction - * requests go through the DFA first. If they reach a state without an edge for - * the current symbol, the algorithm fails over to the ATN simulation to - * complete the DFA path for the current input (until it finds a conflict state - * or uniquely predicting state).

      - * - *

      - * All of that is done without using the outer context because we want to create - * a DFA that is not dependent upon the rule invocation stack when we do a - * prediction. One DFA works in all contexts. We avoid using context not - * necessarily because it's slower, although it can be, but because of the DFA - * caching problem. The closure routine only considers the rule invocation stack - * created during prediction beginning in the decision rule. For example, if - * prediction occurs without invoking another rule's ATN, there are no context - * stacks in the configurations. When lack of context leads to a conflict, we - * don't know if it's an ambiguity or a weakness in the strong LL(*) parsing - * strategy (versus full LL(*)).

      - * - *

      - * When SLL yields a configuration set with conflict, we rewind the input and - * retry the ATN simulation, this time using full outer context without adding - * to the DFA. Configuration context stacks will be the full invocation stacks - * from the start rule. If we get a conflict using full context, then we can - * definitively say we have a true ambiguity for that input sequence. If we - * don't get a conflict, it implies that the decision is sensitive to the outer - * context. (It is not context-sensitive in the sense of context-sensitive - * grammars.)

      - * - *

      - * The next time we reach this DFA state with an SLL conflict, through DFA - * simulation, we will again retry the ATN simulation using full context mode. - * This is slow because we can't save the results and have to "interpret" the - * ATN each time we get that input.

      - * - *

      - * CACHING FULL CONTEXT PREDICTIONS

      - * - *

      - * We could cache results from full context to predicted alternative easily and - * that saves a lot of time but doesn't work in presence of predicates. The set - * of visible predicates from the ATN start state changes depending on the - * context, because closure can fall off the end of a rule. I tried to cache - * tuples (stack context, semantic context, predicted alt) but it was slower - * than interpreting and much more complicated. Also required a huge amount of - * memory. The goal is not to create the world's fastest parser anyway. I'd like - * to keep this algorithm simple. By launching multiple threads, we can improve - * the speed of parsing across a large number of files.

      - * - *

      - * There is no strict ordering between the amount of input used by SLL vs LL, - * which makes it really hard to build a cache for full context. Let's say that - * we have input A B C that leads to an SLL conflict with full context X. That - * implies that using X we might only use A B but we could also use A B C D to - * resolve conflict. Input A B C D could predict alternative 1 in one position - * in the input and A B C E could predict alternative 2 in another position in - * input. The conflicting SLL configurations could still be non-unique in the - * full context prediction, which would lead us to requiring more input than the - * original A B C. To make a prediction cache work, we have to track the exact - * input used during the previous prediction. That amounts to a cache that maps - * X to a specific DFA for that context.

      - * - *

      - * Something should be done for left-recursive expression predictions. They are - * likely LL(1) + pred eval. Easier to do the whole SLL unless error and retry - * with full LL thing Sam does.

      - * - *

      - * AVOIDING FULL CONTEXT PREDICTION

      - * - *

      - * We avoid doing full context retry when the outer context is empty, we did not - * dip into the outer context by falling off the end of the decision state rule, - * or when we force SLL mode.

      - * - *

      - * As an example of the not dip into outer context case, consider as super - * constructor calls versus function calls. One grammar might look like - * this:

      - * - *
      - * ctorBody
      - *   : '{' superCall? stat* '}'
      - *   ;
      - * 
      - * - *

      - * Or, you might see something like

      - * - *
      - * stat
      - *   : superCall ';'
      - *   | expression ';'
      - *   | ...
      - *   ;
      - * 
      - * - *

      - * In both cases I believe that no closure operations will dip into the outer - * context. In the first case ctorBody in the worst case will stop at the '}'. - * In the 2nd case it should stop at the ';'. Both cases should stay within the - * entry rule and not dip into the outer context.

      - * - *

      - * PREDICATES

      - * - *

      - * Predicates are always evaluated if present in either SLL or LL both. SLL and - * LL simulation deals with predicates differently. SLL collects predicates as - * it performs closure operations like ANTLR v3 did. It delays predicate - * evaluation until it reaches and accept state. This allows us to cache the SLL - * ATN simulation whereas, if we had evaluated predicates on-the-fly during - * closure, the DFA state configuration sets would be different and we couldn't - * build up a suitable DFA.

      - * - *

      - * When building a DFA accept state during ATN simulation, we evaluate any - * predicates and return the sole semantically valid alternative. If there is - * more than 1 alternative, we report an ambiguity. If there are 0 alternatives, - * we throw an exception. Alternatives without predicates act like they have - * true predicates. The simple way to think about it is to strip away all - * alternatives with false predicates and choose the minimum alternative that - * remains.

      - * - *

      - * When we start in the DFA and reach an accept state that's predicated, we test - * those and return the minimum semantically viable alternative. If no - * alternatives are viable, we throw an exception.

      - * - *

      - * During full LL ATN simulation, closure always evaluates predicates and - * on-the-fly. This is crucial to reducing the configuration set size during - * closure. It hits a landmine when parsing with the Java grammar, for example, - * without this on-the-fly evaluation.

      - * - *

      - * SHARING DFA

      - * - *

      - * All instances of the same parser share the same decision DFAs through a - * static field. Each instance gets its own ATN simulator but they share the - * same {@link //decisionToDFA} field. They also share a - * {@link PredictionContextCache} object that makes sure that all - * {@link PredictionContext} objects are shared among the DFA states. This makes - * a big size difference.

      - * - *

      - * THREAD SAFETY

      - * - *

      - * The {@link ParserATNSimulator} locks on the {@link //decisionToDFA} field when - * it adds a new DFA object to that array. {@link //addDFAEdge} - * locks on the DFA for the current decision when setting the - * {@link DFAState//edges} field. {@link //addDFAState} locks on - * the DFA for the current decision when looking up a DFA state to see if it - * already exists. We must make sure that all requests to add DFA states that - * are equivalent result in the same shared DFA object. This is because lots of - * threads will be trying to update the DFA at once. The - * {@link //addDFAState} method also locks inside the DFA lock - * but this time on the shared context cache when it rebuilds the - * configurations' {@link PredictionContext} objects using cached - * subgraphs/nodes. No other locking occurs, even during DFA simulation. This is - * safe as long as we can guarantee that all threads referencing - * {@code s.edge[t]} get the same physical target {@link DFAState}, or - * {@code null}. Once into the DFA, the DFA simulation does not reference the - * {@link DFA//states} map. It follows the {@link DFAState//edges} field to new - * targets. The DFA simulator will either find {@link DFAState//edges} to be - * {@code null}, to be non-{@code null} and {@code dfa.edges[t]} null, or - * {@code dfa.edges[t]} to be non-null. The - * {@link //addDFAEdge} method could be racing to set the field - * but in either case the DFA simulator works; if {@code null}, and requests ATN - * simulation. It could also race trying to get {@code dfa.edges[t]}, but either - * way it will work because it's not doing a test and set operation.

      - * - *

      - * Starting with SLL then failing to combined SLL/LL (Two-Stage - * Parsing)

      - * - *

      - * Sam pointed out that if SLL does not give a syntax error, then there is no - * point in doing full LL, which is slower. We only have to try LL if we get a - * syntax error. For maximum speed, Sam starts the parser set to pure SLL - * mode with the {@link BailErrorStrategy}:

      - * - *
      - * parser.{@link Parser//getInterpreter() getInterpreter()}.{@link //setPredictionMode setPredictionMode}{@code (}{@link PredictionMode//SLL}{@code )};
      - * parser.{@link Parser//setErrorHandler setErrorHandler}(new {@link BailErrorStrategy}());
      - * 
      - * - *

      - * If it does not get a syntax error, then we're done. If it does get a syntax - * error, we need to retry with the combined SLL/LL strategy.

      - * - *

      - * The reason this works is as follows. If there are no SLL conflicts, then the - * grammar is SLL (at least for that input set). If there is an SLL conflict, - * the full LL analysis must yield a set of viable alternatives which is a - * subset of the alternatives reported by SLL. If the LL set is a singleton, - * then the grammar is LL but not SLL. If the LL set is the same size as the SLL - * set, the decision is SLL. If the LL set has size > 1, then that decision - * is truly ambiguous on the current input. If the LL set is smaller, then the - * SLL conflict resolution might choose an alternative that the full LL would - * rule out as a possibility based upon better context information. If that's - * the case, then the SLL parse will definitely get an error because the full LL - * analysis says it's not viable. If SLL conflict resolution chooses an - * alternative within the LL set, them both SLL and LL would choose the same - * alternative because they both choose the minimum of multiple conflicting - * alternatives.

      - * - *

      - * Let's say we have a set of SLL conflicting alternatives {@code {1, 2, 3}} and - * a smaller LL set called s. If s is {@code {2, 3}}, then SLL - * parsing will get an error because SLL will pursue alternative 1. If - * s is {@code {1, 2}} or {@code {1, 3}} then both SLL and LL will - * choose the same alternative because alternative one is the minimum of either - * set. If s is {@code {2}} or {@code {3}} then SLL will get a syntax - * error. If s is {@code {1}} then SLL will succeed.

      - * - *

      - * Of course, if the input is invalid, then we will get an error for sure in - * both SLL and LL parsing. Erroneous input will therefore require 2 passes over - * the input.

      - */ -class ParserATNSimulator extends ATNSimulator { - constructor(parser, atn, decisionToDFA, sharedContextCache) { - super(atn, sharedContextCache); - this.parser = parser; - this.decisionToDFA = decisionToDFA; - // SLL, LL, or LL + exact ambig detection?// - this.predictionMode = PredictionMode.LL; - // LAME globals to avoid parameters!!!!! I need these down deep in predTransition - this._input = null; - this._startIndex = 0; - this._outerContext = null; - this._dfa = null; - /** - * Each prediction operation uses a cache for merge of prediction contexts. - * Don't keep around as it wastes huge amounts of memory. DoubleKeyMap - * isn't synchronized but we're ok since two threads shouldn't reuse same - * parser/atnsim object because it can only handle one input at a time. - * This maps graphs a and b to merged result c. (a,b)→c. We can avoid - * the merge if we ever see a and b again. Note that (b,a)→c should - * also be examined during cache lookup. - */ - this.mergeCache = null; - this.debug = false; - this.debug_closure = false; - this.debug_add = false; - this.debug_list_atn_decisions = false; - this.dfa_debug = false; - this.retry_debug = false; - } - - reset() {} - - adaptivePredict(input, decision, outerContext) { - if (this.debug || this.debug_list_atn_decisions) { - console.log("adaptivePredict decision " + decision + - " exec LA(1)==" + this.getLookaheadName(input) + - " line " + input.LT(1).line + ":" + - input.LT(1).column); - } - this._input = input; - this._startIndex = input.index; - this._outerContext = outerContext; - - const dfa = this.decisionToDFA[decision]; - this._dfa = dfa; - const m = input.mark(); - const index = input.index; - - // Now we are certain to have a specific decision's DFA - // But, do we still need an initial state? - try { - let s0; - if (dfa.precedenceDfa) { - // the start state for a precedence DFA depends on the current - // parser precedence, and is provided by a DFA method. - s0 = dfa.getPrecedenceStartState(this.parser.getPrecedence()); - } else { - // the start state for a "regular" DFA is just s0 - s0 = dfa.s0; - } - if (s0===null) { - if (outerContext===null) { - outerContext = RuleContext.EMPTY; - } - if (this.debug || this.debug_list_atn_decisions) { - console.log("predictATN decision " + dfa.decision + - " exec LA(1)==" + this.getLookaheadName(input) + - ", outerContext=" + outerContext.toString(this.parser.ruleNames)); - } - - const fullCtx = false; - let s0_closure = this.computeStartState(dfa.atnStartState, RuleContext.EMPTY, fullCtx); - - if( dfa.precedenceDfa) { - // If this is a precedence DFA, we use applyPrecedenceFilter - // to convert the computed start state to a precedence start - // state. We then use DFA.setPrecedenceStartState to set the - // appropriate start state for the precedence level rather - // than simply setting DFA.s0. - // - dfa.s0.configs = s0_closure; // not used for prediction but useful to know start configs anyway - s0_closure = this.applyPrecedenceFilter(s0_closure); - s0 = this.addDFAState(dfa, new DFAState(null, s0_closure)); - dfa.setPrecedenceStartState(this.parser.getPrecedence(), s0); - } else { - s0 = this.addDFAState(dfa, new DFAState(null, s0_closure)); - dfa.s0 = s0; - } - } - const alt = this.execATN(dfa, s0, input, index, outerContext); - if (this.debug) { - console.log("DFA after predictATN: " + dfa.toString(this.parser.literalNames, this.parser.symbolicNames)); - } - return alt; - } finally { - this._dfa = null; - this.mergeCache = null; // wack cache after each prediction - input.seek(index); - input.release(m); - } - } - - /** - * Performs ATN simulation to compute a predicted alternative based - * upon the remaining input, but also updates the DFA cache to avoid - * having to traverse the ATN again for the same input sequence. - * - * There are some key conditions we're looking for after computing a new - * set of ATN configs (proposed DFA state): - * if the set is empty, there is no viable alternative for current symbol - * does the state uniquely predict an alternative? - * does the state have a conflict that would prevent us from - * putting it on the work list? - * - * We also have some key operations to do: - * add an edge from previous DFA state to potentially new DFA state, D, - * upon current symbol but only if adding to work list, which means in all - * cases except no viable alternative (and possibly non-greedy decisions?) - * collecting predicates and adding semantic context to DFA accept states - * adding rule context to context-sensitive DFA accept states - * consuming an input symbol - * reporting a conflict - * reporting an ambiguity - * reporting a context sensitivity - * reporting insufficient predicates - * - * cover these cases: - * dead end - * single alt - * single alt + preds - * conflict - * conflict + preds - * - */ - execATN(dfa, s0, input, startIndex, outerContext ) { - if (this.debug || this.debug_list_atn_decisions) { - console.log("execATN decision " + dfa.decision + - " exec LA(1)==" + this.getLookaheadName(input) + - " line " + input.LT(1).line + ":" + input.LT(1).column); - } - let alt; - let previousD = s0; - - if (this.debug) { - console.log("s0 = " + s0); - } - let t = input.LA(1); - while(true) { // while more work - let D = this.getExistingTargetState(previousD, t); - if(D===null) { - D = this.computeTargetState(dfa, previousD, t); - } - if(D===ATNSimulator.ERROR) { - // if any configs in previous dipped into outer context, that - // means that input up to t actually finished entry rule - // at least for SLL decision. Full LL doesn't dip into outer - // so don't need special case. - // We will get an error no matter what so delay until after - // decision; better error message. Also, no reachable target - // ATN states in SLL implies LL will also get nowhere. - // If conflict in states that dip out, choose min since we - // will get error no matter what. - const e = this.noViableAlt(input, outerContext, previousD.configs, startIndex); - input.seek(startIndex); - alt = this.getSynValidOrSemInvalidAltThatFinishedDecisionEntryRule(previousD.configs, outerContext); - if(alt!==ATN.INVALID_ALT_NUMBER) { - return alt; - } else { - throw e; - } - } - if(D.requiresFullContext && this.predictionMode !== PredictionMode.SLL) { - // IF PREDS, MIGHT RESOLVE TO SINGLE ALT => SLL (or syntax error) - let conflictingAlts = null; - if (D.predicates!==null) { - if (this.debug) { - console.log("DFA state has preds in DFA sim LL failover"); - } - const conflictIndex = input.index; - if(conflictIndex !== startIndex) { - input.seek(startIndex); - } - conflictingAlts = this.evalSemanticContext(D.predicates, outerContext, true); - if (conflictingAlts.length===1) { - if(this.debug) { - console.log("Full LL avoided"); - } - return conflictingAlts.minValue(); - } - if (conflictIndex !== startIndex) { - // restore the index so reporting the fallback to full - // context occurs with the index at the correct spot - input.seek(conflictIndex); - } - } - if (this.dfa_debug) { - console.log("ctx sensitive state " + outerContext +" in " + D); - } - const fullCtx = true; - const s0_closure = this.computeStartState(dfa.atnStartState, outerContext, fullCtx); - this.reportAttemptingFullContext(dfa, conflictingAlts, D.configs, startIndex, input.index); - alt = this.execATNWithFullContext(dfa, D, s0_closure, input, startIndex, outerContext); - return alt; - } - if (D.isAcceptState) { - if (D.predicates===null) { - return D.prediction; - } - const stopIndex = input.index; - input.seek(startIndex); - const alts = this.evalSemanticContext(D.predicates, outerContext, true); - if (alts.length===0) { - throw this.noViableAlt(input, outerContext, D.configs, startIndex); - } else if (alts.length===1) { - return alts.minValue(); - } else { - // report ambiguity after predicate evaluation to make sure the correct set of ambig alts is reported. - this.reportAmbiguity(dfa, D, startIndex, stopIndex, false, alts, D.configs); - return alts.minValue(); - } - } - previousD = D; - - if (t !== Token.EOF) { - input.consume(); - t = input.LA(1); - } - } - } - - /** - * Get an existing target state for an edge in the DFA. If the target state - * for the edge has not yet been computed or is otherwise not available, - * this method returns {@code null}. - * - * @param previousD The current DFA state - * @param t The next input symbol - * @return The existing target DFA state for the given input symbol - * {@code t}, or {@code null} if the target state for this edge is not - * already cached - */ - getExistingTargetState(previousD, t) { - const edges = previousD.edges; - if (edges===null) { - return null; - } else { - return edges[t + 1] || null; - } - } - - /** - * Compute a target state for an edge in the DFA, and attempt to add the - * computed state and corresponding edge to the DFA. - * - * @param dfa The DFA - * @param previousD The current DFA state - * @param t The next input symbol - * - * @return The computed target DFA state for the given input symbol - * {@code t}. If {@code t} does not lead to a valid DFA state, this method - * returns {@link //ERROR - */ - computeTargetState(dfa, previousD, t) { - const reach = this.computeReachSet(previousD.configs, t, false); - if(reach===null) { - this.addDFAEdge(dfa, previousD, t, ATNSimulator.ERROR); - return ATNSimulator.ERROR; - } - // create new target state; we'll add to DFA after it's complete - let D = new DFAState(null, reach); - - const predictedAlt = this.getUniqueAlt(reach); - - if (this.debug) { - const altSubSets = PredictionMode.getConflictingAltSubsets(reach); - console.log("SLL altSubSets=" + Utils.arrayToString(altSubSets) + - /*", previous=" + previousD.configs + */ - ", configs=" + reach + - ", predict=" + predictedAlt + - ", allSubsetsConflict=" + - PredictionMode.allSubsetsConflict(altSubSets) + ", conflictingAlts=" + - this.getConflictingAlts(reach)); - } - if (predictedAlt!==ATN.INVALID_ALT_NUMBER) { - // NO CONFLICT, UNIQUELY PREDICTED ALT - D.isAcceptState = true; - D.configs.uniqueAlt = predictedAlt; - D.prediction = predictedAlt; - } else if (PredictionMode.hasSLLConflictTerminatingPrediction(this.predictionMode, reach)) { - // MORE THAN ONE VIABLE ALTERNATIVE - D.configs.conflictingAlts = this.getConflictingAlts(reach); - D.requiresFullContext = true; - // in SLL-only mode, we will stop at this state and return the minimum alt - D.isAcceptState = true; - D.prediction = D.configs.conflictingAlts.minValue(); - } - if (D.isAcceptState && D.configs.hasSemanticContext) { - this.predicateDFAState(D, this.atn.getDecisionState(dfa.decision)); - if( D.predicates!==null) { - D.prediction = ATN.INVALID_ALT_NUMBER; - } - } - // all adds to dfa are done after we've created full D state - D = this.addDFAEdge(dfa, previousD, t, D); - return D; - } - - predicateDFAState(dfaState, decisionState) { - // We need to test all predicates, even in DFA states that - // uniquely predict alternative. - const nalts = decisionState.transitions.length; - // Update DFA so reach becomes accept state with (predicate,alt) - // pairs if preds found for conflicting alts - const altsToCollectPredsFrom = this.getConflictingAltsOrUniqueAlt(dfaState.configs); - const altToPred = this.getPredsForAmbigAlts(altsToCollectPredsFrom, dfaState.configs, nalts); - if (altToPred!==null) { - dfaState.predicates = this.getPredicatePredictions(altsToCollectPredsFrom, altToPred); - dfaState.prediction = ATN.INVALID_ALT_NUMBER; // make sure we use preds - } else { - // There are preds in configs but they might go away - // when OR'd together like {p}? || NONE == NONE. If neither - // alt has preds, resolve to min alt - dfaState.prediction = altsToCollectPredsFrom.minValue(); - } - } - -// comes back with reach.uniqueAlt set to a valid alt - execATNWithFullContext(dfa, D, // how far we got before failing over - s0, - input, - startIndex, - outerContext) { - if (this.debug || this.debug_list_atn_decisions) { - console.log("execATNWithFullContext "+s0); - } - const fullCtx = true; - let foundExactAmbig = false; - let reach; - let previous = s0; - input.seek(startIndex); - let t = input.LA(1); - let predictedAlt = -1; - while (true) { // while more work - reach = this.computeReachSet(previous, t, fullCtx); - if (reach===null) { - // if any configs in previous dipped into outer context, that - // means that input up to t actually finished entry rule - // at least for LL decision. Full LL doesn't dip into outer - // so don't need special case. - // We will get an error no matter what so delay until after - // decision; better error message. Also, no reachable target - // ATN states in SLL implies LL will also get nowhere. - // If conflict in states that dip out, choose min since we - // will get error no matter what. - const e = this.noViableAlt(input, outerContext, previous, startIndex); - input.seek(startIndex); - const alt = this.getSynValidOrSemInvalidAltThatFinishedDecisionEntryRule(previous, outerContext); - if(alt!==ATN.INVALID_ALT_NUMBER) { - return alt; - } else { - throw e; - } - } - const altSubSets = PredictionMode.getConflictingAltSubsets(reach); - if(this.debug) { - console.log("LL altSubSets=" + altSubSets + ", predict=" + - PredictionMode.getUniqueAlt(altSubSets) + ", resolvesToJustOneViableAlt=" + - PredictionMode.resolvesToJustOneViableAlt(altSubSets)); - } - reach.uniqueAlt = this.getUniqueAlt(reach); - // unique prediction? - if(reach.uniqueAlt!==ATN.INVALID_ALT_NUMBER) { - predictedAlt = reach.uniqueAlt; - break; - } else if (this.predictionMode !== PredictionMode.LL_EXACT_AMBIG_DETECTION) { - predictedAlt = PredictionMode.resolvesToJustOneViableAlt(altSubSets); - if(predictedAlt !== ATN.INVALID_ALT_NUMBER) { - break; - } - } else { - // In exact ambiguity mode, we never try to terminate early. - // Just keeps scarfing until we know what the conflict is - if (PredictionMode.allSubsetsConflict(altSubSets) && PredictionMode.allSubsetsEqual(altSubSets)) { - foundExactAmbig = true; - predictedAlt = PredictionMode.getSingleViableAlt(altSubSets); - break; - } - // else there are multiple non-conflicting subsets or - // we're not sure what the ambiguity is yet. - // So, keep going. - } - previous = reach; - if( t !== Token.EOF) { - input.consume(); - t = input.LA(1); - } - } - // If the configuration set uniquely predicts an alternative, - // without conflict, then we know that it's a full LL decision - // not SLL. - if (reach.uniqueAlt !== ATN.INVALID_ALT_NUMBER ) { - this.reportContextSensitivity(dfa, predictedAlt, reach, startIndex, input.index); - return predictedAlt; - } - // We do not check predicates here because we have checked them - // on-the-fly when doing full context prediction. - - // - // In non-exact ambiguity detection mode, we might actually be able to - // detect an exact ambiguity, but I'm not going to spend the cycles - // needed to check. We only emit ambiguity warnings in exact ambiguity - // mode. - // - // For example, we might know that we have conflicting configurations. - // But, that does not mean that there is no way forward without a - // conflict. It's possible to have nonconflicting alt subsets as in: - - // altSubSets=[{1, 2}, {1, 2}, {1}, {1, 2}] - - // from - // - // [(17,1,[5 $]), (13,1,[5 10 $]), (21,1,[5 10 $]), (11,1,[$]), - // (13,2,[5 10 $]), (21,2,[5 10 $]), (11,2,[$])] - // - // In this case, (17,1,[5 $]) indicates there is some next sequence that - // would resolve this without conflict to alternative 1. Any other viable - // next sequence, however, is associated with a conflict. We stop - // looking for input because no amount of further lookahead will alter - // the fact that we should predict alternative 1. We just can't say for - // sure that there is an ambiguity without looking further. - - this.reportAmbiguity(dfa, D, startIndex, input.index, foundExactAmbig, null, reach); - - return predictedAlt; - } - - computeReachSet(closure, t, fullCtx) { - if (this.debug) { - console.log("in computeReachSet, starting closure: " + closure); - } - if( this.mergeCache===null) { - this.mergeCache = new DoubleDict(); - } - const intermediate = new ATNConfigSet(fullCtx); - - // Configurations already in a rule stop state indicate reaching the end - // of the decision rule (local context) or end of the start rule (full - // context). Once reached, these configurations are never updated by a - // closure operation, so they are handled separately for the performance - // advantage of having a smaller intermediate set when calling closure. - // - // For full-context reach operations, separate handling is required to - // ensure that the alternative matching the longest overall sequence is - // chosen when multiple such configurations can match the input. - - let skippedStopStates = null; - - // First figure out where we can reach on input t - for (let i=0; iWhen {@code lookToEndOfRule} is true, this method uses - * {@link ATN//nextTokens} for each configuration in {@code configs} which is - * not already in a rule stop state to see if a rule stop state is reachable - * from the configuration via epsilon-only transitions.

      - * - * @param configs the configuration set to update - * @param lookToEndOfRule when true, this method checks for rule stop states - * reachable by epsilon-only transitions from each configuration in - * {@code configs}. - * - * @return {@code configs} if all configurations in {@code configs} are in a - * rule stop state, otherwise return a new configuration set containing only - * the configurations from {@code configs} which are in a rule stop state - */ - removeAllConfigsNotInRuleStopState(configs, lookToEndOfRule) { - if (PredictionMode.allConfigsInRuleStopStates(configs)) { - return configs; - } - const result = new ATNConfigSet(configs.fullCtx); - for(let i=0; i - *
    • Evaluate the precedence predicates for each configuration using - * {@link SemanticContext//evalPrecedence}.
    • - *
    • Remove all configurations which predict an alternative greater than - * 1, for which another configuration that predicts alternative 1 is in the - * same ATN state with the same prediction context. This transformation is - * valid for the following reasons: - *
        - *
      • The closure block cannot contain any epsilon transitions which bypass - * the body of the closure, so all states reachable via alternative 1 are - * part of the precedence alternatives of the transformed left-recursive - * rule.
      • - *
      • The "primary" portion of a left recursive rule cannot contain an - * epsilon transition, so the only way an alternative other than 1 can exist - * in a state that is also reachable via alternative 1 is by nesting calls - * to the left-recursive rule, with the outer calls not being at the - * preferred precedence level.
      • - *
      - *
    • - * - * - *

      - * The prediction context must be considered by this filter to address - * situations like the following. - *

      - * - *
      -     * grammar TA;
      -     * prog: statement* EOF;
      -     * statement: letterA | statement letterA 'b' ;
      -     * letterA: 'a';
      -     * 
      - *
      - *

      - * If the above grammar, the ATN state immediately before the token - * reference {@code 'a'} in {@code letterA} is reachable from the left edge - * of both the primary and closure blocks of the left-recursive rule - * {@code statement}. The prediction context associated with each of these - * configurations distinguishes between them, and prevents the alternative - * which stepped out to {@code prog} (and then back in to {@code statement} - * from being eliminated by the filter. - *

      - * - * @param configs The configuration set computed by - * {@link //computeStartState} as the start state for the DFA. - * @return The transformed configuration set representing the start state - * for a precedence DFA at a particular precedence level (determined by - * calling {@link Parser//getPrecedence}) - */ - applyPrecedenceFilter(configs) { - let config; - const statesFromAlt1 = []; - const configSet = new ATNConfigSet(configs.fullCtx); - for(let i=0; i1 - // (basically a graph subtraction algorithm). - if (!config.precedenceFilterSuppressed) { - const context = statesFromAlt1[config.state.stateNumber] || null; - if (context!==null && context.equals(config.context)) { - // eliminated - continue; - } - } - configSet.add(config, this.mergeCache); - } - return configSet; - } - - getReachableTarget(trans, ttype) { - if (trans.matches(ttype, 0, this.atn.maxTokenType)) { - return trans.target; - } else { - return null; - } - } - - getPredsForAmbigAlts(ambigAlts, configs, nalts) { - // REACH=[1|1|[]|0:0, 1|2|[]|0:1] - // altToPred starts as an array of all null contexts. The entry at index i - // corresponds to alternative i. altToPred[i] may have one of three values: - // 1. null: no ATNConfig c is found such that c.alt==i - // 2. SemanticContext.NONE: At least one ATNConfig c exists such that - // c.alt==i and c.semanticContext==SemanticContext.NONE. In other words, - // alt i has at least one unpredicated config. - // 3. Non-NONE Semantic Context: There exists at least one, and for all - // ATNConfig c such that c.alt==i, c.semanticContext!=SemanticContext.NONE. - // - // From this, it is clear that NONE||anything==NONE. - // - let altToPred = []; - for(let i=0;i - * The default implementation of this method uses the following - * algorithm to identify an ATN configuration which successfully parsed the - * decision entry rule. Choosing such an alternative ensures that the - * {@link ParserRuleContext} returned by the calling rule will be complete - * and valid, and the syntax error will be reported later at a more - * localized location.

      - * - *
        - *
      • If a syntactically valid path or paths reach the end of the decision rule and - * they are semantically valid if predicated, return the min associated alt.
      • - *
      • Else, if a semantically invalid but syntactically valid path exist - * or paths exist, return the minimum associated alt. - *
      • - *
      • Otherwise, return {@link ATN//INVALID_ALT_NUMBER}.
      • - *
      - * - *

      - * In some scenarios, the algorithm described above could predict an - * alternative which will result in a {@link FailedPredicateException} in - * the parser. Specifically, this could occur if the only configuration - * capable of successfully parsing to the end of the decision rule is - * blocked by a semantic predicate. By choosing this alternative within - * {@link //adaptivePredict} instead of throwing a - * {@link NoViableAltException}, the resulting - * {@link FailedPredicateException} in the parser will identify the specific - * predicate which is preventing the parser from successfully parsing the - * decision rule, which helps developers identify and correct logic errors - * in semantic predicates. - *

      - * - * @param configs The ATN configurations which were valid immediately before - * the {@link //ERROR} state was reached - * @param outerContext The is the \gamma_0 initial parser context from the paper - * or the parser stack at the instant before prediction commences. - * - * @return The value to return from {@link //adaptivePredict}, or - * {@link ATN//INVALID_ALT_NUMBER} if a suitable alternative was not - * identified and {@link //adaptivePredict} should report an error instead - */ - getSynValidOrSemInvalidAltThatFinishedDecisionEntryRule(configs, outerContext) { - const cfgs = this.splitAccordingToSemanticValidity(configs, outerContext); - const semValidConfigs = cfgs[0]; - const semInvalidConfigs = cfgs[1]; - let alt = this.getAltThatFinishedDecisionEntryRule(semValidConfigs); - if (alt!==ATN.INVALID_ALT_NUMBER) { // semantically/syntactically viable path exists - return alt; - } - // Is there a syntactically valid path with a failed pred? - if (semInvalidConfigs.items.length>0) { - alt = this.getAltThatFinishedDecisionEntryRule(semInvalidConfigs); - if (alt!==ATN.INVALID_ALT_NUMBER) { // syntactically viable path exists - return alt; - } - } - return ATN.INVALID_ALT_NUMBER; - } - - getAltThatFinishedDecisionEntryRule(configs) { - const alts = []; - for(let i=0;i0 || ((c.state instanceof RuleStopState) && c.context.hasEmptyPath())) { - if(alts.indexOf(c.alt)<0) { - alts.push(c.alt); - } - } - } - if (alts.length===0) { - return ATN.INVALID_ALT_NUMBER; - } else { - return Math.min.apply(null, alts); - } - } - - /** - * Walk the list of configurations and split them according to - * those that have preds evaluating to true/false. If no pred, assume - * true pred and include in succeeded set. Returns Pair of sets. - * - * Create a new set so as not to alter the incoming parameter. - * - * Assumption: the input stream has been restored to the starting point - * prediction, which is where predicates need to evaluate.*/ - splitAccordingToSemanticValidity( configs, outerContext) { - const succeeded = new ATNConfigSet(configs.fullCtx); - const failed = new ATNConfigSet(configs.fullCtx); - for(let i=0;i50) { - throw "problem"; - } - } - if (config.state instanceof RuleStopState) { - // We hit rule end. If we have context info, use it - // run thru all possible stack tops in ctx - if (! config.context.isEmpty()) { - for (let i =0; i 0. - if (this._dfa !== null && this._dfa.precedenceDfa) { - if (t.outermostPrecedenceReturn === this._dfa.atnStartState.ruleIndex) { - c.precedenceFilterSuppressed = true; - } - } - - c.reachesIntoOuterContext += 1; - if (closureBusy.add(c)!==c) { - // avoid infinite recursion for right-recursive rules - continue; - } - configs.dipsIntoOuterContext = true; // TODO: can remove? only care when we add to set per middle of this method - newDepth -= 1; - if (this.debug) { - console.log("dips into outer ctx: " + c); - } - } else { - if (!t.isEpsilon && closureBusy.add(c)!==c){ - // avoid infinite recursion for EOF* and EOF+ - continue; - } - if (t instanceof RuleTransition) { - // latch when newDepth goes negative - once we step out of the entry context we can't return - if (newDepth >= 0) { - newDepth += 1; - } - } - } - this.closureCheckingStopState(c, configs, closureBusy, continueCollecting, fullCtx, newDepth, treatEofAsEpsilon); - } - } - } - - canDropLoopEntryEdgeInLeftRecursiveRule(config) { - // return False - const p = config.state; - // First check to see if we are in StarLoopEntryState generated during - // left-recursion elimination. For efficiency, also check if - // the context has an empty stack case. If so, it would mean - // global FOLLOW so we can't perform optimization - // Are we the special loop entry/exit state? or SLL wildcard - if(p.stateType !== ATNState.STAR_LOOP_ENTRY) - return false; - if(p.stateType !== ATNState.STAR_LOOP_ENTRY || !p.isPrecedenceDecision || - config.context.isEmpty() || config.context.hasEmptyPath()) - return false; - - // Require all return states to return back to the same rule that p is in. - const numCtxs = config.context.length; - for(let i=0; i=0) { - return this.parser.ruleNames[index]; - } else { - return ""; - } - } - - getEpsilonTarget(config, t, collectPredicates, inContext, fullCtx, treatEofAsEpsilon) { - switch(t.serializationType) { - case Transition.RULE: - return this.ruleTransition(config, t); - case Transition.PRECEDENCE: - return this.precedenceTransition(config, t, collectPredicates, inContext, fullCtx); - case Transition.PREDICATE: - return this.predTransition(config, t, collectPredicates, inContext, fullCtx); - case Transition.ACTION: - return this.actionTransition(config, t); - case Transition.EPSILON: - return new ATNConfig({state:t.target}, config); - case Transition.ATOM: - case Transition.RANGE: - case Transition.SET: - // EOF transitions act like epsilon transitions after the first EOF - // transition is traversed - if (treatEofAsEpsilon) { - if (t.matches(Token.EOF, 0, 1)) { - return new ATNConfig({state: t.target}, config); - } - } - return null; - default: - return null; - } - } - - actionTransition(config, t) { - if (this.debug) { - const index = t.actionIndex === -1 ? 65535 : t.actionIndex; - console.log("ACTION edge " + t.ruleIndex + ":" + index); - } - return new ATNConfig({state:t.target}, config); - } - - precedenceTransition(config, pt, collectPredicates, inContext, fullCtx) { - if (this.debug) { - console.log("PRED (collectPredicates=" + collectPredicates + ") " + - pt.precedence + ">=_p, ctx dependent=true"); - if (this.parser!==null) { - console.log("context surrounding pred is " + Utils.arrayToString(this.parser.getRuleInvocationStack())); - } - } - let c = null; - if (collectPredicates && inContext) { - if (fullCtx) { - // In full context mode, we can evaluate predicates on-the-fly - // during closure, which dramatically reduces the size of - // the config sets. It also obviates the need to test predicates - // later during conflict resolution. - const currentPosition = this._input.index; - this._input.seek(this._startIndex); - const predSucceeds = pt.getPredicate().evaluate(this.parser, this._outerContext); - this._input.seek(currentPosition); - if (predSucceeds) { - c = new ATNConfig({state:pt.target}, config); // no pred context - } - } else { - const newSemCtx = SemanticContext.andContext(config.semanticContext, pt.getPredicate()); - c = new ATNConfig({state:pt.target, semanticContext:newSemCtx}, config); - } - } else { - c = new ATNConfig({state:pt.target}, config); - } - if (this.debug) { - console.log("config from pred transition=" + c); - } - return c; - } - - predTransition(config, pt, collectPredicates, inContext, fullCtx) { - if (this.debug) { - console.log("PRED (collectPredicates=" + collectPredicates + ") " + pt.ruleIndex + - ":" + pt.predIndex + ", ctx dependent=" + pt.isCtxDependent); - if (this.parser!==null) { - console.log("context surrounding pred is " + Utils.arrayToString(this.parser.getRuleInvocationStack())); - } - } - let c = null; - if (collectPredicates && ((pt.isCtxDependent && inContext) || ! pt.isCtxDependent)) { - if (fullCtx) { - // In full context mode, we can evaluate predicates on-the-fly - // during closure, which dramatically reduces the size of - // the config sets. It also obviates the need to test predicates - // later during conflict resolution. - const currentPosition = this._input.index; - this._input.seek(this._startIndex); - const predSucceeds = pt.getPredicate().evaluate(this.parser, this._outerContext); - this._input.seek(currentPosition); - if (predSucceeds) { - c = new ATNConfig({state:pt.target}, config); // no pred context - } - } else { - const newSemCtx = SemanticContext.andContext(config.semanticContext, pt.getPredicate()); - c = new ATNConfig({state:pt.target, semanticContext:newSemCtx}, config); - } - } else { - c = new ATNConfig({state:pt.target}, config); - } - if (this.debug) { - console.log("config from pred transition=" + c); - } - return c; - } - - ruleTransition(config, t) { - if (this.debug) { - console.log("CALL rule " + this.getRuleName(t.target.ruleIndex) + ", ctx=" + config.context); - } - const returnState = t.followState; - const newContext = SingletonPredictionContext.create(config.context, returnState.stateNumber); - return new ATNConfig({state:t.target, context:newContext}, config ); - } - - getConflictingAlts(configs) { - const altsets = PredictionMode.getConflictingAltSubsets(configs); - return PredictionMode.getAlts(altsets); - } - - /** - * Sam pointed out a problem with the previous definition, v3, of - * ambiguous states. If we have another state associated with conflicting - * alternatives, we should keep going. For example, the following grammar - * - * s : (ID | ID ID?) ';' ; - * - * When the ATN simulation reaches the state before ';', it has a DFA - * state that looks like: [12|1|[], 6|2|[], 12|2|[]]. Naturally - * 12|1|[] and 12|2|[] conflict, but we cannot stop processing this node - * because alternative to has another way to continue, via [6|2|[]]. - * The key is that we have a single state that has config's only associated - * with a single alternative, 2, and crucially the state transitions - * among the configurations are all non-epsilon transitions. That means - * we don't consider any conflicts that include alternative 2. So, we - * ignore the conflict between alts 1 and 2. We ignore a set of - * conflicting alts when there is an intersection with an alternative - * associated with a single alt state in the state→config-list map. - * - * It's also the case that we might have two conflicting configurations but - * also a 3rd nonconflicting configuration for a different alternative: - * [1|1|[], 1|2|[], 8|3|[]]. This can come about from grammar: - * - * a : A | A | A B ; - * - * After matching input A, we reach the stop state for rule A, state 1. - * State 8 is the state right before B. Clearly alternatives 1 and 2 - * conflict and no amount of further lookahead will separate the two. - * However, alternative 3 will be able to continue and so we do not - * stop working on this state. In the previous example, we're concerned - * with states associated with the conflicting alternatives. Here alt - * 3 is not associated with the conflicting configs, but since we can continue - * looking for input reasonably, I don't declare the state done. We - * ignore a set of conflicting alts when we have an alternative - * that we still need to pursue - */ - getConflictingAltsOrUniqueAlt(configs) { - let conflictingAlts = null; - if (configs.uniqueAlt!== ATN.INVALID_ALT_NUMBER) { - conflictingAlts = new BitSet(); - conflictingAlts.add(configs.uniqueAlt); - } else { - conflictingAlts = configs.conflictingAlts; - } - return conflictingAlts; - } - - getTokenName(t) { - if (t===Token.EOF) { - return "EOF"; - } - if( this.parser!==null && this.parser.literalNames!==null) { - if (t >= this.parser.literalNames.length && t >= this.parser.symbolicNames.length) { - console.log("" + t + " ttype out of range: " + this.parser.literalNames); - console.log("" + this.parser.getInputStream().getTokens()); - } else { - const name = this.parser.literalNames[t] || this.parser.symbolicNames[t]; - return name + "<" + t + ">"; - } - } - return "" + t; - } - - getLookaheadName(input) { - return this.getTokenName(input.LA(1)); - } - - /** - * Used for debugging in adaptivePredict around execATN but I cut - * it out for clarity now that alg. works well. We can leave this - * "dead" code for a bit - */ - dumpDeadEndConfigs(nvae) { - console.log("dead end configs: "); - const decs = nvae.getDeadEndConfigs(); - for(let i=0; i0) { - const t = c.state.transitions[0]; - if (t instanceof AtomTransition) { - trans = "Atom "+ this.getTokenName(t.label); - } else if (t instanceof SetTransition) { - const neg = (t instanceof NotSetTransition); - trans = (neg ? "~" : "") + "Set " + t.set; - } - } - console.error(c.toString(this.parser, true) + ":" + trans); - } - } - - noViableAlt(input, outerContext, configs, startIndex) { - return new NoViableAltException(this.parser, input, input.get(startIndex), input.LT(1), configs, outerContext); - } - - getUniqueAlt(configs) { - let alt = ATN.INVALID_ALT_NUMBER; - for(let i=0;iIf {@code to} is {@code null}, this method returns {@code null}. - * Otherwise, this method returns the {@link DFAState} returned by calling - * {@link //addDFAState} for the {@code to} state.

      - * - * @param dfa The DFA - * @param from_ The source state for the edge - * @param t The input symbol - * @param to The target state for the edge - * - * @return If {@code to} is {@code null}, this method returns {@code null}; - * otherwise this method returns the result of calling {@link //addDFAState} - * on {@code to} - */ - addDFAEdge(dfa, from_, t, to) { - if( this.debug) { - console.log("EDGE " + from_ + " -> " + to + " upon " + this.getTokenName(t)); - } - if (to===null) { - return null; - } - to = this.addDFAState(dfa, to); // used existing if possible not incoming - if (from_===null || t < -1 || t > this.atn.maxTokenType) { - return to; - } - if (from_.edges===null) { - from_.edges = []; - } - from_.edges[t+1] = to; // connect - - if (this.debug) { - const literalNames = this.parser===null ? null : this.parser.literalNames; - const symbolicNames = this.parser===null ? null : this.parser.symbolicNames; - console.log("DFA=\n" + dfa.toString(literalNames, symbolicNames)); - } - return to; - } - - /** - * Add state {@code D} to the DFA if it is not already present, and return - * the actual instance stored in the DFA. If a state equivalent to {@code D} - * is already in the DFA, the existing state is returned. Otherwise this - * method returns {@code D} after adding it to the DFA. - * - *

      If {@code D} is {@link //ERROR}, this method returns {@link //ERROR} and - * does not change the DFA.

      - * - * @param dfa The dfa - * @param D The DFA state to add - * @return The state stored in the DFA. This will be either the existing - * state if {@code D} is already in the DFA, or {@code D} itself if the - * state was not already present - */ - addDFAState(dfa, D) { - if (D === ATNSimulator.ERROR) { - return D; - } - const existing = dfa.states.get(D); - if(existing!==null) { - return existing; - } - D.stateNumber = dfa.states.length; - if (! D.configs.readOnly) { - D.configs.optimizeConfigs(this); - D.configs.setReadonly(true); - } - dfa.states.add(D); - if (this.debug) { - console.log("adding new DFA state: " + D); - } - return D; - } - - reportAttemptingFullContext(dfa, conflictingAlts, configs, startIndex, stopIndex) { - if (this.debug || this.retry_debug) { - const interval = new Interval(startIndex, stopIndex + 1); - console.log("reportAttemptingFullContext decision=" + dfa.decision + ":" + configs + - ", input=" + this.parser.getTokenStream().getText(interval)); - } - if (this.parser!==null) { - this.parser.getErrorListenerDispatch().reportAttemptingFullContext(this.parser, dfa, startIndex, stopIndex, conflictingAlts, configs); - } - } - - reportContextSensitivity(dfa, prediction, configs, startIndex, stopIndex) { - if (this.debug || this.retry_debug) { - const interval = new Interval(startIndex, stopIndex + 1); - console.log("reportContextSensitivity decision=" + dfa.decision + ":" + configs + - ", input=" + this.parser.getTokenStream().getText(interval)); - } - if (this.parser!==null) { - this.parser.getErrorListenerDispatch().reportContextSensitivity(this.parser, dfa, startIndex, stopIndex, prediction, configs); - } - } - - // If context sensitive parsing, we know it's ambiguity not conflict// - reportAmbiguity(dfa, D, startIndex, stopIndex, - exact, ambigAlts, configs ) { - if (this.debug || this.retry_debug) { - const interval = new Interval(startIndex, stopIndex + 1); - console.log("reportAmbiguity " + ambigAlts + ":" + configs + - ", input=" + this.parser.getTokenStream().getText(interval)); - } - if (this.parser!==null) { - this.parser.getErrorListenerDispatch().reportAmbiguity(this.parser, dfa, startIndex, stopIndex, exact, ambigAlts, configs); - } - } -} - -module.exports = ParserATNSimulator; diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/PredictionMode.js b/reverse_engineering/node_modules/antlr4/src/antlr4/atn/PredictionMode.js deleted file mode 100644 index b2cf736..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/PredictionMode.js +++ /dev/null @@ -1,562 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const {Map, BitSet, AltDict, hashStuff} = require('./../Utils'); -const ATN = require('./ATN'); -const {RuleStopState} = require('./ATNState'); -const {ATNConfigSet} = require('./ATNConfigSet'); -const {ATNConfig} = require('./ATNConfig'); -const {SemanticContext} = require('./SemanticContext'); - -/** - * This enumeration defines the prediction modes available in ANTLR 4 along with - * utility methods for analyzing configuration sets for conflicts and/or - * ambiguities. - */ -const PredictionMode = { - /** - * The SLL(*) prediction mode. This prediction mode ignores the current - * parser context when making predictions. This is the fastest prediction - * mode, and provides correct results for many grammars. This prediction - * mode is more powerful than the prediction mode provided by ANTLR 3, but - * may result in syntax errors for grammar and input combinations which are - * not SLL. - * - *

      - * When using this prediction mode, the parser will either return a correct - * parse tree (i.e. the same parse tree that would be returned with the - * {@link //LL} prediction mode), or it will report a syntax error. If a - * syntax error is encountered when using the {@link //SLL} prediction mode, - * it may be due to either an actual syntax error in the input or indicate - * that the particular combination of grammar and input requires the more - * powerful {@link //LL} prediction abilities to complete successfully.

      - * - *

      - * This prediction mode does not provide any guarantees for prediction - * behavior for syntactically-incorrect inputs.

      - */ - SLL: 0, - - /** - * The LL(*) prediction mode. This prediction mode allows the current parser - * context to be used for resolving SLL conflicts that occur during - * prediction. This is the fastest prediction mode that guarantees correct - * parse results for all combinations of grammars with syntactically correct - * inputs. - * - *

      - * When using this prediction mode, the parser will make correct decisions - * for all syntactically-correct grammar and input combinations. However, in - * cases where the grammar is truly ambiguous this prediction mode might not - * report a precise answer for exactly which alternatives are - * ambiguous.

      - * - *

      - * This prediction mode does not provide any guarantees for prediction - * behavior for syntactically-incorrect inputs.

      - */ - LL: 1, - - /** - * - * The LL(*) prediction mode with exact ambiguity detection. In addition to - * the correctness guarantees provided by the {@link //LL} prediction mode, - * this prediction mode instructs the prediction algorithm to determine the - * complete and exact set of ambiguous alternatives for every ambiguous - * decision encountered while parsing. - * - *

      - * This prediction mode may be used for diagnosing ambiguities during - * grammar development. Due to the performance overhead of calculating sets - * of ambiguous alternatives, this prediction mode should be avoided when - * the exact results are not necessary.

      - * - *

      - * This prediction mode does not provide any guarantees for prediction - * behavior for syntactically-incorrect inputs.

      - */ - LL_EXACT_AMBIG_DETECTION: 2, - - /** - * - * Computes the SLL prediction termination condition. - * - *

      - * This method computes the SLL prediction termination condition for both of - * the following cases.

      - * - *
        - *
      • The usual SLL+LL fallback upon SLL conflict
      • - *
      • Pure SLL without LL fallback
      • - *
      - * - *

      COMBINED SLL+LL PARSING

      - * - *

      When LL-fallback is enabled upon SLL conflict, correct predictions are - * ensured regardless of how the termination condition is computed by this - * method. Due to the substantially higher cost of LL prediction, the - * prediction should only fall back to LL when the additional lookahead - * cannot lead to a unique SLL prediction.

      - * - *

      Assuming combined SLL+LL parsing, an SLL configuration set with only - * conflicting subsets should fall back to full LL, even if the - * configuration sets don't resolve to the same alternative (e.g. - * {@code {1,2}} and {@code {3,4}}. If there is at least one non-conflicting - * configuration, SLL could continue with the hopes that more lookahead will - * resolve via one of those non-conflicting configurations.

      - * - *

      Here's the prediction termination rule them: SLL (for SLL+LL parsing) - * stops when it sees only conflicting configuration subsets. In contrast, - * full LL keeps going when there is uncertainty.

      - * - *

      HEURISTIC

      - * - *

      As a heuristic, we stop prediction when we see any conflicting subset - * unless we see a state that only has one alternative associated with it. - * The single-alt-state thing lets prediction continue upon rules like - * (otherwise, it would admit defeat too soon):

      - * - *

      {@code [12|1|[], 6|2|[], 12|2|[]]. s : (ID | ID ID?) ';' ;}

      - * - *

      When the ATN simulation reaches the state before {@code ';'}, it has a - * DFA state that looks like: {@code [12|1|[], 6|2|[], 12|2|[]]}. Naturally - * {@code 12|1|[]} and {@code 12|2|[]} conflict, but we cannot stop - * processing this node because alternative to has another way to continue, - * via {@code [6|2|[]]}.

      - * - *

      It also let's us continue for this rule:

      - * - *

      {@code [1|1|[], 1|2|[], 8|3|[]] a : A | A | A B ;}

      - * - *

      After matching input A, we reach the stop state for rule A, state 1. - * State 8 is the state right before B. Clearly alternatives 1 and 2 - * conflict and no amount of further lookahead will separate the two. - * However, alternative 3 will be able to continue and so we do not stop - * working on this state. In the previous example, we're concerned with - * states associated with the conflicting alternatives. Here alt 3 is not - * associated with the conflicting configs, but since we can continue - * looking for input reasonably, don't declare the state done.

      - * - *

      PURE SLL PARSING

      - * - *

      To handle pure SLL parsing, all we have to do is make sure that we - * combine stack contexts for configurations that differ only by semantic - * predicate. From there, we can do the usual SLL termination heuristic.

      - * - *

      PREDICATES IN SLL+LL PARSING

      - * - *

      SLL decisions don't evaluate predicates until after they reach DFA stop - * states because they need to create the DFA cache that works in all - * semantic situations. In contrast, full LL evaluates predicates collected - * during start state computation so it can ignore predicates thereafter. - * This means that SLL termination detection can totally ignore semantic - * predicates.

      - * - *

      Implementation-wise, {@link ATNConfigSet} combines stack contexts but not - * semantic predicate contexts so we might see two configurations like the - * following.

      - * - *

      {@code (s, 1, x, {}), (s, 1, x', {p})}

      - * - *

      Before testing these configurations against others, we have to merge - * {@code x} and {@code x'} (without modifying the existing configurations). - * For example, we test {@code (x+x')==x''} when looking for conflicts in - * the following configurations.

      - * - *

      {@code (s, 1, x, {}), (s, 1, x', {p}), (s, 2, x'', {})}

      - * - *

      If the configuration set has predicates (as indicated by - * {@link ATNConfigSet//hasSemanticContext}), this algorithm makes a copy of - * the configurations to strip out all of the predicates so that a standard - * {@link ATNConfigSet} will merge everything ignoring predicates.

      - */ - hasSLLConflictTerminatingPrediction: function( mode, configs) { - // Configs in rule stop states indicate reaching the end of the decision - // rule (local context) or end of start rule (full context). If all - // configs meet this condition, then none of the configurations is able - // to match additional input so we terminate prediction. - // - if (PredictionMode.allConfigsInRuleStopStates(configs)) { - return true; - } - // pure SLL mode parsing - if (mode === PredictionMode.SLL) { - // Don't bother with combining configs from different semantic - // contexts if we can fail over to full LL; costs more time - // since we'll often fail over anyway. - if (configs.hasSemanticContext) { - // dup configs, tossing out semantic predicates - const dup = new ATNConfigSet(); - for(let i=0;iCan we stop looking ahead during ATN simulation or is there some - * uncertainty as to which alternative we will ultimately pick, after - * consuming more input? Even if there are partial conflicts, we might know - * that everything is going to resolve to the same minimum alternative. That - * means we can stop since no more lookahead will change that fact. On the - * other hand, there might be multiple conflicts that resolve to different - * minimums. That means we need more look ahead to decide which of those - * alternatives we should predict.

      - * - *

      The basic idea is to split the set of configurations {@code C}, into - * conflicting subsets {@code (s, _, ctx, _)} and singleton subsets with - * non-conflicting configurations. Two configurations conflict if they have - * identical {@link ATNConfig//state} and {@link ATNConfig//context} values - * but different {@link ATNConfig//alt} value, e.g. {@code (s, i, ctx, _)} - * and {@code (s, j, ctx, _)} for {@code i!=j}.

      - * - *

      Reduce these configuration subsets to the set of possible alternatives. - * You can compute the alternative subsets in one pass as follows:

      - * - *

      {@code A_s,ctx = {i | (s, i, ctx, _)}} for each configuration in - * {@code C} holding {@code s} and {@code ctx} fixed.

      - * - *

      Or in pseudo-code, for each configuration {@code c} in {@code C}:

      - * - *
      -     * map[c] U= c.{@link ATNConfig//alt alt} // map hash/equals uses s and x, not
      -     * alt and not pred
      -     * 
      - * - *

      The values in {@code map} are the set of {@code A_s,ctx} sets.

      - * - *

      If {@code |A_s,ctx|=1} then there is no conflict associated with - * {@code s} and {@code ctx}.

      - * - *

      Reduce the subsets to singletons by choosing a minimum of each subset. If - * the union of these alternative subsets is a singleton, then no amount of - * more lookahead will help us. We will always pick that alternative. If, - * however, there is more than one alternative, then we are uncertain which - * alternative to predict and must continue looking for resolution. We may - * or may not discover an ambiguity in the future, even if there are no - * conflicting subsets this round.

      - * - *

      The biggest sin is to terminate early because it means we've made a - * decision but were uncertain as to the eventual outcome. We haven't used - * enough lookahead. On the other hand, announcing a conflict too late is no - * big deal; you will still have the conflict. It's just inefficient. It - * might even look until the end of file.

      - * - *

      No special consideration for semantic predicates is required because - * predicates are evaluated on-the-fly for full LL prediction, ensuring that - * no configuration contains a semantic context during the termination - * check.

      - * - *

      CONFLICTING CONFIGS

      - * - *

      Two configurations {@code (s, i, x)} and {@code (s, j, x')}, conflict - * when {@code i!=j} but {@code x=x'}. Because we merge all - * {@code (s, i, _)} configurations together, that means that there are at - * most {@code n} configurations associated with state {@code s} for - * {@code n} possible alternatives in the decision. The merged stacks - * complicate the comparison of configuration contexts {@code x} and - * {@code x'}. Sam checks to see if one is a subset of the other by calling - * merge and checking to see if the merged result is either {@code x} or - * {@code x'}. If the {@code x} associated with lowest alternative {@code i} - * is the superset, then {@code i} is the only possible prediction since the - * others resolve to {@code min(i)} as well. However, if {@code x} is - * associated with {@code j>i} then at least one stack configuration for - * {@code j} is not in conflict with alternative {@code i}. The algorithm - * should keep going, looking for more lookahead due to the uncertainty.

      - * - *

      For simplicity, I'm doing a equality check between {@code x} and - * {@code x'} that lets the algorithm continue to consume lookahead longer - * than necessary. The reason I like the equality is of course the - * simplicity but also because that is the test you need to detect the - * alternatives that are actually in conflict.

      - * - *

      CONTINUE/STOP RULE

      - * - *

      Continue if union of resolved alternative sets from non-conflicting and - * conflicting alternative subsets has more than one alternative. We are - * uncertain about which alternative to predict.

      - * - *

      The complete set of alternatives, {@code [i for (_,i,_)]}, tells us which - * alternatives are still in the running for the amount of input we've - * consumed at this point. The conflicting sets let us to strip away - * configurations that won't lead to more states because we resolve - * conflicts to the configuration with a minimum alternate for the - * conflicting set.

      - * - *

      CASES

      - * - *
        - * - *
      • no conflicts and more than 1 alternative in set => continue
      • - * - *
      • {@code (s, 1, x)}, {@code (s, 2, x)}, {@code (s, 3, z)}, - * {@code (s', 1, y)}, {@code (s', 2, y)} yields non-conflicting set - * {@code {3}} U conflicting sets {@code min({1,2})} U {@code min({1,2})} = - * {@code {1,3}} => continue - *
      • - * - *
      • {@code (s, 1, x)}, {@code (s, 2, x)}, {@code (s', 1, y)}, - * {@code (s', 2, y)}, {@code (s'', 1, z)} yields non-conflicting set - * {@code {1}} U conflicting sets {@code min({1,2})} U {@code min({1,2})} = - * {@code {1}} => stop and predict 1
      • - * - *
      • {@code (s, 1, x)}, {@code (s, 2, x)}, {@code (s', 1, y)}, - * {@code (s', 2, y)} yields conflicting, reduced sets {@code {1}} U - * {@code {1}} = {@code {1}} => stop and predict 1, can announce - * ambiguity {@code {1,2}}
      • - * - *
      • {@code (s, 1, x)}, {@code (s, 2, x)}, {@code (s', 2, y)}, - * {@code (s', 3, y)} yields conflicting, reduced sets {@code {1}} U - * {@code {2}} = {@code {1,2}} => continue
      • - * - *
      • {@code (s, 1, x)}, {@code (s, 2, x)}, {@code (s', 3, y)}, - * {@code (s', 4, y)} yields conflicting, reduced sets {@code {1}} U - * {@code {3}} = {@code {1,3}} => continue
      • - * - *
      - * - *

      EXACT AMBIGUITY DETECTION

      - * - *

      If all states report the same conflicting set of alternatives, then we - * know we have the exact ambiguity set.

      - * - *

      |A_i|>1 and - * A_i = A_j for all i, j.

      - * - *

      In other words, we continue examining lookahead until all {@code A_i} - * have more than one alternative and all {@code A_i} are the same. If - * {@code A={{1,2}, {1,3}}}, then regular LL prediction would terminate - * because the resolved set is {@code {1}}. To determine what the real - * ambiguity is, we have to know whether the ambiguity is between one and - * two or one and three so we keep going. We can only stop prediction when - * we need exact ambiguity detection when the sets look like - * {@code A={{1,2}}} or {@code {{1,2},{1,2}}}, etc...

      - */ - resolvesToJustOneViableAlt: function(altsets) { - return PredictionMode.getSingleViableAlt(altsets); - }, - - /** - * Determines if every alternative subset in {@code altsets} contains more - * than one alternative. - * - * @param altsets a collection of alternative subsets - * @return {@code true} if every {@link BitSet} in {@code altsets} has - * {@link BitSet//cardinality cardinality} > 1, otherwise {@code false} - */ - allSubsetsConflict: function(altsets) { - return ! PredictionMode.hasNonConflictingAltSet(altsets); - }, - /** - * Determines if any single alternative subset in {@code altsets} contains - * exactly one alternative. - * - * @param altsets a collection of alternative subsets - * @return {@code true} if {@code altsets} contains a {@link BitSet} with - * {@link BitSet//cardinality cardinality} 1, otherwise {@code false} - */ - hasNonConflictingAltSet: function(altsets) { - for(let i=0;i1) { - return true; - } - } - return false; - }, - - - /** - * Determines if every alternative subset in {@code altsets} is equivalent. - * - * @param altsets a collection of alternative subsets - * @return {@code true} if every member of {@code altsets} is equal to the - * others, otherwise {@code false} - */ - allSubsetsEqual: function(altsets) { - let first = null; - for(let i=0;i - * map[c] U= c.{@link ATNConfig//alt alt} // map hash/equals uses s and x, not - * alt and not pred - * - */ - getConflictingAltSubsets: function(configs) { - const configToAlts = new Map(); - configToAlts.hashFunction = function(cfg) { hashStuff(cfg.state.stateNumber, cfg.context); }; - configToAlts.equalsFunction = function(c1, c2) { return c1.state.stateNumber === c2.state.stateNumber && c1.context.equals(c2.context);}; - configs.items.map(function(cfg) { - let alts = configToAlts.get(cfg); - if (alts === null) { - alts = new BitSet(); - configToAlts.put(cfg, alts); - } - alts.add(cfg.alt); - }); - return configToAlts.getValues(); - }, - - /** - * Get a map from state to alt subset from a configuration set. For each - * configuration {@code c} in {@code configs}: - * - *
      -     * map[c.{@link ATNConfig//state state}] U= c.{@link ATNConfig//alt alt}
      -     * 
      - */ - getStateToAltMap: function(configs) { - const m = new AltDict(); - configs.items.map(function(c) { - let alts = m.get(c.state); - if (alts === null) { - alts = new BitSet(); - m.put(c.state, alts); - } - alts.add(c.alt); - }); - return m; - }, - - hasStateAssociatedWithOneAlt: function(configs) { - const values = PredictionMode.getStateToAltMap(configs).values(); - for(let i=0;iI have scoped the {@link AND}, {@link OR}, and {@link Predicate} subclasses of - * {@link SemanticContext} within the scope of this outer class.

      - */ -class SemanticContext { - - hashCode() { - const hash = new Hash(); - this.updateHashCode(hash); - return hash.finish(); - } - - /** - * For context independent predicates, we evaluate them without a local - * context (i.e., null context). That way, we can evaluate them without - * having to create proper rule-specific context during prediction (as - * opposed to the parser, which creates them naturally). In a practical - * sense, this avoids a cast exception from RuleContext to myruleContext. - * - *

      For context dependent predicates, we must pass in a local context so that - * references such as $arg evaluate properly as _localctx.arg. We only - * capture context dependent predicates in the context in which we begin - * prediction, so we passed in the outer context here in case of context - * dependent predicate evaluation.

      - */ - evaluate(parser, outerContext) {} - - /** - * Evaluate the precedence predicates for the context and reduce the result. - * - * @param parser The parser instance. - * @param outerContext The current parser context object. - * @return The simplified semantic context after precedence predicates are - * evaluated, which will be one of the following values. - *
        - *
      • {@link //NONE}: if the predicate simplifies to {@code true} after - * precedence predicates are evaluated.
      • - *
      • {@code null}: if the predicate simplifies to {@code false} after - * precedence predicates are evaluated.
      • - *
      • {@code this}: if the semantic context is not changed as a result of - * precedence predicate evaluation.
      • - *
      • A non-{@code null} {@link SemanticContext}: the new simplified - * semantic context after precedence predicates are evaluated.
      • - *
      - */ - evalPrecedence(parser, outerContext) { - return this; - } - - static andContext(a, b) { - if (a === null || a === SemanticContext.NONE) { - return b; - } - if (b === null || b === SemanticContext.NONE) { - return a; - } - const result = new AND(a, b); - if (result.opnds.length === 1) { - return result.opnds[0]; - } else { - return result; - } - } - - static orContext(a, b) { - if (a === null) { - return b; - } - if (b === null) { - return a; - } - if (a === SemanticContext.NONE || b === SemanticContext.NONE) { - return SemanticContext.NONE; - } - const result = new OR(a, b); - if (result.opnds.length === 1) { - return result.opnds[0]; - } else { - return result; - } - } -} - - -class Predicate extends SemanticContext { - - constructor(ruleIndex, predIndex, isCtxDependent) { - super(); - this.ruleIndex = ruleIndex === undefined ? -1 : ruleIndex; - this.predIndex = predIndex === undefined ? -1 : predIndex; - this.isCtxDependent = isCtxDependent === undefined ? false : isCtxDependent; // e.g., $i ref in pred - } - - evaluate(parser, outerContext) { - const localctx = this.isCtxDependent ? outerContext : null; - return parser.sempred(localctx, this.ruleIndex, this.predIndex); - } - - updateHashCode(hash) { - hash.update(this.ruleIndex, this.predIndex, this.isCtxDependent); - } - - equals(other) { - if (this === other) { - return true; - } else if (!(other instanceof Predicate)) { - return false; - } else { - return this.ruleIndex === other.ruleIndex && - this.predIndex === other.predIndex && - this.isCtxDependent === other.isCtxDependent; - } - } - - toString() { - return "{" + this.ruleIndex + ":" + this.predIndex + "}?"; - } -} - -/** - * The default {@link SemanticContext}, which is semantically equivalent to - * a predicate of the form {@code {true}?} - */ -SemanticContext.NONE = new Predicate(); - - -class PrecedencePredicate extends SemanticContext { - - constructor(precedence) { - super(); - this.precedence = precedence === undefined ? 0 : precedence; - } - - evaluate(parser, outerContext) { - return parser.precpred(outerContext, this.precedence); - } - - evalPrecedence(parser, outerContext) { - if (parser.precpred(outerContext, this.precedence)) { - return SemanticContext.NONE; - } else { - return null; - } - } - - compareTo(other) { - return this.precedence - other.precedence; - } - - updateHashCode(hash) { - hash.update(this.precedence); - } - - equals(other) { - if (this === other) { - return true; - } else if (!(other instanceof PrecedencePredicate)) { - return false; - } else { - return this.precedence === other.precedence; - } - } - - toString() { - return "{" + this.precedence + ">=prec}?"; - } - - static filterPrecedencePredicates(set) { - const result = []; - set.values().map( function(context) { - if (context instanceof PrecedencePredicate) { - result.push(context); - } - }); - return result; - } -} - -class AND extends SemanticContext { - /** - * A semantic context which is true whenever none of the contained contexts - * is false - */ - constructor(a, b) { - super(); - const operands = new Set(); - if (a instanceof AND) { - a.opnds.map(function(o) { - operands.add(o); - }); - } else { - operands.add(a); - } - if (b instanceof AND) { - b.opnds.map(function(o) { - operands.add(o); - }); - } else { - operands.add(b); - } - const precedencePredicates = PrecedencePredicate.filterPrecedencePredicates(operands); - if (precedencePredicates.length > 0) { - // interested in the transition with the lowest precedence - let reduced = null; - precedencePredicates.map( function(p) { - if(reduced===null || p.precedence - * The evaluation of predicates by this context is short-circuiting, but - * unordered.

      - */ - evaluate(parser, outerContext) { - for (let i = 0; i < this.opnds.length; i++) { - if (!this.opnds[i].evaluate(parser, outerContext)) { - return false; - } - } - return true; - } - - evalPrecedence(parser, outerContext) { - let differs = false; - const operands = []; - for (let i = 0; i < this.opnds.length; i++) { - const context = this.opnds[i]; - const evaluated = context.evalPrecedence(parser, outerContext); - differs |= (evaluated !== context); - if (evaluated === null) { - // The AND context is false if any element is false - return null; - } else if (evaluated !== SemanticContext.NONE) { - // Reduce the result by skipping true elements - operands.push(evaluated); - } - } - if (!differs) { - return this; - } - if (operands.length === 0) { - // all elements were true, so the AND context is true - return SemanticContext.NONE; - } - let result = null; - operands.map(function(o) { - result = result === null ? o : SemanticContext.andContext(result, o); - }); - return result; - } - - toString() { - const s = this.opnds.map(o => o.toString()); - return (s.length > 3 ? s.slice(3) : s).join("&&"); - } -} - - -class OR extends SemanticContext { - /** - * A semantic context which is true whenever at least one of the contained - * contexts is true - */ - constructor(a, b) { - super(); - const operands = new Set(); - if (a instanceof OR) { - a.opnds.map(function(o) { - operands.add(o); - }); - } else { - operands.add(a); - } - if (b instanceof OR) { - b.opnds.map(function(o) { - operands.add(o); - }); - } else { - operands.add(b); - } - - const precedencePredicates = PrecedencePredicate.filterPrecedencePredicates(operands); - if (precedencePredicates.length > 0) { - // interested in the transition with the highest precedence - const s = precedencePredicates.sort(function(a, b) { - return a.compareTo(b); - }); - const reduced = s[s.length-1]; - operands.add(reduced); - } - this.opnds = Array.from(operands.values()); - } - - equals(other) { - if (this === other) { - return true; - } else if (!(other instanceof OR)) { - return false; - } else { - return equalArrays(this.opnds, other.opnds); - } - } - - updateHashCode(hash) { - hash.update(this.opnds, "OR"); - } - - /** - *

      - * The evaluation of predicates by this context is short-circuiting, but - * unordered.

      - */ - evaluate(parser, outerContext) { - for (let i = 0; i < this.opnds.length; i++) { - if (this.opnds[i].evaluate(parser, outerContext)) { - return true; - } - } - return false; - } - - evalPrecedence(parser, outerContext) { - let differs = false; - const operands = []; - for (let i = 0; i < this.opnds.length; i++) { - const context = this.opnds[i]; - const evaluated = context.evalPrecedence(parser, outerContext); - differs |= (evaluated !== context); - if (evaluated === SemanticContext.NONE) { - // The OR context is true if any element is true - return SemanticContext.NONE; - } else if (evaluated !== null) { - // Reduce the result by skipping false elements - operands.push(evaluated); - } - } - if (!differs) { - return this; - } - if (operands.length === 0) { - // all elements were false, so the OR context is false - return null; - } - const result = null; - operands.map(function(o) { - return result === null ? o : SemanticContext.orContext(result, o); - }); - return result; - } - - toString() { - const s = this.opnds.map(o => o.toString()); - return (s.length > 3 ? s.slice(3) : s).join("||"); - } -} - -module.exports = { - SemanticContext, - PrecedencePredicate, - Predicate -} diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/Transition.js b/reverse_engineering/node_modules/antlr4/src/antlr4/atn/Transition.js deleted file mode 100644 index a900acf..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/Transition.js +++ /dev/null @@ -1,303 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const {Token} = require('./../Token'); -const {IntervalSet} = require('./../IntervalSet'); -const {Predicate, PrecedencePredicate} = require('./SemanticContext'); - -/** - * An ATN transition between any two ATN states. Subclasses define - * atom, set, epsilon, action, predicate, rule transitions. - * - *

      This is a one way link. It emanates from a state (usually via a list of - * transitions) and has a target state.

      - * - *

      Since we never have to change the ATN transitions once we construct it, - * we can fix these transitions as specific classes. The DFA transitions - * on the other hand need to update the labels as it adds transitions to - * the states. We'll use the term Edge for the DFA to distinguish them from - * ATN transitions.

      - */ -class Transition { - constructor(target) { - // The target of this transition. - if (target===undefined || target===null) { - throw "target cannot be null."; - } - this.target = target; - // Are we epsilon, action, sempred? - this.isEpsilon = false; - this.label = null; - } -} - -// constants for serialization - -Transition.EPSILON = 1; -Transition.RANGE = 2; -Transition.RULE = 3; -// e.g., {isType(input.LT(1))}? -Transition.PREDICATE = 4; -Transition.ATOM = 5; -Transition.ACTION = 6; -// ~(A|B) or ~atom, wildcard, which convert to next 2 -Transition.SET = 7; -Transition.NOT_SET = 8; -Transition.WILDCARD = 9; -Transition.PRECEDENCE = 10; - -Transition.serializationNames = [ - "INVALID", - "EPSILON", - "RANGE", - "RULE", - "PREDICATE", - "ATOM", - "ACTION", - "SET", - "NOT_SET", - "WILDCARD", - "PRECEDENCE" - ]; - -Transition.serializationTypes = { - EpsilonTransition: Transition.EPSILON, - RangeTransition: Transition.RANGE, - RuleTransition: Transition.RULE, - PredicateTransition: Transition.PREDICATE, - AtomTransition: Transition.ATOM, - ActionTransition: Transition.ACTION, - SetTransition: Transition.SET, - NotSetTransition: Transition.NOT_SET, - WildcardTransition: Transition.WILDCARD, - PrecedencePredicateTransition: Transition.PRECEDENCE - }; - - -// TODO: make all transitions sets? no, should remove set edges - -class AtomTransition extends Transition { - constructor(target, label) { - super(target); - // The token type or character value; or, signifies special label. - this.label_ = label; - this.label = this.makeLabel(); - this.serializationType = Transition.ATOM; - } - - makeLabel() { - const s = new IntervalSet(); - s.addOne(this.label_); - return s; - } - - matches(symbol, minVocabSymbol, maxVocabSymbol) { - return this.label_ === symbol; - } - - toString() { - return this.label_; - } -} - - -class RuleTransition extends Transition { - constructor(ruleStart, ruleIndex, precedence, followState) { - super(ruleStart); - // ptr to the rule definition object for this rule ref - this.ruleIndex = ruleIndex; - this.precedence = precedence; - // what node to begin computations following ref to rule - this.followState = followState; - this.serializationType = Transition.RULE; - this.isEpsilon = true; - } - - matches(symbol, minVocabSymbol, maxVocabSymbol) { - return false; - } -} - -class EpsilonTransition extends Transition { - constructor(target, outermostPrecedenceReturn) { - super(target); - this.serializationType = Transition.EPSILON; - this.isEpsilon = true; - this.outermostPrecedenceReturn = outermostPrecedenceReturn; - } - - matches(symbol, minVocabSymbol, maxVocabSymbol) { - return false; - } - - toString() { - return "epsilon"; - } -} - - -class RangeTransition extends Transition { - constructor(target, start, stop) { - super(target); - this.serializationType = Transition.RANGE; - this.start = start; - this.stop = stop; - this.label = this.makeLabel(); - } - - makeLabel() { - const s = new IntervalSet(); - s.addRange(this.start, this.stop); - return s; - } - - matches(symbol, minVocabSymbol, maxVocabSymbol) { - return symbol >= this.start && symbol <= this.stop; - } - - toString() { - return "'" + String.fromCharCode(this.start) + "'..'" + String.fromCharCode(this.stop) + "'"; - } -} - - -class AbstractPredicateTransition extends Transition { - constructor(target) { - super(target); - } -} - -class PredicateTransition extends AbstractPredicateTransition { - constructor(target, ruleIndex, predIndex, isCtxDependent) { - super(target); - this.serializationType = Transition.PREDICATE; - this.ruleIndex = ruleIndex; - this.predIndex = predIndex; - this.isCtxDependent = isCtxDependent; // e.g., $i ref in pred - this.isEpsilon = true; - } - - matches(symbol, minVocabSymbol, maxVocabSymbol) { - return false; - } - - getPredicate() { - return new Predicate(this.ruleIndex, this.predIndex, this.isCtxDependent); - } - - toString() { - return "pred_" + this.ruleIndex + ":" + this.predIndex; - } -} - - -class ActionTransition extends Transition { - constructor(target, ruleIndex, actionIndex, isCtxDependent) { - super(target); - this.serializationType = Transition.ACTION; - this.ruleIndex = ruleIndex; - this.actionIndex = actionIndex===undefined ? -1 : actionIndex; - this.isCtxDependent = isCtxDependent===undefined ? false : isCtxDependent; // e.g., $i ref in pred - this.isEpsilon = true; - } - - matches(symbol, minVocabSymbol, maxVocabSymbol) { - return false; - } - - toString() { - return "action_" + this.ruleIndex + ":" + this.actionIndex; - } -} - - -// A transition containing a set of values. -class SetTransition extends Transition { - constructor(target, set) { - super(target); - this.serializationType = Transition.SET; - if (set !==undefined && set !==null) { - this.label = set; - } else { - this.label = new IntervalSet(); - this.label.addOne(Token.INVALID_TYPE); - } - } - - matches(symbol, minVocabSymbol, maxVocabSymbol) { - return this.label.contains(symbol); - } - - toString() { - return this.label.toString(); - } -} - -class NotSetTransition extends SetTransition { - constructor(target, set) { - super(target, set); - this.serializationType = Transition.NOT_SET; - } - - matches(symbol, minVocabSymbol, maxVocabSymbol) { - return symbol >= minVocabSymbol && symbol <= maxVocabSymbol && - !super.matches(symbol, minVocabSymbol, maxVocabSymbol); - } - - toString() { - return '~' + super.toString(); - } -} - -class WildcardTransition extends Transition { - constructor(target) { - super(target); - this.serializationType = Transition.WILDCARD; - } - - matches(symbol, minVocabSymbol, maxVocabSymbol) { - return symbol >= minVocabSymbol && symbol <= maxVocabSymbol; - } - - toString() { - return "."; - } -} - -class PrecedencePredicateTransition extends AbstractPredicateTransition { - constructor(target, precedence) { - super(target); - this.serializationType = Transition.PRECEDENCE; - this.precedence = precedence; - this.isEpsilon = true; - } - - matches(symbol, minVocabSymbol, maxVocabSymbol) { - return false; - } - - getPredicate() { - return new PrecedencePredicate(this.precedence); - } - - toString() { - return this.precedence + " >= _p"; - } -} - -module.exports = { - Transition, - AtomTransition, - SetTransition, - NotSetTransition, - RuleTransition, - ActionTransition, - EpsilonTransition, - RangeTransition, - WildcardTransition, - PredicateTransition, - PrecedencePredicateTransition, - AbstractPredicateTransition -} diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/index.js b/reverse_engineering/node_modules/antlr4/src/antlr4/atn/index.js deleted file mode 100644 index 5f6dcdc..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/atn/index.js +++ /dev/null @@ -1,10 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -exports.ATN = require('./ATN'); -exports.ATNDeserializer = require('./ATNDeserializer'); -exports.LexerATNSimulator = require('./LexerATNSimulator'); -exports.ParserATNSimulator = require('./ParserATNSimulator'); -exports.PredictionMode = require('./PredictionMode'); diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/dfa/DFA.js b/reverse_engineering/node_modules/antlr4/src/antlr4/dfa/DFA.js deleted file mode 100644 index 1863f87..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/dfa/DFA.js +++ /dev/null @@ -1,162 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const {Set} = require("../Utils"); -const {DFAState} = require('./DFAState'); -const {StarLoopEntryState} = require('../atn/ATNState'); -const {ATNConfigSet} = require('./../atn/ATNConfigSet'); -const {DFASerializer} = require('./DFASerializer'); -const {LexerDFASerializer} = require('./DFASerializer'); - -class DFA { - constructor(atnStartState, decision) { - if (decision === undefined) { - decision = 0; - } - /** - * From which ATN state did we create this DFA? - */ - this.atnStartState = atnStartState; - this.decision = decision; - /** - * A set of all DFA states. Use {@link Map} so we can get old state back - * ({@link Set} only allows you to see if it's there). - */ - this._states = new Set(); - this.s0 = null; - /** - * {@code true} if this DFA is for a precedence decision; otherwise, - * {@code false}. This is the backing field for {@link //isPrecedenceDfa}, - * {@link //setPrecedenceDfa} - */ - this.precedenceDfa = false; - if (atnStartState instanceof StarLoopEntryState) - { - if (atnStartState.isPrecedenceDecision) { - this.precedenceDfa = true; - const precedenceState = new DFAState(null, new ATNConfigSet()); - precedenceState.edges = []; - precedenceState.isAcceptState = false; - precedenceState.requiresFullContext = false; - this.s0 = precedenceState; - } - } - } - - /** - * Get the start state for a specific precedence value. - * - * @param precedence The current precedence. - * @return The start state corresponding to the specified precedence, or - * {@code null} if no start state exists for the specified precedence. - * - * @throws IllegalStateException if this is not a precedence DFA. - * @see //isPrecedenceDfa() - */ - getPrecedenceStartState(precedence) { - if (!(this.precedenceDfa)) { - throw ("Only precedence DFAs may contain a precedence start state."); - } - // s0.edges is never null for a precedence DFA - if (precedence < 0 || precedence >= this.s0.edges.length) { - return null; - } - return this.s0.edges[precedence] || null; - } - - /** - * Set the start state for a specific precedence value. - * - * @param precedence The current precedence. - * @param startState The start state corresponding to the specified - * precedence. - * - * @throws IllegalStateException if this is not a precedence DFA. - * @see //isPrecedenceDfa() - */ - setPrecedenceStartState(precedence, startState) { - if (!(this.precedenceDfa)) { - throw ("Only precedence DFAs may contain a precedence start state."); - } - if (precedence < 0) { - return; - } - - /** - * synchronization on s0 here is ok. when the DFA is turned into a - * precedence DFA, s0 will be initialized once and not updated again - * s0.edges is never null for a precedence DFA - */ - this.s0.edges[precedence] = startState; - } - - /** - * Sets whether this is a precedence DFA. If the specified value differs - * from the current DFA configuration, the following actions are taken; - * otherwise no changes are made to the current DFA. - * - *
        - *
      • The {@link //states} map is cleared
      • - *
      • If {@code precedenceDfa} is {@code false}, the initial state - * {@link //s0} is set to {@code null}; otherwise, it is initialized to a new - * {@link DFAState} with an empty outgoing {@link DFAState//edges} array to - * store the start states for individual precedence values.
      • - *
      • The {@link //precedenceDfa} field is updated
      • - *
      - * - * @param precedenceDfa {@code true} if this is a precedence DFA; otherwise, - * {@code false} - */ - setPrecedenceDfa(precedenceDfa) { - if (this.precedenceDfa!==precedenceDfa) { - this._states = new Set(); - if (precedenceDfa) { - const precedenceState = new DFAState(null, new ATNConfigSet()); - precedenceState.edges = []; - precedenceState.isAcceptState = false; - precedenceState.requiresFullContext = false; - this.s0 = precedenceState; - } else { - this.s0 = null; - } - this.precedenceDfa = precedenceDfa; - } - } - - /** - * Return a list of all states in this DFA, ordered by state number. - */ - sortedStates() { - const list = this._states.values(); - return list.sort(function(a, b) { - return a.stateNumber - b.stateNumber; - }); - } - - toString(literalNames, symbolicNames) { - literalNames = literalNames || null; - symbolicNames = symbolicNames || null; - if (this.s0 === null) { - return ""; - } - const serializer = new DFASerializer(this, literalNames, symbolicNames); - return serializer.toString(); - } - - toLexerString() { - if (this.s0 === null) { - return ""; - } - const serializer = new LexerDFASerializer(this); - return serializer.toString(); - } - - get states(){ - return this._states; - } -} - - -module.exports = DFA; diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/dfa/DFASerializer.js b/reverse_engineering/node_modules/antlr4/src/antlr4/dfa/DFASerializer.js deleted file mode 100644 index 5175a44..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/dfa/DFASerializer.js +++ /dev/null @@ -1,78 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ -const Utils = require('./../Utils'); - -/** - * A DFA walker that knows how to dump them to serialized strings. - */ -class DFASerializer { - constructor(dfa, literalNames, symbolicNames) { - this.dfa = dfa; - this.literalNames = literalNames || []; - this.symbolicNames = symbolicNames || []; - } - - toString() { - if(this.dfa.s0 === null) { - return null; - } - let buf = ""; - const states = this.dfa.sortedStates(); - for(let i=0; i"); - buf = buf.concat(this.getStateString(t)); - buf = buf.concat('\n'); - } - } - } - } - return buf.length===0 ? null : buf; - } - - getEdgeLabel(i) { - if (i===0) { - return "EOF"; - } else if(this.literalNames !==null || this.symbolicNames!==null) { - return this.literalNames[i-1] || this.symbolicNames[i-1]; - } else { - return String.fromCharCode(i-1); - } - } - - getStateString(s) { - const baseStateStr = ( s.isAcceptState ? ":" : "") + "s" + s.stateNumber + ( s.requiresFullContext ? "^" : ""); - if(s.isAcceptState) { - if (s.predicates !== null) { - return baseStateStr + "=>" + Utils.arrayToString(s.predicates); - } else { - return baseStateStr + "=>" + s.prediction.toString(); - } - } else { - return baseStateStr; - } - } -} - -class LexerDFASerializer extends DFASerializer { - constructor(dfa) { - super(dfa, null); - } - - getEdgeLabel(i) { - return "'" + String.fromCharCode(i) + "'"; - } -} - -module.exports = { DFASerializer , LexerDFASerializer }; - diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/dfa/DFAState.js b/reverse_engineering/node_modules/antlr4/src/antlr4/dfa/DFAState.js deleted file mode 100644 index 49a1ee3..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/dfa/DFAState.js +++ /dev/null @@ -1,156 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const {ATNConfigSet} = require('./../atn/ATNConfigSet'); -const {Hash, Set} = require('./../Utils'); - -/** - * Map a predicate to a predicted alternative. - */ -class PredPrediction { - constructor(pred, alt) { - this.alt = alt; - this.pred = pred; - } - - toString() { - return "(" + this.pred + ", " + this.alt + ")"; - } -} - -/** - * A DFA state represents a set of possible ATN configurations. - * As Aho, Sethi, Ullman p. 117 says "The DFA uses its state - * to keep track of all possible states the ATN can be in after - * reading each input symbol. That is to say, after reading - * input a1a2..an, the DFA is in a state that represents the - * subset T of the states of the ATN that are reachable from the - * ATN's start state along some path labeled a1a2..an." - * In conventional NFA→DFA conversion, therefore, the subset T - * would be a bitset representing the set of states the - * ATN could be in. We need to track the alt predicted by each - * state as well, however. More importantly, we need to maintain - * a stack of states, tracking the closure operations as they - * jump from rule to rule, emulating rule invocations (method calls). - * I have to add a stack to simulate the proper lookahead sequences for - * the underlying LL grammar from which the ATN was derived. - * - *

      I use a set of ATNConfig objects not simple states. An ATNConfig - * is both a state (ala normal conversion) and a RuleContext describing - * the chain of rules (if any) followed to arrive at that state.

      - * - *

      A DFA state may have multiple references to a particular state, - * but with different ATN contexts (with same or different alts) - * meaning that state was reached via a different set of rule invocations.

      - */ -class DFAState { - constructor(stateNumber, configs) { - if (stateNumber === null) { - stateNumber = -1; - } - if (configs === null) { - configs = new ATNConfigSet(); - } - this.stateNumber = stateNumber; - this.configs = configs; - /** - * {@code edges[symbol]} points to target of symbol. Shift up by 1 so (-1) - * {@link Token//EOF} maps to {@code edges[0]}. - */ - this.edges = null; - this.isAcceptState = false; - /** - * if accept state, what ttype do we match or alt do we predict? - * This is set to {@link ATN//INVALID_ALT_NUMBER} when {@link//predicates} - * {@code !=null} or {@link //requiresFullContext}. - */ - this.prediction = 0; - this.lexerActionExecutor = null; - /** - * Indicates that this state was created during SLL prediction that - * discovered a conflict between the configurations in the state. Future - * {@link ParserATNSimulator//execATN} invocations immediately jumped doing - * full context prediction if this field is true. - */ - this.requiresFullContext = false; - /** - * During SLL parsing, this is a list of predicates associated with the - * ATN configurations of the DFA state. When we have predicates, - * {@link //requiresFullContext} is {@code false} since full context - * prediction evaluates predicates - * on-the-fly. If this is not null, then {@link //prediction} is - * {@link ATN//INVALID_ALT_NUMBER}. - * - *

      We only use these for non-{@link //requiresFullContext} but - * conflicting states. That - * means we know from the context (it's $ or we don't dip into outer - * context) that it's an ambiguity not a conflict.

      - * - *

      This list is computed by {@link - * ParserATNSimulator//predicateDFAState}.

      - */ - this.predicates = null; - return this; - } - - /** - * Get the set of all alts mentioned by all ATN configurations in this - * DFA state. - */ - getAltSet() { - const alts = new Set(); - if (this.configs !== null) { - for (let i = 0; i < this.configs.length; i++) { - const c = this.configs[i]; - alts.add(c.alt); - } - } - if (alts.length === 0) { - return null; - } else { - return alts; - } - } - - /** - * Two {@link DFAState} instances are equal if their ATN configuration sets - * are the same. This method is used to see if a state already exists. - * - *

      Because the number of alternatives and number of ATN configurations are - * finite, there is a finite number of DFA states that can be processed. - * This is necessary to show that the algorithm terminates.

      - * - *

      Cannot test the DFA state numbers here because in - * {@link ParserATNSimulator//addDFAState} we need to know if any other state - * exists that has this exact set of ATN configurations. The - * {@link //stateNumber} is irrelevant.

      - */ - equals(other) { - // compare set of ATN configurations in this set with other - return this === other || - (other instanceof DFAState && - this.configs.equals(other.configs)); - } - - toString() { - let s = "" + this.stateNumber + ":" + this.configs; - if(this.isAcceptState) { - s = s + "=>"; - if (this.predicates !== null) - s = s + this.predicates; - else - s = s + this.prediction; - } - return s; - } - - hashCode() { - const hash = new Hash(); - hash.update(this.configs); - return hash.finish(); - } -} - -module.exports = { DFAState, PredPrediction }; diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/dfa/index.js b/reverse_engineering/node_modules/antlr4/src/antlr4/dfa/index.js deleted file mode 100644 index 9a98bd0..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/dfa/index.js +++ /dev/null @@ -1,9 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -exports.DFA = require('./DFA'); -exports.DFASerializer = require('./DFASerializer').DFASerializer; -exports.LexerDFASerializer = require('./DFASerializer').LexerDFASerializer; -exports.PredPrediction = require('./DFAState').PredPrediction; diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/error/DiagnosticErrorListener.js b/reverse_engineering/node_modules/antlr4/src/antlr4/error/DiagnosticErrorListener.js deleted file mode 100644 index 4536fa4..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/error/DiagnosticErrorListener.js +++ /dev/null @@ -1,105 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const {BitSet} = require('./../Utils'); -const {ErrorListener} = require('./ErrorListener') -const {Interval} = require('./../IntervalSet') - - -/** - * This implementation of {@link ANTLRErrorListener} can be used to identify - * certain potential correctness and performance problems in grammars. "Reports" - * are made by calling {@link Parser//notifyErrorListeners} with the appropriate - * message. - * - *
        - *
      • Ambiguities: These are cases where more than one path through the - * grammar can match the input.
      • - *
      • Weak context sensitivity: These are cases where full-context - * prediction resolved an SLL conflict to a unique alternative which equaled the - * minimum alternative of the SLL conflict.
      • - *
      • Strong (forced) context sensitivity: These are cases where the - * full-context prediction resolved an SLL conflict to a unique alternative, - * and the minimum alternative of the SLL conflict was found to not be - * a truly viable alternative. Two-stage parsing cannot be used for inputs where - * this situation occurs.
      • - *
      - */ -class DiagnosticErrorListener extends ErrorListener { - constructor(exactOnly) { - super(); - exactOnly = exactOnly || true; - // whether all ambiguities or only exact ambiguities are reported. - this.exactOnly = exactOnly; - } - - reportAmbiguity(recognizer, dfa, startIndex, stopIndex, exact, ambigAlts, configs) { - if (this.exactOnly && !exact) { - return; - } - const msg = "reportAmbiguity d=" + - this.getDecisionDescription(recognizer, dfa) + - ": ambigAlts=" + - this.getConflictingAlts(ambigAlts, configs) + - ", input='" + - recognizer.getTokenStream().getText(new Interval(startIndex, stopIndex)) + "'" - recognizer.notifyErrorListeners(msg); - } - - reportAttemptingFullContext(recognizer, dfa, startIndex, stopIndex, conflictingAlts, configs) { - const msg = "reportAttemptingFullContext d=" + - this.getDecisionDescription(recognizer, dfa) + - ", input='" + - recognizer.getTokenStream().getText(new Interval(startIndex, stopIndex)) + "'" - recognizer.notifyErrorListeners(msg); - } - - reportContextSensitivity(recognizer, dfa, startIndex, stopIndex, prediction, configs) { - const msg = "reportContextSensitivity d=" + - this.getDecisionDescription(recognizer, dfa) + - ", input='" + - recognizer.getTokenStream().getText(new Interval(startIndex, stopIndex)) + "'" - recognizer.notifyErrorListeners(msg); - } - - getDecisionDescription(recognizer, dfa) { - const decision = dfa.decision - const ruleIndex = dfa.atnStartState.ruleIndex - - const ruleNames = recognizer.ruleNames - if (ruleIndex < 0 || ruleIndex >= ruleNames.length) { - return "" + decision; - } - const ruleName = ruleNames[ruleIndex] || null - if (ruleName === null || ruleName.length === 0) { - return "" + decision; - } - return `${decision} (${ruleName})`; - } - - /** - * Computes the set of conflicting or ambiguous alternatives from a - * configuration set, if that information was not already provided by the - * parser. - * - * @param reportedAlts The set of conflicting or ambiguous alternatives, as - * reported by the parser. - * @param configs The conflicting or ambiguous configuration set. - * @return Returns {@code reportedAlts} if it is not {@code null}, otherwise - * returns the set of alternatives represented in {@code configs}. - */ - getConflictingAlts(reportedAlts, configs) { - if (reportedAlts !== null) { - return reportedAlts; - } - const result = new BitSet() - for (let i = 0; i < configs.items.length; i++) { - result.add(configs.items[i].alt); - } - return `{${result.values().join(", ")}}`; - } -} - -module.exports = DiagnosticErrorListener diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/error/ErrorListener.js b/reverse_engineering/node_modules/antlr4/src/antlr4/error/ErrorListener.js deleted file mode 100644 index 41da189..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/error/ErrorListener.js +++ /dev/null @@ -1,82 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -/** - * Provides an empty default implementation of {@link ANTLRErrorListener}. The - * default implementation of each method does nothing, but can be overridden as - * necessary. - */ -class ErrorListener { - syntaxError(recognizer, offendingSymbol, line, column, msg, e) { - } - - reportAmbiguity(recognizer, dfa, startIndex, stopIndex, exact, ambigAlts, configs) { - } - - reportAttemptingFullContext(recognizer, dfa, startIndex, stopIndex, conflictingAlts, configs) { - } - - reportContextSensitivity(recognizer, dfa, startIndex, stopIndex, prediction, configs) { - } -} - -/** - * {@inheritDoc} - * - *

      - * This implementation prints messages to {@link System//err} containing the - * values of {@code line}, {@code charPositionInLine}, and {@code msg} using - * the following format.

      - * - *
      - * line line:charPositionInLine msg
      - * 
      - * - */ -class ConsoleErrorListener extends ErrorListener { - constructor() { - super(); - } - - syntaxError(recognizer, offendingSymbol, line, column, msg, e) { - console.error("line " + line + ":" + column + " " + msg); - } -} - - -/** - * Provides a default instance of {@link ConsoleErrorListener}. - */ -ConsoleErrorListener.INSTANCE = new ConsoleErrorListener(); - -class ProxyErrorListener extends ErrorListener { - constructor(delegates) { - super(); - if (delegates===null) { - throw "delegates"; - } - this.delegates = delegates; - return this; - } - - syntaxError(recognizer, offendingSymbol, line, column, msg, e) { - this.delegates.map(d => d.syntaxError(recognizer, offendingSymbol, line, column, msg, e)); - } - - reportAmbiguity(recognizer, dfa, startIndex, stopIndex, exact, ambigAlts, configs) { - this.delegates.map(d => d.reportAmbiguity(recognizer, dfa, startIndex, stopIndex, exact, ambigAlts, configs)); - } - - reportAttemptingFullContext(recognizer, dfa, startIndex, stopIndex, conflictingAlts, configs) { - this.delegates.map(d => d.reportAttemptingFullContext(recognizer, dfa, startIndex, stopIndex, conflictingAlts, configs)); - } - - reportContextSensitivity(recognizer, dfa, startIndex, stopIndex, prediction, configs) { - this.delegates.map(d => d.reportContextSensitivity(recognizer, dfa, startIndex, stopIndex, prediction, configs)); - } -} - -module.exports = {ErrorListener, ConsoleErrorListener, ProxyErrorListener} - diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/error/ErrorStrategy.js b/reverse_engineering/node_modules/antlr4/src/antlr4/error/ErrorStrategy.js deleted file mode 100644 index 3da80f2..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/error/ErrorStrategy.js +++ /dev/null @@ -1,776 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const {Token} = require('./../Token') -const {NoViableAltException, InputMismatchException, FailedPredicateException, ParseCancellationException} = require('./Errors') -const {ATNState} = require('./../atn/ATNState') -const {Interval, IntervalSet} = require('./../IntervalSet') - -class ErrorStrategy { - - reset(recognizer) { - } - - recoverInline(recognizer) { - } - - recover(recognizer, e) { - } - - sync(recognizer) { - } - - inErrorRecoveryMode(recognizer) { - } - - reportError(recognizer) { - } -} - - -/** - * This is the default implementation of {@link ANTLRErrorStrategy} used for - * error reporting and recovery in ANTLR parsers. -*/ -class DefaultErrorStrategy extends ErrorStrategy { - constructor() { - super(); - /** - * Indicates whether the error strategy is currently "recovering from an - * error". This is used to suppress reporting multiple error messages while - * attempting to recover from a detected syntax error. - * - * @see //inErrorRecoveryMode - */ - this.errorRecoveryMode = false; - - /** - * The index into the input stream where the last error occurred. - * This is used to prevent infinite loops where an error is found - * but no token is consumed during recovery...another error is found, - * ad nauseum. This is a failsafe mechanism to guarantee that at least - * one token/tree node is consumed for two errors. - */ - this.lastErrorIndex = -1; - this.lastErrorStates = null; - this.nextTokensContext = null; - this.nextTokenState = 0; - } - - /** - *

      The default implementation simply calls {@link //endErrorCondition} to - * ensure that the handler is not in error recovery mode.

      - */ - reset(recognizer) { - this.endErrorCondition(recognizer); - } - - /** - * This method is called to enter error recovery mode when a recognition - * exception is reported. - * - * @param recognizer the parser instance - */ - beginErrorCondition(recognizer) { - this.errorRecoveryMode = true; - } - - inErrorRecoveryMode(recognizer) { - return this.errorRecoveryMode; - } - - /** - * This method is called to leave error recovery mode after recovering from - * a recognition exception. - * @param recognizer - */ - endErrorCondition(recognizer) { - this.errorRecoveryMode = false; - this.lastErrorStates = null; - this.lastErrorIndex = -1; - } - - /** - * {@inheritDoc} - *

      The default implementation simply calls {@link //endErrorCondition}.

      - */ - reportMatch(recognizer) { - this.endErrorCondition(recognizer); - } - - /** - * {@inheritDoc} - * - *

      The default implementation returns immediately if the handler is already - * in error recovery mode. Otherwise, it calls {@link //beginErrorCondition} - * and dispatches the reporting task based on the runtime type of {@code e} - * according to the following table.

      - * - *
        - *
      • {@link NoViableAltException}: Dispatches the call to - * {@link //reportNoViableAlternative}
      • - *
      • {@link InputMismatchException}: Dispatches the call to - * {@link //reportInputMismatch}
      • - *
      • {@link FailedPredicateException}: Dispatches the call to - * {@link //reportFailedPredicate}
      • - *
      • All other types: calls {@link Parser//notifyErrorListeners} to report - * the exception
      • - *
      - */ - reportError(recognizer, e) { - // if we've already reported an error and have not matched a token - // yet successfully, don't report any errors. - if(this.inErrorRecoveryMode(recognizer)) { - return; // don't report spurious errors - } - this.beginErrorCondition(recognizer); - if ( e instanceof NoViableAltException ) { - this.reportNoViableAlternative(recognizer, e); - } else if ( e instanceof InputMismatchException ) { - this.reportInputMismatch(recognizer, e); - } else if ( e instanceof FailedPredicateException ) { - this.reportFailedPredicate(recognizer, e); - } else { - console.log("unknown recognition error type: " + e.constructor.name); - console.log(e.stack); - recognizer.notifyErrorListeners(e.getOffendingToken(), e.getMessage(), e); - } - } - - /** - * - * {@inheritDoc} - * - *

      The default implementation resynchronizes the parser by consuming tokens - * until we find one in the resynchronization set--loosely the set of tokens - * that can follow the current rule.

      - * - */ - recover(recognizer, e) { - if (this.lastErrorIndex===recognizer.getInputStream().index && - this.lastErrorStates !== null && this.lastErrorStates.indexOf(recognizer.state)>=0) { - // uh oh, another error at same token index and previously-visited - // state in ATN; must be a case where LT(1) is in the recovery - // token set so nothing got consumed. Consume a single token - // at least to prevent an infinite loop; this is a failsafe. - recognizer.consume(); - } - this.lastErrorIndex = recognizer._input.index; - if (this.lastErrorStates === null) { - this.lastErrorStates = []; - } - this.lastErrorStates.push(recognizer.state); - const followSet = this.getErrorRecoverySet(recognizer) - this.consumeUntil(recognizer, followSet); - } - - /** - * The default implementation of {@link ANTLRErrorStrategy//sync} makes sure - * that the current lookahead symbol is consistent with what were expecting - * at this point in the ATN. You can call this anytime but ANTLR only - * generates code to check before subrules/loops and each iteration. - * - *

      Implements Jim Idle's magic sync mechanism in closures and optional - * subrules. E.g.,

      - * - *
      -     * a : sync ( stuff sync )* ;
      -     * sync : {consume to what can follow sync} ;
      -     * 
      - * - * At the start of a sub rule upon error, {@link //sync} performs single - * token deletion, if possible. If it can't do that, it bails on the current - * rule and uses the default error recovery, which consumes until the - * resynchronization set of the current rule. - * - *

      If the sub rule is optional ({@code (...)?}, {@code (...)*}, or block - * with an empty alternative), then the expected set includes what follows - * the subrule.

      - * - *

      During loop iteration, it consumes until it sees a token that can start a - * sub rule or what follows loop. Yes, that is pretty aggressive. We opt to - * stay in the loop as long as possible.

      - * - *

      ORIGINS

      - * - *

      Previous versions of ANTLR did a poor job of their recovery within loops. - * A single mismatch token or missing token would force the parser to bail - * out of the entire rules surrounding the loop. So, for rule

      - * - *
      -     * classDef : 'class' ID '{' member* '}'
      -     * 
      - * - * input with an extra token between members would force the parser to - * consume until it found the next class definition rather than the next - * member definition of the current class. - * - *

      This functionality cost a little bit of effort because the parser has to - * compare token set at the start of the loop and at each iteration. If for - * some reason speed is suffering for you, you can turn off this - * functionality by simply overriding this method as a blank { }.

      - * - */ - sync(recognizer) { - // If already recovering, don't try to sync - if (this.inErrorRecoveryMode(recognizer)) { - return; - } - const s = recognizer._interp.atn.states[recognizer.state]; - const la = recognizer.getTokenStream().LA(1); - // try cheaper subset first; might get lucky. seems to shave a wee bit off - const nextTokens = recognizer.atn.nextTokens(s); - if(nextTokens.contains(la)) { - this.nextTokensContext = null; - this.nextTokenState = ATNState.INVALID_STATE_NUMBER; - return; - } else if (nextTokens.contains(Token.EPSILON)) { - if(this.nextTokensContext === null) { - // It's possible the next token won't match information tracked - // by sync is restricted for performance. - this.nextTokensContext = recognizer._ctx; - this.nextTokensState = recognizer._stateNumber; - } - return; - } - switch (s.stateType) { - case ATNState.BLOCK_START: - case ATNState.STAR_BLOCK_START: - case ATNState.PLUS_BLOCK_START: - case ATNState.STAR_LOOP_ENTRY: - // report error and recover if possible - if( this.singleTokenDeletion(recognizer) !== null) { - return; - } else { - throw new InputMismatchException(recognizer); - } - case ATNState.PLUS_LOOP_BACK: - case ATNState.STAR_LOOP_BACK: - this.reportUnwantedToken(recognizer); - const expecting = new IntervalSet() - expecting.addSet(recognizer.getExpectedTokens()); - const whatFollowsLoopIterationOrRule = expecting.addSet(this.getErrorRecoverySet(recognizer)) - this.consumeUntil(recognizer, whatFollowsLoopIterationOrRule); - break; - default: - // do nothing if we can't identify the exact kind of ATN state - } - } - - /** - * This is called by {@link //reportError} when the exception is a - * {@link NoViableAltException}. - * - * @see //reportError - * - * @param recognizer the parser instance - * @param e the recognition exception - */ - reportNoViableAlternative(recognizer, e) { - const tokens = recognizer.getTokenStream() - let input - if(tokens !== null) { - if (e.startToken.type===Token.EOF) { - input = ""; - } else { - input = tokens.getText(new Interval(e.startToken.tokenIndex, e.offendingToken.tokenIndex)); - } - } else { - input = ""; - } - const msg = "no viable alternative at input " + this.escapeWSAndQuote(input) - recognizer.notifyErrorListeners(msg, e.offendingToken, e); - } - - /** - * This is called by {@link //reportError} when the exception is an - * {@link InputMismatchException}. - * - * @see //reportError - * - * @param recognizer the parser instance - * @param e the recognition exception - */ - reportInputMismatch(recognizer, e) { - const msg = "mismatched input " + this.getTokenErrorDisplay(e.offendingToken) + - " expecting " + e.getExpectedTokens().toString(recognizer.literalNames, recognizer.symbolicNames) - recognizer.notifyErrorListeners(msg, e.offendingToken, e); - } - - /** - * This is called by {@link //reportError} when the exception is a - * {@link FailedPredicateException}. - * - * @see //reportError - * - * @param recognizer the parser instance - * @param e the recognition exception - */ - reportFailedPredicate(recognizer, e) { - const ruleName = recognizer.ruleNames[recognizer._ctx.ruleIndex] - const msg = "rule " + ruleName + " " + e.message - recognizer.notifyErrorListeners(msg, e.offendingToken, e); - } - - /** - * This method is called to report a syntax error which requires the removal - * of a token from the input stream. At the time this method is called, the - * erroneous symbol is current {@code LT(1)} symbol and has not yet been - * removed from the input stream. When this method returns, - * {@code recognizer} is in error recovery mode. - * - *

      This method is called when {@link //singleTokenDeletion} identifies - * single-token deletion as a viable recovery strategy for a mismatched - * input error.

      - * - *

      The default implementation simply returns if the handler is already in - * error recovery mode. Otherwise, it calls {@link //beginErrorCondition} to - * enter error recovery mode, followed by calling - * {@link Parser//notifyErrorListeners}.

      - * - * @param recognizer the parser instance - * - */ - reportUnwantedToken(recognizer) { - if (this.inErrorRecoveryMode(recognizer)) { - return; - } - this.beginErrorCondition(recognizer); - const t = recognizer.getCurrentToken() - const tokenName = this.getTokenErrorDisplay(t) - const expecting = this.getExpectedTokens(recognizer) - const msg = "extraneous input " + tokenName + " expecting " + - expecting.toString(recognizer.literalNames, recognizer.symbolicNames) - recognizer.notifyErrorListeners(msg, t, null); - } - - /** - * This method is called to report a syntax error which requires the - * insertion of a missing token into the input stream. At the time this - * method is called, the missing token has not yet been inserted. When this - * method returns, {@code recognizer} is in error recovery mode. - * - *

      This method is called when {@link //singleTokenInsertion} identifies - * single-token insertion as a viable recovery strategy for a mismatched - * input error.

      - * - *

      The default implementation simply returns if the handler is already in - * error recovery mode. Otherwise, it calls {@link //beginErrorCondition} to - * enter error recovery mode, followed by calling - * {@link Parser//notifyErrorListeners}.

      - * - * @param recognizer the parser instance - */ - reportMissingToken(recognizer) { - if ( this.inErrorRecoveryMode(recognizer)) { - return; - } - this.beginErrorCondition(recognizer); - const t = recognizer.getCurrentToken() - const expecting = this.getExpectedTokens(recognizer) - const msg = "missing " + expecting.toString(recognizer.literalNames, recognizer.symbolicNames) + - " at " + this.getTokenErrorDisplay(t) - recognizer.notifyErrorListeners(msg, t, null); - } - - /** - *

      The default implementation attempts to recover from the mismatched input - * by using single token insertion and deletion as described below. If the - * recovery attempt fails, this method throws an - * {@link InputMismatchException}.

      - * - *

      EXTRA TOKEN (single token deletion)

      - * - *

      {@code LA(1)} is not what we are looking for. If {@code LA(2)} has the - * right token, however, then assume {@code LA(1)} is some extra spurious - * token and delete it. Then consume and return the next token (which was - * the {@code LA(2)} token) as the successful result of the match operation.

      - * - *

      This recovery strategy is implemented by {@link - * //singleTokenDeletion}.

      - * - *

      MISSING TOKEN (single token insertion)

      - * - *

      If current token (at {@code LA(1)}) is consistent with what could come - * after the expected {@code LA(1)} token, then assume the token is missing - * and use the parser's {@link TokenFactory} to create it on the fly. The - * "insertion" is performed by returning the created token as the successful - * result of the match operation.

      - * - *

      This recovery strategy is implemented by {@link - * //singleTokenInsertion}.

      - * - *

      EXAMPLE

      - * - *

      For example, Input {@code i=(3;} is clearly missing the {@code ')'}. When - * the parser returns from the nested call to {@code expr}, it will have - * call chain:

      - * - *
      -     * stat → expr → atom
      -     * 
      - * - * and it will be trying to match the {@code ')'} at this point in the - * derivation: - * - *
      -     * => ID '=' '(' INT ')' ('+' atom)* ';'
      -     * ^
      -     * 
      - * - * The attempt to match {@code ')'} will fail when it sees {@code ';'} and - * call {@link //recoverInline}. To recover, it sees that {@code LA(1)==';'} - * is in the set of tokens that can follow the {@code ')'} token reference - * in rule {@code atom}. It can assume that you forgot the {@code ')'}. - */ - recoverInline(recognizer) { - // SINGLE TOKEN DELETION - const matchedSymbol = this.singleTokenDeletion(recognizer) - if (matchedSymbol !== null) { - // we have deleted the extra token. - // now, move past ttype token as if all were ok - recognizer.consume(); - return matchedSymbol; - } - // SINGLE TOKEN INSERTION - if (this.singleTokenInsertion(recognizer)) { - return this.getMissingSymbol(recognizer); - } - // even that didn't work; must throw the exception - throw new InputMismatchException(recognizer); - } - - /** - * This method implements the single-token insertion inline error recovery - * strategy. It is called by {@link //recoverInline} if the single-token - * deletion strategy fails to recover from the mismatched input. If this - * method returns {@code true}, {@code recognizer} will be in error recovery - * mode. - * - *

      This method determines whether or not single-token insertion is viable by - * checking if the {@code LA(1)} input symbol could be successfully matched - * if it were instead the {@code LA(2)} symbol. If this method returns - * {@code true}, the caller is responsible for creating and inserting a - * token with the correct type to produce this behavior.

      - * - * @param recognizer the parser instance - * @return {@code true} if single-token insertion is a viable recovery - * strategy for the current mismatched input, otherwise {@code false} - */ - singleTokenInsertion(recognizer) { - const currentSymbolType = recognizer.getTokenStream().LA(1) - // if current token is consistent with what could come after current - // ATN state, then we know we're missing a token; error recovery - // is free to conjure up and insert the missing token - const atn = recognizer._interp.atn - const currentState = atn.states[recognizer.state] - const next = currentState.transitions[0].target - const expectingAtLL2 = atn.nextTokens(next, recognizer._ctx) - if (expectingAtLL2.contains(currentSymbolType) ){ - this.reportMissingToken(recognizer); - return true; - } else { - return false; - } - } - - /** - * This method implements the single-token deletion inline error recovery - * strategy. It is called by {@link //recoverInline} to attempt to recover - * from mismatched input. If this method returns null, the parser and error - * handler state will not have changed. If this method returns non-null, - * {@code recognizer} will not be in error recovery mode since the - * returned token was a successful match. - * - *

      If the single-token deletion is successful, this method calls - * {@link //reportUnwantedToken} to report the error, followed by - * {@link Parser//consume} to actually "delete" the extraneous token. Then, - * before returning {@link //reportMatch} is called to signal a successful - * match.

      - * - * @param recognizer the parser instance - * @return the successfully matched {@link Token} instance if single-token - * deletion successfully recovers from the mismatched input, otherwise - * {@code null} - */ - singleTokenDeletion(recognizer) { - const nextTokenType = recognizer.getTokenStream().LA(2) - const expecting = this.getExpectedTokens(recognizer) - if (expecting.contains(nextTokenType)) { - this.reportUnwantedToken(recognizer); - // print("recoverFromMismatchedToken deleting " \ - // + str(recognizer.getTokenStream().LT(1)) \ - // + " since " + str(recognizer.getTokenStream().LT(2)) \ - // + " is what we want", file=sys.stderr) - recognizer.consume(); // simply delete extra token - // we want to return the token we're actually matching - const matchedSymbol = recognizer.getCurrentToken() - this.reportMatch(recognizer); // we know current token is correct - return matchedSymbol; - } else { - return null; - } - } - - /** - * Conjure up a missing token during error recovery. - * - * The recognizer attempts to recover from single missing - * symbols. But, actions might refer to that missing symbol. - * For example, x=ID {f($x);}. The action clearly assumes - * that there has been an identifier matched previously and that - * $x points at that token. If that token is missing, but - * the next token in the stream is what we want we assume that - * this token is missing and we keep going. Because we - * have to return some token to replace the missing token, - * we have to conjure one up. This method gives the user control - * over the tokens returned for missing tokens. Mostly, - * you will want to create something special for identifier - * tokens. For literals such as '{' and ',', the default - * action in the parser or tree parser works. It simply creates - * a CommonToken of the appropriate type. The text will be the token. - * If you change what tokens must be created by the lexer, - * override this method to create the appropriate tokens. - * - */ - getMissingSymbol(recognizer) { - const currentSymbol = recognizer.getCurrentToken() - const expecting = this.getExpectedTokens(recognizer) - const expectedTokenType = expecting.first() // get any element - let tokenText - if (expectedTokenType===Token.EOF) { - tokenText = ""; - } else { - tokenText = ""; - } - let current = currentSymbol - const lookback = recognizer.getTokenStream().LT(-1) - if (current.type===Token.EOF && lookback !== null) { - current = lookback; - } - return recognizer.getTokenFactory().create(current.source, - expectedTokenType, tokenText, Token.DEFAULT_CHANNEL, - -1, -1, current.line, current.column); - } - - getExpectedTokens(recognizer) { - return recognizer.getExpectedTokens(); - } - - /** - * How should a token be displayed in an error message? The default - * is to display just the text, but during development you might - * want to have a lot of information spit out. Override in that case - * to use t.toString() (which, for CommonToken, dumps everything about - * the token). This is better than forcing you to override a method in - * your token objects because you don't have to go modify your lexer - * so that it creates a new Java type. - */ - getTokenErrorDisplay(t) { - if (t === null) { - return ""; - } - let s = t.text - if (s === null) { - if (t.type===Token.EOF) { - s = ""; - } else { - s = "<" + t.type + ">"; - } - } - return this.escapeWSAndQuote(s); - } - - escapeWSAndQuote(s) { - s = s.replace(/\n/g,"\\n"); - s = s.replace(/\r/g,"\\r"); - s = s.replace(/\t/g,"\\t"); - return "'" + s + "'"; - } - - /** - * Compute the error recovery set for the current rule. During - * rule invocation, the parser pushes the set of tokens that can - * follow that rule reference on the stack; this amounts to - * computing FIRST of what follows the rule reference in the - * enclosing rule. See LinearApproximator.FIRST(). - * This local follow set only includes tokens - * from within the rule; i.e., the FIRST computation done by - * ANTLR stops at the end of a rule. - * - * EXAMPLE - * - * When you find a "no viable alt exception", the input is not - * consistent with any of the alternatives for rule r. The best - * thing to do is to consume tokens until you see something that - * can legally follow a call to r//or* any rule that called r. - * You don't want the exact set of viable next tokens because the - * input might just be missing a token--you might consume the - * rest of the input looking for one of the missing tokens. - * - * Consider grammar: - * - * a : '[' b ']' - * | '(' b ')' - * ; - * b : c '^' INT ; - * c : ID - * | INT - * ; - * - * At each rule invocation, the set of tokens that could follow - * that rule is pushed on a stack. Here are the various - * context-sensitive follow sets: - * - * FOLLOW(b1_in_a) = FIRST(']') = ']' - * FOLLOW(b2_in_a) = FIRST(')') = ')' - * FOLLOW(c_in_b) = FIRST('^') = '^' - * - * Upon erroneous input "[]", the call chain is - * - * a -> b -> c - * - * and, hence, the follow context stack is: - * - * depth follow set start of rule execution - * 0 a (from main()) - * 1 ']' b - * 2 '^' c - * - * Notice that ')' is not included, because b would have to have - * been called from a different context in rule a for ')' to be - * included. - * - * For error recovery, we cannot consider FOLLOW(c) - * (context-sensitive or otherwise). We need the combined set of - * all context-sensitive FOLLOW sets--the set of all tokens that - * could follow any reference in the call chain. We need to - * resync to one of those tokens. Note that FOLLOW(c)='^' and if - * we resync'd to that token, we'd consume until EOF. We need to - * sync to context-sensitive FOLLOWs for a, b, and c: {']','^'}. - * In this case, for input "[]", LA(1) is ']' and in the set, so we would - * not consume anything. After printing an error, rule c would - * return normally. Rule b would not find the required '^' though. - * At this point, it gets a mismatched token error and throws an - * exception (since LA(1) is not in the viable following token - * set). The rule exception handler tries to recover, but finds - * the same recovery set and doesn't consume anything. Rule b - * exits normally returning to rule a. Now it finds the ']' (and - * with the successful match exits errorRecovery mode). - * - * So, you can see that the parser walks up the call chain looking - * for the token that was a member of the recovery set. - * - * Errors are not generated in errorRecovery mode. - * - * ANTLR's error recovery mechanism is based upon original ideas: - * - * "Algorithms + Data Structures = Programs" by Niklaus Wirth - * - * and - * - * "A note on error recovery in recursive descent parsers": - * http://portal.acm.org/citation.cfm?id=947902.947905 - * - * Later, Josef Grosch had some good ideas: - * - * "Efficient and Comfortable Error Recovery in Recursive Descent - * Parsers": - * ftp://www.cocolab.com/products/cocktail/doca4.ps/ell.ps.zip - * - * Like Grosch I implement context-sensitive FOLLOW sets that are combined - * at run-time upon error to avoid overhead during parsing. - */ - getErrorRecoverySet(recognizer) { - const atn = recognizer._interp.atn - let ctx = recognizer._ctx - const recoverSet = new IntervalSet() - while (ctx !== null && ctx.invokingState>=0) { - // compute what follows who invoked us - const invokingState = atn.states[ctx.invokingState] - const rt = invokingState.transitions[0] - const follow = atn.nextTokens(rt.followState) - recoverSet.addSet(follow); - ctx = ctx.parentCtx; - } - recoverSet.removeOne(Token.EPSILON); - return recoverSet; - } - -// Consume tokens until one matches the given token set.// - consumeUntil(recognizer, set) { - let ttype = recognizer.getTokenStream().LA(1) - while( ttype !== Token.EOF && !set.contains(ttype)) { - recognizer.consume(); - ttype = recognizer.getTokenStream().LA(1); - } - } -} - - -/** - * This implementation of {@link ANTLRErrorStrategy} responds to syntax errors - * by immediately canceling the parse operation with a - * {@link ParseCancellationException}. The implementation ensures that the - * {@link ParserRuleContext//exception} field is set for all parse tree nodes - * that were not completed prior to encountering the error. - * - *

      - * This error strategy is useful in the following scenarios.

      - * - *
        - *
      • Two-stage parsing: This error strategy allows the first - * stage of two-stage parsing to immediately terminate if an error is - * encountered, and immediately fall back to the second stage. In addition to - * avoiding wasted work by attempting to recover from errors here, the empty - * implementation of {@link BailErrorStrategy//sync} improves the performance of - * the first stage.
      • - *
      • Silent validation: When syntax errors are not being - * reported or logged, and the parse result is simply ignored if errors occur, - * the {@link BailErrorStrategy} avoids wasting work on recovering from errors - * when the result will be ignored either way.
      • - *
      - * - *

      - * {@code myparser.setErrorHandler(new BailErrorStrategy());}

      - * - * @see Parser//setErrorHandler(ANTLRErrorStrategy) - * */ -class BailErrorStrategy extends DefaultErrorStrategy { - constructor() { - super(); - } - - /** - * Instead of recovering from exception {@code e}, re-throw it wrapped - * in a {@link ParseCancellationException} so it is not caught by the - * rule function catches. Use {@link Exception//getCause()} to get the - * original {@link RecognitionException}. - */ - recover(recognizer, e) { - let context = recognizer._ctx - while (context !== null) { - context.exception = e; - context = context.parentCtx; - } - throw new ParseCancellationException(e); - } - - /** - * Make sure we don't attempt to recover inline; if the parser - * successfully recovers, it won't throw an exception. - */ - recoverInline(recognizer) { - this.recover(recognizer, new InputMismatchException(recognizer)); - } - -// Make sure we don't attempt to recover from problems in subrules.// - sync(recognizer) { - // pass - } -} - - -module.exports = {BailErrorStrategy, DefaultErrorStrategy}; diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/error/Errors.js b/reverse_engineering/node_modules/antlr4/src/antlr4/error/Errors.js deleted file mode 100644 index 712d917..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/error/Errors.js +++ /dev/null @@ -1,174 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -/** - * The root of the ANTLR exception hierarchy. In general, ANTLR tracks just - * 3 kinds of errors: prediction errors, failed predicate errors, and - * mismatched input errors. In each case, the parser knows where it is - * in the input, where it is in the ATN, the rule invocation stack, - * and what kind of problem occurred. - */ - -const {PredicateTransition} = require('./../atn/Transition'); -const {Interval} = require('../IntervalSet').Interval; - -class RecognitionException extends Error { - constructor(params) { - super(params.message); - if (!!Error.captureStackTrace) { - Error.captureStackTrace(this, RecognitionException); - } else { - var stack = new Error().stack; - } - this.message = params.message; - this.recognizer = params.recognizer; - this.input = params.input; - this.ctx = params.ctx; - /** - * The current {@link Token} when an error occurred. Since not all streams - * support accessing symbols by index, we have to track the {@link Token} - * instance itself - */ - this.offendingToken = null; - /** - * Get the ATN state number the parser was in at the time the error - * occurred. For {@link NoViableAltException} and - * {@link LexerNoViableAltException} exceptions, this is the - * {@link DecisionState} number. For others, it is the state whose outgoing - * edge we couldn't match. - */ - this.offendingState = -1; - if (this.recognizer!==null) { - this.offendingState = this.recognizer.state; - } - } - - /** - * Gets the set of input symbols which could potentially follow the - * previously matched symbol at the time this exception was thrown. - * - *

      If the set of expected tokens is not known and could not be computed, - * this method returns {@code null}.

      - * - * @return The set of token types that could potentially follow the current - * state in the ATN, or {@code null} if the information is not available. - */ - getExpectedTokens() { - if (this.recognizer!==null) { - return this.recognizer.atn.getExpectedTokens(this.offendingState, this.ctx); - } else { - return null; - } - } - - //

      If the state number is not known, this method returns -1.

      - toString() { - return this.message; - } -} - -class LexerNoViableAltException extends RecognitionException { - constructor(lexer, input, startIndex, deadEndConfigs) { - super({message: "", recognizer: lexer, input: input, ctx: null}); - this.startIndex = startIndex; - this.deadEndConfigs = deadEndConfigs; - } - - toString() { - let symbol = ""; - if (this.startIndex >= 0 && this.startIndex < this.input.size) { - symbol = this.input.getText(new Interval(this.startIndex,this.startIndex)); - } - return "LexerNoViableAltException" + symbol; - } -} - - -/** - * Indicates that the parser could not decide which of two or more paths - * to take based upon the remaining input. It tracks the starting token - * of the offending input and also knows where the parser was - * in the various paths when the error. Reported by reportNoViableAlternative() - */ -class NoViableAltException extends RecognitionException { - constructor(recognizer, input, startToken, offendingToken, deadEndConfigs, ctx) { - ctx = ctx || recognizer._ctx; - offendingToken = offendingToken || recognizer.getCurrentToken(); - startToken = startToken || recognizer.getCurrentToken(); - input = input || recognizer.getInputStream(); - super({message: "", recognizer: recognizer, input: input, ctx: ctx}); - // Which configurations did we try at input.index() that couldn't match - // input.LT(1)?// - this.deadEndConfigs = deadEndConfigs; - // The token object at the start index; the input stream might - // not be buffering tokens so get a reference to it. (At the - // time the error occurred, of course the stream needs to keep a - // buffer all of the tokens but later we might not have access to those.) - this.startToken = startToken; - this.offendingToken = offendingToken; - } -} - -/** - * This signifies any kind of mismatched input exceptions such as - * when the current input does not match the expected token. -*/ -class InputMismatchException extends RecognitionException { - constructor(recognizer) { - super({message: "", recognizer: recognizer, input: recognizer.getInputStream(), ctx: recognizer._ctx}); - this.offendingToken = recognizer.getCurrentToken(); - } -} - -function formatMessage(predicate, message) { - if (message !==null) { - return message; - } else { - return "failed predicate: {" + predicate + "}?"; - } -} - -/** - * A semantic predicate failed during validation. Validation of predicates - * occurs when normally parsing the alternative just like matching a token. - * Disambiguating predicate evaluation occurs when we test a predicate during - * prediction. -*/ -class FailedPredicateException extends RecognitionException { - constructor(recognizer, predicate, message) { - super({ - message: formatMessage(predicate, message || null), recognizer: recognizer, - input: recognizer.getInputStream(), ctx: recognizer._ctx - }); - const s = recognizer._interp.atn.states[recognizer.state] - const trans = s.transitions[0] - if (trans instanceof PredicateTransition) { - this.ruleIndex = trans.ruleIndex; - this.predicateIndex = trans.predIndex; - } else { - this.ruleIndex = 0; - this.predicateIndex = 0; - } - this.predicate = predicate; - this.offendingToken = recognizer.getCurrentToken(); - } -} - - -class ParseCancellationException extends Error{ - constructor() { - super() - Error.captureStackTrace(this, ParseCancellationException); - } -} - -module.exports = { - RecognitionException, - NoViableAltException, - LexerNoViableAltException, - InputMismatchException, - FailedPredicateException, - ParseCancellationException -}; diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/error/index.js b/reverse_engineering/node_modules/antlr4/src/antlr4/error/index.js deleted file mode 100644 index 482b47e..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/error/index.js +++ /dev/null @@ -1,14 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -module.exports.RecognitionException = require('./Errors').RecognitionException; -module.exports.NoViableAltException = require('./Errors').NoViableAltException; -module.exports.LexerNoViableAltException = require('./Errors').LexerNoViableAltException; -module.exports.InputMismatchException = require('./Errors').InputMismatchException; -module.exports.FailedPredicateException = require('./Errors').FailedPredicateException; -module.exports.DiagnosticErrorListener = require('./DiagnosticErrorListener'); -module.exports.BailErrorStrategy = require('./ErrorStrategy').BailErrorStrategy; -module.exports.DefaultErrorStrategy = require('./ErrorStrategy').DefaultErrorStrategy; -module.exports.ErrorListener = require('./ErrorListener').ErrorListener; diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/index.js b/reverse_engineering/node_modules/antlr4/src/antlr4/index.js deleted file mode 100644 index a8392d6..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/index.js +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ -exports.atn = require('./atn/index'); -exports.codepointat = require('./polyfills/codepointat'); -exports.dfa = require('./dfa/index'); -exports.fromcodepoint = require('./polyfills/fromcodepoint'); -exports.tree = require('./tree/index'); -exports.error = require('./error/index'); -exports.Token = require('./Token').Token; -exports.CharStreams = require('./CharStreams'); -exports.CommonToken = require('./Token').CommonToken; -exports.InputStream = require('./InputStream'); -exports.FileStream = require('./FileStream'); -exports.CommonTokenStream = require('./CommonTokenStream'); -exports.Lexer = require('./Lexer'); -exports.Parser = require('./Parser'); -var pc = require('./PredictionContext'); -exports.PredictionContextCache = pc.PredictionContextCache; -exports.ParserRuleContext = require('./ParserRuleContext'); -exports.Interval = require('./IntervalSet').Interval; -exports.IntervalSet = require('./IntervalSet').IntervalSet; -exports.Utils = require('./Utils'); -exports.LL1Analyzer = require('./LL1Analyzer').LL1Analyzer; diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/polyfills/codepointat.js b/reverse_engineering/node_modules/antlr4/src/antlr4/polyfills/codepointat.js deleted file mode 100644 index 616f254..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/polyfills/codepointat.js +++ /dev/null @@ -1,56 +0,0 @@ -/*! https://mths.be/codepointat v0.2.0 by @mathias */ -if (!String.prototype.codePointAt) { - (function() { - 'use strict'; // needed to support `apply`/`call` with `undefined`/`null` - var defineProperty = (function() { - // IE 8 only supports `Object.defineProperty` on DOM elements - let result; - try { - const object = {}; - const $defineProperty = Object.defineProperty; - result = $defineProperty(object, object, object) && $defineProperty; - } catch(error) { - } - return result; - }()); - const codePointAt = function(position) { - if (this == null) { - throw TypeError(); - } - const string = String(this); - const size = string.length; - // `ToInteger` - let index = position ? Number(position) : 0; - if (index !== index) { // better `isNaN` - index = 0; - } - // Account for out-of-bounds indices: - if (index < 0 || index >= size) { - return undefined; - } - // Get the first code unit - const first = string.charCodeAt(index); - let second; - if ( // check if it’s the start of a surrogate pair - first >= 0xD800 && first <= 0xDBFF && // high surrogate - size > index + 1 // there is a next code unit - ) { - second = string.charCodeAt(index + 1); - if (second >= 0xDC00 && second <= 0xDFFF) { // low surrogate - // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae - return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; - } - } - return first; - }; - if (defineProperty) { - defineProperty(String.prototype, 'codePointAt', { - 'value': codePointAt, - 'configurable': true, - 'writable': true - }); - } else { - String.prototype.codePointAt = codePointAt; - } - }()); -} diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/polyfills/fromcodepoint.js b/reverse_engineering/node_modules/antlr4/src/antlr4/polyfills/fromcodepoint.js deleted file mode 100644 index cf53f93..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/polyfills/fromcodepoint.js +++ /dev/null @@ -1,63 +0,0 @@ -/*! https://mths.be/fromcodepoint v0.2.1 by @mathias */ -if (!String.fromCodePoint) { - (function() { - const defineProperty = (function() { - // IE 8 only supports `Object.defineProperty` on DOM elements - let result; - try { - const object = {}; - const $defineProperty = Object.defineProperty; - result = $defineProperty(object, object, object) && $defineProperty; - } catch(error) {} - return result; - }()); - const stringFromCharCode = String.fromCharCode; - const floor = Math.floor; - const fromCodePoint = function(_) { - const MAX_SIZE = 0x4000; - const codeUnits = []; - let highSurrogate; - let lowSurrogate; - let index = -1; - const length = arguments.length; - if (!length) { - return ''; - } - let result = ''; - while (++index < length) { - let codePoint = Number(arguments[index]); - if ( - !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity` - codePoint < 0 || // not a valid Unicode code point - codePoint > 0x10FFFF || // not a valid Unicode code point - floor(codePoint) !== codePoint // not an integer - ) { - throw RangeError('Invalid code point: ' + codePoint); - } - if (codePoint <= 0xFFFF) { // BMP code point - codeUnits.push(codePoint); - } else { // Astral code point; split in surrogate halves - // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae - codePoint -= 0x10000; - highSurrogate = (codePoint >> 10) + 0xD800; - lowSurrogate = (codePoint % 0x400) + 0xDC00; - codeUnits.push(highSurrogate, lowSurrogate); - } - if (index + 1 === length || codeUnits.length > MAX_SIZE) { - result += stringFromCharCode.apply(null, codeUnits); - codeUnits.length = 0; - } - } - return result; - }; - if (defineProperty) { - defineProperty(String, 'fromCodePoint', { - 'value': fromCodePoint, - 'configurable': true, - 'writable': true - }); - } else { - String.fromCodePoint = fromCodePoint; - } - }()); -} diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/tree/Tree.js b/reverse_engineering/node_modules/antlr4/src/antlr4/tree/Tree.js deleted file mode 100644 index cd87ef8..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/tree/Tree.js +++ /dev/null @@ -1,228 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const {Token} = require('./../Token'); -const {Interval} = require('./../IntervalSet'); -const INVALID_INTERVAL = new Interval(-1, -2); - -/** - * The basic notion of a tree has a parent, a payload, and a list of children. - * It is the most abstract interface for all the trees used by ANTLR. - */ -class Tree {} - -class SyntaxTree extends Tree { - constructor() { - super(); - } -} - -class ParseTree extends SyntaxTree { - constructor() { - super(); - } -} - -class RuleNode extends ParseTree { - constructor() { - super(); - } - - getRuleContext(){ - throw new Error("missing interface implementation") - } -} - -class TerminalNode extends ParseTree { - constructor() { - super(); - } -} - -class ErrorNode extends TerminalNode { - constructor() { - super(); - } -} - -class ParseTreeVisitor { - visit(ctx) { - if (Array.isArray(ctx)) { - return ctx.map(function(child) { - return child.accept(this); - }, this); - } else { - return ctx.accept(this); - } - } - - visitChildren(ctx) { - if (ctx.children) { - return this.visit(ctx.children); - } else { - return null; - } - } - - visitTerminal(node) { - } - - visitErrorNode(node) { - } -} - -class ParseTreeListener { - visitTerminal(node) { - } - - visitErrorNode(node) { - } - - enterEveryRule(node) { - } - - exitEveryRule(node) { - } -} - -class TerminalNodeImpl extends TerminalNode { - constructor(symbol) { - super(); - this.parentCtx = null; - this.symbol = symbol; - } - - getChild(i) { - return null; - } - - getSymbol() { - return this.symbol; - } - - getParent() { - return this.parentCtx; - } - - getPayload() { - return this.symbol; - } - - getSourceInterval() { - if (this.symbol === null) { - return INVALID_INTERVAL; - } - const tokenIndex = this.symbol.tokenIndex; - return new Interval(tokenIndex, tokenIndex); - } - - getChildCount() { - return 0; - } - - accept(visitor) { - return visitor.visitTerminal(this); - } - - getText() { - return this.symbol.text; - } - - toString() { - if (this.symbol.type === Token.EOF) { - return ""; - } else { - return this.symbol.text; - } - } -} - - -/** - * Represents a token that was consumed during resynchronization - * rather than during a valid match operation. For example, - * we will create this kind of a node during single token insertion - * and deletion as well as during "consume until error recovery set" - * upon no viable alternative exceptions. - */ -class ErrorNodeImpl extends TerminalNodeImpl { - constructor(token) { - super(token); - } - - isErrorNode() { - return true; - } - - accept(visitor) { - return visitor.visitErrorNode(this); - } -} - -class ParseTreeWalker { - - /** - * Performs a walk on the given parse tree starting at the root and going down recursively - * with depth-first search. On each node, {@link ParseTreeWalker//enterRule} is called before - * recursively walking down into child nodes, then - * {@link ParseTreeWalker//exitRule} is called after the recursive call to wind up. - * @param listener The listener used by the walker to process grammar rules - * @param t The parse tree to be walked on - */ - walk(listener, t) { - const errorNode = t instanceof ErrorNode || - (t.isErrorNode !== undefined && t.isErrorNode()); - if (errorNode) { - listener.visitErrorNode(t); - } else if (t instanceof TerminalNode) { - listener.visitTerminal(t); - } else { - this.enterRule(listener, t); - for (let i = 0; i < t.getChildCount(); i++) { - const child = t.getChild(i); - this.walk(listener, child); - } - this.exitRule(listener, t); - } - } - - /** - * Enters a grammar rule by first triggering the generic event {@link ParseTreeListener//enterEveryRule} - * then by triggering the event specific to the given parse tree node - * @param listener The listener responding to the trigger events - * @param r The grammar rule containing the rule context - */ - enterRule(listener, r) { - const ctx = r.getRuleContext(); - listener.enterEveryRule(ctx); - ctx.enterRule(listener); - } - - /** - * Exits a grammar rule by first triggering the event specific to the given parse tree node - * then by triggering the generic event {@link ParseTreeListener//exitEveryRule} - * @param listener The listener responding to the trigger events - * @param r The grammar rule containing the rule context - */ - exitRule(listener, r) { - const ctx = r.getRuleContext(); - ctx.exitRule(listener); - listener.exitEveryRule(ctx); - } -} - -ParseTreeWalker.DEFAULT = new ParseTreeWalker(); - -module.exports = { - RuleNode, - ErrorNode, - TerminalNode, - ErrorNodeImpl, - TerminalNodeImpl, - ParseTreeListener, - ParseTreeVisitor, - ParseTreeWalker, - INVALID_INTERVAL -} diff --git a/reverse_engineering/node_modules/antlr4/src/antlr4/tree/Trees.js b/reverse_engineering/node_modules/antlr4/src/antlr4/tree/Trees.js deleted file mode 100644 index 95343ab..0000000 --- a/reverse_engineering/node_modules/antlr4/src/antlr4/tree/Trees.js +++ /dev/null @@ -1,138 +0,0 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. - * Use of this file is governed by the BSD 3-clause license that - * can be found in the LICENSE.txt file in the project root. - */ - -const Utils = require('./../Utils'); -const {Token} = require('./../Token'); -const {ErrorNode, TerminalNode, RuleNode} = require('./Tree'); - -/** A set of utility routines useful for all kinds of ANTLR trees. */ -const Trees = { - /** - * Print out a whole tree in LISP form. {@link //getNodeText} is used on the - * node payloads to get the text for the nodes. Detect - * parse trees and extract data appropriately. - */ - toStringTree: function(tree, ruleNames, recog) { - ruleNames = ruleNames || null; - recog = recog || null; - if(recog!==null) { - ruleNames = recog.ruleNames; - } - let s = Trees.getNodeText(tree, ruleNames); - s = Utils.escapeWhitespace(s, false); - const c = tree.getChildCount(); - if(c===0) { - return s; - } - let res = "(" + s + ' '; - if(c>0) { - s = Trees.toStringTree(tree.getChild(0), ruleNames); - res = res.concat(s); - } - for(let i=1;i { - const s1 = new antlr4.IntervalSet(); - s1.addOne(20); - s1.addOne(154); - s1.addRange(169, 171); - expect(s1.length).toEqual(5); -}); - -it("merges simple interval sets", () => { - const s1 = new antlr4.IntervalSet(); - s1.addOne(10); - expect(s1.toString()).toEqual("10"); - const s2 = new antlr4.IntervalSet(); - s2.addOne(12); - expect(s2.toString()).toEqual("12"); - const merged = new antlr4.IntervalSet(); - merged.addSet(s1); - expect(merged.toString()).toEqual("10"); - merged.addSet(s2); - expect(merged.toString()).toEqual("{10, 12}"); - let s3 = new antlr4.IntervalSet(); - s3.addOne(10); - merged.addSet(s3); - expect(merged.toString()).toEqual("{10, 12}"); - s3 = new antlr4.IntervalSet(); - s3.addOne(11); - merged.addSet(s3); - expect(merged.toString()).toEqual("10..12"); - s3 = new antlr4.IntervalSet(); - s3.addOne(12); - merged.addSet(s3); - expect(merged.toString()).toEqual("10..12"); - -}); - -it("merges complex interval sets", () => { - const s1 = new antlr4.IntervalSet(); - s1.addOne(20); - s1.addOne(141); - s1.addOne(144); - s1.addOne(154); - s1.addRange(169, 171); - s1.addOne(173); - expect(s1.toString()).toEqual("{20, 141, 144, 154, 169..171, 173}"); - const s2 = new antlr4.IntervalSet(); - s2.addRange(9, 14); - s2.addOne(53); - s2.addRange(55, 63); - s2.addRange(65, 72); - s2.addRange(74, 117); - s2.addRange(119, 152); - s2.addRange(154, 164); - expect(s2.toString()).toEqual("{9..14, 53, 55..63, 65..72, 74..117, 119..152, 154..164}"); - s1.addSet(s2); - expect(s1.toString()).toEqual("{9..14, 20, 53, 55..63, 65..72, 74..117, 119..152, 154..164, 169..171, 173}"); -}); diff --git a/reverse_engineering/node_modules/antlr4/webpack.config.js b/reverse_engineering/node_modules/antlr4/webpack.config.js deleted file mode 100644 index 84c5a57..0000000 --- a/reverse_engineering/node_modules/antlr4/webpack.config.js +++ /dev/null @@ -1,28 +0,0 @@ -const path = require('path'); - -module.exports = { - mode: "production", - entry: './src/antlr4/index.js', - output: { - filename: 'antlr4.js', - path: path.resolve(__dirname, 'dist'), - // the name of the exported antlr4 - library: "antlr4", - libraryTarget: 'window' - }, - node: { - module: "empty", - net: "empty", - fs: "empty" - }, - target: "web", - module: { - rules: [{ - test: /\.js$/, - exclude: /node_modules/, - use: { - loader: 'babel-loader', - } - }] - } -}; diff --git a/reverse_engineering/node_modules/arrify/index.d.ts b/reverse_engineering/node_modules/arrify/index.d.ts deleted file mode 100644 index bfd0cf5..0000000 --- a/reverse_engineering/node_modules/arrify/index.d.ts +++ /dev/null @@ -1,38 +0,0 @@ -/** -Convert a value to an array. - -_Supplying `null` or `undefined` results in an empty array._ - -@example -``` -import arrify = require('arrify'); - -arrify('🦄'); -//=> ['🦄'] - -arrify(['🦄']); -//=> ['🦄'] - -arrify(new Set(['🦄'])); -//=> ['🦄'] - -arrify(null); -//=> [] - -arrify(undefined); -//=> [] -``` -*/ -declare function arrify( - value: ValueType -): ValueType extends (null | undefined) - ? [] - : ValueType extends string - ? [string] - : ValueType extends ReadonlyArray // TODO: Use 'readonly unknown[]' in the next major version - ? ValueType - : ValueType extends Iterable - ? T[] - : [ValueType]; - -export = arrify; diff --git a/reverse_engineering/node_modules/arrify/index.js b/reverse_engineering/node_modules/arrify/index.js deleted file mode 100644 index 49a5c9a..0000000 --- a/reverse_engineering/node_modules/arrify/index.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -const arrify = value => { - if (value === null || value === undefined) { - return []; - } - - if (Array.isArray(value)) { - return value; - } - - if (typeof value === 'string') { - return [value]; - } - - if (typeof value[Symbol.iterator] === 'function') { - return [...value]; - } - - return [value]; -}; - -module.exports = arrify; diff --git a/reverse_engineering/node_modules/arrify/license b/reverse_engineering/node_modules/arrify/license deleted file mode 100644 index e7af2f7..0000000 --- a/reverse_engineering/node_modules/arrify/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -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/reverse_engineering/node_modules/arrify/package.json b/reverse_engineering/node_modules/arrify/package.json deleted file mode 100644 index 39fcde2..0000000 --- a/reverse_engineering/node_modules/arrify/package.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "_from": "arrify@^2.0.1", - "_id": "arrify@2.0.1", - "_inBundle": false, - "_integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "_location": "/arrify", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "arrify@^2.0.1", - "name": "arrify", - "escapedName": "arrify", - "rawSpec": "^2.0.1", - "saveSpec": null, - "fetchSpec": "^2.0.1" - }, - "_requiredBy": [ - "/@google-cloud/bigquery", - "/@google-cloud/common", - "/@google-cloud/paginator", - "/google-auth-library" - ], - "_resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "_shasum": "c9655e9331e0abcd588d2a7cad7e9956f66701fa", - "_spec": "arrify@^2.0.1", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/@google-cloud/bigquery", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/arrify/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Convert a value to an array", - "devDependencies": { - "ava": "^1.4.1", - "tsd": "^0.7.2", - "xo": "^0.24.0" - }, - "engines": { - "node": ">=8" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "homepage": "https://github.com/sindresorhus/arrify#readme", - "keywords": [ - "array", - "arrify", - "arrayify", - "convert", - "value", - "ensure" - ], - "license": "MIT", - "name": "arrify", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/arrify.git" - }, - "scripts": { - "test": "xo && ava && tsd" - }, - "version": "2.0.1" -} diff --git a/reverse_engineering/node_modules/arrify/readme.md b/reverse_engineering/node_modules/arrify/readme.md deleted file mode 100644 index b3dfc83..0000000 --- a/reverse_engineering/node_modules/arrify/readme.md +++ /dev/null @@ -1,39 +0,0 @@ -# arrify [![Build Status](https://travis-ci.org/sindresorhus/arrify.svg?branch=master)](https://travis-ci.org/sindresorhus/arrify) - -> Convert a value to an array - - -## Install - -``` -$ npm install arrify -``` - - -## Usage - -```js -const arrify = require('arrify'); - -arrify('🦄'); -//=> ['🦄'] - -arrify(['🦄']); -//=> ['🦄'] - -arrify(new Set(['🦄'])); -//=> ['🦄'] - -arrify(null); -//=> [] - -arrify(undefined); -//=> [] -``` - -*Supplying `null` or `undefined` results in an empty array.* - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/reverse_engineering/node_modules/base64-js/LICENSE b/reverse_engineering/node_modules/base64-js/LICENSE deleted file mode 100644 index 6d52b8a..0000000 --- a/reverse_engineering/node_modules/base64-js/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Jameson Little - -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/reverse_engineering/node_modules/base64-js/README.md b/reverse_engineering/node_modules/base64-js/README.md deleted file mode 100644 index b42a48f..0000000 --- a/reverse_engineering/node_modules/base64-js/README.md +++ /dev/null @@ -1,34 +0,0 @@ -base64-js -========= - -`base64-js` does basic base64 encoding/decoding in pure JS. - -[![build status](https://secure.travis-ci.org/beatgammit/base64-js.png)](http://travis-ci.org/beatgammit/base64-js) - -Many browsers already have base64 encoding/decoding functionality, but it is for text data, not all-purpose binary data. - -Sometimes encoding/decoding binary data in the browser is useful, and that is what this module does. - -## install - -With [npm](https://npmjs.org) do: - -`npm install base64-js` and `var base64js = require('base64-js')` - -For use in web browsers do: - -`` - -[Get supported base64-js with the Tidelift Subscription](https://tidelift.com/subscription/pkg/npm-base64-js?utm_source=npm-base64-js&utm_medium=referral&utm_campaign=readme) - -## methods - -`base64js` has three exposed functions, `byteLength`, `toByteArray` and `fromByteArray`, which both take a single argument. - -* `byteLength` - Takes a base64 string and returns length of byte array -* `toByteArray` - Takes a base64 string and returns a byte array -* `fromByteArray` - Takes a byte array and returns a base64 string - -## license - -MIT diff --git a/reverse_engineering/node_modules/base64-js/base64js.min.js b/reverse_engineering/node_modules/base64-js/base64js.min.js deleted file mode 100644 index 908ac83..0000000 --- a/reverse_engineering/node_modules/base64-js/base64js.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"==typeof window?"undefined"==typeof global?"undefined"==typeof self?this:self:global:window,b.base64js=a()}})(function(){return function(){function b(d,e,g){function a(j,i){if(!e[j]){if(!d[j]){var f="function"==typeof require&&require;if(!i&&f)return f(j,!0);if(h)return h(j,!0);var c=new Error("Cannot find module '"+j+"'");throw c.code="MODULE_NOT_FOUND",c}var k=e[j]={exports:{}};d[j][0].call(k.exports,function(b){var c=d[j][1][b];return a(c||b)},k,k.exports,b,d,e,g)}return e[j].exports}for(var h="function"==typeof require&&require,c=0;c>16,j[k++]=255&b>>8,j[k++]=255&b;return 2===h&&(b=l[a.charCodeAt(c)]<<2|l[a.charCodeAt(c+1)]>>4,j[k++]=255&b),1===h&&(b=l[a.charCodeAt(c)]<<10|l[a.charCodeAt(c+1)]<<4|l[a.charCodeAt(c+2)]>>2,j[k++]=255&b>>8,j[k++]=255&b),j}function g(a){return k[63&a>>18]+k[63&a>>12]+k[63&a>>6]+k[63&a]}function h(a,b,c){for(var d,e=[],f=b;fj?j:g+f));return 1===d?(b=a[c-1],e.push(k[b>>2]+k[63&b<<4]+"==")):2===d&&(b=(a[c-2]<<8)+a[c-1],e.push(k[b>>10]+k[63&b>>4]+k[63&b<<2]+"=")),e.join("")}c.byteLength=function(a){var b=d(a),c=b[0],e=b[1];return 3*(c+e)/4-e},c.toByteArray=f,c.fromByteArray=j;for(var k=[],l=[],m="undefined"==typeof Uint8Array?Array:Uint8Array,n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=0,p=n.length;o 0) { - throw new Error('Invalid string. Length must be a multiple of 4') - } - - // Trim off extra bytes after placeholder bytes are found - // See: https://github.com/beatgammit/base64-js/issues/42 - var validLen = b64.indexOf('=') - if (validLen === -1) validLen = len - - var placeHoldersLen = validLen === len - ? 0 - : 4 - (validLen % 4) - - return [validLen, placeHoldersLen] -} - -// base64 is 4/3 + up to two characters of the original data -function byteLength (b64) { - var lens = getLens(b64) - var validLen = lens[0] - var placeHoldersLen = lens[1] - return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen -} - -function _byteLength (b64, validLen, placeHoldersLen) { - return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen -} - -function toByteArray (b64) { - var tmp - var lens = getLens(b64) - var validLen = lens[0] - var placeHoldersLen = lens[1] - - var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)) - - var curByte = 0 - - // if there are placeholders, only get up to the last complete 4 chars - var len = placeHoldersLen > 0 - ? validLen - 4 - : validLen - - var i - for (i = 0; i < len; i += 4) { - tmp = - (revLookup[b64.charCodeAt(i)] << 18) | - (revLookup[b64.charCodeAt(i + 1)] << 12) | - (revLookup[b64.charCodeAt(i + 2)] << 6) | - revLookup[b64.charCodeAt(i + 3)] - arr[curByte++] = (tmp >> 16) & 0xFF - arr[curByte++] = (tmp >> 8) & 0xFF - arr[curByte++] = tmp & 0xFF - } - - if (placeHoldersLen === 2) { - tmp = - (revLookup[b64.charCodeAt(i)] << 2) | - (revLookup[b64.charCodeAt(i + 1)] >> 4) - arr[curByte++] = tmp & 0xFF - } - - if (placeHoldersLen === 1) { - tmp = - (revLookup[b64.charCodeAt(i)] << 10) | - (revLookup[b64.charCodeAt(i + 1)] << 4) | - (revLookup[b64.charCodeAt(i + 2)] >> 2) - arr[curByte++] = (tmp >> 8) & 0xFF - arr[curByte++] = tmp & 0xFF - } - - return arr -} - -function tripletToBase64 (num) { - return lookup[num >> 18 & 0x3F] + - lookup[num >> 12 & 0x3F] + - lookup[num >> 6 & 0x3F] + - lookup[num & 0x3F] -} - -function encodeChunk (uint8, start, end) { - var tmp - var output = [] - for (var i = start; i < end; i += 3) { - tmp = - ((uint8[i] << 16) & 0xFF0000) + - ((uint8[i + 1] << 8) & 0xFF00) + - (uint8[i + 2] & 0xFF) - output.push(tripletToBase64(tmp)) - } - return output.join('') -} - -function fromByteArray (uint8) { - var tmp - var len = uint8.length - var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes - var parts = [] - var maxChunkLength = 16383 // must be multiple of 3 - - // go through the array every three bytes, we'll deal with trailing stuff later - for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { - parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) - } - - // pad the end with zeros, but make sure to not forget the extra bytes - if (extraBytes === 1) { - tmp = uint8[len - 1] - parts.push( - lookup[tmp >> 2] + - lookup[(tmp << 4) & 0x3F] + - '==' - ) - } else if (extraBytes === 2) { - tmp = (uint8[len - 2] << 8) + uint8[len - 1] - parts.push( - lookup[tmp >> 10] + - lookup[(tmp >> 4) & 0x3F] + - lookup[(tmp << 2) & 0x3F] + - '=' - ) - } - - return parts.join('') -} diff --git a/reverse_engineering/node_modules/base64-js/package.json b/reverse_engineering/node_modules/base64-js/package.json deleted file mode 100644 index 5d8f13b..0000000 --- a/reverse_engineering/node_modules/base64-js/package.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "_from": "base64-js@^1.3.0", - "_id": "base64-js@1.5.1", - "_inBundle": false, - "_integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "_location": "/base64-js", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "base64-js@^1.3.0", - "name": "base64-js", - "escapedName": "base64-js", - "rawSpec": "^1.3.0", - "saveSpec": null, - "fetchSpec": "^1.3.0" - }, - "_requiredBy": [ - "/google-auth-library" - ], - "_resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "_shasum": "1b1b440160a5bf7ad40b650f095963481903930a", - "_spec": "base64-js@^1.3.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/google-auth-library", - "author": { - "name": "T. Jameson Little", - "email": "t.jameson.little@gmail.com" - }, - "bugs": { - "url": "https://github.com/beatgammit/base64-js/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Base64 encoding/decoding in pure JS", - "devDependencies": { - "babel-minify": "^0.5.1", - "benchmark": "^2.1.4", - "browserify": "^16.3.0", - "standard": "*", - "tape": "4.x" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "homepage": "https://github.com/beatgammit/base64-js", - "keywords": [ - "base64" - ], - "license": "MIT", - "main": "index.js", - "name": "base64-js", - "repository": { - "type": "git", - "url": "git://github.com/beatgammit/base64-js.git" - }, - "scripts": { - "build": "browserify -s base64js -r ./ | minify > base64js.min.js", - "lint": "standard", - "test": "npm run lint && npm run unit", - "unit": "tape test/*.js" - }, - "typings": "index.d.ts", - "version": "1.5.1" -} diff --git a/reverse_engineering/node_modules/big.js/CHANGELOG.md b/reverse_engineering/node_modules/big.js/CHANGELOG.md deleted file mode 100644 index 873cc21..0000000 --- a/reverse_engineering/node_modules/big.js/CHANGELOG.md +++ /dev/null @@ -1,191 +0,0 @@ -#### 6.1.1 - -* 03/05/21 -* #169 Bugfix: `round`, `toFixed` etc. using original constructor `RM` (bug introduced in *v6.0.0*). -* #169 Correct rounding mode documentation. -* Add version number to legacy documentation. - -#### 6.1.0 - -* 26/04/21 -* #165 Add missing documentation of `toFixed` etc. rounding mode parameter. -* #150 Add static rounding modes to `Big` constructor. - -#### 6.0.3 - -* 02/12/20 -* #148 Bugfix: primitive numbers passed to constructor internally in strict mode. - -#### 6.0.2 - -* 31/10/20 -* #147 Change `toJSON` to be an alias of `toString`. - -#### 6.0.1 - -* 30/09/20 -* Correct `sqrt` initial estimate. - -#### 6.0.0 - -* 25/09/20 -* Add optional rounding mode parameter to `toExponential`, `toFixed` and `toPrecision`. -* Add a strict mode to disallow imprecise number/Big conversions when `Big.strict = true`. -* Add `toNumber` method. -* Add `prec` method to round a Big to a specified number of significant digits. -* Add version selector to API documentation. -* Change `toJSON` to return exponential format. -* Remove *big.min.js*. -* Remove `Big.version`. -* Rename *doc* folder to *docs* to use it as the GitHub publishing source. -* Add legacy API documentation to *docs*. -* Add *README* to *perf* directory. -* Refactor test suite, and add `toNumber` and `prec` tests. -* Update *README*. - -#### 5.2.2 - -* 18/10/18 -* #109 Remove opencollective dependency. - -#### 5.2.1 - -* Delete *bower.json*. - -#### 5.2.0 - -* 09/10/18 -* #63 Allow negative argument for `round`. -* #107 `sqrt` of large number. - -#### 5.1.2 - -* 24/05/18 -* #95 Add `browser` field to *package.json*. -* Restore named export to enable `import {Big}`. - -#### 5.1.1 - -* 22/05/18 -* #95 Remove named export. - -#### 5.1.0 - -* 22/05/18 -* Amend *.mjs* exports. -* Remove extension from `main` field in *package.json*. - -#### 5.0.3 - -* 23/10/17 -* #89 Optimisation of internal `round` function. - -#### 5.0.2 - -* 13/10/17 -* Update *README.md*. - -#### 5.0.1 - -* 13/10/17 -* Correct `Big.version` number. - -#### 5.0.0 - -* 13/10/17 -* Return `-0` from `valueOf` for negative zero. -* Refactor the methods which return a string. -* Amend error messaging. -* Update API document and change its colour scheme. -* Add `Big.version`. -* Remove bitcoin address. - -#### 4.0.2 - -* 28/09/17 -* Add *big.mjs* for use with Node.js with `--experimental-modules` flag. - -#### 4.0.0 - -* 27/09/17 -* Rename `Big.E_POS` to `Big.PE`, `Big.E_NEG` to `Big.NE`. -* Refactor error messaging. -* Throw if `null` is passed to `toFixed` etc. - -#### 3.2.0 - -* 14/09/17 Aid ES6 import. - -#### 3.1.3 - -* Minor documentation updates. - -#### 3.1.2 - -* README typo. - -#### 3.1.1 - -* API documentation update, including FAQ additions. - -#### 3.1.0 - -* Renamed and exposed `TO_EXP_NEG` and `TO_EXP_POS` as `Big.E_NEG` and `Big.E_POS`. - -#### 3.0.2 - -* Remove *.npmignore*, use `files` field in *package.json* instead. - -#### 3.0.1 - -* Added `sub`, `add` and `mul` aliases. -* Clean-up after lint. - -#### 3.0.0 - -* 10/12/14 Added [multiple constructor functionality](http://mikemcl.github.io/big.js/#faq). -* No breaking changes or other additions, but a major code reorganisation, so *v3* seemed appropiate. - -#### 2.5.2 - -* 1/11/14 Added bower.json. - -#### 2.5.1 - -* 8/06/14 Amend README requires. - -#### 2.5.0 - -* 26/01/14 Added `toJSON` method so serialization uses `toString`. - -#### 2.4.1 - -* 17/10/13 Conform signed zero to IEEEE 754 (2008). - -#### 2.4.0 - -* 19/09/13 Throw instances of `Error`. - -#### 2.3.0 - -* 16/09/13 Added `cmp` method. - -#### 2.2.0 - -* 11/07/13 Added 'round up' mode. - -#### 2.1.0 - -* 26/06/13 Allow e.g. `.1` and `2.`. - -#### 2.0.0 - -* 12/05/13 Added `abs` method and replaced `cmp` with `eq`, `gt`, `gte`, `lt`, and `lte` methods. - -#### 1.0.1 - -* Changed default value of MAX_DP to 1E6 - -#### 1.0.0 - -* 7/11/2012 Initial release diff --git a/reverse_engineering/node_modules/big.js/LICENCE.md b/reverse_engineering/node_modules/big.js/LICENCE.md deleted file mode 100644 index aa61ab9..0000000 --- a/reverse_engineering/node_modules/big.js/LICENCE.md +++ /dev/null @@ -1,26 +0,0 @@ -The MIT License (MIT) -===================== - -Copyright © `<2021>` `Michael Mclaughlin` - -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/reverse_engineering/node_modules/big.js/README.md b/reverse_engineering/node_modules/big.js/README.md deleted file mode 100644 index ddfba2c..0000000 --- a/reverse_engineering/node_modules/big.js/README.md +++ /dev/null @@ -1,207 +0,0 @@ -# big.js - -**A small, fast JavaScript library for arbitrary-precision decimal arithmetic.** - -[![npm version](https://img.shields.io/npm/v/big.js.svg)](https://www.npmjs.com/package/big.js) -[![npm downloads](https://img.shields.io/npm/dw/big.js)](https://www.npmjs.com/package/big.js) - -## Features - -- Simple API -- Faster, smaller and easier-to-use than JavaScript versions of Java's BigDecimal -- Only 6 KB minified -- Replicates the `toExponential`, `toFixed` and `toPrecision` methods of JavaScript Numbers -- Stores values in an accessible decimal floating point format -- Comprehensive [documentation](http://mikemcl.github.io/big.js/) and test set -- No dependencies -- Uses ECMAScript 3 only, so works in all browsers - -The little sister to [bignumber.js](https://github.com/MikeMcl/bignumber.js/) and [decimal.js](https://github.com/MikeMcl/decimal.js/). See [here](https://github.com/MikeMcl/big.js/wiki) for some notes on the difference between them. - -## Install - -The library is the single JavaScript file *big.js* or the ES module *big.mjs*. - -### Browsers - -Add Big to global scope: - -```html - -``` - -ES module: - -```html - -``` - -### [Node.js](http://nodejs.org) - -```bash -$ npm install big.js -``` - -CommonJS: - -```javascript -const Big = require('big.js'); -``` - -ES module: - -```javascript -import Big from 'big.js'; -``` - -### [Deno](https://deno.land/) - -```javascript -import Big from 'https://raw.githubusercontent.com/mikemcl/big.js/v6.0.0/big.mjs'; -import Big from 'https://unpkg.com/big.js@6.0.0/big.mjs'; -``` - -## Use - -*In the code examples below, semicolons and `toString` calls are not shown.* - -The library exports a single constructor function, `Big`. - -A Big number is created from a primitive number, string, or other Big number. - -```javascript -x = new Big(123.4567) -y = Big('123456.7e-3') // 'new' is optional -z = new Big(x) -x.eq(y) && x.eq(z) && y.eq(z) // true -``` - -In Big strict mode, creating a Big number from a primitive number is disallowed. - -```javascript -Big.strict = true -x = new Big(1) // TypeError: [big.js] Invalid number -y = new Big('1.0000000000000001') -y.toNumber() // Error: [big.js] Imprecise conversion -``` - -A Big number is immutable in the sense that it is not changed by its methods. - -```javascript -0.3 - 0.1 // 0.19999999999999998 -x = new Big(0.3) -x.minus(0.1) // "0.2" -x // "0.3" -``` - -The methods that return a Big number can be chained. - -```javascript -x.div(y).plus(z).times(9).minus('1.234567801234567e+8').plus(976.54321).div('2598.11772') -x.sqrt().div(y).pow(3).gt(y.mod(z)) // true -``` - -Like JavaScript's Number type, there are `toExponential`, `toFixed` and `toPrecision` methods. - -```javascript -x = new Big(255.5) -x.toExponential(5) // "2.55500e+2" -x.toFixed(5) // "255.50000" -x.toPrecision(5) // "255.50" -``` - -The arithmetic methods always return the exact result except `div`, `sqrt` and `pow` -(with negative exponent), as these methods involve division. - -The maximum number of decimal places and the rounding mode used to round the results of these methods is determined by the value of the `DP` and `RM` properties of the `Big` number constructor. - -```javascript -Big.DP = 10 -Big.RM = Big.roundHalfUp - -x = new Big(2); -y = new Big(3); -z = x.div(y) // "0.6666666667" -z.sqrt() // "0.8164965809" -z.pow(-3) // "3.3749999995" -z.times(z) // "0.44444444448888888889" -z.times(z).round(10) // "0.4444444445" -``` - -The value of a Big number is stored in a decimal floating point format in terms of a coefficient, exponent and sign. - -```javascript -x = new Big(-123.456); -x.c // [1,2,3,4,5,6] coefficient (i.e. significand) -x.e // 2 exponent -x.s // -1 sign -``` - -For advanced usage, multiple Big number constructors can be created, each with an independent configuration. - -For further information see the [API](http://mikemcl.github.io/big.js/) reference documentation. - -## Minify - -To minify using, for example, npm and [terser](https://github.com/terser/terser) - -```bash -$ npm install -g terser -``` - -```bash -$ terser big.js -c -m -o big.min.js -``` - -## Test - -The *test* directory contains the test scripts for each Big number method. - -The tests can be run with Node.js or a browser. - -Run all the tests: - -```bash -$ npm test -``` - -Test a single method: - -```bash -$ node test/toFixed -``` - -For the browser, see *runner.html* and *test.html* in the *test/browser* directory. - -*big-vs-number.html* is a old application that enables some of the methods of big.js to be compared with those of JavaScript's Number type. - -## TypeScript - -The [DefinitelyTyped](https://github.com/borisyankov/DefinitelyTyped) project has a Typescript type definitions file for big.js. - -```bash -$ npm install --save-dev @types/big.js -``` - -Any questions about the TypeScript type definitions file should be addressed to the DefinitelyTyped project. - -## Licence - -[MIT](LICENCE.md) - -## Contributors - - - -## Financial supporters - -Thank you to all who have supported this project via [Open Collective](https://opencollective.com/bigjs), particularly [Coinbase](https://www.coinbase.com/). - - diff --git a/reverse_engineering/node_modules/big.js/big.js b/reverse_engineering/node_modules/big.js/big.js deleted file mode 100644 index 3731ac0..0000000 --- a/reverse_engineering/node_modules/big.js/big.js +++ /dev/null @@ -1,1032 +0,0 @@ -/* - * big.js v6.1.1 - * A small, fast, easy-to-use library for arbitrary-precision decimal arithmetic. - * Copyright (c) 2021 Michael Mclaughlin - * https://github.com/MikeMcl/big.js/LICENCE.md - */ -;(function (GLOBAL) { - 'use strict'; - var Big, - - -/************************************** EDITABLE DEFAULTS *****************************************/ - - - // The default values below must be integers within the stated ranges. - - /* - * The maximum number of decimal places (DP) of the results of operations involving division: - * div and sqrt, and pow with negative exponents. - */ - DP = 20, // 0 to MAX_DP - - /* - * The rounding mode (RM) used when rounding to the above decimal places. - * - * 0 Towards zero (i.e. truncate, no rounding). (ROUND_DOWN) - * 1 To nearest neighbour. If equidistant, round up. (ROUND_HALF_UP) - * 2 To nearest neighbour. If equidistant, to even. (ROUND_HALF_EVEN) - * 3 Away from zero. (ROUND_UP) - */ - RM = 1, // 0, 1, 2 or 3 - - // The maximum value of DP and Big.DP. - MAX_DP = 1E6, // 0 to 1000000 - - // The maximum magnitude of the exponent argument to the pow method. - MAX_POWER = 1E6, // 1 to 1000000 - - /* - * The negative exponent (NE) at and beneath which toString returns exponential notation. - * (JavaScript numbers: -7) - * -1000000 is the minimum recommended exponent value of a Big. - */ - NE = -7, // 0 to -1000000 - - /* - * The positive exponent (PE) at and above which toString returns exponential notation. - * (JavaScript numbers: 21) - * 1000000 is the maximum recommended exponent value of a Big, but this limit is not enforced. - */ - PE = 21, // 0 to 1000000 - - /* - * When true, an error will be thrown if a primitive number is passed to the Big constructor, - * or if valueOf is called, or if toNumber is called on a Big which cannot be converted to a - * primitive number without a loss of precision. - */ - STRICT = false, // true or false - - -/**************************************************************************************************/ - - - // Error messages. - NAME = '[big.js] ', - INVALID = NAME + 'Invalid ', - INVALID_DP = INVALID + 'decimal places', - INVALID_RM = INVALID + 'rounding mode', - DIV_BY_ZERO = NAME + 'Division by zero', - - // The shared prototype object. - P = {}, - UNDEFINED = void 0, - NUMERIC = /^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i; - - - /* - * Create and return a Big constructor. - */ - function _Big_() { - - /* - * The Big constructor and exported function. - * Create and return a new instance of a Big number object. - * - * n {number|string|Big} A numeric value. - */ - function Big(n) { - var x = this; - - // Enable constructor usage without new. - if (!(x instanceof Big)) return n === UNDEFINED ? _Big_() : new Big(n); - - // Duplicate. - if (n instanceof Big) { - x.s = n.s; - x.e = n.e; - x.c = n.c.slice(); - } else { - if (typeof n !== 'string') { - if (Big.strict === true) { - throw TypeError(INVALID + 'number'); - } - - // Minus zero? - n = n === 0 && 1 / n < 0 ? '-0' : String(n); - } - - parse(x, n); - } - - // Retain a reference to this Big constructor. - // Shadow Big.prototype.constructor which points to Object. - x.constructor = Big; - } - - Big.prototype = P; - Big.DP = DP; - Big.RM = RM; - Big.NE = NE; - Big.PE = PE; - Big.strict = STRICT; - Big.roundDown = 0; - Big.roundHalfUp = 1; - Big.roundHalfEven = 2; - Big.roundUp = 3; - - return Big; - } - - - /* - * Parse the number or string value passed to a Big constructor. - * - * x {Big} A Big number instance. - * n {number|string} A numeric value. - */ - function parse(x, n) { - var e, i, nl; - - if (!NUMERIC.test(n)) { - throw Error(INVALID + 'number'); - } - - // Determine sign. - x.s = n.charAt(0) == '-' ? (n = n.slice(1), -1) : 1; - - // Decimal point? - if ((e = n.indexOf('.')) > -1) n = n.replace('.', ''); - - // Exponential form? - if ((i = n.search(/e/i)) > 0) { - - // Determine exponent. - if (e < 0) e = i; - e += +n.slice(i + 1); - n = n.substring(0, i); - } else if (e < 0) { - - // Integer. - e = n.length; - } - - nl = n.length; - - // Determine leading zeros. - for (i = 0; i < nl && n.charAt(i) == '0';) ++i; - - if (i == nl) { - - // Zero. - x.c = [x.e = 0]; - } else { - - // Determine trailing zeros. - for (; nl > 0 && n.charAt(--nl) == '0';); - x.e = e - i - 1; - x.c = []; - - // Convert string to array of digits without leading/trailing zeros. - for (e = 0; i <= nl;) x.c[e++] = +n.charAt(i++); - } - - return x; - } - - - /* - * Round Big x to a maximum of sd significant digits using rounding mode rm. - * - * x {Big} The Big to round. - * sd {number} Significant digits: integer, 0 to MAX_DP inclusive. - * rm {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up). - * [more] {boolean} Whether the result of division was truncated. - */ - function round(x, sd, rm, more) { - var xc = x.c; - - if (rm === UNDEFINED) rm = x.constructor.RM; - if (rm !== 0 && rm !== 1 && rm !== 2 && rm !== 3) { - throw Error(INVALID_RM); - } - - if (sd < 1) { - more = - rm === 3 && (more || !!xc[0]) || sd === 0 && ( - rm === 1 && xc[0] >= 5 || - rm === 2 && (xc[0] > 5 || xc[0] === 5 && (more || xc[1] !== UNDEFINED)) - ); - - xc.length = 1; - - if (more) { - - // 1, 0.1, 0.01, 0.001, 0.0001 etc. - x.e = x.e - sd + 1; - xc[0] = 1; - } else { - - // Zero. - xc[0] = x.e = 0; - } - } else if (sd < xc.length) { - - // xc[sd] is the digit after the digit that may be rounded up. - more = - rm === 1 && xc[sd] >= 5 || - rm === 2 && (xc[sd] > 5 || xc[sd] === 5 && - (more || xc[sd + 1] !== UNDEFINED || xc[sd - 1] & 1)) || - rm === 3 && (more || !!xc[0]); - - // Remove any digits after the required precision. - xc.length = sd--; - - // Round up? - if (more) { - - // Rounding up may mean the previous digit has to be rounded up. - for (; ++xc[sd] > 9;) { - xc[sd] = 0; - if (!sd--) { - ++x.e; - xc.unshift(1); - } - } - } - - // Remove trailing zeros. - for (sd = xc.length; !xc[--sd];) xc.pop(); - } - - return x; - } - - - /* - * Return a string representing the value of Big x in normal or exponential notation. - * Handles P.toExponential, P.toFixed, P.toJSON, P.toPrecision, P.toString and P.valueOf. - */ - function stringify(x, doExponential, isNonzero) { - var e = x.e, - s = x.c.join(''), - n = s.length; - - // Exponential notation? - if (doExponential) { - s = s.charAt(0) + (n > 1 ? '.' + s.slice(1) : '') + (e < 0 ? 'e' : 'e+') + e; - - // Normal notation. - } else if (e < 0) { - for (; ++e;) s = '0' + s; - s = '0.' + s; - } else if (e > 0) { - if (++e > n) { - for (e -= n; e--;) s += '0'; - } else if (e < n) { - s = s.slice(0, e) + '.' + s.slice(e); - } - } else if (n > 1) { - s = s.charAt(0) + '.' + s.slice(1); - } - - return x.s < 0 && isNonzero ? '-' + s : s; - } - - - // Prototype/instance methods - - - /* - * Return a new Big whose value is the absolute value of this Big. - */ - P.abs = function () { - var x = new this.constructor(this); - x.s = 1; - return x; - }; - - - /* - * Return 1 if the value of this Big is greater than the value of Big y, - * -1 if the value of this Big is less than the value of Big y, or - * 0 if they have the same value. - */ - P.cmp = function (y) { - var isneg, - x = this, - xc = x.c, - yc = (y = new x.constructor(y)).c, - i = x.s, - j = y.s, - k = x.e, - l = y.e; - - // Either zero? - if (!xc[0] || !yc[0]) return !xc[0] ? !yc[0] ? 0 : -j : i; - - // Signs differ? - if (i != j) return i; - - isneg = i < 0; - - // Compare exponents. - if (k != l) return k > l ^ isneg ? 1 : -1; - - j = (k = xc.length) < (l = yc.length) ? k : l; - - // Compare digit by digit. - for (i = -1; ++i < j;) { - if (xc[i] != yc[i]) return xc[i] > yc[i] ^ isneg ? 1 : -1; - } - - // Compare lengths. - return k == l ? 0 : k > l ^ isneg ? 1 : -1; - }; - - - /* - * Return a new Big whose value is the value of this Big divided by the value of Big y, rounded, - * if necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM. - */ - P.div = function (y) { - var x = this, - Big = x.constructor, - a = x.c, // dividend - b = (y = new Big(y)).c, // divisor - k = x.s == y.s ? 1 : -1, - dp = Big.DP; - - if (dp !== ~~dp || dp < 0 || dp > MAX_DP) { - throw Error(INVALID_DP); - } - - // Divisor is zero? - if (!b[0]) { - throw Error(DIV_BY_ZERO); - } - - // Dividend is 0? Return +-0. - if (!a[0]) { - y.s = k; - y.c = [y.e = 0]; - return y; - } - - var bl, bt, n, cmp, ri, - bz = b.slice(), - ai = bl = b.length, - al = a.length, - r = a.slice(0, bl), // remainder - rl = r.length, - q = y, // quotient - qc = q.c = [], - qi = 0, - p = dp + (q.e = x.e - y.e) + 1; // precision of the result - - q.s = k; - k = p < 0 ? 0 : p; - - // Create version of divisor with leading zero. - bz.unshift(0); - - // Add zeros to make remainder as long as divisor. - for (; rl++ < bl;) r.push(0); - - do { - - // n is how many times the divisor goes into current remainder. - for (n = 0; n < 10; n++) { - - // Compare divisor and remainder. - if (bl != (rl = r.length)) { - cmp = bl > rl ? 1 : -1; - } else { - for (ri = -1, cmp = 0; ++ri < bl;) { - if (b[ri] != r[ri]) { - cmp = b[ri] > r[ri] ? 1 : -1; - break; - } - } - } - - // If divisor < remainder, subtract divisor from remainder. - if (cmp < 0) { - - // Remainder can't be more than 1 digit longer than divisor. - // Equalise lengths using divisor with extra leading zero? - for (bt = rl == bl ? b : bz; rl;) { - if (r[--rl] < bt[rl]) { - ri = rl; - for (; ri && !r[--ri];) r[ri] = 9; - --r[ri]; - r[rl] += 10; - } - r[rl] -= bt[rl]; - } - - for (; !r[0];) r.shift(); - } else { - break; - } - } - - // Add the digit n to the result array. - qc[qi++] = cmp ? n : ++n; - - // Update the remainder. - if (r[0] && cmp) r[rl] = a[ai] || 0; - else r = [a[ai]]; - - } while ((ai++ < al || r[0] !== UNDEFINED) && k--); - - // Leading zero? Do not remove if result is simply zero (qi == 1). - if (!qc[0] && qi != 1) { - - // There can't be more than one zero. - qc.shift(); - q.e--; - p--; - } - - // Round? - if (qi > p) round(q, p, Big.RM, r[0] !== UNDEFINED); - - return q; - }; - - - /* - * Return true if the value of this Big is equal to the value of Big y, otherwise return false. - */ - P.eq = function (y) { - return this.cmp(y) === 0; - }; - - - /* - * Return true if the value of this Big is greater than the value of Big y, otherwise return - * false. - */ - P.gt = function (y) { - return this.cmp(y) > 0; - }; - - - /* - * Return true if the value of this Big is greater than or equal to the value of Big y, otherwise - * return false. - */ - P.gte = function (y) { - return this.cmp(y) > -1; - }; - - - /* - * Return true if the value of this Big is less than the value of Big y, otherwise return false. - */ - P.lt = function (y) { - return this.cmp(y) < 0; - }; - - - /* - * Return true if the value of this Big is less than or equal to the value of Big y, otherwise - * return false. - */ - P.lte = function (y) { - return this.cmp(y) < 1; - }; - - - /* - * Return a new Big whose value is the value of this Big minus the value of Big y. - */ - P.minus = P.sub = function (y) { - var i, j, t, xlty, - x = this, - Big = x.constructor, - a = x.s, - b = (y = new Big(y)).s; - - // Signs differ? - if (a != b) { - y.s = -b; - return x.plus(y); - } - - var xc = x.c.slice(), - xe = x.e, - yc = y.c, - ye = y.e; - - // Either zero? - if (!xc[0] || !yc[0]) { - if (yc[0]) { - y.s = -b; - } else if (xc[0]) { - y = new Big(x); - } else { - y.s = 1; - } - return y; - } - - // Determine which is the bigger number. Prepend zeros to equalise exponents. - if (a = xe - ye) { - - if (xlty = a < 0) { - a = -a; - t = xc; - } else { - ye = xe; - t = yc; - } - - t.reverse(); - for (b = a; b--;) t.push(0); - t.reverse(); - } else { - - // Exponents equal. Check digit by digit. - j = ((xlty = xc.length < yc.length) ? xc : yc).length; - - for (a = b = 0; b < j; b++) { - if (xc[b] != yc[b]) { - xlty = xc[b] < yc[b]; - break; - } - } - } - - // x < y? Point xc to the array of the bigger number. - if (xlty) { - t = xc; - xc = yc; - yc = t; - y.s = -y.s; - } - - /* - * Append zeros to xc if shorter. No need to add zeros to yc if shorter as subtraction only - * needs to start at yc.length. - */ - if ((b = (j = yc.length) - (i = xc.length)) > 0) for (; b--;) xc[i++] = 0; - - // Subtract yc from xc. - for (b = i; j > a;) { - if (xc[--j] < yc[j]) { - for (i = j; i && !xc[--i];) xc[i] = 9; - --xc[i]; - xc[j] += 10; - } - - xc[j] -= yc[j]; - } - - // Remove trailing zeros. - for (; xc[--b] === 0;) xc.pop(); - - // Remove leading zeros and adjust exponent accordingly. - for (; xc[0] === 0;) { - xc.shift(); - --ye; - } - - if (!xc[0]) { - - // n - n = +0 - y.s = 1; - - // Result must be zero. - xc = [ye = 0]; - } - - y.c = xc; - y.e = ye; - - return y; - }; - - - /* - * Return a new Big whose value is the value of this Big modulo the value of Big y. - */ - P.mod = function (y) { - var ygtx, - x = this, - Big = x.constructor, - a = x.s, - b = (y = new Big(y)).s; - - if (!y.c[0]) { - throw Error(DIV_BY_ZERO); - } - - x.s = y.s = 1; - ygtx = y.cmp(x) == 1; - x.s = a; - y.s = b; - - if (ygtx) return new Big(x); - - a = Big.DP; - b = Big.RM; - Big.DP = Big.RM = 0; - x = x.div(y); - Big.DP = a; - Big.RM = b; - - return this.minus(x.times(y)); - }; - - - /* - * Return a new Big whose value is the value of this Big plus the value of Big y. - */ - P.plus = P.add = function (y) { - var e, k, t, - x = this, - Big = x.constructor; - - y = new Big(y); - - // Signs differ? - if (x.s != y.s) { - y.s = -y.s; - return x.minus(y); - } - - var xe = x.e, - xc = x.c, - ye = y.e, - yc = y.c; - - // Either zero? - if (!xc[0] || !yc[0]) { - if (!yc[0]) { - if (xc[0]) { - y = new Big(x); - } else { - y.s = x.s; - } - } - return y; - } - - xc = xc.slice(); - - // Prepend zeros to equalise exponents. - // Note: reverse faster than unshifts. - if (e = xe - ye) { - if (e > 0) { - ye = xe; - t = yc; - } else { - e = -e; - t = xc; - } - - t.reverse(); - for (; e--;) t.push(0); - t.reverse(); - } - - // Point xc to the longer array. - if (xc.length - yc.length < 0) { - t = yc; - yc = xc; - xc = t; - } - - e = yc.length; - - // Only start adding at yc.length - 1 as the further digits of xc can be left as they are. - for (k = 0; e; xc[e] %= 10) k = (xc[--e] = xc[e] + yc[e] + k) / 10 | 0; - - // No need to check for zero, as +x + +y != 0 && -x + -y != 0 - - if (k) { - xc.unshift(k); - ++ye; - } - - // Remove trailing zeros. - for (e = xc.length; xc[--e] === 0;) xc.pop(); - - y.c = xc; - y.e = ye; - - return y; - }; - - - /* - * Return a Big whose value is the value of this Big raised to the power n. - * If n is negative, round to a maximum of Big.DP decimal places using rounding - * mode Big.RM. - * - * n {number} Integer, -MAX_POWER to MAX_POWER inclusive. - */ - P.pow = function (n) { - var x = this, - one = new x.constructor('1'), - y = one, - isneg = n < 0; - - if (n !== ~~n || n < -MAX_POWER || n > MAX_POWER) { - throw Error(INVALID + 'exponent'); - } - - if (isneg) n = -n; - - for (;;) { - if (n & 1) y = y.times(x); - n >>= 1; - if (!n) break; - x = x.times(x); - } - - return isneg ? one.div(y) : y; - }; - - - /* - * Return a new Big whose value is the value of this Big rounded to a maximum precision of sd - * significant digits using rounding mode rm, or Big.RM if rm is not specified. - * - * sd {number} Significant digits: integer, 1 to MAX_DP inclusive. - * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up). - */ - P.prec = function (sd, rm) { - if (sd !== ~~sd || sd < 1 || sd > MAX_DP) { - throw Error(INVALID + 'precision'); - } - return round(new this.constructor(this), sd, rm); - }; - - - /* - * Return a new Big whose value is the value of this Big rounded to a maximum of dp decimal places - * using rounding mode rm, or Big.RM if rm is not specified. - * If dp is negative, round to an integer which is a multiple of 10**-dp. - * If dp is not specified, round to 0 decimal places. - * - * dp? {number} Integer, -MAX_DP to MAX_DP inclusive. - * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up). - */ - P.round = function (dp, rm) { - if (dp === UNDEFINED) dp = 0; - else if (dp !== ~~dp || dp < -MAX_DP || dp > MAX_DP) { - throw Error(INVALID_DP); - } - return round(new this.constructor(this), dp + this.e + 1, rm); - }; - - - /* - * Return a new Big whose value is the square root of the value of this Big, rounded, if - * necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM. - */ - P.sqrt = function () { - var r, c, t, - x = this, - Big = x.constructor, - s = x.s, - e = x.e, - half = new Big('0.5'); - - // Zero? - if (!x.c[0]) return new Big(x); - - // Negative? - if (s < 0) { - throw Error(NAME + 'No square root'); - } - - // Estimate. - s = Math.sqrt(x + ''); - - // Math.sqrt underflow/overflow? - // Re-estimate: pass x coefficient to Math.sqrt as integer, then adjust the result exponent. - if (s === 0 || s === 1 / 0) { - c = x.c.join(''); - if (!(c.length + e & 1)) c += '0'; - s = Math.sqrt(c); - e = ((e + 1) / 2 | 0) - (e < 0 || e & 1); - r = new Big((s == 1 / 0 ? '5e' : (s = s.toExponential()).slice(0, s.indexOf('e') + 1)) + e); - } else { - r = new Big(s + ''); - } - - e = r.e + (Big.DP += 4); - - // Newton-Raphson iteration. - do { - t = r; - r = half.times(t.plus(x.div(t))); - } while (t.c.slice(0, e).join('') !== r.c.slice(0, e).join('')); - - return round(r, (Big.DP -= 4) + r.e + 1, Big.RM); - }; - - - /* - * Return a new Big whose value is the value of this Big times the value of Big y. - */ - P.times = P.mul = function (y) { - var c, - x = this, - Big = x.constructor, - xc = x.c, - yc = (y = new Big(y)).c, - a = xc.length, - b = yc.length, - i = x.e, - j = y.e; - - // Determine sign of result. - y.s = x.s == y.s ? 1 : -1; - - // Return signed 0 if either 0. - if (!xc[0] || !yc[0]) { - y.c = [y.e = 0]; - return y; - } - - // Initialise exponent of result as x.e + y.e. - y.e = i + j; - - // If array xc has fewer digits than yc, swap xc and yc, and lengths. - if (a < b) { - c = xc; - xc = yc; - yc = c; - j = a; - a = b; - b = j; - } - - // Initialise coefficient array of result with zeros. - for (c = new Array(j = a + b); j--;) c[j] = 0; - - // Multiply. - - // i is initially xc.length. - for (i = b; i--;) { - b = 0; - - // a is yc.length. - for (j = a + i; j > i;) { - - // Current sum of products at this digit position, plus carry. - b = c[j] + yc[i] * xc[j - i - 1] + b; - c[j--] = b % 10; - - // carry - b = b / 10 | 0; - } - - c[j] = b; - } - - // Increment result exponent if there is a final carry, otherwise remove leading zero. - if (b) ++y.e; - else c.shift(); - - // Remove trailing zeros. - for (i = c.length; !c[--i];) c.pop(); - y.c = c; - - return y; - }; - - - /* - * Return a string representing the value of this Big in exponential notation rounded to dp fixed - * decimal places using rounding mode rm, or Big.RM if rm is not specified. - * - * dp? {number} Decimal places: integer, 0 to MAX_DP inclusive. - * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up). - */ - P.toExponential = function (dp, rm) { - var x = this, - n = x.c[0]; - - if (dp !== UNDEFINED) { - if (dp !== ~~dp || dp < 0 || dp > MAX_DP) { - throw Error(INVALID_DP); - } - x = round(new x.constructor(x), ++dp, rm); - for (; x.c.length < dp;) x.c.push(0); - } - - return stringify(x, true, !!n); - }; - - - /* - * Return a string representing the value of this Big in normal notation rounded to dp fixed - * decimal places using rounding mode rm, or Big.RM if rm is not specified. - * - * dp? {number} Decimal places: integer, 0 to MAX_DP inclusive. - * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up). - * - * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'. - * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'. - */ - P.toFixed = function (dp, rm) { - var x = this, - n = x.c[0]; - - if (dp !== UNDEFINED) { - if (dp !== ~~dp || dp < 0 || dp > MAX_DP) { - throw Error(INVALID_DP); - } - x = round(new x.constructor(x), dp + x.e + 1, rm); - - // x.e may have changed if the value is rounded up. - for (dp = dp + x.e + 1; x.c.length < dp;) x.c.push(0); - } - - return stringify(x, false, !!n); - }; - - - /* - * Return a string representing the value of this Big. - * Return exponential notation if this Big has a positive exponent equal to or greater than - * Big.PE, or a negative exponent equal to or less than Big.NE. - * Omit the sign for negative zero. - */ - P.toJSON = P.toString = function () { - var x = this, - Big = x.constructor; - return stringify(x, x.e <= Big.NE || x.e >= Big.PE, !!x.c[0]); - }; - - - /* - * Return the value of this Big as a primitve number. - */ - P.toNumber = function () { - var n = Number(stringify(this, true, true)); - if (this.constructor.strict === true && !this.eq(n.toString())) { - throw Error(NAME + 'Imprecise conversion'); - } - return n; - }; - - - /* - * Return a string representing the value of this Big rounded to sd significant digits using - * rounding mode rm, or Big.RM if rm is not specified. - * Use exponential notation if sd is less than the number of digits necessary to represent - * the integer part of the value in normal notation. - * - * sd {number} Significant digits: integer, 1 to MAX_DP inclusive. - * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up). - */ - P.toPrecision = function (sd, rm) { - var x = this, - Big = x.constructor, - n = x.c[0]; - - if (sd !== UNDEFINED) { - if (sd !== ~~sd || sd < 1 || sd > MAX_DP) { - throw Error(INVALID + 'precision'); - } - x = round(new Big(x), sd, rm); - for (; x.c.length < sd;) x.c.push(0); - } - - return stringify(x, sd <= x.e || x.e <= Big.NE || x.e >= Big.PE, !!n); - }; - - - /* - * Return a string representing the value of this Big. - * Return exponential notation if this Big has a positive exponent equal to or greater than - * Big.PE, or a negative exponent equal to or less than Big.NE. - * Include the sign for negative zero. - */ - P.valueOf = function () { - var x = this, - Big = x.constructor; - if (Big.strict === true) { - throw Error(NAME + 'valueOf disallowed'); - } - return stringify(x, x.e <= Big.NE || x.e >= Big.PE, true); - }; - - - // Export - - - Big = _Big_(); - - Big['default'] = Big.Big = Big; - - //AMD. - if (typeof define === 'function' && define.amd) { - define(function () { return Big; }); - - // Node and other CommonJS-like environments that support module.exports. - } else if (typeof module !== 'undefined' && module.exports) { - module.exports = Big; - - //Browser. - } else { - GLOBAL.Big = Big; - } -})(this); diff --git a/reverse_engineering/node_modules/big.js/big.mjs b/reverse_engineering/node_modules/big.js/big.mjs deleted file mode 100644 index 47a1b43..0000000 --- a/reverse_engineering/node_modules/big.js/big.mjs +++ /dev/null @@ -1,1016 +0,0 @@ -/* - * big.js v6.1.1 - * A small, fast, easy-to-use library for arbitrary-precision decimal arithmetic. - * Copyright (c) 2021 Michael Mclaughlin - * https://github.com/MikeMcl/big.js/LICENCE.md - */ - - -/************************************** EDITABLE DEFAULTS *****************************************/ - - - // The default values below must be integers within the stated ranges. - - /* - * The maximum number of decimal places (DP) of the results of operations involving division: - * div and sqrt, and pow with negative exponents. - */ -var DP = 20, // 0 to MAX_DP - - /* - * The rounding mode (RM) used when rounding to the above decimal places. - * - * 0 Towards zero (i.e. truncate, no rounding). (ROUND_DOWN) - * 1 To nearest neighbour. If equidistant, round up. (ROUND_HALF_UP) - * 2 To nearest neighbour. If equidistant, to even. (ROUND_HALF_EVEN) - * 3 Away from zero. (ROUND_UP) - */ - RM = 1, // 0, 1, 2 or 3 - - // The maximum value of DP and Big.DP. - MAX_DP = 1E6, // 0 to 1000000 - - // The maximum magnitude of the exponent argument to the pow method. - MAX_POWER = 1E6, // 1 to 1000000 - - /* - * The negative exponent (NE) at and beneath which toString returns exponential notation. - * (JavaScript numbers: -7) - * -1000000 is the minimum recommended exponent value of a Big. - */ - NE = -7, // 0 to -1000000 - - /* - * The positive exponent (PE) at and above which toString returns exponential notation. - * (JavaScript numbers: 21) - * 1000000 is the maximum recommended exponent value of a Big, but this limit is not enforced. - */ - PE = 21, // 0 to 1000000 - - /* - * When true, an error will be thrown if a primitive number is passed to the Big constructor, - * or if valueOf is called, or if toNumber is called on a Big which cannot be converted to a - * primitive number without a loss of precision. - */ - STRICT = false, // true or false - - -/**************************************************************************************************/ - - - // Error messages. - NAME = '[big.js] ', - INVALID = NAME + 'Invalid ', - INVALID_DP = INVALID + 'decimal places', - INVALID_RM = INVALID + 'rounding mode', - DIV_BY_ZERO = NAME + 'Division by zero', - - // The shared prototype object. - P = {}, - UNDEFINED = void 0, - NUMERIC = /^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i; - - -/* - * Create and return a Big constructor. - */ -function _Big_() { - - /* - * The Big constructor and exported function. - * Create and return a new instance of a Big number object. - * - * n {number|string|Big} A numeric value. - */ - function Big(n) { - var x = this; - - // Enable constructor usage without new. - if (!(x instanceof Big)) return n === UNDEFINED ? _Big_() : new Big(n); - - // Duplicate. - if (n instanceof Big) { - x.s = n.s; - x.e = n.e; - x.c = n.c.slice(); - } else { - if (typeof n !== 'string') { - if (Big.strict === true) { - throw TypeError(INVALID + 'number'); - } - - // Minus zero? - n = n === 0 && 1 / n < 0 ? '-0' : String(n); - } - - parse(x, n); - } - - // Retain a reference to this Big constructor. - // Shadow Big.prototype.constructor which points to Object. - x.constructor = Big; - } - - Big.prototype = P; - Big.DP = DP; - Big.RM = RM; - Big.NE = NE; - Big.PE = PE; - Big.strict = STRICT; - Big.roundDown = 0; - Big.roundHalfUp = 1; - Big.roundHalfEven = 2; - Big.roundUp = 3; - - return Big; -} - - -/* - * Parse the number or string value passed to a Big constructor. - * - * x {Big} A Big number instance. - * n {number|string} A numeric value. - */ -function parse(x, n) { - var e, i, nl; - - if (!NUMERIC.test(n)) { - throw Error(INVALID + 'number'); - } - - // Determine sign. - x.s = n.charAt(0) == '-' ? (n = n.slice(1), -1) : 1; - - // Decimal point? - if ((e = n.indexOf('.')) > -1) n = n.replace('.', ''); - - // Exponential form? - if ((i = n.search(/e/i)) > 0) { - - // Determine exponent. - if (e < 0) e = i; - e += +n.slice(i + 1); - n = n.substring(0, i); - } else if (e < 0) { - - // Integer. - e = n.length; - } - - nl = n.length; - - // Determine leading zeros. - for (i = 0; i < nl && n.charAt(i) == '0';) ++i; - - if (i == nl) { - - // Zero. - x.c = [x.e = 0]; - } else { - - // Determine trailing zeros. - for (; nl > 0 && n.charAt(--nl) == '0';); - x.e = e - i - 1; - x.c = []; - - // Convert string to array of digits without leading/trailing zeros. - for (e = 0; i <= nl;) x.c[e++] = +n.charAt(i++); - } - - return x; -} - - -/* - * Round Big x to a maximum of sd significant digits using rounding mode rm. - * - * x {Big} The Big to round. - * sd {number} Significant digits: integer, 0 to MAX_DP inclusive. - * rm {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up). - * [more] {boolean} Whether the result of division was truncated. - */ -function round(x, sd, rm, more) { - var xc = x.c; - - if (rm === UNDEFINED) rm = x.constructor.RM; - if (rm !== 0 && rm !== 1 && rm !== 2 && rm !== 3) { - throw Error(INVALID_RM); - } - - if (sd < 1) { - more = - rm === 3 && (more || !!xc[0]) || sd === 0 && ( - rm === 1 && xc[0] >= 5 || - rm === 2 && (xc[0] > 5 || xc[0] === 5 && (more || xc[1] !== UNDEFINED)) - ); - - xc.length = 1; - - if (more) { - - // 1, 0.1, 0.01, 0.001, 0.0001 etc. - x.e = x.e - sd + 1; - xc[0] = 1; - } else { - - // Zero. - xc[0] = x.e = 0; - } - } else if (sd < xc.length) { - - // xc[sd] is the digit after the digit that may be rounded up. - more = - rm === 1 && xc[sd] >= 5 || - rm === 2 && (xc[sd] > 5 || xc[sd] === 5 && - (more || xc[sd + 1] !== UNDEFINED || xc[sd - 1] & 1)) || - rm === 3 && (more || !!xc[0]); - - // Remove any digits after the required precision. - xc.length = sd--; - - // Round up? - if (more) { - - // Rounding up may mean the previous digit has to be rounded up. - for (; ++xc[sd] > 9;) { - xc[sd] = 0; - if (!sd--) { - ++x.e; - xc.unshift(1); - } - } - } - - // Remove trailing zeros. - for (sd = xc.length; !xc[--sd];) xc.pop(); - } - - return x; -} - - -/* - * Return a string representing the value of Big x in normal or exponential notation. - * Handles P.toExponential, P.toFixed, P.toJSON, P.toPrecision, P.toString and P.valueOf. - */ -function stringify(x, doExponential, isNonzero) { - var e = x.e, - s = x.c.join(''), - n = s.length; - - // Exponential notation? - if (doExponential) { - s = s.charAt(0) + (n > 1 ? '.' + s.slice(1) : '') + (e < 0 ? 'e' : 'e+') + e; - - // Normal notation. - } else if (e < 0) { - for (; ++e;) s = '0' + s; - s = '0.' + s; - } else if (e > 0) { - if (++e > n) { - for (e -= n; e--;) s += '0'; - } else if (e < n) { - s = s.slice(0, e) + '.' + s.slice(e); - } - } else if (n > 1) { - s = s.charAt(0) + '.' + s.slice(1); - } - - return x.s < 0 && isNonzero ? '-' + s : s; -} - - -// Prototype/instance methods - - -/* - * Return a new Big whose value is the absolute value of this Big. - */ -P.abs = function () { - var x = new this.constructor(this); - x.s = 1; - return x; -}; - - -/* - * Return 1 if the value of this Big is greater than the value of Big y, - * -1 if the value of this Big is less than the value of Big y, or - * 0 if they have the same value. - */ -P.cmp = function (y) { - var isneg, - x = this, - xc = x.c, - yc = (y = new x.constructor(y)).c, - i = x.s, - j = y.s, - k = x.e, - l = y.e; - - // Either zero? - if (!xc[0] || !yc[0]) return !xc[0] ? !yc[0] ? 0 : -j : i; - - // Signs differ? - if (i != j) return i; - - isneg = i < 0; - - // Compare exponents. - if (k != l) return k > l ^ isneg ? 1 : -1; - - j = (k = xc.length) < (l = yc.length) ? k : l; - - // Compare digit by digit. - for (i = -1; ++i < j;) { - if (xc[i] != yc[i]) return xc[i] > yc[i] ^ isneg ? 1 : -1; - } - - // Compare lengths. - return k == l ? 0 : k > l ^ isneg ? 1 : -1; -}; - - -/* - * Return a new Big whose value is the value of this Big divided by the value of Big y, rounded, - * if necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM. - */ -P.div = function (y) { - var x = this, - Big = x.constructor, - a = x.c, // dividend - b = (y = new Big(y)).c, // divisor - k = x.s == y.s ? 1 : -1, - dp = Big.DP; - - if (dp !== ~~dp || dp < 0 || dp > MAX_DP) { - throw Error(INVALID_DP); - } - - // Divisor is zero? - if (!b[0]) { - throw Error(DIV_BY_ZERO); - } - - // Dividend is 0? Return +-0. - if (!a[0]) { - y.s = k; - y.c = [y.e = 0]; - return y; - } - - var bl, bt, n, cmp, ri, - bz = b.slice(), - ai = bl = b.length, - al = a.length, - r = a.slice(0, bl), // remainder - rl = r.length, - q = y, // quotient - qc = q.c = [], - qi = 0, - p = dp + (q.e = x.e - y.e) + 1; // precision of the result - - q.s = k; - k = p < 0 ? 0 : p; - - // Create version of divisor with leading zero. - bz.unshift(0); - - // Add zeros to make remainder as long as divisor. - for (; rl++ < bl;) r.push(0); - - do { - - // n is how many times the divisor goes into current remainder. - for (n = 0; n < 10; n++) { - - // Compare divisor and remainder. - if (bl != (rl = r.length)) { - cmp = bl > rl ? 1 : -1; - } else { - for (ri = -1, cmp = 0; ++ri < bl;) { - if (b[ri] != r[ri]) { - cmp = b[ri] > r[ri] ? 1 : -1; - break; - } - } - } - - // If divisor < remainder, subtract divisor from remainder. - if (cmp < 0) { - - // Remainder can't be more than 1 digit longer than divisor. - // Equalise lengths using divisor with extra leading zero? - for (bt = rl == bl ? b : bz; rl;) { - if (r[--rl] < bt[rl]) { - ri = rl; - for (; ri && !r[--ri];) r[ri] = 9; - --r[ri]; - r[rl] += 10; - } - r[rl] -= bt[rl]; - } - - for (; !r[0];) r.shift(); - } else { - break; - } - } - - // Add the digit n to the result array. - qc[qi++] = cmp ? n : ++n; - - // Update the remainder. - if (r[0] && cmp) r[rl] = a[ai] || 0; - else r = [a[ai]]; - - } while ((ai++ < al || r[0] !== UNDEFINED) && k--); - - // Leading zero? Do not remove if result is simply zero (qi == 1). - if (!qc[0] && qi != 1) { - - // There can't be more than one zero. - qc.shift(); - q.e--; - p--; - } - - // Round? - if (qi > p) round(q, p, Big.RM, r[0] !== UNDEFINED); - - return q; -}; - - -/* - * Return true if the value of this Big is equal to the value of Big y, otherwise return false. - */ -P.eq = function (y) { - return this.cmp(y) === 0; -}; - - -/* - * Return true if the value of this Big is greater than the value of Big y, otherwise return - * false. - */ -P.gt = function (y) { - return this.cmp(y) > 0; -}; - - -/* - * Return true if the value of this Big is greater than or equal to the value of Big y, otherwise - * return false. - */ -P.gte = function (y) { - return this.cmp(y) > -1; -}; - - -/* - * Return true if the value of this Big is less than the value of Big y, otherwise return false. - */ -P.lt = function (y) { - return this.cmp(y) < 0; -}; - - -/* - * Return true if the value of this Big is less than or equal to the value of Big y, otherwise - * return false. - */ -P.lte = function (y) { - return this.cmp(y) < 1; -}; - - -/* - * Return a new Big whose value is the value of this Big minus the value of Big y. - */ -P.minus = P.sub = function (y) { - var i, j, t, xlty, - x = this, - Big = x.constructor, - a = x.s, - b = (y = new Big(y)).s; - - // Signs differ? - if (a != b) { - y.s = -b; - return x.plus(y); - } - - var xc = x.c.slice(), - xe = x.e, - yc = y.c, - ye = y.e; - - // Either zero? - if (!xc[0] || !yc[0]) { - if (yc[0]) { - y.s = -b; - } else if (xc[0]) { - y = new Big(x); - } else { - y.s = 1; - } - return y; - } - - // Determine which is the bigger number. Prepend zeros to equalise exponents. - if (a = xe - ye) { - - if (xlty = a < 0) { - a = -a; - t = xc; - } else { - ye = xe; - t = yc; - } - - t.reverse(); - for (b = a; b--;) t.push(0); - t.reverse(); - } else { - - // Exponents equal. Check digit by digit. - j = ((xlty = xc.length < yc.length) ? xc : yc).length; - - for (a = b = 0; b < j; b++) { - if (xc[b] != yc[b]) { - xlty = xc[b] < yc[b]; - break; - } - } - } - - // x < y? Point xc to the array of the bigger number. - if (xlty) { - t = xc; - xc = yc; - yc = t; - y.s = -y.s; - } - - /* - * Append zeros to xc if shorter. No need to add zeros to yc if shorter as subtraction only - * needs to start at yc.length. - */ - if ((b = (j = yc.length) - (i = xc.length)) > 0) for (; b--;) xc[i++] = 0; - - // Subtract yc from xc. - for (b = i; j > a;) { - if (xc[--j] < yc[j]) { - for (i = j; i && !xc[--i];) xc[i] = 9; - --xc[i]; - xc[j] += 10; - } - - xc[j] -= yc[j]; - } - - // Remove trailing zeros. - for (; xc[--b] === 0;) xc.pop(); - - // Remove leading zeros and adjust exponent accordingly. - for (; xc[0] === 0;) { - xc.shift(); - --ye; - } - - if (!xc[0]) { - - // n - n = +0 - y.s = 1; - - // Result must be zero. - xc = [ye = 0]; - } - - y.c = xc; - y.e = ye; - - return y; -}; - - -/* - * Return a new Big whose value is the value of this Big modulo the value of Big y. - */ -P.mod = function (y) { - var ygtx, - x = this, - Big = x.constructor, - a = x.s, - b = (y = new Big(y)).s; - - if (!y.c[0]) { - throw Error(DIV_BY_ZERO); - } - - x.s = y.s = 1; - ygtx = y.cmp(x) == 1; - x.s = a; - y.s = b; - - if (ygtx) return new Big(x); - - a = Big.DP; - b = Big.RM; - Big.DP = Big.RM = 0; - x = x.div(y); - Big.DP = a; - Big.RM = b; - - return this.minus(x.times(y)); -}; - - -/* - * Return a new Big whose value is the value of this Big plus the value of Big y. - */ -P.plus = P.add = function (y) { - var e, k, t, - x = this, - Big = x.constructor; - - y = new Big(y); - - // Signs differ? - if (x.s != y.s) { - y.s = -y.s; - return x.minus(y); - } - - var xe = x.e, - xc = x.c, - ye = y.e, - yc = y.c; - - // Either zero? - if (!xc[0] || !yc[0]) { - if (!yc[0]) { - if (xc[0]) { - y = new Big(x); - } else { - y.s = x.s; - } - } - return y; - } - - xc = xc.slice(); - - // Prepend zeros to equalise exponents. - // Note: reverse faster than unshifts. - if (e = xe - ye) { - if (e > 0) { - ye = xe; - t = yc; - } else { - e = -e; - t = xc; - } - - t.reverse(); - for (; e--;) t.push(0); - t.reverse(); - } - - // Point xc to the longer array. - if (xc.length - yc.length < 0) { - t = yc; - yc = xc; - xc = t; - } - - e = yc.length; - - // Only start adding at yc.length - 1 as the further digits of xc can be left as they are. - for (k = 0; e; xc[e] %= 10) k = (xc[--e] = xc[e] + yc[e] + k) / 10 | 0; - - // No need to check for zero, as +x + +y != 0 && -x + -y != 0 - - if (k) { - xc.unshift(k); - ++ye; - } - - // Remove trailing zeros. - for (e = xc.length; xc[--e] === 0;) xc.pop(); - - y.c = xc; - y.e = ye; - - return y; -}; - - -/* - * Return a Big whose value is the value of this Big raised to the power n. - * If n is negative, round to a maximum of Big.DP decimal places using rounding - * mode Big.RM. - * - * n {number} Integer, -MAX_POWER to MAX_POWER inclusive. - */ -P.pow = function (n) { - var x = this, - one = new x.constructor('1'), - y = one, - isneg = n < 0; - - if (n !== ~~n || n < -MAX_POWER || n > MAX_POWER) { - throw Error(INVALID + 'exponent'); - } - - if (isneg) n = -n; - - for (;;) { - if (n & 1) y = y.times(x); - n >>= 1; - if (!n) break; - x = x.times(x); - } - - return isneg ? one.div(y) : y; -}; - - -/* - * Return a new Big whose value is the value of this Big rounded to a maximum precision of sd - * significant digits using rounding mode rm, or Big.RM if rm is not specified. - * - * sd {number} Significant digits: integer, 1 to MAX_DP inclusive. - * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up). - */ -P.prec = function (sd, rm) { - if (sd !== ~~sd || sd < 1 || sd > MAX_DP) { - throw Error(INVALID + 'precision'); - } - return round(new this.constructor(this), sd, rm); -}; - - -/* - * Return a new Big whose value is the value of this Big rounded to a maximum of dp decimal places - * using rounding mode rm, or Big.RM if rm is not specified. - * If dp is negative, round to an integer which is a multiple of 10**-dp. - * If dp is not specified, round to 0 decimal places. - * - * dp? {number} Integer, -MAX_DP to MAX_DP inclusive. - * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up). - */ -P.round = function (dp, rm) { - if (dp === UNDEFINED) dp = 0; - else if (dp !== ~~dp || dp < -MAX_DP || dp > MAX_DP) { - throw Error(INVALID_DP); - } - return round(new this.constructor(this), dp + this.e + 1, rm); -}; - - -/* - * Return a new Big whose value is the square root of the value of this Big, rounded, if - * necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM. - */ -P.sqrt = function () { - var r, c, t, - x = this, - Big = x.constructor, - s = x.s, - e = x.e, - half = new Big('0.5'); - - // Zero? - if (!x.c[0]) return new Big(x); - - // Negative? - if (s < 0) { - throw Error(NAME + 'No square root'); - } - - // Estimate. - s = Math.sqrt(x + ''); - - // Math.sqrt underflow/overflow? - // Re-estimate: pass x coefficient to Math.sqrt as integer, then adjust the result exponent. - if (s === 0 || s === 1 / 0) { - c = x.c.join(''); - if (!(c.length + e & 1)) c += '0'; - s = Math.sqrt(c); - e = ((e + 1) / 2 | 0) - (e < 0 || e & 1); - r = new Big((s == 1 / 0 ? '5e' : (s = s.toExponential()).slice(0, s.indexOf('e') + 1)) + e); - } else { - r = new Big(s + ''); - } - - e = r.e + (Big.DP += 4); - - // Newton-Raphson iteration. - do { - t = r; - r = half.times(t.plus(x.div(t))); - } while (t.c.slice(0, e).join('') !== r.c.slice(0, e).join('')); - - return round(r, (Big.DP -= 4) + r.e + 1, Big.RM); -}; - - -/* - * Return a new Big whose value is the value of this Big times the value of Big y. - */ -P.times = P.mul = function (y) { - var c, - x = this, - Big = x.constructor, - xc = x.c, - yc = (y = new Big(y)).c, - a = xc.length, - b = yc.length, - i = x.e, - j = y.e; - - // Determine sign of result. - y.s = x.s == y.s ? 1 : -1; - - // Return signed 0 if either 0. - if (!xc[0] || !yc[0]) { - y.c = [y.e = 0]; - return y; - } - - // Initialise exponent of result as x.e + y.e. - y.e = i + j; - - // If array xc has fewer digits than yc, swap xc and yc, and lengths. - if (a < b) { - c = xc; - xc = yc; - yc = c; - j = a; - a = b; - b = j; - } - - // Initialise coefficient array of result with zeros. - for (c = new Array(j = a + b); j--;) c[j] = 0; - - // Multiply. - - // i is initially xc.length. - for (i = b; i--;) { - b = 0; - - // a is yc.length. - for (j = a + i; j > i;) { - - // Current sum of products at this digit position, plus carry. - b = c[j] + yc[i] * xc[j - i - 1] + b; - c[j--] = b % 10; - - // carry - b = b / 10 | 0; - } - - c[j] = b; - } - - // Increment result exponent if there is a final carry, otherwise remove leading zero. - if (b) ++y.e; - else c.shift(); - - // Remove trailing zeros. - for (i = c.length; !c[--i];) c.pop(); - y.c = c; - - return y; -}; - - -/* - * Return a string representing the value of this Big in exponential notation rounded to dp fixed - * decimal places using rounding mode rm, or Big.RM if rm is not specified. - * - * dp? {number} Decimal places: integer, 0 to MAX_DP inclusive. - * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up). - */ -P.toExponential = function (dp, rm) { - var x = this, - n = x.c[0]; - - if (dp !== UNDEFINED) { - if (dp !== ~~dp || dp < 0 || dp > MAX_DP) { - throw Error(INVALID_DP); - } - x = round(new x.constructor(x), ++dp, rm); - for (; x.c.length < dp;) x.c.push(0); - } - - return stringify(x, true, !!n); -}; - - -/* - * Return a string representing the value of this Big in normal notation rounded to dp fixed - * decimal places using rounding mode rm, or Big.RM if rm is not specified. - * - * dp? {number} Decimal places: integer, 0 to MAX_DP inclusive. - * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up). - * - * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'. - * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'. - */ -P.toFixed = function (dp, rm) { - var x = this, - n = x.c[0]; - - if (dp !== UNDEFINED) { - if (dp !== ~~dp || dp < 0 || dp > MAX_DP) { - throw Error(INVALID_DP); - } - x = round(new x.constructor(x), dp + x.e + 1, rm); - - // x.e may have changed if the value is rounded up. - for (dp = dp + x.e + 1; x.c.length < dp;) x.c.push(0); - } - - return stringify(x, false, !!n); -}; - - -/* - * Return a string representing the value of this Big. - * Return exponential notation if this Big has a positive exponent equal to or greater than - * Big.PE, or a negative exponent equal to or less than Big.NE. - * Omit the sign for negative zero. - */ -P.toJSON = P.toString = function () { - var x = this, - Big = x.constructor; - return stringify(x, x.e <= Big.NE || x.e >= Big.PE, !!x.c[0]); -}; - - -/* - * Return the value of this Big as a primitve number. - */ -P.toNumber = function () { - var n = Number(stringify(this, true, true)); - if (this.constructor.strict === true && !this.eq(n.toString())) { - throw Error(NAME + 'Imprecise conversion'); - } - return n; -}; - - -/* - * Return a string representing the value of this Big rounded to sd significant digits using - * rounding mode rm, or Big.RM if rm is not specified. - * Use exponential notation if sd is less than the number of digits necessary to represent - * the integer part of the value in normal notation. - * - * sd {number} Significant digits: integer, 1 to MAX_DP inclusive. - * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up). - */ -P.toPrecision = function (sd, rm) { - var x = this, - Big = x.constructor, - n = x.c[0]; - - if (sd !== UNDEFINED) { - if (sd !== ~~sd || sd < 1 || sd > MAX_DP) { - throw Error(INVALID + 'precision'); - } - x = round(new Big(x), sd, rm); - for (; x.c.length < sd;) x.c.push(0); - } - - return stringify(x, sd <= x.e || x.e <= Big.NE || x.e >= Big.PE, !!n); -}; - - -/* - * Return a string representing the value of this Big. - * Return exponential notation if this Big has a positive exponent equal to or greater than - * Big.PE, or a negative exponent equal to or less than Big.NE. - * Include the sign for negative zero. - */ -P.valueOf = function () { - var x = this, - Big = x.constructor; - if (Big.strict === true) { - throw Error(NAME + 'valueOf disallowed'); - } - return stringify(x, x.e <= Big.NE || x.e >= Big.PE, true); -}; - - -// Export - - -export var Big = _Big_(); - -/// -export default Big; diff --git a/reverse_engineering/node_modules/big.js/package.json b/reverse_engineering/node_modules/big.js/package.json deleted file mode 100644 index 7572a31..0000000 --- a/reverse_engineering/node_modules/big.js/package.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "_from": "big.js@^6.0.0", - "_id": "big.js@6.1.1", - "_inBundle": false, - "_integrity": "sha512-1vObw81a8ylZO5ePrtMay0n018TcftpTA5HFKDaSuiUDBo8biRBtjIobw60OpwuvrGk+FsxKamqN4cnmj/eXdg==", - "_location": "/big.js", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "big.js@^6.0.0", - "name": "big.js", - "escapedName": "big.js", - "rawSpec": "^6.0.0", - "saveSpec": null, - "fetchSpec": "^6.0.0" - }, - "_requiredBy": [ - "/@google-cloud/bigquery" - ], - "_resolved": "https://registry.npmjs.org/big.js/-/big.js-6.1.1.tgz", - "_shasum": "63b35b19dc9775c94991ee5db7694880655d5537", - "_spec": "big.js@^6.0.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/@google-cloud/bigquery", - "author": { - "name": "Michael Mclaughlin", - "email": "M8ch88l@gmail.com" - }, - "browser": "big.js", - "bugs": { - "url": "https://github.com/MikeMcl/big.js/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "A small, fast, easy-to-use library for arbitrary-precision decimal arithmetic", - "engines": { - "node": "*" - }, - "files": [ - "big.js", - "big.mjs" - ], - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/bigjs" - }, - "homepage": "https://github.com/MikeMcl/big.js#readme", - "keywords": [ - "arbitrary", - "precision", - "arithmetic", - "big", - "number", - "decimal", - "float", - "biginteger", - "bigdecimal", - "bignumber", - "bigint", - "bignum" - ], - "license": "MIT", - "main": "big", - "module": "big.mjs", - "name": "big.js", - "repository": { - "type": "git", - "url": "git+https://github.com/MikeMcl/big.js.git" - }, - "scripts": { - "test": "node ./test/runner.js" - }, - "version": "6.1.1" -} diff --git a/reverse_engineering/node_modules/bignumber.js/CHANGELOG.md b/reverse_engineering/node_modules/bignumber.js/CHANGELOG.md deleted file mode 100644 index d48d5ae..0000000 --- a/reverse_engineering/node_modules/bignumber.js/CHANGELOG.md +++ /dev/null @@ -1,271 +0,0 @@ -#### 9.0.1 -* 28/09/20 -* [BUGFIX] #276 Correct `sqrt` initial estimate. -* Update *.travis.yml*, *LICENCE.md* and *README.md*. - -#### 9.0.0 -* 27/05/2019 -* For compatibility with legacy browsers, remove `Symbol` references. - -#### 8.1.1 -* 24/02/2019 -* [BUGFIX] #222 Restore missing `var` to `export BigNumber`. -* Allow any key in BigNumber.Instance in *bignumber.d.ts*. - -#### 8.1.0 -* 23/02/2019 -* [NEW FEATURE] #220 Create a BigNumber using `{s, e, c}`. -* [NEW FEATURE] `isBigNumber`: if `BigNumber.DEBUG` is `true`, also check that the BigNumber instance is well-formed. -* Remove `instanceof` checks; just use `_isBigNumber` to identify a BigNumber instance. -* Add `_isBigNumber` to prototype in *bignumber.mjs*. -* Add tests for BigNumber creation from object. -* Update *API.html*. - -#### 8.0.2 -* 13/01/2019 -* #209 `toPrecision` without argument should follow `toString`. -* Improve *Use* section of *README*. -* Optimise `toString(10)`. -* Add verson number to API doc. - -#### 8.0.1 -* 01/11/2018 -* Rest parameter must be array type in *bignumber.d.ts*. - -#### 8.0.0 -* 01/11/2018 -* [NEW FEATURE] Add `BigNumber.sum` method. -* [NEW FEATURE]`toFormat`: add `prefix` and `suffix` options. -* [NEW FEATURE] #178 Pass custom formatting to `toFormat`. -* [BREAKING CHANGE] #184 `toFraction`: return array of BigNumbers not strings. -* [NEW FEATURE] #185 Enable overwrite of `valueOf` to prevent accidental addition to string. -* #183 Add Node.js `crypto` requirement to documentation. -* [BREAKING CHANGE] #198 Disallow signs and whitespace in custom alphabet. -* [NEW FEATURE] #188 Implement `util.inspect.custom` for Node.js REPL. -* #170 Make `isBigNumber` a type guard in *bignumber.d.ts*. -* [BREAKING CHANGE] `BigNumber.min` and `BigNumber.max`: don't accept an array. -* Update *.travis.yml*. -* Remove *bower.json*. - -#### 7.2.1 -* 24/05/2018 -* Add `browser` field to *package.json*. - -#### 7.2.0 -* 22/05/2018 -* #166 Correct *.mjs* file. Remove extension from `main` field in *package.json*. - -#### 7.1.0 -* 18/05/2018 -* Add `module` field to *package.json* for *bignumber.mjs*. - -#### 7.0.2 -* 17/05/2018 -* #165 Bugfix: upper-case letters for bases 11-36 in a custom alphabet. -* Add note to *README* regarding creating BigNumbers from Number values. - -#### 7.0.1 -* 26/04/2018 -* #158 Fix global object variable name typo. - -#### 7.0.0 -* 26/04/2018 -* #143 Remove global BigNumber from typings. -* #144 Enable compatibility with `Object.freeze(Object.prototype)`. -* #148 #123 #11 Only throw on a number primitive with more than 15 significant digits if `BigNumber.DEBUG` is `true`. -* Only throw on an invalid BigNumber value if `BigNumber.DEBUG` is `true`. Return BigNumber `NaN` instead. -* #154 `exponentiatedBy`: allow BigNumber exponent. -* #156 Prevent Content Security Policy *unsafe-eval* issue. -* `toFraction`: allow `Infinity` maximum denominator. -* Comment-out some excess tests to reduce test time. -* Amend indentation and other spacing. - -#### 6.0.0 -* 26/01/2018 -* #137 Implement `APLHABET` configuration option. -* Remove `ERRORS` configuration option. -* Remove `toDigits` method; extend `precision` method accordingly. -* Remove s`round` method; extend `decimalPlaces` method accordingly. -* Remove methods: `ceil`, `floor`, and `truncated`. -* Remove method aliases: `add`, `cmp`, `isInt`, `isNeg`, `trunc`, `mul`, `neg` and `sub`. -* Rename methods: `shift` to `shiftedBy`, `another` to `clone`, `toPower` to `exponentiatedBy`, and `equals` to `isEqualTo`. -* Rename methods: add `is` prefix to `greaterThan`, `greaterThanOrEqualTo`, `lessThan` and `lessThanOrEqualTo`. -* Add methods: `multipliedBy`, `isBigNumber`, `isPositive`, `integerValue`, `maximum` and `minimum`. -* Refactor test suite. -* Add *CHANGELOG.md*. -* Rewrite *bignumber.d.ts*. -* Redo API image. - -#### 5.0.0 -* 27/11/2017 -* #81 Don't throw on constructor call without `new`. - -#### 4.1.0 -* 26/09/2017 -* Remove node 0.6 from *.travis.yml*. -* Add *bignumber.mjs*. - -#### 4.0.4 -* 03/09/2017 -* Add missing aliases to *bignumber.d.ts*. - -#### 4.0.3 -* 30/08/2017 -* Add types: *bignumber.d.ts*. - -#### 4.0.2 -* 03/05/2017 -* #120 Workaround Safari/Webkit bug. - -#### 4.0.1 -* 05/04/2017 -* #121 BigNumber.default to BigNumber['default']. - -#### 4.0.0 -* 09/01/2017 -* Replace BigNumber.isBigNumber method with isBigNumber prototype property. - -#### 3.1.2 -* 08/01/2017 -* Minor documentation edit. - -#### 3.1.1 -* 08/01/2017 -* Uncomment `isBigNumber` tests. -* Ignore dot files. - -#### 3.1.0 -* 08/01/2017 -* Add `isBigNumber` method. - -#### 3.0.2 -* 08/01/2017 -* Bugfix: Possible incorrect value of `ERRORS` after a `BigNumber.another` call (due to `parseNumeric` declaration in outer scope). - -#### 3.0.1 -* 23/11/2016 -* Apply fix for old ipads with `%` issue, see #57 and #102. -* Correct error message. - -#### 3.0.0 -* 09/11/2016 -* Remove `require('crypto')` - leave it to the user. -* Add `BigNumber.set` as `BigNumber.config` alias. -* Default `POW_PRECISION` to `0`. - -#### 2.4.0 -* 14/07/2016 -* #97 Add exports to support ES6 imports. - -#### 2.3.0 -* 07/03/2016 -* #86 Add modulus parameter to `toPower`. - -#### 2.2.0 -* 03/03/2016 -* #91 Permit larger JS integers. - -#### 2.1.4 -* 15/12/2015 -* Correct UMD. - -#### 2.1.3 -* 13/12/2015 -* Refactor re global object and crypto availability when bundling. - -#### 2.1.2 -* 10/12/2015 -* Bugfix: `window.crypto` not assigned to `crypto`. - -#### 2.1.1 -* 09/12/2015 -* Prevent code bundler from adding `crypto` shim. - -#### 2.1.0 -* 26/10/2015 -* For `valueOf` and `toJSON`, include the minus sign with negative zero. - -#### 2.0.8 -* 2/10/2015 -* Internal round function bugfix. - -#### 2.0.6 -* 31/03/2015 -* Add bower.json. Tweak division after in-depth review. - -#### 2.0.5 -* 25/03/2015 -* Amend README. Remove bitcoin address. - -#### 2.0.4 -* 25/03/2015 -* Critical bugfix #58: division. - -#### 2.0.3 -* 18/02/2015 -* Amend README. Add source map. - -#### 2.0.2 -* 18/02/2015 -* Correct links. - -#### 2.0.1 -* 18/02/2015 -* Add `max`, `min`, `precision`, `random`, `shiftedBy`, `toDigits` and `truncated` methods. -* Add the short-forms: `add`, `mul`, `sd`, `sub` and `trunc`. -* Add an `another` method to enable multiple independent constructors to be created. -* Add support for the base 2, 8 and 16 prefixes `0b`, `0o` and `0x`. -* Enable a rounding mode to be specified as a second parameter to `toExponential`, `toFixed`, `toFormat` and `toPrecision`. -* Add a `CRYPTO` configuration property so cryptographically-secure pseudo-random number generation can be specified. -* Add a `MODULO_MODE` configuration property to enable the rounding mode used by the `modulo` operation to be specified. -* Add a `POW_PRECISION` configuration property to enable the number of significant digits calculated by the power operation to be limited. -* Improve code quality. -* Improve documentation. - -#### 2.0.0 -* 29/12/2014 -* Add `dividedToIntegerBy`, `isInteger` and `toFormat` methods. -* Remove the following short-forms: `isF`, `isZ`, `toE`, `toF`, `toFr`, `toN`, `toP`, `toS`. -* Store a BigNumber's coefficient in base 1e14, rather than base 10. -* Add fast path for integers to BigNumber constructor. -* Incorporate the library into the online documentation. - -#### 1.5.0 -* 13/11/2014 -* Add `toJSON` and `decimalPlaces` methods. - -#### 1.4.1 -* 08/06/2014 -* Amend README. - -#### 1.4.0 -* 08/05/2014 -* Add `toNumber`. - -#### 1.3.0 -* 08/11/2013 -* Ensure correct rounding of `sqrt` in all, rather than almost all, cases. -* Maximum radix to 64. - -#### 1.2.1 -* 17/10/2013 -* Sign of zero when x < 0 and x + (-x) = 0. - -#### 1.2.0 -* 19/9/2013 -* Throw Error objects for stack. - -#### 1.1.1 -* 22/8/2013 -* Show original value in constructor error message. - -#### 1.1.0 -* 1/8/2013 -* Allow numbers with trailing radix point. - -#### 1.0.1 -* Bugfix: error messages with incorrect method name - -#### 1.0.0 -* 8/11/2012 -* Initial release diff --git a/reverse_engineering/node_modules/bignumber.js/LICENCE.md b/reverse_engineering/node_modules/bignumber.js/LICENCE.md deleted file mode 100644 index 11c87f6..0000000 --- a/reverse_engineering/node_modules/bignumber.js/LICENCE.md +++ /dev/null @@ -1,26 +0,0 @@ -The MIT License (MIT) -===================== - -Copyright © `<2020>` `Michael Mclaughlin` - -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/reverse_engineering/node_modules/bignumber.js/README.md b/reverse_engineering/node_modules/bignumber.js/README.md deleted file mode 100644 index 0f24322..0000000 --- a/reverse_engineering/node_modules/bignumber.js/README.md +++ /dev/null @@ -1,273 +0,0 @@ -![bignumber.js](https://raw.githubusercontent.com/MikeMcl/bignumber.js/gh-pages/bignumberjs.png) - -A JavaScript library for arbitrary-precision decimal and non-decimal arithmetic. - -[![npm version](https://img.shields.io/npm/v/bignumber.js.svg)](https://www.npmjs.com/package/bignumber.js) -[![npm downloads](https://img.shields.io/npm/dw/bignumber.js)](https://www.npmjs.com/package/bignumber.js) -[![build status](https://travis-ci.org/MikeMcl/bignumber.js.svg)](https://travis-ci.org/MikeMcl/bignumber.js) - -
      - -## Features - -- Integers and decimals -- Simple API but full-featured -- Faster, smaller, and perhaps easier to use than JavaScript versions of Java's BigDecimal -- 8 KB minified and gzipped -- Replicates the `toExponential`, `toFixed`, `toPrecision` and `toString` methods of JavaScript's Number type -- Includes a `toFraction` and a correctly-rounded `squareRoot` method -- Supports cryptographically-secure pseudo-random number generation -- No dependencies -- Wide platform compatibility: uses JavaScript 1.5 (ECMAScript 3) features only -- Comprehensive [documentation](http://mikemcl.github.io/bignumber.js/) and test set - -![API](https://raw.githubusercontent.com/MikeMcl/bignumber.js/gh-pages/API.png) - -If a smaller and simpler library is required see [big.js](https://github.com/MikeMcl/big.js/). -It's less than half the size but only works with decimal numbers and only has half the methods. -It also does not allow `NaN` or `Infinity`, or have the configuration options of this library. - -See also [decimal.js](https://github.com/MikeMcl/decimal.js/), which among other things adds support for non-integer powers, and performs all operations to a specified number of significant digits. - -## Load - -The library is the single JavaScript file *bignumber.js* or ES module *bignumber.mjs*. - -### Browser: - -```html - -``` - -> ES module - -```html - -``` - -### [Node.js](http://nodejs.org): - -```bash -$ npm install bignumber.js -``` - -```javascript -const BigNumber = require('bignumber.js'); -``` - -> ES module - -```javascript -import BigNumber from "bignumber.js"; -// or -import { BigNumber } from "bignumber.js"; -``` - -## Use - -The library exports a single constructor function, [`BigNumber`](http://mikemcl.github.io/bignumber.js/#bignumber), which accepts a value of type Number, String or BigNumber, - -```javascript -let x = new BigNumber(123.4567); -let y = BigNumber('123456.7e-3'); -let z = new BigNumber(x); -x.isEqualTo(y) && y.isEqualTo(z) && x.isEqualTo(z); // true -``` - -To get the string value of a BigNumber use [`toString()`](http://mikemcl.github.io/bignumber.js/#toS) or [`toFixed()`](http://mikemcl.github.io/bignumber.js/#toFix). Using `toFixed()` prevents exponential notation being returned, no matter how large or small the value. - -```javascript -let x = new BigNumber('1111222233334444555566'); -x.toString(); // "1.111222233334444555566e+21" -x.toFixed(); // "1111222233334444555566" -``` - -If the limited precision of Number values is not well understood, it is recommended to create BigNumbers from String values rather than Number values to avoid a potential loss of precision. - -*In all further examples below, `let`, semicolons and `toString` calls are not shown. If a commented-out value is in quotes it means `toString` has been called on the preceding expression.* - -```javascript -// Precision loss from using numeric literals with more than 15 significant digits. -new BigNumber(1.0000000000000001) // '1' -new BigNumber(88259496234518.57) // '88259496234518.56' -new BigNumber(99999999999999999999) // '100000000000000000000' - -// Precision loss from using numeric literals outside the range of Number values. -new BigNumber(2e+308) // 'Infinity' -new BigNumber(1e-324) // '0' - -// Precision loss from the unexpected result of arithmetic with Number values. -new BigNumber(0.7 + 0.1) // '0.7999999999999999' -``` - -When creating a BigNumber from a Number, note that a BigNumber is created from a Number's decimal `toString()` value not from its underlying binary value. If the latter is required, then pass the Number's `toString(2)` value and specify base 2. - -```javascript -new BigNumber(Number.MAX_VALUE.toString(2), 2) -``` - -BigNumbers can be created from values in bases from 2 to 36. See [`ALPHABET`](http://mikemcl.github.io/bignumber.js/#alphabet) to extend this range. - -```javascript -a = new BigNumber(1011, 2) // "11" -b = new BigNumber('zz.9', 36) // "1295.25" -c = a.plus(b) // "1306.25" -``` - -*Performance is better if base 10 is NOT specified for decimal values. Only specify base 10 when it is desired that the number of decimal places of the input value be limited to the current [`DECIMAL_PLACES`](http://mikemcl.github.io/bignumber.js/#decimal-places) setting.* - -A BigNumber is immutable in the sense that it is not changed by its methods. - -```javascript -0.3 - 0.1 // 0.19999999999999998 -x = new BigNumber(0.3) -x.minus(0.1) // "0.2" -x // "0.3" -``` - -The methods that return a BigNumber can be chained. - -```javascript -x.dividedBy(y).plus(z).times(9) -x.times('1.23456780123456789e+9').plus(9876.5432321).dividedBy('4444562598.111772').integerValue() -``` - -Some of the longer method names have a shorter alias. - -```javascript -x.squareRoot().dividedBy(y).exponentiatedBy(3).isEqualTo(x.sqrt().div(y).pow(3)) // true -x.modulo(y).multipliedBy(z).eq(x.mod(y).times(z)) // true -``` - -As with JavaScript's Number type, there are [`toExponential`](http://mikemcl.github.io/bignumber.js/#toE), [`toFixed`](http://mikemcl.github.io/bignumber.js/#toFix) and [`toPrecision`](http://mikemcl.github.io/bignumber.js/#toP) methods. - -```javascript -x = new BigNumber(255.5) -x.toExponential(5) // "2.55500e+2" -x.toFixed(5) // "255.50000" -x.toPrecision(5) // "255.50" -x.toNumber() // 255.5 -``` - - A base can be specified for [`toString`](http://mikemcl.github.io/bignumber.js/#toS). - -*Performance is better if base 10 is NOT specified, i.e. use `toString()` not `toString(10)`. Only specify base 10 when it is desired that the number of decimal places be limited to the current [`DECIMAL_PLACES`](http://mikemcl.github.io/bignumber.js/#decimal-places) setting.* - - ```javascript - x.toString(16) // "ff.8" - ``` - -There is a [`toFormat`](http://mikemcl.github.io/bignumber.js/#toFor) method which may be useful for internationalisation. - -```javascript -y = new BigNumber('1234567.898765') -y.toFormat(2) // "1,234,567.90" -``` - -The maximum number of decimal places of the result of an operation involving division (i.e. a division, square root, base conversion or negative power operation) is set using the `set` or `config` method of the `BigNumber` constructor. - -The other arithmetic operations always give the exact result. - -```javascript -BigNumber.set({ DECIMAL_PLACES: 10, ROUNDING_MODE: 4 }) - -x = new BigNumber(2) -y = new BigNumber(3) -z = x.dividedBy(y) // "0.6666666667" -z.squareRoot() // "0.8164965809" -z.exponentiatedBy(-3) // "3.3749999995" -z.toString(2) // "0.1010101011" -z.multipliedBy(z) // "0.44444444448888888889" -z.multipliedBy(z).decimalPlaces(10) // "0.4444444445" -``` - -There is a [`toFraction`](http://mikemcl.github.io/bignumber.js/#toFr) method with an optional *maximum denominator* argument - -```javascript -y = new BigNumber(355) -pi = y.dividedBy(113) // "3.1415929204" -pi.toFraction() // [ "7853982301", "2500000000" ] -pi.toFraction(1000) // [ "355", "113" ] -``` - -and [`isNaN`](http://mikemcl.github.io/bignumber.js/#isNaN) and [`isFinite`](http://mikemcl.github.io/bignumber.js/#isF) methods, as `NaN` and `Infinity` are valid `BigNumber` values. - -```javascript -x = new BigNumber(NaN) // "NaN" -y = new BigNumber(Infinity) // "Infinity" -x.isNaN() && !y.isNaN() && !x.isFinite() && !y.isFinite() // true -``` - -The value of a BigNumber is stored in a decimal floating point format in terms of a coefficient, exponent and sign. - -```javascript -x = new BigNumber(-123.456); -x.c // [ 123, 45600000000000 ] coefficient (i.e. significand) -x.e // 2 exponent -x.s // -1 sign -``` - -For advanced usage, multiple BigNumber constructors can be created, each with their own independent configuration. - -```javascript -// Set DECIMAL_PLACES for the original BigNumber constructor -BigNumber.set({ DECIMAL_PLACES: 10 }) - -// Create another BigNumber constructor, optionally passing in a configuration object -BN = BigNumber.clone({ DECIMAL_PLACES: 5 }) - -x = new BigNumber(1) -y = new BN(1) - -x.div(3) // '0.3333333333' -y.div(3) // '0.33333' -``` - -To avoid having to call `toString` or `valueOf` on a BigNumber to get its value in the Node.js REPL or when using `console.log` use - -```javascript -BigNumber.prototype[require('util').inspect.custom] = BigNumber.prototype.valueOf; -``` - -For further information see the [API](http://mikemcl.github.io/bignumber.js/) reference in the *doc* directory. - -## Test - -The *test/modules* directory contains the test scripts for each method. - -The tests can be run with Node.js or a browser. For Node.js use - - $ npm test - -or - - $ node test/test - -To test a single method, use, for example - - $ node test/methods/toFraction - -For the browser, open *test/test.html*. - -## Build - -For Node, if [uglify-js](https://github.com/mishoo/UglifyJS2) is installed - - npm install uglify-js -g - -then - - npm run build - -will create *bignumber.min.js*. - -A source map will also be created in the root directory. - -## Licence - -The MIT Licence. - -See [LICENCE](https://github.com/MikeMcl/bignumber.js/blob/master/LICENCE). diff --git a/reverse_engineering/node_modules/bignumber.js/bignumber.d.ts b/reverse_engineering/node_modules/bignumber.js/bignumber.d.ts deleted file mode 100644 index 272bd5b..0000000 --- a/reverse_engineering/node_modules/bignumber.js/bignumber.d.ts +++ /dev/null @@ -1,1829 +0,0 @@ -// Type definitions for bignumber.js >=8.1.0 -// Project: https://github.com/MikeMcl/bignumber.js -// Definitions by: Michael Mclaughlin -// Definitions: https://github.com/MikeMcl/bignumber.js - -// Documentation: http://mikemcl.github.io/bignumber.js/ -// -// Exports: -// -// class BigNumber (default export) -// type BigNumber.Constructor -// type BigNumber.ModuloMode -// type BigNumber.RoundingMOde -// type BigNumber.Value -// interface BigNumber.Config -// interface BigNumber.Format -// interface BigNumber.Instance -// -// Example: -// -// import {BigNumber} from "bignumber.js" -// //import BigNumber from "bignumber.js" -// -// let rm: BigNumber.RoundingMode = BigNumber.ROUND_UP; -// let f: BigNumber.Format = { decimalSeparator: ',' }; -// let c: BigNumber.Config = { DECIMAL_PLACES: 4, ROUNDING_MODE: rm, FORMAT: f }; -// BigNumber.config(c); -// -// let v: BigNumber.Value = '12345.6789'; -// let b: BigNumber = new BigNumber(v); -// -// The use of compiler option `--strictNullChecks` is recommended. - -export default BigNumber; - -export namespace BigNumber { - - /** See `BigNumber.config` (alias `BigNumber.set`) and `BigNumber.clone`. */ - interface Config { - - /** - * An integer, 0 to 1e+9. Default value: 20. - * - * The maximum number of decimal places of the result of operations involving division, i.e. - * division, square root and base conversion operations, and exponentiation when the exponent is - * negative. - * - * ```ts - * BigNumber.config({ DECIMAL_PLACES: 5 }) - * BigNumber.set({ DECIMAL_PLACES: 5 }) - * ``` - */ - DECIMAL_PLACES?: number; - - /** - * An integer, 0 to 8. Default value: `BigNumber.ROUND_HALF_UP` (4). - * - * The rounding mode used in operations that involve division (see `DECIMAL_PLACES`) and the - * default rounding mode of the `decimalPlaces`, `precision`, `toExponential`, `toFixed`, - * `toFormat` and `toPrecision` methods. - * - * The modes are available as enumerated properties of the BigNumber constructor. - * - * ```ts - * BigNumber.config({ ROUNDING_MODE: 0 }) - * BigNumber.set({ ROUNDING_MODE: BigNumber.ROUND_UP }) - * ``` - */ - ROUNDING_MODE?: BigNumber.RoundingMode; - - /** - * An integer, 0 to 1e+9, or an array, [-1e+9 to 0, 0 to 1e+9]. - * Default value: `[-7, 20]`. - * - * The exponent value(s) at which `toString` returns exponential notation. - * - * If a single number is assigned, the value is the exponent magnitude. - * - * If an array of two numbers is assigned then the first number is the negative exponent value at - * and beneath which exponential notation is used, and the second number is the positive exponent - * value at and above which exponential notation is used. - * - * For example, to emulate JavaScript numbers in terms of the exponent values at which they begin - * to use exponential notation, use `[-7, 20]`. - * - * ```ts - * BigNumber.config({ EXPONENTIAL_AT: 2 }) - * new BigNumber(12.3) // '12.3' e is only 1 - * new BigNumber(123) // '1.23e+2' - * new BigNumber(0.123) // '0.123' e is only -1 - * new BigNumber(0.0123) // '1.23e-2' - * - * BigNumber.config({ EXPONENTIAL_AT: [-7, 20] }) - * new BigNumber(123456789) // '123456789' e is only 8 - * new BigNumber(0.000000123) // '1.23e-7' - * - * // Almost never return exponential notation: - * BigNumber.config({ EXPONENTIAL_AT: 1e+9 }) - * - * // Always return exponential notation: - * BigNumber.config({ EXPONENTIAL_AT: 0 }) - * ``` - * - * Regardless of the value of `EXPONENTIAL_AT`, the `toFixed` method will always return a value in - * normal notation and the `toExponential` method will always return a value in exponential form. - * Calling `toString` with a base argument, e.g. `toString(10)`, will also always return normal - * notation. - */ - EXPONENTIAL_AT?: number | [number, number]; - - /** - * An integer, magnitude 1 to 1e+9, or an array, [-1e+9 to -1, 1 to 1e+9]. - * Default value: `[-1e+9, 1e+9]`. - * - * The exponent value(s) beyond which overflow to Infinity and underflow to zero occurs. - * - * If a single number is assigned, it is the maximum exponent magnitude: values wth a positive - * exponent of greater magnitude become Infinity and those with a negative exponent of greater - * magnitude become zero. - * - * If an array of two numbers is assigned then the first number is the negative exponent limit and - * the second number is the positive exponent limit. - * - * For example, to emulate JavaScript numbers in terms of the exponent values at which they - * become zero and Infinity, use [-324, 308]. - * - * ```ts - * BigNumber.config({ RANGE: 500 }) - * BigNumber.config().RANGE // [ -500, 500 ] - * new BigNumber('9.999e499') // '9.999e+499' - * new BigNumber('1e500') // 'Infinity' - * new BigNumber('1e-499') // '1e-499' - * new BigNumber('1e-500') // '0' - * - * BigNumber.config({ RANGE: [-3, 4] }) - * new BigNumber(99999) // '99999' e is only 4 - * new BigNumber(100000) // 'Infinity' e is 5 - * new BigNumber(0.001) // '0.01' e is only -3 - * new BigNumber(0.0001) // '0' e is -4 - * ``` - * The largest possible magnitude of a finite BigNumber is 9.999...e+1000000000. - * The smallest possible magnitude of a non-zero BigNumber is 1e-1000000000. - */ - RANGE?: number | [number, number]; - - /** - * A boolean: `true` or `false`. Default value: `false`. - * - * The value that determines whether cryptographically-secure pseudo-random number generation is - * used. If `CRYPTO` is set to true then the random method will generate random digits using - * `crypto.getRandomValues` in browsers that support it, or `crypto.randomBytes` if using a - * version of Node.js that supports it. - * - * If neither function is supported by the host environment then attempting to set `CRYPTO` to - * `true` will fail and an exception will be thrown. - * - * If `CRYPTO` is `false` then the source of randomness used will be `Math.random` (which is - * assumed to generate at least 30 bits of randomness). - * - * See `BigNumber.random`. - * - * ```ts - * // Node.js - * global.crypto = require('crypto') - * - * BigNumber.config({ CRYPTO: true }) - * BigNumber.config().CRYPTO // true - * BigNumber.random() // 0.54340758610486147524 - * ``` - */ - CRYPTO?: boolean; - - /** - * An integer, 0, 1, 3, 6 or 9. Default value: `BigNumber.ROUND_DOWN` (1). - * - * The modulo mode used when calculating the modulus: `a mod n`. - * The quotient, `q = a / n`, is calculated according to the `ROUNDING_MODE` that corresponds to - * the chosen `MODULO_MODE`. - * The remainder, `r`, is calculated as: `r = a - n * q`. - * - * The modes that are most commonly used for the modulus/remainder operation are shown in the - * following table. Although the other rounding modes can be used, they may not give useful - * results. - * - * Property | Value | Description - * :------------------|:------|:------------------------------------------------------------------ - * `ROUND_UP` | 0 | The remainder is positive if the dividend is negative. - * `ROUND_DOWN` | 1 | The remainder has the same sign as the dividend. - * | | Uses 'truncating division' and matches JavaScript's `%` operator . - * `ROUND_FLOOR` | 3 | The remainder has the same sign as the divisor. - * | | This matches Python's `%` operator. - * `ROUND_HALF_EVEN` | 6 | The IEEE 754 remainder function. - * `EUCLID` | 9 | The remainder is always positive. - * | | Euclidian division: `q = sign(n) * floor(a / abs(n))` - * - * The rounding/modulo modes are available as enumerated properties of the BigNumber constructor. - * - * See `modulo`. - * - * ```ts - * BigNumber.config({ MODULO_MODE: BigNumber.EUCLID }) - * BigNumber.set({ MODULO_MODE: 9 }) // equivalent - * ``` - */ - MODULO_MODE?: BigNumber.ModuloMode; - - /** - * An integer, 0 to 1e+9. Default value: 0. - * - * The maximum precision, i.e. number of significant digits, of the result of the power operation - * - unless a modulus is specified. - * - * If set to 0, the number of significant digits will not be limited. - * - * See `exponentiatedBy`. - * - * ```ts - * BigNumber.config({ POW_PRECISION: 100 }) - * ``` - */ - POW_PRECISION?: number; - - /** - * An object including any number of the properties shown below. - * - * The object configures the format of the string returned by the `toFormat` method. - * The example below shows the properties of the object that are recognised, and - * their default values. - * - * Unlike the other configuration properties, the values of the properties of the `FORMAT` object - * will not be checked for validity - the existing object will simply be replaced by the object - * that is passed in. - * - * See `toFormat`. - * - * ```ts - * BigNumber.config({ - * FORMAT: { - * // string to prepend - * prefix: '', - * // the decimal separator - * decimalSeparator: '.', - * // the grouping separator of the integer part - * groupSeparator: ',', - * // the primary grouping size of the integer part - * groupSize: 3, - * // the secondary grouping size of the integer part - * secondaryGroupSize: 0, - * // the grouping separator of the fraction part - * fractionGroupSeparator: ' ', - * // the grouping size of the fraction part - * fractionGroupSize: 0, - * // string to append - * suffix: '' - * } - * }) - * ``` - */ - FORMAT?: BigNumber.Format; - - /** - * The alphabet used for base conversion. The length of the alphabet corresponds to the maximum - * value of the base argument that can be passed to the BigNumber constructor or `toString`. - * - * Default value: `'0123456789abcdefghijklmnopqrstuvwxyz'`. - * - * There is no maximum length for the alphabet, but it must be at least 2 characters long, - * and it must not contain whitespace or a repeated character, or the sign indicators '+' and - * '-', or the decimal separator '.'. - * - * ```ts - * // duodecimal (base 12) - * BigNumber.config({ ALPHABET: '0123456789TE' }) - * x = new BigNumber('T', 12) - * x.toString() // '10' - * x.toString(12) // 'T' - * ``` - */ - ALPHABET?: string; - } - - /** See `FORMAT` and `toFormat`. */ - interface Format { - - /** The string to prepend. */ - prefix?: string; - - /** The decimal separator. */ - decimalSeparator?: string; - - /** The grouping separator of the integer part. */ - groupSeparator?: string; - - /** The primary grouping size of the integer part. */ - groupSize?: number; - - /** The secondary grouping size of the integer part. */ - secondaryGroupSize?: number; - - /** The grouping separator of the fraction part. */ - fractionGroupSeparator?: string; - - /** The grouping size of the fraction part. */ - fractionGroupSize?: number; - - /** The string to append. */ - suffix?: string; - } - - interface Instance { - - /** The coefficient of the value of this BigNumber, an array of base 1e14 integer numbers, or null. */ - readonly c: number[] | null; - - /** The exponent of the value of this BigNumber, an integer number, -1000000000 to 1000000000, or null. */ - readonly e: number | null; - - /** The sign of the value of this BigNumber, -1, 1, or null. */ - readonly s: number | null; - - [key: string]: any; - } - - type Constructor = typeof BigNumber; - type ModuloMode = 0 | 1 | 3 | 6 | 9; - type RoundingMode = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8; - type Value = string | number | Instance; -} - -export declare class BigNumber implements BigNumber.Instance { - - /** Used internally to identify a BigNumber instance. */ - private readonly _isBigNumber: true; - - /** The coefficient of the value of this BigNumber, an array of base 1e14 integer numbers, or null. */ - readonly c: number[] | null; - - /** The exponent of the value of this BigNumber, an integer number, -1000000000 to 1000000000, or null. */ - readonly e: number | null; - - /** The sign of the value of this BigNumber, -1, 1, or null. */ - readonly s: number | null; - - /** - * Returns a new instance of a BigNumber object with value `n`, where `n` is a numeric value in - * the specified `base`, or base 10 if `base` is omitted or is `null` or `undefined`. - * - * ```ts - * x = new BigNumber(123.4567) // '123.4567' - * // 'new' is optional - * y = BigNumber(x) // '123.4567' - * ``` - * - * If `n` is a base 10 value it can be in normal (fixed-point) or exponential notation. - * Values in other bases must be in normal notation. Values in any base can have fraction digits, - * i.e. digits after the decimal point. - * - * ```ts - * new BigNumber(43210) // '43210' - * new BigNumber('4.321e+4') // '43210' - * new BigNumber('-735.0918e-430') // '-7.350918e-428' - * new BigNumber('123412421.234324', 5) // '607236.557696' - * ``` - * - * Signed `0`, signed `Infinity` and `NaN` are supported. - * - * ```ts - * new BigNumber('-Infinity') // '-Infinity' - * new BigNumber(NaN) // 'NaN' - * new BigNumber(-0) // '0' - * new BigNumber('.5') // '0.5' - * new BigNumber('+2') // '2' - * ``` - * - * String values in hexadecimal literal form, e.g. `'0xff'`, are valid, as are string values with - * the octal and binary prefixs `'0o'` and `'0b'`. String values in octal literal form without the - * prefix will be interpreted as decimals, e.g. `'011'` is interpreted as 11, not 9. - * - * ```ts - * new BigNumber(-10110100.1, 2) // '-180.5' - * new BigNumber('-0b10110100.1') // '-180.5' - * new BigNumber('ff.8', 16) // '255.5' - * new BigNumber('0xff.8') // '255.5' - * ``` - * - * If a base is specified, `n` is rounded according to the current `DECIMAL_PLACES` and - * `ROUNDING_MODE` settings. This includes base 10, so don't include a `base` parameter for decimal - * values unless this behaviour is desired. - * - * ```ts - * BigNumber.config({ DECIMAL_PLACES: 5 }) - * new BigNumber(1.23456789) // '1.23456789' - * new BigNumber(1.23456789, 10) // '1.23457' - * ``` - * - * An error is thrown if `base` is invalid. - * - * There is no limit to the number of digits of a value of type string (other than that of - * JavaScript's maximum array size). See `RANGE` to set the maximum and minimum possible exponent - * value of a BigNumber. - * - * ```ts - * new BigNumber('5032485723458348569331745.33434346346912144534543') - * new BigNumber('4.321e10000000') - * ``` - * - * BigNumber `NaN` is returned if `n` is invalid (unless `BigNumber.DEBUG` is `true`, see below). - * - * ```ts - * new BigNumber('.1*') // 'NaN' - * new BigNumber('blurgh') // 'NaN' - * new BigNumber(9, 2) // 'NaN' - * ``` - * - * To aid in debugging, if `BigNumber.DEBUG` is `true` then an error will be thrown on an - * invalid `n`. An error will also be thrown if `n` is of type number with more than 15 - * significant digits, as calling `toString` or `valueOf` on these numbers may not result in the - * intended value. - * - * ```ts - * console.log(823456789123456.3) // 823456789123456.2 - * new BigNumber(823456789123456.3) // '823456789123456.2' - * BigNumber.DEBUG = true - * // 'Error: Number has more than 15 significant digits' - * new BigNumber(823456789123456.3) - * // 'Error: Not a base 2 number' - * new BigNumber(9, 2) - * ``` - * - * A BigNumber can also be created from an object literal. - * Use `isBigNumber` to check that it is well-formed. - * - * ```ts - * new BigNumber({ s: 1, e: 2, c: [ 777, 12300000000000 ], _isBigNumber: true }) // '777.123' - * ``` - * - * @param n A numeric value. - * @param base The base of `n`, integer, 2 to 36 (or `ALPHABET.length`, see `ALPHABET`). - */ - constructor(n: BigNumber.Value, base?: number); - - /** - * Returns a BigNumber whose value is the absolute value, i.e. the magnitude, of the value of this - * BigNumber. - * - * The return value is always exact and unrounded. - * - * ```ts - * x = new BigNumber(-0.8) - * x.absoluteValue() // '0.8' - * ``` - */ - absoluteValue(): BigNumber; - - /** - * Returns a BigNumber whose value is the absolute value, i.e. the magnitude, of the value of this - * BigNumber. - * - * The return value is always exact and unrounded. - * - * ```ts - * x = new BigNumber(-0.8) - * x.abs() // '0.8' - * ``` - */ - abs(): BigNumber; - - /** - * Returns | | - * :-------:|:--------------------------------------------------------------| - * 1 | If the value of this BigNumber is greater than the value of `n` - * -1 | If the value of this BigNumber is less than the value of `n` - * 0 | If this BigNumber and `n` have the same value - * `null` | If the value of either this BigNumber or `n` is `NaN` - * - * ```ts - * - * x = new BigNumber(Infinity) - * y = new BigNumber(5) - * x.comparedTo(y) // 1 - * x.comparedTo(x.minus(1)) // 0 - * y.comparedTo(NaN) // null - * y.comparedTo('110', 2) // -1 - * ``` - * @param n A numeric value. - * @param [base] The base of n. - */ - comparedTo(n: BigNumber.Value, base?: number): number; - - /** - * Returns a BigNumber whose value is the value of this BigNumber rounded by rounding mode - * `roundingMode` to a maximum of `decimalPlaces` decimal places. - * - * If `decimalPlaces` is omitted, or is `null` or `undefined`, the return value is the number of - * decimal places of the value of this BigNumber, or `null` if the value of this BigNumber is - * ±`Infinity` or `NaN`. - * - * If `roundingMode` is omitted, or is `null` or `undefined`, `ROUNDING_MODE` is used. - * - * Throws if `decimalPlaces` or `roundingMode` is invalid. - * - * ```ts - * x = new BigNumber(1234.56) - * x.decimalPlaces() // 2 - * x.decimalPlaces(1) // '1234.6' - * x.decimalPlaces(2) // '1234.56' - * x.decimalPlaces(10) // '1234.56' - * x.decimalPlaces(0, 1) // '1234' - * x.decimalPlaces(0, 6) // '1235' - * x.decimalPlaces(1, 1) // '1234.5' - * x.decimalPlaces(1, BigNumber.ROUND_HALF_EVEN) // '1234.6' - * x // '1234.56' - * y = new BigNumber('9.9e-101') - * y.decimalPlaces() // 102 - * ``` - * - * @param [decimalPlaces] Decimal places, integer, 0 to 1e+9. - * @param [roundingMode] Rounding mode, integer, 0 to 8. - */ - decimalPlaces(): number; - decimalPlaces(decimalPlaces: number, roundingMode?: BigNumber.RoundingMode): BigNumber; - - /** - * Returns a BigNumber whose value is the value of this BigNumber rounded by rounding mode - * `roundingMode` to a maximum of `decimalPlaces` decimal places. - * - * If `decimalPlaces` is omitted, or is `null` or `undefined`, the return value is the number of - * decimal places of the value of this BigNumber, or `null` if the value of this BigNumber is - * ±`Infinity` or `NaN`. - * - * If `roundingMode` is omitted, or is `null` or `undefined`, `ROUNDING_MODE` is used. - * - * Throws if `decimalPlaces` or `roundingMode` is invalid. - * - * ```ts - * x = new BigNumber(1234.56) - * x.dp() // 2 - * x.dp(1) // '1234.6' - * x.dp(2) // '1234.56' - * x.dp(10) // '1234.56' - * x.dp(0, 1) // '1234' - * x.dp(0, 6) // '1235' - * x.dp(1, 1) // '1234.5' - * x.dp(1, BigNumber.ROUND_HALF_EVEN) // '1234.6' - * x // '1234.56' - * y = new BigNumber('9.9e-101') - * y.dp() // 102 - * ``` - * - * @param [decimalPlaces] Decimal places, integer, 0 to 1e+9. - * @param [roundingMode] Rounding mode, integer, 0 to 8. - */ - dp(): number; - dp(decimalPlaces: number, roundingMode?: BigNumber.RoundingMode): BigNumber; - - /** - * Returns a BigNumber whose value is the value of this BigNumber divided by `n`, rounded - * according to the current `DECIMAL_PLACES` and `ROUNDING_MODE` settings. - * - * ```ts - * x = new BigNumber(355) - * y = new BigNumber(113) - * x.dividedBy(y) // '3.14159292035398230088' - * x.dividedBy(5) // '71' - * x.dividedBy(47, 16) // '5' - * ``` - * - * @param n A numeric value. - * @param [base] The base of n. - */ - dividedBy(n: BigNumber.Value, base?: number): BigNumber; - - /** - * Returns a BigNumber whose value is the value of this BigNumber divided by `n`, rounded - * according to the current `DECIMAL_PLACES` and `ROUNDING_MODE` settings. - * - * ```ts - * x = new BigNumber(355) - * y = new BigNumber(113) - * x.div(y) // '3.14159292035398230088' - * x.div(5) // '71' - * x.div(47, 16) // '5' - * ``` - * - * @param n A numeric value. - * @param [base] The base of n. - */ - div(n: BigNumber.Value, base?: number): BigNumber; - - /** - * Returns a BigNumber whose value is the integer part of dividing the value of this BigNumber by - * `n`. - * - * ```ts - * x = new BigNumber(5) - * y = new BigNumber(3) - * x.dividedToIntegerBy(y) // '1' - * x.dividedToIntegerBy(0.7) // '7' - * x.dividedToIntegerBy('0.f', 16) // '5' - * ``` - * - * @param n A numeric value. - * @param [base] The base of n. - */ - dividedToIntegerBy(n: BigNumber.Value, base?: number): BigNumber; - - /** - * Returns a BigNumber whose value is the integer part of dividing the value of this BigNumber by - * `n`. - * - * ```ts - * x = new BigNumber(5) - * y = new BigNumber(3) - * x.idiv(y) // '1' - * x.idiv(0.7) // '7' - * x.idiv('0.f', 16) // '5' - * ``` - * - * @param n A numeric value. - * @param [base] The base of n. - */ - idiv(n: BigNumber.Value, base?: number): BigNumber; - - /** - * Returns a BigNumber whose value is the value of this BigNumber exponentiated by `n`, i.e. - * raised to the power `n`, and optionally modulo a modulus `m`. - * - * If `n` is negative the result is rounded according to the current `DECIMAL_PLACES` and - * `ROUNDING_MODE` settings. - * - * As the number of digits of the result of the power operation can grow so large so quickly, - * e.g. 123.456**10000 has over 50000 digits, the number of significant digits calculated is - * limited to the value of the `POW_PRECISION` setting (unless a modulus `m` is specified). - * - * By default `POW_PRECISION` is set to 0. This means that an unlimited number of significant - * digits will be calculated, and that the method's performance will decrease dramatically for - * larger exponents. - * - * If `m` is specified and the value of `m`, `n` and this BigNumber are integers and `n` is - * positive, then a fast modular exponentiation algorithm is used, otherwise the operation will - * be performed as `x.exponentiatedBy(n).modulo(m)` with a `POW_PRECISION` of 0. - * - * Throws if `n` is not an integer. - * - * ```ts - * Math.pow(0.7, 2) // 0.48999999999999994 - * x = new BigNumber(0.7) - * x.exponentiatedBy(2) // '0.49' - * BigNumber(3).exponentiatedBy(-2) // '0.11111111111111111111' - * ``` - * - * @param n The exponent, an integer. - * @param [m] The modulus. - */ - exponentiatedBy(n: BigNumber.Value, m?: BigNumber.Value): BigNumber; - exponentiatedBy(n: number, m?: BigNumber.Value): BigNumber; - - /** - * Returns a BigNumber whose value is the value of this BigNumber exponentiated by `n`, i.e. - * raised to the power `n`, and optionally modulo a modulus `m`. - * - * If `n` is negative the result is rounded according to the current `DECIMAL_PLACES` and - * `ROUNDING_MODE` settings. - * - * As the number of digits of the result of the power operation can grow so large so quickly, - * e.g. 123.456**10000 has over 50000 digits, the number of significant digits calculated is - * limited to the value of the `POW_PRECISION` setting (unless a modulus `m` is specified). - * - * By default `POW_PRECISION` is set to 0. This means that an unlimited number of significant - * digits will be calculated, and that the method's performance will decrease dramatically for - * larger exponents. - * - * If `m` is specified and the value of `m`, `n` and this BigNumber are integers and `n` is - * positive, then a fast modular exponentiation algorithm is used, otherwise the operation will - * be performed as `x.pow(n).modulo(m)` with a `POW_PRECISION` of 0. - * - * Throws if `n` is not an integer. - * - * ```ts - * Math.pow(0.7, 2) // 0.48999999999999994 - * x = new BigNumber(0.7) - * x.pow(2) // '0.49' - * BigNumber(3).pow(-2) // '0.11111111111111111111' - * ``` - * - * @param n The exponent, an integer. - * @param [m] The modulus. - */ - pow(n: BigNumber.Value, m?: BigNumber.Value): BigNumber; - pow(n: number, m?: BigNumber.Value): BigNumber; - - /** - * Returns a BigNumber whose value is the value of this BigNumber rounded to an integer using - * rounding mode `rm`. - * - * If `rm` is omitted, or is `null` or `undefined`, `ROUNDING_MODE` is used. - * - * Throws if `rm` is invalid. - * - * ```ts - * x = new BigNumber(123.456) - * x.integerValue() // '123' - * x.integerValue(BigNumber.ROUND_CEIL) // '124' - * y = new BigNumber(-12.7) - * y.integerValue() // '-13' - * x.integerValue(BigNumber.ROUND_DOWN) // '-12' - * ``` - * - * @param {BigNumber.RoundingMode} [rm] The roundng mode, an integer, 0 to 8. - */ - integerValue(rm?: BigNumber.RoundingMode): BigNumber; - - /** - * Returns `true` if the value of this BigNumber is equal to the value of `n`, otherwise returns - * `false`. - * - * As with JavaScript, `NaN` does not equal `NaN`. - * - * ```ts - * 0 === 1e-324 // true - * x = new BigNumber(0) - * x.isEqualTo('1e-324') // false - * BigNumber(-0).isEqualTo(x) // true ( -0 === 0 ) - * BigNumber(255).isEqualTo('ff', 16) // true - * - * y = new BigNumber(NaN) - * y.isEqualTo(NaN) // false - * ``` - * - * @param n A numeric value. - * @param [base] The base of n. - */ - isEqualTo(n: BigNumber.Value, base?: number): boolean; - - /** - * Returns `true` if the value of this BigNumber is equal to the value of `n`, otherwise returns - * `false`. - * - * As with JavaScript, `NaN` does not equal `NaN`. - * - * ```ts - * 0 === 1e-324 // true - * x = new BigNumber(0) - * x.eq('1e-324') // false - * BigNumber(-0).eq(x) // true ( -0 === 0 ) - * BigNumber(255).eq('ff', 16) // true - * - * y = new BigNumber(NaN) - * y.eq(NaN) // false - * ``` - * - * @param n A numeric value. - * @param [base] The base of n. - */ - eq(n: BigNumber.Value, base?: number): boolean; - - /** - * Returns `true` if the value of this BigNumber is a finite number, otherwise returns `false`. - * - * The only possible non-finite values of a BigNumber are `NaN`, `Infinity` and `-Infinity`. - * - * ```ts - * x = new BigNumber(1) - * x.isFinite() // true - * y = new BigNumber(Infinity) - * y.isFinite() // false - * ``` - */ - isFinite(): boolean; - - /** - * Returns `true` if the value of this BigNumber is greater than the value of `n`, otherwise - * returns `false`. - * - * ```ts - * 0.1 > (0.3 - 0.2) // true - * x = new BigNumber(0.1) - * x.isGreaterThan(BigNumber(0.3).minus(0.2)) // false - * BigNumber(0).isGreaterThan(x) // false - * BigNumber(11, 3).isGreaterThan(11.1, 2) // true - * ``` - * - * @param n A numeric value. - * @param [base] The base of n. - */ - isGreaterThan(n: BigNumber.Value, base?: number): boolean; - - /** - * Returns `true` if the value of this BigNumber is greater than the value of `n`, otherwise - * returns `false`. - * - * ```ts - * 0.1 > (0.3 - 0 // true - * x = new BigNumber(0.1) - * x.gt(BigNumber(0.3).minus(0.2)) // false - * BigNumber(0).gt(x) // false - * BigNumber(11, 3).gt(11.1, 2) // true - * ``` - * - * @param n A numeric value. - * @param [base] The base of n. - */ - gt(n: BigNumber.Value, base?: number): boolean; - - /** - * Returns `true` if the value of this BigNumber is greater than or equal to the value of `n`, - * otherwise returns `false`. - * - * ```ts - * (0.3 - 0.2) >= 0.1 // false - * x = new BigNumber(0.3).minus(0.2) - * x.isGreaterThanOrEqualTo(0.1) // true - * BigNumber(1).isGreaterThanOrEqualTo(x) // true - * BigNumber(10, 18).isGreaterThanOrEqualTo('i', 36) // true - * ``` - * - * @param n A numeric value. - * @param [base] The base of n. - */ - isGreaterThanOrEqualTo(n: BigNumber.Value, base?: number): boolean; - - /** - * Returns `true` if the value of this BigNumber is greater than or equal to the value of `n`, - * otherwise returns `false`. - * - * ```ts - * (0.3 - 0.2) >= 0.1 // false - * x = new BigNumber(0.3).minus(0.2) - * x.gte(0.1) // true - * BigNumber(1).gte(x) // true - * BigNumber(10, 18).gte('i', 36) // true - * ``` - * - * @param n A numeric value. - * @param [base] The base of n. - */ - gte(n: BigNumber.Value, base?: number): boolean; - - /** - * Returns `true` if the value of this BigNumber is an integer, otherwise returns `false`. - * - * ```ts - * x = new BigNumber(1) - * x.isInteger() // true - * y = new BigNumber(123.456) - * y.isInteger() // false - * ``` - */ - isInteger(): boolean; - - /** - * Returns `true` if the value of this BigNumber is less than the value of `n`, otherwise returns - * `false`. - * - * ```ts - * (0.3 - 0.2) < 0.1 // true - * x = new BigNumber(0.3).minus(0.2) - * x.isLessThan(0.1) // false - * BigNumber(0).isLessThan(x) // true - * BigNumber(11.1, 2).isLessThan(11, 3) // true - * ``` - * - * @param n A numeric value. - * @param [base] The base of n. - */ - isLessThan(n: BigNumber.Value, base?: number): boolean; - - /** - * Returns `true` if the value of this BigNumber is less than the value of `n`, otherwise returns - * `false`. - * - * ```ts - * (0.3 - 0.2) < 0.1 // true - * x = new BigNumber(0.3).minus(0.2) - * x.lt(0.1) // false - * BigNumber(0).lt(x) // true - * BigNumber(11.1, 2).lt(11, 3) // true - * ``` - * - * @param n A numeric value. - * @param [base] The base of n. - */ - lt(n: BigNumber.Value, base?: number): boolean; - - /** - * Returns `true` if the value of this BigNumber is less than or equal to the value of `n`, - * otherwise returns `false`. - * - * ```ts - * 0.1 <= (0.3 - 0.2) // false - * x = new BigNumber(0.1) - * x.isLessThanOrEqualTo(BigNumber(0.3).minus(0.2)) // true - * BigNumber(-1).isLessThanOrEqualTo(x) // true - * BigNumber(10, 18).isLessThanOrEqualTo('i', 36) // true - * ``` - * - * @param n A numeric value. - * @param [base] The base of n. - */ - isLessThanOrEqualTo(n: BigNumber.Value, base?: number): boolean; - - /** - * Returns `true` if the value of this BigNumber is less than or equal to the value of `n`, - * otherwise returns `false`. - * - * ```ts - * 0.1 <= (0.3 - 0.2) // false - * x = new BigNumber(0.1) - * x.lte(BigNumber(0.3).minus(0.2)) // true - * BigNumber(-1).lte(x) // true - * BigNumber(10, 18).lte('i', 36) // true - * ``` - * - * @param n A numeric value. - * @param [base] The base of n. - */ - lte(n: BigNumber.Value, base?: number): boolean; - - /** - * Returns `true` if the value of this BigNumber is `NaN`, otherwise returns `false`. - * - * ```ts - * x = new BigNumber(NaN) - * x.isNaN() // true - * y = new BigNumber('Infinity') - * y.isNaN() // false - * ``` - */ - isNaN(): boolean; - - /** - * Returns `true` if the value of this BigNumber is negative, otherwise returns `false`. - * - * ```ts - * x = new BigNumber(-0) - * x.isNegative() // true - * y = new BigNumber(2) - * y.isNegative() // false - * ``` - */ - isNegative(): boolean; - - /** - * Returns `true` if the value of this BigNumber is positive, otherwise returns `false`. - * - * ```ts - * x = new BigNumber(-0) - * x.isPositive() // false - * y = new BigNumber(2) - * y.isPositive() // true - * ``` - */ - isPositive(): boolean; - - /** - * Returns `true` if the value of this BigNumber is zero or minus zero, otherwise returns `false`. - * - * ```ts - * x = new BigNumber(-0) - * x.isZero() // true - * ``` - */ - isZero(): boolean; - - /** - * Returns a BigNumber whose value is the value of this BigNumber minus `n`. - * - * The return value is always exact and unrounded. - * - * ```ts - * 0.3 - 0.1 // 0.19999999999999998 - * x = new BigNumber(0.3) - * x.minus(0.1) // '0.2' - * x.minus(0.6, 20) // '0' - * ``` - * - * @param n A numeric value. - * @param [base] The base of n. - */ - minus(n: BigNumber.Value, base?: number): BigNumber; - - /** - * Returns a BigNumber whose value is the value of this BigNumber modulo `n`, i.e. the integer - * remainder of dividing this BigNumber by `n`. - * - * The value returned, and in particular its sign, is dependent on the value of the `MODULO_MODE` - * setting of this BigNumber constructor. If it is 1 (default value), the result will have the - * same sign as this BigNumber, and it will match that of Javascript's `%` operator (within the - * limits of double precision) and BigDecimal's `remainder` method. - * - * The return value is always exact and unrounded. - * - * See `MODULO_MODE` for a description of the other modulo modes. - * - * ```ts - * 1 % 0.9 // 0.09999999999999998 - * x = new BigNumber(1) - * x.modulo(0.9) // '0.1' - * y = new BigNumber(33) - * y.modulo('a', 33) // '3' - * ``` - * - * @param n A numeric value. - * @param [base] The base of n. - */ - modulo(n: BigNumber.Value, base?: number): BigNumber; - - /** - * Returns a BigNumber whose value is the value of this BigNumber modulo `n`, i.e. the integer - * remainder of dividing this BigNumber by `n`. - * - * The value returned, and in particular its sign, is dependent on the value of the `MODULO_MODE` - * setting of this BigNumber constructor. If it is 1 (default value), the result will have the - * same sign as this BigNumber, and it will match that of Javascript's `%` operator (within the - * limits of double precision) and BigDecimal's `remainder` method. - * - * The return value is always exact and unrounded. - * - * See `MODULO_MODE` for a description of the other modulo modes. - * - * ```ts - * 1 % 0.9 // 0.09999999999999998 - * x = new BigNumber(1) - * x.mod(0.9) // '0.1' - * y = new BigNumber(33) - * y.mod('a', 33) // '3' - * ``` - * - * @param n A numeric value. - * @param [base] The base of n. - */ - mod(n: BigNumber.Value, base?: number): BigNumber; - - /** - * Returns a BigNumber whose value is the value of this BigNumber multiplied by `n`. - * - * The return value is always exact and unrounded. - * - * ```ts - * 0.6 * 3 // 1.7999999999999998 - * x = new BigNumber(0.6) - * y = x.multipliedBy(3) // '1.8' - * BigNumber('7e+500').multipliedBy(y) // '1.26e+501' - * x.multipliedBy('-a', 16) // '-6' - * ``` - * - * @param n A numeric value. - * @param [base] The base of n. - */ - multipliedBy(n: BigNumber.Value, base?: number): BigNumber; - - /** - * Returns a BigNumber whose value is the value of this BigNumber multiplied by `n`. - * - * The return value is always exact and unrounded. - * - * ```ts - * 0.6 * 3 // 1.7999999999999998 - * x = new BigNumber(0.6) - * y = x.times(3) // '1.8' - * BigNumber('7e+500').times(y) // '1.26e+501' - * x.times('-a', 16) // '-6' - * ``` - * - * @param n A numeric value. - * @param [base] The base of n. - */ - times(n: BigNumber.Value, base?: number): BigNumber; - - /** - * Returns a BigNumber whose value is the value of this BigNumber negated, i.e. multiplied by -1. - * - * ```ts - * x = new BigNumber(1.8) - * x.negated() // '-1.8' - * y = new BigNumber(-1.3) - * y.negated() // '1.3' - * ``` - */ - negated(): BigNumber; - - /** - * Returns a BigNumber whose value is the value of this BigNumber plus `n`. - * - * The return value is always exact and unrounded. - * - * ```ts - * 0.1 + 0.2 // 0.30000000000000004 - * x = new BigNumber(0.1) - * y = x.plus(0.2) // '0.3' - * BigNumber(0.7).plus(x).plus(y) // '1.1' - * x.plus('0.1', 8) // '0.225' - * ``` - * - * @param n A numeric value. - * @param [base] The base of n. - */ - plus(n: BigNumber.Value, base?: number): BigNumber; - - /** - * Returns the number of significant digits of the value of this BigNumber, or `null` if the value - * of this BigNumber is ±`Infinity` or `NaN`. - * - * If `includeZeros` is true then any trailing zeros of the integer part of the value of this - * BigNumber are counted as significant digits, otherwise they are not. - * - * Throws if `includeZeros` is invalid. - * - * ```ts - * x = new BigNumber(9876.54321) - * x.precision() // 9 - * y = new BigNumber(987000) - * y.precision(false) // 3 - * y.precision(true) // 6 - * ``` - * - * @param [includeZeros] Whether to include integer trailing zeros in the significant digit count. - */ - precision(includeZeros?: boolean): number; - - /** - * Returns a BigNumber whose value is the value of this BigNumber rounded to a precision of - * `significantDigits` significant digits using rounding mode `roundingMode`. - * - * If `roundingMode` is omitted or is `null` or `undefined`, `ROUNDING_MODE` will be used. - * - * Throws if `significantDigits` or `roundingMode` is invalid. - * - * ```ts - * x = new BigNumber(9876.54321) - * x.precision(6) // '9876.54' - * x.precision(6, BigNumber.ROUND_UP) // '9876.55' - * x.precision(2) // '9900' - * x.precision(2, 1) // '9800' - * x // '9876.54321' - * ``` - * - * @param significantDigits Significant digits, integer, 1 to 1e+9. - * @param [roundingMode] Rounding mode, integer, 0 to 8. - */ - precision(significantDigits: number, roundingMode?: BigNumber.RoundingMode): BigNumber; - - /** - * Returns the number of significant digits of the value of this BigNumber, - * or `null` if the value of this BigNumber is ±`Infinity` or `NaN`. - * - * If `includeZeros` is true then any trailing zeros of the integer part of - * the value of this BigNumber are counted as significant digits, otherwise - * they are not. - * - * Throws if `includeZeros` is invalid. - * - * ```ts - * x = new BigNumber(9876.54321) - * x.sd() // 9 - * y = new BigNumber(987000) - * y.sd(false) // 3 - * y.sd(true) // 6 - * ``` - * - * @param [includeZeros] Whether to include integer trailing zeros in the significant digit count. - */ - sd(includeZeros?: boolean): number; - - /** - * Returns a BigNumber whose value is the value of this BigNumber rounded to a precision of - * `significantDigits` significant digits using rounding mode `roundingMode`. - * - * If `roundingMode` is omitted or is `null` or `undefined`, `ROUNDING_MODE` will be used. - * - * Throws if `significantDigits` or `roundingMode` is invalid. - * - * ```ts - * x = new BigNumber(9876.54321) - * x.sd(6) // '9876.54' - * x.sd(6, BigNumber.ROUND_UP) // '9876.55' - * x.sd(2) // '9900' - * x.sd(2, 1) // '9800' - * x // '9876.54321' - * ``` - * - * @param significantDigits Significant digits, integer, 1 to 1e+9. - * @param [roundingMode] Rounding mode, integer, 0 to 8. - */ - sd(significantDigits: number, roundingMode?: BigNumber.RoundingMode): BigNumber; - - /** - * Returns a BigNumber whose value is the value of this BigNumber shifted by `n` places. - * - * The shift is of the decimal point, i.e. of powers of ten, and is to the left if `n` is negative - * or to the right if `n` is positive. - * - * The return value is always exact and unrounded. - * - * Throws if `n` is invalid. - * - * ```ts - * x = new BigNumber(1.23) - * x.shiftedBy(3) // '1230' - * x.shiftedBy(-3) // '0.00123' - * ``` - * - * @param n The shift value, integer, -9007199254740991 to 9007199254740991. - */ - shiftedBy(n: number): BigNumber; - - /** - * Returns a BigNumber whose value is the square root of the value of this BigNumber, rounded - * according to the current `DECIMAL_PLACES` and `ROUNDING_MODE` settings. - * - * The return value will be correctly rounded, i.e. rounded as if the result was first calculated - * to an infinite number of correct digits before rounding. - * - * ```ts - * x = new BigNumber(16) - * x.squareRoot() // '4' - * y = new BigNumber(3) - * y.squareRoot() // '1.73205080756887729353' - * ``` - */ - squareRoot(): BigNumber; - - /** - * Returns a BigNumber whose value is the square root of the value of this BigNumber, rounded - * according to the current `DECIMAL_PLACES` and `ROUNDING_MODE` settings. - * - * The return value will be correctly rounded, i.e. rounded as if the result was first calculated - * to an infinite number of correct digits before rounding. - * - * ```ts - * x = new BigNumber(16) - * x.sqrt() // '4' - * y = new BigNumber(3) - * y.sqrt() // '1.73205080756887729353' - * ``` - */ - sqrt(): BigNumber; - - /** - * Returns a string representing the value of this BigNumber in exponential notation rounded using - * rounding mode `roundingMode` to `decimalPlaces` decimal places, i.e with one digit before the - * decimal point and `decimalPlaces` digits after it. - * - * If the value of this BigNumber in exponential notation has fewer than `decimalPlaces` fraction - * digits, the return value will be appended with zeros accordingly. - * - * If `decimalPlaces` is omitted, or is `null` or `undefined`, the number of digits after the - * decimal point defaults to the minimum number of digits necessary to represent the value - * exactly. - * - * If `roundingMode` is omitted or is `null` or `undefined`, `ROUNDING_MODE` is used. - * - * Throws if `decimalPlaces` or `roundingMode` is invalid. - * - * ```ts - * x = 45.6 - * y = new BigNumber(x) - * x.toExponential() // '4.56e+1' - * y.toExponential() // '4.56e+1' - * x.toExponential(0) // '5e+1' - * y.toExponential(0) // '5e+1' - * x.toExponential(1) // '4.6e+1' - * y.toExponential(1) // '4.6e+1' - * y.toExponential(1, 1) // '4.5e+1' (ROUND_DOWN) - * x.toExponential(3) // '4.560e+1' - * y.toExponential(3) // '4.560e+1' - * ``` - * - * @param [decimalPlaces] Decimal places, integer, 0 to 1e+9. - * @param [roundingMode] Rounding mode, integer, 0 to 8. - */ - toExponential(decimalPlaces: number, roundingMode?: BigNumber.RoundingMode): string; - toExponential(): string; - - /** - * Returns a string representing the value of this BigNumber in normal (fixed-point) notation - * rounded to `decimalPlaces` decimal places using rounding mode `roundingMode`. - * - * If the value of this BigNumber in normal notation has fewer than `decimalPlaces` fraction - * digits, the return value will be appended with zeros accordingly. - * - * Unlike `Number.prototype.toFixed`, which returns exponential notation if a number is greater or - * equal to 10**21, this method will always return normal notation. - * - * If `decimalPlaces` is omitted or is `null` or `undefined`, the return value will be unrounded - * and in normal notation. This is also unlike `Number.prototype.toFixed`, which returns the value - * to zero decimal places. It is useful when normal notation is required and the current - * `EXPONENTIAL_AT` setting causes `toString` to return exponential notation. - * - * If `roundingMode` is omitted or is `null` or `undefined`, `ROUNDING_MODE` is used. - * - * Throws if `decimalPlaces` or `roundingMode` is invalid. - * - * ```ts - * x = 3.456 - * y = new BigNumber(x) - * x.toFixed() // '3' - * y.toFixed() // '3.456' - * y.toFixed(0) // '3' - * x.toFixed(2) // '3.46' - * y.toFixed(2) // '3.46' - * y.toFixed(2, 1) // '3.45' (ROUND_DOWN) - * x.toFixed(5) // '3.45600' - * y.toFixed(5) // '3.45600' - * ``` - * - * @param [decimalPlaces] Decimal places, integer, 0 to 1e+9. - * @param [roundingMode] Rounding mode, integer, 0 to 8. - */ - toFixed(decimalPlaces: number, roundingMode?: BigNumber.RoundingMode): string; - toFixed(): string; - - /** - * Returns a string representing the value of this BigNumber in normal (fixed-point) notation - * rounded to `decimalPlaces` decimal places using rounding mode `roundingMode`, and formatted - * according to the properties of the `format` or `FORMAT` object. - * - * The formatting object may contain some or all of the properties shown in the examples below. - * - * If `decimalPlaces` is omitted or is `null` or `undefined`, then the return value is not - * rounded to a fixed number of decimal places. - * - * If `roundingMode` is omitted or is `null` or `undefined`, `ROUNDING_MODE` is used. - * - * If `format` is omitted or is `null` or `undefined`, `FORMAT` is used. - * - * Throws if `decimalPlaces`, `roundingMode`, or `format` is invalid. - * - * ```ts - * fmt = { - * decimalSeparator: '.', - * groupSeparator: ',', - * groupSize: 3, - * secondaryGroupSize: 0, - * fractionGroupSeparator: ' ', - * fractionGroupSize: 0 - * } - * - * x = new BigNumber('123456789.123456789') - * - * // Set the global formatting options - * BigNumber.config({ FORMAT: fmt }) - * - * x.toFormat() // '123,456,789.123456789' - * x.toFormat(3) // '123,456,789.123' - * - * // If a reference to the object assigned to FORMAT has been retained, - * // the format properties can be changed directly - * fmt.groupSeparator = ' ' - * fmt.fractionGroupSize = 5 - * x.toFormat() // '123 456 789.12345 6789' - * - * // Alternatively, pass the formatting options as an argument - * fmt = { - * decimalSeparator: ',', - * groupSeparator: '.', - * groupSize: 3, - * secondaryGroupSize: 2 - * } - * - * x.toFormat() // '123 456 789.12345 6789' - * x.toFormat(fmt) // '12.34.56.789,123456789' - * x.toFormat(2, fmt) // '12.34.56.789,12' - * x.toFormat(3, BigNumber.ROUND_UP, fmt) // '12.34.56.789,124' - * ``` - * - * @param [decimalPlaces] Decimal places, integer, 0 to 1e+9. - * @param [roundingMode] Rounding mode, integer, 0 to 8. - * @param [format] Formatting options object. See `BigNumber.Format`. - */ - toFormat(decimalPlaces: number, roundingMode: BigNumber.RoundingMode, format?: BigNumber.Format): string; - toFormat(decimalPlaces: number, roundingMode?: BigNumber.RoundingMode): string; - toFormat(decimalPlaces?: number): string; - toFormat(decimalPlaces: number, format: BigNumber.Format): string; - toFormat(format: BigNumber.Format): string; - - /** - * Returns an array of two BigNumbers representing the value of this BigNumber as a simple - * fraction with an integer numerator and an integer denominator. - * The denominator will be a positive non-zero value less than or equal to `max_denominator`. - * If a maximum denominator, `max_denominator`, is not specified, or is `null` or `undefined`, the - * denominator will be the lowest value necessary to represent the number exactly. - * - * Throws if `max_denominator` is invalid. - * - * ```ts - * x = new BigNumber(1.75) - * x.toFraction() // '7, 4' - * - * pi = new BigNumber('3.14159265358') - * pi.toFraction() // '157079632679,50000000000' - * pi.toFraction(100000) // '312689, 99532' - * pi.toFraction(10000) // '355, 113' - * pi.toFraction(100) // '311, 99' - * pi.toFraction(10) // '22, 7' - * pi.toFraction(1) // '3, 1' - * ``` - * - * @param [max_denominator] The maximum denominator, integer > 0, or Infinity. - */ - toFraction(max_denominator?: BigNumber.Value): [BigNumber, BigNumber]; - - /** As `valueOf`. */ - toJSON(): string; - - /** - * Returns the value of this BigNumber as a JavaScript primitive number. - * - * Using the unary plus operator gives the same result. - * - * ```ts - * x = new BigNumber(456.789) - * x.toNumber() // 456.789 - * +x // 456.789 - * - * y = new BigNumber('45987349857634085409857349856430985') - * y.toNumber() // 4.598734985763409e+34 - * - * z = new BigNumber(-0) - * 1 / z.toNumber() // -Infinity - * 1 / +z // -Infinity - * ``` - */ - toNumber(): number; - - /** - * Returns a string representing the value of this BigNumber rounded to `significantDigits` - * significant digits using rounding mode `roundingMode`. - * - * If `significantDigits` is less than the number of digits necessary to represent the integer - * part of the value in normal (fixed-point) notation, then exponential notation is used. - * - * If `significantDigits` is omitted, or is `null` or `undefined`, then the return value is the - * same as `n.toString()`. - * - * If `roundingMode` is omitted or is `null` or `undefined`, `ROUNDING_MODE` is used. - * - * Throws if `significantDigits` or `roundingMode` is invalid. - * - * ```ts - * x = 45.6 - * y = new BigNumber(x) - * x.toPrecision() // '45.6' - * y.toPrecision() // '45.6' - * x.toPrecision(1) // '5e+1' - * y.toPrecision(1) // '5e+1' - * y.toPrecision(2, 0) // '4.6e+1' (ROUND_UP) - * y.toPrecision(2, 1) // '4.5e+1' (ROUND_DOWN) - * x.toPrecision(5) // '45.600' - * y.toPrecision(5) // '45.600' - * ``` - * - * @param [significantDigits] Significant digits, integer, 1 to 1e+9. - * @param [roundingMode] Rounding mode, integer 0 to 8. - */ - toPrecision(significantDigits: number, roundingMode?: BigNumber.RoundingMode): string; - toPrecision(): string; - - /** - * Returns a string representing the value of this BigNumber in base `base`, or base 10 if `base` - * is omitted or is `null` or `undefined`. - * - * For bases above 10, and using the default base conversion alphabet (see `ALPHABET`), values - * from 10 to 35 are represented by a-z (the same as `Number.prototype.toString`). - * - * If a base is specified the value is rounded according to the current `DECIMAL_PLACES` and - * `ROUNDING_MODE` settings, otherwise it is not. - * - * If a base is not specified, and this BigNumber has a positive exponent that is equal to or - * greater than the positive component of the current `EXPONENTIAL_AT` setting, or a negative - * exponent equal to or less than the negative component of the setting, then exponential notation - * is returned. - * - * If `base` is `null` or `undefined` it is ignored. - * - * Throws if `base` is invalid. - * - * ```ts - * x = new BigNumber(750000) - * x.toString() // '750000' - * BigNumber.config({ EXPONENTIAL_AT: 5 }) - * x.toString() // '7.5e+5' - * - * y = new BigNumber(362.875) - * y.toString(2) // '101101010.111' - * y.toString(9) // '442.77777777777777777778' - * y.toString(32) // 'ba.s' - * - * BigNumber.config({ DECIMAL_PLACES: 4 }); - * z = new BigNumber('1.23456789') - * z.toString() // '1.23456789' - * z.toString(10) // '1.2346' - * ``` - * - * @param [base] The base, integer, 2 to 36 (or `ALPHABET.length`, see `ALPHABET`). - */ - toString(base?: number): string; - - /** - * As `toString`, but does not accept a base argument and includes the minus sign for negative - * zero. - * - * ``ts - * x = new BigNumber('-0') - * x.toString() // '0' - * x.valueOf() // '-0' - * y = new BigNumber('1.777e+457') - * y.valueOf() // '1.777e+457' - * ``` - */ - valueOf(): string; - - /** Helps ES6 import. */ - private static readonly default?: BigNumber.Constructor; - - /** Helps ES6 import. */ - private static readonly BigNumber?: BigNumber.Constructor; - - /** Rounds away from zero. */ - static readonly ROUND_UP: 0; - - /** Rounds towards zero. */ - static readonly ROUND_DOWN: 1; - - /** Rounds towards Infinity. */ - static readonly ROUND_CEIL: 2; - - /** Rounds towards -Infinity. */ - static readonly ROUND_FLOOR: 3; - - /** Rounds towards nearest neighbour. If equidistant, rounds away from zero . */ - static readonly ROUND_HALF_UP: 4; - - /** Rounds towards nearest neighbour. If equidistant, rounds towards zero. */ - static readonly ROUND_HALF_DOWN: 5; - - /** Rounds towards nearest neighbour. If equidistant, rounds towards even neighbour. */ - static readonly ROUND_HALF_EVEN: 6; - - /** Rounds towards nearest neighbour. If equidistant, rounds towards Infinity. */ - static readonly ROUND_HALF_CEIL: 7; - - /** Rounds towards nearest neighbour. If equidistant, rounds towards -Infinity. */ - static readonly ROUND_HALF_FLOOR: 8; - - /** See `MODULO_MODE`. */ - static readonly EUCLID: 9; - - /** - * To aid in debugging, if a `BigNumber.DEBUG` property is `true` then an error will be thrown - * if the BigNumber constructor receives an invalid `BigNumber.Value`, or if `BigNumber.isBigNumber` - * receives a BigNumber instance that is malformed. - * - * ```ts - * // No error, and BigNumber NaN is returned. - * new BigNumber('blurgh') // 'NaN' - * new BigNumber(9, 2) // 'NaN' - * BigNumber.DEBUG = true - * new BigNumber('blurgh') // '[BigNumber Error] Not a number' - * new BigNumber(9, 2) // '[BigNumber Error] Not a base 2 number' - * ``` - * - * An error will also be thrown if a `BigNumber.Value` is of type number with more than 15 - * significant digits, as calling `toString` or `valueOf` on such numbers may not result - * in the intended value. - * - * ```ts - * console.log(823456789123456.3) // 823456789123456.2 - * // No error, and the returned BigNumber does not have the same value as the number literal. - * new BigNumber(823456789123456.3) // '823456789123456.2' - * BigNumber.DEBUG = true - * new BigNumber(823456789123456.3) - * // '[BigNumber Error] Number primitive has more than 15 significant digits' - * ``` - * - * Check that a BigNumber instance is well-formed: - * - * ```ts - * x = new BigNumber(10) - * - * BigNumber.DEBUG = false - * // Change x.c to an illegitimate value. - * x.c = NaN - * // No error, as BigNumber.DEBUG is false. - * BigNumber.isBigNumber(x) // true - * - * BigNumber.DEBUG = true - * BigNumber.isBigNumber(x) // '[BigNumber Error] Invalid BigNumber' - * ``` - */ - static DEBUG?: boolean; - - /** - * Returns a new independent BigNumber constructor with configuration as described by `object`, or - * with the default configuration if object is `null` or `undefined`. - * - * Throws if `object` is not an object. - * - * ```ts - * BigNumber.config({ DECIMAL_PLACES: 5 }) - * BN = BigNumber.clone({ DECIMAL_PLACES: 9 }) - * - * x = new BigNumber(1) - * y = new BN(1) - * - * x.div(3) // 0.33333 - * y.div(3) // 0.333333333 - * - * // BN = BigNumber.clone({ DECIMAL_PLACES: 9 }) is equivalent to: - * BN = BigNumber.clone() - * BN.config({ DECIMAL_PLACES: 9 }) - * ``` - * - * @param [object] The configuration object. - */ - static clone(object?: BigNumber.Config): BigNumber.Constructor; - - /** - * Configures the settings that apply to this BigNumber constructor. - * - * The configuration object, `object`, contains any number of the properties shown in the example - * below. - * - * Returns an object with the above properties and their current values. - * - * Throws if `object` is not an object, or if an invalid value is assigned to one or more of the - * properties. - * - * ```ts - * BigNumber.config({ - * DECIMAL_PLACES: 40, - * ROUNDING_MODE: BigNumber.ROUND_HALF_CEIL, - * EXPONENTIAL_AT: [-10, 20], - * RANGE: [-500, 500], - * CRYPTO: true, - * MODULO_MODE: BigNumber.ROUND_FLOOR, - * POW_PRECISION: 80, - * FORMAT: { - * groupSize: 3, - * groupSeparator: ' ', - * decimalSeparator: ',' - * }, - * ALPHABET: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_' - * }); - * - * BigNumber.config().DECIMAL_PLACES // 40 - * ``` - * - * @param object The configuration object. - */ - static config(object: BigNumber.Config): BigNumber.Config; - - /** - * Returns `true` if `value` is a BigNumber instance, otherwise returns `false`. - * - * If `BigNumber.DEBUG` is `true`, throws if a BigNumber instance is not well-formed. - * - * ```ts - * x = 42 - * y = new BigNumber(x) - * - * BigNumber.isBigNumber(x) // false - * y instanceof BigNumber // true - * BigNumber.isBigNumber(y) // true - * - * BN = BigNumber.clone(); - * z = new BN(x) - * z instanceof BigNumber // false - * BigNumber.isBigNumber(z) // true - * ``` - * - * @param value The value to test. - */ - static isBigNumber(value: any): value is BigNumber; - - /** - * Returns a BigNumber whose value is the maximum of the arguments. - * - * The return value is always exact and unrounded. - * - * ```ts - * x = new BigNumber('3257869345.0378653') - * BigNumber.maximum(4e9, x, '123456789.9') // '4000000000' - * - * arr = [12, '13', new BigNumber(14)] - * BigNumber.maximum.apply(null, arr) // '14' - * ``` - * - * @param n A numeric value. - */ - static maximum(...n: BigNumber.Value[]): BigNumber; - - /** - * Returns a BigNumber whose value is the maximum of the arguments. - * - * The return value is always exact and unrounded. - * - * ```ts - * x = new BigNumber('3257869345.0378653') - * BigNumber.max(4e9, x, '123456789.9') // '4000000000' - * - * arr = [12, '13', new BigNumber(14)] - * BigNumber.max.apply(null, arr) // '14' - * ``` - * - * @param n A numeric value. - */ - static max(...n: BigNumber.Value[]): BigNumber; - - /** - * Returns a BigNumber whose value is the minimum of the arguments. - * - * The return value is always exact and unrounded. - * - * ```ts - * x = new BigNumber('3257869345.0378653') - * BigNumber.minimum(4e9, x, '123456789.9') // '123456789.9' - * - * arr = [2, new BigNumber(-14), '-15.9999', -12] - * BigNumber.minimum.apply(null, arr) // '-15.9999' - * ``` - * - * @param n A numeric value. - */ - static minimum(...n: BigNumber.Value[]): BigNumber; - - /** - * Returns a BigNumber whose value is the minimum of the arguments. - * - * The return value is always exact and unrounded. - * - * ```ts - * x = new BigNumber('3257869345.0378653') - * BigNumber.min(4e9, x, '123456789.9') // '123456789.9' - * - * arr = [2, new BigNumber(-14), '-15.9999', -12] - * BigNumber.min.apply(null, arr) // '-15.9999' - * ``` - * - * @param n A numeric value. - */ - static min(...n: BigNumber.Value[]): BigNumber; - - /** - * Returns a new BigNumber with a pseudo-random value equal to or greater than 0 and less than 1. - * - * The return value will have `decimalPlaces` decimal places, or less if trailing zeros are - * produced. If `decimalPlaces` is omitted, the current `DECIMAL_PLACES` setting will be used. - * - * Depending on the value of this BigNumber constructor's `CRYPTO` setting and the support for the - * `crypto` object in the host environment, the random digits of the return value are generated by - * either `Math.random` (fastest), `crypto.getRandomValues` (Web Cryptography API in recent - * browsers) or `crypto.randomBytes` (Node.js). - * - * To be able to set `CRYPTO` to true when using Node.js, the `crypto` object must be available - * globally: - * - * ```ts - * global.crypto = require('crypto') - * ``` - * - * If `CRYPTO` is true, i.e. one of the `crypto` methods is to be used, the value of a returned - * BigNumber should be cryptographically secure and statistically indistinguishable from a random - * value. - * - * Throws if `decimalPlaces` is invalid. - * - * ```ts - * BigNumber.config({ DECIMAL_PLACES: 10 }) - * BigNumber.random() // '0.4117936847' - * BigNumber.random(20) // '0.78193327636914089009' - * ``` - * - * @param [decimalPlaces] Decimal places, integer, 0 to 1e+9. - */ - static random(decimalPlaces?: number): BigNumber; - - /** - * Returns a BigNumber whose value is the sum of the arguments. - * - * The return value is always exact and unrounded. - * - * ```ts - * x = new BigNumber('3257869345.0378653') - * BigNumber.sum(4e9, x, '123456789.9') // '7381326134.9378653' - * - * arr = [2, new BigNumber(14), '15.9999', 12] - * BigNumber.sum.apply(null, arr) // '43.9999' - * ``` - * - * @param n A numeric value. - */ - static sum(...n: BigNumber.Value[]): BigNumber; - - /** - * Configures the settings that apply to this BigNumber constructor. - * - * The configuration object, `object`, contains any number of the properties shown in the example - * below. - * - * Returns an object with the above properties and their current values. - * - * Throws if `object` is not an object, or if an invalid value is assigned to one or more of the - * properties. - * - * ```ts - * BigNumber.set({ - * DECIMAL_PLACES: 40, - * ROUNDING_MODE: BigNumber.ROUND_HALF_CEIL, - * EXPONENTIAL_AT: [-10, 20], - * RANGE: [-500, 500], - * CRYPTO: true, - * MODULO_MODE: BigNumber.ROUND_FLOOR, - * POW_PRECISION: 80, - * FORMAT: { - * groupSize: 3, - * groupSeparator: ' ', - * decimalSeparator: ',' - * }, - * ALPHABET: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_' - * }); - * - * BigNumber.set().DECIMAL_PLACES // 40 - * ``` - * - * @param object The configuration object. - */ - static set(object: BigNumber.Config): BigNumber.Config; -} diff --git a/reverse_engineering/node_modules/bignumber.js/bignumber.js b/reverse_engineering/node_modules/bignumber.js/bignumber.js deleted file mode 100644 index 846772d..0000000 --- a/reverse_engineering/node_modules/bignumber.js/bignumber.js +++ /dev/null @@ -1,2902 +0,0 @@ -;(function (globalObject) { - 'use strict'; - -/* - * bignumber.js v9.0.1 - * A JavaScript library for arbitrary-precision arithmetic. - * https://github.com/MikeMcl/bignumber.js - * Copyright (c) 2020 Michael Mclaughlin - * MIT Licensed. - * - * BigNumber.prototype methods | BigNumber methods - * | - * absoluteValue abs | clone - * comparedTo | config set - * decimalPlaces dp | DECIMAL_PLACES - * dividedBy div | ROUNDING_MODE - * dividedToIntegerBy idiv | EXPONENTIAL_AT - * exponentiatedBy pow | RANGE - * integerValue | CRYPTO - * isEqualTo eq | MODULO_MODE - * isFinite | POW_PRECISION - * isGreaterThan gt | FORMAT - * isGreaterThanOrEqualTo gte | ALPHABET - * isInteger | isBigNumber - * isLessThan lt | maximum max - * isLessThanOrEqualTo lte | minimum min - * isNaN | random - * isNegative | sum - * isPositive | - * isZero | - * minus | - * modulo mod | - * multipliedBy times | - * negated | - * plus | - * precision sd | - * shiftedBy | - * squareRoot sqrt | - * toExponential | - * toFixed | - * toFormat | - * toFraction | - * toJSON | - * toNumber | - * toPrecision | - * toString | - * valueOf | - * - */ - - - var BigNumber, - isNumeric = /^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i, - mathceil = Math.ceil, - mathfloor = Math.floor, - - bignumberError = '[BigNumber Error] ', - tooManyDigits = bignumberError + 'Number primitive has more than 15 significant digits: ', - - BASE = 1e14, - LOG_BASE = 14, - MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1 - // MAX_INT32 = 0x7fffffff, // 2^31 - 1 - POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13], - SQRT_BASE = 1e7, - - // EDITABLE - // The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and - // the arguments to toExponential, toFixed, toFormat, and toPrecision. - MAX = 1E9; // 0 to MAX_INT32 - - - /* - * Create and return a BigNumber constructor. - */ - function clone(configObject) { - var div, convertBase, parseNumeric, - P = BigNumber.prototype = { constructor: BigNumber, toString: null, valueOf: null }, - ONE = new BigNumber(1), - - - //----------------------------- EDITABLE CONFIG DEFAULTS ------------------------------- - - - // The default values below must be integers within the inclusive ranges stated. - // The values can also be changed at run-time using BigNumber.set. - - // The maximum number of decimal places for operations involving division. - DECIMAL_PLACES = 20, // 0 to MAX - - // The rounding mode used when rounding to the above decimal places, and when using - // toExponential, toFixed, toFormat and toPrecision, and round (default value). - // UP 0 Away from zero. - // DOWN 1 Towards zero. - // CEIL 2 Towards +Infinity. - // FLOOR 3 Towards -Infinity. - // HALF_UP 4 Towards nearest neighbour. If equidistant, up. - // HALF_DOWN 5 Towards nearest neighbour. If equidistant, down. - // HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour. - // HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity. - // HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity. - ROUNDING_MODE = 4, // 0 to 8 - - // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS] - - // The exponent value at and beneath which toString returns exponential notation. - // Number type: -7 - TO_EXP_NEG = -7, // 0 to -MAX - - // The exponent value at and above which toString returns exponential notation. - // Number type: 21 - TO_EXP_POS = 21, // 0 to MAX - - // RANGE : [MIN_EXP, MAX_EXP] - - // The minimum exponent value, beneath which underflow to zero occurs. - // Number type: -324 (5e-324) - MIN_EXP = -1e7, // -1 to -MAX - - // The maximum exponent value, above which overflow to Infinity occurs. - // Number type: 308 (1.7976931348623157e+308) - // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow. - MAX_EXP = 1e7, // 1 to MAX - - // Whether to use cryptographically-secure random number generation, if available. - CRYPTO = false, // true or false - - // The modulo mode used when calculating the modulus: a mod n. - // The quotient (q = a / n) is calculated according to the corresponding rounding mode. - // The remainder (r) is calculated as: r = a - n * q. - // - // UP 0 The remainder is positive if the dividend is negative, else is negative. - // DOWN 1 The remainder has the same sign as the dividend. - // This modulo mode is commonly known as 'truncated division' and is - // equivalent to (a % n) in JavaScript. - // FLOOR 3 The remainder has the same sign as the divisor (Python %). - // HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function. - // EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)). - // The remainder is always positive. - // - // The truncated division, floored division, Euclidian division and IEEE 754 remainder - // modes are commonly used for the modulus operation. - // Although the other rounding modes can also be used, they may not give useful results. - MODULO_MODE = 1, // 0 to 9 - - // The maximum number of significant digits of the result of the exponentiatedBy operation. - // If POW_PRECISION is 0, there will be unlimited significant digits. - POW_PRECISION = 0, // 0 to MAX - - // The format specification used by the BigNumber.prototype.toFormat method. - FORMAT = { - prefix: '', - groupSize: 3, - secondaryGroupSize: 0, - groupSeparator: ',', - decimalSeparator: '.', - fractionGroupSize: 0, - fractionGroupSeparator: '\xA0', // non-breaking space - suffix: '' - }, - - // The alphabet used for base conversion. It must be at least 2 characters long, with no '+', - // '-', '.', whitespace, or repeated character. - // '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_' - ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz'; - - - //------------------------------------------------------------------------------------------ - - - // CONSTRUCTOR - - - /* - * The BigNumber constructor and exported function. - * Create and return a new instance of a BigNumber object. - * - * v {number|string|BigNumber} A numeric value. - * [b] {number} The base of v. Integer, 2 to ALPHABET.length inclusive. - */ - function BigNumber(v, b) { - var alphabet, c, caseChanged, e, i, isNum, len, str, - x = this; - - // Enable constructor call without `new`. - if (!(x instanceof BigNumber)) return new BigNumber(v, b); - - if (b == null) { - - if (v && v._isBigNumber === true) { - x.s = v.s; - - if (!v.c || v.e > MAX_EXP) { - x.c = x.e = null; - } else if (v.e < MIN_EXP) { - x.c = [x.e = 0]; - } else { - x.e = v.e; - x.c = v.c.slice(); - } - - return; - } - - if ((isNum = typeof v == 'number') && v * 0 == 0) { - - // Use `1 / n` to handle minus zero also. - x.s = 1 / v < 0 ? (v = -v, -1) : 1; - - // Fast path for integers, where n < 2147483648 (2**31). - if (v === ~~v) { - for (e = 0, i = v; i >= 10; i /= 10, e++); - - if (e > MAX_EXP) { - x.c = x.e = null; - } else { - x.e = e; - x.c = [v]; - } - - return; - } - - str = String(v); - } else { - - if (!isNumeric.test(str = String(v))) return parseNumeric(x, str, isNum); - - x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1; - } - - // Decimal point? - if ((e = str.indexOf('.')) > -1) str = str.replace('.', ''); - - // Exponential form? - if ((i = str.search(/e/i)) > 0) { - - // Determine exponent. - if (e < 0) e = i; - e += +str.slice(i + 1); - str = str.substring(0, i); - } else if (e < 0) { - - // Integer. - e = str.length; - } - - } else { - - // '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}' - intCheck(b, 2, ALPHABET.length, 'Base'); - - // Allow exponential notation to be used with base 10 argument, while - // also rounding to DECIMAL_PLACES as with other bases. - if (b == 10) { - x = new BigNumber(v); - return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE); - } - - str = String(v); - - if (isNum = typeof v == 'number') { - - // Avoid potential interpretation of Infinity and NaN as base 44+ values. - if (v * 0 != 0) return parseNumeric(x, str, isNum, b); - - x.s = 1 / v < 0 ? (str = str.slice(1), -1) : 1; - - // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}' - if (BigNumber.DEBUG && str.replace(/^0\.0*|\./, '').length > 15) { - throw Error - (tooManyDigits + v); - } - } else { - x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1; - } - - alphabet = ALPHABET.slice(0, b); - e = i = 0; - - // Check that str is a valid base b number. - // Don't use RegExp, so alphabet can contain special characters. - for (len = str.length; i < len; i++) { - if (alphabet.indexOf(c = str.charAt(i)) < 0) { - if (c == '.') { - - // If '.' is not the first character and it has not be found before. - if (i > e) { - e = len; - continue; - } - } else if (!caseChanged) { - - // Allow e.g. hexadecimal 'FF' as well as 'ff'. - if (str == str.toUpperCase() && (str = str.toLowerCase()) || - str == str.toLowerCase() && (str = str.toUpperCase())) { - caseChanged = true; - i = -1; - e = 0; - continue; - } - } - - return parseNumeric(x, String(v), isNum, b); - } - } - - // Prevent later check for length on converted number. - isNum = false; - str = convertBase(str, b, 10, x.s); - - // Decimal point? - if ((e = str.indexOf('.')) > -1) str = str.replace('.', ''); - else e = str.length; - } - - // Determine leading zeros. - for (i = 0; str.charCodeAt(i) === 48; i++); - - // Determine trailing zeros. - for (len = str.length; str.charCodeAt(--len) === 48;); - - if (str = str.slice(i, ++len)) { - len -= i; - - // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}' - if (isNum && BigNumber.DEBUG && - len > 15 && (v > MAX_SAFE_INTEGER || v !== mathfloor(v))) { - throw Error - (tooManyDigits + (x.s * v)); - } - - // Overflow? - if ((e = e - i - 1) > MAX_EXP) { - - // Infinity. - x.c = x.e = null; - - // Underflow? - } else if (e < MIN_EXP) { - - // Zero. - x.c = [x.e = 0]; - } else { - x.e = e; - x.c = []; - - // Transform base - - // e is the base 10 exponent. - // i is where to slice str to get the first element of the coefficient array. - i = (e + 1) % LOG_BASE; - if (e < 0) i += LOG_BASE; // i < 1 - - if (i < len) { - if (i) x.c.push(+str.slice(0, i)); - - for (len -= LOG_BASE; i < len;) { - x.c.push(+str.slice(i, i += LOG_BASE)); - } - - i = LOG_BASE - (str = str.slice(i)).length; - } else { - i -= len; - } - - for (; i--; str += '0'); - x.c.push(+str); - } - } else { - - // Zero. - x.c = [x.e = 0]; - } - } - - - // CONSTRUCTOR PROPERTIES - - - BigNumber.clone = clone; - - BigNumber.ROUND_UP = 0; - BigNumber.ROUND_DOWN = 1; - BigNumber.ROUND_CEIL = 2; - BigNumber.ROUND_FLOOR = 3; - BigNumber.ROUND_HALF_UP = 4; - BigNumber.ROUND_HALF_DOWN = 5; - BigNumber.ROUND_HALF_EVEN = 6; - BigNumber.ROUND_HALF_CEIL = 7; - BigNumber.ROUND_HALF_FLOOR = 8; - BigNumber.EUCLID = 9; - - - /* - * Configure infrequently-changing library-wide settings. - * - * Accept an object with the following optional properties (if the value of a property is - * a number, it must be an integer within the inclusive range stated): - * - * DECIMAL_PLACES {number} 0 to MAX - * ROUNDING_MODE {number} 0 to 8 - * EXPONENTIAL_AT {number|number[]} -MAX to MAX or [-MAX to 0, 0 to MAX] - * RANGE {number|number[]} -MAX to MAX (not zero) or [-MAX to -1, 1 to MAX] - * CRYPTO {boolean} true or false - * MODULO_MODE {number} 0 to 9 - * POW_PRECISION {number} 0 to MAX - * ALPHABET {string} A string of two or more unique characters which does - * not contain '.'. - * FORMAT {object} An object with some of the following properties: - * prefix {string} - * groupSize {number} - * secondaryGroupSize {number} - * groupSeparator {string} - * decimalSeparator {string} - * fractionGroupSize {number} - * fractionGroupSeparator {string} - * suffix {string} - * - * (The values assigned to the above FORMAT object properties are not checked for validity.) - * - * E.g. - * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 }) - * - * Ignore properties/parameters set to null or undefined, except for ALPHABET. - * - * Return an object with the properties current values. - */ - BigNumber.config = BigNumber.set = function (obj) { - var p, v; - - if (obj != null) { - - if (typeof obj == 'object') { - - // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive. - // '[BigNumber Error] DECIMAL_PLACES {not a primitive number|not an integer|out of range}: {v}' - if (obj.hasOwnProperty(p = 'DECIMAL_PLACES')) { - v = obj[p]; - intCheck(v, 0, MAX, p); - DECIMAL_PLACES = v; - } - - // ROUNDING_MODE {number} Integer, 0 to 8 inclusive. - // '[BigNumber Error] ROUNDING_MODE {not a primitive number|not an integer|out of range}: {v}' - if (obj.hasOwnProperty(p = 'ROUNDING_MODE')) { - v = obj[p]; - intCheck(v, 0, 8, p); - ROUNDING_MODE = v; - } - - // EXPONENTIAL_AT {number|number[]} - // Integer, -MAX to MAX inclusive or - // [integer -MAX to 0 inclusive, 0 to MAX inclusive]. - // '[BigNumber Error] EXPONENTIAL_AT {not a primitive number|not an integer|out of range}: {v}' - if (obj.hasOwnProperty(p = 'EXPONENTIAL_AT')) { - v = obj[p]; - if (v && v.pop) { - intCheck(v[0], -MAX, 0, p); - intCheck(v[1], 0, MAX, p); - TO_EXP_NEG = v[0]; - TO_EXP_POS = v[1]; - } else { - intCheck(v, -MAX, MAX, p); - TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v); - } - } - - // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or - // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive]. - // '[BigNumber Error] RANGE {not a primitive number|not an integer|out of range|cannot be zero}: {v}' - if (obj.hasOwnProperty(p = 'RANGE')) { - v = obj[p]; - if (v && v.pop) { - intCheck(v[0], -MAX, -1, p); - intCheck(v[1], 1, MAX, p); - MIN_EXP = v[0]; - MAX_EXP = v[1]; - } else { - intCheck(v, -MAX, MAX, p); - if (v) { - MIN_EXP = -(MAX_EXP = v < 0 ? -v : v); - } else { - throw Error - (bignumberError + p + ' cannot be zero: ' + v); - } - } - } - - // CRYPTO {boolean} true or false. - // '[BigNumber Error] CRYPTO not true or false: {v}' - // '[BigNumber Error] crypto unavailable' - if (obj.hasOwnProperty(p = 'CRYPTO')) { - v = obj[p]; - if (v === !!v) { - if (v) { - if (typeof crypto != 'undefined' && crypto && - (crypto.getRandomValues || crypto.randomBytes)) { - CRYPTO = v; - } else { - CRYPTO = !v; - throw Error - (bignumberError + 'crypto unavailable'); - } - } else { - CRYPTO = v; - } - } else { - throw Error - (bignumberError + p + ' not true or false: ' + v); - } - } - - // MODULO_MODE {number} Integer, 0 to 9 inclusive. - // '[BigNumber Error] MODULO_MODE {not a primitive number|not an integer|out of range}: {v}' - if (obj.hasOwnProperty(p = 'MODULO_MODE')) { - v = obj[p]; - intCheck(v, 0, 9, p); - MODULO_MODE = v; - } - - // POW_PRECISION {number} Integer, 0 to MAX inclusive. - // '[BigNumber Error] POW_PRECISION {not a primitive number|not an integer|out of range}: {v}' - if (obj.hasOwnProperty(p = 'POW_PRECISION')) { - v = obj[p]; - intCheck(v, 0, MAX, p); - POW_PRECISION = v; - } - - // FORMAT {object} - // '[BigNumber Error] FORMAT not an object: {v}' - if (obj.hasOwnProperty(p = 'FORMAT')) { - v = obj[p]; - if (typeof v == 'object') FORMAT = v; - else throw Error - (bignumberError + p + ' not an object: ' + v); - } - - // ALPHABET {string} - // '[BigNumber Error] ALPHABET invalid: {v}' - if (obj.hasOwnProperty(p = 'ALPHABET')) { - v = obj[p]; - - // Disallow if less than two characters, - // or if it contains '+', '-', '.', whitespace, or a repeated character. - if (typeof v == 'string' && !/^.?$|[+\-.\s]|(.).*\1/.test(v)) { - ALPHABET = v; - } else { - throw Error - (bignumberError + p + ' invalid: ' + v); - } - } - - } else { - - // '[BigNumber Error] Object expected: {v}' - throw Error - (bignumberError + 'Object expected: ' + obj); - } - } - - return { - DECIMAL_PLACES: DECIMAL_PLACES, - ROUNDING_MODE: ROUNDING_MODE, - EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS], - RANGE: [MIN_EXP, MAX_EXP], - CRYPTO: CRYPTO, - MODULO_MODE: MODULO_MODE, - POW_PRECISION: POW_PRECISION, - FORMAT: FORMAT, - ALPHABET: ALPHABET - }; - }; - - - /* - * Return true if v is a BigNumber instance, otherwise return false. - * - * If BigNumber.DEBUG is true, throw if a BigNumber instance is not well-formed. - * - * v {any} - * - * '[BigNumber Error] Invalid BigNumber: {v}' - */ - BigNumber.isBigNumber = function (v) { - if (!v || v._isBigNumber !== true) return false; - if (!BigNumber.DEBUG) return true; - - var i, n, - c = v.c, - e = v.e, - s = v.s; - - out: if ({}.toString.call(c) == '[object Array]') { - - if ((s === 1 || s === -1) && e >= -MAX && e <= MAX && e === mathfloor(e)) { - - // If the first element is zero, the BigNumber value must be zero. - if (c[0] === 0) { - if (e === 0 && c.length === 1) return true; - break out; - } - - // Calculate number of digits that c[0] should have, based on the exponent. - i = (e + 1) % LOG_BASE; - if (i < 1) i += LOG_BASE; - - // Calculate number of digits of c[0]. - //if (Math.ceil(Math.log(c[0] + 1) / Math.LN10) == i) { - if (String(c[0]).length == i) { - - for (i = 0; i < c.length; i++) { - n = c[i]; - if (n < 0 || n >= BASE || n !== mathfloor(n)) break out; - } - - // Last element cannot be zero, unless it is the only element. - if (n !== 0) return true; - } - } - - // Infinity/NaN - } else if (c === null && e === null && (s === null || s === 1 || s === -1)) { - return true; - } - - throw Error - (bignumberError + 'Invalid BigNumber: ' + v); - }; - - - /* - * Return a new BigNumber whose value is the maximum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.maximum = BigNumber.max = function () { - return maxOrMin(arguments, P.lt); - }; - - - /* - * Return a new BigNumber whose value is the minimum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.minimum = BigNumber.min = function () { - return maxOrMin(arguments, P.gt); - }; - - - /* - * Return a new BigNumber with a random value equal to or greater than 0 and less than 1, - * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing - * zeros are produced). - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * - * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp}' - * '[BigNumber Error] crypto unavailable' - */ - BigNumber.random = (function () { - var pow2_53 = 0x20000000000000; - - // Return a 53 bit integer n, where 0 <= n < 9007199254740992. - // Check if Math.random() produces more than 32 bits of randomness. - // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits. - // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1. - var random53bitInt = (Math.random() * pow2_53) & 0x1fffff - ? function () { return mathfloor(Math.random() * pow2_53); } - : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) + - (Math.random() * 0x800000 | 0); }; - - return function (dp) { - var a, b, e, k, v, - i = 0, - c = [], - rand = new BigNumber(ONE); - - if (dp == null) dp = DECIMAL_PLACES; - else intCheck(dp, 0, MAX); - - k = mathceil(dp / LOG_BASE); - - if (CRYPTO) { - - // Browsers supporting crypto.getRandomValues. - if (crypto.getRandomValues) { - - a = crypto.getRandomValues(new Uint32Array(k *= 2)); - - for (; i < k;) { - - // 53 bits: - // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2) - // 11111 11111111 11111111 11111111 11100000 00000000 00000000 - // ((Math.pow(2, 32) - 1) >>> 11).toString(2) - // 11111 11111111 11111111 - // 0x20000 is 2^21. - v = a[i] * 0x20000 + (a[i + 1] >>> 11); - - // Rejection sampling: - // 0 <= v < 9007199254740992 - // Probability that v >= 9e15, is - // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251 - if (v >= 9e15) { - b = crypto.getRandomValues(new Uint32Array(2)); - a[i] = b[0]; - a[i + 1] = b[1]; - } else { - - // 0 <= v <= 8999999999999999 - // 0 <= (v % 1e14) <= 99999999999999 - c.push(v % 1e14); - i += 2; - } - } - i = k / 2; - - // Node.js supporting crypto.randomBytes. - } else if (crypto.randomBytes) { - - // buffer - a = crypto.randomBytes(k *= 7); - - for (; i < k;) { - - // 0x1000000000000 is 2^48, 0x10000000000 is 2^40 - // 0x100000000 is 2^32, 0x1000000 is 2^24 - // 11111 11111111 11111111 11111111 11111111 11111111 11111111 - // 0 <= v < 9007199254740992 - v = ((a[i] & 31) * 0x1000000000000) + (a[i + 1] * 0x10000000000) + - (a[i + 2] * 0x100000000) + (a[i + 3] * 0x1000000) + - (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6]; - - if (v >= 9e15) { - crypto.randomBytes(7).copy(a, i); - } else { - - // 0 <= (v % 1e14) <= 99999999999999 - c.push(v % 1e14); - i += 7; - } - } - i = k / 7; - } else { - CRYPTO = false; - throw Error - (bignumberError + 'crypto unavailable'); - } - } - - // Use Math.random. - if (!CRYPTO) { - - for (; i < k;) { - v = random53bitInt(); - if (v < 9e15) c[i++] = v % 1e14; - } - } - - k = c[--i]; - dp %= LOG_BASE; - - // Convert trailing digits to zeros according to dp. - if (k && dp) { - v = POWS_TEN[LOG_BASE - dp]; - c[i] = mathfloor(k / v) * v; - } - - // Remove trailing elements which are zero. - for (; c[i] === 0; c.pop(), i--); - - // Zero? - if (i < 0) { - c = [e = 0]; - } else { - - // Remove leading elements which are zero and adjust exponent accordingly. - for (e = -1 ; c[0] === 0; c.splice(0, 1), e -= LOG_BASE); - - // Count the digits of the first element of c to determine leading zeros, and... - for (i = 1, v = c[0]; v >= 10; v /= 10, i++); - - // adjust the exponent accordingly. - if (i < LOG_BASE) e -= LOG_BASE - i; - } - - rand.e = e; - rand.c = c; - return rand; - }; - })(); - - - /* - * Return a BigNumber whose value is the sum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.sum = function () { - var i = 1, - args = arguments, - sum = new BigNumber(args[0]); - for (; i < args.length;) sum = sum.plus(args[i++]); - return sum; - }; - - - // PRIVATE FUNCTIONS - - - // Called by BigNumber and BigNumber.prototype.toString. - convertBase = (function () { - var decimal = '0123456789'; - - /* - * Convert string of baseIn to an array of numbers of baseOut. - * Eg. toBaseOut('255', 10, 16) returns [15, 15]. - * Eg. toBaseOut('ff', 16, 10) returns [2, 5, 5]. - */ - function toBaseOut(str, baseIn, baseOut, alphabet) { - var j, - arr = [0], - arrL, - i = 0, - len = str.length; - - for (; i < len;) { - for (arrL = arr.length; arrL--; arr[arrL] *= baseIn); - - arr[0] += alphabet.indexOf(str.charAt(i++)); - - for (j = 0; j < arr.length; j++) { - - if (arr[j] > baseOut - 1) { - if (arr[j + 1] == null) arr[j + 1] = 0; - arr[j + 1] += arr[j] / baseOut | 0; - arr[j] %= baseOut; - } - } - } - - return arr.reverse(); - } - - // Convert a numeric string of baseIn to a numeric string of baseOut. - // If the caller is toString, we are converting from base 10 to baseOut. - // If the caller is BigNumber, we are converting from baseIn to base 10. - return function (str, baseIn, baseOut, sign, callerIsToString) { - var alphabet, d, e, k, r, x, xc, y, - i = str.indexOf('.'), - dp = DECIMAL_PLACES, - rm = ROUNDING_MODE; - - // Non-integer. - if (i >= 0) { - k = POW_PRECISION; - - // Unlimited precision. - POW_PRECISION = 0; - str = str.replace('.', ''); - y = new BigNumber(baseIn); - x = y.pow(str.length - i); - POW_PRECISION = k; - - // Convert str as if an integer, then restore the fraction part by dividing the - // result by its base raised to a power. - - y.c = toBaseOut(toFixedPoint(coeffToString(x.c), x.e, '0'), - 10, baseOut, decimal); - y.e = y.c.length; - } - - // Convert the number as integer. - - xc = toBaseOut(str, baseIn, baseOut, callerIsToString - ? (alphabet = ALPHABET, decimal) - : (alphabet = decimal, ALPHABET)); - - // xc now represents str as an integer and converted to baseOut. e is the exponent. - e = k = xc.length; - - // Remove trailing zeros. - for (; xc[--k] == 0; xc.pop()); - - // Zero? - if (!xc[0]) return alphabet.charAt(0); - - // Does str represent an integer? If so, no need for the division. - if (i < 0) { - --e; - } else { - x.c = xc; - x.e = e; - - // The sign is needed for correct rounding. - x.s = sign; - x = div(x, y, dp, rm, baseOut); - xc = x.c; - r = x.r; - e = x.e; - } - - // xc now represents str converted to baseOut. - - // THe index of the rounding digit. - d = e + dp + 1; - - // The rounding digit: the digit to the right of the digit that may be rounded up. - i = xc[d]; - - // Look at the rounding digits and mode to determine whether to round up. - - k = baseOut / 2; - r = r || d < 0 || xc[d + 1] != null; - - r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2)) - : i > k || i == k &&(rm == 4 || r || rm == 6 && xc[d - 1] & 1 || - rm == (x.s < 0 ? 8 : 7)); - - // If the index of the rounding digit is not greater than zero, or xc represents - // zero, then the result of the base conversion is zero or, if rounding up, a value - // such as 0.00001. - if (d < 1 || !xc[0]) { - - // 1^-dp or 0 - str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0); - } else { - - // Truncate xc to the required number of decimal places. - xc.length = d; - - // Round up? - if (r) { - - // Rounding up may mean the previous digit has to be rounded up and so on. - for (--baseOut; ++xc[--d] > baseOut;) { - xc[d] = 0; - - if (!d) { - ++e; - xc = [1].concat(xc); - } - } - } - - // Determine trailing zeros. - for (k = xc.length; !xc[--k];); - - // E.g. [4, 11, 15] becomes 4bf. - for (i = 0, str = ''; i <= k; str += alphabet.charAt(xc[i++])); - - // Add leading zeros, decimal point and trailing zeros as required. - str = toFixedPoint(str, e, alphabet.charAt(0)); - } - - // The caller will add the sign. - return str; - }; - })(); - - - // Perform division in the specified base. Called by div and convertBase. - div = (function () { - - // Assume non-zero x and k. - function multiply(x, k, base) { - var m, temp, xlo, xhi, - carry = 0, - i = x.length, - klo = k % SQRT_BASE, - khi = k / SQRT_BASE | 0; - - for (x = x.slice(); i--;) { - xlo = x[i] % SQRT_BASE; - xhi = x[i] / SQRT_BASE | 0; - m = khi * xlo + xhi * klo; - temp = klo * xlo + ((m % SQRT_BASE) * SQRT_BASE) + carry; - carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi; - x[i] = temp % base; - } - - if (carry) x = [carry].concat(x); - - return x; - } - - function compare(a, b, aL, bL) { - var i, cmp; - - if (aL != bL) { - cmp = aL > bL ? 1 : -1; - } else { - - for (i = cmp = 0; i < aL; i++) { - - if (a[i] != b[i]) { - cmp = a[i] > b[i] ? 1 : -1; - break; - } - } - } - - return cmp; - } - - function subtract(a, b, aL, base) { - var i = 0; - - // Subtract b from a. - for (; aL--;) { - a[aL] -= i; - i = a[aL] < b[aL] ? 1 : 0; - a[aL] = i * base + a[aL] - b[aL]; - } - - // Remove leading zeros. - for (; !a[0] && a.length > 1; a.splice(0, 1)); - } - - // x: dividend, y: divisor. - return function (x, y, dp, rm, base) { - var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0, - yL, yz, - s = x.s == y.s ? 1 : -1, - xc = x.c, - yc = y.c; - - // Either NaN, Infinity or 0? - if (!xc || !xc[0] || !yc || !yc[0]) { - - return new BigNumber( - - // Return NaN if either NaN, or both Infinity or 0. - !x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN : - - // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0. - xc && xc[0] == 0 || !yc ? s * 0 : s / 0 - ); - } - - q = new BigNumber(s); - qc = q.c = []; - e = x.e - y.e; - s = dp + e + 1; - - if (!base) { - base = BASE; - e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE); - s = s / LOG_BASE | 0; - } - - // Result exponent may be one less then the current value of e. - // The coefficients of the BigNumbers from convertBase may have trailing zeros. - for (i = 0; yc[i] == (xc[i] || 0); i++); - - if (yc[i] > (xc[i] || 0)) e--; - - if (s < 0) { - qc.push(1); - more = true; - } else { - xL = xc.length; - yL = yc.length; - i = 0; - s += 2; - - // Normalise xc and yc so highest order digit of yc is >= base / 2. - - n = mathfloor(base / (yc[0] + 1)); - - // Not necessary, but to handle odd bases where yc[0] == (base / 2) - 1. - // if (n > 1 || n++ == 1 && yc[0] < base / 2) { - if (n > 1) { - yc = multiply(yc, n, base); - xc = multiply(xc, n, base); - yL = yc.length; - xL = xc.length; - } - - xi = yL; - rem = xc.slice(0, yL); - remL = rem.length; - - // Add zeros to make remainder as long as divisor. - for (; remL < yL; rem[remL++] = 0); - yz = yc.slice(); - yz = [0].concat(yz); - yc0 = yc[0]; - if (yc[1] >= base / 2) yc0++; - // Not necessary, but to prevent trial digit n > base, when using base 3. - // else if (base == 3 && yc0 == 1) yc0 = 1 + 1e-15; - - do { - n = 0; - - // Compare divisor and remainder. - cmp = compare(yc, rem, yL, remL); - - // If divisor < remainder. - if (cmp < 0) { - - // Calculate trial digit, n. - - rem0 = rem[0]; - if (yL != remL) rem0 = rem0 * base + (rem[1] || 0); - - // n is how many times the divisor goes into the current remainder. - n = mathfloor(rem0 / yc0); - - // Algorithm: - // product = divisor multiplied by trial digit (n). - // Compare product and remainder. - // If product is greater than remainder: - // Subtract divisor from product, decrement trial digit. - // Subtract product from remainder. - // If product was less than remainder at the last compare: - // Compare new remainder and divisor. - // If remainder is greater than divisor: - // Subtract divisor from remainder, increment trial digit. - - if (n > 1) { - - // n may be > base only when base is 3. - if (n >= base) n = base - 1; - - // product = divisor * trial digit. - prod = multiply(yc, n, base); - prodL = prod.length; - remL = rem.length; - - // Compare product and remainder. - // If product > remainder then trial digit n too high. - // n is 1 too high about 5% of the time, and is not known to have - // ever been more than 1 too high. - while (compare(prod, rem, prodL, remL) == 1) { - n--; - - // Subtract divisor from product. - subtract(prod, yL < prodL ? yz : yc, prodL, base); - prodL = prod.length; - cmp = 1; - } - } else { - - // n is 0 or 1, cmp is -1. - // If n is 0, there is no need to compare yc and rem again below, - // so change cmp to 1 to avoid it. - // If n is 1, leave cmp as -1, so yc and rem are compared again. - if (n == 0) { - - // divisor < remainder, so n must be at least 1. - cmp = n = 1; - } - - // product = divisor - prod = yc.slice(); - prodL = prod.length; - } - - if (prodL < remL) prod = [0].concat(prod); - - // Subtract product from remainder. - subtract(rem, prod, remL, base); - remL = rem.length; - - // If product was < remainder. - if (cmp == -1) { - - // Compare divisor and new remainder. - // If divisor < new remainder, subtract divisor from remainder. - // Trial digit n too low. - // n is 1 too low about 5% of the time, and very rarely 2 too low. - while (compare(yc, rem, yL, remL) < 1) { - n++; - - // Subtract divisor from remainder. - subtract(rem, yL < remL ? yz : yc, remL, base); - remL = rem.length; - } - } - } else if (cmp === 0) { - n++; - rem = [0]; - } // else cmp === 1 and n will be 0 - - // Add the next digit, n, to the result array. - qc[i++] = n; - - // Update the remainder. - if (rem[0]) { - rem[remL++] = xc[xi] || 0; - } else { - rem = [xc[xi]]; - remL = 1; - } - } while ((xi++ < xL || rem[0] != null) && s--); - - more = rem[0] != null; - - // Leading zero? - if (!qc[0]) qc.splice(0, 1); - } - - if (base == BASE) { - - // To calculate q.e, first get the number of digits of qc[0]. - for (i = 1, s = qc[0]; s >= 10; s /= 10, i++); - - round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more); - - // Caller is convertBase. - } else { - q.e = e; - q.r = +more; - } - - return q; - }; - })(); - - - /* - * Return a string representing the value of BigNumber n in fixed-point or exponential - * notation rounded to the specified decimal places or significant digits. - * - * n: a BigNumber. - * i: the index of the last digit required (i.e. the digit that may be rounded up). - * rm: the rounding mode. - * id: 1 (toExponential) or 2 (toPrecision). - */ - function format(n, i, rm, id) { - var c0, e, ne, len, str; - - if (rm == null) rm = ROUNDING_MODE; - else intCheck(rm, 0, 8); - - if (!n.c) return n.toString(); - - c0 = n.c[0]; - ne = n.e; - - if (i == null) { - str = coeffToString(n.c); - str = id == 1 || id == 2 && (ne <= TO_EXP_NEG || ne >= TO_EXP_POS) - ? toExponential(str, ne) - : toFixedPoint(str, ne, '0'); - } else { - n = round(new BigNumber(n), i, rm); - - // n.e may have changed if the value was rounded up. - e = n.e; - - str = coeffToString(n.c); - len = str.length; - - // toPrecision returns exponential notation if the number of significant digits - // specified is less than the number of digits necessary to represent the integer - // part of the value in fixed-point notation. - - // Exponential notation. - if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) { - - // Append zeros? - for (; len < i; str += '0', len++); - str = toExponential(str, e); - - // Fixed-point notation. - } else { - i -= ne; - str = toFixedPoint(str, e, '0'); - - // Append zeros? - if (e + 1 > len) { - if (--i > 0) for (str += '.'; i--; str += '0'); - } else { - i += e - len; - if (i > 0) { - if (e + 1 == len) str += '.'; - for (; i--; str += '0'); - } - } - } - } - - return n.s < 0 && c0 ? '-' + str : str; - } - - - // Handle BigNumber.max and BigNumber.min. - function maxOrMin(args, method) { - var n, - i = 1, - m = new BigNumber(args[0]); - - for (; i < args.length; i++) { - n = new BigNumber(args[i]); - - // If any number is NaN, return NaN. - if (!n.s) { - m = n; - break; - } else if (method.call(m, n)) { - m = n; - } - } - - return m; - } - - - /* - * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP. - * Called by minus, plus and times. - */ - function normalise(n, c, e) { - var i = 1, - j = c.length; - - // Remove trailing zeros. - for (; !c[--j]; c.pop()); - - // Calculate the base 10 exponent. First get the number of digits of c[0]. - for (j = c[0]; j >= 10; j /= 10, i++); - - // Overflow? - if ((e = i + e * LOG_BASE - 1) > MAX_EXP) { - - // Infinity. - n.c = n.e = null; - - // Underflow? - } else if (e < MIN_EXP) { - - // Zero. - n.c = [n.e = 0]; - } else { - n.e = e; - n.c = c; - } - - return n; - } - - - // Handle values that fail the validity test in BigNumber. - parseNumeric = (function () { - var basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i, - dotAfter = /^([^.]+)\.$/, - dotBefore = /^\.([^.]+)$/, - isInfinityOrNaN = /^-?(Infinity|NaN)$/, - whitespaceOrPlus = /^\s*\+(?=[\w.])|^\s+|\s+$/g; - - return function (x, str, isNum, b) { - var base, - s = isNum ? str : str.replace(whitespaceOrPlus, ''); - - // No exception on ±Infinity or NaN. - if (isInfinityOrNaN.test(s)) { - x.s = isNaN(s) ? null : s < 0 ? -1 : 1; - } else { - if (!isNum) { - - // basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i - s = s.replace(basePrefix, function (m, p1, p2) { - base = (p2 = p2.toLowerCase()) == 'x' ? 16 : p2 == 'b' ? 2 : 8; - return !b || b == base ? p1 : m; - }); - - if (b) { - base = b; - - // E.g. '1.' to '1', '.1' to '0.1' - s = s.replace(dotAfter, '$1').replace(dotBefore, '0.$1'); - } - - if (str != s) return new BigNumber(s, base); - } - - // '[BigNumber Error] Not a number: {n}' - // '[BigNumber Error] Not a base {b} number: {n}' - if (BigNumber.DEBUG) { - throw Error - (bignumberError + 'Not a' + (b ? ' base ' + b : '') + ' number: ' + str); - } - - // NaN - x.s = null; - } - - x.c = x.e = null; - } - })(); - - - /* - * Round x to sd significant digits using rounding mode rm. Check for over/under-flow. - * If r is truthy, it is known that there are more digits after the rounding digit. - */ - function round(x, sd, rm, r) { - var d, i, j, k, n, ni, rd, - xc = x.c, - pows10 = POWS_TEN; - - // if x is not Infinity or NaN... - if (xc) { - - // rd is the rounding digit, i.e. the digit after the digit that may be rounded up. - // n is a base 1e14 number, the value of the element of array x.c containing rd. - // ni is the index of n within x.c. - // d is the number of digits of n. - // i is the index of rd within n including leading zeros. - // j is the actual index of rd within n (if < 0, rd is a leading zero). - out: { - - // Get the number of digits of the first element of xc. - for (d = 1, k = xc[0]; k >= 10; k /= 10, d++); - i = sd - d; - - // If the rounding digit is in the first element of xc... - if (i < 0) { - i += LOG_BASE; - j = sd; - n = xc[ni = 0]; - - // Get the rounding digit at index j of n. - rd = n / pows10[d - j - 1] % 10 | 0; - } else { - ni = mathceil((i + 1) / LOG_BASE); - - if (ni >= xc.length) { - - if (r) { - - // Needed by sqrt. - for (; xc.length <= ni; xc.push(0)); - n = rd = 0; - d = 1; - i %= LOG_BASE; - j = i - LOG_BASE + 1; - } else { - break out; - } - } else { - n = k = xc[ni]; - - // Get the number of digits of n. - for (d = 1; k >= 10; k /= 10, d++); - - // Get the index of rd within n. - i %= LOG_BASE; - - // Get the index of rd within n, adjusted for leading zeros. - // The number of leading zeros of n is given by LOG_BASE - d. - j = i - LOG_BASE + d; - - // Get the rounding digit at index j of n. - rd = j < 0 ? 0 : n / pows10[d - j - 1] % 10 | 0; - } - } - - r = r || sd < 0 || - - // Are there any non-zero digits after the rounding digit? - // The expression n % pows10[d - j - 1] returns all digits of n to the right - // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714. - xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]); - - r = rm < 4 - ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2)) - : rd > 5 || rd == 5 && (rm == 4 || r || rm == 6 && - - // Check whether the digit to the left of the rounding digit is odd. - ((i > 0 ? j > 0 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10) & 1 || - rm == (x.s < 0 ? 8 : 7)); - - if (sd < 1 || !xc[0]) { - xc.length = 0; - - if (r) { - - // Convert sd to decimal places. - sd -= x.e + 1; - - // 1, 0.1, 0.01, 0.001, 0.0001 etc. - xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE]; - x.e = -sd || 0; - } else { - - // Zero. - xc[0] = x.e = 0; - } - - return x; - } - - // Remove excess digits. - if (i == 0) { - xc.length = ni; - k = 1; - ni--; - } else { - xc.length = ni + 1; - k = pows10[LOG_BASE - i]; - - // E.g. 56700 becomes 56000 if 7 is the rounding digit. - // j > 0 means i > number of leading zeros of n. - xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0; - } - - // Round up? - if (r) { - - for (; ;) { - - // If the digit to be rounded up is in the first element of xc... - if (ni == 0) { - - // i will be the length of xc[0] before k is added. - for (i = 1, j = xc[0]; j >= 10; j /= 10, i++); - j = xc[0] += k; - for (k = 1; j >= 10; j /= 10, k++); - - // if i != k the length has increased. - if (i != k) { - x.e++; - if (xc[0] == BASE) xc[0] = 1; - } - - break; - } else { - xc[ni] += k; - if (xc[ni] != BASE) break; - xc[ni--] = 0; - k = 1; - } - } - } - - // Remove trailing zeros. - for (i = xc.length; xc[--i] === 0; xc.pop()); - } - - // Overflow? Infinity. - if (x.e > MAX_EXP) { - x.c = x.e = null; - - // Underflow? Zero. - } else if (x.e < MIN_EXP) { - x.c = [x.e = 0]; - } - } - - return x; - } - - - function valueOf(n) { - var str, - e = n.e; - - if (e === null) return n.toString(); - - str = coeffToString(n.c); - - str = e <= TO_EXP_NEG || e >= TO_EXP_POS - ? toExponential(str, e) - : toFixedPoint(str, e, '0'); - - return n.s < 0 ? '-' + str : str; - } - - - // PROTOTYPE/INSTANCE METHODS - - - /* - * Return a new BigNumber whose value is the absolute value of this BigNumber. - */ - P.absoluteValue = P.abs = function () { - var x = new BigNumber(this); - if (x.s < 0) x.s = 1; - return x; - }; - - - /* - * Return - * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b), - * -1 if the value of this BigNumber is less than the value of BigNumber(y, b), - * 0 if they have the same value, - * or null if the value of either is NaN. - */ - P.comparedTo = function (y, b) { - return compare(this, new BigNumber(y, b)); - }; - - - /* - * If dp is undefined or null or true or false, return the number of decimal places of the - * value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN. - * - * Otherwise, if dp is a number, return a new BigNumber whose value is the value of this - * BigNumber rounded to a maximum of dp decimal places using rounding mode rm, or - * ROUNDING_MODE if rm is omitted. - * - * [dp] {number} Decimal places: integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}' - */ - P.decimalPlaces = P.dp = function (dp, rm) { - var c, n, v, - x = this; - - if (dp != null) { - intCheck(dp, 0, MAX); - if (rm == null) rm = ROUNDING_MODE; - else intCheck(rm, 0, 8); - - return round(new BigNumber(x), dp + x.e + 1, rm); - } - - if (!(c = x.c)) return null; - n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE; - - // Subtract the number of trailing zeros of the last number. - if (v = c[v]) for (; v % 10 == 0; v /= 10, n--); - if (n < 0) n = 0; - - return n; - }; - - - /* - * n / 0 = I - * n / N = N - * n / I = 0 - * 0 / n = 0 - * 0 / 0 = N - * 0 / N = N - * 0 / I = 0 - * N / n = N - * N / 0 = N - * N / N = N - * N / I = N - * I / n = I - * I / 0 = I - * I / N = N - * I / I = N - * - * Return a new BigNumber whose value is the value of this BigNumber divided by the value of - * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE. - */ - P.dividedBy = P.div = function (y, b) { - return div(this, new BigNumber(y, b), DECIMAL_PLACES, ROUNDING_MODE); - }; - - - /* - * Return a new BigNumber whose value is the integer part of dividing the value of this - * BigNumber by the value of BigNumber(y, b). - */ - P.dividedToIntegerBy = P.idiv = function (y, b) { - return div(this, new BigNumber(y, b), 0, 1); - }; - - - /* - * Return a BigNumber whose value is the value of this BigNumber exponentiated by n. - * - * If m is present, return the result modulo m. - * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE. - * If POW_PRECISION is non-zero and m is not present, round to POW_PRECISION using ROUNDING_MODE. - * - * The modular power operation works efficiently when x, n, and m are integers, otherwise it - * is equivalent to calculating x.exponentiatedBy(n).modulo(m) with a POW_PRECISION of 0. - * - * n {number|string|BigNumber} The exponent. An integer. - * [m] {number|string|BigNumber} The modulus. - * - * '[BigNumber Error] Exponent not an integer: {n}' - */ - P.exponentiatedBy = P.pow = function (n, m) { - var half, isModExp, i, k, more, nIsBig, nIsNeg, nIsOdd, y, - x = this; - - n = new BigNumber(n); - - // Allow NaN and ±Infinity, but not other non-integers. - if (n.c && !n.isInteger()) { - throw Error - (bignumberError + 'Exponent not an integer: ' + valueOf(n)); - } - - if (m != null) m = new BigNumber(m); - - // Exponent of MAX_SAFE_INTEGER is 15. - nIsBig = n.e > 14; - - // If x is NaN, ±Infinity, ±0 or ±1, or n is ±Infinity, NaN or ±0. - if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) { - - // The sign of the result of pow when x is negative depends on the evenness of n. - // If +n overflows to ±Infinity, the evenness of n would be not be known. - y = new BigNumber(Math.pow(+valueOf(x), nIsBig ? 2 - isOdd(n) : +valueOf(n))); - return m ? y.mod(m) : y; - } - - nIsNeg = n.s < 0; - - if (m) { - - // x % m returns NaN if abs(m) is zero, or m is NaN. - if (m.c ? !m.c[0] : !m.s) return new BigNumber(NaN); - - isModExp = !nIsNeg && x.isInteger() && m.isInteger(); - - if (isModExp) x = x.mod(m); - - // Overflow to ±Infinity: >=2**1e10 or >=1.0000024**1e15. - // Underflow to ±0: <=0.79**1e10 or <=0.9999975**1e15. - } else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0 - // [1, 240000000] - ? x.c[0] > 1 || nIsBig && x.c[1] >= 24e7 - // [80000000000000] [99999750000000] - : x.c[0] < 8e13 || nIsBig && x.c[0] <= 9999975e7))) { - - // If x is negative and n is odd, k = -0, else k = 0. - k = x.s < 0 && isOdd(n) ? -0 : 0; - - // If x >= 1, k = ±Infinity. - if (x.e > -1) k = 1 / k; - - // If n is negative return ±0, else return ±Infinity. - return new BigNumber(nIsNeg ? 1 / k : k); - - } else if (POW_PRECISION) { - - // Truncating each coefficient array to a length of k after each multiplication - // equates to truncating significant digits to POW_PRECISION + [28, 41], - // i.e. there will be a minimum of 28 guard digits retained. - k = mathceil(POW_PRECISION / LOG_BASE + 2); - } - - if (nIsBig) { - half = new BigNumber(0.5); - if (nIsNeg) n.s = 1; - nIsOdd = isOdd(n); - } else { - i = Math.abs(+valueOf(n)); - nIsOdd = i % 2; - } - - y = new BigNumber(ONE); - - // Performs 54 loop iterations for n of 9007199254740991. - for (; ;) { - - if (nIsOdd) { - y = y.times(x); - if (!y.c) break; - - if (k) { - if (y.c.length > k) y.c.length = k; - } else if (isModExp) { - y = y.mod(m); //y = y.minus(div(y, m, 0, MODULO_MODE).times(m)); - } - } - - if (i) { - i = mathfloor(i / 2); - if (i === 0) break; - nIsOdd = i % 2; - } else { - n = n.times(half); - round(n, n.e + 1, 1); - - if (n.e > 14) { - nIsOdd = isOdd(n); - } else { - i = +valueOf(n); - if (i === 0) break; - nIsOdd = i % 2; - } - } - - x = x.times(x); - - if (k) { - if (x.c && x.c.length > k) x.c.length = k; - } else if (isModExp) { - x = x.mod(m); //x = x.minus(div(x, m, 0, MODULO_MODE).times(m)); - } - } - - if (isModExp) return y; - if (nIsNeg) y = ONE.div(y); - - return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to an integer - * using rounding mode rm, or ROUNDING_MODE if rm is omitted. - * - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {rm}' - */ - P.integerValue = function (rm) { - var n = new BigNumber(this); - if (rm == null) rm = ROUNDING_MODE; - else intCheck(rm, 0, 8); - return round(n, n.e + 1, rm); - }; - - - /* - * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b), - * otherwise return false. - */ - P.isEqualTo = P.eq = function (y, b) { - return compare(this, new BigNumber(y, b)) === 0; - }; - - - /* - * Return true if the value of this BigNumber is a finite number, otherwise return false. - */ - P.isFinite = function () { - return !!this.c; - }; - - - /* - * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b), - * otherwise return false. - */ - P.isGreaterThan = P.gt = function (y, b) { - return compare(this, new BigNumber(y, b)) > 0; - }; - - - /* - * Return true if the value of this BigNumber is greater than or equal to the value of - * BigNumber(y, b), otherwise return false. - */ - P.isGreaterThanOrEqualTo = P.gte = function (y, b) { - return (b = compare(this, new BigNumber(y, b))) === 1 || b === 0; - - }; - - - /* - * Return true if the value of this BigNumber is an integer, otherwise return false. - */ - P.isInteger = function () { - return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2; - }; - - - /* - * Return true if the value of this BigNumber is less than the value of BigNumber(y, b), - * otherwise return false. - */ - P.isLessThan = P.lt = function (y, b) { - return compare(this, new BigNumber(y, b)) < 0; - }; - - - /* - * Return true if the value of this BigNumber is less than or equal to the value of - * BigNumber(y, b), otherwise return false. - */ - P.isLessThanOrEqualTo = P.lte = function (y, b) { - return (b = compare(this, new BigNumber(y, b))) === -1 || b === 0; - }; - - - /* - * Return true if the value of this BigNumber is NaN, otherwise return false. - */ - P.isNaN = function () { - return !this.s; - }; - - - /* - * Return true if the value of this BigNumber is negative, otherwise return false. - */ - P.isNegative = function () { - return this.s < 0; - }; - - - /* - * Return true if the value of this BigNumber is positive, otherwise return false. - */ - P.isPositive = function () { - return this.s > 0; - }; - - - /* - * Return true if the value of this BigNumber is 0 or -0, otherwise return false. - */ - P.isZero = function () { - return !!this.c && this.c[0] == 0; - }; - - - /* - * n - 0 = n - * n - N = N - * n - I = -I - * 0 - n = -n - * 0 - 0 = 0 - * 0 - N = N - * 0 - I = -I - * N - n = N - * N - 0 = N - * N - N = N - * N - I = N - * I - n = I - * I - 0 = I - * I - N = N - * I - I = N - * - * Return a new BigNumber whose value is the value of this BigNumber minus the value of - * BigNumber(y, b). - */ - P.minus = function (y, b) { - var i, j, t, xLTy, - x = this, - a = x.s; - - y = new BigNumber(y, b); - b = y.s; - - // Either NaN? - if (!a || !b) return new BigNumber(NaN); - - // Signs differ? - if (a != b) { - y.s = -b; - return x.plus(y); - } - - var xe = x.e / LOG_BASE, - ye = y.e / LOG_BASE, - xc = x.c, - yc = y.c; - - if (!xe || !ye) { - - // Either Infinity? - if (!xc || !yc) return xc ? (y.s = -b, y) : new BigNumber(yc ? x : NaN); - - // Either zero? - if (!xc[0] || !yc[0]) { - - // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. - return yc[0] ? (y.s = -b, y) : new BigNumber(xc[0] ? x : - - // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity - ROUNDING_MODE == 3 ? -0 : 0); - } - } - - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - - // Determine which is the bigger number. - if (a = xe - ye) { - - if (xLTy = a < 0) { - a = -a; - t = xc; - } else { - ye = xe; - t = yc; - } - - t.reverse(); - - // Prepend zeros to equalise exponents. - for (b = a; b--; t.push(0)); - t.reverse(); - } else { - - // Exponents equal. Check digit by digit. - j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b; - - for (a = b = 0; b < j; b++) { - - if (xc[b] != yc[b]) { - xLTy = xc[b] < yc[b]; - break; - } - } - } - - // x < y? Point xc to the array of the bigger number. - if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s; - - b = (j = yc.length) - (i = xc.length); - - // Append zeros to xc if shorter. - // No need to add zeros to yc if shorter as subtract only needs to start at yc.length. - if (b > 0) for (; b--; xc[i++] = 0); - b = BASE - 1; - - // Subtract yc from xc. - for (; j > a;) { - - if (xc[--j] < yc[j]) { - for (i = j; i && !xc[--i]; xc[i] = b); - --xc[i]; - xc[j] += BASE; - } - - xc[j] -= yc[j]; - } - - // Remove leading zeros and adjust exponent accordingly. - for (; xc[0] == 0; xc.splice(0, 1), --ye); - - // Zero? - if (!xc[0]) { - - // Following IEEE 754 (2008) 6.3, - // n - n = +0 but n - n = -0 when rounding towards -Infinity. - y.s = ROUNDING_MODE == 3 ? -1 : 1; - y.c = [y.e = 0]; - return y; - } - - // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity - // for finite x and y. - return normalise(y, xc, ye); - }; - - - /* - * n % 0 = N - * n % N = N - * n % I = n - * 0 % n = 0 - * -0 % n = -0 - * 0 % 0 = N - * 0 % N = N - * 0 % I = 0 - * N % n = N - * N % 0 = N - * N % N = N - * N % I = N - * I % n = N - * I % 0 = N - * I % N = N - * I % I = N - * - * Return a new BigNumber whose value is the value of this BigNumber modulo the value of - * BigNumber(y, b). The result depends on the value of MODULO_MODE. - */ - P.modulo = P.mod = function (y, b) { - var q, s, - x = this; - - y = new BigNumber(y, b); - - // Return NaN if x is Infinity or NaN, or y is NaN or zero. - if (!x.c || !y.s || y.c && !y.c[0]) { - return new BigNumber(NaN); - - // Return x if y is Infinity or x is zero. - } else if (!y.c || x.c && !x.c[0]) { - return new BigNumber(x); - } - - if (MODULO_MODE == 9) { - - // Euclidian division: q = sign(y) * floor(x / abs(y)) - // r = x - qy where 0 <= r < abs(y) - s = y.s; - y.s = 1; - q = div(x, y, 0, 3); - y.s = s; - q.s *= s; - } else { - q = div(x, y, 0, MODULO_MODE); - } - - y = x.minus(q.times(y)); - - // To match JavaScript %, ensure sign of zero is sign of dividend. - if (!y.c[0] && MODULO_MODE == 1) y.s = x.s; - - return y; - }; - - - /* - * n * 0 = 0 - * n * N = N - * n * I = I - * 0 * n = 0 - * 0 * 0 = 0 - * 0 * N = N - * 0 * I = N - * N * n = N - * N * 0 = N - * N * N = N - * N * I = N - * I * n = I - * I * 0 = N - * I * N = N - * I * I = I - * - * Return a new BigNumber whose value is the value of this BigNumber multiplied by the value - * of BigNumber(y, b). - */ - P.multipliedBy = P.times = function (y, b) { - var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc, - base, sqrtBase, - x = this, - xc = x.c, - yc = (y = new BigNumber(y, b)).c; - - // Either NaN, ±Infinity or ±0? - if (!xc || !yc || !xc[0] || !yc[0]) { - - // Return NaN if either is NaN, or one is 0 and the other is Infinity. - if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) { - y.c = y.e = y.s = null; - } else { - y.s *= x.s; - - // Return ±Infinity if either is ±Infinity. - if (!xc || !yc) { - y.c = y.e = null; - - // Return ±0 if either is ±0. - } else { - y.c = [0]; - y.e = 0; - } - } - - return y; - } - - e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE); - y.s *= x.s; - xcL = xc.length; - ycL = yc.length; - - // Ensure xc points to longer array and xcL to its length. - if (xcL < ycL) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i; - - // Initialise the result array with zeros. - for (i = xcL + ycL, zc = []; i--; zc.push(0)); - - base = BASE; - sqrtBase = SQRT_BASE; - - for (i = ycL; --i >= 0;) { - c = 0; - ylo = yc[i] % sqrtBase; - yhi = yc[i] / sqrtBase | 0; - - for (k = xcL, j = i + k; j > i;) { - xlo = xc[--k] % sqrtBase; - xhi = xc[k] / sqrtBase | 0; - m = yhi * xlo + xhi * ylo; - xlo = ylo * xlo + ((m % sqrtBase) * sqrtBase) + zc[j] + c; - c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi; - zc[j--] = xlo % base; - } - - zc[j] = c; - } - - if (c) { - ++e; - } else { - zc.splice(0, 1); - } - - return normalise(y, zc, e); - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber negated, - * i.e. multiplied by -1. - */ - P.negated = function () { - var x = new BigNumber(this); - x.s = -x.s || null; - return x; - }; - - - /* - * n + 0 = n - * n + N = N - * n + I = I - * 0 + n = n - * 0 + 0 = 0 - * 0 + N = N - * 0 + I = I - * N + n = N - * N + 0 = N - * N + N = N - * N + I = N - * I + n = I - * I + 0 = I - * I + N = N - * I + I = I - * - * Return a new BigNumber whose value is the value of this BigNumber plus the value of - * BigNumber(y, b). - */ - P.plus = function (y, b) { - var t, - x = this, - a = x.s; - - y = new BigNumber(y, b); - b = y.s; - - // Either NaN? - if (!a || !b) return new BigNumber(NaN); - - // Signs differ? - if (a != b) { - y.s = -b; - return x.minus(y); - } - - var xe = x.e / LOG_BASE, - ye = y.e / LOG_BASE, - xc = x.c, - yc = y.c; - - if (!xe || !ye) { - - // Return ±Infinity if either ±Infinity. - if (!xc || !yc) return new BigNumber(a / 0); - - // Either zero? - // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. - if (!xc[0] || !yc[0]) return yc[0] ? y : new BigNumber(xc[0] ? x : a * 0); - } - - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - - // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts. - if (a = xe - ye) { - if (a > 0) { - ye = xe; - t = yc; - } else { - a = -a; - t = xc; - } - - t.reverse(); - for (; a--; t.push(0)); - t.reverse(); - } - - a = xc.length; - b = yc.length; - - // Point xc to the longer array, and b to the shorter length. - if (a - b < 0) t = yc, yc = xc, xc = t, b = a; - - // Only start adding at yc.length - 1 as the further digits of xc can be ignored. - for (a = 0; b;) { - a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0; - xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE; - } - - if (a) { - xc = [a].concat(xc); - ++ye; - } - - // No need to check for zero, as +x + +y != 0 && -x + -y != 0 - // ye = MAX_EXP + 1 possible - return normalise(y, xc, ye); - }; - - - /* - * If sd is undefined or null or true or false, return the number of significant digits of - * the value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN. - * If sd is true include integer-part trailing zeros in the count. - * - * Otherwise, if sd is a number, return a new BigNumber whose value is the value of this - * BigNumber rounded to a maximum of sd significant digits using rounding mode rm, or - * ROUNDING_MODE if rm is omitted. - * - * sd {number|boolean} number: significant digits: integer, 1 to MAX inclusive. - * boolean: whether to count integer-part trailing zeros: true or false. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}' - */ - P.precision = P.sd = function (sd, rm) { - var c, n, v, - x = this; - - if (sd != null && sd !== !!sd) { - intCheck(sd, 1, MAX); - if (rm == null) rm = ROUNDING_MODE; - else intCheck(rm, 0, 8); - - return round(new BigNumber(x), sd, rm); - } - - if (!(c = x.c)) return null; - v = c.length - 1; - n = v * LOG_BASE + 1; - - if (v = c[v]) { - - // Subtract the number of trailing zeros of the last element. - for (; v % 10 == 0; v /= 10, n--); - - // Add the number of digits of the first element. - for (v = c[0]; v >= 10; v /= 10, n++); - } - - if (sd && x.e + 1 > n) n = x.e + 1; - - return n; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber shifted by k places - * (powers of 10). Shift to the right if n > 0, and to the left if n < 0. - * - * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive. - * - * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {k}' - */ - P.shiftedBy = function (k) { - intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER); - return this.times('1e' + k); - }; - - - /* - * sqrt(-n) = N - * sqrt(N) = N - * sqrt(-I) = N - * sqrt(I) = I - * sqrt(0) = 0 - * sqrt(-0) = -0 - * - * Return a new BigNumber whose value is the square root of the value of this BigNumber, - * rounded according to DECIMAL_PLACES and ROUNDING_MODE. - */ - P.squareRoot = P.sqrt = function () { - var m, n, r, rep, t, - x = this, - c = x.c, - s = x.s, - e = x.e, - dp = DECIMAL_PLACES + 4, - half = new BigNumber('0.5'); - - // Negative/NaN/Infinity/zero? - if (s !== 1 || !c || !c[0]) { - return new BigNumber(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0); - } - - // Initial estimate. - s = Math.sqrt(+valueOf(x)); - - // Math.sqrt underflow/overflow? - // Pass x to Math.sqrt as integer, then adjust the exponent of the result. - if (s == 0 || s == 1 / 0) { - n = coeffToString(c); - if ((n.length + e) % 2 == 0) n += '0'; - s = Math.sqrt(+n); - e = bitFloor((e + 1) / 2) - (e < 0 || e % 2); - - if (s == 1 / 0) { - n = '5e' + e; - } else { - n = s.toExponential(); - n = n.slice(0, n.indexOf('e') + 1) + e; - } - - r = new BigNumber(n); - } else { - r = new BigNumber(s + ''); - } - - // Check for zero. - // r could be zero if MIN_EXP is changed after the this value was created. - // This would cause a division by zero (x/t) and hence Infinity below, which would cause - // coeffToString to throw. - if (r.c[0]) { - e = r.e; - s = e + dp; - if (s < 3) s = 0; - - // Newton-Raphson iteration. - for (; ;) { - t = r; - r = half.times(t.plus(div(x, t, dp, 1))); - - if (coeffToString(t.c).slice(0, s) === (n = coeffToString(r.c)).slice(0, s)) { - - // The exponent of r may here be one less than the final result exponent, - // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits - // are indexed correctly. - if (r.e < e) --s; - n = n.slice(s - 3, s + 1); - - // The 4th rounding digit may be in error by -1 so if the 4 rounding digits - // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the - // iteration. - if (n == '9999' || !rep && n == '4999') { - - // On the first iteration only, check to see if rounding up gives the - // exact result as the nines may infinitely repeat. - if (!rep) { - round(t, t.e + DECIMAL_PLACES + 2, 0); - - if (t.times(t).eq(x)) { - r = t; - break; - } - } - - dp += 4; - s += 4; - rep = 1; - } else { - - // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact - // result. If not, then there are further digits and m will be truthy. - if (!+n || !+n.slice(1) && n.charAt(0) == '5') { - - // Truncate to the first rounding digit. - round(r, r.e + DECIMAL_PLACES + 2, 1); - m = !r.times(r).eq(x); - } - - break; - } - } - } - } - - return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m); - }; - - - /* - * Return a string representing the value of this BigNumber in exponential notation and - * rounded using ROUNDING_MODE to dp fixed decimal places. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}' - */ - P.toExponential = function (dp, rm) { - if (dp != null) { - intCheck(dp, 0, MAX); - dp++; - } - return format(this, dp, rm, 1); - }; - - - /* - * Return a string representing the value of this BigNumber in fixed-point notation rounding - * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted. - * - * Note: as with JavaScript's number type, (-0).toFixed(0) is '0', - * but e.g. (-0.00001).toFixed(0) is '-0'. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}' - */ - P.toFixed = function (dp, rm) { - if (dp != null) { - intCheck(dp, 0, MAX); - dp = dp + this.e + 1; - } - return format(this, dp, rm); - }; - - - /* - * Return a string representing the value of this BigNumber in fixed-point notation rounded - * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties - * of the format or FORMAT object (see BigNumber.set). - * - * The formatting object may contain some or all of the properties shown below. - * - * FORMAT = { - * prefix: '', - * groupSize: 3, - * secondaryGroupSize: 0, - * groupSeparator: ',', - * decimalSeparator: '.', - * fractionGroupSize: 0, - * fractionGroupSeparator: '\xA0', // non-breaking space - * suffix: '' - * }; - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * [format] {object} Formatting options. See FORMAT pbject above. - * - * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}' - * '[BigNumber Error] Argument not an object: {format}' - */ - P.toFormat = function (dp, rm, format) { - var str, - x = this; - - if (format == null) { - if (dp != null && rm && typeof rm == 'object') { - format = rm; - rm = null; - } else if (dp && typeof dp == 'object') { - format = dp; - dp = rm = null; - } else { - format = FORMAT; - } - } else if (typeof format != 'object') { - throw Error - (bignumberError + 'Argument not an object: ' + format); - } - - str = x.toFixed(dp, rm); - - if (x.c) { - var i, - arr = str.split('.'), - g1 = +format.groupSize, - g2 = +format.secondaryGroupSize, - groupSeparator = format.groupSeparator || '', - intPart = arr[0], - fractionPart = arr[1], - isNeg = x.s < 0, - intDigits = isNeg ? intPart.slice(1) : intPart, - len = intDigits.length; - - if (g2) i = g1, g1 = g2, g2 = i, len -= i; - - if (g1 > 0 && len > 0) { - i = len % g1 || g1; - intPart = intDigits.substr(0, i); - for (; i < len; i += g1) intPart += groupSeparator + intDigits.substr(i, g1); - if (g2 > 0) intPart += groupSeparator + intDigits.slice(i); - if (isNeg) intPart = '-' + intPart; - } - - str = fractionPart - ? intPart + (format.decimalSeparator || '') + ((g2 = +format.fractionGroupSize) - ? fractionPart.replace(new RegExp('\\d{' + g2 + '}\\B', 'g'), - '$&' + (format.fractionGroupSeparator || '')) - : fractionPart) - : intPart; - } - - return (format.prefix || '') + str + (format.suffix || ''); - }; - - - /* - * Return an array of two BigNumbers representing the value of this BigNumber as a simple - * fraction with an integer numerator and an integer denominator. - * The denominator will be a positive non-zero value less than or equal to the specified - * maximum denominator. If a maximum denominator is not specified, the denominator will be - * the lowest value necessary to represent the number exactly. - * - * [md] {number|string|BigNumber} Integer >= 1, or Infinity. The maximum denominator. - * - * '[BigNumber Error] Argument {not an integer|out of range} : {md}' - */ - P.toFraction = function (md) { - var d, d0, d1, d2, e, exp, n, n0, n1, q, r, s, - x = this, - xc = x.c; - - if (md != null) { - n = new BigNumber(md); - - // Throw if md is less than one or is not an integer, unless it is Infinity. - if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) { - throw Error - (bignumberError + 'Argument ' + - (n.isInteger() ? 'out of range: ' : 'not an integer: ') + valueOf(n)); - } - } - - if (!xc) return new BigNumber(x); - - d = new BigNumber(ONE); - n1 = d0 = new BigNumber(ONE); - d1 = n0 = new BigNumber(ONE); - s = coeffToString(xc); - - // Determine initial denominator. - // d is a power of 10 and the minimum max denominator that specifies the value exactly. - e = d.e = s.length - x.e - 1; - d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp]; - md = !md || n.comparedTo(d) > 0 ? (e > 0 ? d : n1) : n; - - exp = MAX_EXP; - MAX_EXP = 1 / 0; - n = new BigNumber(s); - - // n0 = d1 = 0 - n0.c[0] = 0; - - for (; ;) { - q = div(n, d, 0, 1); - d2 = d0.plus(q.times(d1)); - if (d2.comparedTo(md) == 1) break; - d0 = d1; - d1 = d2; - n1 = n0.plus(q.times(d2 = n1)); - n0 = d2; - d = n.minus(q.times(d2 = d)); - n = d2; - } - - d2 = div(md.minus(d0), d1, 0, 1); - n0 = n0.plus(d2.times(n1)); - d0 = d0.plus(d2.times(d1)); - n0.s = n1.s = x.s; - e = e * 2; - - // Determine which fraction is closer to x, n0/d0 or n1/d1 - r = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo( - div(n0, d0, e, ROUNDING_MODE).minus(x).abs()) < 1 ? [n1, d1] : [n0, d0]; - - MAX_EXP = exp; - - return r; - }; - - - /* - * Return the value of this BigNumber converted to a number primitive. - */ - P.toNumber = function () { - return +valueOf(this); - }; - - - /* - * Return a string representing the value of this BigNumber rounded to sd significant digits - * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits - * necessary to represent the integer part of the value in fixed-point notation, then use - * exponential notation. - * - * [sd] {number} Significant digits. Integer, 1 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}' - */ - P.toPrecision = function (sd, rm) { - if (sd != null) intCheck(sd, 1, MAX); - return format(this, sd, rm, 2); - }; - - - /* - * Return a string representing the value of this BigNumber in base b, or base 10 if b is - * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and - * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent - * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than - * TO_EXP_NEG, return exponential notation. - * - * [b] {number} Integer, 2 to ALPHABET.length inclusive. - * - * '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}' - */ - P.toString = function (b) { - var str, - n = this, - s = n.s, - e = n.e; - - // Infinity or NaN? - if (e === null) { - if (s) { - str = 'Infinity'; - if (s < 0) str = '-' + str; - } else { - str = 'NaN'; - } - } else { - if (b == null) { - str = e <= TO_EXP_NEG || e >= TO_EXP_POS - ? toExponential(coeffToString(n.c), e) - : toFixedPoint(coeffToString(n.c), e, '0'); - } else if (b === 10) { - n = round(new BigNumber(n), DECIMAL_PLACES + e + 1, ROUNDING_MODE); - str = toFixedPoint(coeffToString(n.c), n.e, '0'); - } else { - intCheck(b, 2, ALPHABET.length, 'Base'); - str = convertBase(toFixedPoint(coeffToString(n.c), e, '0'), 10, b, s, true); - } - - if (s < 0 && n.c[0]) str = '-' + str; - } - - return str; - }; - - - /* - * Return as toString, but do not accept a base argument, and include the minus sign for - * negative zero. - */ - P.valueOf = P.toJSON = function () { - return valueOf(this); - }; - - - P._isBigNumber = true; - - if (configObject != null) BigNumber.set(configObject); - - return BigNumber; - } - - - // PRIVATE HELPER FUNCTIONS - - // These functions don't need access to variables, - // e.g. DECIMAL_PLACES, in the scope of the `clone` function above. - - - function bitFloor(n) { - var i = n | 0; - return n > 0 || n === i ? i : i - 1; - } - - - // Return a coefficient array as a string of base 10 digits. - function coeffToString(a) { - var s, z, - i = 1, - j = a.length, - r = a[0] + ''; - - for (; i < j;) { - s = a[i++] + ''; - z = LOG_BASE - s.length; - for (; z--; s = '0' + s); - r += s; - } - - // Determine trailing zeros. - for (j = r.length; r.charCodeAt(--j) === 48;); - - return r.slice(0, j + 1 || 1); - } - - - // Compare the value of BigNumbers x and y. - function compare(x, y) { - var a, b, - xc = x.c, - yc = y.c, - i = x.s, - j = y.s, - k = x.e, - l = y.e; - - // Either NaN? - if (!i || !j) return null; - - a = xc && !xc[0]; - b = yc && !yc[0]; - - // Either zero? - if (a || b) return a ? b ? 0 : -j : i; - - // Signs differ? - if (i != j) return i; - - a = i < 0; - b = k == l; - - // Either Infinity? - if (!xc || !yc) return b ? 0 : !xc ^ a ? 1 : -1; - - // Compare exponents. - if (!b) return k > l ^ a ? 1 : -1; - - j = (k = xc.length) < (l = yc.length) ? k : l; - - // Compare digit by digit. - for (i = 0; i < j; i++) if (xc[i] != yc[i]) return xc[i] > yc[i] ^ a ? 1 : -1; - - // Compare lengths. - return k == l ? 0 : k > l ^ a ? 1 : -1; - } - - - /* - * Check that n is a primitive number, an integer, and in range, otherwise throw. - */ - function intCheck(n, min, max, name) { - if (n < min || n > max || n !== mathfloor(n)) { - throw Error - (bignumberError + (name || 'Argument') + (typeof n == 'number' - ? n < min || n > max ? ' out of range: ' : ' not an integer: ' - : ' not a primitive number: ') + String(n)); - } - } - - - // Assumes finite n. - function isOdd(n) { - var k = n.c.length - 1; - return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0; - } - - - function toExponential(str, e) { - return (str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str) + - (e < 0 ? 'e' : 'e+') + e; - } - - - function toFixedPoint(str, e, z) { - var len, zs; - - // Negative exponent? - if (e < 0) { - - // Prepend zeros. - for (zs = z + '.'; ++e; zs += z); - str = zs + str; - - // Positive exponent - } else { - len = str.length; - - // Append zeros. - if (++e > len) { - for (zs = z, e -= len; --e; zs += z); - str += zs; - } else if (e < len) { - str = str.slice(0, e) + '.' + str.slice(e); - } - } - - return str; - } - - - // EXPORT - - - BigNumber = clone(); - BigNumber['default'] = BigNumber.BigNumber = BigNumber; - - // AMD. - if (typeof define == 'function' && define.amd) { - define(function () { return BigNumber; }); - - // Node.js and other environments that support module.exports. - } else if (typeof module != 'undefined' && module.exports) { - module.exports = BigNumber; - - // Browser. - } else { - if (!globalObject) { - globalObject = typeof self != 'undefined' && self ? self : window; - } - - globalObject.BigNumber = BigNumber; - } -})(this); diff --git a/reverse_engineering/node_modules/bignumber.js/bignumber.min.js b/reverse_engineering/node_modules/bignumber.js/bignumber.min.js deleted file mode 100644 index b9f0594..0000000 --- a/reverse_engineering/node_modules/bignumber.js/bignumber.min.js +++ /dev/null @@ -1 +0,0 @@ -/* bignumber.js v9.0.1 https://github.com/MikeMcl/bignumber.js/LICENCE.md */!function(e){"use strict";var r,C=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,M=Math.ceil,G=Math.floor,k="[BigNumber Error] ",F=k+"Number primitive has more than 15 significant digits: ",q=1e14,j=14,$=9007199254740991,z=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],H=1e7,V=1e9;function W(e){var r=0|e;return 0o[s]^n?1:-1;return u==l?0:l(t=e.length)){for(i=n,r-=t;--r;i+=n);e+=i}else rb?c.c=c.e=null:e.eb)c.c=c.e=null;else if(on-1&&(null==s[i+1]&&(s[i+1]=0),s[i+1]+=s[i]/n|0,s[i]%=n)}return s.reverse()}function D(e,r,n){var t,i,o,s,f=0,u=e.length,l=r%H,c=r/H|0;for(e=e.slice();u--;)f=((i=l*(o=e[u]%H)+(t=c*o+(s=e[u]/H|0)*l)%H*H+f)/n|0)+(t/H|0)+c*s,e[u]=i%n;return f&&(e=[f].concat(e)),e}function P(e,r,n,t){var i,o;if(n!=t)o=tr[i]?1:-1;break}return o}function x(e,r,n,t){for(var i=0;n--;)e[n]-=i,i=e[n]b?e.c=e.e=null:n=a.length){if(!t)break e;for(;a.length<=l;a.push(0));u=c=0,s=(o%=j)-j+(i=1)}else{for(u=f=a[l],i=1;10<=f;f/=10,i++);c=(s=(o%=j)-j+i)<0?0:u/h[i-s-1]%10|0}if(t=t||r<0||null!=a[l+1]||(s<0?u:u%h[i-s-1]),t=n<4?(c||t)&&(0==n||n==(e.s<0?3:2)):5b?e.c=e.e=null:e.e>>11))?(n=crypto.getRandomValues(new Uint32Array(2)),r[s]=n[0],r[s+1]=n[1]):(f.push(o%1e14),s+=2);s=i/2}else{if(!crypto.randomBytes)throw E=!1,Error(k+"crypto unavailable");for(r=crypto.randomBytes(i*=7);sn;)a[s]=0,s||(++f,a=[1].concat(a));for(u=a.length;!a[--u];);for(g=0,e="";g<=u;e+=o.charAt(a[g++]));e=Q(e,f,o.charAt(0))}return e},d=function(e,r,n,t,i){var o,s,f,u,l,c,a,h,g,p,w,d,m,v,N,O,y,b=e.s==r.s?1:-1,E=e.c,A=r.c;if(!(E&&E[0]&&A&&A[0]))return new _(e.s&&r.s&&(E?!A||E[0]!=A[0]:A)?E&&0==E[0]||!A?0*b:b/0:NaN);for(g=(h=new _(b)).c=[],b=n+(s=e.e-r.e)+1,i||(i=q,s=W(e.e/j)-W(r.e/j),b=b/j|0),f=0;A[f]==(E[f]||0);f++);if(A[f]>(E[f]||0)&&s--,b<0)g.push(1),u=!0;else{for(v=E.length,O=A.length,b+=2,1<(l=G(i/(A[f=0]+1)))&&(A=D(A,l,i),E=D(E,l,i),O=A.length,v=E.length),m=O,w=(p=E.slice(0,O)).length;w=i/2&&N++;do{if(l=0,(o=P(A,p,O,w))<0){if(d=p[0],O!=w&&(d=d*i+(p[1]||0)),1<(l=G(d/N)))for(i<=l&&(l=i-1),a=(c=D(A,l,i)).length,w=p.length;1==P(c,p,a,w);)l--,x(c,Oo&&(l.c.length=o):t&&(l=l.mod(r))}if(i){if(0===(i=G(i/2)))break;u=i%2}else if(I(e=e.times(n),e.e+1,1),14o&&(c.c.length=o):t&&(c=c.mod(r))}return t?l:(f&&(l=w.div(l)),r?l.mod(r):o?I(l,A,N,void 0):l)},t.integerValue=function(e){var r=new _(this);return null==e?e=N:J(e,0,8),I(r,r.e+1,e)},t.isEqualTo=t.eq=function(e,r){return 0===Y(this,new _(e,r))},t.isFinite=function(){return!!this.c},t.isGreaterThan=t.gt=function(e,r){return 0this.c.length-2},t.isLessThan=t.lt=function(e,r){return Y(this,new _(e,r))<0},t.isLessThanOrEqualTo=t.lte=function(e,r){return-1===(r=Y(this,new _(e,r)))||0===r},t.isNaN=function(){return!this.s},t.isNegative=function(){return this.s<0},t.isPositive=function(){return 0t&&(t=this.e+1),t},t.shiftedBy=function(e){return J(e,-$,$),this.times("1e"+e)},t.squareRoot=t.sqrt=function(){var e,r,n,t,i,o=this,s=o.c,f=o.s,u=o.e,l=v+4,c=new _("0.5");if(1!==f||!s||!s[0])return new _(!f||f<0&&(!s||s[0])?NaN:s?o:1/0);if((n=0==(f=Math.sqrt(+T(o)))||f==1/0?(((r=X(s)).length+u)%2==0&&(r+="0"),f=Math.sqrt(+r),u=W((u+1)/2)-(u<0||u%2),new _(r=f==1/0?"5e"+u:(r=f.toExponential()).slice(0,r.indexOf("e")+1)+u)):new _(f+"")).c[0])for((f=(u=n.e)+l)<3&&(f=0);;)if(i=n,n=c.times(i.plus(d(o,i,l,1))),X(i.c).slice(0,f)===(r=X(n.c)).slice(0,f)){if(n.e - * MIT Licensed. - * - * BigNumber.prototype methods | BigNumber methods - * | - * absoluteValue abs | clone - * comparedTo | config set - * decimalPlaces dp | DECIMAL_PLACES - * dividedBy div | ROUNDING_MODE - * dividedToIntegerBy idiv | EXPONENTIAL_AT - * exponentiatedBy pow | RANGE - * integerValue | CRYPTO - * isEqualTo eq | MODULO_MODE - * isFinite | POW_PRECISION - * isGreaterThan gt | FORMAT - * isGreaterThanOrEqualTo gte | ALPHABET - * isInteger | isBigNumber - * isLessThan lt | maximum max - * isLessThanOrEqualTo lte | minimum min - * isNaN | random - * isNegative | sum - * isPositive | - * isZero | - * minus | - * modulo mod | - * multipliedBy times | - * negated | - * plus | - * precision sd | - * shiftedBy | - * squareRoot sqrt | - * toExponential | - * toFixed | - * toFormat | - * toFraction | - * toJSON | - * toNumber | - * toPrecision | - * toString | - * valueOf | - * - */ - - -var - isNumeric = /^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i, - - mathceil = Math.ceil, - mathfloor = Math.floor, - - bignumberError = '[BigNumber Error] ', - tooManyDigits = bignumberError + 'Number primitive has more than 15 significant digits: ', - - BASE = 1e14, - LOG_BASE = 14, - MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1 - // MAX_INT32 = 0x7fffffff, // 2^31 - 1 - POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13], - SQRT_BASE = 1e7, - - // EDITABLE - // The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and - // the arguments to toExponential, toFixed, toFormat, and toPrecision. - MAX = 1E9; // 0 to MAX_INT32 - - -/* - * Create and return a BigNumber constructor. - */ -function clone(configObject) { - var div, convertBase, parseNumeric, - P = BigNumber.prototype = { constructor: BigNumber, toString: null, valueOf: null }, - ONE = new BigNumber(1), - - - //----------------------------- EDITABLE CONFIG DEFAULTS ------------------------------- - - - // The default values below must be integers within the inclusive ranges stated. - // The values can also be changed at run-time using BigNumber.set. - - // The maximum number of decimal places for operations involving division. - DECIMAL_PLACES = 20, // 0 to MAX - - // The rounding mode used when rounding to the above decimal places, and when using - // toExponential, toFixed, toFormat and toPrecision, and round (default value). - // UP 0 Away from zero. - // DOWN 1 Towards zero. - // CEIL 2 Towards +Infinity. - // FLOOR 3 Towards -Infinity. - // HALF_UP 4 Towards nearest neighbour. If equidistant, up. - // HALF_DOWN 5 Towards nearest neighbour. If equidistant, down. - // HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour. - // HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity. - // HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity. - ROUNDING_MODE = 4, // 0 to 8 - - // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS] - - // The exponent value at and beneath which toString returns exponential notation. - // Number type: -7 - TO_EXP_NEG = -7, // 0 to -MAX - - // The exponent value at and above which toString returns exponential notation. - // Number type: 21 - TO_EXP_POS = 21, // 0 to MAX - - // RANGE : [MIN_EXP, MAX_EXP] - - // The minimum exponent value, beneath which underflow to zero occurs. - // Number type: -324 (5e-324) - MIN_EXP = -1e7, // -1 to -MAX - - // The maximum exponent value, above which overflow to Infinity occurs. - // Number type: 308 (1.7976931348623157e+308) - // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow. - MAX_EXP = 1e7, // 1 to MAX - - // Whether to use cryptographically-secure random number generation, if available. - CRYPTO = false, // true or false - - // The modulo mode used when calculating the modulus: a mod n. - // The quotient (q = a / n) is calculated according to the corresponding rounding mode. - // The remainder (r) is calculated as: r = a - n * q. - // - // UP 0 The remainder is positive if the dividend is negative, else is negative. - // DOWN 1 The remainder has the same sign as the dividend. - // This modulo mode is commonly known as 'truncated division' and is - // equivalent to (a % n) in JavaScript. - // FLOOR 3 The remainder has the same sign as the divisor (Python %). - // HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function. - // EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)). - // The remainder is always positive. - // - // The truncated division, floored division, Euclidian division and IEEE 754 remainder - // modes are commonly used for the modulus operation. - // Although the other rounding modes can also be used, they may not give useful results. - MODULO_MODE = 1, // 0 to 9 - - // The maximum number of significant digits of the result of the exponentiatedBy operation. - // If POW_PRECISION is 0, there will be unlimited significant digits. - POW_PRECISION = 0, // 0 to MAX - - // The format specification used by the BigNumber.prototype.toFormat method. - FORMAT = { - prefix: '', - groupSize: 3, - secondaryGroupSize: 0, - groupSeparator: ',', - decimalSeparator: '.', - fractionGroupSize: 0, - fractionGroupSeparator: '\xA0', // non-breaking space - suffix: '' - }, - - // The alphabet used for base conversion. It must be at least 2 characters long, with no '+', - // '-', '.', whitespace, or repeated character. - // '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_' - ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz'; - - - //------------------------------------------------------------------------------------------ - - - // CONSTRUCTOR - - - /* - * The BigNumber constructor and exported function. - * Create and return a new instance of a BigNumber object. - * - * v {number|string|BigNumber} A numeric value. - * [b] {number} The base of v. Integer, 2 to ALPHABET.length inclusive. - */ - function BigNumber(v, b) { - var alphabet, c, caseChanged, e, i, isNum, len, str, - x = this; - - // Enable constructor call without `new`. - if (!(x instanceof BigNumber)) return new BigNumber(v, b); - - if (b == null) { - - if (v && v._isBigNumber === true) { - x.s = v.s; - - if (!v.c || v.e > MAX_EXP) { - x.c = x.e = null; - } else if (v.e < MIN_EXP) { - x.c = [x.e = 0]; - } else { - x.e = v.e; - x.c = v.c.slice(); - } - - return; - } - - if ((isNum = typeof v == 'number') && v * 0 == 0) { - - // Use `1 / n` to handle minus zero also. - x.s = 1 / v < 0 ? (v = -v, -1) : 1; - - // Fast path for integers, where n < 2147483648 (2**31). - if (v === ~~v) { - for (e = 0, i = v; i >= 10; i /= 10, e++); - - if (e > MAX_EXP) { - x.c = x.e = null; - } else { - x.e = e; - x.c = [v]; - } - - return; - } - - str = String(v); - } else { - - if (!isNumeric.test(str = String(v))) return parseNumeric(x, str, isNum); - - x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1; - } - - // Decimal point? - if ((e = str.indexOf('.')) > -1) str = str.replace('.', ''); - - // Exponential form? - if ((i = str.search(/e/i)) > 0) { - - // Determine exponent. - if (e < 0) e = i; - e += +str.slice(i + 1); - str = str.substring(0, i); - } else if (e < 0) { - - // Integer. - e = str.length; - } - - } else { - - // '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}' - intCheck(b, 2, ALPHABET.length, 'Base'); - - // Allow exponential notation to be used with base 10 argument, while - // also rounding to DECIMAL_PLACES as with other bases. - if (b == 10) { - x = new BigNumber(v); - return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE); - } - - str = String(v); - - if (isNum = typeof v == 'number') { - - // Avoid potential interpretation of Infinity and NaN as base 44+ values. - if (v * 0 != 0) return parseNumeric(x, str, isNum, b); - - x.s = 1 / v < 0 ? (str = str.slice(1), -1) : 1; - - // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}' - if (BigNumber.DEBUG && str.replace(/^0\.0*|\./, '').length > 15) { - throw Error - (tooManyDigits + v); - } - } else { - x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1; - } - - alphabet = ALPHABET.slice(0, b); - e = i = 0; - - // Check that str is a valid base b number. - // Don't use RegExp, so alphabet can contain special characters. - for (len = str.length; i < len; i++) { - if (alphabet.indexOf(c = str.charAt(i)) < 0) { - if (c == '.') { - - // If '.' is not the first character and it has not be found before. - if (i > e) { - e = len; - continue; - } - } else if (!caseChanged) { - - // Allow e.g. hexadecimal 'FF' as well as 'ff'. - if (str == str.toUpperCase() && (str = str.toLowerCase()) || - str == str.toLowerCase() && (str = str.toUpperCase())) { - caseChanged = true; - i = -1; - e = 0; - continue; - } - } - - return parseNumeric(x, String(v), isNum, b); - } - } - - // Prevent later check for length on converted number. - isNum = false; - str = convertBase(str, b, 10, x.s); - - // Decimal point? - if ((e = str.indexOf('.')) > -1) str = str.replace('.', ''); - else e = str.length; - } - - // Determine leading zeros. - for (i = 0; str.charCodeAt(i) === 48; i++); - - // Determine trailing zeros. - for (len = str.length; str.charCodeAt(--len) === 48;); - - if (str = str.slice(i, ++len)) { - len -= i; - - // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}' - if (isNum && BigNumber.DEBUG && - len > 15 && (v > MAX_SAFE_INTEGER || v !== mathfloor(v))) { - throw Error - (tooManyDigits + (x.s * v)); - } - - // Overflow? - if ((e = e - i - 1) > MAX_EXP) { - - // Infinity. - x.c = x.e = null; - - // Underflow? - } else if (e < MIN_EXP) { - - // Zero. - x.c = [x.e = 0]; - } else { - x.e = e; - x.c = []; - - // Transform base - - // e is the base 10 exponent. - // i is where to slice str to get the first element of the coefficient array. - i = (e + 1) % LOG_BASE; - if (e < 0) i += LOG_BASE; // i < 1 - - if (i < len) { - if (i) x.c.push(+str.slice(0, i)); - - for (len -= LOG_BASE; i < len;) { - x.c.push(+str.slice(i, i += LOG_BASE)); - } - - i = LOG_BASE - (str = str.slice(i)).length; - } else { - i -= len; - } - - for (; i--; str += '0'); - x.c.push(+str); - } - } else { - - // Zero. - x.c = [x.e = 0]; - } - } - - - // CONSTRUCTOR PROPERTIES - - - BigNumber.clone = clone; - - BigNumber.ROUND_UP = 0; - BigNumber.ROUND_DOWN = 1; - BigNumber.ROUND_CEIL = 2; - BigNumber.ROUND_FLOOR = 3; - BigNumber.ROUND_HALF_UP = 4; - BigNumber.ROUND_HALF_DOWN = 5; - BigNumber.ROUND_HALF_EVEN = 6; - BigNumber.ROUND_HALF_CEIL = 7; - BigNumber.ROUND_HALF_FLOOR = 8; - BigNumber.EUCLID = 9; - - - /* - * Configure infrequently-changing library-wide settings. - * - * Accept an object with the following optional properties (if the value of a property is - * a number, it must be an integer within the inclusive range stated): - * - * DECIMAL_PLACES {number} 0 to MAX - * ROUNDING_MODE {number} 0 to 8 - * EXPONENTIAL_AT {number|number[]} -MAX to MAX or [-MAX to 0, 0 to MAX] - * RANGE {number|number[]} -MAX to MAX (not zero) or [-MAX to -1, 1 to MAX] - * CRYPTO {boolean} true or false - * MODULO_MODE {number} 0 to 9 - * POW_PRECISION {number} 0 to MAX - * ALPHABET {string} A string of two or more unique characters which does - * not contain '.'. - * FORMAT {object} An object with some of the following properties: - * prefix {string} - * groupSize {number} - * secondaryGroupSize {number} - * groupSeparator {string} - * decimalSeparator {string} - * fractionGroupSize {number} - * fractionGroupSeparator {string} - * suffix {string} - * - * (The values assigned to the above FORMAT object properties are not checked for validity.) - * - * E.g. - * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 }) - * - * Ignore properties/parameters set to null or undefined, except for ALPHABET. - * - * Return an object with the properties current values. - */ - BigNumber.config = BigNumber.set = function (obj) { - var p, v; - - if (obj != null) { - - if (typeof obj == 'object') { - - // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive. - // '[BigNumber Error] DECIMAL_PLACES {not a primitive number|not an integer|out of range}: {v}' - if (obj.hasOwnProperty(p = 'DECIMAL_PLACES')) { - v = obj[p]; - intCheck(v, 0, MAX, p); - DECIMAL_PLACES = v; - } - - // ROUNDING_MODE {number} Integer, 0 to 8 inclusive. - // '[BigNumber Error] ROUNDING_MODE {not a primitive number|not an integer|out of range}: {v}' - if (obj.hasOwnProperty(p = 'ROUNDING_MODE')) { - v = obj[p]; - intCheck(v, 0, 8, p); - ROUNDING_MODE = v; - } - - // EXPONENTIAL_AT {number|number[]} - // Integer, -MAX to MAX inclusive or - // [integer -MAX to 0 inclusive, 0 to MAX inclusive]. - // '[BigNumber Error] EXPONENTIAL_AT {not a primitive number|not an integer|out of range}: {v}' - if (obj.hasOwnProperty(p = 'EXPONENTIAL_AT')) { - v = obj[p]; - if (v && v.pop) { - intCheck(v[0], -MAX, 0, p); - intCheck(v[1], 0, MAX, p); - TO_EXP_NEG = v[0]; - TO_EXP_POS = v[1]; - } else { - intCheck(v, -MAX, MAX, p); - TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v); - } - } - - // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or - // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive]. - // '[BigNumber Error] RANGE {not a primitive number|not an integer|out of range|cannot be zero}: {v}' - if (obj.hasOwnProperty(p = 'RANGE')) { - v = obj[p]; - if (v && v.pop) { - intCheck(v[0], -MAX, -1, p); - intCheck(v[1], 1, MAX, p); - MIN_EXP = v[0]; - MAX_EXP = v[1]; - } else { - intCheck(v, -MAX, MAX, p); - if (v) { - MIN_EXP = -(MAX_EXP = v < 0 ? -v : v); - } else { - throw Error - (bignumberError + p + ' cannot be zero: ' + v); - } - } - } - - // CRYPTO {boolean} true or false. - // '[BigNumber Error] CRYPTO not true or false: {v}' - // '[BigNumber Error] crypto unavailable' - if (obj.hasOwnProperty(p = 'CRYPTO')) { - v = obj[p]; - if (v === !!v) { - if (v) { - if (typeof crypto != 'undefined' && crypto && - (crypto.getRandomValues || crypto.randomBytes)) { - CRYPTO = v; - } else { - CRYPTO = !v; - throw Error - (bignumberError + 'crypto unavailable'); - } - } else { - CRYPTO = v; - } - } else { - throw Error - (bignumberError + p + ' not true or false: ' + v); - } - } - - // MODULO_MODE {number} Integer, 0 to 9 inclusive. - // '[BigNumber Error] MODULO_MODE {not a primitive number|not an integer|out of range}: {v}' - if (obj.hasOwnProperty(p = 'MODULO_MODE')) { - v = obj[p]; - intCheck(v, 0, 9, p); - MODULO_MODE = v; - } - - // POW_PRECISION {number} Integer, 0 to MAX inclusive. - // '[BigNumber Error] POW_PRECISION {not a primitive number|not an integer|out of range}: {v}' - if (obj.hasOwnProperty(p = 'POW_PRECISION')) { - v = obj[p]; - intCheck(v, 0, MAX, p); - POW_PRECISION = v; - } - - // FORMAT {object} - // '[BigNumber Error] FORMAT not an object: {v}' - if (obj.hasOwnProperty(p = 'FORMAT')) { - v = obj[p]; - if (typeof v == 'object') FORMAT = v; - else throw Error - (bignumberError + p + ' not an object: ' + v); - } - - // ALPHABET {string} - // '[BigNumber Error] ALPHABET invalid: {v}' - if (obj.hasOwnProperty(p = 'ALPHABET')) { - v = obj[p]; - - // Disallow if only one character, - // or if it contains '+', '-', '.', whitespace, or a repeated character. - if (typeof v == 'string' && !/^.$|[+-.\s]|(.).*\1/.test(v)) { - ALPHABET = v; - } else { - throw Error - (bignumberError + p + ' invalid: ' + v); - } - } - - } else { - - // '[BigNumber Error] Object expected: {v}' - throw Error - (bignumberError + 'Object expected: ' + obj); - } - } - - return { - DECIMAL_PLACES: DECIMAL_PLACES, - ROUNDING_MODE: ROUNDING_MODE, - EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS], - RANGE: [MIN_EXP, MAX_EXP], - CRYPTO: CRYPTO, - MODULO_MODE: MODULO_MODE, - POW_PRECISION: POW_PRECISION, - FORMAT: FORMAT, - ALPHABET: ALPHABET - }; - }; - - - /* - * Return true if v is a BigNumber instance, otherwise return false. - * - * If BigNumber.DEBUG is true, throw if a BigNumber instance is not well-formed. - * - * v {any} - * - * '[BigNumber Error] Invalid BigNumber: {v}' - */ - BigNumber.isBigNumber = function (v) { - if (!v || v._isBigNumber !== true) return false; - if (!BigNumber.DEBUG) return true; - - var i, n, - c = v.c, - e = v.e, - s = v.s; - - out: if ({}.toString.call(c) == '[object Array]') { - - if ((s === 1 || s === -1) && e >= -MAX && e <= MAX && e === mathfloor(e)) { - - // If the first element is zero, the BigNumber value must be zero. - if (c[0] === 0) { - if (e === 0 && c.length === 1) return true; - break out; - } - - // Calculate number of digits that c[0] should have, based on the exponent. - i = (e + 1) % LOG_BASE; - if (i < 1) i += LOG_BASE; - - // Calculate number of digits of c[0]. - //if (Math.ceil(Math.log(c[0] + 1) / Math.LN10) == i) { - if (String(c[0]).length == i) { - - for (i = 0; i < c.length; i++) { - n = c[i]; - if (n < 0 || n >= BASE || n !== mathfloor(n)) break out; - } - - // Last element cannot be zero, unless it is the only element. - if (n !== 0) return true; - } - } - - // Infinity/NaN - } else if (c === null && e === null && (s === null || s === 1 || s === -1)) { - return true; - } - - throw Error - (bignumberError + 'Invalid BigNumber: ' + v); - }; - - - /* - * Return a new BigNumber whose value is the maximum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.maximum = BigNumber.max = function () { - return maxOrMin(arguments, P.lt); - }; - - - /* - * Return a new BigNumber whose value is the minimum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.minimum = BigNumber.min = function () { - return maxOrMin(arguments, P.gt); - }; - - - /* - * Return a new BigNumber with a random value equal to or greater than 0 and less than 1, - * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing - * zeros are produced). - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * - * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp}' - * '[BigNumber Error] crypto unavailable' - */ - BigNumber.random = (function () { - var pow2_53 = 0x20000000000000; - - // Return a 53 bit integer n, where 0 <= n < 9007199254740992. - // Check if Math.random() produces more than 32 bits of randomness. - // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits. - // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1. - var random53bitInt = (Math.random() * pow2_53) & 0x1fffff - ? function () { return mathfloor(Math.random() * pow2_53); } - : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) + - (Math.random() * 0x800000 | 0); }; - - return function (dp) { - var a, b, e, k, v, - i = 0, - c = [], - rand = new BigNumber(ONE); - - if (dp == null) dp = DECIMAL_PLACES; - else intCheck(dp, 0, MAX); - - k = mathceil(dp / LOG_BASE); - - if (CRYPTO) { - - // Browsers supporting crypto.getRandomValues. - if (crypto.getRandomValues) { - - a = crypto.getRandomValues(new Uint32Array(k *= 2)); - - for (; i < k;) { - - // 53 bits: - // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2) - // 11111 11111111 11111111 11111111 11100000 00000000 00000000 - // ((Math.pow(2, 32) - 1) >>> 11).toString(2) - // 11111 11111111 11111111 - // 0x20000 is 2^21. - v = a[i] * 0x20000 + (a[i + 1] >>> 11); - - // Rejection sampling: - // 0 <= v < 9007199254740992 - // Probability that v >= 9e15, is - // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251 - if (v >= 9e15) { - b = crypto.getRandomValues(new Uint32Array(2)); - a[i] = b[0]; - a[i + 1] = b[1]; - } else { - - // 0 <= v <= 8999999999999999 - // 0 <= (v % 1e14) <= 99999999999999 - c.push(v % 1e14); - i += 2; - } - } - i = k / 2; - - // Node.js supporting crypto.randomBytes. - } else if (crypto.randomBytes) { - - // buffer - a = crypto.randomBytes(k *= 7); - - for (; i < k;) { - - // 0x1000000000000 is 2^48, 0x10000000000 is 2^40 - // 0x100000000 is 2^32, 0x1000000 is 2^24 - // 11111 11111111 11111111 11111111 11111111 11111111 11111111 - // 0 <= v < 9007199254740992 - v = ((a[i] & 31) * 0x1000000000000) + (a[i + 1] * 0x10000000000) + - (a[i + 2] * 0x100000000) + (a[i + 3] * 0x1000000) + - (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6]; - - if (v >= 9e15) { - crypto.randomBytes(7).copy(a, i); - } else { - - // 0 <= (v % 1e14) <= 99999999999999 - c.push(v % 1e14); - i += 7; - } - } - i = k / 7; - } else { - CRYPTO = false; - throw Error - (bignumberError + 'crypto unavailable'); - } - } - - // Use Math.random. - if (!CRYPTO) { - - for (; i < k;) { - v = random53bitInt(); - if (v < 9e15) c[i++] = v % 1e14; - } - } - - k = c[--i]; - dp %= LOG_BASE; - - // Convert trailing digits to zeros according to dp. - if (k && dp) { - v = POWS_TEN[LOG_BASE - dp]; - c[i] = mathfloor(k / v) * v; - } - - // Remove trailing elements which are zero. - for (; c[i] === 0; c.pop(), i--); - - // Zero? - if (i < 0) { - c = [e = 0]; - } else { - - // Remove leading elements which are zero and adjust exponent accordingly. - for (e = -1 ; c[0] === 0; c.splice(0, 1), e -= LOG_BASE); - - // Count the digits of the first element of c to determine leading zeros, and... - for (i = 1, v = c[0]; v >= 10; v /= 10, i++); - - // adjust the exponent accordingly. - if (i < LOG_BASE) e -= LOG_BASE - i; - } - - rand.e = e; - rand.c = c; - return rand; - }; - })(); - - - /* - * Return a BigNumber whose value is the sum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.sum = function () { - var i = 1, - args = arguments, - sum = new BigNumber(args[0]); - for (; i < args.length;) sum = sum.plus(args[i++]); - return sum; - }; - - - // PRIVATE FUNCTIONS - - - // Called by BigNumber and BigNumber.prototype.toString. - convertBase = (function () { - var decimal = '0123456789'; - - /* - * Convert string of baseIn to an array of numbers of baseOut. - * Eg. toBaseOut('255', 10, 16) returns [15, 15]. - * Eg. toBaseOut('ff', 16, 10) returns [2, 5, 5]. - */ - function toBaseOut(str, baseIn, baseOut, alphabet) { - var j, - arr = [0], - arrL, - i = 0, - len = str.length; - - for (; i < len;) { - for (arrL = arr.length; arrL--; arr[arrL] *= baseIn); - - arr[0] += alphabet.indexOf(str.charAt(i++)); - - for (j = 0; j < arr.length; j++) { - - if (arr[j] > baseOut - 1) { - if (arr[j + 1] == null) arr[j + 1] = 0; - arr[j + 1] += arr[j] / baseOut | 0; - arr[j] %= baseOut; - } - } - } - - return arr.reverse(); - } - - // Convert a numeric string of baseIn to a numeric string of baseOut. - // If the caller is toString, we are converting from base 10 to baseOut. - // If the caller is BigNumber, we are converting from baseIn to base 10. - return function (str, baseIn, baseOut, sign, callerIsToString) { - var alphabet, d, e, k, r, x, xc, y, - i = str.indexOf('.'), - dp = DECIMAL_PLACES, - rm = ROUNDING_MODE; - - // Non-integer. - if (i >= 0) { - k = POW_PRECISION; - - // Unlimited precision. - POW_PRECISION = 0; - str = str.replace('.', ''); - y = new BigNumber(baseIn); - x = y.pow(str.length - i); - POW_PRECISION = k; - - // Convert str as if an integer, then restore the fraction part by dividing the - // result by its base raised to a power. - - y.c = toBaseOut(toFixedPoint(coeffToString(x.c), x.e, '0'), - 10, baseOut, decimal); - y.e = y.c.length; - } - - // Convert the number as integer. - - xc = toBaseOut(str, baseIn, baseOut, callerIsToString - ? (alphabet = ALPHABET, decimal) - : (alphabet = decimal, ALPHABET)); - - // xc now represents str as an integer and converted to baseOut. e is the exponent. - e = k = xc.length; - - // Remove trailing zeros. - for (; xc[--k] == 0; xc.pop()); - - // Zero? - if (!xc[0]) return alphabet.charAt(0); - - // Does str represent an integer? If so, no need for the division. - if (i < 0) { - --e; - } else { - x.c = xc; - x.e = e; - - // The sign is needed for correct rounding. - x.s = sign; - x = div(x, y, dp, rm, baseOut); - xc = x.c; - r = x.r; - e = x.e; - } - - // xc now represents str converted to baseOut. - - // THe index of the rounding digit. - d = e + dp + 1; - - // The rounding digit: the digit to the right of the digit that may be rounded up. - i = xc[d]; - - // Look at the rounding digits and mode to determine whether to round up. - - k = baseOut / 2; - r = r || d < 0 || xc[d + 1] != null; - - r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2)) - : i > k || i == k &&(rm == 4 || r || rm == 6 && xc[d - 1] & 1 || - rm == (x.s < 0 ? 8 : 7)); - - // If the index of the rounding digit is not greater than zero, or xc represents - // zero, then the result of the base conversion is zero or, if rounding up, a value - // such as 0.00001. - if (d < 1 || !xc[0]) { - - // 1^-dp or 0 - str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0); - } else { - - // Truncate xc to the required number of decimal places. - xc.length = d; - - // Round up? - if (r) { - - // Rounding up may mean the previous digit has to be rounded up and so on. - for (--baseOut; ++xc[--d] > baseOut;) { - xc[d] = 0; - - if (!d) { - ++e; - xc = [1].concat(xc); - } - } - } - - // Determine trailing zeros. - for (k = xc.length; !xc[--k];); - - // E.g. [4, 11, 15] becomes 4bf. - for (i = 0, str = ''; i <= k; str += alphabet.charAt(xc[i++])); - - // Add leading zeros, decimal point and trailing zeros as required. - str = toFixedPoint(str, e, alphabet.charAt(0)); - } - - // The caller will add the sign. - return str; - }; - })(); - - - // Perform division in the specified base. Called by div and convertBase. - div = (function () { - - // Assume non-zero x and k. - function multiply(x, k, base) { - var m, temp, xlo, xhi, - carry = 0, - i = x.length, - klo = k % SQRT_BASE, - khi = k / SQRT_BASE | 0; - - for (x = x.slice(); i--;) { - xlo = x[i] % SQRT_BASE; - xhi = x[i] / SQRT_BASE | 0; - m = khi * xlo + xhi * klo; - temp = klo * xlo + ((m % SQRT_BASE) * SQRT_BASE) + carry; - carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi; - x[i] = temp % base; - } - - if (carry) x = [carry].concat(x); - - return x; - } - - function compare(a, b, aL, bL) { - var i, cmp; - - if (aL != bL) { - cmp = aL > bL ? 1 : -1; - } else { - - for (i = cmp = 0; i < aL; i++) { - - if (a[i] != b[i]) { - cmp = a[i] > b[i] ? 1 : -1; - break; - } - } - } - - return cmp; - } - - function subtract(a, b, aL, base) { - var i = 0; - - // Subtract b from a. - for (; aL--;) { - a[aL] -= i; - i = a[aL] < b[aL] ? 1 : 0; - a[aL] = i * base + a[aL] - b[aL]; - } - - // Remove leading zeros. - for (; !a[0] && a.length > 1; a.splice(0, 1)); - } - - // x: dividend, y: divisor. - return function (x, y, dp, rm, base) { - var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0, - yL, yz, - s = x.s == y.s ? 1 : -1, - xc = x.c, - yc = y.c; - - // Either NaN, Infinity or 0? - if (!xc || !xc[0] || !yc || !yc[0]) { - - return new BigNumber( - - // Return NaN if either NaN, or both Infinity or 0. - !x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN : - - // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0. - xc && xc[0] == 0 || !yc ? s * 0 : s / 0 - ); - } - - q = new BigNumber(s); - qc = q.c = []; - e = x.e - y.e; - s = dp + e + 1; - - if (!base) { - base = BASE; - e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE); - s = s / LOG_BASE | 0; - } - - // Result exponent may be one less then the current value of e. - // The coefficients of the BigNumbers from convertBase may have trailing zeros. - for (i = 0; yc[i] == (xc[i] || 0); i++); - - if (yc[i] > (xc[i] || 0)) e--; - - if (s < 0) { - qc.push(1); - more = true; - } else { - xL = xc.length; - yL = yc.length; - i = 0; - s += 2; - - // Normalise xc and yc so highest order digit of yc is >= base / 2. - - n = mathfloor(base / (yc[0] + 1)); - - // Not necessary, but to handle odd bases where yc[0] == (base / 2) - 1. - // if (n > 1 || n++ == 1 && yc[0] < base / 2) { - if (n > 1) { - yc = multiply(yc, n, base); - xc = multiply(xc, n, base); - yL = yc.length; - xL = xc.length; - } - - xi = yL; - rem = xc.slice(0, yL); - remL = rem.length; - - // Add zeros to make remainder as long as divisor. - for (; remL < yL; rem[remL++] = 0); - yz = yc.slice(); - yz = [0].concat(yz); - yc0 = yc[0]; - if (yc[1] >= base / 2) yc0++; - // Not necessary, but to prevent trial digit n > base, when using base 3. - // else if (base == 3 && yc0 == 1) yc0 = 1 + 1e-15; - - do { - n = 0; - - // Compare divisor and remainder. - cmp = compare(yc, rem, yL, remL); - - // If divisor < remainder. - if (cmp < 0) { - - // Calculate trial digit, n. - - rem0 = rem[0]; - if (yL != remL) rem0 = rem0 * base + (rem[1] || 0); - - // n is how many times the divisor goes into the current remainder. - n = mathfloor(rem0 / yc0); - - // Algorithm: - // product = divisor multiplied by trial digit (n). - // Compare product and remainder. - // If product is greater than remainder: - // Subtract divisor from product, decrement trial digit. - // Subtract product from remainder. - // If product was less than remainder at the last compare: - // Compare new remainder and divisor. - // If remainder is greater than divisor: - // Subtract divisor from remainder, increment trial digit. - - if (n > 1) { - - // n may be > base only when base is 3. - if (n >= base) n = base - 1; - - // product = divisor * trial digit. - prod = multiply(yc, n, base); - prodL = prod.length; - remL = rem.length; - - // Compare product and remainder. - // If product > remainder then trial digit n too high. - // n is 1 too high about 5% of the time, and is not known to have - // ever been more than 1 too high. - while (compare(prod, rem, prodL, remL) == 1) { - n--; - - // Subtract divisor from product. - subtract(prod, yL < prodL ? yz : yc, prodL, base); - prodL = prod.length; - cmp = 1; - } - } else { - - // n is 0 or 1, cmp is -1. - // If n is 0, there is no need to compare yc and rem again below, - // so change cmp to 1 to avoid it. - // If n is 1, leave cmp as -1, so yc and rem are compared again. - if (n == 0) { - - // divisor < remainder, so n must be at least 1. - cmp = n = 1; - } - - // product = divisor - prod = yc.slice(); - prodL = prod.length; - } - - if (prodL < remL) prod = [0].concat(prod); - - // Subtract product from remainder. - subtract(rem, prod, remL, base); - remL = rem.length; - - // If product was < remainder. - if (cmp == -1) { - - // Compare divisor and new remainder. - // If divisor < new remainder, subtract divisor from remainder. - // Trial digit n too low. - // n is 1 too low about 5% of the time, and very rarely 2 too low. - while (compare(yc, rem, yL, remL) < 1) { - n++; - - // Subtract divisor from remainder. - subtract(rem, yL < remL ? yz : yc, remL, base); - remL = rem.length; - } - } - } else if (cmp === 0) { - n++; - rem = [0]; - } // else cmp === 1 and n will be 0 - - // Add the next digit, n, to the result array. - qc[i++] = n; - - // Update the remainder. - if (rem[0]) { - rem[remL++] = xc[xi] || 0; - } else { - rem = [xc[xi]]; - remL = 1; - } - } while ((xi++ < xL || rem[0] != null) && s--); - - more = rem[0] != null; - - // Leading zero? - if (!qc[0]) qc.splice(0, 1); - } - - if (base == BASE) { - - // To calculate q.e, first get the number of digits of qc[0]. - for (i = 1, s = qc[0]; s >= 10; s /= 10, i++); - - round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more); - - // Caller is convertBase. - } else { - q.e = e; - q.r = +more; - } - - return q; - }; - })(); - - - /* - * Return a string representing the value of BigNumber n in fixed-point or exponential - * notation rounded to the specified decimal places or significant digits. - * - * n: a BigNumber. - * i: the index of the last digit required (i.e. the digit that may be rounded up). - * rm: the rounding mode. - * id: 1 (toExponential) or 2 (toPrecision). - */ - function format(n, i, rm, id) { - var c0, e, ne, len, str; - - if (rm == null) rm = ROUNDING_MODE; - else intCheck(rm, 0, 8); - - if (!n.c) return n.toString(); - - c0 = n.c[0]; - ne = n.e; - - if (i == null) { - str = coeffToString(n.c); - str = id == 1 || id == 2 && (ne <= TO_EXP_NEG || ne >= TO_EXP_POS) - ? toExponential(str, ne) - : toFixedPoint(str, ne, '0'); - } else { - n = round(new BigNumber(n), i, rm); - - // n.e may have changed if the value was rounded up. - e = n.e; - - str = coeffToString(n.c); - len = str.length; - - // toPrecision returns exponential notation if the number of significant digits - // specified is less than the number of digits necessary to represent the integer - // part of the value in fixed-point notation. - - // Exponential notation. - if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) { - - // Append zeros? - for (; len < i; str += '0', len++); - str = toExponential(str, e); - - // Fixed-point notation. - } else { - i -= ne; - str = toFixedPoint(str, e, '0'); - - // Append zeros? - if (e + 1 > len) { - if (--i > 0) for (str += '.'; i--; str += '0'); - } else { - i += e - len; - if (i > 0) { - if (e + 1 == len) str += '.'; - for (; i--; str += '0'); - } - } - } - } - - return n.s < 0 && c0 ? '-' + str : str; - } - - - // Handle BigNumber.max and BigNumber.min. - function maxOrMin(args, method) { - var n, - i = 1, - m = new BigNumber(args[0]); - - for (; i < args.length; i++) { - n = new BigNumber(args[i]); - - // If any number is NaN, return NaN. - if (!n.s) { - m = n; - break; - } else if (method.call(m, n)) { - m = n; - } - } - - return m; - } - - - /* - * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP. - * Called by minus, plus and times. - */ - function normalise(n, c, e) { - var i = 1, - j = c.length; - - // Remove trailing zeros. - for (; !c[--j]; c.pop()); - - // Calculate the base 10 exponent. First get the number of digits of c[0]. - for (j = c[0]; j >= 10; j /= 10, i++); - - // Overflow? - if ((e = i + e * LOG_BASE - 1) > MAX_EXP) { - - // Infinity. - n.c = n.e = null; - - // Underflow? - } else if (e < MIN_EXP) { - - // Zero. - n.c = [n.e = 0]; - } else { - n.e = e; - n.c = c; - } - - return n; - } - - - // Handle values that fail the validity test in BigNumber. - parseNumeric = (function () { - var basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i, - dotAfter = /^([^.]+)\.$/, - dotBefore = /^\.([^.]+)$/, - isInfinityOrNaN = /^-?(Infinity|NaN)$/, - whitespaceOrPlus = /^\s*\+(?=[\w.])|^\s+|\s+$/g; - - return function (x, str, isNum, b) { - var base, - s = isNum ? str : str.replace(whitespaceOrPlus, ''); - - // No exception on ±Infinity or NaN. - if (isInfinityOrNaN.test(s)) { - x.s = isNaN(s) ? null : s < 0 ? -1 : 1; - } else { - if (!isNum) { - - // basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i - s = s.replace(basePrefix, function (m, p1, p2) { - base = (p2 = p2.toLowerCase()) == 'x' ? 16 : p2 == 'b' ? 2 : 8; - return !b || b == base ? p1 : m; - }); - - if (b) { - base = b; - - // E.g. '1.' to '1', '.1' to '0.1' - s = s.replace(dotAfter, '$1').replace(dotBefore, '0.$1'); - } - - if (str != s) return new BigNumber(s, base); - } - - // '[BigNumber Error] Not a number: {n}' - // '[BigNumber Error] Not a base {b} number: {n}' - if (BigNumber.DEBUG) { - throw Error - (bignumberError + 'Not a' + (b ? ' base ' + b : '') + ' number: ' + str); - } - - // NaN - x.s = null; - } - - x.c = x.e = null; - } - })(); - - - /* - * Round x to sd significant digits using rounding mode rm. Check for over/under-flow. - * If r is truthy, it is known that there are more digits after the rounding digit. - */ - function round(x, sd, rm, r) { - var d, i, j, k, n, ni, rd, - xc = x.c, - pows10 = POWS_TEN; - - // if x is not Infinity or NaN... - if (xc) { - - // rd is the rounding digit, i.e. the digit after the digit that may be rounded up. - // n is a base 1e14 number, the value of the element of array x.c containing rd. - // ni is the index of n within x.c. - // d is the number of digits of n. - // i is the index of rd within n including leading zeros. - // j is the actual index of rd within n (if < 0, rd is a leading zero). - out: { - - // Get the number of digits of the first element of xc. - for (d = 1, k = xc[0]; k >= 10; k /= 10, d++); - i = sd - d; - - // If the rounding digit is in the first element of xc... - if (i < 0) { - i += LOG_BASE; - j = sd; - n = xc[ni = 0]; - - // Get the rounding digit at index j of n. - rd = n / pows10[d - j - 1] % 10 | 0; - } else { - ni = mathceil((i + 1) / LOG_BASE); - - if (ni >= xc.length) { - - if (r) { - - // Needed by sqrt. - for (; xc.length <= ni; xc.push(0)); - n = rd = 0; - d = 1; - i %= LOG_BASE; - j = i - LOG_BASE + 1; - } else { - break out; - } - } else { - n = k = xc[ni]; - - // Get the number of digits of n. - for (d = 1; k >= 10; k /= 10, d++); - - // Get the index of rd within n. - i %= LOG_BASE; - - // Get the index of rd within n, adjusted for leading zeros. - // The number of leading zeros of n is given by LOG_BASE - d. - j = i - LOG_BASE + d; - - // Get the rounding digit at index j of n. - rd = j < 0 ? 0 : n / pows10[d - j - 1] % 10 | 0; - } - } - - r = r || sd < 0 || - - // Are there any non-zero digits after the rounding digit? - // The expression n % pows10[d - j - 1] returns all digits of n to the right - // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714. - xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]); - - r = rm < 4 - ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2)) - : rd > 5 || rd == 5 && (rm == 4 || r || rm == 6 && - - // Check whether the digit to the left of the rounding digit is odd. - ((i > 0 ? j > 0 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10) & 1 || - rm == (x.s < 0 ? 8 : 7)); - - if (sd < 1 || !xc[0]) { - xc.length = 0; - - if (r) { - - // Convert sd to decimal places. - sd -= x.e + 1; - - // 1, 0.1, 0.01, 0.001, 0.0001 etc. - xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE]; - x.e = -sd || 0; - } else { - - // Zero. - xc[0] = x.e = 0; - } - - return x; - } - - // Remove excess digits. - if (i == 0) { - xc.length = ni; - k = 1; - ni--; - } else { - xc.length = ni + 1; - k = pows10[LOG_BASE - i]; - - // E.g. 56700 becomes 56000 if 7 is the rounding digit. - // j > 0 means i > number of leading zeros of n. - xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0; - } - - // Round up? - if (r) { - - for (; ;) { - - // If the digit to be rounded up is in the first element of xc... - if (ni == 0) { - - // i will be the length of xc[0] before k is added. - for (i = 1, j = xc[0]; j >= 10; j /= 10, i++); - j = xc[0] += k; - for (k = 1; j >= 10; j /= 10, k++); - - // if i != k the length has increased. - if (i != k) { - x.e++; - if (xc[0] == BASE) xc[0] = 1; - } - - break; - } else { - xc[ni] += k; - if (xc[ni] != BASE) break; - xc[ni--] = 0; - k = 1; - } - } - } - - // Remove trailing zeros. - for (i = xc.length; xc[--i] === 0; xc.pop()); - } - - // Overflow? Infinity. - if (x.e > MAX_EXP) { - x.c = x.e = null; - - // Underflow? Zero. - } else if (x.e < MIN_EXP) { - x.c = [x.e = 0]; - } - } - - return x; - } - - - function valueOf(n) { - var str, - e = n.e; - - if (e === null) return n.toString(); - - str = coeffToString(n.c); - - str = e <= TO_EXP_NEG || e >= TO_EXP_POS - ? toExponential(str, e) - : toFixedPoint(str, e, '0'); - - return n.s < 0 ? '-' + str : str; - } - - - // PROTOTYPE/INSTANCE METHODS - - - /* - * Return a new BigNumber whose value is the absolute value of this BigNumber. - */ - P.absoluteValue = P.abs = function () { - var x = new BigNumber(this); - if (x.s < 0) x.s = 1; - return x; - }; - - - /* - * Return - * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b), - * -1 if the value of this BigNumber is less than the value of BigNumber(y, b), - * 0 if they have the same value, - * or null if the value of either is NaN. - */ - P.comparedTo = function (y, b) { - return compare(this, new BigNumber(y, b)); - }; - - - /* - * If dp is undefined or null or true or false, return the number of decimal places of the - * value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN. - * - * Otherwise, if dp is a number, return a new BigNumber whose value is the value of this - * BigNumber rounded to a maximum of dp decimal places using rounding mode rm, or - * ROUNDING_MODE if rm is omitted. - * - * [dp] {number} Decimal places: integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}' - */ - P.decimalPlaces = P.dp = function (dp, rm) { - var c, n, v, - x = this; - - if (dp != null) { - intCheck(dp, 0, MAX); - if (rm == null) rm = ROUNDING_MODE; - else intCheck(rm, 0, 8); - - return round(new BigNumber(x), dp + x.e + 1, rm); - } - - if (!(c = x.c)) return null; - n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE; - - // Subtract the number of trailing zeros of the last number. - if (v = c[v]) for (; v % 10 == 0; v /= 10, n--); - if (n < 0) n = 0; - - return n; - }; - - - /* - * n / 0 = I - * n / N = N - * n / I = 0 - * 0 / n = 0 - * 0 / 0 = N - * 0 / N = N - * 0 / I = 0 - * N / n = N - * N / 0 = N - * N / N = N - * N / I = N - * I / n = I - * I / 0 = I - * I / N = N - * I / I = N - * - * Return a new BigNumber whose value is the value of this BigNumber divided by the value of - * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE. - */ - P.dividedBy = P.div = function (y, b) { - return div(this, new BigNumber(y, b), DECIMAL_PLACES, ROUNDING_MODE); - }; - - - /* - * Return a new BigNumber whose value is the integer part of dividing the value of this - * BigNumber by the value of BigNumber(y, b). - */ - P.dividedToIntegerBy = P.idiv = function (y, b) { - return div(this, new BigNumber(y, b), 0, 1); - }; - - - /* - * Return a BigNumber whose value is the value of this BigNumber exponentiated by n. - * - * If m is present, return the result modulo m. - * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE. - * If POW_PRECISION is non-zero and m is not present, round to POW_PRECISION using ROUNDING_MODE. - * - * The modular power operation works efficiently when x, n, and m are integers, otherwise it - * is equivalent to calculating x.exponentiatedBy(n).modulo(m) with a POW_PRECISION of 0. - * - * n {number|string|BigNumber} The exponent. An integer. - * [m] {number|string|BigNumber} The modulus. - * - * '[BigNumber Error] Exponent not an integer: {n}' - */ - P.exponentiatedBy = P.pow = function (n, m) { - var half, isModExp, i, k, more, nIsBig, nIsNeg, nIsOdd, y, - x = this; - - n = new BigNumber(n); - - // Allow NaN and ±Infinity, but not other non-integers. - if (n.c && !n.isInteger()) { - throw Error - (bignumberError + 'Exponent not an integer: ' + valueOf(n)); - } - - if (m != null) m = new BigNumber(m); - - // Exponent of MAX_SAFE_INTEGER is 15. - nIsBig = n.e > 14; - - // If x is NaN, ±Infinity, ±0 or ±1, or n is ±Infinity, NaN or ±0. - if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) { - - // The sign of the result of pow when x is negative depends on the evenness of n. - // If +n overflows to ±Infinity, the evenness of n would be not be known. - y = new BigNumber(Math.pow(+valueOf(x), nIsBig ? 2 - isOdd(n) : +valueOf(n))); - return m ? y.mod(m) : y; - } - - nIsNeg = n.s < 0; - - if (m) { - - // x % m returns NaN if abs(m) is zero, or m is NaN. - if (m.c ? !m.c[0] : !m.s) return new BigNumber(NaN); - - isModExp = !nIsNeg && x.isInteger() && m.isInteger(); - - if (isModExp) x = x.mod(m); - - // Overflow to ±Infinity: >=2**1e10 or >=1.0000024**1e15. - // Underflow to ±0: <=0.79**1e10 or <=0.9999975**1e15. - } else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0 - // [1, 240000000] - ? x.c[0] > 1 || nIsBig && x.c[1] >= 24e7 - // [80000000000000] [99999750000000] - : x.c[0] < 8e13 || nIsBig && x.c[0] <= 9999975e7))) { - - // If x is negative and n is odd, k = -0, else k = 0. - k = x.s < 0 && isOdd(n) ? -0 : 0; - - // If x >= 1, k = ±Infinity. - if (x.e > -1) k = 1 / k; - - // If n is negative return ±0, else return ±Infinity. - return new BigNumber(nIsNeg ? 1 / k : k); - - } else if (POW_PRECISION) { - - // Truncating each coefficient array to a length of k after each multiplication - // equates to truncating significant digits to POW_PRECISION + [28, 41], - // i.e. there will be a minimum of 28 guard digits retained. - k = mathceil(POW_PRECISION / LOG_BASE + 2); - } - - if (nIsBig) { - half = new BigNumber(0.5); - if (nIsNeg) n.s = 1; - nIsOdd = isOdd(n); - } else { - i = Math.abs(+valueOf(n)); - nIsOdd = i % 2; - } - - y = new BigNumber(ONE); - - // Performs 54 loop iterations for n of 9007199254740991. - for (; ;) { - - if (nIsOdd) { - y = y.times(x); - if (!y.c) break; - - if (k) { - if (y.c.length > k) y.c.length = k; - } else if (isModExp) { - y = y.mod(m); //y = y.minus(div(y, m, 0, MODULO_MODE).times(m)); - } - } - - if (i) { - i = mathfloor(i / 2); - if (i === 0) break; - nIsOdd = i % 2; - } else { - n = n.times(half); - round(n, n.e + 1, 1); - - if (n.e > 14) { - nIsOdd = isOdd(n); - } else { - i = +valueOf(n); - if (i === 0) break; - nIsOdd = i % 2; - } - } - - x = x.times(x); - - if (k) { - if (x.c && x.c.length > k) x.c.length = k; - } else if (isModExp) { - x = x.mod(m); //x = x.minus(div(x, m, 0, MODULO_MODE).times(m)); - } - } - - if (isModExp) return y; - if (nIsNeg) y = ONE.div(y); - - return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to an integer - * using rounding mode rm, or ROUNDING_MODE if rm is omitted. - * - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {rm}' - */ - P.integerValue = function (rm) { - var n = new BigNumber(this); - if (rm == null) rm = ROUNDING_MODE; - else intCheck(rm, 0, 8); - return round(n, n.e + 1, rm); - }; - - - /* - * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b), - * otherwise return false. - */ - P.isEqualTo = P.eq = function (y, b) { - return compare(this, new BigNumber(y, b)) === 0; - }; - - - /* - * Return true if the value of this BigNumber is a finite number, otherwise return false. - */ - P.isFinite = function () { - return !!this.c; - }; - - - /* - * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b), - * otherwise return false. - */ - P.isGreaterThan = P.gt = function (y, b) { - return compare(this, new BigNumber(y, b)) > 0; - }; - - - /* - * Return true if the value of this BigNumber is greater than or equal to the value of - * BigNumber(y, b), otherwise return false. - */ - P.isGreaterThanOrEqualTo = P.gte = function (y, b) { - return (b = compare(this, new BigNumber(y, b))) === 1 || b === 0; - - }; - - - /* - * Return true if the value of this BigNumber is an integer, otherwise return false. - */ - P.isInteger = function () { - return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2; - }; - - - /* - * Return true if the value of this BigNumber is less than the value of BigNumber(y, b), - * otherwise return false. - */ - P.isLessThan = P.lt = function (y, b) { - return compare(this, new BigNumber(y, b)) < 0; - }; - - - /* - * Return true if the value of this BigNumber is less than or equal to the value of - * BigNumber(y, b), otherwise return false. - */ - P.isLessThanOrEqualTo = P.lte = function (y, b) { - return (b = compare(this, new BigNumber(y, b))) === -1 || b === 0; - }; - - - /* - * Return true if the value of this BigNumber is NaN, otherwise return false. - */ - P.isNaN = function () { - return !this.s; - }; - - - /* - * Return true if the value of this BigNumber is negative, otherwise return false. - */ - P.isNegative = function () { - return this.s < 0; - }; - - - /* - * Return true if the value of this BigNumber is positive, otherwise return false. - */ - P.isPositive = function () { - return this.s > 0; - }; - - - /* - * Return true if the value of this BigNumber is 0 or -0, otherwise return false. - */ - P.isZero = function () { - return !!this.c && this.c[0] == 0; - }; - - - /* - * n - 0 = n - * n - N = N - * n - I = -I - * 0 - n = -n - * 0 - 0 = 0 - * 0 - N = N - * 0 - I = -I - * N - n = N - * N - 0 = N - * N - N = N - * N - I = N - * I - n = I - * I - 0 = I - * I - N = N - * I - I = N - * - * Return a new BigNumber whose value is the value of this BigNumber minus the value of - * BigNumber(y, b). - */ - P.minus = function (y, b) { - var i, j, t, xLTy, - x = this, - a = x.s; - - y = new BigNumber(y, b); - b = y.s; - - // Either NaN? - if (!a || !b) return new BigNumber(NaN); - - // Signs differ? - if (a != b) { - y.s = -b; - return x.plus(y); - } - - var xe = x.e / LOG_BASE, - ye = y.e / LOG_BASE, - xc = x.c, - yc = y.c; - - if (!xe || !ye) { - - // Either Infinity? - if (!xc || !yc) return xc ? (y.s = -b, y) : new BigNumber(yc ? x : NaN); - - // Either zero? - if (!xc[0] || !yc[0]) { - - // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. - return yc[0] ? (y.s = -b, y) : new BigNumber(xc[0] ? x : - - // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity - ROUNDING_MODE == 3 ? -0 : 0); - } - } - - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - - // Determine which is the bigger number. - if (a = xe - ye) { - - if (xLTy = a < 0) { - a = -a; - t = xc; - } else { - ye = xe; - t = yc; - } - - t.reverse(); - - // Prepend zeros to equalise exponents. - for (b = a; b--; t.push(0)); - t.reverse(); - } else { - - // Exponents equal. Check digit by digit. - j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b; - - for (a = b = 0; b < j; b++) { - - if (xc[b] != yc[b]) { - xLTy = xc[b] < yc[b]; - break; - } - } - } - - // x < y? Point xc to the array of the bigger number. - if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s; - - b = (j = yc.length) - (i = xc.length); - - // Append zeros to xc if shorter. - // No need to add zeros to yc if shorter as subtract only needs to start at yc.length. - if (b > 0) for (; b--; xc[i++] = 0); - b = BASE - 1; - - // Subtract yc from xc. - for (; j > a;) { - - if (xc[--j] < yc[j]) { - for (i = j; i && !xc[--i]; xc[i] = b); - --xc[i]; - xc[j] += BASE; - } - - xc[j] -= yc[j]; - } - - // Remove leading zeros and adjust exponent accordingly. - for (; xc[0] == 0; xc.splice(0, 1), --ye); - - // Zero? - if (!xc[0]) { - - // Following IEEE 754 (2008) 6.3, - // n - n = +0 but n - n = -0 when rounding towards -Infinity. - y.s = ROUNDING_MODE == 3 ? -1 : 1; - y.c = [y.e = 0]; - return y; - } - - // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity - // for finite x and y. - return normalise(y, xc, ye); - }; - - - /* - * n % 0 = N - * n % N = N - * n % I = n - * 0 % n = 0 - * -0 % n = -0 - * 0 % 0 = N - * 0 % N = N - * 0 % I = 0 - * N % n = N - * N % 0 = N - * N % N = N - * N % I = N - * I % n = N - * I % 0 = N - * I % N = N - * I % I = N - * - * Return a new BigNumber whose value is the value of this BigNumber modulo the value of - * BigNumber(y, b). The result depends on the value of MODULO_MODE. - */ - P.modulo = P.mod = function (y, b) { - var q, s, - x = this; - - y = new BigNumber(y, b); - - // Return NaN if x is Infinity or NaN, or y is NaN or zero. - if (!x.c || !y.s || y.c && !y.c[0]) { - return new BigNumber(NaN); - - // Return x if y is Infinity or x is zero. - } else if (!y.c || x.c && !x.c[0]) { - return new BigNumber(x); - } - - if (MODULO_MODE == 9) { - - // Euclidian division: q = sign(y) * floor(x / abs(y)) - // r = x - qy where 0 <= r < abs(y) - s = y.s; - y.s = 1; - q = div(x, y, 0, 3); - y.s = s; - q.s *= s; - } else { - q = div(x, y, 0, MODULO_MODE); - } - - y = x.minus(q.times(y)); - - // To match JavaScript %, ensure sign of zero is sign of dividend. - if (!y.c[0] && MODULO_MODE == 1) y.s = x.s; - - return y; - }; - - - /* - * n * 0 = 0 - * n * N = N - * n * I = I - * 0 * n = 0 - * 0 * 0 = 0 - * 0 * N = N - * 0 * I = N - * N * n = N - * N * 0 = N - * N * N = N - * N * I = N - * I * n = I - * I * 0 = N - * I * N = N - * I * I = I - * - * Return a new BigNumber whose value is the value of this BigNumber multiplied by the value - * of BigNumber(y, b). - */ - P.multipliedBy = P.times = function (y, b) { - var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc, - base, sqrtBase, - x = this, - xc = x.c, - yc = (y = new BigNumber(y, b)).c; - - // Either NaN, ±Infinity or ±0? - if (!xc || !yc || !xc[0] || !yc[0]) { - - // Return NaN if either is NaN, or one is 0 and the other is Infinity. - if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) { - y.c = y.e = y.s = null; - } else { - y.s *= x.s; - - // Return ±Infinity if either is ±Infinity. - if (!xc || !yc) { - y.c = y.e = null; - - // Return ±0 if either is ±0. - } else { - y.c = [0]; - y.e = 0; - } - } - - return y; - } - - e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE); - y.s *= x.s; - xcL = xc.length; - ycL = yc.length; - - // Ensure xc points to longer array and xcL to its length. - if (xcL < ycL) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i; - - // Initialise the result array with zeros. - for (i = xcL + ycL, zc = []; i--; zc.push(0)); - - base = BASE; - sqrtBase = SQRT_BASE; - - for (i = ycL; --i >= 0;) { - c = 0; - ylo = yc[i] % sqrtBase; - yhi = yc[i] / sqrtBase | 0; - - for (k = xcL, j = i + k; j > i;) { - xlo = xc[--k] % sqrtBase; - xhi = xc[k] / sqrtBase | 0; - m = yhi * xlo + xhi * ylo; - xlo = ylo * xlo + ((m % sqrtBase) * sqrtBase) + zc[j] + c; - c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi; - zc[j--] = xlo % base; - } - - zc[j] = c; - } - - if (c) { - ++e; - } else { - zc.splice(0, 1); - } - - return normalise(y, zc, e); - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber negated, - * i.e. multiplied by -1. - */ - P.negated = function () { - var x = new BigNumber(this); - x.s = -x.s || null; - return x; - }; - - - /* - * n + 0 = n - * n + N = N - * n + I = I - * 0 + n = n - * 0 + 0 = 0 - * 0 + N = N - * 0 + I = I - * N + n = N - * N + 0 = N - * N + N = N - * N + I = N - * I + n = I - * I + 0 = I - * I + N = N - * I + I = I - * - * Return a new BigNumber whose value is the value of this BigNumber plus the value of - * BigNumber(y, b). - */ - P.plus = function (y, b) { - var t, - x = this, - a = x.s; - - y = new BigNumber(y, b); - b = y.s; - - // Either NaN? - if (!a || !b) return new BigNumber(NaN); - - // Signs differ? - if (a != b) { - y.s = -b; - return x.minus(y); - } - - var xe = x.e / LOG_BASE, - ye = y.e / LOG_BASE, - xc = x.c, - yc = y.c; - - if (!xe || !ye) { - - // Return ±Infinity if either ±Infinity. - if (!xc || !yc) return new BigNumber(a / 0); - - // Either zero? - // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. - if (!xc[0] || !yc[0]) return yc[0] ? y : new BigNumber(xc[0] ? x : a * 0); - } - - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - - // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts. - if (a = xe - ye) { - if (a > 0) { - ye = xe; - t = yc; - } else { - a = -a; - t = xc; - } - - t.reverse(); - for (; a--; t.push(0)); - t.reverse(); - } - - a = xc.length; - b = yc.length; - - // Point xc to the longer array, and b to the shorter length. - if (a - b < 0) t = yc, yc = xc, xc = t, b = a; - - // Only start adding at yc.length - 1 as the further digits of xc can be ignored. - for (a = 0; b;) { - a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0; - xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE; - } - - if (a) { - xc = [a].concat(xc); - ++ye; - } - - // No need to check for zero, as +x + +y != 0 && -x + -y != 0 - // ye = MAX_EXP + 1 possible - return normalise(y, xc, ye); - }; - - - /* - * If sd is undefined or null or true or false, return the number of significant digits of - * the value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN. - * If sd is true include integer-part trailing zeros in the count. - * - * Otherwise, if sd is a number, return a new BigNumber whose value is the value of this - * BigNumber rounded to a maximum of sd significant digits using rounding mode rm, or - * ROUNDING_MODE if rm is omitted. - * - * sd {number|boolean} number: significant digits: integer, 1 to MAX inclusive. - * boolean: whether to count integer-part trailing zeros: true or false. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}' - */ - P.precision = P.sd = function (sd, rm) { - var c, n, v, - x = this; - - if (sd != null && sd !== !!sd) { - intCheck(sd, 1, MAX); - if (rm == null) rm = ROUNDING_MODE; - else intCheck(rm, 0, 8); - - return round(new BigNumber(x), sd, rm); - } - - if (!(c = x.c)) return null; - v = c.length - 1; - n = v * LOG_BASE + 1; - - if (v = c[v]) { - - // Subtract the number of trailing zeros of the last element. - for (; v % 10 == 0; v /= 10, n--); - - // Add the number of digits of the first element. - for (v = c[0]; v >= 10; v /= 10, n++); - } - - if (sd && x.e + 1 > n) n = x.e + 1; - - return n; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber shifted by k places - * (powers of 10). Shift to the right if n > 0, and to the left if n < 0. - * - * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive. - * - * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {k}' - */ - P.shiftedBy = function (k) { - intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER); - return this.times('1e' + k); - }; - - - /* - * sqrt(-n) = N - * sqrt(N) = N - * sqrt(-I) = N - * sqrt(I) = I - * sqrt(0) = 0 - * sqrt(-0) = -0 - * - * Return a new BigNumber whose value is the square root of the value of this BigNumber, - * rounded according to DECIMAL_PLACES and ROUNDING_MODE. - */ - P.squareRoot = P.sqrt = function () { - var m, n, r, rep, t, - x = this, - c = x.c, - s = x.s, - e = x.e, - dp = DECIMAL_PLACES + 4, - half = new BigNumber('0.5'); - - // Negative/NaN/Infinity/zero? - if (s !== 1 || !c || !c[0]) { - return new BigNumber(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0); - } - - // Initial estimate. - s = Math.sqrt(+valueOf(x)); - - // Math.sqrt underflow/overflow? - // Pass x to Math.sqrt as integer, then adjust the exponent of the result. - if (s == 0 || s == 1 / 0) { - n = coeffToString(c); - if ((n.length + e) % 2 == 0) n += '0'; - s = Math.sqrt(+n); - e = bitFloor((e + 1) / 2) - (e < 0 || e % 2); - - if (s == 1 / 0) { - n = '5e' + e; - } else { - n = s.toExponential(); - n = n.slice(0, n.indexOf('e') + 1) + e; - } - - r = new BigNumber(n); - } else { - r = new BigNumber(s + ''); - } - - // Check for zero. - // r could be zero if MIN_EXP is changed after the this value was created. - // This would cause a division by zero (x/t) and hence Infinity below, which would cause - // coeffToString to throw. - if (r.c[0]) { - e = r.e; - s = e + dp; - if (s < 3) s = 0; - - // Newton-Raphson iteration. - for (; ;) { - t = r; - r = half.times(t.plus(div(x, t, dp, 1))); - - if (coeffToString(t.c).slice(0, s) === (n = coeffToString(r.c)).slice(0, s)) { - - // The exponent of r may here be one less than the final result exponent, - // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits - // are indexed correctly. - if (r.e < e) --s; - n = n.slice(s - 3, s + 1); - - // The 4th rounding digit may be in error by -1 so if the 4 rounding digits - // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the - // iteration. - if (n == '9999' || !rep && n == '4999') { - - // On the first iteration only, check to see if rounding up gives the - // exact result as the nines may infinitely repeat. - if (!rep) { - round(t, t.e + DECIMAL_PLACES + 2, 0); - - if (t.times(t).eq(x)) { - r = t; - break; - } - } - - dp += 4; - s += 4; - rep = 1; - } else { - - // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact - // result. If not, then there are further digits and m will be truthy. - if (!+n || !+n.slice(1) && n.charAt(0) == '5') { - - // Truncate to the first rounding digit. - round(r, r.e + DECIMAL_PLACES + 2, 1); - m = !r.times(r).eq(x); - } - - break; - } - } - } - } - - return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m); - }; - - - /* - * Return a string representing the value of this BigNumber in exponential notation and - * rounded using ROUNDING_MODE to dp fixed decimal places. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}' - */ - P.toExponential = function (dp, rm) { - if (dp != null) { - intCheck(dp, 0, MAX); - dp++; - } - return format(this, dp, rm, 1); - }; - - - /* - * Return a string representing the value of this BigNumber in fixed-point notation rounding - * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted. - * - * Note: as with JavaScript's number type, (-0).toFixed(0) is '0', - * but e.g. (-0.00001).toFixed(0) is '-0'. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}' - */ - P.toFixed = function (dp, rm) { - if (dp != null) { - intCheck(dp, 0, MAX); - dp = dp + this.e + 1; - } - return format(this, dp, rm); - }; - - - /* - * Return a string representing the value of this BigNumber in fixed-point notation rounded - * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties - * of the format or FORMAT object (see BigNumber.set). - * - * The formatting object may contain some or all of the properties shown below. - * - * FORMAT = { - * prefix: '', - * groupSize: 3, - * secondaryGroupSize: 0, - * groupSeparator: ',', - * decimalSeparator: '.', - * fractionGroupSize: 0, - * fractionGroupSeparator: '\xA0', // non-breaking space - * suffix: '' - * }; - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * [format] {object} Formatting options. See FORMAT pbject above. - * - * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}' - * '[BigNumber Error] Argument not an object: {format}' - */ - P.toFormat = function (dp, rm, format) { - var str, - x = this; - - if (format == null) { - if (dp != null && rm && typeof rm == 'object') { - format = rm; - rm = null; - } else if (dp && typeof dp == 'object') { - format = dp; - dp = rm = null; - } else { - format = FORMAT; - } - } else if (typeof format != 'object') { - throw Error - (bignumberError + 'Argument not an object: ' + format); - } - - str = x.toFixed(dp, rm); - - if (x.c) { - var i, - arr = str.split('.'), - g1 = +format.groupSize, - g2 = +format.secondaryGroupSize, - groupSeparator = format.groupSeparator || '', - intPart = arr[0], - fractionPart = arr[1], - isNeg = x.s < 0, - intDigits = isNeg ? intPart.slice(1) : intPart, - len = intDigits.length; - - if (g2) i = g1, g1 = g2, g2 = i, len -= i; - - if (g1 > 0 && len > 0) { - i = len % g1 || g1; - intPart = intDigits.substr(0, i); - for (; i < len; i += g1) intPart += groupSeparator + intDigits.substr(i, g1); - if (g2 > 0) intPart += groupSeparator + intDigits.slice(i); - if (isNeg) intPart = '-' + intPart; - } - - str = fractionPart - ? intPart + (format.decimalSeparator || '') + ((g2 = +format.fractionGroupSize) - ? fractionPart.replace(new RegExp('\\d{' + g2 + '}\\B', 'g'), - '$&' + (format.fractionGroupSeparator || '')) - : fractionPart) - : intPart; - } - - return (format.prefix || '') + str + (format.suffix || ''); - }; - - - /* - * Return an array of two BigNumbers representing the value of this BigNumber as a simple - * fraction with an integer numerator and an integer denominator. - * The denominator will be a positive non-zero value less than or equal to the specified - * maximum denominator. If a maximum denominator is not specified, the denominator will be - * the lowest value necessary to represent the number exactly. - * - * [md] {number|string|BigNumber} Integer >= 1, or Infinity. The maximum denominator. - * - * '[BigNumber Error] Argument {not an integer|out of range} : {md}' - */ - P.toFraction = function (md) { - var d, d0, d1, d2, e, exp, n, n0, n1, q, r, s, - x = this, - xc = x.c; - - if (md != null) { - n = new BigNumber(md); - - // Throw if md is less than one or is not an integer, unless it is Infinity. - if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) { - throw Error - (bignumberError + 'Argument ' + - (n.isInteger() ? 'out of range: ' : 'not an integer: ') + valueOf(n)); - } - } - - if (!xc) return new BigNumber(x); - - d = new BigNumber(ONE); - n1 = d0 = new BigNumber(ONE); - d1 = n0 = new BigNumber(ONE); - s = coeffToString(xc); - - // Determine initial denominator. - // d is a power of 10 and the minimum max denominator that specifies the value exactly. - e = d.e = s.length - x.e - 1; - d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp]; - md = !md || n.comparedTo(d) > 0 ? (e > 0 ? d : n1) : n; - - exp = MAX_EXP; - MAX_EXP = 1 / 0; - n = new BigNumber(s); - - // n0 = d1 = 0 - n0.c[0] = 0; - - for (; ;) { - q = div(n, d, 0, 1); - d2 = d0.plus(q.times(d1)); - if (d2.comparedTo(md) == 1) break; - d0 = d1; - d1 = d2; - n1 = n0.plus(q.times(d2 = n1)); - n0 = d2; - d = n.minus(q.times(d2 = d)); - n = d2; - } - - d2 = div(md.minus(d0), d1, 0, 1); - n0 = n0.plus(d2.times(n1)); - d0 = d0.plus(d2.times(d1)); - n0.s = n1.s = x.s; - e = e * 2; - - // Determine which fraction is closer to x, n0/d0 or n1/d1 - r = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo( - div(n0, d0, e, ROUNDING_MODE).minus(x).abs()) < 1 ? [n1, d1] : [n0, d0]; - - MAX_EXP = exp; - - return r; - }; - - - /* - * Return the value of this BigNumber converted to a number primitive. - */ - P.toNumber = function () { - return +valueOf(this); - }; - - - /* - * Return a string representing the value of this BigNumber rounded to sd significant digits - * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits - * necessary to represent the integer part of the value in fixed-point notation, then use - * exponential notation. - * - * [sd] {number} Significant digits. Integer, 1 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}' - */ - P.toPrecision = function (sd, rm) { - if (sd != null) intCheck(sd, 1, MAX); - return format(this, sd, rm, 2); - }; - - - /* - * Return a string representing the value of this BigNumber in base b, or base 10 if b is - * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and - * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent - * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than - * TO_EXP_NEG, return exponential notation. - * - * [b] {number} Integer, 2 to ALPHABET.length inclusive. - * - * '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}' - */ - P.toString = function (b) { - var str, - n = this, - s = n.s, - e = n.e; - - // Infinity or NaN? - if (e === null) { - if (s) { - str = 'Infinity'; - if (s < 0) str = '-' + str; - } else { - str = 'NaN'; - } - } else { - if (b == null) { - str = e <= TO_EXP_NEG || e >= TO_EXP_POS - ? toExponential(coeffToString(n.c), e) - : toFixedPoint(coeffToString(n.c), e, '0'); - } else if (b === 10) { - n = round(new BigNumber(n), DECIMAL_PLACES + e + 1, ROUNDING_MODE); - str = toFixedPoint(coeffToString(n.c), n.e, '0'); - } else { - intCheck(b, 2, ALPHABET.length, 'Base'); - str = convertBase(toFixedPoint(coeffToString(n.c), e, '0'), 10, b, s, true); - } - - if (s < 0 && n.c[0]) str = '-' + str; - } - - return str; - }; - - - /* - * Return as toString, but do not accept a base argument, and include the minus sign for - * negative zero. - */ - P.valueOf = P.toJSON = function () { - return valueOf(this); - }; - - - P._isBigNumber = true; - - P[Symbol.toStringTag] = 'BigNumber'; - - // Node.js v10.12.0+ - P[Symbol.for('nodejs.util.inspect.custom')] = P.valueOf; - - if (configObject != null) BigNumber.set(configObject); - - return BigNumber; -} - - -// PRIVATE HELPER FUNCTIONS - -// These functions don't need access to variables, -// e.g. DECIMAL_PLACES, in the scope of the `clone` function above. - - -function bitFloor(n) { - var i = n | 0; - return n > 0 || n === i ? i : i - 1; -} - - -// Return a coefficient array as a string of base 10 digits. -function coeffToString(a) { - var s, z, - i = 1, - j = a.length, - r = a[0] + ''; - - for (; i < j;) { - s = a[i++] + ''; - z = LOG_BASE - s.length; - for (; z--; s = '0' + s); - r += s; - } - - // Determine trailing zeros. - for (j = r.length; r.charCodeAt(--j) === 48;); - - return r.slice(0, j + 1 || 1); -} - - -// Compare the value of BigNumbers x and y. -function compare(x, y) { - var a, b, - xc = x.c, - yc = y.c, - i = x.s, - j = y.s, - k = x.e, - l = y.e; - - // Either NaN? - if (!i || !j) return null; - - a = xc && !xc[0]; - b = yc && !yc[0]; - - // Either zero? - if (a || b) return a ? b ? 0 : -j : i; - - // Signs differ? - if (i != j) return i; - - a = i < 0; - b = k == l; - - // Either Infinity? - if (!xc || !yc) return b ? 0 : !xc ^ a ? 1 : -1; - - // Compare exponents. - if (!b) return k > l ^ a ? 1 : -1; - - j = (k = xc.length) < (l = yc.length) ? k : l; - - // Compare digit by digit. - for (i = 0; i < j; i++) if (xc[i] != yc[i]) return xc[i] > yc[i] ^ a ? 1 : -1; - - // Compare lengths. - return k == l ? 0 : k > l ^ a ? 1 : -1; -} - - -/* - * Check that n is a primitive number, an integer, and in range, otherwise throw. - */ -function intCheck(n, min, max, name) { - if (n < min || n > max || n !== mathfloor(n)) { - throw Error - (bignumberError + (name || 'Argument') + (typeof n == 'number' - ? n < min || n > max ? ' out of range: ' : ' not an integer: ' - : ' not a primitive number: ') + String(n)); - } -} - - -// Assumes finite n. -function isOdd(n) { - var k = n.c.length - 1; - return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0; -} - - -function toExponential(str, e) { - return (str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str) + - (e < 0 ? 'e' : 'e+') + e; -} - - -function toFixedPoint(str, e, z) { - var len, zs; - - // Negative exponent? - if (e < 0) { - - // Prepend zeros. - for (zs = z + '.'; ++e; zs += z); - str = zs + str; - - // Positive exponent - } else { - len = str.length; - - // Append zeros. - if (++e > len) { - for (zs = z, e -= len; --e; zs += z); - str += zs; - } else if (e < len) { - str = str.slice(0, e) + '.' + str.slice(e); - } - } - - return str; -} - - -// EXPORT - - -export var BigNumber = clone(); - -export default BigNumber; diff --git a/reverse_engineering/node_modules/bignumber.js/doc/API.html b/reverse_engineering/node_modules/bignumber.js/doc/API.html deleted file mode 100644 index c57b5d6..0000000 --- a/reverse_engineering/node_modules/bignumber.js/doc/API.html +++ /dev/null @@ -1,2237 +0,0 @@ - - - - - - -bignumber.js API - - - - - - -
      - -

      bignumber.js

      - -

      A JavaScript library for arbitrary-precision arithmetic.

      -

      Hosted on GitHub.

      - -

      API

      - -

      - See the README on GitHub for a - quick-start introduction. -

      -

      - In all examples below, var and semicolons are not shown, and if a commented-out - value is in quotes it means toString has been called on the preceding expression. -

      - - -

      CONSTRUCTOR

      - - -
      - BigNumberBigNumber(n [, base]) ⇒ BigNumber -
      -

      - n: number|string|BigNumber
      - base: number: integer, 2 to 36 inclusive. (See - ALPHABET to extend this range). -

      -

      - Returns a new instance of a BigNumber object with value n, where n - is a numeric value in the specified base, or base 10 if - base is omitted or is null or undefined. -

      -
      -x = new BigNumber(123.4567)                // '123.4567'
      -// 'new' is optional
      -y = BigNumber(x)                           // '123.4567'
      -

      - If n is a base 10 value it can be in normal (fixed-point) or - exponential notation. Values in other bases must be in normal notation. Values in any base can - have fraction digits, i.e. digits after the decimal point. -

      -
      -new BigNumber(43210)                       // '43210'
      -new BigNumber('4.321e+4')                  // '43210'
      -new BigNumber('-735.0918e-430')            // '-7.350918e-428'
      -new BigNumber('123412421.234324', 5)       // '607236.557696'
      -

      - Signed 0, signed Infinity and NaN are supported. -

      -
      -new BigNumber('-Infinity')                 // '-Infinity'
      -new BigNumber(NaN)                         // 'NaN'
      -new BigNumber(-0)                          // '0'
      -new BigNumber('.5')                        // '0.5'
      -new BigNumber('+2')                        // '2'
      -

      - String values in hexadecimal literal form, e.g. '0xff', are valid, as are - string values with the octal and binary prefixs '0o' and '0b'. - String values in octal literal form without the prefix will be interpreted as - decimals, e.g. '011' is interpreted as 11, not 9. -

      -
      -new BigNumber(-10110100.1, 2)              // '-180.5'
      -new BigNumber('-0b10110100.1')             // '-180.5'
      -new BigNumber('ff.8', 16)                  // '255.5'
      -new BigNumber('0xff.8')                    // '255.5'
      -

      - If a base is specified, n is rounded according to the current - DECIMAL_PLACES and - ROUNDING_MODE settings. This includes base - 10 so don't include a base parameter for decimal values unless - this behaviour is wanted. -

      -
      BigNumber.config({ DECIMAL_PLACES: 5 })
      -new BigNumber(1.23456789)                  // '1.23456789'
      -new BigNumber(1.23456789, 10)              // '1.23457'
      -

      An error is thrown if base is invalid. See Errors.

      -

      - There is no limit to the number of digits of a value of type string (other than - that of JavaScript's maximum array size). See RANGE to set - the maximum and minimum possible exponent value of a BigNumber. -

      -
      -new BigNumber('5032485723458348569331745.33434346346912144534543')
      -new BigNumber('4.321e10000000')
      -

      BigNumber NaN is returned if n is invalid - (unless BigNumber.DEBUG is true, see below).

      -
      -new BigNumber('.1*')                       // 'NaN'
      -new BigNumber('blurgh')                    // 'NaN'
      -new BigNumber(9, 2)                        // 'NaN'
      -

      - To aid in debugging, if BigNumber.DEBUG is true then an error will - be thrown on an invalid n. An error will also be thrown if n is of - type number with more than 15 significant digits, as calling - toString or valueOf on - these numbers may not result in the intended value. -

      -
      -console.log(823456789123456.3)            //  823456789123456.2
      -new BigNumber(823456789123456.3)          // '823456789123456.2'
      -BigNumber.DEBUG = true
      -// '[BigNumber Error] Number primitive has more than 15 significant digits'
      -new BigNumber(823456789123456.3)
      -// '[BigNumber Error] Not a base 2 number'
      -new BigNumber(9, 2)
      -

      - A BigNumber can also be created from an object literal. - Use isBigNumber to check that it is well-formed. -

      -
      new BigNumber({ s: 1, e: 2, c: [ 777, 12300000000000 ], _isBigNumber: true })    // '777.123'
      - - - - -

      Methods

      -

      The static methods of a BigNumber constructor.

      - - - - -
      clone - .clone([object]) ⇒ BigNumber constructor -
      -

      object: object

      -

      - Returns a new independent BigNumber constructor with configuration as described by - object (see config), or with the default - configuration if object is null or undefined. -

      -

      - Throws if object is not an object. See Errors. -

      -
      BigNumber.config({ DECIMAL_PLACES: 5 })
      -BN = BigNumber.clone({ DECIMAL_PLACES: 9 })
      -
      -x = new BigNumber(1)
      -y = new BN(1)
      -
      -x.div(3)                        // 0.33333
      -y.div(3)                        // 0.333333333
      -
      -// BN = BigNumber.clone({ DECIMAL_PLACES: 9 }) is equivalent to:
      -BN = BigNumber.clone()
      -BN.config({ DECIMAL_PLACES: 9 })
      - - - -
      configset([object]) ⇒ object
      -

      - object: object: an object that contains some or all of the following - properties. -

      -

      Configures the settings for this particular BigNumber constructor.

      - -
      -
      DECIMAL_PLACES
      -
      - number: integer, 0 to 1e+9 inclusive
      - Default value: 20 -
      -
      - The maximum number of decimal places of the results of operations involving - division, i.e. division, square root and base conversion operations, and power - operations with negative exponents.
      -
      -
      -
      BigNumber.config({ DECIMAL_PLACES: 5 })
      -BigNumber.set({ DECIMAL_PLACES: 5 })    // equivalent
      -
      - - - -
      ROUNDING_MODE
      -
      - number: integer, 0 to 8 inclusive
      - Default value: 4 (ROUND_HALF_UP) -
      -
      - The rounding mode used in the above operations and the default rounding mode of - decimalPlaces, - precision, - toExponential, - toFixed, - toFormat and - toPrecision. -
      -
      The modes are available as enumerated properties of the BigNumber constructor.
      -
      -
      BigNumber.config({ ROUNDING_MODE: 0 })
      -BigNumber.set({ ROUNDING_MODE: BigNumber.ROUND_UP })    // equivalent
      -
      - - - -
      EXPONENTIAL_AT
      -
      - number: integer, magnitude 0 to 1e+9 inclusive, or -
      - number[]: [ integer -1e+9 to 0 inclusive, integer - 0 to 1e+9 inclusive ]
      - Default value: [-7, 20] -
      -
      - The exponent value(s) at which toString returns exponential notation. -
      -
      - If a single number is assigned, the value is the exponent magnitude.
      - If an array of two numbers is assigned then the first number is the negative exponent - value at and beneath which exponential notation is used, and the second number is the - positive exponent value at and above which the same. -
      -
      - For example, to emulate JavaScript numbers in terms of the exponent values at which they - begin to use exponential notation, use [-7, 20]. -
      -
      -
      BigNumber.config({ EXPONENTIAL_AT: 2 })
      -new BigNumber(12.3)         // '12.3'        e is only 1
      -new BigNumber(123)          // '1.23e+2'
      -new BigNumber(0.123)        // '0.123'       e is only -1
      -new BigNumber(0.0123)       // '1.23e-2'
      -
      -BigNumber.config({ EXPONENTIAL_AT: [-7, 20] })
      -new BigNumber(123456789)    // '123456789'   e is only 8
      -new BigNumber(0.000000123)  // '1.23e-7'
      -
      -// Almost never return exponential notation:
      -BigNumber.config({ EXPONENTIAL_AT: 1e+9 })
      -
      -// Always return exponential notation:
      -BigNumber.config({ EXPONENTIAL_AT: 0 })
      -
      -
      - Regardless of the value of EXPONENTIAL_AT, the toFixed method - will always return a value in normal notation and the toExponential method - will always return a value in exponential form. -
      -
      - Calling toString with a base argument, e.g. toString(10), will - also always return normal notation. -
      - - - -
      RANGE
      -
      - number: integer, magnitude 1 to 1e+9 inclusive, or -
      - number[]: [ integer -1e+9 to -1 inclusive, integer - 1 to 1e+9 inclusive ]
      - Default value: [-1e+9, 1e+9] -
      -
      - The exponent value(s) beyond which overflow to Infinity and underflow to - zero occurs. -
      -
      - If a single number is assigned, it is the maximum exponent magnitude: values wth a - positive exponent of greater magnitude become Infinity and those with a - negative exponent of greater magnitude become zero. -
      - If an array of two numbers is assigned then the first number is the negative exponent - limit and the second number is the positive exponent limit. -
      -
      - For example, to emulate JavaScript numbers in terms of the exponent values at which they - become zero and Infinity, use [-324, 308]. -
      -
      -
      BigNumber.config({ RANGE: 500 })
      -BigNumber.config().RANGE     // [ -500, 500 ]
      -new BigNumber('9.999e499')   // '9.999e+499'
      -new BigNumber('1e500')       // 'Infinity'
      -new BigNumber('1e-499')      // '1e-499'
      -new BigNumber('1e-500')      // '0'
      -
      -BigNumber.config({ RANGE: [-3, 4] })
      -new BigNumber(99999)         // '99999'      e is only 4
      -new BigNumber(100000)        // 'Infinity'   e is 5
      -new BigNumber(0.001)         // '0.01'       e is only -3
      -new BigNumber(0.0001)        // '0'          e is -4
      -
      -
      - The largest possible magnitude of a finite BigNumber is - 9.999...e+1000000000.
      - The smallest possible magnitude of a non-zero BigNumber is 1e-1000000000. -
      - - - -
      CRYPTO
      -
      - boolean: true or false.
      - Default value: false -
      -
      - The value that determines whether cryptographically-secure pseudo-random number - generation is used. -
      -
      - If CRYPTO is set to true then the - random method will generate random digits using - crypto.getRandomValues in browsers that support it, or - crypto.randomBytes if using Node.js. -
      -
      - If neither function is supported by the host environment then attempting to set - CRYPTO to true will fail and an exception will be thrown. -
      -
      - If CRYPTO is false then the source of randomness used will be - Math.random (which is assumed to generate at least 30 bits of - randomness). -
      -
      See random.
      -
      -
      -// Node.js
      -global.crypto = require('crypto')
      -
      -BigNumber.config({ CRYPTO: true })
      -BigNumber.config().CRYPTO       // true
      -BigNumber.random()              // 0.54340758610486147524
      -
      - - - -
      MODULO_MODE
      -
      - number: integer, 0 to 9 inclusive
      - Default value: 1 (ROUND_DOWN) -
      -
      The modulo mode used when calculating the modulus: a mod n.
      -
      - The quotient, q = a / n, is calculated according to the - ROUNDING_MODE that corresponds to the chosen - MODULO_MODE. -
      -
      The remainder, r, is calculated as: r = a - n * q.
      -
      - The modes that are most commonly used for the modulus/remainder operation are shown in - the following table. Although the other rounding modes can be used, they may not give - useful results. -
      -
      -
If you anticipate many results, you can end a stream early to prevent unnecessary processing and API requests.If you anticipate many results, you can end a stream early to prevent unnecessary processing and API requests.If the callback is omitted a Promise will be returnedTo control how many API requests are made and page through the results manually, set `autoPaginate` to `false`.If the callback is omitted, we'll return a Promise.To control how many API requests are made and page through the results manually, set `autoPaginate` to `false`.If the callback is omitted a Promise will be returnedIf the callback is omitted we'll return a Promise.If the callback is omitted we'll return a Promise.If the callback is omitted we'll return a Promise.If the callback is omitted we'll return a Promise.If the callback is omitted we'll return a Promise.If the callback is omitted a Promise will be returnedIf the callback is omitted a Promise will be returnedIf the callback is omitted a Promise will be returnedIf the callback is omitted a Promise will be returnedIf the callback is omitted a Promise will be returnedIf the callback is omitted a Promise will be returned
- - - - - - - - - - - - - - - - - - - - - -
PropertyValueDescription
ROUND_UP0 - The remainder is positive if the dividend is negative, otherwise it is negative. -
ROUND_DOWN1 - The remainder has the same sign as the dividend.
- This uses 'truncating division' and matches the behaviour of JavaScript's - remainder operator %. -
ROUND_FLOOR3 - The remainder has the same sign as the divisor.
- This matches Python's % operator. -
ROUND_HALF_EVEN6The IEEE 754 remainder function.
EUCLID9 - The remainder is always positive. Euclidian division:
- q = sign(n) * floor(a / abs(n)) -
- -

- The rounding/modulo modes are available as enumerated properties of the BigNumber - constructor. -
-
See modulo.
-
-
BigNumber.config({ MODULO_MODE: BigNumber.EUCLID })
-BigNumber.config({ MODULO_MODE: 9 })          // equivalent
-
- - - -
POW_PRECISION
-
- number: integer, 0 to 1e+9 inclusive.
- Default value: 0 -
-
- The maximum precision, i.e. number of significant digits, of the result of the power - operation (unless a modulus is specified). -
-
If set to 0, the number of significant digits will not be limited.
-
See exponentiatedBy.
-
BigNumber.config({ POW_PRECISION: 100 })
- - - -
FORMAT
-
object
-
- The FORMAT object configures the format of the string returned by the - toFormat method. -
-
- The example below shows the properties of the FORMAT object that are - recognised, and their default values. -
-
- Unlike the other configuration properties, the values of the properties of the - FORMAT object will not be checked for validity. The existing - FORMAT object will simply be replaced by the object that is passed in. - The object can include any number of the properties shown below. -
-
See toFormat for examples of usage.
-
-
-BigNumber.config({
-  FORMAT: {
-    // string to prepend
-    prefix: '',
-    // decimal separator
-    decimalSeparator: '.',
-    // grouping separator of the integer part
-    groupSeparator: ',',
-    // primary grouping size of the integer part
-    groupSize: 3,
-    // secondary grouping size of the integer part
-    secondaryGroupSize: 0,
-    // grouping separator of the fraction part
-    fractionGroupSeparator: ' ',
-    // grouping size of the fraction part
-    fractionGroupSize: 0,
-    // string to append
-    suffix: ''
-  }
-});
-
- - - -
ALPHABET
-
- string
- Default value: '0123456789abcdefghijklmnopqrstuvwxyz' -
-
- The alphabet used for base conversion. The length of the alphabet corresponds to the - maximum value of the base argument that can be passed to the - BigNumber constructor or - toString. -
-
- There is no maximum length for the alphabet, but it must be at least 2 characters long, and - it must not contain whitespace or a repeated character, or the sign indicators - '+' and '-', or the decimal separator '.'. -
-
-
// duodecimal (base 12)
-BigNumber.config({ ALPHABET: '0123456789TE' })
-x = new BigNumber('T', 12)
-x.toString()                // '10'
-x.toString(12)              // 'T'
-
- - - - -

-

Returns an object with the above properties and their current values.

-

- Throws if object is not an object, or if an invalid value is assigned to - one or more of the above properties. See Errors. -

-
-BigNumber.config({
-  DECIMAL_PLACES: 40,
-  ROUNDING_MODE: BigNumber.ROUND_HALF_CEIL,
-  EXPONENTIAL_AT: [-10, 20],
-  RANGE: [-500, 500],
-  CRYPTO: true,
-  MODULO_MODE: BigNumber.ROUND_FLOOR,
-  POW_PRECISION: 80,
-  FORMAT: {
-    groupSize: 3,
-    groupSeparator: ' ',
-    decimalSeparator: ','
-  },
-  ALPHABET: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_'
-});
-
-obj = BigNumber.config();
-obj.DECIMAL_PLACES        // 40
-obj.RANGE                 // [-500, 500]
- - - -
- isBigNumber.isBigNumber(value) ⇒ boolean -
-

value: any

-

- Returns true if value is a BigNumber instance, otherwise returns - false. -

-
x = 42
-y = new BigNumber(x)
-
-BigNumber.isBigNumber(x)             // false
-y instanceof BigNumber               // true
-BigNumber.isBigNumber(y)             // true
-
-BN = BigNumber.clone();
-z = new BN(x)
-z instanceof BigNumber               // false
-BigNumber.isBigNumber(z)             // true
-

- If value is a BigNumber instance and BigNumber.DEBUG is true, - then this method will also check if value is well-formed, and throw if it is not. - See Errors. -

-

- The check can be useful if creating a BigNumber from an object literal. - See BigNumber. -

-
-x = new BigNumber(10)
-
-// Change x.c to an illegitimate value.
-x.c = NaN
-
-BigNumber.DEBUG = false
-
-// No error.
-BigNumber.isBigNumber(x)    // true
-
-BigNumber.DEBUG = true
-
-// Error.
-BigNumber.isBigNumber(x)    // '[BigNumber Error] Invalid BigNumber'
- - - -
maximum.max(n...) ⇒ BigNumber
-

- n: number|string|BigNumber
- See BigNumber for further parameter details. -

-

- Returns a BigNumber whose value is the maximum of the arguments. -

-

The return value is always exact and unrounded.

-
x = new BigNumber('3257869345.0378653')
-BigNumber.maximum(4e9, x, '123456789.9')      // '4000000000'
-
-arr = [12, '13', new BigNumber(14)]
-BigNumber.max.apply(null, arr)                // '14'
- - - -
minimum.min(n...) ⇒ BigNumber
-

- n: number|string|BigNumber
- See BigNumber for further parameter details. -

-

- Returns a BigNumber whose value is the minimum of the arguments. -

-

The return value is always exact and unrounded.

-
x = new BigNumber('3257869345.0378653')
-BigNumber.minimum(4e9, x, '123456789.9')      // '123456789.9'
-
-arr = [2, new BigNumber(-14), '-15.9999', -12]
-BigNumber.min.apply(null, arr)                // '-15.9999'
- - - -
- random.random([dp]) ⇒ BigNumber -
-

dp: number: integer, 0 to 1e+9 inclusive

-

- Returns a new BigNumber with a pseudo-random value equal to or greater than 0 and - less than 1. -

-

- The return value will have dp decimal places (or less if trailing zeros are - produced).
- If dp is omitted then the number of decimal places will default to the current - DECIMAL_PLACES setting. -

-

- Depending on the value of this BigNumber constructor's - CRYPTO setting and the support for the - crypto object in the host environment, the random digits of the return value are - generated by either Math.random (fastest), crypto.getRandomValues - (Web Cryptography API in recent browsers) or crypto.randomBytes (Node.js). -

-

- To be able to set CRYPTO to true when using - Node.js, the crypto object must be available globally: -

-
global.crypto = require('crypto')
-

- If CRYPTO is true, i.e. one of the - crypto methods is to be used, the value of a returned BigNumber should be - cryptographically-secure and statistically indistinguishable from a random value. -

-

- Throws if dp is invalid. See Errors. -

-
BigNumber.config({ DECIMAL_PLACES: 10 })
-BigNumber.random()              // '0.4117936847'
-BigNumber.random(20)            // '0.78193327636914089009'
- - - -
sum.sum(n...) ⇒ BigNumber
-

- n: number|string|BigNumber
- See BigNumber for further parameter details. -

-

Returns a BigNumber whose value is the sum of the arguments.

-

The return value is always exact and unrounded.

-
x = new BigNumber('3257869345.0378653')
-BigNumber.sum(4e9, x, '123456789.9')      // '7381326134.9378653'
-
-arr = [2, new BigNumber(14), '15.9999', 12]
-BigNumber.sum.apply(null, arr)            // '43.9999'
- - - -

Properties

-

- The library's enumerated rounding modes are stored as properties of the constructor.
- (They are not referenced internally by the library itself.) -

-

- Rounding modes 0 to 6 (inclusive) are the same as those of Java's - BigDecimal class. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropertyValueDescription
ROUND_UP0Rounds away from zero
ROUND_DOWN1Rounds towards zero
ROUND_CEIL2Rounds towards Infinity
ROUND_FLOOR3Rounds towards -Infinity
ROUND_HALF_UP4 - Rounds towards nearest neighbour.
- If equidistant, rounds away from zero -
ROUND_HALF_DOWN5 - Rounds towards nearest neighbour.
- If equidistant, rounds towards zero -
ROUND_HALF_EVEN6 - Rounds towards nearest neighbour.
- If equidistant, rounds towards even neighbour -
ROUND_HALF_CEIL7 - Rounds towards nearest neighbour.
- If equidistant, rounds towards Infinity -
ROUND_HALF_FLOOR8 - Rounds towards nearest neighbour.
- If equidistant, rounds towards -Infinity -
-
-BigNumber.config({ ROUNDING_MODE: BigNumber.ROUND_CEIL })
-BigNumber.config({ ROUNDING_MODE: 2 })     // equivalent
- -
DEBUG
-

undefined|false|true

-

- If BigNumber.DEBUG is set true then an error will be thrown - if this BigNumber constructor receives an invalid value, such as - a value of type number with more than 15 significant digits. - See BigNumber. -

-

- An error will also be thrown if the isBigNumber - method receives a BigNumber that is not well-formed. - See isBigNumber. -

-
BigNumber.DEBUG = true
- - -

INSTANCE

- - -

Methods

-

The methods inherited by a BigNumber instance from its constructor's prototype object.

-

A BigNumber is immutable in the sense that it is not changed by its methods.

-

- The treatment of ±0, ±Infinity and NaN is - consistent with how JavaScript treats these values. -

-

Many method names have a shorter alias.

- - - -
absoluteValue.abs() ⇒ BigNumber
-

- Returns a BigNumber whose value is the absolute value, i.e. the magnitude, of the value of - this BigNumber. -

-

The return value is always exact and unrounded.

-
-x = new BigNumber(-0.8)
-y = x.absoluteValue()           // '0.8'
-z = y.abs()                     // '0.8'
- - - -
- comparedTo.comparedTo(n [, base]) ⇒ number -
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

- - - - - - - - - - - - - - - - - - -
Returns 
1If the value of this BigNumber is greater than the value of n
-1If the value of this BigNumber is less than the value of n
0If this BigNumber and n have the same value
nullIf the value of either this BigNumber or n is NaN
-
-x = new BigNumber(Infinity)
-y = new BigNumber(5)
-x.comparedTo(y)                 // 1
-x.comparedTo(x.minus(1))        // 0
-y.comparedTo(NaN)               // null
-y.comparedTo('110', 2)          // -1
- - - -
- decimalPlaces.dp([dp [, rm]]) ⇒ BigNumber|number -
-

- dp: number: integer, 0 to 1e+9 inclusive
- rm: number: integer, 0 to 8 inclusive -

-

- If dp is a number, returns a BigNumber whose value is the value of this BigNumber - rounded by rounding mode rm to a maximum of dp decimal places. -

-

- If dp is omitted, or is null or undefined, the return - value is the number of decimal places of the value of this BigNumber, or null if - the value of this BigNumber is ±Infinity or NaN. -

-

- If rm is omitted, or is null or undefined, - ROUNDING_MODE is used. -

-

- Throws if dp or rm is invalid. See Errors. -

-
-x = new BigNumber(1234.56)
-x.decimalPlaces(1)                     // '1234.6'
-x.dp()                                 // 2
-x.decimalPlaces(2)                     // '1234.56'
-x.dp(10)                               // '1234.56'
-x.decimalPlaces(0, 1)                  // '1234'
-x.dp(0, 6)                             // '1235'
-x.decimalPlaces(1, 1)                  // '1234.5'
-x.dp(1, BigNumber.ROUND_HALF_EVEN)     // '1234.6'
-x                                      // '1234.56'
-y = new BigNumber('9.9e-101')
-y.dp()                                 // 102
- - - -
dividedBy.div(n [, base]) ⇒ BigNumber -
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

- Returns a BigNumber whose value is the value of this BigNumber divided by - n, rounded according to the current - DECIMAL_PLACES and - ROUNDING_MODE settings. -

-
-x = new BigNumber(355)
-y = new BigNumber(113)
-x.dividedBy(y)                  // '3.14159292035398230088'
-x.div(5)                        // '71'
-x.div(47, 16)                   // '5'
- - - -
- dividedToIntegerBy.idiv(n [, base]) ⇒ - BigNumber -
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

- Returns a BigNumber whose value is the integer part of dividing the value of this BigNumber by - n. -

-
-x = new BigNumber(5)
-y = new BigNumber(3)
-x.dividedToIntegerBy(y)         // '1'
-x.idiv(0.7)                     // '7'
-x.idiv('0.f', 16)               // '5'
- - - -
- exponentiatedBy.pow(n [, m]) ⇒ BigNumber -
-

- n: number|string|BigNumber: integer
- m: number|string|BigNumber -

-

- Returns a BigNumber whose value is the value of this BigNumber exponentiated by - n, i.e. raised to the power n, and optionally modulo a modulus - m. -

-

- Throws if n is not an integer. See Errors. -

-

- If n is negative the result is rounded according to the current - DECIMAL_PLACES and - ROUNDING_MODE settings. -

-

- As the number of digits of the result of the power operation can grow so large so quickly, - e.g. 123.45610000 has over 50000 digits, the number of significant - digits calculated is limited to the value of the - POW_PRECISION setting (unless a modulus - m is specified). -

-

- By default POW_PRECISION is set to 0. - This means that an unlimited number of significant digits will be calculated, and that the - method's performance will decrease dramatically for larger exponents. -

-

- If m is specified and the value of m, n and this - BigNumber are integers, and n is positive, then a fast modular exponentiation - algorithm is used, otherwise the operation will be performed as - x.exponentiatedBy(n).modulo(m) with a - POW_PRECISION of 0. -

-
-Math.pow(0.7, 2)                // 0.48999999999999994
-x = new BigNumber(0.7)
-x.exponentiatedBy(2)            // '0.49'
-BigNumber(3).pow(-2)            // '0.11111111111111111111'
- - - -
- integerValue.integerValue([rm]) ⇒ BigNumber -
-

- rm: number: integer, 0 to 8 inclusive -

-

- Returns a BigNumber whose value is the value of this BigNumber rounded to an integer using - rounding mode rm. -

-

- If rm is omitted, or is null or undefined, - ROUNDING_MODE is used. -

-

- Throws if rm is invalid. See Errors. -

-
-x = new BigNumber(123.456)
-x.integerValue()                        // '123'
-x.integerValue(BigNumber.ROUND_CEIL)    // '124'
-y = new BigNumber(-12.7)
-y.integerValue()                        // '-13'
-y.integerValue(BigNumber.ROUND_DOWN)    // '-12'
-

- The following is an example of how to add a prototype method that emulates JavaScript's - Math.round function. Math.ceil, Math.floor and - Math.trunc can be emulated in the same way with - BigNumber.ROUND_CEIL, BigNumber.ROUND_FLOOR and - BigNumber.ROUND_DOWN respectively. -

-
-BigNumber.prototype.round = function (n) {
-  return n.integerValue(BigNumber.ROUND_HALF_CEIL);
-};
-x.round()                               // '123'
- - - -
isEqualTo.eq(n [, base]) ⇒ boolean
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

- Returns true if the value of this BigNumber is equal to the value of - n, otherwise returns false.
- As with JavaScript, NaN does not equal NaN. -

-

Note: This method uses the comparedTo method internally.

-
-0 === 1e-324                    // true
-x = new BigNumber(0)
-x.isEqualTo('1e-324')           // false
-BigNumber(-0).eq(x)             // true  ( -0 === 0 )
-BigNumber(255).eq('ff', 16)     // true
-
-y = new BigNumber(NaN)
-y.isEqualTo(NaN)                // false
- - - -
isFinite.isFinite() ⇒ boolean
-

- Returns true if the value of this BigNumber is a finite number, otherwise - returns false. -

-

- The only possible non-finite values of a BigNumber are NaN, Infinity - and -Infinity. -

-
-x = new BigNumber(1)
-x.isFinite()                    // true
-y = new BigNumber(Infinity)
-y.isFinite()                    // false
-

- Note: The native method isFinite() can be used if - n <= Number.MAX_VALUE. -

- - - -
isGreaterThan.gt(n [, base]) ⇒ boolean
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

- Returns true if the value of this BigNumber is greater than the value of - n, otherwise returns false. -

-

Note: This method uses the comparedTo method internally.

-
-0.1 > (0.3 - 0.2)                             // true
-x = new BigNumber(0.1)
-x.isGreaterThan(BigNumber(0.3).minus(0.2))    // false
-BigNumber(0).gt(x)                            // false
-BigNumber(11, 3).gt(11.1, 2)                  // true
- - - -
- isGreaterThanOrEqualTo.gte(n [, base]) ⇒ boolean -
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

- Returns true if the value of this BigNumber is greater than or equal to the value - of n, otherwise returns false. -

-

Note: This method uses the comparedTo method internally.

-
-(0.3 - 0.2) >= 0.1                     // false
-x = new BigNumber(0.3).minus(0.2)
-x.isGreaterThanOrEqualTo(0.1)          // true
-BigNumber(1).gte(x)                    // true
-BigNumber(10, 18).gte('i', 36)         // true
- - - -
isInteger.isInteger() ⇒ boolean
-

- Returns true if the value of this BigNumber is an integer, otherwise returns - false. -

-
-x = new BigNumber(1)
-x.isInteger()                   // true
-y = new BigNumber(123.456)
-y.isInteger()                   // false
- - - -
isLessThan.lt(n [, base]) ⇒ boolean
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

- Returns true if the value of this BigNumber is less than the value of - n, otherwise returns false. -

-

Note: This method uses the comparedTo method internally.

-
-(0.3 - 0.2) < 0.1                       // true
-x = new BigNumber(0.3).minus(0.2)
-x.isLessThan(0.1)                       // false
-BigNumber(0).lt(x)                      // true
-BigNumber(11.1, 2).lt(11, 3)            // true
- - - -
- isLessThanOrEqualTo.lte(n [, base]) ⇒ boolean -
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

- Returns true if the value of this BigNumber is less than or equal to the value of - n, otherwise returns false. -

-

Note: This method uses the comparedTo method internally.

-
-0.1 <= (0.3 - 0.2)                                // false
-x = new BigNumber(0.1)
-x.isLessThanOrEqualTo(BigNumber(0.3).minus(0.2))  // true
-BigNumber(-1).lte(x)                              // true
-BigNumber(10, 18).lte('i', 36)                    // true
- - - -
isNaN.isNaN() ⇒ boolean
-

- Returns true if the value of this BigNumber is NaN, otherwise - returns false. -

-
-x = new BigNumber(NaN)
-x.isNaN()                       // true
-y = new BigNumber('Infinity')
-y.isNaN()                       // false
-

Note: The native method isNaN() can also be used.

- - - -
isNegative.isNegative() ⇒ boolean
-

- Returns true if the sign of this BigNumber is negative, otherwise returns - false. -

-
-x = new BigNumber(-0)
-x.isNegative()                  // true
-y = new BigNumber(2)
-y.isNegative()                  // false
-

Note: n < 0 can be used if n <= -Number.MIN_VALUE.

- - - -
isPositive.isPositive() ⇒ boolean
-

- Returns true if the sign of this BigNumber is positive, otherwise returns - false. -

-
-x = new BigNumber(-0)
-x.isPositive()                  // false
-y = new BigNumber(2)
-y.isPositive()                  // true
- - - -
isZero.isZero() ⇒ boolean
-

- Returns true if the value of this BigNumber is zero or minus zero, otherwise - returns false. -

-
-x = new BigNumber(-0)
-x.isZero() && x.isNegative()         // true
-y = new BigNumber(Infinity)
-y.isZero()                      // false
-

Note: n == 0 can be used if n >= Number.MIN_VALUE.

- - - -
- minus.minus(n [, base]) ⇒ BigNumber -
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

Returns a BigNumber whose value is the value of this BigNumber minus n.

-

The return value is always exact and unrounded.

-
-0.3 - 0.1                       // 0.19999999999999998
-x = new BigNumber(0.3)
-x.minus(0.1)                    // '0.2'
-x.minus(0.6, 20)                // '0'
- - - -
modulo.mod(n [, base]) ⇒ BigNumber
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

- Returns a BigNumber whose value is the value of this BigNumber modulo n, i.e. - the integer remainder of dividing this BigNumber by n. -

-

- The value returned, and in particular its sign, is dependent on the value of the - MODULO_MODE setting of this BigNumber constructor. - If it is 1 (default value), the result will have the same sign as this BigNumber, - and it will match that of Javascript's % operator (within the limits of double - precision) and BigDecimal's remainder method. -

-

The return value is always exact and unrounded.

-

- See MODULO_MODE for a description of the other - modulo modes. -

-
-1 % 0.9                         // 0.09999999999999998
-x = new BigNumber(1)
-x.modulo(0.9)                   // '0.1'
-y = new BigNumber(33)
-y.mod('a', 33)                  // '3'
- - - -
- multipliedBy.times(n [, base]) ⇒ BigNumber -
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

- Returns a BigNumber whose value is the value of this BigNumber multiplied by n. -

-

The return value is always exact and unrounded.

-
-0.6 * 3                         // 1.7999999999999998
-x = new BigNumber(0.6)
-y = x.multipliedBy(3)           // '1.8'
-BigNumber('7e+500').times(y)    // '1.26e+501'
-x.multipliedBy('-a', 16)        // '-6'
- - - -
negated.negated() ⇒ BigNumber
-

- Returns a BigNumber whose value is the value of this BigNumber negated, i.e. multiplied by - -1. -

-
-x = new BigNumber(1.8)
-x.negated()                     // '-1.8'
-y = new BigNumber(-1.3)
-y.negated()                     // '1.3'
- - - -
plus.plus(n [, base]) ⇒ BigNumber
-

- n: number|string|BigNumber
- base: number
- See BigNumber for further parameter details. -

-

Returns a BigNumber whose value is the value of this BigNumber plus n.

-

The return value is always exact and unrounded.

-
-0.1 + 0.2                       // 0.30000000000000004
-x = new BigNumber(0.1)
-y = x.plus(0.2)                 // '0.3'
-BigNumber(0.7).plus(x).plus(y)  // '1.1'
-x.plus('0.1', 8)                // '0.225'
- - - -
- precision.sd([d [, rm]]) ⇒ BigNumber|number -
-

- d: number|boolean: integer, 1 to 1e+9 - inclusive, or true or false
- rm: number: integer, 0 to 8 inclusive. -

-

- If d is a number, returns a BigNumber whose value is the value of this BigNumber - rounded to a precision of d significant digits using rounding mode - rm. -

-

- If d is omitted or is null or undefined, the return - value is the number of significant digits of the value of this BigNumber, or null - if the value of this BigNumber is ±Infinity or NaN.

-

-

- If d is true then any trailing zeros of the integer - part of a number are counted as significant digits, otherwise they are not. -

-

- If rm is omitted or is null or undefined, - ROUNDING_MODE will be used. -

-

- Throws if d or rm is invalid. See Errors. -

-
-x = new BigNumber(9876.54321)
-x.precision(6)                         // '9876.54'
-x.sd()                                 // 9
-x.precision(6, BigNumber.ROUND_UP)     // '9876.55'
-x.sd(2)                                // '9900'
-x.precision(2, 1)                      // '9800'
-x                                      // '9876.54321'
-y = new BigNumber(987000)
-y.precision()                          // 3
-y.sd(true)                             // 6
- - - -
shiftedBy.shiftedBy(n) ⇒ BigNumber
-

- n: number: integer, - -9007199254740991 to 9007199254740991 inclusive -

-

- Returns a BigNumber whose value is the value of this BigNumber shifted by n - places. -

- The shift is of the decimal point, i.e. of powers of ten, and is to the left if n - is negative or to the right if n is positive. -

-

The return value is always exact and unrounded.

-

- Throws if n is invalid. See Errors. -

-
-x = new BigNumber(1.23)
-x.shiftedBy(3)                      // '1230'
-x.shiftedBy(-3)                     // '0.00123'
- - - -
squareRoot.sqrt() ⇒ BigNumber
-

- Returns a BigNumber whose value is the square root of the value of this BigNumber, - rounded according to the current - DECIMAL_PLACES and - ROUNDING_MODE settings. -

-

- The return value will be correctly rounded, i.e. rounded as if the result was first calculated - to an infinite number of correct digits before rounding. -

-
-x = new BigNumber(16)
-x.squareRoot()                  // '4'
-y = new BigNumber(3)
-y.sqrt()                        // '1.73205080756887729353'
- - - -
- toExponential.toExponential([dp [, rm]]) ⇒ string -
-

- dp: number: integer, 0 to 1e+9 inclusive
- rm: number: integer, 0 to 8 inclusive -

-

- Returns a string representing the value of this BigNumber in exponential notation rounded - using rounding mode rm to dp decimal places, i.e with one digit - before the decimal point and dp digits after it. -

-

- If the value of this BigNumber in exponential notation has fewer than dp fraction - digits, the return value will be appended with zeros accordingly. -

-

- If dp is omitted, or is null or undefined, the number - of digits after the decimal point defaults to the minimum number of digits necessary to - represent the value exactly.
- If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

-

- Throws if dp or rm is invalid. See Errors. -

-
-x = 45.6
-y = new BigNumber(x)
-x.toExponential()               // '4.56e+1'
-y.toExponential()               // '4.56e+1'
-x.toExponential(0)              // '5e+1'
-y.toExponential(0)              // '5e+1'
-x.toExponential(1)              // '4.6e+1'
-y.toExponential(1)              // '4.6e+1'
-y.toExponential(1, 1)           // '4.5e+1'  (ROUND_DOWN)
-x.toExponential(3)              // '4.560e+1'
-y.toExponential(3)              // '4.560e+1'
- - - -
- toFixed.toFixed([dp [, rm]]) ⇒ string -
-

- dp: number: integer, 0 to 1e+9 inclusive
- rm: number: integer, 0 to 8 inclusive -

-

- Returns a string representing the value of this BigNumber in normal (fixed-point) notation - rounded to dp decimal places using rounding mode rm. -

-

- If the value of this BigNumber in normal notation has fewer than dp fraction - digits, the return value will be appended with zeros accordingly. -

-

- Unlike Number.prototype.toFixed, which returns exponential notation if a number - is greater or equal to 1021, this method will always return normal - notation. -

-

- If dp is omitted or is null or undefined, the return - value will be unrounded and in normal notation. This is also unlike - Number.prototype.toFixed, which returns the value to zero decimal places.
- It is useful when fixed-point notation is required and the current - EXPONENTIAL_AT setting causes - toString to return exponential notation.
- If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

-

- Throws if dp or rm is invalid. See Errors. -

-
-x = 3.456
-y = new BigNumber(x)
-x.toFixed()                     // '3'
-y.toFixed()                     // '3.456'
-y.toFixed(0)                    // '3'
-x.toFixed(2)                    // '3.46'
-y.toFixed(2)                    // '3.46'
-y.toFixed(2, 1)                 // '3.45'  (ROUND_DOWN)
-x.toFixed(5)                    // '3.45600'
-y.toFixed(5)                    // '3.45600'
- - - -
- toFormat.toFormat([dp [, rm[, format]]]) ⇒ string -
-

- dp: number: integer, 0 to 1e+9 inclusive
- rm: number: integer, 0 to 8 inclusive
- format: object: see FORMAT -

-

-

- Returns a string representing the value of this BigNumber in normal (fixed-point) notation - rounded to dp decimal places using rounding mode rm, and formatted - according to the properties of the format object. -

-

- See FORMAT and the examples below for the properties of the - format object, their types, and their usage. A formatting object may contain - some or all of the recognised properties. -

-

- If dp is omitted or is null or undefined, then the - return value is not rounded to a fixed number of decimal places.
- If rm is omitted or is null or undefined, - ROUNDING_MODE is used.
- If format is omitted or is null or undefined, the - FORMAT object is used. -

-

- Throws if dp, rm or format is invalid. See - Errors. -

-
-fmt = {
-  prefix: '',
-  decimalSeparator: '.',
-  groupSeparator: ',',
-  groupSize: 3,
-  secondaryGroupSize: 0,
-  fractionGroupSeparator: ' ',
-  fractionGroupSize: 0,
-  suffix: ''
-}
-
-x = new BigNumber('123456789.123456789')
-
-// Set the global formatting options
-BigNumber.config({ FORMAT: fmt })
-
-x.toFormat()                              // '123,456,789.123456789'
-x.toFormat(3)                             // '123,456,789.123'
-
-// If a reference to the object assigned to FORMAT has been retained,
-// the format properties can be changed directly
-fmt.groupSeparator = ' '
-fmt.fractionGroupSize = 5
-x.toFormat()                              // '123 456 789.12345 6789'
-
-// Alternatively, pass the formatting options as an argument
-fmt = {
-  prefix: '=> ',
-  decimalSeparator: ',',
-  groupSeparator: '.',
-  groupSize: 3,
-  secondaryGroupSize: 2
-}
-
-x.toFormat()                              // '123 456 789.12345 6789'
-x.toFormat(fmt)                           // '=> 12.34.56.789,123456789'
-x.toFormat(2, fmt)                        // '=> 12.34.56.789,12'
-x.toFormat(3, BigNumber.ROUND_UP, fmt)    // '=> 12.34.56.789,124'
- - - -
- toFraction.toFraction([maximum_denominator]) - ⇒ [BigNumber, BigNumber] -
-

- maximum_denominator: - number|string|BigNumber: integer >= 1 and <= - Infinity -

-

- Returns an array of two BigNumbers representing the value of this BigNumber as a simple - fraction with an integer numerator and an integer denominator. The denominator will be a - positive non-zero value less than or equal to maximum_denominator. -

-

- If a maximum_denominator is not specified, or is null or - undefined, the denominator will be the lowest value necessary to represent the - number exactly. -

-

- Throws if maximum_denominator is invalid. See Errors. -

-
-x = new BigNumber(1.75)
-x.toFraction()                  // '7, 4'
-
-pi = new BigNumber('3.14159265358')
-pi.toFraction()                 // '157079632679,50000000000'
-pi.toFraction(100000)           // '312689, 99532'
-pi.toFraction(10000)            // '355, 113'
-pi.toFraction(100)              // '311, 99'
-pi.toFraction(10)               // '22, 7'
-pi.toFraction(1)                // '3, 1'
- - - -
toJSON.toJSON() ⇒ string
-

As valueOf.

-
-x = new BigNumber('177.7e+457')
-y = new BigNumber(235.4325)
-z = new BigNumber('0.0098074')
-
-// Serialize an array of three BigNumbers
-str = JSON.stringify( [x, y, z] )
-// "["1.777e+459","235.4325","0.0098074"]"
-
-// Return an array of three BigNumbers
-JSON.parse(str, function (key, val) {
-    return key === '' ? val : new BigNumber(val)
-})
- - - -
toNumber.toNumber() ⇒ number
-

Returns the value of this BigNumber as a JavaScript number primitive.

-

- This method is identical to using type coercion with the unary plus operator. -

-
-x = new BigNumber(456.789)
-x.toNumber()                    // 456.789
-+x                              // 456.789
-
-y = new BigNumber('45987349857634085409857349856430985')
-y.toNumber()                    // 4.598734985763409e+34
-
-z = new BigNumber(-0)
-1 / z.toNumber()                // -Infinity
-1 / +z                          // -Infinity
- - - -
- toPrecision.toPrecision([sd [, rm]]) ⇒ string -
-

- sd: number: integer, 1 to 1e+9 inclusive
- rm: number: integer, 0 to 8 inclusive -

-

- Returns a string representing the value of this BigNumber rounded to sd - significant digits using rounding mode rm. -

-

- If sd is less than the number of digits necessary to represent the integer part - of the value in normal (fixed-point) notation, then exponential notation is used. -

-

- If sd is omitted, or is null or undefined, then the - return value is the same as n.toString().
- If rm is omitted or is null or undefined, - ROUNDING_MODE is used. -

-

- Throws if sd or rm is invalid. See Errors. -

-
-x = 45.6
-y = new BigNumber(x)
-x.toPrecision()                 // '45.6'
-y.toPrecision()                 // '45.6'
-x.toPrecision(1)                // '5e+1'
-y.toPrecision(1)                // '5e+1'
-y.toPrecision(2, 0)             // '4.6e+1'  (ROUND_UP)
-y.toPrecision(2, 1)             // '4.5e+1'  (ROUND_DOWN)
-x.toPrecision(5)                // '45.600'
-y.toPrecision(5)                // '45.600'
- - - -
toString.toString([base]) ⇒ string
-

- base: number: integer, 2 to ALPHABET.length - inclusive (see ALPHABET). -

-

- Returns a string representing the value of this BigNumber in the specified base, or base - 10 if base is omitted or is null or - undefined. -

-

- For bases above 10, and using the default base conversion alphabet - (see ALPHABET), values from 10 to - 35 are represented by a-z - (as with Number.prototype.toString). -

-

- If a base is specified the value is rounded according to the current - DECIMAL_PLACES - and ROUNDING_MODE settings. -

-

- If a base is not specified, and this BigNumber has a positive - exponent that is equal to or greater than the positive component of the - current EXPONENTIAL_AT setting, - or a negative exponent equal to or less than the negative component of the - setting, then exponential notation is returned. -

-

If base is null or undefined it is ignored.

-

- Throws if base is invalid. See Errors. -

-
-x = new BigNumber(750000)
-x.toString()                    // '750000'
-BigNumber.config({ EXPONENTIAL_AT: 5 })
-x.toString()                    // '7.5e+5'
-
-y = new BigNumber(362.875)
-y.toString(2)                   // '101101010.111'
-y.toString(9)                   // '442.77777777777777777778'
-y.toString(32)                  // 'ba.s'
-
-BigNumber.config({ DECIMAL_PLACES: 4 });
-z = new BigNumber('1.23456789')
-z.toString()                    // '1.23456789'
-z.toString(10)                  // '1.2346'
- - - -
valueOf.valueOf() ⇒ string
-

- As toString, but does not accept a base argument and includes - the minus sign for negative zero. -

-
-x = new BigNumber('-0')
-x.toString()                    // '0'
-x.valueOf()                     // '-0'
-y = new BigNumber('1.777e+457')
-y.valueOf()                     // '1.777e+457'
- - - -

Properties

-

The properties of a BigNumber instance:

- - - - - - - - - - - - - - - - - - - - - - - - - -
PropertyDescriptionTypeValue
ccoefficient*number[] Array of base 1e14 numbers
eexponentnumberInteger, -1000000000 to 1000000000 inclusive
ssignnumber-1 or 1
-

*significand

-

- The value of any of the c, e and s properties may also - be null. -

-

- The above properties are best considered to be read-only. In early versions of this library it - was okay to change the exponent of a BigNumber by writing to its exponent property directly, - but this is no longer reliable as the value of the first element of the coefficient array is - now dependent on the exponent. -

-

- Note that, as with JavaScript numbers, the original exponent and fractional trailing zeros are - not necessarily preserved. -

-
x = new BigNumber(0.123)              // '0.123'
-x.toExponential()                     // '1.23e-1'
-x.c                                   // '1,2,3'
-x.e                                   // -1
-x.s                                   // 1
-
-y = new Number(-123.4567000e+2)       // '-12345.67'
-y.toExponential()                     // '-1.234567e+4'
-z = new BigNumber('-123.4567000e+2')  // '-12345.67'
-z.toExponential()                     // '-1.234567e+4'
-z.c                                   // '1,2,3,4,5,6,7'
-z.e                                   // 4
-z.s                                   // -1
- - - -

Zero, NaN and Infinity

-

- The table below shows how ±0, NaN and - ±Infinity are stored. -

- - - - - - - - - - - - - - - - - - - - - - - - - -
ces
±0[0]0±1
NaNnullnullnull
±Infinitynullnull±1
-
-x = new Number(-0)              // 0
-1 / x == -Infinity              // true
-
-y = new BigNumber(-0)           // '0'
-y.c                             // '0' ( [0].toString() )
-y.e                             // 0
-y.s                             // -1
- - - -

Errors

-

The table below shows the errors that are thrown.

-

- The errors are generic Error objects whose message begins - '[BigNumber Error]'. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MethodThrows
- BigNumber
- comparedTo
- dividedBy
- dividedToIntegerBy
- isEqualTo
- isGreaterThan
- isGreaterThanOrEqualTo
- isLessThan
- isLessThanOrEqualTo
- minus
- modulo
- plus
- multipliedBy -
Base not a primitive number
Base not an integer
Base out of range
Number primitive has more than 15 significant digits*
Not a base... number*
Not a number*
cloneObject expected
configObject expected
DECIMAL_PLACES not a primitive number
DECIMAL_PLACES not an integer
DECIMAL_PLACES out of range
ROUNDING_MODE not a primitive number
ROUNDING_MODE not an integer
ROUNDING_MODE out of range
EXPONENTIAL_AT not a primitive number
EXPONENTIAL_AT not an integer
EXPONENTIAL_AT out of range
RANGE not a primitive number
RANGE not an integer
RANGE cannot be zero
RANGE cannot be zero
CRYPTO not true or false
crypto unavailable
MODULO_MODE not a primitive number
MODULO_MODE not an integer
MODULO_MODE out of range
POW_PRECISION not a primitive number
POW_PRECISION not an integer
POW_PRECISION out of range
FORMAT not an object
ALPHABET invalid
- decimalPlaces
- precision
- random
- shiftedBy
- toExponential
- toFixed
- toFormat
- toPrecision -
Argument not a primitive number
Argument not an integer
Argument out of range
- decimalPlaces
- precision -
Argument not true or false
exponentiatedByArgument not an integer
isBigNumberInvalid BigNumber*
- minimum
- maximum -
Not a number*
- random - crypto unavailable
- toFormat - Argument not an object
toFractionArgument not an integer
Argument out of range
toStringBase not a primitive number
Base not an integer
Base out of range
-

*Only thrown if BigNumber.DEBUG is true.

-

To determine if an exception is a BigNumber Error:

-
-try {
-  // ...
-} catch (e) {
-  if (e instanceof Error && e.message.indexOf('[BigNumber Error]') === 0) {
-      // ...
-  }
-}
- - - -

Type coercion

-

- To prevent the accidental use of a BigNumber in primitive number operations, or the - accidental addition of a BigNumber to a string, the valueOf method can be safely - overwritten as shown below. -

-

- The valueOf method is the same as the - toJSON method, and both are the same as the - toString method except they do not take a base - argument and they include the minus sign for negative zero. -

-
-BigNumber.prototype.valueOf = function () {
-  throw Error('valueOf called!')
-}
-
-x = new BigNumber(1)
-x / 2                    // '[BigNumber Error] valueOf called!'
-x + 'abc'                // '[BigNumber Error] valueOf called!'
-
- - - -

FAQ

- -
Why are trailing fractional zeros removed from BigNumbers?
-

- Some arbitrary-precision libraries retain trailing fractional zeros as they can indicate the - precision of a value. This can be useful but the results of arithmetic operations can be - misleading. -

-
-x = new BigDecimal("1.0")
-y = new BigDecimal("1.1000")
-z = x.add(y)                      // 2.1000
-
-x = new BigDecimal("1.20")
-y = new BigDecimal("3.45000")
-z = x.multiply(y)                 // 4.1400000
-

- To specify the precision of a value is to specify that the value lies - within a certain range. -

-

- In the first example, x has a value of 1.0. The trailing zero shows - the precision of the value, implying that it is in the range 0.95 to - 1.05. Similarly, the precision indicated by the trailing zeros of y - indicates that the value is in the range 1.09995 to 1.10005. -

-

- If we add the two lowest values in the ranges we have, 0.95 + 1.09995 = 2.04995, - and if we add the two highest values we have, 1.05 + 1.10005 = 2.15005, so the - range of the result of the addition implied by the precision of its operands is - 2.04995 to 2.15005. -

-

- The result given by BigDecimal of 2.1000 however, indicates that the value is in - the range 2.09995 to 2.10005 and therefore the precision implied by - its trailing zeros may be misleading. -

-

- In the second example, the true range is 4.122744 to 4.157256 yet - the BigDecimal answer of 4.1400000 indicates a range of 4.13999995 - to 4.14000005. Again, the precision implied by the trailing zeros may be - misleading. -

-

- This library, like binary floating point and most calculators, does not retain trailing - fractional zeros. Instead, the toExponential, toFixed and - toPrecision methods enable trailing zeros to be added if and when required.
-

- - - - diff --git a/reverse_engineering/node_modules/bignumber.js/package.json b/reverse_engineering/node_modules/bignumber.js/package.json deleted file mode 100644 index efad935..0000000 --- a/reverse_engineering/node_modules/bignumber.js/package.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "_from": "bignumber.js@^9.0.0", - "_id": "bignumber.js@9.0.1", - "_inBundle": false, - "_integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==", - "_location": "/bignumber.js", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "bignumber.js@^9.0.0", - "name": "bignumber.js", - "escapedName": "bignumber.js", - "rawSpec": "^9.0.0", - "saveSpec": null, - "fetchSpec": "^9.0.0" - }, - "_requiredBy": [ - "/json-bigint" - ], - "_resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", - "_shasum": "8d7ba124c882bfd8e43260c67475518d0689e4e5", - "_spec": "bignumber.js@^9.0.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/json-bigint", - "author": { - "name": "Michael Mclaughlin", - "email": "M8ch88l@gmail.com" - }, - "browser": "bignumber.js", - "bugs": { - "url": "https://github.com/MikeMcl/bignumber.js/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "A library for arbitrary-precision decimal and non-decimal arithmetic", - "engines": { - "node": "*" - }, - "homepage": "https://github.com/MikeMcl/bignumber.js#readme", - "keywords": [ - "arbitrary", - "precision", - "arithmetic", - "big", - "number", - "decimal", - "float", - "biginteger", - "bigdecimal", - "bignumber", - "bigint", - "bignum" - ], - "license": "MIT", - "main": "bignumber", - "module": "bignumber.mjs", - "name": "bignumber.js", - "repository": { - "type": "git", - "url": "git+https://github.com/MikeMcl/bignumber.js.git" - }, - "scripts": { - "build": "uglifyjs bignumber.js --source-map -c -m -o bignumber.min.js", - "test": "node test/test" - }, - "types": "bignumber.d.ts", - "version": "9.0.1" -} diff --git a/reverse_engineering/node_modules/buffer-equal-constant-time/.npmignore b/reverse_engineering/node_modules/buffer-equal-constant-time/.npmignore deleted file mode 100644 index 34e4f5c..0000000 --- a/reverse_engineering/node_modules/buffer-equal-constant-time/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -.*.sw[mnop] -node_modules/ diff --git a/reverse_engineering/node_modules/buffer-equal-constant-time/.travis.yml b/reverse_engineering/node_modules/buffer-equal-constant-time/.travis.yml deleted file mode 100644 index 78e1c01..0000000 --- a/reverse_engineering/node_modules/buffer-equal-constant-time/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: -- "0.11" -- "0.10" diff --git a/reverse_engineering/node_modules/buffer-equal-constant-time/LICENSE.txt b/reverse_engineering/node_modules/buffer-equal-constant-time/LICENSE.txt deleted file mode 100644 index 9a064f3..0000000 --- a/reverse_engineering/node_modules/buffer-equal-constant-time/LICENSE.txt +++ /dev/null @@ -1,12 +0,0 @@ -Copyright (c) 2013, GoInstant Inc., a salesforce.com company -All rights reserved. - -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 salesforce.com, nor GoInstant, nor the names of its contributors 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 HOLDER 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. diff --git a/reverse_engineering/node_modules/buffer-equal-constant-time/README.md b/reverse_engineering/node_modules/buffer-equal-constant-time/README.md deleted file mode 100644 index 4f227f5..0000000 --- a/reverse_engineering/node_modules/buffer-equal-constant-time/README.md +++ /dev/null @@ -1,50 +0,0 @@ -# buffer-equal-constant-time - -Constant-time `Buffer` comparison for node.js. Should work with browserify too. - -[![Build Status](https://travis-ci.org/goinstant/buffer-equal-constant-time.png?branch=master)](https://travis-ci.org/goinstant/buffer-equal-constant-time) - -```sh - npm install buffer-equal-constant-time -``` - -# Usage - -```js - var bufferEq = require('buffer-equal-constant-time'); - - var a = new Buffer('asdf'); - var b = new Buffer('asdf'); - if (bufferEq(a,b)) { - // the same! - } else { - // different in at least one byte! - } -``` - -If you'd like to install an `.equal()` method onto the node.js `Buffer` and -`SlowBuffer` prototypes: - -```js - require('buffer-equal-constant-time').install(); - - var a = new Buffer('asdf'); - var b = new Buffer('asdf'); - if (a.equal(b)) { - // the same! - } else { - // different in at least one byte! - } -``` - -To get rid of the installed `.equal()` method, call `.restore()`: - -```js - require('buffer-equal-constant-time').restore(); -``` - -# Legal - -© 2013 GoInstant Inc., a salesforce.com company - -Licensed under the BSD 3-clause license. diff --git a/reverse_engineering/node_modules/buffer-equal-constant-time/index.js b/reverse_engineering/node_modules/buffer-equal-constant-time/index.js deleted file mode 100644 index 5462c1f..0000000 --- a/reverse_engineering/node_modules/buffer-equal-constant-time/index.js +++ /dev/null @@ -1,41 +0,0 @@ -/*jshint node:true */ -'use strict'; -var Buffer = require('buffer').Buffer; // browserify -var SlowBuffer = require('buffer').SlowBuffer; - -module.exports = bufferEq; - -function bufferEq(a, b) { - - // shortcutting on type is necessary for correctness - if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { - return false; - } - - // buffer sizes should be well-known information, so despite this - // shortcutting, it doesn't leak any information about the *contents* of the - // buffers. - if (a.length !== b.length) { - return false; - } - - var c = 0; - for (var i = 0; i < a.length; i++) { - /*jshint bitwise:false */ - c |= a[i] ^ b[i]; // XOR - } - return c === 0; -} - -bufferEq.install = function() { - Buffer.prototype.equal = SlowBuffer.prototype.equal = function equal(that) { - return bufferEq(this, that); - }; -}; - -var origBufEqual = Buffer.prototype.equal; -var origSlowBufEqual = SlowBuffer.prototype.equal; -bufferEq.restore = function() { - Buffer.prototype.equal = origBufEqual; - SlowBuffer.prototype.equal = origSlowBufEqual; -}; diff --git a/reverse_engineering/node_modules/buffer-equal-constant-time/package.json b/reverse_engineering/node_modules/buffer-equal-constant-time/package.json deleted file mode 100644 index a760f9a..0000000 --- a/reverse_engineering/node_modules/buffer-equal-constant-time/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "_from": "buffer-equal-constant-time@1.0.1", - "_id": "buffer-equal-constant-time@1.0.1", - "_inBundle": false, - "_integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", - "_location": "/buffer-equal-constant-time", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "buffer-equal-constant-time@1.0.1", - "name": "buffer-equal-constant-time", - "escapedName": "buffer-equal-constant-time", - "rawSpec": "1.0.1", - "saveSpec": null, - "fetchSpec": "1.0.1" - }, - "_requiredBy": [ - "/jwa" - ], - "_resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "_shasum": "f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819", - "_spec": "buffer-equal-constant-time@1.0.1", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/jwa", - "author": { - "name": "GoInstant Inc., a salesforce.com company" - }, - "bugs": { - "url": "https://github.com/goinstant/buffer-equal-constant-time/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Constant-time comparison of Buffers", - "devDependencies": { - "mocha": "~1.15.1" - }, - "homepage": "https://github.com/goinstant/buffer-equal-constant-time#readme", - "keywords": [ - "buffer", - "equal", - "constant-time", - "crypto" - ], - "license": "BSD-3-Clause", - "main": "index.js", - "name": "buffer-equal-constant-time", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/goinstant/buffer-equal-constant-time.git" - }, - "scripts": { - "test": "mocha test.js" - }, - "version": "1.0.1" -} diff --git a/reverse_engineering/node_modules/buffer-equal-constant-time/test.js b/reverse_engineering/node_modules/buffer-equal-constant-time/test.js deleted file mode 100644 index 0bc972d..0000000 --- a/reverse_engineering/node_modules/buffer-equal-constant-time/test.js +++ /dev/null @@ -1,42 +0,0 @@ -/*jshint node:true */ -'use strict'; - -var bufferEq = require('./index'); -var assert = require('assert'); - -describe('buffer-equal-constant-time', function() { - var a = new Buffer('asdfasdf123456'); - var b = new Buffer('asdfasdf123456'); - var c = new Buffer('asdfasdf'); - - describe('bufferEq', function() { - it('says a == b', function() { - assert.strictEqual(bufferEq(a, b), true); - }); - - it('says a != c', function() { - assert.strictEqual(bufferEq(a, c), false); - }); - }); - - describe('install/restore', function() { - before(function() { - bufferEq.install(); - }); - after(function() { - bufferEq.restore(); - }); - - it('installed an .equal method', function() { - var SlowBuffer = require('buffer').SlowBuffer; - assert.ok(Buffer.prototype.equal); - assert.ok(SlowBuffer.prototype.equal); - }); - - it('infected existing Buffers', function() { - assert.strictEqual(a.equal(b), true); - assert.strictEqual(a.equal(c), false); - }); - }); - -}); diff --git a/reverse_engineering/node_modules/debug/LICENSE b/reverse_engineering/node_modules/debug/LICENSE deleted file mode 100644 index 658c933..0000000 --- a/reverse_engineering/node_modules/debug/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -(The MIT License) - -Copyright (c) 2014 TJ Holowaychuk - -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/reverse_engineering/node_modules/debug/README.md b/reverse_engineering/node_modules/debug/README.md deleted file mode 100644 index 88dae35..0000000 --- a/reverse_engineering/node_modules/debug/README.md +++ /dev/null @@ -1,455 +0,0 @@ -# debug -[![Build Status](https://travis-ci.org/visionmedia/debug.svg?branch=master)](https://travis-ci.org/visionmedia/debug) [![Coverage Status](https://coveralls.io/repos/github/visionmedia/debug/badge.svg?branch=master)](https://coveralls.io/github/visionmedia/debug?branch=master) [![Slack](https://visionmedia-community-slackin.now.sh/badge.svg)](https://visionmedia-community-slackin.now.sh/) [![OpenCollective](https://opencollective.com/debug/backers/badge.svg)](#backers) -[![OpenCollective](https://opencollective.com/debug/sponsors/badge.svg)](#sponsors) - - - -A tiny JavaScript debugging utility modelled after Node.js core's debugging -technique. Works in Node.js and web browsers. - -## Installation - -```bash -$ npm install debug -``` - -## Usage - -`debug` exposes a function; simply pass this function the name of your module, and it will return a decorated version of `console.error` for you to pass debug statements to. This will allow you to toggle the debug output for different parts of your module as well as the module as a whole. - -Example [_app.js_](./examples/node/app.js): - -```js -var debug = require('debug')('http') - , http = require('http') - , name = 'My App'; - -// fake app - -debug('booting %o', name); - -http.createServer(function(req, res){ - debug(req.method + ' ' + req.url); - res.end('hello\n'); -}).listen(3000, function(){ - debug('listening'); -}); - -// fake worker of some kind - -require('./worker'); -``` - -Example [_worker.js_](./examples/node/worker.js): - -```js -var a = require('debug')('worker:a') - , b = require('debug')('worker:b'); - -function work() { - a('doing lots of uninteresting work'); - setTimeout(work, Math.random() * 1000); -} - -work(); - -function workb() { - b('doing some work'); - setTimeout(workb, Math.random() * 2000); -} - -workb(); -``` - -The `DEBUG` environment variable is then used to enable these based on space or -comma-delimited names. - -Here are some examples: - -screen shot 2017-08-08 at 12 53 04 pm -screen shot 2017-08-08 at 12 53 38 pm -screen shot 2017-08-08 at 12 53 25 pm - -#### Windows command prompt notes - -##### CMD - -On Windows the environment variable is set using the `set` command. - -```cmd -set DEBUG=*,-not_this -``` - -Example: - -```cmd -set DEBUG=* & node app.js -``` - -##### PowerShell (VS Code default) - -PowerShell uses different syntax to set environment variables. - -```cmd -$env:DEBUG = "*,-not_this" -``` - -Example: - -```cmd -$env:DEBUG='app';node app.js -``` - -Then, run the program to be debugged as usual. - -npm script example: -```js - "windowsDebug": "@powershell -Command $env:DEBUG='*';node app.js", -``` - -## Namespace Colors - -Every debug instance has a color generated for it based on its namespace name. -This helps when visually parsing the debug output to identify which debug instance -a debug line belongs to. - -#### Node.js - -In Node.js, colors are enabled when stderr is a TTY. You also _should_ install -the [`supports-color`](https://npmjs.org/supports-color) module alongside debug, -otherwise debug will only use a small handful of basic colors. - - - -#### Web Browser - -Colors are also enabled on "Web Inspectors" that understand the `%c` formatting -option. These are WebKit web inspectors, Firefox ([since version -31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/)) -and the Firebug plugin for Firefox (any version). - - - - -## Millisecond diff - -When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls. - - - -When stdout is not a TTY, `Date#toISOString()` is used, making it more useful for logging the debug information as shown below: - - - - -## Conventions - -If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser". If you append a "*" to the end of your name, it will always be enabled regardless of the setting of the DEBUG environment variable. You can then use it for normal output as well as debug output. - -## Wildcards - -The `*` character may be used as a wildcard. Suppose for example your library has -debuggers named "connect:bodyParser", "connect:compress", "connect:session", -instead of listing all three with -`DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do -`DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`. - -You can also exclude specific debuggers by prefixing them with a "-" character. -For example, `DEBUG=*,-connect:*` would include all debuggers except those -starting with "connect:". - -## Environment Variables - -When running through Node.js, you can set a few environment variables that will -change the behavior of the debug logging: - -| Name | Purpose | -|-----------|-------------------------------------------------| -| `DEBUG` | Enables/disables specific debugging namespaces. | -| `DEBUG_HIDE_DATE` | Hide date from debug output (non-TTY). | -| `DEBUG_COLORS`| Whether or not to use colors in the debug output. | -| `DEBUG_DEPTH` | Object inspection depth. | -| `DEBUG_SHOW_HIDDEN` | Shows hidden properties on inspected objects. | - - -__Note:__ The environment variables beginning with `DEBUG_` end up being -converted into an Options object that gets used with `%o`/`%O` formatters. -See the Node.js documentation for -[`util.inspect()`](https://nodejs.org/api/util.html#util_util_inspect_object_options) -for the complete list. - -## Formatters - -Debug uses [printf-style](https://wikipedia.org/wiki/Printf_format_string) formatting. -Below are the officially supported formatters: - -| Formatter | Representation | -|-----------|----------------| -| `%O` | Pretty-print an Object on multiple lines. | -| `%o` | Pretty-print an Object all on a single line. | -| `%s` | String. | -| `%d` | Number (both integer and float). | -| `%j` | JSON. Replaced with the string '[Circular]' if the argument contains circular references. | -| `%%` | Single percent sign ('%'). This does not consume an argument. | - - -### Custom formatters - -You can add custom formatters by extending the `debug.formatters` object. -For example, if you wanted to add support for rendering a Buffer as hex with -`%h`, you could do something like: - -```js -const createDebug = require('debug') -createDebug.formatters.h = (v) => { - return v.toString('hex') -} - -// …elsewhere -const debug = createDebug('foo') -debug('this is hex: %h', new Buffer('hello world')) -// foo this is hex: 68656c6c6f20776f726c6421 +0ms -``` - - -## Browser Support - -You can build a browser-ready script using [browserify](https://github.com/substack/node-browserify), -or just use the [browserify-as-a-service](https://wzrd.in/) [build](https://wzrd.in/standalone/debug@latest), -if you don't want to build it yourself. - -Debug's enable state is currently persisted by `localStorage`. -Consider the situation shown below where you have `worker:a` and `worker:b`, -and wish to debug both. You can enable this using `localStorage.debug`: - -```js -localStorage.debug = 'worker:*' -``` - -And then refresh the page. - -```js -a = debug('worker:a'); -b = debug('worker:b'); - -setInterval(function(){ - a('doing some work'); -}, 1000); - -setInterval(function(){ - b('doing some work'); -}, 1200); -``` - - -## Output streams - - By default `debug` will log to stderr, however this can be configured per-namespace by overriding the `log` method: - -Example [_stdout.js_](./examples/node/stdout.js): - -```js -var debug = require('debug'); -var error = debug('app:error'); - -// by default stderr is used -error('goes to stderr!'); - -var log = debug('app:log'); -// set this namespace to log via console.log -log.log = console.log.bind(console); // don't forget to bind to console! -log('goes to stdout'); -error('still goes to stderr!'); - -// set all output to go via console.info -// overrides all per-namespace log settings -debug.log = console.info.bind(console); -error('now goes to stdout via console.info'); -log('still goes to stdout, but via console.info now'); -``` - -## Extend -You can simply extend debugger -```js -const log = require('debug')('auth'); - -//creates new debug instance with extended namespace -const logSign = log.extend('sign'); -const logLogin = log.extend('login'); - -log('hello'); // auth hello -logSign('hello'); //auth:sign hello -logLogin('hello'); //auth:login hello -``` - -## Set dynamically - -You can also enable debug dynamically by calling the `enable()` method : - -```js -let debug = require('debug'); - -console.log(1, debug.enabled('test')); - -debug.enable('test'); -console.log(2, debug.enabled('test')); - -debug.disable(); -console.log(3, debug.enabled('test')); - -``` - -print : -``` -1 false -2 true -3 false -``` - -Usage : -`enable(namespaces)` -`namespaces` can include modes separated by a colon and wildcards. - -Note that calling `enable()` completely overrides previously set DEBUG variable : - -``` -$ DEBUG=foo node -e 'var dbg = require("debug"); dbg.enable("bar"); console.log(dbg.enabled("foo"))' -=> false -``` - -`disable()` - -Will disable all namespaces. The functions returns the namespaces currently -enabled (and skipped). This can be useful if you want to disable debugging -temporarily without knowing what was enabled to begin with. - -For example: - -```js -let debug = require('debug'); -debug.enable('foo:*,-foo:bar'); -let namespaces = debug.disable(); -debug.enable(namespaces); -``` - -Note: There is no guarantee that the string will be identical to the initial -enable string, but semantically they will be identical. - -## Checking whether a debug target is enabled - -After you've created a debug instance, you can determine whether or not it is -enabled by checking the `enabled` property: - -```javascript -const debug = require('debug')('http'); - -if (debug.enabled) { - // do stuff... -} -``` - -You can also manually toggle this property to force the debug instance to be -enabled or disabled. - - -## Authors - - - TJ Holowaychuk - - Nathan Rajlich - - Andrew Rhyne - -## Backers - -Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/debug#backer)] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -## Sponsors - -Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/debug#sponsor)] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -## License - -(The MIT License) - -Copyright (c) 2014-2017 TJ Holowaychuk <tj@vision-media.ca> - -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/reverse_engineering/node_modules/debug/package.json b/reverse_engineering/node_modules/debug/package.json deleted file mode 100644 index 08cec51..0000000 --- a/reverse_engineering/node_modules/debug/package.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "_from": "debug@4", - "_id": "debug@4.3.2", - "_inBundle": false, - "_integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "_location": "/debug", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "debug@4", - "name": "debug", - "escapedName": "debug", - "rawSpec": "4", - "saveSpec": null, - "fetchSpec": "4" - }, - "_requiredBy": [ - "/agent-base", - "/http-proxy-agent", - "/https-proxy-agent", - "/retry-request" - ], - "_resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "_shasum": "f0a49c18ac8779e31d4a0c6029dfb76873c7428b", - "_spec": "debug@4", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/https-proxy-agent", - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "browser": "./src/browser.js", - "bugs": { - "url": "https://github.com/visionmedia/debug/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Nathan Rajlich", - "email": "nathan@tootallnate.net", - "url": "http://n8.io" - }, - { - "name": "Andrew Rhyne", - "email": "rhyneandrew@gmail.com" - }, - { - "name": "Josh Junon", - "email": "josh@junon.me" - } - ], - "dependencies": { - "ms": "2.1.2" - }, - "deprecated": false, - "description": "small debugging utility", - "devDependencies": { - "brfs": "^2.0.1", - "browserify": "^16.2.3", - "coveralls": "^3.0.2", - "istanbul": "^0.4.5", - "karma": "^3.1.4", - "karma-browserify": "^6.0.0", - "karma-chrome-launcher": "^2.2.0", - "karma-mocha": "^1.3.0", - "mocha": "^5.2.0", - "mocha-lcov-reporter": "^1.2.0", - "xo": "^0.23.0" - }, - "engines": { - "node": ">=6.0" - }, - "files": [ - "src", - "LICENSE", - "README.md" - ], - "homepage": "https://github.com/visionmedia/debug#readme", - "keywords": [ - "debug", - "log", - "debugger" - ], - "license": "MIT", - "main": "./src/index.js", - "name": "debug", - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - }, - "repository": { - "type": "git", - "url": "git://github.com/visionmedia/debug.git" - }, - "scripts": { - "lint": "xo", - "test": "npm run test:node && npm run test:browser && npm run lint", - "test:browser": "karma start --single-run", - "test:coverage": "cat ./coverage/lcov.info | coveralls", - "test:node": "istanbul cover _mocha -- test.js" - }, - "version": "4.3.2" -} diff --git a/reverse_engineering/node_modules/debug/src/browser.js b/reverse_engineering/node_modules/debug/src/browser.js deleted file mode 100644 index cd0fc35..0000000 --- a/reverse_engineering/node_modules/debug/src/browser.js +++ /dev/null @@ -1,269 +0,0 @@ -/* eslint-env browser */ - -/** - * This is the web browser implementation of `debug()`. - */ - -exports.formatArgs = formatArgs; -exports.save = save; -exports.load = load; -exports.useColors = useColors; -exports.storage = localstorage(); -exports.destroy = (() => { - let warned = false; - - return () => { - if (!warned) { - warned = true; - console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); - } - }; -})(); - -/** - * Colors. - */ - -exports.colors = [ - '#0000CC', - '#0000FF', - '#0033CC', - '#0033FF', - '#0066CC', - '#0066FF', - '#0099CC', - '#0099FF', - '#00CC00', - '#00CC33', - '#00CC66', - '#00CC99', - '#00CCCC', - '#00CCFF', - '#3300CC', - '#3300FF', - '#3333CC', - '#3333FF', - '#3366CC', - '#3366FF', - '#3399CC', - '#3399FF', - '#33CC00', - '#33CC33', - '#33CC66', - '#33CC99', - '#33CCCC', - '#33CCFF', - '#6600CC', - '#6600FF', - '#6633CC', - '#6633FF', - '#66CC00', - '#66CC33', - '#9900CC', - '#9900FF', - '#9933CC', - '#9933FF', - '#99CC00', - '#99CC33', - '#CC0000', - '#CC0033', - '#CC0066', - '#CC0099', - '#CC00CC', - '#CC00FF', - '#CC3300', - '#CC3333', - '#CC3366', - '#CC3399', - '#CC33CC', - '#CC33FF', - '#CC6600', - '#CC6633', - '#CC9900', - '#CC9933', - '#CCCC00', - '#CCCC33', - '#FF0000', - '#FF0033', - '#FF0066', - '#FF0099', - '#FF00CC', - '#FF00FF', - '#FF3300', - '#FF3333', - '#FF3366', - '#FF3399', - '#FF33CC', - '#FF33FF', - '#FF6600', - '#FF6633', - '#FF9900', - '#FF9933', - '#FFCC00', - '#FFCC33' -]; - -/** - * Currently only WebKit-based Web Inspectors, Firefox >= v31, - * and the Firebug extension (any Firefox version) are known - * to support "%c" CSS customizations. - * - * TODO: add a `localStorage` variable to explicitly enable/disable colors - */ - -// eslint-disable-next-line complexity -function useColors() { - // NB: In an Electron preload script, document will be defined but not fully - // initialized. Since we know we're in Chrome, we'll just detect this case - // explicitly - if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { - return true; - } - - // Internet Explorer and Edge do not support colors. - if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { - return false; - } - - // Is webkit? http://stackoverflow.com/a/16459606/376773 - // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 - return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || - // Is firebug? http://stackoverflow.com/a/398120/376773 - (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || - // Is firefox >= v31? - // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages - (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || - // Double check webkit in userAgent just in case we are in a worker - (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); -} - -/** - * Colorize log arguments if enabled. - * - * @api public - */ - -function formatArgs(args) { - args[0] = (this.useColors ? '%c' : '') + - this.namespace + - (this.useColors ? ' %c' : ' ') + - args[0] + - (this.useColors ? '%c ' : ' ') + - '+' + module.exports.humanize(this.diff); - - if (!this.useColors) { - return; - } - - const c = 'color: ' + this.color; - args.splice(1, 0, c, 'color: inherit'); - - // The final "%c" is somewhat tricky, because there could be other - // arguments passed either before or after the %c, so we need to - // figure out the correct index to insert the CSS into - let index = 0; - let lastC = 0; - args[0].replace(/%[a-zA-Z%]/g, match => { - if (match === '%%') { - return; - } - index++; - if (match === '%c') { - // We only are interested in the *last* %c - // (the user may have provided their own) - lastC = index; - } - }); - - args.splice(lastC, 0, c); -} - -/** - * Invokes `console.debug()` when available. - * No-op when `console.debug` is not a "function". - * If `console.debug` is not available, falls back - * to `console.log`. - * - * @api public - */ -exports.log = console.debug || console.log || (() => {}); - -/** - * Save `namespaces`. - * - * @param {String} namespaces - * @api private - */ -function save(namespaces) { - try { - if (namespaces) { - exports.storage.setItem('debug', namespaces); - } else { - exports.storage.removeItem('debug'); - } - } catch (error) { - // Swallow - // XXX (@Qix-) should we be logging these? - } -} - -/** - * Load `namespaces`. - * - * @return {String} returns the previously persisted debug modes - * @api private - */ -function load() { - let r; - try { - r = exports.storage.getItem('debug'); - } catch (error) { - // Swallow - // XXX (@Qix-) should we be logging these? - } - - // If debug isn't set in LS, and we're in Electron, try to load $DEBUG - if (!r && typeof process !== 'undefined' && 'env' in process) { - r = process.env.DEBUG; - } - - return r; -} - -/** - * Localstorage attempts to return the localstorage. - * - * This is necessary because safari throws - * when a user disables cookies/localstorage - * and you attempt to access it. - * - * @return {LocalStorage} - * @api private - */ - -function localstorage() { - try { - // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context - // The Browser also has localStorage in the global context. - return localStorage; - } catch (error) { - // Swallow - // XXX (@Qix-) should we be logging these? - } -} - -module.exports = require('./common')(exports); - -const {formatters} = module.exports; - -/** - * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. - */ - -formatters.j = function (v) { - try { - return JSON.stringify(v); - } catch (error) { - return '[UnexpectedJSONParseError]: ' + error.message; - } -}; diff --git a/reverse_engineering/node_modules/debug/src/common.js b/reverse_engineering/node_modules/debug/src/common.js deleted file mode 100644 index 50ce292..0000000 --- a/reverse_engineering/node_modules/debug/src/common.js +++ /dev/null @@ -1,274 +0,0 @@ - -/** - * This is the common logic for both the Node.js and web browser - * implementations of `debug()`. - */ - -function setup(env) { - createDebug.debug = createDebug; - createDebug.default = createDebug; - createDebug.coerce = coerce; - createDebug.disable = disable; - createDebug.enable = enable; - createDebug.enabled = enabled; - createDebug.humanize = require('ms'); - createDebug.destroy = destroy; - - Object.keys(env).forEach(key => { - createDebug[key] = env[key]; - }); - - /** - * The currently active debug mode names, and names to skip. - */ - - createDebug.names = []; - createDebug.skips = []; - - /** - * Map of special "%n" handling functions, for the debug "format" argument. - * - * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". - */ - createDebug.formatters = {}; - - /** - * Selects a color for a debug namespace - * @param {String} namespace The namespace string for the for the debug instance to be colored - * @return {Number|String} An ANSI color code for the given namespace - * @api private - */ - function selectColor(namespace) { - let hash = 0; - - for (let i = 0; i < namespace.length; i++) { - hash = ((hash << 5) - hash) + namespace.charCodeAt(i); - hash |= 0; // Convert to 32bit integer - } - - return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; - } - createDebug.selectColor = selectColor; - - /** - * Create a debugger with the given `namespace`. - * - * @param {String} namespace - * @return {Function} - * @api public - */ - function createDebug(namespace) { - let prevTime; - let enableOverride = null; - let namespacesCache; - let enabledCache; - - function debug(...args) { - // Disabled? - if (!debug.enabled) { - return; - } - - const self = debug; - - // Set `diff` timestamp - const curr = Number(new Date()); - const ms = curr - (prevTime || curr); - self.diff = ms; - self.prev = prevTime; - self.curr = curr; - prevTime = curr; - - args[0] = createDebug.coerce(args[0]); - - if (typeof args[0] !== 'string') { - // Anything else let's inspect with %O - args.unshift('%O'); - } - - // Apply any `formatters` transformations - let index = 0; - args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { - // If we encounter an escaped % then don't increase the array index - if (match === '%%') { - return '%'; - } - index++; - const formatter = createDebug.formatters[format]; - if (typeof formatter === 'function') { - const val = args[index]; - match = formatter.call(self, val); - - // Now we need to remove `args[index]` since it's inlined in the `format` - args.splice(index, 1); - index--; - } - return match; - }); - - // Apply env-specific formatting (colors, etc.) - createDebug.formatArgs.call(self, args); - - const logFn = self.log || createDebug.log; - logFn.apply(self, args); - } - - debug.namespace = namespace; - debug.useColors = createDebug.useColors(); - debug.color = createDebug.selectColor(namespace); - debug.extend = extend; - debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release. - - Object.defineProperty(debug, 'enabled', { - enumerable: true, - configurable: false, - get: () => { - if (enableOverride !== null) { - return enableOverride; - } - if (namespacesCache !== createDebug.namespaces) { - namespacesCache = createDebug.namespaces; - enabledCache = createDebug.enabled(namespace); - } - - return enabledCache; - }, - set: v => { - enableOverride = v; - } - }); - - // Env-specific initialization logic for debug instances - if (typeof createDebug.init === 'function') { - createDebug.init(debug); - } - - return debug; - } - - function extend(namespace, delimiter) { - const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); - newDebug.log = this.log; - return newDebug; - } - - /** - * Enables a debug mode by namespaces. This can include modes - * separated by a colon and wildcards. - * - * @param {String} namespaces - * @api public - */ - function enable(namespaces) { - createDebug.save(namespaces); - createDebug.namespaces = namespaces; - - createDebug.names = []; - createDebug.skips = []; - - let i; - const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); - const len = split.length; - - for (i = 0; i < len; i++) { - if (!split[i]) { - // ignore empty strings - continue; - } - - namespaces = split[i].replace(/\*/g, '.*?'); - - if (namespaces[0] === '-') { - createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); - } else { - createDebug.names.push(new RegExp('^' + namespaces + '$')); - } - } - } - - /** - * Disable debug output. - * - * @return {String} namespaces - * @api public - */ - function disable() { - const namespaces = [ - ...createDebug.names.map(toNamespace), - ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace) - ].join(','); - createDebug.enable(''); - return namespaces; - } - - /** - * Returns true if the given mode name is enabled, false otherwise. - * - * @param {String} name - * @return {Boolean} - * @api public - */ - function enabled(name) { - if (name[name.length - 1] === '*') { - return true; - } - - let i; - let len; - - for (i = 0, len = createDebug.skips.length; i < len; i++) { - if (createDebug.skips[i].test(name)) { - return false; - } - } - - for (i = 0, len = createDebug.names.length; i < len; i++) { - if (createDebug.names[i].test(name)) { - return true; - } - } - - return false; - } - - /** - * Convert regexp to namespace - * - * @param {RegExp} regxep - * @return {String} namespace - * @api private - */ - function toNamespace(regexp) { - return regexp.toString() - .substring(2, regexp.toString().length - 2) - .replace(/\.\*\?$/, '*'); - } - - /** - * Coerce `val`. - * - * @param {Mixed} val - * @return {Mixed} - * @api private - */ - function coerce(val) { - if (val instanceof Error) { - return val.stack || val.message; - } - return val; - } - - /** - * XXX DO NOT USE. This is a temporary stub function. - * XXX It WILL be removed in the next major release. - */ - function destroy() { - console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); - } - - createDebug.enable(createDebug.load()); - - return createDebug; -} - -module.exports = setup; diff --git a/reverse_engineering/node_modules/debug/src/index.js b/reverse_engineering/node_modules/debug/src/index.js deleted file mode 100644 index bf4c57f..0000000 --- a/reverse_engineering/node_modules/debug/src/index.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Detect Electron renderer / nwjs process, which is node, but we should - * treat as a browser. - */ - -if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) { - module.exports = require('./browser.js'); -} else { - module.exports = require('./node.js'); -} diff --git a/reverse_engineering/node_modules/debug/src/node.js b/reverse_engineering/node_modules/debug/src/node.js deleted file mode 100644 index 79bc085..0000000 --- a/reverse_engineering/node_modules/debug/src/node.js +++ /dev/null @@ -1,263 +0,0 @@ -/** - * Module dependencies. - */ - -const tty = require('tty'); -const util = require('util'); - -/** - * This is the Node.js implementation of `debug()`. - */ - -exports.init = init; -exports.log = log; -exports.formatArgs = formatArgs; -exports.save = save; -exports.load = load; -exports.useColors = useColors; -exports.destroy = util.deprecate( - () => {}, - 'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.' -); - -/** - * Colors. - */ - -exports.colors = [6, 2, 3, 4, 5, 1]; - -try { - // Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json) - // eslint-disable-next-line import/no-extraneous-dependencies - const supportsColor = require('supports-color'); - - if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) { - exports.colors = [ - 20, - 21, - 26, - 27, - 32, - 33, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 56, - 57, - 62, - 63, - 68, - 69, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 92, - 93, - 98, - 99, - 112, - 113, - 128, - 129, - 134, - 135, - 148, - 149, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 178, - 179, - 184, - 185, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 214, - 215, - 220, - 221 - ]; - } -} catch (error) { - // Swallow - we only care if `supports-color` is available; it doesn't have to be. -} - -/** - * Build up the default `inspectOpts` object from the environment variables. - * - * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js - */ - -exports.inspectOpts = Object.keys(process.env).filter(key => { - return /^debug_/i.test(key); -}).reduce((obj, key) => { - // Camel-case - const prop = key - .substring(6) - .toLowerCase() - .replace(/_([a-z])/g, (_, k) => { - return k.toUpperCase(); - }); - - // Coerce string value into JS value - let val = process.env[key]; - if (/^(yes|on|true|enabled)$/i.test(val)) { - val = true; - } else if (/^(no|off|false|disabled)$/i.test(val)) { - val = false; - } else if (val === 'null') { - val = null; - } else { - val = Number(val); - } - - obj[prop] = val; - return obj; -}, {}); - -/** - * Is stdout a TTY? Colored output is enabled when `true`. - */ - -function useColors() { - return 'colors' in exports.inspectOpts ? - Boolean(exports.inspectOpts.colors) : - tty.isatty(process.stderr.fd); -} - -/** - * Adds ANSI color escape codes if enabled. - * - * @api public - */ - -function formatArgs(args) { - const {namespace: name, useColors} = this; - - if (useColors) { - const c = this.color; - const colorCode = '\u001B[3' + (c < 8 ? c : '8;5;' + c); - const prefix = ` ${colorCode};1m${name} \u001B[0m`; - - args[0] = prefix + args[0].split('\n').join('\n' + prefix); - args.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\u001B[0m'); - } else { - args[0] = getDate() + name + ' ' + args[0]; - } -} - -function getDate() { - if (exports.inspectOpts.hideDate) { - return ''; - } - return new Date().toISOString() + ' '; -} - -/** - * Invokes `util.format()` with the specified arguments and writes to stderr. - */ - -function log(...args) { - return process.stderr.write(util.format(...args) + '\n'); -} - -/** - * Save `namespaces`. - * - * @param {String} namespaces - * @api private - */ -function save(namespaces) { - if (namespaces) { - process.env.DEBUG = namespaces; - } else { - // If you set a process.env field to null or undefined, it gets cast to the - // string 'null' or 'undefined'. Just delete instead. - delete process.env.DEBUG; - } -} - -/** - * Load `namespaces`. - * - * @return {String} returns the previously persisted debug modes - * @api private - */ - -function load() { - return process.env.DEBUG; -} - -/** - * Init logic for `debug` instances. - * - * Create a new `inspectOpts` object in case `useColors` is set - * differently for a particular `debug` instance. - */ - -function init(debug) { - debug.inspectOpts = {}; - - const keys = Object.keys(exports.inspectOpts); - for (let i = 0; i < keys.length; i++) { - debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; - } -} - -module.exports = require('./common')(exports); - -const {formatters} = module.exports; - -/** - * Map %o to `util.inspect()`, all on a single line. - */ - -formatters.o = function (v) { - this.inspectOpts.colors = this.useColors; - return util.inspect(v, this.inspectOpts) - .split('\n') - .map(str => str.trim()) - .join(' '); -}; - -/** - * Map %O to `util.inspect()`, allowing multiple lines if needed. - */ - -formatters.O = function (v) { - this.inspectOpts.colors = this.useColors; - return util.inspect(v, this.inspectOpts); -}; diff --git a/reverse_engineering/node_modules/duplexify/.travis.yml b/reverse_engineering/node_modules/duplexify/.travis.yml deleted file mode 100644 index 37494af..0000000 --- a/reverse_engineering/node_modules/duplexify/.travis.yml +++ /dev/null @@ -1,9 +0,0 @@ -language: node_js -arch: - - amd64 - - ppc64le -node_js: - - "4" - - "6" - - "8" - - "10" diff --git a/reverse_engineering/node_modules/duplexify/LICENSE b/reverse_engineering/node_modules/duplexify/LICENSE deleted file mode 100644 index 757562e..0000000 --- a/reverse_engineering/node_modules/duplexify/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Mathias Buus - -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/reverse_engineering/node_modules/duplexify/README.md b/reverse_engineering/node_modules/duplexify/README.md deleted file mode 100644 index 8352900..0000000 --- a/reverse_engineering/node_modules/duplexify/README.md +++ /dev/null @@ -1,97 +0,0 @@ -# duplexify - -Turn a writeable and readable stream into a single streams2 duplex stream. - -Similar to [duplexer2](https://github.com/deoxxa/duplexer2) except it supports both streams2 and streams1 as input -and it allows you to set the readable and writable part asynchronously using `setReadable(stream)` and `setWritable(stream)` - -``` -npm install duplexify -``` - -[![build status](http://img.shields.io/travis/mafintosh/duplexify.svg?style=flat)](http://travis-ci.org/mafintosh/duplexify) - -## Usage - -Use `duplexify(writable, readable, streamOptions)` (or `duplexify.obj(writable, readable)` to create an object stream) - -``` js -var duplexify = require('duplexify') - -// turn writableStream and readableStream into a single duplex stream -var dup = duplexify(writableStream, readableStream) - -dup.write('hello world') // will write to writableStream -dup.on('data', function(data) { - // will read from readableStream -}) -``` - -You can also set the readable and writable parts asynchronously - -``` js -var dup = duplexify() - -dup.write('hello world') // write will buffer until the writable - // part has been set - -// wait a bit ... -dup.setReadable(readableStream) - -// maybe wait some more? -dup.setWritable(writableStream) -``` - -If you call `setReadable` or `setWritable` multiple times it will unregister the previous readable/writable stream. -To disable the readable or writable part call `setReadable` or `setWritable` with `null`. - -If the readable or writable streams emits an error or close it will destroy both streams and bubble up the event. -You can also explicitly destroy the streams by calling `dup.destroy()`. The `destroy` method optionally takes an -error object as argument, in which case the error is emitted as part of the `error` event. - -``` js -dup.on('error', function(err) { - console.log('readable or writable emitted an error - close will follow') -}) - -dup.on('close', function() { - console.log('the duplex stream is destroyed') -}) - -dup.destroy() // calls destroy on the readable and writable part (if present) -``` - -## HTTP request example - -Turn a node core http request into a duplex stream is as easy as - -``` js -var duplexify = require('duplexify') -var http = require('http') - -var request = function(opts) { - var req = http.request(opts) - var dup = duplexify(req) - req.on('response', function(res) { - dup.setReadable(res) - }) - return dup -} - -var req = request({ - method: 'GET', - host: 'www.google.com', - port: 80 -}) - -req.end() -req.pipe(process.stdout) -``` - -## License - -MIT - -## Related - -`duplexify` is part of the [mississippi stream utility collection](https://github.com/maxogden/mississippi) which includes more useful stream modules similar to this one. diff --git a/reverse_engineering/node_modules/duplexify/example.js b/reverse_engineering/node_modules/duplexify/example.js deleted file mode 100644 index 5585c19..0000000 --- a/reverse_engineering/node_modules/duplexify/example.js +++ /dev/null @@ -1,21 +0,0 @@ -var duplexify = require('duplexify') -var http = require('http') - -var request = function(opts) { - var req = http.request(opts) - var dup = duplexify() - dup.setWritable(req) - req.on('response', function(res) { - dup.setReadable(res) - }) - return dup -} - -var req = request({ - method: 'GET', - host: 'www.google.com', - port: 80 -}) - -req.end() -req.pipe(process.stdout) diff --git a/reverse_engineering/node_modules/duplexify/index.js b/reverse_engineering/node_modules/duplexify/index.js deleted file mode 100644 index 3430fe4..0000000 --- a/reverse_engineering/node_modules/duplexify/index.js +++ /dev/null @@ -1,238 +0,0 @@ -var stream = require('readable-stream') -var eos = require('end-of-stream') -var inherits = require('inherits') -var shift = require('stream-shift') - -var SIGNAL_FLUSH = (Buffer.from && Buffer.from !== Uint8Array.from) - ? Buffer.from([0]) - : new Buffer([0]) - -var onuncork = function(self, fn) { - if (self._corked) self.once('uncork', fn) - else fn() -} - -var autoDestroy = function (self, err) { - if (self._autoDestroy) self.destroy(err) -} - -var destroyer = function(self, end) { - return function(err) { - if (err) autoDestroy(self, err.message === 'premature close' ? null : err) - else if (end && !self._ended) self.end() - } -} - -var end = function(ws, fn) { - if (!ws) return fn() - if (ws._writableState && ws._writableState.finished) return fn() - if (ws._writableState) return ws.end(fn) - ws.end() - fn() -} - -var noop = function() {} - -var toStreams2 = function(rs) { - return new (stream.Readable)({objectMode:true, highWaterMark:16}).wrap(rs) -} - -var Duplexify = function(writable, readable, opts) { - if (!(this instanceof Duplexify)) return new Duplexify(writable, readable, opts) - stream.Duplex.call(this, opts) - - this._writable = null - this._readable = null - this._readable2 = null - - this._autoDestroy = !opts || opts.autoDestroy !== false - this._forwardDestroy = !opts || opts.destroy !== false - this._forwardEnd = !opts || opts.end !== false - this._corked = 1 // start corked - this._ondrain = null - this._drained = false - this._forwarding = false - this._unwrite = null - this._unread = null - this._ended = false - - this.destroyed = false - - if (writable) this.setWritable(writable) - if (readable) this.setReadable(readable) -} - -inherits(Duplexify, stream.Duplex) - -Duplexify.obj = function(writable, readable, opts) { - if (!opts) opts = {} - opts.objectMode = true - opts.highWaterMark = 16 - return new Duplexify(writable, readable, opts) -} - -Duplexify.prototype.cork = function() { - if (++this._corked === 1) this.emit('cork') -} - -Duplexify.prototype.uncork = function() { - if (this._corked && --this._corked === 0) this.emit('uncork') -} - -Duplexify.prototype.setWritable = function(writable) { - if (this._unwrite) this._unwrite() - - if (this.destroyed) { - if (writable && writable.destroy) writable.destroy() - return - } - - if (writable === null || writable === false) { - this.end() - return - } - - var self = this - var unend = eos(writable, {writable:true, readable:false}, destroyer(this, this._forwardEnd)) - - var ondrain = function() { - var ondrain = self._ondrain - self._ondrain = null - if (ondrain) ondrain() - } - - var clear = function() { - self._writable.removeListener('drain', ondrain) - unend() - } - - if (this._unwrite) process.nextTick(ondrain) // force a drain on stream reset to avoid livelocks - - this._writable = writable - this._writable.on('drain', ondrain) - this._unwrite = clear - - this.uncork() // always uncork setWritable -} - -Duplexify.prototype.setReadable = function(readable) { - if (this._unread) this._unread() - - if (this.destroyed) { - if (readable && readable.destroy) readable.destroy() - return - } - - if (readable === null || readable === false) { - this.push(null) - this.resume() - return - } - - var self = this - var unend = eos(readable, {writable:false, readable:true}, destroyer(this)) - - var onreadable = function() { - self._forward() - } - - var onend = function() { - self.push(null) - } - - var clear = function() { - self._readable2.removeListener('readable', onreadable) - self._readable2.removeListener('end', onend) - unend() - } - - this._drained = true - this._readable = readable - this._readable2 = readable._readableState ? readable : toStreams2(readable) - this._readable2.on('readable', onreadable) - this._readable2.on('end', onend) - this._unread = clear - - this._forward() -} - -Duplexify.prototype._read = function() { - this._drained = true - this._forward() -} - -Duplexify.prototype._forward = function() { - if (this._forwarding || !this._readable2 || !this._drained) return - this._forwarding = true - - var data - - while (this._drained && (data = shift(this._readable2)) !== null) { - if (this.destroyed) continue - this._drained = this.push(data) - } - - this._forwarding = false -} - -Duplexify.prototype.destroy = function(err, cb) { - if (!cb) cb = noop - if (this.destroyed) return cb(null) - this.destroyed = true - - var self = this - process.nextTick(function() { - self._destroy(err) - cb(null) - }) -} - -Duplexify.prototype._destroy = function(err) { - if (err) { - var ondrain = this._ondrain - this._ondrain = null - if (ondrain) ondrain(err) - else this.emit('error', err) - } - - if (this._forwardDestroy) { - if (this._readable && this._readable.destroy) this._readable.destroy() - if (this._writable && this._writable.destroy) this._writable.destroy() - } - - this.emit('close') -} - -Duplexify.prototype._write = function(data, enc, cb) { - if (this.destroyed) return - if (this._corked) return onuncork(this, this._write.bind(this, data, enc, cb)) - if (data === SIGNAL_FLUSH) return this._finish(cb) - if (!this._writable) return cb() - - if (this._writable.write(data) === false) this._ondrain = cb - else if (!this.destroyed) cb() -} - -Duplexify.prototype._finish = function(cb) { - var self = this - this.emit('preend') - onuncork(this, function() { - end(self._forwardEnd && self._writable, function() { - // haxx to not emit prefinish twice - if (self._writableState.prefinished === false) self._writableState.prefinished = true - self.emit('prefinish') - onuncork(self, cb) - }) - }) -} - -Duplexify.prototype.end = function(data, enc, cb) { - if (typeof data === 'function') return this.end(null, null, data) - if (typeof enc === 'function') return this.end(data, null, enc) - this._ended = true - if (data) this.write(data) - if (!this._writableState.ending && !this._writableState.destroyed) this.write(SIGNAL_FLUSH) - return stream.Writable.prototype.end.call(this, cb) -} - -module.exports = Duplexify diff --git a/reverse_engineering/node_modules/duplexify/package.json b/reverse_engineering/node_modules/duplexify/package.json deleted file mode 100644 index f9ce14c..0000000 --- a/reverse_engineering/node_modules/duplexify/package.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "_from": "duplexify@^4.0.0", - "_id": "duplexify@4.1.2", - "_inBundle": false, - "_integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", - "_location": "/duplexify", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "duplexify@^4.0.0", - "name": "duplexify", - "escapedName": "duplexify", - "rawSpec": "^4.0.0", - "saveSpec": null, - "fetchSpec": "^4.0.0" - }, - "_requiredBy": [ - "/@google-cloud/bigquery", - "/@google-cloud/common" - ], - "_resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", - "_shasum": "18b4f8d28289132fa0b9573c898d9f903f81c7b0", - "_spec": "duplexify@^4.0.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/@google-cloud/bigquery", - "author": { - "name": "Mathias Buus" - }, - "bugs": { - "url": "https://github.com/mafintosh/duplexify/issues" - }, - "bundleDependencies": false, - "dependencies": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.0" - }, - "deprecated": false, - "description": "Turn a writable and readable stream into a streams2 duplex stream with support for async initialization and streams1/streams2 input", - "devDependencies": { - "concat-stream": "^1.5.2", - "tape": "^4.0.0", - "through2": "^2.0.0" - }, - "homepage": "https://github.com/mafintosh/duplexify", - "keywords": [ - "duplex", - "streams2", - "streams", - "stream", - "writable", - "readable", - "async" - ], - "license": "MIT", - "main": "index.js", - "name": "duplexify", - "repository": { - "type": "git", - "url": "git://github.com/mafintosh/duplexify.git" - }, - "scripts": { - "test": "tape test.js" - }, - "version": "4.1.2" -} diff --git a/reverse_engineering/node_modules/duplexify/test.js b/reverse_engineering/node_modules/duplexify/test.js deleted file mode 100644 index 9341105..0000000 --- a/reverse_engineering/node_modules/duplexify/test.js +++ /dev/null @@ -1,339 +0,0 @@ -var tape = require('tape') -var through = require('through2') -var concat = require('concat-stream') -var stream = require('readable-stream') -var net = require('net') -var duplexify = require('./') - -var HELLO_WORLD = (Buffer.from && Buffer.from !== Uint8Array.from) - ? Buffer.from('hello world') - : new Buffer('hello world') - -tape('passthrough', function(t) { - t.plan(2) - - var pt = through() - var dup = duplexify(pt, pt) - - dup.end('hello world') - dup.on('finish', function() { - t.ok(true, 'should finish') - }) - dup.pipe(concat(function(data) { - t.same(data.toString(), 'hello world', 'same in as out') - })) -}) - -tape('passthrough + double end', function(t) { - t.plan(2) - - var pt = through() - var dup = duplexify(pt, pt) - - dup.end('hello world') - dup.end() - - dup.on('finish', function() { - t.ok(true, 'should finish') - }) - dup.pipe(concat(function(data) { - t.same(data.toString(), 'hello world', 'same in as out') - })) -}) - -tape('async passthrough + end', function(t) { - t.plan(2) - - var pt = through.obj({highWaterMark:1}, function(data, enc, cb) { - setTimeout(function() { - cb(null, data) - }, 100) - }) - - var dup = duplexify(pt, pt) - - dup.write('hello ') - dup.write('world') - dup.end() - - dup.on('finish', function() { - t.ok(true, 'should finish') - }) - dup.pipe(concat(function(data) { - t.same(data.toString(), 'hello world', 'same in as out') - })) -}) - -tape('duplex', function(t) { - var readExpected = ['read-a', 'read-b', 'read-c'] - var writeExpected = ['write-a', 'write-b', 'write-c'] - - t.plan(readExpected.length+writeExpected.length+2) - - var readable = through.obj() - var writable = through.obj(function(data, enc, cb) { - t.same(data, writeExpected.shift(), 'onwrite should match') - cb() - }) - - var dup = duplexify.obj(writable, readable) - - readExpected.slice().forEach(function(data) { - readable.write(data) - }) - readable.end() - - writeExpected.slice().forEach(function(data) { - dup.write(data) - }) - dup.end() - - dup.on('data', function(data) { - t.same(data, readExpected.shift(), 'ondata should match') - }) - dup.on('end', function() { - t.ok(true, 'should end') - }) - dup.on('finish', function() { - t.ok(true, 'should finish') - }) -}) - -tape('async', function(t) { - var dup = duplexify() - var pt = through() - - dup.pipe(concat(function(data) { - t.same(data.toString(), 'i was async', 'same in as out') - t.end() - })) - - dup.write('i') - dup.write(' was ') - dup.end('async') - - setTimeout(function() { - dup.setWritable(pt) - setTimeout(function() { - dup.setReadable(pt) - }, 50) - }, 50) -}) - -tape('destroy', function(t) { - t.plan(2) - - var write = through() - var read = through() - var dup = duplexify(write, read) - - write.destroy = function() { - t.ok(true, 'write destroyed') - } - - dup.on('close', function() { - t.ok(true, 'close emitted') - }) - - dup.destroy() - dup.destroy() // should only work once - dup.end() -}) - -tape('destroy both', function(t) { - t.plan(3) - - var write = through() - var read = through() - var dup = duplexify(write, read) - - write.destroy = function() { - t.ok(true, 'write destroyed') - } - - read.destroy = function() { - t.ok(true, 'read destroyed') - } - - dup.on('close', function() { - t.ok(true, 'close emitted') - }) - - dup.destroy() - dup.destroy() // should only work once -}) - -tape('bubble read errors', function(t) { - t.plan(2) - - var write = through() - var read = through() - var dup = duplexify(write, read) - - dup.on('error', function(err) { - t.same(err.message, 'read-error', 'received read error') - }) - dup.on('close', function() { - t.ok(true, 'close emitted') - }) - - read.emit('error', new Error('read-error')) - write.emit('error', new Error('write-error')) // only emit first error -}) - -tape('bubble write errors', function(t) { - t.plan(2) - - var write = through() - var read = through() - var dup = duplexify(write, read) - - dup.on('error', function(err) { - t.same(err.message, 'write-error', 'received write error') - }) - dup.on('close', function() { - t.ok(true, 'close emitted') - }) - - write.emit('error', new Error('write-error')) - read.emit('error', new Error('read-error')) // only emit first error -}) - -tape('bubble errors from write()', function(t) { - t.plan(3) - - var errored = false - var dup = duplexify(new stream.Writable({ - write: function(chunk, enc, next) { - next(new Error('write-error')) - } - })) - - dup.on('error', function(err) { - errored = true - t.same(err.message, 'write-error', 'received write error') - }) - dup.on('close', function() { - t.pass('close emitted') - t.ok(errored, 'error was emitted before close') - }) - dup.end('123') -}) - -tape('destroy while waiting for drain', function(t) { - t.plan(3) - - var errored = false - var dup = duplexify(new stream.Writable({ - highWaterMark: 0, - write: function() {} - })) - - dup.on('error', function(err) { - errored = true - t.same(err.message, 'destroy-error', 'received destroy error') - }) - dup.on('close', function() { - t.pass('close emitted') - t.ok(errored, 'error was emitted before close') - }) - dup.write('123') - dup.destroy(new Error('destroy-error')) -}) - -tape('reset writable / readable', function(t) { - t.plan(3) - - var toUpperCase = function(data, enc, cb) { - cb(null, data.toString().toUpperCase()) - } - - var passthrough = through() - var upper = through(toUpperCase) - var dup = duplexify(passthrough, passthrough) - - dup.once('data', function(data) { - t.same(data.toString(), 'hello') - dup.setWritable(upper) - dup.setReadable(upper) - dup.once('data', function(data) { - t.same(data.toString(), 'HELLO') - dup.once('data', function(data) { - t.same(data.toString(), 'HI') - t.end() - }) - }) - dup.write('hello') - dup.write('hi') - }) - dup.write('hello') -}) - -tape('cork', function(t) { - var passthrough = through() - var dup = duplexify(passthrough, passthrough) - var ok = false - - dup.on('prefinish', function() { - dup.cork() - setTimeout(function() { - ok = true - dup.uncork() - }, 100) - }) - dup.on('finish', function() { - t.ok(ok) - t.end() - }) - dup.end() -}) - -tape('prefinish not twice', function(t) { - var passthrough = through() - var dup = duplexify(passthrough, passthrough) - var prefinished = false - - dup.on('prefinish', function() { - t.ok(!prefinished, 'only prefinish once') - prefinished = true - }) - - dup.on('finish', function() { - t.end() - }) - - dup.end() -}) - -tape('close', function(t) { - var passthrough = through() - var dup = duplexify(passthrough, passthrough) - - passthrough.emit('close') - dup.on('close', function() { - t.ok(true, 'should forward close') - t.end() - }) -}) - -tape('works with node native streams (net)', function(t) { - t.plan(1) - - var server = net.createServer(function(socket) { - var dup = duplexify(socket, socket) - - dup.once('data', function(chunk) { - t.same(chunk, HELLO_WORLD) - server.close() - socket.end() - t.end() - }) - }) - - server.listen(0, function () { - var socket = net.connect(server.address().port) - var dup = duplexify(socket, socket) - - dup.write(HELLO_WORLD) - }) -}) diff --git a/reverse_engineering/node_modules/ecdsa-sig-formatter/CODEOWNERS b/reverse_engineering/node_modules/ecdsa-sig-formatter/CODEOWNERS deleted file mode 100644 index 4451d3d..0000000 --- a/reverse_engineering/node_modules/ecdsa-sig-formatter/CODEOWNERS +++ /dev/null @@ -1 +0,0 @@ -* @omsmith diff --git a/reverse_engineering/node_modules/ecdsa-sig-formatter/LICENSE b/reverse_engineering/node_modules/ecdsa-sig-formatter/LICENSE deleted file mode 100644 index 8754ed6..0000000 --- a/reverse_engineering/node_modules/ecdsa-sig-formatter/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2015 D2L Corporation - - Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/reverse_engineering/node_modules/ecdsa-sig-formatter/README.md b/reverse_engineering/node_modules/ecdsa-sig-formatter/README.md deleted file mode 100644 index daa95d6..0000000 --- a/reverse_engineering/node_modules/ecdsa-sig-formatter/README.md +++ /dev/null @@ -1,65 +0,0 @@ -# ecdsa-sig-formatter - -[![Build Status](https://travis-ci.org/Brightspace/node-ecdsa-sig-formatter.svg?branch=master)](https://travis-ci.org/Brightspace/node-ecdsa-sig-formatter) [![Coverage Status](https://coveralls.io/repos/Brightspace/node-ecdsa-sig-formatter/badge.svg)](https://coveralls.io/r/Brightspace/node-ecdsa-sig-formatter) - -Translate between JOSE and ASN.1/DER encodings for ECDSA signatures - -## Install -```sh -npm install ecdsa-sig-formatter --save -``` - -## Usage -```js -var format = require('ecdsa-sig-formatter'); - -var derSignature = '..'; // asn.1/DER encoded ecdsa signature - -var joseSignature = format.derToJose(derSignature); - -``` - -### API - ---- - -#### `.derToJose(Buffer|String signature, String alg)` -> `String` - -Convert the ASN.1/DER encoded signature to a JOSE-style concatenated signature. -Returns a _base64 url_ encoded `String`. - -* If _signature_ is a `String`, it should be _base64_ encoded -* _alg_ must be one of _ES256_, _ES384_ or _ES512_ - ---- - -#### `.joseToDer(Buffer|String signature, String alg)` -> `Buffer` - -Convert the JOSE-style concatenated signature to an ASN.1/DER encoded -signature. Returns a `Buffer` - -* If _signature_ is a `String`, it should be _base64 url_ encoded -* _alg_ must be one of _ES256_, _ES384_ or _ES512_ - -## Contributing - -1. **Fork** the repository. Committing directly against this repository is - highly discouraged. - -2. Make your modifications in a branch, updating and writing new unit tests - as necessary in the `spec` directory. - -3. Ensure that all tests pass with `npm test` - -4. `rebase` your changes against master. *Do not merge*. - -5. Submit a pull request to this repository. Wait for tests to run and someone - to chime in. - -### Code Style - -This repository is configured with [EditorConfig][EditorConfig] and -[ESLint][ESLint] rules. - -[EditorConfig]: http://editorconfig.org/ -[ESLint]: http://eslint.org diff --git a/reverse_engineering/node_modules/ecdsa-sig-formatter/package.json b/reverse_engineering/node_modules/ecdsa-sig-formatter/package.json deleted file mode 100644 index 9c965e5..0000000 --- a/reverse_engineering/node_modules/ecdsa-sig-formatter/package.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "_from": "ecdsa-sig-formatter@^1.0.11", - "_id": "ecdsa-sig-formatter@1.0.11", - "_inBundle": false, - "_integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "_location": "/ecdsa-sig-formatter", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "ecdsa-sig-formatter@^1.0.11", - "name": "ecdsa-sig-formatter", - "escapedName": "ecdsa-sig-formatter", - "rawSpec": "^1.0.11", - "saveSpec": null, - "fetchSpec": "^1.0.11" - }, - "_requiredBy": [ - "/google-auth-library", - "/jwa" - ], - "_resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "_shasum": "ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf", - "_spec": "ecdsa-sig-formatter@^1.0.11", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/google-auth-library", - "author": { - "name": "D2L Corporation" - }, - "bugs": { - "url": "https://github.com/Brightspace/node-ecdsa-sig-formatter/issues" - }, - "bundleDependencies": false, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "deprecated": false, - "description": "Translate ECDSA signatures between ASN.1/DER and JOSE-style concatenation", - "devDependencies": { - "bench": "^0.3.6", - "chai": "^3.5.0", - "coveralls": "^2.11.9", - "eslint": "^2.12.0", - "eslint-config-brightspace": "^0.2.1", - "istanbul": "^0.4.3", - "jwk-to-pem": "^1.2.5", - "mocha": "^2.5.3", - "native-crypto": "^1.7.0" - }, - "homepage": "https://github.com/Brightspace/node-ecdsa-sig-formatter#readme", - "keywords": [ - "ecdsa", - "der", - "asn.1", - "jwt", - "jwa", - "jsonwebtoken", - "jose" - ], - "license": "Apache-2.0", - "main": "src/ecdsa-sig-formatter.js", - "name": "ecdsa-sig-formatter", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/Brightspace/node-ecdsa-sig-formatter.git" - }, - "scripts": { - "check-style": "eslint .", - "pretest": "npm run check-style", - "report-cov": "cat ./coverage/lcov.info | coveralls", - "test": "istanbul cover --root src _mocha -- spec" - }, - "typings": "./src/ecdsa-sig-formatter.d.ts", - "version": "1.0.11" -} diff --git a/reverse_engineering/node_modules/ecdsa-sig-formatter/src/ecdsa-sig-formatter.d.ts b/reverse_engineering/node_modules/ecdsa-sig-formatter/src/ecdsa-sig-formatter.d.ts deleted file mode 100644 index 9693aa0..0000000 --- a/reverse_engineering/node_modules/ecdsa-sig-formatter/src/ecdsa-sig-formatter.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -/// - -declare module "ecdsa-sig-formatter" { - /** - * Convert the ASN.1/DER encoded signature to a JOSE-style concatenated signature. Returns a base64 url encoded String. - * If signature is a String, it should be base64 encoded - * alg must be one of ES256, ES384 or ES512 - */ - export function derToJose(signature: Buffer | string, alg: string): string; - - /** - * Convert the JOSE-style concatenated signature to an ASN.1/DER encoded signature. Returns a Buffer - * If signature is a String, it should be base64 url encoded - * alg must be one of ES256, ES384 or ES512 - */ - export function joseToDer(signature: Buffer | string, alg: string): Buffer -} diff --git a/reverse_engineering/node_modules/ecdsa-sig-formatter/src/ecdsa-sig-formatter.js b/reverse_engineering/node_modules/ecdsa-sig-formatter/src/ecdsa-sig-formatter.js deleted file mode 100644 index 38eeb9b..0000000 --- a/reverse_engineering/node_modules/ecdsa-sig-formatter/src/ecdsa-sig-formatter.js +++ /dev/null @@ -1,187 +0,0 @@ -'use strict'; - -var Buffer = require('safe-buffer').Buffer; - -var getParamBytesForAlg = require('./param-bytes-for-alg'); - -var MAX_OCTET = 0x80, - CLASS_UNIVERSAL = 0, - PRIMITIVE_BIT = 0x20, - TAG_SEQ = 0x10, - TAG_INT = 0x02, - ENCODED_TAG_SEQ = (TAG_SEQ | PRIMITIVE_BIT) | (CLASS_UNIVERSAL << 6), - ENCODED_TAG_INT = TAG_INT | (CLASS_UNIVERSAL << 6); - -function base64Url(base64) { - return base64 - .replace(/=/g, '') - .replace(/\+/g, '-') - .replace(/\//g, '_'); -} - -function signatureAsBuffer(signature) { - if (Buffer.isBuffer(signature)) { - return signature; - } else if ('string' === typeof signature) { - return Buffer.from(signature, 'base64'); - } - - throw new TypeError('ECDSA signature must be a Base64 string or a Buffer'); -} - -function derToJose(signature, alg) { - signature = signatureAsBuffer(signature); - var paramBytes = getParamBytesForAlg(alg); - - // the DER encoded param should at most be the param size, plus a padding - // zero, since due to being a signed integer - var maxEncodedParamLength = paramBytes + 1; - - var inputLength = signature.length; - - var offset = 0; - if (signature[offset++] !== ENCODED_TAG_SEQ) { - throw new Error('Could not find expected "seq"'); - } - - var seqLength = signature[offset++]; - if (seqLength === (MAX_OCTET | 1)) { - seqLength = signature[offset++]; - } - - if (inputLength - offset < seqLength) { - throw new Error('"seq" specified length of "' + seqLength + '", only "' + (inputLength - offset) + '" remaining'); - } - - if (signature[offset++] !== ENCODED_TAG_INT) { - throw new Error('Could not find expected "int" for "r"'); - } - - var rLength = signature[offset++]; - - if (inputLength - offset - 2 < rLength) { - throw new Error('"r" specified length of "' + rLength + '", only "' + (inputLength - offset - 2) + '" available'); - } - - if (maxEncodedParamLength < rLength) { - throw new Error('"r" specified length of "' + rLength + '", max of "' + maxEncodedParamLength + '" is acceptable'); - } - - var rOffset = offset; - offset += rLength; - - if (signature[offset++] !== ENCODED_TAG_INT) { - throw new Error('Could not find expected "int" for "s"'); - } - - var sLength = signature[offset++]; - - if (inputLength - offset !== sLength) { - throw new Error('"s" specified length of "' + sLength + '", expected "' + (inputLength - offset) + '"'); - } - - if (maxEncodedParamLength < sLength) { - throw new Error('"s" specified length of "' + sLength + '", max of "' + maxEncodedParamLength + '" is acceptable'); - } - - var sOffset = offset; - offset += sLength; - - if (offset !== inputLength) { - throw new Error('Expected to consume entire buffer, but "' + (inputLength - offset) + '" bytes remain'); - } - - var rPadding = paramBytes - rLength, - sPadding = paramBytes - sLength; - - var dst = Buffer.allocUnsafe(rPadding + rLength + sPadding + sLength); - - for (offset = 0; offset < rPadding; ++offset) { - dst[offset] = 0; - } - signature.copy(dst, offset, rOffset + Math.max(-rPadding, 0), rOffset + rLength); - - offset = paramBytes; - - for (var o = offset; offset < o + sPadding; ++offset) { - dst[offset] = 0; - } - signature.copy(dst, offset, sOffset + Math.max(-sPadding, 0), sOffset + sLength); - - dst = dst.toString('base64'); - dst = base64Url(dst); - - return dst; -} - -function countPadding(buf, start, stop) { - var padding = 0; - while (start + padding < stop && buf[start + padding] === 0) { - ++padding; - } - - var needsSign = buf[start + padding] >= MAX_OCTET; - if (needsSign) { - --padding; - } - - return padding; -} - -function joseToDer(signature, alg) { - signature = signatureAsBuffer(signature); - var paramBytes = getParamBytesForAlg(alg); - - var signatureBytes = signature.length; - if (signatureBytes !== paramBytes * 2) { - throw new TypeError('"' + alg + '" signatures must be "' + paramBytes * 2 + '" bytes, saw "' + signatureBytes + '"'); - } - - var rPadding = countPadding(signature, 0, paramBytes); - var sPadding = countPadding(signature, paramBytes, signature.length); - var rLength = paramBytes - rPadding; - var sLength = paramBytes - sPadding; - - var rsBytes = 1 + 1 + rLength + 1 + 1 + sLength; - - var shortLength = rsBytes < MAX_OCTET; - - var dst = Buffer.allocUnsafe((shortLength ? 2 : 3) + rsBytes); - - var offset = 0; - dst[offset++] = ENCODED_TAG_SEQ; - if (shortLength) { - // Bit 8 has value "0" - // bits 7-1 give the length. - dst[offset++] = rsBytes; - } else { - // Bit 8 of first octet has value "1" - // bits 7-1 give the number of additional length octets. - dst[offset++] = MAX_OCTET | 1; - // length, base 256 - dst[offset++] = rsBytes & 0xff; - } - dst[offset++] = ENCODED_TAG_INT; - dst[offset++] = rLength; - if (rPadding < 0) { - dst[offset++] = 0; - offset += signature.copy(dst, offset, 0, paramBytes); - } else { - offset += signature.copy(dst, offset, rPadding, paramBytes); - } - dst[offset++] = ENCODED_TAG_INT; - dst[offset++] = sLength; - if (sPadding < 0) { - dst[offset++] = 0; - signature.copy(dst, offset, paramBytes); - } else { - signature.copy(dst, offset, paramBytes + sPadding); - } - - return dst; -} - -module.exports = { - derToJose: derToJose, - joseToDer: joseToDer -}; diff --git a/reverse_engineering/node_modules/ecdsa-sig-formatter/src/param-bytes-for-alg.js b/reverse_engineering/node_modules/ecdsa-sig-formatter/src/param-bytes-for-alg.js deleted file mode 100644 index 9fe67ac..0000000 --- a/reverse_engineering/node_modules/ecdsa-sig-formatter/src/param-bytes-for-alg.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -function getParamSize(keySize) { - var result = ((keySize / 8) | 0) + (keySize % 8 === 0 ? 0 : 1); - return result; -} - -var paramBytesForAlg = { - ES256: getParamSize(256), - ES384: getParamSize(384), - ES512: getParamSize(521) -}; - -function getParamBytesForAlg(alg) { - var paramBytes = paramBytesForAlg[alg]; - if (paramBytes) { - return paramBytes; - } - - throw new Error('Unknown algorithm "' + alg + '"'); -} - -module.exports = getParamBytesForAlg; diff --git a/reverse_engineering/node_modules/end-of-stream/LICENSE b/reverse_engineering/node_modules/end-of-stream/LICENSE deleted file mode 100644 index 757562e..0000000 --- a/reverse_engineering/node_modules/end-of-stream/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Mathias Buus - -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/reverse_engineering/node_modules/end-of-stream/README.md b/reverse_engineering/node_modules/end-of-stream/README.md deleted file mode 100644 index 857b14b..0000000 --- a/reverse_engineering/node_modules/end-of-stream/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# end-of-stream - -A node module that calls a callback when a readable/writable/duplex stream has completed or failed. - - npm install end-of-stream - -[![Build status](https://travis-ci.org/mafintosh/end-of-stream.svg?branch=master)](https://travis-ci.org/mafintosh/end-of-stream) - -## Usage - -Simply pass a stream and a callback to the `eos`. -Both legacy streams, streams2 and stream3 are supported. - -``` js -var eos = require('end-of-stream'); - -eos(readableStream, function(err) { - // this will be set to the stream instance - if (err) return console.log('stream had an error or closed early'); - console.log('stream has ended', this === readableStream); -}); - -eos(writableStream, function(err) { - if (err) return console.log('stream had an error or closed early'); - console.log('stream has finished', this === writableStream); -}); - -eos(duplexStream, function(err) { - if (err) return console.log('stream had an error or closed early'); - console.log('stream has ended and finished', this === duplexStream); -}); - -eos(duplexStream, {readable:false}, function(err) { - if (err) return console.log('stream had an error or closed early'); - console.log('stream has finished but might still be readable'); -}); - -eos(duplexStream, {writable:false}, function(err) { - if (err) return console.log('stream had an error or closed early'); - console.log('stream has ended but might still be writable'); -}); - -eos(readableStream, {error:false}, function(err) { - // do not treat emit('error', err) as a end-of-stream -}); -``` - -## License - -MIT - -## Related - -`end-of-stream` is part of the [mississippi stream utility collection](https://github.com/maxogden/mississippi) which includes more useful stream modules similar to this one. diff --git a/reverse_engineering/node_modules/end-of-stream/index.js b/reverse_engineering/node_modules/end-of-stream/index.js deleted file mode 100644 index c77f0d5..0000000 --- a/reverse_engineering/node_modules/end-of-stream/index.js +++ /dev/null @@ -1,94 +0,0 @@ -var once = require('once'); - -var noop = function() {}; - -var isRequest = function(stream) { - return stream.setHeader && typeof stream.abort === 'function'; -}; - -var isChildProcess = function(stream) { - return stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3 -}; - -var eos = function(stream, opts, callback) { - if (typeof opts === 'function') return eos(stream, null, opts); - if (!opts) opts = {}; - - callback = once(callback || noop); - - var ws = stream._writableState; - var rs = stream._readableState; - var readable = opts.readable || (opts.readable !== false && stream.readable); - var writable = opts.writable || (opts.writable !== false && stream.writable); - var cancelled = false; - - var onlegacyfinish = function() { - if (!stream.writable) onfinish(); - }; - - var onfinish = function() { - writable = false; - if (!readable) callback.call(stream); - }; - - var onend = function() { - readable = false; - if (!writable) callback.call(stream); - }; - - var onexit = function(exitCode) { - callback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null); - }; - - var onerror = function(err) { - callback.call(stream, err); - }; - - var onclose = function() { - process.nextTick(onclosenexttick); - }; - - var onclosenexttick = function() { - if (cancelled) return; - if (readable && !(rs && (rs.ended && !rs.destroyed))) return callback.call(stream, new Error('premature close')); - if (writable && !(ws && (ws.ended && !ws.destroyed))) return callback.call(stream, new Error('premature close')); - }; - - var onrequest = function() { - stream.req.on('finish', onfinish); - }; - - if (isRequest(stream)) { - stream.on('complete', onfinish); - stream.on('abort', onclose); - if (stream.req) onrequest(); - else stream.on('request', onrequest); - } else if (writable && !ws) { // legacy streams - stream.on('end', onlegacyfinish); - stream.on('close', onlegacyfinish); - } - - if (isChildProcess(stream)) stream.on('exit', onexit); - - stream.on('end', onend); - stream.on('finish', onfinish); - if (opts.error !== false) stream.on('error', onerror); - stream.on('close', onclose); - - return function() { - cancelled = true; - stream.removeListener('complete', onfinish); - stream.removeListener('abort', onclose); - stream.removeListener('request', onrequest); - if (stream.req) stream.req.removeListener('finish', onfinish); - stream.removeListener('end', onlegacyfinish); - stream.removeListener('close', onlegacyfinish); - stream.removeListener('finish', onfinish); - stream.removeListener('exit', onexit); - stream.removeListener('end', onend); - stream.removeListener('error', onerror); - stream.removeListener('close', onclose); - }; -}; - -module.exports = eos; diff --git a/reverse_engineering/node_modules/end-of-stream/package.json b/reverse_engineering/node_modules/end-of-stream/package.json deleted file mode 100644 index 8eaaeef..0000000 --- a/reverse_engineering/node_modules/end-of-stream/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "_from": "end-of-stream@^1.4.1", - "_id": "end-of-stream@1.4.4", - "_inBundle": false, - "_integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "_location": "/end-of-stream", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "end-of-stream@^1.4.1", - "name": "end-of-stream", - "escapedName": "end-of-stream", - "rawSpec": "^1.4.1", - "saveSpec": null, - "fetchSpec": "^1.4.1" - }, - "_requiredBy": [ - "/duplexify" - ], - "_resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "_shasum": "5ae64a5f45057baf3626ec14da0ca5e4b2431eb0", - "_spec": "end-of-stream@^1.4.1", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/duplexify", - "author": { - "name": "Mathias Buus", - "email": "mathiasbuus@gmail.com" - }, - "bugs": { - "url": "https://github.com/mafintosh/end-of-stream/issues" - }, - "bundleDependencies": false, - "dependencies": { - "once": "^1.4.0" - }, - "deprecated": false, - "description": "Call a callback when a readable/writable/duplex stream has completed or failed.", - "devDependencies": { - "tape": "^4.11.0" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/mafintosh/end-of-stream", - "keywords": [ - "stream", - "streams", - "callback", - "finish", - "close", - "end", - "wait" - ], - "license": "MIT", - "main": "index.js", - "name": "end-of-stream", - "repository": { - "type": "git", - "url": "git://github.com/mafintosh/end-of-stream.git" - }, - "scripts": { - "test": "node test.js" - }, - "version": "1.4.4" -} diff --git a/reverse_engineering/node_modules/ent/.npmignore b/reverse_engineering/node_modules/ent/.npmignore deleted file mode 100644 index 378eac2..0000000 --- a/reverse_engineering/node_modules/ent/.npmignore +++ /dev/null @@ -1 +0,0 @@ -build diff --git a/reverse_engineering/node_modules/ent/.travis.yml b/reverse_engineering/node_modules/ent/.travis.yml deleted file mode 100644 index 895dbd3..0000000 --- a/reverse_engineering/node_modules/ent/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 diff --git a/reverse_engineering/node_modules/ent/LICENSE b/reverse_engineering/node_modules/ent/LICENSE deleted file mode 100644 index ee27ba4..0000000 --- a/reverse_engineering/node_modules/ent/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -This software is released under the MIT 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. diff --git a/reverse_engineering/node_modules/ent/decode.js b/reverse_engineering/node_modules/ent/decode.js deleted file mode 100644 index fee2e90..0000000 --- a/reverse_engineering/node_modules/ent/decode.js +++ /dev/null @@ -1,32 +0,0 @@ -var punycode = require('punycode'); -var entities = require('./entities.json'); - -module.exports = decode; - -function decode (str) { - if (typeof str !== 'string') { - throw new TypeError('Expected a String'); - } - - return str.replace(/&(#?[^;\W]+;?)/g, function (_, match) { - var m; - if (m = /^#(\d+);?$/.exec(match)) { - return punycode.ucs2.encode([ parseInt(m[1], 10) ]); - } else if (m = /^#[Xx]([A-Fa-f0-9]+);?/.exec(match)) { - return punycode.ucs2.encode([ parseInt(m[1], 16) ]); - } else { - // named entity - var hasSemi = /;$/.test(match); - var withoutSemi = hasSemi ? match.replace(/;$/, '') : match; - var target = entities[withoutSemi] || (hasSemi && entities[match]); - - if (typeof target === 'number') { - return punycode.ucs2.encode([ target ]); - } else if (typeof target === 'string') { - return target; - } else { - return '&' + match; - } - } - }); -} diff --git a/reverse_engineering/node_modules/ent/encode.js b/reverse_engineering/node_modules/ent/encode.js deleted file mode 100644 index f48764c..0000000 --- a/reverse_engineering/node_modules/ent/encode.js +++ /dev/null @@ -1,39 +0,0 @@ -var punycode = require('punycode'); -var revEntities = require('./reversed.json'); - -module.exports = encode; - -function encode (str, opts) { - if (typeof str !== 'string') { - throw new TypeError('Expected a String'); - } - if (!opts) opts = {}; - - var numeric = true; - if (opts.named) numeric = false; - if (opts.numeric !== undefined) numeric = opts.numeric; - - var special = opts.special || { - '"': true, "'": true, - '<': true, '>': true, - '&': true - }; - - var codePoints = punycode.ucs2.decode(str); - var chars = []; - for (var i = 0; i < codePoints.length; i++) { - var cc = codePoints[i]; - var c = punycode.ucs2.encode([ cc ]); - var e = revEntities[cc]; - if (e && (cc >= 127 || special[c]) && !numeric) { - chars.push('&' + (/;$/.test(e) ? e : e + ';')); - } - else if (cc < 32 || cc >= 127 || special[c]) { - chars.push('&#' + cc + ';'); - } - else { - chars.push(c); - } - } - return chars.join(''); -} diff --git a/reverse_engineering/node_modules/ent/entities.json b/reverse_engineering/node_modules/ent/entities.json deleted file mode 100644 index 69e4cf0..0000000 --- a/reverse_engineering/node_modules/ent/entities.json +++ /dev/null @@ -1,2233 +0,0 @@ -{ - "Aacute;": "\u00C1", - "Aacute": "\u00C1", - "aacute;": "\u00E1", - "aacute": "\u00E1", - "Abreve;": "\u0102", - "abreve;": "\u0103", - "ac;": "\u223E", - "acd;": "\u223F", - "acE;": "\u223E\u0333", - "Acirc;": "\u00C2", - "Acirc": "\u00C2", - "acirc;": "\u00E2", - "acirc": "\u00E2", - "acute;": "\u00B4", - "acute": "\u00B4", - "Acy;": "\u0410", - "acy;": "\u0430", - "AElig;": "\u00C6", - "AElig": "\u00C6", - "aelig;": "\u00E6", - "aelig": "\u00E6", - "af;": "\u2061", - "Afr;": "\uD835\uDD04", - "afr;": "\uD835\uDD1E", - "Agrave;": "\u00C0", - "Agrave": "\u00C0", - "agrave;": "\u00E0", - "agrave": "\u00E0", - "alefsym;": "\u2135", - "aleph;": "\u2135", - "Alpha;": "\u0391", - "alpha;": "\u03B1", - "Amacr;": "\u0100", - "amacr;": "\u0101", - "amalg;": "\u2A3F", - "AMP;": "&", - "AMP": "&", - "amp;": "&", - "amp": "&", - "And;": "\u2A53", - "and;": "\u2227", - "andand;": "\u2A55", - "andd;": "\u2A5C", - "andslope;": "\u2A58", - "andv;": "\u2A5A", - "ang;": "\u2220", - "ange;": "\u29A4", - "angle;": "\u2220", - "angmsd;": "\u2221", - "angmsdaa;": "\u29A8", - "angmsdab;": "\u29A9", - "angmsdac;": "\u29AA", - "angmsdad;": "\u29AB", - "angmsdae;": "\u29AC", - "angmsdaf;": "\u29AD", - "angmsdag;": "\u29AE", - "angmsdah;": "\u29AF", - "angrt;": "\u221F", - "angrtvb;": "\u22BE", - "angrtvbd;": "\u299D", - "angsph;": "\u2222", - "angst;": "\u00C5", - "angzarr;": "\u237C", - "Aogon;": "\u0104", - "aogon;": "\u0105", - "Aopf;": "\uD835\uDD38", - "aopf;": "\uD835\uDD52", - "ap;": "\u2248", - "apacir;": "\u2A6F", - "apE;": "\u2A70", - "ape;": "\u224A", - "apid;": "\u224B", - "apos;": "'", - "ApplyFunction;": "\u2061", - "approx;": "\u2248", - "approxeq;": "\u224A", - "Aring;": "\u00C5", - "Aring": "\u00C5", - "aring;": "\u00E5", - "aring": "\u00E5", - "Ascr;": "\uD835\uDC9C", - "ascr;": "\uD835\uDCB6", - "Assign;": "\u2254", - "ast;": "*", - "asymp;": "\u2248", - "asympeq;": "\u224D", - "Atilde;": "\u00C3", - "Atilde": "\u00C3", - "atilde;": "\u00E3", - "atilde": "\u00E3", - "Auml;": "\u00C4", - "Auml": "\u00C4", - "auml;": "\u00E4", - "auml": "\u00E4", - "awconint;": "\u2233", - "awint;": "\u2A11", - "backcong;": "\u224C", - "backepsilon;": "\u03F6", - "backprime;": "\u2035", - "backsim;": "\u223D", - "backsimeq;": "\u22CD", - "Backslash;": "\u2216", - "Barv;": "\u2AE7", - "barvee;": "\u22BD", - "Barwed;": "\u2306", - "barwed;": "\u2305", - "barwedge;": "\u2305", - "bbrk;": "\u23B5", - "bbrktbrk;": "\u23B6", - "bcong;": "\u224C", - "Bcy;": "\u0411", - "bcy;": "\u0431", - "bdquo;": "\u201E", - "becaus;": "\u2235", - "Because;": "\u2235", - "because;": "\u2235", - "bemptyv;": "\u29B0", - "bepsi;": "\u03F6", - "bernou;": "\u212C", - "Bernoullis;": "\u212C", - "Beta;": "\u0392", - "beta;": "\u03B2", - "beth;": "\u2136", - "between;": "\u226C", - "Bfr;": "\uD835\uDD05", - "bfr;": "\uD835\uDD1F", - "bigcap;": "\u22C2", - "bigcirc;": "\u25EF", - "bigcup;": "\u22C3", - "bigodot;": "\u2A00", - "bigoplus;": "\u2A01", - "bigotimes;": "\u2A02", - "bigsqcup;": "\u2A06", - "bigstar;": "\u2605", - "bigtriangledown;": "\u25BD", - "bigtriangleup;": "\u25B3", - "biguplus;": "\u2A04", - "bigvee;": "\u22C1", - "bigwedge;": "\u22C0", - "bkarow;": "\u290D", - "blacklozenge;": "\u29EB", - "blacksquare;": "\u25AA", - "blacktriangle;": "\u25B4", - "blacktriangledown;": "\u25BE", - "blacktriangleleft;": "\u25C2", - "blacktriangleright;": "\u25B8", - "blank;": "\u2423", - "blk12;": "\u2592", - "blk14;": "\u2591", - "blk34;": "\u2593", - "block;": "\u2588", - "bne;": "=\u20E5", - "bnequiv;": "\u2261\u20E5", - "bNot;": "\u2AED", - "bnot;": "\u2310", - "Bopf;": "\uD835\uDD39", - "bopf;": "\uD835\uDD53", - "bot;": "\u22A5", - "bottom;": "\u22A5", - "bowtie;": "\u22C8", - "boxbox;": "\u29C9", - "boxDL;": "\u2557", - "boxDl;": "\u2556", - "boxdL;": "\u2555", - "boxdl;": "\u2510", - "boxDR;": "\u2554", - "boxDr;": "\u2553", - "boxdR;": "\u2552", - "boxdr;": "\u250C", - "boxH;": "\u2550", - "boxh;": "\u2500", - "boxHD;": "\u2566", - "boxHd;": "\u2564", - "boxhD;": "\u2565", - "boxhd;": "\u252C", - "boxHU;": "\u2569", - "boxHu;": "\u2567", - "boxhU;": "\u2568", - "boxhu;": "\u2534", - "boxminus;": "\u229F", - "boxplus;": "\u229E", - "boxtimes;": "\u22A0", - "boxUL;": "\u255D", - "boxUl;": "\u255C", - "boxuL;": "\u255B", - "boxul;": "\u2518", - "boxUR;": "\u255A", - "boxUr;": "\u2559", - "boxuR;": "\u2558", - "boxur;": "\u2514", - "boxV;": "\u2551", - "boxv;": "\u2502", - "boxVH;": "\u256C", - "boxVh;": "\u256B", - "boxvH;": "\u256A", - "boxvh;": "\u253C", - "boxVL;": "\u2563", - "boxVl;": "\u2562", - "boxvL;": "\u2561", - "boxvl;": "\u2524", - "boxVR;": "\u2560", - "boxVr;": "\u255F", - "boxvR;": "\u255E", - "boxvr;": "\u251C", - "bprime;": "\u2035", - "Breve;": "\u02D8", - "breve;": "\u02D8", - "brvbar;": "\u00A6", - "brvbar": "\u00A6", - "Bscr;": "\u212C", - "bscr;": "\uD835\uDCB7", - "bsemi;": "\u204F", - "bsim;": "\u223D", - "bsime;": "\u22CD", - "bsol;": "\\", - "bsolb;": "\u29C5", - "bsolhsub;": "\u27C8", - "bull;": "\u2022", - "bullet;": "\u2022", - "bump;": "\u224E", - "bumpE;": "\u2AAE", - "bumpe;": "\u224F", - "Bumpeq;": "\u224E", - "bumpeq;": "\u224F", - "Cacute;": "\u0106", - "cacute;": "\u0107", - "Cap;": "\u22D2", - "cap;": "\u2229", - "capand;": "\u2A44", - "capbrcup;": "\u2A49", - "capcap;": "\u2A4B", - "capcup;": "\u2A47", - "capdot;": "\u2A40", - "CapitalDifferentialD;": "\u2145", - "caps;": "\u2229\uFE00", - "caret;": "\u2041", - "caron;": "\u02C7", - "Cayleys;": "\u212D", - "ccaps;": "\u2A4D", - "Ccaron;": "\u010C", - "ccaron;": "\u010D", - "Ccedil;": "\u00C7", - "Ccedil": "\u00C7", - "ccedil;": "\u00E7", - "ccedil": "\u00E7", - "Ccirc;": "\u0108", - "ccirc;": "\u0109", - "Cconint;": "\u2230", - "ccups;": "\u2A4C", - "ccupssm;": "\u2A50", - "Cdot;": "\u010A", - "cdot;": "\u010B", - "cedil;": "\u00B8", - "cedil": "\u00B8", - "Cedilla;": "\u00B8", - "cemptyv;": "\u29B2", - "cent;": "\u00A2", - "cent": "\u00A2", - "CenterDot;": "\u00B7", - "centerdot;": "\u00B7", - "Cfr;": "\u212D", - "cfr;": "\uD835\uDD20", - "CHcy;": "\u0427", - "chcy;": "\u0447", - "check;": "\u2713", - "checkmark;": "\u2713", - "Chi;": "\u03A7", - "chi;": "\u03C7", - "cir;": "\u25CB", - "circ;": "\u02C6", - "circeq;": "\u2257", - "circlearrowleft;": "\u21BA", - "circlearrowright;": "\u21BB", - "circledast;": "\u229B", - "circledcirc;": "\u229A", - "circleddash;": "\u229D", - "CircleDot;": "\u2299", - "circledR;": "\u00AE", - "circledS;": "\u24C8", - "CircleMinus;": "\u2296", - "CirclePlus;": "\u2295", - "CircleTimes;": "\u2297", - "cirE;": "\u29C3", - "cire;": "\u2257", - "cirfnint;": "\u2A10", - "cirmid;": "\u2AEF", - "cirscir;": "\u29C2", - "ClockwiseContourIntegral;": "\u2232", - "CloseCurlyDoubleQuote;": "\u201D", - "CloseCurlyQuote;": "\u2019", - "clubs;": "\u2663", - "clubsuit;": "\u2663", - "Colon;": "\u2237", - "colon;": ":", - "Colone;": "\u2A74", - "colone;": "\u2254", - "coloneq;": "\u2254", - "comma;": ",", - "commat;": "@", - "comp;": "\u2201", - "compfn;": "\u2218", - "complement;": "\u2201", - "complexes;": "\u2102", - "cong;": "\u2245", - "congdot;": "\u2A6D", - "Congruent;": "\u2261", - "Conint;": "\u222F", - "conint;": "\u222E", - "ContourIntegral;": "\u222E", - "Copf;": "\u2102", - "copf;": "\uD835\uDD54", - "coprod;": "\u2210", - "Coproduct;": "\u2210", - "COPY;": "\u00A9", - "COPY": "\u00A9", - "copy;": "\u00A9", - "copy": "\u00A9", - "copysr;": "\u2117", - "CounterClockwiseContourIntegral;": "\u2233", - "crarr;": "\u21B5", - "Cross;": "\u2A2F", - "cross;": "\u2717", - "Cscr;": "\uD835\uDC9E", - "cscr;": "\uD835\uDCB8", - "csub;": "\u2ACF", - "csube;": "\u2AD1", - "csup;": "\u2AD0", - "csupe;": "\u2AD2", - "ctdot;": "\u22EF", - "cudarrl;": "\u2938", - "cudarrr;": "\u2935", - "cuepr;": "\u22DE", - "cuesc;": "\u22DF", - "cularr;": "\u21B6", - "cularrp;": "\u293D", - "Cup;": "\u22D3", - "cup;": "\u222A", - "cupbrcap;": "\u2A48", - "CupCap;": "\u224D", - "cupcap;": "\u2A46", - "cupcup;": "\u2A4A", - "cupdot;": "\u228D", - "cupor;": "\u2A45", - "cups;": "\u222A\uFE00", - "curarr;": "\u21B7", - "curarrm;": "\u293C", - "curlyeqprec;": "\u22DE", - "curlyeqsucc;": "\u22DF", - "curlyvee;": "\u22CE", - "curlywedge;": "\u22CF", - "curren;": "\u00A4", - "curren": "\u00A4", - "curvearrowleft;": "\u21B6", - "curvearrowright;": "\u21B7", - "cuvee;": "\u22CE", - "cuwed;": "\u22CF", - "cwconint;": "\u2232", - "cwint;": "\u2231", - "cylcty;": "\u232D", - "Dagger;": "\u2021", - "dagger;": "\u2020", - "daleth;": "\u2138", - "Darr;": "\u21A1", - "dArr;": "\u21D3", - "darr;": "\u2193", - "dash;": "\u2010", - "Dashv;": "\u2AE4", - "dashv;": "\u22A3", - "dbkarow;": "\u290F", - "dblac;": "\u02DD", - "Dcaron;": "\u010E", - "dcaron;": "\u010F", - "Dcy;": "\u0414", - "dcy;": "\u0434", - "DD;": "\u2145", - "dd;": "\u2146", - "ddagger;": "\u2021", - "ddarr;": "\u21CA", - "DDotrahd;": "\u2911", - "ddotseq;": "\u2A77", - "deg;": "\u00B0", - "deg": "\u00B0", - "Del;": "\u2207", - "Delta;": "\u0394", - "delta;": "\u03B4", - "demptyv;": "\u29B1", - "dfisht;": "\u297F", - "Dfr;": "\uD835\uDD07", - "dfr;": "\uD835\uDD21", - "dHar;": "\u2965", - "dharl;": "\u21C3", - "dharr;": "\u21C2", - "DiacriticalAcute;": "\u00B4", - "DiacriticalDot;": "\u02D9", - "DiacriticalDoubleAcute;": "\u02DD", - "DiacriticalGrave;": "`", - "DiacriticalTilde;": "\u02DC", - "diam;": "\u22C4", - "Diamond;": "\u22C4", - "diamond;": "\u22C4", - "diamondsuit;": "\u2666", - "diams;": "\u2666", - "die;": "\u00A8", - "DifferentialD;": "\u2146", - "digamma;": "\u03DD", - "disin;": "\u22F2", - "div;": "\u00F7", - "divide;": "\u00F7", - "divide": "\u00F7", - "divideontimes;": "\u22C7", - "divonx;": "\u22C7", - "DJcy;": "\u0402", - "djcy;": "\u0452", - "dlcorn;": "\u231E", - "dlcrop;": "\u230D", - "dollar;": "$", - "Dopf;": "\uD835\uDD3B", - "dopf;": "\uD835\uDD55", - "Dot;": "\u00A8", - "dot;": "\u02D9", - "DotDot;": "\u20DC", - "doteq;": "\u2250", - "doteqdot;": "\u2251", - "DotEqual;": "\u2250", - "dotminus;": "\u2238", - "dotplus;": "\u2214", - "dotsquare;": "\u22A1", - "doublebarwedge;": "\u2306", - "DoubleContourIntegral;": "\u222F", - "DoubleDot;": "\u00A8", - "DoubleDownArrow;": "\u21D3", - "DoubleLeftArrow;": "\u21D0", - "DoubleLeftRightArrow;": "\u21D4", - "DoubleLeftTee;": "\u2AE4", - "DoubleLongLeftArrow;": "\u27F8", - "DoubleLongLeftRightArrow;": "\u27FA", - "DoubleLongRightArrow;": "\u27F9", - "DoubleRightArrow;": "\u21D2", - "DoubleRightTee;": "\u22A8", - "DoubleUpArrow;": "\u21D1", - "DoubleUpDownArrow;": "\u21D5", - "DoubleVerticalBar;": "\u2225", - "DownArrow;": "\u2193", - "Downarrow;": "\u21D3", - "downarrow;": "\u2193", - "DownArrowBar;": "\u2913", - "DownArrowUpArrow;": "\u21F5", - "DownBreve;": "\u0311", - "downdownarrows;": "\u21CA", - "downharpoonleft;": "\u21C3", - "downharpoonright;": "\u21C2", - "DownLeftRightVector;": "\u2950", - "DownLeftTeeVector;": "\u295E", - "DownLeftVector;": "\u21BD", - "DownLeftVectorBar;": "\u2956", - "DownRightTeeVector;": "\u295F", - "DownRightVector;": "\u21C1", - "DownRightVectorBar;": "\u2957", - "DownTee;": "\u22A4", - "DownTeeArrow;": "\u21A7", - "drbkarow;": "\u2910", - "drcorn;": "\u231F", - "drcrop;": "\u230C", - "Dscr;": "\uD835\uDC9F", - "dscr;": "\uD835\uDCB9", - "DScy;": "\u0405", - "dscy;": "\u0455", - "dsol;": "\u29F6", - "Dstrok;": "\u0110", - "dstrok;": "\u0111", - "dtdot;": "\u22F1", - "dtri;": "\u25BF", - "dtrif;": "\u25BE", - "duarr;": "\u21F5", - "duhar;": "\u296F", - "dwangle;": "\u29A6", - "DZcy;": "\u040F", - "dzcy;": "\u045F", - "dzigrarr;": "\u27FF", - "Eacute;": "\u00C9", - "Eacute": "\u00C9", - "eacute;": "\u00E9", - "eacute": "\u00E9", - "easter;": "\u2A6E", - "Ecaron;": "\u011A", - "ecaron;": "\u011B", - "ecir;": "\u2256", - "Ecirc;": "\u00CA", - "Ecirc": "\u00CA", - "ecirc;": "\u00EA", - "ecirc": "\u00EA", - "ecolon;": "\u2255", - "Ecy;": "\u042D", - "ecy;": "\u044D", - "eDDot;": "\u2A77", - "Edot;": "\u0116", - "eDot;": "\u2251", - "edot;": "\u0117", - "ee;": "\u2147", - "efDot;": "\u2252", - "Efr;": "\uD835\uDD08", - "efr;": "\uD835\uDD22", - "eg;": "\u2A9A", - "Egrave;": "\u00C8", - "Egrave": "\u00C8", - "egrave;": "\u00E8", - "egrave": "\u00E8", - "egs;": "\u2A96", - "egsdot;": "\u2A98", - "el;": "\u2A99", - "Element;": "\u2208", - "elinters;": "\u23E7", - "ell;": "\u2113", - "els;": "\u2A95", - "elsdot;": "\u2A97", - "Emacr;": "\u0112", - "emacr;": "\u0113", - "empty;": "\u2205", - "emptyset;": "\u2205", - "EmptySmallSquare;": "\u25FB", - "emptyv;": "\u2205", - "EmptyVerySmallSquare;": "\u25AB", - "emsp;": "\u2003", - "emsp13;": "\u2004", - "emsp14;": "\u2005", - "ENG;": "\u014A", - "eng;": "\u014B", - "ensp;": "\u2002", - "Eogon;": "\u0118", - "eogon;": "\u0119", - "Eopf;": "\uD835\uDD3C", - "eopf;": "\uD835\uDD56", - "epar;": "\u22D5", - "eparsl;": "\u29E3", - "eplus;": "\u2A71", - "epsi;": "\u03B5", - "Epsilon;": "\u0395", - "epsilon;": "\u03B5", - "epsiv;": "\u03F5", - "eqcirc;": "\u2256", - "eqcolon;": "\u2255", - "eqsim;": "\u2242", - "eqslantgtr;": "\u2A96", - "eqslantless;": "\u2A95", - "Equal;": "\u2A75", - "equals;": "=", - "EqualTilde;": "\u2242", - "equest;": "\u225F", - "Equilibrium;": "\u21CC", - "equiv;": "\u2261", - "equivDD;": "\u2A78", - "eqvparsl;": "\u29E5", - "erarr;": "\u2971", - "erDot;": "\u2253", - "Escr;": "\u2130", - "escr;": "\u212F", - "esdot;": "\u2250", - "Esim;": "\u2A73", - "esim;": "\u2242", - "Eta;": "\u0397", - "eta;": "\u03B7", - "ETH;": "\u00D0", - "ETH": "\u00D0", - "eth;": "\u00F0", - "eth": "\u00F0", - "Euml;": "\u00CB", - "Euml": "\u00CB", - "euml;": "\u00EB", - "euml": "\u00EB", - "euro;": "\u20AC", - "excl;": "!", - "exist;": "\u2203", - "Exists;": "\u2203", - "expectation;": "\u2130", - "ExponentialE;": "\u2147", - "exponentiale;": "\u2147", - "fallingdotseq;": "\u2252", - "Fcy;": "\u0424", - "fcy;": "\u0444", - "female;": "\u2640", - "ffilig;": "\uFB03", - "fflig;": "\uFB00", - "ffllig;": "\uFB04", - "Ffr;": "\uD835\uDD09", - "ffr;": "\uD835\uDD23", - "filig;": "\uFB01", - "FilledSmallSquare;": "\u25FC", - "FilledVerySmallSquare;": "\u25AA", - "fjlig;": "fj", - "flat;": "\u266D", - "fllig;": "\uFB02", - "fltns;": "\u25B1", - "fnof;": "\u0192", - "Fopf;": "\uD835\uDD3D", - "fopf;": "\uD835\uDD57", - "ForAll;": "\u2200", - "forall;": "\u2200", - "fork;": "\u22D4", - "forkv;": "\u2AD9", - "Fouriertrf;": "\u2131", - "fpartint;": "\u2A0D", - "frac12;": "\u00BD", - "frac12": "\u00BD", - "frac13;": "\u2153", - "frac14;": "\u00BC", - "frac14": "\u00BC", - "frac15;": "\u2155", - "frac16;": "\u2159", - "frac18;": "\u215B", - "frac23;": "\u2154", - "frac25;": "\u2156", - "frac34;": "\u00BE", - "frac34": "\u00BE", - "frac35;": "\u2157", - "frac38;": "\u215C", - "frac45;": "\u2158", - "frac56;": "\u215A", - "frac58;": "\u215D", - "frac78;": "\u215E", - "frasl;": "\u2044", - "frown;": "\u2322", - "Fscr;": "\u2131", - "fscr;": "\uD835\uDCBB", - "gacute;": "\u01F5", - "Gamma;": "\u0393", - "gamma;": "\u03B3", - "Gammad;": "\u03DC", - "gammad;": "\u03DD", - "gap;": "\u2A86", - "Gbreve;": "\u011E", - "gbreve;": "\u011F", - "Gcedil;": "\u0122", - "Gcirc;": "\u011C", - "gcirc;": "\u011D", - "Gcy;": "\u0413", - "gcy;": "\u0433", - "Gdot;": "\u0120", - "gdot;": "\u0121", - "gE;": "\u2267", - "ge;": "\u2265", - "gEl;": "\u2A8C", - "gel;": "\u22DB", - "geq;": "\u2265", - "geqq;": "\u2267", - "geqslant;": "\u2A7E", - "ges;": "\u2A7E", - "gescc;": "\u2AA9", - "gesdot;": "\u2A80", - "gesdoto;": "\u2A82", - "gesdotol;": "\u2A84", - "gesl;": "\u22DB\uFE00", - "gesles;": "\u2A94", - "Gfr;": "\uD835\uDD0A", - "gfr;": "\uD835\uDD24", - "Gg;": "\u22D9", - "gg;": "\u226B", - "ggg;": "\u22D9", - "gimel;": "\u2137", - "GJcy;": "\u0403", - "gjcy;": "\u0453", - "gl;": "\u2277", - "gla;": "\u2AA5", - "glE;": "\u2A92", - "glj;": "\u2AA4", - "gnap;": "\u2A8A", - "gnapprox;": "\u2A8A", - "gnE;": "\u2269", - "gne;": "\u2A88", - "gneq;": "\u2A88", - "gneqq;": "\u2269", - "gnsim;": "\u22E7", - "Gopf;": "\uD835\uDD3E", - "gopf;": "\uD835\uDD58", - "grave;": "`", - "GreaterEqual;": "\u2265", - "GreaterEqualLess;": "\u22DB", - "GreaterFullEqual;": "\u2267", - "GreaterGreater;": "\u2AA2", - "GreaterLess;": "\u2277", - "GreaterSlantEqual;": "\u2A7E", - "GreaterTilde;": "\u2273", - "Gscr;": "\uD835\uDCA2", - "gscr;": "\u210A", - "gsim;": "\u2273", - "gsime;": "\u2A8E", - "gsiml;": "\u2A90", - "GT;": ">", - "GT": ">", - "Gt;": "\u226B", - "gt;": ">", - "gt": ">", - "gtcc;": "\u2AA7", - "gtcir;": "\u2A7A", - "gtdot;": "\u22D7", - "gtlPar;": "\u2995", - "gtquest;": "\u2A7C", - "gtrapprox;": "\u2A86", - "gtrarr;": "\u2978", - "gtrdot;": "\u22D7", - "gtreqless;": "\u22DB", - "gtreqqless;": "\u2A8C", - "gtrless;": "\u2277", - "gtrsim;": "\u2273", - "gvertneqq;": "\u2269\uFE00", - "gvnE;": "\u2269\uFE00", - "Hacek;": "\u02C7", - "hairsp;": "\u200A", - "half;": "\u00BD", - "hamilt;": "\u210B", - "HARDcy;": "\u042A", - "hardcy;": "\u044A", - "hArr;": "\u21D4", - "harr;": "\u2194", - "harrcir;": "\u2948", - "harrw;": "\u21AD", - "Hat;": "^", - "hbar;": "\u210F", - "Hcirc;": "\u0124", - "hcirc;": "\u0125", - "hearts;": "\u2665", - "heartsuit;": "\u2665", - "hellip;": "\u2026", - "hercon;": "\u22B9", - "Hfr;": "\u210C", - "hfr;": "\uD835\uDD25", - "HilbertSpace;": "\u210B", - "hksearow;": "\u2925", - "hkswarow;": "\u2926", - "hoarr;": "\u21FF", - "homtht;": "\u223B", - "hookleftarrow;": "\u21A9", - "hookrightarrow;": "\u21AA", - "Hopf;": "\u210D", - "hopf;": "\uD835\uDD59", - "horbar;": "\u2015", - "HorizontalLine;": "\u2500", - "Hscr;": "\u210B", - "hscr;": "\uD835\uDCBD", - "hslash;": "\u210F", - "Hstrok;": "\u0126", - "hstrok;": "\u0127", - "HumpDownHump;": "\u224E", - "HumpEqual;": "\u224F", - "hybull;": "\u2043", - "hyphen;": "\u2010", - "Iacute;": "\u00CD", - "Iacute": "\u00CD", - "iacute;": "\u00ED", - "iacute": "\u00ED", - "ic;": "\u2063", - "Icirc;": "\u00CE", - "Icirc": "\u00CE", - "icirc;": "\u00EE", - "icirc": "\u00EE", - "Icy;": "\u0418", - "icy;": "\u0438", - "Idot;": "\u0130", - "IEcy;": "\u0415", - "iecy;": "\u0435", - "iexcl;": "\u00A1", - "iexcl": "\u00A1", - "iff;": "\u21D4", - "Ifr;": "\u2111", - "ifr;": "\uD835\uDD26", - "Igrave;": "\u00CC", - "Igrave": "\u00CC", - "igrave;": "\u00EC", - "igrave": "\u00EC", - "ii;": "\u2148", - "iiiint;": "\u2A0C", - "iiint;": "\u222D", - "iinfin;": "\u29DC", - "iiota;": "\u2129", - "IJlig;": "\u0132", - "ijlig;": "\u0133", - "Im;": "\u2111", - "Imacr;": "\u012A", - "imacr;": "\u012B", - "image;": "\u2111", - "ImaginaryI;": "\u2148", - "imagline;": "\u2110", - "imagpart;": "\u2111", - "imath;": "\u0131", - "imof;": "\u22B7", - "imped;": "\u01B5", - "Implies;": "\u21D2", - "in;": "\u2208", - "incare;": "\u2105", - "infin;": "\u221E", - "infintie;": "\u29DD", - "inodot;": "\u0131", - "Int;": "\u222C", - "int;": "\u222B", - "intcal;": "\u22BA", - "integers;": "\u2124", - "Integral;": "\u222B", - "intercal;": "\u22BA", - "Intersection;": "\u22C2", - "intlarhk;": "\u2A17", - "intprod;": "\u2A3C", - "InvisibleComma;": "\u2063", - "InvisibleTimes;": "\u2062", - "IOcy;": "\u0401", - "iocy;": "\u0451", - "Iogon;": "\u012E", - "iogon;": "\u012F", - "Iopf;": "\uD835\uDD40", - "iopf;": "\uD835\uDD5A", - "Iota;": "\u0399", - "iota;": "\u03B9", - "iprod;": "\u2A3C", - "iquest;": "\u00BF", - "iquest": "\u00BF", - "Iscr;": "\u2110", - "iscr;": "\uD835\uDCBE", - "isin;": "\u2208", - "isindot;": "\u22F5", - "isinE;": "\u22F9", - "isins;": "\u22F4", - "isinsv;": "\u22F3", - "isinv;": "\u2208", - "it;": "\u2062", - "Itilde;": "\u0128", - "itilde;": "\u0129", - "Iukcy;": "\u0406", - "iukcy;": "\u0456", - "Iuml;": "\u00CF", - "Iuml": "\u00CF", - "iuml;": "\u00EF", - "iuml": "\u00EF", - "Jcirc;": "\u0134", - "jcirc;": "\u0135", - "Jcy;": "\u0419", - "jcy;": "\u0439", - "Jfr;": "\uD835\uDD0D", - "jfr;": "\uD835\uDD27", - "jmath;": "\u0237", - "Jopf;": "\uD835\uDD41", - "jopf;": "\uD835\uDD5B", - "Jscr;": "\uD835\uDCA5", - "jscr;": "\uD835\uDCBF", - "Jsercy;": "\u0408", - "jsercy;": "\u0458", - "Jukcy;": "\u0404", - "jukcy;": "\u0454", - "Kappa;": "\u039A", - "kappa;": "\u03BA", - "kappav;": "\u03F0", - "Kcedil;": "\u0136", - "kcedil;": "\u0137", - "Kcy;": "\u041A", - "kcy;": "\u043A", - "Kfr;": "\uD835\uDD0E", - "kfr;": "\uD835\uDD28", - "kgreen;": "\u0138", - "KHcy;": "\u0425", - "khcy;": "\u0445", - "KJcy;": "\u040C", - "kjcy;": "\u045C", - "Kopf;": "\uD835\uDD42", - "kopf;": "\uD835\uDD5C", - "Kscr;": "\uD835\uDCA6", - "kscr;": "\uD835\uDCC0", - "lAarr;": "\u21DA", - "Lacute;": "\u0139", - "lacute;": "\u013A", - "laemptyv;": "\u29B4", - "lagran;": "\u2112", - "Lambda;": "\u039B", - "lambda;": "\u03BB", - "Lang;": "\u27EA", - "lang;": "\u27E8", - "langd;": "\u2991", - "langle;": "\u27E8", - "lap;": "\u2A85", - "Laplacetrf;": "\u2112", - "laquo;": "\u00AB", - "laquo": "\u00AB", - "Larr;": "\u219E", - "lArr;": "\u21D0", - "larr;": "\u2190", - "larrb;": "\u21E4", - "larrbfs;": "\u291F", - "larrfs;": "\u291D", - "larrhk;": "\u21A9", - "larrlp;": "\u21AB", - "larrpl;": "\u2939", - "larrsim;": "\u2973", - "larrtl;": "\u21A2", - "lat;": "\u2AAB", - "lAtail;": "\u291B", - "latail;": "\u2919", - "late;": "\u2AAD", - "lates;": "\u2AAD\uFE00", - "lBarr;": "\u290E", - "lbarr;": "\u290C", - "lbbrk;": "\u2772", - "lbrace;": "{", - "lbrack;": "[", - "lbrke;": "\u298B", - "lbrksld;": "\u298F", - "lbrkslu;": "\u298D", - "Lcaron;": "\u013D", - "lcaron;": "\u013E", - "Lcedil;": "\u013B", - "lcedil;": "\u013C", - "lceil;": "\u2308", - "lcub;": "{", - "Lcy;": "\u041B", - "lcy;": "\u043B", - "ldca;": "\u2936", - "ldquo;": "\u201C", - "ldquor;": "\u201E", - "ldrdhar;": "\u2967", - "ldrushar;": "\u294B", - "ldsh;": "\u21B2", - "lE;": "\u2266", - "le;": "\u2264", - "LeftAngleBracket;": "\u27E8", - "LeftArrow;": "\u2190", - "Leftarrow;": "\u21D0", - "leftarrow;": "\u2190", - "LeftArrowBar;": "\u21E4", - "LeftArrowRightArrow;": "\u21C6", - "leftarrowtail;": "\u21A2", - "LeftCeiling;": "\u2308", - "LeftDoubleBracket;": "\u27E6", - "LeftDownTeeVector;": "\u2961", - "LeftDownVector;": "\u21C3", - "LeftDownVectorBar;": "\u2959", - "LeftFloor;": "\u230A", - "leftharpoondown;": "\u21BD", - "leftharpoonup;": "\u21BC", - "leftleftarrows;": "\u21C7", - "LeftRightArrow;": "\u2194", - "Leftrightarrow;": "\u21D4", - "leftrightarrow;": "\u2194", - "leftrightarrows;": "\u21C6", - "leftrightharpoons;": "\u21CB", - "leftrightsquigarrow;": "\u21AD", - "LeftRightVector;": "\u294E", - "LeftTee;": "\u22A3", - "LeftTeeArrow;": "\u21A4", - "LeftTeeVector;": "\u295A", - "leftthreetimes;": "\u22CB", - "LeftTriangle;": "\u22B2", - "LeftTriangleBar;": "\u29CF", - "LeftTriangleEqual;": "\u22B4", - "LeftUpDownVector;": "\u2951", - "LeftUpTeeVector;": "\u2960", - "LeftUpVector;": "\u21BF", - "LeftUpVectorBar;": "\u2958", - "LeftVector;": "\u21BC", - "LeftVectorBar;": "\u2952", - "lEg;": "\u2A8B", - "leg;": "\u22DA", - "leq;": "\u2264", - "leqq;": "\u2266", - "leqslant;": "\u2A7D", - "les;": "\u2A7D", - "lescc;": "\u2AA8", - "lesdot;": "\u2A7F", - "lesdoto;": "\u2A81", - "lesdotor;": "\u2A83", - "lesg;": "\u22DA\uFE00", - "lesges;": "\u2A93", - "lessapprox;": "\u2A85", - "lessdot;": "\u22D6", - "lesseqgtr;": "\u22DA", - "lesseqqgtr;": "\u2A8B", - "LessEqualGreater;": "\u22DA", - "LessFullEqual;": "\u2266", - "LessGreater;": "\u2276", - "lessgtr;": "\u2276", - "LessLess;": "\u2AA1", - "lesssim;": "\u2272", - "LessSlantEqual;": "\u2A7D", - "LessTilde;": "\u2272", - "lfisht;": "\u297C", - "lfloor;": "\u230A", - "Lfr;": "\uD835\uDD0F", - "lfr;": "\uD835\uDD29", - "lg;": "\u2276", - "lgE;": "\u2A91", - "lHar;": "\u2962", - "lhard;": "\u21BD", - "lharu;": "\u21BC", - "lharul;": "\u296A", - "lhblk;": "\u2584", - "LJcy;": "\u0409", - "ljcy;": "\u0459", - "Ll;": "\u22D8", - "ll;": "\u226A", - "llarr;": "\u21C7", - "llcorner;": "\u231E", - "Lleftarrow;": "\u21DA", - "llhard;": "\u296B", - "lltri;": "\u25FA", - "Lmidot;": "\u013F", - "lmidot;": "\u0140", - "lmoust;": "\u23B0", - "lmoustache;": "\u23B0", - "lnap;": "\u2A89", - "lnapprox;": "\u2A89", - "lnE;": "\u2268", - "lne;": "\u2A87", - "lneq;": "\u2A87", - "lneqq;": "\u2268", - "lnsim;": "\u22E6", - "loang;": "\u27EC", - "loarr;": "\u21FD", - "lobrk;": "\u27E6", - "LongLeftArrow;": "\u27F5", - "Longleftarrow;": "\u27F8", - "longleftarrow;": "\u27F5", - "LongLeftRightArrow;": "\u27F7", - "Longleftrightarrow;": "\u27FA", - "longleftrightarrow;": "\u27F7", - "longmapsto;": "\u27FC", - "LongRightArrow;": "\u27F6", - "Longrightarrow;": "\u27F9", - "longrightarrow;": "\u27F6", - "looparrowleft;": "\u21AB", - "looparrowright;": "\u21AC", - "lopar;": "\u2985", - "Lopf;": "\uD835\uDD43", - "lopf;": "\uD835\uDD5D", - "loplus;": "\u2A2D", - "lotimes;": "\u2A34", - "lowast;": "\u2217", - "lowbar;": "_", - "LowerLeftArrow;": "\u2199", - "LowerRightArrow;": "\u2198", - "loz;": "\u25CA", - "lozenge;": "\u25CA", - "lozf;": "\u29EB", - "lpar;": "(", - "lparlt;": "\u2993", - "lrarr;": "\u21C6", - "lrcorner;": "\u231F", - "lrhar;": "\u21CB", - "lrhard;": "\u296D", - "lrm;": "\u200E", - "lrtri;": "\u22BF", - "lsaquo;": "\u2039", - "Lscr;": "\u2112", - "lscr;": "\uD835\uDCC1", - "Lsh;": "\u21B0", - "lsh;": "\u21B0", - "lsim;": "\u2272", - "lsime;": "\u2A8D", - "lsimg;": "\u2A8F", - "lsqb;": "[", - "lsquo;": "\u2018", - "lsquor;": "\u201A", - "Lstrok;": "\u0141", - "lstrok;": "\u0142", - "LT;": "<", - "LT": "<", - "Lt;": "\u226A", - "lt;": "<", - "lt": "<", - "ltcc;": "\u2AA6", - "ltcir;": "\u2A79", - "ltdot;": "\u22D6", - "lthree;": "\u22CB", - "ltimes;": "\u22C9", - "ltlarr;": "\u2976", - "ltquest;": "\u2A7B", - "ltri;": "\u25C3", - "ltrie;": "\u22B4", - "ltrif;": "\u25C2", - "ltrPar;": "\u2996", - "lurdshar;": "\u294A", - "luruhar;": "\u2966", - "lvertneqq;": "\u2268\uFE00", - "lvnE;": "\u2268\uFE00", - "macr;": "\u00AF", - "macr": "\u00AF", - "male;": "\u2642", - "malt;": "\u2720", - "maltese;": "\u2720", - "Map;": "\u2905", - "map;": "\u21A6", - "mapsto;": "\u21A6", - "mapstodown;": "\u21A7", - "mapstoleft;": "\u21A4", - "mapstoup;": "\u21A5", - "marker;": "\u25AE", - "mcomma;": "\u2A29", - "Mcy;": "\u041C", - "mcy;": "\u043C", - "mdash;": "\u2014", - "mDDot;": "\u223A", - "measuredangle;": "\u2221", - "MediumSpace;": "\u205F", - "Mellintrf;": "\u2133", - "Mfr;": "\uD835\uDD10", - "mfr;": "\uD835\uDD2A", - "mho;": "\u2127", - "micro;": "\u00B5", - "micro": "\u00B5", - "mid;": "\u2223", - "midast;": "*", - "midcir;": "\u2AF0", - "middot;": "\u00B7", - "middot": "\u00B7", - "minus;": "\u2212", - "minusb;": "\u229F", - "minusd;": "\u2238", - "minusdu;": "\u2A2A", - "MinusPlus;": "\u2213", - "mlcp;": "\u2ADB", - "mldr;": "\u2026", - "mnplus;": "\u2213", - "models;": "\u22A7", - "Mopf;": "\uD835\uDD44", - "mopf;": "\uD835\uDD5E", - "mp;": "\u2213", - "Mscr;": "\u2133", - "mscr;": "\uD835\uDCC2", - "mstpos;": "\u223E", - "Mu;": "\u039C", - "mu;": "\u03BC", - "multimap;": "\u22B8", - "mumap;": "\u22B8", - "nabla;": "\u2207", - "Nacute;": "\u0143", - "nacute;": "\u0144", - "nang;": "\u2220\u20D2", - "nap;": "\u2249", - "napE;": "\u2A70\u0338", - "napid;": "\u224B\u0338", - "napos;": "\u0149", - "napprox;": "\u2249", - "natur;": "\u266E", - "natural;": "\u266E", - "naturals;": "\u2115", - "nbsp;": "\u00A0", - "nbsp": "\u00A0", - "nbump;": "\u224E\u0338", - "nbumpe;": "\u224F\u0338", - "ncap;": "\u2A43", - "Ncaron;": "\u0147", - "ncaron;": "\u0148", - "Ncedil;": "\u0145", - "ncedil;": "\u0146", - "ncong;": "\u2247", - "ncongdot;": "\u2A6D\u0338", - "ncup;": "\u2A42", - "Ncy;": "\u041D", - "ncy;": "\u043D", - "ndash;": "\u2013", - "ne;": "\u2260", - "nearhk;": "\u2924", - "neArr;": "\u21D7", - "nearr;": "\u2197", - "nearrow;": "\u2197", - "nedot;": "\u2250\u0338", - "NegativeMediumSpace;": "\u200B", - "NegativeThickSpace;": "\u200B", - "NegativeThinSpace;": "\u200B", - "NegativeVeryThinSpace;": "\u200B", - "nequiv;": "\u2262", - "nesear;": "\u2928", - "nesim;": "\u2242\u0338", - "NestedGreaterGreater;": "\u226B", - "NestedLessLess;": "\u226A", - "NewLine;": "\n", - "nexist;": "\u2204", - "nexists;": "\u2204", - "Nfr;": "\uD835\uDD11", - "nfr;": "\uD835\uDD2B", - "ngE;": "\u2267\u0338", - "nge;": "\u2271", - "ngeq;": "\u2271", - "ngeqq;": "\u2267\u0338", - "ngeqslant;": "\u2A7E\u0338", - "nges;": "\u2A7E\u0338", - "nGg;": "\u22D9\u0338", - "ngsim;": "\u2275", - "nGt;": "\u226B\u20D2", - "ngt;": "\u226F", - "ngtr;": "\u226F", - "nGtv;": "\u226B\u0338", - "nhArr;": "\u21CE", - "nharr;": "\u21AE", - "nhpar;": "\u2AF2", - "ni;": "\u220B", - "nis;": "\u22FC", - "nisd;": "\u22FA", - "niv;": "\u220B", - "NJcy;": "\u040A", - "njcy;": "\u045A", - "nlArr;": "\u21CD", - "nlarr;": "\u219A", - "nldr;": "\u2025", - "nlE;": "\u2266\u0338", - "nle;": "\u2270", - "nLeftarrow;": "\u21CD", - "nleftarrow;": "\u219A", - "nLeftrightarrow;": "\u21CE", - "nleftrightarrow;": "\u21AE", - "nleq;": "\u2270", - "nleqq;": "\u2266\u0338", - "nleqslant;": "\u2A7D\u0338", - "nles;": "\u2A7D\u0338", - "nless;": "\u226E", - "nLl;": "\u22D8\u0338", - "nlsim;": "\u2274", - "nLt;": "\u226A\u20D2", - "nlt;": "\u226E", - "nltri;": "\u22EA", - "nltrie;": "\u22EC", - "nLtv;": "\u226A\u0338", - "nmid;": "\u2224", - "NoBreak;": "\u2060", - "NonBreakingSpace;": "\u00A0", - "Nopf;": "\u2115", - "nopf;": "\uD835\uDD5F", - "Not;": "\u2AEC", - "not;": "\u00AC", - "not": "\u00AC", - "NotCongruent;": "\u2262", - "NotCupCap;": "\u226D", - "NotDoubleVerticalBar;": "\u2226", - "NotElement;": "\u2209", - "NotEqual;": "\u2260", - "NotEqualTilde;": "\u2242\u0338", - "NotExists;": "\u2204", - "NotGreater;": "\u226F", - "NotGreaterEqual;": "\u2271", - "NotGreaterFullEqual;": "\u2267\u0338", - "NotGreaterGreater;": "\u226B\u0338", - "NotGreaterLess;": "\u2279", - "NotGreaterSlantEqual;": "\u2A7E\u0338", - "NotGreaterTilde;": "\u2275", - "NotHumpDownHump;": "\u224E\u0338", - "NotHumpEqual;": "\u224F\u0338", - "notin;": "\u2209", - "notindot;": "\u22F5\u0338", - "notinE;": "\u22F9\u0338", - "notinva;": "\u2209", - "notinvb;": "\u22F7", - "notinvc;": "\u22F6", - "NotLeftTriangle;": "\u22EA", - "NotLeftTriangleBar;": "\u29CF\u0338", - "NotLeftTriangleEqual;": "\u22EC", - "NotLess;": "\u226E", - "NotLessEqual;": "\u2270", - "NotLessGreater;": "\u2278", - "NotLessLess;": "\u226A\u0338", - "NotLessSlantEqual;": "\u2A7D\u0338", - "NotLessTilde;": "\u2274", - "NotNestedGreaterGreater;": "\u2AA2\u0338", - "NotNestedLessLess;": "\u2AA1\u0338", - "notni;": "\u220C", - "notniva;": "\u220C", - "notnivb;": "\u22FE", - "notnivc;": "\u22FD", - "NotPrecedes;": "\u2280", - "NotPrecedesEqual;": "\u2AAF\u0338", - "NotPrecedesSlantEqual;": "\u22E0", - "NotReverseElement;": "\u220C", - "NotRightTriangle;": "\u22EB", - "NotRightTriangleBar;": "\u29D0\u0338", - "NotRightTriangleEqual;": "\u22ED", - "NotSquareSubset;": "\u228F\u0338", - "NotSquareSubsetEqual;": "\u22E2", - "NotSquareSuperset;": "\u2290\u0338", - "NotSquareSupersetEqual;": "\u22E3", - "NotSubset;": "\u2282\u20D2", - "NotSubsetEqual;": "\u2288", - "NotSucceeds;": "\u2281", - "NotSucceedsEqual;": "\u2AB0\u0338", - "NotSucceedsSlantEqual;": "\u22E1", - "NotSucceedsTilde;": "\u227F\u0338", - "NotSuperset;": "\u2283\u20D2", - "NotSupersetEqual;": "\u2289", - "NotTilde;": "\u2241", - "NotTildeEqual;": "\u2244", - "NotTildeFullEqual;": "\u2247", - "NotTildeTilde;": "\u2249", - "NotVerticalBar;": "\u2224", - "npar;": "\u2226", - "nparallel;": "\u2226", - "nparsl;": "\u2AFD\u20E5", - "npart;": "\u2202\u0338", - "npolint;": "\u2A14", - "npr;": "\u2280", - "nprcue;": "\u22E0", - "npre;": "\u2AAF\u0338", - "nprec;": "\u2280", - "npreceq;": "\u2AAF\u0338", - "nrArr;": "\u21CF", - "nrarr;": "\u219B", - "nrarrc;": "\u2933\u0338", - "nrarrw;": "\u219D\u0338", - "nRightarrow;": "\u21CF", - "nrightarrow;": "\u219B", - "nrtri;": "\u22EB", - "nrtrie;": "\u22ED", - "nsc;": "\u2281", - "nsccue;": "\u22E1", - "nsce;": "\u2AB0\u0338", - "Nscr;": "\uD835\uDCA9", - "nscr;": "\uD835\uDCC3", - "nshortmid;": "\u2224", - "nshortparallel;": "\u2226", - "nsim;": "\u2241", - "nsime;": "\u2244", - "nsimeq;": "\u2244", - "nsmid;": "\u2224", - "nspar;": "\u2226", - "nsqsube;": "\u22E2", - "nsqsupe;": "\u22E3", - "nsub;": "\u2284", - "nsubE;": "\u2AC5\u0338", - "nsube;": "\u2288", - "nsubset;": "\u2282\u20D2", - "nsubseteq;": "\u2288", - "nsubseteqq;": "\u2AC5\u0338", - "nsucc;": "\u2281", - "nsucceq;": "\u2AB0\u0338", - "nsup;": "\u2285", - "nsupE;": "\u2AC6\u0338", - "nsupe;": "\u2289", - "nsupset;": "\u2283\u20D2", - "nsupseteq;": "\u2289", - "nsupseteqq;": "\u2AC6\u0338", - "ntgl;": "\u2279", - "Ntilde;": "\u00D1", - "Ntilde": "\u00D1", - "ntilde;": "\u00F1", - "ntilde": "\u00F1", - "ntlg;": "\u2278", - "ntriangleleft;": "\u22EA", - "ntrianglelefteq;": "\u22EC", - "ntriangleright;": "\u22EB", - "ntrianglerighteq;": "\u22ED", - "Nu;": "\u039D", - "nu;": "\u03BD", - "num;": "#", - "numero;": "\u2116", - "numsp;": "\u2007", - "nvap;": "\u224D\u20D2", - "nVDash;": "\u22AF", - "nVdash;": "\u22AE", - "nvDash;": "\u22AD", - "nvdash;": "\u22AC", - "nvge;": "\u2265\u20D2", - "nvgt;": ">\u20D2", - "nvHarr;": "\u2904", - "nvinfin;": "\u29DE", - "nvlArr;": "\u2902", - "nvle;": "\u2264\u20D2", - "nvlt;": "<\u20D2", - "nvltrie;": "\u22B4\u20D2", - "nvrArr;": "\u2903", - "nvrtrie;": "\u22B5\u20D2", - "nvsim;": "\u223C\u20D2", - "nwarhk;": "\u2923", - "nwArr;": "\u21D6", - "nwarr;": "\u2196", - "nwarrow;": "\u2196", - "nwnear;": "\u2927", - "Oacute;": "\u00D3", - "Oacute": "\u00D3", - "oacute;": "\u00F3", - "oacute": "\u00F3", - "oast;": "\u229B", - "ocir;": "\u229A", - "Ocirc;": "\u00D4", - "Ocirc": "\u00D4", - "ocirc;": "\u00F4", - "ocirc": "\u00F4", - "Ocy;": "\u041E", - "ocy;": "\u043E", - "odash;": "\u229D", - "Odblac;": "\u0150", - "odblac;": "\u0151", - "odiv;": "\u2A38", - "odot;": "\u2299", - "odsold;": "\u29BC", - "OElig;": "\u0152", - "oelig;": "\u0153", - "ofcir;": "\u29BF", - "Ofr;": "\uD835\uDD12", - "ofr;": "\uD835\uDD2C", - "ogon;": "\u02DB", - "Ograve;": "\u00D2", - "Ograve": "\u00D2", - "ograve;": "\u00F2", - "ograve": "\u00F2", - "ogt;": "\u29C1", - "ohbar;": "\u29B5", - "ohm;": "\u03A9", - "oint;": "\u222E", - "olarr;": "\u21BA", - "olcir;": "\u29BE", - "olcross;": "\u29BB", - "oline;": "\u203E", - "olt;": "\u29C0", - "Omacr;": "\u014C", - "omacr;": "\u014D", - "Omega;": "\u03A9", - "omega;": "\u03C9", - "Omicron;": "\u039F", - "omicron;": "\u03BF", - "omid;": "\u29B6", - "ominus;": "\u2296", - "Oopf;": "\uD835\uDD46", - "oopf;": "\uD835\uDD60", - "opar;": "\u29B7", - "OpenCurlyDoubleQuote;": "\u201C", - "OpenCurlyQuote;": "\u2018", - "operp;": "\u29B9", - "oplus;": "\u2295", - "Or;": "\u2A54", - "or;": "\u2228", - "orarr;": "\u21BB", - "ord;": "\u2A5D", - "order;": "\u2134", - "orderof;": "\u2134", - "ordf;": "\u00AA", - "ordf": "\u00AA", - "ordm;": "\u00BA", - "ordm": "\u00BA", - "origof;": "\u22B6", - "oror;": "\u2A56", - "orslope;": "\u2A57", - "orv;": "\u2A5B", - "oS;": "\u24C8", - "Oscr;": "\uD835\uDCAA", - "oscr;": "\u2134", - "Oslash;": "\u00D8", - "Oslash": "\u00D8", - "oslash;": "\u00F8", - "oslash": "\u00F8", - "osol;": "\u2298", - "Otilde;": "\u00D5", - "Otilde": "\u00D5", - "otilde;": "\u00F5", - "otilde": "\u00F5", - "Otimes;": "\u2A37", - "otimes;": "\u2297", - "otimesas;": "\u2A36", - "Ouml;": "\u00D6", - "Ouml": "\u00D6", - "ouml;": "\u00F6", - "ouml": "\u00F6", - "ovbar;": "\u233D", - "OverBar;": "\u203E", - "OverBrace;": "\u23DE", - "OverBracket;": "\u23B4", - "OverParenthesis;": "\u23DC", - "par;": "\u2225", - "para;": "\u00B6", - "para": "\u00B6", - "parallel;": "\u2225", - "parsim;": "\u2AF3", - "parsl;": "\u2AFD", - "part;": "\u2202", - "PartialD;": "\u2202", - "Pcy;": "\u041F", - "pcy;": "\u043F", - "percnt;": "%", - "period;": ".", - "permil;": "\u2030", - "perp;": "\u22A5", - "pertenk;": "\u2031", - "Pfr;": "\uD835\uDD13", - "pfr;": "\uD835\uDD2D", - "Phi;": "\u03A6", - "phi;": "\u03C6", - "phiv;": "\u03D5", - "phmmat;": "\u2133", - "phone;": "\u260E", - "Pi;": "\u03A0", - "pi;": "\u03C0", - "pitchfork;": "\u22D4", - "piv;": "\u03D6", - "planck;": "\u210F", - "planckh;": "\u210E", - "plankv;": "\u210F", - "plus;": "+", - "plusacir;": "\u2A23", - "plusb;": "\u229E", - "pluscir;": "\u2A22", - "plusdo;": "\u2214", - "plusdu;": "\u2A25", - "pluse;": "\u2A72", - "PlusMinus;": "\u00B1", - "plusmn;": "\u00B1", - "plusmn": "\u00B1", - "plussim;": "\u2A26", - "plustwo;": "\u2A27", - "pm;": "\u00B1", - "Poincareplane;": "\u210C", - "pointint;": "\u2A15", - "Popf;": "\u2119", - "popf;": "\uD835\uDD61", - "pound;": "\u00A3", - "pound": "\u00A3", - "Pr;": "\u2ABB", - "pr;": "\u227A", - "prap;": "\u2AB7", - "prcue;": "\u227C", - "prE;": "\u2AB3", - "pre;": "\u2AAF", - "prec;": "\u227A", - "precapprox;": "\u2AB7", - "preccurlyeq;": "\u227C", - "Precedes;": "\u227A", - "PrecedesEqual;": "\u2AAF", - "PrecedesSlantEqual;": "\u227C", - "PrecedesTilde;": "\u227E", - "preceq;": "\u2AAF", - "precnapprox;": "\u2AB9", - "precneqq;": "\u2AB5", - "precnsim;": "\u22E8", - "precsim;": "\u227E", - "Prime;": "\u2033", - "prime;": "\u2032", - "primes;": "\u2119", - "prnap;": "\u2AB9", - "prnE;": "\u2AB5", - "prnsim;": "\u22E8", - "prod;": "\u220F", - "Product;": "\u220F", - "profalar;": "\u232E", - "profline;": "\u2312", - "profsurf;": "\u2313", - "prop;": "\u221D", - "Proportion;": "\u2237", - "Proportional;": "\u221D", - "propto;": "\u221D", - "prsim;": "\u227E", - "prurel;": "\u22B0", - "Pscr;": "\uD835\uDCAB", - "pscr;": "\uD835\uDCC5", - "Psi;": "\u03A8", - "psi;": "\u03C8", - "puncsp;": "\u2008", - "Qfr;": "\uD835\uDD14", - "qfr;": "\uD835\uDD2E", - "qint;": "\u2A0C", - "Qopf;": "\u211A", - "qopf;": "\uD835\uDD62", - "qprime;": "\u2057", - "Qscr;": "\uD835\uDCAC", - "qscr;": "\uD835\uDCC6", - "quaternions;": "\u210D", - "quatint;": "\u2A16", - "quest;": "?", - "questeq;": "\u225F", - "QUOT;": "\"", - "QUOT": "\"", - "quot;": "\"", - "quot": "\"", - "rAarr;": "\u21DB", - "race;": "\u223D\u0331", - "Racute;": "\u0154", - "racute;": "\u0155", - "radic;": "\u221A", - "raemptyv;": "\u29B3", - "Rang;": "\u27EB", - "rang;": "\u27E9", - "rangd;": "\u2992", - "range;": "\u29A5", - "rangle;": "\u27E9", - "raquo;": "\u00BB", - "raquo": "\u00BB", - "Rarr;": "\u21A0", - "rArr;": "\u21D2", - "rarr;": "\u2192", - "rarrap;": "\u2975", - "rarrb;": "\u21E5", - "rarrbfs;": "\u2920", - "rarrc;": "\u2933", - "rarrfs;": "\u291E", - "rarrhk;": "\u21AA", - "rarrlp;": "\u21AC", - "rarrpl;": "\u2945", - "rarrsim;": "\u2974", - "Rarrtl;": "\u2916", - "rarrtl;": "\u21A3", - "rarrw;": "\u219D", - "rAtail;": "\u291C", - "ratail;": "\u291A", - "ratio;": "\u2236", - "rationals;": "\u211A", - "RBarr;": "\u2910", - "rBarr;": "\u290F", - "rbarr;": "\u290D", - "rbbrk;": "\u2773", - "rbrace;": "}", - "rbrack;": "]", - "rbrke;": "\u298C", - "rbrksld;": "\u298E", - "rbrkslu;": "\u2990", - "Rcaron;": "\u0158", - "rcaron;": "\u0159", - "Rcedil;": "\u0156", - "rcedil;": "\u0157", - "rceil;": "\u2309", - "rcub;": "}", - "Rcy;": "\u0420", - "rcy;": "\u0440", - "rdca;": "\u2937", - "rdldhar;": "\u2969", - "rdquo;": "\u201D", - "rdquor;": "\u201D", - "rdsh;": "\u21B3", - "Re;": "\u211C", - "real;": "\u211C", - "realine;": "\u211B", - "realpart;": "\u211C", - "reals;": "\u211D", - "rect;": "\u25AD", - "REG;": "\u00AE", - "REG": "\u00AE", - "reg;": "\u00AE", - "reg": "\u00AE", - "ReverseElement;": "\u220B", - "ReverseEquilibrium;": "\u21CB", - "ReverseUpEquilibrium;": "\u296F", - "rfisht;": "\u297D", - "rfloor;": "\u230B", - "Rfr;": "\u211C", - "rfr;": "\uD835\uDD2F", - "rHar;": "\u2964", - "rhard;": "\u21C1", - "rharu;": "\u21C0", - "rharul;": "\u296C", - "Rho;": "\u03A1", - "rho;": "\u03C1", - "rhov;": "\u03F1", - "RightAngleBracket;": "\u27E9", - "RightArrow;": "\u2192", - "Rightarrow;": "\u21D2", - "rightarrow;": "\u2192", - "RightArrowBar;": "\u21E5", - "RightArrowLeftArrow;": "\u21C4", - "rightarrowtail;": "\u21A3", - "RightCeiling;": "\u2309", - "RightDoubleBracket;": "\u27E7", - "RightDownTeeVector;": "\u295D", - "RightDownVector;": "\u21C2", - "RightDownVectorBar;": "\u2955", - "RightFloor;": "\u230B", - "rightharpoondown;": "\u21C1", - "rightharpoonup;": "\u21C0", - "rightleftarrows;": "\u21C4", - "rightleftharpoons;": "\u21CC", - "rightrightarrows;": "\u21C9", - "rightsquigarrow;": "\u219D", - "RightTee;": "\u22A2", - "RightTeeArrow;": "\u21A6", - "RightTeeVector;": "\u295B", - "rightthreetimes;": "\u22CC", - "RightTriangle;": "\u22B3", - "RightTriangleBar;": "\u29D0", - "RightTriangleEqual;": "\u22B5", - "RightUpDownVector;": "\u294F", - "RightUpTeeVector;": "\u295C", - "RightUpVector;": "\u21BE", - "RightUpVectorBar;": "\u2954", - "RightVector;": "\u21C0", - "RightVectorBar;": "\u2953", - "ring;": "\u02DA", - "risingdotseq;": "\u2253", - "rlarr;": "\u21C4", - "rlhar;": "\u21CC", - "rlm;": "\u200F", - "rmoust;": "\u23B1", - "rmoustache;": "\u23B1", - "rnmid;": "\u2AEE", - "roang;": "\u27ED", - "roarr;": "\u21FE", - "robrk;": "\u27E7", - "ropar;": "\u2986", - "Ropf;": "\u211D", - "ropf;": "\uD835\uDD63", - "roplus;": "\u2A2E", - "rotimes;": "\u2A35", - "RoundImplies;": "\u2970", - "rpar;": ")", - "rpargt;": "\u2994", - "rppolint;": "\u2A12", - "rrarr;": "\u21C9", - "Rrightarrow;": "\u21DB", - "rsaquo;": "\u203A", - "Rscr;": "\u211B", - "rscr;": "\uD835\uDCC7", - "Rsh;": "\u21B1", - "rsh;": "\u21B1", - "rsqb;": "]", - "rsquo;": "\u2019", - "rsquor;": "\u2019", - "rthree;": "\u22CC", - "rtimes;": "\u22CA", - "rtri;": "\u25B9", - "rtrie;": "\u22B5", - "rtrif;": "\u25B8", - "rtriltri;": "\u29CE", - "RuleDelayed;": "\u29F4", - "ruluhar;": "\u2968", - "rx;": "\u211E", - "Sacute;": "\u015A", - "sacute;": "\u015B", - "sbquo;": "\u201A", - "Sc;": "\u2ABC", - "sc;": "\u227B", - "scap;": "\u2AB8", - "Scaron;": "\u0160", - "scaron;": "\u0161", - "sccue;": "\u227D", - "scE;": "\u2AB4", - "sce;": "\u2AB0", - "Scedil;": "\u015E", - "scedil;": "\u015F", - "Scirc;": "\u015C", - "scirc;": "\u015D", - "scnap;": "\u2ABA", - "scnE;": "\u2AB6", - "scnsim;": "\u22E9", - "scpolint;": "\u2A13", - "scsim;": "\u227F", - "Scy;": "\u0421", - "scy;": "\u0441", - "sdot;": "\u22C5", - "sdotb;": "\u22A1", - "sdote;": "\u2A66", - "searhk;": "\u2925", - "seArr;": "\u21D8", - "searr;": "\u2198", - "searrow;": "\u2198", - "sect;": "\u00A7", - "sect": "\u00A7", - "semi;": ";", - "seswar;": "\u2929", - "setminus;": "\u2216", - "setmn;": "\u2216", - "sext;": "\u2736", - "Sfr;": "\uD835\uDD16", - "sfr;": "\uD835\uDD30", - "sfrown;": "\u2322", - "sharp;": "\u266F", - "SHCHcy;": "\u0429", - "shchcy;": "\u0449", - "SHcy;": "\u0428", - "shcy;": "\u0448", - "ShortDownArrow;": "\u2193", - "ShortLeftArrow;": "\u2190", - "shortmid;": "\u2223", - "shortparallel;": "\u2225", - "ShortRightArrow;": "\u2192", - "ShortUpArrow;": "\u2191", - "shy;": "\u00AD", - "shy": "\u00AD", - "Sigma;": "\u03A3", - "sigma;": "\u03C3", - "sigmaf;": "\u03C2", - "sigmav;": "\u03C2", - "sim;": "\u223C", - "simdot;": "\u2A6A", - "sime;": "\u2243", - "simeq;": "\u2243", - "simg;": "\u2A9E", - "simgE;": "\u2AA0", - "siml;": "\u2A9D", - "simlE;": "\u2A9F", - "simne;": "\u2246", - "simplus;": "\u2A24", - "simrarr;": "\u2972", - "slarr;": "\u2190", - "SmallCircle;": "\u2218", - "smallsetminus;": "\u2216", - "smashp;": "\u2A33", - "smeparsl;": "\u29E4", - "smid;": "\u2223", - "smile;": "\u2323", - "smt;": "\u2AAA", - "smte;": "\u2AAC", - "smtes;": "\u2AAC\uFE00", - "SOFTcy;": "\u042C", - "softcy;": "\u044C", - "sol;": "/", - "solb;": "\u29C4", - "solbar;": "\u233F", - "Sopf;": "\uD835\uDD4A", - "sopf;": "\uD835\uDD64", - "spades;": "\u2660", - "spadesuit;": "\u2660", - "spar;": "\u2225", - "sqcap;": "\u2293", - "sqcaps;": "\u2293\uFE00", - "sqcup;": "\u2294", - "sqcups;": "\u2294\uFE00", - "Sqrt;": "\u221A", - "sqsub;": "\u228F", - "sqsube;": "\u2291", - "sqsubset;": "\u228F", - "sqsubseteq;": "\u2291", - "sqsup;": "\u2290", - "sqsupe;": "\u2292", - "sqsupset;": "\u2290", - "sqsupseteq;": "\u2292", - "squ;": "\u25A1", - "Square;": "\u25A1", - "square;": "\u25A1", - "SquareIntersection;": "\u2293", - "SquareSubset;": "\u228F", - "SquareSubsetEqual;": "\u2291", - "SquareSuperset;": "\u2290", - "SquareSupersetEqual;": "\u2292", - "SquareUnion;": "\u2294", - "squarf;": "\u25AA", - "squf;": "\u25AA", - "srarr;": "\u2192", - "Sscr;": "\uD835\uDCAE", - "sscr;": "\uD835\uDCC8", - "ssetmn;": "\u2216", - "ssmile;": "\u2323", - "sstarf;": "\u22C6", - "Star;": "\u22C6", - "star;": "\u2606", - "starf;": "\u2605", - "straightepsilon;": "\u03F5", - "straightphi;": "\u03D5", - "strns;": "\u00AF", - "Sub;": "\u22D0", - "sub;": "\u2282", - "subdot;": "\u2ABD", - "subE;": "\u2AC5", - "sube;": "\u2286", - "subedot;": "\u2AC3", - "submult;": "\u2AC1", - "subnE;": "\u2ACB", - "subne;": "\u228A", - "subplus;": "\u2ABF", - "subrarr;": "\u2979", - "Subset;": "\u22D0", - "subset;": "\u2282", - "subseteq;": "\u2286", - "subseteqq;": "\u2AC5", - "SubsetEqual;": "\u2286", - "subsetneq;": "\u228A", - "subsetneqq;": "\u2ACB", - "subsim;": "\u2AC7", - "subsub;": "\u2AD5", - "subsup;": "\u2AD3", - "succ;": "\u227B", - "succapprox;": "\u2AB8", - "succcurlyeq;": "\u227D", - "Succeeds;": "\u227B", - "SucceedsEqual;": "\u2AB0", - "SucceedsSlantEqual;": "\u227D", - "SucceedsTilde;": "\u227F", - "succeq;": "\u2AB0", - "succnapprox;": "\u2ABA", - "succneqq;": "\u2AB6", - "succnsim;": "\u22E9", - "succsim;": "\u227F", - "SuchThat;": "\u220B", - "Sum;": "\u2211", - "sum;": "\u2211", - "sung;": "\u266A", - "Sup;": "\u22D1", - "sup;": "\u2283", - "sup1;": "\u00B9", - "sup1": "\u00B9", - "sup2;": "\u00B2", - "sup2": "\u00B2", - "sup3;": "\u00B3", - "sup3": "\u00B3", - "supdot;": "\u2ABE", - "supdsub;": "\u2AD8", - "supE;": "\u2AC6", - "supe;": "\u2287", - "supedot;": "\u2AC4", - "Superset;": "\u2283", - "SupersetEqual;": "\u2287", - "suphsol;": "\u27C9", - "suphsub;": "\u2AD7", - "suplarr;": "\u297B", - "supmult;": "\u2AC2", - "supnE;": "\u2ACC", - "supne;": "\u228B", - "supplus;": "\u2AC0", - "Supset;": "\u22D1", - "supset;": "\u2283", - "supseteq;": "\u2287", - "supseteqq;": "\u2AC6", - "supsetneq;": "\u228B", - "supsetneqq;": "\u2ACC", - "supsim;": "\u2AC8", - "supsub;": "\u2AD4", - "supsup;": "\u2AD6", - "swarhk;": "\u2926", - "swArr;": "\u21D9", - "swarr;": "\u2199", - "swarrow;": "\u2199", - "swnwar;": "\u292A", - "szlig;": "\u00DF", - "szlig": "\u00DF", - "Tab;": "\t", - "target;": "\u2316", - "Tau;": "\u03A4", - "tau;": "\u03C4", - "tbrk;": "\u23B4", - "Tcaron;": "\u0164", - "tcaron;": "\u0165", - "Tcedil;": "\u0162", - "tcedil;": "\u0163", - "Tcy;": "\u0422", - "tcy;": "\u0442", - "tdot;": "\u20DB", - "telrec;": "\u2315", - "Tfr;": "\uD835\uDD17", - "tfr;": "\uD835\uDD31", - "there4;": "\u2234", - "Therefore;": "\u2234", - "therefore;": "\u2234", - "Theta;": "\u0398", - "theta;": "\u03B8", - "thetasym;": "\u03D1", - "thetav;": "\u03D1", - "thickapprox;": "\u2248", - "thicksim;": "\u223C", - "ThickSpace;": "\u205F\u200A", - "thinsp;": "\u2009", - "ThinSpace;": "\u2009", - "thkap;": "\u2248", - "thksim;": "\u223C", - "THORN;": "\u00DE", - "THORN": "\u00DE", - "thorn;": "\u00FE", - "thorn": "\u00FE", - "Tilde;": "\u223C", - "tilde;": "\u02DC", - "TildeEqual;": "\u2243", - "TildeFullEqual;": "\u2245", - "TildeTilde;": "\u2248", - "times;": "\u00D7", - "times": "\u00D7", - "timesb;": "\u22A0", - "timesbar;": "\u2A31", - "timesd;": "\u2A30", - "tint;": "\u222D", - "toea;": "\u2928", - "top;": "\u22A4", - "topbot;": "\u2336", - "topcir;": "\u2AF1", - "Topf;": "\uD835\uDD4B", - "topf;": "\uD835\uDD65", - "topfork;": "\u2ADA", - "tosa;": "\u2929", - "tprime;": "\u2034", - "TRADE;": "\u2122", - "trade;": "\u2122", - "triangle;": "\u25B5", - "triangledown;": "\u25BF", - "triangleleft;": "\u25C3", - "trianglelefteq;": "\u22B4", - "triangleq;": "\u225C", - "triangleright;": "\u25B9", - "trianglerighteq;": "\u22B5", - "tridot;": "\u25EC", - "trie;": "\u225C", - "triminus;": "\u2A3A", - "TripleDot;": "\u20DB", - "triplus;": "\u2A39", - "trisb;": "\u29CD", - "tritime;": "\u2A3B", - "trpezium;": "\u23E2", - "Tscr;": "\uD835\uDCAF", - "tscr;": "\uD835\uDCC9", - "TScy;": "\u0426", - "tscy;": "\u0446", - "TSHcy;": "\u040B", - "tshcy;": "\u045B", - "Tstrok;": "\u0166", - "tstrok;": "\u0167", - "twixt;": "\u226C", - "twoheadleftarrow;": "\u219E", - "twoheadrightarrow;": "\u21A0", - "Uacute;": "\u00DA", - "Uacute": "\u00DA", - "uacute;": "\u00FA", - "uacute": "\u00FA", - "Uarr;": "\u219F", - "uArr;": "\u21D1", - "uarr;": "\u2191", - "Uarrocir;": "\u2949", - "Ubrcy;": "\u040E", - "ubrcy;": "\u045E", - "Ubreve;": "\u016C", - "ubreve;": "\u016D", - "Ucirc;": "\u00DB", - "Ucirc": "\u00DB", - "ucirc;": "\u00FB", - "ucirc": "\u00FB", - "Ucy;": "\u0423", - "ucy;": "\u0443", - "udarr;": "\u21C5", - "Udblac;": "\u0170", - "udblac;": "\u0171", - "udhar;": "\u296E", - "ufisht;": "\u297E", - "Ufr;": "\uD835\uDD18", - "ufr;": "\uD835\uDD32", - "Ugrave;": "\u00D9", - "Ugrave": "\u00D9", - "ugrave;": "\u00F9", - "ugrave": "\u00F9", - "uHar;": "\u2963", - "uharl;": "\u21BF", - "uharr;": "\u21BE", - "uhblk;": "\u2580", - "ulcorn;": "\u231C", - "ulcorner;": "\u231C", - "ulcrop;": "\u230F", - "ultri;": "\u25F8", - "Umacr;": "\u016A", - "umacr;": "\u016B", - "uml;": "\u00A8", - "uml": "\u00A8", - "UnderBar;": "_", - "UnderBrace;": "\u23DF", - "UnderBracket;": "\u23B5", - "UnderParenthesis;": "\u23DD", - "Union;": "\u22C3", - "UnionPlus;": "\u228E", - "Uogon;": "\u0172", - "uogon;": "\u0173", - "Uopf;": "\uD835\uDD4C", - "uopf;": "\uD835\uDD66", - "UpArrow;": "\u2191", - "Uparrow;": "\u21D1", - "uparrow;": "\u2191", - "UpArrowBar;": "\u2912", - "UpArrowDownArrow;": "\u21C5", - "UpDownArrow;": "\u2195", - "Updownarrow;": "\u21D5", - "updownarrow;": "\u2195", - "UpEquilibrium;": "\u296E", - "upharpoonleft;": "\u21BF", - "upharpoonright;": "\u21BE", - "uplus;": "\u228E", - "UpperLeftArrow;": "\u2196", - "UpperRightArrow;": "\u2197", - "Upsi;": "\u03D2", - "upsi;": "\u03C5", - "upsih;": "\u03D2", - "Upsilon;": "\u03A5", - "upsilon;": "\u03C5", - "UpTee;": "\u22A5", - "UpTeeArrow;": "\u21A5", - "upuparrows;": "\u21C8", - "urcorn;": "\u231D", - "urcorner;": "\u231D", - "urcrop;": "\u230E", - "Uring;": "\u016E", - "uring;": "\u016F", - "urtri;": "\u25F9", - "Uscr;": "\uD835\uDCB0", - "uscr;": "\uD835\uDCCA", - "utdot;": "\u22F0", - "Utilde;": "\u0168", - "utilde;": "\u0169", - "utri;": "\u25B5", - "utrif;": "\u25B4", - "uuarr;": "\u21C8", - "Uuml;": "\u00DC", - "Uuml": "\u00DC", - "uuml;": "\u00FC", - "uuml": "\u00FC", - "uwangle;": "\u29A7", - "vangrt;": "\u299C", - "varepsilon;": "\u03F5", - "varkappa;": "\u03F0", - "varnothing;": "\u2205", - "varphi;": "\u03D5", - "varpi;": "\u03D6", - "varpropto;": "\u221D", - "vArr;": "\u21D5", - "varr;": "\u2195", - "varrho;": "\u03F1", - "varsigma;": "\u03C2", - "varsubsetneq;": "\u228A\uFE00", - "varsubsetneqq;": "\u2ACB\uFE00", - "varsupsetneq;": "\u228B\uFE00", - "varsupsetneqq;": "\u2ACC\uFE00", - "vartheta;": "\u03D1", - "vartriangleleft;": "\u22B2", - "vartriangleright;": "\u22B3", - "Vbar;": "\u2AEB", - "vBar;": "\u2AE8", - "vBarv;": "\u2AE9", - "Vcy;": "\u0412", - "vcy;": "\u0432", - "VDash;": "\u22AB", - "Vdash;": "\u22A9", - "vDash;": "\u22A8", - "vdash;": "\u22A2", - "Vdashl;": "\u2AE6", - "Vee;": "\u22C1", - "vee;": "\u2228", - "veebar;": "\u22BB", - "veeeq;": "\u225A", - "vellip;": "\u22EE", - "Verbar;": "\u2016", - "verbar;": "|", - "Vert;": "\u2016", - "vert;": "|", - "VerticalBar;": "\u2223", - "VerticalLine;": "|", - "VerticalSeparator;": "\u2758", - "VerticalTilde;": "\u2240", - "VeryThinSpace;": "\u200A", - "Vfr;": "\uD835\uDD19", - "vfr;": "\uD835\uDD33", - "vltri;": "\u22B2", - "vnsub;": "\u2282\u20D2", - "vnsup;": "\u2283\u20D2", - "Vopf;": "\uD835\uDD4D", - "vopf;": "\uD835\uDD67", - "vprop;": "\u221D", - "vrtri;": "\u22B3", - "Vscr;": "\uD835\uDCB1", - "vscr;": "\uD835\uDCCB", - "vsubnE;": "\u2ACB\uFE00", - "vsubne;": "\u228A\uFE00", - "vsupnE;": "\u2ACC\uFE00", - "vsupne;": "\u228B\uFE00", - "Vvdash;": "\u22AA", - "vzigzag;": "\u299A", - "Wcirc;": "\u0174", - "wcirc;": "\u0175", - "wedbar;": "\u2A5F", - "Wedge;": "\u22C0", - "wedge;": "\u2227", - "wedgeq;": "\u2259", - "weierp;": "\u2118", - "Wfr;": "\uD835\uDD1A", - "wfr;": "\uD835\uDD34", - "Wopf;": "\uD835\uDD4E", - "wopf;": "\uD835\uDD68", - "wp;": "\u2118", - "wr;": "\u2240", - "wreath;": "\u2240", - "Wscr;": "\uD835\uDCB2", - "wscr;": "\uD835\uDCCC", - "xcap;": "\u22C2", - "xcirc;": "\u25EF", - "xcup;": "\u22C3", - "xdtri;": "\u25BD", - "Xfr;": "\uD835\uDD1B", - "xfr;": "\uD835\uDD35", - "xhArr;": "\u27FA", - "xharr;": "\u27F7", - "Xi;": "\u039E", - "xi;": "\u03BE", - "xlArr;": "\u27F8", - "xlarr;": "\u27F5", - "xmap;": "\u27FC", - "xnis;": "\u22FB", - "xodot;": "\u2A00", - "Xopf;": "\uD835\uDD4F", - "xopf;": "\uD835\uDD69", - "xoplus;": "\u2A01", - "xotime;": "\u2A02", - "xrArr;": "\u27F9", - "xrarr;": "\u27F6", - "Xscr;": "\uD835\uDCB3", - "xscr;": "\uD835\uDCCD", - "xsqcup;": "\u2A06", - "xuplus;": "\u2A04", - "xutri;": "\u25B3", - "xvee;": "\u22C1", - "xwedge;": "\u22C0", - "Yacute;": "\u00DD", - "Yacute": "\u00DD", - "yacute;": "\u00FD", - "yacute": "\u00FD", - "YAcy;": "\u042F", - "yacy;": "\u044F", - "Ycirc;": "\u0176", - "ycirc;": "\u0177", - "Ycy;": "\u042B", - "ycy;": "\u044B", - "yen;": "\u00A5", - "yen": "\u00A5", - "Yfr;": "\uD835\uDD1C", - "yfr;": "\uD835\uDD36", - "YIcy;": "\u0407", - "yicy;": "\u0457", - "Yopf;": "\uD835\uDD50", - "yopf;": "\uD835\uDD6A", - "Yscr;": "\uD835\uDCB4", - "yscr;": "\uD835\uDCCE", - "YUcy;": "\u042E", - "yucy;": "\u044E", - "Yuml;": "\u0178", - "yuml;": "\u00FF", - "yuml": "\u00FF", - "Zacute;": "\u0179", - "zacute;": "\u017A", - "Zcaron;": "\u017D", - "zcaron;": "\u017E", - "Zcy;": "\u0417", - "zcy;": "\u0437", - "Zdot;": "\u017B", - "zdot;": "\u017C", - "zeetrf;": "\u2128", - "ZeroWidthSpace;": "\u200B", - "Zeta;": "\u0396", - "zeta;": "\u03B6", - "Zfr;": "\u2128", - "zfr;": "\uD835\uDD37", - "ZHcy;": "\u0416", - "zhcy;": "\u0436", - "zigrarr;": "\u21DD", - "Zopf;": "\u2124", - "zopf;": "\uD835\uDD6B", - "Zscr;": "\uD835\uDCB5", - "zscr;": "\uD835\uDCCF", - "zwj;": "\u200D", - "zwnj;": "\u200C" -} \ No newline at end of file diff --git a/reverse_engineering/node_modules/ent/examples/simple.js b/reverse_engineering/node_modules/ent/examples/simple.js deleted file mode 100644 index 48c4e6f..0000000 --- a/reverse_engineering/node_modules/ent/examples/simple.js +++ /dev/null @@ -1,3 +0,0 @@ -var ent = require('ent'); -console.log(ent.encode('©moo')) -console.log(ent.decode('π & ρ')); diff --git a/reverse_engineering/node_modules/ent/index.js b/reverse_engineering/node_modules/ent/index.js deleted file mode 100644 index 8dae629..0000000 --- a/reverse_engineering/node_modules/ent/index.js +++ /dev/null @@ -1,2 +0,0 @@ -exports.encode = require('./encode'); -exports.decode = require('./decode'); diff --git a/reverse_engineering/node_modules/ent/package.json b/reverse_engineering/node_modules/ent/package.json deleted file mode 100644 index 132930e..0000000 --- a/reverse_engineering/node_modules/ent/package.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "_from": "ent@^2.2.0", - "_id": "ent@2.2.0", - "_inBundle": false, - "_integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "_location": "/ent", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "ent@^2.2.0", - "name": "ent", - "escapedName": "ent", - "rawSpec": "^2.2.0", - "saveSpec": null, - "fetchSpec": "^2.2.0" - }, - "_requiredBy": [ - "/@google-cloud/common" - ], - "_resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "_shasum": "e964219325a21d05f44466a2f686ed6ce5f5dd1d", - "_spec": "ent@^2.2.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/@google-cloud/common", - "author": { - "name": "James Halliday", - "email": "mail@substack.net", - "url": "http://substack.net" - }, - "bugs": { - "url": "https://github.com/substack/node-ent/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Encode and decode HTML entities", - "devDependencies": { - "tape": "~2.3.2" - }, - "homepage": "https://github.com/substack/node-ent#readme", - "keywords": [ - "entities", - "entitify", - "entity", - "html", - "encode", - "decode" - ], - "license": "MIT", - "main": "./index.js", - "name": "ent", - "repository": { - "type": "git", - "url": "git+https://github.com/substack/node-ent.git" - }, - "scripts": { - "prepublish": "node build/index.js", - "test": "tape test/*.js" - }, - "testling": { - "files": "test/*.js", - "browsers": [ - "ie/6..latest", - "ff/3.5", - "ff/latest", - "chrome/10", - "chrome/latest", - "safari/latest", - "opera/latest" - ] - }, - "version": "2.2.0" -} diff --git a/reverse_engineering/node_modules/ent/readme.markdown b/reverse_engineering/node_modules/ent/readme.markdown deleted file mode 100644 index a09b480..0000000 --- a/reverse_engineering/node_modules/ent/readme.markdown +++ /dev/null @@ -1,71 +0,0 @@ -# ent - -Encode and decode HTML entities - -[![browser support](http://ci.testling.com/substack/node-ent.png)](http://ci.testling.com/substack/node-ent) - -[![build status](https://secure.travis-ci.org/substack/node-ent.png)](http://travis-ci.org/substack/node-ent) - -# example - -``` js -var ent = require('ent'); -console.log(ent.encode('©moo')) -console.log(ent.decode('π & ρ')); -``` - -``` -<span>©moo</span> -π & ρ -``` - -![ent](http://substack.net/images/ent.png) - -# methods - -``` js -var ent = require('ent'); -var encode = require('ent/encode'); -var decode = require('ent/decode'); -``` - -## encode(str, opts={}) - -Escape unsafe characters in `str` with html entities. - -By default, entities are encoded with numeric decimal codes. - -If `opts.numeric` is false or `opts.named` is true, encoding will used named -codes like `π`. - -If `opts.special` is set to an Object, the key names will be forced -to be encoded (defaults to forcing: `<>'"&`). For example: - -``` js -console.log(encode('hello', { special: { l: true } })); -``` - -``` -hello -``` - -## decode(str) - -Convert html entities in `str` back to raw text. - -# credits - -HTML entity tables shamelessly lifted from perl's -[HTML::Entities](http://cpansearch.perl.org/src/GAAS/HTML-Parser-3.68/lib/HTML/Entities.pm) - -# install - -With [npm](https://npmjs.org) do: - -``` -npm install ent -``` - -# license - -MIT diff --git a/reverse_engineering/node_modules/ent/reversed.json b/reverse_engineering/node_modules/ent/reversed.json deleted file mode 100644 index d9a53a5..0000000 --- a/reverse_engineering/node_modules/ent/reversed.json +++ /dev/null @@ -1,1315 +0,0 @@ -{ - "9": "Tab;", - "10": "NewLine;", - "33": "excl;", - "34": "quot;", - "35": "num;", - "36": "dollar;", - "37": "percnt;", - "38": "amp;", - "39": "apos;", - "40": "lpar;", - "41": "rpar;", - "42": "midast;", - "43": "plus;", - "44": "comma;", - "46": "period;", - "47": "sol;", - "58": "colon;", - "59": "semi;", - "60": "lt;", - "61": "equals;", - "62": "gt;", - "63": "quest;", - "64": "commat;", - "91": "lsqb;", - "92": "bsol;", - "93": "rsqb;", - "94": "Hat;", - "95": "UnderBar;", - "96": "grave;", - "123": "lcub;", - "124": "VerticalLine;", - "125": "rcub;", - "160": "NonBreakingSpace;", - "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": "strns;", - "176": "deg;", - "177": "pm;", - "178": "sup2;", - "179": "sup3;", - "180": "DiacriticalAcute;", - "181": "micro;", - "182": "para;", - "183": "middot;", - "184": "Cedilla;", - "185": "sup1;", - "186": "ordm;", - "187": "raquo;", - "188": "frac14;", - "189": "half;", - "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;", - "256": "Amacr;", - "257": "amacr;", - "258": "Abreve;", - "259": "abreve;", - "260": "Aogon;", - "261": "aogon;", - "262": "Cacute;", - "263": "cacute;", - "264": "Ccirc;", - "265": "ccirc;", - "266": "Cdot;", - "267": "cdot;", - "268": "Ccaron;", - "269": "ccaron;", - "270": "Dcaron;", - "271": "dcaron;", - "272": "Dstrok;", - "273": "dstrok;", - "274": "Emacr;", - "275": "emacr;", - "278": "Edot;", - "279": "edot;", - "280": "Eogon;", - "281": "eogon;", - "282": "Ecaron;", - "283": "ecaron;", - "284": "Gcirc;", - "285": "gcirc;", - "286": "Gbreve;", - "287": "gbreve;", - "288": "Gdot;", - "289": "gdot;", - "290": "Gcedil;", - "292": "Hcirc;", - "293": "hcirc;", - "294": "Hstrok;", - "295": "hstrok;", - "296": "Itilde;", - "297": "itilde;", - "298": "Imacr;", - "299": "imacr;", - "302": "Iogon;", - "303": "iogon;", - "304": "Idot;", - "305": "inodot;", - "306": "IJlig;", - "307": "ijlig;", - "308": "Jcirc;", - "309": "jcirc;", - "310": "Kcedil;", - "311": "kcedil;", - "312": "kgreen;", - "313": "Lacute;", - "314": "lacute;", - "315": "Lcedil;", - "316": "lcedil;", - "317": "Lcaron;", - "318": "lcaron;", - "319": "Lmidot;", - "320": "lmidot;", - "321": "Lstrok;", - "322": "lstrok;", - "323": "Nacute;", - "324": "nacute;", - "325": "Ncedil;", - "326": "ncedil;", - "327": "Ncaron;", - "328": "ncaron;", - "329": "napos;", - "330": "ENG;", - "331": "eng;", - "332": "Omacr;", - "333": "omacr;", - "336": "Odblac;", - "337": "odblac;", - "338": "OElig;", - "339": "oelig;", - "340": "Racute;", - "341": "racute;", - "342": "Rcedil;", - "343": "rcedil;", - "344": "Rcaron;", - "345": "rcaron;", - "346": "Sacute;", - "347": "sacute;", - "348": "Scirc;", - "349": "scirc;", - "350": "Scedil;", - "351": "scedil;", - "352": "Scaron;", - "353": "scaron;", - "354": "Tcedil;", - "355": "tcedil;", - "356": "Tcaron;", - "357": "tcaron;", - "358": "Tstrok;", - "359": "tstrok;", - "360": "Utilde;", - "361": "utilde;", - "362": "Umacr;", - "363": "umacr;", - "364": "Ubreve;", - "365": "ubreve;", - "366": "Uring;", - "367": "uring;", - "368": "Udblac;", - "369": "udblac;", - "370": "Uogon;", - "371": "uogon;", - "372": "Wcirc;", - "373": "wcirc;", - "374": "Ycirc;", - "375": "ycirc;", - "376": "Yuml;", - "377": "Zacute;", - "378": "zacute;", - "379": "Zdot;", - "380": "zdot;", - "381": "Zcaron;", - "382": "zcaron;", - "402": "fnof;", - "437": "imped;", - "501": "gacute;", - "567": "jmath;", - "710": "circ;", - "711": "Hacek;", - "728": "breve;", - "729": "dot;", - "730": "ring;", - "731": "ogon;", - "732": "tilde;", - "733": "DiacriticalDoubleAcute;", - "785": "DownBreve;", - "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": "varsigma;", - "963": "sigma;", - "964": "tau;", - "965": "upsilon;", - "966": "phi;", - "967": "chi;", - "968": "psi;", - "969": "omega;", - "977": "vartheta;", - "978": "upsih;", - "981": "varphi;", - "982": "varpi;", - "988": "Gammad;", - "989": "gammad;", - "1008": "varkappa;", - "1009": "varrho;", - "1013": "varepsilon;", - "1014": "bepsi;", - "1025": "IOcy;", - "1026": "DJcy;", - "1027": "GJcy;", - "1028": "Jukcy;", - "1029": "DScy;", - "1030": "Iukcy;", - "1031": "YIcy;", - "1032": "Jsercy;", - "1033": "LJcy;", - "1034": "NJcy;", - "1035": "TSHcy;", - "1036": "KJcy;", - "1038": "Ubrcy;", - "1039": "DZcy;", - "1040": "Acy;", - "1041": "Bcy;", - "1042": "Vcy;", - "1043": "Gcy;", - "1044": "Dcy;", - "1045": "IEcy;", - "1046": "ZHcy;", - "1047": "Zcy;", - "1048": "Icy;", - "1049": "Jcy;", - "1050": "Kcy;", - "1051": "Lcy;", - "1052": "Mcy;", - "1053": "Ncy;", - "1054": "Ocy;", - "1055": "Pcy;", - "1056": "Rcy;", - "1057": "Scy;", - "1058": "Tcy;", - "1059": "Ucy;", - "1060": "Fcy;", - "1061": "KHcy;", - "1062": "TScy;", - "1063": "CHcy;", - "1064": "SHcy;", - "1065": "SHCHcy;", - "1066": "HARDcy;", - "1067": "Ycy;", - "1068": "SOFTcy;", - "1069": "Ecy;", - "1070": "YUcy;", - "1071": "YAcy;", - "1072": "acy;", - "1073": "bcy;", - "1074": "vcy;", - "1075": "gcy;", - "1076": "dcy;", - "1077": "iecy;", - "1078": "zhcy;", - "1079": "zcy;", - "1080": "icy;", - "1081": "jcy;", - "1082": "kcy;", - "1083": "lcy;", - "1084": "mcy;", - "1085": "ncy;", - "1086": "ocy;", - "1087": "pcy;", - "1088": "rcy;", - "1089": "scy;", - "1090": "tcy;", - "1091": "ucy;", - "1092": "fcy;", - "1093": "khcy;", - "1094": "tscy;", - "1095": "chcy;", - "1096": "shcy;", - "1097": "shchcy;", - "1098": "hardcy;", - "1099": "ycy;", - "1100": "softcy;", - "1101": "ecy;", - "1102": "yucy;", - "1103": "yacy;", - "1105": "iocy;", - "1106": "djcy;", - "1107": "gjcy;", - "1108": "jukcy;", - "1109": "dscy;", - "1110": "iukcy;", - "1111": "yicy;", - "1112": "jsercy;", - "1113": "ljcy;", - "1114": "njcy;", - "1115": "tshcy;", - "1116": "kjcy;", - "1118": "ubrcy;", - "1119": "dzcy;", - "8194": "ensp;", - "8195": "emsp;", - "8196": "emsp13;", - "8197": "emsp14;", - "8199": "numsp;", - "8200": "puncsp;", - "8201": "ThinSpace;", - "8202": "VeryThinSpace;", - "8203": "ZeroWidthSpace;", - "8204": "zwnj;", - "8205": "zwj;", - "8206": "lrm;", - "8207": "rlm;", - "8208": "hyphen;", - "8211": "ndash;", - "8212": "mdash;", - "8213": "horbar;", - "8214": "Vert;", - "8216": "OpenCurlyQuote;", - "8217": "rsquor;", - "8218": "sbquo;", - "8220": "OpenCurlyDoubleQuote;", - "8221": "rdquor;", - "8222": "ldquor;", - "8224": "dagger;", - "8225": "ddagger;", - "8226": "bullet;", - "8229": "nldr;", - "8230": "mldr;", - "8240": "permil;", - "8241": "pertenk;", - "8242": "prime;", - "8243": "Prime;", - "8244": "tprime;", - "8245": "bprime;", - "8249": "lsaquo;", - "8250": "rsaquo;", - "8254": "OverBar;", - "8257": "caret;", - "8259": "hybull;", - "8260": "frasl;", - "8271": "bsemi;", - "8279": "qprime;", - "8287": "MediumSpace;", - "8288": "NoBreak;", - "8289": "ApplyFunction;", - "8290": "it;", - "8291": "InvisibleComma;", - "8364": "euro;", - "8411": "TripleDot;", - "8412": "DotDot;", - "8450": "Copf;", - "8453": "incare;", - "8458": "gscr;", - "8459": "Hscr;", - "8460": "Poincareplane;", - "8461": "quaternions;", - "8462": "planckh;", - "8463": "plankv;", - "8464": "Iscr;", - "8465": "imagpart;", - "8466": "Lscr;", - "8467": "ell;", - "8469": "Nopf;", - "8470": "numero;", - "8471": "copysr;", - "8472": "wp;", - "8473": "primes;", - "8474": "rationals;", - "8475": "Rscr;", - "8476": "Rfr;", - "8477": "Ropf;", - "8478": "rx;", - "8482": "trade;", - "8484": "Zopf;", - "8487": "mho;", - "8488": "Zfr;", - "8489": "iiota;", - "8492": "Bscr;", - "8493": "Cfr;", - "8495": "escr;", - "8496": "expectation;", - "8497": "Fscr;", - "8499": "phmmat;", - "8500": "oscr;", - "8501": "aleph;", - "8502": "beth;", - "8503": "gimel;", - "8504": "daleth;", - "8517": "DD;", - "8518": "DifferentialD;", - "8519": "exponentiale;", - "8520": "ImaginaryI;", - "8531": "frac13;", - "8532": "frac23;", - "8533": "frac15;", - "8534": "frac25;", - "8535": "frac35;", - "8536": "frac45;", - "8537": "frac16;", - "8538": "frac56;", - "8539": "frac18;", - "8540": "frac38;", - "8541": "frac58;", - "8542": "frac78;", - "8592": "slarr;", - "8593": "uparrow;", - "8594": "srarr;", - "8595": "ShortDownArrow;", - "8596": "leftrightarrow;", - "8597": "varr;", - "8598": "UpperLeftArrow;", - "8599": "UpperRightArrow;", - "8600": "searrow;", - "8601": "swarrow;", - "8602": "nleftarrow;", - "8603": "nrightarrow;", - "8605": "rightsquigarrow;", - "8606": "twoheadleftarrow;", - "8607": "Uarr;", - "8608": "twoheadrightarrow;", - "8609": "Darr;", - "8610": "leftarrowtail;", - "8611": "rightarrowtail;", - "8612": "mapstoleft;", - "8613": "UpTeeArrow;", - "8614": "RightTeeArrow;", - "8615": "mapstodown;", - "8617": "larrhk;", - "8618": "rarrhk;", - "8619": "looparrowleft;", - "8620": "rarrlp;", - "8621": "leftrightsquigarrow;", - "8622": "nleftrightarrow;", - "8624": "lsh;", - "8625": "rsh;", - "8626": "ldsh;", - "8627": "rdsh;", - "8629": "crarr;", - "8630": "curvearrowleft;", - "8631": "curvearrowright;", - "8634": "olarr;", - "8635": "orarr;", - "8636": "lharu;", - "8637": "lhard;", - "8638": "upharpoonright;", - "8639": "upharpoonleft;", - "8640": "RightVector;", - "8641": "rightharpoondown;", - "8642": "RightDownVector;", - "8643": "LeftDownVector;", - "8644": "rlarr;", - "8645": "UpArrowDownArrow;", - "8646": "lrarr;", - "8647": "llarr;", - "8648": "uuarr;", - "8649": "rrarr;", - "8650": "downdownarrows;", - "8651": "ReverseEquilibrium;", - "8652": "rlhar;", - "8653": "nLeftarrow;", - "8654": "nLeftrightarrow;", - "8655": "nRightarrow;", - "8656": "Leftarrow;", - "8657": "Uparrow;", - "8658": "Rightarrow;", - "8659": "Downarrow;", - "8660": "Leftrightarrow;", - "8661": "vArr;", - "8662": "nwArr;", - "8663": "neArr;", - "8664": "seArr;", - "8665": "swArr;", - "8666": "Lleftarrow;", - "8667": "Rrightarrow;", - "8669": "zigrarr;", - "8676": "LeftArrowBar;", - "8677": "RightArrowBar;", - "8693": "duarr;", - "8701": "loarr;", - "8702": "roarr;", - "8703": "hoarr;", - "8704": "forall;", - "8705": "complement;", - "8706": "PartialD;", - "8707": "Exists;", - "8708": "NotExists;", - "8709": "varnothing;", - "8711": "nabla;", - "8712": "isinv;", - "8713": "notinva;", - "8715": "SuchThat;", - "8716": "NotReverseElement;", - "8719": "Product;", - "8720": "Coproduct;", - "8721": "sum;", - "8722": "minus;", - "8723": "mp;", - "8724": "plusdo;", - "8726": "ssetmn;", - "8727": "lowast;", - "8728": "SmallCircle;", - "8730": "Sqrt;", - "8733": "vprop;", - "8734": "infin;", - "8735": "angrt;", - "8736": "angle;", - "8737": "measuredangle;", - "8738": "angsph;", - "8739": "VerticalBar;", - "8740": "nsmid;", - "8741": "spar;", - "8742": "nspar;", - "8743": "wedge;", - "8744": "vee;", - "8745": "cap;", - "8746": "cup;", - "8747": "Integral;", - "8748": "Int;", - "8749": "tint;", - "8750": "oint;", - "8751": "DoubleContourIntegral;", - "8752": "Cconint;", - "8753": "cwint;", - "8754": "cwconint;", - "8755": "CounterClockwiseContourIntegral;", - "8756": "therefore;", - "8757": "because;", - "8758": "ratio;", - "8759": "Proportion;", - "8760": "minusd;", - "8762": "mDDot;", - "8763": "homtht;", - "8764": "Tilde;", - "8765": "bsim;", - "8766": "mstpos;", - "8767": "acd;", - "8768": "wreath;", - "8769": "nsim;", - "8770": "esim;", - "8771": "TildeEqual;", - "8772": "nsimeq;", - "8773": "TildeFullEqual;", - "8774": "simne;", - "8775": "NotTildeFullEqual;", - "8776": "TildeTilde;", - "8777": "NotTildeTilde;", - "8778": "approxeq;", - "8779": "apid;", - "8780": "bcong;", - "8781": "CupCap;", - "8782": "HumpDownHump;", - "8783": "HumpEqual;", - "8784": "esdot;", - "8785": "eDot;", - "8786": "fallingdotseq;", - "8787": "risingdotseq;", - "8788": "coloneq;", - "8789": "eqcolon;", - "8790": "eqcirc;", - "8791": "cire;", - "8793": "wedgeq;", - "8794": "veeeq;", - "8796": "trie;", - "8799": "questeq;", - "8800": "NotEqual;", - "8801": "equiv;", - "8802": "NotCongruent;", - "8804": "leq;", - "8805": "GreaterEqual;", - "8806": "LessFullEqual;", - "8807": "GreaterFullEqual;", - "8808": "lneqq;", - "8809": "gneqq;", - "8810": "NestedLessLess;", - "8811": "NestedGreaterGreater;", - "8812": "twixt;", - "8813": "NotCupCap;", - "8814": "NotLess;", - "8815": "NotGreater;", - "8816": "NotLessEqual;", - "8817": "NotGreaterEqual;", - "8818": "lsim;", - "8819": "gtrsim;", - "8820": "NotLessTilde;", - "8821": "NotGreaterTilde;", - "8822": "lg;", - "8823": "gtrless;", - "8824": "ntlg;", - "8825": "ntgl;", - "8826": "Precedes;", - "8827": "Succeeds;", - "8828": "PrecedesSlantEqual;", - "8829": "SucceedsSlantEqual;", - "8830": "prsim;", - "8831": "succsim;", - "8832": "nprec;", - "8833": "nsucc;", - "8834": "subset;", - "8835": "supset;", - "8836": "nsub;", - "8837": "nsup;", - "8838": "SubsetEqual;", - "8839": "supseteq;", - "8840": "nsubseteq;", - "8841": "nsupseteq;", - "8842": "subsetneq;", - "8843": "supsetneq;", - "8845": "cupdot;", - "8846": "uplus;", - "8847": "SquareSubset;", - "8848": "SquareSuperset;", - "8849": "SquareSubsetEqual;", - "8850": "SquareSupersetEqual;", - "8851": "SquareIntersection;", - "8852": "SquareUnion;", - "8853": "oplus;", - "8854": "ominus;", - "8855": "otimes;", - "8856": "osol;", - "8857": "odot;", - "8858": "ocir;", - "8859": "oast;", - "8861": "odash;", - "8862": "plusb;", - "8863": "minusb;", - "8864": "timesb;", - "8865": "sdotb;", - "8866": "vdash;", - "8867": "LeftTee;", - "8868": "top;", - "8869": "UpTee;", - "8871": "models;", - "8872": "vDash;", - "8873": "Vdash;", - "8874": "Vvdash;", - "8875": "VDash;", - "8876": "nvdash;", - "8877": "nvDash;", - "8878": "nVdash;", - "8879": "nVDash;", - "8880": "prurel;", - "8882": "vltri;", - "8883": "vrtri;", - "8884": "trianglelefteq;", - "8885": "trianglerighteq;", - "8886": "origof;", - "8887": "imof;", - "8888": "mumap;", - "8889": "hercon;", - "8890": "intercal;", - "8891": "veebar;", - "8893": "barvee;", - "8894": "angrtvb;", - "8895": "lrtri;", - "8896": "xwedge;", - "8897": "xvee;", - "8898": "xcap;", - "8899": "xcup;", - "8900": "diamond;", - "8901": "sdot;", - "8902": "Star;", - "8903": "divonx;", - "8904": "bowtie;", - "8905": "ltimes;", - "8906": "rtimes;", - "8907": "lthree;", - "8908": "rthree;", - "8909": "bsime;", - "8910": "cuvee;", - "8911": "cuwed;", - "8912": "Subset;", - "8913": "Supset;", - "8914": "Cap;", - "8915": "Cup;", - "8916": "pitchfork;", - "8917": "epar;", - "8918": "ltdot;", - "8919": "gtrdot;", - "8920": "Ll;", - "8921": "ggg;", - "8922": "LessEqualGreater;", - "8923": "gtreqless;", - "8926": "curlyeqprec;", - "8927": "curlyeqsucc;", - "8928": "nprcue;", - "8929": "nsccue;", - "8930": "nsqsube;", - "8931": "nsqsupe;", - "8934": "lnsim;", - "8935": "gnsim;", - "8936": "prnsim;", - "8937": "succnsim;", - "8938": "ntriangleleft;", - "8939": "ntriangleright;", - "8940": "ntrianglelefteq;", - "8941": "ntrianglerighteq;", - "8942": "vellip;", - "8943": "ctdot;", - "8944": "utdot;", - "8945": "dtdot;", - "8946": "disin;", - "8947": "isinsv;", - "8948": "isins;", - "8949": "isindot;", - "8950": "notinvc;", - "8951": "notinvb;", - "8953": "isinE;", - "8954": "nisd;", - "8955": "xnis;", - "8956": "nis;", - "8957": "notnivc;", - "8958": "notnivb;", - "8965": "barwedge;", - "8966": "doublebarwedge;", - "8968": "LeftCeiling;", - "8969": "RightCeiling;", - "8970": "lfloor;", - "8971": "RightFloor;", - "8972": "drcrop;", - "8973": "dlcrop;", - "8974": "urcrop;", - "8975": "ulcrop;", - "8976": "bnot;", - "8978": "profline;", - "8979": "profsurf;", - "8981": "telrec;", - "8982": "target;", - "8988": "ulcorner;", - "8989": "urcorner;", - "8990": "llcorner;", - "8991": "lrcorner;", - "8994": "sfrown;", - "8995": "ssmile;", - "9005": "cylcty;", - "9006": "profalar;", - "9014": "topbot;", - "9021": "ovbar;", - "9023": "solbar;", - "9084": "angzarr;", - "9136": "lmoustache;", - "9137": "rmoustache;", - "9140": "tbrk;", - "9141": "UnderBracket;", - "9142": "bbrktbrk;", - "9180": "OverParenthesis;", - "9181": "UnderParenthesis;", - "9182": "OverBrace;", - "9183": "UnderBrace;", - "9186": "trpezium;", - "9191": "elinters;", - "9251": "blank;", - "9416": "oS;", - "9472": "HorizontalLine;", - "9474": "boxv;", - "9484": "boxdr;", - "9488": "boxdl;", - "9492": "boxur;", - "9496": "boxul;", - "9500": "boxvr;", - "9508": "boxvl;", - "9516": "boxhd;", - "9524": "boxhu;", - "9532": "boxvh;", - "9552": "boxH;", - "9553": "boxV;", - "9554": "boxdR;", - "9555": "boxDr;", - "9556": "boxDR;", - "9557": "boxdL;", - "9558": "boxDl;", - "9559": "boxDL;", - "9560": "boxuR;", - "9561": "boxUr;", - "9562": "boxUR;", - "9563": "boxuL;", - "9564": "boxUl;", - "9565": "boxUL;", - "9566": "boxvR;", - "9567": "boxVr;", - "9568": "boxVR;", - "9569": "boxvL;", - "9570": "boxVl;", - "9571": "boxVL;", - "9572": "boxHd;", - "9573": "boxhD;", - "9574": "boxHD;", - "9575": "boxHu;", - "9576": "boxhU;", - "9577": "boxHU;", - "9578": "boxvH;", - "9579": "boxVh;", - "9580": "boxVH;", - "9600": "uhblk;", - "9604": "lhblk;", - "9608": "block;", - "9617": "blk14;", - "9618": "blk12;", - "9619": "blk34;", - "9633": "square;", - "9642": "squf;", - "9643": "EmptyVerySmallSquare;", - "9645": "rect;", - "9646": "marker;", - "9649": "fltns;", - "9651": "xutri;", - "9652": "utrif;", - "9653": "utri;", - "9656": "rtrif;", - "9657": "triangleright;", - "9661": "xdtri;", - "9662": "dtrif;", - "9663": "triangledown;", - "9666": "ltrif;", - "9667": "triangleleft;", - "9674": "lozenge;", - "9675": "cir;", - "9708": "tridot;", - "9711": "xcirc;", - "9720": "ultri;", - "9721": "urtri;", - "9722": "lltri;", - "9723": "EmptySmallSquare;", - "9724": "FilledSmallSquare;", - "9733": "starf;", - "9734": "star;", - "9742": "phone;", - "9792": "female;", - "9794": "male;", - "9824": "spadesuit;", - "9827": "clubsuit;", - "9829": "heartsuit;", - "9830": "diams;", - "9834": "sung;", - "9837": "flat;", - "9838": "natural;", - "9839": "sharp;", - "10003": "checkmark;", - "10007": "cross;", - "10016": "maltese;", - "10038": "sext;", - "10072": "VerticalSeparator;", - "10098": "lbbrk;", - "10099": "rbbrk;", - "10184": "bsolhsub;", - "10185": "suphsol;", - "10214": "lobrk;", - "10215": "robrk;", - "10216": "LeftAngleBracket;", - "10217": "RightAngleBracket;", - "10218": "Lang;", - "10219": "Rang;", - "10220": "loang;", - "10221": "roang;", - "10229": "xlarr;", - "10230": "xrarr;", - "10231": "xharr;", - "10232": "xlArr;", - "10233": "xrArr;", - "10234": "xhArr;", - "10236": "xmap;", - "10239": "dzigrarr;", - "10498": "nvlArr;", - "10499": "nvrArr;", - "10500": "nvHarr;", - "10501": "Map;", - "10508": "lbarr;", - "10509": "rbarr;", - "10510": "lBarr;", - "10511": "rBarr;", - "10512": "RBarr;", - "10513": "DDotrahd;", - "10514": "UpArrowBar;", - "10515": "DownArrowBar;", - "10518": "Rarrtl;", - "10521": "latail;", - "10522": "ratail;", - "10523": "lAtail;", - "10524": "rAtail;", - "10525": "larrfs;", - "10526": "rarrfs;", - "10527": "larrbfs;", - "10528": "rarrbfs;", - "10531": "nwarhk;", - "10532": "nearhk;", - "10533": "searhk;", - "10534": "swarhk;", - "10535": "nwnear;", - "10536": "toea;", - "10537": "tosa;", - "10538": "swnwar;", - "10547": "rarrc;", - "10549": "cudarrr;", - "10550": "ldca;", - "10551": "rdca;", - "10552": "cudarrl;", - "10553": "larrpl;", - "10556": "curarrm;", - "10557": "cularrp;", - "10565": "rarrpl;", - "10568": "harrcir;", - "10569": "Uarrocir;", - "10570": "lurdshar;", - "10571": "ldrushar;", - "10574": "LeftRightVector;", - "10575": "RightUpDownVector;", - "10576": "DownLeftRightVector;", - "10577": "LeftUpDownVector;", - "10578": "LeftVectorBar;", - "10579": "RightVectorBar;", - "10580": "RightUpVectorBar;", - "10581": "RightDownVectorBar;", - "10582": "DownLeftVectorBar;", - "10583": "DownRightVectorBar;", - "10584": "LeftUpVectorBar;", - "10585": "LeftDownVectorBar;", - "10586": "LeftTeeVector;", - "10587": "RightTeeVector;", - "10588": "RightUpTeeVector;", - "10589": "RightDownTeeVector;", - "10590": "DownLeftTeeVector;", - "10591": "DownRightTeeVector;", - "10592": "LeftUpTeeVector;", - "10593": "LeftDownTeeVector;", - "10594": "lHar;", - "10595": "uHar;", - "10596": "rHar;", - "10597": "dHar;", - "10598": "luruhar;", - "10599": "ldrdhar;", - "10600": "ruluhar;", - "10601": "rdldhar;", - "10602": "lharul;", - "10603": "llhard;", - "10604": "rharul;", - "10605": "lrhard;", - "10606": "UpEquilibrium;", - "10607": "ReverseUpEquilibrium;", - "10608": "RoundImplies;", - "10609": "erarr;", - "10610": "simrarr;", - "10611": "larrsim;", - "10612": "rarrsim;", - "10613": "rarrap;", - "10614": "ltlarr;", - "10616": "gtrarr;", - "10617": "subrarr;", - "10619": "suplarr;", - "10620": "lfisht;", - "10621": "rfisht;", - "10622": "ufisht;", - "10623": "dfisht;", - "10629": "lopar;", - "10630": "ropar;", - "10635": "lbrke;", - "10636": "rbrke;", - "10637": "lbrkslu;", - "10638": "rbrksld;", - "10639": "lbrksld;", - "10640": "rbrkslu;", - "10641": "langd;", - "10642": "rangd;", - "10643": "lparlt;", - "10644": "rpargt;", - "10645": "gtlPar;", - "10646": "ltrPar;", - "10650": "vzigzag;", - "10652": "vangrt;", - "10653": "angrtvbd;", - "10660": "ange;", - "10661": "range;", - "10662": "dwangle;", - "10663": "uwangle;", - "10664": "angmsdaa;", - "10665": "angmsdab;", - "10666": "angmsdac;", - "10667": "angmsdad;", - "10668": "angmsdae;", - "10669": "angmsdaf;", - "10670": "angmsdag;", - "10671": "angmsdah;", - "10672": "bemptyv;", - "10673": "demptyv;", - "10674": "cemptyv;", - "10675": "raemptyv;", - "10676": "laemptyv;", - "10677": "ohbar;", - "10678": "omid;", - "10679": "opar;", - "10681": "operp;", - "10683": "olcross;", - "10684": "odsold;", - "10686": "olcir;", - "10687": "ofcir;", - "10688": "olt;", - "10689": "ogt;", - "10690": "cirscir;", - "10691": "cirE;", - "10692": "solb;", - "10693": "bsolb;", - "10697": "boxbox;", - "10701": "trisb;", - "10702": "rtriltri;", - "10703": "LeftTriangleBar;", - "10704": "RightTriangleBar;", - "10716": "iinfin;", - "10717": "infintie;", - "10718": "nvinfin;", - "10723": "eparsl;", - "10724": "smeparsl;", - "10725": "eqvparsl;", - "10731": "lozf;", - "10740": "RuleDelayed;", - "10742": "dsol;", - "10752": "xodot;", - "10753": "xoplus;", - "10754": "xotime;", - "10756": "xuplus;", - "10758": "xsqcup;", - "10764": "qint;", - "10765": "fpartint;", - "10768": "cirfnint;", - "10769": "awint;", - "10770": "rppolint;", - "10771": "scpolint;", - "10772": "npolint;", - "10773": "pointint;", - "10774": "quatint;", - "10775": "intlarhk;", - "10786": "pluscir;", - "10787": "plusacir;", - "10788": "simplus;", - "10789": "plusdu;", - "10790": "plussim;", - "10791": "plustwo;", - "10793": "mcomma;", - "10794": "minusdu;", - "10797": "loplus;", - "10798": "roplus;", - "10799": "Cross;", - "10800": "timesd;", - "10801": "timesbar;", - "10803": "smashp;", - "10804": "lotimes;", - "10805": "rotimes;", - "10806": "otimesas;", - "10807": "Otimes;", - "10808": "odiv;", - "10809": "triplus;", - "10810": "triminus;", - "10811": "tritime;", - "10812": "iprod;", - "10815": "amalg;", - "10816": "capdot;", - "10818": "ncup;", - "10819": "ncap;", - "10820": "capand;", - "10821": "cupor;", - "10822": "cupcap;", - "10823": "capcup;", - "10824": "cupbrcap;", - "10825": "capbrcup;", - "10826": "cupcup;", - "10827": "capcap;", - "10828": "ccups;", - "10829": "ccaps;", - "10832": "ccupssm;", - "10835": "And;", - "10836": "Or;", - "10837": "andand;", - "10838": "oror;", - "10839": "orslope;", - "10840": "andslope;", - "10842": "andv;", - "10843": "orv;", - "10844": "andd;", - "10845": "ord;", - "10847": "wedbar;", - "10854": "sdote;", - "10858": "simdot;", - "10861": "congdot;", - "10862": "easter;", - "10863": "apacir;", - "10864": "apE;", - "10865": "eplus;", - "10866": "pluse;", - "10867": "Esim;", - "10868": "Colone;", - "10869": "Equal;", - "10871": "eDDot;", - "10872": "equivDD;", - "10873": "ltcir;", - "10874": "gtcir;", - "10875": "ltquest;", - "10876": "gtquest;", - "10877": "LessSlantEqual;", - "10878": "GreaterSlantEqual;", - "10879": "lesdot;", - "10880": "gesdot;", - "10881": "lesdoto;", - "10882": "gesdoto;", - "10883": "lesdotor;", - "10884": "gesdotol;", - "10885": "lessapprox;", - "10886": "gtrapprox;", - "10887": "lneq;", - "10888": "gneq;", - "10889": "lnapprox;", - "10890": "gnapprox;", - "10891": "lesseqqgtr;", - "10892": "gtreqqless;", - "10893": "lsime;", - "10894": "gsime;", - "10895": "lsimg;", - "10896": "gsiml;", - "10897": "lgE;", - "10898": "glE;", - "10899": "lesges;", - "10900": "gesles;", - "10901": "eqslantless;", - "10902": "eqslantgtr;", - "10903": "elsdot;", - "10904": "egsdot;", - "10905": "el;", - "10906": "eg;", - "10909": "siml;", - "10910": "simg;", - "10911": "simlE;", - "10912": "simgE;", - "10913": "LessLess;", - "10914": "GreaterGreater;", - "10916": "glj;", - "10917": "gla;", - "10918": "ltcc;", - "10919": "gtcc;", - "10920": "lescc;", - "10921": "gescc;", - "10922": "smt;", - "10923": "lat;", - "10924": "smte;", - "10925": "late;", - "10926": "bumpE;", - "10927": "preceq;", - "10928": "succeq;", - "10931": "prE;", - "10932": "scE;", - "10933": "prnE;", - "10934": "succneqq;", - "10935": "precapprox;", - "10936": "succapprox;", - "10937": "prnap;", - "10938": "succnapprox;", - "10939": "Pr;", - "10940": "Sc;", - "10941": "subdot;", - "10942": "supdot;", - "10943": "subplus;", - "10944": "supplus;", - "10945": "submult;", - "10946": "supmult;", - "10947": "subedot;", - "10948": "supedot;", - "10949": "subseteqq;", - "10950": "supseteqq;", - "10951": "subsim;", - "10952": "supsim;", - "10955": "subsetneqq;", - "10956": "supsetneqq;", - "10959": "csub;", - "10960": "csup;", - "10961": "csube;", - "10962": "csupe;", - "10963": "subsup;", - "10964": "supsub;", - "10965": "subsub;", - "10966": "supsup;", - "10967": "suphsub;", - "10968": "supdsub;", - "10969": "forkv;", - "10970": "topfork;", - "10971": "mlcp;", - "10980": "DoubleLeftTee;", - "10982": "Vdashl;", - "10983": "Barv;", - "10984": "vBar;", - "10985": "vBarv;", - "10987": "Vbar;", - "10988": "Not;", - "10989": "bNot;", - "10990": "rnmid;", - "10991": "cirmid;", - "10992": "midcir;", - "10993": "topcir;", - "10994": "nhpar;", - "10995": "parsim;", - "11005": "parsl;", - "64256": "fflig;", - "64257": "filig;", - "64258": "fllig;", - "64259": "ffilig;", - "64260": "ffllig;" -} \ No newline at end of file diff --git a/reverse_engineering/node_modules/ent/test/codes.js b/reverse_engineering/node_modules/ent/test/codes.js deleted file mode 100644 index d993400..0000000 --- a/reverse_engineering/node_modules/ent/test/codes.js +++ /dev/null @@ -1,101 +0,0 @@ -var test = require('tape'); -var punycode = require('punycode'); -var ent = require('../'); - -test('amp', function (t) { - var a = 'a & b & c'; - var b = 'a & b & c'; - t.equal(ent.encode(a), b); - t.equal(ent.decode(b), a); - t.end(); -}); - -test('html', function (t) { - var a = ' © π " \''; - var b = '<html> © π " ''; - t.equal(ent.encode(a), b); - t.equal(ent.decode(b), a); - t.end(); -}); - -test('html named', function (t) { - var a = ' © π " \' ∴ Β β'; - var b = '<html> © π " ' ∴ Β β'; - t.equal(ent.encode(a, { named: true }), b); - t.equal(ent.decode(b), a); - t.end(); -}); - -test('ambiguous ampersands', function (t) { - var a = '• &bullet'; - var b = '• &bullet'; - var c = '• &bullet'; - t.equal(ent.encode(a, { named: true }), c); - t.equal(ent.decode(b), a); - t.equal(ent.decode(c), a); - t.end(); -}); - -test('entities', function (t) { - var a = '\u2124'; - var b = 'ℤ'; - t.equal(ent.encode(a), b); - t.equal(ent.decode(b), a); - t.end(); -}); - -test('entities named', function (t) { - var a = '\u2124'; - var b = 'ℤ'; - t.equal(ent.encode(a, { named: true }), b); - t.equal(ent.decode(b), a); - t.end(); -}); - -test('num', function (t) { - var a = String.fromCharCode(1337); - var b = 'Թ'; - t.equal(ent.encode(a), b); - t.equal(ent.decode(b), a); - - t.equal(ent.encode(a + a), b + b); - t.equal(ent.decode(b + b), a + a); - t.end(); -}); - -test('astral num', function (t) { - var a = punycode.ucs2.encode([0x1d306]); - var b = '𝌆'; - t.equal(ent.encode(a), b); - t.equal(ent.decode(b), a); - - t.equal(ent.encode(a + a), b + b); - t.equal(ent.decode(b + b), a + a); - t.end(); -}); - -test('nested escapes', function (t) { - var a = '&'; - var b = '&amp;'; - t.equal(ent.encode(a), b); - t.equal(ent.decode(b), a); - - t.equal(ent.encode(a + a), b + b); - t.equal(ent.decode(b + b), a + a); - t.end(); -}); - -test('encode `special` option', function (t) { - var a = '<>\'"&'; - var b = '<>\'"&'; - t.equal(ent.encode(a, { - named: true, - special: { - '<': true, - '>': true, - '&': true - } - }), b); - - t.end(); -}); diff --git a/reverse_engineering/node_modules/ent/test/hex.js b/reverse_engineering/node_modules/ent/test/hex.js deleted file mode 100644 index bad2a9a..0000000 --- a/reverse_engineering/node_modules/ent/test/hex.js +++ /dev/null @@ -1,35 +0,0 @@ -var test = require('tape'); -var punycode = require('punycode'); -var ent = require('../'); - -test('hex', function (t) { - for (var i = 0; i < 32; i++) { - var a = String.fromCharCode(i); - if (a.match(/\s/)) { - t.equal(ent.decode(a), a); - } - else { - var b = '&#x' + i.toString(16) + ';'; - t.equal(ent.decode(b), a); - t.equal(ent.encode(a), '&#' + i + ';'); - } - } - - for (var i = 127; i < 2000; i++) { - var a = String.fromCharCode(i); - var b = '&#x' + i.toString(16) + ';'; - var c = '&#X' + i.toString(16) + ';'; - - t.equal(ent.decode(b), a); - t.equal(ent.decode(c), a); - - var encoded = ent.encode(a); - var encoded2 = ent.encode(a + a); - if (!encoded.match(/^&\w+;/)) { - t.equal(encoded, '&#' + i + ';'); - t.equal(encoded2, '&#' + i + ';&#' + i + ';'); - } - } - t.end(); -}); - diff --git a/reverse_engineering/node_modules/ent/test/num.js b/reverse_engineering/node_modules/ent/test/num.js deleted file mode 100644 index 399d28c..0000000 --- a/reverse_engineering/node_modules/ent/test/num.js +++ /dev/null @@ -1,13 +0,0 @@ -var test = require('tape'); -var ent = require('../'); - -test('opts.numeric', function (t) { - var a = 'a & b & c'; - var ax = 'a & b & c'; - var b = ' © π " \''; - var bx = '<html> © π " ''; - - t.equal(ent.encode(a), ax); - t.equal(ent.encode(b), bx); - t.end(); -}); diff --git a/reverse_engineering/node_modules/event-target-shim/LICENSE b/reverse_engineering/node_modules/event-target-shim/LICENSE deleted file mode 100644 index c39e694..0000000 --- a/reverse_engineering/node_modules/event-target-shim/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Toru Nagashima - -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/reverse_engineering/node_modules/event-target-shim/README.md b/reverse_engineering/node_modules/event-target-shim/README.md deleted file mode 100644 index a4f9c1b..0000000 --- a/reverse_engineering/node_modules/event-target-shim/README.md +++ /dev/null @@ -1,293 +0,0 @@ -# event-target-shim - -[![npm version](https://img.shields.io/npm/v/event-target-shim.svg)](https://www.npmjs.com/package/event-target-shim) -[![Downloads/month](https://img.shields.io/npm/dm/event-target-shim.svg)](http://www.npmtrends.com/event-target-shim) -[![Build Status](https://travis-ci.org/mysticatea/event-target-shim.svg?branch=master)](https://travis-ci.org/mysticatea/event-target-shim) -[![Coverage Status](https://codecov.io/gh/mysticatea/event-target-shim/branch/master/graph/badge.svg)](https://codecov.io/gh/mysticatea/event-target-shim) -[![Dependency Status](https://david-dm.org/mysticatea/event-target-shim.svg)](https://david-dm.org/mysticatea/event-target-shim) - -An implementation of [WHATWG EventTarget interface](https://dom.spec.whatwg.org/#interface-eventtarget), plus few extensions. - -- This provides `EventTarget` constructor that can inherit for your custom object. -- This provides an utility that defines properties of attribute listeners (e.g. `obj.onclick`). - -```js -import {EventTarget, defineEventAttribute} from "event-target-shim" - -class Foo extends EventTarget { - // ... -} - -// Define `foo.onhello` property. -defineEventAttribute(Foo.prototype, "hello") - -// Use -const foo = new Foo() -foo.addEventListener("hello", e => console.log("hello", e)) -foo.onhello = e => console.log("onhello:", e) -foo.dispatchEvent(new CustomEvent("hello")) -``` - -## 💿 Installation - -Use [npm](https://www.npmjs.com/) to install then use a bundler. - -``` -npm install event-target-shim -``` - -Or download from [`dist` directory](./dist). - -- [dist/event-target-shim.mjs](dist/event-target-shim.mjs) ... ES modules version. -- [dist/event-target-shim.js](dist/event-target-shim.js) ... Common JS version. -- [dist/event-target-shim.umd.js](dist/event-target-shim.umd.js) ... UMD (Universal Module Definition) version. This is transpiled by [Babel](https://babeljs.io/) for IE 11. - -## 📖 Usage - -```js -import {EventTarget, defineEventAttribute} from "event-target-shim" -// or -const {EventTarget, defineEventAttribute} = require("event-target-shim") - -// or UMD version defines a global variable: -const {EventTarget, defineEventAttribute} = window.EventTargetShim -``` - -### EventTarget - -> https://dom.spec.whatwg.org/#interface-eventtarget - -#### eventTarget.addEventListener(type, callback, options) - -Register an event listener. - -- `type` is a string. This is the event name to register. -- `callback` is a function. This is the event listener to register. -- `options` is a boolean or an object `{ capture?: boolean, passive?: boolean, once?: boolean }`. If this is a boolean, it's same meaning as `{ capture: options }`. - - `capture` is the flag to register the event listener for capture phase. - - `passive` is the flag to ignore `event.preventDefault()` method in the event listener. - - `once` is the flag to remove the event listener automatically after the first call. - -#### eventTarget.removeEventListener(type, callback, options) - -Unregister an event listener. - -- `type` is a string. This is the event name to unregister. -- `callback` is a function. This is the event listener to unregister. -- `options` is a boolean or an object `{ capture?: boolean }`. If this is a boolean, it's same meaning as `{ capture: options }`. - - `capture` is the flag to register the event listener for capture phase. - -#### eventTarget.dispatchEvent(event) - -Dispatch an event. - -- `event` is a [Event](https://dom.spec.whatwg.org/#event) object or an object `{ type: string, [key: string]: any }`. The latter is non-standard but useful. In both cases, listeners receive the event as implementing [Event](https://dom.spec.whatwg.org/#event) interface. - -### defineEventAttribute(proto, type) - -Define an event attribute (e.g. `onclick`) to `proto`. This is non-standard. - -- `proto` is an object (assuming it's a prototype object). This function defines a getter/setter pair for the event attribute. -- `type` is a string. This is the event name to define. - -For example: - -```js -class AbortSignal extends EventTarget { - constructor() { - this.aborted = false - } -} -// Define `onabort` property. -defineEventAttribute(AbortSignal.prototype, "abort") -``` - -### EventTarget(types) - -Define a custom `EventTarget` class with event attributes. This is non-standard. - -- `types` is a string or an array of strings. This is the event name to define. - -For example: - -```js -// This has `onabort` property. -class AbortSignal extends EventTarget("abort") { - constructor() { - this.aborted = false - } -} -``` - -## 📚 Examples - -### ES2015 and later - -> https://jsfiddle.net/636vea92/ - -```js -const {EventTarget, defineEventAttribute} = EventTargetShim - -// Define a derived class. -class Foo extends EventTarget { - // ... -} - -// Define `foo.onhello` property. -defineEventAttribute(Foo.prototype, "hello") - -// Register event listeners. -const foo = new Foo() -foo.addEventListener("hello", (e) => { - console.log("hello", e) -}) -foo.onhello = (e) => { - console.log("onhello", e) -} - -// Dispatching events -foo.dispatchEvent(new CustomEvent("hello", { detail: "detail" })) -``` - -### Typescript - -```ts -import { EventTarget, defineEventAttribute } from "event-target-shim"; - -// Define events -type FooEvents = { - hello: CustomEvent -} -type FooEventAttributes = { - onhello: CustomEvent -} - -// Define a derived class. -class Foo extends EventTarget { - // ... -} -// Define `foo.onhello` property's implementation. -defineEventAttribute(Foo.prototype, "hello") - -// Register event listeners. -const foo = new Foo() -foo.addEventListener("hello", (e) => { - console.log("hello", e.detail) -}) -foo.onhello = (e) => { - console.log("onhello", e.detail) -} - -// Dispatching events -foo.dispatchEvent(new CustomEvent("hello", { detail: "detail" })) -``` - -Unfortunately, both `FooEvents` and `FooEventAttributes` are needed because TypeScript doesn't allow the mutation of string literal types. If TypeScript allowed us to compute `"onhello"` from `"hello"` in types, `FooEventAttributes` will be optional. - -This `EventTarget` type is compatible with `EventTarget` interface of `lib.dom.d.ts`. - -#### To disallow unknown events - -By default, methods such as `addEventListener` accept unknown events. You can disallow unknown events by the third type parameter `"strict"`. - -```ts -type FooEvents = { - hello: CustomEvent -} -class Foo extends EventTarget { - // ... -} - -// OK because `hello` is defined in FooEvents. -foo.addEventListener("hello", (e) => { -}) -// Error because `unknown` is not defined in FooEvents. -foo.addEventListener("unknown", (e) => { -}) -``` - -However, if you use `"strict"` parameter, it loses compatibility with `EventTarget` interface of `lib.dom.d.ts`. - -#### To infer the type of `dispatchEvent()` method - -TypeScript cannot infer the event type of `dispatchEvent()` method properly from the argument in most cases. You can improve this behavior with the following steps: - -1. Use the third type parameter `"strict"`. This prevents inferring to `dispatchEvent()`. -2. Make the `type` property of event definitions stricter. - -```ts -type FooEvents = { - hello: CustomEvent & { type: "hello" } - hey: Event & { type: "hey" } -} -class Foo extends EventTarget { - // ... -} - -// Error because `detail` property is lacking. -foo.dispatchEvent({ type: "hello" }) -``` - -### ES5 - -> https://jsfiddle.net/522zc9de/ - -```js -// Define a derived class. -function Foo() { - EventTarget.call(this) -} -Foo.prototype = Object.create(EventTarget.prototype, { - constructor: { value: Foo, configurable: true, writable: true } - // ... -}) - -// Define `foo.onhello` property. -defineEventAttribute(Foo.prototype, "hello") - -// Register event listeners. -var foo = new Foo() -foo.addEventListener("hello", function(e) { - console.log("hello", e) -}) -foo.onhello = function(e) { - console.log("onhello", e) -} - -// Dispatching events -function isSupportEventConstrucor() { // IE does not support. - try { - new CusomEvent("hello") - return true - } catch (_err) { - return false - } -} -if (isSupportEventConstrucor()) { - foo.dispatchEvent(new CustomEvent("hello", { detail: "detail" })) -} else { - var e = document.createEvent("CustomEvent") - e.initCustomEvent("hello", false, false, "detail") - foo.dispatchEvent(e) -} -``` - -## 📰 Changelog - -- See [GitHub releases](https://github.com/mysticatea/event-target-shim/releases). - -## 🍻 Contributing - -Contributing is welcome ❤️ - -Please use GitHub issues/PRs. - -### Development tools - -- `npm install` installs dependencies for development. -- `npm test` runs tests and measures code coverage. -- `npm run clean` removes temporary files of tests. -- `npm run coverage` opens code coverage of the previous test with your default browser. -- `npm run lint` runs ESLint. -- `npm run build` generates `dist` codes. -- `npm run watch` runs tests on each file change. diff --git a/reverse_engineering/node_modules/event-target-shim/dist/event-target-shim.js b/reverse_engineering/node_modules/event-target-shim/dist/event-target-shim.js deleted file mode 100644 index 53ce220..0000000 --- a/reverse_engineering/node_modules/event-target-shim/dist/event-target-shim.js +++ /dev/null @@ -1,871 +0,0 @@ -/** - * @author Toru Nagashima - * @copyright 2015 Toru Nagashima. All rights reserved. - * See LICENSE file in root directory for full license. - */ -'use strict'; - -Object.defineProperty(exports, '__esModule', { value: true }); - -/** - * @typedef {object} PrivateData - * @property {EventTarget} eventTarget The event target. - * @property {{type:string}} event The original event object. - * @property {number} eventPhase The current event phase. - * @property {EventTarget|null} currentTarget The current event target. - * @property {boolean} canceled The flag to prevent default. - * @property {boolean} stopped The flag to stop propagation. - * @property {boolean} immediateStopped The flag to stop propagation immediately. - * @property {Function|null} passiveListener The listener if the current listener is passive. Otherwise this is null. - * @property {number} timeStamp The unix time. - * @private - */ - -/** - * Private data for event wrappers. - * @type {WeakMap} - * @private - */ -const privateData = new WeakMap(); - -/** - * Cache for wrapper classes. - * @type {WeakMap} - * @private - */ -const wrappers = new WeakMap(); - -/** - * Get private data. - * @param {Event} event The event object to get private data. - * @returns {PrivateData} The private data of the event. - * @private - */ -function pd(event) { - const retv = privateData.get(event); - console.assert( - retv != null, - "'this' is expected an Event object, but got", - event - ); - return retv -} - -/** - * https://dom.spec.whatwg.org/#set-the-canceled-flag - * @param data {PrivateData} private data. - */ -function setCancelFlag(data) { - if (data.passiveListener != null) { - if ( - typeof console !== "undefined" && - typeof console.error === "function" - ) { - console.error( - "Unable to preventDefault inside passive event listener invocation.", - data.passiveListener - ); - } - return - } - if (!data.event.cancelable) { - return - } - - data.canceled = true; - if (typeof data.event.preventDefault === "function") { - data.event.preventDefault(); - } -} - -/** - * @see https://dom.spec.whatwg.org/#interface-event - * @private - */ -/** - * The event wrapper. - * @constructor - * @param {EventTarget} eventTarget The event target of this dispatching. - * @param {Event|{type:string}} event The original event to wrap. - */ -function Event(eventTarget, event) { - privateData.set(this, { - eventTarget, - event, - eventPhase: 2, - currentTarget: eventTarget, - canceled: false, - stopped: false, - immediateStopped: false, - passiveListener: null, - timeStamp: event.timeStamp || Date.now(), - }); - - // https://heycam.github.io/webidl/#Unforgeable - Object.defineProperty(this, "isTrusted", { value: false, enumerable: true }); - - // Define accessors - const keys = Object.keys(event); - for (let i = 0; i < keys.length; ++i) { - const key = keys[i]; - if (!(key in this)) { - Object.defineProperty(this, key, defineRedirectDescriptor(key)); - } - } -} - -// Should be enumerable, but class methods are not enumerable. -Event.prototype = { - /** - * The type of this event. - * @type {string} - */ - get type() { - return pd(this).event.type - }, - - /** - * The target of this event. - * @type {EventTarget} - */ - get target() { - return pd(this).eventTarget - }, - - /** - * The target of this event. - * @type {EventTarget} - */ - get currentTarget() { - return pd(this).currentTarget - }, - - /** - * @returns {EventTarget[]} The composed path of this event. - */ - composedPath() { - const currentTarget = pd(this).currentTarget; - if (currentTarget == null) { - return [] - } - return [currentTarget] - }, - - /** - * Constant of NONE. - * @type {number} - */ - get NONE() { - return 0 - }, - - /** - * Constant of CAPTURING_PHASE. - * @type {number} - */ - get CAPTURING_PHASE() { - return 1 - }, - - /** - * Constant of AT_TARGET. - * @type {number} - */ - get AT_TARGET() { - return 2 - }, - - /** - * Constant of BUBBLING_PHASE. - * @type {number} - */ - get BUBBLING_PHASE() { - return 3 - }, - - /** - * The target of this event. - * @type {number} - */ - get eventPhase() { - return pd(this).eventPhase - }, - - /** - * Stop event bubbling. - * @returns {void} - */ - stopPropagation() { - const data = pd(this); - - data.stopped = true; - if (typeof data.event.stopPropagation === "function") { - data.event.stopPropagation(); - } - }, - - /** - * Stop event bubbling. - * @returns {void} - */ - stopImmediatePropagation() { - const data = pd(this); - - data.stopped = true; - data.immediateStopped = true; - if (typeof data.event.stopImmediatePropagation === "function") { - data.event.stopImmediatePropagation(); - } - }, - - /** - * The flag to be bubbling. - * @type {boolean} - */ - get bubbles() { - return Boolean(pd(this).event.bubbles) - }, - - /** - * The flag to be cancelable. - * @type {boolean} - */ - get cancelable() { - return Boolean(pd(this).event.cancelable) - }, - - /** - * Cancel this event. - * @returns {void} - */ - preventDefault() { - setCancelFlag(pd(this)); - }, - - /** - * The flag to indicate cancellation state. - * @type {boolean} - */ - get defaultPrevented() { - return pd(this).canceled - }, - - /** - * The flag to be composed. - * @type {boolean} - */ - get composed() { - return Boolean(pd(this).event.composed) - }, - - /** - * The unix time of this event. - * @type {number} - */ - get timeStamp() { - return pd(this).timeStamp - }, - - /** - * The target of this event. - * @type {EventTarget} - * @deprecated - */ - get srcElement() { - return pd(this).eventTarget - }, - - /** - * The flag to stop event bubbling. - * @type {boolean} - * @deprecated - */ - get cancelBubble() { - return pd(this).stopped - }, - set cancelBubble(value) { - if (!value) { - return - } - const data = pd(this); - - data.stopped = true; - if (typeof data.event.cancelBubble === "boolean") { - data.event.cancelBubble = true; - } - }, - - /** - * The flag to indicate cancellation state. - * @type {boolean} - * @deprecated - */ - get returnValue() { - return !pd(this).canceled - }, - set returnValue(value) { - if (!value) { - setCancelFlag(pd(this)); - } - }, - - /** - * Initialize this event object. But do nothing under event dispatching. - * @param {string} type The event type. - * @param {boolean} [bubbles=false] The flag to be possible to bubble up. - * @param {boolean} [cancelable=false] The flag to be possible to cancel. - * @deprecated - */ - initEvent() { - // Do nothing. - }, -}; - -// `constructor` is not enumerable. -Object.defineProperty(Event.prototype, "constructor", { - value: Event, - configurable: true, - writable: true, -}); - -// Ensure `event instanceof window.Event` is `true`. -if (typeof window !== "undefined" && typeof window.Event !== "undefined") { - Object.setPrototypeOf(Event.prototype, window.Event.prototype); - - // Make association for wrappers. - wrappers.set(window.Event.prototype, Event); -} - -/** - * Get the property descriptor to redirect a given property. - * @param {string} key Property name to define property descriptor. - * @returns {PropertyDescriptor} The property descriptor to redirect the property. - * @private - */ -function defineRedirectDescriptor(key) { - return { - get() { - return pd(this).event[key] - }, - set(value) { - pd(this).event[key] = value; - }, - configurable: true, - enumerable: true, - } -} - -/** - * Get the property descriptor to call a given method property. - * @param {string} key Property name to define property descriptor. - * @returns {PropertyDescriptor} The property descriptor to call the method property. - * @private - */ -function defineCallDescriptor(key) { - return { - value() { - const event = pd(this).event; - return event[key].apply(event, arguments) - }, - configurable: true, - enumerable: true, - } -} - -/** - * Define new wrapper class. - * @param {Function} BaseEvent The base wrapper class. - * @param {Object} proto The prototype of the original event. - * @returns {Function} The defined wrapper class. - * @private - */ -function defineWrapper(BaseEvent, proto) { - const keys = Object.keys(proto); - if (keys.length === 0) { - return BaseEvent - } - - /** CustomEvent */ - function CustomEvent(eventTarget, event) { - BaseEvent.call(this, eventTarget, event); - } - - CustomEvent.prototype = Object.create(BaseEvent.prototype, { - constructor: { value: CustomEvent, configurable: true, writable: true }, - }); - - // Define accessors. - for (let i = 0; i < keys.length; ++i) { - const key = keys[i]; - if (!(key in BaseEvent.prototype)) { - const descriptor = Object.getOwnPropertyDescriptor(proto, key); - const isFunc = typeof descriptor.value === "function"; - Object.defineProperty( - CustomEvent.prototype, - key, - isFunc - ? defineCallDescriptor(key) - : defineRedirectDescriptor(key) - ); - } - } - - return CustomEvent -} - -/** - * Get the wrapper class of a given prototype. - * @param {Object} proto The prototype of the original event to get its wrapper. - * @returns {Function} The wrapper class. - * @private - */ -function getWrapper(proto) { - if (proto == null || proto === Object.prototype) { - return Event - } - - let wrapper = wrappers.get(proto); - if (wrapper == null) { - wrapper = defineWrapper(getWrapper(Object.getPrototypeOf(proto)), proto); - wrappers.set(proto, wrapper); - } - return wrapper -} - -/** - * Wrap a given event to management a dispatching. - * @param {EventTarget} eventTarget The event target of this dispatching. - * @param {Object} event The event to wrap. - * @returns {Event} The wrapper instance. - * @private - */ -function wrapEvent(eventTarget, event) { - const Wrapper = getWrapper(Object.getPrototypeOf(event)); - return new Wrapper(eventTarget, event) -} - -/** - * Get the immediateStopped flag of a given event. - * @param {Event} event The event to get. - * @returns {boolean} The flag to stop propagation immediately. - * @private - */ -function isStopped(event) { - return pd(event).immediateStopped -} - -/** - * Set the current event phase of a given event. - * @param {Event} event The event to set current target. - * @param {number} eventPhase New event phase. - * @returns {void} - * @private - */ -function setEventPhase(event, eventPhase) { - pd(event).eventPhase = eventPhase; -} - -/** - * Set the current target of a given event. - * @param {Event} event The event to set current target. - * @param {EventTarget|null} currentTarget New current target. - * @returns {void} - * @private - */ -function setCurrentTarget(event, currentTarget) { - pd(event).currentTarget = currentTarget; -} - -/** - * Set a passive listener of a given event. - * @param {Event} event The event to set current target. - * @param {Function|null} passiveListener New passive listener. - * @returns {void} - * @private - */ -function setPassiveListener(event, passiveListener) { - pd(event).passiveListener = passiveListener; -} - -/** - * @typedef {object} ListenerNode - * @property {Function} listener - * @property {1|2|3} listenerType - * @property {boolean} passive - * @property {boolean} once - * @property {ListenerNode|null} next - * @private - */ - -/** - * @type {WeakMap>} - * @private - */ -const listenersMap = new WeakMap(); - -// Listener types -const CAPTURE = 1; -const BUBBLE = 2; -const ATTRIBUTE = 3; - -/** - * Check whether a given value is an object or not. - * @param {any} x The value to check. - * @returns {boolean} `true` if the value is an object. - */ -function isObject(x) { - return x !== null && typeof x === "object" //eslint-disable-line no-restricted-syntax -} - -/** - * Get listeners. - * @param {EventTarget} eventTarget The event target to get. - * @returns {Map} The listeners. - * @private - */ -function getListeners(eventTarget) { - const listeners = listenersMap.get(eventTarget); - if (listeners == null) { - throw new TypeError( - "'this' is expected an EventTarget object, but got another value." - ) - } - return listeners -} - -/** - * Get the property descriptor for the event attribute of a given event. - * @param {string} eventName The event name to get property descriptor. - * @returns {PropertyDescriptor} The property descriptor. - * @private - */ -function defineEventAttributeDescriptor(eventName) { - return { - get() { - const listeners = getListeners(this); - let node = listeners.get(eventName); - while (node != null) { - if (node.listenerType === ATTRIBUTE) { - return node.listener - } - node = node.next; - } - return null - }, - - set(listener) { - if (typeof listener !== "function" && !isObject(listener)) { - listener = null; // eslint-disable-line no-param-reassign - } - const listeners = getListeners(this); - - // Traverse to the tail while removing old value. - let prev = null; - let node = listeners.get(eventName); - while (node != null) { - if (node.listenerType === ATTRIBUTE) { - // Remove old value. - if (prev !== null) { - prev.next = node.next; - } else if (node.next !== null) { - listeners.set(eventName, node.next); - } else { - listeners.delete(eventName); - } - } else { - prev = node; - } - - node = node.next; - } - - // Add new value. - if (listener !== null) { - const newNode = { - listener, - listenerType: ATTRIBUTE, - passive: false, - once: false, - next: null, - }; - if (prev === null) { - listeners.set(eventName, newNode); - } else { - prev.next = newNode; - } - } - }, - configurable: true, - enumerable: true, - } -} - -/** - * Define an event attribute (e.g. `eventTarget.onclick`). - * @param {Object} eventTargetPrototype The event target prototype to define an event attrbite. - * @param {string} eventName The event name to define. - * @returns {void} - */ -function defineEventAttribute(eventTargetPrototype, eventName) { - Object.defineProperty( - eventTargetPrototype, - `on${eventName}`, - defineEventAttributeDescriptor(eventName) - ); -} - -/** - * Define a custom EventTarget with event attributes. - * @param {string[]} eventNames Event names for event attributes. - * @returns {EventTarget} The custom EventTarget. - * @private - */ -function defineCustomEventTarget(eventNames) { - /** CustomEventTarget */ - function CustomEventTarget() { - EventTarget.call(this); - } - - CustomEventTarget.prototype = Object.create(EventTarget.prototype, { - constructor: { - value: CustomEventTarget, - configurable: true, - writable: true, - }, - }); - - for (let i = 0; i < eventNames.length; ++i) { - defineEventAttribute(CustomEventTarget.prototype, eventNames[i]); - } - - return CustomEventTarget -} - -/** - * EventTarget. - * - * - This is constructor if no arguments. - * - This is a function which returns a CustomEventTarget constructor if there are arguments. - * - * For example: - * - * class A extends EventTarget {} - * class B extends EventTarget("message") {} - * class C extends EventTarget("message", "error") {} - * class D extends EventTarget(["message", "error"]) {} - */ -function EventTarget() { - /*eslint-disable consistent-return */ - if (this instanceof EventTarget) { - listenersMap.set(this, new Map()); - return - } - if (arguments.length === 1 && Array.isArray(arguments[0])) { - return defineCustomEventTarget(arguments[0]) - } - if (arguments.length > 0) { - const types = new Array(arguments.length); - for (let i = 0; i < arguments.length; ++i) { - types[i] = arguments[i]; - } - return defineCustomEventTarget(types) - } - throw new TypeError("Cannot call a class as a function") - /*eslint-enable consistent-return */ -} - -// Should be enumerable, but class methods are not enumerable. -EventTarget.prototype = { - /** - * Add a given listener to this event target. - * @param {string} eventName The event name to add. - * @param {Function} listener The listener to add. - * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener. - * @returns {void} - */ - addEventListener(eventName, listener, options) { - if (listener == null) { - return - } - if (typeof listener !== "function" && !isObject(listener)) { - throw new TypeError("'listener' should be a function or an object.") - } - - const listeners = getListeners(this); - const optionsIsObj = isObject(options); - const capture = optionsIsObj - ? Boolean(options.capture) - : Boolean(options); - const listenerType = capture ? CAPTURE : BUBBLE; - const newNode = { - listener, - listenerType, - passive: optionsIsObj && Boolean(options.passive), - once: optionsIsObj && Boolean(options.once), - next: null, - }; - - // Set it as the first node if the first node is null. - let node = listeners.get(eventName); - if (node === undefined) { - listeners.set(eventName, newNode); - return - } - - // Traverse to the tail while checking duplication.. - let prev = null; - while (node != null) { - if ( - node.listener === listener && - node.listenerType === listenerType - ) { - // Should ignore duplication. - return - } - prev = node; - node = node.next; - } - - // Add it. - prev.next = newNode; - }, - - /** - * Remove a given listener from this event target. - * @param {string} eventName The event name to remove. - * @param {Function} listener The listener to remove. - * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener. - * @returns {void} - */ - removeEventListener(eventName, listener, options) { - if (listener == null) { - return - } - - const listeners = getListeners(this); - const capture = isObject(options) - ? Boolean(options.capture) - : Boolean(options); - const listenerType = capture ? CAPTURE : BUBBLE; - - let prev = null; - let node = listeners.get(eventName); - while (node != null) { - if ( - node.listener === listener && - node.listenerType === listenerType - ) { - if (prev !== null) { - prev.next = node.next; - } else if (node.next !== null) { - listeners.set(eventName, node.next); - } else { - listeners.delete(eventName); - } - return - } - - prev = node; - node = node.next; - } - }, - - /** - * Dispatch a given event. - * @param {Event|{type:string}} event The event to dispatch. - * @returns {boolean} `false` if canceled. - */ - dispatchEvent(event) { - if (event == null || typeof event.type !== "string") { - throw new TypeError('"event.type" should be a string.') - } - - // If listeners aren't registered, terminate. - const listeners = getListeners(this); - const eventName = event.type; - let node = listeners.get(eventName); - if (node == null) { - return true - } - - // Since we cannot rewrite several properties, so wrap object. - const wrappedEvent = wrapEvent(this, event); - - // This doesn't process capturing phase and bubbling phase. - // This isn't participating in a tree. - let prev = null; - while (node != null) { - // Remove this listener if it's once - if (node.once) { - if (prev !== null) { - prev.next = node.next; - } else if (node.next !== null) { - listeners.set(eventName, node.next); - } else { - listeners.delete(eventName); - } - } else { - prev = node; - } - - // Call this listener - setPassiveListener( - wrappedEvent, - node.passive ? node.listener : null - ); - if (typeof node.listener === "function") { - try { - node.listener.call(this, wrappedEvent); - } catch (err) { - if ( - typeof console !== "undefined" && - typeof console.error === "function" - ) { - console.error(err); - } - } - } else if ( - node.listenerType !== ATTRIBUTE && - typeof node.listener.handleEvent === "function" - ) { - node.listener.handleEvent(wrappedEvent); - } - - // Break if `event.stopImmediatePropagation` was called. - if (isStopped(wrappedEvent)) { - break - } - - node = node.next; - } - setPassiveListener(wrappedEvent, null); - setEventPhase(wrappedEvent, 0); - setCurrentTarget(wrappedEvent, null); - - return !wrappedEvent.defaultPrevented - }, -}; - -// `constructor` is not enumerable. -Object.defineProperty(EventTarget.prototype, "constructor", { - value: EventTarget, - configurable: true, - writable: true, -}); - -// Ensure `eventTarget instanceof window.EventTarget` is `true`. -if ( - typeof window !== "undefined" && - typeof window.EventTarget !== "undefined" -) { - Object.setPrototypeOf(EventTarget.prototype, window.EventTarget.prototype); -} - -exports.defineEventAttribute = defineEventAttribute; -exports.EventTarget = EventTarget; -exports.default = EventTarget; - -module.exports = EventTarget -module.exports.EventTarget = module.exports["default"] = EventTarget -module.exports.defineEventAttribute = defineEventAttribute -//# sourceMappingURL=event-target-shim.js.map diff --git a/reverse_engineering/node_modules/event-target-shim/dist/event-target-shim.js.map b/reverse_engineering/node_modules/event-target-shim/dist/event-target-shim.js.map deleted file mode 100644 index 83c5f62..0000000 --- a/reverse_engineering/node_modules/event-target-shim/dist/event-target-shim.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"event-target-shim.js","sources":["../src/event.mjs","../src/event-target.mjs"],"sourcesContent":["/**\n * @typedef {object} PrivateData\n * @property {EventTarget} eventTarget The event target.\n * @property {{type:string}} event The original event object.\n * @property {number} eventPhase The current event phase.\n * @property {EventTarget|null} currentTarget The current event target.\n * @property {boolean} canceled The flag to prevent default.\n * @property {boolean} stopped The flag to stop propagation.\n * @property {boolean} immediateStopped The flag to stop propagation immediately.\n * @property {Function|null} passiveListener The listener if the current listener is passive. Otherwise this is null.\n * @property {number} timeStamp The unix time.\n * @private\n */\n\n/**\n * Private data for event wrappers.\n * @type {WeakMap}\n * @private\n */\nconst privateData = new WeakMap()\n\n/**\n * Cache for wrapper classes.\n * @type {WeakMap}\n * @private\n */\nconst wrappers = new WeakMap()\n\n/**\n * Get private data.\n * @param {Event} event The event object to get private data.\n * @returns {PrivateData} The private data of the event.\n * @private\n */\nfunction pd(event) {\n const retv = privateData.get(event)\n console.assert(\n retv != null,\n \"'this' is expected an Event object, but got\",\n event\n )\n return retv\n}\n\n/**\n * https://dom.spec.whatwg.org/#set-the-canceled-flag\n * @param data {PrivateData} private data.\n */\nfunction setCancelFlag(data) {\n if (data.passiveListener != null) {\n if (\n typeof console !== \"undefined\" &&\n typeof console.error === \"function\"\n ) {\n console.error(\n \"Unable to preventDefault inside passive event listener invocation.\",\n data.passiveListener\n )\n }\n return\n }\n if (!data.event.cancelable) {\n return\n }\n\n data.canceled = true\n if (typeof data.event.preventDefault === \"function\") {\n data.event.preventDefault()\n }\n}\n\n/**\n * @see https://dom.spec.whatwg.org/#interface-event\n * @private\n */\n/**\n * The event wrapper.\n * @constructor\n * @param {EventTarget} eventTarget The event target of this dispatching.\n * @param {Event|{type:string}} event The original event to wrap.\n */\nfunction Event(eventTarget, event) {\n privateData.set(this, {\n eventTarget,\n event,\n eventPhase: 2,\n currentTarget: eventTarget,\n canceled: false,\n stopped: false,\n immediateStopped: false,\n passiveListener: null,\n timeStamp: event.timeStamp || Date.now(),\n })\n\n // https://heycam.github.io/webidl/#Unforgeable\n Object.defineProperty(this, \"isTrusted\", { value: false, enumerable: true })\n\n // Define accessors\n const keys = Object.keys(event)\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i]\n if (!(key in this)) {\n Object.defineProperty(this, key, defineRedirectDescriptor(key))\n }\n }\n}\n\n// Should be enumerable, but class methods are not enumerable.\nEvent.prototype = {\n /**\n * The type of this event.\n * @type {string}\n */\n get type() {\n return pd(this).event.type\n },\n\n /**\n * The target of this event.\n * @type {EventTarget}\n */\n get target() {\n return pd(this).eventTarget\n },\n\n /**\n * The target of this event.\n * @type {EventTarget}\n */\n get currentTarget() {\n return pd(this).currentTarget\n },\n\n /**\n * @returns {EventTarget[]} The composed path of this event.\n */\n composedPath() {\n const currentTarget = pd(this).currentTarget\n if (currentTarget == null) {\n return []\n }\n return [currentTarget]\n },\n\n /**\n * Constant of NONE.\n * @type {number}\n */\n get NONE() {\n return 0\n },\n\n /**\n * Constant of CAPTURING_PHASE.\n * @type {number}\n */\n get CAPTURING_PHASE() {\n return 1\n },\n\n /**\n * Constant of AT_TARGET.\n * @type {number}\n */\n get AT_TARGET() {\n return 2\n },\n\n /**\n * Constant of BUBBLING_PHASE.\n * @type {number}\n */\n get BUBBLING_PHASE() {\n return 3\n },\n\n /**\n * The target of this event.\n * @type {number}\n */\n get eventPhase() {\n return pd(this).eventPhase\n },\n\n /**\n * Stop event bubbling.\n * @returns {void}\n */\n stopPropagation() {\n const data = pd(this)\n\n data.stopped = true\n if (typeof data.event.stopPropagation === \"function\") {\n data.event.stopPropagation()\n }\n },\n\n /**\n * Stop event bubbling.\n * @returns {void}\n */\n stopImmediatePropagation() {\n const data = pd(this)\n\n data.stopped = true\n data.immediateStopped = true\n if (typeof data.event.stopImmediatePropagation === \"function\") {\n data.event.stopImmediatePropagation()\n }\n },\n\n /**\n * The flag to be bubbling.\n * @type {boolean}\n */\n get bubbles() {\n return Boolean(pd(this).event.bubbles)\n },\n\n /**\n * The flag to be cancelable.\n * @type {boolean}\n */\n get cancelable() {\n return Boolean(pd(this).event.cancelable)\n },\n\n /**\n * Cancel this event.\n * @returns {void}\n */\n preventDefault() {\n setCancelFlag(pd(this))\n },\n\n /**\n * The flag to indicate cancellation state.\n * @type {boolean}\n */\n get defaultPrevented() {\n return pd(this).canceled\n },\n\n /**\n * The flag to be composed.\n * @type {boolean}\n */\n get composed() {\n return Boolean(pd(this).event.composed)\n },\n\n /**\n * The unix time of this event.\n * @type {number}\n */\n get timeStamp() {\n return pd(this).timeStamp\n },\n\n /**\n * The target of this event.\n * @type {EventTarget}\n * @deprecated\n */\n get srcElement() {\n return pd(this).eventTarget\n },\n\n /**\n * The flag to stop event bubbling.\n * @type {boolean}\n * @deprecated\n */\n get cancelBubble() {\n return pd(this).stopped\n },\n set cancelBubble(value) {\n if (!value) {\n return\n }\n const data = pd(this)\n\n data.stopped = true\n if (typeof data.event.cancelBubble === \"boolean\") {\n data.event.cancelBubble = true\n }\n },\n\n /**\n * The flag to indicate cancellation state.\n * @type {boolean}\n * @deprecated\n */\n get returnValue() {\n return !pd(this).canceled\n },\n set returnValue(value) {\n if (!value) {\n setCancelFlag(pd(this))\n }\n },\n\n /**\n * Initialize this event object. But do nothing under event dispatching.\n * @param {string} type The event type.\n * @param {boolean} [bubbles=false] The flag to be possible to bubble up.\n * @param {boolean} [cancelable=false] The flag to be possible to cancel.\n * @deprecated\n */\n initEvent() {\n // Do nothing.\n },\n}\n\n// `constructor` is not enumerable.\nObject.defineProperty(Event.prototype, \"constructor\", {\n value: Event,\n configurable: true,\n writable: true,\n})\n\n// Ensure `event instanceof window.Event` is `true`.\nif (typeof window !== \"undefined\" && typeof window.Event !== \"undefined\") {\n Object.setPrototypeOf(Event.prototype, window.Event.prototype)\n\n // Make association for wrappers.\n wrappers.set(window.Event.prototype, Event)\n}\n\n/**\n * Get the property descriptor to redirect a given property.\n * @param {string} key Property name to define property descriptor.\n * @returns {PropertyDescriptor} The property descriptor to redirect the property.\n * @private\n */\nfunction defineRedirectDescriptor(key) {\n return {\n get() {\n return pd(this).event[key]\n },\n set(value) {\n pd(this).event[key] = value\n },\n configurable: true,\n enumerable: true,\n }\n}\n\n/**\n * Get the property descriptor to call a given method property.\n * @param {string} key Property name to define property descriptor.\n * @returns {PropertyDescriptor} The property descriptor to call the method property.\n * @private\n */\nfunction defineCallDescriptor(key) {\n return {\n value() {\n const event = pd(this).event\n return event[key].apply(event, arguments)\n },\n configurable: true,\n enumerable: true,\n }\n}\n\n/**\n * Define new wrapper class.\n * @param {Function} BaseEvent The base wrapper class.\n * @param {Object} proto The prototype of the original event.\n * @returns {Function} The defined wrapper class.\n * @private\n */\nfunction defineWrapper(BaseEvent, proto) {\n const keys = Object.keys(proto)\n if (keys.length === 0) {\n return BaseEvent\n }\n\n /** CustomEvent */\n function CustomEvent(eventTarget, event) {\n BaseEvent.call(this, eventTarget, event)\n }\n\n CustomEvent.prototype = Object.create(BaseEvent.prototype, {\n constructor: { value: CustomEvent, configurable: true, writable: true },\n })\n\n // Define accessors.\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i]\n if (!(key in BaseEvent.prototype)) {\n const descriptor = Object.getOwnPropertyDescriptor(proto, key)\n const isFunc = typeof descriptor.value === \"function\"\n Object.defineProperty(\n CustomEvent.prototype,\n key,\n isFunc\n ? defineCallDescriptor(key)\n : defineRedirectDescriptor(key)\n )\n }\n }\n\n return CustomEvent\n}\n\n/**\n * Get the wrapper class of a given prototype.\n * @param {Object} proto The prototype of the original event to get its wrapper.\n * @returns {Function} The wrapper class.\n * @private\n */\nfunction getWrapper(proto) {\n if (proto == null || proto === Object.prototype) {\n return Event\n }\n\n let wrapper = wrappers.get(proto)\n if (wrapper == null) {\n wrapper = defineWrapper(getWrapper(Object.getPrototypeOf(proto)), proto)\n wrappers.set(proto, wrapper)\n }\n return wrapper\n}\n\n/**\n * Wrap a given event to management a dispatching.\n * @param {EventTarget} eventTarget The event target of this dispatching.\n * @param {Object} event The event to wrap.\n * @returns {Event} The wrapper instance.\n * @private\n */\nexport function wrapEvent(eventTarget, event) {\n const Wrapper = getWrapper(Object.getPrototypeOf(event))\n return new Wrapper(eventTarget, event)\n}\n\n/**\n * Get the immediateStopped flag of a given event.\n * @param {Event} event The event to get.\n * @returns {boolean} The flag to stop propagation immediately.\n * @private\n */\nexport function isStopped(event) {\n return pd(event).immediateStopped\n}\n\n/**\n * Set the current event phase of a given event.\n * @param {Event} event The event to set current target.\n * @param {number} eventPhase New event phase.\n * @returns {void}\n * @private\n */\nexport function setEventPhase(event, eventPhase) {\n pd(event).eventPhase = eventPhase\n}\n\n/**\n * Set the current target of a given event.\n * @param {Event} event The event to set current target.\n * @param {EventTarget|null} currentTarget New current target.\n * @returns {void}\n * @private\n */\nexport function setCurrentTarget(event, currentTarget) {\n pd(event).currentTarget = currentTarget\n}\n\n/**\n * Set a passive listener of a given event.\n * @param {Event} event The event to set current target.\n * @param {Function|null} passiveListener New passive listener.\n * @returns {void}\n * @private\n */\nexport function setPassiveListener(event, passiveListener) {\n pd(event).passiveListener = passiveListener\n}\n","import {\n isStopped,\n setCurrentTarget,\n setEventPhase,\n setPassiveListener,\n wrapEvent,\n} from \"./event.mjs\"\n\n/**\n * @typedef {object} ListenerNode\n * @property {Function} listener\n * @property {1|2|3} listenerType\n * @property {boolean} passive\n * @property {boolean} once\n * @property {ListenerNode|null} next\n * @private\n */\n\n/**\n * @type {WeakMap>}\n * @private\n */\nconst listenersMap = new WeakMap()\n\n// Listener types\nconst CAPTURE = 1\nconst BUBBLE = 2\nconst ATTRIBUTE = 3\n\n/**\n * Check whether a given value is an object or not.\n * @param {any} x The value to check.\n * @returns {boolean} `true` if the value is an object.\n */\nfunction isObject(x) {\n return x !== null && typeof x === \"object\" //eslint-disable-line no-restricted-syntax\n}\n\n/**\n * Get listeners.\n * @param {EventTarget} eventTarget The event target to get.\n * @returns {Map} The listeners.\n * @private\n */\nfunction getListeners(eventTarget) {\n const listeners = listenersMap.get(eventTarget)\n if (listeners == null) {\n throw new TypeError(\n \"'this' is expected an EventTarget object, but got another value.\"\n )\n }\n return listeners\n}\n\n/**\n * Get the property descriptor for the event attribute of a given event.\n * @param {string} eventName The event name to get property descriptor.\n * @returns {PropertyDescriptor} The property descriptor.\n * @private\n */\nfunction defineEventAttributeDescriptor(eventName) {\n return {\n get() {\n const listeners = getListeners(this)\n let node = listeners.get(eventName)\n while (node != null) {\n if (node.listenerType === ATTRIBUTE) {\n return node.listener\n }\n node = node.next\n }\n return null\n },\n\n set(listener) {\n if (typeof listener !== \"function\" && !isObject(listener)) {\n listener = null // eslint-disable-line no-param-reassign\n }\n const listeners = getListeners(this)\n\n // Traverse to the tail while removing old value.\n let prev = null\n let node = listeners.get(eventName)\n while (node != null) {\n if (node.listenerType === ATTRIBUTE) {\n // Remove old value.\n if (prev !== null) {\n prev.next = node.next\n } else if (node.next !== null) {\n listeners.set(eventName, node.next)\n } else {\n listeners.delete(eventName)\n }\n } else {\n prev = node\n }\n\n node = node.next\n }\n\n // Add new value.\n if (listener !== null) {\n const newNode = {\n listener,\n listenerType: ATTRIBUTE,\n passive: false,\n once: false,\n next: null,\n }\n if (prev === null) {\n listeners.set(eventName, newNode)\n } else {\n prev.next = newNode\n }\n }\n },\n configurable: true,\n enumerable: true,\n }\n}\n\n/**\n * Define an event attribute (e.g. `eventTarget.onclick`).\n * @param {Object} eventTargetPrototype The event target prototype to define an event attrbite.\n * @param {string} eventName The event name to define.\n * @returns {void}\n */\nfunction defineEventAttribute(eventTargetPrototype, eventName) {\n Object.defineProperty(\n eventTargetPrototype,\n `on${eventName}`,\n defineEventAttributeDescriptor(eventName)\n )\n}\n\n/**\n * Define a custom EventTarget with event attributes.\n * @param {string[]} eventNames Event names for event attributes.\n * @returns {EventTarget} The custom EventTarget.\n * @private\n */\nfunction defineCustomEventTarget(eventNames) {\n /** CustomEventTarget */\n function CustomEventTarget() {\n EventTarget.call(this)\n }\n\n CustomEventTarget.prototype = Object.create(EventTarget.prototype, {\n constructor: {\n value: CustomEventTarget,\n configurable: true,\n writable: true,\n },\n })\n\n for (let i = 0; i < eventNames.length; ++i) {\n defineEventAttribute(CustomEventTarget.prototype, eventNames[i])\n }\n\n return CustomEventTarget\n}\n\n/**\n * EventTarget.\n *\n * - This is constructor if no arguments.\n * - This is a function which returns a CustomEventTarget constructor if there are arguments.\n *\n * For example:\n *\n * class A extends EventTarget {}\n * class B extends EventTarget(\"message\") {}\n * class C extends EventTarget(\"message\", \"error\") {}\n * class D extends EventTarget([\"message\", \"error\"]) {}\n */\nfunction EventTarget() {\n /*eslint-disable consistent-return */\n if (this instanceof EventTarget) {\n listenersMap.set(this, new Map())\n return\n }\n if (arguments.length === 1 && Array.isArray(arguments[0])) {\n return defineCustomEventTarget(arguments[0])\n }\n if (arguments.length > 0) {\n const types = new Array(arguments.length)\n for (let i = 0; i < arguments.length; ++i) {\n types[i] = arguments[i]\n }\n return defineCustomEventTarget(types)\n }\n throw new TypeError(\"Cannot call a class as a function\")\n /*eslint-enable consistent-return */\n}\n\n// Should be enumerable, but class methods are not enumerable.\nEventTarget.prototype = {\n /**\n * Add a given listener to this event target.\n * @param {string} eventName The event name to add.\n * @param {Function} listener The listener to add.\n * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\n * @returns {void}\n */\n addEventListener(eventName, listener, options) {\n if (listener == null) {\n return\n }\n if (typeof listener !== \"function\" && !isObject(listener)) {\n throw new TypeError(\"'listener' should be a function or an object.\")\n }\n\n const listeners = getListeners(this)\n const optionsIsObj = isObject(options)\n const capture = optionsIsObj\n ? Boolean(options.capture)\n : Boolean(options)\n const listenerType = capture ? CAPTURE : BUBBLE\n const newNode = {\n listener,\n listenerType,\n passive: optionsIsObj && Boolean(options.passive),\n once: optionsIsObj && Boolean(options.once),\n next: null,\n }\n\n // Set it as the first node if the first node is null.\n let node = listeners.get(eventName)\n if (node === undefined) {\n listeners.set(eventName, newNode)\n return\n }\n\n // Traverse to the tail while checking duplication..\n let prev = null\n while (node != null) {\n if (\n node.listener === listener &&\n node.listenerType === listenerType\n ) {\n // Should ignore duplication.\n return\n }\n prev = node\n node = node.next\n }\n\n // Add it.\n prev.next = newNode\n },\n\n /**\n * Remove a given listener from this event target.\n * @param {string} eventName The event name to remove.\n * @param {Function} listener The listener to remove.\n * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\n * @returns {void}\n */\n removeEventListener(eventName, listener, options) {\n if (listener == null) {\n return\n }\n\n const listeners = getListeners(this)\n const capture = isObject(options)\n ? Boolean(options.capture)\n : Boolean(options)\n const listenerType = capture ? CAPTURE : BUBBLE\n\n let prev = null\n let node = listeners.get(eventName)\n while (node != null) {\n if (\n node.listener === listener &&\n node.listenerType === listenerType\n ) {\n if (prev !== null) {\n prev.next = node.next\n } else if (node.next !== null) {\n listeners.set(eventName, node.next)\n } else {\n listeners.delete(eventName)\n }\n return\n }\n\n prev = node\n node = node.next\n }\n },\n\n /**\n * Dispatch a given event.\n * @param {Event|{type:string}} event The event to dispatch.\n * @returns {boolean} `false` if canceled.\n */\n dispatchEvent(event) {\n if (event == null || typeof event.type !== \"string\") {\n throw new TypeError('\"event.type\" should be a string.')\n }\n\n // If listeners aren't registered, terminate.\n const listeners = getListeners(this)\n const eventName = event.type\n let node = listeners.get(eventName)\n if (node == null) {\n return true\n }\n\n // Since we cannot rewrite several properties, so wrap object.\n const wrappedEvent = wrapEvent(this, event)\n\n // This doesn't process capturing phase and bubbling phase.\n // This isn't participating in a tree.\n let prev = null\n while (node != null) {\n // Remove this listener if it's once\n if (node.once) {\n if (prev !== null) {\n prev.next = node.next\n } else if (node.next !== null) {\n listeners.set(eventName, node.next)\n } else {\n listeners.delete(eventName)\n }\n } else {\n prev = node\n }\n\n // Call this listener\n setPassiveListener(\n wrappedEvent,\n node.passive ? node.listener : null\n )\n if (typeof node.listener === \"function\") {\n try {\n node.listener.call(this, wrappedEvent)\n } catch (err) {\n if (\n typeof console !== \"undefined\" &&\n typeof console.error === \"function\"\n ) {\n console.error(err)\n }\n }\n } else if (\n node.listenerType !== ATTRIBUTE &&\n typeof node.listener.handleEvent === \"function\"\n ) {\n node.listener.handleEvent(wrappedEvent)\n }\n\n // Break if `event.stopImmediatePropagation` was called.\n if (isStopped(wrappedEvent)) {\n break\n }\n\n node = node.next\n }\n setPassiveListener(wrappedEvent, null)\n setEventPhase(wrappedEvent, 0)\n setCurrentTarget(wrappedEvent, null)\n\n return !wrappedEvent.defaultPrevented\n },\n}\n\n// `constructor` is not enumerable.\nObject.defineProperty(EventTarget.prototype, \"constructor\", {\n value: EventTarget,\n configurable: true,\n writable: true,\n})\n\n// Ensure `eventTarget instanceof window.EventTarget` is `true`.\nif (\n typeof window !== \"undefined\" &&\n typeof window.EventTarget !== \"undefined\"\n) {\n Object.setPrototypeOf(EventTarget.prototype, window.EventTarget.prototype)\n}\n\nexport { defineEventAttribute, EventTarget }\nexport default EventTarget\n"],"names":[],"mappings":";;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;AAmBA,MAAM,WAAW,GAAG,IAAI,OAAO,GAAE;;;;;;;AAOjC,MAAM,QAAQ,GAAG,IAAI,OAAO,GAAE;;;;;;;;AAQ9B,SAAS,EAAE,CAAC,KAAK,EAAE;IACf,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,EAAC;IACnC,OAAO,CAAC,MAAM;QACV,IAAI,IAAI,IAAI;QACZ,6CAA6C;QAC7C,KAAK;MACR;IACD,OAAO,IAAI;CACd;;;;;;AAMD,SAAS,aAAa,CAAC,IAAI,EAAE;IACzB,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,EAAE;QAC9B;YACI,OAAO,OAAO,KAAK,WAAW;YAC9B,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU;UACrC;YACE,OAAO,CAAC,KAAK;gBACT,oEAAoE;gBACpE,IAAI,CAAC,eAAe;cACvB;SACJ;QACD,MAAM;KACT;IACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;QACxB,MAAM;KACT;;IAED,IAAI,CAAC,QAAQ,GAAG,KAAI;IACpB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,KAAK,UAAU,EAAE;QACjD,IAAI,CAAC,KAAK,CAAC,cAAc,GAAE;KAC9B;CACJ;;;;;;;;;;;;AAYD,SAAS,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE;IAC/B,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE;QAClB,WAAW;QACX,KAAK;QACL,UAAU,EAAE,CAAC;QACb,aAAa,EAAE,WAAW;QAC1B,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,KAAK;QACd,gBAAgB,EAAE,KAAK;QACvB,eAAe,EAAE,IAAI;QACrB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;KAC3C,EAAC;;;IAGF,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,EAAC;;;IAG5E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,EAAC;QACnB,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,EAAE;YAChB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,wBAAwB,CAAC,GAAG,CAAC,EAAC;SAClE;KACJ;CACJ;;;AAGD,KAAK,CAAC,SAAS,GAAG;;;;;IAKd,IAAI,IAAI,GAAG;QACP,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI;KAC7B;;;;;;IAMD,IAAI,MAAM,GAAG;QACT,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW;KAC9B;;;;;;IAMD,IAAI,aAAa,GAAG;QAChB,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,aAAa;KAChC;;;;;IAKD,YAAY,GAAG;QACX,MAAM,aAAa,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,cAAa;QAC5C,IAAI,aAAa,IAAI,IAAI,EAAE;YACvB,OAAO,EAAE;SACZ;QACD,OAAO,CAAC,aAAa,CAAC;KACzB;;;;;;IAMD,IAAI,IAAI,GAAG;QACP,OAAO,CAAC;KACX;;;;;;IAMD,IAAI,eAAe,GAAG;QAClB,OAAO,CAAC;KACX;;;;;;IAMD,IAAI,SAAS,GAAG;QACZ,OAAO,CAAC;KACX;;;;;;IAMD,IAAI,cAAc,GAAG;QACjB,OAAO,CAAC;KACX;;;;;;IAMD,IAAI,UAAU,GAAG;QACb,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU;KAC7B;;;;;;IAMD,eAAe,GAAG;QACd,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAC;;QAErB,IAAI,CAAC,OAAO,GAAG,KAAI;QACnB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,KAAK,UAAU,EAAE;YAClD,IAAI,CAAC,KAAK,CAAC,eAAe,GAAE;SAC/B;KACJ;;;;;;IAMD,wBAAwB,GAAG;QACvB,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAC;;QAErB,IAAI,CAAC,OAAO,GAAG,KAAI;QACnB,IAAI,CAAC,gBAAgB,GAAG,KAAI;QAC5B,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,wBAAwB,KAAK,UAAU,EAAE;YAC3D,IAAI,CAAC,KAAK,CAAC,wBAAwB,GAAE;SACxC;KACJ;;;;;;IAMD,IAAI,OAAO,GAAG;QACV,OAAO,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;KACzC;;;;;;IAMD,IAAI,UAAU,GAAG;QACb,OAAO,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;KAC5C;;;;;;IAMD,cAAc,GAAG;QACb,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,EAAC;KAC1B;;;;;;IAMD,IAAI,gBAAgB,GAAG;QACnB,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ;KAC3B;;;;;;IAMD,IAAI,QAAQ,GAAG;QACX,OAAO,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;KAC1C;;;;;;IAMD,IAAI,SAAS,GAAG;QACZ,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS;KAC5B;;;;;;;IAOD,IAAI,UAAU,GAAG;QACb,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW;KAC9B;;;;;;;IAOD,IAAI,YAAY,GAAG;QACf,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO;KAC1B;IACD,IAAI,YAAY,CAAC,KAAK,EAAE;QACpB,IAAI,CAAC,KAAK,EAAE;YACR,MAAM;SACT;QACD,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAC;;QAErB,IAAI,CAAC,OAAO,GAAG,KAAI;QACnB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE;YAC9C,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,KAAI;SACjC;KACJ;;;;;;;IAOD,IAAI,WAAW,GAAG;QACd,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ;KAC5B;IACD,IAAI,WAAW,CAAC,KAAK,EAAE;QACnB,IAAI,CAAC,KAAK,EAAE;YACR,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,EAAC;SAC1B;KACJ;;;;;;;;;IASD,SAAS,GAAG;;KAEX;EACJ;;;AAGD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,aAAa,EAAE;IAClD,KAAK,EAAE,KAAK;IACZ,YAAY,EAAE,IAAI;IAClB,QAAQ,EAAE,IAAI;CACjB,EAAC;;;AAGF,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,WAAW,EAAE;IACtE,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,EAAC;;;IAG9D,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,EAAC;CAC9C;;;;;;;;AAQD,SAAS,wBAAwB,CAAC,GAAG,EAAE;IACnC,OAAO;QACH,GAAG,GAAG;YACF,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;SAC7B;QACD,GAAG,CAAC,KAAK,EAAE;YACP,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,MAAK;SAC9B;QACD,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI;KACnB;CACJ;;;;;;;;AAQD,SAAS,oBAAoB,CAAC,GAAG,EAAE;IAC/B,OAAO;QACH,KAAK,GAAG;YACJ,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,MAAK;YAC5B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC;SAC5C;QACD,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI;KACnB;CACJ;;;;;;;;;AASD,SAAS,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAC;IAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QACnB,OAAO,SAAS;KACnB;;;IAGD,SAAS,WAAW,CAAC,WAAW,EAAE,KAAK,EAAE;QACrC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAC;KAC3C;;IAED,WAAW,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE;QACvD,WAAW,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;KAC1E,EAAC;;;IAGF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,EAAC;QACnB,IAAI,EAAE,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE;YAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,GAAG,EAAC;YAC9D,MAAM,MAAM,GAAG,OAAO,UAAU,CAAC,KAAK,KAAK,WAAU;YACrD,MAAM,CAAC,cAAc;gBACjB,WAAW,CAAC,SAAS;gBACrB,GAAG;gBACH,MAAM;sBACA,oBAAoB,CAAC,GAAG,CAAC;sBACzB,wBAAwB,CAAC,GAAG,CAAC;cACtC;SACJ;KACJ;;IAED,OAAO,WAAW;CACrB;;;;;;;;AAQD,SAAS,UAAU,CAAC,KAAK,EAAE;IACvB,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,MAAM,CAAC,SAAS,EAAE;QAC7C,OAAO,KAAK;KACf;;IAED,IAAI,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAC;IACjC,IAAI,OAAO,IAAI,IAAI,EAAE;QACjB,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAC;QACxE,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAC;KAC/B;IACD,OAAO,OAAO;CACjB;;;;;;;;;AASD,AAAO,SAAS,SAAS,CAAC,WAAW,EAAE,KAAK,EAAE;IAC1C,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,EAAC;IACxD,OAAO,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC;CACzC;;;;;;;;AAQD,AAAO,SAAS,SAAS,CAAC,KAAK,EAAE;IAC7B,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,gBAAgB;CACpC;;;;;;;;;AASD,AAAO,SAAS,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE;IAC7C,EAAE,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,WAAU;CACpC;;;;;;;;;AASD,AAAO,SAAS,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE;IACnD,EAAE,CAAC,KAAK,CAAC,CAAC,aAAa,GAAG,cAAa;CAC1C;;;;;;;;;AASD,AAAO,SAAS,kBAAkB,CAAC,KAAK,EAAE,eAAe,EAAE;IACvD,EAAE,CAAC,KAAK,CAAC,CAAC,eAAe,GAAG,gBAAe;CAC9C;;ACtdD;;;;;;;;;;;;;;AAcA,MAAM,YAAY,GAAG,IAAI,OAAO,GAAE;;;AAGlC,MAAM,OAAO,GAAG,EAAC;AACjB,MAAM,MAAM,GAAG,EAAC;AAChB,MAAM,SAAS,GAAG,EAAC;;;;;;;AAOnB,SAAS,QAAQ,CAAC,CAAC,EAAE;IACjB,OAAO,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ;CAC7C;;;;;;;;AAQD,SAAS,YAAY,CAAC,WAAW,EAAE;IAC/B,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,EAAC;IAC/C,IAAI,SAAS,IAAI,IAAI,EAAE;QACnB,MAAM,IAAI,SAAS;YACf,kEAAkE;SACrE;KACJ;IACD,OAAO,SAAS;CACnB;;;;;;;;AAQD,SAAS,8BAA8B,CAAC,SAAS,EAAE;IAC/C,OAAO;QACH,GAAG,GAAG;YACF,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAC;YACpC,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,EAAC;YACnC,OAAO,IAAI,IAAI,IAAI,EAAE;gBACjB,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;oBACjC,OAAO,IAAI,CAAC,QAAQ;iBACvB;gBACD,IAAI,GAAG,IAAI,CAAC,KAAI;aACnB;YACD,OAAO,IAAI;SACd;;QAED,GAAG,CAAC,QAAQ,EAAE;YACV,IAAI,OAAO,QAAQ,KAAK,UAAU,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBACvD,QAAQ,GAAG,KAAI;aAClB;YACD,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAC;;;YAGpC,IAAI,IAAI,GAAG,KAAI;YACf,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,EAAC;YACnC,OAAO,IAAI,IAAI,IAAI,EAAE;gBACjB,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;;oBAEjC,IAAI,IAAI,KAAK,IAAI,EAAE;wBACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAI;qBACxB,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;wBAC3B,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAC;qBACtC,MAAM;wBACH,SAAS,CAAC,MAAM,CAAC,SAAS,EAAC;qBAC9B;iBACJ,MAAM;oBACH,IAAI,GAAG,KAAI;iBACd;;gBAED,IAAI,GAAG,IAAI,CAAC,KAAI;aACnB;;;YAGD,IAAI,QAAQ,KAAK,IAAI,EAAE;gBACnB,MAAM,OAAO,GAAG;oBACZ,QAAQ;oBACR,YAAY,EAAE,SAAS;oBACvB,OAAO,EAAE,KAAK;oBACd,IAAI,EAAE,KAAK;oBACX,IAAI,EAAE,IAAI;kBACb;gBACD,IAAI,IAAI,KAAK,IAAI,EAAE;oBACf,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,EAAC;iBACpC,MAAM;oBACH,IAAI,CAAC,IAAI,GAAG,QAAO;iBACtB;aACJ;SACJ;QACD,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI;KACnB;CACJ;;;;;;;;AAQD,SAAS,oBAAoB,CAAC,oBAAoB,EAAE,SAAS,EAAE;IAC3D,MAAM,CAAC,cAAc;QACjB,oBAAoB;QACpB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAChB,8BAA8B,CAAC,SAAS,CAAC;MAC5C;CACJ;;;;;;;;AAQD,SAAS,uBAAuB,CAAC,UAAU,EAAE;;IAEzC,SAAS,iBAAiB,GAAG;QACzB,WAAW,CAAC,IAAI,CAAC,IAAI,EAAC;KACzB;;IAED,iBAAiB,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE;QAC/D,WAAW,EAAE;YACT,KAAK,EAAE,iBAAiB;YACxB,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,IAAI;SACjB;KACJ,EAAC;;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;QACxC,oBAAoB,CAAC,iBAAiB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,EAAC;KACnE;;IAED,OAAO,iBAAiB;CAC3B;;;;;;;;;;;;;;;AAeD,SAAS,WAAW,GAAG;;IAEnB,IAAI,IAAI,YAAY,WAAW,EAAE;QAC7B,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,EAAC;QACjC,MAAM;KACT;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;QACvD,OAAO,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;KAC/C;IACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;QACtB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,EAAC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YACvC,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAC;SAC1B;QACD,OAAO,uBAAuB,CAAC,KAAK,CAAC;KACxC;IACD,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC;;CAE3D;;;AAGD,WAAW,CAAC,SAAS,GAAG;;;;;;;;IAQpB,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE;QAC3C,IAAI,QAAQ,IAAI,IAAI,EAAE;YAClB,MAAM;SACT;QACD,IAAI,OAAO,QAAQ,KAAK,UAAU,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YACvD,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC;SACvE;;QAED,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAC;QACpC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,EAAC;QACtC,MAAM,OAAO,GAAG,YAAY;cACtB,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;cACxB,OAAO,CAAC,OAAO,EAAC;QACtB,MAAM,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,OAAM;QAC/C,MAAM,OAAO,GAAG;YACZ,QAAQ;YACR,YAAY;YACZ,OAAO,EAAE,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;YACjD,IAAI,EAAE,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;YAC3C,IAAI,EAAE,IAAI;UACb;;;QAGD,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,EAAC;QACnC,IAAI,IAAI,KAAK,SAAS,EAAE;YACpB,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,EAAC;YACjC,MAAM;SACT;;;QAGD,IAAI,IAAI,GAAG,KAAI;QACf,OAAO,IAAI,IAAI,IAAI,EAAE;YACjB;gBACI,IAAI,CAAC,QAAQ,KAAK,QAAQ;gBAC1B,IAAI,CAAC,YAAY,KAAK,YAAY;cACpC;;gBAEE,MAAM;aACT;YACD,IAAI,GAAG,KAAI;YACX,IAAI,GAAG,IAAI,CAAC,KAAI;SACnB;;;QAGD,IAAI,CAAC,IAAI,GAAG,QAAO;KACtB;;;;;;;;;IASD,mBAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE;QAC9C,IAAI,QAAQ,IAAI,IAAI,EAAE;YAClB,MAAM;SACT;;QAED,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAC;QACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;cAC3B,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;cACxB,OAAO,CAAC,OAAO,EAAC;QACtB,MAAM,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,OAAM;;QAE/C,IAAI,IAAI,GAAG,KAAI;QACf,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,EAAC;QACnC,OAAO,IAAI,IAAI,IAAI,EAAE;YACjB;gBACI,IAAI,CAAC,QAAQ,KAAK,QAAQ;gBAC1B,IAAI,CAAC,YAAY,KAAK,YAAY;cACpC;gBACE,IAAI,IAAI,KAAK,IAAI,EAAE;oBACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAI;iBACxB,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;oBAC3B,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAC;iBACtC,MAAM;oBACH,SAAS,CAAC,MAAM,CAAC,SAAS,EAAC;iBAC9B;gBACD,MAAM;aACT;;YAED,IAAI,GAAG,KAAI;YACX,IAAI,GAAG,IAAI,CAAC,KAAI;SACnB;KACJ;;;;;;;IAOD,aAAa,CAAC,KAAK,EAAE;QACjB,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;YACjD,MAAM,IAAI,SAAS,CAAC,kCAAkC,CAAC;SAC1D;;;QAGD,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAC;QACpC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAI;QAC5B,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,EAAC;QACnC,IAAI,IAAI,IAAI,IAAI,EAAE;YACd,OAAO,IAAI;SACd;;;QAGD,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,EAAC;;;;QAI3C,IAAI,IAAI,GAAG,KAAI;QACf,OAAO,IAAI,IAAI,IAAI,EAAE;;YAEjB,IAAI,IAAI,CAAC,IAAI,EAAE;gBACX,IAAI,IAAI,KAAK,IAAI,EAAE;oBACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAI;iBACxB,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;oBAC3B,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAC;iBACtC,MAAM;oBACH,SAAS,CAAC,MAAM,CAAC,SAAS,EAAC;iBAC9B;aACJ,MAAM;gBACH,IAAI,GAAG,KAAI;aACd;;;YAGD,kBAAkB;gBACd,YAAY;gBACZ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI;cACtC;YACD,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE;gBACrC,IAAI;oBACA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,EAAC;iBACzC,CAAC,OAAO,GAAG,EAAE;oBACV;wBACI,OAAO,OAAO,KAAK,WAAW;wBAC9B,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU;sBACrC;wBACE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAC;qBACrB;iBACJ;aACJ,MAAM;gBACH,IAAI,CAAC,YAAY,KAAK,SAAS;gBAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,KAAK,UAAU;cACjD;gBACE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAC;aAC1C;;;YAGD,IAAI,SAAS,CAAC,YAAY,CAAC,EAAE;gBACzB,KAAK;aACR;;YAED,IAAI,GAAG,IAAI,CAAC,KAAI;SACnB;QACD,kBAAkB,CAAC,YAAY,EAAE,IAAI,EAAC;QACtC,aAAa,CAAC,YAAY,EAAE,CAAC,EAAC;QAC9B,gBAAgB,CAAC,YAAY,EAAE,IAAI,EAAC;;QAEpC,OAAO,CAAC,YAAY,CAAC,gBAAgB;KACxC;EACJ;;;AAGD,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,EAAE,aAAa,EAAE;IACxD,KAAK,EAAE,WAAW;IAClB,YAAY,EAAE,IAAI;IAClB,QAAQ,EAAE,IAAI;CACjB,EAAC;;;AAGF;IACI,OAAO,MAAM,KAAK,WAAW;IAC7B,OAAO,MAAM,CAAC,WAAW,KAAK,WAAW;EAC3C;IACE,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,SAAS,EAAC;CAC7E;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/reverse_engineering/node_modules/event-target-shim/dist/event-target-shim.mjs b/reverse_engineering/node_modules/event-target-shim/dist/event-target-shim.mjs deleted file mode 100644 index 114f3a1..0000000 --- a/reverse_engineering/node_modules/event-target-shim/dist/event-target-shim.mjs +++ /dev/null @@ -1,862 +0,0 @@ -/** - * @author Toru Nagashima - * @copyright 2015 Toru Nagashima. All rights reserved. - * See LICENSE file in root directory for full license. - */ -/** - * @typedef {object} PrivateData - * @property {EventTarget} eventTarget The event target. - * @property {{type:string}} event The original event object. - * @property {number} eventPhase The current event phase. - * @property {EventTarget|null} currentTarget The current event target. - * @property {boolean} canceled The flag to prevent default. - * @property {boolean} stopped The flag to stop propagation. - * @property {boolean} immediateStopped The flag to stop propagation immediately. - * @property {Function|null} passiveListener The listener if the current listener is passive. Otherwise this is null. - * @property {number} timeStamp The unix time. - * @private - */ - -/** - * Private data for event wrappers. - * @type {WeakMap} - * @private - */ -const privateData = new WeakMap(); - -/** - * Cache for wrapper classes. - * @type {WeakMap} - * @private - */ -const wrappers = new WeakMap(); - -/** - * Get private data. - * @param {Event} event The event object to get private data. - * @returns {PrivateData} The private data of the event. - * @private - */ -function pd(event) { - const retv = privateData.get(event); - console.assert( - retv != null, - "'this' is expected an Event object, but got", - event - ); - return retv -} - -/** - * https://dom.spec.whatwg.org/#set-the-canceled-flag - * @param data {PrivateData} private data. - */ -function setCancelFlag(data) { - if (data.passiveListener != null) { - if ( - typeof console !== "undefined" && - typeof console.error === "function" - ) { - console.error( - "Unable to preventDefault inside passive event listener invocation.", - data.passiveListener - ); - } - return - } - if (!data.event.cancelable) { - return - } - - data.canceled = true; - if (typeof data.event.preventDefault === "function") { - data.event.preventDefault(); - } -} - -/** - * @see https://dom.spec.whatwg.org/#interface-event - * @private - */ -/** - * The event wrapper. - * @constructor - * @param {EventTarget} eventTarget The event target of this dispatching. - * @param {Event|{type:string}} event The original event to wrap. - */ -function Event(eventTarget, event) { - privateData.set(this, { - eventTarget, - event, - eventPhase: 2, - currentTarget: eventTarget, - canceled: false, - stopped: false, - immediateStopped: false, - passiveListener: null, - timeStamp: event.timeStamp || Date.now(), - }); - - // https://heycam.github.io/webidl/#Unforgeable - Object.defineProperty(this, "isTrusted", { value: false, enumerable: true }); - - // Define accessors - const keys = Object.keys(event); - for (let i = 0; i < keys.length; ++i) { - const key = keys[i]; - if (!(key in this)) { - Object.defineProperty(this, key, defineRedirectDescriptor(key)); - } - } -} - -// Should be enumerable, but class methods are not enumerable. -Event.prototype = { - /** - * The type of this event. - * @type {string} - */ - get type() { - return pd(this).event.type - }, - - /** - * The target of this event. - * @type {EventTarget} - */ - get target() { - return pd(this).eventTarget - }, - - /** - * The target of this event. - * @type {EventTarget} - */ - get currentTarget() { - return pd(this).currentTarget - }, - - /** - * @returns {EventTarget[]} The composed path of this event. - */ - composedPath() { - const currentTarget = pd(this).currentTarget; - if (currentTarget == null) { - return [] - } - return [currentTarget] - }, - - /** - * Constant of NONE. - * @type {number} - */ - get NONE() { - return 0 - }, - - /** - * Constant of CAPTURING_PHASE. - * @type {number} - */ - get CAPTURING_PHASE() { - return 1 - }, - - /** - * Constant of AT_TARGET. - * @type {number} - */ - get AT_TARGET() { - return 2 - }, - - /** - * Constant of BUBBLING_PHASE. - * @type {number} - */ - get BUBBLING_PHASE() { - return 3 - }, - - /** - * The target of this event. - * @type {number} - */ - get eventPhase() { - return pd(this).eventPhase - }, - - /** - * Stop event bubbling. - * @returns {void} - */ - stopPropagation() { - const data = pd(this); - - data.stopped = true; - if (typeof data.event.stopPropagation === "function") { - data.event.stopPropagation(); - } - }, - - /** - * Stop event bubbling. - * @returns {void} - */ - stopImmediatePropagation() { - const data = pd(this); - - data.stopped = true; - data.immediateStopped = true; - if (typeof data.event.stopImmediatePropagation === "function") { - data.event.stopImmediatePropagation(); - } - }, - - /** - * The flag to be bubbling. - * @type {boolean} - */ - get bubbles() { - return Boolean(pd(this).event.bubbles) - }, - - /** - * The flag to be cancelable. - * @type {boolean} - */ - get cancelable() { - return Boolean(pd(this).event.cancelable) - }, - - /** - * Cancel this event. - * @returns {void} - */ - preventDefault() { - setCancelFlag(pd(this)); - }, - - /** - * The flag to indicate cancellation state. - * @type {boolean} - */ - get defaultPrevented() { - return pd(this).canceled - }, - - /** - * The flag to be composed. - * @type {boolean} - */ - get composed() { - return Boolean(pd(this).event.composed) - }, - - /** - * The unix time of this event. - * @type {number} - */ - get timeStamp() { - return pd(this).timeStamp - }, - - /** - * The target of this event. - * @type {EventTarget} - * @deprecated - */ - get srcElement() { - return pd(this).eventTarget - }, - - /** - * The flag to stop event bubbling. - * @type {boolean} - * @deprecated - */ - get cancelBubble() { - return pd(this).stopped - }, - set cancelBubble(value) { - if (!value) { - return - } - const data = pd(this); - - data.stopped = true; - if (typeof data.event.cancelBubble === "boolean") { - data.event.cancelBubble = true; - } - }, - - /** - * The flag to indicate cancellation state. - * @type {boolean} - * @deprecated - */ - get returnValue() { - return !pd(this).canceled - }, - set returnValue(value) { - if (!value) { - setCancelFlag(pd(this)); - } - }, - - /** - * Initialize this event object. But do nothing under event dispatching. - * @param {string} type The event type. - * @param {boolean} [bubbles=false] The flag to be possible to bubble up. - * @param {boolean} [cancelable=false] The flag to be possible to cancel. - * @deprecated - */ - initEvent() { - // Do nothing. - }, -}; - -// `constructor` is not enumerable. -Object.defineProperty(Event.prototype, "constructor", { - value: Event, - configurable: true, - writable: true, -}); - -// Ensure `event instanceof window.Event` is `true`. -if (typeof window !== "undefined" && typeof window.Event !== "undefined") { - Object.setPrototypeOf(Event.prototype, window.Event.prototype); - - // Make association for wrappers. - wrappers.set(window.Event.prototype, Event); -} - -/** - * Get the property descriptor to redirect a given property. - * @param {string} key Property name to define property descriptor. - * @returns {PropertyDescriptor} The property descriptor to redirect the property. - * @private - */ -function defineRedirectDescriptor(key) { - return { - get() { - return pd(this).event[key] - }, - set(value) { - pd(this).event[key] = value; - }, - configurable: true, - enumerable: true, - } -} - -/** - * Get the property descriptor to call a given method property. - * @param {string} key Property name to define property descriptor. - * @returns {PropertyDescriptor} The property descriptor to call the method property. - * @private - */ -function defineCallDescriptor(key) { - return { - value() { - const event = pd(this).event; - return event[key].apply(event, arguments) - }, - configurable: true, - enumerable: true, - } -} - -/** - * Define new wrapper class. - * @param {Function} BaseEvent The base wrapper class. - * @param {Object} proto The prototype of the original event. - * @returns {Function} The defined wrapper class. - * @private - */ -function defineWrapper(BaseEvent, proto) { - const keys = Object.keys(proto); - if (keys.length === 0) { - return BaseEvent - } - - /** CustomEvent */ - function CustomEvent(eventTarget, event) { - BaseEvent.call(this, eventTarget, event); - } - - CustomEvent.prototype = Object.create(BaseEvent.prototype, { - constructor: { value: CustomEvent, configurable: true, writable: true }, - }); - - // Define accessors. - for (let i = 0; i < keys.length; ++i) { - const key = keys[i]; - if (!(key in BaseEvent.prototype)) { - const descriptor = Object.getOwnPropertyDescriptor(proto, key); - const isFunc = typeof descriptor.value === "function"; - Object.defineProperty( - CustomEvent.prototype, - key, - isFunc - ? defineCallDescriptor(key) - : defineRedirectDescriptor(key) - ); - } - } - - return CustomEvent -} - -/** - * Get the wrapper class of a given prototype. - * @param {Object} proto The prototype of the original event to get its wrapper. - * @returns {Function} The wrapper class. - * @private - */ -function getWrapper(proto) { - if (proto == null || proto === Object.prototype) { - return Event - } - - let wrapper = wrappers.get(proto); - if (wrapper == null) { - wrapper = defineWrapper(getWrapper(Object.getPrototypeOf(proto)), proto); - wrappers.set(proto, wrapper); - } - return wrapper -} - -/** - * Wrap a given event to management a dispatching. - * @param {EventTarget} eventTarget The event target of this dispatching. - * @param {Object} event The event to wrap. - * @returns {Event} The wrapper instance. - * @private - */ -function wrapEvent(eventTarget, event) { - const Wrapper = getWrapper(Object.getPrototypeOf(event)); - return new Wrapper(eventTarget, event) -} - -/** - * Get the immediateStopped flag of a given event. - * @param {Event} event The event to get. - * @returns {boolean} The flag to stop propagation immediately. - * @private - */ -function isStopped(event) { - return pd(event).immediateStopped -} - -/** - * Set the current event phase of a given event. - * @param {Event} event The event to set current target. - * @param {number} eventPhase New event phase. - * @returns {void} - * @private - */ -function setEventPhase(event, eventPhase) { - pd(event).eventPhase = eventPhase; -} - -/** - * Set the current target of a given event. - * @param {Event} event The event to set current target. - * @param {EventTarget|null} currentTarget New current target. - * @returns {void} - * @private - */ -function setCurrentTarget(event, currentTarget) { - pd(event).currentTarget = currentTarget; -} - -/** - * Set a passive listener of a given event. - * @param {Event} event The event to set current target. - * @param {Function|null} passiveListener New passive listener. - * @returns {void} - * @private - */ -function setPassiveListener(event, passiveListener) { - pd(event).passiveListener = passiveListener; -} - -/** - * @typedef {object} ListenerNode - * @property {Function} listener - * @property {1|2|3} listenerType - * @property {boolean} passive - * @property {boolean} once - * @property {ListenerNode|null} next - * @private - */ - -/** - * @type {WeakMap>} - * @private - */ -const listenersMap = new WeakMap(); - -// Listener types -const CAPTURE = 1; -const BUBBLE = 2; -const ATTRIBUTE = 3; - -/** - * Check whether a given value is an object or not. - * @param {any} x The value to check. - * @returns {boolean} `true` if the value is an object. - */ -function isObject(x) { - return x !== null && typeof x === "object" //eslint-disable-line no-restricted-syntax -} - -/** - * Get listeners. - * @param {EventTarget} eventTarget The event target to get. - * @returns {Map} The listeners. - * @private - */ -function getListeners(eventTarget) { - const listeners = listenersMap.get(eventTarget); - if (listeners == null) { - throw new TypeError( - "'this' is expected an EventTarget object, but got another value." - ) - } - return listeners -} - -/** - * Get the property descriptor for the event attribute of a given event. - * @param {string} eventName The event name to get property descriptor. - * @returns {PropertyDescriptor} The property descriptor. - * @private - */ -function defineEventAttributeDescriptor(eventName) { - return { - get() { - const listeners = getListeners(this); - let node = listeners.get(eventName); - while (node != null) { - if (node.listenerType === ATTRIBUTE) { - return node.listener - } - node = node.next; - } - return null - }, - - set(listener) { - if (typeof listener !== "function" && !isObject(listener)) { - listener = null; // eslint-disable-line no-param-reassign - } - const listeners = getListeners(this); - - // Traverse to the tail while removing old value. - let prev = null; - let node = listeners.get(eventName); - while (node != null) { - if (node.listenerType === ATTRIBUTE) { - // Remove old value. - if (prev !== null) { - prev.next = node.next; - } else if (node.next !== null) { - listeners.set(eventName, node.next); - } else { - listeners.delete(eventName); - } - } else { - prev = node; - } - - node = node.next; - } - - // Add new value. - if (listener !== null) { - const newNode = { - listener, - listenerType: ATTRIBUTE, - passive: false, - once: false, - next: null, - }; - if (prev === null) { - listeners.set(eventName, newNode); - } else { - prev.next = newNode; - } - } - }, - configurable: true, - enumerable: true, - } -} - -/** - * Define an event attribute (e.g. `eventTarget.onclick`). - * @param {Object} eventTargetPrototype The event target prototype to define an event attrbite. - * @param {string} eventName The event name to define. - * @returns {void} - */ -function defineEventAttribute(eventTargetPrototype, eventName) { - Object.defineProperty( - eventTargetPrototype, - `on${eventName}`, - defineEventAttributeDescriptor(eventName) - ); -} - -/** - * Define a custom EventTarget with event attributes. - * @param {string[]} eventNames Event names for event attributes. - * @returns {EventTarget} The custom EventTarget. - * @private - */ -function defineCustomEventTarget(eventNames) { - /** CustomEventTarget */ - function CustomEventTarget() { - EventTarget.call(this); - } - - CustomEventTarget.prototype = Object.create(EventTarget.prototype, { - constructor: { - value: CustomEventTarget, - configurable: true, - writable: true, - }, - }); - - for (let i = 0; i < eventNames.length; ++i) { - defineEventAttribute(CustomEventTarget.prototype, eventNames[i]); - } - - return CustomEventTarget -} - -/** - * EventTarget. - * - * - This is constructor if no arguments. - * - This is a function which returns a CustomEventTarget constructor if there are arguments. - * - * For example: - * - * class A extends EventTarget {} - * class B extends EventTarget("message") {} - * class C extends EventTarget("message", "error") {} - * class D extends EventTarget(["message", "error"]) {} - */ -function EventTarget() { - /*eslint-disable consistent-return */ - if (this instanceof EventTarget) { - listenersMap.set(this, new Map()); - return - } - if (arguments.length === 1 && Array.isArray(arguments[0])) { - return defineCustomEventTarget(arguments[0]) - } - if (arguments.length > 0) { - const types = new Array(arguments.length); - for (let i = 0; i < arguments.length; ++i) { - types[i] = arguments[i]; - } - return defineCustomEventTarget(types) - } - throw new TypeError("Cannot call a class as a function") - /*eslint-enable consistent-return */ -} - -// Should be enumerable, but class methods are not enumerable. -EventTarget.prototype = { - /** - * Add a given listener to this event target. - * @param {string} eventName The event name to add. - * @param {Function} listener The listener to add. - * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener. - * @returns {void} - */ - addEventListener(eventName, listener, options) { - if (listener == null) { - return - } - if (typeof listener !== "function" && !isObject(listener)) { - throw new TypeError("'listener' should be a function or an object.") - } - - const listeners = getListeners(this); - const optionsIsObj = isObject(options); - const capture = optionsIsObj - ? Boolean(options.capture) - : Boolean(options); - const listenerType = capture ? CAPTURE : BUBBLE; - const newNode = { - listener, - listenerType, - passive: optionsIsObj && Boolean(options.passive), - once: optionsIsObj && Boolean(options.once), - next: null, - }; - - // Set it as the first node if the first node is null. - let node = listeners.get(eventName); - if (node === undefined) { - listeners.set(eventName, newNode); - return - } - - // Traverse to the tail while checking duplication.. - let prev = null; - while (node != null) { - if ( - node.listener === listener && - node.listenerType === listenerType - ) { - // Should ignore duplication. - return - } - prev = node; - node = node.next; - } - - // Add it. - prev.next = newNode; - }, - - /** - * Remove a given listener from this event target. - * @param {string} eventName The event name to remove. - * @param {Function} listener The listener to remove. - * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener. - * @returns {void} - */ - removeEventListener(eventName, listener, options) { - if (listener == null) { - return - } - - const listeners = getListeners(this); - const capture = isObject(options) - ? Boolean(options.capture) - : Boolean(options); - const listenerType = capture ? CAPTURE : BUBBLE; - - let prev = null; - let node = listeners.get(eventName); - while (node != null) { - if ( - node.listener === listener && - node.listenerType === listenerType - ) { - if (prev !== null) { - prev.next = node.next; - } else if (node.next !== null) { - listeners.set(eventName, node.next); - } else { - listeners.delete(eventName); - } - return - } - - prev = node; - node = node.next; - } - }, - - /** - * Dispatch a given event. - * @param {Event|{type:string}} event The event to dispatch. - * @returns {boolean} `false` if canceled. - */ - dispatchEvent(event) { - if (event == null || typeof event.type !== "string") { - throw new TypeError('"event.type" should be a string.') - } - - // If listeners aren't registered, terminate. - const listeners = getListeners(this); - const eventName = event.type; - let node = listeners.get(eventName); - if (node == null) { - return true - } - - // Since we cannot rewrite several properties, so wrap object. - const wrappedEvent = wrapEvent(this, event); - - // This doesn't process capturing phase and bubbling phase. - // This isn't participating in a tree. - let prev = null; - while (node != null) { - // Remove this listener if it's once - if (node.once) { - if (prev !== null) { - prev.next = node.next; - } else if (node.next !== null) { - listeners.set(eventName, node.next); - } else { - listeners.delete(eventName); - } - } else { - prev = node; - } - - // Call this listener - setPassiveListener( - wrappedEvent, - node.passive ? node.listener : null - ); - if (typeof node.listener === "function") { - try { - node.listener.call(this, wrappedEvent); - } catch (err) { - if ( - typeof console !== "undefined" && - typeof console.error === "function" - ) { - console.error(err); - } - } - } else if ( - node.listenerType !== ATTRIBUTE && - typeof node.listener.handleEvent === "function" - ) { - node.listener.handleEvent(wrappedEvent); - } - - // Break if `event.stopImmediatePropagation` was called. - if (isStopped(wrappedEvent)) { - break - } - - node = node.next; - } - setPassiveListener(wrappedEvent, null); - setEventPhase(wrappedEvent, 0); - setCurrentTarget(wrappedEvent, null); - - return !wrappedEvent.defaultPrevented - }, -}; - -// `constructor` is not enumerable. -Object.defineProperty(EventTarget.prototype, "constructor", { - value: EventTarget, - configurable: true, - writable: true, -}); - -// Ensure `eventTarget instanceof window.EventTarget` is `true`. -if ( - typeof window !== "undefined" && - typeof window.EventTarget !== "undefined" -) { - Object.setPrototypeOf(EventTarget.prototype, window.EventTarget.prototype); -} - -export default EventTarget; -export { defineEventAttribute, EventTarget }; -//# sourceMappingURL=event-target-shim.mjs.map diff --git a/reverse_engineering/node_modules/event-target-shim/dist/event-target-shim.mjs.map b/reverse_engineering/node_modules/event-target-shim/dist/event-target-shim.mjs.map deleted file mode 100644 index 57b3e8f..0000000 --- a/reverse_engineering/node_modules/event-target-shim/dist/event-target-shim.mjs.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"event-target-shim.mjs","sources":["../src/event.mjs","../src/event-target.mjs"],"sourcesContent":["/**\n * @typedef {object} PrivateData\n * @property {EventTarget} eventTarget The event target.\n * @property {{type:string}} event The original event object.\n * @property {number} eventPhase The current event phase.\n * @property {EventTarget|null} currentTarget The current event target.\n * @property {boolean} canceled The flag to prevent default.\n * @property {boolean} stopped The flag to stop propagation.\n * @property {boolean} immediateStopped The flag to stop propagation immediately.\n * @property {Function|null} passiveListener The listener if the current listener is passive. Otherwise this is null.\n * @property {number} timeStamp The unix time.\n * @private\n */\n\n/**\n * Private data for event wrappers.\n * @type {WeakMap}\n * @private\n */\nconst privateData = new WeakMap()\n\n/**\n * Cache for wrapper classes.\n * @type {WeakMap}\n * @private\n */\nconst wrappers = new WeakMap()\n\n/**\n * Get private data.\n * @param {Event} event The event object to get private data.\n * @returns {PrivateData} The private data of the event.\n * @private\n */\nfunction pd(event) {\n const retv = privateData.get(event)\n console.assert(\n retv != null,\n \"'this' is expected an Event object, but got\",\n event\n )\n return retv\n}\n\n/**\n * https://dom.spec.whatwg.org/#set-the-canceled-flag\n * @param data {PrivateData} private data.\n */\nfunction setCancelFlag(data) {\n if (data.passiveListener != null) {\n if (\n typeof console !== \"undefined\" &&\n typeof console.error === \"function\"\n ) {\n console.error(\n \"Unable to preventDefault inside passive event listener invocation.\",\n data.passiveListener\n )\n }\n return\n }\n if (!data.event.cancelable) {\n return\n }\n\n data.canceled = true\n if (typeof data.event.preventDefault === \"function\") {\n data.event.preventDefault()\n }\n}\n\n/**\n * @see https://dom.spec.whatwg.org/#interface-event\n * @private\n */\n/**\n * The event wrapper.\n * @constructor\n * @param {EventTarget} eventTarget The event target of this dispatching.\n * @param {Event|{type:string}} event The original event to wrap.\n */\nfunction Event(eventTarget, event) {\n privateData.set(this, {\n eventTarget,\n event,\n eventPhase: 2,\n currentTarget: eventTarget,\n canceled: false,\n stopped: false,\n immediateStopped: false,\n passiveListener: null,\n timeStamp: event.timeStamp || Date.now(),\n })\n\n // https://heycam.github.io/webidl/#Unforgeable\n Object.defineProperty(this, \"isTrusted\", { value: false, enumerable: true })\n\n // Define accessors\n const keys = Object.keys(event)\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i]\n if (!(key in this)) {\n Object.defineProperty(this, key, defineRedirectDescriptor(key))\n }\n }\n}\n\n// Should be enumerable, but class methods are not enumerable.\nEvent.prototype = {\n /**\n * The type of this event.\n * @type {string}\n */\n get type() {\n return pd(this).event.type\n },\n\n /**\n * The target of this event.\n * @type {EventTarget}\n */\n get target() {\n return pd(this).eventTarget\n },\n\n /**\n * The target of this event.\n * @type {EventTarget}\n */\n get currentTarget() {\n return pd(this).currentTarget\n },\n\n /**\n * @returns {EventTarget[]} The composed path of this event.\n */\n composedPath() {\n const currentTarget = pd(this).currentTarget\n if (currentTarget == null) {\n return []\n }\n return [currentTarget]\n },\n\n /**\n * Constant of NONE.\n * @type {number}\n */\n get NONE() {\n return 0\n },\n\n /**\n * Constant of CAPTURING_PHASE.\n * @type {number}\n */\n get CAPTURING_PHASE() {\n return 1\n },\n\n /**\n * Constant of AT_TARGET.\n * @type {number}\n */\n get AT_TARGET() {\n return 2\n },\n\n /**\n * Constant of BUBBLING_PHASE.\n * @type {number}\n */\n get BUBBLING_PHASE() {\n return 3\n },\n\n /**\n * The target of this event.\n * @type {number}\n */\n get eventPhase() {\n return pd(this).eventPhase\n },\n\n /**\n * Stop event bubbling.\n * @returns {void}\n */\n stopPropagation() {\n const data = pd(this)\n\n data.stopped = true\n if (typeof data.event.stopPropagation === \"function\") {\n data.event.stopPropagation()\n }\n },\n\n /**\n * Stop event bubbling.\n * @returns {void}\n */\n stopImmediatePropagation() {\n const data = pd(this)\n\n data.stopped = true\n data.immediateStopped = true\n if (typeof data.event.stopImmediatePropagation === \"function\") {\n data.event.stopImmediatePropagation()\n }\n },\n\n /**\n * The flag to be bubbling.\n * @type {boolean}\n */\n get bubbles() {\n return Boolean(pd(this).event.bubbles)\n },\n\n /**\n * The flag to be cancelable.\n * @type {boolean}\n */\n get cancelable() {\n return Boolean(pd(this).event.cancelable)\n },\n\n /**\n * Cancel this event.\n * @returns {void}\n */\n preventDefault() {\n setCancelFlag(pd(this))\n },\n\n /**\n * The flag to indicate cancellation state.\n * @type {boolean}\n */\n get defaultPrevented() {\n return pd(this).canceled\n },\n\n /**\n * The flag to be composed.\n * @type {boolean}\n */\n get composed() {\n return Boolean(pd(this).event.composed)\n },\n\n /**\n * The unix time of this event.\n * @type {number}\n */\n get timeStamp() {\n return pd(this).timeStamp\n },\n\n /**\n * The target of this event.\n * @type {EventTarget}\n * @deprecated\n */\n get srcElement() {\n return pd(this).eventTarget\n },\n\n /**\n * The flag to stop event bubbling.\n * @type {boolean}\n * @deprecated\n */\n get cancelBubble() {\n return pd(this).stopped\n },\n set cancelBubble(value) {\n if (!value) {\n return\n }\n const data = pd(this)\n\n data.stopped = true\n if (typeof data.event.cancelBubble === \"boolean\") {\n data.event.cancelBubble = true\n }\n },\n\n /**\n * The flag to indicate cancellation state.\n * @type {boolean}\n * @deprecated\n */\n get returnValue() {\n return !pd(this).canceled\n },\n set returnValue(value) {\n if (!value) {\n setCancelFlag(pd(this))\n }\n },\n\n /**\n * Initialize this event object. But do nothing under event dispatching.\n * @param {string} type The event type.\n * @param {boolean} [bubbles=false] The flag to be possible to bubble up.\n * @param {boolean} [cancelable=false] The flag to be possible to cancel.\n * @deprecated\n */\n initEvent() {\n // Do nothing.\n },\n}\n\n// `constructor` is not enumerable.\nObject.defineProperty(Event.prototype, \"constructor\", {\n value: Event,\n configurable: true,\n writable: true,\n})\n\n// Ensure `event instanceof window.Event` is `true`.\nif (typeof window !== \"undefined\" && typeof window.Event !== \"undefined\") {\n Object.setPrototypeOf(Event.prototype, window.Event.prototype)\n\n // Make association for wrappers.\n wrappers.set(window.Event.prototype, Event)\n}\n\n/**\n * Get the property descriptor to redirect a given property.\n * @param {string} key Property name to define property descriptor.\n * @returns {PropertyDescriptor} The property descriptor to redirect the property.\n * @private\n */\nfunction defineRedirectDescriptor(key) {\n return {\n get() {\n return pd(this).event[key]\n },\n set(value) {\n pd(this).event[key] = value\n },\n configurable: true,\n enumerable: true,\n }\n}\n\n/**\n * Get the property descriptor to call a given method property.\n * @param {string} key Property name to define property descriptor.\n * @returns {PropertyDescriptor} The property descriptor to call the method property.\n * @private\n */\nfunction defineCallDescriptor(key) {\n return {\n value() {\n const event = pd(this).event\n return event[key].apply(event, arguments)\n },\n configurable: true,\n enumerable: true,\n }\n}\n\n/**\n * Define new wrapper class.\n * @param {Function} BaseEvent The base wrapper class.\n * @param {Object} proto The prototype of the original event.\n * @returns {Function} The defined wrapper class.\n * @private\n */\nfunction defineWrapper(BaseEvent, proto) {\n const keys = Object.keys(proto)\n if (keys.length === 0) {\n return BaseEvent\n }\n\n /** CustomEvent */\n function CustomEvent(eventTarget, event) {\n BaseEvent.call(this, eventTarget, event)\n }\n\n CustomEvent.prototype = Object.create(BaseEvent.prototype, {\n constructor: { value: CustomEvent, configurable: true, writable: true },\n })\n\n // Define accessors.\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i]\n if (!(key in BaseEvent.prototype)) {\n const descriptor = Object.getOwnPropertyDescriptor(proto, key)\n const isFunc = typeof descriptor.value === \"function\"\n Object.defineProperty(\n CustomEvent.prototype,\n key,\n isFunc\n ? defineCallDescriptor(key)\n : defineRedirectDescriptor(key)\n )\n }\n }\n\n return CustomEvent\n}\n\n/**\n * Get the wrapper class of a given prototype.\n * @param {Object} proto The prototype of the original event to get its wrapper.\n * @returns {Function} The wrapper class.\n * @private\n */\nfunction getWrapper(proto) {\n if (proto == null || proto === Object.prototype) {\n return Event\n }\n\n let wrapper = wrappers.get(proto)\n if (wrapper == null) {\n wrapper = defineWrapper(getWrapper(Object.getPrototypeOf(proto)), proto)\n wrappers.set(proto, wrapper)\n }\n return wrapper\n}\n\n/**\n * Wrap a given event to management a dispatching.\n * @param {EventTarget} eventTarget The event target of this dispatching.\n * @param {Object} event The event to wrap.\n * @returns {Event} The wrapper instance.\n * @private\n */\nexport function wrapEvent(eventTarget, event) {\n const Wrapper = getWrapper(Object.getPrototypeOf(event))\n return new Wrapper(eventTarget, event)\n}\n\n/**\n * Get the immediateStopped flag of a given event.\n * @param {Event} event The event to get.\n * @returns {boolean} The flag to stop propagation immediately.\n * @private\n */\nexport function isStopped(event) {\n return pd(event).immediateStopped\n}\n\n/**\n * Set the current event phase of a given event.\n * @param {Event} event The event to set current target.\n * @param {number} eventPhase New event phase.\n * @returns {void}\n * @private\n */\nexport function setEventPhase(event, eventPhase) {\n pd(event).eventPhase = eventPhase\n}\n\n/**\n * Set the current target of a given event.\n * @param {Event} event The event to set current target.\n * @param {EventTarget|null} currentTarget New current target.\n * @returns {void}\n * @private\n */\nexport function setCurrentTarget(event, currentTarget) {\n pd(event).currentTarget = currentTarget\n}\n\n/**\n * Set a passive listener of a given event.\n * @param {Event} event The event to set current target.\n * @param {Function|null} passiveListener New passive listener.\n * @returns {void}\n * @private\n */\nexport function setPassiveListener(event, passiveListener) {\n pd(event).passiveListener = passiveListener\n}\n","import {\n isStopped,\n setCurrentTarget,\n setEventPhase,\n setPassiveListener,\n wrapEvent,\n} from \"./event.mjs\"\n\n/**\n * @typedef {object} ListenerNode\n * @property {Function} listener\n * @property {1|2|3} listenerType\n * @property {boolean} passive\n * @property {boolean} once\n * @property {ListenerNode|null} next\n * @private\n */\n\n/**\n * @type {WeakMap>}\n * @private\n */\nconst listenersMap = new WeakMap()\n\n// Listener types\nconst CAPTURE = 1\nconst BUBBLE = 2\nconst ATTRIBUTE = 3\n\n/**\n * Check whether a given value is an object or not.\n * @param {any} x The value to check.\n * @returns {boolean} `true` if the value is an object.\n */\nfunction isObject(x) {\n return x !== null && typeof x === \"object\" //eslint-disable-line no-restricted-syntax\n}\n\n/**\n * Get listeners.\n * @param {EventTarget} eventTarget The event target to get.\n * @returns {Map} The listeners.\n * @private\n */\nfunction getListeners(eventTarget) {\n const listeners = listenersMap.get(eventTarget)\n if (listeners == null) {\n throw new TypeError(\n \"'this' is expected an EventTarget object, but got another value.\"\n )\n }\n return listeners\n}\n\n/**\n * Get the property descriptor for the event attribute of a given event.\n * @param {string} eventName The event name to get property descriptor.\n * @returns {PropertyDescriptor} The property descriptor.\n * @private\n */\nfunction defineEventAttributeDescriptor(eventName) {\n return {\n get() {\n const listeners = getListeners(this)\n let node = listeners.get(eventName)\n while (node != null) {\n if (node.listenerType === ATTRIBUTE) {\n return node.listener\n }\n node = node.next\n }\n return null\n },\n\n set(listener) {\n if (typeof listener !== \"function\" && !isObject(listener)) {\n listener = null // eslint-disable-line no-param-reassign\n }\n const listeners = getListeners(this)\n\n // Traverse to the tail while removing old value.\n let prev = null\n let node = listeners.get(eventName)\n while (node != null) {\n if (node.listenerType === ATTRIBUTE) {\n // Remove old value.\n if (prev !== null) {\n prev.next = node.next\n } else if (node.next !== null) {\n listeners.set(eventName, node.next)\n } else {\n listeners.delete(eventName)\n }\n } else {\n prev = node\n }\n\n node = node.next\n }\n\n // Add new value.\n if (listener !== null) {\n const newNode = {\n listener,\n listenerType: ATTRIBUTE,\n passive: false,\n once: false,\n next: null,\n }\n if (prev === null) {\n listeners.set(eventName, newNode)\n } else {\n prev.next = newNode\n }\n }\n },\n configurable: true,\n enumerable: true,\n }\n}\n\n/**\n * Define an event attribute (e.g. `eventTarget.onclick`).\n * @param {Object} eventTargetPrototype The event target prototype to define an event attrbite.\n * @param {string} eventName The event name to define.\n * @returns {void}\n */\nfunction defineEventAttribute(eventTargetPrototype, eventName) {\n Object.defineProperty(\n eventTargetPrototype,\n `on${eventName}`,\n defineEventAttributeDescriptor(eventName)\n )\n}\n\n/**\n * Define a custom EventTarget with event attributes.\n * @param {string[]} eventNames Event names for event attributes.\n * @returns {EventTarget} The custom EventTarget.\n * @private\n */\nfunction defineCustomEventTarget(eventNames) {\n /** CustomEventTarget */\n function CustomEventTarget() {\n EventTarget.call(this)\n }\n\n CustomEventTarget.prototype = Object.create(EventTarget.prototype, {\n constructor: {\n value: CustomEventTarget,\n configurable: true,\n writable: true,\n },\n })\n\n for (let i = 0; i < eventNames.length; ++i) {\n defineEventAttribute(CustomEventTarget.prototype, eventNames[i])\n }\n\n return CustomEventTarget\n}\n\n/**\n * EventTarget.\n *\n * - This is constructor if no arguments.\n * - This is a function which returns a CustomEventTarget constructor if there are arguments.\n *\n * For example:\n *\n * class A extends EventTarget {}\n * class B extends EventTarget(\"message\") {}\n * class C extends EventTarget(\"message\", \"error\") {}\n * class D extends EventTarget([\"message\", \"error\"]) {}\n */\nfunction EventTarget() {\n /*eslint-disable consistent-return */\n if (this instanceof EventTarget) {\n listenersMap.set(this, new Map())\n return\n }\n if (arguments.length === 1 && Array.isArray(arguments[0])) {\n return defineCustomEventTarget(arguments[0])\n }\n if (arguments.length > 0) {\n const types = new Array(arguments.length)\n for (let i = 0; i < arguments.length; ++i) {\n types[i] = arguments[i]\n }\n return defineCustomEventTarget(types)\n }\n throw new TypeError(\"Cannot call a class as a function\")\n /*eslint-enable consistent-return */\n}\n\n// Should be enumerable, but class methods are not enumerable.\nEventTarget.prototype = {\n /**\n * Add a given listener to this event target.\n * @param {string} eventName The event name to add.\n * @param {Function} listener The listener to add.\n * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\n * @returns {void}\n */\n addEventListener(eventName, listener, options) {\n if (listener == null) {\n return\n }\n if (typeof listener !== \"function\" && !isObject(listener)) {\n throw new TypeError(\"'listener' should be a function or an object.\")\n }\n\n const listeners = getListeners(this)\n const optionsIsObj = isObject(options)\n const capture = optionsIsObj\n ? Boolean(options.capture)\n : Boolean(options)\n const listenerType = capture ? CAPTURE : BUBBLE\n const newNode = {\n listener,\n listenerType,\n passive: optionsIsObj && Boolean(options.passive),\n once: optionsIsObj && Boolean(options.once),\n next: null,\n }\n\n // Set it as the first node if the first node is null.\n let node = listeners.get(eventName)\n if (node === undefined) {\n listeners.set(eventName, newNode)\n return\n }\n\n // Traverse to the tail while checking duplication..\n let prev = null\n while (node != null) {\n if (\n node.listener === listener &&\n node.listenerType === listenerType\n ) {\n // Should ignore duplication.\n return\n }\n prev = node\n node = node.next\n }\n\n // Add it.\n prev.next = newNode\n },\n\n /**\n * Remove a given listener from this event target.\n * @param {string} eventName The event name to remove.\n * @param {Function} listener The listener to remove.\n * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\n * @returns {void}\n */\n removeEventListener(eventName, listener, options) {\n if (listener == null) {\n return\n }\n\n const listeners = getListeners(this)\n const capture = isObject(options)\n ? Boolean(options.capture)\n : Boolean(options)\n const listenerType = capture ? CAPTURE : BUBBLE\n\n let prev = null\n let node = listeners.get(eventName)\n while (node != null) {\n if (\n node.listener === listener &&\n node.listenerType === listenerType\n ) {\n if (prev !== null) {\n prev.next = node.next\n } else if (node.next !== null) {\n listeners.set(eventName, node.next)\n } else {\n listeners.delete(eventName)\n }\n return\n }\n\n prev = node\n node = node.next\n }\n },\n\n /**\n * Dispatch a given event.\n * @param {Event|{type:string}} event The event to dispatch.\n * @returns {boolean} `false` if canceled.\n */\n dispatchEvent(event) {\n if (event == null || typeof event.type !== \"string\") {\n throw new TypeError('\"event.type\" should be a string.')\n }\n\n // If listeners aren't registered, terminate.\n const listeners = getListeners(this)\n const eventName = event.type\n let node = listeners.get(eventName)\n if (node == null) {\n return true\n }\n\n // Since we cannot rewrite several properties, so wrap object.\n const wrappedEvent = wrapEvent(this, event)\n\n // This doesn't process capturing phase and bubbling phase.\n // This isn't participating in a tree.\n let prev = null\n while (node != null) {\n // Remove this listener if it's once\n if (node.once) {\n if (prev !== null) {\n prev.next = node.next\n } else if (node.next !== null) {\n listeners.set(eventName, node.next)\n } else {\n listeners.delete(eventName)\n }\n } else {\n prev = node\n }\n\n // Call this listener\n setPassiveListener(\n wrappedEvent,\n node.passive ? node.listener : null\n )\n if (typeof node.listener === \"function\") {\n try {\n node.listener.call(this, wrappedEvent)\n } catch (err) {\n if (\n typeof console !== \"undefined\" &&\n typeof console.error === \"function\"\n ) {\n console.error(err)\n }\n }\n } else if (\n node.listenerType !== ATTRIBUTE &&\n typeof node.listener.handleEvent === \"function\"\n ) {\n node.listener.handleEvent(wrappedEvent)\n }\n\n // Break if `event.stopImmediatePropagation` was called.\n if (isStopped(wrappedEvent)) {\n break\n }\n\n node = node.next\n }\n setPassiveListener(wrappedEvent, null)\n setEventPhase(wrappedEvent, 0)\n setCurrentTarget(wrappedEvent, null)\n\n return !wrappedEvent.defaultPrevented\n },\n}\n\n// `constructor` is not enumerable.\nObject.defineProperty(EventTarget.prototype, \"constructor\", {\n value: EventTarget,\n configurable: true,\n writable: true,\n})\n\n// Ensure `eventTarget instanceof window.EventTarget` is `true`.\nif (\n typeof window !== \"undefined\" &&\n typeof window.EventTarget !== \"undefined\"\n) {\n Object.setPrototypeOf(EventTarget.prototype, window.EventTarget.prototype)\n}\n\nexport { defineEventAttribute, EventTarget }\nexport default EventTarget\n"],"names":[],"mappings":";;;;;AAAA;;;;;;;;;;;;;;;;;;;AAmBA,MAAM,WAAW,GAAG,IAAI,OAAO,GAAE;;;;;;;AAOjC,MAAM,QAAQ,GAAG,IAAI,OAAO,GAAE;;;;;;;;AAQ9B,SAAS,EAAE,CAAC,KAAK,EAAE;IACf,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,EAAC;IACnC,OAAO,CAAC,MAAM;QACV,IAAI,IAAI,IAAI;QACZ,6CAA6C;QAC7C,KAAK;MACR;IACD,OAAO,IAAI;CACd;;;;;;AAMD,SAAS,aAAa,CAAC,IAAI,EAAE;IACzB,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,EAAE;QAC9B;YACI,OAAO,OAAO,KAAK,WAAW;YAC9B,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU;UACrC;YACE,OAAO,CAAC,KAAK;gBACT,oEAAoE;gBACpE,IAAI,CAAC,eAAe;cACvB;SACJ;QACD,MAAM;KACT;IACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;QACxB,MAAM;KACT;;IAED,IAAI,CAAC,QAAQ,GAAG,KAAI;IACpB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,KAAK,UAAU,EAAE;QACjD,IAAI,CAAC,KAAK,CAAC,cAAc,GAAE;KAC9B;CACJ;;;;;;;;;;;;AAYD,SAAS,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE;IAC/B,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE;QAClB,WAAW;QACX,KAAK;QACL,UAAU,EAAE,CAAC;QACb,aAAa,EAAE,WAAW;QAC1B,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,KAAK;QACd,gBAAgB,EAAE,KAAK;QACvB,eAAe,EAAE,IAAI;QACrB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;KAC3C,EAAC;;;IAGF,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,EAAC;;;IAG5E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,EAAC;QACnB,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,EAAE;YAChB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,wBAAwB,CAAC,GAAG,CAAC,EAAC;SAClE;KACJ;CACJ;;;AAGD,KAAK,CAAC,SAAS,GAAG;;;;;IAKd,IAAI,IAAI,GAAG;QACP,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI;KAC7B;;;;;;IAMD,IAAI,MAAM,GAAG;QACT,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW;KAC9B;;;;;;IAMD,IAAI,aAAa,GAAG;QAChB,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,aAAa;KAChC;;;;;IAKD,YAAY,GAAG;QACX,MAAM,aAAa,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,cAAa;QAC5C,IAAI,aAAa,IAAI,IAAI,EAAE;YACvB,OAAO,EAAE;SACZ;QACD,OAAO,CAAC,aAAa,CAAC;KACzB;;;;;;IAMD,IAAI,IAAI,GAAG;QACP,OAAO,CAAC;KACX;;;;;;IAMD,IAAI,eAAe,GAAG;QAClB,OAAO,CAAC;KACX;;;;;;IAMD,IAAI,SAAS,GAAG;QACZ,OAAO,CAAC;KACX;;;;;;IAMD,IAAI,cAAc,GAAG;QACjB,OAAO,CAAC;KACX;;;;;;IAMD,IAAI,UAAU,GAAG;QACb,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU;KAC7B;;;;;;IAMD,eAAe,GAAG;QACd,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAC;;QAErB,IAAI,CAAC,OAAO,GAAG,KAAI;QACnB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,KAAK,UAAU,EAAE;YAClD,IAAI,CAAC,KAAK,CAAC,eAAe,GAAE;SAC/B;KACJ;;;;;;IAMD,wBAAwB,GAAG;QACvB,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAC;;QAErB,IAAI,CAAC,OAAO,GAAG,KAAI;QACnB,IAAI,CAAC,gBAAgB,GAAG,KAAI;QAC5B,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,wBAAwB,KAAK,UAAU,EAAE;YAC3D,IAAI,CAAC,KAAK,CAAC,wBAAwB,GAAE;SACxC;KACJ;;;;;;IAMD,IAAI,OAAO,GAAG;QACV,OAAO,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;KACzC;;;;;;IAMD,IAAI,UAAU,GAAG;QACb,OAAO,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;KAC5C;;;;;;IAMD,cAAc,GAAG;QACb,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,EAAC;KAC1B;;;;;;IAMD,IAAI,gBAAgB,GAAG;QACnB,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ;KAC3B;;;;;;IAMD,IAAI,QAAQ,GAAG;QACX,OAAO,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;KAC1C;;;;;;IAMD,IAAI,SAAS,GAAG;QACZ,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS;KAC5B;;;;;;;IAOD,IAAI,UAAU,GAAG;QACb,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW;KAC9B;;;;;;;IAOD,IAAI,YAAY,GAAG;QACf,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO;KAC1B;IACD,IAAI,YAAY,CAAC,KAAK,EAAE;QACpB,IAAI,CAAC,KAAK,EAAE;YACR,MAAM;SACT;QACD,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAC;;QAErB,IAAI,CAAC,OAAO,GAAG,KAAI;QACnB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE;YAC9C,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,KAAI;SACjC;KACJ;;;;;;;IAOD,IAAI,WAAW,GAAG;QACd,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ;KAC5B;IACD,IAAI,WAAW,CAAC,KAAK,EAAE;QACnB,IAAI,CAAC,KAAK,EAAE;YACR,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,EAAC;SAC1B;KACJ;;;;;;;;;IASD,SAAS,GAAG;;KAEX;EACJ;;;AAGD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,aAAa,EAAE;IAClD,KAAK,EAAE,KAAK;IACZ,YAAY,EAAE,IAAI;IAClB,QAAQ,EAAE,IAAI;CACjB,EAAC;;;AAGF,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,WAAW,EAAE;IACtE,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,EAAC;;;IAG9D,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,EAAC;CAC9C;;;;;;;;AAQD,SAAS,wBAAwB,CAAC,GAAG,EAAE;IACnC,OAAO;QACH,GAAG,GAAG;YACF,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;SAC7B;QACD,GAAG,CAAC,KAAK,EAAE;YACP,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,MAAK;SAC9B;QACD,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI;KACnB;CACJ;;;;;;;;AAQD,SAAS,oBAAoB,CAAC,GAAG,EAAE;IAC/B,OAAO;QACH,KAAK,GAAG;YACJ,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,MAAK;YAC5B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC;SAC5C;QACD,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI;KACnB;CACJ;;;;;;;;;AASD,SAAS,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAC;IAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QACnB,OAAO,SAAS;KACnB;;;IAGD,SAAS,WAAW,CAAC,WAAW,EAAE,KAAK,EAAE;QACrC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAC;KAC3C;;IAED,WAAW,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE;QACvD,WAAW,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;KAC1E,EAAC;;;IAGF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,EAAC;QACnB,IAAI,EAAE,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE;YAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,GAAG,EAAC;YAC9D,MAAM,MAAM,GAAG,OAAO,UAAU,CAAC,KAAK,KAAK,WAAU;YACrD,MAAM,CAAC,cAAc;gBACjB,WAAW,CAAC,SAAS;gBACrB,GAAG;gBACH,MAAM;sBACA,oBAAoB,CAAC,GAAG,CAAC;sBACzB,wBAAwB,CAAC,GAAG,CAAC;cACtC;SACJ;KACJ;;IAED,OAAO,WAAW;CACrB;;;;;;;;AAQD,SAAS,UAAU,CAAC,KAAK,EAAE;IACvB,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,MAAM,CAAC,SAAS,EAAE;QAC7C,OAAO,KAAK;KACf;;IAED,IAAI,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAC;IACjC,IAAI,OAAO,IAAI,IAAI,EAAE;QACjB,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAC;QACxE,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAC;KAC/B;IACD,OAAO,OAAO;CACjB;;;;;;;;;AASD,AAAO,SAAS,SAAS,CAAC,WAAW,EAAE,KAAK,EAAE;IAC1C,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,EAAC;IACxD,OAAO,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC;CACzC;;;;;;;;AAQD,AAAO,SAAS,SAAS,CAAC,KAAK,EAAE;IAC7B,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,gBAAgB;CACpC;;;;;;;;;AASD,AAAO,SAAS,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE;IAC7C,EAAE,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,WAAU;CACpC;;;;;;;;;AASD,AAAO,SAAS,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE;IACnD,EAAE,CAAC,KAAK,CAAC,CAAC,aAAa,GAAG,cAAa;CAC1C;;;;;;;;;AASD,AAAO,SAAS,kBAAkB,CAAC,KAAK,EAAE,eAAe,EAAE;IACvD,EAAE,CAAC,KAAK,CAAC,CAAC,eAAe,GAAG,gBAAe;CAC9C;;ACtdD;;;;;;;;;;;;;;AAcA,MAAM,YAAY,GAAG,IAAI,OAAO,GAAE;;;AAGlC,MAAM,OAAO,GAAG,EAAC;AACjB,MAAM,MAAM,GAAG,EAAC;AAChB,MAAM,SAAS,GAAG,EAAC;;;;;;;AAOnB,SAAS,QAAQ,CAAC,CAAC,EAAE;IACjB,OAAO,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ;CAC7C;;;;;;;;AAQD,SAAS,YAAY,CAAC,WAAW,EAAE;IAC/B,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,EAAC;IAC/C,IAAI,SAAS,IAAI,IAAI,EAAE;QACnB,MAAM,IAAI,SAAS;YACf,kEAAkE;SACrE;KACJ;IACD,OAAO,SAAS;CACnB;;;;;;;;AAQD,SAAS,8BAA8B,CAAC,SAAS,EAAE;IAC/C,OAAO;QACH,GAAG,GAAG;YACF,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAC;YACpC,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,EAAC;YACnC,OAAO,IAAI,IAAI,IAAI,EAAE;gBACjB,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;oBACjC,OAAO,IAAI,CAAC,QAAQ;iBACvB;gBACD,IAAI,GAAG,IAAI,CAAC,KAAI;aACnB;YACD,OAAO,IAAI;SACd;;QAED,GAAG,CAAC,QAAQ,EAAE;YACV,IAAI,OAAO,QAAQ,KAAK,UAAU,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBACvD,QAAQ,GAAG,KAAI;aAClB;YACD,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAC;;;YAGpC,IAAI,IAAI,GAAG,KAAI;YACf,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,EAAC;YACnC,OAAO,IAAI,IAAI,IAAI,EAAE;gBACjB,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;;oBAEjC,IAAI,IAAI,KAAK,IAAI,EAAE;wBACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAI;qBACxB,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;wBAC3B,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAC;qBACtC,MAAM;wBACH,SAAS,CAAC,MAAM,CAAC,SAAS,EAAC;qBAC9B;iBACJ,MAAM;oBACH,IAAI,GAAG,KAAI;iBACd;;gBAED,IAAI,GAAG,IAAI,CAAC,KAAI;aACnB;;;YAGD,IAAI,QAAQ,KAAK,IAAI,EAAE;gBACnB,MAAM,OAAO,GAAG;oBACZ,QAAQ;oBACR,YAAY,EAAE,SAAS;oBACvB,OAAO,EAAE,KAAK;oBACd,IAAI,EAAE,KAAK;oBACX,IAAI,EAAE,IAAI;kBACb;gBACD,IAAI,IAAI,KAAK,IAAI,EAAE;oBACf,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,EAAC;iBACpC,MAAM;oBACH,IAAI,CAAC,IAAI,GAAG,QAAO;iBACtB;aACJ;SACJ;QACD,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI;KACnB;CACJ;;;;;;;;AAQD,SAAS,oBAAoB,CAAC,oBAAoB,EAAE,SAAS,EAAE;IAC3D,MAAM,CAAC,cAAc;QACjB,oBAAoB;QACpB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAChB,8BAA8B,CAAC,SAAS,CAAC;MAC5C;CACJ;;;;;;;;AAQD,SAAS,uBAAuB,CAAC,UAAU,EAAE;;IAEzC,SAAS,iBAAiB,GAAG;QACzB,WAAW,CAAC,IAAI,CAAC,IAAI,EAAC;KACzB;;IAED,iBAAiB,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE;QAC/D,WAAW,EAAE;YACT,KAAK,EAAE,iBAAiB;YACxB,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,IAAI;SACjB;KACJ,EAAC;;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;QACxC,oBAAoB,CAAC,iBAAiB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,EAAC;KACnE;;IAED,OAAO,iBAAiB;CAC3B;;;;;;;;;;;;;;;AAeD,SAAS,WAAW,GAAG;;IAEnB,IAAI,IAAI,YAAY,WAAW,EAAE;QAC7B,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,EAAC;QACjC,MAAM;KACT;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;QACvD,OAAO,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;KAC/C;IACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;QACtB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,EAAC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YACvC,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAC;SAC1B;QACD,OAAO,uBAAuB,CAAC,KAAK,CAAC;KACxC;IACD,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC;;CAE3D;;;AAGD,WAAW,CAAC,SAAS,GAAG;;;;;;;;IAQpB,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE;QAC3C,IAAI,QAAQ,IAAI,IAAI,EAAE;YAClB,MAAM;SACT;QACD,IAAI,OAAO,QAAQ,KAAK,UAAU,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YACvD,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC;SACvE;;QAED,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAC;QACpC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,EAAC;QACtC,MAAM,OAAO,GAAG,YAAY;cACtB,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;cACxB,OAAO,CAAC,OAAO,EAAC;QACtB,MAAM,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,OAAM;QAC/C,MAAM,OAAO,GAAG;YACZ,QAAQ;YACR,YAAY;YACZ,OAAO,EAAE,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;YACjD,IAAI,EAAE,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;YAC3C,IAAI,EAAE,IAAI;UACb;;;QAGD,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,EAAC;QACnC,IAAI,IAAI,KAAK,SAAS,EAAE;YACpB,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,EAAC;YACjC,MAAM;SACT;;;QAGD,IAAI,IAAI,GAAG,KAAI;QACf,OAAO,IAAI,IAAI,IAAI,EAAE;YACjB;gBACI,IAAI,CAAC,QAAQ,KAAK,QAAQ;gBAC1B,IAAI,CAAC,YAAY,KAAK,YAAY;cACpC;;gBAEE,MAAM;aACT;YACD,IAAI,GAAG,KAAI;YACX,IAAI,GAAG,IAAI,CAAC,KAAI;SACnB;;;QAGD,IAAI,CAAC,IAAI,GAAG,QAAO;KACtB;;;;;;;;;IASD,mBAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE;QAC9C,IAAI,QAAQ,IAAI,IAAI,EAAE;YAClB,MAAM;SACT;;QAED,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAC;QACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;cAC3B,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;cACxB,OAAO,CAAC,OAAO,EAAC;QACtB,MAAM,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,OAAM;;QAE/C,IAAI,IAAI,GAAG,KAAI;QACf,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,EAAC;QACnC,OAAO,IAAI,IAAI,IAAI,EAAE;YACjB;gBACI,IAAI,CAAC,QAAQ,KAAK,QAAQ;gBAC1B,IAAI,CAAC,YAAY,KAAK,YAAY;cACpC;gBACE,IAAI,IAAI,KAAK,IAAI,EAAE;oBACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAI;iBACxB,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;oBAC3B,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAC;iBACtC,MAAM;oBACH,SAAS,CAAC,MAAM,CAAC,SAAS,EAAC;iBAC9B;gBACD,MAAM;aACT;;YAED,IAAI,GAAG,KAAI;YACX,IAAI,GAAG,IAAI,CAAC,KAAI;SACnB;KACJ;;;;;;;IAOD,aAAa,CAAC,KAAK,EAAE;QACjB,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;YACjD,MAAM,IAAI,SAAS,CAAC,kCAAkC,CAAC;SAC1D;;;QAGD,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAC;QACpC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAI;QAC5B,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,EAAC;QACnC,IAAI,IAAI,IAAI,IAAI,EAAE;YACd,OAAO,IAAI;SACd;;;QAGD,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,EAAC;;;;QAI3C,IAAI,IAAI,GAAG,KAAI;QACf,OAAO,IAAI,IAAI,IAAI,EAAE;;YAEjB,IAAI,IAAI,CAAC,IAAI,EAAE;gBACX,IAAI,IAAI,KAAK,IAAI,EAAE;oBACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAI;iBACxB,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;oBAC3B,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAC;iBACtC,MAAM;oBACH,SAAS,CAAC,MAAM,CAAC,SAAS,EAAC;iBAC9B;aACJ,MAAM;gBACH,IAAI,GAAG,KAAI;aACd;;;YAGD,kBAAkB;gBACd,YAAY;gBACZ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI;cACtC;YACD,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE;gBACrC,IAAI;oBACA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,EAAC;iBACzC,CAAC,OAAO,GAAG,EAAE;oBACV;wBACI,OAAO,OAAO,KAAK,WAAW;wBAC9B,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU;sBACrC;wBACE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAC;qBACrB;iBACJ;aACJ,MAAM;gBACH,IAAI,CAAC,YAAY,KAAK,SAAS;gBAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,KAAK,UAAU;cACjD;gBACE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAC;aAC1C;;;YAGD,IAAI,SAAS,CAAC,YAAY,CAAC,EAAE;gBACzB,KAAK;aACR;;YAED,IAAI,GAAG,IAAI,CAAC,KAAI;SACnB;QACD,kBAAkB,CAAC,YAAY,EAAE,IAAI,EAAC;QACtC,aAAa,CAAC,YAAY,EAAE,CAAC,EAAC;QAC9B,gBAAgB,CAAC,YAAY,EAAE,IAAI,EAAC;;QAEpC,OAAO,CAAC,YAAY,CAAC,gBAAgB;KACxC;EACJ;;;AAGD,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,EAAE,aAAa,EAAE;IACxD,KAAK,EAAE,WAAW;IAClB,YAAY,EAAE,IAAI;IAClB,QAAQ,EAAE,IAAI;CACjB,EAAC;;;AAGF;IACI,OAAO,MAAM,KAAK,WAAW;IAC7B,OAAO,MAAM,CAAC,WAAW,KAAK,WAAW;EAC3C;IACE,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,SAAS,EAAC;CAC7E;;;;;"} \ No newline at end of file diff --git a/reverse_engineering/node_modules/event-target-shim/dist/event-target-shim.umd.js b/reverse_engineering/node_modules/event-target-shim/dist/event-target-shim.umd.js deleted file mode 100644 index e7cf5d4..0000000 --- a/reverse_engineering/node_modules/event-target-shim/dist/event-target-shim.umd.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @author Toru Nagashima - * @copyright 2015 Toru Nagashima. All rights reserved. - * See LICENSE file in root directory for full license. - */(function(a,b){"object"==typeof exports&&"undefined"!=typeof module?b(exports):"function"==typeof define&&define.amd?define(["exports"],b):(a=a||self,b(a.EventTargetShim={}))})(this,function(a){"use strict";function b(a){return b="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},b(a)}function c(a){var b=u.get(a);return console.assert(null!=b,"'this' is expected an Event object, but got",a),b}function d(a){return null==a.passiveListener?void(!a.event.cancelable||(a.canceled=!0,"function"==typeof a.event.preventDefault&&a.event.preventDefault())):void("undefined"!=typeof console&&"function"==typeof console.error&&console.error("Unable to preventDefault inside passive event listener invocation.",a.passiveListener))}function e(a,b){u.set(this,{eventTarget:a,event:b,eventPhase:2,currentTarget:a,canceled:!1,stopped:!1,immediateStopped:!1,passiveListener:null,timeStamp:b.timeStamp||Date.now()}),Object.defineProperty(this,"isTrusted",{value:!1,enumerable:!0});for(var c,d=Object.keys(b),e=0;e}\n * @private\n */\nconst privateData = new WeakMap()\n\n/**\n * Cache for wrapper classes.\n * @type {WeakMap}\n * @private\n */\nconst wrappers = new WeakMap()\n\n/**\n * Get private data.\n * @param {Event} event The event object to get private data.\n * @returns {PrivateData} The private data of the event.\n * @private\n */\nfunction pd(event) {\n const retv = privateData.get(event)\n console.assert(\n retv != null,\n \"'this' is expected an Event object, but got\",\n event\n )\n return retv\n}\n\n/**\n * https://dom.spec.whatwg.org/#set-the-canceled-flag\n * @param data {PrivateData} private data.\n */\nfunction setCancelFlag(data) {\n if (data.passiveListener != null) {\n if (\n typeof console !== \"undefined\" &&\n typeof console.error === \"function\"\n ) {\n console.error(\n \"Unable to preventDefault inside passive event listener invocation.\",\n data.passiveListener\n )\n }\n return\n }\n if (!data.event.cancelable) {\n return\n }\n\n data.canceled = true\n if (typeof data.event.preventDefault === \"function\") {\n data.event.preventDefault()\n }\n}\n\n/**\n * @see https://dom.spec.whatwg.org/#interface-event\n * @private\n */\n/**\n * The event wrapper.\n * @constructor\n * @param {EventTarget} eventTarget The event target of this dispatching.\n * @param {Event|{type:string}} event The original event to wrap.\n */\nfunction Event(eventTarget, event) {\n privateData.set(this, {\n eventTarget,\n event,\n eventPhase: 2,\n currentTarget: eventTarget,\n canceled: false,\n stopped: false,\n immediateStopped: false,\n passiveListener: null,\n timeStamp: event.timeStamp || Date.now(),\n })\n\n // https://heycam.github.io/webidl/#Unforgeable\n Object.defineProperty(this, \"isTrusted\", { value: false, enumerable: true })\n\n // Define accessors\n const keys = Object.keys(event)\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i]\n if (!(key in this)) {\n Object.defineProperty(this, key, defineRedirectDescriptor(key))\n }\n }\n}\n\n// Should be enumerable, but class methods are not enumerable.\nEvent.prototype = {\n /**\n * The type of this event.\n * @type {string}\n */\n get type() {\n return pd(this).event.type\n },\n\n /**\n * The target of this event.\n * @type {EventTarget}\n */\n get target() {\n return pd(this).eventTarget\n },\n\n /**\n * The target of this event.\n * @type {EventTarget}\n */\n get currentTarget() {\n return pd(this).currentTarget\n },\n\n /**\n * @returns {EventTarget[]} The composed path of this event.\n */\n composedPath() {\n const currentTarget = pd(this).currentTarget\n if (currentTarget == null) {\n return []\n }\n return [currentTarget]\n },\n\n /**\n * Constant of NONE.\n * @type {number}\n */\n get NONE() {\n return 0\n },\n\n /**\n * Constant of CAPTURING_PHASE.\n * @type {number}\n */\n get CAPTURING_PHASE() {\n return 1\n },\n\n /**\n * Constant of AT_TARGET.\n * @type {number}\n */\n get AT_TARGET() {\n return 2\n },\n\n /**\n * Constant of BUBBLING_PHASE.\n * @type {number}\n */\n get BUBBLING_PHASE() {\n return 3\n },\n\n /**\n * The target of this event.\n * @type {number}\n */\n get eventPhase() {\n return pd(this).eventPhase\n },\n\n /**\n * Stop event bubbling.\n * @returns {void}\n */\n stopPropagation() {\n const data = pd(this)\n\n data.stopped = true\n if (typeof data.event.stopPropagation === \"function\") {\n data.event.stopPropagation()\n }\n },\n\n /**\n * Stop event bubbling.\n * @returns {void}\n */\n stopImmediatePropagation() {\n const data = pd(this)\n\n data.stopped = true\n data.immediateStopped = true\n if (typeof data.event.stopImmediatePropagation === \"function\") {\n data.event.stopImmediatePropagation()\n }\n },\n\n /**\n * The flag to be bubbling.\n * @type {boolean}\n */\n get bubbles() {\n return Boolean(pd(this).event.bubbles)\n },\n\n /**\n * The flag to be cancelable.\n * @type {boolean}\n */\n get cancelable() {\n return Boolean(pd(this).event.cancelable)\n },\n\n /**\n * Cancel this event.\n * @returns {void}\n */\n preventDefault() {\n setCancelFlag(pd(this))\n },\n\n /**\n * The flag to indicate cancellation state.\n * @type {boolean}\n */\n get defaultPrevented() {\n return pd(this).canceled\n },\n\n /**\n * The flag to be composed.\n * @type {boolean}\n */\n get composed() {\n return Boolean(pd(this).event.composed)\n },\n\n /**\n * The unix time of this event.\n * @type {number}\n */\n get timeStamp() {\n return pd(this).timeStamp\n },\n\n /**\n * The target of this event.\n * @type {EventTarget}\n * @deprecated\n */\n get srcElement() {\n return pd(this).eventTarget\n },\n\n /**\n * The flag to stop event bubbling.\n * @type {boolean}\n * @deprecated\n */\n get cancelBubble() {\n return pd(this).stopped\n },\n set cancelBubble(value) {\n if (!value) {\n return\n }\n const data = pd(this)\n\n data.stopped = true\n if (typeof data.event.cancelBubble === \"boolean\") {\n data.event.cancelBubble = true\n }\n },\n\n /**\n * The flag to indicate cancellation state.\n * @type {boolean}\n * @deprecated\n */\n get returnValue() {\n return !pd(this).canceled\n },\n set returnValue(value) {\n if (!value) {\n setCancelFlag(pd(this))\n }\n },\n\n /**\n * Initialize this event object. But do nothing under event dispatching.\n * @param {string} type The event type.\n * @param {boolean} [bubbles=false] The flag to be possible to bubble up.\n * @param {boolean} [cancelable=false] The flag to be possible to cancel.\n * @deprecated\n */\n initEvent() {\n // Do nothing.\n },\n}\n\n// `constructor` is not enumerable.\nObject.defineProperty(Event.prototype, \"constructor\", {\n value: Event,\n configurable: true,\n writable: true,\n})\n\n// Ensure `event instanceof window.Event` is `true`.\nif (typeof window !== \"undefined\" && typeof window.Event !== \"undefined\") {\n Object.setPrototypeOf(Event.prototype, window.Event.prototype)\n\n // Make association for wrappers.\n wrappers.set(window.Event.prototype, Event)\n}\n\n/**\n * Get the property descriptor to redirect a given property.\n * @param {string} key Property name to define property descriptor.\n * @returns {PropertyDescriptor} The property descriptor to redirect the property.\n * @private\n */\nfunction defineRedirectDescriptor(key) {\n return {\n get() {\n return pd(this).event[key]\n },\n set(value) {\n pd(this).event[key] = value\n },\n configurable: true,\n enumerable: true,\n }\n}\n\n/**\n * Get the property descriptor to call a given method property.\n * @param {string} key Property name to define property descriptor.\n * @returns {PropertyDescriptor} The property descriptor to call the method property.\n * @private\n */\nfunction defineCallDescriptor(key) {\n return {\n value() {\n const event = pd(this).event\n return event[key].apply(event, arguments)\n },\n configurable: true,\n enumerable: true,\n }\n}\n\n/**\n * Define new wrapper class.\n * @param {Function} BaseEvent The base wrapper class.\n * @param {Object} proto The prototype of the original event.\n * @returns {Function} The defined wrapper class.\n * @private\n */\nfunction defineWrapper(BaseEvent, proto) {\n const keys = Object.keys(proto)\n if (keys.length === 0) {\n return BaseEvent\n }\n\n /** CustomEvent */\n function CustomEvent(eventTarget, event) {\n BaseEvent.call(this, eventTarget, event)\n }\n\n CustomEvent.prototype = Object.create(BaseEvent.prototype, {\n constructor: { value: CustomEvent, configurable: true, writable: true },\n })\n\n // Define accessors.\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i]\n if (!(key in BaseEvent.prototype)) {\n const descriptor = Object.getOwnPropertyDescriptor(proto, key)\n const isFunc = typeof descriptor.value === \"function\"\n Object.defineProperty(\n CustomEvent.prototype,\n key,\n isFunc\n ? defineCallDescriptor(key)\n : defineRedirectDescriptor(key)\n )\n }\n }\n\n return CustomEvent\n}\n\n/**\n * Get the wrapper class of a given prototype.\n * @param {Object} proto The prototype of the original event to get its wrapper.\n * @returns {Function} The wrapper class.\n * @private\n */\nfunction getWrapper(proto) {\n if (proto == null || proto === Object.prototype) {\n return Event\n }\n\n let wrapper = wrappers.get(proto)\n if (wrapper == null) {\n wrapper = defineWrapper(getWrapper(Object.getPrototypeOf(proto)), proto)\n wrappers.set(proto, wrapper)\n }\n return wrapper\n}\n\n/**\n * Wrap a given event to management a dispatching.\n * @param {EventTarget} eventTarget The event target of this dispatching.\n * @param {Object} event The event to wrap.\n * @returns {Event} The wrapper instance.\n * @private\n */\nexport function wrapEvent(eventTarget, event) {\n const Wrapper = getWrapper(Object.getPrototypeOf(event))\n return new Wrapper(eventTarget, event)\n}\n\n/**\n * Get the immediateStopped flag of a given event.\n * @param {Event} event The event to get.\n * @returns {boolean} The flag to stop propagation immediately.\n * @private\n */\nexport function isStopped(event) {\n return pd(event).immediateStopped\n}\n\n/**\n * Set the current event phase of a given event.\n * @param {Event} event The event to set current target.\n * @param {number} eventPhase New event phase.\n * @returns {void}\n * @private\n */\nexport function setEventPhase(event, eventPhase) {\n pd(event).eventPhase = eventPhase\n}\n\n/**\n * Set the current target of a given event.\n * @param {Event} event The event to set current target.\n * @param {EventTarget|null} currentTarget New current target.\n * @returns {void}\n * @private\n */\nexport function setCurrentTarget(event, currentTarget) {\n pd(event).currentTarget = currentTarget\n}\n\n/**\n * Set a passive listener of a given event.\n * @param {Event} event The event to set current target.\n * @param {Function|null} passiveListener New passive listener.\n * @returns {void}\n * @private\n */\nexport function setPassiveListener(event, passiveListener) {\n pd(event).passiveListener = passiveListener\n}\n","import {\n isStopped,\n setCurrentTarget,\n setEventPhase,\n setPassiveListener,\n wrapEvent,\n} from \"./event.mjs\"\n\n/**\n * @typedef {object} ListenerNode\n * @property {Function} listener\n * @property {1|2|3} listenerType\n * @property {boolean} passive\n * @property {boolean} once\n * @property {ListenerNode|null} next\n * @private\n */\n\n/**\n * @type {WeakMap>}\n * @private\n */\nconst listenersMap = new WeakMap()\n\n// Listener types\nconst CAPTURE = 1\nconst BUBBLE = 2\nconst ATTRIBUTE = 3\n\n/**\n * Check whether a given value is an object or not.\n * @param {any} x The value to check.\n * @returns {boolean} `true` if the value is an object.\n */\nfunction isObject(x) {\n return x !== null && typeof x === \"object\" //eslint-disable-line no-restricted-syntax\n}\n\n/**\n * Get listeners.\n * @param {EventTarget} eventTarget The event target to get.\n * @returns {Map} The listeners.\n * @private\n */\nfunction getListeners(eventTarget) {\n const listeners = listenersMap.get(eventTarget)\n if (listeners == null) {\n throw new TypeError(\n \"'this' is expected an EventTarget object, but got another value.\"\n )\n }\n return listeners\n}\n\n/**\n * Get the property descriptor for the event attribute of a given event.\n * @param {string} eventName The event name to get property descriptor.\n * @returns {PropertyDescriptor} The property descriptor.\n * @private\n */\nfunction defineEventAttributeDescriptor(eventName) {\n return {\n get() {\n const listeners = getListeners(this)\n let node = listeners.get(eventName)\n while (node != null) {\n if (node.listenerType === ATTRIBUTE) {\n return node.listener\n }\n node = node.next\n }\n return null\n },\n\n set(listener) {\n if (typeof listener !== \"function\" && !isObject(listener)) {\n listener = null // eslint-disable-line no-param-reassign\n }\n const listeners = getListeners(this)\n\n // Traverse to the tail while removing old value.\n let prev = null\n let node = listeners.get(eventName)\n while (node != null) {\n if (node.listenerType === ATTRIBUTE) {\n // Remove old value.\n if (prev !== null) {\n prev.next = node.next\n } else if (node.next !== null) {\n listeners.set(eventName, node.next)\n } else {\n listeners.delete(eventName)\n }\n } else {\n prev = node\n }\n\n node = node.next\n }\n\n // Add new value.\n if (listener !== null) {\n const newNode = {\n listener,\n listenerType: ATTRIBUTE,\n passive: false,\n once: false,\n next: null,\n }\n if (prev === null) {\n listeners.set(eventName, newNode)\n } else {\n prev.next = newNode\n }\n }\n },\n configurable: true,\n enumerable: true,\n }\n}\n\n/**\n * Define an event attribute (e.g. `eventTarget.onclick`).\n * @param {Object} eventTargetPrototype The event target prototype to define an event attrbite.\n * @param {string} eventName The event name to define.\n * @returns {void}\n */\nfunction defineEventAttribute(eventTargetPrototype, eventName) {\n Object.defineProperty(\n eventTargetPrototype,\n `on${eventName}`,\n defineEventAttributeDescriptor(eventName)\n )\n}\n\n/**\n * Define a custom EventTarget with event attributes.\n * @param {string[]} eventNames Event names for event attributes.\n * @returns {EventTarget} The custom EventTarget.\n * @private\n */\nfunction defineCustomEventTarget(eventNames) {\n /** CustomEventTarget */\n function CustomEventTarget() {\n EventTarget.call(this)\n }\n\n CustomEventTarget.prototype = Object.create(EventTarget.prototype, {\n constructor: {\n value: CustomEventTarget,\n configurable: true,\n writable: true,\n },\n })\n\n for (let i = 0; i < eventNames.length; ++i) {\n defineEventAttribute(CustomEventTarget.prototype, eventNames[i])\n }\n\n return CustomEventTarget\n}\n\n/**\n * EventTarget.\n *\n * - This is constructor if no arguments.\n * - This is a function which returns a CustomEventTarget constructor if there are arguments.\n *\n * For example:\n *\n * class A extends EventTarget {}\n * class B extends EventTarget(\"message\") {}\n * class C extends EventTarget(\"message\", \"error\") {}\n * class D extends EventTarget([\"message\", \"error\"]) {}\n */\nfunction EventTarget() {\n /*eslint-disable consistent-return */\n if (this instanceof EventTarget) {\n listenersMap.set(this, new Map())\n return\n }\n if (arguments.length === 1 && Array.isArray(arguments[0])) {\n return defineCustomEventTarget(arguments[0])\n }\n if (arguments.length > 0) {\n const types = new Array(arguments.length)\n for (let i = 0; i < arguments.length; ++i) {\n types[i] = arguments[i]\n }\n return defineCustomEventTarget(types)\n }\n throw new TypeError(\"Cannot call a class as a function\")\n /*eslint-enable consistent-return */\n}\n\n// Should be enumerable, but class methods are not enumerable.\nEventTarget.prototype = {\n /**\n * Add a given listener to this event target.\n * @param {string} eventName The event name to add.\n * @param {Function} listener The listener to add.\n * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\n * @returns {void}\n */\n addEventListener(eventName, listener, options) {\n if (listener == null) {\n return\n }\n if (typeof listener !== \"function\" && !isObject(listener)) {\n throw new TypeError(\"'listener' should be a function or an object.\")\n }\n\n const listeners = getListeners(this)\n const optionsIsObj = isObject(options)\n const capture = optionsIsObj\n ? Boolean(options.capture)\n : Boolean(options)\n const listenerType = capture ? CAPTURE : BUBBLE\n const newNode = {\n listener,\n listenerType,\n passive: optionsIsObj && Boolean(options.passive),\n once: optionsIsObj && Boolean(options.once),\n next: null,\n }\n\n // Set it as the first node if the first node is null.\n let node = listeners.get(eventName)\n if (node === undefined) {\n listeners.set(eventName, newNode)\n return\n }\n\n // Traverse to the tail while checking duplication..\n let prev = null\n while (node != null) {\n if (\n node.listener === listener &&\n node.listenerType === listenerType\n ) {\n // Should ignore duplication.\n return\n }\n prev = node\n node = node.next\n }\n\n // Add it.\n prev.next = newNode\n },\n\n /**\n * Remove a given listener from this event target.\n * @param {string} eventName The event name to remove.\n * @param {Function} listener The listener to remove.\n * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\n * @returns {void}\n */\n removeEventListener(eventName, listener, options) {\n if (listener == null) {\n return\n }\n\n const listeners = getListeners(this)\n const capture = isObject(options)\n ? Boolean(options.capture)\n : Boolean(options)\n const listenerType = capture ? CAPTURE : BUBBLE\n\n let prev = null\n let node = listeners.get(eventName)\n while (node != null) {\n if (\n node.listener === listener &&\n node.listenerType === listenerType\n ) {\n if (prev !== null) {\n prev.next = node.next\n } else if (node.next !== null) {\n listeners.set(eventName, node.next)\n } else {\n listeners.delete(eventName)\n }\n return\n }\n\n prev = node\n node = node.next\n }\n },\n\n /**\n * Dispatch a given event.\n * @param {Event|{type:string}} event The event to dispatch.\n * @returns {boolean} `false` if canceled.\n */\n dispatchEvent(event) {\n if (event == null || typeof event.type !== \"string\") {\n throw new TypeError('\"event.type\" should be a string.')\n }\n\n // If listeners aren't registered, terminate.\n const listeners = getListeners(this)\n const eventName = event.type\n let node = listeners.get(eventName)\n if (node == null) {\n return true\n }\n\n // Since we cannot rewrite several properties, so wrap object.\n const wrappedEvent = wrapEvent(this, event)\n\n // This doesn't process capturing phase and bubbling phase.\n // This isn't participating in a tree.\n let prev = null\n while (node != null) {\n // Remove this listener if it's once\n if (node.once) {\n if (prev !== null) {\n prev.next = node.next\n } else if (node.next !== null) {\n listeners.set(eventName, node.next)\n } else {\n listeners.delete(eventName)\n }\n } else {\n prev = node\n }\n\n // Call this listener\n setPassiveListener(\n wrappedEvent,\n node.passive ? node.listener : null\n )\n if (typeof node.listener === \"function\") {\n try {\n node.listener.call(this, wrappedEvent)\n } catch (err) {\n if (\n typeof console !== \"undefined\" &&\n typeof console.error === \"function\"\n ) {\n console.error(err)\n }\n }\n } else if (\n node.listenerType !== ATTRIBUTE &&\n typeof node.listener.handleEvent === \"function\"\n ) {\n node.listener.handleEvent(wrappedEvent)\n }\n\n // Break if `event.stopImmediatePropagation` was called.\n if (isStopped(wrappedEvent)) {\n break\n }\n\n node = node.next\n }\n setPassiveListener(wrappedEvent, null)\n setEventPhase(wrappedEvent, 0)\n setCurrentTarget(wrappedEvent, null)\n\n return !wrappedEvent.defaultPrevented\n },\n}\n\n// `constructor` is not enumerable.\nObject.defineProperty(EventTarget.prototype, \"constructor\", {\n value: EventTarget,\n configurable: true,\n writable: true,\n})\n\n// Ensure `eventTarget instanceof window.EventTarget` is `true`.\nif (\n typeof window !== \"undefined\" &&\n typeof window.EventTarget !== \"undefined\"\n) {\n Object.setPrototypeOf(EventTarget.prototype, window.EventTarget.prototype)\n}\n\nexport { defineEventAttribute, EventTarget }\nexport default EventTarget\n"],"names":["pd","event","retv","privateData","get","console","assert","setCancelFlag","data","passiveListener","cancelable","canceled","preventDefault","error","Event","eventTarget","set","eventPhase","currentTarget","stopped","immediateStopped","timeStamp","Date","now","Object","defineProperty","value","enumerable","key","keys","i","length","defineRedirectDescriptor","configurable","defineCallDescriptor","apply","arguments","defineWrapper","BaseEvent","proto","CustomEvent","call","prototype","create","constructor","writable","descriptor","getOwnPropertyDescriptor","isFunc","getWrapper","wrapper","wrappers","getPrototypeOf","wrapEvent","Wrapper","isStopped","setEventPhase","setCurrentTarget","setPassiveListener","isObject","x","_typeof","getListeners","listeners","listenersMap","TypeError","defineEventAttributeDescriptor","eventName","node","listenerType","listener","next","prev","delete","newNode","passive","once","defineEventAttribute","eventTargetPrototype","defineCustomEventTarget","eventNames","CustomEventTarget","EventTarget","Map","Array","isArray","types","WeakMap","type","target","composedPath","NONE","CAPTURING_PHASE","AT_TARGET","BUBBLING_PHASE","stopPropagation","stopImmediatePropagation","bubbles","defaultPrevented","composed","srcElement","cancelBubble","returnValue","initEvent","window","setPrototypeOf","CAPTURE","BUBBLE","addEventListener","options","optionsIsObj","capture","removeEventListener","dispatchEvent","wrappedEvent","err","handleEvent"],"mappings":";;;;wbAkCA,QAASA,CAAAA,CAAT,CAAYC,CAAZ,CAAmB,IACTC,CAAAA,CAAI,CAAGC,CAAW,CAACC,GAAZD,CAAgBF,CAAhBE,QACbE,CAAAA,OAAO,CAACC,MAARD,CACY,IAARH,EAAAA,CADJG,CAEI,6CAFJA,CAGIJ,CAHJI,EAKOH,EAOX,QAASK,CAAAA,CAAT,CAAuBC,CAAvB,CAA6B,OACG,KAAxBA,EAAAA,CAAI,CAACC,eADgB,MAarB,CAACD,CAAI,CAACP,KAALO,CAAWE,UAbS,GAiBzBF,CAAI,CAACG,QAALH,GAjByB,CAkBgB,UAArC,QAAOA,CAAAA,CAAI,CAACP,KAALO,CAAWI,cAlBG,EAmBrBJ,CAAI,CAACP,KAALO,CAAWI,cAAXJ,EAnBqB,QAGE,WAAnB,QAAOH,CAAAA,OAAP,EACyB,UAAzB,QAAOA,CAAAA,OAAO,CAACQ,KAJE,EAMjBR,OAAO,CAACQ,KAARR,CACI,oEADJA,CAEIG,CAAI,CAACC,eAFTJ,CANiB,EAiC7B,QAASS,CAAAA,CAAT,CAAeC,CAAf,CAA4Bd,CAA5B,CAAmC,CAC/BE,CAAW,CAACa,GAAZb,CAAgB,IAAhBA,CAAsB,CAClBY,WAAW,CAAXA,CADkB,CAElBd,KAAK,CAALA,CAFkB,CAGlBgB,UAAU,CAAE,CAHM,CAIlBC,aAAa,CAAEH,CAJG,CAKlBJ,QAAQ,GALU,CAMlBQ,OAAO,GANW,CAOlBC,gBAAgB,GAPE,CAQlBX,eAAe,CAAE,IARC,CASlBY,SAAS,CAAEpB,CAAK,CAACoB,SAANpB,EAAmBqB,IAAI,CAACC,GAALD,EATZ,CAAtBnB,CAD+B,CAc/BqB,MAAM,CAACC,cAAPD,CAAsB,IAAtBA,CAA4B,WAA5BA,CAAyC,CAAEE,KAAK,GAAP,CAAgBC,UAAU,GAA1B,CAAzCH,CAd+B,QAmBrBI,CAAAA,EAFJC,CAAI,CAAGL,MAAM,CAACK,IAAPL,CAAYvB,CAAZuB,EACJM,CAAC,CAAG,EAAGA,CAAC,CAAGD,CAAI,CAACE,OAAQ,EAAED,EACzBF,EAAMC,CAAI,CAACC,CAAD,EACVF,CAAG,GAAI,OACTJ,MAAM,CAACC,cAAPD,CAAsB,IAAtBA,CAA4BI,CAA5BJ,CAAiCQ,CAAwB,CAACJ,CAAD,CAAzDJ,EAyOZ,QAASQ,CAAAA,CAAT,CAAkCJ,CAAlC,CAAuC,OAC5B,CACHxB,GADG,WACG,OACKJ,CAAAA,CAAE,CAAC,IAAD,CAAFA,CAASC,KAATD,CAAe4B,CAAf5B,CAFR,CAAA,CAIHgB,GAJG,UAICU,EAAO,CACP1B,CAAE,CAAC,IAAD,CAAFA,CAASC,KAATD,CAAe4B,CAAf5B,EAAsB0B,CALvB,CAAA,CAOHO,YAAY,GAPT,CAQHN,UAAU,GARP,EAkBX,QAASO,CAAAA,CAAT,CAA8BN,CAA9B,CAAmC,OACxB,CACHF,KADG,WACK,IACEzB,CAAAA,CAAK,CAAGD,CAAE,CAAC,IAAD,CAAFA,CAASC,YAChBA,CAAAA,CAAK,CAAC2B,CAAD,CAAL3B,CAAWkC,KAAXlC,CAAiBA,CAAjBA,CAAwBmC,SAAxBnC,CAHR,CAAA,CAKHgC,YAAY,GALT,CAMHN,UAAU,GANP,EAiBX,QAASU,CAAAA,CAAT,CAAuBC,CAAvB,CAAkCC,CAAlC,CAAyC,SAO5BC,CAAAA,EAAYzB,EAAad,EAAO,CACrCqC,CAAS,CAACG,IAAVH,CAAe,IAAfA,CAAqBvB,CAArBuB,CAAkCrC,CAAlCqC,KAPET,CAAAA,CAAI,CAAGL,MAAM,CAACK,IAAPL,CAAYe,CAAZf,KACO,CAAhBK,GAAAA,CAAI,CAACE,aACEO,CAAAA,EAQXE,CAAW,CAACE,SAAZF,CAAwBhB,MAAM,CAACmB,MAAPnB,CAAcc,CAAS,CAACI,SAAxBlB,CAAmC,CACvDoB,WAAW,CAAE,CAAElB,KAAK,CAAEc,CAAT,CAAsBP,YAAY,GAAlC,CAA0CY,QAAQ,GAAlD,CAD0C,CAAnCrB,CAXa,KAgBhC,GACKI,CAAAA,CADL,CAAIE,CAAC,CAAG,EAAGA,CAAC,CAAGD,CAAI,CAACE,OAAQ,EAAED,KACzBF,EAAMC,CAAI,CAACC,CAAD,EACZ,EAAEF,CAAG,GAAIU,CAAAA,CAAS,CAACI,SAAnB,EAA+B,IACzBI,CAAAA,CAAU,CAAGtB,MAAM,CAACuB,wBAAPvB,CAAgCe,CAAhCf,CAAuCI,CAAvCJ,CADY,CAEzBwB,CAAM,CAA+B,UAA5B,QAAOF,CAAAA,CAAU,CAACpB,KAFF,CAG/BF,MAAM,CAACC,cAAPD,CACIgB,CAAW,CAACE,SADhBlB,CAEII,CAFJJ,CAGIwB,CAAM,CACAd,CAAoB,CAACN,CAAD,CADpB,CAEAI,CAAwB,CAACJ,CAAD,CALlCJ,QAUDgB,CAAAA,EASX,QAASS,CAAAA,CAAT,CAAoBV,CAApB,CAA2B,IACV,IAATA,EAAAA,CAAK,EAAYA,CAAK,GAAKf,MAAM,CAACkB,gBAC3B5B,CAAAA,KAGPoC,CAAAA,CAAO,CAAGC,CAAQ,CAAC/C,GAAT+C,CAAaZ,CAAbY,QACC,KAAXD,EAAAA,IACAA,CAAO,CAAGb,CAAa,CAACY,CAAU,CAACzB,MAAM,CAAC4B,cAAP5B,CAAsBe,CAAtBf,CAAD,CAAX,CAA2Ce,CAA3C,EACvBY,CAAQ,CAACnC,GAATmC,CAAaZ,CAAbY,CAAoBD,CAApBC,GAEGD,EAUJ,QAASG,CAAAA,CAAT,CAAmBtC,CAAnB,CAAgCd,CAAhC,CAAuC,IACpCqD,CAAAA,CAAO,CAAGL,CAAU,CAACzB,MAAM,CAAC4B,cAAP5B,CAAsBvB,CAAtBuB,CAAD,QACnB,IAAI8B,CAAAA,CAAJ,CAAYvC,CAAZ,CAAyBd,CAAzB,EASJ,QAASsD,CAAAA,CAAT,CAAmBtD,CAAnB,CAA0B,OACtBD,CAAAA,CAAE,CAACC,CAAD,CAAFD,CAAUoB,iBAUd,QAASoC,CAAAA,CAAT,CAAuBvD,CAAvB,CAA8BgB,CAA9B,CAA0C,CAC7CjB,CAAE,CAACC,CAAD,CAAFD,CAAUiB,UAAVjB,CAAuBiB,EAUpB,QAASwC,CAAAA,CAAT,CAA0BxD,CAA1B,CAAiCiB,CAAjC,CAAgD,CACnDlB,CAAE,CAACC,CAAD,CAAFD,CAAUkB,aAAVlB,CAA0BkB,EAUvB,QAASwC,CAAAA,CAAT,CAA4BzD,CAA5B,CAAmCQ,CAAnC,CAAoD,CACvDT,CAAE,CAACC,CAAD,CAAFD,CAAUS,eAAVT,CAA4BS,EC3bhC,QAASkD,CAAAA,CAAT,CAAkBC,CAAlB,CAAqB,OACJ,KAANA,GAAAA,CAAC,EAA0B,QAAb,GAAAC,EAAOD,GAShC,QAASE,CAAAA,CAAT,CAAsB/C,CAAtB,CAAmC,IACzBgD,CAAAA,CAAS,CAAGC,CAAY,CAAC5D,GAAb4D,CAAiBjD,CAAjBiD,KACD,IAAbD,EAAAA,OACM,IAAIE,CAAAA,SAAJ,CACF,kEADE,QAIHF,CAAAA,EASX,QAASG,CAAAA,CAAT,CAAwCC,CAAxC,CAAmD,OACxC,CACH/D,GADG,WACG,QACI2D,CAAAA,CAAS,CAAGD,CAAY,CAAC,IAAD,CAD5B,CAEEM,CAAI,CAAGL,CAAS,CAAC3D,GAAV2D,CAAcI,CAAdJ,CAFT,CAGa,IAARK,EAAAA,CAHL,EAGmB,IACbA,IAAAA,CAAI,CAACC,mBACED,CAAAA,CAAI,CAACE,SAEhBF,CAAI,CAAGA,CAAI,CAACG,WAET,KAVR,CAAA,CAaHvD,GAbG,UAaCsD,EAAU,CACc,UAApB,QAAOA,CAAAA,CAAP,EAAmCX,CAAQ,CAACW,CAAD,CADrC,GAENA,CAAQ,CAAG,IAFL,SAIJP,CAAAA,CAAS,CAAGD,CAAY,CAAC,IAAD,CAJpB,CAONU,CAAI,CAAG,IAPD,CAQNJ,CAAI,CAAGL,CAAS,CAAC3D,GAAV2D,CAAcI,CAAdJ,CARD,CASK,IAARK,EAAAA,CATG,EAUFA,IAAAA,CAAI,CAACC,YAVH,CAYW,IAATG,GAAAA,CAZF,CAcuB,IAAdJ,GAAAA,CAAI,CAACG,IAdd,CAiBER,CAAS,CAACU,MAAVV,CAAiBI,CAAjBJ,CAjBF,CAeEA,CAAS,CAAC/C,GAAV+C,CAAcI,CAAdJ,CAAyBK,CAAI,CAACG,IAA9BR,CAfF,CAaES,CAAI,CAACD,IAALC,CAAYJ,CAAI,CAACG,IAbnB,CAoBFC,CAAI,CAAGJ,CApBL,CAuBNA,CAAI,CAAGA,CAAI,CAACG,IAvBN,IA2BO,IAAbD,GAAAA,EAAmB,IACbI,CAAAA,CAAO,CAAG,CACZJ,QAAQ,CAARA,CADY,CAEZD,YAAY,EAFA,CAGZM,OAAO,GAHK,CAIZC,IAAI,GAJQ,CAKZL,IAAI,CAAE,IALM,EAOH,IAATC,GAAAA,CARe,CASfT,CAAS,CAAC/C,GAAV+C,CAAcI,CAAdJ,CAAyBW,CAAzBX,CATe,CAWfS,CAAI,CAACD,IAALC,CAAYE,EAnDrB,CAAA,CAuDHzC,YAAY,GAvDT,CAwDHN,UAAU,GAxDP,EAkEX,QAASkD,CAAAA,CAAT,CAA8BC,CAA9B,CAAoDX,CAApD,CAA+D,CAC3D3C,MAAM,CAACC,cAAPD,CACIsD,CADJtD,aAES2C,EAFT3C,CAGI0C,CAA8B,CAACC,CAAD,CAHlC3C,EAaJ,QAASuD,CAAAA,CAAT,CAAiCC,CAAjC,CAA6C,SAEhCC,CAAAA,GAAoB,CACzBC,CAAW,CAACzC,IAAZyC,CAAiB,IAAjBA,EAGJD,CAAiB,CAACvC,SAAlBuC,CAA8BzD,MAAM,CAACmB,MAAPnB,CAAc0D,CAAW,CAACxC,SAA1BlB,CAAqC,CAC/DoB,WAAW,CAAE,CACTlB,KAAK,CAAEuD,CADE,CAEThD,YAAY,GAFH,CAGTY,QAAQ,GAHC,CADkD,CAArCrB,CANW,KAcpC,GAAIM,CAAAA,CAAC,CAAG,EAAGA,CAAC,CAAGkD,CAAU,CAACjD,OAAQ,EAAED,EACrC+C,CAAoB,CAACI,CAAiB,CAACvC,SAAnB,CAA8BsC,CAAU,CAAClD,CAAD,CAAxC,CAApB+C,OAGGI,CAAAA,EAgBX,QAASC,CAAAA,CAAT,EAAuB,IAEf,eAAgBA,CAAAA,aAChBlB,CAAAA,CAAY,CAAChD,GAAbgD,CAAiB,IAAjBA,CAAuB,GAAImB,CAAAA,GAA3BnB,KAGqB,CAArB5B,GAAAA,SAAS,CAACL,MAAVK,EAA0BgD,KAAK,CAACC,OAAND,CAAchD,SAAS,CAAC,CAAD,CAAvBgD,QACnBL,CAAAA,CAAuB,CAAC3C,SAAS,CAAC,CAAD,CAAV,KAEX,CAAnBA,CAAAA,SAAS,CAACL,OAAY,QAChBuD,CAAAA,CAAK,CAAOF,KAAP,CAAahD,SAAS,CAACL,MAAvB,EACFD,CAAC,CAAG,EAAGA,CAAC,CAAGM,SAAS,CAACL,OAAQ,EAAED,EACpCwD,CAAK,CAACxD,CAAD,CAALwD,CAAWlD,SAAS,CAACN,CAAD,CAApBwD,OAEGP,CAAAA,CAAuB,CAACO,CAAD,OAE5B,IAAIrB,CAAAA,SAAJ,CAAc,mCAAd,KD5KJ9D,CAAAA,CAAW,CAAG,GAAIoF,CAAAA,QAOlBpC,CAAQ,CAAG,GAAIoC,CAAAA,QAkFrBzE,CAAK,CAAC4B,SAAN5B,CAAkB,IAKV0E,CAAAA,MAAO,OACAxF,CAAAA,CAAE,CAAC,IAAD,CAAFA,CAASC,KAATD,CAAewF,IANZ,CAAA,IAaVC,CAAAA,QAAS,OACFzF,CAAAA,CAAE,CAAC,IAAD,CAAFA,CAASe,WAdN,CAAA,IAqBVG,CAAAA,eAAgB,OACTlB,CAAAA,CAAE,CAAC,IAAD,CAAFA,CAASkB,aAtBN,CAAA,CA4BdwE,YA5Bc,WA4BC,IACLxE,CAAAA,CAAa,CAAGlB,CAAE,CAAC,IAAD,CAAFA,CAASkB,cADpB,MAEU,KAAjBA,EAAAA,CAFO,CAGA,EAHA,CAKJ,CAACA,CAAD,CAjCG,CAAA,IAwCVyE,CAAAA,MAAO,OACA,EAzCG,CAAA,IAgDVC,CAAAA,iBAAkB,OACX,EAjDG,CAAA,IAwDVC,CAAAA,WAAY,OACL,EAzDG,CAAA,IAgEVC,CAAAA,gBAAiB,OACV,EAjEG,CAAA,IAwEV7E,CAAAA,YAAa,OACNjB,CAAAA,CAAE,CAAC,IAAD,CAAFA,CAASiB,UAzEN,CAAA,CAgFd8E,eAhFc,WAgFI,IACRvF,CAAAA,CAAI,CAAGR,CAAE,CAAC,IAAD,EAEfQ,CAAI,CAACW,OAALX,GAHc,CAI4B,UAAtC,QAAOA,CAAAA,CAAI,CAACP,KAALO,CAAWuF,eAJR,EAKVvF,CAAI,CAACP,KAALO,CAAWuF,eAAXvF,EArFM,CAAA,CA6FdwF,wBA7Fc,WA6Fa,IACjBxF,CAAAA,CAAI,CAAGR,CAAE,CAAC,IAAD,EAEfQ,CAAI,CAACW,OAALX,GAHuB,CAIvBA,CAAI,CAACY,gBAALZ,GAJuB,CAK4B,UAA/C,QAAOA,CAAAA,CAAI,CAACP,KAALO,CAAWwF,wBALC,EAMnBxF,CAAI,CAACP,KAALO,CAAWwF,wBAAXxF,EAnGM,CAAA,IA2GVyF,CAAAA,SAAU,SACKjG,CAAE,CAAC,IAAD,CAAFA,CAASC,KAATD,CAAeiG,OA5GpB,CAAA,IAmHVvF,CAAAA,YAAa,SACEV,CAAE,CAAC,IAAD,CAAFA,CAASC,KAATD,CAAeU,UApHpB,CAAA,CA2HdE,cA3Hc,WA2HG,CACbL,CAAa,CAACP,CAAE,CAAC,IAAD,CAAH,CA5HH,CAAA,IAmIVkG,CAAAA,kBAAmB,OACZlG,CAAAA,CAAE,CAAC,IAAD,CAAFA,CAASW,QApIN,CAAA,IA2IVwF,CAAAA,UAAW,SACInG,CAAE,CAAC,IAAD,CAAFA,CAASC,KAATD,CAAemG,QA5IpB,CAAA,IAmJV9E,CAAAA,WAAY,OACLrB,CAAAA,CAAE,CAAC,IAAD,CAAFA,CAASqB,SApJN,CAAA,IA4JV+E,CAAAA,YAAa,OACNpG,CAAAA,CAAE,CAAC,IAAD,CAAFA,CAASe,WA7JN,CAAA,IAqKVsF,CAAAA,cAAe,OACRrG,CAAAA,CAAE,CAAC,IAAD,CAAFA,CAASmB,OAtKN,CAAA,IAwKVkF,CAAAA,aAAa3E,EAAO,IACfA,MAGClB,CAAAA,CAAI,CAAGR,CAAE,CAAC,IAAD,EAEfQ,CAAI,CAACW,OAALX,IACuC,SAAnC,QAAOA,CAAAA,CAAI,CAACP,KAALO,CAAW6F,eAClB7F,CAAI,CAACP,KAALO,CAAW6F,YAAX7F,KAhLM,CAAA,IAyLV8F,CAAAA,aAAc,OACP,CAACtG,CAAE,CAAC,IAAD,CAAFA,CAASW,QA1LP,CAAA,IA4LV2F,CAAAA,YAAY5E,EAAO,CACdA,CADc,EAEfnB,CAAa,CAACP,CAAE,CAAC,IAAD,CAAH,CA9LP,CAAA,CAyMduG,SAzMc,WAyMF,EAzME,EA+MlB/E,MAAM,CAACC,cAAPD,CAAsBV,CAAK,CAAC4B,SAA5BlB,CAAuC,aAAvCA,CAAsD,CAClDE,KAAK,CAAEZ,CAD2C,CAElDmB,YAAY,GAFsC,CAGlDY,QAAQ,GAH0C,CAAtDrB,EAOsB,WAAlB,QAAOgF,CAAAA,MAAP,EAAyD,WAAxB,QAAOA,CAAAA,MAAM,CAAC1F,QAC/CU,MAAM,CAACiF,cAAPjF,CAAsBV,CAAK,CAAC4B,SAA5BlB,CAAuCgF,MAAM,CAAC1F,KAAP0F,CAAa9D,SAApDlB,EAGA2B,CAAQ,CAACnC,GAATmC,CAAaqD,MAAM,CAAC1F,KAAP0F,CAAa9D,SAA1BS,CAAqCrC,CAArCqC,MChTEa,CAAAA,CAAY,CAAG,GAAIuB,CAAAA,QAGnBmB,CAAO,CAAG,EACVC,CAAM,CAAG,KA0KfzB,CAAW,CAACxC,SAAZwC,CAAwB,CAQpB0B,gBARoB,UAQHzC,EAAWG,EAAUuC,EAAS,IAC3B,IAAZvC,EAAAA,MAGoB,UAApB,QAAOA,CAAAA,CAAP,EAAkC,CAACX,CAAQ,CAACW,CAAD,OACrC,IAAIL,CAAAA,SAAJ,CAAc,+CAAd,KAGJF,CAAAA,CAAS,CAAGD,CAAY,CAAC,IAAD,EACxBgD,CAAY,CAAGnD,CAAQ,CAACkD,CAAD,EACvBE,CAAO,CAAGD,CAAY,GACdD,CAAO,CAACE,OADM,GAEdF,EACRxC,CAAY,CAAG0C,CAAO,CAAGL,CAAH,CAAaC,EACnCjC,CAAO,CAAG,CACZJ,QAAQ,CAARA,CADY,CAEZD,YAAY,CAAZA,CAFY,CAGZM,OAAO,CAAEmC,CAAY,IAAYD,CAAO,CAAClC,OAH7B,CAIZC,IAAI,CAAEkC,CAAY,IAAYD,CAAO,CAACjC,IAJ1B,CAKZL,IAAI,CAAE,IALM,EASZH,CAAI,CAAGL,CAAS,CAAC3D,GAAV2D,CAAcI,CAAdJ,KACPK,SAAAA,aACAL,CAAAA,CAAS,CAAC/C,GAAV+C,CAAcI,CAAdJ,CAAyBW,CAAzBX,SAKAS,CAAAA,CAAI,CAAG,KACI,IAARJ,EAAAA,GAAc,IAEbA,CAAI,CAACE,QAALF,GAAkBE,CAAlBF,EACAA,CAAI,CAACC,YAALD,GAAsBC,SAK1BG,CAAI,CAAGJ,CARU,CASjBA,CAAI,CAAGA,CAAI,CAACG,IAxC2B,CA4C3CC,CAAI,CAACD,IAALC,CAAYE,EApDI,CAAA,CA8DpBsC,mBA9DoB,UA8DA7C,EAAWG,EAAUuC,EAAS,IAC9B,IAAZvC,EAAAA,SAIEP,CAAAA,CAAS,CAAGD,CAAY,CAAC,IAAD,EACxBiD,CAAO,CAAGpD,CAAQ,CAACkD,CAAD,CAARlD,GACFkD,CAAO,CAACE,OADNpD,GAEFkD,EACRxC,CAAY,CAAG0C,CAAO,CAAGL,CAAH,CAAaC,EAErCnC,CAAI,CAAG,KACPJ,CAAI,CAAGL,CAAS,CAAC3D,GAAV2D,CAAcI,CAAdJ,EACI,IAARK,EAAAA,GAAc,IAEbA,CAAI,CAACE,QAALF,GAAkBE,CAAlBF,EACAA,CAAI,CAACC,YAALD,GAAsBC,cAET,IAATG,GAAAA,EAEqB,IAAdJ,GAAAA,CAAI,CAACG,KAGZR,CAAS,CAACU,MAAVV,CAAiBI,CAAjBJ,EAFAA,CAAS,CAAC/C,GAAV+C,CAAcI,CAAdJ,CAAyBK,CAAI,CAACG,IAA9BR,EAFAS,CAAI,CAACD,IAALC,CAAYJ,CAAI,CAACG,MASzBC,CAAI,CAAGJ,CAfU,CAgBjBA,CAAI,CAAGA,CAAI,CAACG,KA3FA,CAAA,CAoGpB0C,aApGoB,UAoGNhH,EAAO,IACJ,IAATA,EAAAA,CAAK,EAAkC,QAAtB,QAAOA,CAAAA,CAAK,CAACuF,UACxB,IAAIvB,CAAAA,SAAJ,CAAc,oCAAd,EAFO,GAMXF,CAAAA,CAAS,CAAGD,CAAY,CAAC,IAAD,CANb,CAOXK,CAAS,CAAGlE,CAAK,CAACuF,IAPP,CAQbpB,CAAI,CAAGL,CAAS,CAAC3D,GAAV2D,CAAcI,CAAdJ,CARM,IASL,IAARK,EAAAA,WATa,OAcX8C,CAAAA,CAAY,CAAG7D,CAAS,CAAC,IAAD,CAAOpD,CAAP,CAdb,CAkBbuE,CAAI,CAAG,IAlBM,CAmBF,IAARJ,EAAAA,CAnBU,EAmBI,IAEbA,CAAI,CAACQ,KACQ,IAATJ,GAAAA,EAEqB,IAAdJ,GAAAA,CAAI,CAACG,KAGZR,CAAS,CAACU,MAAVV,CAAiBI,CAAjBJ,EAFAA,CAAS,CAAC/C,GAAV+C,CAAcI,CAAdJ,CAAyBK,CAAI,CAACG,IAA9BR,EAFAS,CAAI,CAACD,IAALC,CAAYJ,CAAI,CAACG,KAOrBC,CAAI,CAAGJ,EAIXV,CAAkB,CACdwD,CADc,CAEd9C,CAAI,CAACO,OAALP,CAAeA,CAAI,CAACE,QAApBF,CAA+B,IAFjB,EAIW,UAAzB,QAAOA,CAAAA,CAAI,CAACE,YACR,CACAF,CAAI,CAACE,QAALF,CAAc3B,IAAd2B,CAAmB,IAAnBA,CAAyB8C,CAAzB9C,CADJ,CAEE,MAAO+C,CAAP,CAAY,CAEa,WAAnB,QAAO9G,CAAAA,OAAP,EACyB,UAAzB,QAAOA,CAAAA,OAAO,CAACQ,KAHT,EAKNR,OAAO,CAACQ,KAARR,CAAc8G,CAAd9G,MAIR+D,CAAAA,CAAI,CAACC,YAALD,GA/TE,CA+TFA,EACqC,UAArC,QAAOA,CAAAA,CAAI,CAACE,QAALF,CAAcgD,aAErBhD,CAAI,CAACE,QAALF,CAAcgD,WAAdhD,CAA0B8C,CAA1B9C,KAIAb,CAAS,CAAC2D,CAAD,QAIb9C,CAAI,CAAGA,CAAI,CAACG,WAEhBb,CAAAA,CAAkB,CAACwD,CAAD,CAAe,IAAf,EAClB1D,CAAa,CAAC0D,CAAD,CAAe,CAAf,EACbzD,CAAgB,CAACyD,CAAD,CAAe,IAAf,EAET,CAACA,CAAY,CAAChB,iBAvKL,EA4KxB1E,MAAM,CAACC,cAAPD,CAAsB0D,CAAW,CAACxC,SAAlClB,CAA6C,aAA7CA,CAA4D,CACxDE,KAAK,CAAEwD,CADiD,CAExDjD,YAAY,GAF4C,CAGxDY,QAAQ,GAHgD,CAA5DrB,EAQsB,WAAlB,QAAOgF,CAAAA,MAAP,EAC8B,WAA9B,QAAOA,CAAAA,MAAM,CAACtB,aAEd1D,MAAM,CAACiF,cAAPjF,CAAsB0D,CAAW,CAACxC,SAAlClB,CAA6CgF,MAAM,CAACtB,WAAPsB,CAAmB9D,SAAhElB"} \ No newline at end of file diff --git a/reverse_engineering/node_modules/event-target-shim/index.d.ts b/reverse_engineering/node_modules/event-target-shim/index.d.ts deleted file mode 100644 index a303097..0000000 --- a/reverse_engineering/node_modules/event-target-shim/index.d.ts +++ /dev/null @@ -1,399 +0,0 @@ -export as namespace EventTargetShim - -/** - * `Event` interface. - * @see https://dom.spec.whatwg.org/#event - */ -export interface Event { - /** - * The type of this event. - */ - readonly type: string - - /** - * The target of this event. - */ - readonly target: EventTarget<{}, {}, "standard"> | null - - /** - * The current target of this event. - */ - readonly currentTarget: EventTarget<{}, {}, "standard"> | null - - /** - * The target of this event. - * @deprecated - */ - readonly srcElement: any | null - - /** - * The composed path of this event. - */ - composedPath(): EventTarget<{}, {}, "standard">[] - - /** - * Constant of NONE. - */ - readonly NONE: number - - /** - * Constant of CAPTURING_PHASE. - */ - readonly CAPTURING_PHASE: number - - /** - * Constant of BUBBLING_PHASE. - */ - readonly BUBBLING_PHASE: number - - /** - * Constant of AT_TARGET. - */ - readonly AT_TARGET: number - - /** - * Indicates which phase of the event flow is currently being evaluated. - */ - readonly eventPhase: number - - /** - * Stop event bubbling. - */ - stopPropagation(): void - - /** - * Stop event bubbling. - */ - stopImmediatePropagation(): void - - /** - * Initialize event. - * @deprecated - */ - initEvent(type: string, bubbles?: boolean, cancelable?: boolean): void - - /** - * The flag indicating bubbling. - */ - readonly bubbles: boolean - - /** - * Stop event bubbling. - * @deprecated - */ - cancelBubble: boolean - - /** - * Set or get cancellation flag. - * @deprecated - */ - returnValue: boolean - - /** - * The flag indicating whether the event can be canceled. - */ - readonly cancelable: boolean - - /** - * Cancel this event. - */ - preventDefault(): void - - /** - * The flag to indicating whether the event was canceled. - */ - readonly defaultPrevented: boolean - - /** - * The flag to indicating if event is composed. - */ - readonly composed: boolean - - /** - * Indicates whether the event was dispatched by the user agent. - */ - readonly isTrusted: boolean - - /** - * The unix time of this event. - */ - readonly timeStamp: number -} - -/** - * The constructor of `EventTarget` interface. - */ -export type EventTargetConstructor< - TEvents extends EventTarget.EventDefinition = {}, - TEventAttributes extends EventTarget.EventDefinition = {}, - TMode extends EventTarget.Mode = "loose" -> = { - prototype: EventTarget - new(): EventTarget -} - -/** - * `EventTarget` interface. - * @see https://dom.spec.whatwg.org/#interface-eventtarget - */ -export type EventTarget< - TEvents extends EventTarget.EventDefinition = {}, - TEventAttributes extends EventTarget.EventDefinition = {}, - TMode extends EventTarget.Mode = "loose" -> = EventTarget.EventAttributes & { - /** - * Add a given listener to this event target. - * @param eventName The event name to add. - * @param listener The listener to add. - * @param options The options for this listener. - */ - addEventListener>( - type: TEventType, - listener: - | EventTarget.Listener> - | null, - options?: boolean | EventTarget.AddOptions - ): void - - /** - * Remove a given listener from this event target. - * @param eventName The event name to remove. - * @param listener The listener to remove. - * @param options The options for this listener. - */ - removeEventListener>( - type: TEventType, - listener: - | EventTarget.Listener> - | null, - options?: boolean | EventTarget.RemoveOptions - ): void - - /** - * Dispatch a given event. - * @param event The event to dispatch. - * @returns `false` if canceled. - */ - dispatchEvent>( - event: EventTarget.EventData - ): boolean -} - -export const EventTarget: EventTargetConstructor & { - /** - * Create an `EventTarget` instance with detailed event definition. - * - * The detailed event definition requires to use `defineEventAttribute()` - * function later. - * - * Unfortunately, the second type parameter `TEventAttributes` was needed - * because we cannot compute string literal types. - * - * @example - * const signal = new EventTarget<{ abort: Event }, { onabort: Event }>() - * defineEventAttribute(signal, "abort") - */ - new < - TEvents extends EventTarget.EventDefinition, - TEventAttributes extends EventTarget.EventDefinition, - TMode extends EventTarget.Mode = "loose" - >(): EventTarget - - /** - * Define an `EventTarget` constructor with attribute events and detailed event definition. - * - * Unfortunately, the second type parameter `TEventAttributes` was needed - * because we cannot compute string literal types. - * - * @example - * class AbortSignal extends EventTarget<{ abort: Event }, { onabort: Event }>("abort") { - * abort(): void {} - * } - * - * @param events Optional event attributes (e.g. passing in `"click"` adds `onclick` to prototype). - */ - < - TEvents extends EventTarget.EventDefinition = {}, - TEventAttributes extends EventTarget.EventDefinition = {}, - TMode extends EventTarget.Mode = "loose" - >(events: string[]): EventTargetConstructor< - TEvents, - TEventAttributes, - TMode - > - - /** - * Define an `EventTarget` constructor with attribute events and detailed event definition. - * - * Unfortunately, the second type parameter `TEventAttributes` was needed - * because we cannot compute string literal types. - * - * @example - * class AbortSignal extends EventTarget<{ abort: Event }, { onabort: Event }>("abort") { - * abort(): void {} - * } - * - * @param events Optional event attributes (e.g. passing in `"click"` adds `onclick` to prototype). - */ - < - TEvents extends EventTarget.EventDefinition = {}, - TEventAttributes extends EventTarget.EventDefinition = {}, - TMode extends EventTarget.Mode = "loose" - >(event0: string, ...events: string[]): EventTargetConstructor< - TEvents, - TEventAttributes, - TMode - > -} - -export namespace EventTarget { - /** - * Options of `removeEventListener()` method. - */ - export interface RemoveOptions { - /** - * The flag to indicate that the listener is for the capturing phase. - */ - capture?: boolean - } - - /** - * Options of `addEventListener()` method. - */ - export interface AddOptions extends RemoveOptions { - /** - * The flag to indicate that the listener doesn't support - * `event.preventDefault()` operation. - */ - passive?: boolean - /** - * The flag to indicate that the listener will be removed on the first - * event. - */ - once?: boolean - } - - /** - * The type of regular listeners. - */ - export interface FunctionListener { - (event: TEvent): void - } - - /** - * The type of object listeners. - */ - export interface ObjectListener { - handleEvent(event: TEvent): void - } - - /** - * The type of listeners. - */ - export type Listener = - | FunctionListener - | ObjectListener - - /** - * Event definition. - */ - export type EventDefinition = { - readonly [key: string]: Event - } - - /** - * Mapped type for event attributes. - */ - export type EventAttributes = { - [P in keyof TEventAttributes]: - | FunctionListener - | null - } - - /** - * The type of event data for `dispatchEvent()` method. - */ - export type EventData< - TEvents extends EventDefinition, - TEventType extends keyof TEvents | string, - TMode extends Mode - > = - TEventType extends keyof TEvents - ? ( - // Require properties which are not generated automatically. - & Pick< - TEvents[TEventType], - Exclude - > - // Properties which are generated automatically are optional. - & Partial> - ) - : ( - TMode extends "standard" - ? Event - : Event | NonStandardEvent - ) - - /** - * The string literal types of the properties which are generated - * automatically in `dispatchEvent()` method. - */ - export type OmittableEventKeys = Exclude - - /** - * The type of event data. - */ - export type NonStandardEvent = { - [key: string]: any - type: string - } - - /** - * The type of listeners. - */ - export type PickEvent< - TEvents extends EventDefinition, - TEventType extends keyof TEvents | string, - > = - TEventType extends keyof TEvents - ? TEvents[TEventType] - : Event - - /** - * Event type candidates. - */ - export type EventType< - TEvents extends EventDefinition, - TMode extends Mode - > = - TMode extends "strict" - ? keyof TEvents - : keyof TEvents | string - - /** - * - `"strict"` ..... Methods don't accept unknown events. - * `dispatchEvent()` accepts partial objects. - * - `"loose"` ...... Methods accept unknown events. - * `dispatchEvent()` accepts partial objects. - * - `"standard"` ... Methods accept unknown events. - * `dispatchEvent()` doesn't accept partial objects. - */ - export type Mode = "strict" | "standard" | "loose" -} - -/** - * Specialized `type` property. - */ -export type Type = { type: T } - -/** - * Define an event attribute (e.g. `eventTarget.onclick`). - * @param prototype The event target prototype to define an event attribute. - * @param eventName The event name to define. - */ -export function defineEventAttribute( - prototype: EventTarget, - eventName: string -): void - -export default EventTarget diff --git a/reverse_engineering/node_modules/event-target-shim/package.json b/reverse_engineering/node_modules/event-target-shim/package.json deleted file mode 100644 index f09b8f2..0000000 --- a/reverse_engineering/node_modules/event-target-shim/package.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "_from": "event-target-shim@^5.0.0", - "_id": "event-target-shim@5.0.1", - "_inBundle": false, - "_integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "_location": "/event-target-shim", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "event-target-shim@^5.0.0", - "name": "event-target-shim", - "escapedName": "event-target-shim", - "rawSpec": "^5.0.0", - "saveSpec": null, - "fetchSpec": "^5.0.0" - }, - "_requiredBy": [ - "/abort-controller" - ], - "_resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "_shasum": "5d4d3ebdf9583d63a5333ce2deb7480ab2b05789", - "_spec": "event-target-shim@^5.0.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/abort-controller", - "author": { - "name": "Toru Nagashima" - }, - "bugs": { - "url": "https://github.com/mysticatea/event-target-shim/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "An implementation of WHATWG EventTarget interface.", - "devDependencies": { - "@babel/core": "^7.2.2", - "@babel/plugin-transform-modules-commonjs": "^7.2.0", - "@babel/preset-env": "^7.2.3", - "@babel/register": "^7.0.0", - "@mysticatea/eslint-plugin": "^8.0.1", - "@mysticatea/spy": "^0.1.2", - "assert": "^1.4.1", - "codecov": "^3.1.0", - "eslint": "^5.12.1", - "karma": "^3.1.4", - "karma-chrome-launcher": "^2.2.0", - "karma-coverage": "^1.1.2", - "karma-firefox-launcher": "^1.0.0", - "karma-growl-reporter": "^1.0.0", - "karma-ie-launcher": "^1.0.0", - "karma-mocha": "^1.3.0", - "karma-rollup-preprocessor": "^7.0.0-rc.2", - "mocha": "^5.2.0", - "npm-run-all": "^4.1.5", - "nyc": "^13.1.0", - "opener": "^1.5.1", - "rimraf": "^2.6.3", - "rollup": "^1.1.1", - "rollup-plugin-babel": "^4.3.2", - "rollup-plugin-babel-minify": "^7.0.0", - "rollup-plugin-commonjs": "^9.2.0", - "rollup-plugin-json": "^3.1.0", - "rollup-plugin-node-resolve": "^4.0.0", - "rollup-watch": "^4.3.1", - "type-tester": "^1.0.0", - "typescript": "^3.2.4" - }, - "engines": { - "node": ">=6" - }, - "files": [ - "dist", - "index.d.ts" - ], - "homepage": "https://github.com/mysticatea/event-target-shim", - "keywords": [ - "w3c", - "whatwg", - "eventtarget", - "event", - "events", - "shim" - ], - "license": "MIT", - "main": "dist/event-target-shim", - "name": "event-target-shim", - "repository": { - "type": "git", - "url": "git+https://github.com/mysticatea/event-target-shim.git" - }, - "scripts": { - "build": "rollup -c scripts/rollup.config.js", - "clean": "rimraf .nyc_output coverage", - "codecov": "codecov", - "coverage": "nyc report --reporter lcov && opener coverage/lcov-report/index.html", - "lint": "eslint src test scripts --ext .js,.mjs", - "postversion": "git push && git push --tags", - "pretest": "npm run lint", - "preversion": "npm test", - "test": "run-s test:*", - "test:karma": "karma start scripts/karma.conf.js --single-run", - "test:mocha": "nyc --require ./scripts/babel-register mocha test/*.mjs", - "version": "npm run build && git add dist/*", - "watch": "run-p watch:*", - "watch:karma": "karma start scripts/karma.conf.js --watch", - "watch:mocha": "mocha test/*.mjs --require ./scripts/babel-register --watch --watch-extensions js,mjs --growl" - }, - "types": "index.d.ts", - "version": "5.0.1" -} diff --git a/reverse_engineering/node_modules/extend/.editorconfig b/reverse_engineering/node_modules/extend/.editorconfig deleted file mode 100644 index bc228f8..0000000 --- a/reverse_engineering/node_modules/extend/.editorconfig +++ /dev/null @@ -1,20 +0,0 @@ -root = true - -[*] -indent_style = tab -indent_size = 4 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -max_line_length = 150 - -[CHANGELOG.md] -indent_style = space -indent_size = 2 - -[*.json] -max_line_length = off - -[Makefile] -max_line_length = off diff --git a/reverse_engineering/node_modules/extend/.eslintrc b/reverse_engineering/node_modules/extend/.eslintrc deleted file mode 100644 index a34cf28..0000000 --- a/reverse_engineering/node_modules/extend/.eslintrc +++ /dev/null @@ -1,17 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "rules": { - "complexity": [2, 20], - "eqeqeq": [2, "allow-null"], - "func-name-matching": [1], - "max-depth": [1, 4], - "max-statements": [2, 26], - "no-extra-parens": [1], - "no-magic-numbers": [0], - "no-restricted-syntax": [2, "BreakStatement", "ContinueStatement", "DebuggerStatement", "LabeledStatement", "WithStatement"], - "sort-keys": [0], - } -} diff --git a/reverse_engineering/node_modules/extend/.jscs.json b/reverse_engineering/node_modules/extend/.jscs.json deleted file mode 100644 index 3cce01d..0000000 --- a/reverse_engineering/node_modules/extend/.jscs.json +++ /dev/null @@ -1,175 +0,0 @@ -{ - "es3": true, - - "additionalRules": [], - - "requireSemicolons": true, - - "disallowMultipleSpaces": true, - - "disallowIdentifierNames": [], - - "requireCurlyBraces": { - "allExcept": [], - "keywords": ["if", "else", "for", "while", "do", "try", "catch"] - }, - - "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch", "function"], - - "disallowSpaceAfterKeywords": [], - - "disallowSpaceBeforeComma": true, - "disallowSpaceAfterComma": false, - "disallowSpaceBeforeSemicolon": true, - - "disallowNodeTypes": [ - "DebuggerStatement", - "LabeledStatement", - "SwitchCase", - "SwitchStatement", - "WithStatement" - ], - - "requireObjectKeysOnNewLine": { "allExcept": ["sameLine"] }, - - "requireSpacesInAnonymousFunctionExpression": { "beforeOpeningRoundBrace": true, "beforeOpeningCurlyBrace": true }, - "requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true }, - "disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true }, - "requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true }, - "disallowSpacesInFunctionDeclaration": { "beforeOpeningRoundBrace": true }, - - "requireSpaceBetweenArguments": true, - - "disallowSpacesInsideParentheses": true, - - "disallowSpacesInsideArrayBrackets": true, - - "disallowQuotedKeysInObjects": { "allExcept": ["reserved"] }, - - "disallowSpaceAfterObjectKeys": true, - - "requireCommaBeforeLineBreak": true, - - "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"], - "requireSpaceAfterPrefixUnaryOperators": [], - - "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"], - "requireSpaceBeforePostfixUnaryOperators": [], - - "disallowSpaceBeforeBinaryOperators": [], - "requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], - - "requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], - "disallowSpaceAfterBinaryOperators": [], - - "disallowImplicitTypeConversion": ["binary", "string"], - - "disallowKeywords": ["with", "eval"], - - "requireKeywordsOnNewLine": [], - "disallowKeywordsOnNewLine": ["else"], - - "requireLineFeedAtFileEnd": true, - - "disallowTrailingWhitespace": true, - - "disallowTrailingComma": true, - - "excludeFiles": ["node_modules/**", "vendor/**"], - - "disallowMultipleLineStrings": true, - - "requireDotNotation": { "allExcept": ["keywords"] }, - - "requireParenthesesAroundIIFE": true, - - "validateLineBreaks": "LF", - - "validateQuoteMarks": { - "escape": true, - "mark": "'" - }, - - "disallowOperatorBeforeLineBreak": [], - - "requireSpaceBeforeKeywords": [ - "do", - "for", - "if", - "else", - "switch", - "case", - "try", - "catch", - "finally", - "while", - "with", - "return" - ], - - "validateAlignedFunctionParameters": { - "lineBreakAfterOpeningBraces": true, - "lineBreakBeforeClosingBraces": true - }, - - "requirePaddingNewLinesBeforeExport": true, - - "validateNewlineAfterArrayElements": { - "maximum": 6 - }, - - "requirePaddingNewLinesAfterUseStrict": true, - - "disallowArrowFunctions": true, - - "disallowMultiLineTernary": true, - - "validateOrderInObjectKeys": false, - - "disallowIdenticalDestructuringNames": true, - - "disallowNestedTernaries": { "maxLevel": 1 }, - - "requireSpaceAfterComma": { "allExcept": ["trailing"] }, - "requireAlignedMultilineParams": false, - - "requireSpacesInGenerator": { - "afterStar": true - }, - - "disallowSpacesInGenerator": { - "beforeStar": true - }, - - "disallowVar": false, - - "requireArrayDestructuring": false, - - "requireEnhancedObjectLiterals": false, - - "requireObjectDestructuring": false, - - "requireEarlyReturn": false, - - "requireCapitalizedConstructorsNew": { - "allExcept": ["Function", "String", "Object", "Symbol", "Number", "Date", "RegExp", "Error", "Boolean", "Array"] - }, - - "requireImportAlphabetized": false, - - "requireSpaceBeforeObjectValues": true, - "requireSpaceBeforeDestructuredValues": true, - - "disallowSpacesInsideTemplateStringPlaceholders": true, - - "disallowArrayDestructuringReturn": false, - - "requireNewlineBeforeSingleStatementsInIf": false, - - "disallowUnusedVariables": true, - - "requireSpacesInsideImportedObjectBraces": true, - - "requireUseStrict": true -} - diff --git a/reverse_engineering/node_modules/extend/.travis.yml b/reverse_engineering/node_modules/extend/.travis.yml deleted file mode 100644 index 5ccdfc4..0000000 --- a/reverse_engineering/node_modules/extend/.travis.yml +++ /dev/null @@ -1,230 +0,0 @@ -language: node_js -os: - - linux -node_js: - - "10.7" - - "9.11" - - "8.11" - - "7.10" - - "6.14" - - "5.12" - - "4.9" - - "iojs-v3.3" - - "iojs-v2.5" - - "iojs-v1.8" - - "0.12" - - "0.10" - - "0.8" -before_install: - - 'case "${TRAVIS_NODE_VERSION}" in 0.*) export NPM_CONFIG_STRICT_SSL=false ;; esac' - - 'nvm install-latest-npm' -install: - - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ] || [ "${TRAVIS_NODE_VERSION}" = "0.9" ]; then nvm install --latest-npm 0.8 && npm install && nvm use "${TRAVIS_NODE_VERSION}"; else npm install; fi;' -script: - - 'if [ -n "${PRETEST-}" ]; then npm run pretest ; fi' - - 'if [ -n "${POSTTEST-}" ]; then npm run posttest ; fi' - - 'if [ -n "${COVERAGE-}" ]; then npm run coverage ; fi' - - 'if [ -n "${TEST-}" ]; then npm run tests-only ; fi' -sudo: false -env: - - TEST=true -matrix: - fast_finish: true - include: - - node_js: "lts/*" - env: PRETEST=true - - node_js: "lts/*" - env: POSTTEST=true - - node_js: "4" - env: COVERAGE=true - - node_js: "10.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.10" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.10" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.13" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.12" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.11" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.10" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.11" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.10" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v3.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v3.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v3.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "0.11" - env: TEST=true ALLOW_FAILURE=true - - node_js: "0.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "0.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "0.4" - env: TEST=true ALLOW_FAILURE=true - allow_failures: - - os: osx - - env: TEST=true ALLOW_FAILURE=true diff --git a/reverse_engineering/node_modules/extend/CHANGELOG.md b/reverse_engineering/node_modules/extend/CHANGELOG.md deleted file mode 100644 index 2cf7de6..0000000 --- a/reverse_engineering/node_modules/extend/CHANGELOG.md +++ /dev/null @@ -1,83 +0,0 @@ -3.0.2 / 2018-07-19 -================== - * [Fix] Prevent merging `__proto__` property (#48) - * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` - * [Tests] up to `node` `v10.7`, `v9.11`, `v8.11`, `v7.10`, `v6.14`, `v4.9`; use `nvm install-latest-npm` - -3.0.1 / 2017-04-27 -================== - * [Fix] deep extending should work with a non-object (#46) - * [Dev Deps] update `tape`, `eslint`, `@ljharb/eslint-config` - * [Tests] up to `node` `v7.9`, `v6.10`, `v4.8`; improve matrix - * [Docs] Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG. - * [Docs] Add example to readme (#34) - -3.0.0 / 2015-07-01 -================== - * [Possible breaking change] Use global "strict" directive (#32) - * [Tests] `int` is an ES3 reserved word - * [Tests] Test up to `io.js` `v2.3` - * [Tests] Add `npm run eslint` - * [Dev Deps] Update `covert`, `jscs` - -2.0.1 / 2015-04-25 -================== - * Use an inline `isArray` check, for ES3 browsers. (#27) - * Some old browsers fail when an identifier is `toString` - * Test latest `node` and `io.js` versions on `travis-ci`; speed up builds - * Add license info to package.json (#25) - * Update `tape`, `jscs` - * Adding a CHANGELOG - -2.0.0 / 2014-10-01 -================== - * Increase code coverage to 100%; run code coverage as part of tests - * Add `npm run lint`; Run linter as part of tests - * Remove nodeType and setInterval checks in isPlainObject - * Updating `tape`, `jscs`, `covert` - * General style and README cleanup - -1.3.0 / 2014-06-20 -================== - * Add component.json for browser support (#18) - * Use SVG for badges in README (#16) - * Updating `tape`, `covert` - * Updating travis-ci to work with multiple node versions - * Fix `deep === false` bug (returning target as {}) (#14) - * Fixing constructor checks in isPlainObject - * Adding additional test coverage - * Adding `npm run coverage` - * Add LICENSE (#13) - * Adding a warning about `false`, per #11 - * General style and whitespace cleanup - -1.2.1 / 2013-09-14 -================== - * Fixing hasOwnProperty bugs that would only have shown up in specific browsers. Fixes #8 - * Updating `tape` - -1.2.0 / 2013-09-02 -================== - * Updating the README: add badges - * Adding a missing variable reference. - * Using `tape` instead of `buster` for tests; add more tests (#7) - * Adding node 0.10 to Travis CI (#6) - * Enabling "npm test" and cleaning up package.json (#5) - * Add Travis CI. - -1.1.3 / 2012-12-06 -================== - * Added unit tests. - * Ensure extend function is named. (Looks nicer in a stack trace.) - * README cleanup. - -1.1.1 / 2012-11-07 -================== - * README cleanup. - * Added installation instructions. - * Added a missing semicolon - -1.0.0 / 2012-04-08 -================== - * Initial commit - diff --git a/reverse_engineering/node_modules/extend/LICENSE b/reverse_engineering/node_modules/extend/LICENSE deleted file mode 100644 index e16d6a5..0000000 --- a/reverse_engineering/node_modules/extend/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Stefan Thomas - -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/reverse_engineering/node_modules/extend/README.md b/reverse_engineering/node_modules/extend/README.md deleted file mode 100644 index 5b8249a..0000000 --- a/reverse_engineering/node_modules/extend/README.md +++ /dev/null @@ -1,81 +0,0 @@ -[![Build Status][travis-svg]][travis-url] -[![dependency status][deps-svg]][deps-url] -[![dev dependency status][dev-deps-svg]][dev-deps-url] - -# extend() for Node.js [![Version Badge][npm-version-png]][npm-url] - -`node-extend` is a port of the classic extend() method from jQuery. It behaves as you expect. It is simple, tried and true. - -Notes: - -* Since Node.js >= 4, - [`Object.assign`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) - now offers the same functionality natively (but without the "deep copy" option). - See [ECMAScript 2015 (ES6) in Node.js](https://nodejs.org/en/docs/es6). -* Some native implementations of `Object.assign` in both Node.js and many - browsers (since NPM modules are for the browser too) may not be fully - spec-compliant. - Check [`object.assign`](https://www.npmjs.com/package/object.assign) module for - a compliant candidate. - -## Installation - -This package is available on [npm][npm-url] as: `extend` - -``` sh -npm install extend -``` - -## Usage - -**Syntax:** extend **(** [`deep`], `target`, `object1`, [`objectN`] **)** - -*Extend one object with one or more others, returning the modified object.* - -**Example:** - -``` js -var extend = require('extend'); -extend(targetObject, object1, object2); -``` - -Keep in mind that the target object will be modified, and will be returned from extend(). - -If a boolean true is specified as the first argument, extend performs a deep copy, recursively copying any objects it finds. Otherwise, the copy will share structure with the original object(s). -Undefined properties are not copied. However, properties inherited from the object's prototype will be copied over. -Warning: passing `false` as the first argument is not supported. - -### Arguments - -* `deep` *Boolean* (optional) -If set, the merge becomes recursive (i.e. deep copy). -* `target` *Object* -The object to extend. -* `object1` *Object* -The object that will be merged into the first. -* `objectN` *Object* (Optional) -More objects to merge into the first. - -## License - -`node-extend` is licensed under the [MIT License][mit-license-url]. - -## Acknowledgements - -All credit to the jQuery authors for perfecting this amazing utility. - -Ported to Node.js by [Stefan Thomas][github-justmoon] with contributions by [Jonathan Buchanan][github-insin] and [Jordan Harband][github-ljharb]. - -[travis-svg]: https://travis-ci.org/justmoon/node-extend.svg -[travis-url]: https://travis-ci.org/justmoon/node-extend -[npm-url]: https://npmjs.org/package/extend -[mit-license-url]: http://opensource.org/licenses/MIT -[github-justmoon]: https://github.com/justmoon -[github-insin]: https://github.com/insin -[github-ljharb]: https://github.com/ljharb -[npm-version-png]: http://versionbadg.es/justmoon/node-extend.svg -[deps-svg]: https://david-dm.org/justmoon/node-extend.svg -[deps-url]: https://david-dm.org/justmoon/node-extend -[dev-deps-svg]: https://david-dm.org/justmoon/node-extend/dev-status.svg -[dev-deps-url]: https://david-dm.org/justmoon/node-extend#info=devDependencies - diff --git a/reverse_engineering/node_modules/extend/component.json b/reverse_engineering/node_modules/extend/component.json deleted file mode 100644 index 1500a2f..0000000 --- a/reverse_engineering/node_modules/extend/component.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "extend", - "author": "Stefan Thomas (http://www.justmoon.net)", - "version": "3.0.0", - "description": "Port of jQuery.extend for node.js and the browser.", - "scripts": [ - "index.js" - ], - "contributors": [ - { - "name": "Jordan Harband", - "url": "https://github.com/ljharb" - } - ], - "keywords": [ - "extend", - "clone", - "merge" - ], - "repository" : { - "type": "git", - "url": "https://github.com/justmoon/node-extend.git" - }, - "dependencies": { - }, - "devDependencies": { - "tape" : "~3.0.0", - "covert": "~0.4.0", - "jscs": "~1.6.2" - } -} - diff --git a/reverse_engineering/node_modules/extend/index.js b/reverse_engineering/node_modules/extend/index.js deleted file mode 100644 index 2aa3faa..0000000 --- a/reverse_engineering/node_modules/extend/index.js +++ /dev/null @@ -1,117 +0,0 @@ -'use strict'; - -var hasOwn = Object.prototype.hasOwnProperty; -var toStr = Object.prototype.toString; -var defineProperty = Object.defineProperty; -var gOPD = Object.getOwnPropertyDescriptor; - -var isArray = function isArray(arr) { - if (typeof Array.isArray === 'function') { - return Array.isArray(arr); - } - - return toStr.call(arr) === '[object Array]'; -}; - -var isPlainObject = function isPlainObject(obj) { - if (!obj || toStr.call(obj) !== '[object Object]') { - return false; - } - - var hasOwnConstructor = hasOwn.call(obj, 'constructor'); - var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf'); - // Not own constructor property must be Object - if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) { - return false; - } - - // Own properties are enumerated firstly, so to speed up, - // if last one is own, then all properties are own. - var key; - for (key in obj) { /**/ } - - return typeof key === 'undefined' || hasOwn.call(obj, key); -}; - -// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target -var setProperty = function setProperty(target, options) { - if (defineProperty && options.name === '__proto__') { - defineProperty(target, options.name, { - enumerable: true, - configurable: true, - value: options.newValue, - writable: true - }); - } else { - target[options.name] = options.newValue; - } -}; - -// Return undefined instead of __proto__ if '__proto__' is not an own property -var getProperty = function getProperty(obj, name) { - if (name === '__proto__') { - if (!hasOwn.call(obj, name)) { - return void 0; - } else if (gOPD) { - // In early versions of node, obj['__proto__'] is buggy when obj has - // __proto__ as an own property. Object.getOwnPropertyDescriptor() works. - return gOPD(obj, name).value; - } - } - - return obj[name]; -}; - -module.exports = function extend() { - var options, name, src, copy, copyIsArray, clone; - var target = arguments[0]; - var i = 1; - var length = arguments.length; - var deep = false; - - // Handle a deep copy situation - if (typeof target === 'boolean') { - deep = target; - target = arguments[1] || {}; - // skip the boolean and the target - i = 2; - } - if (target == null || (typeof target !== 'object' && typeof target !== 'function')) { - target = {}; - } - - for (; i < length; ++i) { - options = arguments[i]; - // Only deal with non-null/undefined values - if (options != null) { - // Extend the base object - for (name in options) { - src = getProperty(target, name); - copy = getProperty(options, name); - - // Prevent never-ending loop - if (target !== copy) { - // Recurse if we're merging plain objects or arrays - if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) { - if (copyIsArray) { - copyIsArray = false; - clone = src && isArray(src) ? src : []; - } else { - clone = src && isPlainObject(src) ? src : {}; - } - - // Never move original objects, clone them - setProperty(target, { name: name, newValue: extend(deep, clone, copy) }); - - // Don't bring in undefined values - } else if (typeof copy !== 'undefined') { - setProperty(target, { name: name, newValue: copy }); - } - } - } - } - } - - // Return the modified object - return target; -}; diff --git a/reverse_engineering/node_modules/extend/package.json b/reverse_engineering/node_modules/extend/package.json deleted file mode 100644 index bebe65d..0000000 --- a/reverse_engineering/node_modules/extend/package.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "_from": "extend@^3.0.2", - "_id": "extend@3.0.2", - "_inBundle": false, - "_integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "_location": "/extend", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "extend@^3.0.2", - "name": "extend", - "escapedName": "extend", - "rawSpec": "^3.0.2", - "saveSpec": null, - "fetchSpec": "^3.0.2" - }, - "_requiredBy": [ - "/@google-cloud/bigquery", - "/@google-cloud/common", - "/@google-cloud/paginator", - "/gaxios", - "/retry-request" - ], - "_resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "_shasum": "f8b1136b4071fbd8eb140aff858b1019ec2915fa", - "_spec": "extend@^3.0.2", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/@google-cloud/bigquery", - "author": { - "name": "Stefan Thomas", - "email": "justmoon@members.fsf.org", - "url": "http://www.justmoon.net" - }, - "bugs": { - "url": "https://github.com/justmoon/node-extend/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Jordan Harband", - "url": "https://github.com/ljharb" - } - ], - "dependencies": {}, - "deprecated": false, - "description": "Port of jQuery.extend for node.js and the browser", - "devDependencies": { - "@ljharb/eslint-config": "^12.2.1", - "covert": "^1.1.0", - "eslint": "^4.19.1", - "jscs": "^3.0.7", - "tape": "^4.9.1" - }, - "homepage": "https://github.com/justmoon/node-extend#readme", - "keywords": [ - "extend", - "clone", - "merge" - ], - "license": "MIT", - "main": "index", - "name": "extend", - "repository": { - "type": "git", - "url": "git+https://github.com/justmoon/node-extend.git" - }, - "scripts": { - "coverage": "covert test/index.js", - "coverage-quiet": "covert test/index.js --quiet", - "eslint": "eslint *.js */*.js", - "jscs": "jscs *.js */*.js", - "lint": "npm run jscs && npm run eslint", - "posttest": "npm run coverage-quiet", - "pretest": "npm run lint", - "test": "npm run tests-only", - "tests-only": "node test" - }, - "version": "3.0.2" -} diff --git a/reverse_engineering/node_modules/fast-text-encoding/.travis.yml b/reverse_engineering/node_modules/fast-text-encoding/.travis.yml deleted file mode 100644 index 2f36afd..0000000 --- a/reverse_engineering/node_modules/fast-text-encoding/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js - -node_js: - - stable diff --git a/reverse_engineering/node_modules/fast-text-encoding/LICENSE b/reverse_engineering/node_modules/fast-text-encoding/LICENSE deleted file mode 100644 index 8dada3e..0000000 --- a/reverse_engineering/node_modules/fast-text-encoding/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/reverse_engineering/node_modules/fast-text-encoding/README.md b/reverse_engineering/node_modules/fast-text-encoding/README.md deleted file mode 100644 index 84f0ffc..0000000 --- a/reverse_engineering/node_modules/fast-text-encoding/README.md +++ /dev/null @@ -1,58 +0,0 @@ -[![Build](https://api.travis-ci.org/samthor/fast-text-encoding.svg?branch=master)](https://travis-ci.org/samthor/fast-text-encoding) - -This is a fast polyfill for [`TextEncoder`][1] and [`TextDecoder`][2], which let you encode and decode JavaScript strings into UTF-8 bytes. - -It is fast partially as it does not support any encodings aside UTF-8 (and note that natively, only `TextDecoder` supports alternative encodings anyway). -See [some benchmarks](https://github.com/samthor/fast-text-encoding/tree/master/bench). - -[1]: https://developer.mozilla.org/en-US/docs/Web/API/TextEncoder -[2]: https://developer.mozilla.org/en-US/docs/Web/API/TextDecoder - -# Usage - -Install as "fast-text-encoding" via your favourite package manager. - -You only need this polyfill if you're supporting older browsers like IE, legacy Edge, ancient Chrome and Firefox, or Node before v11. - -## Browser - -Include the minified code inside a `script` tag or as an ES6 Module for its side effects. -It will create `TextEncoder` and `TextDecoder` if the symbols are missing on `window` or `global.` - -```html - - -``` - -⚠️ You'll probably want to depend on `text.min.js`, as it's compiled to ES5 for older environments. - -## Node - -You only need this polyfill in Node before v11. -However, you can use `Buffer` to provide the same functionality (but not conforming to any spec) in versions even older than that. - -```js -require('fast-text-encoding'); // just require me before use - -const buffer = new TextEncoder().encode('Turn me into UTF-8!'); -// buffer is now a Uint8Array of [84, 117, 114, 110, ...] -``` - -In Node v5.1 and above, this polyfill uses `Buffer` to implement `TextDecoder`. - -# Release - -Compile code with [Closure Compiler](https://closure-compiler.appspot.com/home). - -``` -// ==ClosureCompiler== -// @compilation_level ADVANCED_OPTIMIZATIONS -// @output_file_name text.min.js -// ==/ClosureCompiler== - -// code here -``` diff --git a/reverse_engineering/node_modules/fast-text-encoding/compile.sh b/reverse_engineering/node_modules/fast-text-encoding/compile.sh deleted file mode 100755 index b8d83ef..0000000 --- a/reverse_engineering/node_modules/fast-text-encoding/compile.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env sh - -google-closure-compiler \ - --compilation_level ADVANCED \ - --js_output_file text.min.js \ - --language_out ECMASCRIPT5 \ - --warning_level VERBOSE \ - --create_source_map %outname%.map \ - --externs externs.js \ - text.js diff --git a/reverse_engineering/node_modules/fast-text-encoding/externs.js b/reverse_engineering/node_modules/fast-text-encoding/externs.js deleted file mode 100644 index acf27c5..0000000 --- a/reverse_engineering/node_modules/fast-text-encoding/externs.js +++ /dev/null @@ -1,20 +0,0 @@ - -/** - * @constructor - */ -var Buffer; - -/** - * @param {!ArrayBuffer} raw - * @param {number} byteOffset - * @param {number} byteLength - * @return {!Buffer} - */ -Buffer.from = function(raw, byteOffset, byteLength) {}; - -/** - * @this {*} - * @param {string} encoding - * @return {string} - */ -Buffer.prototype.toString = function(encoding) {}; diff --git a/reverse_engineering/node_modules/fast-text-encoding/package.json b/reverse_engineering/node_modules/fast-text-encoding/package.json deleted file mode 100644 index 871e4bd..0000000 --- a/reverse_engineering/node_modules/fast-text-encoding/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "_from": "fast-text-encoding@^1.0.0", - "_id": "fast-text-encoding@1.0.3", - "_inBundle": false, - "_integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==", - "_location": "/fast-text-encoding", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "fast-text-encoding@^1.0.0", - "name": "fast-text-encoding", - "escapedName": "fast-text-encoding", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/google-auth-library" - ], - "_resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", - "_shasum": "ec02ac8e01ab8a319af182dae2681213cfe9ce53", - "_spec": "fast-text-encoding@^1.0.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/google-auth-library", - "author": { - "name": "Sam Thorogood", - "email": "sam.thorogood@gmail.com" - }, - "bugs": { - "url": "https://github.com/samthor/fast-text-encoding/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Fast polyfill for TextEncoder and TextDecoder, only supports utf-8", - "devDependencies": { - "chai": "^4.2.0", - "google-closure-compiler": "^20200406.0.0", - "mocha": "^7.1.0" - }, - "homepage": "https://github.com/samthor/fast-text-encoding#readme", - "license": "Apache-2.0", - "main": "text.min.js", - "name": "fast-text-encoding", - "repository": { - "type": "git", - "url": "git+https://github.com/samthor/fast-text-encoding.git" - }, - "scripts": { - "compile": "./compile.sh", - "test": "mocha" - }, - "version": "1.0.3" -} diff --git a/reverse_engineering/node_modules/fast-text-encoding/text.js b/reverse_engineering/node_modules/fast-text-encoding/text.js deleted file mode 100644 index 96b866e..0000000 --- a/reverse_engineering/node_modules/fast-text-encoding/text.js +++ /dev/null @@ -1,280 +0,0 @@ -/* - * Copyright 2017 Sam Thorogood. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -/** - * @fileoverview Polyfill for TextEncoder and TextDecoder. - * - * You probably want `text.min.js`, and not this file directly. - */ - -(function(scope) { -'use strict'; - -// fail early -if (scope['TextEncoder'] && scope['TextDecoder']) { - return false; -} - -// used for FastTextDecoder -const validUtfLabels = ['utf-8', 'utf8', 'unicode-1-1-utf-8']; - -/** - * @constructor - */ -function FastTextEncoder() { - // This does not accept an encoding, and always uses UTF-8: - // https://www.w3.org/TR/encoding/#dom-textencoder -} - -Object.defineProperty(FastTextEncoder.prototype, 'encoding', {value: 'utf-8'}); - -/** - * @param {string} string - * @param {{stream: boolean}=} options - * @return {!Uint8Array} - */ -FastTextEncoder.prototype['encode'] = function(string, options={stream: false}) { - if (options.stream) { - throw new Error(`Failed to encode: the 'stream' option is unsupported.`); - } - - let pos = 0; - const len = string.length; - - let at = 0; // output position - let tlen = Math.max(32, len + (len >>> 1) + 7); // 1.5x size - let target = new Uint8Array((tlen >>> 3) << 3); // ... but at 8 byte offset - - while (pos < len) { - let value = string.charCodeAt(pos++); - if (value >= 0xd800 && value <= 0xdbff) { - // high surrogate - if (pos < len) { - const extra = string.charCodeAt(pos); - if ((extra & 0xfc00) === 0xdc00) { - ++pos; - value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000; - } - } - if (value >= 0xd800 && value <= 0xdbff) { - continue; // drop lone surrogate - } - } - - // expand the buffer if we couldn't write 4 bytes - if (at + 4 > target.length) { - tlen += 8; // minimum extra - tlen *= (1.0 + (pos / string.length) * 2); // take 2x the remaining - tlen = (tlen >>> 3) << 3; // 8 byte offset - - const update = new Uint8Array(tlen); - update.set(target); - target = update; - } - - if ((value & 0xffffff80) === 0) { // 1-byte - target[at++] = value; // ASCII - continue; - } else if ((value & 0xfffff800) === 0) { // 2-byte - target[at++] = ((value >>> 6) & 0x1f) | 0xc0; - } else if ((value & 0xffff0000) === 0) { // 3-byte - target[at++] = ((value >>> 12) & 0x0f) | 0xe0; - target[at++] = ((value >>> 6) & 0x3f) | 0x80; - } else if ((value & 0xffe00000) === 0) { // 4-byte - target[at++] = ((value >>> 18) & 0x07) | 0xf0; - target[at++] = ((value >>> 12) & 0x3f) | 0x80; - target[at++] = ((value >>> 6) & 0x3f) | 0x80; - } else { - continue; // out of range - } - - target[at++] = (value & 0x3f) | 0x80; - } - - // Use subarray if slice isn't supported (IE11). This will use more memory - // because the original array still exists. - return target.slice ? target.slice(0, at) : target.subarray(0, at); -} - -/** - * @constructor - * @param {string=} utfLabel - * @param {{fatal: boolean}=} options - */ -function FastTextDecoder(utfLabel='utf-8', options={fatal: false}) { - if (validUtfLabels.indexOf(utfLabel.toLowerCase()) === -1) { - throw new RangeError( - `Failed to construct 'TextDecoder': The encoding label provided ('${utfLabel}') is invalid.`); - } - if (options.fatal) { - throw new Error(`Failed to construct 'TextDecoder': the 'fatal' option is unsupported.`); - } -} - -Object.defineProperty(FastTextDecoder.prototype, 'encoding', {value: 'utf-8'}); - -Object.defineProperty(FastTextDecoder.prototype, 'fatal', {value: false}); - -Object.defineProperty(FastTextDecoder.prototype, 'ignoreBOM', {value: false}); - -/** - * @param {!Uint8Array} bytes - * @return {string} - */ -function decodeBuffer(bytes) { - return Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength).toString('utf-8'); -} - -/** - * @param {!Uint8Array} bytes - * @return {string} - */ -function decodeSyncXHR(bytes) { - const b = new Blob([bytes], {type: 'text/plain;charset=UTF-8'}); - const u = URL.createObjectURL(b); - - // This hack will fail in non-Edgium Edge because sync XHRs are disabled (and - // possibly in other places), so ensure there's a fallback call. - try { - const x = new XMLHttpRequest(); - x.open('GET', u, false); - x.send(); - return x.responseText; - } catch (e) { - return decodeFallback(bytes); - } finally { - URL.revokeObjectURL(u); - } -} - -/** - * @param {!Uint8Array} bytes - * @return {string} - */ -function decodeFallback(bytes) { - let inputIndex = 0; - - // Create a working buffer for UTF-16 code points, but don't generate one - // which is too large for small input sizes. UTF-8 to UCS-16 conversion is - // going to be at most 1:1, if all code points are ASCII. The other extreme - // is 4-byte UTF-8, which results in two UCS-16 points, but this is still 50% - // fewer entries in the output. - const pendingSize = Math.min(256 * 256, bytes.length + 1); - const pending = new Uint16Array(pendingSize); - const chunks = []; - let pendingIndex = 0; - - for (;;) { - const more = inputIndex < bytes.length; - - // If there's no more data or there'd be no room for two UTF-16 values, - // create a chunk. This isn't done at the end by simply slicing the data - // into equal sized chunks as we might hit a surrogate pair. - if (!more || (pendingIndex >= pendingSize - 1)) { - // nb. .apply and friends are *really slow*. Low-hanging fruit is to - // expand this to literally pass pending[0], pending[1], ... etc, but - // the output code expands pretty fast in this case. - chunks.push(String.fromCharCode.apply(null, pending.subarray(0, pendingIndex))); - - if (!more) { - return chunks.join(''); - } - - // Move the buffer forward and create another chunk. - bytes = bytes.subarray(inputIndex); - inputIndex = 0; - pendingIndex = 0; - } - - // The native TextDecoder will generate "REPLACEMENT CHARACTER" where the - // input data is invalid. Here, we blindly parse the data even if it's - // wrong: e.g., if a 3-byte sequence doesn't have two valid continuations. - - const byte1 = bytes[inputIndex++]; - if ((byte1 & 0x80) === 0) { // 1-byte or null - pending[pendingIndex++] = byte1; - } else if ((byte1 & 0xe0) === 0xc0) { // 2-byte - const byte2 = bytes[inputIndex++] & 0x3f; - pending[pendingIndex++] = ((byte1 & 0x1f) << 6) | byte2; - } else if ((byte1 & 0xf0) === 0xe0) { // 3-byte - const byte2 = bytes[inputIndex++] & 0x3f; - const byte3 = bytes[inputIndex++] & 0x3f; - pending[pendingIndex++] = ((byte1 & 0x1f) << 12) | (byte2 << 6) | byte3; - } else if ((byte1 & 0xf8) === 0xf0) { // 4-byte - const byte2 = bytes[inputIndex++] & 0x3f; - const byte3 = bytes[inputIndex++] & 0x3f; - const byte4 = bytes[inputIndex++] & 0x3f; - - // this can be > 0xffff, so possibly generate surrogates - let codepoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0c) | (byte3 << 0x06) | byte4; - if (codepoint > 0xffff) { - // codepoint &= ~0x10000; - codepoint -= 0x10000; - pending[pendingIndex++] = (codepoint >>> 10) & 0x3ff | 0xd800; - codepoint = 0xdc00 | codepoint & 0x3ff; - } - pending[pendingIndex++] = codepoint; - } else { - // invalid initial byte - } - } -} - -// Decoding a string is pretty slow, but use alternative options where possible. -let decodeImpl = decodeFallback; -if (typeof Buffer === 'function' && Buffer.from) { - // Buffer.from was added in Node v5.10.0 (2015-11-17). - decodeImpl = decodeBuffer; -} else if (typeof Blob === 'function' && typeof URL === 'function' && typeof URL.createObjectURL === 'function') { - // Blob and URL.createObjectURL are available from IE10, Safari 6, Chrome 19 - // (all released in 2012), Firefox 19 (2013), ... - decodeImpl = decodeSyncXHR; -} - -/** - * @param {(!ArrayBuffer|!ArrayBufferView)} buffer - * @param {{stream: boolean}=} options - * @return {string} - */ -FastTextDecoder.prototype['decode'] = function(buffer, options={stream: false}) { - if (options['stream']) { - throw new Error(`Failed to decode: the 'stream' option is unsupported.`); - } - - let bytes; - - if (buffer instanceof Uint8Array) { - // Accept Uint8Array instances as-is. - bytes = buffer; - } else if (buffer.buffer instanceof ArrayBuffer) { - // Look for ArrayBufferView, which isn't a real type, but basically - // represents all the valid TypedArray types plus DataView. They all have - // ".buffer" as an instance of ArrayBuffer. - bytes = new Uint8Array(buffer.buffer); - } else { - // The only other valid argument here is that "buffer" is an ArrayBuffer. - // We also try to convert anything else passed to a Uint8Array, as this - // catches anything that's array-like. Native code would throw here. - bytes = new Uint8Array(buffer); - } - - return decodeImpl(/** @type {!Uint8Array} */ (bytes)); -} - -scope['TextEncoder'] = FastTextEncoder; -scope['TextDecoder'] = FastTextDecoder; - -}(typeof window !== 'undefined' ? window : (typeof global !== 'undefined' ? global : this))); diff --git a/reverse_engineering/node_modules/fast-text-encoding/text.min.js b/reverse_engineering/node_modules/fast-text-encoding/text.min.js deleted file mode 100644 index 62457f7..0000000 --- a/reverse_engineering/node_modules/fast-text-encoding/text.min.js +++ /dev/null @@ -1,6 +0,0 @@ -(function(l){function m(){}function k(a,c){a=void 0===a?"utf-8":a;c=void 0===c?{fatal:!1}:c;if(-1===r.indexOf(a.toLowerCase()))throw new RangeError("Failed to construct 'TextDecoder': The encoding label provided ('"+a+"') is invalid.");if(c.fatal)throw Error("Failed to construct 'TextDecoder': the 'fatal' option is unsupported.");}function t(a){return Buffer.from(a.buffer,a.byteOffset,a.byteLength).toString("utf-8")}function u(a){var c=URL.createObjectURL(new Blob([a],{type:"text/plain;charset=UTF-8"})); -try{var f=new XMLHttpRequest;f.open("GET",c,!1);f.send();return f.responseText}catch(e){return q(a)}finally{URL.revokeObjectURL(c)}}function q(a){for(var c=0,f=Math.min(65536,a.length+1),e=new Uint16Array(f),h=[],d=0;;){var b=c=f-1){h.push(String.fromCharCode.apply(null,e.subarray(0,d)));if(!b)return h.join("");a=a.subarray(c);d=c=0}b=a[c++];if(0===(b&128))e[d++]=b;else if(192===(b&224)){var g=a[c++]&63;e[d++]=(b&31)<<6|g}else if(224===(b&240)){g=a[c++]&63;var n=a[c++]&63;e[d++]= -(b&31)<<12|g<<6|n}else if(240===(b&248)){g=a[c++]&63;n=a[c++]&63;var v=a[c++]&63;b=(b&7)<<18|g<<12|n<<6|v;65535>>10&1023|55296,b=56320|b&1023);e[d++]=b}}}if(l.TextEncoder&&l.TextDecoder)return!1;var r=["utf-8","utf8","unicode-1-1-utf-8"];Object.defineProperty(m.prototype,"encoding",{value:"utf-8"});m.prototype.encode=function(a,c){c=void 0===c?{stream:!1}:c;if(c.stream)throw Error("Failed to encode: the 'stream' option is unsupported.");c=0;for(var f=a.length,e=0,h=Math.max(32, -f+(f>>>1)+7),d=new Uint8Array(h>>>3<<3);c=b){if(c=b)continue}e+4>d.length&&(h+=8,h*=1+c/a.length*2,h=h>>>3<<3,g=new Uint8Array(h),g.set(d),d=g);if(0===(b&4294967168))d[e++]=b;else{if(0===(b&4294965248))d[e++]=b>>>6&31|192;else if(0===(b&4294901760))d[e++]=b>>>12&15|224,d[e++]=b>>>6&63|128;else if(0===(b&4292870144))d[e++]=b>>>18&7|240,d[e++]=b>>>12& -63|128,d[e++]=b>>>6&63|128;else continue;d[e++]=b&63|128}}return d.slice?d.slice(0,e):d.subarray(0,e)};Object.defineProperty(k.prototype,"encoding",{value:"utf-8"});Object.defineProperty(k.prototype,"fatal",{value:!1});Object.defineProperty(k.prototype,"ignoreBOM",{value:!1});var p=q;"function"===typeof Buffer&&Buffer.from?p=t:"function"===typeof Blob&&"function"===typeof URL&&"function"===typeof URL.createObjectURL&&(p=u);k.prototype.decode=function(a,c){c=void 0===c?{stream:!1}:c;if(c.stream)throw Error("Failed to decode: the 'stream' option is unsupported."); -a=a instanceof Uint8Array?a:a.buffer instanceof ArrayBuffer?new Uint8Array(a.buffer):new Uint8Array(a);return p(a)};l.TextEncoder=m;l.TextDecoder=k})("undefined"!==typeof window?window:"undefined"!==typeof global?global:this); diff --git a/reverse_engineering/node_modules/fast-text-encoding/text.min.js.map b/reverse_engineering/node_modules/fast-text-encoding/text.min.js.map deleted file mode 100644 index 747307d..0000000 --- a/reverse_engineering/node_modules/fast-text-encoding/text.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"text.min.js", -"lineCount":6, -"mappings":"AAsBC,SAAQ,CAACA,CAAD,CAAQ,CAcjBC,QAASA,EAAe,EAAG,EAgF3BC,QAASA,EAAe,CAACC,CAAD,CAAmBC,CAAnB,CAA2C,CAA1CD,CAAA,CAAA,IAAA,EAAA,GAAAA,CAAA,CAAS,OAAT,CAAAA,CAAkBC,EAAA,CAAA,IAAA,EAAA,GAAAA,CAAA,CAAQ,CAACC,MAAO,CAAA,CAAR,CAAR,CAAAD,CACzC,IAAuD,EAAvD,GAAIE,CAAAC,QAAA,CAAuBJ,CAAAK,YAAA,EAAvB,CAAJ,CACE,KAAM,KAAIC,UAAJ,CACJ,mEADI,CACgEN,CADhE,CACJ,gBADI,CAAN,CAGF,GAAIC,CAAAC,MAAJ,CACE,KAAUK,MAAJ,CAAU,uEAAV,CAAN,CAN+D,CAoBnEC,QAASA,EAAY,CAACC,CAAD,CAAQ,CAC3B,MAAOC,OAAAC,KAAA,CAAYF,CAAAG,OAAZ,CAA0BH,CAAAI,WAA1B,CAA4CJ,CAAAK,WAA5C,CAAAC,SAAA,CAAuE,OAAvE,CADoB,CAQ7BC,QAASA,EAAa,CAACP,CAAD,CAAQ,CAE5B,IAAMQ,EAAIC,GAAAC,gBAAA,CADAC,IAAIC,IAAJD,CAAS,CAACX,CAAD,CAATW,CAAkB,CAACE,KAAM,0BAAP,CAAlBF,CACA,CAIV;GAAI,CACF,IAAMG,EAAI,IAAIC,cACdD,EAAAE,KAAA,CAAO,KAAP,CAAcR,CAAd,CAAiB,CAAA,CAAjB,CACAM,EAAAG,KAAA,EACA,OAAOH,EAAAI,aAJL,CAKF,MAAOC,CAAP,CAAU,CACV,MAAOC,EAAA,CAAepB,CAAf,CADG,CALZ,OAOU,CACRS,GAAAY,gBAAA,CAAoBb,CAApB,CADQ,CAbkB,CAsB9BY,QAASA,EAAc,CAACpB,CAAD,CAAQ,CAa7B,IAZA,IAAIsB,EAAa,CAAjB,CAOMC,EAAcC,IAAAC,IAAA,CAAS,KAAT,CAAoBzB,CAAA0B,OAApB,CAAmC,CAAnC,CAPpB,CAQMC,EAAU,IAAIC,WAAJ,CAAgBL,CAAhB,CARhB,CASMM,EAAS,EATf,CAUIC,EAAe,CAEnB,CAAA,CAAA,CAAS,CACP,IAAMC,EAAOT,CAAPS,CAAoB/B,CAAA0B,OAK1B,IAAI,CAACK,CAAL,EAAcD,CAAd,EAA8BP,CAA9B,CAA4C,CAA5C,CAAgD,CAI9CM,CAAAG,KAAA,CAAYC,MAAAC,aAAAC,MAAA,CAA0B,IAA1B,CAAgCR,CAAAS,SAAA,CAAiB,CAAjB,CAAoBN,CAApB,CAAhC,CAAZ,CAEA,IAAI,CAACC,CAAL,CACE,MAAOF,EAAAQ,KAAA,CAAY,EAAZ,CAITrC,EAAA,CAAQA,CAAAoC,SAAA,CAAed,CAAf,CAERQ,EAAA,CADAR,CACA,CADa,CAZiC,CAoB1CgB,CAAAA,CAAQtC,CAAA,CAAMsB,CAAA,EAAN,CACd,IAAuB,CAAvB,IAAKgB,CAAL,CAAa,GAAb,EACEX,CAAA,CAAQG,CAAA,EAAR,CAAA,CAA0BQ,CAD5B,KAEO,IAAuB,GAAvB,IAAKA,CAAL,CAAa,GAAb,EAA6B,CAClC,IAAMC,EAAQvC,CAAA,CAAMsB,CAAA,EAAN,CAARiB,CAA8B,EACpCZ,EAAA,CAAQG,CAAA,EAAR,CAAA,EAA4BQ,CAA5B,CAAoC,EAApC,GAA6C,CAA7C,CAAkDC,CAFhB,CAA7B,IAGA,IAAuB,GAAvB,IAAKD,CAAL,CAAa,GAAb,EAA6B,CAC5BC,CAAAA,CAAQvC,CAAA,CAAMsB,CAAA,EAAN,CAARiB,CAA8B,EACpC,KAAMC,EAAQxC,CAAA,CAAMsB,CAAA,EAAN,CAARkB,CAA8B,EACpCb,EAAA,CAAQG,CAAA,EAAR,CAAA;CAA4BQ,CAA5B,CAAoC,EAApC,GAA6C,EAA7C,CAAoDC,CAApD,EAA6D,CAA7D,CAAkEC,CAHhC,CAA7B,IAIA,IAAuB,GAAvB,IAAKF,CAAL,CAAa,GAAb,EAA6B,CAC5BC,CAAAA,CAAQvC,CAAA,CAAMsB,CAAA,EAAN,CAARiB,CAA8B,EAC9BC,EAAAA,CAAQxC,CAAA,CAAMsB,CAAA,EAAN,CAARkB,CAA8B,EACpC,KAAMC,EAAQzC,CAAA,CAAMsB,CAAA,EAAN,CAARmB,CAA8B,EAGhCC,EAAAA,EAAcJ,CAAdI,CAAsB,CAAtBA,GAA+B,EAA/BA,CAAwCH,CAAxCG,EAAiD,EAAjDA,CAA0DF,CAA1DE,EAAmE,CAAnEA,CAA2ED,CAC/D,MAAhB,CAAIC,CAAJ,GAEEA,CAEA,EAFa,KAEb,CADAf,CAAA,CAAQG,CAAA,EAAR,CACA,CAD2BY,CAC3B,GADyC,EACzC,CAD+C,IAC/C,CADuD,KACvD,CAAAA,CAAA,CAAY,KAAZ,CAAqBA,CAArB,CAAiC,IAJnC,CAMAf,EAAA,CAAQG,CAAA,EAAR,CAAA,CAA0BY,CAbQ,CApC7B,CAboB,CA5I/B,GAAItD,CAAA,YAAJ,EAA4BA,CAAA,YAA5B,CACE,MAAO,CAAA,CAIT,KAAMM,EAAiB,CAAC,OAAD,CAAU,MAAV,CAAkB,mBAAlB,CAUvBiD,OAAAC,eAAA,CAAsBvD,CAAAwD,UAAtB,CAAiD,UAAjD,CAA6D,CAACC,MAAO,OAAR,CAA7D,CAOAzD,EAAAwD,UAAA,OAAA,CAAsC,QAAQ,CAACE,CAAD,CAASvD,CAAT,CAAkC,CAAzBA,CAAA,CAAA,IAAA,EAAA,GAAAA,CAAA,CAAQ,CAACwD,OAAQ,CAAA,CAAT,CAAR,CAAAxD,CACrD,IAAIA,CAAAwD,OAAJ,CACE,KAAUlD,MAAJ,CAAU,uDAAV,CAAN,CAGEmD,CAAAA,CAAM,CAOV,KANA,IAAMC,EAAMH,CAAArB,OAAZ,CAEIyB,EAAK,CAFT,CAGIC,EAAO5B,IAAA6B,IAAA,CAAS,EAAT;AAAaH,CAAb,EAAoBA,CAApB,GAA4B,CAA5B,EAAiC,CAAjC,CAHX,CAIII,EAAS,IAAIC,UAAJ,CAAgBH,CAAhB,GAAyB,CAAzB,EAA+B,CAA/B,CAEb,CAAOH,CAAP,CAAaC,CAAb,CAAA,CAAkB,CAChB,IAAIJ,EAAQC,CAAAS,WAAA,CAAkBP,CAAA,EAAlB,CACZ,IAAa,KAAb,EAAIH,CAAJ,EAAgC,KAAhC,EAAuBA,CAAvB,CAAwC,CAEtC,GAAIG,CAAJ,CAAUC,CAAV,CAAe,CACb,IAAMO,EAAQV,CAAAS,WAAA,CAAkBP,CAAlB,CACW,MAAzB,IAAKQ,CAAL,CAAa,KAAb,IACE,EAAER,CACF,CAAAH,CAAA,GAAUA,CAAV,CAAkB,IAAlB,GAA4B,EAA5B,GAAmCW,CAAnC,CAA2C,IAA3C,EAAoD,KAFtD,CAFa,CAOf,GAAa,KAAb,EAAIX,CAAJ,EAAgC,KAAhC,EAAuBA,CAAvB,CACE,QAVoC,CAepCK,CAAJ,CAAS,CAAT,CAAaG,CAAA5B,OAAb,GACE0B,CAMA,EANQ,CAMR,CALAA,CAKA,EALS,CAKT,CALgBH,CAKhB,CALsBF,CAAArB,OAKtB,CALuC,CAKvC,CAJA0B,CAIA,CAJQA,CAIR,GAJiB,CAIjB,EAJuB,CAIvB,CAFMM,CAEN,CAFe,IAAIH,UAAJ,CAAeH,CAAf,CAEf,CADAM,CAAAC,IAAA,CAAWL,CAAX,CACA,CAAAA,CAAA,CAASI,CAPX,CAUA,IAA6B,CAA7B,IAAKZ,CAAL,CAAa,UAAb,EACEQ,CAAA,CAAOH,CAAA,EAAP,CAAA,CAAeL,CADjB,KAGO,CAAA,GAA6B,CAA7B,IAAKA,CAAL,CAAa,UAAb,EACLQ,CAAA,CAAOH,CAAA,EAAP,CAAA,CAAiBL,CAAjB,GAA4B,CAA5B,CAAiC,EAAjC,CAAyC,GADpC,KAEA,IAA6B,CAA7B,IAAKA,CAAL,CAAa,UAAb,EACLQ,CAAA,CAAOH,CAAA,EAAP,CACA,CADiBL,CACjB,GAD2B,EAC3B,CADiC,EACjC,CADyC,GACzC,CAAAQ,CAAA,CAAOH,CAAA,EAAP,CAAA,CAAiBL,CAAjB,GAA4B,CAA5B,CAAiC,EAAjC,CAAyC,GAFpC,KAGA,IAA6B,CAA7B,IAAKA,CAAL,CAAa,UAAb,EACLQ,CAAA,CAAOH,CAAA,EAAP,CAEA,CAFiBL,CAEjB,GAF2B,EAE3B,CAFiC,CAEjC,CAFyC,GAEzC,CADAQ,CAAA,CAAOH,CAAA,EAAP,CACA,CADiBL,CACjB,GAD2B,EAC3B;AADiC,EACjC,CADyC,GACzC,CAAAQ,CAAA,CAAOH,CAAA,EAAP,CAAA,CAAiBL,CAAjB,GAA4B,CAA5B,CAAiC,EAAjC,CAAyC,GAHpC,KAKL,SAGFQ,EAAA,CAAOH,CAAA,EAAP,CAAA,CAAgBL,CAAhB,CAAwB,EAAxB,CAAgC,GAbzB,CA9BS,CAgDlB,MAAOQ,EAAAM,MAAA,CAAeN,CAAAM,MAAA,CAAa,CAAb,CAAgBT,CAAhB,CAAf,CAAqCG,CAAAlB,SAAA,CAAgB,CAAhB,CAAmBe,CAAnB,CA5DkC,CA8EhFR,OAAAC,eAAA,CAAsBtD,CAAAuD,UAAtB,CAAiD,UAAjD,CAA6D,CAACC,MAAO,OAAR,CAA7D,CAEAH,OAAAC,eAAA,CAAsBtD,CAAAuD,UAAtB,CAAiD,OAAjD,CAA0D,CAACC,MAAO,CAAA,CAAR,CAA1D,CAEAH,OAAAC,eAAA,CAAsBtD,CAAAuD,UAAtB,CAAiD,WAAjD,CAA8D,CAACC,MAAO,CAAA,CAAR,CAA9D,CA0GA,KAAIe,EAAazC,CACK,WAAtB,GAAI,MAAOnB,OAAX,EAAoCA,MAAAC,KAApC,CAEE2D,CAFF,CAEe9D,CAFf,CAG2B,UAH3B,GAGW,MAAOa,KAHlB,EAGwD,UAHxD,GAGyC,MAAOH,IAHhD,EAGqG,UAHrG,GAGsE,MAAOA,IAAAC,gBAH7E,GAMEmD,CANF,CAMetD,CANf,CAcAjB,EAAAuD,UAAA,OAAA,CAAsC,QAAQ,CAAC1C,CAAD,CAASX,CAAT,CAAkC,CAAzBA,CAAA,CAAA,IAAA,EAAA,GAAAA,CAAA,CAAQ,CAACwD,OAAQ,CAAA,CAAT,CAAR,CAAAxD,CACrD,IAAIA,CAAA,OAAJ,CACE,KAAUM,MAAJ,CAAU,uDAAV,CAAN;AAOAE,CAAA,CAFEG,CAAJ,WAAsBoD,WAAtB,CAEUpD,CAFV,CAGWA,CAAAA,OAAJ,WAA6B2D,YAA7B,CAIG,IAAIP,UAAJ,CAAepD,CAAAA,OAAf,CAJH,CASG,IAAIoD,UAAJ,CAAepD,CAAf,CAGV,OAAO0D,EAAA,CAAuC7D,CAAvC,CAtBuE,CAyBhFZ,EAAA,YAAA,CAAuBC,CACvBD,EAAA,YAAA,CAAuBE,CA/PN,CAAhB,CAAA,CAiQmB,WAAlB,GAAA,MAAOyE,OAAP,CAAgCA,MAAhC,CAA4D,WAAlB,GAAA,MAAOC,OAAP,CAAgCA,MAAhC,CAAyC,IAjQpF;", -"sources":["text.js"], -"names":["scope","FastTextEncoder","FastTextDecoder","utfLabel","options","fatal","validUtfLabels","indexOf","toLowerCase","RangeError","Error","decodeBuffer","bytes","Buffer","from","buffer","byteOffset","byteLength","toString","decodeSyncXHR","u","URL","createObjectURL","b","Blob","type","x","XMLHttpRequest","open","send","responseText","e","decodeFallback","revokeObjectURL","inputIndex","pendingSize","Math","min","length","pending","Uint16Array","chunks","pendingIndex","more","push","String","fromCharCode","apply","subarray","join","byte1","byte2","byte3","byte4","codepoint","Object","defineProperty","prototype","value","string","stream","pos","len","at","tlen","max","target","Uint8Array","charCodeAt","extra","update","set","slice","decodeImpl","ArrayBuffer","window","global"] -} diff --git a/reverse_engineering/node_modules/gaxios/CHANGELOG.md b/reverse_engineering/node_modules/gaxios/CHANGELOG.md deleted file mode 100644 index 8586cac..0000000 --- a/reverse_engineering/node_modules/gaxios/CHANGELOG.md +++ /dev/null @@ -1,189 +0,0 @@ -# Changelog - -## [4.3.0](https://www.github.com/googleapis/gaxios/compare/v4.2.1...v4.3.0) (2021-05-26) - - -### Features - -* allow cert and key to be provided for mTLS ([#399](https://www.github.com/googleapis/gaxios/issues/399)) ([d74ab91](https://www.github.com/googleapis/gaxios/commit/d74ab9125d581e46d655614729872e79317c740d)) - -### [4.2.1](https://www.github.com/googleapis/gaxios/compare/v4.2.0...v4.2.1) (2021-04-20) - - -### Bug Fixes - -* **deps:** upgrade webpack and karma-webpack ([#379](https://www.github.com/googleapis/gaxios/issues/379)) ([75c9013](https://www.github.com/googleapis/gaxios/commit/75c90132e99c2f960c01e0faf0f8e947c920aa73)) - -## [4.2.0](https://www.github.com/googleapis/gaxios/compare/v4.1.0...v4.2.0) (2021-03-01) - - -### Features - -* handle application/x-www-form-urlencoded/Buffer ([#374](https://www.github.com/googleapis/gaxios/issues/374)) ([ce21e9c](https://www.github.com/googleapis/gaxios/commit/ce21e9ccd228578a9f90bb2fddff797cec4a9402)) - -## [4.1.0](https://www.github.com/googleapis/gaxios/compare/v4.0.1...v4.1.0) (2020-12-08) - - -### Features - -* add an option to configure the fetch impl ([#342](https://www.github.com/googleapis/gaxios/issues/342)) ([2e081ef](https://www.github.com/googleapis/gaxios/commit/2e081ef161d84aa435788e8d525d393dc7964117)) -* add no_proxy env variable ([#361](https://www.github.com/googleapis/gaxios/issues/361)) ([efe72a7](https://www.github.com/googleapis/gaxios/commit/efe72a71de81d466160dde5da551f7a41acc3ac4)) - -### [4.0.1](https://www.github.com/googleapis/gaxios/compare/v4.0.0...v4.0.1) (2020-10-27) - - -### Bug Fixes - -* prevent bonus ? with empty qs params ([#357](https://www.github.com/googleapis/gaxios/issues/357)) ([b155f76](https://www.github.com/googleapis/gaxios/commit/b155f76cbc4c234da1d99c26691296702342c205)) - -## [4.0.0](https://www.github.com/googleapis/gaxios/compare/v3.2.0...v4.0.0) (2020-10-21) - - -### ⚠ BREAKING CHANGES - -* parameters in `url` and parameters provided via params will now be combined. - -### Bug Fixes - -* drop requirement on URL/combine url and params ([#338](https://www.github.com/googleapis/gaxios/issues/338)) ([e166bc6](https://www.github.com/googleapis/gaxios/commit/e166bc6721fd979070ab3d9c69b71ffe9ee061c7)) - -## [3.2.0](https://www.github.com/googleapis/gaxios/compare/v3.1.0...v3.2.0) (2020-09-14) - - -### Features - -* add initial retry delay, and set default to 100ms ([#336](https://www.github.com/googleapis/gaxios/issues/336)) ([870326b](https://www.github.com/googleapis/gaxios/commit/870326b8245f16fafde0b0c32cfd2f277946e3a1)) - -## [3.1.0](https://www.github.com/googleapis/gaxios/compare/v3.0.4...v3.1.0) (2020-07-30) - - -### Features - -* pass default adapter to adapter option ([#319](https://www.github.com/googleapis/gaxios/issues/319)) ([cf06bd9](https://www.github.com/googleapis/gaxios/commit/cf06bd9f51cbe707ed5973e390d31a091d4537c1)) - -### [3.0.4](https://www.github.com/googleapis/gaxios/compare/v3.0.3...v3.0.4) (2020-07-09) - - -### Bug Fixes - -* typeo in nodejs .gitattribute ([#306](https://www.github.com/googleapis/gaxios/issues/306)) ([8514672](https://www.github.com/googleapis/gaxios/commit/8514672f9d56bc6f077dcbab050b3342d4e343c6)) - -### [3.0.3](https://www.github.com/googleapis/gaxios/compare/v3.0.2...v3.0.3) (2020-04-20) - - -### Bug Fixes - -* apache license URL ([#468](https://www.github.com/googleapis/gaxios/issues/468)) ([#272](https://www.github.com/googleapis/gaxios/issues/272)) ([cf1b7cb](https://www.github.com/googleapis/gaxios/commit/cf1b7cb66e4c98405236834e63349931b4f35b90)) - -### [3.0.2](https://www.github.com/googleapis/gaxios/compare/v3.0.1...v3.0.2) (2020-03-24) - - -### Bug Fixes - -* continue replacing application/x-www-form-urlencoded with application/json ([#263](https://www.github.com/googleapis/gaxios/issues/263)) ([dca176d](https://www.github.com/googleapis/gaxios/commit/dca176df0990f2c22255f9764405c496ea07ada2)) - -### [3.0.1](https://www.github.com/googleapis/gaxios/compare/v3.0.0...v3.0.1) (2020-03-23) - - -### Bug Fixes - -* allow an alternate JSON content-type to be set ([#257](https://www.github.com/googleapis/gaxios/issues/257)) ([698a29f](https://www.github.com/googleapis/gaxios/commit/698a29ff3b22f30ea99ad190c4592940bef88f1f)) - -## [3.0.0](https://www.github.com/googleapis/gaxios/compare/v2.3.2...v3.0.0) (2020-03-19) - - -### ⚠ BREAKING CHANGES - -* **deps:** TypeScript introduced breaking changes in generated code in 3.7.x -* drop Node 8 from engines field (#254) - -### Features - -* drop Node 8 from engines field ([#254](https://www.github.com/googleapis/gaxios/issues/254)) ([8c9fff7](https://www.github.com/googleapis/gaxios/commit/8c9fff7f92f70f029292c906c62d194c1d58827d)) -* **deps:** updates to latest TypeScript ([#253](https://www.github.com/googleapis/gaxios/issues/253)) ([054267b](https://www.github.com/googleapis/gaxios/commit/054267bf12e1801c134e3b5cae92dcc5ea041fab)) - -### [2.3.2](https://www.github.com/googleapis/gaxios/compare/v2.3.1...v2.3.2) (2020-02-28) - - -### Bug Fixes - -* update github repo in package ([#239](https://www.github.com/googleapis/gaxios/issues/239)) ([7e750cb](https://www.github.com/googleapis/gaxios/commit/7e750cbaaa59812817d725c74fb9d364c4b71096)) - -### [2.3.1](https://www.github.com/googleapis/gaxios/compare/v2.3.0...v2.3.1) (2020-02-13) - - -### Bug Fixes - -* **deps:** update dependency https-proxy-agent to v5 ([#233](https://www.github.com/googleapis/gaxios/issues/233)) ([56de0a8](https://www.github.com/googleapis/gaxios/commit/56de0a824a2f9622e3e4d4bdd41adccd812a30b4)) - -## [2.3.0](https://www.github.com/googleapis/gaxios/compare/v2.2.2...v2.3.0) (2020-01-31) - - -### Features - -* add promise support for onRetryAttempt and shouldRetry ([#223](https://www.github.com/googleapis/gaxios/issues/223)) ([061afa3](https://www.github.com/googleapis/gaxios/commit/061afa381a51d39823e63accf3dacd16e191f3b9)) - -### [2.2.2](https://www.github.com/googleapis/gaxios/compare/v2.2.1...v2.2.2) (2020-01-08) - - -### Bug Fixes - -* **build:** add publication configuration ([#218](https://www.github.com/googleapis/gaxios/issues/218)) ([43e581f](https://www.github.com/googleapis/gaxios/commit/43e581ff4ed5e79d72f6f29748a5eebb6bff1229)) - -### [2.2.1](https://www.github.com/googleapis/gaxios/compare/v2.2.0...v2.2.1) (2020-01-04) - - -### Bug Fixes - -* **deps:** update dependency https-proxy-agent to v4 ([#201](https://www.github.com/googleapis/gaxios/issues/201)) ([5cdeef2](https://www.github.com/googleapis/gaxios/commit/5cdeef288a0c5c544c0dc2659aafbb2215d06c4b)) -* remove retryDelay option ([#203](https://www.github.com/googleapis/gaxios/issues/203)) ([d21e08d](https://www.github.com/googleapis/gaxios/commit/d21e08d2aada980d39bc5ca7093d54452be2d646)) - -## [2.2.0](https://www.github.com/googleapis/gaxios/compare/v2.1.1...v2.2.0) (2019-12-05) - - -### Features - -* populate GaxiosResponse with raw response information (res.url) ([#189](https://www.github.com/googleapis/gaxios/issues/189)) ([53a7f54](https://www.github.com/googleapis/gaxios/commit/53a7f54cc0f20320d7a6a21a9a9f36050cec2eec)) - - -### Bug Fixes - -* don't retry a request that is aborted intentionally ([#190](https://www.github.com/googleapis/gaxios/issues/190)) ([ba9777b](https://www.github.com/googleapis/gaxios/commit/ba9777b15b5262f8288a8bb3cca49a1de8427d8e)) -* **deps:** pin TypeScript below 3.7.0 ([5373f07](https://www.github.com/googleapis/gaxios/commit/5373f0793a765965a8221ecad2f99257ed1b7444)) - -### [2.1.1](https://www.github.com/googleapis/gaxios/compare/v2.1.0...v2.1.1) (2019-11-15) - - -### Bug Fixes - -* **docs:** snippets are now replaced in jsdoc comments ([#183](https://www.github.com/googleapis/gaxios/issues/183)) ([8dd1324](https://www.github.com/googleapis/gaxios/commit/8dd1324256590bd2f2e9015c813950e1cd8cb330)) - -## [2.1.0](https://www.github.com/googleapis/gaxios/compare/v2.0.3...v2.1.0) (2019-10-09) - - -### Bug Fixes - -* **deps:** update dependency https-proxy-agent to v3 ([#172](https://www.github.com/googleapis/gaxios/issues/172)) ([4a38f35](https://www.github.com/googleapis/gaxios/commit/4a38f35)) - - -### Features - -* **TypeScript:** agent can now be passed as builder method, rather than agent instance ([c84ddd6](https://www.github.com/googleapis/gaxios/commit/c84ddd6)) - -### [2.0.3](https://www.github.com/googleapis/gaxios/compare/v2.0.2...v2.0.3) (2019-09-11) - - -### Bug Fixes - -* do not override content-type if its given ([#158](https://www.github.com/googleapis/gaxios/issues/158)) ([f49e0e6](https://www.github.com/googleapis/gaxios/commit/f49e0e6)) -* improve stream detection logic ([6c41537](https://www.github.com/googleapis/gaxios/commit/6c41537)) -* revert header change ([#161](https://www.github.com/googleapis/gaxios/issues/161)) ([b0f6a8b](https://www.github.com/googleapis/gaxios/commit/b0f6a8b)) - -### [2.0.2](https://www.github.com/googleapis/gaxios/compare/v2.0.1...v2.0.2) (2019-07-23) - - -### Bug Fixes - -* check for existence of fetch before using it ([#138](https://www.github.com/googleapis/gaxios/issues/138)) ([79eb58d](https://www.github.com/googleapis/gaxios/commit/79eb58d)) -* **docs:** make anchors work in jsdoc ([#139](https://www.github.com/googleapis/gaxios/issues/139)) ([85103bb](https://www.github.com/googleapis/gaxios/commit/85103bb)) -* prevent double option processing ([#142](https://www.github.com/googleapis/gaxios/issues/142)) ([19b4b3c](https://www.github.com/googleapis/gaxios/commit/19b4b3c)) diff --git a/reverse_engineering/node_modules/gaxios/LICENSE b/reverse_engineering/node_modules/gaxios/LICENSE deleted file mode 100644 index d645695..0000000 --- a/reverse_engineering/node_modules/gaxios/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/reverse_engineering/node_modules/gaxios/README.md b/reverse_engineering/node_modules/gaxios/README.md deleted file mode 100644 index fdab06d..0000000 --- a/reverse_engineering/node_modules/gaxios/README.md +++ /dev/null @@ -1,156 +0,0 @@ -# gaxios - -[![npm version](https://img.shields.io/npm/v/gaxios.svg)](https://www.npmjs.org/package/gaxios) -[![codecov](https://codecov.io/gh/googleapis/gaxios/branch/master/graph/badge.svg)](https://codecov.io/gh/googleapis/gaxios) -[![Code Style: Google](https://img.shields.io/badge/code%20style-google-blueviolet.svg)](https://github.com/google/gts) - -> An HTTP request client that provides an `axios` like interface over top of `node-fetch`. - -## Install -```sh -$ npm install gaxios -``` - -## Example - -```js -const {request} = require('gaxios'); -const res = await request({ - url: 'https://www.googleapis.com/discovery/v1/apis/' -}); -``` - -## Setting Defaults -Gaxios supports setting default properties both on the default instance, and on additional instances. This is often useful when making many requests to the same domain with the same base settings. For example: - -```js -const gaxios = require('gaxios'); -gaxios.instance.defaults = { - baseURL: 'https://example.com' - headers: { - Authorization: 'SOME_TOKEN' - } -} -gaxios.request({url: '/data'}).then(...); -``` - -## Request Options - -```js -{ - // The url to which the request should be sent. Required. - url: string, - - // The HTTP method to use for the request. Defaults to `GET`. - method: 'GET', - - // The base Url to use for the request. Prepended to the `url` property above. - baseURL: 'https://example.com'; - - // The HTTP methods to be sent with the request. - headers: { 'some': 'header' }, - - // The data to send in the body of the request. Data objects will be - // serialized as JSON. - // - // Note: if you would like to provide a Content-Type header other than - // application/json you you must provide a string or readable stream, rather - // than an object: - // data: JSON.stringify({some: 'data'}) - // data: fs.readFile('./some-data.jpeg') - data: { - some: 'data' - }, - - // The max size of the http response content in bytes allowed. - // Defaults to `0`, which is the same as unset. - maxContentLength: 2000, - - // The max number of HTTP redirects to follow. - // Defaults to 100. - maxRedirects: 100, - - // The querystring parameters that will be encoded using `qs` and - // appended to the url - params: { - querystring: 'parameters' - }, - - // By default, we use the `querystring` package in node core to serialize - // querystring parameters. You can override that and provide your - // own implementation. - paramsSerializer: (params) => { - return qs.stringify(params); - }, - - // The timeout for the HTTP request. Defaults to 0. - timeout: 1000, - - // Optional method to override making the actual HTTP request. Useful - // for writing tests and instrumentation - adapter?: async (options, defaultAdapter) => { - const res = await defaultAdapter(options); - res.data = { - ...res.data, - extraProperty: 'your extra property', - }; - return res; - }; - - // The expected return type of the request. Options are: - // json | stream | blob | arraybuffer | text - // Defaults to `json`. - responseType: 'json', - - // The node.js http agent to use for the request. - agent: someHttpsAgent, - - // Custom function to determine if the response is valid based on the - // status code. Defaults to (>= 200 && < 300) - validateStatus: (status: number) => true, - - // Implementation of `fetch` to use when making the API call. By default, - // will use the browser context if available, and fall back to `node-fetch` - // in node.js otherwise. - fetchImplementation?: typeof fetch; - - // Configuration for retrying of requests. - retryConfig: { - // The number of times to retry the request. Defaults to 3. - retry?: number; - - // The number of retries already attempted. - currentRetryAttempt?: number; - - // The HTTP Methods that will be automatically retried. - // Defaults to ['GET','PUT','HEAD','OPTIONS','DELETE'] - httpMethodsToRetry?: string[]; - - // The HTTP response status codes that will automatically be retried. - // Defaults to: [[100, 199], [429, 429], [500, 599]] - statusCodesToRetry?: number[][]; - - // Function to invoke when a retry attempt is made. - onRetryAttempt?: (err: GaxiosError) => Promise | void; - - // Function to invoke which determines if you should retry - shouldRetry?: (err: GaxiosError) => Promise | boolean; - - // When there is no response, the number of retries to attempt. Defaults to 2. - noResponseRetries?: number; - - // The amount of time to initially delay the retry, in ms. Defaults to 100ms. - retryDelay?: number; - }, - - // Enables default configuration for retries. - retry: boolean, - - // Cancelling a request requires the `abort-controller` library. - // See https://github.com/bitinn/node-fetch#request-cancellation-with-abortsignal - signal?: AbortSignal -} -``` - -## License -[Apache-2.0](https://github.com/googleapis/gaxios/blob/master/LICENSE) diff --git a/reverse_engineering/node_modules/gaxios/build/src/common.d.ts b/reverse_engineering/node_modules/gaxios/build/src/common.d.ts deleted file mode 100644 index a18766a..0000000 --- a/reverse_engineering/node_modules/gaxios/build/src/common.d.ts +++ /dev/null @@ -1,135 +0,0 @@ -/// -import { AbortSignal } from 'abort-controller'; -import { Agent } from 'http'; -import { URL } from 'url'; -export declare class GaxiosError extends Error { - code?: string; - response?: GaxiosResponse; - config: GaxiosOptions; - constructor(message: string, options: GaxiosOptions, response: GaxiosResponse); -} -export interface Headers { - [index: string]: any; -} -export declare type GaxiosPromise = Promise>; -export interface GaxiosXMLHttpRequest { - responseURL: string; -} -export interface GaxiosResponse { - config: GaxiosOptions; - data: T; - status: number; - statusText: string; - headers: Headers; - request: GaxiosXMLHttpRequest; -} -/** - * Request options that are used to form the request. - */ -export interface GaxiosOptions { - /** - * Optional method to override making the actual HTTP request. Useful - * for writing tests. - */ - adapter?: (options: GaxiosOptions, defaultAdapter: (options: GaxiosOptions) => GaxiosPromise) => GaxiosPromise; - url?: string; - baseUrl?: string; - baseURL?: string; - method?: 'GET' | 'HEAD' | 'POST' | 'DELETE' | 'PUT' | 'CONNECT' | 'OPTIONS' | 'TRACE' | 'PATCH'; - headers?: Headers; - data?: any; - body?: any; - /** - * The maximum size of the http response content in bytes allowed. - */ - maxContentLength?: number; - /** - * The maximum number of redirects to follow. Defaults to 20. - */ - maxRedirects?: number; - follow?: number; - params?: any; - paramsSerializer?: (params: { - [index: string]: string | number; - }) => string; - timeout?: number; - onUploadProgress?: (progressEvent: any) => void; - responseType?: 'arraybuffer' | 'blob' | 'json' | 'text' | 'stream'; - agent?: Agent | ((parsedUrl: URL) => Agent); - validateStatus?: (status: number) => boolean; - retryConfig?: RetryConfig; - retry?: boolean; - signal?: AbortSignal; - size?: number; - /** - * Implementation of `fetch` to use when making the API call. By default, - * will use the browser context if available, and fall back to `node-fetch` - * in node.js otherwise. - */ - fetchImplementation?: FetchImplementation; - cert?: string; - key?: string; -} -/** - * Configuration for the Gaxios `request` method. - */ -export interface RetryConfig { - /** - * The number of times to retry the request. Defaults to 3. - */ - retry?: number; - /** - * The number of retries already attempted. - */ - currentRetryAttempt?: number; - /** - * The amount of time to initially delay the retry, in ms. Defaults to 100ms. - */ - retryDelay?: number; - /** - * The HTTP Methods that will be automatically retried. - * Defaults to ['GET','PUT','HEAD','OPTIONS','DELETE'] - */ - httpMethodsToRetry?: string[]; - /** - * The HTTP response status codes that will automatically be retried. - * Defaults to: [[100, 199], [429, 429], [500, 599]] - */ - statusCodesToRetry?: number[][]; - /** - * Function to invoke when a retry attempt is made. - */ - onRetryAttempt?: (err: GaxiosError) => Promise | void; - /** - * Function to invoke which determines if you should retry - */ - shouldRetry?: (err: GaxiosError) => Promise | boolean; - /** - * When there is no response, the number of retries to attempt. Defaults to 2. - */ - noResponseRetries?: number; -} -export declare type FetchImplementation = (input: FetchRequestInfo, init?: FetchRequestInit) => Promise; -export declare type FetchRequestInfo = any; -export interface FetchResponse { - readonly status: number; - readonly statusText: string; - readonly url: string; - readonly body: unknown | null; - arrayBuffer(): Promise; - blob(): Promise; - readonly headers: FetchHeaders; - json(): Promise; - text(): Promise; -} -export interface FetchRequestInit { - method?: string; -} -export interface FetchHeaders { - append(name: string, value: string): void; - delete(name: string): void; - get(name: string): string | null; - has(name: string): boolean; - set(name: string, value: string): void; - forEach(callbackfn: (value: string, key: string) => void, thisArg?: any): void; -} diff --git a/reverse_engineering/node_modules/gaxios/build/src/common.js b/reverse_engineering/node_modules/gaxios/build/src/common.js deleted file mode 100644 index 38bc920..0000000 --- a/reverse_engineering/node_modules/gaxios/build/src/common.js +++ /dev/null @@ -1,26 +0,0 @@ -"use strict"; -// Copyright 2018 Google LLC -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GaxiosError = void 0; -/* eslint-disable @typescript-eslint/no-explicit-any */ -class GaxiosError extends Error { - constructor(message, options, response) { - super(message); - this.response = response; - this.config = options; - this.code = response.status.toString(); - } -} -exports.GaxiosError = GaxiosError; -//# sourceMappingURL=common.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/gaxios/build/src/common.js.map b/reverse_engineering/node_modules/gaxios/build/src/common.js.map deleted file mode 100644 index 05acedf..0000000 --- a/reverse_engineering/node_modules/gaxios/build/src/common.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/common.ts"],"names":[],"mappings":";AAAA,4BAA4B;AAC5B,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;;;AAMjC,uDAAuD;AAEvD,MAAa,WAAqB,SAAQ,KAAK;IAI7C,YACE,OAAe,EACf,OAAsB,EACtB,QAA2B;QAE3B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;IACzC,CAAC;CACF;AAdD,kCAcC"} \ No newline at end of file diff --git a/reverse_engineering/node_modules/gaxios/build/src/gaxios.d.ts b/reverse_engineering/node_modules/gaxios/build/src/gaxios.d.ts deleted file mode 100644 index 7eee101..0000000 --- a/reverse_engineering/node_modules/gaxios/build/src/gaxios.d.ts +++ /dev/null @@ -1,44 +0,0 @@ -/// -import { Agent } from 'http'; -import { URL } from 'url'; -import { GaxiosOptions, GaxiosPromise } from './common'; -export declare class Gaxios { - protected agentCache: Map Agent)>; - /** - * Default HTTP options that will be used for every HTTP request. - */ - defaults: GaxiosOptions; - /** - * The Gaxios class is responsible for making HTTP requests. - * @param defaults The default set of options to be used for this instance. - */ - constructor(defaults?: GaxiosOptions); - /** - * Perform an HTTP request with the given options. - * @param opts Set of HTTP options that will be used for this HTTP request. - */ - request(opts?: GaxiosOptions): GaxiosPromise; - private _defaultAdapter; - /** - * Internal, retryable version of the `request` method. - * @param opts Set of HTTP options that will be used for this HTTP request. - */ - protected _request(opts?: GaxiosOptions): GaxiosPromise; - private getResponseData; - /** - * Validates the options, and merges them with defaults. - * @param opts The original options passed from the client. - */ - private validateOpts; - /** - * By default, throw for any non-2xx status code - * @param status status code from the HTTP response - */ - private validateStatus; - /** - * Encode a set of key/value pars into a querystring format (?foo=bar&baz=boo) - * @param params key value pars to encode - */ - private paramsSerializer; - private translateResponse; -} diff --git a/reverse_engineering/node_modules/gaxios/build/src/gaxios.js b/reverse_engineering/node_modules/gaxios/build/src/gaxios.js deleted file mode 100644 index c37161f..0000000 --- a/reverse_engineering/node_modules/gaxios/build/src/gaxios.js +++ /dev/null @@ -1,304 +0,0 @@ -"use strict"; -// Copyright 2018 Google LLC -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Gaxios = void 0; -const extend_1 = __importDefault(require("extend")); -const https_1 = require("https"); -const node_fetch_1 = __importDefault(require("node-fetch")); -const querystring_1 = __importDefault(require("querystring")); -const is_stream_1 = __importDefault(require("is-stream")); -const url_1 = require("url"); -const common_1 = require("./common"); -const retry_1 = require("./retry"); -/* eslint-disable @typescript-eslint/no-explicit-any */ -const fetch = hasFetch() ? window.fetch : node_fetch_1.default; -function hasWindow() { - return typeof window !== 'undefined' && !!window; -} -function hasFetch() { - return hasWindow() && !!window.fetch; -} -function hasBuffer() { - return typeof Buffer !== 'undefined'; -} -function hasHeader(options, header) { - return !!getHeader(options, header); -} -function getHeader(options, header) { - header = header.toLowerCase(); - for (const key of Object.keys((options === null || options === void 0 ? void 0 : options.headers) || {})) { - if (header === key.toLowerCase()) { - return options.headers[key]; - } - } - return undefined; -} -let HttpsProxyAgent; -function loadProxy() { - const proxy = process.env.HTTPS_PROXY || - process.env.https_proxy || - process.env.HTTP_PROXY || - process.env.http_proxy; - if (proxy) { - HttpsProxyAgent = require('https-proxy-agent'); - } - return proxy; -} -loadProxy(); -function skipProxy(url) { - var _a; - const noProxyEnv = (_a = process.env.NO_PROXY) !== null && _a !== void 0 ? _a : process.env.no_proxy; - if (!noProxyEnv) { - return false; - } - const noProxyUrls = noProxyEnv.split(','); - const parsedURL = new url_1.URL(url); - return !!noProxyUrls.find(url => { - if (url.startsWith('*.') || url.startsWith('.')) { - url = url.replace('*', ''); - return parsedURL.hostname.endsWith(url); - } - else { - return url === parsedURL.origin || url === parsedURL.hostname; - } - }); -} -// Figure out if we should be using a proxy. Only if it's required, load -// the https-proxy-agent module as it adds startup cost. -function getProxy(url) { - // If there is a match between the no_proxy env variables and the url, then do not proxy - if (skipProxy(url)) { - return undefined; - // If there is not a match between the no_proxy env variables and the url, check to see if there should be a proxy - } - else { - return loadProxy(); - } -} -class Gaxios { - /** - * The Gaxios class is responsible for making HTTP requests. - * @param defaults The default set of options to be used for this instance. - */ - constructor(defaults) { - this.agentCache = new Map(); - this.defaults = defaults || {}; - } - /** - * Perform an HTTP request with the given options. - * @param opts Set of HTTP options that will be used for this HTTP request. - */ - async request(opts = {}) { - opts = this.validateOpts(opts); - return this._request(opts); - } - async _defaultAdapter(opts) { - const fetchImpl = opts.fetchImplementation || fetch; - const res = (await fetchImpl(opts.url, opts)); - const data = await this.getResponseData(opts, res); - return this.translateResponse(opts, res, data); - } - /** - * Internal, retryable version of the `request` method. - * @param opts Set of HTTP options that will be used for this HTTP request. - */ - async _request(opts = {}) { - try { - let translatedResponse; - if (opts.adapter) { - translatedResponse = await opts.adapter(opts, this._defaultAdapter.bind(this)); - } - else { - translatedResponse = await this._defaultAdapter(opts); - } - if (!opts.validateStatus(translatedResponse.status)) { - throw new common_1.GaxiosError(`Request failed with status code ${translatedResponse.status}`, opts, translatedResponse); - } - return translatedResponse; - } - catch (e) { - const err = e; - err.config = opts; - const { shouldRetry, config } = await retry_1.getRetryConfig(e); - if (shouldRetry && config) { - err.config.retryConfig.currentRetryAttempt = - config.retryConfig.currentRetryAttempt; - return this._request(err.config); - } - throw err; - } - } - async getResponseData(opts, res) { - switch (opts.responseType) { - case 'stream': - return res.body; - case 'json': { - let data = await res.text(); - try { - data = JSON.parse(data); - } - catch (_a) { - // continue - } - return data; - } - case 'arraybuffer': - return res.arrayBuffer(); - case 'blob': - return res.blob(); - default: - return res.text(); - } - } - /** - * Validates the options, and merges them with defaults. - * @param opts The original options passed from the client. - */ - validateOpts(options) { - const opts = extend_1.default(true, {}, this.defaults, options); - if (!opts.url) { - throw new Error('URL is required.'); - } - // baseUrl has been deprecated, remove in 2.0 - const baseUrl = opts.baseUrl || opts.baseURL; - if (baseUrl) { - opts.url = baseUrl + opts.url; - } - opts.paramsSerializer = opts.paramsSerializer || this.paramsSerializer; - if (opts.params && Object.keys(opts.params).length > 0) { - let additionalQueryParams = opts.paramsSerializer(opts.params); - if (additionalQueryParams.startsWith('?')) { - additionalQueryParams = additionalQueryParams.slice(1); - } - const prefix = opts.url.includes('?') ? '&' : '?'; - opts.url = opts.url + prefix + additionalQueryParams; - } - if (typeof options.maxContentLength === 'number') { - opts.size = options.maxContentLength; - } - if (typeof options.maxRedirects === 'number') { - opts.follow = options.maxRedirects; - } - opts.headers = opts.headers || {}; - if (opts.data) { - if (is_stream_1.default.readable(opts.data)) { - opts.body = opts.data; - } - else if (hasBuffer() && Buffer.isBuffer(opts.data)) { - // Do not attempt to JSON.stringify() a Buffer: - opts.body = opts.data; - if (!hasHeader(opts, 'Content-Type')) { - opts.headers['Content-Type'] = 'application/json'; - } - } - else if (typeof opts.data === 'object') { - // If www-form-urlencoded content type has been set, but data is - // provided as an object, serialize the content using querystring: - if (getHeader(opts, 'content-type') === - 'application/x-www-form-urlencoded') { - opts.body = opts.paramsSerializer(opts.data); - } - else { - if (!hasHeader(opts, 'Content-Type')) { - opts.headers['Content-Type'] = 'application/json'; - } - opts.body = JSON.stringify(opts.data); - } - } - else { - opts.body = opts.data; - } - } - opts.validateStatus = opts.validateStatus || this.validateStatus; - opts.responseType = opts.responseType || 'json'; - if (!opts.headers['Accept'] && opts.responseType === 'json') { - opts.headers['Accept'] = 'application/json'; - } - opts.method = opts.method || 'GET'; - const proxy = getProxy(opts.url); - if (proxy) { - if (this.agentCache.has(proxy)) { - opts.agent = this.agentCache.get(proxy); - } - else { - // Proxy is being used in conjunction with mTLS. - if (opts.cert && opts.key) { - const parsedURL = new url_1.URL(proxy); - opts.agent = new HttpsProxyAgent({ - port: parsedURL.port, - host: parsedURL.host, - protocol: parsedURL.protocol, - cert: opts.cert, - key: opts.key, - }); - } - else { - opts.agent = new HttpsProxyAgent(proxy); - } - this.agentCache.set(proxy, opts.agent); - } - } - else if (opts.cert && opts.key) { - // Configure client for mTLS: - if (this.agentCache.has(opts.key)) { - opts.agent = this.agentCache.get(opts.key); - } - else { - opts.agent = new https_1.Agent({ - cert: opts.cert, - key: opts.key, - }); - this.agentCache.set(opts.key, opts.agent); - } - } - return opts; - } - /** - * By default, throw for any non-2xx status code - * @param status status code from the HTTP response - */ - validateStatus(status) { - return status >= 200 && status < 300; - } - /** - * Encode a set of key/value pars into a querystring format (?foo=bar&baz=boo) - * @param params key value pars to encode - */ - paramsSerializer(params) { - return querystring_1.default.stringify(params); - } - translateResponse(opts, res, data) { - // headers need to be converted from a map to an obj - const headers = {}; - res.headers.forEach((value, key) => { - headers[key] = value; - }); - return { - config: opts, - data: data, - headers, - status: res.status, - statusText: res.statusText, - // XMLHttpRequestLike - request: { - responseURL: res.url, - }, - }; - } -} -exports.Gaxios = Gaxios; -//# sourceMappingURL=gaxios.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/gaxios/build/src/gaxios.js.map b/reverse_engineering/node_modules/gaxios/build/src/gaxios.js.map deleted file mode 100644 index d9ff326..0000000 --- a/reverse_engineering/node_modules/gaxios/build/src/gaxios.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"gaxios.js","sourceRoot":"","sources":["../../src/gaxios.ts"],"names":[],"mappings":";AAAA,4BAA4B;AAC5B,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;;;;;;AAEjC,oDAA4B;AAE5B,iCAA0C;AAC1C,4DAAmC;AACnC,8DAA6B;AAC7B,0DAAiC;AACjC,6BAAwB;AAExB,qCAOkB;AAClB,mCAAuC;AAEvC,uDAAuD;AAEvD,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,oBAAS,CAAC;AAEpD,SAAS,SAAS;IAChB,OAAO,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,MAAM,CAAC;AACnD,CAAC;AAED,SAAS,QAAQ;IACf,OAAO,SAAS,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;AACvC,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,OAAO,MAAM,KAAK,WAAW,CAAC;AACvC,CAAC;AAED,SAAS,SAAS,CAAC,OAAsB,EAAE,MAAc;IACvD,OAAO,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,SAAS,CAAC,OAAsB,EAAE,MAAc;IACvD,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,KAAI,EAAE,CAAC,EAAE;QACrD,IAAI,MAAM,KAAK,GAAG,CAAC,WAAW,EAAE,EAAE;YAChC,OAAO,OAAO,CAAC,OAAQ,CAAC,GAAG,CAAC,CAAC;SAC9B;KACF;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,IAAI,eAAoB,CAAC;AAEzB,SAAS,SAAS;IAChB,MAAM,KAAK,GACT,OAAO,CAAC,GAAG,CAAC,WAAW;QACvB,OAAO,CAAC,GAAG,CAAC,WAAW;QACvB,OAAO,CAAC,GAAG,CAAC,UAAU;QACtB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IACzB,IAAI,KAAK,EAAE;QACT,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;KAChD;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AACD,SAAS,EAAE,CAAC;AAEZ,SAAS,SAAS,CAAC,GAAW;;IAC5B,MAAM,UAAU,SAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,mCAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IAChE,IAAI,CAAC,UAAU,EAAE;QACf,OAAO,KAAK,CAAC;KACd;IACD,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,IAAI,SAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QAC9B,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YAC/C,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC3B,OAAO,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;SACzC;aAAM;YACL,OAAO,GAAG,KAAK,SAAS,CAAC,MAAM,IAAI,GAAG,KAAK,SAAS,CAAC,QAAQ,CAAC;SAC/D;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,wEAAwE;AACxE,wDAAwD;AACxD,SAAS,QAAQ,CAAC,GAAW;IAC3B,wFAAwF;IACxF,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE;QAClB,OAAO,SAAS,CAAC;QACjB,kHAAkH;KACnH;SAAM;QACL,OAAO,SAAS,EAAE,CAAC;KACpB;AACH,CAAC;AAED,MAAa,MAAM;IAQjB;;;OAGG;IACH,YAAY,QAAwB;QAX1B,eAAU,GAAG,IAAI,GAAG,EAA+C,CAAC;QAY5E,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,EAAE,CAAC;IACjC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAU,OAAsB,EAAE;QAC7C,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAEO,KAAK,CAAC,eAAe,CAC3B,IAAmB;QAEnB,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,IAAI,KAAK,CAAC;QACpD,MAAM,GAAG,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,GAAI,EAAE,IAAI,CAAC,CAAkB,CAAC;QAChE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC,iBAAiB,CAAI,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IAED;;;OAGG;IACO,KAAK,CAAC,QAAQ,CACtB,OAAsB,EAAE;QAExB,IAAI;YACF,IAAI,kBAAqC,CAAC;YAC1C,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,kBAAkB,GAAG,MAAM,IAAI,CAAC,OAAO,CACrC,IAAI,EACJ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAChC,CAAC;aACH;iBAAM;gBACL,kBAAkB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;aACvD;YACD,IAAI,CAAC,IAAI,CAAC,cAAe,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE;gBACpD,MAAM,IAAI,oBAAW,CACnB,mCAAmC,kBAAkB,CAAC,MAAM,EAAE,EAC9D,IAAI,EACJ,kBAAkB,CACnB,CAAC;aACH;YACD,OAAO,kBAAkB,CAAC;SAC3B;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,GAAG,GAAG,CAAgB,CAAC;YAC7B,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;YAClB,MAAM,EAAC,WAAW,EAAE,MAAM,EAAC,GAAG,MAAM,sBAAc,CAAC,CAAC,CAAC,CAAC;YACtD,IAAI,WAAW,IAAI,MAAM,EAAE;gBACzB,GAAG,CAAC,MAAM,CAAC,WAAY,CAAC,mBAAmB;oBACzC,MAAM,CAAC,WAAY,CAAC,mBAAmB,CAAC;gBAC1C,OAAO,IAAI,CAAC,QAAQ,CAAI,GAAG,CAAC,MAAM,CAAC,CAAC;aACrC;YACD,MAAM,GAAG,CAAC;SACX;IACH,CAAC;IAEO,KAAK,CAAC,eAAe,CAC3B,IAAmB,EACnB,GAAkB;QAElB,QAAQ,IAAI,CAAC,YAAY,EAAE;YACzB,KAAK,QAAQ;gBACX,OAAO,GAAG,CAAC,IAAI,CAAC;YAClB,KAAK,MAAM,CAAC,CAAC;gBACX,IAAI,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;gBAC5B,IAAI;oBACF,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;iBACzB;gBAAC,WAAM;oBACN,WAAW;iBACZ;gBACD,OAAO,IAAU,CAAC;aACnB;YACD,KAAK,aAAa;gBAChB,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC;YAC3B,KAAK,MAAM;gBACT,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;YACpB;gBACE,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;SACrB;IACH,CAAC;IAED;;;OAGG;IACK,YAAY,CAAC,OAAsB;QACzC,MAAM,IAAI,GAAG,gBAAM,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACb,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;SACrC;QAED,6CAA6C;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC;QAC7C,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,GAAG,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;SAC/B;QAED,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC;QACvE,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YACtD,IAAI,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC/D,IAAI,qBAAqB,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;gBACzC,qBAAqB,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aACxD;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAClD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,MAAM,GAAG,qBAAqB,CAAC;SACtD;QAED,IAAI,OAAO,OAAO,CAAC,gBAAgB,KAAK,QAAQ,EAAE;YAChD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC;SACtC;QAED,IAAI,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ,EAAE;YAC5C,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;SACpC;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,IAAI,mBAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;aACvB;iBAAM,IAAI,SAAS,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACpD,+CAA+C;gBAC/C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBACtB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE;oBACpC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;iBACnD;aACF;iBAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACxC,gEAAgE;gBAChE,kEAAkE;gBAClE,IACE,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC;oBAC/B,mCAAmC,EACnC;oBACA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAC9C;qBAAM;oBACL,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE;wBACpC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;qBACnD;oBACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACvC;aACF;iBAAM;gBACL,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;aACvB;SACF;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC;QACjE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,EAAE;YAC3D,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,kBAAkB,CAAC;SAC7C;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;QAEnC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,KAAK,EAAE;YACT,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gBAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;aACzC;iBAAM;gBACL,gDAAgD;gBAChD,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE;oBACzB,MAAM,SAAS,GAAG,IAAI,SAAG,CAAC,KAAK,CAAC,CAAC;oBACjC,IAAI,CAAC,KAAK,GAAG,IAAI,eAAe,CAAC;wBAC/B,IAAI,EAAE,SAAS,CAAC,IAAI;wBACpB,IAAI,EAAE,SAAS,CAAC,IAAI;wBACpB,QAAQ,EAAE,SAAS,CAAC,QAAQ;wBAC5B,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,GAAG,EAAE,IAAI,CAAC,GAAG;qBACd,CAAC,CAAC;iBACJ;qBAAM;oBACL,IAAI,CAAC,KAAK,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;iBACzC;gBACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAM,CAAC,CAAC;aACzC;SACF;aAAM,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE;YAChC,6BAA6B;YAC7B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC5C;iBAAM;gBACL,IAAI,CAAC,KAAK,GAAG,IAAI,aAAU,CAAC;oBAC1B,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,GAAG,EAAE,IAAI,CAAC,GAAG;iBACd,CAAC,CAAC;gBACH,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAM,CAAC,CAAC;aAC5C;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACK,cAAc,CAAC,MAAc;QACnC,OAAO,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,CAAC;IACvC,CAAC;IAED;;;OAGG;IACK,gBAAgB,CAAC,MAA0C;QACjE,OAAO,qBAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAEO,iBAAiB,CACvB,IAAmB,EACnB,GAAkB,EAClB,IAAQ;QAER,oDAAoD;QACpD,MAAM,OAAO,GAAG,EAAa,CAAC;QAC9B,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACjC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAS;YACf,OAAO;YACP,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,UAAU,EAAE,GAAG,CAAC,UAAU;YAE1B,qBAAqB;YACrB,OAAO,EAAE;gBACP,WAAW,EAAE,GAAG,CAAC,GAAG;aACrB;SACF,CAAC;IACJ,CAAC;CACF;AAnPD,wBAmPC"} \ No newline at end of file diff --git a/reverse_engineering/node_modules/gaxios/build/src/index.d.ts b/reverse_engineering/node_modules/gaxios/build/src/index.d.ts deleted file mode 100644 index 033aff5..0000000 --- a/reverse_engineering/node_modules/gaxios/build/src/index.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { GaxiosOptions } from './common'; -import { Gaxios } from './gaxios'; -export { GaxiosError, GaxiosPromise, GaxiosResponse, Headers, RetryConfig, } from './common'; -export { Gaxios, GaxiosOptions }; -/** - * The default instance used when the `request` method is directly - * invoked. - */ -export declare const instance: Gaxios; -/** - * Make an HTTP request using the given options. - * @param opts Options for the request - */ -export declare function request(opts: GaxiosOptions): Promise>; diff --git a/reverse_engineering/node_modules/gaxios/build/src/index.js b/reverse_engineering/node_modules/gaxios/build/src/index.js deleted file mode 100644 index 37714fa..0000000 --- a/reverse_engineering/node_modules/gaxios/build/src/index.js +++ /dev/null @@ -1,33 +0,0 @@ -"use strict"; -// Copyright 2018 Google LLC -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -exports.request = exports.instance = exports.Gaxios = void 0; -const gaxios_1 = require("./gaxios"); -Object.defineProperty(exports, "Gaxios", { enumerable: true, get: function () { return gaxios_1.Gaxios; } }); -var common_1 = require("./common"); -Object.defineProperty(exports, "GaxiosError", { enumerable: true, get: function () { return common_1.GaxiosError; } }); -/** - * The default instance used when the `request` method is directly - * invoked. - */ -exports.instance = new gaxios_1.Gaxios(); -/** - * Make an HTTP request using the given options. - * @param opts Options for the request - */ -async function request(opts) { - return exports.instance.request(opts); -} -exports.request = request; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/gaxios/build/src/index.js.map b/reverse_engineering/node_modules/gaxios/build/src/index.js.map deleted file mode 100644 index 609c0bc..0000000 --- a/reverse_engineering/node_modules/gaxios/build/src/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA,4BAA4B;AAC5B,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;;;AAGjC,qCAAgC;AASxB,uFATA,eAAM,OASA;AAPd,mCAMkB;AALhB,qGAAA,WAAW,OAAA;AAQb;;;GAGG;AACU,QAAA,QAAQ,GAAG,IAAI,eAAM,EAAE,CAAC;AAErC;;;GAGG;AACI,KAAK,UAAU,OAAO,CAAI,IAAmB;IAClD,OAAO,gBAAQ,CAAC,OAAO,CAAI,IAAI,CAAC,CAAC;AACnC,CAAC;AAFD,0BAEC"} \ No newline at end of file diff --git a/reverse_engineering/node_modules/gaxios/build/src/retry.d.ts b/reverse_engineering/node_modules/gaxios/build/src/retry.d.ts deleted file mode 100644 index cfc5ee2..0000000 --- a/reverse_engineering/node_modules/gaxios/build/src/retry.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { GaxiosError } from './common'; -export declare function getRetryConfig(err: GaxiosError): Promise<{ - shouldRetry: boolean; - config?: undefined; -} | { - shouldRetry: boolean; - config: import("./common").GaxiosOptions; -}>; diff --git a/reverse_engineering/node_modules/gaxios/build/src/retry.js b/reverse_engineering/node_modules/gaxios/build/src/retry.js deleted file mode 100644 index 9cf94e9..0000000 --- a/reverse_engineering/node_modules/gaxios/build/src/retry.js +++ /dev/null @@ -1,136 +0,0 @@ -"use strict"; -// Copyright 2018 Google LLC -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getRetryConfig = void 0; -async function getRetryConfig(err) { - var _a; - let config = getConfig(err); - if (!err || !err.config || (!config && !err.config.retry)) { - return { shouldRetry: false }; - } - config = config || {}; - config.currentRetryAttempt = config.currentRetryAttempt || 0; - config.retry = - config.retry === undefined || config.retry === null ? 3 : config.retry; - config.httpMethodsToRetry = config.httpMethodsToRetry || [ - 'GET', - 'HEAD', - 'PUT', - 'OPTIONS', - 'DELETE', - ]; - config.noResponseRetries = - config.noResponseRetries === undefined || config.noResponseRetries === null - ? 2 - : config.noResponseRetries; - // If this wasn't in the list of status codes where we want - // to automatically retry, return. - const retryRanges = [ - // https://en.wikipedia.org/wiki/List_of_HTTP_status_codes - // 1xx - Retry (Informational, request still processing) - // 2xx - Do not retry (Success) - // 3xx - Do not retry (Redirect) - // 4xx - Do not retry (Client errors) - // 429 - Retry ("Too Many Requests") - // 5xx - Retry (Server errors) - [100, 199], - [429, 429], - [500, 599], - ]; - config.statusCodesToRetry = config.statusCodesToRetry || retryRanges; - // Put the config back into the err - err.config.retryConfig = config; - // Determine if we should retry the request - const shouldRetryFn = config.shouldRetry || shouldRetryRequest; - if (!(await shouldRetryFn(err))) { - return { shouldRetry: false, config: err.config }; - } - // Calculate time to wait with exponential backoff. - // If this is the first retry, look for a configured retryDelay. - const retryDelay = config.currentRetryAttempt ? 0 : (_a = config.retryDelay) !== null && _a !== void 0 ? _a : 100; - // Formula: retryDelay + ((2^c - 1 / 2) * 1000) - const delay = retryDelay + ((Math.pow(2, config.currentRetryAttempt) - 1) / 2) * 1000; - // We're going to retry! Incremenent the counter. - err.config.retryConfig.currentRetryAttempt += 1; - // Create a promise that invokes the retry after the backOffDelay - const backoff = new Promise(resolve => { - setTimeout(resolve, delay); - }); - // Notify the user if they added an `onRetryAttempt` handler - if (config.onRetryAttempt) { - config.onRetryAttempt(err); - } - // Return the promise in which recalls Gaxios to retry the request - await backoff; - return { shouldRetry: true, config: err.config }; -} -exports.getRetryConfig = getRetryConfig; -/** - * Determine based on config if we should retry the request. - * @param err The GaxiosError passed to the interceptor. - */ -function shouldRetryRequest(err) { - const config = getConfig(err); - // node-fetch raises an AbortError if signaled: - // https://github.com/bitinn/node-fetch#request-cancellation-with-abortsignal - if (err.name === 'AbortError') { - return false; - } - // If there's no config, or retries are disabled, return. - if (!config || config.retry === 0) { - return false; - } - // Check if this error has no response (ETIMEDOUT, ENOTFOUND, etc) - if (!err.response && - (config.currentRetryAttempt || 0) >= config.noResponseRetries) { - return false; - } - // Only retry with configured HttpMethods. - if (!err.config.method || - config.httpMethodsToRetry.indexOf(err.config.method.toUpperCase()) < 0) { - return false; - } - // If this wasn't in the list of status codes where we want - // to automatically retry, return. - if (err.response && err.response.status) { - let isInRange = false; - for (const [min, max] of config.statusCodesToRetry) { - const status = err.response.status; - if (status >= min && status <= max) { - isInRange = true; - break; - } - } - if (!isInRange) { - return false; - } - } - // If we are out of retry attempts, return - config.currentRetryAttempt = config.currentRetryAttempt || 0; - if (config.currentRetryAttempt >= config.retry) { - return false; - } - return true; -} -/** - * Acquire the raxConfig object from an GaxiosError if available. - * @param err The Gaxios error with a config object. - */ -function getConfig(err) { - if (err && err.config && err.config.retryConfig) { - return err.config.retryConfig; - } - return; -} -//# sourceMappingURL=retry.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/gaxios/build/src/retry.js.map b/reverse_engineering/node_modules/gaxios/build/src/retry.js.map deleted file mode 100644 index da3f0e8..0000000 --- a/reverse_engineering/node_modules/gaxios/build/src/retry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/retry.ts"],"names":[],"mappings":";AAAA,4BAA4B;AAC5B,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;;;AAI1B,KAAK,UAAU,cAAc,CAAC,GAAgB;;IACnD,IAAI,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;QACzD,OAAO,EAAC,WAAW,EAAE,KAAK,EAAC,CAAC;KAC7B;IACD,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;IACtB,MAAM,CAAC,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,IAAI,CAAC,CAAC;IAC7D,MAAM,CAAC,KAAK;QACV,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;IACzE,MAAM,CAAC,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,IAAI;QACvD,KAAK;QACL,MAAM;QACN,KAAK;QACL,SAAS;QACT,QAAQ;KACT,CAAC;IACF,MAAM,CAAC,iBAAiB;QACtB,MAAM,CAAC,iBAAiB,KAAK,SAAS,IAAI,MAAM,CAAC,iBAAiB,KAAK,IAAI;YACzE,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC;IAE/B,2DAA2D;IAC3D,kCAAkC;IAClC,MAAM,WAAW,GAAG;QAClB,0DAA0D;QAC1D,wDAAwD;QACxD,+BAA+B;QAC/B,gCAAgC;QAChC,qCAAqC;QACrC,oCAAoC;QACpC,8BAA8B;QAC9B,CAAC,GAAG,EAAE,GAAG,CAAC;QACV,CAAC,GAAG,EAAE,GAAG,CAAC;QACV,CAAC,GAAG,EAAE,GAAG,CAAC;KACX,CAAC;IACF,MAAM,CAAC,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,IAAI,WAAW,CAAC;IAErE,mCAAmC;IACnC,GAAG,CAAC,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC;IAEhC,2CAA2C;IAC3C,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,IAAI,kBAAkB,CAAC;IAC/D,IAAI,CAAC,CAAC,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE;QAC/B,OAAO,EAAC,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAC,CAAC;KACjD;IAED,mDAAmD;IACnD,gEAAgE;IAChE,MAAM,UAAU,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAC,MAAM,CAAC,UAAU,mCAAI,GAAG,CAAC;IAC7E,+CAA+C;IAC/C,MAAM,KAAK,GACT,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;IAE1E,kDAAkD;IAClD,GAAG,CAAC,MAAM,CAAC,WAAY,CAAC,mBAAoB,IAAI,CAAC,CAAC;IAElD,iEAAiE;IACjE,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QACpC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,4DAA4D;IAC5D,IAAI,MAAM,CAAC,cAAc,EAAE;QACzB,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;KAC5B;IAED,kEAAkE;IAClE,MAAM,OAAO,CAAC;IACd,OAAO,EAAC,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAC,CAAC;AACjD,CAAC;AArED,wCAqEC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CAAC,GAAgB;IAC1C,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAE9B,+CAA+C;IAC/C,6EAA6E;IAC7E,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE;QAC7B,OAAO,KAAK,CAAC;KACd;IAED,yDAAyD;IACzD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,CAAC,EAAE;QACjC,OAAO,KAAK,CAAC;KACd;IAED,kEAAkE;IAClE,IACE,CAAC,GAAG,CAAC,QAAQ;QACb,CAAC,MAAM,CAAC,mBAAmB,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,iBAAkB,EAC9D;QACA,OAAO,KAAK,CAAC;KACd;IAED,0CAA0C;IAC1C,IACE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM;QAClB,MAAM,CAAC,kBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,EACvE;QACA,OAAO,KAAK,CAAC;KACd;IAED,2DAA2D;IAC3D,kCAAkC;IAClC,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE;QACvC,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,kBAAmB,EAAE;YACnD,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;YACnC,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,EAAE;gBAClC,SAAS,GAAG,IAAI,CAAC;gBACjB,MAAM;aACP;SACF;QACD,IAAI,CAAC,SAAS,EAAE;YACd,OAAO,KAAK,CAAC;SACd;KACF;IAED,0CAA0C;IAC1C,MAAM,CAAC,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,IAAI,CAAC,CAAC;IAC7D,IAAI,MAAM,CAAC,mBAAmB,IAAI,MAAM,CAAC,KAAM,EAAE;QAC/C,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,GAAgB;IACjC,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE;QAC/C,OAAO,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC;KAC/B;IACD,OAAO;AACT,CAAC"} \ No newline at end of file diff --git a/reverse_engineering/node_modules/gaxios/package.json b/reverse_engineering/node_modules/gaxios/package.json deleted file mode 100644 index ddce89b..0000000 --- a/reverse_engineering/node_modules/gaxios/package.json +++ /dev/null @@ -1,134 +0,0 @@ -{ - "_from": "gaxios@^4.0.0", - "_id": "gaxios@4.3.0", - "_inBundle": false, - "_integrity": "sha512-pHplNbslpwCLMyII/lHPWFQbJWOX0B3R1hwBEOvzYi1GmdKZruuEHK4N9V6f7tf1EaPYyF80mui1+344p6SmLg==", - "_location": "/gaxios", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "gaxios@^4.0.0", - "name": "gaxios", - "escapedName": "gaxios", - "rawSpec": "^4.0.0", - "saveSpec": null, - "fetchSpec": "^4.0.0" - }, - "_requiredBy": [ - "/gcp-metadata", - "/google-auth-library", - "/gtoken" - ], - "_resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.0.tgz", - "_shasum": "ad4814d89061f85b97ef52aed888c5dbec32f774", - "_spec": "gaxios@^4.0.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/google-auth-library", - "author": { - "name": "Google, LLC" - }, - "bugs": { - "url": "https://github.com/googleapis/gaxios/issues" - }, - "bundleDependencies": false, - "dependencies": { - "abort-controller": "^3.0.0", - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.3.0" - }, - "deprecated": false, - "description": "A simple common HTTP client specifically for Google APIs and services.", - "devDependencies": { - "@compodoc/compodoc": "^1.1.9", - "@microsoft/api-documenter": "^7.8.10", - "@microsoft/api-extractor": "^7.8.10", - "@types/cors": "^2.8.6", - "@types/execa": "^0.9.0", - "@types/express": "^4.16.1", - "@types/extend": "^3.0.1", - "@types/mocha": "^8.0.0", - "@types/multiparty": "0.0.32", - "@types/mv": "^2.1.0", - "@types/ncp": "^2.0.1", - "@types/node": "^14.0.0", - "@types/node-fetch": "^2.5.7", - "@types/sinon": "^10.0.0", - "@types/tmp": "0.2.0", - "@types/uuid": "^8.0.0", - "assert": "^2.0.0", - "browserify": "^17.0.0", - "c8": "^7.0.0", - "cors": "^2.8.5", - "execa": "^5.0.0", - "express": "^4.16.4", - "gts": "^3.0.0", - "is-docker": "^2.0.0", - "karma": "^6.0.0", - "karma-chrome-launcher": "^3.0.0", - "karma-coverage": "^2.0.0", - "karma-firefox-launcher": "^2.0.0", - "karma-mocha": "^2.0.0", - "karma-remap-coverage": "^0.1.5", - "karma-sourcemap-loader": "^0.3.7", - "karma-webpack": "^5.0.0", - "linkinator": "^2.0.0", - "mocha": "^8.0.0", - "multiparty": "^4.2.1", - "mv": "^2.1.1", - "ncp": "^2.0.0", - "nock": "^13.0.0", - "null-loader": "^4.0.0", - "puppeteer": "^8.0.0", - "sinon": "^11.0.0", - "stream-browserify": "^3.0.0", - "tmp": "0.2.1", - "ts-loader": "^8.0.0", - "typescript": "^3.8.3", - "uuid": "^8.0.0", - "webpack": "^5.35.0", - "webpack-cli": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "files": [ - "build/src" - ], - "homepage": "https://github.com/googleapis/gaxios#readme", - "keywords": [ - "google" - ], - "license": "Apache-2.0", - "main": "build/src/index.js", - "name": "gaxios", - "repository": { - "type": "git", - "url": "git+https://github.com/googleapis/gaxios.git" - }, - "scripts": { - "api-documenter": "api-documenter yaml --input-folder=temp", - "api-extractor": "api-extractor run --local", - "browser-test": "node build/browser-test/browser-test-runner.js", - "clean": "gts clean", - "compile": "tsc -p .", - "docs": "compodoc src/", - "docs-test": "linkinator docs", - "fix": "gts fix", - "lint": "gts check", - "prebrowser-test": "npm run compile", - "precompile": "gts clean", - "predocs-test": "npm run docs", - "prelint": "cd samples; npm link ../; npm install", - "prepare": "npm run compile", - "presystem-test": "npm run compile", - "pretest": "npm run compile", - "samples-test": "cd samples/ && npm link ../ && npm test && cd ../", - "system-test": "mocha build/system-test --timeout 80000", - "test": "c8 mocha build/test", - "webpack": "webpack" - }, - "types": "build/src/index.d.ts", - "version": "4.3.0" -} diff --git a/reverse_engineering/node_modules/gcp-metadata/CHANGELOG.md b/reverse_engineering/node_modules/gcp-metadata/CHANGELOG.md deleted file mode 100644 index f507ebb..0000000 --- a/reverse_engineering/node_modules/gcp-metadata/CHANGELOG.md +++ /dev/null @@ -1,385 +0,0 @@ -# Changelog - -[npm history][1] - -[1]: https://www.npmjs.com/package/gcp-metadata?activeTab=versions - -## [4.3.0](https://www.github.com/googleapis/gcp-metadata/compare/v4.2.1...v4.3.0) (2021-06-10) - - -### Features - -* add `gcf-owl-bot[bot]` to `ignoreAuthors` ([#450](https://www.github.com/googleapis/gcp-metadata/issues/450)) ([6a0f9ad](https://www.github.com/googleapis/gcp-metadata/commit/6a0f9ad09b6d16370d08c5d60541ce3ef64a9f97)) - -### [4.2.1](https://www.github.com/googleapis/gcp-metadata/compare/v4.2.0...v4.2.1) (2020-10-29) - - -### Bug Fixes - -* **deps:** update dependency gaxios to v4 ([#420](https://www.github.com/googleapis/gcp-metadata/issues/420)) ([b99fb07](https://www.github.com/googleapis/gcp-metadata/commit/b99fb0764b8dbb8b083f73b8007816914db4f09a)) - -## [4.2.0](https://www.github.com/googleapis/gcp-metadata/compare/v4.1.4...v4.2.0) (2020-09-15) - - -### Features - -* add support for GCE_METADATA_HOST environment variable ([#406](https://www.github.com/googleapis/gcp-metadata/issues/406)) ([eaf128a](https://www.github.com/googleapis/gcp-metadata/commit/eaf128ad5afc4357cde72d19b017b9474c070fea)) - -### [4.1.4](https://www.github.com/googleapis/gcp-metadata/compare/v4.1.3...v4.1.4) (2020-07-15) - - -### Bug Fixes - -* **deps:** update dependency json-bigint to v1 ([#382](https://www.github.com/googleapis/gcp-metadata/issues/382)) ([ab4d8c3](https://www.github.com/googleapis/gcp-metadata/commit/ab4d8c3022903206d433bafc47c27815c6f85e36)) - -### [4.1.3](https://www.github.com/googleapis/gcp-metadata/compare/v4.1.2...v4.1.3) (2020-07-13) - - -### Bug Fixes - -* **deps:** update dependency json-bigint to ^0.4.0 ([#378](https://www.github.com/googleapis/gcp-metadata/issues/378)) ([b214280](https://www.github.com/googleapis/gcp-metadata/commit/b2142807928c8c032509277900d35fccd1023f0f)) - -### [4.1.2](https://www.github.com/googleapis/gcp-metadata/compare/v4.1.1...v4.1.2) (2020-07-10) - - -### Bug Fixes - -* **deps:** roll back dependency gcp-metadata to ^4.1.0 ([#373](https://www.github.com/googleapis/gcp-metadata/issues/373)) ([a45adef](https://www.github.com/googleapis/gcp-metadata/commit/a45adefd92418faa08c8a5014cedb844d1eb3ae6)) - -### [4.1.1](https://www.github.com/googleapis/gcp-metadata/compare/v4.1.0...v4.1.1) (2020-07-09) - - -### Bug Fixes - -* typeo in nodejs .gitattribute ([#371](https://www.github.com/googleapis/gcp-metadata/issues/371)) ([5b4bb1c](https://www.github.com/googleapis/gcp-metadata/commit/5b4bb1c85e67e3ef0a6d1ec2ea316d560e03092f)) - -## [4.1.0](https://www.github.com/googleapis/gcp-metadata/compare/v4.0.1...v4.1.0) (2020-05-05) - - -### Features - -* Introduces the GCE_METADATA_IP to allow using a different IP address for the GCE metadata server. ([#346](https://www.github.com/googleapis/gcp-metadata/issues/346)) ([ec0f82d](https://www.github.com/googleapis/gcp-metadata/commit/ec0f82d022b4b3aac95e94ee1d8e53cfac3b14a4)) - - -### Bug Fixes - -* do not check secondary host if GCE_METADATA_IP set ([#352](https://www.github.com/googleapis/gcp-metadata/issues/352)) ([64fa7d6](https://www.github.com/googleapis/gcp-metadata/commit/64fa7d68cbb76f455a3bfdcb27d58e7775eb789a)) -* warn rather than throwing when we fail to connect to metadata server ([#351](https://www.github.com/googleapis/gcp-metadata/issues/351)) ([754a6c0](https://www.github.com/googleapis/gcp-metadata/commit/754a6c07d1a72615cbb5ebf9ee04475a9a12f1c0)) - -### [4.0.1](https://www.github.com/googleapis/gcp-metadata/compare/v4.0.0...v4.0.1) (2020-04-14) - - -### Bug Fixes - -* **deps:** update dependency gaxios to v3 ([#326](https://www.github.com/googleapis/gcp-metadata/issues/326)) ([5667178](https://www.github.com/googleapis/gcp-metadata/commit/5667178429baff71ad5dab2a96f97f27b2106d57)) -* apache license URL ([#468](https://www.github.com/googleapis/gcp-metadata/issues/468)) ([#336](https://www.github.com/googleapis/gcp-metadata/issues/336)) ([195dcd2](https://www.github.com/googleapis/gcp-metadata/commit/195dcd2d227ba496949e7ec0dcd77e5b9269066c)) - -## [4.0.0](https://www.github.com/googleapis/gcp-metadata/compare/v3.5.0...v4.0.0) (2020-03-19) - - -### ⚠ BREAKING CHANGES - -* typescript@3.7.x has breaking changes; compiler now targets es2015 -* drops Node 8 from engines field (#315) - -### Features - -* drops Node 8 from engines field ([#315](https://www.github.com/googleapis/gcp-metadata/issues/315)) ([acb6233](https://www.github.com/googleapis/gcp-metadata/commit/acb62337e8ba7f0b259ae4e553f19c5786207d84)) - - -### Build System - -* switch to latest typescirpt/gts ([#317](https://www.github.com/googleapis/gcp-metadata/issues/317)) ([fbb7158](https://www.github.com/googleapis/gcp-metadata/commit/fbb7158be62c9f1949b69079e35113be1e10495c)) - -## [3.5.0](https://www.github.com/googleapis/gcp-metadata/compare/v3.4.0...v3.5.0) (2020-03-03) - - -### Features - -* add ECONNREFUSED to list of known errors for isAvailable() ([#309](https://www.github.com/googleapis/gcp-metadata/issues/309)) ([17ff6ea](https://www.github.com/googleapis/gcp-metadata/commit/17ff6ea361d02de31463532d4ab4040bf6276e0b)) - -## [3.4.0](https://www.github.com/googleapis/gcp-metadata/compare/v3.3.1...v3.4.0) (2020-02-24) - - -### Features - -* significantly increase timeout if GCF environment detected ([#300](https://www.github.com/googleapis/gcp-metadata/issues/300)) ([8e507c6](https://www.github.com/googleapis/gcp-metadata/commit/8e507c645f69a11f508884b3181dc4414e579fcc)) - -### [3.3.1](https://www.github.com/googleapis/gcp-metadata/compare/v3.3.0...v3.3.1) (2020-01-30) - - -### Bug Fixes - -* **isAvailable:** handle EHOSTDOWN and EHOSTUNREACH error codes ([#291](https://www.github.com/googleapis/gcp-metadata/issues/291)) ([ba8d9f5](https://www.github.com/googleapis/gcp-metadata/commit/ba8d9f50eac6cf8b439c1b66c48ace146c75f6e2)) - -## [3.3.0](https://www.github.com/googleapis/gcp-metadata/compare/v3.2.3...v3.3.0) (2019-12-16) - - -### Features - -* add environment variable for configuring environment detection ([#275](https://www.github.com/googleapis/gcp-metadata/issues/275)) ([580cfa4](https://www.github.com/googleapis/gcp-metadata/commit/580cfa4a5f5d0041aa09ae85cfc5a4575dd3957f)) -* cache response from isAvailable() method ([#274](https://www.github.com/googleapis/gcp-metadata/issues/274)) ([a05e13f](https://www.github.com/googleapis/gcp-metadata/commit/a05e13f1d1d61b1f9b9b1703bc37cdbdc022c93b)) - - -### Bug Fixes - -* fastFailMetadataRequest should not reject, if response already happened ([#273](https://www.github.com/googleapis/gcp-metadata/issues/273)) ([a6590c4](https://www.github.com/googleapis/gcp-metadata/commit/a6590c4fd8bc2dff3995c83d4c9175d5bd9f5e4a)) - -### [3.2.3](https://www.github.com/googleapis/gcp-metadata/compare/v3.2.2...v3.2.3) (2019-12-12) - - -### Bug Fixes - -* **deps:** pin TypeScript below 3.7.0 ([e4bf622](https://www.github.com/googleapis/gcp-metadata/commit/e4bf622e6654a51ddffc0921a15250130591db2f)) - -### [3.2.2](https://www.github.com/googleapis/gcp-metadata/compare/v3.2.1...v3.2.2) (2019-11-13) - - -### Bug Fixes - -* **docs:** add jsdoc-region-tag plugin ([#264](https://www.github.com/googleapis/gcp-metadata/issues/264)) ([af8362b](https://www.github.com/googleapis/gcp-metadata/commit/af8362b5a35d270af00cb3696bbf7344810e9b0c)) - -### [3.2.1](https://www.github.com/googleapis/gcp-metadata/compare/v3.2.0...v3.2.1) (2019-11-08) - - -### Bug Fixes - -* **deps:** update gaxios ([#257](https://www.github.com/googleapis/gcp-metadata/issues/257)) ([ba6e0b6](https://www.github.com/googleapis/gcp-metadata/commit/ba6e0b668635b4aa4ed10535ff021c02b2edf5ea)) - -## [3.2.0](https://www.github.com/googleapis/gcp-metadata/compare/v3.1.0...v3.2.0) (2019-10-10) - - -### Features - -* add DEBUG_AUTH for digging into authentication issues ([#254](https://www.github.com/googleapis/gcp-metadata/issues/254)) ([804156d](https://www.github.com/googleapis/gcp-metadata/commit/804156d)) - -## [3.1.0](https://www.github.com/googleapis/gcp-metadata/compare/v3.0.0...v3.1.0) (2019-10-07) - - -### Features - -* don't throw on ENETUNREACH ([#250](https://www.github.com/googleapis/gcp-metadata/issues/250)) ([88f2101](https://www.github.com/googleapis/gcp-metadata/commit/88f2101)) - -## [3.0.0](https://www.github.com/googleapis/gcp-metadata/compare/v2.0.4...v3.0.0) (2019-09-17) - - -### ⚠ BREAKING CHANGES - -* isAvailable now tries both DNS and IP, choosing whichever responds first (#239) - -### Features - -* isAvailable now tries both DNS and IP, choosing whichever responds first ([#239](https://www.github.com/googleapis/gcp-metadata/issues/239)) ([25bc116](https://www.github.com/googleapis/gcp-metadata/commit/25bc116)) - -### [2.0.4](https://www.github.com/googleapis/gcp-metadata/compare/v2.0.3...v2.0.4) (2019-09-13) - - -### Bug Fixes - -* IP address takes 15 seconds to timeout, vs., metadata returning immediately ([#235](https://www.github.com/googleapis/gcp-metadata/issues/235)) ([d04207b](https://www.github.com/googleapis/gcp-metadata/commit/d04207b)) -* use 3s timeout rather than 15 default ([#237](https://www.github.com/googleapis/gcp-metadata/issues/237)) ([231ca5c](https://www.github.com/googleapis/gcp-metadata/commit/231ca5c)) - -### [2.0.3](https://www.github.com/googleapis/gcp-metadata/compare/v2.0.2...v2.0.3) (2019-09-12) - - -### Bug Fixes - -* use IP for metadata server ([#233](https://www.github.com/googleapis/gcp-metadata/issues/233)) ([20a15cb](https://www.github.com/googleapis/gcp-metadata/commit/20a15cb)) - -### [2.0.2](https://www.github.com/googleapis/gcp-metadata/compare/v2.0.1...v2.0.2) (2019-08-26) - - -### Bug Fixes - -* allow calls with no request, add JSON proto ([#224](https://www.github.com/googleapis/gcp-metadata/issues/224)) ([dc758b1](https://www.github.com/googleapis/gcp-metadata/commit/dc758b1)) - -### [2.0.1](https://www.github.com/googleapis/gcp-metadata/compare/v2.0.0...v2.0.1) (2019-06-26) - - -### Bug Fixes - -* **docs:** make anchors work in jsdoc ([#212](https://www.github.com/googleapis/gcp-metadata/issues/212)) ([9174b43](https://www.github.com/googleapis/gcp-metadata/commit/9174b43)) - -## [2.0.0](https://www.github.com/googleapis/gcp-metadata/compare/v1.0.0...v2.0.0) (2019-05-07) - - -### Bug Fixes - -* **deps:** update dependency gaxios to v2 ([#191](https://www.github.com/googleapis/gcp-metadata/issues/191)) ([ac8c1ef](https://www.github.com/googleapis/gcp-metadata/commit/ac8c1ef)) - - -### Build System - -* upgrade engines field to >=8.10.0 ([#194](https://www.github.com/googleapis/gcp-metadata/issues/194)) ([97c23c8](https://www.github.com/googleapis/gcp-metadata/commit/97c23c8)) - - -### BREAKING CHANGES - -* upgrade engines field to >=8.10.0 (#194) - -## v1.0.0 - -02-14-2019 16:00 PST - -### Bug Fixes -- fix: ask gaxios for text and not json ([#152](https://github.com/googleapis/gcp-metadata/pull/152)) - -### Documentation -- docs: update links in contrib guide ([#168](https://github.com/googleapis/gcp-metadata/pull/168)) -- docs: add lint/fix example to contributing guide ([#160](https://github.com/googleapis/gcp-metadata/pull/160)) - -### Internal / Testing Changes -- build: use linkinator for docs test ([#166](https://github.com/googleapis/gcp-metadata/pull/166)) -- chore(deps): update dependency @types/tmp to v0.0.34 ([#167](https://github.com/googleapis/gcp-metadata/pull/167)) -- build: create docs test npm scripts ([#165](https://github.com/googleapis/gcp-metadata/pull/165)) -- test: run system tests on GCB ([#157](https://github.com/googleapis/gcp-metadata/pull/157)) -- build: test using @grpc/grpc-js in CI ([#164](https://github.com/googleapis/gcp-metadata/pull/164)) -- chore: move CONTRIBUTING.md to root ([#162](https://github.com/googleapis/gcp-metadata/pull/162)) -- chore(deps): update dependency gcx to v0.1.1 ([#159](https://github.com/googleapis/gcp-metadata/pull/159)) -- chore(deps): update dependency gcx to v0.1.0 ([#158](https://github.com/googleapis/gcp-metadata/pull/158)) -- chore(deps): update dependency gcx to v0.0.4 ([#155](https://github.com/googleapis/gcp-metadata/pull/155)) -- chore(deps): update dependency googleapis to v37 ([#156](https://github.com/googleapis/gcp-metadata/pull/156)) -- build: ignore googleapis.com in doc link check ([#153](https://github.com/googleapis/gcp-metadata/pull/153)) -- build: check broken links in generated docs ([#149](https://github.com/googleapis/gcp-metadata/pull/149)) -- chore(build): inject yoshi automation key ([#148](https://github.com/googleapis/gcp-metadata/pull/148)) - -## v0.9.3 - -12-10-2018 16:16 PST - -### Dependencies -- chore(deps): update dependency googleapis to v36 ([#135](https://github.com/googleapis/gcp-metadata/pull/135)) -- chore(deps): use gaxios for http requests ([#121](https://github.com/googleapis/gcp-metadata/pull/121)) -- chore(deps): update dependency gts to ^0.9.0 ([#123](https://github.com/googleapis/gcp-metadata/pull/123)) - -### Internal / Testing Changes -- fix(build): fix Kokoro release script ([#141](https://github.com/googleapis/gcp-metadata/pull/141)) -- Release v0.9.2 ([#140](https://github.com/googleapis/gcp-metadata/pull/140)) -- build: add Kokoro configs for autorelease ([#138](https://github.com/googleapis/gcp-metadata/pull/138)) -- Release gcp-metadata v0.9.1 ([#139](https://github.com/googleapis/gcp-metadata/pull/139)) -- chore: always nyc report before calling codecov ([#134](https://github.com/googleapis/gcp-metadata/pull/134)) -- chore: nyc ignore build/test by default ([#133](https://github.com/googleapis/gcp-metadata/pull/133)) -- Sync repo build files ([#131](https://github.com/googleapis/gcp-metadata/pull/131)) -- fix(build): fix system key decryption ([#128](https://github.com/googleapis/gcp-metadata/pull/128)) -- refactor: use execa, move post install test to system ([#127](https://github.com/googleapis/gcp-metadata/pull/127)) -- chore: add a synth.metadata -- test: add a system test ([#126](https://github.com/googleapis/gcp-metadata/pull/126)) -- chore: update eslintignore config ([#122](https://github.com/googleapis/gcp-metadata/pull/122)) -- chore: use latest npm on Windows ([#120](https://github.com/googleapis/gcp-metadata/pull/120)) -- chore: update CircleCI config ([#119](https://github.com/googleapis/gcp-metadata/pull/119)) -- chore: include build in eslintignore ([#115](https://github.com/googleapis/gcp-metadata/pull/115)) - -## v0.9.2 - -12-10-2018 14:01 PST - -- chore(deps): update dependency googleapis to v36 ([#135](https://github.com/googleapis/gcp-metadata/pull/135)) -- chore: always nyc report before calling codecov ([#134](https://github.com/googleapis/gcp-metadata/pull/134)) -- chore: nyc ignore build/test by default ([#133](https://github.com/googleapis/gcp-metadata/pull/133)) -- chore: Re-generated to pick up changes in the API or client library generator. ([#131](https://github.com/googleapis/gcp-metadata/pull/131)) -- fix(build): fix system key decryption ([#128](https://github.com/googleapis/gcp-metadata/pull/128)) -- chore(deps): use gaxios for http requests ([#121](https://github.com/googleapis/gcp-metadata/pull/121)) -- refactor: use execa, move post install test to system ([#127](https://github.com/googleapis/gcp-metadata/pull/127)) -- chore: add a synth.metadata -- test: add a system test ([#126](https://github.com/googleapis/gcp-metadata/pull/126)) -- chore(deps): update dependency gts to ^0.9.0 ([#123](https://github.com/googleapis/gcp-metadata/pull/123)) -- chore: update eslintignore config ([#122](https://github.com/googleapis/gcp-metadata/pull/122)) -- chore: use latest npm on Windows ([#120](https://github.com/googleapis/gcp-metadata/pull/120)) -- chore: update CircleCI config ([#119](https://github.com/googleapis/gcp-metadata/pull/119)) -- chore: include build in eslintignore ([#115](https://github.com/googleapis/gcp-metadata/pull/115)) -- build: add Kokoro configs for autorelease ([#138](https://github.com/googleapis/gcp-metadata/pull/138)) - -## v0.9.1 - -12-10-2018 11:53 PST - -- chore(deps): update dependency googleapis to v36 ([#135](https://github.com/googleapis/gcp-metadata/pull/135)) -- chore: always nyc report before calling codecov ([#134](https://github.com/googleapis/gcp-metadata/pull/134)) -- chore: nyc ignore build/test by default ([#133](https://github.com/googleapis/gcp-metadata/pull/133)) -- chore: Re-generated to pick up changes in the API or client library generator. ([#131](https://github.com/googleapis/gcp-metadata/pull/131)) -- fix(build): fix system key decryption ([#128](https://github.com/googleapis/gcp-metadata/pull/128)) -- chore(deps): use gaxios for http requests ([#121](https://github.com/googleapis/gcp-metadata/pull/121)) -- refactor: use execa, move post install test to system ([#127](https://github.com/googleapis/gcp-metadata/pull/127)) -- chore: add a synth.metadata -- test: add a system test ([#126](https://github.com/googleapis/gcp-metadata/pull/126)) -- chore(deps): update dependency gts to ^0.9.0 ([#123](https://github.com/googleapis/gcp-metadata/pull/123)) -- chore: update eslintignore config ([#122](https://github.com/googleapis/gcp-metadata/pull/122)) -- chore: use latest npm on Windows ([#120](https://github.com/googleapis/gcp-metadata/pull/120)) -- chore: update CircleCI config ([#119](https://github.com/googleapis/gcp-metadata/pull/119)) -- chore: include build in eslintignore ([#115](https://github.com/googleapis/gcp-metadata/pull/115)) - -## v0.9.0 - -10-26-2018 13:10 PDT - -- feat: allow custom headers ([#109](https://github.com/googleapis/gcp-metadata/pull/109)) -- chore: update issue templates ([#108](https://github.com/googleapis/gcp-metadata/pull/108)) -- chore: remove old issue template ([#106](https://github.com/googleapis/gcp-metadata/pull/106)) -- build: run tests on node11 ([#105](https://github.com/googleapis/gcp-metadata/pull/105)) -- chores(build): do not collect sponge.xml from windows builds ([#104](https://github.com/googleapis/gcp-metadata/pull/104)) -- chores(build): run codecov on continuous builds ([#102](https://github.com/googleapis/gcp-metadata/pull/102)) -- chore(deps): update dependency nock to v10 ([#103](https://github.com/googleapis/gcp-metadata/pull/103)) -- chore: update new issue template ([#101](https://github.com/googleapis/gcp-metadata/pull/101)) -- build: fix codecov uploading on Kokoro ([#97](https://github.com/googleapis/gcp-metadata/pull/97)) -- Update kokoro config ([#95](https://github.com/googleapis/gcp-metadata/pull/95)) -- Update CI config ([#93](https://github.com/googleapis/gcp-metadata/pull/93)) -- Update kokoro config ([#91](https://github.com/googleapis/gcp-metadata/pull/91)) -- Re-generate library using /synth.py ([#90](https://github.com/googleapis/gcp-metadata/pull/90)) -- test: remove appveyor config ([#89](https://github.com/googleapis/gcp-metadata/pull/89)) -- Update kokoro config ([#88](https://github.com/googleapis/gcp-metadata/pull/88)) -- Enable prefer-const in the eslint config ([#87](https://github.com/googleapis/gcp-metadata/pull/87)) -- Enable no-var in eslint ([#86](https://github.com/googleapis/gcp-metadata/pull/86)) - -### New Features - -A new option, `headers`, has been added to allow metadata queries to be sent with custom headers. - -## v0.8.0 - -**This release has breaking changes**. Please take care when upgrading to the latest version. - -#### Dropped support for Node.js 4.x and 9.x -This library is no longer tested against versions 4.x and 9.x of Node.js. Please upgrade to the latest supported LTS version! - -#### Return type of `instance()` and `project()` has changed -The `instance()` and `project()` methods are much more selective about which properties they will accept. - -The only accepted properties are `params` and `properties`. The `instance()` and `project()` methods also now directly return the data instead of a response object. - -#### Changes in how large number valued properties are handled - -Previously large number-valued properties were being silently losing precision when -returned by this library (as a number). In the cases where a number valued property -returned by the metadata service is too large to represent as a JavaScript number, we -will now return the value as a BigNumber (from the bignumber.js) library. Numbers that -do fit into the JavaScript number range will continue to be returned as numbers. -For more details see [#74](https://github.com/googleapis/gcp-metadata/pull/74). - -### Breaking Changes -- chore: drop support for node.js 4 and 9 ([#68](https://github.com/googleapis/gcp-metadata/pull/68)) -- fix: quarantine axios config ([#62](https://github.com/googleapis/gcp-metadata/pull/62)) - -### Implementation Changes -- fix: properly handle large numbers in responses ([#74](https://github.com/googleapis/gcp-metadata/pull/74)) - -### Dependencies -- chore(deps): update dependency pify to v4 ([#73](https://github.com/googleapis/gcp-metadata/pull/73)) - -### Internal / Testing Changes -- Move to the new github org ([#84](https://github.com/googleapis/gcp-metadata/pull/84)) -- Update CI config ([#83](https://github.com/googleapis/gcp-metadata/pull/83)) -- Retry npm install in CI ([#81](https://github.com/googleapis/gcp-metadata/pull/81)) -- Update CI config ([#79](https://github.com/googleapis/gcp-metadata/pull/79)) -- chore(deps): update dependency nyc to v13 ([#77](https://github.com/googleapis/gcp-metadata/pull/77)) -- add key for system tests -- increase kitchen test timeout -- add a lint npm script -- update npm scripts -- add a synth file and run it ([#75](https://github.com/googleapis/gcp-metadata/pull/75)) -- chore(deps): update dependency assert-rejects to v1 ([#72](https://github.com/googleapis/gcp-metadata/pull/72)) -- chore: ignore package-log.json ([#71](https://github.com/googleapis/gcp-metadata/pull/71)) -- chore: update renovate config ([#70](https://github.com/googleapis/gcp-metadata/pull/70)) -- test: throw on deprecation -- chore(deps): update dependency typescript to v3 ([#67](https://github.com/googleapis/gcp-metadata/pull/67)) -- chore: make it OSPO compliant ([#66](https://github.com/googleapis/gcp-metadata/pull/66)) -- chore(deps): update dependency gts to ^0.8.0 ([#65](https://github.com/googleapis/gcp-metadata/pull/65)) diff --git a/reverse_engineering/node_modules/gcp-metadata/LICENSE b/reverse_engineering/node_modules/gcp-metadata/LICENSE deleted file mode 100644 index d645695..0000000 --- a/reverse_engineering/node_modules/gcp-metadata/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/reverse_engineering/node_modules/gcp-metadata/README.md b/reverse_engineering/node_modules/gcp-metadata/README.md deleted file mode 100644 index c7fbf66..0000000 --- a/reverse_engineering/node_modules/gcp-metadata/README.md +++ /dev/null @@ -1,226 +0,0 @@ -[//]: # "This README.md file is auto-generated, all changes to this file will be lost." -[//]: # "To regenerate it, use `python -m synthtool`." -Google Cloud Platform logo - -# [GCP Metadata: Node.js Client](https://github.com/googleapis/gcp-metadata) - -[![release level](https://img.shields.io/badge/release%20level-general%20availability%20%28GA%29-brightgreen.svg?style=flat)](https://cloud.google.com/terms/launch-stages) -[![npm version](https://img.shields.io/npm/v/gcp-metadata.svg)](https://www.npmjs.org/package/gcp-metadata) -[![codecov](https://img.shields.io/codecov/c/github/googleapis/gcp-metadata/master.svg?style=flat)](https://codecov.io/gh/googleapis/gcp-metadata) - - - - -Get the metadata from a Google Cloud Platform environment - - -A comprehensive list of changes in each version may be found in -[the CHANGELOG](https://github.com/googleapis/gcp-metadata/blob/master/CHANGELOG.md). - -* [GCP Metadata Node.js Client API Reference][client-docs] -* [GCP Metadata Documentation][product-docs] -* [github.com/googleapis/gcp-metadata](https://github.com/googleapis/gcp-metadata) - -Read more about the client libraries for Cloud APIs, including the older -Google APIs Client Libraries, in [Client Libraries Explained][explained]. - -[explained]: https://cloud.google.com/apis/docs/client-libraries-explained - -**Table of contents:** - - -* [Quickstart](#quickstart) - - * [Installing the client library](#installing-the-client-library) - * [Using the client library](#using-the-client-library) -* [Samples](#samples) -* [Versioning](#versioning) -* [Contributing](#contributing) -* [License](#license) - -## Quickstart - -### Installing the client library - -```bash -npm install gcp-metadata -``` - - -### Using the client library - -```javascript -const gcpMetadata = require('gcp-metadata'); - -async function quickstart() { - // check to see if this code can access a metadata server - const isAvailable = await gcpMetadata.isAvailable(); - console.log(`Is available: ${isAvailable}`); - - // Instance and Project level metadata will only be available if - // running inside of a Google Cloud compute environment such as - // Cloud Functions, App Engine, Kubernetes Engine, or Compute Engine. - // To learn more about the differences between instance and project - // level metadata, see: - // https://cloud.google.com/compute/docs/storing-retrieving-metadata#project-instance-metadata - if (isAvailable) { - // grab all top level metadata from the service - const instanceMetadata = await gcpMetadata.instance(); - console.log('Instance metadata:'); - console.log(instanceMetadata); - - // get all project level metadata - const projectMetadata = await gcpMetadata.project(); - console.log('Project metadata:'); - console.log(projectMetadata); - } -} - -quickstart(); - -``` - -#### Check to see if the metadata server is available -```js -const isAvailable = await gcpMetadata.isAvailable(); -``` - -#### Access all metadata - -```js -const data = await gcpMetadata.instance(); -console.log(data); // ... All metadata properties -``` - -#### Access specific properties -```js -const data = await gcpMetadata.instance('hostname'); -console.log(data); // ...Instance hostname -const projectId = await gcpMetadata.project('project-id'); -console.log(projectId); // ...Project ID of the running instance -``` - -#### Access nested properties with the relative path -```js -const data = await gcpMetadata.instance('service-accounts/default/email'); -console.log(data); // ...Email address of the Compute identity service account -``` - -#### Access specific properties with query parameters -```js -const data = await gcpMetadata.instance({ - property: 'tags', - params: { alt: 'text' } -}); -console.log(data) // ...Tags as newline-delimited list -``` - -#### Access with custom headers -```js -await gcpMetadata.instance({ - headers: { 'no-trace': '1' } -}); // ...Request is untraced -``` - -### Take care with large number valued properties - -In some cases number valued properties returned by the Metadata Service may be -too large to be representable as JavaScript numbers. In such cases we return -those values as `BigNumber` objects (from the [bignumber.js](https://github.com/MikeMcl/bignumber.js) library). Numbers -that fit within the JavaScript number range will be returned as normal number -values. - -```js -const id = await gcpMetadata.instance('id'); -console.log(id) // ... BigNumber { s: 1, e: 18, c: [ 45200, 31799277581759 ] } -console.log(id.toString()) // ... 4520031799277581759 -``` - -### Environment variables - -* GCE_METADATA_HOST: provide an alternate host or IP to perform lookup against (useful, for example, you're connecting through a custom proxy server). - -For example: -``` -export GCE_METADATA_HOST = '169.254.169.254' -``` - -* DETECT_GCP_RETRIES: number representing number of retries that should be attempted on metadata lookup. - - -## Samples - -Samples are in the [`samples/`](https://github.com/googleapis/gcp-metadata/tree/master/samples) directory. Each sample's `README.md` has instructions for running its sample. - -| Sample | Source Code | Try it | -| --------------------------- | --------------------------------- | ------ | -| Quickstart | [source code](https://github.com/googleapis/gcp-metadata/blob/master/samples/quickstart.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/gcp-metadata&page=editor&open_in_editor=samples/quickstart.js,samples/README.md) | - - - -The [GCP Metadata Node.js Client API Reference][client-docs] documentation -also contains samples. - -## Supported Node.js Versions - -Our client libraries follow the [Node.js release schedule](https://nodejs.org/en/about/releases/). -Libraries are compatible with all current _active_ and _maintenance_ versions of -Node.js. - -Client libraries targeting some end-of-life versions of Node.js are available, and -can be installed via npm [dist-tags](https://docs.npmjs.com/cli/dist-tag). -The dist-tags follow the naming convention `legacy-(version)`. - -_Legacy Node.js versions are supported as a best effort:_ - -* Legacy versions will not be tested in continuous integration. -* Some security patches may not be able to be backported. -* Dependencies will not be kept up-to-date, and features will not be backported. - -#### Legacy tags available - -* `legacy-8`: install client libraries from this dist-tag for versions - compatible with Node.js 8. - -## Versioning - -This library follows [Semantic Versioning](http://semver.org/). - - -This library is considered to be **General Availability (GA)**. This means it -is stable; the code surface will not change in backwards-incompatible ways -unless absolutely necessary (e.g. because of critical security issues) or with -an extensive deprecation period. Issues and requests against **GA** libraries -are addressed with the highest priority. - - - - - -More Information: [Google Cloud Platform Launch Stages][launch_stages] - -[launch_stages]: https://cloud.google.com/terms/launch-stages - -## Contributing - -Contributions welcome! See the [Contributing Guide](https://github.com/googleapis/gcp-metadata/blob/master/CONTRIBUTING.md). - -Please note that this `README.md`, the `samples/README.md`, -and a variety of configuration files in this repository (including `.nycrc` and `tsconfig.json`) -are generated from a central template. To edit one of these files, make an edit -to its template in this -[directory](https://github.com/googleapis/synthtool/tree/master/synthtool/gcp/templates/node_library). - -## License - -Apache Version 2.0 - -See [LICENSE](https://github.com/googleapis/gcp-metadata/blob/master/LICENSE) - -[client-docs]: https://googleapis.dev/nodejs/gcp-metadata/latest -[product-docs]: https://cloud.google.com/compute/docs/storing-retrieving-metadata -[shell_img]: https://gstatic.com/cloudssh/images/open-btn.png -[projects]: https://console.cloud.google.com/project -[billing]: https://support.google.com/cloud/answer/6293499#enable-billing - -[auth]: https://cloud.google.com/docs/authentication/getting-started diff --git a/reverse_engineering/node_modules/gcp-metadata/build/src/index.d.ts b/reverse_engineering/node_modules/gcp-metadata/build/src/index.d.ts deleted file mode 100644 index 508dec5..0000000 --- a/reverse_engineering/node_modules/gcp-metadata/build/src/index.d.ts +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Copyright 2018 Google LLC - * - * Distributed under MIT license. - * See file LICENSE for detail or copy at https://opensource.org/licenses/MIT - */ -/// -import { OutgoingHttpHeaders } from 'http'; -export declare const BASE_PATH = "/computeMetadata/v1"; -export declare const HOST_ADDRESS = "http://169.254.169.254"; -export declare const SECONDARY_HOST_ADDRESS = "http://metadata.google.internal."; -export declare const HEADER_NAME = "Metadata-Flavor"; -export declare const HEADER_VALUE = "Google"; -export declare const HEADERS: Readonly<{ - "Metadata-Flavor": string; -}>; -export interface Options { - params?: { - [index: string]: string; - }; - property?: string; - headers?: OutgoingHttpHeaders; -} -/** - * Obtain metadata for the current GCE instance - */ -export declare function instance(options?: string | Options): Promise; -/** - * Obtain metadata for the current GCP Project. - */ -export declare function project(options?: string | Options): Promise; -/** - * Determine if the metadata server is currently available. - */ -export declare function isAvailable(): Promise; -/** - * reset the memoized isAvailable() lookup. - */ -export declare function resetIsAvailableCache(): void; -/** - * Obtain the timeout for requests to the metadata server. - */ -export declare function requestTimeout(): number; diff --git a/reverse_engineering/node_modules/gcp-metadata/build/src/index.js b/reverse_engineering/node_modules/gcp-metadata/build/src/index.js deleted file mode 100644 index 5cc196b..0000000 --- a/reverse_engineering/node_modules/gcp-metadata/build/src/index.js +++ /dev/null @@ -1,255 +0,0 @@ -"use strict"; -/** - * Copyright 2018 Google LLC - * - * Distributed under MIT license. - * See file LICENSE for detail or copy at https://opensource.org/licenses/MIT - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.requestTimeout = exports.resetIsAvailableCache = exports.isAvailable = exports.project = exports.instance = exports.HEADERS = exports.HEADER_VALUE = exports.HEADER_NAME = exports.SECONDARY_HOST_ADDRESS = exports.HOST_ADDRESS = exports.BASE_PATH = void 0; -const gaxios_1 = require("gaxios"); -const jsonBigint = require("json-bigint"); -exports.BASE_PATH = '/computeMetadata/v1'; -exports.HOST_ADDRESS = 'http://169.254.169.254'; -exports.SECONDARY_HOST_ADDRESS = 'http://metadata.google.internal.'; -exports.HEADER_NAME = 'Metadata-Flavor'; -exports.HEADER_VALUE = 'Google'; -exports.HEADERS = Object.freeze({ [exports.HEADER_NAME]: exports.HEADER_VALUE }); -/** - * Returns the base URL while taking into account the GCE_METADATA_HOST - * environment variable if it exists. - * - * @returns The base URL, e.g., http://169.254.169.254/computeMetadata/v1. - */ -function getBaseUrl(baseUrl) { - if (!baseUrl) { - baseUrl = - process.env.GCE_METADATA_IP || - process.env.GCE_METADATA_HOST || - exports.HOST_ADDRESS; - } - // If no scheme is provided default to HTTP: - if (!/^https?:\/\//.test(baseUrl)) { - baseUrl = `http://${baseUrl}`; - } - return new URL(exports.BASE_PATH, baseUrl).href; -} -// Accepts an options object passed from the user to the API. In previous -// versions of the API, it referred to a `Request` or an `Axios` request -// options object. Now it refers to an object with very limited property -// names. This is here to help ensure users don't pass invalid options when -// they upgrade from 0.4 to 0.5 to 0.8. -function validate(options) { - Object.keys(options).forEach(key => { - switch (key) { - case 'params': - case 'property': - case 'headers': - break; - case 'qs': - throw new Error("'qs' is not a valid configuration option. Please use 'params' instead."); - default: - throw new Error(`'${key}' is not a valid configuration option.`); - } - }); -} -async function metadataAccessor(type, options, noResponseRetries = 3, fastFail = false) { - options = options || {}; - if (typeof options === 'string') { - options = { property: options }; - } - let property = ''; - if (typeof options === 'object' && options.property) { - property = '/' + options.property; - } - validate(options); - try { - const requestMethod = fastFail ? fastFailMetadataRequest : gaxios_1.request; - const res = await requestMethod({ - url: `${getBaseUrl()}/${type}${property}`, - headers: Object.assign({}, exports.HEADERS, options.headers), - retryConfig: { noResponseRetries }, - params: options.params, - responseType: 'text', - timeout: requestTimeout(), - }); - // NOTE: node.js converts all incoming headers to lower case. - if (res.headers[exports.HEADER_NAME.toLowerCase()] !== exports.HEADER_VALUE) { - throw new Error(`Invalid response from metadata service: incorrect ${exports.HEADER_NAME} header.`); - } - else if (!res.data) { - throw new Error('Invalid response from the metadata service'); - } - if (typeof res.data === 'string') { - try { - return jsonBigint.parse(res.data); - } - catch (_a) { - /* ignore */ - } - } - return res.data; - } - catch (e) { - if (e.response && e.response.status !== 200) { - e.message = `Unsuccessful response status code. ${e.message}`; - } - throw e; - } -} -async function fastFailMetadataRequest(options) { - const secondaryOptions = { - ...options, - url: options.url.replace(getBaseUrl(), getBaseUrl(exports.SECONDARY_HOST_ADDRESS)), - }; - // We race a connection between DNS/IP to metadata server. There are a couple - // reasons for this: - // - // 1. the DNS is slow in some GCP environments; by checking both, we might - // detect the runtime environment signficantly faster. - // 2. we can't just check the IP, which is tarpitted and slow to respond - // on a user's local machine. - // - // Additional logic has been added to make sure that we don't create an - // unhandled rejection in scenarios where a failure happens sometime - // after a success. - // - // Note, however, if a failure happens prior to a success, a rejection should - // occur, this is for folks running locally. - // - let responded = false; - const r1 = gaxios_1.request(options) - .then(res => { - responded = true; - return res; - }) - .catch(err => { - if (responded) { - return r2; - } - else { - responded = true; - throw err; - } - }); - const r2 = gaxios_1.request(secondaryOptions) - .then(res => { - responded = true; - return res; - }) - .catch(err => { - if (responded) { - return r1; - } - else { - responded = true; - throw err; - } - }); - return Promise.race([r1, r2]); -} -/** - * Obtain metadata for the current GCE instance - */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -function instance(options) { - return metadataAccessor('instance', options); -} -exports.instance = instance; -/** - * Obtain metadata for the current GCP Project. - */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -function project(options) { - return metadataAccessor('project', options); -} -exports.project = project; -/* - * How many times should we retry detecting GCP environment. - */ -function detectGCPAvailableRetries() { - return process.env.DETECT_GCP_RETRIES - ? Number(process.env.DETECT_GCP_RETRIES) - : 0; -} -let cachedIsAvailableResponse; -/** - * Determine if the metadata server is currently available. - */ -async function isAvailable() { - try { - // If a user is instantiating several GCP libraries at the same time, - // this may result in multiple calls to isAvailable(), to detect the - // runtime environment. We use the same promise for each of these calls - // to reduce the network load. - if (cachedIsAvailableResponse === undefined) { - cachedIsAvailableResponse = metadataAccessor('instance', undefined, detectGCPAvailableRetries(), - // If the default HOST_ADDRESS has been overridden, we should not - // make an effort to try SECONDARY_HOST_ADDRESS (as we are likely in - // a non-GCP environment): - !(process.env.GCE_METADATA_IP || process.env.GCE_METADATA_HOST)); - } - await cachedIsAvailableResponse; - return true; - } - catch (err) { - if (process.env.DEBUG_AUTH) { - console.info(err); - } - if (err.type === 'request-timeout') { - // If running in a GCP environment, metadata endpoint should return - // within ms. - return false; - } - if (err.response && err.response.status === 404) { - return false; - } - else { - if (!(err.response && err.response.status === 404) && - // A warning is emitted if we see an unexpected err.code, or err.code - // is not populated: - (!err.code || - ![ - 'EHOSTDOWN', - 'EHOSTUNREACH', - 'ENETUNREACH', - 'ENOENT', - 'ENOTFOUND', - 'ECONNREFUSED', - ].includes(err.code))) { - let code = 'UNKNOWN'; - if (err.code) - code = err.code; - process.emitWarning(`received unexpected error = ${err.message} code = ${code}`, 'MetadataLookupWarning'); - } - // Failure to resolve the metadata service means that it is not available. - return false; - } - } -} -exports.isAvailable = isAvailable; -/** - * reset the memoized isAvailable() lookup. - */ -function resetIsAvailableCache() { - cachedIsAvailableResponse = undefined; -} -exports.resetIsAvailableCache = resetIsAvailableCache; -/** - * Obtain the timeout for requests to the metadata server. - */ -function requestTimeout() { - // In testing, we were able to reproduce behavior similar to - // https://github.com/googleapis/google-auth-library-nodejs/issues/798 - // by making many concurrent network requests. Requests do not actually fail, - // rather they take significantly longer to complete (and we hit our - // default 3000ms timeout). - // - // This logic detects a GCF environment, using the documented environment - // variables K_SERVICE and FUNCTION_NAME: - // https://cloud.google.com/functions/docs/env-var and, in a GCF environment - // eliminates timeouts (by setting the value to 0 to disable). - return process.env.K_SERVICE || process.env.FUNCTION_NAME ? 0 : 3000; -} -exports.requestTimeout = requestTimeout; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/gcp-metadata/build/src/index.js.map b/reverse_engineering/node_modules/gcp-metadata/build/src/index.js.map deleted file mode 100644 index 2f254a7..0000000 --- a/reverse_engineering/node_modules/gcp-metadata/build/src/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,mCAA8D;AAE9D,0CAA2C;AAE9B,QAAA,SAAS,GAAG,qBAAqB,CAAC;AAClC,QAAA,YAAY,GAAG,wBAAwB,CAAC;AACxC,QAAA,sBAAsB,GAAG,kCAAkC,CAAC;AAE5D,QAAA,WAAW,GAAG,iBAAiB,CAAC;AAChC,QAAA,YAAY,GAAG,QAAQ,CAAC;AACxB,QAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAC,CAAC,mBAAW,CAAC,EAAE,oBAAY,EAAC,CAAC,CAAC;AAQpE;;;;;GAKG;AACH,SAAS,UAAU,CAAC,OAAgB;IAClC,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO;YACL,OAAO,CAAC,GAAG,CAAC,eAAe;gBAC3B,OAAO,CAAC,GAAG,CAAC,iBAAiB;gBAC7B,oBAAY,CAAC;KAChB;IACD,4CAA4C;IAC5C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;QACjC,OAAO,GAAG,UAAU,OAAO,EAAE,CAAC;KAC/B;IACD,OAAO,IAAI,GAAG,CAAC,iBAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;AAC1C,CAAC;AAED,yEAAyE;AACzE,wEAAwE;AACxE,yEAAyE;AACzE,2EAA2E;AAC3E,wCAAwC;AACxC,SAAS,QAAQ,CAAC,OAAgB;IAChC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACjC,QAAQ,GAAG,EAAE;YACX,KAAK,QAAQ,CAAC;YACd,KAAK,UAAU,CAAC;YAChB,KAAK,SAAS;gBACZ,MAAM;YACR,KAAK,IAAI;gBACP,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAC;YACJ;gBACE,MAAM,IAAI,KAAK,CAAC,IAAI,GAAG,wCAAwC,CAAC,CAAC;SACpE;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,IAAY,EACZ,OAA0B,EAC1B,iBAAiB,GAAG,CAAC,EACrB,QAAQ,GAAG,KAAK;IAEhB,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;IACxB,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;QAC/B,OAAO,GAAG,EAAC,QAAQ,EAAE,OAAO,EAAC,CAAC;KAC/B;IACD,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,EAAE;QACnD,QAAQ,GAAG,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;KACnC;IACD,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClB,IAAI;QACF,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,gBAAO,CAAC;QACnE,MAAM,GAAG,GAAG,MAAM,aAAa,CAAI;YACjC,GAAG,EAAE,GAAG,UAAU,EAAE,IAAI,IAAI,GAAG,QAAQ,EAAE;YACzC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,eAAO,EAAE,OAAO,CAAC,OAAO,CAAC;YACpD,WAAW,EAAE,EAAC,iBAAiB,EAAC;YAChC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,YAAY,EAAE,MAAM;YACpB,OAAO,EAAE,cAAc,EAAE;SAC1B,CAAC,CAAC;QACH,6DAA6D;QAC7D,IAAI,GAAG,CAAC,OAAO,CAAC,mBAAW,CAAC,WAAW,EAAE,CAAC,KAAK,oBAAY,EAAE;YAC3D,MAAM,IAAI,KAAK,CACb,qDAAqD,mBAAW,UAAU,CAC3E,CAAC;SACH;aAAM,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;YACpB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;SAC/D;QACD,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;YAChC,IAAI;gBACF,OAAO,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aACnC;YAAC,WAAM;gBACN,YAAY;aACb;SACF;QACD,OAAO,GAAG,CAAC,IAAI,CAAC;KACjB;IAAC,OAAO,CAAC,EAAE;QACV,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;YAC3C,CAAC,CAAC,OAAO,GAAG,sCAAsC,CAAC,CAAC,OAAO,EAAE,CAAC;SAC/D;QACD,MAAM,CAAC,CAAC;KACT;AACH,CAAC;AAED,KAAK,UAAU,uBAAuB,CACpC,OAAsB;IAEtB,MAAM,gBAAgB,GAAG;QACvB,GAAG,OAAO;QACV,GAAG,EAAE,OAAO,CAAC,GAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,UAAU,CAAC,8BAAsB,CAAC,CAAC;KAC5E,CAAC;IACF,6EAA6E;IAC7E,oBAAoB;IACpB,EAAE;IACF,0EAA0E;IAC1E,yDAAyD;IACzD,wEAAwE;IACxE,gCAAgC;IAChC,EAAE;IACF,uEAAuE;IACvE,oEAAoE;IACpE,mBAAmB;IACnB,EAAE;IACF,6EAA6E;IAC7E,4CAA4C;IAC5C,EAAE;IACF,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,MAAM,EAAE,GAA4B,gBAAO,CAAI,OAAO,CAAC;SACpD,IAAI,CAAC,GAAG,CAAC,EAAE;QACV,SAAS,GAAG,IAAI,CAAC;QACjB,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;SACD,KAAK,CAAC,GAAG,CAAC,EAAE;QACX,IAAI,SAAS,EAAE;YACb,OAAO,EAAE,CAAC;SACX;aAAM;YACL,SAAS,GAAG,IAAI,CAAC;YACjB,MAAM,GAAG,CAAC;SACX;IACH,CAAC,CAAC,CAAC;IACL,MAAM,EAAE,GAA4B,gBAAO,CAAI,gBAAgB,CAAC;SAC7D,IAAI,CAAC,GAAG,CAAC,EAAE;QACV,SAAS,GAAG,IAAI,CAAC;QACjB,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;SACD,KAAK,CAAC,GAAG,CAAC,EAAE;QACX,IAAI,SAAS,EAAE;YACb,OAAO,EAAE,CAAC;SACX;aAAM;YACL,SAAS,GAAG,IAAI,CAAC;YACjB,MAAM,GAAG,CAAC;SACX;IACH,CAAC,CAAC,CAAC;IACL,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,8DAA8D;AAC9D,SAAgB,QAAQ,CAAU,OAA0B;IAC1D,OAAO,gBAAgB,CAAI,UAAU,EAAE,OAAO,CAAC,CAAC;AAClD,CAAC;AAFD,4BAEC;AAED;;GAEG;AACH,8DAA8D;AAC9D,SAAgB,OAAO,CAAU,OAA0B;IACzD,OAAO,gBAAgB,CAAI,SAAS,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAFD,0BAEC;AAED;;GAEG;AACH,SAAS,yBAAyB;IAChC,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB;QACnC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;QACxC,CAAC,CAAC,CAAC,CAAC;AACR,CAAC;AAED,IAAI,yBAAuD,CAAC;AAE5D;;GAEG;AACI,KAAK,UAAU,WAAW;IAC/B,IAAI;QACF,qEAAqE;QACrE,oEAAoE;QACpE,uEAAuE;QACvE,8BAA8B;QAC9B,IAAI,yBAAyB,KAAK,SAAS,EAAE;YAC3C,yBAAyB,GAAG,gBAAgB,CAC1C,UAAU,EACV,SAAS,EACT,yBAAyB,EAAE;YAC3B,iEAAiE;YACjE,oEAAoE;YACpE,0BAA0B;YAC1B,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAChE,CAAC;SACH;QACD,MAAM,yBAAyB,CAAC;QAChC,OAAO,IAAI,CAAC;KACb;IAAC,OAAO,GAAG,EAAE;QACZ,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE;YAC1B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACnB;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,iBAAiB,EAAE;YAClC,mEAAmE;YACnE,aAAa;YACb,OAAO,KAAK,CAAC;SACd;QACD,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;YAC/C,OAAO,KAAK,CAAC;SACd;aAAM;YACL,IACE,CAAC,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC;gBAC9C,qEAAqE;gBACrE,oBAAoB;gBACpB,CAAC,CAAC,GAAG,CAAC,IAAI;oBACR,CAAC;wBACC,WAAW;wBACX,cAAc;wBACd,aAAa;wBACb,QAAQ;wBACR,WAAW;wBACX,cAAc;qBACf,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EACvB;gBACA,IAAI,IAAI,GAAG,SAAS,CAAC;gBACrB,IAAI,GAAG,CAAC,IAAI;oBAAE,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;gBAC9B,OAAO,CAAC,WAAW,CACjB,+BAA+B,GAAG,CAAC,OAAO,WAAW,IAAI,EAAE,EAC3D,uBAAuB,CACxB,CAAC;aACH;YAED,0EAA0E;YAC1E,OAAO,KAAK,CAAC;SACd;KACF;AACH,CAAC;AA1DD,kCA0DC;AAED;;GAEG;AACH,SAAgB,qBAAqB;IACnC,yBAAyB,GAAG,SAAS,CAAC;AACxC,CAAC;AAFD,sDAEC;AAED;;GAEG;AACH,SAAgB,cAAc;IAC5B,4DAA4D;IAC5D,sEAAsE;IACtE,6EAA6E;IAC7E,oEAAoE;IACpE,2BAA2B;IAC3B,EAAE;IACF,yEAAyE;IACzE,yCAAyC;IACzC,4EAA4E;IAC5E,8DAA8D;IAC9D,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACvE,CAAC;AAZD,wCAYC"} \ No newline at end of file diff --git a/reverse_engineering/node_modules/gcp-metadata/package.json b/reverse_engineering/node_modules/gcp-metadata/package.json deleted file mode 100644 index dbada9b..0000000 --- a/reverse_engineering/node_modules/gcp-metadata/package.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "_from": "gcp-metadata@^4.2.0", - "_id": "gcp-metadata@4.3.0", - "_inBundle": false, - "_integrity": "sha512-L9XQUpvKJCM76YRSmcxrR4mFPzPGsgZUH+GgHMxAET8qc6+BhRJq63RLhWakgEO2KKVgeSDVfyiNjkGSADwNTA==", - "_location": "/gcp-metadata", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "gcp-metadata@^4.2.0", - "name": "gcp-metadata", - "escapedName": "gcp-metadata", - "rawSpec": "^4.2.0", - "saveSpec": null, - "fetchSpec": "^4.2.0" - }, - "_requiredBy": [ - "/google-auth-library" - ], - "_resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.0.tgz", - "_shasum": "0423d06becdbfb9cbb8762eaacf14d5324997900", - "_spec": "gcp-metadata@^4.2.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/google-auth-library", - "author": { - "name": "Stephen Sawchuk" - }, - "bugs": { - "url": "https://github.com/googleapis/gcp-metadata/issues" - }, - "bundleDependencies": false, - "dependencies": { - "gaxios": "^4.0.0", - "json-bigint": "^1.0.0" - }, - "deprecated": false, - "description": "Get the metadata from a Google Cloud Platform environment", - "devDependencies": { - "@compodoc/compodoc": "^1.1.10", - "@google-cloud/functions": "^1.1.4", - "@microsoft/api-documenter": "^7.8.10", - "@microsoft/api-extractor": "^7.8.10", - "@types/json-bigint": "^1.0.0", - "@types/mocha": "^8.0.0", - "@types/ncp": "^2.0.1", - "@types/node": "^14.0.0", - "@types/tmp": "0.2.0", - "@types/uuid": "^8.0.0", - "c8": "^7.0.0", - "cross-env": "^7.0.3", - "gcbuild": "^1.3.4", - "gcx": "^1.0.0", - "gts": "^3.0.0", - "linkinator": "^2.0.0", - "mocha": "^8.0.0", - "ncp": "^2.0.0", - "nock": "^13.0.0", - "tmp": "^0.2.0", - "typescript": "^3.8.3", - "uuid": "^8.0.0" - }, - "engines": { - "node": ">=10" - }, - "files": [ - "build/src" - ], - "homepage": "https://github.com/googleapis/gcp-metadata#readme", - "keywords": [ - "google cloud platform", - "google cloud", - "google", - "app engine", - "compute engine", - "metadata server", - "metadata" - ], - "license": "Apache-2.0", - "main": "./build/src/index.js", - "name": "gcp-metadata", - "repository": { - "type": "git", - "url": "git+https://github.com/googleapis/gcp-metadata.git" - }, - "scripts": { - "api-documenter": "api-documenter yaml --input-folder=temp", - "api-extractor": "api-extractor run --local", - "clean": "gts clean", - "compile": "cross-env NODE_OPTIONS=--max-old-space-size=8192 tsc -p .", - "docs": "compodoc src/", - "docs-test": "linkinator docs", - "fix": "gts fix", - "lint": "gts check", - "precompile": "gts clean", - "predocs-test": "npm run docs", - "prelint": "cd samples; npm link ../; npm install", - "prepare": "npm run compile", - "presystem-test": "npm run compile", - "pretest": "npm run compile", - "samples-test": "npm link && cd samples/ && npm link ../ && npm test && cd ../", - "system-test": "mocha build/system-test --timeout 600000", - "test": "c8 mocha --timeout=5000 build/test" - }, - "types": "./build/src/index.d.ts", - "version": "4.3.0" -} diff --git a/reverse_engineering/node_modules/google-auth-library/CHANGELOG.md b/reverse_engineering/node_modules/google-auth-library/CHANGELOG.md deleted file mode 100644 index 8d7de75..0000000 --- a/reverse_engineering/node_modules/google-auth-library/CHANGELOG.md +++ /dev/null @@ -1,833 +0,0 @@ -# Changelog - -[npm history][1] - -[1]: https://www.npmjs.com/package/google-auth-library-nodejs?activeTab=versions - -## [7.5.0](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v7.4.1...v7.5.0) (2021-08-04) - - -### Features - -* Adds support for STS response not returning expires_in field. ([#1216](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1216)) ([24bb456](https://www.github.com/googleapis/google-auth-library-nodejs/commit/24bb4568820c2692b1b3ff29835a38fdb3f28c9e)) - -### [7.4.1](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v7.4.0...v7.4.1) (2021-07-29) - - -### Bug Fixes - -* **downscoped-client:** bug fixes for downscoped client implementation. ([#1219](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1219)) ([4fbe67e](https://www.github.com/googleapis/google-auth-library-nodejs/commit/4fbe67e08bce3f31193d3bb7b93c4cc1251e66a2)) - -## [7.4.0](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v7.3.0...v7.4.0) (2021-07-29) - - -### Features - -* **impersonated:** add impersonated credentials auth ([#1207](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1207)) ([ab1cd31](https://www.github.com/googleapis/google-auth-library-nodejs/commit/ab1cd31e07d45424f614e0401d1068df2fbd914c)) - -## [7.3.0](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v7.2.0...v7.3.0) (2021-07-02) - - -### Features - -* add useJWTAccessAlways and defaultServicePath variable ([#1204](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1204)) ([79e100e](https://www.github.com/googleapis/google-auth-library-nodejs/commit/79e100e9ddc64f34e34d0e91c8188f1818e33a1c)) - -## [7.2.0](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v7.1.2...v7.2.0) (2021-06-30) - - -### Features - -* Implement DownscopedClient#getAccessToken() and unit test ([#1201](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1201)) ([faa6677](https://www.github.com/googleapis/google-auth-library-nodejs/commit/faa6677fe72c8fc671a2190abe45897ac58cc42e)) - -### [7.1.2](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v7.1.1...v7.1.2) (2021-06-10) - - -### Bug Fixes - -* use iam client library to setup test ([#1173](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1173)) ([74ac5db](https://www.github.com/googleapis/google-auth-library-nodejs/commit/74ac5db59f9eff8fa4f3bdb6acc0647a1a4f491f)) - -### [7.1.1](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v7.1.0...v7.1.1) (2021-06-02) - - -### Bug Fixes - -* **deps:** update dependency puppeteer to v10 ([#1182](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1182)) ([003e3ee](https://www.github.com/googleapis/google-auth-library-nodejs/commit/003e3ee5d8aeb749c07a4a4db2b75a5882988cc3)) - -## [7.1.0](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v7.0.4...v7.1.0) (2021-05-21) - - -### Features - -* add `gcf-owl-bot[bot]` to `ignoreAuthors` ([#1174](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1174)) ([f377adc](https://www.github.com/googleapis/google-auth-library-nodejs/commit/f377adc01ca16687bb905aa14f6c62a23e90aaa9)) -* add detection for Cloud Run ([#1177](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1177)) ([4512363](https://www.github.com/googleapis/google-auth-library-nodejs/commit/4512363cf712dff5f178af0e7022c258775dfec7)) - -### [7.0.4](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v7.0.3...v7.0.4) (2021-04-06) - - -### Bug Fixes - -* do not suppress external project ID determination errors ([#1153](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1153)) ([6c1c91d](https://www.github.com/googleapis/google-auth-library-nodejs/commit/6c1c91dac6c31d762b03774a385d780a824fce97)) - -### [7.0.3](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v7.0.2...v7.0.3) (2021-03-23) - - -### Bug Fixes - -* support AWS_DEFAULT_REGION for determining AWS region ([#1149](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1149)) ([9ae2d30](https://www.github.com/googleapis/google-auth-library-nodejs/commit/9ae2d30c15c9bce3cae70ccbe6e227c096005695)) - -### [7.0.2](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v7.0.1...v7.0.2) (2021-02-10) - - -### Bug Fixes - -* expose `BaseExternalAccountClient` and `BaseExternalAccountClientOptions` ([#1142](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1142)) ([1d62c04](https://www.github.com/googleapis/google-auth-library-nodejs/commit/1d62c04dfa117b6a81e8c78385dc72792369cf21)) - -### [7.0.1](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v7.0.0...v7.0.1) (2021-02-09) - - -### Bug Fixes - -* **deps:** update dependency google-auth-library to v7 ([#1140](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1140)) ([9c717f7](https://www.github.com/googleapis/google-auth-library-nodejs/commit/9c717f70ca155b24edd5511b6038679db25b85b7)) - -## [7.0.0](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v6.1.6...v7.0.0) (2021-02-08) - - -### ⚠ BREAKING CHANGES - -* integrates external_accounts with `GoogleAuth` and ADC (#1052) -* workload identity federation support (#1131) - -### Features - -* adds service account impersonation to `ExternalAccountClient` ([#1041](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1041)) ([997f124](https://www.github.com/googleapis/google-auth-library-nodejs/commit/997f124a5c02dfa44879a759bf701a9fa4c3ba90)) -* adds text/json credential_source support to IdentityPoolClients ([#1059](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1059)) ([997f124](https://www.github.com/googleapis/google-auth-library-nodejs/commit/997f124a5c02dfa44879a759bf701a9fa4c3ba90)) -* defines `ExternalAccountClient` used to instantiate external account clients ([#1050](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1050)) ([997f124](https://www.github.com/googleapis/google-auth-library-nodejs/commit/997f124a5c02dfa44879a759bf701a9fa4c3ba90)) -* defines `IdentityPoolClient` used for K8s and Azure workloads ([#1042](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1042)) ([997f124](https://www.github.com/googleapis/google-auth-library-nodejs/commit/997f124a5c02dfa44879a759bf701a9fa4c3ba90)) -* defines ExternalAccountClient abstract class for external_account credentials ([#1030](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1030)) ([997f124](https://www.github.com/googleapis/google-auth-library-nodejs/commit/997f124a5c02dfa44879a759bf701a9fa4c3ba90)) -* get AWS region from environment variable ([#1067](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1067)) ([997f124](https://www.github.com/googleapis/google-auth-library-nodejs/commit/997f124a5c02dfa44879a759bf701a9fa4c3ba90)) -* implements AWS signature version 4 for signing requests ([#1047](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1047)) ([997f124](https://www.github.com/googleapis/google-auth-library-nodejs/commit/997f124a5c02dfa44879a759bf701a9fa4c3ba90)) -* implements the OAuth token exchange spec based on rfc8693 ([#1026](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1026)) ([997f124](https://www.github.com/googleapis/google-auth-library-nodejs/commit/997f124a5c02dfa44879a759bf701a9fa4c3ba90)) -* integrates external_accounts with `GoogleAuth` and ADC ([#1052](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1052)) ([997f124](https://www.github.com/googleapis/google-auth-library-nodejs/commit/997f124a5c02dfa44879a759bf701a9fa4c3ba90)) -* workload identity federation support ([#1131](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1131)) ([997f124](https://www.github.com/googleapis/google-auth-library-nodejs/commit/997f124a5c02dfa44879a759bf701a9fa4c3ba90)) - - -### Bug Fixes - -* **deps:** update dependency puppeteer to v6 ([#1129](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1129)) ([5240fb0](https://www.github.com/googleapis/google-auth-library-nodejs/commit/5240fb0e7ba5503d562659a0d1d7c952bc44ce0e)) -* **deps:** update dependency puppeteer to v7 ([#1134](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1134)) ([02d0d73](https://www.github.com/googleapis/google-auth-library-nodejs/commit/02d0d73a5f0d2fc7de9b13b160e4e7074652f9d0)) - -### [6.1.6](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v6.1.5...v6.1.6) (2021-01-27) - - -### Bug Fixes - -* call addSharedMetadataHeaders even when token has not expired ([#1116](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1116)) ([aad043d](https://www.github.com/googleapis/google-auth-library-nodejs/commit/aad043d20df3f1e44f56c58a21f15000b6fe970d)) - -### [6.1.5](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v6.1.4...v6.1.5) (2021-01-22) - - -### Bug Fixes - -* support PEM and p12 when using factory ([#1120](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1120)) ([c2ead4c](https://www.github.com/googleapis/google-auth-library-nodejs/commit/c2ead4cc7650f100b883c9296fce628f17085992)) - -### [6.1.4](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v6.1.3...v6.1.4) (2020-12-22) - - -### Bug Fixes - -* move accessToken to headers instead of parameter ([#1108](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1108)) ([67b0cc3](https://www.github.com/googleapis/google-auth-library-nodejs/commit/67b0cc3077860a1583bcf18ce50aeff58bbb5496)) - -### [6.1.3](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v6.1.2...v6.1.3) (2020-10-22) - - -### Bug Fixes - -* **deps:** update dependency gaxios to v4 ([#1086](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1086)) ([f2678ff](https://www.github.com/googleapis/google-auth-library-nodejs/commit/f2678ff5f8f5a0ee33924278b58e0a6e3122cb12)) - -### [6.1.2](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v6.1.1...v6.1.2) (2020-10-19) - - -### Bug Fixes - -* update gcp-metadata to catch a json-bigint security fix ([#1078](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1078)) ([125fe09](https://www.github.com/googleapis/google-auth-library-nodejs/commit/125fe0924a2206ebb0c83ece9947524e7b135803)) - -### [6.1.1](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v6.1.0...v6.1.1) (2020-10-06) - - -### Bug Fixes - -* **deps:** upgrade gtoken ([#1064](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1064)) ([9116f24](https://www.github.com/googleapis/google-auth-library-nodejs/commit/9116f247486d6376feca505bbfa42a91d5e579e2)) - -## [6.1.0](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v6.0.8...v6.1.0) (2020-09-22) - - -### Features - -* default self-signed JWTs ([#1054](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1054)) ([b4d139d](https://www.github.com/googleapis/google-auth-library-nodejs/commit/b4d139d9ee27f886ca8cc5478615c052700fff48)) - -### [6.0.8](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v6.0.7...v6.0.8) (2020-08-13) - - -### Bug Fixes - -* **deps:** roll back dependency google-auth-library to ^6.0.6 ([#1033](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1033)) ([eb54ee9](https://www.github.com/googleapis/google-auth-library-nodejs/commit/eb54ee9369d9e5a01d164ccf7f826858d44827fd)) - -### [6.0.7](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v6.0.6...v6.0.7) (2020-08-11) - - -### Bug Fixes - -* migrate token info API to not pass token in query string ([#991](https://www.github.com/googleapis/google-auth-library-nodejs/issues/991)) ([a7e5701](https://www.github.com/googleapis/google-auth-library-nodejs/commit/a7e5701a8394d79fe93d28794467747a23cf9ff4)) - -### [6.0.6](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v6.0.5...v6.0.6) (2020-07-30) - - -### Bug Fixes - -* **types:** include scope in credentials type ([#1007](https://www.github.com/googleapis/google-auth-library-nodejs/issues/1007)) ([a2b7d23](https://www.github.com/googleapis/google-auth-library-nodejs/commit/a2b7d23caa5bf253c7c0756396f1b58216182089)) - -### [6.0.5](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v6.0.4...v6.0.5) (2020-07-13) - - -### Bug Fixes - -* **deps:** update dependency lru-cache to v6 ([#995](https://www.github.com/googleapis/google-auth-library-nodejs/issues/995)) ([3c07566](https://www.github.com/googleapis/google-auth-library-nodejs/commit/3c07566f0384611227030e9b381fc6e6707e526b)) - -### [6.0.4](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v6.0.3...v6.0.4) (2020-07-09) - - -### Bug Fixes - -* typeo in nodejs .gitattribute ([#993](https://www.github.com/googleapis/google-auth-library-nodejs/issues/993)) ([ad12ceb](https://www.github.com/googleapis/google-auth-library-nodejs/commit/ad12ceb3309b7db7394fe1fe1d5e7b2e4901141d)) - -### [6.0.3](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v6.0.2...v6.0.3) (2020-07-06) - - -### Bug Fixes - -* **deps:** update dependency puppeteer to v5 ([#986](https://www.github.com/googleapis/google-auth-library-nodejs/issues/986)) ([7cfe6f2](https://www.github.com/googleapis/google-auth-library-nodejs/commit/7cfe6f200b9c04fe4805d1b1e3a2e03a9668e551)) - -### [6.0.2](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v6.0.1...v6.0.2) (2020-06-16) - - -### Bug Fixes - -* **deps:** update dependency puppeteer to v4 ([#976](https://www.github.com/googleapis/google-auth-library-nodejs/issues/976)) ([9ddfb9b](https://www.github.com/googleapis/google-auth-library-nodejs/commit/9ddfb9befedd10d6c82cbf799c1afea9ba10d444)) -* **tsc:** audience property is not mandatory on verifyIdToken ([#972](https://www.github.com/googleapis/google-auth-library-nodejs/issues/972)) ([17a7e24](https://www.github.com/googleapis/google-auth-library-nodejs/commit/17a7e247cdb798ddf3173cf44ab762665cbce0a1)) -* **types:** add locale property to idtoken ([#974](https://www.github.com/googleapis/google-auth-library-nodejs/issues/974)) ([ebf9bed](https://www.github.com/googleapis/google-auth-library-nodejs/commit/ebf9beda30f251da6adb9ec0bf943019ea0171c5)), closes [#973](https://www.github.com/googleapis/google-auth-library-nodejs/issues/973) - -### [6.0.1](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v6.0.0...v6.0.1) (2020-05-21) - - -### Bug Fixes - -* **deps:** update dependency google-auth-library to v6 ([#930](https://www.github.com/googleapis/google-auth-library-nodejs/issues/930)) ([81fdabe](https://www.github.com/googleapis/google-auth-library-nodejs/commit/81fdabe6fb7f0b8c5114c0d835680a28def822e2)) -* apache license URL ([#468](https://www.github.com/googleapis/google-auth-library-nodejs/issues/468)) ([#936](https://www.github.com/googleapis/google-auth-library-nodejs/issues/936)) ([53831cf](https://www.github.com/googleapis/google-auth-library-nodejs/commit/53831cf72f6669d13692c5665fef5062dc8f6c1a)) -* **deps:** update dependency puppeteer to v3 ([#944](https://www.github.com/googleapis/google-auth-library-nodejs/issues/944)) ([4d6fba0](https://www.github.com/googleapis/google-auth-library-nodejs/commit/4d6fba034cb0e70092656e9aff1ba419fdfca880)) -* fixing tsc error caused by @types/node update ([#965](https://www.github.com/googleapis/google-auth-library-nodejs/issues/965)) ([b94edb0](https://www.github.com/googleapis/google-auth-library-nodejs/commit/b94edb0716572593e4e9cb8a9b9bbfa567f71625)) -* gcp-metadata now warns rather than throwing ([#956](https://www.github.com/googleapis/google-auth-library-nodejs/issues/956)) ([89e16c2](https://www.github.com/googleapis/google-auth-library-nodejs/commit/89e16c2401101d086a8f9d05b8f0771b5c74157c)) - -## [6.0.0](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v5.10.1...v6.0.0) (2020-03-26) - - -### ⚠ BREAKING CHANGES - -* typescript@3.7.x introduced some breaking changes in -generated code. -* require node 10 in engines field (#926) -* remove deprecated methods (#906) - -### Features - -* require node 10 in engines field ([#926](https://www.github.com/googleapis/google-auth-library-nodejs/issues/926)) ([d89c59a](https://www.github.com/googleapis/google-auth-library-nodejs/commit/d89c59a316e9ca5b8c351128ee3e2d91e9729d5c)) - - -### Bug Fixes - -* do not warn for SDK creds ([#905](https://www.github.com/googleapis/google-auth-library-nodejs/issues/905)) ([9536840](https://www.github.com/googleapis/google-auth-library-nodejs/commit/9536840f88e77f747bbbc2c1b5b4289018fc23c9)) -* use iamcredentials API to sign blobs ([#908](https://www.github.com/googleapis/google-auth-library-nodejs/issues/908)) ([7b8e4c5](https://www.github.com/googleapis/google-auth-library-nodejs/commit/7b8e4c52e31bb3d448c3ff8c05002188900eaa04)) -* **deps:** update dependency gaxios to v3 ([#917](https://www.github.com/googleapis/google-auth-library-nodejs/issues/917)) ([1f4bf61](https://www.github.com/googleapis/google-auth-library-nodejs/commit/1f4bf6128a0dcf22cfe1ec492b2192f513836cb2)) -* **deps:** update dependency gcp-metadata to v4 ([#918](https://www.github.com/googleapis/google-auth-library-nodejs/issues/918)) ([d337131](https://www.github.com/googleapis/google-auth-library-nodejs/commit/d337131d009cc1f8182f7a1f8a9034433ee3fbf7)) -* **types:** add additional fields to TokenInfo ([#907](https://www.github.com/googleapis/google-auth-library-nodejs/issues/907)) ([5b48eb8](https://www.github.com/googleapis/google-auth-library-nodejs/commit/5b48eb86c108c47d317a0eb96b47c0cae86f98cb)) - - -### Build System - -* update to latest gts and TypeScript ([#927](https://www.github.com/googleapis/google-auth-library-nodejs/issues/927)) ([e11e18c](https://www.github.com/googleapis/google-auth-library-nodejs/commit/e11e18cb33eb60a666980d061c54bb8891cdd242)) - - -### Miscellaneous Chores - -* remove deprecated methods ([#906](https://www.github.com/googleapis/google-auth-library-nodejs/issues/906)) ([f453fb7](https://www.github.com/googleapis/google-auth-library-nodejs/commit/f453fb7d8355e6dc74800b18d6f43c4e91d4acc9)) - -### [5.10.1](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v5.10.0...v5.10.1) (2020-02-25) - - -### Bug Fixes - -* if GCF environment detected, increase library timeout ([#899](https://www.github.com/googleapis/google-auth-library-nodejs/issues/899)) ([2577ff2](https://www.github.com/googleapis/google-auth-library-nodejs/commit/2577ff28bf22dfc58bd09e7365471c16f359f109)) - -## [5.10.0](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v5.9.2...v5.10.0) (2020-02-20) - - -### Features - -* support for verifying ES256 and retrieving IAP public keys ([#887](https://www.github.com/googleapis/google-auth-library-nodejs/issues/887)) ([a98e386](https://www.github.com/googleapis/google-auth-library-nodejs/commit/a98e38678dc4a5e963356378c75c658e36dccd01)) - - -### Bug Fixes - -* **docs:** correct links in README ([f6a3194](https://www.github.com/googleapis/google-auth-library-nodejs/commit/f6a3194ff6df97d4fd833ae69ec80c05eab46e7b)), closes [#891](https://www.github.com/googleapis/google-auth-library-nodejs/issues/891) - -### [5.9.2](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v5.9.1...v5.9.2) (2020-01-28) - - -### Bug Fixes - -* populate credentials.refresh_token if provided ([#881](https://www.github.com/googleapis/google-auth-library-nodejs/issues/881)) ([63c4637](https://www.github.com/googleapis/google-auth-library-nodejs/commit/63c4637c57e4113a7b01bf78933a8bff0356c104)) - -### [5.9.1](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v5.9.0...v5.9.1) (2020-01-16) - - -### Bug Fixes - -* ensures GCE metadata sets email field for ID tokens ([#874](https://www.github.com/googleapis/google-auth-library-nodejs/issues/874)) ([e45b73d](https://www.github.com/googleapis/google-auth-library-nodejs/commit/e45b73dbb22e1c2d8115882006a21337c7d9bd63)) - -## [5.9.0](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v5.8.0...v5.9.0) (2020-01-14) - - -### Features - -* add methods for fetching and using id tokens ([#867](https://www.github.com/googleapis/google-auth-library-nodejs/issues/867)) ([8036f1a](https://www.github.com/googleapis/google-auth-library-nodejs/commit/8036f1a51d1a103b08daf62c7ce372c9f68cd9d4)) -* export LoginTicket and TokenPayload ([#870](https://www.github.com/googleapis/google-auth-library-nodejs/issues/870)) ([539ea5e](https://www.github.com/googleapis/google-auth-library-nodejs/commit/539ea5e804386b79ecf469838fff19465aeb2ca6)) - -## [5.8.0](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v5.7.0...v5.8.0) (2020-01-06) - - -### Features - -* cache results of getEnv() ([#857](https://www.github.com/googleapis/google-auth-library-nodejs/issues/857)) ([d4545a9](https://www.github.com/googleapis/google-auth-library-nodejs/commit/d4545a9001184fac0b67e7073e463e3efd345037)) - - -### Bug Fixes - -* **deps:** update dependency jws to v4 ([#851](https://www.github.com/googleapis/google-auth-library-nodejs/issues/851)) ([71366d4](https://www.github.com/googleapis/google-auth-library-nodejs/commit/71366d43406047ce9e1d818d59a14191fb678e3a)) - -## [5.7.0](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v5.6.1...v5.7.0) (2019-12-10) - - -### Features - -* make x-goog-user-project work for additional auth clients ([#848](https://www.github.com/googleapis/google-auth-library-nodejs/issues/848)) ([46af865](https://www.github.com/googleapis/google-auth-library-nodejs/commit/46af865172103c6f28712d78b30c2291487cbe86)) - -### [5.6.1](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v5.6.0...v5.6.1) (2019-12-05) - - -### Bug Fixes - -* **deps:** pin TypeScript below 3.7.0 ([#845](https://www.github.com/googleapis/google-auth-library-nodejs/issues/845)) ([a9c6e92](https://www.github.com/googleapis/google-auth-library-nodejs/commit/a9c6e9284efe8102974c57c9824ed6275d743c7a)) -* **docs:** improve types and docs for generateCodeVerifierAsync ([#840](https://www.github.com/googleapis/google-auth-library-nodejs/issues/840)) ([04dae9c](https://www.github.com/googleapis/google-auth-library-nodejs/commit/04dae9c271f0099025188489c61fd245d482832b)) - -## [5.6.0](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v5.5.1...v5.6.0) (2019-12-02) - - -### Features - -* populate x-goog-user-project for requestAsync ([#837](https://www.github.com/googleapis/google-auth-library-nodejs/issues/837)) ([5a068fb](https://www.github.com/googleapis/google-auth-library-nodejs/commit/5a068fb8f5a3827ab70404f1d9699a97f962bdad)) -* set x-goog-user-project header, with quota_project from default credentials ([#829](https://www.github.com/googleapis/google-auth-library-nodejs/issues/829)) ([3240d16](https://www.github.com/googleapis/google-auth-library-nodejs/commit/3240d16f05171781fe6d70d64c476bceb25805a5)) - - -### Bug Fixes - -* **deps:** update dependency puppeteer to v2 ([#821](https://www.github.com/googleapis/google-auth-library-nodejs/issues/821)) ([2c04117](https://www.github.com/googleapis/google-auth-library-nodejs/commit/2c0411708761cc7debdda1af1e593d82cb4aed31)) -* **docs:** add jsdoc-region-tag plugin ([#826](https://www.github.com/googleapis/google-auth-library-nodejs/issues/826)) ([558677f](https://www.github.com/googleapis/google-auth-library-nodejs/commit/558677fd90d3451e9ac4bf6d0b98907e3313f287)) -* expand on x-goog-user-project to handle auth.getClient() ([#831](https://www.github.com/googleapis/google-auth-library-nodejs/issues/831)) ([3646b7f](https://www.github.com/googleapis/google-auth-library-nodejs/commit/3646b7f9deb296aaff602dd2168ce93f014ce840)) -* use quota_project_id field instead of quota_project ([#832](https://www.github.com/googleapis/google-auth-library-nodejs/issues/832)) ([8933966](https://www.github.com/googleapis/google-auth-library-nodejs/commit/8933966659f3b07f5454a2756fa52d92fea147d2)) - -### [5.5.1](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v5.5.0...v5.5.1) (2019-10-22) - - -### Bug Fixes - -* **deps:** update gaxios dependency ([#817](https://www.github.com/googleapis/google-auth-library-nodejs/issues/817)) ([6730698](https://www.github.com/googleapis/google-auth-library-nodejs/commit/6730698b876eb52889acfead33bc4af52a8a7ba5)) -* don't append x-goog-api-client multiple times ([#820](https://www.github.com/googleapis/google-auth-library-nodejs/issues/820)) ([a46b271](https://www.github.com/googleapis/google-auth-library-nodejs/commit/a46b271947b635377eacbdfcd22ae363ce9260a1)) - -## [5.5.0](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v5.4.1...v5.5.0) (2019-10-14) - - -### Features - -* **refresh:** add forceRefreshOnFailure flag for refreshing token on error ([#790](https://www.github.com/googleapis/google-auth-library-nodejs/issues/790)) ([54cf477](https://www.github.com/googleapis/google-auth-library-nodejs/commit/54cf4770f487fd1db48f2444c86109ca97608ed1)) - -### [5.4.1](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v5.4.0...v5.4.1) (2019-10-10) - - -### Bug Fixes - -* **deps:** updats to gcp-metadata with debug option ([#811](https://www.github.com/googleapis/google-auth-library-nodejs/issues/811)) ([744e3e8](https://www.github.com/googleapis/google-auth-library-nodejs/commit/744e3e8fea223eb4fb115ef0a4d36ad88fc6921a)) - -## [5.4.0](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v5.3.0...v5.4.0) (2019-10-08) - - -### Features - -* do not deprecate refreshAccessToken ([#804](https://www.github.com/googleapis/google-auth-library-nodejs/issues/804)) ([f05de11](https://www.github.com/googleapis/google-auth-library-nodejs/commit/f05de11)) - -## [5.3.0](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v5.2.2...v5.3.0) (2019-09-27) - - -### Features - -* if token expires soon, force refresh ([#794](https://www.github.com/googleapis/google-auth-library-nodejs/issues/794)) ([fecd4f4](https://www.github.com/googleapis/google-auth-library-nodejs/commit/fecd4f4)) - -### [5.2.2](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v5.2.1...v5.2.2) (2019-09-17) - - -### Bug Fixes - -* **deps:** update to gcp-metadata and address envDetect performance issues ([#787](https://www.github.com/googleapis/google-auth-library-nodejs/issues/787)) ([651b5d4](https://www.github.com/googleapis/google-auth-library-nodejs/commit/651b5d4)) - -### [5.2.1](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v5.2.0...v5.2.1) (2019-09-06) - - -### Bug Fixes - -* **deps:** nock@next has types that work with our libraries ([#783](https://www.github.com/googleapis/google-auth-library-nodejs/issues/783)) ([a253709](https://www.github.com/googleapis/google-auth-library-nodejs/commit/a253709)) -* **docs:** fix variable name in README.md ([#782](https://www.github.com/googleapis/google-auth-library-nodejs/issues/782)) ([d8c70b9](https://www.github.com/googleapis/google-auth-library-nodejs/commit/d8c70b9)) - -## [5.2.0](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v5.1.2...v5.2.0) (2019-08-09) - - -### Features - -* populate x-goog-api-client header for auth ([#772](https://www.github.com/googleapis/google-auth-library-nodejs/issues/772)) ([526dcf6](https://www.github.com/googleapis/google-auth-library-nodejs/commit/526dcf6)) - -### [5.1.2](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v5.1.1...v5.1.2) (2019-08-05) - - -### Bug Fixes - -* **deps:** upgrade to gtoken 4.x ([#763](https://www.github.com/googleapis/google-auth-library-nodejs/issues/763)) ([a1fcc25](https://www.github.com/googleapis/google-auth-library-nodejs/commit/a1fcc25)) - -### [5.1.1](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v5.1.0...v5.1.1) (2019-07-29) - - -### Bug Fixes - -* **deps:** update dependency google-auth-library to v5 ([#759](https://www.github.com/googleapis/google-auth-library-nodejs/issues/759)) ([e32a12b](https://www.github.com/googleapis/google-auth-library-nodejs/commit/e32a12b)) - -## [5.1.0](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v5.0.0...v5.1.0) (2019-07-24) - - -### Features - -* **types:** expose ProjectIdCallback interface ([#753](https://www.github.com/googleapis/google-auth-library-nodejs/issues/753)) ([5577f0d](https://www.github.com/googleapis/google-auth-library-nodejs/commit/5577f0d)) - -## [5.0.0](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v4.2.6...v5.0.0) (2019-07-23) - - -### ⚠ BREAKING CHANGES - -* getOptions() no longer accepts GoogleAuthOptions (#749) - -### Code Refactoring - -* getOptions() no longer accepts GoogleAuthOptions ([#749](https://www.github.com/googleapis/google-auth-library-nodejs/issues/749)) ([ba58e3b](https://www.github.com/googleapis/google-auth-library-nodejs/commit/ba58e3b)) - -### [4.2.6](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v4.2.5...v4.2.6) (2019-07-23) - - -### Bug Fixes - -* use FUNCTION_TARGET to detect GCF 10 and above ([#748](https://www.github.com/googleapis/google-auth-library-nodejs/issues/748)) ([ca17685](https://www.github.com/googleapis/google-auth-library-nodejs/commit/ca17685)) - -### [4.2.5](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v4.2.4...v4.2.5) (2019-06-26) - - -### Bug Fixes - -* **docs:** make anchors work in jsdoc ([#742](https://www.github.com/googleapis/google-auth-library-nodejs/issues/742)) ([7901456](https://www.github.com/googleapis/google-auth-library-nodejs/commit/7901456)) - -### [4.2.4](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v4.2.3...v4.2.4) (2019-06-25) - - -### Bug Fixes - -* only require fast-text-encoding when needed ([#740](https://www.github.com/googleapis/google-auth-library-nodejs/issues/740)) ([04fcd77](https://www.github.com/googleapis/google-auth-library-nodejs/commit/04fcd77)) - -### [4.2.3](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v4.2.2...v4.2.3) (2019-06-24) - - -### Bug Fixes - -* feature detection to check for browser ([#738](https://www.github.com/googleapis/google-auth-library-nodejs/issues/738)) ([83a5ba5](https://www.github.com/googleapis/google-auth-library-nodejs/commit/83a5ba5)) - -### [4.2.2](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v4.2.1...v4.2.2) (2019-06-18) - - -### Bug Fixes - -* **compute:** correctly specify scopes when fetching token ([#735](https://www.github.com/googleapis/google-auth-library-nodejs/issues/735)) ([4803e3c](https://www.github.com/googleapis/google-auth-library-nodejs/commit/4803e3c)) - -### [4.2.1](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v4.2.0...v4.2.1) (2019-06-14) - - -### Bug Fixes - -* **docs:** move to new client docs URL ([#733](https://www.github.com/googleapis/google-auth-library-nodejs/issues/733)) ([cfbbe2a](https://www.github.com/googleapis/google-auth-library-nodejs/commit/cfbbe2a)) - -## [4.2.0](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v4.1.0...v4.2.0) (2019-06-05) - - -### Bug Fixes - -* pad base64 strings for base64js ([#722](https://www.github.com/googleapis/google-auth-library-nodejs/issues/722)) ([81e0a23](https://www.github.com/googleapis/google-auth-library-nodejs/commit/81e0a23)) - - -### Features - -* make both crypto implementations support sign ([#727](https://www.github.com/googleapis/google-auth-library-nodejs/issues/727)) ([e445fb3](https://www.github.com/googleapis/google-auth-library-nodejs/commit/e445fb3)) - -## [4.1.0](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v4.0.0...v4.1.0) (2019-05-29) - - -### Bug Fixes - -* **deps:** update dependency google-auth-library to v4 ([#705](https://www.github.com/googleapis/google-auth-library-nodejs/issues/705)) ([2b13344](https://www.github.com/googleapis/google-auth-library-nodejs/commit/2b13344)) - - -### Features - -* use X-Goog-Api-Key header ([#719](https://www.github.com/googleapis/google-auth-library-nodejs/issues/719)) ([35471d0](https://www.github.com/googleapis/google-auth-library-nodejs/commit/35471d0)) - -## [4.0.0](https://www.github.com/googleapis/google-auth-library-nodejs/compare/v3.1.2...v4.0.0) (2019-05-08) - - -### Bug Fixes - -* **deps:** update dependency arrify to v2 ([#684](https://www.github.com/googleapis/google-auth-library-nodejs/issues/684)) ([1757ee2](https://www.github.com/googleapis/google-auth-library-nodejs/commit/1757ee2)) -* **deps:** update dependency gaxios to v2 ([#681](https://www.github.com/googleapis/google-auth-library-nodejs/issues/681)) ([770ad2f](https://www.github.com/googleapis/google-auth-library-nodejs/commit/770ad2f)) -* **deps:** update dependency gcp-metadata to v2 ([#701](https://www.github.com/googleapis/google-auth-library-nodejs/issues/701)) ([be20528](https://www.github.com/googleapis/google-auth-library-nodejs/commit/be20528)) -* **deps:** update dependency gtoken to v3 ([#702](https://www.github.com/googleapis/google-auth-library-nodejs/issues/702)) ([2c538e5](https://www.github.com/googleapis/google-auth-library-nodejs/commit/2c538e5)) -* re-throw original exception and preserve message in compute client ([#668](https://www.github.com/googleapis/google-auth-library-nodejs/issues/668)) ([dffd1cc](https://www.github.com/googleapis/google-auth-library-nodejs/commit/dffd1cc)) -* surface original stack trace and message with errors ([#651](https://www.github.com/googleapis/google-auth-library-nodejs/issues/651)) ([8fb65eb](https://www.github.com/googleapis/google-auth-library-nodejs/commit/8fb65eb)) -* throw on missing refresh token in all cases ([#670](https://www.github.com/googleapis/google-auth-library-nodejs/issues/670)) ([0a02946](https://www.github.com/googleapis/google-auth-library-nodejs/commit/0a02946)) -* throw when adc cannot acquire a projectId ([#658](https://www.github.com/googleapis/google-auth-library-nodejs/issues/658)) ([ba48164](https://www.github.com/googleapis/google-auth-library-nodejs/commit/ba48164)) -* **deps:** update dependency semver to v6 ([#655](https://www.github.com/googleapis/google-auth-library-nodejs/issues/655)) ([ec56c88](https://www.github.com/googleapis/google-auth-library-nodejs/commit/ec56c88)) - - -### Build System - -* upgrade engines field to >=8.10.0 ([#686](https://www.github.com/googleapis/google-auth-library-nodejs/issues/686)) ([377d5c6](https://www.github.com/googleapis/google-auth-library-nodejs/commit/377d5c6)) - - -### Features - -* support scopes on compute credentials ([#642](https://www.github.com/googleapis/google-auth-library-nodejs/issues/642)) ([1811b7f](https://www.github.com/googleapis/google-auth-library-nodejs/commit/1811b7f)) - - -### BREAKING CHANGES - -* upgrade engines field to >=8.10.0 (#686) - -## v3.1.2 - -03-22-2019 15:38 PDT - -### Implementation Changes -- fix: getCredential(): load credentials with getClient() ([#648](https://github.com/google/google-auth-library-nodejs/pull/648)) - -### Internal / Testing Changes -- chore: publish to npm using wombat ([#645](https://github.com/google/google-auth-library-nodejs/pull/645)) - -## v3.1.1 - -03-18-2019 08:32 PDT - -### Bug Fixes -- fix: Avoid loading fast-text-encoding if not in browser environment ([#627](https://github.com/google/google-auth-library-nodejs/pull/627)) - -### Dependencies -- fix(deps): update dependency gcp-metadata to v1 ([#632](https://github.com/google/google-auth-library-nodejs/pull/632)) - -### Documentation -- docs: update links in contrib guide ([#630](https://github.com/google/google-auth-library-nodejs/pull/630)) - -### Internal / Testing Changes -- build: use per-repo publish token ([#641](https://github.com/google/google-auth-library-nodejs/pull/641)) -- build: Add docuploader credentials to node publish jobs ([#639](https://github.com/google/google-auth-library-nodejs/pull/639)) -- build: use node10 to run samples-test, system-test etc ([#638](https://github.com/google/google-auth-library-nodejs/pull/638)) -- build: update release configuration -- chore(deps): update dependency @types/lru-cache to v5 ([#635](https://github.com/google/google-auth-library-nodejs/pull/635)) -- chore(deps): update dependency mocha to v6 -- chore: fix lint ([#631](https://github.com/google/google-auth-library-nodejs/pull/631)) -- build: use linkinator for docs test ([#628](https://github.com/google/google-auth-library-nodejs/pull/628)) -- chore(deps): update dependency @types/tmp to ^0.0.34 ([#629](https://github.com/google/google-auth-library-nodejs/pull/629)) -- build: create docs test npm scripts ([#625](https://github.com/google/google-auth-library-nodejs/pull/625)) -- build: test using @grpc/grpc-js in CI ([#624](https://github.com/google/google-auth-library-nodejs/pull/624)) - -## v3.1.0 - -02-08-2019 08:29 PST - -### Bug fixes -- fix: use key file when fetching project id ([#618](https://github.com/googleapis/google-auth-library-nodejs/pull/618)) -- fix: Throw error if there is no refresh token despite the necessity of refreshing ([#605](https://github.com/googleapis/google-auth-library-nodejs/pull/605)) - -### New Features -- feat: allow passing constructor options to getClient ([#611](https://github.com/googleapis/google-auth-library-nodejs/pull/611)) - -### Documentation -- docs: update contributing path in README ([#621](https://github.com/googleapis/google-auth-library-nodejs/pull/621)) -- chore: move CONTRIBUTING.md to root ([#619](https://github.com/googleapis/google-auth-library-nodejs/pull/619)) -- docs: add lint/fix example to contributing guide ([#615](https://github.com/googleapis/google-auth-library-nodejs/pull/615)) -- docs: use the People API for samples ([#609](https://github.com/googleapis/google-auth-library-nodejs/pull/609)) - -### Internal / Testing Changes -- chore(deps): update dependency typescript to ~3.3.0 ([#612](https://github.com/googleapis/google-auth-library-nodejs/pull/612)) -- chore(deps): update dependency eslint-config-prettier to v4 ([#604](https://github.com/googleapis/google-auth-library-nodejs/pull/604)) -- build: ignore googleapis.com in doc link check ([#602](https://github.com/googleapis/google-auth-library-nodejs/pull/602)) -- chore(deps): update dependency karma to v4 ([#603](https://github.com/googleapis/google-auth-library-nodejs/pull/603)) - -## v3.0.1 - -01-16-2019 21:04 PST - -### Bug Fixes -- fix(deps): upgrade to the latest gaxios ([#596](https://github.com/googleapis/google-auth-library-nodejs/pull/596)) - -## v3.0.0 - -01-16-2019 10:00 PST - -Welcome to 3.0 🎉 This release has it all. New features, bug fixes, breaking changes, performance improvements - something for everyone! The biggest addition to this release is support for the browser via Webpack. - -**This release has breaking changes.** This release has a few breaking changes. These changes are unlikely to affect most clients. - -#### BREAKING: Migration from `axios` to `gaxios` -The 2.0 version of this library used the [axios](https://github.com/axios/axios) library for making HTTP requests. In the 3.0 release, this has been replaced by a *mostly* API compatible library [gaxios](https://github.com/JustinBeckwith/gaxios). The new request library natively supports proxies, and comes with a smaller dependency chain. While this is mostly an implementation detail, the `request` method was directly exposed via the `GoogleAuth.request` and `OAuth2Client.request` methods. The gaxios library aims to provide an API compatible implementation of axios, but that can never be 100% promised. If you run into bugs or differences that cause issues - please do let us know. - -#### BREAKING: `generateCodeVerifier` is now `generateCodeVerifierAsync` -The `OAuth2Client.generateCodeVerifier` method has been replaced by the `OAuth2Client.generateCodeVerifierAsync` method. It has changed from a synchronous method to an asynchronous method to support async browser crypto APIs required for Webpack support. - -#### BREAKING: `verifySignedJwtWithCerts` is now `verifySignedJwtWithCertsAsync` -The `OAuth2Client.verifySignedJwtWithCerts` method has been replaced by the `OAuth2Client.verifySignedJwtWithCertsAsync` method. It has changed from a synchronous method to an asynchronous method to support async browser crypto APIs required for Webpack support. - - -### New Features -- feat: make it webpackable ([#371](https://github.com/google/google-auth-library-nodejs/pull/371)) - -### Bug Fixes -- fix: accept lowercase env vars ([#578](https://github.com/google/google-auth-library-nodejs/pull/578)) - -### Dependencies -- chore(deps): update gtoken ([#592](https://github.com/google/google-auth-library-nodejs/pull/592)) -- fix(deps): upgrade to gcp-metadata v0.9.3 ([#586](https://github.com/google/google-auth-library-nodejs/pull/586)) - -### Documentation -- docs: update bug report link ([#585](https://github.com/google/google-auth-library-nodejs/pull/585)) -- docs: clarify access and refresh token docs ([#577](https://github.com/google/google-auth-library-nodejs/pull/577)) - -### Internal / Testing Changes -- refactor(deps): use `gaxios` for HTTP requests instead of `axios` ([#593](https://github.com/google/google-auth-library-nodejs/pull/593)) -- fix: some browser fixes ([#590](https://github.com/google/google-auth-library-nodejs/pull/590)) -- chore(deps): update dependency ts-loader to v5 ([#588](https://github.com/google/google-auth-library-nodejs/pull/588)) -- chore(deps): update dependency karma to v3 ([#587](https://github.com/google/google-auth-library-nodejs/pull/587)) -- build: check broken links in generated docs ([#579](https://github.com/google/google-auth-library-nodejs/pull/579)) -- chore(deps): drop unused dep on typedoc ([#583](https://github.com/google/google-auth-library-nodejs/pull/583)) -- build: add browser test running on Kokoro ([#584](https://github.com/google/google-auth-library-nodejs/pull/584)) -- test: improve samples and add tests ([#576](https://github.com/google/google-auth-library-nodejs/pull/576)) - -## v2.0.2 - -12-16-2018 10:48 PST - -### Fixes -- fix(types): export GCPEnv type ([#569](https://github.com/google/google-auth-library-nodejs/pull/569)) -- fix: use post for token revocation ([#524](https://github.com/google/google-auth-library-nodejs/pull/524)) - -### Dependencies -- fix(deps): update dependency lru-cache to v5 ([#541](https://github.com/google/google-auth-library-nodejs/pull/541)) - -### Documentation -- docs: add ref docs again ([#553](https://github.com/google/google-auth-library-nodejs/pull/553)) -- docs: clean up the readme ([#554](https://github.com/google/google-auth-library-nodejs/pull/554)) - -### Internal / Testing Changes -- chore(deps): update dependency @types/sinon to v7 ([#568](https://github.com/google/google-auth-library-nodejs/pull/568)) -- refactor: use execa for install tests, run eslint on samples ([#559](https://github.com/google/google-auth-library-nodejs/pull/559)) -- chore(build): inject yoshi automation key ([#566](https://github.com/google/google-auth-library-nodejs/pull/566)) -- chore: update nyc and eslint configs ([#565](https://github.com/google/google-auth-library-nodejs/pull/565)) -- chore: fix publish.sh permission +x ([#563](https://github.com/google/google-auth-library-nodejs/pull/563)) -- fix(build): fix Kokoro release script ([#562](https://github.com/google/google-auth-library-nodejs/pull/562)) -- build: add Kokoro configs for autorelease ([#561](https://github.com/google/google-auth-library-nodejs/pull/561)) -- chore: always nyc report before calling codecov ([#557](https://github.com/google/google-auth-library-nodejs/pull/557)) -- chore: nyc ignore build/test by default ([#556](https://github.com/google/google-auth-library-nodejs/pull/556)) -- chore(build): update the prettier and renovate config ([#552](https://github.com/google/google-auth-library-nodejs/pull/552)) -- chore: update license file ([#551](https://github.com/google/google-auth-library-nodejs/pull/551)) -- fix(build): fix system key decryption ([#547](https://github.com/google/google-auth-library-nodejs/pull/547)) -- chore(deps): update dependency typescript to ~3.2.0 ([#546](https://github.com/google/google-auth-library-nodejs/pull/546)) -- chore(deps): unpin sinon ([#544](https://github.com/google/google-auth-library-nodejs/pull/544)) -- refactor: drop non-required modules ([#542](https://github.com/google/google-auth-library-nodejs/pull/542)) -- chore: add synth.metadata ([#537](https://github.com/google/google-auth-library-nodejs/pull/537)) -- fix: Pin @types/sinon to last compatible version ([#538](https://github.com/google/google-auth-library-nodejs/pull/538)) -- chore(deps): update dependency gts to ^0.9.0 ([#531](https://github.com/google/google-auth-library-nodejs/pull/531)) -- chore: update eslintignore config ([#530](https://github.com/google/google-auth-library-nodejs/pull/530)) -- chore: drop contributors from multiple places ([#528](https://github.com/google/google-auth-library-nodejs/pull/528)) -- chore: use latest npm on Windows ([#527](https://github.com/google/google-auth-library-nodejs/pull/527)) -- chore: update CircleCI config ([#523](https://github.com/google/google-auth-library-nodejs/pull/523)) -- chore: include build in eslintignore ([#516](https://github.com/google/google-auth-library-nodejs/pull/516)) - -## v2.0.1 - -### Implementation Changes -- fix: verifyIdToken will never return null ([#488](https://github.com/google/google-auth-library-nodejs/pull/488)) -- Update the url to application default credentials ([#470](https://github.com/google/google-auth-library-nodejs/pull/470)) -- Update omitted parameter 'hd' ([#467](https://github.com/google/google-auth-library-nodejs/pull/467)) - -### Dependencies -- chore(deps): update dependency nock to v10 ([#501](https://github.com/google/google-auth-library-nodejs/pull/501)) -- chore(deps): update dependency sinon to v7 ([#502](https://github.com/google/google-auth-library-nodejs/pull/502)) -- chore(deps): update dependency typescript to v3.1.3 ([#503](https://github.com/google/google-auth-library-nodejs/pull/503)) -- chore(deps): update dependency gh-pages to v2 ([#499](https://github.com/google/google-auth-library-nodejs/pull/499)) -- chore(deps): update dependency typedoc to ^0.13.0 ([#497](https://github.com/google/google-auth-library-nodejs/pull/497)) - -### Documentation -- docs: Remove code format from Application Default Credentials ([#483](https://github.com/google/google-auth-library-nodejs/pull/483)) -- docs: replace google/ with googleapis/ in URIs ([#472](https://github.com/google/google-auth-library-nodejs/pull/472)) -- Fix typo in readme ([#469](https://github.com/google/google-auth-library-nodejs/pull/469)) -- Update samples and docs for 2.0 ([#459](https://github.com/google/google-auth-library-nodejs/pull/459)) - -### Internal / Testing Changes -- chore: update issue templates ([#509](https://github.com/google/google-auth-library-nodejs/pull/509)) -- chore: remove old issue template ([#507](https://github.com/google/google-auth-library-nodejs/pull/507)) -- build: run tests on node11 ([#506](https://github.com/google/google-auth-library-nodejs/pull/506)) -- chore(build): drop hard rejection and update gts in the kitchen test ([#504](https://github.com/google/google-auth-library-nodejs/pull/504)) -- chores(build): do not collect sponge.xml from windows builds ([#500](https://github.com/google/google-auth-library-nodejs/pull/500)) -- chores(build): run codecov on continuous builds ([#495](https://github.com/google/google-auth-library-nodejs/pull/495)) -- chore: update new issue template ([#494](https://github.com/google/google-auth-library-nodejs/pull/494)) -- build: fix codecov uploading on Kokoro ([#490](https://github.com/google/google-auth-library-nodejs/pull/490)) -- test: move kitchen sink tests to system-test ([#489](https://github.com/google/google-auth-library-nodejs/pull/489)) -- Update kokoro config ([#482](https://github.com/google/google-auth-library-nodejs/pull/482)) -- fix: export additional typescript types ([#479](https://github.com/google/google-auth-library-nodejs/pull/479)) -- Don't publish sourcemaps ([#478](https://github.com/google/google-auth-library-nodejs/pull/478)) -- test: remove appveyor config ([#477](https://github.com/google/google-auth-library-nodejs/pull/477)) -- Enable prefer-const in the eslint config ([#473](https://github.com/google/google-auth-library-nodejs/pull/473)) -- Enable no-var in eslint ([#471](https://github.com/google/google-auth-library-nodejs/pull/471)) -- Update CI config ([#468](https://github.com/google/google-auth-library-nodejs/pull/468)) -- Retry npm install in CI ([#465](https://github.com/google/google-auth-library-nodejs/pull/465)) -- Update Kokoro config ([#462](https://github.com/google/google-auth-library-nodejs/pull/462)) - -## v2.0.0 - -Well hello 2.0 🎉 **This release has multiple breaking changes**. It also has a lot of bug fixes. - -### Breaking Changes - -#### Support for node.js 4.x and 9.x has been dropped -These versions of node.js are no longer supported. - -#### The `getRequestMetadata` method has been deprecated -The `getRequestMetadata` method has been deprecated on the `IAM`, `OAuth2`, `JWT`, and `JWTAccess` classes. The `getRequestHeaders` method should be used instead. The methods have a subtle difference: the `getRequestMetadata` method returns an object with a headers property, which contains the authorization header. The `getRequestHeaders` method simply returns the headers. - -##### Old code -```js -const client = await auth.getClient(); -const res = await client.getRequestMetadata(); -const headers = res.headers; -``` - -##### New code -```js -const client = await auth.getClient(); -const headers = await client.getRequestHeaders(); -``` - -#### The `createScopedRequired` method has been deprecated -The `createScopedRequired` method has been deprecated on multiple classes. The `createScopedRequired` and `createScoped` methods on the `JWT` class were largely in place to help inform clients when scopes were required in an application default credential scenario. Instead of checking if scopes are required after creating the client, instead scopes should just be passed either into the `GoogleAuth.getClient` method, or directly into the `JWT` constructor. - -##### Old code -```js -auth.getApplicationDefault(function(err, authClient) { - if (err) { - return callback(err); - } - if (authClient.createScopedRequired && authClient.createScopedRequired()) { - authClient = authClient.createScoped([ - 'https://www.googleapis.com/auth/cloud-platform' - ]); - } - callback(null, authClient); -}); -``` - -##### New code -```js -const client = await auth.getClient({ - scopes: ['https://www.googleapis.com/auth/cloud-platform'] -}); -``` - -#### Deprecate `refreshAccessToken` - -_Note: `refreshAccessToken` is no longer deprecated._ - -`getAccessToken`, `getRequestMetadata`, and `request` methods will all refresh the token if needed automatically. - -You should not need to invoke `refreshAccessToken` directly except in [certain edge-cases](https://github.com/googleapis/google-auth-library-nodejs/issues/575). - -### Features -- Set private_key_id in JWT access token header like other google auth libraries. (#450) - -### Bug Fixes -- fix: support HTTPS proxies (#405) -- fix: export missing interfaces (#437) -- fix: Use new auth URIs (#434) -- docs: Fix broken link (#423) -- fix: surface file read streams (#413) -- fix: prevent unhandled rejections by avoid .catch (#404) -- fix: use gcp-metadata for compute credentials (#409) -- Add Code of Conduct -- fix: Warn when using user credentials from the Cloud SDK (#399) -- fix: use `Buffer.from` instead of `new Buffer` (#400) -- fix: Fix link format in README.md (#385) - -### Breaking changes -- chore: deprecate getRequestMetadata (#414) -- fix: deprecate the `createScopedRequired` methods (#410) -- fix: drop support for node.js 4.x and 9.x (#417) -- fix: deprecate the `refreshAccessToken` methods (#411) -- fix: deprecate the `getDefaultProjectId` method (#402) -- fix: drop support for node.js 4 (#401) - -### Build / Test changes -- Run synth to make build tools consistent (#455) -- Add a package.json for samples and cleanup README (#454) -- chore(deps): update dependency typedoc to ^0.12.0 (#453) -- chore: move examples => samples + synth (#448) -- chore(deps): update dependency nyc to v13 (#452) -- chore(deps): update dependency pify to v4 (#447) -- chore(deps): update dependency assert-rejects to v1 (#446) -- chore: ignore package-lock.json (#445) -- chore: update renovate config (#442) -- chore(deps): lock file maintenance (#443) -- chore: remove greenkeeper badge (#440) -- test: throw on deprecation -- chore: add intelli-espower-loader for running tests (#430) -- chore(deps): update dependency typescript to v3 (#432) -- chore(deps): lock file maintenance (#431) -- test: use strictEqual in tests (#425) -- chore(deps): lock file maintenance (#428) -- chore: Configure Renovate (#424) -- chore: Update gts to the latest version 🚀 (#422) -- chore: update gcp-metadata for isAvailable fix (#420) -- refactor: use assert.reject in the tests (#415) -- refactor: cleanup types for certificates (#412) -- test: run tests with hard-rejection (#397) -- cleanup: straighten nested try-catch (#394) -- test: getDefaultProjectId should prefer config (#388) -- chore(package): Update gts to the latest version 🚀 (#387) -- chore(package): update sinon to version 6.0.0 (#386) - -## Upgrading to 1.x -The `1.x` release includes a variety of bug fixes, new features, and breaking changes. Please take care, and see [the release notes](https://github.com/googleapis/google-auth-library-nodejs/releases/tag/v1.0.0) for a list of breaking changes, and the upgrade guide. diff --git a/reverse_engineering/node_modules/google-auth-library/LICENSE b/reverse_engineering/node_modules/google-auth-library/LICENSE deleted file mode 100644 index d645695..0000000 --- a/reverse_engineering/node_modules/google-auth-library/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/reverse_engineering/node_modules/google-auth-library/README.md b/reverse_engineering/node_modules/google-auth-library/README.md deleted file mode 100644 index 9c0c633..0000000 --- a/reverse_engineering/node_modules/google-auth-library/README.md +++ /dev/null @@ -1,813 +0,0 @@ -[//]: # "This README.md file is auto-generated, all changes to this file will be lost." -[//]: # "To regenerate it, use `python -m synthtool`." -Google Cloud Platform logo - -# [Google Auth Library: Node.js Client](https://github.com/googleapis/google-auth-library-nodejs) - -[![release level](https://img.shields.io/badge/release%20level-general%20availability%20%28GA%29-brightgreen.svg?style=flat)](https://cloud.google.com/terms/launch-stages) -[![npm version](https://img.shields.io/npm/v/google-auth-library.svg)](https://www.npmjs.org/package/google-auth-library) -[![codecov](https://img.shields.io/codecov/c/github/googleapis/google-auth-library-nodejs/master.svg?style=flat)](https://codecov.io/gh/googleapis/google-auth-library-nodejs) - - - - -This is Google's officially supported [node.js](http://nodejs.org/) client library for using OAuth 2.0 authorization and authentication with Google APIs. - - -A comprehensive list of changes in each version may be found in -[the CHANGELOG](https://github.com/googleapis/google-auth-library-nodejs/blob/master/CHANGELOG.md). - -* [Google Auth Library Node.js Client API Reference][client-docs] -* [Google Auth Library Documentation][product-docs] -* [github.com/googleapis/google-auth-library-nodejs](https://github.com/googleapis/google-auth-library-nodejs) - -Read more about the client libraries for Cloud APIs, including the older -Google APIs Client Libraries, in [Client Libraries Explained][explained]. - -[explained]: https://cloud.google.com/apis/docs/client-libraries-explained - -**Table of contents:** - - -* [Quickstart](#quickstart) - - * [Installing the client library](#installing-the-client-library) - -* [Samples](#samples) -* [Versioning](#versioning) -* [Contributing](#contributing) -* [License](#license) - -## Quickstart - -### Installing the client library - -```bash -npm install google-auth-library -``` - -## Ways to authenticate -This library provides a variety of ways to authenticate to your Google services. -- [Application Default Credentials](#choosing-the-correct-credential-type-automatically) - Use Application Default Credentials when you use a single identity for all users in your application. Especially useful for applications running on Google Cloud. Application Default Credentials also support workload identity federation to access Google Cloud resources from non-Google Cloud platforms. -- [OAuth 2](#oauth2) - Use OAuth2 when you need to perform actions on behalf of the end user. -- [JSON Web Tokens](#json-web-tokens) - Use JWT when you are using a single identity for all users. Especially useful for server->server or server->API communication. -- [Google Compute](#compute) - Directly use a service account on Google Cloud Platform. Useful for server->server or server->API communication. -- [Workload Identity Federation](#workload-identity-federation) - Use workload identity federation to access Google Cloud resources from Amazon Web Services (AWS), Microsoft Azure or any identity provider that supports OpenID Connect (OIDC). -- [Impersonated Credentials Client](#impersonated-credentials-client) - access protected resources on behalf of another service account. - -## Application Default Credentials -This library provides an implementation of [Application Default Credentials](https://cloud.google.com/docs/authentication/getting-started)for Node.js. The [Application Default Credentials](https://cloud.google.com/docs/authentication/getting-started) provide a simple way to get authorization credentials for use in calling Google APIs. - -They are best suited for cases when the call needs to have the same identity and authorization level for the application independent of the user. This is the recommended approach to authorize calls to Cloud APIs, particularly when you're building an application that uses Google Cloud Platform. - -Application Default Credentials also support workload identity federation to access Google Cloud resources from non-Google Cloud platforms including Amazon Web Services (AWS), Microsoft Azure or any identity provider that supports OpenID Connect (OIDC). Workload identity federation is recommended for non-Google Cloud environments as it avoids the need to download, manage and store service account private keys locally, see: [Workload Identity Federation](#workload-identity-federation). - -#### Download your Service Account Credentials JSON file - -To use Application Default Credentials, You first need to download a set of JSON credentials for your project. Go to **APIs & Auth** > **Credentials** in the [Google Developers Console](https://console.cloud.google.com/) and select **Service account** from the **Add credentials** dropdown. - -> This file is your *only copy* of these credentials. It should never be -> committed with your source code, and should be stored securely. - -Once downloaded, store the path to this file in the `GOOGLE_APPLICATION_CREDENTIALS` environment variable. - -#### Enable the API you want to use - -Before making your API call, you must be sure the API you're calling has been enabled. Go to **APIs & Auth** > **APIs** in the [Google Developers Console](https://console.cloud.google.com/) and enable the APIs you'd like to call. For the example below, you must enable the `DNS API`. - - -#### Choosing the correct credential type automatically - -Rather than manually creating an OAuth2 client, JWT client, or Compute client, the auth library can create the correct credential type for you, depending upon the environment your code is running under. - -For example, a JWT auth client will be created when your code is running on your local developer machine, and a Compute client will be created when the same code is running on Google Cloud Platform. If you need a specific set of scopes, you can pass those in the form of a string or an array to the `GoogleAuth` constructor. - -The code below shows how to retrieve a default credential type, depending upon the runtime environment. - -```js -const {GoogleAuth} = require('google-auth-library'); - -/** -* Instead of specifying the type of client you'd like to use (JWT, OAuth2, etc) -* this library will automatically choose the right client based on the environment. -*/ -async function main() { - const auth = new GoogleAuth({ - scopes: 'https://www.googleapis.com/auth/cloud-platform' - }); - const client = await auth.getClient(); - const projectId = await auth.getProjectId(); - const url = `https://dns.googleapis.com/dns/v1/projects/${projectId}`; - const res = await client.request({ url }); - console.log(res.data); -} - -main().catch(console.error); -``` - -## OAuth2 - -This library comes with an [OAuth2](https://developers.google.com/identity/protocols/OAuth2) client that allows you to retrieve an access token and refreshes the token and retry the request seamlessly if you also provide an `expiry_date` and the token is expired. The basics of Google's OAuth2 implementation is explained on [Google Authorization and Authentication documentation](https://developers.google.com/accounts/docs/OAuth2Login). - -In the following examples, you may need a `CLIENT_ID`, `CLIENT_SECRET` and `REDIRECT_URL`. You can find these pieces of information by going to the [Developer Console](https://console.cloud.google.com/), clicking your project > APIs & auth > credentials. - -For more information about OAuth2 and how it works, [see here](https://developers.google.com/identity/protocols/OAuth2). - -#### A complete OAuth2 example - -Let's take a look at a complete example. - -``` js -const {OAuth2Client} = require('google-auth-library'); -const http = require('http'); -const url = require('url'); -const open = require('open'); -const destroyer = require('server-destroy'); - -// Download your OAuth2 configuration from the Google -const keys = require('./oauth2.keys.json'); - -/** -* Start by acquiring a pre-authenticated oAuth2 client. -*/ -async function main() { - const oAuth2Client = await getAuthenticatedClient(); - // Make a simple request to the People API using our pre-authenticated client. The `request()` method - // takes an GaxiosOptions object. Visit https://github.com/JustinBeckwith/gaxios. - const url = 'https://people.googleapis.com/v1/people/me?personFields=names'; - const res = await oAuth2Client.request({url}); - console.log(res.data); - - // After acquiring an access_token, you may want to check on the audience, expiration, - // or original scopes requested. You can do that with the `getTokenInfo` method. - const tokenInfo = await oAuth2Client.getTokenInfo( - oAuth2Client.credentials.access_token - ); - console.log(tokenInfo); -} - -/** -* Create a new OAuth2Client, and go through the OAuth2 content -* workflow. Return the full client to the callback. -*/ -function getAuthenticatedClient() { - return new Promise((resolve, reject) => { - // create an oAuth client to authorize the API call. Secrets are kept in a `keys.json` file, - // which should be downloaded from the Google Developers Console. - const oAuth2Client = new OAuth2Client( - keys.web.client_id, - keys.web.client_secret, - keys.web.redirect_uris[0] - ); - - // Generate the url that will be used for the consent dialog. - const authorizeUrl = oAuth2Client.generateAuthUrl({ - access_type: 'offline', - scope: 'https://www.googleapis.com/auth/userinfo.profile', - }); - - // Open an http server to accept the oauth callback. In this simple example, the - // only request to our webserver is to /oauth2callback?code= - const server = http - .createServer(async (req, res) => { - try { - if (req.url.indexOf('/oauth2callback') > -1) { - // acquire the code from the querystring, and close the web server. - const qs = new url.URL(req.url, 'http://localhost:3000') - .searchParams; - const code = qs.get('code'); - console.log(`Code is ${code}`); - res.end('Authentication successful! Please return to the console.'); - server.destroy(); - - // Now that we have the code, use that to acquire tokens. - const r = await oAuth2Client.getToken(code); - // Make sure to set the credentials on the OAuth2 client. - oAuth2Client.setCredentials(r.tokens); - console.info('Tokens acquired.'); - resolve(oAuth2Client); - } - } catch (e) { - reject(e); - } - }) - .listen(3000, () => { - // open the browser to the authorize url to start the workflow - open(authorizeUrl, {wait: false}).then(cp => cp.unref()); - }); - destroyer(server); - }); -} - -main().catch(console.error); -``` - -#### Handling token events - -This library will automatically obtain an `access_token`, and automatically refresh the `access_token` if a `refresh_token` is present. The `refresh_token` is only returned on the [first authorization](https://github.com/googleapis/google-api-nodejs-client/issues/750#issuecomment-304521450), so if you want to make sure you store it safely. An easy way to make sure you always store the most recent tokens is to use the `tokens` event: - -```js -const client = await auth.getClient(); - -client.on('tokens', (tokens) => { - if (tokens.refresh_token) { - // store the refresh_token in my database! - console.log(tokens.refresh_token); - } - console.log(tokens.access_token); -}); - -const url = `https://dns.googleapis.com/dns/v1/projects/${projectId}`; -const res = await client.request({ url }); -// The `tokens` event would now be raised if this was the first request -``` - -#### Retrieve access token -With the code returned, you can ask for an access token as shown below: - -``` js -const tokens = await oauth2Client.getToken(code); -// Now tokens contains an access_token and an optional refresh_token. Save them. -oauth2Client.setCredentials(tokens); -``` - -#### Obtaining a new Refresh Token -If you need to obtain a new `refresh_token`, ensure the call to `generateAuthUrl` sets the `access_type` to `offline`. The refresh token will only be returned for the first authorization by the user. To force consent, set the `prompt` property to `consent`: - -```js -// Generate the url that will be used for the consent dialog. -const authorizeUrl = oAuth2Client.generateAuthUrl({ - // To get a refresh token, you MUST set access_type to `offline`. - access_type: 'offline', - // set the appropriate scopes - scope: 'https://www.googleapis.com/auth/userinfo.profile', - // A refresh token is only returned the first time the user - // consents to providing access. For illustration purposes, - // setting the prompt to 'consent' will force this consent - // every time, forcing a refresh_token to be returned. - prompt: 'consent' -}); -``` - -#### Checking `access_token` information -After obtaining and storing an `access_token`, at a later time you may want to go check the expiration date, -original scopes, or audience for the token. To get the token info, you can use the `getTokenInfo` method: - -```js -// after acquiring an oAuth2Client... -const tokenInfo = await oAuth2Client.getTokenInfo('my-access-token'); - -// take a look at the scopes originally provisioned for the access token -console.log(tokenInfo.scopes); -``` - -This method will throw if the token is invalid. - -#### OAuth2 with Installed Apps (Electron) -If you're authenticating with OAuth2 from an installed application (like Electron), you may not want to embed your `client_secret` inside of the application sources. To work around this restriction, you can choose the `iOS` application type when creating your OAuth2 credentials in the [Google Developers console](https://console.cloud.google.com/): - -![application type](https://user-images.githubusercontent.com/534619/36553844-3f9a863c-17b2-11e8-904a-29f6cd5f807a.png) - -If using the `iOS` type, when creating the OAuth2 client you won't need to pass a `client_secret` into the constructor: -```js -const oAuth2Client = new OAuth2Client({ - clientId: , - redirectUri: -}); -``` - -## JSON Web Tokens -The Google Developers Console provides a `.json` file that you can use to configure a JWT auth client and authenticate your requests, for example when using a service account. - -``` js -const {JWT} = require('google-auth-library'); -const keys = require('./jwt.keys.json'); - -async function main() { - const client = new JWT({ - email: keys.client_email, - key: keys.private_key, - scopes: ['https://www.googleapis.com/auth/cloud-platform'], - }); - const url = `https://dns.googleapis.com/dns/v1/projects/${keys.project_id}`; - const res = await client.request({url}); - console.log(res.data); -} - -main().catch(console.error); -``` - -The parameters for the JWT auth client including how to use it with a `.pem` file are explained in [samples/jwt.js](https://github.com/googleapis/google-auth-library-nodejs/blob/master/samples/jwt.js). - -#### Loading credentials from environment variables -Instead of loading credentials from a key file, you can also provide them using an environment variable and the `GoogleAuth.fromJSON()` method. This is particularly convenient for systems that deploy directly from source control (Heroku, App Engine, etc). - -Start by exporting your credentials: - -``` -$ export CREDS='{ - "type": "service_account", - "project_id": "your-project-id", - "private_key_id": "your-private-key-id", - "private_key": "your-private-key", - "client_email": "your-client-email", - "client_id": "your-client-id", - "auth_uri": "https://accounts.google.com/o/oauth2/auth", - "token_uri": "https://accounts.google.com/o/oauth2/token", - "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", - "client_x509_cert_url": "your-cert-url" -}' -``` -Now you can create a new client from the credentials: - -```js -const {auth} = require('google-auth-library'); - -// load the environment variable with our keys -const keysEnvVar = process.env['CREDS']; -if (!keysEnvVar) { - throw new Error('The $CREDS environment variable was not found!'); -} -const keys = JSON.parse(keysEnvVar); - -async function main() { - // load the JWT or UserRefreshClient from the keys - const client = auth.fromJSON(keys); - client.scopes = ['https://www.googleapis.com/auth/cloud-platform']; - const url = `https://dns.googleapis.com/dns/v1/projects/${keys.project_id}`; - const res = await client.request({url}); - console.log(res.data); -} - -main().catch(console.error); -``` - -#### Using a Proxy -You can set the `HTTPS_PROXY` or `https_proxy` environment variables to proxy HTTPS requests. When `HTTPS_PROXY` or `https_proxy` are set, they will be used to proxy SSL requests that do not have an explicit proxy configuration option present. - -## Compute -If your application is running on Google Cloud Platform, you can authenticate using the default service account or by specifying a specific service account. - -**Note**: In most cases, you will want to use [Application Default Credentials](#choosing-the-correct-credential-type-automatically). Direct use of the `Compute` class is for very specific scenarios. - -``` js -const {auth, Compute} = require('google-auth-library'); - -async function main() { - const client = new Compute({ - // Specifying the service account email is optional. - serviceAccountEmail: 'my-service-account@example.com' - }); - const projectId = await auth.getProjectId(); - const url = `https://dns.googleapis.com/dns/v1/projects/${projectId}`; - const res = await client.request({url}); - console.log(res.data); -} - -main().catch(console.error); -``` - -## Workload Identity Federation - -Using workload identity federation, your application can access Google Cloud resources from Amazon Web Services (AWS), Microsoft Azure or any identity provider that supports OpenID Connect (OIDC). - -Traditionally, applications running outside Google Cloud have used service account keys to access Google Cloud resources. Using identity federation, you can allow your workload to impersonate a service account. -This lets you access Google Cloud resources directly, eliminating the maintenance and security burden associated with service account keys. - -### Accessing resources from AWS - -In order to access Google Cloud resources from Amazon Web Services (AWS), the following requirements are needed: -- A workload identity pool needs to be created. -- AWS needs to be added as an identity provider in the workload identity pool (The Google [organization policy](https://cloud.google.com/iam/docs/manage-workload-identity-pools-providers#restrict) needs to allow federation from AWS). -- Permission to impersonate a service account needs to be granted to the external identity. - -Follow the detailed [instructions](https://cloud.google.com/iam/docs/access-resources-aws) on how to configure workload identity federation from AWS. - -After configuring the AWS provider to impersonate a service account, a credential configuration file needs to be generated. -Unlike service account credential files, the generated credential configuration file will only contain non-sensitive metadata to instruct the library on how to retrieve external subject tokens and exchange them for service account access tokens. -The configuration file can be generated by using the [gcloud CLI](https://cloud.google.com/sdk/). - -To generate the AWS workload identity configuration, run the following command: - -```bash -# Generate an AWS configuration file. -gcloud iam workload-identity-pools create-cred-config \ - projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$POOL_ID/providers/$AWS_PROVIDER_ID \ - --service-account $SERVICE_ACCOUNT_EMAIL \ - --aws \ - --output-file /path/to/generated/config.json -``` - -Where the following variables need to be substituted: -- `$PROJECT_NUMBER`: The Google Cloud project number. -- `$POOL_ID`: The workload identity pool ID. -- `$AWS_PROVIDER_ID`: The AWS provider ID. -- `$SERVICE_ACCOUNT_EMAIL`: The email of the service account to impersonate. - -This will generate the configuration file in the specified output file. - -You can now [start using the Auth library](#using-external-identities) to call Google Cloud resources from AWS. - -### Access resources from Microsoft Azure - -In order to access Google Cloud resources from Microsoft Azure, the following requirements are needed: -- A workload identity pool needs to be created. -- Azure needs to be added as an identity provider in the workload identity pool (The Google [organization policy](https://cloud.google.com/iam/docs/manage-workload-identity-pools-providers#restrict) needs to allow federation from Azure). -- The Azure tenant needs to be configured for identity federation. -- Permission to impersonate a service account needs to be granted to the external identity. - -Follow the detailed [instructions](https://cloud.google.com/iam/docs/access-resources-azure) on how to configure workload identity federation from Microsoft Azure. - -After configuring the Azure provider to impersonate a service account, a credential configuration file needs to be generated. -Unlike service account credential files, the generated credential configuration file will only contain non-sensitive metadata to instruct the library on how to retrieve external subject tokens and exchange them for service account access tokens. -The configuration file can be generated by using the [gcloud CLI](https://cloud.google.com/sdk/). - -To generate the Azure workload identity configuration, run the following command: - -```bash -# Generate an Azure configuration file. -gcloud iam workload-identity-pools create-cred-config \ - projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$POOL_ID/providers/$AZURE_PROVIDER_ID \ - --service-account $SERVICE_ACCOUNT_EMAIL \ - --azure \ - --output-file /path/to/generated/config.json -``` - -Where the following variables need to be substituted: -- `$PROJECT_NUMBER`: The Google Cloud project number. -- `$POOL_ID`: The workload identity pool ID. -- `$AZURE_PROVIDER_ID`: The Azure provider ID. -- `$SERVICE_ACCOUNT_EMAIL`: The email of the service account to impersonate. - -This will generate the configuration file in the specified output file. - -You can now [start using the Auth library](#using-external-identities) to call Google Cloud resources from Azure. - -### Accessing resources from an OIDC identity provider - -In order to access Google Cloud resources from an identity provider that supports [OpenID Connect (OIDC)](https://openid.net/connect/), the following requirements are needed: -- A workload identity pool needs to be created. -- An OIDC identity provider needs to be added in the workload identity pool (The Google [organization policy](https://cloud.google.com/iam/docs/manage-workload-identity-pools-providers#restrict) needs to allow federation from the identity provider). -- Permission to impersonate a service account needs to be granted to the external identity. - -Follow the detailed [instructions](https://cloud.google.com/iam/docs/access-resources-oidc) on how to configure workload identity federation from an OIDC identity provider. - -After configuring the OIDC provider to impersonate a service account, a credential configuration file needs to be generated. -Unlike service account credential files, the generated credential configuration file will only contain non-sensitive metadata to instruct the library on how to retrieve external subject tokens and exchange them for service account access tokens. -The configuration file can be generated by using the [gcloud CLI](https://cloud.google.com/sdk/). - -For OIDC providers, the Auth library can retrieve OIDC tokens either from a local file location (file-sourced credentials) or from a local server (URL-sourced credentials). - -**File-sourced credentials** -For file-sourced credentials, a background process needs to be continuously refreshing the file location with a new OIDC token prior to expiration. -For tokens with one hour lifetimes, the token needs to be updated in the file every hour. The token can be stored directly as plain text or in JSON format. - -To generate a file-sourced OIDC configuration, run the following command: - -```bash -# Generate an OIDC configuration file for file-sourced credentials. -gcloud iam workload-identity-pools create-cred-config \ - projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$POOL_ID/providers/$OIDC_PROVIDER_ID \ - --service-account $SERVICE_ACCOUNT_EMAIL \ - --credential-source-file $PATH_TO_OIDC_ID_TOKEN \ - # Optional arguments for file types. Default is "text": - # --credential-source-type "json" \ - # Optional argument for the field that contains the OIDC credential. - # This is required for json. - # --credential-source-field-name "id_token" \ - --output-file /path/to/generated/config.json -``` - -Where the following variables need to be substituted: -- `$PROJECT_NUMBER`: The Google Cloud project number. -- `$POOL_ID`: The workload identity pool ID. -- `$OIDC_PROVIDER_ID`: The OIDC provider ID. -- `$SERVICE_ACCOUNT_EMAIL`: The email of the service account to impersonate. -- `$PATH_TO_OIDC_ID_TOKEN`: The file path where the OIDC token will be retrieved from. - -This will generate the configuration file in the specified output file. - -**URL-sourced credentials** -For URL-sourced credentials, a local server needs to host a GET endpoint to return the OIDC token. The response can be in plain text or JSON. -Additional required request headers can also be specified. - -To generate a URL-sourced OIDC workload identity configuration, run the following command: - -```bash -# Generate an OIDC configuration file for URL-sourced credentials. -gcloud iam workload-identity-pools create-cred-config \ - projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$POOL_ID/providers/$OIDC_PROVIDER_ID \ - --service-account $SERVICE_ACCOUNT_EMAIL \ - --credential-source-url $URL_TO_GET_OIDC_TOKEN \ - --credential-source-headers $HEADER_KEY=$HEADER_VALUE \ - # Optional arguments for file types. Default is "text": - # --credential-source-type "json" \ - # Optional argument for the field that contains the OIDC credential. - # This is required for json. - # --credential-source-field-name "id_token" \ - --output-file /path/to/generated/config.json -``` - -Where the following variables need to be substituted: -- `$PROJECT_NUMBER`: The Google Cloud project number. -- `$POOL_ID`: The workload identity pool ID. -- `$OIDC_PROVIDER_ID`: The OIDC provider ID. -- `$SERVICE_ACCOUNT_EMAIL`: The email of the service account to impersonate. -- `$URL_TO_GET_OIDC_TOKEN`: The URL of the local server endpoint to call to retrieve the OIDC token. -- `$HEADER_KEY` and `$HEADER_VALUE`: The additional header key/value pairs to pass along the GET request to `$URL_TO_GET_OIDC_TOKEN`, e.g. `Metadata-Flavor=Google`. - -You can now [start using the Auth library](#using-external-identities) to call Google Cloud resources from an OIDC provider. - -### Using External Identities - -External identities (AWS, Azure and OIDC-based providers) can be used with `Application Default Credentials`. -In order to use external identities with Application Default Credentials, you need to generate the JSON credentials configuration file for your external identity as described above. -Once generated, store the path to this file in the `GOOGLE_APPLICATION_CREDENTIALS` environment variable. - -```bash -export GOOGLE_APPLICATION_CREDENTIALS=/path/to/config.json -``` - -The library can now automatically choose the right type of client and initialize credentials from the context provided in the configuration file. - -```js -async function main() { - const auth = new GoogleAuth({ - scopes: 'https://www.googleapis.com/auth/cloud-platform' - }); - const client = await auth.getClient(); - const projectId = await auth.getProjectId(); - // List all buckets in a project. - const url = `https://storage.googleapis.com/storage/v1/b?project=${projectId}`; - const res = await client.request({ url }); - console.log(res.data); -} -``` - -When using external identities with Application Default Credentials in Node.js, the `roles/browser` role needs to be granted to the service account. -The `Cloud Resource Manager API` should also be enabled on the project. -This is needed since the library will try to auto-discover the project ID from the current environment using the impersonated credential. -To avoid this requirement, the project ID can be explicitly specified on initialization. - -```js -const auth = new GoogleAuth({ - scopes: 'https://www.googleapis.com/auth/cloud-platform', - // Pass the project ID explicitly to avoid the need to grant `roles/browser` to the service account - // or enable Cloud Resource Manager API on the project. - projectId: 'CLOUD_RESOURCE_PROJECT_ID', -}); -``` - -You can also explicitly initialize external account clients using the generated configuration file. - -```js -const {ExternalAccountClient} = require('google-auth-library'); -const jsonConfig = require('/path/to/config.json'); - -async function main() { - const client = ExternalAccountClient.fromJSON(jsonConfig); - client.scopes = ['https://www.googleapis.com/auth/cloud-platform']; - // List all buckets in a project. - const url = `https://storage.googleapis.com/storage/v1/b?project=${projectId}`; - const res = await client.request({url}); - console.log(res.data); -} -``` - -## Working with ID Tokens -### Fetching ID Tokens -If your application is running on Cloud Run or Cloud Functions, or using Cloud Identity-Aware -Proxy (IAP), you will need to fetch an ID token to access your application. For -this, use the method `getIdTokenClient` on the `GoogleAuth` client. - -For invoking Cloud Run services, your service account will need the -[`Cloud Run Invoker`](https://cloud.google.com/run/docs/authenticating/service-to-service) -IAM permission. - -For invoking Cloud Functions, your service account will need the -[`Function Invoker`](https://cloud.google.com/functions/docs/securing/authenticating#function-to-function) -IAM permission. - -``` js -// Make a request to a protected Cloud Run service. -const {GoogleAuth} = require('google-auth-library'); - -async function main() { - const url = 'https://cloud-run-1234-uc.a.run.app'; - const auth = new GoogleAuth(); - const client = await auth.getIdTokenClient(url); - const res = await client.request({url}); - console.log(res.data); -} - -main().catch(console.error); -``` - -A complete example can be found in [`samples/idtokens-serverless.js`](https://github.com/googleapis/google-auth-library-nodejs/blob/master/samples/idtokens-serverless.js). - -For invoking Cloud Identity-Aware Proxy, you will need to pass the Client ID -used when you set up your protected resource as the target audience. - -``` js -// Make a request to a protected Cloud Identity-Aware Proxy (IAP) resource -const {GoogleAuth} = require('google-auth-library'); - -async function main() - const targetAudience = 'iap-client-id'; - const url = 'https://iap-url.com'; - const auth = new GoogleAuth(); - const client = await auth.getIdTokenClient(targetAudience); - const res = await client.request({url}); - console.log(res.data); -} - -main().catch(console.error); -``` - -A complete example can be found in [`samples/idtokens-iap.js`](https://github.com/googleapis/google-auth-library-nodejs/blob/master/samples/idtokens-iap.js). - -### Verifying ID Tokens - -If you've [secured your IAP app with signed headers](https://cloud.google.com/iap/docs/signed-headers-howto), -you can use this library to verify the IAP header: - -```js -const {OAuth2Client} = require('google-auth-library'); -// Expected audience for App Engine. -const expectedAudience = `/projects/your-project-number/apps/your-project-id`; -// IAP issuer -const issuers = ['https://cloud.google.com/iap']; -// Verify the token. OAuth2Client throws an Error if verification fails -const oAuth2Client = new OAuth2Client(); -const response = await oAuth2Client.getIapCerts(); -const ticket = await oAuth2Client.verifySignedJwtWithCertsAsync( - idToken, - response.pubkeys, - expectedAudience, - issuers -); - -// Print out the info contained in the IAP ID token -console.log(ticket) -``` - -A complete example can be found in [`samples/verifyIdToken-iap.js`](https://github.com/googleapis/google-auth-library-nodejs/blob/master/samples/verifyIdToken-iap.js). - -## Impersonated Credentials Client - -Google Cloud Impersonated credentials used for [Creating short-lived service account credentials](https://cloud.google.com/iam/docs/creating-short-lived-service-account-credentials). - -Provides authentication for applications where local credentials impersonates a remote service account using [IAM Credentials API](https://cloud.google.com/iam/docs/reference/credentials/rest). - -An Impersonated Credentials Client is instantiated with a `sourceClient`. This -client should use credentials that have the "Service Account Token Creator" role (`roles/iam.serviceAccountTokenCreator`), -and should authenticate with the `https://www.googleapis.com/auth/cloud-platform`, or `https://www.googleapis.com/auth/iam` scopes. - -`sourceClient` is used by the Impersonated -Credentials Client to impersonate a target service account with a specified -set of scopes. - -### Sample Usage - -```javascript -const { GoogleAuth, Impersonated } = require('google-auth-library'); -const { SecretManagerServiceClient } = require('@google-cloud/secret-manager'); - -async function main() { - - // Acquire source credentials: - const auth = new GoogleAuth(); - const client = await auth.getClient(); - - // Impersonate new credentials: - let targetClient = new Impersonated({ - sourceClient: client, - targetPrincipal: 'impersonated-account@projectID.iam.gserviceaccount.com', - lifetime: 30, - delegates: [], - targetScopes: ['https://www.googleapis.com/auth/cloud-platform'] - }); - - // Get impersonated credentials: - const authHeaders = await targetClient.getRequestHeaders(); - // Do something with `authHeaders.Authorization`. - - // Use impersonated credentials: - const url = 'https://www.googleapis.com/storage/v1/b?project=anotherProjectID' - const resp = await targetClient.request({ url }); - for (const bucket of resp.data.items) { - console.log(bucket.name); - } - - // Use impersonated credentials with google-cloud client library - // Note: this works only with certain cloud client libraries utilizing gRPC - // e.g., SecretManager, KMS, AIPlatform - // will not currently work with libraries using REST, e.g., Storage, Compute - const smClient = new SecretManagerServiceClient({ - projectId: anotherProjectID, - auth: { - getClient: () => targetClient, - }, - }); - const secretName = 'projects/anotherProjectNumber/secrets/someProjectName/versions/1'; - const [accessResponse] = await smClient.accessSecretVersion({ - name: secretName, - }); - - const responsePayload = accessResponse.payload.data.toString('utf8'); - // Do something with the secret contained in `responsePayload`. -}; - -main(); -``` - - -## Samples - -Samples are in the [`samples/`](https://github.com/googleapis/google-auth-library-nodejs/tree/master/samples) directory. Each sample's `README.md` has instructions for running its sample. - -| Sample | Source Code | Try it | -| --------------------------- | --------------------------------- | ------ | -| Adc | [source code](https://github.com/googleapis/google-auth-library-nodejs/blob/master/samples/adc.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-auth-library-nodejs&page=editor&open_in_editor=samples/adc.js,samples/README.md) | -| Compute | [source code](https://github.com/googleapis/google-auth-library-nodejs/blob/master/samples/compute.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-auth-library-nodejs&page=editor&open_in_editor=samples/compute.js,samples/README.md) | -| Credentials | [source code](https://github.com/googleapis/google-auth-library-nodejs/blob/master/samples/credentials.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-auth-library-nodejs&page=editor&open_in_editor=samples/credentials.js,samples/README.md) | -| Headers | [source code](https://github.com/googleapis/google-auth-library-nodejs/blob/master/samples/headers.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-auth-library-nodejs&page=editor&open_in_editor=samples/headers.js,samples/README.md) | -| ID Tokens for Identity-Aware Proxy (IAP) | [source code](https://github.com/googleapis/google-auth-library-nodejs/blob/master/samples/idtokens-iap.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-auth-library-nodejs&page=editor&open_in_editor=samples/idtokens-iap.js,samples/README.md) | -| ID Tokens for Serverless | [source code](https://github.com/googleapis/google-auth-library-nodejs/blob/master/samples/idtokens-serverless.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-auth-library-nodejs&page=editor&open_in_editor=samples/idtokens-serverless.js,samples/README.md) | -| Jwt | [source code](https://github.com/googleapis/google-auth-library-nodejs/blob/master/samples/jwt.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-auth-library-nodejs&page=editor&open_in_editor=samples/jwt.js,samples/README.md) | -| Keepalive | [source code](https://github.com/googleapis/google-auth-library-nodejs/blob/master/samples/keepalive.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-auth-library-nodejs&page=editor&open_in_editor=samples/keepalive.js,samples/README.md) | -| Keyfile | [source code](https://github.com/googleapis/google-auth-library-nodejs/blob/master/samples/keyfile.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-auth-library-nodejs&page=editor&open_in_editor=samples/keyfile.js,samples/README.md) | -| Oauth2-code Verifier | [source code](https://github.com/googleapis/google-auth-library-nodejs/blob/master/samples/oauth2-codeVerifier.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-auth-library-nodejs&page=editor&open_in_editor=samples/oauth2-codeVerifier.js,samples/README.md) | -| Oauth2 | [source code](https://github.com/googleapis/google-auth-library-nodejs/blob/master/samples/oauth2.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-auth-library-nodejs&page=editor&open_in_editor=samples/oauth2.js,samples/README.md) | -| Sign Blob | [source code](https://github.com/googleapis/google-auth-library-nodejs/blob/master/samples/signBlob.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-auth-library-nodejs&page=editor&open_in_editor=samples/signBlob.js,samples/README.md) | -| Verifying ID Tokens from Identity-Aware Proxy (IAP) | [source code](https://github.com/googleapis/google-auth-library-nodejs/blob/master/samples/verifyIdToken-iap.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-auth-library-nodejs&page=editor&open_in_editor=samples/verifyIdToken-iap.js,samples/README.md) | -| Verify Id Token | [source code](https://github.com/googleapis/google-auth-library-nodejs/blob/master/samples/verifyIdToken.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-auth-library-nodejs&page=editor&open_in_editor=samples/verifyIdToken.js,samples/README.md) | - - - -The [Google Auth Library Node.js Client API Reference][client-docs] documentation -also contains samples. - -## Supported Node.js Versions - -Our client libraries follow the [Node.js release schedule](https://nodejs.org/en/about/releases/). -Libraries are compatible with all current _active_ and _maintenance_ versions of -Node.js. - -Client libraries targeting some end-of-life versions of Node.js are available, and -can be installed via npm [dist-tags](https://docs.npmjs.com/cli/dist-tag). -The dist-tags follow the naming convention `legacy-(version)`. - -_Legacy Node.js versions are supported as a best effort:_ - -* Legacy versions will not be tested in continuous integration. -* Some security patches may not be able to be backported. -* Dependencies will not be kept up-to-date, and features will not be backported. - -#### Legacy tags available - -* `legacy-8`: install client libraries from this dist-tag for versions - compatible with Node.js 8. - -## Versioning - -This library follows [Semantic Versioning](http://semver.org/). - - -This library is considered to be **General Availability (GA)**. This means it -is stable; the code surface will not change in backwards-incompatible ways -unless absolutely necessary (e.g. because of critical security issues) or with -an extensive deprecation period. Issues and requests against **GA** libraries -are addressed with the highest priority. - - - - - -More Information: [Google Cloud Platform Launch Stages][launch_stages] - -[launch_stages]: https://cloud.google.com/terms/launch-stages - -## Contributing - -Contributions welcome! See the [Contributing Guide](https://github.com/googleapis/google-auth-library-nodejs/blob/master/CONTRIBUTING.md). - -Please note that this `README.md`, the `samples/README.md`, -and a variety of configuration files in this repository (including `.nycrc` and `tsconfig.json`) -are generated from a central template. To edit one of these files, make an edit -to its template in this -[directory](https://github.com/googleapis/synthtool/tree/master/synthtool/gcp/templates/node_library). - -## License - -Apache Version 2.0 - -See [LICENSE](https://github.com/googleapis/google-auth-library-nodejs/blob/master/LICENSE) - -[client-docs]: https://cloud.google.com/nodejs/docs/reference/google-auth-library/latest -[product-docs]: https://cloud.google.com/docs/authentication/ -[shell_img]: https://gstatic.com/cloudssh/images/open-btn.png -[projects]: https://console.cloud.google.com/project -[billing]: https://support.google.com/cloud/answer/6293499#enable-billing - -[auth]: https://cloud.google.com/docs/authentication/getting-started diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/authclient.d.ts b/reverse_engineering/node_modules/google-auth-library/build/src/auth/authclient.d.ts deleted file mode 100644 index d4daba3..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/authclient.d.ts +++ /dev/null @@ -1,105 +0,0 @@ -/// -import { EventEmitter } from 'events'; -import { GaxiosOptions, GaxiosPromise, GaxiosResponse } from 'gaxios'; -import { DefaultTransporter } from '../transporters'; -import { Credentials } from './credentials'; -import { Headers } from './oauth2client'; -/** - * Defines the root interface for all clients that generate credentials - * for calling Google APIs. All clients should implement this interface. - */ -export interface CredentialsClient { - /** - * The project ID corresponding to the current credentials if available. - */ - projectId?: string | null; - /** - * The expiration threshold in milliseconds before forcing token refresh. - */ - eagerRefreshThresholdMillis: number; - /** - * Whether to force refresh on failure when making an authorization request. - */ - forceRefreshOnFailure: boolean; - /** - * @return A promise that resolves with the current GCP access token - * response. If the current credential is expired, a new one is retrieved. - */ - getAccessToken(): Promise<{ - token?: string | null; - res?: GaxiosResponse | null; - }>; - /** - * The main authentication interface. It takes an optional url which when - * present is the endpoint being accessed, and returns a Promise which - * resolves with authorization header fields. - * - * The result has the form: - * { Authorization: 'Bearer ' } - * @param url The URI being authorized. - */ - getRequestHeaders(url?: string): Promise; - /** - * Provides an alternative Gaxios request implementation with auth credentials - */ - request(opts: GaxiosOptions): GaxiosPromise; - /** - * Sets the auth credentials. - */ - setCredentials(credentials: Credentials): void; - /** - * Subscribes a listener to the tokens event triggered when a token is - * generated. - * - * @param event The tokens event to subscribe to. - * @param listener The listener that triggers on event trigger. - * @return The current client instance. - */ - on(event: 'tokens', listener: (tokens: Credentials) => void): this; -} -export declare interface AuthClient { - on(event: 'tokens', listener: (tokens: Credentials) => void): this; -} -export declare abstract class AuthClient extends EventEmitter implements CredentialsClient { - protected quotaProjectId?: string; - transporter: DefaultTransporter; - credentials: Credentials; - projectId?: string | null; - eagerRefreshThresholdMillis: number; - forceRefreshOnFailure: boolean; - /** - * Provides an alternative Gaxios request implementation with auth credentials - */ - abstract request(opts: GaxiosOptions): GaxiosPromise; - /** - * The main authentication interface. It takes an optional url which when - * present is the endpoint being accessed, and returns a Promise which - * resolves with authorization header fields. - * - * The result has the form: - * { Authorization: 'Bearer ' } - * @param url The URI being authorized. - */ - abstract getRequestHeaders(url?: string): Promise; - /** - * @return A promise that resolves with the current GCP access token - * response. If the current credential is expired, a new one is retrieved. - */ - abstract getAccessToken(): Promise<{ - token?: string | null; - res?: GaxiosResponse | null; - }>; - /** - * Sets the auth credentials. - */ - setCredentials(credentials: Credentials): void; - /** - * Append additional headers, e.g., x-goog-user-project, shared across the - * classes inheriting AuthClient. This method should be used by any method - * that overrides getRequestMetadataAsync(), which is a shared helper for - * setting request information in both gRPC and HTTP API calls. - * - * @param headers objedcdt to append additional headers to. - */ - protected addSharedMetadataHeaders(headers: Headers): Headers; -} diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/authclient.js b/reverse_engineering/node_modules/google-auth-library/build/src/auth/authclient.js deleted file mode 100644 index 3f59e0e..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/authclient.js +++ /dev/null @@ -1,53 +0,0 @@ -"use strict"; -// Copyright 2012 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AuthClient = void 0; -const events_1 = require("events"); -const transporters_1 = require("../transporters"); -class AuthClient extends events_1.EventEmitter { - constructor() { - super(...arguments); - this.transporter = new transporters_1.DefaultTransporter(); - this.credentials = {}; - this.eagerRefreshThresholdMillis = 5 * 60 * 1000; - this.forceRefreshOnFailure = false; - } - /** - * Sets the auth credentials. - */ - setCredentials(credentials) { - this.credentials = credentials; - } - /** - * Append additional headers, e.g., x-goog-user-project, shared across the - * classes inheriting AuthClient. This method should be used by any method - * that overrides getRequestMetadataAsync(), which is a shared helper for - * setting request information in both gRPC and HTTP API calls. - * - * @param headers objedcdt to append additional headers to. - */ - addSharedMetadataHeaders(headers) { - // quota_project_id, stored in application_default_credentials.json, is set in - // the x-goog-user-project header, to indicate an alternate account for - // billing and quota: - if (!headers['x-goog-user-project'] && // don't override a value the user sets. - this.quotaProjectId) { - headers['x-goog-user-project'] = this.quotaProjectId; - } - return headers; - } -} -exports.AuthClient = AuthClient; -//# sourceMappingURL=authclient.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/awsclient.d.ts b/reverse_engineering/node_modules/google-auth-library/build/src/auth/awsclient.d.ts deleted file mode 100644 index 56a22f3..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/awsclient.d.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { BaseExternalAccountClient, BaseExternalAccountClientOptions } from './baseexternalclient'; -import { RefreshOptions } from './oauth2client'; -/** - * AWS credentials JSON interface. This is used for AWS workloads. - */ -export interface AwsClientOptions extends BaseExternalAccountClientOptions { - credential_source: { - environment_id: string; - region_url?: string; - url?: string; - regional_cred_verification_url: string; - }; -} -/** - * AWS external account client. This is used for AWS workloads, where - * AWS STS GetCallerIdentity serialized signed requests are exchanged for - * GCP access token. - */ -export declare class AwsClient extends BaseExternalAccountClient { - private readonly environmentId; - private readonly regionUrl?; - private readonly securityCredentialsUrl?; - private readonly regionalCredVerificationUrl; - private awsRequestSigner; - private region; - /** - * Instantiates an AwsClient instance using the provided JSON - * object loaded from an external account credentials file. - * An error is thrown if the credential is not a valid AWS credential. - * @param options The external account options object typically loaded - * from the external account JSON credential file. - * @param additionalOptions Optional additional behavior customization - * options. These currently customize expiration threshold time and - * whether to retry on 401/403 API request errors. - */ - constructor(options: AwsClientOptions, additionalOptions?: RefreshOptions); - /** - * Triggered when an external subject token is needed to be exchanged for a - * GCP access token via GCP STS endpoint. - * This uses the `options.credential_source` object to figure out how - * to retrieve the token using the current environment. In this case, - * this uses a serialized AWS signed request to the STS GetCallerIdentity - * endpoint. - * The logic is summarized as: - * 1. Retrieve AWS region from availability-zone. - * 2a. Check AWS credentials in environment variables. If not found, get - * from security-credentials endpoint. - * 2b. Get AWS credentials from security-credentials endpoint. In order - * to retrieve this, the AWS role needs to be determined by calling - * security-credentials endpoint without any argument. Then the - * credentials can be retrieved via: security-credentials/role_name - * 3. Generate the signed request to AWS STS GetCallerIdentity action. - * 4. Inject x-goog-cloud-target-resource into header and serialize the - * signed request. This will be the subject-token to pass to GCP STS. - * @return A promise that resolves with the external subject token. - */ - retrieveSubjectToken(): Promise; - /** - * @return A promise that resolves with the current AWS region. - */ - private getAwsRegion; - /** - * @return A promise that resolves with the assigned role to the current - * AWS VM. This is needed for calling the security-credentials endpoint. - */ - private getAwsRoleName; - /** - * Retrieves the temporary AWS credentials by calling the security-credentials - * endpoint as specified in the `credential_source` object. - * @param roleName The role attached to the current VM. - * @return A promise that resolves with the temporary AWS credentials - * needed for creating the GetCallerIdentity signed request. - */ - private getAwsSecurityCredentials; -} diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/awsclient.js b/reverse_engineering/node_modules/google-auth-library/build/src/auth/awsclient.js deleted file mode 100644 index 6a48031..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/awsclient.js +++ /dev/null @@ -1,203 +0,0 @@ -"use strict"; -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AwsClient = void 0; -const awsrequestsigner_1 = require("./awsrequestsigner"); -const baseexternalclient_1 = require("./baseexternalclient"); -/** - * AWS external account client. This is used for AWS workloads, where - * AWS STS GetCallerIdentity serialized signed requests are exchanged for - * GCP access token. - */ -class AwsClient extends baseexternalclient_1.BaseExternalAccountClient { - /** - * Instantiates an AwsClient instance using the provided JSON - * object loaded from an external account credentials file. - * An error is thrown if the credential is not a valid AWS credential. - * @param options The external account options object typically loaded - * from the external account JSON credential file. - * @param additionalOptions Optional additional behavior customization - * options. These currently customize expiration threshold time and - * whether to retry on 401/403 API request errors. - */ - constructor(options, additionalOptions) { - var _a; - super(options, additionalOptions); - this.environmentId = options.credential_source.environment_id; - // This is only required if the AWS region is not available in the - // AWS_REGION or AWS_DEFAULT_REGION environment variables. - this.regionUrl = options.credential_source.region_url; - // This is only required if AWS security credentials are not available in - // environment variables. - this.securityCredentialsUrl = options.credential_source.url; - this.regionalCredVerificationUrl = - options.credential_source.regional_cred_verification_url; - const match = (_a = this.environmentId) === null || _a === void 0 ? void 0 : _a.match(/^(aws)(\d+)$/); - if (!match || !this.regionalCredVerificationUrl) { - throw new Error('No valid AWS "credential_source" provided'); - } - else if (parseInt(match[2], 10) !== 1) { - throw new Error(`aws version "${match[2]}" is not supported in the current build.`); - } - this.awsRequestSigner = null; - this.region = ''; - } - /** - * Triggered when an external subject token is needed to be exchanged for a - * GCP access token via GCP STS endpoint. - * This uses the `options.credential_source` object to figure out how - * to retrieve the token using the current environment. In this case, - * this uses a serialized AWS signed request to the STS GetCallerIdentity - * endpoint. - * The logic is summarized as: - * 1. Retrieve AWS region from availability-zone. - * 2a. Check AWS credentials in environment variables. If not found, get - * from security-credentials endpoint. - * 2b. Get AWS credentials from security-credentials endpoint. In order - * to retrieve this, the AWS role needs to be determined by calling - * security-credentials endpoint without any argument. Then the - * credentials can be retrieved via: security-credentials/role_name - * 3. Generate the signed request to AWS STS GetCallerIdentity action. - * 4. Inject x-goog-cloud-target-resource into header and serialize the - * signed request. This will be the subject-token to pass to GCP STS. - * @return A promise that resolves with the external subject token. - */ - async retrieveSubjectToken() { - // Initialize AWS request signer if not already initialized. - if (!this.awsRequestSigner) { - this.region = await this.getAwsRegion(); - this.awsRequestSigner = new awsrequestsigner_1.AwsRequestSigner(async () => { - // Check environment variables for permanent credentials first. - // https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html - if (process.env['AWS_ACCESS_KEY_ID'] && - process.env['AWS_SECRET_ACCESS_KEY']) { - return { - accessKeyId: process.env['AWS_ACCESS_KEY_ID'], - secretAccessKey: process.env['AWS_SECRET_ACCESS_KEY'], - // This is normally not available for permanent credentials. - token: process.env['AWS_SESSION_TOKEN'], - }; - } - // Since the role on a VM can change, we don't need to cache it. - const roleName = await this.getAwsRoleName(); - // Temporary credentials typically last for several hours. - // Expiration is returned in response. - // Consider future optimization of this logic to cache AWS tokens - // until their natural expiration. - const awsCreds = await this.getAwsSecurityCredentials(roleName); - return { - accessKeyId: awsCreds.AccessKeyId, - secretAccessKey: awsCreds.SecretAccessKey, - token: awsCreds.Token, - }; - }, this.region); - } - // Generate signed request to AWS STS GetCallerIdentity API. - // Use the required regional endpoint. Otherwise, the request will fail. - const options = await this.awsRequestSigner.getRequestOptions({ - url: this.regionalCredVerificationUrl.replace('{region}', this.region), - method: 'POST', - }); - // The GCP STS endpoint expects the headers to be formatted as: - // [ - // {key: 'x-amz-date', value: '...'}, - // {key: 'Authorization', value: '...'}, - // ... - // ] - // And then serialized as: - // encodeURIComponent(JSON.stringify({ - // url: '...', - // method: 'POST', - // headers: [{key: 'x-amz-date', value: '...'}, ...] - // })) - const reformattedHeader = []; - const extendedHeaders = Object.assign({ - // The full, canonical resource name of the workload identity pool - // provider, with or without the HTTPS prefix. - // Including this header as part of the signature is recommended to - // ensure data integrity. - 'x-goog-cloud-target-resource': this.audience, - }, options.headers); - // Reformat header to GCP STS expected format. - for (const key in extendedHeaders) { - reformattedHeader.push({ - key, - value: extendedHeaders[key], - }); - } - // Serialize the reformatted signed request. - return encodeURIComponent(JSON.stringify({ - url: options.url, - method: options.method, - headers: reformattedHeader, - })); - } - /** - * @return A promise that resolves with the current AWS region. - */ - async getAwsRegion() { - // Priority order for region determination: - // AWS_REGION > AWS_DEFAULT_REGION > metadata server. - if (process.env['AWS_REGION'] || process.env['AWS_DEFAULT_REGION']) { - return (process.env['AWS_REGION'] || process.env['AWS_DEFAULT_REGION']); - } - if (!this.regionUrl) { - throw new Error('Unable to determine AWS region due to missing ' + - '"options.credential_source.region_url"'); - } - const opts = { - url: this.regionUrl, - method: 'GET', - responseType: 'text', - }; - const response = await this.transporter.request(opts); - // Remove last character. For example, if us-east-2b is returned, - // the region would be us-east-2. - return response.data.substr(0, response.data.length - 1); - } - /** - * @return A promise that resolves with the assigned role to the current - * AWS VM. This is needed for calling the security-credentials endpoint. - */ - async getAwsRoleName() { - if (!this.securityCredentialsUrl) { - throw new Error('Unable to determine AWS role name due to missing ' + - '"options.credential_source.url"'); - } - const opts = { - url: this.securityCredentialsUrl, - method: 'GET', - responseType: 'text', - }; - const response = await this.transporter.request(opts); - return response.data; - } - /** - * Retrieves the temporary AWS credentials by calling the security-credentials - * endpoint as specified in the `credential_source` object. - * @param roleName The role attached to the current VM. - * @return A promise that resolves with the temporary AWS credentials - * needed for creating the GetCallerIdentity signed request. - */ - async getAwsSecurityCredentials(roleName) { - const response = await this.transporter.request({ - url: `${this.securityCredentialsUrl}/${roleName}`, - responseType: 'json', - }); - return response.data; - } -} -exports.AwsClient = AwsClient; -//# sourceMappingURL=awsclient.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/awsrequestsigner.d.ts b/reverse_engineering/node_modules/google-auth-library/build/src/auth/awsrequestsigner.d.ts deleted file mode 100644 index 5507455..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/awsrequestsigner.d.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { GaxiosOptions } from 'gaxios'; -/** - * Interface defining AWS security credentials. - * These are either determined from AWS security_credentials endpoint or - * AWS environment variables. - */ -interface AwsSecurityCredentials { - accessKeyId: string; - secretAccessKey: string; - token?: string; -} -/** - * Implements an AWS API request signer based on the AWS Signature Version 4 - * signing process. - * https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html - */ -export declare class AwsRequestSigner { - private readonly getCredentials; - private readonly region; - private readonly crypto; - /** - * Instantiates an AWS API request signer used to send authenticated signed - * requests to AWS APIs based on the AWS Signature Version 4 signing process. - * This also provides a mechanism to generate the signed request without - * sending it. - * @param getCredentials A mechanism to retrieve AWS security credentials - * when needed. - * @param region The AWS region to use. - */ - constructor(getCredentials: () => Promise, region: string); - /** - * Generates the signed request for the provided HTTP request for calling - * an AWS API. This follows the steps described at: - * https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html - * @param amzOptions The AWS request options that need to be signed. - * @return A promise that resolves with the GaxiosOptions containing the - * signed HTTP request parameters. - */ - getRequestOptions(amzOptions: GaxiosOptions): Promise; -} -export {}; diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/awsrequestsigner.js b/reverse_engineering/node_modules/google-auth-library/build/src/auth/awsrequestsigner.js deleted file mode 100644 index 0101dca..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/awsrequestsigner.js +++ /dev/null @@ -1,210 +0,0 @@ -"use strict"; -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AwsRequestSigner = void 0; -const crypto_1 = require("../crypto/crypto"); -/** AWS Signature Version 4 signing algorithm identifier. */ -const AWS_ALGORITHM = 'AWS4-HMAC-SHA256'; -/** - * The termination string for the AWS credential scope value as defined in - * https://docs.aws.amazon.com/general/latest/gr/sigv4-create-string-to-sign.html - */ -const AWS_REQUEST_TYPE = 'aws4_request'; -/** - * Implements an AWS API request signer based on the AWS Signature Version 4 - * signing process. - * https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html - */ -class AwsRequestSigner { - /** - * Instantiates an AWS API request signer used to send authenticated signed - * requests to AWS APIs based on the AWS Signature Version 4 signing process. - * This also provides a mechanism to generate the signed request without - * sending it. - * @param getCredentials A mechanism to retrieve AWS security credentials - * when needed. - * @param region The AWS region to use. - */ - constructor(getCredentials, region) { - this.getCredentials = getCredentials; - this.region = region; - this.crypto = crypto_1.createCrypto(); - } - /** - * Generates the signed request for the provided HTTP request for calling - * an AWS API. This follows the steps described at: - * https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html - * @param amzOptions The AWS request options that need to be signed. - * @return A promise that resolves with the GaxiosOptions containing the - * signed HTTP request parameters. - */ - async getRequestOptions(amzOptions) { - if (!amzOptions.url) { - throw new Error('"url" is required in "amzOptions"'); - } - // Stringify JSON requests. This will be set in the request body of the - // generated signed request. - const requestPayloadData = typeof amzOptions.data === 'object' - ? JSON.stringify(amzOptions.data) - : amzOptions.data; - const url = amzOptions.url; - const method = amzOptions.method || 'GET'; - const requestPayload = amzOptions.body || requestPayloadData; - const additionalAmzHeaders = amzOptions.headers; - const awsSecurityCredentials = await this.getCredentials(); - const uri = new URL(url); - const headerMap = await generateAuthenticationHeaderMap({ - crypto: this.crypto, - host: uri.host, - canonicalUri: uri.pathname, - canonicalQuerystring: uri.search.substr(1), - method, - region: this.region, - securityCredentials: awsSecurityCredentials, - requestPayload, - additionalAmzHeaders, - }); - // Append additional optional headers, eg. X-Amz-Target, Content-Type, etc. - const headers = Object.assign( - // Add x-amz-date if available. - headerMap.amzDate ? { 'x-amz-date': headerMap.amzDate } : {}, { - Authorization: headerMap.authorizationHeader, - host: uri.host, - }, additionalAmzHeaders || {}); - if (awsSecurityCredentials.token) { - Object.assign(headers, { - 'x-amz-security-token': awsSecurityCredentials.token, - }); - } - const awsSignedReq = { - url, - method: method, - headers, - }; - if (typeof requestPayload !== 'undefined') { - awsSignedReq.body = requestPayload; - } - return awsSignedReq; - } -} -exports.AwsRequestSigner = AwsRequestSigner; -/** - * Creates the HMAC-SHA256 hash of the provided message using the - * provided key. - * - * @param crypto The crypto instance used to facilitate cryptographic - * operations. - * @param key The HMAC-SHA256 key to use. - * @param msg The message to hash. - * @return The computed hash bytes. - */ -async function sign(crypto, key, msg) { - return await crypto.signWithHmacSha256(key, msg); -} -/** - * Calculates the signing key used to calculate the signature for - * AWS Signature Version 4 based on: - * https://docs.aws.amazon.com/general/latest/gr/sigv4-calculate-signature.html - * - * @param crypto The crypto instance used to facilitate cryptographic - * operations. - * @param key The AWS secret access key. - * @param dateStamp The '%Y%m%d' date format. - * @param region The AWS region. - * @param serviceName The AWS service name, eg. sts. - * @return The signing key bytes. - */ -async function getSigningKey(crypto, key, dateStamp, region, serviceName) { - const kDate = await sign(crypto, `AWS4${key}`, dateStamp); - const kRegion = await sign(crypto, kDate, region); - const kService = await sign(crypto, kRegion, serviceName); - const kSigning = await sign(crypto, kService, 'aws4_request'); - return kSigning; -} -/** - * Generates the authentication header map needed for generating the AWS - * Signature Version 4 signed request. - * - * @param option The options needed to compute the authentication header map. - * @return The AWS authentication header map which constitutes of the following - * components: amz-date, authorization header and canonical query string. - */ -async function generateAuthenticationHeaderMap(options) { - const additionalAmzHeaders = options.additionalAmzHeaders || {}; - const requestPayload = options.requestPayload || ''; - // iam.amazonaws.com host => iam service. - // sts.us-east-2.amazonaws.com => sts service. - const serviceName = options.host.split('.')[0]; - const now = new Date(); - // Format: '%Y%m%dT%H%M%SZ'. - const amzDate = now - .toISOString() - .replace(/[-:]/g, '') - .replace(/\.[0-9]+/, ''); - // Format: '%Y%m%d'. - const dateStamp = now.toISOString().replace(/[-]/g, '').replace(/T.*/, ''); - // Change all additional headers to be lower case. - const reformattedAdditionalAmzHeaders = {}; - Object.keys(additionalAmzHeaders).forEach(key => { - reformattedAdditionalAmzHeaders[key.toLowerCase()] = - additionalAmzHeaders[key]; - }); - // Add AWS token if available. - if (options.securityCredentials.token) { - reformattedAdditionalAmzHeaders['x-amz-security-token'] = - options.securityCredentials.token; - } - // Header keys need to be sorted alphabetically. - const amzHeaders = Object.assign({ - host: options.host, - }, - // Previously the date was not fixed with x-amz- and could be provided manually. - // https://github.com/boto/botocore/blob/879f8440a4e9ace5d3cf145ce8b3d5e5ffb892ef/tests/unit/auth/aws4_testsuite/get-header-value-trim.req - reformattedAdditionalAmzHeaders.date ? {} : { 'x-amz-date': amzDate }, reformattedAdditionalAmzHeaders); - let canonicalHeaders = ''; - const signedHeadersList = Object.keys(amzHeaders).sort(); - signedHeadersList.forEach(key => { - canonicalHeaders += `${key}:${amzHeaders[key]}\n`; - }); - const signedHeaders = signedHeadersList.join(';'); - const payloadHash = await options.crypto.sha256DigestHex(requestPayload); - // https://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html - const canonicalRequest = `${options.method}\n` + - `${options.canonicalUri}\n` + - `${options.canonicalQuerystring}\n` + - `${canonicalHeaders}\n` + - `${signedHeaders}\n` + - `${payloadHash}`; - const credentialScope = `${dateStamp}/${options.region}/${serviceName}/${AWS_REQUEST_TYPE}`; - // https://docs.aws.amazon.com/general/latest/gr/sigv4-create-string-to-sign.html - const stringToSign = `${AWS_ALGORITHM}\n` + - `${amzDate}\n` + - `${credentialScope}\n` + - (await options.crypto.sha256DigestHex(canonicalRequest)); - // https://docs.aws.amazon.com/general/latest/gr/sigv4-calculate-signature.html - const signingKey = await getSigningKey(options.crypto, options.securityCredentials.secretAccessKey, dateStamp, options.region, serviceName); - const signature = await sign(options.crypto, signingKey, stringToSign); - // https://docs.aws.amazon.com/general/latest/gr/sigv4-add-signature-to-request.html - const authorizationHeader = `${AWS_ALGORITHM} Credential=${options.securityCredentials.accessKeyId}/` + - `${credentialScope}, SignedHeaders=${signedHeaders}, ` + - `Signature=${crypto_1.fromArrayBufferToHex(signature)}`; - return { - // Do not return x-amz-date if date is available. - amzDate: reformattedAdditionalAmzHeaders.date ? undefined : amzDate, - authorizationHeader, - canonicalQuerystring: options.canonicalQuerystring, - }; -} -//# sourceMappingURL=awsrequestsigner.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/baseexternalclient.d.ts b/reverse_engineering/node_modules/google-auth-library/build/src/auth/baseexternalclient.d.ts deleted file mode 100644 index e2d4629..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/baseexternalclient.d.ts +++ /dev/null @@ -1,204 +0,0 @@ -import { GaxiosOptions, GaxiosPromise, GaxiosResponse } from 'gaxios'; -import { Credentials } from './credentials'; -import { AuthClient } from './authclient'; -import { BodyResponseCallback } from '../transporters'; -import { GetAccessTokenResponse, Headers, RefreshOptions } from './oauth2client'; -/** - * Offset to take into account network delays and server clock skews. - */ -export declare const EXPIRATION_TIME_OFFSET: number; -/** - * The credentials JSON file type for external account clients. - * There are 3 types of JSON configs: - * 1. authorized_user => Google end user credential - * 2. service_account => Google service account credential - * 3. external_Account => non-GCP service (eg. AWS, Azure, K8s) - */ -export declare const EXTERNAL_ACCOUNT_TYPE = "external_account"; -/** Cloud resource manager URL used to retrieve project information. */ -export declare const CLOUD_RESOURCE_MANAGER = "https://cloudresourcemanager.googleapis.com/v1/projects/"; -/** - * Base external account credentials json interface. - */ -export interface BaseExternalAccountClientOptions { - type: string; - audience: string; - subject_token_type: string; - service_account_impersonation_url?: string; - token_url: string; - token_info_url?: string; - client_id?: string; - client_secret?: string; - quota_project_id?: string; -} -/** - * Interface defining the successful response for iamcredentials - * generateAccessToken API. - * https://cloud.google.com/iam/docs/reference/credentials/rest/v1/projects.serviceAccounts/generateAccessToken - */ -export interface IamGenerateAccessTokenResponse { - accessToken: string; - expireTime: string; -} -/** - * Interface defining the project information response returned by the cloud - * resource manager. - * https://cloud.google.com/resource-manager/reference/rest/v1/projects#Project - */ -export interface ProjectInfo { - projectNumber: string; - projectId: string; - lifecycleState: string; - name: string; - createTime?: string; - parent: { - [key: string]: any; - }; -} -/** - * Internal interface for tracking the access token expiration time. - */ -interface CredentialsWithResponse extends Credentials { - res?: GaxiosResponse | null; -} -/** - * Base external account client. This is used to instantiate AuthClients for - * exchanging external account credentials for GCP access token and authorizing - * requests to GCP APIs. - * The base class implements common logic for exchanging various type of - * external credentials for GCP access token. The logic of determining and - * retrieving the external credential based on the environment and - * credential_source will be left for the subclasses. - */ -export declare abstract class BaseExternalAccountClient extends AuthClient { - /** - * OAuth scopes for the GCP access token to use. When not provided, - * the default https://www.googleapis.com/auth/cloud-platform is - * used. - */ - scopes?: string | string[]; - private cachedAccessToken; - protected readonly audience: string; - private readonly subjectTokenType; - private readonly serviceAccountImpersonationUrl?; - private readonly stsCredential; - projectId: string | null; - projectNumber: string | null; - readonly eagerRefreshThresholdMillis: number; - readonly forceRefreshOnFailure: boolean; - /** - * Instantiate a BaseExternalAccountClient instance using the provided JSON - * object loaded from an external account credentials file. - * @param options The external account options object typically loaded - * from the external account JSON credential file. - * @param additionalOptions Optional additional behavior customization - * options. These currently customize expiration threshold time and - * whether to retry on 401/403 API request errors. - */ - constructor(options: BaseExternalAccountClientOptions, additionalOptions?: RefreshOptions); - /** - * Provides a mechanism to inject GCP access tokens directly. - * When the provided credential expires, a new credential, using the - * external account options, is retrieved. - * @param credentials The Credentials object to set on the current client. - */ - setCredentials(credentials: Credentials): void; - /** - * Triggered when a external subject token is needed to be exchanged for a GCP - * access token via GCP STS endpoint. - * This abstract method needs to be implemented by subclasses depending on - * the type of external credential used. - * @return A promise that resolves with the external subject token. - */ - abstract retrieveSubjectToken(): Promise; - /** - * @return A promise that resolves with the current GCP access token - * response. If the current credential is expired, a new one is retrieved. - */ - getAccessToken(): Promise; - /** - * The main authentication interface. It takes an optional url which when - * present is the endpoint being accessed, and returns a Promise which - * resolves with authorization header fields. - * - * The result has the form: - * { Authorization: 'Bearer ' } - */ - getRequestHeaders(): Promise; - /** - * Provides a request implementation with OAuth 2.0 flow. In cases of - * HTTP 401 and 403 responses, it automatically asks for a new access token - * and replays the unsuccessful request. - * @param opts Request options. - * @param callback callback. - * @return A promise that resolves with the HTTP response when no callback is - * provided. - */ - request(opts: GaxiosOptions): GaxiosPromise; - request(opts: GaxiosOptions, callback: BodyResponseCallback): void; - /** - * @return A promise that resolves with the project ID corresponding to the - * current workload identity pool. When not determinable, this resolves with - * null. - * This is introduced to match the current pattern of using the Auth - * library: - * const projectId = await auth.getProjectId(); - * const url = `https://dns.googleapis.com/dns/v1/projects/${projectId}`; - * const res = await client.request({ url }); - * The resource may not have permission - * (resourcemanager.projects.get) to call this API or the required - * scopes may not be selected: - * https://cloud.google.com/resource-manager/reference/rest/v1/projects/get#authorization-scopes - */ - getProjectId(): Promise; - /** - * Authenticates the provided HTTP request, processes it and resolves with the - * returned response. - * @param opts The HTTP request options. - * @param retry Whether the current attempt is a retry after a failed attempt. - * @return A promise that resolves with the successful response. - */ - protected requestAsync(opts: GaxiosOptions, retry?: boolean): Promise>; - /** - * Forces token refresh, even if unexpired tokens are currently cached. - * External credentials are exchanged for GCP access tokens via the token - * exchange endpoint and other settings provided in the client options - * object. - * If the service_account_impersonation_url is provided, an additional - * step to exchange the external account GCP access token for a service - * account impersonated token is performed. - * @return A promise that resolves with the fresh GCP access tokens. - */ - protected refreshAccessTokenAsync(): Promise; - /** - * Returns the workload identity pool project number if it is determinable - * from the audience resource name. - * @param audience The STS audience used to determine the project number. - * @return The project number associated with the workload identity pool, if - * this can be determined from the STS audience field. Otherwise, null is - * returned. - */ - private getProjectNumber; - /** - * Exchanges an external account GCP access token for a service - * account impersonated access token using iamcredentials - * GenerateAccessToken API. - * @param token The access token to exchange for a service account access - * token. - * @return A promise that resolves with the service account impersonated - * credentials response. - */ - private getImpersonatedAccessToken; - /** - * Returns whether the provided credentials are expired or not. - * If there is no expiry time, assumes the token is not expired or expiring. - * @param accessToken The credentials to check for expiration. - * @return Whether the credentials are expired or not. - */ - private isExpired; - /** - * @return The list of scopes for the requested GCP access token. - */ - private getScopesArray; -} -export {}; diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/baseexternalclient.js b/reverse_engineering/node_modules/google-auth-library/build/src/auth/baseexternalclient.js deleted file mode 100644 index 88d2afb..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/baseexternalclient.js +++ /dev/null @@ -1,368 +0,0 @@ -"use strict"; -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BaseExternalAccountClient = exports.CLOUD_RESOURCE_MANAGER = exports.EXTERNAL_ACCOUNT_TYPE = exports.EXPIRATION_TIME_OFFSET = void 0; -const stream = require("stream"); -const authclient_1 = require("./authclient"); -const sts = require("./stscredentials"); -/** - * The required token exchange grant_type: rfc8693#section-2.1 - */ -const STS_GRANT_TYPE = 'urn:ietf:params:oauth:grant-type:token-exchange'; -/** - * The requested token exchange requested_token_type: rfc8693#section-2.1 - */ -const STS_REQUEST_TOKEN_TYPE = 'urn:ietf:params:oauth:token-type:access_token'; -/** The default OAuth scope to request when none is provided. */ -const DEFAULT_OAUTH_SCOPE = 'https://www.googleapis.com/auth/cloud-platform'; -/** - * Offset to take into account network delays and server clock skews. - */ -exports.EXPIRATION_TIME_OFFSET = 5 * 60 * 1000; -/** - * The credentials JSON file type for external account clients. - * There are 3 types of JSON configs: - * 1. authorized_user => Google end user credential - * 2. service_account => Google service account credential - * 3. external_Account => non-GCP service (eg. AWS, Azure, K8s) - */ -exports.EXTERNAL_ACCOUNT_TYPE = 'external_account'; -/** Cloud resource manager URL used to retrieve project information. */ -exports.CLOUD_RESOURCE_MANAGER = 'https://cloudresourcemanager.googleapis.com/v1/projects/'; -/** - * Base external account client. This is used to instantiate AuthClients for - * exchanging external account credentials for GCP access token and authorizing - * requests to GCP APIs. - * The base class implements common logic for exchanging various type of - * external credentials for GCP access token. The logic of determining and - * retrieving the external credential based on the environment and - * credential_source will be left for the subclasses. - */ -class BaseExternalAccountClient extends authclient_1.AuthClient { - /** - * Instantiate a BaseExternalAccountClient instance using the provided JSON - * object loaded from an external account credentials file. - * @param options The external account options object typically loaded - * from the external account JSON credential file. - * @param additionalOptions Optional additional behavior customization - * options. These currently customize expiration threshold time and - * whether to retry on 401/403 API request errors. - */ - constructor(options, additionalOptions) { - super(); - if (options.type !== exports.EXTERNAL_ACCOUNT_TYPE) { - throw new Error(`Expected "${exports.EXTERNAL_ACCOUNT_TYPE}" type but ` + - `received "${options.type}"`); - } - const clientAuth = options.client_id - ? { - confidentialClientType: 'basic', - clientId: options.client_id, - clientSecret: options.client_secret, - } - : undefined; - this.stsCredential = new sts.StsCredentials(options.token_url, clientAuth); - // Default OAuth scope. This could be overridden via public property. - this.scopes = [DEFAULT_OAUTH_SCOPE]; - this.cachedAccessToken = null; - this.audience = options.audience; - this.subjectTokenType = options.subject_token_type; - this.quotaProjectId = options.quota_project_id; - this.serviceAccountImpersonationUrl = - options.service_account_impersonation_url; - // As threshold could be zero, - // eagerRefreshThresholdMillis || EXPIRATION_TIME_OFFSET will override the - // zero value. - if (typeof (additionalOptions === null || additionalOptions === void 0 ? void 0 : additionalOptions.eagerRefreshThresholdMillis) !== 'number') { - this.eagerRefreshThresholdMillis = exports.EXPIRATION_TIME_OFFSET; - } - else { - this.eagerRefreshThresholdMillis = additionalOptions - .eagerRefreshThresholdMillis; - } - this.forceRefreshOnFailure = !!(additionalOptions === null || additionalOptions === void 0 ? void 0 : additionalOptions.forceRefreshOnFailure); - this.projectId = null; - this.projectNumber = this.getProjectNumber(this.audience); - } - /** - * Provides a mechanism to inject GCP access tokens directly. - * When the provided credential expires, a new credential, using the - * external account options, is retrieved. - * @param credentials The Credentials object to set on the current client. - */ - setCredentials(credentials) { - super.setCredentials(credentials); - this.cachedAccessToken = credentials; - } - /** - * @return A promise that resolves with the current GCP access token - * response. If the current credential is expired, a new one is retrieved. - */ - async getAccessToken() { - // If cached access token is unavailable or expired, force refresh. - if (!this.cachedAccessToken || this.isExpired(this.cachedAccessToken)) { - await this.refreshAccessTokenAsync(); - } - // Return GCP access token in GetAccessTokenResponse format. - return { - token: this.cachedAccessToken.access_token, - res: this.cachedAccessToken.res, - }; - } - /** - * The main authentication interface. It takes an optional url which when - * present is the endpoint being accessed, and returns a Promise which - * resolves with authorization header fields. - * - * The result has the form: - * { Authorization: 'Bearer ' } - */ - async getRequestHeaders() { - const accessTokenResponse = await this.getAccessToken(); - const headers = { - Authorization: `Bearer ${accessTokenResponse.token}`, - }; - return this.addSharedMetadataHeaders(headers); - } - request(opts, callback) { - if (callback) { - this.requestAsync(opts).then(r => callback(null, r), e => { - return callback(e, e.response); - }); - } - else { - return this.requestAsync(opts); - } - } - /** - * @return A promise that resolves with the project ID corresponding to the - * current workload identity pool. When not determinable, this resolves with - * null. - * This is introduced to match the current pattern of using the Auth - * library: - * const projectId = await auth.getProjectId(); - * const url = `https://dns.googleapis.com/dns/v1/projects/${projectId}`; - * const res = await client.request({ url }); - * The resource may not have permission - * (resourcemanager.projects.get) to call this API or the required - * scopes may not be selected: - * https://cloud.google.com/resource-manager/reference/rest/v1/projects/get#authorization-scopes - */ - async getProjectId() { - if (this.projectId) { - // Return previously determined project ID. - return this.projectId; - } - else if (this.projectNumber) { - // Preferable not to use request() to avoid retrial policies. - const headers = await this.getRequestHeaders(); - const response = await this.transporter.request({ - headers, - url: `${exports.CLOUD_RESOURCE_MANAGER}${this.projectNumber}`, - responseType: 'json', - }); - this.projectId = response.data.projectId; - return this.projectId; - } - return null; - } - /** - * Authenticates the provided HTTP request, processes it and resolves with the - * returned response. - * @param opts The HTTP request options. - * @param retry Whether the current attempt is a retry after a failed attempt. - * @return A promise that resolves with the successful response. - */ - async requestAsync(opts, retry = false) { - let response; - try { - const requestHeaders = await this.getRequestHeaders(); - opts.headers = opts.headers || {}; - if (requestHeaders && requestHeaders['x-goog-user-project']) { - opts.headers['x-goog-user-project'] = - requestHeaders['x-goog-user-project']; - } - if (requestHeaders && requestHeaders.Authorization) { - opts.headers.Authorization = requestHeaders.Authorization; - } - response = await this.transporter.request(opts); - } - catch (e) { - const res = e.response; - if (res) { - const statusCode = res.status; - // Retry the request for metadata if the following criteria are true: - // - We haven't already retried. It only makes sense to retry once. - // - The response was a 401 or a 403 - // - The request didn't send a readableStream - // - forceRefreshOnFailure is true - const isReadableStream = res.config.data instanceof stream.Readable; - const isAuthErr = statusCode === 401 || statusCode === 403; - if (!retry && - isAuthErr && - !isReadableStream && - this.forceRefreshOnFailure) { - await this.refreshAccessTokenAsync(); - return await this.requestAsync(opts, true); - } - } - throw e; - } - return response; - } - /** - * Forces token refresh, even if unexpired tokens are currently cached. - * External credentials are exchanged for GCP access tokens via the token - * exchange endpoint and other settings provided in the client options - * object. - * If the service_account_impersonation_url is provided, an additional - * step to exchange the external account GCP access token for a service - * account impersonated token is performed. - * @return A promise that resolves with the fresh GCP access tokens. - */ - async refreshAccessTokenAsync() { - // Retrieve the external credential. - const subjectToken = await this.retrieveSubjectToken(); - // Construct the STS credentials options. - const stsCredentialsOptions = { - grantType: STS_GRANT_TYPE, - audience: this.audience, - requestedTokenType: STS_REQUEST_TOKEN_TYPE, - subjectToken, - subjectTokenType: this.subjectTokenType, - // generateAccessToken requires the provided access token to have - // scopes: - // https://www.googleapis.com/auth/iam or - // https://www.googleapis.com/auth/cloud-platform - // The new service account access token scopes will match the user - // provided ones. - scope: this.serviceAccountImpersonationUrl - ? [DEFAULT_OAUTH_SCOPE] - : this.getScopesArray(), - }; - // Exchange the external credentials for a GCP access token. - const stsResponse = await this.stsCredential.exchangeToken(stsCredentialsOptions); - if (this.serviceAccountImpersonationUrl) { - this.cachedAccessToken = await this.getImpersonatedAccessToken(stsResponse.access_token); - } - else if (stsResponse.expires_in) { - // Save response in cached access token. - this.cachedAccessToken = { - access_token: stsResponse.access_token, - expiry_date: new Date().getTime() + stsResponse.expires_in * 1000, - res: stsResponse.res, - }; - } - else { - // Save response in cached access token. - this.cachedAccessToken = { - access_token: stsResponse.access_token, - res: stsResponse.res, - }; - } - // Save credentials. - this.credentials = {}; - Object.assign(this.credentials, this.cachedAccessToken); - delete this.credentials.res; - // Trigger tokens event to notify external listeners. - this.emit('tokens', { - refresh_token: null, - expiry_date: this.cachedAccessToken.expiry_date, - access_token: this.cachedAccessToken.access_token, - token_type: 'Bearer', - id_token: null, - }); - // Return the cached access token. - return this.cachedAccessToken; - } - /** - * Returns the workload identity pool project number if it is determinable - * from the audience resource name. - * @param audience The STS audience used to determine the project number. - * @return The project number associated with the workload identity pool, if - * this can be determined from the STS audience field. Otherwise, null is - * returned. - */ - getProjectNumber(audience) { - // STS audience pattern: - // //iam.googleapis.com/projects/$PROJECT_NUMBER/locations/... - const match = audience.match(/\/projects\/([^/]+)/); - if (!match) { - return null; - } - return match[1]; - } - /** - * Exchanges an external account GCP access token for a service - * account impersonated access token using iamcredentials - * GenerateAccessToken API. - * @param token The access token to exchange for a service account access - * token. - * @return A promise that resolves with the service account impersonated - * credentials response. - */ - async getImpersonatedAccessToken(token) { - const opts = { - url: this.serviceAccountImpersonationUrl, - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${token}`, - }, - data: { - scope: this.getScopesArray(), - }, - responseType: 'json', - }; - const response = await this.transporter.request(opts); - const successResponse = response.data; - return { - access_token: successResponse.accessToken, - // Convert from ISO format to timestamp. - expiry_date: new Date(successResponse.expireTime).getTime(), - res: response, - }; - } - /** - * Returns whether the provided credentials are expired or not. - * If there is no expiry time, assumes the token is not expired or expiring. - * @param accessToken The credentials to check for expiration. - * @return Whether the credentials are expired or not. - */ - isExpired(accessToken) { - const now = new Date().getTime(); - return accessToken.expiry_date - ? now >= accessToken.expiry_date - this.eagerRefreshThresholdMillis - : false; - } - /** - * @return The list of scopes for the requested GCP access token. - */ - getScopesArray() { - // Since scopes can be provided as string or array, the type should - // be normalized. - if (typeof this.scopes === 'string') { - return [this.scopes]; - } - else if (typeof this.scopes === 'undefined') { - return [DEFAULT_OAUTH_SCOPE]; - } - else { - return this.scopes; - } - } -} -exports.BaseExternalAccountClient = BaseExternalAccountClient; -//# sourceMappingURL=baseexternalclient.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/computeclient.d.ts b/reverse_engineering/node_modules/google-auth-library/build/src/auth/computeclient.d.ts deleted file mode 100644 index c3353ec..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/computeclient.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { GaxiosError } from 'gaxios'; -import { GetTokenResponse, OAuth2Client, RefreshOptions } from './oauth2client'; -export interface ComputeOptions extends RefreshOptions { - /** - * The service account email to use, or 'default'. A Compute Engine instance - * may have multiple service accounts. - */ - serviceAccountEmail?: string; - /** - * The scopes that will be requested when acquiring service account - * credentials. Only applicable to modern App Engine and Cloud Function - * runtimes as of March 2019. - */ - scopes?: string | string[]; -} -export declare class Compute extends OAuth2Client { - private serviceAccountEmail; - scopes: string[]; - /** - * Google Compute Engine service account credentials. - * - * Retrieve access token from the metadata server. - * See: https://developers.google.com/compute/docs/authentication - */ - constructor(options?: ComputeOptions); - /** - * Refreshes the access token. - * @param refreshToken Unused parameter - */ - protected refreshTokenNoCache(refreshToken?: string | null): Promise; - /** - * Fetches an ID token. - * @param targetAudience the audience for the fetched ID token. - */ - fetchIdToken(targetAudience: string): Promise; - protected wrapError(e: GaxiosError): void; -} diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/computeclient.js b/reverse_engineering/node_modules/google-auth-library/build/src/auth/computeclient.js deleted file mode 100644 index 741bf47..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/computeclient.js +++ /dev/null @@ -1,110 +0,0 @@ -"use strict"; -// Copyright 2013 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Compute = void 0; -const arrify = require("arrify"); -const gcpMetadata = require("gcp-metadata"); -const oauth2client_1 = require("./oauth2client"); -class Compute extends oauth2client_1.OAuth2Client { - /** - * Google Compute Engine service account credentials. - * - * Retrieve access token from the metadata server. - * See: https://developers.google.com/compute/docs/authentication - */ - constructor(options = {}) { - super(options); - // Start with an expired refresh token, which will automatically be - // refreshed before the first API call is made. - this.credentials = { expiry_date: 1, refresh_token: 'compute-placeholder' }; - this.serviceAccountEmail = options.serviceAccountEmail || 'default'; - this.scopes = arrify(options.scopes); - } - /** - * Refreshes the access token. - * @param refreshToken Unused parameter - */ - async refreshTokenNoCache( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - refreshToken) { - const tokenPath = `service-accounts/${this.serviceAccountEmail}/token`; - let data; - try { - const instanceOptions = { - property: tokenPath, - }; - if (this.scopes.length > 0) { - instanceOptions.params = { - scopes: this.scopes.join(','), - }; - } - data = await gcpMetadata.instance(instanceOptions); - } - catch (e) { - e.message = `Could not refresh access token: ${e.message}`; - this.wrapError(e); - throw e; - } - const tokens = data; - if (data && data.expires_in) { - tokens.expiry_date = new Date().getTime() + data.expires_in * 1000; - delete tokens.expires_in; - } - this.emit('tokens', tokens); - return { tokens, res: null }; - } - /** - * Fetches an ID token. - * @param targetAudience the audience for the fetched ID token. - */ - async fetchIdToken(targetAudience) { - const idTokenPath = `service-accounts/${this.serviceAccountEmail}/identity` + - `?format=full&audience=${targetAudience}`; - let idToken; - try { - const instanceOptions = { - property: idTokenPath, - }; - idToken = await gcpMetadata.instance(instanceOptions); - } - catch (e) { - e.message = `Could not fetch ID token: ${e.message}`; - throw e; - } - return idToken; - } - wrapError(e) { - const res = e.response; - if (res && res.status) { - e.code = res.status.toString(); - if (res.status === 403) { - e.message = - 'A Forbidden error was returned while attempting to retrieve an access ' + - 'token for the Compute Engine built-in service account. This may be because the Compute ' + - 'Engine instance does not have the correct permission scopes specified: ' + - e.message; - } - else if (res.status === 404) { - e.message = - 'A Not Found error was returned while attempting to retrieve an access' + - 'token for the Compute Engine built-in service account. This may be because the Compute ' + - 'Engine instance does not have any permission scopes specified: ' + - e.message; - } - } - } -} -exports.Compute = Compute; -//# sourceMappingURL=computeclient.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/credentials.d.ts b/reverse_engineering/node_modules/google-auth-library/build/src/auth/credentials.d.ts deleted file mode 100644 index cb64a13..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/credentials.d.ts +++ /dev/null @@ -1,67 +0,0 @@ -export interface Credentials { - /** - * This field is only present if the access_type parameter was set to offline in the authentication request. For details, see Refresh tokens. - */ - refresh_token?: string | null; - /** - * The time in ms at which this token is thought to expire. - */ - expiry_date?: number | null; - /** - * A token that can be sent to a Google API. - */ - access_token?: string | null; - /** - * Identifies the type of token returned. At this time, this field always has the value Bearer. - */ - token_type?: string | null; - /** - * A JWT that contains identity information about the user that is digitally signed by Google. - */ - id_token?: string | null; - /** - * The scopes of access granted by the access_token expressed as a list of space-delimited, case-sensitive strings. - */ - scope?: string; -} -export interface CredentialRequest { - /** - * This field is only present if the access_type parameter was set to offline in the authentication request. For details, see Refresh tokens. - */ - refresh_token?: string; - /** - * A token that can be sent to a Google API. - */ - access_token?: string; - /** - * Identifies the type of token returned. At this time, this field always has the value Bearer. - */ - token_type?: string; - /** - * The remaining lifetime of the access token in seconds. - */ - expires_in?: number; - /** - * A JWT that contains identity information about the user that is digitally signed by Google. - */ - id_token?: string; - /** - * The scopes of access granted by the access_token expressed as a list of space-delimited, case-sensitive strings. - */ - scope?: string; -} -export interface JWTInput { - type?: string; - client_email?: string; - private_key?: string; - private_key_id?: string; - project_id?: string; - client_id?: string; - client_secret?: string; - refresh_token?: string; - quota_project_id?: string; -} -export interface CredentialBody { - client_email?: string; - private_key?: string; -} diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/credentials.js b/reverse_engineering/node_modules/google-auth-library/build/src/auth/credentials.js deleted file mode 100644 index 5ea0d58..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/credentials.js +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; -// Copyright 2014 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -//# sourceMappingURL=credentials.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/downscopedclient.d.ts b/reverse_engineering/node_modules/google-auth-library/build/src/auth/downscopedclient.d.ts deleted file mode 100644 index 867296e..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/downscopedclient.d.ts +++ /dev/null @@ -1,132 +0,0 @@ -import { GaxiosOptions, GaxiosPromise, GaxiosResponse } from 'gaxios'; -import { BodyResponseCallback } from '../transporters'; -import { Credentials } from './credentials'; -import { AuthClient } from './authclient'; -import { GetAccessTokenResponse, Headers, RefreshOptions } from './oauth2client'; -/** - * The maximum number of access boundary rules a Credential Access Boundary - * can contain. - */ -export declare const MAX_ACCESS_BOUNDARY_RULES_COUNT = 10; -/** - * Offset to take into account network delays and server clock skews. - */ -export declare const EXPIRATION_TIME_OFFSET: number; -/** - * Internal interface for tracking the access token expiration time. - */ -interface CredentialsWithResponse extends Credentials { - res?: GaxiosResponse | null; -} -/** - * Internal interface for tracking and returning the Downscoped access token - * expiration time in epoch time (seconds). - */ -interface DownscopedAccessTokenResponse extends GetAccessTokenResponse { - expirationTime?: number | null; -} -/** - * Defines an upper bound of permissions available for a GCP credential. - */ -export interface CredentialAccessBoundary { - accessBoundary: { - accessBoundaryRules: AccessBoundaryRule[]; - }; -} -/** Defines an upper bound of permissions on a particular resource. */ -interface AccessBoundaryRule { - availablePermissions: string[]; - availableResource: string; - availabilityCondition?: AvailabilityCondition; -} -/** - * An optional condition that can be used as part of a - * CredentialAccessBoundary to further restrict permissions. - */ -interface AvailabilityCondition { - expression: string; - title?: string; - description?: string; -} -/** - * Defines a set of Google credentials that are downscoped from an existing set - * of Google OAuth2 credentials. This is useful to restrict the Identity and - * Access Management (IAM) permissions that a short-lived credential can use. - * The common pattern of usage is to have a token broker with elevated access - * generate these downscoped credentials from higher access source credentials - * and pass the downscoped short-lived access tokens to a token consumer via - * some secure authenticated channel for limited access to Google Cloud Storage - * resources. - */ -export declare class DownscopedClient extends AuthClient { - private readonly authClient; - private readonly credentialAccessBoundary; - private cachedDownscopedAccessToken; - private readonly stsCredential; - readonly eagerRefreshThresholdMillis: number; - readonly forceRefreshOnFailure: boolean; - /** - * Instantiates a downscoped client object using the provided source - * AuthClient and credential access boundary rules. - * To downscope permissions of a source AuthClient, a Credential Access - * Boundary that specifies which resources the new credential can access, as - * well as an upper bound on the permissions that are available on each - * resource, has to be defined. A downscoped client can then be instantiated - * using the source AuthClient and the Credential Access Boundary. - * @param authClient The source AuthClient to be downscoped based on the - * provided Credential Access Boundary rules. - * @param credentialAccessBoundary The Credential Access Boundary which - * contains a list of access boundary rules. Each rule contains information - * on the resource that the rule applies to, the upper bound of the - * permissions that are available on that resource and an optional - * condition to further restrict permissions. - * @param additionalOptions Optional additional behavior customization - * options. These currently customize expiration threshold time and - * whether to retry on 401/403 API request errors. - */ - constructor(authClient: AuthClient, credentialAccessBoundary: CredentialAccessBoundary, additionalOptions?: RefreshOptions); - /** - * Provides a mechanism to inject Downscoped access tokens directly. - * The expiry_date field is required to facilitate determination of the token - * expiration which would make it easier for the token consumer to handle. - * @param credentials The Credentials object to set on the current client. - */ - setCredentials(credentials: Credentials): void; - getAccessToken(): Promise; - /** - * The main authentication interface. It takes an optional url which when - * present is the endpoint being accessed, and returns a Promise which - * resolves with authorization header fields. - * - * The result has the form: - * { Authorization: 'Bearer ' } - */ - getRequestHeaders(): Promise; - /** - * Provides a request implementation with OAuth 2.0 flow. In cases of - * HTTP 401 and 403 responses, it automatically asks for a new access token - * and replays the unsuccessful request. - * @param opts Request options. - * @param callback callback. - * @return A promise that resolves with the HTTP response when no callback - * is provided. - */ - request(opts: GaxiosOptions): GaxiosPromise; - request(opts: GaxiosOptions, callback: BodyResponseCallback): void; - /** - * Forces token refresh, even if unexpired tokens are currently cached. - * GCP access tokens are retrieved from authclient object/source credential. - * Then GCP access tokens are exchanged for downscoped access tokens via the - * token exchange endpoint. - * @return A promise that resolves with the fresh downscoped access token. - */ - protected refreshAccessTokenAsync(): Promise; - /** - * Returns whether the provided credentials are expired or not. - * If there is no expiry time, assumes the token is not expired or expiring. - * @param downscopedAccessToken The credentials to check for expiration. - * @return Whether the credentials are expired or not. - */ - private isExpired; -} -export {}; diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/downscopedclient.js b/reverse_engineering/node_modules/google-auth-library/build/src/auth/downscopedclient.js deleted file mode 100644 index 361cf6e..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/downscopedclient.js +++ /dev/null @@ -1,219 +0,0 @@ -"use strict"; -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DownscopedClient = exports.EXPIRATION_TIME_OFFSET = exports.MAX_ACCESS_BOUNDARY_RULES_COUNT = void 0; -const authclient_1 = require("./authclient"); -const sts = require("./stscredentials"); -/** - * The required token exchange grant_type: rfc8693#section-2.1 - */ -const STS_GRANT_TYPE = 'urn:ietf:params:oauth:grant-type:token-exchange'; -/** - * The requested token exchange requested_token_type: rfc8693#section-2.1 - */ -const STS_REQUEST_TOKEN_TYPE = 'urn:ietf:params:oauth:token-type:access_token'; -/** - * The requested token exchange subject_token_type: rfc8693#section-2.1 - */ -const STS_SUBJECT_TOKEN_TYPE = 'urn:ietf:params:oauth:token-type:access_token'; -/** The STS access token exchange end point. */ -const STS_ACCESS_TOKEN_URL = 'https://sts.googleapis.com/v1/token'; -/** - * The maximum number of access boundary rules a Credential Access Boundary - * can contain. - */ -exports.MAX_ACCESS_BOUNDARY_RULES_COUNT = 10; -/** - * Offset to take into account network delays and server clock skews. - */ -exports.EXPIRATION_TIME_OFFSET = 5 * 60 * 1000; -/** - * Defines a set of Google credentials that are downscoped from an existing set - * of Google OAuth2 credentials. This is useful to restrict the Identity and - * Access Management (IAM) permissions that a short-lived credential can use. - * The common pattern of usage is to have a token broker with elevated access - * generate these downscoped credentials from higher access source credentials - * and pass the downscoped short-lived access tokens to a token consumer via - * some secure authenticated channel for limited access to Google Cloud Storage - * resources. - */ -class DownscopedClient extends authclient_1.AuthClient { - /** - * Instantiates a downscoped client object using the provided source - * AuthClient and credential access boundary rules. - * To downscope permissions of a source AuthClient, a Credential Access - * Boundary that specifies which resources the new credential can access, as - * well as an upper bound on the permissions that are available on each - * resource, has to be defined. A downscoped client can then be instantiated - * using the source AuthClient and the Credential Access Boundary. - * @param authClient The source AuthClient to be downscoped based on the - * provided Credential Access Boundary rules. - * @param credentialAccessBoundary The Credential Access Boundary which - * contains a list of access boundary rules. Each rule contains information - * on the resource that the rule applies to, the upper bound of the - * permissions that are available on that resource and an optional - * condition to further restrict permissions. - * @param additionalOptions Optional additional behavior customization - * options. These currently customize expiration threshold time and - * whether to retry on 401/403 API request errors. - */ - constructor(authClient, credentialAccessBoundary, additionalOptions) { - super(); - this.authClient = authClient; - this.credentialAccessBoundary = credentialAccessBoundary; - // Check 1-10 Access Boundary Rules are defined within Credential Access - // Boundary. - if (credentialAccessBoundary.accessBoundary.accessBoundaryRules.length === 0) { - throw new Error('At least one access boundary rule needs to be defined.'); - } - else if (credentialAccessBoundary.accessBoundary.accessBoundaryRules.length > - exports.MAX_ACCESS_BOUNDARY_RULES_COUNT) { - throw new Error('The provided access boundary has more than ' + - `${exports.MAX_ACCESS_BOUNDARY_RULES_COUNT} access boundary rules.`); - } - // Check at least one permission should be defined in each Access Boundary - // Rule. - for (const rule of credentialAccessBoundary.accessBoundary - .accessBoundaryRules) { - if (rule.availablePermissions.length === 0) { - throw new Error('At least one permission should be defined in access boundary rules.'); - } - } - this.stsCredential = new sts.StsCredentials(STS_ACCESS_TOKEN_URL); - this.cachedDownscopedAccessToken = null; - // As threshold could be zero, - // eagerRefreshThresholdMillis || EXPIRATION_TIME_OFFSET will override the - // zero value. - if (typeof (additionalOptions === null || additionalOptions === void 0 ? void 0 : additionalOptions.eagerRefreshThresholdMillis) !== 'number') { - this.eagerRefreshThresholdMillis = exports.EXPIRATION_TIME_OFFSET; - } - else { - this.eagerRefreshThresholdMillis = additionalOptions - .eagerRefreshThresholdMillis; - } - this.forceRefreshOnFailure = !!(additionalOptions === null || additionalOptions === void 0 ? void 0 : additionalOptions.forceRefreshOnFailure); - } - /** - * Provides a mechanism to inject Downscoped access tokens directly. - * The expiry_date field is required to facilitate determination of the token - * expiration which would make it easier for the token consumer to handle. - * @param credentials The Credentials object to set on the current client. - */ - setCredentials(credentials) { - if (!credentials.expiry_date) { - throw new Error('The access token expiry_date field is missing in the provided ' + - 'credentials.'); - } - super.setCredentials(credentials); - this.cachedDownscopedAccessToken = credentials; - } - async getAccessToken() { - // If the cached access token is unavailable or expired, force refresh. - // The Downscoped access token will be returned in - // DownscopedAccessTokenResponse format. - if (!this.cachedDownscopedAccessToken || - this.isExpired(this.cachedDownscopedAccessToken)) { - await this.refreshAccessTokenAsync(); - } - // Return Downscoped access token in DownscopedAccessTokenResponse format. - return { - token: this.cachedDownscopedAccessToken.access_token, - expirationTime: this.cachedDownscopedAccessToken.expiry_date, - res: this.cachedDownscopedAccessToken.res, - }; - } - /** - * The main authentication interface. It takes an optional url which when - * present is the endpoint being accessed, and returns a Promise which - * resolves with authorization header fields. - * - * The result has the form: - * { Authorization: 'Bearer ' } - */ - async getRequestHeaders() { - throw new Error('Not implemented.'); - } - request(opts, callback) { - throw new Error('Not implemented.'); - } - /** - * Forces token refresh, even if unexpired tokens are currently cached. - * GCP access tokens are retrieved from authclient object/source credential. - * Then GCP access tokens are exchanged for downscoped access tokens via the - * token exchange endpoint. - * @return A promise that resolves with the fresh downscoped access token. - */ - async refreshAccessTokenAsync() { - var _a; - // Retrieve GCP access token from source credential. - const subjectToken = (await this.authClient.getAccessToken()).token; - // Construct the STS credentials options. - const stsCredentialsOptions = { - grantType: STS_GRANT_TYPE, - requestedTokenType: STS_REQUEST_TOKEN_TYPE, - subjectToken: subjectToken, - subjectTokenType: STS_SUBJECT_TOKEN_TYPE, - }; - // Exchange the source AuthClient access token for a Downscoped access - // token. - const stsResponse = await this.stsCredential.exchangeToken(stsCredentialsOptions, undefined, this.credentialAccessBoundary); - /** - * The STS endpoint will only return the expiration time for the downscoped - * access token if the original access token represents a service account. - * The downscoped token's expiration time will always match the source - * credential expiration. When no expires_in is returned, we can copy the - * source credential's expiration time. - */ - const sourceCredExpireDate = ((_a = this.authClient.credentials) === null || _a === void 0 ? void 0 : _a.expiry_date) || null; - const expiryDate = stsResponse.expires_in - ? new Date().getTime() + stsResponse.expires_in * 1000 - : sourceCredExpireDate; - // Save response in cached access token. - this.cachedDownscopedAccessToken = { - access_token: stsResponse.access_token, - expiry_date: expiryDate, - res: stsResponse.res, - }; - // Save credentials. - this.credentials = {}; - Object.assign(this.credentials, this.cachedDownscopedAccessToken); - delete this.credentials.res; - // Trigger tokens event to notify external listeners. - this.emit('tokens', { - refresh_token: null, - expiry_date: this.cachedDownscopedAccessToken.expiry_date, - access_token: this.cachedDownscopedAccessToken.access_token, - token_type: 'Bearer', - id_token: null, - }); - // Return the cached access token. - return this.cachedDownscopedAccessToken; - } - /** - * Returns whether the provided credentials are expired or not. - * If there is no expiry time, assumes the token is not expired or expiring. - * @param downscopedAccessToken The credentials to check for expiration. - * @return Whether the credentials are expired or not. - */ - isExpired(downscopedAccessToken) { - const now = new Date().getTime(); - return downscopedAccessToken.expiry_date - ? now >= - downscopedAccessToken.expiry_date - this.eagerRefreshThresholdMillis - : false; - } -} -exports.DownscopedClient = DownscopedClient; -//# sourceMappingURL=downscopedclient.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/envDetect.d.ts b/reverse_engineering/node_modules/google-auth-library/build/src/auth/envDetect.d.ts deleted file mode 100644 index 2fc01c6..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/envDetect.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -export declare enum GCPEnv { - APP_ENGINE = "APP_ENGINE", - KUBERNETES_ENGINE = "KUBERNETES_ENGINE", - CLOUD_FUNCTIONS = "CLOUD_FUNCTIONS", - COMPUTE_ENGINE = "COMPUTE_ENGINE", - CLOUD_RUN = "CLOUD_RUN", - NONE = "NONE" -} -export declare function clear(): void; -export declare function getEnv(): Promise; diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/envDetect.js b/reverse_engineering/node_modules/google-auth-library/build/src/auth/envDetect.js deleted file mode 100644 index ee3a09e..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/envDetect.js +++ /dev/null @@ -1,90 +0,0 @@ -"use strict"; -// Copyright 2018 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getEnv = exports.clear = exports.GCPEnv = void 0; -const gcpMetadata = require("gcp-metadata"); -var GCPEnv; -(function (GCPEnv) { - GCPEnv["APP_ENGINE"] = "APP_ENGINE"; - GCPEnv["KUBERNETES_ENGINE"] = "KUBERNETES_ENGINE"; - GCPEnv["CLOUD_FUNCTIONS"] = "CLOUD_FUNCTIONS"; - GCPEnv["COMPUTE_ENGINE"] = "COMPUTE_ENGINE"; - GCPEnv["CLOUD_RUN"] = "CLOUD_RUN"; - GCPEnv["NONE"] = "NONE"; -})(GCPEnv = exports.GCPEnv || (exports.GCPEnv = {})); -let envPromise; -function clear() { - envPromise = undefined; -} -exports.clear = clear; -async function getEnv() { - if (envPromise) { - return envPromise; - } - envPromise = getEnvMemoized(); - return envPromise; -} -exports.getEnv = getEnv; -async function getEnvMemoized() { - let env = GCPEnv.NONE; - if (isAppEngine()) { - env = GCPEnv.APP_ENGINE; - } - else if (isCloudFunction()) { - env = GCPEnv.CLOUD_FUNCTIONS; - } - else if (await isComputeEngine()) { - if (await isKubernetesEngine()) { - env = GCPEnv.KUBERNETES_ENGINE; - } - else if (isCloudRun()) { - env = GCPEnv.CLOUD_RUN; - } - else { - env = GCPEnv.COMPUTE_ENGINE; - } - } - else { - env = GCPEnv.NONE; - } - return env; -} -function isAppEngine() { - return !!(process.env.GAE_SERVICE || process.env.GAE_MODULE_NAME); -} -function isCloudFunction() { - return !!(process.env.FUNCTION_NAME || process.env.FUNCTION_TARGET); -} -/** - * This check only verifies that the environment is running knative. - * This must be run *after* checking for Kubernetes, otherwise it will - * return a false positive. - */ -function isCloudRun() { - return !!process.env.K_CONFIGURATION; -} -async function isKubernetesEngine() { - try { - await gcpMetadata.instance('attributes/cluster-name'); - return true; - } - catch (e) { - return false; - } -} -async function isComputeEngine() { - return gcpMetadata.isAvailable(); -} -//# sourceMappingURL=envDetect.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/externalclient.d.ts b/reverse_engineering/node_modules/google-auth-library/build/src/auth/externalclient.d.ts deleted file mode 100644 index cbe9f45..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/externalclient.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { RefreshOptions } from './oauth2client'; -import { BaseExternalAccountClient } from './baseexternalclient'; -import { IdentityPoolClientOptions } from './identitypoolclient'; -import { AwsClientOptions } from './awsclient'; -export declare type ExternalAccountClientOptions = IdentityPoolClientOptions | AwsClientOptions; -/** - * Dummy class with no constructor. Developers are expected to use fromJSON. - */ -export declare class ExternalAccountClient { - constructor(); - /** - * This static method will instantiate the - * corresponding type of external account credential depending on the - * underlying credential source. - * @param options The external account options object typically loaded - * from the external account JSON credential file. - * @param additionalOptions Optional additional behavior customization - * options. These currently customize expiration threshold time and - * whether to retry on 401/403 API request errors. - * @return A BaseExternalAccountClient instance or null if the options - * provided do not correspond to an external account credential. - */ - static fromJSON(options: ExternalAccountClientOptions, additionalOptions?: RefreshOptions): BaseExternalAccountClient | null; -} diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/externalclient.js b/reverse_engineering/node_modules/google-auth-library/build/src/auth/externalclient.js deleted file mode 100644 index 801607e..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/externalclient.js +++ /dev/null @@ -1,59 +0,0 @@ -"use strict"; -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ExternalAccountClient = void 0; -const baseexternalclient_1 = require("./baseexternalclient"); -const identitypoolclient_1 = require("./identitypoolclient"); -const awsclient_1 = require("./awsclient"); -/** - * Dummy class with no constructor. Developers are expected to use fromJSON. - */ -class ExternalAccountClient { - constructor() { - throw new Error('ExternalAccountClients should be initialized via: ' + - 'ExternalAccountClient.fromJSON(), ' + - 'directly via explicit constructors, eg. ' + - 'new AwsClient(options), new IdentityPoolClient(options) or via ' + - 'new GoogleAuth(options).getClient()'); - } - /** - * This static method will instantiate the - * corresponding type of external account credential depending on the - * underlying credential source. - * @param options The external account options object typically loaded - * from the external account JSON credential file. - * @param additionalOptions Optional additional behavior customization - * options. These currently customize expiration threshold time and - * whether to retry on 401/403 API request errors. - * @return A BaseExternalAccountClient instance or null if the options - * provided do not correspond to an external account credential. - */ - static fromJSON(options, additionalOptions) { - var _a; - if (options && options.type === baseexternalclient_1.EXTERNAL_ACCOUNT_TYPE) { - if ((_a = options.credential_source) === null || _a === void 0 ? void 0 : _a.environment_id) { - return new awsclient_1.AwsClient(options, additionalOptions); - } - else { - return new identitypoolclient_1.IdentityPoolClient(options, additionalOptions); - } - } - else { - return null; - } - } -} -exports.ExternalAccountClient = ExternalAccountClient; -//# sourceMappingURL=externalclient.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/googleauth.d.ts b/reverse_engineering/node_modules/google-auth-library/build/src/auth/googleauth.d.ts deleted file mode 100644 index 6afab78..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/googleauth.d.ts +++ /dev/null @@ -1,270 +0,0 @@ -/// -import { GaxiosOptions, GaxiosResponse } from 'gaxios'; -import * as stream from 'stream'; -import { DefaultTransporter, Transporter } from '../transporters'; -import { Compute } from './computeclient'; -import { CredentialBody, JWTInput } from './credentials'; -import { IdTokenClient } from './idtokenclient'; -import { GCPEnv } from './envDetect'; -import { JWT, JWTOptions } from './jwtclient'; -import { Headers, OAuth2ClientOptions, RefreshOptions } from './oauth2client'; -import { UserRefreshClient, UserRefreshClientOptions } from './refreshclient'; -import { Impersonated, ImpersonatedOptions } from './impersonated'; -import { ExternalAccountClientOptions } from './externalclient'; -import { BaseExternalAccountClient } from './baseexternalclient'; -import { AuthClient } from './authclient'; -/** - * Defines all types of explicit clients that are determined via ADC JSON - * config file. - */ -export declare type JSONClient = JWT | UserRefreshClient | BaseExternalAccountClient | Impersonated; -export interface ProjectIdCallback { - (err?: Error | null, projectId?: string | null): void; -} -export interface CredentialCallback { - (err: Error | null, result?: JSONClient): void; -} -interface DeprecatedGetClientOptions { -} -export interface ADCCallback { - (err: Error | null, credential?: AuthClient, projectId?: string | null): void; -} -export interface ADCResponse { - credential: AuthClient; - projectId: string | null; -} -export interface GoogleAuthOptions { - /** - * Path to a .json, .pem, or .p12 key file - */ - keyFilename?: string; - /** - * Path to a .json, .pem, or .p12 key file - */ - keyFile?: string; - /** - * Object containing client_email and private_key properties, or the - * external account client options. - */ - credentials?: CredentialBody | ExternalAccountClientOptions; - /** - * Options object passed to the constructor of the client - */ - clientOptions?: JWTOptions | OAuth2ClientOptions | UserRefreshClientOptions | ImpersonatedOptions; - /** - * Required scopes for the desired API request - */ - scopes?: string | string[]; - /** - * Your project ID. - */ - projectId?: string; -} -export declare const CLOUD_SDK_CLIENT_ID = "764086051850-6qr4p6gpi6hn506pt8ejuq83di341hur.apps.googleusercontent.com"; -export declare class GoogleAuth { - transporter?: Transporter; - /** - * Caches a value indicating whether the auth layer is running on Google - * Compute Engine. - * @private - */ - private checkIsGCE?; - useJWTAccessAlways?: boolean; - defaultServicePath?: string; - get isGCE(): boolean | undefined; - private _getDefaultProjectIdPromise?; - private _cachedProjectId?; - jsonContent: JWTInput | ExternalAccountClientOptions | null; - cachedCredential: JSONClient | Impersonated | Compute | null; - /** - * Scopes populated by the client library by default. We differentiate between - * these and user defined scopes when deciding whether to use a self-signed JWT. - */ - defaultScopes?: string | string[]; - private keyFilename?; - private scopes?; - private clientOptions?; - /** - * Export DefaultTransporter as a static property of the class. - */ - static DefaultTransporter: typeof DefaultTransporter; - constructor(opts?: GoogleAuthOptions); - setGapicJWTValues(client: JWT): void; - /** - * Obtains the default project ID for the application. - * @param callback Optional callback - * @returns Promise that resolves with project Id (if used without callback) - */ - getProjectId(): Promise; - getProjectId(callback: ProjectIdCallback): void; - private getProjectIdAsync; - /** - * @returns Any scopes (user-specified or default scopes specified by the - * client library) that need to be set on the current Auth client. - */ - private getAnyScopes; - /** - * Obtains the default service-level credentials for the application. - * @param callback Optional callback. - * @returns Promise that resolves with the ADCResponse (if no callback was - * passed). - */ - getApplicationDefault(): Promise; - getApplicationDefault(callback: ADCCallback): void; - getApplicationDefault(options: RefreshOptions): Promise; - getApplicationDefault(options: RefreshOptions, callback: ADCCallback): void; - private getApplicationDefaultAsync; - /** - * Determines whether the auth layer is running on Google Compute Engine. - * @returns A promise that resolves with the boolean. - * @api private - */ - _checkIsGCE(): Promise; - /** - * Attempts to load default credentials from the environment variable path.. - * @returns Promise that resolves with the OAuth2Client or null. - * @api private - */ - _tryGetApplicationCredentialsFromEnvironmentVariable(options?: RefreshOptions): Promise; - /** - * Attempts to load default credentials from a well-known file location - * @return Promise that resolves with the OAuth2Client or null. - * @api private - */ - _tryGetApplicationCredentialsFromWellKnownFile(options?: RefreshOptions): Promise; - /** - * Attempts to load default credentials from a file at the given path.. - * @param filePath The path to the file to read. - * @returns Promise that resolves with the OAuth2Client - * @api private - */ - _getApplicationCredentialsFromFilePath(filePath: string, options?: RefreshOptions): Promise; - /** - * Create a credentials instance using the given input options. - * @param json The input object. - * @param options The JWT or UserRefresh options for the client - * @returns JWT or UserRefresh Client with data - */ - fromJSON(json: JWTInput, options?: RefreshOptions): JSONClient; - /** - * Return a JWT or UserRefreshClient from JavaScript object, caching both the - * object used to instantiate and the client. - * @param json The input object. - * @param options The JWT or UserRefresh options for the client - * @returns JWT or UserRefresh Client with data - */ - private _cacheClientFromJSON; - /** - * Create a credentials instance using the given input stream. - * @param inputStream The input stream. - * @param callback Optional callback. - */ - fromStream(inputStream: stream.Readable): Promise; - fromStream(inputStream: stream.Readable, callback: CredentialCallback): void; - fromStream(inputStream: stream.Readable, options: RefreshOptions): Promise; - fromStream(inputStream: stream.Readable, options: RefreshOptions, callback: CredentialCallback): void; - private fromStreamAsync; - /** - * Create a credentials instance using the given API key string. - * @param apiKey The API key string - * @param options An optional options object. - * @returns A JWT loaded from the key - */ - fromAPIKey(apiKey: string, options?: RefreshOptions): JWT; - /** - * Determines whether the current operating system is Windows. - * @api private - */ - private _isWindows; - /** - * Run the Google Cloud SDK command that prints the default project ID - */ - private getDefaultServiceProjectId; - /** - * Loads the project id from environment variables. - * @api private - */ - private getProductionProjectId; - /** - * Loads the project id from the GOOGLE_APPLICATION_CREDENTIALS json file. - * @api private - */ - private getFileProjectId; - /** - * Gets the project ID from external account client if available. - */ - private getExternalAccountClientProjectId; - /** - * Gets the Compute Engine project ID if it can be inferred. - */ - private getGCEProjectId; - /** - * The callback function handles a credential object that contains the - * client_email and private_key (if exists). - * getCredentials checks for these values from the user JSON at first. - * If it doesn't exist, and the environment is on GCE, it gets the - * client_email from the cloud metadata server. - * @param callback Callback that handles the credential object that contains - * a client_email and optional private key, or the error. - * returned - */ - getCredentials(): Promise; - getCredentials(callback: (err: Error | null, credentials?: CredentialBody) => void): void; - private getCredentialsAsync; - /** - * Automatically obtain a client based on the provided configuration. If no - * options were passed, use Application Default Credentials. - */ - getClient(options?: DeprecatedGetClientOptions): Promise; - /** - * Creates a client which will fetch an ID token for authorization. - * @param targetAudience the audience for the fetched ID token. - * @returns IdTokenClient for making HTTP calls authenticated with ID tokens. - */ - getIdTokenClient(targetAudience: string): Promise; - /** - * Automatically obtain application default credentials, and return - * an access token for making requests. - */ - getAccessToken(): Promise; - /** - * Obtain the HTTP headers that will provide authorization for a given - * request. - */ - getRequestHeaders(url?: string): Promise; - /** - * Obtain credentials for a request, then attach the appropriate headers to - * the request options. - * @param opts Axios or Request options on which to attach the headers - */ - authorizeRequest(opts: { - url?: string; - uri?: string; - headers?: Headers; - }): Promise<{ - url?: string | undefined; - uri?: string | undefined; - headers?: Headers | undefined; - }>; - /** - * Automatically obtain application default credentials, and make an - * HTTP request using the given options. - * @param opts Axios request options for the HTTP request. - */ - request(opts: GaxiosOptions): Promise>; - /** - * Determine the compute environment in which the code is running. - */ - getEnv(): Promise; - /** - * Sign the given data with the current private key, or go out - * to the IAM API to sign it. - * @param data The data to be signed. - */ - sign(data: string): Promise; -} -export interface SignBlobResponse { - keyId: string; - signedBlob: string; -} -export {}; diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/googleauth.js b/reverse_engineering/node_modules/google-auth-library/build/src/auth/googleauth.js deleted file mode 100644 index 3d28d55..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/googleauth.js +++ /dev/null @@ -1,656 +0,0 @@ -"use strict"; -// Copyright 2019 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GoogleAuth = exports.CLOUD_SDK_CLIENT_ID = void 0; -const child_process_1 = require("child_process"); -const fs = require("fs"); -const gcpMetadata = require("gcp-metadata"); -const os = require("os"); -const path = require("path"); -const crypto_1 = require("../crypto/crypto"); -const transporters_1 = require("../transporters"); -const computeclient_1 = require("./computeclient"); -const idtokenclient_1 = require("./idtokenclient"); -const envDetect_1 = require("./envDetect"); -const jwtclient_1 = require("./jwtclient"); -const refreshclient_1 = require("./refreshclient"); -const externalclient_1 = require("./externalclient"); -const baseexternalclient_1 = require("./baseexternalclient"); -exports.CLOUD_SDK_CLIENT_ID = '764086051850-6qr4p6gpi6hn506pt8ejuq83di341hur.apps.googleusercontent.com'; -class GoogleAuth { - constructor(opts) { - /** - * Caches a value indicating whether the auth layer is running on Google - * Compute Engine. - * @private - */ - this.checkIsGCE = undefined; - // To save the contents of the JSON credential file - this.jsonContent = null; - this.cachedCredential = null; - opts = opts || {}; - this._cachedProjectId = opts.projectId || null; - this.keyFilename = opts.keyFilename || opts.keyFile; - this.scopes = opts.scopes; - this.jsonContent = opts.credentials || null; - this.clientOptions = opts.clientOptions; - } - // Note: this properly is only public to satisify unit tests. - // https://github.com/Microsoft/TypeScript/issues/5228 - get isGCE() { - return this.checkIsGCE; - } - // GAPIC client libraries should always use self-signed JWTs. The following - // variables are set on the JWT client in order to indicate the type of library, - // and sign the JWT with the correct audience and scopes (if not supplied). - setGapicJWTValues(client) { - client.defaultServicePath = this.defaultServicePath; - client.useJWTAccessAlways = this.useJWTAccessAlways; - client.defaultScopes = this.defaultScopes; - } - getProjectId(callback) { - if (callback) { - this.getProjectIdAsync().then(r => callback(null, r), callback); - } - else { - return this.getProjectIdAsync(); - } - } - getProjectIdAsync() { - if (this._cachedProjectId) { - return Promise.resolve(this._cachedProjectId); - } - // In implicit case, supports three environments. In order of precedence, - // the implicit environments are: - // - GCLOUD_PROJECT or GOOGLE_CLOUD_PROJECT environment variable - // - GOOGLE_APPLICATION_CREDENTIALS JSON file - // - Cloud SDK: `gcloud config config-helper --format json` - // - GCE project ID from metadata server) - if (!this._getDefaultProjectIdPromise) { - // TODO: refactor the below code so that it doesn't mix and match - // promises and async/await. - this._getDefaultProjectIdPromise = new Promise( - // eslint-disable-next-line no-async-promise-executor - async (resolve, reject) => { - try { - const projectId = this.getProductionProjectId() || - (await this.getFileProjectId()) || - (await this.getDefaultServiceProjectId()) || - (await this.getGCEProjectId()) || - (await this.getExternalAccountClientProjectId()); - this._cachedProjectId = projectId; - if (!projectId) { - throw new Error('Unable to detect a Project Id in the current environment. \n' + - 'To learn more about authentication and Google APIs, visit: \n' + - 'https://cloud.google.com/docs/authentication/getting-started'); - } - resolve(projectId); - } - catch (e) { - reject(e); - } - }); - } - return this._getDefaultProjectIdPromise; - } - /** - * @returns Any scopes (user-specified or default scopes specified by the - * client library) that need to be set on the current Auth client. - */ - getAnyScopes() { - return this.scopes || this.defaultScopes; - } - getApplicationDefault(optionsOrCallback = {}, callback) { - let options; - if (typeof optionsOrCallback === 'function') { - callback = optionsOrCallback; - } - else { - options = optionsOrCallback; - } - if (callback) { - this.getApplicationDefaultAsync(options).then(r => callback(null, r.credential, r.projectId), callback); - } - else { - return this.getApplicationDefaultAsync(options); - } - } - async getApplicationDefaultAsync(options = {}) { - // If we've already got a cached credential, just return it. - if (this.cachedCredential) { - return { - credential: this.cachedCredential, - projectId: await this.getProjectIdAsync(), - }; - } - let credential; - let projectId; - // Check for the existence of a local environment variable pointing to the - // location of the credential file. This is typically used in local - // developer scenarios. - credential = - await this._tryGetApplicationCredentialsFromEnvironmentVariable(options); - if (credential) { - if (credential instanceof jwtclient_1.JWT) { - credential.scopes = this.scopes; - } - else if (credential instanceof baseexternalclient_1.BaseExternalAccountClient) { - credential.scopes = this.getAnyScopes(); - } - this.cachedCredential = credential; - projectId = await this.getProjectId(); - return { credential, projectId }; - } - // Look in the well-known credential file location. - credential = await this._tryGetApplicationCredentialsFromWellKnownFile(options); - if (credential) { - if (credential instanceof jwtclient_1.JWT) { - credential.scopes = this.scopes; - } - else if (credential instanceof baseexternalclient_1.BaseExternalAccountClient) { - credential.scopes = this.getAnyScopes(); - } - this.cachedCredential = credential; - projectId = await this.getProjectId(); - return { credential, projectId }; - } - // Determine if we're running on GCE. - let isGCE; - try { - isGCE = await this._checkIsGCE(); - } - catch (e) { - e.message = `Unexpected error determining execution environment: ${e.message}`; - throw e; - } - if (!isGCE) { - // We failed to find the default credentials. Bail out with an error. - throw new Error('Could not load the default credentials. Browse to https://cloud.google.com/docs/authentication/getting-started for more information.'); - } - // For GCE, just return a default ComputeClient. It will take care of - // the rest. - options.scopes = this.getAnyScopes(); - this.cachedCredential = new computeclient_1.Compute(options); - projectId = await this.getProjectId(); - return { projectId, credential: this.cachedCredential }; - } - /** - * Determines whether the auth layer is running on Google Compute Engine. - * @returns A promise that resolves with the boolean. - * @api private - */ - async _checkIsGCE() { - if (this.checkIsGCE === undefined) { - this.checkIsGCE = await gcpMetadata.isAvailable(); - } - return this.checkIsGCE; - } - /** - * Attempts to load default credentials from the environment variable path.. - * @returns Promise that resolves with the OAuth2Client or null. - * @api private - */ - async _tryGetApplicationCredentialsFromEnvironmentVariable(options) { - const credentialsPath = process.env['GOOGLE_APPLICATION_CREDENTIALS'] || - process.env['google_application_credentials']; - if (!credentialsPath || credentialsPath.length === 0) { - return null; - } - try { - return this._getApplicationCredentialsFromFilePath(credentialsPath, options); - } - catch (e) { - e.message = `Unable to read the credential file specified by the GOOGLE_APPLICATION_CREDENTIALS environment variable: ${e.message}`; - throw e; - } - } - /** - * Attempts to load default credentials from a well-known file location - * @return Promise that resolves with the OAuth2Client or null. - * @api private - */ - async _tryGetApplicationCredentialsFromWellKnownFile(options) { - // First, figure out the location of the file, depending upon the OS type. - let location = null; - if (this._isWindows()) { - // Windows - location = process.env['APPDATA']; - } - else { - // Linux or Mac - const home = process.env['HOME']; - if (home) { - location = path.join(home, '.config'); - } - } - // If we found the root path, expand it. - if (location) { - location = path.join(location, 'gcloud', 'application_default_credentials.json'); - if (!fs.existsSync(location)) { - location = null; - } - } - // The file does not exist. - if (!location) { - return null; - } - // The file seems to exist. Try to use it. - const client = await this._getApplicationCredentialsFromFilePath(location, options); - return client; - } - /** - * Attempts to load default credentials from a file at the given path.. - * @param filePath The path to the file to read. - * @returns Promise that resolves with the OAuth2Client - * @api private - */ - async _getApplicationCredentialsFromFilePath(filePath, options = {}) { - // Make sure the path looks like a string. - if (!filePath || filePath.length === 0) { - throw new Error('The file path is invalid.'); - } - // Make sure there is a file at the path. lstatSync will throw if there is - // nothing there. - try { - // Resolve path to actual file in case of symlink. Expect a thrown error - // if not resolvable. - filePath = fs.realpathSync(filePath); - if (!fs.lstatSync(filePath).isFile()) { - throw new Error(); - } - } - catch (err) { - err.message = `The file at ${filePath} does not exist, or it is not a file. ${err.message}`; - throw err; - } - // Now open a read stream on the file, and parse it. - const readStream = fs.createReadStream(filePath); - return this.fromStream(readStream, options); - } - /** - * Create a credentials instance using the given input options. - * @param json The input object. - * @param options The JWT or UserRefresh options for the client - * @returns JWT or UserRefresh Client with data - */ - fromJSON(json, options) { - let client; - if (!json) { - throw new Error('Must pass in a JSON object containing the Google auth settings.'); - } - options = options || {}; - if (json.type === 'authorized_user') { - client = new refreshclient_1.UserRefreshClient(options); - client.fromJSON(json); - } - else if (json.type === baseexternalclient_1.EXTERNAL_ACCOUNT_TYPE) { - client = externalclient_1.ExternalAccountClient.fromJSON(json, options); - client.scopes = this.getAnyScopes(); - } - else { - options.scopes = this.scopes; - client = new jwtclient_1.JWT(options); - this.setGapicJWTValues(client); - client.fromJSON(json); - } - return client; - } - /** - * Return a JWT or UserRefreshClient from JavaScript object, caching both the - * object used to instantiate and the client. - * @param json The input object. - * @param options The JWT or UserRefresh options for the client - * @returns JWT or UserRefresh Client with data - */ - _cacheClientFromJSON(json, options) { - let client; - // create either a UserRefreshClient or JWT client. - options = options || {}; - if (json.type === 'authorized_user') { - client = new refreshclient_1.UserRefreshClient(options); - client.fromJSON(json); - } - else if (json.type === baseexternalclient_1.EXTERNAL_ACCOUNT_TYPE) { - client = externalclient_1.ExternalAccountClient.fromJSON(json, options); - client.scopes = this.getAnyScopes(); - } - else { - options.scopes = this.scopes; - client = new jwtclient_1.JWT(options); - this.setGapicJWTValues(client); - client.fromJSON(json); - } - // cache both raw data used to instantiate client and client itself. - this.jsonContent = json; - this.cachedCredential = client; - return this.cachedCredential; - } - fromStream(inputStream, optionsOrCallback = {}, callback) { - let options = {}; - if (typeof optionsOrCallback === 'function') { - callback = optionsOrCallback; - } - else { - options = optionsOrCallback; - } - if (callback) { - this.fromStreamAsync(inputStream, options).then(r => callback(null, r), callback); - } - else { - return this.fromStreamAsync(inputStream, options); - } - } - fromStreamAsync(inputStream, options) { - return new Promise((resolve, reject) => { - if (!inputStream) { - throw new Error('Must pass in a stream containing the Google auth settings.'); - } - let s = ''; - inputStream - .setEncoding('utf8') - .on('error', reject) - .on('data', chunk => (s += chunk)) - .on('end', () => { - try { - try { - const data = JSON.parse(s); - const r = this._cacheClientFromJSON(data, options); - return resolve(r); - } - catch (err) { - // If we failed parsing this.keyFileName, assume that it - // is a PEM or p12 certificate: - if (!this.keyFilename) - throw err; - const client = new jwtclient_1.JWT({ - ...this.clientOptions, - keyFile: this.keyFilename, - }); - this.cachedCredential = client; - this.setGapicJWTValues(client); - return resolve(client); - } - } - catch (err) { - return reject(err); - } - }); - }); - } - /** - * Create a credentials instance using the given API key string. - * @param apiKey The API key string - * @param options An optional options object. - * @returns A JWT loaded from the key - */ - fromAPIKey(apiKey, options) { - options = options || {}; - const client = new jwtclient_1.JWT(options); - client.fromAPIKey(apiKey); - return client; - } - /** - * Determines whether the current operating system is Windows. - * @api private - */ - _isWindows() { - const sys = os.platform(); - if (sys && sys.length >= 3) { - if (sys.substring(0, 3).toLowerCase() === 'win') { - return true; - } - } - return false; - } - /** - * Run the Google Cloud SDK command that prints the default project ID - */ - async getDefaultServiceProjectId() { - return new Promise(resolve => { - child_process_1.exec('gcloud config config-helper --format json', (err, stdout) => { - if (!err && stdout) { - try { - const projectId = JSON.parse(stdout).configuration.properties.core.project; - resolve(projectId); - return; - } - catch (e) { - // ignore errors - } - } - resolve(null); - }); - }); - } - /** - * Loads the project id from environment variables. - * @api private - */ - getProductionProjectId() { - return (process.env['GCLOUD_PROJECT'] || - process.env['GOOGLE_CLOUD_PROJECT'] || - process.env['gcloud_project'] || - process.env['google_cloud_project']); - } - /** - * Loads the project id from the GOOGLE_APPLICATION_CREDENTIALS json file. - * @api private - */ - async getFileProjectId() { - if (this.cachedCredential) { - // Try to read the project ID from the cached credentials file - return this.cachedCredential.projectId; - } - // Ensure the projectId is loaded from the keyFile if available. - if (this.keyFilename) { - const creds = await this.getClient(); - if (creds && creds.projectId) { - return creds.projectId; - } - } - // Try to load a credentials file and read its project ID - const r = await this._tryGetApplicationCredentialsFromEnvironmentVariable(); - if (r) { - return r.projectId; - } - else { - return null; - } - } - /** - * Gets the project ID from external account client if available. - */ - async getExternalAccountClientProjectId() { - if (!this.jsonContent || this.jsonContent.type !== baseexternalclient_1.EXTERNAL_ACCOUNT_TYPE) { - return null; - } - const creds = await this.getClient(); - // Do not suppress the underlying error, as the error could contain helpful - // information for debugging and fixing. This is especially true for - // external account creds as in order to get the project ID, the following - // operations have to succeed: - // 1. Valid credentials file should be supplied. - // 2. Ability to retrieve access tokens from STS token exchange API. - // 3. Ability to exchange for service account impersonated credentials (if - // enabled). - // 4. Ability to get project info using the access token from step 2 or 3. - // Without surfacing the error, it is harder for developers to determine - // which step went wrong. - return await creds.getProjectId(); - } - /** - * Gets the Compute Engine project ID if it can be inferred. - */ - async getGCEProjectId() { - try { - const r = await gcpMetadata.project('project-id'); - return r; - } - catch (e) { - // Ignore any errors - return null; - } - } - getCredentials(callback) { - if (callback) { - this.getCredentialsAsync().then(r => callback(null, r), callback); - } - else { - return this.getCredentialsAsync(); - } - } - async getCredentialsAsync() { - await this.getClient(); - if (this.jsonContent) { - const credential = { - client_email: this.jsonContent.client_email, - private_key: this.jsonContent.private_key, - }; - return credential; - } - const isGCE = await this._checkIsGCE(); - if (!isGCE) { - throw new Error('Unknown error.'); - } - // For GCE, return the service account details from the metadata server - // NOTE: The trailing '/' at the end of service-accounts/ is very important! - // The GCF metadata server doesn't respect querystring params if this / is - // not included. - const data = await gcpMetadata.instance({ - property: 'service-accounts/', - params: { recursive: 'true' }, - }); - if (!data || !data.default || !data.default.email) { - throw new Error('Failure from metadata server.'); - } - return { client_email: data.default.email }; - } - /** - * Automatically obtain a client based on the provided configuration. If no - * options were passed, use Application Default Credentials. - */ - async getClient(options) { - if (options) { - throw new Error('Passing options to getClient is forbidden in v5.0.0. Use new GoogleAuth(opts) instead.'); - } - if (!this.cachedCredential) { - if (this.jsonContent) { - this._cacheClientFromJSON(this.jsonContent, this.clientOptions); - } - else if (this.keyFilename) { - const filePath = path.resolve(this.keyFilename); - const stream = fs.createReadStream(filePath); - await this.fromStreamAsync(stream, this.clientOptions); - } - else { - await this.getApplicationDefaultAsync(this.clientOptions); - } - } - return this.cachedCredential; - } - /** - * Creates a client which will fetch an ID token for authorization. - * @param targetAudience the audience for the fetched ID token. - * @returns IdTokenClient for making HTTP calls authenticated with ID tokens. - */ - async getIdTokenClient(targetAudience) { - const client = await this.getClient(); - if (!('fetchIdToken' in client)) { - throw new Error('Cannot fetch ID token in this environment, use GCE or set the GOOGLE_APPLICATION_CREDENTIALS environment variable to a service account credentials JSON file.'); - } - return new idtokenclient_1.IdTokenClient({ targetAudience, idTokenProvider: client }); - } - /** - * Automatically obtain application default credentials, and return - * an access token for making requests. - */ - async getAccessToken() { - const client = await this.getClient(); - return (await client.getAccessToken()).token; - } - /** - * Obtain the HTTP headers that will provide authorization for a given - * request. - */ - async getRequestHeaders(url) { - const client = await this.getClient(); - return client.getRequestHeaders(url); - } - /** - * Obtain credentials for a request, then attach the appropriate headers to - * the request options. - * @param opts Axios or Request options on which to attach the headers - */ - async authorizeRequest(opts) { - opts = opts || {}; - const url = opts.url || opts.uri; - const client = await this.getClient(); - const headers = await client.getRequestHeaders(url); - opts.headers = Object.assign(opts.headers || {}, headers); - return opts; - } - /** - * Automatically obtain application default credentials, and make an - * HTTP request using the given options. - * @param opts Axios request options for the HTTP request. - */ - // eslint-disable-next-line @typescript-eslint/no-explicit-any - async request(opts) { - const client = await this.getClient(); - return client.request(opts); - } - /** - * Determine the compute environment in which the code is running. - */ - getEnv() { - return envDetect_1.getEnv(); - } - /** - * Sign the given data with the current private key, or go out - * to the IAM API to sign it. - * @param data The data to be signed. - */ - async sign(data) { - const client = await this.getClient(); - const crypto = crypto_1.createCrypto(); - if (client instanceof jwtclient_1.JWT && client.key) { - const sign = await crypto.sign(client.key, data); - return sign; - } - const projectId = await this.getProjectId(); - if (!projectId) { - throw new Error('Cannot sign data without a project ID.'); - } - const creds = await this.getCredentials(); - if (!creds.client_email) { - throw new Error('Cannot sign data without `client_email`.'); - } - const url = `https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/${creds.client_email}:signBlob`; - const res = await this.request({ - method: 'POST', - url, - data: { - payload: crypto.encodeBase64StringUtf8(data), - }, - }); - return res.data.signedBlob; - } -} -exports.GoogleAuth = GoogleAuth; -/** - * Export DefaultTransporter as a static property of the class. - */ -GoogleAuth.DefaultTransporter = transporters_1.DefaultTransporter; -//# sourceMappingURL=googleauth.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/iam.d.ts b/reverse_engineering/node_modules/google-auth-library/build/src/auth/iam.d.ts deleted file mode 100644 index 93470a4..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/iam.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -export interface RequestMetadata { - 'x-goog-iam-authority-selector': string; - 'x-goog-iam-authorization-token': string; -} -export declare class IAMAuth { - selector: string; - token: string; - /** - * IAM credentials. - * - * @param selector the iam authority selector - * @param token the token - * @constructor - */ - constructor(selector: string, token: string); - /** - * Acquire the HTTP headers required to make an authenticated request. - */ - getRequestHeaders(): { - 'x-goog-iam-authority-selector': string; - 'x-goog-iam-authorization-token': string; - }; -} diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/iam.js b/reverse_engineering/node_modules/google-auth-library/build/src/auth/iam.js deleted file mode 100644 index bc4d0e0..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/iam.js +++ /dev/null @@ -1,42 +0,0 @@ -"use strict"; -// Copyright 2014 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -exports.IAMAuth = void 0; -class IAMAuth { - /** - * IAM credentials. - * - * @param selector the iam authority selector - * @param token the token - * @constructor - */ - constructor(selector, token) { - this.selector = selector; - this.token = token; - this.selector = selector; - this.token = token; - } - /** - * Acquire the HTTP headers required to make an authenticated request. - */ - getRequestHeaders() { - return { - 'x-goog-iam-authority-selector': this.selector, - 'x-goog-iam-authorization-token': this.token, - }; - } -} -exports.IAMAuth = IAMAuth; -//# sourceMappingURL=iam.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/identitypoolclient.d.ts b/reverse_engineering/node_modules/google-auth-library/build/src/auth/identitypoolclient.d.ts deleted file mode 100644 index 503f92a..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/identitypoolclient.d.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { BaseExternalAccountClient, BaseExternalAccountClientOptions } from './baseexternalclient'; -import { RefreshOptions } from './oauth2client'; -declare type SubjectTokenFormatType = 'json' | 'text'; -/** - * Url-sourced/file-sourced credentials json interface. - * This is used for K8s and Azure workloads. - */ -export interface IdentityPoolClientOptions extends BaseExternalAccountClientOptions { - credential_source: { - file?: string; - url?: string; - headers?: { - [key: string]: string; - }; - format?: { - type: SubjectTokenFormatType; - subject_token_field_name?: string; - }; - }; -} -/** - * Defines the Url-sourced and file-sourced external account clients mainly - * used for K8s and Azure workloads. - */ -export declare class IdentityPoolClient extends BaseExternalAccountClient { - private readonly file?; - private readonly url?; - private readonly headers?; - private readonly formatType; - private readonly formatSubjectTokenFieldName?; - /** - * Instantiate an IdentityPoolClient instance using the provided JSON - * object loaded from an external account credentials file. - * An error is thrown if the credential is not a valid file-sourced or - * url-sourced credential. - * @param options The external account options object typically loaded - * from the external account JSON credential file. - * @param additionalOptions Optional additional behavior customization - * options. These currently customize expiration threshold time and - * whether to retry on 401/403 API request errors. - */ - constructor(options: IdentityPoolClientOptions, additionalOptions?: RefreshOptions); - /** - * Triggered when a external subject token is needed to be exchanged for a GCP - * access token via GCP STS endpoint. - * This uses the `options.credential_source` object to figure out how - * to retrieve the token using the current environment. In this case, - * this either retrieves the local credential from a file location (k8s - * workload) or by sending a GET request to a local metadata server (Azure - * workloads). - * @return A promise that resolves with the external subject token. - */ - retrieveSubjectToken(): Promise; - /** - * Looks up the external subject token in the file path provided and - * resolves with that token. - * @param file The file path where the external credential is located. - * @param formatType The token file or URL response type (JSON or text). - * @param formatSubjectTokenFieldName For JSON response types, this is the - * subject_token field name. For Azure, this is access_token. For text - * response types, this is ignored. - * @return A promise that resolves with the external subject token. - */ - private getTokenFromFile; - /** - * Sends a GET request to the URL provided and resolves with the returned - * external subject token. - * @param url The URL to call to retrieve the subject token. This is typically - * a local metadata server. - * @param formatType The token file or URL response type (JSON or text). - * @param formatSubjectTokenFieldName For JSON response types, this is the - * subject_token field name. For Azure, this is access_token. For text - * response types, this is ignored. - * @param headers The optional additional headers to send with the request to - * the metadata server url. - * @return A promise that resolves with the external subject token. - */ - private getTokenFromUrl; -} -export {}; diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/identitypoolclient.js b/reverse_engineering/node_modules/google-auth-library/build/src/auth/identitypoolclient.js deleted file mode 100644 index 60f64ca..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/identitypoolclient.js +++ /dev/null @@ -1,154 +0,0 @@ -"use strict"; -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -var _a, _b, _c; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.IdentityPoolClient = void 0; -const fs = require("fs"); -const util_1 = require("util"); -const baseexternalclient_1 = require("./baseexternalclient"); -// fs.readfile is undefined in browser karma tests causing -// `npm run browser-test` to fail as test.oauth2.ts imports this file via -// src/index.ts. -// Fallback to void function to avoid promisify throwing a TypeError. -const readFile = util_1.promisify((_a = fs.readFile) !== null && _a !== void 0 ? _a : (() => { })); -const realpath = util_1.promisify((_b = fs.realpath) !== null && _b !== void 0 ? _b : (() => { })); -const lstat = util_1.promisify((_c = fs.lstat) !== null && _c !== void 0 ? _c : (() => { })); -/** - * Defines the Url-sourced and file-sourced external account clients mainly - * used for K8s and Azure workloads. - */ -class IdentityPoolClient extends baseexternalclient_1.BaseExternalAccountClient { - /** - * Instantiate an IdentityPoolClient instance using the provided JSON - * object loaded from an external account credentials file. - * An error is thrown if the credential is not a valid file-sourced or - * url-sourced credential. - * @param options The external account options object typically loaded - * from the external account JSON credential file. - * @param additionalOptions Optional additional behavior customization - * options. These currently customize expiration threshold time and - * whether to retry on 401/403 API request errors. - */ - constructor(options, additionalOptions) { - var _a, _b; - super(options, additionalOptions); - this.file = options.credential_source.file; - this.url = options.credential_source.url; - this.headers = options.credential_source.headers; - if (!this.file && !this.url) { - throw new Error('No valid Identity Pool "credential_source" provided'); - } - // Text is the default format type. - this.formatType = ((_a = options.credential_source.format) === null || _a === void 0 ? void 0 : _a.type) || 'text'; - this.formatSubjectTokenFieldName = (_b = options.credential_source.format) === null || _b === void 0 ? void 0 : _b.subject_token_field_name; - if (this.formatType !== 'json' && this.formatType !== 'text') { - throw new Error(`Invalid credential_source format "${this.formatType}"`); - } - if (this.formatType === 'json' && !this.formatSubjectTokenFieldName) { - throw new Error('Missing subject_token_field_name for JSON credential_source format'); - } - } - /** - * Triggered when a external subject token is needed to be exchanged for a GCP - * access token via GCP STS endpoint. - * This uses the `options.credential_source` object to figure out how - * to retrieve the token using the current environment. In this case, - * this either retrieves the local credential from a file location (k8s - * workload) or by sending a GET request to a local metadata server (Azure - * workloads). - * @return A promise that resolves with the external subject token. - */ - async retrieveSubjectToken() { - if (this.file) { - return await this.getTokenFromFile(this.file, this.formatType, this.formatSubjectTokenFieldName); - } - return await this.getTokenFromUrl(this.url, this.formatType, this.formatSubjectTokenFieldName, this.headers); - } - /** - * Looks up the external subject token in the file path provided and - * resolves with that token. - * @param file The file path where the external credential is located. - * @param formatType The token file or URL response type (JSON or text). - * @param formatSubjectTokenFieldName For JSON response types, this is the - * subject_token field name. For Azure, this is access_token. For text - * response types, this is ignored. - * @return A promise that resolves with the external subject token. - */ - async getTokenFromFile(filePath, formatType, formatSubjectTokenFieldName) { - // Make sure there is a file at the path. lstatSync will throw if there is - // nothing there. - try { - // Resolve path to actual file in case of symlink. Expect a thrown error - // if not resolvable. - filePath = await realpath(filePath); - if (!(await lstat(filePath)).isFile()) { - throw new Error(); - } - } - catch (err) { - err.message = `The file at ${filePath} does not exist, or it is not a file. ${err.message}`; - throw err; - } - let subjectToken; - const rawText = await readFile(filePath, { encoding: 'utf8' }); - if (formatType === 'text') { - subjectToken = rawText; - } - else if (formatType === 'json' && formatSubjectTokenFieldName) { - const json = JSON.parse(rawText); - subjectToken = json[formatSubjectTokenFieldName]; - } - if (!subjectToken) { - throw new Error('Unable to parse the subject_token from the credential_source file'); - } - return subjectToken; - } - /** - * Sends a GET request to the URL provided and resolves with the returned - * external subject token. - * @param url The URL to call to retrieve the subject token. This is typically - * a local metadata server. - * @param formatType The token file or URL response type (JSON or text). - * @param formatSubjectTokenFieldName For JSON response types, this is the - * subject_token field name. For Azure, this is access_token. For text - * response types, this is ignored. - * @param headers The optional additional headers to send with the request to - * the metadata server url. - * @return A promise that resolves with the external subject token. - */ - async getTokenFromUrl(url, formatType, formatSubjectTokenFieldName, headers) { - const opts = { - url, - method: 'GET', - headers, - responseType: formatType, - }; - let subjectToken; - if (formatType === 'text') { - const response = await this.transporter.request(opts); - subjectToken = response.data; - } - else if (formatType === 'json' && formatSubjectTokenFieldName) { - const response = await this.transporter.request(opts); - subjectToken = response.data[formatSubjectTokenFieldName]; - } - if (!subjectToken) { - throw new Error('Unable to parse the subject_token from the credential_source URL'); - } - return subjectToken; - } -} -exports.IdentityPoolClient = IdentityPoolClient; -//# sourceMappingURL=identitypoolclient.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/idtokenclient.d.ts b/reverse_engineering/node_modules/google-auth-library/build/src/auth/idtokenclient.d.ts deleted file mode 100644 index bad975c..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/idtokenclient.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { OAuth2Client, RequestMetadataResponse } from './oauth2client'; -export interface IdTokenOptions { - /** - * The client to make the request to fetch an ID token. - */ - idTokenProvider: IdTokenProvider; - /** - * The audience to use when requesting an ID token. - */ - targetAudience: string; -} -export interface IdTokenProvider { - fetchIdToken: (targetAudience: string) => Promise; -} -export declare class IdTokenClient extends OAuth2Client { - targetAudience: string; - idTokenProvider: IdTokenProvider; - /** - * Google ID Token client - * - * Retrieve access token from the metadata server. - * See: https://developers.google.com/compute/docs/authentication - */ - constructor(options: IdTokenOptions); - protected getRequestMetadataAsync(url?: string | null): Promise; - private getIdTokenExpiryDate; -} diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/idtokenclient.js b/reverse_engineering/node_modules/google-auth-library/build/src/auth/idtokenclient.js deleted file mode 100644 index 16dfaab..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/idtokenclient.js +++ /dev/null @@ -1,55 +0,0 @@ -"use strict"; -// Copyright 2020 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -exports.IdTokenClient = void 0; -const oauth2client_1 = require("./oauth2client"); -class IdTokenClient extends oauth2client_1.OAuth2Client { - /** - * Google ID Token client - * - * Retrieve access token from the metadata server. - * See: https://developers.google.com/compute/docs/authentication - */ - constructor(options) { - super(); - this.targetAudience = options.targetAudience; - this.idTokenProvider = options.idTokenProvider; - } - async getRequestMetadataAsync( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - url) { - if (!this.credentials.id_token || - (this.credentials.expiry_date || 0) < Date.now()) { - const idToken = await this.idTokenProvider.fetchIdToken(this.targetAudience); - this.credentials = { - id_token: idToken, - expiry_date: this.getIdTokenExpiryDate(idToken), - }; - } - const headers = { - Authorization: 'Bearer ' + this.credentials.id_token, - }; - return { headers }; - } - getIdTokenExpiryDate(idToken) { - const payloadB64 = idToken.split('.')[1]; - if (payloadB64) { - const payload = JSON.parse(Buffer.from(payloadB64, 'base64').toString('ascii')); - return payload.exp * 1000; - } - } -} -exports.IdTokenClient = IdTokenClient; -//# sourceMappingURL=idtokenclient.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/impersonated.d.ts b/reverse_engineering/node_modules/google-auth-library/build/src/auth/impersonated.d.ts deleted file mode 100644 index f117118..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/impersonated.d.ts +++ /dev/null @@ -1,93 +0,0 @@ -/** - * Copyright 2021 Google LLC - * - * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { GetTokenResponse, OAuth2Client, RefreshOptions } from './oauth2client'; -import { AuthClient } from './authclient'; -export interface ImpersonatedOptions extends RefreshOptions { - /** - * Client used to perform exchange for impersonated client. - */ - sourceClient?: AuthClient; - /** - * The service account to impersonate. - */ - targetPrincipal?: string; - /** - * Scopes to request during the authorization grant. - */ - targetScopes?: string[]; - /** - * The chained list of delegates required to grant the final access_token. - */ - delegates?: string[]; - /** - * Number of seconds the delegated credential should be valid. - */ - lifetime?: number | 3600; - /** - * API endpoint to fetch token from. - */ - endpoint?: string; -} -export interface TokenResponse { - accessToken: string; - expireTime: string; -} -export declare class Impersonated extends OAuth2Client { - private sourceClient; - private targetPrincipal; - private targetScopes; - private delegates; - private lifetime; - private endpoint; - /** - * Impersonated service account credentials. - * - * Create a new access token by impersonating another service account. - * - * Impersonated Credentials allowing credentials issued to a user or - * service account to impersonate another. The source project using - * Impersonated Credentials must enable the "IAMCredentials" API. - * Also, the target service account must grant the orginating principal - * the "Service Account Token Creator" IAM role. - * - * @param {object} options - The configuration object. - * @param {object} [options.sourceClient] the source credential used as to - * acquire the impersonated credentials. - * @param {string} [options.targetPrincipal] the service account to - * impersonate. - * @param {string[]} [options.delegates] the chained list of delegates - * required to grant the final access_token. If set, the sequence of - * identities must have "Service Account Token Creator" capability granted to - * the preceding identity. For example, if set to [serviceAccountB, - * serviceAccountC], the sourceCredential must have the Token Creator role on - * serviceAccountB. serviceAccountB must have the Token Creator on - * serviceAccountC. Finally, C must have Token Creator on target_principal. - * If left unset, sourceCredential must have that role on targetPrincipal. - * @param {string[]} [options.targetScopes] scopes to request during the - * authorization grant. - * @param {number} [options.lifetime] number of seconds the delegated - * credential should be valid for up to 3600 seconds by default, or 43,200 - * seconds by extending the token's lifetime, see: - * https://cloud.google.com/iam/docs/creating-short-lived-service-account-credentials#sa-credentials-oauth - * @param {string} [options.endpoint] api endpoint override. - */ - constructor(options?: ImpersonatedOptions); - /** - * Refreshes the access token. - * @param refreshToken Unused parameter - */ - protected refreshToken(refreshToken?: string | null): Promise; -} diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/impersonated.js b/reverse_engineering/node_modules/google-auth-library/build/src/auth/impersonated.js deleted file mode 100644 index 3953bbd..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/impersonated.js +++ /dev/null @@ -1,110 +0,0 @@ -"use strict"; -/** - * Copyright 2021 Google LLC - * - * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Impersonated = void 0; -const oauth2client_1 = require("./oauth2client"); -class Impersonated extends oauth2client_1.OAuth2Client { - /** - * Impersonated service account credentials. - * - * Create a new access token by impersonating another service account. - * - * Impersonated Credentials allowing credentials issued to a user or - * service account to impersonate another. The source project using - * Impersonated Credentials must enable the "IAMCredentials" API. - * Also, the target service account must grant the orginating principal - * the "Service Account Token Creator" IAM role. - * - * @param {object} options - The configuration object. - * @param {object} [options.sourceClient] the source credential used as to - * acquire the impersonated credentials. - * @param {string} [options.targetPrincipal] the service account to - * impersonate. - * @param {string[]} [options.delegates] the chained list of delegates - * required to grant the final access_token. If set, the sequence of - * identities must have "Service Account Token Creator" capability granted to - * the preceding identity. For example, if set to [serviceAccountB, - * serviceAccountC], the sourceCredential must have the Token Creator role on - * serviceAccountB. serviceAccountB must have the Token Creator on - * serviceAccountC. Finally, C must have Token Creator on target_principal. - * If left unset, sourceCredential must have that role on targetPrincipal. - * @param {string[]} [options.targetScopes] scopes to request during the - * authorization grant. - * @param {number} [options.lifetime] number of seconds the delegated - * credential should be valid for up to 3600 seconds by default, or 43,200 - * seconds by extending the token's lifetime, see: - * https://cloud.google.com/iam/docs/creating-short-lived-service-account-credentials#sa-credentials-oauth - * @param {string} [options.endpoint] api endpoint override. - */ - constructor(options = {}) { - var _a, _b, _c, _d, _e, _f; - super(options); - this.credentials = { - expiry_date: 1, - refresh_token: 'impersonated-placeholder', - }; - this.sourceClient = (_a = options.sourceClient) !== null && _a !== void 0 ? _a : new oauth2client_1.OAuth2Client(); - this.targetPrincipal = (_b = options.targetPrincipal) !== null && _b !== void 0 ? _b : ''; - this.delegates = (_c = options.delegates) !== null && _c !== void 0 ? _c : []; - this.targetScopes = (_d = options.targetScopes) !== null && _d !== void 0 ? _d : []; - this.lifetime = (_e = options.lifetime) !== null && _e !== void 0 ? _e : 3600; - this.endpoint = (_f = options.endpoint) !== null && _f !== void 0 ? _f : 'https://iamcredentials.googleapis.com'; - } - /** - * Refreshes the access token. - * @param refreshToken Unused parameter - */ - async refreshToken(refreshToken) { - var _a, _b, _c, _d, _e, _f; - try { - await this.sourceClient.getAccessToken(); - const name = 'projects/-/serviceAccounts/' + this.targetPrincipal; - const u = `${this.endpoint}/v1/${name}:generateAccessToken`; - const body = { - delegates: this.delegates, - scope: this.targetScopes, - lifetime: this.lifetime + 's', - }; - const res = await this.sourceClient.request({ - url: u, - data: body, - method: 'POST', - }); - const tokenResponse = res.data; - this.credentials.access_token = tokenResponse.accessToken; - this.credentials.expiry_date = Date.parse(tokenResponse.expireTime); - return { - tokens: this.credentials, - res, - }; - } - catch (error) { - const status = (_c = (_b = (_a = error === null || error === void 0 ? void 0 : error.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.error) === null || _c === void 0 ? void 0 : _c.status; - const message = (_f = (_e = (_d = error === null || error === void 0 ? void 0 : error.response) === null || _d === void 0 ? void 0 : _d.data) === null || _e === void 0 ? void 0 : _e.error) === null || _f === void 0 ? void 0 : _f.message; - if (status && message) { - error.message = `${status}: unable to impersonate: ${message}`; - throw error; - } - else { - error.message = `unable to impersonate: ${error}`; - throw error; - } - } - } -} -exports.Impersonated = Impersonated; -//# sourceMappingURL=impersonated.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/jwtaccess.d.ts b/reverse_engineering/node_modules/google-auth-library/build/src/auth/jwtaccess.d.ts deleted file mode 100644 index 12b522a..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/jwtaccess.d.ts +++ /dev/null @@ -1,55 +0,0 @@ -/// -import * as stream from 'stream'; -import { JWTInput } from './credentials'; -import { Headers } from './oauth2client'; -export interface Claims { - [index: string]: string; -} -export declare class JWTAccess { - email?: string | null; - key?: string | null; - keyId?: string | null; - projectId?: string; - eagerRefreshThresholdMillis: number; - private cache; - /** - * JWTAccess service account credentials. - * - * Create a new access token by using the credential to create a new JWT token - * that's recognized as the access token. - * - * @param email the service account email address. - * @param key the private key that will be used to sign the token. - * @param keyId the ID of the private key used to sign the token. - */ - constructor(email?: string | null, key?: string | null, keyId?: string | null, eagerRefreshThresholdMillis?: number); - /** - * Get a non-expired access token, after refreshing if necessary. - * - * @param url The URI being authorized. - * @param additionalClaims An object with a set of additional claims to - * include in the payload. - * @returns An object that includes the authorization header. - */ - getRequestHeaders(url: string, additionalClaims?: Claims): Headers; - /** - * Returns an expiration time for the JWT token. - * - * @param iat The issued at time for the JWT. - * @returns An expiration time for the JWT. - */ - private static getExpirationTime; - /** - * Create a JWTAccess credentials instance using the given input options. - * @param json The input object. - */ - fromJSON(json: JWTInput): void; - /** - * Create a JWTAccess credentials instance using the given input stream. - * @param inputStream The input stream. - * @param callback Optional callback. - */ - fromStream(inputStream: stream.Readable): Promise; - fromStream(inputStream: stream.Readable, callback: (err?: Error) => void): void; - private fromStreamAsync; -} diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/jwtaccess.js b/reverse_engineering/node_modules/google-auth-library/build/src/auth/jwtaccess.js deleted file mode 100644 index 793db81..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/jwtaccess.js +++ /dev/null @@ -1,157 +0,0 @@ -"use strict"; -// Copyright 2015 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -exports.JWTAccess = void 0; -const jws = require("jws"); -const LRU = require("lru-cache"); -const DEFAULT_HEADER = { - alg: 'RS256', - typ: 'JWT', -}; -class JWTAccess { - /** - * JWTAccess service account credentials. - * - * Create a new access token by using the credential to create a new JWT token - * that's recognized as the access token. - * - * @param email the service account email address. - * @param key the private key that will be used to sign the token. - * @param keyId the ID of the private key used to sign the token. - */ - constructor(email, key, keyId, eagerRefreshThresholdMillis) { - this.cache = new LRU({ - max: 500, - maxAge: 60 * 60 * 1000, - }); - this.email = email; - this.key = key; - this.keyId = keyId; - this.eagerRefreshThresholdMillis = eagerRefreshThresholdMillis !== null && eagerRefreshThresholdMillis !== void 0 ? eagerRefreshThresholdMillis : 5 * 60 * 1000; - } - /** - * Get a non-expired access token, after refreshing if necessary. - * - * @param url The URI being authorized. - * @param additionalClaims An object with a set of additional claims to - * include in the payload. - * @returns An object that includes the authorization header. - */ - getRequestHeaders(url, additionalClaims) { - // Return cached authorization headers, unless we are within - // eagerRefreshThresholdMillis ms of them expiring: - const cachedToken = this.cache.get(url); - const now = Date.now(); - if (cachedToken && - cachedToken.expiration - now > this.eagerRefreshThresholdMillis) { - return cachedToken.headers; - } - const iat = Math.floor(Date.now() / 1000); - const exp = JWTAccess.getExpirationTime(iat); - // The payload used for signed JWT headers has: - // iss == sub == - // aud == - const defaultClaims = { - iss: this.email, - sub: this.email, - aud: url, - exp, - iat, - }; - // if additionalClaims are provided, ensure they do not collide with - // other required claims. - if (additionalClaims) { - for (const claim in defaultClaims) { - if (additionalClaims[claim]) { - throw new Error(`The '${claim}' property is not allowed when passing additionalClaims. This claim is included in the JWT by default.`); - } - } - } - const header = this.keyId - ? { ...DEFAULT_HEADER, kid: this.keyId } - : DEFAULT_HEADER; - const payload = Object.assign(defaultClaims, additionalClaims); - // Sign the jwt and add it to the cache - const signedJWT = jws.sign({ header, payload, secret: this.key }); - const headers = { Authorization: `Bearer ${signedJWT}` }; - this.cache.set(url, { - expiration: exp * 1000, - headers, - }); - return headers; - } - /** - * Returns an expiration time for the JWT token. - * - * @param iat The issued at time for the JWT. - * @returns An expiration time for the JWT. - */ - static getExpirationTime(iat) { - const exp = iat + 3600; // 3600 seconds = 1 hour - return exp; - } - /** - * Create a JWTAccess credentials instance using the given input options. - * @param json The input object. - */ - fromJSON(json) { - if (!json) { - throw new Error('Must pass in a JSON object containing the service account auth settings.'); - } - if (!json.client_email) { - throw new Error('The incoming JSON object does not contain a client_email field'); - } - if (!json.private_key) { - throw new Error('The incoming JSON object does not contain a private_key field'); - } - // Extract the relevant information from the json key file. - this.email = json.client_email; - this.key = json.private_key; - this.keyId = json.private_key_id; - this.projectId = json.project_id; - } - fromStream(inputStream, callback) { - if (callback) { - this.fromStreamAsync(inputStream).then(() => callback(), callback); - } - else { - return this.fromStreamAsync(inputStream); - } - } - fromStreamAsync(inputStream) { - return new Promise((resolve, reject) => { - if (!inputStream) { - reject(new Error('Must pass in a stream containing the service account auth settings.')); - } - let s = ''; - inputStream - .setEncoding('utf8') - .on('data', chunk => (s += chunk)) - .on('error', reject) - .on('end', () => { - try { - const data = JSON.parse(s); - this.fromJSON(data); - resolve(); - } - catch (err) { - reject(err); - } - }); - }); - } -} -exports.JWTAccess = JWTAccess; -//# sourceMappingURL=jwtaccess.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/jwtclient.d.ts b/reverse_engineering/node_modules/google-auth-library/build/src/auth/jwtclient.d.ts deleted file mode 100644 index 8b4e909..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/jwtclient.d.ts +++ /dev/null @@ -1,110 +0,0 @@ -/// -import { GoogleToken } from 'gtoken'; -import * as stream from 'stream'; -import { CredentialBody, Credentials, JWTInput } from './credentials'; -import { IdTokenProvider } from './idtokenclient'; -import { GetTokenResponse, OAuth2Client, RefreshOptions, RequestMetadataResponse } from './oauth2client'; -export interface JWTOptions extends RefreshOptions { - email?: string; - keyFile?: string; - key?: string; - keyId?: string; - scopes?: string | string[]; - subject?: string; - additionalClaims?: {}; -} -export declare class JWT extends OAuth2Client implements IdTokenProvider { - email?: string; - keyFile?: string; - key?: string; - keyId?: string; - defaultScopes?: string | string[]; - scopes?: string | string[]; - scope?: string; - subject?: string; - gtoken?: GoogleToken; - additionalClaims?: {}; - useJWTAccessAlways?: boolean; - defaultServicePath?: string; - private access?; - /** - * JWT service account credentials. - * - * Retrieve access token using gtoken. - * - * @param email service account email address. - * @param keyFile path to private key file. - * @param key value of key - * @param scopes list of requested scopes or a single scope. - * @param subject impersonated account's email address. - * @param key_id the ID of the key - */ - constructor(options: JWTOptions); - constructor(email?: string, keyFile?: string, key?: string, scopes?: string | string[], subject?: string, keyId?: string); - /** - * Creates a copy of the credential with the specified scopes. - * @param scopes List of requested scopes or a single scope. - * @return The cloned instance. - */ - createScoped(scopes?: string | string[]): JWT; - /** - * Obtains the metadata to be sent with the request. - * - * @param url the URI being authorized. - */ - protected getRequestMetadataAsync(url?: string | null): Promise; - /** - * Fetches an ID token. - * @param targetAudience the audience for the fetched ID token. - */ - fetchIdToken(targetAudience: string): Promise; - /** - * Determine if there are currently scopes available. - */ - private hasUserScopes; - /** - * Are there any default or user scopes defined. - */ - private hasAnyScopes; - /** - * Get the initial access token using gToken. - * @param callback Optional callback. - * @returns Promise that resolves with credentials - */ - authorize(): Promise; - authorize(callback: (err: Error | null, result?: Credentials) => void): void; - private authorizeAsync; - /** - * Refreshes the access token. - * @param refreshToken ignored - * @private - */ - protected refreshTokenNoCache(refreshToken?: string | null): Promise; - /** - * Create a gToken if it doesn't already exist. - */ - private createGToken; - /** - * Create a JWT credentials instance using the given input options. - * @param json The input object. - */ - fromJSON(json: JWTInput): void; - /** - * Create a JWT credentials instance using the given input stream. - * @param inputStream The input stream. - * @param callback Optional callback. - */ - fromStream(inputStream: stream.Readable): Promise; - fromStream(inputStream: stream.Readable, callback: (err?: Error | null) => void): void; - private fromStreamAsync; - /** - * Creates a JWT credentials instance using an API Key for authentication. - * @param apiKey The API Key in string form. - */ - fromAPIKey(apiKey: string): void; - /** - * Using the key or keyFile on the JWT client, obtain an object that contains - * the key and the client email. - */ - getCredentials(): Promise; -} diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/jwtclient.js b/reverse_engineering/node_modules/google-auth-library/build/src/auth/jwtclient.js deleted file mode 100644 index 68c2c9d..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/jwtclient.js +++ /dev/null @@ -1,264 +0,0 @@ -"use strict"; -// Copyright 2013 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -exports.JWT = void 0; -const gtoken_1 = require("gtoken"); -const jwtaccess_1 = require("./jwtaccess"); -const oauth2client_1 = require("./oauth2client"); -class JWT extends oauth2client_1.OAuth2Client { - constructor(optionsOrEmail, keyFile, key, scopes, subject, keyId) { - const opts = optionsOrEmail && typeof optionsOrEmail === 'object' - ? optionsOrEmail - : { email: optionsOrEmail, keyFile, key, keyId, scopes, subject }; - super({ - eagerRefreshThresholdMillis: opts.eagerRefreshThresholdMillis, - forceRefreshOnFailure: opts.forceRefreshOnFailure, - }); - this.email = opts.email; - this.keyFile = opts.keyFile; - this.key = opts.key; - this.keyId = opts.keyId; - this.scopes = opts.scopes; - this.subject = opts.subject; - this.additionalClaims = opts.additionalClaims; - this.credentials = { refresh_token: 'jwt-placeholder', expiry_date: 1 }; - } - /** - * Creates a copy of the credential with the specified scopes. - * @param scopes List of requested scopes or a single scope. - * @return The cloned instance. - */ - createScoped(scopes) { - return new JWT({ - email: this.email, - keyFile: this.keyFile, - key: this.key, - keyId: this.keyId, - scopes, - subject: this.subject, - additionalClaims: this.additionalClaims, - }); - } - /** - * Obtains the metadata to be sent with the request. - * - * @param url the URI being authorized. - */ - async getRequestMetadataAsync(url) { - if (!this.apiKey && !this.hasUserScopes() && url) { - if (this.additionalClaims && - this.additionalClaims.target_audience) { - const { tokens } = await this.refreshToken(); - return { - headers: this.addSharedMetadataHeaders({ - Authorization: `Bearer ${tokens.id_token}`, - }), - }; - } - else { - // no scopes have been set, but a uri has been provided. Use JWTAccess - // credentials. - if (!this.access) { - this.access = new jwtaccess_1.JWTAccess(this.email, this.key, this.keyId, this.eagerRefreshThresholdMillis); - } - const headers = await this.access.getRequestHeaders(url, this.additionalClaims); - return { headers: this.addSharedMetadataHeaders(headers) }; - } - } - else if (this.hasAnyScopes() || this.apiKey) { - return super.getRequestMetadataAsync(url); - } - else { - // If no audience, apiKey, or scopes are provided, we should not attempt - // to populate any headers: - return { headers: {} }; - } - } - /** - * Fetches an ID token. - * @param targetAudience the audience for the fetched ID token. - */ - async fetchIdToken(targetAudience) { - // Create a new gToken for fetching an ID token - const gtoken = new gtoken_1.GoogleToken({ - iss: this.email, - sub: this.subject, - scope: this.scopes || this.defaultScopes, - keyFile: this.keyFile, - key: this.key, - additionalClaims: { target_audience: targetAudience }, - }); - await gtoken.getToken({ - forceRefresh: true, - }); - if (!gtoken.idToken) { - throw new Error('Unknown error: Failed to fetch ID token'); - } - return gtoken.idToken; - } - /** - * Determine if there are currently scopes available. - */ - hasUserScopes() { - if (!this.scopes) { - return false; - } - return this.scopes.length > 0; - } - /** - * Are there any default or user scopes defined. - */ - hasAnyScopes() { - if (this.scopes && this.scopes.length > 0) - return true; - if (this.defaultScopes && this.defaultScopes.length > 0) - return true; - return false; - } - authorize(callback) { - if (callback) { - this.authorizeAsync().then(r => callback(null, r), callback); - } - else { - return this.authorizeAsync(); - } - } - async authorizeAsync() { - const result = await this.refreshToken(); - if (!result) { - throw new Error('No result returned'); - } - this.credentials = result.tokens; - this.credentials.refresh_token = 'jwt-placeholder'; - this.key = this.gtoken.key; - this.email = this.gtoken.iss; - return result.tokens; - } - /** - * Refreshes the access token. - * @param refreshToken ignored - * @private - */ - async refreshTokenNoCache( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - refreshToken) { - const gtoken = this.createGToken(); - const token = await gtoken.getToken({ - forceRefresh: this.isTokenExpiring(), - }); - const tokens = { - access_token: token.access_token, - token_type: 'Bearer', - expiry_date: gtoken.expiresAt, - id_token: gtoken.idToken, - }; - this.emit('tokens', tokens); - return { res: null, tokens }; - } - /** - * Create a gToken if it doesn't already exist. - */ - createGToken() { - if (!this.gtoken) { - this.gtoken = new gtoken_1.GoogleToken({ - iss: this.email, - sub: this.subject, - scope: this.scopes || this.defaultScopes, - keyFile: this.keyFile, - key: this.key, - additionalClaims: this.additionalClaims, - }); - } - return this.gtoken; - } - /** - * Create a JWT credentials instance using the given input options. - * @param json The input object. - */ - fromJSON(json) { - if (!json) { - throw new Error('Must pass in a JSON object containing the service account auth settings.'); - } - if (!json.client_email) { - throw new Error('The incoming JSON object does not contain a client_email field'); - } - if (!json.private_key) { - throw new Error('The incoming JSON object does not contain a private_key field'); - } - // Extract the relevant information from the json key file. - this.email = json.client_email; - this.key = json.private_key; - this.keyId = json.private_key_id; - this.projectId = json.project_id; - this.quotaProjectId = json.quota_project_id; - } - fromStream(inputStream, callback) { - if (callback) { - this.fromStreamAsync(inputStream).then(() => callback(), callback); - } - else { - return this.fromStreamAsync(inputStream); - } - } - fromStreamAsync(inputStream) { - return new Promise((resolve, reject) => { - if (!inputStream) { - throw new Error('Must pass in a stream containing the service account auth settings.'); - } - let s = ''; - inputStream - .setEncoding('utf8') - .on('error', reject) - .on('data', chunk => (s += chunk)) - .on('end', () => { - try { - const data = JSON.parse(s); - this.fromJSON(data); - resolve(); - } - catch (e) { - reject(e); - } - }); - }); - } - /** - * Creates a JWT credentials instance using an API Key for authentication. - * @param apiKey The API Key in string form. - */ - fromAPIKey(apiKey) { - if (typeof apiKey !== 'string') { - throw new Error('Must provide an API Key string.'); - } - this.apiKey = apiKey; - } - /** - * Using the key or keyFile on the JWT client, obtain an object that contains - * the key and the client email. - */ - async getCredentials() { - if (this.key) { - return { private_key: this.key, client_email: this.email }; - } - else if (this.keyFile) { - const gtoken = this.createGToken(); - const creds = await gtoken.getCredentials(this.keyFile); - return { private_key: creds.privateKey, client_email: creds.clientEmail }; - } - throw new Error('A key or a keyFile must be provided to getCredentials.'); - } -} -exports.JWT = JWT; -//# sourceMappingURL=jwtclient.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/loginticket.d.ts b/reverse_engineering/node_modules/google-auth-library/build/src/auth/loginticket.d.ts deleted file mode 100644 index 33fd407..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/loginticket.d.ts +++ /dev/null @@ -1,140 +0,0 @@ -export declare class LoginTicket { - private envelope?; - private payload?; - /** - * Create a simple class to extract user ID from an ID Token - * - * @param {string} env Envelope of the jwt - * @param {TokenPayload} pay Payload of the jwt - * @constructor - */ - constructor(env?: string, pay?: TokenPayload); - getEnvelope(): string | undefined; - getPayload(): TokenPayload | undefined; - /** - * Create a simple class to extract user ID from an ID Token - * - * @return The user ID - */ - getUserId(): string | null; - /** - * Returns attributes from the login ticket. This can contain - * various information about the user session. - * - * @return The envelope and payload - */ - getAttributes(): { - envelope: string | undefined; - payload: TokenPayload | undefined; - }; -} -export interface TokenPayload { - /** - * The Issuer Identifier for the Issuer of the response. Always - * https://accounts.google.com or accounts.google.com for Google ID tokens. - */ - iss: string; - /** - * Access token hash. Provides validation that the access token is tied to the - * identity token. If the ID token is issued with an access token in the - * server flow, this is always included. This can be used as an alternate - * mechanism to protect against cross-site request forgery attacks, but if you - * follow Step 1 and Step 3 it is not necessary to verify the access token. - */ - at_hash?: string; - /** - * True if the user's e-mail address has been verified; otherwise false. - */ - email_verified?: boolean; - /** - * An identifier for the user, unique among all Google accounts and never - * reused. A Google account can have multiple emails at different points in - * time, but the sub value is never changed. Use sub within your application - * as the unique-identifier key for the user. - */ - sub: string; - /** - * The client_id of the authorized presenter. This claim is only needed when - * the party requesting the ID token is not the same as the audience of the ID - * token. This may be the case at Google for hybrid apps where a web - * application and Android app have a different client_id but share the same - * project. - */ - azp?: string; - /** - * The user's email address. This may not be unique and is not suitable for - * use as a primary key. Provided only if your scope included the string - * "email". - */ - email?: string; - /** - * The URL of the user's profile page. Might be provided when: - * - The request scope included the string "profile" - * - The ID token is returned from a token refresh - * - When profile claims are present, you can use them to update your app's - * user records. Note that this claim is never guaranteed to be present. - */ - profile?: string; - /** - * The URL of the user's profile picture. Might be provided when: - * - The request scope included the string "profile" - * - The ID token is returned from a token refresh - * - When picture claims are present, you can use them to update your app's - * user records. Note that this claim is never guaranteed to be present. - */ - picture?: string; - /** - * The user's full name, in a displayable form. Might be provided when: - * - The request scope included the string "profile" - * - The ID token is returned from a token refresh - * - When name claims are present, you can use them to update your app's user - * records. Note that this claim is never guaranteed to be present. - */ - name?: string; - /** - * The user's given name, in a displayable form. Might be provided when: - * - The request scope included the string "profile" - * - The ID token is returned from a token refresh - * - When name claims are present, you can use them to update your app's user - * records. Note that this claim is never guaranteed to be present. - */ - given_name?: string; - /** - * The user's family name, in a displayable form. Might be provided when: - * - The request scope included the string "profile" - * - The ID token is returned from a token refresh - * - When name claims are present, you can use them to update your app's user - * records. Note that this claim is never guaranteed to be present. - */ - family_name?: string; - /** - * Identifies the audience that this ID token is intended for. It must be one - * of the OAuth 2.0 client IDs of your application. - */ - aud: string; - /** - * The time the ID token was issued, represented in Unix time (integer - * seconds). - */ - iat: number; - /** - * The time the ID token expires, represented in Unix time (integer seconds). - */ - exp: number; - /** - * The value of the nonce supplied by your app in the authentication request. - * You should enforce protection against replay attacks by ensuring it is - * presented only once. - */ - nonce?: string; - /** - * The hosted G Suite domain of the user. Provided only if the user belongs to - * a hosted domain. - */ - hd?: string; - /** - * The user's locale, represented by a BCP 47 language tag. - * Might be provided when a name claim is present. - */ - locale?: string; -} diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/loginticket.js b/reverse_engineering/node_modules/google-auth-library/build/src/auth/loginticket.js deleted file mode 100644 index 48ffc2d..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/loginticket.js +++ /dev/null @@ -1,58 +0,0 @@ -"use strict"; -// Copyright 2014 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -exports.LoginTicket = void 0; -class LoginTicket { - /** - * Create a simple class to extract user ID from an ID Token - * - * @param {string} env Envelope of the jwt - * @param {TokenPayload} pay Payload of the jwt - * @constructor - */ - constructor(env, pay) { - this.envelope = env; - this.payload = pay; - } - getEnvelope() { - return this.envelope; - } - getPayload() { - return this.payload; - } - /** - * Create a simple class to extract user ID from an ID Token - * - * @return The user ID - */ - getUserId() { - const payload = this.getPayload(); - if (payload && payload.sub) { - return payload.sub; - } - return null; - } - /** - * Returns attributes from the login ticket. This can contain - * various information about the user session. - * - * @return The envelope and payload - */ - getAttributes() { - return { envelope: this.getEnvelope(), payload: this.getPayload() }; - } -} -exports.LoginTicket = LoginTicket; -//# sourceMappingURL=loginticket.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/oauth2client.d.ts b/reverse_engineering/node_modules/google-auth-library/build/src/auth/oauth2client.d.ts deleted file mode 100644 index 30ca850..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/oauth2client.d.ts +++ /dev/null @@ -1,502 +0,0 @@ -import { GaxiosError, GaxiosOptions, GaxiosPromise, GaxiosResponse } from 'gaxios'; -import { JwkCertificate } from '../crypto/crypto'; -import { BodyResponseCallback } from '../transporters'; -import { AuthClient } from './authclient'; -import { Credentials } from './credentials'; -import { LoginTicket } from './loginticket'; -/** - * The results from the `generateCodeVerifierAsync` method. To learn more, - * See the sample: - * https://github.com/googleapis/google-auth-library-nodejs/blob/master/samples/oauth2-codeVerifier.js - */ -export interface CodeVerifierResults { - /** - * The code verifier that will be used when calling `getToken` to obtain a new - * access token. - */ - codeVerifier: string; - /** - * The code_challenge that should be sent with the `generateAuthUrl` call - * to obtain a verifiable authentication url. - */ - codeChallenge?: string; -} -export interface Certificates { - [index: string]: string | JwkCertificate; -} -export interface PublicKeys { - [index: string]: string; -} -export interface Headers { - [index: string]: string; -} -export declare enum CodeChallengeMethod { - Plain = "plain", - S256 = "S256" -} -export declare enum CertificateFormat { - PEM = "PEM", - JWK = "JWK" -} -export interface GetTokenOptions { - code: string; - codeVerifier?: string; - /** - * The client ID for your application. The value passed into the constructor - * will be used if not provided. Must match any client_id option passed to - * a corresponding call to generateAuthUrl. - */ - client_id?: string; - /** - * Determines where the API server redirects the user after the user - * completes the authorization flow. The value passed into the constructor - * will be used if not provided. Must match any redirect_uri option passed to - * a corresponding call to generateAuthUrl. - */ - redirect_uri?: string; -} -export interface TokenInfo { - /** - * The application that is the intended user of the access token. - */ - aud: string; - /** - * This value lets you correlate profile information from multiple Google - * APIs. It is only present in the response if you included the profile scope - * in your request in step 1. The field value is an immutable identifier for - * the logged-in user that can be used to create and manage user sessions in - * your application. The identifier is the same regardless of which client ID - * is used to retrieve it. This enables multiple applications in the same - * organization to correlate profile information. - */ - user_id?: string; - /** - * An array of scopes that the user granted access to. - */ - scopes: string[]; - /** - * The datetime when the token becomes invalid. - */ - expiry_date: number; - /** - * An identifier for the user, unique among all Google accounts and never - * reused. A Google account can have multiple emails at different points in - * time, but the sub value is never changed. Use sub within your application - * as the unique-identifier key for the user. - */ - sub?: string; - /** - * The client_id of the authorized presenter. This claim is only needed when - * the party requesting the ID token is not the same as the audience of the ID - * token. This may be the case at Google for hybrid apps where a web - * application and Android app have a different client_id but share the same - * project. - */ - azp?: string; - /** - * Indicates whether your application can refresh access tokens - * when the user is not present at the browser. Valid parameter values are - * 'online', which is the default value, and 'offline'. Set the value to - * 'offline' if your application needs to refresh access tokens when the user - * is not present at the browser. This value instructs the Google - * authorization server to return a refresh token and an access token the - * first time that your application exchanges an authorization code for - * tokens. - */ - access_type?: string; - /** - * The user's email address. This value may not be unique to this user and - * is not suitable for use as a primary key. Provided only if your scope - * included the email scope value. - */ - email?: string; - /** - * True if the user's e-mail address has been verified; otherwise false. - */ - email_verified?: boolean; -} -export interface GenerateAuthUrlOpts { - /** - * Recommended. Indicates whether your application can refresh access tokens - * when the user is not present at the browser. Valid parameter values are - * 'online', which is the default value, and 'offline'. Set the value to - * 'offline' if your application needs to refresh access tokens when the user - * is not present at the browser. This value instructs the Google - * authorization server to return a refresh token and an access token the - * first time that your application exchanges an authorization code for - * tokens. - */ - access_type?: string; - /** - * The hd (hosted domain) parameter streamlines the login process for G Suite - * hosted accounts. By including the domain of the G Suite user (for example, - * mycollege.edu), you can indicate that the account selection UI should be - * optimized for accounts at that domain. To optimize for G Suite accounts - * generally instead of just one domain, use an asterisk: hd=*. - * Don't rely on this UI optimization to control who can access your app, - * as client-side requests can be modified. Be sure to validate that the - * returned ID token has an hd claim value that matches what you expect - * (e.g. mycolledge.edu). Unlike the request parameter, the ID token claim is - * contained within a security token from Google, so the value can be trusted. - */ - hd?: string; - /** - * The 'response_type' will always be set to 'CODE'. - */ - response_type?: string; - /** - * The client ID for your application. The value passed into the constructor - * will be used if not provided. You can find this value in the API Console. - */ - client_id?: string; - /** - * Determines where the API server redirects the user after the user - * completes the authorization flow. The value must exactly match one of the - * 'redirect_uri' values listed for your project in the API Console. Note that - * the http or https scheme, case, and trailing slash ('/') must all match. - * The value passed into the constructor will be used if not provided. - */ - redirect_uri?: string; - /** - * Required. A space-delimited list of scopes that identify the resources that - * your application could access on the user's behalf. These values inform the - * consent screen that Google displays to the user. Scopes enable your - * application to only request access to the resources that it needs while - * also enabling users to control the amount of access that they grant to your - * application. Thus, there is an inverse relationship between the number of - * scopes requested and the likelihood of obtaining user consent. The - * OAuth 2.0 API Scopes document provides a full list of scopes that you might - * use to access Google APIs. We recommend that your application request - * access to authorization scopes in context whenever possible. By requesting - * access to user data in context, via incremental authorization, you help - * users to more easily understand why your application needs the access it is - * requesting. - */ - scope?: string[] | string; - /** - * Recommended. Specifies any string value that your application uses to - * maintain state between your authorization request and the authorization - * server's response. The server returns the exact value that you send as a - * name=value pair in the hash (#) fragment of the 'redirect_uri' after the - * user consents to or denies your application's access request. You can use - * this parameter for several purposes, such as directing the user to the - * correct resource in your application, sending nonces, and mitigating - * cross-site request forgery. Since your redirect_uri can be guessed, using a - * state value can increase your assurance that an incoming connection is the - * result of an authentication request. If you generate a random string or - * encode the hash of a cookie or another value that captures the client's - * state, you can validate the response to additionally ensure that the - * request and response originated in the same browser, providing protection - * against attacks such as cross-site request forgery. See the OpenID Connect - * documentation for an example of how to create and confirm a state token. - */ - state?: string; - /** - * Optional. Enables applications to use incremental authorization to request - * access to additional scopes in context. If you set this parameter's value - * to true and the authorization request is granted, then the new access token - * will also cover any scopes to which the user previously granted the - * application access. See the incremental authorization section for examples. - */ - include_granted_scopes?: boolean; - /** - * Optional. If your application knows which user is trying to authenticate, - * it can use this parameter to provide a hint to the Google Authentication - * Server. The server uses the hint to simplify the login flow either by - * prefilling the email field in the sign-in form or by selecting the - * appropriate multi-login session. Set the parameter value to an email - * address or sub identifier, which is equivalent to the user's Google ID. - */ - login_hint?: string; - /** - * Optional. A space-delimited, case-sensitive list of prompts to present the - * user. If you don't specify this parameter, the user will be prompted only - * the first time your app requests access. Possible values are: - * - * 'none' - Donot display any authentication or consent screens. Must not be - * specified with other values. - * 'consent' - Prompt the user for consent. - * 'select_account' - Prompt the user to select an account. - */ - prompt?: string; - /** - * Recommended. Specifies what method was used to encode a 'code_verifier' - * that will be used during authorization code exchange. This parameter must - * be used with the 'code_challenge' parameter. The value of the - * 'code_challenge_method' defaults to "plain" if not present in the request - * that includes a 'code_challenge'. The only supported values for this - * parameter are "S256" or "plain". - */ - code_challenge_method?: CodeChallengeMethod; - /** - * Recommended. Specifies an encoded 'code_verifier' that will be used as a - * server-side challenge during authorization code exchange. This parameter - * must be used with the 'code_challenge' parameter described above. - */ - code_challenge?: string; -} -export interface GetTokenCallback { - (err: GaxiosError | null, token?: Credentials | null, res?: GaxiosResponse | null): void; -} -export interface GetTokenResponse { - tokens: Credentials; - res: GaxiosResponse | null; -} -export interface GetAccessTokenCallback { - (err: GaxiosError | null, token?: string | null, res?: GaxiosResponse | null): void; -} -export interface GetAccessTokenResponse { - token?: string | null; - res?: GaxiosResponse | null; -} -export interface RefreshAccessTokenCallback { - (err: GaxiosError | null, credentials?: Credentials | null, res?: GaxiosResponse | null): void; -} -export interface RefreshAccessTokenResponse { - credentials: Credentials; - res: GaxiosResponse | null; -} -export interface RequestMetadataResponse { - headers: Headers; - res?: GaxiosResponse | null; -} -export interface RequestMetadataCallback { - (err: GaxiosError | null, headers?: Headers, res?: GaxiosResponse | null): void; -} -export interface GetFederatedSignonCertsCallback { - (err: GaxiosError | null, certs?: Certificates, response?: GaxiosResponse | null): void; -} -export interface FederatedSignonCertsResponse { - certs: Certificates; - format: CertificateFormat; - res?: GaxiosResponse | null; -} -export interface GetIapPublicKeysCallback { - (err: GaxiosError | null, pubkeys?: PublicKeys, response?: GaxiosResponse | null): void; -} -export interface IapPublicKeysResponse { - pubkeys: PublicKeys; - res?: GaxiosResponse | null; -} -export interface RevokeCredentialsResult { - success: boolean; -} -export interface VerifyIdTokenOptions { - idToken: string; - audience?: string | string[]; - maxExpiry?: number; -} -export interface OAuth2ClientOptions extends RefreshOptions { - clientId?: string; - clientSecret?: string; - redirectUri?: string; -} -export interface RefreshOptions { - eagerRefreshThresholdMillis?: number; - forceRefreshOnFailure?: boolean; -} -export declare class OAuth2Client extends AuthClient { - private redirectUri?; - private certificateCache; - private certificateExpiry; - private certificateCacheFormat; - protected refreshTokenPromises: Map>; - _clientId?: string; - _clientSecret?: string; - apiKey?: string; - projectId?: string; - eagerRefreshThresholdMillis: number; - forceRefreshOnFailure: boolean; - /** - * Handles OAuth2 flow for Google APIs. - * - * @param clientId The authentication client ID. - * @param clientSecret The authentication client secret. - * @param redirectUri The URI to redirect to after completing the auth - * request. - * @param opts optional options for overriding the given parameters. - * @constructor - */ - constructor(options?: OAuth2ClientOptions); - constructor(clientId?: string, clientSecret?: string, redirectUri?: string); - protected static readonly GOOGLE_TOKEN_INFO_URL = "https://oauth2.googleapis.com/tokeninfo"; - /** - * The base URL for auth endpoints. - */ - private static readonly GOOGLE_OAUTH2_AUTH_BASE_URL_; - /** - * The base endpoint for token retrieval. - */ - private static readonly GOOGLE_OAUTH2_TOKEN_URL_; - /** - * The base endpoint to revoke tokens. - */ - private static readonly GOOGLE_OAUTH2_REVOKE_URL_; - /** - * Google Sign on certificates in PEM format. - */ - private static readonly GOOGLE_OAUTH2_FEDERATED_SIGNON_PEM_CERTS_URL_; - /** - * Google Sign on certificates in JWK format. - */ - private static readonly GOOGLE_OAUTH2_FEDERATED_SIGNON_JWK_CERTS_URL_; - /** - * Google Sign on certificates in JWK format. - */ - private static readonly GOOGLE_OAUTH2_IAP_PUBLIC_KEY_URL_; - /** - * Clock skew - five minutes in seconds - */ - private static readonly CLOCK_SKEW_SECS_; - /** - * Max Token Lifetime is one day in seconds - */ - private static readonly MAX_TOKEN_LIFETIME_SECS_; - /** - * The allowed oauth token issuers. - */ - private static readonly ISSUERS_; - /** - * Generates URL for consent page landing. - * @param opts Options. - * @return URL to consent page. - */ - generateAuthUrl(opts?: GenerateAuthUrlOpts): string; - generateCodeVerifier(): void; - /** - * Convenience method to automatically generate a code_verifier, and its - * resulting SHA256. If used, this must be paired with a S256 - * code_challenge_method. - * - * For a full example see: - * https://github.com/googleapis/google-auth-library-nodejs/blob/master/samples/oauth2-codeVerifier.js - */ - generateCodeVerifierAsync(): Promise; - /** - * Gets the access token for the given code. - * @param code The authorization code. - * @param callback Optional callback fn. - */ - getToken(code: string): Promise; - getToken(options: GetTokenOptions): Promise; - getToken(code: string, callback: GetTokenCallback): void; - getToken(options: GetTokenOptions, callback: GetTokenCallback): void; - private getTokenAsync; - /** - * Refreshes the access token. - * @param refresh_token Existing refresh token. - * @private - */ - protected refreshToken(refreshToken?: string | null): Promise; - protected refreshTokenNoCache(refreshToken?: string | null): Promise; - /** - * Retrieves the access token using refresh token - * - * @deprecated use getRequestHeaders instead. - * @param callback callback - */ - refreshAccessToken(): Promise; - refreshAccessToken(callback: RefreshAccessTokenCallback): void; - private refreshAccessTokenAsync; - /** - * Get a non-expired access token, after refreshing if necessary - * - * @param callback Callback to call with the access token - */ - getAccessToken(): Promise; - getAccessToken(callback: GetAccessTokenCallback): void; - private getAccessTokenAsync; - /** - * The main authentication interface. It takes an optional url which when - * present is the endpoint being accessed, and returns a Promise which - * resolves with authorization header fields. - * - * In OAuth2Client, the result has the form: - * { Authorization: 'Bearer ' } - * @param url The optional url being authorized - */ - getRequestHeaders(url?: string): Promise; - protected getRequestMetadataAsync(url?: string | null): Promise; - /** - * Generates an URL to revoke the given token. - * @param token The existing token to be revoked. - */ - static getRevokeTokenUrl(token: string): string; - /** - * Revokes the access given to token. - * @param token The existing token to be revoked. - * @param callback Optional callback fn. - */ - revokeToken(token: string): GaxiosPromise; - revokeToken(token: string, callback: BodyResponseCallback): void; - /** - * Revokes access token and clears the credentials object - * @param callback callback - */ - revokeCredentials(): GaxiosPromise; - revokeCredentials(callback: BodyResponseCallback): void; - private revokeCredentialsAsync; - /** - * Provides a request implementation with OAuth 2.0 flow. If credentials have - * a refresh_token, in cases of HTTP 401 and 403 responses, it automatically - * asks for a new access token and replays the unsuccessful request. - * @param opts Request options. - * @param callback callback. - * @return Request object - */ - request(opts: GaxiosOptions): GaxiosPromise; - request(opts: GaxiosOptions, callback: BodyResponseCallback): void; - protected requestAsync(opts: GaxiosOptions, retry?: boolean): Promise>; - /** - * Verify id token is token by checking the certs and audience - * @param options that contains all options. - * @param callback Callback supplying GoogleLogin if successful - */ - verifyIdToken(options: VerifyIdTokenOptions): Promise; - verifyIdToken(options: VerifyIdTokenOptions, callback: (err: Error | null, login?: LoginTicket) => void): void; - private verifyIdTokenAsync; - /** - * Obtains information about the provisioned access token. Especially useful - * if you want to check the scopes that were provisioned to a given token. - * - * @param accessToken Required. The Access Token for which you want to get - * user info. - */ - getTokenInfo(accessToken: string): Promise; - /** - * Gets federated sign-on certificates to use for verifying identity tokens. - * Returns certs as array structure, where keys are key ids, and values - * are certificates in either PEM or JWK format. - * @param callback Callback supplying the certificates - */ - getFederatedSignonCerts(): Promise; - getFederatedSignonCerts(callback: GetFederatedSignonCertsCallback): void; - getFederatedSignonCertsAsync(): Promise; - /** - * Gets federated sign-on certificates to use for verifying identity tokens. - * Returns certs as array structure, where keys are key ids, and values - * are certificates in either PEM or JWK format. - * @param callback Callback supplying the certificates - */ - getIapPublicKeys(): Promise; - getIapPublicKeys(callback: GetIapPublicKeysCallback): void; - getIapPublicKeysAsync(): Promise; - verifySignedJwtWithCerts(): void; - /** - * Verify the id token is signed with the correct certificate - * and is from the correct audience. - * @param jwt The jwt to verify (The ID Token in this case). - * @param certs The array of certs to test the jwt against. - * @param requiredAudience The audience to test the jwt against. - * @param issuers The allowed issuers of the jwt (Optional). - * @param maxExpiry The max expiry the certificate can be (Optional). - * @return Returns a promise resolving to LoginTicket on verification. - */ - verifySignedJwtWithCertsAsync(jwt: string, certs: Certificates | PublicKeys, requiredAudience?: string | string[], issuers?: string[], maxExpiry?: number): Promise; - /** - * Returns true if a token is expired or will expire within - * eagerRefreshThresholdMillismilliseconds. - * If there is no expiry time, assumes the token is not expired or expiring. - */ - protected isTokenExpiring(): boolean; -} diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/oauth2client.js b/reverse_engineering/node_modules/google-auth-library/build/src/auth/oauth2client.js deleted file mode 100644 index 76d3685..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/oauth2client.js +++ /dev/null @@ -1,681 +0,0 @@ -"use strict"; -// Copyright 2019 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -exports.OAuth2Client = exports.CertificateFormat = exports.CodeChallengeMethod = void 0; -const querystring = require("querystring"); -const stream = require("stream"); -const formatEcdsa = require("ecdsa-sig-formatter"); -const crypto_1 = require("../crypto/crypto"); -const authclient_1 = require("./authclient"); -const loginticket_1 = require("./loginticket"); -var CodeChallengeMethod; -(function (CodeChallengeMethod) { - CodeChallengeMethod["Plain"] = "plain"; - CodeChallengeMethod["S256"] = "S256"; -})(CodeChallengeMethod = exports.CodeChallengeMethod || (exports.CodeChallengeMethod = {})); -var CertificateFormat; -(function (CertificateFormat) { - CertificateFormat["PEM"] = "PEM"; - CertificateFormat["JWK"] = "JWK"; -})(CertificateFormat = exports.CertificateFormat || (exports.CertificateFormat = {})); -class OAuth2Client extends authclient_1.AuthClient { - constructor(optionsOrClientId, clientSecret, redirectUri) { - super(); - this.certificateCache = {}; - this.certificateExpiry = null; - this.certificateCacheFormat = CertificateFormat.PEM; - this.refreshTokenPromises = new Map(); - const opts = optionsOrClientId && typeof optionsOrClientId === 'object' - ? optionsOrClientId - : { clientId: optionsOrClientId, clientSecret, redirectUri }; - this._clientId = opts.clientId; - this._clientSecret = opts.clientSecret; - this.redirectUri = opts.redirectUri; - this.eagerRefreshThresholdMillis = - opts.eagerRefreshThresholdMillis || 5 * 60 * 1000; - this.forceRefreshOnFailure = !!opts.forceRefreshOnFailure; - } - /** - * Generates URL for consent page landing. - * @param opts Options. - * @return URL to consent page. - */ - generateAuthUrl(opts = {}) { - if (opts.code_challenge_method && !opts.code_challenge) { - throw new Error('If a code_challenge_method is provided, code_challenge must be included.'); - } - opts.response_type = opts.response_type || 'code'; - opts.client_id = opts.client_id || this._clientId; - opts.redirect_uri = opts.redirect_uri || this.redirectUri; - // Allow scopes to be passed either as array or a string - if (opts.scope instanceof Array) { - opts.scope = opts.scope.join(' '); - } - const rootUrl = OAuth2Client.GOOGLE_OAUTH2_AUTH_BASE_URL_; - return (rootUrl + - '?' + - querystring.stringify(opts)); - } - generateCodeVerifier() { - // To make the code compatible with browser SubtleCrypto we need to make - // this method async. - throw new Error('generateCodeVerifier is removed, please use generateCodeVerifierAsync instead.'); - } - /** - * Convenience method to automatically generate a code_verifier, and its - * resulting SHA256. If used, this must be paired with a S256 - * code_challenge_method. - * - * For a full example see: - * https://github.com/googleapis/google-auth-library-nodejs/blob/master/samples/oauth2-codeVerifier.js - */ - async generateCodeVerifierAsync() { - // base64 encoding uses 6 bits per character, and we want to generate128 - // characters. 6*128/8 = 96. - const crypto = crypto_1.createCrypto(); - const randomString = crypto.randomBytesBase64(96); - // The valid characters in the code_verifier are [A-Z]/[a-z]/[0-9]/ - // "-"/"."/"_"/"~". Base64 encoded strings are pretty close, so we're just - // swapping out a few chars. - const codeVerifier = randomString - .replace(/\+/g, '~') - .replace(/=/g, '_') - .replace(/\//g, '-'); - // Generate the base64 encoded SHA256 - const unencodedCodeChallenge = await crypto.sha256DigestBase64(codeVerifier); - // We need to use base64UrlEncoding instead of standard base64 - const codeChallenge = unencodedCodeChallenge - .split('=')[0] - .replace(/\+/g, '-') - .replace(/\//g, '_'); - return { codeVerifier, codeChallenge }; - } - getToken(codeOrOptions, callback) { - const options = typeof codeOrOptions === 'string' ? { code: codeOrOptions } : codeOrOptions; - if (callback) { - this.getTokenAsync(options).then(r => callback(null, r.tokens, r.res), e => callback(e, null, e.response)); - } - else { - return this.getTokenAsync(options); - } - } - async getTokenAsync(options) { - const url = OAuth2Client.GOOGLE_OAUTH2_TOKEN_URL_; - const values = { - code: options.code, - client_id: options.client_id || this._clientId, - client_secret: this._clientSecret, - redirect_uri: options.redirect_uri || this.redirectUri, - grant_type: 'authorization_code', - code_verifier: options.codeVerifier, - }; - const res = await this.transporter.request({ - method: 'POST', - url, - data: querystring.stringify(values), - headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, - }); - const tokens = res.data; - if (res.data && res.data.expires_in) { - tokens.expiry_date = new Date().getTime() + res.data.expires_in * 1000; - delete tokens.expires_in; - } - this.emit('tokens', tokens); - return { tokens, res }; - } - /** - * Refreshes the access token. - * @param refresh_token Existing refresh token. - * @private - */ - async refreshToken(refreshToken) { - if (!refreshToken) { - return this.refreshTokenNoCache(refreshToken); - } - // If a request to refresh using the same token has started, - // return the same promise. - if (this.refreshTokenPromises.has(refreshToken)) { - return this.refreshTokenPromises.get(refreshToken); - } - const p = this.refreshTokenNoCache(refreshToken).then(r => { - this.refreshTokenPromises.delete(refreshToken); - return r; - }, e => { - this.refreshTokenPromises.delete(refreshToken); - throw e; - }); - this.refreshTokenPromises.set(refreshToken, p); - return p; - } - async refreshTokenNoCache(refreshToken) { - if (!refreshToken) { - throw new Error('No refresh token is set.'); - } - const url = OAuth2Client.GOOGLE_OAUTH2_TOKEN_URL_; - const data = { - refresh_token: refreshToken, - client_id: this._clientId, - client_secret: this._clientSecret, - grant_type: 'refresh_token', - }; - // request for new token - const res = await this.transporter.request({ - method: 'POST', - url, - data: querystring.stringify(data), - headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, - }); - const tokens = res.data; - // TODO: de-duplicate this code from a few spots - if (res.data && res.data.expires_in) { - tokens.expiry_date = new Date().getTime() + res.data.expires_in * 1000; - delete tokens.expires_in; - } - this.emit('tokens', tokens); - return { tokens, res }; - } - refreshAccessToken(callback) { - if (callback) { - this.refreshAccessTokenAsync().then(r => callback(null, r.credentials, r.res), callback); - } - else { - return this.refreshAccessTokenAsync(); - } - } - async refreshAccessTokenAsync() { - const r = await this.refreshToken(this.credentials.refresh_token); - const tokens = r.tokens; - tokens.refresh_token = this.credentials.refresh_token; - this.credentials = tokens; - return { credentials: this.credentials, res: r.res }; - } - getAccessToken(callback) { - if (callback) { - this.getAccessTokenAsync().then(r => callback(null, r.token, r.res), callback); - } - else { - return this.getAccessTokenAsync(); - } - } - async getAccessTokenAsync() { - const shouldRefresh = !this.credentials.access_token || this.isTokenExpiring(); - if (shouldRefresh) { - if (!this.credentials.refresh_token) { - throw new Error('No refresh token is set.'); - } - const r = await this.refreshAccessTokenAsync(); - if (!r.credentials || (r.credentials && !r.credentials.access_token)) { - throw new Error('Could not refresh access token.'); - } - return { token: r.credentials.access_token, res: r.res }; - } - else { - return { token: this.credentials.access_token }; - } - } - /** - * The main authentication interface. It takes an optional url which when - * present is the endpoint being accessed, and returns a Promise which - * resolves with authorization header fields. - * - * In OAuth2Client, the result has the form: - * { Authorization: 'Bearer ' } - * @param url The optional url being authorized - */ - async getRequestHeaders(url) { - const headers = (await this.getRequestMetadataAsync(url)).headers; - return headers; - } - async getRequestMetadataAsync( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - url) { - const thisCreds = this.credentials; - if (!thisCreds.access_token && !thisCreds.refresh_token && !this.apiKey) { - throw new Error('No access, refresh token or API key is set.'); - } - if (thisCreds.access_token && !this.isTokenExpiring()) { - thisCreds.token_type = thisCreds.token_type || 'Bearer'; - const headers = { - Authorization: thisCreds.token_type + ' ' + thisCreds.access_token, - }; - return { headers: this.addSharedMetadataHeaders(headers) }; - } - if (this.apiKey) { - return { headers: { 'X-Goog-Api-Key': this.apiKey } }; - } - let r = null; - let tokens = null; - try { - r = await this.refreshToken(thisCreds.refresh_token); - tokens = r.tokens; - } - catch (err) { - const e = err; - if (e.response && - (e.response.status === 403 || e.response.status === 404)) { - e.message = `Could not refresh access token: ${e.message}`; - } - throw e; - } - const credentials = this.credentials; - credentials.token_type = credentials.token_type || 'Bearer'; - tokens.refresh_token = credentials.refresh_token; - this.credentials = tokens; - const headers = { - Authorization: credentials.token_type + ' ' + tokens.access_token, - }; - return { headers: this.addSharedMetadataHeaders(headers), res: r.res }; - } - /** - * Generates an URL to revoke the given token. - * @param token The existing token to be revoked. - */ - static getRevokeTokenUrl(token) { - const parameters = querystring.stringify({ token }); - return `${OAuth2Client.GOOGLE_OAUTH2_REVOKE_URL_}?${parameters}`; - } - revokeToken(token, callback) { - const opts = { - url: OAuth2Client.getRevokeTokenUrl(token), - method: 'POST', - }; - if (callback) { - this.transporter - .request(opts) - .then(r => callback(null, r), callback); - } - else { - return this.transporter.request(opts); - } - } - revokeCredentials(callback) { - if (callback) { - this.revokeCredentialsAsync().then(res => callback(null, res), callback); - } - else { - return this.revokeCredentialsAsync(); - } - } - async revokeCredentialsAsync() { - const token = this.credentials.access_token; - this.credentials = {}; - if (token) { - return this.revokeToken(token); - } - else { - throw new Error('No access token to revoke.'); - } - } - request(opts, callback) { - if (callback) { - this.requestAsync(opts).then(r => callback(null, r), e => { - return callback(e, e.response); - }); - } - else { - return this.requestAsync(opts); - } - } - async requestAsync(opts, retry = false) { - let r2; - try { - const r = await this.getRequestMetadataAsync(opts.url); - opts.headers = opts.headers || {}; - if (r.headers && r.headers['x-goog-user-project']) { - opts.headers['x-goog-user-project'] = r.headers['x-goog-user-project']; - } - if (r.headers && r.headers.Authorization) { - opts.headers.Authorization = r.headers.Authorization; - } - if (this.apiKey) { - opts.headers['X-Goog-Api-Key'] = this.apiKey; - } - r2 = await this.transporter.request(opts); - } - catch (e) { - const res = e.response; - if (res) { - const statusCode = res.status; - // Retry the request for metadata if the following criteria are true: - // - We haven't already retried. It only makes sense to retry once. - // - The response was a 401 or a 403 - // - The request didn't send a readableStream - // - An access_token and refresh_token were available, but either no - // expiry_date was available or the forceRefreshOnFailure flag is set. - // The absent expiry_date case can happen when developers stash the - // access_token and refresh_token for later use, but the access_token - // fails on the first try because it's expired. Some developers may - // choose to enable forceRefreshOnFailure to mitigate time-related - // errors. - const mayRequireRefresh = this.credentials && - this.credentials.access_token && - this.credentials.refresh_token && - (!this.credentials.expiry_date || this.forceRefreshOnFailure); - const isReadableStream = res.config.data instanceof stream.Readable; - const isAuthErr = statusCode === 401 || statusCode === 403; - if (!retry && isAuthErr && !isReadableStream && mayRequireRefresh) { - await this.refreshAccessTokenAsync(); - return this.requestAsync(opts, true); - } - } - throw e; - } - return r2; - } - verifyIdToken(options, callback) { - // This function used to accept two arguments instead of an options object. - // Check the types to help users upgrade with less pain. - // This check can be removed after a 2.0 release. - if (callback && typeof callback !== 'function') { - throw new Error('This method accepts an options object as the first parameter, which includes the idToken, audience, and maxExpiry.'); - } - if (callback) { - this.verifyIdTokenAsync(options).then(r => callback(null, r), callback); - } - else { - return this.verifyIdTokenAsync(options); - } - } - async verifyIdTokenAsync(options) { - if (!options.idToken) { - throw new Error('The verifyIdToken method requires an ID Token'); - } - const response = await this.getFederatedSignonCertsAsync(); - const login = await this.verifySignedJwtWithCertsAsync(options.idToken, response.certs, options.audience, OAuth2Client.ISSUERS_, options.maxExpiry); - return login; - } - /** - * Obtains information about the provisioned access token. Especially useful - * if you want to check the scopes that were provisioned to a given token. - * - * @param accessToken Required. The Access Token for which you want to get - * user info. - */ - async getTokenInfo(accessToken) { - const { data } = await this.transporter.request({ - method: 'POST', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - Authorization: `Bearer ${accessToken}`, - }, - url: OAuth2Client.GOOGLE_TOKEN_INFO_URL, - }); - const info = Object.assign({ - expiry_date: new Date().getTime() + data.expires_in * 1000, - scopes: data.scope.split(' '), - }, data); - delete info.expires_in; - delete info.scope; - return info; - } - getFederatedSignonCerts(callback) { - if (callback) { - this.getFederatedSignonCertsAsync().then(r => callback(null, r.certs, r.res), callback); - } - else { - return this.getFederatedSignonCertsAsync(); - } - } - async getFederatedSignonCertsAsync() { - const nowTime = new Date().getTime(); - const format = crypto_1.hasBrowserCrypto() - ? CertificateFormat.JWK - : CertificateFormat.PEM; - if (this.certificateExpiry && - nowTime < this.certificateExpiry.getTime() && - this.certificateCacheFormat === format) { - return { certs: this.certificateCache, format }; - } - let res; - let url; - switch (format) { - case CertificateFormat.PEM: - url = OAuth2Client.GOOGLE_OAUTH2_FEDERATED_SIGNON_PEM_CERTS_URL_; - break; - case CertificateFormat.JWK: - url = OAuth2Client.GOOGLE_OAUTH2_FEDERATED_SIGNON_JWK_CERTS_URL_; - break; - default: - throw new Error(`Unsupported certificate format ${format}`); - } - try { - res = await this.transporter.request({ url }); - } - catch (e) { - e.message = `Failed to retrieve verification certificates: ${e.message}`; - throw e; - } - const cacheControl = res ? res.headers['cache-control'] : undefined; - let cacheAge = -1; - if (cacheControl) { - const pattern = new RegExp('max-age=([0-9]*)'); - const regexResult = pattern.exec(cacheControl); - if (regexResult && regexResult.length === 2) { - // Cache results with max-age (in seconds) - cacheAge = Number(regexResult[1]) * 1000; // milliseconds - } - } - let certificates = {}; - switch (format) { - case CertificateFormat.PEM: - certificates = res.data; - break; - case CertificateFormat.JWK: - for (const key of res.data.keys) { - certificates[key.kid] = key; - } - break; - default: - throw new Error(`Unsupported certificate format ${format}`); - } - const now = new Date(); - this.certificateExpiry = - cacheAge === -1 ? null : new Date(now.getTime() + cacheAge); - this.certificateCache = certificates; - this.certificateCacheFormat = format; - return { certs: certificates, format, res }; - } - getIapPublicKeys(callback) { - if (callback) { - this.getIapPublicKeysAsync().then(r => callback(null, r.pubkeys, r.res), callback); - } - else { - return this.getIapPublicKeysAsync(); - } - } - async getIapPublicKeysAsync() { - let res; - const url = OAuth2Client.GOOGLE_OAUTH2_IAP_PUBLIC_KEY_URL_; - try { - res = await this.transporter.request({ url }); - } - catch (e) { - e.message = `Failed to retrieve verification certificates: ${e.message}`; - throw e; - } - return { pubkeys: res.data, res }; - } - verifySignedJwtWithCerts() { - // To make the code compatible with browser SubtleCrypto we need to make - // this method async. - throw new Error('verifySignedJwtWithCerts is removed, please use verifySignedJwtWithCertsAsync instead.'); - } - /** - * Verify the id token is signed with the correct certificate - * and is from the correct audience. - * @param jwt The jwt to verify (The ID Token in this case). - * @param certs The array of certs to test the jwt against. - * @param requiredAudience The audience to test the jwt against. - * @param issuers The allowed issuers of the jwt (Optional). - * @param maxExpiry The max expiry the certificate can be (Optional). - * @return Returns a promise resolving to LoginTicket on verification. - */ - async verifySignedJwtWithCertsAsync(jwt, certs, requiredAudience, issuers, maxExpiry) { - const crypto = crypto_1.createCrypto(); - if (!maxExpiry) { - maxExpiry = OAuth2Client.MAX_TOKEN_LIFETIME_SECS_; - } - const segments = jwt.split('.'); - if (segments.length !== 3) { - throw new Error('Wrong number of segments in token: ' + jwt); - } - const signed = segments[0] + '.' + segments[1]; - let signature = segments[2]; - let envelope; - let payload; - try { - envelope = JSON.parse(crypto.decodeBase64StringUtf8(segments[0])); - } - catch (err) { - err.message = `Can't parse token envelope: ${segments[0]}': ${err.message}`; - throw err; - } - if (!envelope) { - throw new Error("Can't parse token envelope: " + segments[0]); - } - try { - payload = JSON.parse(crypto.decodeBase64StringUtf8(segments[1])); - } - catch (err) { - err.message = `Can't parse token payload '${segments[0]}`; - throw err; - } - if (!payload) { - throw new Error("Can't parse token payload: " + segments[1]); - } - if (!Object.prototype.hasOwnProperty.call(certs, envelope.kid)) { - // If this is not present, then there's no reason to attempt verification - throw new Error('No pem found for envelope: ' + JSON.stringify(envelope)); - } - const cert = certs[envelope.kid]; - if (envelope.alg === 'ES256') { - signature = formatEcdsa.joseToDer(signature, 'ES256').toString('base64'); - } - const verified = await crypto.verify(cert, signed, signature); - if (!verified) { - throw new Error('Invalid token signature: ' + jwt); - } - if (!payload.iat) { - throw new Error('No issue time in token: ' + JSON.stringify(payload)); - } - if (!payload.exp) { - throw new Error('No expiration time in token: ' + JSON.stringify(payload)); - } - const iat = Number(payload.iat); - if (isNaN(iat)) - throw new Error('iat field using invalid format'); - const exp = Number(payload.exp); - if (isNaN(exp)) - throw new Error('exp field using invalid format'); - const now = new Date().getTime() / 1000; - if (exp >= now + maxExpiry) { - throw new Error('Expiration time too far in future: ' + JSON.stringify(payload)); - } - const earliest = iat - OAuth2Client.CLOCK_SKEW_SECS_; - const latest = exp + OAuth2Client.CLOCK_SKEW_SECS_; - if (now < earliest) { - throw new Error('Token used too early, ' + - now + - ' < ' + - earliest + - ': ' + - JSON.stringify(payload)); - } - if (now > latest) { - throw new Error('Token used too late, ' + - now + - ' > ' + - latest + - ': ' + - JSON.stringify(payload)); - } - if (issuers && issuers.indexOf(payload.iss) < 0) { - throw new Error('Invalid issuer, expected one of [' + - issuers + - '], but got ' + - payload.iss); - } - // Check the audience matches if we have one - if (typeof requiredAudience !== 'undefined' && requiredAudience !== null) { - const aud = payload.aud; - let audVerified = false; - // If the requiredAudience is an array, check if it contains token - // audience - if (requiredAudience.constructor === Array) { - audVerified = requiredAudience.indexOf(aud) > -1; - } - else { - audVerified = aud === requiredAudience; - } - if (!audVerified) { - throw new Error('Wrong recipient, payload audience != requiredAudience'); - } - } - return new loginticket_1.LoginTicket(envelope, payload); - } - /** - * Returns true if a token is expired or will expire within - * eagerRefreshThresholdMillismilliseconds. - * If there is no expiry time, assumes the token is not expired or expiring. - */ - isTokenExpiring() { - const expiryDate = this.credentials.expiry_date; - return expiryDate - ? expiryDate <= new Date().getTime() + this.eagerRefreshThresholdMillis - : false; - } -} -exports.OAuth2Client = OAuth2Client; -OAuth2Client.GOOGLE_TOKEN_INFO_URL = 'https://oauth2.googleapis.com/tokeninfo'; -/** - * The base URL for auth endpoints. - */ -OAuth2Client.GOOGLE_OAUTH2_AUTH_BASE_URL_ = 'https://accounts.google.com/o/oauth2/v2/auth'; -/** - * The base endpoint for token retrieval. - */ -OAuth2Client.GOOGLE_OAUTH2_TOKEN_URL_ = 'https://oauth2.googleapis.com/token'; -/** - * The base endpoint to revoke tokens. - */ -OAuth2Client.GOOGLE_OAUTH2_REVOKE_URL_ = 'https://oauth2.googleapis.com/revoke'; -/** - * Google Sign on certificates in PEM format. - */ -OAuth2Client.GOOGLE_OAUTH2_FEDERATED_SIGNON_PEM_CERTS_URL_ = 'https://www.googleapis.com/oauth2/v1/certs'; -/** - * Google Sign on certificates in JWK format. - */ -OAuth2Client.GOOGLE_OAUTH2_FEDERATED_SIGNON_JWK_CERTS_URL_ = 'https://www.googleapis.com/oauth2/v3/certs'; -/** - * Google Sign on certificates in JWK format. - */ -OAuth2Client.GOOGLE_OAUTH2_IAP_PUBLIC_KEY_URL_ = 'https://www.gstatic.com/iap/verify/public_key'; -/** - * Clock skew - five minutes in seconds - */ -OAuth2Client.CLOCK_SKEW_SECS_ = 300; -/** - * Max Token Lifetime is one day in seconds - */ -OAuth2Client.MAX_TOKEN_LIFETIME_SECS_ = 86400; -/** - * The allowed oauth token issuers. - */ -OAuth2Client.ISSUERS_ = [ - 'accounts.google.com', - 'https://accounts.google.com', -]; -//# sourceMappingURL=oauth2client.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/oauth2common.d.ts b/reverse_engineering/node_modules/google-auth-library/build/src/auth/oauth2common.d.ts deleted file mode 100644 index 4c380ce..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/oauth2common.d.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { GaxiosOptions } from 'gaxios'; -/** - * OAuth error codes. - * https://tools.ietf.org/html/rfc6749#section-5.2 - */ -declare type OAuthErrorCode = 'invalid_request' | 'invalid_client' | 'invalid_grant' | 'unauthorized_client' | 'unsupported_grant_type' | 'invalid_scope' | string; -/** - * The standard OAuth error response. - * https://tools.ietf.org/html/rfc6749#section-5.2 - */ -export interface OAuthErrorResponse { - error: OAuthErrorCode; - error_description?: string; - error_uri?: string; -} -/** - * OAuth client authentication types. - * https://tools.ietf.org/html/rfc6749#section-2.3 - */ -export declare type ConfidentialClientType = 'basic' | 'request-body'; -/** - * Defines the client authentication credentials for basic and request-body - * credentials. - * https://tools.ietf.org/html/rfc6749#section-2.3.1 - */ -export interface ClientAuthentication { - confidentialClientType: ConfidentialClientType; - clientId: string; - clientSecret?: string; -} -/** - * Abstract class for handling client authentication in OAuth-based - * operations. - * When request-body client authentication is used, only application/json and - * application/x-www-form-urlencoded content types for HTTP methods that support - * request bodies are supported. - */ -export declare abstract class OAuthClientAuthHandler { - private readonly clientAuthentication?; - private crypto; - /** - * Instantiates an OAuth client authentication handler. - * @param clientAuthentication The client auth credentials. - */ - constructor(clientAuthentication?: ClientAuthentication | undefined); - /** - * Applies client authentication on the OAuth request's headers or POST - * body but does not process the request. - * @param opts The GaxiosOptions whose headers or data are to be modified - * depending on the client authentication mechanism to be used. - * @param bearerToken The optional bearer token to use for authentication. - * When this is used, no client authentication credentials are needed. - */ - protected applyClientAuthenticationOptions(opts: GaxiosOptions, bearerToken?: string): void; - /** - * Applies client authentication on the request's header if either - * basic authentication or bearer token authentication is selected. - * - * @param opts The GaxiosOptions whose headers or data are to be modified - * depending on the client authentication mechanism to be used. - * @param bearerToken The optional bearer token to use for authentication. - * When this is used, no client authentication credentials are needed. - */ - private injectAuthenticatedHeaders; - /** - * Applies client authentication on the request's body if request-body - * client authentication is selected. - * - * @param opts The GaxiosOptions whose headers or data are to be modified - * depending on the client authentication mechanism to be used. - */ - private injectAuthenticatedRequestBody; -} -/** - * Converts an OAuth error response to a native JavaScript Error. - * @param resp The OAuth error response to convert to a native Error object. - * @param err The optional original error. If provided, the error properties - * will be copied to the new error. - * @return The converted native Error object. - */ -export declare function getErrorFromOAuthErrorResponse(resp: OAuthErrorResponse, err?: Error): Error; -export {}; diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/oauth2common.js b/reverse_engineering/node_modules/google-auth-library/build/src/auth/oauth2common.js deleted file mode 100644 index bd0e89f..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/oauth2common.js +++ /dev/null @@ -1,176 +0,0 @@ -"use strict"; -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getErrorFromOAuthErrorResponse = exports.OAuthClientAuthHandler = void 0; -const querystring = require("querystring"); -const crypto_1 = require("../crypto/crypto"); -/** List of HTTP methods that accept request bodies. */ -const METHODS_SUPPORTING_REQUEST_BODY = ['PUT', 'POST', 'PATCH']; -/** - * Abstract class for handling client authentication in OAuth-based - * operations. - * When request-body client authentication is used, only application/json and - * application/x-www-form-urlencoded content types for HTTP methods that support - * request bodies are supported. - */ -class OAuthClientAuthHandler { - /** - * Instantiates an OAuth client authentication handler. - * @param clientAuthentication The client auth credentials. - */ - constructor(clientAuthentication) { - this.clientAuthentication = clientAuthentication; - this.crypto = crypto_1.createCrypto(); - } - /** - * Applies client authentication on the OAuth request's headers or POST - * body but does not process the request. - * @param opts The GaxiosOptions whose headers or data are to be modified - * depending on the client authentication mechanism to be used. - * @param bearerToken The optional bearer token to use for authentication. - * When this is used, no client authentication credentials are needed. - */ - applyClientAuthenticationOptions(opts, bearerToken) { - // Inject authenticated header. - this.injectAuthenticatedHeaders(opts, bearerToken); - // Inject authenticated request body. - if (!bearerToken) { - this.injectAuthenticatedRequestBody(opts); - } - } - /** - * Applies client authentication on the request's header if either - * basic authentication or bearer token authentication is selected. - * - * @param opts The GaxiosOptions whose headers or data are to be modified - * depending on the client authentication mechanism to be used. - * @param bearerToken The optional bearer token to use for authentication. - * When this is used, no client authentication credentials are needed. - */ - injectAuthenticatedHeaders(opts, bearerToken) { - var _a; - // Bearer token prioritized higher than basic Auth. - if (bearerToken) { - opts.headers = opts.headers || {}; - Object.assign(opts.headers, { - Authorization: `Bearer ${bearerToken}}`, - }); - } - else if (((_a = this.clientAuthentication) === null || _a === void 0 ? void 0 : _a.confidentialClientType) === 'basic') { - opts.headers = opts.headers || {}; - const clientId = this.clientAuthentication.clientId; - const clientSecret = this.clientAuthentication.clientSecret || ''; - const base64EncodedCreds = this.crypto.encodeBase64StringUtf8(`${clientId}:${clientSecret}`); - Object.assign(opts.headers, { - Authorization: `Basic ${base64EncodedCreds}`, - }); - } - } - /** - * Applies client authentication on the request's body if request-body - * client authentication is selected. - * - * @param opts The GaxiosOptions whose headers or data are to be modified - * depending on the client authentication mechanism to be used. - */ - injectAuthenticatedRequestBody(opts) { - var _a; - if (((_a = this.clientAuthentication) === null || _a === void 0 ? void 0 : _a.confidentialClientType) === 'request-body') { - const method = (opts.method || 'GET').toUpperCase(); - // Inject authenticated request body. - if (METHODS_SUPPORTING_REQUEST_BODY.indexOf(method) !== -1) { - // Get content-type. - let contentType; - const headers = opts.headers || {}; - for (const key in headers) { - if (key.toLowerCase() === 'content-type' && headers[key]) { - contentType = headers[key].toLowerCase(); - break; - } - } - if (contentType === 'application/x-www-form-urlencoded') { - opts.data = opts.data || ''; - const data = querystring.parse(opts.data); - Object.assign(data, { - client_id: this.clientAuthentication.clientId, - client_secret: this.clientAuthentication.clientSecret || '', - }); - opts.data = querystring.stringify(data); - } - else if (contentType === 'application/json') { - opts.data = opts.data || {}; - Object.assign(opts.data, { - client_id: this.clientAuthentication.clientId, - client_secret: this.clientAuthentication.clientSecret || '', - }); - } - else { - throw new Error(`${contentType} content-types are not supported with ` + - `${this.clientAuthentication.confidentialClientType} ` + - 'client authentication'); - } - } - else { - throw new Error(`${method} HTTP method does not support ` + - `${this.clientAuthentication.confidentialClientType} ` + - 'client authentication'); - } - } - } -} -exports.OAuthClientAuthHandler = OAuthClientAuthHandler; -/** - * Converts an OAuth error response to a native JavaScript Error. - * @param resp The OAuth error response to convert to a native Error object. - * @param err The optional original error. If provided, the error properties - * will be copied to the new error. - * @return The converted native Error object. - */ -function getErrorFromOAuthErrorResponse(resp, err) { - // Error response. - const errorCode = resp.error; - const errorDescription = resp.error_description; - const errorUri = resp.error_uri; - let message = `Error code ${errorCode}`; - if (typeof errorDescription !== 'undefined') { - message += `: ${errorDescription}`; - } - if (typeof errorUri !== 'undefined') { - message += ` - ${errorUri}`; - } - const newError = new Error(message); - // Copy properties from original error to newly generated error. - if (err) { - const keys = Object.keys(err); - if (err.stack) { - // Copy error.stack if available. - keys.push('stack'); - } - keys.forEach(key => { - // Do not overwrite the message field. - if (key !== 'message') { - Object.defineProperty(newError, key, { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - value: err[key], - writable: false, - enumerable: true, - }); - } - }); - } - return newError; -} -exports.getErrorFromOAuthErrorResponse = getErrorFromOAuthErrorResponse; -//# sourceMappingURL=oauth2common.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/refreshclient.d.ts b/reverse_engineering/node_modules/google-auth-library/build/src/auth/refreshclient.d.ts deleted file mode 100644 index 65a588d..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/refreshclient.d.ts +++ /dev/null @@ -1,43 +0,0 @@ -/// -import * as stream from 'stream'; -import { JWTInput } from './credentials'; -import { GetTokenResponse, OAuth2Client, RefreshOptions } from './oauth2client'; -export interface UserRefreshClientOptions extends RefreshOptions { - clientId?: string; - clientSecret?: string; - refreshToken?: string; -} -export declare class UserRefreshClient extends OAuth2Client { - _refreshToken?: string | null; - /** - * User Refresh Token credentials. - * - * @param clientId The authentication client ID. - * @param clientSecret The authentication client secret. - * @param refreshToken The authentication refresh token. - */ - constructor(clientId?: string, clientSecret?: string, refreshToken?: string); - constructor(options: UserRefreshClientOptions); - constructor(clientId?: string, clientSecret?: string, refreshToken?: string); - /** - * Refreshes the access token. - * @param refreshToken An ignored refreshToken.. - * @param callback Optional callback. - */ - protected refreshTokenNoCache(refreshToken?: string | null): Promise; - /** - * Create a UserRefreshClient credentials instance using the given input - * options. - * @param json The input object. - */ - fromJSON(json: JWTInput): void; - /** - * Create a UserRefreshClient credentials instance using the given input - * stream. - * @param inputStream The input stream. - * @param callback Optional callback. - */ - fromStream(inputStream: stream.Readable): Promise; - fromStream(inputStream: stream.Readable, callback: (err?: Error) => void): void; - private fromStreamAsync; -} diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/refreshclient.js b/reverse_engineering/node_modules/google-auth-library/build/src/auth/refreshclient.js deleted file mode 100644 index 6e6eeae..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/refreshclient.js +++ /dev/null @@ -1,107 +0,0 @@ -"use strict"; -// Copyright 2015 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UserRefreshClient = void 0; -const oauth2client_1 = require("./oauth2client"); -class UserRefreshClient extends oauth2client_1.OAuth2Client { - constructor(optionsOrClientId, clientSecret, refreshToken, eagerRefreshThresholdMillis, forceRefreshOnFailure) { - const opts = optionsOrClientId && typeof optionsOrClientId === 'object' - ? optionsOrClientId - : { - clientId: optionsOrClientId, - clientSecret, - refreshToken, - eagerRefreshThresholdMillis, - forceRefreshOnFailure, - }; - super({ - clientId: opts.clientId, - clientSecret: opts.clientSecret, - eagerRefreshThresholdMillis: opts.eagerRefreshThresholdMillis, - forceRefreshOnFailure: opts.forceRefreshOnFailure, - }); - this._refreshToken = opts.refreshToken; - this.credentials.refresh_token = opts.refreshToken; - } - /** - * Refreshes the access token. - * @param refreshToken An ignored refreshToken.. - * @param callback Optional callback. - */ - async refreshTokenNoCache( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - refreshToken) { - return super.refreshTokenNoCache(this._refreshToken); - } - /** - * Create a UserRefreshClient credentials instance using the given input - * options. - * @param json The input object. - */ - fromJSON(json) { - if (!json) { - throw new Error('Must pass in a JSON object containing the user refresh token'); - } - if (json.type !== 'authorized_user') { - throw new Error('The incoming JSON object does not have the "authorized_user" type'); - } - if (!json.client_id) { - throw new Error('The incoming JSON object does not contain a client_id field'); - } - if (!json.client_secret) { - throw new Error('The incoming JSON object does not contain a client_secret field'); - } - if (!json.refresh_token) { - throw new Error('The incoming JSON object does not contain a refresh_token field'); - } - this._clientId = json.client_id; - this._clientSecret = json.client_secret; - this._refreshToken = json.refresh_token; - this.credentials.refresh_token = json.refresh_token; - this.quotaProjectId = json.quota_project_id; - } - fromStream(inputStream, callback) { - if (callback) { - this.fromStreamAsync(inputStream).then(() => callback(), callback); - } - else { - return this.fromStreamAsync(inputStream); - } - } - async fromStreamAsync(inputStream) { - return new Promise((resolve, reject) => { - if (!inputStream) { - return reject(new Error('Must pass in a stream containing the user refresh token.')); - } - let s = ''; - inputStream - .setEncoding('utf8') - .on('error', reject) - .on('data', chunk => (s += chunk)) - .on('end', () => { - try { - const data = JSON.parse(s); - this.fromJSON(data); - return resolve(); - } - catch (err) { - return reject(err); - } - }); - }); - } -} -exports.UserRefreshClient = UserRefreshClient; -//# sourceMappingURL=refreshclient.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/stscredentials.d.ts b/reverse_engineering/node_modules/google-auth-library/build/src/auth/stscredentials.d.ts deleted file mode 100644 index cbc3f95..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/stscredentials.d.ts +++ /dev/null @@ -1,114 +0,0 @@ -import { GaxiosResponse } from 'gaxios'; -import { Headers } from './oauth2client'; -import { ClientAuthentication, OAuthClientAuthHandler } from './oauth2common'; -/** - * Defines the interface needed to initialize an StsCredentials instance. - * The interface does not directly map to the spec and instead is converted - * to be compliant with the JavaScript style guide. This is because this is - * instantiated internally. - * StsCredentials implement the OAuth 2.0 token exchange based on - * https://tools.ietf.org/html/rfc8693. - * Request options are defined in - * https://tools.ietf.org/html/rfc8693#section-2.1 - */ -export interface StsCredentialsOptions { - /** - * REQUIRED. The value "urn:ietf:params:oauth:grant-type:token-exchange" - * indicates that a token exchange is being performed. - */ - grantType: string; - /** - * OPTIONAL. A URI that indicates the target service or resource where the - * client intends to use the requested security token. - */ - resource?: string; - /** - * OPTIONAL. The logical name of the target service where the client - * intends to use the requested security token. This serves a purpose - * similar to the "resource" parameter but with the client providing a - * logical name for the target service. - */ - audience?: string; - /** - * OPTIONAL. A list of space-delimited, case-sensitive strings, as defined - * in Section 3.3 of [RFC6749], that allow the client to specify the desired - * scope of the requested security token in the context of the service or - * resource where the token will be used. - */ - scope?: string[]; - /** - * OPTIONAL. An identifier, as described in Section 3 of [RFC8693], eg. - * "urn:ietf:params:oauth:token-type:access_token" for the type of the - * requested security token. - */ - requestedTokenType?: string; - /** - * REQUIRED. A security token that represents the identity of the party on - * behalf of whom the request is being made. - */ - subjectToken: string; - /** - * REQUIRED. An identifier, as described in Section 3 of [RFC8693], that - * indicates the type of the security token in the "subject_token" parameter. - */ - subjectTokenType: string; - actingParty?: { - /** - * OPTIONAL. A security token that represents the identity of the acting - * party. Typically, this will be the party that is authorized to use the - * requested security token and act on behalf of the subject. - */ - actorToken: string; - /** - * An identifier, as described in Section 3, that indicates the type of the - * security token in the "actor_token" parameter. This is REQUIRED when the - * "actor_token" parameter is present in the request but MUST NOT be - * included otherwise. - */ - actorTokenType: string; - }; -} -/** - * Defines the OAuth 2.0 token exchange successful response based on - * https://tools.ietf.org/html/rfc8693#section-2.2.1 - */ -export interface StsSuccessfulResponse { - access_token: string; - issued_token_type: string; - token_type: string; - expires_in?: number; - refresh_token?: string; - scope?: string; - res?: GaxiosResponse | null; -} -/** - * Implements the OAuth 2.0 token exchange based on - * https://tools.ietf.org/html/rfc8693 - */ -export declare class StsCredentials extends OAuthClientAuthHandler { - private readonly tokenExchangeEndpoint; - private transporter; - /** - * Initializes an STS credentials instance. - * @param tokenExchangeEndpoint The token exchange endpoint. - * @param clientAuthentication The client authentication credentials if - * available. - */ - constructor(tokenExchangeEndpoint: string, clientAuthentication?: ClientAuthentication); - /** - * Exchanges the provided token for another type of token based on the - * rfc8693 spec. - * @param stsCredentialsOptions The token exchange options used to populate - * the token exchange request. - * @param additionalHeaders Optional additional headers to pass along the - * request. - * @param options Optional additional GCP-specific non-spec defined options - * to send with the request. - * Example: `&options=${encodeUriComponent(JSON.stringified(options))}` - * @return A promise that resolves with the token exchange response containing - * the requested token and its expiration time. - */ - exchangeToken(stsCredentialsOptions: StsCredentialsOptions, additionalHeaders?: Headers, options?: { - [key: string]: any; - }): Promise; -} diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/auth/stscredentials.js b/reverse_engineering/node_modules/google-auth-library/build/src/auth/stscredentials.js deleted file mode 100644 index 0f770d4..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/auth/stscredentials.js +++ /dev/null @@ -1,108 +0,0 @@ -"use strict"; -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -exports.StsCredentials = void 0; -const querystring = require("querystring"); -const transporters_1 = require("../transporters"); -const oauth2common_1 = require("./oauth2common"); -/** - * Implements the OAuth 2.0 token exchange based on - * https://tools.ietf.org/html/rfc8693 - */ -class StsCredentials extends oauth2common_1.OAuthClientAuthHandler { - /** - * Initializes an STS credentials instance. - * @param tokenExchangeEndpoint The token exchange endpoint. - * @param clientAuthentication The client authentication credentials if - * available. - */ - constructor(tokenExchangeEndpoint, clientAuthentication) { - super(clientAuthentication); - this.tokenExchangeEndpoint = tokenExchangeEndpoint; - this.transporter = new transporters_1.DefaultTransporter(); - } - /** - * Exchanges the provided token for another type of token based on the - * rfc8693 spec. - * @param stsCredentialsOptions The token exchange options used to populate - * the token exchange request. - * @param additionalHeaders Optional additional headers to pass along the - * request. - * @param options Optional additional GCP-specific non-spec defined options - * to send with the request. - * Example: `&options=${encodeUriComponent(JSON.stringified(options))}` - * @return A promise that resolves with the token exchange response containing - * the requested token and its expiration time. - */ - async exchangeToken(stsCredentialsOptions, additionalHeaders, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - options) { - var _a, _b, _c; - const values = { - grant_type: stsCredentialsOptions.grantType, - resource: stsCredentialsOptions.resource, - audience: stsCredentialsOptions.audience, - scope: (_a = stsCredentialsOptions.scope) === null || _a === void 0 ? void 0 : _a.join(' '), - requested_token_type: stsCredentialsOptions.requestedTokenType, - subject_token: stsCredentialsOptions.subjectToken, - subject_token_type: stsCredentialsOptions.subjectTokenType, - actor_token: (_b = stsCredentialsOptions.actingParty) === null || _b === void 0 ? void 0 : _b.actorToken, - actor_token_type: (_c = stsCredentialsOptions.actingParty) === null || _c === void 0 ? void 0 : _c.actorTokenType, - // Non-standard GCP-specific options. - options: options && JSON.stringify(options), - }; - // Remove undefined fields. - Object.keys(values).forEach(key => { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - if (typeof values[key] === 'undefined') { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - delete values[key]; - } - }); - const headers = { - 'Content-Type': 'application/x-www-form-urlencoded', - }; - // Inject additional STS headers if available. - Object.assign(headers, additionalHeaders || {}); - const opts = { - url: this.tokenExchangeEndpoint, - method: 'POST', - headers, - data: querystring.stringify(values), - responseType: 'json', - }; - // Apply OAuth client authentication. - this.applyClientAuthenticationOptions(opts); - try { - const response = await this.transporter.request(opts); - // Successful response. - const stsSuccessfulResponse = response.data; - stsSuccessfulResponse.res = response; - return stsSuccessfulResponse; - } - catch (error) { - // Translate error to OAuthError. - if (error.response) { - throw oauth2common_1.getErrorFromOAuthErrorResponse(error.response.data, - // Preserve other fields from the original error. - error); - } - // Request could fail before the server responds. - throw error; - } - } -} -exports.StsCredentials = StsCredentials; -//# sourceMappingURL=stscredentials.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/crypto/browser/crypto.d.ts b/reverse_engineering/node_modules/google-auth-library/build/src/crypto/browser/crypto.d.ts deleted file mode 100644 index e0ed1ae..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/crypto/browser/crypto.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Crypto, JwkCertificate } from '../crypto'; -export declare class BrowserCrypto implements Crypto { - constructor(); - sha256DigestBase64(str: string): Promise; - randomBytesBase64(count: number): string; - private static padBase64; - verify(pubkey: JwkCertificate, data: string, signature: string): Promise; - sign(privateKey: JwkCertificate, data: string): Promise; - decodeBase64StringUtf8(base64: string): string; - encodeBase64StringUtf8(text: string): string; - /** - * Computes the SHA-256 hash of the provided string. - * @param str The plain text string to hash. - * @return A promise that resolves with the SHA-256 hash of the provided - * string in hexadecimal encoding. - */ - sha256DigestHex(str: string): Promise; - /** - * Computes the HMAC hash of a message using the provided crypto key and the - * SHA-256 algorithm. - * @param key The secret crypto key in utf-8 or ArrayBuffer format. - * @param msg The plain text message. - * @return A promise that resolves with the HMAC-SHA256 hash in ArrayBuffer - * format. - */ - signWithHmacSha256(key: string | ArrayBuffer, msg: string): Promise; -} diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/crypto/browser/crypto.js b/reverse_engineering/node_modules/google-auth-library/build/src/crypto/browser/crypto.js deleted file mode 100644 index c651f94..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/crypto/browser/crypto.js +++ /dev/null @@ -1,141 +0,0 @@ -"use strict"; -// Copyright 2019 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/* global window */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BrowserCrypto = void 0; -// This file implements crypto functions we need using in-browser -// SubtleCrypto interface `window.crypto.subtle`. -const base64js = require("base64-js"); -// Not all browsers support `TextEncoder`. The following `require` will -// provide a fast UTF8-only replacement for those browsers that don't support -// text encoding natively. -// eslint-disable-next-line node/no-unsupported-features/node-builtins -if (typeof process === 'undefined' && typeof TextEncoder === 'undefined') { - require('fast-text-encoding'); -} -const crypto_1 = require("../crypto"); -class BrowserCrypto { - constructor() { - if (typeof window === 'undefined' || - window.crypto === undefined || - window.crypto.subtle === undefined) { - throw new Error("SubtleCrypto not found. Make sure it's an https:// website."); - } - } - async sha256DigestBase64(str) { - // SubtleCrypto digest() method is async, so we must make - // this method async as well. - // To calculate SHA256 digest using SubtleCrypto, we first - // need to convert an input string to an ArrayBuffer: - // eslint-disable-next-line node/no-unsupported-features/node-builtins - const inputBuffer = new TextEncoder().encode(str); - // Result is ArrayBuffer as well. - const outputBuffer = await window.crypto.subtle.digest('SHA-256', inputBuffer); - return base64js.fromByteArray(new Uint8Array(outputBuffer)); - } - randomBytesBase64(count) { - const array = new Uint8Array(count); - window.crypto.getRandomValues(array); - return base64js.fromByteArray(array); - } - static padBase64(base64) { - // base64js requires padding, so let's add some '=' - while (base64.length % 4 !== 0) { - base64 += '='; - } - return base64; - } - async verify(pubkey, data, signature) { - const algo = { - name: 'RSASSA-PKCS1-v1_5', - hash: { name: 'SHA-256' }, - }; - // eslint-disable-next-line node/no-unsupported-features/node-builtins - const dataArray = new TextEncoder().encode(data); - const signatureArray = base64js.toByteArray(BrowserCrypto.padBase64(signature)); - const cryptoKey = await window.crypto.subtle.importKey('jwk', pubkey, algo, true, ['verify']); - // SubtleCrypto's verify method is async so we must make - // this method async as well. - const result = await window.crypto.subtle.verify(algo, cryptoKey, signatureArray, dataArray); - return result; - } - async sign(privateKey, data) { - const algo = { - name: 'RSASSA-PKCS1-v1_5', - hash: { name: 'SHA-256' }, - }; - // eslint-disable-next-line node/no-unsupported-features/node-builtins - const dataArray = new TextEncoder().encode(data); - const cryptoKey = await window.crypto.subtle.importKey('jwk', privateKey, algo, true, ['sign']); - // SubtleCrypto's sign method is async so we must make - // this method async as well. - const result = await window.crypto.subtle.sign(algo, cryptoKey, dataArray); - return base64js.fromByteArray(new Uint8Array(result)); - } - decodeBase64StringUtf8(base64) { - const uint8array = base64js.toByteArray(BrowserCrypto.padBase64(base64)); - // eslint-disable-next-line node/no-unsupported-features/node-builtins - const result = new TextDecoder().decode(uint8array); - return result; - } - encodeBase64StringUtf8(text) { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - const uint8array = new TextEncoder().encode(text); - const result = base64js.fromByteArray(uint8array); - return result; - } - /** - * Computes the SHA-256 hash of the provided string. - * @param str The plain text string to hash. - * @return A promise that resolves with the SHA-256 hash of the provided - * string in hexadecimal encoding. - */ - async sha256DigestHex(str) { - // SubtleCrypto digest() method is async, so we must make - // this method async as well. - // To calculate SHA256 digest using SubtleCrypto, we first - // need to convert an input string to an ArrayBuffer: - // eslint-disable-next-line node/no-unsupported-features/node-builtins - const inputBuffer = new TextEncoder().encode(str); - // Result is ArrayBuffer as well. - const outputBuffer = await window.crypto.subtle.digest('SHA-256', inputBuffer); - return crypto_1.fromArrayBufferToHex(outputBuffer); - } - /** - * Computes the HMAC hash of a message using the provided crypto key and the - * SHA-256 algorithm. - * @param key The secret crypto key in utf-8 or ArrayBuffer format. - * @param msg The plain text message. - * @return A promise that resolves with the HMAC-SHA256 hash in ArrayBuffer - * format. - */ - async signWithHmacSha256(key, msg) { - // Convert key, if provided in ArrayBuffer format, to string. - const rawKey = typeof key === 'string' - ? key - : String.fromCharCode(...new Uint16Array(key)); - // eslint-disable-next-line node/no-unsupported-features/node-builtins - const enc = new TextEncoder(); - const cryptoKey = await window.crypto.subtle.importKey('raw', enc.encode(rawKey), { - name: 'HMAC', - hash: { - name: 'SHA-256', - }, - }, false, ['sign']); - return window.crypto.subtle.sign('HMAC', cryptoKey, enc.encode(msg)); - } -} -exports.BrowserCrypto = BrowserCrypto; -//# sourceMappingURL=crypto.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/crypto/crypto.d.ts b/reverse_engineering/node_modules/google-auth-library/build/src/crypto/crypto.d.ts deleted file mode 100644 index f45f3a6..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/crypto/crypto.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -/// -export interface JwkCertificate { - kty: string; - alg: string; - use?: string; - kid: string; - n: string; - e: string; -} -export interface CryptoSigner { - update(data: string): void; - sign(key: string, outputFormat: string): string; -} -export interface Crypto { - sha256DigestBase64(str: string): Promise; - randomBytesBase64(n: number): string; - verify(pubkey: string | JwkCertificate, data: string | Buffer, signature: string): Promise; - sign(privateKey: string | JwkCertificate, data: string | Buffer): Promise; - decodeBase64StringUtf8(base64: string): string; - encodeBase64StringUtf8(text: string): string; - /** - * Computes the SHA-256 hash of the provided string. - * @param str The plain text string to hash. - * @return A promise that resolves with the SHA-256 hash of the provided - * string in hexadecimal encoding. - */ - sha256DigestHex(str: string): Promise; - /** - * Computes the HMAC hash of a message using the provided crypto key and the - * SHA-256 algorithm. - * @param key The secret crypto key in utf-8 or ArrayBuffer format. - * @param msg The plain text message. - * @return A promise that resolves with the HMAC-SHA256 hash in ArrayBuffer - * format. - */ - signWithHmacSha256(key: string | ArrayBuffer, msg: string): Promise; -} -export declare function createCrypto(): Crypto; -export declare function hasBrowserCrypto(): boolean; -/** - * Converts an ArrayBuffer to a hexadecimal string. - * @param arrayBuffer The ArrayBuffer to convert to hexadecimal string. - * @return The hexadecimal encoding of the ArrayBuffer. - */ -export declare function fromArrayBufferToHex(arrayBuffer: ArrayBuffer): string; diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/crypto/crypto.js b/reverse_engineering/node_modules/google-auth-library/build/src/crypto/crypto.js deleted file mode 100644 index beb3a94..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/crypto/crypto.js +++ /dev/null @@ -1,49 +0,0 @@ -"use strict"; -// Copyright 2019 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/* global window */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.fromArrayBufferToHex = exports.hasBrowserCrypto = exports.createCrypto = void 0; -const crypto_1 = require("./browser/crypto"); -const crypto_2 = require("./node/crypto"); -function createCrypto() { - if (hasBrowserCrypto()) { - return new crypto_1.BrowserCrypto(); - } - return new crypto_2.NodeCrypto(); -} -exports.createCrypto = createCrypto; -function hasBrowserCrypto() { - return (typeof window !== 'undefined' && - typeof window.crypto !== 'undefined' && - typeof window.crypto.subtle !== 'undefined'); -} -exports.hasBrowserCrypto = hasBrowserCrypto; -/** - * Converts an ArrayBuffer to a hexadecimal string. - * @param arrayBuffer The ArrayBuffer to convert to hexadecimal string. - * @return The hexadecimal encoding of the ArrayBuffer. - */ -function fromArrayBufferToHex(arrayBuffer) { - // Convert buffer to byte array. - const byteArray = Array.from(new Uint8Array(arrayBuffer)); - // Convert bytes to hex string. - return byteArray - .map(byte => { - return byte.toString(16).padStart(2, '0'); - }) - .join(''); -} -exports.fromArrayBufferToHex = fromArrayBufferToHex; -//# sourceMappingURL=crypto.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/crypto/node/crypto.d.ts b/reverse_engineering/node_modules/google-auth-library/build/src/crypto/node/crypto.d.ts deleted file mode 100644 index 04c6425..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/crypto/node/crypto.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -/// -import { Crypto } from '../crypto'; -export declare class NodeCrypto implements Crypto { - sha256DigestBase64(str: string): Promise; - randomBytesBase64(count: number): string; - verify(pubkey: string, data: string | Buffer, signature: string): Promise; - sign(privateKey: string, data: string | Buffer): Promise; - decodeBase64StringUtf8(base64: string): string; - encodeBase64StringUtf8(text: string): string; - /** - * Computes the SHA-256 hash of the provided string. - * @param str The plain text string to hash. - * @return A promise that resolves with the SHA-256 hash of the provided - * string in hexadecimal encoding. - */ - sha256DigestHex(str: string): Promise; - /** - * Computes the HMAC hash of a message using the provided crypto key and the - * SHA-256 algorithm. - * @param key The secret crypto key in utf-8 or ArrayBuffer format. - * @param msg The plain text message. - * @return A promise that resolves with the HMAC-SHA256 hash in ArrayBuffer - * format. - */ - signWithHmacSha256(key: string | ArrayBuffer, msg: string): Promise; -} diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/crypto/node/crypto.js b/reverse_engineering/node_modules/google-auth-library/build/src/crypto/node/crypto.js deleted file mode 100644 index 8e96c87..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/crypto/node/crypto.js +++ /dev/null @@ -1,83 +0,0 @@ -"use strict"; -// Copyright 2019 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -exports.NodeCrypto = void 0; -const crypto = require("crypto"); -class NodeCrypto { - async sha256DigestBase64(str) { - return crypto.createHash('sha256').update(str).digest('base64'); - } - randomBytesBase64(count) { - return crypto.randomBytes(count).toString('base64'); - } - async verify(pubkey, data, signature) { - const verifier = crypto.createVerify('sha256'); - verifier.update(data); - verifier.end(); - return verifier.verify(pubkey, signature, 'base64'); - } - async sign(privateKey, data) { - const signer = crypto.createSign('RSA-SHA256'); - signer.update(data); - signer.end(); - return signer.sign(privateKey, 'base64'); - } - decodeBase64StringUtf8(base64) { - return Buffer.from(base64, 'base64').toString('utf-8'); - } - encodeBase64StringUtf8(text) { - return Buffer.from(text, 'utf-8').toString('base64'); - } - /** - * Computes the SHA-256 hash of the provided string. - * @param str The plain text string to hash. - * @return A promise that resolves with the SHA-256 hash of the provided - * string in hexadecimal encoding. - */ - async sha256DigestHex(str) { - return crypto.createHash('sha256').update(str).digest('hex'); - } - /** - * Computes the HMAC hash of a message using the provided crypto key and the - * SHA-256 algorithm. - * @param key The secret crypto key in utf-8 or ArrayBuffer format. - * @param msg The plain text message. - * @return A promise that resolves with the HMAC-SHA256 hash in ArrayBuffer - * format. - */ - async signWithHmacSha256(key, msg) { - const cryptoKey = typeof key === 'string' ? key : toBuffer(key); - return toArrayBuffer(crypto.createHmac('sha256', cryptoKey).update(msg).digest()); - } -} -exports.NodeCrypto = NodeCrypto; -/** - * Converts a Node.js Buffer to an ArrayBuffer. - * https://stackoverflow.com/questions/8609289/convert-a-binary-nodejs-buffer-to-javascript-arraybuffer - * @param buffer The Buffer input to covert. - * @return The ArrayBuffer representation of the input. - */ -function toArrayBuffer(buffer) { - return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength); -} -/** - * Converts an ArrayBuffer to a Node.js Buffer. - * @param arrayBuffer The ArrayBuffer input to covert. - * @return The Buffer representation of the input. - */ -function toBuffer(arrayBuffer) { - return Buffer.from(arrayBuffer); -} -//# sourceMappingURL=crypto.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/index.d.ts b/reverse_engineering/node_modules/google-auth-library/build/src/index.d.ts deleted file mode 100644 index df5a432..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/index.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { GoogleAuth } from './auth/googleauth'; -export { Compute, ComputeOptions } from './auth/computeclient'; -export { CredentialBody, CredentialRequest, Credentials, JWTInput, } from './auth/credentials'; -export { GCPEnv } from './auth/envDetect'; -export { GoogleAuthOptions, ProjectIdCallback } from './auth/googleauth'; -export { IAMAuth, RequestMetadata } from './auth/iam'; -export { IdTokenClient, IdTokenProvider } from './auth/idtokenclient'; -export { Claims, JWTAccess } from './auth/jwtaccess'; -export { JWT, JWTOptions } from './auth/jwtclient'; -export { Impersonated, ImpersonatedOptions } from './auth/impersonated'; -export { Certificates, CodeChallengeMethod, CodeVerifierResults, GenerateAuthUrlOpts, GetTokenOptions, OAuth2Client, OAuth2ClientOptions, RefreshOptions, TokenInfo, VerifyIdTokenOptions, } from './auth/oauth2client'; -export { LoginTicket, TokenPayload } from './auth/loginticket'; -export { UserRefreshClient, UserRefreshClientOptions, } from './auth/refreshclient'; -export { AwsClient, AwsClientOptions } from './auth/awsclient'; -export { IdentityPoolClient, IdentityPoolClientOptions, } from './auth/identitypoolclient'; -export { ExternalAccountClient, ExternalAccountClientOptions, } from './auth/externalclient'; -export { BaseExternalAccountClient, BaseExternalAccountClientOptions, } from './auth/baseexternalclient'; -export { DefaultTransporter } from './transporters'; -declare const auth: GoogleAuth; -export { auth, GoogleAuth }; diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/index.js b/reverse_engineering/node_modules/google-auth-library/build/src/index.js deleted file mode 100644 index e061402..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/index.js +++ /dev/null @@ -1,52 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GoogleAuth = exports.auth = void 0; -// Copyright 2017 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -const googleauth_1 = require("./auth/googleauth"); -Object.defineProperty(exports, "GoogleAuth", { enumerable: true, get: function () { return googleauth_1.GoogleAuth; } }); -var computeclient_1 = require("./auth/computeclient"); -Object.defineProperty(exports, "Compute", { enumerable: true, get: function () { return computeclient_1.Compute; } }); -var envDetect_1 = require("./auth/envDetect"); -Object.defineProperty(exports, "GCPEnv", { enumerable: true, get: function () { return envDetect_1.GCPEnv; } }); -var iam_1 = require("./auth/iam"); -Object.defineProperty(exports, "IAMAuth", { enumerable: true, get: function () { return iam_1.IAMAuth; } }); -var idtokenclient_1 = require("./auth/idtokenclient"); -Object.defineProperty(exports, "IdTokenClient", { enumerable: true, get: function () { return idtokenclient_1.IdTokenClient; } }); -var jwtaccess_1 = require("./auth/jwtaccess"); -Object.defineProperty(exports, "JWTAccess", { enumerable: true, get: function () { return jwtaccess_1.JWTAccess; } }); -var jwtclient_1 = require("./auth/jwtclient"); -Object.defineProperty(exports, "JWT", { enumerable: true, get: function () { return jwtclient_1.JWT; } }); -var impersonated_1 = require("./auth/impersonated"); -Object.defineProperty(exports, "Impersonated", { enumerable: true, get: function () { return impersonated_1.Impersonated; } }); -var oauth2client_1 = require("./auth/oauth2client"); -Object.defineProperty(exports, "CodeChallengeMethod", { enumerable: true, get: function () { return oauth2client_1.CodeChallengeMethod; } }); -Object.defineProperty(exports, "OAuth2Client", { enumerable: true, get: function () { return oauth2client_1.OAuth2Client; } }); -var loginticket_1 = require("./auth/loginticket"); -Object.defineProperty(exports, "LoginTicket", { enumerable: true, get: function () { return loginticket_1.LoginTicket; } }); -var refreshclient_1 = require("./auth/refreshclient"); -Object.defineProperty(exports, "UserRefreshClient", { enumerable: true, get: function () { return refreshclient_1.UserRefreshClient; } }); -var awsclient_1 = require("./auth/awsclient"); -Object.defineProperty(exports, "AwsClient", { enumerable: true, get: function () { return awsclient_1.AwsClient; } }); -var identitypoolclient_1 = require("./auth/identitypoolclient"); -Object.defineProperty(exports, "IdentityPoolClient", { enumerable: true, get: function () { return identitypoolclient_1.IdentityPoolClient; } }); -var externalclient_1 = require("./auth/externalclient"); -Object.defineProperty(exports, "ExternalAccountClient", { enumerable: true, get: function () { return externalclient_1.ExternalAccountClient; } }); -var baseexternalclient_1 = require("./auth/baseexternalclient"); -Object.defineProperty(exports, "BaseExternalAccountClient", { enumerable: true, get: function () { return baseexternalclient_1.BaseExternalAccountClient; } }); -var transporters_1 = require("./transporters"); -Object.defineProperty(exports, "DefaultTransporter", { enumerable: true, get: function () { return transporters_1.DefaultTransporter; } }); -const auth = new googleauth_1.GoogleAuth(); -exports.auth = auth; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/messages.d.ts b/reverse_engineering/node_modules/google-auth-library/build/src/messages.d.ts deleted file mode 100644 index 9de99bc..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/messages.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -export declare enum WarningTypes { - WARNING = "Warning", - DEPRECATION = "DeprecationWarning" -} -export declare function warn(warning: Warning): void; -export interface Warning { - code: string; - type: WarningTypes; - message: string; - warned?: boolean; -} diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/messages.js b/reverse_engineering/node_modules/google-auth-library/build/src/messages.js deleted file mode 100644 index d4320dc..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/messages.js +++ /dev/null @@ -1,40 +0,0 @@ -"use strict"; -// Copyright 2018 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -exports.warn = exports.WarningTypes = void 0; -var WarningTypes; -(function (WarningTypes) { - WarningTypes["WARNING"] = "Warning"; - WarningTypes["DEPRECATION"] = "DeprecationWarning"; -})(WarningTypes = exports.WarningTypes || (exports.WarningTypes = {})); -function warn(warning) { - // Only show a given warning once - if (warning.warned) { - return; - } - warning.warned = true; - if (typeof process !== 'undefined' && process.emitWarning) { - // @types/node doesn't recognize the emitWarning syntax which - // accepts a config object, so `as any` it is - // https://nodejs.org/docs/latest-v8.x/api/process.html#process_process_emitwarning_warning_options - // eslint-disable-next-line @typescript-eslint/no-explicit-any - process.emitWarning(warning.message, warning); - } - else { - console.warn(warning.message); - } -} -exports.warn = warn; -//# sourceMappingURL=messages.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/options.d.ts b/reverse_engineering/node_modules/google-auth-library/build/src/options.d.ts deleted file mode 100644 index ede9689..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/options.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function validate(options: any): void; diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/options.js b/reverse_engineering/node_modules/google-auth-library/build/src/options.js deleted file mode 100644 index e935c70..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/options.js +++ /dev/null @@ -1,36 +0,0 @@ -"use strict"; -// Copyright 2017 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -exports.validate = void 0; -// Accepts an options object passed from the user to the API. In the -// previous version of the API, it referred to a `Request` options object. -// Now it refers to an Axiox Request Config object. This is here to help -// ensure users don't pass invalid options when they upgrade from 0.x to 1.x. -// eslint-disable-next-line @typescript-eslint/no-explicit-any -function validate(options) { - const vpairs = [ - { invalid: 'uri', expected: 'url' }, - { invalid: 'json', expected: 'data' }, - { invalid: 'qs', expected: 'params' }, - ]; - for (const pair of vpairs) { - if (options[pair.invalid]) { - const e = `'${pair.invalid}' is not a valid configuration option. Please use '${pair.expected}' instead. This library is using Axios for requests. Please see https://github.com/axios/axios to learn more about the valid request options.`; - throw new Error(e); - } - } -} -exports.validate = validate; -//# sourceMappingURL=options.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/transporters.d.ts b/reverse_engineering/node_modules/google-auth-library/build/src/transporters.d.ts deleted file mode 100644 index 16b5c5e..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/transporters.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { GaxiosError, GaxiosOptions, GaxiosPromise, GaxiosResponse } from 'gaxios'; -export interface Transporter { - request(opts: GaxiosOptions): GaxiosPromise; - request(opts: GaxiosOptions, callback?: BodyResponseCallback): void; - request(opts: GaxiosOptions, callback?: BodyResponseCallback): GaxiosPromise | void; -} -export interface BodyResponseCallback { - (err: Error | null, res?: GaxiosResponse | null): void; -} -export interface RequestError extends GaxiosError { - errors: Error[]; -} -export declare class DefaultTransporter { - /** - * Default user agent. - */ - static readonly USER_AGENT: string; - /** - * Configures request options before making a request. - * @param opts GaxiosOptions options. - * @return Configured options. - */ - configure(opts?: GaxiosOptions): GaxiosOptions; - /** - * Makes a request using Gaxios with given options. - * @param opts GaxiosOptions options. - * @param callback optional callback that contains GaxiosResponse object. - * @return GaxiosPromise, assuming no callback is passed. - */ - request(opts: GaxiosOptions): GaxiosPromise; - request(opts: GaxiosOptions, callback?: BodyResponseCallback): void; - /** - * Changes the error to include details from the body. - */ - private processError; -} diff --git a/reverse_engineering/node_modules/google-auth-library/build/src/transporters.js b/reverse_engineering/node_modules/google-auth-library/build/src/transporters.js deleted file mode 100644 index 98dc838..0000000 --- a/reverse_engineering/node_modules/google-auth-library/build/src/transporters.js +++ /dev/null @@ -1,116 +0,0 @@ -"use strict"; -// Copyright 2019 Google LLC -// -// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DefaultTransporter = void 0; -const gaxios_1 = require("gaxios"); -const options_1 = require("./options"); -// eslint-disable-next-line @typescript-eslint/no-var-requires -const pkg = require('../../package.json'); -const PRODUCT_NAME = 'google-api-nodejs-client'; -class DefaultTransporter { - /** - * Configures request options before making a request. - * @param opts GaxiosOptions options. - * @return Configured options. - */ - configure(opts = {}) { - opts.headers = opts.headers || {}; - if (typeof window === 'undefined') { - // set transporter user agent if not in browser - const uaValue = opts.headers['User-Agent']; - if (!uaValue) { - opts.headers['User-Agent'] = DefaultTransporter.USER_AGENT; - } - else if (!uaValue.includes(`${PRODUCT_NAME}/`)) { - opts.headers['User-Agent'] = `${uaValue} ${DefaultTransporter.USER_AGENT}`; - } - // track google-auth-library-nodejs version: - const authVersion = `auth/${pkg.version}`; - if (opts.headers['x-goog-api-client'] && - !opts.headers['x-goog-api-client'].includes(authVersion)) { - opts.headers['x-goog-api-client'] = `${opts.headers['x-goog-api-client']} ${authVersion}`; - } - else if (!opts.headers['x-goog-api-client']) { - const nodeVersion = process.version.replace(/^v/, ''); - opts.headers['x-goog-api-client'] = `gl-node/${nodeVersion} ${authVersion}`; - } - } - return opts; - } - request(opts, callback) { - // ensure the user isn't passing in request-style options - opts = this.configure(opts); - try { - options_1.validate(opts); - } - catch (e) { - if (callback) { - return callback(e); - } - else { - throw e; - } - } - if (callback) { - gaxios_1.request(opts).then(r => { - callback(null, r); - }, e => { - callback(this.processError(e)); - }); - } - else { - return gaxios_1.request(opts).catch(e => { - throw this.processError(e); - }); - } - } - /** - * Changes the error to include details from the body. - */ - processError(e) { - const res = e.response; - const err = e; - const body = res ? res.data : null; - if (res && body && body.error && res.status !== 200) { - if (typeof body.error === 'string') { - err.message = body.error; - err.code = res.status.toString(); - } - else if (Array.isArray(body.error.errors)) { - err.message = body.error.errors - .map((err2) => err2.message) - .join('\n'); - err.code = body.error.code; - err.errors = body.error.errors; - } - else { - err.message = body.error.message; - err.code = body.error.code || res.status; - } - } - else if (res && res.status >= 400) { - // Consider all 4xx and 5xx responses errors. - err.message = body; - err.code = res.status.toString(); - } - return err; - } -} -exports.DefaultTransporter = DefaultTransporter; -/** - * Default user agent. - */ -DefaultTransporter.USER_AGENT = `${PRODUCT_NAME}/${pkg.version}`; -//# sourceMappingURL=transporters.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-auth-library/package.json b/reverse_engineering/node_modules/google-auth-library/package.json deleted file mode 100644 index f9510cb..0000000 --- a/reverse_engineering/node_modules/google-auth-library/package.json +++ /dev/null @@ -1,131 +0,0 @@ -{ - "_from": "google-auth-library@^7.0.2", - "_id": "google-auth-library@7.5.0", - "_inBundle": false, - "_integrity": "sha512-iRMwc060kiA6ncZbAoQN90nlwT8jiHVmippofpMgo4YFEyRBaPouyM7+ZB742wKetByyy+TahshVRTx0tEyXGQ==", - "_location": "/google-auth-library", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "google-auth-library@^7.0.2", - "name": "google-auth-library", - "escapedName": "google-auth-library", - "rawSpec": "^7.0.2", - "saveSpec": null, - "fetchSpec": "^7.0.2" - }, - "_requiredBy": [ - "/@google-cloud/common" - ], - "_resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.5.0.tgz", - "_shasum": "6b0a623dfb4ee7a8d93a0d25455031d1baf86181", - "_spec": "google-auth-library@^7.0.2", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/@google-cloud/common", - "author": { - "name": "Google Inc." - }, - "bugs": { - "url": "https://github.com/googleapis/google-auth-library-nodejs/issues" - }, - "bundleDependencies": false, - "dependencies": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^4.0.0", - "gcp-metadata": "^4.2.0", - "gtoken": "^5.0.4", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" - }, - "deprecated": false, - "description": "Google APIs Authentication Client Library for Node.js", - "devDependencies": { - "@compodoc/compodoc": "^1.1.7", - "@types/base64-js": "^1.2.5", - "@types/chai": "^4.1.7", - "@types/jws": "^3.1.0", - "@types/lru-cache": "^5.0.0", - "@types/mocha": "^8.0.0", - "@types/mv": "^2.1.0", - "@types/ncp": "^2.0.1", - "@types/node": "^14.0.0", - "@types/sinon": "^10.0.0", - "@types/tmp": "^0.2.0", - "assert-rejects": "^1.0.0", - "c8": "^7.0.0", - "chai": "^4.2.0", - "codecov": "^3.0.2", - "execa": "^5.0.0", - "gts": "^2.0.0", - "is-docker": "^2.0.0", - "karma": "^6.0.0", - "karma-chrome-launcher": "^3.0.0", - "karma-coverage": "^2.0.0", - "karma-firefox-launcher": "^2.0.0", - "karma-mocha": "^2.0.0", - "karma-remap-coverage": "^0.1.5", - "karma-sourcemap-loader": "^0.3.7", - "karma-webpack": "^5.0.0", - "keypair": "^1.0.1", - "linkinator": "^2.0.0", - "mocha": "^8.0.0", - "mv": "^2.1.1", - "ncp": "^2.0.0", - "nock": "^13.0.0", - "null-loader": "^4.0.0", - "puppeteer": "^10.0.0", - "sinon": "^11.0.0", - "tmp": "^0.2.0", - "ts-loader": "^8.0.0", - "typescript": "^3.8.3", - "webpack": "^5.21.2", - "webpack-cli": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "files": [ - "build/src", - "!build/src/**/*.map" - ], - "homepage": "https://github.com/googleapis/google-auth-library-nodejs#readme", - "keywords": [ - "google", - "api", - "google apis", - "client", - "client library" - ], - "license": "Apache-2.0", - "main": "./build/src/index.js", - "name": "google-auth-library", - "repository": { - "type": "git", - "url": "git+https://github.com/googleapis/google-auth-library-nodejs.git" - }, - "scripts": { - "browser-test": "karma start", - "clean": "gts clean", - "compile": "tsc -p .", - "docs": "compodoc src/", - "docs-test": "linkinator docs", - "fix": "gts fix", - "lint": "gts check", - "precompile": "gts clean", - "predocs-test": "npm run docs", - "prelint": "cd samples; npm link ../; npm install", - "prepare": "npm run compile", - "presystem-test": "npm run compile", - "pretest": "npm run compile", - "samples-setup": "cd samples/ && npm link ../ && npm run setup && cd ../", - "samples-test": "cd samples/ && npm link ../ && npm test && cd ../", - "system-test": "mocha build/system-test --timeout 60000", - "test": "c8 mocha build/test", - "webpack": "webpack" - }, - "types": "./build/src/index.d.ts", - "version": "7.5.0" -} diff --git a/reverse_engineering/node_modules/google-p12-pem/CHANGELOG.md b/reverse_engineering/node_modules/google-p12-pem/CHANGELOG.md deleted file mode 100644 index 4352331..0000000 --- a/reverse_engineering/node_modules/google-p12-pem/CHANGELOG.md +++ /dev/null @@ -1,201 +0,0 @@ -# Changelog - -[npm history][1] - -[1]: https://www.npmjs.com/package/google-p12-pem?activeTab=versions - -### [3.1.1](https://www.github.com/googleapis/google-p12-pem/compare/v3.1.0...v3.1.1) (2021-07-21) - - -### Bug Fixes - -* **build:** use updated repository URL ([#355](https://www.github.com/googleapis/google-p12-pem/issues/355)) ([3bcec25](https://www.github.com/googleapis/google-p12-pem/commit/3bcec256a815e76ada58418cac3bbf334621e19d)) - -## [3.1.0](https://www.github.com/googleapis/google-p12-pem/compare/v3.0.3...v3.1.0) (2021-06-10) - - -### Features - -* add `gcf-owl-bot[bot]` to `ignoreAuthors` ([#318](https://www.github.com/googleapis/google-p12-pem/issues/318)) ([e93e51b](https://www.github.com/googleapis/google-p12-pem/commit/e93e51bbbf333161d836cee1a464be93105ed8ca)) - -### [3.0.3](https://www.github.com/googleapis/google-p12-pem/compare/v3.0.2...v3.0.3) (2020-09-02) - - -### Bug Fixes - -* **deps:** update dependency node-forge to ^0.10.0 ([#291](https://www.github.com/googleapis/google-p12-pem/issues/291)) ([0694c2e](https://www.github.com/googleapis/google-p12-pem/commit/0694c2ed1f8a0783cdab3b5e7ecb31a0b975bde5)) - -### [3.0.2](https://www.github.com/googleapis/google-p12-pem/compare/v3.0.1...v3.0.2) (2020-07-09) - - -### Bug Fixes - -* typeo in nodejs .gitattribute ([#270](https://www.github.com/googleapis/google-p12-pem/issues/270)) ([046f594](https://www.github.com/googleapis/google-p12-pem/commit/046f5946bc6809481aa04c7ed604bca3dacc21cc)) - -### [3.0.1](https://www.github.com/googleapis/google-p12-pem/compare/v3.0.0...v3.0.1) (2020-04-14) - - -### Bug Fixes - -* apache license URL ([#468](https://www.github.com/googleapis/google-p12-pem/issues/468)) ([#252](https://www.github.com/googleapis/google-p12-pem/issues/252)) ([5469838](https://www.github.com/googleapis/google-p12-pem/commit/5469838c5137f69352aa80f40eb6c1415e887e18)) - -## [3.0.0](https://www.github.com/googleapis/google-p12-pem/compare/v2.0.4...v3.0.0) (2020-03-20) - - -### ⚠ BREAKING CHANGES - -* typescript@3.7.x introduced backwards incompatibilities -* drops Node 8 from engines (#242) - -### Features - -* drops Node 8 from engines ([#242](https://www.github.com/googleapis/google-p12-pem/issues/242)) ([857cc92](https://www.github.com/googleapis/google-p12-pem/commit/857cc92e711a2ffd5bba18179c8d0395f38cc6ef)) - - -### Build System - -* update typescript/gts ([#243](https://www.github.com/googleapis/google-p12-pem/issues/243)) ([f910f07](https://www.github.com/googleapis/google-p12-pem/commit/f910f07374d586241663755ddf66f3a38e394c28)) - -### [2.0.4](https://www.github.com/googleapis/google-p12-pem/compare/v2.0.3...v2.0.4) (2020-01-06) - - -### Bug Fixes - -* **deps:** pin TypeScript below 3.7.0 ([81dd96d](https://www.github.com/googleapis/google-p12-pem/commit/81dd96d4b43100824561f45b51f9126195b41d1d)) - -### [2.0.3](https://www.github.com/googleapis/google-p12-pem/compare/v2.0.2...v2.0.3) (2019-11-13) - - -### Bug Fixes - -* **docs:** add jsdoc-region-tag plugin ([#206](https://www.github.com/googleapis/google-p12-pem/issues/206)) ([b34efde](https://www.github.com/googleapis/google-p12-pem/commit/b34efdebb853dd5129e15ec1ff11a75184fc32d7)) - -### [2.0.2](https://www.github.com/googleapis/google-p12-pem/compare/v2.0.1...v2.0.2) (2019-09-06) - - -### Bug Fixes - -* **deps:** update dependency node-forge to ^0.9.0 ([#193](https://www.github.com/googleapis/google-p12-pem/issues/193)) ([ecac0f4](https://www.github.com/googleapis/google-p12-pem/commit/ecac0f4)) -* **docs:** remove reference-docs anchor ([a6ad735](https://www.github.com/googleapis/google-p12-pem/commit/a6ad735)) - -### [2.0.1](https://www.github.com/googleapis/google-p12-pem/compare/v2.0.0...v2.0.1) (2019-06-26) - - -### Bug Fixes - -* **docs:** link to reference docs section on googleapis.dev ([#184](https://www.github.com/googleapis/google-p12-pem/issues/184)) ([a08353b](https://www.github.com/googleapis/google-p12-pem/commit/a08353b)) - -## [2.0.0](https://www.github.com/google/google-p12-pem/compare/v1.0.4...v2.0.0) (2019-05-02) - - -### Build System - -* upgrade engines field to >=8.10.0 ([#167](https://www.github.com/google/google-p12-pem/issues/167)) ([85da6e6](https://www.github.com/google/google-p12-pem/commit/85da6e6)) - - -### BREAKING CHANGES - -* upgrade engines field to >=8.10.0 (#167) - -## v1.0.4 - -03-12-2019 12:25 PDT - -This release includes a new shiny version of node-forge! - -### Dependencies -- fix(deps): update dependency node-forge to ^0.8.0 ([#137](https://github.com/google/google-p12-pem/pull/137)) - -### Documentation -- docs: update links in contrib guide ([#145](https://github.com/google/google-p12-pem/pull/145)) -- docs: move CONTRIBUTING.md to root ([#140](https://github.com/google/google-p12-pem/pull/140)) -- docs: add lint/fix example to contributing guide ([#138](https://github.com/google/google-p12-pem/pull/138)) - -### Internal / Testing Changes -- build: Add docuploader credentials to node publish jobs ([#149](https://github.com/google/google-p12-pem/pull/149)) -- build: update release config ([#147](https://github.com/google/google-p12-pem/pull/147)) -- build: use node10 to run samples-test, system-test etc ([#148](https://github.com/google/google-p12-pem/pull/148)) -- chore(deps): update dependency mocha to v6 -- build: use linkinator for docs test ([#144](https://github.com/google/google-p12-pem/pull/144)) -- build: create docs test npm scripts ([#143](https://github.com/google/google-p12-pem/pull/143)) -- build: test using @grpc/grpc-js in CI ([#142](https://github.com/google/google-p12-pem/pull/142)) -- chore(deps): update dependency eslint-config-prettier to v4 ([#135](https://github.com/google/google-p12-pem/pull/135)) -- build: ignore googleapis.com in doc link check ([#134](https://github.com/google/google-p12-pem/pull/134)) -- build: check dead links on Kokoro ([#132](https://github.com/google/google-p12-pem/pull/132)) -- test: add system test, samples, and sample test ([#131](https://github.com/google/google-p12-pem/pull/131)) -- chore(build): inject yoshi automation key ([#130](https://github.com/google/google-p12-pem/pull/130)) -- chore: update nyc and eslint configs ([#129](https://github.com/google/google-p12-pem/pull/129)) -- chore: fix publish.sh permission +x ([#127](https://github.com/google/google-p12-pem/pull/127)) -- fix(build): fix Kokoro release script ([#126](https://github.com/google/google-p12-pem/pull/126)) -- build: add Kokoro configs for autorelease ([#125](https://github.com/google/google-p12-pem/pull/125)) - -## v1.0.3 - -12-07-2018 09:50 PST - -This is a service release very few updates. The only interesting change is the removal of support for Node.js 4.x and 9.x, both of which are out of LTS support. - -### Dependencies -- fix(deps): update dependency pify to v4 ([#62](https://github.com/google/google-p12-pem/pull/62)) - -### Documentation -- docs: clean up the readme ([#121](https://github.com/google/google-p12-pem/pull/121)) - -### Internal / Testing Changes -- chore: basic cleanup ([#122](https://github.com/google/google-p12-pem/pull/122)) -- chore: always nyc report before calling codecov ([#120](https://github.com/google/google-p12-pem/pull/120)) -- chore: nyc ignore build/test by default ([#119](https://github.com/google/google-p12-pem/pull/119)) -- chore(build): update templates and synth ([#117](https://github.com/google/google-p12-pem/pull/117)) -- fix(build): fix system key decryption ([#112](https://github.com/google/google-p12-pem/pull/112)) -- chore(deps): update dependency typescript to ~3.2.0 ([#111](https://github.com/google/google-p12-pem/pull/111)) -- chore: add synth.metadata -- chore(deps): update dependency gts to ^0.9.0 ([#106](https://github.com/google/google-p12-pem/pull/106)) -- chore: update eslintignore config ([#105](https://github.com/google/google-p12-pem/pull/105)) -- chore: use latest npm on Windows ([#104](https://github.com/google/google-p12-pem/pull/104)) -- chore: update CircleCI config ([#103](https://github.com/google/google-p12-pem/pull/103)) -- chore: include build in eslintignore ([#100](https://github.com/google/google-p12-pem/pull/100)) -- chore: update issue templates ([#96](https://github.com/google/google-p12-pem/pull/96)) -- chore: remove old issue template ([#94](https://github.com/google/google-p12-pem/pull/94)) -- build: run tests on node11 ([#93](https://github.com/google/google-p12-pem/pull/93)) -- chores(build): run codecov on continuous builds ([#88](https://github.com/google/google-p12-pem/pull/88)) -- chores(build): do not collect sponge.xml from windows builds ([#90](https://github.com/google/google-p12-pem/pull/90)) -- chore(deps): update dependency typescript to ~3.1.0 ([#89](https://github.com/google/google-p12-pem/pull/89)) -- chore: update new issue template ([#87](https://github.com/google/google-p12-pem/pull/87)) -- build: fix codecov uploading on Kokoro ([#84](https://github.com/google/google-p12-pem/pull/84)) -- Update kokoro config ([#81](https://github.com/google/google-p12-pem/pull/81)) -- Run system tests on Kokoro ([#78](https://github.com/google/google-p12-pem/pull/78)) -- Don't publish sourcemaps ([#79](https://github.com/google/google-p12-pem/pull/79)) -- test: remove appveyor config ([#77](https://github.com/google/google-p12-pem/pull/77)) -- Update CI config ([#76](https://github.com/google/google-p12-pem/pull/76)) -- Enable prefer-const in the eslint config ([#75](https://github.com/google/google-p12-pem/pull/75)) -- Enable no-var in eslint ([#74](https://github.com/google/google-p12-pem/pull/74)) -- Update CI config ([#73](https://github.com/google/google-p12-pem/pull/73)) -- Retry npm install in CI ([#71](https://github.com/google/google-p12-pem/pull/71)) -- Update CI config ([#69](https://github.com/google/google-p12-pem/pull/69)) -- Update CI config ([#68](https://github.com/google/google-p12-pem/pull/68)) -- Update github templates and CircleCI config ([#67](https://github.com/google/google-p12-pem/pull/67)) -- chore(deps): update dependency nyc to v13 ([#65](https://github.com/google/google-p12-pem/pull/65)) -- add synth file and standardize config ([#64](https://github.com/google/google-p12-pem/pull/64)) -- chore: ignore package-log.json ([#61](https://github.com/google/google-p12-pem/pull/61)) -- chore: update renovate config ([#59](https://github.com/google/google-p12-pem/pull/59)) -- chore(deps): lock file maintenance ([#60](https://github.com/google/google-p12-pem/pull/60)) -- chore: remove greenkeeper badge ([#58](https://github.com/google/google-p12-pem/pull/58)) -- test: throw on deprecation -- chore: move mocha options to mocha.opts ([#54](https://github.com/google/google-p12-pem/pull/54)) -- chore(deps): update dependency typescript to v3 ([#56](https://github.com/google/google-p12-pem/pull/56)) -- chore(deps): lock file maintenance ([#55](https://github.com/google/google-p12-pem/pull/55)) -- chore(deps): lock file maintenance ([#53](https://github.com/google/google-p12-pem/pull/53)) -- chore(deps): update dependency gts to ^0.8.0 ([#49](https://github.com/google/google-p12-pem/pull/49)) -- test: use strictEqual in tests ([#51](https://github.com/google/google-p12-pem/pull/51)) -- chore(deps): update dependency typescript to ~2.9.0 ([#50](https://github.com/google/google-p12-pem/pull/50)) -- chore: Configure Renovate ([#48](https://github.com/google/google-p12-pem/pull/48)) -- fix: drop support for node.js 4.x and 9.x ([#46](https://github.com/google/google-p12-pem/pull/46)) -- Add Code of Conduct -- chore(package): update gts to the latest version ([#45](https://github.com/google/google-p12-pem/pull/45)) -- chore(package): update nyc to version 12.0.2 ([#42](https://github.com/google/google-p12-pem/pull/42)) -- chore: upgrade to the latest version of all dependencies ([#39](https://github.com/google/google-p12-pem/pull/39)) -- chore(build): run lint as a separate job ([#40](https://github.com/google/google-p12-pem/pull/40)) -- fix: pin gts version with ^ ([#38](https://github.com/google/google-p12-pem/pull/38)) -- chore(package): update @types/node to version 10.0.3 ([#34](https://github.com/google/google-p12-pem/pull/34)) -- chore: start testing on node 10 ([#36](https://github.com/google/google-p12-pem/pull/36)) -- chore(package): update @types/mocha to version 5.0.0 ([#33](https://github.com/google/google-p12-pem/pull/33)) diff --git a/reverse_engineering/node_modules/google-p12-pem/LICENSE b/reverse_engineering/node_modules/google-p12-pem/LICENSE deleted file mode 100644 index 8dafa3b..0000000 --- a/reverse_engineering/node_modules/google-p12-pem/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Ryan Seys - -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/reverse_engineering/node_modules/google-p12-pem/README.md b/reverse_engineering/node_modules/google-p12-pem/README.md deleted file mode 100644 index c50349c..0000000 --- a/reverse_engineering/node_modules/google-p12-pem/README.md +++ /dev/null @@ -1,150 +0,0 @@ -[//]: # "This README.md file is auto-generated, all changes to this file will be lost." -[//]: # "To regenerate it, use `python -m synthtool`." -Google Cloud Platform logo - -# [google-p12-pem: Node.js Client](https://github.com/googleapis/google-p12-pem) - -[![release level](https://img.shields.io/badge/release%20level-general%20availability%20%28GA%29-brightgreen.svg?style=flat)](https://cloud.google.com/terms/launch-stages) -[![npm version](https://img.shields.io/npm/v/google-p12-pem.svg)](https://www.npmjs.org/package/google-p12-pem) -[![codecov](https://img.shields.io/codecov/c/github/googleapis/google-p12-pem/master.svg?style=flat)](https://codecov.io/gh/googleapis/google-p12-pem) - - - - -Convert Google .p12 keys to .pem keys. - - -A comprehensive list of changes in each version may be found in -[the CHANGELOG](https://github.com/googleapis/google-p12-pem/blob/master/CHANGELOG.md). - - - -* [github.com/googleapis/google-p12-pem](https://github.com/googleapis/google-p12-pem) - -Read more about the client libraries for Cloud APIs, including the older -Google APIs Client Libraries, in [Client Libraries Explained][explained]. - -[explained]: https://cloud.google.com/apis/docs/client-libraries-explained - -**Table of contents:** - - -* [Quickstart](#quickstart) - - * [Installing the client library](#installing-the-client-library) - * [Using the client library](#using-the-client-library) -* [Samples](#samples) -* [Versioning](#versioning) -* [Contributing](#contributing) -* [License](#license) - -## Quickstart - -### Installing the client library - -```bash -npm install google-p12-pem -``` - - -### Using the client library - -```javascript -const {getPem} = require('google-p12-pem'); - -/** - * Given a p12 file, convert it to the PEM format. - * @param {string} pathToCert The relative path to a p12 file. - */ -async function quickstart() { - // TODO(developer): provide the path to your cert - // const pathToCert = 'path/to/cert.p12'; - - const pem = await getPem(pathToCert); - console.log('The converted PEM:'); - console.log(pem); -} - -quickstart(); - -``` -#### CLI style - -``` sh -gp12-pem myfile.p12 > output.pem -``` - - -## Samples - -Samples are in the [`samples/`](https://github.com/googleapis/google-p12-pem/tree/master/samples) directory. Each sample's `README.md` has instructions for running its sample. - -| Sample | Source Code | Try it | -| --------------------------- | --------------------------------- | ------ | -| Quickstart | [source code](https://github.com/googleapis/google-p12-pem/blob/master/samples/quickstart.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/google-p12-pem&page=editor&open_in_editor=samples/quickstart.js,samples/README.md) | - - - -## Supported Node.js Versions - -Our client libraries follow the [Node.js release schedule](https://nodejs.org/en/about/releases/). -Libraries are compatible with all current _active_ and _maintenance_ versions of -Node.js. - -Client libraries targeting some end-of-life versions of Node.js are available, and -can be installed via npm [dist-tags](https://docs.npmjs.com/cli/dist-tag). -The dist-tags follow the naming convention `legacy-(version)`. - -_Legacy Node.js versions are supported as a best effort:_ - -* Legacy versions will not be tested in continuous integration. -* Some security patches may not be able to be backported. -* Dependencies will not be kept up-to-date, and features will not be backported. - -#### Legacy tags available - -* `legacy-8`: install client libraries from this dist-tag for versions - compatible with Node.js 8. - -## Versioning - -This library follows [Semantic Versioning](http://semver.org/). - - -This library is considered to be **General Availability (GA)**. This means it -is stable; the code surface will not change in backwards-incompatible ways -unless absolutely necessary (e.g. because of critical security issues) or with -an extensive deprecation period. Issues and requests against **GA** libraries -are addressed with the highest priority. - - - - - -More Information: [Google Cloud Platform Launch Stages][launch_stages] - -[launch_stages]: https://cloud.google.com/terms/launch-stages - -## Contributing - -Contributions welcome! See the [Contributing Guide](https://github.com/googleapis/google-p12-pem/blob/master/CONTRIBUTING.md). - -Please note that this `README.md`, the `samples/README.md`, -and a variety of configuration files in this repository (including `.nycrc` and `tsconfig.json`) -are generated from a central template. To edit one of these files, make an edit -to its template in this -[directory](https://github.com/googleapis/synthtool/tree/master/synthtool/gcp/templates/node_library). - -## License - -Apache Version 2.0 - -See [LICENSE](https://github.com/googleapis/google-p12-pem/blob/master/LICENSE) - - - -[shell_img]: https://gstatic.com/cloudssh/images/open-btn.png -[projects]: https://console.cloud.google.com/project -[billing]: https://support.google.com/cloud/answer/6293499#enable-billing - -[auth]: https://cloud.google.com/docs/authentication/getting-started diff --git a/reverse_engineering/node_modules/google-p12-pem/build/src/bin/gp12-pem.d.ts b/reverse_engineering/node_modules/google-p12-pem/build/src/bin/gp12-pem.d.ts deleted file mode 100644 index cd3d1cd..0000000 --- a/reverse_engineering/node_modules/google-p12-pem/build/src/bin/gp12-pem.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env node -/** - * Copyright 2018 Google LLC - * - * Distributed under MIT license. - * See file LICENSE for detail or copy at https://opensource.org/licenses/MIT - */ -export {}; diff --git a/reverse_engineering/node_modules/google-p12-pem/build/src/bin/gp12-pem.js b/reverse_engineering/node_modules/google-p12-pem/build/src/bin/gp12-pem.js deleted file mode 100755 index 95ff73a..0000000 --- a/reverse_engineering/node_modules/google-p12-pem/build/src/bin/gp12-pem.js +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env node -"use strict"; -/** - * Copyright 2018 Google LLC - * - * Distributed under MIT license. - * See file LICENSE for detail or copy at https://opensource.org/licenses/MIT - */ -Object.defineProperty(exports, "__esModule", { value: true }); -const gp12 = require("../index"); -const argv = process.argv; -const p12Path = argv[2]; -if (!p12Path) { - console.error('Please specify a *.p12 file to convert.'); - process.exitCode = 1; -} -gp12.getPem(p12Path, (err, pem) => { - if (err) { - console.log(err); - process.exitCode = 1; - } - else { - console.log(pem); - } -}); -//# sourceMappingURL=gp12-pem.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-p12-pem/build/src/index.d.ts b/reverse_engineering/node_modules/google-p12-pem/build/src/index.d.ts deleted file mode 100644 index 06e04d3..0000000 --- a/reverse_engineering/node_modules/google-p12-pem/build/src/index.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Copyright 2018 Google LLC - * - * Distributed under MIT license. - * See file LICENSE for detail or copy at https://opensource.org/licenses/MIT - */ -/** - * Convert a .p12 file to .pem string - * @param filename The .p12 key filename. - * @param callback The callback function. - * @return A promise that resolves with the .pem private key - * if no callback provided. - */ -export declare function getPem(filename: string): Promise; -export declare function getPem(filename: string, callback: (err: Error | null, pem: string | null) => void): void; diff --git a/reverse_engineering/node_modules/google-p12-pem/build/src/index.js b/reverse_engineering/node_modules/google-p12-pem/build/src/index.js deleted file mode 100644 index 73b5d71..0000000 --- a/reverse_engineering/node_modules/google-p12-pem/build/src/index.js +++ /dev/null @@ -1,49 +0,0 @@ -"use strict"; -/** - * Copyright 2018 Google LLC - * - * Distributed under MIT license. - * See file LICENSE for detail or copy at https://opensource.org/licenses/MIT - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getPem = void 0; -const fs = require("fs"); -const forge = require("node-forge"); -const util_1 = require("util"); -const readFile = util_1.promisify(fs.readFile); -function getPem(filename, callback) { - if (callback) { - getPemAsync(filename) - .then(pem => callback(null, pem)) - .catch(err => callback(err, null)); - } - else { - return getPemAsync(filename); - } -} -exports.getPem = getPem; -function getPemAsync(filename) { - return readFile(filename, { encoding: 'base64' }).then(keyp12 => { - return convertToPem(keyp12); - }); -} -/** - * Converts a P12 in base64 encoding to a pem. - * @param p12base64 String containing base64 encoded p12. - * @returns a string containing the pem. - */ -function convertToPem(p12base64) { - const p12Der = forge.util.decode64(p12base64); - const p12Asn1 = forge.asn1.fromDer(p12Der); - const p12 = forge.pkcs12.pkcs12FromAsn1(p12Asn1, 'notasecret'); - const bags = p12.getBags({ friendlyName: 'privatekey' }); - if (bags.friendlyName) { - const privateKey = bags.friendlyName[0].key; - const pem = forge.pki.privateKeyToPem(privateKey); - return pem.replace(/\r\n/g, '\n'); - } - else { - throw new Error('Unable to get friendly name.'); - } -} -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/google-p12-pem/package.json b/reverse_engineering/node_modules/google-p12-pem/package.json deleted file mode 100644 index 06e9a1f..0000000 --- a/reverse_engineering/node_modules/google-p12-pem/package.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "_from": "google-p12-pem@^3.0.3", - "_id": "google-p12-pem@3.1.1", - "_inBundle": false, - "_integrity": "sha512-e9CwdD2QYkpvJsktki3Bm8P8FSGIneF+/42a9F9QHcQvJ73C2RoYZdrwRl6BhwksWtzl65gT4OnBROhUIFw95Q==", - "_location": "/google-p12-pem", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "google-p12-pem@^3.0.3", - "name": "google-p12-pem", - "escapedName": "google-p12-pem", - "rawSpec": "^3.0.3", - "saveSpec": null, - "fetchSpec": "^3.0.3" - }, - "_requiredBy": [ - "/gtoken" - ], - "_resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.1.tgz", - "_shasum": "98fb717b722d12196a3e5b550c44517562269859", - "_spec": "google-p12-pem@^3.0.3", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/gtoken", - "author": { - "name": "Ryan Seys" - }, - "bin": { - "gp12-pem": "build/src/bin/gp12-pem.js" - }, - "bugs": { - "url": "https://github.com/googleapis/google-p12-pem/issues" - }, - "bundleDependencies": false, - "dependencies": { - "node-forge": "^0.10.0" - }, - "deprecated": false, - "description": "Convert Google .p12 keys to .pem keys.", - "devDependencies": { - "@compodoc/compodoc": "^1.1.7", - "@types/mocha": "^8.0.0", - "@types/node": "^14.0.0", - "@types/node-forge": "^0.10.0", - "c8": "^7.4.0", - "gts": "^3.0.0", - "linkinator": "^2.0.0", - "mocha": "^8.0.0", - "typescript": "^3.8.3" - }, - "engines": { - "node": ">=10" - }, - "files": [ - "build/src", - "!build/src/**/*.map" - ], - "homepage": "https://github.com/googleapis/google-p12-pem#readme", - "license": "MIT", - "main": "./build/src/index.js", - "name": "google-p12-pem", - "repository": { - "type": "git", - "url": "git+https://github.com/googleapis/google-p12-pem.git" - }, - "scripts": { - "check": "gts check && npm run license-check", - "clean": "gts clean", - "compile": "tsc -p .", - "docs": "compodoc src/", - "docs-test": "linkinator docs", - "fix": "gts fix", - "license-check": "jsgl --local .", - "lint": "gts check", - "precompile": "gts clean", - "predocs-test": "npm run docs", - "prelint": "cd samples; npm link ../; npm install", - "prepare": "npm run compile", - "presystem-test": "npm run compile", - "pretest": "npm run compile", - "samples-test": "cd samples/ && npm link ../ && npm test && cd ../", - "system-test": "mocha build/system-test", - "test": "c8 mocha build/test" - }, - "types": "./build/src/index.d.ts", - "version": "3.1.1" -} diff --git a/reverse_engineering/node_modules/gtoken/CHANGELOG.md b/reverse_engineering/node_modules/gtoken/CHANGELOG.md deleted file mode 100644 index 916d726..0000000 --- a/reverse_engineering/node_modules/gtoken/CHANGELOG.md +++ /dev/null @@ -1,288 +0,0 @@ -# Changelog - -[npm history][1] - -[1]: https://www.npmjs.com/package/gtoken?activeTab=versions - -## [5.3.0](https://www.github.com/googleapis/node-gtoken/compare/v5.2.1...v5.3.0) (2021-06-10) - - -### Features - -* add `gcf-owl-bot[bot]` to `ignoreAuthors` ([#369](https://www.github.com/googleapis/node-gtoken/issues/369)) ([3142215](https://www.github.com/googleapis/node-gtoken/commit/3142215277ae2daa33f7fb3300f09ef438ded01f)) - -### [5.2.1](https://www.github.com/googleapis/node-gtoken/compare/v5.2.0...v5.2.1) (2021-01-26) - - -### Bug Fixes - -* **deps:** remove dependency on mime ([#357](https://www.github.com/googleapis/node-gtoken/issues/357)) ([0a1e6b3](https://www.github.com/googleapis/node-gtoken/commit/0a1e6b32206364106631c0ca8cdd2e325de2af32)) - -## [5.2.0](https://www.github.com/googleapis/node-gtoken/compare/v5.1.0...v5.2.0) (2021-01-14) - - -### Features - -* request new tokens before they expire ([#349](https://www.github.com/googleapis/node-gtoken/issues/349)) ([e84d9a3](https://www.github.com/googleapis/node-gtoken/commit/e84d9a31517c1449141708a0a2cddd9d0129fa95)) - -## [5.1.0](https://www.github.com/googleapis/node-gtoken/compare/v5.0.5...v5.1.0) (2020-11-14) - - -### Features - -* dedupe concurrent requests ([#351](https://www.github.com/googleapis/node-gtoken/issues/351)) ([9001f1d](https://www.github.com/googleapis/node-gtoken/commit/9001f1d00931f480d40fa323c9b527beaef2254a)) - -### [5.0.5](https://www.github.com/googleapis/node-gtoken/compare/v5.0.4...v5.0.5) (2020-10-22) - - -### Bug Fixes - -* **deps:** update dependency gaxios to v4 ([#342](https://www.github.com/googleapis/node-gtoken/issues/342)) ([7954a19](https://www.github.com/googleapis/node-gtoken/commit/7954a197e923469b031f0833a2016fa0378285b1)) - -### [5.0.4](https://www.github.com/googleapis/node-gtoken/compare/v5.0.3...v5.0.4) (2020-10-06) - - -### Bug Fixes - -* **deps:** upgrade google-p12-pem ([#337](https://www.github.com/googleapis/node-gtoken/issues/337)) ([77a749d](https://www.github.com/googleapis/node-gtoken/commit/77a749d646c7ccc68e974f27827a9d538dfea784)) - -### [5.0.3](https://www.github.com/googleapis/node-gtoken/compare/v5.0.2...v5.0.3) (2020-07-27) - - -### Bug Fixes - -* move gitattributes files to node templates ([#322](https://www.github.com/googleapis/node-gtoken/issues/322)) ([1d1786b](https://www.github.com/googleapis/node-gtoken/commit/1d1786b8915cd9a33577237ec6a6148a29e11a88)) - -### [5.0.2](https://www.github.com/googleapis/node-gtoken/compare/v5.0.1...v5.0.2) (2020-07-09) - - -### Bug Fixes - -* typeo in nodejs .gitattribute ([#311](https://www.github.com/googleapis/node-gtoken/issues/311)) ([8e17b4c](https://www.github.com/googleapis/node-gtoken/commit/8e17b4c0757832b2d31178684a6b24e1759d9f76)) - -### [5.0.1](https://www.github.com/googleapis/node-gtoken/compare/v5.0.0...v5.0.1) (2020-04-13) - - -### Bug Fixes - -* **deps:** update dependency gaxios to v3 ([#287](https://www.github.com/googleapis/node-gtoken/issues/287)) ([033731e](https://www.github.com/googleapis/node-gtoken/commit/033731e128fef0034b07b13183044e5060809418)) -* **deps:** update dependency google-p12-pem to v3 ([#280](https://www.github.com/googleapis/node-gtoken/issues/280)) ([25121b0](https://www.github.com/googleapis/node-gtoken/commit/25121b00cc9a4d32854f36ea8bc4bbd2cb77afbb)) -* apache license URL ([#468](https://www.github.com/googleapis/node-gtoken/issues/468)) ([#293](https://www.github.com/googleapis/node-gtoken/issues/293)) ([14a5bcd](https://www.github.com/googleapis/node-gtoken/commit/14a5bcd52d7b18d787c620451471e904784222d9)) - -## [5.0.0](https://www.github.com/googleapis/node-gtoken/compare/v4.1.4...v5.0.0) (2020-03-24) - - -### ⚠ BREAKING CHANGES - -* drop Node 8 from engines (#284) -* typescript@3.7.x introduced breaking changes to compiled code - -### Features - -* drop Node 8 from engines ([#284](https://www.github.com/googleapis/node-gtoken/issues/284)) ([209e007](https://www.github.com/googleapis/node-gtoken/commit/209e00746116a82a3cf9acc158aff12a4971f3d0)) - - -### Build System - -* update gts and typescript ([#283](https://www.github.com/googleapis/node-gtoken/issues/283)) ([ff076dc](https://www.github.com/googleapis/node-gtoken/commit/ff076dcb3da229238e7bed28d739c48986652c78)) - -### [4.1.4](https://www.github.com/googleapis/node-gtoken/compare/v4.1.3...v4.1.4) (2020-01-06) - - -### Bug Fixes - -* **deps:** pin TypeScript below 3.7.0 ([f1ae7b6](https://www.github.com/googleapis/node-gtoken/commit/f1ae7b64ead1c918546ae5bbe8546dfb4ecc788a)) -* **deps:** update dependency jws to v4 ([#251](https://www.github.com/googleapis/node-gtoken/issues/251)) ([e13542f](https://www.github.com/googleapis/node-gtoken/commit/e13542f888a81ed3ced0023e9b78ed25264b1d1c)) - -### [4.1.3](https://www.github.com/googleapis/node-gtoken/compare/v4.1.2...v4.1.3) (2019-11-15) - - -### Bug Fixes - -* **deps:** use typescript ~3.6.0 ([#246](https://www.github.com/googleapis/node-gtoken/issues/246)) ([5f725b7](https://www.github.com/googleapis/node-gtoken/commit/5f725b71f080e83058b1a23340acadc0c8704123)) - -### [4.1.2](https://www.github.com/googleapis/node-gtoken/compare/v4.1.1...v4.1.2) (2019-11-13) - - -### Bug Fixes - -* **docs:** add jsdoc-region-tag plugin ([#242](https://www.github.com/googleapis/node-gtoken/issues/242)) ([994c5cc](https://www.github.com/googleapis/node-gtoken/commit/994c5ccf92731599aa63b84c29a9d5f6b1431cc5)) - -### [4.1.1](https://www.github.com/googleapis/node-gtoken/compare/v4.1.0...v4.1.1) (2019-10-31) - - -### Bug Fixes - -* **deps:** update gaxios to 2.1.0 ([#238](https://www.github.com/googleapis/node-gtoken/issues/238)) ([bb12064](https://www.github.com/googleapis/node-gtoken/commit/bb1206420388399ef8992efe54c70bdb3fdcd965)) - -## [4.1.0](https://www.github.com/googleapis/node-gtoken/compare/v4.0.0...v4.1.0) (2019-09-24) - - -### Features - -* allow upstream libraries to force token refresh ([#229](https://www.github.com/googleapis/node-gtoken/issues/229)) ([1fd4dd1](https://www.github.com/googleapis/node-gtoken/commit/1fd4dd1)) - -## [4.0.0](https://www.github.com/googleapis/node-gtoken/compare/v3.0.2...v4.0.0) (2019-07-09) - - -### ⚠ BREAKING CHANGES - -* This commit creates multiple breaking changes. The `getToken()` -method previously returned `Promise`, where the string was the -`access_token` returned from the response. However, the `oauth2` endpoint could -return a variety of other fields, such as an `id_token` in special cases. - -```js -const token = await getToken(); -// old response: 'some.access.token' -// new response: { access_token: 'some.access.token'} -``` - -To further support this change, the `GoogleToken` class no longer exposes -a `token` variable. It now exposes `rawToken`, `accessToken`, and `idToken` -fields which can be used to access the relevant values returned in the -response. - -### Bug Fixes - -* expose all fields from response ([#218](https://www.github.com/googleapis/node-gtoken/issues/218)) ([d463370](https://www.github.com/googleapis/node-gtoken/commit/d463370)) - -### [3.0.2](https://www.github.com/googleapis/node-gtoken/compare/v3.0.1...v3.0.2) (2019-06-26) - - -### Bug Fixes - -* **docs:** make anchors work in jsdoc ([#215](https://www.github.com/googleapis/node-gtoken/issues/215)) ([c5f6c89](https://www.github.com/googleapis/node-gtoken/commit/c5f6c89)) - -### [3.0.1](https://www.github.com/googleapis/node-gtoken/compare/v3.0.0...v3.0.1) (2019-06-13) - - -### Bug Fixes - -* **docs:** move to new client docs URL ([#212](https://www.github.com/googleapis/node-gtoken/issues/212)) ([b7a8c75](https://www.github.com/googleapis/node-gtoken/commit/b7a8c75)) - -## [3.0.0](https://www.github.com/googleapis/node-gtoken/compare/v2.3.3...v3.0.0) (2019-05-07) - - -### Bug Fixes - -* **deps:** update dependency gaxios to v2 ([#191](https://www.github.com/googleapis/node-gtoken/issues/191)) ([da65ea7](https://www.github.com/googleapis/node-gtoken/commit/da65ea7)) -* **deps:** update dependency google-p12-pem to v2 ([#196](https://www.github.com/googleapis/node-gtoken/issues/196)) ([b510f06](https://www.github.com/googleapis/node-gtoken/commit/b510f06)) -* fs.readFile does not exist in browser ([#186](https://www.github.com/googleapis/node-gtoken/issues/186)) ([a16d8e7](https://www.github.com/googleapis/node-gtoken/commit/a16d8e7)) - - -### Build System - -* upgrade engines field to >=8.10.0 ([#194](https://www.github.com/googleapis/node-gtoken/issues/194)) ([ee4d6c8](https://www.github.com/googleapis/node-gtoken/commit/ee4d6c8)) - - -### BREAKING CHANGES - -* upgrade engines field to >=8.10.0 (#194) - -## v2.3.3 - -03-13-2019 14:54 PDT - -### Bug Fixes -- fix: propagate error message ([#173](https://github.com/google/node-gtoken/pull/173)) - -### Documentation -- docs: update links in contrib guide ([#171](https://github.com/google/node-gtoken/pull/171)) -- docs: move CONTRIBUTING.md to root ([#166](https://github.com/google/node-gtoken/pull/166)) -- docs: add lint/fix example to contributing guide ([#164](https://github.com/google/node-gtoken/pull/164)) - -### Internal / Testing Changes -- build: Add docuploader credentials to node publish jobs ([#176](https://github.com/google/node-gtoken/pull/176)) -- build: use node10 to run samples-test, system-test etc ([#175](https://github.com/google/node-gtoken/pull/175)) -- build: update release configuration -- chore(deps): update dependency mocha to v6 -- build: use linkinator for docs test ([#170](https://github.com/google/node-gtoken/pull/170)) -- build: create docs test npm scripts ([#169](https://github.com/google/node-gtoken/pull/169)) -- build: test using @grpc/grpc-js in CI ([#168](https://github.com/google/node-gtoken/pull/168)) -- build: ignore googleapis.com in doc link check ([#162](https://github.com/google/node-gtoken/pull/162)) -- build: check for 404s on all docs - -## v2.3.2 - -01-09-2019 13:40 PST - -### Documentation -- docs: generate docs with compodoc ([#154](https://github.com/googleapis/node-gtoken/pull/154)) -- docs: fix up the readme ([#153](https://github.com/googleapis/node-gtoken/pull/153)) - -### Internal / Testing Changes -- build: Re-generated to pick up changes in the API or client library generator. ([#158](https://github.com/googleapis/node-gtoken/pull/158)) -- build: check broken links in generated docs ([#152](https://github.com/googleapis/node-gtoken/pull/152)) -- fix: add a system test and get it passing ([#150](https://github.com/googleapis/node-gtoken/pull/150)) -- chore(build): inject yoshi automation key ([#149](https://github.com/googleapis/node-gtoken/pull/149)) - -## v2.3.1 - -12-10-2018 15:28 PST - -### Dependencies -- fix(deps): update dependency pify to v4 ([#87](https://github.com/google/node-gtoken/pull/87)) -- fix(deps): use gaxios for http requests ([#125](https://github.com/google/node-gtoken/pull/125)) - -### Internal / Testing Changes -- build: add Kokoro configs for autorelease ([#143](https://github.com/google/node-gtoken/pull/143)) -- chore: always nyc report before calling codecov ([#141](https://github.com/google/node-gtoken/pull/141)) -- chore: nyc ignore build/test by default ([#140](https://github.com/google/node-gtoken/pull/140)) -- chore: update synth metadata and templates ([#138](https://github.com/google/node-gtoken/pull/138)) -- fix(build): fix system key decryption ([#133](https://github.com/google/node-gtoken/pull/133)) -- chore(deps): update dependency typescript to ~3.2.0 ([#132](https://github.com/google/node-gtoken/pull/132)) -- chore: add a synth.metadata -- chore(deps): update dependency gts to ^0.9.0 ([#127](https://github.com/google/node-gtoken/pull/127)) -- chore: update eslintignore config ([#126](https://github.com/google/node-gtoken/pull/126)) -- chore: use latest npm on Windows ([#124](https://github.com/google/node-gtoken/pull/124)) -- chore: update CircleCI config ([#123](https://github.com/google/node-gtoken/pull/123)) -- chore: include build in eslintignore ([#120](https://github.com/google/node-gtoken/pull/120)) -- chore: update issue templates ([#116](https://github.com/google/node-gtoken/pull/116)) -- chore: remove old issue template ([#114](https://github.com/google/node-gtoken/pull/114)) -- build: run tests on node11 ([#113](https://github.com/google/node-gtoken/pull/113)) -- chore(deps): update dependency nock to v10 ([#111](https://github.com/google/node-gtoken/pull/111)) -- chores(build): do not collect sponge.xml from windows builds ([#112](https://github.com/google/node-gtoken/pull/112)) -- chore(deps): update dependency typescript to ~3.1.0 ([#110](https://github.com/google/node-gtoken/pull/110)) -- chores(build): run codecov on continuous builds ([#109](https://github.com/google/node-gtoken/pull/109)) -- chore: update new issue template ([#108](https://github.com/google/node-gtoken/pull/108)) -- chore: update CI config ([#105](https://github.com/google/node-gtoken/pull/105)) -- Update kokoro config ([#103](https://github.com/google/node-gtoken/pull/103)) -- Update CI config ([#101](https://github.com/google/node-gtoken/pull/101)) -- Don't publish sourcemaps ([#99](https://github.com/google/node-gtoken/pull/99)) -- Update kokoro config ([#97](https://github.com/google/node-gtoken/pull/97)) -- test: remove appveyor config ([#96](https://github.com/google/node-gtoken/pull/96)) -- Update CI config ([#95](https://github.com/google/node-gtoken/pull/95)) -- Enable prefer-const in the eslint config ([#94](https://github.com/google/node-gtoken/pull/94)) -- Enable no-var in eslint ([#93](https://github.com/google/node-gtoken/pull/93)) -- Update CI config ([#92](https://github.com/google/node-gtoken/pull/92)) -- Add synth and update CI config ([#91](https://github.com/google/node-gtoken/pull/91)) -- Retry npm install in CI ([#90](https://github.com/google/node-gtoken/pull/90)) -- chore(deps): update dependency nyc to v13 ([#88](https://github.com/google/node-gtoken/pull/88)) -- chore: ignore package-log.json ([#86](https://github.com/google/node-gtoken/pull/86)) -- chore: update renovate config ([#83](https://github.com/google/node-gtoken/pull/83)) -- chore(deps): lock file maintenance ([#85](https://github.com/google/node-gtoken/pull/85)) -- chore: remove greenkeeper badge ([#82](https://github.com/google/node-gtoken/pull/82)) -- test: throw on deprecation ([#81](https://github.com/google/node-gtoken/pull/81)) -- chore(deps): update dependency typescript to v3 ([#80](https://github.com/google/node-gtoken/pull/80)) -- chore: move mocha options to mocha.opts ([#78](https://github.com/google/node-gtoken/pull/78)) -- chore(deps): lock file maintenance ([#79](https://github.com/google/node-gtoken/pull/79)) -- test: use strictEqual in tests ([#76](https://github.com/google/node-gtoken/pull/76)) -- chore(deps): lock file maintenance ([#77](https://github.com/google/node-gtoken/pull/77)) -- chore(deps): update dependency typescript to ~2.9.0 ([#75](https://github.com/google/node-gtoken/pull/75)) -- chore: Configure Renovate ([#74](https://github.com/google/node-gtoken/pull/74)) -- Update gts to the latest version 🚀 ([#73](https://github.com/google/node-gtoken/pull/73)) -- Add Code of Conduct -- build: start testing against Node 10 ([#69](https://github.com/google/node-gtoken/pull/69)) -- chore(package): update nyc to version 12.0.2 ([#67](https://github.com/google/node-gtoken/pull/67)) -- chore(package): update @types/node to version 10.0.3 ([#65](https://github.com/google/node-gtoken/pull/65)) - -### 2.0.0 -New features: -- API now supports callback and promise based workflows - -Breaking changes: -- `GoogleToken` is now a class type, and must be instantiated. -- `GoogleToken.expires_at` renamed to `GoogleToken.expiresAt` -- `GoogleToken.raw_token` renamed to `GoogleToken.rawToken` -- `GoogleToken.token_expires` renamed to `GoogleToken.tokenExpires` diff --git a/reverse_engineering/node_modules/gtoken/LICENSE b/reverse_engineering/node_modules/gtoken/LICENSE deleted file mode 100644 index 061e6a6..0000000 --- a/reverse_engineering/node_modules/gtoken/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Ryan Seys - -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/reverse_engineering/node_modules/gtoken/README.md b/reverse_engineering/node_modules/gtoken/README.md deleted file mode 100644 index ee1207e..0000000 --- a/reverse_engineering/node_modules/gtoken/README.md +++ /dev/null @@ -1,187 +0,0 @@ -Google Cloud Platform logo - -# [node-gtoken](https://github.com/googleapis/node-gtoken) - -[![npm version][npm-image]][npm-url] -[![Known Vulnerabilities][snyk-image]][snyk-url] -[![codecov][codecov-image]][codecov-url] -[![Code Style: Google][gts-image]][gts-url] - -> Node.js Google Authentication Service Account Tokens - -This is a low level utility library used to interact with Google Authentication services. **In most cases, you probably want to use the [google-auth-library](https://github.com/googleapis/google-auth-library-nodejs) instead.** - -* [gtoken API Reference][client-docs] -* [github.com/googleapis/node-gtoken](https://github.com/googleapis/node-gtoken) - -## Installation - -``` sh -npm install gtoken -``` - -## Usage - -### Use with a `.pem` or `.p12` key file: - -``` js -const { GoogleToken } = require('gtoken'); -const gtoken = new GoogleToken({ - keyFile: 'path/to/key.pem', // or path to .p12 key file - email: 'my_service_account_email@developer.gserviceaccount.com', - scope: ['https://scope1', 'https://scope2'], // or space-delimited string of scopes - eagerRefreshThresholdMillis: 5 * 60 * 1000 -}); - -gtoken.getToken((err, tokens) => { - if (err) { - console.log(err); - return; - } - console.log(tokens); - // { - // access_token: 'very-secret-token', - // expires_in: 3600, - // token_type: 'Bearer' - // } -}); -``` - -You can also use the async/await style API: - -``` js -const tokens = await gtoken.getToken() -console.log(tokens); -``` - -Or use promises: - -```js -gtoken.getToken() - .then(tokens => { - console.log(tokens) - }) - .catch(console.error); -``` - -### Use with a service account `.json` key file: - -``` js -const { GoogleToken } = require('gtoken'); -const gtoken = new GoogleToken({ - keyFile: 'path/to/key.json', - scope: ['https://scope1', 'https://scope2'], // or space-delimited string of scopes - eagerRefreshThresholdMillis: 5 * 60 * 1000 -}); - -gtoken.getToken((err, tokens) => { - if (err) { - console.log(err); - return; - } - console.log(tokens); -}); -``` - -### Pass the private key as a string directly: - -``` js -const key = '-----BEGIN RSA PRIVATE KEY-----\nXXXXXXXXXXX...'; -const { GoogleToken } = require('gtoken'); -const gtoken = new GoogleToken({ - email: 'my_service_account_email@developer.gserviceaccount.com', - scope: ['https://scope1', 'https://scope2'], // or space-delimited string of scopes - key: key, - eagerRefreshThresholdMillis: 5 * 60 * 1000 -}); -``` - -## Options - -> Various options that can be set when creating initializing the `gtoken` object. - -- `options.email or options.iss`: The service account email address. -- `options.scope`: An array of scope strings or space-delimited string of scopes. -- `options.sub`: The email address of the user requesting delegated access. -- `options.keyFile`: The filename of `.json` key, `.pem` key or `.p12` key. -- `options.key`: The raw RSA private key value, in place of using `options.keyFile`. -- `options.additionalClaims`: Additional claims to include in the JWT when requesting a token. -- `options.eagerRefreshThresholdMillis`: How long must a token be valid for in order to return it from the cache. Defaults to 0. - -### .getToken(callback) - -> Returns the cached tokens or requests a new one and returns it. - -``` js -gtoken.getToken((err, token) => { - console.log(err || token); - // gtoken.rawToken value is also set -}); -``` - -### .getCredentials('path/to/key.json') - -> Given a keyfile, returns the key and (if available) the client email. - -```js -const creds = await gtoken.getCredentials('path/to/key.json'); -``` - -### Properties - -> Various properties set on the gtoken object after call to `.getToken()`. - -- `gtoken.idToken`: The OIDC token returned (if any). -- `gtoken.accessToken`: The access token. -- `gtoken.expiresAt`: The expiry date as milliseconds since 1970/01/01 -- `gtoken.key`: The raw key value. -- `gtoken.rawToken`: Most recent raw token data received from Google. - -### .hasExpired() - -> Returns true if the token has expired, or token does not exist. - -``` js -const tokens = await gtoken.getToken(); -gtoken.hasExpired(); // false -``` - -### .revokeToken() - -> Revoke the token if set. - -``` js -await gtoken.revokeToken(); -console.log('Token revoked!'); -``` - -## Downloading your private `.p12` key from Google - -1. Open the [Google Developer Console][gdevconsole]. -2. Open your project and under "APIs & auth", click Credentials. -3. Generate a new `.p12` key and download it into your project. - -## Converting your `.p12` key to a `.pem` key - -You can just specify your `.p12` file (with `.p12` extension) as the `keyFile` and it will automatically be converted to a `.pem` on the fly, however this results in a slight performance hit. If you'd like to convert to a `.pem` for use later, use OpenSSL if you have it installed. - -``` sh -$ openssl pkcs12 -in key.p12 -nodes -nocerts > key.pem -``` - -Don't forget, the passphrase when converting these files is the string `'notasecret'` - -## License - -[MIT](https://github.com/googleapis/node-gtoken/blob/master/LICENSE) - -[codecov-image]: https://codecov.io/gh/googleapis/node-gtoken/branch/master/graph/badge.svg -[codecov-url]: https://codecov.io/gh/googleapis/node-gtoken -[gdevconsole]: https://console.developers.google.com -[gts-image]: https://img.shields.io/badge/code%20style-google-blueviolet.svg -[gts-url]: https://www.npmjs.com/package/gts -[npm-image]: https://img.shields.io/npm/v/gtoken.svg -[npm-url]: https://npmjs.org/package/gtoken -[snyk-image]: https://snyk.io/test/github/googleapis/node-gtoken/badge.svg -[snyk-url]: https://snyk.io/test/github/googleapis/node-gtoken -[client-docs]: https://googleapis.dev/nodejs/gtoken/latest/ diff --git a/reverse_engineering/node_modules/gtoken/build/src/index.d.ts b/reverse_engineering/node_modules/gtoken/build/src/index.d.ts deleted file mode 100644 index 5441934..0000000 --- a/reverse_engineering/node_modules/gtoken/build/src/index.d.ts +++ /dev/null @@ -1,100 +0,0 @@ -/** - * Copyright 2018 Google LLC - * - * Distributed under MIT license. - * See file LICENSE for detail or copy at https://opensource.org/licenses/MIT - */ -export declare type GetTokenCallback = (err: Error | null, token?: TokenData) => void; -export interface Credentials { - privateKey: string; - clientEmail?: string; -} -export interface TokenData { - refresh_token?: string; - expires_in?: number; - access_token?: string; - token_type?: string; - id_token?: string; -} -export interface TokenOptions { - keyFile?: string; - key?: string; - email?: string; - iss?: string; - sub?: string; - scope?: string | string[]; - additionalClaims?: {}; - eagerRefreshThresholdMillis?: number; -} -export interface GetTokenOptions { - forceRefresh?: boolean; -} -export declare class GoogleToken { - get accessToken(): string | undefined; - get idToken(): string | undefined; - get tokenType(): string | undefined; - get refreshToken(): string | undefined; - expiresAt?: number; - key?: string; - keyFile?: string; - iss?: string; - sub?: string; - scope?: string; - rawToken?: TokenData; - tokenExpires?: number; - email?: string; - additionalClaims?: {}; - eagerRefreshThresholdMillis?: number; - private inFlightRequest?; - /** - * Create a GoogleToken. - * - * @param options Configuration object. - */ - constructor(options?: TokenOptions); - /** - * Returns whether the token has expired. - * - * @return true if the token has expired, false otherwise. - */ - hasExpired(): boolean; - /** - * Returns whether the token will expire within eagerRefreshThresholdMillis - * - * @return true if the token will be expired within eagerRefreshThresholdMillis, false otherwise. - */ - isTokenExpiring(): boolean; - /** - * Returns a cached token or retrieves a new one from Google. - * - * @param callback The callback function. - */ - getToken(opts?: GetTokenOptions): Promise; - getToken(callback: GetTokenCallback, opts?: GetTokenOptions): void; - /** - * Given a keyFile, extract the key and client email if available - * @param keyFile Path to a json, pem, or p12 file that contains the key. - * @returns an object with privateKey and clientEmail properties - */ - getCredentials(keyFile: string): Promise; - private getTokenAsync; - private getTokenAsyncInner; - private ensureEmail; - /** - * Revoke the token if one is set. - * - * @param callback The callback function. - */ - revokeToken(): Promise; - revokeToken(callback: (err?: Error) => void): void; - private revokeTokenAsync; - /** - * Configure the GoogleToken for re-use. - * @param {object} options Configuration object. - */ - private configure; - /** - * Request the token from Google. - */ - private requestToken; -} diff --git a/reverse_engineering/node_modules/gtoken/build/src/index.js b/reverse_engineering/node_modules/gtoken/build/src/index.js deleted file mode 100644 index e92cc95..0000000 --- a/reverse_engineering/node_modules/gtoken/build/src/index.js +++ /dev/null @@ -1,263 +0,0 @@ -"use strict"; -/** - * Copyright 2018 Google LLC - * - * Distributed under MIT license. - * See file LICENSE for detail or copy at https://opensource.org/licenses/MIT - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GoogleToken = void 0; -const fs = require("fs"); -const gaxios_1 = require("gaxios"); -const jws = require("jws"); -const path = require("path"); -const util_1 = require("util"); -const readFile = fs.readFile - ? util_1.promisify(fs.readFile) - : async () => { - // if running in the web-browser, fs.readFile may not have been shimmed. - throw new ErrorWithCode('use key rather than keyFile.', 'MISSING_CREDENTIALS'); - }; -const GOOGLE_TOKEN_URL = 'https://www.googleapis.com/oauth2/v4/token'; -const GOOGLE_REVOKE_TOKEN_URL = 'https://accounts.google.com/o/oauth2/revoke?token='; -class ErrorWithCode extends Error { - constructor(message, code) { - super(message); - this.code = code; - } -} -let getPem; -class GoogleToken { - /** - * Create a GoogleToken. - * - * @param options Configuration object. - */ - constructor(options) { - this.configure(options); - } - get accessToken() { - return this.rawToken ? this.rawToken.access_token : undefined; - } - get idToken() { - return this.rawToken ? this.rawToken.id_token : undefined; - } - get tokenType() { - return this.rawToken ? this.rawToken.token_type : undefined; - } - get refreshToken() { - return this.rawToken ? this.rawToken.refresh_token : undefined; - } - /** - * Returns whether the token has expired. - * - * @return true if the token has expired, false otherwise. - */ - hasExpired() { - const now = new Date().getTime(); - if (this.rawToken && this.expiresAt) { - return now >= this.expiresAt; - } - else { - return true; - } - } - /** - * Returns whether the token will expire within eagerRefreshThresholdMillis - * - * @return true if the token will be expired within eagerRefreshThresholdMillis, false otherwise. - */ - isTokenExpiring() { - var _a; - const now = new Date().getTime(); - const eagerRefreshThresholdMillis = (_a = this.eagerRefreshThresholdMillis) !== null && _a !== void 0 ? _a : 0; - if (this.rawToken && this.expiresAt) { - return this.expiresAt <= now + eagerRefreshThresholdMillis; - } - else { - return true; - } - } - getToken(callback, opts = {}) { - if (typeof callback === 'object') { - opts = callback; - callback = undefined; - } - opts = Object.assign({ - forceRefresh: false, - }, opts); - if (callback) { - const cb = callback; - this.getTokenAsync(opts).then(t => cb(null, t), callback); - return; - } - return this.getTokenAsync(opts); - } - /** - * Given a keyFile, extract the key and client email if available - * @param keyFile Path to a json, pem, or p12 file that contains the key. - * @returns an object with privateKey and clientEmail properties - */ - async getCredentials(keyFile) { - const ext = path.extname(keyFile); - switch (ext) { - case '.json': { - const key = await readFile(keyFile, 'utf8'); - const body = JSON.parse(key); - const privateKey = body.private_key; - const clientEmail = body.client_email; - if (!privateKey || !clientEmail) { - throw new ErrorWithCode('private_key and client_email are required.', 'MISSING_CREDENTIALS'); - } - return { privateKey, clientEmail }; - } - case '.der': - case '.crt': - case '.pem': { - const privateKey = await readFile(keyFile, 'utf8'); - return { privateKey }; - } - case '.p12': - case '.pfx': { - // NOTE: The loading of `google-p12-pem` is deferred for performance - // reasons. The `node-forge` npm module in `google-p12-pem` adds a fair - // bit time to overall module loading, and is likely not frequently - // used. In a future release, p12 support will be entirely removed. - if (!getPem) { - getPem = (await Promise.resolve().then(() => require('google-p12-pem'))).getPem; - } - const privateKey = await getPem(keyFile); - return { privateKey }; - } - default: - throw new ErrorWithCode('Unknown certificate type. Type is determined based on file extension. ' + - 'Current supported extensions are *.json, *.pem, and *.p12.', 'UNKNOWN_CERTIFICATE_TYPE'); - } - } - async getTokenAsync(opts) { - if (this.inFlightRequest && !opts.forceRefresh) { - return this.inFlightRequest; - } - try { - return await (this.inFlightRequest = this.getTokenAsyncInner(opts)); - } - finally { - this.inFlightRequest = undefined; - } - } - async getTokenAsyncInner(opts) { - if (this.isTokenExpiring() === false && opts.forceRefresh === false) { - return Promise.resolve(this.rawToken); - } - if (!this.key && !this.keyFile) { - throw new Error('No key or keyFile set.'); - } - if (!this.key && this.keyFile) { - const creds = await this.getCredentials(this.keyFile); - this.key = creds.privateKey; - this.iss = creds.clientEmail || this.iss; - if (!creds.clientEmail) { - this.ensureEmail(); - } - } - return this.requestToken(); - } - ensureEmail() { - if (!this.iss) { - throw new ErrorWithCode('email is required.', 'MISSING_CREDENTIALS'); - } - } - revokeToken(callback) { - if (callback) { - this.revokeTokenAsync().then(() => callback(), callback); - return; - } - return this.revokeTokenAsync(); - } - async revokeTokenAsync() { - if (!this.accessToken) { - throw new Error('No token to revoke.'); - } - const url = GOOGLE_REVOKE_TOKEN_URL + this.accessToken; - await gaxios_1.request({ url }); - this.configure({ - email: this.iss, - sub: this.sub, - key: this.key, - keyFile: this.keyFile, - scope: this.scope, - additionalClaims: this.additionalClaims, - }); - } - /** - * Configure the GoogleToken for re-use. - * @param {object} options Configuration object. - */ - configure(options = {}) { - this.keyFile = options.keyFile; - this.key = options.key; - this.rawToken = undefined; - this.iss = options.email || options.iss; - this.sub = options.sub; - this.additionalClaims = options.additionalClaims; - if (typeof options.scope === 'object') { - this.scope = options.scope.join(' '); - } - else { - this.scope = options.scope; - } - this.eagerRefreshThresholdMillis = options.eagerRefreshThresholdMillis; - } - /** - * Request the token from Google. - */ - async requestToken() { - const iat = Math.floor(new Date().getTime() / 1000); - const additionalClaims = this.additionalClaims || {}; - const payload = Object.assign({ - iss: this.iss, - scope: this.scope, - aud: GOOGLE_TOKEN_URL, - exp: iat + 3600, - iat, - sub: this.sub, - }, additionalClaims); - const signedJWT = jws.sign({ - header: { alg: 'RS256' }, - payload, - secret: this.key, - }); - try { - const r = await gaxios_1.request({ - method: 'POST', - url: GOOGLE_TOKEN_URL, - data: { - grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer', - assertion: signedJWT, - }, - headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, - responseType: 'json', - }); - this.rawToken = r.data; - this.expiresAt = - r.data.expires_in === null || r.data.expires_in === undefined - ? undefined - : (iat + r.data.expires_in) * 1000; - return this.rawToken; - } - catch (e) { - this.rawToken = undefined; - this.tokenExpires = undefined; - const body = e.response && e.response.data ? e.response.data : {}; - if (body.error) { - const desc = body.error_description - ? `: ${body.error_description}` - : ''; - e.message = `${body.error}${desc}`; - } - throw e; - } - } -} -exports.GoogleToken = GoogleToken; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/gtoken/package.json b/reverse_engineering/node_modules/gtoken/package.json deleted file mode 100644 index 15a973b..0000000 --- a/reverse_engineering/node_modules/gtoken/package.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "_from": "gtoken@^5.0.4", - "_id": "gtoken@5.3.0", - "_inBundle": false, - "_integrity": "sha512-mCcISYiaRZrJpfqOs0QWa6lfEM/C1V9ASkzFmuz43XBb5s1Vynh+CZy1ECeeJXVGx2PRByjYzb4Y4/zr1byr0w==", - "_location": "/gtoken", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "gtoken@^5.0.4", - "name": "gtoken", - "escapedName": "gtoken", - "rawSpec": "^5.0.4", - "saveSpec": null, - "fetchSpec": "^5.0.4" - }, - "_requiredBy": [ - "/google-auth-library" - ], - "_resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.0.tgz", - "_shasum": "6536eb2880d9829f0b9d78f756795d4d9064b217", - "_spec": "gtoken@^5.0.4", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/google-auth-library", - "author": { - "name": "Google, LLC" - }, - "bugs": { - "url": "https://github.com/google/node-gtoken/issues" - }, - "bundleDependencies": false, - "dependencies": { - "gaxios": "^4.0.0", - "google-p12-pem": "^3.0.3", - "jws": "^4.0.0" - }, - "deprecated": false, - "description": "Node.js Google Authentication Service Account Tokens", - "devDependencies": { - "@compodoc/compodoc": "^1.1.7", - "@microsoft/api-documenter": "^7.8.10", - "@microsoft/api-extractor": "^7.8.10", - "@types/jws": "^3.1.0", - "@types/mocha": "^8.0.0", - "@types/node": "^14.0.0", - "c8": "^7.0.0", - "gts": "^3.0.0", - "linkinator": "^2.0.0", - "mocha": "^8.0.0", - "nock": "^13.0.0", - "typescript": "^3.8.3" - }, - "engines": { - "node": ">=10" - }, - "files": [ - "build/src", - "!build/src/**/*.map" - ], - "homepage": "https://github.com/google/node-gtoken#readme", - "keywords": [ - "google", - "service", - "account", - "api", - "token", - "api", - "auth" - ], - "license": "MIT", - "main": "./build/src/index.js", - "name": "gtoken", - "repository": { - "type": "git", - "url": "git+https://github.com/google/node-gtoken.git" - }, - "scripts": { - "api-documenter": "api-documenter yaml --input-folder=temp", - "api-extractor": "api-extractor run --local", - "clean": "gts clean", - "compile": "tsc -p .", - "docs": "compodoc src/", - "docs-test": "linkinator docs", - "fix": "gts fix", - "lint": "gts check", - "precompile": "gts clean", - "predocs-test": "npm run docs", - "prelint": "cd samples; npm link ../; npm install", - "prepare": "npm run compile", - "presystem-test": "npm run compile", - "pretest": "npm run compile", - "samples-test": "cd samples/ && npm link ../ && npm test && cd ../", - "system-test": "mocha build/system-test", - "test": "c8 mocha build/test" - }, - "types": "./build/src/index.d.ts", - "version": "5.3.0" -} diff --git a/reverse_engineering/node_modules/http-proxy-agent/README.md b/reverse_engineering/node_modules/http-proxy-agent/README.md deleted file mode 100644 index d60e206..0000000 --- a/reverse_engineering/node_modules/http-proxy-agent/README.md +++ /dev/null @@ -1,74 +0,0 @@ -http-proxy-agent -================ -### An HTTP(s) proxy `http.Agent` implementation for HTTP -[![Build Status](https://github.com/TooTallNate/node-http-proxy-agent/workflows/Node%20CI/badge.svg)](https://github.com/TooTallNate/node-http-proxy-agent/actions?workflow=Node+CI) - -This module provides an `http.Agent` implementation that connects to a specified -HTTP or HTTPS proxy server, and can be used with the built-in `http` module. - -__Note:__ For HTTP proxy usage with the `https` module, check out -[`node-https-proxy-agent`](https://github.com/TooTallNate/node-https-proxy-agent). - -Installation ------------- - -Install with `npm`: - -``` bash -$ npm install http-proxy-agent -``` - - -Example -------- - -``` js -var url = require('url'); -var http = require('http'); -var HttpProxyAgent = require('http-proxy-agent'); - -// HTTP/HTTPS proxy to connect to -var proxy = process.env.http_proxy || 'http://168.63.76.32:3128'; -console.log('using proxy server %j', proxy); - -// HTTP endpoint for the proxy to connect to -var endpoint = process.argv[2] || 'http://nodejs.org/api/'; -console.log('attempting to GET %j', endpoint); -var opts = url.parse(endpoint); - -// create an instance of the `HttpProxyAgent` class with the proxy server information -var agent = new HttpProxyAgent(proxy); -opts.agent = agent; - -http.get(opts, function (res) { - console.log('"response" event!', res.headers); - res.pipe(process.stdout); -}); -``` - - -License -------- - -(The MIT License) - -Copyright (c) 2013 Nathan Rajlich <nathan@tootallnate.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. diff --git a/reverse_engineering/node_modules/http-proxy-agent/dist/agent.d.ts b/reverse_engineering/node_modules/http-proxy-agent/dist/agent.d.ts deleted file mode 100644 index 3f043f7..0000000 --- a/reverse_engineering/node_modules/http-proxy-agent/dist/agent.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -/// -import net from 'net'; -import { Agent, ClientRequest, RequestOptions } from 'agent-base'; -import { HttpProxyAgentOptions } from '.'; -interface HttpProxyAgentClientRequest extends ClientRequest { - path: string; - output?: string[]; - outputData?: { - data: string; - }[]; - _header?: string | null; - _implicitHeader(): void; -} -/** - * The `HttpProxyAgent` implements an HTTP Agent subclass that connects - * to the specified "HTTP proxy server" in order to proxy HTTP requests. - * - * @api public - */ -export default class HttpProxyAgent extends Agent { - private secureProxy; - private proxy; - constructor(_opts: string | HttpProxyAgentOptions); - /** - * Called when the node-core HTTP client library is creating a - * new HTTP request. - * - * @api protected - */ - callback(req: HttpProxyAgentClientRequest, opts: RequestOptions): Promise; -} -export {}; diff --git a/reverse_engineering/node_modules/http-proxy-agent/dist/agent.js b/reverse_engineering/node_modules/http-proxy-agent/dist/agent.js deleted file mode 100644 index 0252850..0000000 --- a/reverse_engineering/node_modules/http-proxy-agent/dist/agent.js +++ /dev/null @@ -1,145 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const net_1 = __importDefault(require("net")); -const tls_1 = __importDefault(require("tls")); -const url_1 = __importDefault(require("url")); -const debug_1 = __importDefault(require("debug")); -const once_1 = __importDefault(require("@tootallnate/once")); -const agent_base_1 = require("agent-base"); -const debug = debug_1.default('http-proxy-agent'); -function isHTTPS(protocol) { - return typeof protocol === 'string' ? /^https:?$/i.test(protocol) : false; -} -/** - * The `HttpProxyAgent` implements an HTTP Agent subclass that connects - * to the specified "HTTP proxy server" in order to proxy HTTP requests. - * - * @api public - */ -class HttpProxyAgent extends agent_base_1.Agent { - constructor(_opts) { - let opts; - if (typeof _opts === 'string') { - opts = url_1.default.parse(_opts); - } - else { - opts = _opts; - } - if (!opts) { - throw new Error('an HTTP(S) proxy server `host` and `port` must be specified!'); - } - debug('Creating new HttpProxyAgent instance: %o', opts); - super(opts); - const proxy = Object.assign({}, opts); - // If `true`, then connect to the proxy server over TLS. - // Defaults to `false`. - this.secureProxy = opts.secureProxy || isHTTPS(proxy.protocol); - // Prefer `hostname` over `host`, and set the `port` if needed. - proxy.host = proxy.hostname || proxy.host; - if (typeof proxy.port === 'string') { - proxy.port = parseInt(proxy.port, 10); - } - if (!proxy.port && proxy.host) { - proxy.port = this.secureProxy ? 443 : 80; - } - if (proxy.host && proxy.path) { - // If both a `host` and `path` are specified then it's most likely - // the result of a `url.parse()` call... we need to remove the - // `path` portion so that `net.connect()` doesn't attempt to open - // that as a Unix socket file. - delete proxy.path; - delete proxy.pathname; - } - this.proxy = proxy; - } - /** - * Called when the node-core HTTP client library is creating a - * new HTTP request. - * - * @api protected - */ - callback(req, opts) { - return __awaiter(this, void 0, void 0, function* () { - const { proxy, secureProxy } = this; - const parsed = url_1.default.parse(req.path); - if (!parsed.protocol) { - parsed.protocol = 'http:'; - } - if (!parsed.hostname) { - parsed.hostname = opts.hostname || opts.host || null; - } - if (parsed.port == null && typeof opts.port) { - parsed.port = String(opts.port); - } - if (parsed.port === '80') { - // if port is 80, then we can remove the port so that the - // ":80" portion is not on the produced URL - delete parsed.port; - } - // Change the `http.ClientRequest` instance's "path" field - // to the absolute path of the URL that will be requested. - req.path = url_1.default.format(parsed); - // Inject the `Proxy-Authorization` header if necessary. - if (proxy.auth) { - req.setHeader('Proxy-Authorization', `Basic ${Buffer.from(proxy.auth).toString('base64')}`); - } - // Create a socket connection to the proxy server. - let socket; - if (secureProxy) { - debug('Creating `tls.Socket`: %o', proxy); - socket = tls_1.default.connect(proxy); - } - else { - debug('Creating `net.Socket`: %o', proxy); - socket = net_1.default.connect(proxy); - } - // At this point, the http ClientRequest's internal `_header` field - // might have already been set. If this is the case then we'll need - // to re-generate the string since we just changed the `req.path`. - if (req._header) { - let first; - let endOfHeaders; - debug('Regenerating stored HTTP header string for request'); - req._header = null; - req._implicitHeader(); - if (req.output && req.output.length > 0) { - // Node < 12 - debug('Patching connection write() output buffer with updated header'); - first = req.output[0]; - endOfHeaders = first.indexOf('\r\n\r\n') + 4; - req.output[0] = req._header + first.substring(endOfHeaders); - debug('Output buffer: %o', req.output); - } - else if (req.outputData && req.outputData.length > 0) { - // Node >= 12 - debug('Patching connection write() output buffer with updated header'); - first = req.outputData[0].data; - endOfHeaders = first.indexOf('\r\n\r\n') + 4; - req.outputData[0].data = - req._header + first.substring(endOfHeaders); - debug('Output buffer: %o', req.outputData[0].data); - } - } - // Wait for the socket's `connect` event, so that this `callback()` - // function throws instead of the `http` request machinery. This is - // important for i.e. `PacProxyAgent` which determines a failed proxy - // connection via the `callback()` function throwing. - yield once_1.default(socket, 'connect'); - return socket; - }); - } -} -exports.default = HttpProxyAgent; -//# sourceMappingURL=agent.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/http-proxy-agent/dist/agent.js.map b/reverse_engineering/node_modules/http-proxy-agent/dist/agent.js.map deleted file mode 100644 index 7a40762..0000000 --- a/reverse_engineering/node_modules/http-proxy-agent/dist/agent.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,8CAAsB;AACtB,8CAAsB;AACtB,8CAAsB;AACtB,kDAAgC;AAChC,6DAAqC;AACrC,2CAAkE;AAGlE,MAAM,KAAK,GAAG,eAAW,CAAC,kBAAkB,CAAC,CAAC;AAY9C,SAAS,OAAO,CAAC,QAAwB;IACxC,OAAO,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC3E,CAAC;AAED;;;;;GAKG;AACH,MAAqB,cAAe,SAAQ,kBAAK;IAIhD,YAAY,KAAqC;QAChD,IAAI,IAA2B,CAAC;QAChC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC9B,IAAI,GAAG,aAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SACxB;aAAM;YACN,IAAI,GAAG,KAAK,CAAC;SACb;QACD,IAAI,CAAC,IAAI,EAAE;YACV,MAAM,IAAI,KAAK,CACd,8DAA8D,CAC9D,CAAC;SACF;QACD,KAAK,CAAC,0CAA0C,EAAE,IAAI,CAAC,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,CAAC;QAEZ,MAAM,KAAK,qBAA+B,IAAI,CAAE,CAAC;QAEjD,wDAAwD;QACxD,uBAAuB;QACvB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAE/D,+DAA+D;QAC/D,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC;QAC1C,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;YACnC,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;SACtC;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE;YAC9B,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;SACzC;QAED,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE;YAC7B,kEAAkE;YAClE,8DAA8D;YAC9D,iEAAiE;YACjE,8BAA8B;YAC9B,OAAO,KAAK,CAAC,IAAI,CAAC;YAClB,OAAO,KAAK,CAAC,QAAQ,CAAC;SACtB;QAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,CAAC;IAED;;;;;OAKG;IACG,QAAQ,CACb,GAAgC,EAChC,IAAoB;;YAEpB,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;YACpC,MAAM,MAAM,GAAG,aAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAEnC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;gBACrB,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC;aAC1B;YAED,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;gBACrB,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;aACrD;YAED,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,EAAE;gBAC5C,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAChC;YAED,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE;gBACzB,yDAAyD;gBACzD,2CAA2C;gBAC3C,OAAO,MAAM,CAAC,IAAI,CAAC;aACnB;YAED,0DAA0D;YAC1D,0DAA0D;YAC1D,GAAG,CAAC,IAAI,GAAG,aAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAE9B,wDAAwD;YACxD,IAAI,KAAK,CAAC,IAAI,EAAE;gBACf,GAAG,CAAC,SAAS,CACZ,qBAAqB,EACrB,SAAS,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CACrD,CAAC;aACF;YAED,kDAAkD;YAClD,IAAI,MAAkB,CAAC;YACvB,IAAI,WAAW,EAAE;gBAChB,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;gBAC1C,MAAM,GAAG,aAAG,CAAC,OAAO,CAAC,KAA8B,CAAC,CAAC;aACrD;iBAAM;gBACN,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;gBAC1C,MAAM,GAAG,aAAG,CAAC,OAAO,CAAC,KAA2B,CAAC,CAAC;aAClD;YAED,mEAAmE;YACnE,mEAAmE;YACnE,kEAAkE;YAClE,IAAI,GAAG,CAAC,OAAO,EAAE;gBAChB,IAAI,KAAa,CAAC;gBAClB,IAAI,YAAoB,CAAC;gBACzB,KAAK,CAAC,oDAAoD,CAAC,CAAC;gBAC5D,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;gBACnB,GAAG,CAAC,eAAe,EAAE,CAAC;gBACtB,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;oBACxC,YAAY;oBACZ,KAAK,CACJ,+DAA+D,CAC/D,CAAC;oBACF,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACtB,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;oBAC7C,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;oBAC5D,KAAK,CAAC,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;iBACvC;qBAAM,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;oBACvD,aAAa;oBACb,KAAK,CACJ,+DAA+D,CAC/D,CAAC;oBACF,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC/B,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;oBAC7C,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI;wBACrB,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;oBAC7C,KAAK,CAAC,mBAAmB,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;iBACnD;aACD;YAED,mEAAmE;YACnE,mEAAmE;YACnE,qEAAqE;YACrE,qDAAqD;YACrD,MAAM,cAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAE9B,OAAO,MAAM,CAAC;QACf,CAAC;KAAA;CACD;AA1ID,iCA0IC"} \ No newline at end of file diff --git a/reverse_engineering/node_modules/http-proxy-agent/dist/index.d.ts b/reverse_engineering/node_modules/http-proxy-agent/dist/index.d.ts deleted file mode 100644 index 24bdb52..0000000 --- a/reverse_engineering/node_modules/http-proxy-agent/dist/index.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -/// -import net from 'net'; -import tls from 'tls'; -import { Url } from 'url'; -import { AgentOptions } from 'agent-base'; -import _HttpProxyAgent from './agent'; -declare function createHttpProxyAgent(opts: string | createHttpProxyAgent.HttpProxyAgentOptions): _HttpProxyAgent; -declare namespace createHttpProxyAgent { - interface BaseHttpProxyAgentOptions { - secureProxy?: boolean; - host?: string | null; - path?: string | null; - port?: string | number | null; - } - export interface HttpProxyAgentOptions extends AgentOptions, BaseHttpProxyAgentOptions, Partial> { - } - export type HttpProxyAgent = _HttpProxyAgent; - export const HttpProxyAgent: typeof _HttpProxyAgent; - export {}; -} -export = createHttpProxyAgent; diff --git a/reverse_engineering/node_modules/http-proxy-agent/dist/index.js b/reverse_engineering/node_modules/http-proxy-agent/dist/index.js deleted file mode 100644 index 0a71180..0000000 --- a/reverse_engineering/node_modules/http-proxy-agent/dist/index.js +++ /dev/null @@ -1,14 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -const agent_1 = __importDefault(require("./agent")); -function createHttpProxyAgent(opts) { - return new agent_1.default(opts); -} -(function (createHttpProxyAgent) { - createHttpProxyAgent.HttpProxyAgent = agent_1.default; - createHttpProxyAgent.prototype = agent_1.default.prototype; -})(createHttpProxyAgent || (createHttpProxyAgent = {})); -module.exports = createHttpProxyAgent; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/http-proxy-agent/dist/index.js.map b/reverse_engineering/node_modules/http-proxy-agent/dist/index.js.map deleted file mode 100644 index e07dae5..0000000 --- a/reverse_engineering/node_modules/http-proxy-agent/dist/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAIA,oDAAsC;AAEtC,SAAS,oBAAoB,CAC5B,IAAyD;IAEzD,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC;AAED,WAAU,oBAAoB;IAmBhB,mCAAc,GAAG,eAAe,CAAC;IAE9C,oBAAoB,CAAC,SAAS,GAAG,eAAe,CAAC,SAAS,CAAC;AAC5D,CAAC,EAtBS,oBAAoB,KAApB,oBAAoB,QAsB7B;AAED,iBAAS,oBAAoB,CAAC"} \ No newline at end of file diff --git a/reverse_engineering/node_modules/http-proxy-agent/package.json b/reverse_engineering/node_modules/http-proxy-agent/package.json deleted file mode 100644 index e4ce6d3..0000000 --- a/reverse_engineering/node_modules/http-proxy-agent/package.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "_from": "http-proxy-agent@^4.0.0", - "_id": "http-proxy-agent@4.0.1", - "_inBundle": false, - "_integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "_location": "/http-proxy-agent", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "http-proxy-agent@^4.0.0", - "name": "http-proxy-agent", - "escapedName": "http-proxy-agent", - "rawSpec": "^4.0.0", - "saveSpec": null, - "fetchSpec": "^4.0.0" - }, - "_requiredBy": [ - "/teeny-request" - ], - "_resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "_shasum": "8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a", - "_spec": "http-proxy-agent@^4.0.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/teeny-request", - "author": { - "name": "Nathan Rajlich", - "email": "nathan@tootallnate.net", - "url": "http://n8.io/" - }, - "bugs": { - "url": "https://github.com/TooTallNate/node-http-proxy-agent/issues" - }, - "bundleDependencies": false, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "deprecated": false, - "description": "An HTTP(s) proxy `http.Agent` implementation for HTTP", - "devDependencies": { - "@types/debug": "4", - "@types/node": "^12.12.11", - "@typescript-eslint/eslint-plugin": "1.6.0", - "@typescript-eslint/parser": "1.1.0", - "eslint": "5.16.0", - "eslint-config-airbnb": "17.1.0", - "eslint-config-prettier": "4.1.0", - "eslint-import-resolver-typescript": "1.1.1", - "eslint-plugin-import": "2.16.0", - "eslint-plugin-jsx-a11y": "6.2.1", - "eslint-plugin-react": "7.12.4", - "mocha": "^6.2.2", - "proxy": "1", - "rimraf": "^3.0.0", - "typescript": "^3.5.3" - }, - "engines": { - "node": ">= 6" - }, - "files": [ - "dist" - ], - "homepage": "https://github.com/TooTallNate/node-http-proxy-agent#readme", - "keywords": [ - "http", - "proxy", - "endpoint", - "agent" - ], - "license": "MIT", - "main": "./dist/index.js", - "name": "http-proxy-agent", - "repository": { - "type": "git", - "url": "git://github.com/TooTallNate/node-http-proxy-agent.git" - }, - "scripts": { - "build": "tsc", - "prebuild": "rimraf dist", - "prepublishOnly": "npm run build", - "test": "mocha", - "test-lint": "eslint src --ext .js,.ts" - }, - "types": "./dist/index.d.ts", - "version": "4.0.1" -} diff --git a/reverse_engineering/node_modules/https-proxy-agent/README.md b/reverse_engineering/node_modules/https-proxy-agent/README.md deleted file mode 100644 index 328656a..0000000 --- a/reverse_engineering/node_modules/https-proxy-agent/README.md +++ /dev/null @@ -1,137 +0,0 @@ -https-proxy-agent -================ -### An HTTP(s) proxy `http.Agent` implementation for HTTPS -[![Build Status](https://github.com/TooTallNate/node-https-proxy-agent/workflows/Node%20CI/badge.svg)](https://github.com/TooTallNate/node-https-proxy-agent/actions?workflow=Node+CI) - -This module provides an `http.Agent` implementation that connects to a specified -HTTP or HTTPS proxy server, and can be used with the built-in `https` module. - -Specifically, this `Agent` implementation connects to an intermediary "proxy" -server and issues the [CONNECT HTTP method][CONNECT], which tells the proxy to -open a direct TCP connection to the destination server. - -Since this agent implements the CONNECT HTTP method, it also works with other -protocols that use this method when connecting over proxies (i.e. WebSockets). -See the "Examples" section below for more. - - -Installation ------------- - -Install with `npm`: - -``` bash -$ npm install https-proxy-agent -``` - - -Examples --------- - -#### `https` module example - -``` js -var url = require('url'); -var https = require('https'); -var HttpsProxyAgent = require('https-proxy-agent'); - -// HTTP/HTTPS proxy to connect to -var proxy = process.env.http_proxy || 'http://168.63.76.32:3128'; -console.log('using proxy server %j', proxy); - -// HTTPS endpoint for the proxy to connect to -var endpoint = process.argv[2] || 'https://graph.facebook.com/tootallnate'; -console.log('attempting to GET %j', endpoint); -var options = url.parse(endpoint); - -// create an instance of the `HttpsProxyAgent` class with the proxy server information -var agent = new HttpsProxyAgent(proxy); -options.agent = agent; - -https.get(options, function (res) { - console.log('"response" event!', res.headers); - res.pipe(process.stdout); -}); -``` - -#### `ws` WebSocket connection example - -``` js -var url = require('url'); -var WebSocket = require('ws'); -var HttpsProxyAgent = require('https-proxy-agent'); - -// HTTP/HTTPS proxy to connect to -var proxy = process.env.http_proxy || 'http://168.63.76.32:3128'; -console.log('using proxy server %j', proxy); - -// WebSocket endpoint for the proxy to connect to -var endpoint = process.argv[2] || 'ws://echo.websocket.org'; -var parsed = url.parse(endpoint); -console.log('attempting to connect to WebSocket %j', endpoint); - -// create an instance of the `HttpsProxyAgent` class with the proxy server information -var options = url.parse(proxy); - -var agent = new HttpsProxyAgent(options); - -// finally, initiate the WebSocket connection -var socket = new WebSocket(endpoint, { agent: agent }); - -socket.on('open', function () { - console.log('"open" event!'); - socket.send('hello world'); -}); - -socket.on('message', function (data, flags) { - console.log('"message" event! %j %j', data, flags); - socket.close(); -}); -``` - -API ---- - -### new HttpsProxyAgent(Object options) - -The `HttpsProxyAgent` class implements an `http.Agent` subclass that connects -to the specified "HTTP(s) proxy server" in order to proxy HTTPS and/or WebSocket -requests. This is achieved by using the [HTTP `CONNECT` method][CONNECT]. - -The `options` argument may either be a string URI of the proxy server to use, or an -"options" object with more specific properties: - - * `host` - String - Proxy host to connect to (may use `hostname` as well). Required. - * `port` - Number - Proxy port to connect to. Required. - * `protocol` - String - If `https:`, then use TLS to connect to the proxy. - * `headers` - Object - Additional HTTP headers to be sent on the HTTP CONNECT method. - * Any other options given are passed to the `net.connect()`/`tls.connect()` functions. - - -License -------- - -(The MIT License) - -Copyright (c) 2013 Nathan Rajlich <nathan@tootallnate.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. - -[CONNECT]: http://en.wikipedia.org/wiki/HTTP_tunnel#HTTP_CONNECT_Tunneling diff --git a/reverse_engineering/node_modules/https-proxy-agent/dist/agent.d.ts b/reverse_engineering/node_modules/https-proxy-agent/dist/agent.d.ts deleted file mode 100644 index 4f1c636..0000000 --- a/reverse_engineering/node_modules/https-proxy-agent/dist/agent.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -/// -import net from 'net'; -import { Agent, ClientRequest, RequestOptions } from 'agent-base'; -import { HttpsProxyAgentOptions } from '.'; -/** - * The `HttpsProxyAgent` implements an HTTP Agent subclass that connects to - * the specified "HTTP(s) proxy server" in order to proxy HTTPS requests. - * - * Outgoing HTTP requests are first tunneled through the proxy server using the - * `CONNECT` HTTP request method to establish a connection to the proxy server, - * and then the proxy server connects to the destination target and issues the - * HTTP request from the proxy server. - * - * `https:` requests have their socket connection upgraded to TLS once - * the connection to the proxy server has been established. - * - * @api public - */ -export default class HttpsProxyAgent extends Agent { - private secureProxy; - private proxy; - constructor(_opts: string | HttpsProxyAgentOptions); - /** - * Called when the node-core HTTP client library is creating a - * new HTTP request. - * - * @api protected - */ - callback(req: ClientRequest, opts: RequestOptions): Promise; -} diff --git a/reverse_engineering/node_modules/https-proxy-agent/dist/agent.js b/reverse_engineering/node_modules/https-proxy-agent/dist/agent.js deleted file mode 100644 index d666525..0000000 --- a/reverse_engineering/node_modules/https-proxy-agent/dist/agent.js +++ /dev/null @@ -1,180 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const net_1 = __importDefault(require("net")); -const tls_1 = __importDefault(require("tls")); -const url_1 = __importDefault(require("url")); -const assert_1 = __importDefault(require("assert")); -const debug_1 = __importDefault(require("debug")); -const agent_base_1 = require("agent-base"); -const parse_proxy_response_1 = __importDefault(require("./parse-proxy-response")); -const debug = debug_1.default('https-proxy-agent:agent'); -/** - * The `HttpsProxyAgent` implements an HTTP Agent subclass that connects to - * the specified "HTTP(s) proxy server" in order to proxy HTTPS requests. - * - * Outgoing HTTP requests are first tunneled through the proxy server using the - * `CONNECT` HTTP request method to establish a connection to the proxy server, - * and then the proxy server connects to the destination target and issues the - * HTTP request from the proxy server. - * - * `https:` requests have their socket connection upgraded to TLS once - * the connection to the proxy server has been established. - * - * @api public - */ -class HttpsProxyAgent extends agent_base_1.Agent { - constructor(_opts) { - let opts; - if (typeof _opts === 'string') { - opts = url_1.default.parse(_opts); - } - else { - opts = _opts; - } - if (!opts) { - throw new Error('an HTTP(S) proxy server `host` and `port` must be specified!'); - } - debug('creating new HttpsProxyAgent instance: %o', opts); - super(opts); - const proxy = Object.assign({}, opts); - // If `true`, then connect to the proxy server over TLS. - // Defaults to `false`. - this.secureProxy = opts.secureProxy || isHTTPS(proxy.protocol); - // Prefer `hostname` over `host`, and set the `port` if needed. - proxy.host = proxy.hostname || proxy.host; - if (typeof proxy.port === 'string') { - proxy.port = parseInt(proxy.port, 10); - } - if (!proxy.port && proxy.host) { - proxy.port = this.secureProxy ? 443 : 80; - } - // ALPN is supported by Node.js >= v5. - // attempt to negotiate http/1.1 for proxy servers that support http/2 - if (this.secureProxy && !('ALPNProtocols' in proxy)) { - proxy.ALPNProtocols = ['http 1.1']; - } - if (proxy.host && proxy.path) { - // If both a `host` and `path` are specified then it's most likely - // the result of a `url.parse()` call... we need to remove the - // `path` portion so that `net.connect()` doesn't attempt to open - // that as a Unix socket file. - delete proxy.path; - delete proxy.pathname; - } - this.proxy = proxy; - } - /** - * Called when the node-core HTTP client library is creating a - * new HTTP request. - * - * @api protected - */ - callback(req, opts) { - return __awaiter(this, void 0, void 0, function* () { - const { proxy, secureProxy } = this; - // Create a socket connection to the proxy server. - let socket; - if (secureProxy) { - debug('Creating `tls.Socket`: %o', proxy); - socket = tls_1.default.connect(proxy); - } - else { - debug('Creating `net.Socket`: %o', proxy); - socket = net_1.default.connect(proxy); - } - const headers = Object.assign({}, proxy.headers); - const hostname = `${opts.host}:${opts.port}`; - let payload = `CONNECT ${hostname} HTTP/1.1\r\n`; - // Inject the `Proxy-Authorization` header if necessary. - if (proxy.auth) { - headers['Proxy-Authorization'] = `Basic ${Buffer.from(proxy.auth).toString('base64')}`; - } - // The `Host` header should only include the port - // number when it is not the default port. - let { host, port, secureEndpoint } = opts; - if (!isDefaultPort(port, secureEndpoint)) { - host += `:${port}`; - } - headers.Host = host; - headers.Connection = 'close'; - for (const name of Object.keys(headers)) { - payload += `${name}: ${headers[name]}\r\n`; - } - const proxyResponsePromise = parse_proxy_response_1.default(socket); - socket.write(`${payload}\r\n`); - const { statusCode, buffered } = yield proxyResponsePromise; - if (statusCode === 200) { - req.once('socket', resume); - if (opts.secureEndpoint) { - const servername = opts.servername || opts.host; - if (!servername) { - throw new Error('Could not determine "servername"'); - } - // The proxy is connecting to a TLS server, so upgrade - // this socket connection to a TLS connection. - debug('Upgrading socket connection to TLS'); - return tls_1.default.connect(Object.assign(Object.assign({}, omit(opts, 'host', 'hostname', 'path', 'port')), { socket, - servername })); - } - return socket; - } - // Some other status code that's not 200... need to re-play the HTTP - // header "data" events onto the socket once the HTTP machinery is - // attached so that the node core `http` can parse and handle the - // error status code. - // Close the original socket, and a new "fake" socket is returned - // instead, so that the proxy doesn't get the HTTP request - // written to it (which may contain `Authorization` headers or other - // sensitive data). - // - // See: https://hackerone.com/reports/541502 - socket.destroy(); - const fakeSocket = new net_1.default.Socket(); - fakeSocket.readable = true; - // Need to wait for the "socket" event to re-play the "data" events. - req.once('socket', (s) => { - debug('replaying proxy buffer for failed request'); - assert_1.default(s.listenerCount('data') > 0); - // Replay the "buffered" Buffer onto the fake `socket`, since at - // this point the HTTP module machinery has been hooked up for - // the user. - s.push(buffered); - s.push(null); - }); - return fakeSocket; - }); - } -} -exports.default = HttpsProxyAgent; -function resume(socket) { - socket.resume(); -} -function isDefaultPort(port, secure) { - return Boolean((!secure && port === 80) || (secure && port === 443)); -} -function isHTTPS(protocol) { - return typeof protocol === 'string' ? /^https:?$/i.test(protocol) : false; -} -function omit(obj, ...keys) { - const ret = {}; - let key; - for (key in obj) { - if (!keys.includes(key)) { - ret[key] = obj[key]; - } - } - return ret; -} -//# sourceMappingURL=agent.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/https-proxy-agent/dist/agent.js.map b/reverse_engineering/node_modules/https-proxy-agent/dist/agent.js.map deleted file mode 100644 index d1307cd..0000000 --- a/reverse_engineering/node_modules/https-proxy-agent/dist/agent.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,8CAAsB;AACtB,8CAAsB;AACtB,8CAAsB;AACtB,oDAA4B;AAC5B,kDAAgC;AAEhC,2CAAkE;AAElE,kFAAwD;AAExD,MAAM,KAAK,GAAG,eAAW,CAAC,yBAAyB,CAAC,CAAC;AAErD;;;;;;;;;;;;;GAaG;AACH,MAAqB,eAAgB,SAAQ,kBAAK;IAIjD,YAAY,KAAsC;QACjD,IAAI,IAA4B,CAAC;QACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC9B,IAAI,GAAG,aAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SACxB;aAAM;YACN,IAAI,GAAG,KAAK,CAAC;SACb;QACD,IAAI,CAAC,IAAI,EAAE;YACV,MAAM,IAAI,KAAK,CACd,8DAA8D,CAC9D,CAAC;SACF;QACD,KAAK,CAAC,2CAA2C,EAAE,IAAI,CAAC,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,CAAC;QAEZ,MAAM,KAAK,qBAAgC,IAAI,CAAE,CAAC;QAElD,wDAAwD;QACxD,uBAAuB;QACvB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAE/D,+DAA+D;QAC/D,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC;QAC1C,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;YACnC,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;SACtC;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE;YAC9B,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;SACzC;QAED,sCAAsC;QACtC,sEAAsE;QACtE,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,eAAe,IAAI,KAAK,CAAC,EAAE;YACpD,KAAK,CAAC,aAAa,GAAG,CAAC,UAAU,CAAC,CAAC;SACnC;QAED,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE;YAC7B,kEAAkE;YAClE,8DAA8D;YAC9D,iEAAiE;YACjE,8BAA8B;YAC9B,OAAO,KAAK,CAAC,IAAI,CAAC;YAClB,OAAO,KAAK,CAAC,QAAQ,CAAC;SACtB;QAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,CAAC;IAED;;;;;OAKG;IACG,QAAQ,CACb,GAAkB,EAClB,IAAoB;;YAEpB,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;YAEpC,kDAAkD;YAClD,IAAI,MAAkB,CAAC;YACvB,IAAI,WAAW,EAAE;gBAChB,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;gBAC1C,MAAM,GAAG,aAAG,CAAC,OAAO,CAAC,KAA8B,CAAC,CAAC;aACrD;iBAAM;gBACN,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;gBAC1C,MAAM,GAAG,aAAG,CAAC,OAAO,CAAC,KAA2B,CAAC,CAAC;aAClD;YAED,MAAM,OAAO,qBAA6B,KAAK,CAAC,OAAO,CAAE,CAAC;YAC1D,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC7C,IAAI,OAAO,GAAG,WAAW,QAAQ,eAAe,CAAC;YAEjD,wDAAwD;YACxD,IAAI,KAAK,CAAC,IAAI,EAAE;gBACf,OAAO,CAAC,qBAAqB,CAAC,GAAG,SAAS,MAAM,CAAC,IAAI,CACpD,KAAK,CAAC,IAAI,CACV,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;aACvB;YAED,iDAAiD;YACjD,0CAA0C;YAC1C,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;YAC1C,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE;gBACzC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;aACnB;YACD,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;YAEpB,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC;YAC7B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;gBACxC,OAAO,IAAI,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;aAC3C;YAED,MAAM,oBAAoB,GAAG,8BAAkB,CAAC,MAAM,CAAC,CAAC;YAExD,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,MAAM,CAAC,CAAC;YAE/B,MAAM,EACL,UAAU,EACV,QAAQ,EACR,GAAG,MAAM,oBAAoB,CAAC;YAE/B,IAAI,UAAU,KAAK,GAAG,EAAE;gBACvB,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAE3B,IAAI,IAAI,CAAC,cAAc,EAAE;oBACxB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC;oBAChD,IAAI,CAAC,UAAU,EAAE;wBAChB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;qBACpD;oBACD,sDAAsD;oBACtD,8CAA8C;oBAC9C,KAAK,CAAC,oCAAoC,CAAC,CAAC;oBAC5C,OAAO,aAAG,CAAC,OAAO,iCACd,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,KACjD,MAAM;wBACN,UAAU,IACT,CAAC;iBACH;gBAED,OAAO,MAAM,CAAC;aACd;YAED,oEAAoE;YACpE,kEAAkE;YAClE,iEAAiE;YACjE,qBAAqB;YAErB,iEAAiE;YACjE,0DAA0D;YAC1D,oEAAoE;YACpE,mBAAmB;YACnB,EAAE;YACF,4CAA4C;YAC5C,MAAM,CAAC,OAAO,EAAE,CAAC;YAEjB,MAAM,UAAU,GAAG,IAAI,aAAG,CAAC,MAAM,EAAE,CAAC;YACpC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;YAE3B,oEAAoE;YACpE,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAa,EAAE,EAAE;gBACpC,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBACnD,gBAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAEpC,gEAAgE;gBAChE,8DAA8D;gBAC9D,YAAY;gBACZ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACjB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,CAAC,CAAC,CAAC;YAEH,OAAO,UAAU,CAAC;QACnB,CAAC;KAAA;CACD;AA9JD,kCA8JC;AAED,SAAS,MAAM,CAAC,MAAkC;IACjD,MAAM,CAAC,MAAM,EAAE,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,MAAe;IACnD,OAAO,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,OAAO,CAAC,QAAwB;IACxC,OAAO,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC3E,CAAC;AAED,SAAS,IAAI,CACZ,GAAM,EACN,GAAG,IAAO;IAIV,MAAM,GAAG,GAAG,EAEX,CAAC;IACF,IAAI,GAAqB,CAAC;IAC1B,KAAK,GAAG,IAAI,GAAG,EAAE;QAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACxB,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;SACpB;KACD;IACD,OAAO,GAAG,CAAC;AACZ,CAAC"} \ No newline at end of file diff --git a/reverse_engineering/node_modules/https-proxy-agent/dist/index.d.ts b/reverse_engineering/node_modules/https-proxy-agent/dist/index.d.ts deleted file mode 100644 index 0d60062..0000000 --- a/reverse_engineering/node_modules/https-proxy-agent/dist/index.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -/// -import net from 'net'; -import tls from 'tls'; -import { Url } from 'url'; -import { AgentOptions } from 'agent-base'; -import { OutgoingHttpHeaders } from 'http'; -import _HttpsProxyAgent from './agent'; -declare function createHttpsProxyAgent(opts: string | createHttpsProxyAgent.HttpsProxyAgentOptions): _HttpsProxyAgent; -declare namespace createHttpsProxyAgent { - interface BaseHttpsProxyAgentOptions { - headers?: OutgoingHttpHeaders; - secureProxy?: boolean; - host?: string | null; - path?: string | null; - port?: string | number | null; - } - export interface HttpsProxyAgentOptions extends AgentOptions, BaseHttpsProxyAgentOptions, Partial> { - } - export type HttpsProxyAgent = _HttpsProxyAgent; - export const HttpsProxyAgent: typeof _HttpsProxyAgent; - export {}; -} -export = createHttpsProxyAgent; diff --git a/reverse_engineering/node_modules/https-proxy-agent/dist/index.js b/reverse_engineering/node_modules/https-proxy-agent/dist/index.js deleted file mode 100644 index b03e763..0000000 --- a/reverse_engineering/node_modules/https-proxy-agent/dist/index.js +++ /dev/null @@ -1,14 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -const agent_1 = __importDefault(require("./agent")); -function createHttpsProxyAgent(opts) { - return new agent_1.default(opts); -} -(function (createHttpsProxyAgent) { - createHttpsProxyAgent.HttpsProxyAgent = agent_1.default; - createHttpsProxyAgent.prototype = agent_1.default.prototype; -})(createHttpsProxyAgent || (createHttpsProxyAgent = {})); -module.exports = createHttpsProxyAgent; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/https-proxy-agent/dist/index.js.map b/reverse_engineering/node_modules/https-proxy-agent/dist/index.js.map deleted file mode 100644 index f3ce559..0000000 --- a/reverse_engineering/node_modules/https-proxy-agent/dist/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAKA,oDAAuC;AAEvC,SAAS,qBAAqB,CAC7B,IAA2D;IAE3D,OAAO,IAAI,eAAgB,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC;AAED,WAAU,qBAAqB;IAoBjB,qCAAe,GAAG,eAAgB,CAAC;IAEhD,qBAAqB,CAAC,SAAS,GAAG,eAAgB,CAAC,SAAS,CAAC;AAC9D,CAAC,EAvBS,qBAAqB,KAArB,qBAAqB,QAuB9B;AAED,iBAAS,qBAAqB,CAAC"} \ No newline at end of file diff --git a/reverse_engineering/node_modules/https-proxy-agent/dist/parse-proxy-response.d.ts b/reverse_engineering/node_modules/https-proxy-agent/dist/parse-proxy-response.d.ts deleted file mode 100644 index 7565674..0000000 --- a/reverse_engineering/node_modules/https-proxy-agent/dist/parse-proxy-response.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/// -import { Readable } from 'stream'; -export interface ProxyResponse { - statusCode: number; - buffered: Buffer; -} -export default function parseProxyResponse(socket: Readable): Promise; diff --git a/reverse_engineering/node_modules/https-proxy-agent/dist/parse-proxy-response.js b/reverse_engineering/node_modules/https-proxy-agent/dist/parse-proxy-response.js deleted file mode 100644 index aa5ce3c..0000000 --- a/reverse_engineering/node_modules/https-proxy-agent/dist/parse-proxy-response.js +++ /dev/null @@ -1,66 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const debug_1 = __importDefault(require("debug")); -const debug = debug_1.default('https-proxy-agent:parse-proxy-response'); -function parseProxyResponse(socket) { - return new Promise((resolve, reject) => { - // we need to buffer any HTTP traffic that happens with the proxy before we get - // the CONNECT response, so that if the response is anything other than an "200" - // response code, then we can re-play the "data" events on the socket once the - // HTTP parser is hooked up... - let buffersLength = 0; - const buffers = []; - function read() { - const b = socket.read(); - if (b) - ondata(b); - else - socket.once('readable', read); - } - function cleanup() { - socket.removeListener('end', onend); - socket.removeListener('error', onerror); - socket.removeListener('close', onclose); - socket.removeListener('readable', read); - } - function onclose(err) { - debug('onclose had error %o', err); - } - function onend() { - debug('onend'); - } - function onerror(err) { - cleanup(); - debug('onerror %o', err); - reject(err); - } - function ondata(b) { - buffers.push(b); - buffersLength += b.length; - const buffered = Buffer.concat(buffers, buffersLength); - const endOfHeaders = buffered.indexOf('\r\n\r\n'); - if (endOfHeaders === -1) { - // keep buffering - debug('have not received end of HTTP headers yet...'); - read(); - return; - } - const firstLine = buffered.toString('ascii', 0, buffered.indexOf('\r\n')); - const statusCode = +firstLine.split(' ')[1]; - debug('got proxy server response: %o', firstLine); - resolve({ - statusCode, - buffered - }); - } - socket.on('error', onerror); - socket.on('close', onclose); - socket.on('end', onend); - read(); - }); -} -exports.default = parseProxyResponse; -//# sourceMappingURL=parse-proxy-response.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/https-proxy-agent/dist/parse-proxy-response.js.map b/reverse_engineering/node_modules/https-proxy-agent/dist/parse-proxy-response.js.map deleted file mode 100644 index bacdb84..0000000 --- a/reverse_engineering/node_modules/https-proxy-agent/dist/parse-proxy-response.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"parse-proxy-response.js","sourceRoot":"","sources":["../src/parse-proxy-response.ts"],"names":[],"mappings":";;;;;AAAA,kDAAgC;AAGhC,MAAM,KAAK,GAAG,eAAW,CAAC,wCAAwC,CAAC,CAAC;AAOpE,SAAwB,kBAAkB,CACzC,MAAgB;IAEhB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,+EAA+E;QAC/E,gFAAgF;QAChF,8EAA8E;QAC9E,8BAA8B;QAC9B,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,SAAS,IAAI;YACZ,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC;gBAAE,MAAM,CAAC,CAAC,CAAC,CAAC;;gBACZ,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACpC,CAAC;QAED,SAAS,OAAO;YACf,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACpC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACxC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACxC,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC;QAED,SAAS,OAAO,CAAC,GAAW;YAC3B,KAAK,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;QACpC,CAAC;QAED,SAAS,KAAK;YACb,KAAK,CAAC,OAAO,CAAC,CAAC;QAChB,CAAC;QAED,SAAS,OAAO,CAAC,GAAU;YAC1B,OAAO,EAAE,CAAC;YACV,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,CAAC;QACb,CAAC;QAED,SAAS,MAAM,CAAC,CAAS;YACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,aAAa,IAAI,CAAC,CAAC,MAAM,CAAC;YAE1B,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;YACvD,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAElD,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE;gBACxB,iBAAiB;gBACjB,KAAK,CAAC,8CAA8C,CAAC,CAAC;gBACtD,IAAI,EAAE,CAAC;gBACP,OAAO;aACP;YAED,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAClC,OAAO,EACP,CAAC,EACD,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CACxB,CAAC;YACF,MAAM,UAAU,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5C,KAAK,CAAC,+BAA+B,EAAE,SAAS,CAAC,CAAC;YAClD,OAAO,CAAC;gBACP,UAAU;gBACV,QAAQ;aACR,CAAC,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5B,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAExB,IAAI,EAAE,CAAC;IACR,CAAC,CAAC,CAAC;AACJ,CAAC;AAvED,qCAuEC"} \ No newline at end of file diff --git a/reverse_engineering/node_modules/https-proxy-agent/package.json b/reverse_engineering/node_modules/https-proxy-agent/package.json deleted file mode 100644 index 8101fcf..0000000 --- a/reverse_engineering/node_modules/https-proxy-agent/package.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "_from": "https-proxy-agent@^5.0.0", - "_id": "https-proxy-agent@5.0.0", - "_inBundle": false, - "_integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "_location": "/https-proxy-agent", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "https-proxy-agent@^5.0.0", - "name": "https-proxy-agent", - "escapedName": "https-proxy-agent", - "rawSpec": "^5.0.0", - "saveSpec": null, - "fetchSpec": "^5.0.0" - }, - "_requiredBy": [ - "/gaxios", - "/teeny-request" - ], - "_resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "_shasum": "e2a90542abb68a762e0a0850f6c9edadfd8506b2", - "_spec": "https-proxy-agent@^5.0.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/gaxios", - "author": { - "name": "Nathan Rajlich", - "email": "nathan@tootallnate.net", - "url": "http://n8.io/" - }, - "bugs": { - "url": "https://github.com/TooTallNate/node-https-proxy-agent/issues" - }, - "bundleDependencies": false, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "deprecated": false, - "description": "An HTTP(s) proxy `http.Agent` implementation for HTTPS", - "devDependencies": { - "@types/debug": "4", - "@types/node": "^12.12.11", - "@typescript-eslint/eslint-plugin": "1.6.0", - "@typescript-eslint/parser": "1.1.0", - "eslint": "5.16.0", - "eslint-config-airbnb": "17.1.0", - "eslint-config-prettier": "4.1.0", - "eslint-import-resolver-typescript": "1.1.1", - "eslint-plugin-import": "2.16.0", - "eslint-plugin-jsx-a11y": "6.2.1", - "eslint-plugin-react": "7.12.4", - "mocha": "^6.2.2", - "proxy": "1", - "rimraf": "^3.0.0", - "typescript": "^3.5.3" - }, - "engines": { - "node": ">= 6" - }, - "files": [ - "dist" - ], - "homepage": "https://github.com/TooTallNate/node-https-proxy-agent#readme", - "keywords": [ - "https", - "proxy", - "endpoint", - "agent" - ], - "license": "MIT", - "main": "dist/index", - "name": "https-proxy-agent", - "repository": { - "type": "git", - "url": "git://github.com/TooTallNate/node-https-proxy-agent.git" - }, - "scripts": { - "build": "tsc", - "prebuild": "rimraf dist", - "prepublishOnly": "npm run build", - "test": "mocha --reporter spec", - "test-lint": "eslint src --ext .js,.ts" - }, - "types": "dist/index", - "version": "5.0.0" -} diff --git a/reverse_engineering/node_modules/inherits/LICENSE b/reverse_engineering/node_modules/inherits/LICENSE deleted file mode 100644 index dea3013..0000000 --- a/reverse_engineering/node_modules/inherits/LICENSE +++ /dev/null @@ -1,16 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter - -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. - diff --git a/reverse_engineering/node_modules/inherits/README.md b/reverse_engineering/node_modules/inherits/README.md deleted file mode 100644 index b1c5665..0000000 --- a/reverse_engineering/node_modules/inherits/README.md +++ /dev/null @@ -1,42 +0,0 @@ -Browser-friendly inheritance fully compatible with standard node.js -[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor). - -This package exports standard `inherits` from node.js `util` module in -node environment, but also provides alternative browser-friendly -implementation through [browser -field](https://gist.github.com/shtylman/4339901). Alternative -implementation is a literal copy of standard one located in standalone -module to avoid requiring of `util`. It also has a shim for old -browsers with no `Object.create` support. - -While keeping you sure you are using standard `inherits` -implementation in node.js environment, it allows bundlers such as -[browserify](https://github.com/substack/node-browserify) to not -include full `util` package to your client code if all you need is -just `inherits` function. It worth, because browser shim for `util` -package is large and `inherits` is often the single function you need -from it. - -It's recommended to use this package instead of -`require('util').inherits` for any code that has chances to be used -not only in node.js but in browser too. - -## usage - -```js -var inherits = require('inherits'); -// then use exactly as the standard one -``` - -## note on version ~1.0 - -Version ~1.0 had completely different motivation and is not compatible -neither with 2.0 nor with standard node.js `inherits`. - -If you are using version ~1.0 and planning to switch to ~2.0, be -careful: - -* new version uses `super_` instead of `super` for referencing - superclass -* new version overwrites current prototype while old one preserves any - existing fields on it diff --git a/reverse_engineering/node_modules/inherits/inherits.js b/reverse_engineering/node_modules/inherits/inherits.js deleted file mode 100644 index f71f2d9..0000000 --- a/reverse_engineering/node_modules/inherits/inherits.js +++ /dev/null @@ -1,9 +0,0 @@ -try { - var util = require('util'); - /* istanbul ignore next */ - if (typeof util.inherits !== 'function') throw ''; - module.exports = util.inherits; -} catch (e) { - /* istanbul ignore next */ - module.exports = require('./inherits_browser.js'); -} diff --git a/reverse_engineering/node_modules/inherits/inherits_browser.js b/reverse_engineering/node_modules/inherits/inherits_browser.js deleted file mode 100644 index 86bbb3d..0000000 --- a/reverse_engineering/node_modules/inherits/inherits_browser.js +++ /dev/null @@ -1,27 +0,0 @@ -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { - if (superCtor) { - ctor.super_ = superCtor - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }) - } - }; -} else { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - if (superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } - } -} diff --git a/reverse_engineering/node_modules/inherits/package.json b/reverse_engineering/node_modules/inherits/package.json deleted file mode 100644 index f663f8d..0000000 --- a/reverse_engineering/node_modules/inherits/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "_from": "inherits@^2.0.3", - "_id": "inherits@2.0.4", - "_inBundle": false, - "_integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "_location": "/inherits", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "inherits@^2.0.3", - "name": "inherits", - "escapedName": "inherits", - "rawSpec": "^2.0.3", - "saveSpec": null, - "fetchSpec": "^2.0.3" - }, - "_requiredBy": [ - "/duplexify", - "/readable-stream" - ], - "_resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "_shasum": "0fa2c64f932917c3433a0ded55363aae37416b7c", - "_spec": "inherits@^2.0.3", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/duplexify", - "browser": "./inherits_browser.js", - "bugs": { - "url": "https://github.com/isaacs/inherits/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()", - "devDependencies": { - "tap": "^14.2.4" - }, - "files": [ - "inherits.js", - "inherits_browser.js" - ], - "homepage": "https://github.com/isaacs/inherits#readme", - "keywords": [ - "inheritance", - "class", - "klass", - "oop", - "object-oriented", - "inherits", - "browser", - "browserify" - ], - "license": "ISC", - "main": "./inherits.js", - "name": "inherits", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/inherits.git" - }, - "scripts": { - "test": "tap" - }, - "version": "2.0.4" -} diff --git a/reverse_engineering/node_modules/is-stream/index.d.ts b/reverse_engineering/node_modules/is-stream/index.d.ts deleted file mode 100644 index eee2e83..0000000 --- a/reverse_engineering/node_modules/is-stream/index.d.ts +++ /dev/null @@ -1,79 +0,0 @@ -import * as stream from 'stream'; - -declare const isStream: { - /** - @returns Whether `stream` is a [`Stream`](https://nodejs.org/api/stream.html#stream_stream). - - @example - ``` - import * as fs from 'fs'; - import isStream = require('is-stream'); - - isStream(fs.createReadStream('unicorn.png')); - //=> true - - isStream({}); - //=> false - ``` - */ - (stream: unknown): stream is stream.Stream; - - /** - @returns Whether `stream` is a [`stream.Writable`](https://nodejs.org/api/stream.html#stream_class_stream_writable). - - @example - ``` - import * as fs from 'fs'; - import isStream = require('is-stream'); - - isStream.writable(fs.createWriteStrem('unicorn.txt')); - //=> true - ``` - */ - writable(stream: unknown): stream is stream.Writable; - - /** - @returns Whether `stream` is a [`stream.Readable`](https://nodejs.org/api/stream.html#stream_class_stream_readable). - - @example - ``` - import * as fs from 'fs'; - import isStream = require('is-stream'); - - isStream.readable(fs.createReadStream('unicorn.png')); - //=> true - ``` - */ - readable(stream: unknown): stream is stream.Readable; - - /** - @returns Whether `stream` is a [`stream.Duplex`](https://nodejs.org/api/stream.html#stream_class_stream_duplex). - - @example - ``` - import {Duplex} from 'stream'; - import isStream = require('is-stream'); - - isStream.duplex(new Duplex()); - //=> true - ``` - */ - duplex(stream: unknown): stream is stream.Duplex; - - /** - @returns Whether `stream` is a [`stream.Transform`](https://nodejs.org/api/stream.html#stream_class_stream_transform). - - @example - ``` - import * as fs from 'fs'; - import Stringify = require('streaming-json-stringify'); - import isStream = require('is-stream'); - - isStream.transform(Stringify()); - //=> true - ``` - */ - transform(input: unknown): input is stream.Transform; -}; - -export = isStream; diff --git a/reverse_engineering/node_modules/is-stream/index.js b/reverse_engineering/node_modules/is-stream/index.js deleted file mode 100644 index 2e43434..0000000 --- a/reverse_engineering/node_modules/is-stream/index.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -const isStream = stream => - stream !== null && - typeof stream === 'object' && - typeof stream.pipe === 'function'; - -isStream.writable = stream => - isStream(stream) && - stream.writable !== false && - typeof stream._write === 'function' && - typeof stream._writableState === 'object'; - -isStream.readable = stream => - isStream(stream) && - stream.readable !== false && - typeof stream._read === 'function' && - typeof stream._readableState === 'object'; - -isStream.duplex = stream => - isStream.writable(stream) && - isStream.readable(stream); - -isStream.transform = stream => - isStream.duplex(stream) && - typeof stream._transform === 'function'; - -module.exports = isStream; diff --git a/reverse_engineering/node_modules/is-stream/license b/reverse_engineering/node_modules/is-stream/license deleted file mode 100644 index fa7ceba..0000000 --- a/reverse_engineering/node_modules/is-stream/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (https://sindresorhus.com) - -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/reverse_engineering/node_modules/is-stream/package.json b/reverse_engineering/node_modules/is-stream/package.json deleted file mode 100644 index 925db77..0000000 --- a/reverse_engineering/node_modules/is-stream/package.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "_from": "is-stream@^2.0.0", - "_id": "is-stream@2.0.1", - "_inBundle": false, - "_integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "_location": "/is-stream", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "is-stream@^2.0.0", - "name": "is-stream", - "escapedName": "is-stream", - "rawSpec": "^2.0.0", - "saveSpec": null, - "fetchSpec": "^2.0.0" - }, - "_requiredBy": [ - "/gaxios" - ], - "_resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "_shasum": "fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077", - "_spec": "is-stream@^2.0.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/gaxios", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "https://sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/is-stream/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Check if something is a Node.js stream", - "devDependencies": { - "@types/node": "^11.13.6", - "ava": "^1.4.1", - "tempy": "^0.3.0", - "tsd": "^0.7.2", - "xo": "^0.24.0" - }, - "engines": { - "node": ">=8" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "funding": "https://github.com/sponsors/sindresorhus", - "homepage": "https://github.com/sindresorhus/is-stream#readme", - "keywords": [ - "stream", - "type", - "streams", - "writable", - "readable", - "duplex", - "transform", - "check", - "detect", - "is" - ], - "license": "MIT", - "name": "is-stream", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/is-stream.git" - }, - "scripts": { - "test": "xo && ava && tsd" - }, - "version": "2.0.1" -} diff --git a/reverse_engineering/node_modules/is-stream/readme.md b/reverse_engineering/node_modules/is-stream/readme.md deleted file mode 100644 index 19308e7..0000000 --- a/reverse_engineering/node_modules/is-stream/readme.md +++ /dev/null @@ -1,60 +0,0 @@ -# is-stream - -> Check if something is a [Node.js stream](https://nodejs.org/api/stream.html) - -## Install - -``` -$ npm install is-stream -``` - -## Usage - -```js -const fs = require('fs'); -const isStream = require('is-stream'); - -isStream(fs.createReadStream('unicorn.png')); -//=> true - -isStream({}); -//=> false -``` - -## API - -### isStream(stream) - -Returns a `boolean` for whether it's a [`Stream`](https://nodejs.org/api/stream.html#stream_stream). - -#### isStream.writable(stream) - -Returns a `boolean` for whether it's a [`stream.Writable`](https://nodejs.org/api/stream.html#stream_class_stream_writable). - -#### isStream.readable(stream) - -Returns a `boolean` for whether it's a [`stream.Readable`](https://nodejs.org/api/stream.html#stream_class_stream_readable). - -#### isStream.duplex(stream) - -Returns a `boolean` for whether it's a [`stream.Duplex`](https://nodejs.org/api/stream.html#stream_class_stream_duplex). - -#### isStream.transform(stream) - -Returns a `boolean` for whether it's a [`stream.Transform`](https://nodejs.org/api/stream.html#stream_class_stream_transform). - -## Related - -- [is-file-stream](https://github.com/jamestalmage/is-file-stream) - Detect if a stream is a file stream - ---- - -
- - Get professional support for this package with a Tidelift subscription - -
- - Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. -
-
diff --git a/reverse_engineering/node_modules/is/CHANGELOG.md b/reverse_engineering/node_modules/is/CHANGELOG.md deleted file mode 100644 index ebccb64..0000000 --- a/reverse_engineering/node_modules/is/CHANGELOG.md +++ /dev/null @@ -1,124 +0,0 @@ -3.3.0 / 2018-12-14 -================== - * [New] add `is.bigint` (#36) - * [Docs] change jsdoc comments "Mixed" to wildcards (#34) - * [Tests] up to `node` `v11.4`, `v10.14`, `v9.11`, `v8.14`, `v7.10`, `v6.15`, `v4.9`; use `nvm install-latest-npm` - * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`, `tape` - -3.2.1 / 2017-02-27 -================== - * [Fix] `is.fn`: recognize generator and async functions too (#28) - * [Tests] up to `node` `v7.5`, `v4.7`; improve test matrix - * [Dev Deps] update `@ljharb/eslint-config`, `eslint`, `tape` - * [Docs] improve readme formatting (#27) - -3.2.0 / 2016-10-24 -================== - * [Fix] fix infinite loop when comparing two empty arrays + fix skipping first element (#24, #25) - * [New] add `is.primitive` - * [New] Add `is.date.valid` function and tests (#19) - * [Tests] use `pretest` for `npm run lint`; add `npm run tests-only` - * [Tests] up to `node` `v4.6`, `v5.12`, `v6.9`; improve test matrix - * [Tests] fix description (#18) - * [Dev Deps] update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` - -3.1.0 / 2015-09-20 -================== - * [Enhancement]: `is.array`: Prefer `Array.isArray` when present - * [Fix] Deprecate `is.boolean`/`is.int` (ES3 syntax errors) - * [Docs] Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG - * [Refactor] Don't use yoda conditions - * [Refactor] `is.equal` can return earlier in some cases (#16) - * [Tests] Quote "throws" (ES3 syntax error) - * [Tests] up to `io.js` `v3.3`, up to `node` `v4.1` - * [Dev Deps] add `npm run eslint` - * [Dev Deps] update `tape`, `covert`, `jscs` - -3.0.1 / 2015-02-22 -================== - * Version bump to resolve npm bug with v3.0.0 - -3.0.0 / 2015-02-21 -================== - * is.empty should return true for falsy values ([#13](https://github.com/enricomarino/is/issues/13), [#14](https://github.com/enricomarino/is/issues/14)) - * All grade A-supported `node`/`iojs` versions now ship with an `npm` that understands `^`. - * Test on `iojs` `v1.2` and `v1.3`, `node` `v0.12`; speed up builds; allow failures on all but two latest minor versions. - * Update `jscs` - -2.2.1 / 2015-02-06 -================== - * Update `tape`, `jscs` - * `toString` breaks in some browsers; using `toStr` instead. - -2.2.0 / 2014-11-29 -================== - * Update `tape`, `jscs` - * Add `is.symbol` - -2.1.0 / 2014-10-21 -================== - * Add `CHANGELOG.md` - * Add `is.hex` and `is.base64` [#12](https://github.com/enricomarino/is/issues/12) - * Update `tape`, `jscs` - * Lock `covert` to v1.0.0 [substack/covert#9](https://github.com/substack/covert/issues/9) - -2.0.2 / 2014-10-05 -================== - * `undefined` can be redefined in ES3 browsers. - * Update `jscs.json` and make style consistent - * Update `foreach`, `jscs`, `tape` - * Naming URLs in README - -2.0.1 / 2014-09-02 -================== - * Add the license to package.json - * Add license and downloads badges - * Update `jscs` - -2.0.0 / 2014-08-25 -================== - * Add `make release` - * Update copyright notice. - * Fix is.empty(new String()) - -1.1.0 / 2014-08-22 -================== - * Removing redundant license - * Add a non-deprecated method for is.null - * Use a more reliable valueOf coercion for is.false/is.true - * Clean up `README.md` - * Running `npm run lint` as part of tests. - * Fixing lint errors. - * Adding `npm run lint` - * Updating `covert` - -1.0.0 / 2014-08-07 -================== - * Update `tape`, `covert` - * Increase code coverage - * Update `LICENSE.md`, `README.md` - -0.3.0 / 2014-03-02 -================== - * Update `tape`, `covert` - * Adding `npm run coverage` - * is.arguments -> is.args, because reserved words. - * "undefined" is a reserved word in ES3 browsers. - * Optimizing is.equal to return early if value and other are strictly equal. - * Fixing is.equal for objects. - * Test improvements - -0.2.7 / 2013-12-26 -================== - * Update `tape`, `foreach` - * is.decimal(Infinity) shouldn't be true [#11](https://github.com/enricomarino/is/issues/11) - -0.2.6 / 2013-05-06 -================== - * Fix lots of tests [#9](https://github.com/enricomarino/is/issues/9) - * Update tape [#8](https://github.com/enricomarino/is/issues/8) - -0.2.5 / 2013-04-24 -================== - * Use `tap` instead of `tape` [#7](https://github.com/enricomarino/is/issues/7) - diff --git a/reverse_engineering/node_modules/is/LICENSE.md b/reverse_engineering/node_modules/is/LICENSE.md deleted file mode 100644 index 9d91b0e..0000000 --- a/reverse_engineering/node_modules/is/LICENSE.md +++ /dev/null @@ -1,23 +0,0 @@ -(The MIT License) - -Copyright (c) 2013 Enrico Marino -Copyright (c) 2014 Enrico Marino and Jordan Harband - -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/reverse_engineering/node_modules/is/Makefile b/reverse_engineering/node_modules/is/Makefile deleted file mode 100644 index d1e265a..0000000 --- a/reverse_engineering/node_modules/is/Makefile +++ /dev/null @@ -1,17 +0,0 @@ - -.PHONY: verify-tag release - -default: release - -verify-tag: -ifndef TAG - $(error TAG is undefined) -endif - -release: verify-tag - @ OLD_TAG=`git describe --abbrev=0 --tags` && \ - npm run minify && \ - replace "$${OLD_TAG/v/}" "$(TAG)" -- *.json README.md && \ - git commit -m "v$(TAG)" *.js *.json README.md && \ - git tag "v$(TAG)" - diff --git a/reverse_engineering/node_modules/is/README.md b/reverse_engineering/node_modules/is/README.md deleted file mode 100644 index d89a33e..0000000 --- a/reverse_engineering/node_modules/is/README.md +++ /dev/null @@ -1,142 +0,0 @@ -# is [![Version Badge][npm-version-svg]][npm-url] - -[![Build Status][travis-svg]][travis-url] -[![dependency status][deps-svg]][deps-url] -[![dev dependency status][dev-deps-svg]][dev-deps-url] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][npm-badge-png]][npm-url] - -[![browser support][testling-png]][testling-url] - -The definitive JavaScript type testing library - -To be or not to be? This is the library! - -## Installation - -As a node.js module - -```shell -$ npm install is -``` - -As a component -```shell -$ component install enricomarino/is -``` - -## API - -### general - - - ``is.a`` (value, type) or ``is.type`` (value, type) - - ``is.defined`` (value) - - ``is.empty`` (value) - - ``is.equal`` (value, other) - - ``is.hosted`` (value, host) - - ``is.instance`` (value, constructor) - - ``is.instanceof`` (value, constructor) - deprecated, because in ES3 browsers, "instanceof" is a reserved word - - ``is.nil`` (value) - - ``is.null`` (value) - deprecated, because in ES3 browsers, "null" is a reserved word - - ``is.undef`` (value) - - ``is.undefined`` (value) - deprecated, because in ES3 browsers, "undefined" is a reserved word - -### arguments - - - ``is.args`` (value) - - ``is.arguments`` (value) - deprecated, because "arguments" is a reserved word - - ``is.args.empty`` (value) - -### array - - - ``is.array`` (value) - - ``is.array.empty`` (value) - - ``is.arraylike`` (value) - -### boolean - - - ``is.bool`` (value) - - ``is.boolean`` (value) - deprecated, because in ES3 browsers, "boolean" is a reserved word - - ``is.false`` (value) - deprecated, because in ES3 browsers, "false" is a reserved word - - ``is.true`` (value) - deprecated, because in ES3 browsers, "true" is a reserved word - -### date - - - ``is.date`` (value) - -### element - - - ``is.element`` (value) - -### error - - - ``is.error`` (value) - -### function - - - ``is.fn`` (value) - - ``is.function`` (value) - deprecated, because in ES3 browsers, "function" is a reserved word - -### number - - - ``is.number`` (value) - - ``is.infinite`` (value) - - ``is.decimal`` (value) - - ``is.divisibleBy`` (value, n) - - ``is.integer`` (value) - - ``is.int`` (value) - deprecated, because in ES3 browsers, "int" is a reserved word - - ``is.maximum`` (value, others) - - ``is.minimum`` (value, others) - - ``is.nan`` (value) - - ``is.even`` (value) - - ``is.odd`` (value) - - ``is.ge`` (value, other) - - ``is.gt`` (value, other) - - ``is.le`` (value, other) - - ``is.lt`` (value, other) - - ``is.within`` (value, start, finish) - -### object - - - ``is.object`` (value) - -### regexp - - - ``is.regexp`` (value) - -### string - - - ``is.string`` (value) - -### encoded binary - - - ``is.base64`` (value) - - ``is.hex`` (value) - -### Symbols - - ``is.symbol`` (value) - -### BigInts - - ``is.bigint`` (value) - -## Contributors - -- [Jordan Harband](https://github.com/ljharb) - -[npm-url]: https://npmjs.org/package/is -[npm-version-svg]: http://versionbadg.es/enricomarino/is.svg -[travis-svg]: https://travis-ci.org/enricomarino/is.svg -[travis-url]: https://travis-ci.org/enricomarino/is -[deps-svg]: https://david-dm.org/enricomarino/is.svg -[deps-url]: https://david-dm.org/enricomarino/is -[dev-deps-svg]: https://david-dm.org/enricomarino/is/dev-status.svg -[dev-deps-url]: https://david-dm.org/enricomarino/is#info=devDependencies -[testling-png]: https://ci.testling.com/enricomarino/is.png -[testling-url]: https://ci.testling.com/enricomarino/is -[npm-badge-png]: https://nodei.co/npm/is.png?downloads=true&stars=true -[license-image]: http://img.shields.io/npm/l/is.svg -[license-url]: LICENSE.md -[downloads-image]: http://img.shields.io/npm/dm/is.svg -[downloads-url]: http://npm-stat.com/charts.html?package=is diff --git a/reverse_engineering/node_modules/is/component.json b/reverse_engineering/node_modules/is/component.json deleted file mode 100644 index cf2e1a6..0000000 --- a/reverse_engineering/node_modules/is/component.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "is", - "repo": "enricomarino/is", - "description": "The definitive type testing library", - "version": "2.2.0", - "dependencies": {}, - "scripts": ["index.js"] -} diff --git a/reverse_engineering/node_modules/is/index.js b/reverse_engineering/node_modules/is/index.js deleted file mode 100644 index 3447cdd..0000000 --- a/reverse_engineering/node_modules/is/index.js +++ /dev/null @@ -1,818 +0,0 @@ -/* globals window, HTMLElement */ - -'use strict'; - -/**! - * is - * the definitive JavaScript type testing library - * - * @copyright 2013-2014 Enrico Marino / Jordan Harband - * @license MIT - */ - -var objProto = Object.prototype; -var owns = objProto.hasOwnProperty; -var toStr = objProto.toString; -var symbolValueOf; -if (typeof Symbol === 'function') { - symbolValueOf = Symbol.prototype.valueOf; -} -var bigIntValueOf; -if (typeof BigInt === 'function') { - bigIntValueOf = BigInt.prototype.valueOf; -} -var isActualNaN = function (value) { - return value !== value; -}; -var NON_HOST_TYPES = { - 'boolean': 1, - number: 1, - string: 1, - undefined: 1 -}; - -var base64Regex = /^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$/; -var hexRegex = /^[A-Fa-f0-9]+$/; - -/** - * Expose `is` - */ - -var is = {}; - -/** - * Test general. - */ - -/** - * is.type - * Test if `value` is a type of `type`. - * - * @param {*} value value to test - * @param {String} type type - * @return {Boolean} true if `value` is a type of `type`, false otherwise - * @api public - */ - -is.a = is.type = function (value, type) { - return typeof value === type; -}; - -/** - * is.defined - * Test if `value` is defined. - * - * @param {*} value value to test - * @return {Boolean} true if 'value' is defined, false otherwise - * @api public - */ - -is.defined = function (value) { - return typeof value !== 'undefined'; -}; - -/** - * is.empty - * Test if `value` is empty. - * - * @param {*} value value to test - * @return {Boolean} true if `value` is empty, false otherwise - * @api public - */ - -is.empty = function (value) { - var type = toStr.call(value); - var key; - - if (type === '[object Array]' || type === '[object Arguments]' || type === '[object String]') { - return value.length === 0; - } - - if (type === '[object Object]') { - for (key in value) { - if (owns.call(value, key)) { - return false; - } - } - return true; - } - - return !value; -}; - -/** - * is.equal - * Test if `value` is equal to `other`. - * - * @param {*} value value to test - * @param {*} other value to compare with - * @return {Boolean} true if `value` is equal to `other`, false otherwise - */ - -is.equal = function equal(value, other) { - if (value === other) { - return true; - } - - var type = toStr.call(value); - var key; - - if (type !== toStr.call(other)) { - return false; - } - - if (type === '[object Object]') { - for (key in value) { - if (!is.equal(value[key], other[key]) || !(key in other)) { - return false; - } - } - for (key in other) { - if (!is.equal(value[key], other[key]) || !(key in value)) { - return false; - } - } - return true; - } - - if (type === '[object Array]') { - key = value.length; - if (key !== other.length) { - return false; - } - while (key--) { - if (!is.equal(value[key], other[key])) { - return false; - } - } - return true; - } - - if (type === '[object Function]') { - return value.prototype === other.prototype; - } - - if (type === '[object Date]') { - return value.getTime() === other.getTime(); - } - - return false; -}; - -/** - * is.hosted - * Test if `value` is hosted by `host`. - * - * @param {*} value to test - * @param {*} host host to test with - * @return {Boolean} true if `value` is hosted by `host`, false otherwise - * @api public - */ - -is.hosted = function (value, host) { - var type = typeof host[value]; - return type === 'object' ? !!host[value] : !NON_HOST_TYPES[type]; -}; - -/** - * is.instance - * Test if `value` is an instance of `constructor`. - * - * @param {*} value value to test - * @return {Boolean} true if `value` is an instance of `constructor` - * @api public - */ - -is.instance = is['instanceof'] = function (value, constructor) { - return value instanceof constructor; -}; - -/** - * is.nil / is.null - * Test if `value` is null. - * - * @param {*} value value to test - * @return {Boolean} true if `value` is null, false otherwise - * @api public - */ - -is.nil = is['null'] = function (value) { - return value === null; -}; - -/** - * is.undef / is.undefined - * Test if `value` is undefined. - * - * @param {*} value value to test - * @return {Boolean} true if `value` is undefined, false otherwise - * @api public - */ - -is.undef = is.undefined = function (value) { - return typeof value === 'undefined'; -}; - -/** - * Test arguments. - */ - -/** - * is.args - * Test if `value` is an arguments object. - * - * @param {*} value value to test - * @return {Boolean} true if `value` is an arguments object, false otherwise - * @api public - */ - -is.args = is.arguments = function (value) { - var isStandardArguments = toStr.call(value) === '[object Arguments]'; - var isOldArguments = !is.array(value) && is.arraylike(value) && is.object(value) && is.fn(value.callee); - return isStandardArguments || isOldArguments; -}; - -/** - * Test array. - */ - -/** - * is.array - * Test if 'value' is an array. - * - * @param {*} value value to test - * @return {Boolean} true if `value` is an array, false otherwise - * @api public - */ - -is.array = Array.isArray || function (value) { - return toStr.call(value) === '[object Array]'; -}; - -/** - * is.arguments.empty - * Test if `value` is an empty arguments object. - * - * @param {*} value value to test - * @return {Boolean} true if `value` is an empty arguments object, false otherwise - * @api public - */ -is.args.empty = function (value) { - return is.args(value) && value.length === 0; -}; - -/** - * is.array.empty - * Test if `value` is an empty array. - * - * @param {*} value value to test - * @return {Boolean} true if `value` is an empty array, false otherwise - * @api public - */ -is.array.empty = function (value) { - return is.array(value) && value.length === 0; -}; - -/** - * is.arraylike - * Test if `value` is an arraylike object. - * - * @param {*} value value to test - * @return {Boolean} true if `value` is an arguments object, false otherwise - * @api public - */ - -is.arraylike = function (value) { - return !!value && !is.bool(value) - && owns.call(value, 'length') - && isFinite(value.length) - && is.number(value.length) - && value.length >= 0; -}; - -/** - * Test boolean. - */ - -/** - * is.bool - * Test if `value` is a boolean. - * - * @param {*} value value to test - * @return {Boolean} true if `value` is a boolean, false otherwise - * @api public - */ - -is.bool = is['boolean'] = function (value) { - return toStr.call(value) === '[object Boolean]'; -}; - -/** - * is.false - * Test if `value` is false. - * - * @param {*} value value to test - * @return {Boolean} true if `value` is false, false otherwise - * @api public - */ - -is['false'] = function (value) { - return is.bool(value) && Boolean(Number(value)) === false; -}; - -/** - * is.true - * Test if `value` is true. - * - * @param {*} value value to test - * @return {Boolean} true if `value` is true, false otherwise - * @api public - */ - -is['true'] = function (value) { - return is.bool(value) && Boolean(Number(value)) === true; -}; - -/** - * Test date. - */ - -/** - * is.date - * Test if `value` is a date. - * - * @param {*} value value to test - * @return {Boolean} true if `value` is a date, false otherwise - * @api public - */ - -is.date = function (value) { - return toStr.call(value) === '[object Date]'; -}; - -/** - * is.date.valid - * Test if `value` is a valid date. - * - * @param {*} value value to test - * @returns {Boolean} true if `value` is a valid date, false otherwise - */ -is.date.valid = function (value) { - return is.date(value) && !isNaN(Number(value)); -}; - -/** - * Test element. - */ - -/** - * is.element - * Test if `value` is an html element. - * - * @param {*} value value to test - * @return {Boolean} true if `value` is an HTML Element, false otherwise - * @api public - */ - -is.element = function (value) { - return value !== undefined - && typeof HTMLElement !== 'undefined' - && value instanceof HTMLElement - && value.nodeType === 1; -}; - -/** - * Test error. - */ - -/** - * is.error - * Test if `value` is an error object. - * - * @param {*} value value to test - * @return {Boolean} true if `value` is an error object, false otherwise - * @api public - */ - -is.error = function (value) { - return toStr.call(value) === '[object Error]'; -}; - -/** - * Test function. - */ - -/** - * is.fn / is.function (deprecated) - * Test if `value` is a function. - * - * @param {*} value value to test - * @return {Boolean} true if `value` is a function, false otherwise - * @api public - */ - -is.fn = is['function'] = function (value) { - var isAlert = typeof window !== 'undefined' && value === window.alert; - if (isAlert) { - return true; - } - var str = toStr.call(value); - return str === '[object Function]' || str === '[object GeneratorFunction]' || str === '[object AsyncFunction]'; -}; - -/** - * Test number. - */ - -/** - * is.number - * Test if `value` is a number. - * - * @param {*} value value to test - * @return {Boolean} true if `value` is a number, false otherwise - * @api public - */ - -is.number = function (value) { - return toStr.call(value) === '[object Number]'; -}; - -/** - * is.infinite - * Test if `value` is positive or negative infinity. - * - * @param {*} value value to test - * @return {Boolean} true if `value` is positive or negative Infinity, false otherwise - * @api public - */ -is.infinite = function (value) { - return value === Infinity || value === -Infinity; -}; - -/** - * is.decimal - * Test if `value` is a decimal number. - * - * @param {*} value value to test - * @return {Boolean} true if `value` is a decimal number, false otherwise - * @api public - */ - -is.decimal = function (value) { - return is.number(value) && !isActualNaN(value) && !is.infinite(value) && value % 1 !== 0; -}; - -/** - * is.divisibleBy - * Test if `value` is divisible by `n`. - * - * @param {Number} value value to test - * @param {Number} n dividend - * @return {Boolean} true if `value` is divisible by `n`, false otherwise - * @api public - */ - -is.divisibleBy = function (value, n) { - var isDividendInfinite = is.infinite(value); - var isDivisorInfinite = is.infinite(n); - var isNonZeroNumber = is.number(value) && !isActualNaN(value) && is.number(n) && !isActualNaN(n) && n !== 0; - return isDividendInfinite || isDivisorInfinite || (isNonZeroNumber && value % n === 0); -}; - -/** - * is.integer - * Test if `value` is an integer. - * - * @param value to test - * @return {Boolean} true if `value` is an integer, false otherwise - * @api public - */ - -is.integer = is['int'] = function (value) { - return is.number(value) && !isActualNaN(value) && value % 1 === 0; -}; - -/** - * is.maximum - * Test if `value` is greater than 'others' values. - * - * @param {Number} value value to test - * @param {Array} others values to compare with - * @return {Boolean} true if `value` is greater than `others` values - * @api public - */ - -is.maximum = function (value, others) { - if (isActualNaN(value)) { - throw new TypeError('NaN is not a valid value'); - } else if (!is.arraylike(others)) { - throw new TypeError('second argument must be array-like'); - } - var len = others.length; - - while (--len >= 0) { - if (value < others[len]) { - return false; - } - } - - return true; -}; - -/** - * is.minimum - * Test if `value` is less than `others` values. - * - * @param {Number} value value to test - * @param {Array} others values to compare with - * @return {Boolean} true if `value` is less than `others` values - * @api public - */ - -is.minimum = function (value, others) { - if (isActualNaN(value)) { - throw new TypeError('NaN is not a valid value'); - } else if (!is.arraylike(others)) { - throw new TypeError('second argument must be array-like'); - } - var len = others.length; - - while (--len >= 0) { - if (value > others[len]) { - return false; - } - } - - return true; -}; - -/** - * is.nan - * Test if `value` is not a number. - * - * @param {*} value value to test - * @return {Boolean} true if `value` is not a number, false otherwise - * @api public - */ - -is.nan = function (value) { - return !is.number(value) || value !== value; -}; - -/** - * is.even - * Test if `value` is an even number. - * - * @param {Number} value value to test - * @return {Boolean} true if `value` is an even number, false otherwise - * @api public - */ - -is.even = function (value) { - return is.infinite(value) || (is.number(value) && value === value && value % 2 === 0); -}; - -/** - * is.odd - * Test if `value` is an odd number. - * - * @param {Number} value value to test - * @return {Boolean} true if `value` is an odd number, false otherwise - * @api public - */ - -is.odd = function (value) { - return is.infinite(value) || (is.number(value) && value === value && value % 2 !== 0); -}; - -/** - * is.ge - * Test if `value` is greater than or equal to `other`. - * - * @param {Number} value value to test - * @param {Number} other value to compare with - * @return {Boolean} - * @api public - */ - -is.ge = function (value, other) { - if (isActualNaN(value) || isActualNaN(other)) { - throw new TypeError('NaN is not a valid value'); - } - return !is.infinite(value) && !is.infinite(other) && value >= other; -}; - -/** - * is.gt - * Test if `value` is greater than `other`. - * - * @param {Number} value value to test - * @param {Number} other value to compare with - * @return {Boolean} - * @api public - */ - -is.gt = function (value, other) { - if (isActualNaN(value) || isActualNaN(other)) { - throw new TypeError('NaN is not a valid value'); - } - return !is.infinite(value) && !is.infinite(other) && value > other; -}; - -/** - * is.le - * Test if `value` is less than or equal to `other`. - * - * @param {Number} value value to test - * @param {Number} other value to compare with - * @return {Boolean} if 'value' is less than or equal to 'other' - * @api public - */ - -is.le = function (value, other) { - if (isActualNaN(value) || isActualNaN(other)) { - throw new TypeError('NaN is not a valid value'); - } - return !is.infinite(value) && !is.infinite(other) && value <= other; -}; - -/** - * is.lt - * Test if `value` is less than `other`. - * - * @param {Number} value value to test - * @param {Number} other value to compare with - * @return {Boolean} if `value` is less than `other` - * @api public - */ - -is.lt = function (value, other) { - if (isActualNaN(value) || isActualNaN(other)) { - throw new TypeError('NaN is not a valid value'); - } - return !is.infinite(value) && !is.infinite(other) && value < other; -}; - -/** - * is.within - * Test if `value` is within `start` and `finish`. - * - * @param {Number} value value to test - * @param {Number} start lower bound - * @param {Number} finish upper bound - * @return {Boolean} true if 'value' is is within 'start' and 'finish' - * @api public - */ -is.within = function (value, start, finish) { - if (isActualNaN(value) || isActualNaN(start) || isActualNaN(finish)) { - throw new TypeError('NaN is not a valid value'); - } else if (!is.number(value) || !is.number(start) || !is.number(finish)) { - throw new TypeError('all arguments must be numbers'); - } - var isAnyInfinite = is.infinite(value) || is.infinite(start) || is.infinite(finish); - return isAnyInfinite || (value >= start && value <= finish); -}; - -/** - * Test object. - */ - -/** - * is.object - * Test if `value` is an object. - * - * @param {*} value value to test - * @return {Boolean} true if `value` is an object, false otherwise - * @api public - */ -is.object = function (value) { - return toStr.call(value) === '[object Object]'; -}; - -/** - * is.primitive - * Test if `value` is a primitive. - * - * @param {*} value value to test - * @return {Boolean} true if `value` is a primitive, false otherwise - * @api public - */ -is.primitive = function isPrimitive(value) { - if (!value) { - return true; - } - if (typeof value === 'object' || is.object(value) || is.fn(value) || is.array(value)) { - return false; - } - return true; -}; - -/** - * is.hash - * Test if `value` is a hash - a plain object literal. - * - * @param {*} value value to test - * @return {Boolean} true if `value` is a hash, false otherwise - * @api public - */ - -is.hash = function (value) { - return is.object(value) && value.constructor === Object && !value.nodeType && !value.setInterval; -}; - -/** - * Test regexp. - */ - -/** - * is.regexp - * Test if `value` is a regular expression. - * - * @param {*} value value to test - * @return {Boolean} true if `value` is a regexp, false otherwise - * @api public - */ - -is.regexp = function (value) { - return toStr.call(value) === '[object RegExp]'; -}; - -/** - * Test string. - */ - -/** - * is.string - * Test if `value` is a string. - * - * @param {*} value value to test - * @return {Boolean} true if 'value' is a string, false otherwise - * @api public - */ - -is.string = function (value) { - return toStr.call(value) === '[object String]'; -}; - -/** - * Test base64 string. - */ - -/** - * is.base64 - * Test if `value` is a valid base64 encoded string. - * - * @param {*} value value to test - * @return {Boolean} true if 'value' is a base64 encoded string, false otherwise - * @api public - */ - -is.base64 = function (value) { - return is.string(value) && (!value.length || base64Regex.test(value)); -}; - -/** - * Test base64 string. - */ - -/** - * is.hex - * Test if `value` is a valid hex encoded string. - * - * @param {*} value value to test - * @return {Boolean} true if 'value' is a hex encoded string, false otherwise - * @api public - */ - -is.hex = function (value) { - return is.string(value) && (!value.length || hexRegex.test(value)); -}; - -/** - * is.symbol - * Test if `value` is an ES6 Symbol - * - * @param {*} value value to test - * @return {Boolean} true if `value` is a Symbol, false otherise - * @api public - */ - -is.symbol = function (value) { - return typeof Symbol === 'function' && toStr.call(value) === '[object Symbol]' && typeof symbolValueOf.call(value) === 'symbol'; -}; - -/** - * is.bigint - * Test if `value` is an ES-proposed BigInt - * - * @param {*} value value to test - * @return {Boolean} true if `value` is a BigInt, false otherise - * @api public - */ - -is.bigint = function (value) { - // eslint-disable-next-line valid-typeof - return typeof BigInt === 'function' && toStr.call(value) === '[object BigInt]' && typeof bigIntValueOf.call(value) === 'bigint'; -}; - -module.exports = is; diff --git a/reverse_engineering/node_modules/is/package.json b/reverse_engineering/node_modules/is/package.json deleted file mode 100644 index 1f0b72e..0000000 --- a/reverse_engineering/node_modules/is/package.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "_from": "is@^3.3.0", - "_id": "is@3.3.0", - "_inBundle": false, - "_integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==", - "_location": "/is", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "is@^3.3.0", - "name": "is", - "escapedName": "is", - "rawSpec": "^3.3.0", - "saveSpec": null, - "fetchSpec": "^3.3.0" - }, - "_requiredBy": [ - "/@google-cloud/bigquery" - ], - "_resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz", - "_shasum": "61cff6dd3c4193db94a3d62582072b44e5645d79", - "_spec": "is@^3.3.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/@google-cloud/bigquery", - "author": { - "name": "Enrico Marino", - "url": "http://onirame.com" - }, - "bugs": { - "url": "https://github.com/enricomarino/is/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Jordan Harband", - "url": "https://github.com/ljharb" - } - ], - "dependencies": {}, - "deprecated": false, - "description": "the definitive JavaScript type testing library", - "devDependencies": { - "@ljharb/eslint-config": "^13.0.0", - "covert": "^1.1.0", - "eslint": "^5.10.0", - "foreach": "^2.0.5", - "jscs": "^3.0.7", - "make-generator-function": "^1.1.0", - "safe-publish-latest": "^1.1.2", - "tape": "^4.9.1" - }, - "engines": { - "node": "*" - }, - "homepage": "https://github.com/enricomarino/is", - "keywords": [ - "util", - "type", - "test" - ], - "license": "MIT", - "main": "index.js", - "name": "is", - "repository": { - "type": "git", - "url": "git://github.com/enricomarino/is.git" - }, - "scripts": { - "coverage": "covert test/index.js", - "coverage-quiet": "covert test/index.js --quiet", - "eslint": "eslint .", - "jscs": "jscs *.js */*.js", - "lint": "npm run jscs && npm run eslint", - "prepublish": "safe-publish-latest", - "pretest": "npm run lint", - "test": "npm run --silent tests-only", - "tests-only": "node test/index.js" - }, - "testling": { - "files": "test/index.js", - "browsers": [ - "iexplore/6.0..latest", - "firefox/3.0", - "firefox/15.0..latest", - "firefox/nightly", - "chrome/4.0", - "chrome/22.0..latest", - "chrome/canary", - "opera/10.0..latest", - "opera/next", - "safari/5.0.5..latest", - "ipad/6.0..latest", - "iphone/6.0..latest" - ] - }, - "version": "3.3.0" -} diff --git a/reverse_engineering/node_modules/is/test/index.js b/reverse_engineering/node_modules/is/test/index.js deleted file mode 100644 index 6c1da79..0000000 --- a/reverse_engineering/node_modules/is/test/index.js +++ /dev/null @@ -1,729 +0,0 @@ -/* globals window, document, HTMLElement */ - -'use strict'; - -var test = require('tape'); -var is = require('../index.js'); - -var forEach = require('foreach'); -var toStr = Object.prototype.toString; - -var genFn = require('make-generator-function'); - -test('is.type', function (t) { - var booleans = [true, false]; - forEach(booleans, function (boolean) { - t.ok(is.type(boolean, 'boolean'), '"' + boolean + '" is a boolean'); - }); - - var numbers = [1, 0 / 1, 0 / -1, NaN, Infinity, -Infinity]; - forEach(numbers, function (number) { - t.ok(is.type(number, 'number'), '"' + number + '" is a number'); - }); - - var objects = [{}, null, new Date()]; - forEach(objects, function (object) { - t.ok(is.type(object, 'object'), '"' + object + '" is an object'); - }); - - var strings = ['', 'abc']; - forEach(strings, function (string) { - t.ok(is.type(string, 'string'), '"' + string + '" is a string'); - }); - - t.ok(is.type(undefined, 'undefined'), 'undefined is undefined'); - - t.end(); -}); - -test('is.undef', function (t) { - t.ok(is.undef(), 'absent undefined is undefined'); - t.ok(is.undef(undefined), 'literal undefined is undefined'); - t.notOk(is.undef(null), 'null is not undefined'); - t.notOk(is.undef({}), 'object is not undefined'); - t.end(); -}); - -test('is.defined', function (t) { - t.notOk(is.defined(), 'undefined is not defined'); - t.ok(is.defined(null), 'null is defined'); - t.ok(is.defined({}), 'object is defined'); - t.end(); -}); - -test('is.empty', function (t) { - t.ok(is.empty(''), 'empty string is empty'); - t.ok(is.empty(Object('')), 'empty String object is empty'); - t.ok(is.empty([]), 'empty array is empty'); - t.ok(is.empty({}), 'empty object is empty'); - t.ok(is.empty(null), 'null is empty'); - t.ok(is.empty(), 'undefined is empty'); - t.ok(is.empty(undefined), 'undefined is empty'); - t.ok(is.empty(false), 'false is empty'); - t.ok(is.empty(0), '0 is empty'); - t.ok(is.empty(NaN), 'nan is empty'); - (function () { - t.ok(is.empty(arguments), 'empty arguments is empty'); - }()); - t.notOk(is.empty({ a: 1 }), 'nonempty object is not empty'); - t.notOk(is.empty(true), 'true is not empty'); - t.notOk(is.empty(/a/g), 'regex is not empty'); - t.notOk(is.empty(new Date()), 'date is not empty'); - t.end(); -}); - -test('is.equal', function (t) { - t.test('primitives', function (pt) { - var primitives = [true, false, undefined, null, '', 'foo', 0, Infinity, -Infinity]; - pt.plan(primitives.length); - for (var i = 0; i < primitives.length; ++i) { - pt.ok(is.equal(primitives[i], primitives[i]), 'primitives are equal to themselves: ' + primitives[i]); - } - pt.end(); - }); - - t.test('arrays', function (at) { - at.ok(is.equal([1, 2, 3], [1, 2, 3]), 'arrays are shallowly equal'); - at.ok(is.equal([1, 2, [3, 4]], [1, 2, [3, 4]]), 'arrays are deep equal'); - at.notOk(is.equal([1, 2, 3], [5, 2, 3]), 'inequal arrays are not equal'); - at.notOk(is.equal([1, 2], [2, 3]), 'inequal arrays are not equal'); - at.notOk(is.equal([1, 2, 3], [2, 3]), 'inequal length arrays are not equal'); - at.ok(is.equal([], []), 'empty arrays are equal'); - - var arr = [1, 2]; - at.ok(is.equal(arr, arr), 'array is equal to itself'); - - at.end(); - }); - - t.test('dates', function (dt) { - dt.plan(2); - var now = new Date(); - dt.ok(is.equal(now, new Date(now.getTime())), 'two equal date objects are equal'); - setTimeout(function () { - dt.notOk(is.equal(now, new Date()), 'two inequal date objects are not equal'); - dt.end(); - }, 10); - }); - - t.test('plain objects', function (ot) { - ot.ok(is.equal({ a: 1, b: 2, c: 3 }, { a: 1, b: 2, c: 3 }), 'objects are shallowly equal'); - ot.ok(is.equal({ a: { b: 1 } }, { a: { b: 1 } }), 'objects are deep equal'); - ot.notOk(is.equal({ a: 1 }, { a: 2 }), 'inequal objects are not equal'); - ot.end(); - }); - - t.test('object instances', function (ot) { - var F = function F() { - this.foo = 'bar'; - }; - F.prototype = {}; - var G = function G() { - this.foo = 'bar'; - }; - var f = new F(); - var g = new G(); - - ot.ok(is.equal(f, f), 'the same object instances are equal'); - ot.ok(is.equal(f, new F()), 'two object instances are equal when the prototype and props are the same'); - ot.ok(is.equal(f, new G()), 'two object instances are equal when the prototype is not the same, but props are'); - - g.bar = 'baz'; - ot.notOk(is.equal(f, g), 'object instances are not equal when the prototype and props are not the same'); - ot.notOk(is.equal(g, f), 'object instances are not equal when the prototype and props are not the same'); - ot.end(); - }); - - t.test('functions', function (ft) { - var F = function () {}; - F.prototype = {}; - var G = function () {}; - G.prototype = new Date(); - - ft.notEqual(F.prototype, G.prototype, 'F and G have different prototypes'); - ft.notOk(is.equal(F, G), 'two functions are not equal when the prototype is not the same'); - - var H = function () {}; - H.prototype = F.prototype; - - ft.equal(F.prototype, H.prototype, 'F and H have the same prototype'); - ft.ok(is.equal(F, H), 'two functions are equal when the prototype is the same'); - ft.end(); - }); - - t.end(); -}); - -test('is.hosted', function (t) { - t.ok(is.hosted('a', { a: {} }), 'object is hosted'); - t.ok(is.hosted('a', { a: [] }), 'array is hosted'); - t.ok(is.hosted('a', { a: function () {} }), 'function is hosted'); - t.notOk(is.hosted('a', { a: true }), 'boolean value is not hosted'); - t.notOk(is.hosted('a', { a: false }), 'boolean value is not hosted'); - t.notOk(is.hosted('a', { a: 3 }), 'number value is not hosted'); - t.notOk(is.hosted('a', { a: undefined }), 'undefined value is not hosted'); - t.notOk(is.hosted('a', { a: 'abc' }), 'string value is not hosted'); - t.notOk(is.hosted('a', { a: null }), 'null value is not hosted'); - t.end(); -}); - -test('is.instance', function (t) { - t.ok(is.instance(new Date(), Date), 'new Date is instanceof Date'); - var F = function () {}; - t.ok(is.instance(new F(), F), 'new constructor is instanceof constructor'); - t.end(); -}); - -test('is.nil', function (t) { - var isNull = is.nil; - t.equal(isNull, is['null'], 'is.nil is the same as is.null'); - t.ok(isNull(null), 'null is null'); - t.notOk(isNull(undefined), 'undefined is not null'); - t.notOk(isNull({}), 'object is not null'); - t.end(); -}); - -test('is.args', function (t) { - t.notOk(is.args([]), 'array is not arguments'); - (function () { - t.ok(is.args(arguments), 'arguments is arguments'); - }()); - (function () { - t.notOk(is.args(Array.prototype.slice.call(arguments)), 'sliced arguments is not arguments'); - }()); - var fakeOldArguments = { - callee: function () {}, - length: 3 - }; - t.ok(is.args(fakeOldArguments), 'old-style arguments object is arguments'); - t.end(); -}); - -test('is.args.empty', function (t) { - t.notOk(is.args.empty([]), 'empty array is not empty arguments'); - (function () { - t.ok(is.args.empty(arguments), 'empty arguments is empty arguments'); - }()); - (function () { - t.notOk(is.args.empty(Array.prototype.slice.call(arguments)), 'empty sliced arguments is not empty arguments'); - }()); - t.end(); -}); - -test('is.array', function (t) { - t.ok(is.array([]), 'array is array'); - (function () { - t.ok(is.array(Array.prototype.slice.call(arguments)), 'sliced arguments is array'); - }()); - t.end(); -}); - -test('is.array.empty', function (t) { - t.ok(is.array.empty([]), 'empty array is empty array'); - (function () { - t.notOk(is.array.empty(arguments), 'empty arguments is not empty array'); - }()); - (function () { - t.ok(is.array.empty(Array.prototype.slice.call(arguments)), 'empty sliced arguments is empty array'); - }()); - t.end(); -}); - -test('is.isarraylike', function (t) { - t.notOk(is.arraylike(), 'undefined is not array-like'); - t.notOk(is.arraylike(null), 'null is not array-like'); - t.notOk(is.arraylike(false), 'false is not array-like'); - t.notOk(is.arraylike(true), 'true is not array-like'); - t.ok(is.arraylike({ length: 0 }), 'object with zero length is array-like'); - t.ok(is.arraylike({ length: 1 }), 'object with positive length is array-like'); - t.notOk(is.arraylike({ length: -1 }), 'object with negative length is not array-like'); - t.notOk(is.arraylike({ length: NaN }), 'object with NaN length is not array-like'); - t.notOk(is.arraylike({ length: 'foo' }), 'object with string length is not array-like'); - t.notOk(is.arraylike({ length: '' }), 'object with empty string length is not array-like'); - t.ok(is.arraylike([]), 'array is array-like'); - (function () { - t.ok(is.arraylike(arguments), 'empty arguments is array-like'); - }()); - (function () { - t.ok(is.arraylike(arguments), 'nonempty arguments is array-like'); - }(1, 2, 3)); - t.end(); -}); - -test('is.bool', function (t) { - t.ok(is.bool(true), 'literal true is a boolean'); - t.ok(is.bool(false), 'literal false is a boolean'); - t.ok(is.bool(Object(true)), 'object true is a boolean'); - t.ok(is.bool(Object(false)), 'object false is a boolean'); - t.notOk(is.bool(), 'undefined is not a boolean'); - t.notOk(is.bool(null), 'null is not a boolean'); - t.end(); -}); - -test('is.false', function (t) { - var isFalse = is['false']; - t.ok(isFalse(false), 'false is false'); - t.ok(isFalse(Object(false)), 'object false is false'); - t.notOk(isFalse(true), 'true is not false'); - t.notOk(isFalse(), 'undefined is not false'); - t.notOk(isFalse(null), 'null is not false'); - t.notOk(isFalse(''), 'empty string is not false'); - t.end(); -}); - -test('is.true', function (t) { - var isTrue = is['true']; - t.ok(isTrue(true), 'true is true'); - t.ok(isTrue(Object(true)), 'object true is true'); - t.notOk(isTrue(false), 'false is not true'); - t.notOk(isTrue(), 'undefined is not true'); - t.notOk(isTrue(null), 'null is not true'); - t.notOk(isTrue(''), 'empty string is not true'); - t.end(); -}); - -test('is.date', function (t) { - t.ok(is.date(new Date()), 'new Date is date'); - t.notOk(is.date(), 'undefined is not date'); - t.notOk(is.date(null), 'null is not date'); - t.notOk(is.date(''), 'empty string is not date'); - var nowTS = (new Date()).getTime(); - t.notOk(is.date(nowTS), 'timestamp is not date'); - var F = function () {}; - F.prototype = new Date(); - t.notOk(is.date(new F()), 'Date subtype is not date'); - t.end(); -}); - -test('is.date.valid', function (t) { - t.ok(is.date.valid(new Date()), 'new Date() is a valid date'); - t.notOk(is.date.valid(new Date('')), 'new Date("") is not a valid date'); - t.end(); -}); - -test('is.element', function (t) { - t.notOk(is.element(), 'undefined is not element'); - - t.test('when HTMLElement exists', { skip: typeof HTMLElement === 'undefined' }, function (st) { - var element = document.createElement('div'); - st.ok(is.element(element), 'HTMLElement is element'); - st.notOk(is.element({ nodeType: 1 }), 'object with nodeType is not element'); - st.end(); - }); - - t.end(); -}); - -test('is.error', function (t) { - var err = new Error('foo'); - t.ok(is.error(err), 'Error is error'); - t.notOk(is.error({}), 'object is not error'); - var objWithErrorToString = { - toString: function () { - return '[object Error]'; - } - }; - t.equal(String(objWithErrorToString), toStr.call(new Error()), 'obj has Error\'s toString'); - t.notOk(is.error(objWithErrorToString), 'object with Error\'s toString is not error'); - t.end(); -}); - -test('is.fn', function (t) { - t.equal(is['function'], is.fn, 'alias works'); - t.ok(is.fn(function () {}), 'function is function'); - if (typeof window !== 'undefined') { - // in IE7/8, typeof alert === 'object' - t.ok(is.fn(window.alert), 'window.alert is function'); - } - t.notOk(is.fn({}), 'object is not function'); - t.notOk(is.fn(null), 'null is not function'); - - t.test('generator functions', { skip: !genFn }, function (st) { - t.ok(is.fn(genFn), 'generator function is function'); - st.end(); - }); - - t.end(); -}); - -test('is.number', function (t) { - t.ok(is.number(0), 'positive zero is number'); - t.ok(is.number(0 / -1), 'negative zero is number'); - t.ok(is.number(3), 'three is number'); - t.ok(is.number(NaN), 'NaN is number'); - t.ok(is.number(Infinity), 'infinity is number'); - t.ok(is.number(-Infinity), 'negative infinity is number'); - t.ok(is.number(Object(42)), 'object number is number'); - t.notOk(is.number(), 'undefined is not number'); - t.notOk(is.number(null), 'null is not number'); - t.notOk(is.number(true), 'true is not number'); - t.end(); -}); - -test('is.infinite', function (t) { - t.ok(is.infinite(Infinity), 'positive infinity is infinite'); - t.ok(is.infinite(-Infinity), 'negative infinity is infinite'); - t.notOk(is.infinite(NaN), 'NaN is not infinite'); - t.notOk(is.infinite(0), 'a number is not infinite'); - t.end(); -}); - -test('is.decimal', function (t) { - t.ok(is.decimal(1.1), 'decimal is decimal'); - t.notOk(is.decimal(0), 'zero is not decimal'); - t.notOk(is.decimal(1), 'integer is not decimal'); - t.notOk(is.decimal(NaN), 'NaN is not decimal'); - t.notOk(is.decimal(Infinity), 'Infinity is not decimal'); - t.end(); -}); - -test('is.divisibleBy', function (t) { - t.ok(is.divisibleBy(4, 2), '4 is divisible by 2'); - t.ok(is.divisibleBy(4, 2), '4 is divisible by 2'); - t.ok(is.divisibleBy(0, 1), '0 is divisible by 1'); - t.ok(is.divisibleBy(Infinity, 1), 'infinity is divisible by anything'); - t.ok(is.divisibleBy(1, Infinity), 'anything is divisible by infinity'); - t.ok(is.divisibleBy(Infinity, Infinity), 'infinity is divisible by infinity'); - t.notOk(is.divisibleBy(1, 0), '1 is not divisible by 0'); - t.notOk(is.divisibleBy(NaN, 1), 'NaN is not divisible by 1'); - t.notOk(is.divisibleBy(1, NaN), '1 is not divisible by NaN'); - t.notOk(is.divisibleBy(NaN, NaN), 'NaN is not divisible by NaN'); - t.notOk(is.divisibleBy(1, 3), '1 is not divisible by 3'); - t.end(); -}); - -test('is.integer', function (t) { - t.ok(is.integer(0), '0 is integer'); - t.ok(is.integer(3), '3 is integer'); - t.notOk(is.integer(1.1), '1.1 is not integer'); - t.notOk(is.integer(NaN), 'NaN is not integer'); - t.notOk(is.integer(Infinity), 'infinity is not integer'); - t.notOk(is.integer(null), 'null is not integer'); - t.notOk(is.integer(), 'undefined is not integer'); - t.end(); -}); - -test('is.maximum', function (t) { - t.ok(is.maximum(3, [3, 2, 1]), '3 is maximum of [3,2,1]'); - t.ok(is.maximum(3, [1, 2, 3]), '3 is maximum of [1,2,3]'); - t.ok(is.maximum(4, [1, 2, 3]), '4 is maximum of [1,2,3]'); - t.ok(is.maximum('c', ['a', 'b', 'c']), 'c is maximum of [a,b,c]'); - t.notOk(is.maximum(2, [1, 2, 3]), '2 is not maximum of [1,2,3]'); - - var nanError = new TypeError('NaN is not a valid value'); - t['throws'](function () { return is.maximum(NaN); }, nanError, 'throws when first value is NaN'); - - var error = new TypeError('second argument must be array-like'); - t['throws'](function () { return is.maximum(2, null); }, error, 'throws when second value is not array-like'); - t['throws'](function () { return is.maximum(2, {}); }, error, 'throws when second value is not array-like'); - t.end(); -}); - -test('is.minimum', function (t) { - t.ok(is.minimum(1, [1, 2, 3]), '1 is minimum of [1,2,3]'); - t.ok(is.minimum(0, [1, 2, 3]), '0 is minimum of [1,2,3]'); - t.ok(is.minimum('a', ['a', 'b', 'c']), 'a is minimum of [a,b,c]'); - t.notOk(is.minimum(2, [1, 2, 3]), '2 is not minimum of [1,2,3]'); - - var nanError = new TypeError('NaN is not a valid value'); - t['throws'](function () { return is.minimum(NaN); }, nanError, 'throws when first value is NaN'); - - var error = new TypeError('second argument must be array-like'); - t['throws'](function () { return is.minimum(2, null); }, error, 'throws when second value is not array-like'); - t['throws'](function () { return is.minimum(2, {}); }, error, 'throws when second value is not array-like'); - t.end(); -}); - -test('is.nan', function (t) { - t.ok(is.nan(NaN), 'NaN is not a number'); - t.ok(is.nan('abc'), 'string is not a number'); - t.ok(is.nan(true), 'boolean is not a number'); - t.ok(is.nan({}), 'object is not a number'); - t.ok(is.nan([]), 'array is not a number'); - t.ok(is.nan(function () {}), 'function is not a number'); - t.notOk(is.nan(0), 'zero is a number'); - t.notOk(is.nan(3), 'three is a number'); - t.notOk(is.nan(1.1), '1.1 is a number'); - t.notOk(is.nan(Infinity), 'infinity is a number'); - t.end(); -}); - -test('is.even', function (t) { - t.ok(is.even(0), 'zero is even'); - t.ok(is.even(2), 'two is even'); - t.ok(is.even(Infinity), 'infinity is even'); - t.notOk(is.even(1), '1 is not even'); - t.notOk(is.even(), 'undefined is not even'); - t.notOk(is.even(null), 'null is not even'); - t.notOk(is.even(NaN), 'NaN is not even'); - t.end(); -}); - -test('is.odd', function (t) { - t.ok(is.odd(1), 'zero is odd'); - t.ok(is.odd(3), 'two is odd'); - t.ok(is.odd(Infinity), 'infinity is odd'); - t.notOk(is.odd(0), '0 is not odd'); - t.notOk(is.odd(2), '2 is not odd'); - t.notOk(is.odd(), 'undefined is not odd'); - t.notOk(is.odd(null), 'null is not odd'); - t.notOk(is.odd(NaN), 'NaN is not odd'); - t.end(); -}); - -test('is.ge', function (t) { - t.ok(is.ge(3, 2), '3 is greater than 2'); - t.notOk(is.ge(2, 3), '2 is not greater than 3'); - t.ok(is.ge(3, 3), '3 is greater than or equal to 3'); - t.ok(is.ge('abc', 'a'), 'abc is greater than a'); - t.ok(is.ge('abc', 'abc'), 'abc is greater than or equal to abc'); - t.notOk(is.ge('a', 'abc'), 'a is not greater than abc'); - t.notOk(is.ge(Infinity, 0), 'infinity is not greater than anything'); - t.notOk(is.ge(0, Infinity), 'anything is not greater than infinity'); - var error = new TypeError('NaN is not a valid value'); - t['throws'](function () { return is.ge(NaN, 2); }, error, 'throws when first value is NaN'); - t['throws'](function () { return is.ge(2, NaN); }, error, 'throws when second value is NaN'); - t.end(); -}); - -test('is.gt', function (t) { - t.ok(is.gt(3, 2), '3 is greater than 2'); - t.notOk(is.gt(2, 3), '2 is not greater than 3'); - t.notOk(is.gt(3, 3), '3 is not greater than 3'); - t.ok(is.gt('abc', 'a'), 'abc is greater than a'); - t.notOk(is.gt('abc', 'abc'), 'abc is not greater than abc'); - t.notOk(is.gt('a', 'abc'), 'a is not greater than abc'); - t.notOk(is.gt(Infinity, 0), 'infinity is not greater than anything'); - t.notOk(is.gt(0, Infinity), 'anything is not greater than infinity'); - var error = new TypeError('NaN is not a valid value'); - t['throws'](function () { return is.gt(NaN, 2); }, error, 'throws when first value is NaN'); - t['throws'](function () { return is.gt(2, NaN); }, error, 'throws when second value is NaN'); - t.end(); -}); - -test('is.le', function (t) { - t.ok(is.le(2, 3), '2 is lesser than or equal to 3'); - t.notOk(is.le(3, 2), '3 is not lesser than or equal to 2'); - t.ok(is.le(3, 3), '3 is lesser than or equal to 3'); - t.ok(is.le('a', 'abc'), 'a is lesser than or equal to abc'); - t.ok(is.le('abc', 'abc'), 'abc is lesser than or equal to abc'); - t.notOk(is.le('abc', 'a'), 'abc is not lesser than or equal to a'); - t.notOk(is.le(Infinity, 0), 'infinity is not lesser than or equal to anything'); - t.notOk(is.le(0, Infinity), 'anything is not lesser than or equal to infinity'); - var error = new TypeError('NaN is not a valid value'); - t['throws'](function () { return is.le(NaN, 2); }, error, 'throws when first value is NaN'); - t['throws'](function () { return is.le(2, NaN); }, error, 'throws when second value is NaN'); - t.end(); -}); - -test('is.lt', function (t) { - t.ok(is.lt(2, 3), '2 is lesser than 3'); - t.notOk(is.lt(3, 2), '3 is not lesser than 2'); - t.notOk(is.lt(3, 3), '3 is not lesser than 3'); - t.ok(is.lt('a', 'abc'), 'a is lesser than abc'); - t.notOk(is.lt('abc', 'abc'), 'abc is not lesser than abc'); - t.notOk(is.lt('abc', 'a'), 'abc is not lesser than a'); - t.notOk(is.lt(Infinity, 0), 'infinity is not lesser than anything'); - t.notOk(is.lt(0, Infinity), 'anything is not lesser than infinity'); - var error = new TypeError('NaN is not a valid value'); - t['throws'](function () { return is.lt(NaN, 2); }, error, 'throws when first value is NaN'); - t['throws'](function () { return is.lt(2, NaN); }, error, 'throws when second value is NaN'); - t.end(); -}); - -test('is.within', function (t) { - t.test('throws on NaN', function (st) { - var nanError = new TypeError('NaN is not a valid value'); - st['throws'](function () { return is.within(NaN, 0, 0); }, nanError, 'throws when first value is NaN'); - st['throws'](function () { return is.within(0, NaN, 0); }, nanError, 'throws when second value is NaN'); - st['throws'](function () { return is.within(0, 0, NaN); }, nanError, 'throws when third value is NaN'); - st.end(); - }); - - t.test('throws on non-number', function (st) { - var error = new TypeError('all arguments must be numbers'); - st['throws'](function () { return is.within('', 0, 0); }, error, 'throws when first value is string'); - st['throws'](function () { return is.within(0, '', 0); }, error, 'throws when second value is string'); - st['throws'](function () { return is.within(0, 0, ''); }, error, 'throws when third value is string'); - st['throws'](function () { return is.within({}, 0, 0); }, error, 'throws when first value is object'); - st['throws'](function () { return is.within(0, {}, 0); }, error, 'throws when second value is object'); - st['throws'](function () { return is.within(0, 0, {}); }, error, 'throws when third value is object'); - st['throws'](function () { return is.within(null, 0, 0); }, error, 'throws when first value is null'); - st['throws'](function () { return is.within(0, null, 0); }, error, 'throws when second value is null'); - st['throws'](function () { return is.within(0, 0, null); }, error, 'throws when third value is null'); - st['throws'](function () { return is.within(undefined, 0, 0); }, error, 'throws when first value is undefined'); - st['throws'](function () { return is.within(0, undefined, 0); }, error, 'throws when second value is undefined'); - st['throws'](function () { return is.within(0, 0, undefined); }, error, 'throws when third value is undefined'); - st.end(); - }); - - t.ok(is.within(2, 1, 3), '2 is between 1 and 3'); - t.ok(is.within(0, -1, 1), '0 is between -1 and 1'); - t.ok(is.within(2, 0, Infinity), 'infinity always returns true'); - t.ok(is.within(2, Infinity, 2), 'infinity always returns true'); - t.ok(is.within(Infinity, 0, 1), 'infinity always returns true'); - t.notOk(is.within(2, -1, -1), '2 is not between -1 and 1'); - t.end(); -}); - -test('is.object', function (t) { - t.ok(is.object({}), 'object literal is object'); - t.notOk(is.object(), 'undefined is not an object'); - t.notOk(is.object(null), 'null is not an object'); - t.notOk(is.object(true), 'true is not an object'); - t.notOk(is.object(''), 'string is not an object'); - t.notOk(is.object(NaN), 'NaN is not an object'); - t.notOk(is.object(Object), 'object constructor is not an object'); - t.notOk(is.object(function () {}), 'function is not an object'); - - t.test('Symbols', { skip: typeof Symbol !== 'function' }, function (st) { - st.notOk(is.object(Symbol('foo')), 'symbol is not an object'); - st.end(); - }); - - t.end(); -}); - -test('is.primitive', function (t) { - t.notOk(is.primitive({}), 'object literal is not a primitive'); - t.notOk(is.primitive([]), 'array is not a primitive'); - t.ok(is.primitive(), 'undefined is a primitive'); - t.ok(is.primitive(null), 'null is a primitive'); - t.ok(is.primitive(true), 'true is a primitive'); - t.ok(is.primitive(''), 'string is a primitive'); - t.ok(is.primitive(NaN), 'NaN is a primitive'); - t.notOk(is.primitive(Object), 'object constructor is not a primitive'); - t.notOk(is.primitive(function () {}), 'function is not a primitive'); - - t.test('Symbols', { skip: typeof Symbol !== 'function' }, function (st) { - st.ok(is.primitive(Symbol('foo')), 'symbol is a primitive'); - st.end(); - }); - - t.end(); -}); - -test('is.hash', function (t) { - t.ok(is.hash({}), 'empty object literal is hash'); - t.ok(is.hash({ 1: 2, a: 'b' }), 'object literal is hash'); - t.notOk(is.hash(), 'undefined is not a hash'); - t.notOk(is.hash(null), 'null is not a hash'); - t.notOk(is.hash(new Date()), 'date is not a hash'); - t.notOk(is.hash(Object('')), 'string object is not a hash'); - t.notOk(is.hash(''), 'string literal is not a hash'); - t.notOk(is.hash(Object(0)), 'number object is not a hash'); - t.notOk(is.hash(1), 'number literal is not a hash'); - t.notOk(is.hash(true), 'true is not a hash'); - t.notOk(is.hash(false), 'false is not a hash'); - t.notOk(is.hash(Object(false)), 'boolean obj is not hash'); - t.notOk(is.hash(false), 'literal false is not hash'); - t.notOk(is.hash(true), 'literal true is not hash'); - - t.test('commonJS environment', { skip: typeof module === 'undefined' }, function (st) { - st.ok(is.hash(module.exports), 'module.exports is a hash'); - st.end(); - }); - - t.test('browser stuff', { skip: typeof window === 'undefined' }, function (st) { - st.notOk(is.hash(window), 'window is not a hash'); - st.notOk(is.hash(document.createElement('div')), 'element is not a hash'); - st.end(); - }); - - t.test('node stuff', { skip: typeof process === 'undefined' }, function (st) { - st.notOk(is.hash(global), 'global is not a hash'); - st.notOk(is.hash(process), 'process is not a hash'); - st.end(); - }); - - t.end(); -}); - -test('is.regexp', function (t) { - t.ok(is.regexp(/a/g), 'regex literal is regex'); - t.ok(is.regexp(new RegExp('a', 'g')), 'regex object is regex'); - t.notOk(is.regexp(), 'undefined is not regex'); - t.notOk(is.regexp(function () {}), 'function is not regex'); - t.notOk(is.regexp('/a/g'), 'string regex is not regex'); - t.end(); -}); - -test('is.string', function (t) { - t.ok(is.string('foo'), 'string literal is string'); - t.ok(is.string(Object('foo')), 'string object is string'); - t.notOk(is.string(), 'undefined is not string'); - t.notOk(is.string(String), 'string constructor is not string'); - var F = function () {}; - F.prototype = Object(''); - t.notOk(is.string(F), 'string subtype is not string'); - t.end(); -}); - -test('is.base64', function (t) { - t.ok(is.base64('wxyzWXYZ/+=='), 'string is base64 encoded'); - t.ok(is.base64(''), 'zero length string is base64 encoded'); - t.notOk(is.base64('wxyzWXYZ123/+=='), 'string length not a multiple of four is not base64 encoded'); - t.notOk(is.base64('wxyzWXYZ1234|]=='), 'string with invalid characters is not base64 encoded'); - t.notOk(is.base64('wxyzWXYZ1234==/+'), 'string with = not at end is not base64 encoded'); - t.notOk(is.base64('wxyzWXYZ1234/==='), 'string ending with === is not base64 encoded'); - t.end(); -}); - -test('is.hex', function (t) { - t.ok(is.hex('abcdABCD1234'), 'string is hex encoded'); - t.ok(is.hex(''), 'zero length string is hex encoded'); - t.notOk(is.hex('wxyzWXYZ1234/+=='), 'string with invalid characters is not hex encoded'); - t.end(); -}); - -test('is.symbol', function (t) { - t.test('not symbols', function (st) { - var notSymbols = [true, false, null, undefined, {}, [], function () {}, 42, NaN, Infinity, /a/g, '', 0, -0, new Error('error')]; - forEach(notSymbols, function (notSymbol) { - st.notOk(is.symbol(notSymbol), notSymbol + ' is not symbol'); - }); - - st.end(); - }); - - t.test('symbols', { skip: typeof Symbol !== 'function' }, function (st) { - st.ok(is.symbol(Symbol('foo')), 'Symbol("foo") is symbol'); - - var notKnownSymbols = ['length', 'name', 'arguments', 'caller', 'prototype', 'for', 'keyFor']; - var symbolKeys = Object.getOwnPropertyNames(Symbol).filter(function (name) { - return notKnownSymbols.indexOf(name) < 0; - }); - forEach(symbolKeys, function (symbolKey) { - st.ok(is.symbol(Symbol[symbolKey]), symbolKey + ' is symbol'); - }); - - st.end(); - }); - - t.end(); -}); - -test('is.bigint', function (t) { - t.test('not bigints', function (st) { - var notBigints = [true, false, null, undefined, {}, [], function () {}, 42, NaN, Infinity, /a/g, '', 0, -0, new Error('error')]; - forEach(notBigints, function (notBigint) { - st.notOk(is.bigint(notBigint), notBigint + ' is not bigint'); - }); - - st.end(); - }); - - t.test('bigints', { skip: typeof BigInt !== 'function' }, function (st) { - var bigInts = [ - Function('return 42n')(), // eslint-disable-line no-new-func - BigInt(42) - ]; - forEach(bigInts, function (bigInt) { - st.ok(is.bigint(bigInt), bigInt + ' is bigint'); - }); - - st.end(); - }); - - t.end(); -}); diff --git a/reverse_engineering/node_modules/json-bigint/LICENSE b/reverse_engineering/node_modules/json-bigint/LICENSE deleted file mode 100644 index 9ab4d83..0000000 --- a/reverse_engineering/node_modules/json-bigint/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013 Andrey Sidorov - -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/reverse_engineering/node_modules/json-bigint/README.md b/reverse_engineering/node_modules/json-bigint/README.md deleted file mode 100644 index e7335c7..0000000 --- a/reverse_engineering/node_modules/json-bigint/README.md +++ /dev/null @@ -1,240 +0,0 @@ -# json-bigint - -[![Build Status](https://secure.travis-ci.org/sidorares/json-bigint.png)](http://travis-ci.org/sidorares/json-bigint) -[![NPM](https://nodei.co/npm/json-bigint.png?downloads=true&stars=true)](https://nodei.co/npm/json-bigint/) - -JSON.parse/stringify with bigints support. Based on Douglas Crockford [JSON.js](https://github.com/douglascrockford/JSON-js) package and [bignumber.js](https://github.com/MikeMcl/bignumber.js) library. - -Native `Bigint` was added to JS recently, so we added an option to leverage it instead of `bignumber.js`. However, the parsing with native `BigInt` is kept an option for backward compability. - -While most JSON parsers assume numeric values have same precision restrictions as IEEE 754 double, JSON specification _does not_ say anything about number precision. Any floating point number in decimal (optionally scientific) notation is valid JSON value. It's a good idea to serialize values which might fall out of IEEE 754 integer precision as strings in your JSON api, but `{ "value" : 9223372036854775807}`, for example, is still a valid RFC4627 JSON string, and in most JS runtimes the result of `JSON.parse` is this object: `{ value: 9223372036854776000 }` - -========== - -example: - -```js -var JSONbig = require('json-bigint'); - -var json = '{ "value" : 9223372036854775807, "v2": 123 }'; -console.log('Input:', json); -console.log(''); - -console.log('node.js built-in JSON:'); -var r = JSON.parse(json); -console.log('JSON.parse(input).value : ', r.value.toString()); -console.log('JSON.stringify(JSON.parse(input)):', JSON.stringify(r)); - -console.log('\n\nbig number JSON:'); -var r1 = JSONbig.parse(json); -console.log('JSONbig.parse(input).value : ', r1.value.toString()); -console.log('JSONbig.stringify(JSONbig.parse(input)):', JSONbig.stringify(r1)); -``` - -Output: - -``` -Input: { "value" : 9223372036854775807, "v2": 123 } - -node.js built-in JSON: -JSON.parse(input).value : 9223372036854776000 -JSON.stringify(JSON.parse(input)): {"value":9223372036854776000,"v2":123} - - -big number JSON: -JSONbig.parse(input).value : 9223372036854775807 -JSONbig.stringify(JSONbig.parse(input)): {"value":9223372036854775807,"v2":123} -``` - -### Options - -The behaviour of the parser is somewhat configurable through 'options' - -#### options.strict, boolean, default false - -Specifies the parsing should be "strict" towards reporting duplicate-keys in the parsed string. -The default follows what is allowed in standard json and resembles the behavior of JSON.parse, but overwrites any previous values with the last one assigned to the duplicate-key. - -Setting options.strict = true will fail-fast on such duplicate-key occurances and thus warn you upfront of possible lost information. - -example: - -```js -var JSONbig = require('json-bigint'); -var JSONstrict = require('json-bigint')({ strict: true }); - -var dupkeys = '{ "dupkey": "value 1", "dupkey": "value 2"}'; -console.log('\n\nDuplicate Key test with both lenient and strict JSON parsing'); -console.log('Input:', dupkeys); -var works = JSONbig.parse(dupkeys); -console.log('JSON.parse(dupkeys).dupkey: %s', works.dupkey); -var fails = 'will stay like this'; -try { - fails = JSONstrict.parse(dupkeys); - console.log('ERROR!! Should never get here'); -} catch (e) { - console.log( - 'Succesfully catched expected exception on duplicate keys: %j', - e - ); -} -``` - -Output - -``` -Duplicate Key test with big number JSON -Input: { "dupkey": "value 1", "dupkey": "value 2"} -JSON.parse(dupkeys).dupkey: value 2 -Succesfully catched expected exception on duplicate keys: {"name":"SyntaxError","message":"Duplicate key \"dupkey\"","at":33,"text":"{ \"dupkey\": \"value 1\", \"dupkey\": \"value 2\"}"} - -``` - -#### options.storeAsString, boolean, default false - -Specifies if BigInts should be stored in the object as a string, rather than the default BigNumber. - -Note that this is a dangerous behavior as it breaks the default functionality of being able to convert back-and-forth without data type changes (as this will convert all BigInts to be-and-stay strings). - -example: - -```js -var JSONbig = require('json-bigint'); -var JSONbigString = require('json-bigint')({ storeAsString: true }); -var key = '{ "key": 1234567890123456789 }'; -console.log('\n\nStoring the BigInt as a string, instead of a BigNumber'); -console.log('Input:', key); -var withInt = JSONbig.parse(key); -var withString = JSONbigString.parse(key); -console.log( - 'Default type: %s, With option type: %s', - typeof withInt.key, - typeof withString.key -); -``` - -Output - -``` -Storing the BigInt as a string, instead of a BigNumber -Input: { "key": 1234567890123456789 } -Default type: object, With option type: string - -``` - -#### options.useNativeBigInt, boolean, default false - -Specifies if parser uses native BigInt instead of bignumber.js - -example: - -```js -var JSONbig = require('json-bigint'); -var JSONbigNative = require('json-bigint')({ useNativeBigInt: true }); -var key = '{ "key": 993143214321423154315154321 }'; -console.log(`\n\nStoring the Number as native BigInt, instead of a BigNumber`); -console.log('Input:', key); -var normal = JSONbig.parse(key); -var nativeBigInt = JSONbigNative.parse(key); -console.log( - 'Default type: %s, With option type: %s', - typeof normal.key, - typeof nativeBigInt.key -); -``` - -Output - -``` -Storing the Number as native BigInt, instead of a BigNumber -Input: { "key": 993143214321423154315154321 } -Default type: object, With option type: bigint - -``` - -#### options.alwaysParseAsBig, boolean, default false - -Specifies if all numbers should be stored as BigNumber. - -Note that this is a dangerous behavior as it breaks the default functionality of being able to convert back-and-forth without data type changes (as this will convert all Number to be-and-stay BigNumber) - -example: - -```js -var JSONbig = require('json-bigint'); -var JSONbigAlways = require('json-bigint')({ alwaysParseAsBig: true }); -var key = '{ "key": 123 }'; // there is no need for BigNumber by default, but we're forcing it -console.log(`\n\nStoring the Number as a BigNumber, instead of a Number`); -console.log('Input:', key); -var normal = JSONbig.parse(key); -var always = JSONbigAlways.parse(key); -console.log( - 'Default type: %s, With option type: %s', - typeof normal.key, - typeof always.key -); -``` - -Output - -``` -Storing the Number as a BigNumber, instead of a Number -Input: { "key": 123 } -Default type: number, With option type: object - -``` - -If you want to force all numbers to be parsed as native `BigInt` -(you probably do! Otherwise any calulations become a real headache): - -```js -var JSONbig = require('json-bigint')({ - alwaysParseAsBig: true, - useNativeBigInt: true, -}); -``` - -#### options.protoAction, boolean, default: "error". Possible values: "error", "ignore", "preserve" - -#### options.constructorAction, boolean, default: "error". Possible values: "error", "ignore", "preserve" - -Controls how `__proto__` and `constructor` properties are treated. If set to "error" they are not allowed and -parse() call will throw an error. If set to "ignore" the prroperty and it;s value is skipped from parsing and object building. -If set to "preserve" the `__proto__` property is set. One should be extra careful and make sure any other library consuming generated data -is not vulnerable to prototype poisoning attacks. - -example: - -```js -var JSONbigAlways = require('json-bigint')({ protoAction: 'ignore' }); -const user = JSONbig.parse('{ "__proto__": { "admin": true }, "id": 12345 }'); -// => result is { id: 12345 } -``` - -### Links: - -- [RFC4627: The application/json Media Type for JavaScript Object Notation (JSON)](http://www.ietf.org/rfc/rfc4627.txt) -- [Re: \[Json\] Limitations on number size?](http://www.ietf.org/mail-archive/web/json/current/msg00297.html) -- [Is there any proper way to parse JSON with large numbers? (long, bigint, int64)](http://stackoverflow.com/questions/18755125/node-js-is-there-any-proper-way-to-parse-json-with-large-numbers-long-bigint) -- [What is JavaScript's Max Int? What's the highest Integer value a Number can go to without losing precision?](http://stackoverflow.com/questions/307179/what-is-javascripts-max-int-whats-the-highest-integer-value-a-number-can-go-t) -- [Large numbers erroneously rounded in Javascript](http://stackoverflow.com/questions/1379934/large-numbers-erroneously-rounded-in-javascript) - -### Note on native BigInt support - -#### Stringifying - -Full support out-of-the-box, stringifies BigInts as pure numbers (no quotes, no `n`) - -#### Limitations - -- Roundtrip operations - -`s === JSONbig.stringify(JSONbig.parse(s))` but - -`o !== JSONbig.parse(JSONbig.stringify(o))` - -when `o` has a value with something like `123n`. - -`JSONbig` stringify `123n` as `123`, which becomes `number` (aka `123` not `123n`) by default when being reparsed. - -There is currently no consistent way to deal with this issue, so we decided to leave it, handling this specific case is then up to users. diff --git a/reverse_engineering/node_modules/json-bigint/index.js b/reverse_engineering/node_modules/json-bigint/index.js deleted file mode 100644 index 4757600..0000000 --- a/reverse_engineering/node_modules/json-bigint/index.js +++ /dev/null @@ -1,12 +0,0 @@ -var json_stringify = require('./lib/stringify.js').stringify; -var json_parse = require('./lib/parse.js'); - -module.exports = function(options) { - return { - parse: json_parse(options), - stringify: json_stringify - } -}; -//create the default method members with no options applied for backwards compatibility -module.exports.parse = json_parse(); -module.exports.stringify = json_stringify; diff --git a/reverse_engineering/node_modules/json-bigint/lib/parse.js b/reverse_engineering/node_modules/json-bigint/lib/parse.js deleted file mode 100644 index bb4e5eb..0000000 --- a/reverse_engineering/node_modules/json-bigint/lib/parse.js +++ /dev/null @@ -1,443 +0,0 @@ -var BigNumber = null; - -// regexpxs extracted from -// (c) BSD-3-Clause -// https://github.com/fastify/secure-json-parse/graphs/contributors and https://github.com/hapijs/bourne/graphs/contributors - -const suspectProtoRx = /(?:_|\\u005[Ff])(?:_|\\u005[Ff])(?:p|\\u0070)(?:r|\\u0072)(?:o|\\u006[Ff])(?:t|\\u0074)(?:o|\\u006[Ff])(?:_|\\u005[Ff])(?:_|\\u005[Ff])/; -const suspectConstructorRx = /(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)/; - -/* - json_parse.js - 2012-06-20 - - Public Domain. - - NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. - - This file creates a json_parse function. - During create you can (optionally) specify some behavioural switches - - require('json-bigint')(options) - - The optional options parameter holds switches that drive certain - aspects of the parsing process: - * options.strict = true will warn about duplicate-key usage in the json. - The default (strict = false) will silently ignore those and overwrite - values for keys that are in duplicate use. - - The resulting function follows this signature: - json_parse(text, reviver) - This method parses a JSON text to produce an object or array. - It can throw a SyntaxError exception. - - The optional reviver parameter is a function that can filter and - transform the results. It receives each of the keys and values, - and its return value is used instead of the original value. - If it returns what it received, then the structure is not modified. - If it returns undefined then the member is deleted. - - Example: - - // Parse the text. Values that look like ISO date strings will - // be converted to Date objects. - - myData = json_parse(text, function (key, value) { - var a; - if (typeof value === 'string') { - a = -/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); - if (a) { - return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], - +a[5], +a[6])); - } - } - return value; - }); - - This is a reference implementation. You are free to copy, modify, or - redistribute. - - This code should be minified before deployment. - See http://javascript.crockford.com/jsmin.html - - USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO - NOT CONTROL. -*/ - -/*members "", "\"", "\/", "\\", at, b, call, charAt, f, fromCharCode, - hasOwnProperty, message, n, name, prototype, push, r, t, text -*/ - -var json_parse = function (options) { - 'use strict'; - - // This is a function that can parse a JSON text, producing a JavaScript - // data structure. It is a simple, recursive descent parser. It does not use - // eval or regular expressions, so it can be used as a model for implementing - // a JSON parser in other languages. - - // We are defining the function inside of another function to avoid creating - // global variables. - - // Default options one can override by passing options to the parse() - var _options = { - strict: false, // not being strict means do not generate syntax errors for "duplicate key" - storeAsString: false, // toggles whether the values should be stored as BigNumber (default) or a string - alwaysParseAsBig: false, // toggles whether all numbers should be Big - useNativeBigInt: false, // toggles whether to use native BigInt instead of bignumber.js - protoAction: 'error', - constructorAction: 'error', - }; - - // If there are options, then use them to override the default _options - if (options !== undefined && options !== null) { - if (options.strict === true) { - _options.strict = true; - } - if (options.storeAsString === true) { - _options.storeAsString = true; - } - _options.alwaysParseAsBig = - options.alwaysParseAsBig === true ? options.alwaysParseAsBig : false; - _options.useNativeBigInt = - options.useNativeBigInt === true ? options.useNativeBigInt : false; - - if (typeof options.constructorAction !== 'undefined') { - if ( - options.constructorAction === 'error' || - options.constructorAction === 'ignore' || - options.constructorAction === 'preserve' - ) { - _options.constructorAction = options.constructorAction; - } else { - throw new Error( - `Incorrect value for constructorAction option, must be "error", "ignore" or undefined but passed ${options.constructorAction}` - ); - } - } - - if (typeof options.protoAction !== 'undefined') { - if ( - options.protoAction === 'error' || - options.protoAction === 'ignore' || - options.protoAction === 'preserve' - ) { - _options.protoAction = options.protoAction; - } else { - throw new Error( - `Incorrect value for protoAction option, must be "error", "ignore" or undefined but passed ${options.protoAction}` - ); - } - } - } - - var at, // The index of the current character - ch, // The current character - escapee = { - '"': '"', - '\\': '\\', - '/': '/', - b: '\b', - f: '\f', - n: '\n', - r: '\r', - t: '\t', - }, - text, - error = function (m) { - // Call error when something is wrong. - - throw { - name: 'SyntaxError', - message: m, - at: at, - text: text, - }; - }, - next = function (c) { - // If a c parameter is provided, verify that it matches the current character. - - if (c && c !== ch) { - error("Expected '" + c + "' instead of '" + ch + "'"); - } - - // Get the next character. When there are no more characters, - // return the empty string. - - ch = text.charAt(at); - at += 1; - return ch; - }, - number = function () { - // Parse a number value. - - var number, - string = ''; - - if (ch === '-') { - string = '-'; - next('-'); - } - while (ch >= '0' && ch <= '9') { - string += ch; - next(); - } - if (ch === '.') { - string += '.'; - while (next() && ch >= '0' && ch <= '9') { - string += ch; - } - } - if (ch === 'e' || ch === 'E') { - string += ch; - next(); - if (ch === '-' || ch === '+') { - string += ch; - next(); - } - while (ch >= '0' && ch <= '9') { - string += ch; - next(); - } - } - number = +string; - if (!isFinite(number)) { - error('Bad number'); - } else { - if (BigNumber == null) BigNumber = require('bignumber.js'); - //if (number > 9007199254740992 || number < -9007199254740992) - // Bignumber has stricter check: everything with length > 15 digits disallowed - if (string.length > 15) - return _options.storeAsString - ? string - : _options.useNativeBigInt - ? BigInt(string) - : new BigNumber(string); - else - return !_options.alwaysParseAsBig - ? number - : _options.useNativeBigInt - ? BigInt(number) - : new BigNumber(number); - } - }, - string = function () { - // Parse a string value. - - var hex, - i, - string = '', - uffff; - - // When parsing for string values, we must look for " and \ characters. - - if (ch === '"') { - var startAt = at; - while (next()) { - if (ch === '"') { - if (at - 1 > startAt) string += text.substring(startAt, at - 1); - next(); - return string; - } - if (ch === '\\') { - if (at - 1 > startAt) string += text.substring(startAt, at - 1); - next(); - if (ch === 'u') { - uffff = 0; - for (i = 0; i < 4; i += 1) { - hex = parseInt(next(), 16); - if (!isFinite(hex)) { - break; - } - uffff = uffff * 16 + hex; - } - string += String.fromCharCode(uffff); - } else if (typeof escapee[ch] === 'string') { - string += escapee[ch]; - } else { - break; - } - startAt = at; - } - } - } - error('Bad string'); - }, - white = function () { - // Skip whitespace. - - while (ch && ch <= ' ') { - next(); - } - }, - word = function () { - // true, false, or null. - - switch (ch) { - case 't': - next('t'); - next('r'); - next('u'); - next('e'); - return true; - case 'f': - next('f'); - next('a'); - next('l'); - next('s'); - next('e'); - return false; - case 'n': - next('n'); - next('u'); - next('l'); - next('l'); - return null; - } - error("Unexpected '" + ch + "'"); - }, - value, // Place holder for the value function. - array = function () { - // Parse an array value. - - var array = []; - - if (ch === '[') { - next('['); - white(); - if (ch === ']') { - next(']'); - return array; // empty array - } - while (ch) { - array.push(value()); - white(); - if (ch === ']') { - next(']'); - return array; - } - next(','); - white(); - } - } - error('Bad array'); - }, - object = function () { - // Parse an object value. - - var key, - object = Object.create(null); - - if (ch === '{') { - next('{'); - white(); - if (ch === '}') { - next('}'); - return object; // empty object - } - while (ch) { - key = string(); - white(); - next(':'); - if ( - _options.strict === true && - Object.hasOwnProperty.call(object, key) - ) { - error('Duplicate key "' + key + '"'); - } - - if (suspectProtoRx.test(key) === true) { - if (_options.protoAction === 'error') { - error('Object contains forbidden prototype property'); - } else if (_options.protoAction === 'ignore') { - value(); - } else { - object[key] = value(); - } - } else if (suspectConstructorRx.test(key) === true) { - if (_options.constructorAction === 'error') { - error('Object contains forbidden constructor property'); - } else if (_options.constructorAction === 'ignore') { - value(); - } else { - object[key] = value(); - } - } else { - object[key] = value(); - } - - white(); - if (ch === '}') { - next('}'); - return object; - } - next(','); - white(); - } - } - error('Bad object'); - }; - - value = function () { - // Parse a JSON value. It could be an object, an array, a string, a number, - // or a word. - - white(); - switch (ch) { - case '{': - return object(); - case '[': - return array(); - case '"': - return string(); - case '-': - return number(); - default: - return ch >= '0' && ch <= '9' ? number() : word(); - } - }; - - // Return the json_parse function. It will have access to all of the above - // functions and variables. - - return function (source, reviver) { - var result; - - text = source + ''; - at = 0; - ch = ' '; - result = value(); - white(); - if (ch) { - error('Syntax error'); - } - - // If there is a reviver function, we recursively walk the new structure, - // passing each name/value pair to the reviver function for possible - // transformation, starting with a temporary root object that holds the result - // in an empty key. If there is not a reviver function, we simply return the - // result. - - return typeof reviver === 'function' - ? (function walk(holder, key) { - var k, - v, - value = holder[key]; - if (value && typeof value === 'object') { - Object.keys(value).forEach(function (k) { - v = walk(value, k); - if (v !== undefined) { - value[k] = v; - } else { - delete value[k]; - } - }); - } - return reviver.call(holder, key, value); - })({ '': result }, '') - : result; - }; -}; - -module.exports = json_parse; diff --git a/reverse_engineering/node_modules/json-bigint/lib/stringify.js b/reverse_engineering/node_modules/json-bigint/lib/stringify.js deleted file mode 100644 index 3bd5269..0000000 --- a/reverse_engineering/node_modules/json-bigint/lib/stringify.js +++ /dev/null @@ -1,384 +0,0 @@ -var BigNumber = require('bignumber.js'); - -/* - json2.js - 2013-05-26 - - Public Domain. - - NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. - - See http://www.JSON.org/js.html - - - This code should be minified before deployment. - See http://javascript.crockford.com/jsmin.html - - USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO - NOT CONTROL. - - - This file creates a global JSON object containing two methods: stringify - and parse. - - JSON.stringify(value, replacer, space) - value any JavaScript value, usually an object or array. - - replacer an optional parameter that determines how object - values are stringified for objects. It can be a - function or an array of strings. - - space an optional parameter that specifies the indentation - of nested structures. If it is omitted, the text will - be packed without extra whitespace. If it is a number, - it will specify the number of spaces to indent at each - level. If it is a string (such as '\t' or ' '), - it contains the characters used to indent at each level. - - This method produces a JSON text from a JavaScript value. - - When an object value is found, if the object contains a toJSON - method, its toJSON method will be called and the result will be - stringified. A toJSON method does not serialize: it returns the - value represented by the name/value pair that should be serialized, - or undefined if nothing should be serialized. The toJSON method - will be passed the key associated with the value, and this will be - bound to the value - - For example, this would serialize Dates as ISO strings. - - Date.prototype.toJSON = function (key) { - function f(n) { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - return this.getUTCFullYear() + '-' + - f(this.getUTCMonth() + 1) + '-' + - f(this.getUTCDate()) + 'T' + - f(this.getUTCHours()) + ':' + - f(this.getUTCMinutes()) + ':' + - f(this.getUTCSeconds()) + 'Z'; - }; - - You can provide an optional replacer method. It will be passed the - key and value of each member, with this bound to the containing - object. The value that is returned from your method will be - serialized. If your method returns undefined, then the member will - be excluded from the serialization. - - If the replacer parameter is an array of strings, then it will be - used to select the members to be serialized. It filters the results - such that only members with keys listed in the replacer array are - stringified. - - Values that do not have JSON representations, such as undefined or - functions, will not be serialized. Such values in objects will be - dropped; in arrays they will be replaced with null. You can use - a replacer function to replace those with JSON values. - JSON.stringify(undefined) returns undefined. - - The optional space parameter produces a stringification of the - value that is filled with line breaks and indentation to make it - easier to read. - - If the space parameter is a non-empty string, then that string will - be used for indentation. If the space parameter is a number, then - the indentation will be that many spaces. - - Example: - - text = JSON.stringify(['e', {pluribus: 'unum'}]); - // text is '["e",{"pluribus":"unum"}]' - - - text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t'); - // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' - - text = JSON.stringify([new Date()], function (key, value) { - return this[key] instanceof Date ? - 'Date(' + this[key] + ')' : value; - }); - // text is '["Date(---current time---)"]' - - - JSON.parse(text, reviver) - This method parses a JSON text to produce an object or array. - It can throw a SyntaxError exception. - - The optional reviver parameter is a function that can filter and - transform the results. It receives each of the keys and values, - and its return value is used instead of the original value. - If it returns what it received, then the structure is not modified. - If it returns undefined then the member is deleted. - - Example: - - // Parse the text. Values that look like ISO date strings will - // be converted to Date objects. - - myData = JSON.parse(text, function (key, value) { - var a; - if (typeof value === 'string') { - a = -/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); - if (a) { - return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], - +a[5], +a[6])); - } - } - return value; - }); - - myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) { - var d; - if (typeof value === 'string' && - value.slice(0, 5) === 'Date(' && - value.slice(-1) === ')') { - d = new Date(value.slice(5, -1)); - if (d) { - return d; - } - } - return value; - }); - - - This is a reference implementation. You are free to copy, modify, or - redistribute. -*/ - -/*jslint evil: true, regexp: true */ - -/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply, - call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, - getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, - lastIndex, length, parse, prototype, push, replace, slice, stringify, - test, toJSON, toString, valueOf -*/ - - -// Create a JSON object only if one does not already exist. We create the -// methods in a closure to avoid creating global variables. - -var JSON = module.exports; - -(function () { - 'use strict'; - - function f(n) { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - gap, - indent, - meta = { // table of character substitutions - '\b': '\\b', - '\t': '\\t', - '\n': '\\n', - '\f': '\\f', - '\r': '\\r', - '"' : '\\"', - '\\': '\\\\' - }, - rep; - - - function quote(string) { - -// If the string contains no control characters, no quote characters, and no -// backslash characters, then we can safely slap some quotes around it. -// Otherwise we must also replace the offending characters with safe escape -// sequences. - - escapable.lastIndex = 0; - return escapable.test(string) ? '"' + string.replace(escapable, function (a) { - var c = meta[a]; - return typeof c === 'string' - ? c - : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }) + '"' : '"' + string + '"'; - } - - - function str(key, holder) { - -// Produce a string from holder[key]. - - var i, // The loop counter. - k, // The member key. - v, // The member value. - length, - mind = gap, - partial, - value = holder[key], - isBigNumber = value != null && (value instanceof BigNumber || BigNumber.isBigNumber(value)); - -// If the value has a toJSON method, call it to obtain a replacement value. - - if (value && typeof value === 'object' && - typeof value.toJSON === 'function') { - value = value.toJSON(key); - } - -// If we were called with a replacer function, then call the replacer to -// obtain a replacement value. - - if (typeof rep === 'function') { - value = rep.call(holder, key, value); - } - -// What happens next depends on the value's type. - - switch (typeof value) { - case 'string': - if (isBigNumber) { - return value; - } else { - return quote(value); - } - - case 'number': - -// JSON numbers must be finite. Encode non-finite numbers as null. - - return isFinite(value) ? String(value) : 'null'; - - case 'boolean': - case 'null': - case 'bigint': - -// If the value is a boolean or null, convert it to a string. Note: -// typeof null does not produce 'null'. The case is included here in -// the remote chance that this gets fixed someday. - - return String(value); - -// If the type is 'object', we might be dealing with an object or an array or -// null. - - case 'object': - -// Due to a specification blunder in ECMAScript, typeof null is 'object', -// so watch out for that case. - - if (!value) { - return 'null'; - } - -// Make an array to hold the partial results of stringifying this object value. - - gap += indent; - partial = []; - -// Is the value an array? - - if (Object.prototype.toString.apply(value) === '[object Array]') { - -// The value is an array. Stringify every element. Use null as a placeholder -// for non-JSON values. - - length = value.length; - for (i = 0; i < length; i += 1) { - partial[i] = str(i, value) || 'null'; - } - -// Join all of the elements together, separated with commas, and wrap them in -// brackets. - - v = partial.length === 0 - ? '[]' - : gap - ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' - : '[' + partial.join(',') + ']'; - gap = mind; - return v; - } - -// If the replacer is an array, use it to select the members to be stringified. - - if (rep && typeof rep === 'object') { - length = rep.length; - for (i = 0; i < length; i += 1) { - if (typeof rep[i] === 'string') { - k = rep[i]; - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } else { - -// Otherwise, iterate through all of the keys in the object. - - Object.keys(value).forEach(function(k) { - var v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - }); - } - -// Join all of the member texts together, separated with commas, -// and wrap them in braces. - - v = partial.length === 0 - ? '{}' - : gap - ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' - : '{' + partial.join(',') + '}'; - gap = mind; - return v; - } - } - -// If the JSON object does not yet have a stringify method, give it one. - - if (typeof JSON.stringify !== 'function') { - JSON.stringify = function (value, replacer, space) { - -// The stringify method takes a value and an optional replacer, and an optional -// space parameter, and returns a JSON text. The replacer can be a function -// that can replace values, or an array of strings that will select the keys. -// A default replacer method can be provided. Use of the space parameter can -// produce text that is more easily readable. - - var i; - gap = ''; - indent = ''; - -// If the space parameter is a number, make an indent string containing that -// many spaces. - - if (typeof space === 'number') { - for (i = 0; i < space; i += 1) { - indent += ' '; - } - -// If the space parameter is a string, it will be used as the indent string. - - } else if (typeof space === 'string') { - indent = space; - } - -// If there is a replacer, it must be a function or an array. -// Otherwise, throw an error. - - rep = replacer; - if (replacer && typeof replacer !== 'function' && - (typeof replacer !== 'object' || - typeof replacer.length !== 'number')) { - throw new Error('JSON.stringify'); - } - -// Make a fake root object containing our value under the key of ''. -// Return the result of stringifying the value. - - return str('', {'': value}); - }; - } -}()); diff --git a/reverse_engineering/node_modules/json-bigint/package.json b/reverse_engineering/node_modules/json-bigint/package.json deleted file mode 100644 index e313518..0000000 --- a/reverse_engineering/node_modules/json-bigint/package.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "_from": "json-bigint@^1.0.0", - "_id": "json-bigint@1.0.0", - "_inBundle": false, - "_integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "_location": "/json-bigint", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "json-bigint@^1.0.0", - "name": "json-bigint", - "escapedName": "json-bigint", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/gcp-metadata" - ], - "_resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "_shasum": "ae547823ac0cad8398667f8cd9ef4730f5b01ff1", - "_spec": "json-bigint@^1.0.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/gcp-metadata", - "author": { - "name": "Andrey Sidorov", - "email": "sidorares@yandex.ru" - }, - "bugs": { - "url": "https://github.com/sidorares/json-bigint/issues" - }, - "bundleDependencies": false, - "dependencies": { - "bignumber.js": "^9.0.0" - }, - "deprecated": false, - "description": "JSON.parse with bigints support", - "devDependencies": { - "chai": "4.2.0", - "mocha": "8.0.1" - }, - "files": [ - "index.js", - "lib/parse.js", - "lib/stringify.js" - ], - "homepage": "https://github.com/sidorares/json-bigint#readme", - "keywords": [ - "JSON", - "bigint", - "bignumber", - "parse", - "json" - ], - "license": "MIT", - "main": "index.js", - "name": "json-bigint", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/sidorares/json-bigint.git" - }, - "scripts": { - "test": "./node_modules/mocha/bin/mocha -R spec --check-leaks test/*-test.js" - }, - "version": "1.0.0" -} diff --git a/reverse_engineering/node_modules/jwa/LICENSE b/reverse_engineering/node_modules/jwa/LICENSE deleted file mode 100644 index caeb849..0000000 --- a/reverse_engineering/node_modules/jwa/LICENSE +++ /dev/null @@ -1,17 +0,0 @@ -Copyright (c) 2013 Brian J. Brennan - -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/reverse_engineering/node_modules/jwa/README.md b/reverse_engineering/node_modules/jwa/README.md deleted file mode 100644 index 09e9648..0000000 --- a/reverse_engineering/node_modules/jwa/README.md +++ /dev/null @@ -1,150 +0,0 @@ -# node-jwa [![Build Status](https://travis-ci.org/brianloveswords/node-jwa.svg?branch=master)](https://travis-ci.org/brianloveswords/node-jwa) - -A -[JSON Web Algorithms](http://tools.ietf.org/id/draft-ietf-jose-json-web-algorithms-08.html) -implementation focusing (exclusively, at this point) on the algorithms necessary for -[JSON Web Signatures](http://self-issued.info/docs/draft-ietf-jose-json-web-signature.html). - -This library supports all of the required, recommended and optional cryptographic algorithms for JWS: - -alg Parameter Value | Digital Signature or MAC Algorithm -----------------|---------------------------- -HS256 | HMAC using SHA-256 hash algorithm -HS384 | HMAC using SHA-384 hash algorithm -HS512 | HMAC using SHA-512 hash algorithm -RS256 | RSASSA using SHA-256 hash algorithm -RS384 | RSASSA using SHA-384 hash algorithm -RS512 | RSASSA using SHA-512 hash algorithm -PS256 | RSASSA-PSS using SHA-256 hash algorithm -PS384 | RSASSA-PSS using SHA-384 hash algorithm -PS512 | RSASSA-PSS using SHA-512 hash algorithm -ES256 | ECDSA using P-256 curve and SHA-256 hash algorithm -ES384 | ECDSA using P-384 curve and SHA-384 hash algorithm -ES512 | ECDSA using P-521 curve and SHA-512 hash algorithm -none | No digital signature or MAC value included - -Please note that PS* only works on Node 6.12+ (excluding 7.x). - -# Requirements - -In order to run the tests, a recent version of OpenSSL is -required. **The version that comes with OS X (OpenSSL 0.9.8r 8 Feb -2011) is not recent enough**, as it does not fully support ECDSA -keys. You'll need to use a version > 1.0.0; I tested with OpenSSL 1.0.1c 10 May 2012. - -# Testing - -To run the tests, do - -```bash -$ npm test -``` - -This will generate a bunch of keypairs to use in testing. If you want to -generate new keypairs, do `make clean` before running `npm test` again. - -## Methodology - -I spawn `openssl dgst -sign` to test OpenSSL sign → JS verify and -`openssl dgst -verify` to test JS sign → OpenSSL verify for each of the -RSA and ECDSA algorithms. - -# Usage - -## jwa(algorithm) - -Creates a new `jwa` object with `sign` and `verify` methods for the -algorithm. Valid values for algorithm can be found in the table above -(`'HS256'`, `'HS384'`, etc) and are case-sensitive. Passing an invalid -algorithm value will throw a `TypeError`. - - -## jwa#sign(input, secretOrPrivateKey) - -Sign some input with either a secret for HMAC algorithms, or a private -key for RSA and ECDSA algorithms. - -If input is not already a string or buffer, `JSON.stringify` will be -called on it to attempt to coerce it. - -For the HMAC algorithm, `secretOrPrivateKey` should be a string or a -buffer. For ECDSA and RSA, the value should be a string representing a -PEM encoded **private** key. - -Output [base64url](http://en.wikipedia.org/wiki/Base64#URL_applications) -formatted. This is for convenience as JWS expects the signature in this -format. If your application needs the output in a different format, -[please open an issue](https://github.com/brianloveswords/node-jwa/issues). In -the meantime, you can use -[brianloveswords/base64url](https://github.com/brianloveswords/base64url) -to decode the signature. - -As of nodejs *v0.11.8*, SPKAC support was introduce. If your nodeJs -version satisfies, then you can pass an object `{ key: '..', passphrase: '...' }` - - -## jwa#verify(input, signature, secretOrPublicKey) - -Verify a signature. Returns `true` or `false`. - -`signature` should be a base64url encoded string. - -For the HMAC algorithm, `secretOrPublicKey` should be a string or a -buffer. For ECDSA and RSA, the value should be a string represented a -PEM encoded **public** key. - - -# Example - -HMAC -```js -const jwa = require('jwa'); - -const hmac = jwa('HS256'); -const input = 'super important stuff'; -const secret = 'shhhhhh'; - -const signature = hmac.sign(input, secret); -hmac.verify(input, signature, secret) // === true -hmac.verify(input, signature, 'trickery!') // === false -``` - -With keys -```js -const fs = require('fs'); -const jwa = require('jwa'); -const privateKey = fs.readFileSync(__dirname + '/ecdsa-p521-private.pem'); -const publicKey = fs.readFileSync(__dirname + '/ecdsa-p521-public.pem'); - -const ecdsa = jwa('ES512'); -const input = 'very important stuff'; - -const signature = ecdsa.sign(input, privateKey); -ecdsa.verify(input, signature, publicKey) // === true -``` -## License - -MIT - -``` -Copyright (c) 2013 Brian J. Brennan - -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/reverse_engineering/node_modules/jwa/index.js b/reverse_engineering/node_modules/jwa/index.js deleted file mode 100644 index d2061ef..0000000 --- a/reverse_engineering/node_modules/jwa/index.js +++ /dev/null @@ -1,252 +0,0 @@ -var bufferEqual = require('buffer-equal-constant-time'); -var Buffer = require('safe-buffer').Buffer; -var crypto = require('crypto'); -var formatEcdsa = require('ecdsa-sig-formatter'); -var util = require('util'); - -var MSG_INVALID_ALGORITHM = '"%s" is not a valid algorithm.\n Supported algorithms are:\n "HS256", "HS384", "HS512", "RS256", "RS384", "RS512", "PS256", "PS384", "PS512", "ES256", "ES384", "ES512" and "none".' -var MSG_INVALID_SECRET = 'secret must be a string or buffer'; -var MSG_INVALID_VERIFIER_KEY = 'key must be a string or a buffer'; -var MSG_INVALID_SIGNER_KEY = 'key must be a string, a buffer or an object'; - -var supportsKeyObjects = typeof crypto.createPublicKey === 'function'; -if (supportsKeyObjects) { - MSG_INVALID_VERIFIER_KEY += ' or a KeyObject'; - MSG_INVALID_SECRET += 'or a KeyObject'; -} - -function checkIsPublicKey(key) { - if (Buffer.isBuffer(key)) { - return; - } - - if (typeof key === 'string') { - return; - } - - if (!supportsKeyObjects) { - throw typeError(MSG_INVALID_VERIFIER_KEY); - } - - if (typeof key !== 'object') { - throw typeError(MSG_INVALID_VERIFIER_KEY); - } - - if (typeof key.type !== 'string') { - throw typeError(MSG_INVALID_VERIFIER_KEY); - } - - if (typeof key.asymmetricKeyType !== 'string') { - throw typeError(MSG_INVALID_VERIFIER_KEY); - } - - if (typeof key.export !== 'function') { - throw typeError(MSG_INVALID_VERIFIER_KEY); - } -}; - -function checkIsPrivateKey(key) { - if (Buffer.isBuffer(key)) { - return; - } - - if (typeof key === 'string') { - return; - } - - if (typeof key === 'object') { - return; - } - - throw typeError(MSG_INVALID_SIGNER_KEY); -}; - -function checkIsSecretKey(key) { - if (Buffer.isBuffer(key)) { - return; - } - - if (typeof key === 'string') { - return key; - } - - if (!supportsKeyObjects) { - throw typeError(MSG_INVALID_SECRET); - } - - if (typeof key !== 'object') { - throw typeError(MSG_INVALID_SECRET); - } - - if (key.type !== 'secret') { - throw typeError(MSG_INVALID_SECRET); - } - - if (typeof key.export !== 'function') { - throw typeError(MSG_INVALID_SECRET); - } -} - -function fromBase64(base64) { - return base64 - .replace(/=/g, '') - .replace(/\+/g, '-') - .replace(/\//g, '_'); -} - -function toBase64(base64url) { - base64url = base64url.toString(); - - var padding = 4 - base64url.length % 4; - if (padding !== 4) { - for (var i = 0; i < padding; ++i) { - base64url += '='; - } - } - - return base64url - .replace(/\-/g, '+') - .replace(/_/g, '/'); -} - -function typeError(template) { - var args = [].slice.call(arguments, 1); - var errMsg = util.format.bind(util, template).apply(null, args); - return new TypeError(errMsg); -} - -function bufferOrString(obj) { - return Buffer.isBuffer(obj) || typeof obj === 'string'; -} - -function normalizeInput(thing) { - if (!bufferOrString(thing)) - thing = JSON.stringify(thing); - return thing; -} - -function createHmacSigner(bits) { - return function sign(thing, secret) { - checkIsSecretKey(secret); - thing = normalizeInput(thing); - var hmac = crypto.createHmac('sha' + bits, secret); - var sig = (hmac.update(thing), hmac.digest('base64')) - return fromBase64(sig); - } -} - -function createHmacVerifier(bits) { - return function verify(thing, signature, secret) { - var computedSig = createHmacSigner(bits)(thing, secret); - return bufferEqual(Buffer.from(signature), Buffer.from(computedSig)); - } -} - -function createKeySigner(bits) { - return function sign(thing, privateKey) { - checkIsPrivateKey(privateKey); - thing = normalizeInput(thing); - // Even though we are specifying "RSA" here, this works with ECDSA - // keys as well. - var signer = crypto.createSign('RSA-SHA' + bits); - var sig = (signer.update(thing), signer.sign(privateKey, 'base64')); - return fromBase64(sig); - } -} - -function createKeyVerifier(bits) { - return function verify(thing, signature, publicKey) { - checkIsPublicKey(publicKey); - thing = normalizeInput(thing); - signature = toBase64(signature); - var verifier = crypto.createVerify('RSA-SHA' + bits); - verifier.update(thing); - return verifier.verify(publicKey, signature, 'base64'); - } -} - -function createPSSKeySigner(bits) { - return function sign(thing, privateKey) { - checkIsPrivateKey(privateKey); - thing = normalizeInput(thing); - var signer = crypto.createSign('RSA-SHA' + bits); - var sig = (signer.update(thing), signer.sign({ - key: privateKey, - padding: crypto.constants.RSA_PKCS1_PSS_PADDING, - saltLength: crypto.constants.RSA_PSS_SALTLEN_DIGEST - }, 'base64')); - return fromBase64(sig); - } -} - -function createPSSKeyVerifier(bits) { - return function verify(thing, signature, publicKey) { - checkIsPublicKey(publicKey); - thing = normalizeInput(thing); - signature = toBase64(signature); - var verifier = crypto.createVerify('RSA-SHA' + bits); - verifier.update(thing); - return verifier.verify({ - key: publicKey, - padding: crypto.constants.RSA_PKCS1_PSS_PADDING, - saltLength: crypto.constants.RSA_PSS_SALTLEN_DIGEST - }, signature, 'base64'); - } -} - -function createECDSASigner(bits) { - var inner = createKeySigner(bits); - return function sign() { - var signature = inner.apply(null, arguments); - signature = formatEcdsa.derToJose(signature, 'ES' + bits); - return signature; - }; -} - -function createECDSAVerifer(bits) { - var inner = createKeyVerifier(bits); - return function verify(thing, signature, publicKey) { - signature = formatEcdsa.joseToDer(signature, 'ES' + bits).toString('base64'); - var result = inner(thing, signature, publicKey); - return result; - }; -} - -function createNoneSigner() { - return function sign() { - return ''; - } -} - -function createNoneVerifier() { - return function verify(thing, signature) { - return signature === ''; - } -} - -module.exports = function jwa(algorithm) { - var signerFactories = { - hs: createHmacSigner, - rs: createKeySigner, - ps: createPSSKeySigner, - es: createECDSASigner, - none: createNoneSigner, - } - var verifierFactories = { - hs: createHmacVerifier, - rs: createKeyVerifier, - ps: createPSSKeyVerifier, - es: createECDSAVerifer, - none: createNoneVerifier, - } - var match = algorithm.match(/^(RS|PS|ES|HS)(256|384|512)$|^(none)$/); - if (!match) - throw typeError(MSG_INVALID_ALGORITHM, algorithm); - var algo = (match[1] || match[3]).toLowerCase(); - var bits = match[2]; - - return { - sign: signerFactories[algo](bits), - verify: verifierFactories[algo](bits), - } -}; diff --git a/reverse_engineering/node_modules/jwa/package.json b/reverse_engineering/node_modules/jwa/package.json deleted file mode 100644 index e29e7d7..0000000 --- a/reverse_engineering/node_modules/jwa/package.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "_from": "jwa@^2.0.0", - "_id": "jwa@2.0.0", - "_inBundle": false, - "_integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "_location": "/jwa", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "jwa@^2.0.0", - "name": "jwa", - "escapedName": "jwa", - "rawSpec": "^2.0.0", - "saveSpec": null, - "fetchSpec": "^2.0.0" - }, - "_requiredBy": [ - "/jws" - ], - "_resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "_shasum": "a7e9c3f29dae94027ebcaf49975c9345593410fc", - "_spec": "jwa@^2.0.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/jws", - "author": { - "name": "Brian J. Brennan", - "email": "brianloveswords@gmail.com" - }, - "bugs": { - "url": "https://github.com/brianloveswords/node-jwa/issues" - }, - "bundleDependencies": false, - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - }, - "deprecated": false, - "description": "JWA implementation (supports all JWS algorithms)", - "devDependencies": { - "base64url": "^2.0.0", - "jwk-to-pem": "^2.0.1", - "semver": "4.3.6", - "tap": "6.2.0" - }, - "directories": { - "test": "test" - }, - "homepage": "https://github.com/brianloveswords/node-jwa#readme", - "keywords": [ - "jwa", - "jws", - "jwt", - "rsa", - "ecdsa", - "hmac" - ], - "license": "MIT", - "main": "index.js", - "name": "jwa", - "repository": { - "type": "git", - "url": "git://github.com/brianloveswords/node-jwa.git" - }, - "scripts": { - "test": "make test" - }, - "version": "2.0.0" -} diff --git a/reverse_engineering/node_modules/jws/CHANGELOG.md b/reverse_engineering/node_modules/jws/CHANGELOG.md deleted file mode 100644 index af8fc28..0000000 --- a/reverse_engineering/node_modules/jws/CHANGELOG.md +++ /dev/null @@ -1,34 +0,0 @@ -# Change Log -All notable changes to this project will be documented in this file. - -## [3.0.0] -### Changed -- **BREAKING**: `jwt.verify` now requires an `algorithm` parameter, and - `jws.createVerify` requires an `algorithm` option. The `"alg"` field - signature headers is ignored. This mitigates a critical security flaw - in the library which would allow an attacker to generate signatures with - arbitrary contents that would be accepted by `jwt.verify`. See - https://auth0.com/blog/2015/03/31/critical-vulnerabilities-in-json-web-token-libraries/ - for details. - -## [2.0.0] - 2015-01-30 -### Changed -- **BREAKING**: Default payload encoding changed from `binary` to - `utf8`. `utf8` is a is a more sensible default than `binary` because - many payloads, as far as I can tell, will contain user-facing - strings that could be in any language. ([6b6de48]) - -- Code reorganization, thanks [@fearphage]! ([7880050]) - -### Added -- Option in all relevant methods for `encoding`. For those few users - that might be depending on a `binary` encoding of the messages, this - is for them. ([6b6de48]) - -[unreleased]: https://github.com/brianloveswords/node-jws/compare/v2.0.0...HEAD -[2.0.0]: https://github.com/brianloveswords/node-jws/compare/v1.0.1...v2.0.0 - -[7880050]: https://github.com/brianloveswords/node-jws/commit/7880050 -[6b6de48]: https://github.com/brianloveswords/node-jws/commit/6b6de48 - -[@fearphage]: https://github.com/fearphage diff --git a/reverse_engineering/node_modules/jws/LICENSE b/reverse_engineering/node_modules/jws/LICENSE deleted file mode 100644 index caeb849..0000000 --- a/reverse_engineering/node_modules/jws/LICENSE +++ /dev/null @@ -1,17 +0,0 @@ -Copyright (c) 2013 Brian J. Brennan - -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/reverse_engineering/node_modules/jws/index.js b/reverse_engineering/node_modules/jws/index.js deleted file mode 100644 index 8c8da93..0000000 --- a/reverse_engineering/node_modules/jws/index.js +++ /dev/null @@ -1,22 +0,0 @@ -/*global exports*/ -var SignStream = require('./lib/sign-stream'); -var VerifyStream = require('./lib/verify-stream'); - -var ALGORITHMS = [ - 'HS256', 'HS384', 'HS512', - 'RS256', 'RS384', 'RS512', - 'PS256', 'PS384', 'PS512', - 'ES256', 'ES384', 'ES512' -]; - -exports.ALGORITHMS = ALGORITHMS; -exports.sign = SignStream.sign; -exports.verify = VerifyStream.verify; -exports.decode = VerifyStream.decode; -exports.isValid = VerifyStream.isValid; -exports.createSign = function createSign(opts) { - return new SignStream(opts); -}; -exports.createVerify = function createVerify(opts) { - return new VerifyStream(opts); -}; diff --git a/reverse_engineering/node_modules/jws/lib/data-stream.js b/reverse_engineering/node_modules/jws/lib/data-stream.js deleted file mode 100644 index 3535d31..0000000 --- a/reverse_engineering/node_modules/jws/lib/data-stream.js +++ /dev/null @@ -1,55 +0,0 @@ -/*global module, process*/ -var Buffer = require('safe-buffer').Buffer; -var Stream = require('stream'); -var util = require('util'); - -function DataStream(data) { - this.buffer = null; - this.writable = true; - this.readable = true; - - // No input - if (!data) { - this.buffer = Buffer.alloc(0); - return this; - } - - // Stream - if (typeof data.pipe === 'function') { - this.buffer = Buffer.alloc(0); - data.pipe(this); - return this; - } - - // Buffer or String - // or Object (assumedly a passworded key) - if (data.length || typeof data === 'object') { - this.buffer = data; - this.writable = false; - process.nextTick(function () { - this.emit('end', data); - this.readable = false; - this.emit('close'); - }.bind(this)); - return this; - } - - throw new TypeError('Unexpected data type ('+ typeof data + ')'); -} -util.inherits(DataStream, Stream); - -DataStream.prototype.write = function write(data) { - this.buffer = Buffer.concat([this.buffer, Buffer.from(data)]); - this.emit('data', data); -}; - -DataStream.prototype.end = function end(data) { - if (data) - this.write(data); - this.emit('end', data); - this.emit('close'); - this.writable = false; - this.readable = false; -}; - -module.exports = DataStream; diff --git a/reverse_engineering/node_modules/jws/lib/sign-stream.js b/reverse_engineering/node_modules/jws/lib/sign-stream.js deleted file mode 100644 index 6a7ee42..0000000 --- a/reverse_engineering/node_modules/jws/lib/sign-stream.js +++ /dev/null @@ -1,78 +0,0 @@ -/*global module*/ -var Buffer = require('safe-buffer').Buffer; -var DataStream = require('./data-stream'); -var jwa = require('jwa'); -var Stream = require('stream'); -var toString = require('./tostring'); -var util = require('util'); - -function base64url(string, encoding) { - return Buffer - .from(string, encoding) - .toString('base64') - .replace(/=/g, '') - .replace(/\+/g, '-') - .replace(/\//g, '_'); -} - -function jwsSecuredInput(header, payload, encoding) { - encoding = encoding || 'utf8'; - var encodedHeader = base64url(toString(header), 'binary'); - var encodedPayload = base64url(toString(payload), encoding); - return util.format('%s.%s', encodedHeader, encodedPayload); -} - -function jwsSign(opts) { - var header = opts.header; - var payload = opts.payload; - var secretOrKey = opts.secret || opts.privateKey; - var encoding = opts.encoding; - var algo = jwa(header.alg); - var securedInput = jwsSecuredInput(header, payload, encoding); - var signature = algo.sign(securedInput, secretOrKey); - return util.format('%s.%s', securedInput, signature); -} - -function SignStream(opts) { - var secret = opts.secret||opts.privateKey||opts.key; - var secretStream = new DataStream(secret); - this.readable = true; - this.header = opts.header; - this.encoding = opts.encoding; - this.secret = this.privateKey = this.key = secretStream; - this.payload = new DataStream(opts.payload); - this.secret.once('close', function () { - if (!this.payload.writable && this.readable) - this.sign(); - }.bind(this)); - - this.payload.once('close', function () { - if (!this.secret.writable && this.readable) - this.sign(); - }.bind(this)); -} -util.inherits(SignStream, Stream); - -SignStream.prototype.sign = function sign() { - try { - var signature = jwsSign({ - header: this.header, - payload: this.payload.buffer, - secret: this.secret.buffer, - encoding: this.encoding - }); - this.emit('done', signature); - this.emit('data', signature); - this.emit('end'); - this.readable = false; - return signature; - } catch (e) { - this.readable = false; - this.emit('error', e); - this.emit('close'); - } -}; - -SignStream.sign = jwsSign; - -module.exports = SignStream; diff --git a/reverse_engineering/node_modules/jws/lib/tostring.js b/reverse_engineering/node_modules/jws/lib/tostring.js deleted file mode 100644 index f5a49a3..0000000 --- a/reverse_engineering/node_modules/jws/lib/tostring.js +++ /dev/null @@ -1,10 +0,0 @@ -/*global module*/ -var Buffer = require('buffer').Buffer; - -module.exports = function toString(obj) { - if (typeof obj === 'string') - return obj; - if (typeof obj === 'number' || Buffer.isBuffer(obj)) - return obj.toString(); - return JSON.stringify(obj); -}; diff --git a/reverse_engineering/node_modules/jws/lib/verify-stream.js b/reverse_engineering/node_modules/jws/lib/verify-stream.js deleted file mode 100644 index 39f7c73..0000000 --- a/reverse_engineering/node_modules/jws/lib/verify-stream.js +++ /dev/null @@ -1,120 +0,0 @@ -/*global module*/ -var Buffer = require('safe-buffer').Buffer; -var DataStream = require('./data-stream'); -var jwa = require('jwa'); -var Stream = require('stream'); -var toString = require('./tostring'); -var util = require('util'); -var JWS_REGEX = /^[a-zA-Z0-9\-_]+?\.[a-zA-Z0-9\-_]+?\.([a-zA-Z0-9\-_]+)?$/; - -function isObject(thing) { - return Object.prototype.toString.call(thing) === '[object Object]'; -} - -function safeJsonParse(thing) { - if (isObject(thing)) - return thing; - try { return JSON.parse(thing); } - catch (e) { return undefined; } -} - -function headerFromJWS(jwsSig) { - var encodedHeader = jwsSig.split('.', 1)[0]; - return safeJsonParse(Buffer.from(encodedHeader, 'base64').toString('binary')); -} - -function securedInputFromJWS(jwsSig) { - return jwsSig.split('.', 2).join('.'); -} - -function signatureFromJWS(jwsSig) { - return jwsSig.split('.')[2]; -} - -function payloadFromJWS(jwsSig, encoding) { - encoding = encoding || 'utf8'; - var payload = jwsSig.split('.')[1]; - return Buffer.from(payload, 'base64').toString(encoding); -} - -function isValidJws(string) { - return JWS_REGEX.test(string) && !!headerFromJWS(string); -} - -function jwsVerify(jwsSig, algorithm, secretOrKey) { - if (!algorithm) { - var err = new Error("Missing algorithm parameter for jws.verify"); - err.code = "MISSING_ALGORITHM"; - throw err; - } - jwsSig = toString(jwsSig); - var signature = signatureFromJWS(jwsSig); - var securedInput = securedInputFromJWS(jwsSig); - var algo = jwa(algorithm); - return algo.verify(securedInput, signature, secretOrKey); -} - -function jwsDecode(jwsSig, opts) { - opts = opts || {}; - jwsSig = toString(jwsSig); - - if (!isValidJws(jwsSig)) - return null; - - var header = headerFromJWS(jwsSig); - - if (!header) - return null; - - var payload = payloadFromJWS(jwsSig); - if (header.typ === 'JWT' || opts.json) - payload = JSON.parse(payload, opts.encoding); - - return { - header: header, - payload: payload, - signature: signatureFromJWS(jwsSig) - }; -} - -function VerifyStream(opts) { - opts = opts || {}; - var secretOrKey = opts.secret||opts.publicKey||opts.key; - var secretStream = new DataStream(secretOrKey); - this.readable = true; - this.algorithm = opts.algorithm; - this.encoding = opts.encoding; - this.secret = this.publicKey = this.key = secretStream; - this.signature = new DataStream(opts.signature); - this.secret.once('close', function () { - if (!this.signature.writable && this.readable) - this.verify(); - }.bind(this)); - - this.signature.once('close', function () { - if (!this.secret.writable && this.readable) - this.verify(); - }.bind(this)); -} -util.inherits(VerifyStream, Stream); -VerifyStream.prototype.verify = function verify() { - try { - var valid = jwsVerify(this.signature.buffer, this.algorithm, this.key.buffer); - var obj = jwsDecode(this.signature.buffer, this.encoding); - this.emit('done', valid, obj); - this.emit('data', valid); - this.emit('end'); - this.readable = false; - return valid; - } catch (e) { - this.readable = false; - this.emit('error', e); - this.emit('close'); - } -}; - -VerifyStream.decode = jwsDecode; -VerifyStream.isValid = isValidJws; -VerifyStream.verify = jwsVerify; - -module.exports = VerifyStream; diff --git a/reverse_engineering/node_modules/jws/package.json b/reverse_engineering/node_modules/jws/package.json deleted file mode 100644 index ebc3849..0000000 --- a/reverse_engineering/node_modules/jws/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "_from": "jws@^4.0.0", - "_id": "jws@4.0.0", - "_inBundle": false, - "_integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "_location": "/jws", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "jws@^4.0.0", - "name": "jws", - "escapedName": "jws", - "rawSpec": "^4.0.0", - "saveSpec": null, - "fetchSpec": "^4.0.0" - }, - "_requiredBy": [ - "/google-auth-library", - "/gtoken" - ], - "_resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "_shasum": "2d4e8cf6a318ffaa12615e9dec7e86e6c97310f4", - "_spec": "jws@^4.0.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/google-auth-library", - "author": { - "name": "Brian J Brennan" - }, - "bugs": { - "url": "https://github.com/brianloveswords/node-jws/issues" - }, - "bundleDependencies": false, - "dependencies": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" - }, - "deprecated": false, - "description": "Implementation of JSON Web Signatures", - "devDependencies": { - "semver": "^5.1.0", - "tape": "~2.14.0" - }, - "directories": { - "test": "test" - }, - "gitHead": "c0f6b27bcea5a2ad2e304d91c2e842e4076a6b03", - "homepage": "https://github.com/brianloveswords/node-jws#readme", - "keywords": [ - "jws", - "json", - "web", - "signatures" - ], - "license": "MIT", - "main": "index.js", - "name": "jws", - "repository": { - "type": "git", - "url": "git://github.com/brianloveswords/node-jws.git" - }, - "scripts": { - "test": "make test" - }, - "version": "4.0.0" -} diff --git a/reverse_engineering/node_modules/jws/readme.md b/reverse_engineering/node_modules/jws/readme.md deleted file mode 100644 index 2f32dca..0000000 --- a/reverse_engineering/node_modules/jws/readme.md +++ /dev/null @@ -1,255 +0,0 @@ -# node-jws [![Build Status](https://secure.travis-ci.org/brianloveswords/node-jws.svg)](http://travis-ci.org/brianloveswords/node-jws) - -An implementation of [JSON Web Signatures](http://self-issued.info/docs/draft-ietf-jose-json-web-signature.html). - -This was developed against `draft-ietf-jose-json-web-signature-08` and -implements the entire spec **except** X.509 Certificate Chain -signing/verifying (patches welcome). - -There are both synchronous (`jws.sign`, `jws.verify`) and streaming -(`jws.createSign`, `jws.createVerify`) APIs. - -# Install - -```bash -$ npm install jws -``` - -# Usage - -## jws.ALGORITHMS - -Array of supported algorithms. The following algorithms are currently supported. - -alg Parameter Value | Digital Signature or MAC Algorithm -----------------|---------------------------- -HS256 | HMAC using SHA-256 hash algorithm -HS384 | HMAC using SHA-384 hash algorithm -HS512 | HMAC using SHA-512 hash algorithm -RS256 | RSASSA using SHA-256 hash algorithm -RS384 | RSASSA using SHA-384 hash algorithm -RS512 | RSASSA using SHA-512 hash algorithm -PS256 | RSASSA-PSS using SHA-256 hash algorithm -PS384 | RSASSA-PSS using SHA-384 hash algorithm -PS512 | RSASSA-PSS using SHA-512 hash algorithm -ES256 | ECDSA using P-256 curve and SHA-256 hash algorithm -ES384 | ECDSA using P-384 curve and SHA-384 hash algorithm -ES512 | ECDSA using P-521 curve and SHA-512 hash algorithm -none | No digital signature or MAC value included - -## jws.sign(options) - -(Synchronous) Return a JSON Web Signature for a header and a payload. - -Options: - -* `header` -* `payload` -* `secret` or `privateKey` -* `encoding` (Optional, defaults to 'utf8') - -`header` must be an object with an `alg` property. `header.alg` must be -one a value found in `jws.ALGORITHMS`. See above for a table of -supported algorithms. - -If `payload` is not a buffer or a string, it will be coerced into a string -using `JSON.stringify`. - -Example - -```js -const signature = jws.sign({ - header: { alg: 'HS256' }, - payload: 'h. jon benjamin', - secret: 'has a van', -}); -``` - -## jws.verify(signature, algorithm, secretOrKey) - -(Synchronous) Returns `true` or `false` for whether a signature matches a -secret or key. - -`signature` is a JWS Signature. `header.alg` must be a value found in `jws.ALGORITHMS`. -See above for a table of supported algorithms. `secretOrKey` is a string or -buffer containing either the secret for HMAC algorithms, or the PEM -encoded public key for RSA and ECDSA. - -Note that the `"alg"` value from the signature header is ignored. - - -## jws.decode(signature) - -(Synchronous) Returns the decoded header, decoded payload, and signature -parts of the JWS Signature. - -Returns an object with three properties, e.g. -```js -{ header: { alg: 'HS256' }, - payload: 'h. jon benjamin', - signature: 'YOWPewyGHKu4Y_0M_vtlEnNlqmFOclqp4Hy6hVHfFT4' -} -``` - -## jws.createSign(options) - -Returns a new SignStream object. - -Options: - -* `header` (required) -* `payload` -* `key` || `privateKey` || `secret` -* `encoding` (Optional, defaults to 'utf8') - -Other than `header`, all options expect a string or a buffer when the -value is known ahead of time, or a stream for convenience. -`key`/`privateKey`/`secret` may also be an object when using an encrypted -private key, see the [crypto documentation][encrypted-key-docs]. - -Example: - -```js - -// This... -jws.createSign({ - header: { alg: 'RS256' }, - privateKey: privateKeyStream, - payload: payloadStream, -}).on('done', function(signature) { - // ... -}); - -// is equivalent to this: -const signer = jws.createSign({ - header: { alg: 'RS256' }, -}); -privateKeyStream.pipe(signer.privateKey); -payloadStream.pipe(signer.payload); -signer.on('done', function(signature) { - // ... -}); -``` - -## jws.createVerify(options) - -Returns a new VerifyStream object. - -Options: - -* `signature` -* `algorithm` -* `key` || `publicKey` || `secret` -* `encoding` (Optional, defaults to 'utf8') - -All options expect a string or a buffer when the value is known ahead of -time, or a stream for convenience. - -Example: - -```js - -// This... -jws.createVerify({ - publicKey: pubKeyStream, - signature: sigStream, -}).on('done', function(verified, obj) { - // ... -}); - -// is equivilant to this: -const verifier = jws.createVerify(); -pubKeyStream.pipe(verifier.publicKey); -sigStream.pipe(verifier.signature); -verifier.on('done', function(verified, obj) { - // ... -}); -``` - -## Class: SignStream - -A `Readable Stream` that emits a single data event (the calculated -signature) when done. - -### Event: 'done' -`function (signature) { }` - -### signer.payload - -A `Writable Stream` that expects the JWS payload. Do *not* use if you -passed a `payload` option to the constructor. - -Example: - -```js -payloadStream.pipe(signer.payload); -``` - -### signer.secret
signer.key
signer.privateKey - -A `Writable Stream`. Expects the JWS secret for HMAC, or the privateKey -for ECDSA and RSA. Do *not* use if you passed a `secret` or `key` option -to the constructor. - -Example: - -```js -privateKeyStream.pipe(signer.privateKey); -``` - -## Class: VerifyStream - -This is a `Readable Stream` that emits a single data event, the result -of whether or not that signature was valid. - -### Event: 'done' -`function (valid, obj) { }` - -`valid` is a boolean for whether or not the signature is valid. - -### verifier.signature - -A `Writable Stream` that expects a JWS Signature. Do *not* use if you -passed a `signature` option to the constructor. - -### verifier.secret
verifier.key
verifier.publicKey - -A `Writable Stream` that expects a public key or secret. Do *not* use if you -passed a `key` or `secret` option to the constructor. - -# TODO - -* It feels like there should be some convenience options/APIs for - defining the algorithm rather than having to define a header object - with `{ alg: 'ES512' }` or whatever every time. - -* X.509 support, ugh - -# License - -MIT - -``` -Copyright (c) 2013-2015 Brian J. Brennan - -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. -``` - -[encrypted-key-docs]: https://nodejs.org/api/crypto.html#crypto_sign_sign_private_key_output_format diff --git a/reverse_engineering/node_modules/lru-cache/LICENSE b/reverse_engineering/node_modules/lru-cache/LICENSE deleted file mode 100644 index 19129e3..0000000 --- a/reverse_engineering/node_modules/lru-cache/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -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. diff --git a/reverse_engineering/node_modules/lru-cache/README.md b/reverse_engineering/node_modules/lru-cache/README.md deleted file mode 100644 index 435dfeb..0000000 --- a/reverse_engineering/node_modules/lru-cache/README.md +++ /dev/null @@ -1,166 +0,0 @@ -# lru cache - -A cache object that deletes the least-recently-used items. - -[![Build Status](https://travis-ci.org/isaacs/node-lru-cache.svg?branch=master)](https://travis-ci.org/isaacs/node-lru-cache) [![Coverage Status](https://coveralls.io/repos/isaacs/node-lru-cache/badge.svg?service=github)](https://coveralls.io/github/isaacs/node-lru-cache) - -## Installation: - -```javascript -npm install lru-cache --save -``` - -## Usage: - -```javascript -var LRU = require("lru-cache") - , options = { max: 500 - , length: function (n, key) { return n * 2 + key.length } - , dispose: function (key, n) { n.close() } - , maxAge: 1000 * 60 * 60 } - , cache = new LRU(options) - , otherCache = new LRU(50) // sets just the max size - -cache.set("key", "value") -cache.get("key") // "value" - -// non-string keys ARE fully supported -// but note that it must be THE SAME object, not -// just a JSON-equivalent object. -var someObject = { a: 1 } -cache.set(someObject, 'a value') -// Object keys are not toString()-ed -cache.set('[object Object]', 'a different value') -assert.equal(cache.get(someObject), 'a value') -// A similar object with same keys/values won't work, -// because it's a different object identity -assert.equal(cache.get({ a: 1 }), undefined) - -cache.reset() // empty the cache -``` - -If you put more stuff in it, then items will fall out. - -If you try to put an oversized thing in it, then it'll fall out right -away. - -## Options - -* `max` The maximum size of the cache, checked by applying the length - function to all values in the cache. Not setting this is kind of - silly, since that's the whole purpose of this lib, but it defaults - to `Infinity`. Setting it to a non-number or negative number will - throw a `TypeError`. Setting it to 0 makes it be `Infinity`. -* `maxAge` Maximum age in ms. Items are not pro-actively pruned out - as they age, but if you try to get an item that is too old, it'll - drop it and return undefined instead of giving it to you. - Setting this to a negative value will make everything seem old! - Setting it to a non-number will throw a `TypeError`. -* `length` Function that is used to calculate the length of stored - items. If you're storing strings or buffers, then you probably want - to do something like `function(n, key){return n.length}`. The default is - `function(){return 1}`, which is fine if you want to store `max` - like-sized things. The item is passed as the first argument, and - the key is passed as the second argumnet. -* `dispose` Function that is called on items when they are dropped - from the cache. This can be handy if you want to close file - descriptors or do other cleanup tasks when items are no longer - accessible. Called with `key, value`. It's called *before* - actually removing the item from the internal cache, so if you want - to immediately put it back in, you'll have to do that in a - `nextTick` or `setTimeout` callback or it won't do anything. -* `stale` By default, if you set a `maxAge`, it'll only actually pull - stale items out of the cache when you `get(key)`. (That is, it's - not pre-emptively doing a `setTimeout` or anything.) If you set - `stale:true`, it'll return the stale value before deleting it. If - you don't set this, then it'll return `undefined` when you try to - get a stale entry, as if it had already been deleted. -* `noDisposeOnSet` By default, if you set a `dispose()` method, then - it'll be called whenever a `set()` operation overwrites an existing - key. If you set this option, `dispose()` will only be called when a - key falls out of the cache, not when it is overwritten. -* `updateAgeOnGet` When using time-expiring entries with `maxAge`, - setting this to `true` will make each item's effective time update - to the current time whenever it is retrieved from cache, causing it - to not expire. (It can still fall out of cache based on recency of - use, of course.) - -## API - -* `set(key, value, maxAge)` -* `get(key) => value` - - Both of these will update the "recently used"-ness of the key. - They do what you think. `maxAge` is optional and overrides the - cache `maxAge` option if provided. - - If the key is not found, `get()` will return `undefined`. - - The key and val can be any value. - -* `peek(key)` - - Returns the key value (or `undefined` if not found) without - updating the "recently used"-ness of the key. - - (If you find yourself using this a lot, you *might* be using the - wrong sort of data structure, but there are some use cases where - it's handy.) - -* `del(key)` - - Deletes a key out of the cache. - -* `reset()` - - Clear the cache entirely, throwing away all values. - -* `has(key)` - - Check if a key is in the cache, without updating the recent-ness - or deleting it for being stale. - -* `forEach(function(value,key,cache), [thisp])` - - Just like `Array.prototype.forEach`. Iterates over all the keys - in the cache, in order of recent-ness. (Ie, more recently used - items are iterated over first.) - -* `rforEach(function(value,key,cache), [thisp])` - - The same as `cache.forEach(...)` but items are iterated over in - reverse order. (ie, less recently used items are iterated over - first.) - -* `keys()` - - Return an array of the keys in the cache. - -* `values()` - - Return an array of the values in the cache. - -* `length` - - Return total length of objects in cache taking into account - `length` options function. - -* `itemCount` - - Return total quantity of objects currently in cache. Note, that - `stale` (see options) items are returned as part of this item - count. - -* `dump()` - - Return an array of the cache entries ready for serialization and usage - with 'destinationCache.load(arr)`. - -* `load(cacheEntriesArray)` - - Loads another cache entries array, obtained with `sourceCache.dump()`, - into the cache. The destination cache is reset before loading new entries - -* `prune()` - - Manually iterates over the entire cache proactively pruning old entries diff --git a/reverse_engineering/node_modules/lru-cache/index.js b/reverse_engineering/node_modules/lru-cache/index.js deleted file mode 100644 index 573b6b8..0000000 --- a/reverse_engineering/node_modules/lru-cache/index.js +++ /dev/null @@ -1,334 +0,0 @@ -'use strict' - -// A linked list to keep track of recently-used-ness -const Yallist = require('yallist') - -const MAX = Symbol('max') -const LENGTH = Symbol('length') -const LENGTH_CALCULATOR = Symbol('lengthCalculator') -const ALLOW_STALE = Symbol('allowStale') -const MAX_AGE = Symbol('maxAge') -const DISPOSE = Symbol('dispose') -const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet') -const LRU_LIST = Symbol('lruList') -const CACHE = Symbol('cache') -const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet') - -const naiveLength = () => 1 - -// lruList is a yallist where the head is the youngest -// item, and the tail is the oldest. the list contains the Hit -// objects as the entries. -// Each Hit object has a reference to its Yallist.Node. This -// never changes. -// -// cache is a Map (or PseudoMap) that matches the keys to -// the Yallist.Node object. -class LRUCache { - constructor (options) { - if (typeof options === 'number') - options = { max: options } - - if (!options) - options = {} - - if (options.max && (typeof options.max !== 'number' || options.max < 0)) - throw new TypeError('max must be a non-negative number') - // Kind of weird to have a default max of Infinity, but oh well. - const max = this[MAX] = options.max || Infinity - - const lc = options.length || naiveLength - this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc - this[ALLOW_STALE] = options.stale || false - if (options.maxAge && typeof options.maxAge !== 'number') - throw new TypeError('maxAge must be a number') - this[MAX_AGE] = options.maxAge || 0 - this[DISPOSE] = options.dispose - this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false - this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false - this.reset() - } - - // resize the cache when the max changes. - set max (mL) { - if (typeof mL !== 'number' || mL < 0) - throw new TypeError('max must be a non-negative number') - - this[MAX] = mL || Infinity - trim(this) - } - get max () { - return this[MAX] - } - - set allowStale (allowStale) { - this[ALLOW_STALE] = !!allowStale - } - get allowStale () { - return this[ALLOW_STALE] - } - - set maxAge (mA) { - if (typeof mA !== 'number') - throw new TypeError('maxAge must be a non-negative number') - - this[MAX_AGE] = mA - trim(this) - } - get maxAge () { - return this[MAX_AGE] - } - - // resize the cache when the lengthCalculator changes. - set lengthCalculator (lC) { - if (typeof lC !== 'function') - lC = naiveLength - - if (lC !== this[LENGTH_CALCULATOR]) { - this[LENGTH_CALCULATOR] = lC - this[LENGTH] = 0 - this[LRU_LIST].forEach(hit => { - hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key) - this[LENGTH] += hit.length - }) - } - trim(this) - } - get lengthCalculator () { return this[LENGTH_CALCULATOR] } - - get length () { return this[LENGTH] } - get itemCount () { return this[LRU_LIST].length } - - rforEach (fn, thisp) { - thisp = thisp || this - for (let walker = this[LRU_LIST].tail; walker !== null;) { - const prev = walker.prev - forEachStep(this, fn, walker, thisp) - walker = prev - } - } - - forEach (fn, thisp) { - thisp = thisp || this - for (let walker = this[LRU_LIST].head; walker !== null;) { - const next = walker.next - forEachStep(this, fn, walker, thisp) - walker = next - } - } - - keys () { - return this[LRU_LIST].toArray().map(k => k.key) - } - - values () { - return this[LRU_LIST].toArray().map(k => k.value) - } - - reset () { - if (this[DISPOSE] && - this[LRU_LIST] && - this[LRU_LIST].length) { - this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value)) - } - - this[CACHE] = new Map() // hash of items by key - this[LRU_LIST] = new Yallist() // list of items in order of use recency - this[LENGTH] = 0 // length of items in the list - } - - dump () { - return this[LRU_LIST].map(hit => - isStale(this, hit) ? false : { - k: hit.key, - v: hit.value, - e: hit.now + (hit.maxAge || 0) - }).toArray().filter(h => h) - } - - dumpLru () { - return this[LRU_LIST] - } - - set (key, value, maxAge) { - maxAge = maxAge || this[MAX_AGE] - - if (maxAge && typeof maxAge !== 'number') - throw new TypeError('maxAge must be a number') - - const now = maxAge ? Date.now() : 0 - const len = this[LENGTH_CALCULATOR](value, key) - - if (this[CACHE].has(key)) { - if (len > this[MAX]) { - del(this, this[CACHE].get(key)) - return false - } - - const node = this[CACHE].get(key) - const item = node.value - - // dispose of the old one before overwriting - // split out into 2 ifs for better coverage tracking - if (this[DISPOSE]) { - if (!this[NO_DISPOSE_ON_SET]) - this[DISPOSE](key, item.value) - } - - item.now = now - item.maxAge = maxAge - item.value = value - this[LENGTH] += len - item.length - item.length = len - this.get(key) - trim(this) - return true - } - - const hit = new Entry(key, value, len, now, maxAge) - - // oversized objects fall out of cache automatically. - if (hit.length > this[MAX]) { - if (this[DISPOSE]) - this[DISPOSE](key, value) - - return false - } - - this[LENGTH] += hit.length - this[LRU_LIST].unshift(hit) - this[CACHE].set(key, this[LRU_LIST].head) - trim(this) - return true - } - - has (key) { - if (!this[CACHE].has(key)) return false - const hit = this[CACHE].get(key).value - return !isStale(this, hit) - } - - get (key) { - return get(this, key, true) - } - - peek (key) { - return get(this, key, false) - } - - pop () { - const node = this[LRU_LIST].tail - if (!node) - return null - - del(this, node) - return node.value - } - - del (key) { - del(this, this[CACHE].get(key)) - } - - load (arr) { - // reset the cache - this.reset() - - const now = Date.now() - // A previous serialized cache has the most recent items first - for (let l = arr.length - 1; l >= 0; l--) { - const hit = arr[l] - const expiresAt = hit.e || 0 - if (expiresAt === 0) - // the item was created without expiration in a non aged cache - this.set(hit.k, hit.v) - else { - const maxAge = expiresAt - now - // dont add already expired items - if (maxAge > 0) { - this.set(hit.k, hit.v, maxAge) - } - } - } - } - - prune () { - this[CACHE].forEach((value, key) => get(this, key, false)) - } -} - -const get = (self, key, doUse) => { - const node = self[CACHE].get(key) - if (node) { - const hit = node.value - if (isStale(self, hit)) { - del(self, node) - if (!self[ALLOW_STALE]) - return undefined - } else { - if (doUse) { - if (self[UPDATE_AGE_ON_GET]) - node.value.now = Date.now() - self[LRU_LIST].unshiftNode(node) - } - } - return hit.value - } -} - -const isStale = (self, hit) => { - if (!hit || (!hit.maxAge && !self[MAX_AGE])) - return false - - const diff = Date.now() - hit.now - return hit.maxAge ? diff > hit.maxAge - : self[MAX_AGE] && (diff > self[MAX_AGE]) -} - -const trim = self => { - if (self[LENGTH] > self[MAX]) { - for (let walker = self[LRU_LIST].tail; - self[LENGTH] > self[MAX] && walker !== null;) { - // We know that we're about to delete this one, and also - // what the next least recently used key will be, so just - // go ahead and set it now. - const prev = walker.prev - del(self, walker) - walker = prev - } - } -} - -const del = (self, node) => { - if (node) { - const hit = node.value - if (self[DISPOSE]) - self[DISPOSE](hit.key, hit.value) - - self[LENGTH] -= hit.length - self[CACHE].delete(hit.key) - self[LRU_LIST].removeNode(node) - } -} - -class Entry { - constructor (key, value, length, now, maxAge) { - this.key = key - this.value = value - this.length = length - this.now = now - this.maxAge = maxAge || 0 - } -} - -const forEachStep = (self, fn, node, thisp) => { - let hit = node.value - if (isStale(self, hit)) { - del(self, node) - if (!self[ALLOW_STALE]) - hit = undefined - } - if (hit) - fn.call(thisp, hit.value, hit.key, self) -} - -module.exports = LRUCache diff --git a/reverse_engineering/node_modules/lru-cache/package.json b/reverse_engineering/node_modules/lru-cache/package.json deleted file mode 100644 index 34086f7..0000000 --- a/reverse_engineering/node_modules/lru-cache/package.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "_from": "lru-cache@^6.0.0", - "_id": "lru-cache@6.0.0", - "_inBundle": false, - "_integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "_location": "/lru-cache", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "lru-cache@^6.0.0", - "name": "lru-cache", - "escapedName": "lru-cache", - "rawSpec": "^6.0.0", - "saveSpec": null, - "fetchSpec": "^6.0.0" - }, - "_requiredBy": [ - "/google-auth-library" - ], - "_resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "_shasum": "6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94", - "_spec": "lru-cache@^6.0.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/google-auth-library", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me" - }, - "bugs": { - "url": "https://github.com/isaacs/node-lru-cache/issues" - }, - "bundleDependencies": false, - "dependencies": { - "yallist": "^4.0.0" - }, - "deprecated": false, - "description": "A cache object that deletes the least-recently-used items.", - "devDependencies": { - "benchmark": "^2.1.4", - "tap": "^14.10.7" - }, - "engines": { - "node": ">=10" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/isaacs/node-lru-cache#readme", - "keywords": [ - "mru", - "lru", - "cache" - ], - "license": "ISC", - "main": "index.js", - "name": "lru-cache", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-lru-cache.git" - }, - "scripts": { - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags", - "preversion": "npm test", - "snap": "tap", - "test": "tap" - }, - "version": "6.0.0" -} diff --git a/reverse_engineering/node_modules/ms/index.js b/reverse_engineering/node_modules/ms/index.js deleted file mode 100644 index c4498bc..0000000 --- a/reverse_engineering/node_modules/ms/index.js +++ /dev/null @@ -1,162 +0,0 @@ -/** - * Helpers. - */ - -var s = 1000; -var m = s * 60; -var h = m * 60; -var d = h * 24; -var w = d * 7; -var y = d * 365.25; - -/** - * Parse or format the given `val`. - * - * Options: - * - * - `long` verbose formatting [false] - * - * @param {String|Number} val - * @param {Object} [options] - * @throws {Error} throw an error if val is not a non-empty string or a number - * @return {String|Number} - * @api public - */ - -module.exports = function(val, options) { - options = options || {}; - var type = typeof val; - if (type === 'string' && val.length > 0) { - return parse(val); - } else if (type === 'number' && isFinite(val)) { - return options.long ? fmtLong(val) : fmtShort(val); - } - throw new Error( - 'val is not a non-empty string or a valid number. val=' + - JSON.stringify(val) - ); -}; - -/** - * Parse the given `str` and return milliseconds. - * - * @param {String} str - * @return {Number} - * @api private - */ - -function parse(str) { - str = String(str); - if (str.length > 100) { - return; - } - var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( - str - ); - if (!match) { - return; - } - var n = parseFloat(match[1]); - var type = (match[2] || 'ms').toLowerCase(); - switch (type) { - case 'years': - case 'year': - case 'yrs': - case 'yr': - case 'y': - return n * y; - case 'weeks': - case 'week': - case 'w': - return n * w; - case 'days': - case 'day': - case 'd': - return n * d; - case 'hours': - case 'hour': - case 'hrs': - case 'hr': - case 'h': - return n * h; - case 'minutes': - case 'minute': - case 'mins': - case 'min': - case 'm': - return n * m; - case 'seconds': - case 'second': - case 'secs': - case 'sec': - case 's': - return n * s; - case 'milliseconds': - case 'millisecond': - case 'msecs': - case 'msec': - case 'ms': - return n; - default: - return undefined; - } -} - -/** - * Short format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - -function fmtShort(ms) { - var msAbs = Math.abs(ms); - if (msAbs >= d) { - return Math.round(ms / d) + 'd'; - } - if (msAbs >= h) { - return Math.round(ms / h) + 'h'; - } - if (msAbs >= m) { - return Math.round(ms / m) + 'm'; - } - if (msAbs >= s) { - return Math.round(ms / s) + 's'; - } - return ms + 'ms'; -} - -/** - * Long format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - -function fmtLong(ms) { - var msAbs = Math.abs(ms); - if (msAbs >= d) { - return plural(ms, msAbs, d, 'day'); - } - if (msAbs >= h) { - return plural(ms, msAbs, h, 'hour'); - } - if (msAbs >= m) { - return plural(ms, msAbs, m, 'minute'); - } - if (msAbs >= s) { - return plural(ms, msAbs, s, 'second'); - } - return ms + ' ms'; -} - -/** - * Pluralization helper. - */ - -function plural(ms, msAbs, n, name) { - var isPlural = msAbs >= n * 1.5; - return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); -} diff --git a/reverse_engineering/node_modules/ms/license.md b/reverse_engineering/node_modules/ms/license.md deleted file mode 100644 index 69b6125..0000000 --- a/reverse_engineering/node_modules/ms/license.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Zeit, Inc. - -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/reverse_engineering/node_modules/ms/package.json b/reverse_engineering/node_modules/ms/package.json deleted file mode 100644 index 9dcace1..0000000 --- a/reverse_engineering/node_modules/ms/package.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "_from": "ms@2.1.2", - "_id": "ms@2.1.2", - "_inBundle": false, - "_integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "_location": "/ms", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "ms@2.1.2", - "name": "ms", - "escapedName": "ms", - "rawSpec": "2.1.2", - "saveSpec": null, - "fetchSpec": "2.1.2" - }, - "_requiredBy": [ - "/debug" - ], - "_resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "_shasum": "d09d1f357b443f493382a8eb3ccd183872ae6009", - "_spec": "ms@2.1.2", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/debug", - "bugs": { - "url": "https://github.com/zeit/ms/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Tiny millisecond conversion utility", - "devDependencies": { - "eslint": "4.12.1", - "expect.js": "0.3.1", - "husky": "0.14.3", - "lint-staged": "5.0.0", - "mocha": "4.0.1" - }, - "eslintConfig": { - "extends": "eslint:recommended", - "env": { - "node": true, - "es6": true - } - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/zeit/ms#readme", - "license": "MIT", - "lint-staged": { - "*.js": [ - "npm run lint", - "prettier --single-quote --write", - "git add" - ] - }, - "main": "./index", - "name": "ms", - "repository": { - "type": "git", - "url": "git+https://github.com/zeit/ms.git" - }, - "scripts": { - "lint": "eslint lib/* bin/*", - "precommit": "lint-staged", - "test": "mocha tests.js" - }, - "version": "2.1.2" -} diff --git a/reverse_engineering/node_modules/ms/readme.md b/reverse_engineering/node_modules/ms/readme.md deleted file mode 100644 index 9a1996b..0000000 --- a/reverse_engineering/node_modules/ms/readme.md +++ /dev/null @@ -1,60 +0,0 @@ -# ms - -[![Build Status](https://travis-ci.org/zeit/ms.svg?branch=master)](https://travis-ci.org/zeit/ms) -[![Join the community on Spectrum](https://withspectrum.github.io/badge/badge.svg)](https://spectrum.chat/zeit) - -Use this package to easily convert various time formats to milliseconds. - -## Examples - -```js -ms('2 days') // 172800000 -ms('1d') // 86400000 -ms('10h') // 36000000 -ms('2.5 hrs') // 9000000 -ms('2h') // 7200000 -ms('1m') // 60000 -ms('5s') // 5000 -ms('1y') // 31557600000 -ms('100') // 100 -ms('-3 days') // -259200000 -ms('-1h') // -3600000 -ms('-200') // -200 -``` - -### Convert from Milliseconds - -```js -ms(60000) // "1m" -ms(2 * 60000) // "2m" -ms(-3 * 60000) // "-3m" -ms(ms('10 hours')) // "10h" -``` - -### Time Format Written-Out - -```js -ms(60000, { long: true }) // "1 minute" -ms(2 * 60000, { long: true }) // "2 minutes" -ms(-3 * 60000, { long: true }) // "-3 minutes" -ms(ms('10 hours'), { long: true }) // "10 hours" -``` - -## Features - -- Works both in [Node.js](https://nodejs.org) and in the browser -- If a number is supplied to `ms`, a string with a unit is returned -- If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`) -- If you pass a string with a number and a valid unit, the number of equivalent milliseconds is returned - -## Related Packages - -- [ms.macro](https://github.com/knpwrs/ms.macro) - Run `ms` as a macro at build-time. - -## Caught a Bug? - -1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device -2. Link the package to the global module directory: `npm link` -3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, Node.js will now use your clone of ms! - -As always, you can run the tests using: `npm test` diff --git a/reverse_engineering/node_modules/node-fetch/CHANGELOG.md b/reverse_engineering/node_modules/node-fetch/CHANGELOG.md deleted file mode 100644 index 543d3d9..0000000 --- a/reverse_engineering/node_modules/node-fetch/CHANGELOG.md +++ /dev/null @@ -1,272 +0,0 @@ - -Changelog -========= - - -# 2.x release - -## v2.6.1 - -**This is an important security release. It is strongly recommended to update as soon as possible.** - -- Fix: honor the `size` option after following a redirect. - -## v2.6.0 - -- Enhance: `options.agent`, it now accepts a function that returns custom http(s).Agent instance based on current URL, see readme for more information. -- Fix: incorrect `Content-Length` was returned for stream body in 2.5.0 release; note that `node-fetch` doesn't calculate content length for stream body. -- Fix: `Response.url` should return empty string instead of `null` by default. - -## v2.5.0 - -- Enhance: `Response` object now includes `redirected` property. -- Enhance: `fetch()` now accepts third-party `Blob` implementation as body. -- Other: disable `package-lock.json` generation as we never commit them. -- Other: dev dependency update. -- Other: readme update. - -## v2.4.1 - -- Fix: `Blob` import rule for node < 10, as `Readable` isn't a named export. - -## v2.4.0 - -- Enhance: added `Brotli` compression support (using node's zlib). -- Enhance: updated `Blob` implementation per spec. -- Fix: set content type automatically for `URLSearchParams`. -- Fix: `Headers` now reject empty header names. -- Fix: test cases, as node 12+ no longer accepts invalid header response. - -## v2.3.0 - -- Enhance: added `AbortSignal` support, with README example. -- Enhance: handle invalid `Location` header during redirect by rejecting them explicitly with `FetchError`. -- Fix: update `browser.js` to support react-native environment, where `self` isn't available globally. - -## v2.2.1 - -- Fix: `compress` flag shouldn't overwrite existing `Accept-Encoding` header. -- Fix: multiple `import` rules, where `PassThrough` etc. doesn't have a named export when using node <10 and `--exerimental-modules` flag. -- Other: Better README. - -## v2.2.0 - -- Enhance: Support all `ArrayBuffer` view types -- Enhance: Support Web Workers -- Enhance: Support Node.js' `--experimental-modules` mode; deprecate `.es.js` file -- Fix: Add `__esModule` property to the exports object -- Other: Better example in README for writing response to a file -- Other: More tests for Agent - -## v2.1.2 - -- Fix: allow `Body` methods to work on `ArrayBuffer`-backed `Body` objects -- Fix: reject promise returned by `Body` methods when the accumulated `Buffer` exceeds the maximum size -- Fix: support custom `Host` headers with any casing -- Fix: support importing `fetch()` from TypeScript in `browser.js` -- Fix: handle the redirect response body properly - -## v2.1.1 - -Fix packaging errors in v2.1.0. - -## v2.1.0 - -- Enhance: allow using ArrayBuffer as the `body` of a `fetch()` or `Request` -- Fix: store HTTP headers of a `Headers` object internally with the given case, for compatibility with older servers that incorrectly treated header names in a case-sensitive manner -- Fix: silently ignore invalid HTTP headers -- Fix: handle HTTP redirect responses without a `Location` header just like non-redirect responses -- Fix: include bodies when following a redirection when appropriate - -## v2.0.0 - -This is a major release. Check [our upgrade guide](https://github.com/bitinn/node-fetch/blob/master/UPGRADE-GUIDE.md) for an overview on some key differences between v1 and v2. - -### General changes - -- Major: Node.js 0.10.x and 0.12.x support is dropped -- Major: `require('node-fetch/lib/response')` etc. is now unsupported; use `require('node-fetch').Response` or ES6 module imports -- Enhance: start testing on Node.js v4.x, v6.x, v8.x LTS, as well as v9.x stable -- Enhance: use Rollup to produce a distributed bundle (less memory overhead and faster startup) -- Enhance: make `Object.prototype.toString()` on Headers, Requests, and Responses return correct class strings -- Other: rewrite in ES2015 using Babel -- Other: use Codecov for code coverage tracking -- Other: update package.json script for npm 5 -- Other: `encoding` module is now optional (alpha.7) -- Other: expose browser.js through package.json, avoid bundling mishaps (alpha.9) -- Other: allow TypeScript to `import` node-fetch by exposing default (alpha.9) - -### HTTP requests - -- Major: overwrite user's `Content-Length` if we can be sure our information is correct (per spec) -- Fix: errors in a response are caught before the body is accessed -- Fix: support WHATWG URL objects, created by `whatwg-url` package or `require('url').URL` in Node.js 7+ - -### Response and Request classes - -- Major: `response.text()` no longer attempts to detect encoding, instead always opting for UTF-8 (per spec); use `response.textConverted()` for the v1 behavior -- Major: make `response.json()` throw error instead of returning an empty object on 204 no-content respose (per spec; reverts behavior changed in v1.6.2) -- Major: internal methods are no longer exposed -- Major: throw error when a `GET` or `HEAD` Request is constructed with a non-null body (per spec) -- Enhance: add `response.arrayBuffer()` (also applies to Requests) -- Enhance: add experimental `response.blob()` (also applies to Requests) -- Enhance: `URLSearchParams` is now accepted as a body -- Enhance: wrap `response.json()` json parsing error as `FetchError` -- Fix: fix Request and Response with `null` body - -### Headers class - -- Major: remove `headers.getAll()`; make `get()` return all headers delimited by commas (per spec) -- Enhance: make Headers iterable -- Enhance: make Headers constructor accept an array of tuples -- Enhance: make sure header names and values are valid in HTTP -- Fix: coerce Headers prototype function parameters to strings, where applicable - -### Documentation - -- Enhance: more comprehensive API docs -- Enhance: add a list of default headers in README - - -# 1.x release - -## backport releases (v1.7.0 and beyond) - -See [changelog on 1.x branch](https://github.com/bitinn/node-fetch/blob/1.x/CHANGELOG.md) for details. - -## v1.6.3 - -- Enhance: error handling document to explain `FetchError` design -- Fix: support `form-data` 2.x releases (requires `form-data` >= 2.1.0) - -## v1.6.2 - -- Enhance: minor document update -- Fix: response.json() returns empty object on 204 no-content response instead of throwing a syntax error - -## v1.6.1 - -- Fix: if `res.body` is a non-stream non-formdata object, we will call `body.toString` and send it as a string -- Fix: `counter` value is incorrectly set to `follow` value when wrapping Request instance -- Fix: documentation update - -## v1.6.0 - -- Enhance: added `res.buffer()` api for convenience, it returns body as a Node.js buffer -- Enhance: better old server support by handling raw deflate response -- Enhance: skip encoding detection for non-HTML/XML response -- Enhance: minor document update -- Fix: HEAD request doesn't need decompression, as body is empty -- Fix: `req.body` now accepts a Node.js buffer - -## v1.5.3 - -- Fix: handle 204 and 304 responses when body is empty but content-encoding is gzip/deflate -- Fix: allow resolving response and cloned response in any order -- Fix: avoid setting `content-length` when `form-data` body use streams -- Fix: send DELETE request with content-length when body is present -- Fix: allow any url when calling new Request, but still reject non-http(s) url in fetch - -## v1.5.2 - -- Fix: allow node.js core to handle keep-alive connection pool when passing a custom agent - -## v1.5.1 - -- Fix: redirect mode `manual` should work even when there is no redirection or broken redirection - -## v1.5.0 - -- Enhance: rejected promise now use custom `Error` (thx to @pekeler) -- Enhance: `FetchError` contains `err.type` and `err.code`, allows for better error handling (thx to @pekeler) -- Enhance: basic support for redirect mode `manual` and `error`, allows for location header extraction (thx to @jimmywarting for the initial PR) - -## v1.4.1 - -- Fix: wrapping Request instance with FormData body again should preserve the body as-is - -## v1.4.0 - -- Enhance: Request and Response now have `clone` method (thx to @kirill-konshin for the initial PR) -- Enhance: Request and Response now have proper string and buffer body support (thx to @kirill-konshin) -- Enhance: Body constructor has been refactored out (thx to @kirill-konshin) -- Enhance: Headers now has `forEach` method (thx to @tricoder42) -- Enhance: back to 100% code coverage -- Fix: better form-data support (thx to @item4) -- Fix: better character encoding detection under chunked encoding (thx to @dsuket for the initial PR) - -## v1.3.3 - -- Fix: make sure `Content-Length` header is set when body is string for POST/PUT/PATCH requests -- Fix: handle body stream error, for cases such as incorrect `Content-Encoding` header -- Fix: when following certain redirects, use `GET` on subsequent request per Fetch Spec -- Fix: `Request` and `Response` constructors now parse headers input using `Headers` - -## v1.3.2 - -- Enhance: allow auto detect of form-data input (no `FormData` spec on node.js, this is form-data specific feature) - -## v1.3.1 - -- Enhance: allow custom host header to be set (server-side only feature, as it's a forbidden header on client-side) - -## v1.3.0 - -- Enhance: now `fetch.Request` is exposed as well - -## v1.2.1 - -- Enhance: `Headers` now normalized `Number` value to `String`, prevent common mistakes - -## v1.2.0 - -- Enhance: now fetch.Headers and fetch.Response are exposed, making testing easier - -## v1.1.2 - -- Fix: `Headers` should only support `String` and `Array` properties, and ignore others - -## v1.1.1 - -- Enhance: now req.headers accept both plain object and `Headers` instance - -## v1.1.0 - -- Enhance: timeout now also applies to response body (in case of slow response) -- Fix: timeout is now cleared properly when fetch is done/has failed - -## v1.0.6 - -- Fix: less greedy content-type charset matching - -## v1.0.5 - -- Fix: when `follow = 0`, fetch should not follow redirect -- Enhance: update tests for better coverage -- Enhance: code formatting -- Enhance: clean up doc - -## v1.0.4 - -- Enhance: test iojs support -- Enhance: timeout attached to socket event only fire once per redirect - -## v1.0.3 - -- Fix: response size limit should reject large chunk -- Enhance: added character encoding detection for xml, such as rss/atom feed (encoding in DTD) - -## v1.0.2 - -- Fix: added res.ok per spec change - -## v1.0.0 - -- Enhance: better test coverage and doc - - -# 0.x release - -## v0.1 - -- Major: initial public release diff --git a/reverse_engineering/node_modules/node-fetch/LICENSE.md b/reverse_engineering/node_modules/node-fetch/LICENSE.md deleted file mode 100644 index 660ffec..0000000 --- a/reverse_engineering/node_modules/node-fetch/LICENSE.md +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 David Frank - -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/reverse_engineering/node_modules/node-fetch/README.md b/reverse_engineering/node_modules/node-fetch/README.md deleted file mode 100644 index 2dde742..0000000 --- a/reverse_engineering/node_modules/node-fetch/README.md +++ /dev/null @@ -1,590 +0,0 @@ -node-fetch -========== - -[![npm version][npm-image]][npm-url] -[![build status][travis-image]][travis-url] -[![coverage status][codecov-image]][codecov-url] -[![install size][install-size-image]][install-size-url] -[![Discord][discord-image]][discord-url] - -A light-weight module that brings `window.fetch` to Node.js - -(We are looking for [v2 maintainers and collaborators](https://github.com/bitinn/node-fetch/issues/567)) - -[![Backers][opencollective-image]][opencollective-url] - - - -- [Motivation](#motivation) -- [Features](#features) -- [Difference from client-side fetch](#difference-from-client-side-fetch) -- [Installation](#installation) -- [Loading and configuring the module](#loading-and-configuring-the-module) -- [Common Usage](#common-usage) - - [Plain text or HTML](#plain-text-or-html) - - [JSON](#json) - - [Simple Post](#simple-post) - - [Post with JSON](#post-with-json) - - [Post with form parameters](#post-with-form-parameters) - - [Handling exceptions](#handling-exceptions) - - [Handling client and server errors](#handling-client-and-server-errors) -- [Advanced Usage](#advanced-usage) - - [Streams](#streams) - - [Buffer](#buffer) - - [Accessing Headers and other Meta data](#accessing-headers-and-other-meta-data) - - [Extract Set-Cookie Header](#extract-set-cookie-header) - - [Post data using a file stream](#post-data-using-a-file-stream) - - [Post with form-data (detect multipart)](#post-with-form-data-detect-multipart) - - [Request cancellation with AbortSignal](#request-cancellation-with-abortsignal) -- [API](#api) - - [fetch(url[, options])](#fetchurl-options) - - [Options](#options) - - [Class: Request](#class-request) - - [Class: Response](#class-response) - - [Class: Headers](#class-headers) - - [Interface: Body](#interface-body) - - [Class: FetchError](#class-fetcherror) -- [License](#license) -- [Acknowledgement](#acknowledgement) - - - -## Motivation - -Instead of implementing `XMLHttpRequest` in Node.js to run browser-specific [Fetch polyfill](https://github.com/github/fetch), why not go from native `http` to `fetch` API directly? Hence, `node-fetch`, minimal code for a `window.fetch` compatible API on Node.js runtime. - -See Matt Andrews' [isomorphic-fetch](https://github.com/matthew-andrews/isomorphic-fetch) or Leonardo Quixada's [cross-fetch](https://github.com/lquixada/cross-fetch) for isomorphic usage (exports `node-fetch` for server-side, `whatwg-fetch` for client-side). - -## Features - -- Stay consistent with `window.fetch` API. -- Make conscious trade-off when following [WHATWG fetch spec][whatwg-fetch] and [stream spec](https://streams.spec.whatwg.org/) implementation details, document known differences. -- Use native promise but allow substituting it with [insert your favorite promise library]. -- Use native Node streams for body on both request and response. -- Decode content encoding (gzip/deflate) properly and convert string output (such as `res.text()` and `res.json()`) to UTF-8 automatically. -- Useful extensions such as timeout, redirect limit, response size limit, [explicit errors](ERROR-HANDLING.md) for troubleshooting. - -## Difference from client-side fetch - -- See [Known Differences](LIMITS.md) for details. -- If you happen to use a missing feature that `window.fetch` offers, feel free to open an issue. -- Pull requests are welcomed too! - -## Installation - -Current stable release (`2.x`) - -```sh -$ npm install node-fetch -``` - -## Loading and configuring the module -We suggest you load the module via `require` until the stabilization of ES modules in node: -```js -const fetch = require('node-fetch'); -``` - -If you are using a Promise library other than native, set it through `fetch.Promise`: -```js -const Bluebird = require('bluebird'); - -fetch.Promise = Bluebird; -``` - -## Common Usage - -NOTE: The documentation below is up-to-date with `2.x` releases; see the [`1.x` readme](https://github.com/bitinn/node-fetch/blob/1.x/README.md), [changelog](https://github.com/bitinn/node-fetch/blob/1.x/CHANGELOG.md) and [2.x upgrade guide](UPGRADE-GUIDE.md) for the differences. - -#### Plain text or HTML -```js -fetch('https://github.com/') - .then(res => res.text()) - .then(body => console.log(body)); -``` - -#### JSON - -```js - -fetch('https://api.github.com/users/github') - .then(res => res.json()) - .then(json => console.log(json)); -``` - -#### Simple Post -```js -fetch('https://httpbin.org/post', { method: 'POST', body: 'a=1' }) - .then(res => res.json()) // expecting a json response - .then(json => console.log(json)); -``` - -#### Post with JSON - -```js -const body = { a: 1 }; - -fetch('https://httpbin.org/post', { - method: 'post', - body: JSON.stringify(body), - headers: { 'Content-Type': 'application/json' }, - }) - .then(res => res.json()) - .then(json => console.log(json)); -``` - -#### Post with form parameters -`URLSearchParams` is available in Node.js as of v7.5.0. See [official documentation](https://nodejs.org/api/url.html#url_class_urlsearchparams) for more usage methods. - -NOTE: The `Content-Type` header is only set automatically to `x-www-form-urlencoded` when an instance of `URLSearchParams` is given as such: - -```js -const { URLSearchParams } = require('url'); - -const params = new URLSearchParams(); -params.append('a', 1); - -fetch('https://httpbin.org/post', { method: 'POST', body: params }) - .then(res => res.json()) - .then(json => console.log(json)); -``` - -#### Handling exceptions -NOTE: 3xx-5xx responses are *NOT* exceptions and should be handled in `then()`; see the next section for more information. - -Adding a catch to the fetch promise chain will catch *all* exceptions, such as errors originating from node core libraries, network errors and operational errors, which are instances of FetchError. See the [error handling document](ERROR-HANDLING.md) for more details. - -```js -fetch('https://domain.invalid/') - .catch(err => console.error(err)); -``` - -#### Handling client and server errors -It is common to create a helper function to check that the response contains no client (4xx) or server (5xx) error responses: - -```js -function checkStatus(res) { - if (res.ok) { // res.status >= 200 && res.status < 300 - return res; - } else { - throw MyCustomError(res.statusText); - } -} - -fetch('https://httpbin.org/status/400') - .then(checkStatus) - .then(res => console.log('will not get here...')) -``` - -## Advanced Usage - -#### Streams -The "Node.js way" is to use streams when possible: - -```js -fetch('https://assets-cdn.github.com/images/modules/logos_page/Octocat.png') - .then(res => { - const dest = fs.createWriteStream('./octocat.png'); - res.body.pipe(dest); - }); -``` - -#### Buffer -If you prefer to cache binary data in full, use buffer(). (NOTE: `buffer()` is a `node-fetch`-only API) - -```js -const fileType = require('file-type'); - -fetch('https://assets-cdn.github.com/images/modules/logos_page/Octocat.png') - .then(res => res.buffer()) - .then(buffer => fileType(buffer)) - .then(type => { /* ... */ }); -``` - -#### Accessing Headers and other Meta data -```js -fetch('https://github.com/') - .then(res => { - console.log(res.ok); - console.log(res.status); - console.log(res.statusText); - console.log(res.headers.raw()); - console.log(res.headers.get('content-type')); - }); -``` - -#### Extract Set-Cookie Header - -Unlike browsers, you can access raw `Set-Cookie` headers manually using `Headers.raw()`. This is a `node-fetch` only API. - -```js -fetch(url).then(res => { - // returns an array of values, instead of a string of comma-separated values - console.log(res.headers.raw()['set-cookie']); -}); -``` - -#### Post data using a file stream - -```js -const { createReadStream } = require('fs'); - -const stream = createReadStream('input.txt'); - -fetch('https://httpbin.org/post', { method: 'POST', body: stream }) - .then(res => res.json()) - .then(json => console.log(json)); -``` - -#### Post with form-data (detect multipart) - -```js -const FormData = require('form-data'); - -const form = new FormData(); -form.append('a', 1); - -fetch('https://httpbin.org/post', { method: 'POST', body: form }) - .then(res => res.json()) - .then(json => console.log(json)); - -// OR, using custom headers -// NOTE: getHeaders() is non-standard API - -const form = new FormData(); -form.append('a', 1); - -const options = { - method: 'POST', - body: form, - headers: form.getHeaders() -} - -fetch('https://httpbin.org/post', options) - .then(res => res.json()) - .then(json => console.log(json)); -``` - -#### Request cancellation with AbortSignal - -> NOTE: You may cancel streamed requests only on Node >= v8.0.0 - -You may cancel requests with `AbortController`. A suggested implementation is [`abort-controller`](https://www.npmjs.com/package/abort-controller). - -An example of timing out a request after 150ms could be achieved as the following: - -```js -import AbortController from 'abort-controller'; - -const controller = new AbortController(); -const timeout = setTimeout( - () => { controller.abort(); }, - 150, -); - -fetch(url, { signal: controller.signal }) - .then(res => res.json()) - .then( - data => { - useData(data) - }, - err => { - if (err.name === 'AbortError') { - // request was aborted - } - }, - ) - .finally(() => { - clearTimeout(timeout); - }); -``` - -See [test cases](https://github.com/bitinn/node-fetch/blob/master/test/test.js) for more examples. - - -## API - -### fetch(url[, options]) - -- `url` A string representing the URL for fetching -- `options` [Options](#fetch-options) for the HTTP(S) request -- Returns: Promise<[Response](#class-response)> - -Perform an HTTP(S) fetch. - -`url` should be an absolute url, such as `https://example.com/`. A path-relative URL (`/file/under/root`) or protocol-relative URL (`//can-be-http-or-https.com/`) will result in a rejected `Promise`. - - -### Options - -The default values are shown after each option key. - -```js -{ - // These properties are part of the Fetch Standard - method: 'GET', - headers: {}, // request headers. format is the identical to that accepted by the Headers constructor (see below) - body: null, // request body. can be null, a string, a Buffer, a Blob, or a Node.js Readable stream - redirect: 'follow', // set to `manual` to extract redirect headers, `error` to reject redirect - signal: null, // pass an instance of AbortSignal to optionally abort requests - - // The following properties are node-fetch extensions - follow: 20, // maximum redirect count. 0 to not follow redirect - timeout: 0, // req/res timeout in ms, it resets on redirect. 0 to disable (OS limit applies). Signal is recommended instead. - compress: true, // support gzip/deflate content encoding. false to disable - size: 0, // maximum response body size in bytes. 0 to disable - agent: null // http(s).Agent instance or function that returns an instance (see below) -} -``` - -##### Default Headers - -If no values are set, the following request headers will be sent automatically: - -Header | Value -------------------- | -------------------------------------------------------- -`Accept-Encoding` | `gzip,deflate` _(when `options.compress === true`)_ -`Accept` | `*/*` -`Connection` | `close` _(when no `options.agent` is present)_ -`Content-Length` | _(automatically calculated, if possible)_ -`Transfer-Encoding` | `chunked` _(when `req.body` is a stream)_ -`User-Agent` | `node-fetch/1.0 (+https://github.com/bitinn/node-fetch)` - -Note: when `body` is a `Stream`, `Content-Length` is not set automatically. - -##### Custom Agent - -The `agent` option allows you to specify networking related options which are out of the scope of Fetch, including and not limited to the following: - -- Support self-signed certificate -- Use only IPv4 or IPv6 -- Custom DNS Lookup - -See [`http.Agent`](https://nodejs.org/api/http.html#http_new_agent_options) for more information. - -In addition, the `agent` option accepts a function that returns `http`(s)`.Agent` instance given current [URL](https://nodejs.org/api/url.html), this is useful during a redirection chain across HTTP and HTTPS protocol. - -```js -const httpAgent = new http.Agent({ - keepAlive: true -}); -const httpsAgent = new https.Agent({ - keepAlive: true -}); - -const options = { - agent: function (_parsedURL) { - if (_parsedURL.protocol == 'http:') { - return httpAgent; - } else { - return httpsAgent; - } - } -} -``` - - -### Class: Request - -An HTTP(S) request containing information about URL, method, headers, and the body. This class implements the [Body](#iface-body) interface. - -Due to the nature of Node.js, the following properties are not implemented at this moment: - -- `type` -- `destination` -- `referrer` -- `referrerPolicy` -- `mode` -- `credentials` -- `cache` -- `integrity` -- `keepalive` - -The following node-fetch extension properties are provided: - -- `follow` -- `compress` -- `counter` -- `agent` - -See [options](#fetch-options) for exact meaning of these extensions. - -#### new Request(input[, options]) - -*(spec-compliant)* - -- `input` A string representing a URL, or another `Request` (which will be cloned) -- `options` [Options][#fetch-options] for the HTTP(S) request - -Constructs a new `Request` object. The constructor is identical to that in the [browser](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request). - -In most cases, directly `fetch(url, options)` is simpler than creating a `Request` object. - - -### Class: Response - -An HTTP(S) response. This class implements the [Body](#iface-body) interface. - -The following properties are not implemented in node-fetch at this moment: - -- `Response.error()` -- `Response.redirect()` -- `type` -- `trailer` - -#### new Response([body[, options]]) - -*(spec-compliant)* - -- `body` A `String` or [`Readable` stream][node-readable] -- `options` A [`ResponseInit`][response-init] options dictionary - -Constructs a new `Response` object. The constructor is identical to that in the [browser](https://developer.mozilla.org/en-US/docs/Web/API/Response/Response). - -Because Node.js does not implement service workers (for which this class was designed), one rarely has to construct a `Response` directly. - -#### response.ok - -*(spec-compliant)* - -Convenience property representing if the request ended normally. Will evaluate to true if the response status was greater than or equal to 200 but smaller than 300. - -#### response.redirected - -*(spec-compliant)* - -Convenience property representing if the request has been redirected at least once. Will evaluate to true if the internal redirect counter is greater than 0. - - -### Class: Headers - -This class allows manipulating and iterating over a set of HTTP headers. All methods specified in the [Fetch Standard][whatwg-fetch] are implemented. - -#### new Headers([init]) - -*(spec-compliant)* - -- `init` Optional argument to pre-fill the `Headers` object - -Construct a new `Headers` object. `init` can be either `null`, a `Headers` object, an key-value map object or any iterable object. - -```js -// Example adapted from https://fetch.spec.whatwg.org/#example-headers-class - -const meta = { - 'Content-Type': 'text/xml', - 'Breaking-Bad': '<3' -}; -const headers = new Headers(meta); - -// The above is equivalent to -const meta = [ - [ 'Content-Type', 'text/xml' ], - [ 'Breaking-Bad', '<3' ] -]; -const headers = new Headers(meta); - -// You can in fact use any iterable objects, like a Map or even another Headers -const meta = new Map(); -meta.set('Content-Type', 'text/xml'); -meta.set('Breaking-Bad', '<3'); -const headers = new Headers(meta); -const copyOfHeaders = new Headers(headers); -``` - - -### Interface: Body - -`Body` is an abstract interface with methods that are applicable to both `Request` and `Response` classes. - -The following methods are not yet implemented in node-fetch at this moment: - -- `formData()` - -#### body.body - -*(deviation from spec)* - -* Node.js [`Readable` stream][node-readable] - -Data are encapsulated in the `Body` object. Note that while the [Fetch Standard][whatwg-fetch] requires the property to always be a WHATWG `ReadableStream`, in node-fetch it is a Node.js [`Readable` stream][node-readable]. - -#### body.bodyUsed - -*(spec-compliant)* - -* `Boolean` - -A boolean property for if this body has been consumed. Per the specs, a consumed body cannot be used again. - -#### body.arrayBuffer() -#### body.blob() -#### body.json() -#### body.text() - -*(spec-compliant)* - -* Returns: Promise - -Consume the body and return a promise that will resolve to one of these formats. - -#### body.buffer() - -*(node-fetch extension)* - -* Returns: Promise<Buffer> - -Consume the body and return a promise that will resolve to a Buffer. - -#### body.textConverted() - -*(node-fetch extension)* - -* Returns: Promise<String> - -Identical to `body.text()`, except instead of always converting to UTF-8, encoding sniffing will be performed and text converted to UTF-8 if possible. - -(This API requires an optional dependency of the npm package [encoding](https://www.npmjs.com/package/encoding), which you need to install manually. `webpack` users may see [a warning message](https://github.com/bitinn/node-fetch/issues/412#issuecomment-379007792) due to this optional dependency.) - - -### Class: FetchError - -*(node-fetch extension)* - -An operational error in the fetching process. See [ERROR-HANDLING.md][] for more info. - - -### Class: AbortError - -*(node-fetch extension)* - -An Error thrown when the request is aborted in response to an `AbortSignal`'s `abort` event. It has a `name` property of `AbortError`. See [ERROR-HANDLING.MD][] for more info. - -## Acknowledgement - -Thanks to [github/fetch](https://github.com/github/fetch) for providing a solid implementation reference. - -`node-fetch` v1 was maintained by [@bitinn](https://github.com/bitinn); v2 was maintained by [@TimothyGu](https://github.com/timothygu), [@bitinn](https://github.com/bitinn) and [@jimmywarting](https://github.com/jimmywarting); v2 readme is written by [@jkantr](https://github.com/jkantr). - -## License - -MIT - -[npm-image]: https://flat.badgen.net/npm/v/node-fetch -[npm-url]: https://www.npmjs.com/package/node-fetch -[travis-image]: https://flat.badgen.net/travis/bitinn/node-fetch -[travis-url]: https://travis-ci.org/bitinn/node-fetch -[codecov-image]: https://flat.badgen.net/codecov/c/github/bitinn/node-fetch/master -[codecov-url]: https://codecov.io/gh/bitinn/node-fetch -[install-size-image]: https://flat.badgen.net/packagephobia/install/node-fetch -[install-size-url]: https://packagephobia.now.sh/result?p=node-fetch -[discord-image]: https://img.shields.io/discord/619915844268326952?color=%237289DA&label=Discord&style=flat-square -[discord-url]: https://discord.gg/Zxbndcm -[opencollective-image]: https://opencollective.com/node-fetch/backers.svg -[opencollective-url]: https://opencollective.com/node-fetch -[whatwg-fetch]: https://fetch.spec.whatwg.org/ -[response-init]: https://fetch.spec.whatwg.org/#responseinit -[node-readable]: https://nodejs.org/api/stream.html#stream_readable_streams -[mdn-headers]: https://developer.mozilla.org/en-US/docs/Web/API/Headers -[LIMITS.md]: https://github.com/bitinn/node-fetch/blob/master/LIMITS.md -[ERROR-HANDLING.md]: https://github.com/bitinn/node-fetch/blob/master/ERROR-HANDLING.md -[UPGRADE-GUIDE.md]: https://github.com/bitinn/node-fetch/blob/master/UPGRADE-GUIDE.md diff --git a/reverse_engineering/node_modules/node-fetch/browser.js b/reverse_engineering/node_modules/node-fetch/browser.js deleted file mode 100644 index 83c54c5..0000000 --- a/reverse_engineering/node_modules/node-fetch/browser.js +++ /dev/null @@ -1,25 +0,0 @@ -"use strict"; - -// ref: https://github.com/tc39/proposal-global -var getGlobal = function () { - // the only reliable means to get the global object is - // `Function('return this')()` - // However, this causes CSP violations in Chrome apps. - if (typeof self !== 'undefined') { return self; } - if (typeof window !== 'undefined') { return window; } - if (typeof global !== 'undefined') { return global; } - throw new Error('unable to locate global object'); -} - -var global = getGlobal(); - -module.exports = exports = global.fetch; - -// Needed for TypeScript and Webpack. -if (global.fetch) { - exports.default = global.fetch.bind(global); -} - -exports.Headers = global.Headers; -exports.Request = global.Request; -exports.Response = global.Response; \ No newline at end of file diff --git a/reverse_engineering/node_modules/node-fetch/lib/index.es.js b/reverse_engineering/node_modules/node-fetch/lib/index.es.js deleted file mode 100644 index 61906c9..0000000 --- a/reverse_engineering/node_modules/node-fetch/lib/index.es.js +++ /dev/null @@ -1,1640 +0,0 @@ -process.emitWarning("The .es.js file is deprecated. Use .mjs instead."); - -import Stream from 'stream'; -import http from 'http'; -import Url from 'url'; -import https from 'https'; -import zlib from 'zlib'; - -// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js - -// fix for "Readable" isn't a named export issue -const Readable = Stream.Readable; - -const BUFFER = Symbol('buffer'); -const TYPE = Symbol('type'); - -class Blob { - constructor() { - this[TYPE] = ''; - - const blobParts = arguments[0]; - const options = arguments[1]; - - const buffers = []; - let size = 0; - - if (blobParts) { - const a = blobParts; - const length = Number(a.length); - for (let i = 0; i < length; i++) { - const element = a[i]; - let buffer; - if (element instanceof Buffer) { - buffer = element; - } else if (ArrayBuffer.isView(element)) { - buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength); - } else if (element instanceof ArrayBuffer) { - buffer = Buffer.from(element); - } else if (element instanceof Blob) { - buffer = element[BUFFER]; - } else { - buffer = Buffer.from(typeof element === 'string' ? element : String(element)); - } - size += buffer.length; - buffers.push(buffer); - } - } - - this[BUFFER] = Buffer.concat(buffers); - - let type = options && options.type !== undefined && String(options.type).toLowerCase(); - if (type && !/[^\u0020-\u007E]/.test(type)) { - this[TYPE] = type; - } - } - get size() { - return this[BUFFER].length; - } - get type() { - return this[TYPE]; - } - text() { - return Promise.resolve(this[BUFFER].toString()); - } - arrayBuffer() { - const buf = this[BUFFER]; - const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); - return Promise.resolve(ab); - } - stream() { - const readable = new Readable(); - readable._read = function () {}; - readable.push(this[BUFFER]); - readable.push(null); - return readable; - } - toString() { - return '[object Blob]'; - } - slice() { - const size = this.size; - - const start = arguments[0]; - const end = arguments[1]; - let relativeStart, relativeEnd; - if (start === undefined) { - relativeStart = 0; - } else if (start < 0) { - relativeStart = Math.max(size + start, 0); - } else { - relativeStart = Math.min(start, size); - } - if (end === undefined) { - relativeEnd = size; - } else if (end < 0) { - relativeEnd = Math.max(size + end, 0); - } else { - relativeEnd = Math.min(end, size); - } - const span = Math.max(relativeEnd - relativeStart, 0); - - const buffer = this[BUFFER]; - const slicedBuffer = buffer.slice(relativeStart, relativeStart + span); - const blob = new Blob([], { type: arguments[2] }); - blob[BUFFER] = slicedBuffer; - return blob; - } -} - -Object.defineProperties(Blob.prototype, { - size: { enumerable: true }, - type: { enumerable: true }, - slice: { enumerable: true } -}); - -Object.defineProperty(Blob.prototype, Symbol.toStringTag, { - value: 'Blob', - writable: false, - enumerable: false, - configurable: true -}); - -/** - * fetch-error.js - * - * FetchError interface for operational errors - */ - -/** - * Create FetchError instance - * - * @param String message Error message for human - * @param String type Error type for machine - * @param String systemError For Node.js system error - * @return FetchError - */ -function FetchError(message, type, systemError) { - Error.call(this, message); - - this.message = message; - this.type = type; - - // when err.type is `system`, err.code contains system error code - if (systemError) { - this.code = this.errno = systemError.code; - } - - // hide custom error implementation details from end-users - Error.captureStackTrace(this, this.constructor); -} - -FetchError.prototype = Object.create(Error.prototype); -FetchError.prototype.constructor = FetchError; -FetchError.prototype.name = 'FetchError'; - -let convert; -try { - convert = require('encoding').convert; -} catch (e) {} - -const INTERNALS = Symbol('Body internals'); - -// fix an issue where "PassThrough" isn't a named export for node <10 -const PassThrough = Stream.PassThrough; - -/** - * Body mixin - * - * Ref: https://fetch.spec.whatwg.org/#body - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ -function Body(body) { - var _this = this; - - var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, - _ref$size = _ref.size; - - let size = _ref$size === undefined ? 0 : _ref$size; - var _ref$timeout = _ref.timeout; - let timeout = _ref$timeout === undefined ? 0 : _ref$timeout; - - if (body == null) { - // body is undefined or null - body = null; - } else if (isURLSearchParams(body)) { - // body is a URLSearchParams - body = Buffer.from(body.toString()); - } else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') { - // body is ArrayBuffer - body = Buffer.from(body); - } else if (ArrayBuffer.isView(body)) { - // body is ArrayBufferView - body = Buffer.from(body.buffer, body.byteOffset, body.byteLength); - } else if (body instanceof Stream) ; else { - // none of the above - // coerce to string then buffer - body = Buffer.from(String(body)); - } - this[INTERNALS] = { - body, - disturbed: false, - error: null - }; - this.size = size; - this.timeout = timeout; - - if (body instanceof Stream) { - body.on('error', function (err) { - const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err); - _this[INTERNALS].error = error; - }); - } -} - -Body.prototype = { - get body() { - return this[INTERNALS].body; - }, - - get bodyUsed() { - return this[INTERNALS].disturbed; - }, - - /** - * Decode response as ArrayBuffer - * - * @return Promise - */ - arrayBuffer() { - return consumeBody.call(this).then(function (buf) { - return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); - }); - }, - - /** - * Return raw response as Blob - * - * @return Promise - */ - blob() { - let ct = this.headers && this.headers.get('content-type') || ''; - return consumeBody.call(this).then(function (buf) { - return Object.assign( - // Prevent copying - new Blob([], { - type: ct.toLowerCase() - }), { - [BUFFER]: buf - }); - }); - }, - - /** - * Decode response as json - * - * @return Promise - */ - json() { - var _this2 = this; - - return consumeBody.call(this).then(function (buffer) { - try { - return JSON.parse(buffer.toString()); - } catch (err) { - return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json')); - } - }); - }, - - /** - * Decode response as text - * - * @return Promise - */ - text() { - return consumeBody.call(this).then(function (buffer) { - return buffer.toString(); - }); - }, - - /** - * Decode response as buffer (non-spec api) - * - * @return Promise - */ - buffer() { - return consumeBody.call(this); - }, - - /** - * Decode response as text, while automatically detecting the encoding and - * trying to decode to UTF-8 (non-spec api) - * - * @return Promise - */ - textConverted() { - var _this3 = this; - - return consumeBody.call(this).then(function (buffer) { - return convertBody(buffer, _this3.headers); - }); - } -}; - -// In browsers, all properties are enumerable. -Object.defineProperties(Body.prototype, { - body: { enumerable: true }, - bodyUsed: { enumerable: true }, - arrayBuffer: { enumerable: true }, - blob: { enumerable: true }, - json: { enumerable: true }, - text: { enumerable: true } -}); - -Body.mixIn = function (proto) { - for (const name of Object.getOwnPropertyNames(Body.prototype)) { - // istanbul ignore else: future proof - if (!(name in proto)) { - const desc = Object.getOwnPropertyDescriptor(Body.prototype, name); - Object.defineProperty(proto, name, desc); - } - } -}; - -/** - * Consume and convert an entire Body to a Buffer. - * - * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body - * - * @return Promise - */ -function consumeBody() { - var _this4 = this; - - if (this[INTERNALS].disturbed) { - return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`)); - } - - this[INTERNALS].disturbed = true; - - if (this[INTERNALS].error) { - return Body.Promise.reject(this[INTERNALS].error); - } - - let body = this.body; - - // body is null - if (body === null) { - return Body.Promise.resolve(Buffer.alloc(0)); - } - - // body is blob - if (isBlob(body)) { - body = body.stream(); - } - - // body is buffer - if (Buffer.isBuffer(body)) { - return Body.Promise.resolve(body); - } - - // istanbul ignore if: should never happen - if (!(body instanceof Stream)) { - return Body.Promise.resolve(Buffer.alloc(0)); - } - - // body is stream - // get ready to actually consume the body - let accum = []; - let accumBytes = 0; - let abort = false; - - return new Body.Promise(function (resolve, reject) { - let resTimeout; - - // allow timeout on slow response body - if (_this4.timeout) { - resTimeout = setTimeout(function () { - abort = true; - reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout')); - }, _this4.timeout); - } - - // handle stream errors - body.on('error', function (err) { - if (err.name === 'AbortError') { - // if the request was aborted, reject with this Error - abort = true; - reject(err); - } else { - // other errors, such as incorrect content-encoding - reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err)); - } - }); - - body.on('data', function (chunk) { - if (abort || chunk === null) { - return; - } - - if (_this4.size && accumBytes + chunk.length > _this4.size) { - abort = true; - reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size')); - return; - } - - accumBytes += chunk.length; - accum.push(chunk); - }); - - body.on('end', function () { - if (abort) { - return; - } - - clearTimeout(resTimeout); - - try { - resolve(Buffer.concat(accum, accumBytes)); - } catch (err) { - // handle streams that have accumulated too much data (issue #414) - reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err)); - } - }); - }); -} - -/** - * Detect buffer encoding and convert to target encoding - * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding - * - * @param Buffer buffer Incoming buffer - * @param String encoding Target encoding - * @return String - */ -function convertBody(buffer, headers) { - if (typeof convert !== 'function') { - throw new Error('The package `encoding` must be installed to use the textConverted() function'); - } - - const ct = headers.get('content-type'); - let charset = 'utf-8'; - let res, str; - - // header - if (ct) { - res = /charset=([^;]*)/i.exec(ct); - } - - // no charset in content type, peek at response body for at most 1024 bytes - str = buffer.slice(0, 1024).toString(); - - // html5 - if (!res && str) { - res = / 0 && arguments[0] !== undefined ? arguments[0] : undefined; - - this[MAP] = Object.create(null); - - if (init instanceof Headers) { - const rawHeaders = init.raw(); - const headerNames = Object.keys(rawHeaders); - - for (const headerName of headerNames) { - for (const value of rawHeaders[headerName]) { - this.append(headerName, value); - } - } - - return; - } - - // We don't worry about converting prop to ByteString here as append() - // will handle it. - if (init == null) ; else if (typeof init === 'object') { - const method = init[Symbol.iterator]; - if (method != null) { - if (typeof method !== 'function') { - throw new TypeError('Header pairs must be iterable'); - } - - // sequence> - // Note: per spec we have to first exhaust the lists then process them - const pairs = []; - for (const pair of init) { - if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') { - throw new TypeError('Each header pair must be iterable'); - } - pairs.push(Array.from(pair)); - } - - for (const pair of pairs) { - if (pair.length !== 2) { - throw new TypeError('Each header pair must be a name/value tuple'); - } - this.append(pair[0], pair[1]); - } - } else { - // record - for (const key of Object.keys(init)) { - const value = init[key]; - this.append(key, value); - } - } - } else { - throw new TypeError('Provided initializer must be an object'); - } - } - - /** - * Return combined header value given name - * - * @param String name Header name - * @return Mixed - */ - get(name) { - name = `${name}`; - validateName(name); - const key = find(this[MAP], name); - if (key === undefined) { - return null; - } - - return this[MAP][key].join(', '); - } - - /** - * Iterate over all headers - * - * @param Function callback Executed for each item with parameters (value, name, thisArg) - * @param Boolean thisArg `this` context for callback function - * @return Void - */ - forEach(callback) { - let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; - - let pairs = getHeaders(this); - let i = 0; - while (i < pairs.length) { - var _pairs$i = pairs[i]; - const name = _pairs$i[0], - value = _pairs$i[1]; - - callback.call(thisArg, value, name, this); - pairs = getHeaders(this); - i++; - } - } - - /** - * Overwrite header values given name - * - * @param String name Header name - * @param String value Header value - * @return Void - */ - set(name, value) { - name = `${name}`; - value = `${value}`; - validateName(name); - validateValue(value); - const key = find(this[MAP], name); - this[MAP][key !== undefined ? key : name] = [value]; - } - - /** - * Append a value onto existing header - * - * @param String name Header name - * @param String value Header value - * @return Void - */ - append(name, value) { - name = `${name}`; - value = `${value}`; - validateName(name); - validateValue(value); - const key = find(this[MAP], name); - if (key !== undefined) { - this[MAP][key].push(value); - } else { - this[MAP][name] = [value]; - } - } - - /** - * Check for header name existence - * - * @param String name Header name - * @return Boolean - */ - has(name) { - name = `${name}`; - validateName(name); - return find(this[MAP], name) !== undefined; - } - - /** - * Delete all header values given name - * - * @param String name Header name - * @return Void - */ - delete(name) { - name = `${name}`; - validateName(name); - const key = find(this[MAP], name); - if (key !== undefined) { - delete this[MAP][key]; - } - } - - /** - * Return raw headers (non-spec api) - * - * @return Object - */ - raw() { - return this[MAP]; - } - - /** - * Get an iterator on keys. - * - * @return Iterator - */ - keys() { - return createHeadersIterator(this, 'key'); - } - - /** - * Get an iterator on values. - * - * @return Iterator - */ - values() { - return createHeadersIterator(this, 'value'); - } - - /** - * Get an iterator on entries. - * - * This is the default iterator of the Headers object. - * - * @return Iterator - */ - [Symbol.iterator]() { - return createHeadersIterator(this, 'key+value'); - } -} -Headers.prototype.entries = Headers.prototype[Symbol.iterator]; - -Object.defineProperty(Headers.prototype, Symbol.toStringTag, { - value: 'Headers', - writable: false, - enumerable: false, - configurable: true -}); - -Object.defineProperties(Headers.prototype, { - get: { enumerable: true }, - forEach: { enumerable: true }, - set: { enumerable: true }, - append: { enumerable: true }, - has: { enumerable: true }, - delete: { enumerable: true }, - keys: { enumerable: true }, - values: { enumerable: true }, - entries: { enumerable: true } -}); - -function getHeaders(headers) { - let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value'; - - const keys = Object.keys(headers[MAP]).sort(); - return keys.map(kind === 'key' ? function (k) { - return k.toLowerCase(); - } : kind === 'value' ? function (k) { - return headers[MAP][k].join(', '); - } : function (k) { - return [k.toLowerCase(), headers[MAP][k].join(', ')]; - }); -} - -const INTERNAL = Symbol('internal'); - -function createHeadersIterator(target, kind) { - const iterator = Object.create(HeadersIteratorPrototype); - iterator[INTERNAL] = { - target, - kind, - index: 0 - }; - return iterator; -} - -const HeadersIteratorPrototype = Object.setPrototypeOf({ - next() { - // istanbul ignore if - if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) { - throw new TypeError('Value of `this` is not a HeadersIterator'); - } - - var _INTERNAL = this[INTERNAL]; - const target = _INTERNAL.target, - kind = _INTERNAL.kind, - index = _INTERNAL.index; - - const values = getHeaders(target, kind); - const len = values.length; - if (index >= len) { - return { - value: undefined, - done: true - }; - } - - this[INTERNAL].index = index + 1; - - return { - value: values[index], - done: false - }; - } -}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))); - -Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, { - value: 'HeadersIterator', - writable: false, - enumerable: false, - configurable: true -}); - -/** - * Export the Headers object in a form that Node.js can consume. - * - * @param Headers headers - * @return Object - */ -function exportNodeCompatibleHeaders(headers) { - const obj = Object.assign({ __proto__: null }, headers[MAP]); - - // http.request() only supports string as Host header. This hack makes - // specifying custom Host header possible. - const hostHeaderKey = find(headers[MAP], 'Host'); - if (hostHeaderKey !== undefined) { - obj[hostHeaderKey] = obj[hostHeaderKey][0]; - } - - return obj; -} - -/** - * Create a Headers object from an object of headers, ignoring those that do - * not conform to HTTP grammar productions. - * - * @param Object obj Object of headers - * @return Headers - */ -function createHeadersLenient(obj) { - const headers = new Headers(); - for (const name of Object.keys(obj)) { - if (invalidTokenRegex.test(name)) { - continue; - } - if (Array.isArray(obj[name])) { - for (const val of obj[name]) { - if (invalidHeaderCharRegex.test(val)) { - continue; - } - if (headers[MAP][name] === undefined) { - headers[MAP][name] = [val]; - } else { - headers[MAP][name].push(val); - } - } - } else if (!invalidHeaderCharRegex.test(obj[name])) { - headers[MAP][name] = [obj[name]]; - } - } - return headers; -} - -const INTERNALS$1 = Symbol('Response internals'); - -// fix an issue where "STATUS_CODES" aren't a named export for node <10 -const STATUS_CODES = http.STATUS_CODES; - -/** - * Response class - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ -class Response { - constructor() { - let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - Body.call(this, body, opts); - - const status = opts.status || 200; - const headers = new Headers(opts.headers); - - if (body != null && !headers.has('Content-Type')) { - const contentType = extractContentType(body); - if (contentType) { - headers.append('Content-Type', contentType); - } - } - - this[INTERNALS$1] = { - url: opts.url, - status, - statusText: opts.statusText || STATUS_CODES[status], - headers, - counter: opts.counter - }; - } - - get url() { - return this[INTERNALS$1].url || ''; - } - - get status() { - return this[INTERNALS$1].status; - } - - /** - * Convenience property representing if the request ended normally - */ - get ok() { - return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300; - } - - get redirected() { - return this[INTERNALS$1].counter > 0; - } - - get statusText() { - return this[INTERNALS$1].statusText; - } - - get headers() { - return this[INTERNALS$1].headers; - } - - /** - * Clone this response - * - * @return Response - */ - clone() { - return new Response(clone(this), { - url: this.url, - status: this.status, - statusText: this.statusText, - headers: this.headers, - ok: this.ok, - redirected: this.redirected - }); - } -} - -Body.mixIn(Response.prototype); - -Object.defineProperties(Response.prototype, { - url: { enumerable: true }, - status: { enumerable: true }, - ok: { enumerable: true }, - redirected: { enumerable: true }, - statusText: { enumerable: true }, - headers: { enumerable: true }, - clone: { enumerable: true } -}); - -Object.defineProperty(Response.prototype, Symbol.toStringTag, { - value: 'Response', - writable: false, - enumerable: false, - configurable: true -}); - -const INTERNALS$2 = Symbol('Request internals'); - -// fix an issue where "format", "parse" aren't a named export for node <10 -const parse_url = Url.parse; -const format_url = Url.format; - -const streamDestructionSupported = 'destroy' in Stream.Readable.prototype; - -/** - * Check if a value is an instance of Request. - * - * @param Mixed input - * @return Boolean - */ -function isRequest(input) { - return typeof input === 'object' && typeof input[INTERNALS$2] === 'object'; -} - -function isAbortSignal(signal) { - const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal); - return !!(proto && proto.constructor.name === 'AbortSignal'); -} - -/** - * Request class - * - * @param Mixed input Url or Request instance - * @param Object init Custom options - * @return Void - */ -class Request { - constructor(input) { - let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - let parsedURL; - - // normalize input - if (!isRequest(input)) { - if (input && input.href) { - // in order to support Node.js' Url objects; though WHATWG's URL objects - // will fall into this branch also (since their `toString()` will return - // `href` property anyway) - parsedURL = parse_url(input.href); - } else { - // coerce input to a string before attempting to parse - parsedURL = parse_url(`${input}`); - } - input = {}; - } else { - parsedURL = parse_url(input.url); - } - - let method = init.method || input.method || 'GET'; - method = method.toUpperCase(); - - if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) { - throw new TypeError('Request with GET/HEAD method cannot have body'); - } - - let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null; - - Body.call(this, inputBody, { - timeout: init.timeout || input.timeout || 0, - size: init.size || input.size || 0 - }); - - const headers = new Headers(init.headers || input.headers || {}); - - if (inputBody != null && !headers.has('Content-Type')) { - const contentType = extractContentType(inputBody); - if (contentType) { - headers.append('Content-Type', contentType); - } - } - - let signal = isRequest(input) ? input.signal : null; - if ('signal' in init) signal = init.signal; - - if (signal != null && !isAbortSignal(signal)) { - throw new TypeError('Expected signal to be an instanceof AbortSignal'); - } - - this[INTERNALS$2] = { - method, - redirect: init.redirect || input.redirect || 'follow', - headers, - parsedURL, - signal - }; - - // node-fetch-only options - this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20; - this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true; - this.counter = init.counter || input.counter || 0; - this.agent = init.agent || input.agent; - } - - get method() { - return this[INTERNALS$2].method; - } - - get url() { - return format_url(this[INTERNALS$2].parsedURL); - } - - get headers() { - return this[INTERNALS$2].headers; - } - - get redirect() { - return this[INTERNALS$2].redirect; - } - - get signal() { - return this[INTERNALS$2].signal; - } - - /** - * Clone this request - * - * @return Request - */ - clone() { - return new Request(this); - } -} - -Body.mixIn(Request.prototype); - -Object.defineProperty(Request.prototype, Symbol.toStringTag, { - value: 'Request', - writable: false, - enumerable: false, - configurable: true -}); - -Object.defineProperties(Request.prototype, { - method: { enumerable: true }, - url: { enumerable: true }, - headers: { enumerable: true }, - redirect: { enumerable: true }, - clone: { enumerable: true }, - signal: { enumerable: true } -}); - -/** - * Convert a Request to Node.js http request options. - * - * @param Request A Request instance - * @return Object The options object to be passed to http.request - */ -function getNodeRequestOptions(request) { - const parsedURL = request[INTERNALS$2].parsedURL; - const headers = new Headers(request[INTERNALS$2].headers); - - // fetch step 1.3 - if (!headers.has('Accept')) { - headers.set('Accept', '*/*'); - } - - // Basic fetch - if (!parsedURL.protocol || !parsedURL.hostname) { - throw new TypeError('Only absolute URLs are supported'); - } - - if (!/^https?:$/.test(parsedURL.protocol)) { - throw new TypeError('Only HTTP(S) protocols are supported'); - } - - if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) { - throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8'); - } - - // HTTP-network-or-cache fetch steps 2.4-2.7 - let contentLengthValue = null; - if (request.body == null && /^(POST|PUT)$/i.test(request.method)) { - contentLengthValue = '0'; - } - if (request.body != null) { - const totalBytes = getTotalBytes(request); - if (typeof totalBytes === 'number') { - contentLengthValue = String(totalBytes); - } - } - if (contentLengthValue) { - headers.set('Content-Length', contentLengthValue); - } - - // HTTP-network-or-cache fetch step 2.11 - if (!headers.has('User-Agent')) { - headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)'); - } - - // HTTP-network-or-cache fetch step 2.15 - if (request.compress && !headers.has('Accept-Encoding')) { - headers.set('Accept-Encoding', 'gzip,deflate'); - } - - let agent = request.agent; - if (typeof agent === 'function') { - agent = agent(parsedURL); - } - - if (!headers.has('Connection') && !agent) { - headers.set('Connection', 'close'); - } - - // HTTP-network fetch step 4.2 - // chunked encoding is handled by Node.js - - return Object.assign({}, parsedURL, { - method: request.method, - headers: exportNodeCompatibleHeaders(headers), - agent - }); -} - -/** - * abort-error.js - * - * AbortError interface for cancelled requests - */ - -/** - * Create AbortError instance - * - * @param String message Error message for human - * @return AbortError - */ -function AbortError(message) { - Error.call(this, message); - - this.type = 'aborted'; - this.message = message; - - // hide custom error implementation details from end-users - Error.captureStackTrace(this, this.constructor); -} - -AbortError.prototype = Object.create(Error.prototype); -AbortError.prototype.constructor = AbortError; -AbortError.prototype.name = 'AbortError'; - -// fix an issue where "PassThrough", "resolve" aren't a named export for node <10 -const PassThrough$1 = Stream.PassThrough; -const resolve_url = Url.resolve; - -/** - * Fetch function - * - * @param Mixed url Absolute url or Request instance - * @param Object opts Fetch options - * @return Promise - */ -function fetch(url, opts) { - - // allow custom promise - if (!fetch.Promise) { - throw new Error('native promise missing, set fetch.Promise to your favorite alternative'); - } - - Body.Promise = fetch.Promise; - - // wrap http.request into fetch - return new fetch.Promise(function (resolve, reject) { - // build request object - const request = new Request(url, opts); - const options = getNodeRequestOptions(request); - - const send = (options.protocol === 'https:' ? https : http).request; - const signal = request.signal; - - let response = null; - - const abort = function abort() { - let error = new AbortError('The user aborted a request.'); - reject(error); - if (request.body && request.body instanceof Stream.Readable) { - request.body.destroy(error); - } - if (!response || !response.body) return; - response.body.emit('error', error); - }; - - if (signal && signal.aborted) { - abort(); - return; - } - - const abortAndFinalize = function abortAndFinalize() { - abort(); - finalize(); - }; - - // send request - const req = send(options); - let reqTimeout; - - if (signal) { - signal.addEventListener('abort', abortAndFinalize); - } - - function finalize() { - req.abort(); - if (signal) signal.removeEventListener('abort', abortAndFinalize); - clearTimeout(reqTimeout); - } - - if (request.timeout) { - req.once('socket', function (socket) { - reqTimeout = setTimeout(function () { - reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout')); - finalize(); - }, request.timeout); - }); - } - - req.on('error', function (err) { - reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err)); - finalize(); - }); - - req.on('response', function (res) { - clearTimeout(reqTimeout); - - const headers = createHeadersLenient(res.headers); - - // HTTP fetch step 5 - if (fetch.isRedirect(res.statusCode)) { - // HTTP fetch step 5.2 - const location = headers.get('Location'); - - // HTTP fetch step 5.3 - const locationURL = location === null ? null : resolve_url(request.url, location); - - // HTTP fetch step 5.5 - switch (request.redirect) { - case 'error': - reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect')); - finalize(); - return; - case 'manual': - // node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL. - if (locationURL !== null) { - // handle corrupted header - try { - headers.set('Location', locationURL); - } catch (err) { - // istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request - reject(err); - } - } - break; - case 'follow': - // HTTP-redirect fetch step 2 - if (locationURL === null) { - break; - } - - // HTTP-redirect fetch step 5 - if (request.counter >= request.follow) { - reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect')); - finalize(); - return; - } - - // HTTP-redirect fetch step 6 (counter increment) - // Create a new Request object. - const requestOpts = { - headers: new Headers(request.headers), - follow: request.follow, - counter: request.counter + 1, - agent: request.agent, - compress: request.compress, - method: request.method, - body: request.body, - signal: request.signal, - timeout: request.timeout, - size: request.size - }; - - // HTTP-redirect fetch step 9 - if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) { - reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect')); - finalize(); - return; - } - - // HTTP-redirect fetch step 11 - if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') { - requestOpts.method = 'GET'; - requestOpts.body = undefined; - requestOpts.headers.delete('content-length'); - } - - // HTTP-redirect fetch step 15 - resolve(fetch(new Request(locationURL, requestOpts))); - finalize(); - return; - } - } - - // prepare response - res.once('end', function () { - if (signal) signal.removeEventListener('abort', abortAndFinalize); - }); - let body = res.pipe(new PassThrough$1()); - - const response_options = { - url: request.url, - status: res.statusCode, - statusText: res.statusMessage, - headers: headers, - size: request.size, - timeout: request.timeout, - counter: request.counter - }; - - // HTTP-network fetch step 12.1.1.3 - const codings = headers.get('Content-Encoding'); - - // HTTP-network fetch step 12.1.1.4: handle content codings - - // in following scenarios we ignore compression support - // 1. compression support is disabled - // 2. HEAD request - // 3. no Content-Encoding header - // 4. no content response (204) - // 5. content not modified response (304) - if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) { - response = new Response(body, response_options); - resolve(response); - return; - } - - // For Node v6+ - // Be less strict when decoding compressed responses, since sometimes - // servers send slightly invalid responses that are still accepted - // by common browsers. - // Always using Z_SYNC_FLUSH is what cURL does. - const zlibOptions = { - flush: zlib.Z_SYNC_FLUSH, - finishFlush: zlib.Z_SYNC_FLUSH - }; - - // for gzip - if (codings == 'gzip' || codings == 'x-gzip') { - body = body.pipe(zlib.createGunzip(zlibOptions)); - response = new Response(body, response_options); - resolve(response); - return; - } - - // for deflate - if (codings == 'deflate' || codings == 'x-deflate') { - // handle the infamous raw deflate response from old servers - // a hack for old IIS and Apache servers - const raw = res.pipe(new PassThrough$1()); - raw.once('data', function (chunk) { - // see http://stackoverflow.com/questions/37519828 - if ((chunk[0] & 0x0F) === 0x08) { - body = body.pipe(zlib.createInflate()); - } else { - body = body.pipe(zlib.createInflateRaw()); - } - response = new Response(body, response_options); - resolve(response); - }); - return; - } - - // for br - if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') { - body = body.pipe(zlib.createBrotliDecompress()); - response = new Response(body, response_options); - resolve(response); - return; - } - - // otherwise, use response as-is - response = new Response(body, response_options); - resolve(response); - }); - - writeToStream(req, request); - }); -} -/** - * Redirect code matching - * - * @param Number code Status code - * @return Boolean - */ -fetch.isRedirect = function (code) { - return code === 301 || code === 302 || code === 303 || code === 307 || code === 308; -}; - -// expose Promise -fetch.Promise = global.Promise; - -export default fetch; -export { Headers, Request, Response, FetchError }; diff --git a/reverse_engineering/node_modules/node-fetch/lib/index.js b/reverse_engineering/node_modules/node-fetch/lib/index.js deleted file mode 100644 index 4b241bf..0000000 --- a/reverse_engineering/node_modules/node-fetch/lib/index.js +++ /dev/null @@ -1,1649 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, '__esModule', { value: true }); - -function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } - -var Stream = _interopDefault(require('stream')); -var http = _interopDefault(require('http')); -var Url = _interopDefault(require('url')); -var https = _interopDefault(require('https')); -var zlib = _interopDefault(require('zlib')); - -// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js - -// fix for "Readable" isn't a named export issue -const Readable = Stream.Readable; - -const BUFFER = Symbol('buffer'); -const TYPE = Symbol('type'); - -class Blob { - constructor() { - this[TYPE] = ''; - - const blobParts = arguments[0]; - const options = arguments[1]; - - const buffers = []; - let size = 0; - - if (blobParts) { - const a = blobParts; - const length = Number(a.length); - for (let i = 0; i < length; i++) { - const element = a[i]; - let buffer; - if (element instanceof Buffer) { - buffer = element; - } else if (ArrayBuffer.isView(element)) { - buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength); - } else if (element instanceof ArrayBuffer) { - buffer = Buffer.from(element); - } else if (element instanceof Blob) { - buffer = element[BUFFER]; - } else { - buffer = Buffer.from(typeof element === 'string' ? element : String(element)); - } - size += buffer.length; - buffers.push(buffer); - } - } - - this[BUFFER] = Buffer.concat(buffers); - - let type = options && options.type !== undefined && String(options.type).toLowerCase(); - if (type && !/[^\u0020-\u007E]/.test(type)) { - this[TYPE] = type; - } - } - get size() { - return this[BUFFER].length; - } - get type() { - return this[TYPE]; - } - text() { - return Promise.resolve(this[BUFFER].toString()); - } - arrayBuffer() { - const buf = this[BUFFER]; - const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); - return Promise.resolve(ab); - } - stream() { - const readable = new Readable(); - readable._read = function () {}; - readable.push(this[BUFFER]); - readable.push(null); - return readable; - } - toString() { - return '[object Blob]'; - } - slice() { - const size = this.size; - - const start = arguments[0]; - const end = arguments[1]; - let relativeStart, relativeEnd; - if (start === undefined) { - relativeStart = 0; - } else if (start < 0) { - relativeStart = Math.max(size + start, 0); - } else { - relativeStart = Math.min(start, size); - } - if (end === undefined) { - relativeEnd = size; - } else if (end < 0) { - relativeEnd = Math.max(size + end, 0); - } else { - relativeEnd = Math.min(end, size); - } - const span = Math.max(relativeEnd - relativeStart, 0); - - const buffer = this[BUFFER]; - const slicedBuffer = buffer.slice(relativeStart, relativeStart + span); - const blob = new Blob([], { type: arguments[2] }); - blob[BUFFER] = slicedBuffer; - return blob; - } -} - -Object.defineProperties(Blob.prototype, { - size: { enumerable: true }, - type: { enumerable: true }, - slice: { enumerable: true } -}); - -Object.defineProperty(Blob.prototype, Symbol.toStringTag, { - value: 'Blob', - writable: false, - enumerable: false, - configurable: true -}); - -/** - * fetch-error.js - * - * FetchError interface for operational errors - */ - -/** - * Create FetchError instance - * - * @param String message Error message for human - * @param String type Error type for machine - * @param String systemError For Node.js system error - * @return FetchError - */ -function FetchError(message, type, systemError) { - Error.call(this, message); - - this.message = message; - this.type = type; - - // when err.type is `system`, err.code contains system error code - if (systemError) { - this.code = this.errno = systemError.code; - } - - // hide custom error implementation details from end-users - Error.captureStackTrace(this, this.constructor); -} - -FetchError.prototype = Object.create(Error.prototype); -FetchError.prototype.constructor = FetchError; -FetchError.prototype.name = 'FetchError'; - -let convert; -try { - convert = require('encoding').convert; -} catch (e) {} - -const INTERNALS = Symbol('Body internals'); - -// fix an issue where "PassThrough" isn't a named export for node <10 -const PassThrough = Stream.PassThrough; - -/** - * Body mixin - * - * Ref: https://fetch.spec.whatwg.org/#body - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ -function Body(body) { - var _this = this; - - var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, - _ref$size = _ref.size; - - let size = _ref$size === undefined ? 0 : _ref$size; - var _ref$timeout = _ref.timeout; - let timeout = _ref$timeout === undefined ? 0 : _ref$timeout; - - if (body == null) { - // body is undefined or null - body = null; - } else if (isURLSearchParams(body)) { - // body is a URLSearchParams - body = Buffer.from(body.toString()); - } else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') { - // body is ArrayBuffer - body = Buffer.from(body); - } else if (ArrayBuffer.isView(body)) { - // body is ArrayBufferView - body = Buffer.from(body.buffer, body.byteOffset, body.byteLength); - } else if (body instanceof Stream) ; else { - // none of the above - // coerce to string then buffer - body = Buffer.from(String(body)); - } - this[INTERNALS] = { - body, - disturbed: false, - error: null - }; - this.size = size; - this.timeout = timeout; - - if (body instanceof Stream) { - body.on('error', function (err) { - const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err); - _this[INTERNALS].error = error; - }); - } -} - -Body.prototype = { - get body() { - return this[INTERNALS].body; - }, - - get bodyUsed() { - return this[INTERNALS].disturbed; - }, - - /** - * Decode response as ArrayBuffer - * - * @return Promise - */ - arrayBuffer() { - return consumeBody.call(this).then(function (buf) { - return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); - }); - }, - - /** - * Return raw response as Blob - * - * @return Promise - */ - blob() { - let ct = this.headers && this.headers.get('content-type') || ''; - return consumeBody.call(this).then(function (buf) { - return Object.assign( - // Prevent copying - new Blob([], { - type: ct.toLowerCase() - }), { - [BUFFER]: buf - }); - }); - }, - - /** - * Decode response as json - * - * @return Promise - */ - json() { - var _this2 = this; - - return consumeBody.call(this).then(function (buffer) { - try { - return JSON.parse(buffer.toString()); - } catch (err) { - return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json')); - } - }); - }, - - /** - * Decode response as text - * - * @return Promise - */ - text() { - return consumeBody.call(this).then(function (buffer) { - return buffer.toString(); - }); - }, - - /** - * Decode response as buffer (non-spec api) - * - * @return Promise - */ - buffer() { - return consumeBody.call(this); - }, - - /** - * Decode response as text, while automatically detecting the encoding and - * trying to decode to UTF-8 (non-spec api) - * - * @return Promise - */ - textConverted() { - var _this3 = this; - - return consumeBody.call(this).then(function (buffer) { - return convertBody(buffer, _this3.headers); - }); - } -}; - -// In browsers, all properties are enumerable. -Object.defineProperties(Body.prototype, { - body: { enumerable: true }, - bodyUsed: { enumerable: true }, - arrayBuffer: { enumerable: true }, - blob: { enumerable: true }, - json: { enumerable: true }, - text: { enumerable: true } -}); - -Body.mixIn = function (proto) { - for (const name of Object.getOwnPropertyNames(Body.prototype)) { - // istanbul ignore else: future proof - if (!(name in proto)) { - const desc = Object.getOwnPropertyDescriptor(Body.prototype, name); - Object.defineProperty(proto, name, desc); - } - } -}; - -/** - * Consume and convert an entire Body to a Buffer. - * - * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body - * - * @return Promise - */ -function consumeBody() { - var _this4 = this; - - if (this[INTERNALS].disturbed) { - return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`)); - } - - this[INTERNALS].disturbed = true; - - if (this[INTERNALS].error) { - return Body.Promise.reject(this[INTERNALS].error); - } - - let body = this.body; - - // body is null - if (body === null) { - return Body.Promise.resolve(Buffer.alloc(0)); - } - - // body is blob - if (isBlob(body)) { - body = body.stream(); - } - - // body is buffer - if (Buffer.isBuffer(body)) { - return Body.Promise.resolve(body); - } - - // istanbul ignore if: should never happen - if (!(body instanceof Stream)) { - return Body.Promise.resolve(Buffer.alloc(0)); - } - - // body is stream - // get ready to actually consume the body - let accum = []; - let accumBytes = 0; - let abort = false; - - return new Body.Promise(function (resolve, reject) { - let resTimeout; - - // allow timeout on slow response body - if (_this4.timeout) { - resTimeout = setTimeout(function () { - abort = true; - reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout')); - }, _this4.timeout); - } - - // handle stream errors - body.on('error', function (err) { - if (err.name === 'AbortError') { - // if the request was aborted, reject with this Error - abort = true; - reject(err); - } else { - // other errors, such as incorrect content-encoding - reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err)); - } - }); - - body.on('data', function (chunk) { - if (abort || chunk === null) { - return; - } - - if (_this4.size && accumBytes + chunk.length > _this4.size) { - abort = true; - reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size')); - return; - } - - accumBytes += chunk.length; - accum.push(chunk); - }); - - body.on('end', function () { - if (abort) { - return; - } - - clearTimeout(resTimeout); - - try { - resolve(Buffer.concat(accum, accumBytes)); - } catch (err) { - // handle streams that have accumulated too much data (issue #414) - reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err)); - } - }); - }); -} - -/** - * Detect buffer encoding and convert to target encoding - * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding - * - * @param Buffer buffer Incoming buffer - * @param String encoding Target encoding - * @return String - */ -function convertBody(buffer, headers) { - if (typeof convert !== 'function') { - throw new Error('The package `encoding` must be installed to use the textConverted() function'); - } - - const ct = headers.get('content-type'); - let charset = 'utf-8'; - let res, str; - - // header - if (ct) { - res = /charset=([^;]*)/i.exec(ct); - } - - // no charset in content type, peek at response body for at most 1024 bytes - str = buffer.slice(0, 1024).toString(); - - // html5 - if (!res && str) { - res = / 0 && arguments[0] !== undefined ? arguments[0] : undefined; - - this[MAP] = Object.create(null); - - if (init instanceof Headers) { - const rawHeaders = init.raw(); - const headerNames = Object.keys(rawHeaders); - - for (const headerName of headerNames) { - for (const value of rawHeaders[headerName]) { - this.append(headerName, value); - } - } - - return; - } - - // We don't worry about converting prop to ByteString here as append() - // will handle it. - if (init == null) ; else if (typeof init === 'object') { - const method = init[Symbol.iterator]; - if (method != null) { - if (typeof method !== 'function') { - throw new TypeError('Header pairs must be iterable'); - } - - // sequence> - // Note: per spec we have to first exhaust the lists then process them - const pairs = []; - for (const pair of init) { - if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') { - throw new TypeError('Each header pair must be iterable'); - } - pairs.push(Array.from(pair)); - } - - for (const pair of pairs) { - if (pair.length !== 2) { - throw new TypeError('Each header pair must be a name/value tuple'); - } - this.append(pair[0], pair[1]); - } - } else { - // record - for (const key of Object.keys(init)) { - const value = init[key]; - this.append(key, value); - } - } - } else { - throw new TypeError('Provided initializer must be an object'); - } - } - - /** - * Return combined header value given name - * - * @param String name Header name - * @return Mixed - */ - get(name) { - name = `${name}`; - validateName(name); - const key = find(this[MAP], name); - if (key === undefined) { - return null; - } - - return this[MAP][key].join(', '); - } - - /** - * Iterate over all headers - * - * @param Function callback Executed for each item with parameters (value, name, thisArg) - * @param Boolean thisArg `this` context for callback function - * @return Void - */ - forEach(callback) { - let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; - - let pairs = getHeaders(this); - let i = 0; - while (i < pairs.length) { - var _pairs$i = pairs[i]; - const name = _pairs$i[0], - value = _pairs$i[1]; - - callback.call(thisArg, value, name, this); - pairs = getHeaders(this); - i++; - } - } - - /** - * Overwrite header values given name - * - * @param String name Header name - * @param String value Header value - * @return Void - */ - set(name, value) { - name = `${name}`; - value = `${value}`; - validateName(name); - validateValue(value); - const key = find(this[MAP], name); - this[MAP][key !== undefined ? key : name] = [value]; - } - - /** - * Append a value onto existing header - * - * @param String name Header name - * @param String value Header value - * @return Void - */ - append(name, value) { - name = `${name}`; - value = `${value}`; - validateName(name); - validateValue(value); - const key = find(this[MAP], name); - if (key !== undefined) { - this[MAP][key].push(value); - } else { - this[MAP][name] = [value]; - } - } - - /** - * Check for header name existence - * - * @param String name Header name - * @return Boolean - */ - has(name) { - name = `${name}`; - validateName(name); - return find(this[MAP], name) !== undefined; - } - - /** - * Delete all header values given name - * - * @param String name Header name - * @return Void - */ - delete(name) { - name = `${name}`; - validateName(name); - const key = find(this[MAP], name); - if (key !== undefined) { - delete this[MAP][key]; - } - } - - /** - * Return raw headers (non-spec api) - * - * @return Object - */ - raw() { - return this[MAP]; - } - - /** - * Get an iterator on keys. - * - * @return Iterator - */ - keys() { - return createHeadersIterator(this, 'key'); - } - - /** - * Get an iterator on values. - * - * @return Iterator - */ - values() { - return createHeadersIterator(this, 'value'); - } - - /** - * Get an iterator on entries. - * - * This is the default iterator of the Headers object. - * - * @return Iterator - */ - [Symbol.iterator]() { - return createHeadersIterator(this, 'key+value'); - } -} -Headers.prototype.entries = Headers.prototype[Symbol.iterator]; - -Object.defineProperty(Headers.prototype, Symbol.toStringTag, { - value: 'Headers', - writable: false, - enumerable: false, - configurable: true -}); - -Object.defineProperties(Headers.prototype, { - get: { enumerable: true }, - forEach: { enumerable: true }, - set: { enumerable: true }, - append: { enumerable: true }, - has: { enumerable: true }, - delete: { enumerable: true }, - keys: { enumerable: true }, - values: { enumerable: true }, - entries: { enumerable: true } -}); - -function getHeaders(headers) { - let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value'; - - const keys = Object.keys(headers[MAP]).sort(); - return keys.map(kind === 'key' ? function (k) { - return k.toLowerCase(); - } : kind === 'value' ? function (k) { - return headers[MAP][k].join(', '); - } : function (k) { - return [k.toLowerCase(), headers[MAP][k].join(', ')]; - }); -} - -const INTERNAL = Symbol('internal'); - -function createHeadersIterator(target, kind) { - const iterator = Object.create(HeadersIteratorPrototype); - iterator[INTERNAL] = { - target, - kind, - index: 0 - }; - return iterator; -} - -const HeadersIteratorPrototype = Object.setPrototypeOf({ - next() { - // istanbul ignore if - if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) { - throw new TypeError('Value of `this` is not a HeadersIterator'); - } - - var _INTERNAL = this[INTERNAL]; - const target = _INTERNAL.target, - kind = _INTERNAL.kind, - index = _INTERNAL.index; - - const values = getHeaders(target, kind); - const len = values.length; - if (index >= len) { - return { - value: undefined, - done: true - }; - } - - this[INTERNAL].index = index + 1; - - return { - value: values[index], - done: false - }; - } -}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))); - -Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, { - value: 'HeadersIterator', - writable: false, - enumerable: false, - configurable: true -}); - -/** - * Export the Headers object in a form that Node.js can consume. - * - * @param Headers headers - * @return Object - */ -function exportNodeCompatibleHeaders(headers) { - const obj = Object.assign({ __proto__: null }, headers[MAP]); - - // http.request() only supports string as Host header. This hack makes - // specifying custom Host header possible. - const hostHeaderKey = find(headers[MAP], 'Host'); - if (hostHeaderKey !== undefined) { - obj[hostHeaderKey] = obj[hostHeaderKey][0]; - } - - return obj; -} - -/** - * Create a Headers object from an object of headers, ignoring those that do - * not conform to HTTP grammar productions. - * - * @param Object obj Object of headers - * @return Headers - */ -function createHeadersLenient(obj) { - const headers = new Headers(); - for (const name of Object.keys(obj)) { - if (invalidTokenRegex.test(name)) { - continue; - } - if (Array.isArray(obj[name])) { - for (const val of obj[name]) { - if (invalidHeaderCharRegex.test(val)) { - continue; - } - if (headers[MAP][name] === undefined) { - headers[MAP][name] = [val]; - } else { - headers[MAP][name].push(val); - } - } - } else if (!invalidHeaderCharRegex.test(obj[name])) { - headers[MAP][name] = [obj[name]]; - } - } - return headers; -} - -const INTERNALS$1 = Symbol('Response internals'); - -// fix an issue where "STATUS_CODES" aren't a named export for node <10 -const STATUS_CODES = http.STATUS_CODES; - -/** - * Response class - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ -class Response { - constructor() { - let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - Body.call(this, body, opts); - - const status = opts.status || 200; - const headers = new Headers(opts.headers); - - if (body != null && !headers.has('Content-Type')) { - const contentType = extractContentType(body); - if (contentType) { - headers.append('Content-Type', contentType); - } - } - - this[INTERNALS$1] = { - url: opts.url, - status, - statusText: opts.statusText || STATUS_CODES[status], - headers, - counter: opts.counter - }; - } - - get url() { - return this[INTERNALS$1].url || ''; - } - - get status() { - return this[INTERNALS$1].status; - } - - /** - * Convenience property representing if the request ended normally - */ - get ok() { - return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300; - } - - get redirected() { - return this[INTERNALS$1].counter > 0; - } - - get statusText() { - return this[INTERNALS$1].statusText; - } - - get headers() { - return this[INTERNALS$1].headers; - } - - /** - * Clone this response - * - * @return Response - */ - clone() { - return new Response(clone(this), { - url: this.url, - status: this.status, - statusText: this.statusText, - headers: this.headers, - ok: this.ok, - redirected: this.redirected - }); - } -} - -Body.mixIn(Response.prototype); - -Object.defineProperties(Response.prototype, { - url: { enumerable: true }, - status: { enumerable: true }, - ok: { enumerable: true }, - redirected: { enumerable: true }, - statusText: { enumerable: true }, - headers: { enumerable: true }, - clone: { enumerable: true } -}); - -Object.defineProperty(Response.prototype, Symbol.toStringTag, { - value: 'Response', - writable: false, - enumerable: false, - configurable: true -}); - -const INTERNALS$2 = Symbol('Request internals'); - -// fix an issue where "format", "parse" aren't a named export for node <10 -const parse_url = Url.parse; -const format_url = Url.format; - -const streamDestructionSupported = 'destroy' in Stream.Readable.prototype; - -/** - * Check if a value is an instance of Request. - * - * @param Mixed input - * @return Boolean - */ -function isRequest(input) { - return typeof input === 'object' && typeof input[INTERNALS$2] === 'object'; -} - -function isAbortSignal(signal) { - const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal); - return !!(proto && proto.constructor.name === 'AbortSignal'); -} - -/** - * Request class - * - * @param Mixed input Url or Request instance - * @param Object init Custom options - * @return Void - */ -class Request { - constructor(input) { - let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - let parsedURL; - - // normalize input - if (!isRequest(input)) { - if (input && input.href) { - // in order to support Node.js' Url objects; though WHATWG's URL objects - // will fall into this branch also (since their `toString()` will return - // `href` property anyway) - parsedURL = parse_url(input.href); - } else { - // coerce input to a string before attempting to parse - parsedURL = parse_url(`${input}`); - } - input = {}; - } else { - parsedURL = parse_url(input.url); - } - - let method = init.method || input.method || 'GET'; - method = method.toUpperCase(); - - if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) { - throw new TypeError('Request with GET/HEAD method cannot have body'); - } - - let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null; - - Body.call(this, inputBody, { - timeout: init.timeout || input.timeout || 0, - size: init.size || input.size || 0 - }); - - const headers = new Headers(init.headers || input.headers || {}); - - if (inputBody != null && !headers.has('Content-Type')) { - const contentType = extractContentType(inputBody); - if (contentType) { - headers.append('Content-Type', contentType); - } - } - - let signal = isRequest(input) ? input.signal : null; - if ('signal' in init) signal = init.signal; - - if (signal != null && !isAbortSignal(signal)) { - throw new TypeError('Expected signal to be an instanceof AbortSignal'); - } - - this[INTERNALS$2] = { - method, - redirect: init.redirect || input.redirect || 'follow', - headers, - parsedURL, - signal - }; - - // node-fetch-only options - this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20; - this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true; - this.counter = init.counter || input.counter || 0; - this.agent = init.agent || input.agent; - } - - get method() { - return this[INTERNALS$2].method; - } - - get url() { - return format_url(this[INTERNALS$2].parsedURL); - } - - get headers() { - return this[INTERNALS$2].headers; - } - - get redirect() { - return this[INTERNALS$2].redirect; - } - - get signal() { - return this[INTERNALS$2].signal; - } - - /** - * Clone this request - * - * @return Request - */ - clone() { - return new Request(this); - } -} - -Body.mixIn(Request.prototype); - -Object.defineProperty(Request.prototype, Symbol.toStringTag, { - value: 'Request', - writable: false, - enumerable: false, - configurable: true -}); - -Object.defineProperties(Request.prototype, { - method: { enumerable: true }, - url: { enumerable: true }, - headers: { enumerable: true }, - redirect: { enumerable: true }, - clone: { enumerable: true }, - signal: { enumerable: true } -}); - -/** - * Convert a Request to Node.js http request options. - * - * @param Request A Request instance - * @return Object The options object to be passed to http.request - */ -function getNodeRequestOptions(request) { - const parsedURL = request[INTERNALS$2].parsedURL; - const headers = new Headers(request[INTERNALS$2].headers); - - // fetch step 1.3 - if (!headers.has('Accept')) { - headers.set('Accept', '*/*'); - } - - // Basic fetch - if (!parsedURL.protocol || !parsedURL.hostname) { - throw new TypeError('Only absolute URLs are supported'); - } - - if (!/^https?:$/.test(parsedURL.protocol)) { - throw new TypeError('Only HTTP(S) protocols are supported'); - } - - if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) { - throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8'); - } - - // HTTP-network-or-cache fetch steps 2.4-2.7 - let contentLengthValue = null; - if (request.body == null && /^(POST|PUT)$/i.test(request.method)) { - contentLengthValue = '0'; - } - if (request.body != null) { - const totalBytes = getTotalBytes(request); - if (typeof totalBytes === 'number') { - contentLengthValue = String(totalBytes); - } - } - if (contentLengthValue) { - headers.set('Content-Length', contentLengthValue); - } - - // HTTP-network-or-cache fetch step 2.11 - if (!headers.has('User-Agent')) { - headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)'); - } - - // HTTP-network-or-cache fetch step 2.15 - if (request.compress && !headers.has('Accept-Encoding')) { - headers.set('Accept-Encoding', 'gzip,deflate'); - } - - let agent = request.agent; - if (typeof agent === 'function') { - agent = agent(parsedURL); - } - - if (!headers.has('Connection') && !agent) { - headers.set('Connection', 'close'); - } - - // HTTP-network fetch step 4.2 - // chunked encoding is handled by Node.js - - return Object.assign({}, parsedURL, { - method: request.method, - headers: exportNodeCompatibleHeaders(headers), - agent - }); -} - -/** - * abort-error.js - * - * AbortError interface for cancelled requests - */ - -/** - * Create AbortError instance - * - * @param String message Error message for human - * @return AbortError - */ -function AbortError(message) { - Error.call(this, message); - - this.type = 'aborted'; - this.message = message; - - // hide custom error implementation details from end-users - Error.captureStackTrace(this, this.constructor); -} - -AbortError.prototype = Object.create(Error.prototype); -AbortError.prototype.constructor = AbortError; -AbortError.prototype.name = 'AbortError'; - -// fix an issue where "PassThrough", "resolve" aren't a named export for node <10 -const PassThrough$1 = Stream.PassThrough; -const resolve_url = Url.resolve; - -/** - * Fetch function - * - * @param Mixed url Absolute url or Request instance - * @param Object opts Fetch options - * @return Promise - */ -function fetch(url, opts) { - - // allow custom promise - if (!fetch.Promise) { - throw new Error('native promise missing, set fetch.Promise to your favorite alternative'); - } - - Body.Promise = fetch.Promise; - - // wrap http.request into fetch - return new fetch.Promise(function (resolve, reject) { - // build request object - const request = new Request(url, opts); - const options = getNodeRequestOptions(request); - - const send = (options.protocol === 'https:' ? https : http).request; - const signal = request.signal; - - let response = null; - - const abort = function abort() { - let error = new AbortError('The user aborted a request.'); - reject(error); - if (request.body && request.body instanceof Stream.Readable) { - request.body.destroy(error); - } - if (!response || !response.body) return; - response.body.emit('error', error); - }; - - if (signal && signal.aborted) { - abort(); - return; - } - - const abortAndFinalize = function abortAndFinalize() { - abort(); - finalize(); - }; - - // send request - const req = send(options); - let reqTimeout; - - if (signal) { - signal.addEventListener('abort', abortAndFinalize); - } - - function finalize() { - req.abort(); - if (signal) signal.removeEventListener('abort', abortAndFinalize); - clearTimeout(reqTimeout); - } - - if (request.timeout) { - req.once('socket', function (socket) { - reqTimeout = setTimeout(function () { - reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout')); - finalize(); - }, request.timeout); - }); - } - - req.on('error', function (err) { - reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err)); - finalize(); - }); - - req.on('response', function (res) { - clearTimeout(reqTimeout); - - const headers = createHeadersLenient(res.headers); - - // HTTP fetch step 5 - if (fetch.isRedirect(res.statusCode)) { - // HTTP fetch step 5.2 - const location = headers.get('Location'); - - // HTTP fetch step 5.3 - const locationURL = location === null ? null : resolve_url(request.url, location); - - // HTTP fetch step 5.5 - switch (request.redirect) { - case 'error': - reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect')); - finalize(); - return; - case 'manual': - // node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL. - if (locationURL !== null) { - // handle corrupted header - try { - headers.set('Location', locationURL); - } catch (err) { - // istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request - reject(err); - } - } - break; - case 'follow': - // HTTP-redirect fetch step 2 - if (locationURL === null) { - break; - } - - // HTTP-redirect fetch step 5 - if (request.counter >= request.follow) { - reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect')); - finalize(); - return; - } - - // HTTP-redirect fetch step 6 (counter increment) - // Create a new Request object. - const requestOpts = { - headers: new Headers(request.headers), - follow: request.follow, - counter: request.counter + 1, - agent: request.agent, - compress: request.compress, - method: request.method, - body: request.body, - signal: request.signal, - timeout: request.timeout, - size: request.size - }; - - // HTTP-redirect fetch step 9 - if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) { - reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect')); - finalize(); - return; - } - - // HTTP-redirect fetch step 11 - if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') { - requestOpts.method = 'GET'; - requestOpts.body = undefined; - requestOpts.headers.delete('content-length'); - } - - // HTTP-redirect fetch step 15 - resolve(fetch(new Request(locationURL, requestOpts))); - finalize(); - return; - } - } - - // prepare response - res.once('end', function () { - if (signal) signal.removeEventListener('abort', abortAndFinalize); - }); - let body = res.pipe(new PassThrough$1()); - - const response_options = { - url: request.url, - status: res.statusCode, - statusText: res.statusMessage, - headers: headers, - size: request.size, - timeout: request.timeout, - counter: request.counter - }; - - // HTTP-network fetch step 12.1.1.3 - const codings = headers.get('Content-Encoding'); - - // HTTP-network fetch step 12.1.1.4: handle content codings - - // in following scenarios we ignore compression support - // 1. compression support is disabled - // 2. HEAD request - // 3. no Content-Encoding header - // 4. no content response (204) - // 5. content not modified response (304) - if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) { - response = new Response(body, response_options); - resolve(response); - return; - } - - // For Node v6+ - // Be less strict when decoding compressed responses, since sometimes - // servers send slightly invalid responses that are still accepted - // by common browsers. - // Always using Z_SYNC_FLUSH is what cURL does. - const zlibOptions = { - flush: zlib.Z_SYNC_FLUSH, - finishFlush: zlib.Z_SYNC_FLUSH - }; - - // for gzip - if (codings == 'gzip' || codings == 'x-gzip') { - body = body.pipe(zlib.createGunzip(zlibOptions)); - response = new Response(body, response_options); - resolve(response); - return; - } - - // for deflate - if (codings == 'deflate' || codings == 'x-deflate') { - // handle the infamous raw deflate response from old servers - // a hack for old IIS and Apache servers - const raw = res.pipe(new PassThrough$1()); - raw.once('data', function (chunk) { - // see http://stackoverflow.com/questions/37519828 - if ((chunk[0] & 0x0F) === 0x08) { - body = body.pipe(zlib.createInflate()); - } else { - body = body.pipe(zlib.createInflateRaw()); - } - response = new Response(body, response_options); - resolve(response); - }); - return; - } - - // for br - if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') { - body = body.pipe(zlib.createBrotliDecompress()); - response = new Response(body, response_options); - resolve(response); - return; - } - - // otherwise, use response as-is - response = new Response(body, response_options); - resolve(response); - }); - - writeToStream(req, request); - }); -} -/** - * Redirect code matching - * - * @param Number code Status code - * @return Boolean - */ -fetch.isRedirect = function (code) { - return code === 301 || code === 302 || code === 303 || code === 307 || code === 308; -}; - -// expose Promise -fetch.Promise = global.Promise; - -module.exports = exports = fetch; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.default = exports; -exports.Headers = Headers; -exports.Request = Request; -exports.Response = Response; -exports.FetchError = FetchError; diff --git a/reverse_engineering/node_modules/node-fetch/lib/index.mjs b/reverse_engineering/node_modules/node-fetch/lib/index.mjs deleted file mode 100644 index ecf59af..0000000 --- a/reverse_engineering/node_modules/node-fetch/lib/index.mjs +++ /dev/null @@ -1,1638 +0,0 @@ -import Stream from 'stream'; -import http from 'http'; -import Url from 'url'; -import https from 'https'; -import zlib from 'zlib'; - -// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js - -// fix for "Readable" isn't a named export issue -const Readable = Stream.Readable; - -const BUFFER = Symbol('buffer'); -const TYPE = Symbol('type'); - -class Blob { - constructor() { - this[TYPE] = ''; - - const blobParts = arguments[0]; - const options = arguments[1]; - - const buffers = []; - let size = 0; - - if (blobParts) { - const a = blobParts; - const length = Number(a.length); - for (let i = 0; i < length; i++) { - const element = a[i]; - let buffer; - if (element instanceof Buffer) { - buffer = element; - } else if (ArrayBuffer.isView(element)) { - buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength); - } else if (element instanceof ArrayBuffer) { - buffer = Buffer.from(element); - } else if (element instanceof Blob) { - buffer = element[BUFFER]; - } else { - buffer = Buffer.from(typeof element === 'string' ? element : String(element)); - } - size += buffer.length; - buffers.push(buffer); - } - } - - this[BUFFER] = Buffer.concat(buffers); - - let type = options && options.type !== undefined && String(options.type).toLowerCase(); - if (type && !/[^\u0020-\u007E]/.test(type)) { - this[TYPE] = type; - } - } - get size() { - return this[BUFFER].length; - } - get type() { - return this[TYPE]; - } - text() { - return Promise.resolve(this[BUFFER].toString()); - } - arrayBuffer() { - const buf = this[BUFFER]; - const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); - return Promise.resolve(ab); - } - stream() { - const readable = new Readable(); - readable._read = function () {}; - readable.push(this[BUFFER]); - readable.push(null); - return readable; - } - toString() { - return '[object Blob]'; - } - slice() { - const size = this.size; - - const start = arguments[0]; - const end = arguments[1]; - let relativeStart, relativeEnd; - if (start === undefined) { - relativeStart = 0; - } else if (start < 0) { - relativeStart = Math.max(size + start, 0); - } else { - relativeStart = Math.min(start, size); - } - if (end === undefined) { - relativeEnd = size; - } else if (end < 0) { - relativeEnd = Math.max(size + end, 0); - } else { - relativeEnd = Math.min(end, size); - } - const span = Math.max(relativeEnd - relativeStart, 0); - - const buffer = this[BUFFER]; - const slicedBuffer = buffer.slice(relativeStart, relativeStart + span); - const blob = new Blob([], { type: arguments[2] }); - blob[BUFFER] = slicedBuffer; - return blob; - } -} - -Object.defineProperties(Blob.prototype, { - size: { enumerable: true }, - type: { enumerable: true }, - slice: { enumerable: true } -}); - -Object.defineProperty(Blob.prototype, Symbol.toStringTag, { - value: 'Blob', - writable: false, - enumerable: false, - configurable: true -}); - -/** - * fetch-error.js - * - * FetchError interface for operational errors - */ - -/** - * Create FetchError instance - * - * @param String message Error message for human - * @param String type Error type for machine - * @param String systemError For Node.js system error - * @return FetchError - */ -function FetchError(message, type, systemError) { - Error.call(this, message); - - this.message = message; - this.type = type; - - // when err.type is `system`, err.code contains system error code - if (systemError) { - this.code = this.errno = systemError.code; - } - - // hide custom error implementation details from end-users - Error.captureStackTrace(this, this.constructor); -} - -FetchError.prototype = Object.create(Error.prototype); -FetchError.prototype.constructor = FetchError; -FetchError.prototype.name = 'FetchError'; - -let convert; -try { - convert = require('encoding').convert; -} catch (e) {} - -const INTERNALS = Symbol('Body internals'); - -// fix an issue where "PassThrough" isn't a named export for node <10 -const PassThrough = Stream.PassThrough; - -/** - * Body mixin - * - * Ref: https://fetch.spec.whatwg.org/#body - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ -function Body(body) { - var _this = this; - - var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, - _ref$size = _ref.size; - - let size = _ref$size === undefined ? 0 : _ref$size; - var _ref$timeout = _ref.timeout; - let timeout = _ref$timeout === undefined ? 0 : _ref$timeout; - - if (body == null) { - // body is undefined or null - body = null; - } else if (isURLSearchParams(body)) { - // body is a URLSearchParams - body = Buffer.from(body.toString()); - } else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') { - // body is ArrayBuffer - body = Buffer.from(body); - } else if (ArrayBuffer.isView(body)) { - // body is ArrayBufferView - body = Buffer.from(body.buffer, body.byteOffset, body.byteLength); - } else if (body instanceof Stream) ; else { - // none of the above - // coerce to string then buffer - body = Buffer.from(String(body)); - } - this[INTERNALS] = { - body, - disturbed: false, - error: null - }; - this.size = size; - this.timeout = timeout; - - if (body instanceof Stream) { - body.on('error', function (err) { - const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err); - _this[INTERNALS].error = error; - }); - } -} - -Body.prototype = { - get body() { - return this[INTERNALS].body; - }, - - get bodyUsed() { - return this[INTERNALS].disturbed; - }, - - /** - * Decode response as ArrayBuffer - * - * @return Promise - */ - arrayBuffer() { - return consumeBody.call(this).then(function (buf) { - return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); - }); - }, - - /** - * Return raw response as Blob - * - * @return Promise - */ - blob() { - let ct = this.headers && this.headers.get('content-type') || ''; - return consumeBody.call(this).then(function (buf) { - return Object.assign( - // Prevent copying - new Blob([], { - type: ct.toLowerCase() - }), { - [BUFFER]: buf - }); - }); - }, - - /** - * Decode response as json - * - * @return Promise - */ - json() { - var _this2 = this; - - return consumeBody.call(this).then(function (buffer) { - try { - return JSON.parse(buffer.toString()); - } catch (err) { - return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json')); - } - }); - }, - - /** - * Decode response as text - * - * @return Promise - */ - text() { - return consumeBody.call(this).then(function (buffer) { - return buffer.toString(); - }); - }, - - /** - * Decode response as buffer (non-spec api) - * - * @return Promise - */ - buffer() { - return consumeBody.call(this); - }, - - /** - * Decode response as text, while automatically detecting the encoding and - * trying to decode to UTF-8 (non-spec api) - * - * @return Promise - */ - textConverted() { - var _this3 = this; - - return consumeBody.call(this).then(function (buffer) { - return convertBody(buffer, _this3.headers); - }); - } -}; - -// In browsers, all properties are enumerable. -Object.defineProperties(Body.prototype, { - body: { enumerable: true }, - bodyUsed: { enumerable: true }, - arrayBuffer: { enumerable: true }, - blob: { enumerable: true }, - json: { enumerable: true }, - text: { enumerable: true } -}); - -Body.mixIn = function (proto) { - for (const name of Object.getOwnPropertyNames(Body.prototype)) { - // istanbul ignore else: future proof - if (!(name in proto)) { - const desc = Object.getOwnPropertyDescriptor(Body.prototype, name); - Object.defineProperty(proto, name, desc); - } - } -}; - -/** - * Consume and convert an entire Body to a Buffer. - * - * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body - * - * @return Promise - */ -function consumeBody() { - var _this4 = this; - - if (this[INTERNALS].disturbed) { - return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`)); - } - - this[INTERNALS].disturbed = true; - - if (this[INTERNALS].error) { - return Body.Promise.reject(this[INTERNALS].error); - } - - let body = this.body; - - // body is null - if (body === null) { - return Body.Promise.resolve(Buffer.alloc(0)); - } - - // body is blob - if (isBlob(body)) { - body = body.stream(); - } - - // body is buffer - if (Buffer.isBuffer(body)) { - return Body.Promise.resolve(body); - } - - // istanbul ignore if: should never happen - if (!(body instanceof Stream)) { - return Body.Promise.resolve(Buffer.alloc(0)); - } - - // body is stream - // get ready to actually consume the body - let accum = []; - let accumBytes = 0; - let abort = false; - - return new Body.Promise(function (resolve, reject) { - let resTimeout; - - // allow timeout on slow response body - if (_this4.timeout) { - resTimeout = setTimeout(function () { - abort = true; - reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout')); - }, _this4.timeout); - } - - // handle stream errors - body.on('error', function (err) { - if (err.name === 'AbortError') { - // if the request was aborted, reject with this Error - abort = true; - reject(err); - } else { - // other errors, such as incorrect content-encoding - reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err)); - } - }); - - body.on('data', function (chunk) { - if (abort || chunk === null) { - return; - } - - if (_this4.size && accumBytes + chunk.length > _this4.size) { - abort = true; - reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size')); - return; - } - - accumBytes += chunk.length; - accum.push(chunk); - }); - - body.on('end', function () { - if (abort) { - return; - } - - clearTimeout(resTimeout); - - try { - resolve(Buffer.concat(accum, accumBytes)); - } catch (err) { - // handle streams that have accumulated too much data (issue #414) - reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err)); - } - }); - }); -} - -/** - * Detect buffer encoding and convert to target encoding - * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding - * - * @param Buffer buffer Incoming buffer - * @param String encoding Target encoding - * @return String - */ -function convertBody(buffer, headers) { - if (typeof convert !== 'function') { - throw new Error('The package `encoding` must be installed to use the textConverted() function'); - } - - const ct = headers.get('content-type'); - let charset = 'utf-8'; - let res, str; - - // header - if (ct) { - res = /charset=([^;]*)/i.exec(ct); - } - - // no charset in content type, peek at response body for at most 1024 bytes - str = buffer.slice(0, 1024).toString(); - - // html5 - if (!res && str) { - res = / 0 && arguments[0] !== undefined ? arguments[0] : undefined; - - this[MAP] = Object.create(null); - - if (init instanceof Headers) { - const rawHeaders = init.raw(); - const headerNames = Object.keys(rawHeaders); - - for (const headerName of headerNames) { - for (const value of rawHeaders[headerName]) { - this.append(headerName, value); - } - } - - return; - } - - // We don't worry about converting prop to ByteString here as append() - // will handle it. - if (init == null) ; else if (typeof init === 'object') { - const method = init[Symbol.iterator]; - if (method != null) { - if (typeof method !== 'function') { - throw new TypeError('Header pairs must be iterable'); - } - - // sequence> - // Note: per spec we have to first exhaust the lists then process them - const pairs = []; - for (const pair of init) { - if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') { - throw new TypeError('Each header pair must be iterable'); - } - pairs.push(Array.from(pair)); - } - - for (const pair of pairs) { - if (pair.length !== 2) { - throw new TypeError('Each header pair must be a name/value tuple'); - } - this.append(pair[0], pair[1]); - } - } else { - // record - for (const key of Object.keys(init)) { - const value = init[key]; - this.append(key, value); - } - } - } else { - throw new TypeError('Provided initializer must be an object'); - } - } - - /** - * Return combined header value given name - * - * @param String name Header name - * @return Mixed - */ - get(name) { - name = `${name}`; - validateName(name); - const key = find(this[MAP], name); - if (key === undefined) { - return null; - } - - return this[MAP][key].join(', '); - } - - /** - * Iterate over all headers - * - * @param Function callback Executed for each item with parameters (value, name, thisArg) - * @param Boolean thisArg `this` context for callback function - * @return Void - */ - forEach(callback) { - let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; - - let pairs = getHeaders(this); - let i = 0; - while (i < pairs.length) { - var _pairs$i = pairs[i]; - const name = _pairs$i[0], - value = _pairs$i[1]; - - callback.call(thisArg, value, name, this); - pairs = getHeaders(this); - i++; - } - } - - /** - * Overwrite header values given name - * - * @param String name Header name - * @param String value Header value - * @return Void - */ - set(name, value) { - name = `${name}`; - value = `${value}`; - validateName(name); - validateValue(value); - const key = find(this[MAP], name); - this[MAP][key !== undefined ? key : name] = [value]; - } - - /** - * Append a value onto existing header - * - * @param String name Header name - * @param String value Header value - * @return Void - */ - append(name, value) { - name = `${name}`; - value = `${value}`; - validateName(name); - validateValue(value); - const key = find(this[MAP], name); - if (key !== undefined) { - this[MAP][key].push(value); - } else { - this[MAP][name] = [value]; - } - } - - /** - * Check for header name existence - * - * @param String name Header name - * @return Boolean - */ - has(name) { - name = `${name}`; - validateName(name); - return find(this[MAP], name) !== undefined; - } - - /** - * Delete all header values given name - * - * @param String name Header name - * @return Void - */ - delete(name) { - name = `${name}`; - validateName(name); - const key = find(this[MAP], name); - if (key !== undefined) { - delete this[MAP][key]; - } - } - - /** - * Return raw headers (non-spec api) - * - * @return Object - */ - raw() { - return this[MAP]; - } - - /** - * Get an iterator on keys. - * - * @return Iterator - */ - keys() { - return createHeadersIterator(this, 'key'); - } - - /** - * Get an iterator on values. - * - * @return Iterator - */ - values() { - return createHeadersIterator(this, 'value'); - } - - /** - * Get an iterator on entries. - * - * This is the default iterator of the Headers object. - * - * @return Iterator - */ - [Symbol.iterator]() { - return createHeadersIterator(this, 'key+value'); - } -} -Headers.prototype.entries = Headers.prototype[Symbol.iterator]; - -Object.defineProperty(Headers.prototype, Symbol.toStringTag, { - value: 'Headers', - writable: false, - enumerable: false, - configurable: true -}); - -Object.defineProperties(Headers.prototype, { - get: { enumerable: true }, - forEach: { enumerable: true }, - set: { enumerable: true }, - append: { enumerable: true }, - has: { enumerable: true }, - delete: { enumerable: true }, - keys: { enumerable: true }, - values: { enumerable: true }, - entries: { enumerable: true } -}); - -function getHeaders(headers) { - let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value'; - - const keys = Object.keys(headers[MAP]).sort(); - return keys.map(kind === 'key' ? function (k) { - return k.toLowerCase(); - } : kind === 'value' ? function (k) { - return headers[MAP][k].join(', '); - } : function (k) { - return [k.toLowerCase(), headers[MAP][k].join(', ')]; - }); -} - -const INTERNAL = Symbol('internal'); - -function createHeadersIterator(target, kind) { - const iterator = Object.create(HeadersIteratorPrototype); - iterator[INTERNAL] = { - target, - kind, - index: 0 - }; - return iterator; -} - -const HeadersIteratorPrototype = Object.setPrototypeOf({ - next() { - // istanbul ignore if - if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) { - throw new TypeError('Value of `this` is not a HeadersIterator'); - } - - var _INTERNAL = this[INTERNAL]; - const target = _INTERNAL.target, - kind = _INTERNAL.kind, - index = _INTERNAL.index; - - const values = getHeaders(target, kind); - const len = values.length; - if (index >= len) { - return { - value: undefined, - done: true - }; - } - - this[INTERNAL].index = index + 1; - - return { - value: values[index], - done: false - }; - } -}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))); - -Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, { - value: 'HeadersIterator', - writable: false, - enumerable: false, - configurable: true -}); - -/** - * Export the Headers object in a form that Node.js can consume. - * - * @param Headers headers - * @return Object - */ -function exportNodeCompatibleHeaders(headers) { - const obj = Object.assign({ __proto__: null }, headers[MAP]); - - // http.request() only supports string as Host header. This hack makes - // specifying custom Host header possible. - const hostHeaderKey = find(headers[MAP], 'Host'); - if (hostHeaderKey !== undefined) { - obj[hostHeaderKey] = obj[hostHeaderKey][0]; - } - - return obj; -} - -/** - * Create a Headers object from an object of headers, ignoring those that do - * not conform to HTTP grammar productions. - * - * @param Object obj Object of headers - * @return Headers - */ -function createHeadersLenient(obj) { - const headers = new Headers(); - for (const name of Object.keys(obj)) { - if (invalidTokenRegex.test(name)) { - continue; - } - if (Array.isArray(obj[name])) { - for (const val of obj[name]) { - if (invalidHeaderCharRegex.test(val)) { - continue; - } - if (headers[MAP][name] === undefined) { - headers[MAP][name] = [val]; - } else { - headers[MAP][name].push(val); - } - } - } else if (!invalidHeaderCharRegex.test(obj[name])) { - headers[MAP][name] = [obj[name]]; - } - } - return headers; -} - -const INTERNALS$1 = Symbol('Response internals'); - -// fix an issue where "STATUS_CODES" aren't a named export for node <10 -const STATUS_CODES = http.STATUS_CODES; - -/** - * Response class - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ -class Response { - constructor() { - let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - Body.call(this, body, opts); - - const status = opts.status || 200; - const headers = new Headers(opts.headers); - - if (body != null && !headers.has('Content-Type')) { - const contentType = extractContentType(body); - if (contentType) { - headers.append('Content-Type', contentType); - } - } - - this[INTERNALS$1] = { - url: opts.url, - status, - statusText: opts.statusText || STATUS_CODES[status], - headers, - counter: opts.counter - }; - } - - get url() { - return this[INTERNALS$1].url || ''; - } - - get status() { - return this[INTERNALS$1].status; - } - - /** - * Convenience property representing if the request ended normally - */ - get ok() { - return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300; - } - - get redirected() { - return this[INTERNALS$1].counter > 0; - } - - get statusText() { - return this[INTERNALS$1].statusText; - } - - get headers() { - return this[INTERNALS$1].headers; - } - - /** - * Clone this response - * - * @return Response - */ - clone() { - return new Response(clone(this), { - url: this.url, - status: this.status, - statusText: this.statusText, - headers: this.headers, - ok: this.ok, - redirected: this.redirected - }); - } -} - -Body.mixIn(Response.prototype); - -Object.defineProperties(Response.prototype, { - url: { enumerable: true }, - status: { enumerable: true }, - ok: { enumerable: true }, - redirected: { enumerable: true }, - statusText: { enumerable: true }, - headers: { enumerable: true }, - clone: { enumerable: true } -}); - -Object.defineProperty(Response.prototype, Symbol.toStringTag, { - value: 'Response', - writable: false, - enumerable: false, - configurable: true -}); - -const INTERNALS$2 = Symbol('Request internals'); - -// fix an issue where "format", "parse" aren't a named export for node <10 -const parse_url = Url.parse; -const format_url = Url.format; - -const streamDestructionSupported = 'destroy' in Stream.Readable.prototype; - -/** - * Check if a value is an instance of Request. - * - * @param Mixed input - * @return Boolean - */ -function isRequest(input) { - return typeof input === 'object' && typeof input[INTERNALS$2] === 'object'; -} - -function isAbortSignal(signal) { - const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal); - return !!(proto && proto.constructor.name === 'AbortSignal'); -} - -/** - * Request class - * - * @param Mixed input Url or Request instance - * @param Object init Custom options - * @return Void - */ -class Request { - constructor(input) { - let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - let parsedURL; - - // normalize input - if (!isRequest(input)) { - if (input && input.href) { - // in order to support Node.js' Url objects; though WHATWG's URL objects - // will fall into this branch also (since their `toString()` will return - // `href` property anyway) - parsedURL = parse_url(input.href); - } else { - // coerce input to a string before attempting to parse - parsedURL = parse_url(`${input}`); - } - input = {}; - } else { - parsedURL = parse_url(input.url); - } - - let method = init.method || input.method || 'GET'; - method = method.toUpperCase(); - - if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) { - throw new TypeError('Request with GET/HEAD method cannot have body'); - } - - let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null; - - Body.call(this, inputBody, { - timeout: init.timeout || input.timeout || 0, - size: init.size || input.size || 0 - }); - - const headers = new Headers(init.headers || input.headers || {}); - - if (inputBody != null && !headers.has('Content-Type')) { - const contentType = extractContentType(inputBody); - if (contentType) { - headers.append('Content-Type', contentType); - } - } - - let signal = isRequest(input) ? input.signal : null; - if ('signal' in init) signal = init.signal; - - if (signal != null && !isAbortSignal(signal)) { - throw new TypeError('Expected signal to be an instanceof AbortSignal'); - } - - this[INTERNALS$2] = { - method, - redirect: init.redirect || input.redirect || 'follow', - headers, - parsedURL, - signal - }; - - // node-fetch-only options - this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20; - this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true; - this.counter = init.counter || input.counter || 0; - this.agent = init.agent || input.agent; - } - - get method() { - return this[INTERNALS$2].method; - } - - get url() { - return format_url(this[INTERNALS$2].parsedURL); - } - - get headers() { - return this[INTERNALS$2].headers; - } - - get redirect() { - return this[INTERNALS$2].redirect; - } - - get signal() { - return this[INTERNALS$2].signal; - } - - /** - * Clone this request - * - * @return Request - */ - clone() { - return new Request(this); - } -} - -Body.mixIn(Request.prototype); - -Object.defineProperty(Request.prototype, Symbol.toStringTag, { - value: 'Request', - writable: false, - enumerable: false, - configurable: true -}); - -Object.defineProperties(Request.prototype, { - method: { enumerable: true }, - url: { enumerable: true }, - headers: { enumerable: true }, - redirect: { enumerable: true }, - clone: { enumerable: true }, - signal: { enumerable: true } -}); - -/** - * Convert a Request to Node.js http request options. - * - * @param Request A Request instance - * @return Object The options object to be passed to http.request - */ -function getNodeRequestOptions(request) { - const parsedURL = request[INTERNALS$2].parsedURL; - const headers = new Headers(request[INTERNALS$2].headers); - - // fetch step 1.3 - if (!headers.has('Accept')) { - headers.set('Accept', '*/*'); - } - - // Basic fetch - if (!parsedURL.protocol || !parsedURL.hostname) { - throw new TypeError('Only absolute URLs are supported'); - } - - if (!/^https?:$/.test(parsedURL.protocol)) { - throw new TypeError('Only HTTP(S) protocols are supported'); - } - - if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) { - throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8'); - } - - // HTTP-network-or-cache fetch steps 2.4-2.7 - let contentLengthValue = null; - if (request.body == null && /^(POST|PUT)$/i.test(request.method)) { - contentLengthValue = '0'; - } - if (request.body != null) { - const totalBytes = getTotalBytes(request); - if (typeof totalBytes === 'number') { - contentLengthValue = String(totalBytes); - } - } - if (contentLengthValue) { - headers.set('Content-Length', contentLengthValue); - } - - // HTTP-network-or-cache fetch step 2.11 - if (!headers.has('User-Agent')) { - headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)'); - } - - // HTTP-network-or-cache fetch step 2.15 - if (request.compress && !headers.has('Accept-Encoding')) { - headers.set('Accept-Encoding', 'gzip,deflate'); - } - - let agent = request.agent; - if (typeof agent === 'function') { - agent = agent(parsedURL); - } - - if (!headers.has('Connection') && !agent) { - headers.set('Connection', 'close'); - } - - // HTTP-network fetch step 4.2 - // chunked encoding is handled by Node.js - - return Object.assign({}, parsedURL, { - method: request.method, - headers: exportNodeCompatibleHeaders(headers), - agent - }); -} - -/** - * abort-error.js - * - * AbortError interface for cancelled requests - */ - -/** - * Create AbortError instance - * - * @param String message Error message for human - * @return AbortError - */ -function AbortError(message) { - Error.call(this, message); - - this.type = 'aborted'; - this.message = message; - - // hide custom error implementation details from end-users - Error.captureStackTrace(this, this.constructor); -} - -AbortError.prototype = Object.create(Error.prototype); -AbortError.prototype.constructor = AbortError; -AbortError.prototype.name = 'AbortError'; - -// fix an issue where "PassThrough", "resolve" aren't a named export for node <10 -const PassThrough$1 = Stream.PassThrough; -const resolve_url = Url.resolve; - -/** - * Fetch function - * - * @param Mixed url Absolute url or Request instance - * @param Object opts Fetch options - * @return Promise - */ -function fetch(url, opts) { - - // allow custom promise - if (!fetch.Promise) { - throw new Error('native promise missing, set fetch.Promise to your favorite alternative'); - } - - Body.Promise = fetch.Promise; - - // wrap http.request into fetch - return new fetch.Promise(function (resolve, reject) { - // build request object - const request = new Request(url, opts); - const options = getNodeRequestOptions(request); - - const send = (options.protocol === 'https:' ? https : http).request; - const signal = request.signal; - - let response = null; - - const abort = function abort() { - let error = new AbortError('The user aborted a request.'); - reject(error); - if (request.body && request.body instanceof Stream.Readable) { - request.body.destroy(error); - } - if (!response || !response.body) return; - response.body.emit('error', error); - }; - - if (signal && signal.aborted) { - abort(); - return; - } - - const abortAndFinalize = function abortAndFinalize() { - abort(); - finalize(); - }; - - // send request - const req = send(options); - let reqTimeout; - - if (signal) { - signal.addEventListener('abort', abortAndFinalize); - } - - function finalize() { - req.abort(); - if (signal) signal.removeEventListener('abort', abortAndFinalize); - clearTimeout(reqTimeout); - } - - if (request.timeout) { - req.once('socket', function (socket) { - reqTimeout = setTimeout(function () { - reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout')); - finalize(); - }, request.timeout); - }); - } - - req.on('error', function (err) { - reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err)); - finalize(); - }); - - req.on('response', function (res) { - clearTimeout(reqTimeout); - - const headers = createHeadersLenient(res.headers); - - // HTTP fetch step 5 - if (fetch.isRedirect(res.statusCode)) { - // HTTP fetch step 5.2 - const location = headers.get('Location'); - - // HTTP fetch step 5.3 - const locationURL = location === null ? null : resolve_url(request.url, location); - - // HTTP fetch step 5.5 - switch (request.redirect) { - case 'error': - reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect')); - finalize(); - return; - case 'manual': - // node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL. - if (locationURL !== null) { - // handle corrupted header - try { - headers.set('Location', locationURL); - } catch (err) { - // istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request - reject(err); - } - } - break; - case 'follow': - // HTTP-redirect fetch step 2 - if (locationURL === null) { - break; - } - - // HTTP-redirect fetch step 5 - if (request.counter >= request.follow) { - reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect')); - finalize(); - return; - } - - // HTTP-redirect fetch step 6 (counter increment) - // Create a new Request object. - const requestOpts = { - headers: new Headers(request.headers), - follow: request.follow, - counter: request.counter + 1, - agent: request.agent, - compress: request.compress, - method: request.method, - body: request.body, - signal: request.signal, - timeout: request.timeout, - size: request.size - }; - - // HTTP-redirect fetch step 9 - if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) { - reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect')); - finalize(); - return; - } - - // HTTP-redirect fetch step 11 - if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') { - requestOpts.method = 'GET'; - requestOpts.body = undefined; - requestOpts.headers.delete('content-length'); - } - - // HTTP-redirect fetch step 15 - resolve(fetch(new Request(locationURL, requestOpts))); - finalize(); - return; - } - } - - // prepare response - res.once('end', function () { - if (signal) signal.removeEventListener('abort', abortAndFinalize); - }); - let body = res.pipe(new PassThrough$1()); - - const response_options = { - url: request.url, - status: res.statusCode, - statusText: res.statusMessage, - headers: headers, - size: request.size, - timeout: request.timeout, - counter: request.counter - }; - - // HTTP-network fetch step 12.1.1.3 - const codings = headers.get('Content-Encoding'); - - // HTTP-network fetch step 12.1.1.4: handle content codings - - // in following scenarios we ignore compression support - // 1. compression support is disabled - // 2. HEAD request - // 3. no Content-Encoding header - // 4. no content response (204) - // 5. content not modified response (304) - if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) { - response = new Response(body, response_options); - resolve(response); - return; - } - - // For Node v6+ - // Be less strict when decoding compressed responses, since sometimes - // servers send slightly invalid responses that are still accepted - // by common browsers. - // Always using Z_SYNC_FLUSH is what cURL does. - const zlibOptions = { - flush: zlib.Z_SYNC_FLUSH, - finishFlush: zlib.Z_SYNC_FLUSH - }; - - // for gzip - if (codings == 'gzip' || codings == 'x-gzip') { - body = body.pipe(zlib.createGunzip(zlibOptions)); - response = new Response(body, response_options); - resolve(response); - return; - } - - // for deflate - if (codings == 'deflate' || codings == 'x-deflate') { - // handle the infamous raw deflate response from old servers - // a hack for old IIS and Apache servers - const raw = res.pipe(new PassThrough$1()); - raw.once('data', function (chunk) { - // see http://stackoverflow.com/questions/37519828 - if ((chunk[0] & 0x0F) === 0x08) { - body = body.pipe(zlib.createInflate()); - } else { - body = body.pipe(zlib.createInflateRaw()); - } - response = new Response(body, response_options); - resolve(response); - }); - return; - } - - // for br - if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') { - body = body.pipe(zlib.createBrotliDecompress()); - response = new Response(body, response_options); - resolve(response); - return; - } - - // otherwise, use response as-is - response = new Response(body, response_options); - resolve(response); - }); - - writeToStream(req, request); - }); -} -/** - * Redirect code matching - * - * @param Number code Status code - * @return Boolean - */ -fetch.isRedirect = function (code) { - return code === 301 || code === 302 || code === 303 || code === 307 || code === 308; -}; - -// expose Promise -fetch.Promise = global.Promise; - -export default fetch; -export { Headers, Request, Response, FetchError }; diff --git a/reverse_engineering/node_modules/node-fetch/package.json b/reverse_engineering/node_modules/node-fetch/package.json deleted file mode 100644 index 9afa9ef..0000000 --- a/reverse_engineering/node_modules/node-fetch/package.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "_from": "node-fetch@^2.3.0", - "_id": "node-fetch@2.6.1", - "_inBundle": false, - "_integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "_location": "/node-fetch", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "node-fetch@^2.3.0", - "name": "node-fetch", - "escapedName": "node-fetch", - "rawSpec": "^2.3.0", - "saveSpec": null, - "fetchSpec": "^2.3.0" - }, - "_requiredBy": [ - "/gaxios", - "/teeny-request" - ], - "_resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "_shasum": "045bd323631f76ed2e2b55573394416b639a0052", - "_spec": "node-fetch@^2.3.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/gaxios", - "author": { - "name": "David Frank" - }, - "browser": "./browser.js", - "bugs": { - "url": "https://github.com/bitinn/node-fetch/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "A light-weight module that brings window.fetch to node.js", - "devDependencies": { - "@ungap/url-search-params": "^0.1.2", - "abort-controller": "^1.1.0", - "abortcontroller-polyfill": "^1.3.0", - "babel-core": "^6.26.3", - "babel-plugin-istanbul": "^4.1.6", - "babel-preset-env": "^1.6.1", - "babel-register": "^6.16.3", - "chai": "^3.5.0", - "chai-as-promised": "^7.1.1", - "chai-iterator": "^1.1.1", - "chai-string": "~1.3.0", - "codecov": "^3.3.0", - "cross-env": "^5.2.0", - "form-data": "^2.3.3", - "is-builtin-module": "^1.0.0", - "mocha": "^5.0.0", - "nyc": "11.9.0", - "parted": "^0.1.1", - "promise": "^8.0.3", - "resumer": "0.0.0", - "rollup": "^0.63.4", - "rollup-plugin-babel": "^3.0.7", - "string-to-arraybuffer": "^1.0.2", - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "files": [ - "lib/index.js", - "lib/index.mjs", - "lib/index.es.js", - "browser.js" - ], - "homepage": "https://github.com/bitinn/node-fetch", - "keywords": [ - "fetch", - "http", - "promise" - ], - "license": "MIT", - "main": "lib/index", - "module": "lib/index.mjs", - "name": "node-fetch", - "repository": { - "type": "git", - "url": "git+https://github.com/bitinn/node-fetch.git" - }, - "scripts": { - "build": "cross-env BABEL_ENV=rollup rollup -c", - "coverage": "cross-env BABEL_ENV=coverage nyc --reporter json --reporter text mocha -R spec test/test.js && codecov -f coverage/coverage-final.json", - "prepare": "npm run build", - "report": "cross-env BABEL_ENV=coverage nyc --reporter lcov --reporter text mocha -R spec test/test.js", - "test": "cross-env BABEL_ENV=test mocha --require babel-register --throw-deprecation test/test.js" - }, - "version": "2.6.1" -} diff --git a/reverse_engineering/node_modules/node-forge/CHANGELOG.md b/reverse_engineering/node_modules/node-forge/CHANGELOG.md deleted file mode 100644 index 81176fa..0000000 --- a/reverse_engineering/node_modules/node-forge/CHANGELOG.md +++ /dev/null @@ -1,265 +0,0 @@ -Forge ChangeLog -=============== - -## 0.10.0 - 2019-09-01 - -### Changed -- **BREAKING**: Node.js 4 no longer supported. The code *may* still work, and - non-invasive patches to keep it working will be considered. However, more - modern tools no longer support old Node.js versions making testing difficult. - -### Removed -- **BREAKING**: Remove `util.getPath`, `util.setPath`, and `util.deletePath`. - `util.setPath` had a potential prototype pollution security issue when used - with unsafe inputs. These functions are not used by `forge` itself. They date - from an early time when `forge` was targeted at providing general helper - functions. The library direction changed to be more focused on cryptography. - Many other excellent libraries are more suitable for general utilities. If - you need a replacement for these functions, consier `get`, `set`, and `unset` - from [lodash](https://lodash.com/). But also consider the potential similar - security issues with those APIs. - -## 0.9.2 - 2019-09-01 - -### Changed -- Added `util.setPath` security note to function docs and to README. - -### Notes -- **SECURITY**: The `util.setPath` function has the potential to cause - prototype pollution if used with unsafe input. - - This function is **not** used internally by `forge`. - - The rest of the library is unaffected by this issue. - - **Do not** use unsafe input with this function. - - Usage with known input should function as expected. (Including input - intentionally using potentially problematic keys.) - - No code changes will be made to address this issue in 0.9.x. The current - behavior *could* be considered a feature rather than a security issue. - 0.10.0 will be released that removes `util.getPath` and `util.setPath`. - Consider `get` and `set` from [lodash](https://lodash.com/) if you need - replacements. But also consider the potential similar security issues with - those APIs. - - https://snyk.io/vuln/SNYK-JS-NODEFORGE-598677 - - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-7720 - -## 0.9.1 - 2019-09-26 - -### Fixed -- Ensure DES-CBC given IV is long enough for block size. - -## 0.9.0 - 2019-09-04 - -### Added -- Add ed25519.publicKeyFromAsn1 and ed25519.privateKeyFromAsn1 APIs. -- A few OIDs used in EV certs. - -### Fixed -- Improve ed25519 NativeBuffer check. - -## 0.8.5 - 2019-06-18 - -### Fixed -- Remove use of `const`. - -## 0.8.4 - 2019-05-22 - -### Changed -- Replace all instances of Node.js `new Buffer` with `Buffer.from` and `Buffer.alloc`. - -## 0.8.3 - 2019-05-15 - -### Fixed -- Use basic character set for code. - -## 0.8.2 - 2019-03-18 - -### Fixed -- Fix tag calculation when continuing an AES-GCM block. - -### Changed -- Switch to eslint. - -## 0.8.1 - 2019-02-23 - -### Fixed -- Fix off-by-1 bug with kem random generation. - -## 0.8.0 - 2019-01-31 - -### Fixed -- Handle creation of certificates with `notBefore` and `notAfter` dates less - than Jan 1, 1950 or greater than or equal to Jan 1, 2050. - -### Added -- Add OID 2.5.4.13 "description". -- Add OID 2.16.840.1.113730.1.13 "nsComment". - - Also handle extension when creating a certificate. -- `pki.verifyCertificateChain`: - - Add `validityCheckDate` option to allow checking the certificate validity - period against an arbitrary `Date` or `null` for no check at all. The - current date is used by default. -- `tls.createConnection`: - - Add `verifyOptions` option that passes through to - `pki.verifyCertificateChain`. Can be used for the above `validityCheckDate` - option. - -### Changed -- Support WebCrypto API in web workers. -- `rsa.generateKeyPair`: - - Use `crypto.generateKeyPair`/`crypto.generateKeyPairSync` on Node.js if - available (10.12.0+) and not in pure JS mode. - - Use JS fallback in `rsa.generateKeyPair` if `prng` option specified since - this isn't supported by current native APIs. - - Only run key generation comparison tests if keys will be deterministic. -- PhantomJS is deprecated, now using Headless Chrome with Karma. -- **Note**: Using Headless Chrome vs PhantomJS may cause newer JS features to - slip into releases without proper support for older runtimes and browsers. - Please report such issues and they will be addressed. -- `pki.verifyCertificateChain`: - - Signature changed to `(caStore, chain, options)`. Older `(caStore, chain, - verify)` signature is still supported. New style is to to pass in a - `verify` option. - -## 0.7.6 - 2018-08-14 - -### Added -- Test on Node.js 10.x. -- Support for PKCS#7 detached signatures. - -### Changed -- Improve webpack/browser detection. - -## 0.7.5 - 2018-03-30 - -### Fixed -- Remove use of `const`. - -## 0.7.4 - 2018-03-07 - -### Fixed -- Potential regex denial of service in form.js. - -### Added -- Support for ED25519. -- Support for baseN/base58. - -## 0.7.3 - 2018-03-05 - -- Re-publish with npm 5.6.0 due to file timestamp issues. - -## 0.7.2 - 2018-02-27 - -### Added -- Support verification of SHA-384 certificates. -- `1.2.840.10040.4.3'`/`dsa-with-sha1` OID. - -### Fixed -- Support importing PKCS#7 data with no certificates. RFC 2315 sec 9.1 states - certificates are optional. -- `asn1.equals` loop bug. -- Fortuna implementation bugs. - -## 0.7.1 - 2017-03-27 - -### Fixed - -- Fix digestLength for hashes based on SHA-512. - -## 0.7.0 - 2017-02-07 - -### Fixed - -- Fix test looping bugs so all tests are run. -- Improved ASN.1 parsing. Many failure cases eliminated. More sanity checks. - Better behavior in default mode of parsing BIT STRINGs. Better handling of - parsed BIT STRINGs in `toDer()`. More tests. -- Improve X.509 BIT STRING handling by using new capture modes. - -### Changed - -- Major refactor to use CommonJS plus a browser build system. -- Updated tests, examples, docs. -- Updated dependencies. -- Updated flash build system. -- Improve OID mapping code. -- Change test servers from Python to JavaScript. -- Improve PhantomJS support. -- Move Bower/bundle support to - [forge-dist](https://github.com/digitalbazaar/forge-dist). -- **BREAKING**: Require minimal digest algorithm dependencies from individual - modules. -- Enforce currently supported bit param values for byte buffer access. May be - **BREAKING** for code that depended on unspecified and/or incorrect behavior. -- Improve `asn1.prettyPrint()` BIT STRING display. - -### Added - -- webpack bundler support via `npm run build`: - - Builds `.js`, `.min.js`, and basic sourcemaps. - - Basic build: `forge.js`. - - Build with extra utils and networking support: `forge.all.js`. - - Build WebWorker support: `prime.worker.js`. -- Browserify support in package.json. -- Karma browser testing. -- `forge.options` field. -- `forge.options.usePureJavaScript` flag. -- `forge.util.isNodejs` flag (used to select "native" APIs). -- Run PhantomJS tests in Travis-CI. -- Add "Donations" section to README. -- Add IRC to "Contact" section of README. -- Add "Security Considerations" section to README. -- Add pbkdf2 usePureJavaScript test. -- Add rsa.generateKeyPair async and usePureJavaScript tests. -- Add .editorconfig support. -- Add `md.all.js` which includes all digest algorithms. -- Add asn1 `equals()` and `copy()`. -- Add asn1 `validate()` capture options for BIT STRING contents and value. - -### Removed - -- **BREAKING**: Can no longer call `forge({...})` to create new instances. -- Remove a large amount of old cruft. - -### Migration from 0.6.x to 0.7.x - -- (all) If you used the feature to create a new forge instance with new - configuration options you will need to rework your code. That ability has - been removed due to implementation complexity. The main rare use was to set - the option to use pure JavaScript. That is now available as a library global - flag `forge.options.usePureJavaScript`. -- (npm,bower) If you used the default main file there is little to nothing to - change. -- (npm) If you accessed a sub-resource like `forge/js/pki` you should either - switch to just using the main `forge` and access `forge.pki` or update to - `forge/lib/pki`. -- (bower) If you used a sub-resource like `forge/js/pki` you should switch to - just using `forge` and access `forge.pki`. The bower release bundles - everything in one minified file. -- (bower) A configured workerScript like - `/bower_components/forge/js/prime.worker.js` will need to change to - `/bower_components/forge/dist/prime.worker.min.js`. -- (all) If you used the networking support or flash socket support, you will - need to use a custom build and/or adjust where files are loaded from. This - functionality is not included in the bower distribution by default and is - also now in a different directory. -- (all) The library should now directly support building custom bundles with - webpack, browserify, or similar. -- (all) If building a custom bundle ensure the correct dependencies are - included. In particular, note there is now a `md.all.js` file to include all - digest algorithms. Individual files limit what they include by default to - allow smaller custom builds. For instance, `pbdkf2.js` has a `sha1` default - but does not include any algorithm files by default. This allows the - possibility to include only `sha256` without the overhead of `sha1` and - `sha512`. - -### Notes - -- This major update requires updating the version to 0.7.x. The existing - work-in-progress "0.7.x" branch will be painfully rebased on top of this new - 0.7.x and moved forward to 0.8.x or later as needed. -- 0.7.x is a start of simplifying forge based on common issues and what has - appeared to be the most common usage. Please file issues with feedback if the - changes are problematic for your use cases. - -## 0.6.x - 2016 and earlier - -- See Git commit log or https://github.com/digitalbazaar/forge. diff --git a/reverse_engineering/node_modules/node-forge/LICENSE b/reverse_engineering/node_modules/node-forge/LICENSE deleted file mode 100644 index 2b48a95..0000000 --- a/reverse_engineering/node_modules/node-forge/LICENSE +++ /dev/null @@ -1,331 +0,0 @@ -You may use the Forge project under the terms of either the BSD License or the -GNU General Public License (GPL) Version 2. - -The BSD License is recommended for most projects. It is simple and easy to -understand and it places almost no restrictions on what you can do with the -Forge project. - -If the GPL suits your project better you are also free to use Forge under -that license. - -You don't have to do anything special to choose one license or the other and -you don't have to notify anyone which license you are using. You are free to -use this project in commercial projects as long as the copyright header is -left intact. - -If you are a commercial entity and use this set of libraries in your -commercial software then reasonable payment to Digital Bazaar, if you can -afford it, is not required but is expected and would be appreciated. If this -library saves you time, then it's saving you money. The cost of developing -the Forge software was on the order of several hundred hours and tens of -thousands of dollars. We are attempting to strike a balance between helping -the development community while not being taken advantage of by lucrative -commercial entities for our efforts. - -------------------------------------------------------------------------------- -New BSD License (3-clause) -Copyright (c) 2010, Digital Bazaar, Inc. -All rights reserved. - -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 Digital Bazaar, Inc. nor the - names of its contributors 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 DIGITAL BAZAAR 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. - -------------------------------------------------------------------------------- - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 51 Franklin Street, 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. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, 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 or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -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 give any other recipients of the Program a copy of this License -along with the Program. - -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 Program or any portion -of it, thus forming a work based on the Program, 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) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -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 Program, 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 Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) 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; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, 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 executable. However, as a -special exception, the source code 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. - -If distribution of executable or 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 counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program 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. - - 5. 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 Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program 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 to -this License. - - 7. 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 Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program 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 Program. - -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. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program 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. - - 9. The Free Software Foundation may publish revised and/or new versions -of the 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 Program -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 Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, 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 - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "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 PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. 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 PROGRAM 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 PROGRAM (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 PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - diff --git a/reverse_engineering/node_modules/node-forge/README.md b/reverse_engineering/node_modules/node-forge/README.md deleted file mode 100644 index 40bf295..0000000 --- a/reverse_engineering/node_modules/node-forge/README.md +++ /dev/null @@ -1,2099 +0,0 @@ -# Forge - -[![npm package](https://nodei.co/npm/node-forge.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/node-forge/) - -[![Build status](https://img.shields.io/travis/digitalbazaar/forge.svg?branch=master)](https://travis-ci.org/digitalbazaar/forge) - -A native implementation of [TLS][] (and various other cryptographic tools) in -[JavaScript][]. - -Introduction ------------- - -The Forge software is a fully native implementation of the [TLS][] protocol -in JavaScript, a set of cryptography utilities, and a set of tools for -developing Web Apps that utilize many network resources. - -Performance ------------- - -Forge is fast. Benchmarks against other popular JavaScript cryptography -libraries can be found here: - -* http://dominictarr.github.io/crypto-bench/ -* http://cryptojs.altervista.org/test/simulate-threading-speed_test.html - -Documentation -------------- - -* [Introduction](#introduction) -* [Performance](#performance) -* [Installation](#installation) -* [Testing](#testing) -* [Contributing](#contributing) - -### API - -* [Options](#options) - -### Transports - -* [TLS](#tls) -* [HTTP](#http) -* [SSH](#ssh) -* [XHR](#xhr) -* [Sockets](#socket) - -### Ciphers - -* [CIPHER](#cipher) -* [AES](#aes) -* [DES](#des) -* [RC2](#rc2) - -### PKI - -* [ED25519](#ed25519) -* [RSA](#rsa) -* [RSA-KEM](#rsakem) -* [X.509](#x509) -* [PKCS#5](#pkcs5) -* [PKCS#7](#pkcs7) -* [PKCS#8](#pkcs8) -* [PKCS#10](#pkcs10) -* [PKCS#12](#pkcs12) -* [ASN.1](#asn) - -### Message Digests - -* [SHA1](#sha1) -* [SHA256](#sha256) -* [SHA384](#sha384) -* [SHA512](#sha512) -* [MD5](#md5) -* [HMAC](#hmac) - -### Utilities - -* [Prime](#prime) -* [PRNG](#prng) -* [Tasks](#task) -* [Utilities](#util) -* [Logging](#log) -* [Debugging](#debug) -* [Flash Networking Support](#flash) - -### Other - -* [Security Considerations](#security-considerations) -* [Library Background](#library-background) -* [Contact](#contact) -* [Donations](#donations) - ---------------------------------------- - -Installation ------------- - -**Note**: Please see the [Security Considerations](#security-considerations) -section before using packaging systems and pre-built files. - -Forge uses a [CommonJS][] module structure with a build process for browser -bundles. The older [0.6.x][] branch with standalone files is available but will -not be regularly updated. - -### Node.js - -If you want to use forge with [Node.js][], it is available through `npm`: - -https://npmjs.org/package/node-forge - -Installation: - - npm install node-forge - -You can then use forge as a regular module: - -```js -var forge = require('node-forge'); -``` - -The npm package includes pre-built `forge.min.js`, `forge.all.min.js`, and -`prime.worker.min.js` using the [UMD][] format. - -### Bundle / Bower - -Each release is published in a separate repository as pre-built and minimized -basic forge bundles using the [UMD][] format. - -https://github.com/digitalbazaar/forge-dist - -This bundle can be used in many environments. In particular it can be installed -with [Bower][]: - - bower install forge - -### jsDelivr CDN - -To use it via [jsDelivr](https://www.jsdelivr.com/package/npm/node-forge) include this in your html: - -```html - -``` - -### unpkg CDN - -To use it via [unpkg](https://unpkg.com/#/) include this in your html: - -```html - -``` - -### Development Requirements - -The core JavaScript has the following requirements to build and test: - -* Building a browser bundle: - * Node.js - * npm -* Testing - * Node.js - * npm - * Chrome, Firefox, Safari (optional) - -Some special networking features can optionally use a Flash component. See the -[Flash README](./flash/README.md) for details. - -### Building for a web browser - -To create single file bundles for use with browsers run the following: - - npm install - npm run build - -This will create single non-minimized and minimized files that can be -included in the browser: - - dist/forge.js - dist/forge.min.js - -A bundle that adds some utilities and networking support is also available: - - dist/forge.all.js - dist/forge.all.min.js - -Include the file via: - -```html - -``` -or -```html - -``` - -The above bundles will synchronously create a global 'forge' object. - -**Note**: These bundles will not include any WebWorker scripts (eg: -`dist/prime.worker.js`), so these will need to be accessible from the browser -if any WebWorkers are used. - -### Building a custom browser bundle - -The build process uses [webpack][] and the [config](./webpack.config.js) file -can be modified to generate a file or files that only contain the parts of -forge you need. - -[Browserify][] override support is also present in `package.json`. - -Testing -------- - -### Prepare to run tests - - npm install - -### Running automated tests with Node.js - -Forge natively runs in a [Node.js][] environment: - - npm test - -### Running automated tests with Headless Chrome - -Automated testing is done via [Karma][]. By default it will run the tests with -Headless Chrome. - - npm run test-karma - -Is 'mocha' reporter output too verbose? Other reporters are available. Try -'dots', 'progress', or 'tap'. - - npm run test-karma -- --reporters progress - -By default [webpack][] is used. [Browserify][] can also be used. - - BUNDLER=browserify npm run test-karma - -### Running automated tests with one or more browsers - -You can also specify one or more browsers to use. - - npm run test-karma -- --browsers Chrome,Firefox,Safari,ChromeHeadless - -The reporter option and `BUNDLER` environment variable can also be used. - -### Running manual tests in a browser - -Testing in a browser uses [webpack][] to combine forge and all tests and then -loading the result in a browser. A simple web server is provided that will -output the HTTP or HTTPS URLs to load. It also will start a simple Flash Policy -Server. Unit tests and older legacy tests are provided. Custom ports can be -used by running `node tests/server.js` manually. - -To run the unit tests in a browser a special forge build is required: - - npm run test-build - -To run legacy browser based tests the main forge build is required: - - npm run build - -The tests are run with a custom server that prints out the URLs to use: - - npm run test-server - -### Running other tests - -There are some other random tests and benchmarks available in the tests -directory. - -### Coverage testing - -To perform coverage testing of the unit tests, run the following. The results -will be put in the `coverage/` directory. Note that coverage testing can slow -down some tests considerably. - - npm install - npm run coverage - -Contributing ------------- - -Any contributions (eg: PRs) that are accepted will be brought under the same -license used by the rest of the Forge project. This license allows Forge to -be used under the terms of either the BSD License or the GNU General Public -License (GPL) Version 2. - -See: [LICENSE](https://github.com/digitalbazaar/forge/blob/cbebca3780658703d925b61b2caffb1d263a6c1d/LICENSE) - -If a contribution contains 3rd party source code with its own license, it -may retain it, so long as that license is compatible with the Forge license. - -API ---- - - - -### Options - -If at any time you wish to disable the use of native code, where available, -for particular forge features like its secure random number generator, you -may set the ```forge.options.usePureJavaScript``` flag to ```true```. It is -not recommended that you set this flag as native code is typically more -performant and may have stronger security properties. It may be useful to -set this flag to test certain features that you plan to run in environments -that are different from your testing environment. - -To disable native code when including forge in the browser: - -```js -// run this *after* including the forge script -forge.options.usePureJavaScript = true; -``` - -To disable native code when using Node.js: - -```js -var forge = require('node-forge'); -forge.options.usePureJavaScript = true; -``` - -Transports ----------- - - - -### TLS - -Provides a native javascript client and server-side [TLS][] implementation. - -__Examples__ - -```js -// create TLS client -var client = forge.tls.createConnection({ - server: false, - caStore: /* Array of PEM-formatted certs or a CA store object */, - sessionCache: {}, - // supported cipher suites in order of preference - cipherSuites: [ - forge.tls.CipherSuites.TLS_RSA_WITH_AES_128_CBC_SHA, - forge.tls.CipherSuites.TLS_RSA_WITH_AES_256_CBC_SHA], - virtualHost: 'example.com', - verify: function(connection, verified, depth, certs) { - if(depth === 0) { - var cn = certs[0].subject.getField('CN').value; - if(cn !== 'example.com') { - verified = { - alert: forge.tls.Alert.Description.bad_certificate, - message: 'Certificate common name does not match hostname.' - }; - } - } - return verified; - }, - connected: function(connection) { - console.log('connected'); - // send message to server - connection.prepare(forge.util.encodeUtf8('Hi server!')); - /* NOTE: experimental, start heartbeat retransmission timer - myHeartbeatTimer = setInterval(function() { - connection.prepareHeartbeatRequest(forge.util.createBuffer('1234')); - }, 5*60*1000);*/ - }, - /* provide a client-side cert if you want - getCertificate: function(connection, hint) { - return myClientCertificate; - }, - /* the private key for the client-side cert if provided */ - getPrivateKey: function(connection, cert) { - return myClientPrivateKey; - }, - tlsDataReady: function(connection) { - // TLS data (encrypted) is ready to be sent to the server - sendToServerSomehow(connection.tlsData.getBytes()); - // if you were communicating with the server below, you'd do: - // server.process(connection.tlsData.getBytes()); - }, - dataReady: function(connection) { - // clear data from the server is ready - console.log('the server sent: ' + - forge.util.decodeUtf8(connection.data.getBytes())); - // close connection - connection.close(); - }, - /* NOTE: experimental - heartbeatReceived: function(connection, payload) { - // restart retransmission timer, look at payload - clearInterval(myHeartbeatTimer); - myHeartbeatTimer = setInterval(function() { - connection.prepareHeartbeatRequest(forge.util.createBuffer('1234')); - }, 5*60*1000); - payload.getBytes(); - },*/ - closed: function(connection) { - console.log('disconnected'); - }, - error: function(connection, error) { - console.log('uh oh', error); - } -}); - -// start the handshake process -client.handshake(); - -// when encrypted TLS data is received from the server, process it -client.process(encryptedBytesFromServer); - -// create TLS server -var server = forge.tls.createConnection({ - server: true, - caStore: /* Array of PEM-formatted certs or a CA store object */, - sessionCache: {}, - // supported cipher suites in order of preference - cipherSuites: [ - forge.tls.CipherSuites.TLS_RSA_WITH_AES_128_CBC_SHA, - forge.tls.CipherSuites.TLS_RSA_WITH_AES_256_CBC_SHA], - // require a client-side certificate if you want - verifyClient: true, - verify: function(connection, verified, depth, certs) { - if(depth === 0) { - var cn = certs[0].subject.getField('CN').value; - if(cn !== 'the-client') { - verified = { - alert: forge.tls.Alert.Description.bad_certificate, - message: 'Certificate common name does not match expected client.' - }; - } - } - return verified; - }, - connected: function(connection) { - console.log('connected'); - // send message to client - connection.prepare(forge.util.encodeUtf8('Hi client!')); - /* NOTE: experimental, start heartbeat retransmission timer - myHeartbeatTimer = setInterval(function() { - connection.prepareHeartbeatRequest(forge.util.createBuffer('1234')); - }, 5*60*1000);*/ - }, - getCertificate: function(connection, hint) { - return myServerCertificate; - }, - getPrivateKey: function(connection, cert) { - return myServerPrivateKey; - }, - tlsDataReady: function(connection) { - // TLS data (encrypted) is ready to be sent to the client - sendToClientSomehow(connection.tlsData.getBytes()); - // if you were communicating with the client above you'd do: - // client.process(connection.tlsData.getBytes()); - }, - dataReady: function(connection) { - // clear data from the client is ready - console.log('the client sent: ' + - forge.util.decodeUtf8(connection.data.getBytes())); - // close connection - connection.close(); - }, - /* NOTE: experimental - heartbeatReceived: function(connection, payload) { - // restart retransmission timer, look at payload - clearInterval(myHeartbeatTimer); - myHeartbeatTimer = setInterval(function() { - connection.prepareHeartbeatRequest(forge.util.createBuffer('1234')); - }, 5*60*1000); - payload.getBytes(); - },*/ - closed: function(connection) { - console.log('disconnected'); - }, - error: function(connection, error) { - console.log('uh oh', error); - } -}); - -// when encrypted TLS data is received from the client, process it -server.process(encryptedBytesFromClient); -``` - -Connect to a TLS server using node's net.Socket: - -```js -var socket = new net.Socket(); - -var client = forge.tls.createConnection({ - server: false, - verify: function(connection, verified, depth, certs) { - // skip verification for testing - console.log('[tls] server certificate verified'); - return true; - }, - connected: function(connection) { - console.log('[tls] connected'); - // prepare some data to send (note that the string is interpreted as - // 'binary' encoded, which works for HTTP which only uses ASCII, use - // forge.util.encodeUtf8(str) otherwise - client.prepare('GET / HTTP/1.0\r\n\r\n'); - }, - tlsDataReady: function(connection) { - // encrypted data is ready to be sent to the server - var data = connection.tlsData.getBytes(); - socket.write(data, 'binary'); // encoding should be 'binary' - }, - dataReady: function(connection) { - // clear data from the server is ready - var data = connection.data.getBytes(); - console.log('[tls] data received from the server: ' + data); - }, - closed: function() { - console.log('[tls] disconnected'); - }, - error: function(connection, error) { - console.log('[tls] error', error); - } -}); - -socket.on('connect', function() { - console.log('[socket] connected'); - client.handshake(); -}); -socket.on('data', function(data) { - client.process(data.toString('binary')); // encoding should be 'binary' -}); -socket.on('end', function() { - console.log('[socket] disconnected'); -}); - -// connect to google.com -socket.connect(443, 'google.com'); - -// or connect to gmail's imap server (but don't send the HTTP header above) -//socket.connect(993, 'imap.gmail.com'); -``` - - - -### HTTP - -Provides a native [JavaScript][] mini-implementation of an http client that -uses pooled sockets. - -__Examples__ - -```js -// create an HTTP GET request -var request = forge.http.createRequest({method: 'GET', path: url.path}); - -// send the request somewhere -sendSomehow(request.toString()); - -// receive response -var buffer = forge.util.createBuffer(); -var response = forge.http.createResponse(); -var someAsyncDataHandler = function(bytes) { - if(!response.bodyReceived) { - buffer.putBytes(bytes); - if(!response.headerReceived) { - if(response.readHeader(buffer)) { - console.log('HTTP response header: ' + response.toString()); - } - } - if(response.headerReceived && !response.bodyReceived) { - if(response.readBody(buffer)) { - console.log('HTTP response body: ' + response.body); - } - } - } -}; -``` - - - -### SSH - -Provides some SSH utility functions. - -__Examples__ - -```js -// encodes (and optionally encrypts) a private RSA key as a Putty PPK file -forge.ssh.privateKeyToPutty(privateKey, passphrase, comment); - -// encodes a public RSA key as an OpenSSH file -forge.ssh.publicKeyToOpenSSH(key, comment); - -// encodes a private RSA key as an OpenSSH file -forge.ssh.privateKeyToOpenSSH(privateKey, passphrase); - -// gets the SSH public key fingerprint in a byte buffer -forge.ssh.getPublicKeyFingerprint(key); - -// gets a hex-encoded, colon-delimited SSH public key fingerprint -forge.ssh.getPublicKeyFingerprint(key, {encoding: 'hex', delimiter: ':'}); -``` - - - -### XHR - -Provides an XmlHttpRequest implementation using forge.http as a backend. - -__Examples__ - -```js -// TODO -``` - - - -### Sockets - -Provides an interface to create and use raw sockets provided via Flash. - -__Examples__ - -```js -// TODO -``` - -Ciphers -------- - - - -### CIPHER - -Provides a basic API for block encryption and decryption. There is built-in -support for the ciphers: [AES][], [3DES][], and [DES][], and for the modes -of operation: [ECB][], [CBC][], [CFB][], [OFB][], [CTR][], and [GCM][]. - -These algorithms are currently supported: - -* AES-ECB -* AES-CBC -* AES-CFB -* AES-OFB -* AES-CTR -* AES-GCM -* 3DES-ECB -* 3DES-CBC -* DES-ECB -* DES-CBC - -When using an [AES][] algorithm, the key size will determine whether -AES-128, AES-192, or AES-256 is used (all are supported). When a [DES][] -algorithm is used, the key size will determine whether [3DES][] or regular -[DES][] is used. Use a [3DES][] algorithm to enforce Triple-DES. - -__Examples__ - -```js -// generate a random key and IV -// Note: a key size of 16 bytes will use AES-128, 24 => AES-192, 32 => AES-256 -var key = forge.random.getBytesSync(16); -var iv = forge.random.getBytesSync(16); - -/* alternatively, generate a password-based 16-byte key -var salt = forge.random.getBytesSync(128); -var key = forge.pkcs5.pbkdf2('password', salt, numIterations, 16); -*/ - -// encrypt some bytes using CBC mode -// (other modes include: ECB, CFB, OFB, CTR, and GCM) -// Note: CBC and ECB modes use PKCS#7 padding as default -var cipher = forge.cipher.createCipher('AES-CBC', key); -cipher.start({iv: iv}); -cipher.update(forge.util.createBuffer(someBytes)); -cipher.finish(); -var encrypted = cipher.output; -// outputs encrypted hex -console.log(encrypted.toHex()); - -// decrypt some bytes using CBC mode -// (other modes include: CFB, OFB, CTR, and GCM) -var decipher = forge.cipher.createDecipher('AES-CBC', key); -decipher.start({iv: iv}); -decipher.update(encrypted); -var result = decipher.finish(); // check 'result' for true/false -// outputs decrypted hex -console.log(decipher.output.toHex()); - -// decrypt bytes using CBC mode and streaming -// Performance can suffer for large multi-MB inputs due to buffer -// manipulations. Stream processing in chunks can offer significant -// improvement. CPU intensive update() calls could also be performed with -// setImmediate/setTimeout to avoid blocking the main browser UI thread (not -// shown here). Optimal block size depends on the JavaScript VM and other -// factors. Encryption can use a simple technique for increased performance. -var encryptedBytes = encrypted.bytes(); -var decipher = forge.cipher.createDecipher('AES-CBC', key); -decipher.start({iv: iv}); -var length = encryptedBytes.length; -var chunkSize = 1024 * 64; -var index = 0; -var decrypted = ''; -do { - decrypted += decipher.output.getBytes(); - var buf = forge.util.createBuffer(encryptedBytes.substr(index, chunkSize)); - decipher.update(buf); - index += chunkSize; -} while(index < length); -var result = decipher.finish(); -assert(result); -decrypted += decipher.output.getBytes(); -console.log(forge.util.bytesToHex(decrypted)); - -// encrypt some bytes using GCM mode -var cipher = forge.cipher.createCipher('AES-GCM', key); -cipher.start({ - iv: iv, // should be a 12-byte binary-encoded string or byte buffer - additionalData: 'binary-encoded string', // optional - tagLength: 128 // optional, defaults to 128 bits -}); -cipher.update(forge.util.createBuffer(someBytes)); -cipher.finish(); -var encrypted = cipher.output; -var tag = cipher.mode.tag; -// outputs encrypted hex -console.log(encrypted.toHex()); -// outputs authentication tag -console.log(tag.toHex()); - -// decrypt some bytes using GCM mode -var decipher = forge.cipher.createDecipher('AES-GCM', key); -decipher.start({ - iv: iv, - additionalData: 'binary-encoded string', // optional - tagLength: 128, // optional, defaults to 128 bits - tag: tag // authentication tag from encryption -}); -decipher.update(encrypted); -var pass = decipher.finish(); -// pass is false if there was a failure (eg: authentication tag didn't match) -if(pass) { - // outputs decrypted hex - console.log(decipher.output.toHex()); -} -``` - -Using forge in Node.js to match openssl's "enc" command line tool (**Note**: OpenSSL "enc" uses a non-standard file format with a custom key derivation function and a fixed iteration count of 1, which some consider less secure than alternatives such as [OpenPGP](https://tools.ietf.org/html/rfc4880)/[GnuPG](https://www.gnupg.org/)): - -```js -var forge = require('node-forge'); -var fs = require('fs'); - -// openssl enc -des3 -in input.txt -out input.enc -function encrypt(password) { - var input = fs.readFileSync('input.txt', {encoding: 'binary'}); - - // 3DES key and IV sizes - var keySize = 24; - var ivSize = 8; - - // get derived bytes - // Notes: - // 1. If using an alternative hash (eg: "-md sha1") pass - // "forge.md.sha1.create()" as the final parameter. - // 2. If using "-nosalt", set salt to null. - var salt = forge.random.getBytesSync(8); - // var md = forge.md.sha1.create(); // "-md sha1" - var derivedBytes = forge.pbe.opensslDeriveBytes( - password, salt, keySize + ivSize/*, md*/); - var buffer = forge.util.createBuffer(derivedBytes); - var key = buffer.getBytes(keySize); - var iv = buffer.getBytes(ivSize); - - var cipher = forge.cipher.createCipher('3DES-CBC', key); - cipher.start({iv: iv}); - cipher.update(forge.util.createBuffer(input, 'binary')); - cipher.finish(); - - var output = forge.util.createBuffer(); - - // if using a salt, prepend this to the output: - if(salt !== null) { - output.putBytes('Salted__'); // (add to match openssl tool output) - output.putBytes(salt); - } - output.putBuffer(cipher.output); - - fs.writeFileSync('input.enc', output.getBytes(), {encoding: 'binary'}); -} - -// openssl enc -d -des3 -in input.enc -out input.dec.txt -function decrypt(password) { - var input = fs.readFileSync('input.enc', {encoding: 'binary'}); - - // parse salt from input - input = forge.util.createBuffer(input, 'binary'); - // skip "Salted__" (if known to be present) - input.getBytes('Salted__'.length); - // read 8-byte salt - var salt = input.getBytes(8); - - // Note: if using "-nosalt", skip above parsing and use - // var salt = null; - - // 3DES key and IV sizes - var keySize = 24; - var ivSize = 8; - - var derivedBytes = forge.pbe.opensslDeriveBytes( - password, salt, keySize + ivSize); - var buffer = forge.util.createBuffer(derivedBytes); - var key = buffer.getBytes(keySize); - var iv = buffer.getBytes(ivSize); - - var decipher = forge.cipher.createDecipher('3DES-CBC', key); - decipher.start({iv: iv}); - decipher.update(input); - var result = decipher.finish(); // check 'result' for true/false - - fs.writeFileSync( - 'input.dec.txt', decipher.output.getBytes(), {encoding: 'binary'}); -} -``` - - - -### AES - -Provides [AES][] encryption and decryption in [CBC][], [CFB][], [OFB][], -[CTR][], and [GCM][] modes. See [CIPHER](#cipher) for examples. - - - -### DES - -Provides [3DES][] and [DES][] encryption and decryption in [ECB][] and -[CBC][] modes. See [CIPHER](#cipher) for examples. - - - -### RC2 - -__Examples__ - -```js -// generate a random key and IV -var key = forge.random.getBytesSync(16); -var iv = forge.random.getBytesSync(8); - -// encrypt some bytes -var cipher = forge.rc2.createEncryptionCipher(key); -cipher.start(iv); -cipher.update(forge.util.createBuffer(someBytes)); -cipher.finish(); -var encrypted = cipher.output; -// outputs encrypted hex -console.log(encrypted.toHex()); - -// decrypt some bytes -var cipher = forge.rc2.createDecryptionCipher(key); -cipher.start(iv); -cipher.update(encrypted); -cipher.finish(); -// outputs decrypted hex -console.log(cipher.output.toHex()); -``` - -PKI ---- - -Provides [X.509][] certificate support, ED25519 key generation and -signing/verifying, and RSA public and private key encoding, decoding, -encryption/decryption, and signing/verifying. - - - -### ED25519 - -Special thanks to [TweetNaCl.js][] for providing the bulk of the implementation. - -__Examples__ - -```js -var ed25519 = forge.pki.ed25519; - -// generate a random ED25519 keypair -var keypair = ed25519.generateKeyPair(); -// `keypair.publicKey` is a node.js Buffer or Uint8Array -// `keypair.privateKey` is a node.js Buffer or Uint8Array - -// generate a random ED25519 keypair based on a random 32-byte seed -var seed = forge.random.getBytesSync(32); -var keypair = ed25519.generateKeyPair({seed: seed}); - -// generate a random ED25519 keypair based on a "password" 32-byte seed -var password = 'Mai9ohgh6ahxee0jutheew0pungoozil'; -var seed = new forge.util.ByteBuffer(password, 'utf8'); -var keypair = ed25519.generateKeyPair({seed: seed}); - -// sign a UTF-8 message -var signature = ED25519.sign({ - message: 'test', - // also accepts `binary` if you want to pass a binary string - encoding: 'utf8', - // node.js Buffer, Uint8Array, forge ByteBuffer, binary string - privateKey: privateKey -}); -// `signature` is a node.js Buffer or Uint8Array - -// sign a message passed as a buffer -var signature = ED25519.sign({ - // also accepts a forge ByteBuffer or Uint8Array - message: Buffer.from('test', 'utf8'), - privateKey: privateKey -}); - -// sign a message digest (shorter "message" == better performance) -var md = forge.md.sha256.create(); -md.update('test', 'utf8'); -var signature = ED25519.sign({ - md: md, - privateKey: privateKey -}); - -// verify a signature on a UTF-8 message -var verified = ED25519.verify({ - message: 'test', - encoding: 'utf8', - // node.js Buffer, Uint8Array, forge ByteBuffer, or binary string - signature: signature, - // node.js Buffer, Uint8Array, forge ByteBuffer, or binary string - publicKey: publicKey -}); -// `verified` is true/false - -// sign a message passed as a buffer -var verified = ED25519.verify({ - // also accepts a forge ByteBuffer or Uint8Array - message: Buffer.from('test', 'utf8'), - // node.js Buffer, Uint8Array, forge ByteBuffer, or binary string - signature: signature, - // node.js Buffer, Uint8Array, forge ByteBuffer, or binary string - publicKey: publicKey -}); - -// verify a signature on a message digest -var md = forge.md.sha256.create(); -md.update('test', 'utf8'); -var verified = ED25519.verify({ - md: md, - // node.js Buffer, Uint8Array, forge ByteBuffer, or binary string - signature: signature, - // node.js Buffer, Uint8Array, forge ByteBuffer, or binary string - publicKey: publicKey -}); -``` - - - -### RSA - -__Examples__ - -```js -var rsa = forge.pki.rsa; - -// generate an RSA key pair synchronously -// *NOT RECOMMENDED*: Can be significantly slower than async and may block -// JavaScript execution. Will use native Node.js 10.12.0+ API if possible. -var keypair = rsa.generateKeyPair({bits: 2048, e: 0x10001}); - -// generate an RSA key pair asynchronously (uses web workers if available) -// use workers: -1 to run a fast core estimator to optimize # of workers -// *RECOMMENDED*: Can be significantly faster than sync. Will use native -// Node.js 10.12.0+ or WebCrypto API if possible. -rsa.generateKeyPair({bits: 2048, workers: 2}, function(err, keypair) { - // keypair.privateKey, keypair.publicKey -}); - -// generate an RSA key pair in steps that attempt to run for a specified period -// of time on the main JS thread -var state = rsa.createKeyPairGenerationState(2048, 0x10001); -var step = function() { - // run for 100 ms - if(!rsa.stepKeyPairGenerationState(state, 100)) { - setTimeout(step, 1); - } - else { - // done, turn off progress indicator, use state.keys - } -}; -// turn on progress indicator, schedule generation to run -setTimeout(step); - -// sign data with a private key and output DigestInfo DER-encoded bytes -// (defaults to RSASSA PKCS#1 v1.5) -var md = forge.md.sha1.create(); -md.update('sign this', 'utf8'); -var signature = privateKey.sign(md); - -// verify data with a public key -// (defaults to RSASSA PKCS#1 v1.5) -var verified = publicKey.verify(md.digest().bytes(), signature); - -// sign data using RSASSA-PSS where PSS uses a SHA-1 hash, a SHA-1 based -// masking function MGF1, and a 20 byte salt -var md = forge.md.sha1.create(); -md.update('sign this', 'utf8'); -var pss = forge.pss.create({ - md: forge.md.sha1.create(), - mgf: forge.mgf.mgf1.create(forge.md.sha1.create()), - saltLength: 20 - // optionally pass 'prng' with a custom PRNG implementation - // optionalls pass 'salt' with a forge.util.ByteBuffer w/custom salt -}); -var signature = privateKey.sign(md, pss); - -// verify RSASSA-PSS signature -var pss = forge.pss.create({ - md: forge.md.sha1.create(), - mgf: forge.mgf.mgf1.create(forge.md.sha1.create()), - saltLength: 20 - // optionally pass 'prng' with a custom PRNG implementation -}); -var md = forge.md.sha1.create(); -md.update('sign this', 'utf8'); -publicKey.verify(md.digest().getBytes(), signature, pss); - -// encrypt data with a public key (defaults to RSAES PKCS#1 v1.5) -var encrypted = publicKey.encrypt(bytes); - -// decrypt data with a private key (defaults to RSAES PKCS#1 v1.5) -var decrypted = privateKey.decrypt(encrypted); - -// encrypt data with a public key using RSAES PKCS#1 v1.5 -var encrypted = publicKey.encrypt(bytes, 'RSAES-PKCS1-V1_5'); - -// decrypt data with a private key using RSAES PKCS#1 v1.5 -var decrypted = privateKey.decrypt(encrypted, 'RSAES-PKCS1-V1_5'); - -// encrypt data with a public key using RSAES-OAEP -var encrypted = publicKey.encrypt(bytes, 'RSA-OAEP'); - -// decrypt data with a private key using RSAES-OAEP -var decrypted = privateKey.decrypt(encrypted, 'RSA-OAEP'); - -// encrypt data with a public key using RSAES-OAEP/SHA-256 -var encrypted = publicKey.encrypt(bytes, 'RSA-OAEP', { - md: forge.md.sha256.create() -}); - -// decrypt data with a private key using RSAES-OAEP/SHA-256 -var decrypted = privateKey.decrypt(encrypted, 'RSA-OAEP', { - md: forge.md.sha256.create() -}); - -// encrypt data with a public key using RSAES-OAEP/SHA-256/MGF1-SHA-1 -// compatible with Java's RSA/ECB/OAEPWithSHA-256AndMGF1Padding -var encrypted = publicKey.encrypt(bytes, 'RSA-OAEP', { - md: forge.md.sha256.create(), - mgf1: { - md: forge.md.sha1.create() - } -}); - -// decrypt data with a private key using RSAES-OAEP/SHA-256/MGF1-SHA-1 -// compatible with Java's RSA/ECB/OAEPWithSHA-256AndMGF1Padding -var decrypted = privateKey.decrypt(encrypted, 'RSA-OAEP', { - md: forge.md.sha256.create(), - mgf1: { - md: forge.md.sha1.create() - } -}); - -``` - - - -### RSA-KEM - -__Examples__ - -```js -// generate an RSA key pair asynchronously (uses web workers if available) -// use workers: -1 to run a fast core estimator to optimize # of workers -forge.rsa.generateKeyPair({bits: 2048, workers: -1}, function(err, keypair) { - // keypair.privateKey, keypair.publicKey -}); - -// generate and encapsulate a 16-byte secret key -var kdf1 = new forge.kem.kdf1(forge.md.sha1.create()); -var kem = forge.kem.rsa.create(kdf1); -var result = kem.encrypt(keypair.publicKey, 16); -// result has 'encapsulation' and 'key' - -// encrypt some bytes -var iv = forge.random.getBytesSync(12); -var someBytes = 'hello world!'; -var cipher = forge.cipher.createCipher('AES-GCM', result.key); -cipher.start({iv: iv}); -cipher.update(forge.util.createBuffer(someBytes)); -cipher.finish(); -var encrypted = cipher.output.getBytes(); -var tag = cipher.mode.tag.getBytes(); - -// send 'encrypted', 'iv', 'tag', and result.encapsulation to recipient - -// decrypt encapsulated 16-byte secret key -var kdf1 = new forge.kem.kdf1(forge.md.sha1.create()); -var kem = forge.kem.rsa.create(kdf1); -var key = kem.decrypt(keypair.privateKey, result.encapsulation, 16); - -// decrypt some bytes -var decipher = forge.cipher.createDecipher('AES-GCM', key); -decipher.start({iv: iv, tag: tag}); -decipher.update(forge.util.createBuffer(encrypted)); -var pass = decipher.finish(); -// pass is false if there was a failure (eg: authentication tag didn't match) -if(pass) { - // outputs 'hello world!' - console.log(decipher.output.getBytes()); -} - -``` - - - -### X.509 - -__Examples__ - -```js -var pki = forge.pki; - -// convert a PEM-formatted public key to a Forge public key -var publicKey = pki.publicKeyFromPem(pem); - -// convert a Forge public key to PEM-format -var pem = pki.publicKeyToPem(publicKey); - -// convert an ASN.1 SubjectPublicKeyInfo to a Forge public key -var publicKey = pki.publicKeyFromAsn1(subjectPublicKeyInfo); - -// convert a Forge public key to an ASN.1 SubjectPublicKeyInfo -var subjectPublicKeyInfo = pki.publicKeyToAsn1(publicKey); - -// gets a SHA-1 RSAPublicKey fingerprint a byte buffer -pki.getPublicKeyFingerprint(key); - -// gets a SHA-1 SubjectPublicKeyInfo fingerprint a byte buffer -pki.getPublicKeyFingerprint(key, {type: 'SubjectPublicKeyInfo'}); - -// gets a hex-encoded, colon-delimited SHA-1 RSAPublicKey public key fingerprint -pki.getPublicKeyFingerprint(key, {encoding: 'hex', delimiter: ':'}); - -// gets a hex-encoded, colon-delimited SHA-1 SubjectPublicKeyInfo public key fingerprint -pki.getPublicKeyFingerprint(key, { - type: 'SubjectPublicKeyInfo', - encoding: 'hex', - delimiter: ':' -}); - -// gets a hex-encoded, colon-delimited MD5 RSAPublicKey public key fingerprint -pki.getPublicKeyFingerprint(key, { - md: forge.md.md5.create(), - encoding: 'hex', - delimiter: ':' -}); - -// creates a CA store -var caStore = pki.createCaStore([/* PEM-encoded cert */, ...]); - -// add a certificate to the CA store -caStore.addCertificate(certObjectOrPemString); - -// gets the issuer (its certificate) for the given certificate -var issuerCert = caStore.getIssuer(subjectCert); - -// verifies a certificate chain against a CA store -pki.verifyCertificateChain(caStore, chain, customVerifyCallback); - -// signs a certificate using the given private key -cert.sign(privateKey); - -// signs a certificate using SHA-256 instead of SHA-1 -cert.sign(privateKey, forge.md.sha256.create()); - -// verifies an issued certificate using the certificates public key -var verified = issuer.verify(issued); - -// generate a keypair and create an X.509v3 certificate -var keys = pki.rsa.generateKeyPair(2048); -var cert = pki.createCertificate(); -cert.publicKey = keys.publicKey; -// alternatively set public key from a csr -//cert.publicKey = csr.publicKey; -// NOTE: serialNumber is the hex encoded value of an ASN.1 INTEGER. -// Conforming CAs should ensure serialNumber is: -// - no more than 20 octets -// - non-negative (prefix a '00' if your value starts with a '1' bit) -cert.serialNumber = '01'; -cert.validity.notBefore = new Date(); -cert.validity.notAfter = new Date(); -cert.validity.notAfter.setFullYear(cert.validity.notBefore.getFullYear() + 1); -var attrs = [{ - name: 'commonName', - value: 'example.org' -}, { - name: 'countryName', - value: 'US' -}, { - shortName: 'ST', - value: 'Virginia' -}, { - name: 'localityName', - value: 'Blacksburg' -}, { - name: 'organizationName', - value: 'Test' -}, { - shortName: 'OU', - value: 'Test' -}]; -cert.setSubject(attrs); -// alternatively set subject from a csr -//cert.setSubject(csr.subject.attributes); -cert.setIssuer(attrs); -cert.setExtensions([{ - name: 'basicConstraints', - cA: true -}, { - name: 'keyUsage', - keyCertSign: true, - digitalSignature: true, - nonRepudiation: true, - keyEncipherment: true, - dataEncipherment: true -}, { - name: 'extKeyUsage', - serverAuth: true, - clientAuth: true, - codeSigning: true, - emailProtection: true, - timeStamping: true -}, { - name: 'nsCertType', - client: true, - server: true, - email: true, - objsign: true, - sslCA: true, - emailCA: true, - objCA: true -}, { - name: 'subjectAltName', - altNames: [{ - type: 6, // URI - value: 'http://example.org/webid#me' - }, { - type: 7, // IP - ip: '127.0.0.1' - }] -}, { - name: 'subjectKeyIdentifier' -}]); -/* alternatively set extensions from a csr -var extensions = csr.getAttribute({name: 'extensionRequest'}).extensions; -// optionally add more extensions -extensions.push.apply(extensions, [{ - name: 'basicConstraints', - cA: true -}, { - name: 'keyUsage', - keyCertSign: true, - digitalSignature: true, - nonRepudiation: true, - keyEncipherment: true, - dataEncipherment: true -}]); -cert.setExtensions(extensions); -*/ -// self-sign certificate -cert.sign(keys.privateKey); - -// convert a Forge certificate to PEM -var pem = pki.certificateToPem(cert); - -// convert a Forge certificate from PEM -var cert = pki.certificateFromPem(pem); - -// convert an ASN.1 X.509x3 object to a Forge certificate -var cert = pki.certificateFromAsn1(obj); - -// convert a Forge certificate to an ASN.1 X.509v3 object -var asn1Cert = pki.certificateToAsn1(cert); -``` - - - -### PKCS#5 - -Provides the password-based key-derivation function from [PKCS#5][]. - -__Examples__ - -```js -// generate a password-based 16-byte key -// note an optional message digest can be passed as the final parameter -var salt = forge.random.getBytesSync(128); -var derivedKey = forge.pkcs5.pbkdf2('password', salt, numIterations, 16); - -// generate key asynchronously -// note an optional message digest can be passed before the callback -forge.pkcs5.pbkdf2('password', salt, numIterations, 16, function(err, derivedKey) { - // do something w/derivedKey -}); -``` - - - -### PKCS#7 - -Provides cryptographically protected messages from [PKCS#7][]. - -__Examples__ - -```js -// convert a message from PEM -var p7 = forge.pkcs7.messageFromPem(pem); -// look at p7.recipients - -// find a recipient by the issuer of a certificate -var recipient = p7.findRecipient(cert); - -// decrypt -p7.decrypt(p7.recipients[0], privateKey); - -// create a p7 enveloped message -var p7 = forge.pkcs7.createEnvelopedData(); - -// add a recipient -var cert = forge.pki.certificateFromPem(certPem); -p7.addRecipient(cert); - -// set content -p7.content = forge.util.createBuffer('Hello'); - -// encrypt -p7.encrypt(); - -// convert message to PEM -var pem = forge.pkcs7.messageToPem(p7); - -// create a degenerate PKCS#7 certificate container -// (CRLs not currently supported, only certificates) -var p7 = forge.pkcs7.createSignedData(); -p7.addCertificate(certOrCertPem1); -p7.addCertificate(certOrCertPem2); -var pem = forge.pkcs7.messageToPem(p7); - -// create PKCS#7 signed data with authenticatedAttributes -// attributes include: PKCS#9 content-type, message-digest, and signing-time -var p7 = forge.pkcs7.createSignedData(); -p7.content = forge.util.createBuffer('Some content to be signed.', 'utf8'); -p7.addCertificate(certOrCertPem); -p7.addSigner({ - key: privateKeyAssociatedWithCert, - certificate: certOrCertPem, - digestAlgorithm: forge.pki.oids.sha256, - authenticatedAttributes: [{ - type: forge.pki.oids.contentType, - value: forge.pki.oids.data - }, { - type: forge.pki.oids.messageDigest - // value will be auto-populated at signing time - }, { - type: forge.pki.oids.signingTime, - // value can also be auto-populated at signing time - value: new Date() - }] -}); -p7.sign(); -var pem = forge.pkcs7.messageToPem(p7); - -// PKCS#7 Sign in detached mode. -// Includes the signature and certificate without the signed data. -p7.sign({detached: true}); - -``` - - - -### PKCS#8 - -__Examples__ - -```js -var pki = forge.pki; - -// convert a PEM-formatted private key to a Forge private key -var privateKey = pki.privateKeyFromPem(pem); - -// convert a Forge private key to PEM-format -var pem = pki.privateKeyToPem(privateKey); - -// convert an ASN.1 PrivateKeyInfo or RSAPrivateKey to a Forge private key -var privateKey = pki.privateKeyFromAsn1(rsaPrivateKey); - -// convert a Forge private key to an ASN.1 RSAPrivateKey -var rsaPrivateKey = pki.privateKeyToAsn1(privateKey); - -// wrap an RSAPrivateKey ASN.1 object in a PKCS#8 ASN.1 PrivateKeyInfo -var privateKeyInfo = pki.wrapRsaPrivateKey(rsaPrivateKey); - -// convert a PKCS#8 ASN.1 PrivateKeyInfo to PEM -var pem = pki.privateKeyInfoToPem(privateKeyInfo); - -// encrypts a PrivateKeyInfo using a custom password and -// outputs an EncryptedPrivateKeyInfo -var encryptedPrivateKeyInfo = pki.encryptPrivateKeyInfo( - privateKeyInfo, 'myCustomPasswordHere', { - algorithm: 'aes256', // 'aes128', 'aes192', 'aes256', '3des' - }); - -// decrypts an ASN.1 EncryptedPrivateKeyInfo that was encrypted -// with a custom password -var privateKeyInfo = pki.decryptPrivateKeyInfo( - encryptedPrivateKeyInfo, 'myCustomPasswordHere'); - -// converts an EncryptedPrivateKeyInfo to PEM -var pem = pki.encryptedPrivateKeyToPem(encryptedPrivateKeyInfo); - -// converts a PEM-encoded EncryptedPrivateKeyInfo to ASN.1 format -var encryptedPrivateKeyInfo = pki.encryptedPrivateKeyFromPem(pem); - -// wraps and encrypts a Forge private key and outputs it in PEM format -var pem = pki.encryptRsaPrivateKey(privateKey, 'password'); - -// encrypts a Forge private key and outputs it in PEM format using OpenSSL's -// proprietary legacy format + encapsulated PEM headers (DEK-Info) -var pem = pki.encryptRsaPrivateKey(privateKey, 'password', {legacy: true}); - -// decrypts a PEM-formatted, encrypted private key -var privateKey = pki.decryptRsaPrivateKey(pem, 'password'); - -// sets an RSA public key from a private key -var publicKey = pki.setRsaPublicKey(privateKey.n, privateKey.e); -``` - - - -### PKCS#10 - -Provides certification requests or certificate signing requests (CSR) from -[PKCS#10][]. - -__Examples__ - -```js -// generate a key pair -var keys = forge.pki.rsa.generateKeyPair(1024); - -// create a certification request (CSR) -var csr = forge.pki.createCertificationRequest(); -csr.publicKey = keys.publicKey; -csr.setSubject([{ - name: 'commonName', - value: 'example.org' -}, { - name: 'countryName', - value: 'US' -}, { - shortName: 'ST', - value: 'Virginia' -}, { - name: 'localityName', - value: 'Blacksburg' -}, { - name: 'organizationName', - value: 'Test' -}, { - shortName: 'OU', - value: 'Test' -}]); -// set (optional) attributes -csr.setAttributes([{ - name: 'challengePassword', - value: 'password' -}, { - name: 'unstructuredName', - value: 'My Company, Inc.' -}, { - name: 'extensionRequest', - extensions: [{ - name: 'subjectAltName', - altNames: [{ - // 2 is DNS type - type: 2, - value: 'test.domain.com' - }, { - type: 2, - value: 'other.domain.com', - }, { - type: 2, - value: 'www.domain.net' - }] - }] -}]); - -// sign certification request -csr.sign(keys.privateKey); - -// verify certification request -var verified = csr.verify(); - -// convert certification request to PEM-format -var pem = forge.pki.certificationRequestToPem(csr); - -// convert a Forge certification request from PEM-format -var csr = forge.pki.certificationRequestFromPem(pem); - -// get an attribute -csr.getAttribute({name: 'challengePassword'}); - -// get extensions array -csr.getAttribute({name: 'extensionRequest'}).extensions; - -``` - - - -### PKCS#12 - -Provides the cryptographic archive file format from [PKCS#12][]. - -**Note for Chrome/Firefox/iOS/similar users**: If you have trouble importing -a PKCS#12 container, try using the TripleDES algorithm. It can be passed -to `forge.pkcs12.toPkcs12Asn1` using the `{algorithm: '3des'}` option. - -__Examples__ - -```js -// decode p12 from base64 -var p12Der = forge.util.decode64(p12b64); -// get p12 as ASN.1 object -var p12Asn1 = forge.asn1.fromDer(p12Der); -// decrypt p12 using the password 'password' -var p12 = forge.pkcs12.pkcs12FromAsn1(p12Asn1, 'password'); -// decrypt p12 using non-strict parsing mode (resolves some ASN.1 parse errors) -var p12 = forge.pkcs12.pkcs12FromAsn1(p12Asn1, false, 'password'); -// decrypt p12 using literally no password (eg: Mac OS X/apple push) -var p12 = forge.pkcs12.pkcs12FromAsn1(p12Asn1); -// decrypt p12 using an "empty" password (eg: OpenSSL with no password input) -var p12 = forge.pkcs12.pkcs12FromAsn1(p12Asn1, ''); -// p12.safeContents is an array of safe contents, each of -// which contains an array of safeBags - -// get bags by friendlyName -var bags = p12.getBags({friendlyName: 'test'}); -// bags are key'd by attribute type (here "friendlyName") -// and the key values are an array of matching objects -var cert = bags.friendlyName[0]; - -// get bags by localKeyId -var bags = p12.getBags({localKeyId: buffer}); -// bags are key'd by attribute type (here "localKeyId") -// and the key values are an array of matching objects -var cert = bags.localKeyId[0]; - -// get bags by localKeyId (input in hex) -var bags = p12.getBags({localKeyIdHex: '7b59377ff142d0be4565e9ac3d396c01401cd879'}); -// bags are key'd by attribute type (here "localKeyId", *not* "localKeyIdHex") -// and the key values are an array of matching objects -var cert = bags.localKeyId[0]; - -// get bags by type -var bags = p12.getBags({bagType: forge.pki.oids.certBag}); -// bags are key'd by bagType and each bagType key's value -// is an array of matches (in this case, certificate objects) -var cert = bags[forge.pki.oids.certBag][0]; - -// get bags by friendlyName and filter on bag type -var bags = p12.getBags({ - friendlyName: 'test', - bagType: forge.pki.oids.certBag -}); - -// get key bags -var bags = p12.getBags({bagType: forge.pki.oids.keyBag}); -// get key -var bag = bags[forge.pki.oids.keyBag][0]; -var key = bag.key; -// if the key is in a format unrecognized by forge then -// bag.key will be `null`, use bag.asn1 to get the ASN.1 -// representation of the key -if(bag.key === null) { - var keyAsn1 = bag.asn1; - // can now convert back to DER/PEM/etc for export -} - -// generate a p12 using AES (default) -var p12Asn1 = forge.pkcs12.toPkcs12Asn1( - privateKey, certificateChain, 'password'); - -// generate a p12 that can be imported by Chrome/Firefox/iOS -// (requires the use of Triple DES instead of AES) -var p12Asn1 = forge.pkcs12.toPkcs12Asn1( - privateKey, certificateChain, 'password', - {algorithm: '3des'}); - -// base64-encode p12 -var p12Der = forge.asn1.toDer(p12Asn1).getBytes(); -var p12b64 = forge.util.encode64(p12Der); - -// create download link for p12 -var a = document.createElement('a'); -a.download = 'example.p12'; -a.setAttribute('href', 'data:application/x-pkcs12;base64,' + p12b64); -a.appendChild(document.createTextNode('Download')); -``` - - - -### ASN.1 - -Provides [ASN.1][] DER encoding and decoding. - -__Examples__ - -```js -var asn1 = forge.asn1; - -// create a SubjectPublicKeyInfo -var subjectPublicKeyInfo = - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // AlgorithmIdentifier - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // algorithm - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(pki.oids['rsaEncryption']).getBytes()), - // parameters (null) - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '') - ]), - // subjectPublicKey - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false, [ - // RSAPublicKey - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // modulus (n) - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - _bnToBytes(key.n)), - // publicExponent (e) - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - _bnToBytes(key.e)) - ]) - ]) - ]); - -// serialize an ASN.1 object to DER format -var derBuffer = asn1.toDer(subjectPublicKeyInfo); - -// deserialize to an ASN.1 object from a byte buffer filled with DER data -var object = asn1.fromDer(derBuffer); - -// convert an OID dot-separated string to a byte buffer -var derOidBuffer = asn1.oidToDer('1.2.840.113549.1.1.5'); - -// convert a byte buffer with a DER-encoded OID to a dot-separated string -console.log(asn1.derToOid(derOidBuffer)); -// output: 1.2.840.113549.1.1.5 - -// validates that an ASN.1 object matches a particular ASN.1 structure and -// captures data of interest from that structure for easy access -var publicKeyValidator = { - name: 'SubjectPublicKeyInfo', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - captureAsn1: 'subjectPublicKeyInfo', - value: [{ - name: 'SubjectPublicKeyInfo.AlgorithmIdentifier', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'AlgorithmIdentifier.algorithm', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OID, - constructed: false, - capture: 'publicKeyOid' - }] - }, { - // subjectPublicKey - name: 'SubjectPublicKeyInfo.subjectPublicKey', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.BITSTRING, - constructed: false, - value: [{ - // RSAPublicKey - name: 'SubjectPublicKeyInfo.subjectPublicKey.RSAPublicKey', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - optional: true, - captureAsn1: 'rsaPublicKey' - }] - }] -}; - -var capture = {}; -var errors = []; -if(!asn1.validate( - publicKeyValidator, subjectPublicKeyInfo, validator, capture, errors)) { - throw 'ASN.1 object is not a SubjectPublicKeyInfo.'; -} -// capture.subjectPublicKeyInfo contains the full ASN.1 object -// capture.rsaPublicKey contains the full ASN.1 object for the RSA public key -// capture.publicKeyOid only contains the value for the OID -var oid = asn1.derToOid(capture.publicKeyOid); -if(oid !== pki.oids['rsaEncryption']) { - throw 'Unsupported OID.'; -} - -// pretty print an ASN.1 object to a string for debugging purposes -asn1.prettyPrint(object); -``` - -Message Digests ----------------- - - - -### SHA1 - -Provides [SHA-1][] message digests. - -__Examples__ - -```js -var md = forge.md.sha1.create(); -md.update('The quick brown fox jumps over the lazy dog'); -console.log(md.digest().toHex()); -// output: 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12 -``` - - - -### SHA256 - -Provides [SHA-256][] message digests. - -__Examples__ - -```js -var md = forge.md.sha256.create(); -md.update('The quick brown fox jumps over the lazy dog'); -console.log(md.digest().toHex()); -// output: d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592 -``` - - - -### SHA384 - -Provides [SHA-384][] message digests. - -__Examples__ - -```js -var md = forge.md.sha384.create(); -md.update('The quick brown fox jumps over the lazy dog'); -console.log(md.digest().toHex()); -// output: ca737f1014a48f4c0b6dd43cb177b0afd9e5169367544c494011e3317dbf9a509cb1e5dc1e85a941bbee3d7f2afbc9b1 -``` - - - -### SHA512 - -Provides [SHA-512][] message digests. - -__Examples__ - -```js -// SHA-512 -var md = forge.md.sha512.create(); -md.update('The quick brown fox jumps over the lazy dog'); -console.log(md.digest().toHex()); -// output: 07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6 - -// SHA-512/224 -var md = forge.md.sha512.sha224.create(); -md.update('The quick brown fox jumps over the lazy dog'); -console.log(md.digest().toHex()); -// output: 944cd2847fb54558d4775db0485a50003111c8e5daa63fe722c6aa37 - -// SHA-512/256 -var md = forge.md.sha512.sha256.create(); -md.update('The quick brown fox jumps over the lazy dog'); -console.log(md.digest().toHex()); -// output: dd9d67b371519c339ed8dbd25af90e976a1eeefd4ad3d889005e532fc5bef04d -``` - - - -### MD5 - -Provides [MD5][] message digests. - -__Examples__ - -```js -var md = forge.md.md5.create(); -md.update('The quick brown fox jumps over the lazy dog'); -console.log(md.digest().toHex()); -// output: 9e107d9d372bb6826bd81d3542a419d6 -``` - - - -### HMAC - -Provides [HMAC][] w/any supported message digest algorithm. - -__Examples__ - -```js -var hmac = forge.hmac.create(); -hmac.start('sha1', 'Jefe'); -hmac.update('what do ya want for nothing?'); -console.log(hmac.digest().toHex()); -// output: effcdf6ae5eb2fa2d27416d5f184df9c259a7c79 -``` - -Utilities ---------- - - - -### Prime - -Provides an API for generating large, random, probable primes. - -__Examples__ - -```js -// generate a random prime on the main JS thread -var bits = 1024; -forge.prime.generateProbablePrime(bits, function(err, num) { - console.log('random prime', num.toString(16)); -}); - -// generate a random prime using Web Workers (if available, otherwise -// falls back to the main thread) -var bits = 1024; -var options = { - algorithm: { - name: 'PRIMEINC', - workers: -1 // auto-optimize # of workers - } -}; -forge.prime.generateProbablePrime(bits, options, function(err, num) { - console.log('random prime', num.toString(16)); -}); -``` - - - -### PRNG - -Provides a [Fortuna][]-based cryptographically-secure pseudo-random number -generator, to be used with a cryptographic function backend, e.g. [AES][]. An -implementation using [AES][] as a backend is provided. An API for collecting -entropy is given, though if window.crypto.getRandomValues is available, it will -be used automatically. - -__Examples__ - -```js -// get some random bytes synchronously -var bytes = forge.random.getBytesSync(32); -console.log(forge.util.bytesToHex(bytes)); - -// get some random bytes asynchronously -forge.random.getBytes(32, function(err, bytes) { - console.log(forge.util.bytesToHex(bytes)); -}); - -// collect some entropy if you'd like -forge.random.collect(someRandomBytes); -jQuery().mousemove(function(e) { - forge.random.collectInt(e.clientX, 16); - forge.random.collectInt(e.clientY, 16); -}); - -// specify a seed file for use with the synchronous API if you'd like -forge.random.seedFileSync = function(needed) { - // get 'needed' number of random bytes from somewhere - return fetchedRandomBytes; -}; - -// specify a seed file for use with the asynchronous API if you'd like -forge.random.seedFile = function(needed, callback) { - // get the 'needed' number of random bytes from somewhere - callback(null, fetchedRandomBytes); -}); - -// register the main thread to send entropy or a Web Worker to receive -// entropy on demand from the main thread -forge.random.registerWorker(self); - -// generate a new instance of a PRNG with no collected entropy -var myPrng = forge.random.createInstance(); -``` - - - -### Tasks - -Provides queuing and synchronizing tasks in a web application. - -__Examples__ - -```js -// TODO -``` - - - -### Utilities - -Provides utility functions, including byte buffer support, base64, -bytes to/from hex, zlib inflate/deflate, etc. - -__Examples__ - -```js -// encode/decode base64 -var encoded = forge.util.encode64(str); -var str = forge.util.decode64(encoded); - -// encode/decode UTF-8 -var encoded = forge.util.encodeUtf8(str); -var str = forge.util.decodeUtf8(encoded); - -// bytes to/from hex -var bytes = forge.util.hexToBytes(hex); -var hex = forge.util.bytesToHex(bytes); - -// create an empty byte buffer -var buffer = forge.util.createBuffer(); -// create a byte buffer from raw binary bytes -var buffer = forge.util.createBuffer(input, 'raw'); -// create a byte buffer from utf8 bytes -var buffer = forge.util.createBuffer(input, 'utf8'); - -// get the length of the buffer in bytes -buffer.length(); -// put bytes into the buffer -buffer.putBytes(bytes); -// put a 32-bit integer into the buffer -buffer.putInt32(10); -// buffer to hex -buffer.toHex(); -// get a copy of the bytes in the buffer -bytes.bytes(/* count */); -// empty this buffer and get its contents -bytes.getBytes(/* count */); - -// convert a forge buffer into a Node.js Buffer -// make sure you specify the encoding as 'binary' -var forgeBuffer = forge.util.createBuffer(); -var nodeBuffer = Buffer.from(forgeBuffer.getBytes(), 'binary'); - -// convert a Node.js Buffer into a forge buffer -// make sure you specify the encoding as 'binary' -var nodeBuffer = Buffer.from('CAFE', 'hex'); -var forgeBuffer = forge.util.createBuffer(nodeBuffer.toString('binary')); - -// parse a URL -var parsed = forge.util.parseUrl('http://example.com/foo?bar=baz'); -// parsed.scheme, parsed.host, parsed.port, parsed.path, parsed.fullHost -``` - - - -### Logging - -Provides logging to a javascript console using various categories and -levels of verbosity. - -__Examples__ - -```js -// TODO -``` - - - -### Debugging - -Provides storage of debugging information normally inaccessible in -closures for viewing/investigation. - -__Examples__ - -```js -// TODO -``` - - - -### Flash Networking Support - -The [flash README](./flash/README.md) provides details on rebuilding the -optional Flash component used for networking. It also provides details on -Policy Server support. - -Security Considerations ------------------------ - -When using this code please keep the following in mind: - -- Cryptography is hard. Please review and test this code before depending on it - for critical functionality. -- The nature of JavaScript is that execution of this code depends on trusting a - very large set of JavaScript tools and systems. Consider runtime variations, - runtime characteristics, runtime optimization, code optimization, code - minimization, code obfuscation, bundling tools, possible bugs, the Forge code - itself, and so on. -- If using pre-built bundles from [Bower][] or similar be aware someone else - ran the tools to create those files. -- Use a secure transport channel such as [TLS][] to load scripts and consider - using additional security mechanisms such as [Subresource Integrity][] script - attributes. -- Use "native" functionality where possible. This can be critical when dealing - with performance and random number generation. Note that the JavaScript - random number algorithms should perform well if given suitable entropy. -- Understand possible attacks against cryptographic systems. For instance side - channel and timing attacks may be possible due to the difficulty in - implementing constant time algorithms in pure JavaScript. -- Certain features in this library are less susceptible to attacks depending on - usage. This primarily includes features that deal with data format - manipulation or those that are not involved in communication. - -Library Background ------------------- - -* https://digitalbazaar.com/2010/07/20/javascript-tls-1/ -* https://digitalbazaar.com/2010/07/20/javascript-tls-2/ - -Contact -------- - -* Code: https://github.com/digitalbazaar/forge -* Bugs: https://github.com/digitalbazaar/forge/issues -* Email: support@digitalbazaar.com -* IRC: [#forgejs][] on [freenode][] - -Donations ---------- - -Financial support is welcome and helps contribute to futher development: - -* For [PayPal][] please send to paypal@digitalbazaar.com. -* Something else? Please contact support@digitalbazaar.com. - -[#forgejs]: https://webchat.freenode.net/?channels=#forgejs -[0.6.x]: https://github.com/digitalbazaar/forge/tree/0.6.x -[3DES]: https://en.wikipedia.org/wiki/Triple_DES -[AES]: https://en.wikipedia.org/wiki/Advanced_Encryption_Standard -[ASN.1]: https://en.wikipedia.org/wiki/ASN.1 -[Bower]: https://bower.io/ -[Browserify]: http://browserify.org/ -[CBC]: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation -[CFB]: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation -[CTR]: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation -[CommonJS]: https://en.wikipedia.org/wiki/CommonJS -[DES]: https://en.wikipedia.org/wiki/Data_Encryption_Standard -[ECB]: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation -[Fortuna]: https://en.wikipedia.org/wiki/Fortuna_(PRNG) -[GCM]: https://en.wikipedia.org/wiki/GCM_mode -[HMAC]: https://en.wikipedia.org/wiki/HMAC -[JavaScript]: https://en.wikipedia.org/wiki/JavaScript -[Karma]: https://karma-runner.github.io/ -[MD5]: https://en.wikipedia.org/wiki/MD5 -[Node.js]: https://nodejs.org/ -[OFB]: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation -[PKCS#10]: https://en.wikipedia.org/wiki/Certificate_signing_request -[PKCS#12]: https://en.wikipedia.org/wiki/PKCS_%E2%99%AF12 -[PKCS#5]: https://en.wikipedia.org/wiki/PKCS -[PKCS#7]: https://en.wikipedia.org/wiki/Cryptographic_Message_Syntax -[PayPal]: https://www.paypal.com/ -[RC2]: https://en.wikipedia.org/wiki/RC2 -[SHA-1]: https://en.wikipedia.org/wiki/SHA-1 -[SHA-256]: https://en.wikipedia.org/wiki/SHA-256 -[SHA-384]: https://en.wikipedia.org/wiki/SHA-384 -[SHA-512]: https://en.wikipedia.org/wiki/SHA-512 -[Subresource Integrity]: https://www.w3.org/TR/SRI/ -[TLS]: https://en.wikipedia.org/wiki/Transport_Layer_Security -[UMD]: https://github.com/umdjs/umd -[X.509]: https://en.wikipedia.org/wiki/X.509 -[freenode]: https://freenode.net/ -[unpkg]: https://unpkg.com/ -[webpack]: https://webpack.github.io/ -[TweetNaCl.js]: https://github.com/dchest/tweetnacl-js diff --git a/reverse_engineering/node_modules/node-forge/dist/forge.all.min.js b/reverse_engineering/node_modules/node-forge/dist/forge.all.min.js deleted file mode 100644 index 340fb12..0000000 --- a/reverse_engineering/node_modules/node-forge/dist/forge.all.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.forge=t():e.forge=t()}(window,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var a=t[n]={i:n,l:!1,exports:{}};return e[n].call(a.exports,a,a.exports,r),a.l=!0,a.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)r.d(n,a,function(t){return e[t]}.bind(null,a));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=36)}([function(e,t){e.exports={options:{usePureJavaScript:!1}}},function(e,t,r){(function(t){var n=r(0),a=r(40),i=e.exports=n.util=n.util||{};function s(e){if(8!==e&&16!==e&&24!==e&&32!==e)throw new Error("Only 8, 16, 24, or 32 bits supported: "+e)}function o(e){if(this.data="",this.read=0,"string"==typeof e)this.data=e;else if(i.isArrayBuffer(e)||i.isArrayBufferView(e))if("undefined"!=typeof Buffer&&e instanceof Buffer)this.data=e.toString("binary");else{var t=new Uint8Array(e);try{this.data=String.fromCharCode.apply(null,t)}catch(e){for(var r=0;r15?(r=Date.now(),s(e)):(t.push(e),1===t.length&&a.setAttribute("a",n=!n))}}i.nextTick=i.setImmediate}(),i.isNodejs="undefined"!=typeof process&&process.versions&&process.versions.node,i.globalScope=i.isNodejs?t:"undefined"==typeof self?window:self,i.isArray=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},i.isArrayBuffer=function(e){return"undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer},i.isArrayBufferView=function(e){return e&&i.isArrayBuffer(e.buffer)&&void 0!==e.byteLength},i.ByteBuffer=o,i.ByteStringBuffer=o;i.ByteStringBuffer.prototype._optimizeConstructedString=function(e){this._constructedStringLength+=e,this._constructedStringLength>4096&&(this.data.substr(0,1),this._constructedStringLength=0)},i.ByteStringBuffer.prototype.length=function(){return this.data.length-this.read},i.ByteStringBuffer.prototype.isEmpty=function(){return this.length()<=0},i.ByteStringBuffer.prototype.putByte=function(e){return this.putBytes(String.fromCharCode(e))},i.ByteStringBuffer.prototype.fillWithByte=function(e,t){e=String.fromCharCode(e);for(var r=this.data;t>0;)1&t&&(r+=e),(t>>>=1)>0&&(e+=e);return this.data=r,this._optimizeConstructedString(t),this},i.ByteStringBuffer.prototype.putBytes=function(e){return this.data+=e,this._optimizeConstructedString(e.length),this},i.ByteStringBuffer.prototype.putString=function(e){return this.putBytes(i.encodeUtf8(e))},i.ByteStringBuffer.prototype.putInt16=function(e){return this.putBytes(String.fromCharCode(e>>8&255)+String.fromCharCode(255&e))},i.ByteStringBuffer.prototype.putInt24=function(e){return this.putBytes(String.fromCharCode(e>>16&255)+String.fromCharCode(e>>8&255)+String.fromCharCode(255&e))},i.ByteStringBuffer.prototype.putInt32=function(e){return this.putBytes(String.fromCharCode(e>>24&255)+String.fromCharCode(e>>16&255)+String.fromCharCode(e>>8&255)+String.fromCharCode(255&e))},i.ByteStringBuffer.prototype.putInt16Le=function(e){return this.putBytes(String.fromCharCode(255&e)+String.fromCharCode(e>>8&255))},i.ByteStringBuffer.prototype.putInt24Le=function(e){return this.putBytes(String.fromCharCode(255&e)+String.fromCharCode(e>>8&255)+String.fromCharCode(e>>16&255))},i.ByteStringBuffer.prototype.putInt32Le=function(e){return this.putBytes(String.fromCharCode(255&e)+String.fromCharCode(e>>8&255)+String.fromCharCode(e>>16&255)+String.fromCharCode(e>>24&255))},i.ByteStringBuffer.prototype.putInt=function(e,t){s(t);var r="";do{t-=8,r+=String.fromCharCode(e>>t&255)}while(t>0);return this.putBytes(r)},i.ByteStringBuffer.prototype.putSignedInt=function(e,t){return e<0&&(e+=2<0);return t},i.ByteStringBuffer.prototype.getSignedInt=function(e){var t=this.getInt(e),r=2<=r&&(t-=r<<1),t},i.ByteStringBuffer.prototype.getBytes=function(e){var t;return e?(e=Math.min(this.length(),e),t=this.data.slice(this.read,this.read+e),this.read+=e):0===e?t="":(t=0===this.read?this.data:this.data.slice(this.read),this.clear()),t},i.ByteStringBuffer.prototype.bytes=function(e){return void 0===e?this.data.slice(this.read):this.data.slice(this.read,this.read+e)},i.ByteStringBuffer.prototype.at=function(e){return this.data.charCodeAt(this.read+e)},i.ByteStringBuffer.prototype.setAt=function(e,t){return this.data=this.data.substr(0,this.read+e)+String.fromCharCode(t)+this.data.substr(this.read+e+1),this},i.ByteStringBuffer.prototype.last=function(){return this.data.charCodeAt(this.data.length-1)},i.ByteStringBuffer.prototype.copy=function(){var e=i.createBuffer(this.data);return e.read=this.read,e},i.ByteStringBuffer.prototype.compact=function(){return this.read>0&&(this.data=this.data.slice(this.read),this.read=0),this},i.ByteStringBuffer.prototype.clear=function(){return this.data="",this.read=0,this},i.ByteStringBuffer.prototype.truncate=function(e){var t=Math.max(0,this.length()-e);return this.data=this.data.substr(this.read,t),this.read=0,this},i.ByteStringBuffer.prototype.toHex=function(){for(var e="",t=this.read;t=e)return this;t=Math.max(t||this.growSize,e);var r=new Uint8Array(this.data.buffer,this.data.byteOffset,this.data.byteLength),n=new Uint8Array(this.length()+t);return n.set(r),this.data=new DataView(n.buffer),this},i.DataBuffer.prototype.putByte=function(e){return this.accommodate(1),this.data.setUint8(this.write++,e),this},i.DataBuffer.prototype.fillWithByte=function(e,t){this.accommodate(t);for(var r=0;r>8&65535),this.data.setInt8(this.write,e>>16&255),this.write+=3,this},i.DataBuffer.prototype.putInt32=function(e){return this.accommodate(4),this.data.setInt32(this.write,e),this.write+=4,this},i.DataBuffer.prototype.putInt16Le=function(e){return this.accommodate(2),this.data.setInt16(this.write,e,!0),this.write+=2,this},i.DataBuffer.prototype.putInt24Le=function(e){return this.accommodate(3),this.data.setInt8(this.write,e>>16&255),this.data.setInt16(this.write,e>>8&65535,!0),this.write+=3,this},i.DataBuffer.prototype.putInt32Le=function(e){return this.accommodate(4),this.data.setInt32(this.write,e,!0),this.write+=4,this},i.DataBuffer.prototype.putInt=function(e,t){s(t),this.accommodate(t/8);do{t-=8,this.data.setInt8(this.write++,e>>t&255)}while(t>0);return this},i.DataBuffer.prototype.putSignedInt=function(e,t){return s(t),this.accommodate(t/8),e<0&&(e+=2<0);return t},i.DataBuffer.prototype.getSignedInt=function(e){var t=this.getInt(e),r=2<=r&&(t-=r<<1),t},i.DataBuffer.prototype.getBytes=function(e){var t;return e?(e=Math.min(this.length(),e),t=this.data.slice(this.read,this.read+e),this.read+=e):0===e?t="":(t=0===this.read?this.data:this.data.slice(this.read),this.clear()),t},i.DataBuffer.prototype.bytes=function(e){return void 0===e?this.data.slice(this.read):this.data.slice(this.read,this.read+e)},i.DataBuffer.prototype.at=function(e){return this.data.getUint8(this.read+e)},i.DataBuffer.prototype.setAt=function(e,t){return this.data.setUint8(e,t),this},i.DataBuffer.prototype.last=function(){return this.data.getUint8(this.write-1)},i.DataBuffer.prototype.copy=function(){return new i.DataBuffer(this)},i.DataBuffer.prototype.compact=function(){if(this.read>0){var e=new Uint8Array(this.data.buffer,this.read),t=new Uint8Array(e.byteLength);t.set(e),this.data=new DataView(t),this.write-=this.read,this.read=0}return this},i.DataBuffer.prototype.clear=function(){return this.data=new DataView(new ArrayBuffer(0)),this.read=this.write=0,this},i.DataBuffer.prototype.truncate=function(e){return this.write=Math.max(0,this.length()-e),this.read=Math.min(this.read,this.write),this},i.DataBuffer.prototype.toHex=function(){for(var e="",t=this.read;t0;)1&t&&(r+=e),(t>>>=1)>0&&(e+=e);return r},i.xorBytes=function(e,t,r){for(var n="",a="",i="",s=0,o=0;r>0;--r,++s)a=e.charCodeAt(s)^t.charCodeAt(s),o>=10&&(n+=i,i="",o=0),i+=String.fromCharCode(a),++o;return n+=i},i.hexToBytes=function(e){var t="",r=0;for(!0&e.length&&(r=1,t+=String.fromCharCode(parseInt(e[0],16)));r>24&255)+String.fromCharCode(e>>16&255)+String.fromCharCode(e>>8&255)+String.fromCharCode(255&e)};var c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",u=[62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,64,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],l="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";i.encode64=function(e,t){for(var r,n,a,i="",s="",o=0;o>2),i+=c.charAt((3&r)<<4|n>>4),isNaN(n)?i+="==":(i+=c.charAt((15&n)<<2|a>>6),i+=isNaN(a)?"=":c.charAt(63&a)),t&&i.length>t&&(s+=i.substr(0,t)+"\r\n",i=i.substr(t));return s+=i},i.decode64=function(e){e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");for(var t,r,n,a,i="",s=0;s>4),64!==n&&(i+=String.fromCharCode((15&r)<<4|n>>2),64!==a&&(i+=String.fromCharCode((3&n)<<6|a)));return i},i.encodeUtf8=function(e){return unescape(encodeURIComponent(e))},i.decodeUtf8=function(e){return decodeURIComponent(escape(e))},i.binary={raw:{},hex:{},base64:{},base58:{},baseN:{encode:a.encode,decode:a.decode}},i.binary.raw.encode=function(e){return String.fromCharCode.apply(null,e)},i.binary.raw.decode=function(e,t,r){var n=t;n||(n=new Uint8Array(e.length));for(var a=r=r||0,i=0;i>2),i+=c.charAt((3&r)<<4|n>>4),isNaN(n)?i+="==":(i+=c.charAt((15&n)<<2|a>>6),i+=isNaN(a)?"=":c.charAt(63&a)),t&&i.length>t&&(s+=i.substr(0,t)+"\r\n",i=i.substr(t));return s+=i},i.binary.base64.decode=function(e,t,r){var n,a,i,s,o=t;o||(o=new Uint8Array(3*Math.ceil(e.length/4))),e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");for(var c=0,l=r=r||0;c>4,64!==i&&(o[l++]=(15&a)<<4|i>>2,64!==s&&(o[l++]=(3&i)<<6|s));return t?l-r:o.subarray(0,l)},i.binary.base58.encode=function(e,t){return i.binary.baseN.encode(e,l,t)},i.binary.base58.decode=function(e,t){return i.binary.baseN.decode(e,l,t)},i.text={utf8:{},utf16:{}},i.text.utf8.encode=function(e,t,r){e=i.encodeUtf8(e);var n=t;n||(n=new Uint8Array(e.length));for(var a=r=r||0,s=0;s0?(a=r[n].substring(0,s),i=r[n].substring(s+1)):(a=r[n],i=null),a in t||(t[a]=[]),a in Object.prototype||null===i||t[a].push(unescape(i))}return t};return void 0===e?(null===m&&(m="undefined"!=typeof window&&window.location&&window.location.search?r(window.location.search.substring(1)):{}),t=m):t=r(e),t},i.parseFragment=function(e){var t=e,r="",n=e.indexOf("?");n>0&&(t=e.substring(0,n),r=e.substring(n+1));var a=t.split("/");return a.length>0&&""===a[0]&&a.shift(),{pathString:t,queryString:r,path:a,query:""===r?{}:i.getQueryVariables(r)}},i.makeRequest=function(e){var t=i.parseFragment(e),r={path:t.pathString,query:t.queryString,getPath:function(e){return void 0===e?t.path:t.path[e]},getQuery:function(e,r){var n;return void 0===e?n=t.query:(n=t.query[e])&&void 0!==r&&(n=n[r]),n},getQueryLast:function(e,t){var n=r.getQuery(e);return n?n[n.length-1]:t}};return r},i.makeLink=function(e,t,r){e=jQuery.isArray(e)?e.join("/"):e;var n=jQuery.param(t||{});return r=r||"",e+(n.length>0?"?"+n:"")+(r.length>0?"#"+r:"")},i.isEmpty=function(e){for(var t in e)if(e.hasOwnProperty(t))return!1;return!0},i.format=function(e){for(var t,r,n=/%./g,a=0,i=[],s=0;t=n.exec(e);){(r=e.substring(s,n.lastIndex-2)).length>0&&i.push(r),s=n.lastIndex;var o=t[0][1];switch(o){case"s":case"o":a");break;case"%":i.push("%");break;default:i.push("<%"+o+"?>")}}return i.push(e.substring(s)),i.join("")},i.formatNumber=function(e,t,r,n){var a=e,i=isNaN(t=Math.abs(t))?2:t,s=void 0===r?",":r,o=void 0===n?".":n,c=a<0?"-":"",u=parseInt(a=Math.abs(+a||0).toFixed(i),10)+"",l=u.length>3?u.length%3:0;return c+(l?u.substr(0,l)+o:"")+u.substr(l).replace(/(\d{3})(?=\d)/g,"$1"+o)+(i?s+Math.abs(a-u).toFixed(i).slice(2):"")},i.formatSize=function(e){return e=e>=1073741824?i.formatNumber(e/1073741824,2,".","")+" GiB":e>=1048576?i.formatNumber(e/1048576,2,".","")+" MiB":e>=1024?i.formatNumber(e/1024,0)+" KiB":i.formatNumber(e,0)+" bytes"},i.bytesFromIP=function(e){return-1!==e.indexOf(".")?i.bytesFromIPv4(e):-1!==e.indexOf(":")?i.bytesFromIPv6(e):null},i.bytesFromIPv4=function(e){if(4!==(e=e.split(".")).length)return null;for(var t=i.createBuffer(),r=0;rr[n].end-r[n].start&&(n=r.length-1)):r.push({start:c,end:c})}t.push(s)}if(r.length>0){var u=r[n];u.end-u.start>0&&(t.splice(u.start,u.end-u.start+1,""),0===u.start&&t.unshift(""),7===u.end&&t.push(""))}return t.join(":")},i.estimateCores=function(e,t){if("function"==typeof e&&(t=e,e={}),e=e||{},"cores"in i&&!e.update)return t(null,i.cores);if("undefined"!=typeof navigator&&"hardwareConcurrency"in navigator&&navigator.hardwareConcurrency>0)return i.cores=navigator.hardwareConcurrency,t(null,i.cores);if("undefined"==typeof Worker)return i.cores=1,t(null,i.cores);if("undefined"==typeof Blob)return i.cores=2,t(null,i.cores);var r=URL.createObjectURL(new Blob(["(",function(){self.addEventListener("message",(function(e){for(var t=Date.now(),r=t+4;Date.now()o.st&&a.sta.st&&o.stt){var n=new Error("Too few bytes to parse DER.");throw n.available=e.length(),n.remaining=t,n.requested=r,n}}a.Class={UNIVERSAL:0,APPLICATION:64,CONTEXT_SPECIFIC:128,PRIVATE:192},a.Type={NONE:0,BOOLEAN:1,INTEGER:2,BITSTRING:3,OCTETSTRING:4,NULL:5,OID:6,ODESC:7,EXTERNAL:8,REAL:9,ENUMERATED:10,EMBEDDED:11,UTF8:12,ROID:13,SEQUENCE:16,SET:17,PRINTABLESTRING:19,IA5STRING:22,UTCTIME:23,GENERALIZEDTIME:24,BMPSTRING:30},a.create=function(e,t,r,i,s){if(n.util.isArray(i)){for(var o=[],c=0;cr){if(s.strict){var d=new Error("Too few bytes to read ASN.1 value.");throw d.available=t.length(),d.remaining=r,d.requested=h,d}h=r}var y=32==(32&c);if(y)if(p=[],void 0===h)for(;;){if(i(t,r,2),t.bytes(2)===String.fromCharCode(0,0)){t.getBytes(2),r-=2;break}o=t.length(),p.push(e(t,r,n+1,s)),r-=o-t.length()}else for(;h>0;)o=t.length(),p.push(e(t,h,n+1,s)),r-=o-t.length(),h-=o-t.length();void 0===p&&u===a.Class.UNIVERSAL&&l===a.Type.BITSTRING&&(f=t.bytes(h));if(void 0===p&&s.decodeBitStrings&&u===a.Class.UNIVERSAL&&l===a.Type.BITSTRING&&h>1){var g=t.read,v=r,m=0;if(l===a.Type.BITSTRING&&(i(t,r,1),m=t.getByte(),r--),0===m)try{o=t.length();var C={verbose:s.verbose,strict:!0,decodeBitStrings:!0},E=e(t,r,n+1,C),S=o-t.length();r-=S,l==a.Type.BITSTRING&&S++;var T=E.tagClass;S!==h||T!==a.Class.UNIVERSAL&&T!==a.Class.CONTEXT_SPECIFIC||(p=[E])}catch(e){}void 0===p&&(t.read=g,r=v)}if(void 0===p){if(void 0===h){if(s.strict)throw new Error("Non-constructed ASN.1 object of indefinite length.");h=r}if(l===a.Type.BMPSTRING)for(p="";h>0;h-=2)i(t,r,2),p+=String.fromCharCode(t.getInt16()),r-=2;else p=t.getBytes(h)}var b=void 0===f?null:{bitStringContents:f};return a.create(u,l,y,p,b)}(e,e.length(),0,t)},a.toDer=function(e){var t=n.util.createBuffer(),r=e.tagClass|e.type,i=n.util.createBuffer(),s=!1;if("bitStringContents"in e&&(s=!0,e.original&&(s=a.equals(e,e.original))),s)i.putBytes(e.bitStringContents);else if(e.composed){e.constructed?r|=32:i.putByte(0);for(var o=0;o1&&(0===e.value.charCodeAt(0)&&0==(128&e.value.charCodeAt(1))||255===e.value.charCodeAt(0)&&128==(128&e.value.charCodeAt(1)))?i.putBytes(e.value.substr(1)):i.putBytes(e.value);if(t.putByte(r),i.length()<=127)t.putByte(127&i.length());else{var c=i.length(),u="";do{u+=String.fromCharCode(255&c),c>>>=8}while(c>0);t.putByte(128|u.length);for(o=u.length-1;o>=0;--o)t.putByte(u.charCodeAt(o))}return t.putBuffer(i),t},a.oidToDer=function(e){var t,r,a,i,s=e.split("."),o=n.util.createBuffer();o.putByte(40*parseInt(s[0],10)+parseInt(s[1],10));for(var c=2;c>>=7,t||(i|=128),r.push(i),t=!1}while(a>0);for(var u=r.length-1;u>=0;--u)o.putByte(r[u])}return o},a.derToOid=function(e){var t;"string"==typeof e&&(e=n.util.createBuffer(e));var r=e.getByte();t=Math.floor(r/40)+"."+r%40;for(var a=0;e.length()>0;)a<<=7,128&(r=e.getByte())?a+=127&r:(t+="."+(a+r),a=0);return t},a.utcTimeToDate=function(e){var t=new Date,r=parseInt(e.substr(0,2),10);r=r>=50?1900+r:2e3+r;var n=parseInt(e.substr(2,2),10)-1,a=parseInt(e.substr(4,2),10),i=parseInt(e.substr(6,2),10),s=parseInt(e.substr(8,2),10),o=0;if(e.length>11){var c=e.charAt(10),u=10;"+"!==c&&"-"!==c&&(o=parseInt(e.substr(10,2),10),u+=2)}if(t.setUTCFullYear(r,n,a),t.setUTCHours(i,s,o,0),u&&("+"===(c=e.charAt(u))||"-"===c)){var l=60*parseInt(e.substr(u+1,2),10)+parseInt(e.substr(u+4,2),10);l*=6e4,"+"===c?t.setTime(+t-l):t.setTime(+t+l)}return t},a.generalizedTimeToDate=function(e){var t=new Date,r=parseInt(e.substr(0,4),10),n=parseInt(e.substr(4,2),10)-1,a=parseInt(e.substr(6,2),10),i=parseInt(e.substr(8,2),10),s=parseInt(e.substr(10,2),10),o=parseInt(e.substr(12,2),10),c=0,u=0,l=!1;"Z"===e.charAt(e.length-1)&&(l=!0);var p=e.length-5,f=e.charAt(p);"+"!==f&&"-"!==f||(u=60*parseInt(e.substr(p+1,2),10)+parseInt(e.substr(p+4,2),10),u*=6e4,"+"===f&&(u*=-1),l=!0);return"."===e.charAt(14)&&(c=1e3*parseFloat(e.substr(14),10)),l?(t.setUTCFullYear(r,n,a),t.setUTCHours(i,s,o,c),t.setTime(+t+u)):(t.setFullYear(r,n,a),t.setHours(i,s,o,c)),t},a.dateToUtcTime=function(e){if("string"==typeof e)return e;var t="",r=[];r.push((""+e.getUTCFullYear()).substr(2)),r.push(""+(e.getUTCMonth()+1)),r.push(""+e.getUTCDate()),r.push(""+e.getUTCHours()),r.push(""+e.getUTCMinutes()),r.push(""+e.getUTCSeconds());for(var n=0;n=-128&&e<128)return t.putSignedInt(e,8);if(e>=-32768&&e<32768)return t.putSignedInt(e,16);if(e>=-8388608&&e<8388608)return t.putSignedInt(e,24);if(e>=-2147483648&&e<2147483648)return t.putSignedInt(e,32);var r=new Error("Integer too large; max is 32-bits.");throw r.integer=e,r},a.derToInteger=function(e){"string"==typeof e&&(e=n.util.createBuffer(e));var t=8*e.length();if(t>32)throw new Error("Integer too large; max is 32-bits.");return e.getSignedInt(t)},a.validate=function(e,t,r,i){var s=!1;if(e.tagClass!==t.tagClass&&void 0!==t.tagClass||e.type!==t.type&&void 0!==t.type)i&&(e.tagClass!==t.tagClass&&i.push("["+t.name+'] Expected tag class "'+t.tagClass+'", got "'+e.tagClass+'"'),e.type!==t.type&&i.push("["+t.name+'] Expected type "'+t.type+'", got "'+e.type+'"'));else if(e.constructed===t.constructed||void 0===t.constructed){if(s=!0,t.value&&n.util.isArray(t.value))for(var o=0,c=0;s&&c0&&(i+="\n");for(var o="",c=0;c1?i+="0x"+n.util.bytesToHex(e.value.slice(1)):i+="(none)",e.value.length>0){var f=e.value.charCodeAt(0);1==f?i+=" (1 unused bit shown)":f>1&&(i+=" ("+f+" unused bits shown)")}}else e.type===a.Type.OCTETSTRING?(s.test(e.value)||(i+="("+e.value+") "),i+="0x"+n.util.bytesToHex(e.value)):e.type===a.Type.UTF8?i+=n.util.decodeUtf8(e.value):e.type===a.Type.PRINTABLESTRING||e.type===a.Type.IA5String?i+=e.value:s.test(e.value)?i+="0x"+n.util.bytesToHex(e.value):0===e.value.length?i+="[null]":i+=e.value}return i}},function(e,t,r){var n=r(0);e.exports=n.md=n.md||{},n.md.algorithms=n.md.algorithms||{}},function(e,t,r){var n=r(0);function a(e,t){n.cipher.registerAlgorithm(e,(function(){return new n.aes.Algorithm(e,t)}))}r(14),r(21),r(1),e.exports=n.aes=n.aes||{},n.aes.startEncrypting=function(e,t,r,n){var a=d({key:e,output:r,decrypt:!1,mode:n});return a.start(t),a},n.aes.createEncryptionCipher=function(e,t){return d({key:e,output:null,decrypt:!1,mode:t})},n.aes.startDecrypting=function(e,t,r,n){var a=d({key:e,output:r,decrypt:!0,mode:n});return a.start(t),a},n.aes.createDecryptionCipher=function(e,t){return d({key:e,output:null,decrypt:!0,mode:t})},n.aes.Algorithm=function(e,t){l||p();var r=this;r.name=e,r.mode=new t({blockSize:16,cipher:{encrypt:function(e,t){return h(r._w,e,t,!1)},decrypt:function(e,t){return h(r._w,e,t,!0)}}}),r._init=!1},n.aes.Algorithm.prototype.initialize=function(e){if(!this._init){var t,r=e.key;if("string"!=typeof r||16!==r.length&&24!==r.length&&32!==r.length){if(n.util.isArray(r)&&(16===r.length||24===r.length||32===r.length)){t=r,r=n.util.createBuffer();for(var a=0;a>>=2;for(a=0;a>8^255&p^99,i[y]=p,s[p]=y,h=(f=e[p])<<24^p<<16^p<<8^p^f,d=((r=e[y])^(n=e[r])^(a=e[n]))<<24^(y^a)<<16^(y^n^a)<<8^y^r^a;for(var v=0;v<4;++v)c[v][y]=h,u[v][p]=d,h=h<<24|h>>>8,d=d<<24|d>>>8;0===y?y=g=1:(y=r^e[e[e[r^a]]],g^=e[e[g]])}}function f(e,t){for(var r,n=e.slice(0),a=1,s=n.length,c=4*(s+6+1),l=s;l>>16&255]<<24^i[r>>>8&255]<<16^i[255&r]<<8^i[r>>>24]^o[a]<<24,a++):s>6&&l%s==4&&(r=i[r>>>24]<<24^i[r>>>16&255]<<16^i[r>>>8&255]<<8^i[255&r]),n[l]=n[l-s]^r;if(t){for(var p,f=u[0],h=u[1],d=u[2],y=u[3],g=n.slice(0),v=(l=0,(c=n.length)-4);l>>24]]^h[i[p>>>16&255]]^d[i[p>>>8&255]]^y[i[255&p]];n=g}return n}function h(e,t,r,n){var a,o,l,p,f,h,d,y,g,v,m,C,E=e.length/4-1;n?(a=u[0],o=u[1],l=u[2],p=u[3],f=s):(a=c[0],o=c[1],l=c[2],p=c[3],f=i),h=t[0]^e[0],d=t[n?3:1]^e[1],y=t[2]^e[2],g=t[n?1:3]^e[3];for(var S=3,T=1;T>>24]^o[d>>>16&255]^l[y>>>8&255]^p[255&g]^e[++S],m=a[d>>>24]^o[y>>>16&255]^l[g>>>8&255]^p[255&h]^e[++S],C=a[y>>>24]^o[g>>>16&255]^l[h>>>8&255]^p[255&d]^e[++S],g=a[g>>>24]^o[h>>>16&255]^l[d>>>8&255]^p[255&y]^e[++S],h=v,d=m,y=C;r[0]=f[h>>>24]<<24^f[d>>>16&255]<<16^f[y>>>8&255]<<8^f[255&g]^e[++S],r[n?3:1]=f[d>>>24]<<24^f[y>>>16&255]<<16^f[g>>>8&255]<<8^f[255&h]^e[++S],r[2]=f[y>>>24]<<24^f[g>>>16&255]<<16^f[h>>>8&255]<<8^f[255&d]^e[++S],r[n?1:3]=f[g>>>24]<<24^f[h>>>16&255]<<16^f[d>>>8&255]<<8^f[255&y]^e[++S]}function d(e){var t,r="AES-"+((e=e||{}).mode||"CBC").toUpperCase(),a=(t=e.decrypt?n.cipher.createDecipher(r,e.key):n.cipher.createCipher(r,e.key)).start;return t.start=function(e,r){var i=null;r instanceof n.util.ByteBuffer&&(i=r,r={}),(r=r||{}).output=i,r.iv=e,a.call(t,r)},t}},function(e,t,r){var n=r(0);n.pki=n.pki||{};var a=e.exports=n.pki.oids=n.oids=n.oids||{};function i(e,t){a[e]=t,a[t]=e}function s(e,t){a[e]=t}i("1.2.840.113549.1.1.1","rsaEncryption"),i("1.2.840.113549.1.1.4","md5WithRSAEncryption"),i("1.2.840.113549.1.1.5","sha1WithRSAEncryption"),i("1.2.840.113549.1.1.7","RSAES-OAEP"),i("1.2.840.113549.1.1.8","mgf1"),i("1.2.840.113549.1.1.9","pSpecified"),i("1.2.840.113549.1.1.10","RSASSA-PSS"),i("1.2.840.113549.1.1.11","sha256WithRSAEncryption"),i("1.2.840.113549.1.1.12","sha384WithRSAEncryption"),i("1.2.840.113549.1.1.13","sha512WithRSAEncryption"),i("1.3.101.112","EdDSA25519"),i("1.2.840.10040.4.3","dsa-with-sha1"),i("1.3.14.3.2.7","desCBC"),i("1.3.14.3.2.26","sha1"),i("2.16.840.1.101.3.4.2.1","sha256"),i("2.16.840.1.101.3.4.2.2","sha384"),i("2.16.840.1.101.3.4.2.3","sha512"),i("1.2.840.113549.2.5","md5"),i("1.2.840.113549.1.7.1","data"),i("1.2.840.113549.1.7.2","signedData"),i("1.2.840.113549.1.7.3","envelopedData"),i("1.2.840.113549.1.7.4","signedAndEnvelopedData"),i("1.2.840.113549.1.7.5","digestedData"),i("1.2.840.113549.1.7.6","encryptedData"),i("1.2.840.113549.1.9.1","emailAddress"),i("1.2.840.113549.1.9.2","unstructuredName"),i("1.2.840.113549.1.9.3","contentType"),i("1.2.840.113549.1.9.4","messageDigest"),i("1.2.840.113549.1.9.5","signingTime"),i("1.2.840.113549.1.9.6","counterSignature"),i("1.2.840.113549.1.9.7","challengePassword"),i("1.2.840.113549.1.9.8","unstructuredAddress"),i("1.2.840.113549.1.9.14","extensionRequest"),i("1.2.840.113549.1.9.20","friendlyName"),i("1.2.840.113549.1.9.21","localKeyId"),i("1.2.840.113549.1.9.22.1","x509Certificate"),i("1.2.840.113549.1.12.10.1.1","keyBag"),i("1.2.840.113549.1.12.10.1.2","pkcs8ShroudedKeyBag"),i("1.2.840.113549.1.12.10.1.3","certBag"),i("1.2.840.113549.1.12.10.1.4","crlBag"),i("1.2.840.113549.1.12.10.1.5","secretBag"),i("1.2.840.113549.1.12.10.1.6","safeContentsBag"),i("1.2.840.113549.1.5.13","pkcs5PBES2"),i("1.2.840.113549.1.5.12","pkcs5PBKDF2"),i("1.2.840.113549.1.12.1.1","pbeWithSHAAnd128BitRC4"),i("1.2.840.113549.1.12.1.2","pbeWithSHAAnd40BitRC4"),i("1.2.840.113549.1.12.1.3","pbeWithSHAAnd3-KeyTripleDES-CBC"),i("1.2.840.113549.1.12.1.4","pbeWithSHAAnd2-KeyTripleDES-CBC"),i("1.2.840.113549.1.12.1.5","pbeWithSHAAnd128BitRC2-CBC"),i("1.2.840.113549.1.12.1.6","pbewithSHAAnd40BitRC2-CBC"),i("1.2.840.113549.2.7","hmacWithSHA1"),i("1.2.840.113549.2.8","hmacWithSHA224"),i("1.2.840.113549.2.9","hmacWithSHA256"),i("1.2.840.113549.2.10","hmacWithSHA384"),i("1.2.840.113549.2.11","hmacWithSHA512"),i("1.2.840.113549.3.7","des-EDE3-CBC"),i("2.16.840.1.101.3.4.1.2","aes128-CBC"),i("2.16.840.1.101.3.4.1.22","aes192-CBC"),i("2.16.840.1.101.3.4.1.42","aes256-CBC"),i("2.5.4.3","commonName"),i("2.5.4.5","serialName"),i("2.5.4.6","countryName"),i("2.5.4.7","localityName"),i("2.5.4.8","stateOrProvinceName"),i("2.5.4.9","streetAddress"),i("2.5.4.10","organizationName"),i("2.5.4.11","organizationalUnitName"),i("2.5.4.13","description"),i("2.5.4.15","businessCategory"),i("2.5.4.17","postalCode"),i("1.3.6.1.4.1.311.60.2.1.2","jurisdictionOfIncorporationStateOrProvinceName"),i("1.3.6.1.4.1.311.60.2.1.3","jurisdictionOfIncorporationCountryName"),i("2.16.840.1.113730.1.1","nsCertType"),i("2.16.840.1.113730.1.13","nsComment"),s("2.5.29.1","authorityKeyIdentifier"),s("2.5.29.2","keyAttributes"),s("2.5.29.3","certificatePolicies"),s("2.5.29.4","keyUsageRestriction"),s("2.5.29.5","policyMapping"),s("2.5.29.6","subtreesConstraint"),s("2.5.29.7","subjectAltName"),s("2.5.29.8","issuerAltName"),s("2.5.29.9","subjectDirectoryAttributes"),s("2.5.29.10","basicConstraints"),s("2.5.29.11","nameConstraints"),s("2.5.29.12","policyConstraints"),s("2.5.29.13","basicConstraints"),i("2.5.29.14","subjectKeyIdentifier"),i("2.5.29.15","keyUsage"),s("2.5.29.16","privateKeyUsagePeriod"),i("2.5.29.17","subjectAltName"),i("2.5.29.18","issuerAltName"),i("2.5.29.19","basicConstraints"),s("2.5.29.20","cRLNumber"),s("2.5.29.21","cRLReason"),s("2.5.29.22","expirationDate"),s("2.5.29.23","instructionCode"),s("2.5.29.24","invalidityDate"),s("2.5.29.25","cRLDistributionPoints"),s("2.5.29.26","issuingDistributionPoint"),s("2.5.29.27","deltaCRLIndicator"),s("2.5.29.28","issuingDistributionPoint"),s("2.5.29.29","certificateIssuer"),s("2.5.29.30","nameConstraints"),i("2.5.29.31","cRLDistributionPoints"),i("2.5.29.32","certificatePolicies"),s("2.5.29.33","policyMappings"),s("2.5.29.34","policyConstraints"),i("2.5.29.35","authorityKeyIdentifier"),s("2.5.29.36","policyConstraints"),i("2.5.29.37","extKeyUsage"),s("2.5.29.46","freshestCRL"),s("2.5.29.54","inhibitAnyPolicy"),i("1.3.6.1.4.1.11129.2.4.2","timestampList"),i("1.3.6.1.5.5.7.1.1","authorityInfoAccess"),i("1.3.6.1.5.5.7.3.1","serverAuth"),i("1.3.6.1.5.5.7.3.2","clientAuth"),i("1.3.6.1.5.5.7.3.3","codeSigning"),i("1.3.6.1.5.5.7.3.4","emailProtection"),i("1.3.6.1.5.5.7.3.8","timeStamping")},function(e,t,r){var n=r(0);r(1);var a=e.exports=n.pem=n.pem||{};function i(e){for(var t=e.name+": ",r=[],n=function(e,t){return" "+t},a=0;a65&&-1!==s){var o=t[s];","===o?(++s,t=t.substr(0,s)+"\r\n "+t.substr(s)):t=t.substr(0,s)+"\r\n"+o+t.substr(s+1),i=a-s-1,s=-1,++a}else" "!==t[a]&&"\t"!==t[a]&&","!==t[a]||(s=a);return t}function s(e){return e.replace(/^\s+/,"")}a.encode=function(e,t){t=t||{};var r,a="-----BEGIN "+e.type+"-----\r\n";if(e.procType&&(a+=i(r={name:"Proc-Type",values:[String(e.procType.version),e.procType.type]})),e.contentDomain&&(a+=i(r={name:"Content-Domain",values:[e.contentDomain]})),e.dekInfo&&(r={name:"DEK-Info",values:[e.dekInfo.algorithm]},e.dekInfo.parameters&&r.values.push(e.dekInfo.parameters),a+=i(r)),e.headers)for(var s=0;st.blockLength&&(t.start(),t.update(s.bytes()),s=t.digest()),r=n.util.createBuffer(),a=n.util.createBuffer(),u=s.length();for(c=0;c>>0,c>>>0];for(var u=a.fullMessageLength.length-1;u>=0;--u)a.fullMessageLength[u]+=c[1],c[1]=c[0]+(a.fullMessageLength[u]/4294967296>>>0),a.fullMessageLength[u]=a.fullMessageLength[u]>>>0,c[0]=c[1]/4294967296>>>0;return t.putBytes(i),o(e,r,t),(t.read>2048||0===t.length())&&t.compact(),a},a.digest=function(){var s=n.util.createBuffer();s.putBytes(t.bytes());var c,u=a.fullMessageLength[a.fullMessageLength.length-1]+a.messageLengthSize&a.blockLength-1;s.putBytes(i.substr(0,a.blockLength-u));for(var l=8*a.fullMessageLength[0],p=0;p>>0,s.putInt32(l>>>0),l=c>>>0;s.putInt32(l);var f={h0:e.h0,h1:e.h1,h2:e.h2,h3:e.h3,h4:e.h4};o(f,r,s);var h=n.util.createBuffer();return h.putInt32(f.h0),h.putInt32(f.h1),h.putInt32(f.h2),h.putInt32(f.h3),h.putInt32(f.h4),h},a};var i=null,s=!1;function o(e,t,r){for(var n,a,i,s,o,c,u,l=r.length();l>=64;){for(a=e.h0,i=e.h1,s=e.h2,o=e.h3,c=e.h4,u=0;u<16;++u)n=r.getInt32(),t[u]=n,n=(a<<5|a>>>27)+(o^i&(s^o))+c+1518500249+n,c=o,o=s,s=(i<<30|i>>>2)>>>0,i=a,a=n;for(;u<20;++u)n=(n=t[u-3]^t[u-8]^t[u-14]^t[u-16])<<1|n>>>31,t[u]=n,n=(a<<5|a>>>27)+(o^i&(s^o))+c+1518500249+n,c=o,o=s,s=(i<<30|i>>>2)>>>0,i=a,a=n;for(;u<32;++u)n=(n=t[u-3]^t[u-8]^t[u-14]^t[u-16])<<1|n>>>31,t[u]=n,n=(a<<5|a>>>27)+(i^s^o)+c+1859775393+n,c=o,o=s,s=(i<<30|i>>>2)>>>0,i=a,a=n;for(;u<40;++u)n=(n=t[u-6]^t[u-16]^t[u-28]^t[u-32])<<2|n>>>30,t[u]=n,n=(a<<5|a>>>27)+(i^s^o)+c+1859775393+n,c=o,o=s,s=(i<<30|i>>>2)>>>0,i=a,a=n;for(;u<60;++u)n=(n=t[u-6]^t[u-16]^t[u-28]^t[u-32])<<2|n>>>30,t[u]=n,n=(a<<5|a>>>27)+(i&s|o&(i^s))+c+2400959708+n,c=o,o=s,s=(i<<30|i>>>2)>>>0,i=a,a=n;for(;u<80;++u)n=(n=t[u-6]^t[u-16]^t[u-28]^t[u-32])<<2|n>>>30,t[u]=n,n=(a<<5|a>>>27)+(i^s^o)+c+3395469782+n,c=o,o=s,s=(i<<30|i>>>2)>>>0,i=a,a=n;e.h0=e.h0+a|0,e.h1=e.h1+i|0,e.h2=e.h2+s|0,e.h3=e.h3+o|0,e.h4=e.h4+c|0,l-=64}}},function(e,t,r){var n=r(0);r(3),r(8),r(15),r(7),r(22),r(2),r(9),r(1);var a=function(e,t,r,a){var i=n.util.createBuffer(),s=e.length>>1,o=s+(1&e.length),c=e.substr(0,o),u=e.substr(s,o),l=n.util.createBuffer(),p=n.hmac.create();r=t+r;var f=Math.ceil(a/16),h=Math.ceil(a/20);p.start("MD5",c);var d=n.util.createBuffer();l.putBytes(r);for(var y=0;y0&&(u.queue(e,u.createAlert(e,{level:u.Alert.Level.warning,description:u.Alert.Description.no_renegotiation})),u.flush(e)),e.process()},u.parseHelloMessage=function(e,t,r){var a=null,i=e.entity===u.ConnectionEnd.client;if(r<38)e.error(e,{message:i?"Invalid ServerHello message. Message too short.":"Invalid ClientHello message. Message too short.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.illegal_parameter}});else{var s=t.fragment,c=s.length();if(a={version:{major:s.getByte(),minor:s.getByte()},random:n.util.createBuffer(s.getBytes(32)),session_id:o(s,1),extensions:[]},i?(a.cipher_suite=s.getBytes(2),a.compression_method=s.getByte()):(a.cipher_suites=o(s,2),a.compression_methods=o(s,1)),(c=r-(c-s.length()))>0){for(var l=o(s,2);l.length()>0;)a.extensions.push({type:[l.getByte(),l.getByte()],data:o(l,2)});if(!i)for(var p=0;p0;){if(0!==h.getByte())break;e.session.extensions.server_name.serverNameList.push(o(h,2).getBytes())}}}if(e.session.version&&(a.version.major!==e.session.version.major||a.version.minor!==e.session.version.minor))return e.error(e,{message:"TLS version change is disallowed during renegotiation.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.protocol_version}});if(i)e.session.cipherSuite=u.getCipherSuite(a.cipher_suite);else for(var d=n.util.createBuffer(a.cipher_suites.bytes());d.length()>0&&(e.session.cipherSuite=u.getCipherSuite(d.getBytes(2)),null===e.session.cipherSuite););if(null===e.session.cipherSuite)return e.error(e,{message:"No cipher suites in common.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.handshake_failure},cipherSuite:n.util.bytesToHex(a.cipher_suite)});e.session.compressionMethod=i?a.compression_method:u.CompressionMethod.none}return a},u.createSecurityParameters=function(e,t){var r=e.entity===u.ConnectionEnd.client,n=t.random.bytes(),a=r?e.session.sp.client_random:n,i=r?n:u.createRandom().getBytes();e.session.sp={entity:e.entity,prf_algorithm:u.PRFAlgorithm.tls_prf_sha256,bulk_cipher_algorithm:null,cipher_type:null,enc_key_length:null,block_length:null,fixed_iv_length:null,record_iv_length:null,mac_algorithm:null,mac_length:null,mac_key_length:null,compression_algorithm:e.session.compressionMethod,pre_master_secret:null,master_secret:null,client_random:a,server_random:i}},u.handleServerHello=function(e,t,r){var n=u.parseHelloMessage(e,t,r);if(!e.fail){if(!(n.version.minor<=e.version.minor))return e.error(e,{message:"Incompatible TLS version.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.protocol_version}});e.version.minor=n.version.minor,e.session.version=e.version;var a=n.session_id.bytes();a.length>0&&a===e.session.id?(e.expect=d,e.session.resuming=!0,e.session.sp.server_random=n.random.bytes()):(e.expect=l,e.session.resuming=!1,u.createSecurityParameters(e,n)),e.session.id=a,e.process()}},u.handleClientHello=function(e,t,r){var a=u.parseHelloMessage(e,t,r);if(!e.fail){var i=a.session_id.bytes(),s=null;if(e.sessionCache&&(null===(s=e.sessionCache.getSession(i))?i="":(s.version.major!==a.version.major||s.version.minor>a.version.minor)&&(s=null,i="")),0===i.length&&(i=n.random.getBytes(32)),e.session.id=i,e.session.clientHelloVersion=a.version,e.session.sp={},s)e.version=e.session.version=s.version,e.session.sp=s.sp;else{for(var o,c=1;c0;)a=o(c.certificate_list,3),i=n.asn1.fromDer(a),a=n.pki.certificateFromAsn1(i,!0),l.push(a)}catch(t){return e.error(e,{message:"Could not parse certificate list.",cause:t,send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.bad_certificate}})}var f=e.entity===u.ConnectionEnd.client;!f&&!0!==e.verifyClient||0!==l.length?0===l.length?e.expect=f?p:C:(f?e.session.serverCertificate=l[0]:e.session.clientCertificate=l[0],u.verifyCertificateChain(e,l)&&(e.expect=f?p:C)):e.error(e,{message:f?"No server certificate provided.":"No client certificate provided.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.illegal_parameter}}),e.process()},u.handleServerKeyExchange=function(e,t,r){if(r>0)return e.error(e,{message:"Invalid key parameters. Only RSA is supported.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.unsupported_certificate}});e.expect=f,e.process()},u.handleClientKeyExchange=function(e,t,r){if(r<48)return e.error(e,{message:"Invalid key parameters. Only RSA is supported.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.unsupported_certificate}});var a=t.fragment,i={enc_pre_master_secret:o(a,2).getBytes()},s=null;if(e.getPrivateKey)try{s=e.getPrivateKey(e,e.session.serverCertificate),s=n.pki.privateKeyFromPem(s)}catch(t){e.error(e,{message:"Could not get private key.",cause:t,send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.internal_error}})}if(null===s)return e.error(e,{message:"No private key set.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.internal_error}});try{var c=e.session.sp;c.pre_master_secret=s.decrypt(i.enc_pre_master_secret);var l=e.session.clientHelloVersion;if(l.major!==c.pre_master_secret.charCodeAt(0)||l.minor!==c.pre_master_secret.charCodeAt(1))throw new Error("TLS version rollback attack detected.")}catch(e){c.pre_master_secret=n.random.getBytes(48)}e.expect=S,null!==e.session.clientCertificate&&(e.expect=E),e.process()},u.handleCertificateRequest=function(e,t,r){if(r<3)return e.error(e,{message:"Invalid CertificateRequest. Message too short.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.illegal_parameter}});var n=t.fragment,a={certificate_types:o(n,1),certificate_authorities:o(n,2)};e.session.certificateRequest=a,e.expect=h,e.process()},u.handleCertificateVerify=function(e,t,r){if(r<2)return e.error(e,{message:"Invalid CertificateVerify. Message too short.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.illegal_parameter}});var a=t.fragment;a.read-=4;var i=a.bytes();a.read+=4;var s={signature:o(a,2).getBytes()},c=n.util.createBuffer();c.putBuffer(e.session.md5.digest()),c.putBuffer(e.session.sha1.digest()),c=c.getBytes();try{if(!e.session.clientCertificate.publicKey.verify(c,s.signature,"NONE"))throw new Error("CertificateVerify signature does not match.");e.session.md5.update(i),e.session.sha1.update(i)}catch(t){return e.error(e,{message:"Bad signature in CertificateVerify.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.handshake_failure}})}e.expect=S,e.process()},u.handleServerHelloDone=function(e,t,r){if(r>0)return e.error(e,{message:"Invalid ServerHelloDone message. Invalid length.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.record_overflow}});if(null===e.serverCertificate){var a={message:"No server certificate provided. Not enough security.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.insufficient_security}},i=e.verify(e,a.alert.description,0,[]);if(!0!==i)return(i||0===i)&&("object"!=typeof i||n.util.isArray(i)?"number"==typeof i&&(a.alert.description=i):(i.message&&(a.message=i.message),i.alert&&(a.alert.description=i.alert))),e.error(e,a)}null!==e.session.certificateRequest&&(t=u.createRecord(e,{type:u.ContentType.handshake,data:u.createCertificate(e)}),u.queue(e,t)),t=u.createRecord(e,{type:u.ContentType.handshake,data:u.createClientKeyExchange(e)}),u.queue(e,t),e.expect=v;var s=function(e,t){null!==e.session.certificateRequest&&null!==e.session.clientCertificate&&u.queue(e,u.createRecord(e,{type:u.ContentType.handshake,data:u.createCertificateVerify(e,t)})),u.queue(e,u.createRecord(e,{type:u.ContentType.change_cipher_spec,data:u.createChangeCipherSpec()})),e.state.pending=u.createConnectionState(e),e.state.current.write=e.state.pending.write,u.queue(e,u.createRecord(e,{type:u.ContentType.handshake,data:u.createFinished(e)})),e.expect=d,u.flush(e),e.process()};if(null===e.session.certificateRequest||null===e.session.clientCertificate)return s(e,null);u.getClientSignature(e,s)},u.handleChangeCipherSpec=function(e,t){if(1!==t.fragment.getByte())return e.error(e,{message:"Invalid ChangeCipherSpec message received.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.illegal_parameter}});var r=e.entity===u.ConnectionEnd.client;(e.session.resuming&&r||!e.session.resuming&&!r)&&(e.state.pending=u.createConnectionState(e)),e.state.current.read=e.state.pending.read,(!e.session.resuming&&r||e.session.resuming&&!r)&&(e.state.pending=null),e.expect=r?y:T,e.process()},u.handleFinished=function(e,t,r){var i=t.fragment;i.read-=4;var s=i.bytes();i.read+=4;var o=t.fragment.getBytes();(i=n.util.createBuffer()).putBuffer(e.session.md5.digest()),i.putBuffer(e.session.sha1.digest());var c=e.entity===u.ConnectionEnd.client,l=c?"server finished":"client finished",p=e.session.sp;if((i=a(p.master_secret,l,i.getBytes(),12)).getBytes()!==o)return e.error(e,{message:"Invalid verify_data in Finished message.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.decrypt_error}});e.session.md5.update(s),e.session.sha1.update(s),(e.session.resuming&&c||!e.session.resuming&&!c)&&(u.queue(e,u.createRecord(e,{type:u.ContentType.change_cipher_spec,data:u.createChangeCipherSpec()})),e.state.current.write=e.state.pending.write,e.state.pending=null,u.queue(e,u.createRecord(e,{type:u.ContentType.handshake,data:u.createFinished(e)}))),e.expect=c?g:b,e.handshaking=!1,++e.handshakes,e.peerCertificate=c?e.session.serverCertificate:e.session.clientCertificate,u.flush(e),e.isConnected=!0,e.connected(e),e.process()},u.handleAlert=function(e,t){var r,n=t.fragment,a={level:n.getByte(),description:n.getByte()};switch(a.description){case u.Alert.Description.close_notify:r="Connection closed.";break;case u.Alert.Description.unexpected_message:r="Unexpected message.";break;case u.Alert.Description.bad_record_mac:r="Bad record MAC.";break;case u.Alert.Description.decryption_failed:r="Decryption failed.";break;case u.Alert.Description.record_overflow:r="Record overflow.";break;case u.Alert.Description.decompression_failure:r="Decompression failed.";break;case u.Alert.Description.handshake_failure:r="Handshake failure.";break;case u.Alert.Description.bad_certificate:r="Bad certificate.";break;case u.Alert.Description.unsupported_certificate:r="Unsupported certificate.";break;case u.Alert.Description.certificate_revoked:r="Certificate revoked.";break;case u.Alert.Description.certificate_expired:r="Certificate expired.";break;case u.Alert.Description.certificate_unknown:r="Certificate unknown.";break;case u.Alert.Description.illegal_parameter:r="Illegal parameter.";break;case u.Alert.Description.unknown_ca:r="Unknown certificate authority.";break;case u.Alert.Description.access_denied:r="Access denied.";break;case u.Alert.Description.decode_error:r="Decode error.";break;case u.Alert.Description.decrypt_error:r="Decrypt error.";break;case u.Alert.Description.export_restriction:r="Export restriction.";break;case u.Alert.Description.protocol_version:r="Unsupported protocol version.";break;case u.Alert.Description.insufficient_security:r="Insufficient security.";break;case u.Alert.Description.internal_error:r="Internal error.";break;case u.Alert.Description.user_canceled:r="User canceled.";break;case u.Alert.Description.no_renegotiation:r="Renegotiation not supported.";break;default:r="Unknown error."}if(a.description===u.Alert.Description.close_notify)return e.close();e.error(e,{message:r,send:!1,origin:e.entity===u.ConnectionEnd.client?"server":"client",alert:a}),e.process()},u.handleHandshake=function(e,t){var r=t.fragment,a=r.getByte(),i=r.getInt24();if(i>r.length())return e.fragmented=t,t.fragment=n.util.createBuffer(),r.read-=4,e.process();e.fragmented=null,r.read-=4;var s=r.bytes(i+4);r.read+=4,a in x[e.entity][e.expect]?(e.entity!==u.ConnectionEnd.server||e.open||e.fail||(e.handshaking=!0,e.session={version:null,extensions:{server_name:{serverNameList:[]}},cipherSuite:null,compressionMethod:null,serverCertificate:null,clientCertificate:null,md5:n.md.md5.create(),sha1:n.md.sha1.create()}),a!==u.HandshakeType.hello_request&&a!==u.HandshakeType.certificate_verify&&a!==u.HandshakeType.finished&&(e.session.md5.update(s),e.session.sha1.update(s)),x[e.entity][e.expect][a](e,t,i)):u.handleUnexpected(e,t)},u.handleApplicationData=function(e,t){e.data.putBuffer(t.fragment),e.dataReady(e),e.process()},u.handleHeartbeat=function(e,t){var r=t.fragment,a=r.getByte(),i=r.getInt16(),s=r.getBytes(i);if(a===u.HeartbeatMessageType.heartbeat_request){if(e.handshaking||i>s.length)return e.process();u.queue(e,u.createRecord(e,{type:u.ContentType.heartbeat,data:u.createHeartbeat(u.HeartbeatMessageType.heartbeat_response,s)})),u.flush(e)}else if(a===u.HeartbeatMessageType.heartbeat_response){if(s!==e.expectedHeartbeatPayload)return e.process();e.heartbeatReceived&&e.heartbeatReceived(e,n.util.createBuffer(s))}e.process()};var l=1,p=2,f=3,h=4,d=5,y=6,g=7,v=8,m=1,C=2,E=3,S=4,T=5,b=6,I=u.handleUnexpected,A=u.handleChangeCipherSpec,B=u.handleAlert,k=u.handleHandshake,N=u.handleApplicationData,w=u.handleHeartbeat,R=[];R[u.ConnectionEnd.client]=[[I,B,k,I,w],[I,B,k,I,w],[I,B,k,I,w],[I,B,k,I,w],[I,B,k,I,w],[A,B,I,I,w],[I,B,k,I,w],[I,B,k,N,w],[I,B,k,I,w]],R[u.ConnectionEnd.server]=[[I,B,k,I,w],[I,B,k,I,w],[I,B,k,I,w],[I,B,k,I,w],[A,B,I,I,w],[I,B,k,I,w],[I,B,k,N,w],[I,B,k,I,w]];var L=u.handleHelloRequest,_=u.handleServerHello,U=u.handleCertificate,D=u.handleServerKeyExchange,P=u.handleCertificateRequest,O=u.handleServerHelloDone,V=u.handleFinished,x=[];x[u.ConnectionEnd.client]=[[I,I,_,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I],[L,I,I,I,I,I,I,I,I,I,I,U,D,P,O,I,I,I,I,I,I],[L,I,I,I,I,I,I,I,I,I,I,I,D,P,O,I,I,I,I,I,I],[L,I,I,I,I,I,I,I,I,I,I,I,I,P,O,I,I,I,I,I,I],[L,I,I,I,I,I,I,I,I,I,I,I,I,I,O,I,I,I,I,I,I],[L,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I],[L,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,V],[L,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I],[L,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I]];var K=u.handleClientHello,M=u.handleClientKeyExchange,F=u.handleCertificateVerify;x[u.ConnectionEnd.server]=[[I,K,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I],[I,I,I,I,I,I,I,I,I,I,I,U,I,I,I,I,I,I,I,I,I],[I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,M,I,I,I,I],[I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,F,I,I,I,I,I],[I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I],[I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,V],[I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I],[I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I]],u.generateKeys=function(e,t){var r=a,n=t.client_random+t.server_random;e.session.resuming||(t.master_secret=r(t.pre_master_secret,"master secret",n,48).bytes(),t.pre_master_secret=null),n=t.server_random+t.client_random;var i=2*t.mac_key_length+2*t.enc_key_length,s=e.version.major===u.Versions.TLS_1_0.major&&e.version.minor===u.Versions.TLS_1_0.minor;s&&(i+=2*t.fixed_iv_length);var o=r(t.master_secret,"key expansion",n,i),c={client_write_MAC_key:o.getBytes(t.mac_key_length),server_write_MAC_key:o.getBytes(t.mac_key_length),client_write_key:o.getBytes(t.enc_key_length),server_write_key:o.getBytes(t.enc_key_length)};return s&&(c.client_write_IV=o.getBytes(t.fixed_iv_length),c.server_write_IV=o.getBytes(t.fixed_iv_length)),c},u.createConnectionState=function(e){var t=e.entity===u.ConnectionEnd.client,r=function(){var e={sequenceNumber:[0,0],macKey:null,macLength:0,macFunction:null,cipherState:null,cipherFunction:function(e){return!0},compressionState:null,compressFunction:function(e){return!0},updateSequenceNumber:function(){4294967295===e.sequenceNumber[1]?(e.sequenceNumber[1]=0,++e.sequenceNumber[0]):++e.sequenceNumber[1]}};return e},n={read:r(),write:r()};if(n.read.update=function(e,t){return n.read.cipherFunction(t,n.read)?n.read.compressFunction(e,t,n.read)||e.error(e,{message:"Could not decompress record.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.decompression_failure}}):e.error(e,{message:"Could not decrypt record or bad MAC.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.bad_record_mac}}),!e.fail},n.write.update=function(e,t){return n.write.compressFunction(e,t,n.write)?n.write.cipherFunction(t,n.write)||e.error(e,{message:"Could not encrypt record.",send:!1,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.internal_error}}):e.error(e,{message:"Could not compress record.",send:!1,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.internal_error}}),!e.fail},e.session){var a=e.session.sp;switch(e.session.cipherSuite.initSecurityParameters(a),a.keys=u.generateKeys(e,a),n.read.macKey=t?a.keys.server_write_MAC_key:a.keys.client_write_MAC_key,n.write.macKey=t?a.keys.client_write_MAC_key:a.keys.server_write_MAC_key,e.session.cipherSuite.initConnectionState(n,e,a),a.compression_algorithm){case u.CompressionMethod.none:break;case u.CompressionMethod.deflate:n.read.compressFunction=s,n.write.compressFunction=i;break;default:throw new Error("Unsupported compression algorithm.")}}return n},u.createRandom=function(){var e=new Date,t=+e+6e4*e.getTimezoneOffset(),r=n.util.createBuffer();return r.putInt32(t),r.putBytes(n.random.getBytes(28)),r},u.createRecord=function(e,t){return t.data?{type:t.type,version:{major:e.version.major,minor:e.version.minor},length:t.data.length(),fragment:t.data}:null},u.createAlert=function(e,t){var r=n.util.createBuffer();return r.putByte(t.level),r.putByte(t.description),u.createRecord(e,{type:u.ContentType.alert,data:r})},u.createClientHello=function(e){e.session.clientHelloVersion={major:e.version.major,minor:e.version.minor};for(var t=n.util.createBuffer(),r=0;r0&&(d+=2);var y=e.session.id,g=y.length+1+2+4+28+2+i+1+o+d,v=n.util.createBuffer();return v.putByte(u.HandshakeType.client_hello),v.putInt24(g),v.putByte(e.version.major),v.putByte(e.version.minor),v.putBytes(e.session.sp.client_random),c(v,1,n.util.createBuffer(y)),c(v,2,t),c(v,1,s),d>0&&c(v,2,l),v},u.createServerHello=function(e){var t=e.session.id,r=t.length+1+2+4+28+2+1,a=n.util.createBuffer();return a.putByte(u.HandshakeType.server_hello),a.putInt24(r),a.putByte(e.version.major),a.putByte(e.version.minor),a.putBytes(e.session.sp.server_random),c(a,1,n.util.createBuffer(t)),a.putByte(e.session.cipherSuite.id[0]),a.putByte(e.session.cipherSuite.id[1]),a.putByte(e.session.compressionMethod),a},u.createCertificate=function(e){var t,r=e.entity===u.ConnectionEnd.client,a=null;e.getCertificate&&(t=r?e.session.certificateRequest:e.session.extensions.server_name.serverNameList,a=e.getCertificate(e,t));var i=n.util.createBuffer();if(null!==a)try{n.util.isArray(a)||(a=[a]);for(var s=null,o=0;ou.MaxFragment;)a.push(u.createRecord(e,{type:t.type,data:n.util.createBuffer(i.slice(0,u.MaxFragment))})),i=i.slice(u.MaxFragment);i.length>0&&a.push(u.createRecord(e,{type:t.type,data:n.util.createBuffer(i)}))}for(var s=0;s0&&(a=r.order[0]),null!==a&&a in r.cache)for(var i in t=r.cache[a],delete r.cache[a],r.order)if(r.order[i]===a){r.order.splice(i,1);break}return t},r.setSession=function(e,t){if(r.order.length===r.capacity){var a=r.order.shift();delete r.cache[a]}a=n.util.bytesToHex(e);r.order.push(a),r.cache[a]=t}}return r},u.createConnection=function(e){var t=null;t=e.caStore?n.util.isArray(e.caStore)?n.pki.createCaStore(e.caStore):e.caStore:n.pki.createCaStore();var r=e.cipherSuites||null;if(null===r)for(var a in r=[],u.CipherSuites)r.push(u.CipherSuites[a]);var i=e.server?u.ConnectionEnd.server:u.ConnectionEnd.client,s=e.sessionCache?u.createSessionCache(e.sessionCache):null,o={version:{major:u.Version.major,minor:u.Version.minor},entity:i,sessionId:e.sessionId,caStore:t,sessionCache:s,cipherSuites:r,connected:e.connected,virtualHost:e.virtualHost||null,verifyClient:e.verifyClient||!1,verify:e.verify||function(e,t,r,n){return t},verifyOptions:e.verifyOptions||{},getCertificate:e.getCertificate||null,getPrivateKey:e.getPrivateKey||null,getSignature:e.getSignature||null,input:n.util.createBuffer(),tlsData:n.util.createBuffer(),data:n.util.createBuffer(),tlsDataReady:e.tlsDataReady,dataReady:e.dataReady,heartbeatReceived:e.heartbeatReceived,closed:e.closed,error:function(t,r){r.origin=r.origin||(t.entity===u.ConnectionEnd.client?"client":"server"),r.send&&(u.queue(t,u.createAlert(t,r.alert)),u.flush(t));var n=!1!==r.fatal;n&&(t.fail=!0),e.error(t,r),n&&t.close(!1)},deflate:e.deflate||null,inflate:e.inflate||null,reset:function(e){o.version={major:u.Version.major,minor:u.Version.minor},o.record=null,o.session=null,o.peerCertificate=null,o.state={pending:null,current:null},o.expect=(o.entity,u.ConnectionEnd.client,0),o.fragmented=null,o.records=[],o.open=!1,o.handshakes=0,o.handshaking=!1,o.isConnected=!1,o.fail=!(e||void 0===e),o.input.clear(),o.tlsData.clear(),o.data.clear(),o.state.current=u.createConnectionState(o)}};o.reset();return o.handshake=function(e){if(o.entity!==u.ConnectionEnd.client)o.error(o,{message:"Cannot initiate handshake as a server.",fatal:!1});else if(o.handshaking)o.error(o,{message:"Handshake already in progress.",fatal:!1});else{o.fail&&!o.open&&0===o.handshakes&&(o.fail=!1),o.handshaking=!0;var t=null;(e=e||"").length>0&&(o.sessionCache&&(t=o.sessionCache.getSession(e)),null===t&&(e="")),0===e.length&&o.sessionCache&&null!==(t=o.sessionCache.getSession())&&(e=t.id),o.session={id:e,version:null,cipherSuite:null,compressionMethod:null,serverCertificate:null,certificateRequest:null,clientCertificate:null,sp:{},md5:n.md.md5.create(),sha1:n.md.sha1.create()},t&&(o.version=t.version,o.session.sp=t.sp),o.session.sp.client_random=u.createRandom().getBytes(),o.open=!0,u.queue(o,u.createRecord(o,{type:u.ContentType.handshake,data:u.createClientHello(o)})),u.flush(o)}},o.process=function(e){var t=0;return e&&o.input.putBytes(e),o.fail||(null!==o.record&&o.record.ready&&o.record.fragment.isEmpty()&&(o.record=null),null===o.record&&(t=function(e){var t=0,r=e.input,a=r.length();if(a<5)t=5-a;else{e.record={type:r.getByte(),version:{major:r.getByte(),minor:r.getByte()},length:r.getInt16(),fragment:n.util.createBuffer(),ready:!1};var i=e.record.version.major===e.version.major;i&&e.session&&e.session.version&&(i=e.record.version.minor===e.version.minor),i||e.error(e,{message:"Incompatible TLS version.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.protocol_version}})}return t}(o)),o.fail||null===o.record||o.record.ready||(t=function(e){var t=0,r=e.input,n=r.length();n8?3:1,v=[],m=[0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0],C=0,E=0;E>>4^T))<<4,S^=t=65535&((T^=t)>>>-16^S),S^=(t=858993459&(S>>>2^(T^=t<<-16)))<<2,S^=t=65535&((T^=t)>>>-16^S),S^=(t=1431655765&(S>>>1^(T^=t<<-16)))<<1,S^=t=16711935&((T^=t)>>>8^S),t=(S^=(t=1431655765&(S>>>1^(T^=t<<8)))<<1)<<8|(T^=t)>>>20&240,S=T<<24|T<<8&16711680|T>>>8&65280|T>>>24&240,T=t;for(var b=0;b>>26,T=T<<2|T>>>26):(S=S<<1|S>>>27,T=T<<1|T>>>27);var I=r[(S&=-15)>>>28]|n[S>>>24&15]|a[S>>>20&15]|i[S>>>16&15]|s[S>>>12&15]|o[S>>>8&15]|c[S>>>4&15],A=u[(T&=-15)>>>28]|l[T>>>24&15]|p[T>>>20&15]|f[T>>>16&15]|h[T>>>12&15]|d[T>>>8&15]|y[T>>>4&15];t=65535&(A>>>16^I),v[C++]=I^t,v[C++]=A^t<<16}}return v}(t),this._init=!0}},a("DES-ECB",n.cipher.modes.ecb),a("DES-CBC",n.cipher.modes.cbc),a("DES-CFB",n.cipher.modes.cfb),a("DES-OFB",n.cipher.modes.ofb),a("DES-CTR",n.cipher.modes.ctr),a("3DES-ECB",n.cipher.modes.ecb),a("3DES-CBC",n.cipher.modes.cbc),a("3DES-CFB",n.cipher.modes.cfb),a("3DES-OFB",n.cipher.modes.ofb),a("3DES-CTR",n.cipher.modes.ctr);var i=[16843776,0,65536,16843780,16842756,66564,4,65536,1024,16843776,16843780,1024,16778244,16842756,16777216,4,1028,16778240,16778240,66560,66560,16842752,16842752,16778244,65540,16777220,16777220,65540,0,1028,66564,16777216,65536,16843780,4,16842752,16843776,16777216,16777216,1024,16842756,65536,66560,16777220,1024,4,16778244,66564,16843780,65540,16842752,16778244,16777220,1028,66564,16843776,1028,16778240,16778240,0,65540,66560,0,16842756],s=[-2146402272,-2147450880,32768,1081376,1048576,32,-2146435040,-2147450848,-2147483616,-2146402272,-2146402304,-2147483648,-2147450880,1048576,32,-2146435040,1081344,1048608,-2147450848,0,-2147483648,32768,1081376,-2146435072,1048608,-2147483616,0,1081344,32800,-2146402304,-2146435072,32800,0,1081376,-2146435040,1048576,-2147450848,-2146435072,-2146402304,32768,-2146435072,-2147450880,32,-2146402272,1081376,32,32768,-2147483648,32800,-2146402304,1048576,-2147483616,1048608,-2147450848,-2147483616,1048608,1081344,0,-2147450880,32800,-2147483648,-2146435040,-2146402272,1081344],o=[520,134349312,0,134348808,134218240,0,131592,134218240,131080,134217736,134217736,131072,134349320,131080,134348800,520,134217728,8,134349312,512,131584,134348800,134348808,131592,134218248,131584,131072,134218248,8,134349320,512,134217728,134349312,134217728,131080,520,131072,134349312,134218240,0,512,131080,134349320,134218240,134217736,512,0,134348808,134218248,131072,134217728,134349320,8,131592,131584,134217736,134348800,134218248,520,134348800,131592,8,134348808,131584],c=[8396801,8321,8321,128,8396928,8388737,8388609,8193,0,8396800,8396800,8396929,129,0,8388736,8388609,1,8192,8388608,8396801,128,8388608,8193,8320,8388737,1,8320,8388736,8192,8396928,8396929,129,8388736,8388609,8396800,8396929,129,0,0,8396800,8320,8388736,8388737,1,8396801,8321,8321,128,8396929,129,1,8192,8388609,8193,8396928,8388737,8193,8320,8388608,8396801,128,8388608,8192,8396928],u=[256,34078976,34078720,1107296512,524288,256,1073741824,34078720,1074266368,524288,33554688,1074266368,1107296512,1107820544,524544,1073741824,33554432,1074266112,1074266112,0,1073742080,1107820800,1107820800,33554688,1107820544,1073742080,0,1107296256,34078976,33554432,1107296256,524544,524288,1107296512,256,33554432,1073741824,34078720,1107296512,1074266368,33554688,1073741824,1107820544,34078976,1074266368,256,33554432,1107820544,1107820800,524544,1107296256,1107820800,34078720,0,1074266112,1107296256,524544,33554688,1073742080,524288,0,1074266112,34078976,1073742080],l=[536870928,541065216,16384,541081616,541065216,16,541081616,4194304,536887296,4210704,4194304,536870928,4194320,536887296,536870912,16400,0,4194320,536887312,16384,4210688,536887312,16,541065232,541065232,0,4210704,541081600,16400,4210688,541081600,536870912,536887296,16,541065232,4210688,541081616,4194304,16400,536870928,4194304,536887296,536870912,16400,536870928,541081616,4210688,541065216,4210704,541081600,0,541065232,16,16384,541065216,4210704,16384,4194320,536887312,0,541081600,536870912,4194320,536887312],p=[2097152,69206018,67110914,0,2048,67110914,2099202,69208064,69208066,2097152,0,67108866,2,67108864,69206018,2050,67110912,2099202,2097154,67110912,67108866,69206016,69208064,2097154,69206016,2048,2050,69208066,2099200,2,67108864,2099200,67108864,2099200,2097152,67110914,67110914,69206018,69206018,2,2097154,67108864,67110912,2097152,69208064,2050,2099202,69208064,2050,67108866,69208066,69206016,2099200,0,2,69208066,0,2099202,69206016,2048,67108866,67110912,2048,2097154],f=[268439616,4096,262144,268701760,268435456,268439616,64,268435456,262208,268697600,268701760,266240,268701696,266304,4096,64,268697600,268435520,268439552,4160,266240,262208,268697664,268701696,4160,0,0,268697664,268435520,268439552,266304,262144,266304,262144,268701696,4096,64,268697664,4096,266304,268439552,64,268435520,268697600,268697664,268435456,262144,268439616,0,268701760,262208,268435520,268697600,268439552,268439616,0,268701760,266240,266240,4160,4160,262208,268435456,268701696];function h(e,t,r,n){var a,h,d=32===e.length?3:9;a=3===d?n?[30,-2,-2]:[0,32,2]:n?[94,62,-2,32,64,2,30,-2,-2]:[0,32,2,62,30,-2,64,96,2];var y=t[0],g=t[1];y^=(h=252645135&(y>>>4^g))<<4,y^=(h=65535&(y>>>16^(g^=h)))<<16,y^=h=858993459&((g^=h)>>>2^y),y^=h=16711935&((g^=h<<2)>>>8^y),y=(y^=(h=1431655765&(y>>>1^(g^=h<<8)))<<1)<<1|y>>>31,g=(g^=h)<<1|g>>>31;for(var v=0;v>>4|g<<28)^e[E+1];h=y,y=g,g=h^(s[S>>>24&63]|c[S>>>16&63]|l[S>>>8&63]|f[63&S]|i[T>>>24&63]|o[T>>>16&63]|u[T>>>8&63]|p[63&T])}h=y,y=g,g=h}g=g>>>1|g<<31,g^=h=1431655765&((y=y>>>1|y<<31)>>>1^g),g^=(h=16711935&(g>>>8^(y^=h<<1)))<<8,g^=(h=858993459&(g>>>2^(y^=h)))<<2,g^=h=65535&((y^=h)>>>16^g),g^=h=252645135&((y^=h<<16)>>>4^g),y^=h<<4,r[0]=y,r[1]=g}function d(e){var t,r="DES-"+((e=e||{}).mode||"CBC").toUpperCase(),a=(t=e.decrypt?n.cipher.createDecipher(r,e.key):n.cipher.createCipher(r,e.key)).start;return t.start=function(e,r){var i=null;r instanceof n.util.ByteBuffer&&(i=r,r={}),(r=r||{}).output=i,r.iv=e,a.call(t,r)},t}},function(e,t,r){var n=r(0);if(r(3),r(13),r(6),r(27),r(28),r(2),r(1),void 0===a)var a=n.jsbn.BigInteger;var i=n.util.isNodejs?r(17):null,s=n.asn1,o=n.util;n.pki=n.pki||{},e.exports=n.pki.rsa=n.rsa=n.rsa||{};var c=n.pki,u=[6,4,2,4,2,4,6,2],l={name:"PrivateKeyInfo",tagClass:s.Class.UNIVERSAL,type:s.Type.SEQUENCE,constructed:!0,value:[{name:"PrivateKeyInfo.version",tagClass:s.Class.UNIVERSAL,type:s.Type.INTEGER,constructed:!1,capture:"privateKeyVersion"},{name:"PrivateKeyInfo.privateKeyAlgorithm",tagClass:s.Class.UNIVERSAL,type:s.Type.SEQUENCE,constructed:!0,value:[{name:"AlgorithmIdentifier.algorithm",tagClass:s.Class.UNIVERSAL,type:s.Type.OID,constructed:!1,capture:"privateKeyOid"}]},{name:"PrivateKeyInfo",tagClass:s.Class.UNIVERSAL,type:s.Type.OCTETSTRING,constructed:!1,capture:"privateKey"}]},p={name:"RSAPrivateKey",tagClass:s.Class.UNIVERSAL,type:s.Type.SEQUENCE,constructed:!0,value:[{name:"RSAPrivateKey.version",tagClass:s.Class.UNIVERSAL,type:s.Type.INTEGER,constructed:!1,capture:"privateKeyVersion"},{name:"RSAPrivateKey.modulus",tagClass:s.Class.UNIVERSAL,type:s.Type.INTEGER,constructed:!1,capture:"privateKeyModulus"},{name:"RSAPrivateKey.publicExponent",tagClass:s.Class.UNIVERSAL,type:s.Type.INTEGER,constructed:!1,capture:"privateKeyPublicExponent"},{name:"RSAPrivateKey.privateExponent",tagClass:s.Class.UNIVERSAL,type:s.Type.INTEGER,constructed:!1,capture:"privateKeyPrivateExponent"},{name:"RSAPrivateKey.prime1",tagClass:s.Class.UNIVERSAL,type:s.Type.INTEGER,constructed:!1,capture:"privateKeyPrime1"},{name:"RSAPrivateKey.prime2",tagClass:s.Class.UNIVERSAL,type:s.Type.INTEGER,constructed:!1,capture:"privateKeyPrime2"},{name:"RSAPrivateKey.exponent1",tagClass:s.Class.UNIVERSAL,type:s.Type.INTEGER,constructed:!1,capture:"privateKeyExponent1"},{name:"RSAPrivateKey.exponent2",tagClass:s.Class.UNIVERSAL,type:s.Type.INTEGER,constructed:!1,capture:"privateKeyExponent2"},{name:"RSAPrivateKey.coefficient",tagClass:s.Class.UNIVERSAL,type:s.Type.INTEGER,constructed:!1,capture:"privateKeyCoefficient"}]},f={name:"RSAPublicKey",tagClass:s.Class.UNIVERSAL,type:s.Type.SEQUENCE,constructed:!0,value:[{name:"RSAPublicKey.modulus",tagClass:s.Class.UNIVERSAL,type:s.Type.INTEGER,constructed:!1,capture:"publicKeyModulus"},{name:"RSAPublicKey.exponent",tagClass:s.Class.UNIVERSAL,type:s.Type.INTEGER,constructed:!1,capture:"publicKeyExponent"}]},h=n.pki.rsa.publicKeyValidator={name:"SubjectPublicKeyInfo",tagClass:s.Class.UNIVERSAL,type:s.Type.SEQUENCE,constructed:!0,captureAsn1:"subjectPublicKeyInfo",value:[{name:"SubjectPublicKeyInfo.AlgorithmIdentifier",tagClass:s.Class.UNIVERSAL,type:s.Type.SEQUENCE,constructed:!0,value:[{name:"AlgorithmIdentifier.algorithm",tagClass:s.Class.UNIVERSAL,type:s.Type.OID,constructed:!1,capture:"publicKeyOid"}]},{name:"SubjectPublicKeyInfo.subjectPublicKey",tagClass:s.Class.UNIVERSAL,type:s.Type.BITSTRING,constructed:!1,value:[{name:"SubjectPublicKeyInfo.subjectPublicKey.RSAPublicKey",tagClass:s.Class.UNIVERSAL,type:s.Type.SEQUENCE,constructed:!0,optional:!0,captureAsn1:"rsaPublicKey"}]}]},d=function(e){var t;if(!(e.algorithm in c.oids)){var r=new Error("Unknown message digest algorithm.");throw r.algorithm=e.algorithm,r}t=c.oids[e.algorithm];var n=s.oidToDer(t).getBytes(),a=s.create(s.Class.UNIVERSAL,s.Type.SEQUENCE,!0,[]),i=s.create(s.Class.UNIVERSAL,s.Type.SEQUENCE,!0,[]);i.value.push(s.create(s.Class.UNIVERSAL,s.Type.OID,!1,n)),i.value.push(s.create(s.Class.UNIVERSAL,s.Type.NULL,!1,""));var o=s.create(s.Class.UNIVERSAL,s.Type.OCTETSTRING,!1,e.digest().getBytes());return a.value.push(i),a.value.push(o),s.toDer(a).getBytes()},y=function(e,t,r){if(r)return e.modPow(t.e,t.n);if(!t.p||!t.q)return e.modPow(t.d,t.n);var i;t.dP||(t.dP=t.d.mod(t.p.subtract(a.ONE))),t.dQ||(t.dQ=t.d.mod(t.q.subtract(a.ONE))),t.qInv||(t.qInv=t.q.modInverse(t.p));do{i=new a(n.util.bytesToHex(n.random.getBytes(t.n.bitLength()/8)),16)}while(i.compareTo(t.n)>=0||!i.gcd(t.n).equals(a.ONE));for(var s=(e=e.multiply(i.modPow(t.e,t.n)).mod(t.n)).mod(t.p).modPow(t.dP,t.p),o=e.mod(t.q).modPow(t.dQ,t.q);s.compareTo(o)<0;)s=s.add(t.p);var c=s.subtract(o).multiply(t.qInv).mod(t.p).multiply(t.q).add(o);return c=c.multiply(i.modInverse(t.n)).mod(t.n)};function g(e,t,r){var a=n.util.createBuffer(),i=Math.ceil(t.n.bitLength()/8);if(e.length>i-11){var s=new Error("Message is too long for PKCS#1 v1.5 padding.");throw s.length=e.length,s.max=i-11,s}a.putByte(0),a.putByte(r);var o,c=i-3-e.length;if(0===r||1===r){o=0===r?0:255;for(var u=0;u0;){var l=0,p=n.random.getBytes(c);for(u=0;u1;){if(255!==s.getByte()){--s.read;break}++u}else if(2===c)for(u=0;s.length()>1;){if(0===s.getByte()){--s.read;break}++u}if(0!==s.getByte()||u!==i-3-s.length())throw new Error("Encryption block is invalid.");return s.getBytes()}function m(e,t,r){"function"==typeof t&&(r=t,t={});var i={algorithm:{name:(t=t||{}).algorithm||"PRIMEINC",options:{workers:t.workers||2,workLoad:t.workLoad||100,workerScript:t.workerScript}}};function s(){o(e.pBits,(function(t,n){return t?r(t):(e.p=n,null!==e.q?u(t,e.q):void o(e.qBits,u))}))}function o(e,t){n.prime.generateProbablePrime(e,i,t)}function u(t,n){if(t)return r(t);if(e.q=n,e.p.compareTo(e.q)<0){var i=e.p;e.p=e.q,e.q=i}if(0!==e.p.subtract(a.ONE).gcd(e.e).compareTo(a.ONE))return e.p=null,void s();if(0!==e.q.subtract(a.ONE).gcd(e.e).compareTo(a.ONE))return e.q=null,void o(e.qBits,u);if(e.p1=e.p.subtract(a.ONE),e.q1=e.q.subtract(a.ONE),e.phi=e.p1.multiply(e.q1),0!==e.phi.gcd(e.e).compareTo(a.ONE))return e.p=e.q=null,void s();if(e.n=e.p.multiply(e.q),e.n.bitLength()!==e.bits)return e.q=null,void o(e.qBits,u);var l=e.e.modInverse(e.phi);e.keys={privateKey:c.rsa.setPrivateKey(e.n,e.e,l,e.p,e.q,l.mod(e.p1),l.mod(e.q1),e.q.modInverse(e.p)),publicKey:c.rsa.setPublicKey(e.n,e.e)},r(null,e.keys)}"prng"in t&&(i.prng=t.prng),s()}function C(e){var t=e.toString(16);t[0]>="8"&&(t="00"+t);var r=n.util.hexToBytes(t);return r.length>1&&(0===r.charCodeAt(0)&&0==(128&r.charCodeAt(1))||255===r.charCodeAt(0)&&128==(128&r.charCodeAt(1)))?r.substr(1):r}function E(e){return e<=100?27:e<=150?18:e<=200?15:e<=250?12:e<=300?9:e<=350?8:e<=400?7:e<=500?6:e<=600?5:e<=800?4:e<=1250?3:2}function S(e){return n.util.isNodejs&&"function"==typeof i[e]}function T(e){return void 0!==o.globalScope&&"object"==typeof o.globalScope.crypto&&"object"==typeof o.globalScope.crypto.subtle&&"function"==typeof o.globalScope.crypto.subtle[e]}function b(e){return void 0!==o.globalScope&&"object"==typeof o.globalScope.msCrypto&&"object"==typeof o.globalScope.msCrypto.subtle&&"function"==typeof o.globalScope.msCrypto.subtle[e]}function I(e){for(var t=n.util.hexToBytes(e.toString(16)),r=new Uint8Array(t.length),a=0;a0;)l.putByte(0),--p;return l.putBytes(n.util.hexToBytes(u)),l.getBytes()},c.rsa.decrypt=function(e,t,r,i){var s=Math.ceil(t.n.bitLength()/8);if(e.length!==s){var o=new Error("Encrypted message length is invalid.");throw o.length=e.length,o.expected=s,o}var c=new a(n.util.createBuffer(e).toHex(),16);if(c.compareTo(t.n)>=0)throw new Error("Encrypted message is invalid.");for(var u=y(c,t,r).toString(16),l=n.util.createBuffer(),p=s-Math.ceil(u.length/2);p>0;)l.putByte(0),--p;return l.putBytes(n.util.hexToBytes(u)),!1!==i?v(l.getBytes(),t,r):l.getBytes()},c.rsa.createKeyPairGenerationState=function(e,t,r){"string"==typeof e&&(e=parseInt(e,10)),e=e||2048;var i,s=(r=r||{}).prng||n.random,o={nextBytes:function(e){for(var t=s.getBytesSync(e.length),r=0;r>1,pBits:e-(e>>1),pqState:0,num:null,keys:null}).e.fromInt(i.eInt),i},c.rsa.stepKeyPairGenerationState=function(e,t){"algorithm"in e||(e.algorithm="PRIMEINC");var r=new a(null);r.fromInt(30);for(var n,i=0,s=function(e,t){return e|t},o=+new Date,l=0;null===e.keys&&(t<=0||lp?e.pqState=0:e.num.isProbablePrime(E(e.num.bitLength()))?++e.pqState:e.num.dAddOffset(u[i++%8],0):2===e.pqState?e.pqState=0===e.num.subtract(a.ONE).gcd(e.e).compareTo(a.ONE)?3:0:3===e.pqState&&(e.pqState=0,null===e.p?e.p=e.num:e.q=e.num,null!==e.p&&null!==e.q&&++e.state,e.num=null)}else if(1===e.state)e.p.compareTo(e.q)<0&&(e.num=e.p,e.p=e.q,e.q=e.num),++e.state;else if(2===e.state)e.p1=e.p.subtract(a.ONE),e.q1=e.q.subtract(a.ONE),e.phi=e.p1.multiply(e.q1),++e.state;else if(3===e.state)0===e.phi.gcd(e.e).compareTo(a.ONE)?++e.state:(e.p=null,e.q=null,e.state=0);else if(4===e.state)e.n=e.p.multiply(e.q),e.n.bitLength()===e.bits?++e.state:(e.q=null,e.state=0);else if(5===e.state){var h=e.e.modInverse(e.phi);e.keys={privateKey:c.rsa.setPrivateKey(e.n,e.e,h,e.p,e.q,h.mod(e.p1),h.mod(e.q1),e.q.modInverse(e.p)),publicKey:c.rsa.setPublicKey(e.n,e.e)}}l+=(n=+new Date)-o,o=n}return null!==e.keys},c.rsa.generateKeyPair=function(e,t,r,a){if(1===arguments.length?"object"==typeof e?(r=e,e=void 0):"function"==typeof e&&(a=e,e=void 0):2===arguments.length?"number"==typeof e?"function"==typeof t?(a=t,t=void 0):"number"!=typeof t&&(r=t,t=void 0):(r=e,a=t,e=void 0,t=void 0):3===arguments.length&&("number"==typeof t?"function"==typeof r&&(a=r,r=void 0):(a=r,r=t,t=void 0)),r=r||{},void 0===e&&(e=r.bits||2048),void 0===t&&(t=r.e||65537),!n.options.usePureJavaScript&&!r.prng&&e>=256&&e<=16384&&(65537===t||3===t))if(a){if(S("generateKeyPair"))return i.generateKeyPair("rsa",{modulusLength:e,publicExponent:t,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}},(function(e,t,r){if(e)return a(e);a(null,{privateKey:c.privateKeyFromPem(r),publicKey:c.publicKeyFromPem(t)})}));if(T("generateKey")&&T("exportKey"))return o.globalScope.crypto.subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:e,publicExponent:I(t),hash:{name:"SHA-256"}},!0,["sign","verify"]).then((function(e){return o.globalScope.crypto.subtle.exportKey("pkcs8",e.privateKey)})).then(void 0,(function(e){a(e)})).then((function(e){if(e){var t=c.privateKeyFromAsn1(s.fromDer(n.util.createBuffer(e)));a(null,{privateKey:t,publicKey:c.setRsaPublicKey(t.n,t.e)})}}));if(b("generateKey")&&b("exportKey")){var u=o.globalScope.msCrypto.subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:e,publicExponent:I(t),hash:{name:"SHA-256"}},!0,["sign","verify"]);return u.oncomplete=function(e){var t=e.target.result,r=o.globalScope.msCrypto.subtle.exportKey("pkcs8",t.privateKey);r.oncomplete=function(e){var t=e.target.result,r=c.privateKeyFromAsn1(s.fromDer(n.util.createBuffer(t)));a(null,{privateKey:r,publicKey:c.setRsaPublicKey(r.n,r.e)})},r.onerror=function(e){a(e)}},void(u.onerror=function(e){a(e)})}}else if(S("generateKeyPairSync")){var l=i.generateKeyPairSync("rsa",{modulusLength:e,publicExponent:t,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{privateKey:c.privateKeyFromPem(l.privateKey),publicKey:c.publicKeyFromPem(l.publicKey)}}var p=c.rsa.createKeyPairGenerationState(e,t,r);if(!a)return c.rsa.stepKeyPairGenerationState(p,0),p.keys;m(p,r,a)},c.setRsaPublicKey=c.rsa.setPublicKey=function(e,t){var r={n:e,e:t,encrypt:function(e,t,a){if("string"==typeof t?t=t.toUpperCase():void 0===t&&(t="RSAES-PKCS1-V1_5"),"RSAES-PKCS1-V1_5"===t)t={encode:function(e,t,r){return g(e,t,2).getBytes()}};else if("RSA-OAEP"===t||"RSAES-OAEP"===t)t={encode:function(e,t){return n.pkcs1.encode_rsa_oaep(t,e,a)}};else if(-1!==["RAW","NONE","NULL",null].indexOf(t))t={encode:function(e){return e}};else if("string"==typeof t)throw new Error('Unsupported encryption scheme: "'+t+'".');var i=t.encode(e,r,!0);return c.rsa.encrypt(i,r,!0)},verify:function(e,t,n){"string"==typeof n?n=n.toUpperCase():void 0===n&&(n="RSASSA-PKCS1-V1_5"),"RSASSA-PKCS1-V1_5"===n?n={verify:function(e,t){return t=v(t,r,!0),e===s.fromDer(t).value[1].value}}:"NONE"!==n&&"NULL"!==n&&null!==n||(n={verify:function(e,t){return e===(t=v(t,r,!0))}});var a=c.rsa.decrypt(t,r,!0,!1);return n.verify(e,a,r.n.bitLength())}};return r},c.setRsaPrivateKey=c.rsa.setPrivateKey=function(e,t,r,a,i,s,o,u){var l={n:e,e:t,d:r,p:a,q:i,dP:s,dQ:o,qInv:u,decrypt:function(e,t,r){"string"==typeof t?t=t.toUpperCase():void 0===t&&(t="RSAES-PKCS1-V1_5");var a=c.rsa.decrypt(e,l,!1,!1);if("RSAES-PKCS1-V1_5"===t)t={decode:v};else if("RSA-OAEP"===t||"RSAES-OAEP"===t)t={decode:function(e,t){return n.pkcs1.decode_rsa_oaep(t,e,r)}};else{if(-1===["RAW","NONE","NULL",null].indexOf(t))throw new Error('Unsupported encryption scheme: "'+t+'".');t={decode:function(e){return e}}}return t.decode(a,l,!1)},sign:function(e,t){var r=!1;"string"==typeof t&&(t=t.toUpperCase()),void 0===t||"RSASSA-PKCS1-V1_5"===t?(t={encode:d},r=1):"NONE"!==t&&"NULL"!==t&&null!==t||(t={encode:function(){return e}},r=1);var n=t.encode(e,l.n.bitLength());return c.rsa.encrypt(n,l,r)}};return l},c.wrapRsaPrivateKey=function(e){return s.create(s.Class.UNIVERSAL,s.Type.SEQUENCE,!0,[s.create(s.Class.UNIVERSAL,s.Type.INTEGER,!1,s.integerToDer(0).getBytes()),s.create(s.Class.UNIVERSAL,s.Type.SEQUENCE,!0,[s.create(s.Class.UNIVERSAL,s.Type.OID,!1,s.oidToDer(c.oids.rsaEncryption).getBytes()),s.create(s.Class.UNIVERSAL,s.Type.NULL,!1,"")]),s.create(s.Class.UNIVERSAL,s.Type.OCTETSTRING,!1,s.toDer(e).getBytes())])},c.privateKeyFromAsn1=function(e){var t,r,i,o,u,f,h,d,y={},g=[];if(s.validate(e,l,y,g)&&(e=s.fromDer(n.util.createBuffer(y.privateKey))),y={},g=[],!s.validate(e,p,y,g)){var v=new Error("Cannot read private key. ASN.1 object does not contain an RSAPrivateKey.");throw v.errors=g,v}return t=n.util.createBuffer(y.privateKeyModulus).toHex(),r=n.util.createBuffer(y.privateKeyPublicExponent).toHex(),i=n.util.createBuffer(y.privateKeyPrivateExponent).toHex(),o=n.util.createBuffer(y.privateKeyPrime1).toHex(),u=n.util.createBuffer(y.privateKeyPrime2).toHex(),f=n.util.createBuffer(y.privateKeyExponent1).toHex(),h=n.util.createBuffer(y.privateKeyExponent2).toHex(),d=n.util.createBuffer(y.privateKeyCoefficient).toHex(),c.setRsaPrivateKey(new a(t,16),new a(r,16),new a(i,16),new a(o,16),new a(u,16),new a(f,16),new a(h,16),new a(d,16))},c.privateKeyToAsn1=c.privateKeyToRSAPrivateKey=function(e){return s.create(s.Class.UNIVERSAL,s.Type.SEQUENCE,!0,[s.create(s.Class.UNIVERSAL,s.Type.INTEGER,!1,s.integerToDer(0).getBytes()),s.create(s.Class.UNIVERSAL,s.Type.INTEGER,!1,C(e.n)),s.create(s.Class.UNIVERSAL,s.Type.INTEGER,!1,C(e.e)),s.create(s.Class.UNIVERSAL,s.Type.INTEGER,!1,C(e.d)),s.create(s.Class.UNIVERSAL,s.Type.INTEGER,!1,C(e.p)),s.create(s.Class.UNIVERSAL,s.Type.INTEGER,!1,C(e.q)),s.create(s.Class.UNIVERSAL,s.Type.INTEGER,!1,C(e.dP)),s.create(s.Class.UNIVERSAL,s.Type.INTEGER,!1,C(e.dQ)),s.create(s.Class.UNIVERSAL,s.Type.INTEGER,!1,C(e.qInv))])},c.publicKeyFromAsn1=function(e){var t={},r=[];if(s.validate(e,h,t,r)){var i,o=s.derToOid(t.publicKeyOid);if(o!==c.oids.rsaEncryption)throw(i=new Error("Cannot read public key. Unknown OID.")).oid=o,i;e=t.rsaPublicKey}if(r=[],!s.validate(e,f,t,r))throw(i=new Error("Cannot read public key. ASN.1 object does not contain an RSAPublicKey.")).errors=r,i;var u=n.util.createBuffer(t.publicKeyModulus).toHex(),l=n.util.createBuffer(t.publicKeyExponent).toHex();return c.setRsaPublicKey(new a(u,16),new a(l,16))},c.publicKeyToAsn1=c.publicKeyToSubjectPublicKeyInfo=function(e){return s.create(s.Class.UNIVERSAL,s.Type.SEQUENCE,!0,[s.create(s.Class.UNIVERSAL,s.Type.SEQUENCE,!0,[s.create(s.Class.UNIVERSAL,s.Type.OID,!1,s.oidToDer(c.oids.rsaEncryption).getBytes()),s.create(s.Class.UNIVERSAL,s.Type.NULL,!1,"")]),s.create(s.Class.UNIVERSAL,s.Type.BITSTRING,!1,[c.publicKeyToRSAPublicKey(e)])])},c.publicKeyToRSAPublicKey=function(e){return s.create(s.Class.UNIVERSAL,s.Type.SEQUENCE,!0,[s.create(s.Class.UNIVERSAL,s.Type.INTEGER,!1,C(e.n)),s.create(s.Class.UNIVERSAL,s.Type.INTEGER,!1,C(e.e))])}},function(e,t,r){var n,a=r(0);e.exports=a.jsbn=a.jsbn||{};function i(e,t,r){this.data=[],null!=e&&("number"==typeof e?this.fromNumber(e,t,r):null==t&&"string"!=typeof e?this.fromString(e,256):this.fromString(e,t))}function s(){return new i(null)}function o(e,t,r,n,a,i){for(var s=16383&t,o=t>>14;--i>=0;){var c=16383&this.data[e],u=this.data[e++]>>14,l=o*c+u*s;a=((c=s*c+((16383&l)<<14)+r.data[n]+a)>>28)+(l>>14)+o*u,r.data[n++]=268435455&c}return a}a.jsbn.BigInteger=i,"undefined"==typeof navigator?(i.prototype.am=o,n=28):"Microsoft Internet Explorer"==navigator.appName?(i.prototype.am=function(e,t,r,n,a,i){for(var s=32767&t,o=t>>15;--i>=0;){var c=32767&this.data[e],u=this.data[e++]>>15,l=o*c+u*s;a=((c=s*c+((32767&l)<<15)+r.data[n]+(1073741823&a))>>>30)+(l>>>15)+o*u+(a>>>30),r.data[n++]=1073741823&c}return a},n=30):"Netscape"!=navigator.appName?(i.prototype.am=function(e,t,r,n,a,i){for(;--i>=0;){var s=t*this.data[e++]+r.data[n]+a;a=Math.floor(s/67108864),r.data[n++]=67108863&s}return a},n=26):(i.prototype.am=o,n=28),i.prototype.DB=n,i.prototype.DM=(1<>>16)&&(e=t,r+=16),0!=(t=e>>8)&&(e=t,r+=8),0!=(t=e>>4)&&(e=t,r+=4),0!=(t=e>>2)&&(e=t,r+=2),0!=(t=e>>1)&&(e=t,r+=1),r}function y(e){this.m=e}function g(e){this.m=e,this.mp=e.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<>=16,t+=16),0==(255&e)&&(e>>=8,t+=8),0==(15&e)&&(e>>=4,t+=4),0==(3&e)&&(e>>=2,t+=2),0==(1&e)&&++t,t}function T(e){for(var t=0;0!=e;)e&=e-1,++t;return t}function b(){}function I(e){return e}function A(e){this.r2=s(),this.q3=s(),i.ONE.dlShiftTo(2*e.t,this.r2),this.mu=this.r2.divide(e),this.m=e}y.prototype.convert=function(e){return e.s<0||e.compareTo(this.m)>=0?e.mod(this.m):e},y.prototype.revert=function(e){return e},y.prototype.reduce=function(e){e.divRemTo(this.m,null,e)},y.prototype.mulTo=function(e,t,r){e.multiplyTo(t,r),this.reduce(r)},y.prototype.sqrTo=function(e,t){e.squareTo(t),this.reduce(t)},g.prototype.convert=function(e){var t=s();return e.abs().dlShiftTo(this.m.t,t),t.divRemTo(this.m,null,t),e.s<0&&t.compareTo(i.ZERO)>0&&this.m.subTo(t,t),t},g.prototype.revert=function(e){var t=s();return e.copyTo(t),this.reduce(t),t},g.prototype.reduce=function(e){for(;e.t<=this.mt2;)e.data[e.t++]=0;for(var t=0;t>15)*this.mpl&this.um)<<15)&e.DM;for(r=t+this.m.t,e.data[r]+=this.m.am(0,n,e,t,0,this.m.t);e.data[r]>=e.DV;)e.data[r]-=e.DV,e.data[++r]++}e.clamp(),e.drShiftTo(this.m.t,e),e.compareTo(this.m)>=0&&e.subTo(this.m,e)},g.prototype.mulTo=function(e,t,r){e.multiplyTo(t,r),this.reduce(r)},g.prototype.sqrTo=function(e,t){e.squareTo(t),this.reduce(t)},i.prototype.copyTo=function(e){for(var t=this.t-1;t>=0;--t)e.data[t]=this.data[t];e.t=this.t,e.s=this.s},i.prototype.fromInt=function(e){this.t=1,this.s=e<0?-1:0,e>0?this.data[0]=e:e<-1?this.data[0]=e+this.DV:this.t=0},i.prototype.fromString=function(e,t){var r;if(16==t)r=4;else if(8==t)r=3;else if(256==t)r=8;else if(2==t)r=1;else if(32==t)r=5;else{if(4!=t)return void this.fromRadix(e,t);r=2}this.t=0,this.s=0;for(var n=e.length,a=!1,s=0;--n>=0;){var o=8==r?255&e[n]:f(e,n);o<0?"-"==e.charAt(n)&&(a=!0):(a=!1,0==s?this.data[this.t++]=o:s+r>this.DB?(this.data[this.t-1]|=(o&(1<>this.DB-s):this.data[this.t-1]|=o<=this.DB&&(s-=this.DB))}8==r&&0!=(128&e[0])&&(this.s=-1,s>0&&(this.data[this.t-1]|=(1<0&&this.data[this.t-1]==e;)--this.t},i.prototype.dlShiftTo=function(e,t){var r;for(r=this.t-1;r>=0;--r)t.data[r+e]=this.data[r];for(r=e-1;r>=0;--r)t.data[r]=0;t.t=this.t+e,t.s=this.s},i.prototype.drShiftTo=function(e,t){for(var r=e;r=0;--r)t.data[r+s+1]=this.data[r]>>a|o,o=(this.data[r]&i)<=0;--r)t.data[r]=0;t.data[s]=o,t.t=this.t+s+1,t.s=this.s,t.clamp()},i.prototype.rShiftTo=function(e,t){t.s=this.s;var r=Math.floor(e/this.DB);if(r>=this.t)t.t=0;else{var n=e%this.DB,a=this.DB-n,i=(1<>n;for(var s=r+1;s>n;n>0&&(t.data[this.t-r-1]|=(this.s&i)<>=this.DB;if(e.t>=this.DB;n+=this.s}else{for(n+=this.s;r>=this.DB;n-=e.s}t.s=n<0?-1:0,n<-1?t.data[r++]=this.DV+n:n>0&&(t.data[r++]=n),t.t=r,t.clamp()},i.prototype.multiplyTo=function(e,t){var r=this.abs(),n=e.abs(),a=r.t;for(t.t=a+n.t;--a>=0;)t.data[a]=0;for(a=0;a=0;)e.data[r]=0;for(r=0;r=t.DV&&(e.data[r+t.t]-=t.DV,e.data[r+t.t+1]=1)}e.t>0&&(e.data[e.t-1]+=t.am(r,t.data[r],e,2*r,0,1)),e.s=0,e.clamp()},i.prototype.divRemTo=function(e,t,r){var n=e.abs();if(!(n.t<=0)){var a=this.abs();if(a.t0?(n.lShiftTo(l,o),a.lShiftTo(l,r)):(n.copyTo(o),a.copyTo(r));var p=o.t,f=o.data[p-1];if(0!=f){var h=f*(1<1?o.data[p-2]>>this.F2:0),y=this.FV/h,g=(1<=0&&(r.data[r.t++]=1,r.subTo(E,r)),i.ONE.dlShiftTo(p,E),E.subTo(o,o);o.t=0;){var S=r.data[--m]==f?this.DM:Math.floor(r.data[m]*y+(r.data[m-1]+v)*g);if((r.data[m]+=o.am(0,S,r,C,0,p))0&&r.rShiftTo(l,r),c<0&&i.ZERO.subTo(r,r)}}},i.prototype.invDigit=function(){if(this.t<1)return 0;var e=this.data[0];if(0==(1&e))return 0;var t=3&e;return(t=(t=(t=(t=t*(2-(15&e)*t)&15)*(2-(255&e)*t)&255)*(2-((65535&e)*t&65535))&65535)*(2-e*t%this.DV)%this.DV)>0?this.DV-t:-t},i.prototype.isEven=function(){return 0==(this.t>0?1&this.data[0]:this.s)},i.prototype.exp=function(e,t){if(e>4294967295||e<1)return i.ONE;var r=s(),n=s(),a=t.convert(this),o=d(e)-1;for(a.copyTo(r);--o>=0;)if(t.sqrTo(r,n),(e&1<0)t.mulTo(n,a,r);else{var c=r;r=n,n=c}return t.revert(r)},i.prototype.toString=function(e){if(this.s<0)return"-"+this.negate().toString(e);var t;if(16==e)t=4;else if(8==e)t=3;else if(2==e)t=1;else if(32==e)t=5;else{if(4!=e)return this.toRadix(e);t=2}var r,n=(1<0)for(o>o)>0&&(a=!0,i=p(r));s>=0;)o>(o+=this.DB-t)):(r=this.data[s]>>(o-=t)&n,o<=0&&(o+=this.DB,--s)),r>0&&(a=!0),a&&(i+=p(r));return a?i:"0"},i.prototype.negate=function(){var e=s();return i.ZERO.subTo(this,e),e},i.prototype.abs=function(){return this.s<0?this.negate():this},i.prototype.compareTo=function(e){var t=this.s-e.s;if(0!=t)return t;var r=this.t;if(0!=(t=r-e.t))return this.s<0?-t:t;for(;--r>=0;)if(0!=(t=this.data[r]-e.data[r]))return t;return 0},i.prototype.bitLength=function(){return this.t<=0?0:this.DB*(this.t-1)+d(this.data[this.t-1]^this.s&this.DM)},i.prototype.mod=function(e){var t=s();return this.abs().divRemTo(e,null,t),this.s<0&&t.compareTo(i.ZERO)>0&&e.subTo(t,t),t},i.prototype.modPowInt=function(e,t){var r;return r=e<256||t.isEven()?new y(t):new g(t),this.exp(e,r)},i.ZERO=h(0),i.ONE=h(1),b.prototype.convert=I,b.prototype.revert=I,b.prototype.mulTo=function(e,t,r){e.multiplyTo(t,r)},b.prototype.sqrTo=function(e,t){e.squareTo(t)},A.prototype.convert=function(e){if(e.s<0||e.t>2*this.m.t)return e.mod(this.m);if(e.compareTo(this.m)<0)return e;var t=s();return e.copyTo(t),this.reduce(t),t},A.prototype.revert=function(e){return e},A.prototype.reduce=function(e){for(e.drShiftTo(this.m.t-1,this.r2),e.t>this.m.t+1&&(e.t=this.m.t+1,e.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);e.compareTo(this.r2)<0;)e.dAddOffset(1,this.m.t+1);for(e.subTo(this.r2,e);e.compareTo(this.m)>=0;)e.subTo(this.m,e)},A.prototype.mulTo=function(e,t,r){e.multiplyTo(t,r),this.reduce(r)},A.prototype.sqrTo=function(e,t){e.squareTo(t),this.reduce(t)};var B=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509],k=(1<<26)/B[B.length-1];i.prototype.chunkSize=function(e){return Math.floor(Math.LN2*this.DB/Math.log(e))},i.prototype.toRadix=function(e){if(null==e&&(e=10),0==this.signum()||e<2||e>36)return"0";var t=this.chunkSize(e),r=Math.pow(e,t),n=h(r),a=s(),i=s(),o="";for(this.divRemTo(n,a,i);a.signum()>0;)o=(r+i.intValue()).toString(e).substr(1)+o,a.divRemTo(n,a,i);return i.intValue().toString(e)+o},i.prototype.fromRadix=function(e,t){this.fromInt(0),null==t&&(t=10);for(var r=this.chunkSize(t),n=Math.pow(t,r),a=!1,s=0,o=0,c=0;c=r&&(this.dMultiply(n),this.dAddOffset(o,0),s=0,o=0))}s>0&&(this.dMultiply(Math.pow(t,s)),this.dAddOffset(o,0)),a&&i.ZERO.subTo(this,this)},i.prototype.fromNumber=function(e,t,r){if("number"==typeof t)if(e<2)this.fromInt(1);else for(this.fromNumber(e,r),this.testBit(e-1)||this.bitwiseTo(i.ONE.shiftLeft(e-1),m,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(t);)this.dAddOffset(2,0),this.bitLength()>e&&this.subTo(i.ONE.shiftLeft(e-1),this);else{var n=new Array,a=7&e;n.length=1+(e>>3),t.nextBytes(n),a>0?n[0]&=(1<>=this.DB;if(e.t>=this.DB;n+=this.s}else{for(n+=this.s;r>=this.DB;n+=e.s}t.s=n<0?-1:0,n>0?t.data[r++]=n:n<-1&&(t.data[r++]=this.DV+n),t.t=r,t.clamp()},i.prototype.dMultiply=function(e){this.data[this.t]=this.am(0,e-1,this,0,0,this.t),++this.t,this.clamp()},i.prototype.dAddOffset=function(e,t){if(0!=e){for(;this.t<=t;)this.data[this.t++]=0;for(this.data[t]+=e;this.data[t]>=this.DV;)this.data[t]-=this.DV,++t>=this.t&&(this.data[this.t++]=0),++this.data[t]}},i.prototype.multiplyLowerTo=function(e,t,r){var n,a=Math.min(this.t+e.t,t);for(r.s=0,r.t=a;a>0;)r.data[--a]=0;for(n=r.t-this.t;a=0;)r.data[n]=0;for(n=Math.max(t-this.t,0);n0)if(0==t)r=this.data[0]%e;else for(var n=this.t-1;n>=0;--n)r=(t*r+this.data[n])%e;return r},i.prototype.millerRabin=function(e){var t=this.subtract(i.ONE),r=t.getLowestSetBit();if(r<=0)return!1;for(var n,a=t.shiftRight(r),s={nextBytes:function(e){for(var t=0;t=0);var c=n.modPow(a,this);if(0!=c.compareTo(i.ONE)&&0!=c.compareTo(t)){for(var u=1;u++>24},i.prototype.shortValue=function(){return 0==this.t?this.s:this.data[0]<<16>>16},i.prototype.signum=function(){return this.s<0?-1:this.t<=0||1==this.t&&this.data[0]<=0?0:1},i.prototype.toByteArray=function(){var e=this.t,t=new Array;t[0]=this.s;var r,n=this.DB-e*this.DB%8,a=0;if(e-- >0)for(n>n)!=(this.s&this.DM)>>n&&(t[a++]=r|this.s<=0;)n<8?(r=(this.data[e]&(1<>(n+=this.DB-8)):(r=this.data[e]>>(n-=8)&255,n<=0&&(n+=this.DB,--e)),0!=(128&r)&&(r|=-256),0==a&&(128&this.s)!=(128&r)&&++a,(a>0||r!=this.s)&&(t[a++]=r);return t},i.prototype.equals=function(e){return 0==this.compareTo(e)},i.prototype.min=function(e){return this.compareTo(e)<0?this:e},i.prototype.max=function(e){return this.compareTo(e)>0?this:e},i.prototype.and=function(e){var t=s();return this.bitwiseTo(e,v,t),t},i.prototype.or=function(e){var t=s();return this.bitwiseTo(e,m,t),t},i.prototype.xor=function(e){var t=s();return this.bitwiseTo(e,C,t),t},i.prototype.andNot=function(e){var t=s();return this.bitwiseTo(e,E,t),t},i.prototype.not=function(){for(var e=s(),t=0;t=this.t?0!=this.s:0!=(this.data[t]&1<1){var p=s();for(n.sqrTo(o[1],p);c<=l;)o[c]=s(),n.mulTo(p,o[c-2],o[c]),c+=2}var f,v,m=e.t-1,C=!0,E=s();for(a=d(e.data[m])-1;m>=0;){for(a>=u?f=e.data[m]>>a-u&l:(f=(e.data[m]&(1<0&&(f|=e.data[m-1]>>this.DB+a-u)),c=r;0==(1&f);)f>>=1,--c;if((a-=c)<0&&(a+=this.DB,--m),C)o[f].copyTo(i),C=!1;else{for(;c>1;)n.sqrTo(i,E),n.sqrTo(E,i),c-=2;c>0?n.sqrTo(i,E):(v=i,i=E,E=v),n.mulTo(E,o[f],i)}for(;m>=0&&0==(e.data[m]&1<=0?(r.subTo(n,r),t&&a.subTo(o,a),s.subTo(c,s)):(n.subTo(r,n),t&&o.subTo(a,o),c.subTo(s,c))}return 0!=n.compareTo(i.ONE)?i.ZERO:c.compareTo(e)>=0?c.subtract(e):c.signum()<0?(c.addTo(e,c),c.signum()<0?c.add(e):c):c},i.prototype.pow=function(e){return this.exp(e,new b)},i.prototype.gcd=function(e){var t=this.s<0?this.negate():this.clone(),r=e.s<0?e.negate():e.clone();if(t.compareTo(r)<0){var n=t;t=r,r=n}var a=t.getLowestSetBit(),i=r.getLowestSetBit();if(i<0)return t;for(a0&&(t.rShiftTo(i,t),r.rShiftTo(i,r));t.signum()>0;)(a=t.getLowestSetBit())>0&&t.rShiftTo(a,t),(a=r.getLowestSetBit())>0&&r.rShiftTo(a,r),t.compareTo(r)>=0?(t.subTo(r,t),t.rShiftTo(1,t)):(r.subTo(t,r),r.rShiftTo(1,r));return i>0&&r.lShiftTo(i,r),r},i.prototype.isProbablePrime=function(e){var t,r=this.abs();if(1==r.t&&r.data[0]<=B[B.length-1]){for(t=0;t>>0,o>>>0];for(var c=a.fullMessageLength.length-1;c>=0;--c)a.fullMessageLength[c]+=o[1],o[1]=o[0]+(a.fullMessageLength[c]/4294967296>>>0),a.fullMessageLength[c]=a.fullMessageLength[c]>>>0,o[0]=o[1]/4294967296>>>0;return t.putBytes(i),l(e,r,t),(t.read>2048||0===t.length())&&t.compact(),a},a.digest=function(){var s=n.util.createBuffer();s.putBytes(t.bytes());var o=a.fullMessageLength[a.fullMessageLength.length-1]+a.messageLengthSize&a.blockLength-1;s.putBytes(i.substr(0,a.blockLength-o));for(var c,u=0,p=a.fullMessageLength.length-1;p>=0;--p)u=(c=8*a.fullMessageLength[p]+u)/4294967296>>>0,s.putInt32Le(c>>>0);var f={h0:e.h0,h1:e.h1,h2:e.h2,h3:e.h3};l(f,r,s);var h=n.util.createBuffer();return h.putInt32Le(f.h0),h.putInt32Le(f.h1),h.putInt32Le(f.h2),h.putInt32Le(f.h3),h},a};var i=null,s=null,o=null,c=null,u=!1;function l(e,t,r){for(var n,a,i,u,l,p,f,h=r.length();h>=64;){for(a=e.h0,i=e.h1,u=e.h2,l=e.h3,f=0;f<16;++f)t[f]=r.getInt32Le(),n=a+(l^i&(u^l))+c[f]+t[f],a=l,l=u,u=i,i+=n<<(p=o[f])|n>>>32-p;for(;f<32;++f)n=a+(u^l&(i^u))+c[f]+t[s[f]],a=l,l=u,u=i,i+=n<<(p=o[f])|n>>>32-p;for(;f<48;++f)n=a+(i^u^l)+c[f]+t[s[f]],a=l,l=u,u=i,i+=n<<(p=o[f])|n>>>32-p;for(;f<64;++f)n=a+(u^(i|~l))+c[f]+t[s[f]],a=l,l=u,u=i,i+=n<<(p=o[f])|n>>>32-p;e.h0=e.h0+a|0,e.h1=e.h1+i|0,e.h2=e.h2+u|0,e.h3=e.h3+l|0,h-=64}}},function(e,t,r){var n=r(0);r(8),r(4),r(1);var a,i=n.pkcs5=n.pkcs5||{};n.util.isNodejs&&!n.options.usePureJavaScript&&(a=r(17)),e.exports=n.pbkdf2=i.pbkdf2=function(e,t,r,i,s,o){if("function"==typeof s&&(o=s,s=null),n.util.isNodejs&&!n.options.usePureJavaScript&&a.pbkdf2&&(null===s||"object"!=typeof s)&&(a.pbkdf2Sync.length>4||!s||"sha1"===s))return"string"!=typeof s&&(s="sha1"),e=Buffer.from(e,"binary"),t=Buffer.from(t,"binary"),o?4===a.pbkdf2Sync.length?a.pbkdf2(e,t,r,i,(function(e,t){if(e)return o(e);o(null,t.toString("binary"))})):a.pbkdf2(e,t,r,i,s,(function(e,t){if(e)return o(e);o(null,t.toString("binary"))})):4===a.pbkdf2Sync.length?a.pbkdf2Sync(e,t,r,i).toString("binary"):a.pbkdf2Sync(e,t,r,i,s).toString("binary");if(null==s&&(s="sha1"),"string"==typeof s){if(!(s in n.md.algorithms))throw new Error("Unknown hash algorithm: "+s);s=n.md[s].create()}var c=s.digestLength;if(i>4294967295*c){var u=new Error("Derived key is too long.");if(o)return o(u);throw u}var l=Math.ceil(i/c),p=i-(l-1)*c,f=n.hmac.create();f.start(s,e);var h,d,y,g="";if(!o){for(var v=1;v<=l;++v){f.start(null,null),f.update(t),f.update(n.util.int32ToBytes(v)),h=y=f.digest().getBytes();for(var m=2;m<=r;++m)f.start(null,null),f.update(y),d=f.digest().getBytes(),h=n.util.xorBytes(h,d,c),y=d;g+=vl)return o(null,g);f.start(null,null),f.update(t),f.update(n.util.int32ToBytes(v)),h=y=f.digest().getBytes(),m=2,E()}function E(){if(m<=r)return f.start(null,null),f.update(y),d=f.digest().getBytes(),h=n.util.xorBytes(h,d,c),y=d,++m,n.util.setImmediate(E);g+=v128)throw new Error('Invalid "nsComment" content.');e.value=a.create(a.Class.UNIVERSAL,a.Type.IA5STRING,!1,e.comment)}else if("subjectKeyIdentifier"===e.name&&t.cert){var h=t.cert.generateSubjectKeyIdentifier();e.subjectKeyIdentifier=h.toHex(),e.value=a.create(a.Class.UNIVERSAL,a.Type.OCTETSTRING,!1,h.getBytes())}else if("authorityKeyIdentifier"===e.name&&t.cert){e.value=a.create(a.Class.UNIVERSAL,a.Type.SEQUENCE,!0,[]);l=e.value.value;if(e.keyIdentifier){var d=!0===e.keyIdentifier?t.cert.generateSubjectKeyIdentifier().getBytes():e.keyIdentifier;l.push(a.create(a.Class.CONTEXT_SPECIFIC,0,!1,d))}if(e.authorityCertIssuer){var g=[a.create(a.Class.CONTEXT_SPECIFIC,4,!0,[y(!0===e.authorityCertIssuer?t.cert.issuer:e.authorityCertIssuer)])];l.push(a.create(a.Class.CONTEXT_SPECIFIC,1,!0,g))}if(e.serialNumber){var v=n.util.hexToBytes(!0===e.serialNumber?t.cert.serialNumber:e.serialNumber);l.push(a.create(a.Class.CONTEXT_SPECIFIC,2,!1,v))}}else if("cRLDistributionPoints"===e.name){e.value=a.create(a.Class.UNIVERSAL,a.Type.SEQUENCE,!0,[]);l=e.value.value;var m,C=a.create(a.Class.UNIVERSAL,a.Type.SEQUENCE,!0,[]),E=a.create(a.Class.CONTEXT_SPECIFIC,0,!0,[]);for(f=0;f2)throw new Error("Cannot read notBefore/notAfter validity times; more than two times were provided in the certificate.");if(p.length<2)throw new Error("Cannot read notBefore/notAfter validity times; they were not provided as either UTCTime or GeneralizedTime.");if(c.validity.notBefore=p[0],c.validity.notAfter=p[1],c.tbsCertificate=r.tbsCertificate,t){var f;if(c.md=null,c.signatureOid in s)switch(s[c.signatureOid]){case"sha1WithRSAEncryption":c.md=n.md.sha1.create();break;case"md5WithRSAEncryption":c.md=n.md.md5.create();break;case"sha256WithRSAEncryption":c.md=n.md.sha256.create();break;case"sha384WithRSAEncryption":c.md=n.md.sha384.create();break;case"sha512WithRSAEncryption":c.md=n.md.sha512.create();break;case"RSASSA-PSS":c.md=n.md.sha256.create()}if(null===c.md)throw(f=new Error("Could not compute certificate digest. Unknown signature OID.")).signatureOid=c.signatureOid,f;var y=a.toDer(c.tbsCertificate);c.md.update(y.getBytes())}var v=n.md.sha1.create();c.issuer.getField=function(e){return h(c.issuer,e)},c.issuer.addField=function(e){g([e]),c.issuer.attributes.push(e)},c.issuer.attributes=i.RDNAttributesAsArray(r.certIssuer,v),r.certIssuerUniqueId&&(c.issuer.uniqueId=r.certIssuerUniqueId),c.issuer.hash=v.digest().toHex();var m=n.md.sha1.create();return c.subject.getField=function(e){return h(c.subject,e)},c.subject.addField=function(e){g([e]),c.subject.attributes.push(e)},c.subject.attributes=i.RDNAttributesAsArray(r.certSubject,m),r.certSubjectUniqueId&&(c.subject.uniqueId=r.certSubjectUniqueId),c.subject.hash=m.digest().toHex(),r.certExtensions?c.extensions=i.certificateExtensionsFromAsn1(r.certExtensions):c.extensions=[],c.publicKey=i.publicKeyFromAsn1(r.subjectPublicKeyInfo),c},i.certificateExtensionsFromAsn1=function(e){for(var t=[],r=0;r1&&(r=c.value.charCodeAt(1),i=c.value.length>2?c.value.charCodeAt(2):0),t.digitalSignature=128==(128&r),t.nonRepudiation=64==(64&r),t.keyEncipherment=32==(32&r),t.dataEncipherment=16==(16&r),t.keyAgreement=8==(8&r),t.keyCertSign=4==(4&r),t.cRLSign=2==(2&r),t.encipherOnly=1==(1&r),t.decipherOnly=128==(128&i)}else if("basicConstraints"===t.name){(c=a.fromDer(t.value)).value.length>0&&c.value[0].type===a.Type.BOOLEAN?t.cA=0!==c.value[0].value.charCodeAt(0):t.cA=!1;var o=null;c.value.length>0&&c.value[0].type===a.Type.INTEGER?o=c.value[0].value:c.value.length>1&&(o=c.value[1].value),null!==o&&(t.pathLenConstraint=a.derToInteger(o))}else if("extKeyUsage"===t.name)for(var c=a.fromDer(t.value),u=0;u1&&(r=c.value.charCodeAt(1)),t.client=128==(128&r),t.server=64==(64&r),t.email=32==(32&r),t.objsign=16==(16&r),t.reserved=8==(8&r),t.sslCA=4==(4&r),t.emailCA=2==(2&r),t.objCA=1==(1&r)}else if("subjectAltName"===t.name||"issuerAltName"===t.name){var p;t.altNames=[];c=a.fromDer(t.value);for(var f=0;f=E&&e0&&s.value.push(i.certificateExtensionsToAsn1(e.extensions)),s},i.getCertificationRequestInfo=function(e){return a.create(a.Class.UNIVERSAL,a.Type.SEQUENCE,!0,[a.create(a.Class.UNIVERSAL,a.Type.INTEGER,!1,a.integerToDer(e.version).getBytes()),y(e.subject),i.publicKeyToAsn1(e.publicKey),C(e)])},i.distinguishedNameToAsn1=function(e){return y(e)},i.certificateToAsn1=function(e){var t=e.tbsCertificate||i.getTBSCertificate(e);return a.create(a.Class.UNIVERSAL,a.Type.SEQUENCE,!0,[t,a.create(a.Class.UNIVERSAL,a.Type.SEQUENCE,!0,[a.create(a.Class.UNIVERSAL,a.Type.OID,!1,a.oidToDer(e.signatureOid).getBytes()),m(e.signatureOid,e.signatureParameters)]),a.create(a.Class.UNIVERSAL,a.Type.BITSTRING,!1,String.fromCharCode(0)+e.signature)])},i.certificateExtensionsToAsn1=function(e){var t=a.create(a.Class.CONTEXT_SPECIFIC,3,!0,[]),r=a.create(a.Class.UNIVERSAL,a.Type.SEQUENCE,!0,[]);t.value.push(r);for(var n=0;nl.validity.notAfter)&&(c={message:"Certificate is not valid yet or has expired.",error:i.certificateError.certificate_expired,notBefore:l.validity.notBefore,notAfter:l.validity.notAfter,now:s}),null===c){if(null===(p=t[0]||e.getIssuer(l))&&l.isIssuer(l)&&(f=!0,p=l),p){var h=p;n.util.isArray(h)||(h=[h]);for(var d=!1;!d&&h.length>0;){p=h.shift();try{d=p.verify(l)}catch(e){}}d||(c={message:"Certificate signature is invalid.",error:i.certificateError.bad_certificate})}null!==c||p&&!f||e.hasCertificate(l)||(c={message:"Certificate is not trusted.",error:i.certificateError.unknown_ca})}if(null===c&&p&&!l.isIssuer(p)&&(c={message:"Certificate issuer is invalid.",error:i.certificateError.bad_certificate}),null===c)for(var y={keyUsage:!0,basicConstraints:!0},g=0;null===c&&gm.pathLenConstraint&&(c={message:"Certificate basicConstraints pathLenConstraint violated.",error:i.certificateError.bad_certificate})}var E=null===c||c.error,S=r.verify?r.verify(E,u,a):E;if(!0!==S)throw!0===E&&(c={message:"The application rejected the certificate.",error:i.certificateError.bad_certificate}),(S||0===S)&&("object"!=typeof S||n.util.isArray(S)?"string"==typeof S&&(c.error=S):(S.message&&(c.message=S.message),S.error&&(c.error=S.error))),c;c=null,o=!1,++u}while(t.length>0);return!0}},function(e,t,r){var n=r(0);r(2),r(1),(e.exports=n.pss=n.pss||{}).create=function(e){3===arguments.length&&(e={md:arguments[0],mgf:arguments[1],saltLength:arguments[2]});var t,r=e.md,a=e.mgf,i=r.digestLength,s=e.salt||null;if("string"==typeof s&&(s=n.util.createBuffer(s)),"saltLength"in e)t=e.saltLength;else{if(null===s)throw new Error("Salt length not specified or specific salt not given.");t=s.length()}if(null!==s&&s.length()!==t)throw new Error("Given salt length does not match length of given salt.");var o=e.prng||n.random,c={encode:function(e,c){var u,l,p=c-1,f=Math.ceil(p/8),h=e.digest().getBytes();if(f>8*f-p&255;return(E=String.fromCharCode(E.charCodeAt(0)&~S)+E.substr(1))+y+String.fromCharCode(188)},verify:function(e,s,o){var c,u=o-1,l=Math.ceil(u/8);if(s=s.substr(-l),l>8*l-u&255;if(0!=(f.charCodeAt(0)&d))throw new Error("Bits beyond keysize not zero as expected.");var y=a.generate(h,p),g="";for(c=0;c4){var r=e;e=n.util.createBuffer();for(var a=0;a0))return!0;for(var n=0;n0))return!0;for(var n=0;n0)return!1;var r=e.length(),n=e.at(r-1);return!(n>this.blockSize<<2)&&(e.truncate(n),!0)},a.cbc=function(e){e=e||{},this.name="CBC",this.cipher=e.cipher,this.blockSize=e.blockSize||16,this._ints=this.blockSize/4,this._inBlock=new Array(this._ints),this._outBlock=new Array(this._ints)},a.cbc.prototype.start=function(e){if(null===e.iv){if(!this._prev)throw new Error("Invalid IV parameter.");this._iv=this._prev.slice(0)}else{if(!("iv"in e))throw new Error("Invalid IV parameter.");this._iv=i(e.iv,this.blockSize),this._prev=this._iv.slice(0)}},a.cbc.prototype.encrypt=function(e,t,r){if(e.length()0))return!0;for(var n=0;n0))return!0;for(var n=0;n0)return!1;var r=e.length(),n=e.at(r-1);return!(n>this.blockSize<<2)&&(e.truncate(n),!0)},a.cfb=function(e){e=e||{},this.name="CFB",this.cipher=e.cipher,this.blockSize=e.blockSize||16,this._ints=this.blockSize/4,this._inBlock=null,this._outBlock=new Array(this._ints),this._partialBlock=new Array(this._ints),this._partialOutput=n.util.createBuffer(),this._partialBytes=0},a.cfb.prototype.start=function(e){if(!("iv"in e))throw new Error("Invalid IV parameter.");this._iv=i(e.iv,this.blockSize),this._inBlock=this._iv.slice(0),this._partialBytes=0},a.cfb.prototype.encrypt=function(e,t,r){var n=e.length();if(0===n)return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),0===this._partialBytes&&n>=this.blockSize)for(var a=0;a0&&(i=this.blockSize-i),this._partialOutput.clear();for(a=0;a0)e.read-=this.blockSize;else for(a=0;a0&&this._partialOutput.getBytes(this._partialBytes),i>0&&!r)return t.putBytes(this._partialOutput.getBytes(i-this._partialBytes)),this._partialBytes=i,!0;t.putBytes(this._partialOutput.getBytes(n-this._partialBytes)),this._partialBytes=0}},a.cfb.prototype.decrypt=function(e,t,r){var n=e.length();if(0===n)return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),0===this._partialBytes&&n>=this.blockSize)for(var a=0;a0&&(i=this.blockSize-i),this._partialOutput.clear();for(a=0;a0)e.read-=this.blockSize;else for(a=0;a0&&this._partialOutput.getBytes(this._partialBytes),i>0&&!r)return t.putBytes(this._partialOutput.getBytes(i-this._partialBytes)),this._partialBytes=i,!0;t.putBytes(this._partialOutput.getBytes(n-this._partialBytes)),this._partialBytes=0}},a.ofb=function(e){e=e||{},this.name="OFB",this.cipher=e.cipher,this.blockSize=e.blockSize||16,this._ints=this.blockSize/4,this._inBlock=null,this._outBlock=new Array(this._ints),this._partialOutput=n.util.createBuffer(),this._partialBytes=0},a.ofb.prototype.start=function(e){if(!("iv"in e))throw new Error("Invalid IV parameter.");this._iv=i(e.iv,this.blockSize),this._inBlock=this._iv.slice(0),this._partialBytes=0},a.ofb.prototype.encrypt=function(e,t,r){var n=e.length();if(0===e.length())return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),0===this._partialBytes&&n>=this.blockSize)for(var a=0;a0&&(i=this.blockSize-i),this._partialOutput.clear();for(a=0;a0)e.read-=this.blockSize;else for(a=0;a0&&this._partialOutput.getBytes(this._partialBytes),i>0&&!r)return t.putBytes(this._partialOutput.getBytes(i-this._partialBytes)),this._partialBytes=i,!0;t.putBytes(this._partialOutput.getBytes(n-this._partialBytes)),this._partialBytes=0}},a.ofb.prototype.decrypt=a.ofb.prototype.encrypt,a.ctr=function(e){e=e||{},this.name="CTR",this.cipher=e.cipher,this.blockSize=e.blockSize||16,this._ints=this.blockSize/4,this._inBlock=null,this._outBlock=new Array(this._ints),this._partialOutput=n.util.createBuffer(),this._partialBytes=0},a.ctr.prototype.start=function(e){if(!("iv"in e))throw new Error("Invalid IV parameter.");this._iv=i(e.iv,this.blockSize),this._inBlock=this._iv.slice(0),this._partialBytes=0},a.ctr.prototype.encrypt=function(e,t,r){var n=e.length();if(0===n)return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),0===this._partialBytes&&n>=this.blockSize)for(var a=0;a0&&(i=this.blockSize-i),this._partialOutput.clear();for(a=0;a0&&(e.read-=this.blockSize),this._partialBytes>0&&this._partialOutput.getBytes(this._partialBytes),i>0&&!r)return t.putBytes(this._partialOutput.getBytes(i-this._partialBytes)),this._partialBytes=i,!0;t.putBytes(this._partialOutput.getBytes(n-this._partialBytes)),this._partialBytes=0}s(this._inBlock)},a.ctr.prototype.decrypt=a.ctr.prototype.encrypt,a.gcm=function(e){e=e||{},this.name="GCM",this.cipher=e.cipher,this.blockSize=e.blockSize||16,this._ints=this.blockSize/4,this._inBlock=new Array(this._ints),this._outBlock=new Array(this._ints),this._partialOutput=n.util.createBuffer(),this._partialBytes=0,this._R=3774873600},a.gcm.prototype.start=function(e){if(!("iv"in e))throw new Error("Invalid IV parameter.");var t,r=n.util.createBuffer(e.iv);if(this._cipherLength=0,t="additionalData"in e?n.util.createBuffer(e.additionalData):n.util.createBuffer(),this._tagLength="tagLength"in e?e.tagLength:128,this._tag=null,e.decrypt&&(this._tag=n.util.createBuffer(e.tag).getBytes(),this._tag.length!==this._tagLength/8))throw new Error("Authentication tag does not match tag length.");this._hashBlock=new Array(this._ints),this.tag=null,this._hashSubkey=new Array(this._ints),this.cipher.encrypt([0,0,0,0],this._hashSubkey),this.componentBits=4,this._m=this.generateHashTable(this._hashSubkey,this.componentBits);var a=r.length();if(12===a)this._j0=[r.getInt32(),r.getInt32(),r.getInt32(),1];else{for(this._j0=[0,0,0,0];r.length()>0;)this._j0=this.ghash(this._hashSubkey,this._j0,[r.getInt32(),r.getInt32(),r.getInt32(),r.getInt32()]);this._j0=this.ghash(this._hashSubkey,this._j0,[0,0].concat(o(8*a)))}this._inBlock=this._j0.slice(0),s(this._inBlock),this._partialBytes=0,t=n.util.createBuffer(t),this._aDataLength=o(8*t.length());var i=t.length()%this.blockSize;for(i&&t.fillWithByte(0,this.blockSize-i),this._s=[0,0,0,0];t.length()>0;)this._s=this.ghash(this._hashSubkey,this._s,[t.getInt32(),t.getInt32(),t.getInt32(),t.getInt32()])},a.gcm.prototype.encrypt=function(e,t,r){var n=e.length();if(0===n)return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),0===this._partialBytes&&n>=this.blockSize){for(var a=0;a0&&(i=this.blockSize-i),this._partialOutput.clear();for(a=0;a0&&this._partialOutput.getBytes(this._partialBytes),i>0&&!r)return e.read-=this.blockSize,t.putBytes(this._partialOutput.getBytes(i-this._partialBytes)),this._partialBytes=i,!0;t.putBytes(this._partialOutput.getBytes(n-this._partialBytes)),this._partialBytes=0}this._s=this.ghash(this._hashSubkey,this._s,this._outBlock),s(this._inBlock)},a.gcm.prototype.decrypt=function(e,t,r){var n=e.length();if(n0))return!0;this.cipher.encrypt(this._inBlock,this._outBlock),s(this._inBlock),this._hashBlock[0]=e.getInt32(),this._hashBlock[1]=e.getInt32(),this._hashBlock[2]=e.getInt32(),this._hashBlock[3]=e.getInt32(),this._s=this.ghash(this._hashSubkey,this._s,this._hashBlock);for(var a=0;a0;--n)t[n]=e[n]>>>1|(1&e[n-1])<<31;t[0]=e[0]>>>1,r&&(t[0]^=this._R)},a.gcm.prototype.tableMultiply=function(e){for(var t=[0,0,0,0],r=0;r<32;++r){var n=e[r/8|0]>>>4*(7-r%8)&15,a=this._m[r][n];t[0]^=a[0],t[1]^=a[1],t[2]^=a[2],t[3]^=a[3]}return t},a.gcm.prototype.ghash=function(e,t,r){return t[0]^=r[0],t[1]^=r[1],t[2]^=r[2],t[3]^=r[3],this.tableMultiply(t)},a.gcm.prototype.generateHashTable=function(e,t){for(var r=8/t,n=4*r,a=16*r,i=new Array(a),s=0;s>>1,a=new Array(r);a[n]=e.slice(0);for(var i=n>>>1;i>0;)this.pow(a[2*i],a[i]=[]),i>>=1;for(i=2;i=0;c--)w>>=8,w+=A.at(c)+N.at(c),N.setAt(c,255&w);k.putBuffer(N)}E=k,p.putBuffer(b)}return p.truncate(p.length()-i),p},s.pbe.getCipher=function(e,t,r){switch(e){case s.oids.pkcs5PBES2:return s.pbe.getCipherForPBES2(e,t,r);case s.oids["pbeWithSHAAnd3-KeyTripleDES-CBC"]:case s.oids["pbewithSHAAnd40BitRC2-CBC"]:return s.pbe.getCipherForPKCS12PBE(e,t,r);default:var n=new Error("Cannot read encrypted PBE data block. Unsupported OID.");throw n.oid=e,n.supportedOids=["pkcs5PBES2","pbeWithSHAAnd3-KeyTripleDES-CBC","pbewithSHAAnd40BitRC2-CBC"],n}},s.pbe.getCipherForPBES2=function(e,t,r){var a,o={},c=[];if(!i.validate(t,u,o,c))throw(a=new Error("Cannot read password-based-encryption algorithm parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.")).errors=c,a;if((e=i.derToOid(o.kdfOid))!==s.oids.pkcs5PBKDF2)throw(a=new Error("Cannot read encrypted private key. Unsupported key derivation function OID.")).oid=e,a.supportedOids=["pkcs5PBKDF2"],a;if((e=i.derToOid(o.encOid))!==s.oids["aes128-CBC"]&&e!==s.oids["aes192-CBC"]&&e!==s.oids["aes256-CBC"]&&e!==s.oids["des-EDE3-CBC"]&&e!==s.oids.desCBC)throw(a=new Error("Cannot read encrypted private key. Unsupported encryption scheme OID.")).oid=e,a.supportedOids=["aes128-CBC","aes192-CBC","aes256-CBC","des-EDE3-CBC","desCBC"],a;var l,p,h=o.kdfSalt,d=n.util.createBuffer(o.kdfIterationCount);switch(d=d.getInt(d.length()<<3),s.oids[e]){case"aes128-CBC":l=16,p=n.aes.createDecryptionCipher;break;case"aes192-CBC":l=24,p=n.aes.createDecryptionCipher;break;case"aes256-CBC":l=32,p=n.aes.createDecryptionCipher;break;case"des-EDE3-CBC":l=24,p=n.des.createDecryptionCipher;break;case"desCBC":l=8,p=n.des.createDecryptionCipher}var y=f(o.prfOid),g=n.pkcs5.pbkdf2(r,h,d,l,y),v=o.encIv,m=p(g);return m.start(v),m},s.pbe.getCipherForPKCS12PBE=function(e,t,r){var a={},o=[];if(!i.validate(t,l,a,o))throw(y=new Error("Cannot read password-based-encryption algorithm parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.")).errors=o,y;var c,u,p,h=n.util.createBuffer(a.salt),d=n.util.createBuffer(a.iterations);switch(d=d.getInt(d.length()<<3),e){case s.oids["pbeWithSHAAnd3-KeyTripleDES-CBC"]:c=24,u=8,p=n.des.startDecrypting;break;case s.oids["pbewithSHAAnd40BitRC2-CBC"]:c=5,u=8,p=function(e,t){var r=n.rc2.createDecryptionCipher(e,40);return r.start(t,null),r};break;default:var y;throw(y=new Error("Cannot read PKCS #12 PBE data block. Unsupported OID.")).oid=e,y}var g=f(a.prfOid),v=s.pbe.generatePkcs12Key(r,h,1,d,c,g);return g.start(),p(v,s.pbe.generatePkcs12Key(r,h,2,d,u,g))},s.pbe.opensslDeriveBytes=function(e,t,r,a){if(null==a){if(!("md5"in n.md))throw new Error('"md5" hash algorithm unavailable.');a=n.md.md5.create()}null===t&&(t="");for(var i=[p(a,e+t)],s=16,o=1;s>>0,o>>>0];for(var u=a.fullMessageLength.length-1;u>=0;--u)a.fullMessageLength[u]+=o[1],o[1]=o[0]+(a.fullMessageLength[u]/4294967296>>>0),a.fullMessageLength[u]=a.fullMessageLength[u]>>>0,o[0]=o[1]/4294967296>>>0;return t.putBytes(i),c(e,r,t),(t.read>2048||0===t.length())&&t.compact(),a},a.digest=function(){var s=n.util.createBuffer();s.putBytes(t.bytes());var o,u=a.fullMessageLength[a.fullMessageLength.length-1]+a.messageLengthSize&a.blockLength-1;s.putBytes(i.substr(0,a.blockLength-u));for(var l=8*a.fullMessageLength[0],p=0;p>>0,s.putInt32(l>>>0),l=o>>>0;s.putInt32(l);var f={h0:e.h0,h1:e.h1,h2:e.h2,h3:e.h3,h4:e.h4,h5:e.h5,h6:e.h6,h7:e.h7};c(f,r,s);var h=n.util.createBuffer();return h.putInt32(f.h0),h.putInt32(f.h1),h.putInt32(f.h2),h.putInt32(f.h3),h.putInt32(f.h4),h.putInt32(f.h5),h.putInt32(f.h6),h.putInt32(f.h7),h},a};var i=null,s=!1,o=null;function c(e,t,r){for(var n,a,i,s,c,u,l,p,f,h,d,y,g,v=r.length();v>=64;){for(c=0;c<16;++c)t[c]=r.getInt32();for(;c<64;++c)n=((n=t[c-2])>>>17|n<<15)^(n>>>19|n<<13)^n>>>10,a=((a=t[c-15])>>>7|a<<25)^(a>>>18|a<<14)^a>>>3,t[c]=n+t[c-7]+a+t[c-16]|0;for(u=e.h0,l=e.h1,p=e.h2,f=e.h3,h=e.h4,d=e.h5,y=e.h6,g=e.h7,c=0;c<64;++c)i=(u>>>2|u<<30)^(u>>>13|u<<19)^(u>>>22|u<<10),s=u&l|p&(u^l),n=g+((h>>>6|h<<26)^(h>>>11|h<<21)^(h>>>25|h<<7))+(y^h&(d^y))+o[c]+t[c],g=y,y=d,d=h,h=f+n>>>0,f=p,p=l,l=u,u=n+(a=i+s)>>>0;e.h0=e.h0+u|0,e.h1=e.h1+l|0,e.h2=e.h2+p|0,e.h3=e.h3+f|0,e.h4=e.h4+h|0,e.h5=e.h5+d|0,e.h6=e.h6+y|0,e.h7=e.h7+g|0,v-=64}}},function(e,t,r){var n=r(0);r(1);var a=null;!n.util.isNodejs||n.options.usePureJavaScript||process.versions["node-webkit"]||(a=r(17)),(e.exports=n.prng=n.prng||{}).create=function(e){for(var t={plugin:e,key:null,seed:null,time:null,reseeds:0,generated:0,keyBytes:""},r=e.md,i=new Array(32),s=0;s<32;++s)i[s]=r.create();function o(){if(t.pools[0].messageLength>=32)return c();var e=32-t.pools[0].messageLength<<5;t.collect(t.seedFileSync(e)),c()}function c(){t.reseeds=4294967295===t.reseeds?0:t.reseeds+1;var e=t.plugin.md.create();e.update(t.keyBytes);for(var r=1,n=0;n<32;++n)t.reseeds%r==0&&(e.update(t.pools[n].digest().getBytes()),t.pools[n].start()),r<<=1;t.keyBytes=e.digest().getBytes(),e.start(),e.update(t.keyBytes);var a=e.digest().getBytes();t.key=t.plugin.formatKey(t.keyBytes),t.seed=t.plugin.formatSeed(a),t.generated=0}function u(e){var t=null,r=n.util.globalScope,a=r.crypto||r.msCrypto;a&&a.getRandomValues&&(t=function(e){return a.getRandomValues(e)});var i=n.util.createBuffer();if(t)for(;i.length()>16)))<<16,f=4294967295&(l=(2147483647&(l+=u>>15))+(l>>31));for(c=0;c<3;++c)p=f>>>(c<<3),p^=Math.floor(256*Math.random()),i.putByte(String.fromCharCode(255&p))}return i.getBytes(e)}return t.pools=i,t.pool=0,t.generate=function(e,r){if(!r)return t.generateSync(e);var a=t.plugin.cipher,i=t.plugin.increment,s=t.plugin.formatKey,o=t.plugin.formatSeed,u=n.util.createBuffer();t.key=null,function l(p){if(p)return r(p);if(u.length()>=e)return r(null,u.getBytes(e));t.generated>1048575&&(t.key=null);if(null===t.key)return n.util.nextTick((function(){!function(e){if(t.pools[0].messageLength>=32)return c(),e();var r=32-t.pools[0].messageLength<<5;t.seedFile(r,(function(r,n){if(r)return e(r);t.collect(n),c(),e()}))}(l)}));var f=a(t.key,t.seed);t.generated+=f.length,u.putBytes(f),t.key=s(a(t.key,i(t.seed))),t.seed=o(a(t.key,t.seed)),n.util.setImmediate(l)}()},t.generateSync=function(e){var r=t.plugin.cipher,a=t.plugin.increment,i=t.plugin.formatKey,s=t.plugin.formatSeed;t.key=null;for(var c=n.util.createBuffer();c.length()1048575&&(t.key=null),null===t.key&&o();var u=r(t.key,t.seed);t.generated+=u.length,c.putBytes(u),t.key=i(r(t.key,a(t.seed))),t.seed=s(r(t.key,t.seed))}return c.getBytes(e)},a?(t.seedFile=function(e,t){a.randomBytes(e,(function(e,r){if(e)return t(e);t(null,r.toString())}))},t.seedFileSync=function(e){return a.randomBytes(e).toString()}):(t.seedFile=function(e,t){try{t(null,u(e))}catch(e){t(e)}},t.seedFileSync=u),t.collect=function(e){for(var r=e.length,n=0;n>a&255);t.collect(n)},t.registerWorker=function(e){if(e===self)t.seedFile=function(e,t){self.addEventListener("message",(function e(r){var n=r.data;n.forge&&n.forge.prng&&(self.removeEventListener("message",e),t(n.forge.prng.err,n.forge.prng.bytes))})),self.postMessage({forge:{prng:{needed:e}}})};else{e.addEventListener("message",(function(r){var n=r.data;n.forge&&n.forge.prng&&t.seedFile(n.forge.prng.needed,(function(t,r){e.postMessage({forge:{prng:{err:t,bytes:r}}})}))}))}},t}},function(e,t,r){var n=r(0);r(1);var a=[217,120,249,196,25,221,181,237,40,233,253,121,74,160,216,157,198,126,55,131,43,118,83,142,98,76,100,136,68,139,251,162,23,154,89,245,135,179,79,19,97,69,109,141,9,129,125,50,189,143,64,235,134,183,123,11,240,149,33,34,92,107,78,130,84,214,101,147,206,96,178,28,115,86,192,20,167,140,241,220,18,117,202,31,59,190,228,209,66,61,212,48,163,60,182,38,111,191,14,218,70,105,7,87,39,242,29,155,188,148,67,3,248,17,199,246,144,239,62,231,6,195,213,47,200,102,30,215,8,232,234,222,128,82,238,247,132,170,114,172,53,77,106,42,150,26,210,113,90,21,73,116,75,159,208,94,4,24,164,236,194,224,65,110,15,81,203,204,36,145,175,80,161,244,112,57,153,124,58,133,35,184,180,122,252,2,54,91,37,85,151,49,45,93,250,152,227,138,146,174,5,223,41,16,103,108,186,201,211,0,230,207,225,158,168,44,99,22,1,63,88,226,137,169,13,56,52,27,171,51,255,176,187,72,12,95,185,177,205,46,197,243,219,71,229,165,156,119,10,166,32,104,254,127,193,173],i=[1,2,3,5],s=function(e,t){return e<>16-t},o=function(e,t){return(65535&e)>>t|e<<16-t&65535};e.exports=n.rc2=n.rc2||{},n.rc2.expandKey=function(e,t){"string"==typeof e&&(e=n.util.createBuffer(e)),t=t||128;var r,i=e,s=e.length(),o=t,c=Math.ceil(o/8),u=255>>(7&o);for(r=s;r<128;r++)i.putByte(a[i.at(r-1)+i.at(r-s)&255]);for(i.setAt(128-c,a[i.at(128-c)&u]),r=127-c;r>=0;r--)i.setAt(r,a[i.at(r+1)^i.at(r+c)]);return i};var c=function(e,t,r){var a,c,u,l,p=!1,f=null,h=null,d=null,y=[];for(e=n.rc2.expandKey(e,t),u=0;u<64;u++)y.push(e.getInt16Le());r?(a=function(e){for(u=0;u<4;u++)e[u]+=y[l]+(e[(u+3)%4]&e[(u+2)%4])+(~e[(u+3)%4]&e[(u+1)%4]),e[u]=s(e[u],i[u]),l++},c=function(e){for(u=0;u<4;u++)e[u]+=y[63&e[(u+3)%4]]}):(a=function(e){for(u=3;u>=0;u--)e[u]=o(e[u],i[u]),e[u]-=y[l]+(e[(u+3)%4]&e[(u+2)%4])+(~e[(u+3)%4]&e[(u+1)%4]),l--},c=function(e){for(u=3;u>=0;u--)e[u]-=y[63&e[(u+3)%4]]});var g=function(e){var t=[];for(u=0;u<4;u++){var n=f.getInt16Le();null!==d&&(r?n^=d.getInt16Le():d.putInt16Le(n)),t.push(65535&n)}l=r?0:63;for(var a=0;a=8;)g([[5,a],[1,c],[6,a],[1,c],[5,a]])},finish:function(e){var t=!0;if(r)if(e)t=e(8,f,!r);else{var n=8===f.length()?8:8-f.length();f.fillWithByte(n,n)}if(t&&(p=!0,v.update()),!r&&(t=0===f.length()))if(e)t=e(8,h,!r);else{var a=h.length(),i=h.at(a-1);i>a?t=!1:h.truncate(i)}return t}}};n.rc2.startEncrypting=function(e,t,r){var a=n.rc2.createEncryptionCipher(e,128);return a.start(t,r),a},n.rc2.createEncryptionCipher=function(e,t){return c(e,t,!0)},n.rc2.startDecrypting=function(e,t,r){var a=n.rc2.createDecryptionCipher(e,128);return a.start(t,r),a},n.rc2.createDecryptionCipher=function(e,t){return c(e,t,!1)}},function(e,t,r){var n=r(0);r(1),r(2),r(9);var a=e.exports=n.pkcs1=n.pkcs1||{};function i(e,t,r){r||(r=n.md.sha1.create());for(var a="",i=Math.ceil(t/r.digestLength),s=0;s>24&255,s>>16&255,s>>8&255,255&s);r.start(),r.update(e+o),a+=r.digest().getBytes()}return a.substring(0,t)}a.encode_rsa_oaep=function(e,t,r){var a,s,o,c;"string"==typeof r?(a=r,s=arguments[3]||void 0,o=arguments[4]||void 0):r&&(a=r.label||void 0,s=r.seed||void 0,o=r.md||void 0,r.mgf1&&r.mgf1.md&&(c=r.mgf1.md)),o?o.start():o=n.md.sha1.create(),c||(c=o);var u=Math.ceil(e.n.bitLength()/8),l=u-2*o.digestLength-2;if(t.length>l)throw(g=new Error("RSAES-OAEP input message length is too long.")).length=t.length,g.maxLength=l,g;a||(a=""),o.update(a,"raw");for(var p=o.digest(),f="",h=l-t.length,d=0;de&&(s=c(e,t));var h=s.toString(16);a.target.postMessage({hex:h,workLoad:l}),s.dAddOffset(p,0)}}}h()}(e,t,a,i);return o(e,t,a,i)}(e,u,i.options,a);throw new Error("Invalid prime generation algorithm: "+i.name)}}function o(e,t,r,i){var s=c(e,t),o=function(e){return e<=100?27:e<=150?18:e<=200?15:e<=250?12:e<=300?9:e<=350?8:e<=400?7:e<=500?6:e<=600?5:e<=800?4:e<=1250?3:2}(s.bitLength());"millerRabinTests"in r&&(o=r.millerRabinTests);var u=10;"maxBlockTime"in r&&(u=r.maxBlockTime),function e(t,r,i,s,o,u,l){var p=+new Date;do{if(t.bitLength()>r&&(t=c(r,i)),t.isProbablePrime(o))return l(null,t);t.dAddOffset(a[s++%8],0)}while(u<0||+new Date-p=0&&a.push(o):a.push(o))}return a}function h(e){if(e.composed||e.constructed){for(var t=n.util.createBuffer(),r=0;r0&&(c=a.create(a.Class.UNIVERSAL,a.Type.SET,!0,p));var f=[],h=[];null!==t&&(h=n.util.isArray(t)?t:[t]);for(var d=[],y=0;y0){var C=a.create(a.Class.UNIVERSAL,a.Type.SEQUENCE,!0,d),E=a.create(a.Class.UNIVERSAL,a.Type.SEQUENCE,!0,[a.create(a.Class.UNIVERSAL,a.Type.OID,!1,a.oidToDer(i.oids.data).getBytes()),a.create(a.Class.CONTEXT_SPECIFIC,0,!0,[a.create(a.Class.UNIVERSAL,a.Type.OCTETSTRING,!1,a.toDer(C).getBytes())])]);f.push(E)}var S=null;if(null!==e){var T=i.wrapRsaPrivateKey(i.privateKeyToAsn1(e));S=null===r?a.create(a.Class.UNIVERSAL,a.Type.SEQUENCE,!0,[a.create(a.Class.UNIVERSAL,a.Type.OID,!1,a.oidToDer(i.oids.keyBag).getBytes()),a.create(a.Class.CONTEXT_SPECIFIC,0,!0,[T]),c]):a.create(a.Class.UNIVERSAL,a.Type.SEQUENCE,!0,[a.create(a.Class.UNIVERSAL,a.Type.OID,!1,a.oidToDer(i.oids.pkcs8ShroudedKeyBag).getBytes()),a.create(a.Class.CONTEXT_SPECIFIC,0,!0,[i.encryptPrivateKeyInfo(T,r,o)]),c]);var b=a.create(a.Class.UNIVERSAL,a.Type.SEQUENCE,!0,[S]),I=a.create(a.Class.UNIVERSAL,a.Type.SEQUENCE,!0,[a.create(a.Class.UNIVERSAL,a.Type.OID,!1,a.oidToDer(i.oids.data).getBytes()),a.create(a.Class.CONTEXT_SPECIFIC,0,!0,[a.create(a.Class.UNIVERSAL,a.Type.OCTETSTRING,!1,a.toDer(b).getBytes())])]);f.push(I)}var A,B=a.create(a.Class.UNIVERSAL,a.Type.SEQUENCE,!0,f);if(o.useMac){var k=n.md.sha1.create(),N=new n.util.ByteBuffer(n.random.getBytes(o.saltSize)),w=o.count,R=(e=s.generateKey(r,N,3,w,20),n.hmac.create());R.start(k,e),R.update(a.toDer(B).getBytes());var L=R.getMac();A=a.create(a.Class.UNIVERSAL,a.Type.SEQUENCE,!0,[a.create(a.Class.UNIVERSAL,a.Type.SEQUENCE,!0,[a.create(a.Class.UNIVERSAL,a.Type.SEQUENCE,!0,[a.create(a.Class.UNIVERSAL,a.Type.OID,!1,a.oidToDer(i.oids.sha1).getBytes()),a.create(a.Class.UNIVERSAL,a.Type.NULL,!1,"")]),a.create(a.Class.UNIVERSAL,a.Type.OCTETSTRING,!1,L.getBytes())]),a.create(a.Class.UNIVERSAL,a.Type.OCTETSTRING,!1,N.getBytes()),a.create(a.Class.UNIVERSAL,a.Type.INTEGER,!1,a.integerToDer(w).getBytes())])}return a.create(a.Class.UNIVERSAL,a.Type.SEQUENCE,!0,[a.create(a.Class.UNIVERSAL,a.Type.INTEGER,!1,a.integerToDer(3).getBytes()),a.create(a.Class.UNIVERSAL,a.Type.SEQUENCE,!0,[a.create(a.Class.UNIVERSAL,a.Type.OID,!1,a.oidToDer(i.oids.data).getBytes()),a.create(a.Class.CONTEXT_SPECIFIC,0,!0,[a.create(a.Class.UNIVERSAL,a.Type.OCTETSTRING,!1,a.toDer(B).getBytes())])]),A])},s.generateKey=n.pbe.generatePkcs12Key},function(e,t,r){var n=r(0);r(3),r(1);var a=n.asn1,i=e.exports=n.pkcs7asn1=n.pkcs7asn1||{};n.pkcs7=n.pkcs7||{},n.pkcs7.asn1=i;var s={name:"ContentInfo",tagClass:a.Class.UNIVERSAL,type:a.Type.SEQUENCE,constructed:!0,value:[{name:"ContentInfo.ContentType",tagClass:a.Class.UNIVERSAL,type:a.Type.OID,constructed:!1,capture:"contentType"},{name:"ContentInfo.content",tagClass:a.Class.CONTEXT_SPECIFIC,type:0,constructed:!0,optional:!0,captureAsn1:"content"}]};i.contentInfoValidator=s;var o={name:"EncryptedContentInfo",tagClass:a.Class.UNIVERSAL,type:a.Type.SEQUENCE,constructed:!0,value:[{name:"EncryptedContentInfo.contentType",tagClass:a.Class.UNIVERSAL,type:a.Type.OID,constructed:!1,capture:"contentType"},{name:"EncryptedContentInfo.contentEncryptionAlgorithm",tagClass:a.Class.UNIVERSAL,type:a.Type.SEQUENCE,constructed:!0,value:[{name:"EncryptedContentInfo.contentEncryptionAlgorithm.algorithm",tagClass:a.Class.UNIVERSAL,type:a.Type.OID,constructed:!1,capture:"encAlgorithm"},{name:"EncryptedContentInfo.contentEncryptionAlgorithm.parameter",tagClass:a.Class.UNIVERSAL,captureAsn1:"encParameter"}]},{name:"EncryptedContentInfo.encryptedContent",tagClass:a.Class.CONTEXT_SPECIFIC,type:0,capture:"encryptedContent",captureAsn1:"encryptedContentAsn1"}]};i.envelopedDataValidator={name:"EnvelopedData",tagClass:a.Class.UNIVERSAL,type:a.Type.SEQUENCE,constructed:!0,value:[{name:"EnvelopedData.Version",tagClass:a.Class.UNIVERSAL,type:a.Type.INTEGER,constructed:!1,capture:"version"},{name:"EnvelopedData.RecipientInfos",tagClass:a.Class.UNIVERSAL,type:a.Type.SET,constructed:!0,captureAsn1:"recipientInfos"}].concat(o)},i.encryptedDataValidator={name:"EncryptedData",tagClass:a.Class.UNIVERSAL,type:a.Type.SEQUENCE,constructed:!0,value:[{name:"EncryptedData.Version",tagClass:a.Class.UNIVERSAL,type:a.Type.INTEGER,constructed:!1,capture:"version"}].concat(o)};var c={name:"SignerInfo",tagClass:a.Class.UNIVERSAL,type:a.Type.SEQUENCE,constructed:!0,value:[{name:"SignerInfo.version",tagClass:a.Class.UNIVERSAL,type:a.Type.INTEGER,constructed:!1},{name:"SignerInfo.issuerAndSerialNumber",tagClass:a.Class.UNIVERSAL,type:a.Type.SEQUENCE,constructed:!0,value:[{name:"SignerInfo.issuerAndSerialNumber.issuer",tagClass:a.Class.UNIVERSAL,type:a.Type.SEQUENCE,constructed:!0,captureAsn1:"issuer"},{name:"SignerInfo.issuerAndSerialNumber.serialNumber",tagClass:a.Class.UNIVERSAL,type:a.Type.INTEGER,constructed:!1,capture:"serial"}]},{name:"SignerInfo.digestAlgorithm",tagClass:a.Class.UNIVERSAL,type:a.Type.SEQUENCE,constructed:!0,value:[{name:"SignerInfo.digestAlgorithm.algorithm",tagClass:a.Class.UNIVERSAL,type:a.Type.OID,constructed:!1,capture:"digestAlgorithm"},{name:"SignerInfo.digestAlgorithm.parameter",tagClass:a.Class.UNIVERSAL,constructed:!1,captureAsn1:"digestParameter",optional:!0}]},{name:"SignerInfo.authenticatedAttributes",tagClass:a.Class.CONTEXT_SPECIFIC,type:0,constructed:!0,optional:!0,capture:"authenticatedAttributes"},{name:"SignerInfo.digestEncryptionAlgorithm",tagClass:a.Class.UNIVERSAL,type:a.Type.SEQUENCE,constructed:!0,capture:"signatureAlgorithm"},{name:"SignerInfo.encryptedDigest",tagClass:a.Class.UNIVERSAL,type:a.Type.OCTETSTRING,constructed:!1,capture:"signature"},{name:"SignerInfo.unauthenticatedAttributes",tagClass:a.Class.CONTEXT_SPECIFIC,type:1,constructed:!0,optional:!0,capture:"unauthenticatedAttributes"}]};i.signedDataValidator={name:"SignedData",tagClass:a.Class.UNIVERSAL,type:a.Type.SEQUENCE,constructed:!0,value:[{name:"SignedData.Version",tagClass:a.Class.UNIVERSAL,type:a.Type.INTEGER,constructed:!1,capture:"version"},{name:"SignedData.DigestAlgorithms",tagClass:a.Class.UNIVERSAL,type:a.Type.SET,constructed:!0,captureAsn1:"digestAlgorithms"},s,{name:"SignedData.Certificates",tagClass:a.Class.CONTEXT_SPECIFIC,type:0,optional:!0,captureAsn1:"certificates"},{name:"SignedData.CertificateRevocationLists",tagClass:a.Class.CONTEXT_SPECIFIC,type:1,optional:!0,captureAsn1:"crls"},{name:"SignedData.SignerInfos",tagClass:a.Class.UNIVERSAL,type:a.Type.SET,capture:"signerInfos",optional:!0,value:[c]}]},i.recipientInfoValidator={name:"RecipientInfo",tagClass:a.Class.UNIVERSAL,type:a.Type.SEQUENCE,constructed:!0,value:[{name:"RecipientInfo.version",tagClass:a.Class.UNIVERSAL,type:a.Type.INTEGER,constructed:!1,capture:"version"},{name:"RecipientInfo.issuerAndSerial",tagClass:a.Class.UNIVERSAL,type:a.Type.SEQUENCE,constructed:!0,value:[{name:"RecipientInfo.issuerAndSerial.issuer",tagClass:a.Class.UNIVERSAL,type:a.Type.SEQUENCE,constructed:!0,captureAsn1:"issuer"},{name:"RecipientInfo.issuerAndSerial.serialNumber",tagClass:a.Class.UNIVERSAL,type:a.Type.INTEGER,constructed:!1,capture:"serial"}]},{name:"RecipientInfo.keyEncryptionAlgorithm",tagClass:a.Class.UNIVERSAL,type:a.Type.SEQUENCE,constructed:!0,value:[{name:"RecipientInfo.keyEncryptionAlgorithm.algorithm",tagClass:a.Class.UNIVERSAL,type:a.Type.OID,constructed:!1,capture:"encAlgorithm"},{name:"RecipientInfo.keyEncryptionAlgorithm.parameter",tagClass:a.Class.UNIVERSAL,constructed:!1,captureAsn1:"encParameter"}]},{name:"RecipientInfo.encryptedKey",tagClass:a.Class.UNIVERSAL,type:a.Type.OCTETSTRING,constructed:!1,capture:"encKey"}]}},function(e,t,r){var n=r(0);r(1),n.mgf=n.mgf||{},(e.exports=n.mgf.mgf1=n.mgf1=n.mgf1||{}).create=function(e){return{generate:function(t,r){for(var a=new n.util.ByteBuffer,i=Math.ceil(r/e.digestLength),s=0;s>>0,s>>>0];for(var o=h.fullMessageLength.length-1;o>=0;--o)h.fullMessageLength[o]+=s[1],s[1]=s[0]+(h.fullMessageLength[o]/4294967296>>>0),h.fullMessageLength[o]=h.fullMessageLength[o]>>>0,s[0]=s[1]/4294967296>>>0;return a.putBytes(e),l(r,i,a),(a.read>2048||0===a.length())&&a.compact(),h},h.digest=function(){var t=n.util.createBuffer();t.putBytes(a.bytes());var o,c=h.fullMessageLength[h.fullMessageLength.length-1]+h.messageLengthSize&h.blockLength-1;t.putBytes(s.substr(0,h.blockLength-c));for(var u=8*h.fullMessageLength[0],p=0;p>>0,t.putInt32(u>>>0),u=o>>>0;t.putInt32(u);var f=new Array(r.length);for(p=0;p=128;){for(R=0;R<16;++R)t[R][0]=r.getInt32()>>>0,t[R][1]=r.getInt32()>>>0;for(;R<80;++R)n=(((L=(U=t[R-2])[0])>>>19|(_=U[1])<<13)^(_>>>29|L<<3)^L>>>6)>>>0,a=((L<<13|_>>>19)^(_<<3|L>>>29)^(L<<26|_>>>6))>>>0,i=(((L=(P=t[R-15])[0])>>>1|(_=P[1])<<31)^(L>>>8|_<<24)^L>>>7)>>>0,s=((L<<31|_>>>1)^(L<<24|_>>>8)^(L<<25|_>>>7))>>>0,D=t[R-7],O=t[R-16],_=a+D[1]+s+O[1],t[R][0]=n+D[0]+i+O[0]+(_/4294967296>>>0)>>>0,t[R][1]=_>>>0;for(d=e[0][0],y=e[0][1],g=e[1][0],v=e[1][1],m=e[2][0],C=e[2][1],E=e[3][0],S=e[3][1],T=e[4][0],b=e[4][1],I=e[5][0],A=e[5][1],B=e[6][0],k=e[6][1],N=e[7][0],w=e[7][1],R=0;R<80;++R)l=((T>>>14|b<<18)^(T>>>18|b<<14)^(b>>>9|T<<23))>>>0,p=(B^T&(I^B))>>>0,o=((d>>>28|y<<4)^(y>>>2|d<<30)^(y>>>7|d<<25))>>>0,u=((d<<4|y>>>28)^(y<<30|d>>>2)^(y<<25|d>>>7))>>>0,f=(d&g|m&(d^g))>>>0,h=(y&v|C&(y^v))>>>0,_=w+(((T<<18|b>>>14)^(T<<14|b>>>18)^(b<<23|T>>>9))>>>0)+((k^b&(A^k))>>>0)+c[R][1]+t[R][1],n=N+l+p+c[R][0]+t[R][0]+(_/4294967296>>>0)>>>0,a=_>>>0,i=o+f+((_=u+h)/4294967296>>>0)>>>0,s=_>>>0,N=B,w=k,B=I,k=A,I=T,A=b,T=E+n+((_=S+a)/4294967296>>>0)>>>0,b=_>>>0,E=m,S=C,m=g,C=v,g=d,v=y,d=n+i+((_=a+s)/4294967296>>>0)>>>0,y=_>>>0;_=e[0][1]+y,e[0][0]=e[0][0]+d+(_/4294967296>>>0)>>>0,e[0][1]=_>>>0,_=e[1][1]+v,e[1][0]=e[1][0]+g+(_/4294967296>>>0)>>>0,e[1][1]=_>>>0,_=e[2][1]+C,e[2][0]=e[2][0]+m+(_/4294967296>>>0)>>>0,e[2][1]=_>>>0,_=e[3][1]+S,e[3][0]=e[3][0]+E+(_/4294967296>>>0)>>>0,e[3][1]=_>>>0,_=e[4][1]+b,e[4][0]=e[4][0]+T+(_/4294967296>>>0)>>>0,e[4][1]=_>>>0,_=e[5][1]+A,e[5][0]=e[5][0]+I+(_/4294967296>>>0)>>>0,e[5][1]=_>>>0,_=e[6][1]+k,e[6][0]=e[6][0]+B+(_/4294967296>>>0)>>>0,e[6][1]=_>>>0,_=e[7][1]+w,e[7][0]=e[7][0]+N+(_/4294967296>>>0)>>>0,e[7][1]=_>>>0,V-=128}}},function(e,t,r){var n=r(0);r(1),e.exports=n.log=n.log||{},n.log.levels=["none","error","warning","info","debug","verbose","max"];var a={},i=[],s=null;n.log.LEVEL_LOCKED=2,n.log.NO_LEVEL_CHECK=4,n.log.INTERPOLATE=8;for(var o=0;o0;)(r=e.requests.shift()).request.aborted&&(r=null);null===r?(null!==t.options&&(t.options=null),e.idle.push(t)):(t.retries=1,t.options=r,u(e,t))},p=function(e,t,r){t.options=null,t.connected=function(r){if(null===t.options)l(e,t);else{var n=t.options.request;if(n.connectTime=+new Date-n.connectTime,r.socket=t,t.options.connected(r),n.aborted)t.close();else{var a=n.toString();n.body&&(a+=n.body),n.time=+new Date,t.send(a),n.time=+new Date-n.time,t.options.response.time=+new Date,t.sending=!0}}},t.closed=function(r){if(t.sending)t.sending=!1,t.retries>0?(--t.retries,u(e,t)):t.error({id:t.id,type:"ioError",message:"Connection closed during send. Broken pipe.",bytesAvailable:0});else{var n=t.options.response;n.readBodyUntilClose&&(n.time=+new Date-n.time,n.bodyReceived=!0,t.options.bodyReady({request:t.options.request,response:n,socket:t})),t.options.closed(r),l(e,t)}},t.data=function(r){if(t.sending=!1,t.options.request.aborted)t.close();else{var n=t.options.response,a=t.receive(r.bytesAvailable);if(null!==a)if(t.buffer.putBytes(a),n.headerReceived||(n.readHeader(t.buffer),n.headerReceived&&t.options.headerReady({request:t.options.request,response:n,socket:t})),n.headerReceived&&!n.bodyReceived&&n.readBody(t.buffer),n.bodyReceived)t.options.bodyReady({request:t.options.request,response:n,socket:t}),-1!=(n.getField("Connection")||"").indexOf("close")||"HTTP/1.0"===n.version&&null===n.getField("Keep-Alive")?t.close():l(e,t)}},t.error=function(e){t.options.error({type:e.type,message:e.message,request:t.options.request,response:t.options.response,socket:t}),t.close()},r?((t=n.tls.wrapSocket({sessionId:null,sessionCache:{},caStore:r.caStore,cipherSuites:r.cipherSuites,socket:t,virtualHost:r.virtualHost,verify:r.verify,getCertificate:r.getCertificate,getPrivateKey:r.getPrivateKey,getSignature:r.getSignature,deflate:r.deflate||null,inflate:r.inflate||null})).options=null,t.buffer=n.util.createBuffer(),e.sockets.push(t),r.prime?t.connect({host:e.url.host,port:e.url.port,policyPort:e.policyPort,policyUrl:e.policyUrl}):e.idle.push(t)):(t.buffer=n.util.createBuffer(),e.sockets.push(t),e.idle.push(t))},f=function(e){var t=!1;if(-1!==e.maxAge){var r=y(new Date);e.created+e.maxAge<=r&&(t=!0)}return t};a.createClient=function(e){var t=null;e.caCerts&&(t=n.pki.createCaStore(e.caCerts)),e.url=e.url||window.location.protocol+"//"+window.location.host;var r=a.parseUrl(e.url);if(!r){var i=new Error("Invalid url.");throw i.details={url:e.url},i}e.connections=e.connections||1;var l=e.socketPool,h={url:r,socketPool:l,policyPort:e.policyPort,policyUrl:e.policyUrl,requests:[],sockets:[],idle:[],secure:"https"===r.scheme,cookies:{},persistCookies:void 0===e.persistCookies||e.persistCookies};n.debug&&n.debug.get("forge.http","clients").push(h),o(h);var d=null;h.secure&&(d={caStore:t,cipherSuites:e.cipherSuites||null,virtualHost:e.virtualHost||r.host,verify:e.verify||function(e,t,r,n){if(0===r&&!0===t){var a=n[r].subject.getField("CN");null!==a&&h.url.host===a.value||(t={message:"Certificate common name does not match url host."})}return t},getCertificate:e.getCertificate||null,getPrivateKey:e.getPrivateKey||null,getSignature:e.getSignature||null,prime:e.primeTlsSockets||!1},null!==l.flashApi&&(d.deflate=function(e){return n.util.deflate(l.flashApi,e,!0)},d.inflate=function(e){return n.util.inflate(l.flashApi,e,!0)}));for(var g=0;g100?(t.body=n.util.deflate(t.flashApi,t.body),t.bodyDeflated=!0,t.setField("Content-Encoding","deflate"),t.setField("Content-Length",t.body.length)):null!==t.body&&t.setField("Content-Length",t.body.length);var e=t.method.toUpperCase()+" "+t.path+" "+t.version+"\r\n";for(var r in t.fields)for(var a=t.fields[r],i=0;i=3)){var o=new Error("Invalid http response header.");throw o.details={line:r},o}a.version=n[0],a.code=parseInt(n[1],10),a.message=n.slice(2).join(" ")}else 0===r.length?a.headerReceived=!0:s(r);return a.headerReceived};return a.readBody=function(e){var o=a.getField("Content-Length"),c=a.getField("Transfer-Encoding");if(null!==o&&(o=parseInt(o)),null!==o&&o>=0)a.body=a.body||"",a.body+=e.getBytes(o),a.bodyReceived=a.body.length===o;else if(null!==c){if(-1==c.indexOf("chunked")){var u=new Error("Unknown Transfer-Encoding.");throw u.details={transferEncoding:c},u}a.body=a.body||"",function(e){for(var n="";null!==n&&e.length()>0;)if(t>0){if(t+2>e.length())break;a.body+=e.getBytes(t),e.getBytes(2),t=0}else if(r)for(n=i(e);null!==n;)n.length>0?(s(n),n=i(e)):(a.bodyReceived=!0,n=null);else null!==(n=i(e))&&(t=parseInt(n.split(";",1)[0],16),r=0===t);a.bodyReceived}(e)}else null!==o&&o<0||null===o&&null!==a.getField("Content-Type")?(a.body=a.body||"",a.body+=e.getBytes(),a.readBodyUntilClose=!0):(a.body=null,a.bodyReceived=!0);return a.bodyReceived&&(a.time=+new Date-a.time),null!==a.flashApi&&a.bodyReceived&&null!==a.body&&"deflate"===a.getField("Content-Encoding")&&(a.body=n.util.inflate(a.flashApi,a.body)),a.bodyReceived},a.getCookies=function(){var e=[];if("Set-Cookie"in a.fields)for(var t=a.fields["Set-Cookie"],r=+new Date/1e3,n=/\s*([^=]*)=?([^;]*)(;|$)/g,i=0;i0;)o.push(u%i),u=u/i|0}for(a=0;0===e[a]&&a=0;--a)n+=t[o[a]]}else n=function(e,t){var r=0,n=t.length,a=t.charAt(0),i=[0];for(r=0;r0;)i.push(o%n),o=o/n|0}var c="";for(r=0;0===e.at(r)&&r=0;--r)c+=t[i[r]];return c}(e,t);if(r){var l=new RegExp(".{1,"+r+"}","g");n=n.match(l).join("\r\n")}return n},r.decode=function(e,t){if("string"!=typeof e)throw new TypeError('"input" must be a string.');if("string"!=typeof t)throw new TypeError('"alphabet" must be a string.');var r=n[t];if(!r){r=n[t]=[];for(var a=0;a>=8;for(;l>0;)o.push(255&l),l>>=8}for(var p=0;e[p]===s&&p=a.Versions.TLS_1_1.minor&&c.output.putBytes(r),c.update(e.fragment),c.finish(o)&&(e.fragment=c.output,e.length=e.fragment.length(),i=!0),i}function o(e,t,r){if(!r){var n=e-t.length()%e;t.fillWithByte(n-1,n)}return!0}function c(e,t,r){var n=!0;if(r){for(var a=t.length(),i=t.last(),s=a-1-i;s=o?(e.fragment=s.output.getBytes(l-o),u=s.output.getBytes(o)):e.fragment=s.output.getBytes(),e.fragment=n.util.createBuffer(e.fragment),e.length=e.fragment.length();var p=t.macFunction(t.macKey,t.sequenceNumber,e);return t.updateSequenceNumber(),i=function(e,t,r){var a=n.hmac.create();return a.start("SHA1",e),a.update(t),t=a.digest().getBytes(),a.start(null,null),a.update(r),r=a.digest().getBytes(),t===r}(t.macKey,u,p)&&i}a.CipherSuites.TLS_RSA_WITH_AES_128_CBC_SHA={id:[0,47],name:"TLS_RSA_WITH_AES_128_CBC_SHA",initSecurityParameters:function(e){e.bulk_cipher_algorithm=a.BulkCipherAlgorithm.aes,e.cipher_type=a.CipherType.block,e.enc_key_length=16,e.block_length=16,e.fixed_iv_length=16,e.record_iv_length=16,e.mac_algorithm=a.MACAlgorithm.hmac_sha1,e.mac_length=20,e.mac_key_length=20},initConnectionState:i},a.CipherSuites.TLS_RSA_WITH_AES_256_CBC_SHA={id:[0,53],name:"TLS_RSA_WITH_AES_256_CBC_SHA",initSecurityParameters:function(e){e.bulk_cipher_algorithm=a.BulkCipherAlgorithm.aes,e.cipher_type=a.CipherType.block,e.enc_key_length=32,e.block_length=16,e.fixed_iv_length=16,e.record_iv_length=16,e.mac_algorithm=a.MACAlgorithm.hmac_sha1,e.mac_length=20,e.mac_key_length=20},initConnectionState:i}},function(e,t,r){var n=r(0);r(31),e.exports=n.mgf=n.mgf||{},n.mgf.mgf1=n.mgf1},function(e,t,r){var n=r(0);r(13),r(2),r(32),r(1);var a=r(44),i=a.publicKeyValidator,s=a.privateKeyValidator;if(void 0===o)var o=n.jsbn.BigInteger;var c=n.util.ByteBuffer,u="undefined"==typeof Buffer?Uint8Array:Buffer;n.pki=n.pki||{},e.exports=n.pki.ed25519=n.ed25519=n.ed25519||{};var l=n.ed25519;function p(e){var t=e.message;if(t instanceof Uint8Array||t instanceof u)return t;var r=e.encoding;if(void 0===t){if(!e.md)throw new TypeError('"options.message" or "options.md" not specified.');t=e.md.digest().getBytes(),r="binary"}if("string"==typeof t&&!r)throw new TypeError('"options.encoding" must be "binary" or "utf8".');if("string"==typeof t){if("undefined"!=typeof Buffer)return Buffer.from(t,r);t=new c(t,r)}else if(!(t instanceof c))throw new TypeError('"options.message" must be a node.js Buffer, a Uint8Array, a forge ByteBuffer, or a string with "options.encoding" specifying its encoding.');for(var n=new u(t.length()),a=0;a=0;--r)x(n,n),1!==r&&K(n,n,t);for(r=0;r<16;++r)e[r]=n[r]}(r,r),K(r,r,a),K(r,r,i),K(r,r,i),K(e[0],r,i),x(n,e[0]),K(n,n,i),k(n,a)&&K(e[0],e[0],C);if(x(n,e[0]),K(n,n,i),k(n,a))return-1;w(e[0])===t[31]>>7&&V(e[0],f,e[0]);return K(e[3],e[0],e[1]),0}(o,n))return-1;for(a=0;a=0};var f=P(),h=P([1]),d=P([30883,4953,19914,30187,55467,16705,2637,112,59544,30585,16505,36039,65139,11119,27886,20995]),y=P([61785,9906,39828,60374,45398,33411,5274,224,53552,61171,33010,6542,64743,22239,55772,9222]),g=P([54554,36645,11616,51542,42930,38181,51040,26924,56412,64982,57905,49316,21502,52590,14035,8553]),v=P([26200,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214]),m=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]),C=P([41136,18958,6951,50414,58488,44335,6150,12099,55207,15867,153,11085,57099,20417,9344,11139]);function E(e,t){var r=n.md.sha512.create(),a=new c(e);r.update(a.getBytes(t),"binary");var i=r.digest().getBytes();if("undefined"!=typeof Buffer)return Buffer.from(i,"binary");for(var s=new u(l.constants.HASH_BYTE_LENGTH),o=0;o<64;++o)s[o]=i.charCodeAt(o);return s}function S(e,t){var r,n,a,i;for(n=63;n>=32;--n){for(r=0,a=n-32,i=n-12;a>8,t[a]-=256*r;t[a]+=r,t[n]=0}for(r=0,a=0;a<32;++a)t[a]+=r-(t[31]>>4)*m[a],r=t[a]>>8,t[a]&=255;for(a=0;a<32;++a)t[a]-=r*m[a];for(n=0;n<32;++n)t[n+1]+=t[n]>>8,e[n]=255&t[n]}function T(e){for(var t=new Float64Array(64),r=0;r<64;++r)t[r]=e[r],e[r]=0;S(e,t)}function b(e,t){var r=P(),n=P(),a=P(),i=P(),s=P(),o=P(),c=P(),u=P(),l=P();V(r,e[1],e[0]),V(l,t[1],t[0]),K(r,r,l),O(n,e[0],e[1]),O(l,t[0],t[1]),K(n,n,l),K(a,e[3],t[3]),K(a,a,y),K(i,e[2],t[2]),O(i,i,i),V(s,n,r),V(o,i,a),O(c,i,a),O(u,n,r),K(e[0],s,o),K(e[1],u,c),K(e[2],c,o),K(e[3],s,u)}function I(e,t,r){for(var n=0;n<4;++n)D(e[n],t[n],r)}function A(e,t){var r=P(),n=P(),a=P();!function(e,t){var r,n=P();for(r=0;r<16;++r)n[r]=t[r];for(r=253;r>=0;--r)x(n,n),2!==r&&4!==r&&K(n,n,t);for(r=0;r<16;++r)e[r]=n[r]}(a,t[2]),K(r,t[0],a),K(n,t[1],a),B(e,n),e[31]^=w(r)<<7}function B(e,t){var r,n,a,i=P(),s=P();for(r=0;r<16;++r)s[r]=t[r];for(U(s),U(s),U(s),n=0;n<2;++n){for(i[0]=s[0]-65517,r=1;r<15;++r)i[r]=s[r]-65535-(i[r-1]>>16&1),i[r-1]&=65535;i[15]=s[15]-32767-(i[14]>>16&1),a=i[15]>>16&1,i[14]&=65535,D(s,i,1-a)}for(r=0;r<16;r++)e[2*r]=255&s[r],e[2*r+1]=s[r]>>8}function k(e,t){var r=new u(32),n=new u(32);return B(r,e),B(n,t),N(r,0,n,0)}function N(e,t,r,n){return function(e,t,r,n,a){var i,s=0;for(i=0;i>>8)-1}(e,t,r,n,32)}function w(e){var t=new u(32);return B(t,e),1&t[0]}function R(e,t,r){var n,a;for(_(e[0],f),_(e[1],h),_(e[2],h),_(e[3],f),a=255;a>=0;--a)I(e,t,n=r[a/8|0]>>(7&a)&1),b(t,e),b(e,e),I(e,t,n)}function L(e,t){var r=[P(),P(),P(),P()];_(r[0],g),_(r[1],v),_(r[2],h),K(r[3],g,v),R(e,r,t)}function _(e,t){var r;for(r=0;r<16;r++)e[r]=0|t[r]}function U(e){var t,r,n=1;for(t=0;t<16;++t)r=e[t]+n+65535,n=Math.floor(r/65536),e[t]=r-65536*n;e[0]+=n-1+37*(n-1)}function D(e,t,r){for(var n,a=~(r-1),i=0;i<16;++i)n=a&(e[i]^t[i]),e[i]^=n,t[i]^=n}function P(e){var t,r=new Float64Array(16);if(e)for(t=0;t0&&(s=n.util.fillString(String.fromCharCode(0),c)+s),{encapsulation:t.encrypt(s,"NONE"),key:e.generate(s,i)}},decrypt:function(t,r,n){var a=t.decrypt(r,"NONE");return e.generate(a,n)}};return i},n.kem.kdf1=function(e,t){i(this,e,0,t||e.digestLength)},n.kem.kdf2=function(e,t){i(this,e,1,t||e.digestLength)}},function(e,t,r){e.exports=r(4),r(15),r(9),r(24),r(32)},function(e,t,r){var n=r(0);r(5),r(3),r(11),r(6),r(7),r(30),r(2),r(1),r(18);var a=n.asn1,i=e.exports=n.pkcs7=n.pkcs7||{};function s(e){var t={},r=[];if(!a.validate(e,i.asn1.recipientInfoValidator,t,r)){var s=new Error("Cannot read PKCS#7 RecipientInfo. ASN.1 object is not an PKCS#7 RecipientInfo.");throw s.errors=r,s}return{version:t.version.charCodeAt(0),issuer:n.pki.RDNAttributesAsArray(t.issuer),serialNumber:n.util.createBuffer(t.serial).toHex(),encryptedContent:{algorithm:a.derToOid(t.encAlgorithm),parameter:t.encParameter.value,content:t.encKey}}}function o(e){for(var t,r=[],i=0;i0){for(var r=a.create(a.Class.CONTEXT_SPECIFIC,1,!0,[]),i=0;i=r&&s0&&s.value[0].value.push(a.create(a.Class.CONTEXT_SPECIFIC,0,!0,t)),i.length>0&&s.value[0].value.push(a.create(a.Class.CONTEXT_SPECIFIC,1,!0,i)),s.value[0].value.push(a.create(a.Class.UNIVERSAL,a.Type.SET,!0,e.signerInfos)),a.create(a.Class.UNIVERSAL,a.Type.SEQUENCE,!0,[a.create(a.Class.UNIVERSAL,a.Type.OID,!1,a.oidToDer(e.type).getBytes()),s])},addSigner:function(t){var r=t.issuer,a=t.serialNumber;if(t.certificate){var i=t.certificate;"string"==typeof i&&(i=n.pki.certificateFromPem(i)),r=i.issuer.attributes,a=i.serialNumber}var s=t.key;if(!s)throw new Error("Could not add PKCS#7 signer; no private key specified.");"string"==typeof s&&(s=n.pki.privateKeyFromPem(s));var o=t.digestAlgorithm||n.pki.oids.sha1;switch(o){case n.pki.oids.sha1:case n.pki.oids.sha256:case n.pki.oids.sha384:case n.pki.oids.sha512:case n.pki.oids.md5:break;default:throw new Error("Could not add PKCS#7 signer; unknown message digest algorithm: "+o)}var c=t.authenticatedAttributes||[];if(c.length>0){for(var u=!1,l=!1,p=0;p="8"&&(r="00"+r);var a=n.util.hexToBytes(r);e.putInt32(a.length),e.putBytes(a)}function s(e,t){e.putInt32(t.length),e.putString(t)}function o(){for(var e=n.md.sha1.create(),t=arguments.length,r=0;r0&&(this.state=g[this.state].block)},v.prototype.unblock=function(e){return e=void 0===e?1:e,this.blocks-=e,0===this.blocks&&this.state!==f&&(this.state=u,m(this,0)),this.blocks},v.prototype.sleep=function(e){e=void 0===e?0:e,this.state=g[this.state].sleep;var t=this;this.timeoutId=setTimeout((function(){t.timeoutId=null,t.state=u,m(t,0)}),e)},v.prototype.wait=function(e){e.wait(this)},v.prototype.wakeup=function(){this.state===p&&(cancelTimeout(this.timeoutId),this.timeoutId=null,this.state=u,m(this,0))},v.prototype.cancel=function(){this.state=g[this.state].cancel,this.permitsNeeded=0,null!==this.timeoutId&&(cancelTimeout(this.timeoutId),this.timeoutId=null),this.subtasks=[]},v.prototype.fail=function(e){if(this.error=!0,C(this,!0),e)e.error=this.error,e.swapTime=this.swapTime,e.userData=this.userData,m(e,0);else{if(null!==this.parent){for(var t=this.parent;null!==t.parent;)t.error=this.error,t.swapTime=this.swapTime,t.userData=this.userData,t=t.parent;C(t,!0)}this.failureCallback&&this.failureCallback(this)}};var m=function(e,t){var r=t>30||+new Date-e.swapTime>20,n=function(t){if(t++,e.state===u)if(r&&(e.swapTime=+new Date),e.subtasks.length>0){var n=e.subtasks.shift();n.error=e.error,n.swapTime=e.swapTime,n.userData=e.userData,n.run(n),n.error||m(n,t)}else C(e),e.error||null!==e.parent&&(e.parent.error=e.error,e.parent.swapTime=e.swapTime,e.parent.userData=e.userData,m(e.parent,t))};r?setTimeout(n,0):n(t)},C=function(e,t){e.state=f,delete i[e.id],null===e.parent&&(e.type in o?0===o[e.type].length?n.log.error(a,"[%s][%s] task queue empty [%s]",e.id,e.name,e.type):o[e.type][0]!==e?n.log.error(a,"[%s][%s] task not first in queue [%s]",e.id,e.name,e.type):(o[e.type].shift(),0===o[e.type].length?delete o[e.type]:o[e.type][0].start()):n.log.error(a,"[%s][%s] task queue missing [%s]",e.id,e.name,e.type),t||(e.error&&e.failureCallback?e.failureCallback(e):!e.error&&e.successCallback&&e.successCallback(e)))};e.exports=n.task=n.task||{},n.task.start=function(e){var t=new v({run:e.run,name:e.name||"?"});t.type=e.type,t.successCallback=e.success||null,t.failureCallback=e.failure||null,t.type in o?o[e.type].push(t):(o[t.type]=[t],function(e){e.error=!1,e.state=g[e.state][y],setTimeout((function(){e.state===u&&(e.swapTime=+new Date,e.run(e),m(e,0))}),0)}(t))},n.task.cancel=function(e){e in o&&(o[e]=[o[e][0]])},n.task.createCondition=function(){var e={tasks:{},wait:function(t){t.id in e.tasks||(t.block(),e.tasks[t.id]=t)},notify:function(){var t=e.tasks;for(var r in e.tasks={},t)t[r].unblock()}};return e}},function(e,t,r){var n,a,i,s=r(0),o=e.exports=s.form=s.form||{};n=jQuery,a=/([^\[]*?)\[(.*?)\]/g,i=function(e,t,r,i){for(var s=[],o=0;o0&&r.push(t[1]),t.length>=2&&r.push(t[2]);return 0===r.length&&r.push(e),r}(t))})),t=s,n.each(t,(function(a,s){if(i&&0!==s.length&&s in i&&(s=i[s]),0===s.length&&(s=e.length),e[s])a==t.length-1?(n.isArray(e[s])||(e[s]=[e[s]]),e[s].push(r)):e=e[s];else if(a==t.length-1)e[s]=r;else{var o=t[a+1];if(0===o.length)e[s]=[];else{var c=o-0==o&&o.length>0;e[s]=c?[]:{}}e=e[s]}}))},o.serialize=function(e,t,r){var a={};return t=t||".",n.each(e.serializeArray(),(function(){i(a,this.name.split(t),this.value||"",r)})),a}},function(e,t,r){var n=r(0);r(10),n.tls.wrapSocket=function(e){var t=e.socket,r={id:t.id,connected:t.connected||function(e){},closed:t.closed||function(e){},data:t.data||function(e){},error:t.error||function(e){}},a=n.tls.createConnection({server:!1,sessionId:e.sessionId||null,caStore:e.caStore||[],sessionCache:e.sessionCache||null,cipherSuites:e.cipherSuites||null,virtualHost:e.virtualHost,verify:e.verify,getCertificate:e.getCertificate,getPrivateKey:e.getPrivateKey,getSignature:e.getSignature,deflate:e.deflate,inflate:e.inflate,connected:function(e){1===e.handshakes&&r.connected({id:t.id,type:"connect",bytesAvailable:e.data.length()})},tlsDataReady:function(e){return t.send(e.tlsData.getBytes())},dataReady:function(e){r.data({id:t.id,type:"socketData",bytesAvailable:e.data.length()})},closed:function(e){t.close()},error:function(e,n){r.error({id:t.id,type:"tlsError",message:n.message,bytesAvailable:0,error:n}),t.close()}});t.connected=function(t){a.handshake(e.sessionId)},t.closed=function(e){a.open&&a.handshaking&&r.error({id:t.id,type:"ioError",message:"Connection closed during handshake.",bytesAvailable:0}),a.close(),r.closed({id:t.id,type:"close",bytesAvailable:0})},t.error=function(e){r.error({id:t.id,type:e.type,message:e.message,bytesAvailable:0}),a.close()};var i=0;return t.data=function(e){if(a.open){if(e.bytesAvailable>=i){var r=Math.max(e.bytesAvailable,i),n=t.receive(r);null!==n&&(i=a.process(n))}}else t.receive(e.bytesAvailable)},r.destroy=function(){t.destroy()},r.setSessionCache=function(e){a.sessionCache=tls.createSessionCache(e)},r.connect=function(e){t.connect(e)},r.close=function(){a.close()},r.isConnected=function(){return a.isConnected&&t.isConnected()},r.send=function(e){return a.prepare(e)},r.receive=function(e){return a.data.getBytes(e)},r.bytesAvailable=function(){return a.data.length()},r}},function(e,t,r){var n=r(0);r(34),r(35);var a,i,s,o,c,u,l,p,f,h,d=e.exports=n.xhr=n.xhr||{};a=jQuery,i="forge.xhr",s=null,o=0,c=null,u=null,l={},p=10,f=n.net,h=n.http,d.init=function(e){n.log.debug(i,"initializing",e),o=e.policyPort||o,c=e.policyUrl||c,p=e.connections||p,s=f.createSocketPool({flashId:e.flashId,policyPort:o,policyUrl:c,msie:e.msie||!1}),u=h.createClient({url:e.url||window.location.protocol+"//"+window.location.host,socketPool:s,policyPort:o,policyUrl:c,connections:e.connections||p,caCerts:e.caCerts,cipherSuites:e.cipherSuites,persistCookies:e.persistCookies||!0,primeTlsSockets:e.primeTlsSockets||!1,verify:e.verify,getCertificate:e.getCertificate,getPrivateKey:e.getPrivateKey,getSignature:e.getSignature}),l[u.url.full]=u,n.log.debug(i,"ready")},d.cleanup=function(){for(var e in l)l[e].destroy();l={},u=null,s.destroy(),s=null},d.setCookie=function(e){if(e.maxAge=e.maxAge||-1,e.domain)for(var t in l){var r=l[t];h.withinCookieDomain(r.url,e)&&r.secure===e.secure&&r.setCookie(e)}else u.setCookie(e)},d.getCookie=function(e,t,r){var a=null;if(r)for(var i in l){var s=l[i];if(h.withinCookieDomain(s.url,r)){var o=s.getCookie(e,t);null!==o&&(null===a?a=o:n.util.isArray(a)?a.push(o):a=[a,o])}}else a=u.getCookie(e,t);return a},d.removeCookie=function(e,t,r){var n=!1;if(r)for(var a in l){var i=l[a];h.withinCookieDomain(i.url,r)&&i.removeCookie(e,t)&&(n=!0)}else n=u.removeCookie(e,t);return n},d.create=function(e){e=a.extend({logWarningOnError:!0,verbose:!1,logError:function(){},logWarning:function(){},logDebug:function(){},logVerbose:function(){},url:null},e||{});var t={client:null,request:null,response:null,asynchronous:!0,sendFlag:!1,errorFlag:!1},r={error:e.logError||n.log.error,warning:e.logWarning||n.log.warning,debug:e.logDebug||n.log.debug,verbose:e.logVerbose||n.log.verbose},f={onreadystatechange:null,readyState:0,responseText:"",responseXML:null,status:0,statusText:""};if(null===e.url)t.client=u;else{var d=h.parseUrl(e.url);d||(new Error("Invalid url.").details={url:e.url}),d.full in l?t.client=l[d.full]:(t.client=h.createClient({url:e.url,socketPool:s,policyPort:e.policyPort||o,policyUrl:e.policyUrl||c,connections:e.connections||p,caCerts:e.caCerts,cipherSuites:e.cipherSuites,persistCookies:e.persistCookies||!0,primeTlsSockets:e.primeTlsSockets||!1,verify:e.verify,getCertificate:e.getCertificate,getPrivateKey:e.getPrivateKey,getSignature:e.getSignature}),l[d.full]=t.client)}return f.open=function(e,r,n,a,i){switch(e){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"PATCH":case"POST":case"PUT":break;case"CONNECT":case"TRACE":case"TRACK":throw new Error("CONNECT, TRACE and TRACK methods are disallowed");default:throw new Error("Invalid method: "+e)}t.sendFlag=!1,f.responseText="",f.responseXML=null,f.status=0,f.statusText="",t.request=h.createRequest({method:e,path:r}),f.readyState=1,f.onreadystatechange&&f.onreadystatechange()},f.setRequestHeader=function(e,r){if(1!=f.readyState||t.sendFlag)throw new Error("XHR not open or sending");t.request.setField(e,r)},f.send=function(e){if(1!=f.readyState||t.sendFlag)throw new Error("XHR not open or sending");if(e&&"GET"!==t.request.method&&"HEAD"!==t.request.method)if("undefined"!=typeof XMLSerializer)if(e instanceof Document){var n=new XMLSerializer;t.request.body=n.serializeToString(e)}else t.request.body=e;else void 0!==e.xml?t.request.body=e.xml:t.request.body=e;t.errorFlag=!1,t.sendFlag=!0,f.onreadystatechange&&f.onreadystatechange();var a={};a.request=t.request,a.headerReady=function(e){f.cookies=t.client.cookies,f.readyState=2,f.status=e.response.code,f.statusText=e.response.message,t.response=e.response,f.onreadystatechange&&f.onreadystatechange(),t.response.aborted||(f.readyState=3,f.onreadystatechange&&f.onreadystatechange())},a.bodyReady=function(e){f.readyState=4;var n=e.response.getField("Content-Type");if(n&&(0===n.indexOf("text/xml")||0===n.indexOf("application/xml")||-1!==n.indexOf("+xml")))try{var s=new ActiveXObject("MicrosoftXMLDOM");s.async=!1,s.loadXML(e.response.body),f.responseXML=s}catch(e){var o=new DOMParser;f.responseXML=o.parseFromString(e.body,"text/xml")}var c=0;null!==e.response.body&&(f.responseText=e.response.body,c=e.response.body.length);var u=t.request,l=u.method+" "+u.path+" "+f.status+" "+f.statusText+" "+c+"B "+(e.request.connectTime+e.request.time+e.response.time)+"ms";a.verbose?(f.status>=400&&a.logWarningOnError?r.warning:r.verbose)(i,l,e,e.response.body?"\n"+e.response.body:"\nNo content"):(f.status>=400&&a.logWarningOnError?r.warning:r.debug)(i,l),f.onreadystatechange&&f.onreadystatechange()},a.error=function(e){var n=t.request;r.error(i,n.method+" "+n.path,e),f.responseText="",f.responseXML=null,t.errorFlag=!0,f.status=0,f.statusText="",f.readyState=4,f.onreadystatechange&&f.onreadystatechange()},t.client.send(a)},f.abort=function(){t.request.abort(),f.responseText="",f.responseXML=null,t.errorFlag=!0,f.status=0,f.statusText="",t.request=null,t.response=null,4===f.readyState||0===f.readyState||1===f.readyState&&!t.sendFlag||(f.readyState=4,t.sendFlag=!1,f.onreadystatechange&&f.onreadystatechange()),f.readyState=0},f.getAllResponseHeaders=function(){var e="";if(null!==t.response){var r=t.response.fields;a.each(r,(function(t,r){a.each(r,(function(r,n){e+=t+": "+n+"\r\n"}))}))}return e},f.getResponseHeader=function(e){var r=null;return null!==t.response&&e in t.response.fields&&(r=t.response.fields[e],n.util.isArray(r)&&(r=r.join())),r},f}}])})); -//# sourceMappingURL=forge.all.min.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/node-forge/dist/forge.all.min.js.map b/reverse_engineering/node_modules/node-forge/dist/forge.all.min.js.map deleted file mode 100644 index 225d220..0000000 --- a/reverse_engineering/node_modules/node-forge/dist/forge.all.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"forge.all.min.js","sources":["webpack://[name]/forge.all.min.js"],"mappings":"AAAA","sourceRoot":""} \ No newline at end of file diff --git a/reverse_engineering/node_modules/node-forge/dist/forge.min.js b/reverse_engineering/node_modules/node-forge/dist/forge.min.js deleted file mode 100644 index 997e6d7..0000000 --- a/reverse_engineering/node_modules/node-forge/dist/forge.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.forge=t():e.forge=t()}(window,(function(){return function(e){var t={};function r(a){if(t[a])return t[a].exports;var n=t[a]={i:a,l:!1,exports:{}};return e[a].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=e,r.c=t,r.d=function(e,t,a){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(r.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)r.d(a,n,function(t){return e[t]}.bind(null,n));return a},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=34)}([function(e,t){e.exports={options:{usePureJavaScript:!1}}},function(e,t,r){(function(t){var a=r(0),n=r(37),i=e.exports=a.util=a.util||{};function s(e){if(8!==e&&16!==e&&24!==e&&32!==e)throw new Error("Only 8, 16, 24, or 32 bits supported: "+e)}function o(e){if(this.data="",this.read=0,"string"==typeof e)this.data=e;else if(i.isArrayBuffer(e)||i.isArrayBufferView(e))if("undefined"!=typeof Buffer&&e instanceof Buffer)this.data=e.toString("binary");else{var t=new Uint8Array(e);try{this.data=String.fromCharCode.apply(null,t)}catch(e){for(var r=0;r15?(r=Date.now(),s(e)):(t.push(e),1===t.length&&n.setAttribute("a",a=!a))}}i.nextTick=i.setImmediate}(),i.isNodejs="undefined"!=typeof process&&process.versions&&process.versions.node,i.globalScope=i.isNodejs?t:"undefined"==typeof self?window:self,i.isArray=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},i.isArrayBuffer=function(e){return"undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer},i.isArrayBufferView=function(e){return e&&i.isArrayBuffer(e.buffer)&&void 0!==e.byteLength},i.ByteBuffer=o,i.ByteStringBuffer=o;i.ByteStringBuffer.prototype._optimizeConstructedString=function(e){this._constructedStringLength+=e,this._constructedStringLength>4096&&(this.data.substr(0,1),this._constructedStringLength=0)},i.ByteStringBuffer.prototype.length=function(){return this.data.length-this.read},i.ByteStringBuffer.prototype.isEmpty=function(){return this.length()<=0},i.ByteStringBuffer.prototype.putByte=function(e){return this.putBytes(String.fromCharCode(e))},i.ByteStringBuffer.prototype.fillWithByte=function(e,t){e=String.fromCharCode(e);for(var r=this.data;t>0;)1&t&&(r+=e),(t>>>=1)>0&&(e+=e);return this.data=r,this._optimizeConstructedString(t),this},i.ByteStringBuffer.prototype.putBytes=function(e){return this.data+=e,this._optimizeConstructedString(e.length),this},i.ByteStringBuffer.prototype.putString=function(e){return this.putBytes(i.encodeUtf8(e))},i.ByteStringBuffer.prototype.putInt16=function(e){return this.putBytes(String.fromCharCode(e>>8&255)+String.fromCharCode(255&e))},i.ByteStringBuffer.prototype.putInt24=function(e){return this.putBytes(String.fromCharCode(e>>16&255)+String.fromCharCode(e>>8&255)+String.fromCharCode(255&e))},i.ByteStringBuffer.prototype.putInt32=function(e){return this.putBytes(String.fromCharCode(e>>24&255)+String.fromCharCode(e>>16&255)+String.fromCharCode(e>>8&255)+String.fromCharCode(255&e))},i.ByteStringBuffer.prototype.putInt16Le=function(e){return this.putBytes(String.fromCharCode(255&e)+String.fromCharCode(e>>8&255))},i.ByteStringBuffer.prototype.putInt24Le=function(e){return this.putBytes(String.fromCharCode(255&e)+String.fromCharCode(e>>8&255)+String.fromCharCode(e>>16&255))},i.ByteStringBuffer.prototype.putInt32Le=function(e){return this.putBytes(String.fromCharCode(255&e)+String.fromCharCode(e>>8&255)+String.fromCharCode(e>>16&255)+String.fromCharCode(e>>24&255))},i.ByteStringBuffer.prototype.putInt=function(e,t){s(t);var r="";do{t-=8,r+=String.fromCharCode(e>>t&255)}while(t>0);return this.putBytes(r)},i.ByteStringBuffer.prototype.putSignedInt=function(e,t){return e<0&&(e+=2<0);return t},i.ByteStringBuffer.prototype.getSignedInt=function(e){var t=this.getInt(e),r=2<=r&&(t-=r<<1),t},i.ByteStringBuffer.prototype.getBytes=function(e){var t;return e?(e=Math.min(this.length(),e),t=this.data.slice(this.read,this.read+e),this.read+=e):0===e?t="":(t=0===this.read?this.data:this.data.slice(this.read),this.clear()),t},i.ByteStringBuffer.prototype.bytes=function(e){return void 0===e?this.data.slice(this.read):this.data.slice(this.read,this.read+e)},i.ByteStringBuffer.prototype.at=function(e){return this.data.charCodeAt(this.read+e)},i.ByteStringBuffer.prototype.setAt=function(e,t){return this.data=this.data.substr(0,this.read+e)+String.fromCharCode(t)+this.data.substr(this.read+e+1),this},i.ByteStringBuffer.prototype.last=function(){return this.data.charCodeAt(this.data.length-1)},i.ByteStringBuffer.prototype.copy=function(){var e=i.createBuffer(this.data);return e.read=this.read,e},i.ByteStringBuffer.prototype.compact=function(){return this.read>0&&(this.data=this.data.slice(this.read),this.read=0),this},i.ByteStringBuffer.prototype.clear=function(){return this.data="",this.read=0,this},i.ByteStringBuffer.prototype.truncate=function(e){var t=Math.max(0,this.length()-e);return this.data=this.data.substr(this.read,t),this.read=0,this},i.ByteStringBuffer.prototype.toHex=function(){for(var e="",t=this.read;t=e)return this;t=Math.max(t||this.growSize,e);var r=new Uint8Array(this.data.buffer,this.data.byteOffset,this.data.byteLength),a=new Uint8Array(this.length()+t);return a.set(r),this.data=new DataView(a.buffer),this},i.DataBuffer.prototype.putByte=function(e){return this.accommodate(1),this.data.setUint8(this.write++,e),this},i.DataBuffer.prototype.fillWithByte=function(e,t){this.accommodate(t);for(var r=0;r>8&65535),this.data.setInt8(this.write,e>>16&255),this.write+=3,this},i.DataBuffer.prototype.putInt32=function(e){return this.accommodate(4),this.data.setInt32(this.write,e),this.write+=4,this},i.DataBuffer.prototype.putInt16Le=function(e){return this.accommodate(2),this.data.setInt16(this.write,e,!0),this.write+=2,this},i.DataBuffer.prototype.putInt24Le=function(e){return this.accommodate(3),this.data.setInt8(this.write,e>>16&255),this.data.setInt16(this.write,e>>8&65535,!0),this.write+=3,this},i.DataBuffer.prototype.putInt32Le=function(e){return this.accommodate(4),this.data.setInt32(this.write,e,!0),this.write+=4,this},i.DataBuffer.prototype.putInt=function(e,t){s(t),this.accommodate(t/8);do{t-=8,this.data.setInt8(this.write++,e>>t&255)}while(t>0);return this},i.DataBuffer.prototype.putSignedInt=function(e,t){return s(t),this.accommodate(t/8),e<0&&(e+=2<0);return t},i.DataBuffer.prototype.getSignedInt=function(e){var t=this.getInt(e),r=2<=r&&(t-=r<<1),t},i.DataBuffer.prototype.getBytes=function(e){var t;return e?(e=Math.min(this.length(),e),t=this.data.slice(this.read,this.read+e),this.read+=e):0===e?t="":(t=0===this.read?this.data:this.data.slice(this.read),this.clear()),t},i.DataBuffer.prototype.bytes=function(e){return void 0===e?this.data.slice(this.read):this.data.slice(this.read,this.read+e)},i.DataBuffer.prototype.at=function(e){return this.data.getUint8(this.read+e)},i.DataBuffer.prototype.setAt=function(e,t){return this.data.setUint8(e,t),this},i.DataBuffer.prototype.last=function(){return this.data.getUint8(this.write-1)},i.DataBuffer.prototype.copy=function(){return new i.DataBuffer(this)},i.DataBuffer.prototype.compact=function(){if(this.read>0){var e=new Uint8Array(this.data.buffer,this.read),t=new Uint8Array(e.byteLength);t.set(e),this.data=new DataView(t),this.write-=this.read,this.read=0}return this},i.DataBuffer.prototype.clear=function(){return this.data=new DataView(new ArrayBuffer(0)),this.read=this.write=0,this},i.DataBuffer.prototype.truncate=function(e){return this.write=Math.max(0,this.length()-e),this.read=Math.min(this.read,this.write),this},i.DataBuffer.prototype.toHex=function(){for(var e="",t=this.read;t0;)1&t&&(r+=e),(t>>>=1)>0&&(e+=e);return r},i.xorBytes=function(e,t,r){for(var a="",n="",i="",s=0,o=0;r>0;--r,++s)n=e.charCodeAt(s)^t.charCodeAt(s),o>=10&&(a+=i,i="",o=0),i+=String.fromCharCode(n),++o;return a+=i},i.hexToBytes=function(e){var t="",r=0;for(!0&e.length&&(r=1,t+=String.fromCharCode(parseInt(e[0],16)));r>24&255)+String.fromCharCode(e>>16&255)+String.fromCharCode(e>>8&255)+String.fromCharCode(255&e)};var c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",u=[62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,64,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],l="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";i.encode64=function(e,t){for(var r,a,n,i="",s="",o=0;o>2),i+=c.charAt((3&r)<<4|a>>4),isNaN(a)?i+="==":(i+=c.charAt((15&a)<<2|n>>6),i+=isNaN(n)?"=":c.charAt(63&n)),t&&i.length>t&&(s+=i.substr(0,t)+"\r\n",i=i.substr(t));return s+=i},i.decode64=function(e){e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");for(var t,r,a,n,i="",s=0;s>4),64!==a&&(i+=String.fromCharCode((15&r)<<4|a>>2),64!==n&&(i+=String.fromCharCode((3&a)<<6|n)));return i},i.encodeUtf8=function(e){return unescape(encodeURIComponent(e))},i.decodeUtf8=function(e){return decodeURIComponent(escape(e))},i.binary={raw:{},hex:{},base64:{},base58:{},baseN:{encode:n.encode,decode:n.decode}},i.binary.raw.encode=function(e){return String.fromCharCode.apply(null,e)},i.binary.raw.decode=function(e,t,r){var a=t;a||(a=new Uint8Array(e.length));for(var n=r=r||0,i=0;i>2),i+=c.charAt((3&r)<<4|a>>4),isNaN(a)?i+="==":(i+=c.charAt((15&a)<<2|n>>6),i+=isNaN(n)?"=":c.charAt(63&n)),t&&i.length>t&&(s+=i.substr(0,t)+"\r\n",i=i.substr(t));return s+=i},i.binary.base64.decode=function(e,t,r){var a,n,i,s,o=t;o||(o=new Uint8Array(3*Math.ceil(e.length/4))),e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");for(var c=0,l=r=r||0;c>4,64!==i&&(o[l++]=(15&n)<<4|i>>2,64!==s&&(o[l++]=(3&i)<<6|s));return t?l-r:o.subarray(0,l)},i.binary.base58.encode=function(e,t){return i.binary.baseN.encode(e,l,t)},i.binary.base58.decode=function(e,t){return i.binary.baseN.decode(e,l,t)},i.text={utf8:{},utf16:{}},i.text.utf8.encode=function(e,t,r){e=i.encodeUtf8(e);var a=t;a||(a=new Uint8Array(e.length));for(var n=r=r||0,s=0;s0?(n=r[a].substring(0,s),i=r[a].substring(s+1)):(n=r[a],i=null),n in t||(t[n]=[]),n in Object.prototype||null===i||t[n].push(unescape(i))}return t};return void 0===e?(null===v&&(v="undefined"!=typeof window&&window.location&&window.location.search?r(window.location.search.substring(1)):{}),t=v):t=r(e),t},i.parseFragment=function(e){var t=e,r="",a=e.indexOf("?");a>0&&(t=e.substring(0,a),r=e.substring(a+1));var n=t.split("/");return n.length>0&&""===n[0]&&n.shift(),{pathString:t,queryString:r,path:n,query:""===r?{}:i.getQueryVariables(r)}},i.makeRequest=function(e){var t=i.parseFragment(e),r={path:t.pathString,query:t.queryString,getPath:function(e){return void 0===e?t.path:t.path[e]},getQuery:function(e,r){var a;return void 0===e?a=t.query:(a=t.query[e])&&void 0!==r&&(a=a[r]),a},getQueryLast:function(e,t){var a=r.getQuery(e);return a?a[a.length-1]:t}};return r},i.makeLink=function(e,t,r){e=jQuery.isArray(e)?e.join("/"):e;var a=jQuery.param(t||{});return r=r||"",e+(a.length>0?"?"+a:"")+(r.length>0?"#"+r:"")},i.isEmpty=function(e){for(var t in e)if(e.hasOwnProperty(t))return!1;return!0},i.format=function(e){for(var t,r,a=/%./g,n=0,i=[],s=0;t=a.exec(e);){(r=e.substring(s,a.lastIndex-2)).length>0&&i.push(r),s=a.lastIndex;var o=t[0][1];switch(o){case"s":case"o":n");break;case"%":i.push("%");break;default:i.push("<%"+o+"?>")}}return i.push(e.substring(s)),i.join("")},i.formatNumber=function(e,t,r,a){var n=e,i=isNaN(t=Math.abs(t))?2:t,s=void 0===r?",":r,o=void 0===a?".":a,c=n<0?"-":"",u=parseInt(n=Math.abs(+n||0).toFixed(i),10)+"",l=u.length>3?u.length%3:0;return c+(l?u.substr(0,l)+o:"")+u.substr(l).replace(/(\d{3})(?=\d)/g,"$1"+o)+(i?s+Math.abs(n-u).toFixed(i).slice(2):"")},i.formatSize=function(e){return e=e>=1073741824?i.formatNumber(e/1073741824,2,".","")+" GiB":e>=1048576?i.formatNumber(e/1048576,2,".","")+" MiB":e>=1024?i.formatNumber(e/1024,0)+" KiB":i.formatNumber(e,0)+" bytes"},i.bytesFromIP=function(e){return-1!==e.indexOf(".")?i.bytesFromIPv4(e):-1!==e.indexOf(":")?i.bytesFromIPv6(e):null},i.bytesFromIPv4=function(e){if(4!==(e=e.split(".")).length)return null;for(var t=i.createBuffer(),r=0;rr[a].end-r[a].start&&(a=r.length-1)):r.push({start:c,end:c})}t.push(s)}if(r.length>0){var u=r[a];u.end-u.start>0&&(t.splice(u.start,u.end-u.start+1,""),0===u.start&&t.unshift(""),7===u.end&&t.push(""))}return t.join(":")},i.estimateCores=function(e,t){if("function"==typeof e&&(t=e,e={}),e=e||{},"cores"in i&&!e.update)return t(null,i.cores);if("undefined"!=typeof navigator&&"hardwareConcurrency"in navigator&&navigator.hardwareConcurrency>0)return i.cores=navigator.hardwareConcurrency,t(null,i.cores);if("undefined"==typeof Worker)return i.cores=1,t(null,i.cores);if("undefined"==typeof Blob)return i.cores=2,t(null,i.cores);var r=URL.createObjectURL(new Blob(["(",function(){self.addEventListener("message",(function(e){for(var t=Date.now(),r=t+4;Date.now()o.st&&n.stn.st&&o.stt){var a=new Error("Too few bytes to parse DER.");throw a.available=e.length(),a.remaining=t,a.requested=r,a}}n.Class={UNIVERSAL:0,APPLICATION:64,CONTEXT_SPECIFIC:128,PRIVATE:192},n.Type={NONE:0,BOOLEAN:1,INTEGER:2,BITSTRING:3,OCTETSTRING:4,NULL:5,OID:6,ODESC:7,EXTERNAL:8,REAL:9,ENUMERATED:10,EMBEDDED:11,UTF8:12,ROID:13,SEQUENCE:16,SET:17,PRINTABLESTRING:19,IA5STRING:22,UTCTIME:23,GENERALIZEDTIME:24,BMPSTRING:30},n.create=function(e,t,r,i,s){if(a.util.isArray(i)){for(var o=[],c=0;cr){if(s.strict){var d=new Error("Too few bytes to read ASN.1 value.");throw d.available=t.length(),d.remaining=r,d.requested=h,d}h=r}var y=32==(32&c);if(y)if(p=[],void 0===h)for(;;){if(i(t,r,2),t.bytes(2)===String.fromCharCode(0,0)){t.getBytes(2),r-=2;break}o=t.length(),p.push(e(t,r,a+1,s)),r-=o-t.length()}else for(;h>0;)o=t.length(),p.push(e(t,h,a+1,s)),r-=o-t.length(),h-=o-t.length();void 0===p&&u===n.Class.UNIVERSAL&&l===n.Type.BITSTRING&&(f=t.bytes(h));if(void 0===p&&s.decodeBitStrings&&u===n.Class.UNIVERSAL&&l===n.Type.BITSTRING&&h>1){var g=t.read,m=r,v=0;if(l===n.Type.BITSTRING&&(i(t,r,1),v=t.getByte(),r--),0===v)try{o=t.length();var C={verbose:s.verbose,strict:!0,decodeBitStrings:!0},E=e(t,r,a+1,C),S=o-t.length();r-=S,l==n.Type.BITSTRING&&S++;var T=E.tagClass;S!==h||T!==n.Class.UNIVERSAL&&T!==n.Class.CONTEXT_SPECIFIC||(p=[E])}catch(e){}void 0===p&&(t.read=g,r=m)}if(void 0===p){if(void 0===h){if(s.strict)throw new Error("Non-constructed ASN.1 object of indefinite length.");h=r}if(l===n.Type.BMPSTRING)for(p="";h>0;h-=2)i(t,r,2),p+=String.fromCharCode(t.getInt16()),r-=2;else p=t.getBytes(h)}var I=void 0===f?null:{bitStringContents:f};return n.create(u,l,y,p,I)}(e,e.length(),0,t)},n.toDer=function(e){var t=a.util.createBuffer(),r=e.tagClass|e.type,i=a.util.createBuffer(),s=!1;if("bitStringContents"in e&&(s=!0,e.original&&(s=n.equals(e,e.original))),s)i.putBytes(e.bitStringContents);else if(e.composed){e.constructed?r|=32:i.putByte(0);for(var o=0;o1&&(0===e.value.charCodeAt(0)&&0==(128&e.value.charCodeAt(1))||255===e.value.charCodeAt(0)&&128==(128&e.value.charCodeAt(1)))?i.putBytes(e.value.substr(1)):i.putBytes(e.value);if(t.putByte(r),i.length()<=127)t.putByte(127&i.length());else{var c=i.length(),u="";do{u+=String.fromCharCode(255&c),c>>>=8}while(c>0);t.putByte(128|u.length);for(o=u.length-1;o>=0;--o)t.putByte(u.charCodeAt(o))}return t.putBuffer(i),t},n.oidToDer=function(e){var t,r,n,i,s=e.split("."),o=a.util.createBuffer();o.putByte(40*parseInt(s[0],10)+parseInt(s[1],10));for(var c=2;c>>=7,t||(i|=128),r.push(i),t=!1}while(n>0);for(var u=r.length-1;u>=0;--u)o.putByte(r[u])}return o},n.derToOid=function(e){var t;"string"==typeof e&&(e=a.util.createBuffer(e));var r=e.getByte();t=Math.floor(r/40)+"."+r%40;for(var n=0;e.length()>0;)n<<=7,128&(r=e.getByte())?n+=127&r:(t+="."+(n+r),n=0);return t},n.utcTimeToDate=function(e){var t=new Date,r=parseInt(e.substr(0,2),10);r=r>=50?1900+r:2e3+r;var a=parseInt(e.substr(2,2),10)-1,n=parseInt(e.substr(4,2),10),i=parseInt(e.substr(6,2),10),s=parseInt(e.substr(8,2),10),o=0;if(e.length>11){var c=e.charAt(10),u=10;"+"!==c&&"-"!==c&&(o=parseInt(e.substr(10,2),10),u+=2)}if(t.setUTCFullYear(r,a,n),t.setUTCHours(i,s,o,0),u&&("+"===(c=e.charAt(u))||"-"===c)){var l=60*parseInt(e.substr(u+1,2),10)+parseInt(e.substr(u+4,2),10);l*=6e4,"+"===c?t.setTime(+t-l):t.setTime(+t+l)}return t},n.generalizedTimeToDate=function(e){var t=new Date,r=parseInt(e.substr(0,4),10),a=parseInt(e.substr(4,2),10)-1,n=parseInt(e.substr(6,2),10),i=parseInt(e.substr(8,2),10),s=parseInt(e.substr(10,2),10),o=parseInt(e.substr(12,2),10),c=0,u=0,l=!1;"Z"===e.charAt(e.length-1)&&(l=!0);var p=e.length-5,f=e.charAt(p);"+"!==f&&"-"!==f||(u=60*parseInt(e.substr(p+1,2),10)+parseInt(e.substr(p+4,2),10),u*=6e4,"+"===f&&(u*=-1),l=!0);return"."===e.charAt(14)&&(c=1e3*parseFloat(e.substr(14),10)),l?(t.setUTCFullYear(r,a,n),t.setUTCHours(i,s,o,c),t.setTime(+t+u)):(t.setFullYear(r,a,n),t.setHours(i,s,o,c)),t},n.dateToUtcTime=function(e){if("string"==typeof e)return e;var t="",r=[];r.push((""+e.getUTCFullYear()).substr(2)),r.push(""+(e.getUTCMonth()+1)),r.push(""+e.getUTCDate()),r.push(""+e.getUTCHours()),r.push(""+e.getUTCMinutes()),r.push(""+e.getUTCSeconds());for(var a=0;a=-128&&e<128)return t.putSignedInt(e,8);if(e>=-32768&&e<32768)return t.putSignedInt(e,16);if(e>=-8388608&&e<8388608)return t.putSignedInt(e,24);if(e>=-2147483648&&e<2147483648)return t.putSignedInt(e,32);var r=new Error("Integer too large; max is 32-bits.");throw r.integer=e,r},n.derToInteger=function(e){"string"==typeof e&&(e=a.util.createBuffer(e));var t=8*e.length();if(t>32)throw new Error("Integer too large; max is 32-bits.");return e.getSignedInt(t)},n.validate=function(e,t,r,i){var s=!1;if(e.tagClass!==t.tagClass&&void 0!==t.tagClass||e.type!==t.type&&void 0!==t.type)i&&(e.tagClass!==t.tagClass&&i.push("["+t.name+'] Expected tag class "'+t.tagClass+'", got "'+e.tagClass+'"'),e.type!==t.type&&i.push("["+t.name+'] Expected type "'+t.type+'", got "'+e.type+'"'));else if(e.constructed===t.constructed||void 0===t.constructed){if(s=!0,t.value&&a.util.isArray(t.value))for(var o=0,c=0;s&&c0&&(i+="\n");for(var o="",c=0;c1?i+="0x"+a.util.bytesToHex(e.value.slice(1)):i+="(none)",e.value.length>0){var f=e.value.charCodeAt(0);1==f?i+=" (1 unused bit shown)":f>1&&(i+=" ("+f+" unused bits shown)")}}else e.type===n.Type.OCTETSTRING?(s.test(e.value)||(i+="("+e.value+") "),i+="0x"+a.util.bytesToHex(e.value)):e.type===n.Type.UTF8?i+=a.util.decodeUtf8(e.value):e.type===n.Type.PRINTABLESTRING||e.type===n.Type.IA5String?i+=e.value:s.test(e.value)?i+="0x"+a.util.bytesToHex(e.value):0===e.value.length?i+="[null]":i+=e.value}return i}},function(e,t,r){var a=r(0);e.exports=a.md=a.md||{},a.md.algorithms=a.md.algorithms||{}},function(e,t,r){var a=r(0);function n(e,t){a.cipher.registerAlgorithm(e,(function(){return new a.aes.Algorithm(e,t)}))}r(13),r(19),r(1),e.exports=a.aes=a.aes||{},a.aes.startEncrypting=function(e,t,r,a){var n=d({key:e,output:r,decrypt:!1,mode:a});return n.start(t),n},a.aes.createEncryptionCipher=function(e,t){return d({key:e,output:null,decrypt:!1,mode:t})},a.aes.startDecrypting=function(e,t,r,a){var n=d({key:e,output:r,decrypt:!0,mode:a});return n.start(t),n},a.aes.createDecryptionCipher=function(e,t){return d({key:e,output:null,decrypt:!0,mode:t})},a.aes.Algorithm=function(e,t){l||p();var r=this;r.name=e,r.mode=new t({blockSize:16,cipher:{encrypt:function(e,t){return h(r._w,e,t,!1)},decrypt:function(e,t){return h(r._w,e,t,!0)}}}),r._init=!1},a.aes.Algorithm.prototype.initialize=function(e){if(!this._init){var t,r=e.key;if("string"!=typeof r||16!==r.length&&24!==r.length&&32!==r.length){if(a.util.isArray(r)&&(16===r.length||24===r.length||32===r.length)){t=r,r=a.util.createBuffer();for(var n=0;n>>=2;for(n=0;n>8^255&p^99,i[y]=p,s[p]=y,h=(f=e[p])<<24^p<<16^p<<8^p^f,d=((r=e[y])^(a=e[r])^(n=e[a]))<<24^(y^n)<<16^(y^a^n)<<8^y^r^n;for(var m=0;m<4;++m)c[m][y]=h,u[m][p]=d,h=h<<24|h>>>8,d=d<<24|d>>>8;0===y?y=g=1:(y=r^e[e[e[r^n]]],g^=e[e[g]])}}function f(e,t){for(var r,a=e.slice(0),n=1,s=a.length,c=4*(s+6+1),l=s;l>>16&255]<<24^i[r>>>8&255]<<16^i[255&r]<<8^i[r>>>24]^o[n]<<24,n++):s>6&&l%s==4&&(r=i[r>>>24]<<24^i[r>>>16&255]<<16^i[r>>>8&255]<<8^i[255&r]),a[l]=a[l-s]^r;if(t){for(var p,f=u[0],h=u[1],d=u[2],y=u[3],g=a.slice(0),m=(l=0,(c=a.length)-4);l>>24]]^h[i[p>>>16&255]]^d[i[p>>>8&255]]^y[i[255&p]];a=g}return a}function h(e,t,r,a){var n,o,l,p,f,h,d,y,g,m,v,C,E=e.length/4-1;a?(n=u[0],o=u[1],l=u[2],p=u[3],f=s):(n=c[0],o=c[1],l=c[2],p=c[3],f=i),h=t[0]^e[0],d=t[a?3:1]^e[1],y=t[2]^e[2],g=t[a?1:3]^e[3];for(var S=3,T=1;T>>24]^o[d>>>16&255]^l[y>>>8&255]^p[255&g]^e[++S],v=n[d>>>24]^o[y>>>16&255]^l[g>>>8&255]^p[255&h]^e[++S],C=n[y>>>24]^o[g>>>16&255]^l[h>>>8&255]^p[255&d]^e[++S],g=n[g>>>24]^o[h>>>16&255]^l[d>>>8&255]^p[255&y]^e[++S],h=m,d=v,y=C;r[0]=f[h>>>24]<<24^f[d>>>16&255]<<16^f[y>>>8&255]<<8^f[255&g]^e[++S],r[a?3:1]=f[d>>>24]<<24^f[y>>>16&255]<<16^f[g>>>8&255]<<8^f[255&h]^e[++S],r[2]=f[y>>>24]<<24^f[g>>>16&255]<<16^f[h>>>8&255]<<8^f[255&d]^e[++S],r[a?1:3]=f[g>>>24]<<24^f[h>>>16&255]<<16^f[d>>>8&255]<<8^f[255&y]^e[++S]}function d(e){var t,r="AES-"+((e=e||{}).mode||"CBC").toUpperCase(),n=(t=e.decrypt?a.cipher.createDecipher(r,e.key):a.cipher.createCipher(r,e.key)).start;return t.start=function(e,r){var i=null;r instanceof a.util.ByteBuffer&&(i=r,r={}),(r=r||{}).output=i,r.iv=e,n.call(t,r)},t}},function(e,t,r){var a=r(0);a.pki=a.pki||{};var n=e.exports=a.pki.oids=a.oids=a.oids||{};function i(e,t){n[e]=t,n[t]=e}function s(e,t){n[e]=t}i("1.2.840.113549.1.1.1","rsaEncryption"),i("1.2.840.113549.1.1.4","md5WithRSAEncryption"),i("1.2.840.113549.1.1.5","sha1WithRSAEncryption"),i("1.2.840.113549.1.1.7","RSAES-OAEP"),i("1.2.840.113549.1.1.8","mgf1"),i("1.2.840.113549.1.1.9","pSpecified"),i("1.2.840.113549.1.1.10","RSASSA-PSS"),i("1.2.840.113549.1.1.11","sha256WithRSAEncryption"),i("1.2.840.113549.1.1.12","sha384WithRSAEncryption"),i("1.2.840.113549.1.1.13","sha512WithRSAEncryption"),i("1.3.101.112","EdDSA25519"),i("1.2.840.10040.4.3","dsa-with-sha1"),i("1.3.14.3.2.7","desCBC"),i("1.3.14.3.2.26","sha1"),i("2.16.840.1.101.3.4.2.1","sha256"),i("2.16.840.1.101.3.4.2.2","sha384"),i("2.16.840.1.101.3.4.2.3","sha512"),i("1.2.840.113549.2.5","md5"),i("1.2.840.113549.1.7.1","data"),i("1.2.840.113549.1.7.2","signedData"),i("1.2.840.113549.1.7.3","envelopedData"),i("1.2.840.113549.1.7.4","signedAndEnvelopedData"),i("1.2.840.113549.1.7.5","digestedData"),i("1.2.840.113549.1.7.6","encryptedData"),i("1.2.840.113549.1.9.1","emailAddress"),i("1.2.840.113549.1.9.2","unstructuredName"),i("1.2.840.113549.1.9.3","contentType"),i("1.2.840.113549.1.9.4","messageDigest"),i("1.2.840.113549.1.9.5","signingTime"),i("1.2.840.113549.1.9.6","counterSignature"),i("1.2.840.113549.1.9.7","challengePassword"),i("1.2.840.113549.1.9.8","unstructuredAddress"),i("1.2.840.113549.1.9.14","extensionRequest"),i("1.2.840.113549.1.9.20","friendlyName"),i("1.2.840.113549.1.9.21","localKeyId"),i("1.2.840.113549.1.9.22.1","x509Certificate"),i("1.2.840.113549.1.12.10.1.1","keyBag"),i("1.2.840.113549.1.12.10.1.2","pkcs8ShroudedKeyBag"),i("1.2.840.113549.1.12.10.1.3","certBag"),i("1.2.840.113549.1.12.10.1.4","crlBag"),i("1.2.840.113549.1.12.10.1.5","secretBag"),i("1.2.840.113549.1.12.10.1.6","safeContentsBag"),i("1.2.840.113549.1.5.13","pkcs5PBES2"),i("1.2.840.113549.1.5.12","pkcs5PBKDF2"),i("1.2.840.113549.1.12.1.1","pbeWithSHAAnd128BitRC4"),i("1.2.840.113549.1.12.1.2","pbeWithSHAAnd40BitRC4"),i("1.2.840.113549.1.12.1.3","pbeWithSHAAnd3-KeyTripleDES-CBC"),i("1.2.840.113549.1.12.1.4","pbeWithSHAAnd2-KeyTripleDES-CBC"),i("1.2.840.113549.1.12.1.5","pbeWithSHAAnd128BitRC2-CBC"),i("1.2.840.113549.1.12.1.6","pbewithSHAAnd40BitRC2-CBC"),i("1.2.840.113549.2.7","hmacWithSHA1"),i("1.2.840.113549.2.8","hmacWithSHA224"),i("1.2.840.113549.2.9","hmacWithSHA256"),i("1.2.840.113549.2.10","hmacWithSHA384"),i("1.2.840.113549.2.11","hmacWithSHA512"),i("1.2.840.113549.3.7","des-EDE3-CBC"),i("2.16.840.1.101.3.4.1.2","aes128-CBC"),i("2.16.840.1.101.3.4.1.22","aes192-CBC"),i("2.16.840.1.101.3.4.1.42","aes256-CBC"),i("2.5.4.3","commonName"),i("2.5.4.5","serialName"),i("2.5.4.6","countryName"),i("2.5.4.7","localityName"),i("2.5.4.8","stateOrProvinceName"),i("2.5.4.9","streetAddress"),i("2.5.4.10","organizationName"),i("2.5.4.11","organizationalUnitName"),i("2.5.4.13","description"),i("2.5.4.15","businessCategory"),i("2.5.4.17","postalCode"),i("1.3.6.1.4.1.311.60.2.1.2","jurisdictionOfIncorporationStateOrProvinceName"),i("1.3.6.1.4.1.311.60.2.1.3","jurisdictionOfIncorporationCountryName"),i("2.16.840.1.113730.1.1","nsCertType"),i("2.16.840.1.113730.1.13","nsComment"),s("2.5.29.1","authorityKeyIdentifier"),s("2.5.29.2","keyAttributes"),s("2.5.29.3","certificatePolicies"),s("2.5.29.4","keyUsageRestriction"),s("2.5.29.5","policyMapping"),s("2.5.29.6","subtreesConstraint"),s("2.5.29.7","subjectAltName"),s("2.5.29.8","issuerAltName"),s("2.5.29.9","subjectDirectoryAttributes"),s("2.5.29.10","basicConstraints"),s("2.5.29.11","nameConstraints"),s("2.5.29.12","policyConstraints"),s("2.5.29.13","basicConstraints"),i("2.5.29.14","subjectKeyIdentifier"),i("2.5.29.15","keyUsage"),s("2.5.29.16","privateKeyUsagePeriod"),i("2.5.29.17","subjectAltName"),i("2.5.29.18","issuerAltName"),i("2.5.29.19","basicConstraints"),s("2.5.29.20","cRLNumber"),s("2.5.29.21","cRLReason"),s("2.5.29.22","expirationDate"),s("2.5.29.23","instructionCode"),s("2.5.29.24","invalidityDate"),s("2.5.29.25","cRLDistributionPoints"),s("2.5.29.26","issuingDistributionPoint"),s("2.5.29.27","deltaCRLIndicator"),s("2.5.29.28","issuingDistributionPoint"),s("2.5.29.29","certificateIssuer"),s("2.5.29.30","nameConstraints"),i("2.5.29.31","cRLDistributionPoints"),i("2.5.29.32","certificatePolicies"),s("2.5.29.33","policyMappings"),s("2.5.29.34","policyConstraints"),i("2.5.29.35","authorityKeyIdentifier"),s("2.5.29.36","policyConstraints"),i("2.5.29.37","extKeyUsage"),s("2.5.29.46","freshestCRL"),s("2.5.29.54","inhibitAnyPolicy"),i("1.3.6.1.4.1.11129.2.4.2","timestampList"),i("1.3.6.1.5.5.7.1.1","authorityInfoAccess"),i("1.3.6.1.5.5.7.3.1","serverAuth"),i("1.3.6.1.5.5.7.3.2","clientAuth"),i("1.3.6.1.5.5.7.3.3","codeSigning"),i("1.3.6.1.5.5.7.3.4","emailProtection"),i("1.3.6.1.5.5.7.3.8","timeStamping")},function(e,t,r){var a=r(0);r(1);var n=e.exports=a.pem=a.pem||{};function i(e){for(var t=e.name+": ",r=[],a=function(e,t){return" "+t},n=0;n65&&-1!==s){var o=t[s];","===o?(++s,t=t.substr(0,s)+"\r\n "+t.substr(s)):t=t.substr(0,s)+"\r\n"+o+t.substr(s+1),i=n-s-1,s=-1,++n}else" "!==t[n]&&"\t"!==t[n]&&","!==t[n]||(s=n);return t}function s(e){return e.replace(/^\s+/,"")}n.encode=function(e,t){t=t||{};var r,n="-----BEGIN "+e.type+"-----\r\n";if(e.procType&&(n+=i(r={name:"Proc-Type",values:[String(e.procType.version),e.procType.type]})),e.contentDomain&&(n+=i(r={name:"Content-Domain",values:[e.contentDomain]})),e.dekInfo&&(r={name:"DEK-Info",values:[e.dekInfo.algorithm]},e.dekInfo.parameters&&r.values.push(e.dekInfo.parameters),n+=i(r)),e.headers)for(var s=0;st.blockLength&&(t.start(),t.update(s.bytes()),s=t.digest()),r=a.util.createBuffer(),n=a.util.createBuffer(),u=s.length();for(c=0;c>>0,c>>>0];for(var u=n.fullMessageLength.length-1;u>=0;--u)n.fullMessageLength[u]+=c[1],c[1]=c[0]+(n.fullMessageLength[u]/4294967296>>>0),n.fullMessageLength[u]=n.fullMessageLength[u]>>>0,c[0]=c[1]/4294967296>>>0;return t.putBytes(i),o(e,r,t),(t.read>2048||0===t.length())&&t.compact(),n},n.digest=function(){var s=a.util.createBuffer();s.putBytes(t.bytes());var c,u=n.fullMessageLength[n.fullMessageLength.length-1]+n.messageLengthSize&n.blockLength-1;s.putBytes(i.substr(0,n.blockLength-u));for(var l=8*n.fullMessageLength[0],p=0;p>>0,s.putInt32(l>>>0),l=c>>>0;s.putInt32(l);var f={h0:e.h0,h1:e.h1,h2:e.h2,h3:e.h3,h4:e.h4};o(f,r,s);var h=a.util.createBuffer();return h.putInt32(f.h0),h.putInt32(f.h1),h.putInt32(f.h2),h.putInt32(f.h3),h.putInt32(f.h4),h},n};var i=null,s=!1;function o(e,t,r){for(var a,n,i,s,o,c,u,l=r.length();l>=64;){for(n=e.h0,i=e.h1,s=e.h2,o=e.h3,c=e.h4,u=0;u<16;++u)a=r.getInt32(),t[u]=a,a=(n<<5|n>>>27)+(o^i&(s^o))+c+1518500249+a,c=o,o=s,s=(i<<30|i>>>2)>>>0,i=n,n=a;for(;u<20;++u)a=(a=t[u-3]^t[u-8]^t[u-14]^t[u-16])<<1|a>>>31,t[u]=a,a=(n<<5|n>>>27)+(o^i&(s^o))+c+1518500249+a,c=o,o=s,s=(i<<30|i>>>2)>>>0,i=n,n=a;for(;u<32;++u)a=(a=t[u-3]^t[u-8]^t[u-14]^t[u-16])<<1|a>>>31,t[u]=a,a=(n<<5|n>>>27)+(i^s^o)+c+1859775393+a,c=o,o=s,s=(i<<30|i>>>2)>>>0,i=n,n=a;for(;u<40;++u)a=(a=t[u-6]^t[u-16]^t[u-28]^t[u-32])<<2|a>>>30,t[u]=a,a=(n<<5|n>>>27)+(i^s^o)+c+1859775393+a,c=o,o=s,s=(i<<30|i>>>2)>>>0,i=n,n=a;for(;u<60;++u)a=(a=t[u-6]^t[u-16]^t[u-28]^t[u-32])<<2|a>>>30,t[u]=a,a=(n<<5|n>>>27)+(i&s|o&(i^s))+c+2400959708+a,c=o,o=s,s=(i<<30|i>>>2)>>>0,i=n,n=a;for(;u<80;++u)a=(a=t[u-6]^t[u-16]^t[u-28]^t[u-32])<<2|a>>>30,t[u]=a,a=(n<<5|n>>>27)+(i^s^o)+c+3395469782+a,c=o,o=s,s=(i<<30|i>>>2)>>>0,i=n,n=a;e.h0=e.h0+n|0,e.h1=e.h1+i|0,e.h2=e.h2+s|0,e.h3=e.h3+o|0,e.h4=e.h4+c|0,l-=64}}},function(e,t,r){var a=r(0);function n(e,t){a.cipher.registerAlgorithm(e,(function(){return new a.des.Algorithm(e,t)}))}r(13),r(19),r(1),e.exports=a.des=a.des||{},a.des.startEncrypting=function(e,t,r,a){var n=d({key:e,output:r,decrypt:!1,mode:a||(null===t?"ECB":"CBC")});return n.start(t),n},a.des.createEncryptionCipher=function(e,t){return d({key:e,output:null,decrypt:!1,mode:t})},a.des.startDecrypting=function(e,t,r,a){var n=d({key:e,output:r,decrypt:!0,mode:a||(null===t?"ECB":"CBC")});return n.start(t),n},a.des.createDecryptionCipher=function(e,t){return d({key:e,output:null,decrypt:!0,mode:t})},a.des.Algorithm=function(e,t){var r=this;r.name=e,r.mode=new t({blockSize:8,cipher:{encrypt:function(e,t){return h(r._keys,e,t,!1)},decrypt:function(e,t){return h(r._keys,e,t,!0)}}}),r._init=!1},a.des.Algorithm.prototype.initialize=function(e){if(!this._init){var t=a.util.createBuffer(e.key);if(0===this.name.indexOf("3DES")&&24!==t.length())throw new Error("Invalid Triple-DES key size: "+8*t.length());this._keys=function(e){for(var t,r=[0,4,536870912,536870916,65536,65540,536936448,536936452,512,516,536871424,536871428,66048,66052,536936960,536936964],a=[0,1,1048576,1048577,67108864,67108865,68157440,68157441,256,257,1048832,1048833,67109120,67109121,68157696,68157697],n=[0,8,2048,2056,16777216,16777224,16779264,16779272,0,8,2048,2056,16777216,16777224,16779264,16779272],i=[0,2097152,134217728,136314880,8192,2105344,134225920,136323072,131072,2228224,134348800,136445952,139264,2236416,134356992,136454144],s=[0,262144,16,262160,0,262144,16,262160,4096,266240,4112,266256,4096,266240,4112,266256],o=[0,1024,32,1056,0,1024,32,1056,33554432,33555456,33554464,33555488,33554432,33555456,33554464,33555488],c=[0,268435456,524288,268959744,2,268435458,524290,268959746,0,268435456,524288,268959744,2,268435458,524290,268959746],u=[0,65536,2048,67584,536870912,536936448,536872960,536938496,131072,196608,133120,198656,537001984,537067520,537004032,537069568],l=[0,262144,0,262144,2,262146,2,262146,33554432,33816576,33554432,33816576,33554434,33816578,33554434,33816578],p=[0,268435456,8,268435464,0,268435456,8,268435464,1024,268436480,1032,268436488,1024,268436480,1032,268436488],f=[0,32,0,32,1048576,1048608,1048576,1048608,8192,8224,8192,8224,1056768,1056800,1056768,1056800],h=[0,16777216,512,16777728,2097152,18874368,2097664,18874880,67108864,83886080,67109376,83886592,69206016,85983232,69206528,85983744],d=[0,4096,134217728,134221824,524288,528384,134742016,134746112,16,4112,134217744,134221840,524304,528400,134742032,134746128],y=[0,4,256,260,0,4,256,260,1,5,257,261,1,5,257,261],g=e.length()>8?3:1,m=[],v=[0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0],C=0,E=0;E>>4^T))<<4,S^=t=65535&((T^=t)>>>-16^S),S^=(t=858993459&(S>>>2^(T^=t<<-16)))<<2,S^=t=65535&((T^=t)>>>-16^S),S^=(t=1431655765&(S>>>1^(T^=t<<-16)))<<1,S^=t=16711935&((T^=t)>>>8^S),t=(S^=(t=1431655765&(S>>>1^(T^=t<<8)))<<1)<<8|(T^=t)>>>20&240,S=T<<24|T<<8&16711680|T>>>8&65280|T>>>24&240,T=t;for(var I=0;I>>26,T=T<<2|T>>>26):(S=S<<1|S>>>27,T=T<<1|T>>>27);var b=r[(S&=-15)>>>28]|a[S>>>24&15]|n[S>>>20&15]|i[S>>>16&15]|s[S>>>12&15]|o[S>>>8&15]|c[S>>>4&15],A=u[(T&=-15)>>>28]|l[T>>>24&15]|p[T>>>20&15]|f[T>>>16&15]|h[T>>>12&15]|d[T>>>8&15]|y[T>>>4&15];t=65535&(A>>>16^b),m[C++]=b^t,m[C++]=A^t<<16}}return m}(t),this._init=!0}},n("DES-ECB",a.cipher.modes.ecb),n("DES-CBC",a.cipher.modes.cbc),n("DES-CFB",a.cipher.modes.cfb),n("DES-OFB",a.cipher.modes.ofb),n("DES-CTR",a.cipher.modes.ctr),n("3DES-ECB",a.cipher.modes.ecb),n("3DES-CBC",a.cipher.modes.cbc),n("3DES-CFB",a.cipher.modes.cfb),n("3DES-OFB",a.cipher.modes.ofb),n("3DES-CTR",a.cipher.modes.ctr);var i=[16843776,0,65536,16843780,16842756,66564,4,65536,1024,16843776,16843780,1024,16778244,16842756,16777216,4,1028,16778240,16778240,66560,66560,16842752,16842752,16778244,65540,16777220,16777220,65540,0,1028,66564,16777216,65536,16843780,4,16842752,16843776,16777216,16777216,1024,16842756,65536,66560,16777220,1024,4,16778244,66564,16843780,65540,16842752,16778244,16777220,1028,66564,16843776,1028,16778240,16778240,0,65540,66560,0,16842756],s=[-2146402272,-2147450880,32768,1081376,1048576,32,-2146435040,-2147450848,-2147483616,-2146402272,-2146402304,-2147483648,-2147450880,1048576,32,-2146435040,1081344,1048608,-2147450848,0,-2147483648,32768,1081376,-2146435072,1048608,-2147483616,0,1081344,32800,-2146402304,-2146435072,32800,0,1081376,-2146435040,1048576,-2147450848,-2146435072,-2146402304,32768,-2146435072,-2147450880,32,-2146402272,1081376,32,32768,-2147483648,32800,-2146402304,1048576,-2147483616,1048608,-2147450848,-2147483616,1048608,1081344,0,-2147450880,32800,-2147483648,-2146435040,-2146402272,1081344],o=[520,134349312,0,134348808,134218240,0,131592,134218240,131080,134217736,134217736,131072,134349320,131080,134348800,520,134217728,8,134349312,512,131584,134348800,134348808,131592,134218248,131584,131072,134218248,8,134349320,512,134217728,134349312,134217728,131080,520,131072,134349312,134218240,0,512,131080,134349320,134218240,134217736,512,0,134348808,134218248,131072,134217728,134349320,8,131592,131584,134217736,134348800,134218248,520,134348800,131592,8,134348808,131584],c=[8396801,8321,8321,128,8396928,8388737,8388609,8193,0,8396800,8396800,8396929,129,0,8388736,8388609,1,8192,8388608,8396801,128,8388608,8193,8320,8388737,1,8320,8388736,8192,8396928,8396929,129,8388736,8388609,8396800,8396929,129,0,0,8396800,8320,8388736,8388737,1,8396801,8321,8321,128,8396929,129,1,8192,8388609,8193,8396928,8388737,8193,8320,8388608,8396801,128,8388608,8192,8396928],u=[256,34078976,34078720,1107296512,524288,256,1073741824,34078720,1074266368,524288,33554688,1074266368,1107296512,1107820544,524544,1073741824,33554432,1074266112,1074266112,0,1073742080,1107820800,1107820800,33554688,1107820544,1073742080,0,1107296256,34078976,33554432,1107296256,524544,524288,1107296512,256,33554432,1073741824,34078720,1107296512,1074266368,33554688,1073741824,1107820544,34078976,1074266368,256,33554432,1107820544,1107820800,524544,1107296256,1107820800,34078720,0,1074266112,1107296256,524544,33554688,1073742080,524288,0,1074266112,34078976,1073742080],l=[536870928,541065216,16384,541081616,541065216,16,541081616,4194304,536887296,4210704,4194304,536870928,4194320,536887296,536870912,16400,0,4194320,536887312,16384,4210688,536887312,16,541065232,541065232,0,4210704,541081600,16400,4210688,541081600,536870912,536887296,16,541065232,4210688,541081616,4194304,16400,536870928,4194304,536887296,536870912,16400,536870928,541081616,4210688,541065216,4210704,541081600,0,541065232,16,16384,541065216,4210704,16384,4194320,536887312,0,541081600,536870912,4194320,536887312],p=[2097152,69206018,67110914,0,2048,67110914,2099202,69208064,69208066,2097152,0,67108866,2,67108864,69206018,2050,67110912,2099202,2097154,67110912,67108866,69206016,69208064,2097154,69206016,2048,2050,69208066,2099200,2,67108864,2099200,67108864,2099200,2097152,67110914,67110914,69206018,69206018,2,2097154,67108864,67110912,2097152,69208064,2050,2099202,69208064,2050,67108866,69208066,69206016,2099200,0,2,69208066,0,2099202,69206016,2048,67108866,67110912,2048,2097154],f=[268439616,4096,262144,268701760,268435456,268439616,64,268435456,262208,268697600,268701760,266240,268701696,266304,4096,64,268697600,268435520,268439552,4160,266240,262208,268697664,268701696,4160,0,0,268697664,268435520,268439552,266304,262144,266304,262144,268701696,4096,64,268697664,4096,266304,268439552,64,268435520,268697600,268697664,268435456,262144,268439616,0,268701760,262208,268435520,268697600,268439552,268439616,0,268701760,266240,266240,4160,4160,262208,268435456,268701696];function h(e,t,r,a){var n,h,d=32===e.length?3:9;n=3===d?a?[30,-2,-2]:[0,32,2]:a?[94,62,-2,32,64,2,30,-2,-2]:[0,32,2,62,30,-2,64,96,2];var y=t[0],g=t[1];y^=(h=252645135&(y>>>4^g))<<4,y^=(h=65535&(y>>>16^(g^=h)))<<16,y^=h=858993459&((g^=h)>>>2^y),y^=h=16711935&((g^=h<<2)>>>8^y),y=(y^=(h=1431655765&(y>>>1^(g^=h<<8)))<<1)<<1|y>>>31,g=(g^=h)<<1|g>>>31;for(var m=0;m>>4|g<<28)^e[E+1];h=y,y=g,g=h^(s[S>>>24&63]|c[S>>>16&63]|l[S>>>8&63]|f[63&S]|i[T>>>24&63]|o[T>>>16&63]|u[T>>>8&63]|p[63&T])}h=y,y=g,g=h}g=g>>>1|g<<31,g^=h=1431655765&((y=y>>>1|y<<31)>>>1^g),g^=(h=16711935&(g>>>8^(y^=h<<1)))<<8,g^=(h=858993459&(g>>>2^(y^=h)))<<2,g^=h=65535&((y^=h)>>>16^g),g^=h=252645135&((y^=h<<16)>>>4^g),y^=h<<4,r[0]=y,r[1]=g}function d(e){var t,r="DES-"+((e=e||{}).mode||"CBC").toUpperCase(),n=(t=e.decrypt?a.cipher.createDecipher(r,e.key):a.cipher.createCipher(r,e.key)).start;return t.start=function(e,r){var i=null;r instanceof a.util.ByteBuffer&&(i=r,r={}),(r=r||{}).output=i,r.iv=e,n.call(t,r)},t}},function(e,t,r){var a=r(0);if(r(3),r(12),r(6),r(26),r(27),r(2),r(1),void 0===n)var n=a.jsbn.BigInteger;var i=a.util.isNodejs?r(16):null,s=a.asn1,o=a.util;a.pki=a.pki||{},e.exports=a.pki.rsa=a.rsa=a.rsa||{};var c=a.pki,u=[6,4,2,4,2,4,6,2],l={name:"PrivateKeyInfo",tagClass:s.Class.UNIVERSAL,type:s.Type.SEQUENCE,constructed:!0,value:[{name:"PrivateKeyInfo.version",tagClass:s.Class.UNIVERSAL,type:s.Type.INTEGER,constructed:!1,capture:"privateKeyVersion"},{name:"PrivateKeyInfo.privateKeyAlgorithm",tagClass:s.Class.UNIVERSAL,type:s.Type.SEQUENCE,constructed:!0,value:[{name:"AlgorithmIdentifier.algorithm",tagClass:s.Class.UNIVERSAL,type:s.Type.OID,constructed:!1,capture:"privateKeyOid"}]},{name:"PrivateKeyInfo",tagClass:s.Class.UNIVERSAL,type:s.Type.OCTETSTRING,constructed:!1,capture:"privateKey"}]},p={name:"RSAPrivateKey",tagClass:s.Class.UNIVERSAL,type:s.Type.SEQUENCE,constructed:!0,value:[{name:"RSAPrivateKey.version",tagClass:s.Class.UNIVERSAL,type:s.Type.INTEGER,constructed:!1,capture:"privateKeyVersion"},{name:"RSAPrivateKey.modulus",tagClass:s.Class.UNIVERSAL,type:s.Type.INTEGER,constructed:!1,capture:"privateKeyModulus"},{name:"RSAPrivateKey.publicExponent",tagClass:s.Class.UNIVERSAL,type:s.Type.INTEGER,constructed:!1,capture:"privateKeyPublicExponent"},{name:"RSAPrivateKey.privateExponent",tagClass:s.Class.UNIVERSAL,type:s.Type.INTEGER,constructed:!1,capture:"privateKeyPrivateExponent"},{name:"RSAPrivateKey.prime1",tagClass:s.Class.UNIVERSAL,type:s.Type.INTEGER,constructed:!1,capture:"privateKeyPrime1"},{name:"RSAPrivateKey.prime2",tagClass:s.Class.UNIVERSAL,type:s.Type.INTEGER,constructed:!1,capture:"privateKeyPrime2"},{name:"RSAPrivateKey.exponent1",tagClass:s.Class.UNIVERSAL,type:s.Type.INTEGER,constructed:!1,capture:"privateKeyExponent1"},{name:"RSAPrivateKey.exponent2",tagClass:s.Class.UNIVERSAL,type:s.Type.INTEGER,constructed:!1,capture:"privateKeyExponent2"},{name:"RSAPrivateKey.coefficient",tagClass:s.Class.UNIVERSAL,type:s.Type.INTEGER,constructed:!1,capture:"privateKeyCoefficient"}]},f={name:"RSAPublicKey",tagClass:s.Class.UNIVERSAL,type:s.Type.SEQUENCE,constructed:!0,value:[{name:"RSAPublicKey.modulus",tagClass:s.Class.UNIVERSAL,type:s.Type.INTEGER,constructed:!1,capture:"publicKeyModulus"},{name:"RSAPublicKey.exponent",tagClass:s.Class.UNIVERSAL,type:s.Type.INTEGER,constructed:!1,capture:"publicKeyExponent"}]},h=a.pki.rsa.publicKeyValidator={name:"SubjectPublicKeyInfo",tagClass:s.Class.UNIVERSAL,type:s.Type.SEQUENCE,constructed:!0,captureAsn1:"subjectPublicKeyInfo",value:[{name:"SubjectPublicKeyInfo.AlgorithmIdentifier",tagClass:s.Class.UNIVERSAL,type:s.Type.SEQUENCE,constructed:!0,value:[{name:"AlgorithmIdentifier.algorithm",tagClass:s.Class.UNIVERSAL,type:s.Type.OID,constructed:!1,capture:"publicKeyOid"}]},{name:"SubjectPublicKeyInfo.subjectPublicKey",tagClass:s.Class.UNIVERSAL,type:s.Type.BITSTRING,constructed:!1,value:[{name:"SubjectPublicKeyInfo.subjectPublicKey.RSAPublicKey",tagClass:s.Class.UNIVERSAL,type:s.Type.SEQUENCE,constructed:!0,optional:!0,captureAsn1:"rsaPublicKey"}]}]},d=function(e){var t;if(!(e.algorithm in c.oids)){var r=new Error("Unknown message digest algorithm.");throw r.algorithm=e.algorithm,r}t=c.oids[e.algorithm];var a=s.oidToDer(t).getBytes(),n=s.create(s.Class.UNIVERSAL,s.Type.SEQUENCE,!0,[]),i=s.create(s.Class.UNIVERSAL,s.Type.SEQUENCE,!0,[]);i.value.push(s.create(s.Class.UNIVERSAL,s.Type.OID,!1,a)),i.value.push(s.create(s.Class.UNIVERSAL,s.Type.NULL,!1,""));var o=s.create(s.Class.UNIVERSAL,s.Type.OCTETSTRING,!1,e.digest().getBytes());return n.value.push(i),n.value.push(o),s.toDer(n).getBytes()},y=function(e,t,r){if(r)return e.modPow(t.e,t.n);if(!t.p||!t.q)return e.modPow(t.d,t.n);var i;t.dP||(t.dP=t.d.mod(t.p.subtract(n.ONE))),t.dQ||(t.dQ=t.d.mod(t.q.subtract(n.ONE))),t.qInv||(t.qInv=t.q.modInverse(t.p));do{i=new n(a.util.bytesToHex(a.random.getBytes(t.n.bitLength()/8)),16)}while(i.compareTo(t.n)>=0||!i.gcd(t.n).equals(n.ONE));for(var s=(e=e.multiply(i.modPow(t.e,t.n)).mod(t.n)).mod(t.p).modPow(t.dP,t.p),o=e.mod(t.q).modPow(t.dQ,t.q);s.compareTo(o)<0;)s=s.add(t.p);var c=s.subtract(o).multiply(t.qInv).mod(t.p).multiply(t.q).add(o);return c=c.multiply(i.modInverse(t.n)).mod(t.n)};function g(e,t,r){var n=a.util.createBuffer(),i=Math.ceil(t.n.bitLength()/8);if(e.length>i-11){var s=new Error("Message is too long for PKCS#1 v1.5 padding.");throw s.length=e.length,s.max=i-11,s}n.putByte(0),n.putByte(r);var o,c=i-3-e.length;if(0===r||1===r){o=0===r?0:255;for(var u=0;u0;){var l=0,p=a.random.getBytes(c);for(u=0;u1;){if(255!==s.getByte()){--s.read;break}++u}else if(2===c)for(u=0;s.length()>1;){if(0===s.getByte()){--s.read;break}++u}if(0!==s.getByte()||u!==i-3-s.length())throw new Error("Encryption block is invalid.");return s.getBytes()}function v(e,t,r){"function"==typeof t&&(r=t,t={});var i={algorithm:{name:(t=t||{}).algorithm||"PRIMEINC",options:{workers:t.workers||2,workLoad:t.workLoad||100,workerScript:t.workerScript}}};function s(){o(e.pBits,(function(t,a){return t?r(t):(e.p=a,null!==e.q?u(t,e.q):void o(e.qBits,u))}))}function o(e,t){a.prime.generateProbablePrime(e,i,t)}function u(t,a){if(t)return r(t);if(e.q=a,e.p.compareTo(e.q)<0){var i=e.p;e.p=e.q,e.q=i}if(0!==e.p.subtract(n.ONE).gcd(e.e).compareTo(n.ONE))return e.p=null,void s();if(0!==e.q.subtract(n.ONE).gcd(e.e).compareTo(n.ONE))return e.q=null,void o(e.qBits,u);if(e.p1=e.p.subtract(n.ONE),e.q1=e.q.subtract(n.ONE),e.phi=e.p1.multiply(e.q1),0!==e.phi.gcd(e.e).compareTo(n.ONE))return e.p=e.q=null,void s();if(e.n=e.p.multiply(e.q),e.n.bitLength()!==e.bits)return e.q=null,void o(e.qBits,u);var l=e.e.modInverse(e.phi);e.keys={privateKey:c.rsa.setPrivateKey(e.n,e.e,l,e.p,e.q,l.mod(e.p1),l.mod(e.q1),e.q.modInverse(e.p)),publicKey:c.rsa.setPublicKey(e.n,e.e)},r(null,e.keys)}"prng"in t&&(i.prng=t.prng),s()}function C(e){var t=e.toString(16);t[0]>="8"&&(t="00"+t);var r=a.util.hexToBytes(t);return r.length>1&&(0===r.charCodeAt(0)&&0==(128&r.charCodeAt(1))||255===r.charCodeAt(0)&&128==(128&r.charCodeAt(1)))?r.substr(1):r}function E(e){return e<=100?27:e<=150?18:e<=200?15:e<=250?12:e<=300?9:e<=350?8:e<=400?7:e<=500?6:e<=600?5:e<=800?4:e<=1250?3:2}function S(e){return a.util.isNodejs&&"function"==typeof i[e]}function T(e){return void 0!==o.globalScope&&"object"==typeof o.globalScope.crypto&&"object"==typeof o.globalScope.crypto.subtle&&"function"==typeof o.globalScope.crypto.subtle[e]}function I(e){return void 0!==o.globalScope&&"object"==typeof o.globalScope.msCrypto&&"object"==typeof o.globalScope.msCrypto.subtle&&"function"==typeof o.globalScope.msCrypto.subtle[e]}function b(e){for(var t=a.util.hexToBytes(e.toString(16)),r=new Uint8Array(t.length),n=0;n0;)l.putByte(0),--p;return l.putBytes(a.util.hexToBytes(u)),l.getBytes()},c.rsa.decrypt=function(e,t,r,i){var s=Math.ceil(t.n.bitLength()/8);if(e.length!==s){var o=new Error("Encrypted message length is invalid.");throw o.length=e.length,o.expected=s,o}var c=new n(a.util.createBuffer(e).toHex(),16);if(c.compareTo(t.n)>=0)throw new Error("Encrypted message is invalid.");for(var u=y(c,t,r).toString(16),l=a.util.createBuffer(),p=s-Math.ceil(u.length/2);p>0;)l.putByte(0),--p;return l.putBytes(a.util.hexToBytes(u)),!1!==i?m(l.getBytes(),t,r):l.getBytes()},c.rsa.createKeyPairGenerationState=function(e,t,r){"string"==typeof e&&(e=parseInt(e,10)),e=e||2048;var i,s=(r=r||{}).prng||a.random,o={nextBytes:function(e){for(var t=s.getBytesSync(e.length),r=0;r>1,pBits:e-(e>>1),pqState:0,num:null,keys:null}).e.fromInt(i.eInt),i},c.rsa.stepKeyPairGenerationState=function(e,t){"algorithm"in e||(e.algorithm="PRIMEINC");var r=new n(null);r.fromInt(30);for(var a,i=0,s=function(e,t){return e|t},o=+new Date,l=0;null===e.keys&&(t<=0||lp?e.pqState=0:e.num.isProbablePrime(E(e.num.bitLength()))?++e.pqState:e.num.dAddOffset(u[i++%8],0):2===e.pqState?e.pqState=0===e.num.subtract(n.ONE).gcd(e.e).compareTo(n.ONE)?3:0:3===e.pqState&&(e.pqState=0,null===e.p?e.p=e.num:e.q=e.num,null!==e.p&&null!==e.q&&++e.state,e.num=null)}else if(1===e.state)e.p.compareTo(e.q)<0&&(e.num=e.p,e.p=e.q,e.q=e.num),++e.state;else if(2===e.state)e.p1=e.p.subtract(n.ONE),e.q1=e.q.subtract(n.ONE),e.phi=e.p1.multiply(e.q1),++e.state;else if(3===e.state)0===e.phi.gcd(e.e).compareTo(n.ONE)?++e.state:(e.p=null,e.q=null,e.state=0);else if(4===e.state)e.n=e.p.multiply(e.q),e.n.bitLength()===e.bits?++e.state:(e.q=null,e.state=0);else if(5===e.state){var h=e.e.modInverse(e.phi);e.keys={privateKey:c.rsa.setPrivateKey(e.n,e.e,h,e.p,e.q,h.mod(e.p1),h.mod(e.q1),e.q.modInverse(e.p)),publicKey:c.rsa.setPublicKey(e.n,e.e)}}l+=(a=+new Date)-o,o=a}return null!==e.keys},c.rsa.generateKeyPair=function(e,t,r,n){if(1===arguments.length?"object"==typeof e?(r=e,e=void 0):"function"==typeof e&&(n=e,e=void 0):2===arguments.length?"number"==typeof e?"function"==typeof t?(n=t,t=void 0):"number"!=typeof t&&(r=t,t=void 0):(r=e,n=t,e=void 0,t=void 0):3===arguments.length&&("number"==typeof t?"function"==typeof r&&(n=r,r=void 0):(n=r,r=t,t=void 0)),r=r||{},void 0===e&&(e=r.bits||2048),void 0===t&&(t=r.e||65537),!a.options.usePureJavaScript&&!r.prng&&e>=256&&e<=16384&&(65537===t||3===t))if(n){if(S("generateKeyPair"))return i.generateKeyPair("rsa",{modulusLength:e,publicExponent:t,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}},(function(e,t,r){if(e)return n(e);n(null,{privateKey:c.privateKeyFromPem(r),publicKey:c.publicKeyFromPem(t)})}));if(T("generateKey")&&T("exportKey"))return o.globalScope.crypto.subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:e,publicExponent:b(t),hash:{name:"SHA-256"}},!0,["sign","verify"]).then((function(e){return o.globalScope.crypto.subtle.exportKey("pkcs8",e.privateKey)})).then(void 0,(function(e){n(e)})).then((function(e){if(e){var t=c.privateKeyFromAsn1(s.fromDer(a.util.createBuffer(e)));n(null,{privateKey:t,publicKey:c.setRsaPublicKey(t.n,t.e)})}}));if(I("generateKey")&&I("exportKey")){var u=o.globalScope.msCrypto.subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:e,publicExponent:b(t),hash:{name:"SHA-256"}},!0,["sign","verify"]);return u.oncomplete=function(e){var t=e.target.result,r=o.globalScope.msCrypto.subtle.exportKey("pkcs8",t.privateKey);r.oncomplete=function(e){var t=e.target.result,r=c.privateKeyFromAsn1(s.fromDer(a.util.createBuffer(t)));n(null,{privateKey:r,publicKey:c.setRsaPublicKey(r.n,r.e)})},r.onerror=function(e){n(e)}},void(u.onerror=function(e){n(e)})}}else if(S("generateKeyPairSync")){var l=i.generateKeyPairSync("rsa",{modulusLength:e,publicExponent:t,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{privateKey:c.privateKeyFromPem(l.privateKey),publicKey:c.publicKeyFromPem(l.publicKey)}}var p=c.rsa.createKeyPairGenerationState(e,t,r);if(!n)return c.rsa.stepKeyPairGenerationState(p,0),p.keys;v(p,r,n)},c.setRsaPublicKey=c.rsa.setPublicKey=function(e,t){var r={n:e,e:t,encrypt:function(e,t,n){if("string"==typeof t?t=t.toUpperCase():void 0===t&&(t="RSAES-PKCS1-V1_5"),"RSAES-PKCS1-V1_5"===t)t={encode:function(e,t,r){return g(e,t,2).getBytes()}};else if("RSA-OAEP"===t||"RSAES-OAEP"===t)t={encode:function(e,t){return a.pkcs1.encode_rsa_oaep(t,e,n)}};else if(-1!==["RAW","NONE","NULL",null].indexOf(t))t={encode:function(e){return e}};else if("string"==typeof t)throw new Error('Unsupported encryption scheme: "'+t+'".');var i=t.encode(e,r,!0);return c.rsa.encrypt(i,r,!0)},verify:function(e,t,a){"string"==typeof a?a=a.toUpperCase():void 0===a&&(a="RSASSA-PKCS1-V1_5"),"RSASSA-PKCS1-V1_5"===a?a={verify:function(e,t){return t=m(t,r,!0),e===s.fromDer(t).value[1].value}}:"NONE"!==a&&"NULL"!==a&&null!==a||(a={verify:function(e,t){return e===(t=m(t,r,!0))}});var n=c.rsa.decrypt(t,r,!0,!1);return a.verify(e,n,r.n.bitLength())}};return r},c.setRsaPrivateKey=c.rsa.setPrivateKey=function(e,t,r,n,i,s,o,u){var l={n:e,e:t,d:r,p:n,q:i,dP:s,dQ:o,qInv:u,decrypt:function(e,t,r){"string"==typeof t?t=t.toUpperCase():void 0===t&&(t="RSAES-PKCS1-V1_5");var n=c.rsa.decrypt(e,l,!1,!1);if("RSAES-PKCS1-V1_5"===t)t={decode:m};else if("RSA-OAEP"===t||"RSAES-OAEP"===t)t={decode:function(e,t){return a.pkcs1.decode_rsa_oaep(t,e,r)}};else{if(-1===["RAW","NONE","NULL",null].indexOf(t))throw new Error('Unsupported encryption scheme: "'+t+'".');t={decode:function(e){return e}}}return t.decode(n,l,!1)},sign:function(e,t){var r=!1;"string"==typeof t&&(t=t.toUpperCase()),void 0===t||"RSASSA-PKCS1-V1_5"===t?(t={encode:d},r=1):"NONE"!==t&&"NULL"!==t&&null!==t||(t={encode:function(){return e}},r=1);var a=t.encode(e,l.n.bitLength());return c.rsa.encrypt(a,l,r)}};return l},c.wrapRsaPrivateKey=function(e){return s.create(s.Class.UNIVERSAL,s.Type.SEQUENCE,!0,[s.create(s.Class.UNIVERSAL,s.Type.INTEGER,!1,s.integerToDer(0).getBytes()),s.create(s.Class.UNIVERSAL,s.Type.SEQUENCE,!0,[s.create(s.Class.UNIVERSAL,s.Type.OID,!1,s.oidToDer(c.oids.rsaEncryption).getBytes()),s.create(s.Class.UNIVERSAL,s.Type.NULL,!1,"")]),s.create(s.Class.UNIVERSAL,s.Type.OCTETSTRING,!1,s.toDer(e).getBytes())])},c.privateKeyFromAsn1=function(e){var t,r,i,o,u,f,h,d,y={},g=[];if(s.validate(e,l,y,g)&&(e=s.fromDer(a.util.createBuffer(y.privateKey))),y={},g=[],!s.validate(e,p,y,g)){var m=new Error("Cannot read private key. ASN.1 object does not contain an RSAPrivateKey.");throw m.errors=g,m}return t=a.util.createBuffer(y.privateKeyModulus).toHex(),r=a.util.createBuffer(y.privateKeyPublicExponent).toHex(),i=a.util.createBuffer(y.privateKeyPrivateExponent).toHex(),o=a.util.createBuffer(y.privateKeyPrime1).toHex(),u=a.util.createBuffer(y.privateKeyPrime2).toHex(),f=a.util.createBuffer(y.privateKeyExponent1).toHex(),h=a.util.createBuffer(y.privateKeyExponent2).toHex(),d=a.util.createBuffer(y.privateKeyCoefficient).toHex(),c.setRsaPrivateKey(new n(t,16),new n(r,16),new n(i,16),new n(o,16),new n(u,16),new n(f,16),new n(h,16),new n(d,16))},c.privateKeyToAsn1=c.privateKeyToRSAPrivateKey=function(e){return s.create(s.Class.UNIVERSAL,s.Type.SEQUENCE,!0,[s.create(s.Class.UNIVERSAL,s.Type.INTEGER,!1,s.integerToDer(0).getBytes()),s.create(s.Class.UNIVERSAL,s.Type.INTEGER,!1,C(e.n)),s.create(s.Class.UNIVERSAL,s.Type.INTEGER,!1,C(e.e)),s.create(s.Class.UNIVERSAL,s.Type.INTEGER,!1,C(e.d)),s.create(s.Class.UNIVERSAL,s.Type.INTEGER,!1,C(e.p)),s.create(s.Class.UNIVERSAL,s.Type.INTEGER,!1,C(e.q)),s.create(s.Class.UNIVERSAL,s.Type.INTEGER,!1,C(e.dP)),s.create(s.Class.UNIVERSAL,s.Type.INTEGER,!1,C(e.dQ)),s.create(s.Class.UNIVERSAL,s.Type.INTEGER,!1,C(e.qInv))])},c.publicKeyFromAsn1=function(e){var t={},r=[];if(s.validate(e,h,t,r)){var i,o=s.derToOid(t.publicKeyOid);if(o!==c.oids.rsaEncryption)throw(i=new Error("Cannot read public key. Unknown OID.")).oid=o,i;e=t.rsaPublicKey}if(r=[],!s.validate(e,f,t,r))throw(i=new Error("Cannot read public key. ASN.1 object does not contain an RSAPublicKey.")).errors=r,i;var u=a.util.createBuffer(t.publicKeyModulus).toHex(),l=a.util.createBuffer(t.publicKeyExponent).toHex();return c.setRsaPublicKey(new n(u,16),new n(l,16))},c.publicKeyToAsn1=c.publicKeyToSubjectPublicKeyInfo=function(e){return s.create(s.Class.UNIVERSAL,s.Type.SEQUENCE,!0,[s.create(s.Class.UNIVERSAL,s.Type.SEQUENCE,!0,[s.create(s.Class.UNIVERSAL,s.Type.OID,!1,s.oidToDer(c.oids.rsaEncryption).getBytes()),s.create(s.Class.UNIVERSAL,s.Type.NULL,!1,"")]),s.create(s.Class.UNIVERSAL,s.Type.BITSTRING,!1,[c.publicKeyToRSAPublicKey(e)])])},c.publicKeyToRSAPublicKey=function(e){return s.create(s.Class.UNIVERSAL,s.Type.SEQUENCE,!0,[s.create(s.Class.UNIVERSAL,s.Type.INTEGER,!1,C(e.n)),s.create(s.Class.UNIVERSAL,s.Type.INTEGER,!1,C(e.e))])}},function(e,t,r){var a,n=r(0);e.exports=n.jsbn=n.jsbn||{};function i(e,t,r){this.data=[],null!=e&&("number"==typeof e?this.fromNumber(e,t,r):null==t&&"string"!=typeof e?this.fromString(e,256):this.fromString(e,t))}function s(){return new i(null)}function o(e,t,r,a,n,i){for(var s=16383&t,o=t>>14;--i>=0;){var c=16383&this.data[e],u=this.data[e++]>>14,l=o*c+u*s;n=((c=s*c+((16383&l)<<14)+r.data[a]+n)>>28)+(l>>14)+o*u,r.data[a++]=268435455&c}return n}n.jsbn.BigInteger=i,"undefined"==typeof navigator?(i.prototype.am=o,a=28):"Microsoft Internet Explorer"==navigator.appName?(i.prototype.am=function(e,t,r,a,n,i){for(var s=32767&t,o=t>>15;--i>=0;){var c=32767&this.data[e],u=this.data[e++]>>15,l=o*c+u*s;n=((c=s*c+((32767&l)<<15)+r.data[a]+(1073741823&n))>>>30)+(l>>>15)+o*u+(n>>>30),r.data[a++]=1073741823&c}return n},a=30):"Netscape"!=navigator.appName?(i.prototype.am=function(e,t,r,a,n,i){for(;--i>=0;){var s=t*this.data[e++]+r.data[a]+n;n=Math.floor(s/67108864),r.data[a++]=67108863&s}return n},a=26):(i.prototype.am=o,a=28),i.prototype.DB=a,i.prototype.DM=(1<>>16)&&(e=t,r+=16),0!=(t=e>>8)&&(e=t,r+=8),0!=(t=e>>4)&&(e=t,r+=4),0!=(t=e>>2)&&(e=t,r+=2),0!=(t=e>>1)&&(e=t,r+=1),r}function y(e){this.m=e}function g(e){this.m=e,this.mp=e.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<>=16,t+=16),0==(255&e)&&(e>>=8,t+=8),0==(15&e)&&(e>>=4,t+=4),0==(3&e)&&(e>>=2,t+=2),0==(1&e)&&++t,t}function T(e){for(var t=0;0!=e;)e&=e-1,++t;return t}function I(){}function b(e){return e}function A(e){this.r2=s(),this.q3=s(),i.ONE.dlShiftTo(2*e.t,this.r2),this.mu=this.r2.divide(e),this.m=e}y.prototype.convert=function(e){return e.s<0||e.compareTo(this.m)>=0?e.mod(this.m):e},y.prototype.revert=function(e){return e},y.prototype.reduce=function(e){e.divRemTo(this.m,null,e)},y.prototype.mulTo=function(e,t,r){e.multiplyTo(t,r),this.reduce(r)},y.prototype.sqrTo=function(e,t){e.squareTo(t),this.reduce(t)},g.prototype.convert=function(e){var t=s();return e.abs().dlShiftTo(this.m.t,t),t.divRemTo(this.m,null,t),e.s<0&&t.compareTo(i.ZERO)>0&&this.m.subTo(t,t),t},g.prototype.revert=function(e){var t=s();return e.copyTo(t),this.reduce(t),t},g.prototype.reduce=function(e){for(;e.t<=this.mt2;)e.data[e.t++]=0;for(var t=0;t>15)*this.mpl&this.um)<<15)&e.DM;for(r=t+this.m.t,e.data[r]+=this.m.am(0,a,e,t,0,this.m.t);e.data[r]>=e.DV;)e.data[r]-=e.DV,e.data[++r]++}e.clamp(),e.drShiftTo(this.m.t,e),e.compareTo(this.m)>=0&&e.subTo(this.m,e)},g.prototype.mulTo=function(e,t,r){e.multiplyTo(t,r),this.reduce(r)},g.prototype.sqrTo=function(e,t){e.squareTo(t),this.reduce(t)},i.prototype.copyTo=function(e){for(var t=this.t-1;t>=0;--t)e.data[t]=this.data[t];e.t=this.t,e.s=this.s},i.prototype.fromInt=function(e){this.t=1,this.s=e<0?-1:0,e>0?this.data[0]=e:e<-1?this.data[0]=e+this.DV:this.t=0},i.prototype.fromString=function(e,t){var r;if(16==t)r=4;else if(8==t)r=3;else if(256==t)r=8;else if(2==t)r=1;else if(32==t)r=5;else{if(4!=t)return void this.fromRadix(e,t);r=2}this.t=0,this.s=0;for(var a=e.length,n=!1,s=0;--a>=0;){var o=8==r?255&e[a]:f(e,a);o<0?"-"==e.charAt(a)&&(n=!0):(n=!1,0==s?this.data[this.t++]=o:s+r>this.DB?(this.data[this.t-1]|=(o&(1<>this.DB-s):this.data[this.t-1]|=o<=this.DB&&(s-=this.DB))}8==r&&0!=(128&e[0])&&(this.s=-1,s>0&&(this.data[this.t-1]|=(1<0&&this.data[this.t-1]==e;)--this.t},i.prototype.dlShiftTo=function(e,t){var r;for(r=this.t-1;r>=0;--r)t.data[r+e]=this.data[r];for(r=e-1;r>=0;--r)t.data[r]=0;t.t=this.t+e,t.s=this.s},i.prototype.drShiftTo=function(e,t){for(var r=e;r=0;--r)t.data[r+s+1]=this.data[r]>>n|o,o=(this.data[r]&i)<=0;--r)t.data[r]=0;t.data[s]=o,t.t=this.t+s+1,t.s=this.s,t.clamp()},i.prototype.rShiftTo=function(e,t){t.s=this.s;var r=Math.floor(e/this.DB);if(r>=this.t)t.t=0;else{var a=e%this.DB,n=this.DB-a,i=(1<>a;for(var s=r+1;s>a;a>0&&(t.data[this.t-r-1]|=(this.s&i)<>=this.DB;if(e.t>=this.DB;a+=this.s}else{for(a+=this.s;r>=this.DB;a-=e.s}t.s=a<0?-1:0,a<-1?t.data[r++]=this.DV+a:a>0&&(t.data[r++]=a),t.t=r,t.clamp()},i.prototype.multiplyTo=function(e,t){var r=this.abs(),a=e.abs(),n=r.t;for(t.t=n+a.t;--n>=0;)t.data[n]=0;for(n=0;n=0;)e.data[r]=0;for(r=0;r=t.DV&&(e.data[r+t.t]-=t.DV,e.data[r+t.t+1]=1)}e.t>0&&(e.data[e.t-1]+=t.am(r,t.data[r],e,2*r,0,1)),e.s=0,e.clamp()},i.prototype.divRemTo=function(e,t,r){var a=e.abs();if(!(a.t<=0)){var n=this.abs();if(n.t0?(a.lShiftTo(l,o),n.lShiftTo(l,r)):(a.copyTo(o),n.copyTo(r));var p=o.t,f=o.data[p-1];if(0!=f){var h=f*(1<1?o.data[p-2]>>this.F2:0),y=this.FV/h,g=(1<=0&&(r.data[r.t++]=1,r.subTo(E,r)),i.ONE.dlShiftTo(p,E),E.subTo(o,o);o.t=0;){var S=r.data[--v]==f?this.DM:Math.floor(r.data[v]*y+(r.data[v-1]+m)*g);if((r.data[v]+=o.am(0,S,r,C,0,p))0&&r.rShiftTo(l,r),c<0&&i.ZERO.subTo(r,r)}}},i.prototype.invDigit=function(){if(this.t<1)return 0;var e=this.data[0];if(0==(1&e))return 0;var t=3&e;return(t=(t=(t=(t=t*(2-(15&e)*t)&15)*(2-(255&e)*t)&255)*(2-((65535&e)*t&65535))&65535)*(2-e*t%this.DV)%this.DV)>0?this.DV-t:-t},i.prototype.isEven=function(){return 0==(this.t>0?1&this.data[0]:this.s)},i.prototype.exp=function(e,t){if(e>4294967295||e<1)return i.ONE;var r=s(),a=s(),n=t.convert(this),o=d(e)-1;for(n.copyTo(r);--o>=0;)if(t.sqrTo(r,a),(e&1<0)t.mulTo(a,n,r);else{var c=r;r=a,a=c}return t.revert(r)},i.prototype.toString=function(e){if(this.s<0)return"-"+this.negate().toString(e);var t;if(16==e)t=4;else if(8==e)t=3;else if(2==e)t=1;else if(32==e)t=5;else{if(4!=e)return this.toRadix(e);t=2}var r,a=(1<0)for(o>o)>0&&(n=!0,i=p(r));s>=0;)o>(o+=this.DB-t)):(r=this.data[s]>>(o-=t)&a,o<=0&&(o+=this.DB,--s)),r>0&&(n=!0),n&&(i+=p(r));return n?i:"0"},i.prototype.negate=function(){var e=s();return i.ZERO.subTo(this,e),e},i.prototype.abs=function(){return this.s<0?this.negate():this},i.prototype.compareTo=function(e){var t=this.s-e.s;if(0!=t)return t;var r=this.t;if(0!=(t=r-e.t))return this.s<0?-t:t;for(;--r>=0;)if(0!=(t=this.data[r]-e.data[r]))return t;return 0},i.prototype.bitLength=function(){return this.t<=0?0:this.DB*(this.t-1)+d(this.data[this.t-1]^this.s&this.DM)},i.prototype.mod=function(e){var t=s();return this.abs().divRemTo(e,null,t),this.s<0&&t.compareTo(i.ZERO)>0&&e.subTo(t,t),t},i.prototype.modPowInt=function(e,t){var r;return r=e<256||t.isEven()?new y(t):new g(t),this.exp(e,r)},i.ZERO=h(0),i.ONE=h(1),I.prototype.convert=b,I.prototype.revert=b,I.prototype.mulTo=function(e,t,r){e.multiplyTo(t,r)},I.prototype.sqrTo=function(e,t){e.squareTo(t)},A.prototype.convert=function(e){if(e.s<0||e.t>2*this.m.t)return e.mod(this.m);if(e.compareTo(this.m)<0)return e;var t=s();return e.copyTo(t),this.reduce(t),t},A.prototype.revert=function(e){return e},A.prototype.reduce=function(e){for(e.drShiftTo(this.m.t-1,this.r2),e.t>this.m.t+1&&(e.t=this.m.t+1,e.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);e.compareTo(this.r2)<0;)e.dAddOffset(1,this.m.t+1);for(e.subTo(this.r2,e);e.compareTo(this.m)>=0;)e.subTo(this.m,e)},A.prototype.mulTo=function(e,t,r){e.multiplyTo(t,r),this.reduce(r)},A.prototype.sqrTo=function(e,t){e.squareTo(t),this.reduce(t)};var B=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509],N=(1<<26)/B[B.length-1];i.prototype.chunkSize=function(e){return Math.floor(Math.LN2*this.DB/Math.log(e))},i.prototype.toRadix=function(e){if(null==e&&(e=10),0==this.signum()||e<2||e>36)return"0";var t=this.chunkSize(e),r=Math.pow(e,t),a=h(r),n=s(),i=s(),o="";for(this.divRemTo(a,n,i);n.signum()>0;)o=(r+i.intValue()).toString(e).substr(1)+o,n.divRemTo(a,n,i);return i.intValue().toString(e)+o},i.prototype.fromRadix=function(e,t){this.fromInt(0),null==t&&(t=10);for(var r=this.chunkSize(t),a=Math.pow(t,r),n=!1,s=0,o=0,c=0;c=r&&(this.dMultiply(a),this.dAddOffset(o,0),s=0,o=0))}s>0&&(this.dMultiply(Math.pow(t,s)),this.dAddOffset(o,0)),n&&i.ZERO.subTo(this,this)},i.prototype.fromNumber=function(e,t,r){if("number"==typeof t)if(e<2)this.fromInt(1);else for(this.fromNumber(e,r),this.testBit(e-1)||this.bitwiseTo(i.ONE.shiftLeft(e-1),v,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(t);)this.dAddOffset(2,0),this.bitLength()>e&&this.subTo(i.ONE.shiftLeft(e-1),this);else{var a=new Array,n=7&e;a.length=1+(e>>3),t.nextBytes(a),n>0?a[0]&=(1<>=this.DB;if(e.t>=this.DB;a+=this.s}else{for(a+=this.s;r>=this.DB;a+=e.s}t.s=a<0?-1:0,a>0?t.data[r++]=a:a<-1&&(t.data[r++]=this.DV+a),t.t=r,t.clamp()},i.prototype.dMultiply=function(e){this.data[this.t]=this.am(0,e-1,this,0,0,this.t),++this.t,this.clamp()},i.prototype.dAddOffset=function(e,t){if(0!=e){for(;this.t<=t;)this.data[this.t++]=0;for(this.data[t]+=e;this.data[t]>=this.DV;)this.data[t]-=this.DV,++t>=this.t&&(this.data[this.t++]=0),++this.data[t]}},i.prototype.multiplyLowerTo=function(e,t,r){var a,n=Math.min(this.t+e.t,t);for(r.s=0,r.t=n;n>0;)r.data[--n]=0;for(a=r.t-this.t;n=0;)r.data[a]=0;for(a=Math.max(t-this.t,0);a0)if(0==t)r=this.data[0]%e;else for(var a=this.t-1;a>=0;--a)r=(t*r+this.data[a])%e;return r},i.prototype.millerRabin=function(e){var t=this.subtract(i.ONE),r=t.getLowestSetBit();if(r<=0)return!1;for(var a,n=t.shiftRight(r),s={nextBytes:function(e){for(var t=0;t=0);var c=a.modPow(n,this);if(0!=c.compareTo(i.ONE)&&0!=c.compareTo(t)){for(var u=1;u++>24},i.prototype.shortValue=function(){return 0==this.t?this.s:this.data[0]<<16>>16},i.prototype.signum=function(){return this.s<0?-1:this.t<=0||1==this.t&&this.data[0]<=0?0:1},i.prototype.toByteArray=function(){var e=this.t,t=new Array;t[0]=this.s;var r,a=this.DB-e*this.DB%8,n=0;if(e-- >0)for(a>a)!=(this.s&this.DM)>>a&&(t[n++]=r|this.s<=0;)a<8?(r=(this.data[e]&(1<>(a+=this.DB-8)):(r=this.data[e]>>(a-=8)&255,a<=0&&(a+=this.DB,--e)),0!=(128&r)&&(r|=-256),0==n&&(128&this.s)!=(128&r)&&++n,(n>0||r!=this.s)&&(t[n++]=r);return t},i.prototype.equals=function(e){return 0==this.compareTo(e)},i.prototype.min=function(e){return this.compareTo(e)<0?this:e},i.prototype.max=function(e){return this.compareTo(e)>0?this:e},i.prototype.and=function(e){var t=s();return this.bitwiseTo(e,m,t),t},i.prototype.or=function(e){var t=s();return this.bitwiseTo(e,v,t),t},i.prototype.xor=function(e){var t=s();return this.bitwiseTo(e,C,t),t},i.prototype.andNot=function(e){var t=s();return this.bitwiseTo(e,E,t),t},i.prototype.not=function(){for(var e=s(),t=0;t=this.t?0!=this.s:0!=(this.data[t]&1<1){var p=s();for(a.sqrTo(o[1],p);c<=l;)o[c]=s(),a.mulTo(p,o[c-2],o[c]),c+=2}var f,m,v=e.t-1,C=!0,E=s();for(n=d(e.data[v])-1;v>=0;){for(n>=u?f=e.data[v]>>n-u&l:(f=(e.data[v]&(1<0&&(f|=e.data[v-1]>>this.DB+n-u)),c=r;0==(1&f);)f>>=1,--c;if((n-=c)<0&&(n+=this.DB,--v),C)o[f].copyTo(i),C=!1;else{for(;c>1;)a.sqrTo(i,E),a.sqrTo(E,i),c-=2;c>0?a.sqrTo(i,E):(m=i,i=E,E=m),a.mulTo(E,o[f],i)}for(;v>=0&&0==(e.data[v]&1<=0?(r.subTo(a,r),t&&n.subTo(o,n),s.subTo(c,s)):(a.subTo(r,a),t&&o.subTo(n,o),c.subTo(s,c))}return 0!=a.compareTo(i.ONE)?i.ZERO:c.compareTo(e)>=0?c.subtract(e):c.signum()<0?(c.addTo(e,c),c.signum()<0?c.add(e):c):c},i.prototype.pow=function(e){return this.exp(e,new I)},i.prototype.gcd=function(e){var t=this.s<0?this.negate():this.clone(),r=e.s<0?e.negate():e.clone();if(t.compareTo(r)<0){var a=t;t=r,r=a}var n=t.getLowestSetBit(),i=r.getLowestSetBit();if(i<0)return t;for(n0&&(t.rShiftTo(i,t),r.rShiftTo(i,r));t.signum()>0;)(n=t.getLowestSetBit())>0&&t.rShiftTo(n,t),(n=r.getLowestSetBit())>0&&r.rShiftTo(n,r),t.compareTo(r)>=0?(t.subTo(r,t),t.rShiftTo(1,t)):(r.subTo(t,r),r.rShiftTo(1,r));return i>0&&r.lShiftTo(i,r),r},i.prototype.isProbablePrime=function(e){var t,r=this.abs();if(1==r.t&&r.data[0]<=B[B.length-1]){for(t=0;t>>0,o>>>0];for(var c=n.fullMessageLength.length-1;c>=0;--c)n.fullMessageLength[c]+=o[1],o[1]=o[0]+(n.fullMessageLength[c]/4294967296>>>0),n.fullMessageLength[c]=n.fullMessageLength[c]>>>0,o[0]=o[1]/4294967296>>>0;return t.putBytes(i),l(e,r,t),(t.read>2048||0===t.length())&&t.compact(),n},n.digest=function(){var s=a.util.createBuffer();s.putBytes(t.bytes());var o=n.fullMessageLength[n.fullMessageLength.length-1]+n.messageLengthSize&n.blockLength-1;s.putBytes(i.substr(0,n.blockLength-o));for(var c,u=0,p=n.fullMessageLength.length-1;p>=0;--p)u=(c=8*n.fullMessageLength[p]+u)/4294967296>>>0,s.putInt32Le(c>>>0);var f={h0:e.h0,h1:e.h1,h2:e.h2,h3:e.h3};l(f,r,s);var h=a.util.createBuffer();return h.putInt32Le(f.h0),h.putInt32Le(f.h1),h.putInt32Le(f.h2),h.putInt32Le(f.h3),h},n};var i=null,s=null,o=null,c=null,u=!1;function l(e,t,r){for(var a,n,i,u,l,p,f,h=r.length();h>=64;){for(n=e.h0,i=e.h1,u=e.h2,l=e.h3,f=0;f<16;++f)t[f]=r.getInt32Le(),a=n+(l^i&(u^l))+c[f]+t[f],n=l,l=u,u=i,i+=a<<(p=o[f])|a>>>32-p;for(;f<32;++f)a=n+(u^l&(i^u))+c[f]+t[s[f]],n=l,l=u,u=i,i+=a<<(p=o[f])|a>>>32-p;for(;f<48;++f)a=n+(i^u^l)+c[f]+t[s[f]],n=l,l=u,u=i,i+=a<<(p=o[f])|a>>>32-p;for(;f<64;++f)a=n+(u^(i|~l))+c[f]+t[s[f]],n=l,l=u,u=i,i+=a<<(p=o[f])|a>>>32-p;e.h0=e.h0+n|0,e.h1=e.h1+i|0,e.h2=e.h2+u|0,e.h3=e.h3+l|0,h-=64}}},function(e,t,r){var a=r(0);r(8),r(4),r(1);var n,i=a.pkcs5=a.pkcs5||{};a.util.isNodejs&&!a.options.usePureJavaScript&&(n=r(16)),e.exports=a.pbkdf2=i.pbkdf2=function(e,t,r,i,s,o){if("function"==typeof s&&(o=s,s=null),a.util.isNodejs&&!a.options.usePureJavaScript&&n.pbkdf2&&(null===s||"object"!=typeof s)&&(n.pbkdf2Sync.length>4||!s||"sha1"===s))return"string"!=typeof s&&(s="sha1"),e=Buffer.from(e,"binary"),t=Buffer.from(t,"binary"),o?4===n.pbkdf2Sync.length?n.pbkdf2(e,t,r,i,(function(e,t){if(e)return o(e);o(null,t.toString("binary"))})):n.pbkdf2(e,t,r,i,s,(function(e,t){if(e)return o(e);o(null,t.toString("binary"))})):4===n.pbkdf2Sync.length?n.pbkdf2Sync(e,t,r,i).toString("binary"):n.pbkdf2Sync(e,t,r,i,s).toString("binary");if(null==s&&(s="sha1"),"string"==typeof s){if(!(s in a.md.algorithms))throw new Error("Unknown hash algorithm: "+s);s=a.md[s].create()}var c=s.digestLength;if(i>4294967295*c){var u=new Error("Derived key is too long.");if(o)return o(u);throw u}var l=Math.ceil(i/c),p=i-(l-1)*c,f=a.hmac.create();f.start(s,e);var h,d,y,g="";if(!o){for(var m=1;m<=l;++m){f.start(null,null),f.update(t),f.update(a.util.int32ToBytes(m)),h=y=f.digest().getBytes();for(var v=2;v<=r;++v)f.start(null,null),f.update(y),d=f.digest().getBytes(),h=a.util.xorBytes(h,d,c),y=d;g+=ml)return o(null,g);f.start(null,null),f.update(t),f.update(a.util.int32ToBytes(m)),h=y=f.digest().getBytes(),v=2,E()}function E(){if(v<=r)return f.start(null,null),f.update(y),d=f.digest().getBytes(),h=a.util.xorBytes(h,d,c),y=d,++v,a.util.setImmediate(E);g+=m128)throw new Error('Invalid "nsComment" content.');e.value=n.create(n.Class.UNIVERSAL,n.Type.IA5STRING,!1,e.comment)}else if("subjectKeyIdentifier"===e.name&&t.cert){var h=t.cert.generateSubjectKeyIdentifier();e.subjectKeyIdentifier=h.toHex(),e.value=n.create(n.Class.UNIVERSAL,n.Type.OCTETSTRING,!1,h.getBytes())}else if("authorityKeyIdentifier"===e.name&&t.cert){e.value=n.create(n.Class.UNIVERSAL,n.Type.SEQUENCE,!0,[]);l=e.value.value;if(e.keyIdentifier){var d=!0===e.keyIdentifier?t.cert.generateSubjectKeyIdentifier().getBytes():e.keyIdentifier;l.push(n.create(n.Class.CONTEXT_SPECIFIC,0,!1,d))}if(e.authorityCertIssuer){var g=[n.create(n.Class.CONTEXT_SPECIFIC,4,!0,[y(!0===e.authorityCertIssuer?t.cert.issuer:e.authorityCertIssuer)])];l.push(n.create(n.Class.CONTEXT_SPECIFIC,1,!0,g))}if(e.serialNumber){var m=a.util.hexToBytes(!0===e.serialNumber?t.cert.serialNumber:e.serialNumber);l.push(n.create(n.Class.CONTEXT_SPECIFIC,2,!1,m))}}else if("cRLDistributionPoints"===e.name){e.value=n.create(n.Class.UNIVERSAL,n.Type.SEQUENCE,!0,[]);l=e.value.value;var v,C=n.create(n.Class.UNIVERSAL,n.Type.SEQUENCE,!0,[]),E=n.create(n.Class.CONTEXT_SPECIFIC,0,!0,[]);for(f=0;f2)throw new Error("Cannot read notBefore/notAfter validity times; more than two times were provided in the certificate.");if(p.length<2)throw new Error("Cannot read notBefore/notAfter validity times; they were not provided as either UTCTime or GeneralizedTime.");if(c.validity.notBefore=p[0],c.validity.notAfter=p[1],c.tbsCertificate=r.tbsCertificate,t){var f;if(c.md=null,c.signatureOid in s)switch(s[c.signatureOid]){case"sha1WithRSAEncryption":c.md=a.md.sha1.create();break;case"md5WithRSAEncryption":c.md=a.md.md5.create();break;case"sha256WithRSAEncryption":c.md=a.md.sha256.create();break;case"sha384WithRSAEncryption":c.md=a.md.sha384.create();break;case"sha512WithRSAEncryption":c.md=a.md.sha512.create();break;case"RSASSA-PSS":c.md=a.md.sha256.create()}if(null===c.md)throw(f=new Error("Could not compute certificate digest. Unknown signature OID.")).signatureOid=c.signatureOid,f;var y=n.toDer(c.tbsCertificate);c.md.update(y.getBytes())}var m=a.md.sha1.create();c.issuer.getField=function(e){return h(c.issuer,e)},c.issuer.addField=function(e){g([e]),c.issuer.attributes.push(e)},c.issuer.attributes=i.RDNAttributesAsArray(r.certIssuer,m),r.certIssuerUniqueId&&(c.issuer.uniqueId=r.certIssuerUniqueId),c.issuer.hash=m.digest().toHex();var v=a.md.sha1.create();return c.subject.getField=function(e){return h(c.subject,e)},c.subject.addField=function(e){g([e]),c.subject.attributes.push(e)},c.subject.attributes=i.RDNAttributesAsArray(r.certSubject,v),r.certSubjectUniqueId&&(c.subject.uniqueId=r.certSubjectUniqueId),c.subject.hash=v.digest().toHex(),r.certExtensions?c.extensions=i.certificateExtensionsFromAsn1(r.certExtensions):c.extensions=[],c.publicKey=i.publicKeyFromAsn1(r.subjectPublicKeyInfo),c},i.certificateExtensionsFromAsn1=function(e){for(var t=[],r=0;r1&&(r=c.value.charCodeAt(1),i=c.value.length>2?c.value.charCodeAt(2):0),t.digitalSignature=128==(128&r),t.nonRepudiation=64==(64&r),t.keyEncipherment=32==(32&r),t.dataEncipherment=16==(16&r),t.keyAgreement=8==(8&r),t.keyCertSign=4==(4&r),t.cRLSign=2==(2&r),t.encipherOnly=1==(1&r),t.decipherOnly=128==(128&i)}else if("basicConstraints"===t.name){(c=n.fromDer(t.value)).value.length>0&&c.value[0].type===n.Type.BOOLEAN?t.cA=0!==c.value[0].value.charCodeAt(0):t.cA=!1;var o=null;c.value.length>0&&c.value[0].type===n.Type.INTEGER?o=c.value[0].value:c.value.length>1&&(o=c.value[1].value),null!==o&&(t.pathLenConstraint=n.derToInteger(o))}else if("extKeyUsage"===t.name)for(var c=n.fromDer(t.value),u=0;u1&&(r=c.value.charCodeAt(1)),t.client=128==(128&r),t.server=64==(64&r),t.email=32==(32&r),t.objsign=16==(16&r),t.reserved=8==(8&r),t.sslCA=4==(4&r),t.emailCA=2==(2&r),t.objCA=1==(1&r)}else if("subjectAltName"===t.name||"issuerAltName"===t.name){var p;t.altNames=[];c=n.fromDer(t.value);for(var f=0;f=E&&e0&&s.value.push(i.certificateExtensionsToAsn1(e.extensions)),s},i.getCertificationRequestInfo=function(e){return n.create(n.Class.UNIVERSAL,n.Type.SEQUENCE,!0,[n.create(n.Class.UNIVERSAL,n.Type.INTEGER,!1,n.integerToDer(e.version).getBytes()),y(e.subject),i.publicKeyToAsn1(e.publicKey),C(e)])},i.distinguishedNameToAsn1=function(e){return y(e)},i.certificateToAsn1=function(e){var t=e.tbsCertificate||i.getTBSCertificate(e);return n.create(n.Class.UNIVERSAL,n.Type.SEQUENCE,!0,[t,n.create(n.Class.UNIVERSAL,n.Type.SEQUENCE,!0,[n.create(n.Class.UNIVERSAL,n.Type.OID,!1,n.oidToDer(e.signatureOid).getBytes()),v(e.signatureOid,e.signatureParameters)]),n.create(n.Class.UNIVERSAL,n.Type.BITSTRING,!1,String.fromCharCode(0)+e.signature)])},i.certificateExtensionsToAsn1=function(e){var t=n.create(n.Class.CONTEXT_SPECIFIC,3,!0,[]),r=n.create(n.Class.UNIVERSAL,n.Type.SEQUENCE,!0,[]);t.value.push(r);for(var a=0;al.validity.notAfter)&&(c={message:"Certificate is not valid yet or has expired.",error:i.certificateError.certificate_expired,notBefore:l.validity.notBefore,notAfter:l.validity.notAfter,now:s}),null===c){if(null===(p=t[0]||e.getIssuer(l))&&l.isIssuer(l)&&(f=!0,p=l),p){var h=p;a.util.isArray(h)||(h=[h]);for(var d=!1;!d&&h.length>0;){p=h.shift();try{d=p.verify(l)}catch(e){}}d||(c={message:"Certificate signature is invalid.",error:i.certificateError.bad_certificate})}null!==c||p&&!f||e.hasCertificate(l)||(c={message:"Certificate is not trusted.",error:i.certificateError.unknown_ca})}if(null===c&&p&&!l.isIssuer(p)&&(c={message:"Certificate issuer is invalid.",error:i.certificateError.bad_certificate}),null===c)for(var y={keyUsage:!0,basicConstraints:!0},g=0;null===c&&gv.pathLenConstraint&&(c={message:"Certificate basicConstraints pathLenConstraint violated.",error:i.certificateError.bad_certificate})}var E=null===c||c.error,S=r.verify?r.verify(E,u,n):E;if(!0!==S)throw!0===E&&(c={message:"The application rejected the certificate.",error:i.certificateError.bad_certificate}),(S||0===S)&&("object"!=typeof S||a.util.isArray(S)?"string"==typeof S&&(c.error=S):(S.message&&(c.message=S.message),S.error&&(c.error=S.error))),c;c=null,o=!1,++u}while(t.length>0);return!0}},function(e,t,r){var a=r(0);r(2),r(1),(e.exports=a.pss=a.pss||{}).create=function(e){3===arguments.length&&(e={md:arguments[0],mgf:arguments[1],saltLength:arguments[2]});var t,r=e.md,n=e.mgf,i=r.digestLength,s=e.salt||null;if("string"==typeof s&&(s=a.util.createBuffer(s)),"saltLength"in e)t=e.saltLength;else{if(null===s)throw new Error("Salt length not specified or specific salt not given.");t=s.length()}if(null!==s&&s.length()!==t)throw new Error("Given salt length does not match length of given salt.");var o=e.prng||a.random,c={encode:function(e,c){var u,l,p=c-1,f=Math.ceil(p/8),h=e.digest().getBytes();if(f>8*f-p&255;return(E=String.fromCharCode(E.charCodeAt(0)&~S)+E.substr(1))+y+String.fromCharCode(188)},verify:function(e,s,o){var c,u=o-1,l=Math.ceil(u/8);if(s=s.substr(-l),l>8*l-u&255;if(0!=(f.charCodeAt(0)&d))throw new Error("Bits beyond keysize not zero as expected.");var y=n.generate(h,p),g="";for(c=0;c4){var r=e;e=a.util.createBuffer();for(var n=0;n0))return!0;for(var a=0;a0))return!0;for(var a=0;a0)return!1;var r=e.length(),a=e.at(r-1);return!(a>this.blockSize<<2)&&(e.truncate(a),!0)},n.cbc=function(e){e=e||{},this.name="CBC",this.cipher=e.cipher,this.blockSize=e.blockSize||16,this._ints=this.blockSize/4,this._inBlock=new Array(this._ints),this._outBlock=new Array(this._ints)},n.cbc.prototype.start=function(e){if(null===e.iv){if(!this._prev)throw new Error("Invalid IV parameter.");this._iv=this._prev.slice(0)}else{if(!("iv"in e))throw new Error("Invalid IV parameter.");this._iv=i(e.iv,this.blockSize),this._prev=this._iv.slice(0)}},n.cbc.prototype.encrypt=function(e,t,r){if(e.length()0))return!0;for(var a=0;a0))return!0;for(var a=0;a0)return!1;var r=e.length(),a=e.at(r-1);return!(a>this.blockSize<<2)&&(e.truncate(a),!0)},n.cfb=function(e){e=e||{},this.name="CFB",this.cipher=e.cipher,this.blockSize=e.blockSize||16,this._ints=this.blockSize/4,this._inBlock=null,this._outBlock=new Array(this._ints),this._partialBlock=new Array(this._ints),this._partialOutput=a.util.createBuffer(),this._partialBytes=0},n.cfb.prototype.start=function(e){if(!("iv"in e))throw new Error("Invalid IV parameter.");this._iv=i(e.iv,this.blockSize),this._inBlock=this._iv.slice(0),this._partialBytes=0},n.cfb.prototype.encrypt=function(e,t,r){var a=e.length();if(0===a)return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),0===this._partialBytes&&a>=this.blockSize)for(var n=0;n0&&(i=this.blockSize-i),this._partialOutput.clear();for(n=0;n0)e.read-=this.blockSize;else for(n=0;n0&&this._partialOutput.getBytes(this._partialBytes),i>0&&!r)return t.putBytes(this._partialOutput.getBytes(i-this._partialBytes)),this._partialBytes=i,!0;t.putBytes(this._partialOutput.getBytes(a-this._partialBytes)),this._partialBytes=0}},n.cfb.prototype.decrypt=function(e,t,r){var a=e.length();if(0===a)return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),0===this._partialBytes&&a>=this.blockSize)for(var n=0;n0&&(i=this.blockSize-i),this._partialOutput.clear();for(n=0;n0)e.read-=this.blockSize;else for(n=0;n0&&this._partialOutput.getBytes(this._partialBytes),i>0&&!r)return t.putBytes(this._partialOutput.getBytes(i-this._partialBytes)),this._partialBytes=i,!0;t.putBytes(this._partialOutput.getBytes(a-this._partialBytes)),this._partialBytes=0}},n.ofb=function(e){e=e||{},this.name="OFB",this.cipher=e.cipher,this.blockSize=e.blockSize||16,this._ints=this.blockSize/4,this._inBlock=null,this._outBlock=new Array(this._ints),this._partialOutput=a.util.createBuffer(),this._partialBytes=0},n.ofb.prototype.start=function(e){if(!("iv"in e))throw new Error("Invalid IV parameter.");this._iv=i(e.iv,this.blockSize),this._inBlock=this._iv.slice(0),this._partialBytes=0},n.ofb.prototype.encrypt=function(e,t,r){var a=e.length();if(0===e.length())return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),0===this._partialBytes&&a>=this.blockSize)for(var n=0;n0&&(i=this.blockSize-i),this._partialOutput.clear();for(n=0;n0)e.read-=this.blockSize;else for(n=0;n0&&this._partialOutput.getBytes(this._partialBytes),i>0&&!r)return t.putBytes(this._partialOutput.getBytes(i-this._partialBytes)),this._partialBytes=i,!0;t.putBytes(this._partialOutput.getBytes(a-this._partialBytes)),this._partialBytes=0}},n.ofb.prototype.decrypt=n.ofb.prototype.encrypt,n.ctr=function(e){e=e||{},this.name="CTR",this.cipher=e.cipher,this.blockSize=e.blockSize||16,this._ints=this.blockSize/4,this._inBlock=null,this._outBlock=new Array(this._ints),this._partialOutput=a.util.createBuffer(),this._partialBytes=0},n.ctr.prototype.start=function(e){if(!("iv"in e))throw new Error("Invalid IV parameter.");this._iv=i(e.iv,this.blockSize),this._inBlock=this._iv.slice(0),this._partialBytes=0},n.ctr.prototype.encrypt=function(e,t,r){var a=e.length();if(0===a)return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),0===this._partialBytes&&a>=this.blockSize)for(var n=0;n0&&(i=this.blockSize-i),this._partialOutput.clear();for(n=0;n0&&(e.read-=this.blockSize),this._partialBytes>0&&this._partialOutput.getBytes(this._partialBytes),i>0&&!r)return t.putBytes(this._partialOutput.getBytes(i-this._partialBytes)),this._partialBytes=i,!0;t.putBytes(this._partialOutput.getBytes(a-this._partialBytes)),this._partialBytes=0}s(this._inBlock)},n.ctr.prototype.decrypt=n.ctr.prototype.encrypt,n.gcm=function(e){e=e||{},this.name="GCM",this.cipher=e.cipher,this.blockSize=e.blockSize||16,this._ints=this.blockSize/4,this._inBlock=new Array(this._ints),this._outBlock=new Array(this._ints),this._partialOutput=a.util.createBuffer(),this._partialBytes=0,this._R=3774873600},n.gcm.prototype.start=function(e){if(!("iv"in e))throw new Error("Invalid IV parameter.");var t,r=a.util.createBuffer(e.iv);if(this._cipherLength=0,t="additionalData"in e?a.util.createBuffer(e.additionalData):a.util.createBuffer(),this._tagLength="tagLength"in e?e.tagLength:128,this._tag=null,e.decrypt&&(this._tag=a.util.createBuffer(e.tag).getBytes(),this._tag.length!==this._tagLength/8))throw new Error("Authentication tag does not match tag length.");this._hashBlock=new Array(this._ints),this.tag=null,this._hashSubkey=new Array(this._ints),this.cipher.encrypt([0,0,0,0],this._hashSubkey),this.componentBits=4,this._m=this.generateHashTable(this._hashSubkey,this.componentBits);var n=r.length();if(12===n)this._j0=[r.getInt32(),r.getInt32(),r.getInt32(),1];else{for(this._j0=[0,0,0,0];r.length()>0;)this._j0=this.ghash(this._hashSubkey,this._j0,[r.getInt32(),r.getInt32(),r.getInt32(),r.getInt32()]);this._j0=this.ghash(this._hashSubkey,this._j0,[0,0].concat(o(8*n)))}this._inBlock=this._j0.slice(0),s(this._inBlock),this._partialBytes=0,t=a.util.createBuffer(t),this._aDataLength=o(8*t.length());var i=t.length()%this.blockSize;for(i&&t.fillWithByte(0,this.blockSize-i),this._s=[0,0,0,0];t.length()>0;)this._s=this.ghash(this._hashSubkey,this._s,[t.getInt32(),t.getInt32(),t.getInt32(),t.getInt32()])},n.gcm.prototype.encrypt=function(e,t,r){var a=e.length();if(0===a)return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),0===this._partialBytes&&a>=this.blockSize){for(var n=0;n0&&(i=this.blockSize-i),this._partialOutput.clear();for(n=0;n0&&this._partialOutput.getBytes(this._partialBytes),i>0&&!r)return e.read-=this.blockSize,t.putBytes(this._partialOutput.getBytes(i-this._partialBytes)),this._partialBytes=i,!0;t.putBytes(this._partialOutput.getBytes(a-this._partialBytes)),this._partialBytes=0}this._s=this.ghash(this._hashSubkey,this._s,this._outBlock),s(this._inBlock)},n.gcm.prototype.decrypt=function(e,t,r){var a=e.length();if(a0))return!0;this.cipher.encrypt(this._inBlock,this._outBlock),s(this._inBlock),this._hashBlock[0]=e.getInt32(),this._hashBlock[1]=e.getInt32(),this._hashBlock[2]=e.getInt32(),this._hashBlock[3]=e.getInt32(),this._s=this.ghash(this._hashSubkey,this._s,this._hashBlock);for(var n=0;n0;--a)t[a]=e[a]>>>1|(1&e[a-1])<<31;t[0]=e[0]>>>1,r&&(t[0]^=this._R)},n.gcm.prototype.tableMultiply=function(e){for(var t=[0,0,0,0],r=0;r<32;++r){var a=e[r/8|0]>>>4*(7-r%8)&15,n=this._m[r][a];t[0]^=n[0],t[1]^=n[1],t[2]^=n[2],t[3]^=n[3]}return t},n.gcm.prototype.ghash=function(e,t,r){return t[0]^=r[0],t[1]^=r[1],t[2]^=r[2],t[3]^=r[3],this.tableMultiply(t)},n.gcm.prototype.generateHashTable=function(e,t){for(var r=8/t,a=4*r,n=16*r,i=new Array(n),s=0;s>>1,n=new Array(r);n[a]=e.slice(0);for(var i=a>>>1;i>0;)this.pow(n[2*i],n[i]=[]),i>>=1;for(i=2;i>1,o=s+(1&e.length),c=e.substr(0,o),u=e.substr(s,o),l=a.util.createBuffer(),p=a.hmac.create();r=t+r;var f=Math.ceil(n/16),h=Math.ceil(n/20);p.start("MD5",c);var d=a.util.createBuffer();l.putBytes(r);for(var y=0;y0&&(u.queue(e,u.createAlert(e,{level:u.Alert.Level.warning,description:u.Alert.Description.no_renegotiation})),u.flush(e)),e.process()},u.parseHelloMessage=function(e,t,r){var n=null,i=e.entity===u.ConnectionEnd.client;if(r<38)e.error(e,{message:i?"Invalid ServerHello message. Message too short.":"Invalid ClientHello message. Message too short.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.illegal_parameter}});else{var s=t.fragment,c=s.length();if(n={version:{major:s.getByte(),minor:s.getByte()},random:a.util.createBuffer(s.getBytes(32)),session_id:o(s,1),extensions:[]},i?(n.cipher_suite=s.getBytes(2),n.compression_method=s.getByte()):(n.cipher_suites=o(s,2),n.compression_methods=o(s,1)),(c=r-(c-s.length()))>0){for(var l=o(s,2);l.length()>0;)n.extensions.push({type:[l.getByte(),l.getByte()],data:o(l,2)});if(!i)for(var p=0;p0;){if(0!==h.getByte())break;e.session.extensions.server_name.serverNameList.push(o(h,2).getBytes())}}}if(e.session.version&&(n.version.major!==e.session.version.major||n.version.minor!==e.session.version.minor))return e.error(e,{message:"TLS version change is disallowed during renegotiation.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.protocol_version}});if(i)e.session.cipherSuite=u.getCipherSuite(n.cipher_suite);else for(var d=a.util.createBuffer(n.cipher_suites.bytes());d.length()>0&&(e.session.cipherSuite=u.getCipherSuite(d.getBytes(2)),null===e.session.cipherSuite););if(null===e.session.cipherSuite)return e.error(e,{message:"No cipher suites in common.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.handshake_failure},cipherSuite:a.util.bytesToHex(n.cipher_suite)});e.session.compressionMethod=i?n.compression_method:u.CompressionMethod.none}return n},u.createSecurityParameters=function(e,t){var r=e.entity===u.ConnectionEnd.client,a=t.random.bytes(),n=r?e.session.sp.client_random:a,i=r?a:u.createRandom().getBytes();e.session.sp={entity:e.entity,prf_algorithm:u.PRFAlgorithm.tls_prf_sha256,bulk_cipher_algorithm:null,cipher_type:null,enc_key_length:null,block_length:null,fixed_iv_length:null,record_iv_length:null,mac_algorithm:null,mac_length:null,mac_key_length:null,compression_algorithm:e.session.compressionMethod,pre_master_secret:null,master_secret:null,client_random:n,server_random:i}},u.handleServerHello=function(e,t,r){var a=u.parseHelloMessage(e,t,r);if(!e.fail){if(!(a.version.minor<=e.version.minor))return e.error(e,{message:"Incompatible TLS version.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.protocol_version}});e.version.minor=a.version.minor,e.session.version=e.version;var n=a.session_id.bytes();n.length>0&&n===e.session.id?(e.expect=d,e.session.resuming=!0,e.session.sp.server_random=a.random.bytes()):(e.expect=l,e.session.resuming=!1,u.createSecurityParameters(e,a)),e.session.id=n,e.process()}},u.handleClientHello=function(e,t,r){var n=u.parseHelloMessage(e,t,r);if(!e.fail){var i=n.session_id.bytes(),s=null;if(e.sessionCache&&(null===(s=e.sessionCache.getSession(i))?i="":(s.version.major!==n.version.major||s.version.minor>n.version.minor)&&(s=null,i="")),0===i.length&&(i=a.random.getBytes(32)),e.session.id=i,e.session.clientHelloVersion=n.version,e.session.sp={},s)e.version=e.session.version=s.version,e.session.sp=s.sp;else{for(var o,c=1;c0;)n=o(c.certificate_list,3),i=a.asn1.fromDer(n),n=a.pki.certificateFromAsn1(i,!0),l.push(n)}catch(t){return e.error(e,{message:"Could not parse certificate list.",cause:t,send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.bad_certificate}})}var f=e.entity===u.ConnectionEnd.client;!f&&!0!==e.verifyClient||0!==l.length?0===l.length?e.expect=f?p:C:(f?e.session.serverCertificate=l[0]:e.session.clientCertificate=l[0],u.verifyCertificateChain(e,l)&&(e.expect=f?p:C)):e.error(e,{message:f?"No server certificate provided.":"No client certificate provided.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.illegal_parameter}}),e.process()},u.handleServerKeyExchange=function(e,t,r){if(r>0)return e.error(e,{message:"Invalid key parameters. Only RSA is supported.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.unsupported_certificate}});e.expect=f,e.process()},u.handleClientKeyExchange=function(e,t,r){if(r<48)return e.error(e,{message:"Invalid key parameters. Only RSA is supported.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.unsupported_certificate}});var n=t.fragment,i={enc_pre_master_secret:o(n,2).getBytes()},s=null;if(e.getPrivateKey)try{s=e.getPrivateKey(e,e.session.serverCertificate),s=a.pki.privateKeyFromPem(s)}catch(t){e.error(e,{message:"Could not get private key.",cause:t,send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.internal_error}})}if(null===s)return e.error(e,{message:"No private key set.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.internal_error}});try{var c=e.session.sp;c.pre_master_secret=s.decrypt(i.enc_pre_master_secret);var l=e.session.clientHelloVersion;if(l.major!==c.pre_master_secret.charCodeAt(0)||l.minor!==c.pre_master_secret.charCodeAt(1))throw new Error("TLS version rollback attack detected.")}catch(e){c.pre_master_secret=a.random.getBytes(48)}e.expect=S,null!==e.session.clientCertificate&&(e.expect=E),e.process()},u.handleCertificateRequest=function(e,t,r){if(r<3)return e.error(e,{message:"Invalid CertificateRequest. Message too short.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.illegal_parameter}});var a=t.fragment,n={certificate_types:o(a,1),certificate_authorities:o(a,2)};e.session.certificateRequest=n,e.expect=h,e.process()},u.handleCertificateVerify=function(e,t,r){if(r<2)return e.error(e,{message:"Invalid CertificateVerify. Message too short.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.illegal_parameter}});var n=t.fragment;n.read-=4;var i=n.bytes();n.read+=4;var s={signature:o(n,2).getBytes()},c=a.util.createBuffer();c.putBuffer(e.session.md5.digest()),c.putBuffer(e.session.sha1.digest()),c=c.getBytes();try{if(!e.session.clientCertificate.publicKey.verify(c,s.signature,"NONE"))throw new Error("CertificateVerify signature does not match.");e.session.md5.update(i),e.session.sha1.update(i)}catch(t){return e.error(e,{message:"Bad signature in CertificateVerify.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.handshake_failure}})}e.expect=S,e.process()},u.handleServerHelloDone=function(e,t,r){if(r>0)return e.error(e,{message:"Invalid ServerHelloDone message. Invalid length.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.record_overflow}});if(null===e.serverCertificate){var n={message:"No server certificate provided. Not enough security.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.insufficient_security}},i=e.verify(e,n.alert.description,0,[]);if(!0!==i)return(i||0===i)&&("object"!=typeof i||a.util.isArray(i)?"number"==typeof i&&(n.alert.description=i):(i.message&&(n.message=i.message),i.alert&&(n.alert.description=i.alert))),e.error(e,n)}null!==e.session.certificateRequest&&(t=u.createRecord(e,{type:u.ContentType.handshake,data:u.createCertificate(e)}),u.queue(e,t)),t=u.createRecord(e,{type:u.ContentType.handshake,data:u.createClientKeyExchange(e)}),u.queue(e,t),e.expect=m;var s=function(e,t){null!==e.session.certificateRequest&&null!==e.session.clientCertificate&&u.queue(e,u.createRecord(e,{type:u.ContentType.handshake,data:u.createCertificateVerify(e,t)})),u.queue(e,u.createRecord(e,{type:u.ContentType.change_cipher_spec,data:u.createChangeCipherSpec()})),e.state.pending=u.createConnectionState(e),e.state.current.write=e.state.pending.write,u.queue(e,u.createRecord(e,{type:u.ContentType.handshake,data:u.createFinished(e)})),e.expect=d,u.flush(e),e.process()};if(null===e.session.certificateRequest||null===e.session.clientCertificate)return s(e,null);u.getClientSignature(e,s)},u.handleChangeCipherSpec=function(e,t){if(1!==t.fragment.getByte())return e.error(e,{message:"Invalid ChangeCipherSpec message received.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.illegal_parameter}});var r=e.entity===u.ConnectionEnd.client;(e.session.resuming&&r||!e.session.resuming&&!r)&&(e.state.pending=u.createConnectionState(e)),e.state.current.read=e.state.pending.read,(!e.session.resuming&&r||e.session.resuming&&!r)&&(e.state.pending=null),e.expect=r?y:T,e.process()},u.handleFinished=function(e,t,r){var i=t.fragment;i.read-=4;var s=i.bytes();i.read+=4;var o=t.fragment.getBytes();(i=a.util.createBuffer()).putBuffer(e.session.md5.digest()),i.putBuffer(e.session.sha1.digest());var c=e.entity===u.ConnectionEnd.client,l=c?"server finished":"client finished",p=e.session.sp;if((i=n(p.master_secret,l,i.getBytes(),12)).getBytes()!==o)return e.error(e,{message:"Invalid verify_data in Finished message.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.decrypt_error}});e.session.md5.update(s),e.session.sha1.update(s),(e.session.resuming&&c||!e.session.resuming&&!c)&&(u.queue(e,u.createRecord(e,{type:u.ContentType.change_cipher_spec,data:u.createChangeCipherSpec()})),e.state.current.write=e.state.pending.write,e.state.pending=null,u.queue(e,u.createRecord(e,{type:u.ContentType.handshake,data:u.createFinished(e)}))),e.expect=c?g:I,e.handshaking=!1,++e.handshakes,e.peerCertificate=c?e.session.serverCertificate:e.session.clientCertificate,u.flush(e),e.isConnected=!0,e.connected(e),e.process()},u.handleAlert=function(e,t){var r,a=t.fragment,n={level:a.getByte(),description:a.getByte()};switch(n.description){case u.Alert.Description.close_notify:r="Connection closed.";break;case u.Alert.Description.unexpected_message:r="Unexpected message.";break;case u.Alert.Description.bad_record_mac:r="Bad record MAC.";break;case u.Alert.Description.decryption_failed:r="Decryption failed.";break;case u.Alert.Description.record_overflow:r="Record overflow.";break;case u.Alert.Description.decompression_failure:r="Decompression failed.";break;case u.Alert.Description.handshake_failure:r="Handshake failure.";break;case u.Alert.Description.bad_certificate:r="Bad certificate.";break;case u.Alert.Description.unsupported_certificate:r="Unsupported certificate.";break;case u.Alert.Description.certificate_revoked:r="Certificate revoked.";break;case u.Alert.Description.certificate_expired:r="Certificate expired.";break;case u.Alert.Description.certificate_unknown:r="Certificate unknown.";break;case u.Alert.Description.illegal_parameter:r="Illegal parameter.";break;case u.Alert.Description.unknown_ca:r="Unknown certificate authority.";break;case u.Alert.Description.access_denied:r="Access denied.";break;case u.Alert.Description.decode_error:r="Decode error.";break;case u.Alert.Description.decrypt_error:r="Decrypt error.";break;case u.Alert.Description.export_restriction:r="Export restriction.";break;case u.Alert.Description.protocol_version:r="Unsupported protocol version.";break;case u.Alert.Description.insufficient_security:r="Insufficient security.";break;case u.Alert.Description.internal_error:r="Internal error.";break;case u.Alert.Description.user_canceled:r="User canceled.";break;case u.Alert.Description.no_renegotiation:r="Renegotiation not supported.";break;default:r="Unknown error."}if(n.description===u.Alert.Description.close_notify)return e.close();e.error(e,{message:r,send:!1,origin:e.entity===u.ConnectionEnd.client?"server":"client",alert:n}),e.process()},u.handleHandshake=function(e,t){var r=t.fragment,n=r.getByte(),i=r.getInt24();if(i>r.length())return e.fragmented=t,t.fragment=a.util.createBuffer(),r.read-=4,e.process();e.fragmented=null,r.read-=4;var s=r.bytes(i+4);r.read+=4,n in K[e.entity][e.expect]?(e.entity!==u.ConnectionEnd.server||e.open||e.fail||(e.handshaking=!0,e.session={version:null,extensions:{server_name:{serverNameList:[]}},cipherSuite:null,compressionMethod:null,serverCertificate:null,clientCertificate:null,md5:a.md.md5.create(),sha1:a.md.sha1.create()}),n!==u.HandshakeType.hello_request&&n!==u.HandshakeType.certificate_verify&&n!==u.HandshakeType.finished&&(e.session.md5.update(s),e.session.sha1.update(s)),K[e.entity][e.expect][n](e,t,i)):u.handleUnexpected(e,t)},u.handleApplicationData=function(e,t){e.data.putBuffer(t.fragment),e.dataReady(e),e.process()},u.handleHeartbeat=function(e,t){var r=t.fragment,n=r.getByte(),i=r.getInt16(),s=r.getBytes(i);if(n===u.HeartbeatMessageType.heartbeat_request){if(e.handshaking||i>s.length)return e.process();u.queue(e,u.createRecord(e,{type:u.ContentType.heartbeat,data:u.createHeartbeat(u.HeartbeatMessageType.heartbeat_response,s)})),u.flush(e)}else if(n===u.HeartbeatMessageType.heartbeat_response){if(s!==e.expectedHeartbeatPayload)return e.process();e.heartbeatReceived&&e.heartbeatReceived(e,a.util.createBuffer(s))}e.process()};var l=1,p=2,f=3,h=4,d=5,y=6,g=7,m=8,v=1,C=2,E=3,S=4,T=5,I=6,b=u.handleUnexpected,A=u.handleChangeCipherSpec,B=u.handleAlert,N=u.handleHandshake,k=u.handleApplicationData,w=u.handleHeartbeat,R=[];R[u.ConnectionEnd.client]=[[b,B,N,b,w],[b,B,N,b,w],[b,B,N,b,w],[b,B,N,b,w],[b,B,N,b,w],[A,B,b,b,w],[b,B,N,b,w],[b,B,N,k,w],[b,B,N,b,w]],R[u.ConnectionEnd.server]=[[b,B,N,b,w],[b,B,N,b,w],[b,B,N,b,w],[b,B,N,b,w],[A,B,b,b,w],[b,B,N,b,w],[b,B,N,k,w],[b,B,N,b,w]];var _=u.handleHelloRequest,L=u.handleServerHello,U=u.handleCertificate,D=u.handleServerKeyExchange,P=u.handleCertificateRequest,V=u.handleServerHelloDone,O=u.handleFinished,K=[];K[u.ConnectionEnd.client]=[[b,b,L,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b],[_,b,b,b,b,b,b,b,b,b,b,U,D,P,V,b,b,b,b,b,b],[_,b,b,b,b,b,b,b,b,b,b,b,D,P,V,b,b,b,b,b,b],[_,b,b,b,b,b,b,b,b,b,b,b,b,P,V,b,b,b,b,b,b],[_,b,b,b,b,b,b,b,b,b,b,b,b,b,V,b,b,b,b,b,b],[_,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b],[_,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,O],[_,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b],[_,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b]];var x=u.handleClientHello,M=u.handleClientKeyExchange,F=u.handleCertificateVerify;K[u.ConnectionEnd.server]=[[b,x,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b],[b,b,b,b,b,b,b,b,b,b,b,U,b,b,b,b,b,b,b,b,b],[b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,M,b,b,b,b],[b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,F,b,b,b,b,b],[b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b],[b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,O],[b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b],[b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b]],u.generateKeys=function(e,t){var r=n,a=t.client_random+t.server_random;e.session.resuming||(t.master_secret=r(t.pre_master_secret,"master secret",a,48).bytes(),t.pre_master_secret=null),a=t.server_random+t.client_random;var i=2*t.mac_key_length+2*t.enc_key_length,s=e.version.major===u.Versions.TLS_1_0.major&&e.version.minor===u.Versions.TLS_1_0.minor;s&&(i+=2*t.fixed_iv_length);var o=r(t.master_secret,"key expansion",a,i),c={client_write_MAC_key:o.getBytes(t.mac_key_length),server_write_MAC_key:o.getBytes(t.mac_key_length),client_write_key:o.getBytes(t.enc_key_length),server_write_key:o.getBytes(t.enc_key_length)};return s&&(c.client_write_IV=o.getBytes(t.fixed_iv_length),c.server_write_IV=o.getBytes(t.fixed_iv_length)),c},u.createConnectionState=function(e){var t=e.entity===u.ConnectionEnd.client,r=function(){var e={sequenceNumber:[0,0],macKey:null,macLength:0,macFunction:null,cipherState:null,cipherFunction:function(e){return!0},compressionState:null,compressFunction:function(e){return!0},updateSequenceNumber:function(){4294967295===e.sequenceNumber[1]?(e.sequenceNumber[1]=0,++e.sequenceNumber[0]):++e.sequenceNumber[1]}};return e},a={read:r(),write:r()};if(a.read.update=function(e,t){return a.read.cipherFunction(t,a.read)?a.read.compressFunction(e,t,a.read)||e.error(e,{message:"Could not decompress record.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.decompression_failure}}):e.error(e,{message:"Could not decrypt record or bad MAC.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.bad_record_mac}}),!e.fail},a.write.update=function(e,t){return a.write.compressFunction(e,t,a.write)?a.write.cipherFunction(t,a.write)||e.error(e,{message:"Could not encrypt record.",send:!1,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.internal_error}}):e.error(e,{message:"Could not compress record.",send:!1,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.internal_error}}),!e.fail},e.session){var n=e.session.sp;switch(e.session.cipherSuite.initSecurityParameters(n),n.keys=u.generateKeys(e,n),a.read.macKey=t?n.keys.server_write_MAC_key:n.keys.client_write_MAC_key,a.write.macKey=t?n.keys.client_write_MAC_key:n.keys.server_write_MAC_key,e.session.cipherSuite.initConnectionState(a,e,n),n.compression_algorithm){case u.CompressionMethod.none:break;case u.CompressionMethod.deflate:a.read.compressFunction=s,a.write.compressFunction=i;break;default:throw new Error("Unsupported compression algorithm.")}}return a},u.createRandom=function(){var e=new Date,t=+e+6e4*e.getTimezoneOffset(),r=a.util.createBuffer();return r.putInt32(t),r.putBytes(a.random.getBytes(28)),r},u.createRecord=function(e,t){return t.data?{type:t.type,version:{major:e.version.major,minor:e.version.minor},length:t.data.length(),fragment:t.data}:null},u.createAlert=function(e,t){var r=a.util.createBuffer();return r.putByte(t.level),r.putByte(t.description),u.createRecord(e,{type:u.ContentType.alert,data:r})},u.createClientHello=function(e){e.session.clientHelloVersion={major:e.version.major,minor:e.version.minor};for(var t=a.util.createBuffer(),r=0;r0&&(d+=2);var y=e.session.id,g=y.length+1+2+4+28+2+i+1+o+d,m=a.util.createBuffer();return m.putByte(u.HandshakeType.client_hello),m.putInt24(g),m.putByte(e.version.major),m.putByte(e.version.minor),m.putBytes(e.session.sp.client_random),c(m,1,a.util.createBuffer(y)),c(m,2,t),c(m,1,s),d>0&&c(m,2,l),m},u.createServerHello=function(e){var t=e.session.id,r=t.length+1+2+4+28+2+1,n=a.util.createBuffer();return n.putByte(u.HandshakeType.server_hello),n.putInt24(r),n.putByte(e.version.major),n.putByte(e.version.minor),n.putBytes(e.session.sp.server_random),c(n,1,a.util.createBuffer(t)),n.putByte(e.session.cipherSuite.id[0]),n.putByte(e.session.cipherSuite.id[1]),n.putByte(e.session.compressionMethod),n},u.createCertificate=function(e){var t,r=e.entity===u.ConnectionEnd.client,n=null;e.getCertificate&&(t=r?e.session.certificateRequest:e.session.extensions.server_name.serverNameList,n=e.getCertificate(e,t));var i=a.util.createBuffer();if(null!==n)try{a.util.isArray(n)||(n=[n]);for(var s=null,o=0;ou.MaxFragment;)n.push(u.createRecord(e,{type:t.type,data:a.util.createBuffer(i.slice(0,u.MaxFragment))})),i=i.slice(u.MaxFragment);i.length>0&&n.push(u.createRecord(e,{type:t.type,data:a.util.createBuffer(i)}))}for(var s=0;s0&&(n=r.order[0]),null!==n&&n in r.cache)for(var i in t=r.cache[n],delete r.cache[n],r.order)if(r.order[i]===n){r.order.splice(i,1);break}return t},r.setSession=function(e,t){if(r.order.length===r.capacity){var n=r.order.shift();delete r.cache[n]}n=a.util.bytesToHex(e);r.order.push(n),r.cache[n]=t}}return r},u.createConnection=function(e){var t=null;t=e.caStore?a.util.isArray(e.caStore)?a.pki.createCaStore(e.caStore):e.caStore:a.pki.createCaStore();var r=e.cipherSuites||null;if(null===r)for(var n in r=[],u.CipherSuites)r.push(u.CipherSuites[n]);var i=e.server?u.ConnectionEnd.server:u.ConnectionEnd.client,s=e.sessionCache?u.createSessionCache(e.sessionCache):null,o={version:{major:u.Version.major,minor:u.Version.minor},entity:i,sessionId:e.sessionId,caStore:t,sessionCache:s,cipherSuites:r,connected:e.connected,virtualHost:e.virtualHost||null,verifyClient:e.verifyClient||!1,verify:e.verify||function(e,t,r,a){return t},verifyOptions:e.verifyOptions||{},getCertificate:e.getCertificate||null,getPrivateKey:e.getPrivateKey||null,getSignature:e.getSignature||null,input:a.util.createBuffer(),tlsData:a.util.createBuffer(),data:a.util.createBuffer(),tlsDataReady:e.tlsDataReady,dataReady:e.dataReady,heartbeatReceived:e.heartbeatReceived,closed:e.closed,error:function(t,r){r.origin=r.origin||(t.entity===u.ConnectionEnd.client?"client":"server"),r.send&&(u.queue(t,u.createAlert(t,r.alert)),u.flush(t));var a=!1!==r.fatal;a&&(t.fail=!0),e.error(t,r),a&&t.close(!1)},deflate:e.deflate||null,inflate:e.inflate||null,reset:function(e){o.version={major:u.Version.major,minor:u.Version.minor},o.record=null,o.session=null,o.peerCertificate=null,o.state={pending:null,current:null},o.expect=(o.entity,u.ConnectionEnd.client,0),o.fragmented=null,o.records=[],o.open=!1,o.handshakes=0,o.handshaking=!1,o.isConnected=!1,o.fail=!(e||void 0===e),o.input.clear(),o.tlsData.clear(),o.data.clear(),o.state.current=u.createConnectionState(o)}};o.reset();return o.handshake=function(e){if(o.entity!==u.ConnectionEnd.client)o.error(o,{message:"Cannot initiate handshake as a server.",fatal:!1});else if(o.handshaking)o.error(o,{message:"Handshake already in progress.",fatal:!1});else{o.fail&&!o.open&&0===o.handshakes&&(o.fail=!1),o.handshaking=!0;var t=null;(e=e||"").length>0&&(o.sessionCache&&(t=o.sessionCache.getSession(e)),null===t&&(e="")),0===e.length&&o.sessionCache&&null!==(t=o.sessionCache.getSession())&&(e=t.id),o.session={id:e,version:null,cipherSuite:null,compressionMethod:null,serverCertificate:null,certificateRequest:null,clientCertificate:null,sp:{},md5:a.md.md5.create(),sha1:a.md.sha1.create()},t&&(o.version=t.version,o.session.sp=t.sp),o.session.sp.client_random=u.createRandom().getBytes(),o.open=!0,u.queue(o,u.createRecord(o,{type:u.ContentType.handshake,data:u.createClientHello(o)})),u.flush(o)}},o.process=function(e){var t=0;return e&&o.input.putBytes(e),o.fail||(null!==o.record&&o.record.ready&&o.record.fragment.isEmpty()&&(o.record=null),null===o.record&&(t=function(e){var t=0,r=e.input,n=r.length();if(n<5)t=5-n;else{e.record={type:r.getByte(),version:{major:r.getByte(),minor:r.getByte()},length:r.getInt16(),fragment:a.util.createBuffer(),ready:!1};var i=e.record.version.major===e.version.major;i&&e.session&&e.session.version&&(i=e.record.version.minor===e.version.minor),i||e.error(e,{message:"Incompatible TLS version.",send:!0,alert:{level:u.Alert.Level.fatal,description:u.Alert.Description.protocol_version}})}return t}(o)),o.fail||null===o.record||o.record.ready||(t=function(e){var t=0,r=e.input,a=r.length();a=0;c--)w>>=8,w+=A.at(c)+k.at(c),k.setAt(c,255&w);N.putBuffer(k)}E=N,p.putBuffer(I)}return p.truncate(p.length()-i),p},s.pbe.getCipher=function(e,t,r){switch(e){case s.oids.pkcs5PBES2:return s.pbe.getCipherForPBES2(e,t,r);case s.oids["pbeWithSHAAnd3-KeyTripleDES-CBC"]:case s.oids["pbewithSHAAnd40BitRC2-CBC"]:return s.pbe.getCipherForPKCS12PBE(e,t,r);default:var a=new Error("Cannot read encrypted PBE data block. Unsupported OID.");throw a.oid=e,a.supportedOids=["pkcs5PBES2","pbeWithSHAAnd3-KeyTripleDES-CBC","pbewithSHAAnd40BitRC2-CBC"],a}},s.pbe.getCipherForPBES2=function(e,t,r){var n,o={},c=[];if(!i.validate(t,u,o,c))throw(n=new Error("Cannot read password-based-encryption algorithm parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.")).errors=c,n;if((e=i.derToOid(o.kdfOid))!==s.oids.pkcs5PBKDF2)throw(n=new Error("Cannot read encrypted private key. Unsupported key derivation function OID.")).oid=e,n.supportedOids=["pkcs5PBKDF2"],n;if((e=i.derToOid(o.encOid))!==s.oids["aes128-CBC"]&&e!==s.oids["aes192-CBC"]&&e!==s.oids["aes256-CBC"]&&e!==s.oids["des-EDE3-CBC"]&&e!==s.oids.desCBC)throw(n=new Error("Cannot read encrypted private key. Unsupported encryption scheme OID.")).oid=e,n.supportedOids=["aes128-CBC","aes192-CBC","aes256-CBC","des-EDE3-CBC","desCBC"],n;var l,p,h=o.kdfSalt,d=a.util.createBuffer(o.kdfIterationCount);switch(d=d.getInt(d.length()<<3),s.oids[e]){case"aes128-CBC":l=16,p=a.aes.createDecryptionCipher;break;case"aes192-CBC":l=24,p=a.aes.createDecryptionCipher;break;case"aes256-CBC":l=32,p=a.aes.createDecryptionCipher;break;case"des-EDE3-CBC":l=24,p=a.des.createDecryptionCipher;break;case"desCBC":l=8,p=a.des.createDecryptionCipher}var y=f(o.prfOid),g=a.pkcs5.pbkdf2(r,h,d,l,y),m=o.encIv,v=p(g);return v.start(m),v},s.pbe.getCipherForPKCS12PBE=function(e,t,r){var n={},o=[];if(!i.validate(t,l,n,o))throw(y=new Error("Cannot read password-based-encryption algorithm parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.")).errors=o,y;var c,u,p,h=a.util.createBuffer(n.salt),d=a.util.createBuffer(n.iterations);switch(d=d.getInt(d.length()<<3),e){case s.oids["pbeWithSHAAnd3-KeyTripleDES-CBC"]:c=24,u=8,p=a.des.startDecrypting;break;case s.oids["pbewithSHAAnd40BitRC2-CBC"]:c=5,u=8,p=function(e,t){var r=a.rc2.createDecryptionCipher(e,40);return r.start(t,null),r};break;default:var y;throw(y=new Error("Cannot read PKCS #12 PBE data block. Unsupported OID.")).oid=e,y}var g=f(n.prfOid),m=s.pbe.generatePkcs12Key(r,h,1,d,c,g);return g.start(),p(m,s.pbe.generatePkcs12Key(r,h,2,d,u,g))},s.pbe.opensslDeriveBytes=function(e,t,r,n){if(null==n){if(!("md5"in a.md))throw new Error('"md5" hash algorithm unavailable.');n=a.md.md5.create()}null===t&&(t="");for(var i=[p(n,e+t)],s=16,o=1;s>>0,o>>>0];for(var u=n.fullMessageLength.length-1;u>=0;--u)n.fullMessageLength[u]+=o[1],o[1]=o[0]+(n.fullMessageLength[u]/4294967296>>>0),n.fullMessageLength[u]=n.fullMessageLength[u]>>>0,o[0]=o[1]/4294967296>>>0;return t.putBytes(i),c(e,r,t),(t.read>2048||0===t.length())&&t.compact(),n},n.digest=function(){var s=a.util.createBuffer();s.putBytes(t.bytes());var o,u=n.fullMessageLength[n.fullMessageLength.length-1]+n.messageLengthSize&n.blockLength-1;s.putBytes(i.substr(0,n.blockLength-u));for(var l=8*n.fullMessageLength[0],p=0;p>>0,s.putInt32(l>>>0),l=o>>>0;s.putInt32(l);var f={h0:e.h0,h1:e.h1,h2:e.h2,h3:e.h3,h4:e.h4,h5:e.h5,h6:e.h6,h7:e.h7};c(f,r,s);var h=a.util.createBuffer();return h.putInt32(f.h0),h.putInt32(f.h1),h.putInt32(f.h2),h.putInt32(f.h3),h.putInt32(f.h4),h.putInt32(f.h5),h.putInt32(f.h6),h.putInt32(f.h7),h},n};var i=null,s=!1,o=null;function c(e,t,r){for(var a,n,i,s,c,u,l,p,f,h,d,y,g,m=r.length();m>=64;){for(c=0;c<16;++c)t[c]=r.getInt32();for(;c<64;++c)a=((a=t[c-2])>>>17|a<<15)^(a>>>19|a<<13)^a>>>10,n=((n=t[c-15])>>>7|n<<25)^(n>>>18|n<<14)^n>>>3,t[c]=a+t[c-7]+n+t[c-16]|0;for(u=e.h0,l=e.h1,p=e.h2,f=e.h3,h=e.h4,d=e.h5,y=e.h6,g=e.h7,c=0;c<64;++c)i=(u>>>2|u<<30)^(u>>>13|u<<19)^(u>>>22|u<<10),s=u&l|p&(u^l),a=g+((h>>>6|h<<26)^(h>>>11|h<<21)^(h>>>25|h<<7))+(y^h&(d^y))+o[c]+t[c],g=y,y=d,d=h,h=f+a>>>0,f=p,p=l,l=u,u=a+(n=i+s)>>>0;e.h0=e.h0+u|0,e.h1=e.h1+l|0,e.h2=e.h2+p|0,e.h3=e.h3+f|0,e.h4=e.h4+h|0,e.h5=e.h5+d|0,e.h6=e.h6+y|0,e.h7=e.h7+g|0,m-=64}}},function(e,t,r){var a=r(0);r(1);var n=null;!a.util.isNodejs||a.options.usePureJavaScript||process.versions["node-webkit"]||(n=r(16)),(e.exports=a.prng=a.prng||{}).create=function(e){for(var t={plugin:e,key:null,seed:null,time:null,reseeds:0,generated:0,keyBytes:""},r=e.md,i=new Array(32),s=0;s<32;++s)i[s]=r.create();function o(){if(t.pools[0].messageLength>=32)return c();var e=32-t.pools[0].messageLength<<5;t.collect(t.seedFileSync(e)),c()}function c(){t.reseeds=4294967295===t.reseeds?0:t.reseeds+1;var e=t.plugin.md.create();e.update(t.keyBytes);for(var r=1,a=0;a<32;++a)t.reseeds%r==0&&(e.update(t.pools[a].digest().getBytes()),t.pools[a].start()),r<<=1;t.keyBytes=e.digest().getBytes(),e.start(),e.update(t.keyBytes);var n=e.digest().getBytes();t.key=t.plugin.formatKey(t.keyBytes),t.seed=t.plugin.formatSeed(n),t.generated=0}function u(e){var t=null,r=a.util.globalScope,n=r.crypto||r.msCrypto;n&&n.getRandomValues&&(t=function(e){return n.getRandomValues(e)});var i=a.util.createBuffer();if(t)for(;i.length()>16)))<<16,f=4294967295&(l=(2147483647&(l+=u>>15))+(l>>31));for(c=0;c<3;++c)p=f>>>(c<<3),p^=Math.floor(256*Math.random()),i.putByte(String.fromCharCode(255&p))}return i.getBytes(e)}return t.pools=i,t.pool=0,t.generate=function(e,r){if(!r)return t.generateSync(e);var n=t.plugin.cipher,i=t.plugin.increment,s=t.plugin.formatKey,o=t.plugin.formatSeed,u=a.util.createBuffer();t.key=null,function l(p){if(p)return r(p);if(u.length()>=e)return r(null,u.getBytes(e));t.generated>1048575&&(t.key=null);if(null===t.key)return a.util.nextTick((function(){!function(e){if(t.pools[0].messageLength>=32)return c(),e();var r=32-t.pools[0].messageLength<<5;t.seedFile(r,(function(r,a){if(r)return e(r);t.collect(a),c(),e()}))}(l)}));var f=n(t.key,t.seed);t.generated+=f.length,u.putBytes(f),t.key=s(n(t.key,i(t.seed))),t.seed=o(n(t.key,t.seed)),a.util.setImmediate(l)}()},t.generateSync=function(e){var r=t.plugin.cipher,n=t.plugin.increment,i=t.plugin.formatKey,s=t.plugin.formatSeed;t.key=null;for(var c=a.util.createBuffer();c.length()1048575&&(t.key=null),null===t.key&&o();var u=r(t.key,t.seed);t.generated+=u.length,c.putBytes(u),t.key=i(r(t.key,n(t.seed))),t.seed=s(r(t.key,t.seed))}return c.getBytes(e)},n?(t.seedFile=function(e,t){n.randomBytes(e,(function(e,r){if(e)return t(e);t(null,r.toString())}))},t.seedFileSync=function(e){return n.randomBytes(e).toString()}):(t.seedFile=function(e,t){try{t(null,u(e))}catch(e){t(e)}},t.seedFileSync=u),t.collect=function(e){for(var r=e.length,a=0;a>n&255);t.collect(a)},t.registerWorker=function(e){if(e===self)t.seedFile=function(e,t){self.addEventListener("message",(function e(r){var a=r.data;a.forge&&a.forge.prng&&(self.removeEventListener("message",e),t(a.forge.prng.err,a.forge.prng.bytes))})),self.postMessage({forge:{prng:{needed:e}}})};else{e.addEventListener("message",(function(r){var a=r.data;a.forge&&a.forge.prng&&t.seedFile(a.forge.prng.needed,(function(t,r){e.postMessage({forge:{prng:{err:t,bytes:r}}})}))}))}},t}},function(e,t,r){var a=r(0);r(1);var n=[217,120,249,196,25,221,181,237,40,233,253,121,74,160,216,157,198,126,55,131,43,118,83,142,98,76,100,136,68,139,251,162,23,154,89,245,135,179,79,19,97,69,109,141,9,129,125,50,189,143,64,235,134,183,123,11,240,149,33,34,92,107,78,130,84,214,101,147,206,96,178,28,115,86,192,20,167,140,241,220,18,117,202,31,59,190,228,209,66,61,212,48,163,60,182,38,111,191,14,218,70,105,7,87,39,242,29,155,188,148,67,3,248,17,199,246,144,239,62,231,6,195,213,47,200,102,30,215,8,232,234,222,128,82,238,247,132,170,114,172,53,77,106,42,150,26,210,113,90,21,73,116,75,159,208,94,4,24,164,236,194,224,65,110,15,81,203,204,36,145,175,80,161,244,112,57,153,124,58,133,35,184,180,122,252,2,54,91,37,85,151,49,45,93,250,152,227,138,146,174,5,223,41,16,103,108,186,201,211,0,230,207,225,158,168,44,99,22,1,63,88,226,137,169,13,56,52,27,171,51,255,176,187,72,12,95,185,177,205,46,197,243,219,71,229,165,156,119,10,166,32,104,254,127,193,173],i=[1,2,3,5],s=function(e,t){return e<>16-t},o=function(e,t){return(65535&e)>>t|e<<16-t&65535};e.exports=a.rc2=a.rc2||{},a.rc2.expandKey=function(e,t){"string"==typeof e&&(e=a.util.createBuffer(e)),t=t||128;var r,i=e,s=e.length(),o=t,c=Math.ceil(o/8),u=255>>(7&o);for(r=s;r<128;r++)i.putByte(n[i.at(r-1)+i.at(r-s)&255]);for(i.setAt(128-c,n[i.at(128-c)&u]),r=127-c;r>=0;r--)i.setAt(r,n[i.at(r+1)^i.at(r+c)]);return i};var c=function(e,t,r){var n,c,u,l,p=!1,f=null,h=null,d=null,y=[];for(e=a.rc2.expandKey(e,t),u=0;u<64;u++)y.push(e.getInt16Le());r?(n=function(e){for(u=0;u<4;u++)e[u]+=y[l]+(e[(u+3)%4]&e[(u+2)%4])+(~e[(u+3)%4]&e[(u+1)%4]),e[u]=s(e[u],i[u]),l++},c=function(e){for(u=0;u<4;u++)e[u]+=y[63&e[(u+3)%4]]}):(n=function(e){for(u=3;u>=0;u--)e[u]=o(e[u],i[u]),e[u]-=y[l]+(e[(u+3)%4]&e[(u+2)%4])+(~e[(u+3)%4]&e[(u+1)%4]),l--},c=function(e){for(u=3;u>=0;u--)e[u]-=y[63&e[(u+3)%4]]});var g=function(e){var t=[];for(u=0;u<4;u++){var a=f.getInt16Le();null!==d&&(r?a^=d.getInt16Le():d.putInt16Le(a)),t.push(65535&a)}l=r?0:63;for(var n=0;n=8;)g([[5,n],[1,c],[6,n],[1,c],[5,n]])},finish:function(e){var t=!0;if(r)if(e)t=e(8,f,!r);else{var a=8===f.length()?8:8-f.length();f.fillWithByte(a,a)}if(t&&(p=!0,m.update()),!r&&(t=0===f.length()))if(e)t=e(8,h,!r);else{var n=h.length(),i=h.at(n-1);i>n?t=!1:h.truncate(i)}return t}}};a.rc2.startEncrypting=function(e,t,r){var n=a.rc2.createEncryptionCipher(e,128);return n.start(t,r),n},a.rc2.createEncryptionCipher=function(e,t){return c(e,t,!0)},a.rc2.startDecrypting=function(e,t,r){var n=a.rc2.createDecryptionCipher(e,128);return n.start(t,r),n},a.rc2.createDecryptionCipher=function(e,t){return c(e,t,!1)}},function(e,t,r){var a=r(0);r(1),r(2),r(9);var n=e.exports=a.pkcs1=a.pkcs1||{};function i(e,t,r){r||(r=a.md.sha1.create());for(var n="",i=Math.ceil(t/r.digestLength),s=0;s>24&255,s>>16&255,s>>8&255,255&s);r.start(),r.update(e+o),n+=r.digest().getBytes()}return n.substring(0,t)}n.encode_rsa_oaep=function(e,t,r){var n,s,o,c;"string"==typeof r?(n=r,s=arguments[3]||void 0,o=arguments[4]||void 0):r&&(n=r.label||void 0,s=r.seed||void 0,o=r.md||void 0,r.mgf1&&r.mgf1.md&&(c=r.mgf1.md)),o?o.start():o=a.md.sha1.create(),c||(c=o);var u=Math.ceil(e.n.bitLength()/8),l=u-2*o.digestLength-2;if(t.length>l)throw(g=new Error("RSAES-OAEP input message length is too long.")).length=t.length,g.maxLength=l,g;n||(n=""),o.update(n,"raw");for(var p=o.digest(),f="",h=l-t.length,d=0;de&&(s=c(e,t));var h=s.toString(16);n.target.postMessage({hex:h,workLoad:l}),s.dAddOffset(p,0)}}}h()}(e,t,n,i);return o(e,t,n,i)}(e,u,i.options,n);throw new Error("Invalid prime generation algorithm: "+i.name)}}function o(e,t,r,i){var s=c(e,t),o=function(e){return e<=100?27:e<=150?18:e<=200?15:e<=250?12:e<=300?9:e<=350?8:e<=400?7:e<=500?6:e<=600?5:e<=800?4:e<=1250?3:2}(s.bitLength());"millerRabinTests"in r&&(o=r.millerRabinTests);var u=10;"maxBlockTime"in r&&(u=r.maxBlockTime),function e(t,r,i,s,o,u,l){var p=+new Date;do{if(t.bitLength()>r&&(t=c(r,i)),t.isProbablePrime(o))return l(null,t);t.dAddOffset(n[s++%8],0)}while(u<0||+new Date-p=0&&n.push(o):n.push(o))}return n}function h(e){if(e.composed||e.constructed){for(var t=a.util.createBuffer(),r=0;r0&&(c=n.create(n.Class.UNIVERSAL,n.Type.SET,!0,p));var f=[],h=[];null!==t&&(h=a.util.isArray(t)?t:[t]);for(var d=[],y=0;y0){var C=n.create(n.Class.UNIVERSAL,n.Type.SEQUENCE,!0,d),E=n.create(n.Class.UNIVERSAL,n.Type.SEQUENCE,!0,[n.create(n.Class.UNIVERSAL,n.Type.OID,!1,n.oidToDer(i.oids.data).getBytes()),n.create(n.Class.CONTEXT_SPECIFIC,0,!0,[n.create(n.Class.UNIVERSAL,n.Type.OCTETSTRING,!1,n.toDer(C).getBytes())])]);f.push(E)}var S=null;if(null!==e){var T=i.wrapRsaPrivateKey(i.privateKeyToAsn1(e));S=null===r?n.create(n.Class.UNIVERSAL,n.Type.SEQUENCE,!0,[n.create(n.Class.UNIVERSAL,n.Type.OID,!1,n.oidToDer(i.oids.keyBag).getBytes()),n.create(n.Class.CONTEXT_SPECIFIC,0,!0,[T]),c]):n.create(n.Class.UNIVERSAL,n.Type.SEQUENCE,!0,[n.create(n.Class.UNIVERSAL,n.Type.OID,!1,n.oidToDer(i.oids.pkcs8ShroudedKeyBag).getBytes()),n.create(n.Class.CONTEXT_SPECIFIC,0,!0,[i.encryptPrivateKeyInfo(T,r,o)]),c]);var I=n.create(n.Class.UNIVERSAL,n.Type.SEQUENCE,!0,[S]),b=n.create(n.Class.UNIVERSAL,n.Type.SEQUENCE,!0,[n.create(n.Class.UNIVERSAL,n.Type.OID,!1,n.oidToDer(i.oids.data).getBytes()),n.create(n.Class.CONTEXT_SPECIFIC,0,!0,[n.create(n.Class.UNIVERSAL,n.Type.OCTETSTRING,!1,n.toDer(I).getBytes())])]);f.push(b)}var A,B=n.create(n.Class.UNIVERSAL,n.Type.SEQUENCE,!0,f);if(o.useMac){var N=a.md.sha1.create(),k=new a.util.ByteBuffer(a.random.getBytes(o.saltSize)),w=o.count,R=(e=s.generateKey(r,k,3,w,20),a.hmac.create());R.start(N,e),R.update(n.toDer(B).getBytes());var _=R.getMac();A=n.create(n.Class.UNIVERSAL,n.Type.SEQUENCE,!0,[n.create(n.Class.UNIVERSAL,n.Type.SEQUENCE,!0,[n.create(n.Class.UNIVERSAL,n.Type.SEQUENCE,!0,[n.create(n.Class.UNIVERSAL,n.Type.OID,!1,n.oidToDer(i.oids.sha1).getBytes()),n.create(n.Class.UNIVERSAL,n.Type.NULL,!1,"")]),n.create(n.Class.UNIVERSAL,n.Type.OCTETSTRING,!1,_.getBytes())]),n.create(n.Class.UNIVERSAL,n.Type.OCTETSTRING,!1,k.getBytes()),n.create(n.Class.UNIVERSAL,n.Type.INTEGER,!1,n.integerToDer(w).getBytes())])}return n.create(n.Class.UNIVERSAL,n.Type.SEQUENCE,!0,[n.create(n.Class.UNIVERSAL,n.Type.INTEGER,!1,n.integerToDer(3).getBytes()),n.create(n.Class.UNIVERSAL,n.Type.SEQUENCE,!0,[n.create(n.Class.UNIVERSAL,n.Type.OID,!1,n.oidToDer(i.oids.data).getBytes()),n.create(n.Class.CONTEXT_SPECIFIC,0,!0,[n.create(n.Class.UNIVERSAL,n.Type.OCTETSTRING,!1,n.toDer(B).getBytes())])]),A])},s.generateKey=a.pbe.generatePkcs12Key},function(e,t,r){var a=r(0);r(3),r(1);var n=a.asn1,i=e.exports=a.pkcs7asn1=a.pkcs7asn1||{};a.pkcs7=a.pkcs7||{},a.pkcs7.asn1=i;var s={name:"ContentInfo",tagClass:n.Class.UNIVERSAL,type:n.Type.SEQUENCE,constructed:!0,value:[{name:"ContentInfo.ContentType",tagClass:n.Class.UNIVERSAL,type:n.Type.OID,constructed:!1,capture:"contentType"},{name:"ContentInfo.content",tagClass:n.Class.CONTEXT_SPECIFIC,type:0,constructed:!0,optional:!0,captureAsn1:"content"}]};i.contentInfoValidator=s;var o={name:"EncryptedContentInfo",tagClass:n.Class.UNIVERSAL,type:n.Type.SEQUENCE,constructed:!0,value:[{name:"EncryptedContentInfo.contentType",tagClass:n.Class.UNIVERSAL,type:n.Type.OID,constructed:!1,capture:"contentType"},{name:"EncryptedContentInfo.contentEncryptionAlgorithm",tagClass:n.Class.UNIVERSAL,type:n.Type.SEQUENCE,constructed:!0,value:[{name:"EncryptedContentInfo.contentEncryptionAlgorithm.algorithm",tagClass:n.Class.UNIVERSAL,type:n.Type.OID,constructed:!1,capture:"encAlgorithm"},{name:"EncryptedContentInfo.contentEncryptionAlgorithm.parameter",tagClass:n.Class.UNIVERSAL,captureAsn1:"encParameter"}]},{name:"EncryptedContentInfo.encryptedContent",tagClass:n.Class.CONTEXT_SPECIFIC,type:0,capture:"encryptedContent",captureAsn1:"encryptedContentAsn1"}]};i.envelopedDataValidator={name:"EnvelopedData",tagClass:n.Class.UNIVERSAL,type:n.Type.SEQUENCE,constructed:!0,value:[{name:"EnvelopedData.Version",tagClass:n.Class.UNIVERSAL,type:n.Type.INTEGER,constructed:!1,capture:"version"},{name:"EnvelopedData.RecipientInfos",tagClass:n.Class.UNIVERSAL,type:n.Type.SET,constructed:!0,captureAsn1:"recipientInfos"}].concat(o)},i.encryptedDataValidator={name:"EncryptedData",tagClass:n.Class.UNIVERSAL,type:n.Type.SEQUENCE,constructed:!0,value:[{name:"EncryptedData.Version",tagClass:n.Class.UNIVERSAL,type:n.Type.INTEGER,constructed:!1,capture:"version"}].concat(o)};var c={name:"SignerInfo",tagClass:n.Class.UNIVERSAL,type:n.Type.SEQUENCE,constructed:!0,value:[{name:"SignerInfo.version",tagClass:n.Class.UNIVERSAL,type:n.Type.INTEGER,constructed:!1},{name:"SignerInfo.issuerAndSerialNumber",tagClass:n.Class.UNIVERSAL,type:n.Type.SEQUENCE,constructed:!0,value:[{name:"SignerInfo.issuerAndSerialNumber.issuer",tagClass:n.Class.UNIVERSAL,type:n.Type.SEQUENCE,constructed:!0,captureAsn1:"issuer"},{name:"SignerInfo.issuerAndSerialNumber.serialNumber",tagClass:n.Class.UNIVERSAL,type:n.Type.INTEGER,constructed:!1,capture:"serial"}]},{name:"SignerInfo.digestAlgorithm",tagClass:n.Class.UNIVERSAL,type:n.Type.SEQUENCE,constructed:!0,value:[{name:"SignerInfo.digestAlgorithm.algorithm",tagClass:n.Class.UNIVERSAL,type:n.Type.OID,constructed:!1,capture:"digestAlgorithm"},{name:"SignerInfo.digestAlgorithm.parameter",tagClass:n.Class.UNIVERSAL,constructed:!1,captureAsn1:"digestParameter",optional:!0}]},{name:"SignerInfo.authenticatedAttributes",tagClass:n.Class.CONTEXT_SPECIFIC,type:0,constructed:!0,optional:!0,capture:"authenticatedAttributes"},{name:"SignerInfo.digestEncryptionAlgorithm",tagClass:n.Class.UNIVERSAL,type:n.Type.SEQUENCE,constructed:!0,capture:"signatureAlgorithm"},{name:"SignerInfo.encryptedDigest",tagClass:n.Class.UNIVERSAL,type:n.Type.OCTETSTRING,constructed:!1,capture:"signature"},{name:"SignerInfo.unauthenticatedAttributes",tagClass:n.Class.CONTEXT_SPECIFIC,type:1,constructed:!0,optional:!0,capture:"unauthenticatedAttributes"}]};i.signedDataValidator={name:"SignedData",tagClass:n.Class.UNIVERSAL,type:n.Type.SEQUENCE,constructed:!0,value:[{name:"SignedData.Version",tagClass:n.Class.UNIVERSAL,type:n.Type.INTEGER,constructed:!1,capture:"version"},{name:"SignedData.DigestAlgorithms",tagClass:n.Class.UNIVERSAL,type:n.Type.SET,constructed:!0,captureAsn1:"digestAlgorithms"},s,{name:"SignedData.Certificates",tagClass:n.Class.CONTEXT_SPECIFIC,type:0,optional:!0,captureAsn1:"certificates"},{name:"SignedData.CertificateRevocationLists",tagClass:n.Class.CONTEXT_SPECIFIC,type:1,optional:!0,captureAsn1:"crls"},{name:"SignedData.SignerInfos",tagClass:n.Class.UNIVERSAL,type:n.Type.SET,capture:"signerInfos",optional:!0,value:[c]}]},i.recipientInfoValidator={name:"RecipientInfo",tagClass:n.Class.UNIVERSAL,type:n.Type.SEQUENCE,constructed:!0,value:[{name:"RecipientInfo.version",tagClass:n.Class.UNIVERSAL,type:n.Type.INTEGER,constructed:!1,capture:"version"},{name:"RecipientInfo.issuerAndSerial",tagClass:n.Class.UNIVERSAL,type:n.Type.SEQUENCE,constructed:!0,value:[{name:"RecipientInfo.issuerAndSerial.issuer",tagClass:n.Class.UNIVERSAL,type:n.Type.SEQUENCE,constructed:!0,captureAsn1:"issuer"},{name:"RecipientInfo.issuerAndSerial.serialNumber",tagClass:n.Class.UNIVERSAL,type:n.Type.INTEGER,constructed:!1,capture:"serial"}]},{name:"RecipientInfo.keyEncryptionAlgorithm",tagClass:n.Class.UNIVERSAL,type:n.Type.SEQUENCE,constructed:!0,value:[{name:"RecipientInfo.keyEncryptionAlgorithm.algorithm",tagClass:n.Class.UNIVERSAL,type:n.Type.OID,constructed:!1,capture:"encAlgorithm"},{name:"RecipientInfo.keyEncryptionAlgorithm.parameter",tagClass:n.Class.UNIVERSAL,constructed:!1,captureAsn1:"encParameter"}]},{name:"RecipientInfo.encryptedKey",tagClass:n.Class.UNIVERSAL,type:n.Type.OCTETSTRING,constructed:!1,capture:"encKey"}]}},function(e,t,r){var a=r(0);r(1),a.mgf=a.mgf||{},(e.exports=a.mgf.mgf1=a.mgf1=a.mgf1||{}).create=function(e){return{generate:function(t,r){for(var n=new a.util.ByteBuffer,i=Math.ceil(r/e.digestLength),s=0;s>>0,s>>>0];for(var o=h.fullMessageLength.length-1;o>=0;--o)h.fullMessageLength[o]+=s[1],s[1]=s[0]+(h.fullMessageLength[o]/4294967296>>>0),h.fullMessageLength[o]=h.fullMessageLength[o]>>>0,s[0]=s[1]/4294967296>>>0;return n.putBytes(e),l(r,i,n),(n.read>2048||0===n.length())&&n.compact(),h},h.digest=function(){var t=a.util.createBuffer();t.putBytes(n.bytes());var o,c=h.fullMessageLength[h.fullMessageLength.length-1]+h.messageLengthSize&h.blockLength-1;t.putBytes(s.substr(0,h.blockLength-c));for(var u=8*h.fullMessageLength[0],p=0;p>>0,t.putInt32(u>>>0),u=o>>>0;t.putInt32(u);var f=new Array(r.length);for(p=0;p=128;){for(R=0;R<16;++R)t[R][0]=r.getInt32()>>>0,t[R][1]=r.getInt32()>>>0;for(;R<80;++R)a=(((_=(U=t[R-2])[0])>>>19|(L=U[1])<<13)^(L>>>29|_<<3)^_>>>6)>>>0,n=((_<<13|L>>>19)^(L<<3|_>>>29)^(_<<26|L>>>6))>>>0,i=(((_=(P=t[R-15])[0])>>>1|(L=P[1])<<31)^(_>>>8|L<<24)^_>>>7)>>>0,s=((_<<31|L>>>1)^(_<<24|L>>>8)^(_<<25|L>>>7))>>>0,D=t[R-7],V=t[R-16],L=n+D[1]+s+V[1],t[R][0]=a+D[0]+i+V[0]+(L/4294967296>>>0)>>>0,t[R][1]=L>>>0;for(d=e[0][0],y=e[0][1],g=e[1][0],m=e[1][1],v=e[2][0],C=e[2][1],E=e[3][0],S=e[3][1],T=e[4][0],I=e[4][1],b=e[5][0],A=e[5][1],B=e[6][0],N=e[6][1],k=e[7][0],w=e[7][1],R=0;R<80;++R)l=((T>>>14|I<<18)^(T>>>18|I<<14)^(I>>>9|T<<23))>>>0,p=(B^T&(b^B))>>>0,o=((d>>>28|y<<4)^(y>>>2|d<<30)^(y>>>7|d<<25))>>>0,u=((d<<4|y>>>28)^(y<<30|d>>>2)^(y<<25|d>>>7))>>>0,f=(d&g|v&(d^g))>>>0,h=(y&m|C&(y^m))>>>0,L=w+(((T<<18|I>>>14)^(T<<14|I>>>18)^(I<<23|T>>>9))>>>0)+((N^I&(A^N))>>>0)+c[R][1]+t[R][1],a=k+l+p+c[R][0]+t[R][0]+(L/4294967296>>>0)>>>0,n=L>>>0,i=o+f+((L=u+h)/4294967296>>>0)>>>0,s=L>>>0,k=B,w=N,B=b,N=A,b=T,A=I,T=E+a+((L=S+n)/4294967296>>>0)>>>0,I=L>>>0,E=v,S=C,v=g,C=m,g=d,m=y,d=a+i+((L=n+s)/4294967296>>>0)>>>0,y=L>>>0;L=e[0][1]+y,e[0][0]=e[0][0]+d+(L/4294967296>>>0)>>>0,e[0][1]=L>>>0,L=e[1][1]+m,e[1][0]=e[1][0]+g+(L/4294967296>>>0)>>>0,e[1][1]=L>>>0,L=e[2][1]+C,e[2][0]=e[2][0]+v+(L/4294967296>>>0)>>>0,e[2][1]=L>>>0,L=e[3][1]+S,e[3][0]=e[3][0]+E+(L/4294967296>>>0)>>>0,e[3][1]=L>>>0,L=e[4][1]+I,e[4][0]=e[4][0]+T+(L/4294967296>>>0)>>>0,e[4][1]=L>>>0,L=e[5][1]+A,e[5][0]=e[5][0]+b+(L/4294967296>>>0)>>>0,e[5][1]=L>>>0,L=e[6][1]+N,e[6][0]=e[6][0]+B+(L/4294967296>>>0)>>>0,e[6][1]=L>>>0,L=e[7][1]+w,e[7][0]=e[7][0]+k+(L/4294967296>>>0)>>>0,e[7][1]=L>>>0,O-=128}}},function(e,t,r){var a=r(0);r(1),e.exports=a.log=a.log||{},a.log.levels=["none","error","warning","info","debug","verbose","max"];var n={},i=[],s=null;a.log.LEVEL_LOCKED=2,a.log.NO_LEVEL_CHECK=4,a.log.INTERPOLATE=8;for(var o=0;o0;)o.push(u%i),u=u/i|0}for(n=0;0===e[n]&&n=0;--n)a+=t[o[n]]}else a=function(e,t){var r=0,a=t.length,n=t.charAt(0),i=[0];for(r=0;r0;)i.push(o%a),o=o/a|0}var c="";for(r=0;0===e.at(r)&&r=0;--r)c+=t[i[r]];return c}(e,t);if(r){var l=new RegExp(".{1,"+r+"}","g");a=a.match(l).join("\r\n")}return a},r.decode=function(e,t){if("string"!=typeof e)throw new TypeError('"input" must be a string.');if("string"!=typeof t)throw new TypeError('"alphabet" must be a string.');var r=a[t];if(!r){r=a[t]=[];for(var n=0;n>=8;for(;l>0;)o.push(255&l),l>>=8}for(var p=0;e[p]===s&&p=n.Versions.TLS_1_1.minor&&c.output.putBytes(r),c.update(e.fragment),c.finish(o)&&(e.fragment=c.output,e.length=e.fragment.length(),i=!0),i}function o(e,t,r){if(!r){var a=e-t.length()%e;t.fillWithByte(a-1,a)}return!0}function c(e,t,r){var a=!0;if(r){for(var n=t.length(),i=t.last(),s=n-1-i;s=o?(e.fragment=s.output.getBytes(l-o),u=s.output.getBytes(o)):e.fragment=s.output.getBytes(),e.fragment=a.util.createBuffer(e.fragment),e.length=e.fragment.length();var p=t.macFunction(t.macKey,t.sequenceNumber,e);return t.updateSequenceNumber(),i=function(e,t,r){var n=a.hmac.create();return n.start("SHA1",e),n.update(t),t=n.digest().getBytes(),n.start(null,null),n.update(r),r=n.digest().getBytes(),t===r}(t.macKey,u,p)&&i}n.CipherSuites.TLS_RSA_WITH_AES_128_CBC_SHA={id:[0,47],name:"TLS_RSA_WITH_AES_128_CBC_SHA",initSecurityParameters:function(e){e.bulk_cipher_algorithm=n.BulkCipherAlgorithm.aes,e.cipher_type=n.CipherType.block,e.enc_key_length=16,e.block_length=16,e.fixed_iv_length=16,e.record_iv_length=16,e.mac_algorithm=n.MACAlgorithm.hmac_sha1,e.mac_length=20,e.mac_key_length=20},initConnectionState:i},n.CipherSuites.TLS_RSA_WITH_AES_256_CBC_SHA={id:[0,53],name:"TLS_RSA_WITH_AES_256_CBC_SHA",initSecurityParameters:function(e){e.bulk_cipher_algorithm=n.BulkCipherAlgorithm.aes,e.cipher_type=n.CipherType.block,e.enc_key_length=32,e.block_length=16,e.fixed_iv_length=16,e.record_iv_length=16,e.mac_algorithm=n.MACAlgorithm.hmac_sha1,e.mac_length=20,e.mac_key_length=20},initConnectionState:i}},function(e,t,r){var a=r(0);r(30),e.exports=a.mgf=a.mgf||{},a.mgf.mgf1=a.mgf1},function(e,t,r){var a=r(0);r(12),r(2),r(32),r(1);var n=r(41),i=n.publicKeyValidator,s=n.privateKeyValidator;if(void 0===o)var o=a.jsbn.BigInteger;var c=a.util.ByteBuffer,u="undefined"==typeof Buffer?Uint8Array:Buffer;a.pki=a.pki||{},e.exports=a.pki.ed25519=a.ed25519=a.ed25519||{};var l=a.ed25519;function p(e){var t=e.message;if(t instanceof Uint8Array||t instanceof u)return t;var r=e.encoding;if(void 0===t){if(!e.md)throw new TypeError('"options.message" or "options.md" not specified.');t=e.md.digest().getBytes(),r="binary"}if("string"==typeof t&&!r)throw new TypeError('"options.encoding" must be "binary" or "utf8".');if("string"==typeof t){if("undefined"!=typeof Buffer)return Buffer.from(t,r);t=new c(t,r)}else if(!(t instanceof c))throw new TypeError('"options.message" must be a node.js Buffer, a Uint8Array, a forge ByteBuffer, or a string with "options.encoding" specifying its encoding.');for(var a=new u(t.length()),n=0;n=0;--r)K(a,a),1!==r&&x(a,a,t);for(r=0;r<16;++r)e[r]=a[r]}(r,r),x(r,r,n),x(r,r,i),x(r,r,i),x(e[0],r,i),K(a,e[0]),x(a,a,i),N(a,n)&&x(e[0],e[0],C);if(K(a,e[0]),x(a,a,i),N(a,n))return-1;w(e[0])===t[31]>>7&&O(e[0],f,e[0]);return x(e[3],e[0],e[1]),0}(o,a))return-1;for(n=0;n=0};var f=P(),h=P([1]),d=P([30883,4953,19914,30187,55467,16705,2637,112,59544,30585,16505,36039,65139,11119,27886,20995]),y=P([61785,9906,39828,60374,45398,33411,5274,224,53552,61171,33010,6542,64743,22239,55772,9222]),g=P([54554,36645,11616,51542,42930,38181,51040,26924,56412,64982,57905,49316,21502,52590,14035,8553]),m=P([26200,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214]),v=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]),C=P([41136,18958,6951,50414,58488,44335,6150,12099,55207,15867,153,11085,57099,20417,9344,11139]);function E(e,t){var r=a.md.sha512.create(),n=new c(e);r.update(n.getBytes(t),"binary");var i=r.digest().getBytes();if("undefined"!=typeof Buffer)return Buffer.from(i,"binary");for(var s=new u(l.constants.HASH_BYTE_LENGTH),o=0;o<64;++o)s[o]=i.charCodeAt(o);return s}function S(e,t){var r,a,n,i;for(a=63;a>=32;--a){for(r=0,n=a-32,i=a-12;n>8,t[n]-=256*r;t[n]+=r,t[a]=0}for(r=0,n=0;n<32;++n)t[n]+=r-(t[31]>>4)*v[n],r=t[n]>>8,t[n]&=255;for(n=0;n<32;++n)t[n]-=r*v[n];for(a=0;a<32;++a)t[a+1]+=t[a]>>8,e[a]=255&t[a]}function T(e){for(var t=new Float64Array(64),r=0;r<64;++r)t[r]=e[r],e[r]=0;S(e,t)}function I(e,t){var r=P(),a=P(),n=P(),i=P(),s=P(),o=P(),c=P(),u=P(),l=P();O(r,e[1],e[0]),O(l,t[1],t[0]),x(r,r,l),V(a,e[0],e[1]),V(l,t[0],t[1]),x(a,a,l),x(n,e[3],t[3]),x(n,n,y),x(i,e[2],t[2]),V(i,i,i),O(s,a,r),O(o,i,n),V(c,i,n),V(u,a,r),x(e[0],s,o),x(e[1],u,c),x(e[2],c,o),x(e[3],s,u)}function b(e,t,r){for(var a=0;a<4;++a)D(e[a],t[a],r)}function A(e,t){var r=P(),a=P(),n=P();!function(e,t){var r,a=P();for(r=0;r<16;++r)a[r]=t[r];for(r=253;r>=0;--r)K(a,a),2!==r&&4!==r&&x(a,a,t);for(r=0;r<16;++r)e[r]=a[r]}(n,t[2]),x(r,t[0],n),x(a,t[1],n),B(e,a),e[31]^=w(r)<<7}function B(e,t){var r,a,n,i=P(),s=P();for(r=0;r<16;++r)s[r]=t[r];for(U(s),U(s),U(s),a=0;a<2;++a){for(i[0]=s[0]-65517,r=1;r<15;++r)i[r]=s[r]-65535-(i[r-1]>>16&1),i[r-1]&=65535;i[15]=s[15]-32767-(i[14]>>16&1),n=i[15]>>16&1,i[14]&=65535,D(s,i,1-n)}for(r=0;r<16;r++)e[2*r]=255&s[r],e[2*r+1]=s[r]>>8}function N(e,t){var r=new u(32),a=new u(32);return B(r,e),B(a,t),k(r,0,a,0)}function k(e,t,r,a){return function(e,t,r,a,n){var i,s=0;for(i=0;i>>8)-1}(e,t,r,a,32)}function w(e){var t=new u(32);return B(t,e),1&t[0]}function R(e,t,r){var a,n;for(L(e[0],f),L(e[1],h),L(e[2],h),L(e[3],f),n=255;n>=0;--n)b(e,t,a=r[n/8|0]>>(7&n)&1),I(t,e),I(e,e),b(e,t,a)}function _(e,t){var r=[P(),P(),P(),P()];L(r[0],g),L(r[1],m),L(r[2],h),x(r[3],g,m),R(e,r,t)}function L(e,t){var r;for(r=0;r<16;r++)e[r]=0|t[r]}function U(e){var t,r,a=1;for(t=0;t<16;++t)r=e[t]+a+65535,a=Math.floor(r/65536),e[t]=r-65536*a;e[0]+=a-1+37*(a-1)}function D(e,t,r){for(var a,n=~(r-1),i=0;i<16;++i)a=n&(e[i]^t[i]),e[i]^=a,t[i]^=a}function P(e){var t,r=new Float64Array(16);if(e)for(t=0;t0&&(s=a.util.fillString(String.fromCharCode(0),c)+s),{encapsulation:t.encrypt(s,"NONE"),key:e.generate(s,i)}},decrypt:function(t,r,a){var n=t.decrypt(r,"NONE");return e.generate(n,a)}};return i},a.kem.kdf1=function(e,t){i(this,e,0,t||e.digestLength)},a.kem.kdf2=function(e,t){i(this,e,1,t||e.digestLength)}},function(e,t,r){e.exports=r(4),r(14),r(9),r(23),r(32)},function(e,t,r){var a=r(0);r(5),r(3),r(10),r(6),r(7),r(29),r(2),r(1),r(17);var n=a.asn1,i=e.exports=a.pkcs7=a.pkcs7||{};function s(e){var t={},r=[];if(!n.validate(e,i.asn1.recipientInfoValidator,t,r)){var s=new Error("Cannot read PKCS#7 RecipientInfo. ASN.1 object is not an PKCS#7 RecipientInfo.");throw s.errors=r,s}return{version:t.version.charCodeAt(0),issuer:a.pki.RDNAttributesAsArray(t.issuer),serialNumber:a.util.createBuffer(t.serial).toHex(),encryptedContent:{algorithm:n.derToOid(t.encAlgorithm),parameter:t.encParameter.value,content:t.encKey}}}function o(e){for(var t,r=[],i=0;i0){for(var r=n.create(n.Class.CONTEXT_SPECIFIC,1,!0,[]),i=0;i=r&&s0&&s.value[0].value.push(n.create(n.Class.CONTEXT_SPECIFIC,0,!0,t)),i.length>0&&s.value[0].value.push(n.create(n.Class.CONTEXT_SPECIFIC,1,!0,i)),s.value[0].value.push(n.create(n.Class.UNIVERSAL,n.Type.SET,!0,e.signerInfos)),n.create(n.Class.UNIVERSAL,n.Type.SEQUENCE,!0,[n.create(n.Class.UNIVERSAL,n.Type.OID,!1,n.oidToDer(e.type).getBytes()),s])},addSigner:function(t){var r=t.issuer,n=t.serialNumber;if(t.certificate){var i=t.certificate;"string"==typeof i&&(i=a.pki.certificateFromPem(i)),r=i.issuer.attributes,n=i.serialNumber}var s=t.key;if(!s)throw new Error("Could not add PKCS#7 signer; no private key specified.");"string"==typeof s&&(s=a.pki.privateKeyFromPem(s));var o=t.digestAlgorithm||a.pki.oids.sha1;switch(o){case a.pki.oids.sha1:case a.pki.oids.sha256:case a.pki.oids.sha384:case a.pki.oids.sha512:case a.pki.oids.md5:break;default:throw new Error("Could not add PKCS#7 signer; unknown message digest algorithm: "+o)}var c=t.authenticatedAttributes||[];if(c.length>0){for(var u=!1,l=!1,p=0;p="8"&&(r="00"+r);var n=a.util.hexToBytes(r);e.putInt32(n.length),e.putBytes(n)}function s(e,t){e.putInt32(t.length),e.putString(t)}function o(){for(var e=a.md.sha1.create(),t=arguments.length,r=0;r0&&(this.state=g[this.state].block)},m.prototype.unblock=function(e){return e=void 0===e?1:e,this.blocks-=e,0===this.blocks&&this.state!==f&&(this.state=u,v(this,0)),this.blocks},m.prototype.sleep=function(e){e=void 0===e?0:e,this.state=g[this.state].sleep;var t=this;this.timeoutId=setTimeout((function(){t.timeoutId=null,t.state=u,v(t,0)}),e)},m.prototype.wait=function(e){e.wait(this)},m.prototype.wakeup=function(){this.state===p&&(cancelTimeout(this.timeoutId),this.timeoutId=null,this.state=u,v(this,0))},m.prototype.cancel=function(){this.state=g[this.state].cancel,this.permitsNeeded=0,null!==this.timeoutId&&(cancelTimeout(this.timeoutId),this.timeoutId=null),this.subtasks=[]},m.prototype.fail=function(e){if(this.error=!0,C(this,!0),e)e.error=this.error,e.swapTime=this.swapTime,e.userData=this.userData,v(e,0);else{if(null!==this.parent){for(var t=this.parent;null!==t.parent;)t.error=this.error,t.swapTime=this.swapTime,t.userData=this.userData,t=t.parent;C(t,!0)}this.failureCallback&&this.failureCallback(this)}};var v=function(e,t){var r=t>30||+new Date-e.swapTime>20,a=function(t){if(t++,e.state===u)if(r&&(e.swapTime=+new Date),e.subtasks.length>0){var a=e.subtasks.shift();a.error=e.error,a.swapTime=e.swapTime,a.userData=e.userData,a.run(a),a.error||v(a,t)}else C(e),e.error||null!==e.parent&&(e.parent.error=e.error,e.parent.swapTime=e.swapTime,e.parent.userData=e.userData,v(e.parent,t))};r?setTimeout(a,0):a(t)},C=function(e,t){e.state=f,delete i[e.id],null===e.parent&&(e.type in o?0===o[e.type].length?a.log.error(n,"[%s][%s] task queue empty [%s]",e.id,e.name,e.type):o[e.type][0]!==e?a.log.error(n,"[%s][%s] task not first in queue [%s]",e.id,e.name,e.type):(o[e.type].shift(),0===o[e.type].length?delete o[e.type]:o[e.type][0].start()):a.log.error(n,"[%s][%s] task queue missing [%s]",e.id,e.name,e.type),t||(e.error&&e.failureCallback?e.failureCallback(e):!e.error&&e.successCallback&&e.successCallback(e)))};e.exports=a.task=a.task||{},a.task.start=function(e){var t=new m({run:e.run,name:e.name||"?"});t.type=e.type,t.successCallback=e.success||null,t.failureCallback=e.failure||null,t.type in o?o[e.type].push(t):(o[t.type]=[t],function(e){e.error=!1,e.state=g[e.state][y],setTimeout((function(){e.state===u&&(e.swapTime=+new Date,e.run(e),v(e,0))}),0)}(t))},a.task.cancel=function(e){e in o&&(o[e]=[o[e][0]])},a.task.createCondition=function(){var e={tasks:{},wait:function(t){t.id in e.tasks||(t.block(),e.tasks[t.id]=t)},notify:function(){var t=e.tasks;for(var r in e.tasks={},t)t[r].unblock()}};return e}}])})); -//# sourceMappingURL=forge.min.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/node-forge/dist/forge.min.js.map b/reverse_engineering/node_modules/node-forge/dist/forge.min.js.map deleted file mode 100644 index 8e90465..0000000 --- a/reverse_engineering/node_modules/node-forge/dist/forge.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"forge.min.js","sources":["webpack://[name]/forge.min.js"],"mappings":"AAAA","sourceRoot":""} \ No newline at end of file diff --git a/reverse_engineering/node_modules/node-forge/dist/prime.worker.min.js b/reverse_engineering/node_modules/node-forge/dist/prime.worker.min.js deleted file mode 100644 index 41433be..0000000 --- a/reverse_engineering/node_modules/node-forge/dist/prime.worker.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(t){var i={};function r(o){if(i[o])return i[o].exports;var s=i[o]={i:o,l:!1,exports:{}};return t[o].call(s.exports,s,s.exports,r),s.l=!0,s.exports}r.m=t,r.c=i,r.d=function(t,i,o){r.o(t,i)||Object.defineProperty(t,i,{enumerable:!0,get:o})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,i){if(1&i&&(t=r(t)),8&i)return t;if(4&i&&"object"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:t}),2&i&&"string"!=typeof t)for(var s in t)r.d(o,s,function(i){return t[i]}.bind(null,s));return o},r.n=function(t){var i=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(i,"a",i),i},r.o=function(t,i){return Object.prototype.hasOwnProperty.call(t,i)},r.p="",r(r.s=1)}([function(t,i){t.exports={options:{usePureJavaScript:!1}}},function(t,i,r){r(2),t.exports=r(0)},function(t,i,r){var o=r(0);r(3);var s=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997],e=(1<<26)/s[s.length-1],a=o.jsbn.BigInteger;new a(null).fromInt(2),self.addEventListener("message",(function(t){var i=function(t){for(var i=new a(t.hex,16),r=0,o=t.workLoad,s=0;s=0);var u=o.modPow(s,t);if(0!==u.compareTo(a.ONE)&&0!==u.compareTo(i)){for(var f=r;--f;){if(0===(u=u.modPowInt(2,t)).compareTo(a.ONE))return!1;if(0===u.compareTo(i))break}if(0===f)return!1}}var p;return!0}(t)}},function(t,i,r){var o,s=r(0);t.exports=s.jsbn=s.jsbn||{};function e(t,i,r){this.data=[],null!=t&&("number"==typeof t?this.fromNumber(t,i,r):null==i&&"string"!=typeof t?this.fromString(t,256):this.fromString(t,i))}function a(){return new e(null)}function n(t,i,r,o,s,e){for(var a=16383&i,n=i>>14;--e>=0;){var h=16383&this.data[t],u=this.data[t++]>>14,f=n*h+u*a;s=((h=a*h+((16383&f)<<14)+r.data[o]+s)>>28)+(f>>14)+n*u,r.data[o++]=268435455&h}return s}s.jsbn.BigInteger=e,"undefined"==typeof navigator?(e.prototype.am=n,o=28):"Microsoft Internet Explorer"==navigator.appName?(e.prototype.am=function(t,i,r,o,s,e){for(var a=32767&i,n=i>>15;--e>=0;){var h=32767&this.data[t],u=this.data[t++]>>15,f=n*h+u*a;s=((h=a*h+((32767&f)<<15)+r.data[o]+(1073741823&s))>>>30)+(f>>>15)+n*u+(s>>>30),r.data[o++]=1073741823&h}return s},o=30):"Netscape"!=navigator.appName?(e.prototype.am=function(t,i,r,o,s,e){for(;--e>=0;){var a=i*this.data[t++]+r.data[o]+s;s=Math.floor(a/67108864),r.data[o++]=67108863&a}return s},o=26):(e.prototype.am=n,o=28),e.prototype.DB=o,e.prototype.DM=(1<>>16)&&(t=i,r+=16),0!=(i=t>>8)&&(t=i,r+=8),0!=(i=t>>4)&&(t=i,r+=4),0!=(i=t>>2)&&(t=i,r+=2),0!=(i=t>>1)&&(t=i,r+=1),r}function l(t){this.m=t}function v(t){this.m=t,this.mp=t.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<>=16,i+=16),0==(255&t)&&(t>>=8,i+=8),0==(15&t)&&(t>>=4,i+=4),0==(3&t)&&(t>>=2,i+=2),0==(1&t)&&++i,i}function B(t){for(var i=0;0!=t;)t&=t-1,++i;return i}function S(){}function M(t){return t}function w(t){this.r2=a(),this.q3=a(),e.ONE.dlShiftTo(2*t.t,this.r2),this.mu=this.r2.divide(t),this.m=t}l.prototype.convert=function(t){return t.s<0||t.compareTo(this.m)>=0?t.mod(this.m):t},l.prototype.revert=function(t){return t},l.prototype.reduce=function(t){t.divRemTo(this.m,null,t)},l.prototype.mulTo=function(t,i,r){t.multiplyTo(i,r),this.reduce(r)},l.prototype.sqrTo=function(t,i){t.squareTo(i),this.reduce(i)},v.prototype.convert=function(t){var i=a();return t.abs().dlShiftTo(this.m.t,i),i.divRemTo(this.m,null,i),t.s<0&&i.compareTo(e.ZERO)>0&&this.m.subTo(i,i),i},v.prototype.revert=function(t){var i=a();return t.copyTo(i),this.reduce(i),i},v.prototype.reduce=function(t){for(;t.t<=this.mt2;)t.data[t.t++]=0;for(var i=0;i>15)*this.mpl&this.um)<<15)&t.DM;for(r=i+this.m.t,t.data[r]+=this.m.am(0,o,t,i,0,this.m.t);t.data[r]>=t.DV;)t.data[r]-=t.DV,t.data[++r]++}t.clamp(),t.drShiftTo(this.m.t,t),t.compareTo(this.m)>=0&&t.subTo(this.m,t)},v.prototype.mulTo=function(t,i,r){t.multiplyTo(i,r),this.reduce(r)},v.prototype.sqrTo=function(t,i){t.squareTo(i),this.reduce(i)},e.prototype.copyTo=function(t){for(var i=this.t-1;i>=0;--i)t.data[i]=this.data[i];t.t=this.t,t.s=this.s},e.prototype.fromInt=function(t){this.t=1,this.s=t<0?-1:0,t>0?this.data[0]=t:t<-1?this.data[0]=t+this.DV:this.t=0},e.prototype.fromString=function(t,i){var r;if(16==i)r=4;else if(8==i)r=3;else if(256==i)r=8;else if(2==i)r=1;else if(32==i)r=5;else{if(4!=i)return void this.fromRadix(t,i);r=2}this.t=0,this.s=0;for(var o=t.length,s=!1,a=0;--o>=0;){var n=8==r?255&t[o]:d(t,o);n<0?"-"==t.charAt(o)&&(s=!0):(s=!1,0==a?this.data[this.t++]=n:a+r>this.DB?(this.data[this.t-1]|=(n&(1<>this.DB-a):this.data[this.t-1]|=n<=this.DB&&(a-=this.DB))}8==r&&0!=(128&t[0])&&(this.s=-1,a>0&&(this.data[this.t-1]|=(1<0&&this.data[this.t-1]==t;)--this.t},e.prototype.dlShiftTo=function(t,i){var r;for(r=this.t-1;r>=0;--r)i.data[r+t]=this.data[r];for(r=t-1;r>=0;--r)i.data[r]=0;i.t=this.t+t,i.s=this.s},e.prototype.drShiftTo=function(t,i){for(var r=t;r=0;--r)i.data[r+a+1]=this.data[r]>>s|n,n=(this.data[r]&e)<=0;--r)i.data[r]=0;i.data[a]=n,i.t=this.t+a+1,i.s=this.s,i.clamp()},e.prototype.rShiftTo=function(t,i){i.s=this.s;var r=Math.floor(t/this.DB);if(r>=this.t)i.t=0;else{var o=t%this.DB,s=this.DB-o,e=(1<>o;for(var a=r+1;a>o;o>0&&(i.data[this.t-r-1]|=(this.s&e)<>=this.DB;if(t.t>=this.DB;o+=this.s}else{for(o+=this.s;r>=this.DB;o-=t.s}i.s=o<0?-1:0,o<-1?i.data[r++]=this.DV+o:o>0&&(i.data[r++]=o),i.t=r,i.clamp()},e.prototype.multiplyTo=function(t,i){var r=this.abs(),o=t.abs(),s=r.t;for(i.t=s+o.t;--s>=0;)i.data[s]=0;for(s=0;s=0;)t.data[r]=0;for(r=0;r=i.DV&&(t.data[r+i.t]-=i.DV,t.data[r+i.t+1]=1)}t.t>0&&(t.data[t.t-1]+=i.am(r,i.data[r],t,2*r,0,1)),t.s=0,t.clamp()},e.prototype.divRemTo=function(t,i,r){var o=t.abs();if(!(o.t<=0)){var s=this.abs();if(s.t0?(o.lShiftTo(f,n),s.lShiftTo(f,r)):(o.copyTo(n),s.copyTo(r));var p=n.t,d=n.data[p-1];if(0!=d){var c=d*(1<1?n.data[p-2]>>this.F2:0),l=this.FV/c,v=(1<=0&&(r.data[r.t++]=1,r.subTo(g,r)),e.ONE.dlShiftTo(p,g),g.subTo(n,n);n.t=0;){var D=r.data[--y]==d?this.DM:Math.floor(r.data[y]*l+(r.data[y-1]+T)*v);if((r.data[y]+=n.am(0,D,r,b,0,p))0&&r.rShiftTo(f,r),h<0&&e.ZERO.subTo(r,r)}}},e.prototype.invDigit=function(){if(this.t<1)return 0;var t=this.data[0];if(0==(1&t))return 0;var i=3&t;return(i=(i=(i=(i=i*(2-(15&t)*i)&15)*(2-(255&t)*i)&255)*(2-((65535&t)*i&65535))&65535)*(2-t*i%this.DV)%this.DV)>0?this.DV-i:-i},e.prototype.isEven=function(){return 0==(this.t>0?1&this.data[0]:this.s)},e.prototype.exp=function(t,i){if(t>4294967295||t<1)return e.ONE;var r=a(),o=a(),s=i.convert(this),n=m(t)-1;for(s.copyTo(r);--n>=0;)if(i.sqrTo(r,o),(t&1<0)i.mulTo(o,s,r);else{var h=r;r=o,o=h}return i.revert(r)},e.prototype.toString=function(t){if(this.s<0)return"-"+this.negate().toString(t);var i;if(16==t)i=4;else if(8==t)i=3;else if(2==t)i=1;else if(32==t)i=5;else{if(4!=t)return this.toRadix(t);i=2}var r,o=(1<0)for(n>n)>0&&(s=!0,e=p(r));a>=0;)n>(n+=this.DB-i)):(r=this.data[a]>>(n-=i)&o,n<=0&&(n+=this.DB,--a)),r>0&&(s=!0),s&&(e+=p(r));return s?e:"0"},e.prototype.negate=function(){var t=a();return e.ZERO.subTo(this,t),t},e.prototype.abs=function(){return this.s<0?this.negate():this},e.prototype.compareTo=function(t){var i=this.s-t.s;if(0!=i)return i;var r=this.t;if(0!=(i=r-t.t))return this.s<0?-i:i;for(;--r>=0;)if(0!=(i=this.data[r]-t.data[r]))return i;return 0},e.prototype.bitLength=function(){return this.t<=0?0:this.DB*(this.t-1)+m(this.data[this.t-1]^this.s&this.DM)},e.prototype.mod=function(t){var i=a();return this.abs().divRemTo(t,null,i),this.s<0&&i.compareTo(e.ZERO)>0&&t.subTo(i,i),i},e.prototype.modPowInt=function(t,i){var r;return r=t<256||i.isEven()?new l(i):new v(i),this.exp(t,r)},e.ZERO=c(0),e.ONE=c(1),S.prototype.convert=M,S.prototype.revert=M,S.prototype.mulTo=function(t,i,r){t.multiplyTo(i,r)},S.prototype.sqrTo=function(t,i){t.squareTo(i)},w.prototype.convert=function(t){if(t.s<0||t.t>2*this.m.t)return t.mod(this.m);if(t.compareTo(this.m)<0)return t;var i=a();return t.copyTo(i),this.reduce(i),i},w.prototype.revert=function(t){return t},w.prototype.reduce=function(t){for(t.drShiftTo(this.m.t-1,this.r2),t.t>this.m.t+1&&(t.t=this.m.t+1,t.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);t.compareTo(this.r2)<0;)t.dAddOffset(1,this.m.t+1);for(t.subTo(this.r2,t);t.compareTo(this.m)>=0;)t.subTo(this.m,t)},w.prototype.mulTo=function(t,i,r){t.multiplyTo(i,r),this.reduce(r)},w.prototype.sqrTo=function(t,i){t.squareTo(i),this.reduce(i)};var E=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509],O=(1<<26)/E[E.length-1];e.prototype.chunkSize=function(t){return Math.floor(Math.LN2*this.DB/Math.log(t))},e.prototype.toRadix=function(t){if(null==t&&(t=10),0==this.signum()||t<2||t>36)return"0";var i=this.chunkSize(t),r=Math.pow(t,i),o=c(r),s=a(),e=a(),n="";for(this.divRemTo(o,s,e);s.signum()>0;)n=(r+e.intValue()).toString(t).substr(1)+n,s.divRemTo(o,s,e);return e.intValue().toString(t)+n},e.prototype.fromRadix=function(t,i){this.fromInt(0),null==i&&(i=10);for(var r=this.chunkSize(i),o=Math.pow(i,r),s=!1,a=0,n=0,h=0;h=r&&(this.dMultiply(o),this.dAddOffset(n,0),a=0,n=0))}a>0&&(this.dMultiply(Math.pow(i,a)),this.dAddOffset(n,0)),s&&e.ZERO.subTo(this,this)},e.prototype.fromNumber=function(t,i,r){if("number"==typeof i)if(t<2)this.fromInt(1);else for(this.fromNumber(t,r),this.testBit(t-1)||this.bitwiseTo(e.ONE.shiftLeft(t-1),y,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(i);)this.dAddOffset(2,0),this.bitLength()>t&&this.subTo(e.ONE.shiftLeft(t-1),this);else{var o=new Array,s=7&t;o.length=1+(t>>3),i.nextBytes(o),s>0?o[0]&=(1<>=this.DB;if(t.t>=this.DB;o+=this.s}else{for(o+=this.s;r>=this.DB;o+=t.s}i.s=o<0?-1:0,o>0?i.data[r++]=o:o<-1&&(i.data[r++]=this.DV+o),i.t=r,i.clamp()},e.prototype.dMultiply=function(t){this.data[this.t]=this.am(0,t-1,this,0,0,this.t),++this.t,this.clamp()},e.prototype.dAddOffset=function(t,i){if(0!=t){for(;this.t<=i;)this.data[this.t++]=0;for(this.data[i]+=t;this.data[i]>=this.DV;)this.data[i]-=this.DV,++i>=this.t&&(this.data[this.t++]=0),++this.data[i]}},e.prototype.multiplyLowerTo=function(t,i,r){var o,s=Math.min(this.t+t.t,i);for(r.s=0,r.t=s;s>0;)r.data[--s]=0;for(o=r.t-this.t;s=0;)r.data[o]=0;for(o=Math.max(i-this.t,0);o0)if(0==i)r=this.data[0]%t;else for(var o=this.t-1;o>=0;--o)r=(i*r+this.data[o])%t;return r},e.prototype.millerRabin=function(t){var i=this.subtract(e.ONE),r=i.getLowestSetBit();if(r<=0)return!1;for(var o,s=i.shiftRight(r),a={nextBytes:function(t){for(var i=0;i=0);var h=o.modPow(s,this);if(0!=h.compareTo(e.ONE)&&0!=h.compareTo(i)){for(var u=1;u++>24},e.prototype.shortValue=function(){return 0==this.t?this.s:this.data[0]<<16>>16},e.prototype.signum=function(){return this.s<0?-1:this.t<=0||1==this.t&&this.data[0]<=0?0:1},e.prototype.toByteArray=function(){var t=this.t,i=new Array;i[0]=this.s;var r,o=this.DB-t*this.DB%8,s=0;if(t-- >0)for(o>o)!=(this.s&this.DM)>>o&&(i[s++]=r|this.s<=0;)o<8?(r=(this.data[t]&(1<>(o+=this.DB-8)):(r=this.data[t]>>(o-=8)&255,o<=0&&(o+=this.DB,--t)),0!=(128&r)&&(r|=-256),0==s&&(128&this.s)!=(128&r)&&++s,(s>0||r!=this.s)&&(i[s++]=r);return i},e.prototype.equals=function(t){return 0==this.compareTo(t)},e.prototype.min=function(t){return this.compareTo(t)<0?this:t},e.prototype.max=function(t){return this.compareTo(t)>0?this:t},e.prototype.and=function(t){var i=a();return this.bitwiseTo(t,T,i),i},e.prototype.or=function(t){var i=a();return this.bitwiseTo(t,y,i),i},e.prototype.xor=function(t){var i=a();return this.bitwiseTo(t,b,i),i},e.prototype.andNot=function(t){var i=a();return this.bitwiseTo(t,g,i),i},e.prototype.not=function(){for(var t=a(),i=0;i=this.t?0!=this.s:0!=(this.data[i]&1<1){var p=a();for(o.sqrTo(n[1],p);h<=f;)n[h]=a(),o.mulTo(p,n[h-2],n[h]),h+=2}var d,T,y=t.t-1,b=!0,g=a();for(s=m(t.data[y])-1;y>=0;){for(s>=u?d=t.data[y]>>s-u&f:(d=(t.data[y]&(1<0&&(d|=t.data[y-1]>>this.DB+s-u)),h=r;0==(1&d);)d>>=1,--h;if((s-=h)<0&&(s+=this.DB,--y),b)n[d].copyTo(e),b=!1;else{for(;h>1;)o.sqrTo(e,g),o.sqrTo(g,e),h-=2;h>0?o.sqrTo(e,g):(T=e,e=g,g=T),o.mulTo(g,n[d],e)}for(;y>=0&&0==(t.data[y]&1<=0?(r.subTo(o,r),i&&s.subTo(n,s),a.subTo(h,a)):(o.subTo(r,o),i&&n.subTo(s,n),h.subTo(a,h))}return 0!=o.compareTo(e.ONE)?e.ZERO:h.compareTo(t)>=0?h.subtract(t):h.signum()<0?(h.addTo(t,h),h.signum()<0?h.add(t):h):h},e.prototype.pow=function(t){return this.exp(t,new S)},e.prototype.gcd=function(t){var i=this.s<0?this.negate():this.clone(),r=t.s<0?t.negate():t.clone();if(i.compareTo(r)<0){var o=i;i=r,r=o}var s=i.getLowestSetBit(),e=r.getLowestSetBit();if(e<0)return i;for(s0&&(i.rShiftTo(e,i),r.rShiftTo(e,r));i.signum()>0;)(s=i.getLowestSetBit())>0&&i.rShiftTo(s,i),(s=r.getLowestSetBit())>0&&r.rShiftTo(s,r),i.compareTo(r)>=0?(i.subTo(r,i),i.rShiftTo(1,i)):(r.subTo(i,r),r.rShiftTo(1,r));return e>0&&r.lShiftTo(e,r),r},e.prototype.isProbablePrime=function(t){var i,r=this.abs();if(1==r.t&&r.data[0]<=E[E.length-1]){for(i=0;i', key); - * cipher.start({iv: iv}); - * - * Creates an AES cipher object to encrypt data using the given symmetric key. - * The output will be stored in the 'output' member of the returned cipher. - * - * The key and iv may be given as a string of bytes, an array of bytes, - * a byte buffer, or an array of 32-bit words. - * - * @param key the symmetric key to use. - * @param iv the initialization vector to use. - * @param output the buffer to write to, null to create one. - * @param mode the cipher mode to use (default: 'CBC'). - * - * @return the cipher. - */ -forge.aes.startEncrypting = function(key, iv, output, mode) { - var cipher = _createCipher({ - key: key, - output: output, - decrypt: false, - mode: mode - }); - cipher.start(iv); - return cipher; -}; - -/** - * Deprecated. Instead, use: - * - * var cipher = forge.cipher.createCipher('AES-', key); - * - * Creates an AES cipher object to encrypt data using the given symmetric key. - * - * The key may be given as a string of bytes, an array of bytes, a - * byte buffer, or an array of 32-bit words. - * - * @param key the symmetric key to use. - * @param mode the cipher mode to use (default: 'CBC'). - * - * @return the cipher. - */ -forge.aes.createEncryptionCipher = function(key, mode) { - return _createCipher({ - key: key, - output: null, - decrypt: false, - mode: mode - }); -}; - -/** - * Deprecated. Instead, use: - * - * var decipher = forge.cipher.createDecipher('AES-', key); - * decipher.start({iv: iv}); - * - * Creates an AES cipher object to decrypt data using the given symmetric key. - * The output will be stored in the 'output' member of the returned cipher. - * - * The key and iv may be given as a string of bytes, an array of bytes, - * a byte buffer, or an array of 32-bit words. - * - * @param key the symmetric key to use. - * @param iv the initialization vector to use. - * @param output the buffer to write to, null to create one. - * @param mode the cipher mode to use (default: 'CBC'). - * - * @return the cipher. - */ -forge.aes.startDecrypting = function(key, iv, output, mode) { - var cipher = _createCipher({ - key: key, - output: output, - decrypt: true, - mode: mode - }); - cipher.start(iv); - return cipher; -}; - -/** - * Deprecated. Instead, use: - * - * var decipher = forge.cipher.createDecipher('AES-', key); - * - * Creates an AES cipher object to decrypt data using the given symmetric key. - * - * The key may be given as a string of bytes, an array of bytes, a - * byte buffer, or an array of 32-bit words. - * - * @param key the symmetric key to use. - * @param mode the cipher mode to use (default: 'CBC'). - * - * @return the cipher. - */ -forge.aes.createDecryptionCipher = function(key, mode) { - return _createCipher({ - key: key, - output: null, - decrypt: true, - mode: mode - }); -}; - -/** - * Creates a new AES cipher algorithm object. - * - * @param name the name of the algorithm. - * @param mode the mode factory function. - * - * @return the AES algorithm object. - */ -forge.aes.Algorithm = function(name, mode) { - if(!init) { - initialize(); - } - var self = this; - self.name = name; - self.mode = new mode({ - blockSize: 16, - cipher: { - encrypt: function(inBlock, outBlock) { - return _updateBlock(self._w, inBlock, outBlock, false); - }, - decrypt: function(inBlock, outBlock) { - return _updateBlock(self._w, inBlock, outBlock, true); - } - } - }); - self._init = false; -}; - -/** - * Initializes this AES algorithm by expanding its key. - * - * @param options the options to use. - * key the key to use with this algorithm. - * decrypt true if the algorithm should be initialized for decryption, - * false for encryption. - */ -forge.aes.Algorithm.prototype.initialize = function(options) { - if(this._init) { - return; - } - - var key = options.key; - var tmp; - - /* Note: The key may be a string of bytes, an array of bytes, a byte - buffer, or an array of 32-bit integers. If the key is in bytes, then - it must be 16, 24, or 32 bytes in length. If it is in 32-bit - integers, it must be 4, 6, or 8 integers long. */ - - if(typeof key === 'string' && - (key.length === 16 || key.length === 24 || key.length === 32)) { - // convert key string into byte buffer - key = forge.util.createBuffer(key); - } else if(forge.util.isArray(key) && - (key.length === 16 || key.length === 24 || key.length === 32)) { - // convert key integer array into byte buffer - tmp = key; - key = forge.util.createBuffer(); - for(var i = 0; i < tmp.length; ++i) { - key.putByte(tmp[i]); - } - } - - // convert key byte buffer into 32-bit integer array - if(!forge.util.isArray(key)) { - tmp = key; - key = []; - - // key lengths of 16, 24, 32 bytes allowed - var len = tmp.length(); - if(len === 16 || len === 24 || len === 32) { - len = len >>> 2; - for(var i = 0; i < len; ++i) { - key.push(tmp.getInt32()); - } - } - } - - // key must be an array of 32-bit integers by now - if(!forge.util.isArray(key) || - !(key.length === 4 || key.length === 6 || key.length === 8)) { - throw new Error('Invalid key parameter.'); - } - - // encryption operation is always used for these modes - var mode = this.mode.name; - var encryptOp = (['CFB', 'OFB', 'CTR', 'GCM'].indexOf(mode) !== -1); - - // do key expansion - this._w = _expandKey(key, options.decrypt && !encryptOp); - this._init = true; -}; - -/** - * Expands a key. Typically only used for testing. - * - * @param key the symmetric key to expand, as an array of 32-bit words. - * @param decrypt true to expand for decryption, false for encryption. - * - * @return the expanded key. - */ -forge.aes._expandKey = function(key, decrypt) { - if(!init) { - initialize(); - } - return _expandKey(key, decrypt); -}; - -/** - * Updates a single block. Typically only used for testing. - * - * @param w the expanded key to use. - * @param input an array of block-size 32-bit words. - * @param output an array of block-size 32-bit words. - * @param decrypt true to decrypt, false to encrypt. - */ -forge.aes._updateBlock = _updateBlock; - -/** Register AES algorithms **/ - -registerAlgorithm('AES-ECB', forge.cipher.modes.ecb); -registerAlgorithm('AES-CBC', forge.cipher.modes.cbc); -registerAlgorithm('AES-CFB', forge.cipher.modes.cfb); -registerAlgorithm('AES-OFB', forge.cipher.modes.ofb); -registerAlgorithm('AES-CTR', forge.cipher.modes.ctr); -registerAlgorithm('AES-GCM', forge.cipher.modes.gcm); - -function registerAlgorithm(name, mode) { - var factory = function() { - return new forge.aes.Algorithm(name, mode); - }; - forge.cipher.registerAlgorithm(name, factory); -} - -/** AES implementation **/ - -var init = false; // not yet initialized -var Nb = 4; // number of words comprising the state (AES = 4) -var sbox; // non-linear substitution table used in key expansion -var isbox; // inversion of sbox -var rcon; // round constant word array -var mix; // mix-columns table -var imix; // inverse mix-columns table - -/** - * Performs initialization, ie: precomputes tables to optimize for speed. - * - * One way to understand how AES works is to imagine that 'addition' and - * 'multiplication' are interfaces that require certain mathematical - * properties to hold true (ie: they are associative) but they might have - * different implementations and produce different kinds of results ... - * provided that their mathematical properties remain true. AES defines - * its own methods of addition and multiplication but keeps some important - * properties the same, ie: associativity and distributivity. The - * explanation below tries to shed some light on how AES defines addition - * and multiplication of bytes and 32-bit words in order to perform its - * encryption and decryption algorithms. - * - * The basics: - * - * The AES algorithm views bytes as binary representations of polynomials - * that have either 1 or 0 as the coefficients. It defines the addition - * or subtraction of two bytes as the XOR operation. It also defines the - * multiplication of two bytes as a finite field referred to as GF(2^8) - * (Note: 'GF' means "Galois Field" which is a field that contains a finite - * number of elements so GF(2^8) has 256 elements). - * - * This means that any two bytes can be represented as binary polynomials; - * when they multiplied together and modularly reduced by an irreducible - * polynomial of the 8th degree, the results are the field GF(2^8). The - * specific irreducible polynomial that AES uses in hexadecimal is 0x11b. - * This multiplication is associative with 0x01 as the identity: - * - * (b * 0x01 = GF(b, 0x01) = b). - * - * The operation GF(b, 0x02) can be performed at the byte level by left - * shifting b once and then XOR'ing it (to perform the modular reduction) - * with 0x11b if b is >= 128. Repeated application of the multiplication - * of 0x02 can be used to implement the multiplication of any two bytes. - * - * For instance, multiplying 0x57 and 0x13, denoted as GF(0x57, 0x13), can - * be performed by factoring 0x13 into 0x01, 0x02, and 0x10. Then these - * factors can each be multiplied by 0x57 and then added together. To do - * the multiplication, values for 0x57 multiplied by each of these 3 factors - * can be precomputed and stored in a table. To add them, the values from - * the table are XOR'd together. - * - * AES also defines addition and multiplication of words, that is 4-byte - * numbers represented as polynomials of 3 degrees where the coefficients - * are the values of the bytes. - * - * The word [a0, a1, a2, a3] is a polynomial a3x^3 + a2x^2 + a1x + a0. - * - * Addition is performed by XOR'ing like powers of x. Multiplication - * is performed in two steps, the first is an algebriac expansion as - * you would do normally (where addition is XOR). But the result is - * a polynomial larger than 3 degrees and thus it cannot fit in a word. So - * next the result is modularly reduced by an AES-specific polynomial of - * degree 4 which will always produce a polynomial of less than 4 degrees - * such that it will fit in a word. In AES, this polynomial is x^4 + 1. - * - * The modular product of two polynomials 'a' and 'b' is thus: - * - * d(x) = d3x^3 + d2x^2 + d1x + d0 - * with - * d0 = GF(a0, b0) ^ GF(a3, b1) ^ GF(a2, b2) ^ GF(a1, b3) - * d1 = GF(a1, b0) ^ GF(a0, b1) ^ GF(a3, b2) ^ GF(a2, b3) - * d2 = GF(a2, b0) ^ GF(a1, b1) ^ GF(a0, b2) ^ GF(a3, b3) - * d3 = GF(a3, b0) ^ GF(a2, b1) ^ GF(a1, b2) ^ GF(a0, b3) - * - * As a matrix: - * - * [d0] = [a0 a3 a2 a1][b0] - * [d1] [a1 a0 a3 a2][b1] - * [d2] [a2 a1 a0 a3][b2] - * [d3] [a3 a2 a1 a0][b3] - * - * Special polynomials defined by AES (0x02 == {02}): - * a(x) = {03}x^3 + {01}x^2 + {01}x + {02} - * a^-1(x) = {0b}x^3 + {0d}x^2 + {09}x + {0e}. - * - * These polynomials are used in the MixColumns() and InverseMixColumns() - * operations, respectively, to cause each element in the state to affect - * the output (referred to as diffusing). - * - * RotWord() uses: a0 = a1 = a2 = {00} and a3 = {01}, which is the - * polynomial x3. - * - * The ShiftRows() method modifies the last 3 rows in the state (where - * the state is 4 words with 4 bytes per word) by shifting bytes cyclically. - * The 1st byte in the second row is moved to the end of the row. The 1st - * and 2nd bytes in the third row are moved to the end of the row. The 1st, - * 2nd, and 3rd bytes are moved in the fourth row. - * - * More details on how AES arithmetic works: - * - * In the polynomial representation of binary numbers, XOR performs addition - * and subtraction and multiplication in GF(2^8) denoted as GF(a, b) - * corresponds with the multiplication of polynomials modulo an irreducible - * polynomial of degree 8. In other words, for AES, GF(a, b) will multiply - * polynomial 'a' with polynomial 'b' and then do a modular reduction by - * an AES-specific irreducible polynomial of degree 8. - * - * A polynomial is irreducible if its only divisors are one and itself. For - * the AES algorithm, this irreducible polynomial is: - * - * m(x) = x^8 + x^4 + x^3 + x + 1, - * - * or {01}{1b} in hexadecimal notation, where each coefficient is a bit: - * 100011011 = 283 = 0x11b. - * - * For example, GF(0x57, 0x83) = 0xc1 because - * - * 0x57 = 87 = 01010111 = x^6 + x^4 + x^2 + x + 1 - * 0x85 = 131 = 10000101 = x^7 + x + 1 - * - * (x^6 + x^4 + x^2 + x + 1) * (x^7 + x + 1) - * = x^13 + x^11 + x^9 + x^8 + x^7 + - * x^7 + x^5 + x^3 + x^2 + x + - * x^6 + x^4 + x^2 + x + 1 - * = x^13 + x^11 + x^9 + x^8 + x^6 + x^5 + x^4 + x^3 + 1 = y - * y modulo (x^8 + x^4 + x^3 + x + 1) - * = x^7 + x^6 + 1. - * - * The modular reduction by m(x) guarantees the result will be a binary - * polynomial of less than degree 8, so that it can fit in a byte. - * - * The operation to multiply a binary polynomial b with x (the polynomial - * x in binary representation is 00000010) is: - * - * b_7x^8 + b_6x^7 + b_5x^6 + b_4x^5 + b_3x^4 + b_2x^3 + b_1x^2 + b_0x^1 - * - * To get GF(b, x) we must reduce that by m(x). If b_7 is 0 (that is the - * most significant bit is 0 in b) then the result is already reduced. If - * it is 1, then we can reduce it by subtracting m(x) via an XOR. - * - * It follows that multiplication by x (00000010 or 0x02) can be implemented - * by performing a left shift followed by a conditional bitwise XOR with - * 0x1b. This operation on bytes is denoted by xtime(). Multiplication by - * higher powers of x can be implemented by repeated application of xtime(). - * - * By adding intermediate results, multiplication by any constant can be - * implemented. For instance: - * - * GF(0x57, 0x13) = 0xfe because: - * - * xtime(b) = (b & 128) ? (b << 1 ^ 0x11b) : (b << 1) - * - * Note: We XOR with 0x11b instead of 0x1b because in javascript our - * datatype for b can be larger than 1 byte, so a left shift will not - * automatically eliminate bits that overflow a byte ... by XOR'ing the - * overflow bit with 1 (the extra one from 0x11b) we zero it out. - * - * GF(0x57, 0x02) = xtime(0x57) = 0xae - * GF(0x57, 0x04) = xtime(0xae) = 0x47 - * GF(0x57, 0x08) = xtime(0x47) = 0x8e - * GF(0x57, 0x10) = xtime(0x8e) = 0x07 - * - * GF(0x57, 0x13) = GF(0x57, (0x01 ^ 0x02 ^ 0x10)) - * - * And by the distributive property (since XOR is addition and GF() is - * multiplication): - * - * = GF(0x57, 0x01) ^ GF(0x57, 0x02) ^ GF(0x57, 0x10) - * = 0x57 ^ 0xae ^ 0x07 - * = 0xfe. - */ -function initialize() { - init = true; - - /* Populate the Rcon table. These are the values given by - [x^(i-1),{00},{00},{00}] where x^(i-1) are powers of x (and x = 0x02) - in the field of GF(2^8), where i starts at 1. - - rcon[0] = [0x00, 0x00, 0x00, 0x00] - rcon[1] = [0x01, 0x00, 0x00, 0x00] 2^(1-1) = 2^0 = 1 - rcon[2] = [0x02, 0x00, 0x00, 0x00] 2^(2-1) = 2^1 = 2 - ... - rcon[9] = [0x1B, 0x00, 0x00, 0x00] 2^(9-1) = 2^8 = 0x1B - rcon[10] = [0x36, 0x00, 0x00, 0x00] 2^(10-1) = 2^9 = 0x36 - - We only store the first byte because it is the only one used. - */ - rcon = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1B, 0x36]; - - // compute xtime table which maps i onto GF(i, 0x02) - var xtime = new Array(256); - for(var i = 0; i < 128; ++i) { - xtime[i] = i << 1; - xtime[i + 128] = (i + 128) << 1 ^ 0x11B; - } - - // compute all other tables - sbox = new Array(256); - isbox = new Array(256); - mix = new Array(4); - imix = new Array(4); - for(var i = 0; i < 4; ++i) { - mix[i] = new Array(256); - imix[i] = new Array(256); - } - var e = 0, ei = 0, e2, e4, e8, sx, sx2, me, ime; - for(var i = 0; i < 256; ++i) { - /* We need to generate the SubBytes() sbox and isbox tables so that - we can perform byte substitutions. This requires us to traverse - all of the elements in GF, find their multiplicative inverses, - and apply to each the following affine transformation: - - bi' = bi ^ b(i + 4) mod 8 ^ b(i + 5) mod 8 ^ b(i + 6) mod 8 ^ - b(i + 7) mod 8 ^ ci - for 0 <= i < 8, where bi is the ith bit of the byte, and ci is the - ith bit of a byte c with the value {63} or {01100011}. - - It is possible to traverse every possible value in a Galois field - using what is referred to as a 'generator'. There are many - generators (128 out of 256): 3,5,6,9,11,82 to name a few. To fully - traverse GF we iterate 255 times, multiplying by our generator - each time. - - On each iteration we can determine the multiplicative inverse for - the current element. - - Suppose there is an element in GF 'e'. For a given generator 'g', - e = g^x. The multiplicative inverse of e is g^(255 - x). It turns - out that if use the inverse of a generator as another generator - it will produce all of the corresponding multiplicative inverses - at the same time. For this reason, we choose 5 as our inverse - generator because it only requires 2 multiplies and 1 add and its - inverse, 82, requires relatively few operations as well. - - In order to apply the affine transformation, the multiplicative - inverse 'ei' of 'e' can be repeatedly XOR'd (4 times) with a - bit-cycling of 'ei'. To do this 'ei' is first stored in 's' and - 'x'. Then 's' is left shifted and the high bit of 's' is made the - low bit. The resulting value is stored in 's'. Then 'x' is XOR'd - with 's' and stored in 'x'. On each subsequent iteration the same - operation is performed. When 4 iterations are complete, 'x' is - XOR'd with 'c' (0x63) and the transformed value is stored in 'x'. - For example: - - s = 01000001 - x = 01000001 - - iteration 1: s = 10000010, x ^= s - iteration 2: s = 00000101, x ^= s - iteration 3: s = 00001010, x ^= s - iteration 4: s = 00010100, x ^= s - x ^= 0x63 - - This can be done with a loop where s = (s << 1) | (s >> 7). However, - it can also be done by using a single 16-bit (in this case 32-bit) - number 'sx'. Since XOR is an associative operation, we can set 'sx' - to 'ei' and then XOR it with 'sx' left-shifted 1,2,3, and 4 times. - The most significant bits will flow into the high 8 bit positions - and be correctly XOR'd with one another. All that remains will be - to cycle the high 8 bits by XOR'ing them all with the lower 8 bits - afterwards. - - At the same time we're populating sbox and isbox we can precompute - the multiplication we'll need to do to do MixColumns() later. - */ - - // apply affine transformation - sx = ei ^ (ei << 1) ^ (ei << 2) ^ (ei << 3) ^ (ei << 4); - sx = (sx >> 8) ^ (sx & 255) ^ 0x63; - - // update tables - sbox[e] = sx; - isbox[sx] = e; - - /* Mixing columns is done using matrix multiplication. The columns - that are to be mixed are each a single word in the current state. - The state has Nb columns (4 columns). Therefore each column is a - 4 byte word. So to mix the columns in a single column 'c' where - its rows are r0, r1, r2, and r3, we use the following matrix - multiplication: - - [2 3 1 1]*[r0,c]=[r'0,c] - [1 2 3 1] [r1,c] [r'1,c] - [1 1 2 3] [r2,c] [r'2,c] - [3 1 1 2] [r3,c] [r'3,c] - - r0, r1, r2, and r3 are each 1 byte of one of the words in the - state (a column). To do matrix multiplication for each mixed - column c' we multiply the corresponding row from the left matrix - with the corresponding column from the right matrix. In total, we - get 4 equations: - - r0,c' = 2*r0,c + 3*r1,c + 1*r2,c + 1*r3,c - r1,c' = 1*r0,c + 2*r1,c + 3*r2,c + 1*r3,c - r2,c' = 1*r0,c + 1*r1,c + 2*r2,c + 3*r3,c - r3,c' = 3*r0,c + 1*r1,c + 1*r2,c + 2*r3,c - - As usual, the multiplication is as previously defined and the - addition is XOR. In order to optimize mixing columns we can store - the multiplication results in tables. If you think of the whole - column as a word (it might help to visualize by mentally rotating - the equations above by counterclockwise 90 degrees) then you can - see that it would be useful to map the multiplications performed on - each byte (r0, r1, r2, r3) onto a word as well. For instance, we - could map 2*r0,1*r0,1*r0,3*r0 onto a word by storing 2*r0 in the - highest 8 bits and 3*r0 in the lowest 8 bits (with the other two - respectively in the middle). This means that a table can be - constructed that uses r0 as an index to the word. We can do the - same with r1, r2, and r3, creating a total of 4 tables. - - To construct a full c', we can just look up each byte of c in - their respective tables and XOR the results together. - - Also, to build each table we only have to calculate the word - for 2,1,1,3 for every byte ... which we can do on each iteration - of this loop since we will iterate over every byte. After we have - calculated 2,1,1,3 we can get the results for the other tables - by cycling the byte at the end to the beginning. For instance - we can take the result of table 2,1,1,3 and produce table 3,2,1,1 - by moving the right most byte to the left most position just like - how you can imagine the 3 moved out of 2,1,1,3 and to the front - to produce 3,2,1,1. - - There is another optimization in that the same multiples of - the current element we need in order to advance our generator - to the next iteration can be reused in performing the 2,1,1,3 - calculation. We also calculate the inverse mix column tables, - with e,9,d,b being the inverse of 2,1,1,3. - - When we're done, and we need to actually mix columns, the first - byte of each state word should be put through mix[0] (2,1,1,3), - the second through mix[1] (3,2,1,1) and so forth. Then they should - be XOR'd together to produce the fully mixed column. - */ - - // calculate mix and imix table values - sx2 = xtime[sx]; - e2 = xtime[e]; - e4 = xtime[e2]; - e8 = xtime[e4]; - me = - (sx2 << 24) ^ // 2 - (sx << 16) ^ // 1 - (sx << 8) ^ // 1 - (sx ^ sx2); // 3 - ime = - (e2 ^ e4 ^ e8) << 24 ^ // E (14) - (e ^ e8) << 16 ^ // 9 - (e ^ e4 ^ e8) << 8 ^ // D (13) - (e ^ e2 ^ e8); // B (11) - // produce each of the mix tables by rotating the 2,1,1,3 value - for(var n = 0; n < 4; ++n) { - mix[n][e] = me; - imix[n][sx] = ime; - // cycle the right most byte to the left most position - // ie: 2,1,1,3 becomes 3,2,1,1 - me = me << 24 | me >>> 8; - ime = ime << 24 | ime >>> 8; - } - - // get next element and inverse - if(e === 0) { - // 1 is the inverse of 1 - e = ei = 1; - } else { - // e = 2e + 2*2*2*(10e)) = multiply e by 82 (chosen generator) - // ei = ei + 2*2*ei = multiply ei by 5 (inverse generator) - e = e2 ^ xtime[xtime[xtime[e2 ^ e8]]]; - ei ^= xtime[xtime[ei]]; - } - } -} - -/** - * Generates a key schedule using the AES key expansion algorithm. - * - * The AES algorithm takes the Cipher Key, K, and performs a Key Expansion - * routine to generate a key schedule. The Key Expansion generates a total - * of Nb*(Nr + 1) words: the algorithm requires an initial set of Nb words, - * and each of the Nr rounds requires Nb words of key data. The resulting - * key schedule consists of a linear array of 4-byte words, denoted [wi ], - * with i in the range 0 <= i < Nb(Nr + 1). - * - * KeyExpansion(byte key[4*Nk], word w[Nb*(Nr+1)], Nk) - * AES-128 (Nb=4, Nk=4, Nr=10) - * AES-192 (Nb=4, Nk=6, Nr=12) - * AES-256 (Nb=4, Nk=8, Nr=14) - * Note: Nr=Nk+6. - * - * Nb is the number of columns (32-bit words) comprising the State (or - * number of bytes in a block). For AES, Nb=4. - * - * @param key the key to schedule (as an array of 32-bit words). - * @param decrypt true to modify the key schedule to decrypt, false not to. - * - * @return the generated key schedule. - */ -function _expandKey(key, decrypt) { - // copy the key's words to initialize the key schedule - var w = key.slice(0); - - /* RotWord() will rotate a word, moving the first byte to the last - byte's position (shifting the other bytes left). - - We will be getting the value of Rcon at i / Nk. 'i' will iterate - from Nk to (Nb * Nr+1). Nk = 4 (4 byte key), Nb = 4 (4 words in - a block), Nr = Nk + 6 (10). Therefore 'i' will iterate from - 4 to 44 (exclusive). Each time we iterate 4 times, i / Nk will - increase by 1. We use a counter iNk to keep track of this. - */ - - // go through the rounds expanding the key - var temp, iNk = 1; - var Nk = w.length; - var Nr1 = Nk + 6 + 1; - var end = Nb * Nr1; - for(var i = Nk; i < end; ++i) { - temp = w[i - 1]; - if(i % Nk === 0) { - // temp = SubWord(RotWord(temp)) ^ Rcon[i / Nk] - temp = - sbox[temp >>> 16 & 255] << 24 ^ - sbox[temp >>> 8 & 255] << 16 ^ - sbox[temp & 255] << 8 ^ - sbox[temp >>> 24] ^ (rcon[iNk] << 24); - iNk++; - } else if(Nk > 6 && (i % Nk === 4)) { - // temp = SubWord(temp) - temp = - sbox[temp >>> 24] << 24 ^ - sbox[temp >>> 16 & 255] << 16 ^ - sbox[temp >>> 8 & 255] << 8 ^ - sbox[temp & 255]; - } - w[i] = w[i - Nk] ^ temp; - } - - /* When we are updating a cipher block we always use the code path for - encryption whether we are decrypting or not (to shorten code and - simplify the generation of look up tables). However, because there - are differences in the decryption algorithm, other than just swapping - in different look up tables, we must transform our key schedule to - account for these changes: - - 1. The decryption algorithm gets its key rounds in reverse order. - 2. The decryption algorithm adds the round key before mixing columns - instead of afterwards. - - We don't need to modify our key schedule to handle the first case, - we can just traverse the key schedule in reverse order when decrypting. - - The second case requires a little work. - - The tables we built for performing rounds will take an input and then - perform SubBytes() and MixColumns() or, for the decrypt version, - InvSubBytes() and InvMixColumns(). But the decrypt algorithm requires - us to AddRoundKey() before InvMixColumns(). This means we'll need to - apply some transformations to the round key to inverse-mix its columns - so they'll be correct for moving AddRoundKey() to after the state has - had its columns inverse-mixed. - - To inverse-mix the columns of the state when we're decrypting we use a - lookup table that will apply InvSubBytes() and InvMixColumns() at the - same time. However, the round key's bytes are not inverse-substituted - in the decryption algorithm. To get around this problem, we can first - substitute the bytes in the round key so that when we apply the - transformation via the InvSubBytes()+InvMixColumns() table, it will - undo our substitution leaving us with the original value that we - want -- and then inverse-mix that value. - - This change will correctly alter our key schedule so that we can XOR - each round key with our already transformed decryption state. This - allows us to use the same code path as the encryption algorithm. - - We make one more change to the decryption key. Since the decryption - algorithm runs in reverse from the encryption algorithm, we reverse - the order of the round keys to avoid having to iterate over the key - schedule backwards when running the encryption algorithm later in - decryption mode. In addition to reversing the order of the round keys, - we also swap each round key's 2nd and 4th rows. See the comments - section where rounds are performed for more details about why this is - done. These changes are done inline with the other substitution - described above. - */ - if(decrypt) { - var tmp; - var m0 = imix[0]; - var m1 = imix[1]; - var m2 = imix[2]; - var m3 = imix[3]; - var wnew = w.slice(0); - end = w.length; - for(var i = 0, wi = end - Nb; i < end; i += Nb, wi -= Nb) { - // do not sub the first or last round key (round keys are Nb - // words) as no column mixing is performed before they are added, - // but do change the key order - if(i === 0 || i === (end - Nb)) { - wnew[i] = w[wi]; - wnew[i + 1] = w[wi + 3]; - wnew[i + 2] = w[wi + 2]; - wnew[i + 3] = w[wi + 1]; - } else { - // substitute each round key byte because the inverse-mix - // table will inverse-substitute it (effectively cancel the - // substitution because round key bytes aren't sub'd in - // decryption mode) and swap indexes 3 and 1 - for(var n = 0; n < Nb; ++n) { - tmp = w[wi + n]; - wnew[i + (3&-n)] = - m0[sbox[tmp >>> 24]] ^ - m1[sbox[tmp >>> 16 & 255]] ^ - m2[sbox[tmp >>> 8 & 255]] ^ - m3[sbox[tmp & 255]]; - } - } - } - w = wnew; - } - - return w; -} - -/** - * Updates a single block (16 bytes) using AES. The update will either - * encrypt or decrypt the block. - * - * @param w the key schedule. - * @param input the input block (an array of 32-bit words). - * @param output the updated output block. - * @param decrypt true to decrypt the block, false to encrypt it. - */ -function _updateBlock(w, input, output, decrypt) { - /* - Cipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)]) - begin - byte state[4,Nb] - state = in - AddRoundKey(state, w[0, Nb-1]) - for round = 1 step 1 to Nr-1 - SubBytes(state) - ShiftRows(state) - MixColumns(state) - AddRoundKey(state, w[round*Nb, (round+1)*Nb-1]) - end for - SubBytes(state) - ShiftRows(state) - AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1]) - out = state - end - - InvCipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)]) - begin - byte state[4,Nb] - state = in - AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1]) - for round = Nr-1 step -1 downto 1 - InvShiftRows(state) - InvSubBytes(state) - AddRoundKey(state, w[round*Nb, (round+1)*Nb-1]) - InvMixColumns(state) - end for - InvShiftRows(state) - InvSubBytes(state) - AddRoundKey(state, w[0, Nb-1]) - out = state - end - */ - - // Encrypt: AddRoundKey(state, w[0, Nb-1]) - // Decrypt: AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1]) - var Nr = w.length / 4 - 1; - var m0, m1, m2, m3, sub; - if(decrypt) { - m0 = imix[0]; - m1 = imix[1]; - m2 = imix[2]; - m3 = imix[3]; - sub = isbox; - } else { - m0 = mix[0]; - m1 = mix[1]; - m2 = mix[2]; - m3 = mix[3]; - sub = sbox; - } - var a, b, c, d, a2, b2, c2; - a = input[0] ^ w[0]; - b = input[decrypt ? 3 : 1] ^ w[1]; - c = input[2] ^ w[2]; - d = input[decrypt ? 1 : 3] ^ w[3]; - var i = 3; - - /* In order to share code we follow the encryption algorithm when both - encrypting and decrypting. To account for the changes required in the - decryption algorithm, we use different lookup tables when decrypting - and use a modified key schedule to account for the difference in the - order of transformations applied when performing rounds. We also get - key rounds in reverse order (relative to encryption). */ - for(var round = 1; round < Nr; ++round) { - /* As described above, we'll be using table lookups to perform the - column mixing. Each column is stored as a word in the state (the - array 'input' has one column as a word at each index). In order to - mix a column, we perform these transformations on each row in c, - which is 1 byte in each word. The new column for c0 is c'0: - - m0 m1 m2 m3 - r0,c'0 = 2*r0,c0 + 3*r1,c0 + 1*r2,c0 + 1*r3,c0 - r1,c'0 = 1*r0,c0 + 2*r1,c0 + 3*r2,c0 + 1*r3,c0 - r2,c'0 = 1*r0,c0 + 1*r1,c0 + 2*r2,c0 + 3*r3,c0 - r3,c'0 = 3*r0,c0 + 1*r1,c0 + 1*r2,c0 + 2*r3,c0 - - So using mix tables where c0 is a word with r0 being its upper - 8 bits and r3 being its lower 8 bits: - - m0[c0 >> 24] will yield this word: [2*r0,1*r0,1*r0,3*r0] - ... - m3[c0 & 255] will yield this word: [1*r3,1*r3,3*r3,2*r3] - - Therefore to mix the columns in each word in the state we - do the following (& 255 omitted for brevity): - c'0,r0 = m0[c0 >> 24] ^ m1[c1 >> 16] ^ m2[c2 >> 8] ^ m3[c3] - c'0,r1 = m0[c0 >> 24] ^ m1[c1 >> 16] ^ m2[c2 >> 8] ^ m3[c3] - c'0,r2 = m0[c0 >> 24] ^ m1[c1 >> 16] ^ m2[c2 >> 8] ^ m3[c3] - c'0,r3 = m0[c0 >> 24] ^ m1[c1 >> 16] ^ m2[c2 >> 8] ^ m3[c3] - - However, before mixing, the algorithm requires us to perform - ShiftRows(). The ShiftRows() transformation cyclically shifts the - last 3 rows of the state over different offsets. The first row - (r = 0) is not shifted. - - s'_r,c = s_r,(c + shift(r, Nb) mod Nb - for 0 < r < 4 and 0 <= c < Nb and - shift(1, 4) = 1 - shift(2, 4) = 2 - shift(3, 4) = 3. - - This causes the first byte in r = 1 to be moved to the end of - the row, the first 2 bytes in r = 2 to be moved to the end of - the row, the first 3 bytes in r = 3 to be moved to the end of - the row: - - r1: [c0 c1 c2 c3] => [c1 c2 c3 c0] - r2: [c0 c1 c2 c3] [c2 c3 c0 c1] - r3: [c0 c1 c2 c3] [c3 c0 c1 c2] - - We can make these substitutions inline with our column mixing to - generate an updated set of equations to produce each word in the - state (note the columns have changed positions): - - c0 c1 c2 c3 => c0 c1 c2 c3 - c0 c1 c2 c3 c1 c2 c3 c0 (cycled 1 byte) - c0 c1 c2 c3 c2 c3 c0 c1 (cycled 2 bytes) - c0 c1 c2 c3 c3 c0 c1 c2 (cycled 3 bytes) - - Therefore: - - c'0 = 2*r0,c0 + 3*r1,c1 + 1*r2,c2 + 1*r3,c3 - c'0 = 1*r0,c0 + 2*r1,c1 + 3*r2,c2 + 1*r3,c3 - c'0 = 1*r0,c0 + 1*r1,c1 + 2*r2,c2 + 3*r3,c3 - c'0 = 3*r0,c0 + 1*r1,c1 + 1*r2,c2 + 2*r3,c3 - - c'1 = 2*r0,c1 + 3*r1,c2 + 1*r2,c3 + 1*r3,c0 - c'1 = 1*r0,c1 + 2*r1,c2 + 3*r2,c3 + 1*r3,c0 - c'1 = 1*r0,c1 + 1*r1,c2 + 2*r2,c3 + 3*r3,c0 - c'1 = 3*r0,c1 + 1*r1,c2 + 1*r2,c3 + 2*r3,c0 - - ... and so forth for c'2 and c'3. The important distinction is - that the columns are cycling, with c0 being used with the m0 - map when calculating c0, but c1 being used with the m0 map when - calculating c1 ... and so forth. - - When performing the inverse we transform the mirror image and - skip the bottom row, instead of the top one, and move upwards: - - c3 c2 c1 c0 => c0 c3 c2 c1 (cycled 3 bytes) *same as encryption - c3 c2 c1 c0 c1 c0 c3 c2 (cycled 2 bytes) - c3 c2 c1 c0 c2 c1 c0 c3 (cycled 1 byte) *same as encryption - c3 c2 c1 c0 c3 c2 c1 c0 - - If you compare the resulting matrices for ShiftRows()+MixColumns() - and for InvShiftRows()+InvMixColumns() the 2nd and 4th columns are - different (in encrypt mode vs. decrypt mode). So in order to use - the same code to handle both encryption and decryption, we will - need to do some mapping. - - If in encryption mode we let a=c0, b=c1, c=c2, d=c3, and r be - a row number in the state, then the resulting matrix in encryption - mode for applying the above transformations would be: - - r1: a b c d - r2: b c d a - r3: c d a b - r4: d a b c - - If we did the same in decryption mode we would get: - - r1: a d c b - r2: b a d c - r3: c b a d - r4: d c b a - - If instead we swap d and b (set b=c3 and d=c1), then we get: - - r1: a b c d - r2: d a b c - r3: c d a b - r4: b c d a - - Now the 1st and 3rd rows are the same as the encryption matrix. All - we need to do then to make the mapping exactly the same is to swap - the 2nd and 4th rows when in decryption mode. To do this without - having to do it on each iteration, we swapped the 2nd and 4th rows - in the decryption key schedule. We also have to do the swap above - when we first pull in the input and when we set the final output. */ - a2 = - m0[a >>> 24] ^ - m1[b >>> 16 & 255] ^ - m2[c >>> 8 & 255] ^ - m3[d & 255] ^ w[++i]; - b2 = - m0[b >>> 24] ^ - m1[c >>> 16 & 255] ^ - m2[d >>> 8 & 255] ^ - m3[a & 255] ^ w[++i]; - c2 = - m0[c >>> 24] ^ - m1[d >>> 16 & 255] ^ - m2[a >>> 8 & 255] ^ - m3[b & 255] ^ w[++i]; - d = - m0[d >>> 24] ^ - m1[a >>> 16 & 255] ^ - m2[b >>> 8 & 255] ^ - m3[c & 255] ^ w[++i]; - a = a2; - b = b2; - c = c2; - } - - /* - Encrypt: - SubBytes(state) - ShiftRows(state) - AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1]) - - Decrypt: - InvShiftRows(state) - InvSubBytes(state) - AddRoundKey(state, w[0, Nb-1]) - */ - // Note: rows are shifted inline - output[0] = - (sub[a >>> 24] << 24) ^ - (sub[b >>> 16 & 255] << 16) ^ - (sub[c >>> 8 & 255] << 8) ^ - (sub[d & 255]) ^ w[++i]; - output[decrypt ? 3 : 1] = - (sub[b >>> 24] << 24) ^ - (sub[c >>> 16 & 255] << 16) ^ - (sub[d >>> 8 & 255] << 8) ^ - (sub[a & 255]) ^ w[++i]; - output[2] = - (sub[c >>> 24] << 24) ^ - (sub[d >>> 16 & 255] << 16) ^ - (sub[a >>> 8 & 255] << 8) ^ - (sub[b & 255]) ^ w[++i]; - output[decrypt ? 1 : 3] = - (sub[d >>> 24] << 24) ^ - (sub[a >>> 16 & 255] << 16) ^ - (sub[b >>> 8 & 255] << 8) ^ - (sub[c & 255]) ^ w[++i]; -} - -/** - * Deprecated. Instead, use: - * - * forge.cipher.createCipher('AES-', key); - * forge.cipher.createDecipher('AES-', key); - * - * Creates a deprecated AES cipher object. This object's mode will default to - * CBC (cipher-block-chaining). - * - * The key and iv may be given as a string of bytes, an array of bytes, a - * byte buffer, or an array of 32-bit words. - * - * @param options the options to use. - * key the symmetric key to use. - * output the buffer to write to. - * decrypt true for decryption, false for encryption. - * mode the cipher mode to use (default: 'CBC'). - * - * @return the cipher. - */ -function _createCipher(options) { - options = options || {}; - var mode = (options.mode || 'CBC').toUpperCase(); - var algorithm = 'AES-' + mode; - - var cipher; - if(options.decrypt) { - cipher = forge.cipher.createDecipher(algorithm, options.key); - } else { - cipher = forge.cipher.createCipher(algorithm, options.key); - } - - // backwards compatible start API - var start = cipher.start; - cipher.start = function(iv, options) { - // backwards compatibility: support second arg as output buffer - var output = null; - if(options instanceof forge.util.ByteBuffer) { - output = options; - options = {}; - } - options = options || {}; - options.output = output; - options.iv = iv; - start.call(cipher, options); - }; - - return cipher; -} diff --git a/reverse_engineering/node_modules/node-forge/lib/aesCipherSuites.js b/reverse_engineering/node_modules/node-forge/lib/aesCipherSuites.js deleted file mode 100644 index fed60f3..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/aesCipherSuites.js +++ /dev/null @@ -1,282 +0,0 @@ -/** - * A Javascript implementation of AES Cipher Suites for TLS. - * - * @author Dave Longley - * - * Copyright (c) 2009-2015 Digital Bazaar, Inc. - * - */ -var forge = require('./forge'); -require('./aes'); -require('./tls'); - -var tls = module.exports = forge.tls; - -/** - * Supported cipher suites. - */ -tls.CipherSuites['TLS_RSA_WITH_AES_128_CBC_SHA'] = { - id: [0x00, 0x2f], - name: 'TLS_RSA_WITH_AES_128_CBC_SHA', - initSecurityParameters: function(sp) { - sp.bulk_cipher_algorithm = tls.BulkCipherAlgorithm.aes; - sp.cipher_type = tls.CipherType.block; - sp.enc_key_length = 16; - sp.block_length = 16; - sp.fixed_iv_length = 16; - sp.record_iv_length = 16; - sp.mac_algorithm = tls.MACAlgorithm.hmac_sha1; - sp.mac_length = 20; - sp.mac_key_length = 20; - }, - initConnectionState: initConnectionState -}; -tls.CipherSuites['TLS_RSA_WITH_AES_256_CBC_SHA'] = { - id: [0x00, 0x35], - name: 'TLS_RSA_WITH_AES_256_CBC_SHA', - initSecurityParameters: function(sp) { - sp.bulk_cipher_algorithm = tls.BulkCipherAlgorithm.aes; - sp.cipher_type = tls.CipherType.block; - sp.enc_key_length = 32; - sp.block_length = 16; - sp.fixed_iv_length = 16; - sp.record_iv_length = 16; - sp.mac_algorithm = tls.MACAlgorithm.hmac_sha1; - sp.mac_length = 20; - sp.mac_key_length = 20; - }, - initConnectionState: initConnectionState -}; - -function initConnectionState(state, c, sp) { - var client = (c.entity === forge.tls.ConnectionEnd.client); - - // cipher setup - state.read.cipherState = { - init: false, - cipher: forge.cipher.createDecipher('AES-CBC', client ? - sp.keys.server_write_key : sp.keys.client_write_key), - iv: client ? sp.keys.server_write_IV : sp.keys.client_write_IV - }; - state.write.cipherState = { - init: false, - cipher: forge.cipher.createCipher('AES-CBC', client ? - sp.keys.client_write_key : sp.keys.server_write_key), - iv: client ? sp.keys.client_write_IV : sp.keys.server_write_IV - }; - state.read.cipherFunction = decrypt_aes_cbc_sha1; - state.write.cipherFunction = encrypt_aes_cbc_sha1; - - // MAC setup - state.read.macLength = state.write.macLength = sp.mac_length; - state.read.macFunction = state.write.macFunction = tls.hmac_sha1; -} - -/** - * Encrypts the TLSCompressed record into a TLSCipherText record using AES - * in CBC mode. - * - * @param record the TLSCompressed record to encrypt. - * @param s the ConnectionState to use. - * - * @return true on success, false on failure. - */ -function encrypt_aes_cbc_sha1(record, s) { - var rval = false; - - // append MAC to fragment, update sequence number - var mac = s.macFunction(s.macKey, s.sequenceNumber, record); - record.fragment.putBytes(mac); - s.updateSequenceNumber(); - - // TLS 1.1+ use an explicit IV every time to protect against CBC attacks - var iv; - if(record.version.minor === tls.Versions.TLS_1_0.minor) { - // use the pre-generated IV when initializing for TLS 1.0, otherwise use - // the residue from the previous encryption - iv = s.cipherState.init ? null : s.cipherState.iv; - } else { - iv = forge.random.getBytesSync(16); - } - - s.cipherState.init = true; - - // start cipher - var cipher = s.cipherState.cipher; - cipher.start({iv: iv}); - - // TLS 1.1+ write IV into output - if(record.version.minor >= tls.Versions.TLS_1_1.minor) { - cipher.output.putBytes(iv); - } - - // do encryption (default padding is appropriate) - cipher.update(record.fragment); - if(cipher.finish(encrypt_aes_cbc_sha1_padding)) { - // set record fragment to encrypted output - record.fragment = cipher.output; - record.length = record.fragment.length(); - rval = true; - } - - return rval; -} - -/** - * Handles padding for aes_cbc_sha1 in encrypt mode. - * - * @param blockSize the block size. - * @param input the input buffer. - * @param decrypt true in decrypt mode, false in encrypt mode. - * - * @return true on success, false on failure. - */ -function encrypt_aes_cbc_sha1_padding(blockSize, input, decrypt) { - /* The encrypted data length (TLSCiphertext.length) is one more than the sum - of SecurityParameters.block_length, TLSCompressed.length, - SecurityParameters.mac_length, and padding_length. - - The padding may be any length up to 255 bytes long, as long as it results in - the TLSCiphertext.length being an integral multiple of the block length. - Lengths longer than necessary might be desirable to frustrate attacks on a - protocol based on analysis of the lengths of exchanged messages. Each uint8 - in the padding data vector must be filled with the padding length value. - - The padding length should be such that the total size of the - GenericBlockCipher structure is a multiple of the cipher's block length. - Legal values range from zero to 255, inclusive. This length specifies the - length of the padding field exclusive of the padding_length field itself. - - This is slightly different from PKCS#7 because the padding value is 1 - less than the actual number of padding bytes if you include the - padding_length uint8 itself as a padding byte. */ - if(!decrypt) { - // get the number of padding bytes required to reach the blockSize and - // subtract 1 for the padding value (to make room for the padding_length - // uint8) - var padding = blockSize - (input.length() % blockSize); - input.fillWithByte(padding - 1, padding); - } - return true; -} - -/** - * Handles padding for aes_cbc_sha1 in decrypt mode. - * - * @param blockSize the block size. - * @param output the output buffer. - * @param decrypt true in decrypt mode, false in encrypt mode. - * - * @return true on success, false on failure. - */ -function decrypt_aes_cbc_sha1_padding(blockSize, output, decrypt) { - var rval = true; - if(decrypt) { - /* The last byte in the output specifies the number of padding bytes not - including itself. Each of the padding bytes has the same value as that - last byte (known as the padding_length). Here we check all padding - bytes to ensure they have the value of padding_length even if one of - them is bad in order to ward-off timing attacks. */ - var len = output.length(); - var paddingLength = output.last(); - for(var i = len - 1 - paddingLength; i < len - 1; ++i) { - rval = rval && (output.at(i) == paddingLength); - } - if(rval) { - // trim off padding bytes and last padding length byte - output.truncate(paddingLength + 1); - } - } - return rval; -} - -/** - * Decrypts a TLSCipherText record into a TLSCompressed record using - * AES in CBC mode. - * - * @param record the TLSCipherText record to decrypt. - * @param s the ConnectionState to use. - * - * @return true on success, false on failure. - */ -function decrypt_aes_cbc_sha1(record, s) { - var rval = false; - - var iv; - if(record.version.minor === tls.Versions.TLS_1_0.minor) { - // use pre-generated IV when initializing for TLS 1.0, otherwise use the - // residue from the previous decryption - iv = s.cipherState.init ? null : s.cipherState.iv; - } else { - // TLS 1.1+ use an explicit IV every time to protect against CBC attacks - // that is appended to the record fragment - iv = record.fragment.getBytes(16); - } - - s.cipherState.init = true; - - // start cipher - var cipher = s.cipherState.cipher; - cipher.start({iv: iv}); - - // do decryption - cipher.update(record.fragment); - rval = cipher.finish(decrypt_aes_cbc_sha1_padding); - - // even if decryption fails, keep going to minimize timing attacks - - // decrypted data: - // first (len - 20) bytes = application data - // last 20 bytes = MAC - var macLen = s.macLength; - - // create a random MAC to check against should the mac length check fail - // Note: do this regardless of the failure to keep timing consistent - var mac = forge.random.getBytesSync(macLen); - - // get fragment and mac - var len = cipher.output.length(); - if(len >= macLen) { - record.fragment = cipher.output.getBytes(len - macLen); - mac = cipher.output.getBytes(macLen); - } else { - // bad data, but get bytes anyway to try to keep timing consistent - record.fragment = cipher.output.getBytes(); - } - record.fragment = forge.util.createBuffer(record.fragment); - record.length = record.fragment.length(); - - // see if data integrity checks out, update sequence number - var mac2 = s.macFunction(s.macKey, s.sequenceNumber, record); - s.updateSequenceNumber(); - rval = compareMacs(s.macKey, mac, mac2) && rval; - return rval; -} - -/** - * Safely compare two MACs. This function will compare two MACs in a way - * that protects against timing attacks. - * - * TODO: Expose elsewhere as a utility API. - * - * See: https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2011/february/double-hmac-verification/ - * - * @param key the MAC key to use. - * @param mac1 as a binary-encoded string of bytes. - * @param mac2 as a binary-encoded string of bytes. - * - * @return true if the MACs are the same, false if not. - */ -function compareMacs(key, mac1, mac2) { - var hmac = forge.hmac.create(); - - hmac.start('SHA1', key); - hmac.update(mac1); - mac1 = hmac.digest().getBytes(); - - hmac.start(null, null); - hmac.update(mac2); - mac2 = hmac.digest().getBytes(); - - return mac1 === mac2; -} diff --git a/reverse_engineering/node_modules/node-forge/lib/asn1-validator.js b/reverse_engineering/node_modules/node-forge/lib/asn1-validator.js deleted file mode 100644 index 2be3285..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/asn1-validator.js +++ /dev/null @@ -1,91 +0,0 @@ -/** - * Copyright (c) 2019 Digital Bazaar, Inc. - */ - -var forge = require('./forge'); -require('./asn1'); -var asn1 = forge.asn1; - -exports.privateKeyValidator = { - // PrivateKeyInfo - name: 'PrivateKeyInfo', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - // Version (INTEGER) - name: 'PrivateKeyInfo.version', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.INTEGER, - constructed: false, - capture: 'privateKeyVersion' - }, { - // privateKeyAlgorithm - name: 'PrivateKeyInfo.privateKeyAlgorithm', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'AlgorithmIdentifier.algorithm', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OID, - constructed: false, - capture: 'privateKeyOid' - }] - }, { - // PrivateKey - name: 'PrivateKeyInfo', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OCTETSTRING, - constructed: false, - capture: 'privateKey' - }] -}; - -exports.publicKeyValidator = { - name: 'SubjectPublicKeyInfo', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - captureAsn1: 'subjectPublicKeyInfo', - value: [{ - name: 'SubjectPublicKeyInfo.AlgorithmIdentifier', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'AlgorithmIdentifier.algorithm', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OID, - constructed: false, - capture: 'publicKeyOid' - }] - }, - // capture group for ed25519PublicKey - { - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.BITSTRING, - constructed: false, - composed: true, - captureBitStringValue: 'ed25519PublicKey' - } - // FIXME: this is capture group for rsaPublicKey, use it in this API or - // discard? - /* { - // subjectPublicKey - name: 'SubjectPublicKeyInfo.subjectPublicKey', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.BITSTRING, - constructed: false, - value: [{ - // RSAPublicKey - name: 'SubjectPublicKeyInfo.subjectPublicKey.RSAPublicKey', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - optional: true, - captureAsn1: 'rsaPublicKey' - }] - } */ - ] -}; diff --git a/reverse_engineering/node_modules/node-forge/lib/asn1.js b/reverse_engineering/node_modules/node-forge/lib/asn1.js deleted file mode 100644 index e0fea0e..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/asn1.js +++ /dev/null @@ -1,1408 +0,0 @@ -/** - * Javascript implementation of Abstract Syntax Notation Number One. - * - * @author Dave Longley - * - * Copyright (c) 2010-2015 Digital Bazaar, Inc. - * - * An API for storing data using the Abstract Syntax Notation Number One - * format using DER (Distinguished Encoding Rules) encoding. This encoding is - * commonly used to store data for PKI, i.e. X.509 Certificates, and this - * implementation exists for that purpose. - * - * Abstract Syntax Notation Number One (ASN.1) is used to define the abstract - * syntax of information without restricting the way the information is encoded - * for transmission. It provides a standard that allows for open systems - * communication. ASN.1 defines the syntax of information data and a number of - * simple data types as well as a notation for describing them and specifying - * values for them. - * - * The RSA algorithm creates public and private keys that are often stored in - * X.509 or PKCS#X formats -- which use ASN.1 (encoded in DER format). This - * class provides the most basic functionality required to store and load DSA - * keys that are encoded according to ASN.1. - * - * The most common binary encodings for ASN.1 are BER (Basic Encoding Rules) - * and DER (Distinguished Encoding Rules). DER is just a subset of BER that - * has stricter requirements for how data must be encoded. - * - * Each ASN.1 structure has a tag (a byte identifying the ASN.1 structure type) - * and a byte array for the value of this ASN1 structure which may be data or a - * list of ASN.1 structures. - * - * Each ASN.1 structure using BER is (Tag-Length-Value): - * - * | byte 0 | bytes X | bytes Y | - * |--------|---------|---------- - * | tag | length | value | - * - * ASN.1 allows for tags to be of "High-tag-number form" which allows a tag to - * be two or more octets, but that is not supported by this class. A tag is - * only 1 byte. Bits 1-5 give the tag number (ie the data type within a - * particular 'class'), 6 indicates whether or not the ASN.1 value is - * constructed from other ASN.1 values, and bits 7 and 8 give the 'class'. If - * bits 7 and 8 are both zero, the class is UNIVERSAL. If only bit 7 is set, - * then the class is APPLICATION. If only bit 8 is set, then the class is - * CONTEXT_SPECIFIC. If both bits 7 and 8 are set, then the class is PRIVATE. - * The tag numbers for the data types for the class UNIVERSAL are listed below: - * - * UNIVERSAL 0 Reserved for use by the encoding rules - * UNIVERSAL 1 Boolean type - * UNIVERSAL 2 Integer type - * UNIVERSAL 3 Bitstring type - * UNIVERSAL 4 Octetstring type - * UNIVERSAL 5 Null type - * UNIVERSAL 6 Object identifier type - * UNIVERSAL 7 Object descriptor type - * UNIVERSAL 8 External type and Instance-of type - * UNIVERSAL 9 Real type - * UNIVERSAL 10 Enumerated type - * UNIVERSAL 11 Embedded-pdv type - * UNIVERSAL 12 UTF8String type - * UNIVERSAL 13 Relative object identifier type - * UNIVERSAL 14-15 Reserved for future editions - * UNIVERSAL 16 Sequence and Sequence-of types - * UNIVERSAL 17 Set and Set-of types - * UNIVERSAL 18-22, 25-30 Character string types - * UNIVERSAL 23-24 Time types - * - * The length of an ASN.1 structure is specified after the tag identifier. - * There is a definite form and an indefinite form. The indefinite form may - * be used if the encoding is constructed and not all immediately available. - * The indefinite form is encoded using a length byte with only the 8th bit - * set. The end of the constructed object is marked using end-of-contents - * octets (two zero bytes). - * - * The definite form looks like this: - * - * The length may take up 1 or more bytes, it depends on the length of the - * value of the ASN.1 structure. DER encoding requires that if the ASN.1 - * structure has a value that has a length greater than 127, more than 1 byte - * will be used to store its length, otherwise just one byte will be used. - * This is strict. - * - * In the case that the length of the ASN.1 value is less than 127, 1 octet - * (byte) is used to store the "short form" length. The 8th bit has a value of - * 0 indicating the length is "short form" and not "long form" and bits 7-1 - * give the length of the data. (The 8th bit is the left-most, most significant - * bit: also known as big endian or network format). - * - * In the case that the length of the ASN.1 value is greater than 127, 2 to - * 127 octets (bytes) are used to store the "long form" length. The first - * byte's 8th bit is set to 1 to indicate the length is "long form." Bits 7-1 - * give the number of additional octets. All following octets are in base 256 - * with the most significant digit first (typical big-endian binary unsigned - * integer storage). So, for instance, if the length of a value was 257, the - * first byte would be set to: - * - * 10000010 = 130 = 0x82. - * - * This indicates there are 2 octets (base 256) for the length. The second and - * third bytes (the octets just mentioned) would store the length in base 256: - * - * octet 2: 00000001 = 1 * 256^1 = 256 - * octet 3: 00000001 = 1 * 256^0 = 1 - * total = 257 - * - * The algorithm for converting a js integer value of 257 to base-256 is: - * - * var value = 257; - * var bytes = []; - * bytes[0] = (value >>> 8) & 0xFF; // most significant byte first - * bytes[1] = value & 0xFF; // least significant byte last - * - * On the ASN.1 UNIVERSAL Object Identifier (OID) type: - * - * An OID can be written like: "value1.value2.value3...valueN" - * - * The DER encoding rules: - * - * The first byte has the value 40 * value1 + value2. - * The following bytes, if any, encode the remaining values. Each value is - * encoded in base 128, most significant digit first (big endian), with as - * few digits as possible, and the most significant bit of each byte set - * to 1 except the last in each value's encoding. For example: Given the - * OID "1.2.840.113549", its DER encoding is (remember each byte except the - * last one in each encoding is OR'd with 0x80): - * - * byte 1: 40 * 1 + 2 = 42 = 0x2A. - * bytes 2-3: 128 * 6 + 72 = 840 = 6 72 = 6 72 = 0x0648 = 0x8648 - * bytes 4-6: 16384 * 6 + 128 * 119 + 13 = 6 119 13 = 0x06770D = 0x86F70D - * - * The final value is: 0x2A864886F70D. - * The full OID (including ASN.1 tag and length of 6 bytes) is: - * 0x06062A864886F70D - */ -var forge = require('./forge'); -require('./util'); -require('./oids'); - -/* ASN.1 API */ -var asn1 = module.exports = forge.asn1 = forge.asn1 || {}; - -/** - * ASN.1 classes. - */ -asn1.Class = { - UNIVERSAL: 0x00, - APPLICATION: 0x40, - CONTEXT_SPECIFIC: 0x80, - PRIVATE: 0xC0 -}; - -/** - * ASN.1 types. Not all types are supported by this implementation, only - * those necessary to implement a simple PKI are implemented. - */ -asn1.Type = { - NONE: 0, - BOOLEAN: 1, - INTEGER: 2, - BITSTRING: 3, - OCTETSTRING: 4, - NULL: 5, - OID: 6, - ODESC: 7, - EXTERNAL: 8, - REAL: 9, - ENUMERATED: 10, - EMBEDDED: 11, - UTF8: 12, - ROID: 13, - SEQUENCE: 16, - SET: 17, - PRINTABLESTRING: 19, - IA5STRING: 22, - UTCTIME: 23, - GENERALIZEDTIME: 24, - BMPSTRING: 30 -}; - -/** - * Creates a new asn1 object. - * - * @param tagClass the tag class for the object. - * @param type the data type (tag number) for the object. - * @param constructed true if the asn1 object is in constructed form. - * @param value the value for the object, if it is not constructed. - * @param [options] the options to use: - * [bitStringContents] the plain BIT STRING content including padding - * byte. - * - * @return the asn1 object. - */ -asn1.create = function(tagClass, type, constructed, value, options) { - /* An asn1 object has a tagClass, a type, a constructed flag, and a - value. The value's type depends on the constructed flag. If - constructed, it will contain a list of other asn1 objects. If not, - it will contain the ASN.1 value as an array of bytes formatted - according to the ASN.1 data type. */ - - // remove undefined values - if(forge.util.isArray(value)) { - var tmp = []; - for(var i = 0; i < value.length; ++i) { - if(value[i] !== undefined) { - tmp.push(value[i]); - } - } - value = tmp; - } - - var obj = { - tagClass: tagClass, - type: type, - constructed: constructed, - composed: constructed || forge.util.isArray(value), - value: value - }; - if(options && 'bitStringContents' in options) { - // TODO: copy byte buffer if it's a buffer not a string - obj.bitStringContents = options.bitStringContents; - // TODO: add readonly flag to avoid this overhead - // save copy to detect changes - obj.original = asn1.copy(obj); - } - return obj; -}; - -/** - * Copies an asn1 object. - * - * @param obj the asn1 object. - * @param [options] copy options: - * [excludeBitStringContents] true to not copy bitStringContents - * - * @return the a copy of the asn1 object. - */ -asn1.copy = function(obj, options) { - var copy; - - if(forge.util.isArray(obj)) { - copy = []; - for(var i = 0; i < obj.length; ++i) { - copy.push(asn1.copy(obj[i], options)); - } - return copy; - } - - if(typeof obj === 'string') { - // TODO: copy byte buffer if it's a buffer not a string - return obj; - } - - copy = { - tagClass: obj.tagClass, - type: obj.type, - constructed: obj.constructed, - composed: obj.composed, - value: asn1.copy(obj.value, options) - }; - if(options && !options.excludeBitStringContents) { - // TODO: copy byte buffer if it's a buffer not a string - copy.bitStringContents = obj.bitStringContents; - } - return copy; -}; - -/** - * Compares asn1 objects for equality. - * - * Note this function does not run in constant time. - * - * @param obj1 the first asn1 object. - * @param obj2 the second asn1 object. - * @param [options] compare options: - * [includeBitStringContents] true to compare bitStringContents - * - * @return true if the asn1 objects are equal. - */ -asn1.equals = function(obj1, obj2, options) { - if(forge.util.isArray(obj1)) { - if(!forge.util.isArray(obj2)) { - return false; - } - if(obj1.length !== obj2.length) { - return false; - } - for(var i = 0; i < obj1.length; ++i) { - if(!asn1.equals(obj1[i], obj2[i])) { - return false; - } - } - return true; - } - - if(typeof obj1 !== typeof obj2) { - return false; - } - - if(typeof obj1 === 'string') { - return obj1 === obj2; - } - - var equal = obj1.tagClass === obj2.tagClass && - obj1.type === obj2.type && - obj1.constructed === obj2.constructed && - obj1.composed === obj2.composed && - asn1.equals(obj1.value, obj2.value); - if(options && options.includeBitStringContents) { - equal = equal && (obj1.bitStringContents === obj2.bitStringContents); - } - - return equal; -}; - -/** - * Gets the length of a BER-encoded ASN.1 value. - * - * In case the length is not specified, undefined is returned. - * - * @param b the BER-encoded ASN.1 byte buffer, starting with the first - * length byte. - * - * @return the length of the BER-encoded ASN.1 value or undefined. - */ -asn1.getBerValueLength = function(b) { - // TODO: move this function and related DER/BER functions to a der.js - // file; better abstract ASN.1 away from der/ber. - var b2 = b.getByte(); - if(b2 === 0x80) { - return undefined; - } - - // see if the length is "short form" or "long form" (bit 8 set) - var length; - var longForm = b2 & 0x80; - if(!longForm) { - // length is just the first byte - length = b2; - } else { - // the number of bytes the length is specified in bits 7 through 1 - // and each length byte is in big-endian base-256 - length = b.getInt((b2 & 0x7F) << 3); - } - return length; -}; - -/** - * Check if the byte buffer has enough bytes. Throws an Error if not. - * - * @param bytes the byte buffer to parse from. - * @param remaining the bytes remaining in the current parsing state. - * @param n the number of bytes the buffer must have. - */ -function _checkBufferLength(bytes, remaining, n) { - if(n > remaining) { - var error = new Error('Too few bytes to parse DER.'); - error.available = bytes.length(); - error.remaining = remaining; - error.requested = n; - throw error; - } -} - -/** - * Gets the length of a BER-encoded ASN.1 value. - * - * In case the length is not specified, undefined is returned. - * - * @param bytes the byte buffer to parse from. - * @param remaining the bytes remaining in the current parsing state. - * - * @return the length of the BER-encoded ASN.1 value or undefined. - */ -var _getValueLength = function(bytes, remaining) { - // TODO: move this function and related DER/BER functions to a der.js - // file; better abstract ASN.1 away from der/ber. - // fromDer already checked that this byte exists - var b2 = bytes.getByte(); - remaining--; - if(b2 === 0x80) { - return undefined; - } - - // see if the length is "short form" or "long form" (bit 8 set) - var length; - var longForm = b2 & 0x80; - if(!longForm) { - // length is just the first byte - length = b2; - } else { - // the number of bytes the length is specified in bits 7 through 1 - // and each length byte is in big-endian base-256 - var longFormBytes = b2 & 0x7F; - _checkBufferLength(bytes, remaining, longFormBytes); - length = bytes.getInt(longFormBytes << 3); - } - // FIXME: this will only happen for 32 bit getInt with high bit set - if(length < 0) { - throw new Error('Negative length: ' + length); - } - return length; -}; - -/** - * Parses an asn1 object from a byte buffer in DER format. - * - * @param bytes the byte buffer to parse from. - * @param [strict] true to be strict when checking value lengths, false to - * allow truncated values (default: true). - * @param [options] object with options or boolean strict flag - * [strict] true to be strict when checking value lengths, false to - * allow truncated values (default: true). - * [decodeBitStrings] true to attempt to decode the content of - * BIT STRINGs (not OCTET STRINGs) using strict mode. Note that - * without schema support to understand the data context this can - * erroneously decode values that happen to be valid ASN.1. This - * flag will be deprecated or removed as soon as schema support is - * available. (default: true) - * - * @return the parsed asn1 object. - */ -asn1.fromDer = function(bytes, options) { - if(options === undefined) { - options = { - strict: true, - decodeBitStrings: true - }; - } - if(typeof options === 'boolean') { - options = { - strict: options, - decodeBitStrings: true - }; - } - if(!('strict' in options)) { - options.strict = true; - } - if(!('decodeBitStrings' in options)) { - options.decodeBitStrings = true; - } - - // wrap in buffer if needed - if(typeof bytes === 'string') { - bytes = forge.util.createBuffer(bytes); - } - - return _fromDer(bytes, bytes.length(), 0, options); -}; - -/** - * Internal function to parse an asn1 object from a byte buffer in DER format. - * - * @param bytes the byte buffer to parse from. - * @param remaining the number of bytes remaining for this chunk. - * @param depth the current parsing depth. - * @param options object with same options as fromDer(). - * - * @return the parsed asn1 object. - */ -function _fromDer(bytes, remaining, depth, options) { - // temporary storage for consumption calculations - var start; - - // minimum length for ASN.1 DER structure is 2 - _checkBufferLength(bytes, remaining, 2); - - // get the first byte - var b1 = bytes.getByte(); - // consumed one byte - remaining--; - - // get the tag class - var tagClass = (b1 & 0xC0); - - // get the type (bits 1-5) - var type = b1 & 0x1F; - - // get the variable value length and adjust remaining bytes - start = bytes.length(); - var length = _getValueLength(bytes, remaining); - remaining -= start - bytes.length(); - - // ensure there are enough bytes to get the value - if(length !== undefined && length > remaining) { - if(options.strict) { - var error = new Error('Too few bytes to read ASN.1 value.'); - error.available = bytes.length(); - error.remaining = remaining; - error.requested = length; - throw error; - } - // Note: be lenient with truncated values and use remaining state bytes - length = remaining; - } - - // value storage - var value; - // possible BIT STRING contents storage - var bitStringContents; - - // constructed flag is bit 6 (32 = 0x20) of the first byte - var constructed = ((b1 & 0x20) === 0x20); - if(constructed) { - // parse child asn1 objects from the value - value = []; - if(length === undefined) { - // asn1 object of indefinite length, read until end tag - for(;;) { - _checkBufferLength(bytes, remaining, 2); - if(bytes.bytes(2) === String.fromCharCode(0, 0)) { - bytes.getBytes(2); - remaining -= 2; - break; - } - start = bytes.length(); - value.push(_fromDer(bytes, remaining, depth + 1, options)); - remaining -= start - bytes.length(); - } - } else { - // parsing asn1 object of definite length - while(length > 0) { - start = bytes.length(); - value.push(_fromDer(bytes, length, depth + 1, options)); - remaining -= start - bytes.length(); - length -= start - bytes.length(); - } - } - } - - // if a BIT STRING, save the contents including padding - if(value === undefined && tagClass === asn1.Class.UNIVERSAL && - type === asn1.Type.BITSTRING) { - bitStringContents = bytes.bytes(length); - } - - // determine if a non-constructed value should be decoded as a composed - // value that contains other ASN.1 objects. BIT STRINGs (and OCTET STRINGs) - // can be used this way. - if(value === undefined && options.decodeBitStrings && - tagClass === asn1.Class.UNIVERSAL && - // FIXME: OCTET STRINGs not yet supported here - // .. other parts of forge expect to decode OCTET STRINGs manually - (type === asn1.Type.BITSTRING /*|| type === asn1.Type.OCTETSTRING*/) && - length > 1) { - // save read position - var savedRead = bytes.read; - var savedRemaining = remaining; - var unused = 0; - if(type === asn1.Type.BITSTRING) { - /* The first octet gives the number of bits by which the length of the - bit string is less than the next multiple of eight (this is called - the "number of unused bits"). - - The second and following octets give the value of the bit string - converted to an octet string. */ - _checkBufferLength(bytes, remaining, 1); - unused = bytes.getByte(); - remaining--; - } - // if all bits are used, maybe the BIT/OCTET STRING holds ASN.1 objs - if(unused === 0) { - try { - // attempt to parse child asn1 object from the value - // (stored in array to signal composed value) - start = bytes.length(); - var subOptions = { - // enforce strict mode to avoid parsing ASN.1 from plain data - verbose: options.verbose, - strict: true, - decodeBitStrings: true - }; - var composed = _fromDer(bytes, remaining, depth + 1, subOptions); - var used = start - bytes.length(); - remaining -= used; - if(type == asn1.Type.BITSTRING) { - used++; - } - - // if the data all decoded and the class indicates UNIVERSAL or - // CONTEXT_SPECIFIC then assume we've got an encapsulated ASN.1 object - var tc = composed.tagClass; - if(used === length && - (tc === asn1.Class.UNIVERSAL || tc === asn1.Class.CONTEXT_SPECIFIC)) { - value = [composed]; - } - } catch(ex) { - } - } - if(value === undefined) { - // restore read position - bytes.read = savedRead; - remaining = savedRemaining; - } - } - - if(value === undefined) { - // asn1 not constructed or composed, get raw value - // TODO: do DER to OID conversion and vice-versa in .toDer? - - if(length === undefined) { - if(options.strict) { - throw new Error('Non-constructed ASN.1 object of indefinite length.'); - } - // be lenient and use remaining state bytes - length = remaining; - } - - if(type === asn1.Type.BMPSTRING) { - value = ''; - for(; length > 0; length -= 2) { - _checkBufferLength(bytes, remaining, 2); - value += String.fromCharCode(bytes.getInt16()); - remaining -= 2; - } - } else { - value = bytes.getBytes(length); - } - } - - // add BIT STRING contents if available - var asn1Options = bitStringContents === undefined ? null : { - bitStringContents: bitStringContents - }; - - // create and return asn1 object - return asn1.create(tagClass, type, constructed, value, asn1Options); -} - -/** - * Converts the given asn1 object to a buffer of bytes in DER format. - * - * @param asn1 the asn1 object to convert to bytes. - * - * @return the buffer of bytes. - */ -asn1.toDer = function(obj) { - var bytes = forge.util.createBuffer(); - - // build the first byte - var b1 = obj.tagClass | obj.type; - - // for storing the ASN.1 value - var value = forge.util.createBuffer(); - - // use BIT STRING contents if available and data not changed - var useBitStringContents = false; - if('bitStringContents' in obj) { - useBitStringContents = true; - if(obj.original) { - useBitStringContents = asn1.equals(obj, obj.original); - } - } - - if(useBitStringContents) { - value.putBytes(obj.bitStringContents); - } else if(obj.composed) { - // if composed, use each child asn1 object's DER bytes as value - // turn on 6th bit (0x20 = 32) to indicate asn1 is constructed - // from other asn1 objects - if(obj.constructed) { - b1 |= 0x20; - } else { - // type is a bit string, add unused bits of 0x00 - value.putByte(0x00); - } - - // add all of the child DER bytes together - for(var i = 0; i < obj.value.length; ++i) { - if(obj.value[i] !== undefined) { - value.putBuffer(asn1.toDer(obj.value[i])); - } - } - } else { - // use asn1.value directly - if(obj.type === asn1.Type.BMPSTRING) { - for(var i = 0; i < obj.value.length; ++i) { - value.putInt16(obj.value.charCodeAt(i)); - } - } else { - // ensure integer is minimally-encoded - // TODO: should all leading bytes be stripped vs just one? - // .. ex '00 00 01' => '01'? - if(obj.type === asn1.Type.INTEGER && - obj.value.length > 1 && - // leading 0x00 for positive integer - ((obj.value.charCodeAt(0) === 0 && - (obj.value.charCodeAt(1) & 0x80) === 0) || - // leading 0xFF for negative integer - (obj.value.charCodeAt(0) === 0xFF && - (obj.value.charCodeAt(1) & 0x80) === 0x80))) { - value.putBytes(obj.value.substr(1)); - } else { - value.putBytes(obj.value); - } - } - } - - // add tag byte - bytes.putByte(b1); - - // use "short form" encoding - if(value.length() <= 127) { - // one byte describes the length - // bit 8 = 0 and bits 7-1 = length - bytes.putByte(value.length() & 0x7F); - } else { - // use "long form" encoding - // 2 to 127 bytes describe the length - // first byte: bit 8 = 1 and bits 7-1 = # of additional bytes - // other bytes: length in base 256, big-endian - var len = value.length(); - var lenBytes = ''; - do { - lenBytes += String.fromCharCode(len & 0xFF); - len = len >>> 8; - } while(len > 0); - - // set first byte to # bytes used to store the length and turn on - // bit 8 to indicate long-form length is used - bytes.putByte(lenBytes.length | 0x80); - - // concatenate length bytes in reverse since they were generated - // little endian and we need big endian - for(var i = lenBytes.length - 1; i >= 0; --i) { - bytes.putByte(lenBytes.charCodeAt(i)); - } - } - - // concatenate value bytes - bytes.putBuffer(value); - return bytes; -}; - -/** - * Converts an OID dot-separated string to a byte buffer. The byte buffer - * contains only the DER-encoded value, not any tag or length bytes. - * - * @param oid the OID dot-separated string. - * - * @return the byte buffer. - */ -asn1.oidToDer = function(oid) { - // split OID into individual values - var values = oid.split('.'); - var bytes = forge.util.createBuffer(); - - // first byte is 40 * value1 + value2 - bytes.putByte(40 * parseInt(values[0], 10) + parseInt(values[1], 10)); - // other bytes are each value in base 128 with 8th bit set except for - // the last byte for each value - var last, valueBytes, value, b; - for(var i = 2; i < values.length; ++i) { - // produce value bytes in reverse because we don't know how many - // bytes it will take to store the value - last = true; - valueBytes = []; - value = parseInt(values[i], 10); - do { - b = value & 0x7F; - value = value >>> 7; - // if value is not last, then turn on 8th bit - if(!last) { - b |= 0x80; - } - valueBytes.push(b); - last = false; - } while(value > 0); - - // add value bytes in reverse (needs to be in big endian) - for(var n = valueBytes.length - 1; n >= 0; --n) { - bytes.putByte(valueBytes[n]); - } - } - - return bytes; -}; - -/** - * Converts a DER-encoded byte buffer to an OID dot-separated string. The - * byte buffer should contain only the DER-encoded value, not any tag or - * length bytes. - * - * @param bytes the byte buffer. - * - * @return the OID dot-separated string. - */ -asn1.derToOid = function(bytes) { - var oid; - - // wrap in buffer if needed - if(typeof bytes === 'string') { - bytes = forge.util.createBuffer(bytes); - } - - // first byte is 40 * value1 + value2 - var b = bytes.getByte(); - oid = Math.floor(b / 40) + '.' + (b % 40); - - // other bytes are each value in base 128 with 8th bit set except for - // the last byte for each value - var value = 0; - while(bytes.length() > 0) { - b = bytes.getByte(); - value = value << 7; - // not the last byte for the value - if(b & 0x80) { - value += b & 0x7F; - } else { - // last byte - oid += '.' + (value + b); - value = 0; - } - } - - return oid; -}; - -/** - * Converts a UTCTime value to a date. - * - * Note: GeneralizedTime has 4 digits for the year and is used for X.509 - * dates past 2049. Parsing that structure hasn't been implemented yet. - * - * @param utc the UTCTime value to convert. - * - * @return the date. - */ -asn1.utcTimeToDate = function(utc) { - /* The following formats can be used: - - YYMMDDhhmmZ - YYMMDDhhmm+hh'mm' - YYMMDDhhmm-hh'mm' - YYMMDDhhmmssZ - YYMMDDhhmmss+hh'mm' - YYMMDDhhmmss-hh'mm' - - Where: - - YY is the least significant two digits of the year - MM is the month (01 to 12) - DD is the day (01 to 31) - hh is the hour (00 to 23) - mm are the minutes (00 to 59) - ss are the seconds (00 to 59) - Z indicates that local time is GMT, + indicates that local time is - later than GMT, and - indicates that local time is earlier than GMT - hh' is the absolute value of the offset from GMT in hours - mm' is the absolute value of the offset from GMT in minutes */ - var date = new Date(); - - // if YY >= 50 use 19xx, if YY < 50 use 20xx - var year = parseInt(utc.substr(0, 2), 10); - year = (year >= 50) ? 1900 + year : 2000 + year; - var MM = parseInt(utc.substr(2, 2), 10) - 1; // use 0-11 for month - var DD = parseInt(utc.substr(4, 2), 10); - var hh = parseInt(utc.substr(6, 2), 10); - var mm = parseInt(utc.substr(8, 2), 10); - var ss = 0; - - // not just YYMMDDhhmmZ - if(utc.length > 11) { - // get character after minutes - var c = utc.charAt(10); - var end = 10; - - // see if seconds are present - if(c !== '+' && c !== '-') { - // get seconds - ss = parseInt(utc.substr(10, 2), 10); - end += 2; - } - } - - // update date - date.setUTCFullYear(year, MM, DD); - date.setUTCHours(hh, mm, ss, 0); - - if(end) { - // get +/- after end of time - c = utc.charAt(end); - if(c === '+' || c === '-') { - // get hours+minutes offset - var hhoffset = parseInt(utc.substr(end + 1, 2), 10); - var mmoffset = parseInt(utc.substr(end + 4, 2), 10); - - // calculate offset in milliseconds - var offset = hhoffset * 60 + mmoffset; - offset *= 60000; - - // apply offset - if(c === '+') { - date.setTime(+date - offset); - } else { - date.setTime(+date + offset); - } - } - } - - return date; -}; - -/** - * Converts a GeneralizedTime value to a date. - * - * @param gentime the GeneralizedTime value to convert. - * - * @return the date. - */ -asn1.generalizedTimeToDate = function(gentime) { - /* The following formats can be used: - - YYYYMMDDHHMMSS - YYYYMMDDHHMMSS.fff - YYYYMMDDHHMMSSZ - YYYYMMDDHHMMSS.fffZ - YYYYMMDDHHMMSS+hh'mm' - YYYYMMDDHHMMSS.fff+hh'mm' - YYYYMMDDHHMMSS-hh'mm' - YYYYMMDDHHMMSS.fff-hh'mm' - - Where: - - YYYY is the year - MM is the month (01 to 12) - DD is the day (01 to 31) - hh is the hour (00 to 23) - mm are the minutes (00 to 59) - ss are the seconds (00 to 59) - .fff is the second fraction, accurate to three decimal places - Z indicates that local time is GMT, + indicates that local time is - later than GMT, and - indicates that local time is earlier than GMT - hh' is the absolute value of the offset from GMT in hours - mm' is the absolute value of the offset from GMT in minutes */ - var date = new Date(); - - var YYYY = parseInt(gentime.substr(0, 4), 10); - var MM = parseInt(gentime.substr(4, 2), 10) - 1; // use 0-11 for month - var DD = parseInt(gentime.substr(6, 2), 10); - var hh = parseInt(gentime.substr(8, 2), 10); - var mm = parseInt(gentime.substr(10, 2), 10); - var ss = parseInt(gentime.substr(12, 2), 10); - var fff = 0; - var offset = 0; - var isUTC = false; - - if(gentime.charAt(gentime.length - 1) === 'Z') { - isUTC = true; - } - - var end = gentime.length - 5, c = gentime.charAt(end); - if(c === '+' || c === '-') { - // get hours+minutes offset - var hhoffset = parseInt(gentime.substr(end + 1, 2), 10); - var mmoffset = parseInt(gentime.substr(end + 4, 2), 10); - - // calculate offset in milliseconds - offset = hhoffset * 60 + mmoffset; - offset *= 60000; - - // apply offset - if(c === '+') { - offset *= -1; - } - - isUTC = true; - } - - // check for second fraction - if(gentime.charAt(14) === '.') { - fff = parseFloat(gentime.substr(14), 10) * 1000; - } - - if(isUTC) { - date.setUTCFullYear(YYYY, MM, DD); - date.setUTCHours(hh, mm, ss, fff); - - // apply offset - date.setTime(+date + offset); - } else { - date.setFullYear(YYYY, MM, DD); - date.setHours(hh, mm, ss, fff); - } - - return date; -}; - -/** - * Converts a date to a UTCTime value. - * - * Note: GeneralizedTime has 4 digits for the year and is used for X.509 - * dates past 2049. Converting to a GeneralizedTime hasn't been - * implemented yet. - * - * @param date the date to convert. - * - * @return the UTCTime value. - */ -asn1.dateToUtcTime = function(date) { - // TODO: validate; currently assumes proper format - if(typeof date === 'string') { - return date; - } - - var rval = ''; - - // create format YYMMDDhhmmssZ - var format = []; - format.push(('' + date.getUTCFullYear()).substr(2)); - format.push('' + (date.getUTCMonth() + 1)); - format.push('' + date.getUTCDate()); - format.push('' + date.getUTCHours()); - format.push('' + date.getUTCMinutes()); - format.push('' + date.getUTCSeconds()); - - // ensure 2 digits are used for each format entry - for(var i = 0; i < format.length; ++i) { - if(format[i].length < 2) { - rval += '0'; - } - rval += format[i]; - } - rval += 'Z'; - - return rval; -}; - -/** - * Converts a date to a GeneralizedTime value. - * - * @param date the date to convert. - * - * @return the GeneralizedTime value as a string. - */ -asn1.dateToGeneralizedTime = function(date) { - // TODO: validate; currently assumes proper format - if(typeof date === 'string') { - return date; - } - - var rval = ''; - - // create format YYYYMMDDHHMMSSZ - var format = []; - format.push('' + date.getUTCFullYear()); - format.push('' + (date.getUTCMonth() + 1)); - format.push('' + date.getUTCDate()); - format.push('' + date.getUTCHours()); - format.push('' + date.getUTCMinutes()); - format.push('' + date.getUTCSeconds()); - - // ensure 2 digits are used for each format entry - for(var i = 0; i < format.length; ++i) { - if(format[i].length < 2) { - rval += '0'; - } - rval += format[i]; - } - rval += 'Z'; - - return rval; -}; - -/** - * Converts a javascript integer to a DER-encoded byte buffer to be used - * as the value for an INTEGER type. - * - * @param x the integer. - * - * @return the byte buffer. - */ -asn1.integerToDer = function(x) { - var rval = forge.util.createBuffer(); - if(x >= -0x80 && x < 0x80) { - return rval.putSignedInt(x, 8); - } - if(x >= -0x8000 && x < 0x8000) { - return rval.putSignedInt(x, 16); - } - if(x >= -0x800000 && x < 0x800000) { - return rval.putSignedInt(x, 24); - } - if(x >= -0x80000000 && x < 0x80000000) { - return rval.putSignedInt(x, 32); - } - var error = new Error('Integer too large; max is 32-bits.'); - error.integer = x; - throw error; -}; - -/** - * Converts a DER-encoded byte buffer to a javascript integer. This is - * typically used to decode the value of an INTEGER type. - * - * @param bytes the byte buffer. - * - * @return the integer. - */ -asn1.derToInteger = function(bytes) { - // wrap in buffer if needed - if(typeof bytes === 'string') { - bytes = forge.util.createBuffer(bytes); - } - - var n = bytes.length() * 8; - if(n > 32) { - throw new Error('Integer too large; max is 32-bits.'); - } - return bytes.getSignedInt(n); -}; - -/** - * Validates that the given ASN.1 object is at least a super set of the - * given ASN.1 structure. Only tag classes and types are checked. An - * optional map may also be provided to capture ASN.1 values while the - * structure is checked. - * - * To capture an ASN.1 value, set an object in the validator's 'capture' - * parameter to the key to use in the capture map. To capture the full - * ASN.1 object, specify 'captureAsn1'. To capture BIT STRING bytes, including - * the leading unused bits counter byte, specify 'captureBitStringContents'. - * To capture BIT STRING bytes, without the leading unused bits counter byte, - * specify 'captureBitStringValue'. - * - * Objects in the validator may set a field 'optional' to true to indicate - * that it isn't necessary to pass validation. - * - * @param obj the ASN.1 object to validate. - * @param v the ASN.1 structure validator. - * @param capture an optional map to capture values in. - * @param errors an optional array for storing validation errors. - * - * @return true on success, false on failure. - */ -asn1.validate = function(obj, v, capture, errors) { - var rval = false; - - // ensure tag class and type are the same if specified - if((obj.tagClass === v.tagClass || typeof(v.tagClass) === 'undefined') && - (obj.type === v.type || typeof(v.type) === 'undefined')) { - // ensure constructed flag is the same if specified - if(obj.constructed === v.constructed || - typeof(v.constructed) === 'undefined') { - rval = true; - - // handle sub values - if(v.value && forge.util.isArray(v.value)) { - var j = 0; - for(var i = 0; rval && i < v.value.length; ++i) { - rval = v.value[i].optional || false; - if(obj.value[j]) { - rval = asn1.validate(obj.value[j], v.value[i], capture, errors); - if(rval) { - ++j; - } else if(v.value[i].optional) { - rval = true; - } - } - if(!rval && errors) { - errors.push( - '[' + v.name + '] ' + - 'Tag class "' + v.tagClass + '", type "' + - v.type + '" expected value length "' + - v.value.length + '", got "' + - obj.value.length + '"'); - } - } - } - - if(rval && capture) { - if(v.capture) { - capture[v.capture] = obj.value; - } - if(v.captureAsn1) { - capture[v.captureAsn1] = obj; - } - if(v.captureBitStringContents && 'bitStringContents' in obj) { - capture[v.captureBitStringContents] = obj.bitStringContents; - } - if(v.captureBitStringValue && 'bitStringContents' in obj) { - var value; - if(obj.bitStringContents.length < 2) { - capture[v.captureBitStringValue] = ''; - } else { - // FIXME: support unused bits with data shifting - var unused = obj.bitStringContents.charCodeAt(0); - if(unused !== 0) { - throw new Error( - 'captureBitStringValue only supported for zero unused bits'); - } - capture[v.captureBitStringValue] = obj.bitStringContents.slice(1); - } - } - } - } else if(errors) { - errors.push( - '[' + v.name + '] ' + - 'Expected constructed "' + v.constructed + '", got "' + - obj.constructed + '"'); - } - } else if(errors) { - if(obj.tagClass !== v.tagClass) { - errors.push( - '[' + v.name + '] ' + - 'Expected tag class "' + v.tagClass + '", got "' + - obj.tagClass + '"'); - } - if(obj.type !== v.type) { - errors.push( - '[' + v.name + '] ' + - 'Expected type "' + v.type + '", got "' + obj.type + '"'); - } - } - return rval; -}; - -// regex for testing for non-latin characters -var _nonLatinRegex = /[^\\u0000-\\u00ff]/; - -/** - * Pretty prints an ASN.1 object to a string. - * - * @param obj the object to write out. - * @param level the level in the tree. - * @param indentation the indentation to use. - * - * @return the string. - */ -asn1.prettyPrint = function(obj, level, indentation) { - var rval = ''; - - // set default level and indentation - level = level || 0; - indentation = indentation || 2; - - // start new line for deep levels - if(level > 0) { - rval += '\n'; - } - - // create indent - var indent = ''; - for(var i = 0; i < level * indentation; ++i) { - indent += ' '; - } - - // print class:type - rval += indent + 'Tag: '; - switch(obj.tagClass) { - case asn1.Class.UNIVERSAL: - rval += 'Universal:'; - break; - case asn1.Class.APPLICATION: - rval += 'Application:'; - break; - case asn1.Class.CONTEXT_SPECIFIC: - rval += 'Context-Specific:'; - break; - case asn1.Class.PRIVATE: - rval += 'Private:'; - break; - } - - if(obj.tagClass === asn1.Class.UNIVERSAL) { - rval += obj.type; - - // known types - switch(obj.type) { - case asn1.Type.NONE: - rval += ' (None)'; - break; - case asn1.Type.BOOLEAN: - rval += ' (Boolean)'; - break; - case asn1.Type.INTEGER: - rval += ' (Integer)'; - break; - case asn1.Type.BITSTRING: - rval += ' (Bit string)'; - break; - case asn1.Type.OCTETSTRING: - rval += ' (Octet string)'; - break; - case asn1.Type.NULL: - rval += ' (Null)'; - break; - case asn1.Type.OID: - rval += ' (Object Identifier)'; - break; - case asn1.Type.ODESC: - rval += ' (Object Descriptor)'; - break; - case asn1.Type.EXTERNAL: - rval += ' (External or Instance of)'; - break; - case asn1.Type.REAL: - rval += ' (Real)'; - break; - case asn1.Type.ENUMERATED: - rval += ' (Enumerated)'; - break; - case asn1.Type.EMBEDDED: - rval += ' (Embedded PDV)'; - break; - case asn1.Type.UTF8: - rval += ' (UTF8)'; - break; - case asn1.Type.ROID: - rval += ' (Relative Object Identifier)'; - break; - case asn1.Type.SEQUENCE: - rval += ' (Sequence)'; - break; - case asn1.Type.SET: - rval += ' (Set)'; - break; - case asn1.Type.PRINTABLESTRING: - rval += ' (Printable String)'; - break; - case asn1.Type.IA5String: - rval += ' (IA5String (ASCII))'; - break; - case asn1.Type.UTCTIME: - rval += ' (UTC time)'; - break; - case asn1.Type.GENERALIZEDTIME: - rval += ' (Generalized time)'; - break; - case asn1.Type.BMPSTRING: - rval += ' (BMP String)'; - break; - } - } else { - rval += obj.type; - } - - rval += '\n'; - rval += indent + 'Constructed: ' + obj.constructed + '\n'; - - if(obj.composed) { - var subvalues = 0; - var sub = ''; - for(var i = 0; i < obj.value.length; ++i) { - if(obj.value[i] !== undefined) { - subvalues += 1; - sub += asn1.prettyPrint(obj.value[i], level + 1, indentation); - if((i + 1) < obj.value.length) { - sub += ','; - } - } - } - rval += indent + 'Sub values: ' + subvalues + sub; - } else { - rval += indent + 'Value: '; - if(obj.type === asn1.Type.OID) { - var oid = asn1.derToOid(obj.value); - rval += oid; - if(forge.pki && forge.pki.oids) { - if(oid in forge.pki.oids) { - rval += ' (' + forge.pki.oids[oid] + ') '; - } - } - } - if(obj.type === asn1.Type.INTEGER) { - try { - rval += asn1.derToInteger(obj.value); - } catch(ex) { - rval += '0x' + forge.util.bytesToHex(obj.value); - } - } else if(obj.type === asn1.Type.BITSTRING) { - // TODO: shift bits as needed to display without padding - if(obj.value.length > 1) { - // remove unused bits field - rval += '0x' + forge.util.bytesToHex(obj.value.slice(1)); - } else { - rval += '(none)'; - } - // show unused bit count - if(obj.value.length > 0) { - var unused = obj.value.charCodeAt(0); - if(unused == 1) { - rval += ' (1 unused bit shown)'; - } else if(unused > 1) { - rval += ' (' + unused + ' unused bits shown)'; - } - } - } else if(obj.type === asn1.Type.OCTETSTRING) { - if(!_nonLatinRegex.test(obj.value)) { - rval += '(' + obj.value + ') '; - } - rval += '0x' + forge.util.bytesToHex(obj.value); - } else if(obj.type === asn1.Type.UTF8) { - rval += forge.util.decodeUtf8(obj.value); - } else if(obj.type === asn1.Type.PRINTABLESTRING || - obj.type === asn1.Type.IA5String) { - rval += obj.value; - } else if(_nonLatinRegex.test(obj.value)) { - rval += '0x' + forge.util.bytesToHex(obj.value); - } else if(obj.value.length === 0) { - rval += '[null]'; - } else { - rval += obj.value; - } - } - - return rval; -}; diff --git a/reverse_engineering/node_modules/node-forge/lib/baseN.js b/reverse_engineering/node_modules/node-forge/lib/baseN.js deleted file mode 100644 index 824fa36..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/baseN.js +++ /dev/null @@ -1,186 +0,0 @@ -/** - * Base-N/Base-X encoding/decoding functions. - * - * Original implementation from base-x: - * https://github.com/cryptocoinjs/base-x - * - * Which is MIT licensed: - * - * The MIT License (MIT) - * - * Copyright base-x contributors (c) 2016 - * - * 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. - */ -var api = {}; -module.exports = api; - -// baseN alphabet indexes -var _reverseAlphabets = {}; - -/** - * BaseN-encodes a Uint8Array using the given alphabet. - * - * @param input the Uint8Array to encode. - * @param maxline the maximum number of encoded characters per line to use, - * defaults to none. - * - * @return the baseN-encoded output string. - */ -api.encode = function(input, alphabet, maxline) { - if(typeof alphabet !== 'string') { - throw new TypeError('"alphabet" must be a string.'); - } - if(maxline !== undefined && typeof maxline !== 'number') { - throw new TypeError('"maxline" must be a number.'); - } - - var output = ''; - - if(!(input instanceof Uint8Array)) { - // assume forge byte buffer - output = _encodeWithByteBuffer(input, alphabet); - } else { - var i = 0; - var base = alphabet.length; - var first = alphabet.charAt(0); - var digits = [0]; - for(i = 0; i < input.length; ++i) { - for(var j = 0, carry = input[i]; j < digits.length; ++j) { - carry += digits[j] << 8; - digits[j] = carry % base; - carry = (carry / base) | 0; - } - - while(carry > 0) { - digits.push(carry % base); - carry = (carry / base) | 0; - } - } - - // deal with leading zeros - for(i = 0; input[i] === 0 && i < input.length - 1; ++i) { - output += first; - } - // convert digits to a string - for(i = digits.length - 1; i >= 0; --i) { - output += alphabet[digits[i]]; - } - } - - if(maxline) { - var regex = new RegExp('.{1,' + maxline + '}', 'g'); - output = output.match(regex).join('\r\n'); - } - - return output; -}; - -/** - * Decodes a baseN-encoded (using the given alphabet) string to a - * Uint8Array. - * - * @param input the baseN-encoded input string. - * - * @return the Uint8Array. - */ -api.decode = function(input, alphabet) { - if(typeof input !== 'string') { - throw new TypeError('"input" must be a string.'); - } - if(typeof alphabet !== 'string') { - throw new TypeError('"alphabet" must be a string.'); - } - - var table = _reverseAlphabets[alphabet]; - if(!table) { - // compute reverse alphabet - table = _reverseAlphabets[alphabet] = []; - for(var i = 0; i < alphabet.length; ++i) { - table[alphabet.charCodeAt(i)] = i; - } - } - - // remove whitespace characters - input = input.replace(/\s/g, ''); - - var base = alphabet.length; - var first = alphabet.charAt(0); - var bytes = [0]; - for(var i = 0; i < input.length; i++) { - var value = table[input.charCodeAt(i)]; - if(value === undefined) { - return; - } - - for(var j = 0, carry = value; j < bytes.length; ++j) { - carry += bytes[j] * base; - bytes[j] = carry & 0xff; - carry >>= 8; - } - - while(carry > 0) { - bytes.push(carry & 0xff); - carry >>= 8; - } - } - - // deal with leading zeros - for(var k = 0; input[k] === first && k < input.length - 1; ++k) { - bytes.push(0); - } - - if(typeof Buffer !== 'undefined') { - return Buffer.from(bytes.reverse()); - } - - return new Uint8Array(bytes.reverse()); -}; - -function _encodeWithByteBuffer(input, alphabet) { - var i = 0; - var base = alphabet.length; - var first = alphabet.charAt(0); - var digits = [0]; - for(i = 0; i < input.length(); ++i) { - for(var j = 0, carry = input.at(i); j < digits.length; ++j) { - carry += digits[j] << 8; - digits[j] = carry % base; - carry = (carry / base) | 0; - } - - while(carry > 0) { - digits.push(carry % base); - carry = (carry / base) | 0; - } - } - - var output = ''; - - // deal with leading zeros - for(i = 0; input.at(i) === 0 && i < input.length() - 1; ++i) { - output += first; - } - // convert digits to a string - for(i = digits.length - 1; i >= 0; --i) { - output += alphabet[digits[i]]; - } - - return output; -} diff --git a/reverse_engineering/node_modules/node-forge/lib/cipher.js b/reverse_engineering/node_modules/node-forge/lib/cipher.js deleted file mode 100644 index f2c36e6..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/cipher.js +++ /dev/null @@ -1,230 +0,0 @@ -/** - * Cipher base API. - * - * @author Dave Longley - * - * Copyright (c) 2010-2014 Digital Bazaar, Inc. - */ -var forge = require('./forge'); -require('./util'); - -module.exports = forge.cipher = forge.cipher || {}; - -// registered algorithms -forge.cipher.algorithms = forge.cipher.algorithms || {}; - -/** - * Creates a cipher object that can be used to encrypt data using the given - * algorithm and key. The algorithm may be provided as a string value for a - * previously registered algorithm or it may be given as a cipher algorithm - * API object. - * - * @param algorithm the algorithm to use, either a string or an algorithm API - * object. - * @param key the key to use, as a binary-encoded string of bytes or a - * byte buffer. - * - * @return the cipher. - */ -forge.cipher.createCipher = function(algorithm, key) { - var api = algorithm; - if(typeof api === 'string') { - api = forge.cipher.getAlgorithm(api); - if(api) { - api = api(); - } - } - if(!api) { - throw new Error('Unsupported algorithm: ' + algorithm); - } - - // assume block cipher - return new forge.cipher.BlockCipher({ - algorithm: api, - key: key, - decrypt: false - }); -}; - -/** - * Creates a decipher object that can be used to decrypt data using the given - * algorithm and key. The algorithm may be provided as a string value for a - * previously registered algorithm or it may be given as a cipher algorithm - * API object. - * - * @param algorithm the algorithm to use, either a string or an algorithm API - * object. - * @param key the key to use, as a binary-encoded string of bytes or a - * byte buffer. - * - * @return the cipher. - */ -forge.cipher.createDecipher = function(algorithm, key) { - var api = algorithm; - if(typeof api === 'string') { - api = forge.cipher.getAlgorithm(api); - if(api) { - api = api(); - } - } - if(!api) { - throw new Error('Unsupported algorithm: ' + algorithm); - } - - // assume block cipher - return new forge.cipher.BlockCipher({ - algorithm: api, - key: key, - decrypt: true - }); -}; - -/** - * Registers an algorithm by name. If the name was already registered, the - * algorithm API object will be overwritten. - * - * @param name the name of the algorithm. - * @param algorithm the algorithm API object. - */ -forge.cipher.registerAlgorithm = function(name, algorithm) { - name = name.toUpperCase(); - forge.cipher.algorithms[name] = algorithm; -}; - -/** - * Gets a registered algorithm by name. - * - * @param name the name of the algorithm. - * - * @return the algorithm, if found, null if not. - */ -forge.cipher.getAlgorithm = function(name) { - name = name.toUpperCase(); - if(name in forge.cipher.algorithms) { - return forge.cipher.algorithms[name]; - } - return null; -}; - -var BlockCipher = forge.cipher.BlockCipher = function(options) { - this.algorithm = options.algorithm; - this.mode = this.algorithm.mode; - this.blockSize = this.mode.blockSize; - this._finish = false; - this._input = null; - this.output = null; - this._op = options.decrypt ? this.mode.decrypt : this.mode.encrypt; - this._decrypt = options.decrypt; - this.algorithm.initialize(options); -}; - -/** - * Starts or restarts the encryption or decryption process, whichever - * was previously configured. - * - * For non-GCM mode, the IV may be a binary-encoded string of bytes, an array - * of bytes, a byte buffer, or an array of 32-bit integers. If the IV is in - * bytes, then it must be Nb (16) bytes in length. If the IV is given in as - * 32-bit integers, then it must be 4 integers long. - * - * Note: an IV is not required or used in ECB mode. - * - * For GCM-mode, the IV must be given as a binary-encoded string of bytes or - * a byte buffer. The number of bytes should be 12 (96 bits) as recommended - * by NIST SP-800-38D but another length may be given. - * - * @param options the options to use: - * iv the initialization vector to use as a binary-encoded string of - * bytes, null to reuse the last ciphered block from a previous - * update() (this "residue" method is for legacy support only). - * additionalData additional authentication data as a binary-encoded - * string of bytes, for 'GCM' mode, (default: none). - * tagLength desired length of authentication tag, in bits, for - * 'GCM' mode (0-128, default: 128). - * tag the authentication tag to check if decrypting, as a - * binary-encoded string of bytes. - * output the output the buffer to write to, null to create one. - */ -BlockCipher.prototype.start = function(options) { - options = options || {}; - var opts = {}; - for(var key in options) { - opts[key] = options[key]; - } - opts.decrypt = this._decrypt; - this._finish = false; - this._input = forge.util.createBuffer(); - this.output = options.output || forge.util.createBuffer(); - this.mode.start(opts); -}; - -/** - * Updates the next block according to the cipher mode. - * - * @param input the buffer to read from. - */ -BlockCipher.prototype.update = function(input) { - if(input) { - // input given, so empty it into the input buffer - this._input.putBuffer(input); - } - - // do cipher operation until it needs more input and not finished - while(!this._op.call(this.mode, this._input, this.output, this._finish) && - !this._finish) {} - - // free consumed memory from input buffer - this._input.compact(); -}; - -/** - * Finishes encrypting or decrypting. - * - * @param pad a padding function to use in CBC mode, null for default, - * signature(blockSize, buffer, decrypt). - * - * @return true if successful, false on error. - */ -BlockCipher.prototype.finish = function(pad) { - // backwards-compatibility w/deprecated padding API - // Note: will overwrite padding functions even after another start() call - if(pad && (this.mode.name === 'ECB' || this.mode.name === 'CBC')) { - this.mode.pad = function(input) { - return pad(this.blockSize, input, false); - }; - this.mode.unpad = function(output) { - return pad(this.blockSize, output, true); - }; - } - - // build options for padding and afterFinish functions - var options = {}; - options.decrypt = this._decrypt; - - // get # of bytes that won't fill a block - options.overflow = this._input.length() % this.blockSize; - - if(!this._decrypt && this.mode.pad) { - if(!this.mode.pad(this._input, options)) { - return false; - } - } - - // do final update - this._finish = true; - this.update(); - - if(this._decrypt && this.mode.unpad) { - if(!this.mode.unpad(this.output, options)) { - return false; - } - } - - if(this.mode.afterFinish) { - if(!this.mode.afterFinish(this.output, options)) { - return false; - } - } - - return true; -}; diff --git a/reverse_engineering/node_modules/node-forge/lib/cipherModes.js b/reverse_engineering/node_modules/node-forge/lib/cipherModes.js deleted file mode 100644 index 339915c..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/cipherModes.js +++ /dev/null @@ -1,999 +0,0 @@ -/** - * Supported cipher modes. - * - * @author Dave Longley - * - * Copyright (c) 2010-2014 Digital Bazaar, Inc. - */ -var forge = require('./forge'); -require('./util'); - -forge.cipher = forge.cipher || {}; - -// supported cipher modes -var modes = module.exports = forge.cipher.modes = forge.cipher.modes || {}; - -/** Electronic codebook (ECB) (Don't use this; it's not secure) **/ - -modes.ecb = function(options) { - options = options || {}; - this.name = 'ECB'; - this.cipher = options.cipher; - this.blockSize = options.blockSize || 16; - this._ints = this.blockSize / 4; - this._inBlock = new Array(this._ints); - this._outBlock = new Array(this._ints); -}; - -modes.ecb.prototype.start = function(options) {}; - -modes.ecb.prototype.encrypt = function(input, output, finish) { - // not enough input to encrypt - if(input.length() < this.blockSize && !(finish && input.length() > 0)) { - return true; - } - - // get next block - for(var i = 0; i < this._ints; ++i) { - this._inBlock[i] = input.getInt32(); - } - - // encrypt block - this.cipher.encrypt(this._inBlock, this._outBlock); - - // write output - for(var i = 0; i < this._ints; ++i) { - output.putInt32(this._outBlock[i]); - } -}; - -modes.ecb.prototype.decrypt = function(input, output, finish) { - // not enough input to decrypt - if(input.length() < this.blockSize && !(finish && input.length() > 0)) { - return true; - } - - // get next block - for(var i = 0; i < this._ints; ++i) { - this._inBlock[i] = input.getInt32(); - } - - // decrypt block - this.cipher.decrypt(this._inBlock, this._outBlock); - - // write output - for(var i = 0; i < this._ints; ++i) { - output.putInt32(this._outBlock[i]); - } -}; - -modes.ecb.prototype.pad = function(input, options) { - // add PKCS#7 padding to block (each pad byte is the - // value of the number of pad bytes) - var padding = (input.length() === this.blockSize ? - this.blockSize : (this.blockSize - input.length())); - input.fillWithByte(padding, padding); - return true; -}; - -modes.ecb.prototype.unpad = function(output, options) { - // check for error: input data not a multiple of blockSize - if(options.overflow > 0) { - return false; - } - - // ensure padding byte count is valid - var len = output.length(); - var count = output.at(len - 1); - if(count > (this.blockSize << 2)) { - return false; - } - - // trim off padding bytes - output.truncate(count); - return true; -}; - -/** Cipher-block Chaining (CBC) **/ - -modes.cbc = function(options) { - options = options || {}; - this.name = 'CBC'; - this.cipher = options.cipher; - this.blockSize = options.blockSize || 16; - this._ints = this.blockSize / 4; - this._inBlock = new Array(this._ints); - this._outBlock = new Array(this._ints); -}; - -modes.cbc.prototype.start = function(options) { - // Note: legacy support for using IV residue (has security flaws) - // if IV is null, reuse block from previous processing - if(options.iv === null) { - // must have a previous block - if(!this._prev) { - throw new Error('Invalid IV parameter.'); - } - this._iv = this._prev.slice(0); - } else if(!('iv' in options)) { - throw new Error('Invalid IV parameter.'); - } else { - // save IV as "previous" block - this._iv = transformIV(options.iv, this.blockSize); - this._prev = this._iv.slice(0); - } -}; - -modes.cbc.prototype.encrypt = function(input, output, finish) { - // not enough input to encrypt - if(input.length() < this.blockSize && !(finish && input.length() > 0)) { - return true; - } - - // get next block - // CBC XOR's IV (or previous block) with plaintext - for(var i = 0; i < this._ints; ++i) { - this._inBlock[i] = this._prev[i] ^ input.getInt32(); - } - - // encrypt block - this.cipher.encrypt(this._inBlock, this._outBlock); - - // write output, save previous block - for(var i = 0; i < this._ints; ++i) { - output.putInt32(this._outBlock[i]); - } - this._prev = this._outBlock; -}; - -modes.cbc.prototype.decrypt = function(input, output, finish) { - // not enough input to decrypt - if(input.length() < this.blockSize && !(finish && input.length() > 0)) { - return true; - } - - // get next block - for(var i = 0; i < this._ints; ++i) { - this._inBlock[i] = input.getInt32(); - } - - // decrypt block - this.cipher.decrypt(this._inBlock, this._outBlock); - - // write output, save previous ciphered block - // CBC XOR's IV (or previous block) with ciphertext - for(var i = 0; i < this._ints; ++i) { - output.putInt32(this._prev[i] ^ this._outBlock[i]); - } - this._prev = this._inBlock.slice(0); -}; - -modes.cbc.prototype.pad = function(input, options) { - // add PKCS#7 padding to block (each pad byte is the - // value of the number of pad bytes) - var padding = (input.length() === this.blockSize ? - this.blockSize : (this.blockSize - input.length())); - input.fillWithByte(padding, padding); - return true; -}; - -modes.cbc.prototype.unpad = function(output, options) { - // check for error: input data not a multiple of blockSize - if(options.overflow > 0) { - return false; - } - - // ensure padding byte count is valid - var len = output.length(); - var count = output.at(len - 1); - if(count > (this.blockSize << 2)) { - return false; - } - - // trim off padding bytes - output.truncate(count); - return true; -}; - -/** Cipher feedback (CFB) **/ - -modes.cfb = function(options) { - options = options || {}; - this.name = 'CFB'; - this.cipher = options.cipher; - this.blockSize = options.blockSize || 16; - this._ints = this.blockSize / 4; - this._inBlock = null; - this._outBlock = new Array(this._ints); - this._partialBlock = new Array(this._ints); - this._partialOutput = forge.util.createBuffer(); - this._partialBytes = 0; -}; - -modes.cfb.prototype.start = function(options) { - if(!('iv' in options)) { - throw new Error('Invalid IV parameter.'); - } - // use IV as first input - this._iv = transformIV(options.iv, this.blockSize); - this._inBlock = this._iv.slice(0); - this._partialBytes = 0; -}; - -modes.cfb.prototype.encrypt = function(input, output, finish) { - // not enough input to encrypt - var inputLength = input.length(); - if(inputLength === 0) { - return true; - } - - // encrypt block - this.cipher.encrypt(this._inBlock, this._outBlock); - - // handle full block - if(this._partialBytes === 0 && inputLength >= this.blockSize) { - // XOR input with output, write input as output - for(var i = 0; i < this._ints; ++i) { - this._inBlock[i] = input.getInt32() ^ this._outBlock[i]; - output.putInt32(this._inBlock[i]); - } - return; - } - - // handle partial block - var partialBytes = (this.blockSize - inputLength) % this.blockSize; - if(partialBytes > 0) { - partialBytes = this.blockSize - partialBytes; - } - - // XOR input with output, write input as partial output - this._partialOutput.clear(); - for(var i = 0; i < this._ints; ++i) { - this._partialBlock[i] = input.getInt32() ^ this._outBlock[i]; - this._partialOutput.putInt32(this._partialBlock[i]); - } - - if(partialBytes > 0) { - // block still incomplete, restore input buffer - input.read -= this.blockSize; - } else { - // block complete, update input block - for(var i = 0; i < this._ints; ++i) { - this._inBlock[i] = this._partialBlock[i]; - } - } - - // skip any previous partial bytes - if(this._partialBytes > 0) { - this._partialOutput.getBytes(this._partialBytes); - } - - if(partialBytes > 0 && !finish) { - output.putBytes(this._partialOutput.getBytes( - partialBytes - this._partialBytes)); - this._partialBytes = partialBytes; - return true; - } - - output.putBytes(this._partialOutput.getBytes( - inputLength - this._partialBytes)); - this._partialBytes = 0; -}; - -modes.cfb.prototype.decrypt = function(input, output, finish) { - // not enough input to decrypt - var inputLength = input.length(); - if(inputLength === 0) { - return true; - } - - // encrypt block (CFB always uses encryption mode) - this.cipher.encrypt(this._inBlock, this._outBlock); - - // handle full block - if(this._partialBytes === 0 && inputLength >= this.blockSize) { - // XOR input with output, write input as output - for(var i = 0; i < this._ints; ++i) { - this._inBlock[i] = input.getInt32(); - output.putInt32(this._inBlock[i] ^ this._outBlock[i]); - } - return; - } - - // handle partial block - var partialBytes = (this.blockSize - inputLength) % this.blockSize; - if(partialBytes > 0) { - partialBytes = this.blockSize - partialBytes; - } - - // XOR input with output, write input as partial output - this._partialOutput.clear(); - for(var i = 0; i < this._ints; ++i) { - this._partialBlock[i] = input.getInt32(); - this._partialOutput.putInt32(this._partialBlock[i] ^ this._outBlock[i]); - } - - if(partialBytes > 0) { - // block still incomplete, restore input buffer - input.read -= this.blockSize; - } else { - // block complete, update input block - for(var i = 0; i < this._ints; ++i) { - this._inBlock[i] = this._partialBlock[i]; - } - } - - // skip any previous partial bytes - if(this._partialBytes > 0) { - this._partialOutput.getBytes(this._partialBytes); - } - - if(partialBytes > 0 && !finish) { - output.putBytes(this._partialOutput.getBytes( - partialBytes - this._partialBytes)); - this._partialBytes = partialBytes; - return true; - } - - output.putBytes(this._partialOutput.getBytes( - inputLength - this._partialBytes)); - this._partialBytes = 0; -}; - -/** Output feedback (OFB) **/ - -modes.ofb = function(options) { - options = options || {}; - this.name = 'OFB'; - this.cipher = options.cipher; - this.blockSize = options.blockSize || 16; - this._ints = this.blockSize / 4; - this._inBlock = null; - this._outBlock = new Array(this._ints); - this._partialOutput = forge.util.createBuffer(); - this._partialBytes = 0; -}; - -modes.ofb.prototype.start = function(options) { - if(!('iv' in options)) { - throw new Error('Invalid IV parameter.'); - } - // use IV as first input - this._iv = transformIV(options.iv, this.blockSize); - this._inBlock = this._iv.slice(0); - this._partialBytes = 0; -}; - -modes.ofb.prototype.encrypt = function(input, output, finish) { - // not enough input to encrypt - var inputLength = input.length(); - if(input.length() === 0) { - return true; - } - - // encrypt block (OFB always uses encryption mode) - this.cipher.encrypt(this._inBlock, this._outBlock); - - // handle full block - if(this._partialBytes === 0 && inputLength >= this.blockSize) { - // XOR input with output and update next input - for(var i = 0; i < this._ints; ++i) { - output.putInt32(input.getInt32() ^ this._outBlock[i]); - this._inBlock[i] = this._outBlock[i]; - } - return; - } - - // handle partial block - var partialBytes = (this.blockSize - inputLength) % this.blockSize; - if(partialBytes > 0) { - partialBytes = this.blockSize - partialBytes; - } - - // XOR input with output - this._partialOutput.clear(); - for(var i = 0; i < this._ints; ++i) { - this._partialOutput.putInt32(input.getInt32() ^ this._outBlock[i]); - } - - if(partialBytes > 0) { - // block still incomplete, restore input buffer - input.read -= this.blockSize; - } else { - // block complete, update input block - for(var i = 0; i < this._ints; ++i) { - this._inBlock[i] = this._outBlock[i]; - } - } - - // skip any previous partial bytes - if(this._partialBytes > 0) { - this._partialOutput.getBytes(this._partialBytes); - } - - if(partialBytes > 0 && !finish) { - output.putBytes(this._partialOutput.getBytes( - partialBytes - this._partialBytes)); - this._partialBytes = partialBytes; - return true; - } - - output.putBytes(this._partialOutput.getBytes( - inputLength - this._partialBytes)); - this._partialBytes = 0; -}; - -modes.ofb.prototype.decrypt = modes.ofb.prototype.encrypt; - -/** Counter (CTR) **/ - -modes.ctr = function(options) { - options = options || {}; - this.name = 'CTR'; - this.cipher = options.cipher; - this.blockSize = options.blockSize || 16; - this._ints = this.blockSize / 4; - this._inBlock = null; - this._outBlock = new Array(this._ints); - this._partialOutput = forge.util.createBuffer(); - this._partialBytes = 0; -}; - -modes.ctr.prototype.start = function(options) { - if(!('iv' in options)) { - throw new Error('Invalid IV parameter.'); - } - // use IV as first input - this._iv = transformIV(options.iv, this.blockSize); - this._inBlock = this._iv.slice(0); - this._partialBytes = 0; -}; - -modes.ctr.prototype.encrypt = function(input, output, finish) { - // not enough input to encrypt - var inputLength = input.length(); - if(inputLength === 0) { - return true; - } - - // encrypt block (CTR always uses encryption mode) - this.cipher.encrypt(this._inBlock, this._outBlock); - - // handle full block - if(this._partialBytes === 0 && inputLength >= this.blockSize) { - // XOR input with output - for(var i = 0; i < this._ints; ++i) { - output.putInt32(input.getInt32() ^ this._outBlock[i]); - } - } else { - // handle partial block - var partialBytes = (this.blockSize - inputLength) % this.blockSize; - if(partialBytes > 0) { - partialBytes = this.blockSize - partialBytes; - } - - // XOR input with output - this._partialOutput.clear(); - for(var i = 0; i < this._ints; ++i) { - this._partialOutput.putInt32(input.getInt32() ^ this._outBlock[i]); - } - - if(partialBytes > 0) { - // block still incomplete, restore input buffer - input.read -= this.blockSize; - } - - // skip any previous partial bytes - if(this._partialBytes > 0) { - this._partialOutput.getBytes(this._partialBytes); - } - - if(partialBytes > 0 && !finish) { - output.putBytes(this._partialOutput.getBytes( - partialBytes - this._partialBytes)); - this._partialBytes = partialBytes; - return true; - } - - output.putBytes(this._partialOutput.getBytes( - inputLength - this._partialBytes)); - this._partialBytes = 0; - } - - // block complete, increment counter (input block) - inc32(this._inBlock); -}; - -modes.ctr.prototype.decrypt = modes.ctr.prototype.encrypt; - -/** Galois/Counter Mode (GCM) **/ - -modes.gcm = function(options) { - options = options || {}; - this.name = 'GCM'; - this.cipher = options.cipher; - this.blockSize = options.blockSize || 16; - this._ints = this.blockSize / 4; - this._inBlock = new Array(this._ints); - this._outBlock = new Array(this._ints); - this._partialOutput = forge.util.createBuffer(); - this._partialBytes = 0; - - // R is actually this value concatenated with 120 more zero bits, but - // we only XOR against R so the other zeros have no effect -- we just - // apply this value to the first integer in a block - this._R = 0xE1000000; -}; - -modes.gcm.prototype.start = function(options) { - if(!('iv' in options)) { - throw new Error('Invalid IV parameter.'); - } - // ensure IV is a byte buffer - var iv = forge.util.createBuffer(options.iv); - - // no ciphered data processed yet - this._cipherLength = 0; - - // default additional data is none - var additionalData; - if('additionalData' in options) { - additionalData = forge.util.createBuffer(options.additionalData); - } else { - additionalData = forge.util.createBuffer(); - } - - // default tag length is 128 bits - if('tagLength' in options) { - this._tagLength = options.tagLength; - } else { - this._tagLength = 128; - } - - // if tag is given, ensure tag matches tag length - this._tag = null; - if(options.decrypt) { - // save tag to check later - this._tag = forge.util.createBuffer(options.tag).getBytes(); - if(this._tag.length !== (this._tagLength / 8)) { - throw new Error('Authentication tag does not match tag length.'); - } - } - - // create tmp storage for hash calculation - this._hashBlock = new Array(this._ints); - - // no tag generated yet - this.tag = null; - - // generate hash subkey - // (apply block cipher to "zero" block) - this._hashSubkey = new Array(this._ints); - this.cipher.encrypt([0, 0, 0, 0], this._hashSubkey); - - // generate table M - // use 4-bit tables (32 component decomposition of a 16 byte value) - // 8-bit tables take more space and are known to have security - // vulnerabilities (in native implementations) - this.componentBits = 4; - this._m = this.generateHashTable(this._hashSubkey, this.componentBits); - - // Note: support IV length different from 96 bits? (only supporting - // 96 bits is recommended by NIST SP-800-38D) - // generate J_0 - var ivLength = iv.length(); - if(ivLength === 12) { - // 96-bit IV - this._j0 = [iv.getInt32(), iv.getInt32(), iv.getInt32(), 1]; - } else { - // IV is NOT 96-bits - this._j0 = [0, 0, 0, 0]; - while(iv.length() > 0) { - this._j0 = this.ghash( - this._hashSubkey, this._j0, - [iv.getInt32(), iv.getInt32(), iv.getInt32(), iv.getInt32()]); - } - this._j0 = this.ghash( - this._hashSubkey, this._j0, [0, 0].concat(from64To32(ivLength * 8))); - } - - // generate ICB (initial counter block) - this._inBlock = this._j0.slice(0); - inc32(this._inBlock); - this._partialBytes = 0; - - // consume authentication data - additionalData = forge.util.createBuffer(additionalData); - // save additional data length as a BE 64-bit number - this._aDataLength = from64To32(additionalData.length() * 8); - // pad additional data to 128 bit (16 byte) block size - var overflow = additionalData.length() % this.blockSize; - if(overflow) { - additionalData.fillWithByte(0, this.blockSize - overflow); - } - this._s = [0, 0, 0, 0]; - while(additionalData.length() > 0) { - this._s = this.ghash(this._hashSubkey, this._s, [ - additionalData.getInt32(), - additionalData.getInt32(), - additionalData.getInt32(), - additionalData.getInt32() - ]); - } -}; - -modes.gcm.prototype.encrypt = function(input, output, finish) { - // not enough input to encrypt - var inputLength = input.length(); - if(inputLength === 0) { - return true; - } - - // encrypt block - this.cipher.encrypt(this._inBlock, this._outBlock); - - // handle full block - if(this._partialBytes === 0 && inputLength >= this.blockSize) { - // XOR input with output - for(var i = 0; i < this._ints; ++i) { - output.putInt32(this._outBlock[i] ^= input.getInt32()); - } - this._cipherLength += this.blockSize; - } else { - // handle partial block - var partialBytes = (this.blockSize - inputLength) % this.blockSize; - if(partialBytes > 0) { - partialBytes = this.blockSize - partialBytes; - } - - // XOR input with output - this._partialOutput.clear(); - for(var i = 0; i < this._ints; ++i) { - this._partialOutput.putInt32(input.getInt32() ^ this._outBlock[i]); - } - - if(partialBytes <= 0 || finish) { - // handle overflow prior to hashing - if(finish) { - // get block overflow - var overflow = inputLength % this.blockSize; - this._cipherLength += overflow; - // truncate for hash function - this._partialOutput.truncate(this.blockSize - overflow); - } else { - this._cipherLength += this.blockSize; - } - - // get output block for hashing - for(var i = 0; i < this._ints; ++i) { - this._outBlock[i] = this._partialOutput.getInt32(); - } - this._partialOutput.read -= this.blockSize; - } - - // skip any previous partial bytes - if(this._partialBytes > 0) { - this._partialOutput.getBytes(this._partialBytes); - } - - if(partialBytes > 0 && !finish) { - // block still incomplete, restore input buffer, get partial output, - // and return early - input.read -= this.blockSize; - output.putBytes(this._partialOutput.getBytes( - partialBytes - this._partialBytes)); - this._partialBytes = partialBytes; - return true; - } - - output.putBytes(this._partialOutput.getBytes( - inputLength - this._partialBytes)); - this._partialBytes = 0; - } - - // update hash block S - this._s = this.ghash(this._hashSubkey, this._s, this._outBlock); - - // increment counter (input block) - inc32(this._inBlock); -}; - -modes.gcm.prototype.decrypt = function(input, output, finish) { - // not enough input to decrypt - var inputLength = input.length(); - if(inputLength < this.blockSize && !(finish && inputLength > 0)) { - return true; - } - - // encrypt block (GCM always uses encryption mode) - this.cipher.encrypt(this._inBlock, this._outBlock); - - // increment counter (input block) - inc32(this._inBlock); - - // update hash block S - this._hashBlock[0] = input.getInt32(); - this._hashBlock[1] = input.getInt32(); - this._hashBlock[2] = input.getInt32(); - this._hashBlock[3] = input.getInt32(); - this._s = this.ghash(this._hashSubkey, this._s, this._hashBlock); - - // XOR hash input with output - for(var i = 0; i < this._ints; ++i) { - output.putInt32(this._outBlock[i] ^ this._hashBlock[i]); - } - - // increment cipher data length - if(inputLength < this.blockSize) { - this._cipherLength += inputLength % this.blockSize; - } else { - this._cipherLength += this.blockSize; - } -}; - -modes.gcm.prototype.afterFinish = function(output, options) { - var rval = true; - - // handle overflow - if(options.decrypt && options.overflow) { - output.truncate(this.blockSize - options.overflow); - } - - // handle authentication tag - this.tag = forge.util.createBuffer(); - - // concatenate additional data length with cipher length - var lengths = this._aDataLength.concat(from64To32(this._cipherLength * 8)); - - // include lengths in hash - this._s = this.ghash(this._hashSubkey, this._s, lengths); - - // do GCTR(J_0, S) - var tag = []; - this.cipher.encrypt(this._j0, tag); - for(var i = 0; i < this._ints; ++i) { - this.tag.putInt32(this._s[i] ^ tag[i]); - } - - // trim tag to length - this.tag.truncate(this.tag.length() % (this._tagLength / 8)); - - // check authentication tag - if(options.decrypt && this.tag.bytes() !== this._tag) { - rval = false; - } - - return rval; -}; - -/** - * See NIST SP-800-38D 6.3 (Algorithm 1). This function performs Galois - * field multiplication. The field, GF(2^128), is defined by the polynomial: - * - * x^128 + x^7 + x^2 + x + 1 - * - * Which is represented in little-endian binary form as: 11100001 (0xe1). When - * the value of a coefficient is 1, a bit is set. The value R, is the - * concatenation of this value and 120 zero bits, yielding a 128-bit value - * which matches the block size. - * - * This function will multiply two elements (vectors of bytes), X and Y, in - * the field GF(2^128). The result is initialized to zero. For each bit of - * X (out of 128), x_i, if x_i is set, then the result is multiplied (XOR'd) - * by the current value of Y. For each bit, the value of Y will be raised by - * a power of x (multiplied by the polynomial x). This can be achieved by - * shifting Y once to the right. If the current value of Y, prior to being - * multiplied by x, has 0 as its LSB, then it is a 127th degree polynomial. - * Otherwise, we must divide by R after shifting to find the remainder. - * - * @param x the first block to multiply by the second. - * @param y the second block to multiply by the first. - * - * @return the block result of the multiplication. - */ -modes.gcm.prototype.multiply = function(x, y) { - var z_i = [0, 0, 0, 0]; - var v_i = y.slice(0); - - // calculate Z_128 (block has 128 bits) - for(var i = 0; i < 128; ++i) { - // if x_i is 0, Z_{i+1} = Z_i (unchanged) - // else Z_{i+1} = Z_i ^ V_i - // get x_i by finding 32-bit int position, then left shift 1 by remainder - var x_i = x[(i / 32) | 0] & (1 << (31 - i % 32)); - if(x_i) { - z_i[0] ^= v_i[0]; - z_i[1] ^= v_i[1]; - z_i[2] ^= v_i[2]; - z_i[3] ^= v_i[3]; - } - - // if LSB(V_i) is 1, V_i = V_i >> 1 - // else V_i = (V_i >> 1) ^ R - this.pow(v_i, v_i); - } - - return z_i; -}; - -modes.gcm.prototype.pow = function(x, out) { - // if LSB(x) is 1, x = x >>> 1 - // else x = (x >>> 1) ^ R - var lsb = x[3] & 1; - - // always do x >>> 1: - // starting with the rightmost integer, shift each integer to the right - // one bit, pulling in the bit from the integer to the left as its top - // most bit (do this for the last 3 integers) - for(var i = 3; i > 0; --i) { - out[i] = (x[i] >>> 1) | ((x[i - 1] & 1) << 31); - } - // shift the first integer normally - out[0] = x[0] >>> 1; - - // if lsb was not set, then polynomial had a degree of 127 and doesn't - // need to divided; otherwise, XOR with R to find the remainder; we only - // need to XOR the first integer since R technically ends w/120 zero bits - if(lsb) { - out[0] ^= this._R; - } -}; - -modes.gcm.prototype.tableMultiply = function(x) { - // assumes 4-bit tables are used - var z = [0, 0, 0, 0]; - for(var i = 0; i < 32; ++i) { - var idx = (i / 8) | 0; - var x_i = (x[idx] >>> ((7 - (i % 8)) * 4)) & 0xF; - var ah = this._m[i][x_i]; - z[0] ^= ah[0]; - z[1] ^= ah[1]; - z[2] ^= ah[2]; - z[3] ^= ah[3]; - } - return z; -}; - -/** - * A continuing version of the GHASH algorithm that operates on a single - * block. The hash block, last hash value (Ym) and the new block to hash - * are given. - * - * @param h the hash block. - * @param y the previous value for Ym, use [0, 0, 0, 0] for a new hash. - * @param x the block to hash. - * - * @return the hashed value (Ym). - */ -modes.gcm.prototype.ghash = function(h, y, x) { - y[0] ^= x[0]; - y[1] ^= x[1]; - y[2] ^= x[2]; - y[3] ^= x[3]; - return this.tableMultiply(y); - //return this.multiply(y, h); -}; - -/** - * Precomputes a table for multiplying against the hash subkey. This - * mechanism provides a substantial speed increase over multiplication - * performed without a table. The table-based multiplication this table is - * for solves X * H by multiplying each component of X by H and then - * composing the results together using XOR. - * - * This function can be used to generate tables with different bit sizes - * for the components, however, this implementation assumes there are - * 32 components of X (which is a 16 byte vector), therefore each component - * takes 4-bits (so the table is constructed with bits=4). - * - * @param h the hash subkey. - * @param bits the bit size for a component. - */ -modes.gcm.prototype.generateHashTable = function(h, bits) { - // TODO: There are further optimizations that would use only the - // first table M_0 (or some variant) along with a remainder table; - // this can be explored in the future - var multiplier = 8 / bits; - var perInt = 4 * multiplier; - var size = 16 * multiplier; - var m = new Array(size); - for(var i = 0; i < size; ++i) { - var tmp = [0, 0, 0, 0]; - var idx = (i / perInt) | 0; - var shft = ((perInt - 1 - (i % perInt)) * bits); - tmp[idx] = (1 << (bits - 1)) << shft; - m[i] = this.generateSubHashTable(this.multiply(tmp, h), bits); - } - return m; -}; - -/** - * Generates a table for multiplying against the hash subkey for one - * particular component (out of all possible component values). - * - * @param mid the pre-multiplied value for the middle key of the table. - * @param bits the bit size for a component. - */ -modes.gcm.prototype.generateSubHashTable = function(mid, bits) { - // compute the table quickly by minimizing the number of - // POW operations -- they only need to be performed for powers of 2, - // all other entries can be composed from those powers using XOR - var size = 1 << bits; - var half = size >>> 1; - var m = new Array(size); - m[half] = mid.slice(0); - var i = half >>> 1; - while(i > 0) { - // raise m0[2 * i] and store in m0[i] - this.pow(m[2 * i], m[i] = []); - i >>= 1; - } - i = 2; - while(i < half) { - for(var j = 1; j < i; ++j) { - var m_i = m[i]; - var m_j = m[j]; - m[i + j] = [ - m_i[0] ^ m_j[0], - m_i[1] ^ m_j[1], - m_i[2] ^ m_j[2], - m_i[3] ^ m_j[3] - ]; - } - i *= 2; - } - m[0] = [0, 0, 0, 0]; - /* Note: We could avoid storing these by doing composition during multiply - calculate top half using composition by speed is preferred. */ - for(i = half + 1; i < size; ++i) { - var c = m[i ^ half]; - m[i] = [mid[0] ^ c[0], mid[1] ^ c[1], mid[2] ^ c[2], mid[3] ^ c[3]]; - } - return m; -}; - -/** Utility functions */ - -function transformIV(iv, blockSize) { - if(typeof iv === 'string') { - // convert iv string into byte buffer - iv = forge.util.createBuffer(iv); - } - - if(forge.util.isArray(iv) && iv.length > 4) { - // convert iv byte array into byte buffer - var tmp = iv; - iv = forge.util.createBuffer(); - for(var i = 0; i < tmp.length; ++i) { - iv.putByte(tmp[i]); - } - } - - if(iv.length() < blockSize) { - throw new Error( - 'Invalid IV length; got ' + iv.length() + - ' bytes and expected ' + blockSize + ' bytes.'); - } - - if(!forge.util.isArray(iv)) { - // convert iv byte buffer into 32-bit integer array - var ints = []; - var blocks = blockSize / 4; - for(var i = 0; i < blocks; ++i) { - ints.push(iv.getInt32()); - } - iv = ints; - } - - return iv; -} - -function inc32(block) { - // increment last 32 bits of block only - block[block.length - 1] = (block[block.length - 1] + 1) & 0xFFFFFFFF; -} - -function from64To32(num) { - // convert 64-bit number to two BE Int32s - return [(num / 0x100000000) | 0, num & 0xFFFFFFFF]; -} diff --git a/reverse_engineering/node_modules/node-forge/lib/debug.js b/reverse_engineering/node_modules/node-forge/lib/debug.js deleted file mode 100644 index 2675635..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/debug.js +++ /dev/null @@ -1,78 +0,0 @@ -/** - * Debugging support for web applications. - * - * @author David I. Lehn - * - * Copyright 2008-2013 Digital Bazaar, Inc. - */ -var forge = require('./forge'); - -/* DEBUG API */ -module.exports = forge.debug = forge.debug || {}; - -// Private storage for debugging. -// Useful to expose data that is otherwise unviewable behind closures. -// NOTE: remember that this can hold references to data and cause leaks! -// format is "forge._debug.. = data" -// Example: -// (function() { -// var cat = 'forge.test.Test'; // debugging category -// var sState = {...}; // local state -// forge.debug.set(cat, 'sState', sState); -// })(); -forge.debug.storage = {}; - -/** - * Gets debug data. Omit name for all cat data Omit name and cat for - * all data. - * - * @param cat name of debugging category. - * @param name name of data to get (optional). - * @return object with requested debug data or undefined. - */ -forge.debug.get = function(cat, name) { - var rval; - if(typeof(cat) === 'undefined') { - rval = forge.debug.storage; - } else if(cat in forge.debug.storage) { - if(typeof(name) === 'undefined') { - rval = forge.debug.storage[cat]; - } else { - rval = forge.debug.storage[cat][name]; - } - } - return rval; -}; - -/** - * Sets debug data. - * - * @param cat name of debugging category. - * @param name name of data to set. - * @param data data to set. - */ -forge.debug.set = function(cat, name, data) { - if(!(cat in forge.debug.storage)) { - forge.debug.storage[cat] = {}; - } - forge.debug.storage[cat][name] = data; -}; - -/** - * Clears debug data. Omit name for all cat data. Omit name and cat for - * all data. - * - * @param cat name of debugging category. - * @param name name of data to clear or omit to clear entire category. - */ -forge.debug.clear = function(cat, name) { - if(typeof(cat) === 'undefined') { - forge.debug.storage = {}; - } else if(cat in forge.debug.storage) { - if(typeof(name) === 'undefined') { - delete forge.debug.storage[cat]; - } else { - delete forge.debug.storage[cat][name]; - } - } -}; diff --git a/reverse_engineering/node_modules/node-forge/lib/des.js b/reverse_engineering/node_modules/node-forge/lib/des.js deleted file mode 100644 index ed8239a..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/des.js +++ /dev/null @@ -1,496 +0,0 @@ -/** - * DES (Data Encryption Standard) implementation. - * - * This implementation supports DES as well as 3DES-EDE in ECB and CBC mode. - * It is based on the BSD-licensed implementation by Paul Tero: - * - * Paul Tero, July 2001 - * http://www.tero.co.uk/des/ - * - * Optimised for performance with large blocks by - * Michael Hayworth, November 2001 - * http://www.netdealing.com - * - * THIS SOFTWARE IS PROVIDED "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 AUTHOR 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. - * - * @author Stefan Siegl - * @author Dave Longley - * - * Copyright (c) 2012 Stefan Siegl - * Copyright (c) 2012-2014 Digital Bazaar, Inc. - */ -var forge = require('./forge'); -require('./cipher'); -require('./cipherModes'); -require('./util'); - -/* DES API */ -module.exports = forge.des = forge.des || {}; - -/** - * Deprecated. Instead, use: - * - * var cipher = forge.cipher.createCipher('DES-', key); - * cipher.start({iv: iv}); - * - * Creates an DES cipher object to encrypt data using the given symmetric key. - * The output will be stored in the 'output' member of the returned cipher. - * - * The key and iv may be given as binary-encoded strings of bytes or - * byte buffers. - * - * @param key the symmetric key to use (64 or 192 bits). - * @param iv the initialization vector to use. - * @param output the buffer to write to, null to create one. - * @param mode the cipher mode to use (default: 'CBC' if IV is - * given, 'ECB' if null). - * - * @return the cipher. - */ -forge.des.startEncrypting = function(key, iv, output, mode) { - var cipher = _createCipher({ - key: key, - output: output, - decrypt: false, - mode: mode || (iv === null ? 'ECB' : 'CBC') - }); - cipher.start(iv); - return cipher; -}; - -/** - * Deprecated. Instead, use: - * - * var cipher = forge.cipher.createCipher('DES-', key); - * - * Creates an DES cipher object to encrypt data using the given symmetric key. - * - * The key may be given as a binary-encoded string of bytes or a byte buffer. - * - * @param key the symmetric key to use (64 or 192 bits). - * @param mode the cipher mode to use (default: 'CBC'). - * - * @return the cipher. - */ -forge.des.createEncryptionCipher = function(key, mode) { - return _createCipher({ - key: key, - output: null, - decrypt: false, - mode: mode - }); -}; - -/** - * Deprecated. Instead, use: - * - * var decipher = forge.cipher.createDecipher('DES-', key); - * decipher.start({iv: iv}); - * - * Creates an DES cipher object to decrypt data using the given symmetric key. - * The output will be stored in the 'output' member of the returned cipher. - * - * The key and iv may be given as binary-encoded strings of bytes or - * byte buffers. - * - * @param key the symmetric key to use (64 or 192 bits). - * @param iv the initialization vector to use. - * @param output the buffer to write to, null to create one. - * @param mode the cipher mode to use (default: 'CBC' if IV is - * given, 'ECB' if null). - * - * @return the cipher. - */ -forge.des.startDecrypting = function(key, iv, output, mode) { - var cipher = _createCipher({ - key: key, - output: output, - decrypt: true, - mode: mode || (iv === null ? 'ECB' : 'CBC') - }); - cipher.start(iv); - return cipher; -}; - -/** - * Deprecated. Instead, use: - * - * var decipher = forge.cipher.createDecipher('DES-', key); - * - * Creates an DES cipher object to decrypt data using the given symmetric key. - * - * The key may be given as a binary-encoded string of bytes or a byte buffer. - * - * @param key the symmetric key to use (64 or 192 bits). - * @param mode the cipher mode to use (default: 'CBC'). - * - * @return the cipher. - */ -forge.des.createDecryptionCipher = function(key, mode) { - return _createCipher({ - key: key, - output: null, - decrypt: true, - mode: mode - }); -}; - -/** - * Creates a new DES cipher algorithm object. - * - * @param name the name of the algorithm. - * @param mode the mode factory function. - * - * @return the DES algorithm object. - */ -forge.des.Algorithm = function(name, mode) { - var self = this; - self.name = name; - self.mode = new mode({ - blockSize: 8, - cipher: { - encrypt: function(inBlock, outBlock) { - return _updateBlock(self._keys, inBlock, outBlock, false); - }, - decrypt: function(inBlock, outBlock) { - return _updateBlock(self._keys, inBlock, outBlock, true); - } - } - }); - self._init = false; -}; - -/** - * Initializes this DES algorithm by expanding its key. - * - * @param options the options to use. - * key the key to use with this algorithm. - * decrypt true if the algorithm should be initialized for decryption, - * false for encryption. - */ -forge.des.Algorithm.prototype.initialize = function(options) { - if(this._init) { - return; - } - - var key = forge.util.createBuffer(options.key); - if(this.name.indexOf('3DES') === 0) { - if(key.length() !== 24) { - throw new Error('Invalid Triple-DES key size: ' + key.length() * 8); - } - } - - // do key expansion to 16 or 48 subkeys (single or triple DES) - this._keys = _createKeys(key); - this._init = true; -}; - -/** Register DES algorithms **/ - -registerAlgorithm('DES-ECB', forge.cipher.modes.ecb); -registerAlgorithm('DES-CBC', forge.cipher.modes.cbc); -registerAlgorithm('DES-CFB', forge.cipher.modes.cfb); -registerAlgorithm('DES-OFB', forge.cipher.modes.ofb); -registerAlgorithm('DES-CTR', forge.cipher.modes.ctr); - -registerAlgorithm('3DES-ECB', forge.cipher.modes.ecb); -registerAlgorithm('3DES-CBC', forge.cipher.modes.cbc); -registerAlgorithm('3DES-CFB', forge.cipher.modes.cfb); -registerAlgorithm('3DES-OFB', forge.cipher.modes.ofb); -registerAlgorithm('3DES-CTR', forge.cipher.modes.ctr); - -function registerAlgorithm(name, mode) { - var factory = function() { - return new forge.des.Algorithm(name, mode); - }; - forge.cipher.registerAlgorithm(name, factory); -} - -/** DES implementation **/ - -var spfunction1 = [0x1010400,0,0x10000,0x1010404,0x1010004,0x10404,0x4,0x10000,0x400,0x1010400,0x1010404,0x400,0x1000404,0x1010004,0x1000000,0x4,0x404,0x1000400,0x1000400,0x10400,0x10400,0x1010000,0x1010000,0x1000404,0x10004,0x1000004,0x1000004,0x10004,0,0x404,0x10404,0x1000000,0x10000,0x1010404,0x4,0x1010000,0x1010400,0x1000000,0x1000000,0x400,0x1010004,0x10000,0x10400,0x1000004,0x400,0x4,0x1000404,0x10404,0x1010404,0x10004,0x1010000,0x1000404,0x1000004,0x404,0x10404,0x1010400,0x404,0x1000400,0x1000400,0,0x10004,0x10400,0,0x1010004]; -var spfunction2 = [-0x7fef7fe0,-0x7fff8000,0x8000,0x108020,0x100000,0x20,-0x7fefffe0,-0x7fff7fe0,-0x7fffffe0,-0x7fef7fe0,-0x7fef8000,-0x80000000,-0x7fff8000,0x100000,0x20,-0x7fefffe0,0x108000,0x100020,-0x7fff7fe0,0,-0x80000000,0x8000,0x108020,-0x7ff00000,0x100020,-0x7fffffe0,0,0x108000,0x8020,-0x7fef8000,-0x7ff00000,0x8020,0,0x108020,-0x7fefffe0,0x100000,-0x7fff7fe0,-0x7ff00000,-0x7fef8000,0x8000,-0x7ff00000,-0x7fff8000,0x20,-0x7fef7fe0,0x108020,0x20,0x8000,-0x80000000,0x8020,-0x7fef8000,0x100000,-0x7fffffe0,0x100020,-0x7fff7fe0,-0x7fffffe0,0x100020,0x108000,0,-0x7fff8000,0x8020,-0x80000000,-0x7fefffe0,-0x7fef7fe0,0x108000]; -var spfunction3 = [0x208,0x8020200,0,0x8020008,0x8000200,0,0x20208,0x8000200,0x20008,0x8000008,0x8000008,0x20000,0x8020208,0x20008,0x8020000,0x208,0x8000000,0x8,0x8020200,0x200,0x20200,0x8020000,0x8020008,0x20208,0x8000208,0x20200,0x20000,0x8000208,0x8,0x8020208,0x200,0x8000000,0x8020200,0x8000000,0x20008,0x208,0x20000,0x8020200,0x8000200,0,0x200,0x20008,0x8020208,0x8000200,0x8000008,0x200,0,0x8020008,0x8000208,0x20000,0x8000000,0x8020208,0x8,0x20208,0x20200,0x8000008,0x8020000,0x8000208,0x208,0x8020000,0x20208,0x8,0x8020008,0x20200]; -var spfunction4 = [0x802001,0x2081,0x2081,0x80,0x802080,0x800081,0x800001,0x2001,0,0x802000,0x802000,0x802081,0x81,0,0x800080,0x800001,0x1,0x2000,0x800000,0x802001,0x80,0x800000,0x2001,0x2080,0x800081,0x1,0x2080,0x800080,0x2000,0x802080,0x802081,0x81,0x800080,0x800001,0x802000,0x802081,0x81,0,0,0x802000,0x2080,0x800080,0x800081,0x1,0x802001,0x2081,0x2081,0x80,0x802081,0x81,0x1,0x2000,0x800001,0x2001,0x802080,0x800081,0x2001,0x2080,0x800000,0x802001,0x80,0x800000,0x2000,0x802080]; -var spfunction5 = [0x100,0x2080100,0x2080000,0x42000100,0x80000,0x100,0x40000000,0x2080000,0x40080100,0x80000,0x2000100,0x40080100,0x42000100,0x42080000,0x80100,0x40000000,0x2000000,0x40080000,0x40080000,0,0x40000100,0x42080100,0x42080100,0x2000100,0x42080000,0x40000100,0,0x42000000,0x2080100,0x2000000,0x42000000,0x80100,0x80000,0x42000100,0x100,0x2000000,0x40000000,0x2080000,0x42000100,0x40080100,0x2000100,0x40000000,0x42080000,0x2080100,0x40080100,0x100,0x2000000,0x42080000,0x42080100,0x80100,0x42000000,0x42080100,0x2080000,0,0x40080000,0x42000000,0x80100,0x2000100,0x40000100,0x80000,0,0x40080000,0x2080100,0x40000100]; -var spfunction6 = [0x20000010,0x20400000,0x4000,0x20404010,0x20400000,0x10,0x20404010,0x400000,0x20004000,0x404010,0x400000,0x20000010,0x400010,0x20004000,0x20000000,0x4010,0,0x400010,0x20004010,0x4000,0x404000,0x20004010,0x10,0x20400010,0x20400010,0,0x404010,0x20404000,0x4010,0x404000,0x20404000,0x20000000,0x20004000,0x10,0x20400010,0x404000,0x20404010,0x400000,0x4010,0x20000010,0x400000,0x20004000,0x20000000,0x4010,0x20000010,0x20404010,0x404000,0x20400000,0x404010,0x20404000,0,0x20400010,0x10,0x4000,0x20400000,0x404010,0x4000,0x400010,0x20004010,0,0x20404000,0x20000000,0x400010,0x20004010]; -var spfunction7 = [0x200000,0x4200002,0x4000802,0,0x800,0x4000802,0x200802,0x4200800,0x4200802,0x200000,0,0x4000002,0x2,0x4000000,0x4200002,0x802,0x4000800,0x200802,0x200002,0x4000800,0x4000002,0x4200000,0x4200800,0x200002,0x4200000,0x800,0x802,0x4200802,0x200800,0x2,0x4000000,0x200800,0x4000000,0x200800,0x200000,0x4000802,0x4000802,0x4200002,0x4200002,0x2,0x200002,0x4000000,0x4000800,0x200000,0x4200800,0x802,0x200802,0x4200800,0x802,0x4000002,0x4200802,0x4200000,0x200800,0,0x2,0x4200802,0,0x200802,0x4200000,0x800,0x4000002,0x4000800,0x800,0x200002]; -var spfunction8 = [0x10001040,0x1000,0x40000,0x10041040,0x10000000,0x10001040,0x40,0x10000000,0x40040,0x10040000,0x10041040,0x41000,0x10041000,0x41040,0x1000,0x40,0x10040000,0x10000040,0x10001000,0x1040,0x41000,0x40040,0x10040040,0x10041000,0x1040,0,0,0x10040040,0x10000040,0x10001000,0x41040,0x40000,0x41040,0x40000,0x10041000,0x1000,0x40,0x10040040,0x1000,0x41040,0x10001000,0x40,0x10000040,0x10040000,0x10040040,0x10000000,0x40000,0x10001040,0,0x10041040,0x40040,0x10000040,0x10040000,0x10001000,0x10001040,0,0x10041040,0x41000,0x41000,0x1040,0x1040,0x40040,0x10000000,0x10041000]; - -/** - * Create necessary sub keys. - * - * @param key the 64-bit or 192-bit key. - * - * @return the expanded keys. - */ -function _createKeys(key) { - var pc2bytes0 = [0,0x4,0x20000000,0x20000004,0x10000,0x10004,0x20010000,0x20010004,0x200,0x204,0x20000200,0x20000204,0x10200,0x10204,0x20010200,0x20010204], - pc2bytes1 = [0,0x1,0x100000,0x100001,0x4000000,0x4000001,0x4100000,0x4100001,0x100,0x101,0x100100,0x100101,0x4000100,0x4000101,0x4100100,0x4100101], - pc2bytes2 = [0,0x8,0x800,0x808,0x1000000,0x1000008,0x1000800,0x1000808,0,0x8,0x800,0x808,0x1000000,0x1000008,0x1000800,0x1000808], - pc2bytes3 = [0,0x200000,0x8000000,0x8200000,0x2000,0x202000,0x8002000,0x8202000,0x20000,0x220000,0x8020000,0x8220000,0x22000,0x222000,0x8022000,0x8222000], - pc2bytes4 = [0,0x40000,0x10,0x40010,0,0x40000,0x10,0x40010,0x1000,0x41000,0x1010,0x41010,0x1000,0x41000,0x1010,0x41010], - pc2bytes5 = [0,0x400,0x20,0x420,0,0x400,0x20,0x420,0x2000000,0x2000400,0x2000020,0x2000420,0x2000000,0x2000400,0x2000020,0x2000420], - pc2bytes6 = [0,0x10000000,0x80000,0x10080000,0x2,0x10000002,0x80002,0x10080002,0,0x10000000,0x80000,0x10080000,0x2,0x10000002,0x80002,0x10080002], - pc2bytes7 = [0,0x10000,0x800,0x10800,0x20000000,0x20010000,0x20000800,0x20010800,0x20000,0x30000,0x20800,0x30800,0x20020000,0x20030000,0x20020800,0x20030800], - pc2bytes8 = [0,0x40000,0,0x40000,0x2,0x40002,0x2,0x40002,0x2000000,0x2040000,0x2000000,0x2040000,0x2000002,0x2040002,0x2000002,0x2040002], - pc2bytes9 = [0,0x10000000,0x8,0x10000008,0,0x10000000,0x8,0x10000008,0x400,0x10000400,0x408,0x10000408,0x400,0x10000400,0x408,0x10000408], - pc2bytes10 = [0,0x20,0,0x20,0x100000,0x100020,0x100000,0x100020,0x2000,0x2020,0x2000,0x2020,0x102000,0x102020,0x102000,0x102020], - pc2bytes11 = [0,0x1000000,0x200,0x1000200,0x200000,0x1200000,0x200200,0x1200200,0x4000000,0x5000000,0x4000200,0x5000200,0x4200000,0x5200000,0x4200200,0x5200200], - pc2bytes12 = [0,0x1000,0x8000000,0x8001000,0x80000,0x81000,0x8080000,0x8081000,0x10,0x1010,0x8000010,0x8001010,0x80010,0x81010,0x8080010,0x8081010], - pc2bytes13 = [0,0x4,0x100,0x104,0,0x4,0x100,0x104,0x1,0x5,0x101,0x105,0x1,0x5,0x101,0x105]; - - // how many iterations (1 for des, 3 for triple des) - // changed by Paul 16/6/2007 to use Triple DES for 9+ byte keys - var iterations = key.length() > 8 ? 3 : 1; - - // stores the return keys - var keys = []; - - // now define the left shifts which need to be done - var shifts = [0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0]; - - var n = 0, tmp; - for(var j = 0; j < iterations; j++) { - var left = key.getInt32(); - var right = key.getInt32(); - - tmp = ((left >>> 4) ^ right) & 0x0f0f0f0f; - right ^= tmp; - left ^= (tmp << 4); - - tmp = ((right >>> -16) ^ left) & 0x0000ffff; - left ^= tmp; - right ^= (tmp << -16); - - tmp = ((left >>> 2) ^ right) & 0x33333333; - right ^= tmp; - left ^= (tmp << 2); - - tmp = ((right >>> -16) ^ left) & 0x0000ffff; - left ^= tmp; - right ^= (tmp << -16); - - tmp = ((left >>> 1) ^ right) & 0x55555555; - right ^= tmp; - left ^= (tmp << 1); - - tmp = ((right >>> 8) ^ left) & 0x00ff00ff; - left ^= tmp; - right ^= (tmp << 8); - - tmp = ((left >>> 1) ^ right) & 0x55555555; - right ^= tmp; - left ^= (tmp << 1); - - // right needs to be shifted and OR'd with last four bits of left - tmp = (left << 8) | ((right >>> 20) & 0x000000f0); - - // left needs to be put upside down - left = ((right << 24) | ((right << 8) & 0xff0000) | - ((right >>> 8) & 0xff00) | ((right >>> 24) & 0xf0)); - right = tmp; - - // now go through and perform these shifts on the left and right keys - for(var i = 0; i < shifts.length; ++i) { - //shift the keys either one or two bits to the left - if(shifts[i]) { - left = (left << 2) | (left >>> 26); - right = (right << 2) | (right >>> 26); - } else { - left = (left << 1) | (left >>> 27); - right = (right << 1) | (right >>> 27); - } - left &= -0xf; - right &= -0xf; - - // now apply PC-2, in such a way that E is easier when encrypting or - // decrypting this conversion will look like PC-2 except only the last 6 - // bits of each byte are used rather than 48 consecutive bits and the - // order of lines will be according to how the S selection functions will - // be applied: S2, S4, S6, S8, S1, S3, S5, S7 - var lefttmp = ( - pc2bytes0[left >>> 28] | pc2bytes1[(left >>> 24) & 0xf] | - pc2bytes2[(left >>> 20) & 0xf] | pc2bytes3[(left >>> 16) & 0xf] | - pc2bytes4[(left >>> 12) & 0xf] | pc2bytes5[(left >>> 8) & 0xf] | - pc2bytes6[(left >>> 4) & 0xf]); - var righttmp = ( - pc2bytes7[right >>> 28] | pc2bytes8[(right >>> 24) & 0xf] | - pc2bytes9[(right >>> 20) & 0xf] | pc2bytes10[(right >>> 16) & 0xf] | - pc2bytes11[(right >>> 12) & 0xf] | pc2bytes12[(right >>> 8) & 0xf] | - pc2bytes13[(right >>> 4) & 0xf]); - tmp = ((righttmp >>> 16) ^ lefttmp) & 0x0000ffff; - keys[n++] = lefttmp ^ tmp; - keys[n++] = righttmp ^ (tmp << 16); - } - } - - return keys; -} - -/** - * Updates a single block (1 byte) using DES. The update will either - * encrypt or decrypt the block. - * - * @param keys the expanded keys. - * @param input the input block (an array of 32-bit words). - * @param output the updated output block. - * @param decrypt true to decrypt the block, false to encrypt it. - */ -function _updateBlock(keys, input, output, decrypt) { - // set up loops for single or triple DES - var iterations = keys.length === 32 ? 3 : 9; - var looping; - if(iterations === 3) { - looping = decrypt ? [30, -2, -2] : [0, 32, 2]; - } else { - looping = (decrypt ? - [94, 62, -2, 32, 64, 2, 30, -2, -2] : - [0, 32, 2, 62, 30, -2, 64, 96, 2]); - } - - var tmp; - - var left = input[0]; - var right = input[1]; - - // first each 64 bit chunk of the message must be permuted according to IP - tmp = ((left >>> 4) ^ right) & 0x0f0f0f0f; - right ^= tmp; - left ^= (tmp << 4); - - tmp = ((left >>> 16) ^ right) & 0x0000ffff; - right ^= tmp; - left ^= (tmp << 16); - - tmp = ((right >>> 2) ^ left) & 0x33333333; - left ^= tmp; - right ^= (tmp << 2); - - tmp = ((right >>> 8) ^ left) & 0x00ff00ff; - left ^= tmp; - right ^= (tmp << 8); - - tmp = ((left >>> 1) ^ right) & 0x55555555; - right ^= tmp; - left ^= (tmp << 1); - - // rotate left 1 bit - left = ((left << 1) | (left >>> 31)); - right = ((right << 1) | (right >>> 31)); - - for(var j = 0; j < iterations; j += 3) { - var endloop = looping[j + 1]; - var loopinc = looping[j + 2]; - - // now go through and perform the encryption or decryption - for(var i = looping[j]; i != endloop; i += loopinc) { - var right1 = right ^ keys[i]; - var right2 = ((right >>> 4) | (right << 28)) ^ keys[i + 1]; - - // passing these bytes through the S selection functions - tmp = left; - left = right; - right = tmp ^ ( - spfunction2[(right1 >>> 24) & 0x3f] | - spfunction4[(right1 >>> 16) & 0x3f] | - spfunction6[(right1 >>> 8) & 0x3f] | - spfunction8[right1 & 0x3f] | - spfunction1[(right2 >>> 24) & 0x3f] | - spfunction3[(right2 >>> 16) & 0x3f] | - spfunction5[(right2 >>> 8) & 0x3f] | - spfunction7[right2 & 0x3f]); - } - // unreverse left and right - tmp = left; - left = right; - right = tmp; - } - - // rotate right 1 bit - left = ((left >>> 1) | (left << 31)); - right = ((right >>> 1) | (right << 31)); - - // now perform IP-1, which is IP in the opposite direction - tmp = ((left >>> 1) ^ right) & 0x55555555; - right ^= tmp; - left ^= (tmp << 1); - - tmp = ((right >>> 8) ^ left) & 0x00ff00ff; - left ^= tmp; - right ^= (tmp << 8); - - tmp = ((right >>> 2) ^ left) & 0x33333333; - left ^= tmp; - right ^= (tmp << 2); - - tmp = ((left >>> 16) ^ right) & 0x0000ffff; - right ^= tmp; - left ^= (tmp << 16); - - tmp = ((left >>> 4) ^ right) & 0x0f0f0f0f; - right ^= tmp; - left ^= (tmp << 4); - - output[0] = left; - output[1] = right; -} - -/** - * Deprecated. Instead, use: - * - * forge.cipher.createCipher('DES-', key); - * forge.cipher.createDecipher('DES-', key); - * - * Creates a deprecated DES cipher object. This object's mode will default to - * CBC (cipher-block-chaining). - * - * The key may be given as a binary-encoded string of bytes or a byte buffer. - * - * @param options the options to use. - * key the symmetric key to use (64 or 192 bits). - * output the buffer to write to. - * decrypt true for decryption, false for encryption. - * mode the cipher mode to use (default: 'CBC'). - * - * @return the cipher. - */ -function _createCipher(options) { - options = options || {}; - var mode = (options.mode || 'CBC').toUpperCase(); - var algorithm = 'DES-' + mode; - - var cipher; - if(options.decrypt) { - cipher = forge.cipher.createDecipher(algorithm, options.key); - } else { - cipher = forge.cipher.createCipher(algorithm, options.key); - } - - // backwards compatible start API - var start = cipher.start; - cipher.start = function(iv, options) { - // backwards compatibility: support second arg as output buffer - var output = null; - if(options instanceof forge.util.ByteBuffer) { - output = options; - options = {}; - } - options = options || {}; - options.output = output; - options.iv = iv; - start.call(cipher, options); - }; - - return cipher; -} diff --git a/reverse_engineering/node_modules/node-forge/lib/ed25519.js b/reverse_engineering/node_modules/node-forge/lib/ed25519.js deleted file mode 100644 index f3e6faa..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/ed25519.js +++ /dev/null @@ -1,1072 +0,0 @@ -/** - * JavaScript implementation of Ed25519. - * - * Copyright (c) 2017-2019 Digital Bazaar, Inc. - * - * This implementation is based on the most excellent TweetNaCl which is - * in the public domain. Many thanks to its contributors: - * - * https://github.com/dchest/tweetnacl-js - */ -var forge = require('./forge'); -require('./jsbn'); -require('./random'); -require('./sha512'); -require('./util'); -var asn1Validator = require('./asn1-validator'); -var publicKeyValidator = asn1Validator.publicKeyValidator; -var privateKeyValidator = asn1Validator.privateKeyValidator; - -if(typeof BigInteger === 'undefined') { - var BigInteger = forge.jsbn.BigInteger; -} - -var ByteBuffer = forge.util.ByteBuffer; -var NativeBuffer = typeof Buffer === 'undefined' ? Uint8Array : Buffer; - -/* - * Ed25519 algorithms, see RFC 8032: - * https://tools.ietf.org/html/rfc8032 - */ -forge.pki = forge.pki || {}; -module.exports = forge.pki.ed25519 = forge.ed25519 = forge.ed25519 || {}; -var ed25519 = forge.ed25519; - -ed25519.constants = {}; -ed25519.constants.PUBLIC_KEY_BYTE_LENGTH = 32; -ed25519.constants.PRIVATE_KEY_BYTE_LENGTH = 64; -ed25519.constants.SEED_BYTE_LENGTH = 32; -ed25519.constants.SIGN_BYTE_LENGTH = 64; -ed25519.constants.HASH_BYTE_LENGTH = 64; - -ed25519.generateKeyPair = function(options) { - options = options || {}; - var seed = options.seed; - if(seed === undefined) { - // generate seed - seed = forge.random.getBytesSync(ed25519.constants.SEED_BYTE_LENGTH); - } else if(typeof seed === 'string') { - if(seed.length !== ed25519.constants.SEED_BYTE_LENGTH) { - throw new TypeError( - '"seed" must be ' + ed25519.constants.SEED_BYTE_LENGTH + - ' bytes in length.'); - } - } else if(!(seed instanceof Uint8Array)) { - throw new TypeError( - '"seed" must be a node.js Buffer, Uint8Array, or a binary string.'); - } - - seed = messageToNativeBuffer({message: seed, encoding: 'binary'}); - - var pk = new NativeBuffer(ed25519.constants.PUBLIC_KEY_BYTE_LENGTH); - var sk = new NativeBuffer(ed25519.constants.PRIVATE_KEY_BYTE_LENGTH); - for(var i = 0; i < 32; ++i) { - sk[i] = seed[i]; - } - crypto_sign_keypair(pk, sk); - return {publicKey: pk, privateKey: sk}; -}; - -/** - * Converts a private key from a RFC8410 ASN.1 encoding. - * - * @param obj - The asn1 representation of a private key. - * - * @returns {Object} keyInfo - The key information. - * @returns {Buffer|Uint8Array} keyInfo.privateKeyBytes - 32 private key bytes. - */ -ed25519.privateKeyFromAsn1 = function(obj) { - var capture = {}; - var errors = []; - var valid = forge.asn1.validate(obj, privateKeyValidator, capture, errors); - if(!valid) { - var error = new Error('Invalid Key.'); - error.errors = errors; - throw error; - } - var oid = forge.asn1.derToOid(capture.privateKeyOid); - var ed25519Oid = forge.oids.EdDSA25519; - if(oid !== ed25519Oid) { - throw new Error('Invalid OID "' + oid + '"; OID must be "' + - ed25519Oid + '".'); - } - var privateKey = capture.privateKey; - // manually extract the private key bytes from nested octet string, see FIXME: - // https://github.com/digitalbazaar/forge/blob/master/lib/asn1.js#L542 - var privateKeyBytes = messageToNativeBuffer({ - message: forge.asn1.fromDer(privateKey).value, - encoding: 'binary' - }); - // TODO: RFC8410 specifies a format for encoding the public key bytes along - // with the private key bytes. `publicKeyBytes` can be returned in the - // future. https://tools.ietf.org/html/rfc8410#section-10.3 - return {privateKeyBytes: privateKeyBytes}; -}; - -/** - * Converts a public key from a RFC8410 ASN.1 encoding. - * - * @param obj - The asn1 representation of a public key. - * - * @return {Buffer|Uint8Array} - 32 public key bytes. - */ -ed25519.publicKeyFromAsn1 = function(obj) { - // get SubjectPublicKeyInfo - var capture = {}; - var errors = []; - var valid = forge.asn1.validate(obj, publicKeyValidator, capture, errors); - if(!valid) { - var error = new Error('Invalid Key.'); - error.errors = errors; - throw error; - } - var oid = forge.asn1.derToOid(capture.publicKeyOid); - var ed25519Oid = forge.oids.EdDSA25519; - if(oid !== ed25519Oid) { - throw new Error('Invalid OID "' + oid + '"; OID must be "' + - ed25519Oid + '".'); - } - var publicKeyBytes = capture.ed25519PublicKey; - if(publicKeyBytes.length !== ed25519.constants.PUBLIC_KEY_BYTE_LENGTH) { - throw new Error('Key length is invalid.'); - } - return messageToNativeBuffer({ - message: publicKeyBytes, - encoding: 'binary' - }); -}; - -ed25519.publicKeyFromPrivateKey = function(options) { - options = options || {}; - var privateKey = messageToNativeBuffer({ - message: options.privateKey, encoding: 'binary' - }); - if(privateKey.length !== ed25519.constants.PRIVATE_KEY_BYTE_LENGTH) { - throw new TypeError( - '"options.privateKey" must have a byte length of ' + - ed25519.constants.PRIVATE_KEY_BYTE_LENGTH); - } - - var pk = new NativeBuffer(ed25519.constants.PUBLIC_KEY_BYTE_LENGTH); - for(var i = 0; i < pk.length; ++i) { - pk[i] = privateKey[32 + i]; - } - return pk; -}; - -ed25519.sign = function(options) { - options = options || {}; - var msg = messageToNativeBuffer(options); - var privateKey = messageToNativeBuffer({ - message: options.privateKey, - encoding: 'binary' - }); - if(privateKey.length === ed25519.constants.SEED_BYTE_LENGTH) { - var keyPair = ed25519.generateKeyPair({seed: privateKey}); - privateKey = keyPair.privateKey; - } else if(privateKey.length !== ed25519.constants.PRIVATE_KEY_BYTE_LENGTH) { - throw new TypeError( - '"options.privateKey" must have a byte length of ' + - ed25519.constants.SEED_BYTE_LENGTH + ' or ' + - ed25519.constants.PRIVATE_KEY_BYTE_LENGTH); - } - - var signedMsg = new NativeBuffer( - ed25519.constants.SIGN_BYTE_LENGTH + msg.length); - crypto_sign(signedMsg, msg, msg.length, privateKey); - - var sig = new NativeBuffer(ed25519.constants.SIGN_BYTE_LENGTH); - for(var i = 0; i < sig.length; ++i) { - sig[i] = signedMsg[i]; - } - return sig; -}; - -ed25519.verify = function(options) { - options = options || {}; - var msg = messageToNativeBuffer(options); - if(options.signature === undefined) { - throw new TypeError( - '"options.signature" must be a node.js Buffer, a Uint8Array, a forge ' + - 'ByteBuffer, or a binary string.'); - } - var sig = messageToNativeBuffer({ - message: options.signature, - encoding: 'binary' - }); - if(sig.length !== ed25519.constants.SIGN_BYTE_LENGTH) { - throw new TypeError( - '"options.signature" must have a byte length of ' + - ed25519.constants.SIGN_BYTE_LENGTH); - } - var publicKey = messageToNativeBuffer({ - message: options.publicKey, - encoding: 'binary' - }); - if(publicKey.length !== ed25519.constants.PUBLIC_KEY_BYTE_LENGTH) { - throw new TypeError( - '"options.publicKey" must have a byte length of ' + - ed25519.constants.PUBLIC_KEY_BYTE_LENGTH); - } - - var sm = new NativeBuffer(ed25519.constants.SIGN_BYTE_LENGTH + msg.length); - var m = new NativeBuffer(ed25519.constants.SIGN_BYTE_LENGTH + msg.length); - var i; - for(i = 0; i < ed25519.constants.SIGN_BYTE_LENGTH; ++i) { - sm[i] = sig[i]; - } - for(i = 0; i < msg.length; ++i) { - sm[i + ed25519.constants.SIGN_BYTE_LENGTH] = msg[i]; - } - return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0); -}; - -function messageToNativeBuffer(options) { - var message = options.message; - if(message instanceof Uint8Array || message instanceof NativeBuffer) { - return message; - } - - var encoding = options.encoding; - if(message === undefined) { - if(options.md) { - // TODO: more rigorous validation that `md` is a MessageDigest - message = options.md.digest().getBytes(); - encoding = 'binary'; - } else { - throw new TypeError('"options.message" or "options.md" not specified.'); - } - } - - if(typeof message === 'string' && !encoding) { - throw new TypeError('"options.encoding" must be "binary" or "utf8".'); - } - - if(typeof message === 'string') { - if(typeof Buffer !== 'undefined') { - return Buffer.from(message, encoding); - } - message = new ByteBuffer(message, encoding); - } else if(!(message instanceof ByteBuffer)) { - throw new TypeError( - '"options.message" must be a node.js Buffer, a Uint8Array, a forge ' + - 'ByteBuffer, or a string with "options.encoding" specifying its ' + - 'encoding.'); - } - - // convert to native buffer - var buffer = new NativeBuffer(message.length()); - for(var i = 0; i < buffer.length; ++i) { - buffer[i] = message.at(i); - } - return buffer; -} - -var gf0 = gf(); -var gf1 = gf([1]); -var D = gf([ - 0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, - 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]); -var D2 = gf([ - 0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, - 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]); -var X = gf([ - 0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, - 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]); -var Y = gf([ - 0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, - 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]); -var L = new Float64Array([ - 0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, - 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]); -var I = gf([ - 0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, - 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]); - -// TODO: update forge buffer implementation to use `Buffer` or `Uint8Array`, -// whichever is available, to improve performance -function sha512(msg, msgLen) { - // Note: `out` and `msg` are NativeBuffer - var md = forge.md.sha512.create(); - var buffer = new ByteBuffer(msg); - md.update(buffer.getBytes(msgLen), 'binary'); - var hash = md.digest().getBytes(); - if(typeof Buffer !== 'undefined') { - return Buffer.from(hash, 'binary'); - } - var out = new NativeBuffer(ed25519.constants.HASH_BYTE_LENGTH); - for(var i = 0; i < 64; ++i) { - out[i] = hash.charCodeAt(i); - } - return out; -} - -function crypto_sign_keypair(pk, sk) { - var p = [gf(), gf(), gf(), gf()]; - var i; - - var d = sha512(sk, 32); - d[0] &= 248; - d[31] &= 127; - d[31] |= 64; - - scalarbase(p, d); - pack(pk, p); - - for(i = 0; i < 32; ++i) { - sk[i + 32] = pk[i]; - } - return 0; -} - -// Note: difference from C - smlen returned, not passed as argument. -function crypto_sign(sm, m, n, sk) { - var i, j, x = new Float64Array(64); - var p = [gf(), gf(), gf(), gf()]; - - var d = sha512(sk, 32); - d[0] &= 248; - d[31] &= 127; - d[31] |= 64; - - var smlen = n + 64; - for(i = 0; i < n; ++i) { - sm[64 + i] = m[i]; - } - for(i = 0; i < 32; ++i) { - sm[32 + i] = d[32 + i]; - } - - var r = sha512(sm.subarray(32), n + 32); - reduce(r); - scalarbase(p, r); - pack(sm, p); - - for(i = 32; i < 64; ++i) { - sm[i] = sk[i]; - } - var h = sha512(sm, n + 64); - reduce(h); - - for(i = 32; i < 64; ++i) { - x[i] = 0; - } - for(i = 0; i < 32; ++i) { - x[i] = r[i]; - } - for(i = 0; i < 32; ++i) { - for(j = 0; j < 32; j++) { - x[i + j] += h[i] * d[j]; - } - } - - modL(sm.subarray(32), x); - return smlen; -} - -function crypto_sign_open(m, sm, n, pk) { - var i, mlen; - var t = new NativeBuffer(32); - var p = [gf(), gf(), gf(), gf()], - q = [gf(), gf(), gf(), gf()]; - - mlen = -1; - if(n < 64) { - return -1; - } - - if(unpackneg(q, pk)) { - return -1; - } - - for(i = 0; i < n; ++i) { - m[i] = sm[i]; - } - for(i = 0; i < 32; ++i) { - m[i + 32] = pk[i]; - } - var h = sha512(m, n); - reduce(h); - scalarmult(p, q, h); - - scalarbase(q, sm.subarray(32)); - add(p, q); - pack(t, p); - - n -= 64; - if(crypto_verify_32(sm, 0, t, 0)) { - for(i = 0; i < n; ++i) { - m[i] = 0; - } - return -1; - } - - for(i = 0; i < n; ++i) { - m[i] = sm[i + 64]; - } - mlen = n; - return mlen; -} - -function modL(r, x) { - var carry, i, j, k; - for(i = 63; i >= 32; --i) { - carry = 0; - for(j = i - 32, k = i - 12; j < k; ++j) { - x[j] += carry - 16 * x[i] * L[j - (i - 32)]; - carry = (x[j] + 128) >> 8; - x[j] -= carry * 256; - } - x[j] += carry; - x[i] = 0; - } - carry = 0; - for(j = 0; j < 32; ++j) { - x[j] += carry - (x[31] >> 4) * L[j]; - carry = x[j] >> 8; - x[j] &= 255; - } - for(j = 0; j < 32; ++j) { - x[j] -= carry * L[j]; - } - for(i = 0; i < 32; ++i) { - x[i + 1] += x[i] >> 8; - r[i] = x[i] & 255; - } -} - -function reduce(r) { - var x = new Float64Array(64); - for(var i = 0; i < 64; ++i) { - x[i] = r[i]; - r[i] = 0; - } - modL(r, x); -} - -function add(p, q) { - var a = gf(), b = gf(), c = gf(), - d = gf(), e = gf(), f = gf(), - g = gf(), h = gf(), t = gf(); - - Z(a, p[1], p[0]); - Z(t, q[1], q[0]); - M(a, a, t); - A(b, p[0], p[1]); - A(t, q[0], q[1]); - M(b, b, t); - M(c, p[3], q[3]); - M(c, c, D2); - M(d, p[2], q[2]); - A(d, d, d); - Z(e, b, a); - Z(f, d, c); - A(g, d, c); - A(h, b, a); - - M(p[0], e, f); - M(p[1], h, g); - M(p[2], g, f); - M(p[3], e, h); -} - -function cswap(p, q, b) { - for(var i = 0; i < 4; ++i) { - sel25519(p[i], q[i], b); - } -} - -function pack(r, p) { - var tx = gf(), ty = gf(), zi = gf(); - inv25519(zi, p[2]); - M(tx, p[0], zi); - M(ty, p[1], zi); - pack25519(r, ty); - r[31] ^= par25519(tx) << 7; -} - -function pack25519(o, n) { - var i, j, b; - var m = gf(), t = gf(); - for(i = 0; i < 16; ++i) { - t[i] = n[i]; - } - car25519(t); - car25519(t); - car25519(t); - for(j = 0; j < 2; ++j) { - m[0] = t[0] - 0xffed; - for(i = 1; i < 15; ++i) { - m[i] = t[i] - 0xffff - ((m[i - 1] >> 16) & 1); - m[i-1] &= 0xffff; - } - m[15] = t[15] - 0x7fff - ((m[14] >> 16) & 1); - b = (m[15] >> 16) & 1; - m[14] &= 0xffff; - sel25519(t, m, 1 - b); - } - for (i = 0; i < 16; i++) { - o[2 * i] = t[i] & 0xff; - o[2 * i + 1] = t[i] >> 8; - } -} - -function unpackneg(r, p) { - var t = gf(), chk = gf(), num = gf(), - den = gf(), den2 = gf(), den4 = gf(), - den6 = gf(); - - set25519(r[2], gf1); - unpack25519(r[1], p); - S(num, r[1]); - M(den, num, D); - Z(num, num, r[2]); - A(den, r[2], den); - - S(den2, den); - S(den4, den2); - M(den6, den4, den2); - M(t, den6, num); - M(t, t, den); - - pow2523(t, t); - M(t, t, num); - M(t, t, den); - M(t, t, den); - M(r[0], t, den); - - S(chk, r[0]); - M(chk, chk, den); - if(neq25519(chk, num)) { - M(r[0], r[0], I); - } - - S(chk, r[0]); - M(chk, chk, den); - if(neq25519(chk, num)) { - return -1; - } - - if(par25519(r[0]) === (p[31] >> 7)) { - Z(r[0], gf0, r[0]); - } - - M(r[3], r[0], r[1]); - return 0; -} - -function unpack25519(o, n) { - var i; - for(i = 0; i < 16; ++i) { - o[i] = n[2 * i] + (n[2 * i + 1] << 8); - } - o[15] &= 0x7fff; -} - -function pow2523(o, i) { - var c = gf(); - var a; - for(a = 0; a < 16; ++a) { - c[a] = i[a]; - } - for(a = 250; a >= 0; --a) { - S(c, c); - if(a !== 1) { - M(c, c, i); - } - } - for(a = 0; a < 16; ++a) { - o[a] = c[a]; - } -} - -function neq25519(a, b) { - var c = new NativeBuffer(32); - var d = new NativeBuffer(32); - pack25519(c, a); - pack25519(d, b); - return crypto_verify_32(c, 0, d, 0); -} - -function crypto_verify_32(x, xi, y, yi) { - return vn(x, xi, y, yi, 32); -} - -function vn(x, xi, y, yi, n) { - var i, d = 0; - for(i = 0; i < n; ++i) { - d |= x[xi + i] ^ y[yi + i]; - } - return (1 & ((d - 1) >>> 8)) - 1; -} - -function par25519(a) { - var d = new NativeBuffer(32); - pack25519(d, a); - return d[0] & 1; -} - -function scalarmult(p, q, s) { - var b, i; - set25519(p[0], gf0); - set25519(p[1], gf1); - set25519(p[2], gf1); - set25519(p[3], gf0); - for(i = 255; i >= 0; --i) { - b = (s[(i / 8)|0] >> (i & 7)) & 1; - cswap(p, q, b); - add(q, p); - add(p, p); - cswap(p, q, b); - } -} - -function scalarbase(p, s) { - var q = [gf(), gf(), gf(), gf()]; - set25519(q[0], X); - set25519(q[1], Y); - set25519(q[2], gf1); - M(q[3], X, Y); - scalarmult(p, q, s); -} - -function set25519(r, a) { - var i; - for(i = 0; i < 16; i++) { - r[i] = a[i] | 0; - } -} - -function inv25519(o, i) { - var c = gf(); - var a; - for(a = 0; a < 16; ++a) { - c[a] = i[a]; - } - for(a = 253; a >= 0; --a) { - S(c, c); - if(a !== 2 && a !== 4) { - M(c, c, i); - } - } - for(a = 0; a < 16; ++a) { - o[a] = c[a]; - } -} - -function car25519(o) { - var i, v, c = 1; - for(i = 0; i < 16; ++i) { - v = o[i] + c + 65535; - c = Math.floor(v / 65536); - o[i] = v - c * 65536; - } - o[0] += c - 1 + 37 * (c - 1); -} - -function sel25519(p, q, b) { - var t, c = ~(b - 1); - for(var i = 0; i < 16; ++i) { - t = c & (p[i] ^ q[i]); - p[i] ^= t; - q[i] ^= t; - } -} - -function gf(init) { - var i, r = new Float64Array(16); - if(init) { - for(i = 0; i < init.length; ++i) { - r[i] = init[i]; - } - } - return r; -} - -function A(o, a, b) { - for(var i = 0; i < 16; ++i) { - o[i] = a[i] + b[i]; - } -} - -function Z(o, a, b) { - for(var i = 0; i < 16; ++i) { - o[i] = a[i] - b[i]; - } -} - -function S(o, a) { - M(o, a, a); -} - -function M(o, a, b) { - var v, c, - t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, - t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0, - t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0, - t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0, - b0 = b[0], - b1 = b[1], - b2 = b[2], - b3 = b[3], - b4 = b[4], - b5 = b[5], - b6 = b[6], - b7 = b[7], - b8 = b[8], - b9 = b[9], - b10 = b[10], - b11 = b[11], - b12 = b[12], - b13 = b[13], - b14 = b[14], - b15 = b[15]; - - v = a[0]; - t0 += v * b0; - t1 += v * b1; - t2 += v * b2; - t3 += v * b3; - t4 += v * b4; - t5 += v * b5; - t6 += v * b6; - t7 += v * b7; - t8 += v * b8; - t9 += v * b9; - t10 += v * b10; - t11 += v * b11; - t12 += v * b12; - t13 += v * b13; - t14 += v * b14; - t15 += v * b15; - v = a[1]; - t1 += v * b0; - t2 += v * b1; - t3 += v * b2; - t4 += v * b3; - t5 += v * b4; - t6 += v * b5; - t7 += v * b6; - t8 += v * b7; - t9 += v * b8; - t10 += v * b9; - t11 += v * b10; - t12 += v * b11; - t13 += v * b12; - t14 += v * b13; - t15 += v * b14; - t16 += v * b15; - v = a[2]; - t2 += v * b0; - t3 += v * b1; - t4 += v * b2; - t5 += v * b3; - t6 += v * b4; - t7 += v * b5; - t8 += v * b6; - t9 += v * b7; - t10 += v * b8; - t11 += v * b9; - t12 += v * b10; - t13 += v * b11; - t14 += v * b12; - t15 += v * b13; - t16 += v * b14; - t17 += v * b15; - v = a[3]; - t3 += v * b0; - t4 += v * b1; - t5 += v * b2; - t6 += v * b3; - t7 += v * b4; - t8 += v * b5; - t9 += v * b6; - t10 += v * b7; - t11 += v * b8; - t12 += v * b9; - t13 += v * b10; - t14 += v * b11; - t15 += v * b12; - t16 += v * b13; - t17 += v * b14; - t18 += v * b15; - v = a[4]; - t4 += v * b0; - t5 += v * b1; - t6 += v * b2; - t7 += v * b3; - t8 += v * b4; - t9 += v * b5; - t10 += v * b6; - t11 += v * b7; - t12 += v * b8; - t13 += v * b9; - t14 += v * b10; - t15 += v * b11; - t16 += v * b12; - t17 += v * b13; - t18 += v * b14; - t19 += v * b15; - v = a[5]; - t5 += v * b0; - t6 += v * b1; - t7 += v * b2; - t8 += v * b3; - t9 += v * b4; - t10 += v * b5; - t11 += v * b6; - t12 += v * b7; - t13 += v * b8; - t14 += v * b9; - t15 += v * b10; - t16 += v * b11; - t17 += v * b12; - t18 += v * b13; - t19 += v * b14; - t20 += v * b15; - v = a[6]; - t6 += v * b0; - t7 += v * b1; - t8 += v * b2; - t9 += v * b3; - t10 += v * b4; - t11 += v * b5; - t12 += v * b6; - t13 += v * b7; - t14 += v * b8; - t15 += v * b9; - t16 += v * b10; - t17 += v * b11; - t18 += v * b12; - t19 += v * b13; - t20 += v * b14; - t21 += v * b15; - v = a[7]; - t7 += v * b0; - t8 += v * b1; - t9 += v * b2; - t10 += v * b3; - t11 += v * b4; - t12 += v * b5; - t13 += v * b6; - t14 += v * b7; - t15 += v * b8; - t16 += v * b9; - t17 += v * b10; - t18 += v * b11; - t19 += v * b12; - t20 += v * b13; - t21 += v * b14; - t22 += v * b15; - v = a[8]; - t8 += v * b0; - t9 += v * b1; - t10 += v * b2; - t11 += v * b3; - t12 += v * b4; - t13 += v * b5; - t14 += v * b6; - t15 += v * b7; - t16 += v * b8; - t17 += v * b9; - t18 += v * b10; - t19 += v * b11; - t20 += v * b12; - t21 += v * b13; - t22 += v * b14; - t23 += v * b15; - v = a[9]; - t9 += v * b0; - t10 += v * b1; - t11 += v * b2; - t12 += v * b3; - t13 += v * b4; - t14 += v * b5; - t15 += v * b6; - t16 += v * b7; - t17 += v * b8; - t18 += v * b9; - t19 += v * b10; - t20 += v * b11; - t21 += v * b12; - t22 += v * b13; - t23 += v * b14; - t24 += v * b15; - v = a[10]; - t10 += v * b0; - t11 += v * b1; - t12 += v * b2; - t13 += v * b3; - t14 += v * b4; - t15 += v * b5; - t16 += v * b6; - t17 += v * b7; - t18 += v * b8; - t19 += v * b9; - t20 += v * b10; - t21 += v * b11; - t22 += v * b12; - t23 += v * b13; - t24 += v * b14; - t25 += v * b15; - v = a[11]; - t11 += v * b0; - t12 += v * b1; - t13 += v * b2; - t14 += v * b3; - t15 += v * b4; - t16 += v * b5; - t17 += v * b6; - t18 += v * b7; - t19 += v * b8; - t20 += v * b9; - t21 += v * b10; - t22 += v * b11; - t23 += v * b12; - t24 += v * b13; - t25 += v * b14; - t26 += v * b15; - v = a[12]; - t12 += v * b0; - t13 += v * b1; - t14 += v * b2; - t15 += v * b3; - t16 += v * b4; - t17 += v * b5; - t18 += v * b6; - t19 += v * b7; - t20 += v * b8; - t21 += v * b9; - t22 += v * b10; - t23 += v * b11; - t24 += v * b12; - t25 += v * b13; - t26 += v * b14; - t27 += v * b15; - v = a[13]; - t13 += v * b0; - t14 += v * b1; - t15 += v * b2; - t16 += v * b3; - t17 += v * b4; - t18 += v * b5; - t19 += v * b6; - t20 += v * b7; - t21 += v * b8; - t22 += v * b9; - t23 += v * b10; - t24 += v * b11; - t25 += v * b12; - t26 += v * b13; - t27 += v * b14; - t28 += v * b15; - v = a[14]; - t14 += v * b0; - t15 += v * b1; - t16 += v * b2; - t17 += v * b3; - t18 += v * b4; - t19 += v * b5; - t20 += v * b6; - t21 += v * b7; - t22 += v * b8; - t23 += v * b9; - t24 += v * b10; - t25 += v * b11; - t26 += v * b12; - t27 += v * b13; - t28 += v * b14; - t29 += v * b15; - v = a[15]; - t15 += v * b0; - t16 += v * b1; - t17 += v * b2; - t18 += v * b3; - t19 += v * b4; - t20 += v * b5; - t21 += v * b6; - t22 += v * b7; - t23 += v * b8; - t24 += v * b9; - t25 += v * b10; - t26 += v * b11; - t27 += v * b12; - t28 += v * b13; - t29 += v * b14; - t30 += v * b15; - - t0 += 38 * t16; - t1 += 38 * t17; - t2 += 38 * t18; - t3 += 38 * t19; - t4 += 38 * t20; - t5 += 38 * t21; - t6 += 38 * t22; - t7 += 38 * t23; - t8 += 38 * t24; - t9 += 38 * t25; - t10 += 38 * t26; - t11 += 38 * t27; - t12 += 38 * t28; - t13 += 38 * t29; - t14 += 38 * t30; - // t15 left as is - - // first car - c = 1; - v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; - v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; - v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; - v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; - v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; - v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; - v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; - v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; - v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; - v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; - v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; - v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; - v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; - v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; - v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; - v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; - t0 += c-1 + 37 * (c-1); - - // second car - c = 1; - v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; - v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; - v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; - v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; - v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; - v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; - v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; - v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; - v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; - v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; - v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; - v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; - v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; - v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; - v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; - v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; - t0 += c-1 + 37 * (c-1); - - o[ 0] = t0; - o[ 1] = t1; - o[ 2] = t2; - o[ 3] = t3; - o[ 4] = t4; - o[ 5] = t5; - o[ 6] = t6; - o[ 7] = t7; - o[ 8] = t8; - o[ 9] = t9; - o[10] = t10; - o[11] = t11; - o[12] = t12; - o[13] = t13; - o[14] = t14; - o[15] = t15; -} diff --git a/reverse_engineering/node_modules/node-forge/lib/forge.js b/reverse_engineering/node_modules/node-forge/lib/forge.js deleted file mode 100644 index 2e243a9..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/forge.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Node.js module for Forge. - * - * @author Dave Longley - * - * Copyright 2011-2016 Digital Bazaar, Inc. - */ -module.exports = { - // default options - options: { - usePureJavaScript: false - } -}; diff --git a/reverse_engineering/node_modules/node-forge/lib/form.js b/reverse_engineering/node_modules/node-forge/lib/form.js deleted file mode 100644 index 4d7843a..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/form.js +++ /dev/null @@ -1,149 +0,0 @@ -/** - * Functions for manipulating web forms. - * - * @author David I. Lehn - * @author Dave Longley - * @author Mike Johnson - * - * Copyright (c) 2011-2014 Digital Bazaar, Inc. All rights reserved. - */ -var forge = require('./forge'); - -/* Form API */ -var form = module.exports = forge.form = forge.form || {}; - -(function($) { - -/** - * Regex for parsing a single name property (handles array brackets). - */ -var _regex = /([^\[]*?)\[(.*?)\]/g; - -/** - * Parses a single name property into an array with the name and any - * array indices. - * - * @param name the name to parse. - * - * @return the array of the name and its array indices in order. - */ -var _parseName = function(name) { - var rval = []; - - var matches; - while(!!(matches = _regex.exec(name))) { - if(matches[1].length > 0) { - rval.push(matches[1]); - } - if(matches.length >= 2) { - rval.push(matches[2]); - } - } - if(rval.length === 0) { - rval.push(name); - } - - return rval; -}; - -/** - * Adds a field from the given form to the given object. - * - * @param obj the object. - * @param names the field as an array of object property names. - * @param value the value of the field. - * @param dict a dictionary of names to replace. - */ -var _addField = function(obj, names, value, dict) { - // combine array names that fall within square brackets - var tmp = []; - for(var i = 0; i < names.length; ++i) { - // check name for starting square bracket but no ending one - var name = names[i]; - if(name.indexOf('[') !== -1 && name.indexOf(']') === -1 && - i < names.length - 1) { - do { - name += '.' + names[++i]; - } while(i < names.length - 1 && names[i].indexOf(']') === -1); - } - tmp.push(name); - } - names = tmp; - - // split out array indexes - var tmp = []; - $.each(names, function(n, name) { - tmp = tmp.concat(_parseName(name)); - }); - names = tmp; - - // iterate over object property names until value is set - $.each(names, function(n, name) { - // do dictionary name replacement - if(dict && name.length !== 0 && name in dict) { - name = dict[name]; - } - - // blank name indicates appending to an array, set name to - // new last index of array - if(name.length === 0) { - name = obj.length; - } - - // value already exists, append value - if(obj[name]) { - // last name in the field - if(n == names.length - 1) { - // more than one value, so convert into an array - if(!$.isArray(obj[name])) { - obj[name] = [obj[name]]; - } - obj[name].push(value); - } else { - // not last name, go deeper into object - obj = obj[name]; - } - } else if(n == names.length - 1) { - // new value, last name in the field, set value - obj[name] = value; - } else { - // new value, not last name, go deeper - // get next name - var next = names[n + 1]; - - // blank next value indicates array-appending, so create array - if(next.length === 0) { - obj[name] = []; - } else { - // if next name is a number create an array, otherwise a map - var isNum = ((next - 0) == next && next.length > 0); - obj[name] = isNum ? [] : {}; - } - obj = obj[name]; - } - }); -}; - -/** - * Serializes a form to a JSON object. Object properties will be separated - * using the given separator (defaults to '.') and by square brackets. - * - * @param input the jquery form to serialize. - * @param sep the object-property separator (defaults to '.'). - * @param dict a dictionary of names to replace (name=replace). - * - * @return the JSON-serialized form. - */ -form.serialize = function(input, sep, dict) { - var rval = {}; - - // add all fields in the form to the object - sep = sep || '.'; - $.each(input.serializeArray(), function() { - _addField(rval, this.name.split(sep), this.value || '', dict); - }); - - return rval; -}; - -})(jQuery); diff --git a/reverse_engineering/node_modules/node-forge/lib/hmac.js b/reverse_engineering/node_modules/node-forge/lib/hmac.js deleted file mode 100644 index b155f24..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/hmac.js +++ /dev/null @@ -1,146 +0,0 @@ -/** - * Hash-based Message Authentication Code implementation. Requires a message - * digest object that can be obtained, for example, from forge.md.sha1 or - * forge.md.md5. - * - * @author Dave Longley - * - * Copyright (c) 2010-2012 Digital Bazaar, Inc. All rights reserved. - */ -var forge = require('./forge'); -require('./md'); -require('./util'); - -/* HMAC API */ -var hmac = module.exports = forge.hmac = forge.hmac || {}; - -/** - * Creates an HMAC object that uses the given message digest object. - * - * @return an HMAC object. - */ -hmac.create = function() { - // the hmac key to use - var _key = null; - - // the message digest to use - var _md = null; - - // the inner padding - var _ipadding = null; - - // the outer padding - var _opadding = null; - - // hmac context - var ctx = {}; - - /** - * Starts or restarts the HMAC with the given key and message digest. - * - * @param md the message digest to use, null to reuse the previous one, - * a string to use builtin 'sha1', 'md5', 'sha256'. - * @param key the key to use as a string, array of bytes, byte buffer, - * or null to reuse the previous key. - */ - ctx.start = function(md, key) { - if(md !== null) { - if(typeof md === 'string') { - // create builtin message digest - md = md.toLowerCase(); - if(md in forge.md.algorithms) { - _md = forge.md.algorithms[md].create(); - } else { - throw new Error('Unknown hash algorithm "' + md + '"'); - } - } else { - // store message digest - _md = md; - } - } - - if(key === null) { - // reuse previous key - key = _key; - } else { - if(typeof key === 'string') { - // convert string into byte buffer - key = forge.util.createBuffer(key); - } else if(forge.util.isArray(key)) { - // convert byte array into byte buffer - var tmp = key; - key = forge.util.createBuffer(); - for(var i = 0; i < tmp.length; ++i) { - key.putByte(tmp[i]); - } - } - - // if key is longer than blocksize, hash it - var keylen = key.length(); - if(keylen > _md.blockLength) { - _md.start(); - _md.update(key.bytes()); - key = _md.digest(); - } - - // mix key into inner and outer padding - // ipadding = [0x36 * blocksize] ^ key - // opadding = [0x5C * blocksize] ^ key - _ipadding = forge.util.createBuffer(); - _opadding = forge.util.createBuffer(); - keylen = key.length(); - for(var i = 0; i < keylen; ++i) { - var tmp = key.at(i); - _ipadding.putByte(0x36 ^ tmp); - _opadding.putByte(0x5C ^ tmp); - } - - // if key is shorter than blocksize, add additional padding - if(keylen < _md.blockLength) { - var tmp = _md.blockLength - keylen; - for(var i = 0; i < tmp; ++i) { - _ipadding.putByte(0x36); - _opadding.putByte(0x5C); - } - } - _key = key; - _ipadding = _ipadding.bytes(); - _opadding = _opadding.bytes(); - } - - // digest is done like so: hash(opadding | hash(ipadding | message)) - - // prepare to do inner hash - // hash(ipadding | message) - _md.start(); - _md.update(_ipadding); - }; - - /** - * Updates the HMAC with the given message bytes. - * - * @param bytes the bytes to update with. - */ - ctx.update = function(bytes) { - _md.update(bytes); - }; - - /** - * Produces the Message Authentication Code (MAC). - * - * @return a byte buffer containing the digest value. - */ - ctx.getMac = function() { - // digest is done like so: hash(opadding | hash(ipadding | message)) - // here we do the outer hashing - var inner = _md.digest().bytes(); - _md.start(); - _md.update(_opadding); - _md.update(inner); - return _md.digest(); - }; - // alias for getMac - ctx.digest = ctx.getMac; - - return ctx; -}; diff --git a/reverse_engineering/node_modules/node-forge/lib/http.js b/reverse_engineering/node_modules/node-forge/lib/http.js deleted file mode 100644 index 1dcb0a6..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/http.js +++ /dev/null @@ -1,1364 +0,0 @@ -/** - * HTTP client-side implementation that uses forge.net sockets. - * - * @author Dave Longley - * - * Copyright (c) 2010-2014 Digital Bazaar, Inc. All rights reserved. - */ -var forge = require('./forge'); -require('./debug'); -require('./tls'); -require('./util'); - -// define http namespace -var http = module.exports = forge.http = forge.http || {}; - -// logging category -var cat = 'forge.http'; - -// add array of clients to debug storage -if(forge.debug) { - forge.debug.set('forge.http', 'clients', []); -} - -// normalizes an http header field name -var _normalize = function(name) { - return name.toLowerCase().replace(/(^.)|(-.)/g, - function(a) {return a.toUpperCase();}); -}; - -/** - * Gets the local storage ID for the given client. - * - * @param client the client to get the local storage ID for. - * - * @return the local storage ID to use. - */ -var _getStorageId = function(client) { - // TODO: include browser in ID to avoid sharing cookies between - // browsers (if this is undesirable) - // navigator.userAgent - return 'forge.http.' + - client.url.scheme + '.' + - client.url.host + '.' + - client.url.port; -}; - -/** - * Loads persistent cookies from disk for the given client. - * - * @param client the client. - */ -var _loadCookies = function(client) { - if(client.persistCookies) { - try { - var cookies = forge.util.getItem( - client.socketPool.flashApi, - _getStorageId(client), 'cookies'); - client.cookies = cookies || {}; - } catch(ex) { - // no flash storage available, just silently fail - // TODO: i assume we want this logged somewhere or - // should it actually generate an error - //forge.log.error(cat, ex); - } - } -}; - -/** - * Saves persistent cookies on disk for the given client. - * - * @param client the client. - */ -var _saveCookies = function(client) { - if(client.persistCookies) { - try { - forge.util.setItem( - client.socketPool.flashApi, - _getStorageId(client), 'cookies', client.cookies); - } catch(ex) { - // no flash storage available, just silently fail - // TODO: i assume we want this logged somewhere or - // should it actually generate an error - //forge.log.error(cat, ex); - } - } - - // FIXME: remove me - _loadCookies(client); -}; - -/** - * Clears persistent cookies on disk for the given client. - * - * @param client the client. - */ -var _clearCookies = function(client) { - if(client.persistCookies) { - try { - // only thing stored is 'cookies', so clear whole storage - forge.util.clearItems( - client.socketPool.flashApi, - _getStorageId(client)); - } catch(ex) { - // no flash storage available, just silently fail - // TODO: i assume we want this logged somewhere or - // should it actually generate an error - //forge.log.error(cat, ex); - } - } -}; - -/** - * Connects and sends a request. - * - * @param client the http client. - * @param socket the socket to use. - */ -var _doRequest = function(client, socket) { - if(socket.isConnected()) { - // already connected - socket.options.request.connectTime = +new Date(); - socket.connected({ - type: 'connect', - id: socket.id - }); - } else { - // connect - socket.options.request.connectTime = +new Date(); - socket.connect({ - host: client.url.host, - port: client.url.port, - policyPort: client.policyPort, - policyUrl: client.policyUrl - }); - } -}; - -/** - * Handles the next request or marks a socket as idle. - * - * @param client the http client. - * @param socket the socket. - */ -var _handleNextRequest = function(client, socket) { - // clear buffer - socket.buffer.clear(); - - // get pending request - var pending = null; - while(pending === null && client.requests.length > 0) { - pending = client.requests.shift(); - if(pending.request.aborted) { - pending = null; - } - } - - // mark socket idle if no pending requests - if(pending === null) { - if(socket.options !== null) { - socket.options = null; - } - client.idle.push(socket); - } else { - // handle pending request, allow 1 retry - socket.retries = 1; - socket.options = pending; - _doRequest(client, socket); - } -}; - -/** - * Sets up a socket for use with an http client. - * - * @param client the parent http client. - * @param socket the socket to set up. - * @param tlsOptions if the socket must use TLS, the TLS options. - */ -var _initSocket = function(client, socket, tlsOptions) { - // no socket options yet - socket.options = null; - - // set up handlers - socket.connected = function(e) { - // socket primed by caching TLS session, handle next request - if(socket.options === null) { - _handleNextRequest(client, socket); - } else { - // socket in use - var request = socket.options.request; - request.connectTime = +new Date() - request.connectTime; - e.socket = socket; - socket.options.connected(e); - if(request.aborted) { - socket.close(); - } else { - var out = request.toString(); - if(request.body) { - out += request.body; - } - request.time = +new Date(); - socket.send(out); - request.time = +new Date() - request.time; - socket.options.response.time = +new Date(); - socket.sending = true; - } - } - }; - socket.closed = function(e) { - if(socket.sending) { - socket.sending = false; - if(socket.retries > 0) { - --socket.retries; - _doRequest(client, socket); - } else { - // error, closed during send - socket.error({ - id: socket.id, - type: 'ioError', - message: 'Connection closed during send. Broken pipe.', - bytesAvailable: 0 - }); - } - } else { - // handle unspecified content-length transfer - var response = socket.options.response; - if(response.readBodyUntilClose) { - response.time = +new Date() - response.time; - response.bodyReceived = true; - socket.options.bodyReady({ - request: socket.options.request, - response: response, - socket: socket - }); - } - socket.options.closed(e); - _handleNextRequest(client, socket); - } - }; - socket.data = function(e) { - socket.sending = false; - var request = socket.options.request; - if(request.aborted) { - socket.close(); - } else { - // receive all bytes available - var response = socket.options.response; - var bytes = socket.receive(e.bytesAvailable); - if(bytes !== null) { - // receive header and then body - socket.buffer.putBytes(bytes); - if(!response.headerReceived) { - response.readHeader(socket.buffer); - if(response.headerReceived) { - socket.options.headerReady({ - request: socket.options.request, - response: response, - socket: socket - }); - } - } - if(response.headerReceived && !response.bodyReceived) { - response.readBody(socket.buffer); - } - if(response.bodyReceived) { - socket.options.bodyReady({ - request: socket.options.request, - response: response, - socket: socket - }); - // close connection if requested or by default on http/1.0 - var value = response.getField('Connection') || ''; - if(value.indexOf('close') != -1 || - (response.version === 'HTTP/1.0' && - response.getField('Keep-Alive') === null)) { - socket.close(); - } else { - _handleNextRequest(client, socket); - } - } - } - } - }; - socket.error = function(e) { - // do error callback, include request - socket.options.error({ - type: e.type, - message: e.message, - request: socket.options.request, - response: socket.options.response, - socket: socket - }); - socket.close(); - }; - - // wrap socket for TLS - if(tlsOptions) { - socket = forge.tls.wrapSocket({ - sessionId: null, - sessionCache: {}, - caStore: tlsOptions.caStore, - cipherSuites: tlsOptions.cipherSuites, - socket: socket, - virtualHost: tlsOptions.virtualHost, - verify: tlsOptions.verify, - getCertificate: tlsOptions.getCertificate, - getPrivateKey: tlsOptions.getPrivateKey, - getSignature: tlsOptions.getSignature, - deflate: tlsOptions.deflate || null, - inflate: tlsOptions.inflate || null - }); - - socket.options = null; - socket.buffer = forge.util.createBuffer(); - client.sockets.push(socket); - if(tlsOptions.prime) { - // prime socket by connecting and caching TLS session, will do - // next request from there - socket.connect({ - host: client.url.host, - port: client.url.port, - policyPort: client.policyPort, - policyUrl: client.policyUrl - }); - } else { - // do not prime socket, just add as idle - client.idle.push(socket); - } - } else { - // no need to prime non-TLS sockets - socket.buffer = forge.util.createBuffer(); - client.sockets.push(socket); - client.idle.push(socket); - } -}; - -/** - * Checks to see if the given cookie has expired. If the cookie's max-age - * plus its created time is less than the time now, it has expired, unless - * its max-age is set to -1 which indicates it will never expire. - * - * @param cookie the cookie to check. - * - * @return true if it has expired, false if not. - */ -var _hasCookieExpired = function(cookie) { - var rval = false; - - if(cookie.maxAge !== -1) { - var now = _getUtcTime(new Date()); - var expires = cookie.created + cookie.maxAge; - if(expires <= now) { - rval = true; - } - } - - return rval; -}; - -/** - * Adds cookies in the given client to the given request. - * - * @param client the client. - * @param request the request. - */ -var _writeCookies = function(client, request) { - var expired = []; - var url = client.url; - var cookies = client.cookies; - for(var name in cookies) { - // get cookie paths - var paths = cookies[name]; - for(var p in paths) { - var cookie = paths[p]; - if(_hasCookieExpired(cookie)) { - // store for clean up - expired.push(cookie); - } else if(request.path.indexOf(cookie.path) === 0) { - // path or path's ancestor must match cookie.path - request.addCookie(cookie); - } - } - } - - // clean up expired cookies - for(var i = 0; i < expired.length; ++i) { - var cookie = expired[i]; - client.removeCookie(cookie.name, cookie.path); - } -}; - -/** - * Gets cookies from the given response and adds the to the given client. - * - * @param client the client. - * @param response the response. - */ -var _readCookies = function(client, response) { - var cookies = response.getCookies(); - for(var i = 0; i < cookies.length; ++i) { - try { - client.setCookie(cookies[i]); - } catch(ex) { - // ignore failure to add other-domain, etc. cookies - } - } -}; - -/** - * Creates an http client that uses forge.net sockets as a backend and - * forge.tls for security. - * - * @param options: - * url: the url to connect to (scheme://host:port). - * socketPool: the flash socket pool to use. - * policyPort: the flash policy port to use (if other than the - * socket pool default), use 0 for flash default. - * policyUrl: the flash policy file URL to use (if provided will - * be used instead of a policy port). - * connections: number of connections to use to handle requests. - * caCerts: an array of certificates to trust for TLS, certs may - * be PEM-formatted or cert objects produced via forge.pki. - * cipherSuites: an optional array of cipher suites to use, - * see forge.tls.CipherSuites. - * virtualHost: the virtual server name to use in a TLS SNI - * extension, if not provided the url host will be used. - * verify: a custom TLS certificate verify callback to use. - * getCertificate: an optional callback used to get a client-side - * certificate (see forge.tls for details). - * getPrivateKey: an optional callback used to get a client-side - * private key (see forge.tls for details). - * getSignature: an optional callback used to get a client-side - * signature (see forge.tls for details). - * persistCookies: true to use persistent cookies via flash local - * storage, false to only keep cookies in javascript. - * primeTlsSockets: true to immediately connect TLS sockets on - * their creation so that they will cache TLS sessions for reuse. - * - * @return the client. - */ -http.createClient = function(options) { - // create CA store to share with all TLS connections - var caStore = null; - if(options.caCerts) { - caStore = forge.pki.createCaStore(options.caCerts); - } - - // get scheme, host, and port from url - options.url = (options.url || - window.location.protocol + '//' + window.location.host); - var url = http.parseUrl(options.url); - if(!url) { - var error = new Error('Invalid url.'); - error.details = {url: options.url}; - throw error; - } - - // default to 1 connection - options.connections = options.connections || 1; - - // create client - var sp = options.socketPool; - var client = { - // url - url: url, - // socket pool - socketPool: sp, - // the policy port to use - policyPort: options.policyPort, - // policy url to use - policyUrl: options.policyUrl, - // queue of requests to service - requests: [], - // all sockets - sockets: [], - // idle sockets - idle: [], - // whether or not the connections are secure - secure: (url.scheme === 'https'), - // cookie jar (key'd off of name and then path, there is only 1 domain - // and one setting for secure per client so name+path is unique) - cookies: {}, - // default to flash storage of cookies - persistCookies: (typeof(options.persistCookies) === 'undefined') ? - true : options.persistCookies - }; - - // add client to debug storage - if(forge.debug) { - forge.debug.get('forge.http', 'clients').push(client); - } - - // load cookies from disk - _loadCookies(client); - - /** - * A default certificate verify function that checks a certificate common - * name against the client's URL host. - * - * @param c the TLS connection. - * @param verified true if cert is verified, otherwise alert number. - * @param depth the chain depth. - * @param certs the cert chain. - * - * @return true if verified and the common name matches the host, error - * otherwise. - */ - var _defaultCertificateVerify = function(c, verified, depth, certs) { - if(depth === 0 && verified === true) { - // compare common name to url host - var cn = certs[depth].subject.getField('CN'); - if(cn === null || client.url.host !== cn.value) { - verified = { - message: 'Certificate common name does not match url host.' - }; - } - } - return verified; - }; - - // determine if TLS is used - var tlsOptions = null; - if(client.secure) { - tlsOptions = { - caStore: caStore, - cipherSuites: options.cipherSuites || null, - virtualHost: options.virtualHost || url.host, - verify: options.verify || _defaultCertificateVerify, - getCertificate: options.getCertificate || null, - getPrivateKey: options.getPrivateKey || null, - getSignature: options.getSignature || null, - prime: options.primeTlsSockets || false - }; - - // if socket pool uses a flash api, then add deflate support to TLS - if(sp.flashApi !== null) { - tlsOptions.deflate = function(bytes) { - // strip 2 byte zlib header and 4 byte trailer - return forge.util.deflate(sp.flashApi, bytes, true); - }; - tlsOptions.inflate = function(bytes) { - return forge.util.inflate(sp.flashApi, bytes, true); - }; - } - } - - // create and initialize sockets - for(var i = 0; i < options.connections; ++i) { - _initSocket(client, sp.createSocket(), tlsOptions); - } - - /** - * Sends a request. A method 'abort' will be set on the request that - * can be called to attempt to abort the request. - * - * @param options: - * request: the request to send. - * connected: a callback for when the connection is open. - * closed: a callback for when the connection is closed. - * headerReady: a callback for when the response header arrives. - * bodyReady: a callback for when the response body arrives. - * error: a callback for if an error occurs. - */ - client.send = function(options) { - // add host header if not set - if(options.request.getField('Host') === null) { - options.request.setField('Host', client.url.fullHost); - } - - // set default dummy handlers - var opts = {}; - opts.request = options.request; - opts.connected = options.connected || function() {}; - opts.closed = options.close || function() {}; - opts.headerReady = function(e) { - // read cookies - _readCookies(client, e.response); - if(options.headerReady) { - options.headerReady(e); - } - }; - opts.bodyReady = options.bodyReady || function() {}; - opts.error = options.error || function() {}; - - // create response - opts.response = http.createResponse(); - opts.response.time = 0; - opts.response.flashApi = client.socketPool.flashApi; - opts.request.flashApi = client.socketPool.flashApi; - - // create abort function - opts.request.abort = function() { - // set aborted, clear handlers - opts.request.aborted = true; - opts.connected = function() {}; - opts.closed = function() {}; - opts.headerReady = function() {}; - opts.bodyReady = function() {}; - opts.error = function() {}; - }; - - // add cookies to request - _writeCookies(client, opts.request); - - // queue request options if there are no idle sockets - if(client.idle.length === 0) { - client.requests.push(opts); - } else { - // use an idle socket, prefer an idle *connected* socket first - var socket = null; - var len = client.idle.length; - for(var i = 0; socket === null && i < len; ++i) { - socket = client.idle[i]; - if(socket.isConnected()) { - client.idle.splice(i, 1); - } else { - socket = null; - } - } - // no connected socket available, get unconnected socket - if(socket === null) { - socket = client.idle.pop(); - } - socket.options = opts; - _doRequest(client, socket); - } - }; - - /** - * Destroys this client. - */ - client.destroy = function() { - // clear pending requests, close and destroy sockets - client.requests = []; - for(var i = 0; i < client.sockets.length; ++i) { - client.sockets[i].close(); - client.sockets[i].destroy(); - } - client.socketPool = null; - client.sockets = []; - client.idle = []; - }; - - /** - * Sets a cookie for use with all connections made by this client. Any - * cookie with the same name will be replaced. If the cookie's value - * is undefined, null, or the blank string, the cookie will be removed. - * - * If the cookie's domain doesn't match this client's url host or the - * cookie's secure flag doesn't match this client's url scheme, then - * setting the cookie will fail with an exception. - * - * @param cookie the cookie with parameters: - * name: the name of the cookie. - * value: the value of the cookie. - * comment: an optional comment string. - * maxAge: the age of the cookie in seconds relative to created time. - * secure: true if the cookie must be sent over a secure protocol. - * httpOnly: true to restrict access to the cookie from javascript - * (inaffective since the cookies are stored in javascript). - * path: the path for the cookie. - * domain: optional domain the cookie belongs to (must start with dot). - * version: optional version of the cookie. - * created: creation time, in UTC seconds, of the cookie. - */ - client.setCookie = function(cookie) { - var rval; - if(typeof(cookie.name) !== 'undefined') { - if(cookie.value === null || typeof(cookie.value) === 'undefined' || - cookie.value === '') { - // remove cookie - rval = client.removeCookie(cookie.name, cookie.path); - } else { - // set cookie defaults - cookie.comment = cookie.comment || ''; - cookie.maxAge = cookie.maxAge || 0; - cookie.secure = (typeof(cookie.secure) === 'undefined') ? - true : cookie.secure; - cookie.httpOnly = cookie.httpOnly || true; - cookie.path = cookie.path || '/'; - cookie.domain = cookie.domain || null; - cookie.version = cookie.version || null; - cookie.created = _getUtcTime(new Date()); - - // do secure check - if(cookie.secure !== client.secure) { - var error = new Error('Http client url scheme is incompatible ' + - 'with cookie secure flag.'); - error.url = client.url; - error.cookie = cookie; - throw error; - } - // make sure url host is within cookie.domain - if(!http.withinCookieDomain(client.url, cookie)) { - var error = new Error('Http client url scheme is incompatible ' + - 'with cookie secure flag.'); - error.url = client.url; - error.cookie = cookie; - throw error; - } - - // add new cookie - if(!(cookie.name in client.cookies)) { - client.cookies[cookie.name] = {}; - } - client.cookies[cookie.name][cookie.path] = cookie; - rval = true; - - // save cookies - _saveCookies(client); - } - } - - return rval; - }; - - /** - * Gets a cookie by its name. - * - * @param name the name of the cookie to retrieve. - * @param path an optional path for the cookie (if there are multiple - * cookies with the same name but different paths). - * - * @return the cookie or null if not found. - */ - client.getCookie = function(name, path) { - var rval = null; - if(name in client.cookies) { - var paths = client.cookies[name]; - - // get path-specific cookie - if(path) { - if(path in paths) { - rval = paths[path]; - } - } else { - // get first cookie - for(var p in paths) { - rval = paths[p]; - break; - } - } - } - return rval; - }; - - /** - * Removes a cookie. - * - * @param name the name of the cookie to remove. - * @param path an optional path for the cookie (if there are multiple - * cookies with the same name but different paths). - * - * @return true if a cookie was removed, false if not. - */ - client.removeCookie = function(name, path) { - var rval = false; - if(name in client.cookies) { - // delete the specific path - if(path) { - var paths = client.cookies[name]; - if(path in paths) { - rval = true; - delete client.cookies[name][path]; - // clean up entry if empty - var empty = true; - for(var i in client.cookies[name]) { - empty = false; - break; - } - if(empty) { - delete client.cookies[name]; - } - } - } else { - // delete all cookies with the given name - rval = true; - delete client.cookies[name]; - } - } - if(rval) { - // save cookies - _saveCookies(client); - } - return rval; - }; - - /** - * Clears all cookies stored in this client. - */ - client.clearCookies = function() { - client.cookies = {}; - _clearCookies(client); - }; - - if(forge.log) { - forge.log.debug('forge.http', 'created client', options); - } - - return client; -}; - -/** - * Trims the whitespace off of the beginning and end of a string. - * - * @param str the string to trim. - * - * @return the trimmed string. - */ -var _trimString = function(str) { - return str.replace(/^\s*/, '').replace(/\s*$/, ''); -}; - -/** - * Creates an http header object. - * - * @return the http header object. - */ -var _createHeader = function() { - var header = { - fields: {}, - setField: function(name, value) { - // normalize field name, trim value - header.fields[_normalize(name)] = [_trimString('' + value)]; - }, - appendField: function(name, value) { - name = _normalize(name); - if(!(name in header.fields)) { - header.fields[name] = []; - } - header.fields[name].push(_trimString('' + value)); - }, - getField: function(name, index) { - var rval = null; - name = _normalize(name); - if(name in header.fields) { - index = index || 0; - rval = header.fields[name][index]; - } - return rval; - } - }; - return header; -}; - -/** - * Gets the time in utc seconds given a date. - * - * @param d the date to use. - * - * @return the time in utc seconds. - */ -var _getUtcTime = function(d) { - var utc = +d + d.getTimezoneOffset() * 60000; - return Math.floor(+new Date() / 1000); -}; - -/** - * Creates an http request. - * - * @param options: - * version: the version. - * method: the method. - * path: the path. - * body: the body. - * headers: custom header fields to add, - * eg: [{'Content-Length': 0}]. - * - * @return the http request. - */ -http.createRequest = function(options) { - options = options || {}; - var request = _createHeader(); - request.version = options.version || 'HTTP/1.1'; - request.method = options.method || null; - request.path = options.path || null; - request.body = options.body || null; - request.bodyDeflated = false; - request.flashApi = null; - - // add custom headers - var headers = options.headers || []; - if(!forge.util.isArray(headers)) { - headers = [headers]; - } - for(var i = 0; i < headers.length; ++i) { - for(var name in headers[i]) { - request.appendField(name, headers[i][name]); - } - } - - /** - * Adds a cookie to the request 'Cookie' header. - * - * @param cookie a cookie to add. - */ - request.addCookie = function(cookie) { - var value = ''; - var field = request.getField('Cookie'); - if(field !== null) { - // separate cookies by semi-colons - value = field + '; '; - } - - // get current time in utc seconds - var now = _getUtcTime(new Date()); - - // output cookie name and value - value += cookie.name + '=' + cookie.value; - request.setField('Cookie', value); - }; - - /** - * Converts an http request into a string that can be sent as an - * HTTP request. Does not include any data. - * - * @return the string representation of the request. - */ - request.toString = function() { - /* Sample request header: - GET /some/path/?query HTTP/1.1 - Host: www.someurl.com - Connection: close - Accept-Encoding: deflate - Accept: image/gif, text/html - User-Agent: Mozilla 4.0 - */ - - // set default headers - if(request.getField('User-Agent') === null) { - request.setField('User-Agent', 'forge.http 1.0'); - } - if(request.getField('Accept') === null) { - request.setField('Accept', '*/*'); - } - if(request.getField('Connection') === null) { - request.setField('Connection', 'keep-alive'); - request.setField('Keep-Alive', '115'); - } - - // add Accept-Encoding if not specified - if(request.flashApi !== null && - request.getField('Accept-Encoding') === null) { - request.setField('Accept-Encoding', 'deflate'); - } - - // if the body isn't null, deflate it if its larger than 100 bytes - if(request.flashApi !== null && request.body !== null && - request.getField('Content-Encoding') === null && - !request.bodyDeflated && request.body.length > 100) { - // use flash to compress data - request.body = forge.util.deflate(request.flashApi, request.body); - request.bodyDeflated = true; - request.setField('Content-Encoding', 'deflate'); - request.setField('Content-Length', request.body.length); - } else if(request.body !== null) { - // set content length for body - request.setField('Content-Length', request.body.length); - } - - // build start line - var rval = - request.method.toUpperCase() + ' ' + request.path + ' ' + - request.version + '\r\n'; - - // add each header - for(var name in request.fields) { - var fields = request.fields[name]; - for(var i = 0; i < fields.length; ++i) { - rval += name + ': ' + fields[i] + '\r\n'; - } - } - // final terminating CRLF - rval += '\r\n'; - - return rval; - }; - - return request; -}; - -/** - * Creates an empty http response header. - * - * @return the empty http response header. - */ -http.createResponse = function() { - // private vars - var _first = true; - var _chunkSize = 0; - var _chunksFinished = false; - - // create response - var response = _createHeader(); - response.version = null; - response.code = 0; - response.message = null; - response.body = null; - response.headerReceived = false; - response.bodyReceived = false; - response.flashApi = null; - - /** - * Reads a line that ends in CRLF from a byte buffer. - * - * @param b the byte buffer. - * - * @return the line or null if none was found. - */ - var _readCrlf = function(b) { - var line = null; - var i = b.data.indexOf('\r\n', b.read); - if(i != -1) { - // read line, skip CRLF - line = b.getBytes(i - b.read); - b.getBytes(2); - } - return line; - }; - - /** - * Parses a header field and appends it to the response. - * - * @param line the header field line. - */ - var _parseHeader = function(line) { - var tmp = line.indexOf(':'); - var name = line.substring(0, tmp++); - response.appendField( - name, (tmp < line.length) ? line.substring(tmp) : ''); - }; - - /** - * Reads an http response header from a buffer of bytes. - * - * @param b the byte buffer to parse the header from. - * - * @return true if the whole header was read, false if not. - */ - response.readHeader = function(b) { - // read header lines (each ends in CRLF) - var line = ''; - while(!response.headerReceived && line !== null) { - line = _readCrlf(b); - if(line !== null) { - // parse first line - if(_first) { - _first = false; - var tmp = line.split(' '); - if(tmp.length >= 3) { - response.version = tmp[0]; - response.code = parseInt(tmp[1], 10); - response.message = tmp.slice(2).join(' '); - } else { - // invalid header - var error = new Error('Invalid http response header.'); - error.details = {'line': line}; - throw error; - } - } else if(line.length === 0) { - // handle final line, end of header - response.headerReceived = true; - } else { - _parseHeader(line); - } - } - } - - return response.headerReceived; - }; - - /** - * Reads some chunked http response entity-body from the given buffer of - * bytes. - * - * @param b the byte buffer to read from. - * - * @return true if the whole body was read, false if not. - */ - var _readChunkedBody = function(b) { - /* Chunked transfer-encoding sends data in a series of chunks, - followed by a set of 0-N http trailers. - The format is as follows: - - chunk-size (in hex) CRLF - chunk data (with "chunk-size" many bytes) CRLF - ... (N many chunks) - chunk-size (of 0 indicating the last chunk) CRLF - N many http trailers followed by CRLF - blank line + CRLF (terminates the trailers) - - If there are no http trailers, then after the chunk-size of 0, - there is still a single CRLF (indicating the blank line + CRLF - that terminates the trailers). In other words, you always terminate - the trailers with blank line + CRLF, regardless of 0-N trailers. */ - - /* From RFC-2616, section 3.6.1, here is the pseudo-code for - implementing chunked transfer-encoding: - - length := 0 - read chunk-size, chunk-extension (if any) and CRLF - while (chunk-size > 0) { - read chunk-data and CRLF - append chunk-data to entity-body - length := length + chunk-size - read chunk-size and CRLF - } - read entity-header - while (entity-header not empty) { - append entity-header to existing header fields - read entity-header - } - Content-Length := length - Remove "chunked" from Transfer-Encoding - */ - - var line = ''; - while(line !== null && b.length() > 0) { - // if in the process of reading a chunk - if(_chunkSize > 0) { - // if there are not enough bytes to read chunk and its - // trailing CRLF, we must wait for more data to be received - if(_chunkSize + 2 > b.length()) { - break; - } - - // read chunk data, skip CRLF - response.body += b.getBytes(_chunkSize); - b.getBytes(2); - _chunkSize = 0; - } else if(!_chunksFinished) { - // more chunks, read next chunk-size line - line = _readCrlf(b); - if(line !== null) { - // parse chunk-size (ignore any chunk extension) - _chunkSize = parseInt(line.split(';', 1)[0], 16); - _chunksFinished = (_chunkSize === 0); - } - } else { - // chunks finished, read next trailer - line = _readCrlf(b); - while(line !== null) { - if(line.length > 0) { - // parse trailer - _parseHeader(line); - // read next trailer - line = _readCrlf(b); - } else { - // body received - response.bodyReceived = true; - line = null; - } - } - } - } - - return response.bodyReceived; - }; - - /** - * Reads an http response body from a buffer of bytes. - * - * @param b the byte buffer to read from. - * - * @return true if the whole body was read, false if not. - */ - response.readBody = function(b) { - var contentLength = response.getField('Content-Length'); - var transferEncoding = response.getField('Transfer-Encoding'); - if(contentLength !== null) { - contentLength = parseInt(contentLength); - } - - // read specified length - if(contentLength !== null && contentLength >= 0) { - response.body = response.body || ''; - response.body += b.getBytes(contentLength); - response.bodyReceived = (response.body.length === contentLength); - } else if(transferEncoding !== null) { - // read chunked encoding - if(transferEncoding.indexOf('chunked') != -1) { - response.body = response.body || ''; - _readChunkedBody(b); - } else { - var error = new Error('Unknown Transfer-Encoding.'); - error.details = {'transferEncoding': transferEncoding}; - throw error; - } - } else if((contentLength !== null && contentLength < 0) || - (contentLength === null && - response.getField('Content-Type') !== null)) { - // read all data in the buffer - response.body = response.body || ''; - response.body += b.getBytes(); - response.readBodyUntilClose = true; - } else { - // no body - response.body = null; - response.bodyReceived = true; - } - - if(response.bodyReceived) { - response.time = +new Date() - response.time; - } - - if(response.flashApi !== null && - response.bodyReceived && response.body !== null && - response.getField('Content-Encoding') === 'deflate') { - // inflate using flash api - response.body = forge.util.inflate( - response.flashApi, response.body); - } - - return response.bodyReceived; - }; - - /** - * Parses an array of cookies from the 'Set-Cookie' field, if present. - * - * @return the array of cookies. - */ - response.getCookies = function() { - var rval = []; - - // get Set-Cookie field - if('Set-Cookie' in response.fields) { - var field = response.fields['Set-Cookie']; - - // get current local time in seconds - var now = +new Date() / 1000; - - // regex for parsing 'name1=value1; name2=value2; name3' - var regex = /\s*([^=]*)=?([^;]*)(;|$)/g; - - // examples: - // Set-Cookie: cookie1_name=cookie1_value; max-age=0; path=/ - // Set-Cookie: c2=v2; expires=Thu, 21-Aug-2008 23:47:25 GMT; path=/ - for(var i = 0; i < field.length; ++i) { - var fv = field[i]; - var m; - regex.lastIndex = 0; - var first = true; - var cookie = {}; - do { - m = regex.exec(fv); - if(m !== null) { - var name = _trimString(m[1]); - var value = _trimString(m[2]); - - // cookie_name=value - if(first) { - cookie.name = name; - cookie.value = value; - first = false; - } else { - // property_name=value - name = name.toLowerCase(); - switch(name) { - case 'expires': - // replace hyphens w/spaces so date will parse - value = value.replace(/-/g, ' '); - var secs = Date.parse(value) / 1000; - cookie.maxAge = Math.max(0, secs - now); - break; - case 'max-age': - cookie.maxAge = parseInt(value, 10); - break; - case 'secure': - cookie.secure = true; - break; - case 'httponly': - cookie.httpOnly = true; - break; - default: - if(name !== '') { - cookie[name] = value; - } - } - } - } - } while(m !== null && m[0] !== ''); - rval.push(cookie); - } - } - - return rval; - }; - - /** - * Converts an http response into a string that can be sent as an - * HTTP response. Does not include any data. - * - * @return the string representation of the response. - */ - response.toString = function() { - /* Sample response header: - HTTP/1.0 200 OK - Host: www.someurl.com - Connection: close - */ - - // build start line - var rval = - response.version + ' ' + response.code + ' ' + response.message + '\r\n'; - - // add each header - for(var name in response.fields) { - var fields = response.fields[name]; - for(var i = 0; i < fields.length; ++i) { - rval += name + ': ' + fields[i] + '\r\n'; - } - } - // final terminating CRLF - rval += '\r\n'; - - return rval; - }; - - return response; -}; - -/** - * Parses the scheme, host, and port from an http(s) url. - * - * @param str the url string. - * - * @return the parsed url object or null if the url is invalid. - */ -http.parseUrl = forge.util.parseUrl; - -/** - * Returns true if the given url is within the given cookie's domain. - * - * @param url the url to check. - * @param cookie the cookie or cookie domain to check. - */ -http.withinCookieDomain = function(url, cookie) { - var rval = false; - - // cookie may be null, a cookie object, or a domain string - var domain = (cookie === null || typeof cookie === 'string') ? - cookie : cookie.domain; - - // any domain will do - if(domain === null) { - rval = true; - } else if(domain.charAt(0) === '.') { - // ensure domain starts with a '.' - // parse URL as necessary - if(typeof url === 'string') { - url = http.parseUrl(url); - } - - // add '.' to front of URL host to match against domain - var host = '.' + url.host; - - // if the host ends with domain then it falls within it - var idx = host.lastIndexOf(domain); - if(idx !== -1 && (idx + domain.length === host.length)) { - rval = true; - } - } - - return rval; -}; diff --git a/reverse_engineering/node_modules/node-forge/lib/index.all.js b/reverse_engineering/node_modules/node-forge/lib/index.all.js deleted file mode 100644 index 22ba72b..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/index.all.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Node.js module for Forge with extra utils and networking. - * - * @author Dave Longley - * - * Copyright 2011-2016 Digital Bazaar, Inc. - */ -module.exports = require('./forge'); -// require core forge -require('./index'); -// additional utils and networking support -require('./form'); -require('./socket'); -require('./tlssocket'); -require('./http'); -require('./xhr'); diff --git a/reverse_engineering/node_modules/node-forge/lib/index.js b/reverse_engineering/node_modules/node-forge/lib/index.js deleted file mode 100644 index ea8c14c..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/index.js +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Node.js module for Forge. - * - * @author Dave Longley - * - * Copyright 2011-2016 Digital Bazaar, Inc. - */ -module.exports = require('./forge'); -require('./aes'); -require('./aesCipherSuites'); -require('./asn1'); -require('./cipher'); -require('./debug'); -require('./des'); -require('./ed25519'); -require('./hmac'); -require('./kem'); -require('./log'); -require('./md.all'); -require('./mgf1'); -require('./pbkdf2'); -require('./pem'); -require('./pkcs1'); -require('./pkcs12'); -require('./pkcs7'); -require('./pki'); -require('./prime'); -require('./prng'); -require('./pss'); -require('./random'); -require('./rc2'); -require('./ssh'); -require('./task'); -require('./tls'); -require('./util'); diff --git a/reverse_engineering/node_modules/node-forge/lib/jsbn.js b/reverse_engineering/node_modules/node-forge/lib/jsbn.js deleted file mode 100644 index 11f965c..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/jsbn.js +++ /dev/null @@ -1,1264 +0,0 @@ -// Copyright (c) 2005 Tom Wu -// All Rights Reserved. -// See "LICENSE" for details. - -// Basic JavaScript BN library - subset useful for RSA encryption. - -/* -Licensing (LICENSE) -------------------- - -This software is covered under the following copyright: -*/ -/* - * Copyright (c) 2003-2005 Tom Wu - * All Rights Reserved. - * - * 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" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL, - * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER - * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF - * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * In addition, the following condition applies: - * - * All redistributions must retain an intact copy of this copyright notice - * and disclaimer. - */ -/* -Address all questions regarding this license to: - - Tom Wu - tjw@cs.Stanford.EDU -*/ -var forge = require('./forge'); - -module.exports = forge.jsbn = forge.jsbn || {}; - -// Bits per digit -var dbits; - -// JavaScript engine analysis -var canary = 0xdeadbeefcafe; -var j_lm = ((canary&0xffffff)==0xefcafe); - -// (public) Constructor -function BigInteger(a,b,c) { - this.data = []; - if(a != null) - if("number" == typeof a) this.fromNumber(a,b,c); - else if(b == null && "string" != typeof a) this.fromString(a,256); - else this.fromString(a,b); -} -forge.jsbn.BigInteger = BigInteger; - -// return new, unset BigInteger -function nbi() { return new BigInteger(null); } - -// am: Compute w_j += (x*this_i), propagate carries, -// c is initial carry, returns final carry. -// c < 3*dvalue, x < 2*dvalue, this_i < dvalue -// We need to select the fastest one that works in this environment. - -// am1: use a single mult and divide to get the high bits, -// max digit bits should be 26 because -// max internal value = 2*dvalue^2-2*dvalue (< 2^53) -function am1(i,x,w,j,c,n) { - while(--n >= 0) { - var v = x*this.data[i++]+w.data[j]+c; - c = Math.floor(v/0x4000000); - w.data[j++] = v&0x3ffffff; - } - return c; -} -// am2 avoids a big mult-and-extract completely. -// Max digit bits should be <= 30 because we do bitwise ops -// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31) -function am2(i,x,w,j,c,n) { - var xl = x&0x7fff, xh = x>>15; - while(--n >= 0) { - var l = this.data[i]&0x7fff; - var h = this.data[i++]>>15; - var m = xh*l+h*xl; - l = xl*l+((m&0x7fff)<<15)+w.data[j]+(c&0x3fffffff); - c = (l>>>30)+(m>>>15)+xh*h+(c>>>30); - w.data[j++] = l&0x3fffffff; - } - return c; -} -// Alternately, set max digit bits to 28 since some -// browsers slow down when dealing with 32-bit numbers. -function am3(i,x,w,j,c,n) { - var xl = x&0x3fff, xh = x>>14; - while(--n >= 0) { - var l = this.data[i]&0x3fff; - var h = this.data[i++]>>14; - var m = xh*l+h*xl; - l = xl*l+((m&0x3fff)<<14)+w.data[j]+c; - c = (l>>28)+(m>>14)+xh*h; - w.data[j++] = l&0xfffffff; - } - return c; -} - -// node.js (no browser) -if(typeof(navigator) === 'undefined') -{ - BigInteger.prototype.am = am3; - dbits = 28; -} else if(j_lm && (navigator.appName == "Microsoft Internet Explorer")) { - BigInteger.prototype.am = am2; - dbits = 30; -} else if(j_lm && (navigator.appName != "Netscape")) { - BigInteger.prototype.am = am1; - dbits = 26; -} else { // Mozilla/Netscape seems to prefer am3 - BigInteger.prototype.am = am3; - dbits = 28; -} - -BigInteger.prototype.DB = dbits; -BigInteger.prototype.DM = ((1<= 0; --i) r.data[i] = this.data[i]; - r.t = this.t; - r.s = this.s; -} - -// (protected) set from integer value x, -DV <= x < DV -function bnpFromInt(x) { - this.t = 1; - this.s = (x<0)?-1:0; - if(x > 0) this.data[0] = x; - else if(x < -1) this.data[0] = x+this.DV; - else this.t = 0; -} - -// return bigint initialized to value -function nbv(i) { var r = nbi(); r.fromInt(i); return r; } - -// (protected) set from string and radix -function bnpFromString(s,b) { - var k; - if(b == 16) k = 4; - else if(b == 8) k = 3; - else if(b == 256) k = 8; // byte array - else if(b == 2) k = 1; - else if(b == 32) k = 5; - else if(b == 4) k = 2; - else { this.fromRadix(s,b); return; } - this.t = 0; - this.s = 0; - var i = s.length, mi = false, sh = 0; - while(--i >= 0) { - var x = (k==8)?s[i]&0xff:intAt(s,i); - if(x < 0) { - if(s.charAt(i) == "-") mi = true; - continue; - } - mi = false; - if(sh == 0) - this.data[this.t++] = x; - else if(sh+k > this.DB) { - this.data[this.t-1] |= (x&((1<<(this.DB-sh))-1))<>(this.DB-sh)); - } else - this.data[this.t-1] |= x<= this.DB) sh -= this.DB; - } - if(k == 8 && (s[0]&0x80) != 0) { - this.s = -1; - if(sh > 0) this.data[this.t-1] |= ((1<<(this.DB-sh))-1)< 0 && this.data[this.t-1] == c) --this.t; -} - -// (public) return string representation in given radix -function bnToString(b) { - if(this.s < 0) return "-"+this.negate().toString(b); - var k; - if(b == 16) k = 4; - else if(b == 8) k = 3; - else if(b == 2) k = 1; - else if(b == 32) k = 5; - else if(b == 4) k = 2; - else return this.toRadix(b); - var km = (1< 0) { - if(p < this.DB && (d = this.data[i]>>p) > 0) { m = true; r = int2char(d); } - while(i >= 0) { - if(p < k) { - d = (this.data[i]&((1<>(p+=this.DB-k); - } else { - d = (this.data[i]>>(p-=k))&km; - if(p <= 0) { p += this.DB; --i; } - } - if(d > 0) m = true; - if(m) r += int2char(d); - } - } - return m?r:"0"; -} - -// (public) -this -function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; } - -// (public) |this| -function bnAbs() { return (this.s<0)?this.negate():this; } - -// (public) return + if this > a, - if this < a, 0 if equal -function bnCompareTo(a) { - var r = this.s-a.s; - if(r != 0) return r; - var i = this.t; - r = i-a.t; - if(r != 0) return (this.s<0)?-r:r; - while(--i >= 0) if((r=this.data[i]-a.data[i]) != 0) return r; - return 0; -} - -// returns bit length of the integer x -function nbits(x) { - var r = 1, t; - if((t=x>>>16) != 0) { x = t; r += 16; } - if((t=x>>8) != 0) { x = t; r += 8; } - if((t=x>>4) != 0) { x = t; r += 4; } - if((t=x>>2) != 0) { x = t; r += 2; } - if((t=x>>1) != 0) { x = t; r += 1; } - return r; -} - -// (public) return the number of bits in "this" -function bnBitLength() { - if(this.t <= 0) return 0; - return this.DB*(this.t-1)+nbits(this.data[this.t-1]^(this.s&this.DM)); -} - -// (protected) r = this << n*DB -function bnpDLShiftTo(n,r) { - var i; - for(i = this.t-1; i >= 0; --i) r.data[i+n] = this.data[i]; - for(i = n-1; i >= 0; --i) r.data[i] = 0; - r.t = this.t+n; - r.s = this.s; -} - -// (protected) r = this >> n*DB -function bnpDRShiftTo(n,r) { - for(var i = n; i < this.t; ++i) r.data[i-n] = this.data[i]; - r.t = Math.max(this.t-n,0); - r.s = this.s; -} - -// (protected) r = this << n -function bnpLShiftTo(n,r) { - var bs = n%this.DB; - var cbs = this.DB-bs; - var bm = (1<= 0; --i) { - r.data[i+ds+1] = (this.data[i]>>cbs)|c; - c = (this.data[i]&bm)<= 0; --i) r.data[i] = 0; - r.data[ds] = c; - r.t = this.t+ds+1; - r.s = this.s; - r.clamp(); -} - -// (protected) r = this >> n -function bnpRShiftTo(n,r) { - r.s = this.s; - var ds = Math.floor(n/this.DB); - if(ds >= this.t) { r.t = 0; return; } - var bs = n%this.DB; - var cbs = this.DB-bs; - var bm = (1<>bs; - for(var i = ds+1; i < this.t; ++i) { - r.data[i-ds-1] |= (this.data[i]&bm)<>bs; - } - if(bs > 0) r.data[this.t-ds-1] |= (this.s&bm)<>= this.DB; - } - if(a.t < this.t) { - c -= a.s; - while(i < this.t) { - c += this.data[i]; - r.data[i++] = c&this.DM; - c >>= this.DB; - } - c += this.s; - } else { - c += this.s; - while(i < a.t) { - c -= a.data[i]; - r.data[i++] = c&this.DM; - c >>= this.DB; - } - c -= a.s; - } - r.s = (c<0)?-1:0; - if(c < -1) r.data[i++] = this.DV+c; - else if(c > 0) r.data[i++] = c; - r.t = i; - r.clamp(); -} - -// (protected) r = this * a, r != this,a (HAC 14.12) -// "this" should be the larger one if appropriate. -function bnpMultiplyTo(a,r) { - var x = this.abs(), y = a.abs(); - var i = x.t; - r.t = i+y.t; - while(--i >= 0) r.data[i] = 0; - for(i = 0; i < y.t; ++i) r.data[i+x.t] = x.am(0,y.data[i],r,i,0,x.t); - r.s = 0; - r.clamp(); - if(this.s != a.s) BigInteger.ZERO.subTo(r,r); -} - -// (protected) r = this^2, r != this (HAC 14.16) -function bnpSquareTo(r) { - var x = this.abs(); - var i = r.t = 2*x.t; - while(--i >= 0) r.data[i] = 0; - for(i = 0; i < x.t-1; ++i) { - var c = x.am(i,x.data[i],r,2*i,0,1); - if((r.data[i+x.t]+=x.am(i+1,2*x.data[i],r,2*i+1,c,x.t-i-1)) >= x.DV) { - r.data[i+x.t] -= x.DV; - r.data[i+x.t+1] = 1; - } - } - if(r.t > 0) r.data[r.t-1] += x.am(i,x.data[i],r,2*i,0,1); - r.s = 0; - r.clamp(); -} - -// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20) -// r != q, this != m. q or r may be null. -function bnpDivRemTo(m,q,r) { - var pm = m.abs(); - if(pm.t <= 0) return; - var pt = this.abs(); - if(pt.t < pm.t) { - if(q != null) q.fromInt(0); - if(r != null) this.copyTo(r); - return; - } - if(r == null) r = nbi(); - var y = nbi(), ts = this.s, ms = m.s; - var nsh = this.DB-nbits(pm.data[pm.t-1]); // normalize modulus - if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); } else { pm.copyTo(y); pt.copyTo(r); } - var ys = y.t; - var y0 = y.data[ys-1]; - if(y0 == 0) return; - var yt = y0*(1<1)?y.data[ys-2]>>this.F2:0); - var d1 = this.FV/yt, d2 = (1<= 0) { - r.data[r.t++] = 1; - r.subTo(t,r); - } - BigInteger.ONE.dlShiftTo(ys,t); - t.subTo(y,y); // "negative" y so we can replace sub with am later - while(y.t < ys) y.data[y.t++] = 0; - while(--j >= 0) { - // Estimate quotient digit - var qd = (r.data[--i]==y0)?this.DM:Math.floor(r.data[i]*d1+(r.data[i-1]+e)*d2); - if((r.data[i]+=y.am(0,qd,r,j,0,ys)) < qd) { // Try it out - y.dlShiftTo(j,t); - r.subTo(t,r); - while(r.data[i] < --qd) r.subTo(t,r); - } - } - if(q != null) { - r.drShiftTo(ys,q); - if(ts != ms) BigInteger.ZERO.subTo(q,q); - } - r.t = ys; - r.clamp(); - if(nsh > 0) r.rShiftTo(nsh,r); // Denormalize remainder - if(ts < 0) BigInteger.ZERO.subTo(r,r); -} - -// (public) this mod a -function bnMod(a) { - var r = nbi(); - this.abs().divRemTo(a,null,r); - if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r); - return r; -} - -// Modular reduction using "classic" algorithm -function Classic(m) { this.m = m; } -function cConvert(x) { - if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m); - else return x; -} -function cRevert(x) { return x; } -function cReduce(x) { x.divRemTo(this.m,null,x); } -function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } -function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); } - -Classic.prototype.convert = cConvert; -Classic.prototype.revert = cRevert; -Classic.prototype.reduce = cReduce; -Classic.prototype.mulTo = cMulTo; -Classic.prototype.sqrTo = cSqrTo; - -// (protected) return "-1/this % 2^DB"; useful for Mont. reduction -// justification: -// xy == 1 (mod m) -// xy = 1+km -// xy(2-xy) = (1+km)(1-km) -// x[y(2-xy)] = 1-k^2m^2 -// x[y(2-xy)] == 1 (mod m^2) -// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2 -// should reduce x and y(2-xy) by m^2 at each step to keep size bounded. -// JS multiply "overflows" differently from C/C++, so care is needed here. -function bnpInvDigit() { - if(this.t < 1) return 0; - var x = this.data[0]; - if((x&1) == 0) return 0; - var y = x&3; // y == 1/x mod 2^2 - y = (y*(2-(x&0xf)*y))&0xf; // y == 1/x mod 2^4 - y = (y*(2-(x&0xff)*y))&0xff; // y == 1/x mod 2^8 - y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff; // y == 1/x mod 2^16 - // last step - calculate inverse mod DV directly; - // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints - y = (y*(2-x*y%this.DV))%this.DV; // y == 1/x mod 2^dbits - // we really want the negative inverse, and -DV < y < DV - return (y>0)?this.DV-y:-y; -} - -// Montgomery reduction -function Montgomery(m) { - this.m = m; - this.mp = m.invDigit(); - this.mpl = this.mp&0x7fff; - this.mph = this.mp>>15; - this.um = (1<<(m.DB-15))-1; - this.mt2 = 2*m.t; -} - -// xR mod m -function montConvert(x) { - var r = nbi(); - x.abs().dlShiftTo(this.m.t,r); - r.divRemTo(this.m,null,r); - if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r); - return r; -} - -// x/R mod m -function montRevert(x) { - var r = nbi(); - x.copyTo(r); - this.reduce(r); - return r; -} - -// x = x/R mod m (HAC 14.32) -function montReduce(x) { - while(x.t <= this.mt2) // pad x so am has enough room later - x.data[x.t++] = 0; - for(var i = 0; i < this.m.t; ++i) { - // faster way of calculating u0 = x.data[i]*mp mod DV - var j = x.data[i]&0x7fff; - var u0 = (j*this.mpl+(((j*this.mph+(x.data[i]>>15)*this.mpl)&this.um)<<15))&x.DM; - // use am to combine the multiply-shift-add into one call - j = i+this.m.t; - x.data[j] += this.m.am(0,u0,x,i,0,this.m.t); - // propagate carry - while(x.data[j] >= x.DV) { x.data[j] -= x.DV; x.data[++j]++; } - } - x.clamp(); - x.drShiftTo(this.m.t,x); - if(x.compareTo(this.m) >= 0) x.subTo(this.m,x); -} - -// r = "x^2/R mod m"; x != r -function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); } - -// r = "xy/R mod m"; x,y != r -function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } - -Montgomery.prototype.convert = montConvert; -Montgomery.prototype.revert = montRevert; -Montgomery.prototype.reduce = montReduce; -Montgomery.prototype.mulTo = montMulTo; -Montgomery.prototype.sqrTo = montSqrTo; - -// (protected) true iff this is even -function bnpIsEven() { return ((this.t>0)?(this.data[0]&1):this.s) == 0; } - -// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79) -function bnpExp(e,z) { - if(e > 0xffffffff || e < 1) return BigInteger.ONE; - var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1; - g.copyTo(r); - while(--i >= 0) { - z.sqrTo(r,r2); - if((e&(1< 0) z.mulTo(r2,g,r); - else { var t = r; r = r2; r2 = t; } - } - return z.revert(r); -} - -// (public) this^e % m, 0 <= e < 2^32 -function bnModPowInt(e,m) { - var z; - if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m); - return this.exp(e,z); -} - -// protected -BigInteger.prototype.copyTo = bnpCopyTo; -BigInteger.prototype.fromInt = bnpFromInt; -BigInteger.prototype.fromString = bnpFromString; -BigInteger.prototype.clamp = bnpClamp; -BigInteger.prototype.dlShiftTo = bnpDLShiftTo; -BigInteger.prototype.drShiftTo = bnpDRShiftTo; -BigInteger.prototype.lShiftTo = bnpLShiftTo; -BigInteger.prototype.rShiftTo = bnpRShiftTo; -BigInteger.prototype.subTo = bnpSubTo; -BigInteger.prototype.multiplyTo = bnpMultiplyTo; -BigInteger.prototype.squareTo = bnpSquareTo; -BigInteger.prototype.divRemTo = bnpDivRemTo; -BigInteger.prototype.invDigit = bnpInvDigit; -BigInteger.prototype.isEven = bnpIsEven; -BigInteger.prototype.exp = bnpExp; - -// public -BigInteger.prototype.toString = bnToString; -BigInteger.prototype.negate = bnNegate; -BigInteger.prototype.abs = bnAbs; -BigInteger.prototype.compareTo = bnCompareTo; -BigInteger.prototype.bitLength = bnBitLength; -BigInteger.prototype.mod = bnMod; -BigInteger.prototype.modPowInt = bnModPowInt; - -// "constants" -BigInteger.ZERO = nbv(0); -BigInteger.ONE = nbv(1); - -// jsbn2 lib - -//Copyright (c) 2005-2009 Tom Wu -//All Rights Reserved. -//See "LICENSE" for details (See jsbn.js for LICENSE). - -//Extended JavaScript BN functions, required for RSA private ops. - -//Version 1.1: new BigInteger("0", 10) returns "proper" zero - -//(public) -function bnClone() { var r = nbi(); this.copyTo(r); return r; } - -//(public) return value as integer -function bnIntValue() { -if(this.s < 0) { - if(this.t == 1) return this.data[0]-this.DV; - else if(this.t == 0) return -1; -} else if(this.t == 1) return this.data[0]; -else if(this.t == 0) return 0; -// assumes 16 < DB < 32 -return ((this.data[1]&((1<<(32-this.DB))-1))<>24; } - -//(public) return value as short (assumes DB>=16) -function bnShortValue() { return (this.t==0)?this.s:(this.data[0]<<16)>>16; } - -//(protected) return x s.t. r^x < DV -function bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r)); } - -//(public) 0 if this == 0, 1 if this > 0 -function bnSigNum() { -if(this.s < 0) return -1; -else if(this.t <= 0 || (this.t == 1 && this.data[0] <= 0)) return 0; -else return 1; -} - -//(protected) convert to radix string -function bnpToRadix(b) { -if(b == null) b = 10; -if(this.signum() == 0 || b < 2 || b > 36) return "0"; -var cs = this.chunkSize(b); -var a = Math.pow(b,cs); -var d = nbv(a), y = nbi(), z = nbi(), r = ""; -this.divRemTo(d,y,z); -while(y.signum() > 0) { - r = (a+z.intValue()).toString(b).substr(1) + r; - y.divRemTo(d,y,z); -} -return z.intValue().toString(b) + r; -} - -//(protected) convert from radix string -function bnpFromRadix(s,b) { -this.fromInt(0); -if(b == null) b = 10; -var cs = this.chunkSize(b); -var d = Math.pow(b,cs), mi = false, j = 0, w = 0; -for(var i = 0; i < s.length; ++i) { - var x = intAt(s,i); - if(x < 0) { - if(s.charAt(i) == "-" && this.signum() == 0) mi = true; - continue; - } - w = b*w+x; - if(++j >= cs) { - this.dMultiply(d); - this.dAddOffset(w,0); - j = 0; - w = 0; - } -} -if(j > 0) { - this.dMultiply(Math.pow(b,j)); - this.dAddOffset(w,0); -} -if(mi) BigInteger.ZERO.subTo(this,this); -} - -//(protected) alternate constructor -function bnpFromNumber(a,b,c) { -if("number" == typeof b) { - // new BigInteger(int,int,RNG) - if(a < 2) this.fromInt(1); - else { - this.fromNumber(a,c); - if(!this.testBit(a-1)) // force MSB set - this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this); - if(this.isEven()) this.dAddOffset(1,0); // force odd - while(!this.isProbablePrime(b)) { - this.dAddOffset(2,0); - if(this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a-1),this); - } - } -} else { - // new BigInteger(int,RNG) - var x = new Array(), t = a&7; - x.length = (a>>3)+1; - b.nextBytes(x); - if(t > 0) x[0] &= ((1< 0) { - if(p < this.DB && (d = this.data[i]>>p) != (this.s&this.DM)>>p) - r[k++] = d|(this.s<<(this.DB-p)); - while(i >= 0) { - if(p < 8) { - d = (this.data[i]&((1<>(p+=this.DB-8); - } else { - d = (this.data[i]>>(p-=8))&0xff; - if(p <= 0) { p += this.DB; --i; } - } - if((d&0x80) != 0) d |= -256; - if(k == 0 && (this.s&0x80) != (d&0x80)) ++k; - if(k > 0 || d != this.s) r[k++] = d; - } -} -return r; -} - -function bnEquals(a) { return(this.compareTo(a)==0); } -function bnMin(a) { return(this.compareTo(a)<0)?this:a; } -function bnMax(a) { return(this.compareTo(a)>0)?this:a; } - -//(protected) r = this op a (bitwise) -function bnpBitwiseTo(a,op,r) { -var i, f, m = Math.min(a.t,this.t); -for(i = 0; i < m; ++i) r.data[i] = op(this.data[i],a.data[i]); -if(a.t < this.t) { - f = a.s&this.DM; - for(i = m; i < this.t; ++i) r.data[i] = op(this.data[i],f); - r.t = this.t; -} else { - f = this.s&this.DM; - for(i = m; i < a.t; ++i) r.data[i] = op(f,a.data[i]); - r.t = a.t; -} -r.s = op(this.s,a.s); -r.clamp(); -} - -//(public) this & a -function op_and(x,y) { return x&y; } -function bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; } - -//(public) this | a -function op_or(x,y) { return x|y; } -function bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; } - -//(public) this ^ a -function op_xor(x,y) { return x^y; } -function bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; } - -//(public) this & ~a -function op_andnot(x,y) { return x&~y; } -function bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; } - -//(public) ~this -function bnNot() { -var r = nbi(); -for(var i = 0; i < this.t; ++i) r.data[i] = this.DM&~this.data[i]; -r.t = this.t; -r.s = ~this.s; -return r; -} - -//(public) this << n -function bnShiftLeft(n) { -var r = nbi(); -if(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r); -return r; -} - -//(public) this >> n -function bnShiftRight(n) { -var r = nbi(); -if(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r); -return r; -} - -//return index of lowest 1-bit in x, x < 2^31 -function lbit(x) { -if(x == 0) return -1; -var r = 0; -if((x&0xffff) == 0) { x >>= 16; r += 16; } -if((x&0xff) == 0) { x >>= 8; r += 8; } -if((x&0xf) == 0) { x >>= 4; r += 4; } -if((x&3) == 0) { x >>= 2; r += 2; } -if((x&1) == 0) ++r; -return r; -} - -//(public) returns index of lowest 1-bit (or -1 if none) -function bnGetLowestSetBit() { -for(var i = 0; i < this.t; ++i) - if(this.data[i] != 0) return i*this.DB+lbit(this.data[i]); -if(this.s < 0) return this.t*this.DB; -return -1; -} - -//return number of 1 bits in x -function cbit(x) { -var r = 0; -while(x != 0) { x &= x-1; ++r; } -return r; -} - -//(public) return number of set bits -function bnBitCount() { -var r = 0, x = this.s&this.DM; -for(var i = 0; i < this.t; ++i) r += cbit(this.data[i]^x); -return r; -} - -//(public) true iff nth bit is set -function bnTestBit(n) { -var j = Math.floor(n/this.DB); -if(j >= this.t) return(this.s!=0); -return((this.data[j]&(1<<(n%this.DB)))!=0); -} - -//(protected) this op (1<>= this.DB; -} -if(a.t < this.t) { - c += a.s; - while(i < this.t) { - c += this.data[i]; - r.data[i++] = c&this.DM; - c >>= this.DB; - } - c += this.s; -} else { - c += this.s; - while(i < a.t) { - c += a.data[i]; - r.data[i++] = c&this.DM; - c >>= this.DB; - } - c += a.s; -} -r.s = (c<0)?-1:0; -if(c > 0) r.data[i++] = c; -else if(c < -1) r.data[i++] = this.DV+c; -r.t = i; -r.clamp(); -} - -//(public) this + a -function bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; } - -//(public) this - a -function bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; } - -//(public) this * a -function bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; } - -//(public) this / a -function bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; } - -//(public) this % a -function bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; } - -//(public) [this/a,this%a] -function bnDivideAndRemainder(a) { -var q = nbi(), r = nbi(); -this.divRemTo(a,q,r); -return new Array(q,r); -} - -//(protected) this *= n, this >= 0, 1 < n < DV -function bnpDMultiply(n) { -this.data[this.t] = this.am(0,n-1,this,0,0,this.t); -++this.t; -this.clamp(); -} - -//(protected) this += n << w words, this >= 0 -function bnpDAddOffset(n,w) { -if(n == 0) return; -while(this.t <= w) this.data[this.t++] = 0; -this.data[w] += n; -while(this.data[w] >= this.DV) { - this.data[w] -= this.DV; - if(++w >= this.t) this.data[this.t++] = 0; - ++this.data[w]; -} -} - -//A "null" reducer -function NullExp() {} -function nNop(x) { return x; } -function nMulTo(x,y,r) { x.multiplyTo(y,r); } -function nSqrTo(x,r) { x.squareTo(r); } - -NullExp.prototype.convert = nNop; -NullExp.prototype.revert = nNop; -NullExp.prototype.mulTo = nMulTo; -NullExp.prototype.sqrTo = nSqrTo; - -//(public) this^e -function bnPow(e) { return this.exp(e,new NullExp()); } - -//(protected) r = lower n words of "this * a", a.t <= n -//"this" should be the larger one if appropriate. -function bnpMultiplyLowerTo(a,n,r) { -var i = Math.min(this.t+a.t,n); -r.s = 0; // assumes a,this >= 0 -r.t = i; -while(i > 0) r.data[--i] = 0; -var j; -for(j = r.t-this.t; i < j; ++i) r.data[i+this.t] = this.am(0,a.data[i],r,i,0,this.t); -for(j = Math.min(a.t,n); i < j; ++i) this.am(0,a.data[i],r,i,0,n-i); -r.clamp(); -} - -//(protected) r = "this * a" without lower n words, n > 0 -//"this" should be the larger one if appropriate. -function bnpMultiplyUpperTo(a,n,r) { ---n; -var i = r.t = this.t+a.t-n; -r.s = 0; // assumes a,this >= 0 -while(--i >= 0) r.data[i] = 0; -for(i = Math.max(n-this.t,0); i < a.t; ++i) - r.data[this.t+i-n] = this.am(n-i,a.data[i],r,0,0,this.t+i-n); -r.clamp(); -r.drShiftTo(1,r); -} - -//Barrett modular reduction -function Barrett(m) { -// setup Barrett -this.r2 = nbi(); -this.q3 = nbi(); -BigInteger.ONE.dlShiftTo(2*m.t,this.r2); -this.mu = this.r2.divide(m); -this.m = m; -} - -function barrettConvert(x) { -if(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m); -else if(x.compareTo(this.m) < 0) return x; -else { var r = nbi(); x.copyTo(r); this.reduce(r); return r; } -} - -function barrettRevert(x) { return x; } - -//x = x mod m (HAC 14.42) -function barrettReduce(x) { -x.drShiftTo(this.m.t-1,this.r2); -if(x.t > this.m.t+1) { x.t = this.m.t+1; x.clamp(); } -this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3); -this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2); -while(x.compareTo(this.r2) < 0) x.dAddOffset(1,this.m.t+1); -x.subTo(this.r2,x); -while(x.compareTo(this.m) >= 0) x.subTo(this.m,x); -} - -//r = x^2 mod m; x != r -function barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); } - -//r = x*y mod m; x,y != r -function barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } - -Barrett.prototype.convert = barrettConvert; -Barrett.prototype.revert = barrettRevert; -Barrett.prototype.reduce = barrettReduce; -Barrett.prototype.mulTo = barrettMulTo; -Barrett.prototype.sqrTo = barrettSqrTo; - -//(public) this^e % m (HAC 14.85) -function bnModPow(e,m) { -var i = e.bitLength(), k, r = nbv(1), z; -if(i <= 0) return r; -else if(i < 18) k = 1; -else if(i < 48) k = 3; -else if(i < 144) k = 4; -else if(i < 768) k = 5; -else k = 6; -if(i < 8) - z = new Classic(m); -else if(m.isEven()) - z = new Barrett(m); -else - z = new Montgomery(m); - -// precomputation -var g = new Array(), n = 3, k1 = k-1, km = (1< 1) { - var g2 = nbi(); - z.sqrTo(g[1],g2); - while(n <= km) { - g[n] = nbi(); - z.mulTo(g2,g[n-2],g[n]); - n += 2; - } -} - -var j = e.t-1, w, is1 = true, r2 = nbi(), t; -i = nbits(e.data[j])-1; -while(j >= 0) { - if(i >= k1) w = (e.data[j]>>(i-k1))&km; - else { - w = (e.data[j]&((1<<(i+1))-1))<<(k1-i); - if(j > 0) w |= e.data[j-1]>>(this.DB+i-k1); - } - - n = k; - while((w&1) == 0) { w >>= 1; --n; } - if((i -= n) < 0) { i += this.DB; --j; } - if(is1) { // ret == 1, don't bother squaring or multiplying it - g[w].copyTo(r); - is1 = false; - } else { - while(n > 1) { z.sqrTo(r,r2); z.sqrTo(r2,r); n -= 2; } - if(n > 0) z.sqrTo(r,r2); else { t = r; r = r2; r2 = t; } - z.mulTo(r2,g[w],r); - } - - while(j >= 0 && (e.data[j]&(1< 0) { - x.rShiftTo(g,x); - y.rShiftTo(g,y); -} -while(x.signum() > 0) { - if((i = x.getLowestSetBit()) > 0) x.rShiftTo(i,x); - if((i = y.getLowestSetBit()) > 0) y.rShiftTo(i,y); - if(x.compareTo(y) >= 0) { - x.subTo(y,x); - x.rShiftTo(1,x); - } else { - y.subTo(x,y); - y.rShiftTo(1,y); - } -} -if(g > 0) y.lShiftTo(g,y); -return y; -} - -//(protected) this % n, n < 2^26 -function bnpModInt(n) { -if(n <= 0) return 0; -var d = this.DV%n, r = (this.s<0)?n-1:0; -if(this.t > 0) - if(d == 0) r = this.data[0]%n; - else for(var i = this.t-1; i >= 0; --i) r = (d*r+this.data[i])%n; -return r; -} - -//(public) 1/this % m (HAC 14.61) -function bnModInverse(m) { -var ac = m.isEven(); -if((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO; -var u = m.clone(), v = this.clone(); -var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1); -while(u.signum() != 0) { - while(u.isEven()) { - u.rShiftTo(1,u); - if(ac) { - if(!a.isEven() || !b.isEven()) { a.addTo(this,a); b.subTo(m,b); } - a.rShiftTo(1,a); - } else if(!b.isEven()) b.subTo(m,b); - b.rShiftTo(1,b); - } - while(v.isEven()) { - v.rShiftTo(1,v); - if(ac) { - if(!c.isEven() || !d.isEven()) { c.addTo(this,c); d.subTo(m,d); } - c.rShiftTo(1,c); - } else if(!d.isEven()) d.subTo(m,d); - d.rShiftTo(1,d); - } - if(u.compareTo(v) >= 0) { - u.subTo(v,u); - if(ac) a.subTo(c,a); - b.subTo(d,b); - } else { - v.subTo(u,v); - if(ac) c.subTo(a,c); - d.subTo(b,d); - } -} -if(v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO; -if(d.compareTo(m) >= 0) return d.subtract(m); -if(d.signum() < 0) d.addTo(m,d); else return d; -if(d.signum() < 0) return d.add(m); else return d; -} - -var lowprimes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509]; -var lplim = (1<<26)/lowprimes[lowprimes.length-1]; - -//(public) test primality with certainty >= 1-.5^t -function bnIsProbablePrime(t) { -var i, x = this.abs(); -if(x.t == 1 && x.data[0] <= lowprimes[lowprimes.length-1]) { - for(i = 0; i < lowprimes.length; ++i) - if(x.data[0] == lowprimes[i]) return true; - return false; -} -if(x.isEven()) return false; -i = 1; -while(i < lowprimes.length) { - var m = lowprimes[i], j = i+1; - while(j < lowprimes.length && m < lplim) m *= lowprimes[j++]; - m = x.modInt(m); - while(i < j) if(m%lowprimes[i++] == 0) return false; -} -return x.millerRabin(t); -} - -//(protected) true if probably prime (HAC 4.24, Miller-Rabin) -function bnpMillerRabin(t) { -var n1 = this.subtract(BigInteger.ONE); -var k = n1.getLowestSetBit(); -if(k <= 0) return false; -var r = n1.shiftRight(k); -var prng = bnGetPrng(); -var a; -for(var i = 0; i < t; ++i) { - // select witness 'a' at random from between 1 and n1 - do { - a = new BigInteger(this.bitLength(), prng); - } - while(a.compareTo(BigInteger.ONE) <= 0 || a.compareTo(n1) >= 0); - var y = a.modPow(r,this); - if(y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) { - var j = 1; - while(j++ < k && y.compareTo(n1) != 0) { - y = y.modPowInt(2,this); - if(y.compareTo(BigInteger.ONE) == 0) return false; - } - if(y.compareTo(n1) != 0) return false; - } -} -return true; -} - -// get pseudo random number generator -function bnGetPrng() { - // create prng with api that matches BigInteger secure random - return { - // x is an array to fill with bytes - nextBytes: function(x) { - for(var i = 0; i < x.length; ++i) { - x[i] = Math.floor(Math.random() * 0x0100); - } - } - }; -} - -//protected -BigInteger.prototype.chunkSize = bnpChunkSize; -BigInteger.prototype.toRadix = bnpToRadix; -BigInteger.prototype.fromRadix = bnpFromRadix; -BigInteger.prototype.fromNumber = bnpFromNumber; -BigInteger.prototype.bitwiseTo = bnpBitwiseTo; -BigInteger.prototype.changeBit = bnpChangeBit; -BigInteger.prototype.addTo = bnpAddTo; -BigInteger.prototype.dMultiply = bnpDMultiply; -BigInteger.prototype.dAddOffset = bnpDAddOffset; -BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo; -BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo; -BigInteger.prototype.modInt = bnpModInt; -BigInteger.prototype.millerRabin = bnpMillerRabin; - -//public -BigInteger.prototype.clone = bnClone; -BigInteger.prototype.intValue = bnIntValue; -BigInteger.prototype.byteValue = bnByteValue; -BigInteger.prototype.shortValue = bnShortValue; -BigInteger.prototype.signum = bnSigNum; -BigInteger.prototype.toByteArray = bnToByteArray; -BigInteger.prototype.equals = bnEquals; -BigInteger.prototype.min = bnMin; -BigInteger.prototype.max = bnMax; -BigInteger.prototype.and = bnAnd; -BigInteger.prototype.or = bnOr; -BigInteger.prototype.xor = bnXor; -BigInteger.prototype.andNot = bnAndNot; -BigInteger.prototype.not = bnNot; -BigInteger.prototype.shiftLeft = bnShiftLeft; -BigInteger.prototype.shiftRight = bnShiftRight; -BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit; -BigInteger.prototype.bitCount = bnBitCount; -BigInteger.prototype.testBit = bnTestBit; -BigInteger.prototype.setBit = bnSetBit; -BigInteger.prototype.clearBit = bnClearBit; -BigInteger.prototype.flipBit = bnFlipBit; -BigInteger.prototype.add = bnAdd; -BigInteger.prototype.subtract = bnSubtract; -BigInteger.prototype.multiply = bnMultiply; -BigInteger.prototype.divide = bnDivide; -BigInteger.prototype.remainder = bnRemainder; -BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder; -BigInteger.prototype.modPow = bnModPow; -BigInteger.prototype.modInverse = bnModInverse; -BigInteger.prototype.pow = bnPow; -BigInteger.prototype.gcd = bnGCD; -BigInteger.prototype.isProbablePrime = bnIsProbablePrime; - -//BigInteger interfaces not implemented in jsbn: - -//BigInteger(int signum, byte[] magnitude) -//double doubleValue() -//float floatValue() -//int hashCode() -//long longValue() -//static BigInteger valueOf(long val) diff --git a/reverse_engineering/node_modules/node-forge/lib/kem.js b/reverse_engineering/node_modules/node-forge/lib/kem.js deleted file mode 100644 index 1967016..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/kem.js +++ /dev/null @@ -1,168 +0,0 @@ -/** - * Javascript implementation of RSA-KEM. - * - * @author Lautaro Cozzani Rodriguez - * @author Dave Longley - * - * Copyright (c) 2014 Lautaro Cozzani - * Copyright (c) 2014 Digital Bazaar, Inc. - */ -var forge = require('./forge'); -require('./util'); -require('./random'); -require('./jsbn'); - -module.exports = forge.kem = forge.kem || {}; - -var BigInteger = forge.jsbn.BigInteger; - -/** - * The API for the RSA Key Encapsulation Mechanism (RSA-KEM) from ISO 18033-2. - */ -forge.kem.rsa = {}; - -/** - * Creates an RSA KEM API object for generating a secret asymmetric key. - * - * The symmetric key may be generated via a call to 'encrypt', which will - * produce a ciphertext to be transmitted to the recipient and a key to be - * kept secret. The ciphertext is a parameter to be passed to 'decrypt' which - * will produce the same secret key for the recipient to use to decrypt a - * message that was encrypted with the secret key. - * - * @param kdf the KDF API to use (eg: new forge.kem.kdf1()). - * @param options the options to use. - * [prng] a custom crypto-secure pseudo-random number generator to use, - * that must define "getBytesSync". - */ -forge.kem.rsa.create = function(kdf, options) { - options = options || {}; - var prng = options.prng || forge.random; - - var kem = {}; - - /** - * Generates a secret key and its encapsulation. - * - * @param publicKey the RSA public key to encrypt with. - * @param keyLength the length, in bytes, of the secret key to generate. - * - * @return an object with: - * encapsulation: the ciphertext for generating the secret key, as a - * binary-encoded string of bytes. - * key: the secret key to use for encrypting a message. - */ - kem.encrypt = function(publicKey, keyLength) { - // generate a random r where 1 < r < n - var byteLength = Math.ceil(publicKey.n.bitLength() / 8); - var r; - do { - r = new BigInteger( - forge.util.bytesToHex(prng.getBytesSync(byteLength)), - 16).mod(publicKey.n); - } while(r.compareTo(BigInteger.ONE) <= 0); - - // prepend r with zeros - r = forge.util.hexToBytes(r.toString(16)); - var zeros = byteLength - r.length; - if(zeros > 0) { - r = forge.util.fillString(String.fromCharCode(0), zeros) + r; - } - - // encrypt the random - var encapsulation = publicKey.encrypt(r, 'NONE'); - - // generate the secret key - var key = kdf.generate(r, keyLength); - - return {encapsulation: encapsulation, key: key}; - }; - - /** - * Decrypts an encapsulated secret key. - * - * @param privateKey the RSA private key to decrypt with. - * @param encapsulation the ciphertext for generating the secret key, as - * a binary-encoded string of bytes. - * @param keyLength the length, in bytes, of the secret key to generate. - * - * @return the secret key as a binary-encoded string of bytes. - */ - kem.decrypt = function(privateKey, encapsulation, keyLength) { - // decrypt the encapsulation and generate the secret key - var r = privateKey.decrypt(encapsulation, 'NONE'); - return kdf.generate(r, keyLength); - }; - - return kem; -}; - -// TODO: add forge.kem.kdf.create('KDF1', {md: ..., ...}) API? - -/** - * Creates a key derivation API object that implements KDF1 per ISO 18033-2. - * - * @param md the hash API to use. - * @param [digestLength] an optional digest length that must be positive and - * less than or equal to md.digestLength. - * - * @return a KDF1 API object. - */ -forge.kem.kdf1 = function(md, digestLength) { - _createKDF(this, md, 0, digestLength || md.digestLength); -}; - -/** - * Creates a key derivation API object that implements KDF2 per ISO 18033-2. - * - * @param md the hash API to use. - * @param [digestLength] an optional digest length that must be positive and - * less than or equal to md.digestLength. - * - * @return a KDF2 API object. - */ -forge.kem.kdf2 = function(md, digestLength) { - _createKDF(this, md, 1, digestLength || md.digestLength); -}; - -/** - * Creates a KDF1 or KDF2 API object. - * - * @param md the hash API to use. - * @param counterStart the starting index for the counter. - * @param digestLength the digest length to use. - * - * @return the KDF API object. - */ -function _createKDF(kdf, md, counterStart, digestLength) { - /** - * Generate a key of the specified length. - * - * @param x the binary-encoded byte string to generate a key from. - * @param length the number of bytes to generate (the size of the key). - * - * @return the key as a binary-encoded string. - */ - kdf.generate = function(x, length) { - var key = new forge.util.ByteBuffer(); - - // run counter from counterStart to ceil(length / Hash.len) - var k = Math.ceil(length / digestLength) + counterStart; - - var c = new forge.util.ByteBuffer(); - for(var i = counterStart; i < k; ++i) { - // I2OSP(i, 4): convert counter to an octet string of 4 octets - c.putInt32(i); - - // digest 'x' and the counter and add the result to the key - md.start(); - md.update(x + c.getBytes()); - var hash = md.digest(); - key.putBytes(hash.getBytes(digestLength)); - } - - // truncate to the correct key length - key.truncate(key.length() - length); - return key.getBytes(); - }; -} diff --git a/reverse_engineering/node_modules/node-forge/lib/log.js b/reverse_engineering/node_modules/node-forge/lib/log.js deleted file mode 100644 index 8d36f4a..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/log.js +++ /dev/null @@ -1,317 +0,0 @@ -/** - * Cross-browser support for logging in a web application. - * - * @author David I. Lehn - * - * Copyright (c) 2008-2013 Digital Bazaar, Inc. - */ -var forge = require('./forge'); -require('./util'); - -/* LOG API */ -module.exports = forge.log = forge.log || {}; - -/** - * Application logging system. - * - * Each logger level available as it's own function of the form: - * forge.log.level(category, args...) - * The category is an arbitrary string, and the args are the same as - * Firebug's console.log API. By default the call will be output as: - * 'LEVEL [category] , args[1], ...' - * This enables proper % formatting via the first argument. - * Each category is enabled by default but can be enabled or disabled with - * the setCategoryEnabled() function. - */ -// list of known levels -forge.log.levels = [ - 'none', 'error', 'warning', 'info', 'debug', 'verbose', 'max']; -// info on the levels indexed by name: -// index: level index -// name: uppercased display name -var sLevelInfo = {}; -// list of loggers -var sLoggers = []; -/** - * Standard console logger. If no console support is enabled this will - * remain null. Check before using. - */ -var sConsoleLogger = null; - -// logger flags -/** - * Lock the level at the current value. Used in cases where user config may - * set the level such that only critical messages are seen but more verbose - * messages are needed for debugging or other purposes. - */ -forge.log.LEVEL_LOCKED = (1 << 1); -/** - * Always call log function. By default, the logging system will check the - * message level against logger.level before calling the log function. This - * flag allows the function to do its own check. - */ -forge.log.NO_LEVEL_CHECK = (1 << 2); -/** - * Perform message interpolation with the passed arguments. "%" style - * fields in log messages will be replaced by arguments as needed. Some - * loggers, such as Firebug, may do this automatically. The original log - * message will be available as 'message' and the interpolated version will - * be available as 'fullMessage'. - */ -forge.log.INTERPOLATE = (1 << 3); - -// setup each log level -for(var i = 0; i < forge.log.levels.length; ++i) { - var level = forge.log.levels[i]; - sLevelInfo[level] = { - index: i, - name: level.toUpperCase() - }; -} - -/** - * Message logger. Will dispatch a message to registered loggers as needed. - * - * @param message message object - */ -forge.log.logMessage = function(message) { - var messageLevelIndex = sLevelInfo[message.level].index; - for(var i = 0; i < sLoggers.length; ++i) { - var logger = sLoggers[i]; - if(logger.flags & forge.log.NO_LEVEL_CHECK) { - logger.f(message); - } else { - // get logger level - var loggerLevelIndex = sLevelInfo[logger.level].index; - // check level - if(messageLevelIndex <= loggerLevelIndex) { - // message critical enough, call logger - logger.f(logger, message); - } - } - } -}; - -/** - * Sets the 'standard' key on a message object to: - * "LEVEL [category] " + message - * - * @param message a message log object - */ -forge.log.prepareStandard = function(message) { - if(!('standard' in message)) { - message.standard = - sLevelInfo[message.level].name + - //' ' + +message.timestamp + - ' [' + message.category + '] ' + - message.message; - } -}; - -/** - * Sets the 'full' key on a message object to the original message - * interpolated via % formatting with the message arguments. - * - * @param message a message log object. - */ -forge.log.prepareFull = function(message) { - if(!('full' in message)) { - // copy args and insert message at the front - var args = [message.message]; - args = args.concat([] || message['arguments']); - // format the message - message.full = forge.util.format.apply(this, args); - } -}; - -/** - * Applies both preparseStandard() and prepareFull() to a message object and - * store result in 'standardFull'. - * - * @param message a message log object. - */ -forge.log.prepareStandardFull = function(message) { - if(!('standardFull' in message)) { - // FIXME implement 'standardFull' logging - forge.log.prepareStandard(message); - message.standardFull = message.standard; - } -}; - -// create log level functions -if(true) { - // levels for which we want functions - var levels = ['error', 'warning', 'info', 'debug', 'verbose']; - for(var i = 0; i < levels.length; ++i) { - // wrap in a function to ensure proper level var is passed - (function(level) { - // create function for this level - forge.log[level] = function(category, message/*, args...*/) { - // convert arguments to real array, remove category and message - var args = Array.prototype.slice.call(arguments).slice(2); - // create message object - // Note: interpolation and standard formatting is done lazily - var msg = { - timestamp: new Date(), - level: level, - category: category, - message: message, - 'arguments': args - /*standard*/ - /*full*/ - /*fullMessage*/ - }; - // process this message - forge.log.logMessage(msg); - }; - })(levels[i]); - } -} - -/** - * Creates a new logger with specified custom logging function. - * - * The logging function has a signature of: - * function(logger, message) - * logger: current logger - * message: object: - * level: level id - * category: category - * message: string message - * arguments: Array of extra arguments - * fullMessage: interpolated message and arguments if INTERPOLATE flag set - * - * @param logFunction a logging function which takes a log message object - * as a parameter. - * - * @return a logger object. - */ -forge.log.makeLogger = function(logFunction) { - var logger = { - flags: 0, - f: logFunction - }; - forge.log.setLevel(logger, 'none'); - return logger; -}; - -/** - * Sets the current log level on a logger. - * - * @param logger the target logger. - * @param level the new maximum log level as a string. - * - * @return true if set, false if not. - */ -forge.log.setLevel = function(logger, level) { - var rval = false; - if(logger && !(logger.flags & forge.log.LEVEL_LOCKED)) { - for(var i = 0; i < forge.log.levels.length; ++i) { - var aValidLevel = forge.log.levels[i]; - if(level == aValidLevel) { - // set level - logger.level = level; - rval = true; - break; - } - } - } - - return rval; -}; - -/** - * Locks the log level at its current value. - * - * @param logger the target logger. - * @param lock boolean lock value, default to true. - */ -forge.log.lock = function(logger, lock) { - if(typeof lock === 'undefined' || lock) { - logger.flags |= forge.log.LEVEL_LOCKED; - } else { - logger.flags &= ~forge.log.LEVEL_LOCKED; - } -}; - -/** - * Adds a logger. - * - * @param logger the logger object. - */ -forge.log.addLogger = function(logger) { - sLoggers.push(logger); -}; - -// setup the console logger if possible, else create fake console.log -if(typeof(console) !== 'undefined' && 'log' in console) { - var logger; - if(console.error && console.warn && console.info && console.debug) { - // looks like Firebug-style logging is available - // level handlers map - var levelHandlers = { - error: console.error, - warning: console.warn, - info: console.info, - debug: console.debug, - verbose: console.debug - }; - var f = function(logger, message) { - forge.log.prepareStandard(message); - var handler = levelHandlers[message.level]; - // prepend standard message and concat args - var args = [message.standard]; - args = args.concat(message['arguments'].slice()); - // apply to low-level console function - handler.apply(console, args); - }; - logger = forge.log.makeLogger(f); - } else { - // only appear to have basic console.log - var f = function(logger, message) { - forge.log.prepareStandardFull(message); - console.log(message.standardFull); - }; - logger = forge.log.makeLogger(f); - } - forge.log.setLevel(logger, 'debug'); - forge.log.addLogger(logger); - sConsoleLogger = logger; -} else { - // define fake console.log to avoid potential script errors on - // browsers that do not have console logging - console = { - log: function() {} - }; -} - -/* - * Check for logging control query vars. - * - * console.level= - * Set's the console log level by name. Useful to override defaults and - * allow more verbose logging before a user config is loaded. - * - * console.lock= - * Lock the console log level at whatever level it is set at. This is run - * after console.level is processed. Useful to force a level of verbosity - * that could otherwise be limited by a user config. - */ -if(sConsoleLogger !== null) { - var query = forge.util.getQueryVariables(); - if('console.level' in query) { - // set with last value - forge.log.setLevel( - sConsoleLogger, query['console.level'].slice(-1)[0]); - } - if('console.lock' in query) { - // set with last value - var lock = query['console.lock'].slice(-1)[0]; - if(lock == 'true') { - forge.log.lock(sConsoleLogger); - } - } -} - -// provide public access to console logger -forge.log.consoleLogger = sConsoleLogger; diff --git a/reverse_engineering/node_modules/node-forge/lib/md.all.js b/reverse_engineering/node_modules/node-forge/lib/md.all.js deleted file mode 100644 index 4e0974b..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/md.all.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Node.js module for all known Forge message digests. - * - * @author Dave Longley - * - * Copyright 2011-2017 Digital Bazaar, Inc. - */ -module.exports = require('./md'); - -require('./md5'); -require('./sha1'); -require('./sha256'); -require('./sha512'); diff --git a/reverse_engineering/node_modules/node-forge/lib/md.js b/reverse_engineering/node_modules/node-forge/lib/md.js deleted file mode 100644 index e4a280c..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/md.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Node.js module for Forge message digests. - * - * @author Dave Longley - * - * Copyright 2011-2017 Digital Bazaar, Inc. - */ -var forge = require('./forge'); - -module.exports = forge.md = forge.md || {}; -forge.md.algorithms = forge.md.algorithms || {}; diff --git a/reverse_engineering/node_modules/node-forge/lib/md5.js b/reverse_engineering/node_modules/node-forge/lib/md5.js deleted file mode 100644 index d0ba8f6..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/md5.js +++ /dev/null @@ -1,289 +0,0 @@ -/** - * Message Digest Algorithm 5 with 128-bit digest (MD5) implementation. - * - * @author Dave Longley - * - * Copyright (c) 2010-2014 Digital Bazaar, Inc. - */ -var forge = require('./forge'); -require('./md'); -require('./util'); - -var md5 = module.exports = forge.md5 = forge.md5 || {}; -forge.md.md5 = forge.md.algorithms.md5 = md5; - -/** - * Creates an MD5 message digest object. - * - * @return a message digest object. - */ -md5.create = function() { - // do initialization as necessary - if(!_initialized) { - _init(); - } - - // MD5 state contains four 32-bit integers - var _state = null; - - // input buffer - var _input = forge.util.createBuffer(); - - // used for word storage - var _w = new Array(16); - - // message digest object - var md = { - algorithm: 'md5', - blockLength: 64, - digestLength: 16, - // 56-bit length of message so far (does not including padding) - messageLength: 0, - // true message length - fullMessageLength: null, - // size of message length in bytes - messageLengthSize: 8 - }; - - /** - * Starts the digest. - * - * @return this digest object. - */ - md.start = function() { - // up to 56-bit message length for convenience - md.messageLength = 0; - - // full message length (set md.messageLength64 for backwards-compatibility) - md.fullMessageLength = md.messageLength64 = []; - var int32s = md.messageLengthSize / 4; - for(var i = 0; i < int32s; ++i) { - md.fullMessageLength.push(0); - } - _input = forge.util.createBuffer(); - _state = { - h0: 0x67452301, - h1: 0xEFCDAB89, - h2: 0x98BADCFE, - h3: 0x10325476 - }; - return md; - }; - // start digest automatically for first time - md.start(); - - /** - * Updates the digest with the given message input. The given input can - * treated as raw input (no encoding will be applied) or an encoding of - * 'utf8' maybe given to encode the input using UTF-8. - * - * @param msg the message input to update with. - * @param encoding the encoding to use (default: 'raw', other: 'utf8'). - * - * @return this digest object. - */ - md.update = function(msg, encoding) { - if(encoding === 'utf8') { - msg = forge.util.encodeUtf8(msg); - } - - // update message length - var len = msg.length; - md.messageLength += len; - len = [(len / 0x100000000) >>> 0, len >>> 0]; - for(var i = md.fullMessageLength.length - 1; i >= 0; --i) { - md.fullMessageLength[i] += len[1]; - len[1] = len[0] + ((md.fullMessageLength[i] / 0x100000000) >>> 0); - md.fullMessageLength[i] = md.fullMessageLength[i] >>> 0; - len[0] = (len[1] / 0x100000000) >>> 0; - } - - // add bytes to input buffer - _input.putBytes(msg); - - // process bytes - _update(_state, _w, _input); - - // compact input buffer every 2K or if empty - if(_input.read > 2048 || _input.length() === 0) { - _input.compact(); - } - - return md; - }; - - /** - * Produces the digest. - * - * @return a byte buffer containing the digest value. - */ - md.digest = function() { - /* Note: Here we copy the remaining bytes in the input buffer and - add the appropriate MD5 padding. Then we do the final update - on a copy of the state so that if the user wants to get - intermediate digests they can do so. */ - - /* Determine the number of bytes that must be added to the message - to ensure its length is congruent to 448 mod 512. In other words, - the data to be digested must be a multiple of 512 bits (or 128 bytes). - This data includes the message, some padding, and the length of the - message. Since the length of the message will be encoded as 8 bytes (64 - bits), that means that the last segment of the data must have 56 bytes - (448 bits) of message and padding. Therefore, the length of the message - plus the padding must be congruent to 448 mod 512 because - 512 - 128 = 448. - - In order to fill up the message length it must be filled with - padding that begins with 1 bit followed by all 0 bits. Padding - must *always* be present, so if the message length is already - congruent to 448 mod 512, then 512 padding bits must be added. */ - - var finalBlock = forge.util.createBuffer(); - finalBlock.putBytes(_input.bytes()); - - // compute remaining size to be digested (include message length size) - var remaining = ( - md.fullMessageLength[md.fullMessageLength.length - 1] + - md.messageLengthSize); - - // add padding for overflow blockSize - overflow - // _padding starts with 1 byte with first bit is set (byte value 128), then - // there may be up to (blockSize - 1) other pad bytes - var overflow = remaining & (md.blockLength - 1); - finalBlock.putBytes(_padding.substr(0, md.blockLength - overflow)); - - // serialize message length in bits in little-endian order; since length - // is stored in bytes we multiply by 8 and add carry - var bits, carry = 0; - for(var i = md.fullMessageLength.length - 1; i >= 0; --i) { - bits = md.fullMessageLength[i] * 8 + carry; - carry = (bits / 0x100000000) >>> 0; - finalBlock.putInt32Le(bits >>> 0); - } - - var s2 = { - h0: _state.h0, - h1: _state.h1, - h2: _state.h2, - h3: _state.h3 - }; - _update(s2, _w, finalBlock); - var rval = forge.util.createBuffer(); - rval.putInt32Le(s2.h0); - rval.putInt32Le(s2.h1); - rval.putInt32Le(s2.h2); - rval.putInt32Le(s2.h3); - return rval; - }; - - return md; -}; - -// padding, constant tables for calculating md5 -var _padding = null; -var _g = null; -var _r = null; -var _k = null; -var _initialized = false; - -/** - * Initializes the constant tables. - */ -function _init() { - // create padding - _padding = String.fromCharCode(128); - _padding += forge.util.fillString(String.fromCharCode(0x00), 64); - - // g values - _g = [ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 1, 6, 11, 0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12, - 5, 8, 11, 14, 1, 4, 7, 10, 13, 0, 3, 6, 9, 12, 15, 2, - 0, 7, 14, 5, 12, 3, 10, 1, 8, 15, 6, 13, 4, 11, 2, 9]; - - // rounds table - _r = [ - 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, - 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, - 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, - 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]; - - // get the result of abs(sin(i + 1)) as a 32-bit integer - _k = new Array(64); - for(var i = 0; i < 64; ++i) { - _k[i] = Math.floor(Math.abs(Math.sin(i + 1)) * 0x100000000); - } - - // now initialized - _initialized = true; -} - -/** - * Updates an MD5 state with the given byte buffer. - * - * @param s the MD5 state to update. - * @param w the array to use to store words. - * @param bytes the byte buffer to update with. - */ -function _update(s, w, bytes) { - // consume 512 bit (64 byte) chunks - var t, a, b, c, d, f, r, i; - var len = bytes.length(); - while(len >= 64) { - // initialize hash value for this chunk - a = s.h0; - b = s.h1; - c = s.h2; - d = s.h3; - - // round 1 - for(i = 0; i < 16; ++i) { - w[i] = bytes.getInt32Le(); - f = d ^ (b & (c ^ d)); - t = (a + f + _k[i] + w[i]); - r = _r[i]; - a = d; - d = c; - c = b; - b += (t << r) | (t >>> (32 - r)); - } - // round 2 - for(; i < 32; ++i) { - f = c ^ (d & (b ^ c)); - t = (a + f + _k[i] + w[_g[i]]); - r = _r[i]; - a = d; - d = c; - c = b; - b += (t << r) | (t >>> (32 - r)); - } - // round 3 - for(; i < 48; ++i) { - f = b ^ c ^ d; - t = (a + f + _k[i] + w[_g[i]]); - r = _r[i]; - a = d; - d = c; - c = b; - b += (t << r) | (t >>> (32 - r)); - } - // round 4 - for(; i < 64; ++i) { - f = c ^ (b | ~d); - t = (a + f + _k[i] + w[_g[i]]); - r = _r[i]; - a = d; - d = c; - c = b; - b += (t << r) | (t >>> (32 - r)); - } - - // update hash state - s.h0 = (s.h0 + a) | 0; - s.h1 = (s.h1 + b) | 0; - s.h2 = (s.h2 + c) | 0; - s.h3 = (s.h3 + d) | 0; - - len -= 64; - } -} diff --git a/reverse_engineering/node_modules/node-forge/lib/mgf.js b/reverse_engineering/node_modules/node-forge/lib/mgf.js deleted file mode 100644 index 0223bc3..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/mgf.js +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Node.js module for Forge mask generation functions. - * - * @author Stefan Siegl - * - * Copyright 2012 Stefan Siegl - */ -var forge = require('./forge'); -require('./mgf1'); - -module.exports = forge.mgf = forge.mgf || {}; -forge.mgf.mgf1 = forge.mgf1; diff --git a/reverse_engineering/node_modules/node-forge/lib/mgf1.js b/reverse_engineering/node_modules/node-forge/lib/mgf1.js deleted file mode 100644 index 25ed1f7..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/mgf1.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * Javascript implementation of mask generation function MGF1. - * - * @author Stefan Siegl - * @author Dave Longley - * - * Copyright (c) 2012 Stefan Siegl - * Copyright (c) 2014 Digital Bazaar, Inc. - */ -var forge = require('./forge'); -require('./util'); - -forge.mgf = forge.mgf || {}; -var mgf1 = module.exports = forge.mgf.mgf1 = forge.mgf1 = forge.mgf1 || {}; - -/** - * Creates a MGF1 mask generation function object. - * - * @param md the message digest API to use (eg: forge.md.sha1.create()). - * - * @return a mask generation function object. - */ -mgf1.create = function(md) { - var mgf = { - /** - * Generate mask of specified length. - * - * @param {String} seed The seed for mask generation. - * @param maskLen Number of bytes to generate. - * @return {String} The generated mask. - */ - generate: function(seed, maskLen) { - /* 2. Let T be the empty octet string. */ - var t = new forge.util.ByteBuffer(); - - /* 3. For counter from 0 to ceil(maskLen / hLen), do the following: */ - var len = Math.ceil(maskLen / md.digestLength); - for(var i = 0; i < len; i++) { - /* a. Convert counter to an octet string C of length 4 octets */ - var c = new forge.util.ByteBuffer(); - c.putInt32(i); - - /* b. Concatenate the hash of the seed mgfSeed and C to the octet - * string T: */ - md.start(); - md.update(seed + c.getBytes()); - t.putBuffer(md.digest()); - } - - /* Output the leading maskLen octets of T as the octet string mask. */ - t.truncate(t.length() - maskLen); - return t.getBytes(); - } - }; - - return mgf; -}; diff --git a/reverse_engineering/node_modules/node-forge/lib/oids.js b/reverse_engineering/node_modules/node-forge/lib/oids.js deleted file mode 100644 index 6a937f5..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/oids.js +++ /dev/null @@ -1,170 +0,0 @@ -/** - * Object IDs for ASN.1. - * - * @author Dave Longley - * - * Copyright (c) 2010-2013 Digital Bazaar, Inc. - */ -var forge = require('./forge'); - -forge.pki = forge.pki || {}; -var oids = module.exports = forge.pki.oids = forge.oids = forge.oids || {}; - -// set id to name mapping and name to id mapping -function _IN(id, name) { - oids[id] = name; - oids[name] = id; -} -// set id to name mapping only -function _I_(id, name) { - oids[id] = name; -} - -// algorithm OIDs -_IN('1.2.840.113549.1.1.1', 'rsaEncryption'); -// Note: md2 & md4 not implemented -//_IN('1.2.840.113549.1.1.2', 'md2WithRSAEncryption'); -//_IN('1.2.840.113549.1.1.3', 'md4WithRSAEncryption'); -_IN('1.2.840.113549.1.1.4', 'md5WithRSAEncryption'); -_IN('1.2.840.113549.1.1.5', 'sha1WithRSAEncryption'); -_IN('1.2.840.113549.1.1.7', 'RSAES-OAEP'); -_IN('1.2.840.113549.1.1.8', 'mgf1'); -_IN('1.2.840.113549.1.1.9', 'pSpecified'); -_IN('1.2.840.113549.1.1.10', 'RSASSA-PSS'); -_IN('1.2.840.113549.1.1.11', 'sha256WithRSAEncryption'); -_IN('1.2.840.113549.1.1.12', 'sha384WithRSAEncryption'); -_IN('1.2.840.113549.1.1.13', 'sha512WithRSAEncryption'); -// Edwards-curve Digital Signature Algorithm (EdDSA) Ed25519 -_IN('1.3.101.112', 'EdDSA25519'); - -_IN('1.2.840.10040.4.3', 'dsa-with-sha1'); - -_IN('1.3.14.3.2.7', 'desCBC'); - -_IN('1.3.14.3.2.26', 'sha1'); -_IN('2.16.840.1.101.3.4.2.1', 'sha256'); -_IN('2.16.840.1.101.3.4.2.2', 'sha384'); -_IN('2.16.840.1.101.3.4.2.3', 'sha512'); -_IN('1.2.840.113549.2.5', 'md5'); - -// pkcs#7 content types -_IN('1.2.840.113549.1.7.1', 'data'); -_IN('1.2.840.113549.1.7.2', 'signedData'); -_IN('1.2.840.113549.1.7.3', 'envelopedData'); -_IN('1.2.840.113549.1.7.4', 'signedAndEnvelopedData'); -_IN('1.2.840.113549.1.7.5', 'digestedData'); -_IN('1.2.840.113549.1.7.6', 'encryptedData'); - -// pkcs#9 oids -_IN('1.2.840.113549.1.9.1', 'emailAddress'); -_IN('1.2.840.113549.1.9.2', 'unstructuredName'); -_IN('1.2.840.113549.1.9.3', 'contentType'); -_IN('1.2.840.113549.1.9.4', 'messageDigest'); -_IN('1.2.840.113549.1.9.5', 'signingTime'); -_IN('1.2.840.113549.1.9.6', 'counterSignature'); -_IN('1.2.840.113549.1.9.7', 'challengePassword'); -_IN('1.2.840.113549.1.9.8', 'unstructuredAddress'); -_IN('1.2.840.113549.1.9.14', 'extensionRequest'); - -_IN('1.2.840.113549.1.9.20', 'friendlyName'); -_IN('1.2.840.113549.1.9.21', 'localKeyId'); -_IN('1.2.840.113549.1.9.22.1', 'x509Certificate'); - -// pkcs#12 safe bags -_IN('1.2.840.113549.1.12.10.1.1', 'keyBag'); -_IN('1.2.840.113549.1.12.10.1.2', 'pkcs8ShroudedKeyBag'); -_IN('1.2.840.113549.1.12.10.1.3', 'certBag'); -_IN('1.2.840.113549.1.12.10.1.4', 'crlBag'); -_IN('1.2.840.113549.1.12.10.1.5', 'secretBag'); -_IN('1.2.840.113549.1.12.10.1.6', 'safeContentsBag'); - -// password-based-encryption for pkcs#12 -_IN('1.2.840.113549.1.5.13', 'pkcs5PBES2'); -_IN('1.2.840.113549.1.5.12', 'pkcs5PBKDF2'); - -_IN('1.2.840.113549.1.12.1.1', 'pbeWithSHAAnd128BitRC4'); -_IN('1.2.840.113549.1.12.1.2', 'pbeWithSHAAnd40BitRC4'); -_IN('1.2.840.113549.1.12.1.3', 'pbeWithSHAAnd3-KeyTripleDES-CBC'); -_IN('1.2.840.113549.1.12.1.4', 'pbeWithSHAAnd2-KeyTripleDES-CBC'); -_IN('1.2.840.113549.1.12.1.5', 'pbeWithSHAAnd128BitRC2-CBC'); -_IN('1.2.840.113549.1.12.1.6', 'pbewithSHAAnd40BitRC2-CBC'); - -// hmac OIDs -_IN('1.2.840.113549.2.7', 'hmacWithSHA1'); -_IN('1.2.840.113549.2.8', 'hmacWithSHA224'); -_IN('1.2.840.113549.2.9', 'hmacWithSHA256'); -_IN('1.2.840.113549.2.10', 'hmacWithSHA384'); -_IN('1.2.840.113549.2.11', 'hmacWithSHA512'); - -// symmetric key algorithm oids -_IN('1.2.840.113549.3.7', 'des-EDE3-CBC'); -_IN('2.16.840.1.101.3.4.1.2', 'aes128-CBC'); -_IN('2.16.840.1.101.3.4.1.22', 'aes192-CBC'); -_IN('2.16.840.1.101.3.4.1.42', 'aes256-CBC'); - -// certificate issuer/subject OIDs -_IN('2.5.4.3', 'commonName'); -_IN('2.5.4.5', 'serialName'); -_IN('2.5.4.6', 'countryName'); -_IN('2.5.4.7', 'localityName'); -_IN('2.5.4.8', 'stateOrProvinceName'); -_IN('2.5.4.9', 'streetAddress'); -_IN('2.5.4.10', 'organizationName'); -_IN('2.5.4.11', 'organizationalUnitName'); -_IN('2.5.4.13', 'description'); -_IN('2.5.4.15', 'businessCategory'); -_IN('2.5.4.17', 'postalCode'); -_IN('1.3.6.1.4.1.311.60.2.1.2', 'jurisdictionOfIncorporationStateOrProvinceName'); -_IN('1.3.6.1.4.1.311.60.2.1.3', 'jurisdictionOfIncorporationCountryName'); - -// X.509 extension OIDs -_IN('2.16.840.1.113730.1.1', 'nsCertType'); -_IN('2.16.840.1.113730.1.13', 'nsComment'); // deprecated in theory; still widely used -_I_('2.5.29.1', 'authorityKeyIdentifier'); // deprecated, use .35 -_I_('2.5.29.2', 'keyAttributes'); // obsolete use .37 or .15 -_I_('2.5.29.3', 'certificatePolicies'); // deprecated, use .32 -_I_('2.5.29.4', 'keyUsageRestriction'); // obsolete use .37 or .15 -_I_('2.5.29.5', 'policyMapping'); // deprecated use .33 -_I_('2.5.29.6', 'subtreesConstraint'); // obsolete use .30 -_I_('2.5.29.7', 'subjectAltName'); // deprecated use .17 -_I_('2.5.29.8', 'issuerAltName'); // deprecated use .18 -_I_('2.5.29.9', 'subjectDirectoryAttributes'); -_I_('2.5.29.10', 'basicConstraints'); // deprecated use .19 -_I_('2.5.29.11', 'nameConstraints'); // deprecated use .30 -_I_('2.5.29.12', 'policyConstraints'); // deprecated use .36 -_I_('2.5.29.13', 'basicConstraints'); // deprecated use .19 -_IN('2.5.29.14', 'subjectKeyIdentifier'); -_IN('2.5.29.15', 'keyUsage'); -_I_('2.5.29.16', 'privateKeyUsagePeriod'); -_IN('2.5.29.17', 'subjectAltName'); -_IN('2.5.29.18', 'issuerAltName'); -_IN('2.5.29.19', 'basicConstraints'); -_I_('2.5.29.20', 'cRLNumber'); -_I_('2.5.29.21', 'cRLReason'); -_I_('2.5.29.22', 'expirationDate'); -_I_('2.5.29.23', 'instructionCode'); -_I_('2.5.29.24', 'invalidityDate'); -_I_('2.5.29.25', 'cRLDistributionPoints'); // deprecated use .31 -_I_('2.5.29.26', 'issuingDistributionPoint'); // deprecated use .28 -_I_('2.5.29.27', 'deltaCRLIndicator'); -_I_('2.5.29.28', 'issuingDistributionPoint'); -_I_('2.5.29.29', 'certificateIssuer'); -_I_('2.5.29.30', 'nameConstraints'); -_IN('2.5.29.31', 'cRLDistributionPoints'); -_IN('2.5.29.32', 'certificatePolicies'); -_I_('2.5.29.33', 'policyMappings'); -_I_('2.5.29.34', 'policyConstraints'); // deprecated use .36 -_IN('2.5.29.35', 'authorityKeyIdentifier'); -_I_('2.5.29.36', 'policyConstraints'); -_IN('2.5.29.37', 'extKeyUsage'); -_I_('2.5.29.46', 'freshestCRL'); -_I_('2.5.29.54', 'inhibitAnyPolicy'); - -// extKeyUsage purposes -_IN('1.3.6.1.4.1.11129.2.4.2', 'timestampList'); -_IN('1.3.6.1.5.5.7.1.1', 'authorityInfoAccess'); -_IN('1.3.6.1.5.5.7.3.1', 'serverAuth'); -_IN('1.3.6.1.5.5.7.3.2', 'clientAuth'); -_IN('1.3.6.1.5.5.7.3.3', 'codeSigning'); -_IN('1.3.6.1.5.5.7.3.4', 'emailProtection'); -_IN('1.3.6.1.5.5.7.3.8', 'timeStamping'); diff --git a/reverse_engineering/node_modules/node-forge/lib/pbe.js b/reverse_engineering/node_modules/node-forge/lib/pbe.js deleted file mode 100644 index cf8456b..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/pbe.js +++ /dev/null @@ -1,1023 +0,0 @@ -/** - * Password-based encryption functions. - * - * @author Dave Longley - * @author Stefan Siegl - * - * Copyright (c) 2010-2013 Digital Bazaar, Inc. - * Copyright (c) 2012 Stefan Siegl - * - * An EncryptedPrivateKeyInfo: - * - * EncryptedPrivateKeyInfo ::= SEQUENCE { - * encryptionAlgorithm EncryptionAlgorithmIdentifier, - * encryptedData EncryptedData } - * - * EncryptionAlgorithmIdentifier ::= AlgorithmIdentifier - * - * EncryptedData ::= OCTET STRING - */ -var forge = require('./forge'); -require('./aes'); -require('./asn1'); -require('./des'); -require('./md'); -require('./oids'); -require('./pbkdf2'); -require('./pem'); -require('./random'); -require('./rc2'); -require('./rsa'); -require('./util'); - -if(typeof BigInteger === 'undefined') { - var BigInteger = forge.jsbn.BigInteger; -} - -// shortcut for asn.1 API -var asn1 = forge.asn1; - -/* Password-based encryption implementation. */ -var pki = forge.pki = forge.pki || {}; -module.exports = pki.pbe = forge.pbe = forge.pbe || {}; -var oids = pki.oids; - -// validator for an EncryptedPrivateKeyInfo structure -// Note: Currently only works w/algorithm params -var encryptedPrivateKeyValidator = { - name: 'EncryptedPrivateKeyInfo', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'EncryptedPrivateKeyInfo.encryptionAlgorithm', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'AlgorithmIdentifier.algorithm', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OID, - constructed: false, - capture: 'encryptionOid' - }, { - name: 'AlgorithmIdentifier.parameters', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - captureAsn1: 'encryptionParams' - }] - }, { - // encryptedData - name: 'EncryptedPrivateKeyInfo.encryptedData', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OCTETSTRING, - constructed: false, - capture: 'encryptedData' - }] -}; - -// validator for a PBES2Algorithms structure -// Note: Currently only works w/PBKDF2 + AES encryption schemes -var PBES2AlgorithmsValidator = { - name: 'PBES2Algorithms', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'PBES2Algorithms.keyDerivationFunc', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'PBES2Algorithms.keyDerivationFunc.oid', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OID, - constructed: false, - capture: 'kdfOid' - }, { - name: 'PBES2Algorithms.params', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'PBES2Algorithms.params.salt', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OCTETSTRING, - constructed: false, - capture: 'kdfSalt' - }, { - name: 'PBES2Algorithms.params.iterationCount', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.INTEGER, - constructed: false, - capture: 'kdfIterationCount' - }, { - name: 'PBES2Algorithms.params.keyLength', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.INTEGER, - constructed: false, - optional: true, - capture: 'keyLength' - }, { - // prf - name: 'PBES2Algorithms.params.prf', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - optional: true, - value: [{ - name: 'PBES2Algorithms.params.prf.algorithm', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OID, - constructed: false, - capture: 'prfOid' - }] - }] - }] - }, { - name: 'PBES2Algorithms.encryptionScheme', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'PBES2Algorithms.encryptionScheme.oid', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OID, - constructed: false, - capture: 'encOid' - }, { - name: 'PBES2Algorithms.encryptionScheme.iv', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OCTETSTRING, - constructed: false, - capture: 'encIv' - }] - }] -}; - -var pkcs12PbeParamsValidator = { - name: 'pkcs-12PbeParams', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'pkcs-12PbeParams.salt', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OCTETSTRING, - constructed: false, - capture: 'salt' - }, { - name: 'pkcs-12PbeParams.iterations', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.INTEGER, - constructed: false, - capture: 'iterations' - }] -}; - -/** - * Encrypts a ASN.1 PrivateKeyInfo object, producing an EncryptedPrivateKeyInfo. - * - * PBES2Algorithms ALGORITHM-IDENTIFIER ::= - * { {PBES2-params IDENTIFIED BY id-PBES2}, ...} - * - * id-PBES2 OBJECT IDENTIFIER ::= {pkcs-5 13} - * - * PBES2-params ::= SEQUENCE { - * keyDerivationFunc AlgorithmIdentifier {{PBES2-KDFs}}, - * encryptionScheme AlgorithmIdentifier {{PBES2-Encs}} - * } - * - * PBES2-KDFs ALGORITHM-IDENTIFIER ::= - * { {PBKDF2-params IDENTIFIED BY id-PBKDF2}, ... } - * - * PBES2-Encs ALGORITHM-IDENTIFIER ::= { ... } - * - * PBKDF2-params ::= SEQUENCE { - * salt CHOICE { - * specified OCTET STRING, - * otherSource AlgorithmIdentifier {{PBKDF2-SaltSources}} - * }, - * iterationCount INTEGER (1..MAX), - * keyLength INTEGER (1..MAX) OPTIONAL, - * prf AlgorithmIdentifier {{PBKDF2-PRFs}} DEFAULT algid-hmacWithSHA1 - * } - * - * @param obj the ASN.1 PrivateKeyInfo object. - * @param password the password to encrypt with. - * @param options: - * algorithm the encryption algorithm to use - * ('aes128', 'aes192', 'aes256', '3des'), defaults to 'aes128'. - * count the iteration count to use. - * saltSize the salt size to use. - * prfAlgorithm the PRF message digest algorithm to use - * ('sha1', 'sha224', 'sha256', 'sha384', 'sha512') - * - * @return the ASN.1 EncryptedPrivateKeyInfo. - */ -pki.encryptPrivateKeyInfo = function(obj, password, options) { - // set default options - options = options || {}; - options.saltSize = options.saltSize || 8; - options.count = options.count || 2048; - options.algorithm = options.algorithm || 'aes128'; - options.prfAlgorithm = options.prfAlgorithm || 'sha1'; - - // generate PBE params - var salt = forge.random.getBytesSync(options.saltSize); - var count = options.count; - var countBytes = asn1.integerToDer(count); - var dkLen; - var encryptionAlgorithm; - var encryptedData; - if(options.algorithm.indexOf('aes') === 0 || options.algorithm === 'des') { - // do PBES2 - var ivLen, encOid, cipherFn; - switch(options.algorithm) { - case 'aes128': - dkLen = 16; - ivLen = 16; - encOid = oids['aes128-CBC']; - cipherFn = forge.aes.createEncryptionCipher; - break; - case 'aes192': - dkLen = 24; - ivLen = 16; - encOid = oids['aes192-CBC']; - cipherFn = forge.aes.createEncryptionCipher; - break; - case 'aes256': - dkLen = 32; - ivLen = 16; - encOid = oids['aes256-CBC']; - cipherFn = forge.aes.createEncryptionCipher; - break; - case 'des': - dkLen = 8; - ivLen = 8; - encOid = oids['desCBC']; - cipherFn = forge.des.createEncryptionCipher; - break; - default: - var error = new Error('Cannot encrypt private key. Unknown encryption algorithm.'); - error.algorithm = options.algorithm; - throw error; - } - - // get PRF message digest - var prfAlgorithm = 'hmacWith' + options.prfAlgorithm.toUpperCase(); - var md = prfAlgorithmToMessageDigest(prfAlgorithm); - - // encrypt private key using pbe SHA-1 and AES/DES - var dk = forge.pkcs5.pbkdf2(password, salt, count, dkLen, md); - var iv = forge.random.getBytesSync(ivLen); - var cipher = cipherFn(dk); - cipher.start(iv); - cipher.update(asn1.toDer(obj)); - cipher.finish(); - encryptedData = cipher.output.getBytes(); - - // get PBKDF2-params - var params = createPbkdf2Params(salt, countBytes, dkLen, prfAlgorithm); - - encryptionAlgorithm = asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(oids['pkcs5PBES2']).getBytes()), - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // keyDerivationFunc - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(oids['pkcs5PBKDF2']).getBytes()), - // PBKDF2-params - params - ]), - // encryptionScheme - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(encOid).getBytes()), - // iv - asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, iv) - ]) - ]) - ]); - } else if(options.algorithm === '3des') { - // Do PKCS12 PBE - dkLen = 24; - - var saltBytes = new forge.util.ByteBuffer(salt); - var dk = pki.pbe.generatePkcs12Key(password, saltBytes, 1, count, dkLen); - var iv = pki.pbe.generatePkcs12Key(password, saltBytes, 2, count, dkLen); - var cipher = forge.des.createEncryptionCipher(dk); - cipher.start(iv); - cipher.update(asn1.toDer(obj)); - cipher.finish(); - encryptedData = cipher.output.getBytes(); - - encryptionAlgorithm = asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(oids['pbeWithSHAAnd3-KeyTripleDES-CBC']).getBytes()), - // pkcs-12PbeParams - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // salt - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, salt), - // iteration count - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - countBytes.getBytes()) - ]) - ]); - } else { - var error = new Error('Cannot encrypt private key. Unknown encryption algorithm.'); - error.algorithm = options.algorithm; - throw error; - } - - // EncryptedPrivateKeyInfo - var rval = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // encryptionAlgorithm - encryptionAlgorithm, - // encryptedData - asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, encryptedData) - ]); - return rval; -}; - -/** - * Decrypts a ASN.1 PrivateKeyInfo object. - * - * @param obj the ASN.1 EncryptedPrivateKeyInfo object. - * @param password the password to decrypt with. - * - * @return the ASN.1 PrivateKeyInfo on success, null on failure. - */ -pki.decryptPrivateKeyInfo = function(obj, password) { - var rval = null; - - // get PBE params - var capture = {}; - var errors = []; - if(!asn1.validate(obj, encryptedPrivateKeyValidator, capture, errors)) { - var error = new Error('Cannot read encrypted private key. ' + - 'ASN.1 object is not a supported EncryptedPrivateKeyInfo.'); - error.errors = errors; - throw error; - } - - // get cipher - var oid = asn1.derToOid(capture.encryptionOid); - var cipher = pki.pbe.getCipher(oid, capture.encryptionParams, password); - - // get encrypted data - var encrypted = forge.util.createBuffer(capture.encryptedData); - - cipher.update(encrypted); - if(cipher.finish()) { - rval = asn1.fromDer(cipher.output); - } - - return rval; -}; - -/** - * Converts a EncryptedPrivateKeyInfo to PEM format. - * - * @param epki the EncryptedPrivateKeyInfo. - * @param maxline the maximum characters per line, defaults to 64. - * - * @return the PEM-formatted encrypted private key. - */ -pki.encryptedPrivateKeyToPem = function(epki, maxline) { - // convert to DER, then PEM-encode - var msg = { - type: 'ENCRYPTED PRIVATE KEY', - body: asn1.toDer(epki).getBytes() - }; - return forge.pem.encode(msg, {maxline: maxline}); -}; - -/** - * Converts a PEM-encoded EncryptedPrivateKeyInfo to ASN.1 format. Decryption - * is not performed. - * - * @param pem the EncryptedPrivateKeyInfo in PEM-format. - * - * @return the ASN.1 EncryptedPrivateKeyInfo. - */ -pki.encryptedPrivateKeyFromPem = function(pem) { - var msg = forge.pem.decode(pem)[0]; - - if(msg.type !== 'ENCRYPTED PRIVATE KEY') { - var error = new Error('Could not convert encrypted private key from PEM; ' + - 'PEM header type is "ENCRYPTED PRIVATE KEY".'); - error.headerType = msg.type; - throw error; - } - if(msg.procType && msg.procType.type === 'ENCRYPTED') { - throw new Error('Could not convert encrypted private key from PEM; ' + - 'PEM is encrypted.'); - } - - // convert DER to ASN.1 object - return asn1.fromDer(msg.body); -}; - -/** - * Encrypts an RSA private key. By default, the key will be wrapped in - * a PrivateKeyInfo and encrypted to produce a PKCS#8 EncryptedPrivateKeyInfo. - * This is the standard, preferred way to encrypt a private key. - * - * To produce a non-standard PEM-encrypted private key that uses encapsulated - * headers to indicate the encryption algorithm (old-style non-PKCS#8 OpenSSL - * private key encryption), set the 'legacy' option to true. Note: Using this - * option will cause the iteration count to be forced to 1. - * - * Note: The 'des' algorithm is supported, but it is not considered to be - * secure because it only uses a single 56-bit key. If possible, it is highly - * recommended that a different algorithm be used. - * - * @param rsaKey the RSA key to encrypt. - * @param password the password to use. - * @param options: - * algorithm: the encryption algorithm to use - * ('aes128', 'aes192', 'aes256', '3des', 'des'). - * count: the iteration count to use. - * saltSize: the salt size to use. - * legacy: output an old non-PKCS#8 PEM-encrypted+encapsulated - * headers (DEK-Info) private key. - * - * @return the PEM-encoded ASN.1 EncryptedPrivateKeyInfo. - */ -pki.encryptRsaPrivateKey = function(rsaKey, password, options) { - // standard PKCS#8 - options = options || {}; - if(!options.legacy) { - // encrypt PrivateKeyInfo - var rval = pki.wrapRsaPrivateKey(pki.privateKeyToAsn1(rsaKey)); - rval = pki.encryptPrivateKeyInfo(rval, password, options); - return pki.encryptedPrivateKeyToPem(rval); - } - - // legacy non-PKCS#8 - var algorithm; - var iv; - var dkLen; - var cipherFn; - switch(options.algorithm) { - case 'aes128': - algorithm = 'AES-128-CBC'; - dkLen = 16; - iv = forge.random.getBytesSync(16); - cipherFn = forge.aes.createEncryptionCipher; - break; - case 'aes192': - algorithm = 'AES-192-CBC'; - dkLen = 24; - iv = forge.random.getBytesSync(16); - cipherFn = forge.aes.createEncryptionCipher; - break; - case 'aes256': - algorithm = 'AES-256-CBC'; - dkLen = 32; - iv = forge.random.getBytesSync(16); - cipherFn = forge.aes.createEncryptionCipher; - break; - case '3des': - algorithm = 'DES-EDE3-CBC'; - dkLen = 24; - iv = forge.random.getBytesSync(8); - cipherFn = forge.des.createEncryptionCipher; - break; - case 'des': - algorithm = 'DES-CBC'; - dkLen = 8; - iv = forge.random.getBytesSync(8); - cipherFn = forge.des.createEncryptionCipher; - break; - default: - var error = new Error('Could not encrypt RSA private key; unsupported ' + - 'encryption algorithm "' + options.algorithm + '".'); - error.algorithm = options.algorithm; - throw error; - } - - // encrypt private key using OpenSSL legacy key derivation - var dk = forge.pbe.opensslDeriveBytes(password, iv.substr(0, 8), dkLen); - var cipher = cipherFn(dk); - cipher.start(iv); - cipher.update(asn1.toDer(pki.privateKeyToAsn1(rsaKey))); - cipher.finish(); - - var msg = { - type: 'RSA PRIVATE KEY', - procType: { - version: '4', - type: 'ENCRYPTED' - }, - dekInfo: { - algorithm: algorithm, - parameters: forge.util.bytesToHex(iv).toUpperCase() - }, - body: cipher.output.getBytes() - }; - return forge.pem.encode(msg); -}; - -/** - * Decrypts an RSA private key. - * - * @param pem the PEM-formatted EncryptedPrivateKeyInfo to decrypt. - * @param password the password to use. - * - * @return the RSA key on success, null on failure. - */ -pki.decryptRsaPrivateKey = function(pem, password) { - var rval = null; - - var msg = forge.pem.decode(pem)[0]; - - if(msg.type !== 'ENCRYPTED PRIVATE KEY' && - msg.type !== 'PRIVATE KEY' && - msg.type !== 'RSA PRIVATE KEY') { - var error = new Error('Could not convert private key from PEM; PEM header type ' + - 'is not "ENCRYPTED PRIVATE KEY", "PRIVATE KEY", or "RSA PRIVATE KEY".'); - error.headerType = error; - throw error; - } - - if(msg.procType && msg.procType.type === 'ENCRYPTED') { - var dkLen; - var cipherFn; - switch(msg.dekInfo.algorithm) { - case 'DES-CBC': - dkLen = 8; - cipherFn = forge.des.createDecryptionCipher; - break; - case 'DES-EDE3-CBC': - dkLen = 24; - cipherFn = forge.des.createDecryptionCipher; - break; - case 'AES-128-CBC': - dkLen = 16; - cipherFn = forge.aes.createDecryptionCipher; - break; - case 'AES-192-CBC': - dkLen = 24; - cipherFn = forge.aes.createDecryptionCipher; - break; - case 'AES-256-CBC': - dkLen = 32; - cipherFn = forge.aes.createDecryptionCipher; - break; - case 'RC2-40-CBC': - dkLen = 5; - cipherFn = function(key) { - return forge.rc2.createDecryptionCipher(key, 40); - }; - break; - case 'RC2-64-CBC': - dkLen = 8; - cipherFn = function(key) { - return forge.rc2.createDecryptionCipher(key, 64); - }; - break; - case 'RC2-128-CBC': - dkLen = 16; - cipherFn = function(key) { - return forge.rc2.createDecryptionCipher(key, 128); - }; - break; - default: - var error = new Error('Could not decrypt private key; unsupported ' + - 'encryption algorithm "' + msg.dekInfo.algorithm + '".'); - error.algorithm = msg.dekInfo.algorithm; - throw error; - } - - // use OpenSSL legacy key derivation - var iv = forge.util.hexToBytes(msg.dekInfo.parameters); - var dk = forge.pbe.opensslDeriveBytes(password, iv.substr(0, 8), dkLen); - var cipher = cipherFn(dk); - cipher.start(iv); - cipher.update(forge.util.createBuffer(msg.body)); - if(cipher.finish()) { - rval = cipher.output.getBytes(); - } else { - return rval; - } - } else { - rval = msg.body; - } - - if(msg.type === 'ENCRYPTED PRIVATE KEY') { - rval = pki.decryptPrivateKeyInfo(asn1.fromDer(rval), password); - } else { - // decryption already performed above - rval = asn1.fromDer(rval); - } - - if(rval !== null) { - rval = pki.privateKeyFromAsn1(rval); - } - - return rval; -}; - -/** - * Derives a PKCS#12 key. - * - * @param password the password to derive the key material from, null or - * undefined for none. - * @param salt the salt, as a ByteBuffer, to use. - * @param id the PKCS#12 ID byte (1 = key material, 2 = IV, 3 = MAC). - * @param iter the iteration count. - * @param n the number of bytes to derive from the password. - * @param md the message digest to use, defaults to SHA-1. - * - * @return a ByteBuffer with the bytes derived from the password. - */ -pki.pbe.generatePkcs12Key = function(password, salt, id, iter, n, md) { - var j, l; - - if(typeof md === 'undefined' || md === null) { - if(!('sha1' in forge.md)) { - throw new Error('"sha1" hash algorithm unavailable.'); - } - md = forge.md.sha1.create(); - } - - var u = md.digestLength; - var v = md.blockLength; - var result = new forge.util.ByteBuffer(); - - /* Convert password to Unicode byte buffer + trailing 0-byte. */ - var passBuf = new forge.util.ByteBuffer(); - if(password !== null && password !== undefined) { - for(l = 0; l < password.length; l++) { - passBuf.putInt16(password.charCodeAt(l)); - } - passBuf.putInt16(0); - } - - /* Length of salt and password in BYTES. */ - var p = passBuf.length(); - var s = salt.length(); - - /* 1. Construct a string, D (the "diversifier"), by concatenating - v copies of ID. */ - var D = new forge.util.ByteBuffer(); - D.fillWithByte(id, v); - - /* 2. Concatenate copies of the salt together to create a string S of length - v * ceil(s / v) bytes (the final copy of the salt may be trunacted - to create S). - Note that if the salt is the empty string, then so is S. */ - var Slen = v * Math.ceil(s / v); - var S = new forge.util.ByteBuffer(); - for(l = 0; l < Slen; l++) { - S.putByte(salt.at(l % s)); - } - - /* 3. Concatenate copies of the password together to create a string P of - length v * ceil(p / v) bytes (the final copy of the password may be - truncated to create P). - Note that if the password is the empty string, then so is P. */ - var Plen = v * Math.ceil(p / v); - var P = new forge.util.ByteBuffer(); - for(l = 0; l < Plen; l++) { - P.putByte(passBuf.at(l % p)); - } - - /* 4. Set I=S||P to be the concatenation of S and P. */ - var I = S; - I.putBuffer(P); - - /* 5. Set c=ceil(n / u). */ - var c = Math.ceil(n / u); - - /* 6. For i=1, 2, ..., c, do the following: */ - for(var i = 1; i <= c; i++) { - /* a) Set Ai=H^r(D||I). (l.e. the rth hash of D||I, H(H(H(...H(D||I)))) */ - var buf = new forge.util.ByteBuffer(); - buf.putBytes(D.bytes()); - buf.putBytes(I.bytes()); - for(var round = 0; round < iter; round++) { - md.start(); - md.update(buf.getBytes()); - buf = md.digest(); - } - - /* b) Concatenate copies of Ai to create a string B of length v bytes (the - final copy of Ai may be truncated to create B). */ - var B = new forge.util.ByteBuffer(); - for(l = 0; l < v; l++) { - B.putByte(buf.at(l % u)); - } - - /* c) Treating I as a concatenation I0, I1, ..., Ik-1 of v-byte blocks, - where k=ceil(s / v) + ceil(p / v), modify I by setting - Ij=(Ij+B+1) mod 2v for each j. */ - var k = Math.ceil(s / v) + Math.ceil(p / v); - var Inew = new forge.util.ByteBuffer(); - for(j = 0; j < k; j++) { - var chunk = new forge.util.ByteBuffer(I.getBytes(v)); - var x = 0x1ff; - for(l = B.length() - 1; l >= 0; l--) { - x = x >> 8; - x += B.at(l) + chunk.at(l); - chunk.setAt(l, x & 0xff); - } - Inew.putBuffer(chunk); - } - I = Inew; - - /* Add Ai to A. */ - result.putBuffer(buf); - } - - result.truncate(result.length() - n); - return result; -}; - -/** - * Get new Forge cipher object instance. - * - * @param oid the OID (in string notation). - * @param params the ASN.1 params object. - * @param password the password to decrypt with. - * - * @return new cipher object instance. - */ -pki.pbe.getCipher = function(oid, params, password) { - switch(oid) { - case pki.oids['pkcs5PBES2']: - return pki.pbe.getCipherForPBES2(oid, params, password); - - case pki.oids['pbeWithSHAAnd3-KeyTripleDES-CBC']: - case pki.oids['pbewithSHAAnd40BitRC2-CBC']: - return pki.pbe.getCipherForPKCS12PBE(oid, params, password); - - default: - var error = new Error('Cannot read encrypted PBE data block. Unsupported OID.'); - error.oid = oid; - error.supportedOids = [ - 'pkcs5PBES2', - 'pbeWithSHAAnd3-KeyTripleDES-CBC', - 'pbewithSHAAnd40BitRC2-CBC' - ]; - throw error; - } -}; - -/** - * Get new Forge cipher object instance according to PBES2 params block. - * - * The returned cipher instance is already started using the IV - * from PBES2 parameter block. - * - * @param oid the PKCS#5 PBKDF2 OID (in string notation). - * @param params the ASN.1 PBES2-params object. - * @param password the password to decrypt with. - * - * @return new cipher object instance. - */ -pki.pbe.getCipherForPBES2 = function(oid, params, password) { - // get PBE params - var capture = {}; - var errors = []; - if(!asn1.validate(params, PBES2AlgorithmsValidator, capture, errors)) { - var error = new Error('Cannot read password-based-encryption algorithm ' + - 'parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.'); - error.errors = errors; - throw error; - } - - // check oids - oid = asn1.derToOid(capture.kdfOid); - if(oid !== pki.oids['pkcs5PBKDF2']) { - var error = new Error('Cannot read encrypted private key. ' + - 'Unsupported key derivation function OID.'); - error.oid = oid; - error.supportedOids = ['pkcs5PBKDF2']; - throw error; - } - oid = asn1.derToOid(capture.encOid); - if(oid !== pki.oids['aes128-CBC'] && - oid !== pki.oids['aes192-CBC'] && - oid !== pki.oids['aes256-CBC'] && - oid !== pki.oids['des-EDE3-CBC'] && - oid !== pki.oids['desCBC']) { - var error = new Error('Cannot read encrypted private key. ' + - 'Unsupported encryption scheme OID.'); - error.oid = oid; - error.supportedOids = [ - 'aes128-CBC', 'aes192-CBC', 'aes256-CBC', 'des-EDE3-CBC', 'desCBC']; - throw error; - } - - // set PBE params - var salt = capture.kdfSalt; - var count = forge.util.createBuffer(capture.kdfIterationCount); - count = count.getInt(count.length() << 3); - var dkLen; - var cipherFn; - switch(pki.oids[oid]) { - case 'aes128-CBC': - dkLen = 16; - cipherFn = forge.aes.createDecryptionCipher; - break; - case 'aes192-CBC': - dkLen = 24; - cipherFn = forge.aes.createDecryptionCipher; - break; - case 'aes256-CBC': - dkLen = 32; - cipherFn = forge.aes.createDecryptionCipher; - break; - case 'des-EDE3-CBC': - dkLen = 24; - cipherFn = forge.des.createDecryptionCipher; - break; - case 'desCBC': - dkLen = 8; - cipherFn = forge.des.createDecryptionCipher; - break; - } - - // get PRF message digest - var md = prfOidToMessageDigest(capture.prfOid); - - // decrypt private key using pbe with chosen PRF and AES/DES - var dk = forge.pkcs5.pbkdf2(password, salt, count, dkLen, md); - var iv = capture.encIv; - var cipher = cipherFn(dk); - cipher.start(iv); - - return cipher; -}; - -/** - * Get new Forge cipher object instance for PKCS#12 PBE. - * - * The returned cipher instance is already started using the key & IV - * derived from the provided password and PKCS#12 PBE salt. - * - * @param oid The PKCS#12 PBE OID (in string notation). - * @param params The ASN.1 PKCS#12 PBE-params object. - * @param password The password to decrypt with. - * - * @return the new cipher object instance. - */ -pki.pbe.getCipherForPKCS12PBE = function(oid, params, password) { - // get PBE params - var capture = {}; - var errors = []; - if(!asn1.validate(params, pkcs12PbeParamsValidator, capture, errors)) { - var error = new Error('Cannot read password-based-encryption algorithm ' + - 'parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.'); - error.errors = errors; - throw error; - } - - var salt = forge.util.createBuffer(capture.salt); - var count = forge.util.createBuffer(capture.iterations); - count = count.getInt(count.length() << 3); - - var dkLen, dIvLen, cipherFn; - switch(oid) { - case pki.oids['pbeWithSHAAnd3-KeyTripleDES-CBC']: - dkLen = 24; - dIvLen = 8; - cipherFn = forge.des.startDecrypting; - break; - - case pki.oids['pbewithSHAAnd40BitRC2-CBC']: - dkLen = 5; - dIvLen = 8; - cipherFn = function(key, iv) { - var cipher = forge.rc2.createDecryptionCipher(key, 40); - cipher.start(iv, null); - return cipher; - }; - break; - - default: - var error = new Error('Cannot read PKCS #12 PBE data block. Unsupported OID.'); - error.oid = oid; - throw error; - } - - // get PRF message digest - var md = prfOidToMessageDigest(capture.prfOid); - var key = pki.pbe.generatePkcs12Key(password, salt, 1, count, dkLen, md); - md.start(); - var iv = pki.pbe.generatePkcs12Key(password, salt, 2, count, dIvLen, md); - - return cipherFn(key, iv); -}; - -/** - * OpenSSL's legacy key derivation function. - * - * See: http://www.openssl.org/docs/crypto/EVP_BytesToKey.html - * - * @param password the password to derive the key from. - * @param salt the salt to use, null for none. - * @param dkLen the number of bytes needed for the derived key. - * @param [options] the options to use: - * [md] an optional message digest object to use. - */ -pki.pbe.opensslDeriveBytes = function(password, salt, dkLen, md) { - if(typeof md === 'undefined' || md === null) { - if(!('md5' in forge.md)) { - throw new Error('"md5" hash algorithm unavailable.'); - } - md = forge.md.md5.create(); - } - if(salt === null) { - salt = ''; - } - var digests = [hash(md, password + salt)]; - for(var length = 16, i = 1; length < dkLen; ++i, length += 16) { - digests.push(hash(md, digests[i - 1] + password + salt)); - } - return digests.join('').substr(0, dkLen); -}; - -function hash(md, bytes) { - return md.start().update(bytes).digest().getBytes(); -} - -function prfOidToMessageDigest(prfOid) { - // get PRF algorithm, default to SHA-1 - var prfAlgorithm; - if(!prfOid) { - prfAlgorithm = 'hmacWithSHA1'; - } else { - prfAlgorithm = pki.oids[asn1.derToOid(prfOid)]; - if(!prfAlgorithm) { - var error = new Error('Unsupported PRF OID.'); - error.oid = prfOid; - error.supported = [ - 'hmacWithSHA1', 'hmacWithSHA224', 'hmacWithSHA256', 'hmacWithSHA384', - 'hmacWithSHA512']; - throw error; - } - } - return prfAlgorithmToMessageDigest(prfAlgorithm); -} - -function prfAlgorithmToMessageDigest(prfAlgorithm) { - var factory = forge.md; - switch(prfAlgorithm) { - case 'hmacWithSHA224': - factory = forge.md.sha512; - case 'hmacWithSHA1': - case 'hmacWithSHA256': - case 'hmacWithSHA384': - case 'hmacWithSHA512': - prfAlgorithm = prfAlgorithm.substr(8).toLowerCase(); - break; - default: - var error = new Error('Unsupported PRF algorithm.'); - error.algorithm = prfAlgorithm; - error.supported = [ - 'hmacWithSHA1', 'hmacWithSHA224', 'hmacWithSHA256', 'hmacWithSHA384', - 'hmacWithSHA512']; - throw error; - } - if(!factory || !(prfAlgorithm in factory)) { - throw new Error('Unknown hash algorithm: ' + prfAlgorithm); - } - return factory[prfAlgorithm].create(); -} - -function createPbkdf2Params(salt, countBytes, dkLen, prfAlgorithm) { - var params = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // salt - asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, salt), - // iteration count - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - countBytes.getBytes()) - ]); - // when PRF algorithm is not SHA-1 default, add key length and PRF algorithm - if(prfAlgorithm !== 'hmacWithSHA1') { - params.value.push( - // key length - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - forge.util.hexToBytes(dkLen.toString(16))), - // AlgorithmIdentifier - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // algorithm - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(pki.oids[prfAlgorithm]).getBytes()), - // parameters (null) - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '') - ])); - } - return params; -} diff --git a/reverse_engineering/node_modules/node-forge/lib/pbkdf2.js b/reverse_engineering/node_modules/node-forge/lib/pbkdf2.js deleted file mode 100644 index 714560e..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/pbkdf2.js +++ /dev/null @@ -1,211 +0,0 @@ -/** - * Password-Based Key-Derivation Function #2 implementation. - * - * See RFC 2898 for details. - * - * @author Dave Longley - * - * Copyright (c) 2010-2013 Digital Bazaar, Inc. - */ -var forge = require('./forge'); -require('./hmac'); -require('./md'); -require('./util'); - -var pkcs5 = forge.pkcs5 = forge.pkcs5 || {}; - -var crypto; -if(forge.util.isNodejs && !forge.options.usePureJavaScript) { - crypto = require('crypto'); -} - -/** - * Derives a key from a password. - * - * @param p the password as a binary-encoded string of bytes. - * @param s the salt as a binary-encoded string of bytes. - * @param c the iteration count, a positive integer. - * @param dkLen the intended length, in bytes, of the derived key, - * (max: 2^32 - 1) * hash length of the PRF. - * @param [md] the message digest (or algorithm identifier as a string) to use - * in the PRF, defaults to SHA-1. - * @param [callback(err, key)] presence triggers asynchronous version, called - * once the operation completes. - * - * @return the derived key, as a binary-encoded string of bytes, for the - * synchronous version (if no callback is specified). - */ -module.exports = forge.pbkdf2 = pkcs5.pbkdf2 = function( - p, s, c, dkLen, md, callback) { - if(typeof md === 'function') { - callback = md; - md = null; - } - - // use native implementation if possible and not disabled, note that - // some node versions only support SHA-1, others allow digest to be changed - if(forge.util.isNodejs && !forge.options.usePureJavaScript && - crypto.pbkdf2 && (md === null || typeof md !== 'object') && - (crypto.pbkdf2Sync.length > 4 || (!md || md === 'sha1'))) { - if(typeof md !== 'string') { - // default prf to SHA-1 - md = 'sha1'; - } - p = Buffer.from(p, 'binary'); - s = Buffer.from(s, 'binary'); - if(!callback) { - if(crypto.pbkdf2Sync.length === 4) { - return crypto.pbkdf2Sync(p, s, c, dkLen).toString('binary'); - } - return crypto.pbkdf2Sync(p, s, c, dkLen, md).toString('binary'); - } - if(crypto.pbkdf2Sync.length === 4) { - return crypto.pbkdf2(p, s, c, dkLen, function(err, key) { - if(err) { - return callback(err); - } - callback(null, key.toString('binary')); - }); - } - return crypto.pbkdf2(p, s, c, dkLen, md, function(err, key) { - if(err) { - return callback(err); - } - callback(null, key.toString('binary')); - }); - } - - if(typeof md === 'undefined' || md === null) { - // default prf to SHA-1 - md = 'sha1'; - } - if(typeof md === 'string') { - if(!(md in forge.md.algorithms)) { - throw new Error('Unknown hash algorithm: ' + md); - } - md = forge.md[md].create(); - } - - var hLen = md.digestLength; - - /* 1. If dkLen > (2^32 - 1) * hLen, output "derived key too long" and - stop. */ - if(dkLen > (0xFFFFFFFF * hLen)) { - var err = new Error('Derived key is too long.'); - if(callback) { - return callback(err); - } - throw err; - } - - /* 2. Let len be the number of hLen-octet blocks in the derived key, - rounding up, and let r be the number of octets in the last - block: - - len = CEIL(dkLen / hLen), - r = dkLen - (len - 1) * hLen. */ - var len = Math.ceil(dkLen / hLen); - var r = dkLen - (len - 1) * hLen; - - /* 3. For each block of the derived key apply the function F defined - below to the password P, the salt S, the iteration count c, and - the block index to compute the block: - - T_1 = F(P, S, c, 1), - T_2 = F(P, S, c, 2), - ... - T_len = F(P, S, c, len), - - where the function F is defined as the exclusive-or sum of the - first c iterates of the underlying pseudorandom function PRF - applied to the password P and the concatenation of the salt S - and the block index i: - - F(P, S, c, i) = u_1 XOR u_2 XOR ... XOR u_c - - where - - u_1 = PRF(P, S || INT(i)), - u_2 = PRF(P, u_1), - ... - u_c = PRF(P, u_{c-1}). - - Here, INT(i) is a four-octet encoding of the integer i, most - significant octet first. */ - var prf = forge.hmac.create(); - prf.start(md, p); - var dk = ''; - var xor, u_c, u_c1; - - // sync version - if(!callback) { - for(var i = 1; i <= len; ++i) { - // PRF(P, S || INT(i)) (first iteration) - prf.start(null, null); - prf.update(s); - prf.update(forge.util.int32ToBytes(i)); - xor = u_c1 = prf.digest().getBytes(); - - // PRF(P, u_{c-1}) (other iterations) - for(var j = 2; j <= c; ++j) { - prf.start(null, null); - prf.update(u_c1); - u_c = prf.digest().getBytes(); - // F(p, s, c, i) - xor = forge.util.xorBytes(xor, u_c, hLen); - u_c1 = u_c; - } - - /* 4. Concatenate the blocks and extract the first dkLen octets to - produce a derived key DK: - - DK = T_1 || T_2 || ... || T_len<0..r-1> */ - dk += (i < len) ? xor : xor.substr(0, r); - } - /* 5. Output the derived key DK. */ - return dk; - } - - // async version - var i = 1, j; - function outer() { - if(i > len) { - // done - return callback(null, dk); - } - - // PRF(P, S || INT(i)) (first iteration) - prf.start(null, null); - prf.update(s); - prf.update(forge.util.int32ToBytes(i)); - xor = u_c1 = prf.digest().getBytes(); - - // PRF(P, u_{c-1}) (other iterations) - j = 2; - inner(); - } - - function inner() { - if(j <= c) { - prf.start(null, null); - prf.update(u_c1); - u_c = prf.digest().getBytes(); - // F(p, s, c, i) - xor = forge.util.xorBytes(xor, u_c, hLen); - u_c1 = u_c; - ++j; - return forge.util.setImmediate(inner); - } - - /* 4. Concatenate the blocks and extract the first dkLen octets to - produce a derived key DK: - - DK = T_1 || T_2 || ... || T_len<0..r-1> */ - dk += (i < len) ? xor : xor.substr(0, r); - - ++i; - outer(); - } - - outer(); -}; diff --git a/reverse_engineering/node_modules/node-forge/lib/pem.js b/reverse_engineering/node_modules/node-forge/lib/pem.js deleted file mode 100644 index aed8bdf..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/pem.js +++ /dev/null @@ -1,230 +0,0 @@ -/** - * Javascript implementation of basic PEM (Privacy Enhanced Mail) algorithms. - * - * See: RFC 1421. - * - * @author Dave Longley - * - * Copyright (c) 2013-2014 Digital Bazaar, Inc. - * - * A Forge PEM object has the following fields: - * - * type: identifies the type of message (eg: "RSA PRIVATE KEY"). - * - * procType: identifies the type of processing performed on the message, - * it has two subfields: version and type, eg: 4,ENCRYPTED. - * - * contentDomain: identifies the type of content in the message, typically - * only uses the value: "RFC822". - * - * dekInfo: identifies the message encryption algorithm and mode and includes - * any parameters for the algorithm, it has two subfields: algorithm and - * parameters, eg: DES-CBC,F8143EDE5960C597. - * - * headers: contains all other PEM encapsulated headers -- where order is - * significant (for pairing data like recipient ID + key info). - * - * body: the binary-encoded body. - */ -var forge = require('./forge'); -require('./util'); - -// shortcut for pem API -var pem = module.exports = forge.pem = forge.pem || {}; - -/** - * Encodes (serializes) the given PEM object. - * - * @param msg the PEM message object to encode. - * @param options the options to use: - * maxline the maximum characters per line for the body, (default: 64). - * - * @return the PEM-formatted string. - */ -pem.encode = function(msg, options) { - options = options || {}; - var rval = '-----BEGIN ' + msg.type + '-----\r\n'; - - // encode special headers - var header; - if(msg.procType) { - header = { - name: 'Proc-Type', - values: [String(msg.procType.version), msg.procType.type] - }; - rval += foldHeader(header); - } - if(msg.contentDomain) { - header = {name: 'Content-Domain', values: [msg.contentDomain]}; - rval += foldHeader(header); - } - if(msg.dekInfo) { - header = {name: 'DEK-Info', values: [msg.dekInfo.algorithm]}; - if(msg.dekInfo.parameters) { - header.values.push(msg.dekInfo.parameters); - } - rval += foldHeader(header); - } - - if(msg.headers) { - // encode all other headers - for(var i = 0; i < msg.headers.length; ++i) { - rval += foldHeader(msg.headers[i]); - } - } - - // terminate header - if(msg.procType) { - rval += '\r\n'; - } - - // add body - rval += forge.util.encode64(msg.body, options.maxline || 64) + '\r\n'; - - rval += '-----END ' + msg.type + '-----\r\n'; - return rval; -}; - -/** - * Decodes (deserializes) all PEM messages found in the given string. - * - * @param str the PEM-formatted string to decode. - * - * @return the PEM message objects in an array. - */ -pem.decode = function(str) { - var rval = []; - - // split string into PEM messages (be lenient w/EOF on BEGIN line) - var rMessage = /\s*-----BEGIN ([A-Z0-9- ]+)-----\r?\n?([\x21-\x7e\s]+?(?:\r?\n\r?\n))?([:A-Za-z0-9+\/=\s]+?)-----END \1-----/g; - var rHeader = /([\x21-\x7e]+):\s*([\x21-\x7e\s^:]+)/; - var rCRLF = /\r?\n/; - var match; - while(true) { - match = rMessage.exec(str); - if(!match) { - break; - } - - var msg = { - type: match[1], - procType: null, - contentDomain: null, - dekInfo: null, - headers: [], - body: forge.util.decode64(match[3]) - }; - rval.push(msg); - - // no headers - if(!match[2]) { - continue; - } - - // parse headers - var lines = match[2].split(rCRLF); - var li = 0; - while(match && li < lines.length) { - // get line, trim any rhs whitespace - var line = lines[li].replace(/\s+$/, ''); - - // RFC2822 unfold any following folded lines - for(var nl = li + 1; nl < lines.length; ++nl) { - var next = lines[nl]; - if(!/\s/.test(next[0])) { - break; - } - line += next; - li = nl; - } - - // parse header - match = line.match(rHeader); - if(match) { - var header = {name: match[1], values: []}; - var values = match[2].split(','); - for(var vi = 0; vi < values.length; ++vi) { - header.values.push(ltrim(values[vi])); - } - - // Proc-Type must be the first header - if(!msg.procType) { - if(header.name !== 'Proc-Type') { - throw new Error('Invalid PEM formatted message. The first ' + - 'encapsulated header must be "Proc-Type".'); - } else if(header.values.length !== 2) { - throw new Error('Invalid PEM formatted message. The "Proc-Type" ' + - 'header must have two subfields.'); - } - msg.procType = {version: values[0], type: values[1]}; - } else if(!msg.contentDomain && header.name === 'Content-Domain') { - // special-case Content-Domain - msg.contentDomain = values[0] || ''; - } else if(!msg.dekInfo && header.name === 'DEK-Info') { - // special-case DEK-Info - if(header.values.length === 0) { - throw new Error('Invalid PEM formatted message. The "DEK-Info" ' + - 'header must have at least one subfield.'); - } - msg.dekInfo = {algorithm: values[0], parameters: values[1] || null}; - } else { - msg.headers.push(header); - } - } - - ++li; - } - - if(msg.procType === 'ENCRYPTED' && !msg.dekInfo) { - throw new Error('Invalid PEM formatted message. The "DEK-Info" ' + - 'header must be present if "Proc-Type" is "ENCRYPTED".'); - } - } - - if(rval.length === 0) { - throw new Error('Invalid PEM formatted message.'); - } - - return rval; -}; - -function foldHeader(header) { - var rval = header.name + ': '; - - // ensure values with CRLF are folded - var values = []; - var insertSpace = function(match, $1) { - return ' ' + $1; - }; - for(var i = 0; i < header.values.length; ++i) { - values.push(header.values[i].replace(/^(\S+\r\n)/, insertSpace)); - } - rval += values.join(',') + '\r\n'; - - // do folding - var length = 0; - var candidate = -1; - for(var i = 0; i < rval.length; ++i, ++length) { - if(length > 65 && candidate !== -1) { - var insert = rval[candidate]; - if(insert === ',') { - ++candidate; - rval = rval.substr(0, candidate) + '\r\n ' + rval.substr(candidate); - } else { - rval = rval.substr(0, candidate) + - '\r\n' + insert + rval.substr(candidate + 1); - } - length = (i - candidate - 1); - candidate = -1; - ++i; - } else if(rval[i] === ' ' || rval[i] === '\t' || rval[i] === ',') { - candidate = i; - } - } - - return rval; -} - -function ltrim(str) { - return str.replace(/^\s+/, ''); -} diff --git a/reverse_engineering/node_modules/node-forge/lib/pkcs1.js b/reverse_engineering/node_modules/node-forge/lib/pkcs1.js deleted file mode 100644 index a3af924..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/pkcs1.js +++ /dev/null @@ -1,276 +0,0 @@ -/** - * Partial implementation of PKCS#1 v2.2: RSA-OEAP - * - * Modified but based on the following MIT and BSD licensed code: - * - * https://github.com/kjur/jsjws/blob/master/rsa.js: - * - * The 'jsjws'(JSON Web Signature JavaScript Library) License - * - * Copyright (c) 2012 Kenji Urushima - * - * 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. - * - * http://webrsa.cvs.sourceforge.net/viewvc/webrsa/Client/RSAES-OAEP.js?content-type=text%2Fplain: - * - * RSAES-OAEP.js - * $Id: RSAES-OAEP.js,v 1.1.1.1 2003/03/19 15:37:20 ellispritchard Exp $ - * JavaScript Implementation of PKCS #1 v2.1 RSA CRYPTOGRAPHY STANDARD (RSA Laboratories, June 14, 2002) - * Copyright (C) Ellis Pritchard, Guardian Unlimited 2003. - * Contact: ellis@nukinetics.com - * Distributed under the BSD License. - * - * Official documentation: http://www.rsa.com/rsalabs/node.asp?id=2125 - * - * @author Evan Jones (http://evanjones.ca/) - * @author Dave Longley - * - * Copyright (c) 2013-2014 Digital Bazaar, Inc. - */ -var forge = require('./forge'); -require('./util'); -require('./random'); -require('./sha1'); - -// shortcut for PKCS#1 API -var pkcs1 = module.exports = forge.pkcs1 = forge.pkcs1 || {}; - -/** - * Encode the given RSAES-OAEP message (M) using key, with optional label (L) - * and seed. - * - * This method does not perform RSA encryption, it only encodes the message - * using RSAES-OAEP. - * - * @param key the RSA key to use. - * @param message the message to encode. - * @param options the options to use: - * label an optional label to use. - * seed the seed to use. - * md the message digest object to use, undefined for SHA-1. - * mgf1 optional mgf1 parameters: - * md the message digest object to use for MGF1. - * - * @return the encoded message bytes. - */ -pkcs1.encode_rsa_oaep = function(key, message, options) { - // parse arguments - var label; - var seed; - var md; - var mgf1Md; - // legacy args (label, seed, md) - if(typeof options === 'string') { - label = options; - seed = arguments[3] || undefined; - md = arguments[4] || undefined; - } else if(options) { - label = options.label || undefined; - seed = options.seed || undefined; - md = options.md || undefined; - if(options.mgf1 && options.mgf1.md) { - mgf1Md = options.mgf1.md; - } - } - - // default OAEP to SHA-1 message digest - if(!md) { - md = forge.md.sha1.create(); - } else { - md.start(); - } - - // default MGF-1 to same as OAEP - if(!mgf1Md) { - mgf1Md = md; - } - - // compute length in bytes and check output - var keyLength = Math.ceil(key.n.bitLength() / 8); - var maxLength = keyLength - 2 * md.digestLength - 2; - if(message.length > maxLength) { - var error = new Error('RSAES-OAEP input message length is too long.'); - error.length = message.length; - error.maxLength = maxLength; - throw error; - } - - if(!label) { - label = ''; - } - md.update(label, 'raw'); - var lHash = md.digest(); - - var PS = ''; - var PS_length = maxLength - message.length; - for(var i = 0; i < PS_length; i++) { - PS += '\x00'; - } - - var DB = lHash.getBytes() + PS + '\x01' + message; - - if(!seed) { - seed = forge.random.getBytes(md.digestLength); - } else if(seed.length !== md.digestLength) { - var error = new Error('Invalid RSAES-OAEP seed. The seed length must ' + - 'match the digest length.'); - error.seedLength = seed.length; - error.digestLength = md.digestLength; - throw error; - } - - var dbMask = rsa_mgf1(seed, keyLength - md.digestLength - 1, mgf1Md); - var maskedDB = forge.util.xorBytes(DB, dbMask, DB.length); - - var seedMask = rsa_mgf1(maskedDB, md.digestLength, mgf1Md); - var maskedSeed = forge.util.xorBytes(seed, seedMask, seed.length); - - // return encoded message - return '\x00' + maskedSeed + maskedDB; -}; - -/** - * Decode the given RSAES-OAEP encoded message (EM) using key, with optional - * label (L). - * - * This method does not perform RSA decryption, it only decodes the message - * using RSAES-OAEP. - * - * @param key the RSA key to use. - * @param em the encoded message to decode. - * @param options the options to use: - * label an optional label to use. - * md the message digest object to use for OAEP, undefined for SHA-1. - * mgf1 optional mgf1 parameters: - * md the message digest object to use for MGF1. - * - * @return the decoded message bytes. - */ -pkcs1.decode_rsa_oaep = function(key, em, options) { - // parse args - var label; - var md; - var mgf1Md; - // legacy args - if(typeof options === 'string') { - label = options; - md = arguments[3] || undefined; - } else if(options) { - label = options.label || undefined; - md = options.md || undefined; - if(options.mgf1 && options.mgf1.md) { - mgf1Md = options.mgf1.md; - } - } - - // compute length in bytes - var keyLength = Math.ceil(key.n.bitLength() / 8); - - if(em.length !== keyLength) { - var error = new Error('RSAES-OAEP encoded message length is invalid.'); - error.length = em.length; - error.expectedLength = keyLength; - throw error; - } - - // default OAEP to SHA-1 message digest - if(md === undefined) { - md = forge.md.sha1.create(); - } else { - md.start(); - } - - // default MGF-1 to same as OAEP - if(!mgf1Md) { - mgf1Md = md; - } - - if(keyLength < 2 * md.digestLength + 2) { - throw new Error('RSAES-OAEP key is too short for the hash function.'); - } - - if(!label) { - label = ''; - } - md.update(label, 'raw'); - var lHash = md.digest().getBytes(); - - // split the message into its parts - var y = em.charAt(0); - var maskedSeed = em.substring(1, md.digestLength + 1); - var maskedDB = em.substring(1 + md.digestLength); - - var seedMask = rsa_mgf1(maskedDB, md.digestLength, mgf1Md); - var seed = forge.util.xorBytes(maskedSeed, seedMask, maskedSeed.length); - - var dbMask = rsa_mgf1(seed, keyLength - md.digestLength - 1, mgf1Md); - var db = forge.util.xorBytes(maskedDB, dbMask, maskedDB.length); - - var lHashPrime = db.substring(0, md.digestLength); - - // constant time check that all values match what is expected - var error = (y !== '\x00'); - - // constant time check lHash vs lHashPrime - for(var i = 0; i < md.digestLength; ++i) { - error |= (lHash.charAt(i) !== lHashPrime.charAt(i)); - } - - // "constant time" find the 0x1 byte separating the padding (zeros) from the - // message - // TODO: It must be possible to do this in a better/smarter way? - var in_ps = 1; - var index = md.digestLength; - for(var j = md.digestLength; j < db.length; j++) { - var code = db.charCodeAt(j); - - var is_0 = (code & 0x1) ^ 0x1; - - // non-zero if not 0 or 1 in the ps section - var error_mask = in_ps ? 0xfffe : 0x0000; - error |= (code & error_mask); - - // latch in_ps to zero after we find 0x1 - in_ps = in_ps & is_0; - index += in_ps; - } - - if(error || db.charCodeAt(index) !== 0x1) { - throw new Error('Invalid RSAES-OAEP padding.'); - } - - return db.substring(index + 1); -}; - -function rsa_mgf1(seed, maskLength, hash) { - // default to SHA-1 message digest - if(!hash) { - hash = forge.md.sha1.create(); - } - var t = ''; - var count = Math.ceil(maskLength / hash.digestLength); - for(var i = 0; i < count; ++i) { - var c = String.fromCharCode( - (i >> 24) & 0xFF, (i >> 16) & 0xFF, (i >> 8) & 0xFF, i & 0xFF); - hash.start(); - hash.update(seed + c); - t += hash.digest().getBytes(); - } - return t.substring(0, maskLength); -} diff --git a/reverse_engineering/node_modules/node-forge/lib/pkcs12.js b/reverse_engineering/node_modules/node-forge/lib/pkcs12.js deleted file mode 100644 index cd06c49..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/pkcs12.js +++ /dev/null @@ -1,1074 +0,0 @@ -/** - * Javascript implementation of PKCS#12. - * - * @author Dave Longley - * @author Stefan Siegl - * - * Copyright (c) 2010-2014 Digital Bazaar, Inc. - * Copyright (c) 2012 Stefan Siegl - * - * The ASN.1 representation of PKCS#12 is as follows - * (see ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-12/pkcs-12-tc1.pdf for details) - * - * PFX ::= SEQUENCE { - * version INTEGER {v3(3)}(v3,...), - * authSafe ContentInfo, - * macData MacData OPTIONAL - * } - * - * MacData ::= SEQUENCE { - * mac DigestInfo, - * macSalt OCTET STRING, - * iterations INTEGER DEFAULT 1 - * } - * Note: The iterations default is for historical reasons and its use is - * deprecated. A higher value, like 1024, is recommended. - * - * DigestInfo is defined in PKCS#7 as follows: - * - * DigestInfo ::= SEQUENCE { - * digestAlgorithm DigestAlgorithmIdentifier, - * digest Digest - * } - * - * DigestAlgorithmIdentifier ::= AlgorithmIdentifier - * - * The AlgorithmIdentifier contains an Object Identifier (OID) and parameters - * for the algorithm, if any. In the case of SHA1 there is none. - * - * AlgorithmIdentifer ::= SEQUENCE { - * algorithm OBJECT IDENTIFIER, - * parameters ANY DEFINED BY algorithm OPTIONAL - * } - * - * Digest ::= OCTET STRING - * - * - * ContentInfo ::= SEQUENCE { - * contentType ContentType, - * content [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL - * } - * - * ContentType ::= OBJECT IDENTIFIER - * - * AuthenticatedSafe ::= SEQUENCE OF ContentInfo - * -- Data if unencrypted - * -- EncryptedData if password-encrypted - * -- EnvelopedData if public key-encrypted - * - * - * SafeContents ::= SEQUENCE OF SafeBag - * - * SafeBag ::= SEQUENCE { - * bagId BAG-TYPE.&id ({PKCS12BagSet}) - * bagValue [0] EXPLICIT BAG-TYPE.&Type({PKCS12BagSet}{@bagId}), - * bagAttributes SET OF PKCS12Attribute OPTIONAL - * } - * - * PKCS12Attribute ::= SEQUENCE { - * attrId ATTRIBUTE.&id ({PKCS12AttrSet}), - * attrValues SET OF ATTRIBUTE.&Type ({PKCS12AttrSet}{@attrId}) - * } -- This type is compatible with the X.500 type 'Attribute' - * - * PKCS12AttrSet ATTRIBUTE ::= { - * friendlyName | -- from PKCS #9 - * localKeyId, -- from PKCS #9 - * ... -- Other attributes are allowed - * } - * - * CertBag ::= SEQUENCE { - * certId BAG-TYPE.&id ({CertTypes}), - * certValue [0] EXPLICIT BAG-TYPE.&Type ({CertTypes}{@certId}) - * } - * - * x509Certificate BAG-TYPE ::= {OCTET STRING IDENTIFIED BY {certTypes 1}} - * -- DER-encoded X.509 certificate stored in OCTET STRING - * - * sdsiCertificate BAG-TYPE ::= {IA5String IDENTIFIED BY {certTypes 2}} - * -- Base64-encoded SDSI certificate stored in IA5String - * - * CertTypes BAG-TYPE ::= { - * x509Certificate | - * sdsiCertificate, - * ... -- For future extensions - * } - */ -var forge = require('./forge'); -require('./asn1'); -require('./hmac'); -require('./oids'); -require('./pkcs7asn1'); -require('./pbe'); -require('./random'); -require('./rsa'); -require('./sha1'); -require('./util'); -require('./x509'); - -// shortcut for asn.1 & PKI API -var asn1 = forge.asn1; -var pki = forge.pki; - -// shortcut for PKCS#12 API -var p12 = module.exports = forge.pkcs12 = forge.pkcs12 || {}; - -var contentInfoValidator = { - name: 'ContentInfo', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, // a ContentInfo - constructed: true, - value: [{ - name: 'ContentInfo.contentType', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OID, - constructed: false, - capture: 'contentType' - }, { - name: 'ContentInfo.content', - tagClass: asn1.Class.CONTEXT_SPECIFIC, - constructed: true, - captureAsn1: 'content' - }] -}; - -var pfxValidator = { - name: 'PFX', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'PFX.version', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.INTEGER, - constructed: false, - capture: 'version' - }, - contentInfoValidator, { - name: 'PFX.macData', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - optional: true, - captureAsn1: 'mac', - value: [{ - name: 'PFX.macData.mac', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, // DigestInfo - constructed: true, - value: [{ - name: 'PFX.macData.mac.digestAlgorithm', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, // DigestAlgorithmIdentifier - constructed: true, - value: [{ - name: 'PFX.macData.mac.digestAlgorithm.algorithm', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OID, - constructed: false, - capture: 'macAlgorithm' - }, { - name: 'PFX.macData.mac.digestAlgorithm.parameters', - tagClass: asn1.Class.UNIVERSAL, - captureAsn1: 'macAlgorithmParameters' - }] - }, { - name: 'PFX.macData.mac.digest', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OCTETSTRING, - constructed: false, - capture: 'macDigest' - }] - }, { - name: 'PFX.macData.macSalt', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OCTETSTRING, - constructed: false, - capture: 'macSalt' - }, { - name: 'PFX.macData.iterations', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.INTEGER, - constructed: false, - optional: true, - capture: 'macIterations' - }] - }] -}; - -var safeBagValidator = { - name: 'SafeBag', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'SafeBag.bagId', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OID, - constructed: false, - capture: 'bagId' - }, { - name: 'SafeBag.bagValue', - tagClass: asn1.Class.CONTEXT_SPECIFIC, - constructed: true, - captureAsn1: 'bagValue' - }, { - name: 'SafeBag.bagAttributes', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SET, - constructed: true, - optional: true, - capture: 'bagAttributes' - }] -}; - -var attributeValidator = { - name: 'Attribute', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'Attribute.attrId', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OID, - constructed: false, - capture: 'oid' - }, { - name: 'Attribute.attrValues', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SET, - constructed: true, - capture: 'values' - }] -}; - -var certBagValidator = { - name: 'CertBag', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'CertBag.certId', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OID, - constructed: false, - capture: 'certId' - }, { - name: 'CertBag.certValue', - tagClass: asn1.Class.CONTEXT_SPECIFIC, - constructed: true, - /* So far we only support X.509 certificates (which are wrapped in - an OCTET STRING, hence hard code that here). */ - value: [{ - name: 'CertBag.certValue[0]', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Class.OCTETSTRING, - constructed: false, - capture: 'cert' - }] - }] -}; - -/** - * Search SafeContents structure for bags with matching attributes. - * - * The search can optionally be narrowed by a certain bag type. - * - * @param safeContents the SafeContents structure to search in. - * @param attrName the name of the attribute to compare against. - * @param attrValue the attribute value to search for. - * @param [bagType] bag type to narrow search by. - * - * @return an array of matching bags. - */ -function _getBagsByAttribute(safeContents, attrName, attrValue, bagType) { - var result = []; - - for(var i = 0; i < safeContents.length; i++) { - for(var j = 0; j < safeContents[i].safeBags.length; j++) { - var bag = safeContents[i].safeBags[j]; - if(bagType !== undefined && bag.type !== bagType) { - continue; - } - // only filter by bag type, no attribute specified - if(attrName === null) { - result.push(bag); - continue; - } - if(bag.attributes[attrName] !== undefined && - bag.attributes[attrName].indexOf(attrValue) >= 0) { - result.push(bag); - } - } - } - - return result; -} - -/** - * Converts a PKCS#12 PFX in ASN.1 notation into a PFX object. - * - * @param obj The PKCS#12 PFX in ASN.1 notation. - * @param strict true to use strict DER decoding, false not to (default: true). - * @param {String} password Password to decrypt with (optional). - * - * @return PKCS#12 PFX object. - */ -p12.pkcs12FromAsn1 = function(obj, strict, password) { - // handle args - if(typeof strict === 'string') { - password = strict; - strict = true; - } else if(strict === undefined) { - strict = true; - } - - // validate PFX and capture data - var capture = {}; - var errors = []; - if(!asn1.validate(obj, pfxValidator, capture, errors)) { - var error = new Error('Cannot read PKCS#12 PFX. ' + - 'ASN.1 object is not an PKCS#12 PFX.'); - error.errors = error; - throw error; - } - - var pfx = { - version: capture.version.charCodeAt(0), - safeContents: [], - - /** - * Gets bags with matching attributes. - * - * @param filter the attributes to filter by: - * [localKeyId] the localKeyId to search for. - * [localKeyIdHex] the localKeyId in hex to search for. - * [friendlyName] the friendly name to search for. - * [bagType] bag type to narrow each attribute search by. - * - * @return a map of attribute type to an array of matching bags or, if no - * attribute was given but a bag type, the map key will be the - * bag type. - */ - getBags: function(filter) { - var rval = {}; - - var localKeyId; - if('localKeyId' in filter) { - localKeyId = filter.localKeyId; - } else if('localKeyIdHex' in filter) { - localKeyId = forge.util.hexToBytes(filter.localKeyIdHex); - } - - // filter on bagType only - if(localKeyId === undefined && !('friendlyName' in filter) && - 'bagType' in filter) { - rval[filter.bagType] = _getBagsByAttribute( - pfx.safeContents, null, null, filter.bagType); - } - - if(localKeyId !== undefined) { - rval.localKeyId = _getBagsByAttribute( - pfx.safeContents, 'localKeyId', - localKeyId, filter.bagType); - } - if('friendlyName' in filter) { - rval.friendlyName = _getBagsByAttribute( - pfx.safeContents, 'friendlyName', - filter.friendlyName, filter.bagType); - } - - return rval; - }, - - /** - * DEPRECATED: use getBags() instead. - * - * Get bags with matching friendlyName attribute. - * - * @param friendlyName the friendly name to search for. - * @param [bagType] bag type to narrow search by. - * - * @return an array of bags with matching friendlyName attribute. - */ - getBagsByFriendlyName: function(friendlyName, bagType) { - return _getBagsByAttribute( - pfx.safeContents, 'friendlyName', friendlyName, bagType); - }, - - /** - * DEPRECATED: use getBags() instead. - * - * Get bags with matching localKeyId attribute. - * - * @param localKeyId the localKeyId to search for. - * @param [bagType] bag type to narrow search by. - * - * @return an array of bags with matching localKeyId attribute. - */ - getBagsByLocalKeyId: function(localKeyId, bagType) { - return _getBagsByAttribute( - pfx.safeContents, 'localKeyId', localKeyId, bagType); - } - }; - - if(capture.version.charCodeAt(0) !== 3) { - var error = new Error('PKCS#12 PFX of version other than 3 not supported.'); - error.version = capture.version.charCodeAt(0); - throw error; - } - - if(asn1.derToOid(capture.contentType) !== pki.oids.data) { - var error = new Error('Only PKCS#12 PFX in password integrity mode supported.'); - error.oid = asn1.derToOid(capture.contentType); - throw error; - } - - var data = capture.content.value[0]; - if(data.tagClass !== asn1.Class.UNIVERSAL || - data.type !== asn1.Type.OCTETSTRING) { - throw new Error('PKCS#12 authSafe content data is not an OCTET STRING.'); - } - data = _decodePkcs7Data(data); - - // check for MAC - if(capture.mac) { - var md = null; - var macKeyBytes = 0; - var macAlgorithm = asn1.derToOid(capture.macAlgorithm); - switch(macAlgorithm) { - case pki.oids.sha1: - md = forge.md.sha1.create(); - macKeyBytes = 20; - break; - case pki.oids.sha256: - md = forge.md.sha256.create(); - macKeyBytes = 32; - break; - case pki.oids.sha384: - md = forge.md.sha384.create(); - macKeyBytes = 48; - break; - case pki.oids.sha512: - md = forge.md.sha512.create(); - macKeyBytes = 64; - break; - case pki.oids.md5: - md = forge.md.md5.create(); - macKeyBytes = 16; - break; - } - if(md === null) { - throw new Error('PKCS#12 uses unsupported MAC algorithm: ' + macAlgorithm); - } - - // verify MAC (iterations default to 1) - var macSalt = new forge.util.ByteBuffer(capture.macSalt); - var macIterations = (('macIterations' in capture) ? - parseInt(forge.util.bytesToHex(capture.macIterations), 16) : 1); - var macKey = p12.generateKey( - password, macSalt, 3, macIterations, macKeyBytes, md); - var mac = forge.hmac.create(); - mac.start(md, macKey); - mac.update(data.value); - var macValue = mac.getMac(); - if(macValue.getBytes() !== capture.macDigest) { - throw new Error('PKCS#12 MAC could not be verified. Invalid password?'); - } - } - - _decodeAuthenticatedSafe(pfx, data.value, strict, password); - return pfx; -}; - -/** - * Decodes PKCS#7 Data. PKCS#7 (RFC 2315) defines "Data" as an OCTET STRING, - * but it is sometimes an OCTET STRING that is composed/constructed of chunks, - * each its own OCTET STRING. This is BER-encoding vs. DER-encoding. This - * function transforms this corner-case into the usual simple, - * non-composed/constructed OCTET STRING. - * - * This function may be moved to ASN.1 at some point to better deal with - * more BER-encoding issues, should they arise. - * - * @param data the ASN.1 Data object to transform. - */ -function _decodePkcs7Data(data) { - // handle special case of "chunked" data content: an octet string composed - // of other octet strings - if(data.composed || data.constructed) { - var value = forge.util.createBuffer(); - for(var i = 0; i < data.value.length; ++i) { - value.putBytes(data.value[i].value); - } - data.composed = data.constructed = false; - data.value = value.getBytes(); - } - return data; -} - -/** - * Decode PKCS#12 AuthenticatedSafe (BER encoded) into PFX object. - * - * The AuthenticatedSafe is a BER-encoded SEQUENCE OF ContentInfo. - * - * @param pfx The PKCS#12 PFX object to fill. - * @param {String} authSafe BER-encoded AuthenticatedSafe. - * @param strict true to use strict DER decoding, false not to. - * @param {String} password Password to decrypt with (optional). - */ -function _decodeAuthenticatedSafe(pfx, authSafe, strict, password) { - authSafe = asn1.fromDer(authSafe, strict); /* actually it's BER encoded */ - - if(authSafe.tagClass !== asn1.Class.UNIVERSAL || - authSafe.type !== asn1.Type.SEQUENCE || - authSafe.constructed !== true) { - throw new Error('PKCS#12 AuthenticatedSafe expected to be a ' + - 'SEQUENCE OF ContentInfo'); - } - - for(var i = 0; i < authSafe.value.length; i++) { - var contentInfo = authSafe.value[i]; - - // validate contentInfo and capture data - var capture = {}; - var errors = []; - if(!asn1.validate(contentInfo, contentInfoValidator, capture, errors)) { - var error = new Error('Cannot read ContentInfo.'); - error.errors = errors; - throw error; - } - - var obj = { - encrypted: false - }; - var safeContents = null; - var data = capture.content.value[0]; - switch(asn1.derToOid(capture.contentType)) { - case pki.oids.data: - if(data.tagClass !== asn1.Class.UNIVERSAL || - data.type !== asn1.Type.OCTETSTRING) { - throw new Error('PKCS#12 SafeContents Data is not an OCTET STRING.'); - } - safeContents = _decodePkcs7Data(data).value; - break; - case pki.oids.encryptedData: - safeContents = _decryptSafeContents(data, password); - obj.encrypted = true; - break; - default: - var error = new Error('Unsupported PKCS#12 contentType.'); - error.contentType = asn1.derToOid(capture.contentType); - throw error; - } - - obj.safeBags = _decodeSafeContents(safeContents, strict, password); - pfx.safeContents.push(obj); - } -} - -/** - * Decrypt PKCS#7 EncryptedData structure. - * - * @param data ASN.1 encoded EncryptedContentInfo object. - * @param password The user-provided password. - * - * @return The decrypted SafeContents (ASN.1 object). - */ -function _decryptSafeContents(data, password) { - var capture = {}; - var errors = []; - if(!asn1.validate( - data, forge.pkcs7.asn1.encryptedDataValidator, capture, errors)) { - var error = new Error('Cannot read EncryptedContentInfo.'); - error.errors = errors; - throw error; - } - - var oid = asn1.derToOid(capture.contentType); - if(oid !== pki.oids.data) { - var error = new Error( - 'PKCS#12 EncryptedContentInfo ContentType is not Data.'); - error.oid = oid; - throw error; - } - - // get cipher - oid = asn1.derToOid(capture.encAlgorithm); - var cipher = pki.pbe.getCipher(oid, capture.encParameter, password); - - // get encrypted data - var encryptedContentAsn1 = _decodePkcs7Data(capture.encryptedContentAsn1); - var encrypted = forge.util.createBuffer(encryptedContentAsn1.value); - - cipher.update(encrypted); - if(!cipher.finish()) { - throw new Error('Failed to decrypt PKCS#12 SafeContents.'); - } - - return cipher.output.getBytes(); -} - -/** - * Decode PKCS#12 SafeContents (BER-encoded) into array of Bag objects. - * - * The safeContents is a BER-encoded SEQUENCE OF SafeBag. - * - * @param {String} safeContents BER-encoded safeContents. - * @param strict true to use strict DER decoding, false not to. - * @param {String} password Password to decrypt with (optional). - * - * @return {Array} Array of Bag objects. - */ -function _decodeSafeContents(safeContents, strict, password) { - // if strict and no safe contents, return empty safes - if(!strict && safeContents.length === 0) { - return []; - } - - // actually it's BER-encoded - safeContents = asn1.fromDer(safeContents, strict); - - if(safeContents.tagClass !== asn1.Class.UNIVERSAL || - safeContents.type !== asn1.Type.SEQUENCE || - safeContents.constructed !== true) { - throw new Error( - 'PKCS#12 SafeContents expected to be a SEQUENCE OF SafeBag.'); - } - - var res = []; - for(var i = 0; i < safeContents.value.length; i++) { - var safeBag = safeContents.value[i]; - - // validate SafeBag and capture data - var capture = {}; - var errors = []; - if(!asn1.validate(safeBag, safeBagValidator, capture, errors)) { - var error = new Error('Cannot read SafeBag.'); - error.errors = errors; - throw error; - } - - /* Create bag object and push to result array. */ - var bag = { - type: asn1.derToOid(capture.bagId), - attributes: _decodeBagAttributes(capture.bagAttributes) - }; - res.push(bag); - - var validator, decoder; - var bagAsn1 = capture.bagValue.value[0]; - switch(bag.type) { - case pki.oids.pkcs8ShroudedKeyBag: - /* bagAsn1 has a EncryptedPrivateKeyInfo, which we need to decrypt. - Afterwards we can handle it like a keyBag, - which is a PrivateKeyInfo. */ - bagAsn1 = pki.decryptPrivateKeyInfo(bagAsn1, password); - if(bagAsn1 === null) { - throw new Error( - 'Unable to decrypt PKCS#8 ShroudedKeyBag, wrong password?'); - } - - /* fall through */ - case pki.oids.keyBag: - /* A PKCS#12 keyBag is a simple PrivateKeyInfo as understood by our - PKI module, hence we don't have to do validation/capturing here, - just pass what we already got. */ - try { - bag.key = pki.privateKeyFromAsn1(bagAsn1); - } catch(e) { - // ignore unknown key type, pass asn1 value - bag.key = null; - bag.asn1 = bagAsn1; - } - continue; /* Nothing more to do. */ - - case pki.oids.certBag: - /* A PKCS#12 certBag can wrap both X.509 and sdsi certificates. - Therefore put the SafeBag content through another validator to - capture the fields. Afterwards check & store the results. */ - validator = certBagValidator; - decoder = function() { - if(asn1.derToOid(capture.certId) !== pki.oids.x509Certificate) { - var error = new Error( - 'Unsupported certificate type, only X.509 supported.'); - error.oid = asn1.derToOid(capture.certId); - throw error; - } - - // true=produce cert hash - var certAsn1 = asn1.fromDer(capture.cert, strict); - try { - bag.cert = pki.certificateFromAsn1(certAsn1, true); - } catch(e) { - // ignore unknown cert type, pass asn1 value - bag.cert = null; - bag.asn1 = certAsn1; - } - }; - break; - - default: - var error = new Error('Unsupported PKCS#12 SafeBag type.'); - error.oid = bag.type; - throw error; - } - - /* Validate SafeBag value (i.e. CertBag, etc.) and capture data if needed. */ - if(validator !== undefined && - !asn1.validate(bagAsn1, validator, capture, errors)) { - var error = new Error('Cannot read PKCS#12 ' + validator.name); - error.errors = errors; - throw error; - } - - /* Call decoder function from above to store the results. */ - decoder(); - } - - return res; -} - -/** - * Decode PKCS#12 SET OF PKCS12Attribute into JavaScript object. - * - * @param attributes SET OF PKCS12Attribute (ASN.1 object). - * - * @return the decoded attributes. - */ -function _decodeBagAttributes(attributes) { - var decodedAttrs = {}; - - if(attributes !== undefined) { - for(var i = 0; i < attributes.length; ++i) { - var capture = {}; - var errors = []; - if(!asn1.validate(attributes[i], attributeValidator, capture, errors)) { - var error = new Error('Cannot read PKCS#12 BagAttribute.'); - error.errors = errors; - throw error; - } - - var oid = asn1.derToOid(capture.oid); - if(pki.oids[oid] === undefined) { - // unsupported attribute type, ignore. - continue; - } - - decodedAttrs[pki.oids[oid]] = []; - for(var j = 0; j < capture.values.length; ++j) { - decodedAttrs[pki.oids[oid]].push(capture.values[j].value); - } - } - } - - return decodedAttrs; -} - -/** - * Wraps a private key and certificate in a PKCS#12 PFX wrapper. If a - * password is provided then the private key will be encrypted. - * - * An entire certificate chain may also be included. To do this, pass - * an array for the "cert" parameter where the first certificate is - * the one that is paired with the private key and each subsequent one - * verifies the previous one. The certificates may be in PEM format or - * have been already parsed by Forge. - * - * @todo implement password-based-encryption for the whole package - * - * @param key the private key. - * @param cert the certificate (may be an array of certificates in order - * to specify a certificate chain). - * @param password the password to use, null for none. - * @param options: - * algorithm the encryption algorithm to use - * ('aes128', 'aes192', 'aes256', '3des'), defaults to 'aes128'. - * count the iteration count to use. - * saltSize the salt size to use. - * useMac true to include a MAC, false not to, defaults to true. - * localKeyId the local key ID to use, in hex. - * friendlyName the friendly name to use. - * generateLocalKeyId true to generate a random local key ID, - * false not to, defaults to true. - * - * @return the PKCS#12 PFX ASN.1 object. - */ -p12.toPkcs12Asn1 = function(key, cert, password, options) { - // set default options - options = options || {}; - options.saltSize = options.saltSize || 8; - options.count = options.count || 2048; - options.algorithm = options.algorithm || options.encAlgorithm || 'aes128'; - if(!('useMac' in options)) { - options.useMac = true; - } - if(!('localKeyId' in options)) { - options.localKeyId = null; - } - if(!('generateLocalKeyId' in options)) { - options.generateLocalKeyId = true; - } - - var localKeyId = options.localKeyId; - var bagAttrs; - if(localKeyId !== null) { - localKeyId = forge.util.hexToBytes(localKeyId); - } else if(options.generateLocalKeyId) { - // use SHA-1 of paired cert, if available - if(cert) { - var pairedCert = forge.util.isArray(cert) ? cert[0] : cert; - if(typeof pairedCert === 'string') { - pairedCert = pki.certificateFromPem(pairedCert); - } - var sha1 = forge.md.sha1.create(); - sha1.update(asn1.toDer(pki.certificateToAsn1(pairedCert)).getBytes()); - localKeyId = sha1.digest().getBytes(); - } else { - // FIXME: consider using SHA-1 of public key (which can be generated - // from private key components), see: cert.generateSubjectKeyIdentifier - // generate random bytes - localKeyId = forge.random.getBytes(20); - } - } - - var attrs = []; - if(localKeyId !== null) { - attrs.push( - // localKeyID - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // attrId - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(pki.oids.localKeyId).getBytes()), - // attrValues - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, [ - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, - localKeyId) - ]) - ])); - } - if('friendlyName' in options) { - attrs.push( - // friendlyName - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // attrId - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(pki.oids.friendlyName).getBytes()), - // attrValues - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, [ - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BMPSTRING, false, - options.friendlyName) - ]) - ])); - } - - if(attrs.length > 0) { - bagAttrs = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, attrs); - } - - // collect contents for AuthenticatedSafe - var contents = []; - - // create safe bag(s) for certificate chain - var chain = []; - if(cert !== null) { - if(forge.util.isArray(cert)) { - chain = cert; - } else { - chain = [cert]; - } - } - - var certSafeBags = []; - for(var i = 0; i < chain.length; ++i) { - // convert cert from PEM as necessary - cert = chain[i]; - if(typeof cert === 'string') { - cert = pki.certificateFromPem(cert); - } - - // SafeBag - var certBagAttrs = (i === 0) ? bagAttrs : undefined; - var certAsn1 = pki.certificateToAsn1(cert); - var certSafeBag = - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // bagId - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(pki.oids.certBag).getBytes()), - // bagValue - asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [ - // CertBag - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // certId - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(pki.oids.x509Certificate).getBytes()), - // certValue (x509Certificate) - asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [ - asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, - asn1.toDer(certAsn1).getBytes()) - ])])]), - // bagAttributes (OPTIONAL) - certBagAttrs - ]); - certSafeBags.push(certSafeBag); - } - - if(certSafeBags.length > 0) { - // SafeContents - var certSafeContents = asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, certSafeBags); - - // ContentInfo - var certCI = - // PKCS#7 ContentInfo - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // contentType - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - // OID for the content type is 'data' - asn1.oidToDer(pki.oids.data).getBytes()), - // content - asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [ - asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, - asn1.toDer(certSafeContents).getBytes()) - ]) - ]); - contents.push(certCI); - } - - // create safe contents for private key - var keyBag = null; - if(key !== null) { - // SafeBag - var pkAsn1 = pki.wrapRsaPrivateKey(pki.privateKeyToAsn1(key)); - if(password === null) { - // no encryption - keyBag = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // bagId - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(pki.oids.keyBag).getBytes()), - // bagValue - asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [ - // PrivateKeyInfo - pkAsn1 - ]), - // bagAttributes (OPTIONAL) - bagAttrs - ]); - } else { - // encrypted PrivateKeyInfo - keyBag = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // bagId - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(pki.oids.pkcs8ShroudedKeyBag).getBytes()), - // bagValue - asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [ - // EncryptedPrivateKeyInfo - pki.encryptPrivateKeyInfo(pkAsn1, password, options) - ]), - // bagAttributes (OPTIONAL) - bagAttrs - ]); - } - - // SafeContents - var keySafeContents = - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [keyBag]); - - // ContentInfo - var keyCI = - // PKCS#7 ContentInfo - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // contentType - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - // OID for the content type is 'data' - asn1.oidToDer(pki.oids.data).getBytes()), - // content - asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [ - asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, - asn1.toDer(keySafeContents).getBytes()) - ]) - ]); - contents.push(keyCI); - } - - // create AuthenticatedSafe by stringing together the contents - var safe = asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, contents); - - var macData; - if(options.useMac) { - // MacData - var sha1 = forge.md.sha1.create(); - var macSalt = new forge.util.ByteBuffer( - forge.random.getBytes(options.saltSize)); - var count = options.count; - // 160-bit key - var key = p12.generateKey(password, macSalt, 3, count, 20); - var mac = forge.hmac.create(); - mac.start(sha1, key); - mac.update(asn1.toDer(safe).getBytes()); - var macValue = mac.getMac(); - macData = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // mac DigestInfo - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // digestAlgorithm - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // algorithm = SHA-1 - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(pki.oids.sha1).getBytes()), - // parameters = Null - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '') - ]), - // digest - asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, - false, macValue.getBytes()) - ]), - // macSalt OCTET STRING - asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, macSalt.getBytes()), - // iterations INTEGER (XXX: Only support count < 65536) - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - asn1.integerToDer(count).getBytes() - ) - ]); - } - - // PFX - return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // version (3) - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - asn1.integerToDer(3).getBytes()), - // PKCS#7 ContentInfo - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // contentType - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - // OID for the content type is 'data' - asn1.oidToDer(pki.oids.data).getBytes()), - // content - asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [ - asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, - asn1.toDer(safe).getBytes()) - ]) - ]), - macData - ]); -}; - -/** - * Derives a PKCS#12 key. - * - * @param password the password to derive the key material from, null or - * undefined for none. - * @param salt the salt, as a ByteBuffer, to use. - * @param id the PKCS#12 ID byte (1 = key material, 2 = IV, 3 = MAC). - * @param iter the iteration count. - * @param n the number of bytes to derive from the password. - * @param md the message digest to use, defaults to SHA-1. - * - * @return a ByteBuffer with the bytes derived from the password. - */ -p12.generateKey = forge.pbe.generatePkcs12Key; diff --git a/reverse_engineering/node_modules/node-forge/lib/pkcs7.js b/reverse_engineering/node_modules/node-forge/lib/pkcs7.js deleted file mode 100644 index bb87de3..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/pkcs7.js +++ /dev/null @@ -1,1257 +0,0 @@ -/** - * Javascript implementation of PKCS#7 v1.5. - * - * @author Stefan Siegl - * @author Dave Longley - * - * Copyright (c) 2012 Stefan Siegl - * Copyright (c) 2012-2015 Digital Bazaar, Inc. - * - * Currently this implementation only supports ContentType of EnvelopedData, - * EncryptedData, or SignedData at the root level. The top level elements may - * contain only a ContentInfo of ContentType Data, i.e. plain data. Further - * nesting is not (yet) supported. - * - * The Forge validators for PKCS #7's ASN.1 structures are available from - * a separate file pkcs7asn1.js, since those are referenced from other - * PKCS standards like PKCS #12. - */ -var forge = require('./forge'); -require('./aes'); -require('./asn1'); -require('./des'); -require('./oids'); -require('./pem'); -require('./pkcs7asn1'); -require('./random'); -require('./util'); -require('./x509'); - -// shortcut for ASN.1 API -var asn1 = forge.asn1; - -// shortcut for PKCS#7 API -var p7 = module.exports = forge.pkcs7 = forge.pkcs7 || {}; - -/** - * Converts a PKCS#7 message from PEM format. - * - * @param pem the PEM-formatted PKCS#7 message. - * - * @return the PKCS#7 message. - */ -p7.messageFromPem = function(pem) { - var msg = forge.pem.decode(pem)[0]; - - if(msg.type !== 'PKCS7') { - var error = new Error('Could not convert PKCS#7 message from PEM; PEM ' + - 'header type is not "PKCS#7".'); - error.headerType = msg.type; - throw error; - } - if(msg.procType && msg.procType.type === 'ENCRYPTED') { - throw new Error('Could not convert PKCS#7 message from PEM; PEM is encrypted.'); - } - - // convert DER to ASN.1 object - var obj = asn1.fromDer(msg.body); - - return p7.messageFromAsn1(obj); -}; - -/** - * Converts a PKCS#7 message to PEM format. - * - * @param msg The PKCS#7 message object - * @param maxline The maximum characters per line, defaults to 64. - * - * @return The PEM-formatted PKCS#7 message. - */ -p7.messageToPem = function(msg, maxline) { - // convert to ASN.1, then DER, then PEM-encode - var pemObj = { - type: 'PKCS7', - body: asn1.toDer(msg.toAsn1()).getBytes() - }; - return forge.pem.encode(pemObj, {maxline: maxline}); -}; - -/** - * Converts a PKCS#7 message from an ASN.1 object. - * - * @param obj the ASN.1 representation of a ContentInfo. - * - * @return the PKCS#7 message. - */ -p7.messageFromAsn1 = function(obj) { - // validate root level ContentInfo and capture data - var capture = {}; - var errors = []; - if(!asn1.validate(obj, p7.asn1.contentInfoValidator, capture, errors)) { - var error = new Error('Cannot read PKCS#7 message. ' + - 'ASN.1 object is not an PKCS#7 ContentInfo.'); - error.errors = errors; - throw error; - } - - var contentType = asn1.derToOid(capture.contentType); - var msg; - - switch(contentType) { - case forge.pki.oids.envelopedData: - msg = p7.createEnvelopedData(); - break; - - case forge.pki.oids.encryptedData: - msg = p7.createEncryptedData(); - break; - - case forge.pki.oids.signedData: - msg = p7.createSignedData(); - break; - - default: - throw new Error('Cannot read PKCS#7 message. ContentType with OID ' + - contentType + ' is not (yet) supported.'); - } - - msg.fromAsn1(capture.content.value[0]); - return msg; -}; - -p7.createSignedData = function() { - var msg = null; - msg = { - type: forge.pki.oids.signedData, - version: 1, - certificates: [], - crls: [], - // TODO: add json-formatted signer stuff here? - signers: [], - // populated during sign() - digestAlgorithmIdentifiers: [], - contentInfo: null, - signerInfos: [], - - fromAsn1: function(obj) { - // validate SignedData content block and capture data. - _fromAsn1(msg, obj, p7.asn1.signedDataValidator); - msg.certificates = []; - msg.crls = []; - msg.digestAlgorithmIdentifiers = []; - msg.contentInfo = null; - msg.signerInfos = []; - - if(msg.rawCapture.certificates) { - var certs = msg.rawCapture.certificates.value; - for(var i = 0; i < certs.length; ++i) { - msg.certificates.push(forge.pki.certificateFromAsn1(certs[i])); - } - } - - // TODO: parse crls - }, - - toAsn1: function() { - // degenerate case with no content - if(!msg.contentInfo) { - msg.sign(); - } - - var certs = []; - for(var i = 0; i < msg.certificates.length; ++i) { - certs.push(forge.pki.certificateToAsn1(msg.certificates[i])); - } - - var crls = []; - // TODO: implement CRLs - - // [0] SignedData - var signedData = asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [ - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // Version - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - asn1.integerToDer(msg.version).getBytes()), - // DigestAlgorithmIdentifiers - asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.SET, true, - msg.digestAlgorithmIdentifiers), - // ContentInfo - msg.contentInfo - ]) - ]); - if(certs.length > 0) { - // [0] IMPLICIT ExtendedCertificatesAndCertificates OPTIONAL - signedData.value[0].value.push( - asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, certs)); - } - if(crls.length > 0) { - // [1] IMPLICIT CertificateRevocationLists OPTIONAL - signedData.value[0].value.push( - asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, crls)); - } - // SignerInfos - signedData.value[0].value.push( - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, - msg.signerInfos)); - - // ContentInfo - return asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // ContentType - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(msg.type).getBytes()), - // [0] SignedData - signedData - ]); - }, - - /** - * Add (another) entity to list of signers. - * - * Note: If authenticatedAttributes are provided, then, per RFC 2315, - * they must include at least two attributes: content type and - * message digest. The message digest attribute value will be - * auto-calculated during signing and will be ignored if provided. - * - * Here's an example of providing these two attributes: - * - * forge.pkcs7.createSignedData(); - * p7.addSigner({ - * issuer: cert.issuer.attributes, - * serialNumber: cert.serialNumber, - * key: privateKey, - * digestAlgorithm: forge.pki.oids.sha1, - * authenticatedAttributes: [{ - * type: forge.pki.oids.contentType, - * value: forge.pki.oids.data - * }, { - * type: forge.pki.oids.messageDigest - * }] - * }); - * - * TODO: Support [subjectKeyIdentifier] as signer's ID. - * - * @param signer the signer information: - * key the signer's private key. - * [certificate] a certificate containing the public key - * associated with the signer's private key; use this option as - * an alternative to specifying signer.issuer and - * signer.serialNumber. - * [issuer] the issuer attributes (eg: cert.issuer.attributes). - * [serialNumber] the signer's certificate's serial number in - * hexadecimal (eg: cert.serialNumber). - * [digestAlgorithm] the message digest OID, as a string, to use - * (eg: forge.pki.oids.sha1). - * [authenticatedAttributes] an optional array of attributes - * to also sign along with the content. - */ - addSigner: function(signer) { - var issuer = signer.issuer; - var serialNumber = signer.serialNumber; - if(signer.certificate) { - var cert = signer.certificate; - if(typeof cert === 'string') { - cert = forge.pki.certificateFromPem(cert); - } - issuer = cert.issuer.attributes; - serialNumber = cert.serialNumber; - } - var key = signer.key; - if(!key) { - throw new Error( - 'Could not add PKCS#7 signer; no private key specified.'); - } - if(typeof key === 'string') { - key = forge.pki.privateKeyFromPem(key); - } - - // ensure OID known for digest algorithm - var digestAlgorithm = signer.digestAlgorithm || forge.pki.oids.sha1; - switch(digestAlgorithm) { - case forge.pki.oids.sha1: - case forge.pki.oids.sha256: - case forge.pki.oids.sha384: - case forge.pki.oids.sha512: - case forge.pki.oids.md5: - break; - default: - throw new Error( - 'Could not add PKCS#7 signer; unknown message digest algorithm: ' + - digestAlgorithm); - } - - // if authenticatedAttributes is present, then the attributes - // must contain at least PKCS #9 content-type and message-digest - var authenticatedAttributes = signer.authenticatedAttributes || []; - if(authenticatedAttributes.length > 0) { - var contentType = false; - var messageDigest = false; - for(var i = 0; i < authenticatedAttributes.length; ++i) { - var attr = authenticatedAttributes[i]; - if(!contentType && attr.type === forge.pki.oids.contentType) { - contentType = true; - if(messageDigest) { - break; - } - continue; - } - if(!messageDigest && attr.type === forge.pki.oids.messageDigest) { - messageDigest = true; - if(contentType) { - break; - } - continue; - } - } - - if(!contentType || !messageDigest) { - throw new Error('Invalid signer.authenticatedAttributes. If ' + - 'signer.authenticatedAttributes is specified, then it must ' + - 'contain at least two attributes, PKCS #9 content-type and ' + - 'PKCS #9 message-digest.'); - } - } - - msg.signers.push({ - key: key, - version: 1, - issuer: issuer, - serialNumber: serialNumber, - digestAlgorithm: digestAlgorithm, - signatureAlgorithm: forge.pki.oids.rsaEncryption, - signature: null, - authenticatedAttributes: authenticatedAttributes, - unauthenticatedAttributes: [] - }); - }, - - /** - * Signs the content. - * @param options Options to apply when signing: - * [detached] boolean. If signing should be done in detached mode. Defaults to false. - */ - sign: function(options) { - options = options || {}; - // auto-generate content info - if(typeof msg.content !== 'object' || msg.contentInfo === null) { - // use Data ContentInfo - msg.contentInfo = asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // ContentType - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(forge.pki.oids.data).getBytes()) - ]); - - // add actual content, if present - if('content' in msg) { - var content; - if(msg.content instanceof forge.util.ByteBuffer) { - content = msg.content.bytes(); - } else if(typeof msg.content === 'string') { - content = forge.util.encodeUtf8(msg.content); - } - - if (options.detached) { - msg.detachedContent = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, content); - } else { - msg.contentInfo.value.push( - // [0] EXPLICIT content - asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [ - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, - content) - ])); - } - } - } - - // no signers, return early (degenerate case for certificate container) - if(msg.signers.length === 0) { - return; - } - - // generate digest algorithm identifiers - var mds = addDigestAlgorithmIds(); - - // generate signerInfos - addSignerInfos(mds); - }, - - verify: function() { - throw new Error('PKCS#7 signature verification not yet implemented.'); - }, - - /** - * Add a certificate. - * - * @param cert the certificate to add. - */ - addCertificate: function(cert) { - // convert from PEM - if(typeof cert === 'string') { - cert = forge.pki.certificateFromPem(cert); - } - msg.certificates.push(cert); - }, - - /** - * Add a certificate revokation list. - * - * @param crl the certificate revokation list to add. - */ - addCertificateRevokationList: function(crl) { - throw new Error('PKCS#7 CRL support not yet implemented.'); - } - }; - return msg; - - function addDigestAlgorithmIds() { - var mds = {}; - - for(var i = 0; i < msg.signers.length; ++i) { - var signer = msg.signers[i]; - var oid = signer.digestAlgorithm; - if(!(oid in mds)) { - // content digest - mds[oid] = forge.md[forge.pki.oids[oid]].create(); - } - if(signer.authenticatedAttributes.length === 0) { - // no custom attributes to digest; use content message digest - signer.md = mds[oid]; - } else { - // custom attributes to be digested; use own message digest - // TODO: optimize to just copy message digest state if that - // feature is ever supported with message digests - signer.md = forge.md[forge.pki.oids[oid]].create(); - } - } - - // add unique digest algorithm identifiers - msg.digestAlgorithmIdentifiers = []; - for(var oid in mds) { - msg.digestAlgorithmIdentifiers.push( - // AlgorithmIdentifier - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // algorithm - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(oid).getBytes()), - // parameters (null) - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '') - ])); - } - - return mds; - } - - function addSignerInfos(mds) { - var content; - - if (msg.detachedContent) { - // Signature has been made in detached mode. - content = msg.detachedContent; - } else { - // Note: ContentInfo is a SEQUENCE with 2 values, second value is - // the content field and is optional for a ContentInfo but required here - // since signers are present - // get ContentInfo content - content = msg.contentInfo.value[1]; - // skip [0] EXPLICIT content wrapper - content = content.value[0]; - } - - if(!content) { - throw new Error( - 'Could not sign PKCS#7 message; there is no content to sign.'); - } - - // get ContentInfo content type - var contentType = asn1.derToOid(msg.contentInfo.value[0].value); - - // serialize content - var bytes = asn1.toDer(content); - - // skip identifier and length per RFC 2315 9.3 - // skip identifier (1 byte) - bytes.getByte(); - // read and discard length bytes - asn1.getBerValueLength(bytes); - bytes = bytes.getBytes(); - - // digest content DER value bytes - for(var oid in mds) { - mds[oid].start().update(bytes); - } - - // sign content - var signingTime = new Date(); - for(var i = 0; i < msg.signers.length; ++i) { - var signer = msg.signers[i]; - - if(signer.authenticatedAttributes.length === 0) { - // if ContentInfo content type is not "Data", then - // authenticatedAttributes must be present per RFC 2315 - if(contentType !== forge.pki.oids.data) { - throw new Error( - 'Invalid signer; authenticatedAttributes must be present ' + - 'when the ContentInfo content type is not PKCS#7 Data.'); - } - } else { - // process authenticated attributes - // [0] IMPLICIT - signer.authenticatedAttributesAsn1 = asn1.create( - asn1.Class.CONTEXT_SPECIFIC, 0, true, []); - - // per RFC 2315, attributes are to be digested using a SET container - // not the above [0] IMPLICIT container - var attrsAsn1 = asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.SET, true, []); - - for(var ai = 0; ai < signer.authenticatedAttributes.length; ++ai) { - var attr = signer.authenticatedAttributes[ai]; - if(attr.type === forge.pki.oids.messageDigest) { - // use content message digest as value - attr.value = mds[signer.digestAlgorithm].digest(); - } else if(attr.type === forge.pki.oids.signingTime) { - // auto-populate signing time if not already set - if(!attr.value) { - attr.value = signingTime; - } - } - - // convert to ASN.1 and push onto Attributes SET (for signing) and - // onto authenticatedAttributesAsn1 to complete SignedData ASN.1 - // TODO: optimize away duplication - attrsAsn1.value.push(_attributeToAsn1(attr)); - signer.authenticatedAttributesAsn1.value.push(_attributeToAsn1(attr)); - } - - // DER-serialize and digest SET OF attributes only - bytes = asn1.toDer(attrsAsn1).getBytes(); - signer.md.start().update(bytes); - } - - // sign digest - signer.signature = signer.key.sign(signer.md, 'RSASSA-PKCS1-V1_5'); - } - - // add signer info - msg.signerInfos = _signersToAsn1(msg.signers); - } -}; - -/** - * Creates an empty PKCS#7 message of type EncryptedData. - * - * @return the message. - */ -p7.createEncryptedData = function() { - var msg = null; - msg = { - type: forge.pki.oids.encryptedData, - version: 0, - encryptedContent: { - algorithm: forge.pki.oids['aes256-CBC'] - }, - - /** - * Reads an EncryptedData content block (in ASN.1 format) - * - * @param obj The ASN.1 representation of the EncryptedData content block - */ - fromAsn1: function(obj) { - // Validate EncryptedData content block and capture data. - _fromAsn1(msg, obj, p7.asn1.encryptedDataValidator); - }, - - /** - * Decrypt encrypted content - * - * @param key The (symmetric) key as a byte buffer - */ - decrypt: function(key) { - if(key !== undefined) { - msg.encryptedContent.key = key; - } - _decryptContent(msg); - } - }; - return msg; -}; - -/** - * Creates an empty PKCS#7 message of type EnvelopedData. - * - * @return the message. - */ -p7.createEnvelopedData = function() { - var msg = null; - msg = { - type: forge.pki.oids.envelopedData, - version: 0, - recipients: [], - encryptedContent: { - algorithm: forge.pki.oids['aes256-CBC'] - }, - - /** - * Reads an EnvelopedData content block (in ASN.1 format) - * - * @param obj the ASN.1 representation of the EnvelopedData content block. - */ - fromAsn1: function(obj) { - // validate EnvelopedData content block and capture data - var capture = _fromAsn1(msg, obj, p7.asn1.envelopedDataValidator); - msg.recipients = _recipientsFromAsn1(capture.recipientInfos.value); - }, - - toAsn1: function() { - // ContentInfo - return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // ContentType - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(msg.type).getBytes()), - // [0] EnvelopedData - asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [ - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // Version - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - asn1.integerToDer(msg.version).getBytes()), - // RecipientInfos - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, - _recipientsToAsn1(msg.recipients)), - // EncryptedContentInfo - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, - _encryptedContentToAsn1(msg.encryptedContent)) - ]) - ]) - ]); - }, - - /** - * Find recipient by X.509 certificate's issuer. - * - * @param cert the certificate with the issuer to look for. - * - * @return the recipient object. - */ - findRecipient: function(cert) { - var sAttr = cert.issuer.attributes; - - for(var i = 0; i < msg.recipients.length; ++i) { - var r = msg.recipients[i]; - var rAttr = r.issuer; - - if(r.serialNumber !== cert.serialNumber) { - continue; - } - - if(rAttr.length !== sAttr.length) { - continue; - } - - var match = true; - for(var j = 0; j < sAttr.length; ++j) { - if(rAttr[j].type !== sAttr[j].type || - rAttr[j].value !== sAttr[j].value) { - match = false; - break; - } - } - - if(match) { - return r; - } - } - - return null; - }, - - /** - * Decrypt enveloped content - * - * @param recipient The recipient object related to the private key - * @param privKey The (RSA) private key object - */ - decrypt: function(recipient, privKey) { - if(msg.encryptedContent.key === undefined && recipient !== undefined && - privKey !== undefined) { - switch(recipient.encryptedContent.algorithm) { - case forge.pki.oids.rsaEncryption: - case forge.pki.oids.desCBC: - var key = privKey.decrypt(recipient.encryptedContent.content); - msg.encryptedContent.key = forge.util.createBuffer(key); - break; - - default: - throw new Error('Unsupported asymmetric cipher, ' + - 'OID ' + recipient.encryptedContent.algorithm); - } - } - - _decryptContent(msg); - }, - - /** - * Add (another) entity to list of recipients. - * - * @param cert The certificate of the entity to add. - */ - addRecipient: function(cert) { - msg.recipients.push({ - version: 0, - issuer: cert.issuer.attributes, - serialNumber: cert.serialNumber, - encryptedContent: { - // We simply assume rsaEncryption here, since forge.pki only - // supports RSA so far. If the PKI module supports other - // ciphers one day, we need to modify this one as well. - algorithm: forge.pki.oids.rsaEncryption, - key: cert.publicKey - } - }); - }, - - /** - * Encrypt enveloped content. - * - * This function supports two optional arguments, cipher and key, which - * can be used to influence symmetric encryption. Unless cipher is - * provided, the cipher specified in encryptedContent.algorithm is used - * (defaults to AES-256-CBC). If no key is provided, encryptedContent.key - * is (re-)used. If that one's not set, a random key will be generated - * automatically. - * - * @param [key] The key to be used for symmetric encryption. - * @param [cipher] The OID of the symmetric cipher to use. - */ - encrypt: function(key, cipher) { - // Part 1: Symmetric encryption - if(msg.encryptedContent.content === undefined) { - cipher = cipher || msg.encryptedContent.algorithm; - key = key || msg.encryptedContent.key; - - var keyLen, ivLen, ciphFn; - switch(cipher) { - case forge.pki.oids['aes128-CBC']: - keyLen = 16; - ivLen = 16; - ciphFn = forge.aes.createEncryptionCipher; - break; - - case forge.pki.oids['aes192-CBC']: - keyLen = 24; - ivLen = 16; - ciphFn = forge.aes.createEncryptionCipher; - break; - - case forge.pki.oids['aes256-CBC']: - keyLen = 32; - ivLen = 16; - ciphFn = forge.aes.createEncryptionCipher; - break; - - case forge.pki.oids['des-EDE3-CBC']: - keyLen = 24; - ivLen = 8; - ciphFn = forge.des.createEncryptionCipher; - break; - - default: - throw new Error('Unsupported symmetric cipher, OID ' + cipher); - } - - if(key === undefined) { - key = forge.util.createBuffer(forge.random.getBytes(keyLen)); - } else if(key.length() != keyLen) { - throw new Error('Symmetric key has wrong length; ' + - 'got ' + key.length() + ' bytes, expected ' + keyLen + '.'); - } - - // Keep a copy of the key & IV in the object, so the caller can - // use it for whatever reason. - msg.encryptedContent.algorithm = cipher; - msg.encryptedContent.key = key; - msg.encryptedContent.parameter = forge.util.createBuffer( - forge.random.getBytes(ivLen)); - - var ciph = ciphFn(key); - ciph.start(msg.encryptedContent.parameter.copy()); - ciph.update(msg.content); - - // The finish function does PKCS#7 padding by default, therefore - // no action required by us. - if(!ciph.finish()) { - throw new Error('Symmetric encryption failed.'); - } - - msg.encryptedContent.content = ciph.output; - } - - // Part 2: asymmetric encryption for each recipient - for(var i = 0; i < msg.recipients.length; ++i) { - var recipient = msg.recipients[i]; - - // Nothing to do, encryption already done. - if(recipient.encryptedContent.content !== undefined) { - continue; - } - - switch(recipient.encryptedContent.algorithm) { - case forge.pki.oids.rsaEncryption: - recipient.encryptedContent.content = - recipient.encryptedContent.key.encrypt( - msg.encryptedContent.key.data); - break; - - default: - throw new Error('Unsupported asymmetric cipher, OID ' + - recipient.encryptedContent.algorithm); - } - } - } - }; - return msg; -}; - -/** - * Converts a single recipient from an ASN.1 object. - * - * @param obj the ASN.1 RecipientInfo. - * - * @return the recipient object. - */ -function _recipientFromAsn1(obj) { - // validate EnvelopedData content block and capture data - var capture = {}; - var errors = []; - if(!asn1.validate(obj, p7.asn1.recipientInfoValidator, capture, errors)) { - var error = new Error('Cannot read PKCS#7 RecipientInfo. ' + - 'ASN.1 object is not an PKCS#7 RecipientInfo.'); - error.errors = errors; - throw error; - } - - return { - version: capture.version.charCodeAt(0), - issuer: forge.pki.RDNAttributesAsArray(capture.issuer), - serialNumber: forge.util.createBuffer(capture.serial).toHex(), - encryptedContent: { - algorithm: asn1.derToOid(capture.encAlgorithm), - parameter: capture.encParameter.value, - content: capture.encKey - } - }; -} - -/** - * Converts a single recipient object to an ASN.1 object. - * - * @param obj the recipient object. - * - * @return the ASN.1 RecipientInfo. - */ -function _recipientToAsn1(obj) { - return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // Version - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - asn1.integerToDer(obj.version).getBytes()), - // IssuerAndSerialNumber - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // Name - forge.pki.distinguishedNameToAsn1({attributes: obj.issuer}), - // Serial - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - forge.util.hexToBytes(obj.serialNumber)) - ]), - // KeyEncryptionAlgorithmIdentifier - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // Algorithm - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(obj.encryptedContent.algorithm).getBytes()), - // Parameter, force NULL, only RSA supported for now. - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '') - ]), - // EncryptedKey - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, - obj.encryptedContent.content) - ]); -} - -/** - * Map a set of RecipientInfo ASN.1 objects to recipient objects. - * - * @param infos an array of ASN.1 representations RecipientInfo (i.e. SET OF). - * - * @return an array of recipient objects. - */ -function _recipientsFromAsn1(infos) { - var ret = []; - for(var i = 0; i < infos.length; ++i) { - ret.push(_recipientFromAsn1(infos[i])); - } - return ret; -} - -/** - * Map an array of recipient objects to ASN.1 RecipientInfo objects. - * - * @param recipients an array of recipientInfo objects. - * - * @return an array of ASN.1 RecipientInfos. - */ -function _recipientsToAsn1(recipients) { - var ret = []; - for(var i = 0; i < recipients.length; ++i) { - ret.push(_recipientToAsn1(recipients[i])); - } - return ret; -} - -/** - * Converts a single signer from an ASN.1 object. - * - * @param obj the ASN.1 representation of a SignerInfo. - * - * @return the signer object. - */ -function _signerFromAsn1(obj) { - // validate EnvelopedData content block and capture data - var capture = {}; - var errors = []; - if(!asn1.validate(obj, p7.asn1.signerInfoValidator, capture, errors)) { - var error = new Error('Cannot read PKCS#7 SignerInfo. ' + - 'ASN.1 object is not an PKCS#7 SignerInfo.'); - error.errors = errors; - throw error; - } - - var rval = { - version: capture.version.charCodeAt(0), - issuer: forge.pki.RDNAttributesAsArray(capture.issuer), - serialNumber: forge.util.createBuffer(capture.serial).toHex(), - digestAlgorithm: asn1.derToOid(capture.digestAlgorithm), - signatureAlgorithm: asn1.derToOid(capture.signatureAlgorithm), - signature: capture.signature, - authenticatedAttributes: [], - unauthenticatedAttributes: [] - }; - - // TODO: convert attributes - var authenticatedAttributes = capture.authenticatedAttributes || []; - var unauthenticatedAttributes = capture.unauthenticatedAttributes || []; - - return rval; -} - -/** - * Converts a single signerInfo object to an ASN.1 object. - * - * @param obj the signerInfo object. - * - * @return the ASN.1 representation of a SignerInfo. - */ -function _signerToAsn1(obj) { - // SignerInfo - var rval = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // version - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - asn1.integerToDer(obj.version).getBytes()), - // issuerAndSerialNumber - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // name - forge.pki.distinguishedNameToAsn1({attributes: obj.issuer}), - // serial - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - forge.util.hexToBytes(obj.serialNumber)) - ]), - // digestAlgorithm - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // algorithm - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(obj.digestAlgorithm).getBytes()), - // parameters (null) - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '') - ]) - ]); - - // authenticatedAttributes (OPTIONAL) - if(obj.authenticatedAttributesAsn1) { - // add ASN.1 previously generated during signing - rval.value.push(obj.authenticatedAttributesAsn1); - } - - // digestEncryptionAlgorithm - rval.value.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // algorithm - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(obj.signatureAlgorithm).getBytes()), - // parameters (null) - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '') - ])); - - // encryptedDigest - rval.value.push(asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, obj.signature)); - - // unauthenticatedAttributes (OPTIONAL) - if(obj.unauthenticatedAttributes.length > 0) { - // [1] IMPLICIT - var attrsAsn1 = asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, []); - for(var i = 0; i < obj.unauthenticatedAttributes.length; ++i) { - var attr = obj.unauthenticatedAttributes[i]; - attrsAsn1.values.push(_attributeToAsn1(attr)); - } - rval.value.push(attrsAsn1); - } - - return rval; -} - -/** - * Map a set of SignerInfo ASN.1 objects to an array of signer objects. - * - * @param signerInfoAsn1s an array of ASN.1 SignerInfos (i.e. SET OF). - * - * @return an array of signers objects. - */ -function _signersFromAsn1(signerInfoAsn1s) { - var ret = []; - for(var i = 0; i < signerInfoAsn1s.length; ++i) { - ret.push(_signerFromAsn1(signerInfoAsn1s[i])); - } - return ret; -} - -/** - * Map an array of signer objects to ASN.1 objects. - * - * @param signers an array of signer objects. - * - * @return an array of ASN.1 SignerInfos. - */ -function _signersToAsn1(signers) { - var ret = []; - for(var i = 0; i < signers.length; ++i) { - ret.push(_signerToAsn1(signers[i])); - } - return ret; -} - -/** - * Convert an attribute object to an ASN.1 Attribute. - * - * @param attr the attribute object. - * - * @return the ASN.1 Attribute. - */ -function _attributeToAsn1(attr) { - var value; - - // TODO: generalize to support more attributes - if(attr.type === forge.pki.oids.contentType) { - value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(attr.value).getBytes()); - } else if(attr.type === forge.pki.oids.messageDigest) { - value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, - attr.value.bytes()); - } else if(attr.type === forge.pki.oids.signingTime) { - /* Note per RFC 2985: Dates between 1 January 1950 and 31 December 2049 - (inclusive) MUST be encoded as UTCTime. Any dates with year values - before 1950 or after 2049 MUST be encoded as GeneralizedTime. [Further,] - UTCTime values MUST be expressed in Greenwich Mean Time (Zulu) and MUST - include seconds (i.e., times are YYMMDDHHMMSSZ), even where the - number of seconds is zero. Midnight (GMT) must be represented as - "YYMMDD000000Z". */ - // TODO: make these module-level constants - var jan_1_1950 = new Date('1950-01-01T00:00:00Z'); - var jan_1_2050 = new Date('2050-01-01T00:00:00Z'); - var date = attr.value; - if(typeof date === 'string') { - // try to parse date - var timestamp = Date.parse(date); - if(!isNaN(timestamp)) { - date = new Date(timestamp); - } else if(date.length === 13) { - // YYMMDDHHMMSSZ (13 chars for UTCTime) - date = asn1.utcTimeToDate(date); - } else { - // assume generalized time - date = asn1.generalizedTimeToDate(date); - } - } - - if(date >= jan_1_1950 && date < jan_1_2050) { - value = asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.UTCTIME, false, - asn1.dateToUtcTime(date)); - } else { - value = asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.GENERALIZEDTIME, false, - asn1.dateToGeneralizedTime(date)); - } - } - - // TODO: expose as common API call - // create a RelativeDistinguishedName set - // each value in the set is an AttributeTypeAndValue first - // containing the type (an OID) and second the value - return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // AttributeType - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(attr.type).getBytes()), - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, [ - // AttributeValue - value - ]) - ]); -} - -/** - * Map messages encrypted content to ASN.1 objects. - * - * @param ec The encryptedContent object of the message. - * - * @return ASN.1 representation of the encryptedContent object (SEQUENCE). - */ -function _encryptedContentToAsn1(ec) { - return [ - // ContentType, always Data for the moment - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(forge.pki.oids.data).getBytes()), - // ContentEncryptionAlgorithmIdentifier - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // Algorithm - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(ec.algorithm).getBytes()), - // Parameters (IV) - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, - ec.parameter.getBytes()) - ]), - // [0] EncryptedContent - asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [ - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, - ec.content.getBytes()) - ]) - ]; -} - -/** - * Reads the "common part" of an PKCS#7 content block (in ASN.1 format) - * - * This function reads the "common part" of the PKCS#7 content blocks - * EncryptedData and EnvelopedData, i.e. version number and symmetrically - * encrypted content block. - * - * The result of the ASN.1 validate and capture process is returned - * to allow the caller to extract further data, e.g. the list of recipients - * in case of a EnvelopedData object. - * - * @param msg the PKCS#7 object to read the data to. - * @param obj the ASN.1 representation of the content block. - * @param validator the ASN.1 structure validator object to use. - * - * @return the value map captured by validator object. - */ -function _fromAsn1(msg, obj, validator) { - var capture = {}; - var errors = []; - if(!asn1.validate(obj, validator, capture, errors)) { - var error = new Error('Cannot read PKCS#7 message. ' + - 'ASN.1 object is not a supported PKCS#7 message.'); - error.errors = error; - throw error; - } - - // Check contentType, so far we only support (raw) Data. - var contentType = asn1.derToOid(capture.contentType); - if(contentType !== forge.pki.oids.data) { - throw new Error('Unsupported PKCS#7 message. ' + - 'Only wrapped ContentType Data supported.'); - } - - if(capture.encryptedContent) { - var content = ''; - if(forge.util.isArray(capture.encryptedContent)) { - for(var i = 0; i < capture.encryptedContent.length; ++i) { - if(capture.encryptedContent[i].type !== asn1.Type.OCTETSTRING) { - throw new Error('Malformed PKCS#7 message, expecting encrypted ' + - 'content constructed of only OCTET STRING objects.'); - } - content += capture.encryptedContent[i].value; - } - } else { - content = capture.encryptedContent; - } - msg.encryptedContent = { - algorithm: asn1.derToOid(capture.encAlgorithm), - parameter: forge.util.createBuffer(capture.encParameter.value), - content: forge.util.createBuffer(content) - }; - } - - if(capture.content) { - var content = ''; - if(forge.util.isArray(capture.content)) { - for(var i = 0; i < capture.content.length; ++i) { - if(capture.content[i].type !== asn1.Type.OCTETSTRING) { - throw new Error('Malformed PKCS#7 message, expecting ' + - 'content constructed of only OCTET STRING objects.'); - } - content += capture.content[i].value; - } - } else { - content = capture.content; - } - msg.content = forge.util.createBuffer(content); - } - - msg.version = capture.version.charCodeAt(0); - msg.rawCapture = capture; - - return capture; -} - -/** - * Decrypt the symmetrically encrypted content block of the PKCS#7 message. - * - * Decryption is skipped in case the PKCS#7 message object already has a - * (decrypted) content attribute. The algorithm, key and cipher parameters - * (probably the iv) are taken from the encryptedContent attribute of the - * message object. - * - * @param The PKCS#7 message object. - */ -function _decryptContent(msg) { - if(msg.encryptedContent.key === undefined) { - throw new Error('Symmetric key not available.'); - } - - if(msg.content === undefined) { - var ciph; - - switch(msg.encryptedContent.algorithm) { - case forge.pki.oids['aes128-CBC']: - case forge.pki.oids['aes192-CBC']: - case forge.pki.oids['aes256-CBC']: - ciph = forge.aes.createDecryptionCipher(msg.encryptedContent.key); - break; - - case forge.pki.oids['desCBC']: - case forge.pki.oids['des-EDE3-CBC']: - ciph = forge.des.createDecryptionCipher(msg.encryptedContent.key); - break; - - default: - throw new Error('Unsupported symmetric cipher, OID ' + - msg.encryptedContent.algorithm); - } - ciph.start(msg.encryptedContent.parameter); - ciph.update(msg.encryptedContent.content); - - if(!ciph.finish()) { - throw new Error('Symmetric decryption failed.'); - } - - msg.content = ciph.output; - } -} diff --git a/reverse_engineering/node_modules/node-forge/lib/pkcs7asn1.js b/reverse_engineering/node_modules/node-forge/lib/pkcs7asn1.js deleted file mode 100644 index a2ac01f..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/pkcs7asn1.js +++ /dev/null @@ -1,409 +0,0 @@ -/** - * Javascript implementation of ASN.1 validators for PKCS#7 v1.5. - * - * @author Dave Longley - * @author Stefan Siegl - * - * Copyright (c) 2012-2015 Digital Bazaar, Inc. - * Copyright (c) 2012 Stefan Siegl - * - * The ASN.1 representation of PKCS#7 is as follows - * (see RFC #2315 for details, http://www.ietf.org/rfc/rfc2315.txt): - * - * A PKCS#7 message consists of a ContentInfo on root level, which may - * contain any number of further ContentInfo nested into it. - * - * ContentInfo ::= SEQUENCE { - * contentType ContentType, - * content [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL - * } - * - * ContentType ::= OBJECT IDENTIFIER - * - * EnvelopedData ::= SEQUENCE { - * version Version, - * recipientInfos RecipientInfos, - * encryptedContentInfo EncryptedContentInfo - * } - * - * EncryptedData ::= SEQUENCE { - * version Version, - * encryptedContentInfo EncryptedContentInfo - * } - * - * id-signedData OBJECT IDENTIFIER ::= { iso(1) member-body(2) - * us(840) rsadsi(113549) pkcs(1) pkcs7(7) 2 } - * - * SignedData ::= SEQUENCE { - * version INTEGER, - * digestAlgorithms DigestAlgorithmIdentifiers, - * contentInfo ContentInfo, - * certificates [0] IMPLICIT Certificates OPTIONAL, - * crls [1] IMPLICIT CertificateRevocationLists OPTIONAL, - * signerInfos SignerInfos - * } - * - * SignerInfos ::= SET OF SignerInfo - * - * SignerInfo ::= SEQUENCE { - * version Version, - * issuerAndSerialNumber IssuerAndSerialNumber, - * digestAlgorithm DigestAlgorithmIdentifier, - * authenticatedAttributes [0] IMPLICIT Attributes OPTIONAL, - * digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier, - * encryptedDigest EncryptedDigest, - * unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL - * } - * - * EncryptedDigest ::= OCTET STRING - * - * Attributes ::= SET OF Attribute - * - * Attribute ::= SEQUENCE { - * attrType OBJECT IDENTIFIER, - * attrValues SET OF AttributeValue - * } - * - * AttributeValue ::= ANY - * - * Version ::= INTEGER - * - * RecipientInfos ::= SET OF RecipientInfo - * - * EncryptedContentInfo ::= SEQUENCE { - * contentType ContentType, - * contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier, - * encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL - * } - * - * ContentEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier - * - * The AlgorithmIdentifier contains an Object Identifier (OID) and parameters - * for the algorithm, if any. In the case of AES and DES3, there is only one, - * the IV. - * - * AlgorithmIdentifer ::= SEQUENCE { - * algorithm OBJECT IDENTIFIER, - * parameters ANY DEFINED BY algorithm OPTIONAL - * } - * - * EncryptedContent ::= OCTET STRING - * - * RecipientInfo ::= SEQUENCE { - * version Version, - * issuerAndSerialNumber IssuerAndSerialNumber, - * keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier, - * encryptedKey EncryptedKey - * } - * - * IssuerAndSerialNumber ::= SEQUENCE { - * issuer Name, - * serialNumber CertificateSerialNumber - * } - * - * CertificateSerialNumber ::= INTEGER - * - * KeyEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier - * - * EncryptedKey ::= OCTET STRING - */ -var forge = require('./forge'); -require('./asn1'); -require('./util'); - -// shortcut for ASN.1 API -var asn1 = forge.asn1; - -// shortcut for PKCS#7 API -var p7v = module.exports = forge.pkcs7asn1 = forge.pkcs7asn1 || {}; -forge.pkcs7 = forge.pkcs7 || {}; -forge.pkcs7.asn1 = p7v; - -var contentInfoValidator = { - name: 'ContentInfo', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'ContentInfo.ContentType', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OID, - constructed: false, - capture: 'contentType' - }, { - name: 'ContentInfo.content', - tagClass: asn1.Class.CONTEXT_SPECIFIC, - type: 0, - constructed: true, - optional: true, - captureAsn1: 'content' - }] -}; -p7v.contentInfoValidator = contentInfoValidator; - -var encryptedContentInfoValidator = { - name: 'EncryptedContentInfo', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'EncryptedContentInfo.contentType', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OID, - constructed: false, - capture: 'contentType' - }, { - name: 'EncryptedContentInfo.contentEncryptionAlgorithm', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'EncryptedContentInfo.contentEncryptionAlgorithm.algorithm', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OID, - constructed: false, - capture: 'encAlgorithm' - }, { - name: 'EncryptedContentInfo.contentEncryptionAlgorithm.parameter', - tagClass: asn1.Class.UNIVERSAL, - captureAsn1: 'encParameter' - }] - }, { - name: 'EncryptedContentInfo.encryptedContent', - tagClass: asn1.Class.CONTEXT_SPECIFIC, - type: 0, - /* The PKCS#7 structure output by OpenSSL somewhat differs from what - * other implementations do generate. - * - * OpenSSL generates a structure like this: - * SEQUENCE { - * ... - * [0] - * 26 DA 67 D2 17 9C 45 3C B1 2A A8 59 2F 29 33 38 - * C3 C3 DF 86 71 74 7A 19 9F 40 D0 29 BE 85 90 45 - * ... - * } - * - * Whereas other implementations (and this PKCS#7 module) generate: - * SEQUENCE { - * ... - * [0] { - * OCTET STRING - * 26 DA 67 D2 17 9C 45 3C B1 2A A8 59 2F 29 33 38 - * C3 C3 DF 86 71 74 7A 19 9F 40 D0 29 BE 85 90 45 - * ... - * } - * } - * - * In order to support both, we just capture the context specific - * field here. The OCTET STRING bit is removed below. - */ - capture: 'encryptedContent', - captureAsn1: 'encryptedContentAsn1' - }] -}; - -p7v.envelopedDataValidator = { - name: 'EnvelopedData', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'EnvelopedData.Version', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.INTEGER, - constructed: false, - capture: 'version' - }, { - name: 'EnvelopedData.RecipientInfos', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SET, - constructed: true, - captureAsn1: 'recipientInfos' - }].concat(encryptedContentInfoValidator) -}; - -p7v.encryptedDataValidator = { - name: 'EncryptedData', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'EncryptedData.Version', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.INTEGER, - constructed: false, - capture: 'version' - }].concat(encryptedContentInfoValidator) -}; - -var signerValidator = { - name: 'SignerInfo', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'SignerInfo.version', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.INTEGER, - constructed: false - }, { - name: 'SignerInfo.issuerAndSerialNumber', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'SignerInfo.issuerAndSerialNumber.issuer', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - captureAsn1: 'issuer' - }, { - name: 'SignerInfo.issuerAndSerialNumber.serialNumber', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.INTEGER, - constructed: false, - capture: 'serial' - }] - }, { - name: 'SignerInfo.digestAlgorithm', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'SignerInfo.digestAlgorithm.algorithm', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OID, - constructed: false, - capture: 'digestAlgorithm' - }, { - name: 'SignerInfo.digestAlgorithm.parameter', - tagClass: asn1.Class.UNIVERSAL, - constructed: false, - captureAsn1: 'digestParameter', - optional: true - }] - }, { - name: 'SignerInfo.authenticatedAttributes', - tagClass: asn1.Class.CONTEXT_SPECIFIC, - type: 0, - constructed: true, - optional: true, - capture: 'authenticatedAttributes' - }, { - name: 'SignerInfo.digestEncryptionAlgorithm', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - capture: 'signatureAlgorithm' - }, { - name: 'SignerInfo.encryptedDigest', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OCTETSTRING, - constructed: false, - capture: 'signature' - }, { - name: 'SignerInfo.unauthenticatedAttributes', - tagClass: asn1.Class.CONTEXT_SPECIFIC, - type: 1, - constructed: true, - optional: true, - capture: 'unauthenticatedAttributes' - }] -}; - -p7v.signedDataValidator = { - name: 'SignedData', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'SignedData.Version', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.INTEGER, - constructed: false, - capture: 'version' - }, { - name: 'SignedData.DigestAlgorithms', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SET, - constructed: true, - captureAsn1: 'digestAlgorithms' - }, - contentInfoValidator, - { - name: 'SignedData.Certificates', - tagClass: asn1.Class.CONTEXT_SPECIFIC, - type: 0, - optional: true, - captureAsn1: 'certificates' - }, { - name: 'SignedData.CertificateRevocationLists', - tagClass: asn1.Class.CONTEXT_SPECIFIC, - type: 1, - optional: true, - captureAsn1: 'crls' - }, { - name: 'SignedData.SignerInfos', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SET, - capture: 'signerInfos', - optional: true, - value: [signerValidator] - }] -}; - -p7v.recipientInfoValidator = { - name: 'RecipientInfo', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'RecipientInfo.version', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.INTEGER, - constructed: false, - capture: 'version' - }, { - name: 'RecipientInfo.issuerAndSerial', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'RecipientInfo.issuerAndSerial.issuer', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - captureAsn1: 'issuer' - }, { - name: 'RecipientInfo.issuerAndSerial.serialNumber', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.INTEGER, - constructed: false, - capture: 'serial' - }] - }, { - name: 'RecipientInfo.keyEncryptionAlgorithm', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'RecipientInfo.keyEncryptionAlgorithm.algorithm', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OID, - constructed: false, - capture: 'encAlgorithm' - }, { - name: 'RecipientInfo.keyEncryptionAlgorithm.parameter', - tagClass: asn1.Class.UNIVERSAL, - constructed: false, - captureAsn1: 'encParameter' - }] - }, { - name: 'RecipientInfo.encryptedKey', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OCTETSTRING, - constructed: false, - capture: 'encKey' - }] -}; diff --git a/reverse_engineering/node_modules/node-forge/lib/pki.js b/reverse_engineering/node_modules/node-forge/lib/pki.js deleted file mode 100644 index ee82ff1..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/pki.js +++ /dev/null @@ -1,102 +0,0 @@ -/** - * Javascript implementation of a basic Public Key Infrastructure, including - * support for RSA public and private keys. - * - * @author Dave Longley - * - * Copyright (c) 2010-2013 Digital Bazaar, Inc. - */ -var forge = require('./forge'); -require('./asn1'); -require('./oids'); -require('./pbe'); -require('./pem'); -require('./pbkdf2'); -require('./pkcs12'); -require('./pss'); -require('./rsa'); -require('./util'); -require('./x509'); - -// shortcut for asn.1 API -var asn1 = forge.asn1; - -/* Public Key Infrastructure (PKI) implementation. */ -var pki = module.exports = forge.pki = forge.pki || {}; - -/** - * NOTE: THIS METHOD IS DEPRECATED. Use pem.decode() instead. - * - * Converts PEM-formatted data to DER. - * - * @param pem the PEM-formatted data. - * - * @return the DER-formatted data. - */ -pki.pemToDer = function(pem) { - var msg = forge.pem.decode(pem)[0]; - if(msg.procType && msg.procType.type === 'ENCRYPTED') { - throw new Error('Could not convert PEM to DER; PEM is encrypted.'); - } - return forge.util.createBuffer(msg.body); -}; - -/** - * Converts an RSA private key from PEM format. - * - * @param pem the PEM-formatted private key. - * - * @return the private key. - */ -pki.privateKeyFromPem = function(pem) { - var msg = forge.pem.decode(pem)[0]; - - if(msg.type !== 'PRIVATE KEY' && msg.type !== 'RSA PRIVATE KEY') { - var error = new Error('Could not convert private key from PEM; PEM ' + - 'header type is not "PRIVATE KEY" or "RSA PRIVATE KEY".'); - error.headerType = msg.type; - throw error; - } - if(msg.procType && msg.procType.type === 'ENCRYPTED') { - throw new Error('Could not convert private key from PEM; PEM is encrypted.'); - } - - // convert DER to ASN.1 object - var obj = asn1.fromDer(msg.body); - - return pki.privateKeyFromAsn1(obj); -}; - -/** - * Converts an RSA private key to PEM format. - * - * @param key the private key. - * @param maxline the maximum characters per line, defaults to 64. - * - * @return the PEM-formatted private key. - */ -pki.privateKeyToPem = function(key, maxline) { - // convert to ASN.1, then DER, then PEM-encode - var msg = { - type: 'RSA PRIVATE KEY', - body: asn1.toDer(pki.privateKeyToAsn1(key)).getBytes() - }; - return forge.pem.encode(msg, {maxline: maxline}); -}; - -/** - * Converts a PrivateKeyInfo to PEM format. - * - * @param pki the PrivateKeyInfo. - * @param maxline the maximum characters per line, defaults to 64. - * - * @return the PEM-formatted private key. - */ -pki.privateKeyInfoToPem = function(pki, maxline) { - // convert to DER, then PEM-encode - var msg = { - type: 'PRIVATE KEY', - body: asn1.toDer(pki).getBytes() - }; - return forge.pem.encode(msg, {maxline: maxline}); -}; diff --git a/reverse_engineering/node_modules/node-forge/lib/prime.js b/reverse_engineering/node_modules/node-forge/lib/prime.js deleted file mode 100644 index 3d51473..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/prime.js +++ /dev/null @@ -1,297 +0,0 @@ -/** - * Prime number generation API. - * - * @author Dave Longley - * - * Copyright (c) 2014 Digital Bazaar, Inc. - */ -var forge = require('./forge'); -require('./util'); -require('./jsbn'); -require('./random'); - -(function() { - -// forge.prime already defined -if(forge.prime) { - module.exports = forge.prime; - return; -} - -/* PRIME API */ -var prime = module.exports = forge.prime = forge.prime || {}; - -var BigInteger = forge.jsbn.BigInteger; - -// primes are 30k+i for i = 1, 7, 11, 13, 17, 19, 23, 29 -var GCD_30_DELTA = [6, 4, 2, 4, 2, 4, 6, 2]; -var THIRTY = new BigInteger(null); -THIRTY.fromInt(30); -var op_or = function(x, y) {return x|y;}; - -/** - * Generates a random probable prime with the given number of bits. - * - * Alternative algorithms can be specified by name as a string or as an - * object with custom options like so: - * - * { - * name: 'PRIMEINC', - * options: { - * maxBlockTime: , - * millerRabinTests: , - * workerScript: , - * workers: . - * workLoad: the size of the work load, ie: number of possible prime - * numbers for each web worker to check per work assignment, - * (default: 100). - * } - * } - * - * @param bits the number of bits for the prime number. - * @param options the options to use. - * [algorithm] the algorithm to use (default: 'PRIMEINC'). - * [prng] a custom crypto-secure pseudo-random number generator to use, - * that must define "getBytesSync". - * - * @return callback(err, num) called once the operation completes. - */ -prime.generateProbablePrime = function(bits, options, callback) { - if(typeof options === 'function') { - callback = options; - options = {}; - } - options = options || {}; - - // default to PRIMEINC algorithm - var algorithm = options.algorithm || 'PRIMEINC'; - if(typeof algorithm === 'string') { - algorithm = {name: algorithm}; - } - algorithm.options = algorithm.options || {}; - - // create prng with api that matches BigInteger secure random - var prng = options.prng || forge.random; - var rng = { - // x is an array to fill with bytes - nextBytes: function(x) { - var b = prng.getBytesSync(x.length); - for(var i = 0; i < x.length; ++i) { - x[i] = b.charCodeAt(i); - } - } - }; - - if(algorithm.name === 'PRIMEINC') { - return primeincFindPrime(bits, rng, algorithm.options, callback); - } - - throw new Error('Invalid prime generation algorithm: ' + algorithm.name); -}; - -function primeincFindPrime(bits, rng, options, callback) { - if('workers' in options) { - return primeincFindPrimeWithWorkers(bits, rng, options, callback); - } - return primeincFindPrimeWithoutWorkers(bits, rng, options, callback); -} - -function primeincFindPrimeWithoutWorkers(bits, rng, options, callback) { - // initialize random number - var num = generateRandom(bits, rng); - - /* Note: All primes are of the form 30k+i for i < 30 and gcd(30, i)=1. The - number we are given is always aligned at 30k + 1. Each time the number is - determined not to be prime we add to get to the next 'i', eg: if the number - was at 30k + 1 we add 6. */ - var deltaIdx = 0; - - // get required number of MR tests - var mrTests = getMillerRabinTests(num.bitLength()); - if('millerRabinTests' in options) { - mrTests = options.millerRabinTests; - } - - // find prime nearest to 'num' for maxBlockTime ms - // 10 ms gives 5ms of leeway for other calculations before dropping - // below 60fps (1000/60 == 16.67), but in reality, the number will - // likely be higher due to an 'atomic' big int modPow - var maxBlockTime = 10; - if('maxBlockTime' in options) { - maxBlockTime = options.maxBlockTime; - } - - _primeinc(num, bits, rng, deltaIdx, mrTests, maxBlockTime, callback); -} - -function _primeinc(num, bits, rng, deltaIdx, mrTests, maxBlockTime, callback) { - var start = +new Date(); - do { - // overflow, regenerate random number - if(num.bitLength() > bits) { - num = generateRandom(bits, rng); - } - // do primality test - if(num.isProbablePrime(mrTests)) { - return callback(null, num); - } - // get next potential prime - num.dAddOffset(GCD_30_DELTA[deltaIdx++ % 8], 0); - } while(maxBlockTime < 0 || (+new Date() - start < maxBlockTime)); - - // keep trying later - forge.util.setImmediate(function() { - _primeinc(num, bits, rng, deltaIdx, mrTests, maxBlockTime, callback); - }); -} - -// NOTE: This algorithm is indeterminate in nature because workers -// run in parallel looking at different segments of numbers. Even if this -// algorithm is run twice with the same input from a predictable RNG, it -// may produce different outputs. -function primeincFindPrimeWithWorkers(bits, rng, options, callback) { - // web workers unavailable - if(typeof Worker === 'undefined') { - return primeincFindPrimeWithoutWorkers(bits, rng, options, callback); - } - - // initialize random number - var num = generateRandom(bits, rng); - - // use web workers to generate keys - var numWorkers = options.workers; - var workLoad = options.workLoad || 100; - var range = workLoad * 30 / 8; - var workerScript = options.workerScript || 'forge/prime.worker.js'; - if(numWorkers === -1) { - return forge.util.estimateCores(function(err, cores) { - if(err) { - // default to 2 - cores = 2; - } - numWorkers = cores - 1; - generate(); - }); - } - generate(); - - function generate() { - // require at least 1 worker - numWorkers = Math.max(1, numWorkers); - - // TODO: consider optimizing by starting workers outside getPrime() ... - // note that in order to clean up they will have to be made internally - // asynchronous which may actually be slower - - // start workers immediately - var workers = []; - for(var i = 0; i < numWorkers; ++i) { - // FIXME: fix path or use blob URLs - workers[i] = new Worker(workerScript); - } - var running = numWorkers; - - // listen for requests from workers and assign ranges to find prime - for(var i = 0; i < numWorkers; ++i) { - workers[i].addEventListener('message', workerMessage); - } - - /* Note: The distribution of random numbers is unknown. Therefore, each - web worker is continuously allocated a range of numbers to check for a - random number until one is found. - - Every 30 numbers will be checked just 8 times, because prime numbers - have the form: - - 30k+i, for i < 30 and gcd(30, i)=1 (there are 8 values of i for this) - - Therefore, if we want a web worker to run N checks before asking for - a new range of numbers, each range must contain N*30/8 numbers. - - For 100 checks (workLoad), this is a range of 375. */ - - var found = false; - function workerMessage(e) { - // ignore message, prime already found - if(found) { - return; - } - - --running; - var data = e.data; - if(data.found) { - // terminate all workers - for(var i = 0; i < workers.length; ++i) { - workers[i].terminate(); - } - found = true; - return callback(null, new BigInteger(data.prime, 16)); - } - - // overflow, regenerate random number - if(num.bitLength() > bits) { - num = generateRandom(bits, rng); - } - - // assign new range to check - var hex = num.toString(16); - - // start prime search - e.target.postMessage({ - hex: hex, - workLoad: workLoad - }); - - num.dAddOffset(range, 0); - } - } -} - -/** - * Generates a random number using the given number of bits and RNG. - * - * @param bits the number of bits for the number. - * @param rng the random number generator to use. - * - * @return the random number. - */ -function generateRandom(bits, rng) { - var num = new BigInteger(bits, rng); - // force MSB set - var bits1 = bits - 1; - if(!num.testBit(bits1)) { - num.bitwiseTo(BigInteger.ONE.shiftLeft(bits1), op_or, num); - } - // align number on 30k+1 boundary - num.dAddOffset(31 - num.mod(THIRTY).byteValue(), 0); - return num; -} - -/** - * Returns the required number of Miller-Rabin tests to generate a - * prime with an error probability of (1/2)^80. - * - * See Handbook of Applied Cryptography Chapter 4, Table 4.4. - * - * @param bits the bit size. - * - * @return the required number of iterations. - */ -function getMillerRabinTests(bits) { - if(bits <= 100) return 27; - if(bits <= 150) return 18; - if(bits <= 200) return 15; - if(bits <= 250) return 12; - if(bits <= 300) return 9; - if(bits <= 350) return 8; - if(bits <= 400) return 7; - if(bits <= 500) return 6; - if(bits <= 600) return 5; - if(bits <= 800) return 4; - if(bits <= 1250) return 3; - return 2; -} - -})(); diff --git a/reverse_engineering/node_modules/node-forge/lib/prime.worker.js b/reverse_engineering/node_modules/node-forge/lib/prime.worker.js deleted file mode 100644 index ce1355d..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/prime.worker.js +++ /dev/null @@ -1,168 +0,0 @@ -/** - * RSA Key Generation Worker. - * - * @author Dave Longley - * - * Copyright (c) 2013 Digital Bazaar, Inc. - */ -// worker is built using CommonJS syntax to include all code in one worker file -//importScripts('jsbn.js'); -var forge = require('./forge'); -require('./jsbn'); - -// prime constants -var LOW_PRIMES = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997]; -var LP_LIMIT = (1 << 26) / LOW_PRIMES[LOW_PRIMES.length - 1]; - -var BigInteger = forge.jsbn.BigInteger; -var BIG_TWO = new BigInteger(null); -BIG_TWO.fromInt(2); - -self.addEventListener('message', function(e) { - var result = findPrime(e.data); - self.postMessage(result); -}); - -// start receiving ranges to check -self.postMessage({found: false}); - -// primes are 30k+i for i = 1, 7, 11, 13, 17, 19, 23, 29 -var GCD_30_DELTA = [6, 4, 2, 4, 2, 4, 6, 2]; - -function findPrime(data) { - // TODO: abstract based on data.algorithm (PRIMEINC vs. others) - - // create BigInteger from given random bytes - var num = new BigInteger(data.hex, 16); - - /* Note: All primes are of the form 30k+i for i < 30 and gcd(30, i)=1. The - number we are given is always aligned at 30k + 1. Each time the number is - determined not to be prime we add to get to the next 'i', eg: if the number - was at 30k + 1 we add 6. */ - var deltaIdx = 0; - - // find nearest prime - var workLoad = data.workLoad; - for(var i = 0; i < workLoad; ++i) { - // do primality test - if(isProbablePrime(num)) { - return {found: true, prime: num.toString(16)}; - } - // get next potential prime - num.dAddOffset(GCD_30_DELTA[deltaIdx++ % 8], 0); - } - - return {found: false}; -} - -function isProbablePrime(n) { - // divide by low primes, ignore even checks, etc (n alread aligned properly) - var i = 1; - while(i < LOW_PRIMES.length) { - var m = LOW_PRIMES[i]; - var j = i + 1; - while(j < LOW_PRIMES.length && m < LP_LIMIT) { - m *= LOW_PRIMES[j++]; - } - m = n.modInt(m); - while(i < j) { - if(m % LOW_PRIMES[i++] === 0) { - return false; - } - } - } - return runMillerRabin(n); -} - -// HAC 4.24, Miller-Rabin -function runMillerRabin(n) { - // n1 = n - 1 - var n1 = n.subtract(BigInteger.ONE); - - // get s and d such that n1 = 2^s * d - var s = n1.getLowestSetBit(); - if(s <= 0) { - return false; - } - var d = n1.shiftRight(s); - - var k = _getMillerRabinTests(n.bitLength()); - var prng = getPrng(); - var a; - for(var i = 0; i < k; ++i) { - // select witness 'a' at random from between 1 and n - 1 - do { - a = new BigInteger(n.bitLength(), prng); - } while(a.compareTo(BigInteger.ONE) <= 0 || a.compareTo(n1) >= 0); - - /* See if 'a' is a composite witness. */ - - // x = a^d mod n - var x = a.modPow(d, n); - - // probably prime - if(x.compareTo(BigInteger.ONE) === 0 || x.compareTo(n1) === 0) { - continue; - } - - var j = s; - while(--j) { - // x = x^2 mod a - x = x.modPowInt(2, n); - - // 'n' is composite because no previous x == -1 mod n - if(x.compareTo(BigInteger.ONE) === 0) { - return false; - } - // x == -1 mod n, so probably prime - if(x.compareTo(n1) === 0) { - break; - } - } - - // 'x' is first_x^(n1/2) and is not +/- 1, so 'n' is not prime - if(j === 0) { - return false; - } - } - - return true; -} - -// get pseudo random number generator -function getPrng() { - // create prng with api that matches BigInteger secure random - return { - // x is an array to fill with bytes - nextBytes: function(x) { - for(var i = 0; i < x.length; ++i) { - x[i] = Math.floor(Math.random() * 0xFF); - } - } - }; -} - -/** - * Returns the required number of Miller-Rabin tests to generate a - * prime with an error probability of (1/2)^80. - * - * See Handbook of Applied Cryptography Chapter 4, Table 4.4. - * - * @param bits the bit size. - * - * @return the required number of iterations. - */ -function _getMillerRabinTests(bits) { - if(bits <= 100) return 27; - if(bits <= 150) return 18; - if(bits <= 200) return 15; - if(bits <= 250) return 12; - if(bits <= 300) return 9; - if(bits <= 350) return 8; - if(bits <= 400) return 7; - if(bits <= 500) return 6; - if(bits <= 600) return 5; - if(bits <= 800) return 4; - if(bits <= 1250) return 3; - return 2; -} diff --git a/reverse_engineering/node_modules/node-forge/lib/prng.js b/reverse_engineering/node_modules/node-forge/lib/prng.js deleted file mode 100644 index c2f5f05..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/prng.js +++ /dev/null @@ -1,419 +0,0 @@ -/** - * A javascript implementation of a cryptographically-secure - * Pseudo Random Number Generator (PRNG). The Fortuna algorithm is followed - * here though the use of SHA-256 is not enforced; when generating an - * a PRNG context, the hashing algorithm and block cipher used for - * the generator are specified via a plugin. - * - * @author Dave Longley - * - * Copyright (c) 2010-2014 Digital Bazaar, Inc. - */ -var forge = require('./forge'); -require('./util'); - -var _crypto = null; -if(forge.util.isNodejs && !forge.options.usePureJavaScript && - !process.versions['node-webkit']) { - _crypto = require('crypto'); -} - -/* PRNG API */ -var prng = module.exports = forge.prng = forge.prng || {}; - -/** - * Creates a new PRNG context. - * - * A PRNG plugin must be passed in that will provide: - * - * 1. A function that initializes the key and seed of a PRNG context. It - * will be given a 16 byte key and a 16 byte seed. Any key expansion - * or transformation of the seed from a byte string into an array of - * integers (or similar) should be performed. - * 2. The cryptographic function used by the generator. It takes a key and - * a seed. - * 3. A seed increment function. It takes the seed and returns seed + 1. - * 4. An api to create a message digest. - * - * For an example, see random.js. - * - * @param plugin the PRNG plugin to use. - */ -prng.create = function(plugin) { - var ctx = { - plugin: plugin, - key: null, - seed: null, - time: null, - // number of reseeds so far - reseeds: 0, - // amount of data generated so far - generated: 0, - // no initial key bytes - keyBytes: '' - }; - - // create 32 entropy pools (each is a message digest) - var md = plugin.md; - var pools = new Array(32); - for(var i = 0; i < 32; ++i) { - pools[i] = md.create(); - } - ctx.pools = pools; - - // entropy pools are written to cyclically, starting at index 0 - ctx.pool = 0; - - /** - * Generates random bytes. The bytes may be generated synchronously or - * asynchronously. Web workers must use the asynchronous interface or - * else the behavior is undefined. - * - * @param count the number of random bytes to generate. - * @param [callback(err, bytes)] called once the operation completes. - * - * @return count random bytes as a string. - */ - ctx.generate = function(count, callback) { - // do synchronously - if(!callback) { - return ctx.generateSync(count); - } - - // simple generator using counter-based CBC - var cipher = ctx.plugin.cipher; - var increment = ctx.plugin.increment; - var formatKey = ctx.plugin.formatKey; - var formatSeed = ctx.plugin.formatSeed; - var b = forge.util.createBuffer(); - - // paranoid deviation from Fortuna: - // reset key for every request to protect previously - // generated random bytes should the key be discovered; - // there is no 100ms based reseeding because of this - // forced reseed for every `generate` call - ctx.key = null; - - generate(); - - function generate(err) { - if(err) { - return callback(err); - } - - // sufficient bytes generated - if(b.length() >= count) { - return callback(null, b.getBytes(count)); - } - - // if amount of data generated is greater than 1 MiB, trigger reseed - if(ctx.generated > 0xfffff) { - ctx.key = null; - } - - if(ctx.key === null) { - // prevent stack overflow - return forge.util.nextTick(function() { - _reseed(generate); - }); - } - - // generate the random bytes - var bytes = cipher(ctx.key, ctx.seed); - ctx.generated += bytes.length; - b.putBytes(bytes); - - // generate bytes for a new key and seed - ctx.key = formatKey(cipher(ctx.key, increment(ctx.seed))); - ctx.seed = formatSeed(cipher(ctx.key, ctx.seed)); - - forge.util.setImmediate(generate); - } - }; - - /** - * Generates random bytes synchronously. - * - * @param count the number of random bytes to generate. - * - * @return count random bytes as a string. - */ - ctx.generateSync = function(count) { - // simple generator using counter-based CBC - var cipher = ctx.plugin.cipher; - var increment = ctx.plugin.increment; - var formatKey = ctx.plugin.formatKey; - var formatSeed = ctx.plugin.formatSeed; - - // paranoid deviation from Fortuna: - // reset key for every request to protect previously - // generated random bytes should the key be discovered; - // there is no 100ms based reseeding because of this - // forced reseed for every `generateSync` call - ctx.key = null; - - var b = forge.util.createBuffer(); - while(b.length() < count) { - // if amount of data generated is greater than 1 MiB, trigger reseed - if(ctx.generated > 0xfffff) { - ctx.key = null; - } - - if(ctx.key === null) { - _reseedSync(); - } - - // generate the random bytes - var bytes = cipher(ctx.key, ctx.seed); - ctx.generated += bytes.length; - b.putBytes(bytes); - - // generate bytes for a new key and seed - ctx.key = formatKey(cipher(ctx.key, increment(ctx.seed))); - ctx.seed = formatSeed(cipher(ctx.key, ctx.seed)); - } - - return b.getBytes(count); - }; - - /** - * Private function that asynchronously reseeds a generator. - * - * @param callback(err) called once the operation completes. - */ - function _reseed(callback) { - if(ctx.pools[0].messageLength >= 32) { - _seed(); - return callback(); - } - // not enough seed data... - var needed = (32 - ctx.pools[0].messageLength) << 5; - ctx.seedFile(needed, function(err, bytes) { - if(err) { - return callback(err); - } - ctx.collect(bytes); - _seed(); - callback(); - }); - } - - /** - * Private function that synchronously reseeds a generator. - */ - function _reseedSync() { - if(ctx.pools[0].messageLength >= 32) { - return _seed(); - } - // not enough seed data... - var needed = (32 - ctx.pools[0].messageLength) << 5; - ctx.collect(ctx.seedFileSync(needed)); - _seed(); - } - - /** - * Private function that seeds a generator once enough bytes are available. - */ - function _seed() { - // update reseed count - ctx.reseeds = (ctx.reseeds === 0xffffffff) ? 0 : ctx.reseeds + 1; - - // goal is to update `key` via: - // key = hash(key + s) - // where 's' is all collected entropy from selected pools, then... - - // create a plugin-based message digest - var md = ctx.plugin.md.create(); - - // consume current key bytes - md.update(ctx.keyBytes); - - // digest the entropy of pools whose index k meet the - // condition 'n mod 2^k == 0' where n is the number of reseeds - var _2powK = 1; - for(var k = 0; k < 32; ++k) { - if(ctx.reseeds % _2powK === 0) { - md.update(ctx.pools[k].digest().getBytes()); - ctx.pools[k].start(); - } - _2powK = _2powK << 1; - } - - // get digest for key bytes - ctx.keyBytes = md.digest().getBytes(); - - // paranoid deviation from Fortuna: - // update `seed` via `seed = hash(key)` - // instead of initializing to zero once and only - // ever incrementing it - md.start(); - md.update(ctx.keyBytes); - var seedBytes = md.digest().getBytes(); - - // update state - ctx.key = ctx.plugin.formatKey(ctx.keyBytes); - ctx.seed = ctx.plugin.formatSeed(seedBytes); - ctx.generated = 0; - } - - /** - * The built-in default seedFile. This seedFile is used when entropy - * is needed immediately. - * - * @param needed the number of bytes that are needed. - * - * @return the random bytes. - */ - function defaultSeedFile(needed) { - // use window.crypto.getRandomValues strong source of entropy if available - var getRandomValues = null; - var globalScope = forge.util.globalScope; - var _crypto = globalScope.crypto || globalScope.msCrypto; - if(_crypto && _crypto.getRandomValues) { - getRandomValues = function(arr) { - return _crypto.getRandomValues(arr); - }; - } - - var b = forge.util.createBuffer(); - if(getRandomValues) { - while(b.length() < needed) { - // max byte length is 65536 before QuotaExceededError is thrown - // http://www.w3.org/TR/WebCryptoAPI/#RandomSource-method-getRandomValues - var count = Math.max(1, Math.min(needed - b.length(), 65536) / 4); - var entropy = new Uint32Array(Math.floor(count)); - try { - getRandomValues(entropy); - for(var i = 0; i < entropy.length; ++i) { - b.putInt32(entropy[i]); - } - } catch(e) { - /* only ignore QuotaExceededError */ - if(!(typeof QuotaExceededError !== 'undefined' && - e instanceof QuotaExceededError)) { - throw e; - } - } - } - } - - // be sad and add some weak random data - if(b.length() < needed) { - /* Draws from Park-Miller "minimal standard" 31 bit PRNG, - implemented with David G. Carta's optimization: with 32 bit math - and without division (Public Domain). */ - var hi, lo, next; - var seed = Math.floor(Math.random() * 0x010000); - while(b.length() < needed) { - lo = 16807 * (seed & 0xFFFF); - hi = 16807 * (seed >> 16); - lo += (hi & 0x7FFF) << 16; - lo += hi >> 15; - lo = (lo & 0x7FFFFFFF) + (lo >> 31); - seed = lo & 0xFFFFFFFF; - - // consume lower 3 bytes of seed - for(var i = 0; i < 3; ++i) { - // throw in more pseudo random - next = seed >>> (i << 3); - next ^= Math.floor(Math.random() * 0x0100); - b.putByte(String.fromCharCode(next & 0xFF)); - } - } - } - - return b.getBytes(needed); - } - // initialize seed file APIs - if(_crypto) { - // use nodejs async API - ctx.seedFile = function(needed, callback) { - _crypto.randomBytes(needed, function(err, bytes) { - if(err) { - return callback(err); - } - callback(null, bytes.toString()); - }); - }; - // use nodejs sync API - ctx.seedFileSync = function(needed) { - return _crypto.randomBytes(needed).toString(); - }; - } else { - ctx.seedFile = function(needed, callback) { - try { - callback(null, defaultSeedFile(needed)); - } catch(e) { - callback(e); - } - }; - ctx.seedFileSync = defaultSeedFile; - } - - /** - * Adds entropy to a prng ctx's accumulator. - * - * @param bytes the bytes of entropy as a string. - */ - ctx.collect = function(bytes) { - // iterate over pools distributing entropy cyclically - var count = bytes.length; - for(var i = 0; i < count; ++i) { - ctx.pools[ctx.pool].update(bytes.substr(i, 1)); - ctx.pool = (ctx.pool === 31) ? 0 : ctx.pool + 1; - } - }; - - /** - * Collects an integer of n bits. - * - * @param i the integer entropy. - * @param n the number of bits in the integer. - */ - ctx.collectInt = function(i, n) { - var bytes = ''; - for(var x = 0; x < n; x += 8) { - bytes += String.fromCharCode((i >> x) & 0xFF); - } - ctx.collect(bytes); - }; - - /** - * Registers a Web Worker to receive immediate entropy from the main thread. - * This method is required until Web Workers can access the native crypto - * API. This method should be called twice for each created worker, once in - * the main thread, and once in the worker itself. - * - * @param worker the worker to register. - */ - ctx.registerWorker = function(worker) { - // worker receives random bytes - if(worker === self) { - ctx.seedFile = function(needed, callback) { - function listener(e) { - var data = e.data; - if(data.forge && data.forge.prng) { - self.removeEventListener('message', listener); - callback(data.forge.prng.err, data.forge.prng.bytes); - } - } - self.addEventListener('message', listener); - self.postMessage({forge: {prng: {needed: needed}}}); - }; - } else { - // main thread sends random bytes upon request - var listener = function(e) { - var data = e.data; - if(data.forge && data.forge.prng) { - ctx.seedFile(data.forge.prng.needed, function(err, bytes) { - worker.postMessage({forge: {prng: {err: err, bytes: bytes}}}); - }); - } - }; - // TODO: do we need to remove the event listener when the worker dies? - worker.addEventListener('message', listener); - } - }; - - return ctx; -}; diff --git a/reverse_engineering/node_modules/node-forge/lib/pss.js b/reverse_engineering/node_modules/node-forge/lib/pss.js deleted file mode 100644 index 2596693..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/pss.js +++ /dev/null @@ -1,241 +0,0 @@ -/** - * Javascript implementation of PKCS#1 PSS signature padding. - * - * @author Stefan Siegl - * - * Copyright (c) 2012 Stefan Siegl - */ -var forge = require('./forge'); -require('./random'); -require('./util'); - -// shortcut for PSS API -var pss = module.exports = forge.pss = forge.pss || {}; - -/** - * Creates a PSS signature scheme object. - * - * There are several ways to provide a salt for encoding: - * - * 1. Specify the saltLength only and the built-in PRNG will generate it. - * 2. Specify the saltLength and a custom PRNG with 'getBytesSync' defined that - * will be used. - * 3. Specify the salt itself as a forge.util.ByteBuffer. - * - * @param options the options to use: - * md the message digest object to use, a forge md instance. - * mgf the mask generation function to use, a forge mgf instance. - * [saltLength] the length of the salt in octets. - * [prng] the pseudo-random number generator to use to produce a salt. - * [salt] the salt to use when encoding. - * - * @return a signature scheme object. - */ -pss.create = function(options) { - // backwards compatibility w/legacy args: hash, mgf, sLen - if(arguments.length === 3) { - options = { - md: arguments[0], - mgf: arguments[1], - saltLength: arguments[2] - }; - } - - var hash = options.md; - var mgf = options.mgf; - var hLen = hash.digestLength; - - var salt_ = options.salt || null; - if(typeof salt_ === 'string') { - // assume binary-encoded string - salt_ = forge.util.createBuffer(salt_); - } - - var sLen; - if('saltLength' in options) { - sLen = options.saltLength; - } else if(salt_ !== null) { - sLen = salt_.length(); - } else { - throw new Error('Salt length not specified or specific salt not given.'); - } - - if(salt_ !== null && salt_.length() !== sLen) { - throw new Error('Given salt length does not match length of given salt.'); - } - - var prng = options.prng || forge.random; - - var pssobj = {}; - - /** - * Encodes a PSS signature. - * - * This function implements EMSA-PSS-ENCODE as per RFC 3447, section 9.1.1. - * - * @param md the message digest object with the hash to sign. - * @param modsBits the length of the RSA modulus in bits. - * - * @return the encoded message as a binary-encoded string of length - * ceil((modBits - 1) / 8). - */ - pssobj.encode = function(md, modBits) { - var i; - var emBits = modBits - 1; - var emLen = Math.ceil(emBits / 8); - - /* 2. Let mHash = Hash(M), an octet string of length hLen. */ - var mHash = md.digest().getBytes(); - - /* 3. If emLen < hLen + sLen + 2, output "encoding error" and stop. */ - if(emLen < hLen + sLen + 2) { - throw new Error('Message is too long to encrypt.'); - } - - /* 4. Generate a random octet string salt of length sLen; if sLen = 0, - * then salt is the empty string. */ - var salt; - if(salt_ === null) { - salt = prng.getBytesSync(sLen); - } else { - salt = salt_.bytes(); - } - - /* 5. Let M' = (0x)00 00 00 00 00 00 00 00 || mHash || salt; */ - var m_ = new forge.util.ByteBuffer(); - m_.fillWithByte(0, 8); - m_.putBytes(mHash); - m_.putBytes(salt); - - /* 6. Let H = Hash(M'), an octet string of length hLen. */ - hash.start(); - hash.update(m_.getBytes()); - var h = hash.digest().getBytes(); - - /* 7. Generate an octet string PS consisting of emLen - sLen - hLen - 2 - * zero octets. The length of PS may be 0. */ - var ps = new forge.util.ByteBuffer(); - ps.fillWithByte(0, emLen - sLen - hLen - 2); - - /* 8. Let DB = PS || 0x01 || salt; DB is an octet string of length - * emLen - hLen - 1. */ - ps.putByte(0x01); - ps.putBytes(salt); - var db = ps.getBytes(); - - /* 9. Let dbMask = MGF(H, emLen - hLen - 1). */ - var maskLen = emLen - hLen - 1; - var dbMask = mgf.generate(h, maskLen); - - /* 10. Let maskedDB = DB \xor dbMask. */ - var maskedDB = ''; - for(i = 0; i < maskLen; i++) { - maskedDB += String.fromCharCode(db.charCodeAt(i) ^ dbMask.charCodeAt(i)); - } - - /* 11. Set the leftmost 8emLen - emBits bits of the leftmost octet in - * maskedDB to zero. */ - var mask = (0xFF00 >> (8 * emLen - emBits)) & 0xFF; - maskedDB = String.fromCharCode(maskedDB.charCodeAt(0) & ~mask) + - maskedDB.substr(1); - - /* 12. Let EM = maskedDB || H || 0xbc. - * 13. Output EM. */ - return maskedDB + h + String.fromCharCode(0xbc); - }; - - /** - * Verifies a PSS signature. - * - * This function implements EMSA-PSS-VERIFY as per RFC 3447, section 9.1.2. - * - * @param mHash the message digest hash, as a binary-encoded string, to - * compare against the signature. - * @param em the encoded message, as a binary-encoded string - * (RSA decryption result). - * @param modsBits the length of the RSA modulus in bits. - * - * @return true if the signature was verified, false if not. - */ - pssobj.verify = function(mHash, em, modBits) { - var i; - var emBits = modBits - 1; - var emLen = Math.ceil(emBits / 8); - - /* c. Convert the message representative m to an encoded message EM - * of length emLen = ceil((modBits - 1) / 8) octets, where modBits - * is the length in bits of the RSA modulus n */ - em = em.substr(-emLen); - - /* 3. If emLen < hLen + sLen + 2, output "inconsistent" and stop. */ - if(emLen < hLen + sLen + 2) { - throw new Error('Inconsistent parameters to PSS signature verification.'); - } - - /* 4. If the rightmost octet of EM does not have hexadecimal value - * 0xbc, output "inconsistent" and stop. */ - if(em.charCodeAt(emLen - 1) !== 0xbc) { - throw new Error('Encoded message does not end in 0xBC.'); - } - - /* 5. Let maskedDB be the leftmost emLen - hLen - 1 octets of EM, and - * let H be the next hLen octets. */ - var maskLen = emLen - hLen - 1; - var maskedDB = em.substr(0, maskLen); - var h = em.substr(maskLen, hLen); - - /* 6. If the leftmost 8emLen - emBits bits of the leftmost octet in - * maskedDB are not all equal to zero, output "inconsistent" and stop. */ - var mask = (0xFF00 >> (8 * emLen - emBits)) & 0xFF; - if((maskedDB.charCodeAt(0) & mask) !== 0) { - throw new Error('Bits beyond keysize not zero as expected.'); - } - - /* 7. Let dbMask = MGF(H, emLen - hLen - 1). */ - var dbMask = mgf.generate(h, maskLen); - - /* 8. Let DB = maskedDB \xor dbMask. */ - var db = ''; - for(i = 0; i < maskLen; i++) { - db += String.fromCharCode(maskedDB.charCodeAt(i) ^ dbMask.charCodeAt(i)); - } - - /* 9. Set the leftmost 8emLen - emBits bits of the leftmost octet - * in DB to zero. */ - db = String.fromCharCode(db.charCodeAt(0) & ~mask) + db.substr(1); - - /* 10. If the emLen - hLen - sLen - 2 leftmost octets of DB are not zero - * or if the octet at position emLen - hLen - sLen - 1 (the leftmost - * position is "position 1") does not have hexadecimal value 0x01, - * output "inconsistent" and stop. */ - var checkLen = emLen - hLen - sLen - 2; - for(i = 0; i < checkLen; i++) { - if(db.charCodeAt(i) !== 0x00) { - throw new Error('Leftmost octets not zero as expected'); - } - } - - if(db.charCodeAt(checkLen) !== 0x01) { - throw new Error('Inconsistent PSS signature, 0x01 marker not found'); - } - - /* 11. Let salt be the last sLen octets of DB. */ - var salt = db.substr(-sLen); - - /* 12. Let M' = (0x)00 00 00 00 00 00 00 00 || mHash || salt */ - var m_ = new forge.util.ByteBuffer(); - m_.fillWithByte(0, 8); - m_.putBytes(mHash); - m_.putBytes(salt); - - /* 13. Let H' = Hash(M'), an octet string of length hLen. */ - hash.start(); - hash.update(m_.getBytes()); - var h_ = hash.digest().getBytes(); - - /* 14. If H = H', output "consistent." Otherwise, output "inconsistent." */ - return h === h_; - }; - - return pssobj; -}; diff --git a/reverse_engineering/node_modules/node-forge/lib/random.js b/reverse_engineering/node_modules/node-forge/lib/random.js deleted file mode 100644 index d4e4bea..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/random.js +++ /dev/null @@ -1,191 +0,0 @@ -/** - * An API for getting cryptographically-secure random bytes. The bytes are - * generated using the Fortuna algorithm devised by Bruce Schneier and - * Niels Ferguson. - * - * Getting strong random bytes is not yet easy to do in javascript. The only - * truish random entropy that can be collected is from the mouse, keyboard, or - * from timing with respect to page loads, etc. This generator makes a poor - * attempt at providing random bytes when those sources haven't yet provided - * enough entropy to initially seed or to reseed the PRNG. - * - * @author Dave Longley - * - * Copyright (c) 2009-2014 Digital Bazaar, Inc. - */ -var forge = require('./forge'); -require('./aes'); -require('./sha256'); -require('./prng'); -require('./util'); - -(function() { - -// forge.random already defined -if(forge.random && forge.random.getBytes) { - module.exports = forge.random; - return; -} - -(function(jQuery) { - -// the default prng plugin, uses AES-128 -var prng_aes = {}; -var _prng_aes_output = new Array(4); -var _prng_aes_buffer = forge.util.createBuffer(); -prng_aes.formatKey = function(key) { - // convert the key into 32-bit integers - var tmp = forge.util.createBuffer(key); - key = new Array(4); - key[0] = tmp.getInt32(); - key[1] = tmp.getInt32(); - key[2] = tmp.getInt32(); - key[3] = tmp.getInt32(); - - // return the expanded key - return forge.aes._expandKey(key, false); -}; -prng_aes.formatSeed = function(seed) { - // convert seed into 32-bit integers - var tmp = forge.util.createBuffer(seed); - seed = new Array(4); - seed[0] = tmp.getInt32(); - seed[1] = tmp.getInt32(); - seed[2] = tmp.getInt32(); - seed[3] = tmp.getInt32(); - return seed; -}; -prng_aes.cipher = function(key, seed) { - forge.aes._updateBlock(key, seed, _prng_aes_output, false); - _prng_aes_buffer.putInt32(_prng_aes_output[0]); - _prng_aes_buffer.putInt32(_prng_aes_output[1]); - _prng_aes_buffer.putInt32(_prng_aes_output[2]); - _prng_aes_buffer.putInt32(_prng_aes_output[3]); - return _prng_aes_buffer.getBytes(); -}; -prng_aes.increment = function(seed) { - // FIXME: do we care about carry or signed issues? - ++seed[3]; - return seed; -}; -prng_aes.md = forge.md.sha256; - -/** - * Creates a new PRNG. - */ -function spawnPrng() { - var ctx = forge.prng.create(prng_aes); - - /** - * Gets random bytes. If a native secure crypto API is unavailable, this - * method tries to make the bytes more unpredictable by drawing from data that - * can be collected from the user of the browser, eg: mouse movement. - * - * If a callback is given, this method will be called asynchronously. - * - * @param count the number of random bytes to get. - * @param [callback(err, bytes)] called once the operation completes. - * - * @return the random bytes in a string. - */ - ctx.getBytes = function(count, callback) { - return ctx.generate(count, callback); - }; - - /** - * Gets random bytes asynchronously. If a native secure crypto API is - * unavailable, this method tries to make the bytes more unpredictable by - * drawing from data that can be collected from the user of the browser, - * eg: mouse movement. - * - * @param count the number of random bytes to get. - * - * @return the random bytes in a string. - */ - ctx.getBytesSync = function(count) { - return ctx.generate(count); - }; - - return ctx; -} - -// create default prng context -var _ctx = spawnPrng(); - -// add other sources of entropy only if window.crypto.getRandomValues is not -// available -- otherwise this source will be automatically used by the prng -var getRandomValues = null; -var globalScope = forge.util.globalScope; -var _crypto = globalScope.crypto || globalScope.msCrypto; -if(_crypto && _crypto.getRandomValues) { - getRandomValues = function(arr) { - return _crypto.getRandomValues(arr); - }; -} - -if(forge.options.usePureJavaScript || - (!forge.util.isNodejs && !getRandomValues)) { - // if this is a web worker, do not use weak entropy, instead register to - // receive strong entropy asynchronously from the main thread - if(typeof window === 'undefined' || window.document === undefined) { - // FIXME: - } - - // get load time entropy - _ctx.collectInt(+new Date(), 32); - - // add some entropy from navigator object - if(typeof(navigator) !== 'undefined') { - var _navBytes = ''; - for(var key in navigator) { - try { - if(typeof(navigator[key]) == 'string') { - _navBytes += navigator[key]; - } - } catch(e) { - /* Some navigator keys might not be accessible, e.g. the geolocation - attribute throws an exception if touched in Mozilla chrome:// - context. - - Silently ignore this and just don't use this as a source of - entropy. */ - } - } - _ctx.collect(_navBytes); - _navBytes = null; - } - - // add mouse and keyboard collectors if jquery is available - if(jQuery) { - // set up mouse entropy capture - jQuery().mousemove(function(e) { - // add mouse coords - _ctx.collectInt(e.clientX, 16); - _ctx.collectInt(e.clientY, 16); - }); - - // set up keyboard entropy capture - jQuery().keypress(function(e) { - _ctx.collectInt(e.charCode, 8); - }); - } -} - -/* Random API */ -if(!forge.random) { - forge.random = _ctx; -} else { - // extend forge.random with _ctx - for(var key in _ctx) { - forge.random[key] = _ctx[key]; - } -} - -// expose spawn PRNG -forge.random.createInstance = spawnPrng; - -module.exports = forge.random; - -})(typeof(jQuery) !== 'undefined' ? jQuery : null); - -})(); diff --git a/reverse_engineering/node_modules/node-forge/lib/rc2.js b/reverse_engineering/node_modules/node-forge/lib/rc2.js deleted file mode 100644 index e33f78a..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/rc2.js +++ /dev/null @@ -1,410 +0,0 @@ -/** - * RC2 implementation. - * - * @author Stefan Siegl - * - * Copyright (c) 2012 Stefan Siegl - * - * Information on the RC2 cipher is available from RFC #2268, - * http://www.ietf.org/rfc/rfc2268.txt - */ -var forge = require('./forge'); -require('./util'); - -var piTable = [ - 0xd9, 0x78, 0xf9, 0xc4, 0x19, 0xdd, 0xb5, 0xed, 0x28, 0xe9, 0xfd, 0x79, 0x4a, 0xa0, 0xd8, 0x9d, - 0xc6, 0x7e, 0x37, 0x83, 0x2b, 0x76, 0x53, 0x8e, 0x62, 0x4c, 0x64, 0x88, 0x44, 0x8b, 0xfb, 0xa2, - 0x17, 0x9a, 0x59, 0xf5, 0x87, 0xb3, 0x4f, 0x13, 0x61, 0x45, 0x6d, 0x8d, 0x09, 0x81, 0x7d, 0x32, - 0xbd, 0x8f, 0x40, 0xeb, 0x86, 0xb7, 0x7b, 0x0b, 0xf0, 0x95, 0x21, 0x22, 0x5c, 0x6b, 0x4e, 0x82, - 0x54, 0xd6, 0x65, 0x93, 0xce, 0x60, 0xb2, 0x1c, 0x73, 0x56, 0xc0, 0x14, 0xa7, 0x8c, 0xf1, 0xdc, - 0x12, 0x75, 0xca, 0x1f, 0x3b, 0xbe, 0xe4, 0xd1, 0x42, 0x3d, 0xd4, 0x30, 0xa3, 0x3c, 0xb6, 0x26, - 0x6f, 0xbf, 0x0e, 0xda, 0x46, 0x69, 0x07, 0x57, 0x27, 0xf2, 0x1d, 0x9b, 0xbc, 0x94, 0x43, 0x03, - 0xf8, 0x11, 0xc7, 0xf6, 0x90, 0xef, 0x3e, 0xe7, 0x06, 0xc3, 0xd5, 0x2f, 0xc8, 0x66, 0x1e, 0xd7, - 0x08, 0xe8, 0xea, 0xde, 0x80, 0x52, 0xee, 0xf7, 0x84, 0xaa, 0x72, 0xac, 0x35, 0x4d, 0x6a, 0x2a, - 0x96, 0x1a, 0xd2, 0x71, 0x5a, 0x15, 0x49, 0x74, 0x4b, 0x9f, 0xd0, 0x5e, 0x04, 0x18, 0xa4, 0xec, - 0xc2, 0xe0, 0x41, 0x6e, 0x0f, 0x51, 0xcb, 0xcc, 0x24, 0x91, 0xaf, 0x50, 0xa1, 0xf4, 0x70, 0x39, - 0x99, 0x7c, 0x3a, 0x85, 0x23, 0xb8, 0xb4, 0x7a, 0xfc, 0x02, 0x36, 0x5b, 0x25, 0x55, 0x97, 0x31, - 0x2d, 0x5d, 0xfa, 0x98, 0xe3, 0x8a, 0x92, 0xae, 0x05, 0xdf, 0x29, 0x10, 0x67, 0x6c, 0xba, 0xc9, - 0xd3, 0x00, 0xe6, 0xcf, 0xe1, 0x9e, 0xa8, 0x2c, 0x63, 0x16, 0x01, 0x3f, 0x58, 0xe2, 0x89, 0xa9, - 0x0d, 0x38, 0x34, 0x1b, 0xab, 0x33, 0xff, 0xb0, 0xbb, 0x48, 0x0c, 0x5f, 0xb9, 0xb1, 0xcd, 0x2e, - 0xc5, 0xf3, 0xdb, 0x47, 0xe5, 0xa5, 0x9c, 0x77, 0x0a, 0xa6, 0x20, 0x68, 0xfe, 0x7f, 0xc1, 0xad -]; - -var s = [1, 2, 3, 5]; - -/** - * Rotate a word left by given number of bits. - * - * Bits that are shifted out on the left are put back in on the right - * hand side. - * - * @param word The word to shift left. - * @param bits The number of bits to shift by. - * @return The rotated word. - */ -var rol = function(word, bits) { - return ((word << bits) & 0xffff) | ((word & 0xffff) >> (16 - bits)); -}; - -/** - * Rotate a word right by given number of bits. - * - * Bits that are shifted out on the right are put back in on the left - * hand side. - * - * @param word The word to shift right. - * @param bits The number of bits to shift by. - * @return The rotated word. - */ -var ror = function(word, bits) { - return ((word & 0xffff) >> bits) | ((word << (16 - bits)) & 0xffff); -}; - -/* RC2 API */ -module.exports = forge.rc2 = forge.rc2 || {}; - -/** - * Perform RC2 key expansion as per RFC #2268, section 2. - * - * @param key variable-length user key (between 1 and 128 bytes) - * @param effKeyBits number of effective key bits (default: 128) - * @return the expanded RC2 key (ByteBuffer of 128 bytes) - */ -forge.rc2.expandKey = function(key, effKeyBits) { - if(typeof key === 'string') { - key = forge.util.createBuffer(key); - } - effKeyBits = effKeyBits || 128; - - /* introduce variables that match the names used in RFC #2268 */ - var L = key; - var T = key.length(); - var T1 = effKeyBits; - var T8 = Math.ceil(T1 / 8); - var TM = 0xff >> (T1 & 0x07); - var i; - - for(i = T; i < 128; i++) { - L.putByte(piTable[(L.at(i - 1) + L.at(i - T)) & 0xff]); - } - - L.setAt(128 - T8, piTable[L.at(128 - T8) & TM]); - - for(i = 127 - T8; i >= 0; i--) { - L.setAt(i, piTable[L.at(i + 1) ^ L.at(i + T8)]); - } - - return L; -}; - -/** - * Creates a RC2 cipher object. - * - * @param key the symmetric key to use (as base for key generation). - * @param bits the number of effective key bits. - * @param encrypt false for decryption, true for encryption. - * - * @return the cipher. - */ -var createCipher = function(key, bits, encrypt) { - var _finish = false, _input = null, _output = null, _iv = null; - var mixRound, mashRound; - var i, j, K = []; - - /* Expand key and fill into K[] Array */ - key = forge.rc2.expandKey(key, bits); - for(i = 0; i < 64; i++) { - K.push(key.getInt16Le()); - } - - if(encrypt) { - /** - * Perform one mixing round "in place". - * - * @param R Array of four words to perform mixing on. - */ - mixRound = function(R) { - for(i = 0; i < 4; i++) { - R[i] += K[j] + (R[(i + 3) % 4] & R[(i + 2) % 4]) + - ((~R[(i + 3) % 4]) & R[(i + 1) % 4]); - R[i] = rol(R[i], s[i]); - j++; - } - }; - - /** - * Perform one mashing round "in place". - * - * @param R Array of four words to perform mashing on. - */ - mashRound = function(R) { - for(i = 0; i < 4; i++) { - R[i] += K[R[(i + 3) % 4] & 63]; - } - }; - } else { - /** - * Perform one r-mixing round "in place". - * - * @param R Array of four words to perform mixing on. - */ - mixRound = function(R) { - for(i = 3; i >= 0; i--) { - R[i] = ror(R[i], s[i]); - R[i] -= K[j] + (R[(i + 3) % 4] & R[(i + 2) % 4]) + - ((~R[(i + 3) % 4]) & R[(i + 1) % 4]); - j--; - } - }; - - /** - * Perform one r-mashing round "in place". - * - * @param R Array of four words to perform mashing on. - */ - mashRound = function(R) { - for(i = 3; i >= 0; i--) { - R[i] -= K[R[(i + 3) % 4] & 63]; - } - }; - } - - /** - * Run the specified cipher execution plan. - * - * This function takes four words from the input buffer, applies the IV on - * it (if requested) and runs the provided execution plan. - * - * The plan must be put together in form of a array of arrays. Where the - * outer one is simply a list of steps to perform and the inner one needs - * to have two elements: the first one telling how many rounds to perform, - * the second one telling what to do (i.e. the function to call). - * - * @param {Array} plan The plan to execute. - */ - var runPlan = function(plan) { - var R = []; - - /* Get data from input buffer and fill the four words into R */ - for(i = 0; i < 4; i++) { - var val = _input.getInt16Le(); - - if(_iv !== null) { - if(encrypt) { - /* We're encrypting, apply the IV first. */ - val ^= _iv.getInt16Le(); - } else { - /* We're decryption, keep cipher text for next block. */ - _iv.putInt16Le(val); - } - } - - R.push(val & 0xffff); - } - - /* Reset global "j" variable as per spec. */ - j = encrypt ? 0 : 63; - - /* Run execution plan. */ - for(var ptr = 0; ptr < plan.length; ptr++) { - for(var ctr = 0; ctr < plan[ptr][0]; ctr++) { - plan[ptr][1](R); - } - } - - /* Write back result to output buffer. */ - for(i = 0; i < 4; i++) { - if(_iv !== null) { - if(encrypt) { - /* We're encrypting in CBC-mode, feed back encrypted bytes into - IV buffer to carry it forward to next block. */ - _iv.putInt16Le(R[i]); - } else { - R[i] ^= _iv.getInt16Le(); - } - } - - _output.putInt16Le(R[i]); - } - }; - - /* Create cipher object */ - var cipher = null; - cipher = { - /** - * Starts or restarts the encryption or decryption process, whichever - * was previously configured. - * - * To use the cipher in CBC mode, iv may be given either as a string - * of bytes, or as a byte buffer. For ECB mode, give null as iv. - * - * @param iv the initialization vector to use, null for ECB mode. - * @param output the output the buffer to write to, null to create one. - */ - start: function(iv, output) { - if(iv) { - /* CBC mode */ - if(typeof iv === 'string') { - iv = forge.util.createBuffer(iv); - } - } - - _finish = false; - _input = forge.util.createBuffer(); - _output = output || new forge.util.createBuffer(); - _iv = iv; - - cipher.output = _output; - }, - - /** - * Updates the next block. - * - * @param input the buffer to read from. - */ - update: function(input) { - if(!_finish) { - // not finishing, so fill the input buffer with more input - _input.putBuffer(input); - } - - while(_input.length() >= 8) { - runPlan([ - [ 5, mixRound ], - [ 1, mashRound ], - [ 6, mixRound ], - [ 1, mashRound ], - [ 5, mixRound ] - ]); - } - }, - - /** - * Finishes encrypting or decrypting. - * - * @param pad a padding function to use, null for PKCS#7 padding, - * signature(blockSize, buffer, decrypt). - * - * @return true if successful, false on error. - */ - finish: function(pad) { - var rval = true; - - if(encrypt) { - if(pad) { - rval = pad(8, _input, !encrypt); - } else { - // add PKCS#7 padding to block (each pad byte is the - // value of the number of pad bytes) - var padding = (_input.length() === 8) ? 8 : (8 - _input.length()); - _input.fillWithByte(padding, padding); - } - } - - if(rval) { - // do final update - _finish = true; - cipher.update(); - } - - if(!encrypt) { - // check for error: input data not a multiple of block size - rval = (_input.length() === 0); - if(rval) { - if(pad) { - rval = pad(8, _output, !encrypt); - } else { - // ensure padding byte count is valid - var len = _output.length(); - var count = _output.at(len - 1); - - if(count > len) { - rval = false; - } else { - // trim off padding bytes - _output.truncate(count); - } - } - } - } - - return rval; - } - }; - - return cipher; -}; - -/** - * Creates an RC2 cipher object to encrypt data in ECB or CBC mode using the - * given symmetric key. The output will be stored in the 'output' member - * of the returned cipher. - * - * The key and iv may be given as a string of bytes or a byte buffer. - * The cipher is initialized to use 128 effective key bits. - * - * @param key the symmetric key to use. - * @param iv the initialization vector to use. - * @param output the buffer to write to, null to create one. - * - * @return the cipher. - */ -forge.rc2.startEncrypting = function(key, iv, output) { - var cipher = forge.rc2.createEncryptionCipher(key, 128); - cipher.start(iv, output); - return cipher; -}; - -/** - * Creates an RC2 cipher object to encrypt data in ECB or CBC mode using the - * given symmetric key. - * - * The key may be given as a string of bytes or a byte buffer. - * - * To start encrypting call start() on the cipher with an iv and optional - * output buffer. - * - * @param key the symmetric key to use. - * - * @return the cipher. - */ -forge.rc2.createEncryptionCipher = function(key, bits) { - return createCipher(key, bits, true); -}; - -/** - * Creates an RC2 cipher object to decrypt data in ECB or CBC mode using the - * given symmetric key. The output will be stored in the 'output' member - * of the returned cipher. - * - * The key and iv may be given as a string of bytes or a byte buffer. - * The cipher is initialized to use 128 effective key bits. - * - * @param key the symmetric key to use. - * @param iv the initialization vector to use. - * @param output the buffer to write to, null to create one. - * - * @return the cipher. - */ -forge.rc2.startDecrypting = function(key, iv, output) { - var cipher = forge.rc2.createDecryptionCipher(key, 128); - cipher.start(iv, output); - return cipher; -}; - -/** - * Creates an RC2 cipher object to decrypt data in ECB or CBC mode using the - * given symmetric key. - * - * The key may be given as a string of bytes or a byte buffer. - * - * To start decrypting call start() on the cipher with an iv and optional - * output buffer. - * - * @param key the symmetric key to use. - * - * @return the cipher. - */ -forge.rc2.createDecryptionCipher = function(key, bits) { - return createCipher(key, bits, false); -}; diff --git a/reverse_engineering/node_modules/node-forge/lib/rsa.js b/reverse_engineering/node_modules/node-forge/lib/rsa.js deleted file mode 100644 index 7c67917..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/rsa.js +++ /dev/null @@ -1,1858 +0,0 @@ -/** - * Javascript implementation of basic RSA algorithms. - * - * @author Dave Longley - * - * Copyright (c) 2010-2014 Digital Bazaar, Inc. - * - * The only algorithm currently supported for PKI is RSA. - * - * An RSA key is often stored in ASN.1 DER format. The SubjectPublicKeyInfo - * ASN.1 structure is composed of an algorithm of type AlgorithmIdentifier - * and a subjectPublicKey of type bit string. - * - * The AlgorithmIdentifier contains an Object Identifier (OID) and parameters - * for the algorithm, if any. In the case of RSA, there aren't any. - * - * SubjectPublicKeyInfo ::= SEQUENCE { - * algorithm AlgorithmIdentifier, - * subjectPublicKey BIT STRING - * } - * - * AlgorithmIdentifer ::= SEQUENCE { - * algorithm OBJECT IDENTIFIER, - * parameters ANY DEFINED BY algorithm OPTIONAL - * } - * - * For an RSA public key, the subjectPublicKey is: - * - * RSAPublicKey ::= SEQUENCE { - * modulus INTEGER, -- n - * publicExponent INTEGER -- e - * } - * - * PrivateKeyInfo ::= SEQUENCE { - * version Version, - * privateKeyAlgorithm PrivateKeyAlgorithmIdentifier, - * privateKey PrivateKey, - * attributes [0] IMPLICIT Attributes OPTIONAL - * } - * - * Version ::= INTEGER - * PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier - * PrivateKey ::= OCTET STRING - * Attributes ::= SET OF Attribute - * - * An RSA private key as the following structure: - * - * RSAPrivateKey ::= SEQUENCE { - * version Version, - * modulus INTEGER, -- n - * publicExponent INTEGER, -- e - * privateExponent INTEGER, -- d - * prime1 INTEGER, -- p - * prime2 INTEGER, -- q - * exponent1 INTEGER, -- d mod (p-1) - * exponent2 INTEGER, -- d mod (q-1) - * coefficient INTEGER -- (inverse of q) mod p - * } - * - * Version ::= INTEGER - * - * The OID for the RSA key algorithm is: 1.2.840.113549.1.1.1 - */ -var forge = require('./forge'); -require('./asn1'); -require('./jsbn'); -require('./oids'); -require('./pkcs1'); -require('./prime'); -require('./random'); -require('./util'); - -if(typeof BigInteger === 'undefined') { - var BigInteger = forge.jsbn.BigInteger; -} - -var _crypto = forge.util.isNodejs ? require('crypto') : null; - -// shortcut for asn.1 API -var asn1 = forge.asn1; - -// shortcut for util API -var util = forge.util; - -/* - * RSA encryption and decryption, see RFC 2313. - */ -forge.pki = forge.pki || {}; -module.exports = forge.pki.rsa = forge.rsa = forge.rsa || {}; -var pki = forge.pki; - -// for finding primes, which are 30k+i for i = 1, 7, 11, 13, 17, 19, 23, 29 -var GCD_30_DELTA = [6, 4, 2, 4, 2, 4, 6, 2]; - -// validator for a PrivateKeyInfo structure -var privateKeyValidator = { - // PrivateKeyInfo - name: 'PrivateKeyInfo', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - // Version (INTEGER) - name: 'PrivateKeyInfo.version', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.INTEGER, - constructed: false, - capture: 'privateKeyVersion' - }, { - // privateKeyAlgorithm - name: 'PrivateKeyInfo.privateKeyAlgorithm', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'AlgorithmIdentifier.algorithm', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OID, - constructed: false, - capture: 'privateKeyOid' - }] - }, { - // PrivateKey - name: 'PrivateKeyInfo', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OCTETSTRING, - constructed: false, - capture: 'privateKey' - }] -}; - -// validator for an RSA private key -var rsaPrivateKeyValidator = { - // RSAPrivateKey - name: 'RSAPrivateKey', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - // Version (INTEGER) - name: 'RSAPrivateKey.version', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.INTEGER, - constructed: false, - capture: 'privateKeyVersion' - }, { - // modulus (n) - name: 'RSAPrivateKey.modulus', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.INTEGER, - constructed: false, - capture: 'privateKeyModulus' - }, { - // publicExponent (e) - name: 'RSAPrivateKey.publicExponent', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.INTEGER, - constructed: false, - capture: 'privateKeyPublicExponent' - }, { - // privateExponent (d) - name: 'RSAPrivateKey.privateExponent', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.INTEGER, - constructed: false, - capture: 'privateKeyPrivateExponent' - }, { - // prime1 (p) - name: 'RSAPrivateKey.prime1', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.INTEGER, - constructed: false, - capture: 'privateKeyPrime1' - }, { - // prime2 (q) - name: 'RSAPrivateKey.prime2', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.INTEGER, - constructed: false, - capture: 'privateKeyPrime2' - }, { - // exponent1 (d mod (p-1)) - name: 'RSAPrivateKey.exponent1', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.INTEGER, - constructed: false, - capture: 'privateKeyExponent1' - }, { - // exponent2 (d mod (q-1)) - name: 'RSAPrivateKey.exponent2', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.INTEGER, - constructed: false, - capture: 'privateKeyExponent2' - }, { - // coefficient ((inverse of q) mod p) - name: 'RSAPrivateKey.coefficient', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.INTEGER, - constructed: false, - capture: 'privateKeyCoefficient' - }] -}; - -// validator for an RSA public key -var rsaPublicKeyValidator = { - // RSAPublicKey - name: 'RSAPublicKey', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - // modulus (n) - name: 'RSAPublicKey.modulus', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.INTEGER, - constructed: false, - capture: 'publicKeyModulus' - }, { - // publicExponent (e) - name: 'RSAPublicKey.exponent', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.INTEGER, - constructed: false, - capture: 'publicKeyExponent' - }] -}; - -// validator for an SubjectPublicKeyInfo structure -// Note: Currently only works with an RSA public key -var publicKeyValidator = forge.pki.rsa.publicKeyValidator = { - name: 'SubjectPublicKeyInfo', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - captureAsn1: 'subjectPublicKeyInfo', - value: [{ - name: 'SubjectPublicKeyInfo.AlgorithmIdentifier', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'AlgorithmIdentifier.algorithm', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OID, - constructed: false, - capture: 'publicKeyOid' - }] - }, { - // subjectPublicKey - name: 'SubjectPublicKeyInfo.subjectPublicKey', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.BITSTRING, - constructed: false, - value: [{ - // RSAPublicKey - name: 'SubjectPublicKeyInfo.subjectPublicKey.RSAPublicKey', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - optional: true, - captureAsn1: 'rsaPublicKey' - }] - }] -}; - -/** - * Wrap digest in DigestInfo object. - * - * This function implements EMSA-PKCS1-v1_5-ENCODE as per RFC 3447. - * - * DigestInfo ::= SEQUENCE { - * digestAlgorithm DigestAlgorithmIdentifier, - * digest Digest - * } - * - * DigestAlgorithmIdentifier ::= AlgorithmIdentifier - * Digest ::= OCTET STRING - * - * @param md the message digest object with the hash to sign. - * - * @return the encoded message (ready for RSA encrytion) - */ -var emsaPkcs1v15encode = function(md) { - // get the oid for the algorithm - var oid; - if(md.algorithm in pki.oids) { - oid = pki.oids[md.algorithm]; - } else { - var error = new Error('Unknown message digest algorithm.'); - error.algorithm = md.algorithm; - throw error; - } - var oidBytes = asn1.oidToDer(oid).getBytes(); - - // create the digest info - var digestInfo = asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []); - var digestAlgorithm = asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []); - digestAlgorithm.value.push(asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.OID, false, oidBytes)); - digestAlgorithm.value.push(asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')); - var digest = asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, - false, md.digest().getBytes()); - digestInfo.value.push(digestAlgorithm); - digestInfo.value.push(digest); - - // encode digest info - return asn1.toDer(digestInfo).getBytes(); -}; - -/** - * Performs x^c mod n (RSA encryption or decryption operation). - * - * @param x the number to raise and mod. - * @param key the key to use. - * @param pub true if the key is public, false if private. - * - * @return the result of x^c mod n. - */ -var _modPow = function(x, key, pub) { - if(pub) { - return x.modPow(key.e, key.n); - } - - if(!key.p || !key.q) { - // allow calculation without CRT params (slow) - return x.modPow(key.d, key.n); - } - - // pre-compute dP, dQ, and qInv if necessary - if(!key.dP) { - key.dP = key.d.mod(key.p.subtract(BigInteger.ONE)); - } - if(!key.dQ) { - key.dQ = key.d.mod(key.q.subtract(BigInteger.ONE)); - } - if(!key.qInv) { - key.qInv = key.q.modInverse(key.p); - } - - /* Chinese remainder theorem (CRT) states: - - Suppose n1, n2, ..., nk are positive integers which are pairwise - coprime (n1 and n2 have no common factors other than 1). For any - integers x1, x2, ..., xk there exists an integer x solving the - system of simultaneous congruences (where ~= means modularly - congruent so a ~= b mod n means a mod n = b mod n): - - x ~= x1 mod n1 - x ~= x2 mod n2 - ... - x ~= xk mod nk - - This system of congruences has a single simultaneous solution x - between 0 and n - 1. Furthermore, each xk solution and x itself - is congruent modulo the product n = n1*n2*...*nk. - So x1 mod n = x2 mod n = xk mod n = x mod n. - - The single simultaneous solution x can be solved with the following - equation: - - x = sum(xi*ri*si) mod n where ri = n/ni and si = ri^-1 mod ni. - - Where x is less than n, xi = x mod ni. - - For RSA we are only concerned with k = 2. The modulus n = pq, where - p and q are coprime. The RSA decryption algorithm is: - - y = x^d mod n - - Given the above: - - x1 = x^d mod p - r1 = n/p = q - s1 = q^-1 mod p - x2 = x^d mod q - r2 = n/q = p - s2 = p^-1 mod q - - So y = (x1r1s1 + x2r2s2) mod n - = ((x^d mod p)q(q^-1 mod p) + (x^d mod q)p(p^-1 mod q)) mod n - - According to Fermat's Little Theorem, if the modulus P is prime, - for any integer A not evenly divisible by P, A^(P-1) ~= 1 mod P. - Since A is not divisible by P it follows that if: - N ~= M mod (P - 1), then A^N mod P = A^M mod P. Therefore: - - A^N mod P = A^(M mod (P - 1)) mod P. (The latter takes less effort - to calculate). In order to calculate x^d mod p more quickly the - exponent d mod (p - 1) is stored in the RSA private key (the same - is done for x^d mod q). These values are referred to as dP and dQ - respectively. Therefore we now have: - - y = ((x^dP mod p)q(q^-1 mod p) + (x^dQ mod q)p(p^-1 mod q)) mod n - - Since we'll be reducing x^dP by modulo p (same for q) we can also - reduce x by p (and q respectively) before hand. Therefore, let - - xp = ((x mod p)^dP mod p), and - xq = ((x mod q)^dQ mod q), yielding: - - y = (xp*q*(q^-1 mod p) + xq*p*(p^-1 mod q)) mod n - - This can be further reduced to a simple algorithm that only - requires 1 inverse (the q inverse is used) to be used and stored. - The algorithm is called Garner's algorithm. If qInv is the - inverse of q, we simply calculate: - - y = (qInv*(xp - xq) mod p) * q + xq - - However, there are two further complications. First, we need to - ensure that xp > xq to prevent signed BigIntegers from being used - so we add p until this is true (since we will be mod'ing with - p anyway). Then, there is a known timing attack on algorithms - using the CRT. To mitigate this risk, "cryptographic blinding" - should be used. This requires simply generating a random number r - between 0 and n-1 and its inverse and multiplying x by r^e before - calculating y and then multiplying y by r^-1 afterwards. Note that - r must be coprime with n (gcd(r, n) === 1) in order to have an - inverse. - */ - - // cryptographic blinding - var r; - do { - r = new BigInteger( - forge.util.bytesToHex(forge.random.getBytes(key.n.bitLength() / 8)), - 16); - } while(r.compareTo(key.n) >= 0 || !r.gcd(key.n).equals(BigInteger.ONE)); - x = x.multiply(r.modPow(key.e, key.n)).mod(key.n); - - // calculate xp and xq - var xp = x.mod(key.p).modPow(key.dP, key.p); - var xq = x.mod(key.q).modPow(key.dQ, key.q); - - // xp must be larger than xq to avoid signed bit usage - while(xp.compareTo(xq) < 0) { - xp = xp.add(key.p); - } - - // do last step - var y = xp.subtract(xq) - .multiply(key.qInv).mod(key.p) - .multiply(key.q).add(xq); - - // remove effect of random for cryptographic blinding - y = y.multiply(r.modInverse(key.n)).mod(key.n); - - return y; -}; - -/** - * NOTE: THIS METHOD IS DEPRECATED, use 'sign' on a private key object or - * 'encrypt' on a public key object instead. - * - * Performs RSA encryption. - * - * The parameter bt controls whether to put padding bytes before the - * message passed in. Set bt to either true or false to disable padding - * completely (in order to handle e.g. EMSA-PSS encoding seperately before), - * signaling whether the encryption operation is a public key operation - * (i.e. encrypting data) or not, i.e. private key operation (data signing). - * - * For PKCS#1 v1.5 padding pass in the block type to use, i.e. either 0x01 - * (for signing) or 0x02 (for encryption). The key operation mode (private - * or public) is derived from this flag in that case). - * - * @param m the message to encrypt as a byte string. - * @param key the RSA key to use. - * @param bt for PKCS#1 v1.5 padding, the block type to use - * (0x01 for private key, 0x02 for public), - * to disable padding: true = public key, false = private key. - * - * @return the encrypted bytes as a string. - */ -pki.rsa.encrypt = function(m, key, bt) { - var pub = bt; - var eb; - - // get the length of the modulus in bytes - var k = Math.ceil(key.n.bitLength() / 8); - - if(bt !== false && bt !== true) { - // legacy, default to PKCS#1 v1.5 padding - pub = (bt === 0x02); - eb = _encodePkcs1_v1_5(m, key, bt); - } else { - eb = forge.util.createBuffer(); - eb.putBytes(m); - } - - // load encryption block as big integer 'x' - // FIXME: hex conversion inefficient, get BigInteger w/byte strings - var x = new BigInteger(eb.toHex(), 16); - - // do RSA encryption - var y = _modPow(x, key, pub); - - // convert y into the encrypted data byte string, if y is shorter in - // bytes than k, then prepend zero bytes to fill up ed - // FIXME: hex conversion inefficient, get BigInteger w/byte strings - var yhex = y.toString(16); - var ed = forge.util.createBuffer(); - var zeros = k - Math.ceil(yhex.length / 2); - while(zeros > 0) { - ed.putByte(0x00); - --zeros; - } - ed.putBytes(forge.util.hexToBytes(yhex)); - return ed.getBytes(); -}; - -/** - * NOTE: THIS METHOD IS DEPRECATED, use 'decrypt' on a private key object or - * 'verify' on a public key object instead. - * - * Performs RSA decryption. - * - * The parameter ml controls whether to apply PKCS#1 v1.5 padding - * or not. Set ml = false to disable padding removal completely - * (in order to handle e.g. EMSA-PSS later on) and simply pass back - * the RSA encryption block. - * - * @param ed the encrypted data to decrypt in as a byte string. - * @param key the RSA key to use. - * @param pub true for a public key operation, false for private. - * @param ml the message length, if known, false to disable padding. - * - * @return the decrypted message as a byte string. - */ -pki.rsa.decrypt = function(ed, key, pub, ml) { - // get the length of the modulus in bytes - var k = Math.ceil(key.n.bitLength() / 8); - - // error if the length of the encrypted data ED is not k - if(ed.length !== k) { - var error = new Error('Encrypted message length is invalid.'); - error.length = ed.length; - error.expected = k; - throw error; - } - - // convert encrypted data into a big integer - // FIXME: hex conversion inefficient, get BigInteger w/byte strings - var y = new BigInteger(forge.util.createBuffer(ed).toHex(), 16); - - // y must be less than the modulus or it wasn't the result of - // a previous mod operation (encryption) using that modulus - if(y.compareTo(key.n) >= 0) { - throw new Error('Encrypted message is invalid.'); - } - - // do RSA decryption - var x = _modPow(y, key, pub); - - // create the encryption block, if x is shorter in bytes than k, then - // prepend zero bytes to fill up eb - // FIXME: hex conversion inefficient, get BigInteger w/byte strings - var xhex = x.toString(16); - var eb = forge.util.createBuffer(); - var zeros = k - Math.ceil(xhex.length / 2); - while(zeros > 0) { - eb.putByte(0x00); - --zeros; - } - eb.putBytes(forge.util.hexToBytes(xhex)); - - if(ml !== false) { - // legacy, default to PKCS#1 v1.5 padding - return _decodePkcs1_v1_5(eb.getBytes(), key, pub); - } - - // return message - return eb.getBytes(); -}; - -/** - * Creates an RSA key-pair generation state object. It is used to allow - * key-generation to be performed in steps. It also allows for a UI to - * display progress updates. - * - * @param bits the size for the private key in bits, defaults to 2048. - * @param e the public exponent to use, defaults to 65537 (0x10001). - * @param [options] the options to use. - * prng a custom crypto-secure pseudo-random number generator to use, - * that must define "getBytesSync". - * algorithm the algorithm to use (default: 'PRIMEINC'). - * - * @return the state object to use to generate the key-pair. - */ -pki.rsa.createKeyPairGenerationState = function(bits, e, options) { - // TODO: migrate step-based prime generation code to forge.prime - - // set default bits - if(typeof(bits) === 'string') { - bits = parseInt(bits, 10); - } - bits = bits || 2048; - - // create prng with api that matches BigInteger secure random - options = options || {}; - var prng = options.prng || forge.random; - var rng = { - // x is an array to fill with bytes - nextBytes: function(x) { - var b = prng.getBytesSync(x.length); - for(var i = 0; i < x.length; ++i) { - x[i] = b.charCodeAt(i); - } - } - }; - - var algorithm = options.algorithm || 'PRIMEINC'; - - // create PRIMEINC algorithm state - var rval; - if(algorithm === 'PRIMEINC') { - rval = { - algorithm: algorithm, - state: 0, - bits: bits, - rng: rng, - eInt: e || 65537, - e: new BigInteger(null), - p: null, - q: null, - qBits: bits >> 1, - pBits: bits - (bits >> 1), - pqState: 0, - num: null, - keys: null - }; - rval.e.fromInt(rval.eInt); - } else { - throw new Error('Invalid key generation algorithm: ' + algorithm); - } - - return rval; -}; - -/** - * Attempts to runs the key-generation algorithm for at most n seconds - * (approximately) using the given state. When key-generation has completed, - * the keys will be stored in state.keys. - * - * To use this function to update a UI while generating a key or to prevent - * causing browser lockups/warnings, set "n" to a value other than 0. A - * simple pattern for generating a key and showing a progress indicator is: - * - * var state = pki.rsa.createKeyPairGenerationState(2048); - * var step = function() { - * // step key-generation, run algorithm for 100 ms, repeat - * if(!forge.pki.rsa.stepKeyPairGenerationState(state, 100)) { - * setTimeout(step, 1); - * } else { - * // key-generation complete - * // TODO: turn off progress indicator here - * // TODO: use the generated key-pair in "state.keys" - * } - * }; - * // TODO: turn on progress indicator here - * setTimeout(step, 0); - * - * @param state the state to use. - * @param n the maximum number of milliseconds to run the algorithm for, 0 - * to run the algorithm to completion. - * - * @return true if the key-generation completed, false if not. - */ -pki.rsa.stepKeyPairGenerationState = function(state, n) { - // set default algorithm if not set - if(!('algorithm' in state)) { - state.algorithm = 'PRIMEINC'; - } - - // TODO: migrate step-based prime generation code to forge.prime - // TODO: abstract as PRIMEINC algorithm - - // do key generation (based on Tom Wu's rsa.js, see jsbn.js license) - // with some minor optimizations and designed to run in steps - - // local state vars - var THIRTY = new BigInteger(null); - THIRTY.fromInt(30); - var deltaIdx = 0; - var op_or = function(x, y) {return x | y;}; - - // keep stepping until time limit is reached or done - var t1 = +new Date(); - var t2; - var total = 0; - while(state.keys === null && (n <= 0 || total < n)) { - // generate p or q - if(state.state === 0) { - /* Note: All primes are of the form: - - 30k+i, for i < 30 and gcd(30, i)=1, where there are 8 values for i - - When we generate a random number, we always align it at 30k + 1. Each - time the number is determined not to be prime we add to get to the - next 'i', eg: if the number was at 30k + 1 we add 6. */ - var bits = (state.p === null) ? state.pBits : state.qBits; - var bits1 = bits - 1; - - // get a random number - if(state.pqState === 0) { - state.num = new BigInteger(bits, state.rng); - // force MSB set - if(!state.num.testBit(bits1)) { - state.num.bitwiseTo( - BigInteger.ONE.shiftLeft(bits1), op_or, state.num); - } - // align number on 30k+1 boundary - state.num.dAddOffset(31 - state.num.mod(THIRTY).byteValue(), 0); - deltaIdx = 0; - - ++state.pqState; - } else if(state.pqState === 1) { - // try to make the number a prime - if(state.num.bitLength() > bits) { - // overflow, try again - state.pqState = 0; - // do primality test - } else if(state.num.isProbablePrime( - _getMillerRabinTests(state.num.bitLength()))) { - ++state.pqState; - } else { - // get next potential prime - state.num.dAddOffset(GCD_30_DELTA[deltaIdx++ % 8], 0); - } - } else if(state.pqState === 2) { - // ensure number is coprime with e - state.pqState = - (state.num.subtract(BigInteger.ONE).gcd(state.e) - .compareTo(BigInteger.ONE) === 0) ? 3 : 0; - } else if(state.pqState === 3) { - // store p or q - state.pqState = 0; - if(state.p === null) { - state.p = state.num; - } else { - state.q = state.num; - } - - // advance state if both p and q are ready - if(state.p !== null && state.q !== null) { - ++state.state; - } - state.num = null; - } - } else if(state.state === 1) { - // ensure p is larger than q (swap them if not) - if(state.p.compareTo(state.q) < 0) { - state.num = state.p; - state.p = state.q; - state.q = state.num; - } - ++state.state; - } else if(state.state === 2) { - // compute phi: (p - 1)(q - 1) (Euler's totient function) - state.p1 = state.p.subtract(BigInteger.ONE); - state.q1 = state.q.subtract(BigInteger.ONE); - state.phi = state.p1.multiply(state.q1); - ++state.state; - } else if(state.state === 3) { - // ensure e and phi are coprime - if(state.phi.gcd(state.e).compareTo(BigInteger.ONE) === 0) { - // phi and e are coprime, advance - ++state.state; - } else { - // phi and e aren't coprime, so generate a new p and q - state.p = null; - state.q = null; - state.state = 0; - } - } else if(state.state === 4) { - // create n, ensure n is has the right number of bits - state.n = state.p.multiply(state.q); - - // ensure n is right number of bits - if(state.n.bitLength() === state.bits) { - // success, advance - ++state.state; - } else { - // failed, get new q - state.q = null; - state.state = 0; - } - } else if(state.state === 5) { - // set keys - var d = state.e.modInverse(state.phi); - state.keys = { - privateKey: pki.rsa.setPrivateKey( - state.n, state.e, d, state.p, state.q, - d.mod(state.p1), d.mod(state.q1), - state.q.modInverse(state.p)), - publicKey: pki.rsa.setPublicKey(state.n, state.e) - }; - } - - // update timing - t2 = +new Date(); - total += t2 - t1; - t1 = t2; - } - - return state.keys !== null; -}; - -/** - * Generates an RSA public-private key pair in a single call. - * - * To generate a key-pair in steps (to allow for progress updates and to - * prevent blocking or warnings in slow browsers) then use the key-pair - * generation state functions. - * - * To generate a key-pair asynchronously (either through web-workers, if - * available, or by breaking up the work on the main thread), pass a - * callback function. - * - * @param [bits] the size for the private key in bits, defaults to 2048. - * @param [e] the public exponent to use, defaults to 65537. - * @param [options] options for key-pair generation, if given then 'bits' - * and 'e' must *not* be given: - * bits the size for the private key in bits, (default: 2048). - * e the public exponent to use, (default: 65537 (0x10001)). - * workerScript the worker script URL. - * workers the number of web workers (if supported) to use, - * (default: 2). - * workLoad the size of the work load, ie: number of possible prime - * numbers for each web worker to check per work assignment, - * (default: 100). - * prng a custom crypto-secure pseudo-random number generator to use, - * that must define "getBytesSync". Disables use of native APIs. - * algorithm the algorithm to use (default: 'PRIMEINC'). - * @param [callback(err, keypair)] called once the operation completes. - * - * @return an object with privateKey and publicKey properties. - */ -pki.rsa.generateKeyPair = function(bits, e, options, callback) { - // (bits), (options), (callback) - if(arguments.length === 1) { - if(typeof bits === 'object') { - options = bits; - bits = undefined; - } else if(typeof bits === 'function') { - callback = bits; - bits = undefined; - } - } else if(arguments.length === 2) { - // (bits, e), (bits, options), (bits, callback), (options, callback) - if(typeof bits === 'number') { - if(typeof e === 'function') { - callback = e; - e = undefined; - } else if(typeof e !== 'number') { - options = e; - e = undefined; - } - } else { - options = bits; - callback = e; - bits = undefined; - e = undefined; - } - } else if(arguments.length === 3) { - // (bits, e, options), (bits, e, callback), (bits, options, callback) - if(typeof e === 'number') { - if(typeof options === 'function') { - callback = options; - options = undefined; - } - } else { - callback = options; - options = e; - e = undefined; - } - } - options = options || {}; - if(bits === undefined) { - bits = options.bits || 2048; - } - if(e === undefined) { - e = options.e || 0x10001; - } - - // use native code if permitted, available, and parameters are acceptable - if(!forge.options.usePureJavaScript && !options.prng && - bits >= 256 && bits <= 16384 && (e === 0x10001 || e === 3)) { - if(callback) { - // try native async - if(_detectNodeCrypto('generateKeyPair')) { - return _crypto.generateKeyPair('rsa', { - modulusLength: bits, - publicExponent: e, - publicKeyEncoding: { - type: 'spki', - format: 'pem' - }, - privateKeyEncoding: { - type: 'pkcs8', - format: 'pem' - } - }, function(err, pub, priv) { - if(err) { - return callback(err); - } - callback(null, { - privateKey: pki.privateKeyFromPem(priv), - publicKey: pki.publicKeyFromPem(pub) - }); - }); - } - if(_detectSubtleCrypto('generateKey') && - _detectSubtleCrypto('exportKey')) { - // use standard native generateKey - return util.globalScope.crypto.subtle.generateKey({ - name: 'RSASSA-PKCS1-v1_5', - modulusLength: bits, - publicExponent: _intToUint8Array(e), - hash: {name: 'SHA-256'} - }, true /* key can be exported*/, ['sign', 'verify']) - .then(function(pair) { - return util.globalScope.crypto.subtle.exportKey( - 'pkcs8', pair.privateKey); - // avoiding catch(function(err) {...}) to support IE <= 8 - }).then(undefined, function(err) { - callback(err); - }).then(function(pkcs8) { - if(pkcs8) { - var privateKey = pki.privateKeyFromAsn1( - asn1.fromDer(forge.util.createBuffer(pkcs8))); - callback(null, { - privateKey: privateKey, - publicKey: pki.setRsaPublicKey(privateKey.n, privateKey.e) - }); - } - }); - } - if(_detectSubtleMsCrypto('generateKey') && - _detectSubtleMsCrypto('exportKey')) { - var genOp = util.globalScope.msCrypto.subtle.generateKey({ - name: 'RSASSA-PKCS1-v1_5', - modulusLength: bits, - publicExponent: _intToUint8Array(e), - hash: {name: 'SHA-256'} - }, true /* key can be exported*/, ['sign', 'verify']); - genOp.oncomplete = function(e) { - var pair = e.target.result; - var exportOp = util.globalScope.msCrypto.subtle.exportKey( - 'pkcs8', pair.privateKey); - exportOp.oncomplete = function(e) { - var pkcs8 = e.target.result; - var privateKey = pki.privateKeyFromAsn1( - asn1.fromDer(forge.util.createBuffer(pkcs8))); - callback(null, { - privateKey: privateKey, - publicKey: pki.setRsaPublicKey(privateKey.n, privateKey.e) - }); - }; - exportOp.onerror = function(err) { - callback(err); - }; - }; - genOp.onerror = function(err) { - callback(err); - }; - return; - } - } else { - // try native sync - if(_detectNodeCrypto('generateKeyPairSync')) { - var keypair = _crypto.generateKeyPairSync('rsa', { - modulusLength: bits, - publicExponent: e, - publicKeyEncoding: { - type: 'spki', - format: 'pem' - }, - privateKeyEncoding: { - type: 'pkcs8', - format: 'pem' - } - }); - return { - privateKey: pki.privateKeyFromPem(keypair.privateKey), - publicKey: pki.publicKeyFromPem(keypair.publicKey) - }; - } - } - } - - // use JavaScript implementation - var state = pki.rsa.createKeyPairGenerationState(bits, e, options); - if(!callback) { - pki.rsa.stepKeyPairGenerationState(state, 0); - return state.keys; - } - _generateKeyPair(state, options, callback); -}; - -/** - * Sets an RSA public key from BigIntegers modulus and exponent. - * - * @param n the modulus. - * @param e the exponent. - * - * @return the public key. - */ -pki.setRsaPublicKey = pki.rsa.setPublicKey = function(n, e) { - var key = { - n: n, - e: e - }; - - /** - * Encrypts the given data with this public key. Newer applications - * should use the 'RSA-OAEP' decryption scheme, 'RSAES-PKCS1-V1_5' is for - * legacy applications. - * - * @param data the byte string to encrypt. - * @param scheme the encryption scheme to use: - * 'RSAES-PKCS1-V1_5' (default), - * 'RSA-OAEP', - * 'RAW', 'NONE', or null to perform raw RSA encryption, - * an object with an 'encode' property set to a function - * with the signature 'function(data, key)' that returns - * a binary-encoded string representing the encoded data. - * @param schemeOptions any scheme-specific options. - * - * @return the encrypted byte string. - */ - key.encrypt = function(data, scheme, schemeOptions) { - if(typeof scheme === 'string') { - scheme = scheme.toUpperCase(); - } else if(scheme === undefined) { - scheme = 'RSAES-PKCS1-V1_5'; - } - - if(scheme === 'RSAES-PKCS1-V1_5') { - scheme = { - encode: function(m, key, pub) { - return _encodePkcs1_v1_5(m, key, 0x02).getBytes(); - } - }; - } else if(scheme === 'RSA-OAEP' || scheme === 'RSAES-OAEP') { - scheme = { - encode: function(m, key) { - return forge.pkcs1.encode_rsa_oaep(key, m, schemeOptions); - } - }; - } else if(['RAW', 'NONE', 'NULL', null].indexOf(scheme) !== -1) { - scheme = {encode: function(e) {return e;}}; - } else if(typeof scheme === 'string') { - throw new Error('Unsupported encryption scheme: "' + scheme + '".'); - } - - // do scheme-based encoding then rsa encryption - var e = scheme.encode(data, key, true); - return pki.rsa.encrypt(e, key, true); - }; - - /** - * Verifies the given signature against the given digest. - * - * PKCS#1 supports multiple (currently two) signature schemes: - * RSASSA-PKCS1-V1_5 and RSASSA-PSS. - * - * By default this implementation uses the "old scheme", i.e. - * RSASSA-PKCS1-V1_5, in which case once RSA-decrypted, the - * signature is an OCTET STRING that holds a DigestInfo. - * - * DigestInfo ::= SEQUENCE { - * digestAlgorithm DigestAlgorithmIdentifier, - * digest Digest - * } - * DigestAlgorithmIdentifier ::= AlgorithmIdentifier - * Digest ::= OCTET STRING - * - * To perform PSS signature verification, provide an instance - * of Forge PSS object as the scheme parameter. - * - * @param digest the message digest hash to compare against the signature, - * as a binary-encoded string. - * @param signature the signature to verify, as a binary-encoded string. - * @param scheme signature verification scheme to use: - * 'RSASSA-PKCS1-V1_5' or undefined for RSASSA PKCS#1 v1.5, - * a Forge PSS object for RSASSA-PSS, - * 'NONE' or null for none, DigestInfo will not be expected, but - * PKCS#1 v1.5 padding will still be used. - * - * @return true if the signature was verified, false if not. - */ - key.verify = function(digest, signature, scheme) { - if(typeof scheme === 'string') { - scheme = scheme.toUpperCase(); - } else if(scheme === undefined) { - scheme = 'RSASSA-PKCS1-V1_5'; - } - - if(scheme === 'RSASSA-PKCS1-V1_5') { - scheme = { - verify: function(digest, d) { - // remove padding - d = _decodePkcs1_v1_5(d, key, true); - // d is ASN.1 BER-encoded DigestInfo - var obj = asn1.fromDer(d); - // compare the given digest to the decrypted one - return digest === obj.value[1].value; - } - }; - } else if(scheme === 'NONE' || scheme === 'NULL' || scheme === null) { - scheme = { - verify: function(digest, d) { - // remove padding - d = _decodePkcs1_v1_5(d, key, true); - return digest === d; - } - }; - } - - // do rsa decryption w/o any decoding, then verify -- which does decoding - var d = pki.rsa.decrypt(signature, key, true, false); - return scheme.verify(digest, d, key.n.bitLength()); - }; - - return key; -}; - -/** - * Sets an RSA private key from BigIntegers modulus, exponent, primes, - * prime exponents, and modular multiplicative inverse. - * - * @param n the modulus. - * @param e the public exponent. - * @param d the private exponent ((inverse of e) mod n). - * @param p the first prime. - * @param q the second prime. - * @param dP exponent1 (d mod (p-1)). - * @param dQ exponent2 (d mod (q-1)). - * @param qInv ((inverse of q) mod p) - * - * @return the private key. - */ -pki.setRsaPrivateKey = pki.rsa.setPrivateKey = function( - n, e, d, p, q, dP, dQ, qInv) { - var key = { - n: n, - e: e, - d: d, - p: p, - q: q, - dP: dP, - dQ: dQ, - qInv: qInv - }; - - /** - * Decrypts the given data with this private key. The decryption scheme - * must match the one used to encrypt the data. - * - * @param data the byte string to decrypt. - * @param scheme the decryption scheme to use: - * 'RSAES-PKCS1-V1_5' (default), - * 'RSA-OAEP', - * 'RAW', 'NONE', or null to perform raw RSA decryption. - * @param schemeOptions any scheme-specific options. - * - * @return the decrypted byte string. - */ - key.decrypt = function(data, scheme, schemeOptions) { - if(typeof scheme === 'string') { - scheme = scheme.toUpperCase(); - } else if(scheme === undefined) { - scheme = 'RSAES-PKCS1-V1_5'; - } - - // do rsa decryption w/o any decoding - var d = pki.rsa.decrypt(data, key, false, false); - - if(scheme === 'RSAES-PKCS1-V1_5') { - scheme = {decode: _decodePkcs1_v1_5}; - } else if(scheme === 'RSA-OAEP' || scheme === 'RSAES-OAEP') { - scheme = { - decode: function(d, key) { - return forge.pkcs1.decode_rsa_oaep(key, d, schemeOptions); - } - }; - } else if(['RAW', 'NONE', 'NULL', null].indexOf(scheme) !== -1) { - scheme = {decode: function(d) {return d;}}; - } else { - throw new Error('Unsupported encryption scheme: "' + scheme + '".'); - } - - // decode according to scheme - return scheme.decode(d, key, false); - }; - - /** - * Signs the given digest, producing a signature. - * - * PKCS#1 supports multiple (currently two) signature schemes: - * RSASSA-PKCS1-V1_5 and RSASSA-PSS. - * - * By default this implementation uses the "old scheme", i.e. - * RSASSA-PKCS1-V1_5. In order to generate a PSS signature, provide - * an instance of Forge PSS object as the scheme parameter. - * - * @param md the message digest object with the hash to sign. - * @param scheme the signature scheme to use: - * 'RSASSA-PKCS1-V1_5' or undefined for RSASSA PKCS#1 v1.5, - * a Forge PSS object for RSASSA-PSS, - * 'NONE' or null for none, DigestInfo will not be used but - * PKCS#1 v1.5 padding will still be used. - * - * @return the signature as a byte string. - */ - key.sign = function(md, scheme) { - /* Note: The internal implementation of RSA operations is being - transitioned away from a PKCS#1 v1.5 hard-coded scheme. Some legacy - code like the use of an encoding block identifier 'bt' will eventually - be removed. */ - - // private key operation - var bt = false; - - if(typeof scheme === 'string') { - scheme = scheme.toUpperCase(); - } - - if(scheme === undefined || scheme === 'RSASSA-PKCS1-V1_5') { - scheme = {encode: emsaPkcs1v15encode}; - bt = 0x01; - } else if(scheme === 'NONE' || scheme === 'NULL' || scheme === null) { - scheme = {encode: function() {return md;}}; - bt = 0x01; - } - - // encode and then encrypt - var d = scheme.encode(md, key.n.bitLength()); - return pki.rsa.encrypt(d, key, bt); - }; - - return key; -}; - -/** - * Wraps an RSAPrivateKey ASN.1 object in an ASN.1 PrivateKeyInfo object. - * - * @param rsaKey the ASN.1 RSAPrivateKey. - * - * @return the ASN.1 PrivateKeyInfo. - */ -pki.wrapRsaPrivateKey = function(rsaKey) { - // PrivateKeyInfo - return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // version (0) - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - asn1.integerToDer(0).getBytes()), - // privateKeyAlgorithm - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(pki.oids.rsaEncryption).getBytes()), - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '') - ]), - // PrivateKey - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, - asn1.toDer(rsaKey).getBytes()) - ]); -}; - -/** - * Converts a private key from an ASN.1 object. - * - * @param obj the ASN.1 representation of a PrivateKeyInfo containing an - * RSAPrivateKey or an RSAPrivateKey. - * - * @return the private key. - */ -pki.privateKeyFromAsn1 = function(obj) { - // get PrivateKeyInfo - var capture = {}; - var errors = []; - if(asn1.validate(obj, privateKeyValidator, capture, errors)) { - obj = asn1.fromDer(forge.util.createBuffer(capture.privateKey)); - } - - // get RSAPrivateKey - capture = {}; - errors = []; - if(!asn1.validate(obj, rsaPrivateKeyValidator, capture, errors)) { - var error = new Error('Cannot read private key. ' + - 'ASN.1 object does not contain an RSAPrivateKey.'); - error.errors = errors; - throw error; - } - - // Note: Version is currently ignored. - // capture.privateKeyVersion - // FIXME: inefficient, get a BigInteger that uses byte strings - var n, e, d, p, q, dP, dQ, qInv; - n = forge.util.createBuffer(capture.privateKeyModulus).toHex(); - e = forge.util.createBuffer(capture.privateKeyPublicExponent).toHex(); - d = forge.util.createBuffer(capture.privateKeyPrivateExponent).toHex(); - p = forge.util.createBuffer(capture.privateKeyPrime1).toHex(); - q = forge.util.createBuffer(capture.privateKeyPrime2).toHex(); - dP = forge.util.createBuffer(capture.privateKeyExponent1).toHex(); - dQ = forge.util.createBuffer(capture.privateKeyExponent2).toHex(); - qInv = forge.util.createBuffer(capture.privateKeyCoefficient).toHex(); - - // set private key - return pki.setRsaPrivateKey( - new BigInteger(n, 16), - new BigInteger(e, 16), - new BigInteger(d, 16), - new BigInteger(p, 16), - new BigInteger(q, 16), - new BigInteger(dP, 16), - new BigInteger(dQ, 16), - new BigInteger(qInv, 16)); -}; - -/** - * Converts a private key to an ASN.1 RSAPrivateKey. - * - * @param key the private key. - * - * @return the ASN.1 representation of an RSAPrivateKey. - */ -pki.privateKeyToAsn1 = pki.privateKeyToRSAPrivateKey = function(key) { - // RSAPrivateKey - return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // version (0 = only 2 primes, 1 multiple primes) - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - asn1.integerToDer(0).getBytes()), - // modulus (n) - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - _bnToBytes(key.n)), - // publicExponent (e) - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - _bnToBytes(key.e)), - // privateExponent (d) - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - _bnToBytes(key.d)), - // privateKeyPrime1 (p) - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - _bnToBytes(key.p)), - // privateKeyPrime2 (q) - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - _bnToBytes(key.q)), - // privateKeyExponent1 (dP) - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - _bnToBytes(key.dP)), - // privateKeyExponent2 (dQ) - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - _bnToBytes(key.dQ)), - // coefficient (qInv) - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - _bnToBytes(key.qInv)) - ]); -}; - -/** - * Converts a public key from an ASN.1 SubjectPublicKeyInfo or RSAPublicKey. - * - * @param obj the asn1 representation of a SubjectPublicKeyInfo or RSAPublicKey. - * - * @return the public key. - */ -pki.publicKeyFromAsn1 = function(obj) { - // get SubjectPublicKeyInfo - var capture = {}; - var errors = []; - if(asn1.validate(obj, publicKeyValidator, capture, errors)) { - // get oid - var oid = asn1.derToOid(capture.publicKeyOid); - if(oid !== pki.oids.rsaEncryption) { - var error = new Error('Cannot read public key. Unknown OID.'); - error.oid = oid; - throw error; - } - obj = capture.rsaPublicKey; - } - - // get RSA params - errors = []; - if(!asn1.validate(obj, rsaPublicKeyValidator, capture, errors)) { - var error = new Error('Cannot read public key. ' + - 'ASN.1 object does not contain an RSAPublicKey.'); - error.errors = errors; - throw error; - } - - // FIXME: inefficient, get a BigInteger that uses byte strings - var n = forge.util.createBuffer(capture.publicKeyModulus).toHex(); - var e = forge.util.createBuffer(capture.publicKeyExponent).toHex(); - - // set public key - return pki.setRsaPublicKey( - new BigInteger(n, 16), - new BigInteger(e, 16)); -}; - -/** - * Converts a public key to an ASN.1 SubjectPublicKeyInfo. - * - * @param key the public key. - * - * @return the asn1 representation of a SubjectPublicKeyInfo. - */ -pki.publicKeyToAsn1 = pki.publicKeyToSubjectPublicKeyInfo = function(key) { - // SubjectPublicKeyInfo - return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // AlgorithmIdentifier - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // algorithm - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(pki.oids.rsaEncryption).getBytes()), - // parameters (null) - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '') - ]), - // subjectPublicKey - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false, [ - pki.publicKeyToRSAPublicKey(key) - ]) - ]); -}; - -/** - * Converts a public key to an ASN.1 RSAPublicKey. - * - * @param key the public key. - * - * @return the asn1 representation of a RSAPublicKey. - */ -pki.publicKeyToRSAPublicKey = function(key) { - // RSAPublicKey - return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // modulus (n) - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - _bnToBytes(key.n)), - // publicExponent (e) - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - _bnToBytes(key.e)) - ]); -}; - -/** - * Encodes a message using PKCS#1 v1.5 padding. - * - * @param m the message to encode. - * @param key the RSA key to use. - * @param bt the block type to use, i.e. either 0x01 (for signing) or 0x02 - * (for encryption). - * - * @return the padded byte buffer. - */ -function _encodePkcs1_v1_5(m, key, bt) { - var eb = forge.util.createBuffer(); - - // get the length of the modulus in bytes - var k = Math.ceil(key.n.bitLength() / 8); - - /* use PKCS#1 v1.5 padding */ - if(m.length > (k - 11)) { - var error = new Error('Message is too long for PKCS#1 v1.5 padding.'); - error.length = m.length; - error.max = k - 11; - throw error; - } - - /* A block type BT, a padding string PS, and the data D shall be - formatted into an octet string EB, the encryption block: - - EB = 00 || BT || PS || 00 || D - - The block type BT shall be a single octet indicating the structure of - the encryption block. For this version of the document it shall have - value 00, 01, or 02. For a private-key operation, the block type - shall be 00 or 01. For a public-key operation, it shall be 02. - - The padding string PS shall consist of k-3-||D|| octets. For block - type 00, the octets shall have value 00; for block type 01, they - shall have value FF; and for block type 02, they shall be - pseudorandomly generated and nonzero. This makes the length of the - encryption block EB equal to k. */ - - // build the encryption block - eb.putByte(0x00); - eb.putByte(bt); - - // create the padding - var padNum = k - 3 - m.length; - var padByte; - // private key op - if(bt === 0x00 || bt === 0x01) { - padByte = (bt === 0x00) ? 0x00 : 0xFF; - for(var i = 0; i < padNum; ++i) { - eb.putByte(padByte); - } - } else { - // public key op - // pad with random non-zero values - while(padNum > 0) { - var numZeros = 0; - var padBytes = forge.random.getBytes(padNum); - for(var i = 0; i < padNum; ++i) { - padByte = padBytes.charCodeAt(i); - if(padByte === 0) { - ++numZeros; - } else { - eb.putByte(padByte); - } - } - padNum = numZeros; - } - } - - // zero followed by message - eb.putByte(0x00); - eb.putBytes(m); - - return eb; -} - -/** - * Decodes a message using PKCS#1 v1.5 padding. - * - * @param em the message to decode. - * @param key the RSA key to use. - * @param pub true if the key is a public key, false if it is private. - * @param ml the message length, if specified. - * - * @return the decoded bytes. - */ -function _decodePkcs1_v1_5(em, key, pub, ml) { - // get the length of the modulus in bytes - var k = Math.ceil(key.n.bitLength() / 8); - - /* It is an error if any of the following conditions occurs: - - 1. The encryption block EB cannot be parsed unambiguously. - 2. The padding string PS consists of fewer than eight octets - or is inconsisent with the block type BT. - 3. The decryption process is a public-key operation and the block - type BT is not 00 or 01, or the decryption process is a - private-key operation and the block type is not 02. - */ - - // parse the encryption block - var eb = forge.util.createBuffer(em); - var first = eb.getByte(); - var bt = eb.getByte(); - if(first !== 0x00 || - (pub && bt !== 0x00 && bt !== 0x01) || - (!pub && bt != 0x02) || - (pub && bt === 0x00 && typeof(ml) === 'undefined')) { - throw new Error('Encryption block is invalid.'); - } - - var padNum = 0; - if(bt === 0x00) { - // check all padding bytes for 0x00 - padNum = k - 3 - ml; - for(var i = 0; i < padNum; ++i) { - if(eb.getByte() !== 0x00) { - throw new Error('Encryption block is invalid.'); - } - } - } else if(bt === 0x01) { - // find the first byte that isn't 0xFF, should be after all padding - padNum = 0; - while(eb.length() > 1) { - if(eb.getByte() !== 0xFF) { - --eb.read; - break; - } - ++padNum; - } - } else if(bt === 0x02) { - // look for 0x00 byte - padNum = 0; - while(eb.length() > 1) { - if(eb.getByte() === 0x00) { - --eb.read; - break; - } - ++padNum; - } - } - - // zero must be 0x00 and padNum must be (k - 3 - message length) - var zero = eb.getByte(); - if(zero !== 0x00 || padNum !== (k - 3 - eb.length())) { - throw new Error('Encryption block is invalid.'); - } - - return eb.getBytes(); -} - -/** - * Runs the key-generation algorithm asynchronously, either in the background - * via Web Workers, or using the main thread and setImmediate. - * - * @param state the key-pair generation state. - * @param [options] options for key-pair generation: - * workerScript the worker script URL. - * workers the number of web workers (if supported) to use, - * (default: 2, -1 to use estimated cores minus one). - * workLoad the size of the work load, ie: number of possible prime - * numbers for each web worker to check per work assignment, - * (default: 100). - * @param callback(err, keypair) called once the operation completes. - */ -function _generateKeyPair(state, options, callback) { - if(typeof options === 'function') { - callback = options; - options = {}; - } - options = options || {}; - - var opts = { - algorithm: { - name: options.algorithm || 'PRIMEINC', - options: { - workers: options.workers || 2, - workLoad: options.workLoad || 100, - workerScript: options.workerScript - } - } - }; - if('prng' in options) { - opts.prng = options.prng; - } - - generate(); - - function generate() { - // find p and then q (done in series to simplify) - getPrime(state.pBits, function(err, num) { - if(err) { - return callback(err); - } - state.p = num; - if(state.q !== null) { - return finish(err, state.q); - } - getPrime(state.qBits, finish); - }); - } - - function getPrime(bits, callback) { - forge.prime.generateProbablePrime(bits, opts, callback); - } - - function finish(err, num) { - if(err) { - return callback(err); - } - - // set q - state.q = num; - - // ensure p is larger than q (swap them if not) - if(state.p.compareTo(state.q) < 0) { - var tmp = state.p; - state.p = state.q; - state.q = tmp; - } - - // ensure p is coprime with e - if(state.p.subtract(BigInteger.ONE).gcd(state.e) - .compareTo(BigInteger.ONE) !== 0) { - state.p = null; - generate(); - return; - } - - // ensure q is coprime with e - if(state.q.subtract(BigInteger.ONE).gcd(state.e) - .compareTo(BigInteger.ONE) !== 0) { - state.q = null; - getPrime(state.qBits, finish); - return; - } - - // compute phi: (p - 1)(q - 1) (Euler's totient function) - state.p1 = state.p.subtract(BigInteger.ONE); - state.q1 = state.q.subtract(BigInteger.ONE); - state.phi = state.p1.multiply(state.q1); - - // ensure e and phi are coprime - if(state.phi.gcd(state.e).compareTo(BigInteger.ONE) !== 0) { - // phi and e aren't coprime, so generate a new p and q - state.p = state.q = null; - generate(); - return; - } - - // create n, ensure n is has the right number of bits - state.n = state.p.multiply(state.q); - if(state.n.bitLength() !== state.bits) { - // failed, get new q - state.q = null; - getPrime(state.qBits, finish); - return; - } - - // set keys - var d = state.e.modInverse(state.phi); - state.keys = { - privateKey: pki.rsa.setPrivateKey( - state.n, state.e, d, state.p, state.q, - d.mod(state.p1), d.mod(state.q1), - state.q.modInverse(state.p)), - publicKey: pki.rsa.setPublicKey(state.n, state.e) - }; - - callback(null, state.keys); - } -} - -/** - * Converts a positive BigInteger into 2's-complement big-endian bytes. - * - * @param b the big integer to convert. - * - * @return the bytes. - */ -function _bnToBytes(b) { - // prepend 0x00 if first byte >= 0x80 - var hex = b.toString(16); - if(hex[0] >= '8') { - hex = '00' + hex; - } - var bytes = forge.util.hexToBytes(hex); - - // ensure integer is minimally-encoded - if(bytes.length > 1 && - // leading 0x00 for positive integer - ((bytes.charCodeAt(0) === 0 && - (bytes.charCodeAt(1) & 0x80) === 0) || - // leading 0xFF for negative integer - (bytes.charCodeAt(0) === 0xFF && - (bytes.charCodeAt(1) & 0x80) === 0x80))) { - return bytes.substr(1); - } - return bytes; -} - -/** - * Returns the required number of Miller-Rabin tests to generate a - * prime with an error probability of (1/2)^80. - * - * See Handbook of Applied Cryptography Chapter 4, Table 4.4. - * - * @param bits the bit size. - * - * @return the required number of iterations. - */ -function _getMillerRabinTests(bits) { - if(bits <= 100) return 27; - if(bits <= 150) return 18; - if(bits <= 200) return 15; - if(bits <= 250) return 12; - if(bits <= 300) return 9; - if(bits <= 350) return 8; - if(bits <= 400) return 7; - if(bits <= 500) return 6; - if(bits <= 600) return 5; - if(bits <= 800) return 4; - if(bits <= 1250) return 3; - return 2; -} - -/** - * Performs feature detection on the Node crypto interface. - * - * @param fn the feature (function) to detect. - * - * @return true if detected, false if not. - */ -function _detectNodeCrypto(fn) { - return forge.util.isNodejs && typeof _crypto[fn] === 'function'; -} - -/** - * Performs feature detection on the SubtleCrypto interface. - * - * @param fn the feature (function) to detect. - * - * @return true if detected, false if not. - */ -function _detectSubtleCrypto(fn) { - return (typeof util.globalScope !== 'undefined' && - typeof util.globalScope.crypto === 'object' && - typeof util.globalScope.crypto.subtle === 'object' && - typeof util.globalScope.crypto.subtle[fn] === 'function'); -} - -/** - * Performs feature detection on the deprecated Microsoft Internet Explorer - * outdated SubtleCrypto interface. This function should only be used after - * checking for the modern, standard SubtleCrypto interface. - * - * @param fn the feature (function) to detect. - * - * @return true if detected, false if not. - */ -function _detectSubtleMsCrypto(fn) { - return (typeof util.globalScope !== 'undefined' && - typeof util.globalScope.msCrypto === 'object' && - typeof util.globalScope.msCrypto.subtle === 'object' && - typeof util.globalScope.msCrypto.subtle[fn] === 'function'); -} - -function _intToUint8Array(x) { - var bytes = forge.util.hexToBytes(x.toString(16)); - var buffer = new Uint8Array(bytes.length); - for(var i = 0; i < bytes.length; ++i) { - buffer[i] = bytes.charCodeAt(i); - } - return buffer; -} - -function _privateKeyFromJwk(jwk) { - if(jwk.kty !== 'RSA') { - throw new Error( - 'Unsupported key algorithm "' + jwk.kty + '"; algorithm must be "RSA".'); - } - return pki.setRsaPrivateKey( - _base64ToBigInt(jwk.n), - _base64ToBigInt(jwk.e), - _base64ToBigInt(jwk.d), - _base64ToBigInt(jwk.p), - _base64ToBigInt(jwk.q), - _base64ToBigInt(jwk.dp), - _base64ToBigInt(jwk.dq), - _base64ToBigInt(jwk.qi)); -} - -function _publicKeyFromJwk(jwk) { - if(jwk.kty !== 'RSA') { - throw new Error('Key algorithm must be "RSA".'); - } - return pki.setRsaPublicKey( - _base64ToBigInt(jwk.n), - _base64ToBigInt(jwk.e)); -} - -function _base64ToBigInt(b64) { - return new BigInteger(forge.util.bytesToHex(forge.util.decode64(b64)), 16); -} diff --git a/reverse_engineering/node_modules/node-forge/lib/sha1.js b/reverse_engineering/node_modules/node-forge/lib/sha1.js deleted file mode 100644 index 5f84eb6..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/sha1.js +++ /dev/null @@ -1,319 +0,0 @@ -/** - * Secure Hash Algorithm with 160-bit digest (SHA-1) implementation. - * - * @author Dave Longley - * - * Copyright (c) 2010-2015 Digital Bazaar, Inc. - */ -var forge = require('./forge'); -require('./md'); -require('./util'); - -var sha1 = module.exports = forge.sha1 = forge.sha1 || {}; -forge.md.sha1 = forge.md.algorithms.sha1 = sha1; - -/** - * Creates a SHA-1 message digest object. - * - * @return a message digest object. - */ -sha1.create = function() { - // do initialization as necessary - if(!_initialized) { - _init(); - } - - // SHA-1 state contains five 32-bit integers - var _state = null; - - // input buffer - var _input = forge.util.createBuffer(); - - // used for word storage - var _w = new Array(80); - - // message digest object - var md = { - algorithm: 'sha1', - blockLength: 64, - digestLength: 20, - // 56-bit length of message so far (does not including padding) - messageLength: 0, - // true message length - fullMessageLength: null, - // size of message length in bytes - messageLengthSize: 8 - }; - - /** - * Starts the digest. - * - * @return this digest object. - */ - md.start = function() { - // up to 56-bit message length for convenience - md.messageLength = 0; - - // full message length (set md.messageLength64 for backwards-compatibility) - md.fullMessageLength = md.messageLength64 = []; - var int32s = md.messageLengthSize / 4; - for(var i = 0; i < int32s; ++i) { - md.fullMessageLength.push(0); - } - _input = forge.util.createBuffer(); - _state = { - h0: 0x67452301, - h1: 0xEFCDAB89, - h2: 0x98BADCFE, - h3: 0x10325476, - h4: 0xC3D2E1F0 - }; - return md; - }; - // start digest automatically for first time - md.start(); - - /** - * Updates the digest with the given message input. The given input can - * treated as raw input (no encoding will be applied) or an encoding of - * 'utf8' maybe given to encode the input using UTF-8. - * - * @param msg the message input to update with. - * @param encoding the encoding to use (default: 'raw', other: 'utf8'). - * - * @return this digest object. - */ - md.update = function(msg, encoding) { - if(encoding === 'utf8') { - msg = forge.util.encodeUtf8(msg); - } - - // update message length - var len = msg.length; - md.messageLength += len; - len = [(len / 0x100000000) >>> 0, len >>> 0]; - for(var i = md.fullMessageLength.length - 1; i >= 0; --i) { - md.fullMessageLength[i] += len[1]; - len[1] = len[0] + ((md.fullMessageLength[i] / 0x100000000) >>> 0); - md.fullMessageLength[i] = md.fullMessageLength[i] >>> 0; - len[0] = ((len[1] / 0x100000000) >>> 0); - } - - // add bytes to input buffer - _input.putBytes(msg); - - // process bytes - _update(_state, _w, _input); - - // compact input buffer every 2K or if empty - if(_input.read > 2048 || _input.length() === 0) { - _input.compact(); - } - - return md; - }; - - /** - * Produces the digest. - * - * @return a byte buffer containing the digest value. - */ - md.digest = function() { - /* Note: Here we copy the remaining bytes in the input buffer and - add the appropriate SHA-1 padding. Then we do the final update - on a copy of the state so that if the user wants to get - intermediate digests they can do so. */ - - /* Determine the number of bytes that must be added to the message - to ensure its length is congruent to 448 mod 512. In other words, - the data to be digested must be a multiple of 512 bits (or 128 bytes). - This data includes the message, some padding, and the length of the - message. Since the length of the message will be encoded as 8 bytes (64 - bits), that means that the last segment of the data must have 56 bytes - (448 bits) of message and padding. Therefore, the length of the message - plus the padding must be congruent to 448 mod 512 because - 512 - 128 = 448. - - In order to fill up the message length it must be filled with - padding that begins with 1 bit followed by all 0 bits. Padding - must *always* be present, so if the message length is already - congruent to 448 mod 512, then 512 padding bits must be added. */ - - var finalBlock = forge.util.createBuffer(); - finalBlock.putBytes(_input.bytes()); - - // compute remaining size to be digested (include message length size) - var remaining = ( - md.fullMessageLength[md.fullMessageLength.length - 1] + - md.messageLengthSize); - - // add padding for overflow blockSize - overflow - // _padding starts with 1 byte with first bit is set (byte value 128), then - // there may be up to (blockSize - 1) other pad bytes - var overflow = remaining & (md.blockLength - 1); - finalBlock.putBytes(_padding.substr(0, md.blockLength - overflow)); - - // serialize message length in bits in big-endian order; since length - // is stored in bytes we multiply by 8 and add carry from next int - var next, carry; - var bits = md.fullMessageLength[0] * 8; - for(var i = 0; i < md.fullMessageLength.length - 1; ++i) { - next = md.fullMessageLength[i + 1] * 8; - carry = (next / 0x100000000) >>> 0; - bits += carry; - finalBlock.putInt32(bits >>> 0); - bits = next >>> 0; - } - finalBlock.putInt32(bits); - - var s2 = { - h0: _state.h0, - h1: _state.h1, - h2: _state.h2, - h3: _state.h3, - h4: _state.h4 - }; - _update(s2, _w, finalBlock); - var rval = forge.util.createBuffer(); - rval.putInt32(s2.h0); - rval.putInt32(s2.h1); - rval.putInt32(s2.h2); - rval.putInt32(s2.h3); - rval.putInt32(s2.h4); - return rval; - }; - - return md; -}; - -// sha-1 padding bytes not initialized yet -var _padding = null; -var _initialized = false; - -/** - * Initializes the constant tables. - */ -function _init() { - // create padding - _padding = String.fromCharCode(128); - _padding += forge.util.fillString(String.fromCharCode(0x00), 64); - - // now initialized - _initialized = true; -} - -/** - * Updates a SHA-1 state with the given byte buffer. - * - * @param s the SHA-1 state to update. - * @param w the array to use to store words. - * @param bytes the byte buffer to update with. - */ -function _update(s, w, bytes) { - // consume 512 bit (64 byte) chunks - var t, a, b, c, d, e, f, i; - var len = bytes.length(); - while(len >= 64) { - // the w array will be populated with sixteen 32-bit big-endian words - // and then extended into 80 32-bit words according to SHA-1 algorithm - // and for 32-79 using Max Locktyukhin's optimization - - // initialize hash value for this chunk - a = s.h0; - b = s.h1; - c = s.h2; - d = s.h3; - e = s.h4; - - // round 1 - for(i = 0; i < 16; ++i) { - t = bytes.getInt32(); - w[i] = t; - f = d ^ (b & (c ^ d)); - t = ((a << 5) | (a >>> 27)) + f + e + 0x5A827999 + t; - e = d; - d = c; - // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug - c = ((b << 30) | (b >>> 2)) >>> 0; - b = a; - a = t; - } - for(; i < 20; ++i) { - t = (w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16]); - t = (t << 1) | (t >>> 31); - w[i] = t; - f = d ^ (b & (c ^ d)); - t = ((a << 5) | (a >>> 27)) + f + e + 0x5A827999 + t; - e = d; - d = c; - // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug - c = ((b << 30) | (b >>> 2)) >>> 0; - b = a; - a = t; - } - // round 2 - for(; i < 32; ++i) { - t = (w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16]); - t = (t << 1) | (t >>> 31); - w[i] = t; - f = b ^ c ^ d; - t = ((a << 5) | (a >>> 27)) + f + e + 0x6ED9EBA1 + t; - e = d; - d = c; - // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug - c = ((b << 30) | (b >>> 2)) >>> 0; - b = a; - a = t; - } - for(; i < 40; ++i) { - t = (w[i - 6] ^ w[i - 16] ^ w[i - 28] ^ w[i - 32]); - t = (t << 2) | (t >>> 30); - w[i] = t; - f = b ^ c ^ d; - t = ((a << 5) | (a >>> 27)) + f + e + 0x6ED9EBA1 + t; - e = d; - d = c; - // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug - c = ((b << 30) | (b >>> 2)) >>> 0; - b = a; - a = t; - } - // round 3 - for(; i < 60; ++i) { - t = (w[i - 6] ^ w[i - 16] ^ w[i - 28] ^ w[i - 32]); - t = (t << 2) | (t >>> 30); - w[i] = t; - f = (b & c) | (d & (b ^ c)); - t = ((a << 5) | (a >>> 27)) + f + e + 0x8F1BBCDC + t; - e = d; - d = c; - // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug - c = ((b << 30) | (b >>> 2)) >>> 0; - b = a; - a = t; - } - // round 4 - for(; i < 80; ++i) { - t = (w[i - 6] ^ w[i - 16] ^ w[i - 28] ^ w[i - 32]); - t = (t << 2) | (t >>> 30); - w[i] = t; - f = b ^ c ^ d; - t = ((a << 5) | (a >>> 27)) + f + e + 0xCA62C1D6 + t; - e = d; - d = c; - // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug - c = ((b << 30) | (b >>> 2)) >>> 0; - b = a; - a = t; - } - - // update hash state - s.h0 = (s.h0 + a) | 0; - s.h1 = (s.h1 + b) | 0; - s.h2 = (s.h2 + c) | 0; - s.h3 = (s.h3 + d) | 0; - s.h4 = (s.h4 + e) | 0; - - len -= 64; - } -} diff --git a/reverse_engineering/node_modules/node-forge/lib/sha256.js b/reverse_engineering/node_modules/node-forge/lib/sha256.js deleted file mode 100644 index 0659ad7..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/sha256.js +++ /dev/null @@ -1,327 +0,0 @@ -/** - * Secure Hash Algorithm with 256-bit digest (SHA-256) implementation. - * - * See FIPS 180-2 for details. - * - * @author Dave Longley - * - * Copyright (c) 2010-2015 Digital Bazaar, Inc. - */ -var forge = require('./forge'); -require('./md'); -require('./util'); - -var sha256 = module.exports = forge.sha256 = forge.sha256 || {}; -forge.md.sha256 = forge.md.algorithms.sha256 = sha256; - -/** - * Creates a SHA-256 message digest object. - * - * @return a message digest object. - */ -sha256.create = function() { - // do initialization as necessary - if(!_initialized) { - _init(); - } - - // SHA-256 state contains eight 32-bit integers - var _state = null; - - // input buffer - var _input = forge.util.createBuffer(); - - // used for word storage - var _w = new Array(64); - - // message digest object - var md = { - algorithm: 'sha256', - blockLength: 64, - digestLength: 32, - // 56-bit length of message so far (does not including padding) - messageLength: 0, - // true message length - fullMessageLength: null, - // size of message length in bytes - messageLengthSize: 8 - }; - - /** - * Starts the digest. - * - * @return this digest object. - */ - md.start = function() { - // up to 56-bit message length for convenience - md.messageLength = 0; - - // full message length (set md.messageLength64 for backwards-compatibility) - md.fullMessageLength = md.messageLength64 = []; - var int32s = md.messageLengthSize / 4; - for(var i = 0; i < int32s; ++i) { - md.fullMessageLength.push(0); - } - _input = forge.util.createBuffer(); - _state = { - h0: 0x6A09E667, - h1: 0xBB67AE85, - h2: 0x3C6EF372, - h3: 0xA54FF53A, - h4: 0x510E527F, - h5: 0x9B05688C, - h6: 0x1F83D9AB, - h7: 0x5BE0CD19 - }; - return md; - }; - // start digest automatically for first time - md.start(); - - /** - * Updates the digest with the given message input. The given input can - * treated as raw input (no encoding will be applied) or an encoding of - * 'utf8' maybe given to encode the input using UTF-8. - * - * @param msg the message input to update with. - * @param encoding the encoding to use (default: 'raw', other: 'utf8'). - * - * @return this digest object. - */ - md.update = function(msg, encoding) { - if(encoding === 'utf8') { - msg = forge.util.encodeUtf8(msg); - } - - // update message length - var len = msg.length; - md.messageLength += len; - len = [(len / 0x100000000) >>> 0, len >>> 0]; - for(var i = md.fullMessageLength.length - 1; i >= 0; --i) { - md.fullMessageLength[i] += len[1]; - len[1] = len[0] + ((md.fullMessageLength[i] / 0x100000000) >>> 0); - md.fullMessageLength[i] = md.fullMessageLength[i] >>> 0; - len[0] = ((len[1] / 0x100000000) >>> 0); - } - - // add bytes to input buffer - _input.putBytes(msg); - - // process bytes - _update(_state, _w, _input); - - // compact input buffer every 2K or if empty - if(_input.read > 2048 || _input.length() === 0) { - _input.compact(); - } - - return md; - }; - - /** - * Produces the digest. - * - * @return a byte buffer containing the digest value. - */ - md.digest = function() { - /* Note: Here we copy the remaining bytes in the input buffer and - add the appropriate SHA-256 padding. Then we do the final update - on a copy of the state so that if the user wants to get - intermediate digests they can do so. */ - - /* Determine the number of bytes that must be added to the message - to ensure its length is congruent to 448 mod 512. In other words, - the data to be digested must be a multiple of 512 bits (or 128 bytes). - This data includes the message, some padding, and the length of the - message. Since the length of the message will be encoded as 8 bytes (64 - bits), that means that the last segment of the data must have 56 bytes - (448 bits) of message and padding. Therefore, the length of the message - plus the padding must be congruent to 448 mod 512 because - 512 - 128 = 448. - - In order to fill up the message length it must be filled with - padding that begins with 1 bit followed by all 0 bits. Padding - must *always* be present, so if the message length is already - congruent to 448 mod 512, then 512 padding bits must be added. */ - - var finalBlock = forge.util.createBuffer(); - finalBlock.putBytes(_input.bytes()); - - // compute remaining size to be digested (include message length size) - var remaining = ( - md.fullMessageLength[md.fullMessageLength.length - 1] + - md.messageLengthSize); - - // add padding for overflow blockSize - overflow - // _padding starts with 1 byte with first bit is set (byte value 128), then - // there may be up to (blockSize - 1) other pad bytes - var overflow = remaining & (md.blockLength - 1); - finalBlock.putBytes(_padding.substr(0, md.blockLength - overflow)); - - // serialize message length in bits in big-endian order; since length - // is stored in bytes we multiply by 8 and add carry from next int - var next, carry; - var bits = md.fullMessageLength[0] * 8; - for(var i = 0; i < md.fullMessageLength.length - 1; ++i) { - next = md.fullMessageLength[i + 1] * 8; - carry = (next / 0x100000000) >>> 0; - bits += carry; - finalBlock.putInt32(bits >>> 0); - bits = next >>> 0; - } - finalBlock.putInt32(bits); - - var s2 = { - h0: _state.h0, - h1: _state.h1, - h2: _state.h2, - h3: _state.h3, - h4: _state.h4, - h5: _state.h5, - h6: _state.h6, - h7: _state.h7 - }; - _update(s2, _w, finalBlock); - var rval = forge.util.createBuffer(); - rval.putInt32(s2.h0); - rval.putInt32(s2.h1); - rval.putInt32(s2.h2); - rval.putInt32(s2.h3); - rval.putInt32(s2.h4); - rval.putInt32(s2.h5); - rval.putInt32(s2.h6); - rval.putInt32(s2.h7); - return rval; - }; - - return md; -}; - -// sha-256 padding bytes not initialized yet -var _padding = null; -var _initialized = false; - -// table of constants -var _k = null; - -/** - * Initializes the constant tables. - */ -function _init() { - // create padding - _padding = String.fromCharCode(128); - _padding += forge.util.fillString(String.fromCharCode(0x00), 64); - - // create K table for SHA-256 - _k = [ - 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, - 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, - 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, - 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, - 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, - 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, - 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, - 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, - 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, - 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, - 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, - 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, - 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, - 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, - 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, - 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2]; - - // now initialized - _initialized = true; -} - -/** - * Updates a SHA-256 state with the given byte buffer. - * - * @param s the SHA-256 state to update. - * @param w the array to use to store words. - * @param bytes the byte buffer to update with. - */ -function _update(s, w, bytes) { - // consume 512 bit (64 byte) chunks - var t1, t2, s0, s1, ch, maj, i, a, b, c, d, e, f, g, h; - var len = bytes.length(); - while(len >= 64) { - // the w array will be populated with sixteen 32-bit big-endian words - // and then extended into 64 32-bit words according to SHA-256 - for(i = 0; i < 16; ++i) { - w[i] = bytes.getInt32(); - } - for(; i < 64; ++i) { - // XOR word 2 words ago rot right 17, rot right 19, shft right 10 - t1 = w[i - 2]; - t1 = - ((t1 >>> 17) | (t1 << 15)) ^ - ((t1 >>> 19) | (t1 << 13)) ^ - (t1 >>> 10); - // XOR word 15 words ago rot right 7, rot right 18, shft right 3 - t2 = w[i - 15]; - t2 = - ((t2 >>> 7) | (t2 << 25)) ^ - ((t2 >>> 18) | (t2 << 14)) ^ - (t2 >>> 3); - // sum(t1, word 7 ago, t2, word 16 ago) modulo 2^32 - w[i] = (t1 + w[i - 7] + t2 + w[i - 16]) | 0; - } - - // initialize hash value for this chunk - a = s.h0; - b = s.h1; - c = s.h2; - d = s.h3; - e = s.h4; - f = s.h5; - g = s.h6; - h = s.h7; - - // round function - for(i = 0; i < 64; ++i) { - // Sum1(e) - s1 = - ((e >>> 6) | (e << 26)) ^ - ((e >>> 11) | (e << 21)) ^ - ((e >>> 25) | (e << 7)); - // Ch(e, f, g) (optimized the same way as SHA-1) - ch = g ^ (e & (f ^ g)); - // Sum0(a) - s0 = - ((a >>> 2) | (a << 30)) ^ - ((a >>> 13) | (a << 19)) ^ - ((a >>> 22) | (a << 10)); - // Maj(a, b, c) (optimized the same way as SHA-1) - maj = (a & b) | (c & (a ^ b)); - - // main algorithm - t1 = h + s1 + ch + _k[i] + w[i]; - t2 = s0 + maj; - h = g; - g = f; - f = e; - // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug - // can't truncate with `| 0` - e = (d + t1) >>> 0; - d = c; - c = b; - b = a; - // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug - // can't truncate with `| 0` - a = (t1 + t2) >>> 0; - } - - // update hash state - s.h0 = (s.h0 + a) | 0; - s.h1 = (s.h1 + b) | 0; - s.h2 = (s.h2 + c) | 0; - s.h3 = (s.h3 + d) | 0; - s.h4 = (s.h4 + e) | 0; - s.h5 = (s.h5 + f) | 0; - s.h6 = (s.h6 + g) | 0; - s.h7 = (s.h7 + h) | 0; - len -= 64; - } -} diff --git a/reverse_engineering/node_modules/node-forge/lib/sha512.js b/reverse_engineering/node_modules/node-forge/lib/sha512.js deleted file mode 100644 index e09b442..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/sha512.js +++ /dev/null @@ -1,561 +0,0 @@ -/** - * Secure Hash Algorithm with a 1024-bit block size implementation. - * - * This includes: SHA-512, SHA-384, SHA-512/224, and SHA-512/256. For - * SHA-256 (block size 512 bits), see sha256.js. - * - * See FIPS 180-4 for details. - * - * @author Dave Longley - * - * Copyright (c) 2014-2015 Digital Bazaar, Inc. - */ -var forge = require('./forge'); -require('./md'); -require('./util'); - -var sha512 = module.exports = forge.sha512 = forge.sha512 || {}; - -// SHA-512 -forge.md.sha512 = forge.md.algorithms.sha512 = sha512; - -// SHA-384 -var sha384 = forge.sha384 = forge.sha512.sha384 = forge.sha512.sha384 || {}; -sha384.create = function() { - return sha512.create('SHA-384'); -}; -forge.md.sha384 = forge.md.algorithms.sha384 = sha384; - -// SHA-512/256 -forge.sha512.sha256 = forge.sha512.sha256 || { - create: function() { - return sha512.create('SHA-512/256'); - } -}; -forge.md['sha512/256'] = forge.md.algorithms['sha512/256'] = - forge.sha512.sha256; - -// SHA-512/224 -forge.sha512.sha224 = forge.sha512.sha224 || { - create: function() { - return sha512.create('SHA-512/224'); - } -}; -forge.md['sha512/224'] = forge.md.algorithms['sha512/224'] = - forge.sha512.sha224; - -/** - * Creates a SHA-2 message digest object. - * - * @param algorithm the algorithm to use (SHA-512, SHA-384, SHA-512/224, - * SHA-512/256). - * - * @return a message digest object. - */ -sha512.create = function(algorithm) { - // do initialization as necessary - if(!_initialized) { - _init(); - } - - if(typeof algorithm === 'undefined') { - algorithm = 'SHA-512'; - } - - if(!(algorithm in _states)) { - throw new Error('Invalid SHA-512 algorithm: ' + algorithm); - } - - // SHA-512 state contains eight 64-bit integers (each as two 32-bit ints) - var _state = _states[algorithm]; - var _h = null; - - // input buffer - var _input = forge.util.createBuffer(); - - // used for 64-bit word storage - var _w = new Array(80); - for(var wi = 0; wi < 80; ++wi) { - _w[wi] = new Array(2); - } - - // determine digest length by algorithm name (default) - var digestLength = 64; - switch(algorithm) { - case 'SHA-384': - digestLength = 48; - break; - case 'SHA-512/256': - digestLength = 32; - break; - case 'SHA-512/224': - digestLength = 28; - break; - } - - // message digest object - var md = { - // SHA-512 => sha512 - algorithm: algorithm.replace('-', '').toLowerCase(), - blockLength: 128, - digestLength: digestLength, - // 56-bit length of message so far (does not including padding) - messageLength: 0, - // true message length - fullMessageLength: null, - // size of message length in bytes - messageLengthSize: 16 - }; - - /** - * Starts the digest. - * - * @return this digest object. - */ - md.start = function() { - // up to 56-bit message length for convenience - md.messageLength = 0; - - // full message length (set md.messageLength128 for backwards-compatibility) - md.fullMessageLength = md.messageLength128 = []; - var int32s = md.messageLengthSize / 4; - for(var i = 0; i < int32s; ++i) { - md.fullMessageLength.push(0); - } - _input = forge.util.createBuffer(); - _h = new Array(_state.length); - for(var i = 0; i < _state.length; ++i) { - _h[i] = _state[i].slice(0); - } - return md; - }; - // start digest automatically for first time - md.start(); - - /** - * Updates the digest with the given message input. The given input can - * treated as raw input (no encoding will be applied) or an encoding of - * 'utf8' maybe given to encode the input using UTF-8. - * - * @param msg the message input to update with. - * @param encoding the encoding to use (default: 'raw', other: 'utf8'). - * - * @return this digest object. - */ - md.update = function(msg, encoding) { - if(encoding === 'utf8') { - msg = forge.util.encodeUtf8(msg); - } - - // update message length - var len = msg.length; - md.messageLength += len; - len = [(len / 0x100000000) >>> 0, len >>> 0]; - for(var i = md.fullMessageLength.length - 1; i >= 0; --i) { - md.fullMessageLength[i] += len[1]; - len[1] = len[0] + ((md.fullMessageLength[i] / 0x100000000) >>> 0); - md.fullMessageLength[i] = md.fullMessageLength[i] >>> 0; - len[0] = ((len[1] / 0x100000000) >>> 0); - } - - // add bytes to input buffer - _input.putBytes(msg); - - // process bytes - _update(_h, _w, _input); - - // compact input buffer every 2K or if empty - if(_input.read > 2048 || _input.length() === 0) { - _input.compact(); - } - - return md; - }; - - /** - * Produces the digest. - * - * @return a byte buffer containing the digest value. - */ - md.digest = function() { - /* Note: Here we copy the remaining bytes in the input buffer and - add the appropriate SHA-512 padding. Then we do the final update - on a copy of the state so that if the user wants to get - intermediate digests they can do so. */ - - /* Determine the number of bytes that must be added to the message - to ensure its length is congruent to 896 mod 1024. In other words, - the data to be digested must be a multiple of 1024 bits (or 128 bytes). - This data includes the message, some padding, and the length of the - message. Since the length of the message will be encoded as 16 bytes (128 - bits), that means that the last segment of the data must have 112 bytes - (896 bits) of message and padding. Therefore, the length of the message - plus the padding must be congruent to 896 mod 1024 because - 1024 - 128 = 896. - - In order to fill up the message length it must be filled with - padding that begins with 1 bit followed by all 0 bits. Padding - must *always* be present, so if the message length is already - congruent to 896 mod 1024, then 1024 padding bits must be added. */ - - var finalBlock = forge.util.createBuffer(); - finalBlock.putBytes(_input.bytes()); - - // compute remaining size to be digested (include message length size) - var remaining = ( - md.fullMessageLength[md.fullMessageLength.length - 1] + - md.messageLengthSize); - - // add padding for overflow blockSize - overflow - // _padding starts with 1 byte with first bit is set (byte value 128), then - // there may be up to (blockSize - 1) other pad bytes - var overflow = remaining & (md.blockLength - 1); - finalBlock.putBytes(_padding.substr(0, md.blockLength - overflow)); - - // serialize message length in bits in big-endian order; since length - // is stored in bytes we multiply by 8 and add carry from next int - var next, carry; - var bits = md.fullMessageLength[0] * 8; - for(var i = 0; i < md.fullMessageLength.length - 1; ++i) { - next = md.fullMessageLength[i + 1] * 8; - carry = (next / 0x100000000) >>> 0; - bits += carry; - finalBlock.putInt32(bits >>> 0); - bits = next >>> 0; - } - finalBlock.putInt32(bits); - - var h = new Array(_h.length); - for(var i = 0; i < _h.length; ++i) { - h[i] = _h[i].slice(0); - } - _update(h, _w, finalBlock); - var rval = forge.util.createBuffer(); - var hlen; - if(algorithm === 'SHA-512') { - hlen = h.length; - } else if(algorithm === 'SHA-384') { - hlen = h.length - 2; - } else { - hlen = h.length - 4; - } - for(var i = 0; i < hlen; ++i) { - rval.putInt32(h[i][0]); - if(i !== hlen - 1 || algorithm !== 'SHA-512/224') { - rval.putInt32(h[i][1]); - } - } - return rval; - }; - - return md; -}; - -// sha-512 padding bytes not initialized yet -var _padding = null; -var _initialized = false; - -// table of constants -var _k = null; - -// initial hash states -var _states = null; - -/** - * Initializes the constant tables. - */ -function _init() { - // create padding - _padding = String.fromCharCode(128); - _padding += forge.util.fillString(String.fromCharCode(0x00), 128); - - // create K table for SHA-512 - _k = [ - [0x428a2f98, 0xd728ae22], [0x71374491, 0x23ef65cd], - [0xb5c0fbcf, 0xec4d3b2f], [0xe9b5dba5, 0x8189dbbc], - [0x3956c25b, 0xf348b538], [0x59f111f1, 0xb605d019], - [0x923f82a4, 0xaf194f9b], [0xab1c5ed5, 0xda6d8118], - [0xd807aa98, 0xa3030242], [0x12835b01, 0x45706fbe], - [0x243185be, 0x4ee4b28c], [0x550c7dc3, 0xd5ffb4e2], - [0x72be5d74, 0xf27b896f], [0x80deb1fe, 0x3b1696b1], - [0x9bdc06a7, 0x25c71235], [0xc19bf174, 0xcf692694], - [0xe49b69c1, 0x9ef14ad2], [0xefbe4786, 0x384f25e3], - [0x0fc19dc6, 0x8b8cd5b5], [0x240ca1cc, 0x77ac9c65], - [0x2de92c6f, 0x592b0275], [0x4a7484aa, 0x6ea6e483], - [0x5cb0a9dc, 0xbd41fbd4], [0x76f988da, 0x831153b5], - [0x983e5152, 0xee66dfab], [0xa831c66d, 0x2db43210], - [0xb00327c8, 0x98fb213f], [0xbf597fc7, 0xbeef0ee4], - [0xc6e00bf3, 0x3da88fc2], [0xd5a79147, 0x930aa725], - [0x06ca6351, 0xe003826f], [0x14292967, 0x0a0e6e70], - [0x27b70a85, 0x46d22ffc], [0x2e1b2138, 0x5c26c926], - [0x4d2c6dfc, 0x5ac42aed], [0x53380d13, 0x9d95b3df], - [0x650a7354, 0x8baf63de], [0x766a0abb, 0x3c77b2a8], - [0x81c2c92e, 0x47edaee6], [0x92722c85, 0x1482353b], - [0xa2bfe8a1, 0x4cf10364], [0xa81a664b, 0xbc423001], - [0xc24b8b70, 0xd0f89791], [0xc76c51a3, 0x0654be30], - [0xd192e819, 0xd6ef5218], [0xd6990624, 0x5565a910], - [0xf40e3585, 0x5771202a], [0x106aa070, 0x32bbd1b8], - [0x19a4c116, 0xb8d2d0c8], [0x1e376c08, 0x5141ab53], - [0x2748774c, 0xdf8eeb99], [0x34b0bcb5, 0xe19b48a8], - [0x391c0cb3, 0xc5c95a63], [0x4ed8aa4a, 0xe3418acb], - [0x5b9cca4f, 0x7763e373], [0x682e6ff3, 0xd6b2b8a3], - [0x748f82ee, 0x5defb2fc], [0x78a5636f, 0x43172f60], - [0x84c87814, 0xa1f0ab72], [0x8cc70208, 0x1a6439ec], - [0x90befffa, 0x23631e28], [0xa4506ceb, 0xde82bde9], - [0xbef9a3f7, 0xb2c67915], [0xc67178f2, 0xe372532b], - [0xca273ece, 0xea26619c], [0xd186b8c7, 0x21c0c207], - [0xeada7dd6, 0xcde0eb1e], [0xf57d4f7f, 0xee6ed178], - [0x06f067aa, 0x72176fba], [0x0a637dc5, 0xa2c898a6], - [0x113f9804, 0xbef90dae], [0x1b710b35, 0x131c471b], - [0x28db77f5, 0x23047d84], [0x32caab7b, 0x40c72493], - [0x3c9ebe0a, 0x15c9bebc], [0x431d67c4, 0x9c100d4c], - [0x4cc5d4be, 0xcb3e42b6], [0x597f299c, 0xfc657e2a], - [0x5fcb6fab, 0x3ad6faec], [0x6c44198c, 0x4a475817] - ]; - - // initial hash states - _states = {}; - _states['SHA-512'] = [ - [0x6a09e667, 0xf3bcc908], - [0xbb67ae85, 0x84caa73b], - [0x3c6ef372, 0xfe94f82b], - [0xa54ff53a, 0x5f1d36f1], - [0x510e527f, 0xade682d1], - [0x9b05688c, 0x2b3e6c1f], - [0x1f83d9ab, 0xfb41bd6b], - [0x5be0cd19, 0x137e2179] - ]; - _states['SHA-384'] = [ - [0xcbbb9d5d, 0xc1059ed8], - [0x629a292a, 0x367cd507], - [0x9159015a, 0x3070dd17], - [0x152fecd8, 0xf70e5939], - [0x67332667, 0xffc00b31], - [0x8eb44a87, 0x68581511], - [0xdb0c2e0d, 0x64f98fa7], - [0x47b5481d, 0xbefa4fa4] - ]; - _states['SHA-512/256'] = [ - [0x22312194, 0xFC2BF72C], - [0x9F555FA3, 0xC84C64C2], - [0x2393B86B, 0x6F53B151], - [0x96387719, 0x5940EABD], - [0x96283EE2, 0xA88EFFE3], - [0xBE5E1E25, 0x53863992], - [0x2B0199FC, 0x2C85B8AA], - [0x0EB72DDC, 0x81C52CA2] - ]; - _states['SHA-512/224'] = [ - [0x8C3D37C8, 0x19544DA2], - [0x73E19966, 0x89DCD4D6], - [0x1DFAB7AE, 0x32FF9C82], - [0x679DD514, 0x582F9FCF], - [0x0F6D2B69, 0x7BD44DA8], - [0x77E36F73, 0x04C48942], - [0x3F9D85A8, 0x6A1D36C8], - [0x1112E6AD, 0x91D692A1] - ]; - - // now initialized - _initialized = true; -} - -/** - * Updates a SHA-512 state with the given byte buffer. - * - * @param s the SHA-512 state to update. - * @param w the array to use to store words. - * @param bytes the byte buffer to update with. - */ -function _update(s, w, bytes) { - // consume 512 bit (128 byte) chunks - var t1_hi, t1_lo; - var t2_hi, t2_lo; - var s0_hi, s0_lo; - var s1_hi, s1_lo; - var ch_hi, ch_lo; - var maj_hi, maj_lo; - var a_hi, a_lo; - var b_hi, b_lo; - var c_hi, c_lo; - var d_hi, d_lo; - var e_hi, e_lo; - var f_hi, f_lo; - var g_hi, g_lo; - var h_hi, h_lo; - var i, hi, lo, w2, w7, w15, w16; - var len = bytes.length(); - while(len >= 128) { - // the w array will be populated with sixteen 64-bit big-endian words - // and then extended into 64 64-bit words according to SHA-512 - for(i = 0; i < 16; ++i) { - w[i][0] = bytes.getInt32() >>> 0; - w[i][1] = bytes.getInt32() >>> 0; - } - for(; i < 80; ++i) { - // for word 2 words ago: ROTR 19(x) ^ ROTR 61(x) ^ SHR 6(x) - w2 = w[i - 2]; - hi = w2[0]; - lo = w2[1]; - - // high bits - t1_hi = ( - ((hi >>> 19) | (lo << 13)) ^ // ROTR 19 - ((lo >>> 29) | (hi << 3)) ^ // ROTR 61/(swap + ROTR 29) - (hi >>> 6)) >>> 0; // SHR 6 - // low bits - t1_lo = ( - ((hi << 13) | (lo >>> 19)) ^ // ROTR 19 - ((lo << 3) | (hi >>> 29)) ^ // ROTR 61/(swap + ROTR 29) - ((hi << 26) | (lo >>> 6))) >>> 0; // SHR 6 - - // for word 15 words ago: ROTR 1(x) ^ ROTR 8(x) ^ SHR 7(x) - w15 = w[i - 15]; - hi = w15[0]; - lo = w15[1]; - - // high bits - t2_hi = ( - ((hi >>> 1) | (lo << 31)) ^ // ROTR 1 - ((hi >>> 8) | (lo << 24)) ^ // ROTR 8 - (hi >>> 7)) >>> 0; // SHR 7 - // low bits - t2_lo = ( - ((hi << 31) | (lo >>> 1)) ^ // ROTR 1 - ((hi << 24) | (lo >>> 8)) ^ // ROTR 8 - ((hi << 25) | (lo >>> 7))) >>> 0; // SHR 7 - - // sum(t1, word 7 ago, t2, word 16 ago) modulo 2^64 (carry lo overflow) - w7 = w[i - 7]; - w16 = w[i - 16]; - lo = (t1_lo + w7[1] + t2_lo + w16[1]); - w[i][0] = (t1_hi + w7[0] + t2_hi + w16[0] + - ((lo / 0x100000000) >>> 0)) >>> 0; - w[i][1] = lo >>> 0; - } - - // initialize hash value for this chunk - a_hi = s[0][0]; - a_lo = s[0][1]; - b_hi = s[1][0]; - b_lo = s[1][1]; - c_hi = s[2][0]; - c_lo = s[2][1]; - d_hi = s[3][0]; - d_lo = s[3][1]; - e_hi = s[4][0]; - e_lo = s[4][1]; - f_hi = s[5][0]; - f_lo = s[5][1]; - g_hi = s[6][0]; - g_lo = s[6][1]; - h_hi = s[7][0]; - h_lo = s[7][1]; - - // round function - for(i = 0; i < 80; ++i) { - // Sum1(e) = ROTR 14(e) ^ ROTR 18(e) ^ ROTR 41(e) - s1_hi = ( - ((e_hi >>> 14) | (e_lo << 18)) ^ // ROTR 14 - ((e_hi >>> 18) | (e_lo << 14)) ^ // ROTR 18 - ((e_lo >>> 9) | (e_hi << 23))) >>> 0; // ROTR 41/(swap + ROTR 9) - s1_lo = ( - ((e_hi << 18) | (e_lo >>> 14)) ^ // ROTR 14 - ((e_hi << 14) | (e_lo >>> 18)) ^ // ROTR 18 - ((e_lo << 23) | (e_hi >>> 9))) >>> 0; // ROTR 41/(swap + ROTR 9) - - // Ch(e, f, g) (optimized the same way as SHA-1) - ch_hi = (g_hi ^ (e_hi & (f_hi ^ g_hi))) >>> 0; - ch_lo = (g_lo ^ (e_lo & (f_lo ^ g_lo))) >>> 0; - - // Sum0(a) = ROTR 28(a) ^ ROTR 34(a) ^ ROTR 39(a) - s0_hi = ( - ((a_hi >>> 28) | (a_lo << 4)) ^ // ROTR 28 - ((a_lo >>> 2) | (a_hi << 30)) ^ // ROTR 34/(swap + ROTR 2) - ((a_lo >>> 7) | (a_hi << 25))) >>> 0; // ROTR 39/(swap + ROTR 7) - s0_lo = ( - ((a_hi << 4) | (a_lo >>> 28)) ^ // ROTR 28 - ((a_lo << 30) | (a_hi >>> 2)) ^ // ROTR 34/(swap + ROTR 2) - ((a_lo << 25) | (a_hi >>> 7))) >>> 0; // ROTR 39/(swap + ROTR 7) - - // Maj(a, b, c) (optimized the same way as SHA-1) - maj_hi = ((a_hi & b_hi) | (c_hi & (a_hi ^ b_hi))) >>> 0; - maj_lo = ((a_lo & b_lo) | (c_lo & (a_lo ^ b_lo))) >>> 0; - - // main algorithm - // t1 = (h + s1 + ch + _k[i] + _w[i]) modulo 2^64 (carry lo overflow) - lo = (h_lo + s1_lo + ch_lo + _k[i][1] + w[i][1]); - t1_hi = (h_hi + s1_hi + ch_hi + _k[i][0] + w[i][0] + - ((lo / 0x100000000) >>> 0)) >>> 0; - t1_lo = lo >>> 0; - - // t2 = s0 + maj modulo 2^64 (carry lo overflow) - lo = s0_lo + maj_lo; - t2_hi = (s0_hi + maj_hi + ((lo / 0x100000000) >>> 0)) >>> 0; - t2_lo = lo >>> 0; - - h_hi = g_hi; - h_lo = g_lo; - - g_hi = f_hi; - g_lo = f_lo; - - f_hi = e_hi; - f_lo = e_lo; - - // e = (d + t1) modulo 2^64 (carry lo overflow) - lo = d_lo + t1_lo; - e_hi = (d_hi + t1_hi + ((lo / 0x100000000) >>> 0)) >>> 0; - e_lo = lo >>> 0; - - d_hi = c_hi; - d_lo = c_lo; - - c_hi = b_hi; - c_lo = b_lo; - - b_hi = a_hi; - b_lo = a_lo; - - // a = (t1 + t2) modulo 2^64 (carry lo overflow) - lo = t1_lo + t2_lo; - a_hi = (t1_hi + t2_hi + ((lo / 0x100000000) >>> 0)) >>> 0; - a_lo = lo >>> 0; - } - - // update hash state (additional modulo 2^64) - lo = s[0][1] + a_lo; - s[0][0] = (s[0][0] + a_hi + ((lo / 0x100000000) >>> 0)) >>> 0; - s[0][1] = lo >>> 0; - - lo = s[1][1] + b_lo; - s[1][0] = (s[1][0] + b_hi + ((lo / 0x100000000) >>> 0)) >>> 0; - s[1][1] = lo >>> 0; - - lo = s[2][1] + c_lo; - s[2][0] = (s[2][0] + c_hi + ((lo / 0x100000000) >>> 0)) >>> 0; - s[2][1] = lo >>> 0; - - lo = s[3][1] + d_lo; - s[3][0] = (s[3][0] + d_hi + ((lo / 0x100000000) >>> 0)) >>> 0; - s[3][1] = lo >>> 0; - - lo = s[4][1] + e_lo; - s[4][0] = (s[4][0] + e_hi + ((lo / 0x100000000) >>> 0)) >>> 0; - s[4][1] = lo >>> 0; - - lo = s[5][1] + f_lo; - s[5][0] = (s[5][0] + f_hi + ((lo / 0x100000000) >>> 0)) >>> 0; - s[5][1] = lo >>> 0; - - lo = s[6][1] + g_lo; - s[6][0] = (s[6][0] + g_hi + ((lo / 0x100000000) >>> 0)) >>> 0; - s[6][1] = lo >>> 0; - - lo = s[7][1] + h_lo; - s[7][0] = (s[7][0] + h_hi + ((lo / 0x100000000) >>> 0)) >>> 0; - s[7][1] = lo >>> 0; - - len -= 128; - } -} diff --git a/reverse_engineering/node_modules/node-forge/lib/socket.js b/reverse_engineering/node_modules/node-forge/lib/socket.js deleted file mode 100644 index 3a1d7ff..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/socket.js +++ /dev/null @@ -1,287 +0,0 @@ -/** - * Socket implementation that uses flash SocketPool class as a backend. - * - * @author Dave Longley - * - * Copyright (c) 2010-2013 Digital Bazaar, Inc. - */ -var forge = require('./forge'); -require('./util'); - -// define net namespace -var net = module.exports = forge.net = forge.net || {}; - -// map of flash ID to socket pool -net.socketPools = {}; - -/** - * Creates a flash socket pool. - * - * @param options: - * flashId: the dom ID for the flash object element. - * policyPort: the default policy port for sockets, 0 to use the - * flash default. - * policyUrl: the default policy file URL for sockets (if provided - * used instead of a policy port). - * msie: true if the browser is msie, false if not. - * - * @return the created socket pool. - */ -net.createSocketPool = function(options) { - // set default - options.msie = options.msie || false; - - // initialize the flash interface - var spId = options.flashId; - var api = document.getElementById(spId); - api.init({marshallExceptions: !options.msie}); - - // create socket pool entry - var sp = { - // ID of the socket pool - id: spId, - // flash interface - flashApi: api, - // map of socket ID to sockets - sockets: {}, - // default policy port - policyPort: options.policyPort || 0, - // default policy URL - policyUrl: options.policyUrl || null - }; - net.socketPools[spId] = sp; - - // create event handler, subscribe to flash events - if(options.msie === true) { - sp.handler = function(e) { - if(e.id in sp.sockets) { - // get handler function - var f; - switch(e.type) { - case 'connect': - f = 'connected'; - break; - case 'close': - f = 'closed'; - break; - case 'socketData': - f = 'data'; - break; - default: - f = 'error'; - break; - } - /* IE calls javascript on the thread of the external object - that triggered the event (in this case flash) ... which will - either run concurrently with other javascript or pre-empt any - running javascript in the middle of its execution (BAD!) ... - calling setTimeout() will schedule the javascript to run on - the javascript thread and solve this EVIL problem. */ - setTimeout(function() {sp.sockets[e.id][f](e);}, 0); - } - }; - } else { - sp.handler = function(e) { - if(e.id in sp.sockets) { - // get handler function - var f; - switch(e.type) { - case 'connect': - f = 'connected'; - break; - case 'close': - f = 'closed'; - break; - case 'socketData': - f = 'data'; - break; - default: - f = 'error'; - break; - } - sp.sockets[e.id][f](e); - } - }; - } - var handler = 'forge.net.socketPools[\'' + spId + '\'].handler'; - api.subscribe('connect', handler); - api.subscribe('close', handler); - api.subscribe('socketData', handler); - api.subscribe('ioError', handler); - api.subscribe('securityError', handler); - - /** - * Destroys a socket pool. The socket pool still needs to be cleaned - * up via net.cleanup(). - */ - sp.destroy = function() { - delete net.socketPools[options.flashId]; - for(var id in sp.sockets) { - sp.sockets[id].destroy(); - } - sp.sockets = {}; - api.cleanup(); - }; - - /** - * Creates a new socket. - * - * @param options: - * connected: function(event) called when the socket connects. - * closed: function(event) called when the socket closes. - * data: function(event) called when socket data has arrived, - * it can be read from the socket using receive(). - * error: function(event) called when a socket error occurs. - */ - sp.createSocket = function(options) { - // default to empty options - options = options || {}; - - // create flash socket - var id = api.create(); - - // create javascript socket wrapper - var socket = { - id: id, - // set handlers - connected: options.connected || function(e) {}, - closed: options.closed || function(e) {}, - data: options.data || function(e) {}, - error: options.error || function(e) {} - }; - - /** - * Destroys this socket. - */ - socket.destroy = function() { - api.destroy(id); - delete sp.sockets[id]; - }; - - /** - * Connects this socket. - * - * @param options: - * host: the host to connect to. - * port: the port to connect to. - * policyPort: the policy port to use (if non-default), 0 to - * use the flash default. - * policyUrl: the policy file URL to use (instead of port). - */ - socket.connect = function(options) { - // give precedence to policy URL over policy port - // if no policy URL and passed port isn't 0, use default port, - // otherwise use 0 for the port - var policyUrl = options.policyUrl || null; - var policyPort = 0; - if(policyUrl === null && options.policyPort !== 0) { - policyPort = options.policyPort || sp.policyPort; - } - api.connect(id, options.host, options.port, policyPort, policyUrl); - }; - - /** - * Closes this socket. - */ - socket.close = function() { - api.close(id); - socket.closed({ - id: socket.id, - type: 'close', - bytesAvailable: 0 - }); - }; - - /** - * Determines if the socket is connected or not. - * - * @return true if connected, false if not. - */ - socket.isConnected = function() { - return api.isConnected(id); - }; - - /** - * Writes bytes to this socket. - * - * @param bytes the bytes (as a string) to write. - * - * @return true on success, false on failure. - */ - socket.send = function(bytes) { - return api.send(id, forge.util.encode64(bytes)); - }; - - /** - * Reads bytes from this socket (non-blocking). Fewer than the number - * of bytes requested may be read if enough bytes are not available. - * - * This method should be called from the data handler if there are - * enough bytes available. To see how many bytes are available, check - * the 'bytesAvailable' property on the event in the data handler or - * call the bytesAvailable() function on the socket. If the browser is - * msie, then the bytesAvailable() function should be used to avoid - * race conditions. Otherwise, using the property on the data handler's - * event may be quicker. - * - * @param count the maximum number of bytes to read. - * - * @return the bytes read (as a string) or null on error. - */ - socket.receive = function(count) { - var rval = api.receive(id, count).rval; - return (rval === null) ? null : forge.util.decode64(rval); - }; - - /** - * Gets the number of bytes available for receiving on the socket. - * - * @return the number of bytes available for receiving. - */ - socket.bytesAvailable = function() { - return api.getBytesAvailable(id); - }; - - // store and return socket - sp.sockets[id] = socket; - return socket; - }; - - return sp; -}; - -/** - * Destroys a flash socket pool. - * - * @param options: - * flashId: the dom ID for the flash object element. - */ -net.destroySocketPool = function(options) { - if(options.flashId in net.socketPools) { - var sp = net.socketPools[options.flashId]; - sp.destroy(); - } -}; - -/** - * Creates a new socket. - * - * @param options: - * flashId: the dom ID for the flash object element. - * connected: function(event) called when the socket connects. - * closed: function(event) called when the socket closes. - * data: function(event) called when socket data has arrived, it - * can be read from the socket using receive(). - * error: function(event) called when a socket error occurs. - * - * @return the created socket. - */ -net.createSocket = function(options) { - var socket = null; - if(options.flashId in net.socketPools) { - // get related socket pool - var sp = net.socketPools[options.flashId]; - socket = sp.createSocket(options); - } - return socket; -}; diff --git a/reverse_engineering/node_modules/node-forge/lib/ssh.js b/reverse_engineering/node_modules/node-forge/lib/ssh.js deleted file mode 100644 index 6480203..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/ssh.js +++ /dev/null @@ -1,236 +0,0 @@ -/** - * Functions to output keys in SSH-friendly formats. - * - * This is part of the Forge project which may be used under the terms of - * either the BSD License or the GNU General Public License (GPL) Version 2. - * - * See: https://github.com/digitalbazaar/forge/blob/cbebca3780658703d925b61b2caffb1d263a6c1d/LICENSE - * - * @author https://github.com/shellac - */ -var forge = require('./forge'); -require('./aes'); -require('./hmac'); -require('./md5'); -require('./sha1'); -require('./util'); - -var ssh = module.exports = forge.ssh = forge.ssh || {}; - -/** - * Encodes (and optionally encrypts) a private RSA key as a Putty PPK file. - * - * @param privateKey the key. - * @param passphrase a passphrase to protect the key (falsy for no encryption). - * @param comment a comment to include in the key file. - * - * @return the PPK file as a string. - */ -ssh.privateKeyToPutty = function(privateKey, passphrase, comment) { - comment = comment || ''; - passphrase = passphrase || ''; - var algorithm = 'ssh-rsa'; - var encryptionAlgorithm = (passphrase === '') ? 'none' : 'aes256-cbc'; - - var ppk = 'PuTTY-User-Key-File-2: ' + algorithm + '\r\n'; - ppk += 'Encryption: ' + encryptionAlgorithm + '\r\n'; - ppk += 'Comment: ' + comment + '\r\n'; - - // public key into buffer for ppk - var pubbuffer = forge.util.createBuffer(); - _addStringToBuffer(pubbuffer, algorithm); - _addBigIntegerToBuffer(pubbuffer, privateKey.e); - _addBigIntegerToBuffer(pubbuffer, privateKey.n); - - // write public key - var pub = forge.util.encode64(pubbuffer.bytes(), 64); - var length = Math.floor(pub.length / 66) + 1; // 66 = 64 + \r\n - ppk += 'Public-Lines: ' + length + '\r\n'; - ppk += pub; - - // private key into a buffer - var privbuffer = forge.util.createBuffer(); - _addBigIntegerToBuffer(privbuffer, privateKey.d); - _addBigIntegerToBuffer(privbuffer, privateKey.p); - _addBigIntegerToBuffer(privbuffer, privateKey.q); - _addBigIntegerToBuffer(privbuffer, privateKey.qInv); - - // optionally encrypt the private key - var priv; - if(!passphrase) { - // use the unencrypted buffer - priv = forge.util.encode64(privbuffer.bytes(), 64); - } else { - // encrypt RSA key using passphrase - var encLen = privbuffer.length() + 16 - 1; - encLen -= encLen % 16; - - // pad private key with sha1-d data -- needs to be a multiple of 16 - var padding = _sha1(privbuffer.bytes()); - - padding.truncate(padding.length() - encLen + privbuffer.length()); - privbuffer.putBuffer(padding); - - var aeskey = forge.util.createBuffer(); - aeskey.putBuffer(_sha1('\x00\x00\x00\x00', passphrase)); - aeskey.putBuffer(_sha1('\x00\x00\x00\x01', passphrase)); - - // encrypt some bytes using CBC mode - // key is 40 bytes, so truncate *by* 8 bytes - var cipher = forge.aes.createEncryptionCipher(aeskey.truncate(8), 'CBC'); - cipher.start(forge.util.createBuffer().fillWithByte(0, 16)); - cipher.update(privbuffer.copy()); - cipher.finish(); - var encrypted = cipher.output; - - // Note: this appears to differ from Putty -- is forge wrong, or putty? - // due to padding we finish as an exact multiple of 16 - encrypted.truncate(16); // all padding - - priv = forge.util.encode64(encrypted.bytes(), 64); - } - - // output private key - length = Math.floor(priv.length / 66) + 1; // 64 + \r\n - ppk += '\r\nPrivate-Lines: ' + length + '\r\n'; - ppk += priv; - - // MAC - var mackey = _sha1('putty-private-key-file-mac-key', passphrase); - - var macbuffer = forge.util.createBuffer(); - _addStringToBuffer(macbuffer, algorithm); - _addStringToBuffer(macbuffer, encryptionAlgorithm); - _addStringToBuffer(macbuffer, comment); - macbuffer.putInt32(pubbuffer.length()); - macbuffer.putBuffer(pubbuffer); - macbuffer.putInt32(privbuffer.length()); - macbuffer.putBuffer(privbuffer); - - var hmac = forge.hmac.create(); - hmac.start('sha1', mackey); - hmac.update(macbuffer.bytes()); - - ppk += '\r\nPrivate-MAC: ' + hmac.digest().toHex() + '\r\n'; - - return ppk; -}; - -/** - * Encodes a public RSA key as an OpenSSH file. - * - * @param key the key. - * @param comment a comment. - * - * @return the public key in OpenSSH format. - */ -ssh.publicKeyToOpenSSH = function(key, comment) { - var type = 'ssh-rsa'; - comment = comment || ''; - - var buffer = forge.util.createBuffer(); - _addStringToBuffer(buffer, type); - _addBigIntegerToBuffer(buffer, key.e); - _addBigIntegerToBuffer(buffer, key.n); - - return type + ' ' + forge.util.encode64(buffer.bytes()) + ' ' + comment; -}; - -/** - * Encodes a private RSA key as an OpenSSH file. - * - * @param key the key. - * @param passphrase a passphrase to protect the key (falsy for no encryption). - * - * @return the public key in OpenSSH format. - */ -ssh.privateKeyToOpenSSH = function(privateKey, passphrase) { - if(!passphrase) { - return forge.pki.privateKeyToPem(privateKey); - } - // OpenSSH private key is just a legacy format, it seems - return forge.pki.encryptRsaPrivateKey(privateKey, passphrase, - {legacy: true, algorithm: 'aes128'}); -}; - -/** - * Gets the SSH fingerprint for the given public key. - * - * @param options the options to use. - * [md] the message digest object to use (defaults to forge.md.md5). - * [encoding] an alternative output encoding, such as 'hex' - * (defaults to none, outputs a byte buffer). - * [delimiter] the delimiter to use between bytes for 'hex' encoded - * output, eg: ':' (defaults to none). - * - * @return the fingerprint as a byte buffer or other encoding based on options. - */ -ssh.getPublicKeyFingerprint = function(key, options) { - options = options || {}; - var md = options.md || forge.md.md5.create(); - - var type = 'ssh-rsa'; - var buffer = forge.util.createBuffer(); - _addStringToBuffer(buffer, type); - _addBigIntegerToBuffer(buffer, key.e); - _addBigIntegerToBuffer(buffer, key.n); - - // hash public key bytes - md.start(); - md.update(buffer.getBytes()); - var digest = md.digest(); - if(options.encoding === 'hex') { - var hex = digest.toHex(); - if(options.delimiter) { - return hex.match(/.{2}/g).join(options.delimiter); - } - return hex; - } else if(options.encoding === 'binary') { - return digest.getBytes(); - } else if(options.encoding) { - throw new Error('Unknown encoding "' + options.encoding + '".'); - } - return digest; -}; - -/** - * Adds len(val) then val to a buffer. - * - * @param buffer the buffer to add to. - * @param val a big integer. - */ -function _addBigIntegerToBuffer(buffer, val) { - var hexVal = val.toString(16); - // ensure 2s complement +ve - if(hexVal[0] >= '8') { - hexVal = '00' + hexVal; - } - var bytes = forge.util.hexToBytes(hexVal); - buffer.putInt32(bytes.length); - buffer.putBytes(bytes); -} - -/** - * Adds len(val) then val to a buffer. - * - * @param buffer the buffer to add to. - * @param val a string. - */ -function _addStringToBuffer(buffer, val) { - buffer.putInt32(val.length); - buffer.putString(val); -} - -/** - * Hashes the arguments into one value using SHA-1. - * - * @return the sha1 hash of the provided arguments. - */ -function _sha1() { - var sha = forge.md.sha1.create(); - var num = arguments.length; - for (var i = 0; i < num; ++i) { - sha.update(arguments[i]); - } - return sha.digest(); -} diff --git a/reverse_engineering/node_modules/node-forge/lib/task.js b/reverse_engineering/node_modules/node-forge/lib/task.js deleted file mode 100644 index df48660..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/task.js +++ /dev/null @@ -1,725 +0,0 @@ -/** - * Support for concurrent task management and synchronization in web - * applications. - * - * @author Dave Longley - * @author David I. Lehn - * - * Copyright (c) 2009-2013 Digital Bazaar, Inc. - */ -var forge = require('./forge'); -require('./debug'); -require('./log'); -require('./util'); - -// logging category -var cat = 'forge.task'; - -// verbose level -// 0: off, 1: a little, 2: a whole lot -// Verbose debug logging is surrounded by a level check to avoid the -// performance issues with even calling the logging code regardless if it -// is actually logged. For performance reasons this should not be set to 2 -// for production use. -// ex: if(sVL >= 2) forge.log.verbose(....) -var sVL = 0; - -// track tasks for debugging -var sTasks = {}; -var sNextTaskId = 0; -// debug access -forge.debug.set(cat, 'tasks', sTasks); - -// a map of task type to task queue -var sTaskQueues = {}; -// debug access -forge.debug.set(cat, 'queues', sTaskQueues); - -// name for unnamed tasks -var sNoTaskName = '?'; - -// maximum number of doNext() recursions before a context swap occurs -// FIXME: might need to tweak this based on the browser -var sMaxRecursions = 30; - -// time slice for doing tasks before a context swap occurs -// FIXME: might need to tweak this based on the browser -var sTimeSlice = 20; - -/** - * Task states. - * - * READY: ready to start processing - * RUNNING: task or a subtask is running - * BLOCKED: task is waiting to acquire N permits to continue - * SLEEPING: task is sleeping for a period of time - * DONE: task is done - * ERROR: task has an error - */ -var READY = 'ready'; -var RUNNING = 'running'; -var BLOCKED = 'blocked'; -var SLEEPING = 'sleeping'; -var DONE = 'done'; -var ERROR = 'error'; - -/** - * Task actions. Used to control state transitions. - * - * STOP: stop processing - * START: start processing tasks - * BLOCK: block task from continuing until 1 or more permits are released - * UNBLOCK: release one or more permits - * SLEEP: sleep for a period of time - * WAKEUP: wakeup early from SLEEPING state - * CANCEL: cancel further tasks - * FAIL: a failure occured - */ -var STOP = 'stop'; -var START = 'start'; -var BLOCK = 'block'; -var UNBLOCK = 'unblock'; -var SLEEP = 'sleep'; -var WAKEUP = 'wakeup'; -var CANCEL = 'cancel'; -var FAIL = 'fail'; - -/** - * State transition table. - * - * nextState = sStateTable[currentState][action] - */ -var sStateTable = {}; - -sStateTable[READY] = {}; -sStateTable[READY][STOP] = READY; -sStateTable[READY][START] = RUNNING; -sStateTable[READY][CANCEL] = DONE; -sStateTable[READY][FAIL] = ERROR; - -sStateTable[RUNNING] = {}; -sStateTable[RUNNING][STOP] = READY; -sStateTable[RUNNING][START] = RUNNING; -sStateTable[RUNNING][BLOCK] = BLOCKED; -sStateTable[RUNNING][UNBLOCK] = RUNNING; -sStateTable[RUNNING][SLEEP] = SLEEPING; -sStateTable[RUNNING][WAKEUP] = RUNNING; -sStateTable[RUNNING][CANCEL] = DONE; -sStateTable[RUNNING][FAIL] = ERROR; - -sStateTable[BLOCKED] = {}; -sStateTable[BLOCKED][STOP] = BLOCKED; -sStateTable[BLOCKED][START] = BLOCKED; -sStateTable[BLOCKED][BLOCK] = BLOCKED; -sStateTable[BLOCKED][UNBLOCK] = BLOCKED; -sStateTable[BLOCKED][SLEEP] = BLOCKED; -sStateTable[BLOCKED][WAKEUP] = BLOCKED; -sStateTable[BLOCKED][CANCEL] = DONE; -sStateTable[BLOCKED][FAIL] = ERROR; - -sStateTable[SLEEPING] = {}; -sStateTable[SLEEPING][STOP] = SLEEPING; -sStateTable[SLEEPING][START] = SLEEPING; -sStateTable[SLEEPING][BLOCK] = SLEEPING; -sStateTable[SLEEPING][UNBLOCK] = SLEEPING; -sStateTable[SLEEPING][SLEEP] = SLEEPING; -sStateTable[SLEEPING][WAKEUP] = SLEEPING; -sStateTable[SLEEPING][CANCEL] = DONE; -sStateTable[SLEEPING][FAIL] = ERROR; - -sStateTable[DONE] = {}; -sStateTable[DONE][STOP] = DONE; -sStateTable[DONE][START] = DONE; -sStateTable[DONE][BLOCK] = DONE; -sStateTable[DONE][UNBLOCK] = DONE; -sStateTable[DONE][SLEEP] = DONE; -sStateTable[DONE][WAKEUP] = DONE; -sStateTable[DONE][CANCEL] = DONE; -sStateTable[DONE][FAIL] = ERROR; - -sStateTable[ERROR] = {}; -sStateTable[ERROR][STOP] = ERROR; -sStateTable[ERROR][START] = ERROR; -sStateTable[ERROR][BLOCK] = ERROR; -sStateTable[ERROR][UNBLOCK] = ERROR; -sStateTable[ERROR][SLEEP] = ERROR; -sStateTable[ERROR][WAKEUP] = ERROR; -sStateTable[ERROR][CANCEL] = ERROR; -sStateTable[ERROR][FAIL] = ERROR; - -/** - * Creates a new task. - * - * @param options options for this task - * run: the run function for the task (required) - * name: the run function for the task (optional) - * parent: parent of this task (optional) - * - * @return the empty task. - */ -var Task = function(options) { - // task id - this.id = -1; - - // task name - this.name = options.name || sNoTaskName; - - // task has no parent - this.parent = options.parent || null; - - // save run function - this.run = options.run; - - // create a queue of subtasks to run - this.subtasks = []; - - // error flag - this.error = false; - - // state of the task - this.state = READY; - - // number of times the task has been blocked (also the number - // of permits needed to be released to continue running) - this.blocks = 0; - - // timeout id when sleeping - this.timeoutId = null; - - // no swap time yet - this.swapTime = null; - - // no user data - this.userData = null; - - // initialize task - // FIXME: deal with overflow - this.id = sNextTaskId++; - sTasks[this.id] = this; - if(sVL >= 1) { - forge.log.verbose(cat, '[%s][%s] init', this.id, this.name, this); - } -}; - -/** - * Logs debug information on this task and the system state. - */ -Task.prototype.debug = function(msg) { - msg = msg || ''; - forge.log.debug(cat, msg, - '[%s][%s] task:', this.id, this.name, this, - 'subtasks:', this.subtasks.length, - 'queue:', sTaskQueues); -}; - -/** - * Adds a subtask to run after task.doNext() or task.fail() is called. - * - * @param name human readable name for this task (optional). - * @param subrun a function to run that takes the current task as - * its first parameter. - * - * @return the current task (useful for chaining next() calls). - */ -Task.prototype.next = function(name, subrun) { - // juggle parameters if it looks like no name is given - if(typeof(name) === 'function') { - subrun = name; - - // inherit parent's name - name = this.name; - } - // create subtask, set parent to this task, propagate callbacks - var subtask = new Task({ - run: subrun, - name: name, - parent: this - }); - // start subtasks running - subtask.state = RUNNING; - subtask.type = this.type; - subtask.successCallback = this.successCallback || null; - subtask.failureCallback = this.failureCallback || null; - - // queue a new subtask - this.subtasks.push(subtask); - - return this; -}; - -/** - * Adds subtasks to run in parallel after task.doNext() or task.fail() - * is called. - * - * @param name human readable name for this task (optional). - * @param subrun functions to run that take the current task as - * their first parameter. - * - * @return the current task (useful for chaining next() calls). - */ -Task.prototype.parallel = function(name, subrun) { - // juggle parameters if it looks like no name is given - if(forge.util.isArray(name)) { - subrun = name; - - // inherit parent's name - name = this.name; - } - // Wrap parallel tasks in a regular task so they are started at the - // proper time. - return this.next(name, function(task) { - // block waiting for subtasks - var ptask = task; - ptask.block(subrun.length); - - // we pass the iterator from the loop below as a parameter - // to a function because it is otherwise included in the - // closure and changes as the loop changes -- causing i - // to always be set to its highest value - var startParallelTask = function(pname, pi) { - forge.task.start({ - type: pname, - run: function(task) { - subrun[pi](task); - }, - success: function(task) { - ptask.unblock(); - }, - failure: function(task) { - ptask.unblock(); - } - }); - }; - - for(var i = 0; i < subrun.length; i++) { - // Type must be unique so task starts in parallel: - // name + private string + task id + sub-task index - // start tasks in parallel and unblock when the finish - var pname = name + '__parallel-' + task.id + '-' + i; - var pi = i; - startParallelTask(pname, pi); - } - }); -}; - -/** - * Stops a running task. - */ -Task.prototype.stop = function() { - this.state = sStateTable[this.state][STOP]; -}; - -/** - * Starts running a task. - */ -Task.prototype.start = function() { - this.error = false; - this.state = sStateTable[this.state][START]; - - // try to restart - if(this.state === RUNNING) { - this.start = new Date(); - this.run(this); - runNext(this, 0); - } -}; - -/** - * Blocks a task until it one or more permits have been released. The - * task will not resume until the requested number of permits have - * been released with call(s) to unblock(). - * - * @param n number of permits to wait for(default: 1). - */ -Task.prototype.block = function(n) { - n = typeof(n) === 'undefined' ? 1 : n; - this.blocks += n; - if(this.blocks > 0) { - this.state = sStateTable[this.state][BLOCK]; - } -}; - -/** - * Releases a permit to unblock a task. If a task was blocked by - * requesting N permits via block(), then it will only continue - * running once enough permits have been released via unblock() calls. - * - * If multiple processes need to synchronize with a single task then - * use a condition variable (see forge.task.createCondition). It is - * an error to unblock a task more times than it has been blocked. - * - * @param n number of permits to release (default: 1). - * - * @return the current block count (task is unblocked when count is 0) - */ -Task.prototype.unblock = function(n) { - n = typeof(n) === 'undefined' ? 1 : n; - this.blocks -= n; - if(this.blocks === 0 && this.state !== DONE) { - this.state = RUNNING; - runNext(this, 0); - } - return this.blocks; -}; - -/** - * Sleep for a period of time before resuming tasks. - * - * @param n number of milliseconds to sleep (default: 0). - */ -Task.prototype.sleep = function(n) { - n = typeof(n) === 'undefined' ? 0 : n; - this.state = sStateTable[this.state][SLEEP]; - var self = this; - this.timeoutId = setTimeout(function() { - self.timeoutId = null; - self.state = RUNNING; - runNext(self, 0); - }, n); -}; - -/** - * Waits on a condition variable until notified. The next task will - * not be scheduled until notification. A condition variable can be - * created with forge.task.createCondition(). - * - * Once cond.notify() is called, the task will continue. - * - * @param cond the condition variable to wait on. - */ -Task.prototype.wait = function(cond) { - cond.wait(this); -}; - -/** - * If sleeping, wakeup and continue running tasks. - */ -Task.prototype.wakeup = function() { - if(this.state === SLEEPING) { - cancelTimeout(this.timeoutId); - this.timeoutId = null; - this.state = RUNNING; - runNext(this, 0); - } -}; - -/** - * Cancel all remaining subtasks of this task. - */ -Task.prototype.cancel = function() { - this.state = sStateTable[this.state][CANCEL]; - // remove permits needed - this.permitsNeeded = 0; - // cancel timeouts - if(this.timeoutId !== null) { - cancelTimeout(this.timeoutId); - this.timeoutId = null; - } - // remove subtasks - this.subtasks = []; -}; - -/** - * Finishes this task with failure and sets error flag. The entire - * task will be aborted unless the next task that should execute - * is passed as a parameter. This allows levels of subtasks to be - * skipped. For instance, to abort only this tasks's subtasks, then - * call fail(task.parent). To abort this task's subtasks and its - * parent's subtasks, call fail(task.parent.parent). To abort - * all tasks and simply call the task callback, call fail() or - * fail(null). - * - * The task callback (success or failure) will always, eventually, be - * called. - * - * @param next the task to continue at, or null to abort entirely. - */ -Task.prototype.fail = function(next) { - // set error flag - this.error = true; - - // finish task - finish(this, true); - - if(next) { - // propagate task info - next.error = this.error; - next.swapTime = this.swapTime; - next.userData = this.userData; - - // do next task as specified - runNext(next, 0); - } else { - if(this.parent !== null) { - // finish root task (ensures it is removed from task queue) - var parent = this.parent; - while(parent.parent !== null) { - // propagate task info - parent.error = this.error; - parent.swapTime = this.swapTime; - parent.userData = this.userData; - parent = parent.parent; - } - finish(parent, true); - } - - // call failure callback if one exists - if(this.failureCallback) { - this.failureCallback(this); - } - } -}; - -/** - * Asynchronously start a task. - * - * @param task the task to start. - */ -var start = function(task) { - task.error = false; - task.state = sStateTable[task.state][START]; - setTimeout(function() { - if(task.state === RUNNING) { - task.swapTime = +new Date(); - task.run(task); - runNext(task, 0); - } - }, 0); -}; - -/** - * Run the next subtask or finish this task. - * - * @param task the task to process. - * @param recurse the recursion count. - */ -var runNext = function(task, recurse) { - // get time since last context swap (ms), if enough time has passed set - // swap to true to indicate that doNext was performed asynchronously - // also, if recurse is too high do asynchronously - var swap = - (recurse > sMaxRecursions) || - (+new Date() - task.swapTime) > sTimeSlice; - - var doNext = function(recurse) { - recurse++; - if(task.state === RUNNING) { - if(swap) { - // update swap time - task.swapTime = +new Date(); - } - - if(task.subtasks.length > 0) { - // run next subtask - var subtask = task.subtasks.shift(); - subtask.error = task.error; - subtask.swapTime = task.swapTime; - subtask.userData = task.userData; - subtask.run(subtask); - if(!subtask.error) { - runNext(subtask, recurse); - } - } else { - finish(task); - - if(!task.error) { - // chain back up and run parent - if(task.parent !== null) { - // propagate task info - task.parent.error = task.error; - task.parent.swapTime = task.swapTime; - task.parent.userData = task.userData; - - // no subtasks left, call run next subtask on parent - runNext(task.parent, recurse); - } - } - } - } - }; - - if(swap) { - // we're swapping, so run asynchronously - setTimeout(doNext, 0); - } else { - // not swapping, so run synchronously - doNext(recurse); - } -}; - -/** - * Finishes a task and looks for the next task in the queue to start. - * - * @param task the task to finish. - * @param suppressCallbacks true to suppress callbacks. - */ -var finish = function(task, suppressCallbacks) { - // subtask is now done - task.state = DONE; - - delete sTasks[task.id]; - if(sVL >= 1) { - forge.log.verbose(cat, '[%s][%s] finish', - task.id, task.name, task); - } - - // only do queue processing for root tasks - if(task.parent === null) { - // report error if queue is missing - if(!(task.type in sTaskQueues)) { - forge.log.error(cat, - '[%s][%s] task queue missing [%s]', - task.id, task.name, task.type); - } else if(sTaskQueues[task.type].length === 0) { - // report error if queue is empty - forge.log.error(cat, - '[%s][%s] task queue empty [%s]', - task.id, task.name, task.type); - } else if(sTaskQueues[task.type][0] !== task) { - // report error if this task isn't the first in the queue - forge.log.error(cat, - '[%s][%s] task not first in queue [%s]', - task.id, task.name, task.type); - } else { - // remove ourselves from the queue - sTaskQueues[task.type].shift(); - // clean up queue if it is empty - if(sTaskQueues[task.type].length === 0) { - if(sVL >= 1) { - forge.log.verbose(cat, '[%s][%s] delete queue [%s]', - task.id, task.name, task.type); - } - /* Note: Only a task can delete a queue of its own type. This - is used as a way to synchronize tasks. If a queue for a certain - task type exists, then a task of that type is running. - */ - delete sTaskQueues[task.type]; - } else { - // dequeue the next task and start it - if(sVL >= 1) { - forge.log.verbose(cat, - '[%s][%s] queue start next [%s] remain:%s', - task.id, task.name, task.type, - sTaskQueues[task.type].length); - } - sTaskQueues[task.type][0].start(); - } - } - - if(!suppressCallbacks) { - // call final callback if one exists - if(task.error && task.failureCallback) { - task.failureCallback(task); - } else if(!task.error && task.successCallback) { - task.successCallback(task); - } - } - } -}; - -/* Tasks API */ -module.exports = forge.task = forge.task || {}; - -/** - * Starts a new task that will run the passed function asynchronously. - * - * In order to finish the task, either task.doNext() or task.fail() - * *must* be called. - * - * The task must have a type (a string identifier) that can be used to - * synchronize it with other tasks of the same type. That type can also - * be used to cancel tasks that haven't started yet. - * - * To start a task, the following object must be provided as a parameter - * (each function takes a task object as its first parameter): - * - * { - * type: the type of task. - * run: the function to run to execute the task. - * success: a callback to call when the task succeeds (optional). - * failure: a callback to call when the task fails (optional). - * } - * - * @param options the object as described above. - */ -forge.task.start = function(options) { - // create a new task - var task = new Task({ - run: options.run, - name: options.name || sNoTaskName - }); - task.type = options.type; - task.successCallback = options.success || null; - task.failureCallback = options.failure || null; - - // append the task onto the appropriate queue - if(!(task.type in sTaskQueues)) { - if(sVL >= 1) { - forge.log.verbose(cat, '[%s][%s] create queue [%s]', - task.id, task.name, task.type); - } - // create the queue with the new task - sTaskQueues[task.type] = [task]; - start(task); - } else { - // push the task onto the queue, it will be run after a task - // with the same type completes - sTaskQueues[options.type].push(task); - } -}; - -/** - * Cancels all tasks of the given type that haven't started yet. - * - * @param type the type of task to cancel. - */ -forge.task.cancel = function(type) { - // find the task queue - if(type in sTaskQueues) { - // empty all but the current task from the queue - sTaskQueues[type] = [sTaskQueues[type][0]]; - } -}; - -/** - * Creates a condition variable to synchronize tasks. To make a task wait - * on the condition variable, call task.wait(condition). To notify all - * tasks that are waiting, call condition.notify(). - * - * @return the condition variable. - */ -forge.task.createCondition = function() { - var cond = { - // all tasks that are blocked - tasks: {} - }; - - /** - * Causes the given task to block until notify is called. If the task - * is already waiting on this condition then this is a no-op. - * - * @param task the task to cause to wait. - */ - cond.wait = function(task) { - // only block once - if(!(task.id in cond.tasks)) { - task.block(); - cond.tasks[task.id] = task; - } - }; - - /** - * Notifies all waiting tasks to wake up. - */ - cond.notify = function() { - // since unblock() will run the next task from here, make sure to - // clear the condition's blocked task list before unblocking - var tmp = cond.tasks; - cond.tasks = {}; - for(var id in tmp) { - tmp[id].unblock(); - } - }; - - return cond; -}; diff --git a/reverse_engineering/node_modules/node-forge/lib/tls.js b/reverse_engineering/node_modules/node-forge/lib/tls.js deleted file mode 100644 index fadfd64..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/tls.js +++ /dev/null @@ -1,4282 +0,0 @@ -/** - * A Javascript implementation of Transport Layer Security (TLS). - * - * @author Dave Longley - * - * Copyright (c) 2009-2014 Digital Bazaar, Inc. - * - * The TLS Handshake Protocol involves the following steps: - * - * - Exchange hello messages to agree on algorithms, exchange random values, - * and check for session resumption. - * - * - Exchange the necessary cryptographic parameters to allow the client and - * server to agree on a premaster secret. - * - * - Exchange certificates and cryptographic information to allow the client - * and server to authenticate themselves. - * - * - Generate a master secret from the premaster secret and exchanged random - * values. - * - * - Provide security parameters to the record layer. - * - * - Allow the client and server to verify that their peer has calculated the - * same security parameters and that the handshake occurred without tampering - * by an attacker. - * - * Up to 4 different messages may be sent during a key exchange. The server - * certificate, the server key exchange, the client certificate, and the - * client key exchange. - * - * A typical handshake (from the client's perspective). - * - * 1. Client sends ClientHello. - * 2. Client receives ServerHello. - * 3. Client receives optional Certificate. - * 4. Client receives optional ServerKeyExchange. - * 5. Client receives ServerHelloDone. - * 6. Client sends optional Certificate. - * 7. Client sends ClientKeyExchange. - * 8. Client sends optional CertificateVerify. - * 9. Client sends ChangeCipherSpec. - * 10. Client sends Finished. - * 11. Client receives ChangeCipherSpec. - * 12. Client receives Finished. - * 13. Client sends/receives application data. - * - * To reuse an existing session: - * - * 1. Client sends ClientHello with session ID for reuse. - * 2. Client receives ServerHello with same session ID if reusing. - * 3. Client receives ChangeCipherSpec message if reusing. - * 4. Client receives Finished. - * 5. Client sends ChangeCipherSpec. - * 6. Client sends Finished. - * - * Note: Client ignores HelloRequest if in the middle of a handshake. - * - * Record Layer: - * - * The record layer fragments information blocks into TLSPlaintext records - * carrying data in chunks of 2^14 bytes or less. Client message boundaries are - * not preserved in the record layer (i.e., multiple client messages of the - * same ContentType MAY be coalesced into a single TLSPlaintext record, or a - * single message MAY be fragmented across several records). - * - * struct { - * uint8 major; - * uint8 minor; - * } ProtocolVersion; - * - * struct { - * ContentType type; - * ProtocolVersion version; - * uint16 length; - * opaque fragment[TLSPlaintext.length]; - * } TLSPlaintext; - * - * type: - * The higher-level protocol used to process the enclosed fragment. - * - * version: - * The version of the protocol being employed. TLS Version 1.2 uses version - * {3, 3}. TLS Version 1.0 uses version {3, 1}. Note that a client that - * supports multiple versions of TLS may not know what version will be - * employed before it receives the ServerHello. - * - * length: - * The length (in bytes) of the following TLSPlaintext.fragment. The length - * MUST NOT exceed 2^14 = 16384 bytes. - * - * fragment: - * The application data. This data is transparent and treated as an - * independent block to be dealt with by the higher-level protocol specified - * by the type field. - * - * Implementations MUST NOT send zero-length fragments of Handshake, Alert, or - * ChangeCipherSpec content types. Zero-length fragments of Application data - * MAY be sent as they are potentially useful as a traffic analysis - * countermeasure. - * - * Note: Data of different TLS record layer content types MAY be interleaved. - * Application data is generally of lower precedence for transmission than - * other content types. However, records MUST be delivered to the network in - * the same order as they are protected by the record layer. Recipients MUST - * receive and process interleaved application layer traffic during handshakes - * subsequent to the first one on a connection. - * - * struct { - * ContentType type; // same as TLSPlaintext.type - * ProtocolVersion version;// same as TLSPlaintext.version - * uint16 length; - * opaque fragment[TLSCompressed.length]; - * } TLSCompressed; - * - * length: - * The length (in bytes) of the following TLSCompressed.fragment. - * The length MUST NOT exceed 2^14 + 1024. - * - * fragment: - * The compressed form of TLSPlaintext.fragment. - * - * Note: A CompressionMethod.null operation is an identity operation; no fields - * are altered. In this implementation, since no compression is supported, - * uncompressed records are always the same as compressed records. - * - * Encryption Information: - * - * The encryption and MAC functions translate a TLSCompressed structure into a - * TLSCiphertext. The decryption functions reverse the process. The MAC of the - * record also includes a sequence number so that missing, extra, or repeated - * messages are detectable. - * - * struct { - * ContentType type; - * ProtocolVersion version; - * uint16 length; - * select (SecurityParameters.cipher_type) { - * case stream: GenericStreamCipher; - * case block: GenericBlockCipher; - * case aead: GenericAEADCipher; - * } fragment; - * } TLSCiphertext; - * - * type: - * The type field is identical to TLSCompressed.type. - * - * version: - * The version field is identical to TLSCompressed.version. - * - * length: - * The length (in bytes) of the following TLSCiphertext.fragment. - * The length MUST NOT exceed 2^14 + 2048. - * - * fragment: - * The encrypted form of TLSCompressed.fragment, with the MAC. - * - * Note: Only CBC Block Ciphers are supported by this implementation. - * - * The TLSCompressed.fragment structures are converted to/from block - * TLSCiphertext.fragment structures. - * - * struct { - * opaque IV[SecurityParameters.record_iv_length]; - * block-ciphered struct { - * opaque content[TLSCompressed.length]; - * opaque MAC[SecurityParameters.mac_length]; - * uint8 padding[GenericBlockCipher.padding_length]; - * uint8 padding_length; - * }; - * } GenericBlockCipher; - * - * The MAC is generated as described in Section 6.2.3.1. - * - * IV: - * The Initialization Vector (IV) SHOULD be chosen at random, and MUST be - * unpredictable. Note that in versions of TLS prior to 1.1, there was no - * IV field, and the last ciphertext block of the previous record (the "CBC - * residue") was used as the IV. This was changed to prevent the attacks - * described in [CBCATT]. For block ciphers, the IV length is of length - * SecurityParameters.record_iv_length, which is equal to the - * SecurityParameters.block_size. - * - * padding: - * Padding that is added to force the length of the plaintext to be an - * integral multiple of the block cipher's block length. The padding MAY be - * any length up to 255 bytes, as long as it results in the - * TLSCiphertext.length being an integral multiple of the block length. - * Lengths longer than necessary might be desirable to frustrate attacks on - * a protocol that are based on analysis of the lengths of exchanged - * messages. Each uint8 in the padding data vector MUST be filled with the - * padding length value. The receiver MUST check this padding and MUST use - * the bad_record_mac alert to indicate padding errors. - * - * padding_length: - * The padding length MUST be such that the total size of the - * GenericBlockCipher structure is a multiple of the cipher's block length. - * Legal values range from zero to 255, inclusive. This length specifies the - * length of the padding field exclusive of the padding_length field itself. - * - * The encrypted data length (TLSCiphertext.length) is one more than the sum of - * SecurityParameters.block_length, TLSCompressed.length, - * SecurityParameters.mac_length, and padding_length. - * - * Example: If the block length is 8 bytes, the content length - * (TLSCompressed.length) is 61 bytes, and the MAC length is 20 bytes, then the - * length before padding is 82 bytes (this does not include the IV. Thus, the - * padding length modulo 8 must be equal to 6 in order to make the total length - * an even multiple of 8 bytes (the block length). The padding length can be - * 6, 14, 22, and so on, through 254. If the padding length were the minimum - * necessary, 6, the padding would be 6 bytes, each containing the value 6. - * Thus, the last 8 octets of the GenericBlockCipher before block encryption - * would be xx 06 06 06 06 06 06 06, where xx is the last octet of the MAC. - * - * Note: With block ciphers in CBC mode (Cipher Block Chaining), it is critical - * that the entire plaintext of the record be known before any ciphertext is - * transmitted. Otherwise, it is possible for the attacker to mount the attack - * described in [CBCATT]. - * - * Implementation note: Canvel et al. [CBCTIME] have demonstrated a timing - * attack on CBC padding based on the time required to compute the MAC. In - * order to defend against this attack, implementations MUST ensure that - * record processing time is essentially the same whether or not the padding - * is correct. In general, the best way to do this is to compute the MAC even - * if the padding is incorrect, and only then reject the packet. For instance, - * if the pad appears to be incorrect, the implementation might assume a - * zero-length pad and then compute the MAC. This leaves a small timing - * channel, since MAC performance depends, to some extent, on the size of the - * data fragment, but it is not believed to be large enough to be exploitable, - * due to the large block size of existing MACs and the small size of the - * timing signal. - */ -var forge = require('./forge'); -require('./asn1'); -require('./hmac'); -require('./md5'); -require('./pem'); -require('./pki'); -require('./random'); -require('./sha1'); -require('./util'); - -/** - * Generates pseudo random bytes by mixing the result of two hash functions, - * MD5 and SHA-1. - * - * prf_TLS1(secret, label, seed) = - * P_MD5(S1, label + seed) XOR P_SHA-1(S2, label + seed); - * - * Each P_hash function functions as follows: - * - * P_hash(secret, seed) = HMAC_hash(secret, A(1) + seed) + - * HMAC_hash(secret, A(2) + seed) + - * HMAC_hash(secret, A(3) + seed) + ... - * A() is defined as: - * A(0) = seed - * A(i) = HMAC_hash(secret, A(i-1)) - * - * The '+' operator denotes concatenation. - * - * As many iterations A(N) as are needed are performed to generate enough - * pseudo random byte output. If an iteration creates more data than is - * necessary, then it is truncated. - * - * Therefore: - * A(1) = HMAC_hash(secret, A(0)) - * = HMAC_hash(secret, seed) - * A(2) = HMAC_hash(secret, A(1)) - * = HMAC_hash(secret, HMAC_hash(secret, seed)) - * - * Therefore: - * P_hash(secret, seed) = - * HMAC_hash(secret, HMAC_hash(secret, A(0)) + seed) + - * HMAC_hash(secret, HMAC_hash(secret, A(1)) + seed) + - * ... - * - * Therefore: - * P_hash(secret, seed) = - * HMAC_hash(secret, HMAC_hash(secret, seed) + seed) + - * HMAC_hash(secret, HMAC_hash(secret, HMAC_hash(secret, seed)) + seed) + - * ... - * - * @param secret the secret to use. - * @param label the label to use. - * @param seed the seed value to use. - * @param length the number of bytes to generate. - * - * @return the pseudo random bytes in a byte buffer. - */ -var prf_TLS1 = function(secret, label, seed, length) { - var rval = forge.util.createBuffer(); - - /* For TLS 1.0, the secret is split in half, into two secrets of equal - length. If the secret has an odd length then the last byte of the first - half will be the same as the first byte of the second. The length of the - two secrets is half of the secret rounded up. */ - var idx = (secret.length >> 1); - var slen = idx + (secret.length & 1); - var s1 = secret.substr(0, slen); - var s2 = secret.substr(idx, slen); - var ai = forge.util.createBuffer(); - var hmac = forge.hmac.create(); - seed = label + seed; - - // determine the number of iterations that must be performed to generate - // enough output bytes, md5 creates 16 byte hashes, sha1 creates 20 - var md5itr = Math.ceil(length / 16); - var sha1itr = Math.ceil(length / 20); - - // do md5 iterations - hmac.start('MD5', s1); - var md5bytes = forge.util.createBuffer(); - ai.putBytes(seed); - for(var i = 0; i < md5itr; ++i) { - // HMAC_hash(secret, A(i-1)) - hmac.start(null, null); - hmac.update(ai.getBytes()); - ai.putBuffer(hmac.digest()); - - // HMAC_hash(secret, A(i) + seed) - hmac.start(null, null); - hmac.update(ai.bytes() + seed); - md5bytes.putBuffer(hmac.digest()); - } - - // do sha1 iterations - hmac.start('SHA1', s2); - var sha1bytes = forge.util.createBuffer(); - ai.clear(); - ai.putBytes(seed); - for(var i = 0; i < sha1itr; ++i) { - // HMAC_hash(secret, A(i-1)) - hmac.start(null, null); - hmac.update(ai.getBytes()); - ai.putBuffer(hmac.digest()); - - // HMAC_hash(secret, A(i) + seed) - hmac.start(null, null); - hmac.update(ai.bytes() + seed); - sha1bytes.putBuffer(hmac.digest()); - } - - // XOR the md5 bytes with the sha1 bytes - rval.putBytes(forge.util.xorBytes( - md5bytes.getBytes(), sha1bytes.getBytes(), length)); - - return rval; -}; - -/** - * Generates pseudo random bytes using a SHA256 algorithm. For TLS 1.2. - * - * @param secret the secret to use. - * @param label the label to use. - * @param seed the seed value to use. - * @param length the number of bytes to generate. - * - * @return the pseudo random bytes in a byte buffer. - */ -var prf_sha256 = function(secret, label, seed, length) { - // FIXME: implement me for TLS 1.2 -}; - -/** - * Gets a MAC for a record using the SHA-1 hash algorithm. - * - * @param key the mac key. - * @param state the sequence number (array of two 32-bit integers). - * @param record the record. - * - * @return the sha-1 hash (20 bytes) for the given record. - */ -var hmac_sha1 = function(key, seqNum, record) { - /* MAC is computed like so: - HMAC_hash( - key, seqNum + - TLSCompressed.type + - TLSCompressed.version + - TLSCompressed.length + - TLSCompressed.fragment) - */ - var hmac = forge.hmac.create(); - hmac.start('SHA1', key); - var b = forge.util.createBuffer(); - b.putInt32(seqNum[0]); - b.putInt32(seqNum[1]); - b.putByte(record.type); - b.putByte(record.version.major); - b.putByte(record.version.minor); - b.putInt16(record.length); - b.putBytes(record.fragment.bytes()); - hmac.update(b.getBytes()); - return hmac.digest().getBytes(); -}; - -/** - * Compresses the TLSPlaintext record into a TLSCompressed record using the - * deflate algorithm. - * - * @param c the TLS connection. - * @param record the TLSPlaintext record to compress. - * @param s the ConnectionState to use. - * - * @return true on success, false on failure. - */ -var deflate = function(c, record, s) { - var rval = false; - - try { - var bytes = c.deflate(record.fragment.getBytes()); - record.fragment = forge.util.createBuffer(bytes); - record.length = bytes.length; - rval = true; - } catch(ex) { - // deflate error, fail out - } - - return rval; -}; - -/** - * Decompresses the TLSCompressed record into a TLSPlaintext record using the - * deflate algorithm. - * - * @param c the TLS connection. - * @param record the TLSCompressed record to decompress. - * @param s the ConnectionState to use. - * - * @return true on success, false on failure. - */ -var inflate = function(c, record, s) { - var rval = false; - - try { - var bytes = c.inflate(record.fragment.getBytes()); - record.fragment = forge.util.createBuffer(bytes); - record.length = bytes.length; - rval = true; - } catch(ex) { - // inflate error, fail out - } - - return rval; -}; - -/** - * Reads a TLS variable-length vector from a byte buffer. - * - * Variable-length vectors are defined by specifying a subrange of legal - * lengths, inclusively, using the notation . When these are - * encoded, the actual length precedes the vector's contents in the byte - * stream. The length will be in the form of a number consuming as many bytes - * as required to hold the vector's specified maximum (ceiling) length. A - * variable-length vector with an actual length field of zero is referred to - * as an empty vector. - * - * @param b the byte buffer. - * @param lenBytes the number of bytes required to store the length. - * - * @return the resulting byte buffer. - */ -var readVector = function(b, lenBytes) { - var len = 0; - switch(lenBytes) { - case 1: - len = b.getByte(); - break; - case 2: - len = b.getInt16(); - break; - case 3: - len = b.getInt24(); - break; - case 4: - len = b.getInt32(); - break; - } - - // read vector bytes into a new buffer - return forge.util.createBuffer(b.getBytes(len)); -}; - -/** - * Writes a TLS variable-length vector to a byte buffer. - * - * @param b the byte buffer. - * @param lenBytes the number of bytes required to store the length. - * @param v the byte buffer vector. - */ -var writeVector = function(b, lenBytes, v) { - // encode length at the start of the vector, where the number of bytes for - // the length is the maximum number of bytes it would take to encode the - // vector's ceiling - b.putInt(v.length(), lenBytes << 3); - b.putBuffer(v); -}; - -/** - * The tls implementation. - */ -var tls = {}; - -/** - * Version: TLS 1.2 = 3.3, TLS 1.1 = 3.2, TLS 1.0 = 3.1. Both TLS 1.1 and - * TLS 1.2 were still too new (ie: openSSL didn't implement them) at the time - * of this implementation so TLS 1.0 was implemented instead. - */ -tls.Versions = { - TLS_1_0: {major: 3, minor: 1}, - TLS_1_1: {major: 3, minor: 2}, - TLS_1_2: {major: 3, minor: 3} -}; -tls.SupportedVersions = [ - tls.Versions.TLS_1_1, - tls.Versions.TLS_1_0 -]; -tls.Version = tls.SupportedVersions[0]; - -/** - * Maximum fragment size. True maximum is 16384, but we fragment before that - * to allow for unusual small increases during compression. - */ -tls.MaxFragment = 16384 - 1024; - -/** - * Whether this entity is considered the "client" or "server". - * enum { server, client } ConnectionEnd; - */ -tls.ConnectionEnd = { - server: 0, - client: 1 -}; - -/** - * Pseudo-random function algorithm used to generate keys from the master - * secret. - * enum { tls_prf_sha256 } PRFAlgorithm; - */ -tls.PRFAlgorithm = { - tls_prf_sha256: 0 -}; - -/** - * Bulk encryption algorithms. - * enum { null, rc4, des3, aes } BulkCipherAlgorithm; - */ -tls.BulkCipherAlgorithm = { - none: null, - rc4: 0, - des3: 1, - aes: 2 -}; - -/** - * Cipher types. - * enum { stream, block, aead } CipherType; - */ -tls.CipherType = { - stream: 0, - block: 1, - aead: 2 -}; - -/** - * MAC (Message Authentication Code) algorithms. - * enum { null, hmac_md5, hmac_sha1, hmac_sha256, - * hmac_sha384, hmac_sha512} MACAlgorithm; - */ -tls.MACAlgorithm = { - none: null, - hmac_md5: 0, - hmac_sha1: 1, - hmac_sha256: 2, - hmac_sha384: 3, - hmac_sha512: 4 -}; - -/** - * Compression algorithms. - * enum { null(0), deflate(1), (255) } CompressionMethod; - */ -tls.CompressionMethod = { - none: 0, - deflate: 1 -}; - -/** - * TLS record content types. - * enum { - * change_cipher_spec(20), alert(21), handshake(22), - * application_data(23), (255) - * } ContentType; - */ -tls.ContentType = { - change_cipher_spec: 20, - alert: 21, - handshake: 22, - application_data: 23, - heartbeat: 24 -}; - -/** - * TLS handshake types. - * enum { - * hello_request(0), client_hello(1), server_hello(2), - * certificate(11), server_key_exchange (12), - * certificate_request(13), server_hello_done(14), - * certificate_verify(15), client_key_exchange(16), - * finished(20), (255) - * } HandshakeType; - */ -tls.HandshakeType = { - hello_request: 0, - client_hello: 1, - server_hello: 2, - certificate: 11, - server_key_exchange: 12, - certificate_request: 13, - server_hello_done: 14, - certificate_verify: 15, - client_key_exchange: 16, - finished: 20 -}; - -/** - * TLS Alert Protocol. - * - * enum { warning(1), fatal(2), (255) } AlertLevel; - * - * enum { - * close_notify(0), - * unexpected_message(10), - * bad_record_mac(20), - * decryption_failed(21), - * record_overflow(22), - * decompression_failure(30), - * handshake_failure(40), - * bad_certificate(42), - * unsupported_certificate(43), - * certificate_revoked(44), - * certificate_expired(45), - * certificate_unknown(46), - * illegal_parameter(47), - * unknown_ca(48), - * access_denied(49), - * decode_error(50), - * decrypt_error(51), - * export_restriction(60), - * protocol_version(70), - * insufficient_security(71), - * internal_error(80), - * user_canceled(90), - * no_renegotiation(100), - * (255) - * } AlertDescription; - * - * struct { - * AlertLevel level; - * AlertDescription description; - * } Alert; - */ -tls.Alert = {}; -tls.Alert.Level = { - warning: 1, - fatal: 2 -}; -tls.Alert.Description = { - close_notify: 0, - unexpected_message: 10, - bad_record_mac: 20, - decryption_failed: 21, - record_overflow: 22, - decompression_failure: 30, - handshake_failure: 40, - bad_certificate: 42, - unsupported_certificate: 43, - certificate_revoked: 44, - certificate_expired: 45, - certificate_unknown: 46, - illegal_parameter: 47, - unknown_ca: 48, - access_denied: 49, - decode_error: 50, - decrypt_error: 51, - export_restriction: 60, - protocol_version: 70, - insufficient_security: 71, - internal_error: 80, - user_canceled: 90, - no_renegotiation: 100 -}; - -/** - * TLS Heartbeat Message types. - * enum { - * heartbeat_request(1), - * heartbeat_response(2), - * (255) - * } HeartbeatMessageType; - */ -tls.HeartbeatMessageType = { - heartbeat_request: 1, - heartbeat_response: 2 -}; - -/** - * Supported cipher suites. - */ -tls.CipherSuites = {}; - -/** - * Gets a supported cipher suite from its 2 byte ID. - * - * @param twoBytes two bytes in a string. - * - * @return the matching supported cipher suite or null. - */ -tls.getCipherSuite = function(twoBytes) { - var rval = null; - for(var key in tls.CipherSuites) { - var cs = tls.CipherSuites[key]; - if(cs.id[0] === twoBytes.charCodeAt(0) && - cs.id[1] === twoBytes.charCodeAt(1)) { - rval = cs; - break; - } - } - return rval; -}; - -/** - * Called when an unexpected record is encountered. - * - * @param c the connection. - * @param record the record. - */ -tls.handleUnexpected = function(c, record) { - // if connection is client and closed, ignore unexpected messages - var ignore = (!c.open && c.entity === tls.ConnectionEnd.client); - if(!ignore) { - c.error(c, { - message: 'Unexpected message. Received TLS record out of order.', - send: true, - alert: { - level: tls.Alert.Level.fatal, - description: tls.Alert.Description.unexpected_message - } - }); - } -}; - -/** - * Called when a client receives a HelloRequest record. - * - * @param c the connection. - * @param record the record. - * @param length the length of the handshake message. - */ -tls.handleHelloRequest = function(c, record, length) { - // ignore renegotiation requests from the server during a handshake, but - // if handshaking, send a warning alert that renegotation is denied - if(!c.handshaking && c.handshakes > 0) { - // send alert warning - tls.queue(c, tls.createAlert(c, { - level: tls.Alert.Level.warning, - description: tls.Alert.Description.no_renegotiation - })); - tls.flush(c); - } - - // continue - c.process(); -}; - -/** - * Parses a hello message from a ClientHello or ServerHello record. - * - * @param record the record to parse. - * - * @return the parsed message. - */ -tls.parseHelloMessage = function(c, record, length) { - var msg = null; - - var client = (c.entity === tls.ConnectionEnd.client); - - // minimum of 38 bytes in message - if(length < 38) { - c.error(c, { - message: client ? - 'Invalid ServerHello message. Message too short.' : - 'Invalid ClientHello message. Message too short.', - send: true, - alert: { - level: tls.Alert.Level.fatal, - description: tls.Alert.Description.illegal_parameter - } - }); - } else { - // use 'remaining' to calculate # of remaining bytes in the message - var b = record.fragment; - var remaining = b.length(); - msg = { - version: { - major: b.getByte(), - minor: b.getByte() - }, - random: forge.util.createBuffer(b.getBytes(32)), - session_id: readVector(b, 1), - extensions: [] - }; - if(client) { - msg.cipher_suite = b.getBytes(2); - msg.compression_method = b.getByte(); - } else { - msg.cipher_suites = readVector(b, 2); - msg.compression_methods = readVector(b, 1); - } - - // read extensions if there are any bytes left in the message - remaining = length - (remaining - b.length()); - if(remaining > 0) { - // parse extensions - var exts = readVector(b, 2); - while(exts.length() > 0) { - msg.extensions.push({ - type: [exts.getByte(), exts.getByte()], - data: readVector(exts, 2) - }); - } - - // TODO: make extension support modular - if(!client) { - for(var i = 0; i < msg.extensions.length; ++i) { - var ext = msg.extensions[i]; - - // support SNI extension - if(ext.type[0] === 0x00 && ext.type[1] === 0x00) { - // get server name list - var snl = readVector(ext.data, 2); - while(snl.length() > 0) { - // read server name type - var snType = snl.getByte(); - - // only HostName type (0x00) is known, break out if - // another type is detected - if(snType !== 0x00) { - break; - } - - // add host name to server name list - c.session.extensions.server_name.serverNameList.push( - readVector(snl, 2).getBytes()); - } - } - } - } - } - - // version already set, do not allow version change - if(c.session.version) { - if(msg.version.major !== c.session.version.major || - msg.version.minor !== c.session.version.minor) { - return c.error(c, { - message: 'TLS version change is disallowed during renegotiation.', - send: true, - alert: { - level: tls.Alert.Level.fatal, - description: tls.Alert.Description.protocol_version - } - }); - } - } - - // get the chosen (ServerHello) cipher suite - if(client) { - // FIXME: should be checking configured acceptable cipher suites - c.session.cipherSuite = tls.getCipherSuite(msg.cipher_suite); - } else { - // get a supported preferred (ClientHello) cipher suite - // choose the first supported cipher suite - var tmp = forge.util.createBuffer(msg.cipher_suites.bytes()); - while(tmp.length() > 0) { - // FIXME: should be checking configured acceptable suites - // cipher suites take up 2 bytes - c.session.cipherSuite = tls.getCipherSuite(tmp.getBytes(2)); - if(c.session.cipherSuite !== null) { - break; - } - } - } - - // cipher suite not supported - if(c.session.cipherSuite === null) { - return c.error(c, { - message: 'No cipher suites in common.', - send: true, - alert: { - level: tls.Alert.Level.fatal, - description: tls.Alert.Description.handshake_failure - }, - cipherSuite: forge.util.bytesToHex(msg.cipher_suite) - }); - } - - // TODO: handle compression methods - if(client) { - c.session.compressionMethod = msg.compression_method; - } else { - // no compression - c.session.compressionMethod = tls.CompressionMethod.none; - } - } - - return msg; -}; - -/** - * Creates security parameters for the given connection based on the given - * hello message. - * - * @param c the TLS connection. - * @param msg the hello message. - */ -tls.createSecurityParameters = function(c, msg) { - /* Note: security params are from TLS 1.2, some values like prf_algorithm - are ignored for TLS 1.0/1.1 and the builtin as specified in the spec is - used. */ - - // TODO: handle other options from server when more supported - - // get client and server randoms - var client = (c.entity === tls.ConnectionEnd.client); - var msgRandom = msg.random.bytes(); - var cRandom = client ? c.session.sp.client_random : msgRandom; - var sRandom = client ? msgRandom : tls.createRandom().getBytes(); - - // create new security parameters - c.session.sp = { - entity: c.entity, - prf_algorithm: tls.PRFAlgorithm.tls_prf_sha256, - bulk_cipher_algorithm: null, - cipher_type: null, - enc_key_length: null, - block_length: null, - fixed_iv_length: null, - record_iv_length: null, - mac_algorithm: null, - mac_length: null, - mac_key_length: null, - compression_algorithm: c.session.compressionMethod, - pre_master_secret: null, - master_secret: null, - client_random: cRandom, - server_random: sRandom - }; -}; - -/** - * Called when a client receives a ServerHello record. - * - * When a ServerHello message will be sent: - * The server will send this message in response to a client hello message - * when it was able to find an acceptable set of algorithms. If it cannot - * find such a match, it will respond with a handshake failure alert. - * - * uint24 length; - * struct { - * ProtocolVersion server_version; - * Random random; - * SessionID session_id; - * CipherSuite cipher_suite; - * CompressionMethod compression_method; - * select(extensions_present) { - * case false: - * struct {}; - * case true: - * Extension extensions<0..2^16-1>; - * }; - * } ServerHello; - * - * @param c the connection. - * @param record the record. - * @param length the length of the handshake message. - */ -tls.handleServerHello = function(c, record, length) { - var msg = tls.parseHelloMessage(c, record, length); - if(c.fail) { - return; - } - - // ensure server version is compatible - if(msg.version.minor <= c.version.minor) { - c.version.minor = msg.version.minor; - } else { - return c.error(c, { - message: 'Incompatible TLS version.', - send: true, - alert: { - level: tls.Alert.Level.fatal, - description: tls.Alert.Description.protocol_version - } - }); - } - - // indicate session version has been set - c.session.version = c.version; - - // get the session ID from the message - var sessionId = msg.session_id.bytes(); - - // if the session ID is not blank and matches the cached one, resume - // the session - if(sessionId.length > 0 && sessionId === c.session.id) { - // resuming session, expect a ChangeCipherSpec next - c.expect = SCC; - c.session.resuming = true; - - // get new server random - c.session.sp.server_random = msg.random.bytes(); - } else { - // not resuming, expect a server Certificate message next - c.expect = SCE; - c.session.resuming = false; - - // create new security parameters - tls.createSecurityParameters(c, msg); - } - - // set new session ID - c.session.id = sessionId; - - // continue - c.process(); -}; - -/** - * Called when a server receives a ClientHello record. - * - * When a ClientHello message will be sent: - * When a client first connects to a server it is required to send the - * client hello as its first message. The client can also send a client - * hello in response to a hello request or on its own initiative in order - * to renegotiate the security parameters in an existing connection. - * - * @param c the connection. - * @param record the record. - * @param length the length of the handshake message. - */ -tls.handleClientHello = function(c, record, length) { - var msg = tls.parseHelloMessage(c, record, length); - if(c.fail) { - return; - } - - // get the session ID from the message - var sessionId = msg.session_id.bytes(); - - // see if the given session ID is in the cache - var session = null; - if(c.sessionCache) { - session = c.sessionCache.getSession(sessionId); - if(session === null) { - // session ID not found - sessionId = ''; - } else if(session.version.major !== msg.version.major || - session.version.minor > msg.version.minor) { - // if session version is incompatible with client version, do not resume - session = null; - sessionId = ''; - } - } - - // no session found to resume, generate a new session ID - if(sessionId.length === 0) { - sessionId = forge.random.getBytes(32); - } - - // update session - c.session.id = sessionId; - c.session.clientHelloVersion = msg.version; - c.session.sp = {}; - if(session) { - // use version and security parameters from resumed session - c.version = c.session.version = session.version; - c.session.sp = session.sp; - } else { - // use highest compatible minor version - var version; - for(var i = 1; i < tls.SupportedVersions.length; ++i) { - version = tls.SupportedVersions[i]; - if(version.minor <= msg.version.minor) { - break; - } - } - c.version = {major: version.major, minor: version.minor}; - c.session.version = c.version; - } - - // if a session is set, resume it - if(session !== null) { - // resuming session, expect a ChangeCipherSpec next - c.expect = CCC; - c.session.resuming = true; - - // get new client random - c.session.sp.client_random = msg.random.bytes(); - } else { - // not resuming, expect a Certificate or ClientKeyExchange - c.expect = (c.verifyClient !== false) ? CCE : CKE; - c.session.resuming = false; - - // create new security parameters - tls.createSecurityParameters(c, msg); - } - - // connection now open - c.open = true; - - // queue server hello - tls.queue(c, tls.createRecord(c, { - type: tls.ContentType.handshake, - data: tls.createServerHello(c) - })); - - if(c.session.resuming) { - // queue change cipher spec message - tls.queue(c, tls.createRecord(c, { - type: tls.ContentType.change_cipher_spec, - data: tls.createChangeCipherSpec() - })); - - // create pending state - c.state.pending = tls.createConnectionState(c); - - // change current write state to pending write state - c.state.current.write = c.state.pending.write; - - // queue finished - tls.queue(c, tls.createRecord(c, { - type: tls.ContentType.handshake, - data: tls.createFinished(c) - })); - } else { - // queue server certificate - tls.queue(c, tls.createRecord(c, { - type: tls.ContentType.handshake, - data: tls.createCertificate(c) - })); - - if(!c.fail) { - // queue server key exchange - tls.queue(c, tls.createRecord(c, { - type: tls.ContentType.handshake, - data: tls.createServerKeyExchange(c) - })); - - // request client certificate if set - if(c.verifyClient !== false) { - // queue certificate request - tls.queue(c, tls.createRecord(c, { - type: tls.ContentType.handshake, - data: tls.createCertificateRequest(c) - })); - } - - // queue server hello done - tls.queue(c, tls.createRecord(c, { - type: tls.ContentType.handshake, - data: tls.createServerHelloDone(c) - })); - } - } - - // send records - tls.flush(c); - - // continue - c.process(); -}; - -/** - * Called when a client receives a Certificate record. - * - * When this message will be sent: - * The server must send a certificate whenever the agreed-upon key exchange - * method is not an anonymous one. This message will always immediately - * follow the server hello message. - * - * Meaning of this message: - * The certificate type must be appropriate for the selected cipher suite's - * key exchange algorithm, and is generally an X.509v3 certificate. It must - * contain a key which matches the key exchange method, as follows. Unless - * otherwise specified, the signing algorithm for the certificate must be - * the same as the algorithm for the certificate key. Unless otherwise - * specified, the public key may be of any length. - * - * opaque ASN.1Cert<1..2^24-1>; - * struct { - * ASN.1Cert certificate_list<1..2^24-1>; - * } Certificate; - * - * @param c the connection. - * @param record the record. - * @param length the length of the handshake message. - */ -tls.handleCertificate = function(c, record, length) { - // minimum of 3 bytes in message - if(length < 3) { - return c.error(c, { - message: 'Invalid Certificate message. Message too short.', - send: true, - alert: { - level: tls.Alert.Level.fatal, - description: tls.Alert.Description.illegal_parameter - } - }); - } - - var b = record.fragment; - var msg = { - certificate_list: readVector(b, 3) - }; - - /* The sender's certificate will be first in the list (chain), each - subsequent one that follows will certify the previous one, but root - certificates (self-signed) that specify the certificate authority may - be omitted under the assumption that clients must already possess it. */ - var cert, asn1; - var certs = []; - try { - while(msg.certificate_list.length() > 0) { - // each entry in msg.certificate_list is a vector with 3 len bytes - cert = readVector(msg.certificate_list, 3); - asn1 = forge.asn1.fromDer(cert); - cert = forge.pki.certificateFromAsn1(asn1, true); - certs.push(cert); - } - } catch(ex) { - return c.error(c, { - message: 'Could not parse certificate list.', - cause: ex, - send: true, - alert: { - level: tls.Alert.Level.fatal, - description: tls.Alert.Description.bad_certificate - } - }); - } - - // ensure at least 1 certificate was provided if in client-mode - // or if verifyClient was set to true to require a certificate - // (as opposed to 'optional') - var client = (c.entity === tls.ConnectionEnd.client); - if((client || c.verifyClient === true) && certs.length === 0) { - // error, no certificate - c.error(c, { - message: client ? - 'No server certificate provided.' : - 'No client certificate provided.', - send: true, - alert: { - level: tls.Alert.Level.fatal, - description: tls.Alert.Description.illegal_parameter - } - }); - } else if(certs.length === 0) { - // no certs to verify - // expect a ServerKeyExchange or ClientKeyExchange message next - c.expect = client ? SKE : CKE; - } else { - // save certificate in session - if(client) { - c.session.serverCertificate = certs[0]; - } else { - c.session.clientCertificate = certs[0]; - } - - if(tls.verifyCertificateChain(c, certs)) { - // expect a ServerKeyExchange or ClientKeyExchange message next - c.expect = client ? SKE : CKE; - } - } - - // continue - c.process(); -}; - -/** - * Called when a client receives a ServerKeyExchange record. - * - * When this message will be sent: - * This message will be sent immediately after the server certificate - * message (or the server hello message, if this is an anonymous - * negotiation). - * - * The server key exchange message is sent by the server only when the - * server certificate message (if sent) does not contain enough data to - * allow the client to exchange a premaster secret. - * - * Meaning of this message: - * This message conveys cryptographic information to allow the client to - * communicate the premaster secret: either an RSA public key to encrypt - * the premaster secret with, or a Diffie-Hellman public key with which the - * client can complete a key exchange (with the result being the premaster - * secret.) - * - * enum { - * dhe_dss, dhe_rsa, dh_anon, rsa, dh_dss, dh_rsa - * } KeyExchangeAlgorithm; - * - * struct { - * opaque dh_p<1..2^16-1>; - * opaque dh_g<1..2^16-1>; - * opaque dh_Ys<1..2^16-1>; - * } ServerDHParams; - * - * struct { - * select(KeyExchangeAlgorithm) { - * case dh_anon: - * ServerDHParams params; - * case dhe_dss: - * case dhe_rsa: - * ServerDHParams params; - * digitally-signed struct { - * opaque client_random[32]; - * opaque server_random[32]; - * ServerDHParams params; - * } signed_params; - * case rsa: - * case dh_dss: - * case dh_rsa: - * struct {}; - * }; - * } ServerKeyExchange; - * - * @param c the connection. - * @param record the record. - * @param length the length of the handshake message. - */ -tls.handleServerKeyExchange = function(c, record, length) { - // this implementation only supports RSA, no Diffie-Hellman support - // so any length > 0 is invalid - if(length > 0) { - return c.error(c, { - message: 'Invalid key parameters. Only RSA is supported.', - send: true, - alert: { - level: tls.Alert.Level.fatal, - description: tls.Alert.Description.unsupported_certificate - } - }); - } - - // expect an optional CertificateRequest message next - c.expect = SCR; - - // continue - c.process(); -}; - -/** - * Called when a client receives a ClientKeyExchange record. - * - * @param c the connection. - * @param record the record. - * @param length the length of the handshake message. - */ -tls.handleClientKeyExchange = function(c, record, length) { - // this implementation only supports RSA, no Diffie-Hellman support - // so any length < 48 is invalid - if(length < 48) { - return c.error(c, { - message: 'Invalid key parameters. Only RSA is supported.', - send: true, - alert: { - level: tls.Alert.Level.fatal, - description: tls.Alert.Description.unsupported_certificate - } - }); - } - - var b = record.fragment; - var msg = { - enc_pre_master_secret: readVector(b, 2).getBytes() - }; - - // do rsa decryption - var privateKey = null; - if(c.getPrivateKey) { - try { - privateKey = c.getPrivateKey(c, c.session.serverCertificate); - privateKey = forge.pki.privateKeyFromPem(privateKey); - } catch(ex) { - c.error(c, { - message: 'Could not get private key.', - cause: ex, - send: true, - alert: { - level: tls.Alert.Level.fatal, - description: tls.Alert.Description.internal_error - } - }); - } - } - - if(privateKey === null) { - return c.error(c, { - message: 'No private key set.', - send: true, - alert: { - level: tls.Alert.Level.fatal, - description: tls.Alert.Description.internal_error - } - }); - } - - try { - // decrypt 48-byte pre-master secret - var sp = c.session.sp; - sp.pre_master_secret = privateKey.decrypt(msg.enc_pre_master_secret); - - // ensure client hello version matches first 2 bytes - var version = c.session.clientHelloVersion; - if(version.major !== sp.pre_master_secret.charCodeAt(0) || - version.minor !== sp.pre_master_secret.charCodeAt(1)) { - // error, do not send alert (see BLEI attack below) - throw new Error('TLS version rollback attack detected.'); - } - } catch(ex) { - /* Note: Daniel Bleichenbacher [BLEI] can be used to attack a - TLS server which is using PKCS#1 encoded RSA, so instead of - failing here, we generate 48 random bytes and use that as - the pre-master secret. */ - sp.pre_master_secret = forge.random.getBytes(48); - } - - // expect a CertificateVerify message if a Certificate was received that - // does not have fixed Diffie-Hellman params, otherwise expect - // ChangeCipherSpec - c.expect = CCC; - if(c.session.clientCertificate !== null) { - // only RSA support, so expect CertificateVerify - // TODO: support Diffie-Hellman - c.expect = CCV; - } - - // continue - c.process(); -}; - -/** - * Called when a client receives a CertificateRequest record. - * - * When this message will be sent: - * A non-anonymous server can optionally request a certificate from the - * client, if appropriate for the selected cipher suite. This message, if - * sent, will immediately follow the Server Key Exchange message (if it is - * sent; otherwise, the Server Certificate message). - * - * enum { - * rsa_sign(1), dss_sign(2), rsa_fixed_dh(3), dss_fixed_dh(4), - * rsa_ephemeral_dh_RESERVED(5), dss_ephemeral_dh_RESERVED(6), - * fortezza_dms_RESERVED(20), (255) - * } ClientCertificateType; - * - * opaque DistinguishedName<1..2^16-1>; - * - * struct { - * ClientCertificateType certificate_types<1..2^8-1>; - * SignatureAndHashAlgorithm supported_signature_algorithms<2^16-1>; - * DistinguishedName certificate_authorities<0..2^16-1>; - * } CertificateRequest; - * - * @param c the connection. - * @param record the record. - * @param length the length of the handshake message. - */ -tls.handleCertificateRequest = function(c, record, length) { - // minimum of 3 bytes in message - if(length < 3) { - return c.error(c, { - message: 'Invalid CertificateRequest. Message too short.', - send: true, - alert: { - level: tls.Alert.Level.fatal, - description: tls.Alert.Description.illegal_parameter - } - }); - } - - // TODO: TLS 1.2+ has different format including - // SignatureAndHashAlgorithm after cert types - var b = record.fragment; - var msg = { - certificate_types: readVector(b, 1), - certificate_authorities: readVector(b, 2) - }; - - // save certificate request in session - c.session.certificateRequest = msg; - - // expect a ServerHelloDone message next - c.expect = SHD; - - // continue - c.process(); -}; - -/** - * Called when a server receives a CertificateVerify record. - * - * @param c the connection. - * @param record the record. - * @param length the length of the handshake message. - */ -tls.handleCertificateVerify = function(c, record, length) { - if(length < 2) { - return c.error(c, { - message: 'Invalid CertificateVerify. Message too short.', - send: true, - alert: { - level: tls.Alert.Level.fatal, - description: tls.Alert.Description.illegal_parameter - } - }); - } - - // rewind to get full bytes for message so it can be manually - // digested below (special case for CertificateVerify messages because - // they must be digested *after* handling as opposed to all others) - var b = record.fragment; - b.read -= 4; - var msgBytes = b.bytes(); - b.read += 4; - - var msg = { - signature: readVector(b, 2).getBytes() - }; - - // TODO: add support for DSA - - // generate data to verify - var verify = forge.util.createBuffer(); - verify.putBuffer(c.session.md5.digest()); - verify.putBuffer(c.session.sha1.digest()); - verify = verify.getBytes(); - - try { - var cert = c.session.clientCertificate; - /*b = forge.pki.rsa.decrypt( - msg.signature, cert.publicKey, true, verify.length); - if(b !== verify) {*/ - if(!cert.publicKey.verify(verify, msg.signature, 'NONE')) { - throw new Error('CertificateVerify signature does not match.'); - } - - // digest message now that it has been handled - c.session.md5.update(msgBytes); - c.session.sha1.update(msgBytes); - } catch(ex) { - return c.error(c, { - message: 'Bad signature in CertificateVerify.', - send: true, - alert: { - level: tls.Alert.Level.fatal, - description: tls.Alert.Description.handshake_failure - } - }); - } - - // expect ChangeCipherSpec - c.expect = CCC; - - // continue - c.process(); -}; - -/** - * Called when a client receives a ServerHelloDone record. - * - * When this message will be sent: - * The server hello done message is sent by the server to indicate the end - * of the server hello and associated messages. After sending this message - * the server will wait for a client response. - * - * Meaning of this message: - * This message means that the server is done sending messages to support - * the key exchange, and the client can proceed with its phase of the key - * exchange. - * - * Upon receipt of the server hello done message the client should verify - * that the server provided a valid certificate if required and check that - * the server hello parameters are acceptable. - * - * struct {} ServerHelloDone; - * - * @param c the connection. - * @param record the record. - * @param length the length of the handshake message. - */ -tls.handleServerHelloDone = function(c, record, length) { - // len must be 0 bytes - if(length > 0) { - return c.error(c, { - message: 'Invalid ServerHelloDone message. Invalid length.', - send: true, - alert: { - level: tls.Alert.Level.fatal, - description: tls.Alert.Description.record_overflow - } - }); - } - - if(c.serverCertificate === null) { - // no server certificate was provided - var error = { - message: 'No server certificate provided. Not enough security.', - send: true, - alert: { - level: tls.Alert.Level.fatal, - description: tls.Alert.Description.insufficient_security - } - }; - - // call application callback - var depth = 0; - var ret = c.verify(c, error.alert.description, depth, []); - if(ret !== true) { - // check for custom alert info - if(ret || ret === 0) { - // set custom message and alert description - if(typeof ret === 'object' && !forge.util.isArray(ret)) { - if(ret.message) { - error.message = ret.message; - } - if(ret.alert) { - error.alert.description = ret.alert; - } - } else if(typeof ret === 'number') { - // set custom alert description - error.alert.description = ret; - } - } - - // send error - return c.error(c, error); - } - } - - // create client certificate message if requested - if(c.session.certificateRequest !== null) { - record = tls.createRecord(c, { - type: tls.ContentType.handshake, - data: tls.createCertificate(c) - }); - tls.queue(c, record); - } - - // create client key exchange message - record = tls.createRecord(c, { - type: tls.ContentType.handshake, - data: tls.createClientKeyExchange(c) - }); - tls.queue(c, record); - - // expect no messages until the following callback has been called - c.expect = SER; - - // create callback to handle client signature (for client-certs) - var callback = function(c, signature) { - if(c.session.certificateRequest !== null && - c.session.clientCertificate !== null) { - // create certificate verify message - tls.queue(c, tls.createRecord(c, { - type: tls.ContentType.handshake, - data: tls.createCertificateVerify(c, signature) - })); - } - - // create change cipher spec message - tls.queue(c, tls.createRecord(c, { - type: tls.ContentType.change_cipher_spec, - data: tls.createChangeCipherSpec() - })); - - // create pending state - c.state.pending = tls.createConnectionState(c); - - // change current write state to pending write state - c.state.current.write = c.state.pending.write; - - // create finished message - tls.queue(c, tls.createRecord(c, { - type: tls.ContentType.handshake, - data: tls.createFinished(c) - })); - - // expect a server ChangeCipherSpec message next - c.expect = SCC; - - // send records - tls.flush(c); - - // continue - c.process(); - }; - - // if there is no certificate request or no client certificate, do - // callback immediately - if(c.session.certificateRequest === null || - c.session.clientCertificate === null) { - return callback(c, null); - } - - // otherwise get the client signature - tls.getClientSignature(c, callback); -}; - -/** - * Called when a ChangeCipherSpec record is received. - * - * @param c the connection. - * @param record the record. - */ -tls.handleChangeCipherSpec = function(c, record) { - if(record.fragment.getByte() !== 0x01) { - return c.error(c, { - message: 'Invalid ChangeCipherSpec message received.', - send: true, - alert: { - level: tls.Alert.Level.fatal, - description: tls.Alert.Description.illegal_parameter - } - }); - } - - // create pending state if: - // 1. Resuming session in client mode OR - // 2. NOT resuming session in server mode - var client = (c.entity === tls.ConnectionEnd.client); - if((c.session.resuming && client) || (!c.session.resuming && !client)) { - c.state.pending = tls.createConnectionState(c); - } - - // change current read state to pending read state - c.state.current.read = c.state.pending.read; - - // clear pending state if: - // 1. NOT resuming session in client mode OR - // 2. resuming a session in server mode - if((!c.session.resuming && client) || (c.session.resuming && !client)) { - c.state.pending = null; - } - - // expect a Finished record next - c.expect = client ? SFI : CFI; - - // continue - c.process(); -}; - -/** - * Called when a Finished record is received. - * - * When this message will be sent: - * A finished message is always sent immediately after a change - * cipher spec message to verify that the key exchange and - * authentication processes were successful. It is essential that a - * change cipher spec message be received between the other - * handshake messages and the Finished message. - * - * Meaning of this message: - * The finished message is the first protected with the just- - * negotiated algorithms, keys, and secrets. Recipients of finished - * messages must verify that the contents are correct. Once a side - * has sent its Finished message and received and validated the - * Finished message from its peer, it may begin to send and receive - * application data over the connection. - * - * struct { - * opaque verify_data[verify_data_length]; - * } Finished; - * - * verify_data - * PRF(master_secret, finished_label, Hash(handshake_messages)) - * [0..verify_data_length-1]; - * - * finished_label - * For Finished messages sent by the client, the string - * "client finished". For Finished messages sent by the server, the - * string "server finished". - * - * verify_data_length depends on the cipher suite. If it is not specified - * by the cipher suite, then it is 12. Versions of TLS < 1.2 always used - * 12 bytes. - * - * @param c the connection. - * @param record the record. - * @param length the length of the handshake message. - */ -tls.handleFinished = function(c, record, length) { - // rewind to get full bytes for message so it can be manually - // digested below (special case for Finished messages because they - // must be digested *after* handling as opposed to all others) - var b = record.fragment; - b.read -= 4; - var msgBytes = b.bytes(); - b.read += 4; - - // message contains only verify_data - var vd = record.fragment.getBytes(); - - // ensure verify data is correct - b = forge.util.createBuffer(); - b.putBuffer(c.session.md5.digest()); - b.putBuffer(c.session.sha1.digest()); - - // set label based on entity type - var client = (c.entity === tls.ConnectionEnd.client); - var label = client ? 'server finished' : 'client finished'; - - // TODO: determine prf function and verify length for TLS 1.2 - var sp = c.session.sp; - var vdl = 12; - var prf = prf_TLS1; - b = prf(sp.master_secret, label, b.getBytes(), vdl); - if(b.getBytes() !== vd) { - return c.error(c, { - message: 'Invalid verify_data in Finished message.', - send: true, - alert: { - level: tls.Alert.Level.fatal, - description: tls.Alert.Description.decrypt_error - } - }); - } - - // digest finished message now that it has been handled - c.session.md5.update(msgBytes); - c.session.sha1.update(msgBytes); - - // resuming session as client or NOT resuming session as server - if((c.session.resuming && client) || (!c.session.resuming && !client)) { - // create change cipher spec message - tls.queue(c, tls.createRecord(c, { - type: tls.ContentType.change_cipher_spec, - data: tls.createChangeCipherSpec() - })); - - // change current write state to pending write state, clear pending - c.state.current.write = c.state.pending.write; - c.state.pending = null; - - // create finished message - tls.queue(c, tls.createRecord(c, { - type: tls.ContentType.handshake, - data: tls.createFinished(c) - })); - } - - // expect application data next - c.expect = client ? SAD : CAD; - - // handshake complete - c.handshaking = false; - ++c.handshakes; - - // save access to peer certificate - c.peerCertificate = client ? - c.session.serverCertificate : c.session.clientCertificate; - - // send records - tls.flush(c); - - // now connected - c.isConnected = true; - c.connected(c); - - // continue - c.process(); -}; - -/** - * Called when an Alert record is received. - * - * @param c the connection. - * @param record the record. - */ -tls.handleAlert = function(c, record) { - // read alert - var b = record.fragment; - var alert = { - level: b.getByte(), - description: b.getByte() - }; - - // TODO: consider using a table? - // get appropriate message - var msg; - switch(alert.description) { - case tls.Alert.Description.close_notify: - msg = 'Connection closed.'; - break; - case tls.Alert.Description.unexpected_message: - msg = 'Unexpected message.'; - break; - case tls.Alert.Description.bad_record_mac: - msg = 'Bad record MAC.'; - break; - case tls.Alert.Description.decryption_failed: - msg = 'Decryption failed.'; - break; - case tls.Alert.Description.record_overflow: - msg = 'Record overflow.'; - break; - case tls.Alert.Description.decompression_failure: - msg = 'Decompression failed.'; - break; - case tls.Alert.Description.handshake_failure: - msg = 'Handshake failure.'; - break; - case tls.Alert.Description.bad_certificate: - msg = 'Bad certificate.'; - break; - case tls.Alert.Description.unsupported_certificate: - msg = 'Unsupported certificate.'; - break; - case tls.Alert.Description.certificate_revoked: - msg = 'Certificate revoked.'; - break; - case tls.Alert.Description.certificate_expired: - msg = 'Certificate expired.'; - break; - case tls.Alert.Description.certificate_unknown: - msg = 'Certificate unknown.'; - break; - case tls.Alert.Description.illegal_parameter: - msg = 'Illegal parameter.'; - break; - case tls.Alert.Description.unknown_ca: - msg = 'Unknown certificate authority.'; - break; - case tls.Alert.Description.access_denied: - msg = 'Access denied.'; - break; - case tls.Alert.Description.decode_error: - msg = 'Decode error.'; - break; - case tls.Alert.Description.decrypt_error: - msg = 'Decrypt error.'; - break; - case tls.Alert.Description.export_restriction: - msg = 'Export restriction.'; - break; - case tls.Alert.Description.protocol_version: - msg = 'Unsupported protocol version.'; - break; - case tls.Alert.Description.insufficient_security: - msg = 'Insufficient security.'; - break; - case tls.Alert.Description.internal_error: - msg = 'Internal error.'; - break; - case tls.Alert.Description.user_canceled: - msg = 'User canceled.'; - break; - case tls.Alert.Description.no_renegotiation: - msg = 'Renegotiation not supported.'; - break; - default: - msg = 'Unknown error.'; - break; - } - - // close connection on close_notify, not an error - if(alert.description === tls.Alert.Description.close_notify) { - return c.close(); - } - - // call error handler - c.error(c, { - message: msg, - send: false, - // origin is the opposite end - origin: (c.entity === tls.ConnectionEnd.client) ? 'server' : 'client', - alert: alert - }); - - // continue - c.process(); -}; - -/** - * Called when a Handshake record is received. - * - * @param c the connection. - * @param record the record. - */ -tls.handleHandshake = function(c, record) { - // get the handshake type and message length - var b = record.fragment; - var type = b.getByte(); - var length = b.getInt24(); - - // see if the record fragment doesn't yet contain the full message - if(length > b.length()) { - // cache the record, clear its fragment, and reset the buffer read - // pointer before the type and length were read - c.fragmented = record; - record.fragment = forge.util.createBuffer(); - b.read -= 4; - - // continue - return c.process(); - } - - // full message now available, clear cache, reset read pointer to - // before type and length - c.fragmented = null; - b.read -= 4; - - // save the handshake bytes for digestion after handler is found - // (include type and length of handshake msg) - var bytes = b.bytes(length + 4); - - // restore read pointer - b.read += 4; - - // handle expected message - if(type in hsTable[c.entity][c.expect]) { - // initialize server session - if(c.entity === tls.ConnectionEnd.server && !c.open && !c.fail) { - c.handshaking = true; - c.session = { - version: null, - extensions: { - server_name: { - serverNameList: [] - } - }, - cipherSuite: null, - compressionMethod: null, - serverCertificate: null, - clientCertificate: null, - md5: forge.md.md5.create(), - sha1: forge.md.sha1.create() - }; - } - - /* Update handshake messages digest. Finished and CertificateVerify - messages are not digested here. They can't be digested as part of - the verify_data that they contain. These messages are manually - digested in their handlers. HelloRequest messages are simply never - included in the handshake message digest according to spec. */ - if(type !== tls.HandshakeType.hello_request && - type !== tls.HandshakeType.certificate_verify && - type !== tls.HandshakeType.finished) { - c.session.md5.update(bytes); - c.session.sha1.update(bytes); - } - - // handle specific handshake type record - hsTable[c.entity][c.expect][type](c, record, length); - } else { - // unexpected record - tls.handleUnexpected(c, record); - } -}; - -/** - * Called when an ApplicationData record is received. - * - * @param c the connection. - * @param record the record. - */ -tls.handleApplicationData = function(c, record) { - // buffer data, notify that its ready - c.data.putBuffer(record.fragment); - c.dataReady(c); - - // continue - c.process(); -}; - -/** - * Called when a Heartbeat record is received. - * - * @param c the connection. - * @param record the record. - */ -tls.handleHeartbeat = function(c, record) { - // get the heartbeat type and payload - var b = record.fragment; - var type = b.getByte(); - var length = b.getInt16(); - var payload = b.getBytes(length); - - if(type === tls.HeartbeatMessageType.heartbeat_request) { - // discard request during handshake or if length is too large - if(c.handshaking || length > payload.length) { - // continue - return c.process(); - } - // retransmit payload - tls.queue(c, tls.createRecord(c, { - type: tls.ContentType.heartbeat, - data: tls.createHeartbeat( - tls.HeartbeatMessageType.heartbeat_response, payload) - })); - tls.flush(c); - } else if(type === tls.HeartbeatMessageType.heartbeat_response) { - // check payload against expected payload, discard heartbeat if no match - if(payload !== c.expectedHeartbeatPayload) { - // continue - return c.process(); - } - - // notify that a valid heartbeat was received - if(c.heartbeatReceived) { - c.heartbeatReceived(c, forge.util.createBuffer(payload)); - } - } - - // continue - c.process(); -}; - -/** - * The transistional state tables for receiving TLS records. It maps the - * current TLS engine state and a received record to a function to handle the - * record and update the state. - * - * For instance, if the current state is SHE, then the TLS engine is expecting - * a ServerHello record. Once a record is received, the handler function is - * looked up using the state SHE and the record's content type. - * - * The resulting function will either be an error handler or a record handler. - * The function will take whatever action is appropriate and update the state - * for the next record. - * - * The states are all based on possible server record types. Note that the - * client will never specifically expect to receive a HelloRequest or an alert - * from the server so there is no state that reflects this. These messages may - * occur at any time. - * - * There are two tables for mapping states because there is a second tier of - * types for handshake messages. Once a record with a content type of handshake - * is received, the handshake record handler will look up the handshake type in - * the secondary map to get its appropriate handler. - * - * Valid message orders are as follows: - * - * =======================FULL HANDSHAKE====================== - * Client Server - * - * ClientHello --------> - * ServerHello - * Certificate* - * ServerKeyExchange* - * CertificateRequest* - * <-------- ServerHelloDone - * Certificate* - * ClientKeyExchange - * CertificateVerify* - * [ChangeCipherSpec] - * Finished --------> - * [ChangeCipherSpec] - * <-------- Finished - * Application Data <-------> Application Data - * - * =====================SESSION RESUMPTION===================== - * Client Server - * - * ClientHello --------> - * ServerHello - * [ChangeCipherSpec] - * <-------- Finished - * [ChangeCipherSpec] - * Finished --------> - * Application Data <-------> Application Data - */ -// client expect states (indicate which records are expected to be received) -var SHE = 0; // rcv server hello -var SCE = 1; // rcv server certificate -var SKE = 2; // rcv server key exchange -var SCR = 3; // rcv certificate request -var SHD = 4; // rcv server hello done -var SCC = 5; // rcv change cipher spec -var SFI = 6; // rcv finished -var SAD = 7; // rcv application data -var SER = 8; // not expecting any messages at this point - -// server expect states -var CHE = 0; // rcv client hello -var CCE = 1; // rcv client certificate -var CKE = 2; // rcv client key exchange -var CCV = 3; // rcv certificate verify -var CCC = 4; // rcv change cipher spec -var CFI = 5; // rcv finished -var CAD = 6; // rcv application data -var CER = 7; // not expecting any messages at this point - -// map client current expect state and content type to function -var __ = tls.handleUnexpected; -var R0 = tls.handleChangeCipherSpec; -var R1 = tls.handleAlert; -var R2 = tls.handleHandshake; -var R3 = tls.handleApplicationData; -var R4 = tls.handleHeartbeat; -var ctTable = []; -ctTable[tls.ConnectionEnd.client] = [ -// CC,AL,HS,AD,HB -/*SHE*/[__,R1,R2,__,R4], -/*SCE*/[__,R1,R2,__,R4], -/*SKE*/[__,R1,R2,__,R4], -/*SCR*/[__,R1,R2,__,R4], -/*SHD*/[__,R1,R2,__,R4], -/*SCC*/[R0,R1,__,__,R4], -/*SFI*/[__,R1,R2,__,R4], -/*SAD*/[__,R1,R2,R3,R4], -/*SER*/[__,R1,R2,__,R4] -]; - -// map server current expect state and content type to function -ctTable[tls.ConnectionEnd.server] = [ -// CC,AL,HS,AD -/*CHE*/[__,R1,R2,__,R4], -/*CCE*/[__,R1,R2,__,R4], -/*CKE*/[__,R1,R2,__,R4], -/*CCV*/[__,R1,R2,__,R4], -/*CCC*/[R0,R1,__,__,R4], -/*CFI*/[__,R1,R2,__,R4], -/*CAD*/[__,R1,R2,R3,R4], -/*CER*/[__,R1,R2,__,R4] -]; - -// map client current expect state and handshake type to function -var H0 = tls.handleHelloRequest; -var H1 = tls.handleServerHello; -var H2 = tls.handleCertificate; -var H3 = tls.handleServerKeyExchange; -var H4 = tls.handleCertificateRequest; -var H5 = tls.handleServerHelloDone; -var H6 = tls.handleFinished; -var hsTable = []; -hsTable[tls.ConnectionEnd.client] = [ -// HR,01,SH,03,04,05,06,07,08,09,10,SC,SK,CR,HD,15,CK,17,18,19,FI -/*SHE*/[__,__,H1,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__], -/*SCE*/[H0,__,__,__,__,__,__,__,__,__,__,H2,H3,H4,H5,__,__,__,__,__,__], -/*SKE*/[H0,__,__,__,__,__,__,__,__,__,__,__,H3,H4,H5,__,__,__,__,__,__], -/*SCR*/[H0,__,__,__,__,__,__,__,__,__,__,__,__,H4,H5,__,__,__,__,__,__], -/*SHD*/[H0,__,__,__,__,__,__,__,__,__,__,__,__,__,H5,__,__,__,__,__,__], -/*SCC*/[H0,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__], -/*SFI*/[H0,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,H6], -/*SAD*/[H0,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__], -/*SER*/[H0,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__] -]; - -// map server current expect state and handshake type to function -// Note: CAD[CH] does not map to FB because renegotation is prohibited -var H7 = tls.handleClientHello; -var H8 = tls.handleClientKeyExchange; -var H9 = tls.handleCertificateVerify; -hsTable[tls.ConnectionEnd.server] = [ -// 01,CH,02,03,04,05,06,07,08,09,10,CC,12,13,14,CV,CK,17,18,19,FI -/*CHE*/[__,H7,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__], -/*CCE*/[__,__,__,__,__,__,__,__,__,__,__,H2,__,__,__,__,__,__,__,__,__], -/*CKE*/[__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,H8,__,__,__,__], -/*CCV*/[__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,H9,__,__,__,__,__], -/*CCC*/[__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__], -/*CFI*/[__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,H6], -/*CAD*/[__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__], -/*CER*/[__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__] -]; - -/** - * Generates the master_secret and keys using the given security parameters. - * - * The security parameters for a TLS connection state are defined as such: - * - * struct { - * ConnectionEnd entity; - * PRFAlgorithm prf_algorithm; - * BulkCipherAlgorithm bulk_cipher_algorithm; - * CipherType cipher_type; - * uint8 enc_key_length; - * uint8 block_length; - * uint8 fixed_iv_length; - * uint8 record_iv_length; - * MACAlgorithm mac_algorithm; - * uint8 mac_length; - * uint8 mac_key_length; - * CompressionMethod compression_algorithm; - * opaque master_secret[48]; - * opaque client_random[32]; - * opaque server_random[32]; - * } SecurityParameters; - * - * Note that this definition is from TLS 1.2. In TLS 1.0 some of these - * parameters are ignored because, for instance, the PRFAlgorithm is a - * builtin-fixed algorithm combining iterations of MD5 and SHA-1 in TLS 1.0. - * - * The Record Protocol requires an algorithm to generate keys required by the - * current connection state. - * - * The master secret is expanded into a sequence of secure bytes, which is then - * split to a client write MAC key, a server write MAC key, a client write - * encryption key, and a server write encryption key. In TLS 1.0 a client write - * IV and server write IV are also generated. Each of these is generated from - * the byte sequence in that order. Unused values are empty. In TLS 1.2, some - * AEAD ciphers may additionally require a client write IV and a server write - * IV (see Section 6.2.3.3). - * - * When keys, MAC keys, and IVs are generated, the master secret is used as an - * entropy source. - * - * To generate the key material, compute: - * - * master_secret = PRF(pre_master_secret, "master secret", - * ClientHello.random + ServerHello.random) - * - * key_block = PRF(SecurityParameters.master_secret, - * "key expansion", - * SecurityParameters.server_random + - * SecurityParameters.client_random); - * - * until enough output has been generated. Then, the key_block is - * partitioned as follows: - * - * client_write_MAC_key[SecurityParameters.mac_key_length] - * server_write_MAC_key[SecurityParameters.mac_key_length] - * client_write_key[SecurityParameters.enc_key_length] - * server_write_key[SecurityParameters.enc_key_length] - * client_write_IV[SecurityParameters.fixed_iv_length] - * server_write_IV[SecurityParameters.fixed_iv_length] - * - * In TLS 1.2, the client_write_IV and server_write_IV are only generated for - * implicit nonce techniques as described in Section 3.2.1 of [AEAD]. This - * implementation uses TLS 1.0 so IVs are generated. - * - * Implementation note: The currently defined cipher suite which requires the - * most material is AES_256_CBC_SHA256. It requires 2 x 32 byte keys and 2 x 32 - * byte MAC keys, for a total 128 bytes of key material. In TLS 1.0 it also - * requires 2 x 16 byte IVs, so it actually takes 160 bytes of key material. - * - * @param c the connection. - * @param sp the security parameters to use. - * - * @return the security keys. - */ -tls.generateKeys = function(c, sp) { - // TLS_RSA_WITH_AES_128_CBC_SHA (required to be compliant with TLS 1.2) & - // TLS_RSA_WITH_AES_256_CBC_SHA are the only cipher suites implemented - // at present - - // TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA is required to be compliant with - // TLS 1.0 but we don't care right now because AES is better and we have - // an implementation for it - - // TODO: TLS 1.2 implementation - /* - // determine the PRF - var prf; - switch(sp.prf_algorithm) { - case tls.PRFAlgorithm.tls_prf_sha256: - prf = prf_sha256; - break; - default: - // should never happen - throw new Error('Invalid PRF'); - } - */ - - // TLS 1.0/1.1 implementation - var prf = prf_TLS1; - - // concatenate server and client random - var random = sp.client_random + sp.server_random; - - // only create master secret if session is new - if(!c.session.resuming) { - // create master secret, clean up pre-master secret - sp.master_secret = prf( - sp.pre_master_secret, 'master secret', random, 48).bytes(); - sp.pre_master_secret = null; - } - - // generate the amount of key material needed - random = sp.server_random + sp.client_random; - var length = 2 * sp.mac_key_length + 2 * sp.enc_key_length; - - // include IV for TLS/1.0 - var tls10 = (c.version.major === tls.Versions.TLS_1_0.major && - c.version.minor === tls.Versions.TLS_1_0.minor); - if(tls10) { - length += 2 * sp.fixed_iv_length; - } - var km = prf(sp.master_secret, 'key expansion', random, length); - - // split the key material into the MAC and encryption keys - var rval = { - client_write_MAC_key: km.getBytes(sp.mac_key_length), - server_write_MAC_key: km.getBytes(sp.mac_key_length), - client_write_key: km.getBytes(sp.enc_key_length), - server_write_key: km.getBytes(sp.enc_key_length) - }; - - // include TLS 1.0 IVs - if(tls10) { - rval.client_write_IV = km.getBytes(sp.fixed_iv_length); - rval.server_write_IV = km.getBytes(sp.fixed_iv_length); - } - - return rval; -}; - -/** - * Creates a new initialized TLS connection state. A connection state has - * a read mode and a write mode. - * - * compression state: - * The current state of the compression algorithm. - * - * cipher state: - * The current state of the encryption algorithm. This will consist of the - * scheduled key for that connection. For stream ciphers, this will also - * contain whatever state information is necessary to allow the stream to - * continue to encrypt or decrypt data. - * - * MAC key: - * The MAC key for the connection. - * - * sequence number: - * Each connection state contains a sequence number, which is maintained - * separately for read and write states. The sequence number MUST be set to - * zero whenever a connection state is made the active state. Sequence - * numbers are of type uint64 and may not exceed 2^64-1. Sequence numbers do - * not wrap. If a TLS implementation would need to wrap a sequence number, - * it must renegotiate instead. A sequence number is incremented after each - * record: specifically, the first record transmitted under a particular - * connection state MUST use sequence number 0. - * - * @param c the connection. - * - * @return the new initialized TLS connection state. - */ -tls.createConnectionState = function(c) { - var client = (c.entity === tls.ConnectionEnd.client); - - var createMode = function() { - var mode = { - // two 32-bit numbers, first is most significant - sequenceNumber: [0, 0], - macKey: null, - macLength: 0, - macFunction: null, - cipherState: null, - cipherFunction: function(record) {return true;}, - compressionState: null, - compressFunction: function(record) {return true;}, - updateSequenceNumber: function() { - if(mode.sequenceNumber[1] === 0xFFFFFFFF) { - mode.sequenceNumber[1] = 0; - ++mode.sequenceNumber[0]; - } else { - ++mode.sequenceNumber[1]; - } - } - }; - return mode; - }; - var state = { - read: createMode(), - write: createMode() - }; - - // update function in read mode will decrypt then decompress a record - state.read.update = function(c, record) { - if(!state.read.cipherFunction(record, state.read)) { - c.error(c, { - message: 'Could not decrypt record or bad MAC.', - send: true, - alert: { - level: tls.Alert.Level.fatal, - // doesn't matter if decryption failed or MAC was - // invalid, return the same error so as not to reveal - // which one occurred - description: tls.Alert.Description.bad_record_mac - } - }); - } else if(!state.read.compressFunction(c, record, state.read)) { - c.error(c, { - message: 'Could not decompress record.', - send: true, - alert: { - level: tls.Alert.Level.fatal, - description: tls.Alert.Description.decompression_failure - } - }); - } - return !c.fail; - }; - - // update function in write mode will compress then encrypt a record - state.write.update = function(c, record) { - if(!state.write.compressFunction(c, record, state.write)) { - // error, but do not send alert since it would require - // compression as well - c.error(c, { - message: 'Could not compress record.', - send: false, - alert: { - level: tls.Alert.Level.fatal, - description: tls.Alert.Description.internal_error - } - }); - } else if(!state.write.cipherFunction(record, state.write)) { - // error, but do not send alert since it would require - // encryption as well - c.error(c, { - message: 'Could not encrypt record.', - send: false, - alert: { - level: tls.Alert.Level.fatal, - description: tls.Alert.Description.internal_error - } - }); - } - return !c.fail; - }; - - // handle security parameters - if(c.session) { - var sp = c.session.sp; - c.session.cipherSuite.initSecurityParameters(sp); - - // generate keys - sp.keys = tls.generateKeys(c, sp); - state.read.macKey = client ? - sp.keys.server_write_MAC_key : sp.keys.client_write_MAC_key; - state.write.macKey = client ? - sp.keys.client_write_MAC_key : sp.keys.server_write_MAC_key; - - // cipher suite setup - c.session.cipherSuite.initConnectionState(state, c, sp); - - // compression setup - switch(sp.compression_algorithm) { - case tls.CompressionMethod.none: - break; - case tls.CompressionMethod.deflate: - state.read.compressFunction = inflate; - state.write.compressFunction = deflate; - break; - default: - throw new Error('Unsupported compression algorithm.'); - } - } - - return state; -}; - -/** - * Creates a Random structure. - * - * struct { - * uint32 gmt_unix_time; - * opaque random_bytes[28]; - * } Random; - * - * gmt_unix_time: - * The current time and date in standard UNIX 32-bit format (seconds since - * the midnight starting Jan 1, 1970, UTC, ignoring leap seconds) according - * to the sender's internal clock. Clocks are not required to be set - * correctly by the basic TLS protocol; higher-level or application - * protocols may define additional requirements. Note that, for historical - * reasons, the data element is named using GMT, the predecessor of the - * current worldwide time base, UTC. - * random_bytes: - * 28 bytes generated by a secure random number generator. - * - * @return the Random structure as a byte array. - */ -tls.createRandom = function() { - // get UTC milliseconds - var d = new Date(); - var utc = +d + d.getTimezoneOffset() * 60000; - var rval = forge.util.createBuffer(); - rval.putInt32(utc); - rval.putBytes(forge.random.getBytes(28)); - return rval; -}; - -/** - * Creates a TLS record with the given type and data. - * - * @param c the connection. - * @param options: - * type: the record type. - * data: the plain text data in a byte buffer. - * - * @return the created record. - */ -tls.createRecord = function(c, options) { - if(!options.data) { - return null; - } - var record = { - type: options.type, - version: { - major: c.version.major, - minor: c.version.minor - }, - length: options.data.length(), - fragment: options.data - }; - return record; -}; - -/** - * Creates a TLS alert record. - * - * @param c the connection. - * @param alert: - * level: the TLS alert level. - * description: the TLS alert description. - * - * @return the created alert record. - */ -tls.createAlert = function(c, alert) { - var b = forge.util.createBuffer(); - b.putByte(alert.level); - b.putByte(alert.description); - return tls.createRecord(c, { - type: tls.ContentType.alert, - data: b - }); -}; - -/* The structure of a TLS handshake message. - * - * struct { - * HandshakeType msg_type; // handshake type - * uint24 length; // bytes in message - * select(HandshakeType) { - * case hello_request: HelloRequest; - * case client_hello: ClientHello; - * case server_hello: ServerHello; - * case certificate: Certificate; - * case server_key_exchange: ServerKeyExchange; - * case certificate_request: CertificateRequest; - * case server_hello_done: ServerHelloDone; - * case certificate_verify: CertificateVerify; - * case client_key_exchange: ClientKeyExchange; - * case finished: Finished; - * } body; - * } Handshake; - */ - -/** - * Creates a ClientHello message. - * - * opaque SessionID<0..32>; - * enum { null(0), deflate(1), (255) } CompressionMethod; - * uint8 CipherSuite[2]; - * - * struct { - * ProtocolVersion client_version; - * Random random; - * SessionID session_id; - * CipherSuite cipher_suites<2..2^16-2>; - * CompressionMethod compression_methods<1..2^8-1>; - * select(extensions_present) { - * case false: - * struct {}; - * case true: - * Extension extensions<0..2^16-1>; - * }; - * } ClientHello; - * - * The extension format for extended client hellos and server hellos is: - * - * struct { - * ExtensionType extension_type; - * opaque extension_data<0..2^16-1>; - * } Extension; - * - * Here: - * - * - "extension_type" identifies the particular extension type. - * - "extension_data" contains information specific to the particular - * extension type. - * - * The extension types defined in this document are: - * - * enum { - * server_name(0), max_fragment_length(1), - * client_certificate_url(2), trusted_ca_keys(3), - * truncated_hmac(4), status_request(5), (65535) - * } ExtensionType; - * - * @param c the connection. - * - * @return the ClientHello byte buffer. - */ -tls.createClientHello = function(c) { - // save hello version - c.session.clientHelloVersion = { - major: c.version.major, - minor: c.version.minor - }; - - // create supported cipher suites - var cipherSuites = forge.util.createBuffer(); - for(var i = 0; i < c.cipherSuites.length; ++i) { - var cs = c.cipherSuites[i]; - cipherSuites.putByte(cs.id[0]); - cipherSuites.putByte(cs.id[1]); - } - var cSuites = cipherSuites.length(); - - // create supported compression methods, null always supported, but - // also support deflate if connection has inflate and deflate methods - var compressionMethods = forge.util.createBuffer(); - compressionMethods.putByte(tls.CompressionMethod.none); - // FIXME: deflate support disabled until issues with raw deflate data - // without zlib headers are resolved - /* - if(c.inflate !== null && c.deflate !== null) { - compressionMethods.putByte(tls.CompressionMethod.deflate); - } - */ - var cMethods = compressionMethods.length(); - - // create TLS SNI (server name indication) extension if virtual host - // has been specified, see RFC 3546 - var extensions = forge.util.createBuffer(); - if(c.virtualHost) { - // create extension struct - var ext = forge.util.createBuffer(); - ext.putByte(0x00); // type server_name (ExtensionType is 2 bytes) - ext.putByte(0x00); - - /* In order to provide the server name, clients MAY include an - * extension of type "server_name" in the (extended) client hello. - * The "extension_data" field of this extension SHALL contain - * "ServerNameList" where: - * - * struct { - * NameType name_type; - * select(name_type) { - * case host_name: HostName; - * } name; - * } ServerName; - * - * enum { - * host_name(0), (255) - * } NameType; - * - * opaque HostName<1..2^16-1>; - * - * struct { - * ServerName server_name_list<1..2^16-1> - * } ServerNameList; - */ - var serverName = forge.util.createBuffer(); - serverName.putByte(0x00); // type host_name - writeVector(serverName, 2, forge.util.createBuffer(c.virtualHost)); - - // ServerNameList is in extension_data - var snList = forge.util.createBuffer(); - writeVector(snList, 2, serverName); - writeVector(ext, 2, snList); - extensions.putBuffer(ext); - } - var extLength = extensions.length(); - if(extLength > 0) { - // add extension vector length - extLength += 2; - } - - // determine length of the handshake message - // cipher suites and compression methods size will need to be - // updated if more get added to the list - var sessionId = c.session.id; - var length = - sessionId.length + 1 + // session ID vector - 2 + // version (major + minor) - 4 + 28 + // random time and random bytes - 2 + cSuites + // cipher suites vector - 1 + cMethods + // compression methods vector - extLength; // extensions vector - - // build record fragment - var rval = forge.util.createBuffer(); - rval.putByte(tls.HandshakeType.client_hello); - rval.putInt24(length); // handshake length - rval.putByte(c.version.major); // major version - rval.putByte(c.version.minor); // minor version - rval.putBytes(c.session.sp.client_random); // random time + bytes - writeVector(rval, 1, forge.util.createBuffer(sessionId)); - writeVector(rval, 2, cipherSuites); - writeVector(rval, 1, compressionMethods); - if(extLength > 0) { - writeVector(rval, 2, extensions); - } - return rval; -}; - -/** - * Creates a ServerHello message. - * - * @param c the connection. - * - * @return the ServerHello byte buffer. - */ -tls.createServerHello = function(c) { - // determine length of the handshake message - var sessionId = c.session.id; - var length = - sessionId.length + 1 + // session ID vector - 2 + // version (major + minor) - 4 + 28 + // random time and random bytes - 2 + // chosen cipher suite - 1; // chosen compression method - - // build record fragment - var rval = forge.util.createBuffer(); - rval.putByte(tls.HandshakeType.server_hello); - rval.putInt24(length); // handshake length - rval.putByte(c.version.major); // major version - rval.putByte(c.version.minor); // minor version - rval.putBytes(c.session.sp.server_random); // random time + bytes - writeVector(rval, 1, forge.util.createBuffer(sessionId)); - rval.putByte(c.session.cipherSuite.id[0]); - rval.putByte(c.session.cipherSuite.id[1]); - rval.putByte(c.session.compressionMethod); - return rval; -}; - -/** - * Creates a Certificate message. - * - * When this message will be sent: - * This is the first message the client can send after receiving a server - * hello done message and the first message the server can send after - * sending a ServerHello. This client message is only sent if the server - * requests a certificate. If no suitable certificate is available, the - * client should send a certificate message containing no certificates. If - * client authentication is required by the server for the handshake to - * continue, it may respond with a fatal handshake failure alert. - * - * opaque ASN.1Cert<1..2^24-1>; - * - * struct { - * ASN.1Cert certificate_list<0..2^24-1>; - * } Certificate; - * - * @param c the connection. - * - * @return the Certificate byte buffer. - */ -tls.createCertificate = function(c) { - // TODO: check certificate request to ensure types are supported - - // get a certificate (a certificate as a PEM string) - var client = (c.entity === tls.ConnectionEnd.client); - var cert = null; - if(c.getCertificate) { - var hint; - if(client) { - hint = c.session.certificateRequest; - } else { - hint = c.session.extensions.server_name.serverNameList; - } - cert = c.getCertificate(c, hint); - } - - // buffer to hold certificate list - var certList = forge.util.createBuffer(); - if(cert !== null) { - try { - // normalize cert to a chain of certificates - if(!forge.util.isArray(cert)) { - cert = [cert]; - } - var asn1 = null; - for(var i = 0; i < cert.length; ++i) { - var msg = forge.pem.decode(cert[i])[0]; - if(msg.type !== 'CERTIFICATE' && - msg.type !== 'X509 CERTIFICATE' && - msg.type !== 'TRUSTED CERTIFICATE') { - var error = new Error('Could not convert certificate from PEM; PEM ' + - 'header type is not "CERTIFICATE", "X509 CERTIFICATE", or ' + - '"TRUSTED CERTIFICATE".'); - error.headerType = msg.type; - throw error; - } - if(msg.procType && msg.procType.type === 'ENCRYPTED') { - throw new Error('Could not convert certificate from PEM; PEM is encrypted.'); - } - - var der = forge.util.createBuffer(msg.body); - if(asn1 === null) { - asn1 = forge.asn1.fromDer(der.bytes(), false); - } - - // certificate entry is itself a vector with 3 length bytes - var certBuffer = forge.util.createBuffer(); - writeVector(certBuffer, 3, der); - - // add cert vector to cert list vector - certList.putBuffer(certBuffer); - } - - // save certificate - cert = forge.pki.certificateFromAsn1(asn1); - if(client) { - c.session.clientCertificate = cert; - } else { - c.session.serverCertificate = cert; - } - } catch(ex) { - return c.error(c, { - message: 'Could not send certificate list.', - cause: ex, - send: true, - alert: { - level: tls.Alert.Level.fatal, - description: tls.Alert.Description.bad_certificate - } - }); - } - } - - // determine length of the handshake message - var length = 3 + certList.length(); // cert list vector - - // build record fragment - var rval = forge.util.createBuffer(); - rval.putByte(tls.HandshakeType.certificate); - rval.putInt24(length); - writeVector(rval, 3, certList); - return rval; -}; - -/** - * Creates a ClientKeyExchange message. - * - * When this message will be sent: - * This message is always sent by the client. It will immediately follow the - * client certificate message, if it is sent. Otherwise it will be the first - * message sent by the client after it receives the server hello done - * message. - * - * Meaning of this message: - * With this message, the premaster secret is set, either though direct - * transmission of the RSA-encrypted secret, or by the transmission of - * Diffie-Hellman parameters which will allow each side to agree upon the - * same premaster secret. When the key exchange method is DH_RSA or DH_DSS, - * client certification has been requested, and the client was able to - * respond with a certificate which contained a Diffie-Hellman public key - * whose parameters (group and generator) matched those specified by the - * server in its certificate, this message will not contain any data. - * - * Meaning of this message: - * If RSA is being used for key agreement and authentication, the client - * generates a 48-byte premaster secret, encrypts it using the public key - * from the server's certificate or the temporary RSA key provided in a - * server key exchange message, and sends the result in an encrypted - * premaster secret message. This structure is a variant of the client - * key exchange message, not a message in itself. - * - * struct { - * select(KeyExchangeAlgorithm) { - * case rsa: EncryptedPreMasterSecret; - * case diffie_hellman: ClientDiffieHellmanPublic; - * } exchange_keys; - * } ClientKeyExchange; - * - * struct { - * ProtocolVersion client_version; - * opaque random[46]; - * } PreMasterSecret; - * - * struct { - * public-key-encrypted PreMasterSecret pre_master_secret; - * } EncryptedPreMasterSecret; - * - * A public-key-encrypted element is encoded as a vector <0..2^16-1>. - * - * @param c the connection. - * - * @return the ClientKeyExchange byte buffer. - */ -tls.createClientKeyExchange = function(c) { - // create buffer to encrypt - var b = forge.util.createBuffer(); - - // add highest client-supported protocol to help server avoid version - // rollback attacks - b.putByte(c.session.clientHelloVersion.major); - b.putByte(c.session.clientHelloVersion.minor); - - // generate and add 46 random bytes - b.putBytes(forge.random.getBytes(46)); - - // save pre-master secret - var sp = c.session.sp; - sp.pre_master_secret = b.getBytes(); - - // RSA-encrypt the pre-master secret - var key = c.session.serverCertificate.publicKey; - b = key.encrypt(sp.pre_master_secret); - - /* Note: The encrypted pre-master secret will be stored in a - public-key-encrypted opaque vector that has the length prefixed using - 2 bytes, so include those 2 bytes in the handshake message length. This - is done as a minor optimization instead of calling writeVector(). */ - - // determine length of the handshake message - var length = b.length + 2; - - // build record fragment - var rval = forge.util.createBuffer(); - rval.putByte(tls.HandshakeType.client_key_exchange); - rval.putInt24(length); - // add vector length bytes - rval.putInt16(b.length); - rval.putBytes(b); - return rval; -}; - -/** - * Creates a ServerKeyExchange message. - * - * @param c the connection. - * - * @return the ServerKeyExchange byte buffer. - */ -tls.createServerKeyExchange = function(c) { - // this implementation only supports RSA, no Diffie-Hellman support, - // so this record is empty - - // determine length of the handshake message - var length = 0; - - // build record fragment - var rval = forge.util.createBuffer(); - if(length > 0) { - rval.putByte(tls.HandshakeType.server_key_exchange); - rval.putInt24(length); - } - return rval; -}; - -/** - * Gets the signed data used to verify a client-side certificate. See - * tls.createCertificateVerify() for details. - * - * @param c the connection. - * @param callback the callback to call once the signed data is ready. - */ -tls.getClientSignature = function(c, callback) { - // generate data to RSA encrypt - var b = forge.util.createBuffer(); - b.putBuffer(c.session.md5.digest()); - b.putBuffer(c.session.sha1.digest()); - b = b.getBytes(); - - // create default signing function as necessary - c.getSignature = c.getSignature || function(c, b, callback) { - // do rsa encryption, call callback - var privateKey = null; - if(c.getPrivateKey) { - try { - privateKey = c.getPrivateKey(c, c.session.clientCertificate); - privateKey = forge.pki.privateKeyFromPem(privateKey); - } catch(ex) { - c.error(c, { - message: 'Could not get private key.', - cause: ex, - send: true, - alert: { - level: tls.Alert.Level.fatal, - description: tls.Alert.Description.internal_error - } - }); - } - } - if(privateKey === null) { - c.error(c, { - message: 'No private key set.', - send: true, - alert: { - level: tls.Alert.Level.fatal, - description: tls.Alert.Description.internal_error - } - }); - } else { - b = privateKey.sign(b, null); - } - callback(c, b); - }; - - // get client signature - c.getSignature(c, b, callback); -}; - -/** - * Creates a CertificateVerify message. - * - * Meaning of this message: - * This structure conveys the client's Diffie-Hellman public value - * (Yc) if it was not already included in the client's certificate. - * The encoding used for Yc is determined by the enumerated - * PublicValueEncoding. This structure is a variant of the client - * key exchange message, not a message in itself. - * - * When this message will be sent: - * This message is used to provide explicit verification of a client - * certificate. This message is only sent following a client - * certificate that has signing capability (i.e. all certificates - * except those containing fixed Diffie-Hellman parameters). When - * sent, it will immediately follow the client key exchange message. - * - * struct { - * Signature signature; - * } CertificateVerify; - * - * CertificateVerify.signature.md5_hash - * MD5(handshake_messages); - * - * Certificate.signature.sha_hash - * SHA(handshake_messages); - * - * Here handshake_messages refers to all handshake messages sent or - * received starting at client hello up to but not including this - * message, including the type and length fields of the handshake - * messages. - * - * select(SignatureAlgorithm) { - * case anonymous: struct { }; - * case rsa: - * digitally-signed struct { - * opaque md5_hash[16]; - * opaque sha_hash[20]; - * }; - * case dsa: - * digitally-signed struct { - * opaque sha_hash[20]; - * }; - * } Signature; - * - * In digital signing, one-way hash functions are used as input for a - * signing algorithm. A digitally-signed element is encoded as an opaque - * vector <0..2^16-1>, where the length is specified by the signing - * algorithm and key. - * - * In RSA signing, a 36-byte structure of two hashes (one SHA and one - * MD5) is signed (encrypted with the private key). It is encoded with - * PKCS #1 block type 0 or type 1 as described in [PKCS1]. - * - * In DSS, the 20 bytes of the SHA hash are run directly through the - * Digital Signing Algorithm with no additional hashing. - * - * @param c the connection. - * @param signature the signature to include in the message. - * - * @return the CertificateVerify byte buffer. - */ -tls.createCertificateVerify = function(c, signature) { - /* Note: The signature will be stored in a "digitally-signed" opaque - vector that has the length prefixed using 2 bytes, so include those - 2 bytes in the handshake message length. This is done as a minor - optimization instead of calling writeVector(). */ - - // determine length of the handshake message - var length = signature.length + 2; - - // build record fragment - var rval = forge.util.createBuffer(); - rval.putByte(tls.HandshakeType.certificate_verify); - rval.putInt24(length); - // add vector length bytes - rval.putInt16(signature.length); - rval.putBytes(signature); - return rval; -}; - -/** - * Creates a CertificateRequest message. - * - * @param c the connection. - * - * @return the CertificateRequest byte buffer. - */ -tls.createCertificateRequest = function(c) { - // TODO: support other certificate types - var certTypes = forge.util.createBuffer(); - - // common RSA certificate type - certTypes.putByte(0x01); - - // add distinguished names from CA store - var cAs = forge.util.createBuffer(); - for(var key in c.caStore.certs) { - var cert = c.caStore.certs[key]; - var dn = forge.pki.distinguishedNameToAsn1(cert.subject); - var byteBuffer = forge.asn1.toDer(dn); - cAs.putInt16(byteBuffer.length()); - cAs.putBuffer(byteBuffer); - } - - // TODO: TLS 1.2+ has a different format - - // determine length of the handshake message - var length = - 1 + certTypes.length() + - 2 + cAs.length(); - - // build record fragment - var rval = forge.util.createBuffer(); - rval.putByte(tls.HandshakeType.certificate_request); - rval.putInt24(length); - writeVector(rval, 1, certTypes); - writeVector(rval, 2, cAs); - return rval; -}; - -/** - * Creates a ServerHelloDone message. - * - * @param c the connection. - * - * @return the ServerHelloDone byte buffer. - */ -tls.createServerHelloDone = function(c) { - // build record fragment - var rval = forge.util.createBuffer(); - rval.putByte(tls.HandshakeType.server_hello_done); - rval.putInt24(0); - return rval; -}; - -/** - * Creates a ChangeCipherSpec message. - * - * The change cipher spec protocol exists to signal transitions in - * ciphering strategies. The protocol consists of a single message, - * which is encrypted and compressed under the current (not the pending) - * connection state. The message consists of a single byte of value 1. - * - * struct { - * enum { change_cipher_spec(1), (255) } type; - * } ChangeCipherSpec; - * - * @return the ChangeCipherSpec byte buffer. - */ -tls.createChangeCipherSpec = function() { - var rval = forge.util.createBuffer(); - rval.putByte(0x01); - return rval; -}; - -/** - * Creates a Finished message. - * - * struct { - * opaque verify_data[12]; - * } Finished; - * - * verify_data - * PRF(master_secret, finished_label, MD5(handshake_messages) + - * SHA-1(handshake_messages)) [0..11]; - * - * finished_label - * For Finished messages sent by the client, the string "client - * finished". For Finished messages sent by the server, the - * string "server finished". - * - * handshake_messages - * All of the data from all handshake messages up to but not - * including this message. This is only data visible at the - * handshake layer and does not include record layer headers. - * This is the concatenation of all the Handshake structures as - * defined in 7.4 exchanged thus far. - * - * @param c the connection. - * - * @return the Finished byte buffer. - */ -tls.createFinished = function(c) { - // generate verify_data - var b = forge.util.createBuffer(); - b.putBuffer(c.session.md5.digest()); - b.putBuffer(c.session.sha1.digest()); - - // TODO: determine prf function and verify length for TLS 1.2 - var client = (c.entity === tls.ConnectionEnd.client); - var sp = c.session.sp; - var vdl = 12; - var prf = prf_TLS1; - var label = client ? 'client finished' : 'server finished'; - b = prf(sp.master_secret, label, b.getBytes(), vdl); - - // build record fragment - var rval = forge.util.createBuffer(); - rval.putByte(tls.HandshakeType.finished); - rval.putInt24(b.length()); - rval.putBuffer(b); - return rval; -}; - -/** - * Creates a HeartbeatMessage (See RFC 6520). - * - * struct { - * HeartbeatMessageType type; - * uint16 payload_length; - * opaque payload[HeartbeatMessage.payload_length]; - * opaque padding[padding_length]; - * } HeartbeatMessage; - * - * The total length of a HeartbeatMessage MUST NOT exceed 2^14 or - * max_fragment_length when negotiated as defined in [RFC6066]. - * - * type: The message type, either heartbeat_request or heartbeat_response. - * - * payload_length: The length of the payload. - * - * payload: The payload consists of arbitrary content. - * - * padding: The padding is random content that MUST be ignored by the - * receiver. The length of a HeartbeatMessage is TLSPlaintext.length - * for TLS and DTLSPlaintext.length for DTLS. Furthermore, the - * length of the type field is 1 byte, and the length of the - * payload_length is 2. Therefore, the padding_length is - * TLSPlaintext.length - payload_length - 3 for TLS and - * DTLSPlaintext.length - payload_length - 3 for DTLS. The - * padding_length MUST be at least 16. - * - * The sender of a HeartbeatMessage MUST use a random padding of at - * least 16 bytes. The padding of a received HeartbeatMessage message - * MUST be ignored. - * - * If the payload_length of a received HeartbeatMessage is too large, - * the received HeartbeatMessage MUST be discarded silently. - * - * @param c the connection. - * @param type the tls.HeartbeatMessageType. - * @param payload the heartbeat data to send as the payload. - * @param [payloadLength] the payload length to use, defaults to the - * actual payload length. - * - * @return the HeartbeatRequest byte buffer. - */ -tls.createHeartbeat = function(type, payload, payloadLength) { - if(typeof payloadLength === 'undefined') { - payloadLength = payload.length; - } - // build record fragment - var rval = forge.util.createBuffer(); - rval.putByte(type); // heartbeat message type - rval.putInt16(payloadLength); // payload length - rval.putBytes(payload); // payload - // padding - var plaintextLength = rval.length(); - var paddingLength = Math.max(16, plaintextLength - payloadLength - 3); - rval.putBytes(forge.random.getBytes(paddingLength)); - return rval; -}; - -/** - * Fragments, compresses, encrypts, and queues a record for delivery. - * - * @param c the connection. - * @param record the record to queue. - */ -tls.queue = function(c, record) { - // error during record creation - if(!record) { - return; - } - - if(record.fragment.length() === 0) { - if(record.type === tls.ContentType.handshake || - record.type === tls.ContentType.alert || - record.type === tls.ContentType.change_cipher_spec) { - // Empty handshake, alert of change cipher spec messages are not allowed per the TLS specification and should not be sent. - return; - } - } - - // if the record is a handshake record, update handshake hashes - if(record.type === tls.ContentType.handshake) { - var bytes = record.fragment.bytes(); - c.session.md5.update(bytes); - c.session.sha1.update(bytes); - bytes = null; - } - - // handle record fragmentation - var records; - if(record.fragment.length() <= tls.MaxFragment) { - records = [record]; - } else { - // fragment data as long as it is too long - records = []; - var data = record.fragment.bytes(); - while(data.length > tls.MaxFragment) { - records.push(tls.createRecord(c, { - type: record.type, - data: forge.util.createBuffer(data.slice(0, tls.MaxFragment)) - })); - data = data.slice(tls.MaxFragment); - } - // add last record - if(data.length > 0) { - records.push(tls.createRecord(c, { - type: record.type, - data: forge.util.createBuffer(data) - })); - } - } - - // compress and encrypt all fragmented records - for(var i = 0; i < records.length && !c.fail; ++i) { - // update the record using current write state - var rec = records[i]; - var s = c.state.current.write; - if(s.update(c, rec)) { - // store record - c.records.push(rec); - } - } -}; - -/** - * Flushes all queued records to the output buffer and calls the - * tlsDataReady() handler on the given connection. - * - * @param c the connection. - * - * @return true on success, false on failure. - */ -tls.flush = function(c) { - for(var i = 0; i < c.records.length; ++i) { - var record = c.records[i]; - - // add record header and fragment - c.tlsData.putByte(record.type); - c.tlsData.putByte(record.version.major); - c.tlsData.putByte(record.version.minor); - c.tlsData.putInt16(record.fragment.length()); - c.tlsData.putBuffer(c.records[i].fragment); - } - c.records = []; - return c.tlsDataReady(c); -}; - -/** - * Maps a pki.certificateError to a tls.Alert.Description. - * - * @param error the error to map. - * - * @return the alert description. - */ -var _certErrorToAlertDesc = function(error) { - switch(error) { - case true: - return true; - case forge.pki.certificateError.bad_certificate: - return tls.Alert.Description.bad_certificate; - case forge.pki.certificateError.unsupported_certificate: - return tls.Alert.Description.unsupported_certificate; - case forge.pki.certificateError.certificate_revoked: - return tls.Alert.Description.certificate_revoked; - case forge.pki.certificateError.certificate_expired: - return tls.Alert.Description.certificate_expired; - case forge.pki.certificateError.certificate_unknown: - return tls.Alert.Description.certificate_unknown; - case forge.pki.certificateError.unknown_ca: - return tls.Alert.Description.unknown_ca; - default: - return tls.Alert.Description.bad_certificate; - } -}; - -/** - * Maps a tls.Alert.Description to a pki.certificateError. - * - * @param desc the alert description. - * - * @return the certificate error. - */ -var _alertDescToCertError = function(desc) { - switch(desc) { - case true: - return true; - case tls.Alert.Description.bad_certificate: - return forge.pki.certificateError.bad_certificate; - case tls.Alert.Description.unsupported_certificate: - return forge.pki.certificateError.unsupported_certificate; - case tls.Alert.Description.certificate_revoked: - return forge.pki.certificateError.certificate_revoked; - case tls.Alert.Description.certificate_expired: - return forge.pki.certificateError.certificate_expired; - case tls.Alert.Description.certificate_unknown: - return forge.pki.certificateError.certificate_unknown; - case tls.Alert.Description.unknown_ca: - return forge.pki.certificateError.unknown_ca; - default: - return forge.pki.certificateError.bad_certificate; - } -}; - -/** - * Verifies a certificate chain against the given connection's - * Certificate Authority store. - * - * @param c the TLS connection. - * @param chain the certificate chain to verify, with the root or highest - * authority at the end. - * - * @return true if successful, false if not. - */ -tls.verifyCertificateChain = function(c, chain) { - try { - // Make a copy of c.verifyOptions so that we can modify options.verify - // without modifying c.verifyOptions. - var options = {}; - for (var key in c.verifyOptions) { - options[key] = c.verifyOptions[key]; - } - - options.verify = function(vfd, depth, chain) { - // convert pki.certificateError to tls alert description - var desc = _certErrorToAlertDesc(vfd); - - // call application callback - var ret = c.verify(c, vfd, depth, chain); - if(ret !== true) { - if(typeof ret === 'object' && !forge.util.isArray(ret)) { - // throw custom error - var error = new Error('The application rejected the certificate.'); - error.send = true; - error.alert = { - level: tls.Alert.Level.fatal, - description: tls.Alert.Description.bad_certificate - }; - if(ret.message) { - error.message = ret.message; - } - if(ret.alert) { - error.alert.description = ret.alert; - } - throw error; - } - - // convert tls alert description to pki.certificateError - if(ret !== vfd) { - ret = _alertDescToCertError(ret); - } - } - - return ret; - }; - - // verify chain - forge.pki.verifyCertificateChain(c.caStore, chain, options); - } catch(ex) { - // build tls error if not already customized - var err = ex; - if(typeof err !== 'object' || forge.util.isArray(err)) { - err = { - send: true, - alert: { - level: tls.Alert.Level.fatal, - description: _certErrorToAlertDesc(ex) - } - }; - } - if(!('send' in err)) { - err.send = true; - } - if(!('alert' in err)) { - err.alert = { - level: tls.Alert.Level.fatal, - description: _certErrorToAlertDesc(err.error) - }; - } - - // send error - c.error(c, err); - } - - return !c.fail; -}; - -/** - * Creates a new TLS session cache. - * - * @param cache optional map of session ID to cached session. - * @param capacity the maximum size for the cache (default: 100). - * - * @return the new TLS session cache. - */ -tls.createSessionCache = function(cache, capacity) { - var rval = null; - - // assume input is already a session cache object - if(cache && cache.getSession && cache.setSession && cache.order) { - rval = cache; - } else { - // create cache - rval = {}; - rval.cache = cache || {}; - rval.capacity = Math.max(capacity || 100, 1); - rval.order = []; - - // store order for sessions, delete session overflow - for(var key in cache) { - if(rval.order.length <= capacity) { - rval.order.push(key); - } else { - delete cache[key]; - } - } - - // get a session from a session ID (or get any session) - rval.getSession = function(sessionId) { - var session = null; - var key = null; - - // if session ID provided, use it - if(sessionId) { - key = forge.util.bytesToHex(sessionId); - } else if(rval.order.length > 0) { - // get first session from cache - key = rval.order[0]; - } - - if(key !== null && key in rval.cache) { - // get cached session and remove from cache - session = rval.cache[key]; - delete rval.cache[key]; - for(var i in rval.order) { - if(rval.order[i] === key) { - rval.order.splice(i, 1); - break; - } - } - } - - return session; - }; - - // set a session in the cache - rval.setSession = function(sessionId, session) { - // remove session from cache if at capacity - if(rval.order.length === rval.capacity) { - var key = rval.order.shift(); - delete rval.cache[key]; - } - // add session to cache - var key = forge.util.bytesToHex(sessionId); - rval.order.push(key); - rval.cache[key] = session; - }; - } - - return rval; -}; - -/** - * Creates a new TLS connection. - * - * See public createConnection() docs for more details. - * - * @param options the options for this connection. - * - * @return the new TLS connection. - */ -tls.createConnection = function(options) { - var caStore = null; - if(options.caStore) { - // if CA store is an array, convert it to a CA store object - if(forge.util.isArray(options.caStore)) { - caStore = forge.pki.createCaStore(options.caStore); - } else { - caStore = options.caStore; - } - } else { - // create empty CA store - caStore = forge.pki.createCaStore(); - } - - // setup default cipher suites - var cipherSuites = options.cipherSuites || null; - if(cipherSuites === null) { - cipherSuites = []; - for(var key in tls.CipherSuites) { - cipherSuites.push(tls.CipherSuites[key]); - } - } - - // set default entity - var entity = (options.server || false) ? - tls.ConnectionEnd.server : tls.ConnectionEnd.client; - - // create session cache if requested - var sessionCache = options.sessionCache ? - tls.createSessionCache(options.sessionCache) : null; - - // create TLS connection - var c = { - version: {major: tls.Version.major, minor: tls.Version.minor}, - entity: entity, - sessionId: options.sessionId, - caStore: caStore, - sessionCache: sessionCache, - cipherSuites: cipherSuites, - connected: options.connected, - virtualHost: options.virtualHost || null, - verifyClient: options.verifyClient || false, - verify: options.verify || function(cn, vfd, dpth, cts) {return vfd;}, - verifyOptions: options.verifyOptions || {}, - getCertificate: options.getCertificate || null, - getPrivateKey: options.getPrivateKey || null, - getSignature: options.getSignature || null, - input: forge.util.createBuffer(), - tlsData: forge.util.createBuffer(), - data: forge.util.createBuffer(), - tlsDataReady: options.tlsDataReady, - dataReady: options.dataReady, - heartbeatReceived: options.heartbeatReceived, - closed: options.closed, - error: function(c, ex) { - // set origin if not set - ex.origin = ex.origin || - ((c.entity === tls.ConnectionEnd.client) ? 'client' : 'server'); - - // send TLS alert - if(ex.send) { - tls.queue(c, tls.createAlert(c, ex.alert)); - tls.flush(c); - } - - // error is fatal by default - var fatal = (ex.fatal !== false); - if(fatal) { - // set fail flag - c.fail = true; - } - - // call error handler first - options.error(c, ex); - - if(fatal) { - // fatal error, close connection, do not clear fail - c.close(false); - } - }, - deflate: options.deflate || null, - inflate: options.inflate || null - }; - - /** - * Resets a closed TLS connection for reuse. Called in c.close(). - * - * @param clearFail true to clear the fail flag (default: true). - */ - c.reset = function(clearFail) { - c.version = {major: tls.Version.major, minor: tls.Version.minor}; - c.record = null; - c.session = null; - c.peerCertificate = null; - c.state = { - pending: null, - current: null - }; - c.expect = (c.entity === tls.ConnectionEnd.client) ? SHE : CHE; - c.fragmented = null; - c.records = []; - c.open = false; - c.handshakes = 0; - c.handshaking = false; - c.isConnected = false; - c.fail = !(clearFail || typeof(clearFail) === 'undefined'); - c.input.clear(); - c.tlsData.clear(); - c.data.clear(); - c.state.current = tls.createConnectionState(c); - }; - - // do initial reset of connection - c.reset(); - - /** - * Updates the current TLS engine state based on the given record. - * - * @param c the TLS connection. - * @param record the TLS record to act on. - */ - var _update = function(c, record) { - // get record handler (align type in table by subtracting lowest) - var aligned = record.type - tls.ContentType.change_cipher_spec; - var handlers = ctTable[c.entity][c.expect]; - if(aligned in handlers) { - handlers[aligned](c, record); - } else { - // unexpected record - tls.handleUnexpected(c, record); - } - }; - - /** - * Reads the record header and initializes the next record on the given - * connection. - * - * @param c the TLS connection with the next record. - * - * @return 0 if the input data could be processed, otherwise the - * number of bytes required for data to be processed. - */ - var _readRecordHeader = function(c) { - var rval = 0; - - // get input buffer and its length - var b = c.input; - var len = b.length(); - - // need at least 5 bytes to initialize a record - if(len < 5) { - rval = 5 - len; - } else { - // enough bytes for header - // initialize record - c.record = { - type: b.getByte(), - version: { - major: b.getByte(), - minor: b.getByte() - }, - length: b.getInt16(), - fragment: forge.util.createBuffer(), - ready: false - }; - - // check record version - var compatibleVersion = (c.record.version.major === c.version.major); - if(compatibleVersion && c.session && c.session.version) { - // session version already set, require same minor version - compatibleVersion = (c.record.version.minor === c.version.minor); - } - if(!compatibleVersion) { - c.error(c, { - message: 'Incompatible TLS version.', - send: true, - alert: { - level: tls.Alert.Level.fatal, - description: tls.Alert.Description.protocol_version - } - }); - } - } - - return rval; - }; - - /** - * Reads the next record's contents and appends its message to any - * previously fragmented message. - * - * @param c the TLS connection with the next record. - * - * @return 0 if the input data could be processed, otherwise the - * number of bytes required for data to be processed. - */ - var _readRecord = function(c) { - var rval = 0; - - // ensure there is enough input data to get the entire record - var b = c.input; - var len = b.length(); - if(len < c.record.length) { - // not enough data yet, return how much is required - rval = c.record.length - len; - } else { - // there is enough data to parse the pending record - // fill record fragment and compact input buffer - c.record.fragment.putBytes(b.getBytes(c.record.length)); - b.compact(); - - // update record using current read state - var s = c.state.current.read; - if(s.update(c, c.record)) { - // see if there is a previously fragmented message that the - // new record's message fragment should be appended to - if(c.fragmented !== null) { - // if the record type matches a previously fragmented - // record, append the record fragment to it - if(c.fragmented.type === c.record.type) { - // concatenate record fragments - c.fragmented.fragment.putBuffer(c.record.fragment); - c.record = c.fragmented; - } else { - // error, invalid fragmented record - c.error(c, { - message: 'Invalid fragmented record.', - send: true, - alert: { - level: tls.Alert.Level.fatal, - description: - tls.Alert.Description.unexpected_message - } - }); - } - } - - // record is now ready - c.record.ready = true; - } - } - - return rval; - }; - - /** - * Performs a handshake using the TLS Handshake Protocol, as a client. - * - * This method should only be called if the connection is in client mode. - * - * @param sessionId the session ID to use, null to start a new one. - */ - c.handshake = function(sessionId) { - // error to call this in non-client mode - if(c.entity !== tls.ConnectionEnd.client) { - // not fatal error - c.error(c, { - message: 'Cannot initiate handshake as a server.', - fatal: false - }); - } else if(c.handshaking) { - // handshake is already in progress, fail but not fatal error - c.error(c, { - message: 'Handshake already in progress.', - fatal: false - }); - } else { - // clear fail flag on reuse - if(c.fail && !c.open && c.handshakes === 0) { - c.fail = false; - } - - // now handshaking - c.handshaking = true; - - // default to blank (new session) - sessionId = sessionId || ''; - - // if a session ID was specified, try to find it in the cache - var session = null; - if(sessionId.length > 0) { - if(c.sessionCache) { - session = c.sessionCache.getSession(sessionId); - } - - // matching session not found in cache, clear session ID - if(session === null) { - sessionId = ''; - } - } - - // no session given, grab a session from the cache, if available - if(sessionId.length === 0 && c.sessionCache) { - session = c.sessionCache.getSession(); - if(session !== null) { - sessionId = session.id; - } - } - - // set up session - c.session = { - id: sessionId, - version: null, - cipherSuite: null, - compressionMethod: null, - serverCertificate: null, - certificateRequest: null, - clientCertificate: null, - sp: {}, - md5: forge.md.md5.create(), - sha1: forge.md.sha1.create() - }; - - // use existing session information - if(session) { - // only update version on connection, session version not yet set - c.version = session.version; - c.session.sp = session.sp; - } - - // generate new client random - c.session.sp.client_random = tls.createRandom().getBytes(); - - // connection now open - c.open = true; - - // send hello - tls.queue(c, tls.createRecord(c, { - type: tls.ContentType.handshake, - data: tls.createClientHello(c) - })); - tls.flush(c); - } - }; - - /** - * Called when TLS protocol data has been received from somewhere and should - * be processed by the TLS engine. - * - * @param data the TLS protocol data, as a string, to process. - * - * @return 0 if the data could be processed, otherwise the number of bytes - * required for data to be processed. - */ - c.process = function(data) { - var rval = 0; - - // buffer input data - if(data) { - c.input.putBytes(data); - } - - // process next record if no failure, process will be called after - // each record is handled (since handling can be asynchronous) - if(!c.fail) { - // reset record if ready and now empty - if(c.record !== null && - c.record.ready && c.record.fragment.isEmpty()) { - c.record = null; - } - - // if there is no pending record, try to read record header - if(c.record === null) { - rval = _readRecordHeader(c); - } - - // read the next record (if record not yet ready) - if(!c.fail && c.record !== null && !c.record.ready) { - rval = _readRecord(c); - } - - // record ready to be handled, update engine state - if(!c.fail && c.record !== null && c.record.ready) { - _update(c, c.record); - } - } - - return rval; - }; - - /** - * Requests that application data be packaged into a TLS record. The - * tlsDataReady handler will be called when the TLS record(s) have been - * prepared. - * - * @param data the application data, as a raw 'binary' encoded string, to - * be sent; to send utf-16/utf-8 string data, use the return value - * of util.encodeUtf8(str). - * - * @return true on success, false on failure. - */ - c.prepare = function(data) { - tls.queue(c, tls.createRecord(c, { - type: tls.ContentType.application_data, - data: forge.util.createBuffer(data) - })); - return tls.flush(c); - }; - - /** - * Requests that a heartbeat request be packaged into a TLS record for - * transmission. The tlsDataReady handler will be called when TLS record(s) - * have been prepared. - * - * When a heartbeat response has been received, the heartbeatReceived - * handler will be called with the matching payload. This handler can - * be used to clear a retransmission timer, etc. - * - * @param payload the heartbeat data to send as the payload in the message. - * @param [payloadLength] the payload length to use, defaults to the - * actual payload length. - * - * @return true on success, false on failure. - */ - c.prepareHeartbeatRequest = function(payload, payloadLength) { - if(payload instanceof forge.util.ByteBuffer) { - payload = payload.bytes(); - } - if(typeof payloadLength === 'undefined') { - payloadLength = payload.length; - } - c.expectedHeartbeatPayload = payload; - tls.queue(c, tls.createRecord(c, { - type: tls.ContentType.heartbeat, - data: tls.createHeartbeat( - tls.HeartbeatMessageType.heartbeat_request, payload, payloadLength) - })); - return tls.flush(c); - }; - - /** - * Closes the connection (sends a close_notify alert). - * - * @param clearFail true to clear the fail flag (default: true). - */ - c.close = function(clearFail) { - // save session if connection didn't fail - if(!c.fail && c.sessionCache && c.session) { - // only need to preserve session ID, version, and security params - var session = { - id: c.session.id, - version: c.session.version, - sp: c.session.sp - }; - session.sp.keys = null; - c.sessionCache.setSession(session.id, session); - } - - if(c.open) { - // connection no longer open, clear input - c.open = false; - c.input.clear(); - - // if connected or handshaking, send an alert - if(c.isConnected || c.handshaking) { - c.isConnected = c.handshaking = false; - - // send close_notify alert - tls.queue(c, tls.createAlert(c, { - level: tls.Alert.Level.warning, - description: tls.Alert.Description.close_notify - })); - tls.flush(c); - } - - // call handler - c.closed(c); - } - - // reset TLS connection, do not clear fail flag - c.reset(clearFail); - }; - - return c; -}; - -/* TLS API */ -module.exports = forge.tls = forge.tls || {}; - -// expose non-functions -for(var key in tls) { - if(typeof tls[key] !== 'function') { - forge.tls[key] = tls[key]; - } -} - -// expose prf_tls1 for testing -forge.tls.prf_tls1 = prf_TLS1; - -// expose sha1 hmac method -forge.tls.hmac_sha1 = hmac_sha1; - -// expose session cache creation -forge.tls.createSessionCache = tls.createSessionCache; - -/** - * Creates a new TLS connection. This does not make any assumptions about the - * transport layer that TLS is working on top of, ie: it does not assume there - * is a TCP/IP connection or establish one. A TLS connection is totally - * abstracted away from the layer is runs on top of, it merely establishes a - * secure channel between a client" and a "server". - * - * A TLS connection contains 4 connection states: pending read and write, and - * current read and write. - * - * At initialization, the current read and write states will be null. Only once - * the security parameters have been set and the keys have been generated can - * the pending states be converted into current states. Current states will be - * updated for each record processed. - * - * A custom certificate verify callback may be provided to check information - * like the common name on the server's certificate. It will be called for - * every certificate in the chain. It has the following signature: - * - * variable func(c, certs, index, preVerify) - * Where: - * c The TLS connection - * verified Set to true if certificate was verified, otherwise the alert - * tls.Alert.Description for why the certificate failed. - * depth The current index in the chain, where 0 is the server's cert. - * certs The certificate chain, *NOTE* if the server was anonymous then - * the chain will be empty. - * - * The function returns true on success and on failure either the appropriate - * tls.Alert.Description or an object with 'alert' set to the appropriate - * tls.Alert.Description and 'message' set to a custom error message. If true - * is not returned then the connection will abort using, in order of - * availability, first the returned alert description, second the preVerify - * alert description, and lastly the default 'bad_certificate'. - * - * There are three callbacks that can be used to make use of client-side - * certificates where each takes the TLS connection as the first parameter: - * - * getCertificate(conn, hint) - * The second parameter is a hint as to which certificate should be - * returned. If the connection entity is a client, then the hint will be - * the CertificateRequest message from the server that is part of the - * TLS protocol. If the connection entity is a server, then it will be - * the servername list provided via an SNI extension the ClientHello, if - * one was provided (empty array if not). The hint can be examined to - * determine which certificate to use (advanced). Most implementations - * will just return a certificate. The return value must be a - * PEM-formatted certificate or an array of PEM-formatted certificates - * that constitute a certificate chain, with the first in the array/chain - * being the client's certificate. - * getPrivateKey(conn, certificate) - * The second parameter is an forge.pki X.509 certificate object that - * is associated with the requested private key. The return value must - * be a PEM-formatted private key. - * getSignature(conn, bytes, callback) - * This callback can be used instead of getPrivateKey if the private key - * is not directly accessible in javascript or should not be. For - * instance, a secure external web service could provide the signature - * in exchange for appropriate credentials. The second parameter is a - * string of bytes to be signed that are part of the TLS protocol. These - * bytes are used to verify that the private key for the previously - * provided client-side certificate is accessible to the client. The - * callback is a function that takes 2 parameters, the TLS connection - * and the RSA encrypted (signed) bytes as a string. This callback must - * be called once the signature is ready. - * - * @param options the options for this connection: - * server: true if the connection is server-side, false for client. - * sessionId: a session ID to reuse, null for a new connection. - * caStore: an array of certificates to trust. - * sessionCache: a session cache to use. - * cipherSuites: an optional array of cipher suites to use, - * see tls.CipherSuites. - * connected: function(conn) called when the first handshake completes. - * virtualHost: the virtual server name to use in a TLS SNI extension. - * verifyClient: true to require a client certificate in server mode, - * 'optional' to request one, false not to (default: false). - * verify: a handler used to custom verify certificates in the chain. - * verifyOptions: an object with options for the certificate chain validation. - * See documentation of pki.verifyCertificateChain for possible options. - * verifyOptions.verify is ignored. If you wish to specify a verify handler - * use the verify key. - * getCertificate: an optional callback used to get a certificate or - * a chain of certificates (as an array). - * getPrivateKey: an optional callback used to get a private key. - * getSignature: an optional callback used to get a signature. - * tlsDataReady: function(conn) called when TLS protocol data has been - * prepared and is ready to be used (typically sent over a socket - * connection to its destination), read from conn.tlsData buffer. - * dataReady: function(conn) called when application data has - * been parsed from a TLS record and should be consumed by the - * application, read from conn.data buffer. - * closed: function(conn) called when the connection has been closed. - * error: function(conn, error) called when there was an error. - * deflate: function(inBytes) if provided, will deflate TLS records using - * the deflate algorithm if the server supports it. - * inflate: function(inBytes) if provided, will inflate TLS records using - * the deflate algorithm if the server supports it. - * - * @return the new TLS connection. - */ -forge.tls.createConnection = tls.createConnection; diff --git a/reverse_engineering/node_modules/node-forge/lib/tlssocket.js b/reverse_engineering/node_modules/node-forge/lib/tlssocket.js deleted file mode 100644 index d09b650..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/tlssocket.js +++ /dev/null @@ -1,249 +0,0 @@ -/** - * Socket wrapping functions for TLS. - * - * @author Dave Longley - * - * Copyright (c) 2009-2012 Digital Bazaar, Inc. - */ -var forge = require('./forge'); -require('./tls'); - -/** - * Wraps a forge.net socket with a TLS layer. - * - * @param options: - * sessionId: a session ID to reuse, null for a new connection if no session - * cache is provided or it is empty. - * caStore: an array of certificates to trust. - * sessionCache: a session cache to use. - * cipherSuites: an optional array of cipher suites to use, see - * tls.CipherSuites. - * socket: the socket to wrap. - * virtualHost: the virtual server name to use in a TLS SNI extension. - * verify: a handler used to custom verify certificates in the chain. - * getCertificate: an optional callback used to get a certificate. - * getPrivateKey: an optional callback used to get a private key. - * getSignature: an optional callback used to get a signature. - * deflate: function(inBytes) if provided, will deflate TLS records using - * the deflate algorithm if the server supports it. - * inflate: function(inBytes) if provided, will inflate TLS records using - * the deflate algorithm if the server supports it. - * - * @return the TLS-wrapped socket. - */ -forge.tls.wrapSocket = function(options) { - // get raw socket - var socket = options.socket; - - // create TLS socket - var tlsSocket = { - id: socket.id, - // set handlers - connected: socket.connected || function(e) {}, - closed: socket.closed || function(e) {}, - data: socket.data || function(e) {}, - error: socket.error || function(e) {} - }; - - // create TLS connection - var c = forge.tls.createConnection({ - server: false, - sessionId: options.sessionId || null, - caStore: options.caStore || [], - sessionCache: options.sessionCache || null, - cipherSuites: options.cipherSuites || null, - virtualHost: options.virtualHost, - verify: options.verify, - getCertificate: options.getCertificate, - getPrivateKey: options.getPrivateKey, - getSignature: options.getSignature, - deflate: options.deflate, - inflate: options.inflate, - connected: function(c) { - // first handshake complete, call handler - if(c.handshakes === 1) { - tlsSocket.connected({ - id: socket.id, - type: 'connect', - bytesAvailable: c.data.length() - }); - } - }, - tlsDataReady: function(c) { - // send TLS data over socket - return socket.send(c.tlsData.getBytes()); - }, - dataReady: function(c) { - // indicate application data is ready - tlsSocket.data({ - id: socket.id, - type: 'socketData', - bytesAvailable: c.data.length() - }); - }, - closed: function(c) { - // close socket - socket.close(); - }, - error: function(c, e) { - // send error, close socket - tlsSocket.error({ - id: socket.id, - type: 'tlsError', - message: e.message, - bytesAvailable: 0, - error: e - }); - socket.close(); - } - }); - - // handle doing handshake after connecting - socket.connected = function(e) { - c.handshake(options.sessionId); - }; - - // handle closing TLS connection - socket.closed = function(e) { - if(c.open && c.handshaking) { - // error - tlsSocket.error({ - id: socket.id, - type: 'ioError', - message: 'Connection closed during handshake.', - bytesAvailable: 0 - }); - } - c.close(); - - // call socket handler - tlsSocket.closed({ - id: socket.id, - type: 'close', - bytesAvailable: 0 - }); - }; - - // handle error on socket - socket.error = function(e) { - // error - tlsSocket.error({ - id: socket.id, - type: e.type, - message: e.message, - bytesAvailable: 0 - }); - c.close(); - }; - - // handle receiving raw TLS data from socket - var _requiredBytes = 0; - socket.data = function(e) { - // drop data if connection not open - if(!c.open) { - socket.receive(e.bytesAvailable); - } else { - // only receive if there are enough bytes available to - // process a record - if(e.bytesAvailable >= _requiredBytes) { - var count = Math.max(e.bytesAvailable, _requiredBytes); - var data = socket.receive(count); - if(data !== null) { - _requiredBytes = c.process(data); - } - } - } - }; - - /** - * Destroys this socket. - */ - tlsSocket.destroy = function() { - socket.destroy(); - }; - - /** - * Sets this socket's TLS session cache. This should be called before - * the socket is connected or after it is closed. - * - * The cache is an object mapping session IDs to internal opaque state. - * An application might need to change the cache used by a particular - * tlsSocket between connections if it accesses multiple TLS hosts. - * - * @param cache the session cache to use. - */ - tlsSocket.setSessionCache = function(cache) { - c.sessionCache = tls.createSessionCache(cache); - }; - - /** - * Connects this socket. - * - * @param options: - * host: the host to connect to. - * port: the port to connect to. - * policyPort: the policy port to use (if non-default), 0 to - * use the flash default. - * policyUrl: the policy file URL to use (instead of port). - */ - tlsSocket.connect = function(options) { - socket.connect(options); - }; - - /** - * Closes this socket. - */ - tlsSocket.close = function() { - c.close(); - }; - - /** - * Determines if the socket is connected or not. - * - * @return true if connected, false if not. - */ - tlsSocket.isConnected = function() { - return c.isConnected && socket.isConnected(); - }; - - /** - * Writes bytes to this socket. - * - * @param bytes the bytes (as a string) to write. - * - * @return true on success, false on failure. - */ - tlsSocket.send = function(bytes) { - return c.prepare(bytes); - }; - - /** - * Reads bytes from this socket (non-blocking). Fewer than the number of - * bytes requested may be read if enough bytes are not available. - * - * This method should be called from the data handler if there are enough - * bytes available. To see how many bytes are available, check the - * 'bytesAvailable' property on the event in the data handler or call the - * bytesAvailable() function on the socket. If the browser is msie, then the - * bytesAvailable() function should be used to avoid race conditions. - * Otherwise, using the property on the data handler's event may be quicker. - * - * @param count the maximum number of bytes to read. - * - * @return the bytes read (as a string) or null on error. - */ - tlsSocket.receive = function(count) { - return c.data.getBytes(count); - }; - - /** - * Gets the number of bytes available for receiving on the socket. - * - * @return the number of bytes available for receiving. - */ - tlsSocket.bytesAvailable = function() { - return c.data.length(); - }; - - return tlsSocket; -}; diff --git a/reverse_engineering/node_modules/node-forge/lib/util.js b/reverse_engineering/node_modules/node-forge/lib/util.js deleted file mode 100644 index 98dfd34..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/util.js +++ /dev/null @@ -1,2907 +0,0 @@ -/** - * Utility functions for web applications. - * - * @author Dave Longley - * - * Copyright (c) 2010-2018 Digital Bazaar, Inc. - */ -var forge = require('./forge'); -var baseN = require('./baseN'); - -/* Utilities API */ -var util = module.exports = forge.util = forge.util || {}; - -// define setImmediate and nextTick -(function() { - // use native nextTick (unless we're in webpack) - // webpack (or better node-libs-browser polyfill) sets process.browser. - // this way we can detect webpack properly - if(typeof process !== 'undefined' && process.nextTick && !process.browser) { - util.nextTick = process.nextTick; - if(typeof setImmediate === 'function') { - util.setImmediate = setImmediate; - } else { - // polyfill setImmediate with nextTick, older versions of node - // (those w/o setImmediate) won't totally starve IO - util.setImmediate = util.nextTick; - } - return; - } - - // polyfill nextTick with native setImmediate - if(typeof setImmediate === 'function') { - util.setImmediate = function() { return setImmediate.apply(undefined, arguments); }; - util.nextTick = function(callback) { - return setImmediate(callback); - }; - return; - } - - /* Note: A polyfill upgrade pattern is used here to allow combining - polyfills. For example, MutationObserver is fast, but blocks UI updates, - so it needs to allow UI updates periodically, so it falls back on - postMessage or setTimeout. */ - - // polyfill with setTimeout - util.setImmediate = function(callback) { - setTimeout(callback, 0); - }; - - // upgrade polyfill to use postMessage - if(typeof window !== 'undefined' && - typeof window.postMessage === 'function') { - var msg = 'forge.setImmediate'; - var callbacks = []; - util.setImmediate = function(callback) { - callbacks.push(callback); - // only send message when one hasn't been sent in - // the current turn of the event loop - if(callbacks.length === 1) { - window.postMessage(msg, '*'); - } - }; - function handler(event) { - if(event.source === window && event.data === msg) { - event.stopPropagation(); - var copy = callbacks.slice(); - callbacks.length = 0; - copy.forEach(function(callback) { - callback(); - }); - } - } - window.addEventListener('message', handler, true); - } - - // upgrade polyfill to use MutationObserver - if(typeof MutationObserver !== 'undefined') { - // polyfill with MutationObserver - var now = Date.now(); - var attr = true; - var div = document.createElement('div'); - var callbacks = []; - new MutationObserver(function() { - var copy = callbacks.slice(); - callbacks.length = 0; - copy.forEach(function(callback) { - callback(); - }); - }).observe(div, {attributes: true}); - var oldSetImmediate = util.setImmediate; - util.setImmediate = function(callback) { - if(Date.now() - now > 15) { - now = Date.now(); - oldSetImmediate(callback); - } else { - callbacks.push(callback); - // only trigger observer when it hasn't been triggered in - // the current turn of the event loop - if(callbacks.length === 1) { - div.setAttribute('a', attr = !attr); - } - } - }; - } - - util.nextTick = util.setImmediate; -})(); - -// check if running under Node.js -util.isNodejs = - typeof process !== 'undefined' && process.versions && process.versions.node; - - -// 'self' will also work in Web Workers (instance of WorkerGlobalScope) while -// it will point to `window` in the main thread. -// To remain compatible with older browsers, we fall back to 'window' if 'self' -// is not available. -util.globalScope = (function() { - if(util.isNodejs) { - return global; - } - - return typeof self === 'undefined' ? window : self; -})(); - -// define isArray -util.isArray = Array.isArray || function(x) { - return Object.prototype.toString.call(x) === '[object Array]'; -}; - -// define isArrayBuffer -util.isArrayBuffer = function(x) { - return typeof ArrayBuffer !== 'undefined' && x instanceof ArrayBuffer; -}; - -// define isArrayBufferView -util.isArrayBufferView = function(x) { - return x && util.isArrayBuffer(x.buffer) && x.byteLength !== undefined; -}; - -/** - * Ensure a bits param is 8, 16, 24, or 32. Used to validate input for - * algorithms where bit manipulation, JavaScript limitations, and/or algorithm - * design only allow for byte operations of a limited size. - * - * @param n number of bits. - * - * Throw Error if n invalid. - */ -function _checkBitsParam(n) { - if(!(n === 8 || n === 16 || n === 24 || n === 32)) { - throw new Error('Only 8, 16, 24, or 32 bits supported: ' + n); - } -} - -// TODO: set ByteBuffer to best available backing -util.ByteBuffer = ByteStringBuffer; - -/** Buffer w/BinaryString backing */ - -/** - * Constructor for a binary string backed byte buffer. - * - * @param [b] the bytes to wrap (either encoded as string, one byte per - * character, or as an ArrayBuffer or Typed Array). - */ -function ByteStringBuffer(b) { - // TODO: update to match DataBuffer API - - // the data in this buffer - this.data = ''; - // the pointer for reading from this buffer - this.read = 0; - - if(typeof b === 'string') { - this.data = b; - } else if(util.isArrayBuffer(b) || util.isArrayBufferView(b)) { - if(typeof Buffer !== 'undefined' && b instanceof Buffer) { - this.data = b.toString('binary'); - } else { - // convert native buffer to forge buffer - // FIXME: support native buffers internally instead - var arr = new Uint8Array(b); - try { - this.data = String.fromCharCode.apply(null, arr); - } catch(e) { - for(var i = 0; i < arr.length; ++i) { - this.putByte(arr[i]); - } - } - } - } else if(b instanceof ByteStringBuffer || - (typeof b === 'object' && typeof b.data === 'string' && - typeof b.read === 'number')) { - // copy existing buffer - this.data = b.data; - this.read = b.read; - } - - // used for v8 optimization - this._constructedStringLength = 0; -} -util.ByteStringBuffer = ByteStringBuffer; - -/* Note: This is an optimization for V8-based browsers. When V8 concatenates - a string, the strings are only joined logically using a "cons string" or - "constructed/concatenated string". These containers keep references to one - another and can result in very large memory usage. For example, if a 2MB - string is constructed by concatenating 4 bytes together at a time, the - memory usage will be ~44MB; so ~22x increase. The strings are only joined - together when an operation requiring their joining takes place, such as - substr(). This function is called when adding data to this buffer to ensure - these types of strings are periodically joined to reduce the memory - footprint. */ -var _MAX_CONSTRUCTED_STRING_LENGTH = 4096; -util.ByteStringBuffer.prototype._optimizeConstructedString = function(x) { - this._constructedStringLength += x; - if(this._constructedStringLength > _MAX_CONSTRUCTED_STRING_LENGTH) { - // this substr() should cause the constructed string to join - this.data.substr(0, 1); - this._constructedStringLength = 0; - } -}; - -/** - * Gets the number of bytes in this buffer. - * - * @return the number of bytes in this buffer. - */ -util.ByteStringBuffer.prototype.length = function() { - return this.data.length - this.read; -}; - -/** - * Gets whether or not this buffer is empty. - * - * @return true if this buffer is empty, false if not. - */ -util.ByteStringBuffer.prototype.isEmpty = function() { - return this.length() <= 0; -}; - -/** - * Puts a byte in this buffer. - * - * @param b the byte to put. - * - * @return this buffer. - */ -util.ByteStringBuffer.prototype.putByte = function(b) { - return this.putBytes(String.fromCharCode(b)); -}; - -/** - * Puts a byte in this buffer N times. - * - * @param b the byte to put. - * @param n the number of bytes of value b to put. - * - * @return this buffer. - */ -util.ByteStringBuffer.prototype.fillWithByte = function(b, n) { - b = String.fromCharCode(b); - var d = this.data; - while(n > 0) { - if(n & 1) { - d += b; - } - n >>>= 1; - if(n > 0) { - b += b; - } - } - this.data = d; - this._optimizeConstructedString(n); - return this; -}; - -/** - * Puts bytes in this buffer. - * - * @param bytes the bytes (as a binary encoded string) to put. - * - * @return this buffer. - */ -util.ByteStringBuffer.prototype.putBytes = function(bytes) { - this.data += bytes; - this._optimizeConstructedString(bytes.length); - return this; -}; - -/** - * Puts a UTF-16 encoded string into this buffer. - * - * @param str the string to put. - * - * @return this buffer. - */ -util.ByteStringBuffer.prototype.putString = function(str) { - return this.putBytes(util.encodeUtf8(str)); -}; - -/** - * Puts a 16-bit integer in this buffer in big-endian order. - * - * @param i the 16-bit integer. - * - * @return this buffer. - */ -util.ByteStringBuffer.prototype.putInt16 = function(i) { - return this.putBytes( - String.fromCharCode(i >> 8 & 0xFF) + - String.fromCharCode(i & 0xFF)); -}; - -/** - * Puts a 24-bit integer in this buffer in big-endian order. - * - * @param i the 24-bit integer. - * - * @return this buffer. - */ -util.ByteStringBuffer.prototype.putInt24 = function(i) { - return this.putBytes( - String.fromCharCode(i >> 16 & 0xFF) + - String.fromCharCode(i >> 8 & 0xFF) + - String.fromCharCode(i & 0xFF)); -}; - -/** - * Puts a 32-bit integer in this buffer in big-endian order. - * - * @param i the 32-bit integer. - * - * @return this buffer. - */ -util.ByteStringBuffer.prototype.putInt32 = function(i) { - return this.putBytes( - String.fromCharCode(i >> 24 & 0xFF) + - String.fromCharCode(i >> 16 & 0xFF) + - String.fromCharCode(i >> 8 & 0xFF) + - String.fromCharCode(i & 0xFF)); -}; - -/** - * Puts a 16-bit integer in this buffer in little-endian order. - * - * @param i the 16-bit integer. - * - * @return this buffer. - */ -util.ByteStringBuffer.prototype.putInt16Le = function(i) { - return this.putBytes( - String.fromCharCode(i & 0xFF) + - String.fromCharCode(i >> 8 & 0xFF)); -}; - -/** - * Puts a 24-bit integer in this buffer in little-endian order. - * - * @param i the 24-bit integer. - * - * @return this buffer. - */ -util.ByteStringBuffer.prototype.putInt24Le = function(i) { - return this.putBytes( - String.fromCharCode(i & 0xFF) + - String.fromCharCode(i >> 8 & 0xFF) + - String.fromCharCode(i >> 16 & 0xFF)); -}; - -/** - * Puts a 32-bit integer in this buffer in little-endian order. - * - * @param i the 32-bit integer. - * - * @return this buffer. - */ -util.ByteStringBuffer.prototype.putInt32Le = function(i) { - return this.putBytes( - String.fromCharCode(i & 0xFF) + - String.fromCharCode(i >> 8 & 0xFF) + - String.fromCharCode(i >> 16 & 0xFF) + - String.fromCharCode(i >> 24 & 0xFF)); -}; - -/** - * Puts an n-bit integer in this buffer in big-endian order. - * - * @param i the n-bit integer. - * @param n the number of bits in the integer (8, 16, 24, or 32). - * - * @return this buffer. - */ -util.ByteStringBuffer.prototype.putInt = function(i, n) { - _checkBitsParam(n); - var bytes = ''; - do { - n -= 8; - bytes += String.fromCharCode((i >> n) & 0xFF); - } while(n > 0); - return this.putBytes(bytes); -}; - -/** - * Puts a signed n-bit integer in this buffer in big-endian order. Two's - * complement representation is used. - * - * @param i the n-bit integer. - * @param n the number of bits in the integer (8, 16, 24, or 32). - * - * @return this buffer. - */ -util.ByteStringBuffer.prototype.putSignedInt = function(i, n) { - // putInt checks n - if(i < 0) { - i += 2 << (n - 1); - } - return this.putInt(i, n); -}; - -/** - * Puts the given buffer into this buffer. - * - * @param buffer the buffer to put into this one. - * - * @return this buffer. - */ -util.ByteStringBuffer.prototype.putBuffer = function(buffer) { - return this.putBytes(buffer.getBytes()); -}; - -/** - * Gets a byte from this buffer and advances the read pointer by 1. - * - * @return the byte. - */ -util.ByteStringBuffer.prototype.getByte = function() { - return this.data.charCodeAt(this.read++); -}; - -/** - * Gets a uint16 from this buffer in big-endian order and advances the read - * pointer by 2. - * - * @return the uint16. - */ -util.ByteStringBuffer.prototype.getInt16 = function() { - var rval = ( - this.data.charCodeAt(this.read) << 8 ^ - this.data.charCodeAt(this.read + 1)); - this.read += 2; - return rval; -}; - -/** - * Gets a uint24 from this buffer in big-endian order and advances the read - * pointer by 3. - * - * @return the uint24. - */ -util.ByteStringBuffer.prototype.getInt24 = function() { - var rval = ( - this.data.charCodeAt(this.read) << 16 ^ - this.data.charCodeAt(this.read + 1) << 8 ^ - this.data.charCodeAt(this.read + 2)); - this.read += 3; - return rval; -}; - -/** - * Gets a uint32 from this buffer in big-endian order and advances the read - * pointer by 4. - * - * @return the word. - */ -util.ByteStringBuffer.prototype.getInt32 = function() { - var rval = ( - this.data.charCodeAt(this.read) << 24 ^ - this.data.charCodeAt(this.read + 1) << 16 ^ - this.data.charCodeAt(this.read + 2) << 8 ^ - this.data.charCodeAt(this.read + 3)); - this.read += 4; - return rval; -}; - -/** - * Gets a uint16 from this buffer in little-endian order and advances the read - * pointer by 2. - * - * @return the uint16. - */ -util.ByteStringBuffer.prototype.getInt16Le = function() { - var rval = ( - this.data.charCodeAt(this.read) ^ - this.data.charCodeAt(this.read + 1) << 8); - this.read += 2; - return rval; -}; - -/** - * Gets a uint24 from this buffer in little-endian order and advances the read - * pointer by 3. - * - * @return the uint24. - */ -util.ByteStringBuffer.prototype.getInt24Le = function() { - var rval = ( - this.data.charCodeAt(this.read) ^ - this.data.charCodeAt(this.read + 1) << 8 ^ - this.data.charCodeAt(this.read + 2) << 16); - this.read += 3; - return rval; -}; - -/** - * Gets a uint32 from this buffer in little-endian order and advances the read - * pointer by 4. - * - * @return the word. - */ -util.ByteStringBuffer.prototype.getInt32Le = function() { - var rval = ( - this.data.charCodeAt(this.read) ^ - this.data.charCodeAt(this.read + 1) << 8 ^ - this.data.charCodeAt(this.read + 2) << 16 ^ - this.data.charCodeAt(this.read + 3) << 24); - this.read += 4; - return rval; -}; - -/** - * Gets an n-bit integer from this buffer in big-endian order and advances the - * read pointer by ceil(n/8). - * - * @param n the number of bits in the integer (8, 16, 24, or 32). - * - * @return the integer. - */ -util.ByteStringBuffer.prototype.getInt = function(n) { - _checkBitsParam(n); - var rval = 0; - do { - // TODO: Use (rval * 0x100) if adding support for 33 to 53 bits. - rval = (rval << 8) + this.data.charCodeAt(this.read++); - n -= 8; - } while(n > 0); - return rval; -}; - -/** - * Gets a signed n-bit integer from this buffer in big-endian order, using - * two's complement, and advances the read pointer by n/8. - * - * @param n the number of bits in the integer (8, 16, 24, or 32). - * - * @return the integer. - */ -util.ByteStringBuffer.prototype.getSignedInt = function(n) { - // getInt checks n - var x = this.getInt(n); - var max = 2 << (n - 2); - if(x >= max) { - x -= max << 1; - } - return x; -}; - -/** - * Reads bytes out as a binary encoded string and clears them from the - * buffer. Note that the resulting string is binary encoded (in node.js this - * encoding is referred to as `binary`, it is *not* `utf8`). - * - * @param count the number of bytes to read, undefined or null for all. - * - * @return a binary encoded string of bytes. - */ -util.ByteStringBuffer.prototype.getBytes = function(count) { - var rval; - if(count) { - // read count bytes - count = Math.min(this.length(), count); - rval = this.data.slice(this.read, this.read + count); - this.read += count; - } else if(count === 0) { - rval = ''; - } else { - // read all bytes, optimize to only copy when needed - rval = (this.read === 0) ? this.data : this.data.slice(this.read); - this.clear(); - } - return rval; -}; - -/** - * Gets a binary encoded string of the bytes from this buffer without - * modifying the read pointer. - * - * @param count the number of bytes to get, omit to get all. - * - * @return a string full of binary encoded characters. - */ -util.ByteStringBuffer.prototype.bytes = function(count) { - return (typeof(count) === 'undefined' ? - this.data.slice(this.read) : - this.data.slice(this.read, this.read + count)); -}; - -/** - * Gets a byte at the given index without modifying the read pointer. - * - * @param i the byte index. - * - * @return the byte. - */ -util.ByteStringBuffer.prototype.at = function(i) { - return this.data.charCodeAt(this.read + i); -}; - -/** - * Puts a byte at the given index without modifying the read pointer. - * - * @param i the byte index. - * @param b the byte to put. - * - * @return this buffer. - */ -util.ByteStringBuffer.prototype.setAt = function(i, b) { - this.data = this.data.substr(0, this.read + i) + - String.fromCharCode(b) + - this.data.substr(this.read + i + 1); - return this; -}; - -/** - * Gets the last byte without modifying the read pointer. - * - * @return the last byte. - */ -util.ByteStringBuffer.prototype.last = function() { - return this.data.charCodeAt(this.data.length - 1); -}; - -/** - * Creates a copy of this buffer. - * - * @return the copy. - */ -util.ByteStringBuffer.prototype.copy = function() { - var c = util.createBuffer(this.data); - c.read = this.read; - return c; -}; - -/** - * Compacts this buffer. - * - * @return this buffer. - */ -util.ByteStringBuffer.prototype.compact = function() { - if(this.read > 0) { - this.data = this.data.slice(this.read); - this.read = 0; - } - return this; -}; - -/** - * Clears this buffer. - * - * @return this buffer. - */ -util.ByteStringBuffer.prototype.clear = function() { - this.data = ''; - this.read = 0; - return this; -}; - -/** - * Shortens this buffer by triming bytes off of the end of this buffer. - * - * @param count the number of bytes to trim off. - * - * @return this buffer. - */ -util.ByteStringBuffer.prototype.truncate = function(count) { - var len = Math.max(0, this.length() - count); - this.data = this.data.substr(this.read, len); - this.read = 0; - return this; -}; - -/** - * Converts this buffer to a hexadecimal string. - * - * @return a hexadecimal string. - */ -util.ByteStringBuffer.prototype.toHex = function() { - var rval = ''; - for(var i = this.read; i < this.data.length; ++i) { - var b = this.data.charCodeAt(i); - if(b < 16) { - rval += '0'; - } - rval += b.toString(16); - } - return rval; -}; - -/** - * Converts this buffer to a UTF-16 string (standard JavaScript string). - * - * @return a UTF-16 string. - */ -util.ByteStringBuffer.prototype.toString = function() { - return util.decodeUtf8(this.bytes()); -}; - -/** End Buffer w/BinaryString backing */ - -/** Buffer w/UInt8Array backing */ - -/** - * FIXME: Experimental. Do not use yet. - * - * Constructor for an ArrayBuffer-backed byte buffer. - * - * The buffer may be constructed from a string, an ArrayBuffer, DataView, or a - * TypedArray. - * - * If a string is given, its encoding should be provided as an option, - * otherwise it will default to 'binary'. A 'binary' string is encoded such - * that each character is one byte in length and size. - * - * If an ArrayBuffer, DataView, or TypedArray is given, it will be used - * *directly* without any copying. Note that, if a write to the buffer requires - * more space, the buffer will allocate a new backing ArrayBuffer to - * accommodate. The starting read and write offsets for the buffer may be - * given as options. - * - * @param [b] the initial bytes for this buffer. - * @param options the options to use: - * [readOffset] the starting read offset to use (default: 0). - * [writeOffset] the starting write offset to use (default: the - * length of the first parameter). - * [growSize] the minimum amount, in bytes, to grow the buffer by to - * accommodate writes (default: 1024). - * [encoding] the encoding ('binary', 'utf8', 'utf16', 'hex') for the - * first parameter, if it is a string (default: 'binary'). - */ -function DataBuffer(b, options) { - // default options - options = options || {}; - - // pointers for read from/write to buffer - this.read = options.readOffset || 0; - this.growSize = options.growSize || 1024; - - var isArrayBuffer = util.isArrayBuffer(b); - var isArrayBufferView = util.isArrayBufferView(b); - if(isArrayBuffer || isArrayBufferView) { - // use ArrayBuffer directly - if(isArrayBuffer) { - this.data = new DataView(b); - } else { - // TODO: adjust read/write offset based on the type of view - // or specify that this must be done in the options ... that the - // offsets are byte-based - this.data = new DataView(b.buffer, b.byteOffset, b.byteLength); - } - this.write = ('writeOffset' in options ? - options.writeOffset : this.data.byteLength); - return; - } - - // initialize to empty array buffer and add any given bytes using putBytes - this.data = new DataView(new ArrayBuffer(0)); - this.write = 0; - - if(b !== null && b !== undefined) { - this.putBytes(b); - } - - if('writeOffset' in options) { - this.write = options.writeOffset; - } -} -util.DataBuffer = DataBuffer; - -/** - * Gets the number of bytes in this buffer. - * - * @return the number of bytes in this buffer. - */ -util.DataBuffer.prototype.length = function() { - return this.write - this.read; -}; - -/** - * Gets whether or not this buffer is empty. - * - * @return true if this buffer is empty, false if not. - */ -util.DataBuffer.prototype.isEmpty = function() { - return this.length() <= 0; -}; - -/** - * Ensures this buffer has enough empty space to accommodate the given number - * of bytes. An optional parameter may be given that indicates a minimum - * amount to grow the buffer if necessary. If the parameter is not given, - * the buffer will be grown by some previously-specified default amount - * or heuristic. - * - * @param amount the number of bytes to accommodate. - * @param [growSize] the minimum amount, in bytes, to grow the buffer by if - * necessary. - */ -util.DataBuffer.prototype.accommodate = function(amount, growSize) { - if(this.length() >= amount) { - return this; - } - growSize = Math.max(growSize || this.growSize, amount); - - // grow buffer - var src = new Uint8Array( - this.data.buffer, this.data.byteOffset, this.data.byteLength); - var dst = new Uint8Array(this.length() + growSize); - dst.set(src); - this.data = new DataView(dst.buffer); - - return this; -}; - -/** - * Puts a byte in this buffer. - * - * @param b the byte to put. - * - * @return this buffer. - */ -util.DataBuffer.prototype.putByte = function(b) { - this.accommodate(1); - this.data.setUint8(this.write++, b); - return this; -}; - -/** - * Puts a byte in this buffer N times. - * - * @param b the byte to put. - * @param n the number of bytes of value b to put. - * - * @return this buffer. - */ -util.DataBuffer.prototype.fillWithByte = function(b, n) { - this.accommodate(n); - for(var i = 0; i < n; ++i) { - this.data.setUint8(b); - } - return this; -}; - -/** - * Puts bytes in this buffer. The bytes may be given as a string, an - * ArrayBuffer, a DataView, or a TypedArray. - * - * @param bytes the bytes to put. - * @param [encoding] the encoding for the first parameter ('binary', 'utf8', - * 'utf16', 'hex'), if it is a string (default: 'binary'). - * - * @return this buffer. - */ -util.DataBuffer.prototype.putBytes = function(bytes, encoding) { - if(util.isArrayBufferView(bytes)) { - var src = new Uint8Array(bytes.buffer, bytes.byteOffset, bytes.byteLength); - var len = src.byteLength - src.byteOffset; - this.accommodate(len); - var dst = new Uint8Array(this.data.buffer, this.write); - dst.set(src); - this.write += len; - return this; - } - - if(util.isArrayBuffer(bytes)) { - var src = new Uint8Array(bytes); - this.accommodate(src.byteLength); - var dst = new Uint8Array(this.data.buffer); - dst.set(src, this.write); - this.write += src.byteLength; - return this; - } - - // bytes is a util.DataBuffer or equivalent - if(bytes instanceof util.DataBuffer || - (typeof bytes === 'object' && - typeof bytes.read === 'number' && typeof bytes.write === 'number' && - util.isArrayBufferView(bytes.data))) { - var src = new Uint8Array(bytes.data.byteLength, bytes.read, bytes.length()); - this.accommodate(src.byteLength); - var dst = new Uint8Array(bytes.data.byteLength, this.write); - dst.set(src); - this.write += src.byteLength; - return this; - } - - if(bytes instanceof util.ByteStringBuffer) { - // copy binary string and process as the same as a string parameter below - bytes = bytes.data; - encoding = 'binary'; - } - - // string conversion - encoding = encoding || 'binary'; - if(typeof bytes === 'string') { - var view; - - // decode from string - if(encoding === 'hex') { - this.accommodate(Math.ceil(bytes.length / 2)); - view = new Uint8Array(this.data.buffer, this.write); - this.write += util.binary.hex.decode(bytes, view, this.write); - return this; - } - if(encoding === 'base64') { - this.accommodate(Math.ceil(bytes.length / 4) * 3); - view = new Uint8Array(this.data.buffer, this.write); - this.write += util.binary.base64.decode(bytes, view, this.write); - return this; - } - - // encode text as UTF-8 bytes - if(encoding === 'utf8') { - // encode as UTF-8 then decode string as raw binary - bytes = util.encodeUtf8(bytes); - encoding = 'binary'; - } - - // decode string as raw binary - if(encoding === 'binary' || encoding === 'raw') { - // one byte per character - this.accommodate(bytes.length); - view = new Uint8Array(this.data.buffer, this.write); - this.write += util.binary.raw.decode(view); - return this; - } - - // encode text as UTF-16 bytes - if(encoding === 'utf16') { - // two bytes per character - this.accommodate(bytes.length * 2); - view = new Uint16Array(this.data.buffer, this.write); - this.write += util.text.utf16.encode(view); - return this; - } - - throw new Error('Invalid encoding: ' + encoding); - } - - throw Error('Invalid parameter: ' + bytes); -}; - -/** - * Puts the given buffer into this buffer. - * - * @param buffer the buffer to put into this one. - * - * @return this buffer. - */ -util.DataBuffer.prototype.putBuffer = function(buffer) { - this.putBytes(buffer); - buffer.clear(); - return this; -}; - -/** - * Puts a string into this buffer. - * - * @param str the string to put. - * @param [encoding] the encoding for the string (default: 'utf16'). - * - * @return this buffer. - */ -util.DataBuffer.prototype.putString = function(str) { - return this.putBytes(str, 'utf16'); -}; - -/** - * Puts a 16-bit integer in this buffer in big-endian order. - * - * @param i the 16-bit integer. - * - * @return this buffer. - */ -util.DataBuffer.prototype.putInt16 = function(i) { - this.accommodate(2); - this.data.setInt16(this.write, i); - this.write += 2; - return this; -}; - -/** - * Puts a 24-bit integer in this buffer in big-endian order. - * - * @param i the 24-bit integer. - * - * @return this buffer. - */ -util.DataBuffer.prototype.putInt24 = function(i) { - this.accommodate(3); - this.data.setInt16(this.write, i >> 8 & 0xFFFF); - this.data.setInt8(this.write, i >> 16 & 0xFF); - this.write += 3; - return this; -}; - -/** - * Puts a 32-bit integer in this buffer in big-endian order. - * - * @param i the 32-bit integer. - * - * @return this buffer. - */ -util.DataBuffer.prototype.putInt32 = function(i) { - this.accommodate(4); - this.data.setInt32(this.write, i); - this.write += 4; - return this; -}; - -/** - * Puts a 16-bit integer in this buffer in little-endian order. - * - * @param i the 16-bit integer. - * - * @return this buffer. - */ -util.DataBuffer.prototype.putInt16Le = function(i) { - this.accommodate(2); - this.data.setInt16(this.write, i, true); - this.write += 2; - return this; -}; - -/** - * Puts a 24-bit integer in this buffer in little-endian order. - * - * @param i the 24-bit integer. - * - * @return this buffer. - */ -util.DataBuffer.prototype.putInt24Le = function(i) { - this.accommodate(3); - this.data.setInt8(this.write, i >> 16 & 0xFF); - this.data.setInt16(this.write, i >> 8 & 0xFFFF, true); - this.write += 3; - return this; -}; - -/** - * Puts a 32-bit integer in this buffer in little-endian order. - * - * @param i the 32-bit integer. - * - * @return this buffer. - */ -util.DataBuffer.prototype.putInt32Le = function(i) { - this.accommodate(4); - this.data.setInt32(this.write, i, true); - this.write += 4; - return this; -}; - -/** - * Puts an n-bit integer in this buffer in big-endian order. - * - * @param i the n-bit integer. - * @param n the number of bits in the integer (8, 16, 24, or 32). - * - * @return this buffer. - */ -util.DataBuffer.prototype.putInt = function(i, n) { - _checkBitsParam(n); - this.accommodate(n / 8); - do { - n -= 8; - this.data.setInt8(this.write++, (i >> n) & 0xFF); - } while(n > 0); - return this; -}; - -/** - * Puts a signed n-bit integer in this buffer in big-endian order. Two's - * complement representation is used. - * - * @param i the n-bit integer. - * @param n the number of bits in the integer. - * - * @return this buffer. - */ -util.DataBuffer.prototype.putSignedInt = function(i, n) { - _checkBitsParam(n); - this.accommodate(n / 8); - if(i < 0) { - i += 2 << (n - 1); - } - return this.putInt(i, n); -}; - -/** - * Gets a byte from this buffer and advances the read pointer by 1. - * - * @return the byte. - */ -util.DataBuffer.prototype.getByte = function() { - return this.data.getInt8(this.read++); -}; - -/** - * Gets a uint16 from this buffer in big-endian order and advances the read - * pointer by 2. - * - * @return the uint16. - */ -util.DataBuffer.prototype.getInt16 = function() { - var rval = this.data.getInt16(this.read); - this.read += 2; - return rval; -}; - -/** - * Gets a uint24 from this buffer in big-endian order and advances the read - * pointer by 3. - * - * @return the uint24. - */ -util.DataBuffer.prototype.getInt24 = function() { - var rval = ( - this.data.getInt16(this.read) << 8 ^ - this.data.getInt8(this.read + 2)); - this.read += 3; - return rval; -}; - -/** - * Gets a uint32 from this buffer in big-endian order and advances the read - * pointer by 4. - * - * @return the word. - */ -util.DataBuffer.prototype.getInt32 = function() { - var rval = this.data.getInt32(this.read); - this.read += 4; - return rval; -}; - -/** - * Gets a uint16 from this buffer in little-endian order and advances the read - * pointer by 2. - * - * @return the uint16. - */ -util.DataBuffer.prototype.getInt16Le = function() { - var rval = this.data.getInt16(this.read, true); - this.read += 2; - return rval; -}; - -/** - * Gets a uint24 from this buffer in little-endian order and advances the read - * pointer by 3. - * - * @return the uint24. - */ -util.DataBuffer.prototype.getInt24Le = function() { - var rval = ( - this.data.getInt8(this.read) ^ - this.data.getInt16(this.read + 1, true) << 8); - this.read += 3; - return rval; -}; - -/** - * Gets a uint32 from this buffer in little-endian order and advances the read - * pointer by 4. - * - * @return the word. - */ -util.DataBuffer.prototype.getInt32Le = function() { - var rval = this.data.getInt32(this.read, true); - this.read += 4; - return rval; -}; - -/** - * Gets an n-bit integer from this buffer in big-endian order and advances the - * read pointer by n/8. - * - * @param n the number of bits in the integer (8, 16, 24, or 32). - * - * @return the integer. - */ -util.DataBuffer.prototype.getInt = function(n) { - _checkBitsParam(n); - var rval = 0; - do { - // TODO: Use (rval * 0x100) if adding support for 33 to 53 bits. - rval = (rval << 8) + this.data.getInt8(this.read++); - n -= 8; - } while(n > 0); - return rval; -}; - -/** - * Gets a signed n-bit integer from this buffer in big-endian order, using - * two's complement, and advances the read pointer by n/8. - * - * @param n the number of bits in the integer (8, 16, 24, or 32). - * - * @return the integer. - */ -util.DataBuffer.prototype.getSignedInt = function(n) { - // getInt checks n - var x = this.getInt(n); - var max = 2 << (n - 2); - if(x >= max) { - x -= max << 1; - } - return x; -}; - -/** - * Reads bytes out as a binary encoded string and clears them from the - * buffer. - * - * @param count the number of bytes to read, undefined or null for all. - * - * @return a binary encoded string of bytes. - */ -util.DataBuffer.prototype.getBytes = function(count) { - // TODO: deprecate this method, it is poorly named and - // this.toString('binary') replaces it - // add a toTypedArray()/toArrayBuffer() function - var rval; - if(count) { - // read count bytes - count = Math.min(this.length(), count); - rval = this.data.slice(this.read, this.read + count); - this.read += count; - } else if(count === 0) { - rval = ''; - } else { - // read all bytes, optimize to only copy when needed - rval = (this.read === 0) ? this.data : this.data.slice(this.read); - this.clear(); - } - return rval; -}; - -/** - * Gets a binary encoded string of the bytes from this buffer without - * modifying the read pointer. - * - * @param count the number of bytes to get, omit to get all. - * - * @return a string full of binary encoded characters. - */ -util.DataBuffer.prototype.bytes = function(count) { - // TODO: deprecate this method, it is poorly named, add "getString()" - return (typeof(count) === 'undefined' ? - this.data.slice(this.read) : - this.data.slice(this.read, this.read + count)); -}; - -/** - * Gets a byte at the given index without modifying the read pointer. - * - * @param i the byte index. - * - * @return the byte. - */ -util.DataBuffer.prototype.at = function(i) { - return this.data.getUint8(this.read + i); -}; - -/** - * Puts a byte at the given index without modifying the read pointer. - * - * @param i the byte index. - * @param b the byte to put. - * - * @return this buffer. - */ -util.DataBuffer.prototype.setAt = function(i, b) { - this.data.setUint8(i, b); - return this; -}; - -/** - * Gets the last byte without modifying the read pointer. - * - * @return the last byte. - */ -util.DataBuffer.prototype.last = function() { - return this.data.getUint8(this.write - 1); -}; - -/** - * Creates a copy of this buffer. - * - * @return the copy. - */ -util.DataBuffer.prototype.copy = function() { - return new util.DataBuffer(this); -}; - -/** - * Compacts this buffer. - * - * @return this buffer. - */ -util.DataBuffer.prototype.compact = function() { - if(this.read > 0) { - var src = new Uint8Array(this.data.buffer, this.read); - var dst = new Uint8Array(src.byteLength); - dst.set(src); - this.data = new DataView(dst); - this.write -= this.read; - this.read = 0; - } - return this; -}; - -/** - * Clears this buffer. - * - * @return this buffer. - */ -util.DataBuffer.prototype.clear = function() { - this.data = new DataView(new ArrayBuffer(0)); - this.read = this.write = 0; - return this; -}; - -/** - * Shortens this buffer by triming bytes off of the end of this buffer. - * - * @param count the number of bytes to trim off. - * - * @return this buffer. - */ -util.DataBuffer.prototype.truncate = function(count) { - this.write = Math.max(0, this.length() - count); - this.read = Math.min(this.read, this.write); - return this; -}; - -/** - * Converts this buffer to a hexadecimal string. - * - * @return a hexadecimal string. - */ -util.DataBuffer.prototype.toHex = function() { - var rval = ''; - for(var i = this.read; i < this.data.byteLength; ++i) { - var b = this.data.getUint8(i); - if(b < 16) { - rval += '0'; - } - rval += b.toString(16); - } - return rval; -}; - -/** - * Converts this buffer to a string, using the given encoding. If no - * encoding is given, 'utf8' (UTF-8) is used. - * - * @param [encoding] the encoding to use: 'binary', 'utf8', 'utf16', 'hex', - * 'base64' (default: 'utf8'). - * - * @return a string representation of the bytes in this buffer. - */ -util.DataBuffer.prototype.toString = function(encoding) { - var view = new Uint8Array(this.data, this.read, this.length()); - encoding = encoding || 'utf8'; - - // encode to string - if(encoding === 'binary' || encoding === 'raw') { - return util.binary.raw.encode(view); - } - if(encoding === 'hex') { - return util.binary.hex.encode(view); - } - if(encoding === 'base64') { - return util.binary.base64.encode(view); - } - - // decode to text - if(encoding === 'utf8') { - return util.text.utf8.decode(view); - } - if(encoding === 'utf16') { - return util.text.utf16.decode(view); - } - - throw new Error('Invalid encoding: ' + encoding); -}; - -/** End Buffer w/UInt8Array backing */ - -/** - * Creates a buffer that stores bytes. A value may be given to populate the - * buffer with data. This value can either be string of encoded bytes or a - * regular string of characters. When passing a string of binary encoded - * bytes, the encoding `raw` should be given. This is also the default. When - * passing a string of characters, the encoding `utf8` should be given. - * - * @param [input] a string with encoded bytes to store in the buffer. - * @param [encoding] (default: 'raw', other: 'utf8'). - */ -util.createBuffer = function(input, encoding) { - // TODO: deprecate, use new ByteBuffer() instead - encoding = encoding || 'raw'; - if(input !== undefined && encoding === 'utf8') { - input = util.encodeUtf8(input); - } - return new util.ByteBuffer(input); -}; - -/** - * Fills a string with a particular value. If you want the string to be a byte - * string, pass in String.fromCharCode(theByte). - * - * @param c the character to fill the string with, use String.fromCharCode - * to fill the string with a byte value. - * @param n the number of characters of value c to fill with. - * - * @return the filled string. - */ -util.fillString = function(c, n) { - var s = ''; - while(n > 0) { - if(n & 1) { - s += c; - } - n >>>= 1; - if(n > 0) { - c += c; - } - } - return s; -}; - -/** - * Performs a per byte XOR between two byte strings and returns the result as a - * string of bytes. - * - * @param s1 first string of bytes. - * @param s2 second string of bytes. - * @param n the number of bytes to XOR. - * - * @return the XOR'd result. - */ -util.xorBytes = function(s1, s2, n) { - var s3 = ''; - var b = ''; - var t = ''; - var i = 0; - var c = 0; - for(; n > 0; --n, ++i) { - b = s1.charCodeAt(i) ^ s2.charCodeAt(i); - if(c >= 10) { - s3 += t; - t = ''; - c = 0; - } - t += String.fromCharCode(b); - ++c; - } - s3 += t; - return s3; -}; - -/** - * Converts a hex string into a 'binary' encoded string of bytes. - * - * @param hex the hexadecimal string to convert. - * - * @return the binary-encoded string of bytes. - */ -util.hexToBytes = function(hex) { - // TODO: deprecate: "Deprecated. Use util.binary.hex.decode instead." - var rval = ''; - var i = 0; - if(hex.length & 1 == 1) { - // odd number of characters, convert first character alone - i = 1; - rval += String.fromCharCode(parseInt(hex[0], 16)); - } - // convert 2 characters (1 byte) at a time - for(; i < hex.length; i += 2) { - rval += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); - } - return rval; -}; - -/** - * Converts a 'binary' encoded string of bytes to hex. - * - * @param bytes the byte string to convert. - * - * @return the string of hexadecimal characters. - */ -util.bytesToHex = function(bytes) { - // TODO: deprecate: "Deprecated. Use util.binary.hex.encode instead." - return util.createBuffer(bytes).toHex(); -}; - -/** - * Converts an 32-bit integer to 4-big-endian byte string. - * - * @param i the integer. - * - * @return the byte string. - */ -util.int32ToBytes = function(i) { - return ( - String.fromCharCode(i >> 24 & 0xFF) + - String.fromCharCode(i >> 16 & 0xFF) + - String.fromCharCode(i >> 8 & 0xFF) + - String.fromCharCode(i & 0xFF)); -}; - -// base64 characters, reverse mapping -var _base64 = - 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; -var _base64Idx = [ -/*43 -43 = 0*/ -/*'+', 1, 2, 3,'/' */ - 62, -1, -1, -1, 63, - -/*'0','1','2','3','4','5','6','7','8','9' */ - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - -/*15, 16, 17,'=', 19, 20, 21 */ - -1, -1, -1, 64, -1, -1, -1, - -/*65 - 43 = 22*/ -/*'A','B','C','D','E','F','G','H','I','J','K','L','M', */ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - -/*'N','O','P','Q','R','S','T','U','V','W','X','Y','Z' */ - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - -/*91 - 43 = 48 */ -/*48, 49, 50, 51, 52, 53 */ - -1, -1, -1, -1, -1, -1, - -/*97 - 43 = 54*/ -/*'a','b','c','d','e','f','g','h','i','j','k','l','m' */ - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - -/*'n','o','p','q','r','s','t','u','v','w','x','y','z' */ - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51 -]; - -// base58 characters (Bitcoin alphabet) -var _base58 = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'; - -/** - * Base64 encodes a 'binary' encoded string of bytes. - * - * @param input the binary encoded string of bytes to base64-encode. - * @param maxline the maximum number of encoded characters per line to use, - * defaults to none. - * - * @return the base64-encoded output. - */ -util.encode64 = function(input, maxline) { - // TODO: deprecate: "Deprecated. Use util.binary.base64.encode instead." - var line = ''; - var output = ''; - var chr1, chr2, chr3; - var i = 0; - while(i < input.length) { - chr1 = input.charCodeAt(i++); - chr2 = input.charCodeAt(i++); - chr3 = input.charCodeAt(i++); - - // encode 4 character group - line += _base64.charAt(chr1 >> 2); - line += _base64.charAt(((chr1 & 3) << 4) | (chr2 >> 4)); - if(isNaN(chr2)) { - line += '=='; - } else { - line += _base64.charAt(((chr2 & 15) << 2) | (chr3 >> 6)); - line += isNaN(chr3) ? '=' : _base64.charAt(chr3 & 63); - } - - if(maxline && line.length > maxline) { - output += line.substr(0, maxline) + '\r\n'; - line = line.substr(maxline); - } - } - output += line; - return output; -}; - -/** - * Base64 decodes a string into a 'binary' encoded string of bytes. - * - * @param input the base64-encoded input. - * - * @return the binary encoded string. - */ -util.decode64 = function(input) { - // TODO: deprecate: "Deprecated. Use util.binary.base64.decode instead." - - // remove all non-base64 characters - input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ''); - - var output = ''; - var enc1, enc2, enc3, enc4; - var i = 0; - - while(i < input.length) { - enc1 = _base64Idx[input.charCodeAt(i++) - 43]; - enc2 = _base64Idx[input.charCodeAt(i++) - 43]; - enc3 = _base64Idx[input.charCodeAt(i++) - 43]; - enc4 = _base64Idx[input.charCodeAt(i++) - 43]; - - output += String.fromCharCode((enc1 << 2) | (enc2 >> 4)); - if(enc3 !== 64) { - // decoded at least 2 bytes - output += String.fromCharCode(((enc2 & 15) << 4) | (enc3 >> 2)); - if(enc4 !== 64) { - // decoded 3 bytes - output += String.fromCharCode(((enc3 & 3) << 6) | enc4); - } - } - } - - return output; -}; - -/** - * Encodes the given string of characters (a standard JavaScript - * string) as a binary encoded string where the bytes represent - * a UTF-8 encoded string of characters. Non-ASCII characters will be - * encoded as multiple bytes according to UTF-8. - * - * @param str a standard string of characters to encode. - * - * @return the binary encoded string. - */ -util.encodeUtf8 = function(str) { - return unescape(encodeURIComponent(str)); -}; - -/** - * Decodes a binary encoded string that contains bytes that - * represent a UTF-8 encoded string of characters -- into a - * string of characters (a standard JavaScript string). - * - * @param str the binary encoded string to decode. - * - * @return the resulting standard string of characters. - */ -util.decodeUtf8 = function(str) { - return decodeURIComponent(escape(str)); -}; - -// binary encoding/decoding tools -// FIXME: Experimental. Do not use yet. -util.binary = { - raw: {}, - hex: {}, - base64: {}, - base58: {}, - baseN : { - encode: baseN.encode, - decode: baseN.decode - } -}; - -/** - * Encodes a Uint8Array as a binary-encoded string. This encoding uses - * a value between 0 and 255 for each character. - * - * @param bytes the Uint8Array to encode. - * - * @return the binary-encoded string. - */ -util.binary.raw.encode = function(bytes) { - return String.fromCharCode.apply(null, bytes); -}; - -/** - * Decodes a binary-encoded string to a Uint8Array. This encoding uses - * a value between 0 and 255 for each character. - * - * @param str the binary-encoded string to decode. - * @param [output] an optional Uint8Array to write the output to; if it - * is too small, an exception will be thrown. - * @param [offset] the start offset for writing to the output (default: 0). - * - * @return the Uint8Array or the number of bytes written if output was given. - */ -util.binary.raw.decode = function(str, output, offset) { - var out = output; - if(!out) { - out = new Uint8Array(str.length); - } - offset = offset || 0; - var j = offset; - for(var i = 0; i < str.length; ++i) { - out[j++] = str.charCodeAt(i); - } - return output ? (j - offset) : out; -}; - -/** - * Encodes a 'binary' string, ArrayBuffer, DataView, TypedArray, or - * ByteBuffer as a string of hexadecimal characters. - * - * @param bytes the bytes to convert. - * - * @return the string of hexadecimal characters. - */ -util.binary.hex.encode = util.bytesToHex; - -/** - * Decodes a hex-encoded string to a Uint8Array. - * - * @param hex the hexadecimal string to convert. - * @param [output] an optional Uint8Array to write the output to; if it - * is too small, an exception will be thrown. - * @param [offset] the start offset for writing to the output (default: 0). - * - * @return the Uint8Array or the number of bytes written if output was given. - */ -util.binary.hex.decode = function(hex, output, offset) { - var out = output; - if(!out) { - out = new Uint8Array(Math.ceil(hex.length / 2)); - } - offset = offset || 0; - var i = 0, j = offset; - if(hex.length & 1) { - // odd number of characters, convert first character alone - i = 1; - out[j++] = parseInt(hex[0], 16); - } - // convert 2 characters (1 byte) at a time - for(; i < hex.length; i += 2) { - out[j++] = parseInt(hex.substr(i, 2), 16); - } - return output ? (j - offset) : out; -}; - -/** - * Base64-encodes a Uint8Array. - * - * @param input the Uint8Array to encode. - * @param maxline the maximum number of encoded characters per line to use, - * defaults to none. - * - * @return the base64-encoded output string. - */ -util.binary.base64.encode = function(input, maxline) { - var line = ''; - var output = ''; - var chr1, chr2, chr3; - var i = 0; - while(i < input.byteLength) { - chr1 = input[i++]; - chr2 = input[i++]; - chr3 = input[i++]; - - // encode 4 character group - line += _base64.charAt(chr1 >> 2); - line += _base64.charAt(((chr1 & 3) << 4) | (chr2 >> 4)); - if(isNaN(chr2)) { - line += '=='; - } else { - line += _base64.charAt(((chr2 & 15) << 2) | (chr3 >> 6)); - line += isNaN(chr3) ? '=' : _base64.charAt(chr3 & 63); - } - - if(maxline && line.length > maxline) { - output += line.substr(0, maxline) + '\r\n'; - line = line.substr(maxline); - } - } - output += line; - return output; -}; - -/** - * Decodes a base64-encoded string to a Uint8Array. - * - * @param input the base64-encoded input string. - * @param [output] an optional Uint8Array to write the output to; if it - * is too small, an exception will be thrown. - * @param [offset] the start offset for writing to the output (default: 0). - * - * @return the Uint8Array or the number of bytes written if output was given. - */ -util.binary.base64.decode = function(input, output, offset) { - var out = output; - if(!out) { - out = new Uint8Array(Math.ceil(input.length / 4) * 3); - } - - // remove all non-base64 characters - input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ''); - - offset = offset || 0; - var enc1, enc2, enc3, enc4; - var i = 0, j = offset; - - while(i < input.length) { - enc1 = _base64Idx[input.charCodeAt(i++) - 43]; - enc2 = _base64Idx[input.charCodeAt(i++) - 43]; - enc3 = _base64Idx[input.charCodeAt(i++) - 43]; - enc4 = _base64Idx[input.charCodeAt(i++) - 43]; - - out[j++] = (enc1 << 2) | (enc2 >> 4); - if(enc3 !== 64) { - // decoded at least 2 bytes - out[j++] = ((enc2 & 15) << 4) | (enc3 >> 2); - if(enc4 !== 64) { - // decoded 3 bytes - out[j++] = ((enc3 & 3) << 6) | enc4; - } - } - } - - // make sure result is the exact decoded length - return output ? (j - offset) : out.subarray(0, j); -}; - -// add support for base58 encoding/decoding with Bitcoin alphabet -util.binary.base58.encode = function(input, maxline) { - return util.binary.baseN.encode(input, _base58, maxline); -}; -util.binary.base58.decode = function(input, maxline) { - return util.binary.baseN.decode(input, _base58, maxline); -}; - -// text encoding/decoding tools -// FIXME: Experimental. Do not use yet. -util.text = { - utf8: {}, - utf16: {} -}; - -/** - * Encodes the given string as UTF-8 in a Uint8Array. - * - * @param str the string to encode. - * @param [output] an optional Uint8Array to write the output to; if it - * is too small, an exception will be thrown. - * @param [offset] the start offset for writing to the output (default: 0). - * - * @return the Uint8Array or the number of bytes written if output was given. - */ -util.text.utf8.encode = function(str, output, offset) { - str = util.encodeUtf8(str); - var out = output; - if(!out) { - out = new Uint8Array(str.length); - } - offset = offset || 0; - var j = offset; - for(var i = 0; i < str.length; ++i) { - out[j++] = str.charCodeAt(i); - } - return output ? (j - offset) : out; -}; - -/** - * Decodes the UTF-8 contents from a Uint8Array. - * - * @param bytes the Uint8Array to decode. - * - * @return the resulting string. - */ -util.text.utf8.decode = function(bytes) { - return util.decodeUtf8(String.fromCharCode.apply(null, bytes)); -}; - -/** - * Encodes the given string as UTF-16 in a Uint8Array. - * - * @param str the string to encode. - * @param [output] an optional Uint8Array to write the output to; if it - * is too small, an exception will be thrown. - * @param [offset] the start offset for writing to the output (default: 0). - * - * @return the Uint8Array or the number of bytes written if output was given. - */ -util.text.utf16.encode = function(str, output, offset) { - var out = output; - if(!out) { - out = new Uint8Array(str.length * 2); - } - var view = new Uint16Array(out.buffer); - offset = offset || 0; - var j = offset; - var k = offset; - for(var i = 0; i < str.length; ++i) { - view[k++] = str.charCodeAt(i); - j += 2; - } - return output ? (j - offset) : out; -}; - -/** - * Decodes the UTF-16 contents from a Uint8Array. - * - * @param bytes the Uint8Array to decode. - * - * @return the resulting string. - */ -util.text.utf16.decode = function(bytes) { - return String.fromCharCode.apply(null, new Uint16Array(bytes.buffer)); -}; - -/** - * Deflates the given data using a flash interface. - * - * @param api the flash interface. - * @param bytes the data. - * @param raw true to return only raw deflate data, false to include zlib - * header and trailer. - * - * @return the deflated data as a string. - */ -util.deflate = function(api, bytes, raw) { - bytes = util.decode64(api.deflate(util.encode64(bytes)).rval); - - // strip zlib header and trailer if necessary - if(raw) { - // zlib header is 2 bytes (CMF,FLG) where FLG indicates that - // there is a 4-byte DICT (alder-32) block before the data if - // its 5th bit is set - var start = 2; - var flg = bytes.charCodeAt(1); - if(flg & 0x20) { - start = 6; - } - // zlib trailer is 4 bytes of adler-32 - bytes = bytes.substring(start, bytes.length - 4); - } - - return bytes; -}; - -/** - * Inflates the given data using a flash interface. - * - * @param api the flash interface. - * @param bytes the data. - * @param raw true if the incoming data has no zlib header or trailer and is - * raw DEFLATE data. - * - * @return the inflated data as a string, null on error. - */ -util.inflate = function(api, bytes, raw) { - // TODO: add zlib header and trailer if necessary/possible - var rval = api.inflate(util.encode64(bytes)).rval; - return (rval === null) ? null : util.decode64(rval); -}; - -/** - * Sets a storage object. - * - * @param api the storage interface. - * @param id the storage ID to use. - * @param obj the storage object, null to remove. - */ -var _setStorageObject = function(api, id, obj) { - if(!api) { - throw new Error('WebStorage not available.'); - } - - var rval; - if(obj === null) { - rval = api.removeItem(id); - } else { - // json-encode and base64-encode object - obj = util.encode64(JSON.stringify(obj)); - rval = api.setItem(id, obj); - } - - // handle potential flash error - if(typeof(rval) !== 'undefined' && rval.rval !== true) { - var error = new Error(rval.error.message); - error.id = rval.error.id; - error.name = rval.error.name; - throw error; - } -}; - -/** - * Gets a storage object. - * - * @param api the storage interface. - * @param id the storage ID to use. - * - * @return the storage object entry or null if none exists. - */ -var _getStorageObject = function(api, id) { - if(!api) { - throw new Error('WebStorage not available.'); - } - - // get the existing entry - var rval = api.getItem(id); - - /* Note: We check api.init because we can't do (api == localStorage) - on IE because of "Class doesn't support Automation" exception. Only - the flash api has an init method so this works too, but we need a - better solution in the future. */ - - // flash returns item wrapped in an object, handle special case - if(api.init) { - if(rval.rval === null) { - if(rval.error) { - var error = new Error(rval.error.message); - error.id = rval.error.id; - error.name = rval.error.name; - throw error; - } - // no error, but also no item - rval = null; - } else { - rval = rval.rval; - } - } - - // handle decoding - if(rval !== null) { - // base64-decode and json-decode data - rval = JSON.parse(util.decode64(rval)); - } - - return rval; -}; - -/** - * Stores an item in local storage. - * - * @param api the storage interface. - * @param id the storage ID to use. - * @param key the key for the item. - * @param data the data for the item (any javascript object/primitive). - */ -var _setItem = function(api, id, key, data) { - // get storage object - var obj = _getStorageObject(api, id); - if(obj === null) { - // create a new storage object - obj = {}; - } - // update key - obj[key] = data; - - // set storage object - _setStorageObject(api, id, obj); -}; - -/** - * Gets an item from local storage. - * - * @param api the storage interface. - * @param id the storage ID to use. - * @param key the key for the item. - * - * @return the item. - */ -var _getItem = function(api, id, key) { - // get storage object - var rval = _getStorageObject(api, id); - if(rval !== null) { - // return data at key - rval = (key in rval) ? rval[key] : null; - } - - return rval; -}; - -/** - * Removes an item from local storage. - * - * @param api the storage interface. - * @param id the storage ID to use. - * @param key the key for the item. - */ -var _removeItem = function(api, id, key) { - // get storage object - var obj = _getStorageObject(api, id); - if(obj !== null && key in obj) { - // remove key - delete obj[key]; - - // see if entry has no keys remaining - var empty = true; - for(var prop in obj) { - empty = false; - break; - } - if(empty) { - // remove entry entirely if no keys are left - obj = null; - } - - // set storage object - _setStorageObject(api, id, obj); - } -}; - -/** - * Clears the local disk storage identified by the given ID. - * - * @param api the storage interface. - * @param id the storage ID to use. - */ -var _clearItems = function(api, id) { - _setStorageObject(api, id, null); -}; - -/** - * Calls a storage function. - * - * @param func the function to call. - * @param args the arguments for the function. - * @param location the location argument. - * - * @return the return value from the function. - */ -var _callStorageFunction = function(func, args, location) { - var rval = null; - - // default storage types - if(typeof(location) === 'undefined') { - location = ['web', 'flash']; - } - - // apply storage types in order of preference - var type; - var done = false; - var exception = null; - for(var idx in location) { - type = location[idx]; - try { - if(type === 'flash' || type === 'both') { - if(args[0] === null) { - throw new Error('Flash local storage not available.'); - } - rval = func.apply(this, args); - done = (type === 'flash'); - } - if(type === 'web' || type === 'both') { - args[0] = localStorage; - rval = func.apply(this, args); - done = true; - } - } catch(ex) { - exception = ex; - } - if(done) { - break; - } - } - - if(!done) { - throw exception; - } - - return rval; -}; - -/** - * Stores an item on local disk. - * - * The available types of local storage include 'flash', 'web', and 'both'. - * - * The type 'flash' refers to flash local storage (SharedObject). In order - * to use flash local storage, the 'api' parameter must be valid. The type - * 'web' refers to WebStorage, if supported by the browser. The type 'both' - * refers to storing using both 'flash' and 'web', not just one or the - * other. - * - * The location array should list the storage types to use in order of - * preference: - * - * ['flash']: flash only storage - * ['web']: web only storage - * ['both']: try to store in both - * ['flash','web']: store in flash first, but if not available, 'web' - * ['web','flash']: store in web first, but if not available, 'flash' - * - * The location array defaults to: ['web', 'flash'] - * - * @param api the flash interface, null to use only WebStorage. - * @param id the storage ID to use. - * @param key the key for the item. - * @param data the data for the item (any javascript object/primitive). - * @param location an array with the preferred types of storage to use. - */ -util.setItem = function(api, id, key, data, location) { - _callStorageFunction(_setItem, arguments, location); -}; - -/** - * Gets an item on local disk. - * - * Set setItem() for details on storage types. - * - * @param api the flash interface, null to use only WebStorage. - * @param id the storage ID to use. - * @param key the key for the item. - * @param location an array with the preferred types of storage to use. - * - * @return the item. - */ -util.getItem = function(api, id, key, location) { - return _callStorageFunction(_getItem, arguments, location); -}; - -/** - * Removes an item on local disk. - * - * Set setItem() for details on storage types. - * - * @param api the flash interface. - * @param id the storage ID to use. - * @param key the key for the item. - * @param location an array with the preferred types of storage to use. - */ -util.removeItem = function(api, id, key, location) { - _callStorageFunction(_removeItem, arguments, location); -}; - -/** - * Clears the local disk storage identified by the given ID. - * - * Set setItem() for details on storage types. - * - * @param api the flash interface if flash is available. - * @param id the storage ID to use. - * @param location an array with the preferred types of storage to use. - */ -util.clearItems = function(api, id, location) { - _callStorageFunction(_clearItems, arguments, location); -}; - -/** - * Parses the scheme, host, and port from an http(s) url. - * - * @param str the url string. - * - * @return the parsed url object or null if the url is invalid. - */ -util.parseUrl = function(str) { - // FIXME: this regex looks a bit broken - var regex = /^(https?):\/\/([^:&^\/]*):?(\d*)(.*)$/g; - regex.lastIndex = 0; - var m = regex.exec(str); - var url = (m === null) ? null : { - full: str, - scheme: m[1], - host: m[2], - port: m[3], - path: m[4] - }; - if(url) { - url.fullHost = url.host; - if(url.port) { - if(url.port !== 80 && url.scheme === 'http') { - url.fullHost += ':' + url.port; - } else if(url.port !== 443 && url.scheme === 'https') { - url.fullHost += ':' + url.port; - } - } else if(url.scheme === 'http') { - url.port = 80; - } else if(url.scheme === 'https') { - url.port = 443; - } - url.full = url.scheme + '://' + url.fullHost; - } - return url; -}; - -/* Storage for query variables */ -var _queryVariables = null; - -/** - * Returns the window location query variables. Query is parsed on the first - * call and the same object is returned on subsequent calls. The mapping - * is from keys to an array of values. Parameters without values will have - * an object key set but no value added to the value array. Values are - * unescaped. - * - * ...?k1=v1&k2=v2: - * { - * "k1": ["v1"], - * "k2": ["v2"] - * } - * - * ...?k1=v1&k1=v2: - * { - * "k1": ["v1", "v2"] - * } - * - * ...?k1=v1&k2: - * { - * "k1": ["v1"], - * "k2": [] - * } - * - * ...?k1=v1&k1: - * { - * "k1": ["v1"] - * } - * - * ...?k1&k1: - * { - * "k1": [] - * } - * - * @param query the query string to parse (optional, default to cached - * results from parsing window location search query). - * - * @return object mapping keys to variables. - */ -util.getQueryVariables = function(query) { - var parse = function(q) { - var rval = {}; - var kvpairs = q.split('&'); - for(var i = 0; i < kvpairs.length; i++) { - var pos = kvpairs[i].indexOf('='); - var key; - var val; - if(pos > 0) { - key = kvpairs[i].substring(0, pos); - val = kvpairs[i].substring(pos + 1); - } else { - key = kvpairs[i]; - val = null; - } - if(!(key in rval)) { - rval[key] = []; - } - // disallow overriding object prototype keys - if(!(key in Object.prototype) && val !== null) { - rval[key].push(unescape(val)); - } - } - return rval; - }; - - var rval; - if(typeof(query) === 'undefined') { - // set cached variables if needed - if(_queryVariables === null) { - if(typeof(window) !== 'undefined' && window.location && window.location.search) { - // parse window search query - _queryVariables = parse(window.location.search.substring(1)); - } else { - // no query variables available - _queryVariables = {}; - } - } - rval = _queryVariables; - } else { - // parse given query - rval = parse(query); - } - return rval; -}; - -/** - * Parses a fragment into a path and query. This method will take a URI - * fragment and break it up as if it were the main URI. For example: - * /bar/baz?a=1&b=2 - * results in: - * { - * path: ["bar", "baz"], - * query: {"k1": ["v1"], "k2": ["v2"]} - * } - * - * @return object with a path array and query object. - */ -util.parseFragment = function(fragment) { - // default to whole fragment - var fp = fragment; - var fq = ''; - // split into path and query if possible at the first '?' - var pos = fragment.indexOf('?'); - if(pos > 0) { - fp = fragment.substring(0, pos); - fq = fragment.substring(pos + 1); - } - // split path based on '/' and ignore first element if empty - var path = fp.split('/'); - if(path.length > 0 && path[0] === '') { - path.shift(); - } - // convert query into object - var query = (fq === '') ? {} : util.getQueryVariables(fq); - - return { - pathString: fp, - queryString: fq, - path: path, - query: query - }; -}; - -/** - * Makes a request out of a URI-like request string. This is intended to - * be used where a fragment id (after a URI '#') is parsed as a URI with - * path and query parts. The string should have a path beginning and - * delimited by '/' and optional query parameters following a '?'. The - * query should be a standard URL set of key value pairs delimited by - * '&'. For backwards compatibility the initial '/' on the path is not - * required. The request object has the following API, (fully described - * in the method code): - * { - * path: . - * query: , - * getPath(i): get part or all of the split path array, - * getQuery(k, i): get part or all of a query key array, - * getQueryLast(k, _default): get last element of a query key array. - * } - * - * @return object with request parameters. - */ -util.makeRequest = function(reqString) { - var frag = util.parseFragment(reqString); - var req = { - // full path string - path: frag.pathString, - // full query string - query: frag.queryString, - /** - * Get path or element in path. - * - * @param i optional path index. - * - * @return path or part of path if i provided. - */ - getPath: function(i) { - return (typeof(i) === 'undefined') ? frag.path : frag.path[i]; - }, - /** - * Get query, values for a key, or value for a key index. - * - * @param k optional query key. - * @param i optional query key index. - * - * @return query, values for a key, or value for a key index. - */ - getQuery: function(k, i) { - var rval; - if(typeof(k) === 'undefined') { - rval = frag.query; - } else { - rval = frag.query[k]; - if(rval && typeof(i) !== 'undefined') { - rval = rval[i]; - } - } - return rval; - }, - getQueryLast: function(k, _default) { - var rval; - var vals = req.getQuery(k); - if(vals) { - rval = vals[vals.length - 1]; - } else { - rval = _default; - } - return rval; - } - }; - return req; -}; - -/** - * Makes a URI out of a path, an object with query parameters, and a - * fragment. Uses jQuery.param() internally for query string creation. - * If the path is an array, it will be joined with '/'. - * - * @param path string path or array of strings. - * @param query object with query parameters. (optional) - * @param fragment fragment string. (optional) - * - * @return string object with request parameters. - */ -util.makeLink = function(path, query, fragment) { - // join path parts if needed - path = jQuery.isArray(path) ? path.join('/') : path; - - var qstr = jQuery.param(query || {}); - fragment = fragment || ''; - return path + - ((qstr.length > 0) ? ('?' + qstr) : '') + - ((fragment.length > 0) ? ('#' + fragment) : ''); -}; - -/** - * Check if an object is empty. - * - * Taken from: - * http://stackoverflow.com/questions/679915/how-do-i-test-for-an-empty-javascript-object-from-json/679937#679937 - * - * @param object the object to check. - */ -util.isEmpty = function(obj) { - for(var prop in obj) { - if(obj.hasOwnProperty(prop)) { - return false; - } - } - return true; -}; - -/** - * Format with simple printf-style interpolation. - * - * %%: literal '%' - * %s,%o: convert next argument into a string. - * - * @param format the string to format. - * @param ... arguments to interpolate into the format string. - */ -util.format = function(format) { - var re = /%./g; - // current match - var match; - // current part - var part; - // current arg index - var argi = 0; - // collected parts to recombine later - var parts = []; - // last index found - var last = 0; - // loop while matches remain - while((match = re.exec(format))) { - part = format.substring(last, re.lastIndex - 2); - // don't add empty strings (ie, parts between %s%s) - if(part.length > 0) { - parts.push(part); - } - last = re.lastIndex; - // switch on % code - var code = match[0][1]; - switch(code) { - case 's': - case 'o': - // check if enough arguments were given - if(argi < arguments.length) { - parts.push(arguments[argi++ + 1]); - } else { - parts.push(''); - } - break; - // FIXME: do proper formating for numbers, etc - //case 'f': - //case 'd': - case '%': - parts.push('%'); - break; - default: - parts.push('<%' + code + '?>'); - } - } - // add trailing part of format string - parts.push(format.substring(last)); - return parts.join(''); -}; - -/** - * Formats a number. - * - * http://snipplr.com/view/5945/javascript-numberformat--ported-from-php/ - */ -util.formatNumber = function(number, decimals, dec_point, thousands_sep) { - // http://kevin.vanzonneveld.net - // + original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com) - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + bugfix by: Michael White (http://crestidg.com) - // + bugfix by: Benjamin Lupton - // + bugfix by: Allan Jensen (http://www.winternet.no) - // + revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com) - // * example 1: number_format(1234.5678, 2, '.', ''); - // * returns 1: 1234.57 - - var n = number, c = isNaN(decimals = Math.abs(decimals)) ? 2 : decimals; - var d = dec_point === undefined ? ',' : dec_point; - var t = thousands_sep === undefined ? - '.' : thousands_sep, s = n < 0 ? '-' : ''; - var i = parseInt((n = Math.abs(+n || 0).toFixed(c)), 10) + ''; - var j = (i.length > 3) ? i.length % 3 : 0; - return s + (j ? i.substr(0, j) + t : '') + - i.substr(j).replace(/(\d{3})(?=\d)/g, '$1' + t) + - (c ? d + Math.abs(n - i).toFixed(c).slice(2) : ''); -}; - -/** - * Formats a byte size. - * - * http://snipplr.com/view/5949/format-humanize-file-byte-size-presentation-in-javascript/ - */ -util.formatSize = function(size) { - if(size >= 1073741824) { - size = util.formatNumber(size / 1073741824, 2, '.', '') + ' GiB'; - } else if(size >= 1048576) { - size = util.formatNumber(size / 1048576, 2, '.', '') + ' MiB'; - } else if(size >= 1024) { - size = util.formatNumber(size / 1024, 0) + ' KiB'; - } else { - size = util.formatNumber(size, 0) + ' bytes'; - } - return size; -}; - -/** - * Converts an IPv4 or IPv6 string representation into bytes (in network order). - * - * @param ip the IPv4 or IPv6 address to convert. - * - * @return the 4-byte IPv6 or 16-byte IPv6 address or null if the address can't - * be parsed. - */ -util.bytesFromIP = function(ip) { - if(ip.indexOf('.') !== -1) { - return util.bytesFromIPv4(ip); - } - if(ip.indexOf(':') !== -1) { - return util.bytesFromIPv6(ip); - } - return null; -}; - -/** - * Converts an IPv4 string representation into bytes (in network order). - * - * @param ip the IPv4 address to convert. - * - * @return the 4-byte address or null if the address can't be parsed. - */ -util.bytesFromIPv4 = function(ip) { - ip = ip.split('.'); - if(ip.length !== 4) { - return null; - } - var b = util.createBuffer(); - for(var i = 0; i < ip.length; ++i) { - var num = parseInt(ip[i], 10); - if(isNaN(num)) { - return null; - } - b.putByte(num); - } - return b.getBytes(); -}; - -/** - * Converts an IPv6 string representation into bytes (in network order). - * - * @param ip the IPv6 address to convert. - * - * @return the 16-byte address or null if the address can't be parsed. - */ -util.bytesFromIPv6 = function(ip) { - var blanks = 0; - ip = ip.split(':').filter(function(e) { - if(e.length === 0) ++blanks; - return true; - }); - var zeros = (8 - ip.length + blanks) * 2; - var b = util.createBuffer(); - for(var i = 0; i < 8; ++i) { - if(!ip[i] || ip[i].length === 0) { - b.fillWithByte(0, zeros); - zeros = 0; - continue; - } - var bytes = util.hexToBytes(ip[i]); - if(bytes.length < 2) { - b.putByte(0); - } - b.putBytes(bytes); - } - return b.getBytes(); -}; - -/** - * Converts 4-bytes into an IPv4 string representation or 16-bytes into - * an IPv6 string representation. The bytes must be in network order. - * - * @param bytes the bytes to convert. - * - * @return the IPv4 or IPv6 string representation if 4 or 16 bytes, - * respectively, are given, otherwise null. - */ -util.bytesToIP = function(bytes) { - if(bytes.length === 4) { - return util.bytesToIPv4(bytes); - } - if(bytes.length === 16) { - return util.bytesToIPv6(bytes); - } - return null; -}; - -/** - * Converts 4-bytes into an IPv4 string representation. The bytes must be - * in network order. - * - * @param bytes the bytes to convert. - * - * @return the IPv4 string representation or null for an invalid # of bytes. - */ -util.bytesToIPv4 = function(bytes) { - if(bytes.length !== 4) { - return null; - } - var ip = []; - for(var i = 0; i < bytes.length; ++i) { - ip.push(bytes.charCodeAt(i)); - } - return ip.join('.'); -}; - -/** - * Converts 16-bytes into an IPv16 string representation. The bytes must be - * in network order. - * - * @param bytes the bytes to convert. - * - * @return the IPv16 string representation or null for an invalid # of bytes. - */ -util.bytesToIPv6 = function(bytes) { - if(bytes.length !== 16) { - return null; - } - var ip = []; - var zeroGroups = []; - var zeroMaxGroup = 0; - for(var i = 0; i < bytes.length; i += 2) { - var hex = util.bytesToHex(bytes[i] + bytes[i + 1]); - // canonicalize zero representation - while(hex[0] === '0' && hex !== '0') { - hex = hex.substr(1); - } - if(hex === '0') { - var last = zeroGroups[zeroGroups.length - 1]; - var idx = ip.length; - if(!last || idx !== last.end + 1) { - zeroGroups.push({start: idx, end: idx}); - } else { - last.end = idx; - if((last.end - last.start) > - (zeroGroups[zeroMaxGroup].end - zeroGroups[zeroMaxGroup].start)) { - zeroMaxGroup = zeroGroups.length - 1; - } - } - } - ip.push(hex); - } - if(zeroGroups.length > 0) { - var group = zeroGroups[zeroMaxGroup]; - // only shorten group of length > 0 - if(group.end - group.start > 0) { - ip.splice(group.start, group.end - group.start + 1, ''); - if(group.start === 0) { - ip.unshift(''); - } - if(group.end === 7) { - ip.push(''); - } - } - } - return ip.join(':'); -}; - -/** - * Estimates the number of processes that can be run concurrently. If - * creating Web Workers, keep in mind that the main JavaScript process needs - * its own core. - * - * @param options the options to use: - * update true to force an update (not use the cached value). - * @param callback(err, max) called once the operation completes. - */ -util.estimateCores = function(options, callback) { - if(typeof options === 'function') { - callback = options; - options = {}; - } - options = options || {}; - if('cores' in util && !options.update) { - return callback(null, util.cores); - } - if(typeof navigator !== 'undefined' && - 'hardwareConcurrency' in navigator && - navigator.hardwareConcurrency > 0) { - util.cores = navigator.hardwareConcurrency; - return callback(null, util.cores); - } - if(typeof Worker === 'undefined') { - // workers not available - util.cores = 1; - return callback(null, util.cores); - } - if(typeof Blob === 'undefined') { - // can't estimate, default to 2 - util.cores = 2; - return callback(null, util.cores); - } - - // create worker concurrency estimation code as blob - var blobUrl = URL.createObjectURL(new Blob(['(', - function() { - self.addEventListener('message', function(e) { - // run worker for 4 ms - var st = Date.now(); - var et = st + 4; - while(Date.now() < et); - self.postMessage({st: st, et: et}); - }); - }.toString(), - ')()'], {type: 'application/javascript'})); - - // take 5 samples using 16 workers - sample([], 5, 16); - - function sample(max, samples, numWorkers) { - if(samples === 0) { - // get overlap average - var avg = Math.floor(max.reduce(function(avg, x) { - return avg + x; - }, 0) / max.length); - util.cores = Math.max(1, avg); - URL.revokeObjectURL(blobUrl); - return callback(null, util.cores); - } - map(numWorkers, function(err, results) { - max.push(reduce(numWorkers, results)); - sample(max, samples - 1, numWorkers); - }); - } - - function map(numWorkers, callback) { - var workers = []; - var results = []; - for(var i = 0; i < numWorkers; ++i) { - var worker = new Worker(blobUrl); - worker.addEventListener('message', function(e) { - results.push(e.data); - if(results.length === numWorkers) { - for(var i = 0; i < numWorkers; ++i) { - workers[i].terminate(); - } - callback(null, results); - } - }); - workers.push(worker); - } - for(var i = 0; i < numWorkers; ++i) { - workers[i].postMessage(i); - } - } - - function reduce(numWorkers, results) { - // find overlapping time windows - var overlaps = []; - for(var n = 0; n < numWorkers; ++n) { - var r1 = results[n]; - var overlap = overlaps[n] = []; - for(var i = 0; i < numWorkers; ++i) { - if(n === i) { - continue; - } - var r2 = results[i]; - if((r1.st > r2.st && r1.st < r2.et) || - (r2.st > r1.st && r2.st < r1.et)) { - overlap.push(i); - } - } - } - // get maximum overlaps ... don't include overlapping worker itself - // as the main JS process was also being scheduled during the work and - // would have to be subtracted from the estimate anyway - return overlaps.reduce(function(max, overlap) { - return Math.max(max, overlap.length); - }, 0); - } -}; diff --git a/reverse_engineering/node_modules/node-forge/lib/x509.js b/reverse_engineering/node_modules/node-forge/lib/x509.js deleted file mode 100644 index 95dbc29..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/x509.js +++ /dev/null @@ -1,3333 +0,0 @@ -/** - * Javascript implementation of X.509 and related components (such as - * Certification Signing Requests) of a Public Key Infrastructure. - * - * @author Dave Longley - * - * Copyright (c) 2010-2014 Digital Bazaar, Inc. - * - * The ASN.1 representation of an X.509v3 certificate is as follows - * (see RFC 2459): - * - * Certificate ::= SEQUENCE { - * tbsCertificate TBSCertificate, - * signatureAlgorithm AlgorithmIdentifier, - * signatureValue BIT STRING - * } - * - * TBSCertificate ::= SEQUENCE { - * version [0] EXPLICIT Version DEFAULT v1, - * serialNumber CertificateSerialNumber, - * signature AlgorithmIdentifier, - * issuer Name, - * validity Validity, - * subject Name, - * subjectPublicKeyInfo SubjectPublicKeyInfo, - * issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL, - * -- If present, version shall be v2 or v3 - * subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL, - * -- If present, version shall be v2 or v3 - * extensions [3] EXPLICIT Extensions OPTIONAL - * -- If present, version shall be v3 - * } - * - * Version ::= INTEGER { v1(0), v2(1), v3(2) } - * - * CertificateSerialNumber ::= INTEGER - * - * Name ::= CHOICE { - * // only one possible choice for now - * RDNSequence - * } - * - * RDNSequence ::= SEQUENCE OF RelativeDistinguishedName - * - * RelativeDistinguishedName ::= SET OF AttributeTypeAndValue - * - * AttributeTypeAndValue ::= SEQUENCE { - * type AttributeType, - * value AttributeValue - * } - * AttributeType ::= OBJECT IDENTIFIER - * AttributeValue ::= ANY DEFINED BY AttributeType - * - * Validity ::= SEQUENCE { - * notBefore Time, - * notAfter Time - * } - * - * Time ::= CHOICE { - * utcTime UTCTime, - * generalTime GeneralizedTime - * } - * - * UniqueIdentifier ::= BIT STRING - * - * SubjectPublicKeyInfo ::= SEQUENCE { - * algorithm AlgorithmIdentifier, - * subjectPublicKey BIT STRING - * } - * - * Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension - * - * Extension ::= SEQUENCE { - * extnID OBJECT IDENTIFIER, - * critical BOOLEAN DEFAULT FALSE, - * extnValue OCTET STRING - * } - * - * The only key algorithm currently supported for PKI is RSA. - * - * RSASSA-PSS signatures are described in RFC 3447 and RFC 4055. - * - * PKCS#10 v1.7 describes certificate signing requests: - * - * CertificationRequestInfo: - * - * CertificationRequestInfo ::= SEQUENCE { - * version INTEGER { v1(0) } (v1,...), - * subject Name, - * subjectPKInfo SubjectPublicKeyInfo{{ PKInfoAlgorithms }}, - * attributes [0] Attributes{{ CRIAttributes }} - * } - * - * Attributes { ATTRIBUTE:IOSet } ::= SET OF Attribute{{ IOSet }} - * - * CRIAttributes ATTRIBUTE ::= { - * ... -- add any locally defined attributes here -- } - * - * Attribute { ATTRIBUTE:IOSet } ::= SEQUENCE { - * type ATTRIBUTE.&id({IOSet}), - * values SET SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{@type}) - * } - * - * CertificationRequest ::= SEQUENCE { - * certificationRequestInfo CertificationRequestInfo, - * signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }}, - * signature BIT STRING - * } - */ -var forge = require('./forge'); -require('./aes'); -require('./asn1'); -require('./des'); -require('./md'); -require('./mgf'); -require('./oids'); -require('./pem'); -require('./pss'); -require('./rsa'); -require('./util'); - -// shortcut for asn.1 API -var asn1 = forge.asn1; - -/* Public Key Infrastructure (PKI) implementation. */ -var pki = module.exports = forge.pki = forge.pki || {}; -var oids = pki.oids; - -// short name OID mappings -var _shortNames = {}; -_shortNames['CN'] = oids['commonName']; -_shortNames['commonName'] = 'CN'; -_shortNames['C'] = oids['countryName']; -_shortNames['countryName'] = 'C'; -_shortNames['L'] = oids['localityName']; -_shortNames['localityName'] = 'L'; -_shortNames['ST'] = oids['stateOrProvinceName']; -_shortNames['stateOrProvinceName'] = 'ST'; -_shortNames['O'] = oids['organizationName']; -_shortNames['organizationName'] = 'O'; -_shortNames['OU'] = oids['organizationalUnitName']; -_shortNames['organizationalUnitName'] = 'OU'; -_shortNames['E'] = oids['emailAddress']; -_shortNames['emailAddress'] = 'E'; - -// validator for an SubjectPublicKeyInfo structure -// Note: Currently only works with an RSA public key -var publicKeyValidator = forge.pki.rsa.publicKeyValidator; - -// validator for an X.509v3 certificate -var x509CertificateValidator = { - name: 'Certificate', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'Certificate.TBSCertificate', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - captureAsn1: 'tbsCertificate', - value: [{ - name: 'Certificate.TBSCertificate.version', - tagClass: asn1.Class.CONTEXT_SPECIFIC, - type: 0, - constructed: true, - optional: true, - value: [{ - name: 'Certificate.TBSCertificate.version.integer', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.INTEGER, - constructed: false, - capture: 'certVersion' - }] - }, { - name: 'Certificate.TBSCertificate.serialNumber', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.INTEGER, - constructed: false, - capture: 'certSerialNumber' - }, { - name: 'Certificate.TBSCertificate.signature', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'Certificate.TBSCertificate.signature.algorithm', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OID, - constructed: false, - capture: 'certinfoSignatureOid' - }, { - name: 'Certificate.TBSCertificate.signature.parameters', - tagClass: asn1.Class.UNIVERSAL, - optional: true, - captureAsn1: 'certinfoSignatureParams' - }] - }, { - name: 'Certificate.TBSCertificate.issuer', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - captureAsn1: 'certIssuer' - }, { - name: 'Certificate.TBSCertificate.validity', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - // Note: UTC and generalized times may both appear so the capture - // names are based on their detected order, the names used below - // are only for the common case, which validity time really means - // "notBefore" and which means "notAfter" will be determined by order - value: [{ - // notBefore (Time) (UTC time case) - name: 'Certificate.TBSCertificate.validity.notBefore (utc)', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.UTCTIME, - constructed: false, - optional: true, - capture: 'certValidity1UTCTime' - }, { - // notBefore (Time) (generalized time case) - name: 'Certificate.TBSCertificate.validity.notBefore (generalized)', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.GENERALIZEDTIME, - constructed: false, - optional: true, - capture: 'certValidity2GeneralizedTime' - }, { - // notAfter (Time) (only UTC time is supported) - name: 'Certificate.TBSCertificate.validity.notAfter (utc)', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.UTCTIME, - constructed: false, - optional: true, - capture: 'certValidity3UTCTime' - }, { - // notAfter (Time) (only UTC time is supported) - name: 'Certificate.TBSCertificate.validity.notAfter (generalized)', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.GENERALIZEDTIME, - constructed: false, - optional: true, - capture: 'certValidity4GeneralizedTime' - }] - }, { - // Name (subject) (RDNSequence) - name: 'Certificate.TBSCertificate.subject', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - captureAsn1: 'certSubject' - }, - // SubjectPublicKeyInfo - publicKeyValidator, - { - // issuerUniqueID (optional) - name: 'Certificate.TBSCertificate.issuerUniqueID', - tagClass: asn1.Class.CONTEXT_SPECIFIC, - type: 1, - constructed: true, - optional: true, - value: [{ - name: 'Certificate.TBSCertificate.issuerUniqueID.id', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.BITSTRING, - constructed: false, - // TODO: support arbitrary bit length ids - captureBitStringValue: 'certIssuerUniqueId' - }] - }, { - // subjectUniqueID (optional) - name: 'Certificate.TBSCertificate.subjectUniqueID', - tagClass: asn1.Class.CONTEXT_SPECIFIC, - type: 2, - constructed: true, - optional: true, - value: [{ - name: 'Certificate.TBSCertificate.subjectUniqueID.id', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.BITSTRING, - constructed: false, - // TODO: support arbitrary bit length ids - captureBitStringValue: 'certSubjectUniqueId' - }] - }, { - // Extensions (optional) - name: 'Certificate.TBSCertificate.extensions', - tagClass: asn1.Class.CONTEXT_SPECIFIC, - type: 3, - constructed: true, - captureAsn1: 'certExtensions', - optional: true - }] - }, { - // AlgorithmIdentifier (signature algorithm) - name: 'Certificate.signatureAlgorithm', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - // algorithm - name: 'Certificate.signatureAlgorithm.algorithm', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OID, - constructed: false, - capture: 'certSignatureOid' - }, { - name: 'Certificate.TBSCertificate.signature.parameters', - tagClass: asn1.Class.UNIVERSAL, - optional: true, - captureAsn1: 'certSignatureParams' - }] - }, { - // SignatureValue - name: 'Certificate.signatureValue', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.BITSTRING, - constructed: false, - captureBitStringValue: 'certSignature' - }] -}; - -var rsassaPssParameterValidator = { - name: 'rsapss', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'rsapss.hashAlgorithm', - tagClass: asn1.Class.CONTEXT_SPECIFIC, - type: 0, - constructed: true, - value: [{ - name: 'rsapss.hashAlgorithm.AlgorithmIdentifier', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Class.SEQUENCE, - constructed: true, - optional: true, - value: [{ - name: 'rsapss.hashAlgorithm.AlgorithmIdentifier.algorithm', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OID, - constructed: false, - capture: 'hashOid' - /* parameter block omitted, for SHA1 NULL anyhow. */ - }] - }] - }, { - name: 'rsapss.maskGenAlgorithm', - tagClass: asn1.Class.CONTEXT_SPECIFIC, - type: 1, - constructed: true, - value: [{ - name: 'rsapss.maskGenAlgorithm.AlgorithmIdentifier', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Class.SEQUENCE, - constructed: true, - optional: true, - value: [{ - name: 'rsapss.maskGenAlgorithm.AlgorithmIdentifier.algorithm', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OID, - constructed: false, - capture: 'maskGenOid' - }, { - name: 'rsapss.maskGenAlgorithm.AlgorithmIdentifier.params', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'rsapss.maskGenAlgorithm.AlgorithmIdentifier.params.algorithm', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OID, - constructed: false, - capture: 'maskGenHashOid' - /* parameter block omitted, for SHA1 NULL anyhow. */ - }] - }] - }] - }, { - name: 'rsapss.saltLength', - tagClass: asn1.Class.CONTEXT_SPECIFIC, - type: 2, - optional: true, - value: [{ - name: 'rsapss.saltLength.saltLength', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Class.INTEGER, - constructed: false, - capture: 'saltLength' - }] - }, { - name: 'rsapss.trailerField', - tagClass: asn1.Class.CONTEXT_SPECIFIC, - type: 3, - optional: true, - value: [{ - name: 'rsapss.trailer.trailer', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Class.INTEGER, - constructed: false, - capture: 'trailer' - }] - }] -}; - -// validator for a CertificationRequestInfo structure -var certificationRequestInfoValidator = { - name: 'CertificationRequestInfo', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - captureAsn1: 'certificationRequestInfo', - value: [{ - name: 'CertificationRequestInfo.integer', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.INTEGER, - constructed: false, - capture: 'certificationRequestInfoVersion' - }, { - // Name (subject) (RDNSequence) - name: 'CertificationRequestInfo.subject', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - captureAsn1: 'certificationRequestInfoSubject' - }, - // SubjectPublicKeyInfo - publicKeyValidator, - { - name: 'CertificationRequestInfo.attributes', - tagClass: asn1.Class.CONTEXT_SPECIFIC, - type: 0, - constructed: true, - optional: true, - capture: 'certificationRequestInfoAttributes', - value: [{ - name: 'CertificationRequestInfo.attributes', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - name: 'CertificationRequestInfo.attributes.type', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OID, - constructed: false - }, { - name: 'CertificationRequestInfo.attributes.value', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SET, - constructed: true - }] - }] - }] -}; - -// validator for a CertificationRequest structure -var certificationRequestValidator = { - name: 'CertificationRequest', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - captureAsn1: 'csr', - value: [ - certificationRequestInfoValidator, { - // AlgorithmIdentifier (signature algorithm) - name: 'CertificationRequest.signatureAlgorithm', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.SEQUENCE, - constructed: true, - value: [{ - // algorithm - name: 'CertificationRequest.signatureAlgorithm.algorithm', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.OID, - constructed: false, - capture: 'csrSignatureOid' - }, { - name: 'CertificationRequest.signatureAlgorithm.parameters', - tagClass: asn1.Class.UNIVERSAL, - optional: true, - captureAsn1: 'csrSignatureParams' - }] - }, { - // signature - name: 'CertificationRequest.signature', - tagClass: asn1.Class.UNIVERSAL, - type: asn1.Type.BITSTRING, - constructed: false, - captureBitStringValue: 'csrSignature' - } - ] -}; - -/** - * Converts an RDNSequence of ASN.1 DER-encoded RelativeDistinguishedName - * sets into an array with objects that have type and value properties. - * - * @param rdn the RDNSequence to convert. - * @param md a message digest to append type and value to if provided. - */ -pki.RDNAttributesAsArray = function(rdn, md) { - var rval = []; - - // each value in 'rdn' in is a SET of RelativeDistinguishedName - var set, attr, obj; - for(var si = 0; si < rdn.value.length; ++si) { - // get the RelativeDistinguishedName set - set = rdn.value[si]; - - // each value in the SET is an AttributeTypeAndValue sequence - // containing first a type (an OID) and second a value (defined by - // the OID) - for(var i = 0; i < set.value.length; ++i) { - obj = {}; - attr = set.value[i]; - obj.type = asn1.derToOid(attr.value[0].value); - obj.value = attr.value[1].value; - obj.valueTagClass = attr.value[1].type; - // if the OID is known, get its name and short name - if(obj.type in oids) { - obj.name = oids[obj.type]; - if(obj.name in _shortNames) { - obj.shortName = _shortNames[obj.name]; - } - } - if(md) { - md.update(obj.type); - md.update(obj.value); - } - rval.push(obj); - } - } - - return rval; -}; - -/** - * Converts ASN.1 CRIAttributes into an array with objects that have type and - * value properties. - * - * @param attributes the CRIAttributes to convert. - */ -pki.CRIAttributesAsArray = function(attributes) { - var rval = []; - - // each value in 'attributes' in is a SEQUENCE with an OID and a SET - for(var si = 0; si < attributes.length; ++si) { - // get the attribute sequence - var seq = attributes[si]; - - // each value in the SEQUENCE containing first a type (an OID) and - // second a set of values (defined by the OID) - var type = asn1.derToOid(seq.value[0].value); - var values = seq.value[1].value; - for(var vi = 0; vi < values.length; ++vi) { - var obj = {}; - obj.type = type; - obj.value = values[vi].value; - obj.valueTagClass = values[vi].type; - // if the OID is known, get its name and short name - if(obj.type in oids) { - obj.name = oids[obj.type]; - if(obj.name in _shortNames) { - obj.shortName = _shortNames[obj.name]; - } - } - // parse extensions - if(obj.type === oids.extensionRequest) { - obj.extensions = []; - for(var ei = 0; ei < obj.value.length; ++ei) { - obj.extensions.push(pki.certificateExtensionFromAsn1(obj.value[ei])); - } - } - rval.push(obj); - } - } - - return rval; -}; - -/** - * Gets an issuer or subject attribute from its name, type, or short name. - * - * @param obj the issuer or subject object. - * @param options a short name string or an object with: - * shortName the short name for the attribute. - * name the name for the attribute. - * type the type for the attribute. - * - * @return the attribute. - */ -function _getAttribute(obj, options) { - if(typeof options === 'string') { - options = {shortName: options}; - } - - var rval = null; - var attr; - for(var i = 0; rval === null && i < obj.attributes.length; ++i) { - attr = obj.attributes[i]; - if(options.type && options.type === attr.type) { - rval = attr; - } else if(options.name && options.name === attr.name) { - rval = attr; - } else if(options.shortName && options.shortName === attr.shortName) { - rval = attr; - } - } - return rval; -} - -/** - * Converts signature parameters from ASN.1 structure. - * - * Currently only RSASSA-PSS supported. The PKCS#1 v1.5 signature scheme had - * no parameters. - * - * RSASSA-PSS-params ::= SEQUENCE { - * hashAlgorithm [0] HashAlgorithm DEFAULT - * sha1Identifier, - * maskGenAlgorithm [1] MaskGenAlgorithm DEFAULT - * mgf1SHA1Identifier, - * saltLength [2] INTEGER DEFAULT 20, - * trailerField [3] INTEGER DEFAULT 1 - * } - * - * HashAlgorithm ::= AlgorithmIdentifier - * - * MaskGenAlgorithm ::= AlgorithmIdentifier - * - * AlgorithmIdentifer ::= SEQUENCE { - * algorithm OBJECT IDENTIFIER, - * parameters ANY DEFINED BY algorithm OPTIONAL - * } - * - * @param oid The OID specifying the signature algorithm - * @param obj The ASN.1 structure holding the parameters - * @param fillDefaults Whether to use return default values where omitted - * @return signature parameter object - */ -var _readSignatureParameters = function(oid, obj, fillDefaults) { - var params = {}; - - if(oid !== oids['RSASSA-PSS']) { - return params; - } - - if(fillDefaults) { - params = { - hash: { - algorithmOid: oids['sha1'] - }, - mgf: { - algorithmOid: oids['mgf1'], - hash: { - algorithmOid: oids['sha1'] - } - }, - saltLength: 20 - }; - } - - var capture = {}; - var errors = []; - if(!asn1.validate(obj, rsassaPssParameterValidator, capture, errors)) { - var error = new Error('Cannot read RSASSA-PSS parameter block.'); - error.errors = errors; - throw error; - } - - if(capture.hashOid !== undefined) { - params.hash = params.hash || {}; - params.hash.algorithmOid = asn1.derToOid(capture.hashOid); - } - - if(capture.maskGenOid !== undefined) { - params.mgf = params.mgf || {}; - params.mgf.algorithmOid = asn1.derToOid(capture.maskGenOid); - params.mgf.hash = params.mgf.hash || {}; - params.mgf.hash.algorithmOid = asn1.derToOid(capture.maskGenHashOid); - } - - if(capture.saltLength !== undefined) { - params.saltLength = capture.saltLength.charCodeAt(0); - } - - return params; -}; - -/** - * Converts an X.509 certificate from PEM format. - * - * Note: If the certificate is to be verified then compute hash should - * be set to true. This will scan the TBSCertificate part of the ASN.1 - * object while it is converted so it doesn't need to be converted back - * to ASN.1-DER-encoding later. - * - * @param pem the PEM-formatted certificate. - * @param computeHash true to compute the hash for verification. - * @param strict true to be strict when checking ASN.1 value lengths, false to - * allow truncated values (default: true). - * - * @return the certificate. - */ -pki.certificateFromPem = function(pem, computeHash, strict) { - var msg = forge.pem.decode(pem)[0]; - - if(msg.type !== 'CERTIFICATE' && - msg.type !== 'X509 CERTIFICATE' && - msg.type !== 'TRUSTED CERTIFICATE') { - var error = new Error( - 'Could not convert certificate from PEM; PEM header type ' + - 'is not "CERTIFICATE", "X509 CERTIFICATE", or "TRUSTED CERTIFICATE".'); - error.headerType = msg.type; - throw error; - } - if(msg.procType && msg.procType.type === 'ENCRYPTED') { - throw new Error( - 'Could not convert certificate from PEM; PEM is encrypted.'); - } - - // convert DER to ASN.1 object - var obj = asn1.fromDer(msg.body, strict); - - return pki.certificateFromAsn1(obj, computeHash); -}; - -/** - * Converts an X.509 certificate to PEM format. - * - * @param cert the certificate. - * @param maxline the maximum characters per line, defaults to 64. - * - * @return the PEM-formatted certificate. - */ -pki.certificateToPem = function(cert, maxline) { - // convert to ASN.1, then DER, then PEM-encode - var msg = { - type: 'CERTIFICATE', - body: asn1.toDer(pki.certificateToAsn1(cert)).getBytes() - }; - return forge.pem.encode(msg, {maxline: maxline}); -}; - -/** - * Converts an RSA public key from PEM format. - * - * @param pem the PEM-formatted public key. - * - * @return the public key. - */ -pki.publicKeyFromPem = function(pem) { - var msg = forge.pem.decode(pem)[0]; - - if(msg.type !== 'PUBLIC KEY' && msg.type !== 'RSA PUBLIC KEY') { - var error = new Error('Could not convert public key from PEM; PEM header ' + - 'type is not "PUBLIC KEY" or "RSA PUBLIC KEY".'); - error.headerType = msg.type; - throw error; - } - if(msg.procType && msg.procType.type === 'ENCRYPTED') { - throw new Error('Could not convert public key from PEM; PEM is encrypted.'); - } - - // convert DER to ASN.1 object - var obj = asn1.fromDer(msg.body); - - return pki.publicKeyFromAsn1(obj); -}; - -/** - * Converts an RSA public key to PEM format (using a SubjectPublicKeyInfo). - * - * @param key the public key. - * @param maxline the maximum characters per line, defaults to 64. - * - * @return the PEM-formatted public key. - */ -pki.publicKeyToPem = function(key, maxline) { - // convert to ASN.1, then DER, then PEM-encode - var msg = { - type: 'PUBLIC KEY', - body: asn1.toDer(pki.publicKeyToAsn1(key)).getBytes() - }; - return forge.pem.encode(msg, {maxline: maxline}); -}; - -/** - * Converts an RSA public key to PEM format (using an RSAPublicKey). - * - * @param key the public key. - * @param maxline the maximum characters per line, defaults to 64. - * - * @return the PEM-formatted public key. - */ -pki.publicKeyToRSAPublicKeyPem = function(key, maxline) { - // convert to ASN.1, then DER, then PEM-encode - var msg = { - type: 'RSA PUBLIC KEY', - body: asn1.toDer(pki.publicKeyToRSAPublicKey(key)).getBytes() - }; - return forge.pem.encode(msg, {maxline: maxline}); -}; - -/** - * Gets a fingerprint for the given public key. - * - * @param options the options to use. - * [md] the message digest object to use (defaults to forge.md.sha1). - * [type] the type of fingerprint, such as 'RSAPublicKey', - * 'SubjectPublicKeyInfo' (defaults to 'RSAPublicKey'). - * [encoding] an alternative output encoding, such as 'hex' - * (defaults to none, outputs a byte buffer). - * [delimiter] the delimiter to use between bytes for 'hex' encoded - * output, eg: ':' (defaults to none). - * - * @return the fingerprint as a byte buffer or other encoding based on options. - */ -pki.getPublicKeyFingerprint = function(key, options) { - options = options || {}; - var md = options.md || forge.md.sha1.create(); - var type = options.type || 'RSAPublicKey'; - - var bytes; - switch(type) { - case 'RSAPublicKey': - bytes = asn1.toDer(pki.publicKeyToRSAPublicKey(key)).getBytes(); - break; - case 'SubjectPublicKeyInfo': - bytes = asn1.toDer(pki.publicKeyToAsn1(key)).getBytes(); - break; - default: - throw new Error('Unknown fingerprint type "' + options.type + '".'); - } - - // hash public key bytes - md.start(); - md.update(bytes); - var digest = md.digest(); - if(options.encoding === 'hex') { - var hex = digest.toHex(); - if(options.delimiter) { - return hex.match(/.{2}/g).join(options.delimiter); - } - return hex; - } else if(options.encoding === 'binary') { - return digest.getBytes(); - } else if(options.encoding) { - throw new Error('Unknown encoding "' + options.encoding + '".'); - } - return digest; -}; - -/** - * Converts a PKCS#10 certification request (CSR) from PEM format. - * - * Note: If the certification request is to be verified then compute hash - * should be set to true. This will scan the CertificationRequestInfo part of - * the ASN.1 object while it is converted so it doesn't need to be converted - * back to ASN.1-DER-encoding later. - * - * @param pem the PEM-formatted certificate. - * @param computeHash true to compute the hash for verification. - * @param strict true to be strict when checking ASN.1 value lengths, false to - * allow truncated values (default: true). - * - * @return the certification request (CSR). - */ -pki.certificationRequestFromPem = function(pem, computeHash, strict) { - var msg = forge.pem.decode(pem)[0]; - - if(msg.type !== 'CERTIFICATE REQUEST') { - var error = new Error('Could not convert certification request from PEM; ' + - 'PEM header type is not "CERTIFICATE REQUEST".'); - error.headerType = msg.type; - throw error; - } - if(msg.procType && msg.procType.type === 'ENCRYPTED') { - throw new Error('Could not convert certification request from PEM; ' + - 'PEM is encrypted.'); - } - - // convert DER to ASN.1 object - var obj = asn1.fromDer(msg.body, strict); - - return pki.certificationRequestFromAsn1(obj, computeHash); -}; - -/** - * Converts a PKCS#10 certification request (CSR) to PEM format. - * - * @param csr the certification request. - * @param maxline the maximum characters per line, defaults to 64. - * - * @return the PEM-formatted certification request. - */ -pki.certificationRequestToPem = function(csr, maxline) { - // convert to ASN.1, then DER, then PEM-encode - var msg = { - type: 'CERTIFICATE REQUEST', - body: asn1.toDer(pki.certificationRequestToAsn1(csr)).getBytes() - }; - return forge.pem.encode(msg, {maxline: maxline}); -}; - -/** - * Creates an empty X.509v3 RSA certificate. - * - * @return the certificate. - */ -pki.createCertificate = function() { - var cert = {}; - cert.version = 0x02; - cert.serialNumber = '00'; - cert.signatureOid = null; - cert.signature = null; - cert.siginfo = {}; - cert.siginfo.algorithmOid = null; - cert.validity = {}; - cert.validity.notBefore = new Date(); - cert.validity.notAfter = new Date(); - - cert.issuer = {}; - cert.issuer.getField = function(sn) { - return _getAttribute(cert.issuer, sn); - }; - cert.issuer.addField = function(attr) { - _fillMissingFields([attr]); - cert.issuer.attributes.push(attr); - }; - cert.issuer.attributes = []; - cert.issuer.hash = null; - - cert.subject = {}; - cert.subject.getField = function(sn) { - return _getAttribute(cert.subject, sn); - }; - cert.subject.addField = function(attr) { - _fillMissingFields([attr]); - cert.subject.attributes.push(attr); - }; - cert.subject.attributes = []; - cert.subject.hash = null; - - cert.extensions = []; - cert.publicKey = null; - cert.md = null; - - /** - * Sets the subject of this certificate. - * - * @param attrs the array of subject attributes to use. - * @param uniqueId an optional a unique ID to use. - */ - cert.setSubject = function(attrs, uniqueId) { - // set new attributes, clear hash - _fillMissingFields(attrs); - cert.subject.attributes = attrs; - delete cert.subject.uniqueId; - if(uniqueId) { - // TODO: support arbitrary bit length ids - cert.subject.uniqueId = uniqueId; - } - cert.subject.hash = null; - }; - - /** - * Sets the issuer of this certificate. - * - * @param attrs the array of issuer attributes to use. - * @param uniqueId an optional a unique ID to use. - */ - cert.setIssuer = function(attrs, uniqueId) { - // set new attributes, clear hash - _fillMissingFields(attrs); - cert.issuer.attributes = attrs; - delete cert.issuer.uniqueId; - if(uniqueId) { - // TODO: support arbitrary bit length ids - cert.issuer.uniqueId = uniqueId; - } - cert.issuer.hash = null; - }; - - /** - * Sets the extensions of this certificate. - * - * @param exts the array of extensions to use. - */ - cert.setExtensions = function(exts) { - for(var i = 0; i < exts.length; ++i) { - _fillMissingExtensionFields(exts[i], {cert: cert}); - } - // set new extensions - cert.extensions = exts; - }; - - /** - * Gets an extension by its name or id. - * - * @param options the name to use or an object with: - * name the name to use. - * id the id to use. - * - * @return the extension or null if not found. - */ - cert.getExtension = function(options) { - if(typeof options === 'string') { - options = {name: options}; - } - - var rval = null; - var ext; - for(var i = 0; rval === null && i < cert.extensions.length; ++i) { - ext = cert.extensions[i]; - if(options.id && ext.id === options.id) { - rval = ext; - } else if(options.name && ext.name === options.name) { - rval = ext; - } - } - return rval; - }; - - /** - * Signs this certificate using the given private key. - * - * @param key the private key to sign with. - * @param md the message digest object to use (defaults to forge.md.sha1). - */ - cert.sign = function(key, md) { - // TODO: get signature OID from private key - cert.md = md || forge.md.sha1.create(); - var algorithmOid = oids[cert.md.algorithm + 'WithRSAEncryption']; - if(!algorithmOid) { - var error = new Error('Could not compute certificate digest. ' + - 'Unknown message digest algorithm OID.'); - error.algorithm = cert.md.algorithm; - throw error; - } - cert.signatureOid = cert.siginfo.algorithmOid = algorithmOid; - - // get TBSCertificate, convert to DER - cert.tbsCertificate = pki.getTBSCertificate(cert); - var bytes = asn1.toDer(cert.tbsCertificate); - - // digest and sign - cert.md.update(bytes.getBytes()); - cert.signature = key.sign(cert.md); - }; - - /** - * Attempts verify the signature on the passed certificate using this - * certificate's public key. - * - * @param child the certificate to verify. - * - * @return true if verified, false if not. - */ - cert.verify = function(child) { - var rval = false; - - if(!cert.issued(child)) { - var issuer = child.issuer; - var subject = cert.subject; - var error = new Error( - 'The parent certificate did not issue the given child ' + - 'certificate; the child certificate\'s issuer does not match the ' + - 'parent\'s subject.'); - error.expectedIssuer = issuer.attributes; - error.actualIssuer = subject.attributes; - throw error; - } - - var md = child.md; - if(md === null) { - // check signature OID for supported signature types - if(child.signatureOid in oids) { - var oid = oids[child.signatureOid]; - switch(oid) { - case 'sha1WithRSAEncryption': - md = forge.md.sha1.create(); - break; - case 'md5WithRSAEncryption': - md = forge.md.md5.create(); - break; - case 'sha256WithRSAEncryption': - md = forge.md.sha256.create(); - break; - case 'sha384WithRSAEncryption': - md = forge.md.sha384.create(); - break; - case 'sha512WithRSAEncryption': - md = forge.md.sha512.create(); - break; - case 'RSASSA-PSS': - md = forge.md.sha256.create(); - break; - } - } - if(md === null) { - var error = new Error('Could not compute certificate digest. ' + - 'Unknown signature OID.'); - error.signatureOid = child.signatureOid; - throw error; - } - - // produce DER formatted TBSCertificate and digest it - var tbsCertificate = child.tbsCertificate || pki.getTBSCertificate(child); - var bytes = asn1.toDer(tbsCertificate); - md.update(bytes.getBytes()); - } - - if(md !== null) { - var scheme; - - switch(child.signatureOid) { - case oids.sha1WithRSAEncryption: - scheme = undefined; /* use PKCS#1 v1.5 padding scheme */ - break; - case oids['RSASSA-PSS']: - var hash, mgf; - - /* initialize mgf */ - hash = oids[child.signatureParameters.mgf.hash.algorithmOid]; - if(hash === undefined || forge.md[hash] === undefined) { - var error = new Error('Unsupported MGF hash function.'); - error.oid = child.signatureParameters.mgf.hash.algorithmOid; - error.name = hash; - throw error; - } - - mgf = oids[child.signatureParameters.mgf.algorithmOid]; - if(mgf === undefined || forge.mgf[mgf] === undefined) { - var error = new Error('Unsupported MGF function.'); - error.oid = child.signatureParameters.mgf.algorithmOid; - error.name = mgf; - throw error; - } - - mgf = forge.mgf[mgf].create(forge.md[hash].create()); - - /* initialize hash function */ - hash = oids[child.signatureParameters.hash.algorithmOid]; - if(hash === undefined || forge.md[hash] === undefined) { - throw { - message: 'Unsupported RSASSA-PSS hash function.', - oid: child.signatureParameters.hash.algorithmOid, - name: hash - }; - } - - scheme = forge.pss.create(forge.md[hash].create(), mgf, - child.signatureParameters.saltLength); - break; - } - - // verify signature on cert using public key - rval = cert.publicKey.verify( - md.digest().getBytes(), child.signature, scheme); - } - - return rval; - }; - - /** - * Returns true if this certificate's issuer matches the passed - * certificate's subject. Note that no signature check is performed. - * - * @param parent the certificate to check. - * - * @return true if this certificate's issuer matches the passed certificate's - * subject. - */ - cert.isIssuer = function(parent) { - var rval = false; - - var i = cert.issuer; - var s = parent.subject; - - // compare hashes if present - if(i.hash && s.hash) { - rval = (i.hash === s.hash); - } else if(i.attributes.length === s.attributes.length) { - // all attributes are the same so issuer matches subject - rval = true; - var iattr, sattr; - for(var n = 0; rval && n < i.attributes.length; ++n) { - iattr = i.attributes[n]; - sattr = s.attributes[n]; - if(iattr.type !== sattr.type || iattr.value !== sattr.value) { - // attribute mismatch - rval = false; - } - } - } - - return rval; - }; - - /** - * Returns true if this certificate's subject matches the issuer of the - * given certificate). Note that not signature check is performed. - * - * @param child the certificate to check. - * - * @return true if this certificate's subject matches the passed - * certificate's issuer. - */ - cert.issued = function(child) { - return child.isIssuer(cert); - }; - - /** - * Generates the subjectKeyIdentifier for this certificate as byte buffer. - * - * @return the subjectKeyIdentifier for this certificate as byte buffer. - */ - cert.generateSubjectKeyIdentifier = function() { - /* See: 4.2.1.2 section of the the RFC3280, keyIdentifier is either: - - (1) The keyIdentifier is composed of the 160-bit SHA-1 hash of the - value of the BIT STRING subjectPublicKey (excluding the tag, - length, and number of unused bits). - - (2) The keyIdentifier is composed of a four bit type field with - the value 0100 followed by the least significant 60 bits of the - SHA-1 hash of the value of the BIT STRING subjectPublicKey - (excluding the tag, length, and number of unused bit string bits). - */ - - // skipping the tag, length, and number of unused bits is the same - // as just using the RSAPublicKey (for RSA keys, which are the - // only ones supported) - return pki.getPublicKeyFingerprint(cert.publicKey, {type: 'RSAPublicKey'}); - }; - - /** - * Verifies the subjectKeyIdentifier extension value for this certificate - * against its public key. If no extension is found, false will be - * returned. - * - * @return true if verified, false if not. - */ - cert.verifySubjectKeyIdentifier = function() { - var oid = oids['subjectKeyIdentifier']; - for(var i = 0; i < cert.extensions.length; ++i) { - var ext = cert.extensions[i]; - if(ext.id === oid) { - var ski = cert.generateSubjectKeyIdentifier().getBytes(); - return (forge.util.hexToBytes(ext.subjectKeyIdentifier) === ski); - } - } - return false; - }; - - return cert; -}; - -/** - * Converts an X.509v3 RSA certificate from an ASN.1 object. - * - * Note: If the certificate is to be verified then compute hash should - * be set to true. There is currently no implementation for converting - * a certificate back to ASN.1 so the TBSCertificate part of the ASN.1 - * object needs to be scanned before the cert object is created. - * - * @param obj the asn1 representation of an X.509v3 RSA certificate. - * @param computeHash true to compute the hash for verification. - * - * @return the certificate. - */ -pki.certificateFromAsn1 = function(obj, computeHash) { - // validate certificate and capture data - var capture = {}; - var errors = []; - if(!asn1.validate(obj, x509CertificateValidator, capture, errors)) { - var error = new Error('Cannot read X.509 certificate. ' + - 'ASN.1 object is not an X509v3 Certificate.'); - error.errors = errors; - throw error; - } - - // get oid - var oid = asn1.derToOid(capture.publicKeyOid); - if(oid !== pki.oids.rsaEncryption) { - throw new Error('Cannot read public key. OID is not RSA.'); - } - - // create certificate - var cert = pki.createCertificate(); - cert.version = capture.certVersion ? - capture.certVersion.charCodeAt(0) : 0; - var serial = forge.util.createBuffer(capture.certSerialNumber); - cert.serialNumber = serial.toHex(); - cert.signatureOid = forge.asn1.derToOid(capture.certSignatureOid); - cert.signatureParameters = _readSignatureParameters( - cert.signatureOid, capture.certSignatureParams, true); - cert.siginfo.algorithmOid = forge.asn1.derToOid(capture.certinfoSignatureOid); - cert.siginfo.parameters = _readSignatureParameters(cert.siginfo.algorithmOid, - capture.certinfoSignatureParams, false); - cert.signature = capture.certSignature; - - var validity = []; - if(capture.certValidity1UTCTime !== undefined) { - validity.push(asn1.utcTimeToDate(capture.certValidity1UTCTime)); - } - if(capture.certValidity2GeneralizedTime !== undefined) { - validity.push(asn1.generalizedTimeToDate( - capture.certValidity2GeneralizedTime)); - } - if(capture.certValidity3UTCTime !== undefined) { - validity.push(asn1.utcTimeToDate(capture.certValidity3UTCTime)); - } - if(capture.certValidity4GeneralizedTime !== undefined) { - validity.push(asn1.generalizedTimeToDate( - capture.certValidity4GeneralizedTime)); - } - if(validity.length > 2) { - throw new Error('Cannot read notBefore/notAfter validity times; more ' + - 'than two times were provided in the certificate.'); - } - if(validity.length < 2) { - throw new Error('Cannot read notBefore/notAfter validity times; they ' + - 'were not provided as either UTCTime or GeneralizedTime.'); - } - cert.validity.notBefore = validity[0]; - cert.validity.notAfter = validity[1]; - - // keep TBSCertificate to preserve signature when exporting - cert.tbsCertificate = capture.tbsCertificate; - - if(computeHash) { - // check signature OID for supported signature types - cert.md = null; - if(cert.signatureOid in oids) { - var oid = oids[cert.signatureOid]; - switch(oid) { - case 'sha1WithRSAEncryption': - cert.md = forge.md.sha1.create(); - break; - case 'md5WithRSAEncryption': - cert.md = forge.md.md5.create(); - break; - case 'sha256WithRSAEncryption': - cert.md = forge.md.sha256.create(); - break; - case 'sha384WithRSAEncryption': - cert.md = forge.md.sha384.create(); - break; - case 'sha512WithRSAEncryption': - cert.md = forge.md.sha512.create(); - break; - case 'RSASSA-PSS': - cert.md = forge.md.sha256.create(); - break; - } - } - if(cert.md === null) { - var error = new Error('Could not compute certificate digest. ' + - 'Unknown signature OID.'); - error.signatureOid = cert.signatureOid; - throw error; - } - - // produce DER formatted TBSCertificate and digest it - var bytes = asn1.toDer(cert.tbsCertificate); - cert.md.update(bytes.getBytes()); - } - - // handle issuer, build issuer message digest - var imd = forge.md.sha1.create(); - cert.issuer.getField = function(sn) { - return _getAttribute(cert.issuer, sn); - }; - cert.issuer.addField = function(attr) { - _fillMissingFields([attr]); - cert.issuer.attributes.push(attr); - }; - cert.issuer.attributes = pki.RDNAttributesAsArray(capture.certIssuer, imd); - if(capture.certIssuerUniqueId) { - cert.issuer.uniqueId = capture.certIssuerUniqueId; - } - cert.issuer.hash = imd.digest().toHex(); - - // handle subject, build subject message digest - var smd = forge.md.sha1.create(); - cert.subject.getField = function(sn) { - return _getAttribute(cert.subject, sn); - }; - cert.subject.addField = function(attr) { - _fillMissingFields([attr]); - cert.subject.attributes.push(attr); - }; - cert.subject.attributes = pki.RDNAttributesAsArray(capture.certSubject, smd); - if(capture.certSubjectUniqueId) { - cert.subject.uniqueId = capture.certSubjectUniqueId; - } - cert.subject.hash = smd.digest().toHex(); - - // handle extensions - if(capture.certExtensions) { - cert.extensions = pki.certificateExtensionsFromAsn1(capture.certExtensions); - } else { - cert.extensions = []; - } - - // convert RSA public key from ASN.1 - cert.publicKey = pki.publicKeyFromAsn1(capture.subjectPublicKeyInfo); - - return cert; -}; - -/** - * Converts an ASN.1 extensions object (with extension sequences as its - * values) into an array of extension objects with types and values. - * - * Supported extensions: - * - * id-ce-keyUsage OBJECT IDENTIFIER ::= { id-ce 15 } - * KeyUsage ::= BIT STRING { - * digitalSignature (0), - * nonRepudiation (1), - * keyEncipherment (2), - * dataEncipherment (3), - * keyAgreement (4), - * keyCertSign (5), - * cRLSign (6), - * encipherOnly (7), - * decipherOnly (8) - * } - * - * id-ce-basicConstraints OBJECT IDENTIFIER ::= { id-ce 19 } - * BasicConstraints ::= SEQUENCE { - * cA BOOLEAN DEFAULT FALSE, - * pathLenConstraint INTEGER (0..MAX) OPTIONAL - * } - * - * subjectAltName EXTENSION ::= { - * SYNTAX GeneralNames - * IDENTIFIED BY id-ce-subjectAltName - * } - * - * GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName - * - * GeneralName ::= CHOICE { - * otherName [0] INSTANCE OF OTHER-NAME, - * rfc822Name [1] IA5String, - * dNSName [2] IA5String, - * x400Address [3] ORAddress, - * directoryName [4] Name, - * ediPartyName [5] EDIPartyName, - * uniformResourceIdentifier [6] IA5String, - * IPAddress [7] OCTET STRING, - * registeredID [8] OBJECT IDENTIFIER - * } - * - * OTHER-NAME ::= TYPE-IDENTIFIER - * - * EDIPartyName ::= SEQUENCE { - * nameAssigner [0] DirectoryString {ub-name} OPTIONAL, - * partyName [1] DirectoryString {ub-name} - * } - * - * @param exts the extensions ASN.1 with extension sequences to parse. - * - * @return the array. - */ -pki.certificateExtensionsFromAsn1 = function(exts) { - var rval = []; - for(var i = 0; i < exts.value.length; ++i) { - // get extension sequence - var extseq = exts.value[i]; - for(var ei = 0; ei < extseq.value.length; ++ei) { - rval.push(pki.certificateExtensionFromAsn1(extseq.value[ei])); - } - } - - return rval; -}; - -/** - * Parses a single certificate extension from ASN.1. - * - * @param ext the extension in ASN.1 format. - * - * @return the parsed extension as an object. - */ -pki.certificateExtensionFromAsn1 = function(ext) { - // an extension has: - // [0] extnID OBJECT IDENTIFIER - // [1] critical BOOLEAN DEFAULT FALSE - // [2] extnValue OCTET STRING - var e = {}; - e.id = asn1.derToOid(ext.value[0].value); - e.critical = false; - if(ext.value[1].type === asn1.Type.BOOLEAN) { - e.critical = (ext.value[1].value.charCodeAt(0) !== 0x00); - e.value = ext.value[2].value; - } else { - e.value = ext.value[1].value; - } - // if the oid is known, get its name - if(e.id in oids) { - e.name = oids[e.id]; - - // handle key usage - if(e.name === 'keyUsage') { - // get value as BIT STRING - var ev = asn1.fromDer(e.value); - var b2 = 0x00; - var b3 = 0x00; - if(ev.value.length > 1) { - // skip first byte, just indicates unused bits which - // will be padded with 0s anyway - // get bytes with flag bits - b2 = ev.value.charCodeAt(1); - b3 = ev.value.length > 2 ? ev.value.charCodeAt(2) : 0; - } - // set flags - e.digitalSignature = (b2 & 0x80) === 0x80; - e.nonRepudiation = (b2 & 0x40) === 0x40; - e.keyEncipherment = (b2 & 0x20) === 0x20; - e.dataEncipherment = (b2 & 0x10) === 0x10; - e.keyAgreement = (b2 & 0x08) === 0x08; - e.keyCertSign = (b2 & 0x04) === 0x04; - e.cRLSign = (b2 & 0x02) === 0x02; - e.encipherOnly = (b2 & 0x01) === 0x01; - e.decipherOnly = (b3 & 0x80) === 0x80; - } else if(e.name === 'basicConstraints') { - // handle basic constraints - // get value as SEQUENCE - var ev = asn1.fromDer(e.value); - // get cA BOOLEAN flag (defaults to false) - if(ev.value.length > 0 && ev.value[0].type === asn1.Type.BOOLEAN) { - e.cA = (ev.value[0].value.charCodeAt(0) !== 0x00); - } else { - e.cA = false; - } - // get path length constraint - var value = null; - if(ev.value.length > 0 && ev.value[0].type === asn1.Type.INTEGER) { - value = ev.value[0].value; - } else if(ev.value.length > 1) { - value = ev.value[1].value; - } - if(value !== null) { - e.pathLenConstraint = asn1.derToInteger(value); - } - } else if(e.name === 'extKeyUsage') { - // handle extKeyUsage - // value is a SEQUENCE of OIDs - var ev = asn1.fromDer(e.value); - for(var vi = 0; vi < ev.value.length; ++vi) { - var oid = asn1.derToOid(ev.value[vi].value); - if(oid in oids) { - e[oids[oid]] = true; - } else { - e[oid] = true; - } - } - } else if(e.name === 'nsCertType') { - // handle nsCertType - // get value as BIT STRING - var ev = asn1.fromDer(e.value); - var b2 = 0x00; - if(ev.value.length > 1) { - // skip first byte, just indicates unused bits which - // will be padded with 0s anyway - // get bytes with flag bits - b2 = ev.value.charCodeAt(1); - } - // set flags - e.client = (b2 & 0x80) === 0x80; - e.server = (b2 & 0x40) === 0x40; - e.email = (b2 & 0x20) === 0x20; - e.objsign = (b2 & 0x10) === 0x10; - e.reserved = (b2 & 0x08) === 0x08; - e.sslCA = (b2 & 0x04) === 0x04; - e.emailCA = (b2 & 0x02) === 0x02; - e.objCA = (b2 & 0x01) === 0x01; - } else if( - e.name === 'subjectAltName' || - e.name === 'issuerAltName') { - // handle subjectAltName/issuerAltName - e.altNames = []; - - // ev is a SYNTAX SEQUENCE - var gn; - var ev = asn1.fromDer(e.value); - for(var n = 0; n < ev.value.length; ++n) { - // get GeneralName - gn = ev.value[n]; - - var altName = { - type: gn.type, - value: gn.value - }; - e.altNames.push(altName); - - // Note: Support for types 1,2,6,7,8 - switch(gn.type) { - // rfc822Name - case 1: - // dNSName - case 2: - // uniformResourceIdentifier (URI) - case 6: - break; - // IPAddress - case 7: - // convert to IPv4/IPv6 string representation - altName.ip = forge.util.bytesToIP(gn.value); - break; - // registeredID - case 8: - altName.oid = asn1.derToOid(gn.value); - break; - default: - // unsupported - } - } - } else if(e.name === 'subjectKeyIdentifier') { - // value is an OCTETSTRING w/the hash of the key-type specific - // public key structure (eg: RSAPublicKey) - var ev = asn1.fromDer(e.value); - e.subjectKeyIdentifier = forge.util.bytesToHex(ev.value); - } - } - return e; -}; - -/** - * Converts a PKCS#10 certification request (CSR) from an ASN.1 object. - * - * Note: If the certification request is to be verified then compute hash - * should be set to true. There is currently no implementation for converting - * a certificate back to ASN.1 so the CertificationRequestInfo part of the - * ASN.1 object needs to be scanned before the csr object is created. - * - * @param obj the asn1 representation of a PKCS#10 certification request (CSR). - * @param computeHash true to compute the hash for verification. - * - * @return the certification request (CSR). - */ -pki.certificationRequestFromAsn1 = function(obj, computeHash) { - // validate certification request and capture data - var capture = {}; - var errors = []; - if(!asn1.validate(obj, certificationRequestValidator, capture, errors)) { - var error = new Error('Cannot read PKCS#10 certificate request. ' + - 'ASN.1 object is not a PKCS#10 CertificationRequest.'); - error.errors = errors; - throw error; - } - - // get oid - var oid = asn1.derToOid(capture.publicKeyOid); - if(oid !== pki.oids.rsaEncryption) { - throw new Error('Cannot read public key. OID is not RSA.'); - } - - // create certification request - var csr = pki.createCertificationRequest(); - csr.version = capture.csrVersion ? capture.csrVersion.charCodeAt(0) : 0; - csr.signatureOid = forge.asn1.derToOid(capture.csrSignatureOid); - csr.signatureParameters = _readSignatureParameters( - csr.signatureOid, capture.csrSignatureParams, true); - csr.siginfo.algorithmOid = forge.asn1.derToOid(capture.csrSignatureOid); - csr.siginfo.parameters = _readSignatureParameters( - csr.siginfo.algorithmOid, capture.csrSignatureParams, false); - csr.signature = capture.csrSignature; - - // keep CertificationRequestInfo to preserve signature when exporting - csr.certificationRequestInfo = capture.certificationRequestInfo; - - if(computeHash) { - // check signature OID for supported signature types - csr.md = null; - if(csr.signatureOid in oids) { - var oid = oids[csr.signatureOid]; - switch(oid) { - case 'sha1WithRSAEncryption': - csr.md = forge.md.sha1.create(); - break; - case 'md5WithRSAEncryption': - csr.md = forge.md.md5.create(); - break; - case 'sha256WithRSAEncryption': - csr.md = forge.md.sha256.create(); - break; - case 'sha384WithRSAEncryption': - csr.md = forge.md.sha384.create(); - break; - case 'sha512WithRSAEncryption': - csr.md = forge.md.sha512.create(); - break; - case 'RSASSA-PSS': - csr.md = forge.md.sha256.create(); - break; - } - } - if(csr.md === null) { - var error = new Error('Could not compute certification request digest. ' + - 'Unknown signature OID.'); - error.signatureOid = csr.signatureOid; - throw error; - } - - // produce DER formatted CertificationRequestInfo and digest it - var bytes = asn1.toDer(csr.certificationRequestInfo); - csr.md.update(bytes.getBytes()); - } - - // handle subject, build subject message digest - var smd = forge.md.sha1.create(); - csr.subject.getField = function(sn) { - return _getAttribute(csr.subject, sn); - }; - csr.subject.addField = function(attr) { - _fillMissingFields([attr]); - csr.subject.attributes.push(attr); - }; - csr.subject.attributes = pki.RDNAttributesAsArray( - capture.certificationRequestInfoSubject, smd); - csr.subject.hash = smd.digest().toHex(); - - // convert RSA public key from ASN.1 - csr.publicKey = pki.publicKeyFromAsn1(capture.subjectPublicKeyInfo); - - // convert attributes from ASN.1 - csr.getAttribute = function(sn) { - return _getAttribute(csr, sn); - }; - csr.addAttribute = function(attr) { - _fillMissingFields([attr]); - csr.attributes.push(attr); - }; - csr.attributes = pki.CRIAttributesAsArray( - capture.certificationRequestInfoAttributes || []); - - return csr; -}; - -/** - * Creates an empty certification request (a CSR or certificate signing - * request). Once created, its public key and attributes can be set and then - * it can be signed. - * - * @return the empty certification request. - */ -pki.createCertificationRequest = function() { - var csr = {}; - csr.version = 0x00; - csr.signatureOid = null; - csr.signature = null; - csr.siginfo = {}; - csr.siginfo.algorithmOid = null; - - csr.subject = {}; - csr.subject.getField = function(sn) { - return _getAttribute(csr.subject, sn); - }; - csr.subject.addField = function(attr) { - _fillMissingFields([attr]); - csr.subject.attributes.push(attr); - }; - csr.subject.attributes = []; - csr.subject.hash = null; - - csr.publicKey = null; - csr.attributes = []; - csr.getAttribute = function(sn) { - return _getAttribute(csr, sn); - }; - csr.addAttribute = function(attr) { - _fillMissingFields([attr]); - csr.attributes.push(attr); - }; - csr.md = null; - - /** - * Sets the subject of this certification request. - * - * @param attrs the array of subject attributes to use. - */ - csr.setSubject = function(attrs) { - // set new attributes - _fillMissingFields(attrs); - csr.subject.attributes = attrs; - csr.subject.hash = null; - }; - - /** - * Sets the attributes of this certification request. - * - * @param attrs the array of attributes to use. - */ - csr.setAttributes = function(attrs) { - // set new attributes - _fillMissingFields(attrs); - csr.attributes = attrs; - }; - - /** - * Signs this certification request using the given private key. - * - * @param key the private key to sign with. - * @param md the message digest object to use (defaults to forge.md.sha1). - */ - csr.sign = function(key, md) { - // TODO: get signature OID from private key - csr.md = md || forge.md.sha1.create(); - var algorithmOid = oids[csr.md.algorithm + 'WithRSAEncryption']; - if(!algorithmOid) { - var error = new Error('Could not compute certification request digest. ' + - 'Unknown message digest algorithm OID.'); - error.algorithm = csr.md.algorithm; - throw error; - } - csr.signatureOid = csr.siginfo.algorithmOid = algorithmOid; - - // get CertificationRequestInfo, convert to DER - csr.certificationRequestInfo = pki.getCertificationRequestInfo(csr); - var bytes = asn1.toDer(csr.certificationRequestInfo); - - // digest and sign - csr.md.update(bytes.getBytes()); - csr.signature = key.sign(csr.md); - }; - - /** - * Attempts verify the signature on the passed certification request using - * its public key. - * - * A CSR that has been exported to a file in PEM format can be verified using - * OpenSSL using this command: - * - * openssl req -in -verify -noout -text - * - * @return true if verified, false if not. - */ - csr.verify = function() { - var rval = false; - - var md = csr.md; - if(md === null) { - // check signature OID for supported signature types - if(csr.signatureOid in oids) { - // TODO: create DRY `OID to md` function - var oid = oids[csr.signatureOid]; - switch(oid) { - case 'sha1WithRSAEncryption': - md = forge.md.sha1.create(); - break; - case 'md5WithRSAEncryption': - md = forge.md.md5.create(); - break; - case 'sha256WithRSAEncryption': - md = forge.md.sha256.create(); - break; - case 'sha384WithRSAEncryption': - md = forge.md.sha384.create(); - break; - case 'sha512WithRSAEncryption': - md = forge.md.sha512.create(); - break; - case 'RSASSA-PSS': - md = forge.md.sha256.create(); - break; - } - } - if(md === null) { - var error = new Error( - 'Could not compute certification request digest. ' + - 'Unknown signature OID.'); - error.signatureOid = csr.signatureOid; - throw error; - } - - // produce DER formatted CertificationRequestInfo and digest it - var cri = csr.certificationRequestInfo || - pki.getCertificationRequestInfo(csr); - var bytes = asn1.toDer(cri); - md.update(bytes.getBytes()); - } - - if(md !== null) { - var scheme; - - switch(csr.signatureOid) { - case oids.sha1WithRSAEncryption: - /* use PKCS#1 v1.5 padding scheme */ - break; - case oids['RSASSA-PSS']: - var hash, mgf; - - /* initialize mgf */ - hash = oids[csr.signatureParameters.mgf.hash.algorithmOid]; - if(hash === undefined || forge.md[hash] === undefined) { - var error = new Error('Unsupported MGF hash function.'); - error.oid = csr.signatureParameters.mgf.hash.algorithmOid; - error.name = hash; - throw error; - } - - mgf = oids[csr.signatureParameters.mgf.algorithmOid]; - if(mgf === undefined || forge.mgf[mgf] === undefined) { - var error = new Error('Unsupported MGF function.'); - error.oid = csr.signatureParameters.mgf.algorithmOid; - error.name = mgf; - throw error; - } - - mgf = forge.mgf[mgf].create(forge.md[hash].create()); - - /* initialize hash function */ - hash = oids[csr.signatureParameters.hash.algorithmOid]; - if(hash === undefined || forge.md[hash] === undefined) { - var error = new Error('Unsupported RSASSA-PSS hash function.'); - error.oid = csr.signatureParameters.hash.algorithmOid; - error.name = hash; - throw error; - } - - scheme = forge.pss.create(forge.md[hash].create(), mgf, - csr.signatureParameters.saltLength); - break; - } - - // verify signature on csr using its public key - rval = csr.publicKey.verify( - md.digest().getBytes(), csr.signature, scheme); - } - - return rval; - }; - - return csr; -}; - -/** - * Converts an X.509 subject or issuer to an ASN.1 RDNSequence. - * - * @param obj the subject or issuer (distinguished name). - * - * @return the ASN.1 RDNSequence. - */ -function _dnToAsn1(obj) { - // create an empty RDNSequence - var rval = asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []); - - // iterate over attributes - var attr, set; - var attrs = obj.attributes; - for(var i = 0; i < attrs.length; ++i) { - attr = attrs[i]; - var value = attr.value; - - // reuse tag class for attribute value if available - var valueTagClass = asn1.Type.PRINTABLESTRING; - if('valueTagClass' in attr) { - valueTagClass = attr.valueTagClass; - - if(valueTagClass === asn1.Type.UTF8) { - value = forge.util.encodeUtf8(value); - } - // FIXME: handle more encodings - } - - // create a RelativeDistinguishedName set - // each value in the set is an AttributeTypeAndValue first - // containing the type (an OID) and second the value - set = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, [ - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // AttributeType - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(attr.type).getBytes()), - // AttributeValue - asn1.create(asn1.Class.UNIVERSAL, valueTagClass, false, value) - ]) - ]); - rval.value.push(set); - } - - return rval; -} - -/** - * Gets all printable attributes (typically of an issuer or subject) in a - * simplified JSON format for display. - * - * @param attrs the attributes. - * - * @return the JSON for display. - */ -function _getAttributesAsJson(attrs) { - var rval = {}; - for(var i = 0; i < attrs.length; ++i) { - var attr = attrs[i]; - if(attr.shortName && ( - attr.valueTagClass === asn1.Type.UTF8 || - attr.valueTagClass === asn1.Type.PRINTABLESTRING || - attr.valueTagClass === asn1.Type.IA5STRING)) { - var value = attr.value; - if(attr.valueTagClass === asn1.Type.UTF8) { - value = forge.util.encodeUtf8(attr.value); - } - if(!(attr.shortName in rval)) { - rval[attr.shortName] = value; - } else if(forge.util.isArray(rval[attr.shortName])) { - rval[attr.shortName].push(value); - } else { - rval[attr.shortName] = [rval[attr.shortName], value]; - } - } - } - return rval; -} - -/** - * Fills in missing fields in attributes. - * - * @param attrs the attributes to fill missing fields in. - */ -function _fillMissingFields(attrs) { - var attr; - for(var i = 0; i < attrs.length; ++i) { - attr = attrs[i]; - - // populate missing name - if(typeof attr.name === 'undefined') { - if(attr.type && attr.type in pki.oids) { - attr.name = pki.oids[attr.type]; - } else if(attr.shortName && attr.shortName in _shortNames) { - attr.name = pki.oids[_shortNames[attr.shortName]]; - } - } - - // populate missing type (OID) - if(typeof attr.type === 'undefined') { - if(attr.name && attr.name in pki.oids) { - attr.type = pki.oids[attr.name]; - } else { - var error = new Error('Attribute type not specified.'); - error.attribute = attr; - throw error; - } - } - - // populate missing shortname - if(typeof attr.shortName === 'undefined') { - if(attr.name && attr.name in _shortNames) { - attr.shortName = _shortNames[attr.name]; - } - } - - // convert extensions to value - if(attr.type === oids.extensionRequest) { - attr.valueConstructed = true; - attr.valueTagClass = asn1.Type.SEQUENCE; - if(!attr.value && attr.extensions) { - attr.value = []; - for(var ei = 0; ei < attr.extensions.length; ++ei) { - attr.value.push(pki.certificateExtensionToAsn1( - _fillMissingExtensionFields(attr.extensions[ei]))); - } - } - } - - if(typeof attr.value === 'undefined') { - var error = new Error('Attribute value not specified.'); - error.attribute = attr; - throw error; - } - } -} - -/** - * Fills in missing fields in certificate extensions. - * - * @param e the extension. - * @param [options] the options to use. - * [cert] the certificate the extensions are for. - * - * @return the extension. - */ -function _fillMissingExtensionFields(e, options) { - options = options || {}; - - // populate missing name - if(typeof e.name === 'undefined') { - if(e.id && e.id in pki.oids) { - e.name = pki.oids[e.id]; - } - } - - // populate missing id - if(typeof e.id === 'undefined') { - if(e.name && e.name in pki.oids) { - e.id = pki.oids[e.name]; - } else { - var error = new Error('Extension ID not specified.'); - error.extension = e; - throw error; - } - } - - if(typeof e.value !== 'undefined') { - return e; - } - - // handle missing value: - - // value is a BIT STRING - if(e.name === 'keyUsage') { - // build flags - var unused = 0; - var b2 = 0x00; - var b3 = 0x00; - if(e.digitalSignature) { - b2 |= 0x80; - unused = 7; - } - if(e.nonRepudiation) { - b2 |= 0x40; - unused = 6; - } - if(e.keyEncipherment) { - b2 |= 0x20; - unused = 5; - } - if(e.dataEncipherment) { - b2 |= 0x10; - unused = 4; - } - if(e.keyAgreement) { - b2 |= 0x08; - unused = 3; - } - if(e.keyCertSign) { - b2 |= 0x04; - unused = 2; - } - if(e.cRLSign) { - b2 |= 0x02; - unused = 1; - } - if(e.encipherOnly) { - b2 |= 0x01; - unused = 0; - } - if(e.decipherOnly) { - b3 |= 0x80; - unused = 7; - } - - // create bit string - var value = String.fromCharCode(unused); - if(b3 !== 0) { - value += String.fromCharCode(b2) + String.fromCharCode(b3); - } else if(b2 !== 0) { - value += String.fromCharCode(b2); - } - e.value = asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false, value); - } else if(e.name === 'basicConstraints') { - // basicConstraints is a SEQUENCE - e.value = asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []); - // cA BOOLEAN flag defaults to false - if(e.cA) { - e.value.value.push(asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.BOOLEAN, false, - String.fromCharCode(0xFF))); - } - if('pathLenConstraint' in e) { - e.value.value.push(asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - asn1.integerToDer(e.pathLenConstraint).getBytes())); - } - } else if(e.name === 'extKeyUsage') { - // extKeyUsage is a SEQUENCE of OIDs - e.value = asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []); - var seq = e.value.value; - for(var key in e) { - if(e[key] !== true) { - continue; - } - // key is name in OID map - if(key in oids) { - seq.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, - false, asn1.oidToDer(oids[key]).getBytes())); - } else if(key.indexOf('.') !== -1) { - // assume key is an OID - seq.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, - false, asn1.oidToDer(key).getBytes())); - } - } - } else if(e.name === 'nsCertType') { - // nsCertType is a BIT STRING - // build flags - var unused = 0; - var b2 = 0x00; - - if(e.client) { - b2 |= 0x80; - unused = 7; - } - if(e.server) { - b2 |= 0x40; - unused = 6; - } - if(e.email) { - b2 |= 0x20; - unused = 5; - } - if(e.objsign) { - b2 |= 0x10; - unused = 4; - } - if(e.reserved) { - b2 |= 0x08; - unused = 3; - } - if(e.sslCA) { - b2 |= 0x04; - unused = 2; - } - if(e.emailCA) { - b2 |= 0x02; - unused = 1; - } - if(e.objCA) { - b2 |= 0x01; - unused = 0; - } - - // create bit string - var value = String.fromCharCode(unused); - if(b2 !== 0) { - value += String.fromCharCode(b2); - } - e.value = asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false, value); - } else if(e.name === 'subjectAltName' || e.name === 'issuerAltName') { - // SYNTAX SEQUENCE - e.value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []); - - var altName; - for(var n = 0; n < e.altNames.length; ++n) { - altName = e.altNames[n]; - var value = altName.value; - // handle IP - if(altName.type === 7 && altName.ip) { - value = forge.util.bytesFromIP(altName.ip); - if(value === null) { - var error = new Error( - 'Extension "ip" value is not a valid IPv4 or IPv6 address.'); - error.extension = e; - throw error; - } - } else if(altName.type === 8) { - // handle OID - if(altName.oid) { - value = asn1.oidToDer(asn1.oidToDer(altName.oid)); - } else { - // deprecated ... convert value to OID - value = asn1.oidToDer(value); - } - } - e.value.value.push(asn1.create( - asn1.Class.CONTEXT_SPECIFIC, altName.type, false, - value)); - } - } else if(e.name === 'nsComment' && options.cert) { - // sanity check value is ASCII (req'd) and not too big - if(!(/^[\x00-\x7F]*$/.test(e.comment)) || - (e.comment.length < 1) || (e.comment.length > 128)) { - throw new Error('Invalid "nsComment" content.'); - } - // IA5STRING opaque comment - e.value = asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.IA5STRING, false, e.comment); - } else if(e.name === 'subjectKeyIdentifier' && options.cert) { - var ski = options.cert.generateSubjectKeyIdentifier(); - e.subjectKeyIdentifier = ski.toHex(); - // OCTETSTRING w/digest - e.value = asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, ski.getBytes()); - } else if(e.name === 'authorityKeyIdentifier' && options.cert) { - // SYNTAX SEQUENCE - e.value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []); - var seq = e.value.value; - - if(e.keyIdentifier) { - var keyIdentifier = (e.keyIdentifier === true ? - options.cert.generateSubjectKeyIdentifier().getBytes() : - e.keyIdentifier); - seq.push( - asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, false, keyIdentifier)); - } - - if(e.authorityCertIssuer) { - var authorityCertIssuer = [ - asn1.create(asn1.Class.CONTEXT_SPECIFIC, 4, true, [ - _dnToAsn1(e.authorityCertIssuer === true ? - options.cert.issuer : e.authorityCertIssuer) - ]) - ]; - seq.push( - asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, authorityCertIssuer)); - } - - if(e.serialNumber) { - var serialNumber = forge.util.hexToBytes(e.serialNumber === true ? - options.cert.serialNumber : e.serialNumber); - seq.push( - asn1.create(asn1.Class.CONTEXT_SPECIFIC, 2, false, serialNumber)); - } - } else if(e.name === 'cRLDistributionPoints') { - e.value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []); - var seq = e.value.value; - - // Create sub SEQUENCE of DistributionPointName - var subSeq = asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []); - - // Create fullName CHOICE - var fullNameGeneralNames = asn1.create( - asn1.Class.CONTEXT_SPECIFIC, 0, true, []); - var altName; - for(var n = 0; n < e.altNames.length; ++n) { - altName = e.altNames[n]; - var value = altName.value; - // handle IP - if(altName.type === 7 && altName.ip) { - value = forge.util.bytesFromIP(altName.ip); - if(value === null) { - var error = new Error( - 'Extension "ip" value is not a valid IPv4 or IPv6 address.'); - error.extension = e; - throw error; - } - } else if(altName.type === 8) { - // handle OID - if(altName.oid) { - value = asn1.oidToDer(asn1.oidToDer(altName.oid)); - } else { - // deprecated ... convert value to OID - value = asn1.oidToDer(value); - } - } - fullNameGeneralNames.value.push(asn1.create( - asn1.Class.CONTEXT_SPECIFIC, altName.type, false, - value)); - } - - // Add to the parent SEQUENCE - subSeq.value.push(asn1.create( - asn1.Class.CONTEXT_SPECIFIC, 0, true, [fullNameGeneralNames])); - seq.push(subSeq); - } - - // ensure value has been defined by now - if(typeof e.value === 'undefined') { - var error = new Error('Extension value not specified.'); - error.extension = e; - throw error; - } - - return e; -} - -/** - * Convert signature parameters object to ASN.1 - * - * @param {String} oid Signature algorithm OID - * @param params The signature parametrs object - * @return ASN.1 object representing signature parameters - */ -function _signatureParametersToAsn1(oid, params) { - switch(oid) { - case oids['RSASSA-PSS']: - var parts = []; - - if(params.hash.algorithmOid !== undefined) { - parts.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [ - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(params.hash.algorithmOid).getBytes()), - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '') - ]) - ])); - } - - if(params.mgf.algorithmOid !== undefined) { - parts.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, [ - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(params.mgf.algorithmOid).getBytes()), - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(params.mgf.hash.algorithmOid).getBytes()), - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '') - ]) - ]) - ])); - } - - if(params.saltLength !== undefined) { - parts.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, 2, true, [ - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - asn1.integerToDer(params.saltLength).getBytes()) - ])); - } - - return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, parts); - - default: - return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, ''); - } -} - -/** - * Converts a certification request's attributes to an ASN.1 set of - * CRIAttributes. - * - * @param csr certification request. - * - * @return the ASN.1 set of CRIAttributes. - */ -function _CRIAttributesToAsn1(csr) { - // create an empty context-specific container - var rval = asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, []); - - // no attributes, return empty container - if(csr.attributes.length === 0) { - return rval; - } - - // each attribute has a sequence with a type and a set of values - var attrs = csr.attributes; - for(var i = 0; i < attrs.length; ++i) { - var attr = attrs[i]; - var value = attr.value; - - // reuse tag class for attribute value if available - var valueTagClass = asn1.Type.UTF8; - if('valueTagClass' in attr) { - valueTagClass = attr.valueTagClass; - } - if(valueTagClass === asn1.Type.UTF8) { - value = forge.util.encodeUtf8(value); - } - var valueConstructed = false; - if('valueConstructed' in attr) { - valueConstructed = attr.valueConstructed; - } - // FIXME: handle more encodings - - // create a RelativeDistinguishedName set - // each value in the set is an AttributeTypeAndValue first - // containing the type (an OID) and second the value - var seq = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // AttributeType - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(attr.type).getBytes()), - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, [ - // AttributeValue - asn1.create( - asn1.Class.UNIVERSAL, valueTagClass, valueConstructed, value) - ]) - ]); - rval.value.push(seq); - } - - return rval; -} - -var jan_1_1950 = new Date('1950-01-01T00:00:00Z'); -var jan_1_2050 = new Date('2050-01-01T00:00:00Z'); - -/** - * Converts a Date object to ASN.1 - * Handles the different format before and after 1st January 2050 - * - * @param date date object. - * - * @return the ASN.1 object representing the date. - */ -function _dateToAsn1(date) { - if(date >= jan_1_1950 && date < jan_1_2050) { - return asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.UTCTIME, false, - asn1.dateToUtcTime(date)); - } else { - return asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.GENERALIZEDTIME, false, - asn1.dateToGeneralizedTime(date)); - } -} - -/** - * Gets the ASN.1 TBSCertificate part of an X.509v3 certificate. - * - * @param cert the certificate. - * - * @return the asn1 TBSCertificate. - */ -pki.getTBSCertificate = function(cert) { - // TBSCertificate - var notBefore = _dateToAsn1(cert.validity.notBefore); - var notAfter = _dateToAsn1(cert.validity.notAfter); - var tbs = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // version - asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [ - // integer - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - asn1.integerToDer(cert.version).getBytes()) - ]), - // serialNumber - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - forge.util.hexToBytes(cert.serialNumber)), - // signature - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // algorithm - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(cert.siginfo.algorithmOid).getBytes()), - // parameters - _signatureParametersToAsn1( - cert.siginfo.algorithmOid, cert.siginfo.parameters) - ]), - // issuer - _dnToAsn1(cert.issuer), - // validity - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - notBefore, - notAfter - ]), - // subject - _dnToAsn1(cert.subject), - // SubjectPublicKeyInfo - pki.publicKeyToAsn1(cert.publicKey) - ]); - - if(cert.issuer.uniqueId) { - // issuerUniqueID (optional) - tbs.value.push( - asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, [ - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false, - // TODO: support arbitrary bit length ids - String.fromCharCode(0x00) + - cert.issuer.uniqueId - ) - ]) - ); - } - if(cert.subject.uniqueId) { - // subjectUniqueID (optional) - tbs.value.push( - asn1.create(asn1.Class.CONTEXT_SPECIFIC, 2, true, [ - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false, - // TODO: support arbitrary bit length ids - String.fromCharCode(0x00) + - cert.subject.uniqueId - ) - ]) - ); - } - - if(cert.extensions.length > 0) { - // extensions (optional) - tbs.value.push(pki.certificateExtensionsToAsn1(cert.extensions)); - } - - return tbs; -}; - -/** - * Gets the ASN.1 CertificationRequestInfo part of a - * PKCS#10 CertificationRequest. - * - * @param csr the certification request. - * - * @return the asn1 CertificationRequestInfo. - */ -pki.getCertificationRequestInfo = function(csr) { - // CertificationRequestInfo - var cri = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // version - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, - asn1.integerToDer(csr.version).getBytes()), - // subject - _dnToAsn1(csr.subject), - // SubjectPublicKeyInfo - pki.publicKeyToAsn1(csr.publicKey), - // attributes - _CRIAttributesToAsn1(csr) - ]); - - return cri; -}; - -/** - * Converts a DistinguishedName (subject or issuer) to an ASN.1 object. - * - * @param dn the DistinguishedName. - * - * @return the asn1 representation of a DistinguishedName. - */ -pki.distinguishedNameToAsn1 = function(dn) { - return _dnToAsn1(dn); -}; - -/** - * Converts an X.509v3 RSA certificate to an ASN.1 object. - * - * @param cert the certificate. - * - * @return the asn1 representation of an X.509v3 RSA certificate. - */ -pki.certificateToAsn1 = function(cert) { - // prefer cached TBSCertificate over generating one - var tbsCertificate = cert.tbsCertificate || pki.getTBSCertificate(cert); - - // Certificate - return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // TBSCertificate - tbsCertificate, - // AlgorithmIdentifier (signature algorithm) - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // algorithm - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(cert.signatureOid).getBytes()), - // parameters - _signatureParametersToAsn1(cert.signatureOid, cert.signatureParameters) - ]), - // SignatureValue - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false, - String.fromCharCode(0x00) + cert.signature) - ]); -}; - -/** - * Converts X.509v3 certificate extensions to ASN.1. - * - * @param exts the extensions to convert. - * - * @return the extensions in ASN.1 format. - */ -pki.certificateExtensionsToAsn1 = function(exts) { - // create top-level extension container - var rval = asn1.create(asn1.Class.CONTEXT_SPECIFIC, 3, true, []); - - // create extension sequence (stores a sequence for each extension) - var seq = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []); - rval.value.push(seq); - - for(var i = 0; i < exts.length; ++i) { - seq.value.push(pki.certificateExtensionToAsn1(exts[i])); - } - - return rval; -}; - -/** - * Converts a single certificate extension to ASN.1. - * - * @param ext the extension to convert. - * - * @return the extension in ASN.1 format. - */ -pki.certificateExtensionToAsn1 = function(ext) { - // create a sequence for each extension - var extseq = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []); - - // extnID (OID) - extseq.value.push(asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(ext.id).getBytes())); - - // critical defaults to false - if(ext.critical) { - // critical BOOLEAN DEFAULT FALSE - extseq.value.push(asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.BOOLEAN, false, - String.fromCharCode(0xFF))); - } - - var value = ext.value; - if(typeof ext.value !== 'string') { - // value is asn.1 - value = asn1.toDer(value).getBytes(); - } - - // extnValue (OCTET STRING) - extseq.value.push(asn1.create( - asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, value)); - - return extseq; -}; - -/** - * Converts a PKCS#10 certification request to an ASN.1 object. - * - * @param csr the certification request. - * - * @return the asn1 representation of a certification request. - */ -pki.certificationRequestToAsn1 = function(csr) { - // prefer cached CertificationRequestInfo over generating one - var cri = csr.certificationRequestInfo || - pki.getCertificationRequestInfo(csr); - - // Certificate - return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // CertificationRequestInfo - cri, - // AlgorithmIdentifier (signature algorithm) - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ - // algorithm - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, - asn1.oidToDer(csr.signatureOid).getBytes()), - // parameters - _signatureParametersToAsn1(csr.signatureOid, csr.signatureParameters) - ]), - // signature - asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false, - String.fromCharCode(0x00) + csr.signature) - ]); -}; - -/** - * Creates a CA store. - * - * @param certs an optional array of certificate objects or PEM-formatted - * certificate strings to add to the CA store. - * - * @return the CA store. - */ -pki.createCaStore = function(certs) { - // create CA store - var caStore = { - // stored certificates - certs: {} - }; - - /** - * Gets the certificate that issued the passed certificate or its - * 'parent'. - * - * @param cert the certificate to get the parent for. - * - * @return the parent certificate or null if none was found. - */ - caStore.getIssuer = function(cert) { - var rval = getBySubject(cert.issuer); - - // see if there are multiple matches - /*if(forge.util.isArray(rval)) { - // TODO: resolve multiple matches by checking - // authorityKey/subjectKey/issuerUniqueID/other identifiers, etc. - // FIXME: or alternatively do authority key mapping - // if possible (X.509v1 certs can't work?) - throw new Error('Resolving multiple issuer matches not implemented yet.'); - }*/ - - return rval; - }; - - /** - * Adds a trusted certificate to the store. - * - * @param cert the certificate to add as a trusted certificate (either a - * pki.certificate object or a PEM-formatted certificate). - */ - caStore.addCertificate = function(cert) { - // convert from pem if necessary - if(typeof cert === 'string') { - cert = forge.pki.certificateFromPem(cert); - } - - ensureSubjectHasHash(cert.subject); - - if(!caStore.hasCertificate(cert)) { // avoid duplicate certificates in store - if(cert.subject.hash in caStore.certs) { - // subject hash already exists, append to array - var tmp = caStore.certs[cert.subject.hash]; - if(!forge.util.isArray(tmp)) { - tmp = [tmp]; - } - tmp.push(cert); - caStore.certs[cert.subject.hash] = tmp; - } else { - caStore.certs[cert.subject.hash] = cert; - } - } - }; - - /** - * Checks to see if the given certificate is in the store. - * - * @param cert the certificate to check (either a pki.certificate or a - * PEM-formatted certificate). - * - * @return true if the certificate is in the store, false if not. - */ - caStore.hasCertificate = function(cert) { - // convert from pem if necessary - if(typeof cert === 'string') { - cert = forge.pki.certificateFromPem(cert); - } - - var match = getBySubject(cert.subject); - if(!match) { - return false; - } - if(!forge.util.isArray(match)) { - match = [match]; - } - // compare DER-encoding of certificates - var der1 = asn1.toDer(pki.certificateToAsn1(cert)).getBytes(); - for(var i = 0; i < match.length; ++i) { - var der2 = asn1.toDer(pki.certificateToAsn1(match[i])).getBytes(); - if(der1 === der2) { - return true; - } - } - return false; - }; - - /** - * Lists all of the certificates kept in the store. - * - * @return an array of all of the pki.certificate objects in the store. - */ - caStore.listAllCertificates = function() { - var certList = []; - - for(var hash in caStore.certs) { - if(caStore.certs.hasOwnProperty(hash)) { - var value = caStore.certs[hash]; - if(!forge.util.isArray(value)) { - certList.push(value); - } else { - for(var i = 0; i < value.length; ++i) { - certList.push(value[i]); - } - } - } - } - - return certList; - }; - - /** - * Removes a certificate from the store. - * - * @param cert the certificate to remove (either a pki.certificate or a - * PEM-formatted certificate). - * - * @return the certificate that was removed or null if the certificate - * wasn't in store. - */ - caStore.removeCertificate = function(cert) { - var result; - - // convert from pem if necessary - if(typeof cert === 'string') { - cert = forge.pki.certificateFromPem(cert); - } - ensureSubjectHasHash(cert.subject); - if(!caStore.hasCertificate(cert)) { - return null; - } - - var match = getBySubject(cert.subject); - - if(!forge.util.isArray(match)) { - result = caStore.certs[cert.subject.hash]; - delete caStore.certs[cert.subject.hash]; - return result; - } - - // compare DER-encoding of certificates - var der1 = asn1.toDer(pki.certificateToAsn1(cert)).getBytes(); - for(var i = 0; i < match.length; ++i) { - var der2 = asn1.toDer(pki.certificateToAsn1(match[i])).getBytes(); - if(der1 === der2) { - result = match[i]; - match.splice(i, 1); - } - } - if(match.length === 0) { - delete caStore.certs[cert.subject.hash]; - } - - return result; - }; - - function getBySubject(subject) { - ensureSubjectHasHash(subject); - return caStore.certs[subject.hash] || null; - } - - function ensureSubjectHasHash(subject) { - // produce subject hash if it doesn't exist - if(!subject.hash) { - var md = forge.md.sha1.create(); - subject.attributes = pki.RDNAttributesAsArray(_dnToAsn1(subject), md); - subject.hash = md.digest().toHex(); - } - } - - // auto-add passed in certs - if(certs) { - // parse PEM-formatted certificates as necessary - for(var i = 0; i < certs.length; ++i) { - var cert = certs[i]; - caStore.addCertificate(cert); - } - } - - return caStore; -}; - -/** - * Certificate verification errors, based on TLS. - */ -pki.certificateError = { - bad_certificate: 'forge.pki.BadCertificate', - unsupported_certificate: 'forge.pki.UnsupportedCertificate', - certificate_revoked: 'forge.pki.CertificateRevoked', - certificate_expired: 'forge.pki.CertificateExpired', - certificate_unknown: 'forge.pki.CertificateUnknown', - unknown_ca: 'forge.pki.UnknownCertificateAuthority' -}; - -/** - * Verifies a certificate chain against the given Certificate Authority store - * with an optional custom verify callback. - * - * @param caStore a certificate store to verify against. - * @param chain the certificate chain to verify, with the root or highest - * authority at the end (an array of certificates). - * @param options a callback to be called for every certificate in the chain or - * an object with: - * verify a callback to be called for every certificate in the - * chain - * validityCheckDate the date against which the certificate - * validity period should be checked. Pass null to not check - * the validity period. By default, the current date is used. - * - * The verify callback has the following signature: - * - * verified - Set to true if certificate was verified, otherwise the - * pki.certificateError for why the certificate failed. - * depth - The current index in the chain, where 0 is the end point's cert. - * certs - The certificate chain, *NOTE* an empty chain indicates an anonymous - * end point. - * - * The function returns true on success and on failure either the appropriate - * pki.certificateError or an object with 'error' set to the appropriate - * pki.certificateError and 'message' set to a custom error message. - * - * @return true if successful, error thrown if not. - */ -pki.verifyCertificateChain = function(caStore, chain, options) { - /* From: RFC3280 - Internet X.509 Public Key Infrastructure Certificate - Section 6: Certification Path Validation - See inline parentheticals related to this particular implementation. - - The primary goal of path validation is to verify the binding between - a subject distinguished name or a subject alternative name and subject - public key, as represented in the end entity certificate, based on the - public key of the trust anchor. This requires obtaining a sequence of - certificates that support that binding. That sequence should be provided - in the passed 'chain'. The trust anchor should be in the given CA - store. The 'end entity' certificate is the certificate provided by the - end point (typically a server) and is the first in the chain. - - To meet this goal, the path validation process verifies, among other - things, that a prospective certification path (a sequence of n - certificates or a 'chain') satisfies the following conditions: - - (a) for all x in {1, ..., n-1}, the subject of certificate x is - the issuer of certificate x+1; - - (b) certificate 1 is issued by the trust anchor; - - (c) certificate n is the certificate to be validated; and - - (d) for all x in {1, ..., n}, the certificate was valid at the - time in question. - - Note that here 'n' is index 0 in the chain and 1 is the last certificate - in the chain and it must be signed by a certificate in the connection's - CA store. - - The path validation process also determines the set of certificate - policies that are valid for this path, based on the certificate policies - extension, policy mapping extension, policy constraints extension, and - inhibit any-policy extension. - - Note: Policy mapping extension not supported (Not Required). - - Note: If the certificate has an unsupported critical extension, then it - must be rejected. - - Note: A certificate is self-issued if the DNs that appear in the subject - and issuer fields are identical and are not empty. - - The path validation algorithm assumes the following seven inputs are - provided to the path processing logic. What this specific implementation - will use is provided parenthetically: - - (a) a prospective certification path of length n (the 'chain') - (b) the current date/time: ('now'). - (c) user-initial-policy-set: A set of certificate policy identifiers - naming the policies that are acceptable to the certificate user. - The user-initial-policy-set contains the special value any-policy - if the user is not concerned about certificate policy - (Not implemented. Any policy is accepted). - (d) trust anchor information, describing a CA that serves as a trust - anchor for the certification path. The trust anchor information - includes: - - (1) the trusted issuer name, - (2) the trusted public key algorithm, - (3) the trusted public key, and - (4) optionally, the trusted public key parameters associated - with the public key. - - (Trust anchors are provided via certificates in the CA store). - - The trust anchor information may be provided to the path processing - procedure in the form of a self-signed certificate. The trusted anchor - information is trusted because it was delivered to the path processing - procedure by some trustworthy out-of-band procedure. If the trusted - public key algorithm requires parameters, then the parameters are - provided along with the trusted public key (No parameters used in this - implementation). - - (e) initial-policy-mapping-inhibit, which indicates if policy mapping is - allowed in the certification path. - (Not implemented, no policy checking) - - (f) initial-explicit-policy, which indicates if the path must be valid - for at least one of the certificate policies in the user-initial- - policy-set. - (Not implemented, no policy checking) - - (g) initial-any-policy-inhibit, which indicates whether the - anyPolicy OID should be processed if it is included in a - certificate. - (Not implemented, so any policy is valid provided that it is - not marked as critical) */ - - /* Basic Path Processing: - - For each certificate in the 'chain', the following is checked: - - 1. The certificate validity period includes the current time. - 2. The certificate was signed by its parent (where the parent is either - the next in the chain or from the CA store). Allow processing to - continue to the next step if no parent is found but the certificate is - in the CA store. - 3. TODO: The certificate has not been revoked. - 4. The certificate issuer name matches the parent's subject name. - 5. TODO: If the certificate is self-issued and not the final certificate - in the chain, skip this step, otherwise verify that the subject name - is within one of the permitted subtrees of X.500 distinguished names - and that each of the alternative names in the subjectAltName extension - (critical or non-critical) is within one of the permitted subtrees for - that name type. - 6. TODO: If the certificate is self-issued and not the final certificate - in the chain, skip this step, otherwise verify that the subject name - is not within one of the excluded subtrees for X.500 distinguished - names and none of the subjectAltName extension names are excluded for - that name type. - 7. The other steps in the algorithm for basic path processing involve - handling the policy extension which is not presently supported in this - implementation. Instead, if a critical policy extension is found, the - certificate is rejected as not supported. - 8. If the certificate is not the first or if its the only certificate in - the chain (having no parent from the CA store or is self-signed) and it - has a critical key usage extension, verify that the keyCertSign bit is - set. If the key usage extension exists, verify that the basic - constraints extension exists. If the basic constraints extension exists, - verify that the cA flag is set. If pathLenConstraint is set, ensure that - the number of certificates that precede in the chain (come earlier - in the chain as implemented below), excluding the very first in the - chain (typically the end-entity one), isn't greater than the - pathLenConstraint. This constraint limits the number of intermediate - CAs that may appear below a CA before only end-entity certificates - may be issued. */ - - // if a verify callback is passed as the third parameter, package it within - // the options object. This is to support a legacy function signature that - // expected the verify callback as the third parameter. - if(typeof options === 'function') { - options = {verify: options}; - } - options = options || {}; - - // copy cert chain references to another array to protect against changes - // in verify callback - chain = chain.slice(0); - var certs = chain.slice(0); - - var validityCheckDate = options.validityCheckDate; - // if no validityCheckDate is specified, default to the current date. Make - // sure to maintain the value null because it indicates that the validity - // period should not be checked. - if(typeof validityCheckDate === 'undefined') { - validityCheckDate = new Date(); - } - - // verify each cert in the chain using its parent, where the parent - // is either the next in the chain or from the CA store - var first = true; - var error = null; - var depth = 0; - do { - var cert = chain.shift(); - var parent = null; - var selfSigned = false; - - if(validityCheckDate) { - // 1. check valid time - if(validityCheckDate < cert.validity.notBefore || - validityCheckDate > cert.validity.notAfter) { - error = { - message: 'Certificate is not valid yet or has expired.', - error: pki.certificateError.certificate_expired, - notBefore: cert.validity.notBefore, - notAfter: cert.validity.notAfter, - // TODO: we might want to reconsider renaming 'now' to - // 'validityCheckDate' should this API be changed in the future. - now: validityCheckDate - }; - } - } - - // 2. verify with parent from chain or CA store - if(error === null) { - parent = chain[0] || caStore.getIssuer(cert); - if(parent === null) { - // check for self-signed cert - if(cert.isIssuer(cert)) { - selfSigned = true; - parent = cert; - } - } - - if(parent) { - // FIXME: current CA store implementation might have multiple - // certificates where the issuer can't be determined from the - // certificate (happens rarely with, eg: old certificates) so normalize - // by always putting parents into an array - // TODO: there's may be an extreme degenerate case currently uncovered - // where an old intermediate certificate seems to have a matching parent - // but none of the parents actually verify ... but the intermediate - // is in the CA and it should pass this check; needs investigation - var parents = parent; - if(!forge.util.isArray(parents)) { - parents = [parents]; - } - - // try to verify with each possible parent (typically only one) - var verified = false; - while(!verified && parents.length > 0) { - parent = parents.shift(); - try { - verified = parent.verify(cert); - } catch(ex) { - // failure to verify, don't care why, try next one - } - } - - if(!verified) { - error = { - message: 'Certificate signature is invalid.', - error: pki.certificateError.bad_certificate - }; - } - } - - if(error === null && (!parent || selfSigned) && - !caStore.hasCertificate(cert)) { - // no parent issuer and certificate itself is not trusted - error = { - message: 'Certificate is not trusted.', - error: pki.certificateError.unknown_ca - }; - } - } - - // TODO: 3. check revoked - - // 4. check for matching issuer/subject - if(error === null && parent && !cert.isIssuer(parent)) { - // parent is not issuer - error = { - message: 'Certificate issuer is invalid.', - error: pki.certificateError.bad_certificate - }; - } - - // 5. TODO: check names with permitted names tree - - // 6. TODO: check names against excluded names tree - - // 7. check for unsupported critical extensions - if(error === null) { - // supported extensions - var se = { - keyUsage: true, - basicConstraints: true - }; - for(var i = 0; error === null && i < cert.extensions.length; ++i) { - var ext = cert.extensions[i]; - if(ext.critical && !(ext.name in se)) { - error = { - message: - 'Certificate has an unsupported critical extension.', - error: pki.certificateError.unsupported_certificate - }; - } - } - } - - // 8. check for CA if cert is not first or is the only certificate - // remaining in chain with no parent or is self-signed - if(error === null && - (!first || (chain.length === 0 && (!parent || selfSigned)))) { - // first check keyUsage extension and then basic constraints - var bcExt = cert.getExtension('basicConstraints'); - var keyUsageExt = cert.getExtension('keyUsage'); - if(keyUsageExt !== null) { - // keyCertSign must be true and there must be a basic - // constraints extension - if(!keyUsageExt.keyCertSign || bcExt === null) { - // bad certificate - error = { - message: - 'Certificate keyUsage or basicConstraints conflict ' + - 'or indicate that the certificate is not a CA. ' + - 'If the certificate is the only one in the chain or ' + - 'isn\'t the first then the certificate must be a ' + - 'valid CA.', - error: pki.certificateError.bad_certificate - }; - } - } - // basic constraints cA flag must be set - if(error === null && bcExt !== null && !bcExt.cA) { - // bad certificate - error = { - message: - 'Certificate basicConstraints indicates the certificate ' + - 'is not a CA.', - error: pki.certificateError.bad_certificate - }; - } - // if error is not null and keyUsage is available, then we know it - // has keyCertSign and there is a basic constraints extension too, - // which means we can check pathLenConstraint (if it exists) - if(error === null && keyUsageExt !== null && - 'pathLenConstraint' in bcExt) { - // pathLen is the maximum # of intermediate CA certs that can be - // found between the current certificate and the end-entity (depth 0) - // certificate; this number does not include the end-entity (depth 0, - // last in the chain) even if it happens to be a CA certificate itself - var pathLen = depth - 1; - if(pathLen > bcExt.pathLenConstraint) { - // pathLenConstraint violated, bad certificate - error = { - message: - 'Certificate basicConstraints pathLenConstraint violated.', - error: pki.certificateError.bad_certificate - }; - } - } - } - - // call application callback - var vfd = (error === null) ? true : error.error; - var ret = options.verify ? options.verify(vfd, depth, certs) : vfd; - if(ret === true) { - // clear any set error - error = null; - } else { - // if passed basic tests, set default message and alert - if(vfd === true) { - error = { - message: 'The application rejected the certificate.', - error: pki.certificateError.bad_certificate - }; - } - - // check for custom error info - if(ret || ret === 0) { - // set custom message and error - if(typeof ret === 'object' && !forge.util.isArray(ret)) { - if(ret.message) { - error.message = ret.message; - } - if(ret.error) { - error.error = ret.error; - } - } else if(typeof ret === 'string') { - // set custom error - error.error = ret; - } - } - - // throw error - throw error; - } - - // no longer first cert in chain - first = false; - ++depth; - } while(chain.length > 0); - - return true; -}; diff --git a/reverse_engineering/node_modules/node-forge/lib/xhr.js b/reverse_engineering/node_modules/node-forge/lib/xhr.js deleted file mode 100644 index e493c3b..0000000 --- a/reverse_engineering/node_modules/node-forge/lib/xhr.js +++ /dev/null @@ -1,736 +0,0 @@ -/** - * XmlHttpRequest implementation that uses TLS and flash SocketPool. - * - * @author Dave Longley - * - * Copyright (c) 2010-2013 Digital Bazaar, Inc. - */ -var forge = require('./forge'); -require('./socket'); -require('./http'); - -/* XHR API */ -var xhrApi = module.exports = forge.xhr = forge.xhr || {}; - -(function($) { - -// logging category -var cat = 'forge.xhr'; - -/* -XMLHttpRequest interface definition from: -http://www.w3.org/TR/XMLHttpRequest - -interface XMLHttpRequest { - // event handler - attribute EventListener onreadystatechange; - - // state - const unsigned short UNSENT = 0; - const unsigned short OPENED = 1; - const unsigned short HEADERS_RECEIVED = 2; - const unsigned short LOADING = 3; - const unsigned short DONE = 4; - readonly attribute unsigned short readyState; - - // request - void open(in DOMString method, in DOMString url); - void open(in DOMString method, in DOMString url, in boolean async); - void open(in DOMString method, in DOMString url, - in boolean async, in DOMString user); - void open(in DOMString method, in DOMString url, - in boolean async, in DOMString user, in DOMString password); - void setRequestHeader(in DOMString header, in DOMString value); - void send(); - void send(in DOMString data); - void send(in Document data); - void abort(); - - // response - DOMString getAllResponseHeaders(); - DOMString getResponseHeader(in DOMString header); - readonly attribute DOMString responseText; - readonly attribute Document responseXML; - readonly attribute unsigned short status; - readonly attribute DOMString statusText; -}; -*/ - -// readyStates -var UNSENT = 0; -var OPENED = 1; -var HEADERS_RECEIVED = 2; -var LOADING = 3; -var DONE = 4; - -// exceptions -var INVALID_STATE_ERR = 11; -var SYNTAX_ERR = 12; -var SECURITY_ERR = 18; -var NETWORK_ERR = 19; -var ABORT_ERR = 20; - -// private flash socket pool vars -var _sp = null; -var _policyPort = 0; -var _policyUrl = null; - -// default client (used if no special URL provided when creating an XHR) -var _client = null; - -// all clients including the default, key'd by full base url -// (multiple cross-domain http clients are permitted so there may be more -// than one client in this map) -// TODO: provide optional clean up API for non-default clients -var _clients = {}; - -// the default maximum number of concurrents connections per client -var _maxConnections = 10; - -var net = forge.net; -var http = forge.http; - -/** - * Initializes flash XHR support. - * - * @param options: - * url: the default base URL to connect to if xhr URLs are relative, - * ie: https://myserver.com. - * flashId: the dom ID of the flash SocketPool. - * policyPort: the port that provides the server's flash policy, 0 to use - * the flash default. - * policyUrl: the policy file URL to use instead of a policy port. - * msie: true if browser is internet explorer, false if not. - * connections: the maximum number of concurrent connections. - * caCerts: a list of PEM-formatted certificates to trust. - * cipherSuites: an optional array of cipher suites to use, - * see forge.tls.CipherSuites. - * verify: optional TLS certificate verify callback to use (see forge.tls - * for details). - * getCertificate: an optional callback used to get a client-side - * certificate (see forge.tls for details). - * getPrivateKey: an optional callback used to get a client-side private - * key (see forge.tls for details). - * getSignature: an optional callback used to get a client-side signature - * (see forge.tls for details). - * persistCookies: true to use persistent cookies via flash local storage, - * false to only keep cookies in javascript. - * primeTlsSockets: true to immediately connect TLS sockets on their - * creation so that they will cache TLS sessions for reuse. - */ -xhrApi.init = function(options) { - forge.log.debug(cat, 'initializing', options); - - // update default policy port and max connections - _policyPort = options.policyPort || _policyPort; - _policyUrl = options.policyUrl || _policyUrl; - _maxConnections = options.connections || _maxConnections; - - // create the flash socket pool - _sp = net.createSocketPool({ - flashId: options.flashId, - policyPort: _policyPort, - policyUrl: _policyUrl, - msie: options.msie || false - }); - - // create default http client - _client = http.createClient({ - url: options.url || ( - window.location.protocol + '//' + window.location.host), - socketPool: _sp, - policyPort: _policyPort, - policyUrl: _policyUrl, - connections: options.connections || _maxConnections, - caCerts: options.caCerts, - cipherSuites: options.cipherSuites, - persistCookies: options.persistCookies || true, - primeTlsSockets: options.primeTlsSockets || false, - verify: options.verify, - getCertificate: options.getCertificate, - getPrivateKey: options.getPrivateKey, - getSignature: options.getSignature - }); - _clients[_client.url.full] = _client; - - forge.log.debug(cat, 'ready'); -}; - -/** - * Called to clean up the clients and socket pool. - */ -xhrApi.cleanup = function() { - // destroy all clients - for(var key in _clients) { - _clients[key].destroy(); - } - _clients = {}; - _client = null; - - // destroy socket pool - _sp.destroy(); - _sp = null; -}; - -/** - * Sets a cookie. - * - * @param cookie the cookie with parameters: - * name: the name of the cookie. - * value: the value of the cookie. - * comment: an optional comment string. - * maxAge: the age of the cookie in seconds relative to created time. - * secure: true if the cookie must be sent over a secure protocol. - * httpOnly: true to restrict access to the cookie from javascript - * (inaffective since the cookies are stored in javascript). - * path: the path for the cookie. - * domain: optional domain the cookie belongs to (must start with dot). - * version: optional version of the cookie. - * created: creation time, in UTC seconds, of the cookie. - */ -xhrApi.setCookie = function(cookie) { - // default cookie expiration to never - cookie.maxAge = cookie.maxAge || -1; - - // if the cookie's domain is set, use the appropriate client - if(cookie.domain) { - // add the cookies to the applicable domains - for(var key in _clients) { - var client = _clients[key]; - if(http.withinCookieDomain(client.url, cookie) && - client.secure === cookie.secure) { - client.setCookie(cookie); - } - } - } else { - // use the default domain - // FIXME: should a null domain cookie be added to all clients? should - // this be an option? - _client.setCookie(cookie); - } -}; - -/** - * Gets a cookie. - * - * @param name the name of the cookie. - * @param path an optional path for the cookie (if there are multiple cookies - * with the same name but different paths). - * @param domain an optional domain for the cookie (if not using the default - * domain). - * - * @return the cookie, cookies (if multiple matches), or null if not found. - */ -xhrApi.getCookie = function(name, path, domain) { - var rval = null; - - if(domain) { - // get the cookies from the applicable domains - for(var key in _clients) { - var client = _clients[key]; - if(http.withinCookieDomain(client.url, domain)) { - var cookie = client.getCookie(name, path); - if(cookie !== null) { - if(rval === null) { - rval = cookie; - } else if(!forge.util.isArray(rval)) { - rval = [rval, cookie]; - } else { - rval.push(cookie); - } - } - } - } - } else { - // get cookie from default domain - rval = _client.getCookie(name, path); - } - - return rval; -}; - -/** - * Removes a cookie. - * - * @param name the name of the cookie. - * @param path an optional path for the cookie (if there are multiple cookies - * with the same name but different paths). - * @param domain an optional domain for the cookie (if not using the default - * domain). - * - * @return true if a cookie was removed, false if not. - */ -xhrApi.removeCookie = function(name, path, domain) { - var rval = false; - - if(domain) { - // remove the cookies from the applicable domains - for(var key in _clients) { - var client = _clients[key]; - if(http.withinCookieDomain(client.url, domain)) { - if(client.removeCookie(name, path)) { - rval = true; - } - } - } - } else { - // remove cookie from default domain - rval = _client.removeCookie(name, path); - } - - return rval; -}; - -/** - * Creates a new XmlHttpRequest. By default the base URL, flash policy port, - * etc, will be used. However, an XHR can be created to point at another - * cross-domain URL. - * - * @param options: - * logWarningOnError: If true and an HTTP error status code is received then - * log a warning, otherwise log a verbose message. - * verbose: If true be very verbose in the output including the response - * event and response body, otherwise only include status, timing, and - * data size. - * logError: a multi-var log function for warnings that takes the log - * category as the first var. - * logWarning: a multi-var log function for warnings that takes the log - * category as the first var. - * logDebug: a multi-var log function for warnings that takes the log - * category as the first var. - * logVerbose: a multi-var log function for warnings that takes the log - * category as the first var. - * url: the default base URL to connect to if xhr URLs are relative, - * eg: https://myserver.com, and note that the following options will be - * ignored if the URL is absent or the same as the default base URL. - * policyPort: the port that provides the server's flash policy, 0 to use - * the flash default. - * policyUrl: the policy file URL to use instead of a policy port. - * connections: the maximum number of concurrent connections. - * caCerts: a list of PEM-formatted certificates to trust. - * cipherSuites: an optional array of cipher suites to use, see - * forge.tls.CipherSuites. - * verify: optional TLS certificate verify callback to use (see forge.tls - * for details). - * getCertificate: an optional callback used to get a client-side - * certificate. - * getPrivateKey: an optional callback used to get a client-side private key. - * getSignature: an optional callback used to get a client-side signature. - * persistCookies: true to use persistent cookies via flash local storage, - * false to only keep cookies in javascript. - * primeTlsSockets: true to immediately connect TLS sockets on their - * creation so that they will cache TLS sessions for reuse. - * - * @return the XmlHttpRequest. - */ -xhrApi.create = function(options) { - // set option defaults - options = $.extend({ - logWarningOnError: true, - verbose: false, - logError: function() {}, - logWarning: function() {}, - logDebug: function() {}, - logVerbose: function() {}, - url: null - }, options || {}); - - // private xhr state - var _state = { - // the http client to use - client: null, - // request storage - request: null, - // response storage - response: null, - // asynchronous, true if doing asynchronous communication - asynchronous: true, - // sendFlag, true if send has been called - sendFlag: false, - // errorFlag, true if a network error occurred - errorFlag: false - }; - - // private log functions - var _log = { - error: options.logError || forge.log.error, - warning: options.logWarning || forge.log.warning, - debug: options.logDebug || forge.log.debug, - verbose: options.logVerbose || forge.log.verbose - }; - - // create public xhr interface - var xhr = { - // an EventListener - onreadystatechange: null, - // readonly, the current readyState - readyState: UNSENT, - // a string with the response entity-body - responseText: '', - // a Document for response entity-bodies that are XML - responseXML: null, - // readonly, returns the HTTP status code (i.e. 404) - status: 0, - // readonly, returns the HTTP status message (i.e. 'Not Found') - statusText: '' - }; - - // determine which http client to use - if(options.url === null) { - // use default - _state.client = _client; - } else { - var url = http.parseUrl(options.url); - if(!url) { - var error = new Error('Invalid url.'); - error.details = { - url: options.url - }; - } - - // find client - if(url.full in _clients) { - // client found - _state.client = _clients[url.full]; - } else { - // create client - _state.client = http.createClient({ - url: options.url, - socketPool: _sp, - policyPort: options.policyPort || _policyPort, - policyUrl: options.policyUrl || _policyUrl, - connections: options.connections || _maxConnections, - caCerts: options.caCerts, - cipherSuites: options.cipherSuites, - persistCookies: options.persistCookies || true, - primeTlsSockets: options.primeTlsSockets || false, - verify: options.verify, - getCertificate: options.getCertificate, - getPrivateKey: options.getPrivateKey, - getSignature: options.getSignature - }); - _clients[url.full] = _state.client; - } - } - - /** - * Opens the request. This method will create the HTTP request to send. - * - * @param method the HTTP method (i.e. 'GET'). - * @param url the relative url (the HTTP request path). - * @param async always true, ignored. - * @param user always null, ignored. - * @param password always null, ignored. - */ - xhr.open = function(method, url, async, user, password) { - // 1. validate Document if one is associated - // TODO: not implemented (not used yet) - - // 2. validate method token - // 3. change method to uppercase if it matches a known - // method (here we just require it to be uppercase, and - // we do not allow the standard methods) - // 4. disallow CONNECT, TRACE, or TRACK with a security error - switch(method) { - case 'DELETE': - case 'GET': - case 'HEAD': - case 'OPTIONS': - case 'PATCH': - case 'POST': - case 'PUT': - // valid method - break; - case 'CONNECT': - case 'TRACE': - case 'TRACK': - throw new Error('CONNECT, TRACE and TRACK methods are disallowed'); - default: - throw new Error('Invalid method: ' + method); - } - - // TODO: other validation steps in algorithm are not implemented - - // 19. set send flag to false - // set response body to null - // empty list of request headers - // set request method to given method - // set request URL - // set username, password - // set asychronous flag - _state.sendFlag = false; - xhr.responseText = ''; - xhr.responseXML = null; - - // custom: reset status and statusText - xhr.status = 0; - xhr.statusText = ''; - - // create the HTTP request - _state.request = http.createRequest({ - method: method, - path: url - }); - - // 20. set state to OPENED - xhr.readyState = OPENED; - - // 21. dispatch onreadystatechange - if(xhr.onreadystatechange) { - xhr.onreadystatechange(); - } - }; - - /** - * Adds an HTTP header field to the request. - * - * @param header the name of the header field. - * @param value the value of the header field. - */ - xhr.setRequestHeader = function(header, value) { - // 1. if state is not OPENED or send flag is true, raise exception - if(xhr.readyState != OPENED || _state.sendFlag) { - throw new Error('XHR not open or sending'); - } - - // TODO: other validation steps in spec aren't implemented - - // set header - _state.request.setField(header, value); - }; - - /** - * Sends the request and any associated data. - * - * @param data a string or Document object to send, null to send no data. - */ - xhr.send = function(data) { - // 1. if state is not OPENED or 2. send flag is true, raise - // an invalid state exception - if(xhr.readyState != OPENED || _state.sendFlag) { - throw new Error('XHR not open or sending'); - } - - // 3. ignore data if method is GET or HEAD - if(data && - _state.request.method !== 'GET' && - _state.request.method !== 'HEAD') { - // handle non-IE case - if(typeof(XMLSerializer) !== 'undefined') { - if(data instanceof Document) { - var xs = new XMLSerializer(); - _state.request.body = xs.serializeToString(data); - } else { - _state.request.body = data; - } - } else { - // poorly implemented IE case - if(typeof(data.xml) !== 'undefined') { - _state.request.body = data.xml; - } else { - _state.request.body = data; - } - } - } - - // 4. release storage mutex (not used) - - // 5. set error flag to false - _state.errorFlag = false; - - // 6. if asynchronous is true (must be in this implementation) - - // 6.1 set send flag to true - _state.sendFlag = true; - - // 6.2 dispatch onreadystatechange - if(xhr.onreadystatechange) { - xhr.onreadystatechange(); - } - - // create send options - var options = {}; - options.request = _state.request; - options.headerReady = function(e) { - // make cookies available for ease of use/iteration - xhr.cookies = _state.client.cookies; - - // TODO: update document.cookie with any cookies where the - // script's domain matches - - // headers received - xhr.readyState = HEADERS_RECEIVED; - xhr.status = e.response.code; - xhr.statusText = e.response.message; - _state.response = e.response; - if(xhr.onreadystatechange) { - xhr.onreadystatechange(); - } - if(!_state.response.aborted) { - // now loading body - xhr.readyState = LOADING; - if(xhr.onreadystatechange) { - xhr.onreadystatechange(); - } - } - }; - options.bodyReady = function(e) { - xhr.readyState = DONE; - var ct = e.response.getField('Content-Type'); - // Note: this null/undefined check is done outside because IE - // dies otherwise on a "'null' is null" error - if(ct) { - if(ct.indexOf('text/xml') === 0 || - ct.indexOf('application/xml') === 0 || - ct.indexOf('+xml') !== -1) { - try { - var doc = new ActiveXObject('MicrosoftXMLDOM'); - doc.async = false; - doc.loadXML(e.response.body); - xhr.responseXML = doc; - } catch(ex) { - var parser = new DOMParser(); - xhr.responseXML = parser.parseFromString(ex.body, 'text/xml'); - } - } - } - - var length = 0; - if(e.response.body !== null) { - xhr.responseText = e.response.body; - length = e.response.body.length; - } - // build logging output - var req = _state.request; - var output = - req.method + ' ' + req.path + ' ' + - xhr.status + ' ' + xhr.statusText + ' ' + - length + 'B ' + - (e.request.connectTime + e.request.time + e.response.time) + - 'ms'; - var lFunc; - if(options.verbose) { - lFunc = (xhr.status >= 400 && options.logWarningOnError) ? - _log.warning : _log.verbose; - lFunc(cat, output, - e, e.response.body ? '\n' + e.response.body : '\nNo content'); - } else { - lFunc = (xhr.status >= 400 && options.logWarningOnError) ? - _log.warning : _log.debug; - lFunc(cat, output); - } - if(xhr.onreadystatechange) { - xhr.onreadystatechange(); - } - }; - options.error = function(e) { - var req = _state.request; - _log.error(cat, req.method + ' ' + req.path, e); - - // 1. set response body to null - xhr.responseText = ''; - xhr.responseXML = null; - - // 2. set error flag to true (and reset status) - _state.errorFlag = true; - xhr.status = 0; - xhr.statusText = ''; - - // 3. set state to done - xhr.readyState = DONE; - - // 4. asyc flag is always true, so dispatch onreadystatechange - if(xhr.onreadystatechange) { - xhr.onreadystatechange(); - } - }; - - // 7. send request - _state.client.send(options); - }; - - /** - * Aborts the request. - */ - xhr.abort = function() { - // 1. abort send - // 2. stop network activity - _state.request.abort(); - - // 3. set response to null - xhr.responseText = ''; - xhr.responseXML = null; - - // 4. set error flag to true (and reset status) - _state.errorFlag = true; - xhr.status = 0; - xhr.statusText = ''; - - // 5. clear user headers - _state.request = null; - _state.response = null; - - // 6. if state is DONE or UNSENT, or if OPENED and send flag is false - if(xhr.readyState === DONE || xhr.readyState === UNSENT || - (xhr.readyState === OPENED && !_state.sendFlag)) { - // 7. set ready state to unsent - xhr.readyState = UNSENT; - } else { - // 6.1 set state to DONE - xhr.readyState = DONE; - - // 6.2 set send flag to false - _state.sendFlag = false; - - // 6.3 dispatch onreadystatechange - if(xhr.onreadystatechange) { - xhr.onreadystatechange(); - } - - // 7. set state to UNSENT - xhr.readyState = UNSENT; - } - }; - - /** - * Gets all response headers as a string. - * - * @return the HTTP-encoded response header fields. - */ - xhr.getAllResponseHeaders = function() { - var rval = ''; - if(_state.response !== null) { - var fields = _state.response.fields; - $.each(fields, function(name, array) { - $.each(array, function(i, value) { - rval += name + ': ' + value + '\r\n'; - }); - }); - } - return rval; - }; - - /** - * Gets a single header field value or, if there are multiple - * fields with the same name, a comma-separated list of header - * values. - * - * @return the header field value(s) or null. - */ - xhr.getResponseHeader = function(header) { - var rval = null; - if(_state.response !== null) { - if(header in _state.response.fields) { - rval = _state.response.fields[header]; - if(forge.util.isArray(rval)) { - rval = rval.join(); - } - } - } - return rval; - }; - - return xhr; -}; - -})(jQuery); diff --git a/reverse_engineering/node_modules/node-forge/package.json b/reverse_engineering/node_modules/node-forge/package.json deleted file mode 100644 index b501774..0000000 --- a/reverse_engineering/node_modules/node-forge/package.json +++ /dev/null @@ -1,158 +0,0 @@ -{ - "_from": "node-forge@^0.10.0", - "_id": "node-forge@0.10.0", - "_inBundle": false, - "_integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "_location": "/node-forge", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "node-forge@^0.10.0", - "name": "node-forge", - "escapedName": "node-forge", - "rawSpec": "^0.10.0", - "saveSpec": null, - "fetchSpec": "^0.10.0" - }, - "_requiredBy": [ - "/google-p12-pem" - ], - "_resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "_shasum": "32dea2afb3e9926f02ee5ce8794902691a676bf3", - "_spec": "node-forge@^0.10.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/google-p12-pem", - "author": { - "name": "Digital Bazaar, Inc.", - "email": "support@digitalbazaar.com", - "url": "http://digitalbazaar.com/" - }, - "browser": { - "buffer": false, - "crypto": false, - "process": false - }, - "bugs": { - "url": "https://github.com/digitalbazaar/forge/issues", - "email": "support@digitalbazaar.com" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Dave Longley", - "email": "dlongley@digitalbazaar.com" - }, - { - "name": "David I. Lehn", - "email": "dlehn@digitalbazaar.com" - }, - { - "name": "Stefan Siegl", - "email": "stesie@brokenpipe.de" - }, - { - "name": "Christoph Dorn", - "email": "christoph@christophdorn.com" - } - ], - "deprecated": false, - "description": "JavaScript implementations of network transports, cryptography, ciphers, PKI, message digests, and various utilities.", - "devDependencies": { - "browserify": "^16.5.2", - "commander": "^2.20.0", - "cross-env": "^5.2.1", - "eslint": "^7.8.1", - "eslint-config-digitalbazaar": "^2.5.0", - "express": "^4.16.2", - "karma": "^4.4.1", - "karma-browserify": "^7.0.0", - "karma-chrome-launcher": "^3.1.0", - "karma-edge-launcher": "^0.4.2", - "karma-firefox-launcher": "^1.3.0", - "karma-ie-launcher": "^1.0.0", - "karma-mocha": "^1.3.0", - "karma-mocha-reporter": "^2.2.5", - "karma-safari-launcher": "^1.0.0", - "karma-sauce-launcher": "^2.0.2", - "karma-sourcemap-loader": "^0.3.8", - "karma-tap-reporter": "0.0.6", - "karma-webpack": "^4.0.2", - "mocha": "^5.2.0", - "mocha-lcov-reporter": "^1.2.0", - "nodejs-websocket": "^1.7.1", - "nyc": "^15.1.0", - "opts": "^1.2.7", - "webpack": "^4.44.1", - "webpack-cli": "^3.3.12", - "worker-loader": "^2.0.0" - }, - "engines": { - "node": ">= 6.0.0" - }, - "files": [ - "lib/*.js", - "flash/swf/*.swf", - "dist/*.min.js", - "dist/*.min.js.map" - ], - "homepage": "https://github.com/digitalbazaar/forge", - "jspm": { - "format": "amd" - }, - "keywords": [ - "aes", - "asn", - "asn.1", - "cbc", - "crypto", - "cryptography", - "csr", - "des", - "gcm", - "hmac", - "http", - "https", - "md5", - "network", - "pkcs", - "pki", - "prng", - "rc2", - "rsa", - "sha1", - "sha256", - "sha384", - "sha512", - "ssh", - "tls", - "x.509", - "x509" - ], - "license": "(BSD-3-Clause OR GPL-2.0)", - "main": "lib/index.js", - "name": "node-forge", - "nyc": { - "exclude": [ - "tests" - ] - }, - "repository": { - "type": "git", - "url": "git+https://github.com/digitalbazaar/forge.git" - }, - "scripts": { - "build": "webpack", - "coverage": "rm -rf coverage && nyc --reporter=lcov --reporter=text-summary npm test", - "coverage-report": "nyc report", - "lint": "eslint *.js lib/*.js tests/*.js tests/**/*.js examples/*.js flash/*.js", - "prepublish": "npm run build", - "test": "cross-env NODE_ENV=test mocha -t 30000 -R ${REPORTER:-spec} tests/unit/index.js", - "test-build": "webpack --config webpack-tests.config.js", - "test-karma": "karma start", - "test-karma-sauce": "karma start karma-sauce.conf", - "test-server": "node tests/server.js", - "test-server-webid": "node tests/websockets/server-webid.js", - "test-server-ws": "node tests/websockets/server-ws.js" - }, - "version": "0.10.0" -} diff --git a/reverse_engineering/node_modules/once/LICENSE b/reverse_engineering/node_modules/once/LICENSE deleted file mode 100644 index 19129e3..0000000 --- a/reverse_engineering/node_modules/once/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -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. diff --git a/reverse_engineering/node_modules/once/README.md b/reverse_engineering/node_modules/once/README.md deleted file mode 100644 index 1f1ffca..0000000 --- a/reverse_engineering/node_modules/once/README.md +++ /dev/null @@ -1,79 +0,0 @@ -# once - -Only call a function once. - -## usage - -```javascript -var once = require('once') - -function load (file, cb) { - cb = once(cb) - loader.load('file') - loader.once('load', cb) - loader.once('error', cb) -} -``` - -Or add to the Function.prototype in a responsible way: - -```javascript -// only has to be done once -require('once').proto() - -function load (file, cb) { - cb = cb.once() - loader.load('file') - loader.once('load', cb) - loader.once('error', cb) -} -``` - -Ironically, the prototype feature makes this module twice as -complicated as necessary. - -To check whether you function has been called, use `fn.called`. Once the -function is called for the first time the return value of the original -function is saved in `fn.value` and subsequent calls will continue to -return this value. - -```javascript -var once = require('once') - -function load (cb) { - cb = once(cb) - var stream = createStream() - stream.once('data', cb) - stream.once('end', function () { - if (!cb.called) cb(new Error('not found')) - }) -} -``` - -## `once.strict(func)` - -Throw an error if the function is called twice. - -Some functions are expected to be called only once. Using `once` for them would -potentially hide logical errors. - -In the example below, the `greet` function has to call the callback only once: - -```javascript -function greet (name, cb) { - // return is missing from the if statement - // when no name is passed, the callback is called twice - if (!name) cb('Hello anonymous') - cb('Hello ' + name) -} - -function log (msg) { - console.log(msg) -} - -// this will print 'Hello anonymous' but the logical error will be missed -greet(null, once(msg)) - -// once.strict will print 'Hello anonymous' and throw an error when the callback will be called the second time -greet(null, once.strict(msg)) -``` diff --git a/reverse_engineering/node_modules/once/once.js b/reverse_engineering/node_modules/once/once.js deleted file mode 100644 index 2354067..0000000 --- a/reverse_engineering/node_modules/once/once.js +++ /dev/null @@ -1,42 +0,0 @@ -var wrappy = require('wrappy') -module.exports = wrappy(once) -module.exports.strict = wrappy(onceStrict) - -once.proto = once(function () { - Object.defineProperty(Function.prototype, 'once', { - value: function () { - return once(this) - }, - configurable: true - }) - - Object.defineProperty(Function.prototype, 'onceStrict', { - value: function () { - return onceStrict(this) - }, - configurable: true - }) -}) - -function once (fn) { - var f = function () { - if (f.called) return f.value - f.called = true - return f.value = fn.apply(this, arguments) - } - f.called = false - return f -} - -function onceStrict (fn) { - var f = function () { - if (f.called) - throw new Error(f.onceError) - f.called = true - return f.value = fn.apply(this, arguments) - } - var name = fn.name || 'Function wrapped with `once`' - f.onceError = name + " shouldn't be called more than once" - f.called = false - return f -} diff --git a/reverse_engineering/node_modules/once/package.json b/reverse_engineering/node_modules/once/package.json deleted file mode 100644 index 32dbc61..0000000 --- a/reverse_engineering/node_modules/once/package.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "_from": "once@^1.4.0", - "_id": "once@1.4.0", - "_inBundle": false, - "_integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "_location": "/once", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "once@^1.4.0", - "name": "once", - "escapedName": "once", - "rawSpec": "^1.4.0", - "saveSpec": null, - "fetchSpec": "^1.4.0" - }, - "_requiredBy": [ - "/end-of-stream" - ], - "_resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "_shasum": "583b1aa775961d4b113ac17d9c50baef9dd76bd1", - "_spec": "once@^1.4.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/end-of-stream", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "bugs": { - "url": "https://github.com/isaacs/once/issues" - }, - "bundleDependencies": false, - "dependencies": { - "wrappy": "1" - }, - "deprecated": false, - "description": "Run a function exactly one time", - "devDependencies": { - "tap": "^7.0.1" - }, - "directories": { - "test": "test" - }, - "files": [ - "once.js" - ], - "homepage": "https://github.com/isaacs/once#readme", - "keywords": [ - "once", - "function", - "one", - "single" - ], - "license": "ISC", - "main": "once.js", - "name": "once", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/once.git" - }, - "scripts": { - "test": "tap test/*.js" - }, - "version": "1.4.0" -} diff --git a/reverse_engineering/node_modules/p-event/index.d.ts b/reverse_engineering/node_modules/p-event/index.d.ts deleted file mode 100644 index 5686bad..0000000 --- a/reverse_engineering/node_modules/p-event/index.d.ts +++ /dev/null @@ -1,265 +0,0 @@ -/// - -declare class TimeoutErrorClass extends Error { - readonly name: 'TimeoutError'; - constructor(message?: string); -} - -declare namespace pEvent { - type TimeoutError = TimeoutErrorClass; - - type AddRemoveListener = ( - event: EventName, - listener: (...arguments: Arguments) => void - ) => void; - - interface Emitter { - on?: AddRemoveListener; - addListener?: AddRemoveListener; - addEventListener?: AddRemoveListener; - off?: AddRemoveListener; - removeListener?: AddRemoveListener; - removeEventListener?: AddRemoveListener; - } - - type FilterFunction = ( - ...arguments: ElementType - ) => boolean; - - interface CancelablePromise extends Promise { - cancel(): void; - } - - interface Options { - /** - Events that will reject the promise. - - @default ['error'] - */ - readonly rejectionEvents?: ReadonlyArray; - - /** - By default, the promisified function will only return the first argument from the event callback, which works fine for most APIs. This option can be useful for APIs that return multiple arguments in the callback. Turning this on will make it return an array of all arguments from the callback, instead of just the first argument. This also applies to rejections. - - @default false - - @example - ``` - import pEvent = require('p-event'); - import emitter from './some-event-emitter'; - - (async () => { - const [foo, bar] = await pEvent(emitter, 'finish', {multiArgs: true}); - })(); - ``` - */ - readonly multiArgs?: boolean; - - /** - Time in milliseconds before timing out. - - @default Infinity - */ - readonly timeout?: number; - - /** - Filter function for accepting an event. - - @example - ``` - import pEvent = require('p-event'); - import emitter from './some-event-emitter'; - - (async () => { - const result = await pEvent(emitter, '🦄', value => value > 3); - // Do something with first 🦄 event with a value greater than 3 - })(); - ``` - */ - readonly filter?: FilterFunction; - } - - interface MultiArgumentsOptions - extends Options { - readonly multiArgs: true; - } - - interface MultipleOptions - extends Options { - /** - The number of times the event needs to be emitted before the promise resolves. - */ - readonly count: number; - - /** - Whether to resolve the promise immediately. Emitting one of the `rejectionEvents` won't throw an error. - - __Note__: The returned array will be mutated when an event is emitted. - - @example - ``` - import pEvent = require('p-event'); - - const emitter = new EventEmitter(); - - const promise = pEvent.multiple(emitter, 'hello', { - resolveImmediately: true, - count: Infinity - }); - - const result = await promise; - console.log(result); - //=> [] - - emitter.emit('hello', 'Jack'); - console.log(result); - //=> ['Jack'] - - emitter.emit('hello', 'Mark'); - console.log(result); - //=> ['Jack', 'Mark'] - - // Stops listening - emitter.emit('error', new Error('😿')); - - emitter.emit('hello', 'John'); - console.log(result); - //=> ['Jack', 'Mark'] - ``` - */ - readonly resolveImmediately?: boolean; - } - - interface MultipleMultiArgumentsOptions - extends MultipleOptions { - readonly multiArgs: true; - } - - interface IteratorOptions - extends Options { - /** - Maximum number of events for the iterator before it ends. When the limit is reached, the iterator will be marked as `done`. This option is useful to paginate events, for example, fetching 10 events per page. - - @default Infinity - */ - limit?: number; - - /** - Events that will end the iterator. - - @default [] - */ - resolutionEvents?: ReadonlyArray; - } - - interface IteratorMultiArgumentsOptions - extends IteratorOptions { - multiArgs: true; - } -} - -declare const pEvent: { - /** - Promisify an event by waiting for it to be emitted. - - @param emitter - Event emitter object. Should have either a `.on()`/`.addListener()`/`.addEventListener()` and `.off()`/`.removeListener()`/`.removeEventListener()` method, like the [Node.js `EventEmitter`](https://nodejs.org/api/events.html) and [DOM events](https://developer.mozilla.org/en-US/docs/Web/Events). - @param event - Name of the event or events to listen to. If the same event is defined both here and in `rejectionEvents`, this one takes priority.*Note**: `event` is a string for a single event type, for example, `'data'`. To listen on multiple events, pass an array of strings, such as `['started', 'stopped']`. - @returns Fulfills when emitter emits an event matching `event`, or rejects if emitter emits any of the events defined in the `rejectionEvents` option. The returned promise has a `.cancel()` method, which when called, removes the event listeners and causes the promise to never be settled. - - @example - ``` - // In Node.js: - import pEvent = require('p-event'); - import emitter from './some-event-emitter'; - - (async () => { - try { - const result = await pEvent(emitter, 'finish'); - - // `emitter` emitted a `finish` event - console.log(result); - } catch (error) { - // `emitter` emitted an `error` event - console.error(error); - } - })(); - - // In the browser: - (async () => { - await pEvent(document, 'DOMContentLoaded'); - console.log('😎'); - })(); - ``` - */ - ( - emitter: pEvent.Emitter, - event: string | symbol | ReadonlyArray, - options: pEvent.MultiArgumentsOptions - ): pEvent.CancelablePromise; - ( - emitter: pEvent.Emitter, - event: string | symbol | ReadonlyArray, - filter: pEvent.FilterFunction<[EmittedType]> - ): pEvent.CancelablePromise; - ( - emitter: pEvent.Emitter, - event: string | symbol | ReadonlyArray, - options?: pEvent.Options<[EmittedType]> - ): pEvent.CancelablePromise; - - /** - Wait for multiple event emissions. Returns an array. - */ - multiple( - emitter: pEvent.Emitter, - event: string | symbol | ReadonlyArray, - options: pEvent.MultipleMultiArgumentsOptions - ): pEvent.CancelablePromise; - multiple( - emitter: pEvent.Emitter, - event: string | symbol | ReadonlyArray, - options: pEvent.MultipleOptions<[EmittedType]> - ): pEvent.CancelablePromise; - - /** - @returns An [async iterator](https://2ality.com/2016/10/asynchronous-iteration.html) that lets you asynchronously iterate over events of `event` emitted from `emitter`. The iterator ends when `emitter` emits an event matching any of the events defined in `resolutionEvents`, or rejects if `emitter` emits any of the events defined in the `rejectionEvents` option. - - @example - ``` - import pEvent = require('p-event'); - import emitter from './some-event-emitter'; - - (async () => { - const asyncIterator = pEvent.iterator(emitter, 'data', { - resolutionEvents: ['finish'] - }); - - for await (const event of asyncIterator) { - console.log(event); - } - })(); - ``` - */ - iterator( - emitter: pEvent.Emitter, - event: string | symbol | ReadonlyArray, - options: pEvent.IteratorMultiArgumentsOptions - ): AsyncIterableIterator; - iterator( - emitter: pEvent.Emitter, - event: string | symbol | ReadonlyArray, - filter: pEvent.FilterFunction<[EmittedType]> - ): AsyncIterableIterator; - iterator( - emitter: pEvent.Emitter, - event: string | symbol | ReadonlyArray, - options?: pEvent.IteratorOptions<[EmittedType]> - ): AsyncIterableIterator; - - // TODO: Remove this for the next major release - default: typeof pEvent; - - TimeoutError: typeof TimeoutErrorClass; -}; - -export = pEvent; diff --git a/reverse_engineering/node_modules/p-event/index.js b/reverse_engineering/node_modules/p-event/index.js deleted file mode 100644 index 93e8454..0000000 --- a/reverse_engineering/node_modules/p-event/index.js +++ /dev/null @@ -1,291 +0,0 @@ -'use strict'; -const pTimeout = require('p-timeout'); - -const symbolAsyncIterator = Symbol.asyncIterator || '@@asyncIterator'; - -const normalizeEmitter = emitter => { - const addListener = emitter.on || emitter.addListener || emitter.addEventListener; - const removeListener = emitter.off || emitter.removeListener || emitter.removeEventListener; - - if (!addListener || !removeListener) { - throw new TypeError('Emitter is not compatible'); - } - - return { - addListener: addListener.bind(emitter), - removeListener: removeListener.bind(emitter) - }; -}; - -const toArray = value => Array.isArray(value) ? value : [value]; - -const multiple = (emitter, event, options) => { - let cancel; - const ret = new Promise((resolve, reject) => { - options = { - rejectionEvents: ['error'], - multiArgs: false, - resolveImmediately: false, - ...options - }; - - if (!(options.count >= 0 && (options.count === Infinity || Number.isInteger(options.count)))) { - throw new TypeError('The `count` option should be at least 0 or more'); - } - - // Allow multiple events - const events = toArray(event); - - const items = []; - const {addListener, removeListener} = normalizeEmitter(emitter); - - const onItem = (...args) => { - const value = options.multiArgs ? args : args[0]; - - if (options.filter && !options.filter(value)) { - return; - } - - items.push(value); - - if (options.count === items.length) { - cancel(); - resolve(items); - } - }; - - const rejectHandler = error => { - cancel(); - reject(error); - }; - - cancel = () => { - for (const event of events) { - removeListener(event, onItem); - } - - for (const rejectionEvent of options.rejectionEvents) { - removeListener(rejectionEvent, rejectHandler); - } - }; - - for (const event of events) { - addListener(event, onItem); - } - - for (const rejectionEvent of options.rejectionEvents) { - addListener(rejectionEvent, rejectHandler); - } - - if (options.resolveImmediately) { - resolve(items); - } - }); - - ret.cancel = cancel; - - if (typeof options.timeout === 'number') { - const timeout = pTimeout(ret, options.timeout); - timeout.cancel = cancel; - return timeout; - } - - return ret; -}; - -const pEvent = (emitter, event, options) => { - if (typeof options === 'function') { - options = {filter: options}; - } - - options = { - ...options, - count: 1, - resolveImmediately: false - }; - - const arrayPromise = multiple(emitter, event, options); - const promise = arrayPromise.then(array => array[0]); // eslint-disable-line promise/prefer-await-to-then - promise.cancel = arrayPromise.cancel; - - return promise; -}; - -module.exports = pEvent; -// TODO: Remove this for the next major release -module.exports.default = pEvent; - -module.exports.multiple = multiple; - -module.exports.iterator = (emitter, event, options) => { - if (typeof options === 'function') { - options = {filter: options}; - } - - // Allow multiple events - const events = toArray(event); - - options = { - rejectionEvents: ['error'], - resolutionEvents: [], - limit: Infinity, - multiArgs: false, - ...options - }; - - const {limit} = options; - const isValidLimit = limit >= 0 && (limit === Infinity || Number.isInteger(limit)); - if (!isValidLimit) { - throw new TypeError('The `limit` option should be a non-negative integer or Infinity'); - } - - if (limit === 0) { - // Return an empty async iterator to avoid any further cost - return { - [Symbol.asyncIterator]() { - return this; - }, - async next() { - return { - done: true, - value: undefined - }; - } - }; - } - - const {addListener, removeListener} = normalizeEmitter(emitter); - - let isDone = false; - let error; - let hasPendingError = false; - const nextQueue = []; - const valueQueue = []; - let eventCount = 0; - let isLimitReached = false; - - const valueHandler = (...args) => { - eventCount++; - isLimitReached = eventCount === limit; - - const value = options.multiArgs ? args : args[0]; - - if (nextQueue.length > 0) { - const {resolve} = nextQueue.shift(); - - resolve({done: false, value}); - - if (isLimitReached) { - cancel(); - } - - return; - } - - valueQueue.push(value); - - if (isLimitReached) { - cancel(); - } - }; - - const cancel = () => { - isDone = true; - for (const event of events) { - removeListener(event, valueHandler); - } - - for (const rejectionEvent of options.rejectionEvents) { - removeListener(rejectionEvent, rejectHandler); - } - - for (const resolutionEvent of options.resolutionEvents) { - removeListener(resolutionEvent, resolveHandler); - } - - while (nextQueue.length > 0) { - const {resolve} = nextQueue.shift(); - resolve({done: true, value: undefined}); - } - }; - - const rejectHandler = (...args) => { - error = options.multiArgs ? args : args[0]; - - if (nextQueue.length > 0) { - const {reject} = nextQueue.shift(); - reject(error); - } else { - hasPendingError = true; - } - - cancel(); - }; - - const resolveHandler = (...args) => { - const value = options.multiArgs ? args : args[0]; - - if (options.filter && !options.filter(value)) { - return; - } - - if (nextQueue.length > 0) { - const {resolve} = nextQueue.shift(); - resolve({done: true, value}); - } else { - valueQueue.push(value); - } - - cancel(); - }; - - for (const event of events) { - addListener(event, valueHandler); - } - - for (const rejectionEvent of options.rejectionEvents) { - addListener(rejectionEvent, rejectHandler); - } - - for (const resolutionEvent of options.resolutionEvents) { - addListener(resolutionEvent, resolveHandler); - } - - return { - [symbolAsyncIterator]() { - return this; - }, - async next() { - if (valueQueue.length > 0) { - const value = valueQueue.shift(); - return { - done: isDone && valueQueue.length === 0 && !isLimitReached, - value - }; - } - - if (hasPendingError) { - hasPendingError = false; - throw error; - } - - if (isDone) { - return { - done: true, - value: undefined - }; - } - - return new Promise((resolve, reject) => nextQueue.push({resolve, reject})); - }, - async return(value) { - cancel(); - return { - done: isDone, - value - }; - } - }; -}; - -module.exports.TimeoutError = pTimeout.TimeoutError; diff --git a/reverse_engineering/node_modules/p-event/license b/reverse_engineering/node_modules/p-event/license deleted file mode 100644 index fa7ceba..0000000 --- a/reverse_engineering/node_modules/p-event/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (https://sindresorhus.com) - -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/reverse_engineering/node_modules/p-event/package.json b/reverse_engineering/node_modules/p-event/package.json deleted file mode 100644 index d301add..0000000 --- a/reverse_engineering/node_modules/p-event/package.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "_from": "p-event@^4.1.0", - "_id": "p-event@4.2.0", - "_inBundle": false, - "_integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", - "_location": "/p-event", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "p-event@^4.1.0", - "name": "p-event", - "escapedName": "p-event", - "rawSpec": "^4.1.0", - "saveSpec": null, - "fetchSpec": "^4.1.0" - }, - "_requiredBy": [ - "/@google-cloud/bigquery" - ], - "_resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "_shasum": "af4b049c8acd91ae81083ebd1e6f5cae2044c1b5", - "_spec": "p-event@^4.1.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/@google-cloud/bigquery", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "https://sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/p-event/issues" - }, - "bundleDependencies": false, - "dependencies": { - "p-timeout": "^3.1.0" - }, - "deprecated": false, - "description": "Promisify an event by waiting for it to be emitted", - "devDependencies": { - "@types/node": "^12.0.2", - "ava": "^1.4.1", - "delay": "^4.1.0", - "tsd": "^0.11.0", - "xo": "^0.24.0" - }, - "engines": { - "node": ">=8" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "funding": "https://github.com/sponsors/sindresorhus", - "homepage": "https://github.com/sindresorhus/p-event#readme", - "keywords": [ - "promise", - "events", - "event", - "emitter", - "eventemitter", - "event-emitter", - "emit", - "emits", - "listener", - "promisify", - "addlistener", - "addeventlistener", - "wait", - "waits", - "on", - "browser", - "dom", - "async", - "await", - "promises", - "bluebird" - ], - "license": "MIT", - "name": "p-event", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/p-event.git" - }, - "scripts": { - "test": "xo && ava && tsd" - }, - "version": "4.2.0" -} diff --git a/reverse_engineering/node_modules/p-event/readme.md b/reverse_engineering/node_modules/p-event/readme.md deleted file mode 100644 index 4cd18e8..0000000 --- a/reverse_engineering/node_modules/p-event/readme.md +++ /dev/null @@ -1,324 +0,0 @@ -# p-event [![Build Status](https://travis-ci.com/sindresorhus/p-event.svg?branch=master)](https://travis-ci.com/sindresorhus/p-event) - -> Promisify an event by waiting for it to be emitted - -Useful when you need only one event emission and want to use it with promises or await it in an async function. - -It's works with any event API in Node.js and the browser (using a bundler). - -If you want multiple individual events as they are emitted, you can use the `pEvent.iterator()` method. [Observables](https://medium.com/@benlesh/learning-observable-by-building-observable-d5da57405d87) can be useful too. - -## Install - -``` -$ npm install p-event -``` - -## Usage - -In Node.js: - -```js -const pEvent = require('p-event'); -const emitter = require('./some-event-emitter'); - -(async () => { - try { - const result = await pEvent(emitter, 'finish'); - - // `emitter` emitted a `finish` event - console.log(result); - } catch (error) { - // `emitter` emitted an `error` event - console.error(error); - } -})(); -``` - -In the browser: - -```js -const pEvent = require('p-event'); - -(async () => { - await pEvent(document, 'DOMContentLoaded'); - console.log('😎'); -})(); -``` - -Async iteration: - -```js -const pEvent = require('p-event'); -const emitter = require('./some-event-emitter'); - -(async () => { - const asyncIterator = pEvent.iterator(emitter, 'data', { - resolutionEvents: ['finish'] - }); - - for await (const event of asyncIterator) { - console.log(event); - } -})(); -``` - -## API - -### pEvent(emitter, event, options?) -### pEvent(emitter, event, filter) - -Returns a `Promise` that is fulfilled when `emitter` emits an event matching `event`, or rejects if `emitter` emits any of the events defined in the `rejectionEvents` option. - -**Note**: `event` is a string for a single event type, for example, `'data'`. To listen on multiple -events, pass an array of strings, such as `['started', 'stopped']`. - -The returned promise has a `.cancel()` method, which when called, removes the event listeners and causes the promise to never be settled. - -#### emitter - -Type: `object` - -Event emitter object. - -Should have either a `.on()`/`.addListener()`/`.addEventListener()` and `.off()`/`.removeListener()`/`.removeEventListener()` method, like the [Node.js `EventEmitter`](https://nodejs.org/api/events.html) and [DOM events](https://developer.mozilla.org/en-US/docs/Web/Events). - -#### event - -Type: `string | string[]` - -Name of the event or events to listen to. - -If the same event is defined both here and in `rejectionEvents`, this one takes priority. - -#### options - -Type: `object` - -##### rejectionEvents - -Type: `string[]`\ -Default: `['error']` - -Events that will reject the promise. - -##### multiArgs - -Type: `boolean`\ -Default: `false` - -By default, the promisified function will only return the first argument from the event callback, which works fine for most APIs. This option can be useful for APIs that return multiple arguments in the callback. Turning this on will make it return an array of all arguments from the callback, instead of just the first argument. This also applies to rejections. - -Example: - -```js -const pEvent = require('p-event'); -const emitter = require('./some-event-emitter'); - -(async () => { - const [foo, bar] = await pEvent(emitter, 'finish', {multiArgs: true}); -})(); -``` - -##### timeout - -Type: `number`\ -Default: `Infinity` - -Time in milliseconds before timing out. - -##### filter - -Type: `Function` - -Filter function for accepting an event. - -```js -const pEvent = require('p-event'); -const emitter = require('./some-event-emitter'); - -(async () => { - const result = await pEvent(emitter, '🦄', value => value > 3); - // Do something with first 🦄 event with a value greater than 3 -})(); -``` - -### pEvent.multiple(emitter, event, options) - -Wait for multiple event emissions. Returns an array. - -This method has the same arguments and options as `pEvent()` with the addition of the following options: - -#### options - -Type: `object` - -##### count - -*Required*\ -Type: `number` - -The number of times the event needs to be emitted before the promise resolves. - -##### resolveImmediately - -Type: `boolean`\ -Default: `false` - -Whether to resolve the promise immediately. Emitting one of the `rejectionEvents` won't throw an error. - -**Note**: The returned array will be mutated when an event is emitted. - -Example: - -```js -const pEvent = require('p-event'); - -const emitter = new EventEmitter(); - -const promise = pEvent.multiple(emitter, 'hello', { - resolveImmediately: true, - count: Infinity -}); - -const result = await promise; -console.log(result); -//=> [] - -emitter.emit('hello', 'Jack'); -console.log(result); -//=> ['Jack'] - -emitter.emit('hello', 'Mark'); -console.log(result); -//=> ['Jack', 'Mark'] - -// Stops listening -emitter.emit('error', new Error('😿')); - -emitter.emit('hello', 'John'); -console.log(result); -//=> ['Jack', 'Mark'] -``` - -### pEvent.iterator(emitter, event, options?) -### pEvent.iterator(emitter, event, filter) - -Returns an [async iterator](https://2ality.com/2016/10/asynchronous-iteration.html) that lets you asynchronously iterate over events of `event` emitted from `emitter`. The iterator ends when `emitter` emits an event matching any of the events defined in `resolutionEvents`, or rejects if `emitter` emits any of the events defined in the `rejectionEvents` option. - -This method has the same arguments and options as `pEvent()` with the addition of the following options: - -#### options - -Type: `object` - -##### limit - -Type: `number` *(non-negative integer)*\ -Default: `Infinity` - -Maximum number of events for the iterator before it ends. When the limit is reached, the iterator will be marked as `done`. This option is useful to paginate events, for example, fetching 10 events per page. - -##### resolutionEvents - -Type: `string[]`\ -Default: `[]` - -Events that will end the iterator. - -### pEvent.TimeoutError - -Exposed for instance checking and sub-classing. - -Example: - -```js -const pEvent = require('p-event'); - -try { - await pEvent(emitter, 'finish'); -} catch (error) { - if (error instanceof pEvent.TimeoutError) { - // Do something specific for timeout errors - } -} -``` - -## Before and after - -```js -const fs = require('fs'); - -function getOpenReadStream(file, callback) { - const stream = fs.createReadStream(file); - - stream.on('open', () => { - callback(null, stream); - }); - - stream.on('error', error => { - callback(error); - }); -} - -getOpenReadStream('unicorn.txt', (error, stream) => { - if (error) { - console.error(error); - return; - } - - console.log('File descriptor:', stream.fd); - stream.pipe(process.stdout); -}); -``` - -```js -const fs = require('fs'); -const pEvent = require('p-event'); - -async function getOpenReadStream(file) { - const stream = fs.createReadStream(file); - await pEvent(stream, 'open'); - return stream; -} - -(async () => { - const stream = await getOpenReadStream('unicorn.txt'); - console.log('File descriptor:', stream.fd); - stream.pipe(process.stdout); -})().catch(console.error); -``` - -## Tip - -### Dealing with calls that resolve with an error code - -Some functions might use a single event for success and for certain errors. Promises make it easy to have combined error handler for both error events and successes containing values which represent errors. - -```js -const pEvent = require('p-event'); -const emitter = require('./some-event-emitter'); - -(async () => { - try { - const result = await pEvent(emitter, 'finish'); - - if (result === 'unwanted result') { - throw new Error('Emitter finished with an error'); - } - - // `emitter` emitted a `finish` event with an acceptable value - console.log(result); - } catch (error) { - // `emitter` emitted an `error` event or - // emitted a `finish` with 'unwanted result' - console.error(error); - } -})(); -``` - -## Related - -- [pify](https://github.com/sindresorhus/pify) - Promisify a callback-style function -- [p-map](https://github.com/sindresorhus/p-map) - Map over promises concurrently -- [More…](https://github.com/sindresorhus/promise-fun) diff --git a/reverse_engineering/node_modules/p-finally/index.js b/reverse_engineering/node_modules/p-finally/index.js deleted file mode 100644 index 52b7b49..0000000 --- a/reverse_engineering/node_modules/p-finally/index.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; -module.exports = (promise, onFinally) => { - onFinally = onFinally || (() => {}); - - return promise.then( - val => new Promise(resolve => { - resolve(onFinally()); - }).then(() => val), - err => new Promise(resolve => { - resolve(onFinally()); - }).then(() => { - throw err; - }) - ); -}; diff --git a/reverse_engineering/node_modules/p-finally/license b/reverse_engineering/node_modules/p-finally/license deleted file mode 100644 index 654d0bf..0000000 --- a/reverse_engineering/node_modules/p-finally/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -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/reverse_engineering/node_modules/p-finally/package.json b/reverse_engineering/node_modules/p-finally/package.json deleted file mode 100644 index 4007a22..0000000 --- a/reverse_engineering/node_modules/p-finally/package.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "_from": "p-finally@^1.0.0", - "_id": "p-finally@1.0.0", - "_inBundle": false, - "_integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "_location": "/p-finally", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "p-finally@^1.0.0", - "name": "p-finally", - "escapedName": "p-finally", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/p-timeout" - ], - "_resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "_shasum": "3fbcfb15b899a44123b34b6dcc18b724336a2cae", - "_spec": "p-finally@^1.0.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/p-timeout", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/p-finally/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "`Promise#finally()` ponyfill - Invoked when the promise is settled regardless of outcome", - "devDependencies": { - "ava": "*", - "xo": "*" - }, - "engines": { - "node": ">=4" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/sindresorhus/p-finally#readme", - "keywords": [ - "promise", - "finally", - "handler", - "function", - "async", - "await", - "promises", - "settled", - "ponyfill", - "polyfill", - "shim", - "bluebird" - ], - "license": "MIT", - "name": "p-finally", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/p-finally.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "1.0.0", - "xo": { - "esnext": true - } -} diff --git a/reverse_engineering/node_modules/p-finally/readme.md b/reverse_engineering/node_modules/p-finally/readme.md deleted file mode 100644 index 09ef364..0000000 --- a/reverse_engineering/node_modules/p-finally/readme.md +++ /dev/null @@ -1,47 +0,0 @@ -# p-finally [![Build Status](https://travis-ci.org/sindresorhus/p-finally.svg?branch=master)](https://travis-ci.org/sindresorhus/p-finally) - -> [`Promise#finally()`](https://github.com/tc39/proposal-promise-finally) [ponyfill](https://ponyfill.com) - Invoked when the promise is settled regardless of outcome - -Useful for cleanup. - - -## Install - -``` -$ npm install --save p-finally -``` - - -## Usage - -```js -const pFinally = require('p-finally'); - -const dir = createTempDir(); - -pFinally(write(dir), () => cleanup(dir)); -``` - - -## API - -### pFinally(promise, [onFinally]) - -Returns a `Promise`. - -#### onFinally - -Type: `Function` - -Note: Throwing or returning a rejected promise will reject `promise` with the rejection reason. - - -## Related - -- [p-try](https://github.com/sindresorhus/p-try) - `Promise#try()` ponyfill - Starts a promise chain -- [More…](https://github.com/sindresorhus/promise-fun) - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/reverse_engineering/node_modules/p-timeout/index.d.ts b/reverse_engineering/node_modules/p-timeout/index.d.ts deleted file mode 100644 index 57d909f..0000000 --- a/reverse_engineering/node_modules/p-timeout/index.d.ts +++ /dev/null @@ -1,72 +0,0 @@ -declare class TimeoutErrorClass extends Error { - readonly name: 'TimeoutError'; - constructor(message?: string); -} - -declare namespace pTimeout { - type TimeoutError = TimeoutErrorClass; -} - -declare const pTimeout: { - /** - Timeout a promise after a specified amount of time. - - If you pass in a cancelable promise, specifically a promise with a `.cancel()` method, that method will be called when the `pTimeout` promise times out. - - @param input - Promise to decorate. - @param milliseconds - Milliseconds before timing out. - @param message - Specify a custom error message or error. If you do a custom error, it's recommended to sub-class `pTimeout.TimeoutError`. Default: `'Promise timed out after 50 milliseconds'`. - @returns A decorated `input` that times out after `milliseconds` time. - - @example - ``` - import delay = require('delay'); - import pTimeout = require('p-timeout'); - - const delayedPromise = delay(200); - - pTimeout(delayedPromise, 50).then(() => 'foo'); - //=> [TimeoutError: Promise timed out after 50 milliseconds] - ``` - */ - ( - input: PromiseLike, - milliseconds: number, - message?: string | Error - ): Promise; - - /** - Timeout a promise after a specified amount of time. - - If you pass in a cancelable promise, specifically a promise with a `.cancel()` method, that method will be called when the `pTimeout` promise times out. - - @param input - Promise to decorate. - @param milliseconds - Milliseconds before timing out. Passing `Infinity` will cause it to never time out. - @param fallback - Do something other than rejecting with an error on timeout. You could for example retry. - @returns A decorated `input` that times out after `milliseconds` time. - - @example - ``` - import delay = require('delay'); - import pTimeout = require('p-timeout'); - - const delayedPromise = () => delay(200); - - pTimeout(delayedPromise(), 50, () => { - return pTimeout(delayedPromise(), 300); - }); - ``` - */ - ( - input: PromiseLike, - milliseconds: number, - fallback: () => ReturnType | Promise - ): Promise; - - TimeoutError: typeof TimeoutErrorClass; - - // TODO: Remove this for the next major release - default: typeof pTimeout; -}; - -export = pTimeout; diff --git a/reverse_engineering/node_modules/p-timeout/index.js b/reverse_engineering/node_modules/p-timeout/index.js deleted file mode 100644 index 34d4a4c..0000000 --- a/reverse_engineering/node_modules/p-timeout/index.js +++ /dev/null @@ -1,57 +0,0 @@ -'use strict'; - -const pFinally = require('p-finally'); - -class TimeoutError extends Error { - constructor(message) { - super(message); - this.name = 'TimeoutError'; - } -} - -const pTimeout = (promise, milliseconds, fallback) => new Promise((resolve, reject) => { - if (typeof milliseconds !== 'number' || milliseconds < 0) { - throw new TypeError('Expected `milliseconds` to be a positive number'); - } - - if (milliseconds === Infinity) { - resolve(promise); - return; - } - - const timer = setTimeout(() => { - if (typeof fallback === 'function') { - try { - resolve(fallback()); - } catch (error) { - reject(error); - } - - return; - } - - const message = typeof fallback === 'string' ? fallback : `Promise timed out after ${milliseconds} milliseconds`; - const timeoutError = fallback instanceof Error ? fallback : new TimeoutError(message); - - if (typeof promise.cancel === 'function') { - promise.cancel(); - } - - reject(timeoutError); - }, milliseconds); - - // TODO: Use native `finally` keyword when targeting Node.js 10 - pFinally( - // eslint-disable-next-line promise/prefer-await-to-then - promise.then(resolve, reject), - () => { - clearTimeout(timer); - } - ); -}); - -module.exports = pTimeout; -// TODO: Remove this for the next major release -module.exports.default = pTimeout; - -module.exports.TimeoutError = TimeoutError; diff --git a/reverse_engineering/node_modules/p-timeout/license b/reverse_engineering/node_modules/p-timeout/license deleted file mode 100644 index e7af2f7..0000000 --- a/reverse_engineering/node_modules/p-timeout/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -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/reverse_engineering/node_modules/p-timeout/package.json b/reverse_engineering/node_modules/p-timeout/package.json deleted file mode 100644 index 23b8172..0000000 --- a/reverse_engineering/node_modules/p-timeout/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "_from": "p-timeout@^3.1.0", - "_id": "p-timeout@3.2.0", - "_inBundle": false, - "_integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "_location": "/p-timeout", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "p-timeout@^3.1.0", - "name": "p-timeout", - "escapedName": "p-timeout", - "rawSpec": "^3.1.0", - "saveSpec": null, - "fetchSpec": "^3.1.0" - }, - "_requiredBy": [ - "/p-event" - ], - "_resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "_shasum": "c7e17abc971d2a7962ef83626b35d635acf23dfe", - "_spec": "p-timeout@^3.1.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/p-event", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/p-timeout/issues" - }, - "bundleDependencies": false, - "dependencies": { - "p-finally": "^1.0.0" - }, - "deprecated": false, - "description": "Timeout a promise after a specified amount of time", - "devDependencies": { - "ava": "^1.4.1", - "delay": "^4.1.0", - "p-cancelable": "^2.0.0", - "tsd": "^0.7.2", - "xo": "^0.24.0" - }, - "engines": { - "node": ">=8" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "homepage": "https://github.com/sindresorhus/p-timeout#readme", - "keywords": [ - "promise", - "timeout", - "error", - "invalidate", - "async", - "await", - "promises", - "time", - "out", - "cancel", - "bluebird" - ], - "license": "MIT", - "name": "p-timeout", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/p-timeout.git" - }, - "scripts": { - "test": "xo && ava && tsd" - }, - "version": "3.2.0" -} diff --git a/reverse_engineering/node_modules/p-timeout/readme.md b/reverse_engineering/node_modules/p-timeout/readme.md deleted file mode 100644 index ad4ab52..0000000 --- a/reverse_engineering/node_modules/p-timeout/readme.md +++ /dev/null @@ -1,87 +0,0 @@ -# p-timeout [![Build Status](https://travis-ci.org/sindresorhus/p-timeout.svg?branch=master)](https://travis-ci.org/sindresorhus/p-timeout) - -> Timeout a promise after a specified amount of time - - -## Install - -``` -$ npm install p-timeout -``` - - -## Usage - -```js -const delay = require('delay'); -const pTimeout = require('p-timeout'); - -const delayedPromise = delay(200); - -pTimeout(delayedPromise, 50).then(() => 'foo'); -//=> [TimeoutError: Promise timed out after 50 milliseconds] -``` - - -## API - -### pTimeout(input, milliseconds, message?) -### pTimeout(input, milliseconds, fallback?) - -Returns a decorated `input` that times out after `milliseconds` time. - -If you pass in a cancelable promise, specifically a promise with a `.cancel()` method, that method will be called when the `pTimeout` promise times out. - -#### input - -Type: `Promise` - -Promise to decorate. - -#### milliseconds - -Type: `number` - -Milliseconds before timing out. - -Passing `Infinity` will cause it to never time out. - -#### message - -Type: `string` `Error`
-Default: `'Promise timed out after 50 milliseconds'` - -Specify a custom error message or error. - -If you do a custom error, it's recommended to sub-class `pTimeout.TimeoutError`. - -#### fallback - -Type: `Function` - -Do something other than rejecting with an error on timeout. - -You could for example retry: - -```js -const delay = require('delay'); -const pTimeout = require('p-timeout'); - -const delayedPromise = () => delay(200); - -pTimeout(delayedPromise(), 50, () => { - return pTimeout(delayedPromise(), 300); -}); -``` - -### pTimeout.TimeoutError - -Exposed for instance checking and sub-classing. - - -## Related - -- [delay](https://github.com/sindresorhus/delay) - Delay a promise a specified amount of time -- [p-min-delay](https://github.com/sindresorhus/p-min-delay) - Delay a promise a minimum amount of time -- [p-retry](https://github.com/sindresorhus/p-retry) - Retry a promise-returning function -- [More…](https://github.com/sindresorhus/promise-fun) diff --git a/reverse_engineering/node_modules/readable-stream/CONTRIBUTING.md b/reverse_engineering/node_modules/readable-stream/CONTRIBUTING.md deleted file mode 100644 index f478d58..0000000 --- a/reverse_engineering/node_modules/readable-stream/CONTRIBUTING.md +++ /dev/null @@ -1,38 +0,0 @@ -# Developer's Certificate of Origin 1.1 - -By making a contribution to this project, I certify that: - -* (a) The contribution was created in whole or in part by me and I - have the right to submit it under the open source license - indicated in the file; or - -* (b) The contribution is based upon previous work that, to the best - of my knowledge, is covered under an appropriate open source - license and I have the right under that license to submit that - work with modifications, whether created in whole or in part - by me, under the same open source license (unless I am - permitted to submit under a different license), as indicated - in the file; or - -* (c) The contribution was provided directly to me by some other - person who certified (a), (b) or (c) and I have not modified - it. - -* (d) I understand and agree that this project and the contribution - are public and that a record of the contribution (including all - personal information I submit with it, including my sign-off) is - maintained indefinitely and may be redistributed consistent with - this project or the open source license(s) involved. - -## Moderation Policy - -The [Node.js Moderation Policy] applies to this WG. - -## Code of Conduct - -The [Node.js Code of Conduct][] applies to this WG. - -[Node.js Code of Conduct]: -https://github.com/nodejs/node/blob/master/CODE_OF_CONDUCT.md -[Node.js Moderation Policy]: -https://github.com/nodejs/TSC/blob/master/Moderation-Policy.md diff --git a/reverse_engineering/node_modules/readable-stream/GOVERNANCE.md b/reverse_engineering/node_modules/readable-stream/GOVERNANCE.md deleted file mode 100644 index 16ffb93..0000000 --- a/reverse_engineering/node_modules/readable-stream/GOVERNANCE.md +++ /dev/null @@ -1,136 +0,0 @@ -### Streams Working Group - -The Node.js Streams is jointly governed by a Working Group -(WG) -that is responsible for high-level guidance of the project. - -The WG has final authority over this project including: - -* Technical direction -* Project governance and process (including this policy) -* Contribution policy -* GitHub repository hosting -* Conduct guidelines -* Maintaining the list of additional Collaborators - -For the current list of WG members, see the project -[README.md](./README.md#current-project-team-members). - -### Collaborators - -The readable-stream GitHub repository is -maintained by the WG and additional Collaborators who are added by the -WG on an ongoing basis. - -Individuals making significant and valuable contributions are made -Collaborators and given commit-access to the project. These -individuals are identified by the WG and their addition as -Collaborators is discussed during the WG meeting. - -_Note:_ If you make a significant contribution and are not considered -for commit-access log an issue or contact a WG member directly and it -will be brought up in the next WG meeting. - -Modifications of the contents of the readable-stream repository are -made on -a collaborative basis. Anybody with a GitHub account may propose a -modification via pull request and it will be considered by the project -Collaborators. All pull requests must be reviewed and accepted by a -Collaborator with sufficient expertise who is able to take full -responsibility for the change. In the case of pull requests proposed -by an existing Collaborator, an additional Collaborator is required -for sign-off. Consensus should be sought if additional Collaborators -participate and there is disagreement around a particular -modification. See _Consensus Seeking Process_ below for further detail -on the consensus model used for governance. - -Collaborators may opt to elevate significant or controversial -modifications, or modifications that have not found consensus to the -WG for discussion by assigning the ***WG-agenda*** tag to a pull -request or issue. The WG should serve as the final arbiter where -required. - -For the current list of Collaborators, see the project -[README.md](./README.md#members). - -### WG Membership - -WG seats are not time-limited. There is no fixed size of the WG. -However, the expected target is between 6 and 12, to ensure adequate -coverage of important areas of expertise, balanced with the ability to -make decisions efficiently. - -There is no specific set of requirements or qualifications for WG -membership beyond these rules. - -The WG may add additional members to the WG by unanimous consensus. - -A WG member may be removed from the WG by voluntary resignation, or by -unanimous consensus of all other WG members. - -Changes to WG membership should be posted in the agenda, and may be -suggested as any other agenda item (see "WG Meetings" below). - -If an addition or removal is proposed during a meeting, and the full -WG is not in attendance to participate, then the addition or removal -is added to the agenda for the subsequent meeting. This is to ensure -that all members are given the opportunity to participate in all -membership decisions. If a WG member is unable to attend a meeting -where a planned membership decision is being made, then their consent -is assumed. - -No more than 1/3 of the WG members may be affiliated with the same -employer. If removal or resignation of a WG member, or a change of -employment by a WG member, creates a situation where more than 1/3 of -the WG membership shares an employer, then the situation must be -immediately remedied by the resignation or removal of one or more WG -members affiliated with the over-represented employer(s). - -### WG Meetings - -The WG meets occasionally on a Google Hangout On Air. A designated moderator -approved by the WG runs the meeting. Each meeting should be -published to YouTube. - -Items are added to the WG agenda that are considered contentious or -are modifications of governance, contribution policy, WG membership, -or release process. - -The intention of the agenda is not to approve or review all patches; -that should happen continuously on GitHub and be handled by the larger -group of Collaborators. - -Any community member or contributor can ask that something be added to -the next meeting's agenda by logging a GitHub Issue. Any Collaborator, -WG member or the moderator can add the item to the agenda by adding -the ***WG-agenda*** tag to the issue. - -Prior to each WG meeting the moderator will share the Agenda with -members of the WG. WG members can add any items they like to the -agenda at the beginning of each meeting. The moderator and the WG -cannot veto or remove items. - -The WG may invite persons or representatives from certain projects to -participate in a non-voting capacity. - -The moderator is responsible for summarizing the discussion of each -agenda item and sends it as a pull request after the meeting. - -### Consensus Seeking Process - -The WG follows a -[Consensus -Seeking](http://en.wikipedia.org/wiki/Consensus-seeking_decision-making) -decision-making model. - -When an agenda item has appeared to reach a consensus the moderator -will ask "Does anyone object?" as a final call for dissent from the -consensus. - -If an agenda item cannot reach a consensus a WG member can call for -either a closing vote or a vote to table the issue to the next -meeting. The call for a vote must be seconded by a majority of the WG -or else the discussion will continue. Simple majority wins. - -Note that changes to WG membership require a majority consensus. See -"WG Membership" above. diff --git a/reverse_engineering/node_modules/readable-stream/LICENSE b/reverse_engineering/node_modules/readable-stream/LICENSE deleted file mode 100644 index 2873b3b..0000000 --- a/reverse_engineering/node_modules/readable-stream/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -Node.js is licensed for use as follows: - -""" -Copyright Node.js contributors. All rights reserved. - -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. -""" - -This license applies to parts of Node.js originating from the -https://github.com/joyent/node repository: - -""" -Copyright Joyent, Inc. and other Node contributors. All rights reserved. -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/reverse_engineering/node_modules/readable-stream/README.md b/reverse_engineering/node_modules/readable-stream/README.md deleted file mode 100644 index 6f035ab..0000000 --- a/reverse_engineering/node_modules/readable-stream/README.md +++ /dev/null @@ -1,106 +0,0 @@ -# readable-stream - -***Node.js core streams for userland*** [![Build Status](https://travis-ci.com/nodejs/readable-stream.svg?branch=master)](https://travis-ci.com/nodejs/readable-stream) - - -[![NPM](https://nodei.co/npm/readable-stream.png?downloads=true&downloadRank=true)](https://nodei.co/npm/readable-stream/) -[![NPM](https://nodei.co/npm-dl/readable-stream.png?&months=6&height=3)](https://nodei.co/npm/readable-stream/) - - -[![Sauce Test Status](https://saucelabs.com/browser-matrix/readabe-stream.svg)](https://saucelabs.com/u/readabe-stream) - -```bash -npm install --save readable-stream -``` - -This package is a mirror of the streams implementations in Node.js. - -Full documentation may be found on the [Node.js website](https://nodejs.org/dist/v10.19.0/docs/api/stream.html). - -If you want to guarantee a stable streams base, regardless of what version of -Node you, or the users of your libraries are using, use **readable-stream** *only* and avoid the *"stream"* module in Node-core, for background see [this blogpost](http://r.va.gg/2014/06/why-i-dont-use-nodes-core-stream-module.html). - -As of version 2.0.0 **readable-stream** uses semantic versioning. - -## Version 3.x.x - -v3.x.x of `readable-stream` is a cut from Node 10. This version supports Node 6, 8, and 10, as well as evergreen browsers, IE 11 and latest Safari. The breaking changes introduced by v3 are composed by the combined breaking changes in [Node v9](https://nodejs.org/en/blog/release/v9.0.0/) and [Node v10](https://nodejs.org/en/blog/release/v10.0.0/), as follows: - -1. Error codes: https://github.com/nodejs/node/pull/13310, - https://github.com/nodejs/node/pull/13291, - https://github.com/nodejs/node/pull/16589, - https://github.com/nodejs/node/pull/15042, - https://github.com/nodejs/node/pull/15665, - https://github.com/nodejs/readable-stream/pull/344 -2. 'readable' have precedence over flowing - https://github.com/nodejs/node/pull/18994 -3. make virtual methods errors consistent - https://github.com/nodejs/node/pull/18813 -4. updated streams error handling - https://github.com/nodejs/node/pull/18438 -5. writable.end should return this. - https://github.com/nodejs/node/pull/18780 -6. readable continues to read when push('') - https://github.com/nodejs/node/pull/18211 -7. add custom inspect to BufferList - https://github.com/nodejs/node/pull/17907 -8. always defer 'readable' with nextTick - https://github.com/nodejs/node/pull/17979 - -## Version 2.x.x -v2.x.x of `readable-stream` is a cut of the stream module from Node 8 (there have been no semver-major changes from Node 4 to 8). This version supports all Node.js versions from 0.8, as well as evergreen browsers and IE 10 & 11. - -### Big Thanks - -Cross-browser Testing Platform and Open Source <3 Provided by [Sauce Labs][sauce] - -# Usage - -You can swap your `require('stream')` with `require('readable-stream')` -without any changes, if you are just using one of the main classes and -functions. - -```js -const { - Readable, - Writable, - Transform, - Duplex, - pipeline, - finished -} = require('readable-stream') -```` - -Note that `require('stream')` will return `Stream`, while -`require('readable-stream')` will return `Readable`. We discourage using -whatever is exported directly, but rather use one of the properties as -shown in the example above. - -# Streams Working Group - -`readable-stream` is maintained by the Streams Working Group, which -oversees the development and maintenance of the Streams API within -Node.js. The responsibilities of the Streams Working Group include: - -* Addressing stream issues on the Node.js issue tracker. -* Authoring and editing stream documentation within the Node.js project. -* Reviewing changes to stream subclasses within the Node.js project. -* Redirecting changes to streams from the Node.js project to this - project. -* Assisting in the implementation of stream providers within Node.js. -* Recommending versions of `readable-stream` to be included in Node.js. -* Messaging about the future of streams to give the community advance - notice of changes. - -
-## Team Members - -* **Calvin Metcalf** ([@calvinmetcalf](https://github.com/calvinmetcalf)) <calvin.metcalf@gmail.com> - - Release GPG key: F3EF5F62A87FC27A22E643F714CE4FF5015AA242 -* **Mathias Buus** ([@mafintosh](https://github.com/mafintosh)) <mathiasbuus@gmail.com> -* **Matteo Collina** ([@mcollina](https://github.com/mcollina)) <matteo.collina@gmail.com> - - Release GPG key: 3ABC01543F22DD2239285CDD818674489FBC127E -* **Irina Shestak** ([@lrlna](https://github.com/lrlna)) <shestak.irina@gmail.com> -* **Yoshua Wyuts** ([@yoshuawuyts](https://github.com/yoshuawuyts)) <yoshuawuyts@gmail.com> - -[sauce]: https://saucelabs.com diff --git a/reverse_engineering/node_modules/readable-stream/errors-browser.js b/reverse_engineering/node_modules/readable-stream/errors-browser.js deleted file mode 100644 index fb8e73e..0000000 --- a/reverse_engineering/node_modules/readable-stream/errors-browser.js +++ /dev/null @@ -1,127 +0,0 @@ -'use strict'; - -function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } - -var codes = {}; - -function createErrorType(code, message, Base) { - if (!Base) { - Base = Error; - } - - function getMessage(arg1, arg2, arg3) { - if (typeof message === 'string') { - return message; - } else { - return message(arg1, arg2, arg3); - } - } - - var NodeError = - /*#__PURE__*/ - function (_Base) { - _inheritsLoose(NodeError, _Base); - - function NodeError(arg1, arg2, arg3) { - return _Base.call(this, getMessage(arg1, arg2, arg3)) || this; - } - - return NodeError; - }(Base); - - NodeError.prototype.name = Base.name; - NodeError.prototype.code = code; - codes[code] = NodeError; -} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js - - -function oneOf(expected, thing) { - if (Array.isArray(expected)) { - var len = expected.length; - expected = expected.map(function (i) { - return String(i); - }); - - if (len > 2) { - return "one of ".concat(thing, " ").concat(expected.slice(0, len - 1).join(', '), ", or ") + expected[len - 1]; - } else if (len === 2) { - return "one of ".concat(thing, " ").concat(expected[0], " or ").concat(expected[1]); - } else { - return "of ".concat(thing, " ").concat(expected[0]); - } - } else { - return "of ".concat(thing, " ").concat(String(expected)); - } -} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith - - -function startsWith(str, search, pos) { - return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; -} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith - - -function endsWith(str, search, this_len) { - if (this_len === undefined || this_len > str.length) { - this_len = str.length; - } - - return str.substring(this_len - search.length, this_len) === search; -} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes - - -function includes(str, search, start) { - if (typeof start !== 'number') { - start = 0; - } - - if (start + search.length > str.length) { - return false; - } else { - return str.indexOf(search, start) !== -1; - } -} - -createErrorType('ERR_INVALID_OPT_VALUE', function (name, value) { - return 'The value "' + value + '" is invalid for option "' + name + '"'; -}, TypeError); -createErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) { - // determiner: 'must be' or 'must not be' - var determiner; - - if (typeof expected === 'string' && startsWith(expected, 'not ')) { - determiner = 'must not be'; - expected = expected.replace(/^not /, ''); - } else { - determiner = 'must be'; - } - - var msg; - - if (endsWith(name, ' argument')) { - // For cases like 'first argument' - msg = "The ".concat(name, " ").concat(determiner, " ").concat(oneOf(expected, 'type')); - } else { - var type = includes(name, '.') ? 'property' : 'argument'; - msg = "The \"".concat(name, "\" ").concat(type, " ").concat(determiner, " ").concat(oneOf(expected, 'type')); - } - - msg += ". Received type ".concat(typeof actual); - return msg; -}, TypeError); -createErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF'); -createErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) { - return 'The ' + name + ' method is not implemented'; -}); -createErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close'); -createErrorType('ERR_STREAM_DESTROYED', function (name) { - return 'Cannot call ' + name + ' after a stream was destroyed'; -}); -createErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times'); -createErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable'); -createErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end'); -createErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError); -createErrorType('ERR_UNKNOWN_ENCODING', function (arg) { - return 'Unknown encoding: ' + arg; -}, TypeError); -createErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event'); -module.exports.codes = codes; diff --git a/reverse_engineering/node_modules/readable-stream/errors.js b/reverse_engineering/node_modules/readable-stream/errors.js deleted file mode 100644 index 8471526..0000000 --- a/reverse_engineering/node_modules/readable-stream/errors.js +++ /dev/null @@ -1,116 +0,0 @@ -'use strict'; - -const codes = {}; - -function createErrorType(code, message, Base) { - if (!Base) { - Base = Error - } - - function getMessage (arg1, arg2, arg3) { - if (typeof message === 'string') { - return message - } else { - return message(arg1, arg2, arg3) - } - } - - class NodeError extends Base { - constructor (arg1, arg2, arg3) { - super(getMessage(arg1, arg2, arg3)); - } - } - - NodeError.prototype.name = Base.name; - NodeError.prototype.code = code; - - codes[code] = NodeError; -} - -// https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js -function oneOf(expected, thing) { - if (Array.isArray(expected)) { - const len = expected.length; - expected = expected.map((i) => String(i)); - if (len > 2) { - return `one of ${thing} ${expected.slice(0, len - 1).join(', ')}, or ` + - expected[len - 1]; - } else if (len === 2) { - return `one of ${thing} ${expected[0]} or ${expected[1]}`; - } else { - return `of ${thing} ${expected[0]}`; - } - } else { - return `of ${thing} ${String(expected)}`; - } -} - -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith -function startsWith(str, search, pos) { - return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; -} - -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith -function endsWith(str, search, this_len) { - if (this_len === undefined || this_len > str.length) { - this_len = str.length; - } - return str.substring(this_len - search.length, this_len) === search; -} - -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes -function includes(str, search, start) { - if (typeof start !== 'number') { - start = 0; - } - - if (start + search.length > str.length) { - return false; - } else { - return str.indexOf(search, start) !== -1; - } -} - -createErrorType('ERR_INVALID_OPT_VALUE', function (name, value) { - return 'The value "' + value + '" is invalid for option "' + name + '"' -}, TypeError); -createErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) { - // determiner: 'must be' or 'must not be' - let determiner; - if (typeof expected === 'string' && startsWith(expected, 'not ')) { - determiner = 'must not be'; - expected = expected.replace(/^not /, ''); - } else { - determiner = 'must be'; - } - - let msg; - if (endsWith(name, ' argument')) { - // For cases like 'first argument' - msg = `The ${name} ${determiner} ${oneOf(expected, 'type')}`; - } else { - const type = includes(name, '.') ? 'property' : 'argument'; - msg = `The "${name}" ${type} ${determiner} ${oneOf(expected, 'type')}`; - } - - msg += `. Received type ${typeof actual}`; - return msg; -}, TypeError); -createErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF'); -createErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) { - return 'The ' + name + ' method is not implemented' -}); -createErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close'); -createErrorType('ERR_STREAM_DESTROYED', function (name) { - return 'Cannot call ' + name + ' after a stream was destroyed'; -}); -createErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times'); -createErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable'); -createErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end'); -createErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError); -createErrorType('ERR_UNKNOWN_ENCODING', function (arg) { - return 'Unknown encoding: ' + arg -}, TypeError); -createErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event'); - -module.exports.codes = codes; diff --git a/reverse_engineering/node_modules/readable-stream/experimentalWarning.js b/reverse_engineering/node_modules/readable-stream/experimentalWarning.js deleted file mode 100644 index 78e8414..0000000 --- a/reverse_engineering/node_modules/readable-stream/experimentalWarning.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict' - -var experimentalWarnings = new Set(); - -function emitExperimentalWarning(feature) { - if (experimentalWarnings.has(feature)) return; - var msg = feature + ' is an experimental feature. This feature could ' + - 'change at any time'; - experimentalWarnings.add(feature); - process.emitWarning(msg, 'ExperimentalWarning'); -} - -function noop() {} - -module.exports.emitExperimentalWarning = process.emitWarning - ? emitExperimentalWarning - : noop; diff --git a/reverse_engineering/node_modules/readable-stream/lib/_stream_duplex.js b/reverse_engineering/node_modules/readable-stream/lib/_stream_duplex.js deleted file mode 100644 index 6752519..0000000 --- a/reverse_engineering/node_modules/readable-stream/lib/_stream_duplex.js +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// 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. -// a duplex stream is just a stream that is both readable and writable. -// Since JS doesn't have multiple prototypal inheritance, this class -// prototypally inherits from Readable, and then parasitically from -// Writable. -'use strict'; -/**/ - -var objectKeys = Object.keys || function (obj) { - var keys = []; - - for (var key in obj) { - keys.push(key); - } - - return keys; -}; -/**/ - - -module.exports = Duplex; - -var Readable = require('./_stream_readable'); - -var Writable = require('./_stream_writable'); - -require('inherits')(Duplex, Readable); - -{ - // Allow the keys array to be GC'ed. - var keys = objectKeys(Writable.prototype); - - for (var v = 0; v < keys.length; v++) { - var method = keys[v]; - if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; - } -} - -function Duplex(options) { - if (!(this instanceof Duplex)) return new Duplex(options); - Readable.call(this, options); - Writable.call(this, options); - this.allowHalfOpen = true; - - if (options) { - if (options.readable === false) this.readable = false; - if (options.writable === false) this.writable = false; - - if (options.allowHalfOpen === false) { - this.allowHalfOpen = false; - this.once('end', onend); - } - } -} - -Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState.highWaterMark; - } -}); -Object.defineProperty(Duplex.prototype, 'writableBuffer', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState && this._writableState.getBuffer(); - } -}); -Object.defineProperty(Duplex.prototype, 'writableLength', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState.length; - } -}); // the no-half-open enforcer - -function onend() { - // If the writable side ended, then we're ok. - if (this._writableState.ended) return; // no more data can be written. - // But allow more writes to happen in this tick. - - process.nextTick(onEndNT, this); -} - -function onEndNT(self) { - self.end(); -} - -Object.defineProperty(Duplex.prototype, 'destroyed', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - if (this._readableState === undefined || this._writableState === undefined) { - return false; - } - - return this._readableState.destroyed && this._writableState.destroyed; - }, - set: function set(value) { - // we ignore the value if the stream - // has not been initialized yet - if (this._readableState === undefined || this._writableState === undefined) { - return; - } // backward compatibility, the user is explicitly - // managing destroyed - - - this._readableState.destroyed = value; - this._writableState.destroyed = value; - } -}); \ No newline at end of file diff --git a/reverse_engineering/node_modules/readable-stream/lib/_stream_passthrough.js b/reverse_engineering/node_modules/readable-stream/lib/_stream_passthrough.js deleted file mode 100644 index 32e7414..0000000 --- a/reverse_engineering/node_modules/readable-stream/lib/_stream_passthrough.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// 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. -// a passthrough stream. -// basically just the most minimal sort of Transform stream. -// Every written chunk gets output as-is. -'use strict'; - -module.exports = PassThrough; - -var Transform = require('./_stream_transform'); - -require('inherits')(PassThrough, Transform); - -function PassThrough(options) { - if (!(this instanceof PassThrough)) return new PassThrough(options); - Transform.call(this, options); -} - -PassThrough.prototype._transform = function (chunk, encoding, cb) { - cb(null, chunk); -}; \ No newline at end of file diff --git a/reverse_engineering/node_modules/readable-stream/lib/_stream_readable.js b/reverse_engineering/node_modules/readable-stream/lib/_stream_readable.js deleted file mode 100644 index 192d451..0000000 --- a/reverse_engineering/node_modules/readable-stream/lib/_stream_readable.js +++ /dev/null @@ -1,1124 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// 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. -'use strict'; - -module.exports = Readable; -/**/ - -var Duplex; -/**/ - -Readable.ReadableState = ReadableState; -/**/ - -var EE = require('events').EventEmitter; - -var EElistenerCount = function EElistenerCount(emitter, type) { - return emitter.listeners(type).length; -}; -/**/ - -/**/ - - -var Stream = require('./internal/streams/stream'); -/**/ - - -var Buffer = require('buffer').Buffer; - -var OurUint8Array = global.Uint8Array || function () {}; - -function _uint8ArrayToBuffer(chunk) { - return Buffer.from(chunk); -} - -function _isUint8Array(obj) { - return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; -} -/**/ - - -var debugUtil = require('util'); - -var debug; - -if (debugUtil && debugUtil.debuglog) { - debug = debugUtil.debuglog('stream'); -} else { - debug = function debug() {}; -} -/**/ - - -var BufferList = require('./internal/streams/buffer_list'); - -var destroyImpl = require('./internal/streams/destroy'); - -var _require = require('./internal/streams/state'), - getHighWaterMark = _require.getHighWaterMark; - -var _require$codes = require('../errors').codes, - ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, - ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF, - ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, - ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance. - - -var StringDecoder; -var createReadableStreamAsyncIterator; -var from; - -require('inherits')(Readable, Stream); - -var errorOrDestroy = destroyImpl.errorOrDestroy; -var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; - -function prependListener(emitter, event, fn) { - // Sadly this is not cacheable as some libraries bundle their own - // event emitter implementation with them. - if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any - // userland ones. NEVER DO THIS. This is here only because this code needs - // to continue to work with older versions of Node.js that do not include - // the prependListener() method. The goal is to eventually remove this hack. - - if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; -} - -function ReadableState(options, stream, isDuplex) { - Duplex = Duplex || require('./_stream_duplex'); - options = options || {}; // Duplex streams are both readable and writable, but share - // the same options object. - // However, some cases require setting options to different - // values for the readable and the writable sides of the duplex stream. - // These options can be provided separately as readableXXX and writableXXX. - - if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to - // make all the buffer merging and length checks go away - - this.objectMode = !!options.objectMode; - if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer - // Note: 0 is a valid value, means "don't call _read preemptively ever" - - this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the - // linked list can remove elements from the beginning faster than - // array.shift() - - this.buffer = new BufferList(); - this.length = 0; - this.pipes = null; - this.pipesCount = 0; - this.flowing = null; - this.ended = false; - this.endEmitted = false; - this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted - // immediately, or on a later tick. We set this to true at first, because - // any actions that shouldn't happen until "later" should generally also - // not happen before the first read call. - - this.sync = true; // whenever we return null, then we set a flag to say - // that we're awaiting a 'readable' event emission. - - this.needReadable = false; - this.emittedReadable = false; - this.readableListening = false; - this.resumeScheduled = false; - this.paused = true; // Should close be emitted on destroy. Defaults to true. - - this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish') - - this.autoDestroy = !!options.autoDestroy; // has it been destroyed - - this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - - this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s - - this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled - - this.readingMore = false; - this.decoder = null; - this.encoding = null; - - if (options.encoding) { - if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; - this.decoder = new StringDecoder(options.encoding); - this.encoding = options.encoding; - } -} - -function Readable(options) { - Duplex = Duplex || require('./_stream_duplex'); - if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside - // the ReadableState constructor, at least with V8 6.5 - - var isDuplex = this instanceof Duplex; - this._readableState = new ReadableState(options, this, isDuplex); // legacy - - this.readable = true; - - if (options) { - if (typeof options.read === 'function') this._read = options.read; - if (typeof options.destroy === 'function') this._destroy = options.destroy; - } - - Stream.call(this); -} - -Object.defineProperty(Readable.prototype, 'destroyed', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - if (this._readableState === undefined) { - return false; - } - - return this._readableState.destroyed; - }, - set: function set(value) { - // we ignore the value if the stream - // has not been initialized yet - if (!this._readableState) { - return; - } // backward compatibility, the user is explicitly - // managing destroyed - - - this._readableState.destroyed = value; - } -}); -Readable.prototype.destroy = destroyImpl.destroy; -Readable.prototype._undestroy = destroyImpl.undestroy; - -Readable.prototype._destroy = function (err, cb) { - cb(err); -}; // Manually shove something into the read() buffer. -// This returns true if the highWaterMark has not been hit yet, -// similar to how Writable.write() returns true if you should -// write() some more. - - -Readable.prototype.push = function (chunk, encoding) { - var state = this._readableState; - var skipChunkCheck; - - if (!state.objectMode) { - if (typeof chunk === 'string') { - encoding = encoding || state.defaultEncoding; - - if (encoding !== state.encoding) { - chunk = Buffer.from(chunk, encoding); - encoding = ''; - } - - skipChunkCheck = true; - } - } else { - skipChunkCheck = true; - } - - return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); -}; // Unshift should *always* be something directly out of read() - - -Readable.prototype.unshift = function (chunk) { - return readableAddChunk(this, chunk, null, true, false); -}; - -function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { - debug('readableAddChunk', chunk); - var state = stream._readableState; - - if (chunk === null) { - state.reading = false; - onEofChunk(stream, state); - } else { - var er; - if (!skipChunkCheck) er = chunkInvalid(state, chunk); - - if (er) { - errorOrDestroy(stream, er); - } else if (state.objectMode || chunk && chunk.length > 0) { - if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { - chunk = _uint8ArrayToBuffer(chunk); - } - - if (addToFront) { - if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true); - } else if (state.ended) { - errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF()); - } else if (state.destroyed) { - return false; - } else { - state.reading = false; - - if (state.decoder && !encoding) { - chunk = state.decoder.write(chunk); - if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); - } else { - addChunk(stream, state, chunk, false); - } - } - } else if (!addToFront) { - state.reading = false; - maybeReadMore(stream, state); - } - } // We can push more data if we are below the highWaterMark. - // Also, if we have no data yet, we can stand some more bytes. - // This is to work around cases where hwm=0, such as the repl. - - - return !state.ended && (state.length < state.highWaterMark || state.length === 0); -} - -function addChunk(stream, state, chunk, addToFront) { - if (state.flowing && state.length === 0 && !state.sync) { - state.awaitDrain = 0; - stream.emit('data', chunk); - } else { - // update the buffer info. - state.length += state.objectMode ? 1 : chunk.length; - if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); - if (state.needReadable) emitReadable(stream); - } - - maybeReadMore(stream, state); -} - -function chunkInvalid(state, chunk) { - var er; - - if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { - er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk); - } - - return er; -} - -Readable.prototype.isPaused = function () { - return this._readableState.flowing === false; -}; // backwards compatibility. - - -Readable.prototype.setEncoding = function (enc) { - if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; - var decoder = new StringDecoder(enc); - this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8 - - this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers: - - var p = this._readableState.buffer.head; - var content = ''; - - while (p !== null) { - content += decoder.write(p.data); - p = p.next; - } - - this._readableState.buffer.clear(); - - if (content !== '') this._readableState.buffer.push(content); - this._readableState.length = content.length; - return this; -}; // Don't raise the hwm > 1GB - - -var MAX_HWM = 0x40000000; - -function computeNewHighWaterMark(n) { - if (n >= MAX_HWM) { - // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE. - n = MAX_HWM; - } else { - // Get the next highest power of 2 to prevent increasing hwm excessively in - // tiny amounts - n--; - n |= n >>> 1; - n |= n >>> 2; - n |= n >>> 4; - n |= n >>> 8; - n |= n >>> 16; - n++; - } - - return n; -} // This function is designed to be inlinable, so please take care when making -// changes to the function body. - - -function howMuchToRead(n, state) { - if (n <= 0 || state.length === 0 && state.ended) return 0; - if (state.objectMode) return 1; - - if (n !== n) { - // Only flow one buffer at a time - if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; - } // If we're asking for more than the current hwm, then raise the hwm. - - - if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); - if (n <= state.length) return n; // Don't have enough - - if (!state.ended) { - state.needReadable = true; - return 0; - } - - return state.length; -} // you can override either this method, or the async _read(n) below. - - -Readable.prototype.read = function (n) { - debug('read', n); - n = parseInt(n, 10); - var state = this._readableState; - var nOrig = n; - if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we - // already have a bunch of data in the buffer, then just trigger - // the 'readable' event and move on. - - if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) { - debug('read: emitReadable', state.length, state.ended); - if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); - return null; - } - - n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up. - - if (n === 0 && state.ended) { - if (state.length === 0) endReadable(this); - return null; - } // All the actual chunk generation logic needs to be - // *below* the call to _read. The reason is that in certain - // synthetic stream cases, such as passthrough streams, _read - // may be a completely synchronous operation which may change - // the state of the read buffer, providing enough data when - // before there was *not* enough. - // - // So, the steps are: - // 1. Figure out what the state of things will be after we do - // a read from the buffer. - // - // 2. If that resulting state will trigger a _read, then call _read. - // Note that this may be asynchronous, or synchronous. Yes, it is - // deeply ugly to write APIs this way, but that still doesn't mean - // that the Readable class should behave improperly, as streams are - // designed to be sync/async agnostic. - // Take note if the _read call is sync or async (ie, if the read call - // has returned yet), so that we know whether or not it's safe to emit - // 'readable' etc. - // - // 3. Actually pull the requested chunks out of the buffer and return. - // if we need a readable event, then we need to do some reading. - - - var doRead = state.needReadable; - debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some - - if (state.length === 0 || state.length - n < state.highWaterMark) { - doRead = true; - debug('length less than watermark', doRead); - } // however, if we've ended, then there's no point, and if we're already - // reading, then it's unnecessary. - - - if (state.ended || state.reading) { - doRead = false; - debug('reading or ended', doRead); - } else if (doRead) { - debug('do read'); - state.reading = true; - state.sync = true; // if the length is currently zero, then we *need* a readable event. - - if (state.length === 0) state.needReadable = true; // call internal read method - - this._read(state.highWaterMark); - - state.sync = false; // If _read pushed data synchronously, then `reading` will be false, - // and we need to re-evaluate how much data we can return to the user. - - if (!state.reading) n = howMuchToRead(nOrig, state); - } - - var ret; - if (n > 0) ret = fromList(n, state);else ret = null; - - if (ret === null) { - state.needReadable = state.length <= state.highWaterMark; - n = 0; - } else { - state.length -= n; - state.awaitDrain = 0; - } - - if (state.length === 0) { - // If we have nothing in the buffer, then we want to know - // as soon as we *do* get something into the buffer. - if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick. - - if (nOrig !== n && state.ended) endReadable(this); - } - - if (ret !== null) this.emit('data', ret); - return ret; -}; - -function onEofChunk(stream, state) { - debug('onEofChunk'); - if (state.ended) return; - - if (state.decoder) { - var chunk = state.decoder.end(); - - if (chunk && chunk.length) { - state.buffer.push(chunk); - state.length += state.objectMode ? 1 : chunk.length; - } - } - - state.ended = true; - - if (state.sync) { - // if we are sync, wait until next tick to emit the data. - // Otherwise we risk emitting data in the flow() - // the readable code triggers during a read() call - emitReadable(stream); - } else { - // emit 'readable' now to make sure it gets picked up. - state.needReadable = false; - - if (!state.emittedReadable) { - state.emittedReadable = true; - emitReadable_(stream); - } - } -} // Don't emit readable right away in sync mode, because this can trigger -// another read() call => stack overflow. This way, it might trigger -// a nextTick recursion warning, but that's not so bad. - - -function emitReadable(stream) { - var state = stream._readableState; - debug('emitReadable', state.needReadable, state.emittedReadable); - state.needReadable = false; - - if (!state.emittedReadable) { - debug('emitReadable', state.flowing); - state.emittedReadable = true; - process.nextTick(emitReadable_, stream); - } -} - -function emitReadable_(stream) { - var state = stream._readableState; - debug('emitReadable_', state.destroyed, state.length, state.ended); - - if (!state.destroyed && (state.length || state.ended)) { - stream.emit('readable'); - state.emittedReadable = false; - } // The stream needs another readable event if - // 1. It is not flowing, as the flow mechanism will take - // care of it. - // 2. It is not ended. - // 3. It is below the highWaterMark, so we can schedule - // another readable later. - - - state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark; - flow(stream); -} // at this point, the user has presumably seen the 'readable' event, -// and called read() to consume some data. that may have triggered -// in turn another _read(n) call, in which case reading = true if -// it's in progress. -// However, if we're not ended, or reading, and the length < hwm, -// then go ahead and try to read some more preemptively. - - -function maybeReadMore(stream, state) { - if (!state.readingMore) { - state.readingMore = true; - process.nextTick(maybeReadMore_, stream, state); - } -} - -function maybeReadMore_(stream, state) { - // Attempt to read more data if we should. - // - // The conditions for reading more data are (one of): - // - Not enough data buffered (state.length < state.highWaterMark). The loop - // is responsible for filling the buffer with enough data if such data - // is available. If highWaterMark is 0 and we are not in the flowing mode - // we should _not_ attempt to buffer any extra data. We'll get more data - // when the stream consumer calls read() instead. - // - No data in the buffer, and the stream is in flowing mode. In this mode - // the loop below is responsible for ensuring read() is called. Failing to - // call read here would abort the flow and there's no other mechanism for - // continuing the flow if the stream consumer has just subscribed to the - // 'data' event. - // - // In addition to the above conditions to keep reading data, the following - // conditions prevent the data from being read: - // - The stream has ended (state.ended). - // - There is already a pending 'read' operation (state.reading). This is a - // case where the the stream has called the implementation defined _read() - // method, but they are processing the call asynchronously and have _not_ - // called push() with new data. In this case we skip performing more - // read()s. The execution ends in this method again after the _read() ends - // up calling push() with more data. - while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) { - var len = state.length; - debug('maybeReadMore read 0'); - stream.read(0); - if (len === state.length) // didn't get any data, stop spinning. - break; - } - - state.readingMore = false; -} // abstract method. to be overridden in specific implementation classes. -// call cb(er, data) where data is <= n in length. -// for virtual (non-string, non-buffer) streams, "length" is somewhat -// arbitrary, and perhaps not very meaningful. - - -Readable.prototype._read = function (n) { - errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()')); -}; - -Readable.prototype.pipe = function (dest, pipeOpts) { - var src = this; - var state = this._readableState; - - switch (state.pipesCount) { - case 0: - state.pipes = dest; - break; - - case 1: - state.pipes = [state.pipes, dest]; - break; - - default: - state.pipes.push(dest); - break; - } - - state.pipesCount += 1; - debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); - var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; - var endFn = doEnd ? onend : unpipe; - if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn); - dest.on('unpipe', onunpipe); - - function onunpipe(readable, unpipeInfo) { - debug('onunpipe'); - - if (readable === src) { - if (unpipeInfo && unpipeInfo.hasUnpiped === false) { - unpipeInfo.hasUnpiped = true; - cleanup(); - } - } - } - - function onend() { - debug('onend'); - dest.end(); - } // when the dest drains, it reduces the awaitDrain counter - // on the source. This would be more elegant with a .once() - // handler in flow(), but adding and removing repeatedly is - // too slow. - - - var ondrain = pipeOnDrain(src); - dest.on('drain', ondrain); - var cleanedUp = false; - - function cleanup() { - debug('cleanup'); // cleanup event handlers once the pipe is broken - - dest.removeListener('close', onclose); - dest.removeListener('finish', onfinish); - dest.removeListener('drain', ondrain); - dest.removeListener('error', onerror); - dest.removeListener('unpipe', onunpipe); - src.removeListener('end', onend); - src.removeListener('end', unpipe); - src.removeListener('data', ondata); - cleanedUp = true; // if the reader is waiting for a drain event from this - // specific writer, then it would cause it to never start - // flowing again. - // So, if this is awaiting a drain, then we just call it now. - // If we don't know, then assume that we are waiting for one. - - if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); - } - - src.on('data', ondata); - - function ondata(chunk) { - debug('ondata'); - var ret = dest.write(chunk); - debug('dest.write', ret); - - if (ret === false) { - // If the user unpiped during `dest.write()`, it is possible - // to get stuck in a permanently paused state if that write - // also returned false. - // => Check whether `dest` is still a piping destination. - if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { - debug('false write response, pause', state.awaitDrain); - state.awaitDrain++; - } - - src.pause(); - } - } // if the dest has an error, then stop piping into it. - // however, don't suppress the throwing behavior for this. - - - function onerror(er) { - debug('onerror', er); - unpipe(); - dest.removeListener('error', onerror); - if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er); - } // Make sure our error handler is attached before userland ones. - - - prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once. - - function onclose() { - dest.removeListener('finish', onfinish); - unpipe(); - } - - dest.once('close', onclose); - - function onfinish() { - debug('onfinish'); - dest.removeListener('close', onclose); - unpipe(); - } - - dest.once('finish', onfinish); - - function unpipe() { - debug('unpipe'); - src.unpipe(dest); - } // tell the dest that it's being piped to - - - dest.emit('pipe', src); // start the flow if it hasn't been started already. - - if (!state.flowing) { - debug('pipe resume'); - src.resume(); - } - - return dest; -}; - -function pipeOnDrain(src) { - return function pipeOnDrainFunctionResult() { - var state = src._readableState; - debug('pipeOnDrain', state.awaitDrain); - if (state.awaitDrain) state.awaitDrain--; - - if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { - state.flowing = true; - flow(src); - } - }; -} - -Readable.prototype.unpipe = function (dest) { - var state = this._readableState; - var unpipeInfo = { - hasUnpiped: false - }; // if we're not piping anywhere, then do nothing. - - if (state.pipesCount === 0) return this; // just one destination. most common case. - - if (state.pipesCount === 1) { - // passed in one, but it's not the right one. - if (dest && dest !== state.pipes) return this; - if (!dest) dest = state.pipes; // got a match. - - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - if (dest) dest.emit('unpipe', this, unpipeInfo); - return this; - } // slow case. multiple pipe destinations. - - - if (!dest) { - // remove all. - var dests = state.pipes; - var len = state.pipesCount; - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - - for (var i = 0; i < len; i++) { - dests[i].emit('unpipe', this, { - hasUnpiped: false - }); - } - - return this; - } // try to find the right one. - - - var index = indexOf(state.pipes, dest); - if (index === -1) return this; - state.pipes.splice(index, 1); - state.pipesCount -= 1; - if (state.pipesCount === 1) state.pipes = state.pipes[0]; - dest.emit('unpipe', this, unpipeInfo); - return this; -}; // set up data events if they are asked for -// Ensure readable listeners eventually get something - - -Readable.prototype.on = function (ev, fn) { - var res = Stream.prototype.on.call(this, ev, fn); - var state = this._readableState; - - if (ev === 'data') { - // update readableListening so that resume() may be a no-op - // a few lines down. This is needed to support once('readable'). - state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused - - if (state.flowing !== false) this.resume(); - } else if (ev === 'readable') { - if (!state.endEmitted && !state.readableListening) { - state.readableListening = state.needReadable = true; - state.flowing = false; - state.emittedReadable = false; - debug('on readable', state.length, state.reading); - - if (state.length) { - emitReadable(this); - } else if (!state.reading) { - process.nextTick(nReadingNextTick, this); - } - } - } - - return res; -}; - -Readable.prototype.addListener = Readable.prototype.on; - -Readable.prototype.removeListener = function (ev, fn) { - var res = Stream.prototype.removeListener.call(this, ev, fn); - - if (ev === 'readable') { - // We need to check if there is someone still listening to - // readable and reset the state. However this needs to happen - // after readable has been emitted but before I/O (nextTick) to - // support once('readable', fn) cycles. This means that calling - // resume within the same tick will have no - // effect. - process.nextTick(updateReadableListening, this); - } - - return res; -}; - -Readable.prototype.removeAllListeners = function (ev) { - var res = Stream.prototype.removeAllListeners.apply(this, arguments); - - if (ev === 'readable' || ev === undefined) { - // We need to check if there is someone still listening to - // readable and reset the state. However this needs to happen - // after readable has been emitted but before I/O (nextTick) to - // support once('readable', fn) cycles. This means that calling - // resume within the same tick will have no - // effect. - process.nextTick(updateReadableListening, this); - } - - return res; -}; - -function updateReadableListening(self) { - var state = self._readableState; - state.readableListening = self.listenerCount('readable') > 0; - - if (state.resumeScheduled && !state.paused) { - // flowing needs to be set to true now, otherwise - // the upcoming resume will not flow. - state.flowing = true; // crude way to check if we should resume - } else if (self.listenerCount('data') > 0) { - self.resume(); - } -} - -function nReadingNextTick(self) { - debug('readable nexttick read 0'); - self.read(0); -} // pause() and resume() are remnants of the legacy readable stream API -// If the user uses them, then switch into old mode. - - -Readable.prototype.resume = function () { - var state = this._readableState; - - if (!state.flowing) { - debug('resume'); // we flow only if there is no one listening - // for readable, but we still have to call - // resume() - - state.flowing = !state.readableListening; - resume(this, state); - } - - state.paused = false; - return this; -}; - -function resume(stream, state) { - if (!state.resumeScheduled) { - state.resumeScheduled = true; - process.nextTick(resume_, stream, state); - } -} - -function resume_(stream, state) { - debug('resume', state.reading); - - if (!state.reading) { - stream.read(0); - } - - state.resumeScheduled = false; - stream.emit('resume'); - flow(stream); - if (state.flowing && !state.reading) stream.read(0); -} - -Readable.prototype.pause = function () { - debug('call pause flowing=%j', this._readableState.flowing); - - if (this._readableState.flowing !== false) { - debug('pause'); - this._readableState.flowing = false; - this.emit('pause'); - } - - this._readableState.paused = true; - return this; -}; - -function flow(stream) { - var state = stream._readableState; - debug('flow', state.flowing); - - while (state.flowing && stream.read() !== null) { - ; - } -} // wrap an old-style stream as the async data source. -// This is *not* part of the readable stream interface. -// It is an ugly unfortunate mess of history. - - -Readable.prototype.wrap = function (stream) { - var _this = this; - - var state = this._readableState; - var paused = false; - stream.on('end', function () { - debug('wrapped end'); - - if (state.decoder && !state.ended) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) _this.push(chunk); - } - - _this.push(null); - }); - stream.on('data', function (chunk) { - debug('wrapped data'); - if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode - - if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; - - var ret = _this.push(chunk); - - if (!ret) { - paused = true; - stream.pause(); - } - }); // proxy all the other methods. - // important when wrapping filters and duplexes. - - for (var i in stream) { - if (this[i] === undefined && typeof stream[i] === 'function') { - this[i] = function methodWrap(method) { - return function methodWrapReturnFunction() { - return stream[method].apply(stream, arguments); - }; - }(i); - } - } // proxy certain important events. - - - for (var n = 0; n < kProxyEvents.length; n++) { - stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); - } // when we try to consume some more bytes, simply unpause the - // underlying stream. - - - this._read = function (n) { - debug('wrapped _read', n); - - if (paused) { - paused = false; - stream.resume(); - } - }; - - return this; -}; - -if (typeof Symbol === 'function') { - Readable.prototype[Symbol.asyncIterator] = function () { - if (createReadableStreamAsyncIterator === undefined) { - createReadableStreamAsyncIterator = require('./internal/streams/async_iterator'); - } - - return createReadableStreamAsyncIterator(this); - }; -} - -Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._readableState.highWaterMark; - } -}); -Object.defineProperty(Readable.prototype, 'readableBuffer', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._readableState && this._readableState.buffer; - } -}); -Object.defineProperty(Readable.prototype, 'readableFlowing', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._readableState.flowing; - }, - set: function set(state) { - if (this._readableState) { - this._readableState.flowing = state; - } - } -}); // exposed for testing purposes only. - -Readable._fromList = fromList; -Object.defineProperty(Readable.prototype, 'readableLength', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._readableState.length; - } -}); // Pluck off n bytes from an array of buffers. -// Length is the combined lengths of all the buffers in the list. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. - -function fromList(n, state) { - // nothing buffered - if (state.length === 0) return null; - var ret; - if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { - // read it all, truncate the list - if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length); - state.buffer.clear(); - } else { - // read part of list - ret = state.buffer.consume(n, state.decoder); - } - return ret; -} - -function endReadable(stream) { - var state = stream._readableState; - debug('endReadable', state.endEmitted); - - if (!state.endEmitted) { - state.ended = true; - process.nextTick(endReadableNT, state, stream); - } -} - -function endReadableNT(state, stream) { - debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift. - - if (!state.endEmitted && state.length === 0) { - state.endEmitted = true; - stream.readable = false; - stream.emit('end'); - - if (state.autoDestroy) { - // In case of duplex streams we need a way to detect - // if the writable side is ready for autoDestroy as well - var wState = stream._writableState; - - if (!wState || wState.autoDestroy && wState.finished) { - stream.destroy(); - } - } - } -} - -if (typeof Symbol === 'function') { - Readable.from = function (iterable, opts) { - if (from === undefined) { - from = require('./internal/streams/from'); - } - - return from(Readable, iterable, opts); - }; -} - -function indexOf(xs, x) { - for (var i = 0, l = xs.length; i < l; i++) { - if (xs[i] === x) return i; - } - - return -1; -} \ No newline at end of file diff --git a/reverse_engineering/node_modules/readable-stream/lib/_stream_transform.js b/reverse_engineering/node_modules/readable-stream/lib/_stream_transform.js deleted file mode 100644 index 41a738c..0000000 --- a/reverse_engineering/node_modules/readable-stream/lib/_stream_transform.js +++ /dev/null @@ -1,201 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// 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. -// a transform stream is a readable/writable stream where you do -// something with the data. Sometimes it's called a "filter", -// but that's not a great name for it, since that implies a thing where -// some bits pass through, and others are simply ignored. (That would -// be a valid example of a transform, of course.) -// -// While the output is causally related to the input, it's not a -// necessarily symmetric or synchronous transformation. For example, -// a zlib stream might take multiple plain-text writes(), and then -// emit a single compressed chunk some time in the future. -// -// Here's how this works: -// -// The Transform stream has all the aspects of the readable and writable -// stream classes. When you write(chunk), that calls _write(chunk,cb) -// internally, and returns false if there's a lot of pending writes -// buffered up. When you call read(), that calls _read(n) until -// there's enough pending readable data buffered up. -// -// In a transform stream, the written data is placed in a buffer. When -// _read(n) is called, it transforms the queued up data, calling the -// buffered _write cb's as it consumes chunks. If consuming a single -// written chunk would result in multiple output chunks, then the first -// outputted bit calls the readcb, and subsequent chunks just go into -// the read buffer, and will cause it to emit 'readable' if necessary. -// -// This way, back-pressure is actually determined by the reading side, -// since _read has to be called to start processing a new chunk. However, -// a pathological inflate type of transform can cause excessive buffering -// here. For example, imagine a stream where every byte of input is -// interpreted as an integer from 0-255, and then results in that many -// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in -// 1kb of data being output. In this case, you could write a very small -// amount of input, and end up with a very large amount of output. In -// such a pathological inflating mechanism, there'd be no way to tell -// the system to stop doing the transform. A single 4MB write could -// cause the system to run out of memory. -// -// However, even in such a pathological case, only a single written chunk -// would be consumed, and then the rest would wait (un-transformed) until -// the results of the previous transformed chunk were consumed. -'use strict'; - -module.exports = Transform; - -var _require$codes = require('../errors').codes, - ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, - ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK, - ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING, - ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0; - -var Duplex = require('./_stream_duplex'); - -require('inherits')(Transform, Duplex); - -function afterTransform(er, data) { - var ts = this._transformState; - ts.transforming = false; - var cb = ts.writecb; - - if (cb === null) { - return this.emit('error', new ERR_MULTIPLE_CALLBACK()); - } - - ts.writechunk = null; - ts.writecb = null; - if (data != null) // single equals check for both `null` and `undefined` - this.push(data); - cb(er); - var rs = this._readableState; - rs.reading = false; - - if (rs.needReadable || rs.length < rs.highWaterMark) { - this._read(rs.highWaterMark); - } -} - -function Transform(options) { - if (!(this instanceof Transform)) return new Transform(options); - Duplex.call(this, options); - this._transformState = { - afterTransform: afterTransform.bind(this), - needTransform: false, - transforming: false, - writecb: null, - writechunk: null, - writeencoding: null - }; // start out asking for a readable event once data is transformed. - - this._readableState.needReadable = true; // we have implemented the _read method, and done the other things - // that Readable wants before the first _read call, so unset the - // sync guard flag. - - this._readableState.sync = false; - - if (options) { - if (typeof options.transform === 'function') this._transform = options.transform; - if (typeof options.flush === 'function') this._flush = options.flush; - } // When the writable side finishes, then flush out anything remaining. - - - this.on('prefinish', prefinish); -} - -function prefinish() { - var _this = this; - - if (typeof this._flush === 'function' && !this._readableState.destroyed) { - this._flush(function (er, data) { - done(_this, er, data); - }); - } else { - done(this, null, null); - } -} - -Transform.prototype.push = function (chunk, encoding) { - this._transformState.needTransform = false; - return Duplex.prototype.push.call(this, chunk, encoding); -}; // This is the part where you do stuff! -// override this function in implementation classes. -// 'chunk' is an input chunk. -// -// Call `push(newChunk)` to pass along transformed output -// to the readable side. You may call 'push' zero or more times. -// -// Call `cb(err)` when you are done with this chunk. If you pass -// an error, then that'll put the hurt on the whole operation. If you -// never call cb(), then you'll never get another chunk. - - -Transform.prototype._transform = function (chunk, encoding, cb) { - cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()')); -}; - -Transform.prototype._write = function (chunk, encoding, cb) { - var ts = this._transformState; - ts.writecb = cb; - ts.writechunk = chunk; - ts.writeencoding = encoding; - - if (!ts.transforming) { - var rs = this._readableState; - if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); - } -}; // Doesn't matter what the args are here. -// _transform does all the work. -// That we got here means that the readable side wants more data. - - -Transform.prototype._read = function (n) { - var ts = this._transformState; - - if (ts.writechunk !== null && !ts.transforming) { - ts.transforming = true; - - this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); - } else { - // mark that we need a transform, so that any data that comes in - // will get processed, now that we've asked for it. - ts.needTransform = true; - } -}; - -Transform.prototype._destroy = function (err, cb) { - Duplex.prototype._destroy.call(this, err, function (err2) { - cb(err2); - }); -}; - -function done(stream, er, data) { - if (er) return stream.emit('error', er); - if (data != null) // single equals check for both `null` and `undefined` - stream.push(data); // TODO(BridgeAR): Write a test for these two error cases - // if there's nothing in the write buffer, then that means - // that nothing more will ever be provided - - if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0(); - if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING(); - return stream.push(null); -} \ No newline at end of file diff --git a/reverse_engineering/node_modules/readable-stream/lib/_stream_writable.js b/reverse_engineering/node_modules/readable-stream/lib/_stream_writable.js deleted file mode 100644 index a2634d7..0000000 --- a/reverse_engineering/node_modules/readable-stream/lib/_stream_writable.js +++ /dev/null @@ -1,697 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// 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. -// A bit simpler than readable streams. -// Implement an async ._write(chunk, encoding, cb), and it'll handle all -// the drain event emission and buffering. -'use strict'; - -module.exports = Writable; -/* */ - -function WriteReq(chunk, encoding, cb) { - this.chunk = chunk; - this.encoding = encoding; - this.callback = cb; - this.next = null; -} // It seems a linked list but it is not -// there will be only 2 of these for each stream - - -function CorkedRequest(state) { - var _this = this; - - this.next = null; - this.entry = null; - - this.finish = function () { - onCorkedFinish(_this, state); - }; -} -/* */ - -/**/ - - -var Duplex; -/**/ - -Writable.WritableState = WritableState; -/**/ - -var internalUtil = { - deprecate: require('util-deprecate') -}; -/**/ - -/**/ - -var Stream = require('./internal/streams/stream'); -/**/ - - -var Buffer = require('buffer').Buffer; - -var OurUint8Array = global.Uint8Array || function () {}; - -function _uint8ArrayToBuffer(chunk) { - return Buffer.from(chunk); -} - -function _isUint8Array(obj) { - return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; -} - -var destroyImpl = require('./internal/streams/destroy'); - -var _require = require('./internal/streams/state'), - getHighWaterMark = _require.getHighWaterMark; - -var _require$codes = require('../errors').codes, - ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, - ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, - ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK, - ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE, - ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED, - ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES, - ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END, - ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING; - -var errorOrDestroy = destroyImpl.errorOrDestroy; - -require('inherits')(Writable, Stream); - -function nop() {} - -function WritableState(options, stream, isDuplex) { - Duplex = Duplex || require('./_stream_duplex'); - options = options || {}; // Duplex streams are both readable and writable, but share - // the same options object. - // However, some cases require setting options to different - // values for the readable and the writable sides of the duplex stream, - // e.g. options.readableObjectMode vs. options.writableObjectMode, etc. - - if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream - // contains buffers or objects. - - this.objectMode = !!options.objectMode; - if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false - // Note: 0 is a valid value, means that we always return false if - // the entire buffer is not flushed immediately on write() - - this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called - - this.finalCalled = false; // drain event flag. - - this.needDrain = false; // at the start of calling end() - - this.ending = false; // when end() has been called, and returned - - this.ended = false; // when 'finish' is emitted - - this.finished = false; // has it been destroyed - - this.destroyed = false; // should we decode strings into buffers before passing to _write? - // this is here so that some node-core streams can optimize string - // handling at a lower level. - - var noDecode = options.decodeStrings === false; - this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - - this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement - // of how much we're waiting to get pushed to some underlying - // socket or file. - - this.length = 0; // a flag to see when we're in the middle of a write. - - this.writing = false; // when true all writes will be buffered until .uncork() call - - this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately, - // or on a later tick. We set this to true at first, because any - // actions that shouldn't happen until "later" should generally also - // not happen before the first write call. - - this.sync = true; // a flag to know if we're processing previously buffered items, which - // may call the _write() callback in the same tick, so that we don't - // end up in an overlapped onwrite situation. - - this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb) - - this.onwrite = function (er) { - onwrite(stream, er); - }; // the callback that the user supplies to write(chunk,encoding,cb) - - - this.writecb = null; // the amount that is being written when _write is called. - - this.writelen = 0; - this.bufferedRequest = null; - this.lastBufferedRequest = null; // number of pending user-supplied write callbacks - // this must be 0 before 'finish' can be emitted - - this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs - // This is relevant for synchronous Transform streams - - this.prefinished = false; // True if the error was already emitted and should not be thrown again - - this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true. - - this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end') - - this.autoDestroy = !!options.autoDestroy; // count buffered requests - - this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always - // one allocated and free to use, and we maintain at most two - - this.corkedRequestsFree = new CorkedRequest(this); -} - -WritableState.prototype.getBuffer = function getBuffer() { - var current = this.bufferedRequest; - var out = []; - - while (current) { - out.push(current); - current = current.next; - } - - return out; -}; - -(function () { - try { - Object.defineProperty(WritableState.prototype, 'buffer', { - get: internalUtil.deprecate(function writableStateBufferGetter() { - return this.getBuffer(); - }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') - }); - } catch (_) {} -})(); // Test _writableState for inheritance to account for Duplex streams, -// whose prototype chain only points to Readable. - - -var realHasInstance; - -if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { - realHasInstance = Function.prototype[Symbol.hasInstance]; - Object.defineProperty(Writable, Symbol.hasInstance, { - value: function value(object) { - if (realHasInstance.call(this, object)) return true; - if (this !== Writable) return false; - return object && object._writableState instanceof WritableState; - } - }); -} else { - realHasInstance = function realHasInstance(object) { - return object instanceof this; - }; -} - -function Writable(options) { - Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too. - // `realHasInstance` is necessary because using plain `instanceof` - // would return false, as no `_writableState` property is attached. - // Trying to use the custom `instanceof` for Writable here will also break the - // Node.js LazyTransform implementation, which has a non-trivial getter for - // `_writableState` that would lead to infinite recursion. - // Checking for a Stream.Duplex instance is faster here instead of inside - // the WritableState constructor, at least with V8 6.5 - - var isDuplex = this instanceof Duplex; - if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options); - this._writableState = new WritableState(options, this, isDuplex); // legacy. - - this.writable = true; - - if (options) { - if (typeof options.write === 'function') this._write = options.write; - if (typeof options.writev === 'function') this._writev = options.writev; - if (typeof options.destroy === 'function') this._destroy = options.destroy; - if (typeof options.final === 'function') this._final = options.final; - } - - Stream.call(this); -} // Otherwise people can pipe Writable streams, which is just wrong. - - -Writable.prototype.pipe = function () { - errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE()); -}; - -function writeAfterEnd(stream, cb) { - var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb - - errorOrDestroy(stream, er); - process.nextTick(cb, er); -} // Checks that a user-supplied chunk is valid, especially for the particular -// mode the stream is in. Currently this means that `null` is never accepted -// and undefined/non-string values are only allowed in object mode. - - -function validChunk(stream, state, chunk, cb) { - var er; - - if (chunk === null) { - er = new ERR_STREAM_NULL_VALUES(); - } else if (typeof chunk !== 'string' && !state.objectMode) { - er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk); - } - - if (er) { - errorOrDestroy(stream, er); - process.nextTick(cb, er); - return false; - } - - return true; -} - -Writable.prototype.write = function (chunk, encoding, cb) { - var state = this._writableState; - var ret = false; - - var isBuf = !state.objectMode && _isUint8Array(chunk); - - if (isBuf && !Buffer.isBuffer(chunk)) { - chunk = _uint8ArrayToBuffer(chunk); - } - - if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } - - if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; - if (typeof cb !== 'function') cb = nop; - if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { - state.pendingcb++; - ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); - } - return ret; -}; - -Writable.prototype.cork = function () { - this._writableState.corked++; -}; - -Writable.prototype.uncork = function () { - var state = this._writableState; - - if (state.corked) { - state.corked--; - if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); - } -}; - -Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { - // node::ParseEncoding() requires lower case. - if (typeof encoding === 'string') encoding = encoding.toLowerCase(); - if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding); - this._writableState.defaultEncoding = encoding; - return this; -}; - -Object.defineProperty(Writable.prototype, 'writableBuffer', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState && this._writableState.getBuffer(); - } -}); - -function decodeChunk(state, chunk, encoding) { - if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { - chunk = Buffer.from(chunk, encoding); - } - - return chunk; -} - -Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState.highWaterMark; - } -}); // if we're already writing something, then just put this -// in the queue, and wait our turn. Otherwise, call _write -// If we return false, then we need a drain event, so set that flag. - -function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { - if (!isBuf) { - var newChunk = decodeChunk(state, chunk, encoding); - - if (chunk !== newChunk) { - isBuf = true; - encoding = 'buffer'; - chunk = newChunk; - } - } - - var len = state.objectMode ? 1 : chunk.length; - state.length += len; - var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false. - - if (!ret) state.needDrain = true; - - if (state.writing || state.corked) { - var last = state.lastBufferedRequest; - state.lastBufferedRequest = { - chunk: chunk, - encoding: encoding, - isBuf: isBuf, - callback: cb, - next: null - }; - - if (last) { - last.next = state.lastBufferedRequest; - } else { - state.bufferedRequest = state.lastBufferedRequest; - } - - state.bufferedRequestCount += 1; - } else { - doWrite(stream, state, false, len, chunk, encoding, cb); - } - - return ret; -} - -function doWrite(stream, state, writev, len, chunk, encoding, cb) { - state.writelen = len; - state.writecb = cb; - state.writing = true; - state.sync = true; - if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); - state.sync = false; -} - -function onwriteError(stream, state, sync, er, cb) { - --state.pendingcb; - - if (sync) { - // defer the callback if we are being called synchronously - // to avoid piling up things on the stack - process.nextTick(cb, er); // this can emit finish, and it will always happen - // after error - - process.nextTick(finishMaybe, stream, state); - stream._writableState.errorEmitted = true; - errorOrDestroy(stream, er); - } else { - // the caller expect this to happen before if - // it is async - cb(er); - stream._writableState.errorEmitted = true; - errorOrDestroy(stream, er); // this can emit finish, but finish must - // always follow error - - finishMaybe(stream, state); - } -} - -function onwriteStateUpdate(state) { - state.writing = false; - state.writecb = null; - state.length -= state.writelen; - state.writelen = 0; -} - -function onwrite(stream, er) { - var state = stream._writableState; - var sync = state.sync; - var cb = state.writecb; - if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK(); - onwriteStateUpdate(state); - if (er) onwriteError(stream, state, sync, er, cb);else { - // Check if we're actually ready to finish, but don't emit yet - var finished = needFinish(state) || stream.destroyed; - - if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { - clearBuffer(stream, state); - } - - if (sync) { - process.nextTick(afterWrite, stream, state, finished, cb); - } else { - afterWrite(stream, state, finished, cb); - } - } -} - -function afterWrite(stream, state, finished, cb) { - if (!finished) onwriteDrain(stream, state); - state.pendingcb--; - cb(); - finishMaybe(stream, state); -} // Must force callback to be called on nextTick, so that we don't -// emit 'drain' before the write() consumer gets the 'false' return -// value, and has a chance to attach a 'drain' listener. - - -function onwriteDrain(stream, state) { - if (state.length === 0 && state.needDrain) { - state.needDrain = false; - stream.emit('drain'); - } -} // if there's something in the buffer waiting, then process it - - -function clearBuffer(stream, state) { - state.bufferProcessing = true; - var entry = state.bufferedRequest; - - if (stream._writev && entry && entry.next) { - // Fast case, write everything using _writev() - var l = state.bufferedRequestCount; - var buffer = new Array(l); - var holder = state.corkedRequestsFree; - holder.entry = entry; - var count = 0; - var allBuffers = true; - - while (entry) { - buffer[count] = entry; - if (!entry.isBuf) allBuffers = false; - entry = entry.next; - count += 1; - } - - buffer.allBuffers = allBuffers; - doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time - // as the hot path ends with doWrite - - state.pendingcb++; - state.lastBufferedRequest = null; - - if (holder.next) { - state.corkedRequestsFree = holder.next; - holder.next = null; - } else { - state.corkedRequestsFree = new CorkedRequest(state); - } - - state.bufferedRequestCount = 0; - } else { - // Slow case, write chunks one-by-one - while (entry) { - var chunk = entry.chunk; - var encoding = entry.encoding; - var cb = entry.callback; - var len = state.objectMode ? 1 : chunk.length; - doWrite(stream, state, false, len, chunk, encoding, cb); - entry = entry.next; - state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then - // it means that we need to wait until it does. - // also, that means that the chunk and cb are currently - // being processed, so move the buffer counter past them. - - if (state.writing) { - break; - } - } - - if (entry === null) state.lastBufferedRequest = null; - } - - state.bufferedRequest = entry; - state.bufferProcessing = false; -} - -Writable.prototype._write = function (chunk, encoding, cb) { - cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()')); -}; - -Writable.prototype._writev = null; - -Writable.prototype.end = function (chunk, encoding, cb) { - var state = this._writableState; - - if (typeof chunk === 'function') { - cb = chunk; - chunk = null; - encoding = null; - } else if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } - - if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks - - if (state.corked) { - state.corked = 1; - this.uncork(); - } // ignore unnecessary end() calls. - - - if (!state.ending) endWritable(this, state, cb); - return this; -}; - -Object.defineProperty(Writable.prototype, 'writableLength', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState.length; - } -}); - -function needFinish(state) { - return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; -} - -function callFinal(stream, state) { - stream._final(function (err) { - state.pendingcb--; - - if (err) { - errorOrDestroy(stream, err); - } - - state.prefinished = true; - stream.emit('prefinish'); - finishMaybe(stream, state); - }); -} - -function prefinish(stream, state) { - if (!state.prefinished && !state.finalCalled) { - if (typeof stream._final === 'function' && !state.destroyed) { - state.pendingcb++; - state.finalCalled = true; - process.nextTick(callFinal, stream, state); - } else { - state.prefinished = true; - stream.emit('prefinish'); - } - } -} - -function finishMaybe(stream, state) { - var need = needFinish(state); - - if (need) { - prefinish(stream, state); - - if (state.pendingcb === 0) { - state.finished = true; - stream.emit('finish'); - - if (state.autoDestroy) { - // In case of duplex streams we need a way to detect - // if the readable side is ready for autoDestroy as well - var rState = stream._readableState; - - if (!rState || rState.autoDestroy && rState.endEmitted) { - stream.destroy(); - } - } - } - } - - return need; -} - -function endWritable(stream, state, cb) { - state.ending = true; - finishMaybe(stream, state); - - if (cb) { - if (state.finished) process.nextTick(cb);else stream.once('finish', cb); - } - - state.ended = true; - stream.writable = false; -} - -function onCorkedFinish(corkReq, state, err) { - var entry = corkReq.entry; - corkReq.entry = null; - - while (entry) { - var cb = entry.callback; - state.pendingcb--; - cb(err); - entry = entry.next; - } // reuse the free corkReq. - - - state.corkedRequestsFree.next = corkReq; -} - -Object.defineProperty(Writable.prototype, 'destroyed', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - if (this._writableState === undefined) { - return false; - } - - return this._writableState.destroyed; - }, - set: function set(value) { - // we ignore the value if the stream - // has not been initialized yet - if (!this._writableState) { - return; - } // backward compatibility, the user is explicitly - // managing destroyed - - - this._writableState.destroyed = value; - } -}); -Writable.prototype.destroy = destroyImpl.destroy; -Writable.prototype._undestroy = destroyImpl.undestroy; - -Writable.prototype._destroy = function (err, cb) { - cb(err); -}; \ No newline at end of file diff --git a/reverse_engineering/node_modules/readable-stream/lib/internal/streams/async_iterator.js b/reverse_engineering/node_modules/readable-stream/lib/internal/streams/async_iterator.js deleted file mode 100644 index 9fb615a..0000000 --- a/reverse_engineering/node_modules/readable-stream/lib/internal/streams/async_iterator.js +++ /dev/null @@ -1,207 +0,0 @@ -'use strict'; - -var _Object$setPrototypeO; - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -var finished = require('./end-of-stream'); - -var kLastResolve = Symbol('lastResolve'); -var kLastReject = Symbol('lastReject'); -var kError = Symbol('error'); -var kEnded = Symbol('ended'); -var kLastPromise = Symbol('lastPromise'); -var kHandlePromise = Symbol('handlePromise'); -var kStream = Symbol('stream'); - -function createIterResult(value, done) { - return { - value: value, - done: done - }; -} - -function readAndResolve(iter) { - var resolve = iter[kLastResolve]; - - if (resolve !== null) { - var data = iter[kStream].read(); // we defer if data is null - // we can be expecting either 'end' or - // 'error' - - if (data !== null) { - iter[kLastPromise] = null; - iter[kLastResolve] = null; - iter[kLastReject] = null; - resolve(createIterResult(data, false)); - } - } -} - -function onReadable(iter) { - // we wait for the next tick, because it might - // emit an error with process.nextTick - process.nextTick(readAndResolve, iter); -} - -function wrapForNext(lastPromise, iter) { - return function (resolve, reject) { - lastPromise.then(function () { - if (iter[kEnded]) { - resolve(createIterResult(undefined, true)); - return; - } - - iter[kHandlePromise](resolve, reject); - }, reject); - }; -} - -var AsyncIteratorPrototype = Object.getPrototypeOf(function () {}); -var ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = { - get stream() { - return this[kStream]; - }, - - next: function next() { - var _this = this; - - // if we have detected an error in the meanwhile - // reject straight away - var error = this[kError]; - - if (error !== null) { - return Promise.reject(error); - } - - if (this[kEnded]) { - return Promise.resolve(createIterResult(undefined, true)); - } - - if (this[kStream].destroyed) { - // We need to defer via nextTick because if .destroy(err) is - // called, the error will be emitted via nextTick, and - // we cannot guarantee that there is no error lingering around - // waiting to be emitted. - return new Promise(function (resolve, reject) { - process.nextTick(function () { - if (_this[kError]) { - reject(_this[kError]); - } else { - resolve(createIterResult(undefined, true)); - } - }); - }); - } // if we have multiple next() calls - // we will wait for the previous Promise to finish - // this logic is optimized to support for await loops, - // where next() is only called once at a time - - - var lastPromise = this[kLastPromise]; - var promise; - - if (lastPromise) { - promise = new Promise(wrapForNext(lastPromise, this)); - } else { - // fast path needed to support multiple this.push() - // without triggering the next() queue - var data = this[kStream].read(); - - if (data !== null) { - return Promise.resolve(createIterResult(data, false)); - } - - promise = new Promise(this[kHandlePromise]); - } - - this[kLastPromise] = promise; - return promise; - } -}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () { - return this; -}), _defineProperty(_Object$setPrototypeO, "return", function _return() { - var _this2 = this; - - // destroy(err, cb) is a private API - // we can guarantee we have that here, because we control the - // Readable class this is attached to - return new Promise(function (resolve, reject) { - _this2[kStream].destroy(null, function (err) { - if (err) { - reject(err); - return; - } - - resolve(createIterResult(undefined, true)); - }); - }); -}), _Object$setPrototypeO), AsyncIteratorPrototype); - -var createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) { - var _Object$create; - - var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, { - value: stream, - writable: true - }), _defineProperty(_Object$create, kLastResolve, { - value: null, - writable: true - }), _defineProperty(_Object$create, kLastReject, { - value: null, - writable: true - }), _defineProperty(_Object$create, kError, { - value: null, - writable: true - }), _defineProperty(_Object$create, kEnded, { - value: stream._readableState.endEmitted, - writable: true - }), _defineProperty(_Object$create, kHandlePromise, { - value: function value(resolve, reject) { - var data = iterator[kStream].read(); - - if (data) { - iterator[kLastPromise] = null; - iterator[kLastResolve] = null; - iterator[kLastReject] = null; - resolve(createIterResult(data, false)); - } else { - iterator[kLastResolve] = resolve; - iterator[kLastReject] = reject; - } - }, - writable: true - }), _Object$create)); - iterator[kLastPromise] = null; - finished(stream, function (err) { - if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') { - var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise - // returned by next() and store the error - - if (reject !== null) { - iterator[kLastPromise] = null; - iterator[kLastResolve] = null; - iterator[kLastReject] = null; - reject(err); - } - - iterator[kError] = err; - return; - } - - var resolve = iterator[kLastResolve]; - - if (resolve !== null) { - iterator[kLastPromise] = null; - iterator[kLastResolve] = null; - iterator[kLastReject] = null; - resolve(createIterResult(undefined, true)); - } - - iterator[kEnded] = true; - }); - stream.on('readable', onReadable.bind(null, iterator)); - return iterator; -}; - -module.exports = createReadableStreamAsyncIterator; \ No newline at end of file diff --git a/reverse_engineering/node_modules/readable-stream/lib/internal/streams/buffer_list.js b/reverse_engineering/node_modules/readable-stream/lib/internal/streams/buffer_list.js deleted file mode 100644 index cdea425..0000000 --- a/reverse_engineering/node_modules/readable-stream/lib/internal/streams/buffer_list.js +++ /dev/null @@ -1,210 +0,0 @@ -'use strict'; - -function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } - -function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -var _require = require('buffer'), - Buffer = _require.Buffer; - -var _require2 = require('util'), - inspect = _require2.inspect; - -var custom = inspect && inspect.custom || 'inspect'; - -function copyBuffer(src, target, offset) { - Buffer.prototype.copy.call(src, target, offset); -} - -module.exports = -/*#__PURE__*/ -function () { - function BufferList() { - _classCallCheck(this, BufferList); - - this.head = null; - this.tail = null; - this.length = 0; - } - - _createClass(BufferList, [{ - key: "push", - value: function push(v) { - var entry = { - data: v, - next: null - }; - if (this.length > 0) this.tail.next = entry;else this.head = entry; - this.tail = entry; - ++this.length; - } - }, { - key: "unshift", - value: function unshift(v) { - var entry = { - data: v, - next: this.head - }; - if (this.length === 0) this.tail = entry; - this.head = entry; - ++this.length; - } - }, { - key: "shift", - value: function shift() { - if (this.length === 0) return; - var ret = this.head.data; - if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; - --this.length; - return ret; - } - }, { - key: "clear", - value: function clear() { - this.head = this.tail = null; - this.length = 0; - } - }, { - key: "join", - value: function join(s) { - if (this.length === 0) return ''; - var p = this.head; - var ret = '' + p.data; - - while (p = p.next) { - ret += s + p.data; - } - - return ret; - } - }, { - key: "concat", - value: function concat(n) { - if (this.length === 0) return Buffer.alloc(0); - var ret = Buffer.allocUnsafe(n >>> 0); - var p = this.head; - var i = 0; - - while (p) { - copyBuffer(p.data, ret, i); - i += p.data.length; - p = p.next; - } - - return ret; - } // Consumes a specified amount of bytes or characters from the buffered data. - - }, { - key: "consume", - value: function consume(n, hasStrings) { - var ret; - - if (n < this.head.data.length) { - // `slice` is the same for buffers and strings. - ret = this.head.data.slice(0, n); - this.head.data = this.head.data.slice(n); - } else if (n === this.head.data.length) { - // First chunk is a perfect match. - ret = this.shift(); - } else { - // Result spans more than one buffer. - ret = hasStrings ? this._getString(n) : this._getBuffer(n); - } - - return ret; - } - }, { - key: "first", - value: function first() { - return this.head.data; - } // Consumes a specified amount of characters from the buffered data. - - }, { - key: "_getString", - value: function _getString(n) { - var p = this.head; - var c = 1; - var ret = p.data; - n -= ret.length; - - while (p = p.next) { - var str = p.data; - var nb = n > str.length ? str.length : n; - if (nb === str.length) ret += str;else ret += str.slice(0, n); - n -= nb; - - if (n === 0) { - if (nb === str.length) { - ++c; - if (p.next) this.head = p.next;else this.head = this.tail = null; - } else { - this.head = p; - p.data = str.slice(nb); - } - - break; - } - - ++c; - } - - this.length -= c; - return ret; - } // Consumes a specified amount of bytes from the buffered data. - - }, { - key: "_getBuffer", - value: function _getBuffer(n) { - var ret = Buffer.allocUnsafe(n); - var p = this.head; - var c = 1; - p.data.copy(ret); - n -= p.data.length; - - while (p = p.next) { - var buf = p.data; - var nb = n > buf.length ? buf.length : n; - buf.copy(ret, ret.length - n, 0, nb); - n -= nb; - - if (n === 0) { - if (nb === buf.length) { - ++c; - if (p.next) this.head = p.next;else this.head = this.tail = null; - } else { - this.head = p; - p.data = buf.slice(nb); - } - - break; - } - - ++c; - } - - this.length -= c; - return ret; - } // Make sure the linked list only shows the minimal necessary information. - - }, { - key: custom, - value: function value(_, options) { - return inspect(this, _objectSpread({}, options, { - // Only inspect one level. - depth: 0, - // It should not recurse. - customInspect: false - })); - } - }]); - - return BufferList; -}(); \ No newline at end of file diff --git a/reverse_engineering/node_modules/readable-stream/lib/internal/streams/destroy.js b/reverse_engineering/node_modules/readable-stream/lib/internal/streams/destroy.js deleted file mode 100644 index 3268a16..0000000 --- a/reverse_engineering/node_modules/readable-stream/lib/internal/streams/destroy.js +++ /dev/null @@ -1,105 +0,0 @@ -'use strict'; // undocumented cb() API, needed for core, not for public API - -function destroy(err, cb) { - var _this = this; - - var readableDestroyed = this._readableState && this._readableState.destroyed; - var writableDestroyed = this._writableState && this._writableState.destroyed; - - if (readableDestroyed || writableDestroyed) { - if (cb) { - cb(err); - } else if (err) { - if (!this._writableState) { - process.nextTick(emitErrorNT, this, err); - } else if (!this._writableState.errorEmitted) { - this._writableState.errorEmitted = true; - process.nextTick(emitErrorNT, this, err); - } - } - - return this; - } // we set destroyed to true before firing error callbacks in order - // to make it re-entrance safe in case destroy() is called within callbacks - - - if (this._readableState) { - this._readableState.destroyed = true; - } // if this is a duplex stream mark the writable part as destroyed as well - - - if (this._writableState) { - this._writableState.destroyed = true; - } - - this._destroy(err || null, function (err) { - if (!cb && err) { - if (!_this._writableState) { - process.nextTick(emitErrorAndCloseNT, _this, err); - } else if (!_this._writableState.errorEmitted) { - _this._writableState.errorEmitted = true; - process.nextTick(emitErrorAndCloseNT, _this, err); - } else { - process.nextTick(emitCloseNT, _this); - } - } else if (cb) { - process.nextTick(emitCloseNT, _this); - cb(err); - } else { - process.nextTick(emitCloseNT, _this); - } - }); - - return this; -} - -function emitErrorAndCloseNT(self, err) { - emitErrorNT(self, err); - emitCloseNT(self); -} - -function emitCloseNT(self) { - if (self._writableState && !self._writableState.emitClose) return; - if (self._readableState && !self._readableState.emitClose) return; - self.emit('close'); -} - -function undestroy() { - if (this._readableState) { - this._readableState.destroyed = false; - this._readableState.reading = false; - this._readableState.ended = false; - this._readableState.endEmitted = false; - } - - if (this._writableState) { - this._writableState.destroyed = false; - this._writableState.ended = false; - this._writableState.ending = false; - this._writableState.finalCalled = false; - this._writableState.prefinished = false; - this._writableState.finished = false; - this._writableState.errorEmitted = false; - } -} - -function emitErrorNT(self, err) { - self.emit('error', err); -} - -function errorOrDestroy(stream, err) { - // We have tests that rely on errors being emitted - // in the same tick, so changing this is semver major. - // For now when you opt-in to autoDestroy we allow - // the error to be emitted nextTick. In a future - // semver major update we should change the default to this. - var rState = stream._readableState; - var wState = stream._writableState; - if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err); -} - -module.exports = { - destroy: destroy, - undestroy: undestroy, - errorOrDestroy: errorOrDestroy -}; \ No newline at end of file diff --git a/reverse_engineering/node_modules/readable-stream/lib/internal/streams/end-of-stream.js b/reverse_engineering/node_modules/readable-stream/lib/internal/streams/end-of-stream.js deleted file mode 100644 index 831f286..0000000 --- a/reverse_engineering/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +++ /dev/null @@ -1,104 +0,0 @@ -// Ported from https://github.com/mafintosh/end-of-stream with -// permission from the author, Mathias Buus (@mafintosh). -'use strict'; - -var ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE; - -function once(callback) { - var called = false; - return function () { - if (called) return; - called = true; - - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - callback.apply(this, args); - }; -} - -function noop() {} - -function isRequest(stream) { - return stream.setHeader && typeof stream.abort === 'function'; -} - -function eos(stream, opts, callback) { - if (typeof opts === 'function') return eos(stream, null, opts); - if (!opts) opts = {}; - callback = once(callback || noop); - var readable = opts.readable || opts.readable !== false && stream.readable; - var writable = opts.writable || opts.writable !== false && stream.writable; - - var onlegacyfinish = function onlegacyfinish() { - if (!stream.writable) onfinish(); - }; - - var writableEnded = stream._writableState && stream._writableState.finished; - - var onfinish = function onfinish() { - writable = false; - writableEnded = true; - if (!readable) callback.call(stream); - }; - - var readableEnded = stream._readableState && stream._readableState.endEmitted; - - var onend = function onend() { - readable = false; - readableEnded = true; - if (!writable) callback.call(stream); - }; - - var onerror = function onerror(err) { - callback.call(stream, err); - }; - - var onclose = function onclose() { - var err; - - if (readable && !readableEnded) { - if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE(); - return callback.call(stream, err); - } - - if (writable && !writableEnded) { - if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE(); - return callback.call(stream, err); - } - }; - - var onrequest = function onrequest() { - stream.req.on('finish', onfinish); - }; - - if (isRequest(stream)) { - stream.on('complete', onfinish); - stream.on('abort', onclose); - if (stream.req) onrequest();else stream.on('request', onrequest); - } else if (writable && !stream._writableState) { - // legacy streams - stream.on('end', onlegacyfinish); - stream.on('close', onlegacyfinish); - } - - stream.on('end', onend); - stream.on('finish', onfinish); - if (opts.error !== false) stream.on('error', onerror); - stream.on('close', onclose); - return function () { - stream.removeListener('complete', onfinish); - stream.removeListener('abort', onclose); - stream.removeListener('request', onrequest); - if (stream.req) stream.req.removeListener('finish', onfinish); - stream.removeListener('end', onlegacyfinish); - stream.removeListener('close', onlegacyfinish); - stream.removeListener('finish', onfinish); - stream.removeListener('end', onend); - stream.removeListener('error', onerror); - stream.removeListener('close', onclose); - }; -} - -module.exports = eos; \ No newline at end of file diff --git a/reverse_engineering/node_modules/readable-stream/lib/internal/streams/from-browser.js b/reverse_engineering/node_modules/readable-stream/lib/internal/streams/from-browser.js deleted file mode 100644 index a4ce56f..0000000 --- a/reverse_engineering/node_modules/readable-stream/lib/internal/streams/from-browser.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function () { - throw new Error('Readable.from is not available in the browser') -}; diff --git a/reverse_engineering/node_modules/readable-stream/lib/internal/streams/from.js b/reverse_engineering/node_modules/readable-stream/lib/internal/streams/from.js deleted file mode 100644 index 6c41284..0000000 --- a/reverse_engineering/node_modules/readable-stream/lib/internal/streams/from.js +++ /dev/null @@ -1,64 +0,0 @@ -'use strict'; - -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - -function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } - -function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -var ERR_INVALID_ARG_TYPE = require('../../../errors').codes.ERR_INVALID_ARG_TYPE; - -function from(Readable, iterable, opts) { - var iterator; - - if (iterable && typeof iterable.next === 'function') { - iterator = iterable; - } else if (iterable && iterable[Symbol.asyncIterator]) iterator = iterable[Symbol.asyncIterator]();else if (iterable && iterable[Symbol.iterator]) iterator = iterable[Symbol.iterator]();else throw new ERR_INVALID_ARG_TYPE('iterable', ['Iterable'], iterable); - - var readable = new Readable(_objectSpread({ - objectMode: true - }, opts)); // Reading boolean to protect against _read - // being called before last iteration completion. - - var reading = false; - - readable._read = function () { - if (!reading) { - reading = true; - next(); - } - }; - - function next() { - return _next2.apply(this, arguments); - } - - function _next2() { - _next2 = _asyncToGenerator(function* () { - try { - var _ref = yield iterator.next(), - value = _ref.value, - done = _ref.done; - - if (done) { - readable.push(null); - } else if (readable.push((yield value))) { - next(); - } else { - reading = false; - } - } catch (err) { - readable.destroy(err); - } - }); - return _next2.apply(this, arguments); - } - - return readable; -} - -module.exports = from; \ No newline at end of file diff --git a/reverse_engineering/node_modules/readable-stream/lib/internal/streams/pipeline.js b/reverse_engineering/node_modules/readable-stream/lib/internal/streams/pipeline.js deleted file mode 100644 index 6589909..0000000 --- a/reverse_engineering/node_modules/readable-stream/lib/internal/streams/pipeline.js +++ /dev/null @@ -1,97 +0,0 @@ -// Ported from https://github.com/mafintosh/pump with -// permission from the author, Mathias Buus (@mafintosh). -'use strict'; - -var eos; - -function once(callback) { - var called = false; - return function () { - if (called) return; - called = true; - callback.apply(void 0, arguments); - }; -} - -var _require$codes = require('../../../errors').codes, - ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS, - ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED; - -function noop(err) { - // Rethrow the error if it exists to avoid swallowing it - if (err) throw err; -} - -function isRequest(stream) { - return stream.setHeader && typeof stream.abort === 'function'; -} - -function destroyer(stream, reading, writing, callback) { - callback = once(callback); - var closed = false; - stream.on('close', function () { - closed = true; - }); - if (eos === undefined) eos = require('./end-of-stream'); - eos(stream, { - readable: reading, - writable: writing - }, function (err) { - if (err) return callback(err); - closed = true; - callback(); - }); - var destroyed = false; - return function (err) { - if (closed) return; - if (destroyed) return; - destroyed = true; // request.destroy just do .end - .abort is what we want - - if (isRequest(stream)) return stream.abort(); - if (typeof stream.destroy === 'function') return stream.destroy(); - callback(err || new ERR_STREAM_DESTROYED('pipe')); - }; -} - -function call(fn) { - fn(); -} - -function pipe(from, to) { - return from.pipe(to); -} - -function popCallback(streams) { - if (!streams.length) return noop; - if (typeof streams[streams.length - 1] !== 'function') return noop; - return streams.pop(); -} - -function pipeline() { - for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) { - streams[_key] = arguments[_key]; - } - - var callback = popCallback(streams); - if (Array.isArray(streams[0])) streams = streams[0]; - - if (streams.length < 2) { - throw new ERR_MISSING_ARGS('streams'); - } - - var error; - var destroys = streams.map(function (stream, i) { - var reading = i < streams.length - 1; - var writing = i > 0; - return destroyer(stream, reading, writing, function (err) { - if (!error) error = err; - if (err) destroys.forEach(call); - if (reading) return; - destroys.forEach(call); - callback(error); - }); - }); - return streams.reduce(pipe); -} - -module.exports = pipeline; \ No newline at end of file diff --git a/reverse_engineering/node_modules/readable-stream/lib/internal/streams/state.js b/reverse_engineering/node_modules/readable-stream/lib/internal/streams/state.js deleted file mode 100644 index 19887eb..0000000 --- a/reverse_engineering/node_modules/readable-stream/lib/internal/streams/state.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -var ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE; - -function highWaterMarkFrom(options, isDuplex, duplexKey) { - return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null; -} - -function getHighWaterMark(state, options, duplexKey, isDuplex) { - var hwm = highWaterMarkFrom(options, isDuplex, duplexKey); - - if (hwm != null) { - if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) { - var name = isDuplex ? duplexKey : 'highWaterMark'; - throw new ERR_INVALID_OPT_VALUE(name, hwm); - } - - return Math.floor(hwm); - } // Default value - - - return state.objectMode ? 16 : 16 * 1024; -} - -module.exports = { - getHighWaterMark: getHighWaterMark -}; \ No newline at end of file diff --git a/reverse_engineering/node_modules/readable-stream/lib/internal/streams/stream-browser.js b/reverse_engineering/node_modules/readable-stream/lib/internal/streams/stream-browser.js deleted file mode 100644 index 9332a3f..0000000 --- a/reverse_engineering/node_modules/readable-stream/lib/internal/streams/stream-browser.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('events').EventEmitter; diff --git a/reverse_engineering/node_modules/readable-stream/lib/internal/streams/stream.js b/reverse_engineering/node_modules/readable-stream/lib/internal/streams/stream.js deleted file mode 100644 index ce2ad5b..0000000 --- a/reverse_engineering/node_modules/readable-stream/lib/internal/streams/stream.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('stream'); diff --git a/reverse_engineering/node_modules/readable-stream/package.json b/reverse_engineering/node_modules/readable-stream/package.json deleted file mode 100644 index 9025115..0000000 --- a/reverse_engineering/node_modules/readable-stream/package.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "_from": "readable-stream@^3.1.1", - "_id": "readable-stream@3.6.0", - "_inBundle": false, - "_integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "_location": "/readable-stream", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "readable-stream@^3.1.1", - "name": "readable-stream", - "escapedName": "readable-stream", - "rawSpec": "^3.1.1", - "saveSpec": null, - "fetchSpec": "^3.1.1" - }, - "_requiredBy": [ - "/duplexify" - ], - "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "_shasum": "337bbda3adc0706bd3e024426a286d4b4b2c9198", - "_spec": "readable-stream@^3.1.1", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/duplexify", - "browser": { - "util": false, - "worker_threads": false, - "./errors": "./errors-browser.js", - "./readable.js": "./readable-browser.js", - "./lib/internal/streams/from.js": "./lib/internal/streams/from-browser.js", - "./lib/internal/streams/stream.js": "./lib/internal/streams/stream-browser.js" - }, - "bugs": { - "url": "https://github.com/nodejs/readable-stream/issues" - }, - "bundleDependencies": false, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "deprecated": false, - "description": "Streams3, a user-land copy of the stream library from Node.js", - "devDependencies": { - "@babel/cli": "^7.2.0", - "@babel/core": "^7.2.0", - "@babel/polyfill": "^7.0.0", - "@babel/preset-env": "^7.2.0", - "airtap": "0.0.9", - "assert": "^1.4.0", - "bl": "^2.0.0", - "deep-strict-equal": "^0.2.0", - "events.once": "^2.0.2", - "glob": "^7.1.2", - "gunzip-maybe": "^1.4.1", - "hyperquest": "^2.1.3", - "lolex": "^2.6.0", - "nyc": "^11.0.0", - "pump": "^3.0.0", - "rimraf": "^2.6.2", - "tap": "^12.0.0", - "tape": "^4.9.0", - "tar-fs": "^1.16.2", - "util-promisify": "^2.1.0" - }, - "engines": { - "node": ">= 6" - }, - "homepage": "https://github.com/nodejs/readable-stream#readme", - "keywords": [ - "readable", - "stream", - "pipe" - ], - "license": "MIT", - "main": "readable.js", - "name": "readable-stream", - "nyc": { - "include": [ - "lib/**.js" - ] - }, - "repository": { - "type": "git", - "url": "git://github.com/nodejs/readable-stream.git" - }, - "scripts": { - "ci": "TAP=1 tap --no-esm test/parallel/*.js test/ours/*.js | tee test.tap", - "cover": "nyc npm test", - "report": "nyc report --reporter=lcov", - "test": "tap -J --no-esm test/parallel/*.js test/ours/*.js", - "test-browser-local": "airtap --open --local -- test/browser.js", - "test-browsers": "airtap --sauce-connect --loopback airtap.local -- test/browser.js", - "update-browser-errors": "babel -o errors-browser.js errors.js" - }, - "version": "3.6.0" -} diff --git a/reverse_engineering/node_modules/readable-stream/readable-browser.js b/reverse_engineering/node_modules/readable-stream/readable-browser.js deleted file mode 100644 index adbf60d..0000000 --- a/reverse_engineering/node_modules/readable-stream/readable-browser.js +++ /dev/null @@ -1,9 +0,0 @@ -exports = module.exports = require('./lib/_stream_readable.js'); -exports.Stream = exports; -exports.Readable = exports; -exports.Writable = require('./lib/_stream_writable.js'); -exports.Duplex = require('./lib/_stream_duplex.js'); -exports.Transform = require('./lib/_stream_transform.js'); -exports.PassThrough = require('./lib/_stream_passthrough.js'); -exports.finished = require('./lib/internal/streams/end-of-stream.js'); -exports.pipeline = require('./lib/internal/streams/pipeline.js'); diff --git a/reverse_engineering/node_modules/readable-stream/readable.js b/reverse_engineering/node_modules/readable-stream/readable.js deleted file mode 100644 index 9e0ca12..0000000 --- a/reverse_engineering/node_modules/readable-stream/readable.js +++ /dev/null @@ -1,16 +0,0 @@ -var Stream = require('stream'); -if (process.env.READABLE_STREAM === 'disable' && Stream) { - module.exports = Stream.Readable; - Object.assign(module.exports, Stream); - module.exports.Stream = Stream; -} else { - exports = module.exports = require('./lib/_stream_readable.js'); - exports.Stream = Stream || exports; - exports.Readable = exports; - exports.Writable = require('./lib/_stream_writable.js'); - exports.Duplex = require('./lib/_stream_duplex.js'); - exports.Transform = require('./lib/_stream_transform.js'); - exports.PassThrough = require('./lib/_stream_passthrough.js'); - exports.finished = require('./lib/internal/streams/end-of-stream.js'); - exports.pipeline = require('./lib/internal/streams/pipeline.js'); -} diff --git a/reverse_engineering/node_modules/retry-request/index.d.ts b/reverse_engineering/node_modules/retry-request/index.d.ts deleted file mode 100644 index d9d1511..0000000 --- a/reverse_engineering/node_modules/retry-request/index.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -declare module 'retry-request' { - import * as request from 'request'; - - namespace retryRequest { - function getNextRetryDelay(retryNumber: number): void; - interface Options { - objectMode?: boolean, - request?: typeof request, - retries?: number, - noResponseRetries?: number, - currentRetryAttempt?: number, - maxRetryDelay?: number, - retryDelayMultiplier?: number, - totalTimeout?: number, - shouldRetryFn?: (response: request.RequestResponse) => boolean - } - } - - function retryRequest(requestOpts: request.Options, opts: retryRequest.Options, callback?: request.RequestCallback) - : { abort: () => void }; - function retryRequest(requestOpts: request.Options, callback?: request.RequestCallback) - : { abort: () => void }; - - export = retryRequest; -} diff --git a/reverse_engineering/node_modules/retry-request/index.js b/reverse_engineering/node_modules/retry-request/index.js deleted file mode 100644 index 6cd6f65..0000000 --- a/reverse_engineering/node_modules/retry-request/index.js +++ /dev/null @@ -1,255 +0,0 @@ -'use strict'; - -var { PassThrough } = require('stream'); -var debug = require('debug')('retry-request'); -var extend = require('extend'); - -var DEFAULTS = { - objectMode: false, - retries: 2, - - /* - The maximum time to delay in seconds. If retryDelayMultiplier results in a - delay greater than maxRetryDelay, retries should delay by maxRetryDelay - seconds instead. - */ - maxRetryDelay: 64, - - /* - The multiplier by which to increase the delay time between the completion of - failed requests, and the initiation of the subsequent retrying request. - */ - retryDelayMultiplier: 2, - - /* - The length of time to keep retrying in seconds. The last sleep period will - be shortened as necessary, so that the last retry runs at deadline (and not - considerably beyond it). The total time starting from when the initial - request is sent, after which an error will be returned, regardless of the - retrying attempts made meanwhile. - */ - totalTimeout: 600, - - noResponseRetries: 2, - currentRetryAttempt: 0, - shouldRetryFn: function (response) { - var retryRanges = [ - // https://en.wikipedia.org/wiki/List_of_HTTP_status_codes - // 1xx - Retry (Informational, request still processing) - // 2xx - Do not retry (Success) - // 3xx - Do not retry (Redirect) - // 4xx - Do not retry (Client errors) - // 429 - Retry ("Too Many Requests") - // 5xx - Retry (Server errors) - [100, 199], - [429, 429], - [500, 599] - ]; - - var statusCode = response.statusCode; - debug(`Response status: ${statusCode}`); - - var range; - while ((range = retryRanges.shift())) { - if (statusCode >= range[0] && statusCode <= range[1]) { - // Not a successful status or redirect. - return true; - } - } - } -}; - -function retryRequest(requestOpts, opts, callback) { - var streamMode = typeof arguments[arguments.length - 1] !== 'function'; - - if (typeof opts === 'function') { - callback = opts; - } - - var manualCurrentRetryAttemptWasSet = opts && typeof opts.currentRetryAttempt === 'number'; - opts = extend({}, DEFAULTS, opts); - - if (typeof opts.request === 'undefined') { - try { - opts.request = require('request'); - } catch (e) { - throw new Error('A request library must be provided to retry-request.'); - } - } - - var currentRetryAttempt = opts.currentRetryAttempt; - - var numNoResponseAttempts = 0; - var streamResponseHandled = false; - - var retryStream; - var requestStream; - var delayStream; - - var activeRequest; - var retryRequest = { - abort: function () { - if (activeRequest && activeRequest.abort) { - activeRequest.abort(); - } - } - }; - - if (streamMode) { - retryStream = new PassThrough({ objectMode: opts.objectMode }); - retryStream.abort = resetStreams; - } - - var timeOfFirstRequest = Date.now(); - if (currentRetryAttempt > 0) { - retryAfterDelay(currentRetryAttempt); - } else { - makeRequest(); - } - - if (streamMode) { - return retryStream; - } else { - return retryRequest; - } - - function resetStreams() { - delayStream = null; - - if (requestStream) { - requestStream.abort && requestStream.abort(); - requestStream.cancel && requestStream.cancel(); - - if (requestStream.destroy) { - requestStream.destroy(); - } else if (requestStream.end) { - requestStream.end(); - } - } - } - - function makeRequest() { - currentRetryAttempt++; - debug(`Current retry attempt: ${currentRetryAttempt}`); - - if (streamMode) { - streamResponseHandled = false; - - delayStream = new PassThrough({ objectMode: opts.objectMode }); - requestStream = opts.request(requestOpts); - - setImmediate(function () { - retryStream.emit('request'); - }); - - requestStream - // gRPC via google-cloud-node can emit an `error` as well as a `response` - // Whichever it emits, we run with-- we can't run with both. That's what - // is up with the `streamResponseHandled` tracking. - .on('error', function (err) { - if (streamResponseHandled) { - return; - } - - streamResponseHandled = true; - onResponse(err); - }) - .on('response', function (resp, body) { - if (streamResponseHandled) { - return; - } - - streamResponseHandled = true; - onResponse(null, resp, body); - }) - .on('complete', retryStream.emit.bind(retryStream, 'complete')); - - requestStream.pipe(delayStream); - } else { - activeRequest = opts.request(requestOpts, onResponse); - } - } - - function retryAfterDelay(currentRetryAttempt) { - if (streamMode) { - resetStreams(); - } - - var nextRetryDelay = getNextRetryDelay({ - maxRetryDelay: opts.maxRetryDelay, - retryDelayMultiplier: opts.retryDelayMultiplier, - retryNumber: currentRetryAttempt, - timeOfFirstRequest, - totalTimeout: opts.totalTimeout, - }); - debug(`Next retry delay: ${nextRetryDelay}`); - - setTimeout(makeRequest, nextRetryDelay); - } - - function onResponse(err, response, body) { - // An error such as DNS resolution. - if (err) { - numNoResponseAttempts++; - - if (numNoResponseAttempts <= opts.noResponseRetries) { - retryAfterDelay(numNoResponseAttempts); - } else { - if (streamMode) { - retryStream.emit('error', err); - retryStream.end(); - } else { - callback(err, response, body); - } - } - - return; - } - - // Send the response to see if we should try again. - // NOTE: "currentRetryAttempt" isn't accurate by default, as it counts - // the very first request sent as the first "retry". It is only accurate - // when a user provides their own "currentRetryAttempt" option at - // instantiation. - var adjustedCurrentRetryAttempt = manualCurrentRetryAttemptWasSet ? currentRetryAttempt : currentRetryAttempt - 1; - if (adjustedCurrentRetryAttempt < opts.retries && opts.shouldRetryFn(response)) { - retryAfterDelay(currentRetryAttempt); - return; - } - - // No more attempts need to be made, just continue on. - if (streamMode) { - retryStream.emit('response', response); - delayStream.pipe(retryStream); - requestStream.on('error', function (err) { - retryStream.destroy(err); - }); - } else { - callback(err, response, body); - } - } -} - -module.exports = retryRequest; - -function getNextRetryDelay(config) { - var { - maxRetryDelay, - retryDelayMultiplier, - retryNumber, - timeOfFirstRequest, - totalTimeout, - } = config; - - var maxRetryDelayMs = maxRetryDelay * 1000; - var totalTimeoutMs = totalTimeout * 1000; - - var jitter = Math.floor(Math.random() * 1000); - var calculatedNextRetryDelay = Math.pow(retryDelayMultiplier, retryNumber) * 1000 + jitter; - - var maxAllowableDelayMs = totalTimeoutMs - (Date.now() - timeOfFirstRequest); - - return Math.min(calculatedNextRetryDelay, maxAllowableDelayMs, maxRetryDelayMs); -} - -module.exports.getNextRetryDelay = getNextRetryDelay; diff --git a/reverse_engineering/node_modules/retry-request/license b/reverse_engineering/node_modules/retry-request/license deleted file mode 100644 index df6eeb5..0000000 --- a/reverse_engineering/node_modules/retry-request/license +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Stephen Sawchuk - -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/reverse_engineering/node_modules/retry-request/package.json b/reverse_engineering/node_modules/retry-request/package.json deleted file mode 100644 index 18d826a..0000000 --- a/reverse_engineering/node_modules/retry-request/package.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "_from": "retry-request@^4.2.2", - "_id": "retry-request@4.2.2", - "_inBundle": false, - "_integrity": "sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==", - "_location": "/retry-request", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "retry-request@^4.2.2", - "name": "retry-request", - "escapedName": "retry-request", - "rawSpec": "^4.2.2", - "saveSpec": null, - "fetchSpec": "^4.2.2" - }, - "_requiredBy": [ - "/@google-cloud/common" - ], - "_resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz", - "_shasum": "b7d82210b6d2651ed249ba3497f07ea602f1a903", - "_spec": "retry-request@^4.2.2", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/@google-cloud/common", - "author": { - "name": "Stephen Sawchuk", - "email": "sawchuk@gmail.com" - }, - "bugs": { - "url": "https://github.com/stephenplusplus/retry-request/issues" - }, - "bundleDependencies": false, - "dependencies": { - "debug": "^4.1.1", - "extend": "^3.0.2" - }, - "deprecated": false, - "description": "Retry a request.", - "devDependencies": { - "async": "^3.0.1", - "lodash.range": "^3.2.0", - "mocha": "^6.1.4", - "request": "^2.87.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "files": [ - "index.js", - "index.d.ts", - "license" - ], - "homepage": "https://github.com/stephenplusplus/retry-request#readme", - "keywords": [ - "request", - "retry", - "stream" - ], - "license": "MIT", - "main": "index.js", - "name": "retry-request", - "repository": { - "type": "git", - "url": "git+https://github.com/stephenplusplus/retry-request.git" - }, - "scripts": { - "test": "mocha --timeout 0" - }, - "types": "index.d.ts", - "version": "4.2.2" -} diff --git a/reverse_engineering/node_modules/retry-request/readme.md b/reverse_engineering/node_modules/retry-request/readme.md deleted file mode 100644 index 8c5beda..0000000 --- a/reverse_engineering/node_modules/retry-request/readme.md +++ /dev/null @@ -1,199 +0,0 @@ -|![retry-request](logo.png) -|:-: -|Retry a [request][request] with built-in [exponential backoff](https://developers.google.com/analytics/devguides/reporting/core/v3/coreErrors#backoff). - -```sh -$ npm install --save request -$ npm install --save retry-request -``` -```js -var request = require('retry-request', { - request: require('request') -}); -``` - -It should work the same as `request` in both callback mode and stream mode. - -Note: This module only works when used as a readable stream, i.e. POST requests aren't supported ([#3](https://github.com/stephenplusplus/retry-request/issues/3)). - -## Do I need to install `request`? - -Yes! You must independently install `request` and provide it to this library: - -```js -var request = require('retry-request', { - request: require('request') -}); -``` - -*The code will actually look for the `request` module automatically to save you this step. But, being explicit like in the example is also welcome.* - -#### Callback - -`urlThatReturns503` will be requested 3 total times before giving up and executing the callback. - -```js -request(urlThatReturns503, function (err, resp, body) {}); -``` - -#### Stream - -`urlThatReturns503` will be requested 3 total times before giving up and emitting the `response` and `complete` event as usual. - -```js -request(urlThatReturns503) - .on('error', function () {}) - .on('response', function () {}) - .on('complete', function () {}); -``` - -## Can I monitor what retry-request is doing internally? - -Yes! This project uses [debug](https://www.npmjs.com/package/debug) to provide the current retry attempt, each response status, and the delay computed until the next retry attempt is made. To enable the debug mode, set the environment variable `DEBUG` to *retry-request*. - -(Thanks for the implementation, @yihaozhadan!) - -## request(requestOptions, [opts], [cb]) - -### requestOptions - -Passed directly to `request`. See the list of options supported: https://github.com/request/request/#requestoptions-callback. - -### opts *(optional)* - -#### `opts.noResponseRetries` - -Type: `Number` - -Default: `2` - -The number of times to retry after a response fails to come through, such as a DNS resolution error or a socket hangup. - -```js -var opts = { - noResponseRetries: 0 -}; - -request(url, opts, function (err, resp, body) { - // url was requested 1 time before giving up and - // executing this callback. -}); -``` - -#### `opts.objectMode` - -Type: `Boolean` - -Default: `false` - -Set to `true` if your custom `opts.request` function returns a stream in object mode. - -#### `opts.retries` - -Type: `Number` - -Default: `2` - -```js -var opts = { - retries: 4 -}; - -request(urlThatReturns503, opts, function (err, resp, body) { - // urlThatReturns503 was requested a total of 5 times - // before giving up and executing this callback. -}); -``` - -#### `opts.currentRetryAttempt` - -Type: `Number` - -Default: `0` - -```js -var opts = { - currentRetryAttempt: 1 -}; - -request(urlThatReturns503, opts, function (err, resp, body) { - // urlThatReturns503 was requested as if it already failed once. -}); -``` - -#### `opts.shouldRetryFn` - -Type: `Function` - -Default: Returns `true` if [http.incomingMessage](https://nodejs.org/api/http.html#http_http_incomingmessage).statusCode is < 200 or >= 400. - -```js -var opts = { - shouldRetryFn: function (incomingHttpMessage) { - return incomingHttpMessage.statusMessage !== 'OK'; - } -}; - -request(urlThatReturnsNonOKStatusMessage, opts, function (err, resp, body) { - // urlThatReturnsNonOKStatusMessage was requested a - // total of 3 times, each time using `opts.shouldRetryFn` - // to decide if it should continue before giving up and - // executing this callback. -}); -``` - -#### `opts.request` - -Type: `Function` - -Default: `try { require('request') }` - -If we cannot locate `request`, we will throw an error advising you to provide it explicitly. - -*NOTE: If you override the request function, and it returns a stream in object mode, be sure to set `opts.objectMode` to `true`.* - -```js -var originalRequest = require('request').defaults({ - pool: { - maxSockets: Infinity - } -}); - -var opts = { - request: originalRequest -}; - -request(urlThatReturns503, opts, function (err, resp, body) { - // Your provided `originalRequest` instance was used. -}); -``` - -#### `opts.maxRetryDelay` - -Type: `Number` - -Default: `64` - -The maximum time to delay in seconds. If retryDelayMultiplier results in a delay greater than maxRetryDelay, retries should delay by maxRetryDelay seconds instead. - -#### `opts.retryDelayMultiplier` - -Type: `Number` - -Default: `2` - -The multiplier by which to increase the delay time between the completion of failed requests, and the initiation of the subsequent retrying request. - -#### `opts.totalTimeout` - -Type: `Number` - -Default: `600` - -The length of time to keep retrying in seconds. The last sleep period will be shortened as necessary, so that the last retry runs at deadline (and not considerably beyond it). The total time starting from when the initial request is sent, after which an error will be returned, regardless of the retrying attempts made meanwhile. - -### cb *(optional)* - -Passed directly to `request`. See the callback section: https://github.com/request/request/#requestoptions-callback. - -[request]: https://github.com/request/request diff --git a/reverse_engineering/node_modules/safe-buffer/LICENSE b/reverse_engineering/node_modules/safe-buffer/LICENSE deleted file mode 100644 index 0c068ce..0000000 --- a/reverse_engineering/node_modules/safe-buffer/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Feross Aboukhadijeh - -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/reverse_engineering/node_modules/safe-buffer/README.md b/reverse_engineering/node_modules/safe-buffer/README.md deleted file mode 100644 index e9a81af..0000000 --- a/reverse_engineering/node_modules/safe-buffer/README.md +++ /dev/null @@ -1,584 +0,0 @@ -# safe-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url] - -[travis-image]: https://img.shields.io/travis/feross/safe-buffer/master.svg -[travis-url]: https://travis-ci.org/feross/safe-buffer -[npm-image]: https://img.shields.io/npm/v/safe-buffer.svg -[npm-url]: https://npmjs.org/package/safe-buffer -[downloads-image]: https://img.shields.io/npm/dm/safe-buffer.svg -[downloads-url]: https://npmjs.org/package/safe-buffer -[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg -[standard-url]: https://standardjs.com - -#### Safer Node.js Buffer API - -**Use the new Node.js Buffer APIs (`Buffer.from`, `Buffer.alloc`, -`Buffer.allocUnsafe`, `Buffer.allocUnsafeSlow`) in all versions of Node.js.** - -**Uses the built-in implementation when available.** - -## install - -``` -npm install safe-buffer -``` - -## usage - -The goal of this package is to provide a safe replacement for the node.js `Buffer`. - -It's a drop-in replacement for `Buffer`. You can use it by adding one `require` line to -the top of your node.js modules: - -```js -var Buffer = require('safe-buffer').Buffer - -// Existing buffer code will continue to work without issues: - -new Buffer('hey', 'utf8') -new Buffer([1, 2, 3], 'utf8') -new Buffer(obj) -new Buffer(16) // create an uninitialized buffer (potentially unsafe) - -// But you can use these new explicit APIs to make clear what you want: - -Buffer.from('hey', 'utf8') // convert from many types to a Buffer -Buffer.alloc(16) // create a zero-filled buffer (safe) -Buffer.allocUnsafe(16) // create an uninitialized buffer (potentially unsafe) -``` - -## api - -### Class Method: Buffer.from(array) - - -* `array` {Array} - -Allocates a new `Buffer` using an `array` of octets. - -```js -const buf = Buffer.from([0x62,0x75,0x66,0x66,0x65,0x72]); - // creates a new Buffer containing ASCII bytes - // ['b','u','f','f','e','r'] -``` - -A `TypeError` will be thrown if `array` is not an `Array`. - -### Class Method: Buffer.from(arrayBuffer[, byteOffset[, length]]) - - -* `arrayBuffer` {ArrayBuffer} The `.buffer` property of a `TypedArray` or - a `new ArrayBuffer()` -* `byteOffset` {Number} Default: `0` -* `length` {Number} Default: `arrayBuffer.length - byteOffset` - -When passed a reference to the `.buffer` property of a `TypedArray` instance, -the newly created `Buffer` will share the same allocated memory as the -TypedArray. - -```js -const arr = new Uint16Array(2); -arr[0] = 5000; -arr[1] = 4000; - -const buf = Buffer.from(arr.buffer); // shares the memory with arr; - -console.log(buf); - // Prints: - -// changing the TypedArray changes the Buffer also -arr[1] = 6000; - -console.log(buf); - // Prints: -``` - -The optional `byteOffset` and `length` arguments specify a memory range within -the `arrayBuffer` that will be shared by the `Buffer`. - -```js -const ab = new ArrayBuffer(10); -const buf = Buffer.from(ab, 0, 2); -console.log(buf.length); - // Prints: 2 -``` - -A `TypeError` will be thrown if `arrayBuffer` is not an `ArrayBuffer`. - -### Class Method: Buffer.from(buffer) - - -* `buffer` {Buffer} - -Copies the passed `buffer` data onto a new `Buffer` instance. - -```js -const buf1 = Buffer.from('buffer'); -const buf2 = Buffer.from(buf1); - -buf1[0] = 0x61; -console.log(buf1.toString()); - // 'auffer' -console.log(buf2.toString()); - // 'buffer' (copy is not changed) -``` - -A `TypeError` will be thrown if `buffer` is not a `Buffer`. - -### Class Method: Buffer.from(str[, encoding]) - - -* `str` {String} String to encode. -* `encoding` {String} Encoding to use, Default: `'utf8'` - -Creates a new `Buffer` containing the given JavaScript string `str`. If -provided, the `encoding` parameter identifies the character encoding. -If not provided, `encoding` defaults to `'utf8'`. - -```js -const buf1 = Buffer.from('this is a tést'); -console.log(buf1.toString()); - // prints: this is a tést -console.log(buf1.toString('ascii')); - // prints: this is a tC)st - -const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex'); -console.log(buf2.toString()); - // prints: this is a tést -``` - -A `TypeError` will be thrown if `str` is not a string. - -### Class Method: Buffer.alloc(size[, fill[, encoding]]) - - -* `size` {Number} -* `fill` {Value} Default: `undefined` -* `encoding` {String} Default: `utf8` - -Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the -`Buffer` will be *zero-filled*. - -```js -const buf = Buffer.alloc(5); -console.log(buf); - // -``` - -The `size` must be less than or equal to the value of -`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is -`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will -be created if a `size` less than or equal to 0 is specified. - -If `fill` is specified, the allocated `Buffer` will be initialized by calling -`buf.fill(fill)`. See [`buf.fill()`][] for more information. - -```js -const buf = Buffer.alloc(5, 'a'); -console.log(buf); - // -``` - -If both `fill` and `encoding` are specified, the allocated `Buffer` will be -initialized by calling `buf.fill(fill, encoding)`. For example: - -```js -const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64'); -console.log(buf); - // -``` - -Calling `Buffer.alloc(size)` can be significantly slower than the alternative -`Buffer.allocUnsafe(size)` but ensures that the newly created `Buffer` instance -contents will *never contain sensitive data*. - -A `TypeError` will be thrown if `size` is not a number. - -### Class Method: Buffer.allocUnsafe(size) - - -* `size` {Number} - -Allocates a new *non-zero-filled* `Buffer` of `size` bytes. The `size` must -be less than or equal to the value of `require('buffer').kMaxLength` (on 64-bit -architectures, `kMaxLength` is `(2^31)-1`). Otherwise, a [`RangeError`][] is -thrown. A zero-length Buffer will be created if a `size` less than or equal to -0 is specified. - -The underlying memory for `Buffer` instances created in this way is *not -initialized*. The contents of the newly created `Buffer` are unknown and -*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such -`Buffer` instances to zeroes. - -```js -const buf = Buffer.allocUnsafe(5); -console.log(buf); - // - // (octets will be different, every time) -buf.fill(0); -console.log(buf); - // -``` - -A `TypeError` will be thrown if `size` is not a number. - -Note that the `Buffer` module pre-allocates an internal `Buffer` instance of -size `Buffer.poolSize` that is used as a pool for the fast allocation of new -`Buffer` instances created using `Buffer.allocUnsafe(size)` (and the deprecated -`new Buffer(size)` constructor) only when `size` is less than or equal to -`Buffer.poolSize >> 1` (floor of `Buffer.poolSize` divided by two). The default -value of `Buffer.poolSize` is `8192` but can be modified. - -Use of this pre-allocated internal memory pool is a key difference between -calling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`. -Specifically, `Buffer.alloc(size, fill)` will *never* use the internal Buffer -pool, while `Buffer.allocUnsafe(size).fill(fill)` *will* use the internal -Buffer pool if `size` is less than or equal to half `Buffer.poolSize`. The -difference is subtle but can be important when an application requires the -additional performance that `Buffer.allocUnsafe(size)` provides. - -### Class Method: Buffer.allocUnsafeSlow(size) - - -* `size` {Number} - -Allocates a new *non-zero-filled* and non-pooled `Buffer` of `size` bytes. The -`size` must be less than or equal to the value of -`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is -`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will -be created if a `size` less than or equal to 0 is specified. - -The underlying memory for `Buffer` instances created in this way is *not -initialized*. The contents of the newly created `Buffer` are unknown and -*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such -`Buffer` instances to zeroes. - -When using `Buffer.allocUnsafe()` to allocate new `Buffer` instances, -allocations under 4KB are, by default, sliced from a single pre-allocated -`Buffer`. This allows applications to avoid the garbage collection overhead of -creating many individually allocated Buffers. This approach improves both -performance and memory usage by eliminating the need to track and cleanup as -many `Persistent` objects. - -However, in the case where a developer may need to retain a small chunk of -memory from a pool for an indeterminate amount of time, it may be appropriate -to create an un-pooled Buffer instance using `Buffer.allocUnsafeSlow()` then -copy out the relevant bits. - -```js -// need to keep around a few small chunks of memory -const store = []; - -socket.on('readable', () => { - const data = socket.read(); - // allocate for retained data - const sb = Buffer.allocUnsafeSlow(10); - // copy the data into the new allocation - data.copy(sb, 0, 0, 10); - store.push(sb); -}); -``` - -Use of `Buffer.allocUnsafeSlow()` should be used only as a last resort *after* -a developer has observed undue memory retention in their applications. - -A `TypeError` will be thrown if `size` is not a number. - -### All the Rest - -The rest of the `Buffer` API is exactly the same as in node.js. -[See the docs](https://nodejs.org/api/buffer.html). - - -## Related links - -- [Node.js issue: Buffer(number) is unsafe](https://github.com/nodejs/node/issues/4660) -- [Node.js Enhancement Proposal: Buffer.from/Buffer.alloc/Buffer.zalloc/Buffer() soft-deprecate](https://github.com/nodejs/node-eps/pull/4) - -## Why is `Buffer` unsafe? - -Today, the node.js `Buffer` constructor is overloaded to handle many different argument -types like `String`, `Array`, `Object`, `TypedArrayView` (`Uint8Array`, etc.), -`ArrayBuffer`, and also `Number`. - -The API is optimized for convenience: you can throw any type at it, and it will try to do -what you want. - -Because the Buffer constructor is so powerful, you often see code like this: - -```js -// Convert UTF-8 strings to hex -function toHex (str) { - return new Buffer(str).toString('hex') -} -``` - -***But what happens if `toHex` is called with a `Number` argument?*** - -### Remote Memory Disclosure - -If an attacker can make your program call the `Buffer` constructor with a `Number` -argument, then they can make it allocate uninitialized memory from the node.js process. -This could potentially disclose TLS private keys, user data, or database passwords. - -When the `Buffer` constructor is passed a `Number` argument, it returns an -**UNINITIALIZED** block of memory of the specified `size`. When you create a `Buffer` like -this, you **MUST** overwrite the contents before returning it to the user. - -From the [node.js docs](https://nodejs.org/api/buffer.html#buffer_new_buffer_size): - -> `new Buffer(size)` -> -> - `size` Number -> -> The underlying memory for `Buffer` instances created in this way is not initialized. -> **The contents of a newly created `Buffer` are unknown and could contain sensitive -> data.** Use `buf.fill(0)` to initialize a Buffer to zeroes. - -(Emphasis our own.) - -Whenever the programmer intended to create an uninitialized `Buffer` you often see code -like this: - -```js -var buf = new Buffer(16) - -// Immediately overwrite the uninitialized buffer with data from another buffer -for (var i = 0; i < buf.length; i++) { - buf[i] = otherBuf[i] -} -``` - - -### Would this ever be a problem in real code? - -Yes. It's surprisingly common to forget to check the type of your variables in a -dynamically-typed language like JavaScript. - -Usually the consequences of assuming the wrong type is that your program crashes with an -uncaught exception. But the failure mode for forgetting to check the type of arguments to -the `Buffer` constructor is more catastrophic. - -Here's an example of a vulnerable service that takes a JSON payload and converts it to -hex: - -```js -// Take a JSON payload {str: "some string"} and convert it to hex -var server = http.createServer(function (req, res) { - var data = '' - req.setEncoding('utf8') - req.on('data', function (chunk) { - data += chunk - }) - req.on('end', function () { - var body = JSON.parse(data) - res.end(new Buffer(body.str).toString('hex')) - }) -}) - -server.listen(8080) -``` - -In this example, an http client just has to send: - -```json -{ - "str": 1000 -} -``` - -and it will get back 1,000 bytes of uninitialized memory from the server. - -This is a very serious bug. It's similar in severity to the -[the Heartbleed bug](http://heartbleed.com/) that allowed disclosure of OpenSSL process -memory by remote attackers. - - -### Which real-world packages were vulnerable? - -#### [`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht) - -[Mathias Buus](https://github.com/mafintosh) and I -([Feross Aboukhadijeh](http://feross.org/)) found this issue in one of our own packages, -[`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht). The bug would allow -anyone on the internet to send a series of messages to a user of `bittorrent-dht` and get -them to reveal 20 bytes at a time of uninitialized memory from the node.js process. - -Here's -[the commit](https://github.com/feross/bittorrent-dht/commit/6c7da04025d5633699800a99ec3fbadf70ad35b8) -that fixed it. We released a new fixed version, created a -[Node Security Project disclosure](https://nodesecurity.io/advisories/68), and deprecated all -vulnerable versions on npm so users will get a warning to upgrade to a newer version. - -#### [`ws`](https://www.npmjs.com/package/ws) - -That got us wondering if there were other vulnerable packages. Sure enough, within a short -period of time, we found the same issue in [`ws`](https://www.npmjs.com/package/ws), the -most popular WebSocket implementation in node.js. - -If certain APIs were called with `Number` parameters instead of `String` or `Buffer` as -expected, then uninitialized server memory would be disclosed to the remote peer. - -These were the vulnerable methods: - -```js -socket.send(number) -socket.ping(number) -socket.pong(number) -``` - -Here's a vulnerable socket server with some echo functionality: - -```js -server.on('connection', function (socket) { - socket.on('message', function (message) { - message = JSON.parse(message) - if (message.type === 'echo') { - socket.send(message.data) // send back the user's message - } - }) -}) -``` - -`socket.send(number)` called on the server, will disclose server memory. - -Here's [the release](https://github.com/websockets/ws/releases/tag/1.0.1) where the issue -was fixed, with a more detailed explanation. Props to -[Arnout Kazemier](https://github.com/3rd-Eden) for the quick fix. Here's the -[Node Security Project disclosure](https://nodesecurity.io/advisories/67). - - -### What's the solution? - -It's important that node.js offers a fast way to get memory otherwise performance-critical -applications would needlessly get a lot slower. - -But we need a better way to *signal our intent* as programmers. **When we want -uninitialized memory, we should request it explicitly.** - -Sensitive functionality should not be packed into a developer-friendly API that loosely -accepts many different types. This type of API encourages the lazy practice of passing -variables in without checking the type very carefully. - -#### A new API: `Buffer.allocUnsafe(number)` - -The functionality of creating buffers with uninitialized memory should be part of another -API. We propose `Buffer.allocUnsafe(number)`. This way, it's not part of an API that -frequently gets user input of all sorts of different types passed into it. - -```js -var buf = Buffer.allocUnsafe(16) // careful, uninitialized memory! - -// Immediately overwrite the uninitialized buffer with data from another buffer -for (var i = 0; i < buf.length; i++) { - buf[i] = otherBuf[i] -} -``` - - -### How do we fix node.js core? - -We sent [a PR to node.js core](https://github.com/nodejs/node/pull/4514) (merged as -`semver-major`) which defends against one case: - -```js -var str = 16 -new Buffer(str, 'utf8') -``` - -In this situation, it's implied that the programmer intended the first argument to be a -string, since they passed an encoding as a second argument. Today, node.js will allocate -uninitialized memory in the case of `new Buffer(number, encoding)`, which is probably not -what the programmer intended. - -But this is only a partial solution, since if the programmer does `new Buffer(variable)` -(without an `encoding` parameter) there's no way to know what they intended. If `variable` -is sometimes a number, then uninitialized memory will sometimes be returned. - -### What's the real long-term fix? - -We could deprecate and remove `new Buffer(number)` and use `Buffer.allocUnsafe(number)` when -we need uninitialized memory. But that would break 1000s of packages. - -~~We believe the best solution is to:~~ - -~~1. Change `new Buffer(number)` to return safe, zeroed-out memory~~ - -~~2. Create a new API for creating uninitialized Buffers. We propose: `Buffer.allocUnsafe(number)`~~ - -#### Update - -We now support adding three new APIs: - -- `Buffer.from(value)` - convert from any type to a buffer -- `Buffer.alloc(size)` - create a zero-filled buffer -- `Buffer.allocUnsafe(size)` - create an uninitialized buffer with given size - -This solves the core problem that affected `ws` and `bittorrent-dht` which is -`Buffer(variable)` getting tricked into taking a number argument. - -This way, existing code continues working and the impact on the npm ecosystem will be -minimal. Over time, npm maintainers can migrate performance-critical code to use -`Buffer.allocUnsafe(number)` instead of `new Buffer(number)`. - - -### Conclusion - -We think there's a serious design issue with the `Buffer` API as it exists today. It -promotes insecure software by putting high-risk functionality into a convenient API -with friendly "developer ergonomics". - -This wasn't merely a theoretical exercise because we found the issue in some of the -most popular npm packages. - -Fortunately, there's an easy fix that can be applied today. Use `safe-buffer` in place of -`buffer`. - -```js -var Buffer = require('safe-buffer').Buffer -``` - -Eventually, we hope that node.js core can switch to this new, safer behavior. We believe -the impact on the ecosystem would be minimal since it's not a breaking change. -Well-maintained, popular packages would be updated to use `Buffer.alloc` quickly, while -older, insecure packages would magically become safe from this attack vector. - - -## links - -- [Node.js PR: buffer: throw if both length and enc are passed](https://github.com/nodejs/node/pull/4514) -- [Node Security Project disclosure for `ws`](https://nodesecurity.io/advisories/67) -- [Node Security Project disclosure for`bittorrent-dht`](https://nodesecurity.io/advisories/68) - - -## credit - -The original issues in `bittorrent-dht` -([disclosure](https://nodesecurity.io/advisories/68)) and -`ws` ([disclosure](https://nodesecurity.io/advisories/67)) were discovered by -[Mathias Buus](https://github.com/mafintosh) and -[Feross Aboukhadijeh](http://feross.org/). - -Thanks to [Adam Baldwin](https://github.com/evilpacket) for helping disclose these issues -and for his work running the [Node Security Project](https://nodesecurity.io/). - -Thanks to [John Hiesey](https://github.com/jhiesey) for proofreading this README and -auditing the code. - - -## license - -MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org) diff --git a/reverse_engineering/node_modules/safe-buffer/index.d.ts b/reverse_engineering/node_modules/safe-buffer/index.d.ts deleted file mode 100644 index e9fed80..0000000 --- a/reverse_engineering/node_modules/safe-buffer/index.d.ts +++ /dev/null @@ -1,187 +0,0 @@ -declare module "safe-buffer" { - export class Buffer { - length: number - write(string: string, offset?: number, length?: number, encoding?: string): number; - toString(encoding?: string, start?: number, end?: number): string; - toJSON(): { type: 'Buffer', data: any[] }; - equals(otherBuffer: Buffer): boolean; - compare(otherBuffer: Buffer, targetStart?: number, targetEnd?: number, sourceStart?: number, sourceEnd?: number): number; - copy(targetBuffer: Buffer, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; - slice(start?: number, end?: number): Buffer; - writeUIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - writeUIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - writeIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - writeIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - readUIntLE(offset: number, byteLength: number, noAssert?: boolean): number; - readUIntBE(offset: number, byteLength: number, noAssert?: boolean): number; - readIntLE(offset: number, byteLength: number, noAssert?: boolean): number; - readIntBE(offset: number, byteLength: number, noAssert?: boolean): number; - readUInt8(offset: number, noAssert?: boolean): number; - readUInt16LE(offset: number, noAssert?: boolean): number; - readUInt16BE(offset: number, noAssert?: boolean): number; - readUInt32LE(offset: number, noAssert?: boolean): number; - readUInt32BE(offset: number, noAssert?: boolean): number; - readInt8(offset: number, noAssert?: boolean): number; - readInt16LE(offset: number, noAssert?: boolean): number; - readInt16BE(offset: number, noAssert?: boolean): number; - readInt32LE(offset: number, noAssert?: boolean): number; - readInt32BE(offset: number, noAssert?: boolean): number; - readFloatLE(offset: number, noAssert?: boolean): number; - readFloatBE(offset: number, noAssert?: boolean): number; - readDoubleLE(offset: number, noAssert?: boolean): number; - readDoubleBE(offset: number, noAssert?: boolean): number; - swap16(): Buffer; - swap32(): Buffer; - swap64(): Buffer; - writeUInt8(value: number, offset: number, noAssert?: boolean): number; - writeUInt16LE(value: number, offset: number, noAssert?: boolean): number; - writeUInt16BE(value: number, offset: number, noAssert?: boolean): number; - writeUInt32LE(value: number, offset: number, noAssert?: boolean): number; - writeUInt32BE(value: number, offset: number, noAssert?: boolean): number; - writeInt8(value: number, offset: number, noAssert?: boolean): number; - writeInt16LE(value: number, offset: number, noAssert?: boolean): number; - writeInt16BE(value: number, offset: number, noAssert?: boolean): number; - writeInt32LE(value: number, offset: number, noAssert?: boolean): number; - writeInt32BE(value: number, offset: number, noAssert?: boolean): number; - writeFloatLE(value: number, offset: number, noAssert?: boolean): number; - writeFloatBE(value: number, offset: number, noAssert?: boolean): number; - writeDoubleLE(value: number, offset: number, noAssert?: boolean): number; - writeDoubleBE(value: number, offset: number, noAssert?: boolean): number; - fill(value: any, offset?: number, end?: number): this; - indexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; - lastIndexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; - includes(value: string | number | Buffer, byteOffset?: number, encoding?: string): boolean; - - /** - * Allocates a new buffer containing the given {str}. - * - * @param str String to store in buffer. - * @param encoding encoding to use, optional. Default is 'utf8' - */ - constructor (str: string, encoding?: string); - /** - * Allocates a new buffer of {size} octets. - * - * @param size count of octets to allocate. - */ - constructor (size: number); - /** - * Allocates a new buffer containing the given {array} of octets. - * - * @param array The octets to store. - */ - constructor (array: Uint8Array); - /** - * Produces a Buffer backed by the same allocated memory as - * the given {ArrayBuffer}. - * - * - * @param arrayBuffer The ArrayBuffer with which to share memory. - */ - constructor (arrayBuffer: ArrayBuffer); - /** - * Allocates a new buffer containing the given {array} of octets. - * - * @param array The octets to store. - */ - constructor (array: any[]); - /** - * Copies the passed {buffer} data onto a new {Buffer} instance. - * - * @param buffer The buffer to copy. - */ - constructor (buffer: Buffer); - prototype: Buffer; - /** - * Allocates a new Buffer using an {array} of octets. - * - * @param array - */ - static from(array: any[]): Buffer; - /** - * When passed a reference to the .buffer property of a TypedArray instance, - * the newly created Buffer will share the same allocated memory as the TypedArray. - * The optional {byteOffset} and {length} arguments specify a memory range - * within the {arrayBuffer} that will be shared by the Buffer. - * - * @param arrayBuffer The .buffer property of a TypedArray or a new ArrayBuffer() - * @param byteOffset - * @param length - */ - static from(arrayBuffer: ArrayBuffer, byteOffset?: number, length?: number): Buffer; - /** - * Copies the passed {buffer} data onto a new Buffer instance. - * - * @param buffer - */ - static from(buffer: Buffer): Buffer; - /** - * Creates a new Buffer containing the given JavaScript string {str}. - * If provided, the {encoding} parameter identifies the character encoding. - * If not provided, {encoding} defaults to 'utf8'. - * - * @param str - */ - static from(str: string, encoding?: string): Buffer; - /** - * Returns true if {obj} is a Buffer - * - * @param obj object to test. - */ - static isBuffer(obj: any): obj is Buffer; - /** - * Returns true if {encoding} is a valid encoding argument. - * Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex' - * - * @param encoding string to test. - */ - static isEncoding(encoding: string): boolean; - /** - * Gives the actual byte length of a string. encoding defaults to 'utf8'. - * This is not the same as String.prototype.length since that returns the number of characters in a string. - * - * @param string string to test. - * @param encoding encoding used to evaluate (defaults to 'utf8') - */ - static byteLength(string: string, encoding?: string): number; - /** - * Returns a buffer which is the result of concatenating all the buffers in the list together. - * - * If the list has no items, or if the totalLength is 0, then it returns a zero-length buffer. - * If the list has exactly one item, then the first item of the list is returned. - * If the list has more than one item, then a new Buffer is created. - * - * @param list An array of Buffer objects to concatenate - * @param totalLength Total length of the buffers when concatenated. - * If totalLength is not provided, it is read from the buffers in the list. However, this adds an additional loop to the function, so it is faster to provide the length explicitly. - */ - static concat(list: Buffer[], totalLength?: number): Buffer; - /** - * The same as buf1.compare(buf2). - */ - static compare(buf1: Buffer, buf2: Buffer): number; - /** - * Allocates a new buffer of {size} octets. - * - * @param size count of octets to allocate. - * @param fill if specified, buffer will be initialized by calling buf.fill(fill). - * If parameter is omitted, buffer will be filled with zeros. - * @param encoding encoding used for call to buf.fill while initalizing - */ - static alloc(size: number, fill?: string | Buffer | number, encoding?: string): Buffer; - /** - * Allocates a new buffer of {size} octets, leaving memory not initialized, so the contents - * of the newly created Buffer are unknown and may contain sensitive data. - * - * @param size count of octets to allocate - */ - static allocUnsafe(size: number): Buffer; - /** - * Allocates a new non-pooled buffer of {size} octets, leaving memory not initialized, so the contents - * of the newly created Buffer are unknown and may contain sensitive data. - * - * @param size count of octets to allocate - */ - static allocUnsafeSlow(size: number): Buffer; - } -} \ No newline at end of file diff --git a/reverse_engineering/node_modules/safe-buffer/index.js b/reverse_engineering/node_modules/safe-buffer/index.js deleted file mode 100644 index f8d3ec9..0000000 --- a/reverse_engineering/node_modules/safe-buffer/index.js +++ /dev/null @@ -1,65 +0,0 @@ -/*! safe-buffer. MIT License. Feross Aboukhadijeh */ -/* eslint-disable node/no-deprecated-api */ -var buffer = require('buffer') -var Buffer = buffer.Buffer - -// alternative to using Object.keys for old browsers -function copyProps (src, dst) { - for (var key in src) { - dst[key] = src[key] - } -} -if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { - module.exports = buffer -} else { - // Copy properties from require('buffer') - copyProps(buffer, exports) - exports.Buffer = SafeBuffer -} - -function SafeBuffer (arg, encodingOrOffset, length) { - return Buffer(arg, encodingOrOffset, length) -} - -SafeBuffer.prototype = Object.create(Buffer.prototype) - -// Copy static methods from Buffer -copyProps(Buffer, SafeBuffer) - -SafeBuffer.from = function (arg, encodingOrOffset, length) { - if (typeof arg === 'number') { - throw new TypeError('Argument must not be a number') - } - return Buffer(arg, encodingOrOffset, length) -} - -SafeBuffer.alloc = function (size, fill, encoding) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - var buf = Buffer(size) - if (fill !== undefined) { - if (typeof encoding === 'string') { - buf.fill(fill, encoding) - } else { - buf.fill(fill) - } - } else { - buf.fill(0) - } - return buf -} - -SafeBuffer.allocUnsafe = function (size) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - return Buffer(size) -} - -SafeBuffer.allocUnsafeSlow = function (size) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - return buffer.SlowBuffer(size) -} diff --git a/reverse_engineering/node_modules/safe-buffer/package.json b/reverse_engineering/node_modules/safe-buffer/package.json deleted file mode 100644 index 64938f2..0000000 --- a/reverse_engineering/node_modules/safe-buffer/package.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "_from": "safe-buffer@~5.2.0", - "_id": "safe-buffer@5.2.1", - "_inBundle": false, - "_integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "_location": "/safe-buffer", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "safe-buffer@~5.2.0", - "name": "safe-buffer", - "escapedName": "safe-buffer", - "rawSpec": "~5.2.0", - "saveSpec": null, - "fetchSpec": "~5.2.0" - }, - "_requiredBy": [ - "/ecdsa-sig-formatter", - "/jwa", - "/jws", - "/string_decoder" - ], - "_resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "_shasum": "1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", - "_spec": "safe-buffer@~5.2.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/string_decoder", - "author": { - "name": "Feross Aboukhadijeh", - "email": "feross@feross.org", - "url": "https://feross.org" - }, - "bugs": { - "url": "https://github.com/feross/safe-buffer/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Safer Node.js Buffer API", - "devDependencies": { - "standard": "*", - "tape": "^5.0.0" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "homepage": "https://github.com/feross/safe-buffer", - "keywords": [ - "buffer", - "buffer allocate", - "node security", - "safe", - "safe-buffer", - "security", - "uninitialized" - ], - "license": "MIT", - "main": "index.js", - "name": "safe-buffer", - "repository": { - "type": "git", - "url": "git://github.com/feross/safe-buffer.git" - }, - "scripts": { - "test": "standard && tape test/*.js" - }, - "types": "index.d.ts", - "version": "5.2.1" -} diff --git a/reverse_engineering/node_modules/stream-events/index.d.ts b/reverse_engineering/node_modules/stream-events/index.d.ts deleted file mode 100644 index 56ed748..0000000 --- a/reverse_engineering/node_modules/stream-events/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Stream } from "stream"; -declare function StreamEvents(stream: StreamType) - : StreamType; -declare namespace StreamEvents { } -export = StreamEvents diff --git a/reverse_engineering/node_modules/stream-events/index.js b/reverse_engineering/node_modules/stream-events/index.js deleted file mode 100644 index 28d50a6..0000000 --- a/reverse_engineering/node_modules/stream-events/index.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var stubs = require('stubs') - -/* - * StreamEvents can be used 2 ways: - * - * 1: - * function MyStream() { - * require('stream-events').call(this) - * } - * - * 2: - * require('stream-events')(myStream) - */ -function StreamEvents(stream) { - stream = stream || this - - var cfg = { - callthrough: true, - calls: 1 - } - - stubs(stream, '_read', cfg, stream.emit.bind(stream, 'reading')) - stubs(stream, '_write', cfg, stream.emit.bind(stream, 'writing')) - - return stream -} - -module.exports = StreamEvents diff --git a/reverse_engineering/node_modules/stream-events/package.json b/reverse_engineering/node_modules/stream-events/package.json deleted file mode 100644 index 0c86c3b..0000000 --- a/reverse_engineering/node_modules/stream-events/package.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "_from": "stream-events@^1.0.5", - "_id": "stream-events@1.0.5", - "_inBundle": false, - "_integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", - "_location": "/stream-events", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "stream-events@^1.0.5", - "name": "stream-events", - "escapedName": "stream-events", - "rawSpec": "^1.0.5", - "saveSpec": null, - "fetchSpec": "^1.0.5" - }, - "_requiredBy": [ - "/@google-cloud/bigquery", - "/teeny-request" - ], - "_resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", - "_shasum": "bbc898ec4df33a4902d892333d47da9bf1c406d5", - "_spec": "stream-events@^1.0.5", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/@google-cloud/bigquery", - "author": { - "name": "Stephen Sawchuk" - }, - "bugs": { - "url": "https://github.com/stephenplusplus/stream-events/issues" - }, - "bundleDependencies": false, - "dependencies": { - "stubs": "^3.0.0" - }, - "deprecated": false, - "description": "Get an event when you're being sent data or asked for it.", - "devDependencies": { - "duplexify": "^3.2.0" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "homepage": "https://github.com/stephenplusplus/stream-events", - "keywords": [ - "stream", - "events", - "read", - "write", - "duplexify", - "lazy-stream" - ], - "license": "MIT", - "main": "index.js", - "name": "stream-events", - "repository": { - "type": "git", - "url": "git+https://github.com/stephenplusplus/stream-events.git" - }, - "scripts": { - "test": "node ./test" - }, - "types": "index.d.ts", - "version": "1.0.5" -} diff --git a/reverse_engineering/node_modules/stream-events/readme.md b/reverse_engineering/node_modules/stream-events/readme.md deleted file mode 100644 index 695a7ce..0000000 --- a/reverse_engineering/node_modules/stream-events/readme.md +++ /dev/null @@ -1,64 +0,0 @@ -# stream-events - -> Get an event when you're being sent data or asked for it. - -## About - -This is just a simple thing that tells you when `_read` and `_write` have been called, saving you the trouble of writing this yourself. You receive two events `reading` and `writing`-- no magic is performed. - -This works well with [duplexify](https://github.com/mafintosh/duplexify) or lazy streams, so you can wait until you know you're being used as a stream to do something asynchronous, such as fetching an API token. - - -## Use -```sh -$ npm install --save stream-events -``` -```js -var stream = require('stream') -var streamEvents = require('stream-events') -var util = require('util') - -function MyStream() { - stream.Duplex.call(this) - streamEvents.call(this) -} -util.inherits(MyStream, stream.Duplex) - -MyStream.prototype._read = function(chunk) { - console.log('_read called as usual') - this.push(new Buffer(chunk)) - this.push(null) -} - -MyStream.prototype._write = function() { - console.log('_write called as usual') -} - -var stream = new MyStream - -stream.on('reading', function() { - console.log('stream is being asked for data') -}) - -stream.on('writing', function() { - console.log('stream is being sent data') -}) - -stream.pipe(stream) -``` - -### Using with Duplexify -```js -var duplexify = require('duplexify') -var streamEvents = require('stream-events') -var fs = require('fs') - -var dup = streamEvents(duplexify()) - -dup.on('writing', function() { - // do something async - dup.setWritable(/*writable stream*/) -}) - -fs.createReadStream('file').pipe(dup) -``` \ No newline at end of file diff --git a/reverse_engineering/node_modules/stream-shift/.travis.yml b/reverse_engineering/node_modules/stream-shift/.travis.yml deleted file mode 100644 index ecd4193..0000000 --- a/reverse_engineering/node_modules/stream-shift/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -language: node_js -node_js: - - "0.10" - - "0.12" - - "4" - - "6" diff --git a/reverse_engineering/node_modules/stream-shift/LICENSE b/reverse_engineering/node_modules/stream-shift/LICENSE deleted file mode 100644 index bae9da7..0000000 --- a/reverse_engineering/node_modules/stream-shift/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Mathias Buus - -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/reverse_engineering/node_modules/stream-shift/README.md b/reverse_engineering/node_modules/stream-shift/README.md deleted file mode 100644 index d9cc2d9..0000000 --- a/reverse_engineering/node_modules/stream-shift/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# stream-shift - -Returns the next buffer/object in a stream's readable queue - -``` -npm install stream-shift -``` - -[![build status](http://img.shields.io/travis/mafintosh/stream-shift.svg?style=flat)](http://travis-ci.org/mafintosh/stream-shift) - -## Usage - -``` js -var shift = require('stream-shift') - -console.log(shift(someStream)) // first item in its buffer -``` - -## Credit - -Thanks [@dignifiedquire](https://github.com/dignifiedquire) for making this work on node 6 - -## License - -MIT diff --git a/reverse_engineering/node_modules/stream-shift/index.js b/reverse_engineering/node_modules/stream-shift/index.js deleted file mode 100644 index 33cc4d7..0000000 --- a/reverse_engineering/node_modules/stream-shift/index.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = shift - -function shift (stream) { - var rs = stream._readableState - if (!rs) return null - return (rs.objectMode || typeof stream._duplexState === 'number') ? stream.read() : stream.read(getStateLength(rs)) -} - -function getStateLength (state) { - if (state.buffer.length) { - // Since node 6.3.0 state.buffer is a BufferList not an array - if (state.buffer.head) { - return state.buffer.head.data.length - } - - return state.buffer[0].length - } - - return state.length -} diff --git a/reverse_engineering/node_modules/stream-shift/package.json b/reverse_engineering/node_modules/stream-shift/package.json deleted file mode 100644 index 6802d9e..0000000 --- a/reverse_engineering/node_modules/stream-shift/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "_from": "stream-shift@^1.0.0", - "_id": "stream-shift@1.0.1", - "_inBundle": false, - "_integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "_location": "/stream-shift", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "stream-shift@^1.0.0", - "name": "stream-shift", - "escapedName": "stream-shift", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/duplexify" - ], - "_resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "_shasum": "d7088281559ab2778424279b0877da3c392d5a3d", - "_spec": "stream-shift@^1.0.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/duplexify", - "author": { - "name": "Mathias Buus", - "url": "@mafintosh" - }, - "bugs": { - "url": "https://github.com/mafintosh/stream-shift/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "Returns the next buffer/object in a stream's readable queue", - "devDependencies": { - "standard": "^7.1.2", - "tape": "^4.6.0", - "through2": "^2.0.1" - }, - "homepage": "https://github.com/mafintosh/stream-shift", - "license": "MIT", - "main": "index.js", - "name": "stream-shift", - "repository": { - "type": "git", - "url": "git+https://github.com/mafintosh/stream-shift.git" - }, - "scripts": { - "test": "standard && tape test.js" - }, - "version": "1.0.1" -} diff --git a/reverse_engineering/node_modules/stream-shift/test.js b/reverse_engineering/node_modules/stream-shift/test.js deleted file mode 100644 index c0222c3..0000000 --- a/reverse_engineering/node_modules/stream-shift/test.js +++ /dev/null @@ -1,48 +0,0 @@ -var tape = require('tape') -var through = require('through2') -var stream = require('stream') -var shift = require('./') - -tape('shifts next', function (t) { - var passthrough = through() - - passthrough.write('hello') - passthrough.write('world') - - t.same(shift(passthrough), Buffer('hello')) - t.same(shift(passthrough), Buffer('world')) - t.end() -}) - -tape('shifts next with core', function (t) { - var passthrough = stream.PassThrough() - - passthrough.write('hello') - passthrough.write('world') - - t.same(shift(passthrough), Buffer('hello')) - t.same(shift(passthrough), Buffer('world')) - t.end() -}) - -tape('shifts next with object mode', function (t) { - var passthrough = through({objectMode: true}) - - passthrough.write({hello: 1}) - passthrough.write({world: 1}) - - t.same(shift(passthrough), {hello: 1}) - t.same(shift(passthrough), {world: 1}) - t.end() -}) - -tape('shifts next with object mode with core', function (t) { - var passthrough = stream.PassThrough({objectMode: true}) - - passthrough.write({hello: 1}) - passthrough.write({world: 1}) - - t.same(shift(passthrough), {hello: 1}) - t.same(shift(passthrough), {world: 1}) - t.end() -}) diff --git a/reverse_engineering/node_modules/string_decoder/LICENSE b/reverse_engineering/node_modules/string_decoder/LICENSE deleted file mode 100644 index 778edb2..0000000 --- a/reverse_engineering/node_modules/string_decoder/LICENSE +++ /dev/null @@ -1,48 +0,0 @@ -Node.js is licensed for use as follows: - -""" -Copyright Node.js contributors. All rights reserved. - -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. -""" - -This license applies to parts of Node.js originating from the -https://github.com/joyent/node repository: - -""" -Copyright Joyent, Inc. and other Node contributors. All rights reserved. -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/reverse_engineering/node_modules/string_decoder/README.md b/reverse_engineering/node_modules/string_decoder/README.md deleted file mode 100644 index 5fd5831..0000000 --- a/reverse_engineering/node_modules/string_decoder/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# string_decoder - -***Node-core v8.9.4 string_decoder for userland*** - - -[![NPM](https://nodei.co/npm/string_decoder.png?downloads=true&downloadRank=true)](https://nodei.co/npm/string_decoder/) -[![NPM](https://nodei.co/npm-dl/string_decoder.png?&months=6&height=3)](https://nodei.co/npm/string_decoder/) - - -```bash -npm install --save string_decoder -``` - -***Node-core string_decoder for userland*** - -This package is a mirror of the string_decoder implementation in Node-core. - -Full documentation may be found on the [Node.js website](https://nodejs.org/dist/v8.9.4/docs/api/). - -As of version 1.0.0 **string_decoder** uses semantic versioning. - -## Previous versions - -Previous version numbers match the versions found in Node core, e.g. 0.10.24 matches Node 0.10.24, likewise 0.11.10 matches Node 0.11.10. - -## Update - -The *build/* directory contains a build script that will scrape the source from the [nodejs/node](https://github.com/nodejs/node) repo given a specific Node version. - -## Streams Working Group - -`string_decoder` is maintained by the Streams Working Group, which -oversees the development and maintenance of the Streams API within -Node.js. The responsibilities of the Streams Working Group include: - -* Addressing stream issues on the Node.js issue tracker. -* Authoring and editing stream documentation within the Node.js project. -* Reviewing changes to stream subclasses within the Node.js project. -* Redirecting changes to streams from the Node.js project to this - project. -* Assisting in the implementation of stream providers within Node.js. -* Recommending versions of `readable-stream` to be included in Node.js. -* Messaging about the future of streams to give the community advance - notice of changes. - -See [readable-stream](https://github.com/nodejs/readable-stream) for -more details. diff --git a/reverse_engineering/node_modules/string_decoder/lib/string_decoder.js b/reverse_engineering/node_modules/string_decoder/lib/string_decoder.js deleted file mode 100644 index 2e89e63..0000000 --- a/reverse_engineering/node_modules/string_decoder/lib/string_decoder.js +++ /dev/null @@ -1,296 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// 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. - -'use strict'; - -/**/ - -var Buffer = require('safe-buffer').Buffer; -/**/ - -var isEncoding = Buffer.isEncoding || function (encoding) { - encoding = '' + encoding; - switch (encoding && encoding.toLowerCase()) { - case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw': - return true; - default: - return false; - } -}; - -function _normalizeEncoding(enc) { - if (!enc) return 'utf8'; - var retried; - while (true) { - switch (enc) { - case 'utf8': - case 'utf-8': - return 'utf8'; - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return 'utf16le'; - case 'latin1': - case 'binary': - return 'latin1'; - case 'base64': - case 'ascii': - case 'hex': - return enc; - default: - if (retried) return; // undefined - enc = ('' + enc).toLowerCase(); - retried = true; - } - } -}; - -// Do not cache `Buffer.isEncoding` when checking encoding names as some -// modules monkey-patch it to support additional encodings -function normalizeEncoding(enc) { - var nenc = _normalizeEncoding(enc); - if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc); - return nenc || enc; -} - -// StringDecoder provides an interface for efficiently splitting a series of -// buffers into a series of JS strings without breaking apart multi-byte -// characters. -exports.StringDecoder = StringDecoder; -function StringDecoder(encoding) { - this.encoding = normalizeEncoding(encoding); - var nb; - switch (this.encoding) { - case 'utf16le': - this.text = utf16Text; - this.end = utf16End; - nb = 4; - break; - case 'utf8': - this.fillLast = utf8FillLast; - nb = 4; - break; - case 'base64': - this.text = base64Text; - this.end = base64End; - nb = 3; - break; - default: - this.write = simpleWrite; - this.end = simpleEnd; - return; - } - this.lastNeed = 0; - this.lastTotal = 0; - this.lastChar = Buffer.allocUnsafe(nb); -} - -StringDecoder.prototype.write = function (buf) { - if (buf.length === 0) return ''; - var r; - var i; - if (this.lastNeed) { - r = this.fillLast(buf); - if (r === undefined) return ''; - i = this.lastNeed; - this.lastNeed = 0; - } else { - i = 0; - } - if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i); - return r || ''; -}; - -StringDecoder.prototype.end = utf8End; - -// Returns only complete characters in a Buffer -StringDecoder.prototype.text = utf8Text; - -// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer -StringDecoder.prototype.fillLast = function (buf) { - if (this.lastNeed <= buf.length) { - buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); - return this.lastChar.toString(this.encoding, 0, this.lastTotal); - } - buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); - this.lastNeed -= buf.length; -}; - -// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a -// continuation byte. If an invalid byte is detected, -2 is returned. -function utf8CheckByte(byte) { - if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4; - return byte >> 6 === 0x02 ? -1 : -2; -} - -// Checks at most 3 bytes at the end of a Buffer in order to detect an -// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4) -// needed to complete the UTF-8 character (if applicable) are returned. -function utf8CheckIncomplete(self, buf, i) { - var j = buf.length - 1; - if (j < i) return 0; - var nb = utf8CheckByte(buf[j]); - if (nb >= 0) { - if (nb > 0) self.lastNeed = nb - 1; - return nb; - } - if (--j < i || nb === -2) return 0; - nb = utf8CheckByte(buf[j]); - if (nb >= 0) { - if (nb > 0) self.lastNeed = nb - 2; - return nb; - } - if (--j < i || nb === -2) return 0; - nb = utf8CheckByte(buf[j]); - if (nb >= 0) { - if (nb > 0) { - if (nb === 2) nb = 0;else self.lastNeed = nb - 3; - } - return nb; - } - return 0; -} - -// Validates as many continuation bytes for a multi-byte UTF-8 character as -// needed or are available. If we see a non-continuation byte where we expect -// one, we "replace" the validated continuation bytes we've seen so far with -// a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding -// behavior. The continuation byte check is included three times in the case -// where all of the continuation bytes for a character exist in the same buffer. -// It is also done this way as a slight performance increase instead of using a -// loop. -function utf8CheckExtraBytes(self, buf, p) { - if ((buf[0] & 0xC0) !== 0x80) { - self.lastNeed = 0; - return '\ufffd'; - } - if (self.lastNeed > 1 && buf.length > 1) { - if ((buf[1] & 0xC0) !== 0x80) { - self.lastNeed = 1; - return '\ufffd'; - } - if (self.lastNeed > 2 && buf.length > 2) { - if ((buf[2] & 0xC0) !== 0x80) { - self.lastNeed = 2; - return '\ufffd'; - } - } - } -} - -// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer. -function utf8FillLast(buf) { - var p = this.lastTotal - this.lastNeed; - var r = utf8CheckExtraBytes(this, buf, p); - if (r !== undefined) return r; - if (this.lastNeed <= buf.length) { - buf.copy(this.lastChar, p, 0, this.lastNeed); - return this.lastChar.toString(this.encoding, 0, this.lastTotal); - } - buf.copy(this.lastChar, p, 0, buf.length); - this.lastNeed -= buf.length; -} - -// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a -// partial character, the character's bytes are buffered until the required -// number of bytes are available. -function utf8Text(buf, i) { - var total = utf8CheckIncomplete(this, buf, i); - if (!this.lastNeed) return buf.toString('utf8', i); - this.lastTotal = total; - var end = buf.length - (total - this.lastNeed); - buf.copy(this.lastChar, 0, end); - return buf.toString('utf8', i, end); -} - -// For UTF-8, a replacement character is added when ending on a partial -// character. -function utf8End(buf) { - var r = buf && buf.length ? this.write(buf) : ''; - if (this.lastNeed) return r + '\ufffd'; - return r; -} - -// UTF-16LE typically needs two bytes per character, but even if we have an even -// number of bytes available, we need to check if we end on a leading/high -// surrogate. In that case, we need to wait for the next two bytes in order to -// decode the last character properly. -function utf16Text(buf, i) { - if ((buf.length - i) % 2 === 0) { - var r = buf.toString('utf16le', i); - if (r) { - var c = r.charCodeAt(r.length - 1); - if (c >= 0xD800 && c <= 0xDBFF) { - this.lastNeed = 2; - this.lastTotal = 4; - this.lastChar[0] = buf[buf.length - 2]; - this.lastChar[1] = buf[buf.length - 1]; - return r.slice(0, -1); - } - } - return r; - } - this.lastNeed = 1; - this.lastTotal = 2; - this.lastChar[0] = buf[buf.length - 1]; - return buf.toString('utf16le', i, buf.length - 1); -} - -// For UTF-16LE we do not explicitly append special replacement characters if we -// end on a partial character, we simply let v8 handle that. -function utf16End(buf) { - var r = buf && buf.length ? this.write(buf) : ''; - if (this.lastNeed) { - var end = this.lastTotal - this.lastNeed; - return r + this.lastChar.toString('utf16le', 0, end); - } - return r; -} - -function base64Text(buf, i) { - var n = (buf.length - i) % 3; - if (n === 0) return buf.toString('base64', i); - this.lastNeed = 3 - n; - this.lastTotal = 3; - if (n === 1) { - this.lastChar[0] = buf[buf.length - 1]; - } else { - this.lastChar[0] = buf[buf.length - 2]; - this.lastChar[1] = buf[buf.length - 1]; - } - return buf.toString('base64', i, buf.length - n); -} - -function base64End(buf) { - var r = buf && buf.length ? this.write(buf) : ''; - if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed); - return r; -} - -// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex) -function simpleWrite(buf) { - return buf.toString(this.encoding); -} - -function simpleEnd(buf) { - return buf && buf.length ? this.write(buf) : ''; -} \ No newline at end of file diff --git a/reverse_engineering/node_modules/string_decoder/package.json b/reverse_engineering/node_modules/string_decoder/package.json deleted file mode 100644 index be1a01c..0000000 --- a/reverse_engineering/node_modules/string_decoder/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "_from": "string_decoder@^1.1.1", - "_id": "string_decoder@1.3.0", - "_inBundle": false, - "_integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "_location": "/string_decoder", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "string_decoder@^1.1.1", - "name": "string_decoder", - "escapedName": "string_decoder", - "rawSpec": "^1.1.1", - "saveSpec": null, - "fetchSpec": "^1.1.1" - }, - "_requiredBy": [ - "/readable-stream" - ], - "_resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "_shasum": "42f114594a46cf1a8e30b0a84f56c78c3edac21e", - "_spec": "string_decoder@^1.1.1", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/readable-stream", - "bugs": { - "url": "https://github.com/nodejs/string_decoder/issues" - }, - "bundleDependencies": false, - "dependencies": { - "safe-buffer": "~5.2.0" - }, - "deprecated": false, - "description": "The string_decoder module from Node core", - "devDependencies": { - "babel-polyfill": "^6.23.0", - "core-util-is": "^1.0.2", - "inherits": "^2.0.3", - "tap": "~0.4.8" - }, - "files": [ - "lib" - ], - "homepage": "https://github.com/nodejs/string_decoder", - "keywords": [ - "string", - "decoder", - "browser", - "browserify" - ], - "license": "MIT", - "main": "lib/string_decoder.js", - "name": "string_decoder", - "repository": { - "type": "git", - "url": "git://github.com/nodejs/string_decoder.git" - }, - "scripts": { - "ci": "tap test/parallel/*.js test/ours/*.js --tap | tee test.tap && node test/verify-dependencies.js", - "test": "tap test/parallel/*.js && node test/verify-dependencies" - }, - "version": "1.3.0" -} diff --git a/reverse_engineering/node_modules/stubs/index.js b/reverse_engineering/node_modules/stubs/index.js deleted file mode 100644 index 252f34f..0000000 --- a/reverse_engineering/node_modules/stubs/index.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict' - -module.exports = function stubs(obj, method, cfg, stub) { - if (!obj || !method || !obj[method]) - throw new Error('You must provide an object and a key for an existing method') - - if (!stub) { - stub = cfg - cfg = {} - } - - stub = stub || function() {} - - cfg.callthrough = cfg.callthrough || false - cfg.calls = cfg.calls || 0 - - var norevert = cfg.calls === 0 - - var cached = obj[method].bind(obj) - - obj[method] = function() { - var args = [].slice.call(arguments) - var returnVal - - if (cfg.callthrough) - returnVal = cached.apply(obj, args) - - returnVal = stub.apply(obj, args) || returnVal - - if (!norevert && --cfg.calls === 0) - obj[method] = cached - - return returnVal - } -} diff --git a/reverse_engineering/node_modules/stubs/package.json b/reverse_engineering/node_modules/stubs/package.json deleted file mode 100644 index 80b0a25..0000000 --- a/reverse_engineering/node_modules/stubs/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "_from": "stubs@^3.0.0", - "_id": "stubs@3.0.0", - "_inBundle": false, - "_integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls=", - "_location": "/stubs", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "stubs@^3.0.0", - "name": "stubs", - "escapedName": "stubs", - "rawSpec": "^3.0.0", - "saveSpec": null, - "fetchSpec": "^3.0.0" - }, - "_requiredBy": [ - "/stream-events" - ], - "_resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", - "_shasum": "e8d2ba1fa9c90570303c030b6900f7d5f89abe5b", - "_spec": "stubs@^3.0.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/stream-events", - "author": { - "name": "Stephen Sawchuk" - }, - "bugs": { - "url": "https://github.com/stephenplusplus/stubs/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Easy method stubber.", - "devDependencies": { - "tess": "^1.0.0" - }, - "homepage": "https://github.com/stephenplusplus/stubs", - "keywords": [ - "stubs" - ], - "license": "MIT", - "main": "index.js", - "name": "stubs", - "repository": { - "type": "git", - "url": "git+https://github.com/stephenplusplus/stubs.git" - }, - "scripts": { - "test": "node ./test" - }, - "version": "3.0.0" -} diff --git a/reverse_engineering/node_modules/stubs/readme.md b/reverse_engineering/node_modules/stubs/readme.md deleted file mode 100644 index ed07628..0000000 --- a/reverse_engineering/node_modules/stubs/readme.md +++ /dev/null @@ -1,73 +0,0 @@ -# stubs - -> It's a simple stubber. - -## About - -For when you don't want to write the same thing over and over to cache a method and call an override, then revert it, and blah blah. - - -## Use -```sh -$ npm install --save-dev stubs -``` -```js -var mylib = require('./lib/index.js') -var stubs = require('stubs') - -// make it a noop -stubs(mylib, 'create') - -// stub it out -stubs(mylib, 'create', function() { - // calls this instead -}) - -// stub it out, but call the original first -stubs(mylib, 'create', { callthrough: true }, function() { - // call original method, then call this -}) - -// use the stub for a while, then revert -stubs(mylib, 'create', { calls: 3 }, function() { - // call this 3 times, then use the original method -}) -``` - - -## API - -### stubs(object, method[[, opts], stub]) - -#### object -- Type: Object - -#### method -- Type: String - -Name of the method to stub. - -#### opts -- (optional) -- Type: Object - -##### opts.callthrough -- (optional) -- Type: Boolean -- Default: `false` - -Call the original method as well as the stub (if a stub is provided). - -##### opts.calls -- (optional) -- Type: Number -- Default: `0` (never revert) - -Number of calls to allow the stub to receive until reverting to the original. - -#### stub -- (optional) -- Type: Function -- Default: `function() {}` - -This method is called in place of the original method. If `opts.callthrough` is `true`, this method is called *after* the original method is called as well. \ No newline at end of file diff --git a/reverse_engineering/node_modules/stubs/test.js b/reverse_engineering/node_modules/stubs/test.js deleted file mode 100644 index cae408e..0000000 --- a/reverse_engineering/node_modules/stubs/test.js +++ /dev/null @@ -1,172 +0,0 @@ -'use strict' - -var assert = require('assert') -var stubs = require('./') -var tess = require('tess') - -tess('init', function(it) { - it('is a function', function() { - assert.equal(typeof stubs, 'function') - }) - - it('throws without obj || method', function() { - assert.throws(function() { - stubs() - }, /must provide/) - - assert.throws(function() { - stubs({}) - }, /must provide/) - }) -}) - -tess('stubs', function(it) { - it('stubs a method with a noop', function() { - var originalCalled = false - - var obj = {} - obj.method = function() { - originalCalled = true - } - - stubs(obj, 'method') - - obj.method() - - assert(!originalCalled) - }) - - it('accepts an override', function() { - var originalCalled = false - - var obj = {} - obj.method = function() { - originalCalled = true - } - - var replacementCalled = false - stubs(obj, 'method', function() { - replacementCalled = true - }) - - obj.method() - assert(!originalCalled) - assert(replacementCalled) - }) - - it('returns value of overridden method call', function() { - var overriddenUniqueVal = {} - - var obj = {} - obj.method = function() {} - - stubs(obj, 'method', { callthrough: true }, function() { - return overriddenUniqueVal - }) - - assert.strictEqual(obj.method(), overriddenUniqueVal) - }) - - it('calls through to original method', function() { - var originalCalled = false - - var obj = {} - obj.method = function() { - originalCalled = true - } - - var replacementCalled = false - stubs(obj, 'method', { callthrough: true }, function() { - replacementCalled = true - }) - - obj.method() - assert(originalCalled) - assert(replacementCalled) - }) - - it('returns value of original method call', function() { - var uniqueVal = Date.now() - - var obj = {} - obj.method = function() { - return uniqueVal - } - - stubs(obj, 'method', { callthrough: true }, function() {}) - - assert.equal(obj.method(), uniqueVal) - }) - - it('returns calls override and returns original value', function() { - var uniqueVal = {} - var overrideWasCalled = false - - var obj = {} - obj.method = function() { - return uniqueVal - } - - stubs(obj, 'method', { callthrough: true }, function() { - // does not return anything - overrideWasCalled = true - }) - - assert.strictEqual(obj.method(), uniqueVal) - assert.strictEqual(overrideWasCalled, true) - }) - - it('returns value of overridden method call', function() { - var uniqueVal = {} - var overriddenUniqueVal = {} - - var obj = {} - obj.method = function() { - return uniqueVal - } - - stubs(obj, 'method', { callthrough: true }, function() { - return overriddenUniqueVal - }) - - assert.strictEqual(obj.method(), overriddenUniqueVal) - }) - - it('stops calling stub after n calls', function() { - var timesToCall = 5 - var timesCalled = 0 - - var obj = {} - obj.method = function() { - assert.equal(timesCalled, timesToCall) - } - - stubs(obj, 'method', { calls: timesToCall }, function() { - timesCalled++ - }) - - obj.method() // 1 (stub) - obj.method() // 2 (stub) - obj.method() // 3 (stub) - obj.method() // 4 (stub) - obj.method() // 5 (stub) - obj.method() // 6 (original) - }) - - it('calls stub in original context of obj', function() { - var secret = 'brownies' - - function Class() { - this.method = function() {} - this.secret = secret - } - - var cl = new Class() - - stubs(cl, 'method', function() { - assert.equal(this.secret, secret) - }) - - cl.method() - }) -}) diff --git a/reverse_engineering/node_modules/teeny-request/CHANGELOG.md b/reverse_engineering/node_modules/teeny-request/CHANGELOG.md deleted file mode 100644 index 22143b5..0000000 --- a/reverse_engineering/node_modules/teeny-request/CHANGELOG.md +++ /dev/null @@ -1,189 +0,0 @@ -# Changelog - -### [7.1.1](https://www.github.com/googleapis/teeny-request/compare/v7.1.0...v7.1.1) (2021-06-30) - - -### Bug Fixes - -* throw error if missing uri or url ([#239](https://www.github.com/googleapis/teeny-request/issues/239)) ([4d770e3](https://www.github.com/googleapis/teeny-request/commit/4d770e3b89254c4cec30c422cdcdad257500c9cc)) - -## [7.1.0](https://www.github.com/googleapis/teeny-request/compare/v7.0.1...v7.1.0) (2021-05-19) - - -### Features - -* add `gcf-owl-bot[bot]` to `ignoreAuthors` ([#224](https://www.github.com/googleapis/teeny-request/issues/224)) ([3e7424f](https://www.github.com/googleapis/teeny-request/commit/3e7424fb63f0c0dca3606d6e1fc2f294f9d86ba5)) - - -### Bug Fixes - -* Buffer is allow as body without encoding to string ([#223](https://www.github.com/googleapis/teeny-request/issues/223)) ([d9bcdc3](https://www.github.com/googleapis/teeny-request/commit/d9bcdc36a60074fd78718ea8f7c4745d640e3b4f)) - -### [7.0.1](https://www.github.com/googleapis/teeny-request/compare/v7.0.0...v7.0.1) (2020-09-29) - - -### Bug Fixes - -* **deps:** update node-fetch to 2.6.1 ([#200](https://www.github.com/googleapis/teeny-request/issues/200)) ([8958a78](https://www.github.com/googleapis/teeny-request/commit/8958a78b117e5610f3ccf121ba1d650dbe9739f8)) - -## [7.0.0](https://www.github.com/googleapis/teeny-request/compare/v6.0.3...v7.0.0) (2020-06-01) - - -### ⚠ BREAKING CHANGES - -* dropping support for Node.js 8.x - -### Features - -* pass agent options when using agent pool config ([#149](https://www.github.com/googleapis/teeny-request/issues/149)) ([38ece79](https://www.github.com/googleapis/teeny-request/commit/38ece79151b667ec1a72ec50b1c7a58258924794)) -* warn on too many concurrent requests ([#165](https://www.github.com/googleapis/teeny-request/issues/165)) ([88ff2d0](https://www.github.com/googleapis/teeny-request/commit/88ff2d0d8e0fc25a4219ef5625b8de353ed4aa29)) - - -### Bug Fixes - -* apache license URL ([#468](https://www.github.com/googleapis/teeny-request/issues/468)) ([#156](https://www.github.com/googleapis/teeny-request/issues/156)) ([01ac7bd](https://www.github.com/googleapis/teeny-request/commit/01ac7bd01e870796fd15355e079649633d5d5983)) -* update template files for Node.js libraries ([#152](https://www.github.com/googleapis/teeny-request/issues/152)) ([89833c3](https://www.github.com/googleapis/teeny-request/commit/89833c3c3e8afea04c85a60811f122c5a6d37e48)) -* **deps:** update dependency uuid to v8 ([#164](https://www.github.com/googleapis/teeny-request/issues/164)) ([2ab8155](https://www.github.com/googleapis/teeny-request/commit/2ab81550aeb8ca914516ff4ac20ebbb7b3d73fa5)) - - -### Build System - -* drop support for node.js 8.x ([#159](https://www.github.com/googleapis/teeny-request/issues/159)) ([d87aa73](https://www.github.com/googleapis/teeny-request/commit/d87aa73d3fafbdc013b03b7629a41decda6da98a)) - -### [6.0.3](https://www.github.com/googleapis/teeny-request/compare/v6.0.2...v6.0.3) (2020-03-06) - - -### Bug Fixes - -* **deps:** update dependency uuid to v7 ([#134](https://www.github.com/googleapis/teeny-request/issues/134)) ([97817bf](https://www.github.com/googleapis/teeny-request/commit/97817bfb12396f620b2e280dcdc8965c4815abb5)) - -### [6.0.2](https://www.github.com/googleapis/teeny-request/compare/v6.0.1...v6.0.2) (2020-02-10) - - -### Bug Fixes - -* **deps:** update dependency https-proxy-agent to v5 ([#128](https://www.github.com/googleapis/teeny-request/issues/128)) ([5dcef3f](https://www.github.com/googleapis/teeny-request/commit/5dcef3f5883b24a1092def38004074d04e37e241)) - -### [6.0.1](https://www.github.com/googleapis/teeny-request/compare/v6.0.0...v6.0.1) (2020-01-24) - - -### Bug Fixes - -* **deps:** update dependency http-proxy-agent to v4 ([#121](https://www.github.com/googleapis/teeny-request/issues/121)) ([7caabcf](https://www.github.com/googleapis/teeny-request/commit/7caabcf154d8cf0848e443ce2cd4fbfae913ca41)) - -## [6.0.0](https://www.github.com/googleapis/teeny-request/compare/v5.3.3...v6.0.0) (2020-01-11) - - -### ⚠ BREAKING CHANGES - -* remove console log and throw instead (#107) - -### Bug Fixes - -* remove console log and throw instead ([#107](https://www.github.com/googleapis/teeny-request/issues/107)) ([965beaa](https://www.github.com/googleapis/teeny-request/commit/965beaae17f0273992c9856ebf79b6f1befc59fe)) - -### [5.3.3](https://www.github.com/googleapis/teeny-request/compare/v5.3.2...v5.3.3) (2019-12-15) - - -### Bug Fixes - -* **deps:** update dependency http-proxy-agent to v3 ([#104](https://www.github.com/googleapis/teeny-request/issues/104)) ([35a47d8](https://www.github.com/googleapis/teeny-request/commit/35a47d83adf92b16eab3fce52deae0e3c1353aa6)) -* **deps:** update dependency https-proxy-agent to v4 ([#105](https://www.github.com/googleapis/teeny-request/issues/105)) ([26b67af](https://www.github.com/googleapis/teeny-request/commit/26b67afcb084ce1b99a62ecc55050d6f8f8aaee4)) -* **docs:** add jsdoc-region-tag plugin ([#98](https://www.github.com/googleapis/teeny-request/issues/98)) ([8f3c35a](https://www.github.com/googleapis/teeny-request/commit/8f3c35aee711a1262ffa7c058eb1b9f18204b80e)) - -### [5.3.2](https://www.github.com/googleapis/teeny-request/compare/v5.3.1...v5.3.2) (2019-12-05) - - -### Bug Fixes - -* **deps:** pin TypeScript below 3.7.0 ([#102](https://www.github.com/googleapis/teeny-request/issues/102)) ([c0b81e6](https://www.github.com/googleapis/teeny-request/commit/c0b81e6e7c1bb7e4a3e823c2e41692bc8ede0218)) - -### [5.3.1](https://www.github.com/googleapis/teeny-request/compare/v5.3.0...v5.3.1) (2019-10-29) - - -### Bug Fixes - -* correctly set compress/gzip option when false ([#95](https://www.github.com/googleapis/teeny-request/issues/95)) ([72ef307](https://www.github.com/googleapis/teeny-request/commit/72ef307364de542af3ef8581572b1897fca2bcf4)) - -## [5.3.0](https://www.github.com/googleapis/teeny-request/compare/v5.2.1...v5.3.0) (2019-10-09) - - -### Bug Fixes - -* **deps:** update dependency https-proxy-agent to v3 ([#89](https://www.github.com/googleapis/teeny-request/issues/89)) ([dfd52cc](https://www.github.com/googleapis/teeny-request/commit/dfd52cc)) - - -### Features - -* agent pooling ([#86](https://www.github.com/googleapis/teeny-request/issues/86)) ([b182f51](https://www.github.com/googleapis/teeny-request/commit/b182f51)) - -### [5.2.1](https://www.github.com/googleapis/teeny-request/compare/v5.2.0...v5.2.1) (2019-08-14) - - -### Bug Fixes - -* **types:** make types less strict for method ([#76](https://www.github.com/googleapis/teeny-request/issues/76)) ([9f07e98](https://www.github.com/googleapis/teeny-request/commit/9f07e98)) - -## [5.2.0](https://www.github.com/googleapis/teeny-request/compare/v5.1.3...v5.2.0) (2019-08-13) - - -### Bug Fixes - -* if scheme is http:// use an HTTP agent ([#75](https://www.github.com/googleapis/teeny-request/issues/75)) ([abdf846](https://www.github.com/googleapis/teeny-request/commit/abdf846)) -* remove unused logging ([#71](https://www.github.com/googleapis/teeny-request/issues/71)) ([4cb4967](https://www.github.com/googleapis/teeny-request/commit/4cb4967)) -* undefined headers breaks compatibility with auth ([#66](https://www.github.com/googleapis/teeny-request/issues/66)) ([12901a0](https://www.github.com/googleapis/teeny-request/commit/12901a0)) - - -### Features - -* support lazy-reading from response stream ([#74](https://www.github.com/googleapis/teeny-request/issues/74)) ([f6db420](https://www.github.com/googleapis/teeny-request/commit/f6db420)) -* support reading from the request stream ([#67](https://www.github.com/googleapis/teeny-request/issues/67)) ([ae23054](https://www.github.com/googleapis/teeny-request/commit/ae23054)) - - -### Reverts - -* do not pipe fetch response into user stream ([#72](https://www.github.com/googleapis/teeny-request/issues/72)) ([6ec812e](https://www.github.com/googleapis/teeny-request/commit/6ec812e)) - -### [5.1.3](https://www.github.com/googleapis/teeny-request/compare/v5.1.2...v5.1.3) (2019-08-06) - - -### Bug Fixes - -* duplex stream does not implement methods like _read ([#64](https://www.github.com/googleapis/teeny-request/issues/64)) ([22ee26c](https://www.github.com/googleapis/teeny-request/commit/22ee26c)) - -### [5.1.2](https://www.github.com/googleapis/teeny-request/compare/v5.1.1...v5.1.2) (2019-08-06) - - -### Bug Fixes - -* **types:** expand method and header types ([#61](https://www.github.com/googleapis/teeny-request/issues/61)) ([c04d2f1](https://www.github.com/googleapis/teeny-request/commit/c04d2f1)) - -### [5.1.1](https://www.github.com/googleapis/teeny-request/compare/v5.1.0...v5.1.1) (2019-07-23) - - -### Bug Fixes - -* support lowercase proxy env vars ([#56](https://www.github.com/googleapis/teeny-request/issues/56)) ([0b3e433](https://www.github.com/googleapis/teeny-request/commit/0b3e433)) - -## [5.1.0](https://www.github.com/googleapis/teeny-request/compare/v5.0.0...v5.1.0) (2019-07-19) - - -### Features - -* support forever option ([#54](https://www.github.com/googleapis/teeny-request/issues/54)) ([746d70e](https://www.github.com/googleapis/teeny-request/commit/746d70e)) - -## [5.0.0](https://www.github.com/googleapis/teeny-request/compare/v4.0.0...v5.0.0) (2019-07-15) - - -### ⚠ BREAKING CHANGES - -* this is our first release since moving into googleapis org; in the theme of "better safe than sorry" we're releasing as 5.0.0. - -### Bug Fixes - -* export types independent of @types/request ([#44](https://www.github.com/googleapis/teeny-request/issues/44)) ([fbe2b77](https://www.github.com/googleapis/teeny-request/commit/fbe2b77)) - - -### Reverts - -* revert 4.0.0 release in favor of 5.0.0 release ([#52](https://www.github.com/googleapis/teeny-request/issues/52)) ([f24499e](https://www.github.com/googleapis/teeny-request/commit/f24499e)) diff --git a/reverse_engineering/node_modules/teeny-request/LICENSE b/reverse_engineering/node_modules/teeny-request/LICENSE deleted file mode 100644 index d645695..0000000 --- a/reverse_engineering/node_modules/teeny-request/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/reverse_engineering/node_modules/teeny-request/README.md b/reverse_engineering/node_modules/teeny-request/README.md deleted file mode 100644 index 80d2307..0000000 --- a/reverse_engineering/node_modules/teeny-request/README.md +++ /dev/null @@ -1,95 +0,0 @@ -[![Build Status](https://travis-ci.org/googleapis/teeny-request.svg?branch=master)](https://travis-ci.org/googleapis/teeny-request) - -# teeny-request - -Like `request`, but much smaller - and with less options. Uses `node-fetch` under the hood. -Pop it in where you would use `request`. Improves load and parse time of modules. - -```js -const request = require('teeny-request').teenyRequest; - -request({uri: 'http://ip.jsontest.com/'}, function (error, response, body) { - console.log('error:', error); // Print the error if one occurred - console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received - console.log('body:', body); // Print the JSON. -}); -``` - -For TypeScript, you can use `@types/request`. - -```ts -import {teenyRequest as request} from 'teeny-request'; -import r as * from 'request'; // Only for type declarations - -request({uri: 'http://ip.jsontest.com/'}, (error: any, response: r.Response, body: any) => { - console.log('error:', error); // Print the error if one occurred - console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received - console.log('body:', body); // Print the JSON. -}); -``` - - - -## teenyRequest(options, callback) - -Options are limited to the following - -* uri -* method, default GET -* headers -* json -* qs -* useQuerystring -* timeout in ms -* gzip -* proxy - -```ts -request({uri:'http://service.com/upload', method:'POST', json: {key:'value'}}, function(err,httpResponse,body){ /* ... */ }) -``` - -The callback argument gets 3 arguments: - - * An error when applicable (usually from http.ClientRequest object) - * An response object with statusCode, a statusMessage, and a body - * The third is the response body (JSON object) - -## defaults(options) - -Set default options for every `teenyRequest` call. - -```ts -let defaultRequest = teenyRequest.defaults({timeout: 60000}); - defaultRequest({uri: 'http://ip.jsontest.com/'}, function (error, response, body) { - assert.ifError(error); - assert.strictEqual(response.statusCode, 200); - console.log(body.ip); - assert.notEqual(body.ip, null); - - done(); - }); -``` - -## Proxy environment variables -If environment variables `HTTP_PROXY` or `HTTPS_PROXY` are set, they are respected. `NO_PROXY` is currently not implemented. - -## Building with Webpack 4+ -Since 4.0.0, Webpack uses `javascript/esm` for `.mjs` files which handles ESM more strictly compared to `javascript/auto`. If you get the error `Can't import the named export 'PassThrough' from non EcmaScript module`, please add the following to your Webpack config: - -```js -{ - test: /\.mjs$/, - type: 'javascript/auto', -}, -``` - -## Motivation -`request` has a ton of options and features and is accordingly large. Requiering a module incurs load and parse time. For -`request`, that is around 600ms. - -![Load time of request measured with require-so-slow](https://user-images.githubusercontent.com/101553/44694187-20357700-aa3a-11e8-9116-b8ae794cbc27.png) - -`teeny-request` doesn't have any of the bells and whistles that `request` has, but is so much faster to load. If startup time is an issue and you don't need much beyong a basic GET and POST, you can use `teeny-request`. - -## Thanks -Special thanks to [billyjacobson](https://github.com/billyjacobson) for suggesting the name. Please report all bugs to them. Just kidding. Please open issues. diff --git a/reverse_engineering/node_modules/teeny-request/build/src/TeenyStatistics.d.ts b/reverse_engineering/node_modules/teeny-request/build/src/TeenyStatistics.d.ts deleted file mode 100644 index 0e1385f..0000000 --- a/reverse_engineering/node_modules/teeny-request/build/src/TeenyStatistics.d.ts +++ /dev/null @@ -1,127 +0,0 @@ -/** - * @license - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -export interface TeenyStatisticsOptions { - /** - * A positive number representing when to issue a warning about the number - * of concurrent requests using teeny-request. - * Set to 0 to disable this warning. - * Corresponds to the TEENY_REQUEST_WARN_CONCURRENT_REQUESTS environment - * variable. - */ - concurrentRequests?: number; -} -declare type TeenyStatisticsConfig = Required; -/** - * TeenyStatisticsCounters is distinct from TeenyStatisticsOptions: - * Used when dumping current counters and other internal metrics. - */ -export interface TeenyStatisticsCounters { - concurrentRequests: number; -} -/** - * @class TeenyStatisticsWarning - * @extends Error - * @description While an error, is used for emitting warnings when - * meeting certain configured thresholds. - * @see process.emitWarning - */ -export declare class TeenyStatisticsWarning extends Error { - static readonly CONCURRENT_REQUESTS = "ConcurrentRequestsExceededWarning"; - threshold: number; - type: string; - value: number; - /** - * @param {string} message - */ - constructor(message: string); -} -/** - * @class TeenyStatistics - * @description Maintain various statistics internal to teeny-request. Tracking - * is not automatic and must be instrumented within teeny-request. - */ -export declare class TeenyStatistics { - /** - * @description A default threshold representing when to warn about excessive - * in-flight/concurrent requests. - * @type {number} - * @static - * @readonly - * @default 5000 - */ - static readonly DEFAULT_WARN_CONCURRENT_REQUESTS = 5000; - /** - * @type {TeenyStatisticsConfig} - * @private - */ - private _options; - /** - * @type {number} - * @private - * @default 0 - */ - private _concurrentRequests; - /** - * @type {boolean} - * @private - * @default false - */ - private _didConcurrentRequestWarn; - /** - * @param {TeenyStatisticsOptions} [opts] - */ - constructor(opts?: TeenyStatisticsOptions); - /** - * Returns a copy of the current options. - * @return {TeenyStatisticsOptions} - */ - getOptions(): TeenyStatisticsOptions; - /** - * Change configured statistics options. This will not preserve unspecified - * options that were previously specified, i.e. this is a reset of options. - * @param {TeenyStatisticsOptions} [opts] - * @returns {TeenyStatisticsConfig} The previous options. - * @see _prepareOptions - */ - setOptions(opts?: TeenyStatisticsOptions): TeenyStatisticsConfig; - /** - * @readonly - * @return {TeenyStatisticsCounters} - */ - get counters(): TeenyStatisticsCounters; - /** - * @description Should call this right before making a request. - */ - requestStarting(): void; - /** - * @description When using `requestStarting`, call this after the request - * has finished. - */ - requestFinished(): void; - /** - * Configuration Precedence: - * 1. Dependency inversion via defined option. - * 2. Global numeric environment variable. - * 3. Built-in default. - * This will not preserve unspecified options previously specified. - * @param {TeenyStatisticsOptions} [opts] - * @returns {TeenyStatisticsOptions} - * @private - */ - private static _prepareOptions; -} -export {}; diff --git a/reverse_engineering/node_modules/teeny-request/build/src/TeenyStatistics.js b/reverse_engineering/node_modules/teeny-request/build/src/TeenyStatistics.js deleted file mode 100644 index 67d0b31..0000000 --- a/reverse_engineering/node_modules/teeny-request/build/src/TeenyStatistics.js +++ /dev/null @@ -1,156 +0,0 @@ -"use strict"; -/** - * @license - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TeenyStatistics = exports.TeenyStatisticsWarning = void 0; -/** - * @class TeenyStatisticsWarning - * @extends Error - * @description While an error, is used for emitting warnings when - * meeting certain configured thresholds. - * @see process.emitWarning - */ -class TeenyStatisticsWarning extends Error { - /** - * @param {string} message - */ - constructor(message) { - super(message); - this.threshold = 0; - this.type = ''; - this.value = 0; - this.name = this.constructor.name; - Error.captureStackTrace(this, this.constructor); - } -} -exports.TeenyStatisticsWarning = TeenyStatisticsWarning; -TeenyStatisticsWarning.CONCURRENT_REQUESTS = 'ConcurrentRequestsExceededWarning'; -/** - * @class TeenyStatistics - * @description Maintain various statistics internal to teeny-request. Tracking - * is not automatic and must be instrumented within teeny-request. - */ -class TeenyStatistics { - /** - * @param {TeenyStatisticsOptions} [opts] - */ - constructor(opts) { - /** - * @type {number} - * @private - * @default 0 - */ - this._concurrentRequests = 0; - /** - * @type {boolean} - * @private - * @default false - */ - this._didConcurrentRequestWarn = false; - this._options = TeenyStatistics._prepareOptions(opts); - } - /** - * Returns a copy of the current options. - * @return {TeenyStatisticsOptions} - */ - getOptions() { - return Object.assign({}, this._options); - } - /** - * Change configured statistics options. This will not preserve unspecified - * options that were previously specified, i.e. this is a reset of options. - * @param {TeenyStatisticsOptions} [opts] - * @returns {TeenyStatisticsConfig} The previous options. - * @see _prepareOptions - */ - setOptions(opts) { - const oldOpts = this._options; - this._options = TeenyStatistics._prepareOptions(opts); - return oldOpts; - } - /** - * @readonly - * @return {TeenyStatisticsCounters} - */ - get counters() { - return { - concurrentRequests: this._concurrentRequests, - }; - } - /** - * @description Should call this right before making a request. - */ - requestStarting() { - this._concurrentRequests++; - if (this._options.concurrentRequests > 0 && - this._concurrentRequests >= this._options.concurrentRequests && - !this._didConcurrentRequestWarn) { - this._didConcurrentRequestWarn = true; - const warning = new TeenyStatisticsWarning('Possible excessive concurrent requests detected. ' + - this._concurrentRequests + - ' requests in-flight, which exceeds the configured threshold of ' + - this._options.concurrentRequests + - '. Use the TEENY_REQUEST_WARN_CONCURRENT_REQUESTS environment ' + - 'variable or the concurrentRequests option of teeny-request to ' + - 'increase or disable (0) this warning.'); - warning.type = TeenyStatisticsWarning.CONCURRENT_REQUESTS; - warning.value = this._concurrentRequests; - warning.threshold = this._options.concurrentRequests; - process.emitWarning(warning); - } - } - /** - * @description When using `requestStarting`, call this after the request - * has finished. - */ - requestFinished() { - // TODO negative? - this._concurrentRequests--; - } - /** - * Configuration Precedence: - * 1. Dependency inversion via defined option. - * 2. Global numeric environment variable. - * 3. Built-in default. - * This will not preserve unspecified options previously specified. - * @param {TeenyStatisticsOptions} [opts] - * @returns {TeenyStatisticsOptions} - * @private - */ - static _prepareOptions({ concurrentRequests: diConcurrentRequests, } = {}) { - let concurrentRequests = this.DEFAULT_WARN_CONCURRENT_REQUESTS; - const envConcurrentRequests = Number(process.env.TEENY_REQUEST_WARN_CONCURRENT_REQUESTS); - if (diConcurrentRequests !== undefined) { - concurrentRequests = diConcurrentRequests; - } - else if (!Number.isNaN(envConcurrentRequests)) { - concurrentRequests = envConcurrentRequests; - } - return { concurrentRequests }; - } -} -exports.TeenyStatistics = TeenyStatistics; -/** - * @description A default threshold representing when to warn about excessive - * in-flight/concurrent requests. - * @type {number} - * @static - * @readonly - * @default 5000 - */ -TeenyStatistics.DEFAULT_WARN_CONCURRENT_REQUESTS = 5000; -//# sourceMappingURL=TeenyStatistics.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/teeny-request/build/src/TeenyStatistics.js.map b/reverse_engineering/node_modules/teeny-request/build/src/TeenyStatistics.js.map deleted file mode 100644 index ef10f33..0000000 --- a/reverse_engineering/node_modules/teeny-request/build/src/TeenyStatistics.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"TeenyStatistics.js","sourceRoot":"","sources":["../../src/TeenyStatistics.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAuBH;;;;;;GAMG;AACH,MAAa,sBAAuB,SAAQ,KAAK;IAO/C;;OAEG;IACH,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QARV,cAAS,GAAG,CAAC,CAAC;QACd,SAAI,GAAG,EAAE,CAAC;QACV,UAAK,GAAG,CAAC,CAAC;QAOf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;;AAdH,wDAeC;AAdiB,0CAAmB,GAAG,mCAAmC,CAAC;AAgB5E;;;;GAIG;AACH,MAAa,eAAe;IA+B1B;;OAEG;IACH,YAAY,IAA6B;QAjBzC;;;;WAIG;QACK,wBAAmB,GAAG,CAAC,CAAC;QAEhC;;;;WAIG;QACK,8BAAyB,GAAG,KAAK,CAAC;QAMxC,IAAI,CAAC,QAAQ,GAAG,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;IAED;;;OAGG;IACH,UAAU;QACR,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;;OAMG;IACH,UAAU,CAAC,IAA6B;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACtD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACH,IAAI,QAAQ;QACV,OAAO;YACL,kBAAkB,EAAE,IAAI,CAAC,mBAAmB;SAC7C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,eAAe;QACb,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,IACE,IAAI,CAAC,QAAQ,CAAC,kBAAkB,GAAG,CAAC;YACpC,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB;YAC5D,CAAC,IAAI,CAAC,yBAAyB,EAC/B;YACA,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;YACtC,MAAM,OAAO,GAAG,IAAI,sBAAsB,CACxC,mDAAmD;gBACjD,IAAI,CAAC,mBAAmB;gBACxB,iEAAiE;gBACjE,IAAI,CAAC,QAAQ,CAAC,kBAAkB;gBAChC,+DAA+D;gBAC/D,gEAAgE;gBAChE,uCAAuC,CAC1C,CAAC;YACF,OAAO,CAAC,IAAI,GAAG,sBAAsB,CAAC,mBAAmB,CAAC;YAC1D,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC;YACzC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YACrD,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;SAC9B;IACH,CAAC;IAED;;;OAGG;IACH,eAAe;QACb,iBAAiB;QACjB,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAED;;;;;;;;;OASG;IACK,MAAM,CAAC,eAAe,CAAC,EAC7B,kBAAkB,EAAE,oBAAoB,MACd,EAAE;QAC5B,IAAI,kBAAkB,GAAG,IAAI,CAAC,gCAAgC,CAAC;QAE/D,MAAM,qBAAqB,GAAG,MAAM,CAClC,OAAO,CAAC,GAAG,CAAC,sCAAsC,CACnD,CAAC;QACF,IAAI,oBAAoB,KAAK,SAAS,EAAE;YACtC,kBAAkB,GAAG,oBAAoB,CAAC;SAC3C;aAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAAE;YAC/C,kBAAkB,GAAG,qBAAqB,CAAC;SAC5C;QAED,OAAO,EAAC,kBAAkB,EAAC,CAAC;IAC9B,CAAC;;AAnIH,0CAoIC;AAnIC;;;;;;;GAOG;AACa,gDAAgC,GAAG,IAAI,CAAC"} \ No newline at end of file diff --git a/reverse_engineering/node_modules/teeny-request/build/src/agents.d.ts b/reverse_engineering/node_modules/teeny-request/build/src/agents.d.ts deleted file mode 100644 index 21eb043..0000000 --- a/reverse_engineering/node_modules/teeny-request/build/src/agents.d.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/// -import { Agent as HTTPAgent } from 'http'; -import { Agent as HTTPSAgent } from 'https'; -import { Options } from './'; -export declare const pool: Map; -export declare type HttpAnyAgent = HTTPAgent | HTTPSAgent; -/** - * Returns a custom request Agent if one is found, otherwise returns undefined - * which will result in the global http(s) Agent being used. - * @private - * @param {string} uri The request uri - * @param {Options} reqOpts The request options - * @returns {HttpAnyAgent|undefined} - */ -export declare function getAgent(uri: string, reqOpts: Options): HttpAnyAgent | undefined; diff --git a/reverse_engineering/node_modules/teeny-request/build/src/agents.js b/reverse_engineering/node_modules/teeny-request/build/src/agents.js deleted file mode 100644 index 7279859..0000000 --- a/reverse_engineering/node_modules/teeny-request/build/src/agents.js +++ /dev/null @@ -1,61 +0,0 @@ -"use strict"; -/** - * @license - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getAgent = exports.pool = void 0; -const http_1 = require("http"); -const https_1 = require("https"); -// eslint-disable-next-line node/no-deprecated-api -const url_1 = require("url"); -exports.pool = new Map(); -/** - * Returns a custom request Agent if one is found, otherwise returns undefined - * which will result in the global http(s) Agent being used. - * @private - * @param {string} uri The request uri - * @param {Options} reqOpts The request options - * @returns {HttpAnyAgent|undefined} - */ -function getAgent(uri, reqOpts) { - const isHttp = uri.startsWith('http://'); - const proxy = reqOpts.proxy || - process.env.HTTP_PROXY || - process.env.http_proxy || - process.env.HTTPS_PROXY || - process.env.https_proxy; - const poolOptions = Object.assign({}, reqOpts.pool); - if (proxy) { - // tslint:disable-next-line variable-name - const Agent = isHttp - ? require('http-proxy-agent') - : require('https-proxy-agent'); - const proxyOpts = { ...url_1.parse(proxy), ...poolOptions }; - return new Agent(proxyOpts); - } - let key = isHttp ? 'http' : 'https'; - if (reqOpts.forever) { - key += ':forever'; - if (!exports.pool.has(key)) { - // tslint:disable-next-line variable-name - const Agent = isHttp ? http_1.Agent : https_1.Agent; - exports.pool.set(key, new Agent({ ...poolOptions, keepAlive: true })); - } - } - return exports.pool.get(key); -} -exports.getAgent = getAgent; -//# sourceMappingURL=agents.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/teeny-request/build/src/agents.js.map b/reverse_engineering/node_modules/teeny-request/build/src/agents.js.map deleted file mode 100644 index 1f9ac04..0000000 --- a/reverse_engineering/node_modules/teeny-request/build/src/agents.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/agents.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAEH,+BAAwC;AACxC,iCAA0C;AAC1C,kDAAkD;AAClD,6BAA0B;AAGb,QAAA,IAAI,GAAG,IAAI,GAAG,EAAqB,CAAC;AAIjD;;;;;;;GAOG;AACH,SAAgB,QAAQ,CACtB,GAAW,EACX,OAAgB;IAEhB,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,KAAK,GACT,OAAO,CAAC,KAAK;QACb,OAAO,CAAC,GAAG,CAAC,UAAU;QACtB,OAAO,CAAC,GAAG,CAAC,UAAU;QACtB,OAAO,CAAC,GAAG,CAAC,WAAW;QACvB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IAE1B,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpD,IAAI,KAAK,EAAE;QACT,yCAAyC;QACzC,MAAM,KAAK,GAAG,MAAM;YAClB,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC;YAC7B,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAEjC,MAAM,SAAS,GAAG,EAAC,GAAG,WAAK,CAAC,KAAK,CAAC,EAAE,GAAG,WAAW,EAAC,CAAC;QACpD,OAAO,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;KAC7B;IAED,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAEpC,IAAI,OAAO,CAAC,OAAO,EAAE;QACnB,GAAG,IAAI,UAAU,CAAC;QAElB,IAAI,CAAC,YAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAClB,yCAAyC;YACzC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,YAAS,CAAC,CAAC,CAAC,aAAU,CAAC;YAC9C,YAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,EAAC,GAAG,WAAW,EAAE,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC;SAC7D;KACF;IAED,OAAO,YAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC;AArCD,4BAqCC"} \ No newline at end of file diff --git a/reverse_engineering/node_modules/teeny-request/build/src/index.d.ts b/reverse_engineering/node_modules/teeny-request/build/src/index.d.ts deleted file mode 100644 index e20ca1a..0000000 --- a/reverse_engineering/node_modules/teeny-request/build/src/index.d.ts +++ /dev/null @@ -1,79 +0,0 @@ -/** - * @license - * Copyright 2018 Google LLC - * - * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/// -import { Agent, AgentOptions as HttpsAgentOptions } from 'https'; -import { AgentOptions as HttpAgentOptions } from 'http'; -import { PassThrough, Readable } from 'stream'; -import { TeenyStatistics } from './TeenyStatistics'; -export interface CoreOptions { - method?: string; - timeout?: number; - gzip?: boolean; - json?: any; - headers?: Headers; - body?: string | {}; - useQuerystring?: boolean; - qs?: any; - proxy?: string; - multipart?: RequestPart[]; - forever?: boolean; - pool?: HttpsAgentOptions | HttpAgentOptions; -} -export interface OptionsWithUri extends CoreOptions { - uri: string; -} -export interface OptionsWithUrl extends CoreOptions { - url: string; -} -export declare type Options = OptionsWithUri | OptionsWithUrl; -export interface Request extends PassThrough { - agent: Agent | false; - headers: Headers; - href?: string; -} -export interface Response { - statusCode: number; - headers: Headers; - body: T; - request: Request; - statusMessage?: string; -} -export interface RequestPart { - body: string | Readable; -} -export interface RequestCallback { - (err: Error | null, response: Response, body?: T): void; -} -export declare class RequestError extends Error { - code?: number; -} -interface Headers { - [index: string]: any; -} -declare function teenyRequest(reqOpts: Options): Request; -declare namespace teenyRequest { - var defaults: (defaults: CoreOptions) => (reqOpts: Options, callback?: RequestCallback | undefined) => void | Request; - var stats: TeenyStatistics; - var resetStats: () => void; -} -declare function teenyRequest(reqOpts: Options, callback: RequestCallback): void; -declare namespace teenyRequest { - var defaults: (defaults: CoreOptions) => (reqOpts: Options, callback?: RequestCallback | undefined) => void | Request; - var stats: TeenyStatistics; - var resetStats: () => void; -} -export { teenyRequest }; diff --git a/reverse_engineering/node_modules/teeny-request/build/src/index.js b/reverse_engineering/node_modules/teeny-request/build/src/index.js deleted file mode 100644 index f209888..0000000 --- a/reverse_engineering/node_modules/teeny-request/build/src/index.js +++ /dev/null @@ -1,253 +0,0 @@ -"use strict"; -/** - * @license - * Copyright 2018 Google LLC - * - * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.teenyRequest = exports.RequestError = void 0; -const node_fetch_1 = require("node-fetch"); -const stream_1 = require("stream"); -const uuid = require("uuid"); -const agents_1 = require("./agents"); -const TeenyStatistics_1 = require("./TeenyStatistics"); -// eslint-disable-next-line @typescript-eslint/no-var-requires -const streamEvents = require('stream-events'); -class RequestError extends Error { -} -exports.RequestError = RequestError; -/** - * Convert options from Request to Fetch format - * @private - * @param reqOpts Request options - */ -function requestToFetchOptions(reqOpts) { - const options = { - method: reqOpts.method || 'GET', - ...(reqOpts.timeout && { timeout: reqOpts.timeout }), - ...(typeof reqOpts.gzip === 'boolean' && { compress: reqOpts.gzip }), - }; - if (typeof reqOpts.json === 'object') { - // Add Content-type: application/json header - reqOpts.headers = reqOpts.headers || {}; - reqOpts.headers['Content-Type'] = 'application/json'; - // Set body to JSON representation of value - options.body = JSON.stringify(reqOpts.json); - } - else { - if (Buffer.isBuffer(reqOpts.body)) { - options.body = reqOpts.body; - } - else if (typeof reqOpts.body !== 'string') { - options.body = JSON.stringify(reqOpts.body); - } - else { - options.body = reqOpts.body; - } - } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - options.headers = reqOpts.headers; - let uri = (reqOpts.uri || - reqOpts.url); - if (!uri) { - throw new Error('Missing uri or url in reqOpts.'); - } - if (reqOpts.useQuerystring === true || typeof reqOpts.qs === 'object') { - // eslint-disable-next-line @typescript-eslint/no-var-requires - const qs = require('querystring'); - const params = qs.stringify(reqOpts.qs); - uri = uri + '?' + params; - } - options.agent = agents_1.getAgent(uri, reqOpts); - return { uri, options }; -} -/** - * Convert a response from `fetch` to `request` format. - * @private - * @param opts The `request` options used to create the request. - * @param res The Fetch response - * @returns A `request` response object - */ -function fetchToRequestResponse(opts, res) { - const request = {}; - request.agent = opts.agent || false; - request.headers = (opts.headers || {}); - request.href = res.url; - // headers need to be converted from a map to an obj - const resHeaders = {}; - res.headers.forEach((value, key) => (resHeaders[key] = value)); - const response = Object.assign(res.body, { - statusCode: res.status, - statusMessage: res.statusText, - request, - body: res.body, - headers: resHeaders, - toJSON: () => ({ headers: resHeaders }), - }); - return response; -} -/** - * Create POST body from two parts as multipart/related content-type - * @private - * @param boundary - * @param multipart - */ -function createMultipartStream(boundary, multipart) { - const finale = `--${boundary}--`; - const stream = new stream_1.PassThrough(); - for (const part of multipart) { - const preamble = `--${boundary}\r\nContent-Type: ${part['Content-Type']}\r\n\r\n`; - stream.write(preamble); - if (typeof part.body === 'string') { - stream.write(part.body); - stream.write('\r\n'); - } - else { - part.body.pipe(stream, { end: false }); - part.body.on('end', () => { - stream.write('\r\n'); - stream.write(finale); - stream.end(); - }); - } - } - return stream; -} -function teenyRequest(reqOpts, callback) { - const { uri, options } = requestToFetchOptions(reqOpts); - const multipart = reqOpts.multipart; - if (reqOpts.multipart && multipart.length === 2) { - if (!callback) { - // TODO: add support for multipart uploads through streaming - throw new Error('Multipart without callback is not implemented.'); - } - const boundary = uuid.v4(); - options.headers['Content-Type'] = `multipart/related; boundary=${boundary}`; - options.body = createMultipartStream(boundary, multipart); - // Multipart upload - teenyRequest.stats.requestStarting(); - node_fetch_1.default(uri, options).then(res => { - teenyRequest.stats.requestFinished(); - const header = res.headers.get('content-type'); - const response = fetchToRequestResponse(options, res); - const body = response.body; - if (header === 'application/json' || - header === 'application/json; charset=utf-8') { - res.json().then(json => { - response.body = json; - callback(null, response, json); - }, (err) => { - callback(err, response, body); - }); - return; - } - res.text().then(text => { - response.body = text; - callback(null, response, text); - }, err => { - callback(err, response, body); - }); - }, err => { - teenyRequest.stats.requestFinished(); - callback(err, null, null); - }); - return; - } - if (callback === undefined) { - // Stream mode - const requestStream = streamEvents(new stream_1.PassThrough()); - // eslint-disable-next-line @typescript-eslint/no-explicit-any - let responseStream; - requestStream.once('reading', () => { - if (responseStream) { - responseStream.pipe(requestStream); - } - else { - requestStream.once('response', () => { - responseStream.pipe(requestStream); - }); - } - }); - options.compress = false; - teenyRequest.stats.requestStarting(); - node_fetch_1.default(uri, options).then(res => { - teenyRequest.stats.requestFinished(); - responseStream = res.body; - responseStream.on('error', (err) => { - requestStream.emit('error', err); - }); - const response = fetchToRequestResponse(options, res); - requestStream.emit('response', response); - }, err => { - teenyRequest.stats.requestFinished(); - requestStream.emit('error', err); - }); - // fetch doesn't supply the raw HTTP stream, instead it - // returns a PassThrough piped from the HTTP response - // stream. - return requestStream; - } - // GET or POST with callback - teenyRequest.stats.requestStarting(); - node_fetch_1.default(uri, options).then(res => { - teenyRequest.stats.requestFinished(); - const header = res.headers.get('content-type'); - const response = fetchToRequestResponse(options, res); - const body = response.body; - if (header === 'application/json' || - header === 'application/json; charset=utf-8') { - if (response.statusCode === 204) { - // Probably a DELETE - callback(null, response, body); - return; - } - res.json().then(json => { - response.body = json; - callback(null, response, json); - }, err => { - callback(err, response, body); - }); - return; - } - res.text().then(text => { - const response = fetchToRequestResponse(options, res); - response.body = text; - callback(null, response, text); - }, err => { - callback(err, response, body); - }); - }, err => { - teenyRequest.stats.requestFinished(); - callback(err, null, null); - }); - return; -} -exports.teenyRequest = teenyRequest; -teenyRequest.defaults = (defaults) => { - return (reqOpts, callback) => { - const opts = { ...defaults, ...reqOpts }; - if (callback === undefined) { - return teenyRequest(opts); - } - teenyRequest(opts, callback); - }; -}; -/** - * Single instance of an interface for keeping track of things. - */ -teenyRequest.stats = new TeenyStatistics_1.TeenyStatistics(); -teenyRequest.resetStats = () => { - teenyRequest.stats = new TeenyStatistics_1.TeenyStatistics(teenyRequest.stats.getOptions()); -}; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/reverse_engineering/node_modules/teeny-request/build/src/index.js.map b/reverse_engineering/node_modules/teeny-request/build/src/index.js.map deleted file mode 100644 index 0369b7b..0000000 --- a/reverse_engineering/node_modules/teeny-request/build/src/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAIH,2CAAuC;AACvC,mCAA6C;AAC7C,6BAA6B;AAC7B,qCAAkC;AAClC,uDAAkD;AAClD,8DAA8D;AAC9D,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AAqD9C,MAAa,YAAa,SAAQ,KAAK;CAEtC;AAFD,oCAEC;AAOD;;;;GAIG;AACH,SAAS,qBAAqB,CAAC,OAAgB;IAC7C,MAAM,OAAO,GAAkB;QAC7B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;QAC/B,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAC,CAAC;QAClD,GAAG,CAAC,OAAO,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,EAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAC,CAAC;KACnE,CAAC;IAEF,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;QACpC,4CAA4C;QAC5C,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QACxC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;QAErD,2CAA2C;QAC3C,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KAC7C;SAAM;QACL,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACjC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;SAC7B;aAAM,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;YAC3C,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC7C;aAAM;YACL,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;SAC7B;KACF;IAED,8DAA8D;IAC9D,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAc,CAAC;IAEzC,IAAI,GAAG,GAAG,CAAE,OAA0B,CAAC,GAAG;QACvC,OAA0B,CAAC,GAAG,CAAW,CAAC;IAE7C,IAAI,CAAC,GAAG,EAAE;QACR,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;KACnD;IAED,IAAI,OAAO,CAAC,cAAc,KAAK,IAAI,IAAI,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ,EAAE;QACrE,8DAA8D;QAC9D,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACxC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,MAAM,CAAC;KAC1B;IAED,OAAO,CAAC,KAAK,GAAG,iBAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAEvC,OAAO,EAAC,GAAG,EAAE,OAAO,EAAC,CAAC;AACxB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,sBAAsB,CAAC,IAAmB,EAAE,GAAe;IAClE,MAAM,OAAO,GAAG,EAAa,CAAC;IAC9B,OAAO,CAAC,KAAK,GAAI,IAAI,CAAC,KAAe,IAAI,KAAK,CAAC;IAC/C,OAAO,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAY,CAAC;IAClD,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC;IACvB,oDAAoD;IACpD,MAAM,UAAU,GAAG,EAAa,CAAC;IACjC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAE/D,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;QACvC,UAAU,EAAE,GAAG,CAAC,MAAM;QACtB,aAAa,EAAE,GAAG,CAAC,UAAU;QAC7B,OAAO;QACP,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,OAAO,EAAE,UAAU;QACnB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAC,OAAO,EAAE,UAAU,EAAC,CAAC;KACtC,CAAC,CAAC;IAEH,OAAO,QAAoB,CAAC;AAC9B,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,QAAgB,EAAE,SAAwB;IACvE,MAAM,MAAM,GAAG,KAAK,QAAQ,IAAI,CAAC;IACjC,MAAM,MAAM,GAAgB,IAAI,oBAAW,EAAE,CAAC;IAE9C,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE;QAC5B,MAAM,QAAQ,GAAG,KAAK,QAAQ,qBAC3B,IAAoC,CAAC,cAAc,CACtD,UAAU,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACvB,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;YACjC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SACtB;aAAM;YACL,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAC,GAAG,EAAE,KAAK,EAAC,CAAC,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACvB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACrB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACrB,MAAM,CAAC,GAAG,EAAE,CAAC;YACf,CAAC,CAAC,CAAC;SACJ;KACF;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAID,SAAS,YAAY,CACnB,OAAgB,EAChB,QAA0B;IAE1B,MAAM,EAAC,GAAG,EAAE,OAAO,EAAC,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAEtD,MAAM,SAAS,GAAG,OAAO,CAAC,SAA0B,CAAC;IACrD,IAAI,OAAO,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;QAC/C,IAAI,CAAC,QAAQ,EAAE;YACb,4DAA4D;YAC5D,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;SACnE;QACD,MAAM,QAAQ,GAAW,IAAI,CAAC,EAAE,EAAE,CAAC;QAClC,OAAO,CAAC,OAAmB,CAC1B,cAAc,CACf,GAAG,+BAA+B,QAAQ,EAAE,CAAC;QAC9C,OAAO,CAAC,IAAI,GAAG,qBAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAE1D,mBAAmB;QACnB,YAAY,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;QACrC,oBAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CACtB,GAAG,CAAC,EAAE;YACJ,YAAY,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC/C,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACtD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YAC3B,IACE,MAAM,KAAK,kBAAkB;gBAC7B,MAAM,KAAK,iCAAiC,EAC5C;gBACA,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CACb,IAAI,CAAC,EAAE;oBACL,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;oBACrB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;gBACjC,CAAC,EACD,CAAC,GAAU,EAAE,EAAE;oBACb,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAChC,CAAC,CACF,CAAC;gBACF,OAAO;aACR;YAED,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CACb,IAAI,CAAC,EAAE;gBACL,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;gBACrB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;YACjC,CAAC,EACD,GAAG,CAAC,EAAE;gBACJ,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;YAChC,CAAC,CACF,CAAC;QACJ,CAAC,EACD,GAAG,CAAC,EAAE;YACJ,YAAY,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;YACrC,QAAQ,CAAC,GAAG,EAAE,IAAK,EAAE,IAAI,CAAC,CAAC;QAC7B,CAAC,CACF,CAAC;QACF,OAAO;KACR;IAED,IAAI,QAAQ,KAAK,SAAS,EAAE;QAC1B,cAAc;QACd,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,oBAAW,EAAE,CAAC,CAAC;QACtD,8DAA8D;QAC9D,IAAI,cAAmB,CAAC;QACxB,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE;YACjC,IAAI,cAAc,EAAE;gBAClB,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;aACpC;iBAAM;gBACL,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE;oBAClC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBACrC,CAAC,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;QAEzB,YAAY,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;QACrC,oBAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CACtB,GAAG,CAAC,EAAE;YACJ,YAAY,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;YACrC,cAAc,GAAG,GAAG,CAAC,IAAI,CAAC;YAE1B,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;gBACxC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACtD,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC3C,CAAC,EACD,GAAG,CAAC,EAAE;YACJ,YAAY,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;YACrC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACnC,CAAC,CACF,CAAC;QAEF,uDAAuD;QACvD,qDAAqD;QACrD,UAAU;QACV,OAAO,aAAwB,CAAC;KACjC;IAED,4BAA4B;IAC5B,YAAY,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;IACrC,oBAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CACtB,GAAG,CAAC,EAAE;QACJ,YAAY,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC3B,IACE,MAAM,KAAK,kBAAkB;YAC7B,MAAM,KAAK,iCAAiC,EAC5C;YACA,IAAI,QAAQ,CAAC,UAAU,KAAK,GAAG,EAAE;gBAC/B,oBAAoB;gBACpB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAC/B,OAAO;aACR;YACD,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CACb,IAAI,CAAC,EAAE;gBACL,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;gBACrB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;YACjC,CAAC,EACD,GAAG,CAAC,EAAE;gBACJ,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;YAChC,CAAC,CACF,CAAC;YACF,OAAO;SACR;QAED,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CACb,IAAI,CAAC,EAAE;YACL,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACtD,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;YACrB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QACjC,CAAC,EACD,GAAG,CAAC,EAAE;YACJ,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC,CACF,CAAC;IACJ,CAAC,EACD,GAAG,CAAC,EAAE;QACJ,YAAY,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;QACrC,QAAQ,CAAC,GAAG,EAAE,IAAK,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC,CACF,CAAC;IACF,OAAO;AACT,CAAC;AAqBO,oCAAY;AAnBpB,YAAY,CAAC,QAAQ,GAAG,CAAC,QAAqB,EAAE,EAAE;IAChD,OAAO,CAAC,OAAgB,EAAE,QAA0B,EAAkB,EAAE;QACtE,MAAM,IAAI,GAAG,EAAC,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAC,CAAC;QACvC,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;SAC3B;QACD,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC/B,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF;;GAEG;AACH,YAAY,CAAC,KAAK,GAAG,IAAI,iCAAe,EAAE,CAAC;AAE3C,YAAY,CAAC,UAAU,GAAG,GAAS,EAAE;IACnC,YAAY,CAAC,KAAK,GAAG,IAAI,iCAAe,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;AAC5E,CAAC,CAAC"} \ No newline at end of file diff --git a/reverse_engineering/node_modules/teeny-request/package.json b/reverse_engineering/node_modules/teeny-request/package.json deleted file mode 100644 index 9e13986..0000000 --- a/reverse_engineering/node_modules/teeny-request/package.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "_from": "teeny-request@^7.0.0", - "_id": "teeny-request@7.1.1", - "_inBundle": false, - "_integrity": "sha512-iwY6rkW5DDGq8hE2YgNQlKbptYpY5Nn2xecjQiNjOXWbKzPGUfmeUBCSQbbr306d7Z7U2N0TPl+/SwYRfua1Dg==", - "_location": "/teeny-request", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "teeny-request@^7.0.0", - "name": "teeny-request", - "escapedName": "teeny-request", - "rawSpec": "^7.0.0", - "saveSpec": null, - "fetchSpec": "^7.0.0" - }, - "_requiredBy": [ - "/@google-cloud/common" - ], - "_resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-7.1.1.tgz", - "_shasum": "2b0d156f4a8ad81de44303302ba8d7f1f05e20e6", - "_spec": "teeny-request@^7.0.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/@google-cloud/common", - "author": { - "name": "fhinkel" - }, - "bugs": { - "url": "https://github.com/googleapis/teeny-request/issues" - }, - "bundleDependencies": false, - "dependencies": { - "http-proxy-agent": "^4.0.0", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.1", - "stream-events": "^1.0.5", - "uuid": "^8.0.0" - }, - "deprecated": false, - "description": "Like request, but smaller.", - "devDependencies": { - "@compodoc/compodoc": "^1.1.9", - "@types/mocha": "^8.0.0", - "@types/node-fetch": "^2.5.7", - "@types/sinon": "^10.0.0", - "@types/uuid": "^8.0.0", - "c8": "^7.0.0", - "codecov": "^3.1.0", - "gts": "^3.0.0", - "linkinator": "^2.0.0", - "mocha": "^8.0.0", - "nock": "^13.0.0", - "sinon": "^10.0.0", - "typescript": "^3.8.3" - }, - "engines": { - "node": ">=10" - }, - "files": [ - "build/src" - ], - "homepage": "https://github.com/googleapis/teeny-request#readme", - "keywords": [ - "request", - "node-fetch", - "fetch" - ], - "license": "Apache-2.0", - "main": "./build/src/index.js", - "name": "teeny-request", - "nyc": { - "exclude": [ - "build/test" - ] - }, - "repository": { - "type": "git", - "url": "git+https://github.com/googleapis/teeny-request.git" - }, - "scripts": { - "clean": "gts clean", - "compile": "tsc -p .", - "docs": "compodoc src/", - "docs-test": "linkinator docs", - "fix": "gts fix", - "lint": "gts check", - "precompile": "gts clean", - "predocs-test": "npm run docs", - "prepare": "npm run compile", - "pretest": "npm run compile", - "samples-test": "echo no sample tests!", - "system-test": "echo no system tests!", - "test": "c8 mocha build/test" - }, - "types": "./build/src/index.d.ts", - "version": "7.1.1" -} diff --git a/reverse_engineering/node_modules/util-deprecate/History.md b/reverse_engineering/node_modules/util-deprecate/History.md deleted file mode 100644 index acc8675..0000000 --- a/reverse_engineering/node_modules/util-deprecate/History.md +++ /dev/null @@ -1,16 +0,0 @@ - -1.0.2 / 2015-10-07 -================== - - * use try/catch when checking `localStorage` (#3, @kumavis) - -1.0.1 / 2014-11-25 -================== - - * browser: use `console.warn()` for deprecation calls - * browser: more jsdocs - -1.0.0 / 2014-04-30 -================== - - * initial commit diff --git a/reverse_engineering/node_modules/util-deprecate/LICENSE b/reverse_engineering/node_modules/util-deprecate/LICENSE deleted file mode 100644 index 6a60e8c..0000000 --- a/reverse_engineering/node_modules/util-deprecate/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -(The MIT License) - -Copyright (c) 2014 Nathan Rajlich - -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/reverse_engineering/node_modules/util-deprecate/README.md b/reverse_engineering/node_modules/util-deprecate/README.md deleted file mode 100644 index 75622fa..0000000 --- a/reverse_engineering/node_modules/util-deprecate/README.md +++ /dev/null @@ -1,53 +0,0 @@ -util-deprecate -============== -### The Node.js `util.deprecate()` function with browser support - -In Node.js, this module simply re-exports the `util.deprecate()` function. - -In the web browser (i.e. via browserify), a browser-specific implementation -of the `util.deprecate()` function is used. - - -## API - -A `deprecate()` function is the only thing exposed by this module. - -``` javascript -// setup: -exports.foo = deprecate(foo, 'foo() is deprecated, use bar() instead'); - - -// users see: -foo(); -// foo() is deprecated, use bar() instead -foo(); -foo(); -``` - - -## License - -(The MIT License) - -Copyright (c) 2014 Nathan Rajlich - -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/reverse_engineering/node_modules/util-deprecate/browser.js b/reverse_engineering/node_modules/util-deprecate/browser.js deleted file mode 100644 index 549ae2f..0000000 --- a/reverse_engineering/node_modules/util-deprecate/browser.js +++ /dev/null @@ -1,67 +0,0 @@ - -/** - * Module exports. - */ - -module.exports = deprecate; - -/** - * Mark that a method should not be used. - * Returns a modified function which warns once by default. - * - * If `localStorage.noDeprecation = true` is set, then it is a no-op. - * - * If `localStorage.throwDeprecation = true` is set, then deprecated functions - * will throw an Error when invoked. - * - * If `localStorage.traceDeprecation = true` is set, then deprecated functions - * will invoke `console.trace()` instead of `console.error()`. - * - * @param {Function} fn - the function to deprecate - * @param {String} msg - the string to print to the console when `fn` is invoked - * @returns {Function} a new "deprecated" version of `fn` - * @api public - */ - -function deprecate (fn, msg) { - if (config('noDeprecation')) { - return fn; - } - - var warned = false; - function deprecated() { - if (!warned) { - if (config('throwDeprecation')) { - throw new Error(msg); - } else if (config('traceDeprecation')) { - console.trace(msg); - } else { - console.warn(msg); - } - warned = true; - } - return fn.apply(this, arguments); - } - - return deprecated; -} - -/** - * Checks `localStorage` for boolean values for the given `name`. - * - * @param {String} name - * @returns {Boolean} - * @api private - */ - -function config (name) { - // accessing global.localStorage can trigger a DOMException in sandboxed iframes - try { - if (!global.localStorage) return false; - } catch (_) { - return false; - } - var val = global.localStorage[name]; - if (null == val) return false; - return String(val).toLowerCase() === 'true'; -} diff --git a/reverse_engineering/node_modules/util-deprecate/node.js b/reverse_engineering/node_modules/util-deprecate/node.js deleted file mode 100644 index 5e6fcff..0000000 --- a/reverse_engineering/node_modules/util-deprecate/node.js +++ /dev/null @@ -1,6 +0,0 @@ - -/** - * For Node.js, simply re-export the core `util.deprecate` function. - */ - -module.exports = require('util').deprecate; diff --git a/reverse_engineering/node_modules/util-deprecate/package.json b/reverse_engineering/node_modules/util-deprecate/package.json deleted file mode 100644 index d734b87..0000000 --- a/reverse_engineering/node_modules/util-deprecate/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "_from": "util-deprecate@^1.0.1", - "_id": "util-deprecate@1.0.2", - "_inBundle": false, - "_integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "_location": "/util-deprecate", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "util-deprecate@^1.0.1", - "name": "util-deprecate", - "escapedName": "util-deprecate", - "rawSpec": "^1.0.1", - "saveSpec": null, - "fetchSpec": "^1.0.1" - }, - "_requiredBy": [ - "/readable-stream" - ], - "_resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "_shasum": "450d4dc9fa70de732762fbd2d4a28981419a0ccf", - "_spec": "util-deprecate@^1.0.1", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/readable-stream", - "author": { - "name": "Nathan Rajlich", - "email": "nathan@tootallnate.net", - "url": "http://n8.io/" - }, - "browser": "browser.js", - "bugs": { - "url": "https://github.com/TooTallNate/util-deprecate/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "The Node.js `util.deprecate()` function with browser support", - "homepage": "https://github.com/TooTallNate/util-deprecate", - "keywords": [ - "util", - "deprecate", - "browserify", - "browser", - "node" - ], - "license": "MIT", - "main": "node.js", - "name": "util-deprecate", - "repository": { - "type": "git", - "url": "git://github.com/TooTallNate/util-deprecate.git" - }, - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "version": "1.0.2" -} diff --git a/reverse_engineering/node_modules/uuid/CHANGELOG.md b/reverse_engineering/node_modules/uuid/CHANGELOG.md deleted file mode 100644 index 7519d19..0000000 --- a/reverse_engineering/node_modules/uuid/CHANGELOG.md +++ /dev/null @@ -1,229 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. - -### [8.3.2](https://github.com/uuidjs/uuid/compare/v8.3.1...v8.3.2) (2020-12-08) - -### Bug Fixes - -- lazy load getRandomValues ([#537](https://github.com/uuidjs/uuid/issues/537)) ([16c8f6d](https://github.com/uuidjs/uuid/commit/16c8f6df2f6b09b4d6235602d6a591188320a82e)), closes [#536](https://github.com/uuidjs/uuid/issues/536) - -### [8.3.1](https://github.com/uuidjs/uuid/compare/v8.3.0...v8.3.1) (2020-10-04) - -### Bug Fixes - -- support expo>=39.0.0 ([#515](https://github.com/uuidjs/uuid/issues/515)) ([c65a0f3](https://github.com/uuidjs/uuid/commit/c65a0f3fa73b901959d638d1e3591dfacdbed867)), closes [#375](https://github.com/uuidjs/uuid/issues/375) - -## [8.3.0](https://github.com/uuidjs/uuid/compare/v8.2.0...v8.3.0) (2020-07-27) - -### Features - -- add parse/stringify/validate/version/NIL APIs ([#479](https://github.com/uuidjs/uuid/issues/479)) ([0e6c10b](https://github.com/uuidjs/uuid/commit/0e6c10ba1bf9517796ff23c052fc0468eedfd5f4)), closes [#475](https://github.com/uuidjs/uuid/issues/475) [#478](https://github.com/uuidjs/uuid/issues/478) [#480](https://github.com/uuidjs/uuid/issues/480) [#481](https://github.com/uuidjs/uuid/issues/481) [#180](https://github.com/uuidjs/uuid/issues/180) - -## [8.2.0](https://github.com/uuidjs/uuid/compare/v8.1.0...v8.2.0) (2020-06-23) - -### Features - -- improve performance of v1 string representation ([#453](https://github.com/uuidjs/uuid/issues/453)) ([0ee0b67](https://github.com/uuidjs/uuid/commit/0ee0b67c37846529c66089880414d29f3ae132d5)) -- remove deprecated v4 string parameter ([#454](https://github.com/uuidjs/uuid/issues/454)) ([88ce3ca](https://github.com/uuidjs/uuid/commit/88ce3ca0ba046f60856de62c7ce03f7ba98ba46c)), closes [#437](https://github.com/uuidjs/uuid/issues/437) -- support jspm ([#473](https://github.com/uuidjs/uuid/issues/473)) ([e9f2587](https://github.com/uuidjs/uuid/commit/e9f2587a92575cac31bc1d4ae944e17c09756659)) - -### Bug Fixes - -- prepare package exports for webpack 5 ([#468](https://github.com/uuidjs/uuid/issues/468)) ([8d6e6a5](https://github.com/uuidjs/uuid/commit/8d6e6a5f8965ca9575eb4d92e99a43435f4a58a8)) - -## [8.1.0](https://github.com/uuidjs/uuid/compare/v8.0.0...v8.1.0) (2020-05-20) - -### Features - -- improve v4 performance by reusing random number array ([#435](https://github.com/uuidjs/uuid/issues/435)) ([bf4af0d](https://github.com/uuidjs/uuid/commit/bf4af0d711b4d2ed03d1f74fd12ad0baa87dc79d)) -- optimize V8 performance of bytesToUuid ([#434](https://github.com/uuidjs/uuid/issues/434)) ([e156415](https://github.com/uuidjs/uuid/commit/e156415448ec1af2351fa0b6660cfb22581971f2)) - -### Bug Fixes - -- export package.json required by react-native and bundlers ([#449](https://github.com/uuidjs/uuid/issues/449)) ([be1c8fe](https://github.com/uuidjs/uuid/commit/be1c8fe9a3206c358e0059b52fafd7213aa48a52)), closes [ai/nanoevents#44](https://github.com/ai/nanoevents/issues/44#issuecomment-602010343) [#444](https://github.com/uuidjs/uuid/issues/444) - -## [8.0.0](https://github.com/uuidjs/uuid/compare/v7.0.3...v8.0.0) (2020-04-29) - -### ⚠ BREAKING CHANGES - -- For native ECMAScript Module (ESM) usage in Node.js only named exports are exposed, there is no more default export. - - ```diff - -import uuid from 'uuid'; - -console.log(uuid.v4()); // -> 'cd6c3b08-0adc-4f4b-a6ef-36087a1c9869' - +import { v4 as uuidv4 } from 'uuid'; - +uuidv4(); // ⇨ '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d' - ``` - -- Deep requiring specific algorithms of this library like `require('uuid/v4')`, which has been deprecated in `uuid@7`, is no longer supported. - - Instead use the named exports that this module exports. - - For ECMAScript Modules (ESM): - - ```diff - -import uuidv4 from 'uuid/v4'; - +import { v4 as uuidv4 } from 'uuid'; - uuidv4(); - ``` - - For CommonJS: - - ```diff - -const uuidv4 = require('uuid/v4'); - +const { v4: uuidv4 } = require('uuid'); - uuidv4(); - ``` - -### Features - -- native Node.js ES Modules (wrapper approach) ([#423](https://github.com/uuidjs/uuid/issues/423)) ([2d9f590](https://github.com/uuidjs/uuid/commit/2d9f590ad9701d692625c07ed62f0a0f91227991)), closes [#245](https://github.com/uuidjs/uuid/issues/245) [#419](https://github.com/uuidjs/uuid/issues/419) [#342](https://github.com/uuidjs/uuid/issues/342) -- remove deep requires ([#426](https://github.com/uuidjs/uuid/issues/426)) ([daf72b8](https://github.com/uuidjs/uuid/commit/daf72b84ceb20272a81bb5fbddb05dd95922cbba)) - -### Bug Fixes - -- add CommonJS syntax example to README quickstart section ([#417](https://github.com/uuidjs/uuid/issues/417)) ([e0ec840](https://github.com/uuidjs/uuid/commit/e0ec8402c7ad44b7ef0453036c612f5db513fda0)) - -### [7.0.3](https://github.com/uuidjs/uuid/compare/v7.0.2...v7.0.3) (2020-03-31) - -### Bug Fixes - -- make deep require deprecation warning work in browsers ([#409](https://github.com/uuidjs/uuid/issues/409)) ([4b71107](https://github.com/uuidjs/uuid/commit/4b71107d8c0d2ef56861ede6403fc9dc35a1e6bf)), closes [#408](https://github.com/uuidjs/uuid/issues/408) - -### [7.0.2](https://github.com/uuidjs/uuid/compare/v7.0.1...v7.0.2) (2020-03-04) - -### Bug Fixes - -- make access to msCrypto consistent ([#393](https://github.com/uuidjs/uuid/issues/393)) ([8bf2a20](https://github.com/uuidjs/uuid/commit/8bf2a20f3565df743da7215eebdbada9d2df118c)) -- simplify link in deprecation warning ([#391](https://github.com/uuidjs/uuid/issues/391)) ([bb2c8e4](https://github.com/uuidjs/uuid/commit/bb2c8e4e9f4c5f9c1eaaf3ea59710c633cd90cb7)) -- update links to match content in readme ([#386](https://github.com/uuidjs/uuid/issues/386)) ([44f2f86](https://github.com/uuidjs/uuid/commit/44f2f86e9d2bbf14ee5f0f00f72a3db1292666d4)) - -### [7.0.1](https://github.com/uuidjs/uuid/compare/v7.0.0...v7.0.1) (2020-02-25) - -### Bug Fixes - -- clean up esm builds for node and browser ([#383](https://github.com/uuidjs/uuid/issues/383)) ([59e6a49](https://github.com/uuidjs/uuid/commit/59e6a49e7ce7b3e8fb0f3ee52b9daae72af467dc)) -- provide browser versions independent from module system ([#380](https://github.com/uuidjs/uuid/issues/380)) ([4344a22](https://github.com/uuidjs/uuid/commit/4344a22e7aed33be8627eeaaf05360f256a21753)), closes [#378](https://github.com/uuidjs/uuid/issues/378) - -## [7.0.0](https://github.com/uuidjs/uuid/compare/v3.4.0...v7.0.0) (2020-02-24) - -### ⚠ BREAKING CHANGES - -- The default export, which used to be the v4() method but which was already discouraged in v3.x of this library, has been removed. -- Explicitly note that deep imports of the different uuid version functions are deprecated and no longer encouraged and that ECMAScript module named imports should be used instead. Emit a deprecation warning for people who deep-require the different algorithm variants. -- Remove builtin support for insecure random number generators in the browser. Users who want that will have to supply their own random number generator function. -- Remove support for generating v3 and v5 UUIDs in Node.js<4.x -- Convert code base to ECMAScript Modules (ESM) and release CommonJS build for node and ESM build for browser bundlers. - -### Features - -- add UMD build to npm package ([#357](https://github.com/uuidjs/uuid/issues/357)) ([4e75adf](https://github.com/uuidjs/uuid/commit/4e75adf435196f28e3fbbe0185d654b5ded7ca2c)), closes [#345](https://github.com/uuidjs/uuid/issues/345) -- add various es module and CommonJS examples ([b238510](https://github.com/uuidjs/uuid/commit/b238510bf352463521f74bab175a3af9b7a42555)) -- ensure that docs are up-to-date in CI ([ee5e77d](https://github.com/uuidjs/uuid/commit/ee5e77db547474f5a8f23d6c857a6d399209986b)) -- hybrid CommonJS & ECMAScript modules build ([a3f078f](https://github.com/uuidjs/uuid/commit/a3f078faa0baff69ab41aed08e041f8f9c8993d0)) -- remove insecure fallback random number generator ([3a5842b](https://github.com/uuidjs/uuid/commit/3a5842b141a6e5de0ae338f391661e6b84b167c9)), closes [#173](https://github.com/uuidjs/uuid/issues/173) -- remove support for pre Node.js v4 Buffer API ([#356](https://github.com/uuidjs/uuid/issues/356)) ([b59b5c5](https://github.com/uuidjs/uuid/commit/b59b5c5ecad271c5453f1a156f011671f6d35627)) -- rename repository to github:uuidjs/uuid ([#351](https://github.com/uuidjs/uuid/issues/351)) ([c37a518](https://github.com/uuidjs/uuid/commit/c37a518e367ac4b6d0aa62dba1bc6ce9e85020f7)), closes [#338](https://github.com/uuidjs/uuid/issues/338) - -### Bug Fixes - -- add deep-require proxies for local testing and adjust tests ([#365](https://github.com/uuidjs/uuid/issues/365)) ([7fedc79](https://github.com/uuidjs/uuid/commit/7fedc79ac8fda4bfd1c566c7f05ef4ac13b2db48)) -- add note about removal of default export ([#372](https://github.com/uuidjs/uuid/issues/372)) ([12749b7](https://github.com/uuidjs/uuid/commit/12749b700eb49db8a9759fd306d8be05dbfbd58c)), closes [#370](https://github.com/uuidjs/uuid/issues/370) -- deprecated deep requiring of the different algorithm versions ([#361](https://github.com/uuidjs/uuid/issues/361)) ([c0bdf15](https://github.com/uuidjs/uuid/commit/c0bdf15e417639b1aeb0b247b2fb11f7a0a26b23)) - -## [3.4.0](https://github.com/uuidjs/uuid/compare/v3.3.3...v3.4.0) (2020-01-16) - -### Features - -- rename repository to github:uuidjs/uuid ([#351](https://github.com/uuidjs/uuid/issues/351)) ([e2d7314](https://github.com/uuidjs/uuid/commit/e2d7314)), closes [#338](https://github.com/uuidjs/uuid/issues/338) - -## [3.3.3](https://github.com/uuidjs/uuid/compare/v3.3.2...v3.3.3) (2019-08-19) - -### Bug Fixes - -- no longer run ci tests on node v4 -- upgrade dependencies - -## [3.3.2](https://github.com/uuidjs/uuid/compare/v3.3.1...v3.3.2) (2018-06-28) - -### Bug Fixes - -- typo ([305d877](https://github.com/uuidjs/uuid/commit/305d877)) - -## [3.3.1](https://github.com/uuidjs/uuid/compare/v3.3.0...v3.3.1) (2018-06-28) - -### Bug Fixes - -- fix [#284](https://github.com/uuidjs/uuid/issues/284) by setting function name in try-catch ([f2a60f2](https://github.com/uuidjs/uuid/commit/f2a60f2)) - -# [3.3.0](https://github.com/uuidjs/uuid/compare/v3.2.1...v3.3.0) (2018-06-22) - -### Bug Fixes - -- assignment to readonly property to allow running in strict mode ([#270](https://github.com/uuidjs/uuid/issues/270)) ([d062fdc](https://github.com/uuidjs/uuid/commit/d062fdc)) -- fix [#229](https://github.com/uuidjs/uuid/issues/229) ([c9684d4](https://github.com/uuidjs/uuid/commit/c9684d4)) -- Get correct version of IE11 crypto ([#274](https://github.com/uuidjs/uuid/issues/274)) ([153d331](https://github.com/uuidjs/uuid/commit/153d331)) -- mem issue when generating uuid ([#267](https://github.com/uuidjs/uuid/issues/267)) ([c47702c](https://github.com/uuidjs/uuid/commit/c47702c)) - -### Features - -- enforce Conventional Commit style commit messages ([#282](https://github.com/uuidjs/uuid/issues/282)) ([cc9a182](https://github.com/uuidjs/uuid/commit/cc9a182)) - -## [3.2.1](https://github.com/uuidjs/uuid/compare/v3.2.0...v3.2.1) (2018-01-16) - -### Bug Fixes - -- use msCrypto if available. Fixes [#241](https://github.com/uuidjs/uuid/issues/241) ([#247](https://github.com/uuidjs/uuid/issues/247)) ([1fef18b](https://github.com/uuidjs/uuid/commit/1fef18b)) - -# [3.2.0](https://github.com/uuidjs/uuid/compare/v3.1.0...v3.2.0) (2018-01-16) - -### Bug Fixes - -- remove mistakenly added typescript dependency, rollback version (standard-version will auto-increment) ([09fa824](https://github.com/uuidjs/uuid/commit/09fa824)) -- use msCrypto if available. Fixes [#241](https://github.com/uuidjs/uuid/issues/241) ([#247](https://github.com/uuidjs/uuid/issues/247)) ([1fef18b](https://github.com/uuidjs/uuid/commit/1fef18b)) - -### Features - -- Add v3 Support ([#217](https://github.com/uuidjs/uuid/issues/217)) ([d94f726](https://github.com/uuidjs/uuid/commit/d94f726)) - -# [3.1.0](https://github.com/uuidjs/uuid/compare/v3.1.0...v3.0.1) (2017-06-17) - -### Bug Fixes - -- (fix) Add .npmignore file to exclude test/ and other non-essential files from packing. (#183) -- Fix typo (#178) -- Simple typo fix (#165) - -### Features - -- v5 support in CLI (#197) -- V5 support (#188) - -# 3.0.1 (2016-11-28) - -- split uuid versions into separate files - -# 3.0.0 (2016-11-17) - -- remove .parse and .unparse - -# 2.0.0 - -- Removed uuid.BufferClass - -# 1.4.0 - -- Improved module context detection -- Removed public RNG functions - -# 1.3.2 - -- Improve tests and handling of v1() options (Issue #24) -- Expose RNG option to allow for perf testing with different generators - -# 1.3.0 - -- Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)! -- Support for node.js crypto API -- De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code diff --git a/reverse_engineering/node_modules/uuid/CONTRIBUTING.md b/reverse_engineering/node_modules/uuid/CONTRIBUTING.md deleted file mode 100644 index 4a4503d..0000000 --- a/reverse_engineering/node_modules/uuid/CONTRIBUTING.md +++ /dev/null @@ -1,18 +0,0 @@ -# Contributing - -Please feel free to file GitHub Issues or propose Pull Requests. We're always happy to discuss improvements to this library! - -## Testing - -```shell -npm test -``` - -## Releasing - -Releases are supposed to be done from master, version bumping is automated through [`standard-version`](https://github.com/conventional-changelog/standard-version): - -```shell -npm run release -- --dry-run # verify output manually -npm run release # follow the instructions from the output of this command -``` diff --git a/reverse_engineering/node_modules/uuid/LICENSE.md b/reverse_engineering/node_modules/uuid/LICENSE.md deleted file mode 100644 index 3934168..0000000 --- a/reverse_engineering/node_modules/uuid/LICENSE.md +++ /dev/null @@ -1,9 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2010-2020 Robert Kieffer and other contributors - -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/reverse_engineering/node_modules/uuid/README.md b/reverse_engineering/node_modules/uuid/README.md deleted file mode 100644 index ed27e57..0000000 --- a/reverse_engineering/node_modules/uuid/README.md +++ /dev/null @@ -1,505 +0,0 @@ - - -# uuid [![CI](https://github.com/uuidjs/uuid/workflows/CI/badge.svg)](https://github.com/uuidjs/uuid/actions?query=workflow%3ACI) [![Browser](https://github.com/uuidjs/uuid/workflows/Browser/badge.svg)](https://github.com/uuidjs/uuid/actions?query=workflow%3ABrowser) - -For the creation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDs - -- **Complete** - Support for RFC4122 version 1, 3, 4, and 5 UUIDs -- **Cross-platform** - Support for ... - - CommonJS, [ECMAScript Modules](#ecmascript-modules) and [CDN builds](#cdn-builds) - - Node 8, 10, 12, 14 - - Chrome, Safari, Firefox, Edge, IE 11 browsers - - Webpack and rollup.js module bundlers - - [React Native / Expo](#react-native--expo) -- **Secure** - Cryptographically-strong random values -- **Small** - Zero-dependency, small footprint, plays nice with "tree shaking" packagers -- **CLI** - Includes the [`uuid` command line](#command-line) utility - -**Upgrading from `uuid@3.x`?** Your code is probably okay, but check out [Upgrading From `uuid@3.x`](#upgrading-from-uuid3x) for details. - -## Quickstart - -To create a random UUID... - -**1. Install** - -```shell -npm install uuid -``` - -**2. Create a UUID** (ES6 module syntax) - -```javascript -import { v4 as uuidv4 } from 'uuid'; -uuidv4(); // ⇨ '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d' -``` - -... or using CommonJS syntax: - -```javascript -const { v4: uuidv4 } = require('uuid'); -uuidv4(); // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed' -``` - -For timestamp UUIDs, namespace UUIDs, and other options read on ... - -## API Summary - -| | | | -| --- | --- | --- | -| [`uuid.NIL`](#uuidnil) | The nil UUID string (all zeros) | New in `uuid@8.3` | -| [`uuid.parse()`](#uuidparsestr) | Convert UUID string to array of bytes | New in `uuid@8.3` | -| [`uuid.stringify()`](#uuidstringifyarr-offset) | Convert array of bytes to UUID string | New in `uuid@8.3` | -| [`uuid.v1()`](#uuidv1options-buffer-offset) | Create a version 1 (timestamp) UUID | | -| [`uuid.v3()`](#uuidv3name-namespace-buffer-offset) | Create a version 3 (namespace w/ MD5) UUID | | -| [`uuid.v4()`](#uuidv4options-buffer-offset) | Create a version 4 (random) UUID | | -| [`uuid.v5()`](#uuidv5name-namespace-buffer-offset) | Create a version 5 (namespace w/ SHA-1) UUID | | -| [`uuid.validate()`](#uuidvalidatestr) | Test a string to see if it is a valid UUID | New in `uuid@8.3` | -| [`uuid.version()`](#uuidversionstr) | Detect RFC version of a UUID | New in `uuid@8.3` | - -## API - -### uuid.NIL - -The nil UUID string (all zeros). - -Example: - -```javascript -import { NIL as NIL_UUID } from 'uuid'; - -NIL_UUID; // ⇨ '00000000-0000-0000-0000-000000000000' -``` - -### uuid.parse(str) - -Convert UUID string to array of bytes - -| | | -| --------- | ---------------------------------------- | -| `str` | A valid UUID `String` | -| _returns_ | `Uint8Array[16]` | -| _throws_ | `TypeError` if `str` is not a valid UUID | - -Note: Ordering of values in the byte arrays used by `parse()` and `stringify()` follows the left ↠ right order of hex-pairs in UUID strings. As shown in the example below. - -Example: - -```javascript -import { parse as uuidParse } from 'uuid'; - -// Parse a UUID -const bytes = uuidParse('6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b'); - -// Convert to hex strings to show byte order (for documentation purposes) -[...bytes].map((v) => v.toString(16).padStart(2, '0')); // ⇨ - // [ - // '6e', 'c0', 'bd', '7f', - // '11', 'c0', '43', 'da', - // '97', '5e', '2a', '8a', - // 'd9', 'eb', 'ae', '0b' - // ] -``` - -### uuid.stringify(arr[, offset]) - -Convert array of bytes to UUID string - -| | | -| -------------- | ---------------------------------------------------------------------------- | -| `arr` | `Array`-like collection of 16 values (starting from `offset`) between 0-255. | -| [`offset` = 0] | `Number` Starting index in the Array | -| _returns_ | `String` | -| _throws_ | `TypeError` if a valid UUID string cannot be generated | - -Note: Ordering of values in the byte arrays used by `parse()` and `stringify()` follows the left ↠ right order of hex-pairs in UUID strings. As shown in the example below. - -Example: - -```javascript -import { stringify as uuidStringify } from 'uuid'; - -const uuidBytes = [ - 0x6e, - 0xc0, - 0xbd, - 0x7f, - 0x11, - 0xc0, - 0x43, - 0xda, - 0x97, - 0x5e, - 0x2a, - 0x8a, - 0xd9, - 0xeb, - 0xae, - 0x0b, -]; - -uuidStringify(uuidBytes); // ⇨ '6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b' -``` - -### uuid.v1([options[, buffer[, offset]]]) - -Create an RFC version 1 (timestamp) UUID - -| | | -| --- | --- | -| [`options`] | `Object` with one or more of the following properties: | -| [`options.node` ] | RFC "node" field as an `Array[6]` of byte values (per 4.1.6) | -| [`options.clockseq`] | RFC "clock sequence" as a `Number` between 0 - 0x3fff | -| [`options.msecs`] | RFC "timestamp" field (`Number` of milliseconds, unix epoch) | -| [`options.nsecs`] | RFC "timestamp" field (`Number` of nanseconds to add to `msecs`, should be 0-10,000) | -| [`options.random`] | `Array` of 16 random bytes (0-255) | -| [`options.rng`] | Alternative to `options.random`, a `Function` that returns an `Array` of 16 random bytes (0-255) | -| [`buffer`] | `Array \| Buffer` If specified, uuid will be written here in byte-form, starting at `offset` | -| [`offset` = 0] | `Number` Index to start writing UUID bytes in `buffer` | -| _returns_ | UUID `String` if no `buffer` is specified, otherwise returns `buffer` | -| _throws_ | `Error` if more than 10M UUIDs/sec are requested | - -Note: The default [node id](https://tools.ietf.org/html/rfc4122#section-4.1.6) (the last 12 digits in the UUID) is generated once, randomly, on process startup, and then remains unchanged for the duration of the process. - -Note: `options.random` and `options.rng` are only meaningful on the very first call to `v1()`, where they may be passed to initialize the internal `node` and `clockseq` fields. - -Example: - -```javascript -import { v1 as uuidv1 } from 'uuid'; - -uuidv1(); // ⇨ '2c5ea4c0-4067-11e9-8bad-9b1deb4d3b7d' -``` - -Example using `options`: - -```javascript -import { v1 as uuidv1 } from 'uuid'; - -const v1options = { - node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], - clockseq: 0x1234, - msecs: new Date('2011-11-01').getTime(), - nsecs: 5678, -}; -uuidv1(v1options); // ⇨ '710b962e-041c-11e1-9234-0123456789ab' -``` - -### uuid.v3(name, namespace[, buffer[, offset]]) - -Create an RFC version 3 (namespace w/ MD5) UUID - -API is identical to `v5()`, but uses "v3" instead. - -⚠️ Note: Per the RFC, "_If backward compatibility is not an issue, SHA-1 [Version 5] is preferred_." - -### uuid.v4([options[, buffer[, offset]]]) - -Create an RFC version 4 (random) UUID - -| | | -| --- | --- | -| [`options`] | `Object` with one or more of the following properties: | -| [`options.random`] | `Array` of 16 random bytes (0-255) | -| [`options.rng`] | Alternative to `options.random`, a `Function` that returns an `Array` of 16 random bytes (0-255) | -| [`buffer`] | `Array \| Buffer` If specified, uuid will be written here in byte-form, starting at `offset` | -| [`offset` = 0] | `Number` Index to start writing UUID bytes in `buffer` | -| _returns_ | UUID `String` if no `buffer` is specified, otherwise returns `buffer` | - -Example: - -```javascript -import { v4 as uuidv4 } from 'uuid'; - -uuidv4(); // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed' -``` - -Example using predefined `random` values: - -```javascript -import { v4 as uuidv4 } from 'uuid'; - -const v4options = { - random: [ - 0x10, - 0x91, - 0x56, - 0xbe, - 0xc4, - 0xfb, - 0xc1, - 0xea, - 0x71, - 0xb4, - 0xef, - 0xe1, - 0x67, - 0x1c, - 0x58, - 0x36, - ], -}; -uuidv4(v4options); // ⇨ '109156be-c4fb-41ea-b1b4-efe1671c5836' -``` - -### uuid.v5(name, namespace[, buffer[, offset]]) - -Create an RFC version 5 (namespace w/ SHA-1) UUID - -| | | -| --- | --- | -| `name` | `String \| Array` | -| `namespace` | `String \| Array[16]` Namespace UUID | -| [`buffer`] | `Array \| Buffer` If specified, uuid will be written here in byte-form, starting at `offset` | -| [`offset` = 0] | `Number` Index to start writing UUID bytes in `buffer` | -| _returns_ | UUID `String` if no `buffer` is specified, otherwise returns `buffer` | - -Note: The RFC `DNS` and `URL` namespaces are available as `v5.DNS` and `v5.URL`. - -Example with custom namespace: - -```javascript -import { v5 as uuidv5 } from 'uuid'; - -// Define a custom namespace. Readers, create your own using something like -// https://www.uuidgenerator.net/ -const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341'; - -uuidv5('Hello, World!', MY_NAMESPACE); // ⇨ '630eb68f-e0fa-5ecc-887a-7c7a62614681' -``` - -Example with RFC `URL` namespace: - -```javascript -import { v5 as uuidv5 } from 'uuid'; - -uuidv5('https://www.w3.org/', uuidv5.URL); // ⇨ 'c106a26a-21bb-5538-8bf2-57095d1976c1' -``` - -### uuid.validate(str) - -Test a string to see if it is a valid UUID - -| | | -| --------- | --------------------------------------------------- | -| `str` | `String` to validate | -| _returns_ | `true` if string is a valid UUID, `false` otherwise | - -Example: - -```javascript -import { validate as uuidValidate } from 'uuid'; - -uuidValidate('not a UUID'); // ⇨ false -uuidValidate('6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b'); // ⇨ true -``` - -Using `validate` and `version` together it is possible to do per-version validation, e.g. validate for only v4 UUIds. - -```javascript -import { version as uuidVersion } from 'uuid'; -import { validate as uuidValidate } from 'uuid'; - -function uuidValidateV4(uuid) { - return uuidValidate(uuid) && uuidVersion(uuid) === 4; -} - -const v1Uuid = 'd9428888-122b-11e1-b85c-61cd3cbb3210'; -const v4Uuid = '109156be-c4fb-41ea-b1b4-efe1671c5836'; - -uuidValidateV4(v4Uuid); // ⇨ true -uuidValidateV4(v1Uuid); // ⇨ false -``` - -### uuid.version(str) - -Detect RFC version of a UUID - -| | | -| --------- | ---------------------------------------- | -| `str` | A valid UUID `String` | -| _returns_ | `Number` The RFC version of the UUID | -| _throws_ | `TypeError` if `str` is not a valid UUID | - -Example: - -```javascript -import { version as uuidVersion } from 'uuid'; - -uuidVersion('45637ec4-c85f-11ea-87d0-0242ac130003'); // ⇨ 1 -uuidVersion('6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b'); // ⇨ 4 -``` - -## Command Line - -UUIDs can be generated from the command line using `uuid`. - -```shell -$ uuid -ddeb27fb-d9a0-4624-be4d-4615062daed4 -``` - -The default is to generate version 4 UUIDS, however the other versions are supported. Type `uuid --help` for details: - -```shell -$ uuid --help - -Usage: - uuid - uuid v1 - uuid v3 - uuid v4 - uuid v5 - uuid --help - -Note: may be "URL" or "DNS" to use the corresponding UUIDs -defined by RFC4122 -``` - -## ECMAScript Modules - -This library comes with [ECMAScript Modules](https://www.ecma-international.org/ecma-262/6.0/#sec-modules) (ESM) support for Node.js versions that support it ([example](./examples/node-esmodules/)) as well as bundlers like [rollup.js](https://rollupjs.org/guide/en/#tree-shaking) ([example](./examples/browser-rollup/)) and [webpack](https://webpack.js.org/guides/tree-shaking/) ([example](./examples/browser-webpack/)) (targeting both, Node.js and browser environments). - -```javascript -import { v4 as uuidv4 } from 'uuid'; -uuidv4(); // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed' -``` - -To run the examples you must first create a dist build of this library in the module root: - -```shell -npm run build -``` - -## CDN Builds - -### ECMAScript Modules - -To load this module directly into modern browsers that [support loading ECMAScript Modules](https://caniuse.com/#feat=es6-module) you can make use of [jspm](https://jspm.org/): - -```html - -``` - -### UMD - -To load this module directly into older browsers you can use the [UMD (Universal Module Definition)](https://github.com/umdjs/umd) builds from any of the following CDNs: - -**Using [UNPKG](https://unpkg.com/uuid@latest/dist/umd/)**: - -```html - -``` - -**Using [jsDelivr](https://cdn.jsdelivr.net/npm/uuid@latest/dist/umd/)**: - -```html - -``` - -**Using [cdnjs](https://cdnjs.com/libraries/uuid)**: - -```html - -``` - -These CDNs all provide the same [`uuidv4()`](#uuidv4options-buffer-offset) method: - -```html - -``` - -Methods for the other algorithms ([`uuidv1()`](#uuidv1options-buffer-offset), [`uuidv3()`](#uuidv3name-namespace-buffer-offset) and [`uuidv5()`](#uuidv5name-namespace-buffer-offset)) are available from the files `uuidv1.min.js`, `uuidv3.min.js` and `uuidv5.min.js` respectively. - -## "getRandomValues() not supported" - -This error occurs in environments where the standard [`crypto.getRandomValues()`](https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues) API is not supported. This issue can be resolved by adding an appropriate polyfill: - -### React Native / Expo - -1. Install [`react-native-get-random-values`](https://github.com/LinusU/react-native-get-random-values#readme) -1. Import it _before_ `uuid`. Since `uuid` might also appear as a transitive dependency of some other imports it's safest to just import `react-native-get-random-values` as the very first thing in your entry point: - -```javascript -import 'react-native-get-random-values'; -import { v4 as uuidv4 } from 'uuid'; -``` - -Note: If you are using Expo, you must be using at least `react-native-get-random-values@1.5.0` and `expo@39.0.0`. - -### Web Workers / Service Workers (Edge <= 18) - -[In Edge <= 18, Web Crypto is not supported in Web Workers or Service Workers](https://caniuse.com/#feat=cryptography) and we are not aware of a polyfill (let us know if you find one, please). - -## Upgrading From `uuid@7.x` - -### Only Named Exports Supported When Using with Node.js ESM - -`uuid@7.x` did not come with native ECMAScript Module (ESM) support for Node.js. Importing it in Node.js ESM consequently imported the CommonJS source with a default export. This library now comes with true Node.js ESM support and only provides named exports. - -Instead of doing: - -```javascript -import uuid from 'uuid'; -uuid.v4(); -``` - -you will now have to use the named exports: - -```javascript -import { v4 as uuidv4 } from 'uuid'; -uuidv4(); -``` - -### Deep Requires No Longer Supported - -Deep requires like `require('uuid/v4')` [which have been deprecated in `uuid@7.x`](#deep-requires-now-deprecated) are no longer supported. - -## Upgrading From `uuid@3.x` - -"_Wait... what happened to `uuid@4.x` - `uuid@6.x`?!?_" - -In order to avoid confusion with RFC [version 4](#uuidv4options-buffer-offset) and [version 5](#uuidv5name-namespace-buffer-offset) UUIDs, and a possible [version 6](http://gh.peabody.io/uuidv6/), releases 4 thru 6 of this module have been skipped. - -### Deep Requires Now Deprecated - -`uuid@3.x` encouraged the use of deep requires to minimize the bundle size of browser builds: - -```javascript -const uuidv4 = require('uuid/v4'); // <== NOW DEPRECATED! -uuidv4(); -``` - -As of `uuid@7.x` this library now provides ECMAScript modules builds, which allow packagers like Webpack and Rollup to do "tree-shaking" to remove dead code. Instead, use the `import` syntax: - -```javascript -import { v4 as uuidv4 } from 'uuid'; -uuidv4(); -``` - -... or for CommonJS: - -```javascript -const { v4: uuidv4 } = require('uuid'); -uuidv4(); -``` - -### Default Export Removed - -`uuid@3.x` was exporting the Version 4 UUID method as a default export: - -```javascript -const uuid = require('uuid'); // <== REMOVED! -``` - -This usage pattern was already discouraged in `uuid@3.x` and has been removed in `uuid@7.x`. - ----- -Markdown generated from [README_js.md](README_js.md) by [![RunMD Logo](http://i.imgur.com/h0FVyzU.png)](https://github.com/broofa/runmd) \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/bin/uuid b/reverse_engineering/node_modules/uuid/dist/bin/uuid deleted file mode 100755 index f38d2ee..0000000 --- a/reverse_engineering/node_modules/uuid/dist/bin/uuid +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env node -require('../uuid-bin'); diff --git a/reverse_engineering/node_modules/uuid/dist/esm-browser/index.js b/reverse_engineering/node_modules/uuid/dist/esm-browser/index.js deleted file mode 100644 index 1db6f6d..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-browser/index.js +++ /dev/null @@ -1,9 +0,0 @@ -export { default as v1 } from './v1.js'; -export { default as v3 } from './v3.js'; -export { default as v4 } from './v4.js'; -export { default as v5 } from './v5.js'; -export { default as NIL } from './nil.js'; -export { default as version } from './version.js'; -export { default as validate } from './validate.js'; -export { default as stringify } from './stringify.js'; -export { default as parse } from './parse.js'; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-browser/md5.js b/reverse_engineering/node_modules/uuid/dist/esm-browser/md5.js deleted file mode 100644 index 8b5d46a..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-browser/md5.js +++ /dev/null @@ -1,215 +0,0 @@ -/* - * Browser-compatible JavaScript MD5 - * - * Modification of JavaScript MD5 - * https://github.com/blueimp/JavaScript-MD5 - * - * Copyright 2011, Sebastian Tschan - * https://blueimp.net - * - * Licensed under the MIT license: - * https://opensource.org/licenses/MIT - * - * Based on - * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message - * Digest Algorithm, as defined in RFC 1321. - * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * Distributed under the BSD License - * See http://pajhome.org.uk/crypt/md5 for more info. - */ -function md5(bytes) { - if (typeof bytes === 'string') { - var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape - - bytes = new Uint8Array(msg.length); - - for (var i = 0; i < msg.length; ++i) { - bytes[i] = msg.charCodeAt(i); - } - } - - return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8)); -} -/* - * Convert an array of little-endian words to an array of bytes - */ - - -function md5ToHexEncodedArray(input) { - var output = []; - var length32 = input.length * 32; - var hexTab = '0123456789abcdef'; - - for (var i = 0; i < length32; i += 8) { - var x = input[i >> 5] >>> i % 32 & 0xff; - var hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16); - output.push(hex); - } - - return output; -} -/** - * Calculate output length with padding and bit length - */ - - -function getOutputLength(inputLength8) { - return (inputLength8 + 64 >>> 9 << 4) + 14 + 1; -} -/* - * Calculate the MD5 of an array of little-endian words, and a bit length. - */ - - -function wordsToMd5(x, len) { - /* append padding */ - x[len >> 5] |= 0x80 << len % 32; - x[getOutputLength(len) - 1] = len; - var a = 1732584193; - var b = -271733879; - var c = -1732584194; - var d = 271733878; - - for (var i = 0; i < x.length; i += 16) { - var olda = a; - var oldb = b; - var oldc = c; - var oldd = d; - a = md5ff(a, b, c, d, x[i], 7, -680876936); - d = md5ff(d, a, b, c, x[i + 1], 12, -389564586); - c = md5ff(c, d, a, b, x[i + 2], 17, 606105819); - b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330); - a = md5ff(a, b, c, d, x[i + 4], 7, -176418897); - d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426); - c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341); - b = md5ff(b, c, d, a, x[i + 7], 22, -45705983); - a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416); - d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417); - c = md5ff(c, d, a, b, x[i + 10], 17, -42063); - b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162); - a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682); - d = md5ff(d, a, b, c, x[i + 13], 12, -40341101); - c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290); - b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329); - a = md5gg(a, b, c, d, x[i + 1], 5, -165796510); - d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632); - c = md5gg(c, d, a, b, x[i + 11], 14, 643717713); - b = md5gg(b, c, d, a, x[i], 20, -373897302); - a = md5gg(a, b, c, d, x[i + 5], 5, -701558691); - d = md5gg(d, a, b, c, x[i + 10], 9, 38016083); - c = md5gg(c, d, a, b, x[i + 15], 14, -660478335); - b = md5gg(b, c, d, a, x[i + 4], 20, -405537848); - a = md5gg(a, b, c, d, x[i + 9], 5, 568446438); - d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690); - c = md5gg(c, d, a, b, x[i + 3], 14, -187363961); - b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501); - a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467); - d = md5gg(d, a, b, c, x[i + 2], 9, -51403784); - c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473); - b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734); - a = md5hh(a, b, c, d, x[i + 5], 4, -378558); - d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463); - c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562); - b = md5hh(b, c, d, a, x[i + 14], 23, -35309556); - a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060); - d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353); - c = md5hh(c, d, a, b, x[i + 7], 16, -155497632); - b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640); - a = md5hh(a, b, c, d, x[i + 13], 4, 681279174); - d = md5hh(d, a, b, c, x[i], 11, -358537222); - c = md5hh(c, d, a, b, x[i + 3], 16, -722521979); - b = md5hh(b, c, d, a, x[i + 6], 23, 76029189); - a = md5hh(a, b, c, d, x[i + 9], 4, -640364487); - d = md5hh(d, a, b, c, x[i + 12], 11, -421815835); - c = md5hh(c, d, a, b, x[i + 15], 16, 530742520); - b = md5hh(b, c, d, a, x[i + 2], 23, -995338651); - a = md5ii(a, b, c, d, x[i], 6, -198630844); - d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415); - c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905); - b = md5ii(b, c, d, a, x[i + 5], 21, -57434055); - a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571); - d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606); - c = md5ii(c, d, a, b, x[i + 10], 15, -1051523); - b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799); - a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359); - d = md5ii(d, a, b, c, x[i + 15], 10, -30611744); - c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380); - b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649); - a = md5ii(a, b, c, d, x[i + 4], 6, -145523070); - d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379); - c = md5ii(c, d, a, b, x[i + 2], 15, 718787259); - b = md5ii(b, c, d, a, x[i + 9], 21, -343485551); - a = safeAdd(a, olda); - b = safeAdd(b, oldb); - c = safeAdd(c, oldc); - d = safeAdd(d, oldd); - } - - return [a, b, c, d]; -} -/* - * Convert an array bytes to an array of little-endian words - * Characters >255 have their high-byte silently ignored. - */ - - -function bytesToWords(input) { - if (input.length === 0) { - return []; - } - - var length8 = input.length * 8; - var output = new Uint32Array(getOutputLength(length8)); - - for (var i = 0; i < length8; i += 8) { - output[i >> 5] |= (input[i / 8] & 0xff) << i % 32; - } - - return output; -} -/* - * Add integers, wrapping at 2^32. This uses 16-bit operations internally - * to work around bugs in some JS interpreters. - */ - - -function safeAdd(x, y) { - var lsw = (x & 0xffff) + (y & 0xffff); - var msw = (x >> 16) + (y >> 16) + (lsw >> 16); - return msw << 16 | lsw & 0xffff; -} -/* - * Bitwise rotate a 32-bit number to the left. - */ - - -function bitRotateLeft(num, cnt) { - return num << cnt | num >>> 32 - cnt; -} -/* - * These functions implement the four basic operations the algorithm uses. - */ - - -function md5cmn(q, a, b, x, s, t) { - return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b); -} - -function md5ff(a, b, c, d, x, s, t) { - return md5cmn(b & c | ~b & d, a, b, x, s, t); -} - -function md5gg(a, b, c, d, x, s, t) { - return md5cmn(b & d | c & ~d, a, b, x, s, t); -} - -function md5hh(a, b, c, d, x, s, t) { - return md5cmn(b ^ c ^ d, a, b, x, s, t); -} - -function md5ii(a, b, c, d, x, s, t) { - return md5cmn(c ^ (b | ~d), a, b, x, s, t); -} - -export default md5; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-browser/nil.js b/reverse_engineering/node_modules/uuid/dist/esm-browser/nil.js deleted file mode 100644 index b36324c..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-browser/nil.js +++ /dev/null @@ -1 +0,0 @@ -export default '00000000-0000-0000-0000-000000000000'; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-browser/parse.js b/reverse_engineering/node_modules/uuid/dist/esm-browser/parse.js deleted file mode 100644 index 7c5b1d5..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-browser/parse.js +++ /dev/null @@ -1,35 +0,0 @@ -import validate from './validate.js'; - -function parse(uuid) { - if (!validate(uuid)) { - throw TypeError('Invalid UUID'); - } - - var v; - var arr = new Uint8Array(16); // Parse ########-....-....-....-............ - - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) - - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; -} - -export default parse; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-browser/regex.js b/reverse_engineering/node_modules/uuid/dist/esm-browser/regex.js deleted file mode 100644 index 3da8673..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-browser/regex.js +++ /dev/null @@ -1 +0,0 @@ -export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-browser/rng.js b/reverse_engineering/node_modules/uuid/dist/esm-browser/rng.js deleted file mode 100644 index 8abbf2e..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-browser/rng.js +++ /dev/null @@ -1,19 +0,0 @@ -// Unique ID creation requires a high quality random # generator. In the browser we therefore -// require the crypto API and do not support built-in fallback to lower quality random number -// generators (like Math.random()). -var getRandomValues; -var rnds8 = new Uint8Array(16); -export default function rng() { - // lazy load so that environments that need to polyfill have a chance to do so - if (!getRandomValues) { - // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also, - // find the complete implementation of crypto (msCrypto) on IE11. - getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto); - - if (!getRandomValues) { - throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); - } - } - - return getRandomValues(rnds8); -} \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-browser/sha1.js b/reverse_engineering/node_modules/uuid/dist/esm-browser/sha1.js deleted file mode 100644 index 940548b..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-browser/sha1.js +++ /dev/null @@ -1,96 +0,0 @@ -// Adapted from Chris Veness' SHA1 code at -// http://www.movable-type.co.uk/scripts/sha1.html -function f(s, x, y, z) { - switch (s) { - case 0: - return x & y ^ ~x & z; - - case 1: - return x ^ y ^ z; - - case 2: - return x & y ^ x & z ^ y & z; - - case 3: - return x ^ y ^ z; - } -} - -function ROTL(x, n) { - return x << n | x >>> 32 - n; -} - -function sha1(bytes) { - var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6]; - var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]; - - if (typeof bytes === 'string') { - var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape - - bytes = []; - - for (var i = 0; i < msg.length; ++i) { - bytes.push(msg.charCodeAt(i)); - } - } else if (!Array.isArray(bytes)) { - // Convert Array-like to Array - bytes = Array.prototype.slice.call(bytes); - } - - bytes.push(0x80); - var l = bytes.length / 4 + 2; - var N = Math.ceil(l / 16); - var M = new Array(N); - - for (var _i = 0; _i < N; ++_i) { - var arr = new Uint32Array(16); - - for (var j = 0; j < 16; ++j) { - arr[j] = bytes[_i * 64 + j * 4] << 24 | bytes[_i * 64 + j * 4 + 1] << 16 | bytes[_i * 64 + j * 4 + 2] << 8 | bytes[_i * 64 + j * 4 + 3]; - } - - M[_i] = arr; - } - - M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32); - M[N - 1][14] = Math.floor(M[N - 1][14]); - M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff; - - for (var _i2 = 0; _i2 < N; ++_i2) { - var W = new Uint32Array(80); - - for (var t = 0; t < 16; ++t) { - W[t] = M[_i2][t]; - } - - for (var _t = 16; _t < 80; ++_t) { - W[_t] = ROTL(W[_t - 3] ^ W[_t - 8] ^ W[_t - 14] ^ W[_t - 16], 1); - } - - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - - for (var _t2 = 0; _t2 < 80; ++_t2) { - var s = Math.floor(_t2 / 20); - var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[_t2] >>> 0; - e = d; - d = c; - c = ROTL(b, 30) >>> 0; - b = a; - a = T; - } - - H[0] = H[0] + a >>> 0; - H[1] = H[1] + b >>> 0; - H[2] = H[2] + c >>> 0; - H[3] = H[3] + d >>> 0; - H[4] = H[4] + e >>> 0; - } - - return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff]; -} - -export default sha1; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-browser/stringify.js b/reverse_engineering/node_modules/uuid/dist/esm-browser/stringify.js deleted file mode 100644 index 3102111..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-browser/stringify.js +++ /dev/null @@ -1,30 +0,0 @@ -import validate from './validate.js'; -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ - -var byteToHex = []; - -for (var i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); -} - -function stringify(arr) { - var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields - - if (!validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - - return uuid; -} - -export default stringify; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-browser/v1.js b/reverse_engineering/node_modules/uuid/dist/esm-browser/v1.js deleted file mode 100644 index 1a22591..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-browser/v1.js +++ /dev/null @@ -1,95 +0,0 @@ -import rng from './rng.js'; -import stringify from './stringify.js'; // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html - -var _nodeId; - -var _clockseq; // Previous uuid creation time - - -var _lastMSecs = 0; -var _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details - -function v1(options, buf, offset) { - var i = buf && offset || 0; - var b = buf || new Array(16); - options = options || {}; - var node = options.node || _nodeId; - var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 - - if (node == null || clockseq == null) { - var seedBytes = options.random || (options.rng || rng)(); - - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } - - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. - - - var msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock - - var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) - - var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression - - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval - - - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested - - - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } - - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - - msecs += 12219292800000; // `time_low` - - var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` - - var tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` - - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version - - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) - - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - - b[i++] = clockseq & 0xff; // `node` - - for (var n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } - - return buf || stringify(b); -} - -export default v1; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-browser/v3.js b/reverse_engineering/node_modules/uuid/dist/esm-browser/v3.js deleted file mode 100644 index c9ab9a4..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-browser/v3.js +++ /dev/null @@ -1,4 +0,0 @@ -import v35 from './v35.js'; -import md5 from './md5.js'; -var v3 = v35('v3', 0x30, md5); -export default v3; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-browser/v35.js b/reverse_engineering/node_modules/uuid/dist/esm-browser/v35.js deleted file mode 100644 index 31dd8a1..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-browser/v35.js +++ /dev/null @@ -1,64 +0,0 @@ -import stringify from './stringify.js'; -import parse from './parse.js'; - -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - - var bytes = []; - - for (var i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } - - return bytes; -} - -export var DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -export var URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -export default function (name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } - - if (typeof namespace === 'string') { - namespace = parse(namespace); - } - - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` - - - var bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; - - if (buf) { - offset = offset || 0; - - for (var i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } - - return buf; - } - - return stringify(bytes); - } // Function#name is not settable on some platforms (#270) - - - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support - - - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; -} \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-browser/v4.js b/reverse_engineering/node_modules/uuid/dist/esm-browser/v4.js deleted file mode 100644 index 404810a..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-browser/v4.js +++ /dev/null @@ -1,24 +0,0 @@ -import rng from './rng.js'; -import stringify from './stringify.js'; - -function v4(options, buf, offset) { - options = options || {}; - var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided - - if (buf) { - offset = offset || 0; - - for (var i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - - return buf; - } - - return stringify(rnds); -} - -export default v4; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-browser/v5.js b/reverse_engineering/node_modules/uuid/dist/esm-browser/v5.js deleted file mode 100644 index c08d96b..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-browser/v5.js +++ /dev/null @@ -1,4 +0,0 @@ -import v35 from './v35.js'; -import sha1 from './sha1.js'; -var v5 = v35('v5', 0x50, sha1); -export default v5; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-browser/validate.js b/reverse_engineering/node_modules/uuid/dist/esm-browser/validate.js deleted file mode 100644 index f1cdc7a..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-browser/validate.js +++ /dev/null @@ -1,7 +0,0 @@ -import REGEX from './regex.js'; - -function validate(uuid) { - return typeof uuid === 'string' && REGEX.test(uuid); -} - -export default validate; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-browser/version.js b/reverse_engineering/node_modules/uuid/dist/esm-browser/version.js deleted file mode 100644 index 77530e9..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-browser/version.js +++ /dev/null @@ -1,11 +0,0 @@ -import validate from './validate.js'; - -function version(uuid) { - if (!validate(uuid)) { - throw TypeError('Invalid UUID'); - } - - return parseInt(uuid.substr(14, 1), 16); -} - -export default version; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-node/index.js b/reverse_engineering/node_modules/uuid/dist/esm-node/index.js deleted file mode 100644 index 1db6f6d..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-node/index.js +++ /dev/null @@ -1,9 +0,0 @@ -export { default as v1 } from './v1.js'; -export { default as v3 } from './v3.js'; -export { default as v4 } from './v4.js'; -export { default as v5 } from './v5.js'; -export { default as NIL } from './nil.js'; -export { default as version } from './version.js'; -export { default as validate } from './validate.js'; -export { default as stringify } from './stringify.js'; -export { default as parse } from './parse.js'; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-node/md5.js b/reverse_engineering/node_modules/uuid/dist/esm-node/md5.js deleted file mode 100644 index 4d68b04..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-node/md5.js +++ /dev/null @@ -1,13 +0,0 @@ -import crypto from 'crypto'; - -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } - - return crypto.createHash('md5').update(bytes).digest(); -} - -export default md5; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-node/nil.js b/reverse_engineering/node_modules/uuid/dist/esm-node/nil.js deleted file mode 100644 index b36324c..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-node/nil.js +++ /dev/null @@ -1 +0,0 @@ -export default '00000000-0000-0000-0000-000000000000'; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-node/parse.js b/reverse_engineering/node_modules/uuid/dist/esm-node/parse.js deleted file mode 100644 index 6421c5d..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-node/parse.js +++ /dev/null @@ -1,35 +0,0 @@ -import validate from './validate.js'; - -function parse(uuid) { - if (!validate(uuid)) { - throw TypeError('Invalid UUID'); - } - - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) - - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; -} - -export default parse; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-node/regex.js b/reverse_engineering/node_modules/uuid/dist/esm-node/regex.js deleted file mode 100644 index 3da8673..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-node/regex.js +++ /dev/null @@ -1 +0,0 @@ -export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-node/rng.js b/reverse_engineering/node_modules/uuid/dist/esm-node/rng.js deleted file mode 100644 index 8006244..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-node/rng.js +++ /dev/null @@ -1,12 +0,0 @@ -import crypto from 'crypto'; -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate - -let poolPtr = rnds8Pool.length; -export default function rng() { - if (poolPtr > rnds8Pool.length - 16) { - crypto.randomFillSync(rnds8Pool); - poolPtr = 0; - } - - return rnds8Pool.slice(poolPtr, poolPtr += 16); -} \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-node/sha1.js b/reverse_engineering/node_modules/uuid/dist/esm-node/sha1.js deleted file mode 100644 index e23850b..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-node/sha1.js +++ /dev/null @@ -1,13 +0,0 @@ -import crypto from 'crypto'; - -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } - - return crypto.createHash('sha1').update(bytes).digest(); -} - -export default sha1; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-node/stringify.js b/reverse_engineering/node_modules/uuid/dist/esm-node/stringify.js deleted file mode 100644 index f9bca12..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-node/stringify.js +++ /dev/null @@ -1,29 +0,0 @@ -import validate from './validate.js'; -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ - -const byteToHex = []; - -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); -} - -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields - - if (!validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - - return uuid; -} - -export default stringify; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-node/v1.js b/reverse_engineering/node_modules/uuid/dist/esm-node/v1.js deleted file mode 100644 index ebf81ac..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-node/v1.js +++ /dev/null @@ -1,95 +0,0 @@ -import rng from './rng.js'; -import stringify from './stringify.js'; // **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html - -let _nodeId; - -let _clockseq; // Previous uuid creation time - - -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details - -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 - - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || rng)(); - - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } - - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. - - - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock - - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) - - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression - - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval - - - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested - - - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } - - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - - msecs += 12219292800000; // `time_low` - - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` - - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` - - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version - - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) - - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - - b[i++] = clockseq & 0xff; // `node` - - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } - - return buf || stringify(b); -} - -export default v1; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-node/v3.js b/reverse_engineering/node_modules/uuid/dist/esm-node/v3.js deleted file mode 100644 index 09063b8..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-node/v3.js +++ /dev/null @@ -1,4 +0,0 @@ -import v35 from './v35.js'; -import md5 from './md5.js'; -const v3 = v35('v3', 0x30, md5); -export default v3; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-node/v35.js b/reverse_engineering/node_modules/uuid/dist/esm-node/v35.js deleted file mode 100644 index 22f6a19..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-node/v35.js +++ /dev/null @@ -1,64 +0,0 @@ -import stringify from './stringify.js'; -import parse from './parse.js'; - -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - - const bytes = []; - - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } - - return bytes; -} - -export const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -export const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -export default function (name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } - - if (typeof namespace === 'string') { - namespace = parse(namespace); - } - - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` - - - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; - - if (buf) { - offset = offset || 0; - - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } - - return buf; - } - - return stringify(bytes); - } // Function#name is not settable on some platforms (#270) - - - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support - - - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; -} \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-node/v4.js b/reverse_engineering/node_modules/uuid/dist/esm-node/v4.js deleted file mode 100644 index efad926..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-node/v4.js +++ /dev/null @@ -1,24 +0,0 @@ -import rng from './rng.js'; -import stringify from './stringify.js'; - -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided - - if (buf) { - offset = offset || 0; - - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - - return buf; - } - - return stringify(rnds); -} - -export default v4; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-node/v5.js b/reverse_engineering/node_modules/uuid/dist/esm-node/v5.js deleted file mode 100644 index e87fe31..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-node/v5.js +++ /dev/null @@ -1,4 +0,0 @@ -import v35 from './v35.js'; -import sha1 from './sha1.js'; -const v5 = v35('v5', 0x50, sha1); -export default v5; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-node/validate.js b/reverse_engineering/node_modules/uuid/dist/esm-node/validate.js deleted file mode 100644 index f1cdc7a..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-node/validate.js +++ /dev/null @@ -1,7 +0,0 @@ -import REGEX from './regex.js'; - -function validate(uuid) { - return typeof uuid === 'string' && REGEX.test(uuid); -} - -export default validate; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/esm-node/version.js b/reverse_engineering/node_modules/uuid/dist/esm-node/version.js deleted file mode 100644 index 77530e9..0000000 --- a/reverse_engineering/node_modules/uuid/dist/esm-node/version.js +++ /dev/null @@ -1,11 +0,0 @@ -import validate from './validate.js'; - -function version(uuid) { - if (!validate(uuid)) { - throw TypeError('Invalid UUID'); - } - - return parseInt(uuid.substr(14, 1), 16); -} - -export default version; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/index.js b/reverse_engineering/node_modules/uuid/dist/index.js deleted file mode 100644 index bf13b10..0000000 --- a/reverse_engineering/node_modules/uuid/dist/index.js +++ /dev/null @@ -1,79 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -Object.defineProperty(exports, "v1", { - enumerable: true, - get: function () { - return _v.default; - } -}); -Object.defineProperty(exports, "v3", { - enumerable: true, - get: function () { - return _v2.default; - } -}); -Object.defineProperty(exports, "v4", { - enumerable: true, - get: function () { - return _v3.default; - } -}); -Object.defineProperty(exports, "v5", { - enumerable: true, - get: function () { - return _v4.default; - } -}); -Object.defineProperty(exports, "NIL", { - enumerable: true, - get: function () { - return _nil.default; - } -}); -Object.defineProperty(exports, "version", { - enumerable: true, - get: function () { - return _version.default; - } -}); -Object.defineProperty(exports, "validate", { - enumerable: true, - get: function () { - return _validate.default; - } -}); -Object.defineProperty(exports, "stringify", { - enumerable: true, - get: function () { - return _stringify.default; - } -}); -Object.defineProperty(exports, "parse", { - enumerable: true, - get: function () { - return _parse.default; - } -}); - -var _v = _interopRequireDefault(require("./v1.js")); - -var _v2 = _interopRequireDefault(require("./v3.js")); - -var _v3 = _interopRequireDefault(require("./v4.js")); - -var _v4 = _interopRequireDefault(require("./v5.js")); - -var _nil = _interopRequireDefault(require("./nil.js")); - -var _version = _interopRequireDefault(require("./version.js")); - -var _validate = _interopRequireDefault(require("./validate.js")); - -var _stringify = _interopRequireDefault(require("./stringify.js")); - -var _parse = _interopRequireDefault(require("./parse.js")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/md5-browser.js b/reverse_engineering/node_modules/uuid/dist/md5-browser.js deleted file mode 100644 index 7a4582a..0000000 --- a/reverse_engineering/node_modules/uuid/dist/md5-browser.js +++ /dev/null @@ -1,223 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; - -/* - * Browser-compatible JavaScript MD5 - * - * Modification of JavaScript MD5 - * https://github.com/blueimp/JavaScript-MD5 - * - * Copyright 2011, Sebastian Tschan - * https://blueimp.net - * - * Licensed under the MIT license: - * https://opensource.org/licenses/MIT - * - * Based on - * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message - * Digest Algorithm, as defined in RFC 1321. - * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * Distributed under the BSD License - * See http://pajhome.org.uk/crypt/md5 for more info. - */ -function md5(bytes) { - if (typeof bytes === 'string') { - const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape - - bytes = new Uint8Array(msg.length); - - for (let i = 0; i < msg.length; ++i) { - bytes[i] = msg.charCodeAt(i); - } - } - - return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8)); -} -/* - * Convert an array of little-endian words to an array of bytes - */ - - -function md5ToHexEncodedArray(input) { - const output = []; - const length32 = input.length * 32; - const hexTab = '0123456789abcdef'; - - for (let i = 0; i < length32; i += 8) { - const x = input[i >> 5] >>> i % 32 & 0xff; - const hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16); - output.push(hex); - } - - return output; -} -/** - * Calculate output length with padding and bit length - */ - - -function getOutputLength(inputLength8) { - return (inputLength8 + 64 >>> 9 << 4) + 14 + 1; -} -/* - * Calculate the MD5 of an array of little-endian words, and a bit length. - */ - - -function wordsToMd5(x, len) { - /* append padding */ - x[len >> 5] |= 0x80 << len % 32; - x[getOutputLength(len) - 1] = len; - let a = 1732584193; - let b = -271733879; - let c = -1732584194; - let d = 271733878; - - for (let i = 0; i < x.length; i += 16) { - const olda = a; - const oldb = b; - const oldc = c; - const oldd = d; - a = md5ff(a, b, c, d, x[i], 7, -680876936); - d = md5ff(d, a, b, c, x[i + 1], 12, -389564586); - c = md5ff(c, d, a, b, x[i + 2], 17, 606105819); - b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330); - a = md5ff(a, b, c, d, x[i + 4], 7, -176418897); - d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426); - c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341); - b = md5ff(b, c, d, a, x[i + 7], 22, -45705983); - a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416); - d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417); - c = md5ff(c, d, a, b, x[i + 10], 17, -42063); - b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162); - a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682); - d = md5ff(d, a, b, c, x[i + 13], 12, -40341101); - c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290); - b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329); - a = md5gg(a, b, c, d, x[i + 1], 5, -165796510); - d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632); - c = md5gg(c, d, a, b, x[i + 11], 14, 643717713); - b = md5gg(b, c, d, a, x[i], 20, -373897302); - a = md5gg(a, b, c, d, x[i + 5], 5, -701558691); - d = md5gg(d, a, b, c, x[i + 10], 9, 38016083); - c = md5gg(c, d, a, b, x[i + 15], 14, -660478335); - b = md5gg(b, c, d, a, x[i + 4], 20, -405537848); - a = md5gg(a, b, c, d, x[i + 9], 5, 568446438); - d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690); - c = md5gg(c, d, a, b, x[i + 3], 14, -187363961); - b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501); - a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467); - d = md5gg(d, a, b, c, x[i + 2], 9, -51403784); - c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473); - b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734); - a = md5hh(a, b, c, d, x[i + 5], 4, -378558); - d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463); - c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562); - b = md5hh(b, c, d, a, x[i + 14], 23, -35309556); - a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060); - d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353); - c = md5hh(c, d, a, b, x[i + 7], 16, -155497632); - b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640); - a = md5hh(a, b, c, d, x[i + 13], 4, 681279174); - d = md5hh(d, a, b, c, x[i], 11, -358537222); - c = md5hh(c, d, a, b, x[i + 3], 16, -722521979); - b = md5hh(b, c, d, a, x[i + 6], 23, 76029189); - a = md5hh(a, b, c, d, x[i + 9], 4, -640364487); - d = md5hh(d, a, b, c, x[i + 12], 11, -421815835); - c = md5hh(c, d, a, b, x[i + 15], 16, 530742520); - b = md5hh(b, c, d, a, x[i + 2], 23, -995338651); - a = md5ii(a, b, c, d, x[i], 6, -198630844); - d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415); - c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905); - b = md5ii(b, c, d, a, x[i + 5], 21, -57434055); - a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571); - d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606); - c = md5ii(c, d, a, b, x[i + 10], 15, -1051523); - b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799); - a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359); - d = md5ii(d, a, b, c, x[i + 15], 10, -30611744); - c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380); - b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649); - a = md5ii(a, b, c, d, x[i + 4], 6, -145523070); - d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379); - c = md5ii(c, d, a, b, x[i + 2], 15, 718787259); - b = md5ii(b, c, d, a, x[i + 9], 21, -343485551); - a = safeAdd(a, olda); - b = safeAdd(b, oldb); - c = safeAdd(c, oldc); - d = safeAdd(d, oldd); - } - - return [a, b, c, d]; -} -/* - * Convert an array bytes to an array of little-endian words - * Characters >255 have their high-byte silently ignored. - */ - - -function bytesToWords(input) { - if (input.length === 0) { - return []; - } - - const length8 = input.length * 8; - const output = new Uint32Array(getOutputLength(length8)); - - for (let i = 0; i < length8; i += 8) { - output[i >> 5] |= (input[i / 8] & 0xff) << i % 32; - } - - return output; -} -/* - * Add integers, wrapping at 2^32. This uses 16-bit operations internally - * to work around bugs in some JS interpreters. - */ - - -function safeAdd(x, y) { - const lsw = (x & 0xffff) + (y & 0xffff); - const msw = (x >> 16) + (y >> 16) + (lsw >> 16); - return msw << 16 | lsw & 0xffff; -} -/* - * Bitwise rotate a 32-bit number to the left. - */ - - -function bitRotateLeft(num, cnt) { - return num << cnt | num >>> 32 - cnt; -} -/* - * These functions implement the four basic operations the algorithm uses. - */ - - -function md5cmn(q, a, b, x, s, t) { - return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b); -} - -function md5ff(a, b, c, d, x, s, t) { - return md5cmn(b & c | ~b & d, a, b, x, s, t); -} - -function md5gg(a, b, c, d, x, s, t) { - return md5cmn(b & d | c & ~d, a, b, x, s, t); -} - -function md5hh(a, b, c, d, x, s, t) { - return md5cmn(b ^ c ^ d, a, b, x, s, t); -} - -function md5ii(a, b, c, d, x, s, t) { - return md5cmn(c ^ (b | ~d), a, b, x, s, t); -} - -var _default = md5; -exports.default = _default; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/md5.js b/reverse_engineering/node_modules/uuid/dist/md5.js deleted file mode 100644 index 824d481..0000000 --- a/reverse_engineering/node_modules/uuid/dist/md5.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; - -var _crypto = _interopRequireDefault(require("crypto")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function md5(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } - - return _crypto.default.createHash('md5').update(bytes).digest(); -} - -var _default = md5; -exports.default = _default; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/nil.js b/reverse_engineering/node_modules/uuid/dist/nil.js deleted file mode 100644 index 7ade577..0000000 --- a/reverse_engineering/node_modules/uuid/dist/nil.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; -var _default = '00000000-0000-0000-0000-000000000000'; -exports.default = _default; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/parse.js b/reverse_engineering/node_modules/uuid/dist/parse.js deleted file mode 100644 index 4c69fc3..0000000 --- a/reverse_engineering/node_modules/uuid/dist/parse.js +++ /dev/null @@ -1,45 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; - -var _validate = _interopRequireDefault(require("./validate.js")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function parse(uuid) { - if (!(0, _validate.default)(uuid)) { - throw TypeError('Invalid UUID'); - } - - let v; - const arr = new Uint8Array(16); // Parse ########-....-....-....-............ - - arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; - arr[1] = v >>> 16 & 0xff; - arr[2] = v >>> 8 & 0xff; - arr[3] = v & 0xff; // Parse ........-####-....-....-............ - - arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; - arr[5] = v & 0xff; // Parse ........-....-####-....-............ - - arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; - arr[7] = v & 0xff; // Parse ........-....-....-####-............ - - arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; - arr[9] = v & 0xff; // Parse ........-....-....-....-############ - // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) - - arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; - arr[11] = v / 0x100000000 & 0xff; - arr[12] = v >>> 24 & 0xff; - arr[13] = v >>> 16 & 0xff; - arr[14] = v >>> 8 & 0xff; - arr[15] = v & 0xff; - return arr; -} - -var _default = parse; -exports.default = _default; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/regex.js b/reverse_engineering/node_modules/uuid/dist/regex.js deleted file mode 100644 index 1ef91d6..0000000 --- a/reverse_engineering/node_modules/uuid/dist/regex.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; -var _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; -exports.default = _default; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/rng-browser.js b/reverse_engineering/node_modules/uuid/dist/rng-browser.js deleted file mode 100644 index 91faeae..0000000 --- a/reverse_engineering/node_modules/uuid/dist/rng-browser.js +++ /dev/null @@ -1,26 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = rng; -// Unique ID creation requires a high quality random # generator. In the browser we therefore -// require the crypto API and do not support built-in fallback to lower quality random number -// generators (like Math.random()). -let getRandomValues; -const rnds8 = new Uint8Array(16); - -function rng() { - // lazy load so that environments that need to polyfill have a chance to do so - if (!getRandomValues) { - // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also, - // find the complete implementation of crypto (msCrypto) on IE11. - getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto); - - if (!getRandomValues) { - throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); - } - } - - return getRandomValues(rnds8); -} \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/rng.js b/reverse_engineering/node_modules/uuid/dist/rng.js deleted file mode 100644 index 3507f93..0000000 --- a/reverse_engineering/node_modules/uuid/dist/rng.js +++ /dev/null @@ -1,24 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = rng; - -var _crypto = _interopRequireDefault(require("crypto")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate - -let poolPtr = rnds8Pool.length; - -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - _crypto.default.randomFillSync(rnds8Pool); - - poolPtr = 0; - } - - return rnds8Pool.slice(poolPtr, poolPtr += 16); -} \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/sha1-browser.js b/reverse_engineering/node_modules/uuid/dist/sha1-browser.js deleted file mode 100644 index 24cbced..0000000 --- a/reverse_engineering/node_modules/uuid/dist/sha1-browser.js +++ /dev/null @@ -1,104 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; - -// Adapted from Chris Veness' SHA1 code at -// http://www.movable-type.co.uk/scripts/sha1.html -function f(s, x, y, z) { - switch (s) { - case 0: - return x & y ^ ~x & z; - - case 1: - return x ^ y ^ z; - - case 2: - return x & y ^ x & z ^ y & z; - - case 3: - return x ^ y ^ z; - } -} - -function ROTL(x, n) { - return x << n | x >>> 32 - n; -} - -function sha1(bytes) { - const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6]; - const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]; - - if (typeof bytes === 'string') { - const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape - - bytes = []; - - for (let i = 0; i < msg.length; ++i) { - bytes.push(msg.charCodeAt(i)); - } - } else if (!Array.isArray(bytes)) { - // Convert Array-like to Array - bytes = Array.prototype.slice.call(bytes); - } - - bytes.push(0x80); - const l = bytes.length / 4 + 2; - const N = Math.ceil(l / 16); - const M = new Array(N); - - for (let i = 0; i < N; ++i) { - const arr = new Uint32Array(16); - - for (let j = 0; j < 16; ++j) { - arr[j] = bytes[i * 64 + j * 4] << 24 | bytes[i * 64 + j * 4 + 1] << 16 | bytes[i * 64 + j * 4 + 2] << 8 | bytes[i * 64 + j * 4 + 3]; - } - - M[i] = arr; - } - - M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32); - M[N - 1][14] = Math.floor(M[N - 1][14]); - M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff; - - for (let i = 0; i < N; ++i) { - const W = new Uint32Array(80); - - for (let t = 0; t < 16; ++t) { - W[t] = M[i][t]; - } - - for (let t = 16; t < 80; ++t) { - W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1); - } - - let a = H[0]; - let b = H[1]; - let c = H[2]; - let d = H[3]; - let e = H[4]; - - for (let t = 0; t < 80; ++t) { - const s = Math.floor(t / 20); - const T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0; - e = d; - d = c; - c = ROTL(b, 30) >>> 0; - b = a; - a = T; - } - - H[0] = H[0] + a >>> 0; - H[1] = H[1] + b >>> 0; - H[2] = H[2] + c >>> 0; - H[3] = H[3] + d >>> 0; - H[4] = H[4] + e >>> 0; - } - - return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff]; -} - -var _default = sha1; -exports.default = _default; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/sha1.js b/reverse_engineering/node_modules/uuid/dist/sha1.js deleted file mode 100644 index 03bdd63..0000000 --- a/reverse_engineering/node_modules/uuid/dist/sha1.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; - -var _crypto = _interopRequireDefault(require("crypto")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function sha1(bytes) { - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } - - return _crypto.default.createHash('sha1').update(bytes).digest(); -} - -var _default = sha1; -exports.default = _default; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/stringify.js b/reverse_engineering/node_modules/uuid/dist/stringify.js deleted file mode 100644 index b8e7519..0000000 --- a/reverse_engineering/node_modules/uuid/dist/stringify.js +++ /dev/null @@ -1,39 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; - -var _validate = _interopRequireDefault(require("./validate.js")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ -const byteToHex = []; - -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); -} - -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields - - if (!(0, _validate.default)(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - - return uuid; -} - -var _default = stringify; -exports.default = _default; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/umd/uuid.min.js b/reverse_engineering/node_modules/uuid/dist/umd/uuid.min.js deleted file mode 100644 index 639ca2f..0000000 --- a/reverse_engineering/node_modules/uuid/dist/umd/uuid.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(r,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((r="undefined"!=typeof globalThis?globalThis:r||self).uuid={})}(this,(function(r){"use strict";var e,n=new Uint8Array(16);function t(){if(!e&&!(e="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return e(n)}var o=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function a(r){return"string"==typeof r&&o.test(r)}for(var i,u,f=[],s=0;s<256;++s)f.push((s+256).toString(16).substr(1));function c(r){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=(f[r[e+0]]+f[r[e+1]]+f[r[e+2]]+f[r[e+3]]+"-"+f[r[e+4]]+f[r[e+5]]+"-"+f[r[e+6]]+f[r[e+7]]+"-"+f[r[e+8]]+f[r[e+9]]+"-"+f[r[e+10]]+f[r[e+11]]+f[r[e+12]]+f[r[e+13]]+f[r[e+14]]+f[r[e+15]]).toLowerCase();if(!a(n))throw TypeError("Stringified UUID is invalid");return n}var l=0,d=0;function v(r){if(!a(r))throw TypeError("Invalid UUID");var e,n=new Uint8Array(16);return n[0]=(e=parseInt(r.slice(0,8),16))>>>24,n[1]=e>>>16&255,n[2]=e>>>8&255,n[3]=255&e,n[4]=(e=parseInt(r.slice(9,13),16))>>>8,n[5]=255&e,n[6]=(e=parseInt(r.slice(14,18),16))>>>8,n[7]=255&e,n[8]=(e=parseInt(r.slice(19,23),16))>>>8,n[9]=255&e,n[10]=(e=parseInt(r.slice(24,36),16))/1099511627776&255,n[11]=e/4294967296&255,n[12]=e>>>24&255,n[13]=e>>>16&255,n[14]=e>>>8&255,n[15]=255&e,n}function p(r,e,n){function t(r,t,o,a){if("string"==typeof r&&(r=function(r){r=unescape(encodeURIComponent(r));for(var e=[],n=0;n>>9<<4)+1}function y(r,e){var n=(65535&r)+(65535&e);return(r>>16)+(e>>16)+(n>>16)<<16|65535&n}function g(r,e,n,t,o,a){return y((i=y(y(e,r),y(t,a)))<<(u=o)|i>>>32-u,n);var i,u}function m(r,e,n,t,o,a,i){return g(e&n|~e&t,r,e,o,a,i)}function w(r,e,n,t,o,a,i){return g(e&t|n&~t,r,e,o,a,i)}function b(r,e,n,t,o,a,i){return g(e^n^t,r,e,o,a,i)}function A(r,e,n,t,o,a,i){return g(n^(e|~t),r,e,o,a,i)}var U=p("v3",48,(function(r){if("string"==typeof r){var e=unescape(encodeURIComponent(r));r=new Uint8Array(e.length);for(var n=0;n>5]>>>o%32&255,i=parseInt(t.charAt(a>>>4&15)+t.charAt(15&a),16);e.push(i)}return e}(function(r,e){r[e>>5]|=128<>5]|=(255&r[t/8])<>>32-e}var R=p("v5",80,(function(r){var e=[1518500249,1859775393,2400959708,3395469782],n=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof r){var t=unescape(encodeURIComponent(r));r=[];for(var o=0;o>>0;w=m,m=g,g=C(y,30)>>>0,y=h,h=U}n[0]=n[0]+h>>>0,n[1]=n[1]+y>>>0,n[2]=n[2]+g>>>0,n[3]=n[3]+m>>>0,n[4]=n[4]+w>>>0}return[n[0]>>24&255,n[0]>>16&255,n[0]>>8&255,255&n[0],n[1]>>24&255,n[1]>>16&255,n[1]>>8&255,255&n[1],n[2]>>24&255,n[2]>>16&255,n[2]>>8&255,255&n[2],n[3]>>24&255,n[3]>>16&255,n[3]>>8&255,255&n[3],n[4]>>24&255,n[4]>>16&255,n[4]>>8&255,255&n[4]]}));r.NIL="00000000-0000-0000-0000-000000000000",r.parse=v,r.stringify=c,r.v1=function(r,e,n){var o=e&&n||0,a=e||new Array(16),f=(r=r||{}).node||i,s=void 0!==r.clockseq?r.clockseq:u;if(null==f||null==s){var v=r.random||(r.rng||t)();null==f&&(f=i=[1|v[0],v[1],v[2],v[3],v[4],v[5]]),null==s&&(s=u=16383&(v[6]<<8|v[7]))}var p=void 0!==r.msecs?r.msecs:Date.now(),h=void 0!==r.nsecs?r.nsecs:d+1,y=p-l+(h-d)/1e4;if(y<0&&void 0===r.clockseq&&(s=s+1&16383),(y<0||p>l)&&void 0===r.nsecs&&(h=0),h>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");l=p,d=h,u=s;var g=(1e4*(268435455&(p+=122192928e5))+h)%4294967296;a[o++]=g>>>24&255,a[o++]=g>>>16&255,a[o++]=g>>>8&255,a[o++]=255&g;var m=p/4294967296*1e4&268435455;a[o++]=m>>>8&255,a[o++]=255&m,a[o++]=m>>>24&15|16,a[o++]=m>>>16&255,a[o++]=s>>>8|128,a[o++]=255&s;for(var w=0;w<6;++w)a[o+w]=f[w];return e||c(a)},r.v3=U,r.v4=function(r,e,n){var o=(r=r||{}).random||(r.rng||t)();if(o[6]=15&o[6]|64,o[8]=63&o[8]|128,e){n=n||0;for(var a=0;a<16;++a)e[n+a]=o[a];return e}return c(o)},r.v5=R,r.validate=a,r.version=function(r){if(!a(r))throw TypeError("Invalid UUID");return parseInt(r.substr(14,1),16)},Object.defineProperty(r,"__esModule",{value:!0})})); \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/umd/uuidNIL.min.js b/reverse_engineering/node_modules/uuid/dist/umd/uuidNIL.min.js deleted file mode 100644 index 30b28a7..0000000 --- a/reverse_engineering/node_modules/uuid/dist/umd/uuidNIL.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e="undefined"!=typeof globalThis?globalThis:e||self).uuidNIL=n()}(this,(function(){"use strict";return"00000000-0000-0000-0000-000000000000"})); \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/umd/uuidParse.min.js b/reverse_engineering/node_modules/uuid/dist/umd/uuidParse.min.js deleted file mode 100644 index d48ea6a..0000000 --- a/reverse_engineering/node_modules/uuid/dist/umd/uuidParse.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e="undefined"!=typeof globalThis?globalThis:e||self).uuidParse=n()}(this,(function(){"use strict";var e=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;return function(n){if(!function(n){return"string"==typeof n&&e.test(n)}(n))throw TypeError("Invalid UUID");var t,i=new Uint8Array(16);return i[0]=(t=parseInt(n.slice(0,8),16))>>>24,i[1]=t>>>16&255,i[2]=t>>>8&255,i[3]=255&t,i[4]=(t=parseInt(n.slice(9,13),16))>>>8,i[5]=255&t,i[6]=(t=parseInt(n.slice(14,18),16))>>>8,i[7]=255&t,i[8]=(t=parseInt(n.slice(19,23),16))>>>8,i[9]=255&t,i[10]=(t=parseInt(n.slice(24,36),16))/1099511627776&255,i[11]=t/4294967296&255,i[12]=t>>>24&255,i[13]=t>>>16&255,i[14]=t>>>8&255,i[15]=255&t,i}})); \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/umd/uuidStringify.min.js b/reverse_engineering/node_modules/uuid/dist/umd/uuidStringify.min.js deleted file mode 100644 index fd39adc..0000000 --- a/reverse_engineering/node_modules/uuid/dist/umd/uuidStringify.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).uuidStringify=t()}(this,(function(){"use strict";var e=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function t(t){return"string"==typeof t&&e.test(t)}for(var i=[],n=0;n<256;++n)i.push((n+256).toString(16).substr(1));return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,f=(i[e[n+0]]+i[e[n+1]]+i[e[n+2]]+i[e[n+3]]+"-"+i[e[n+4]]+i[e[n+5]]+"-"+i[e[n+6]]+i[e[n+7]]+"-"+i[e[n+8]]+i[e[n+9]]+"-"+i[e[n+10]]+i[e[n+11]]+i[e[n+12]]+i[e[n+13]]+i[e[n+14]]+i[e[n+15]]).toLowerCase();if(!t(f))throw TypeError("Stringified UUID is invalid");return f}})); \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/umd/uuidValidate.min.js b/reverse_engineering/node_modules/uuid/dist/umd/uuidValidate.min.js deleted file mode 100644 index 378e5b9..0000000 --- a/reverse_engineering/node_modules/uuid/dist/umd/uuidValidate.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).uuidValidate=t()}(this,(function(){"use strict";var e=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;return function(t){return"string"==typeof t&&e.test(t)}})); \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/umd/uuidVersion.min.js b/reverse_engineering/node_modules/uuid/dist/umd/uuidVersion.min.js deleted file mode 100644 index 274bb09..0000000 --- a/reverse_engineering/node_modules/uuid/dist/umd/uuidVersion.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).uuidVersion=t()}(this,(function(){"use strict";var e=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;return function(t){if(!function(t){return"string"==typeof t&&e.test(t)}(t))throw TypeError("Invalid UUID");return parseInt(t.substr(14,1),16)}})); \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/umd/uuidv1.min.js b/reverse_engineering/node_modules/uuid/dist/umd/uuidv1.min.js deleted file mode 100644 index 2622889..0000000 --- a/reverse_engineering/node_modules/uuid/dist/umd/uuidv1.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o():"function"==typeof define&&define.amd?define(o):(e="undefined"!=typeof globalThis?globalThis:e||self).uuidv1=o()}(this,(function(){"use strict";var e,o=new Uint8Array(16);function t(){if(!e&&!(e="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return e(o)}var n=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function r(e){return"string"==typeof e&&n.test(e)}for(var i,u,s=[],a=0;a<256;++a)s.push((a+256).toString(16).substr(1));var d=0,f=0;return function(e,o,n){var a=o&&n||0,c=o||new Array(16),l=(e=e||{}).node||i,p=void 0!==e.clockseq?e.clockseq:u;if(null==l||null==p){var v=e.random||(e.rng||t)();null==l&&(l=i=[1|v[0],v[1],v[2],v[3],v[4],v[5]]),null==p&&(p=u=16383&(v[6]<<8|v[7]))}var y=void 0!==e.msecs?e.msecs:Date.now(),m=void 0!==e.nsecs?e.nsecs:f+1,g=y-d+(m-f)/1e4;if(g<0&&void 0===e.clockseq&&(p=p+1&16383),(g<0||y>d)&&void 0===e.nsecs&&(m=0),m>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");d=y,f=m,u=p;var h=(1e4*(268435455&(y+=122192928e5))+m)%4294967296;c[a++]=h>>>24&255,c[a++]=h>>>16&255,c[a++]=h>>>8&255,c[a++]=255&h;var w=y/4294967296*1e4&268435455;c[a++]=w>>>8&255,c[a++]=255&w,c[a++]=w>>>24&15|16,c[a++]=w>>>16&255,c[a++]=p>>>8|128,c[a++]=255&p;for(var b=0;b<6;++b)c[a+b]=l[b];return o||function(e){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(s[e[o+0]]+s[e[o+1]]+s[e[o+2]]+s[e[o+3]]+"-"+s[e[o+4]]+s[e[o+5]]+"-"+s[e[o+6]]+s[e[o+7]]+"-"+s[e[o+8]]+s[e[o+9]]+"-"+s[e[o+10]]+s[e[o+11]]+s[e[o+12]]+s[e[o+13]]+s[e[o+14]]+s[e[o+15]]).toLowerCase();if(!r(t))throw TypeError("Stringified UUID is invalid");return t}(c)}})); \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/umd/uuidv3.min.js b/reverse_engineering/node_modules/uuid/dist/umd/uuidv3.min.js deleted file mode 100644 index 8d37b62..0000000 --- a/reverse_engineering/node_modules/uuid/dist/umd/uuidv3.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(n,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):(n="undefined"!=typeof globalThis?globalThis:n||self).uuidv3=r()}(this,(function(){"use strict";var n=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function r(r){return"string"==typeof r&&n.test(r)}for(var e=[],t=0;t<256;++t)e.push((t+256).toString(16).substr(1));function i(n){return 14+(n+64>>>9<<4)+1}function o(n,r){var e=(65535&n)+(65535&r);return(n>>16)+(r>>16)+(e>>16)<<16|65535&e}function a(n,r,e,t,i,a){return o((f=o(o(r,n),o(t,a)))<<(u=i)|f>>>32-u,e);var f,u}function f(n,r,e,t,i,o,f){return a(r&e|~r&t,n,r,i,o,f)}function u(n,r,e,t,i,o,f){return a(r&t|e&~t,n,r,i,o,f)}function c(n,r,e,t,i,o,f){return a(r^e^t,n,r,i,o,f)}function s(n,r,e,t,i,o,f){return a(e^(r|~t),n,r,i,o,f)}return function(n,t,i){function o(n,o,a,f){if("string"==typeof n&&(n=function(n){n=unescape(encodeURIComponent(n));for(var r=[],e=0;e>>24,t[1]=e>>>16&255,t[2]=e>>>8&255,t[3]=255&e,t[4]=(e=parseInt(n.slice(9,13),16))>>>8,t[5]=255&e,t[6]=(e=parseInt(n.slice(14,18),16))>>>8,t[7]=255&e,t[8]=(e=parseInt(n.slice(19,23),16))>>>8,t[9]=255&e,t[10]=(e=parseInt(n.slice(24,36),16))/1099511627776&255,t[11]=e/4294967296&255,t[12]=e>>>24&255,t[13]=e>>>16&255,t[14]=e>>>8&255,t[15]=255&e,t}(o)),16!==o.length)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");var u=new Uint8Array(16+n.length);if(u.set(o),u.set(n,o.length),(u=i(u))[6]=15&u[6]|t,u[8]=63&u[8]|128,a){f=f||0;for(var c=0;c<16;++c)a[f+c]=u[c];return a}return function(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=(e[n[t+0]]+e[n[t+1]]+e[n[t+2]]+e[n[t+3]]+"-"+e[n[t+4]]+e[n[t+5]]+"-"+e[n[t+6]]+e[n[t+7]]+"-"+e[n[t+8]]+e[n[t+9]]+"-"+e[n[t+10]]+e[n[t+11]]+e[n[t+12]]+e[n[t+13]]+e[n[t+14]]+e[n[t+15]]).toLowerCase();if(!r(i))throw TypeError("Stringified UUID is invalid");return i}(u)}try{o.name=n}catch(n){}return o.DNS="6ba7b810-9dad-11d1-80b4-00c04fd430c8",o.URL="6ba7b811-9dad-11d1-80b4-00c04fd430c8",o}("v3",48,(function(n){if("string"==typeof n){var r=unescape(encodeURIComponent(n));n=new Uint8Array(r.length);for(var e=0;e>5]>>>i%32&255,a=parseInt(t.charAt(o>>>4&15)+t.charAt(15&o),16);r.push(a)}return r}(function(n,r){n[r>>5]|=128<>5]|=(255&n[t/8])<1&&void 0!==arguments[1]?arguments[1]:0,o=(i[t[e+0]]+i[t[e+1]]+i[t[e+2]]+i[t[e+3]]+"-"+i[t[e+4]]+i[t[e+5]]+"-"+i[t[e+6]]+i[t[e+7]]+"-"+i[t[e+8]]+i[t[e+9]]+"-"+i[t[e+10]]+i[t[e+11]]+i[t[e+12]]+i[t[e+13]]+i[t[e+14]]+i[t[e+15]]).toLowerCase();if(!r(o))throw TypeError("Stringified UUID is invalid");return o}(u)}})); \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/umd/uuidv5.min.js b/reverse_engineering/node_modules/uuid/dist/umd/uuidv5.min.js deleted file mode 100644 index ba6fc63..0000000 --- a/reverse_engineering/node_modules/uuid/dist/umd/uuidv5.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).uuidv5=e()}(this,(function(){"use strict";var r=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function e(e){return"string"==typeof e&&r.test(e)}for(var t=[],n=0;n<256;++n)t.push((n+256).toString(16).substr(1));function a(r,e,t,n){switch(r){case 0:return e&t^~e&n;case 1:return e^t^n;case 2:return e&t^e&n^t&n;case 3:return e^t^n}}function o(r,e){return r<>>32-e}return function(r,n,a){function o(r,o,i,f){if("string"==typeof r&&(r=function(r){r=unescape(encodeURIComponent(r));for(var e=[],t=0;t>>24,n[1]=t>>>16&255,n[2]=t>>>8&255,n[3]=255&t,n[4]=(t=parseInt(r.slice(9,13),16))>>>8,n[5]=255&t,n[6]=(t=parseInt(r.slice(14,18),16))>>>8,n[7]=255&t,n[8]=(t=parseInt(r.slice(19,23),16))>>>8,n[9]=255&t,n[10]=(t=parseInt(r.slice(24,36),16))/1099511627776&255,n[11]=t/4294967296&255,n[12]=t>>>24&255,n[13]=t>>>16&255,n[14]=t>>>8&255,n[15]=255&t,n}(o)),16!==o.length)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");var s=new Uint8Array(16+r.length);if(s.set(o),s.set(r,o.length),(s=a(s))[6]=15&s[6]|n,s[8]=63&s[8]|128,i){f=f||0;for(var u=0;u<16;++u)i[f+u]=s[u];return i}return function(r){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,a=(t[r[n+0]]+t[r[n+1]]+t[r[n+2]]+t[r[n+3]]+"-"+t[r[n+4]]+t[r[n+5]]+"-"+t[r[n+6]]+t[r[n+7]]+"-"+t[r[n+8]]+t[r[n+9]]+"-"+t[r[n+10]]+t[r[n+11]]+t[r[n+12]]+t[r[n+13]]+t[r[n+14]]+t[r[n+15]]).toLowerCase();if(!e(a))throw TypeError("Stringified UUID is invalid");return a}(s)}try{o.name=r}catch(r){}return o.DNS="6ba7b810-9dad-11d1-80b4-00c04fd430c8",o.URL="6ba7b811-9dad-11d1-80b4-00c04fd430c8",o}("v5",80,(function(r){var e=[1518500249,1859775393,2400959708,3395469782],t=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof r){var n=unescape(encodeURIComponent(r));r=[];for(var i=0;i>>0;A=U,U=w,w=o(b,30)>>>0,b=g,g=C}t[0]=t[0]+g>>>0,t[1]=t[1]+b>>>0,t[2]=t[2]+w>>>0,t[3]=t[3]+U>>>0,t[4]=t[4]+A>>>0}return[t[0]>>24&255,t[0]>>16&255,t[0]>>8&255,255&t[0],t[1]>>24&255,t[1]>>16&255,t[1]>>8&255,255&t[1],t[2]>>24&255,t[2]>>16&255,t[2]>>8&255,255&t[2],t[3]>>24&255,t[3]>>16&255,t[3]>>8&255,255&t[3],t[4]>>24&255,t[4]>>16&255,t[4]>>8&255,255&t[4]]}))})); \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/uuid-bin.js b/reverse_engineering/node_modules/uuid/dist/uuid-bin.js deleted file mode 100644 index 50a7a9f..0000000 --- a/reverse_engineering/node_modules/uuid/dist/uuid-bin.js +++ /dev/null @@ -1,85 +0,0 @@ -"use strict"; - -var _assert = _interopRequireDefault(require("assert")); - -var _v = _interopRequireDefault(require("./v1.js")); - -var _v2 = _interopRequireDefault(require("./v3.js")); - -var _v3 = _interopRequireDefault(require("./v4.js")); - -var _v4 = _interopRequireDefault(require("./v5.js")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function usage() { - console.log('Usage:'); - console.log(' uuid'); - console.log(' uuid v1'); - console.log(' uuid v3 '); - console.log(' uuid v4'); - console.log(' uuid v5 '); - console.log(' uuid --help'); - console.log('\nNote: may be "URL" or "DNS" to use the corresponding UUIDs defined by RFC4122'); -} - -const args = process.argv.slice(2); - -if (args.indexOf('--help') >= 0) { - usage(); - process.exit(0); -} - -const version = args.shift() || 'v4'; - -switch (version) { - case 'v1': - console.log((0, _v.default)()); - break; - - case 'v3': - { - const name = args.shift(); - let namespace = args.shift(); - (0, _assert.default)(name != null, 'v3 name not specified'); - (0, _assert.default)(namespace != null, 'v3 namespace not specified'); - - if (namespace === 'URL') { - namespace = _v2.default.URL; - } - - if (namespace === 'DNS') { - namespace = _v2.default.DNS; - } - - console.log((0, _v2.default)(name, namespace)); - break; - } - - case 'v4': - console.log((0, _v3.default)()); - break; - - case 'v5': - { - const name = args.shift(); - let namespace = args.shift(); - (0, _assert.default)(name != null, 'v5 name not specified'); - (0, _assert.default)(namespace != null, 'v5 namespace not specified'); - - if (namespace === 'URL') { - namespace = _v4.default.URL; - } - - if (namespace === 'DNS') { - namespace = _v4.default.DNS; - } - - console.log((0, _v4.default)(name, namespace)); - break; - } - - default: - usage(); - process.exit(1); -} \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/v1.js b/reverse_engineering/node_modules/uuid/dist/v1.js deleted file mode 100644 index abb9b3d..0000000 --- a/reverse_engineering/node_modules/uuid/dist/v1.js +++ /dev/null @@ -1,107 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; - -var _rng = _interopRequireDefault(require("./rng.js")); - -var _stringify = _interopRequireDefault(require("./stringify.js")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -// **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html -let _nodeId; - -let _clockseq; // Previous uuid creation time - - -let _lastMSecs = 0; -let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details - -function v1(options, buf, offset) { - let i = buf && offset || 0; - const b = buf || new Array(16); - options = options || {}; - let node = options.node || _nodeId; - let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 - - if (node == null || clockseq == null) { - const seedBytes = options.random || (options.rng || _rng.default)(); - - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; - } - - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. - - - let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock - - let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) - - const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression - - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval - - - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } // Per 4.2.1.2 Throw error if too many uuids are requested - - - if (nsecs >= 10000) { - throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); - } - - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - - msecs += 12219292800000; // `time_low` - - const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; // `time_mid` - - const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; // `time_high_and_version` - - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version - - b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) - - b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` - - b[i++] = clockseq & 0xff; // `node` - - for (let n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } - - return buf || (0, _stringify.default)(b); -} - -var _default = v1; -exports.default = _default; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/v3.js b/reverse_engineering/node_modules/uuid/dist/v3.js deleted file mode 100644 index 6b47ff5..0000000 --- a/reverse_engineering/node_modules/uuid/dist/v3.js +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; - -var _v = _interopRequireDefault(require("./v35.js")); - -var _md = _interopRequireDefault(require("./md5.js")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -const v3 = (0, _v.default)('v3', 0x30, _md.default); -var _default = v3; -exports.default = _default; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/v35.js b/reverse_engineering/node_modules/uuid/dist/v35.js deleted file mode 100644 index f784c63..0000000 --- a/reverse_engineering/node_modules/uuid/dist/v35.js +++ /dev/null @@ -1,78 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = _default; -exports.URL = exports.DNS = void 0; - -var _stringify = _interopRequireDefault(require("./stringify.js")); - -var _parse = _interopRequireDefault(require("./parse.js")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - - const bytes = []; - - for (let i = 0; i < str.length; ++i) { - bytes.push(str.charCodeAt(i)); - } - - return bytes; -} - -const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; -exports.DNS = DNS; -const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; -exports.URL = URL; - -function _default(name, version, hashfunc) { - function generateUUID(value, namespace, buf, offset) { - if (typeof value === 'string') { - value = stringToBytes(value); - } - - if (typeof namespace === 'string') { - namespace = (0, _parse.default)(namespace); - } - - if (namespace.length !== 16) { - throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); - } // Compute hash of namespace and value, Per 4.3 - // Future: Use spread syntax when supported on all platforms, e.g. `bytes = - // hashfunc([...namespace, ... value])` - - - let bytes = new Uint8Array(16 + value.length); - bytes.set(namespace); - bytes.set(value, namespace.length); - bytes = hashfunc(bytes); - bytes[6] = bytes[6] & 0x0f | version; - bytes[8] = bytes[8] & 0x3f | 0x80; - - if (buf) { - offset = offset || 0; - - for (let i = 0; i < 16; ++i) { - buf[offset + i] = bytes[i]; - } - - return buf; - } - - return (0, _stringify.default)(bytes); - } // Function#name is not settable on some platforms (#270) - - - try { - generateUUID.name = name; // eslint-disable-next-line no-empty - } catch (err) {} // For CommonJS default export support - - - generateUUID.DNS = DNS; - generateUUID.URL = URL; - return generateUUID; -} \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/v4.js b/reverse_engineering/node_modules/uuid/dist/v4.js deleted file mode 100644 index 838ce0b..0000000 --- a/reverse_engineering/node_modules/uuid/dist/v4.js +++ /dev/null @@ -1,37 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; - -var _rng = _interopRequireDefault(require("./rng.js")); - -var _stringify = _interopRequireDefault(require("./stringify.js")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function v4(options, buf, offset) { - options = options || {}; - - const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - - - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided - - if (buf) { - offset = offset || 0; - - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - - return buf; - } - - return (0, _stringify.default)(rnds); -} - -var _default = v4; -exports.default = _default; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/v5.js b/reverse_engineering/node_modules/uuid/dist/v5.js deleted file mode 100644 index 99d615e..0000000 --- a/reverse_engineering/node_modules/uuid/dist/v5.js +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; - -var _v = _interopRequireDefault(require("./v35.js")); - -var _sha = _interopRequireDefault(require("./sha1.js")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -const v5 = (0, _v.default)('v5', 0x50, _sha.default); -var _default = v5; -exports.default = _default; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/validate.js b/reverse_engineering/node_modules/uuid/dist/validate.js deleted file mode 100644 index fd05215..0000000 --- a/reverse_engineering/node_modules/uuid/dist/validate.js +++ /dev/null @@ -1,17 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; - -var _regex = _interopRequireDefault(require("./regex.js")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function validate(uuid) { - return typeof uuid === 'string' && _regex.default.test(uuid); -} - -var _default = validate; -exports.default = _default; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/dist/version.js b/reverse_engineering/node_modules/uuid/dist/version.js deleted file mode 100644 index b72949c..0000000 --- a/reverse_engineering/node_modules/uuid/dist/version.js +++ /dev/null @@ -1,21 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; - -var _validate = _interopRequireDefault(require("./validate.js")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function version(uuid) { - if (!(0, _validate.default)(uuid)) { - throw TypeError('Invalid UUID'); - } - - return parseInt(uuid.substr(14, 1), 16); -} - -var _default = version; -exports.default = _default; \ No newline at end of file diff --git a/reverse_engineering/node_modules/uuid/package.json b/reverse_engineering/node_modules/uuid/package.json deleted file mode 100644 index 41c047b..0000000 --- a/reverse_engineering/node_modules/uuid/package.json +++ /dev/null @@ -1,165 +0,0 @@ -{ - "_from": "uuid@^8.0.0", - "_id": "uuid@8.3.2", - "_inBundle": false, - "_integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "_location": "/uuid", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "uuid@^8.0.0", - "name": "uuid", - "escapedName": "uuid", - "rawSpec": "^8.0.0", - "saveSpec": null, - "fetchSpec": "^8.0.0" - }, - "_requiredBy": [ - "/@google-cloud/bigquery", - "/teeny-request" - ], - "_resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "_shasum": "80d5b5ced271bb9af6c445f21a1a04c606cefbe2", - "_spec": "uuid@^8.0.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/@google-cloud/bigquery", - "bin": { - "uuid": "dist/bin/uuid" - }, - "browser": { - "./dist/md5.js": "./dist/md5-browser.js", - "./dist/rng.js": "./dist/rng-browser.js", - "./dist/sha1.js": "./dist/sha1-browser.js", - "./dist/esm-node/index.js": "./dist/esm-browser/index.js" - }, - "bugs": { - "url": "https://github.com/uuidjs/uuid/issues" - }, - "bundleDependencies": false, - "commitlint": { - "extends": [ - "@commitlint/config-conventional" - ] - }, - "deprecated": false, - "description": "RFC4122 (v1, v4, and v5) UUIDs", - "devDependencies": { - "@babel/cli": "7.11.6", - "@babel/core": "7.11.6", - "@babel/preset-env": "7.11.5", - "@commitlint/cli": "11.0.0", - "@commitlint/config-conventional": "11.0.0", - "@rollup/plugin-node-resolve": "9.0.0", - "babel-eslint": "10.1.0", - "bundlewatch": "0.3.1", - "eslint": "7.10.0", - "eslint-config-prettier": "6.12.0", - "eslint-config-standard": "14.1.1", - "eslint-plugin-import": "2.22.1", - "eslint-plugin-node": "11.1.0", - "eslint-plugin-prettier": "3.1.4", - "eslint-plugin-promise": "4.2.1", - "eslint-plugin-standard": "4.0.1", - "husky": "4.3.0", - "jest": "25.5.4", - "lint-staged": "10.4.0", - "npm-run-all": "4.1.5", - "optional-dev-dependency": "2.0.1", - "prettier": "2.1.2", - "random-seed": "0.3.0", - "rollup": "2.28.2", - "rollup-plugin-terser": "7.0.2", - "runmd": "1.3.2", - "standard-version": "9.0.0" - }, - "exports": { - ".": { - "node": { - "module": "./dist/esm-node/index.js", - "require": "./dist/index.js", - "import": "./wrapper.mjs" - }, - "default": "./dist/esm-browser/index.js" - }, - "./package.json": "./package.json" - }, - "files": [ - "CHANGELOG.md", - "CONTRIBUTING.md", - "LICENSE.md", - "README.md", - "dist", - "wrapper.mjs" - ], - "homepage": "https://github.com/uuidjs/uuid#readme", - "husky": { - "hooks": { - "commit-msg": "commitlint -E HUSKY_GIT_PARAMS", - "pre-commit": "lint-staged" - } - }, - "keywords": [ - "uuid", - "guid", - "rfc4122" - ], - "license": "MIT", - "lint-staged": { - "*.{js,jsx,json,md}": [ - "prettier --write" - ], - "*.{js,jsx}": [ - "eslint --fix" - ] - }, - "main": "./dist/index.js", - "module": "./dist/esm-node/index.js", - "name": "uuid", - "optionalDevDependencies": { - "@wdio/browserstack-service": "6.4.0", - "@wdio/cli": "6.4.0", - "@wdio/jasmine-framework": "6.4.0", - "@wdio/local-runner": "6.4.0", - "@wdio/spec-reporter": "6.4.0", - "@wdio/static-server-service": "6.4.0", - "@wdio/sync": "6.4.0" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/uuidjs/uuid.git" - }, - "scripts": { - "build": "./scripts/build.sh", - "bundlewatch": "npm run pretest:browser && bundlewatch --config bundlewatch.config.json", - "docs": "( node --version | grep -q 'v12' ) && ( npm run build && runmd --output=README.md README_js.md )", - "docs:diff": "npm run docs && git diff --quiet README.md", - "eslint:check": "eslint src/ test/ examples/ *.js", - "eslint:fix": "eslint --fix src/ test/ examples/ *.js", - "examples:browser:rollup:build": "cd examples/browser-rollup && npm install && npm run build", - "examples:browser:webpack:build": "cd examples/browser-webpack && npm install && npm run build", - "examples:node:commonjs:test": "cd examples/node-commonjs && npm install && npm test", - "examples:node:esmodules:test": "cd examples/node-esmodules && npm install && npm test", - "lint": "npm run eslint:check && npm run prettier:check", - "md": "runmd --watch --output=README.md README_js.md", - "prepack": "npm run build", - "pretest": "[ -n $CI ] || npm run build", - "pretest:benchmark": "npm run build", - "pretest:browser": "optional-dev-dependency && npm run build && npm-run-all --parallel examples:browser:**", - "pretest:node": "npm run build", - "prettier:check": "prettier --ignore-path .prettierignore --check '**/*.{js,jsx,json,md}'", - "prettier:fix": "prettier --ignore-path .prettierignore --write '**/*.{js,jsx,json,md}'", - "release": "standard-version --no-verify", - "test": "BABEL_ENV=commonjs node --throw-deprecation node_modules/.bin/jest test/unit/", - "test:benchmark": "cd examples/benchmark && npm install && npm test", - "test:browser": "wdio run ./wdio.conf.js", - "test:node": "npm-run-all --parallel examples:node:**", - "test:pack": "./scripts/testpack.sh" - }, - "sideEffects": false, - "standard-version": { - "scripts": { - "postchangelog": "prettier --write CHANGELOG.md" - } - }, - "version": "8.3.2" -} diff --git a/reverse_engineering/node_modules/uuid/wrapper.mjs b/reverse_engineering/node_modules/uuid/wrapper.mjs deleted file mode 100644 index c31e9ce..0000000 --- a/reverse_engineering/node_modules/uuid/wrapper.mjs +++ /dev/null @@ -1,10 +0,0 @@ -import uuid from './dist/index.js'; -export const v1 = uuid.v1; -export const v3 = uuid.v3; -export const v4 = uuid.v4; -export const v5 = uuid.v5; -export const NIL = uuid.NIL; -export const version = uuid.version; -export const validate = uuid.validate; -export const stringify = uuid.stringify; -export const parse = uuid.parse; diff --git a/reverse_engineering/node_modules/wrappy/LICENSE b/reverse_engineering/node_modules/wrappy/LICENSE deleted file mode 100644 index 19129e3..0000000 --- a/reverse_engineering/node_modules/wrappy/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -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. diff --git a/reverse_engineering/node_modules/wrappy/README.md b/reverse_engineering/node_modules/wrappy/README.md deleted file mode 100644 index 98eab25..0000000 --- a/reverse_engineering/node_modules/wrappy/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# wrappy - -Callback wrapping utility - -## USAGE - -```javascript -var wrappy = require("wrappy") - -// var wrapper = wrappy(wrapperFunction) - -// make sure a cb is called only once -// See also: http://npm.im/once for this specific use case -var once = wrappy(function (cb) { - var called = false - return function () { - if (called) return - called = true - return cb.apply(this, arguments) - } -}) - -function printBoo () { - console.log('boo') -} -// has some rando property -printBoo.iAmBooPrinter = true - -var onlyPrintOnce = once(printBoo) - -onlyPrintOnce() // prints 'boo' -onlyPrintOnce() // does nothing - -// random property is retained! -assert.equal(onlyPrintOnce.iAmBooPrinter, true) -``` diff --git a/reverse_engineering/node_modules/wrappy/package.json b/reverse_engineering/node_modules/wrappy/package.json deleted file mode 100644 index 834150e..0000000 --- a/reverse_engineering/node_modules/wrappy/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "_from": "wrappy@1", - "_id": "wrappy@1.0.2", - "_inBundle": false, - "_integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "_location": "/wrappy", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "wrappy@1", - "name": "wrappy", - "escapedName": "wrappy", - "rawSpec": "1", - "saveSpec": null, - "fetchSpec": "1" - }, - "_requiredBy": [ - "/once" - ], - "_resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "_shasum": "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f", - "_spec": "wrappy@1", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/once", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "bugs": { - "url": "https://github.com/npm/wrappy/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "Callback wrapping utility", - "devDependencies": { - "tap": "^2.3.1" - }, - "directories": { - "test": "test" - }, - "files": [ - "wrappy.js" - ], - "homepage": "https://github.com/npm/wrappy", - "license": "ISC", - "main": "wrappy.js", - "name": "wrappy", - "repository": { - "type": "git", - "url": "git+https://github.com/npm/wrappy.git" - }, - "scripts": { - "test": "tap --coverage test/*.js" - }, - "version": "1.0.2" -} diff --git a/reverse_engineering/node_modules/wrappy/wrappy.js b/reverse_engineering/node_modules/wrappy/wrappy.js deleted file mode 100644 index bb7e7d6..0000000 --- a/reverse_engineering/node_modules/wrappy/wrappy.js +++ /dev/null @@ -1,33 +0,0 @@ -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - - return wrapper - - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } -} diff --git a/reverse_engineering/node_modules/yallist/LICENSE b/reverse_engineering/node_modules/yallist/LICENSE deleted file mode 100644 index 19129e3..0000000 --- a/reverse_engineering/node_modules/yallist/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -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. diff --git a/reverse_engineering/node_modules/yallist/README.md b/reverse_engineering/node_modules/yallist/README.md deleted file mode 100644 index f586101..0000000 --- a/reverse_engineering/node_modules/yallist/README.md +++ /dev/null @@ -1,204 +0,0 @@ -# yallist - -Yet Another Linked List - -There are many doubly-linked list implementations like it, but this -one is mine. - -For when an array would be too big, and a Map can't be iterated in -reverse order. - - -[![Build Status](https://travis-ci.org/isaacs/yallist.svg?branch=master)](https://travis-ci.org/isaacs/yallist) [![Coverage Status](https://coveralls.io/repos/isaacs/yallist/badge.svg?service=github)](https://coveralls.io/github/isaacs/yallist) - -## basic usage - -```javascript -var yallist = require('yallist') -var myList = yallist.create([1, 2, 3]) -myList.push('foo') -myList.unshift('bar') -// of course pop() and shift() are there, too -console.log(myList.toArray()) // ['bar', 1, 2, 3, 'foo'] -myList.forEach(function (k) { - // walk the list head to tail -}) -myList.forEachReverse(function (k, index, list) { - // walk the list tail to head -}) -var myDoubledList = myList.map(function (k) { - return k + k -}) -// now myDoubledList contains ['barbar', 2, 4, 6, 'foofoo'] -// mapReverse is also a thing -var myDoubledListReverse = myList.mapReverse(function (k) { - return k + k -}) // ['foofoo', 6, 4, 2, 'barbar'] - -var reduced = myList.reduce(function (set, entry) { - set += entry - return set -}, 'start') -console.log(reduced) // 'startfoo123bar' -``` - -## api - -The whole API is considered "public". - -Functions with the same name as an Array method work more or less the -same way. - -There's reverse versions of most things because that's the point. - -### Yallist - -Default export, the class that holds and manages a list. - -Call it with either a forEach-able (like an array) or a set of -arguments, to initialize the list. - -The Array-ish methods all act like you'd expect. No magic length, -though, so if you change that it won't automatically prune or add -empty spots. - -### Yallist.create(..) - -Alias for Yallist function. Some people like factories. - -#### yallist.head - -The first node in the list - -#### yallist.tail - -The last node in the list - -#### yallist.length - -The number of nodes in the list. (Change this at your peril. It is -not magic like Array length.) - -#### yallist.toArray() - -Convert the list to an array. - -#### yallist.forEach(fn, [thisp]) - -Call a function on each item in the list. - -#### yallist.forEachReverse(fn, [thisp]) - -Call a function on each item in the list, in reverse order. - -#### yallist.get(n) - -Get the data at position `n` in the list. If you use this a lot, -probably better off just using an Array. - -#### yallist.getReverse(n) - -Get the data at position `n`, counting from the tail. - -#### yallist.map(fn, thisp) - -Create a new Yallist with the result of calling the function on each -item. - -#### yallist.mapReverse(fn, thisp) - -Same as `map`, but in reverse. - -#### yallist.pop() - -Get the data from the list tail, and remove the tail from the list. - -#### yallist.push(item, ...) - -Insert one or more items to the tail of the list. - -#### yallist.reduce(fn, initialValue) - -Like Array.reduce. - -#### yallist.reduceReverse - -Like Array.reduce, but in reverse. - -#### yallist.reverse - -Reverse the list in place. - -#### yallist.shift() - -Get the data from the list head, and remove the head from the list. - -#### yallist.slice([from], [to]) - -Just like Array.slice, but returns a new Yallist. - -#### yallist.sliceReverse([from], [to]) - -Just like yallist.slice, but the result is returned in reverse. - -#### yallist.toArray() - -Create an array representation of the list. - -#### yallist.toArrayReverse() - -Create a reversed array representation of the list. - -#### yallist.unshift(item, ...) - -Insert one or more items to the head of the list. - -#### yallist.unshiftNode(node) - -Move a Node object to the front of the list. (That is, pull it out of -wherever it lives, and make it the new head.) - -If the node belongs to a different list, then that list will remove it -first. - -#### yallist.pushNode(node) - -Move a Node object to the end of the list. (That is, pull it out of -wherever it lives, and make it the new tail.) - -If the node belongs to a list already, then that list will remove it -first. - -#### yallist.removeNode(node) - -Remove a node from the list, preserving referential integrity of head -and tail and other nodes. - -Will throw an error if you try to have a list remove a node that -doesn't belong to it. - -### Yallist.Node - -The class that holds the data and is actually the list. - -Call with `var n = new Node(value, previousNode, nextNode)` - -Note that if you do direct operations on Nodes themselves, it's very -easy to get into weird states where the list is broken. Be careful :) - -#### node.next - -The next node in the list. - -#### node.prev - -The previous node in the list. - -#### node.value - -The data the node contains. - -#### node.list - -The list to which this node belongs. (Null if it does not belong to -any list.) diff --git a/reverse_engineering/node_modules/yallist/iterator.js b/reverse_engineering/node_modules/yallist/iterator.js deleted file mode 100644 index d41c97a..0000000 --- a/reverse_engineering/node_modules/yallist/iterator.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict' -module.exports = function (Yallist) { - Yallist.prototype[Symbol.iterator] = function* () { - for (let walker = this.head; walker; walker = walker.next) { - yield walker.value - } - } -} diff --git a/reverse_engineering/node_modules/yallist/package.json b/reverse_engineering/node_modules/yallist/package.json deleted file mode 100644 index c4c808d..0000000 --- a/reverse_engineering/node_modules/yallist/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "_from": "yallist@^4.0.0", - "_id": "yallist@4.0.0", - "_inBundle": false, - "_integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "_location": "/yallist", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "yallist@^4.0.0", - "name": "yallist", - "escapedName": "yallist", - "rawSpec": "^4.0.0", - "saveSpec": null, - "fetchSpec": "^4.0.0" - }, - "_requiredBy": [ - "/lru-cache" - ], - "_resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "_shasum": "9bb92790d9c0effec63be73519e11a35019a3a72", - "_spec": "yallist@^4.0.0", - "_where": "/home/volodymyr/projects/plugins/BigQuery/reverse_engineering/node_modules/lru-cache", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "bugs": { - "url": "https://github.com/isaacs/yallist/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "Yet Another Linked List", - "devDependencies": { - "tap": "^12.1.0" - }, - "directories": { - "test": "test" - }, - "files": [ - "yallist.js", - "iterator.js" - ], - "homepage": "https://github.com/isaacs/yallist#readme", - "license": "ISC", - "main": "yallist.js", - "name": "yallist", - "repository": { - "type": "git", - "url": "git+https://github.com/isaacs/yallist.git" - }, - "scripts": { - "postpublish": "git push origin --all; git push origin --tags", - "postversion": "npm publish", - "preversion": "npm test", - "test": "tap test/*.js --100" - }, - "version": "4.0.0" -} diff --git a/reverse_engineering/node_modules/yallist/yallist.js b/reverse_engineering/node_modules/yallist/yallist.js deleted file mode 100644 index 4e83ab1..0000000 --- a/reverse_engineering/node_modules/yallist/yallist.js +++ /dev/null @@ -1,426 +0,0 @@ -'use strict' -module.exports = Yallist - -Yallist.Node = Node -Yallist.create = Yallist - -function Yallist (list) { - var self = this - if (!(self instanceof Yallist)) { - self = new Yallist() - } - - self.tail = null - self.head = null - self.length = 0 - - if (list && typeof list.forEach === 'function') { - list.forEach(function (item) { - self.push(item) - }) - } else if (arguments.length > 0) { - for (var i = 0, l = arguments.length; i < l; i++) { - self.push(arguments[i]) - } - } - - return self -} - -Yallist.prototype.removeNode = function (node) { - if (node.list !== this) { - throw new Error('removing node which does not belong to this list') - } - - var next = node.next - var prev = node.prev - - if (next) { - next.prev = prev - } - - if (prev) { - prev.next = next - } - - if (node === this.head) { - this.head = next - } - if (node === this.tail) { - this.tail = prev - } - - node.list.length-- - node.next = null - node.prev = null - node.list = null - - return next -} - -Yallist.prototype.unshiftNode = function (node) { - if (node === this.head) { - return - } - - if (node.list) { - node.list.removeNode(node) - } - - var head = this.head - node.list = this - node.next = head - if (head) { - head.prev = node - } - - this.head = node - if (!this.tail) { - this.tail = node - } - this.length++ -} - -Yallist.prototype.pushNode = function (node) { - if (node === this.tail) { - return - } - - if (node.list) { - node.list.removeNode(node) - } - - var tail = this.tail - node.list = this - node.prev = tail - if (tail) { - tail.next = node - } - - this.tail = node - if (!this.head) { - this.head = node - } - this.length++ -} - -Yallist.prototype.push = function () { - for (var i = 0, l = arguments.length; i < l; i++) { - push(this, arguments[i]) - } - return this.length -} - -Yallist.prototype.unshift = function () { - for (var i = 0, l = arguments.length; i < l; i++) { - unshift(this, arguments[i]) - } - return this.length -} - -Yallist.prototype.pop = function () { - if (!this.tail) { - return undefined - } - - var res = this.tail.value - this.tail = this.tail.prev - if (this.tail) { - this.tail.next = null - } else { - this.head = null - } - this.length-- - return res -} - -Yallist.prototype.shift = function () { - if (!this.head) { - return undefined - } - - var res = this.head.value - this.head = this.head.next - if (this.head) { - this.head.prev = null - } else { - this.tail = null - } - this.length-- - return res -} - -Yallist.prototype.forEach = function (fn, thisp) { - thisp = thisp || this - for (var walker = this.head, i = 0; walker !== null; i++) { - fn.call(thisp, walker.value, i, this) - walker = walker.next - } -} - -Yallist.prototype.forEachReverse = function (fn, thisp) { - thisp = thisp || this - for (var walker = this.tail, i = this.length - 1; walker !== null; i--) { - fn.call(thisp, walker.value, i, this) - walker = walker.prev - } -} - -Yallist.prototype.get = function (n) { - for (var i = 0, walker = this.head; walker !== null && i < n; i++) { - // abort out of the list early if we hit a cycle - walker = walker.next - } - if (i === n && walker !== null) { - return walker.value - } -} - -Yallist.prototype.getReverse = function (n) { - for (var i = 0, walker = this.tail; walker !== null && i < n; i++) { - // abort out of the list early if we hit a cycle - walker = walker.prev - } - if (i === n && walker !== null) { - return walker.value - } -} - -Yallist.prototype.map = function (fn, thisp) { - thisp = thisp || this - var res = new Yallist() - for (var walker = this.head; walker !== null;) { - res.push(fn.call(thisp, walker.value, this)) - walker = walker.next - } - return res -} - -Yallist.prototype.mapReverse = function (fn, thisp) { - thisp = thisp || this - var res = new Yallist() - for (var walker = this.tail; walker !== null;) { - res.push(fn.call(thisp, walker.value, this)) - walker = walker.prev - } - return res -} - -Yallist.prototype.reduce = function (fn, initial) { - var acc - var walker = this.head - if (arguments.length > 1) { - acc = initial - } else if (this.head) { - walker = this.head.next - acc = this.head.value - } else { - throw new TypeError('Reduce of empty list with no initial value') - } - - for (var i = 0; walker !== null; i++) { - acc = fn(acc, walker.value, i) - walker = walker.next - } - - return acc -} - -Yallist.prototype.reduceReverse = function (fn, initial) { - var acc - var walker = this.tail - if (arguments.length > 1) { - acc = initial - } else if (this.tail) { - walker = this.tail.prev - acc = this.tail.value - } else { - throw new TypeError('Reduce of empty list with no initial value') - } - - for (var i = this.length - 1; walker !== null; i--) { - acc = fn(acc, walker.value, i) - walker = walker.prev - } - - return acc -} - -Yallist.prototype.toArray = function () { - var arr = new Array(this.length) - for (var i = 0, walker = this.head; walker !== null; i++) { - arr[i] = walker.value - walker = walker.next - } - return arr -} - -Yallist.prototype.toArrayReverse = function () { - var arr = new Array(this.length) - for (var i = 0, walker = this.tail; walker !== null; i++) { - arr[i] = walker.value - walker = walker.prev - } - return arr -} - -Yallist.prototype.slice = function (from, to) { - to = to || this.length - if (to < 0) { - to += this.length - } - from = from || 0 - if (from < 0) { - from += this.length - } - var ret = new Yallist() - if (to < from || to < 0) { - return ret - } - if (from < 0) { - from = 0 - } - if (to > this.length) { - to = this.length - } - for (var i = 0, walker = this.head; walker !== null && i < from; i++) { - walker = walker.next - } - for (; walker !== null && i < to; i++, walker = walker.next) { - ret.push(walker.value) - } - return ret -} - -Yallist.prototype.sliceReverse = function (from, to) { - to = to || this.length - if (to < 0) { - to += this.length - } - from = from || 0 - if (from < 0) { - from += this.length - } - var ret = new Yallist() - if (to < from || to < 0) { - return ret - } - if (from < 0) { - from = 0 - } - if (to > this.length) { - to = this.length - } - for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) { - walker = walker.prev - } - for (; walker !== null && i > from; i--, walker = walker.prev) { - ret.push(walker.value) - } - return ret -} - -Yallist.prototype.splice = function (start, deleteCount, ...nodes) { - if (start > this.length) { - start = this.length - 1 - } - if (start < 0) { - start = this.length + start; - } - - for (var i = 0, walker = this.head; walker !== null && i < start; i++) { - walker = walker.next - } - - var ret = [] - for (var i = 0; walker && i < deleteCount; i++) { - ret.push(walker.value) - walker = this.removeNode(walker) - } - if (walker === null) { - walker = this.tail - } - - if (walker !== this.head && walker !== this.tail) { - walker = walker.prev - } - - for (var i = 0; i < nodes.length; i++) { - walker = insert(this, walker, nodes[i]) - } - return ret; -} - -Yallist.prototype.reverse = function () { - var head = this.head - var tail = this.tail - for (var walker = head; walker !== null; walker = walker.prev) { - var p = walker.prev - walker.prev = walker.next - walker.next = p - } - this.head = tail - this.tail = head - return this -} - -function insert (self, node, value) { - var inserted = node === self.head ? - new Node(value, null, node, self) : - new Node(value, node, node.next, self) - - if (inserted.next === null) { - self.tail = inserted - } - if (inserted.prev === null) { - self.head = inserted - } - - self.length++ - - return inserted -} - -function push (self, item) { - self.tail = new Node(item, self.tail, null, self) - if (!self.head) { - self.head = self.tail - } - self.length++ -} - -function unshift (self, item) { - self.head = new Node(item, null, self.head, self) - if (!self.tail) { - self.tail = self.head - } - self.length++ -} - -function Node (value, prev, next, list) { - if (!(this instanceof Node)) { - return new Node(value, prev, next, list) - } - - this.list = list - this.value = value - - if (prev) { - prev.next = this - this.prev = prev - } else { - this.prev = null - } - - if (next) { - next.prev = this - this.next = next - } else { - this.next = null - } -} - -try { - // add if support for Symbol.iterator is present - require('./iterator.js')(Yallist) -} catch (er) {} diff --git a/reverse_engineering/package.json b/reverse_engineering/package.json deleted file mode 100644 index b5a9ccc..0000000 --- a/reverse_engineering/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "BigQuery", - "version": "1.0.0", - "description": "", - "author": "Hackolade", - "dependencies": { - "@google-cloud/bigquery": "^5.7.1", - "@hackolade/sql-select-statement-parser": "0.0.5" - }, - "installed": true -} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..c5275b0 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,31 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "outDir": "./tscDist", + "allowJs": true, + "checkJs": false, + "target": "ES2016", + "lib": ["ESNext", "DOM"], + "sourceMap": true, + "jsx": "react-jsx", + "moduleResolution": "node", + "experimentalDecorators": true, + "noUnusedParameters": true, + "noUnusedLocals": true, + "noImplicitThis": true, + "noImplicitAny": false, + "alwaysStrict": true, + "skipLibCheck": true, + "module": "ESNext", + "strict": true, + "useUnknownInCatchVariables": true, + "allowSyntheticDefaultImports": true, + "isolatedModules": true, + "resolveJsonModule": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "typeRoots": ["./node_modules/@types", "./types"] + }, + "include": ["reverse_engineering", "forward_engineering"], + "exclude": ["**/node_modules/**", "release/**/*"] +} diff --git a/types/bool.json b/types/bool.json index 36b4b1b..1182249 100644 --- a/types/bool.json +++ b/types/bool.json @@ -11,4 +11,4 @@ "sample": "" }, "hiddenOnEntity": "view" -} \ No newline at end of file +} diff --git a/types/bytes.json b/types/bytes.json index 06c4704..109b263 100644 --- a/types/bytes.json +++ b/types/bytes.json @@ -21,4 +21,4 @@ "mode": "binary" } ] -} \ No newline at end of file +} diff --git a/types/date.json b/types/date.json index d585bdf..6ba899f 100644 --- a/types/date.json +++ b/types/date.json @@ -16,8 +16,10 @@ "format": "", "sample": "" }, - "descriptor": [{ - "schema": {}, - "format": "YYYY-MM-DD" - }] -} \ No newline at end of file + "descriptor": [ + { + "schema": {}, + "format": "YYYY-MM-DD" + } + ] +} diff --git a/types/datetime.json b/types/datetime.json index 174bb9a..88c64d9 100644 --- a/types/datetime.json +++ b/types/datetime.json @@ -8,21 +8,23 @@ "defaultValues": { "default": "", "enum": [], - "sample":"", - "comments":"", - "pattern":"", + "sample": "", + "comments": "", + "pattern": "", "format": "" }, "descriptor": [ { "schema": {}, "format": "YYYY-MM-DD hh:mm:ss" - }, { + }, + { "schema": {}, "format": "YYYY-MM-DD hh:mm:ss.nnn" - }, { + }, + { "schema": {}, "format": "YYYY-MM-DD hh:mm:ss.nnnnnn" } ] -} \ No newline at end of file +} diff --git a/types/geography.json b/types/geography.json index ae79abc..abb6232 100644 --- a/types/geography.json +++ b/types/geography.json @@ -14,4 +14,4 @@ "additionalProperties": false, "enum": [] } -} \ No newline at end of file +} diff --git a/types/object.json b/types/object.json new file mode 100644 index 0000000..6d284bc --- /dev/null +++ b/types/object.json @@ -0,0 +1,31 @@ +{ + "name": "object", + "parentType": "document", + "structureType": true, + "hiddenOnEntity": "view", + "defaultValues": { + "subtype": "object", + "properties": [] + }, + "subtypes": { + "object": { + "childValueType": [ + "string", + "bytes", + "numeric", + "bignumeric", + "int64", + "float64", + "bool", + "date", + "time", + "datetime", + "timestamp", + "geography", + "struct", + "array", + "json" + ] + } + } +} diff --git a/types/string.json b/types/string.json index 43b3106..c48e0be 100644 --- a/types/string.json +++ b/types/string.json @@ -19,7 +19,7 @@ }, "descriptor": [ { - "format": "PnYnMnDTnHnMnS" + "format": "PnYnMnDTnHnMnS" }, { "format": "YYYY-MM-DD hh:mm:ss.nnnnnnnnn" @@ -28,4 +28,4 @@ "format": "hh:mm:ss.nnnnnnnnn" } ] -} \ No newline at end of file +} diff --git a/types/struct.json b/types/struct.json index 8268abe..13788e5 100644 --- a/types/struct.json +++ b/types/struct.json @@ -15,4 +15,4 @@ "additionalProperties": false }, "hiddenOnEntity": "view" -} \ No newline at end of file +} diff --git a/types/time.json b/types/time.json index c2e30fd..2ee18e0 100644 --- a/types/time.json +++ b/types/time.json @@ -4,25 +4,27 @@ "dtdAbbreviation": "{tm}", "parentType": "string", "useSample": true, - "sample":"08:45:12.123123", + "sample": "08:45:12.123123", "defaultValues": { "default": "", "minLength": "", "maxLength": "", "enum": [], - "sample":"", + "sample": "", "pattern": "", - "comments":"", + "comments": "", "format": "" }, "descriptor": [ { "schema": {}, "format": "hh:mm:ss" - }, { + }, + { "schema": {}, "format": "hh:mm:ss.nnn" - }, { + }, + { "schema": {}, "format": "hh:mm:ss.nnnnnn" } diff --git a/types/timestamp.json b/types/timestamp.json index 72c3e93..c80c3aa 100644 --- a/types/timestamp.json +++ b/types/timestamp.json @@ -17,9 +17,10 @@ { "schema": {}, "format": "YYYY-MM-DD hh:mm:ss.nnnZ" - }, { + }, + { "schema": {}, "format": "YYYY-MM-DD hh:mm:ss.nnnnnnZ" } ] -} \ No newline at end of file +} diff --git a/validation/reservedWords.json b/validation/reservedWords.json index 0a1386f..23a70b7 100644 --- a/validation/reservedWords.json +++ b/validation/reservedWords.json @@ -1,14 +1,221 @@ { "attribute": [ - "ALL", "ALTER", "AND", "ANY", "AS", "BETWEEN", "BY", "CHECK", "COLUMN", "CONNECT", "CREATE", "CURRENT", "DELETE", "DISTINCT", "DROP", "ELSE", "EXISTS", "FOLLOWING", "FOR", "FROM", "GRANT", "GROUP", "HAVING", "IN", "INSERT", "INTERSECT", "INTO", "IS", "LIKE", "NOT", "NULL", "OF", "ON", "OR", "ORDER", "REVOKE", "ROW", "ROWS", "SAMPLE", "SELECT", "SET", "START", "TABLE", "TABLESAMPLE", "THEN", "TO", "TRIGGER", "UNION", "UNIQUE", "UPDATE", "VALUES", "WHENEVER", "WHERE", "WITH", "ILIKE", "QUALIFY", "REGEXP", "RLIKE", "SOME", "INCREMENT", "MINUS", - "CASE", "CAST", "FALSE", "TRUE", "TRY_CAST", "WHEN", "CONSTRAINT", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP", "CURRENT_USER", "LOCALTIME", "LOCALTIMESTAMP" + "ALL", + "ALTER", + "AND", + "ANY", + "AS", + "BETWEEN", + "BY", + "CHECK", + "COLUMN", + "CONNECT", + "CREATE", + "CURRENT", + "DELETE", + "DISTINCT", + "DROP", + "ELSE", + "EXISTS", + "FOLLOWING", + "FOR", + "FROM", + "GRANT", + "GROUP", + "HAVING", + "IN", + "INSERT", + "INTERSECT", + "INTO", + "IS", + "LIKE", + "NOT", + "NULL", + "OF", + "ON", + "OR", + "ORDER", + "REVOKE", + "ROW", + "ROWS", + "SAMPLE", + "SELECT", + "SET", + "START", + "TABLE", + "TABLESAMPLE", + "THEN", + "TO", + "TRIGGER", + "UNION", + "UNIQUE", + "UPDATE", + "VALUES", + "WHENEVER", + "WHERE", + "WITH", + "ILIKE", + "QUALIFY", + "REGEXP", + "RLIKE", + "SOME", + "INCREMENT", + "MINUS", + "CASE", + "CAST", + "FALSE", + "TRUE", + "TRY_CAST", + "WHEN", + "CONSTRAINT", + "CURRENT_DATE", + "CURRENT_TIME", + "CURRENT_TIMESTAMP", + "CURRENT_USER", + "LOCALTIME", + "LOCALTIMESTAMP" ], "entity": [ - "ALL", "ALTER", "AND", "ANY", "AS", "BETWEEN", "BY", "CHECK", "COLUMN", "CONNECT", "CREATE", "CURRENT", "DELETE", "DISTINCT", "DROP", "ELSE", "EXISTS", "FOLLOWING", "FOR", "FROM", "GRANT", "GROUP", "HAVING", "IN", "INSERT", "INTERSECT", "INTO", "IS", "LIKE", "NOT", "NULL", "OF", "ON", "OR", "ORDER", "REVOKE", "ROW", "ROWS", "SAMPLE", "SELECT", "SET", "START", "TABLE", "TABLESAMPLE", "THEN", "TO", "TRIGGER", "UNION", "UNIQUE", "UPDATE", "VALUES", "WHENEVER", "WHERE", "WITH", "ILIKE", "QUALIFY", "REGEXP", "RLIKE", "SOME", "INCREMENT", "MINUS", - "CROSS", "FULL", "INNER", "JOIN", "LATERAL", "LEFT", "NATURAL", "RIGHT", "USING" + "ALL", + "ALTER", + "AND", + "ANY", + "AS", + "BETWEEN", + "BY", + "CHECK", + "COLUMN", + "CONNECT", + "CREATE", + "CURRENT", + "DELETE", + "DISTINCT", + "DROP", + "ELSE", + "EXISTS", + "FOLLOWING", + "FOR", + "FROM", + "GRANT", + "GROUP", + "HAVING", + "IN", + "INSERT", + "INTERSECT", + "INTO", + "IS", + "LIKE", + "NOT", + "NULL", + "OF", + "ON", + "OR", + "ORDER", + "REVOKE", + "ROW", + "ROWS", + "SAMPLE", + "SELECT", + "SET", + "START", + "TABLE", + "TABLESAMPLE", + "THEN", + "TO", + "TRIGGER", + "UNION", + "UNIQUE", + "UPDATE", + "VALUES", + "WHENEVER", + "WHERE", + "WITH", + "ILIKE", + "QUALIFY", + "REGEXP", + "RLIKE", + "SOME", + "INCREMENT", + "MINUS", + "CROSS", + "FULL", + "INNER", + "JOIN", + "LATERAL", + "LEFT", + "NATURAL", + "RIGHT", + "USING" ], "container": [ - "ALL", "ALTER", "AND", "ANY", "AS", "BETWEEN", "BY", "CHECK", "COLUMN", "CONNECT", "CREATE", "CURRENT", "DELETE", "DISTINCT", "DROP", "ELSE", "EXISTS", "FOLLOWING", "FOR", "FROM", "GRANT", "GROUP", "HAVING", "IN", "INSERT", "INTERSECT", "INTO", "IS", "LIKE", "NOT", "NULL", "OF", "ON", "OR", "ORDER", "REVOKE", "ROW", "ROWS", "SAMPLE", "SELECT", "SET", "START", "TABLE", "TABLESAMPLE", "THEN", "TO", "TRIGGER", "UNION", "UNIQUE", "UPDATE", "VALUES", "WHENEVER", "WHERE", "WITH", "ILIKE", "QUALIFY", "REGEXP", "RLIKE", "SOME", "INCREMENT", "MINUS", - "ACCOUNT", "CONNECTION", "DATABASE", "GSCLUSTER", "ISSUE", "ORGANIZATION", "SCHEMA", "VIEW" + "ALL", + "ALTER", + "AND", + "ANY", + "AS", + "BETWEEN", + "BY", + "CHECK", + "COLUMN", + "CONNECT", + "CREATE", + "CURRENT", + "DELETE", + "DISTINCT", + "DROP", + "ELSE", + "EXISTS", + "FOLLOWING", + "FOR", + "FROM", + "GRANT", + "GROUP", + "HAVING", + "IN", + "INSERT", + "INTERSECT", + "INTO", + "IS", + "LIKE", + "NOT", + "NULL", + "OF", + "ON", + "OR", + "ORDER", + "REVOKE", + "ROW", + "ROWS", + "SAMPLE", + "SELECT", + "SET", + "START", + "TABLE", + "TABLESAMPLE", + "THEN", + "TO", + "TRIGGER", + "UNION", + "UNIQUE", + "UPDATE", + "VALUES", + "WHENEVER", + "WHERE", + "WITH", + "ILIKE", + "QUALIFY", + "REGEXP", + "RLIKE", + "SOME", + "INCREMENT", + "MINUS", + "ACCOUNT", + "CONNECTION", + "DATABASE", + "GSCLUSTER", + "ISSUE", + "ORGANIZATION", + "SCHEMA", + "VIEW" ] -} \ No newline at end of file +} diff --git a/validation/validationRegularExpressions.json b/validation/validationRegularExpressions.json index 7a73a41..0967ef4 100644 --- a/validation/validationRegularExpressions.json +++ b/validation/validationRegularExpressions.json @@ -1,2 +1 @@ -{ -} \ No newline at end of file +{}